<?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>56476</bug_id>
          
          <creation_ts>2011-03-16 11:50:19 -0700</creation_ts>
          <short_desc>Canvas2D GPU acceleration should support shadows</short_desc>
          <delta_ts>2011-03-18 14:03:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56560</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>apavlov</cc>
    
    <cc>cmarrin</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>368432</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-16 11:50:19 -0700</bug_when>
    <thetext>We should support hard and soft shadows in canvas 2D GPU acceleration, as in the software path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368440</commentid>
    <comment_count>1</comment_count>
      <attachid>85951</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-16 12:00:36 -0700</bug_when>
    <thetext>Created attachment 85951
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368501</commentid>
    <comment_count>2</comment_count>
      <attachid>85951</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-16 13:40:47 -0700</bug_when>
    <thetext>Comment on attachment 85951
Patch

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

Overall this looks excellent. It&apos;s great that your algorithm for this is finally getting incorporated. A couple of questions and comments.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:754
&gt; +    scissorClear(rect.x(), rect.y() - width, rect.width() + width, width);

Should this be rect.x() - width?

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:756
&gt; +    scissorClear(rect.x(), rect.maxY(), width, rect.height() + width);

Should this be rect.y() instead of rect.maxY()? And possibly rect.x() - width?

&gt; Source/WebCore/platform/graphics/gpu/BicubicShader.cpp:125
&gt; +    m_context-&gt;uniform1i(m_imageLocation, 0);

It seems pretty magic to assume that the input texture comes in on texture unit 0. Is this common in the other shaders? If so, it&apos;s fine, but otherwise, at least a comment in the header about the conventions would help.

&gt; Source/WebCore/platform/graphics/gpu/ConvolutionShader.cpp:110
&gt; +    m_context-&gt;uniform1i(m_imageLocation, 0);

Same comment here about texture unit 0.

&gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h:167
&gt; +const float kMaxSigma = 4.0f;
&gt; +const int kMaxKernelWidth = 25;

WebKit style actually doesn&apos;t use the &quot;k&quot; prefix for constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368529</commentid>
    <comment_count>3</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-16 14:10:37 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 85951 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85951&amp;action=review
&gt; 
&gt; Overall this looks excellent. It&apos;s great that your algorithm for this is finally getting incorporated. A couple of questions and comments.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:754
&gt; &gt; +    scissorClear(rect.x(), rect.y() - width, rect.width() + width, width);
&gt; 
&gt; Should this be rect.x() - width?

This is what I was attempting to do:

31111
3   4
3   4
3   4
22224

So the first one starts at x, y - width.  I think that one&apos;s correct.

&gt; &gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:756
&gt; &gt; +    scissorClear(rect.x(), rect.maxY(), width, rect.height() + width);
&gt; 
&gt; Should this be rect.y() instead of rect.maxY()? And possibly rect.x() - width?

This is supposed to be doing section 3 above, but it looks wrong to me now.  Will fix.

&gt; &gt; Source/WebCore/platform/graphics/gpu/BicubicShader.cpp:125
&gt; &gt; +    m_context-&gt;uniform1i(m_imageLocation, 0);
&gt; 
&gt; It seems pretty magic to assume that the input texture comes in on texture unit 0. Is this common in the other shaders? If so, it&apos;s fine, but otherwise, at least a comment in the header about the conventions would help.

I didn&apos;t see a point in exposing it from the shaders, since the only call to glActiveTexture() in the canvas context is one that sets it to unit zero (which could probably be removed).  I&apos;ll add a comment, though, thanks.

&gt; &gt; Source/WebCore/platform/graphics/gpu/ConvolutionShader.cpp:110
&gt; &gt; +    m_context-&gt;uniform1i(m_imageLocation, 0);
&gt; 
&gt; Same comment here about texture unit 0.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/SharedGraphicsContext3D.h:167
&gt; &gt; +const float kMaxSigma = 4.0f;
&gt; &gt; +const int kMaxKernelWidth = 25;
&gt; 
&gt; WebKit style actually doesn&apos;t use the &quot;k&quot; prefix for constants.

Thanks.  I can&apos;t see anything in the coding style docs, but it seems cFoo is often used in headers, so I&apos;ll use that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368538</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-16 14:19:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Thanks.  I can&apos;t see anything in the coding style docs, but it seems cFoo is often used in headers, so I&apos;ll use that.

Actually from discussions I&apos;ve seen on IRC I think the conventional wisdom is to just use a capitalized first letter -- no &quot;k&quot; or &quot;c&quot; prefix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368558</commentid>
    <comment_count>5</comment_count>
      <attachid>85981</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-16 14:47:43 -0700</bug_when>
    <thetext>Created attachment 85981
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368560</commentid>
    <comment_count>6</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-16 14:49:40 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Thanks.  I can&apos;t see anything in the coding style docs, but it seems cFoo is often used in headers, so I&apos;ll use that.
&gt; 
&gt; Actually from discussions I&apos;ve seen on IRC I think the conventional wisdom is to just use a capitalized first letter -- no &quot;k&quot; or &quot;c&quot; prefix.

Really?  That looks a little strange for things that are in the WebCore namespace -- looks a lot like a class name.  I think I&apos;ll use cFoo for now, since there&apos;s precedent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368602</commentid>
    <comment_count>7</comment_count>
      <attachid>85981</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-16 15:49:21 -0700</bug_when>
    <thetext>Comment on attachment 85981
Patch

Looks great. clearBorders looks better now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369036</commentid>
    <comment_count>8</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-17 06:57:58 -0700</bug_when>
    <thetext>Committed r81350: &lt;http://trac.webkit.org/changeset/81350&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369046</commentid>
    <comment_count>9</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-03-17 08:04:50 -0700</bug_when>
    <thetext>Commit r81350 has broken 20 webkit_gpu_tests on the Chromium &quot;Webkit Win&quot; builder, so I&apos;m going to roll out the patch. See the flakiness dashboard link:

http://test-results.appspot.com/dashboards/flakiness_dashboard.html#group=%40ToT%20GPU%20Mesa%20-%20chromium.org&amp;tests=canvas%2Fphilip%2Ftests%2F2d.canvas.readonly.html%2Ccanvas%2Fphilip%2Ftests%2F2d.canvas.reference.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect%2BfillRect.alpha0.5.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect%2BfillRect.alpha0.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect%2BfillRect.basic.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.basic.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.clip.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.globalalpha.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.globalcomposite.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.negative.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.nonfinite.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.path.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.shadow.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.transform.html%2Ccanvas%2Fphilip%2Ftests%2F2d.clearRect.zero.html%2Ccanvas%2Fphilip%2Ftests%2F2d.composite.canvas.copy.html%2Ccanvas%2Fphilip%2Ftests%2F2d.composite.canvas.destination-atop.html%2Ccanvas%2Fphilip%2Ftests%2F2d.composite.canvas.destination-in.html%2Ccanvas%2Fphilip%2Ftests%2F2d.composite.canvas.destination-out.html%2Ccanvas%2Fphilip%2Ftests%2F2d.composite.canvas.destination-over.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369256</commentid>
    <comment_count>10</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-17 13:34:55 -0700</bug_when>
    <thetext>I have no idea why these tests are timing out on the canaries.  I can&apos;t repro these timeouts on my local machine, in Debug or Release.  I tried passing the same run_webkit_tests command line that the bots use (modulo directory names), but no luck.  This is much more than the shadow tests:  it seems to be every canvas test in GPU mode.  That suggests it&apos;s part of the initialization code in SharedGraphicsContext3D.

Other than changes for shadows (which should only affect the tests with shadows, and not the large number of tests which are timing out), the main thing that affects all tests in this CL is that it compiles 2 more shaders, but one of them it compiles in 25 variants, with different loop bounds in the fragment shader.  I thought it might be the shader validator, but it doesn&apos;t seem like that would run differently on/off bot hardware.  Could it be OSMesa is doing something weird on a machine without a GPU?  Or on Windows, but not Linux?  I&apos;m perplexed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369274</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-17 13:57:30 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I have no idea why these tests are timing out on the canaries.  I can&apos;t repro these timeouts on my local machine, in Debug or Release.  I tried passing the same run_webkit_tests command line that the bots use (modulo directory names), but no luck.  This is much more than the shadow tests:  it seems to be every canvas test in GPU mode.  That suggests it&apos;s part of the initialization code in SharedGraphicsContext3D.
&gt; 
&gt; Other than changes for shadows (which should only affect the tests with shadows, and not the large number of tests which are timing out), the main thing that affects all tests in this CL is that it compiles 2 more shaders, but one of them it compiles in 25 variants, with different loop bounds in the fragment shader.  I thought it might be the shader validator, but it doesn&apos;t seem like that would run differently on/off bot hardware.  Could it be OSMesa is doing something weird on a machine without a GPU?  Or on Windows, but not Linux?  I&apos;m perplexed.

When you run these tests locally, are you running DRT with Mesa? If so, it really should behave the same as on the bots regardless of the kind of GPU (or lack thereof) on the system.

BTW, it could certainly be Mesa doing something wrong or bad. Earlier versions of Mesa than the one we currently use (7.9) had terrible bugs in the shader compiler including infinite loops during compilation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369275</commentid>
    <comment_count>12</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-17 13:58:55 -0700</bug_when>
    <thetext>Interestingly, it seems only the WinXP bots were affected.  Not only is Linux unaffected, but so were Vista and Win7 (test times went up by about 15 sec overall, but that&apos;s to be expected due to the shadow algorithm).  So it seems to be an XP problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369281</commentid>
    <comment_count>13</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-17 14:02:19 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; When you run these tests locally, are you running DRT with Mesa? If so, it really should behave the same as on the bots regardless of the kind of GPU (or lack thereof) on the system.

Yes, DRT with Mesa.  Seems like XP is doing something weird (see previous).

&gt; BTW, it could certainly be Mesa doing something wrong or bad. Earlier versions of Mesa than the one we currently use (7.9) had terrible bugs in the shader compiler including infinite loops during compilation.

Good to know.  It seems ok on other OS&apos;es, though, and they&apos;re all running the same version of Mesa, AFAIK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369289</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-03-17 14:12:14 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; When you run these tests locally, are you running DRT with Mesa? If so, it really should behave the same as on the bots regardless of the kind of GPU (or lack thereof) on the system.
&gt; 
&gt; Yes, DRT with Mesa.  Seems like XP is doing something weird (see previous).

That&apos;s strange. I can&apos;t imagine why there would be different behavior. Is there any chance you can test on XP locally?

&gt; &gt; BTW, it could certainly be Mesa doing something wrong or bad. Earlier versions of Mesa than the one we currently use (7.9) had terrible bugs in the shader compiler including infinite loops during compilation.
&gt; 
&gt; Good to know.  It seems ok on other OS&apos;es, though, and they&apos;re all running the same version of Mesa, AFAIK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369363</commentid>
    <comment_count>15</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-17 15:56:19 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; When you run these tests locally, are you running DRT with Mesa? If so, it really should behave the same as on the bots regardless of the kind of GPU (or lack thereof) on the system.
&gt; &gt; 
&gt; &gt; Yes, DRT with Mesa.  Seems like XP is doing something weird (see previous).
&gt; 
&gt; That&apos;s strange. I can&apos;t imagine why there would be different behavior. Is there any chance you can test on XP locally?

