<?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>47379</bug_id>
          
          <creation_ts>2010-10-07 14:06:47 -0700</creation_ts>
          <short_desc>Move drawing buffer logic out of GraphicsContext3D and into DrawingBuffer</short_desc>
          <delta_ts>2010-11-08 14:09:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>47501</dependson>
          <blocked>49206</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>291243</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-10-07 14:06:47 -0700</bug_when>
    <thetext>DrawingBuffer is a class which encapsulates an FBO used for drawing and the PlatformLayer used to composite it. It was created for accelerated 2D rendering which uses a shared GraphicsContext3D. But GC3D contains all the logic for supporting a drawing buffer already. So we should remove all that logic and move it into DrawingBuffer. This will make DrawingBuffer a general purpose class that can be used for both 2D and 3D accelerated rendering.

We also need to make the ownership rules between DrawingBuffer and GC3D more clear. Currently you create a DrawingBuffer directly and pass a GC3D to it. The DrawingBuffer keeps a weak pointer to the GC3D which can cause crashes if GC3D is destroyed. DrawingBuffer creation should be moved to GC3D, which should remember all the DrawingBuffers it allocated. When GC3D is destroyed, it should release all the resources of the DrawingBuffer and leave it an empty shell. When DrawingBuffer is destroyed, GC3D should be notified so it can clean up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291261</commentid>
    <comment_count>1</comment_count>
      <attachid>70152</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-10-07 14:26:56 -0700</bug_when>
    <thetext>Created attachment 70152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291265</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-07 14:40:03 -0700</bug_when>
    <thetext>Attachment 70152 did not build on qt:
Build output: http://queues.webkit.org/results/4187137</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291266</commentid>
    <comment_count>3</comment_count>
      <attachid>70154</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-10-07 14:45:21 -0700</bug_when>
    <thetext>Created attachment 70154
Patch fixing Qt build issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291323</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-10-07 16:44:08 -0700</bug_when>
    <thetext>This is a pretty big change in how back buffers are managed for WebGL.  It also puts a lot of mac-specific logic in (for handling multisampling) that I think could be done in a more cross-platform way.  I&apos;d rather we break this up into a few smaller pieces and handle them one at a time:

a.) Add multisampling support to DrawingBuffer.  This should really all be cross-platform code implemented in terms of GraphicsContext3D, not in terms of direct GL calls, and shouldn&apos;t be in platform-specific code.  One particular issue with this patch is it&apos;ll break multisampling for WebGL on all non-mac platforms, which would be a regression for Chromium.

b.) Switch the model of having a default back buffer and compositing layer per GraphicsContext3D to having explicit back buffers (implemented as DrawingBuffers) with their own layers.  This depends on multisampling (or it&apos;d regress behavior) but can be done as a separate patch to make things clearer.

c.) Change ownership models for DB / GC3D

I&apos;m not sure exactly when (c) should happen relative to (a) or (b).  I would like to make any functional changes to DrawingBuffer before changing the WebGL or compositor paths at all to avoid regressions.  The back buffer management code is actually quite subtle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291366</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 18:00:44 -0700</bug_when>
    <thetext>Attachment 70154 did not build on chromium:
Build output: http://queues.webkit.org/results/4155144</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291634</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-10-08 07:12:38 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; This is a pretty big change in how back buffers are managed for WebGL.  It also puts a lot of mac-specific logic in (for handling multisampling) that I think could be done in a more cross-platform way.  I&apos;d rather we break this up into a few smaller pieces and handle them one at a time:
&gt; 
&gt; a.) Add multisampling support to DrawingBuffer.  This should really all be cross-platform code implemented in terms of GraphicsContext3D, not in terms of direct GL calls, and shouldn&apos;t be in platform-specific code.  One particular issue with this patch is it&apos;ll break multisampling for WebGL on all non-mac platforms, which would be a regression for Chromium.

Yeah, I didn&apos;t do it that way because it is pretty platform specific. But I think I can make GC3D calls and do the platform specifics there. How does this regress Chromium if the original code was in Mac specific files?

&gt; 
&gt; b.) Switch the model of having a default back buffer and compositing layer per GraphicsContext3D to having explicit back buffers (implemented as DrawingBuffers) with their own layers.  This depends on multisampling (or it&apos;d regress behavior) but can be done as a separate patch to make things clearer.
&gt; 
&gt; c.) Change ownership models for DB / GC3D
&gt; 
&gt; I&apos;m not sure exactly when (c) should happen relative to (a) or (b).  I would like to make any functional changes to DrawingBuffer before changing the WebGL or compositor paths at all to avoid regressions.  The back buffer management code is actually quite subtle.

You mean my rewrite of DrawingBuffer management? I think the way I have it now is much safer that before. It should protect DrawingBuffers when their GC3D goes away and vice versa.

I&apos;m not sure doing it piecemeal will be helpful for regressions. I admit that this will change more Chromium code that I would like (since I can&apos;t debug Chromium code). What if I make all the changes PLATFORM(MAC) for now, so Chromium is not regressed? Then you can make the appropriate changes on the Chromium side so we are sharing code again.

On the subject of sharing code, are you using GraphicsContext3DOpenGL.cpp? I split that file out with the hopes that it could be used (with a small number of ifdefs) on OpenGL, OpenGL ES and ANGLE implementations. So hopefully we&apos;ll be able to share that code, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291700</commentid>
    <comment_count>7</comment_count>
      <attachid>70259</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-10-08 09:21:04 -0700</bug_when>
    <thetext>Created attachment 70259
Patch fixing Chromium build issue (does not address jamesr comments)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291783</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-08 11:36:12 -0700</bug_when>
    <thetext>Attachment 70259 did not build on chromium:
Build output: http://queues.webkit.org/results/4267018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293186</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-10-12 16:46:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; This is a pretty big change in how back buffers are managed for WebGL.  It also puts a lot of mac-specific logic in (for handling multisampling) that I think could be done in a more cross-platform way.  I&apos;d rather we break this up into a few smaller pieces and handle them one at a time:
&gt; &gt; 
&gt; &gt; a.) Add multisampling support to DrawingBuffer.  This should really all be cross-platform code implemented in terms of GraphicsContext3D, not in terms of direct GL calls, and shouldn&apos;t be in platform-specific code.  One particular issue with this patch is it&apos;ll break multisampling for WebGL on all non-mac platforms, which would be a regression for Chromium.
&gt; 
&gt; Yeah, I didn&apos;t do it that way because it is pretty platform specific. But I think I can make GC3D calls and do the platform specifics there. How does this regress Chromium if the original code was in Mac specific files?

Chromium already implements multisampling for its back buffer, but in its GraphicsContext3D implementation. Chromium&apos;s DrawingBuffer doesn&apos;t yet have multisampling support; adding it is more involved as we need to add extensions to GC3D (or, more precisely, the proposed Extensions class in https://bugs.webkit.org/show_bug.cgi?id=46894) and plumb them through to Chromium.

&gt; &gt; b.) Switch the model of having a default back buffer and compositing layer per GraphicsContext3D to having explicit back buffers (implemented as DrawingBuffers) with their own layers.  This depends on multisampling (or it&apos;d regress behavior) but can be done as a separate patch to make things clearer.
&gt; &gt; 
&gt; &gt; c.) Change ownership models for DB / GC3D
&gt; &gt; 
&gt; &gt; I&apos;m not sure exactly when (c) should happen relative to (a) or (b).  I would like to make any functional changes to DrawingBuffer before changing the WebGL or compositor paths at all to avoid regressions.  The back buffer management code is actually quite subtle.
&gt; 
&gt; You mean my rewrite of DrawingBuffer management? I think the way I have it now is much safer that before. It should protect DrawingBuffers when their GC3D goes away and vice versa.
&gt; 
&gt; I&apos;m not sure doing it piecemeal will be helpful for regressions. I admit that this will change more Chromium code that I would like (since I can&apos;t debug Chromium code). What if I make all the changes PLATFORM(MAC) for now, so Chromium is not regressed? Then you can make the appropriate changes on the Chromium side so we are sharing code again.

I think that if just the changes to WebGLRenderingContext were made #if PLATFORM(MAC), that would be sufficient to avoid regressions in this patch. James can confirm. This would be my preference.

&gt; On the subject of sharing code, are you using GraphicsContext3DOpenGL.cpp? I split that file out with the hopes that it could be used (with a small number of ifdefs) on OpenGL, OpenGL ES and ANGLE implementations. So hopefully we&apos;ll be able to share that code, too.

No, it isn&apos;t possible for Chromium to use that file, at least at this time, because our OpenGL calls are serialized out to a separate process for execution. Instead we impose a virtual call under GraphicsContext3D (via WebGraphicsContext3D) in order to call our command buffer OpenGL library.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306355</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-08 14:09:36 -0800</bug_when>
    <thetext>The drawing buffer lifetime management part of this is handled in https://bugs.webkit.org/show_bug.cgi?id=47501. The other 2 parts: adding multisampling support to DrawingBuffer, and changing GraphicsContext3D to use DrawingBuffers, are handled in https://bugs.webkit.org/show_bug.cgi?id=49206 and https://bugs.webkit.org/show_bug.cgi?id=47379. Closing this bug as obsolete.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70152</attachid>
            <date>2010-10-07 14:26:56 -0700</date>
            <delta_ts>2010-10-07 14:45:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47379-20101007142655.patch</filename>
            <type>text/plain</type>
            <size>52117</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMTAtMTAtMDcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgZHJhd2luZyBidWZmZXIgbG9naWMgb3V0IG9mIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBpbnRv
IERyYXdpbmdCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ3Mzc5CisKKyAgICAgICAgVGhpcyBpcyBqdXN0IHJlc3RydWN0dXJpbmcsIHNvIHRo
ZSBjdXJyZW50IHRlc3RzIGFyZSBzdWZmaWNpZW50LgorCisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3Jt
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3Vi
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQ
aXhlbHMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW1vdmVEcmF3aW5nQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRyYXdpbmdCdWZmZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdC
dWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpiaW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1
ZmZlcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y29tbWl0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1dlYkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUNHTFBp
eGVsRm9ybWF0Rm9yRGlzcGxheU1hc2s6XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUNH
TENvbnRleHRGb3JQaXhlbEZvcm1hdDpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBkcmF3SW5D
R0xDb250ZXh0OnBpeGVsRm9ybWF0OmZvckxheWVyVGltZTpkaXNwbGF5VGltZTpdKToKKyAgICAg
ICAgKC1bV2ViR0xMYXllciBjb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOl0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29w
eVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFk
UGl4ZWxzKToKKwogMjAxMC0xMC0wNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDY5MzEz
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpDYW52YXNSZW5kZXJpbgogICAgIG1fY29udGV4dDNEID0gcC0+c2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QoKTsKICAgICBpZiAobV9jb250ZXh0M0QpIHsKICAgICAgICAgaWYgKEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1
ZmZlciA9IG1fY29udGV4dDNELT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVEcmF3aW5nQnVm
ZmVyKEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CiAgICAgICAg
ICAgICBjLT5zZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgbV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBJbnRTaXplKGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDaGVja2VkSW50LmgiCiAjaW5jbHVkZSAiQ29uc29sZS5o
IgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKQEAgLTEwOSw3ICsxMTAsMTEgQEAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKGZhbHNlKQogewogICAgIEFTU0VSVChtX2NvbnRleHQpOwotCisgICAgCisgICAgLy8g
Q3JlYXRlIHRoZSBEcmF3aW5nQnVmZmVyCisgICAgbV9kcmF3aW5nQnVmZmVyID0gbV9jb250ZXh0
LT5jcmVhdGVEcmF3aW5nQnVmZmVyKEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSkpOworICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIAogICAgIGlu
dCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKICAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogICAgIG1fdGV4dHVyZVVuaXRzLnJl
c2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKQEAgLTEzNiw3ICsxNDEsNyBAQCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgIGNyZWF0ZUZh
bGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQog
ICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52
YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKKyAgICBtX2RyYXdpbmdCdWZmZXIt
PnJlc2V0KEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOwog
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSk7CiB9CiAKQEAgLTE2Nyw3ICsxNzIsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgICAgIHJldHVybjsKICAgICBjYW52YXMoKS0+Y2xl
YXJDb3BpZWRJbWFnZSgpOwogICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwogICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXModGhpcyk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiB9CiAK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QKQEAgLTE3NSw2ICsxODIsMTEgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50
c0ludG9DYQogICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsK
IH0KIAorUGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7
Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCkKIHsKICAgICBpZiAobV9uZWVkc1VwZGF0ZSkgewpAQCAtMTg4LDcgKzIwMCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCAKIAogICAgIC8vIFdlIGRv
bid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3bHkgY3Jl
YXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgogICAgIC8vIGNsZWFyIChhbmQg
dGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBtX2NvbnRleHQtPnJlc2hh
cGUod2lkdGgsIGhlaWdodCk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0
ZXMoaW50IHR5cGUpCkBAIC01MzAsNyArNTQyLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICAKICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOworICAgIAorICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKKyAgICAKICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5v
dCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRl
eC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nKQpAQCAtNTUxLDcgKzU3MywxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29weVRleFN1YkltCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CisKKyAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0
aXNhbXBsaW5nKQorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZHJh
d2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgICAgIAogICAgIG1fY29udGV4dC0+Y29weVRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCk7CisKKyAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYg
KCFtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
CisgICAgCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTk4
Niw3ICsyMDE4LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGwK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRk
cmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBm
b3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICAKICAgICBtX2NvbnRleHQtPnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICAK
KyAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKCFtX2ZyYW1l
YnVmZmVyQmluZGluZykKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICNpZiBQ
TEFURk9STShDRykKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRy
aXZlciBidWcgb24gTWFjIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2Zm
LCByZWFkUGl4ZWxzIHNob3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24g
NjkzMTMpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGljOgogCiAgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lmdl
dCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+cGxh
dGZvcm1MYXllcigpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpOwpAQCAtMzMwLDYgKzMzMCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEltYWdlPiB2
aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyk7CiAKICAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBPd25QdHI8RHJhd2luZ0J1ZmZlcj4g
bV9kcmF3aW5nQnVmZmVyOwogICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsKICAgICBib29sIG1fbWFy
a2VkQ2FudmFzRGlydHk7CiAgICAgLy8gRklYTUU6IEkgdGhpbmsgdGhpcyBpcyBicm9rZW4gLS0g
aXQgZG9lcyBub3QgaW5jcmVtZW50IGFueQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDY5MzEzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5j
bHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKQEAgLTQxLDYgKzQyLDI1
IEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRDb2xvcjE2VG84KHVpbnQxNl8KICAgICByZXR1cm4g
dmFsdWUgPj4gODsKIH0KIAorUGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIE93
blB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRl
KHRoaXMsIHNpemUpOworICAgIG1fZHJhd2luZ0J1ZmZlcnMuYWRkKGRyYXdpbmdCdWZmZXIuZ2V0
KCkpOworICAgIHJldHVybiBkcmF3aW5nQnVmZmVyLnJlbGVhc2UoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVtb3ZlRHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5n
QnVmZmVyKQoreworICAgIG1fZHJhd2luZ0J1ZmZlcnMucmVtb3ZlKGRyYXdpbmdCdWZmZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRyYXdpbmdCdWZmZXJzKCkKK3sKKyAg
ICBIYXNoU2V0PERyYXdpbmdCdWZmZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9kcmF3aW5nQnVmZmVy
cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8RHJhd2luZ0J1ZmZlcio+OjppdGVyYXRvciBpdCA9
IG1fZHJhd2luZ0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0
KS0+Y2xlYXIoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFu
ZFR5cGVQYXJhbWV0ZXJzKHVuc2lnbmVkIGludCBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyogY29tcG9uZW50c1BlclBpeGVsLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDkgKzI2LDYgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RfaAogI2RlZmluZSBH
cmFwaGljc0NvbnRleHQzRF9oCiAKLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiQU5HTEVX
ZWJLaXRCcmlkZ2UuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCkBAIC00Myw2ICs0MCw3IEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgogI2luY2x1ZGUg
PE9wZW5HTC9PcGVuR0wuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTc4LDYg
Kzc2LDcgQEAgY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iagogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgRHJh
d2luZ0J1ZmZlcjsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdl
RGF0YTsKQEAgLTQ0MiwxMiArNDQxLDEwIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSA9IFJlbmRlck9m
ZnNjcmVlbik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB+R3JhcGhp
Y3NDb250ZXh0M0QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHRPYmo7IH0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQotICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQog
I2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBw
bGF0Zm9ybVRleHR1cmUoKSBjb25zdDsKQEAgLTQ2OSwxMSArNDY2LDExIEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSNpZiBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKENIUk9NSVVNKQotICAgIC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxp
dCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgotICAgIHZvaWQgcHJlcGFyZVRl
eHR1cmUoKTsKLSNlbmRpZgotCisgICAgUGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGVE
cmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmID0gSW50U2l6ZSgpKTsKKyAgICB2b2lkIHJlbW92
ZURyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciopOworICAgIAorICAgIGNvbnN0IEF0dHJpYnV0
ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJzOyB9CisgICAgCiAgICAgLy8g
SGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcwog
ICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgIGludCBzaXplSW5CeXRlcyhp
bnQgdHlwZSk7CkBAIC03MzQsOCArNzMxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aWV3cG9y
dChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpOwogCi0gICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KICNpZiBQ
TEFURk9STShDRykKICAgICB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciog
aW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBpbnQgaW1hZ2VIZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgQ0dDb250ZXh0
UmVmIGNvbnRleHQpOwpAQCAtNzk1LDcgKzc5MCw5IEBAIHB1YmxpYzoKICAgICBpbnQgZ2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQigpOwogCiAgIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0QoQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBh
dHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgUmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpOwor
ICAgIAorICAgIHZvaWQgY2xlYXJEcmF3aW5nQnVmZmVycygpOwogCiAgICAgLy8gRWFjaCBwbGF0
Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QuCiAgICAg
Ly8KQEAgLTg0Miw2ICs4MzksOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBkZXN0aW5hdGlvblR5cGUsCiAgICAgICAgICAgICAgICAgICAgIEFscGhhT3AgYWxw
aGFPcCwKICAgICAgICAgICAgICAgICAgICAgdm9pZCogZGVzdGluYXRpb25EYXRhKTsKKyAgICAK
KyAgICBIYXNoU2V0PERyYXdpbmdCdWZmZXIqPiBtX2RyYXdpbmdCdWZmZXJzOwogCiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIC8vIFRha2UgaW50byBhY2NvdW50IHRoZSB1c2VyJ3MgcmVxdWVzdGVk
IGNvbnRleHQgY3JlYXRpb24gYXR0cmlidXRlcywKQEAgLTg0OSwxMSArODQ4LDcgQEAgcHVibGlj
OgogICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMg
b2YgdGhlIE9wZW5HTAogICAgIC8vIGltcGxlbWVudGF0aW9uLgogICAgIHZvaWQgdmFsaWRhdGVB
dHRyaWJ1dGVzKCk7Ci0jZW5kaWYKIAotICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0OwotCi0jaWYgUExBVEZPUk0oTUFDKQogICAgIHR5cGVkZWYgc3RydWN0IHsKICAgICAg
ICAgU3RyaW5nIHNvdXJjZTsKICAgICAgICAgU3RyaW5nIGxvZzsKQEAgLTg2NywxOCArODYyLDYg
QEAgcHVibGljOgogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKIAog
ICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwotICAgIFJldGFpblB0cjxXZWJHTExheWVy
PiBtX3dlYkdMTGF5ZXI7Ci0gICAgR0x1aW50IG1fdGV4dHVyZTsKLSAgICBHTHVpbnQgbV9mYm87
Ci0gICAgR0x1aW50IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwotCi0gICAgLy8gRm9yIHRyYWNraW5n
IHdoaWNoIEZCTyBpcyBib3VuZAotICAgIEdMdWludCBtX2JvdW5kRkJPOwotCi0gICAgLy8gRm9y
IG11bHRpc2FtcGxpbmcKLSAgICBHTHVpbnQgbV9tdWx0aXNhbXBsZUZCTzsKLSAgICBHTHVpbnQg
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcjsKLSAgICBHTHVpbnQgbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyOwogCiAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJv
cigpLgogICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJyb3JzOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDI1ICs2Niw0NyBAQCBzdGF0aWMgdW5zaWduZWQgZ2VuZXJhdGVD
b2xvclRleHR1cmUoU2hhCiB9CiAKIAotRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWdu
ZWQgZnJhbWVidWZmZXIpCitEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCiAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fZnJhbWVidWZmZXIoZnJhbWVidWZm
ZXIpCisgICAgLCBtX2ZibyhmcmFtZWJ1ZmZlcikKICAgICAsIG1faW50ZXJuYWwobmV3IERyYXdp
bmdCdWZmZXJJbnRlcm5hbCkKIHsKLSAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoZnJhbWVi
dWZmZXIpOworICAgIC8vIENyZWF0ZSB0aGUgRkJPCisgICAgbV9mYm8gPSBjb250ZXh0LT5jcmVh
dGVGcmFtZWJ1ZmZlcigpOworICAgIEFTU0VSVChtX2Zibyk7CisgICAgaWYgKCFtX2Zibykgewor
ICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGNvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihtX2Zibyk7CiAgICAgbV9pbnRlcm5hbC0+b2Zmc2NyZWVuQ29s
b3JUZXh0dXJlID0gZ2VuZXJhdGVDb2xvclRleHR1cmUoY29udGV4dCwgc2l6ZSk7CiB9CiAKIERy
YXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKIHsKKyAgICBjbGVhcigpOworfQorCit2b2lk
IERyYXdpbmdCdWZmZXI6OmNsZWFyKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAg
aWYgKG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIpCiAgICAgICAgIG1faW50ZXJuYWwtPnBsYXRm
b3JtTGF5ZXItPnNldERyYXdpbmdCdWZmZXIoMCk7CiAjZW5kaWYKLSAgICBtX2NvbnRleHQtPmJp
bmRGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihtX2Zibyk7CiAg
ICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4
dHVyZSk7Ci0gICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsK
KyAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKKyAgICBtX2ZibyA9IDA7
CisKKyAgICBtX2NvbnRleHQgPSAwOwogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQpAQCAtMTI4LDcgKzE1MCw3IEBAIFBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBs
YXRmb3JtTGEKIH0KICNlbmRpZgogCi11bnNpZ25lZCBEcmF3aW5nQnVmZmVyOjpnZXRSZW5kZXJp
bmdSZXN1bHRzQXNUZXh0dXJlKCkKK1BsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6cGxh
dGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW50ZXJuYWwtPm9mZnNj
cmVlbkNvbG9yVGV4dHVyZTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0RyYXdpbmdCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZpc2lvbiA2OTMxMykKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwyNyArMzAsMjIgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8fCBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgi
CiAKLSNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NPd25QdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRl
KFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplKQor
UGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgdW5zaWduZWQg
ZnJhbWVidWZmZXIgPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIEFTU0VSVChm
cmFtZWJ1ZmZlcik7Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBEcmF3aW5nQnVmZmVyKGNvbnRleHQsIHNpemUsIGZyYW1l
YnVmZmVyKSk7CisgICAgT3duUHRyPERyYXdpbmdCdWZmZXI+IGRyYXdpbmdCdWZmZXIgPSBhZG9w
dFB0cihuZXcgRHJhd2luZ0J1ZmZlcihjb250ZXh0LCBzaXplKSk7CisgICAgcmV0dXJuIChkcmF3
aW5nQnVmZmVyLT5tX2NvbnRleHQpID8gZHJhd2luZ0J1ZmZlci5yZWxlYXNlKCkgOiAwOwogfQog
CiB2b2lkIERyYXdpbmdCdWZmZXI6OmJpbmQoKQogewotICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKG1fZnJhbWVidWZmZXIpOwotICAgIG1fY29udGV4dC0+c2V0Vmlld3BvcnQobV9zaXpl
KTsKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8gPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwor
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDY5MzEzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw5ICs0Myw2IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDsKLQogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQog
c3RydWN0IERyYXdpbmdCdWZmZXJJbnRlcm5hbDsKICNlbmRpZgpAQCAtNTQsMjAgKzUxLDI4IEBA
IHN0cnVjdCBEcmF3aW5nQnVmZmVySW50ZXJuYWw7CiAvLyByZXN1bHRzIHRvIGEgUGxhdGZvcm1M
YXllciBmb3IgY29tcG9zaXRpbmcuCiBjbGFzcyBEcmF3aW5nQnVmZmVyIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBj
cmVhdGUoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CisgICAgZnJp
ZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworICAgIAogICAgIH5EcmF3aW5nQnVmZmVyKCk7
CiAKICAgICB2b2lkIHJlc2V0KGNvbnN0IEludFNpemUmKTsKICAgICB2b2lkIGJpbmQoKTsKICAg
ICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICAKKyAgICAvLyBD
bGVhciBhbGwgcmVzb3VyY2VzIGZyb20gdGhpcyBvYmplY3QsIGFzIHdlbGwgYXMgY29udGV4dC4g
Q2FsbGVkIHdoZW4gY29udGV4dCBpcyBkZXN0cm95ZWQKKyAgICAvLyB0byBwcmV2ZW50IGludmFs
aWQgYWNjZXNzZXMgdG8gdGhlIHJlc291cmNlcy4KKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICAv
LyBDb3BpZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlciB0byB0aGUgbm9ybWFsIGNvbG9y
IGJ1ZmZlciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5kCisgICAgdm9pZCBjb21taXQobG9uZyB4ID0g
MCwgbG9uZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25nIGhlaWdodCA9IC0xKTsKKyAgICAK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtX2NvbG9yQnVmZmVyOyB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0g
ICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpOworICAgIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdDsKICAgICB2b2lkIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsK
ICNlbmRpZgogCi0gICAgdW5zaWduZWQgZ2V0UmVuZGVyaW5nUmVzdWx0c0FzVGV4dHVyZSgpOwot
CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgY2xhc3MgV2lsbFB1Ymxpc2hDYWxsYmFjayA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgpAQCAtNzksMjEgKzg0LDM0IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFdpbGxQdWJsaXNoQ2FsbGJhY2soUGFzc093blB0cjxXaWxsUHVi
bGlzaENhbGxiYWNrPiBjYWxsYmFjaykgeyBtX2NhbGxiYWNrID0gY2FsbGJhY2s7IH0KICNlbmRp
ZgogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0OyB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8RHJhd2luZ0J1ZmZlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6
ZSYpOworICAgIAogcHJpdmF0ZToKLSAgICBEcmF3aW5nQnVmZmVyKFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEKiwgY29uc3QgSW50U2l6ZSYsIHVuc2lnbmVkIGZyYW1lYnVmZmVyKTsKKyAgICBEcmF3
aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50U2l6ZSYpOwogCi0gICAgU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OwogICAgIEludFNpemUgbV9zaXplOwotICAgIHVuc2lnbmVkIG1fZnJhbWVidWZm
ZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fY29sb3JCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBt
X2RlcHRoU3RlbmNpbEJ1ZmZlcjsKKworICAgIC8vIEZvciBtdWx0aXNhbXBsaW5nCisgICAgUGxh
dGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlRkJPOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9t
dWx0aXNhbXBsZUNvbG9yQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBs
ZURlcHRoU3RlbmNpbEJ1ZmZlcjsKKworICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBtX3BsYXRm
b3JtTGF5ZXI7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIE93blB0cjxX
aWxsUHVibGlzaENhbGxiYWNrPiBtX2NhbGxiYWNrOwogICAgIE93blB0cjxEcmF3aW5nQnVmZmVy
SW50ZXJuYWw+IG1faW50ZXJuYWw7CiAjZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBS
ZXRhaW5QdHI8V2ViR0xMYXllcj4gbV9wbGF0Zm9ybUxheWVyOwotI2VuZGlmCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9T
aGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDY5MzEzKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw4IEBAIHB1YmxpYzoKICAgICAvLyBDcmVh
dGVzIGEgdGV4dHVyZSB0aGF0IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IGltYWdlLiAgVGhl
IGNhbGxlciB0YWtlcyBvd25lcnNoaXAgb2YKICAgICAvLyB0aGUgdGV4dHVyZS4KICAgICBQYXNz
UmVmUHRyPFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoVGV4dHVyZTo6Rm9ybWF0LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpOworICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCiBwcml2YXRlOgogICAg
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQ
YXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4sIFBhc3NPd25QdHI8VGV4U2hhZGVyPik7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbQkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsMzcgKzI1
LDExMCBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQorI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAotI2lu
Y2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJXZWJHTExheWVyLmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9u
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZm
ZXIoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUs
IHVuc2lnbmVkIGZyYW1lYnVmZmVyKQorRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICA6IG1fY29u
dGV4dChjb250ZXh0KQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2ZyYW1lYnVmZmVyKGZy
YW1lYnVmZmVyKQorICAgICwgbV9mYm8oMCkKKyAgICAsIG1fY29sb3JCdWZmZXIoMCkKKyAgICAs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCisgICAg
LCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIoMCkKIHsKLSAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoZnJhbWVidWZm
ZXIpOwotCiAgICAgLy8gQ3JlYXRlIHRoZSBXZWJHTExheWVyCiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TCi0gICAgICAgIG1fcGxhdGZvcm1MYXllci5hZG9wdE5TKFtbV2ViR0xMYXll
ciBhbGxvY10gaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDowXSk7CisgICAgICAgIG1fcGxhdGZv
cm1MYXllci5hZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhEcmF3aW5nQnVmZmVy
OnRoaXNdKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFttX3BsYXRmb3JtTGF5ZXIuZ2V0KCkg
c2V0TmFtZTpAIldlYkdMIExheWVyIl07CisgICAgICAgIFttX3BsYXRmb3JtTGF5ZXIuZ2V0KCkg
c2V0TmFtZTpAIkRyYXdpbmdCdWZmZXIgTGF5ZXIiXTsKICNlbmRpZiAgICAKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCisgICAgCisgICAgLy8gY3JlYXRlIGEgdGV4dHVyZSB0byByZW5k
ZXIgaW50bworICAgIG1fY29sb3JCdWZmZXIgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Cisg
ICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
Y29sb3JCdWZmZXIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01J
Tl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAg
IGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1Q
X1RPX0VER0UpOworICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwKTsKKyAgICAKKyAgICAvLyBDcmVhdGUgdGhlIEZCTworICAgIG1fZmJvID0g
Y29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBBU1NFUlQobV9mYm8pOworICAgIGlm
ICghbV9mYm8pIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAgICAgCisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0
ZXMgPSBjb250ZXh0LT5hdHRyaWJ1dGVzKCk7CisgICAgCisgICAgLy8gQ3JlYXRlIHRoZSBzdGVu
Y2lsIGFuZCBkZXB0aCBidWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKCFhdHRyaWJ1dGVzLmFudGlh
bGlhcyAmJiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKQorICAgICAg
ICBtX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwor
CisgICAgLy8gY3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50
aWFsaWFzKSB7CisgICAgICAgIG1fbXVsdGlzYW1wbGVGQk8gPSBjb250ZXh0LT5jcmVhdGVGcmFt
ZWJ1ZmZlcigpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
ciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyID0gY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAg
fQorICAgIAorICAgIHJlc2V0KHNpemUpOwogfQogCiBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1
ZmZlcigpCiB7Ci0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7
Ci0gICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsKKyAgICBt
X2NvbnRleHQtPnJlbW92ZURyYXdpbmdCdWZmZXIodGhpcyk7CisgICAgY2xlYXIoKTsKK30KKwor
dm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhcigpCit7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9jb2xvckJ1ZmZlcik7CisgICAgbV9j
b2xvckJ1ZmZlciA9IDA7CisgICAgCisgICAgaWYgKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcikg
eworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIpOworICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAwOworICAgIH0K
KyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcikgeworICAgICAg
ICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICAgICAgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciA9IDA7Cisg
ICAgfQorICAgIAorICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikgeworICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAg
IG1fZGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICB9CisgICAgCisgICAgaWYgKG1fbXVsdGlz
YW1wbGVGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1l
YnVmZmVyKG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX211bHRpc2FtcGxlRkJPID0gMDsK
KyAgICB9CisgICAgICAgIAorICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBtX2Zibyk7CisgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2Zibyk7
CisgICAgbV9mYm8gPSAwOworICAgIAorICAgIG1fY29udGV4dCA9IDA7CiB9CiAKIHZvaWQgRHJh
d2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKQEAgLTY0LDExICsxMzcs
MTQ2IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAg
cmV0dXJuOwogICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAKLSAgICBtX2NvbnRleHQtPnRleEltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIGlmICgh
bV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgCisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBtX2NvbnRleHQtPmF0dHJpYnV0ZXMoKTsKKyAgICBHTHVp
bnQgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gMDsKKyAgICBpZiAoYXR0cmlidXRlcy5hbHBoYSkgeworICAgICAgICBpbnRlcm5h
bENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKKyAg
ICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7CisgICAgfQorICAgIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0
aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAg
ICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IuCisgICAgICAgIGlmIChh
dHRyaWJ1dGVzLnN0ZW5jaWwgJiYgYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIGludGVy
bmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhf
Q09NUE9ORU5UOworICAgIH0KKworICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8KKyAgICBp
ZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7
CisgICAgICAgIAorICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNfRVhULCAm
bWF4U2FtcGxlQ291bnQpOworICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgs
IG1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2FtcGxlQ291
bnQpCisgICAgICAgICAgICBzYW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50OworICAgICAgICAK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOworCisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIDo6Z2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxl
Q291bnQsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCkpOworICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJF
WFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7
CisgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAoYXR0cmli
dXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVO
VF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICB9CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRF
UkJVRkZFUl9FWFQsIDApOworICAgICAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogY2xlYW51cC4KKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyByZXNpemUgcmVndWxhciBGQk8KKyAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworCisgICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOworICAgIDo6Z2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRF
LCAwKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIs
IDApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBpZiAoIWF0
dHJpYnV0ZXMuYW50aWFsaWFzICYmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5k
ZXB0aCkpIHsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3Rv
cmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVz
LnN0ZW5jaWwpCisgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgfQorICAgIGlmIChnbENoZWNrRnJhbWVidWZm
ZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RV9FWFQpIHsKKyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICB9CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpCisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJP
KTsKKworICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgorICAgIEdMYm9vbGVh
biBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVw
dGhNYXNrID0gR0xfVFJVRSwgc3RlbmNpbE1hc2sgPSBHTF9UUlVFOworICAgIEdMYm9vbGVhbiBp
c1NjaXNzb3JFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxl
ZCA9IEdMX0ZBTFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVS
X0JJVDsKKyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2sp
OworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7
CisgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdM
X0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xf
VFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0K
KyAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xHZXRCb29sZWFudihH
TF9TVEVOQ0lMX1dSSVRFTUFTSywgJnN0ZW5jaWxNYXNrKTsKKyAgICAgICAgOjpnbFN0ZW5jaWxN
YXNrKEdMX1RSVUUpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklU
OworICAgIH0KKyAgICBpc1NjaXNzb3JFbmFibGVkID0gOjpnbElzRW5hYmxlZChHTF9TQ0lTU09S
X1RFU1QpOworICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgaXNEaXRoZXJF
bmFibGVkID0gOjpnbElzRW5hYmxlZChHTF9ESVRIRVIpOworICAgIDo6Z2xEaXNhYmxlKEdMX0RJ
VEhFUik7CisKKyAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKKworICAgIDo6Z2xDb2xvck1hc2so
Y29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsK
KyAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1h
c2spOworICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgIDo6Z2xTdGVuY2lsTWFz
ayhzdGVuY2lsTWFzayk7CisgICAgaWYgKGlzU2Npc3NvckVuYWJsZWQpCisgICAgICAgIDo6Z2xF
bmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdM
X1NDSVNTT1JfVEVTVCk7CisgICAgaWYgKGlzRGl0aGVyRW5hYmxlZCkKKyAgICAgICAgOjpnbEVu
YWJsZShHTF9ESVRIRVIpOworICAgIGVsc2UKKyAgICAgICAgOjpnbERpc2FibGUoR0xfRElUSEVS
KTsKKworICAgIDo6Z2xGbHVzaCgpOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OmNvbW1pdChs
b25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQpCit7CisgICAgaWYgKCFtX2Nv
bnRleHQpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgaWYgKHdpZHRoIDwgMCkKKyAg
ICAgICAgd2lkdGggPSBtX3NpemUud2lkdGgoKTsKKyAgICBpZiAoaGVpZ2h0IDwgMCkKKyAgICAg
ICAgaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOworICAgICAgICAKKyAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIAorICAgIGlmIChtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQo
eCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVS
X0JJVCwgR0xfTElORUFSKTsKKyAgICB9CisgICAgCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKIH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLVBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIo
KQorUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllci5nZXQoKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShy
ZXZpc2lvbiA2OTMxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVk
ZSAiVWludDhBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXIuaCIKICNpbmNsdWRlICJXZWJH
TE9iamVjdC5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsMzAgKzc2LDIwIEBA
IHN0YXRpYyB2b2lkIHNldFBpeGVsRm9ybWF0KFZlY3RvcjxDR0xQaXgKICAgICBhdHRyaWJzLmFw
cGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4oMCkpOwogfQogCi1QYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBH
cmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCitQYXNzT3duUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJTdHls
ZSByZW5kZXJTdHlsZSkKIHsKICAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3Vy
cmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgogICAg
IGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KG5ldyBHcmFw
aGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgZmFsc2UpKTsKKyAgICAgICAgCisgICAg
T3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KG5ldyBHcmFwaGljc0NvbnRleHQzRChh
dHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICByZXR1cm4gY29udGV4dC0+bV9j
b250ZXh0T2JqID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQogCi1HcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wpCi0gICAgOiBtX2N1cnJlbnRXaWR0aCgwKQot
ICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCi0gICAgLCBtX2F0dHJzKGF0dHJzKQorR3JhcGhpY3ND
b250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzLCBIb3N0V2luZG93KiAvKiBob3N0V2luZG93ICovLCBSZW5kZXJTdHlsZSAvKiByZW5k
ZXJTdHlsZSovKQorICAgIDogbV9hdHRycyhhdHRycykKICAgICAsIG1fY29udGV4dE9iaigwKQot
ICAgICwgbV90ZXh0dXJlKDApCi0gICAgLCBtX2ZibygwKQotICAgICwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIoMCkKLSAgICAsIG1fYm91bmRGQk8oMCkKLSAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkK
LSAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKLSAgICAsIG1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcigwKQogewotICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLQog
ICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmliczsKICAgICBDR0xQaXhl
bEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CiAgICAgR0xpbnQgbnVtUGl4ZWxGb3JtYXRz
ID0gMDsKQEAgLTE1MCw0MSArMTM5LDYgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29u
dGV4dDNEKEdyYQogICAgIAogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCi0gICAgLy8gQ3Jl
YXRlIHRoZSBXZWJHTExheWVyCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAg
ICAgIG1fd2ViR0xMYXllci5hZG9wdE5TKFtbV2ViR0xMYXllciBhbGxvY10gaW5pdFdpdGhHcmFw
aGljc0NvbnRleHQzRDp0aGlzXSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBbbV93ZWJHTExh
eWVyLmdldCgpIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOwotI2VuZGlmICAgIAotICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIHJl
bmRlciBpbnRvCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAg
ICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCAwKTsKLSAgICAKLSAgICAvLyBjcmVhdGUgYW4gRkJPCi0gICAgOjpnbEdl
bkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgCi0gICAgbV9ib3VuZEZCTyA9IG1fZmJv
OwotICAgIGlmICghbV9hdHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0
dHJzLmRlcHRoKSkKLSAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhT
dGVuY2lsQnVmZmVyKTsKLQotICAgIC8vIGNyZWF0ZSBhbiBtdWx0aXNhbXBsZSBGQk8KLSAgICBp
ZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgx
LCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgbV9ib3VuZEZCTyA9
IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZt
X211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8
IG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAm
bV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQotICAgIAogICAgIC8vIEFO
R0xFIGluaXRpYWxpemF0aW9uLgogCiAgICAgVEJ1aWx0SW5SZXNvdXJjZSBBTkdMRVJlc291cmNl
czsKQEAgLTIxNSwxOSArMTY5LDkgQEAgR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYQogCiBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsKKyAg
ICBjbGVhckRyYXdpbmdCdWZmZXJzKCk7CisgICAgCiAgICAgaWYgKG1fY29udGV4dE9iaikgewot
ICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgICAgICA6Omds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgICAgIGlmIChtX2F0dHJzLmFudGlh
bGlhcykgewotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVs
dGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8
IG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgOjpn
bERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgp
Ci0gICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhT
dGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJz
RVhUKDEsICZtX2Zibyk7CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KDApOwogICAgICAg
ICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOwogICAgIH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmgJKHJldmlzaW9uIDY5MzEzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxNiArMzIsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEdy
YXBoaWNzTGF5ZXI7Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgY2xhc3MgRHJh
d2luZ0J1ZmZlcjsKIH0KIAogQGludGVyZmFjZSBXZWJHTExheWVyIDogQ0FPcGVuR0xMYXllciAK
IHsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX2xheWVyT3duZXI7Ci0gICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBXZWJDb3JlOjpEcmF3aW5nQnVm
ZmVyKiBtX2RyYXdpbmdCdWZmZXI7CiB9CiAKLS0gKGlkKWluaXRXaXRoR3JhcGhpY3NDb250ZXh0
M0Q6KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0OworLSAoaWQpaW5pdFdpdGhE
cmF3aW5nQnVmZmVyOihXZWJDb3JlOjpEcmF3aW5nQnVmZmVyKilkcmF3aW5nQnVmZmVyOwogCiAt
IChDR0ltYWdlUmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3BhY2U6KENHQ29sb3JTcGFj
ZVJlZiljb2xvclNwYWNlOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9X
ZWJHTExheWVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1dlYkdMTGF5ZXIubW0JKHJldmlzaW9uIDY5MzEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvV2ViR0xMYXllci5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiAjaW1wb3J0ICJXZWJHTExheWVyLmgiCiAKKyNpbXBvcnQgIkRyYXdpbmdCdWZmZXIuaCIKICNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW1wb3J0ICJHcmFwaGljc0xheWVyLmgiCiAj
aW1wb3J0IDxPcGVuR0wvT3BlbkdMLmg+CkBAIC00MSw5ICs0Miw5IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBAaW1wbGVtZW50YXRpb24gV2ViR0xMYXllcgogCi0tKGlkKWluaXRXaXRo
R3JhcGhpY3NDb250ZXh0M0Q6KEdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0CistKGlkKWluaXRX
aXRoRHJhd2luZ0J1ZmZlcjooRHJhd2luZ0J1ZmZlciopZHJhd2luZ0J1ZmZlcgogewotICAgIG1f
Y29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9kcmF3aW5nQnVmZmVyID0gZHJhd2luZ0J1ZmZlcjsK
ICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIHJldHVybiBzZWxmOwogfQpAQCAtNTcsMTkg
KzU4LDIyIEBAIC0oQ0dMUGl4ZWxGb3JtYXRPYmopY29weUNHTFBpeGVsRm9ybWF0Rm8KICAgICAv
LyBJZiBuZWVkZWQgd2Ugd2lsbCBoYXZlIHRvIHNldCB0aGUgZGlzcGxheSBtYXNrIGluIHRoZSBD
YW52YXMgQ0dMQ29udGV4dCBhbmQKICAgICAvLyBtYWtlIHN1cmUgaXQgbWF0Y2hlcy4KICAgICBV
TlVTRURfUEFSQU0obWFzayk7Ci0gICAgcmV0dXJuIENHTFJldGFpblBpeGVsRm9ybWF0KENHTEdl
dFBpeGVsRm9ybWF0KG1fY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKSk7Cisg
ICAgcmV0dXJuIENHTFJldGFpblBpeGVsRm9ybWF0KENHTEdldFBpeGVsRm9ybWF0KG1fZHJhd2lu
Z0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
KSk7CiB9CiAKIC0oQ0dMQ29udGV4dE9iailjb3B5Q0dMQ29udGV4dEZvclBpeGVsRm9ybWF0OihD
R0xQaXhlbEZvcm1hdE9iailwaXhlbEZvcm1hdAogewogICAgIENHTENvbnRleHRPYmogY29udGV4
dE9iajsKLSAgICBDR0xDcmVhdGVDb250ZXh0KHBpeGVsRm9ybWF0LCBtX2NvbnRleHQtPnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgJmNvbnRleHRPYmopOworICAgIENHTENyZWF0ZUNvbnRl
eHQocGl4ZWxGb3JtYXQsIG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+cGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCAmY29udGV4dE9iaik7CiAgICAgcmV0dXJuIGNvbnRl
eHRPYmo7CiB9CiAKIC0odm9pZClkcmF3SW5DR0xDb250ZXh0OihDR0xDb250ZXh0T2JqKWdsQ29u
dGV4dCBwaXhlbEZvcm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxGb3JtYXQgZm9yTGF5ZXJU
aW1lOihDRlRpbWVJbnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlzcGxheVRpbWU6KGNvbnN0IENWVGlt
ZVN0YW1wICopdGltZVN0YW1wCiB7Ci0gICAgbV9jb250ZXh0LT5wcmVwYXJlVGV4dHVyZSgpOwor
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKKyAgICBtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNzQ29udGV4dDNEKCktPmZp
bmlzaCgpOwogCiAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoZ2xDb250ZXh0KTsKIApAQCAtODQs
NyArODgsNyBAQCAtKHZvaWQpZHJhd0luQ0dMQ29udGV4dDooQ0dMQ29udGV4dE9iailnCiAgICAg
Z2xMb2FkSWRlbnRpdHkoKTsKIAogICAgIGdsRW5hYmxlKEdMX1RFWFRVUkVfMkQpOwotICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb250ZXh0LT5wbGF0Zm9ybVRleHR1cmUoKSk7
CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2RyYXdpbmdCdWZmZXItPnBsYXRm
b3JtQ29sb3JCdWZmZXIoKSk7CiAgICAgCiAgICAgZ2xCZWdpbihHTF9UUklBTkdMRV9GQU4pOwog
ICAgICAgICBnbFRleENvb3JkMmYoMCwgMCk7CkBAIC0xMTEsNyArMTE1LDcgQEAgc3RhdGljIHZv
aWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkIAogCiAtKENHSW1hZ2VSZWYpY29weUltYWdl
U25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3BhY2UKIHsKLSAg
ICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QoKSk7CisgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9kcmF3aW5nQnVmZmVyLT5ncmFwaGlj
c0NvbnRleHQzRCgpLT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpOwogCiAgICAgUmV0YWlu
UHRyPENHQ29sb3JTcGFjZVJlZj4gaW1hZ2VDb2xvclNwYWNlID0gY29sb3JTcGFjZTsKICAgICBp
ZiAoIWltYWdlQ29sb3JTcGFjZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHJldmlz
aW9uIDY5MzEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAKICNp
bmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkFycmF5QnVmZmVyVmlldy5oIgotI2lu
Y2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
IgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgpAQCAtNDAsNiArMzksNyBAQAogI2luY2x1ZGUgIkludDMyQXJyYXkuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJH
TE9iamVjdC5oIgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgpA
QCAtNzgsOSArNzgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsK
ICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworICAgIAor
ICAgIGludCB3aWR0aCA9IGNvbnRleHQtPmNhbnZhcygpLT53aWR0aCgpOworICAgIGludCBoZWln
aHQgPSBjb250ZXh0LT5jYW52YXMoKS0+aGVpZ2h0KCk7CiAKLSAgICBpbnQgcm93Qnl0ZXMgPSBt
X2N1cnJlbnRXaWR0aCAqIDQ7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3Vy
cmVudEhlaWdodDsKKyAgICBpbnQgcm93Qnl0ZXMgPSB3aWR0aCAqIDQ7CisgICAgaW50IHRvdGFs
Qnl0ZXMgPSByb3dCeXRlcyAqIGhlaWdodDsKIAogICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNo
YXI+IHBpeGVscyhuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7CiAgICAgaWYgKCFwaXhl
bHMpCkBAIC04OCwyMCArOTEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1JlCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIGJvb2wgbXVzdFJlc3Rv
cmVGQk8gPSBmYWxzZTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZF
Ul9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICBt
dXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fYm91bmRG
Qk8gIT0gbV9mYm8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKICAgICBi
b29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOwogICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOwpAQCAtMTEwLDE1OSArOTksMTIg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZQogICAgICAgICBtdXN0
UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwogICAgIH0KIAotICAgIDo6Z2xSZWFkUGl4ZWxz
KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lH
TkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzLmdldCgpKTsKKyAgICA6OmdsUmVhZFBpeGVscygw
LCAwLCB3aWR0aCwgaGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYs
IHBpeGVscy5nZXQoKSk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQogICAg
ICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOwog
Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Ci0KLSAgICBwYWludFRvQ2FudmFzKHBp
eGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAod2lkdGggPT0gbV9j
dXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCB8fCAhbV9jb250ZXh0T2Jq
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKLSAg
ICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgCi0gICAgR0x1aW50IGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7Ci0gICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsK
LSAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4OwotICAgICAgICBjb2xvckZv
cm1hdCA9IEdMX1JHQkE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1h
dCA9IEdMX1JHQjg7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOwotICAgIH0KLSAgICBp
ZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgLy8gV2UgZG9u
J3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlz
IG5vdC4KLSAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgotICAg
ICAgICBpZiAobV9hdHRycy5zdGVuY2lsICYmIG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RF
UFRIX0NPTVBPTkVOVDsKLSAgICB9Ci0KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7
Ci0KLSAgICAvLyByZXNpemUgbXVsdGlzYW1wbGUgRkJPCi0gICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzKSB7Ci0gICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OwotICAgICAgICA6OmdsR2V0SW50
ZWdlcnYoR0xfTUFYX1NBTVBMRVNfRVhULCAmbWF4U2FtcGxlQ291bnQpOwotICAgICAgICBHTGlu
dCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsKLSAgICAgICAgaWYg
KHNhbXBsZUNvdW50ID4gbWF4U2FtcGxlQ291bnQpCi0gICAgICAgICAgICBzYW1wbGVDb3VudCA9
IG1heFNhbXBsZUNvdW50OwotICAgICAgICBpZiAobV9ib3VuZEZCTyAhPSBtX211bHRpc2FtcGxl
RkJPKSB7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVS
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgOjpnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVD
b3VudCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVm
ZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7Ci0g
ICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xSZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291
bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
ICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
X0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
cik7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9B
VFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0gICAgICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJT
dGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9F
WFQpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgotICAgICAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZC
TwotICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAgIG11c3RSZXN0b3JlRkJP
ID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
dGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxD
b2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAw
KTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgaWYgKCFtX2F0
dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKSB7Ci0g
ICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICAgICAgOjpnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRB
Q0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhU
LCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIDo6
Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOwotICAgIH0KLSAg
ICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBjbGVhbnVw
Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgaWYgKG1fYm91bmRGQk8gPT0gbV9tdWx0
aXNhbXBsZUZCTykKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgR0xib29sZWFuIGNv
bG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1h
c2sgPSBHTF9UUlVFLCBzdGVuY2lsTWFzayA9IEdMX1RSVUU7Ci0gICAgR0xib29sZWFuIGlzU2Np
c3NvckVuYWJsZWQgPSBHTF9GQUxTRTsKLSAgICBHTGJvb2xlYW4gaXNEaXRoZXJFbmFibGVkID0g
R0xfRkFMU0U7Ci0gICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklU
OwotICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0g
ICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLSAg
ICBpZiAobV9hdHRycy5kZXB0aCkgewotICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhf
V1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsK
LSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgfQotICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX1NURU5DSUxf
V1JJVEVNQVNLLCAmc3RlbmNpbE1hc2spOwotICAgICAgICA6OmdsU3RlbmNpbE1hc2soR0xfVFJV
RSk7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgfQot
ICAgIGlzU2Npc3NvckVuYWJsZWQgPSA6OmdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7Ci0g
ICAgOjpnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBpc0RpdGhlckVuYWJsZWQgPSA6
OmdsSXNFbmFibGVkKEdMX0RJVEhFUik7Ci0gICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKLQot
ICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwotCi0gICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tb
MF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOwotICAgIGlmICht
X2F0dHJzLmRlcHRoKQotICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7Ci0gICAgaWYg
KG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrKHN0ZW5jaWxNYXNrKTsK
LSAgICBpZiAoaXNTY2lzc29yRW5hYmxlZCkKLSAgICAgICAgOjpnbEVuYWJsZShHTF9TQ0lTU09S
X1RFU1QpOwotICAgIGVsc2UKLSAgICAgICAgOjpnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsK
LSAgICBpZiAoaXNEaXRoZXJFbmFibGVkKQotICAgICAgICA6OmdsRW5hYmxlKEdMX0RJVEhFUik7
Ci0gICAgZWxzZQotICAgICAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOwotCi0gICAgaWYgKG11
c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9ib3VuZEZCTyk7Ci0KLSAgICA6OmdsRmx1c2goKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOwotICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAsIG1fY3VycmVudFdpZHRo
LCBtX2N1cnJlbnRIZWlnaHQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQs
IEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKLSAgICB9Ci0gICAgOjpn
bEZpbmlzaCgpOworICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCB3aWR0aCwgaGVpZ2h0
LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0
aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpCkBAIC0yOTYsMTUgKzEzOCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWcKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCBidWZmZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0x1aW50IGZi
bzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSAoR0x1aW50KWJ1ZmZlcjsKLSAgICBl
bHNlCi0gICAgICAgIGZibyA9IChtX2F0dHJzLmFudGlhbGlhcyA/IG1fbXVsdGlzYW1wbGVGQk8g
OiBtX2Zibyk7Ci0gICAgaWYgKGZibyAhPSBtX2JvdW5kRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOwotICAgICAgICBtX2JvdW5kRkJPID0gZmJvOwot
ICAgIH0KKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgYnVmZmVyKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCkBAIC00NjAsMjkgKzI5NCwxMyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZl
bCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKIHsKICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0g
ICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0
LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJ
TkVBUik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2Zibyk7Ci0gICAgfQogICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNl
dCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlh
bGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZC
Tyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9F
WFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lk
dGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVG
RkVSX0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICB9CiAgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwot
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X211bHRpc2FtcGxlRkJPKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2Uo
dW5zaWduZWQgbG9uZyBtb2RlKQpAQCAtNzc4LDE2ICs1OTYsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgCiAgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBj
YWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgOjpnbEZsdXNoKCk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
ICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwg
bV9mYm8pOwotICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwg
eSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJf
QklULCBHTF9MSU5FQVIpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6OmdsRmx1c2goKTsKLSAgICB9CisgICAgCiAg
ICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRh
KTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVh
c2VTaGFkZXJDb21waWxlcigpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70154</attachid>
            <date>2010-10-07 14:45:21 -0700</date>
            <delta_ts>2010-10-08 09:21:00 -0700</delta_ts>
            <desc>Patch fixing Qt build issue</desc>
            <filename>bug-47379-20101007144520.patch</filename>
            <type>text/plain</type>
            <size>52209</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMTAtMTAtMDcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgZHJhd2luZyBidWZmZXIgbG9naWMgb3V0IG9mIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBpbnRv
IERyYXdpbmdCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ3Mzc5CisKKyAgICAgICAgVGhpcyBpcyBqdXN0IHJlc3RydWN0dXJpbmcsIHNvIHRo
ZSBjdXJyZW50IHRlc3RzIGFyZSBzdWZmaWNpZW50LgorCisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3Jt
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3Vi
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQ
aXhlbHMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW1vdmVEcmF3aW5nQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRyYXdpbmdCdWZmZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdC
dWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpiaW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1
ZmZlcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y29tbWl0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1dlYkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUNHTFBp
eGVsRm9ybWF0Rm9yRGlzcGxheU1hc2s6XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUNH
TENvbnRleHRGb3JQaXhlbEZvcm1hdDpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBkcmF3SW5D
R0xDb250ZXh0OnBpeGVsRm9ybWF0OmZvckxheWVyVGltZTpkaXNwbGF5VGltZTpdKToKKyAgICAg
ICAgKC1bV2ViR0xMYXllciBjb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOl0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29w
eVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFk
UGl4ZWxzKToKKwogMjAxMC0xMC0wNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDY5MzEz
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpDYW52YXNSZW5kZXJpbgogICAgIG1fY29udGV4dDNEID0gcC0+c2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QoKTsKICAgICBpZiAobV9jb250ZXh0M0QpIHsKICAgICAgICAgaWYgKEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1
ZmZlciA9IG1fY29udGV4dDNELT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVEcmF3aW5nQnVm
ZmVyKEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CiAgICAgICAg
ICAgICBjLT5zZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgbV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBJbnRTaXplKGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDaGVja2VkSW50LmgiCiAjaW5jbHVkZSAiQ29uc29sZS5o
IgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKQEAgLTEwOSw3ICsxMTAsMTEgQEAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKGZhbHNlKQogewogICAgIEFTU0VSVChtX2NvbnRleHQpOwotCisgICAgCisgICAgLy8g
Q3JlYXRlIHRoZSBEcmF3aW5nQnVmZmVyCisgICAgbV9kcmF3aW5nQnVmZmVyID0gbV9jb250ZXh0
LT5jcmVhdGVEcmF3aW5nQnVmZmVyKEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSkpOworICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIAogICAgIGlu
dCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKICAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogICAgIG1fdGV4dHVyZVVuaXRzLnJl
c2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKQEAgLTEzNiw3ICsxNDEsNyBAQCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgIGNyZWF0ZUZh
bGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQog
ICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52
YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKKyAgICBtX2RyYXdpbmdCdWZmZXIt
PnJlc2V0KEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOwog
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSk7CiB9CiAKQEAgLTE2Nyw3ICsxNzIsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgICAgIHJldHVybjsKICAgICBjYW52YXMoKS0+Y2xl
YXJDb3BpZWRJbWFnZSgpOwogICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwogICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXModGhpcyk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiB9CiAK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QKQEAgLTE3NSw2ICsxODIsMTEgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50
c0ludG9DYQogICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsK
IH0KIAorUGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7
Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCkKIHsKICAgICBpZiAobV9uZWVkc1VwZGF0ZSkgewpAQCAtMTg4LDcgKzIwMCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCAKIAogICAgIC8vIFdlIGRv
bid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3bHkgY3Jl
YXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgogICAgIC8vIGNsZWFyIChhbmQg
dGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBtX2NvbnRleHQtPnJlc2hh
cGUod2lkdGgsIGhlaWdodCk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0
ZXMoaW50IHR5cGUpCkBAIC01MzAsNyArNTQyLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICAKICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOworICAgIAorICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKKyAgICAKICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5v
dCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRl
eC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nKQpAQCAtNTUxLDcgKzU3MywxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29weVRleFN1YkltCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CisKKyAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0
aXNhbXBsaW5nKQorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZHJh
d2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgICAgIAogICAgIG1fY29udGV4dC0+Y29weVRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCk7CisKKyAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYg
KCFtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
CisgICAgCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTk4
Niw3ICsyMDE4LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGwK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRk
cmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBm
b3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICAKICAgICBtX2NvbnRleHQtPnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICAK
KyAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKCFtX2ZyYW1l
YnVmZmVyQmluZGluZykKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICNpZiBQ
TEFURk9STShDRykKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRy
aXZlciBidWcgb24gTWFjIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2Zm
LCByZWFkUGl4ZWxzIHNob3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24g
NjkzMTMpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGljOgogCiAgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lmdl
dCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+cGxh
dGZvcm1MYXllcigpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpOwpAQCAtMzMwLDYgKzMzMCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEltYWdlPiB2
aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyk7CiAKICAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBPd25QdHI8RHJhd2luZ0J1ZmZlcj4g
bV9kcmF3aW5nQnVmZmVyOwogICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsKICAgICBib29sIG1fbWFy
a2VkQ2FudmFzRGlydHk7CiAgICAgLy8gRklYTUU6IEkgdGhpbmsgdGhpcyBpcyBicm9rZW4gLS0g
aXQgZG9lcyBub3QgaW5jcmVtZW50IGFueQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDY5MzEzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5j
bHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKQEAgLTQxLDYgKzQyLDI1
IEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRDb2xvcjE2VG84KHVpbnQxNl8KICAgICByZXR1cm4g
dmFsdWUgPj4gODsKIH0KIAorUGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIE93
blB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRl
KHRoaXMsIHNpemUpOworICAgIG1fZHJhd2luZ0J1ZmZlcnMuYWRkKGRyYXdpbmdCdWZmZXIuZ2V0
KCkpOworICAgIHJldHVybiBkcmF3aW5nQnVmZmVyLnJlbGVhc2UoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVtb3ZlRHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5n
QnVmZmVyKQoreworICAgIG1fZHJhd2luZ0J1ZmZlcnMucmVtb3ZlKGRyYXdpbmdCdWZmZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRyYXdpbmdCdWZmZXJzKCkKK3sKKyAg
ICBIYXNoU2V0PERyYXdpbmdCdWZmZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9kcmF3aW5nQnVmZmVy
cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8RHJhd2luZ0J1ZmZlcio+OjppdGVyYXRvciBpdCA9
IG1fZHJhd2luZ0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0
KS0+Y2xlYXIoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFu
ZFR5cGVQYXJhbWV0ZXJzKHVuc2lnbmVkIGludCBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyogY29tcG9uZW50c1BlclBpeGVsLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDkgKzI2LDYgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RfaAogI2RlZmluZSBH
cmFwaGljc0NvbnRleHQzRF9oCiAKLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiQU5HTEVX
ZWJLaXRCcmlkZ2UuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCkBAIC00Myw2ICs0MCw3IEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgogI2luY2x1ZGUg
PE9wZW5HTC9PcGVuR0wuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTc4LDYg
Kzc2LDcgQEAgY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iagogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgRHJh
d2luZ0J1ZmZlcjsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdl
RGF0YTsKQEAgLTQ0MiwxMiArNDQxLDEwIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSA9IFJlbmRlck9m
ZnNjcmVlbik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB+R3JhcGhp
Y3NDb250ZXh0M0QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHRPYmo7IH0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQotICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQog
I2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBw
bGF0Zm9ybVRleHR1cmUoKSBjb25zdDsKQEAgLTQ2OSwxMSArNDY2LDExIEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSNpZiBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKENIUk9NSVVNKQotICAgIC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxp
dCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgotICAgIHZvaWQgcHJlcGFyZVRl
eHR1cmUoKTsKLSNlbmRpZgotCisgICAgUGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGVE
cmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmID0gSW50U2l6ZSgpKTsKKyAgICB2b2lkIHJlbW92
ZURyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciopOworICAgIAorICAgIGNvbnN0IEF0dHJpYnV0
ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJzOyB9CisgICAgCiAgICAgLy8g
SGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcwog
ICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgIGludCBzaXplSW5CeXRlcyhp
bnQgdHlwZSk7CkBAIC03MzQsOCArNzMxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aWV3cG9y
dChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpOwogCi0gICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KICNpZiBQ
TEFURk9STShDRykKICAgICB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciog
aW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBpbnQgaW1hZ2VIZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgQ0dDb250ZXh0
UmVmIGNvbnRleHQpOwpAQCAtNzk1LDcgKzc5MCw5IEBAIHB1YmxpYzoKICAgICBpbnQgZ2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQigpOwogCiAgIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0QoQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBh
dHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgUmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpOwor
ICAgIAorICAgIHZvaWQgY2xlYXJEcmF3aW5nQnVmZmVycygpOwogCiAgICAgLy8gRWFjaCBwbGF0
Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QuCiAgICAg
Ly8KQEAgLTg0Miw2ICs4MzksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZGVzdGluYXRpb25UeXBlLAogICAgICAgICAgICAgICAgICAgICBBbHBoYU9wIGFs
cGhhT3AsCiAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSk7CisgICAg
CisgICAgSGFzaFNldDxEcmF3aW5nQnVmZmVyKj4gbV9kcmF3aW5nQnVmZmVyczsKKworICAgIEF0
dHJpYnV0ZXMgbV9hdHRyczsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBUYWtlIGludG8g
YWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMs
CkBAIC04NDksMTEgKzg1MCw3IEBAIHB1YmxpYzoKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3Jl
ZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBsZW1l
bnRhdGlvbi4KICAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOwotI2VuZGlmCiAKLSAgICBp
bnQgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodDsKLQotI2lmIFBMQVRGT1JNKE1BQykK
ICAgICB0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgIFN0cmluZyBzb3VyY2U7CiAgICAgICAgIFN0
cmluZyBsb2c7CkBAIC04NjMsMjIgKzg2MCw5IEBAIHB1YmxpYzoKIAogICAgIEFOR0xFV2ViS2l0
QnJpZGdlIG1fY29tcGlsZXI7CiAKLSAgICBBdHRyaWJ1dGVzIG1fYXR0cnM7CiAgICAgVmVjdG9y
PFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OwogCiAgICAgQ0dMQ29udGV4dE9iaiBtX2Nv
bnRleHRPYmo7Ci0gICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKLSAgICBH
THVpbnQgbV90ZXh0dXJlOwotICAgIEdMdWludCBtX2ZibzsKLSAgICBHTHVpbnQgbV9kZXB0aFN0
ZW5jaWxCdWZmZXI7Ci0KLSAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJvdW5kCi0g
ICAgR0x1aW50IG1fYm91bmRGQk87Ci0KLSAgICAvLyBGb3IgbXVsdGlzYW1wbGluZwotICAgIEdM
dWludCBtX211bHRpc2FtcGxlRkJPOwotICAgIEdMdWludCBtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyOwotICAgIEdMdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CiAKICAgICAv
LyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8
dW5zaWduZWQgbG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiA2OTMxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMjUg
KzY2LDQ3IEBAIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShTaGEKIH0KIAog
Ci1EcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK0RyYXdp
bmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0
IEludFNpemUmIHNpemUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZShz
aXplKQotICAgICwgbV9mcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikKKyAgICAsIG1fZmJvKGZyYW1l
YnVmZmVyKQogICAgICwgbV9pbnRlcm5hbChuZXcgRHJhd2luZ0J1ZmZlckludGVybmFsKQogewot
ICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisgICAgLy8gQ3JlYXRl
IHRoZSBGQk8KKyAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAg
QVNTRVJUKG1fZmJvKTsKKyAgICBpZiAoIW1fZmJvKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1f
ZmJvKTsKICAgICBtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1cmUgPSBnZW5lcmF0ZUNv
bG9yVGV4dHVyZShjb250ZXh0LCBzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdC
dWZmZXIoKQogeworICAgIGNsZWFyKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXIo
KQoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgICAgIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAobV9pbnRlcm5hbC0+cGxhdGZv
cm1MYXllcikKICAgICAgICAgbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllci0+c2V0RHJhd2luZ0J1
ZmZlcigwKTsKICNlbmRpZgotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1fZnJhbWVi
dWZmZXIpOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1fZmJvKTsKICAgICBtX2NvbnRleHQtPmRlbGV0ZVRl
eHR1cmUobV9pbnRlcm5hbC0+b2Zmc2NyZWVuQ29sb3JUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQt
PmRlbGV0ZUZyYW1lYnVmZmVyKG1fZnJhbWVidWZmZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRl
RnJhbWVidWZmZXIobV9mYm8pOworICAgIG1fZmJvID0gMDsKKworICAgIG1fY29udGV4dCA9IDA7
CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xMjgsNyArMTUwLDcg
QEAgUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYQogfQogI2VuZGlmCiAK
LXVuc2lnbmVkIERyYXdpbmdCdWZmZXI6OmdldFJlbmRlcmluZ1Jlc3VsdHNBc1RleHR1cmUoKQor
UGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9pbnRlcm5hbC0+b2Zmc2NyZWVuQ29sb3JUZXh0dXJlOwogfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5j
cHAJKHJldmlzaW9uIDY5MzEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI3ICszMCwyMiBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAotI2luY2x1ZGUgIlNoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxE
cmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzT3duUHRyPERyYXdpbmdCdWZm
ZXI+IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICB1bnNpZ25lZCBmcmFtZWJ1ZmZlciA9IGNvbnRleHQt
PmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgQVNTRVJUKGZyYW1lYnVmZmVyKTsKLSAgICBpZiAo
IWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgZnJhbWVidWZmZXIpKTsKKyAgICBPd25QdHI8
RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBEcmF3aW5nQnVmZmVy
KGNvbnRleHQsIHNpemUpKTsKKyAgICByZXR1cm4gKGRyYXdpbmdCdWZmZXItPm1fY29udGV4dCkg
PyBkcmF3aW5nQnVmZmVyLnJlbGVhc2UoKSA6IDA7CiB9CiAKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6
YmluZCgpCiB7Ci0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7
Ci0gICAgbV9jb250ZXh0LT5zZXRWaWV3cG9ydChtX3NpemUpOworICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7CisgICAgbV9jb250ZXh0LT52aWV3cG9y
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0Ry
YXdpbmdCdWZmZXIuaAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDYgQEAK
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOwotCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiBzdHJ1Y3QgRHJhd2luZ0J1ZmZlcklu
dGVybmFsOwogI2VuZGlmCkBAIC01NCwyMCArNTEsMjggQEAgc3RydWN0IERyYXdpbmdCdWZmZXJJ
bnRlcm5hbDsKIC8vIHJlc3VsdHMgdG8gYSBQbGF0Zm9ybUxheWVyIGZvciBjb21wb3NpdGluZy4K
IGNsYXNzIERyYXdpbmdCdWZmZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7CisgICAgCiAgICAgfkRyYXdpbmdCdWZmZXIoKTsKIAogICAgIHZvaWQgcmVzZXQoY29u
c3QgSW50U2l6ZSYpOwogICAgIHZvaWQgYmluZCgpOwogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIAorICAgIC8vIENsZWFyIGFsbCByZXNvdXJjZXMgZnJv
bSB0aGlzIG9iamVjdCwgYXMgd2VsbCBhcyBjb250ZXh0LiBDYWxsZWQgd2hlbiBjb250ZXh0IGlz
IGRlc3Ryb3llZAorICAgIC8vIHRvIHByZXZlbnQgaW52YWxpZCBhY2Nlc3NlcyB0byB0aGUgcmVz
b3VyY2VzLgorICAgIHZvaWQgY2xlYXIoKTsKKworICAgIC8vIENvcGllcyB0aGUgbXVsdGlzYW1w
bGUgY29sb3IgYnVmZmVyIHRvIHRoZSBub3JtYWwgY29sb3IgYnVmZmVyIGFuZCBsZWF2ZXMgbV9m
Ym8gYm91bmQKKyAgICB2b2lkIGNvbW1pdChsb25nIHggPSAwLCBsb25nIHkgPSAwLCBsb25nIHdp
ZHRoID0gLTEsIGxvbmcgaGVpZ2h0ID0gLTEpOworICAgIAorICAgIFBsYXRmb3JtM0RPYmplY3Qg
cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JCdWZmZXI7IH0KIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCk7CisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0Owog
ICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwogI2VuZGlmCiAKLSAgICB1bnNpZ25l
ZCBnZXRSZW5kZXJpbmdSZXN1bHRzQXNUZXh0dXJlKCk7Ci0KICNpZiBQTEFURk9STShDSFJPTUlV
TSkKICAgICBjbGFzcyBXaWxsUHVibGlzaENhbGxiYWNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsK
ICAgICBwdWJsaWM6CkBAIC03OSwyMSArODQsMzQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2ls
bFB1Ymxpc2hDYWxsYmFjayhQYXNzT3duUHRyPFdpbGxQdWJsaXNoQ2FsbGJhY2s+IGNhbGxiYWNr
KSB7IG1fY2FsbGJhY2sgPSBjYWxsYmFjazsgfQogI2VuZGlmCiAKKyAgICBHcmFwaGljc0NvbnRl
eHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAg
ICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgUGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CisgICAgCiBwcml2YXRlOgot
ICAgIERyYXdpbmdCdWZmZXIoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXpl
JiwgdW5zaWduZWQgZnJhbWVidWZmZXIpOworICAgIERyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CiAKLSAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAgICAgSW50U2l6
ZSBtX3NpemU7Ci0gICAgdW5zaWduZWQgbV9mcmFtZWJ1ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fZmJvOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFBsYXRmb3JtM0RPYmplY3QgbV9j
b2xvckJ1ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwor
CisgICAgLy8gRm9yIG11bHRpc2FtcGxpbmcKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlz
YW1wbGVGQk87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7
CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyOwor
CisgICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fcGxhdGZvcm1MYXllcjsKKyNlbmRpZgogCiAj
aWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgT3duUHRyPFdpbGxQdWJsaXNoQ2FsbGJhY2s+IG1f
Y2FsbGJhY2s7CiAgICAgT3duUHRyPERyYXdpbmdCdWZmZXJJbnRlcm5hbD4gbV9pbnRlcm5hbDsK
ICNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxXZWJHTExheWVyPiBt
X3BsYXRmb3JtTGF5ZXI7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNE
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsNiArMTE3LDggQEAgcHVibGljOgogICAgIC8vIENyZWF0ZXMgYSB0ZXh0dXJlIHRoYXQgaXMg
bm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgaW1hZ2UuICBUaGUgY2FsbGVyIHRha2VzIG93bmVyc2hp
cCBvZgogICAgIC8vIHRoZSB0ZXh0dXJlLgogICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gY3JlYXRl
VGV4dHVyZShUZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgCisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0LmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8U29saWRGaWxsU2hh
ZGVyPiwgUGFzc093blB0cjxUZXhTaGFkZXI+KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCShyZXZpc2lvbiA2
OTMxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVy
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwzNyArMjUsMTEwIEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKIAotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQog
CiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCi0jaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkdM
TGF5ZXIuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgdW5zaWduZWQgZnJhbWVidWZmZXIp
CitEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBJbnRTaXplJiBzaXplKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBt
X3NpemUoc2l6ZSkKLSAgICAsIG1fZnJhbWVidWZmZXIoZnJhbWVidWZmZXIpCisgICAgLCBtX2Zi
bygwKQorICAgICwgbV9jb2xvckJ1ZmZlcigwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIo
MCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogewotICAg
IGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0KICAgICAvLyBDcmVhdGUg
dGhlIFdlYkdMTGF5ZXIKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAg
bV9wbGF0Zm9ybUxheWVyLmFkb3B0TlMoW1tXZWJHTExheWVyIGFsbG9jXSBpbml0V2l0aEdyYXBo
aWNzQ29udGV4dDNEOjBdKTsKKyAgICAgICAgbV9wbGF0Zm9ybUxheWVyLmFkb3B0TlMoW1tXZWJH
TExheWVyIGFsbG9jXSBpbml0V2l0aERyYXdpbmdCdWZmZXI6dGhpc10pOwogI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgW21fcGxhdGZvcm1MYXllci5nZXQoKSBzZXROYW1lOkAiV2ViR0wgTGF5ZXIi
XTsKKyAgICAgICAgW21fcGxhdGZvcm1MYXllci5nZXQoKSBzZXROYW1lOkAiRHJhd2luZ0J1ZmZl
ciBMYXllciJdOwogI2VuZGlmICAgIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAg
ICAKKyAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCisgICAgbV9jb2xvckJ1
ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgY29u
dGV4dC0+dGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVB
Uik7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVBUik7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVy
aShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAgIAor
ICAgIC8vIENyZWF0ZSB0aGUgRkJPCisgICAgbV9mYm8gPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1
ZmZlcigpOworICAgIEFTU0VSVChtX2Zibyk7CisgICAgaWYgKCFtX2ZibykgeworICAgICAgICBj
bGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjb25zdCBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IGNvbnRleHQtPmF0dHJpYnV0
ZXMoKTsKKyAgICAKKyAgICAvLyBDcmVhdGUgdGhlIHN0ZW5jaWwgYW5kIGRlcHRoIGJ1ZmZlciBp
ZiBuZWVkZWQKKyAgICBpZiAoIWF0dHJpYnV0ZXMuYW50aWFsaWFzICYmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkpCisgICAgICAgIG1fZGVwdGhTdGVuY2lsQnVmZmVy
ID0gY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisKKyAgICAvLyBjcmVhdGUgYSBtdWx0
aXNhbXBsZSBGQk8KKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgbV9t
dWx0aXNhbXBsZUZCTyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJP
KTsKKyAgICAgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gY29udGV4dC0+Y3JlYXRlUmVu
ZGVyYnVmZmVyKCk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRl
cy5kZXB0aCkKKyAgICAgICAgICAgIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgPSBj
b250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICB9CisgICAgCisgICAgcmVzZXQoc2l6
ZSk7CiB9CiAKIERyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKIHsKLSAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihtX2ZyYW1lYnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPmRlbGV0
ZUZyYW1lYnVmZmVyKG1fZnJhbWVidWZmZXIpOworICAgIG1fY29udGV4dC0+cmVtb3ZlRHJhd2lu
Z0J1ZmZlcih0aGlzKTsKKyAgICBjbGVhcigpOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OmNs
ZWFyKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fY29udGV4dC0+ZGVs
ZXRlVGV4dHVyZShtX2NvbG9yQnVmZmVyKTsKKyAgICBtX2NvbG9yQnVmZmVyID0gMDsKKyAgICAK
KyAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+
ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IDA7CisgICAgfQorICAgIAorICAgIGlmIChtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVu
ZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICB9CisgICAgCisgICAgaWYgKG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVm
ZmVyKG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIg
PSAwOworICAgIH0KKyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgICAgIG1fbXVsdGlzYW1wbGVGQk8gPSAwOworICAgIH0KKyAgICAgICAgCisgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICBt
X2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJvKTsKKyAgICBtX2ZibyA9IDA7CisgICAg
CisgICAgbV9jb250ZXh0ID0gMDsKIH0KIAogdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25z
dCBJbnRTaXplJiBuZXdTaXplKQpAQCAtNjQsMTEgKzEzNywxNDYgQEAgdm9pZCBEcmF3aW5nQnVm
ZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICByZXR1cm47CiAgICAgbV9zaXplID0g
bmV3U2l6ZTsKIAotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICAKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9
IG1fY29udGV4dC0+YXR0cmlidXRlcygpOworICAgIEdMdWludCBpbnRlcm5hbENvbG9yRm9ybWF0
LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSAwOworICAgIGlmIChh
dHRyaWJ1dGVzLmFscGhhKSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JB
ODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7CisgICAgICAg
IGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdM
X1JHQjsKKyAgICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2ls
IGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0Nv
bnRleHQzRCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCAmJiBh
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQg
PSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW50
ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgfQorCisg
ICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZCTworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlh
cykgeworICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAgCisgICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19FWFQsICZtYXhTYW1wbGVDb3VudCk7CisgICAg
ICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOworICAg
ICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhTYW1wbGVDb3VudCkKKyAgICAgICAgICAgIHNhbXBs
ZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIAorICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisKKyAgICAg
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxDb2xvckZv
cm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIDo6Z2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7
CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxl
Q291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAg
ICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5k
ZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAg
ICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAg
ICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAh
PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBj
bGVhbnVwLgorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQw
X0VYVCwgR0xfVEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CisgICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIGlmICghYXR0cmlidXRlcy5hbnRpYWxpYXMgJiYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkgeworICAgICAgICA6Omds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAg
IDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NU
RU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9B
VFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAw
KTsKKyAgICB9CisgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJV
RkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgeworICAgICAgICAvLyBG
SVhNRTogY2xlYW51cAorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIGlm
IChhdHRyaWJ1dGVzLmFudGlhbGlhcykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworCisgICAgLy8gSW5pdGlhbGl6
ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RS
VUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFLCBzdGVu
Y2lsTWFzayA9IEdMX1RSVUU7CisgICAgR0xib29sZWFuIGlzU2Npc3NvckVuYWJsZWQgPSBHTF9G
QUxTRTsKKyAgICBHTGJvb2xlYW4gaXNEaXRoZXJFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xi
aXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAgIDo6Z2xHZXRCb29s
ZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7CisgICAgOjpnbENvbG9yTWFzayhH
TF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKKyAgICBpZiAoYXR0cmlidXRlcy5k
ZXB0aCkgeworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVw
dGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJN
YXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChhdHRyaWJ1dGVzLnN0
ZW5jaWwpIHsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX1NURU5DSUxfV1JJVEVNQVNLLCAm
c3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2soR0xfVFJVRSk7CisgICAgICAg
IGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlzU2Npc3Nv
ckVuYWJsZWQgPSA6OmdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgOjpnbERpc2Fi
bGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVuYWJsZWQgPSA6OmdsSXNFbmFibGVk
KEdMX0RJVEhFUik7CisgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKKworICAgIDo6Z2xDbGVh
cihjbGVhck1hc2spOworCisgICAgOjpnbENvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFz
a1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOworICAgIGlmIChhdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7CisgICAgaWYgKGF0dHJpYnV0
ZXMuc3RlbmNpbCkKKyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrKHN0ZW5jaWxNYXNrKTsKKyAgICBp
ZiAoaXNTY2lzc29yRW5hYmxlZCkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1Qp
OworICAgIGVsc2UKKyAgICAgICAgOjpnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBp
ZiAoaXNEaXRoZXJFbmFibGVkKQorICAgICAgICA6OmdsRW5hYmxlKEdMX0RJVEhFUik7CisgICAg
ZWxzZQorICAgICAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCisgICAgOjpnbEZsdXNoKCk7
Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6Y29tbWl0KGxvbmcgeCwgbG9uZyB5LCBsb25nIHdp
ZHRoLCBsb25nIGhlaWdodCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBpZiAod2lkdGggPCAwKQorICAgICAgICB3aWR0aCA9IG1fc2l6ZS53
aWR0aCgpOworICAgIGlmIChoZWlnaHQgPCAwKQorICAgICAgICBoZWlnaHQgPSBtX3NpemUuaGVp
Z2h0KCk7CisgICAgICAgIAorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgCisgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJv
KTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAg
IH0KKyAgICAKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
bV9mYm8pOwogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotUGxhdGZvcm1M
YXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcigpCitQbGF0Zm9ybUxheWVyKiBEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wbGF0Zm9y
bUxheWVyLmdldCgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHJldmlzaW9uIDY5MzEzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbmNsdWRlICJVaW50OEFycmF5LmgiCiAjaW5j
bHVkZSAiV2ViR0xMYXllci5oIgogI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCi0jaW5jbHVkZSA8
d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC03NywzMCArNzYsMjAgQEAgc3RhdGljIHZvaWQgc2V0UGl4ZWxG
b3JtYXQoVmVjdG9yPENHTFBpeAogICAgIGF0dHJpYnMuYXBwZW5kKHN0YXRpY19jYXN0PENHTFBp
eGVsRm9ybWF0QXR0cmlidXRlPigwKSk7CiB9CiAKLVBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5k
ZXJTdHlsZSByZW5kZXJTdHlsZSkKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMs
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQogewogICAg
IC8vIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCByZW5kZXJp
bmcgZGlyZWN0bHkgdG8gdGhlIEhvc3RXaW5kb3cuCiAgICAgaWYgKHJlbmRlclN0eWxlID09IFJl
bmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQogICAgICAgICByZXR1cm4gMDsKLSAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBo
b3N0V2luZG93LCBmYWxzZSkpOworICAgICAgICAKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2luZG93LCByZW5k
ZXJTdHlsZSkpOwogICAgIHJldHVybiBjb250ZXh0LT5tX2NvbnRleHRPYmogPyBjb250ZXh0LnJl
bGVhc2UoKSA6IDA7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgYm9vbCkKLSAgICA6IG1fY3VycmVudFdpZHRoKDApCi0gICAgLCBtX2N1cnJlbnRIZWlnaHQo
MCkKLSAgICAsIG1fYXR0cnMoYXR0cnMpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250
ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIC8q
IGhvc3RXaW5kb3cgKi8sIFJlbmRlclN0eWxlIC8qIHJlbmRlclN0eWxlKi8pCisgICAgOiBtX2F0
dHJzKGF0dHJzKQogICAgICwgbV9jb250ZXh0T2JqKDApCi0gICAgLCBtX3RleHR1cmUoMCkKLSAg
ICAsIG1fZmJvKDApCi0gICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQotICAgICwgbV9ib3Vu
ZEZCTygwKQotICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQotICAgICwgbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcigwKQotICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCiB7
Ci0gICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotCiAgICAgVmVjdG9yPENHTFBpeGVsRm9y
bWF0QXR0cmlidXRlPiBhdHRyaWJzOwogICAgIENHTFBpeGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0
T2JqID0gMDsKICAgICBHTGludCBudW1QaXhlbEZvcm1hdHMgPSAwOwpAQCAtMTUwLDQxICsxMzks
NiBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgCiAgICAg
dmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKLSAgICAvLyBDcmVhdGUgdGhlIFdlYkdMTGF5ZXIKLSAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAgICAgbV93ZWJHTExheWVyLmFkb3B0
TlMoW1tXZWJHTExheWVyIGFsbG9jXSBpbml0V2l0aEdyYXBoaWNzQ29udGV4dDNEOnRoaXNdKTsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFttX3dlYkdMTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIldl
YkdMIExheWVyIl07Ci0jZW5kaWYgICAgCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwot
ICAgIAotICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8KLSAgICA6OmdsR2Vu
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICA6Omds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVAp
OwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9U
LCBHTF9DTEFNUCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAg
IAotICAgIC8vIGNyZWF0ZSBhbiBGQk8KLSAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZt
X2Zibyk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1f
ZmJvKTsKLSAgICAKLSAgICBtX2JvdW5kRkJPID0gbV9mYm87Ci0gICAgaWYgKCFtX2F0dHJzLmFu
dGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQotICAgICAgICA6
OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotCi0gICAg
Ly8gY3JlYXRlIGFuIG11bHRpc2FtcGxlIEZCTwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykg
ewotICAgICAgICA6OmdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVs
dGlzYW1wbGVGQk8pOwotICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAg
ICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAg
ICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyKTsKLSAgICB9Ci0gICAgCiAgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCiAK
ICAgICBUQnVpbHRJblJlc291cmNlIEFOR0xFUmVzb3VyY2VzOwpAQCAtMjE1LDE5ICsxNjksOSBA
QCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAKIEdyYXBoaWNzQ29u
dGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogeworICAgIGNsZWFyRHJhd2luZ0J1ZmZlcnMo
KTsKKyAgICAKICAgICBpZiAobV9jb250ZXh0T2JqKSB7Ci0gICAgICAgIENHTFNldEN1cnJlbnRD
b250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgICAgICA6
OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAg
ICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhU
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6Omds
RGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAg
ICB9Ci0gICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKICAgICAg
ICAgQ0dMU2V0Q3VycmVudENvbnRleHQoMCk7CiAgICAgICAgIENHTERlc3Ryb3lDb250ZXh0KG1f
Y29udGV4dE9iaik7CiAgICAgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
V2ViR0xMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1dlYkdMTGF5ZXIuaAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJHTExheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE2ICszMiwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgR3JhcGhpY3NMYXllcjsKLSAgICBjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKKyAgICBjbGFzcyBEcmF3aW5nQnVmZmVyOwogfQogCiBAaW50
ZXJmYWNlIFdlYkdMTGF5ZXIgOiBDQU9wZW5HTExheWVyIAogewogICAgIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqIG1fbGF5ZXJPd25lcjsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRCog
bV9jb250ZXh0OworICAgIFdlYkNvcmU6OkRyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsK
IH0KIAotLSAoaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDooV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0QqKWNvbnRleHQ7CistIChpZClpbml0V2l0aERyYXdpbmdCdWZmZXI6KFdlYkNvcmU6
OkRyYXdpbmdCdWZmZXIqKWRyYXdpbmdCdWZmZXI7CiAKIC0gKENHSW1hZ2VSZWYpY29weUltYWdl
U25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNvbG9yU3BhY2U7CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQkocmV2aXNp
b24gNjkzMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbXBvcnQgIldlYkdMTGF5ZXIu
aCIKIAorI2ltcG9ydCAiRHJhd2luZ0J1ZmZlci5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbXBvcnQgPE9wZW5HTC9PcGVuR0wu
aD4KQEAgLTQxLDkgKzQyLDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIEBpbXBsZW1l
bnRhdGlvbiBXZWJHTExheWVyCiAKLS0oaWQpaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDooR3Jh
cGhpY3NDb250ZXh0M0QqKWNvbnRleHQKKy0oaWQpaW5pdFdpdGhEcmF3aW5nQnVmZmVyOihEcmF3
aW5nQnVmZmVyKilkcmF3aW5nQnVmZmVyCiB7Ci0gICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAg
ICBtX2RyYXdpbmdCdWZmZXIgPSBkcmF3aW5nQnVmZmVyOwogICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CiAgICAgcmV0dXJuIHNlbGY7CiB9CkBAIC01NywxOSArNTgsMjIgQEAgLShDR0xQaXhlbEZv
cm1hdE9iailjb3B5Q0dMUGl4ZWxGb3JtYXRGbwogICAgIC8vIElmIG5lZWRlZCB3ZSB3aWxsIGhh
dmUgdG8gc2V0IHRoZSBkaXNwbGF5IG1hc2sgaW4gdGhlIENhbnZhcyBDR0xDb250ZXh0IGFuZAog
ICAgIC8vIG1ha2Ugc3VyZSBpdCBtYXRjaGVzLgogICAgIFVOVVNFRF9QQVJBTShtYXNrKTsKLSAg
ICByZXR1cm4gQ0dMUmV0YWluUGl4ZWxGb3JtYXQoQ0dMR2V0UGl4ZWxGb3JtYXQobV9jb250ZXh0
LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpKTsKKyAgICByZXR1cm4gQ0dMUmV0YWluUGl4
ZWxGb3JtYXQoQ0dMR2V0UGl4ZWxGb3JtYXQobV9kcmF3aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRl
eHQzRCgpLT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpKTsKIH0KIAogLShDR0xDb250ZXh0
T2JqKWNvcHlDR0xDb250ZXh0Rm9yUGl4ZWxGb3JtYXQ6KENHTFBpeGVsRm9ybWF0T2JqKXBpeGVs
Rm9ybWF0CiB7CiAgICAgQ0dMQ29udGV4dE9iaiBjb250ZXh0T2JqOwotICAgIENHTENyZWF0ZUNv
bnRleHQocGl4ZWxGb3JtYXQsIG1fY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgp
LCAmY29udGV4dE9iaik7CisgICAgQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1hdCwgbV9kcmF3
aW5nQnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCksICZjb250ZXh0T2JqKTsKICAgICByZXR1cm4gY29udGV4dE9iajsKIH0KIAogLSh2b2lkKWRy
YXdJbkNHTENvbnRleHQ6KENHTENvbnRleHRPYmopZ2xDb250ZXh0IHBpeGVsRm9ybWF0OihDR0xQ
aXhlbEZvcm1hdE9iailwaXhlbEZvcm1hdCBmb3JMYXllclRpbWU6KENGVGltZUludGVydmFsKXRp
bWVJbnRlcnZhbCBkaXNwbGF5VGltZTooY29uc3QgQ1ZUaW1lU3RhbXAgKil0aW1lU3RhbXAKIHsK
LSAgICBtX2NvbnRleHQtPnByZXBhcmVUZXh0dXJlKCk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5n
cmFwaGljc0NvbnRleHQzRCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2RyYXdpbmdC
dWZmZXItPmNvbW1pdCgpOworICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIG1fZHJh
d2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZmluaXNoKCk7CiAKICAgICBDR0xTZXRD
dXJyZW50Q29udGV4dChnbENvbnRleHQpOwogCkBAIC04NCw3ICs4OCw3IEBAIC0odm9pZClkcmF3
SW5DR0xDb250ZXh0OihDR0xDb250ZXh0T2JqKWcKICAgICBnbExvYWRJZGVudGl0eSgpOwogCiAg
ICAgZ2xFbmFibGUoR0xfVEVYVFVSRV8yRCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBtX2NvbnRleHQtPnBsYXRmb3JtVGV4dHVyZSgpKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1Db2xvckJ1ZmZlcigpKTsKICAg
ICAKICAgICBnbEJlZ2luKEdMX1RSSUFOR0xFX0ZBTik7CiAgICAgICAgIGdsVGV4Q29vcmQyZigw
LCAwKTsKQEAgLTExMSw3ICsxMTUsNyBAQCBzdGF0aWMgdm9pZCBmcmVlRGF0YSh2b2lkICosIGNv
bnN0IHZvaWQgCiAKIC0oQ0dJbWFnZVJlZiljb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNl
OihDR0NvbG9yU3BhY2VSZWYpY29sb3JTcGFjZQogewotICAgIENHTFNldEN1cnJlbnRDb250ZXh0
KG1fY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICBDR0xTZXRDdXJy
ZW50Q29udGV4dChtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSk7CiAKICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBp
bWFnZUNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwogICAgIGlmICghaW1hZ2VDb2xvclNwYWNlKQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgi
CiAjaW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCi0jaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIK
ICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRmxvYXQzMkFy
cmF5LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC00MCw2ICszOSw3IEBACiAj
aW5jbHVkZSAiSW50MzJBcnJheS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiVWludDhBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAKICNpZiBQTEFU
Rk9STShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CkBAIC03OCw5ICs3OCwxMiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1JlCiB7CiAgICAgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFn
ZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CisgICAgCisgICAgaW50IHdpZHRoID0gY29udGV4
dC0+Y2FudmFzKCktPndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGNvbnRleHQtPmNhbnZhcygp
LT5oZWlnaHQoKTsKIAotICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKLSAg
ICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OworICAgIGludCBy
b3dCeXRlcyA9IHdpZHRoICogNDsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogaGVp
Z2h0OwogCiAgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzKG5ldyB1bnNpZ25l
ZCBjaGFyW3RvdGFsQnl0ZXNdKTsKICAgICBpZiAoIXBpeGVscykKQEAgLTg4LDIwICs5MSw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmUKIAogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAg
ICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX0NPTE9SX0JV
RkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgewotICAgICAg
ICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgfQotICAgIH0KLQog
ICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OwogICAgIGJvb2wgbXVzdFJlc3RvcmVQYWNrQWxp
Z25tZW50ID0gZmFsc2U7CiAgICAgOjpnbEdldEludGVnZXJ2KEdMX1BBQ0tfQUxJR05NRU5ULCAm
cGFja0FsaWdubWVudCk7CkBAIC0xMTAsMTU5ICs5OSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1JlCiAgICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9
IHRydWU7CiAgICAgfQogCi0gICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBw
aXhlbHMuZ2V0KCkpOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIEdM
X0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzLmdldCgpKTsKIAogICAg
IGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCiAgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShH
TF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7CiAKLSAgICBpZiAobXVzdFJlc3RvcmVG
Qk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X2JvdW5kRkJPKTsKLQotICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgY2FudmFzLT53aWR0aCgp
LCBjYW52YXMtPmhlaWdodCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRl
eHQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQotewotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQg
PT0gbV9jdXJyZW50SGVpZ2h0IHx8ICFtX2NvbnRleHRPYmopCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOwotICAgIG1fY3VycmVudEhlaWdodCA9IGhl
aWdodDsKLSAgICAKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAKLSAgICBHTHVpbnQg
aW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9y
bWF0ID0gMDsKLSAgICBpZiAobV9hdHRycy5hbHBoYSkgewotICAgICAgICBpbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCQTg7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICB9
IGVsc2UgewotICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCODsKLSAgICAgICAg
Y29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgfQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwg
bV9hdHRycy5kZXB0aCkgewotICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hl
cmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgotICAgICAgICAvLyBTZWUg
R3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IuCi0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5j
aWwgJiYgbV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9y
bWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UOwotICAgIH0K
LQotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLQotICAgIC8vIHJlc2l6ZSBtdWx0
aXNhbXBsZSBGQk8KLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgR0xpbnQg
bWF4U2FtcGxlQ291bnQ7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9NQVhfU0FNUExFU19F
WFQsICZtYXhTYW1wbGVDb3VudCk7Ci0gICAgICAgIEdMaW50IHNhbXBsZUNvdW50ID0gc3RkOjpt
aW4oOCwgbWF4U2FtcGxlQ291bnQpOwotICAgICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhTYW1w
bGVDb3VudCkKLSAgICAgICAgICAgIHNhbXBsZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7Ci0gICAg
ICAgIGlmIChtX2JvdW5kRkJPICE9IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJP
KTsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2Ft
cGxlQ29sb3JCdWZmZXIpOwotICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAobV9h
dHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kUmVu
ZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5j
aWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCkKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGlmICht
X2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAg
fQotICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAw
KTsKLSAgICAgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZF
Ul9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkgewotICAgICAgICAgICAgLy8g
RklYTUU6IGNsZWFudXAuCi0gICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCi0gICAgaWYgKG1fYm91bmRGQk8g
IT0gbV9mYm8pIHsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIH0KLSAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEZyYW1l
YnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVO
VDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0
dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpIHsKLSAgICAgICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAg
ICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBpbnRl
cm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGlmIChtX2F0
dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJC
VUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIGlmIChtX2F0dHJzLmRl
cHRoKQotICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQo
R0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0gICAgfQotICAgIGlmIChnbENoZWNrRnJhbWVidWZm
ZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RV9FWFQpIHsKLSAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKLSAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8p
OwotICAgICAgICBpZiAobV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICAg
ICAgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJbml0aWFsaXplIHJl
bmRlcmJ1ZmZlcnMgdG8gMC4KLSAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwg
R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUUsIHN0ZW5jaWxN
YXNrID0gR0xfVFJVRTsKLSAgICBHTGJvb2xlYW4gaXNTY2lzc29yRW5hYmxlZCA9IEdMX0ZBTFNF
OwotICAgIEdMYm9vbGVhbiBpc0RpdGhlckVuYWJsZWQgPSBHTF9GQUxTRTsKLSAgICBHTGJpdGZp
ZWxkIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgOjpnbEdldEJvb2xlYW52
KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKLSAgICA6OmdsQ29sb3JNYXNrKEdMX1RS
VUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOwotICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7
Ci0gICAgICAgIDo6Z2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2sp
OwotICAgICAgICA6OmdsRGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVhck1hc2sgfD0g
R0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewot
ICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfU1RFTkNJTF9XUklURU1BU0ssICZzdGVuY2lsTWFz
ayk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFzayhHTF9UUlVFKTsKLSAgICAgICAgY2xlYXJNYXNr
IHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9
IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKLSAgICA6OmdsRGlzYWJsZShHTF9TQ0lT
U09SX1RFU1QpOwotICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVS
KTsKLSAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOwotCi0gICAgOjpnbENsZWFyKGNsZWFyTWFz
ayk7Ci0KLSAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xv
ck1hc2tbMl0sIGNvbG9yTWFza1szXSk7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAg
IDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKLSAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAg
ICAgICA6OmdsU3RlbmNpbE1hc2soc3RlbmNpbE1hc2spOwotICAgIGlmIChpc1NjaXNzb3JFbmFi
bGVkKQotICAgICAgICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgZWxzZQotICAg
ICAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGlmIChpc0RpdGhlckVuYWJs
ZWQpCi0gICAgICAgIDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKLSAgICBlbHNlCi0gICAgICAgIDo6
Z2xEaXNhYmxlKEdMX0RJVEhFUik7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsK
LQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJl
VGV4dHVyZSgpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fYXR0cnMu
YW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFN
RUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xCbGl0
RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCwg
MCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwg
R0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fYm91bmRGQk8pOwotICAgIH0KLSAgICA6OmdsRmluaXNoKCk7CisgICAgcGFpbnRU
b0NhbnZhcyhwaXhlbHMuZ2V0KCksIHdpZHRoLCBoZWlnaHQsIGNhbnZhcy0+d2lkdGgoKSwgY2Fu
dmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxv
bmcgdGV4dHVyZSkKQEAgLTI5NiwxNSArMTM4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
YmluZEJ1ZmZlcih1bnNpZwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKIHsKICAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTHVpbnQgZmJvOwotICAgIGlmIChidWZmZXIpCi0g
ICAgICAgIGZibyA9IChHTHVpbnQpYnVmZmVyOwotICAgIGVsc2UKLSAgICAgICAgZmJvID0gKG1f
YXR0cnMuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSAgICBpZiAoZmJv
ICE9IG1fYm91bmRGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQs
IGZibyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBmYm87Ci0gICAgfQorICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQodGFyZ2V0LCBidWZmZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IHJlbmRlcmJ1ZmZlcikKQEAgLTQ2MCwyOSArMjk0LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbXBpbGVTaGFkZXIoUGwKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFn
ZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGludGVy
bmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVS
X0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1
ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSAr
IGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICB9CiAgICAg
OjpnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2Jv
dW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxv
bmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0g
bV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JF
QURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6
OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwg
eCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwot
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8p
OwotICAgIH0KICAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCkBA
IC03NzgsMTYgKzU5Niw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMobG9u
ZyAKICAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJl
Zm9yZSByZWFkaW5nIHBpeGVscy4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6Omds
Rmx1c2goKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9G
UkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xC
bGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsg
d2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0g
ICAgICAgIDo6Z2xGbHVzaCgpOwotICAgIH0KKyAgICAKICAgICA6OmdsUmVhZFBpeGVscyh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70259</attachid>
            <date>2010-10-08 09:21:04 -0700</date>
            <delta_ts>2010-11-08 14:01:36 -0800</delta_ts>
            <desc>Patch fixing Chromium build issue (does not address jamesr comments)</desc>
            <filename>bug-47379-20101008092102.patch</filename>
            <type>text/plain</type>
            <size>52303</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTMzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjcgQEAKKzIwMTAtMTAtMDcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgZHJhd2luZyBidWZmZXIgbG9naWMgb3V0IG9mIEdyYXBoaWNzQ29udGV4dDNEIGFuZCBpbnRv
IERyYXdpbmdCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ3Mzc5CisKKyAgICAgICAgVGhpcyBpcyBqdXN0IHJlc3RydWN0dXJpbmcsIHNvIHRo
ZSBjdXJyZW50IHRlc3RzIGFyZSBzdWZmaWNpZW50LgorCisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3Jt
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3Vi
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQ
aXhlbHMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVEcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW1vdmVEcmF3aW5nQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRyYXdpbmdCdWZmZXJz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdC
dWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpiaW5kKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1
ZmZlcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y29tbWl0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1dlYkdMTGF5ZXIubW06CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUNHTFBp
eGVsRm9ybWF0Rm9yRGlzcGxheU1hc2s6XSk6CisgICAgICAgICgtW1dlYkdMTGF5ZXIgY29weUNH
TENvbnRleHRGb3JQaXhlbEZvcm1hdDpdKToKKyAgICAgICAgKC1bV2ViR0xMYXllciBkcmF3SW5D
R0xDb250ZXh0OnBpeGVsRm9ybWF0OmZvckxheWVyVGltZTpkaXNwbGF5VGltZTpdKToKKyAgICAg
ICAgKC1bV2ViR0xMYXllciBjb3B5SW1hZ2VTbmFwc2hvdFdpdGhDb2xvclNwYWNlOl0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29w
eVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFk
UGl4ZWxzKToKKwogMjAxMC0xMC0wNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDY5MzEz
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpDYW52YXNSZW5kZXJpbgogICAgIG1fY29udGV4dDNEID0gcC0+c2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QoKTsKICAgICBpZiAobV9jb250ZXh0M0QpIHsKICAgICAgICAgaWYgKEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShtX2NvbnRleHQzRC5nZXQoKSwgSW50U2l6ZShjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1
ZmZlciA9IG1fY29udGV4dDNELT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVEcmF3aW5nQnVm
ZmVyKEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CiAgICAgICAg
ICAgICBjLT5zZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChtX2NvbnRleHQzRC5nZXQoKSwgbV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBJbnRTaXplKGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDaGVja2VkSW50LmgiCiAjaW5jbHVkZSAiQ29uc29sZS5o
IgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKQEAgLTEwOSw3ICsxMTAsMTEgQEAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKGZhbHNlKQogewogICAgIEFTU0VSVChtX2NvbnRleHQpOwotCisgICAgCisgICAgLy8g
Q3JlYXRlIHRoZSBEcmF3aW5nQnVmZmVyCisgICAgbV9kcmF3aW5nQnVmZmVyID0gbV9jb250ZXh0
LT5jcmVhdGVEcmF3aW5nQnVmZmVyKEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSkpOworICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIAogICAgIGlu
dCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKICAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogICAgIG1fdGV4dHVyZVVuaXRzLnJl
c2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKQEAgLTEzNiw3ICsxNDEsNyBAQCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgIGNyZWF0ZUZh
bGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQog
ICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52
YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKKyAgICBtX2RyYXdpbmdCdWZmZXIt
PnJlc2V0KEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOwog
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygp
LT5oZWlnaHQoKSk7CiB9CiAKQEAgLTE2Nyw3ICsxNzIsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cGFpbnRSZW5kZXJpCiAgICAgICAgIHJldHVybjsKICAgICBjYW52YXMoKS0+Y2xl
YXJDb3BpZWRJbWFnZSgpOwogICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwogICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXModGhpcyk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiB9CiAK
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29u
c3QKQEAgLTE3NSw2ICsxODIsMTEgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50
c0ludG9DYQogICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsK
IH0KIAorUGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7
Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCkKIHsKICAgICBpZiAobV9uZWVkc1VwZGF0ZSkgewpAQCAtMTg4LDcgKzIwMCw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCAKIAogICAgIC8vIFdlIGRv
bid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3bHkgY3Jl
YXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgogICAgIC8vIGNsZWFyIChhbmQg
dGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBtX2NvbnRleHQtPnJlc2hh
cGUod2lkdGgsIGhlaWdodCk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpKTsKIH0KIAogaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0
ZXMoaW50IHR5cGUpCkBAIC01MzAsNyArNTQyLDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CisgICAgCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICAKICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOworICAgIAorICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKKyAgICAKICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5v
dCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRl
eC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nKQpAQCAtNTUxLDcgKzU3MywxNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29weVRleFN1YkltCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CisKKyAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0
aXNhbXBsaW5nKQorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZHJh
d2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgICAgIAogICAgIG1fY29udGV4dC0+Y29weVRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCk7CisKKyAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYg
KCFtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
CisgICAgCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTk4
Niw3ICsyMDE4LDE3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGwK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRk
cmVzcygpOworCisgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBm
b3IgbXVsdGlzYW1wbGluZykKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICAKICAgICBtX2NvbnRleHQtPnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICAK
KyAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgaWYgKCFtX2ZyYW1l
YnVmZmVyQmluZGluZykKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisKICNpZiBQ
TEFURk9STShDRykKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRy
aXZlciBidWcgb24gTWFjIGlzIGZpeGVkLCBpLmUuLAogICAgIC8vIHdoZW4gYWxwaGEgaXMgb2Zm
LCByZWFkUGl4ZWxzIHNob3VsZCBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24g
NjkzMTMpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzksNyArMjc5LDcgQEAgcHVibGljOgogCiAgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lmdl
dCgpOyB9CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC0+cGxh
dGZvcm1MYXllcigpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpOwpAQCAtMzMwLDYgKzMzMCw3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEltYWdlPiB2
aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyk7CiAKICAgICBPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBPd25QdHI8RHJhd2luZ0J1ZmZlcj4g
bV9kcmF3aW5nQnVmZmVyOwogICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsKICAgICBib29sIG1fbWFy
a2VkQ2FudmFzRGlydHk7CiAgICAgLy8gRklYTUU6IEkgdGhpbmsgdGhpcyBpcyBicm9rZW4gLS0g
aXQgZG9lcyBub3QgaW5jcmVtZW50IGFueQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDY5MzEzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5j
bHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAKQEAgLTQxLDYgKzQyLDI1
IEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRDb2xvcjE2VG84KHVpbnQxNl8KICAgICByZXR1cm4g
dmFsdWUgPj4gODsKIH0KIAorUGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlRHJhd2luZ0J1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIE93
blB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRl
KHRoaXMsIHNpemUpOworICAgIG1fZHJhd2luZ0J1ZmZlcnMuYWRkKGRyYXdpbmdCdWZmZXIuZ2V0
KCkpOworICAgIHJldHVybiBkcmF3aW5nQnVmZmVyLnJlbGVhc2UoKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVtb3ZlRHJhd2luZ0J1ZmZlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5n
QnVmZmVyKQoreworICAgIG1fZHJhd2luZ0J1ZmZlcnMucmVtb3ZlKGRyYXdpbmdCdWZmZXIpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRyYXdpbmdCdWZmZXJzKCkKK3sKKyAg
ICBIYXNoU2V0PERyYXdpbmdCdWZmZXIqPjo6aXRlcmF0b3IgZW5kID0gbV9kcmF3aW5nQnVmZmVy
cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8RHJhd2luZ0J1ZmZlcio+OjppdGVyYXRvciBpdCA9
IG1fZHJhd2luZ0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0
KS0+Y2xlYXIoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFu
ZFR5cGVQYXJhbWV0ZXJzKHVuc2lnbmVkIGludCBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHR5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgbG9uZyogY29tcG9uZW50c1BlclBpeGVsLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDkgKzI2LDYgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RfaAogI2RlZmluZSBH
cmFwaGljc0NvbnRleHQzRF9oCiAKLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiQU5HTEVX
ZWJLaXRCcmlkZ2UuaCIKLSNlbmRpZgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCkBAIC00Myw2ICs0MCw3IEBACiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgogI2luY2x1ZGUg
PE9wZW5HTC9PcGVuR0wuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTc4LDYg
Kzc2LDcgQEAgY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iagogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgRHJh
d2luZ0J1ZmZlcjsKIGNsYXNzIEhvc3RXaW5kb3c7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEltYWdl
RGF0YTsKQEAgLTQ0MiwxMiArNDQxLDEwIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSA9IFJlbmRlck9m
ZnNjcmVlbik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB+R3JhcGhp
Y3NDb250ZXh0M0QoKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHRPYmo7IH0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQotICAgIENBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxDQUxheWVyKj4obV93ZWJHTExheWVyLmdldCgpKTsgfQog
I2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBw
bGF0Zm9ybVRleHR1cmUoKSBjb25zdDsKQEAgLTQ2OSwxMSArNDY2LDExIEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIHZvaWQgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSNpZiBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKENIUk9NSVVNKQotICAgIC8vIFdpdGggbXVsdGlzYW1wbGluZyBvbiwgYmxp
dCBmcm9tIG11bHRpc2FtcGxlRkJPIHRvIHJlZ3VsYXIgRkJPLgotICAgIHZvaWQgcHJlcGFyZVRl
eHR1cmUoKTsKLSNlbmRpZgotCisgICAgUGFzc093blB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGVE
cmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmID0gSW50U2l6ZSgpKTsKKyAgICB2b2lkIHJlbW92
ZURyYXdpbmdCdWZmZXIoRHJhd2luZ0J1ZmZlciopOworICAgIAorICAgIGNvbnN0IEF0dHJpYnV0
ZXMmIGF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX2F0dHJzOyB9CisgICAgCiAgICAgLy8g
SGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcwog
ICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgogICAgIGludCBzaXplSW5CeXRlcyhp
bnQgdHlwZSk7CkBAIC03MzQsOCArNzMxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB2aWV3cG9y
dChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpOwogCi0gICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KICNpZiBQ
TEFURk9STShDRykKICAgICB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciog
aW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBpbnQgaW1hZ2VIZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgQ0dDb250ZXh0
UmVmIGNvbnRleHQpOwpAQCAtNzk1LDcgKzc5MCw5IEBAIHB1YmxpYzoKICAgICBpbnQgZ2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQigpOwogCiAgIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0QoQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJE
aXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcyBh
dHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgUmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpOwor
ICAgIAorICAgIHZvaWQgY2xlYXJEcmF3aW5nQnVmZmVycygpOwogCiAgICAgLy8gRWFjaCBwbGF0
Zm9ybSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QuCiAgICAg
Ly8KQEAgLTg0Miw2ICs4MzksMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZGVzdGluYXRpb25UeXBlLAogICAgICAgICAgICAgICAgICAgICBBbHBoYU9wIGFs
cGhhT3AsCiAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGRlc3RpbmF0aW9uRGF0YSk7CisgICAg
CisgICAgSGFzaFNldDxEcmF3aW5nQnVmZmVyKj4gbV9kcmF3aW5nQnVmZmVyczsKKworICAgIEF0
dHJpYnV0ZXMgbV9hdHRyczsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBUYWtlIGludG8g
YWNjb3VudCB0aGUgdXNlcidzIHJlcXVlc3RlZCBjb250ZXh0IGNyZWF0aW9uIGF0dHJpYnV0ZXMs
CkBAIC04NDksMTEgKzg1MCw3IEBAIHB1YmxpYzoKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3Jl
ZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBsZW1l
bnRhdGlvbi4KICAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOwotI2VuZGlmCiAKLSAgICBp
bnQgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodDsKLQotI2lmIFBMQVRGT1JNKE1BQykK
ICAgICB0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgIFN0cmluZyBzb3VyY2U7CiAgICAgICAgIFN0
cmluZyBsb2c7CkBAIC04NjMsMjIgKzg2MCw5IEBAIHB1YmxpYzoKIAogICAgIEFOR0xFV2ViS2l0
QnJpZGdlIG1fY29tcGlsZXI7CiAKLSAgICBBdHRyaWJ1dGVzIG1fYXR0cnM7CiAgICAgVmVjdG9y
PFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OwogCiAgICAgQ0dMQ29udGV4dE9iaiBtX2Nv
bnRleHRPYmo7Ci0gICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fd2ViR0xMYXllcjsKLSAgICBH
THVpbnQgbV90ZXh0dXJlOwotICAgIEdMdWludCBtX2ZibzsKLSAgICBHTHVpbnQgbV9kZXB0aFN0
ZW5jaWxCdWZmZXI7Ci0KLSAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJvdW5kCi0g
ICAgR0x1aW50IG1fYm91bmRGQk87Ci0KLSAgICAvLyBGb3IgbXVsdGlzYW1wbGluZwotICAgIEdM
dWludCBtX211bHRpc2FtcGxlRkJPOwotICAgIEdMdWludCBtX211bHRpc2FtcGxlRGVwdGhTdGVu
Y2lsQnVmZmVyOwotICAgIEdMdWludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CiAKICAgICAv
LyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8
dW5zaWduZWQgbG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiA2OTMxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMjUg
KzY2LDQ3IEBAIHN0YXRpYyB1bnNpZ25lZCBnZW5lcmF0ZUNvbG9yVGV4dHVyZShTaGEKIH0KIAog
Ci1EcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXplLCB1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK0RyYXdp
bmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0
IEludFNpemUmIHNpemUpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc2l6ZShz
aXplKQotICAgICwgbV9mcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikKKyAgICAsIG1fZmJvKGZyYW1l
YnVmZmVyKQogICAgICwgbV9pbnRlcm5hbChuZXcgRHJhd2luZ0J1ZmZlckludGVybmFsKQogewot
ICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CisgICAgLy8gQ3JlYXRl
IHRoZSBGQk8KKyAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAg
QVNTRVJUKG1fZmJvKTsKKyAgICBpZiAoIW1fZmJvKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1f
ZmJvKTsKICAgICBtX2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1cmUgPSBnZW5lcmF0ZUNv
bG9yVGV4dHVyZShjb250ZXh0LCBzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdC
dWZmZXIoKQogeworICAgIGNsZWFyKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXIo
KQoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgICAgIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAobV9pbnRlcm5hbC0+cGxhdGZv
cm1MYXllcikKICAgICAgICAgbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllci0+c2V0RHJhd2luZ0J1
ZmZlcigwKTsKICNlbmRpZgotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1fZnJhbWVi
dWZmZXIpOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1fZmJvKTsKICAgICBtX2NvbnRleHQtPmRlbGV0ZVRl
eHR1cmUobV9pbnRlcm5hbC0+b2Zmc2NyZWVuQ29sb3JUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQt
PmRlbGV0ZUZyYW1lYnVmZmVyKG1fZnJhbWVidWZmZXIpOworICAgIG1fY29udGV4dC0+ZGVsZXRl
RnJhbWVidWZmZXIobV9mYm8pOworICAgIG1fZmJvID0gMDsKKworICAgIG1fY29udGV4dCA9IDA7
CiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xMjgsNyArMTUwLDcg
QEAgUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYQogfQogI2VuZGlmCiAK
LXVuc2lnbmVkIERyYXdpbmdCdWZmZXI6OmdldFJlbmRlcmluZ1Jlc3VsdHNBc1RleHR1cmUoKQor
UGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9pbnRlcm5hbC0+b2Zmc2NyZWVuQ29sb3JUZXh0dXJlOwogfQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5j
cHAJKHJldmlzaW9uIDY5MzEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI3ICszMCwyMiBAQAogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAotI2luY2x1ZGUgIlNoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxE
cmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzT3duUHRyPERyYXdpbmdCdWZm
ZXI+IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICB1bnNpZ25lZCBmcmFtZWJ1ZmZlciA9IGNvbnRleHQt
PmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgQVNTRVJUKGZyYW1lYnVmZmVyKTsKLSAgICBpZiAo
IWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSwgZnJhbWVidWZmZXIpKTsKKyAgICBPd25QdHI8
RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBEcmF3aW5nQnVmZmVy
KGNvbnRleHQsIHNpemUpKTsKKyAgICByZXR1cm4gKGRyYXdpbmdCdWZmZXItPm1fY29udGV4dCkg
PyBkcmF3aW5nQnVmZmVyLnJlbGVhc2UoKSA6IDA7CiB9CiAKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6
YmluZCgpCiB7Ci0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZlcik7
Ci0gICAgbV9jb250ZXh0LT5zZXRWaWV3cG9ydChtX3NpemUpOworICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7CisgICAgbV9jb250ZXh0LT52aWV3cG9y
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0Ry
YXdpbmdCdWZmZXIuaAkocmV2aXNpb24gNjkzMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQzLDYgQEAK
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOwotCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiBzdHJ1Y3QgRHJhd2luZ0J1ZmZlcklu
dGVybmFsOwogI2VuZGlmCkBAIC01NCwyMCArNTEsMjggQEAgc3RydWN0IERyYXdpbmdCdWZmZXJJ
bnRlcm5hbDsKIC8vIHJlc3VsdHMgdG8gYSBQbGF0Zm9ybUxheWVyIGZvciBjb21wb3NpdGluZy4K
IGNsYXNzIERyYXdpbmdCdWZmZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7CisgICAgCiAgICAgfkRyYXdpbmdCdWZmZXIoKTsKIAogICAgIHZvaWQgcmVzZXQoY29u
c3QgSW50U2l6ZSYpOwogICAgIHZvaWQgYmluZCgpOwogICAgIEludFNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIAorICAgIC8vIENsZWFyIGFsbCByZXNvdXJjZXMgZnJv
bSB0aGlzIG9iamVjdCwgYXMgd2VsbCBhcyBjb250ZXh0LiBDYWxsZWQgd2hlbiBjb250ZXh0IGlz
IGRlc3Ryb3llZAorICAgIC8vIHRvIHByZXZlbnQgaW52YWxpZCBhY2Nlc3NlcyB0byB0aGUgcmVz
b3VyY2VzLgorICAgIHZvaWQgY2xlYXIoKTsKKworICAgIC8vIENvcGllcyB0aGUgbXVsdGlzYW1w
bGUgY29sb3IgYnVmZmVyIHRvIHRoZSBub3JtYWwgY29sb3IgYnVmZmVyIGFuZCBsZWF2ZXMgbV9m
Ym8gYm91bmQKKyAgICB2b2lkIGNvbW1pdChsb25nIHggPSAwLCBsb25nIHkgPSAwLCBsb25nIHdp
ZHRoID0gLTEsIGxvbmcgaGVpZ2h0ID0gLTEpOworICAgIAorICAgIFBsYXRmb3JtM0RPYmplY3Qg
cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKTsKKyAgICBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAgICAgdm9pZCBwdWJsaXNoVG9QbGF0Zm9y
bUxheWVyKCk7CiAjZW5kaWYKIAotICAgIHVuc2lnbmVkIGdldFJlbmRlcmluZ1Jlc3VsdHNBc1Rl
eHR1cmUoKTsKLQogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIGNsYXNzIFdpbGxQdWJsaXNo
Q2FsbGJhY2sgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKQEAgLTc5LDIxICs4
NCwzNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaWxsUHVibGlzaENhbGxiYWNrKFBhc3NPd25Q
dHI8V2lsbFB1Ymxpc2hDYWxsYmFjaz4gY2FsbGJhY2spIHsgbV9jYWxsYmFjayA9IGNhbGxiYWNr
OyB9CiAjZW5kaWYKIAorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPERyYXdpbmdCdWZmZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIGNv
bnN0IEludFNpemUmKTsKKyAgICAKIHByaXZhdGU6Ci0gICAgRHJhd2luZ0J1ZmZlcihTaGFyZWRH
cmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmLCB1bnNpZ25lZCBmcmFtZWJ1ZmZlcik7
CisgICAgRHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsK
IAotICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIG1fY29udGV4dDsKICAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICB1bnNpZ25lZCBt
X2ZyYW1lYnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CisKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2NvbG9yQnVmZmVyOworICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAgICAvLyBGb3IgbXVsdGlzYW1wbGlu
ZworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUZCTzsKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAgICBSZXRhaW5QdHI8V2ViR0xMYXll
cj4gbV9wbGF0Zm9ybUxheWVyOworI2VuZGlmCiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAg
ICBPd25QdHI8V2lsbFB1Ymxpc2hDYWxsYmFjaz4gbV9jYWxsYmFjazsKICAgICBPd25QdHI8RHJh
d2luZ0J1ZmZlckludGVybmFsPiBtX2ludGVybmFsOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShN
QUMpCi0gICAgUmV0YWluUHRyPFdlYkdMTGF5ZXI+IG1fcGxhdGZvcm1MYXllcjsKLSNlbmRpZgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lv
biA2OTMxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNz
Q29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gQ3JlYXRlcyBhIHRleHR1cmUgdGhhdCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBp
bWFnZS4gIFRoZSBjYWxsZXIgdGFrZXMgb3duZXJzaGlwIG9mCiAgICAgLy8gdGhlIHRleHR1cmUu
CiAgICAgUGFzc1JlZlB0cjxUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmU6OkZvcm1hdCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICAKKyAgICBHcmFwaGljc0NvbnRleHQzRCogZ3Jh
cGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAogcHJp
dmF0ZToKICAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiwgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+LCBQYXNzT3duUHRyPFRleFNoYWRl
cj4pOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZm
ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFj
L0RyYXdpbmdCdWZmZXJNYWMubW0JKHJldmlzaW9uIDY5MzEzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI1LDM3ICsyNSwxMTAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSB8
fCBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKICNpbmNsdWRlICJEcmF3aW5nQnVmZmVy
LmgiCiAKLSNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllci5oIgogCiAjaW1wb3J0ICJCbG9j
a0V4Y2VwdGlvbnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EcmF3aW5nQnVmZmVyOjpE
cmF3aW5nQnVmZmVyKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRT
aXplJiBzaXplLCB1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK0RyYXdpbmdCdWZmZXI6OkRyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNpemUpCiAg
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9mcmFt
ZWJ1ZmZlcihmcmFtZWJ1ZmZlcikKKyAgICAsIG1fZmJvKDApCisgICAgLCBtX2NvbG9yQnVmZmVy
KDApCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUZC
TygwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAgLCBtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiB7Ci0gICAgY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KGZyYW1lYnVmZmVyKTsKLQogICAgIC8vIENyZWF0ZSB0aGUgV2ViR0xMYXllcgogICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwotICAgICAgICBtX3BsYXRmb3JtTGF5ZXIuYWRvcHROUyhb
W1dlYkdMTGF5ZXIgYWxsb2NdIGluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6MF0pOworICAgICAg
ICBtX3BsYXRmb3JtTGF5ZXIuYWRvcHROUyhbW1dlYkdMTGF5ZXIgYWxsb2NdIGluaXRXaXRoRHJh
d2luZ0J1ZmZlcjp0aGlzXSk7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICBbbV9wbGF0Zm9ybUxh
eWVyLmdldCgpIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOworICAgICAgICBbbV9wbGF0Zm9ybUxh
eWVyLmdldCgpIHNldE5hbWU6QCJEcmF3aW5nQnVmZmVyIExheWVyIl07CiAjZW5kaWYgICAgCiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIC8vIGNyZWF0ZSBhIHRleHR1
cmUgdG8gcmVuZGVyIGludG8KKyAgICBtX2NvbG9yQnVmZmVyID0gY29udGV4dC0+Y3JlYXRlVGV4
dHVyZSgpOworICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJmKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdf
RklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0LT50ZXhQYXJh
bWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19F
REdFKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAgCisgICAgLy8gQ3JlYXRlIHRoZSBGQk8KKyAg
ICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgQVNTRVJUKG1fZmJv
KTsKKyAgICBpZiAoIW1fZmJvKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgICAgIAorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
JiBhdHRyaWJ1dGVzID0gY29udGV4dC0+YXR0cmlidXRlcygpOworICAgIAorICAgIC8vIENyZWF0
ZSB0aGUgc3RlbmNpbCBhbmQgZGVwdGggYnVmZmVyIGlmIG5lZWRlZAorICAgIGlmICghYXR0cmli
dXRlcy5hbnRpYWxpYXMgJiYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KSkKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgPSBjb250ZXh0LT5jcmVhdGVSZW5kZXJi
dWZmZXIoKTsKKworICAgIC8vIGNyZWF0ZSBhIG11bHRpc2FtcGxlIEZCTworICAgIGlmIChhdHRy
aWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICBtX211bHRpc2FtcGxlRkJPID0gY29udGV4dC0+
Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIgPSBjb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgaWYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZl
cigpOworICAgIH0KKyAgICAKKyAgICByZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6
fkRyYXdpbmdCdWZmZXIoKQogewotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKG1fZnJh
bWVidWZmZXIpOwotICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9mcmFtZWJ1ZmZl
cik7CisgICAgbV9jb250ZXh0LT5yZW1vdmVEcmF3aW5nQnVmZmVyKHRoaXMpOworICAgIGNsZWFy
KCk7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXIoKQoreworICAgIGlmICghbV9jb250
ZXh0KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fY29sb3JCdWZmZXIp
OworICAgIG1fY29sb3JCdWZmZXIgPSAwOworICAgIAorICAgIGlmIChtX211bHRpc2FtcGxlQ29s
b3JCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0g
MDsKKyAgICB9CisgICAgCisgICAgaWYgKG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIp
IHsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIgPSAwOworICAgIH0KKyAgICAKKyAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICBtX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IDA7CisgICAgfQorICAgIAorICAgIGlm
IChtX211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9jb250ZXh0LT5k
ZWxldGVGcmFtZWJ1ZmZlcihtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9tdWx0aXNhbXBs
ZUZCTyA9IDA7CisgICAgfQorICAgICAgICAKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZm
ZXIobV9mYm8pOworICAgIG1fZmJvID0gMDsKKyAgICAKKyAgICBtX2NvbnRleHQgPSAwOwogfQog
CiB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUpCkBAIC02
NCwxNiArMTM3LDE1NiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUm
CiAgICAgICAgIHJldHVybjsKICAgICBtX3NpemUgPSBuZXdTaXplOwogCi0gICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsK
KyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIAorICAgIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5hdHRyaWJ1dGVzKCk7
CisgICAgR0x1aW50IGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0LCBpbnRlcm5hbERl
cHRoU3RlbmNpbEZvcm1hdCA9IDA7CisgICAgaWYgKGF0dHJpYnV0ZXMuYWxwaGEpIHsKKyAgICAg
ICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4OworICAgICAgICBjb2xvckZvcm1hdCA9
IEdMX1JHQkE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdM
X1JHQjg7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgIH0KKyAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgLy8gV2UgZG9u
J3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlz
IG5vdC4KKyAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgorICAg
ICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsICYmIGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAg
ICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhU
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9
IEdMX0RFUFRIX0NPTVBPTkVOVDsKKyAgICB9CisKKyAgICAvLyByZXNpemUgbXVsdGlzYW1wbGUg
RkJPCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIEdMaW50IG1heFNh
bXBsZUNvdW50OworICAgICAgICAKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX01BWF9TQU1Q
TEVTX0VYVCwgJm1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgR0xpbnQgc2FtcGxlQ291bnQgPSBz
dGQ6Om1pbig4LCBtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIGlmIChzYW1wbGVDb3VudCA+IG1h
eFNhbXBsZUNvdW50KQorICAgICAgICAgICAgc2FtcGxlQ291bnQgPSBtYXhTYW1wbGVDb3VudDsK
KyAgICAgICAgCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKKworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAg
ICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZFUl9F
WFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpKTsKKyAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVu
ZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5j
aWxGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRf
RVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
KTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRI
X0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
X0VYVCkgeworICAgICAgICAgICAgLy8gRklYTUU6IGNsZWFudXAuCisgICAgICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gcmVzaXplIHJlZ3VsYXIg
RkJPCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJv
KTsKKworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsK
KyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgMCk7CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX2Nv
bG9yQnVmZmVyLCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Cisg
ICAgaWYgKCFhdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0
dHJpYnV0ZXMuZGVwdGgpKSB7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgOjpnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5j
aWxGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICBpZiAo
YXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xf
UkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBpZiAoYXR0
cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJC
VUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIDo6Z2xCaW5kUmVuZGVy
YnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgIH0KKyAgICBpZiAoZ2xDaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZG
RVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCisgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKQor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZUZCTyk7CisKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAg
ICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xf
VFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUUsIHN0ZW5jaWxNYXNrID0gR0xfVFJVRTsKKyAgICBH
TGJvb2xlYW4gaXNTY2lzc29yRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdMYm9vbGVhbiBpc0Rp
dGhlckVuYWJsZWQgPSBHTF9GQUxTRTsKKyAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdMX0NP
TE9SX0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywg
Y29sb3JNYXNrKTsKKyAgICA6OmdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUs
IEdMX1RSVUUpOworICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgIDo6Z2xHZXRC
b29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOworICAgICAgICA6OmdsRGVw
dGhNYXNrKEdMX1RSVUUpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJ
VDsKKyAgICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkgeworICAgICAgICA6OmdsR2V0
Qm9vbGVhbnYoR0xfU1RFTkNJTF9XUklURU1BU0ssICZzdGVuY2lsTWFzayk7CisgICAgICAgIDo6
Z2xTdGVuY2lsTWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxf
QlVGRkVSX0JJVDsKKyAgICB9CisgICAgaXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQo
R0xfU0NJU1NPUl9URVNUKTsKKyAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAg
IGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVSKTsKKyAgICA6OmdsRGlz
YWJsZShHTF9ESVRIRVIpOworCisgICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAgICA6Omds
Q29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9y
TWFza1szXSk7CisgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgIDo6Z2xEZXB0aE1h
c2soZGVwdGhNYXNrKTsKKyAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICA6Omds
U3RlbmNpbE1hc2soc3RlbmNpbE1hc2spOworICAgIGlmIChpc1NjaXNzb3JFbmFibGVkKQorICAg
ICAgICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAgICAgICA6Omds
RGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAg
ICAgIDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxl
KEdMX0RJVEhFUik7CisKKyAgICA6OmdsRmx1c2goKTsKK30KKwordm9pZCBEcmF3aW5nQnVmZmVy
Ojpjb21taXQobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0KQoreworICAg
IGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGlmICh3aWR0
aCA8IDApCisgICAgICAgIHdpZHRoID0gbV9zaXplLndpZHRoKCk7CisgICAgaWYgKGhlaWdodCA8
IDApCisgICAgICAgIGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgCisgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBs
ZUZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6OmdsQmxpdEZyYW1l
YnVmZmVyRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0NP
TE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgfQorICAgIAorICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CiB9CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi1QbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0
Zm9ybUxheWVyKCkKK1BsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAogewogICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7CiB9CiAjZW5kaWYK
IAorUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jb2xvckJ1ZmZlcjsKK30KKwogfQogCiAjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCShyZXZpc2lvbiA2OTMxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0
Nyw2IEBACiAjaW5jbHVkZSAiVWludDhBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXIuaCIK
ICNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NzcsMzAgKzc2LDIwIEBAIHN0YXRpYyB2b2lkIHNldFBpeGVsRm9ybWF0KFZlY3RvcjxDR0xQaXgK
ICAgICBhdHRyaWJzLmFwcGVuZChzdGF0aWNfY2FzdDxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4o
MCkpOwogfQogCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUp
CitQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKIHsKICAgICAvLyBUaGlzIGltcGxlbWVudGF0
aW9uIGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBI
b3N0V2luZG93LgogICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdp
bmRvdykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0KG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgZmFsc2UpKTsK
KyAgICAgICAgCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KG5ldyBHcmFw
aGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyU3R5bGUpKTsKICAgICByZXR1
cm4gY29udGV4dC0+bV9jb250ZXh0T2JqID8gY29udGV4dC5yZWxlYXNlKCkgOiAwOwogfQogCi1H
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wpCi0gICAgOiBtX2N1
cnJlbnRXaWR0aCgwKQotICAgICwgbV9jdXJyZW50SGVpZ2h0KDApCi0gICAgLCBtX2F0dHJzKGF0
dHJzKQorR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiAvKiBob3N0V2luZG93ICovLCBSZW5k
ZXJTdHlsZSAvKiByZW5kZXJTdHlsZSovKQorICAgIDogbV9hdHRycyhhdHRycykKICAgICAsIG1f
Y29udGV4dE9iaigwKQotICAgICwgbV90ZXh0dXJlKDApCi0gICAgLCBtX2ZibygwKQotICAgICwg
bV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKLSAgICAsIG1fYm91bmRGQk8oMCkKLSAgICAsIG1fbXVs
dGlzYW1wbGVGQk8oMCkKLSAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkK
LSAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQogewotICAgIFVOVVNFRF9QQVJBTSho
b3N0V2luZG93KTsKLQogICAgIFZlY3RvcjxDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZT4gYXR0cmli
czsKICAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iaiA9IDA7CiAgICAgR0xpbnQg
bnVtUGl4ZWxGb3JtYXRzID0gMDsKQEAgLTE1MCw0MSArMTM5LDYgQEAgR3JhcGhpY3NDb250ZXh0
M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogICAgIAogICAgIHZhbGlkYXRlQXR0cmlidXRlcygp
OwogCi0gICAgLy8gQ3JlYXRlIHRoZSBXZWJHTExheWVyCi0gICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TCi0gICAgICAgIG1fd2ViR0xMYXllci5hZG9wdE5TKFtbV2ViR0xMYXllciBhbGxv
Y10gaW5pdFdpdGhHcmFwaGljc0NvbnRleHQzRDp0aGlzXSk7Ci0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICBbbV93ZWJHTExheWVyLmdldCgpIHNldE5hbWU6QCJXZWJHTCBMYXllciJdOwotI2VuZGlm
ICAgIAotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKLSAgICAKLSAgICAvLyBjcmVhdGUg
YSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCi0gICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAg
IDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKLSAgICA6OmdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOwotICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICAKLSAgICAvLyBjcmVhdGUgYW4g
RkJPCi0gICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgCi0gICAgbV9i
b3VuZEZCTyA9IG1fZmJvOwotICAgIGlmICghbV9hdHRycy5hbnRpYWxpYXMgJiYgKG1fYXR0cnMu
c3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkKLSAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLQotICAgIC8vIGNyZWF0ZSBhbiBtdWx0aXNh
bXBsZSBGQk8KLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEdlbkZy
YW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAg
ICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87Ci0gICAgICAgIDo6Z2xHZW5SZW5kZXJi
dWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAobV9h
dHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICA6OmdsR2VuUmVuZGVy
YnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgfQot
ICAgIAogICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgogCiAgICAgVEJ1aWx0SW5SZXNvdXJj
ZSBBTkdMRVJlc291cmNlczsKQEAgLTIxNSwxOSArMTY5LDkgQEAgR3JhcGhpY3NDb250ZXh0M0Q6
OkdyYXBoaWNzQ29udGV4dDNEKEdyYQogCiBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29u
dGV4dDNEKCkKIHsKKyAgICBjbGVhckRyYXdpbmdCdWZmZXJzKCk7CisgICAgCiAgICAgaWYgKG1f
Y29udGV4dE9iaikgewotICAgICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmop
OwotICAgICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcykgewotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAobV9h
dHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAgOjpnbERlbGV0
ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZC
Tyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8
IG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNF
WFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICA6OmdsRGVs
ZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiAgICAgICAgIENHTFNldEN1cnJlbnRDb250
ZXh0KDApOwogICAgICAgICBDR0xEZXN0cm95Q29udGV4dChtX2NvbnRleHRPYmopOwogICAgIH0K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJHTExheWVyLmgJKHJldmlz
aW9uIDY5MzEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEdyYXBoaWNzTGF5ZXI7Ci0gICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CisgICAgY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIH0KIAogQGludGVyZmFjZSBXZWJHTExheWVyIDog
Q0FPcGVuR0xMYXllciAKIHsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX2xheWVyT3du
ZXI7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICBXZWJD
b3JlOjpEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7CiB9CiAKLS0gKGlkKWluaXRXaXRo
R3JhcGhpY3NDb250ZXh0M0Q6KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEKiljb250ZXh0Owor
LSAoaWQpaW5pdFdpdGhEcmF3aW5nQnVmZmVyOihXZWJDb3JlOjpEcmF3aW5nQnVmZmVyKilkcmF3
aW5nQnVmZmVyOwogCiAtIChDR0ltYWdlUmVmKWNvcHlJbWFnZVNuYXBzaG90V2l0aENvbG9yU3Bh
Y2U6KENHQ29sb3JTcGFjZVJlZiljb2xvclNwYWNlOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJHTExheWVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1dlYkdMTGF5ZXIubW0JKHJldmlzaW9uIDY5MzEzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViR0xMYXllci5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW1wb3J0ICJXZWJHTExheWVyLmgiCiAKKyNpbXBvcnQgIkRyYXdp
bmdCdWZmZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW1wb3J0ICJHcmFw
aGljc0xheWVyLmgiCiAjaW1wb3J0IDxPcGVuR0wvT3BlbkdMLmg+CkBAIC00MSw5ICs0Miw5IEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBAaW1wbGVtZW50YXRpb24gV2ViR0xMYXllcgog
Ci0tKGlkKWluaXRXaXRoR3JhcGhpY3NDb250ZXh0M0Q6KEdyYXBoaWNzQ29udGV4dDNEKiljb250
ZXh0CistKGlkKWluaXRXaXRoRHJhd2luZ0J1ZmZlcjooRHJhd2luZ0J1ZmZlciopZHJhd2luZ0J1
ZmZlcgogewotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9kcmF3aW5nQnVmZmVyID0g
ZHJhd2luZ0J1ZmZlcjsKICAgICBzZWxmID0gW3N1cGVyIGluaXRdOwogICAgIHJldHVybiBzZWxm
OwogfQpAQCAtNTcsMTkgKzU4LDIyIEBAIC0oQ0dMUGl4ZWxGb3JtYXRPYmopY29weUNHTFBpeGVs
Rm9ybWF0Rm8KICAgICAvLyBJZiBuZWVkZWQgd2Ugd2lsbCBoYXZlIHRvIHNldCB0aGUgZGlzcGxh
eSBtYXNrIGluIHRoZSBDYW52YXMgQ0dMQ29udGV4dCBhbmQKICAgICAvLyBtYWtlIHN1cmUgaXQg
bWF0Y2hlcy4KICAgICBVTlVTRURfUEFSQU0obWFzayk7Ci0gICAgcmV0dXJuIENHTFJldGFpblBp
eGVsRm9ybWF0KENHTEdldFBpeGVsRm9ybWF0KG1fY29udGV4dC0+cGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCgpKSk7CisgICAgcmV0dXJuIENHTFJldGFpblBpeGVsRm9ybWF0KENHTEdldFBpeGVs
Rm9ybWF0KG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+cGxhdGZvcm1HcmFw
aGljc0NvbnRleHQzRCgpKSk7CiB9CiAKIC0oQ0dMQ29udGV4dE9iailjb3B5Q0dMQ29udGV4dEZv
clBpeGVsRm9ybWF0OihDR0xQaXhlbEZvcm1hdE9iailwaXhlbEZvcm1hdAogewogICAgIENHTENv
bnRleHRPYmogY29udGV4dE9iajsKLSAgICBDR0xDcmVhdGVDb250ZXh0KHBpeGVsRm9ybWF0LCBt
X2NvbnRleHQtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSwgJmNvbnRleHRPYmopOworICAg
IENHTENyZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXQsIG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpLCAmY29udGV4dE9iaik7CiAg
ICAgcmV0dXJuIGNvbnRleHRPYmo7CiB9CiAKIC0odm9pZClkcmF3SW5DR0xDb250ZXh0OihDR0xD
b250ZXh0T2JqKWdsQ29udGV4dCBwaXhlbEZvcm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmopcGl4ZWxG
b3JtYXQgZm9yTGF5ZXJUaW1lOihDRlRpbWVJbnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlzcGxheVRp
bWU6KGNvbnN0IENWVGltZVN0YW1wICopdGltZVN0YW1wCiB7Ci0gICAgbV9jb250ZXh0LT5wcmVw
YXJlVGV4dHVyZSgpOworICAgIG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAg
ICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICBtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNz
Q29udGV4dDNEKCktPmZpbmlzaCgpOwogCiAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQoZ2xDb250
ZXh0KTsKIApAQCAtODQsNyArODgsNyBAQCAtKHZvaWQpZHJhd0luQ0dMQ29udGV4dDooQ0dMQ29u
dGV4dE9iailnCiAgICAgZ2xMb2FkSWRlbnRpdHkoKTsKIAogICAgIGdsRW5hYmxlKEdMX1RFWFRV
UkVfMkQpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb250ZXh0LT5wbGF0
Zm9ybVRleHR1cmUoKSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2RyYXdp
bmdCdWZmZXItPnBsYXRmb3JtQ29sb3JCdWZmZXIoKSk7CiAgICAgCiAgICAgZ2xCZWdpbihHTF9U
UklBTkdMRV9GQU4pOwogICAgICAgICBnbFRleENvb3JkMmYoMCwgMCk7CkBAIC0xMTEsNyArMTE1
LDcgQEAgc3RhdGljIHZvaWQgZnJlZURhdGEodm9pZCAqLCBjb25zdCB2b2lkIAogCiAtKENHSW1h
Z2VSZWYpY29weUltYWdlU25hcHNob3RXaXRoQ29sb3JTcGFjZTooQ0dDb2xvclNwYWNlUmVmKWNv
bG9yU3BhY2UKIHsKLSAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHQtPnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9kcmF3aW5n
QnVmZmVyLT5ncmFwaGljc0NvbnRleHQzRCgpLT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkp
OwogCiAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gaW1hZ2VDb2xvclNwYWNlID0gY29s
b3JTcGFjZTsKICAgICBpZiAoIWltYWdlQ29sb3JTcGFjZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTC5jcHAJKHJldmlzaW9uIDY5MzEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw2IEBACiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkFycmF5QnVm
ZmVyVmlldy5oIgotI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgpAQCAtNDAsNiArMzksNyBAQAogI2luY2x1ZGUgIkludDMyQXJyYXku
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIK
KyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgogCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUg
PE9wZW5HTC9nbC5oPgpAQCAtNzgsOSArNzgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250
ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1
ZmZlcigpOworICAgIAorICAgIGludCB3aWR0aCA9IGNvbnRleHQtPmNhbnZhcygpLT53aWR0aCgp
OworICAgIGludCBoZWlnaHQgPSBjb250ZXh0LT5jYW52YXMoKS0+aGVpZ2h0KCk7CiAKLSAgICBp
bnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIDQ7Ci0gICAgaW50IHRvdGFsQnl0ZXMgPSBy
b3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKKyAgICBpbnQgcm93Qnl0ZXMgPSB3aWR0aCAqIDQ7
CisgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIGhlaWdodDsKIAogICAgIE93bkFycmF5
UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyhuZXcgdW5zaWduZWQgY2hhclt0b3RhbEJ5dGVzXSk7
CiAgICAgaWYgKCFwaXhlbHMpCkBAIC04OCwyMCArOTEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludFJlbmRlcmluZ1JlCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAg
IGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMp
IHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZl
ckVYVCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJl
bnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIp
OwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOwotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJP
ID0gdHJ1ZTsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBHTGludCBwYWNrQWxpZ25t
ZW50ID0gNDsKICAgICBib29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOwogICAg
IDo6Z2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOwpAQCAt
MTEwLDE1OSArOTksMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZQogICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwogICAgIH0KIAotICAg
IDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdM
X0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzLmdldCgpKTsKKyAgICA6
OmdsUmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9J
TlRfOF84XzhfOF9SRVYsIHBpeGVscy5nZXQoKSk7CiAKICAgICBpZiAobXVzdFJlc3RvcmVQYWNr
QWxpZ25tZW50KQogICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBh
Y2tBbGlnbm1lbnQpOwogCi0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Ci0KLSAgICBw
YWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBp
ZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCB8
fCAhbV9jb250ZXh0T2JqKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jdXJyZW50V2lk
dGggPSB3aWR0aDsKLSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgCi0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgCi0gICAgR0x1aW50IGludGVybmFsQ29sb3JGb3JtYXQs
IGNvbG9yRm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7Ci0gICAgaWYgKG1f
YXR0cnMuYWxwaGEpIHsKLSAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE4Owot
ICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50
ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjg7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdC
OwotICAgIH0KLSAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKLSAg
ICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWly
ZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNEIGNv
bnN0cnVjdG9yLgotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsICYmIG1fYXR0cnMuZGVwdGgp
Ci0gICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdMX0RFUFRIMjRfU1RF
TkNJTDhfRVhUOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNp
bEZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsKLSAgICB9Ci0KLSAgICBib29sIG11c3RSZXN0
b3JlRkJPID0gZmFsc2U7Ci0KLSAgICAvLyByZXNpemUgbXVsdGlzYW1wbGUgRkJPCi0gICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OwotICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfTUFYX1NBTVBMRVNfRVhULCAmbWF4U2FtcGxlQ291bnQp
OwotICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50
KTsKLSAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2FtcGxlQ291bnQpCi0gICAgICAgICAg
ICBzYW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50OwotICAgICAgICBpZiAobV9ib3VuZEZCTyAh
PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgICAgICBtdXN0
UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZm
ZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAg
ICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVChHTF9SRU5ERVJCVUZG
RVJfRVhULCBzYW1wbGVDb3VudCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0
dHJzLmRlcHRoKSB7Ci0gICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAg
ICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAg
OjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAg
ICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9tdWx0
aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIH0KLSAgICAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7Ci0gICAgICAgIGlmIChnbENo
ZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURV9FWFQpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwLgotICAg
ICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIHJl
c2l6ZSByZWd1bGFyIEZCTwotICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAg
IG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlLCAwKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7
Ci0gICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpKSB7Ci0gICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAg
ICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwg
R0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOwotICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRI
X0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7Ci0gICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IDApOwotICAgIH0KLSAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBjbGVhbnVwCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAg
aWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgaWYgKG1fYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCi0g
ICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdM
X1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFLCBzdGVuY2lsTWFzayA9IEdMX1RSVUU7Ci0gICAg
R0xib29sZWFuIGlzU2Npc3NvckVuYWJsZWQgPSBHTF9GQUxTRTsKLSAgICBHTGJvb2xlYW4gaXNE
aXRoZXJFbmFibGVkID0gR0xfRkFMU0U7Ci0gICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9D
T0xPUl9CVUZGRVJfQklUOwotICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ss
IGNvbG9yTWFzayk7Ci0gICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
LCBHTF9UUlVFKTsKLSAgICBpZiAobV9hdHRycy5kZXB0aCkgewotICAgICAgICA6OmdsR2V0Qm9v
bGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgOjpnbERlcHRo
TWFzayhHTF9UUlVFKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7
Ci0gICAgfQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgOjpnbEdldEJvb2xl
YW52KEdMX1NURU5DSUxfV1JJVEVNQVNLLCAmc3RlbmNpbE1hc2spOwotICAgICAgICA6OmdsU3Rl
bmNpbE1hc2soR0xfVFJVRSk7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZF
Ul9CSVQ7Ci0gICAgfQotICAgIGlzU2Npc3NvckVuYWJsZWQgPSA6OmdsSXNFbmFibGVkKEdMX1ND
SVNTT1JfVEVTVCk7Ci0gICAgOjpnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBpc0Rp
dGhlckVuYWJsZWQgPSA6OmdsSXNFbmFibGVkKEdMX0RJVEhFUik7Ci0gICAgOjpnbERpc2FibGUo
R0xfRElUSEVSKTsKLQotICAgIDo6Z2xDbGVhcihjbGVhck1hc2spOwotCi0gICAgOjpnbENvbG9y
TWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tb
M10pOwotICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRo
TWFzayk7Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNr
KHN0ZW5jaWxNYXNrKTsKLSAgICBpZiAoaXNTY2lzc29yRW5hYmxlZCkKLSAgICAgICAgOjpnbEVu
YWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGVsc2UKLSAgICAgICAgOjpnbERpc2FibGUoR0xf
U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoaXNEaXRoZXJFbmFibGVkKQotICAgICAgICA6OmdsRW5h
YmxlKEdMX0RJVEhFUik7Ci0gICAgZWxzZQotICAgICAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIp
OwotCi0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Ci0KLSAgICA6OmdsRmx1c2goKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewotICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRp
c2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1F
QlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAs
IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsK
LSAgICB9Ci0gICAgOjpnbEZpbmlzaCgpOworICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgp
LCB3aWR0aCwgaGVpZ2h0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIGltYWdl
QnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpCkBAIC0yOTYs
MTUgKzEzOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWcKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgR0x1aW50IGZibzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSAoR0x1aW50
KWJ1ZmZlcjsKLSAgICBlbHNlCi0gICAgICAgIGZibyA9IChtX2F0dHJzLmFudGlhbGlhcyA/IG1f
bXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7Ci0gICAgaWYgKGZibyAhPSBtX2JvdW5kRkJPKSB7Ci0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBmYm8pOwotICAgICAgICBtX2Jv
dW5kRkJPID0gZmJvOwotICAgIH0KKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwg
YnVmZmVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCkBAIC00
NjAsMjkgKzI5NCwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBs
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRh
cmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBs
b25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJv
cmRlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVG
Qk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJf
RVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdp
ZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JV
RkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgfQogICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
KTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZz
ZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwg
bV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJB
V19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVY
VCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdo
dCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICB9CiAgICAgOjpnbENv
cHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQpAQCAtNzc4LDE2ICs1OTYsOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgCiAgICAgLy8gYWxsIHByZXZp
b3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMu
CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbEZsdXNoKCk7Ci0gICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211
bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZS
QU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgs
IHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBH
TF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6OmdsRmx1c2goKTsK
LSAgICB9CisgICAgCiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBkYXRhKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZC
TyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>