I just installed &quot;Windows XP Mode&quot;, a VM for Win7, and I can repro the slowdown there.  Still investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369620</commentid>
    <comment_count>16</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-18 07:40:00 -0700</bug_when>
    <thetext>(In reply to comment #15)

&gt; I just installed &quot;Windows XP Mode&quot;, a VM for Win7, and I can repro the slowdown there.  Still investigating.

Seems to be a bug in talloc (or a bug in MSVC&apos;s vsnprintf implementation, depending on how you look at it).  Fix up for review at http://codereview.chromium.org/6711035/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369846</commentid>
    <comment_count>17</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-03-18 14:03:57 -0700</bug_when>
    <thetext>Committed r81509: &lt;http://trac.webkit.org/changeset/81509&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85951</attachid>
            <date>2011-03-16 12:00:36 -0700</date>
            <delta_ts>2011-03-16 14:47:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56476-20110316150034.patch</filename>
            <type>text/plain</type>
            <size>60812</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA5IEBACisyMDExLTAzLTE2ICBTdGVwaGVu
IFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBHUFUtYWNjZWxlcmF0ZWQgc2hh
ZG93cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
NDc2CisKKyAgICAgICAgRm9yIGhhcmQgc2hhZG93cywgd2Ugc2ltcGx5IG9mZnNldCB0aGUgQ1RN
IGFuZCBkcmF3IGluIHRoZSBzaGFkb3cKKyAgICAgICAgY29sb3IuICBGb3Igc29mdCBzaGFkb3dz
LCB3ZSB1c2UgYSBzZXBhcmFibGUgR2F1c3NpYW4gY29udm9sdXRpb24sCisgICAgICAgIHdpdGgg
YSBiaWxpbmVhciBkb3duc2FtcGxlIGFuZCBNaXRjaGVsbC1OZXRyYXZhbGkgdXBzYW1wbGUgaW4g
b3JkZXIgdG8KKyAgICAgICAgcHJlc2VydmUgcXVhbGl0eS4KKworICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgQWRkIEJpY3ViaWNTaGFkZXIgYW5kIENvbnZvbHV0aW9uU2hhZGVyIHRv
IHRoZSBidWlsZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6U3RhdGU6OlN0YXRlKToK
KyAgICAgICAgQWRkIHNoYWRvdy1yZWxhdGVkIG1lbWJlcnMgdG8gdGhlIEdMRVMyQ2FudmFzOjpT
dGF0ZQorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OlN0YXRlOjpzaGFkb3dBY3RpdmUp
OgorICAgICAgICBBZGQgYSBoZWxwZXIgZnVuY3Rpb24gdG8ga25vdyBpZiBzaGFkb3dzIGFyZSBh
Y3RpdmUuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzY2lzc29yQ2xlYXIpOgorICAgICAgICBSZWZhY3Rv
ciB0aGUgc2Npc3NvciBjbGVhcmluZyBmdW5jdGlvbiBvdXQgb2YgY2xlYXJSZWN0KCkuCisgICAg
ICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZmlsbFBhdGgpOgorICAgICAgICBBZGQgaG9vayBm
b3Igc2hhZG93IHJlbmRlcmluZyBpbiBwYXRocy4gIEJpbmQgZnJhbWVidWZmZXIgYXQgdGhpcyBs
ZXZlbC4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpmaWxsUmVjdCk6CisgICAgICAg
IEFkZCBob29rIGZvciBzaGFkb3cgcmVuZGVyaW5nIGluIHJlY3RzLiAgQmluZCBmcmFtZWJ1ZmZl
ciBhdCB0aGlzIGxldmVsLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZpbGxSZWN0
SW50ZXJuYWwpOgorICAgICAgICBSZW5hbWUgZmlsbFJlY3QoKSAtPiBmaWxsUmVjdEludGVybmFs
KCksIHdoaWNoIGRvZXMgYmluZCBpdHMgdmVydGV4IAorICAgICAgICBidWZmZXIsIGJ1dCBkb2Vz
IG5vdCBiaW5kIHRoZSBmcmFtZWJ1ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFz
OjpzZXRTaGFkb3dDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6c2V0U2hh
ZG93T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzZXRTaGFkb3dCbHVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzZXRTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtcyk6CisgICAgICAgIEltcGxlbWVudCBncmFwaGljc0NvbnRleHQtc3R5bGUgc2V0dGVycyBm
b3Igc2hhZG93IHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xp
cFBhdGgpOgorICAgICAgICBDYWxsIGZpbGxQYXRoSW50ZXJuYWwoKSwgbm90IGZpbGxQYXRoKCku
CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6cmVzdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCk6CisgICAgICAgIEJpbmQgdGhlIGZy
YW1lYnVmZmVyIGF0IHRoaXMgbGV2ZWwuICBEbyBub3QgYmluZCB2ZXJ0aWNlcyBoZXJlICh3aWxs
CisgICAgICAgIGJlIGRvbmUgaW4gZHJhd1RleHR1cmVkUXVhZCkuCisgICAgICAgIChXZWJDb3Jl
OjpHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdFRpbGUpOgorICAgICAgICBkcmF3UXVhZCgp
IC0+IGRyYXdUZXh0dXJlZFF1YWQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpj
b252b2x2ZVJlY3QpOgorICAgICAgICBJbXBsZW1lbnQgb25lIHBhc3Mgb2YgYSBjb252b2x1dGlv
biBmaWx0ZXIgKFggb3IgWSkuCisgICAgICAgIChXZWJDb3JlOjpnYXVzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpidWlsZEtlcm5lbCk6CisgICAgICAgIFNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBi
dWlsZCBhIEdhdXNzaWFuIGNvbnZvbHV0aW9uIGtlcm5lbC4KKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRRdWFkKToKKyAgICAgICAgUmVuYW1lIGRyYXdRdWFkKCkg
LT4gZHJhd1RleHR1cmVkUXVhZCgpLCB0byBiZSBtb3JlIGNsZWFyLiAgRG8gbm90CisgICAgICAg
IGJpbmQgdGhlIGZyYW1lYnVmZmVyIGF0IHRoaXMgbGV2ZWwgKGl0IHdpbGwgYmUgZG9uZSBoaWdo
ZXIpLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFF1YWRNaXRj
aGVsbCk6CisgICAgICAgIEltcGxlbWVudCBNaXRjaGVsbC1OZXRyYXZhbGkgYmljdWJpYyBzYW1w
bGluZywgdXNpbmcgQmljdWJpY1NoYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFz
OjpmaWxsUGF0aEludGVybmFsKToKKyAgICAgICAgUmVuYW1lIGZpbGxQYXRoKCkgLT4gZmlsbFBh
dGhJbnRlcm5hbCgpLCB3aGljaCBkb2VzIHVzZSBxdWFkIHZlcnRpY2VzLAorICAgICAgICBidXQg
ZG9lcyBub3QgYmluZCB0aGUgZnJhbWVidWZmZXIgb3Igc2V0IHRoZSBjb21wb3NpdGluZyBtb2Rl
LgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZsaXBSZWN0KToKKyAgICAgICAgSW1w
bGVtZW50IGEgaGVscGVyIGZ1bmN0aW9uIHRvIGZsaXAgYSByZWN0YW5nbGUgaW4gWSB3aXRoaW4g
dGhlIGNhbnZhcy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpjbGVhckJvcmRlcnMp
OgorICAgICAgICBJbXBsZW1lbnQgYSBoZWxwZXIgZnVuY3Rpb24gdG8gY2xlYXIgYW4gbi1waXhl
bCBib3JkZXIgYXJvdW5kIGEgcmVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpi
ZWdpblNoYWRvd0RyYXcpOgorICAgICAgICBTZXR1cCBiZWZvcmUgZHJhd2luZyBhIHByaW1pdGl2
ZSdzIHNoYWRvdzogIGZvciBoYXJkIHNoYWRvd3MsIGp1c3QKKyAgICAgICAgb2Zmc2V0IHRoZSBD
VE0gYnkgdGhlIHNoYWRvdyBvZmZzZXQuICBGb3Igc29mdCBzaGFkb3dzLCBiaW5kIHRvIGFuCisg
ICAgICAgIG9mZnNjcmVlbiBEcmF3aW5nQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJD
YW52YXM6OmVuZFNoYWRvd0RyYXcpOgorICAgICAgICBUZWFyLWRvd24gYWZ0ZXIgZHJhd2luZyBh
IHByaW1pdGl2ZSdzIHNoYWRvdzogIGZvciBoYXJkIHNoYWRvd3MsIGp1c3QKKyAgICAgICAgcmVz
dG9yZSB0aGUgQ1RNLiAgRm9yIHNvZnQgc2hhZG93cywgZG93bnNhbXBsZSAoaWYgbmVjZXNzYXJ5
KSwgdGhlbgorICAgICAgICBibHVyIGluIFgsIGJsdXIgaW4gWSwgdXBzYW1wbGUgaWYgbmVjZXNz
YXJ5KS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWN1YmljU2hhZGVyOjpCaWN1YmljU2hhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpY3ViaWNTaGFkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaWN1YmljU2hhZGVyOjp1c2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9C
aWN1YmljU2hhZGVyLmg6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgYSBiaWN1YmljIGltYWdl
IGZpbHRlcmluZyBzaGFkZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZv
bHV0aW9uU2hhZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb252b2x1dGlvblNo
YWRlcjo6Q29udm9sdXRpb25TaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdXRpb25T
aGFkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb252b2x1dGlvblNoYWRlcjo6dXNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaDog
QWRkZWQuCisgICAgICAgIEltcGxlbWVudCBhIDEtZGltZW5zaW9uYWwgY29udm9sdXRpb24gc2hh
ZGVyLiAgSW4gb3JkZXIgdG8gbWluaW1pemUKKyAgICAgICAgdGV4dHVyZSBzYW1wbGVzLCB0aGlz
IHNoYWRlciBpcyBwYXJhbWV0ZXJpemVkIGF0IGNvbXBpbGUgdGltZSBieSB0aGUKKyAgICAgICAg
d2lkdGggb2YgdGhlIGNvbnZvbHV0aW9uIGtlcm5lbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6Y29sb3JCdWZmZXIpOgorICAgICAgICBBZGQgYW4gYWNjZXNzb3IgdG8gcmV0cmlldmUgYSBE
cmF3aW5nQnVmZmVyJ3MgdGV4dHVyZSBJRC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZUJpY3ViaWNQcm9ncmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp1c2VDb252b2x1dGlvblByb2dyYW0p
OgorICAgICAgICBDcmVhdGUgQmljdWJpY1NoYWRlciBhbmQga01heEtlcm5lbFdpZHRoIENvbnZv
bHV0aW9uU2hhZGVyJ3MgKG9uZSBmb3IKKyAgICAgICAgZWFjaCBwb3NzaWJsZSBrZXJuZWwgd2lk
dGgpLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldE9mZnNj
cmVlbkJ1ZmZlcik6CisgICAgICAgIEltcGxlbWVudCBhIHNpbXBsZSBjYWNoZSBvZiBvZmZzY3Jl
ZW4gRHJhd2luZ0J1ZmZlcnMsIGludGVnZXItaW5kZXhlZC4KKyAgICAgICAgVGhpcyBpcyBkb25l
IHRvIG1pbmltaXplIHRoZSBWUkFNIHVzYWdlOiAgb25seSAyIGJ1ZmZlcnMgYXJlIHVzZWQgZm9y
CisgICAgICAgIGFsbCBjYW52YXNlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgQWRkIGJpY3ViaWMgYW5kIGNvbnZv
bHV0aW9uIHNoYWRlciBtZW1iZXJzLCBhbmQgdXNlWFhYKCkgZnVuY3Rpb25zLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAg
SG9vayBpbnRvIEdyYXBoaWNzQ29udGV4dFNraWEncyBwbGF0Zm9ybSBzaGFkb3cgc2V0dGVycyB0
byBzZXQKKyAgICAgICAgcGFyYW1ldGVycyBvbiBHTEVTMkNhbnZhcy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6Y2FuQWNjZWxlcmF0ZSk6CisgICAgICAgIFJlbW92
ZSBzaGFkb3dzIChsb29wZXJzKSBmcm9tIHRoZSBsaXN0IG9mIHRoaW5ncyB3ZSBjYW4ndCBhY2Nl
bGVyYXRlLgorCiAyMDExLTAzLTE1ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCShyZXZpc2lvbiA4MTI2MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQkod29ya2luZyBjb3B5KQpAQCAtMzQyNiw2ICszNDI2LDEwIEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVG
cmVlVHlwZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1Np
bXBsZUZvbnREYXRhRnJlZVR5cGUuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvQmljdWJpY1NoYWRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9CaWN1YmljU2hhZGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Db252b2x1dGlvblNoYWRlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Db252b2x1dGlvblNoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9EcmF3aW5nQnVmZmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Mb29wQmxpbm5DbGFzc2lmaWVyLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCShyZXZp
c2lvbiA4MTI2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0dMRVMyQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMjYgKzY1LDM4IEBAIHR5cGVk
ZWYgV1RGOjpWZWN0b3I8ZG91YmxlPiBEb3VibGVWZWN0b3IKIHN0cnVjdCBHTEVTMkNhbnZhczo6
U3RhdGUgewogICAgIFN0YXRlKCkKICAgICAgICAgOiBtX2ZpbGxDb2xvcigwLCAwLCAwLCAyNTUp
CisgICAgICAgICwgbV9zaGFkb3dDb2xvcigwLCAwLCAwLCAwKQogICAgICAgICAsIG1fYWxwaGEo
MS4wZikKICAgICAgICAgLCBtX2NvbXBvc2l0ZU9wKENvbXBvc2l0ZVNvdXJjZU92ZXIpCiAgICAg
ICAgICwgbV9jbGlwcGluZ0VuYWJsZWQoZmFsc2UpCisgICAgICAgICwgbV9zaGFkb3dPZmZzZXQo
MCwgMCkKKyAgICAgICAgLCBtX3NoYWRvd0JsdXIoMCkKKyAgICAgICAgLCBtX3NoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgU3RhdGUoY29uc3QgU3RhdGUm
IG90aGVyKQogICAgICAgICA6IG1fZmlsbENvbG9yKG90aGVyLm1fZmlsbENvbG9yKQorICAgICAg
ICAsIG1fc2hhZG93Q29sb3Iob3RoZXIubV9zaGFkb3dDb2xvcikKICAgICAgICAgLCBtX2FscGhh
KG90aGVyLm1fYWxwaGEpCiAgICAgICAgICwgbV9jb21wb3NpdGVPcChvdGhlci5tX2NvbXBvc2l0
ZU9wKQogICAgICAgICAsIG1fY3RtKG90aGVyLm1fY3RtKQogICAgICAgICAsIG1fY2xpcHBpbmdQ
YXRocygpIC8vIERvbid0IGNvcHk7IGNsaXBwaW5nIHBhdGhzIGFyZSB0cmFja2VkIHBlci1zdGF0
ZS4KICAgICAgICAgLCBtX2NsaXBwaW5nRW5hYmxlZChvdGhlci5tX2NsaXBwaW5nRW5hYmxlZCkK
KyAgICAgICAgLCBtX3NoYWRvd09mZnNldChvdGhlci5tX3NoYWRvd09mZnNldCkKKyAgICAgICAg
LCBtX3NoYWRvd0JsdXIob3RoZXIubV9zaGFkb3dCbHVyKQorICAgICAgICAsIG1fc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMob3RoZXIubV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKICAgICB7CiAg
ICAgfQogICAgIENvbG9yIG1fZmlsbENvbG9yOworICAgIENvbG9yIG1fc2hhZG93Q29sb3I7CiAg
ICAgZmxvYXQgbV9hbHBoYTsKICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2NvbXBvc2l0ZU9wOwog
ICAgIEFmZmluZVRyYW5zZm9ybSBtX2N0bTsKICAgICBXVEY6OlZlY3RvcjxQYXRoPiBtX2NsaXBw
aW5nUGF0aHM7CiAgICAgYm9vbCBtX2NsaXBwaW5nRW5hYmxlZDsKKyAgICBGbG9hdFNpemUgbV9z
aGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgbV9zaGFkb3dCbHVyOworICAgIGJvb2wgbV9zaGFkb3dz
SWdub3JlVHJhbnNmb3JtczsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYXBwbHlpbmcg
dGhlIHN0YXRlJ3MgYWxwaGEgdmFsdWUgdG8gdGhlIGdpdmVuIGlucHV0CiAgICAgLy8gY29sb3Ig
dG8gcHJvZHVjZSBhIG5ldyBvdXRwdXQgY29sb3IuIFRoZSBsb2dpYyBpcyB0aGUgc2FtZSBhcwpA
QCAtMTAwLDcgKzExMiwxMCBAQCBzdHJ1Y3QgR0xFUzJDYW52YXM6OlN0YXRlIHsKICAgICAgICAg
aW50IGEgPSAoYy5hbHBoYSgpICogcykgPj4gODsKICAgICAgICAgcmV0dXJuIENvbG9yKGMucmVk
KCksIGMuZ3JlZW4oKSwgYy5ibHVlKCksIGEpOwogICAgIH0KLQorICAgIGJvb2wgc2hhZG93QWN0
aXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NoYWRvd0NvbG9yLmFscGhhKCkg
PiAwICYmIChtX3NoYWRvd0JsdXIgfHwgbV9zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3NoYWRv
d09mZnNldC5oZWlnaHQoKSk7CisgICAgfQogfTsKIAogc3RhdGljIGlubGluZSBGbG9hdFBvaW50
IG9wZXJhdG9yKihjb25zdCBGbG9hdFBvaW50JiBmLCBmbG9hdCBzY2FsZSkKQEAgLTE5NCwxMSAr
MjA5LDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UgogewogICAg
IGJpbmRGcmFtZWJ1ZmZlcigpOwogICAgIGlmIChtX3N0YXRlLT5tX2N0bS5pc0lkZW50aXR5KCkg
JiYgIW1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c2Np
c3NvcihyZWN0LngoKSwgbV9zaXplLmhlaWdodCgpIC0gcmVjdC5oZWlnaHQoKSAtIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBtX2NvbnRleHQtPmVuYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICAgICAgbV9jb250ZXh0LT5j
bGVhckNvbG9yKENvbG9yKFJHQkEzMigwKSkpOwotICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdy
YXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKLSAgICAgICAgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgICAgICBzY2lzc29y
Q2xlYXIocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHNhdmUoKTsKICAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKENvbXBvc2l0ZUNsZWFyKTsKQEAgLTIwNywzNSArMjE4LDY0IEBAIHZvaWQgR0xFUzJDYW52
YXM6OmNsZWFyUmVjdChjb25zdCBGbG9hdFIKICAgICB9CiB9CiAKK3ZvaWQgR0xFUzJDYW52YXM6
OnNjaXNzb3JDbGVhcihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
KQoreworICAgIGludCBpbnRYID0gc3RhdGljX2Nhc3Q8aW50Pih4ICsgMC41Zik7CisgICAgaW50
IGludFkgPSBzdGF0aWNfY2FzdDxpbnQ+KHkgKyAwLjVmKTsKKyAgICBpbnQgaW50V2lkdGggPSBz
dGF0aWNfY2FzdDxpbnQ+KHggKyB3aWR0aCArIDAuNWYpIC0gaW50WDsKKyAgICBpbnQgaW50SGVp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50Pih5ICsgaGVpZ2h0ICsgMC41ZikgLSBpbnRZOworICAgIG1f
Y29udGV4dC0+c2Npc3NvcihpbnRYLCBtX3NpemUuaGVpZ2h0KCkgLSBpbnRIZWlnaHQgLSBpbnRZ
LCBpbnRXaWR0aCwgaW50SGVpZ2h0KTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoQ29sb3Io
UkdCQTMyKDApKSk7CisgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQlVGRkVSX0JJVCk7CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOworfQorCiB2b2lkIEdMRVMyQ2FudmFzOjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogeworICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwogICAgIG1fY29udGV4dC0+YXBw
bHlDb21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKICAgICBhcHBseUNs
aXBwaW5nKG1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKTsKLSAgICBmaWxsUGF0aChwYXRoLCBt
X3N0YXRlLT5hcHBseUFscGhhKG1fc3RhdGUtPm1fZmlsbENvbG9yKSk7CisKKyAgICBpZiAobV9z
dGF0ZS0+c2hhZG93QWN0aXZlKCkpIHsKKyAgICAgICAgYmVnaW5TaGFkb3dEcmF3KCk7CisgICAg
ICAgIGZpbGxQYXRoSW50ZXJuYWwocGF0aCwgbV9zdGF0ZS0+bV9zaGFkb3dDb2xvcik7CisgICAg
ICAgIGVuZFNoYWRvd0RyYXcocGF0aC5ib3VuZGluZ1JlY3QoKSk7CisgICAgfQorICAgIGZpbGxQ
YXRoSW50ZXJuYWwocGF0aCwgbV9zdGF0ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5tX2ZpbGxDb2xv
cikpOwogfQogCiB2b2lkIEdMRVMyQ2FudmFzOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogeworICAgIGJp
bmRGcmFtZWJ1ZmZlcigpOwogICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvciht
X3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKICAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1fY2xp
cHBpbmdFbmFibGVkKTsKLSAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogCisgICAg
aWYgKG1fc3RhdGUtPnNoYWRvd0FjdGl2ZSgpKSB7CisgICAgICAgIGJlZ2luU2hhZG93RHJhdygp
OworICAgICAgICBmaWxsUmVjdEludGVybmFsKHJlY3QsIG1fc3RhdGUtPm1fc2hhZG93Q29sb3Ip
OworICAgICAgICBlbmRTaGFkb3dEcmF3KHJlY3QpOworICAgIH0KKyAgICBmaWxsUmVjdEludGVy
bmFsKHJlY3QsIGNvbG9yKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIGZpbGxSZWN0KHJlY3QsIG1fc3RhdGUtPmFwcGx5QWxw
aGEobV9zdGF0ZS0+bV9maWxsQ29sb3IpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKK30KKwordm9p
ZCBHTEVTMkNhbnZhczo6ZmlsbFJlY3RJbnRlcm5hbChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3sKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1h
dHJpeCk7CiAgICAgbWF0cml4ICo9IG1fc3RhdGUtPm1fY3RtOwogICAgIG1hdHJpeC50cmFuc2xh
dGUocmVjdC54KCksIHJlY3QueSgpKTsKICAgICBtYXRyaXguc2NhbGUocmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpKTsKIAorICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CiAgICAg
bV9jb250ZXh0LT51c2VGaWxsU29saWRQcm9ncmFtKG1hdHJpeCwgY29sb3IpOwotCi0gICAgYmlu
ZEZyYW1lYnVmZmVyKCk7CiAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwgNCk7CiB9CiAKLXZvaWQgR0xFUzJDYW52YXM6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBmaWxsUmVjdChyZWN0LCBtX3N0YXRl
LT5hcHBseUFscGhhKG1fc3RhdGUtPm1fZmlsbENvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7
Ci19Ci0KIHZvaWQgR0xFUzJDYW52YXM6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3Is
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBtX3N0YXRlLT5tX2ZpbGxDb2xvciA9IGNv
bG9yOwpAQCAtMjQ2LDYgKzI4NiwyNiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpzZXRBbHBoYShmbG9h
dCBhbHBoYSkKICAgICBtX3N0YXRlLT5tX2FscGhhID0gYWxwaGE7CiB9CiAKK3ZvaWQgR0xFUzJD
YW52YXM6OnNldFNoYWRvd0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSkKK3sK
KyAgICBtX3N0YXRlLT5tX3NoYWRvd0NvbG9yID0gY29sb3I7Cit9CisKK3ZvaWQgR0xFUzJDYW52
YXM6OnNldFNoYWRvd09mZnNldChjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKK3sKKyAgICBtX3N0
YXRlLT5tX3NoYWRvd09mZnNldCA9IG9mZnNldDsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6c2V0
U2hhZG93Qmx1cihmbG9hdCBzaGFkb3dCbHVyKQoreworICAgIG1fc3RhdGUtPm1fc2hhZG93Qmx1
ciA9IHNoYWRvd0JsdXI7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OnNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCit7CisgICAgbV9zdGF0ZS0+
bV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworfQor
CiB2b2lkIEdMRVMyQ2FudmFzOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBt
X3N0YXRlLT5tX2N0bS50cmFuc2xhdGUoeCwgeSk7CkBAIC0yNzgsNyArMzM4LDcgQEAgdm9pZCBH
TEVTMkNhbnZhczo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcAogICAgIGJlZ2luU3RlbmNpbERyYXco
KTsKICAgICAvLyBSZWQgaXMgdXNlZCBzbyB3ZSBjYW4gc2VlIGl0IGlmIGl0IGVuZHMgdXAgaW4g
dGhlIGNvbG9yIGJ1ZmZlci4KICAgICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUpOwotICAgIGZp
bGxQYXRoKHBhdGgsIHJlZCk7CisgICAgZmlsbFBhdGhJbnRlcm5hbChwYXRoLCByZWQpOwogICAg
IG1fc3RhdGUtPm1fY2xpcHBpbmdQYXRocy5hcHBlbmQocGF0aCk7CiAgICAgbV9zdGF0ZS0+bV9j
bGlwcGluZ0VuYWJsZWQgPSB0cnVlOwogfQpAQCAtMzExLDcgKzM3MSw3IEBAIHZvaWQgR0xFUzJD
YW52YXM6OnJlc3RvcmUoKQogICAgICAgICAgICAgZm9yIChwYXRoSXRlciA9IGNsaXBwaW5nUGF0
aHMuYmVnaW4oKTsgcGF0aEl0ZXIgPCBjbGlwcGluZ1BhdGhzLmVuZCgpOyArK3BhdGhJdGVyKSB7
CiAgICAgICAgICAgICAgICAgLy8gUmVkIGlzIHVzZWQgc28gd2UgY2FuIHNlZSBpdCBpZiBpdCBl
bmRzIHVwIGluIHRoZSBjb2xvciBidWZmZXIuCiAgICAgICAgICAgICAgICAgQ29sb3IgcmVkKDI1
NSwgMCwgMCwgMjU1KTsKLSAgICAgICAgICAgICAgICBmaWxsUGF0aCgqcGF0aEl0ZXIsIHJlZCk7
CisgICAgICAgICAgICAgICAgZmlsbFBhdGhJbnRlcm5hbCgqcGF0aEl0ZXIsIHJlZCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTksMTUgKzM3OSwxNSBAQCB2b2lkIEdM
RVMyQ2FudmFzOjpyZXN0b3JlKCkKIAogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVj
dCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CisgICAgYmluZEZyYW1l
YnVmZmVyKCk7CiAgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0
ZU9wKTsKICAgICBhcHBseUNsaXBwaW5nKGZhbHNlKTsKIAotICAgIG1fY29udGV4dC0+dXNlUXVh
ZFZlcnRpY2VzKCk7CiAgICAgbV9jb250ZXh0LT5zZXRBY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCk7CiAKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKIAotICAgIGRyYXdRdWFkKHRleHR1cmVT
aXplLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBoYSk7
CisgICAgZHJhd1RleHR1cmVkUXVhZCh0ZXh0dXJlU2l6ZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9z
dGF0ZS0+bV9jdG0sIG1fc3RhdGUtPm1fYWxwaGEpOwogfQogCiB2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQpAQCAtMzM4LDEyICszOTgsMTIgQEAgdm9pZCBHTEVT
MkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dQogCiB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3
VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3AsIGJvb2wgY2xpcCkKIHsKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKICAgICBt
X2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOwogICAgIGFwcGx5
Q2xpcHBpbmcoY2xpcCk7CiAgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0dXJlLT50
aWxlcygpOwogICAgIEludFJlY3QgdGlsZUlkeFJlY3QgPSB0aWxlcy5vdmVybGFwcGVkVGlsZUlu
ZGljZXMoc3JjUmVjdCk7CiAKLSAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogICAg
IG1fY29udGV4dC0+c2V0QWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
OwogCiAgICAgZm9yIChpbnQgeSA9IHRpbGVJZHhSZWN0LnkoKTsgeSA8PSB0aWxlSWR4UmVjdC5t
YXhZKCk7IHkrKykgewpAQCAtMzY3LDEzICs0MjcsMTggQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJh
d1RleHR1cmVkUmVjdFRpbGUoVAogCiAgICAgSW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9
IHRpbGVzLnRpbGVCb3VuZHNXaXRoQm9yZGVyKHRpbGUpOwogCi0gICAgZHJhd1F1YWQodGlsZUJv
dW5kc1dpdGhCb3JkZXIuc2l6ZSgpLCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLCBkc3RSZWN0
SW50ZXJzZWN0ZWQsIHRyYW5zZm9ybSwgYWxwaGEpOworICAgIGRyYXdUZXh0dXJlZFF1YWQodGls
ZUJvdW5kc1dpdGhCb3JkZXIuc2l6ZSgpLCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLCBkc3RS
ZWN0SW50ZXJzZWN0ZWQsIHRyYW5zZm9ybSwgYWxwaGEpOwogfQogCi12b2lkIEdMRVMyQ2FudmFz
OjpkcmF3UXVhZChjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBmbG9hdCBhbHBoYSkKK3ZvaWQgR0xFUzJDYW52YXM6OmNvbnZvbHZlUmVjdCh1
bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGZsb2F0IGltYWdlSW5jcmVt
ZW50WzJdLCBjb25zdCBmbG9hdCoga2VybmVsLCBpbnQga2VybmVsV2lkdGgpCiB7CisgICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVy
ZSk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
Ok5FQVJFU1QpOworCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwot
ICAgIG1hdHJpeCAqPSB0cmFuc2Zvcm07CiAgICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0Lngo
KSwgZHN0UmVjdC55KCkpOwogICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0LndpZHRoKCksIGRzdFJl
Y3QuaGVpZ2h0KCkpOwogCkBAIC0zODIsMTMgKzQ0Nyw3OSBAQCB2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3UXVhZChjb25zdCBJbnRTaXplCiAgICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0Lngo
KSwgc3JjUmVjdC55KCkpOwogICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0LndpZHRoKCksIHNy
Y1JlY3QuaGVpZ2h0KCkpOwogCi0gICAgYmluZEZyYW1lYnVmZmVyKCk7CisgICAgbV9jb250ZXh0
LT51c2VRdWFkVmVydGljZXMoKTsKKyAgICBtX2NvbnRleHQtPnVzZUNvbnZvbHV0aW9uUHJvZ3Jh
bShtYXRyaXgsIHRleE1hdHJpeCwga2VybmVsLCBrZXJuZWxXaWR0aCwgaW1hZ2VJbmNyZW1lbnQp
OworICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVf
U1RSSVAsIDAsIDQpOworICAgIGNoZWNrR0xFcnJvcigiZ2xEcmF3QXJyYXlzIik7Cit9CiAKK3N0
YXRpYyBmbG9hdCBnYXVzcyhmbG9hdCB4LCBmbG9hdCBzaWdtYSkKK3sKKyAgICByZXR1cm4gZXhw
KC0gKHggKiB4KSAvICgyLjBmICogc2lnbWEgKiBzaWdtYSkpOworfQorCitzdGF0aWMgdm9pZCBi
dWlsZEtlcm5lbChmbG9hdCBzaWdtYSwgZmxvYXQqIGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoKQor
eworICAgIGZsb2F0IGhhbGZXaWR0aCA9IChrZXJuZWxXaWR0aCAtIDEuMGYpIC8gMi4wZjsKKyAg
ICBmbG9hdCBzdW0gPSAwLjBmOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2VybmVsV2lkdGg7
ICsraSkgeworICAgICAgICBrZXJuZWxbaV0gPSBnYXVzcyhpIC0gaGFsZldpZHRoLCBzaWdtYSk7
CisgICAgICAgIHN1bSArPSBrZXJuZWxbaV07CisgICAgfQorICAgIC8vIE5vcm1hbGl6ZSB0aGUg
a2VybmVsCisgICAgZmxvYXQgc2NhbGUgPSAxLjBmIC8gc3VtOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwga2VybmVsV2lkdGg7ICsraSkKKyAgICAgICAga2VybmVsW2ldICo9IHNjYWxlOworfQor
Cit2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IEludFNpemUmIHRleHR1
cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhKQoreworICAg
IEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsKKyAgICBtYXRyaXggKj0gdHJh
bnNmb3JtOworICAgIG1hdHJpeC50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsK
KyAgICBtYXRyaXguc2NhbGUoZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKKwor
ICAgIEFmZmluZVRyYW5zZm9ybSB0ZXhNYXRyaXg7CisgICAgdGV4TWF0cml4LnNjYWxlKDEuMGYg
LyB0ZXh0dXJlU2l6ZS53aWR0aCgpLCAxLjBmIC8gdGV4dHVyZVNpemUuaGVpZ2h0KCkpOworICAg
IHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdC54KCksIHNyY1JlY3QueSgpKTsKKyAgICB0ZXhN
YXRyaXguc2NhbGUoc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpKTsKKworICAgIG1f
Y29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CiAgICAgbV9jb250ZXh0LT51c2VUZXh0dXJlUHJv
Z3JhbShtYXRyaXgsIHRleE1hdHJpeCwgYWxwaGEpOwogICAgIG1fY29udGV4dC0+ZHJhd0FycmF5
cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVAsIDAsIDQpOwogICAgIGNoZWNrR0xF
cnJvcigiZ2xEcmF3QXJyYXlzIik7CiB9CiAKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJl
ZFF1YWRNaXRjaGVsbChjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSkKK3sKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWl0
Y2hlbGxDb2VmZmljaWVudHNbMTZdID0geworICAgICAgICAgMC4wZiAvIDE4LjBmLCAgIDEuMGYg
LyAxOC4wZiwgIDE2LjBmIC8gMTguMGYsICAgMS4wZiAvIDE4LjBmLAorICAgICAgICAgMC4wZiAv
IDE4LjBmLCAgIDkuMGYgLyAxOC4wZiwgICAwLjBmIC8gMTguMGYsICAtOS4wZiAvIDE4LjBmLAor
ICAgICAgICAtNi4wZiAvIDE4LjBmLCAgMjcuMGYgLyAxOC4wZiwgLTM2LjBmIC8gMTguMGYsICAx
NS4wZiAvIDE4LjBmLAorICAgICAgICAgNy4wZiAvIDE4LjBmLCAtMjEuMGYgLyAxOC4wZiwgIDIx
LjBmIC8gMTguMGYsICAtNy4wZiAvIDE4LjBmLAorICAgIH07CisKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CisgICAgbWF0cml4ICo9IHRyYW5zZm9ybTsKKyAgICBt
YXRyaXgudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7CisgICAgbWF0cml4LnNj
YWxlKGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7CisKKyAgICBmbG9hdCBpbWFn
ZUluY3JlbWVudFsyXSA9IHsgMS4wZiAvIHRleHR1cmVTaXplLndpZHRoKCksIDEuMGYgLyB0ZXh0
dXJlU2l6ZS5oZWlnaHQoKSB9OworCisgICAgQWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsKKyAg
ICB0ZXhNYXRyaXguc2NhbGUoaW1hZ2VJbmNyZW1lbnRbMF0sIGltYWdlSW5jcmVtZW50WzFdKTsK
KyAgICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSk7CisgICAg
dGV4TWF0cml4LnNjYWxlKHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7CisKKyAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpORUFSRVNUKTsKKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKworICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRp
Y2VzKCk7CisgICAgbV9jb250ZXh0LT51c2VCaWN1YmljUHJvZ3JhbShtYXRyaXgsIHRleE1hdHJp
eCwgbWl0Y2hlbGxDb2VmZmljaWVudHMsIGltYWdlSW5jcmVtZW50LCBhbHBoYSk7CisgICAgbV9j
b250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwg
NCk7CisgICAgY2hlY2tHTEVycm9yKCJnbERyYXdBcnJheXMiKTsKK30KKwogdm9pZCBHTEVTMkNh
bnZhczo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewogICAg
IG1fc3RhdGUtPm1fY29tcG9zaXRlT3AgPSBvcDsKQEAgLTU1NCwxMiArNjg1LDkgQEAgdm9pZCBH
TEVTMkNhbnZhczo6Y3JlYXRlVmVydGV4QnVmZmVyRnJvbQogICAgICpjb3VudCA9IGluZGljZXMu
c2l6ZSgpOwogfQogCi12b2lkIEdMRVMyQ2FudmFzOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdMRVMyQ2FudmFzOjpmaWxsUGF0aEludGVybmFs
KGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAoU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OnVzZUxvb3BCbGlubkZvclBhdGhSZW5kZXJpbmcoKSkgewotICAg
ICAgICBiaW5kRnJhbWVidWZmZXIoKTsKLSAgICAgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0
ZU9wZXJhdG9yKG1fc3RhdGUtPm1fY29tcG9zaXRlT3ApOwotCiAgICAgICAgIG1fcGF0aENhY2hl
LmNsZWFyKCk7CiAgICAgICAgIExvb3BCbGlublBhdGhQcm9jZXNzb3IgcHJvY2Vzc29yOwogICAg
ICAgICBwcm9jZXNzb3IucHJvY2VzcyhwYXRoLCBtX3BhdGhDYWNoZSk7CkBAIC01OTAsMTggKzcx
OCwxOCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwCiAgICAgICAg
IGludCBjb3VudDsKICAgICAgICAgdW5zaWduZWQgdmVydGV4QnVmZmVyLCBpbmRleEJ1ZmZlcjsK
ICAgICAgICAgY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgocGF0aCwgJmNvdW50LCAmdmVydGV4
QnVmZmVyLCAmaW5kZXhCdWZmZXIpOworCisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgo
bV9mbGlwTWF0cml4KTsKKyAgICAgICAgbWF0cml4ICo9IG1fc3RhdGUtPm1fY3RtOworCiAgICAg
ICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCB2ZXJ0ZXhCdWZmZXIpOwogICAgICAgICBjaGVja0dMRXJy
b3IoImJpbmRCdWZmZXIiKTsKICAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5k
ZXhCdWZmZXIpOwogICAgICAgICBjaGVja0dMRXJyb3IoImJpbmRCdWZmZXIiKTsKIAotICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7Ci0gICAgICAgIG1hdHJpeCAq
PSBtX3N0YXRlLT5tX2N0bTsKLQogICAgICAgICBtX2NvbnRleHQtPnVzZUZpbGxTb2xpZFByb2dy
YW0obWF0cml4LCBjb2xvcik7CiAgICAgICAgIGNoZWNrR0xFcnJvcigidXNlRmlsbFNvbGlkUHJv
Z3JhbSIpOwogCi0gICAgICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwogICAgICAgICBtX2NvbnRleHQt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVTLCBjb3VudCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKICAg
ICAgICAgY2hlY2tHTEVycm9yKCJkcmF3QXJyYXlzIik7CiAKQEAgLTYxMyw2ICs3NDEsMTM2IEBA
IHZvaWQgR0xFUzJDYW52YXM6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHAKICAgICB9CiB9CiAKK0Zs
b2F0UmVjdCBHTEVTMkNhbnZhczo6ZmxpcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIEZsb2F0UmVjdCBmbGlwcGVkUmVjdChyZWN0KTsKKyAgICBmbGlwcGVkUmVjdC5zZXRZKG1f
c2l6ZS5oZWlnaHQoKSAtIHJlY3QueSgpKTsKKyAgICBmbGlwcGVkUmVjdC5zZXRIZWlnaHQoLXJl
Y3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBmbGlwcGVkUmVjdDsKK30KKwordm9pZCBHTEVTMkNh
bnZhczo6Y2xlYXJCb3JkZXJzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgaW50IHdpZHRoKQorewor
ICAgIHNjaXNzb3JDbGVhcihyZWN0LngoKSwgcmVjdC55KCkgLSB3aWR0aCwgcmVjdC53aWR0aCgp
ICsgd2lkdGgsIHdpZHRoKTsKKyAgICBzY2lzc29yQ2xlYXIocmVjdC54KCkgLSB3aWR0aCwgcmVj
dC5tYXhZKCksIHJlY3Qud2lkdGgoKSArIHdpZHRoLCB3aWR0aCk7CisgICAgc2Npc3NvckNsZWFy
KHJlY3QueCgpLCByZWN0Lm1heFkoKSwgd2lkdGgsIHJlY3QuaGVpZ2h0KCkgKyB3aWR0aCk7Cisg
ICAgc2Npc3NvckNsZWFyKHJlY3QubWF4WCgpLCByZWN0LnkoKSwgd2lkdGgsIHJlY3QuaGVpZ2h0
KCkgKyB3aWR0aCk7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmJlZ2luU2hhZG93RHJhdygpCit7
CisgICAgZmxvYXQgb2Zmc2V0WCA9IG1fc3RhdGUtPm1fc2hhZG93T2Zmc2V0LndpZHRoKCk7Cisg
ICAgZmxvYXQgb2Zmc2V0WSA9IG1fc3RhdGUtPm1fc2hhZG93T2Zmc2V0LmhlaWdodCgpOworICAg
IHNhdmUoKTsKKyAgICBpZiAobV9zdGF0ZS0+bV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykgewor
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3Q1RNOworICAgICAgICBuZXdDVE0udHJhbnNsYXRl
KG9mZnNldFgsIC1vZmZzZXRZKTsKKyAgICAgICAgbmV3Q1RNICo9IG1fc3RhdGUtPm1fY3RtOwor
ICAgICAgICBtX3N0YXRlLT5tX2N0bSA9IG5ld0NUTTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9z
dGF0ZS0+bV9jdG0udHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFkpOworCisgICAgaWYgKG1fc3Rh
dGUtPm1fc2hhZG93Qmx1ciA+IDApIHsKKyAgICAgICAgLy8gRHJhdyBoYXJkIHNoYWRvdyB0byBv
ZmZzY3JlZW4gYnVmZmVyIDAuCisgICAgICAgIERyYXdpbmdCdWZmZXIqIGRzdEJ1ZmZlciA9IG1f
Y29udGV4dC0+Z2V0T2Zmc2NyZWVuQnVmZmVyKDAsIG1fc2l6ZSk7CisgICAgICAgIGRzdEJ1ZmZl
ci0+YmluZCgpOworICAgICAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29t
cG9zaXRlQ29weSk7CisgICAgICAgIGFwcGx5Q2xpcHBpbmcoZmFsc2UpOworICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IoQ29sb3IoUkdCQTMyKDApKSk7CisgICAgICAgIG1fY29udGV4dC0+
Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOworICAgIH0KK30KKwor
dm9pZCBHTEVTMkNhbnZhczo6ZW5kU2hhZG93RHJhdyhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5n
Qm94KQoreworICAgIGlmIChtX3N0YXRlLT5tX3NoYWRvd0JsdXIgPiAwKSB7CisgICAgICAgIC8v
IEJ1ZmZlciAwIGNvbnRhaW5zIHRoZSBwcmltaXRpdmUgZHJhd24gd2l0aCBhIGhhcmQgc2hhZG93
LgorICAgICAgICBEcmF3aW5nQnVmZmVyKiBzcmNCdWZmZXIgPSBtX2NvbnRleHQtPmdldE9mZnNj
cmVlbkJ1ZmZlcigwLCBtX3NpemUpOworICAgICAgICBEcmF3aW5nQnVmZmVyKiBkc3RCdWZmZXIg
PSBtX2NvbnRleHQtPmdldE9mZnNjcmVlbkJ1ZmZlcigxLCBtX3NpemUpOworCisgICAgICAgIGZs
b2F0IHNpZ21hID0gbV9zdGF0ZS0+bV9zaGFkb3dCbHVyICogMC4zMzMzMzNmOworICAgICAgICBG
bG9hdFJlY3Qgc2hhZG93Qm91bmRpbmdCb3gobV9zdGF0ZS0+bV9jdG0ubWFwUmVjdChib3VuZGlu
Z0JveCkpOworICAgICAgICBGbG9hdFJlY3QgcmVjdChGbG9hdFBvaW50KDAsIDApLCBtX3NpemUp
OworICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdChzaGFkb3dCb3VuZGluZ0JveCk7CisKKyAgICAg
ICAgaW50IHNjYWxlRmFjdG9yID0gMTsKKyAgICAgICAgd2hpbGUgKHNpZ21hID4ga01heFNpZ21h
KSB7CisgICAgICAgICAgICBzcmNSZWN0LnNjYWxlKDAuNWYpOworICAgICAgICAgICAgc2NhbGVG
YWN0b3IgKj0gMjsKKyAgICAgICAgICAgIHNpZ21hICo9IDAuNWY7CisgICAgICAgIH0KKyAgICAg
ICAgc3JjUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc3JjUmVjdCk7CisgICAgICAgIHNyY1JlY3Qu
c2NhbGUoc2NhbGVGYWN0b3IpOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHNjYWxlRmFj
dG9yOyBpICo9IDIpIHsKKyAgICAgICAgICAgIGRzdEJ1ZmZlci0+YmluZCgpOworICAgICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
c3JjQnVmZmVyLT5jb2xvckJ1ZmZlcigpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOworICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUik7CisgICAgICAgICAgICBGbG9hdFJlY3QgZHN0UmVjdChzcmNSZWN0KTsKKyAgICAgICAg
ICAgIGRzdFJlY3Quc2NhbGUoMC41Zik7CisgICAgICAgICAgICAvLyBDbGVhciBvdXQgMSBwaXhl
bCBib3JkZXIgZm9yIGxpbmVhciBmaWx0ZXJpbmcuCisgICAgICAgICAgICBjbGVhckJvcmRlcnMo
ZHN0UmVjdCwgMSk7CisgICAgICAgICAgICBkcmF3VGV4dHVyZWRRdWFkKHNyY0J1ZmZlci0+c2l6
ZSgpLCBmbGlwUmVjdChzcmNSZWN0KSwgZHN0UmVjdCwgQWZmaW5lVHJhbnNmb3JtKCksIDEuMCk7
CisgICAgICAgICAgICBzcmNSZWN0ID0gZHN0UmVjdDsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChz
cmNCdWZmZXIsIGRzdEJ1ZmZlcik7CisgICAgICAgIH0KKworICAgICAgICBpbnQgaGFsZldpZHRo
ID0gc3RhdGljX2Nhc3Q8aW50PihzaWdtYSAqIDMuMGYpOworICAgICAgICBpbnQga2VybmVsV2lk
dGggPSBoYWxmV2lkdGggKiAyICsgMTsKKyAgICAgICAgT3duQXJyYXlQdHI8ZmxvYXQ+IGtlcm5l
bCA9IGFkb3B0QXJyYXlQdHIobmV3IGZsb2F0W2tlcm5lbFdpZHRoXSk7CisgICAgICAgIGJ1aWxk
S2VybmVsKHNpZ21hLCBrZXJuZWwuZ2V0KCksIGtlcm5lbFdpZHRoKTsKKworICAgICAgICBpZiAo
c2NhbGVGYWN0b3IgPiAxKSB7CisgICAgICAgICAgICBzY2lzc29yQ2xlYXIoc3JjUmVjdC5tYXhY
KCksIHNyY1JlY3QueSgpLCBrZXJuZWxXaWR0aCwgc3JjUmVjdC5oZWlnaHQoKSk7CisgICAgICAg
ICAgICBzY2lzc29yQ2xlYXIoc3JjUmVjdC54KCkgLSBrZXJuZWxXaWR0aCwgc3JjUmVjdC55KCks
IGtlcm5lbFdpZHRoLCBzcmNSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEJsdXIgaW4gWCBvZmZzY3JlZW4uCisgICAgICAgIGRzdEJ1ZmZlci0+YmluZCgpOworICAgICAg
ICBzcmNSZWN0LmluZmxhdGVYKGhhbGZXaWR0aCk7CisgICAgICAgIHNyY1JlY3QuaW50ZXJzZWN0
KHJlY3QpOworICAgICAgICBmbG9hdCBpbWFnZUluY3JlbWVudFhbMl0gPSB7MS4wZiAvIHNyY0J1
ZmZlci0+c2l6ZSgpLndpZHRoKCksIDAuMGZ9OworICAgICAgICBjb252b2x2ZVJlY3Qoc3JjQnVm
ZmVyLT5jb2xvckJ1ZmZlcigpLCBzcmNCdWZmZXItPnNpemUoKSwgZmxpcFJlY3Qoc3JjUmVjdCks
IHNyY1JlY3QsIGltYWdlSW5jcmVtZW50WCwga2VybmVsLmdldCgpLCBrZXJuZWxXaWR0aCk7CisK
KyAgICAgICAgaWYgKHNjYWxlRmFjdG9yID4gMSkgeworICAgICAgICAgICAgc2Npc3NvckNsZWFy
KHNyY1JlY3QueCgpLCBzcmNSZWN0Lm1heFkoKSwgc3JjUmVjdC53aWR0aCgpLCBrZXJuZWxXaWR0
aCk7CisgICAgICAgICAgICBzY2lzc29yQ2xlYXIoc3JjUmVjdC54KCksIHNyY1JlY3QueSgpIC0g
a2VybmVsV2lkdGgsIHNyY1JlY3Qud2lkdGgoKSwga2VybmVsV2lkdGgpOworICAgICAgICB9Cisg
ICAgICAgIHNyY1JlY3QuaW5mbGF0ZVkoaGFsZldpZHRoKTsKKyAgICAgICAgc3JjUmVjdC5pbnRl
cnNlY3QocmVjdCk7CisgICAgICAgIHN0ZDo6c3dhcChzcmNCdWZmZXIsIGRzdEJ1ZmZlcik7CisK
KyAgICAgICAgZmxvYXQgaW1hZ2VJbmNyZW1lbnRZWzJdID0gezAuMGYsIDEuMGYgLyBzcmNCdWZm
ZXItPnNpemUoKS5oZWlnaHQoKX07CisgICAgICAgIGlmIChzY2FsZUZhY3RvciA+IDEpIHsKKyAg
ICAgICAgICAgIC8vIEJsdXIgaW4gWSBvZmZzY3JlZW4uCisgICAgICAgICAgICBkc3RCdWZmZXIt
PmJpbmQoKTsKKyAgICAgICAgICAgIGNvbnZvbHZlUmVjdChzcmNCdWZmZXItPmNvbG9yQnVmZmVy
KCksIHNyY0J1ZmZlci0+c2l6ZSgpLCBmbGlwUmVjdChzcmNSZWN0KSwgc3JjUmVjdCwgaW1hZ2VJ
bmNyZW1lbnRZLCBrZXJuZWwuZ2V0KCksIGtlcm5lbFdpZHRoKTsKKyAgICAgICAgICAgIC8vIENs
ZWFyIG91dCAyIHBpeGVsIGJvcmRlciBmb3IgYmljdWJpYyBmaWx0ZXJpbmcuCisgICAgICAgICAg
ICBjbGVhckJvcmRlcnMoc3JjUmVjdCwgMik7CisgICAgICAgICAgICBzdGQ6OnN3YXAoc3JjQnVm
ZmVyLCBkc3RCdWZmZXIpOworCisgICAgICAgICAgICAvLyBVcHNhbXBsZSBzcmNCdWZmZXIgLT4g
bWFpbiBmcmFtZWJ1ZmZlciB1c2luZyBiaWN1YmljIGZpbHRlcmluZy4KKyAgICAgICAgICAgIGJp
bmRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9w
ZXJhdG9yKG1fc3RhdGUtPm1fY29tcG9zaXRlT3ApOworICAgICAgICAgICAgYXBwbHlDbGlwcGlu
ZyhtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzcmNCdWZmZXItPmNvbG9y
QnVmZmVyKCkpOworICAgICAgICAgICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBzcmNSZWN0OworICAg
ICAgICAgICAgZHN0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBkcmF3VGV4
dHVyZWRRdWFkTWl0Y2hlbGwoc3JjQnVmZmVyLT5zaXplKCksIGZsaXBSZWN0KHNyY1JlY3QpLCBk
c3RSZWN0LCBBZmZpbmVUcmFuc2Zvcm0oKSwgMS4wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIEJsdXIgaW4gWSBkaXJlY3RseSB0byBmcmFtZWJ1ZmZlci4KKyAgICAgICAgICAg
IGJpbmRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0
ZU9wZXJhdG9yKG1fc3RhdGUtPm1fY29tcG9zaXRlT3ApOworICAgICAgICAgICAgYXBwbHlDbGlw
cGluZyhtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCk7CisKKyAgICAgICAgICAgIGNvbnZvbHZl
UmVjdChzcmNCdWZmZXItPmNvbG9yQnVmZmVyKCksIHNyY0J1ZmZlci0+c2l6ZSgpLCBmbGlwUmVj
dChzcmNSZWN0KSwgc3JjUmVjdCwgaW1hZ2VJbmNyZW1lbnRZLCBrZXJuZWwuZ2V0KCksIGtlcm5l
bFdpZHRoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN0b3JlKCk7Cit9CisKIHZvaWQgR0xF
UzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcoKQogewogICAgIC8vIFR1cm4gb24gc3RlbmNpbCB0
ZXN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xF
UzJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCShyZXZpc2lvbiA4MTI2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKTsKICAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYsIENvbG9yU3Bh
Y2UpOwogICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpOworICAgIHZvaWQgc2V0U2hhZG93
Q29sb3IoY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKKyAgICB2b2lkIHNldFNoYWRvd09mZnNl
dChjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFNoYWRvd0JsdXIoZmxvYXQpOworICAg
IHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCk7CiAgICAgdm9pZCBzZXRDb21w
b3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpOwogICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsK
QEAgLTk2LDExICsxMDAsMjAgQEAgcHVibGljOgogICAgIERyYXdpbmdCdWZmZXIqIGRyYXdpbmdC
dWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdCdWZmZXI7IH0KIAogcHJpdmF0ZToKKyAg
ICB2b2lkIHNjaXNzb3JDbGVhcihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0KTsKICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3RUaWxlKFRleHR1cmUqIHRleHR1cmUs
IGludCB0aWxlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgZHJh
d1F1YWQoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9h
dCBhbHBoYSk7CisgICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IEludFNpemUmIHRleHR1
cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOworICAgIHZvaWQgZHJhd1Rl
eHR1cmVkUXVhZE1pdGNoZWxsKGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgZmxvYXQgYWxwaGEpOworICAgIHZvaWQgY29udm9sdmVSZWN0KHVuc2lnbmVkIHRl
eHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0sIGNv
bnN0IGZsb2F0KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0aCk7CisKICAgICB2b2lkIGFwcGx5Q29t
cG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOwogICAgIHZvaWQgY3JlYXRlVmVydGV4
QnVmZmVyRnJvbVBhdGgoY29uc3QgUGF0aCYsIGludCogY291bnQsIHVuc2lnbmVkKiB2ZXJ0ZXhC
dWZmZXIsIHVuc2lnbmVkKiBpbmRleEJ1ZmZlcik7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQ
YXRoJiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGZpbGxQYXRoSW50ZXJuYWwoY29uc3QgUGF0
aCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBmaWxsUmVjdEludGVybmFsKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJik7CisgICAgRmxvYXRSZWN0IGZsaXBSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOworICAgIHZvaWQgY2xlYXJCb3JkZXJzKGNvbnN0IEZsb2F0UmVjdCYsIGludCB3aWR0
aCk7CisgICAgdm9pZCBiZWdpblNoYWRvd0RyYXcoKTsKKyAgICB2b2lkIGVuZFNoYWRvd0RyYXco
Y29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCk7CiAgICAgdm9pZCBiZWdpblN0ZW5jaWxEcmF3
KCk7CiAgICAgdm9pZCBhcHBseUNsaXBwaW5nKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIGNoZWNr
R0xFcnJvcihjb25zdCBjaGFyKiBoZWFkZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVy
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5jbHVkZSAiQmljdWJpY1No
YWRlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitCaWN1YmljU2hhZGVyOjpCaWN1YmljU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKQorICAgIDogU2hhZGVyKGNvbnRleHQsIHByb2dy
YW0pCisgICAgLCBtX21hdHJpeExvY2F0aW9uKGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLCAibWF0cml4IikpCisgICAgLCBtX3RleE1hdHJpeExvY2F0aW9uKGNvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidGV4TWF0cml4IikpCisgICAgLCBtX2NvZWZmaWNp
ZW50c0xvY2F0aW9uKGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAiY29lZmZp
Y2llbnRzIikpCisgICAgLCBtX2ltYWdlSW5jcmVtZW50TG9jYXRpb24oY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW0sICJpbWFnZUluY3JlbWVudCIpKQorICAgICwgbV9pbWFnZUxv
Y2F0aW9uKGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAiaW1hZ2UiKSkKKyAg
ICAsIG1fYWxwaGFMb2NhdGlvbihjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
ImFscGhhIikpCisgICAgLCBtX3Bvc2l0aW9uTG9jYXRpb24oY29udGV4dC0+Z2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbSwgInBvc2l0aW9uIikpCit7Cit9CisKK1Bhc3NPd25QdHI8QmljdWJpY1No
YWRlcj4gQmljdWJpY1NoYWRlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQor
eworICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQorICAgICAgICAi
dW5pZm9ybSBtYXQzIG1hdHJpeDtcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0MyB0ZXhNYXRyaXg7
XG4iCisgICAgICAgICJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbiIKKyAgICAgICAgInZhcnlp
bmcgdmVjMiB0ZXhDb29yZDtcbiIKKyAgICAgICAgInZvaWQgbWFpbigpIHtcbiIKKyAgICAgICAg
IiAgICB0ZXhDb29yZCA9ICh0ZXhNYXRyaXggKiBwb3NpdGlvbikueHk7XG4iCisgICAgICAgICIg
ICAgZ2xfUG9zaXRpb24gPSB2ZWM0KG1hdHJpeCAqIHBvc2l0aW9uLCAxLjApO1xuIgorICAgICAg
ICAifVxuIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJTb3VyY2UgPQor
ICAgICAgICAiI2lmZGVmIEdMX0VTXG4iCisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDtcbiIKKyAgICAgICAgIiNlbmRpZlxuIgorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgaW1h
Z2U7XG4iCisgICAgICAgICJ1bmlmb3JtIHZlYzIgaW1hZ2VJbmNyZW1lbnQ7XG4iCisgICAgICAg
ICJ1bmlmb3JtIG1hdDQgY29lZmZpY2llbnRzO1xuIgorICAgICAgICAidW5pZm9ybSBmbG9hdCBh
bHBoYTtcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB0ZXhDb29yZDtcbiIKKyAgICAgICAgInZl
YzQgY3ViaWNCbGVuZChmbG9hdCB0LCB2ZWM0IGMwLCB2ZWM0IGMxLCB2ZWM0IGMyLCB2ZWM0IGMz
KSB7XG4iCisgICAgICAgICIgICAgdmVjNCB0cyA9IHZlYzQoMS4wLCB0LCB0ICogdCwgdCAqIHQg
KiB0KTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHJlc3VsdCA9IGNvZWZmaWNpZW50cyAqIHRzO1xu
IgorICAgICAgICAiICAgIHJldHVybiByZXN1bHQudyAqIGMwICsgcmVzdWx0LnogKiBjMSArIHJl
c3VsdC55ICogYzIgKyByZXN1bHQueCAqIGMzO1xuIgorICAgICAgICAifVxuIgorICAgICAgICAi
dm9pZCBtYWluKCkge1xuIgorICAgICAgICAiICAgIHZlYzIgaW1hZ2VDb29yZCA9IHRleENvb3Jk
O1xuIgorICAgICAgICAiICAgIHZlYzIgZiA9IGZyYWN0KGltYWdlQ29vcmQgLyBpbWFnZUluY3Jl
bWVudCkgLSB2ZWMyKDAuNSwgMC41KTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQwMCA9IHRleHR1
cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMigtMSwgLTEpKTtc
biIKKyAgICAgICAgIiAgICB2ZWM0IHQxMCA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCAr
IGltYWdlSW5jcmVtZW50ICogdmVjMiggMCwgLTEpKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQy
MCA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMigg
MSwgLTEpKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQzMCA9IHRleHR1cmUyRChpbWFnZSwgaW1h
Z2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMiwgLTEpKTtcbiIKKyAgICAgICAgIiAg
ICB2ZWM0IHQwID0gY3ViaWNCbGVuZChmLngsIHQwMCwgdDEwLCB0MjAsIHQzMCk7XG4iCisgICAg
ICAgICIgICAgdmVjNCB0MDEgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUlu
Y3JlbWVudCAqIHZlYzIoLTEsIDApKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQxMSA9IHRleHR1
cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMCwgMCkpO1xu
IgorICAgICAgICAiICAgIHZlYzQgdDIxID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsg
aW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAxLCAwKSk7XG4iCisgICAgICAgICIgICAgdmVjNCB0MzEg
PSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoIDIs
IDApKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQxID0gY3ViaWNCbGVuZChmLngsIHQwMSwgdDEx
LCB0MjEsIHQzMSk7XG4iCisgICAgICAgICIgICAgdmVjNCB0MDIgPSB0ZXh0dXJlMkQoaW1hZ2Us
IGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoLTEsIDEpKTtcbiIKKyAgICAgICAg
IiAgICB2ZWM0IHQxMiA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVt
ZW50ICogdmVjMiggMCwgMSkpO1xuIgorICAgICAgICAiICAgIHZlYzQgdDIyID0gdGV4dHVyZTJE
KGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAxLCAxKSk7XG4iCisg
ICAgICAgICIgICAgdmVjNCB0MzIgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFn
ZUluY3JlbWVudCAqIHZlYzIoIDIsIDEpKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQyID0gY3Vi
aWNCbGVuZChmLngsIHQwMiwgdDEyLCB0MjIsIHQzMik7XG4iCisgICAgICAgICIgICAgdmVjNCB0
MDMgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIo
LTEsIDIpKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQxMyA9IHRleHR1cmUyRChpbWFnZSwgaW1h
Z2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMCwgMikpO1xuIgorICAgICAgICAiICAg
IHZlYzQgdDIzID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQg
KiB2ZWMyKCAxLCAyKSk7XG4iCisgICAgICAgICIgICAgdmVjNCB0MzMgPSB0ZXh0dXJlMkQoaW1h
Z2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoIDIsIDIpKTtcbiIKKyAgICAg
ICAgIiAgICB2ZWM0IHQzID0gY3ViaWNCbGVuZChmLngsIHQwMywgdDEzLCB0MjMsIHQzMyk7XG4i
CisgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gY3ViaWNCbGVuZChmLnksIHQwLCB0MSwgdDIs
IHQzKTtcbiIKKyAgICAgICAgIn1cbiI7CisKKyAgICB1bnNpZ25lZCBwcm9ncmFtID0gbG9hZFBy
b2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlLCBmcmFnbWVudFNoYWRlclNvdXJjZSk7
CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBuZXcg
QmljdWJpY1NoYWRlcihjb250ZXh0LCBwcm9ncmFtKTsKK30KKwordm9pZCBCaWN1YmljU2hhZGVy
Ojp1c2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdGV4VHJhbnNmb3JtLCBjb25zdCBmbG9hdCBjb2VmZmljaWVudHNbMTZdLCBjb25zdCBm
bG9hdCBpbWFnZUluY3JlbWVudFsyXSwgZmxvYXQgYWxwaGEpCit7CisgICAgbV9jb250ZXh0LT51
c2VQcm9ncmFtKG1fcHJvZ3JhbSk7CisgICAgZmxvYXQgbWF0cml4WzldOworICAgIGFmZmluZVRv
M3gzKHRyYW5zZm9ybSwgbWF0cml4KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYo
bV9tYXRyaXhMb2NhdGlvbiwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgbWF0cml4LCAxIC8qY291bnQq
Lyk7CisKKyAgICBmbG9hdCB0ZXhNYXRyaXhbOV07CisgICAgYWZmaW5lVG8zeDModGV4VHJhbnNm
b3JtLCB0ZXhNYXRyaXgpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX3RleE1h
dHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCB0ZXhNYXRyaXgsIDEgLypjb3VudCov
KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobV9jb2VmZmljaWVudHNMb2NhdGlv
biwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgY29uc3RfY2FzdDxmbG9hdCAqPihjb2VmZmljaWVudHMp
LCAxIC8qY291bnQqLyk7CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2ltYWdlSW5jcmVt
ZW50TG9jYXRpb24sIGltYWdlSW5jcmVtZW50WzBdLCBpbWFnZUluY3JlbWVudFsxXSk7CisKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX2ltYWdlTG9jYXRpb24sIDApOworICAgIG1fY29udGV4
dC0+dW5pZm9ybTFmKG1fYWxwaGFMb2NhdGlvbiwgYWxwaGEpOworCisgICAgbV9jb250ZXh0LT52
ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMywgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KG1fcG9zaXRpb25Mb2NhdGlvbik7Cit9CisKK30KKworI2VuZGlmCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQmljdWJp
Y1NoYWRlci5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQmljdWJp
Y1NoYWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0JpY3ViaWNTaGFkZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQmljdWJpY1NoYWRlcl9oCisjZGVmaW5lIEJpY3ViaWNTaGFkZXJfaAorCisjaW5jbHVkZSAi
U2hhZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmljdWJpY1NoYWRlciA6
IHB1YmxpYyBTaGFkZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEJpY3ViaWNT
aGFkZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCopOworCisgICAgdm9pZCB1c2UoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNv
bnN0IGZsb2F0IGNvZWZmaWNpZW50c1sxNl0sIGNvbnN0IGZsb2F0IGltYWdlSW5jcmVtZW50WzJd
LCBmbG9hdCBhbHBoYSk7CisKK3ByaXZhdGU6CisgICAgQmljdWJpY1NoYWRlcihHcmFwaGljc0Nv
bnRleHQzRCosIHVuc2lnbmVkIHByb2dyYW0pOworCisgICAgaW50IG1fbWF0cml4TG9jYXRpb247
CisgICAgaW50IG1fdGV4TWF0cml4TG9jYXRpb247CisgICAgaW50IG1fY29lZmZpY2llbnRzTG9j
YXRpb247CisgICAgaW50IG1faW1hZ2VJbmNyZW1lbnRMb2NhdGlvbjsKKyAgICBpbnQgbV9pbWFn
ZUxvY2F0aW9uOworICAgIGludCBtX2FscGhhTG9jYXRpb247CisgICAgaW50IG1fcG9zaXRpb25M
b2NhdGlvbjsKK307CisKK30KKworI2VuZGlmIC8vIEJpY3ViaWNTaGFkZXJfaAoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNT
aGFkZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Db252
b2x1dGlvblNoYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCisKKyNpbmNsdWRlICJDb252b2x1dGlvblNoYWRlci5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJTdHJpbmdFeHRyYXMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDb252b2x1dGlvblNoYWRlcjo6Q29udm9sdXRpb25TaGFkZXIoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0sIGludCBrZXJuZWxXaWR0
aCkKKyAgICA6IFNoYWRlcihjb250ZXh0LCBwcm9ncmFtKQorICAgICwgbV9rZXJuZWxXaWR0aChr
ZXJuZWxXaWR0aCkKKyAgICAsIG1fbWF0cml4TG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW0sICJtYXRyaXgiKSkKKyAgICAsIG1fdGV4TWF0cml4TG9jYXRpb24oY29u
dGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXhNYXRyaXgiKSkKKyAgICAsIG1f
a2VybmVsTG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJrZXJu
ZWwiKSkKKyAgICAsIG1faW1hZ2VMb2NhdGlvbihjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbSwgImltYWdlIikpCisgICAgLCBtX2ltYWdlSW5jcmVtZW50TG9jYXRpb24oY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJpbWFnZUluY3JlbWVudCIpKQorICAgICwg
bV9wb3NpdGlvbkxvY2F0aW9uKGNvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJw
b3NpdGlvbiIpKQoreworfQorCitQYXNzT3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiBDb252b2x1
dGlvblNoYWRlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBpbnQga2VybmVs
V2lkdGgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclJhdyA9CisgICAg
ICAgICIjZGVmaW5lIEtFUk5FTF9XSURUSCAlZFxuIgorICAgICAgICAidW5pZm9ybSBtYXQzIG1h
dHJpeDtcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0MyB0ZXhNYXRyaXg7XG4iCisgICAgICAgICJ1
bmlmb3JtIHZlYzIgaW1hZ2VJbmNyZW1lbnQ7XG4iCisgICAgICAgICJhdHRyaWJ1dGUgdmVjMyBw
b3NpdGlvbjtcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiBpbWFnZUNvb3JkO1xuIgorICAgICAg
ICAidm9pZCBtYWluKCkge1xuIgorICAgICAgICAiICAgIC8vIE9mZnNldCBpbWFnZSBjb29yZHMg
YnkgaGFsZiBvZiBrZXJuZWwgd2lkdGgsIGluIGltYWdlIHRleGVsc1xuIgorICAgICAgICAiICAg
IGdsX1Bvc2l0aW9uID0gdmVjNChtYXRyaXggKiBwb3NpdGlvbiwgMS4wKTtcbiIKKyAgICAgICAg
IiAgICBmbG9hdCBzY2FsZSA9IChmbG9hdChLRVJORUxfV0lEVEgpIC0gMS4wKSAvIDIuMDtcbiIK
KyAgICAgICAgIiAgICBpbWFnZUNvb3JkID0gKHRleE1hdHJpeCAqIHBvc2l0aW9uKS54eSAtIHZl
YzIoc2NhbGUsIHNjYWxlKSAqIGltYWdlSW5jcmVtZW50O1xuIgorICAgICAgICAifVxuIjsKKyAg
ICBjaGFyIHZlcnRleFNoYWRlclNvdXJjZVsxMDI0XTsKKyAgICBzbnByaW50Zih2ZXJ0ZXhTaGFk
ZXJTb3VyY2UsIHNpemVvZih2ZXJ0ZXhTaGFkZXJTb3VyY2UpLCB2ZXJ0ZXhTaGFkZXJSYXcsIGtl
cm5lbFdpZHRoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXJSYXcgPQor
ICAgICAgICAiI2lmZGVmIEdMX0VTXG4iCisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDtcbiIKKyAgICAgICAgIiNlbmRpZlxuIgorICAgICAgICAiI2RlZmluZSBLRVJORUxfV0lEVEgg
JWRcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIGltYWdlO1xuIgorICAgICAgICAidW5p
Zm9ybSBmbG9hdCBrZXJuZWxbS0VSTkVMX1dJRFRIXTtcbiIKKyAgICAgICAgInVuaWZvcm0gdmVj
MiBpbWFnZUluY3JlbWVudDtcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiBpbWFnZUNvb3JkO1xu
IgorICAgICAgICAidm9pZCBtYWluKCkge1xuIgorICAgICAgICAiICAgIHZlYzIgY29vcmQgPSBp
bWFnZUNvb3JkO1xuIgorICAgICAgICAiICAgIHZlYzQgc3VtID0gdmVjNCgwLCAwLCAwLCAwKTtc
biIKKyAgICAgICAgIiAgICBmb3IgKGludCBpID0gMDsgaSA8IEtFUk5FTF9XSURUSDsgaSsrKSB7
XG4iCisgICAgICAgICIgICAgICBzdW0gKz0gdGV4dHVyZTJEKGltYWdlLCBjb29yZCkgKiBrZXJu
ZWxbaV07XG4iCisgICAgICAgICIgICAgICBjb29yZCArPSBpbWFnZUluY3JlbWVudDtcbiIKKyAg
ICAgICAgIiAgICB9XG4iCisgICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gc3VtO1xuIgorICAg
ICAgICAifVxuIjsKKyAgICBjaGFyIGZyYWdtZW50U2hhZGVyU291cmNlWzEwMjRdOworICAgIHNu
cHJpbnRmKGZyYWdtZW50U2hhZGVyU291cmNlLCBzaXplb2YoZnJhZ21lbnRTaGFkZXJTb3VyY2Up
LCBmcmFnbWVudFNoYWRlclJhdywga2VybmVsV2lkdGgpOworCisgICAgdW5zaWduZWQgcHJvZ3Jh
bSA9IGxvYWRQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRlclNvdXJjZSwgZnJhZ21lbnRTaGFk
ZXJTb3VyY2UpOworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG5ldyBDb252b2x1dGlvblNoYWRlcihjb250ZXh0LCBwcm9ncmFtLCBrZXJuZWxXaWR0aCk7
Cit9CisKK3ZvaWQgQ29udm9sdXRpb25TaGFkZXI6OnVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZs
b2F0KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0aCwgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0pCit7
CisgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1fcHJvZ3JhbSk7CisgICAgZmxvYXQgbWF0cml4
WzldOworICAgIGFmZmluZVRvM3gzKHRyYW5zZm9ybSwgbWF0cml4KTsKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm1NYXRyaXgzZnYobV9tYXRyaXhMb2NhdGlvbiwgZmFsc2UgLyp0cmFuc3Bvc2UqLywg
bWF0cml4LCAxIC8qY291bnQqLyk7CisKKyAgICBmbG9hdCB0ZXhNYXRyaXhbOV07CisgICAgYWZm
aW5lVG8zeDModGV4VHJhbnNmb3JtLCB0ZXhNYXRyaXgpOworICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDNmdihtX3RleE1hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCB0ZXhN
YXRyaXgsIDEgLypjb3VudCovKTsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1faW1hZ2VJ
bmNyZW1lbnRMb2NhdGlvbiwgaW1hZ2VJbmNyZW1lbnRbMF0sIGltYWdlSW5jcmVtZW50WzFdKTsK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX2ltYWdlTG9jYXRpb24sIDApOworICAgIGlmIChr
ZXJuZWxXaWR0aCA+IG1fa2VybmVsV2lkdGgpCisgICAgICAgIGtlcm5lbFdpZHRoID0gbV9rZXJu
ZWxXaWR0aDsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobV9rZXJuZWxMb2NhdGlvbiwgY29u
c3RfY2FzdDxmbG9hdCo+KGtlcm5lbCksIGtlcm5lbFdpZHRoKTsKKworICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworCisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOworfQorCit9CisKKyNlbmRpZgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZv
bHV0aW9uU2hhZGVyLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYK
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25T
aGFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvQ29udm9sdXRpb25TaGFkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Db252b2x1dGlvblNoYWRlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDb252b2x1dGlvblNoYWRlcl9oCisjZGVmaW5lIENvbnZvbHV0
aW9uU2hhZGVyX2gKKworI2luY2x1ZGUgIlNoYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENvbnZvbHV0aW9uU2hhZGVyIDogcHVibGljIFNoYWRlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q29udm9sdXRpb25TaGFkZXI+IGNyZWF0ZShHcmFwaGljc0Nv
bnRleHQzRCosIGludCBrZXJuZWxXaWR0aCk7CisKKyAgICB2b2lkIHVzZShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgY29uc3QgZmxv
YXQqIGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoLCBmbG9hdCBpbWFnZUluY3JlbWVudFsyXSk7CisK
K3ByaXZhdGU6CisgICAgQ29udm9sdXRpb25TaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNp
Z25lZCBwcm9ncmFtLCBpbnQga2VybmVsV2lkdGgpOworCisgICAgaW50IG1fa2VybmVsV2lkdGg7
CisgICAgaW50IG1fbWF0cml4TG9jYXRpb247CisgICAgaW50IG1fdGV4TWF0cml4TG9jYXRpb247
CisgICAgaW50IG1fa2VybmVsTG9jYXRpb247CisgICAgaW50IG1faW1hZ2VMb2NhdGlvbjsKKyAg
ICBpbnQgbV9pbWFnZUluY3JlbWVudExvY2F0aW9uOworICAgIGludCBtX3Bvc2l0aW9uTG9jYXRp
b247Cit9OworCit9CisKKyNlbmRpZiAvLyBDb252b2x1dGlvblNoYWRlcl9oCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRp
b25TaGFkZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmgJKHJldmlzaW9uIDgxMjYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCByZXNldChjb25zdCBJbnRTaXplJik7CiAgICAgdm9pZCBiaW5k
KCk7CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgUGxh
dGZvcm0zRE9iamVjdCBjb2xvckJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JCdWZmZXI7
IH0KIAogICAgIC8vIENsZWFyIGFsbCByZXNvdXJjZXMgZnJvbSB0aGlzIG9iamVjdCwgYXMgd2Vs
bCBhcyBjb250ZXh0LiBDYWxsZWQgd2hlbiBjb250ZXh0IGlzIGRlc3Ryb3llZAogICAgIC8vIHRv
IHByZXZlbnQgaW52YWxpZCBhY2Nlc3NlcyB0byB0aGUgcmVzb3VyY2VzLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA4MTI2MSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDEwIEBACiAjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkJp
Y3ViaWNTaGFkZXIuaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbnZvbHV0aW9u
U2hhZGVyLmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAg
LTQzLDYgKzQ2LDcgQEAKICNpbmNsdWRlICJTb2xpZEZpbGxTaGFkZXIuaCIKICNpbmNsdWRlICJU
ZXhTaGFkZXIuaCIKIAorI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAt
NjUsMTUgKzY5LDI2IEBAIFBhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXIK
ICAgICBPd25QdHI8VGV4U2hhZGVyPiB0ZXhTaGFkZXIgPSBUZXhTaGFkZXI6OmNyZWF0ZShjb250
ZXh0LmdldCgpKTsKICAgICBpZiAoIXRleFNoYWRlcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVh
c2UoKSwgc29saWRGaWxsU2hhZGVyLnJlbGVhc2UoKSwgdGV4U2hhZGVyLnJlbGVhc2UoKSkpOwor
ICAgIE93blB0cjxCaWN1YmljU2hhZGVyPiBiaWN1YmljU2hhZGVyID0gQmljdWJpY1NoYWRlcjo6
Y3JlYXRlKGNvbnRleHQuZ2V0KCkpOworICAgIGlmICghYmljdWJpY1NoYWRlcikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+IGNv
bnZvbHV0aW9uU2hhZGVycyA9IGFkb3B0QXJyYXlQdHIobmV3IE93blB0cjxDb252b2x1dGlvblNo
YWRlcj5ba01heEtlcm5lbFdpZHRoXSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTWF4S2Vy
bmVsV2lkdGg7ICsraSkgeworICAgICAgICBjb252b2x1dGlvblNoYWRlcnNbaV0gPSBDb252b2x1
dGlvblNoYWRlcjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCksIGkgKyAxKTsKKyAgICAgICAgaWYgKCFj
b252b2x1dGlvblNoYWRlcnNbaV0pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVh
c2UoKSwgc29saWRGaWxsU2hhZGVyLnJlbGVhc2UoKSwgdGV4U2hhZGVyLnJlbGVhc2UoKSwgYmlj
dWJpY1NoYWRlci5yZWxlYXNlKCksIGNvbnZvbHV0aW9uU2hhZGVycy5yZWxlYXNlKCkpKTsKIH0K
IAotU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8U29saWRGaWxsU2hh
ZGVyPiBzb2xpZEZpbGxTaGFkZXIsIFBhc3NPd25QdHI8VGV4U2hhZGVyPiB0ZXhTaGFkZXIpCitT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+
IHNvbGlkRmlsbFNoYWRlciwgUGFzc093blB0cjxUZXhTaGFkZXI+IHRleFNoYWRlciwgUGFzc093
blB0cjxCaWN1YmljU2hhZGVyPiBiaWN1YmljU2hhZGVyLCBQYXNzT3duQXJyYXlQdHI8T3duUHRy
PENvbnZvbHV0aW9uU2hhZGVyPiA+IGNvbnZvbHV0aW9uU2hhZGVycykKICAgICA6IG1fY29udGV4
dChjb250ZXh0KQogICAgICwgbV9iZ3JhU3VwcG9ydGVkKGZhbHNlKQogICAgICwgbV9xdWFkVmVy
dGljZXMoMCkKICAgICAsIG1fc29saWRGaWxsU2hhZGVyKHNvbGlkRmlsbFNoYWRlcikKICAgICAs
IG1fdGV4U2hhZGVyKHRleFNoYWRlcikKKyAgICAsIG1fYmljdWJpY1NoYWRlcihiaWN1YmljU2hh
ZGVyKQorICAgICwgbV9jb252b2x1dGlvblNoYWRlcnMoY29udm9sdXRpb25TaGFkZXJzKQogICAg
ICwgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzU3VwcG9ydGVkKGZhbHNlKQogewogICAgIGFsbENv
bnRleHRzKCktPmFkZCh0aGlzKTsKQEAgLTM2OSw2ICszODQsMTcgQEAgdm9pZCBTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDo6dXNlVGV4dHVyZQogICAgIG1fdGV4U2hhZGVyLT51c2UodHJhbnNmb3Jt
LCB0ZXhUcmFuc2Zvcm0sIDAsIGFscGhhKTsKIH0KIAordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6dXNlQmljdWJpY1Byb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3JtLCBjb25zdCBmbG9hdCBjb2VmZmlj
aWVudHNbMTZdLCBjb25zdCBmbG9hdCBpbWFnZUluY3JlbWVudFsyXSwgZmxvYXQgYWxwaGEpCit7
CisgICAgbV9iaWN1YmljU2hhZGVyLT51c2UodHJhbnNmb3JtLCB0ZXhUcmFuc2Zvcm0sIGNvZWZm
aWNpZW50cywgaW1hZ2VJbmNyZW1lbnQsIGFscGhhKTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6dXNlQ29udm9sdXRpb25Qcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgY29uc3QgZmxv
YXQqIGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoLCBmbG9hdCBpbWFnZUluY3JlbWVudFsyXSkKK3sK
KyAgICBBU1NFUlQoa2VybmVsV2lkdGggPj0gMSAmJiBrZXJuZWxXaWR0aCA8PSBrTWF4S2VybmVs
V2lkdGgpOworICAgIG1fY29udm9sdXRpb25TaGFkZXJzW2tlcm5lbFdpZHRoIC0gMV0tPnVzZSh0
cmFuc2Zvcm0sIHRleFRyYW5zZm9ybSwga2VybmVsLCBrZXJuZWxXaWR0aCwgaW1hZ2VJbmNyZW1l
bnQpOworfQorCiB2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIo
UGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKIHsKICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKQEAg
LTQxMSw2ICs0MzcsMjAgQEAgdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlTG9vcEJs
aQogICAgIG1fbG9vcEJsaW5uRXh0ZXJpb3JTaGFkZXItPnVzZSh2ZXJ0ZXhPZmZzZXQsIGtsbU9m
ZnNldCwgdHJhbnNmb3JtLCBjb2xvcik7CiB9CiAKK0RyYXdpbmdCdWZmZXIqIFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRPZmZzY3JlZW5CdWZmZXIodW5zaWduZWQgaW5kZXgsIGNvbnN0IElu
dFNpemUmIHNpemUpCit7CisgICAgaWYgKGluZGV4ID49IG1fb2Zmc2NyZWVuQnVmZmVycy5zaXpl
KCkpCisgICAgICAgIG1fb2Zmc2NyZWVuQnVmZmVycy5yZXNpemUoaW5kZXggKyAxKTsKKworICAg
IGlmICghbV9vZmZzY3JlZW5CdWZmZXJzW2luZGV4XSkKKyAgICAgICAgbV9vZmZzY3JlZW5CdWZm
ZXJzW2luZGV4XSA9IG1fY29udGV4dC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcihzaXplKTsKKworICAg
IGlmIChzaXplLndpZHRoKCkgIT0gbV9vZmZzY3JlZW5CdWZmZXJzW2luZGV4XS0+c2l6ZSgpLndp
ZHRoKCkKKyAgICAgICAgfHwgc2l6ZS5oZWlnaHQoKSAhPSBtX29mZnNjcmVlbkJ1ZmZlcnNbaW5k
ZXhdLT5zaXplKCkuaGVpZ2h0KCkpCisgICAgICAgIG1fb2Zmc2NyZWVuQnVmZmVyc1tpbmRleF0t
PnJlc2V0KHNpemUpOworICAgIHJldHVybiBtX29mZnNjcmVlbkJ1ZmZlcnNbaW5kZXhdLmdldCgp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDgxMjYxKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CkBAIC00NSw3ICs0NiwxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBBZmZpbmVUcmFuc2Zvcm07CitjbGFzcyBCaWN1YmljU2hhZGVyOwogY2xhc3MgQ29sb3I7
CitjbGFzcyBDb252b2x1dGlvblNoYWRlcjsKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBG
bG9hdFJlY3Q7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW50U2l6ZTsKQEAgLTEwMSw2ICsx
MDUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVzZUZpbGxTb2xpZFByb2dyYW0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgQ29sb3ImKTsKICAgICB2b2lkIHVzZVRleHR1cmVQcm9ncmFt
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFs
cGhhKTsKKyAgICB2b2lkIHVzZUJpY3ViaWNQcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IGZsb2F0IGNvZWZmaWNpZW50c1sxNl0sIGNv
bnN0IGZsb2F0IGltYWdlSW5jcmVtZW50WzJdLCBmbG9hdCBhbHBoYSk7CisgICAgdm9pZCB1c2VD
b252b2x1dGlvblByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0
aCwgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0pOwogCiAgICAgdm9pZCBzZXRBY3RpdmVUZXh0dXJl
KEdDM0RlbnVtIHRleHR1cmVVbml0KTsKICAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKTsKQEAgLTEyNyw5ICsxMzMsMTAgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBib29sIHVzZUxvb3BCbGlubkZvclBhdGhSZW5kZXJpbmcoKTsKICAg
ICB2b2lkIHVzZUxvb3BCbGlubkludGVyaW9yUHJvZ3JhbSh1bnNpZ25lZCB2ZXJ0ZXhPZmZzZXQs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IENvbG9yJik7CiAgICAgdm9pZCB1c2VMb29w
Qmxpbm5FeHRlcmlvclByb2dyYW0odW5zaWduZWQgdmVydGV4T2Zmc2V0LCB1bnNpZ25lZCBrbG1P
ZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IENvbG9yJik7CisgICAgRHJhd2lu
Z0J1ZmZlciogZ2V0T2Zmc2NyZWVuQnVmZmVyKHVuc2lnbmVkIGluZGV4LCBjb25zdCBJbnRTaXpl
Jik7CiAKIHByaXZhdGU6Ci0gICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8U29saWRGaWxsU2hhZGVyPiwgUGFzc093blB0
cjxUZXhTaGFkZXI+KTsKKyAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+LCBQYXNzT3duUHRy
PFRleFNoYWRlcj4sIFBhc3NPd25QdHI8QmljdWJpY1NoYWRlcj4sIFBhc3NPd25BcnJheVB0cjxP
d25QdHI8Q29udm9sdXRpb25TaGFkZXI+ID4pOwogCiAgICAgLy8gVXNlZCB0byBpbXBsZW1lbnQg
cmVtb3ZlVGV4dHVyZXNGb3IoKSwgc2VlIHRoZSBjb21tZW50IGFib3ZlLgogICAgIHN0YXRpYyBI
YXNoU2V0PFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKj4qIGFsbENvbnRleHRzKCk7CkBAIC0xNDIs
NiArMTQ5LDggQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxTb2xpZEZpbGxTaGFkZXI+IG1fc29s
aWRGaWxsU2hhZGVyOwogICAgIE93blB0cjxUZXhTaGFkZXI+IG1fdGV4U2hhZGVyOworICAgIE93
blB0cjxCaWN1YmljU2hhZGVyPiBtX2JpY3ViaWNTaGFkZXI7CisgICAgT3duQXJyYXlQdHI8T3du
UHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+IG1fY29udm9sdXRpb25TaGFkZXJzOwogCiAgICAgVGV4
dHVyZUhhc2hNYXAgbV90ZXh0dXJlczsKIApAQCAtMTUwLDggKzE1OSwxMyBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXI+IG1fbG9vcEJsaW5uSW50ZXJpb3JT
aGFkZXI7CiAgICAgT3duUHRyPExvb3BCbGlublNvbGlkRmlsbFNoYWRlcj4gbV9sb29wQmxpbm5F
eHRlcmlvclNoYWRlcjsKICAgICBib29sIG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlc1N1cHBvcnRl
ZDsKKworICAgIFdURjo6VmVjdG9yPFJlZlB0cjxEcmF3aW5nQnVmZmVyPiA+IG1fb2Zmc2NyZWVu
QnVmZmVyczsKIH07CiAKK2NvbnN0IGZsb2F0IGtNYXhTaWdtYSA9IDQuMGY7Citjb25zdCBpbnQg
a01heEtlcm5lbFdpZHRoID0gMjU7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lh
LmNwcAkocmV2aXNpb24gODEyNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI1LDYg
KzEwMjUsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KAogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChwbGF0
Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKKyAgICAgICAgR0xFUzJDYW52YXMqIGNhbnZhcyA9
IHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKTsKKyAgICAgICAgY2FudmFzLT5zZXRTaGFk
b3dPZmZzZXQoc2l6ZSk7CisgICAgICAgIGNhbnZhcy0+c2V0U2hhZG93Qmx1cihibHVyRmxvYXQp
OworICAgICAgICBjYW52YXMtPnNldFNoYWRvd0NvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKKyAg
ICAgICAgY2FudmFzLT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKTsKKyAgICB9CisKICAgICAvLyBEZXRlY3Qgd2hlbiB0aGVyZSdzIG5v
IGVmZmVjdGl2ZSBzaGFkb3cgYW5kIGNsZWFyIHRoZSBsb29wZXIuCiAgICAgaWYgKCFzaXplLndp
ZHRoKCkgJiYgIXNpemUuaGVpZ2h0KCkgJiYgIWJsdXJGbG9hdCkgewogICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2V0RHJhd0xvb3BlcigwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcAkocmV2aXNpb24gODEyNjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDMsOCAr
NzAzLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjphcHBseUFudGlBbGlhcwogCiBib29s
IFBsYXRmb3JtQ29udGV4dFNraWE6OmNhbkFjY2VsZXJhdGUoKSBjb25zdAogewotICAgIHJldHVy
biAhbV9zdGF0ZS0+bV9maWxsU2hhZGVyIC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIGZpbGwg
Z3JhZGllbnQgb3IgcGF0dGVybi4KLSAgICAgICAgJiYgIW1fc3RhdGUtPm1fbG9vcGVyOyAvLyBD
YW4ndCBhY2NlbGVyYXRlIHdpdGggYSBzaGFkb3cuCisgICAgcmV0dXJuICFtX3N0YXRlLT5tX2Zp
bGxTaGFkZXI7IC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIGZpbGwgZ3JhZGllbnQgb3IgcGF0
dGVybi4KIH0KIAogYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjYW52YXNDbGlwQXBwbGllZCgp
IGNvbnN0CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTI2MSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTAzLTE2ICBTdGVwaGVuIFdo
aXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIENhbnZhczJEIEdQVSBhY2NlbGVyYXRpb24gc2hvdWxk
IHN1cHBvcnQgc2hhZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTY0NzYKKworICAgICAgICAqIGZhc3QvY2FudmFzL3NjcmlwdC10ZXN0cy9jYW52
YXMtdHJhbnNmb3Jtcy1maWxsUmVjdC1zaGFkb3cuanM6CisgICAgICAgIChzaG91bGRCZUFyb3Vu
ZCk6CisgICAgICAgIFdpZGVuIHRoZSB0aHJlc2hvbGQgZm9yIHRoaXMgdGVzdCwgd2hpY2ggZG9l
c24ndCBzZWVtIHRvIGFsbG93IGZvcgorICAgICAgICBhIHRydWUgR2F1c3NpYW4gYmx1ciBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQ6CisgICAgICAgIFVwZGF0ZSBzb21lIHRlc3RzIHdoaWNoIGFyZSBub3cgcGFzc2luZyBv
biBHUFUsIGFuZCBzb21lIHdoaWNoIHRpbWUgb3V0IAorICAgICAgICBkdWUgdG8gTWVzYSBzbG93
bmVzcy4KKwogMjAxMS0wMy0xNiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgTW9yZSBjbGVhbnVwIG9mIGV4cGVjdGVkIHJlc3VsdHMgZmlsZXMgZm9y
IHRleHQgY29tYmluZSB0ZXN0cyBmcm9tIHI4MTI1NS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3NjcmlwdC10ZXN0cy9jYW52YXMtdHJhbnNmb3Jtcy1maWxsUmVjdC1zaGFkb3cuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRlc3RzL2NhbnZh
cy10cmFuc2Zvcm1zLWZpbGxSZWN0LXNoYWRvdy5qcwkocmV2aXNpb24gODEyNjEpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvY2FudmFzLXRyYW5zZm9ybXMtZmlsbFJl
Y3Qtc2hhZG93LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw3ICsxOSw3IEBAIGZ1bmN0aW9uIHNo
b3VsZEJlQXJvdW5kKGEsIGIpCiAgICAgICAgIGV2YWxBID0gZTsKICAgICB9CiAKLSAgICBpZiAo
TWF0aC5hYnMoZXZhbEEgLSBiKSA8IDEwKQorICAgIGlmIChNYXRoLmFicyhldmFsQSAtIGIpIDwg
MjApCiAgICAgICAgIHByaW50KCJQQVNTICIgKyBhICsgIiBpcyBhcm91bmQgIiArIGIgLCAiZ3Jl
ZW4iKQogICAgIGVsc2UKICAgICAgICAgcHJpbnQoIkZBSUwgIiArIGEgKyAiIGlzIG5vdCBhcm91
bmQgIiArIGIgKyAiIChhY3R1YWw6ICIgKyBldmFsQSArICIpIiwgInJlZCIpOwpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4
dAkocmV2aXNpb24gODEyNjEpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0
X2V4cGVjdGF0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2NjksNyArMTY2OSw3IEBAIEJV
R0NSMjc1NTEgV0lOIDogZmFzdC9jc3Mvc2hhZG93LW11bHRpcGwKIC8vIFdlYktpdCBtZXJnZSA1
MDc1Njo1MDgyMCwgcG9zc2libHkgZHVlIHRvIFdlYktpdCByNTA4MDgvcjUwNzg2IGFuZCBDaHJv
bWl1bSByMzE3MTUKIEJVR0NSMjc1NTMgV0lOIDogZmFzdC90ZXh0L2F0c3VpLXBhcnRpYWwtc2Vs
ZWN0aW9uLmh0bWwgPSBJTUFHRQogCi1CVUdDUjIyNzAwIFdJTiBMSU5VWCA6IGZhc3QvY2FudmFz
L2NhbnZhcy1zaGFkb3cuaHRtbCA9IFRFWFQKK0JVR0NSMjI3MDAgQ1BVIFdJTiBMSU5VWCA6IGZh
c3QvY2FudmFzL2NhbnZhcy1zaGFkb3cuaHRtbCA9IFRFWFQKIAogLy8gRmFpbHVyZXMgZnJvbSBt
ZXJnZSA1MDk3Mjo1MTA0MgogLy8gVGhlIHRlc3QgcmVxdWlyZXMgRFJUL1Rlc3QgU2hlbGwgdG8g
c3VwcG9ydCBlcnJvciBwYWdlIGhhbmRsaW5nLgpAQCAtMjU2MCw3ICsyNTYwLDcgQEAgQlVHQ1I2
MTczOSBXSU4gTElOVVggREVCVUcgOiBhbmltYXRpb25zLwogLy8gTmV3IHRlc3RzIGFkZGVkIHdp
dGggaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNzI0NzIgYW5kIGZ1cnRoZXIuCiAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxOTgyIGZvciBt
b3JlIGluZm8uCiBCVUdXSzUyNTA5IDogc3ZnL2Nzcy9yZWN0LWdyYWRpZW50LXN0cm9rZS1zaGFk
b3cuc3ZnID0gSU1BR0UKLUJVR0NSNjM5MjEgTElOVVggV0lOIDogZmFzdC9jYW52YXMvY2FudmFz
LWZpbGxQYXRoLXNoYWRvdy5odG1sID0gVEVYVAorQlVHQ1I2MzkyMSBDUFUgTElOVVggV0lOIDog
ZmFzdC9jYW52YXMvY2FudmFzLWZpbGxQYXRoLXNoYWRvdy5odG1sID0gVEVYVAogQlVHQ1I2Mzky
MSBDUFUgTElOVVggV0lOIDogZmFzdC9jYW52YXMvY2FudmFzLWZpbGxQYXRoLWdyYWRpZW50LXNo
YWRvdy5odG1sID0gVEVYVAogQlVHQ1I2MzkyMSBDUFUgTElOVVggV0lOIDogZmFzdC9jYW52YXMv
Y2FudmFzLWZpbGxQYXRoLXBhdHRlcm4tc2hhZG93Lmh0bWwgPSBURVhUCiBCVUdDUjYzOTIxIENQ
VSBMSU5VWCBXSU4gOiBmYXN0L2NhbnZhcy9jYW52YXMtZmlsbFBhdGgtYWxwaGEtc2hhZG93Lmh0
bWwgPSBURVhUCkBAIC0yNTcxLDYgKzI1NzEsNyBAQCBCVUdDUjYzOTIxIEdQVSBMSU5VWCBXSU4g
OiBmYXN0L2NhbnZhcy9jCiBCVUdDUjYzOTIxIEdQVSBMSU5VWCBXSU4gOiBmYXN0L2NhbnZhcy9j
YW52YXMtZmlsbFBhdGgtYWxwaGEtc2hhZG93Lmh0bWwgPSBURVhUIFRJTUVPVVQKIEJVR0NSNjM5
MjEgR1BVIExJTlVYIFdJTiA6IGZhc3QvY2FudmFzL2NhbnZhcy1zdHJva2VSZWN0LWFscGhhLXNo
YWRvdy5odG1sID0gVEVYVCBUSU1FT1VUCiBCVUdDUjYzOTIxIEdQVSBMSU5VWCBXSU4gOiBmYXN0
L2NhbnZhcy9jYW52YXMtc3Ryb2tlUGF0aC1hbHBoYS1zaGFkb3cuaHRtbCA9IFRFWFQgVElNRU9V
VAorQlVHV0s1MjUwOSBHUFUgTElOVVggV0lOIDogZmFzdC9jYW52YXMvY2FudmFzLXN0cm9rZVJl
Y3QtZ3JhZGllbnQtc2hhZG93Lmh0bWwgPSBURVhUIFRJTUVPVVQKIEJVR1dLNTU0MzYgTElOVVgg
V0lOIDogZmFzdC9jYW52YXMvY2FudmFzLXN0cm9rZVBhdGgtZ3JhZGllbnQtc2hhZG93Lmh0bWwg
PSBURVhUIFRJTUVPVVQKIEJVR1dLNTI1MDkgTElOVVggV0lOIDogZmFzdC9jYW52YXMvY2FudmFz
LXN0cm9rZVJlY3QtZ3JhZGllbnQtc2hhZG93Lmh0bWwgPSBURVhUIFRJTUVPVVQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85981</attachid>
            <date>2011-03-16 14:47:43 -0700</date>
            <delta_ts>2011-03-16 15:49:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56476-20110316174741.patch</filename>
            <type>text/plain</type>
            <size>60452</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjc5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA5IEBACisyMDExLTAzLTE2ICBTdGVwaGVu
IFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBHUFUtYWNjZWxlcmF0ZWQgc2hh
ZG93cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2
NDc2CisKKyAgICAgICAgRm9yIGhhcmQgc2hhZG93cywgd2Ugc2ltcGx5IG9mZnNldCB0aGUgQ1RN
IGFuZCBkcmF3IGluIHRoZSBzaGFkb3cKKyAgICAgICAgY29sb3IuICBGb3Igc29mdCBzaGFkb3dz
LCB3ZSB1c2UgYSBzZXBhcmFibGUgR2F1c3NpYW4gY29udm9sdXRpb24sCisgICAgICAgIHdpdGgg
YSBiaWxpbmVhciBkb3duc2FtcGxlIGFuZCBNaXRjaGVsbC1OZXRyYXZhbGkgdXBzYW1wbGUgaW4g
b3JkZXIgdG8KKyAgICAgICAgcHJlc2VydmUgcXVhbGl0eS4KKworICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgQWRkIEJpY3ViaWNTaGFkZXIgYW5kIENvbnZvbHV0aW9uU2hhZGVyIHRv
IHRoZSBidWlsZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6U3RhdGU6OlN0YXRlKToK
KyAgICAgICAgQWRkIHNoYWRvdy1yZWxhdGVkIG1lbWJlcnMgdG8gdGhlIEdMRVMyQ2FudmFzOjpT
dGF0ZQorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OlN0YXRlOjpzaGFkb3dBY3RpdmUp
OgorICAgICAgICBBZGQgYSBoZWxwZXIgZnVuY3Rpb24gdG8ga25vdyBpZiBzaGFkb3dzIGFyZSBh
Y3RpdmUuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzY2lzc29yQ2xlYXIpOgorICAgICAgICBSZWZhY3Rv
ciB0aGUgc2Npc3NvciBjbGVhcmluZyBmdW5jdGlvbiBvdXQgb2YgY2xlYXJSZWN0KCkuCisgICAg
ICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZmlsbFBhdGgpOgorICAgICAgICBBZGQgaG9vayBm
b3Igc2hhZG93IHJlbmRlcmluZyBpbiBwYXRocy4gIEJpbmQgZnJhbWVidWZmZXIgYXQgdGhpcyBs
ZXZlbC4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpmaWxsUmVjdCk6CisgICAgICAg
IEFkZCBob29rIGZvciBzaGFkb3cgcmVuZGVyaW5nIGluIHJlY3RzLiAgQmluZCBmcmFtZWJ1ZmZl
ciBhdCB0aGlzIGxldmVsLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZpbGxSZWN0
SW50ZXJuYWwpOgorICAgICAgICBSZW5hbWUgZmlsbFJlY3QoKSAtPiBmaWxsUmVjdEludGVybmFs
KCksIHdoaWNoIGRvZXMgYmluZCBpdHMgdmVydGV4IAorICAgICAgICBidWZmZXIsIGJ1dCBkb2Vz
IG5vdCBiaW5kIHRoZSBmcmFtZWJ1ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFz
OjpzZXRTaGFkb3dDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6c2V0U2hh
ZG93T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzZXRTaGFkb3dCbHVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpzZXRTaGFkb3dzSWdub3JlVHJhbnNm
b3Jtcyk6CisgICAgICAgIEltcGxlbWVudCBncmFwaGljc0NvbnRleHQtc3R5bGUgc2V0dGVycyBm
b3Igc2hhZG93IHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xp
cFBhdGgpOgorICAgICAgICBDYWxsIGZpbGxQYXRoSW50ZXJuYWwoKSwgbm90IGZpbGxQYXRoKCku
CisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6cmVzdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCk6CisgICAgICAgIEJpbmQgdGhlIGZy
YW1lYnVmZmVyIGF0IHRoaXMgbGV2ZWwuICBEbyBub3QgYmluZCB2ZXJ0aWNlcyBoZXJlICh3aWxs
CisgICAgICAgIGJlIGRvbmUgaW4gZHJhd1RleHR1cmVkUXVhZCkuCisgICAgICAgIChXZWJDb3Jl
OjpHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdFRpbGUpOgorICAgICAgICBkcmF3UXVhZCgp
IC0+IGRyYXdUZXh0dXJlZFF1YWQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpj
b252b2x2ZVJlY3QpOgorICAgICAgICBJbXBsZW1lbnQgb25lIHBhc3Mgb2YgYSBjb252b2x1dGlv
biBmaWx0ZXIgKFggb3IgWSkuCisgICAgICAgIChXZWJDb3JlOjpnYXVzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpidWlsZEtlcm5lbCk6CisgICAgICAgIFNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBi
dWlsZCBhIEdhdXNzaWFuIGNvbnZvbHV0aW9uIGtlcm5lbC4KKyAgICAgICAgKFdlYkNvcmU6OkdM
RVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRRdWFkKToKKyAgICAgICAgUmVuYW1lIGRyYXdRdWFkKCkg
LT4gZHJhd1RleHR1cmVkUXVhZCgpLCB0byBiZSBtb3JlIGNsZWFyLiAgRG8gbm90CisgICAgICAg
IGJpbmQgdGhlIGZyYW1lYnVmZmVyIGF0IHRoaXMgbGV2ZWwgKGl0IHdpbGwgYmUgZG9uZSBoaWdo
ZXIpLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFF1YWRNaXRj
aGVsbCk6CisgICAgICAgIEltcGxlbWVudCBNaXRjaGVsbC1OZXRyYXZhbGkgYmljdWJpYyBzYW1w
bGluZywgdXNpbmcgQmljdWJpY1NoYWRlci4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFz
OjpmaWxsUGF0aEludGVybmFsKToKKyAgICAgICAgUmVuYW1lIGZpbGxQYXRoKCkgLT4gZmlsbFBh
dGhJbnRlcm5hbCgpLCB3aGljaCBkb2VzIHVzZSBxdWFkIHZlcnRpY2VzLAorICAgICAgICBidXQg
ZG9lcyBub3QgYmluZCB0aGUgZnJhbWVidWZmZXIgb3Igc2V0IHRoZSBjb21wb3NpdGluZyBtb2Rl
LgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZsaXBSZWN0KToKKyAgICAgICAgSW1w
bGVtZW50IGEgaGVscGVyIGZ1bmN0aW9uIHRvIGZsaXAgYSByZWN0YW5nbGUgaW4gWSB3aXRoaW4g
dGhlIGNhbnZhcy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpjbGVhckJvcmRlcnMp
OgorICAgICAgICBJbXBsZW1lbnQgYSBoZWxwZXIgZnVuY3Rpb24gdG8gY2xlYXIgYW4gbi1waXhl
bCBib3JkZXIgYXJvdW5kIGEgcmVjdC4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpi
ZWdpblNoYWRvd0RyYXcpOgorICAgICAgICBTZXR1cCBiZWZvcmUgZHJhd2luZyBhIHByaW1pdGl2
ZSdzIHNoYWRvdzogIGZvciBoYXJkIHNoYWRvd3MsIGp1c3QKKyAgICAgICAgb2Zmc2V0IHRoZSBD
VE0gYnkgdGhlIHNoYWRvdyBvZmZzZXQuICBGb3Igc29mdCBzaGFkb3dzLCBiaW5kIHRvIGFuCisg
ICAgICAgIG9mZnNjcmVlbiBEcmF3aW5nQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJD
YW52YXM6OmVuZFNoYWRvd0RyYXcpOgorICAgICAgICBUZWFyLWRvd24gYWZ0ZXIgZHJhd2luZyBh
IHByaW1pdGl2ZSdzIHNoYWRvdzogIGZvciBoYXJkIHNoYWRvd3MsIGp1c3QKKyAgICAgICAgcmVz
dG9yZSB0aGUgQ1RNLiAgRm9yIHNvZnQgc2hhZG93cywgZG93bnNhbXBsZSAoaWYgbmVjZXNzYXJ5
KSwgdGhlbgorICAgICAgICBibHVyIGluIFgsIGJsdXIgaW4gWSwgdXBzYW1wbGUgaWYgbmVjZXNz
YXJ5KS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpCaWN1YmljU2hhZGVyOjpCaWN1YmljU2hhZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpY3ViaWNTaGFkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpCaWN1YmljU2hhZGVyOjp1c2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9C
aWN1YmljU2hhZGVyLmg6IEFkZGVkLgorICAgICAgICBJbXBsZW1lbnQgYSBiaWN1YmljIGltYWdl
IGZpbHRlcmluZyBzaGFkZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZv
bHV0aW9uU2hhZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb252b2x1dGlvblNo
YWRlcjo6Q29udm9sdXRpb25TaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udm9sdXRpb25T
aGFkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb252b2x1dGlvblNoYWRlcjo6dXNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaDog
QWRkZWQuCisgICAgICAgIEltcGxlbWVudCBhIDEtZGltZW5zaW9uYWwgY29udm9sdXRpb24gc2hh
ZGVyLiAgSW4gb3JkZXIgdG8gbWluaW1pemUKKyAgICAgICAgdGV4dHVyZSBzYW1wbGVzLCB0aGlz
IHNoYWRlciBpcyBwYXJhbWV0ZXJpemVkIGF0IGNvbXBpbGUgdGltZSBieSB0aGUKKyAgICAgICAg
d2lkdGggb2YgdGhlIGNvbnZvbHV0aW9uIGtlcm5lbC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZl
cjo6Y29sb3JCdWZmZXIpOgorICAgICAgICBBZGQgYW4gYWNjZXNzb3IgdG8gcmV0cmlldmUgYSBE
cmF3aW5nQnVmZmVyJ3MgdGV4dHVyZSBJRC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZUJpY3ViaWNQcm9ncmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp1c2VDb252b2x1dGlvblByb2dyYW0p
OgorICAgICAgICBDcmVhdGUgQmljdWJpY1NoYWRlciBhbmQgY01heEtlcm5lbFdpZHRoIENvbnZv
bHV0aW9uU2hhZGVyJ3MgKG9uZSBmb3IKKyAgICAgICAgZWFjaCBwb3NzaWJsZSBrZXJuZWwgd2lk
dGgpLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldE9mZnNj
cmVlbkJ1ZmZlcik6CisgICAgICAgIEltcGxlbWVudCBhIHNpbXBsZSBjYWNoZSBvZiBvZmZzY3Jl
ZW4gRHJhd2luZ0J1ZmZlcnMsIGludGVnZXItaW5kZXhlZC4KKyAgICAgICAgVGhpcyBpcyBkb25l
IHRvIG1pbmltaXplIHRoZSBWUkFNIHVzYWdlOiAgb25seSAyIGJ1ZmZlcnMgYXJlIHVzZWQgZm9y
CisgICAgICAgIGFsbCBjYW52YXNlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgQWRkIGJpY3ViaWMgYW5kIGNvbnZv
bHV0aW9uIHNoYWRlciBtZW1iZXJzLCBhbmQgdXNlWFhYKCkgZnVuY3Rpb25zLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAg
SG9vayBpbnRvIEdyYXBoaWNzQ29udGV4dFNraWEncyBwbGF0Zm9ybSBzaGFkb3cgc2V0dGVycyB0
byBzZXQKKyAgICAgICAgcGFyYW1ldGVycyBvbiBHTEVTMkNhbnZhcy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6Y2FuQWNjZWxlcmF0ZSk6CisgICAgICAgIFJlbW92
ZSBzaGFkb3dzIChsb29wZXJzKSBmcm9tIHRoZSBsaXN0IG9mIHRoaW5ncyB3ZSBjYW4ndCBhY2Nl
bGVyYXRlLgorCiAyMDExLTAzLTE2ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBDaHJvbWl1bSBMZW9wYXJkIGJ1aWxkIGZpeCBhdHRlbXB0LgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkocmV2aXNpb24gODEyNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHdvcmtpbmcgY29weSkKQEAgLTM0MjksNiArMzQyOSwxMCBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2Rl
RnJlZVR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9T
aW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvQmljdWJpY1NoYWRlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvQ29udm9sdXRpb25TaGFkZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2
aXNpb24gODEyNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HTEVTMkNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDI2ICs2NSwzOCBAQCB0eXBl
ZGVmIFdURjo6VmVjdG9yPGRvdWJsZT4gRG91YmxlVmVjdG9yCiBzdHJ1Y3QgR0xFUzJDYW52YXM6
OlN0YXRlIHsKICAgICBTdGF0ZSgpCiAgICAgICAgIDogbV9maWxsQ29sb3IoMCwgMCwgMCwgMjU1
KQorICAgICAgICAsIG1fc2hhZG93Q29sb3IoMCwgMCwgMCwgMCkKICAgICAgICAgLCBtX2FscGhh
KDEuMGYpCiAgICAgICAgICwgbV9jb21wb3NpdGVPcChDb21wb3NpdGVTb3VyY2VPdmVyKQogICAg
ICAgICAsIG1fY2xpcHBpbmdFbmFibGVkKGZhbHNlKQorICAgICAgICAsIG1fc2hhZG93T2Zmc2V0
KDAsIDApCisgICAgICAgICwgbV9zaGFkb3dCbHVyKDApCisgICAgICAgICwgbV9zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcyhmYWxzZSkKICAgICB7CiAgICAgfQogICAgIFN0YXRlKGNvbnN0IFN0YXRl
JiBvdGhlcikKICAgICAgICAgOiBtX2ZpbGxDb2xvcihvdGhlci5tX2ZpbGxDb2xvcikKKyAgICAg
ICAgLCBtX3NoYWRvd0NvbG9yKG90aGVyLm1fc2hhZG93Q29sb3IpCiAgICAgICAgICwgbV9hbHBo
YShvdGhlci5tX2FscGhhKQogICAgICAgICAsIG1fY29tcG9zaXRlT3Aob3RoZXIubV9jb21wb3Np
dGVPcCkKICAgICAgICAgLCBtX2N0bShvdGhlci5tX2N0bSkKICAgICAgICAgLCBtX2NsaXBwaW5n
UGF0aHMoKSAvLyBEb24ndCBjb3B5OyBjbGlwcGluZyBwYXRocyBhcmUgdHJhY2tlZCBwZXItc3Rh
dGUuCiAgICAgICAgICwgbV9jbGlwcGluZ0VuYWJsZWQob3RoZXIubV9jbGlwcGluZ0VuYWJsZWQp
CisgICAgICAgICwgbV9zaGFkb3dPZmZzZXQob3RoZXIubV9zaGFkb3dPZmZzZXQpCisgICAgICAg
ICwgbV9zaGFkb3dCbHVyKG90aGVyLm1fc2hhZG93Qmx1cikKKyAgICAgICAgLCBtX3NoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKG90aGVyLm1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCiAgICAgewog
ICAgIH0KICAgICBDb2xvciBtX2ZpbGxDb2xvcjsKKyAgICBDb2xvciBtX3NoYWRvd0NvbG9yOwog
ICAgIGZsb2F0IG1fYWxwaGE7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcDsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CiAgICAgV1RGOjpWZWN0b3I8UGF0aD4gbV9jbGlw
cGluZ1BhdGhzOwogICAgIGJvb2wgbV9jbGlwcGluZ0VuYWJsZWQ7CisgICAgRmxvYXRTaXplIG1f
c2hhZG93T2Zmc2V0OworICAgIGZsb2F0IG1fc2hhZG93Qmx1cjsKKyAgICBib29sIG1fc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM7CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwcGx5aW5n
IHRoZSBzdGF0ZSdzIGFscGhhIHZhbHVlIHRvIHRoZSBnaXZlbiBpbnB1dAogICAgIC8vIGNvbG9y
IHRvIHByb2R1Y2UgYSBuZXcgb3V0cHV0IGNvbG9yLiBUaGUgbG9naWMgaXMgdGhlIHNhbWUgYXMK
QEAgLTEwMCw3ICsxMTIsMTAgQEAgc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0ZSB7CiAgICAgICAg
IGludCBhID0gKGMuYWxwaGEoKSAqIHMpID4+IDg7CiAgICAgICAgIHJldHVybiBDb2xvcihjLnJl
ZCgpLCBjLmdyZWVuKCksIGMuYmx1ZSgpLCBhKTsKICAgICB9Ci0KKyAgICBib29sIHNoYWRvd0Fj
dGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zaGFkb3dDb2xvci5hbHBoYSgp
ID4gMCAmJiAobV9zaGFkb3dCbHVyIHx8IG1fc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOworICAgIH0KIH07CiAKIHN0YXRpYyBpbmxpbmUgRmxvYXRQb2lu
dCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludCYgZiwgZmxvYXQgc2NhbGUpCkBAIC0xOTQsMTEg
KzIwOSw3IEBAIHZvaWQgR0xFUzJDYW52YXM6OmNsZWFyUmVjdChjb25zdCBGbG9hdFIKIHsKICAg
ICBiaW5kRnJhbWVidWZmZXIoKTsKICAgICBpZiAobV9zdGF0ZS0+bV9jdG0uaXNJZGVudGl0eSgp
ICYmICFtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCkgewotICAgICAgICBtX2NvbnRleHQtPnNj
aXNzb3IocmVjdC54KCksIG1fc2l6ZS5oZWlnaHQoKSAtIHJlY3QuaGVpZ2h0KCkgLSByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgICAgIG1fY29udGV4dC0+
Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgICAgIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICAgICAgc2Npc3Nv
ckNsZWFyKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBzYXZlKCk7CiAgICAgICAgIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDbGVhcik7CkBAIC0yMDcsMzUgKzIxOCw2NCBAQCB2b2lkIEdMRVMyQ2Fu
dmFzOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSCiAgICAgfQogfQogCit2b2lkIEdMRVMyQ2FudmFz
OjpzY2lzc29yQ2xlYXIoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCkKK3sKKyAgICBpbnQgaW50WCA9IHN0YXRpY19jYXN0PGludD4oeCArIDAuNWYpOworICAgIGlu
dCBpbnRZID0gc3RhdGljX2Nhc3Q8aW50Pih5ICsgMC41Zik7CisgICAgaW50IGludFdpZHRoID0g
c3RhdGljX2Nhc3Q8aW50Pih4ICsgd2lkdGggKyAwLjVmKSAtIGludFg7CisgICAgaW50IGludEhl
aWdodCA9IHN0YXRpY19jYXN0PGludD4oeSArIGhlaWdodCArIDAuNWYpIC0gaW50WTsKKyAgICBt
X2NvbnRleHQtPnNjaXNzb3IoaW50WCwgbV9zaXplLmhlaWdodCgpIC0gaW50SGVpZ2h0IC0gaW50
WSwgaW50V2lkdGgsIGludEhlaWdodCk7CisgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKENvbG9y
KFJHQkEzMigwKSkpOworICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0JVRkZFUl9CSVQpOworICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKTsKK30KKwogdm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKICAgICBtX2NvbnRleHQtPmFw
cGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7CiAgICAgYXBwbHlD
bGlwcGluZyhtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCk7Ci0gICAgZmlsbFBhdGgocGF0aCwg
bV9zdGF0ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5tX2ZpbGxDb2xvcikpOworCisgICAgaWYgKG1f
c3RhdGUtPnNoYWRvd0FjdGl2ZSgpKSB7CisgICAgICAgIGJlZ2luU2hhZG93RHJhdygpOworICAg
ICAgICBmaWxsUGF0aEludGVybmFsKHBhdGgsIG1fc3RhdGUtPm1fc2hhZG93Q29sb3IpOworICAg
ICAgICBlbmRTaGFkb3dEcmF3KHBhdGguYm91bmRpbmdSZWN0KCkpOworICAgIH0KKyAgICBmaWxs
UGF0aEludGVybmFsKHBhdGgsIG1fc3RhdGUtPmFwcGx5QWxwaGEobV9zdGF0ZS0+bV9maWxsQ29s
b3IpKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKKyAgICBi
aW5kRnJhbWVidWZmZXIoKTsKICAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3Io
bV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7CiAgICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5tX2Ns
aXBwaW5nRW5hYmxlZCk7Ci0gICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKIAorICAg
IGlmIChtX3N0YXRlLT5zaGFkb3dBY3RpdmUoKSkgeworICAgICAgICBiZWdpblNoYWRvd0RyYXco
KTsKKyAgICAgICAgZmlsbFJlY3RJbnRlcm5hbChyZWN0LCBtX3N0YXRlLT5tX3NoYWRvd0NvbG9y
KTsKKyAgICAgICAgZW5kU2hhZG93RHJhdyhyZWN0KTsKKyAgICB9CisgICAgZmlsbFJlY3RJbnRl
cm5hbChyZWN0LCBjb2xvcik7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBmaWxsUmVjdChyZWN0LCBtX3N0YXRlLT5hcHBseUFs
cGhhKG1fc3RhdGUtPm1fZmlsbENvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7Cit9CisKK3Zv
aWQgR0xFUzJDYW52YXM6OmZpbGxSZWN0SW50ZXJuYWwoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCit7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBN
YXRyaXgpOwogICAgIG1hdHJpeCAqPSBtX3N0YXRlLT5tX2N0bTsKICAgICBtYXRyaXgudHJhbnNs
YXRlKHJlY3QueCgpLCByZWN0LnkoKSk7CiAgICAgbWF0cml4LnNjYWxlKHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CiAKKyAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogICAg
IG1fY29udGV4dC0+dXNlRmlsbFNvbGlkUHJvZ3JhbShtYXRyaXgsIGNvbG9yKTsKLQotICAgIGJp
bmRGcmFtZWJ1ZmZlcigpOwogICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRl
eHQzRDo6VFJJQU5HTEVfU1RSSVAsIDAsIDQpOwogfQogCi12b2lkIEdMRVMyQ2FudmFzOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgZmlsbFJlY3QocmVjdCwgbV9zdGF0
ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5tX2ZpbGxDb2xvciksIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwotfQotCiB2b2lkIEdMRVMyQ2FudmFzOjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgbV9zdGF0ZS0+bV9maWxsQ29sb3IgPSBj
b2xvcjsKQEAgLTI0Niw2ICsyODYsMjYgQEAgdm9pZCBHTEVTMkNhbnZhczo6c2V0QWxwaGEoZmxv
YXQgYWxwaGEpCiAgICAgbV9zdGF0ZS0+bV9hbHBoYSA9IGFscGhhOwogfQogCit2b2lkIEdMRVMy
Q2FudmFzOjpzZXRTaGFkb3dDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UpCit7
CisgICAgbV9zdGF0ZS0+bV9zaGFkb3dDb2xvciA9IGNvbG9yOworfQorCit2b2lkIEdMRVMyQ2Fu
dmFzOjpzZXRTaGFkb3dPZmZzZXQoY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCit7CisgICAgbV9z
dGF0ZS0+bV9zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OnNl
dFNoYWRvd0JsdXIoZmxvYXQgc2hhZG93Qmx1cikKK3sKKyAgICBtX3N0YXRlLT5tX3NoYWRvd0Js
dXIgPSBzaGFkb3dCbHVyOworfQorCit2b2lkIEdMRVMyQ2FudmFzOjpzZXRTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQoreworICAgIG1fc3RhdGUt
Pm1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKK30K
Kwogdm9pZCBHTEVTMkNhbnZhczo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAg
bV9zdGF0ZS0+bV9jdG0udHJhbnNsYXRlKHgsIHkpOwpAQCAtMjc4LDcgKzMzOCw3IEBAIHZvaWQg
R0xFUzJDYW52YXM6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHAKICAgICBiZWdpblN0ZW5jaWxEcmF3
KCk7CiAgICAgLy8gUmVkIGlzIHVzZWQgc28gd2UgY2FuIHNlZSBpdCBpZiBpdCBlbmRzIHVwIGlu
IHRoZSBjb2xvciBidWZmZXIuCiAgICAgQ29sb3IgcmVkKDI1NSwgMCwgMCwgMjU1KTsKLSAgICBm
aWxsUGF0aChwYXRoLCByZWQpOworICAgIGZpbGxQYXRoSW50ZXJuYWwocGF0aCwgcmVkKTsKICAg
ICBtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHMuYXBwZW5kKHBhdGgpOwogICAgIG1fc3RhdGUtPm1f
Y2xpcHBpbmdFbmFibGVkID0gdHJ1ZTsKIH0KQEAgLTMxMSw3ICszNzEsNyBAQCB2b2lkIEdMRVMy
Q2FudmFzOjpyZXN0b3JlKCkKICAgICAgICAgICAgIGZvciAocGF0aEl0ZXIgPSBjbGlwcGluZ1Bh
dGhzLmJlZ2luKCk7IHBhdGhJdGVyIDwgY2xpcHBpbmdQYXRocy5lbmQoKTsgKytwYXRoSXRlcikg
ewogICAgICAgICAgICAgICAgIC8vIFJlZCBpcyB1c2VkIHNvIHdlIGNhbiBzZWUgaXQgaWYgaXQg
ZW5kcyB1cCBpbiB0aGUgY29sb3IgYnVmZmVyLgogICAgICAgICAgICAgICAgIENvbG9yIHJlZCgy
NTUsIDAsIDAsIDI1NSk7Ci0gICAgICAgICAgICAgICAgZmlsbFBhdGgoKnBhdGhJdGVyLCByZWQp
OworICAgICAgICAgICAgICAgIGZpbGxQYXRoSW50ZXJuYWwoKnBhdGhJdGVyLCByZWQpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzE5LDE1ICszNzksMTUgQEAgdm9pZCBH
TEVTMkNhbnZhczo6cmVzdG9yZSgpCiAKIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJl
Y3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogeworICAgIGJpbmRGcmFt
ZWJ1ZmZlcigpOwogICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3Np
dGVPcCk7CiAgICAgYXBwbHlDbGlwcGluZyhmYWxzZSk7CiAKLSAgICBtX2NvbnRleHQtPnVzZVF1
YWRWZXJ0aWNlcygpOwogICAgIG1fY29udGV4dC0+c2V0QWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApOwogCiAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7CiAKLSAgICBkcmF3UXVhZCh0ZXh0dXJl
U2l6ZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUtPm1fYWxwaGEp
OworICAgIGRyYXdUZXh0dXJlZFF1YWQodGV4dHVyZVNpemUsIHNyY1JlY3QsIGRzdFJlY3QsIG1f
c3RhdGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhKTsKIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6
ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKQEAgLTMzOCwxMiArMzk4LDEyIEBAIHZvaWQgR0xF
UzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHUKIAogdm9pZCBHTEVTMkNhbnZhczo6ZHJh
d1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0sIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wLCBib29sIGNsaXApCiB7CisgICAgYmluZEZyYW1lYnVmZmVyKCk7CiAgICAg
bV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKICAgICBhcHBs
eUNsaXBwaW5nKGNsaXApOwogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+
dGlsZXMoKTsKICAgICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRpbGVJ
bmRpY2VzKHNyY1JlY3QpOwogCi0gICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKICAg
ICBtX2NvbnRleHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KTsKIAogICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJlY3Qu
bWF4WSgpOyB5KyspIHsKQEAgLTM2NywxMyArNDI3LDE4IEBAIHZvaWQgR0xFUzJDYW52YXM6OmRy
YXdUZXh0dXJlZFJlY3RUaWxlKFQKIAogICAgIEludFJlY3QgdGlsZUJvdW5kc1dpdGhCb3JkZXIg
PSB0aWxlcy50aWxlQm91bmRzV2l0aEJvcmRlcih0aWxlKTsKIAotICAgIGRyYXdRdWFkKHRpbGVC
b3VuZHNXaXRoQm9yZGVyLnNpemUoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZSwgZHN0UmVj
dEludGVyc2VjdGVkLCB0cmFuc2Zvcm0sIGFscGhhKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKHRp
bGVCb3VuZHNXaXRoQm9yZGVyLnNpemUoKSwgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZSwgZHN0
UmVjdEludGVyc2VjdGVkLCB0cmFuc2Zvcm0sIGFscGhhKTsKIH0KIAotdm9pZCBHTEVTMkNhbnZh
czo6ZHJhd1F1YWQoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEpCit2b2lkIEdMRVMyQ2FudmFzOjpjb252b2x2ZVJlY3Qo
dW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBmbG9hdCBpbWFnZUluY3Jl
bWVudFsyXSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoKQogeworICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1
cmUpOworICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKyAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpORUFSRVNUKTsKKwogICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsK
LSAgICBtYXRyaXggKj0gdHJhbnNmb3JtOwogICAgIG1hdHJpeC50cmFuc2xhdGUoZHN0UmVjdC54
KCksIGRzdFJlY3QueSgpKTsKICAgICBtYXRyaXguc2NhbGUoZHN0UmVjdC53aWR0aCgpLCBkc3RS
ZWN0LmhlaWdodCgpKTsKIApAQCAtMzgyLDEzICs0NDcsNzkgQEAgdm9pZCBHTEVTMkNhbnZhczo6
ZHJhd1F1YWQoY29uc3QgSW50U2l6ZQogICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdC54
KCksIHNyY1JlY3QueSgpKTsKICAgICB0ZXhNYXRyaXguc2NhbGUoc3JjUmVjdC53aWR0aCgpLCBz
cmNSZWN0LmhlaWdodCgpKTsKIAotICAgIGJpbmRGcmFtZWJ1ZmZlcigpOworICAgIG1fY29udGV4
dC0+dXNlUXVhZFZlcnRpY2VzKCk7CisgICAgbV9jb250ZXh0LT51c2VDb252b2x1dGlvblByb2dy
YW0obWF0cml4LCB0ZXhNYXRyaXgsIGtlcm5lbCwga2VybmVsV2lkdGgsIGltYWdlSW5jcmVtZW50
KTsKKyAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xF
X1NUUklQLCAwLCA0KTsKKyAgICBjaGVja0dMRXJyb3IoImdsRHJhd0FycmF5cyIpOworfQogCitz
dGF0aWMgZmxvYXQgZ2F1c3MoZmxvYXQgeCwgZmxvYXQgc2lnbWEpCit7CisgICAgcmV0dXJuIGV4
cCgtICh4ICogeCkgLyAoMi4wZiAqIHNpZ21hICogc2lnbWEpKTsKK30KKworc3RhdGljIHZvaWQg
YnVpbGRLZXJuZWwoZmxvYXQgc2lnbWEsIGZsb2F0KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0aCkK
K3sKKyAgICBmbG9hdCBoYWxmV2lkdGggPSAoa2VybmVsV2lkdGggLSAxLjBmKSAvIDIuMGY7Cisg
ICAgZmxvYXQgc3VtID0gMC4wZjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGtlcm5lbFdpZHRo
OyArK2kpIHsKKyAgICAgICAga2VybmVsW2ldID0gZ2F1c3MoaSAtIGhhbGZXaWR0aCwgc2lnbWEp
OworICAgICAgICBzdW0gKz0ga2VybmVsW2ldOworICAgIH0KKyAgICAvLyBOb3JtYWxpemUgdGhl
IGtlcm5lbAorICAgIGZsb2F0IHNjYWxlID0gMS4wZiAvIHN1bTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IGtlcm5lbFdpZHRoOyArK2kpCisgICAgICAgIGtlcm5lbFtpXSAqPSBzY2FsZTsKK30K
Kwordm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUXVhZChjb25zdCBJbnRTaXplJiB0ZXh0
dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSkKK3sKKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CisgICAgbWF0cml4ICo9IHRy
YW5zZm9ybTsKKyAgICBtYXRyaXgudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7
CisgICAgbWF0cml4LnNjYWxlKGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4TWF0cml4OworICAgIHRleE1hdHJpeC5zY2FsZSgxLjBm
IC8gdGV4dHVyZVNpemUud2lkdGgoKSwgMS4wZiAvIHRleHR1cmVTaXplLmhlaWdodCgpKTsKKyAg
ICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSk7CisgICAgdGV4
TWF0cml4LnNjYWxlKHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7CisKKyAgICBt
X2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogICAgIG1fY29udGV4dC0+dXNlVGV4dHVyZVBy
b2dyYW0obWF0cml4LCB0ZXhNYXRyaXgsIGFscGhhKTsKICAgICBtX2NvbnRleHQtPmRyYXdBcnJh
eXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKICAgICBjaGVja0dM
RXJyb3IoImdsRHJhd0FycmF5cyIpOwogfQogCit2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVy
ZWRRdWFkTWl0Y2hlbGwoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEpCit7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1p
dGNoZWxsQ29lZmZpY2llbnRzWzE2XSA9IHsKKyAgICAgICAgIDAuMGYgLyAxOC4wZiwgICAxLjBm
IC8gMTguMGYsICAxNi4wZiAvIDE4LjBmLCAgIDEuMGYgLyAxOC4wZiwKKyAgICAgICAgIDAuMGYg
LyAxOC4wZiwgICA5LjBmIC8gMTguMGYsICAgMC4wZiAvIDE4LjBmLCAgLTkuMGYgLyAxOC4wZiwK
KyAgICAgICAgLTYuMGYgLyAxOC4wZiwgIDI3LjBmIC8gMTguMGYsIC0zNi4wZiAvIDE4LjBmLCAg
MTUuMGYgLyAxOC4wZiwKKyAgICAgICAgIDcuMGYgLyAxOC4wZiwgLTIxLjBmIC8gMTguMGYsICAy
MS4wZiAvIDE4LjBmLCAgLTcuMGYgLyAxOC4wZiwKKyAgICB9OworCisgICAgQWZmaW5lVHJhbnNm
b3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOworICAgIG1hdHJpeCAqPSB0cmFuc2Zvcm07CisgICAg
bWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOworICAgIG1hdHJpeC5z
Y2FsZShkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpOworCisgICAgZmxvYXQgaW1h
Z2VJbmNyZW1lbnRbMl0gPSB7IDEuMGYgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpLCAxLjBmIC8gdGV4
dHVyZVNpemUuaGVpZ2h0KCkgfTsKKworICAgIEFmZmluZVRyYW5zZm9ybSB0ZXhNYXRyaXg7Cisg
ICAgdGV4TWF0cml4LnNjYWxlKGltYWdlSW5jcmVtZW50WzBdLCBpbWFnZUluY3JlbWVudFsxXSk7
CisgICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0LngoKSwgc3JjUmVjdC55KCkpOworICAg
IHRleE1hdHJpeC5zY2FsZShzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCkpOworCisg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TkVBUkVTVCk7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBH
cmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCk7CisKKyAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0
aWNlcygpOworICAgIG1fY29udGV4dC0+dXNlQmljdWJpY1Byb2dyYW0obWF0cml4LCB0ZXhNYXRy
aXgsIG1pdGNoZWxsQ29lZmZpY2llbnRzLCBpbWFnZUluY3JlbWVudCwgYWxwaGEpOworICAgIG1f
Y29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVAsIDAs
IDQpOworICAgIGNoZWNrR0xFcnJvcigiZ2xEcmF3QXJyYXlzIik7Cit9CisKIHZvaWQgR0xFUzJD
YW52YXM6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKIHsKICAg
ICBtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wID0gb3A7CkBAIC01NTQsMTIgKzY4NSw5IEBAIHZvaWQg
R0xFUzJDYW52YXM6OmNyZWF0ZVZlcnRleEJ1ZmZlckZyb20KICAgICAqY291bnQgPSBpbmRpY2Vz
LnNpemUoKTsKIH0KIAotdm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGhJbnRlcm5h
bChjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjp1c2VMb29wQmxpbm5Gb3JQYXRoUmVuZGVyaW5nKCkpIHsKLSAg
ICAgICAgYmluZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3Np
dGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKLQogICAgICAgICBtX3BhdGhDYWNo
ZS5jbGVhcigpOwogICAgICAgICBMb29wQmxpbm5QYXRoUHJvY2Vzc29yIHByb2Nlc3NvcjsKICAg
ICAgICAgcHJvY2Vzc29yLnByb2Nlc3MocGF0aCwgbV9wYXRoQ2FjaGUpOwpAQCAtNTkwLDE4ICs3
MTgsMTggQEAgdm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcAogICAgICAg
ICBpbnQgY291bnQ7CiAgICAgICAgIHVuc2lnbmVkIHZlcnRleEJ1ZmZlciwgaW5kZXhCdWZmZXI7
CiAgICAgICAgIGNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoKHBhdGgsICZjb3VudCwgJnZlcnRl
eEJ1ZmZlciwgJmluZGV4QnVmZmVyKTsKKworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4
KG1fZmxpcE1hdHJpeCk7CisgICAgICAgIG1hdHJpeCAqPSBtX3N0YXRlLT5tX2N0bTsKKwogICAg
ICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmVydGV4QnVmZmVyKTsKICAgICAgICAgY2hlY2tHTEVy
cm9yKCJiaW5kQnVmZmVyIik7CiAgICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsIGlu
ZGV4QnVmZmVyKTsKICAgICAgICAgY2hlY2tHTEVycm9yKCJiaW5kQnVmZmVyIik7CiAKLSAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwotICAgICAgICBtYXRyaXgg
Kj0gbV9zdGF0ZS0+bV9jdG07Ci0KICAgICAgICAgbV9jb250ZXh0LT51c2VGaWxsU29saWRQcm9n
cmFtKG1hdHJpeCwgY29sb3IpOwogICAgICAgICBjaGVja0dMRXJyb3IoInVzZUZpbGxTb2xpZFBy
b2dyYW0iKTsKIAotICAgICAgICBiaW5kRnJhbWVidWZmZXIoKTsKICAgICAgICAgbV9jb250ZXh0
LT5ncmFwaGljc0NvbnRleHQzRCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRS
SUFOR0xFUywgY291bnQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCk7CiAg
ICAgICAgIGNoZWNrR0xFcnJvcigiZHJhd0FycmF5cyIpOwogCkBAIC02MTMsNiArNzQxLDEzNiBA
QCB2b2lkIEdMRVMyQ2FudmFzOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwCiAgICAgfQogfQogCitG
bG9hdFJlY3QgR0xFUzJDYW52YXM6OmZsaXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBGbG9hdFJlY3QgZmxpcHBlZFJlY3QocmVjdCk7CisgICAgZmxpcHBlZFJlY3Quc2V0WSht
X3NpemUuaGVpZ2h0KCkgLSByZWN0LnkoKSk7CisgICAgZmxpcHBlZFJlY3Quc2V0SGVpZ2h0KC1y
ZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gZmxpcHBlZFJlY3Q7Cit9CisKK3ZvaWQgR0xFUzJD
YW52YXM6OmNsZWFyQm9yZGVycyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGludCB3aWR0aCkKK3sK
KyAgICBzY2lzc29yQ2xlYXIocmVjdC54KCksIHJlY3QueSgpIC0gd2lkdGgsIHJlY3Qud2lkdGgo
KSArIHdpZHRoLCB3aWR0aCk7CisgICAgc2Npc3NvckNsZWFyKHJlY3QubWF4WCgpLCByZWN0Lnko
KSwgd2lkdGgsIHJlY3QuaGVpZ2h0KCkgKyB3aWR0aCk7CisgICAgc2Npc3NvckNsZWFyKHJlY3Qu
eCgpIC0gd2lkdGgsIHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCkgKyB3aWR0aCwgd2lkdGgpOwor
ICAgIHNjaXNzb3JDbGVhcihyZWN0LngoKSAtIHdpZHRoLCByZWN0LnkoKSAtIHdpZHRoLCB3aWR0
aCwgcmVjdC5oZWlnaHQoKSArIHdpZHRoKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6YmVnaW5T
aGFkb3dEcmF3KCkKK3sKKyAgICBmbG9hdCBvZmZzZXRYID0gbV9zdGF0ZS0+bV9zaGFkb3dPZmZz
ZXQud2lkdGgoKTsKKyAgICBmbG9hdCBvZmZzZXRZID0gbV9zdGF0ZS0+bV9zaGFkb3dPZmZzZXQu
aGVpZ2h0KCk7CisgICAgc2F2ZSgpOworICAgIGlmIChtX3N0YXRlLT5tX3NoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKSB7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBuZXdDVE07CisgICAgICAgIG5l
d0NUTS50cmFuc2xhdGUob2Zmc2V0WCwgLW9mZnNldFkpOworICAgICAgICBuZXdDVE0gKj0gbV9z
dGF0ZS0+bV9jdG07CisgICAgICAgIG1fc3RhdGUtPm1fY3RtID0gbmV3Q1RNOworICAgIH0gZWxz
ZQorICAgICAgICBtX3N0YXRlLT5tX2N0bS50cmFuc2xhdGUob2Zmc2V0WCwgb2Zmc2V0WSk7CisK
KyAgICBpZiAobV9zdGF0ZS0+bV9zaGFkb3dCbHVyID4gMCkgeworICAgICAgICAvLyBEcmF3IGhh
cmQgc2hhZG93IHRvIG9mZnNjcmVlbiBidWZmZXIgMC4KKyAgICAgICAgRHJhd2luZ0J1ZmZlciog
ZHN0QnVmZmVyID0gbV9jb250ZXh0LT5nZXRPZmZzY3JlZW5CdWZmZXIoMCwgbV9zaXplKTsKKyAg
ICAgICAgZHN0QnVmZmVyLT5iaW5kKCk7CisgICAgICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3Np
dGVPcGVyYXRvcihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgYXBwbHlDbGlwcGluZyhmYWxzZSk7
CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7
CisgICAgfQorfQorCit2b2lkIEdMRVMyQ2FudmFzOjplbmRTaGFkb3dEcmF3KGNvbnN0IEZsb2F0
UmVjdCYgYm91bmRpbmdCb3gpCit7CisgICAgaWYgKG1fc3RhdGUtPm1fc2hhZG93Qmx1ciA+IDAp
IHsKKyAgICAgICAgLy8gQnVmZmVyIDAgY29udGFpbnMgdGhlIHByaW1pdGl2ZSBkcmF3biB3aXRo
IGEgaGFyZCBzaGFkb3cuCisgICAgICAgIERyYXdpbmdCdWZmZXIqIHNyY0J1ZmZlciA9IG1fY29u
dGV4dC0+Z2V0T2Zmc2NyZWVuQnVmZmVyKDAsIG1fc2l6ZSk7CisgICAgICAgIERyYXdpbmdCdWZm
ZXIqIGRzdEJ1ZmZlciA9IG1fY29udGV4dC0+Z2V0T2Zmc2NyZWVuQnVmZmVyKDEsIG1fc2l6ZSk7
CisKKyAgICAgICAgZmxvYXQgc2lnbWEgPSBtX3N0YXRlLT5tX3NoYWRvd0JsdXIgKiAwLjMzMzMz
M2Y7CisgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dCb3VuZGluZ0JveChtX3N0YXRlLT5tX2N0bS5t
YXBSZWN0KGJvdW5kaW5nQm94KSk7CisgICAgICAgIEZsb2F0UmVjdCByZWN0KEZsb2F0UG9pbnQo
MCwgMCksIG1fc2l6ZSk7CisgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KHNoYWRvd0JvdW5kaW5n
Qm94KTsKKworICAgICAgICBpbnQgc2NhbGVGYWN0b3IgPSAxOworICAgICAgICB3aGlsZSAoc2ln
bWEgPiBjTWF4U2lnbWEpIHsKKyAgICAgICAgICAgIHNyY1JlY3Quc2NhbGUoMC41Zik7CisgICAg
ICAgICAgICBzY2FsZUZhY3RvciAqPSAyOworICAgICAgICAgICAgc2lnbWEgKj0gMC41ZjsKKyAg
ICAgICAgfQorICAgICAgICBzcmNSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzcmNSZWN0KTsKKyAg
ICAgICAgc3JjUmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CisgICAgICAgIGZvciAoaW50IGkgPSAx
OyBpIDwgc2NhbGVGYWN0b3I7IGkgKj0gMikgeworICAgICAgICAgICAgZHN0QnVmZmVyLT5iaW5k
KCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBzcmNCdWZmZXItPmNvbG9yQnVmZmVyKCkpOworICAgICAgICAgICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBH
cmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwor
ICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBkc3RSZWN0KHNyY1Jl
Y3QpOworICAgICAgICAgICAgZHN0UmVjdC5zY2FsZSgwLjVmKTsKKyAgICAgICAgICAgIC8vIENs
ZWFyIG91dCAxIHBpeGVsIGJvcmRlciBmb3IgbGluZWFyIGZpbHRlcmluZy4KKyAgICAgICAgICAg
IGNsZWFyQm9yZGVycyhkc3RSZWN0LCAxKTsKKyAgICAgICAgICAgIGRyYXdUZXh0dXJlZFF1YWQo
c3JjQnVmZmVyLT5zaXplKCksIGZsaXBSZWN0KHNyY1JlY3QpLCBkc3RSZWN0LCBBZmZpbmVUcmFu
c2Zvcm0oKSwgMS4wKTsKKyAgICAgICAgICAgIHNyY1JlY3QgPSBkc3RSZWN0OworICAgICAgICAg
ICAgc3RkOjpzd2FwKHNyY0J1ZmZlciwgZHN0QnVmZmVyKTsKKyAgICAgICAgfQorCisgICAgICAg
IGludCBoYWxmV2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHNpZ21hICogMy4wZik7CisgICAgICAg
IGludCBrZXJuZWxXaWR0aCA9IGhhbGZXaWR0aCAqIDIgKyAxOworICAgICAgICBPd25BcnJheVB0
cjxmbG9hdD4ga2VybmVsID0gYWRvcHRBcnJheVB0cihuZXcgZmxvYXRba2VybmVsV2lkdGhdKTsK
KyAgICAgICAgYnVpbGRLZXJuZWwoc2lnbWEsIGtlcm5lbC5nZXQoKSwga2VybmVsV2lkdGgpOwor
CisgICAgICAgIGlmIChzY2FsZUZhY3RvciA+IDEpIHsKKyAgICAgICAgICAgIHNjaXNzb3JDbGVh
cihzcmNSZWN0Lm1heFgoKSwgc3JjUmVjdC55KCksIGtlcm5lbFdpZHRoLCBzcmNSZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIHNjaXNzb3JDbGVhcihzcmNSZWN0LngoKSAtIGtlcm5lbFdpZHRo
LCBzcmNSZWN0LnkoKSwga2VybmVsV2lkdGgsIHNyY1JlY3QuaGVpZ2h0KCkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gQmx1ciBpbiBYIG9mZnNjcmVlbi4KKyAgICAgICAgZHN0QnVmZmVyLT5i
aW5kKCk7CisgICAgICAgIHNyY1JlY3QuaW5mbGF0ZVgoaGFsZldpZHRoKTsKKyAgICAgICAgc3Jj
UmVjdC5pbnRlcnNlY3QocmVjdCk7CisgICAgICAgIGZsb2F0IGltYWdlSW5jcmVtZW50WFsyXSA9
IHsxLjBmIC8gc3JjQnVmZmVyLT5zaXplKCkud2lkdGgoKSwgMC4wZn07CisgICAgICAgIGNvbnZv
bHZlUmVjdChzcmNCdWZmZXItPmNvbG9yQnVmZmVyKCksIHNyY0J1ZmZlci0+c2l6ZSgpLCBmbGlw
UmVjdChzcmNSZWN0KSwgc3JjUmVjdCwgaW1hZ2VJbmNyZW1lbnRYLCBrZXJuZWwuZ2V0KCksIGtl
cm5lbFdpZHRoKTsKKworICAgICAgICBpZiAoc2NhbGVGYWN0b3IgPiAxKSB7CisgICAgICAgICAg
ICBzY2lzc29yQ2xlYXIoc3JjUmVjdC54KCksIHNyY1JlY3QubWF4WSgpLCBzcmNSZWN0LndpZHRo
KCksIGtlcm5lbFdpZHRoKTsKKyAgICAgICAgICAgIHNjaXNzb3JDbGVhcihzcmNSZWN0LngoKSwg
c3JjUmVjdC55KCkgLSBrZXJuZWxXaWR0aCwgc3JjUmVjdC53aWR0aCgpLCBrZXJuZWxXaWR0aCk7
CisgICAgICAgIH0KKyAgICAgICAgc3JjUmVjdC5pbmZsYXRlWShoYWxmV2lkdGgpOworICAgICAg
ICBzcmNSZWN0LmludGVyc2VjdChyZWN0KTsKKyAgICAgICAgc3RkOjpzd2FwKHNyY0J1ZmZlciwg
ZHN0QnVmZmVyKTsKKworICAgICAgICBmbG9hdCBpbWFnZUluY3JlbWVudFlbMl0gPSB7MC4wZiwg
MS4wZiAvIHNyY0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpfTsKKyAgICAgICAgaWYgKHNjYWxlRmFj
dG9yID4gMSkgeworICAgICAgICAgICAgLy8gQmx1ciBpbiBZIG9mZnNjcmVlbi4KKyAgICAgICAg
ICAgIGRzdEJ1ZmZlci0+YmluZCgpOworICAgICAgICAgICAgY29udm9sdmVSZWN0KHNyY0J1ZmZl
ci0+Y29sb3JCdWZmZXIoKSwgc3JjQnVmZmVyLT5zaXplKCksIGZsaXBSZWN0KHNyY1JlY3QpLCBz
cmNSZWN0LCBpbWFnZUluY3JlbWVudFksIGtlcm5lbC5nZXQoKSwga2VybmVsV2lkdGgpOworICAg
ICAgICAgICAgLy8gQ2xlYXIgb3V0IDIgcGl4ZWwgYm9yZGVyIGZvciBiaWN1YmljIGZpbHRlcmlu
Zy4KKyAgICAgICAgICAgIGNsZWFyQm9yZGVycyhzcmNSZWN0LCAyKTsKKyAgICAgICAgICAgIHN0
ZDo6c3dhcChzcmNCdWZmZXIsIGRzdEJ1ZmZlcik7CisKKyAgICAgICAgICAgIC8vIFVwc2FtcGxl
IHNyY0J1ZmZlciAtPiBtYWluIGZyYW1lYnVmZmVyIHVzaW5nIGJpY3ViaWMgZmlsdGVyaW5nLgor
ICAgICAgICAgICAgYmluZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmFw
cGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7CisgICAgICAgICAg
ICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKTsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHNy
Y0J1ZmZlci0+Y29sb3JCdWZmZXIoKSk7CisgICAgICAgICAgICBGbG9hdFJlY3QgZHN0UmVjdCA9
IHNyY1JlY3Q7CisgICAgICAgICAgICBkc3RSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKKyAgICAg
ICAgICAgIGRyYXdUZXh0dXJlZFF1YWRNaXRjaGVsbChzcmNCdWZmZXItPnNpemUoKSwgZmxpcFJl
Y3Qoc3JjUmVjdCksIGRzdFJlY3QsIEFmZmluZVRyYW5zZm9ybSgpLCAxLjApOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gQmx1ciBpbiBZIGRpcmVjdGx5IHRvIGZyYW1lYnVmZmVy
LgorICAgICAgICAgICAgYmluZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7CisgICAgICAg
ICAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKTsKKworICAgICAg
ICAgICAgY29udm9sdmVSZWN0KHNyY0J1ZmZlci0+Y29sb3JCdWZmZXIoKSwgc3JjQnVmZmVyLT5z
aXplKCksIGZsaXBSZWN0KHNyY1JlY3QpLCBzcmNSZWN0LCBpbWFnZUluY3JlbWVudFksIGtlcm5l
bC5nZXQoKSwga2VybmVsV2lkdGgpOworICAgICAgICB9CisgICAgfQorICAgIHJlc3RvcmUoKTsK
K30KKwogdm9pZCBHTEVTMkNhbnZhczo6YmVnaW5TdGVuY2lsRHJhdygpCiB7CiAgICAgLy8gVHVy
biBvbiBzdGVuY2lsIHRlc3QuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHJldmlzaW9uIDgxMjc5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENv
bG9yJiwgQ29sb3JTcGFjZSk7CiAgICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSk7CisgICAg
dm9pZCBzZXRTaGFkb3dDb2xvcihjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOworICAgIHZvaWQg
c2V0U2hhZG93T2Zmc2V0KGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2V0U2hhZG93Qmx1
cihmbG9hdCk7CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sKTsKICAg
ICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7CiAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpOwpAQCAtOTYsMTEgKzEwMCwyMCBAQCBwdWJsaWM6CiAgICAgRHJhd2luZ0J1
ZmZlciogZHJhd2luZ0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlcjsgfQog
CiBwcml2YXRlOgorICAgIHZvaWQgc2Npc3NvckNsZWFyKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHdpZHRoLCBmbG9hdCBoZWlnaHQpOwogICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdFRpbGUoVGV4
dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7
Ci0gICAgdm9pZCBkcmF3UXVhZChjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoY29uc3Qg
SW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7Cisg
ICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkTWl0Y2hlbGwoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBjb252b2x2ZVJl
Y3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBmbG9hdCBpbWFnZUlu
Y3JlbWVudFsyXSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoKTsKKwogICAg
IHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7CiAgICAgdm9p
ZCBjcmVhdGVWZXJ0ZXhCdWZmZXJGcm9tUGF0aChjb25zdCBQYXRoJiwgaW50KiBjb3VudCwgdW5z
aWduZWQqIHZlcnRleEJ1ZmZlciwgdW5zaWduZWQqIGluZGV4QnVmZmVyKTsKLSAgICB2b2lkIGZp
bGxQYXRoKGNvbnN0IFBhdGgmLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgZmlsbFBhdGhJbnRl
cm5hbChjb25zdCBQYXRoJiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGZpbGxSZWN0SW50ZXJu
YWwoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICBGbG9hdFJlY3QgZmxpcFJl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBjbGVhckJvcmRlcnMoY29uc3QgRmxvYXRS
ZWN0JiwgaW50IHdpZHRoKTsKKyAgICB2b2lkIGJlZ2luU2hhZG93RHJhdygpOworICAgIHZvaWQg
ZW5kU2hhZG93RHJhdyhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KTsKICAgICB2b2lkIGJl
Z2luU3RlbmNpbERyYXcoKTsKICAgICB2b2lkIGFwcGx5Q2xpcHBpbmcoYm9vbCBlbmFibGUpOwog
ICAgIHZvaWQgY2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhlYWRlcik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQmljdWJpY1NoYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0JpY3ViaWNTaGFkZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKKyNpbmNs
dWRlICJCaWN1YmljU2hhZGVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0JpY3ViaWNTaGFkZXI6OkJpY3ViaWNTaGFkZXIoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCisgICAgOiBTaGFkZXIo
Y29udGV4dCwgcHJvZ3JhbSkKKyAgICAsIG1fbWF0cml4TG9jYXRpb24oY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW0sICJtYXRyaXgiKSkKKyAgICAsIG1fdGV4TWF0cml4TG9jYXRp
b24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXhNYXRyaXgiKSkKKyAg
ICAsIG1fY29lZmZpY2llbnRzTG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sICJjb2VmZmljaWVudHMiKSkKKyAgICAsIG1faW1hZ2VJbmNyZW1lbnRMb2NhdGlvbihj
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImltYWdlSW5jcmVtZW50IikpCisg
ICAgLCBtX2ltYWdlTG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
ICJpbWFnZSIpKQorICAgICwgbV9hbHBoYUxvY2F0aW9uKGNvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLCAiYWxwaGEiKSkKKyAgICAsIG1fcG9zaXRpb25Mb2NhdGlvbihjb250ZXh0
LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAicG9zaXRpb24iKSkKK3sKK30KKworUGFzc093
blB0cjxCaWN1YmljU2hhZGVyPiBCaWN1YmljU2hhZGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJj
ZSA9CisgICAgICAgICJ1bmlmb3JtIG1hdDMgbWF0cml4O1xuIgorICAgICAgICAidW5pZm9ybSBt
YXQzIHRleE1hdHJpeDtcbiIKKyAgICAgICAgImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuIgor
ICAgICAgICAidmFyeWluZyB2ZWMyIHRleENvb3JkO1xuIgorICAgICAgICAidm9pZCBtYWluKCkg
e1xuIgorICAgICAgICAiICAgIHRleENvb3JkID0gKHRleE1hdHJpeCAqIHBvc2l0aW9uKS54eTtc
biIKKyAgICAgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQobWF0cml4ICogcG9zaXRpb24sIDEu
MCk7XG4iCisgICAgICAgICJ9XG4iOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlclNvdXJjZSA9CisgICAgICAgICIjaWZkZWYgR0xfRVNcbiIKKyAgICAgICAgInByZWNpc2lv
biBtZWRpdW1wIGZsb2F0O1xuIgorICAgICAgICAiI2VuZGlmXG4iCisgICAgICAgICJ1bmlmb3Jt
IHNhbXBsZXIyRCBpbWFnZTtcbiIKKyAgICAgICAgInVuaWZvcm0gdmVjMiBpbWFnZUluY3JlbWVu
dDtcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0NCBjb2VmZmljaWVudHM7XG4iCisgICAgICAgICJ1
bmlmb3JtIGZsb2F0IGFscGhhO1xuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHRleENvb3JkO1xu
IgorICAgICAgICAidmVjNCBjdWJpY0JsZW5kKGZsb2F0IHQsIHZlYzQgYzAsIHZlYzQgYzEsIHZl
YzQgYzIsIHZlYzQgYzMpIHtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHRzID0gdmVjNCgxLjAsIHQs
IHQgKiB0LCB0ICogdCAqIHQpO1xuIgorICAgICAgICAiICAgIHZlYzQgcmVzdWx0ID0gY29lZmZp
Y2llbnRzICogdHM7XG4iCisgICAgICAgICIgICAgcmV0dXJuIHJlc3VsdC53ICogYzAgKyByZXN1
bHQueiAqIGMxICsgcmVzdWx0LnkgKiBjMiArIHJlc3VsdC54ICogYzM7XG4iCisgICAgICAgICJ9
XG4iCisgICAgICAgICJ2b2lkIG1haW4oKSB7XG4iCisgICAgICAgICIgICAgdmVjMiBpbWFnZUNv
b3JkID0gdGV4Q29vcmQ7XG4iCisgICAgICAgICIgICAgdmVjMiBmID0gZnJhY3QoaW1hZ2VDb29y
ZCAvIGltYWdlSW5jcmVtZW50KSAtIHZlYzIoMC41LCAwLjUpO1xuIgorICAgICAgICAiICAgIHZl
YzQgdDAwID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2
ZWMyKC0xLCAtMSkpO1xuIgorICAgICAgICAiICAgIHZlYzQgdDEwID0gdGV4dHVyZTJEKGltYWdl
LCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAwLCAtMSkpO1xuIgorICAgICAg
ICAiICAgIHZlYzQgdDIwID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNy
ZW1lbnQgKiB2ZWMyKCAxLCAtMSkpO1xuIgorICAgICAgICAiICAgIHZlYzQgdDMwID0gdGV4dHVy
ZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAyLCAtMSkpO1xu
IgorICAgICAgICAiICAgIHZlYzQgdDAgPSBjdWJpY0JsZW5kKGYueCwgdDAwLCB0MTAsIHQyMCwg
dDMwKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQwMSA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VD
b29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMigtMSwgMCkpO1xuIgorICAgICAgICAiICAgIHZl
YzQgdDExID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2
ZWMyKCAwLCAwKSk7XG4iCisgICAgICAgICIgICAgdmVjNCB0MjEgPSB0ZXh0dXJlMkQoaW1hZ2Us
IGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoIDEsIDApKTtcbiIKKyAgICAgICAg
IiAgICB2ZWM0IHQzMSA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVt
ZW50ICogdmVjMiggMiwgMCkpO1xuIgorICAgICAgICAiICAgIHZlYzQgdDEgPSBjdWJpY0JsZW5k
KGYueCwgdDAxLCB0MTEsIHQyMSwgdDMxKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQwMiA9IHRl
eHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMigtMSwgMSkp
O1xuIgorICAgICAgICAiICAgIHZlYzQgdDEyID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3Jk
ICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAwLCAxKSk7XG4iCisgICAgICAgICIgICAgdmVjNCB0
MjIgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIo
IDEsIDEpKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQzMiA9IHRleHR1cmUyRChpbWFnZSwgaW1h
Z2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMiwgMSkpO1xuIgorICAgICAgICAiICAg
IHZlYzQgdDIgPSBjdWJpY0JsZW5kKGYueCwgdDAyLCB0MTIsIHQyMiwgdDMyKTtcbiIKKyAgICAg
ICAgIiAgICB2ZWM0IHQwMyA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5j
cmVtZW50ICogdmVjMigtMSwgMikpO1xuIgorICAgICAgICAiICAgIHZlYzQgdDEzID0gdGV4dHVy
ZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAwLCAyKSk7XG4i
CisgICAgICAgICIgICAgdmVjNCB0MjMgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBp
bWFnZUluY3JlbWVudCAqIHZlYzIoIDEsIDIpKTtcbiIKKyAgICAgICAgIiAgICB2ZWM0IHQzMyA9
IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMiwg
MikpO1xuIgorICAgICAgICAiICAgIHZlYzQgdDMgPSBjdWJpY0JsZW5kKGYueCwgdDAzLCB0MTMs
IHQyMywgdDMzKTtcbiIKKyAgICAgICAgIiAgICBnbF9GcmFnQ29sb3IgPSBjdWJpY0JsZW5kKGYu
eSwgdDAsIHQxLCB0MiwgdDMpO1xuIgorICAgICAgICAifVxuIjsKKworICAgIHVuc2lnbmVkIHBy
b2dyYW0gPSBsb2FkUHJvZ3JhbShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGZyYWdtZW50
U2hhZGVyU291cmNlKTsKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIG5ldyBCaWN1YmljU2hhZGVyKGNvbnRleHQsIHByb2dyYW0pOworfQorCit2b2lk
IEJpY3ViaWNTaGFkZXI6OnVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0IGNvZWZmaWNpZW50
c1sxNl0sIGNvbnN0IGZsb2F0IGltYWdlSW5jcmVtZW50WzJdLCBmbG9hdCBhbHBoYSkKK3sKKyAg
ICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9wcm9ncmFtKTsKKyAgICBmbG9hdCBtYXRyaXhbOV07
CisgICAgYWZmaW5lVG8zeDModHJhbnNmb3JtLCBtYXRyaXgpOworICAgIG1fY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDNmdihtX21hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCBtYXRy
aXgsIDEgLypjb3VudCovKTsKKworICAgIGZsb2F0IHRleE1hdHJpeFs5XTsKKyAgICBhZmZpbmVU
bzN4Myh0ZXhUcmFuc2Zvcm0sIHRleE1hdHJpeCk7CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0
cml4M2Z2KG1fdGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIHRleE1hdHJp
eCwgMSAvKmNvdW50Ki8pOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihtX2NvZWZm
aWNpZW50c0xvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCBjb25zdF9jYXN0PGZsb2F0ICo+
KGNvZWZmaWNpZW50cyksIDEgLypjb3VudCovKTsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTJm
KG1faW1hZ2VJbmNyZW1lbnRMb2NhdGlvbiwgaW1hZ2VJbmNyZW1lbnRbMF0sIGltYWdlSW5jcmVt
ZW50WzFdKTsKKworICAgIC8vIEZvciBub3csIHdlIGFsd2F5cyB1c2UgdGV4dHVyZSB1bml0IDAu
IElmIHRoYXQgZXZlciBjaGFuZ2VzLCB3ZSBzaG91bGQKKyAgICAvLyBleHBvc2UgdGhpcyBwYXJh
bWV0ZXIgdG8gdGhlIGNhbGxlci4KKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX2ltYWdlTG9j
YXRpb24sIDApOworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fYWxwaGFMb2NhdGlvbiwgYWxw
aGEpOworCisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2Nh
dGlvbiwgMywgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgICBt
X2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fcG9zaXRpb25Mb2NhdGlvbik7Cit9
CisKK30KKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvQmljdWJpY1NoYWRlci5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0JpY3ViaWNTaGFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvQmljdWJpY1NoYWRlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQmljdWJpY1NoYWRlcl9oCisjZGVmaW5lIEJpY3Vi
aWNTaGFkZXJfaAorCisjaW5jbHVkZSAiU2hhZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQmljdWJpY1NoYWRlciA6IHB1YmxpYyBTaGFkZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPEJpY3ViaWNTaGFkZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCop
OworCisgICAgdm9pZCB1c2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0IGNvZWZmaWNpZW50c1sxNl0sIGNvbnN0
IGZsb2F0IGltYWdlSW5jcmVtZW50WzJdLCBmbG9hdCBhbHBoYSk7CisKK3ByaXZhdGU6CisgICAg
QmljdWJpY1NoYWRlcihHcmFwaGljc0NvbnRleHQzRCosIHVuc2lnbmVkIHByb2dyYW0pOworCisg
ICAgaW50IG1fbWF0cml4TG9jYXRpb247CisgICAgaW50IG1fdGV4TWF0cml4TG9jYXRpb247Cisg
ICAgaW50IG1fY29lZmZpY2llbnRzTG9jYXRpb247CisgICAgaW50IG1faW1hZ2VJbmNyZW1lbnRM
b2NhdGlvbjsKKyAgICBpbnQgbV9pbWFnZUxvY2F0aW9uOworICAgIGludCBtX2FscGhhTG9jYXRp
b247CisgICAgaW50IG1fcG9zaXRpb25Mb2NhdGlvbjsKK307CisKK30KKworI2VuZGlmIC8vIEJp
Y3ViaWNTaGFkZXJfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuaApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvQ29udm9sdXRpb25TaGFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Db252b2x1dGlvblNoYWRlci5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDb252b2x1dGlv
blNoYWRlci5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJT
dHJpbmdFeHRyYXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb252b2x1dGlvblNoYWRl
cjo6Q29udm9sdXRpb25TaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVk
IHByb2dyYW0sIGludCBrZXJuZWxXaWR0aCkKKyAgICA6IFNoYWRlcihjb250ZXh0LCBwcm9ncmFt
KQorICAgICwgbV9rZXJuZWxXaWR0aChrZXJuZWxXaWR0aCkKKyAgICAsIG1fbWF0cml4TG9jYXRp
b24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJtYXRyaXgiKSkKKyAgICAs
IG1fdGV4TWF0cml4TG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
ICJ0ZXhNYXRyaXgiKSkKKyAgICAsIG1fa2VybmVsTG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sICJrZXJuZWwiKSkKKyAgICAsIG1faW1hZ2VMb2NhdGlvbihjb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImltYWdlIikpCisgICAgLCBtX2ltYWdl
SW5jcmVtZW50TG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJp
bWFnZUluY3JlbWVudCIpKQorICAgICwgbV9wb3NpdGlvbkxvY2F0aW9uKGNvbnRleHQtPmdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sICJwb3NpdGlvbiIpKQoreworfQorCitQYXNzT3duUHRyPENv
bnZvbHV0aW9uU2hhZGVyPiBDb252b2x1dGlvblNoYWRlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBpbnQga2VybmVsV2lkdGgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHZlcnRleFNoYWRlclJhdyA9CisgICAgICAgICIjZGVmaW5lIEtFUk5FTF9XSURUSCAlZFxuIgor
ICAgICAgICAidW5pZm9ybSBtYXQzIG1hdHJpeDtcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0MyB0
ZXhNYXRyaXg7XG4iCisgICAgICAgICJ1bmlmb3JtIHZlYzIgaW1hZ2VJbmNyZW1lbnQ7XG4iCisg
ICAgICAgICJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbiIKKyAgICAgICAgInZhcnlpbmcgdmVj
MiBpbWFnZUNvb3JkO1xuIgorICAgICAgICAidm9pZCBtYWluKCkge1xuIgorICAgICAgICAiICAg
IC8vIE9mZnNldCBpbWFnZSBjb29yZHMgYnkgaGFsZiBvZiBrZXJuZWwgd2lkdGgsIGluIGltYWdl
IHRleGVsc1xuIgorICAgICAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChtYXRyaXggKiBwb3Np
dGlvbiwgMS4wKTtcbiIKKyAgICAgICAgIiAgICBmbG9hdCBzY2FsZSA9IChmbG9hdChLRVJORUxf
V0lEVEgpIC0gMS4wKSAvIDIuMDtcbiIKKyAgICAgICAgIiAgICBpbWFnZUNvb3JkID0gKHRleE1h
dHJpeCAqIHBvc2l0aW9uKS54eSAtIHZlYzIoc2NhbGUsIHNjYWxlKSAqIGltYWdlSW5jcmVtZW50
O1xuIgorICAgICAgICAifVxuIjsKKyAgICBjaGFyIHZlcnRleFNoYWRlclNvdXJjZVsxMDI0XTsK
KyAgICBzbnByaW50Zih2ZXJ0ZXhTaGFkZXJTb3VyY2UsIHNpemVvZih2ZXJ0ZXhTaGFkZXJTb3Vy
Y2UpLCB2ZXJ0ZXhTaGFkZXJSYXcsIGtlcm5lbFdpZHRoKTsKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXJSYXcgPQorICAgICAgICAiI2lmZGVmIEdMX0VTXG4iCisgICAgICAg
ICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKKyAgICAgICAgIiNlbmRpZlxuIgorICAgICAg
ICAiI2RlZmluZSBLRVJORUxfV0lEVEggJWRcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJE
IGltYWdlO1xuIgorICAgICAgICAidW5pZm9ybSBmbG9hdCBrZXJuZWxbS0VSTkVMX1dJRFRIXTtc
biIKKyAgICAgICAgInVuaWZvcm0gdmVjMiBpbWFnZUluY3JlbWVudDtcbiIKKyAgICAgICAgInZh
cnlpbmcgdmVjMiBpbWFnZUNvb3JkO1xuIgorICAgICAgICAidm9pZCBtYWluKCkge1xuIgorICAg
ICAgICAiICAgIHZlYzIgY29vcmQgPSBpbWFnZUNvb3JkO1xuIgorICAgICAgICAiICAgIHZlYzQg
c3VtID0gdmVjNCgwLCAwLCAwLCAwKTtcbiIKKyAgICAgICAgIiAgICBmb3IgKGludCBpID0gMDsg
aSA8IEtFUk5FTF9XSURUSDsgaSsrKSB7XG4iCisgICAgICAgICIgICAgICBzdW0gKz0gdGV4dHVy
ZTJEKGltYWdlLCBjb29yZCkgKiBrZXJuZWxbaV07XG4iCisgICAgICAgICIgICAgICBjb29yZCAr
PSBpbWFnZUluY3JlbWVudDtcbiIKKyAgICAgICAgIiAgICB9XG4iCisgICAgICAgICIgICAgZ2xf
RnJhZ0NvbG9yID0gc3VtO1xuIgorICAgICAgICAifVxuIjsKKyAgICBjaGFyIGZyYWdtZW50U2hh
ZGVyU291cmNlWzEwMjRdOworICAgIHNucHJpbnRmKGZyYWdtZW50U2hhZGVyU291cmNlLCBzaXpl
b2YoZnJhZ21lbnRTaGFkZXJTb3VyY2UpLCBmcmFnbWVudFNoYWRlclJhdywga2VybmVsV2lkdGgp
OworCisgICAgdW5zaWduZWQgcHJvZ3JhbSA9IGxvYWRQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNo
YWRlclNvdXJjZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOworICAgIGlmICghcHJvZ3JhbSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5ldyBDb252b2x1dGlvblNoYWRlcihjb250ZXh0
LCBwcm9ncmFtLCBrZXJuZWxXaWR0aCk7Cit9CisKK3ZvaWQgQ29udm9sdXRpb25TaGFkZXI6OnVz
ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0aCwgZmxv
YXQgaW1hZ2VJbmNyZW1lbnRbMl0pCit7CisgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1fcHJv
Z3JhbSk7CisgICAgZmxvYXQgbWF0cml4WzldOworICAgIGFmZmluZVRvM3gzKHRyYW5zZm9ybSwg
bWF0cml4KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV9tYXRyaXhMb2NhdGlv
biwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgbWF0cml4LCAxIC8qY291bnQqLyk7CisKKyAgICBmbG9h
dCB0ZXhNYXRyaXhbOV07CisgICAgYWZmaW5lVG8zeDModGV4VHJhbnNmb3JtLCB0ZXhNYXRyaXgp
OworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX3RleE1hdHJpeExvY2F0aW9uLCBm
YWxzZSAvKnRyYW5zcG9zZSovLCB0ZXhNYXRyaXgsIDEgLypjb3VudCovKTsKKworICAgIG1fY29u
dGV4dC0+dW5pZm9ybTJmKG1faW1hZ2VJbmNyZW1lbnRMb2NhdGlvbiwgaW1hZ2VJbmNyZW1lbnRb
MF0sIGltYWdlSW5jcmVtZW50WzFdKTsKKworICAgIC8vIEZvciBub3csIHdlIGFsd2F5cyB1c2Ug
dGV4dHVyZSB1bml0IDAuIElmIHRoYXQgZXZlciBjaGFuZ2VzLCB3ZSBzaG91bGQKKyAgICAvLyBl
eHBvc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGhlIGNhbGxlci4KKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0xaShtX2ltYWdlTG9jYXRpb24sIDApOworICAgIGlmIChrZXJuZWxXaWR0aCA+IG1fa2VybmVs
V2lkdGgpCisgICAgICAgIGtlcm5lbFdpZHRoID0gbV9rZXJuZWxXaWR0aDsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xZnYobV9rZXJuZWxMb2NhdGlvbiwgY29uc3RfY2FzdDxmbG9hdCo+KGtlcm5l
bCksIGtlcm5lbFdpZHRoKTsKKworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlciht
X3Bvc2l0aW9uTG9jYXRpb24sIDMsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAs
IDApOworCisgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9u
TG9jYXRpb24pOworfQorCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZvbHV0aW9uU2hhZGVyLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9D
b252b2x1dGlvblNoYWRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
b252b2x1dGlvblNoYWRlcl9oCisjZGVmaW5lIENvbnZvbHV0aW9uU2hhZGVyX2gKKworI2luY2x1
ZGUgIlNoYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnZvbHV0aW9u
U2hhZGVyIDogcHVibGljIFNoYWRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
Q29udm9sdXRpb25TaGFkZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIGludCBrZXJuZWxX
aWR0aCk7CisKKyAgICB2b2lkIHVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IGtlcm5l
bFdpZHRoLCBmbG9hdCBpbWFnZUluY3JlbWVudFsyXSk7CisKK3ByaXZhdGU6CisgICAgQ29udm9s
dXRpb25TaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBwcm9ncmFtLCBpbnQga2Vy
bmVsV2lkdGgpOworCisgICAgaW50IG1fa2VybmVsV2lkdGg7CisgICAgaW50IG1fbWF0cml4TG9j
YXRpb247CisgICAgaW50IG1fdGV4TWF0cml4TG9jYXRpb247CisgICAgaW50IG1fa2VybmVsTG9j
YXRpb247CisgICAgaW50IG1faW1hZ2VMb2NhdGlvbjsKKyAgICBpbnQgbV9pbWFnZUluY3JlbWVu
dExvY2F0aW9uOworICAgIGludCBtX3Bvc2l0aW9uTG9jYXRpb247Cit9OworCit9CisKKyNlbmRp
ZiAvLyBDb252b2x1dGlvblNoYWRlcl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDgx
Mjc5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBy
ZXNldChjb25zdCBJbnRTaXplJik7CiAgICAgdm9pZCBiaW5kKCk7CiAgICAgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBjb2xvckJ1
ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JCdWZmZXI7IH0KIAogICAgIC8vIENsZWFyIGFs
bCByZXNvdXJjZXMgZnJvbSB0aGlzIG9iamVjdCwgYXMgd2VsbCBhcyBjb250ZXh0LiBDYWxsZWQg
d2hlbiBjb250ZXh0IGlzIGRlc3Ryb3llZAogICAgIC8vIHRvIHByZXZlbnQgaW52YWxpZCBhY2Nl
c3NlcyB0byB0aGUgcmVzb3VyY2VzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCShyZXZpc2lvbiA4MTI3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDEwIEBACiAjaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkJpY3ViaWNTaGFkZXIuaCIKICNpbmNs
dWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbnZvbHV0aW9uU2hhZGVyLmgiCisjaW5jbHVkZSAi
RHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKQEAgLTQzLDYgKzQ2LDcgQEAKICNpbmNs
dWRlICJTb2xpZEZpbGxTaGFkZXIuaCIKICNpbmNsdWRlICJUZXhTaGFkZXIuaCIKIAorI2luY2x1
ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjUsMTUgKzY5LDI2IEBAIFBhc3NS
ZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IFNoYXIKICAgICBPd25QdHI8VGV4U2hhZGVy
PiB0ZXhTaGFkZXIgPSBUZXhTaGFkZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpKTsKICAgICBpZiAo
IXRleFNoYWRlcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVhc2UoKSwgc29saWRGaWxsU2hhZGVy
LnJlbGVhc2UoKSwgdGV4U2hhZGVyLnJlbGVhc2UoKSkpOworICAgIE93blB0cjxCaWN1YmljU2hh
ZGVyPiBiaWN1YmljU2hhZGVyID0gQmljdWJpY1NoYWRlcjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCkp
OworICAgIGlmICghYmljdWJpY1NoYWRlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgT3duQXJy
YXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+IGNvbnZvbHV0aW9uU2hhZGVycyA9IGFk
b3B0QXJyYXlQdHIobmV3IE93blB0cjxDb252b2x1dGlvblNoYWRlcj5bY01heEtlcm5lbFdpZHRo
XSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjTWF4S2VybmVsV2lkdGg7ICsraSkgeworICAg
ICAgICBjb252b2x1dGlvblNoYWRlcnNbaV0gPSBDb252b2x1dGlvblNoYWRlcjo6Y3JlYXRlKGNv
bnRleHQuZ2V0KCksIGkgKyAxKTsKKyAgICAgICAgaWYgKCFjb252b2x1dGlvblNoYWRlcnNbaV0p
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVhc2UoKSwgc29saWRGaWxsU2hhZGVy
LnJlbGVhc2UoKSwgdGV4U2hhZGVyLnJlbGVhc2UoKSwgYmljdWJpY1NoYWRlci5yZWxlYXNlKCks
IGNvbnZvbHV0aW9uU2hhZGVycy5yZWxlYXNlKCkpKTsKIH0KIAotU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsIFBhc3NPd25QdHI8U29saWRGaWxsU2hhZGVyPiBzb2xpZEZpbGxTaGFkZXIs
IFBhc3NPd25QdHI8VGV4U2hhZGVyPiB0ZXhTaGFkZXIpCitTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+IHNvbGlkRmlsbFNoYWRlciwgUGFz
c093blB0cjxUZXhTaGFkZXI+IHRleFNoYWRlciwgUGFzc093blB0cjxCaWN1YmljU2hhZGVyPiBi
aWN1YmljU2hhZGVyLCBQYXNzT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+
IGNvbnZvbHV0aW9uU2hhZGVycykKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9i
Z3JhU3VwcG9ydGVkKGZhbHNlKQogICAgICwgbV9xdWFkVmVydGljZXMoMCkKICAgICAsIG1fc29s
aWRGaWxsU2hhZGVyKHNvbGlkRmlsbFNoYWRlcikKICAgICAsIG1fdGV4U2hhZGVyKHRleFNoYWRl
cikKKyAgICAsIG1fYmljdWJpY1NoYWRlcihiaWN1YmljU2hhZGVyKQorICAgICwgbV9jb252b2x1
dGlvblNoYWRlcnMoY29udm9sdXRpb25TaGFkZXJzKQogICAgICwgbV9vZXNTdGFuZGFyZERlcml2
YXRpdmVzU3VwcG9ydGVkKGZhbHNlKQogewogICAgIGFsbENvbnRleHRzKCktPmFkZCh0aGlzKTsK
QEAgLTM2OSw2ICszODQsMTcgQEAgdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlVGV4
dHVyZQogICAgIG1fdGV4U2hhZGVyLT51c2UodHJhbnNmb3JtLCB0ZXhUcmFuc2Zvcm0sIDAsIGFs
cGhhKTsKIH0KIAordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlQmljdWJpY1Byb2dy
YW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdGV4VHJhbnNmb3JtLCBjb25zdCBmbG9hdCBjb2VmZmljaWVudHNbMTZdLCBjb25zdCBmbG9h
dCBpbWFnZUluY3JlbWVudFsyXSwgZmxvYXQgYWxwaGEpCit7CisgICAgbV9iaWN1YmljU2hhZGVy
LT51c2UodHJhbnNmb3JtLCB0ZXhUcmFuc2Zvcm0sIGNvZWZmaWNpZW50cywgaW1hZ2VJbmNyZW1l
bnQsIGFscGhhKTsKK30KKwordm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlQ29udm9s
dXRpb25Qcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IGtlcm5l
bFdpZHRoLCBmbG9hdCBpbWFnZUluY3JlbWVudFsyXSkKK3sKKyAgICBBU1NFUlQoa2VybmVsV2lk
dGggPj0gMSAmJiBrZXJuZWxXaWR0aCA8PSBjTWF4S2VybmVsV2lkdGgpOworICAgIG1fY29udm9s
dXRpb25TaGFkZXJzW2tlcm5lbFdpZHRoIC0gMV0tPnVzZSh0cmFuc2Zvcm0sIHRleFRyYW5zZm9y
bSwga2VybmVsLCBrZXJuZWxXaWR0aCwgaW1hZ2VJbmNyZW1lbnQpOworfQorCiB2b2lkIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFt
ZWJ1ZmZlcikKIHsKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKQEAgLTQxMSw2ICs0MzcsMjAgQEAgdm9p
ZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlTG9vcEJsaQogICAgIG1fbG9vcEJsaW5uRXh0
ZXJpb3JTaGFkZXItPnVzZSh2ZXJ0ZXhPZmZzZXQsIGtsbU9mZnNldCwgdHJhbnNmb3JtLCBjb2xv
cik7CiB9CiAKK0RyYXdpbmdCdWZmZXIqIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRPZmZz
Y3JlZW5CdWZmZXIodW5zaWduZWQgaW5kZXgsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
aWYgKGluZGV4ID49IG1fb2Zmc2NyZWVuQnVmZmVycy5zaXplKCkpCisgICAgICAgIG1fb2Zmc2Ny
ZWVuQnVmZmVycy5yZXNpemUoaW5kZXggKyAxKTsKKworICAgIGlmICghbV9vZmZzY3JlZW5CdWZm
ZXJzW2luZGV4XSkKKyAgICAgICAgbV9vZmZzY3JlZW5CdWZmZXJzW2luZGV4XSA9IG1fY29udGV4
dC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcihzaXplKTsKKworICAgIGlmIChzaXplLndpZHRoKCkgIT0g
bV9vZmZzY3JlZW5CdWZmZXJzW2luZGV4XS0+c2l6ZSgpLndpZHRoKCkKKyAgICAgICAgfHwgc2l6
ZS5oZWlnaHQoKSAhPSBtX29mZnNjcmVlbkJ1ZmZlcnNbaW5kZXhdLT5zaXplKCkuaGVpZ2h0KCkp
CisgICAgICAgIG1fb2Zmc2NyZWVuQnVmZmVyc1tpbmRleF0tPnJlc2V0KHNpemUpOworICAgIHJl
dHVybiBtX29mZnNjcmVlbkJ1ZmZlcnNbaW5kZXhdLmdldCgpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHJl
dmlzaW9uIDgxMjc5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1No
YXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAK
IAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC00NSw3
ICs0NiwxMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
CitjbGFzcyBCaWN1YmljU2hhZGVyOwogY2xhc3MgQ29sb3I7CitjbGFzcyBDb252b2x1dGlvblNo
YWRlcjsKK2NsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBIb3N0
V2luZG93OwogY2xhc3MgSW50U2l6ZTsKQEAgLTEwMSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHVzZUZpbGxTb2xpZFByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
Q29sb3ImKTsKICAgICB2b2lkIHVzZVRleHR1cmVQcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIHVzZUJp
Y3ViaWNQcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IGZsb2F0IGNvZWZmaWNpZW50c1sxNl0sIGNvbnN0IGZsb2F0IGltYWdlSW5jcmVt
ZW50WzJdLCBmbG9hdCBhbHBoYSk7CisgICAgdm9pZCB1c2VDb252b2x1dGlvblByb2dyYW0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0s
IGNvbnN0IGZsb2F0KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0aCwgZmxvYXQgaW1hZ2VJbmNyZW1l
bnRbMl0pOwogCiAgICAgdm9pZCBzZXRBY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmVVbml0
KTsKICAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlKTsKQEAgLTEyNyw5ICsxMzMsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29s
IHVzZUxvb3BCbGlubkZvclBhdGhSZW5kZXJpbmcoKTsKICAgICB2b2lkIHVzZUxvb3BCbGlubklu
dGVyaW9yUHJvZ3JhbSh1bnNpZ25lZCB2ZXJ0ZXhPZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYsIGNvbnN0IENvbG9yJik7CiAgICAgdm9pZCB1c2VMb29wQmxpbm5FeHRlcmlvclByb2dyYW0o
dW5zaWduZWQgdmVydGV4T2Zmc2V0LCB1bnNpZ25lZCBrbG1PZmZzZXQsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IENvbG9yJik7CisgICAgRHJhd2luZ0J1ZmZlciogZ2V0T2Zmc2NyZWVu
QnVmZmVyKHVuc2lnbmVkIGluZGV4LCBjb25zdCBJbnRTaXplJik7CiAKIHByaXZhdGU6Ci0gICAg
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBh
c3NPd25QdHI8U29saWRGaWxsU2hhZGVyPiwgUGFzc093blB0cjxUZXhTaGFkZXI+KTsKKyAgICBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFz
c093blB0cjxTb2xpZEZpbGxTaGFkZXI+LCBQYXNzT3duUHRyPFRleFNoYWRlcj4sIFBhc3NPd25Q
dHI8QmljdWJpY1NoYWRlcj4sIFBhc3NPd25BcnJheVB0cjxPd25QdHI8Q29udm9sdXRpb25TaGFk
ZXI+ID4pOwogCiAgICAgLy8gVXNlZCB0byBpbXBsZW1lbnQgcmVtb3ZlVGV4dHVyZXNGb3IoKSwg
c2VlIHRoZSBjb21tZW50IGFib3ZlLgogICAgIHN0YXRpYyBIYXNoU2V0PFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEKj4qIGFsbENvbnRleHRzKCk7CkBAIC0xNDIsNiArMTQ5LDggQEAgcHJpdmF0ZToK
IAogICAgIE93blB0cjxTb2xpZEZpbGxTaGFkZXI+IG1fc29saWRGaWxsU2hhZGVyOwogICAgIE93
blB0cjxUZXhTaGFkZXI+IG1fdGV4U2hhZGVyOworICAgIE93blB0cjxCaWN1YmljU2hhZGVyPiBt
X2JpY3ViaWNTaGFkZXI7CisgICAgT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVy
PiA+IG1fY29udm9sdXRpb25TaGFkZXJzOwogCiAgICAgVGV4dHVyZUhhc2hNYXAgbV90ZXh0dXJl
czsKIApAQCAtMTUwLDggKzE1OSwxMyBAQCBwcml2YXRlOgogICAgIE93blB0cjxMb29wQmxpbm5T
b2xpZEZpbGxTaGFkZXI+IG1fbG9vcEJsaW5uSW50ZXJpb3JTaGFkZXI7CiAgICAgT3duUHRyPExv
b3BCbGlublNvbGlkRmlsbFNoYWRlcj4gbV9sb29wQmxpbm5FeHRlcmlvclNoYWRlcjsKICAgICBi
b29sIG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlc1N1cHBvcnRlZDsKKworICAgIFdURjo6VmVjdG9y
PFJlZlB0cjxEcmF3aW5nQnVmZmVyPiA+IG1fb2Zmc2NyZWVuQnVmZmVyczsKIH07CiAKK2NvbnN0
IGZsb2F0IGNNYXhTaWdtYSA9IDQuMGY7Citjb25zdCBpbnQgY01heEtlcm5lbFdpZHRoID0gMjU7
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gODEyNzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4
dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI1LDYgKzEwMjUsMTQgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KAogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BV
KCkpIHsKKyAgICAgICAgR0xFUzJDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dCgpLT5n
cHVDYW52YXMoKTsKKyAgICAgICAgY2FudmFzLT5zZXRTaGFkb3dPZmZzZXQoc2l6ZSk7CisgICAg
ICAgIGNhbnZhcy0+c2V0U2hhZG93Qmx1cihibHVyRmxvYXQpOworICAgICAgICBjYW52YXMtPnNl
dFNoYWRvd0NvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKKyAgICAgICAgY2FudmFzLT5zZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAg
ICB9CisKICAgICAvLyBEZXRlY3Qgd2hlbiB0aGVyZSdzIG5vIGVmZmVjdGl2ZSBzaGFkb3cgYW5k
IGNsZWFyIHRoZSBsb29wZXIuCiAgICAgaWYgKCFzaXplLndpZHRoKCkgJiYgIXNpemUuaGVpZ2h0
KCkgJiYgIWJsdXJGbG9hdCkgewogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RHJhd0xv
b3BlcigwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxh
dGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gODEyNzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDMsOCArNzAzLDcgQEAgdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjphcHBseUFudGlBbGlhcwogCiBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6
OmNhbkFjY2VsZXJhdGUoKSBjb25zdAogewotICAgIHJldHVybiAhbV9zdGF0ZS0+bV9maWxsU2hh
ZGVyIC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIGZpbGwgZ3JhZGllbnQgb3IgcGF0dGVybi4K
LSAgICAgICAgJiYgIW1fc3RhdGUtPm1fbG9vcGVyOyAvLyBDYW4ndCBhY2NlbGVyYXRlIHdpdGgg
YSBzaGFkb3cuCisgICAgcmV0dXJuICFtX3N0YXRlLT5tX2ZpbGxTaGFkZXI7IC8vIENhbid0IGFj
Y2VsZXJhdGUgd2l0aCBhIGZpbGwgZ3JhZGllbnQgb3IgcGF0dGVybi4KIH0KIAogYm9vbCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpjYW52YXNDbGlwQXBwbGllZCgpIGNvbnN0CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA4MTI3OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE4IEBACisyMDExLTAzLTE2ICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIENhbnZhczJEIEdQVSBhY2NlbGVyYXRpb24gc2hvdWxkIHN1cHBvcnQgc2hhZG93cworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0NzYKKworICAg
ICAgICAqIGZhc3QvY2FudmFzL3NjcmlwdC10ZXN0cy9jYW52YXMtdHJhbnNmb3Jtcy1maWxsUmVj
dC1zaGFkb3cuanM6CisgICAgICAgIChzaG91bGRCZUFyb3VuZCk6CisgICAgICAgIFdpZGVuIHRo
ZSB0aHJlc2hvbGQgZm9yIHRoaXMgdGVzdCwgd2hpY2ggZG9lc24ndCBzZWVtIHRvIGFsbG93IGZv
cgorICAgICAgICBhIHRydWUgR2F1c3NpYW4gYmx1ciBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisgICAgICAgIFVwZGF0
ZSBzb21lIHRlc3RzIHdoaWNoIGFyZSBub3cgcGFzc2luZyBvbiBHUFUsIGFuZCBzb21lIHdoaWNo
IHRpbWUgb3V0IAorICAgICAgICBkdWUgdG8gTWVzYSBzbG93bmVzcy4KKwogMjAxMS0wMy0xNiAg
RGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgbyBDbGVhbmVkIHVw
IHRlc3RfZXhwZWN0YXRpb24gdG8gcmVtb3ZlIGl0ZW1zIGR1ZSB0byBuZXcgYmFzZWxpbmVzCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9zY3JpcHQtdGVzdHMvY2FudmFzLXRyYW5zZm9y
bXMtZmlsbFJlY3Qtc2hhZG93LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3NjcmlwdC10ZXN0cy9jYW52YXMtdHJhbnNmb3Jtcy1maWxsUmVjdC1zaGFkb3cuanMJKHJl
dmlzaW9uIDgxMjc5KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvc2NyaXB0LXRlc3RzL2Nh
bnZhcy10cmFuc2Zvcm1zLWZpbGxSZWN0LXNoYWRvdy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTks
NyArMTksNyBAQCBmdW5jdGlvbiBzaG91bGRCZUFyb3VuZChhLCBiKQogICAgICAgICBldmFsQSA9
IGU7CiAgICAgfQogCi0gICAgaWYgKE1hdGguYWJzKGV2YWxBIC0gYikgPCAxMCkKKyAgICBpZiAo
TWF0aC5hYnMoZXZhbEEgLSBiKSA8IDIwKQogICAgICAgICBwcmludCgiUEFTUyAiICsgYSArICIg
aXMgYXJvdW5kICIgKyBiICwgImdyZWVuIikKICAgICBlbHNlCiAgICAgICAgIHByaW50KCJGQUlM
ICIgKyBhICsgIiBpcyBub3QgYXJvdW5kICIgKyBiICsgIiAoYWN0dWFsOiAiICsgZXZhbEEgKyAi
KSIsICJyZWQiKTsKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhw
ZWN0YXRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHJldmlzaW9uIDgxMjc5KQorKysgTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xNjY5LDcgKzE2NjksNyBAQCBCVUdDUjI3NTUxIFdJTiA6IGZhc3QvY3NzL3NoYWRvdy1tdWx0
aXBsCiAvLyBXZWJLaXQgbWVyZ2UgNTA3NTY6NTA4MjAsIHBvc3NpYmx5IGR1ZSB0byBXZWJLaXQg
cjUwODA4L3I1MDc4NiBhbmQgQ2hyb21pdW0gcjMxNzE1CiBCVUdDUjI3NTUzIFdJTiA6IGZhc3Qv
dGV4dC9hdHN1aS1wYXJ0aWFsLXNlbGVjdGlvbi5odG1sID0gSU1BR0UKIAotQlVHQ1IyMjcwMCBX
SU4gTElOVVggOiBmYXN0L2NhbnZhcy9jYW52YXMtc2hhZG93Lmh0bWwgPSBURVhUCitCVUdDUjIy
NzAwIENQVSBXSU4gTElOVVggOiBmYXN0L2NhbnZhcy9jYW52YXMtc2hhZG93Lmh0bWwgPSBURVhU
CiAKIC8vIEZhaWx1cmVzIGZyb20gbWVyZ2UgNTA5NzI6NTEwNDIKIC8vIFRoZSB0ZXN0IHJlcXVp
cmVzIERSVC9UZXN0IFNoZWxsIHRvIHN1cHBvcnQgZXJyb3IgcGFnZSBoYW5kbGluZy4KQEAgLTI1
NjAsNyArMjU2MCw3IEBAIEJVR0NSNjE3MzkgV0lOIExJTlVYIERFQlVHIDogYW5pbWF0aW9ucy8K
IC8vIE5ldyB0ZXN0cyBhZGRlZCB3aXRoIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzcyNDcyIGFuZCBmdXJ0aGVyLgogLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MTk4MiBmb3IgbW9yZSBpbmZvLgogQlVHV0s1MjUwOSA6IHN2Zy9jc3MvcmVj
dC1ncmFkaWVudC1zdHJva2Utc2hhZG93LnN2ZyA9IElNQUdFCi1CVUdDUjYzOTIxIExJTlVYIFdJ
TiA6IGZhc3QvY2FudmFzL2NhbnZhcy1maWxsUGF0aC1zaGFkb3cuaHRtbCA9IFRFWFQKK0JVR0NS
NjM5MjEgQ1BVIExJTlVYIFdJTiA6IGZhc3QvY2FudmFzL2NhbnZhcy1maWxsUGF0aC1zaGFkb3cu
aHRtbCA9IFRFWFQKIEJVR0NSNjM5MjEgQ1BVIExJTlVYIFdJTiA6IGZhc3QvY2FudmFzL2NhbnZh
cy1maWxsUGF0aC1ncmFkaWVudC1zaGFkb3cuaHRtbCA9IFRFWFQKIEJVR0NSNjM5MjEgQ1BVIExJ
TlVYIFdJTiA6IGZhc3QvY2FudmFzL2NhbnZhcy1maWxsUGF0aC1wYXR0ZXJuLXNoYWRvdy5odG1s
ID0gVEVYVAogQlVHQ1I2MzkyMSBDUFUgTElOVVggV0lOIDogZmFzdC9jYW52YXMvY2FudmFzLWZp
bGxQYXRoLWFscGhhLXNoYWRvdy5odG1sID0gVEVYVAo=
</data>
<flag name="review"
          id="78187"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>