<?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>88953</bug_id>
          
          <creation_ts>2012-06-12 21:09:58 -0700</creation_ts>
          <short_desc>[chromium] Refactor CCLayerTreeHostCommon: remove root layer special case initialization</short_desc>
          <delta_ts>2012-07-25 13:47:58 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>80622</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zlieber</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>647647</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-12 21:09:58 -0700</bug_when>
    <thetext>In CCLayerTreeHostCommonTest some of the test cases don&apos;t actually initialize renderSurfaceLayerList the same way that the code actually does.  This means the tested scenarios are ever-so-subtly different than practical scenarios.  Furthermore, its been a sore point against code elegance of CCLTH and CCLTHi that the root layer has to initialize junk outside of calcDrawTransforms.

It would be very nice to remove this special casing, so that we can blindly call calculateDrawTransforms for a root layer that may or may not have an existing renderSurface, and receives an empty renderSurfaceLayerList instead of it already being populated with one awkward item.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648086</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-13 08:59:06 -0700</bug_when>
    <thetext>/upvote</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648144</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-13 09:42:09 -0700</bug_when>
    <thetext>I think that CCLTH(i) has this special root layer code because only CCLTH(i) knows about the viewport size.

Were you thinking about just making a different calcDraw entry point where you could pass in the viewport and then abstracting all that surface initialization into CCLTHCommon?

Cleaning up this code would be great.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648194</commentid>
    <comment_count>3</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 10:12:32 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I think that CCLTH(i) has this special root layer code because only CCLTH(i) knows about the viewport size.
&gt; 
&gt; Were you thinking about just making a different calcDraw entry point where you could pass in the viewport and then abstracting all that surface initialization into CCLTHCommon?
&gt; 
&gt; Cleaning up this code would be great.  :)

As a first pass, yeah thats what I had in mind.  In my own words, it would be moving the special case stuff into CCLayerTreeHostCommon.

In the best case, it eventually becomes clear how to generalize without any &quot;if layer==rootLayer&quot; clauses, but that&apos;s probably not possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677317</commentid>
    <comment_count>4</comment_count>
      <attachid>154166</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-24 16:22:19 -0700</bug_when>
    <thetext>Created attachment 154166
Patch

unit tests and manual tests seem OK. I will do more thorough tests of debug mode and release mode after 91417 lands and this patch gets rebased to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677318</commentid>
    <comment_count>5</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-24 16:24:13 -0700</bug_when>
    <thetext>Please note that there might be a part 2 for this, if it works out, which will try to reduce the root layer special-ness from inside of calcDrawTransforms.   This current patch just removes the special-ness from the outside perspective.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678150</commentid>
    <comment_count>6</comment_count>
      <attachid>154166</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-25 09:27:52 -0700</bug_when>
    <thetext>Comment on attachment 154166
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:470
&gt; +        CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize(), m_deviceScaleFactor, updateList, layerRendererCapabilities().maxTextureSize);

style nit: output parameters last, please.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:956
&gt; +    // FIXME: creating a renderSurface on renderSurface1 might not have the intended effect here. do we mean to setForceRenderSurface(true) ??
&gt; +    //        (same FIXME exists in 1 more location.)

Can you investigate both of these tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678296</commentid>
    <comment_count>7</comment_count>
      <attachid>154403</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-25 11:39:38 -0700</bug_when>
    <thetext>Created attachment 154403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678356</commentid>
    <comment_count>8</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-25 12:52:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 154166 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154166&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:470
&gt; &gt; +        CCLayerTreeHostCommon::calculateDrawTransforms(rootLayer, deviceViewportSize(), m_deviceScaleFactor, updateList, layerRendererCapabilities().maxTextureSize);
&gt; 
&gt; style nit: output parameters last, please.

done

&gt; 
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostCommonTest.cpp:956
&gt; &gt; +    // FIXME: creating a renderSurface on renderSurface1 might not have the intended effect here. do we mean to setForceRenderSurface(true) ??
&gt; &gt; +    //        (same FIXME exists in 1 more location.)
&gt; 
&gt; Can you investigate both of these tests?

done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678362</commentid>
    <comment_count>9</comment_count>
      <attachid>154403</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-25 12:58:49 -0700</bug_when>
    <thetext>Comment on attachment 154403
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:394
&gt; +// Should be called just before the recursive calculateDrawTransformsInternal().
&gt; +template&lt;typename LayerType, typename LayerList&gt;
&gt; +void setupRootLayerAndSurfaceForRecursion(LayerType* rootLayer, LayerList&amp; renderSurfaceLayerList, const IntSize&amp; deviceViewportSize)

I had one last thought.  Rather than commenting that this needs to be called at a certain time, why don&apos;t you just make it call calculateDrawTransformsInternal directly.  Then, it could also do all the setup that you duplicate in the calculateDrawTransforms functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678379</commentid>
    <comment_count>10</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-25 13:15:35 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 154403 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154403&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:394
&gt; &gt; +// Should be called just before the recursive calculateDrawTransformsInternal().
&gt; &gt; +template&lt;typename LayerType, typename LayerList&gt;
&gt; &gt; +void setupRootLayerAndSurfaceForRecursion(LayerType* rootLayer, LayerList&amp; renderSurfaceLayerList, const IntSize&amp; deviceViewportSize)
&gt; 
&gt; I had one last thought.  Rather than commenting that this needs to be called at a certain time, why don&apos;t you just make it call calculateDrawTransformsInternal directly.  Then, it could also do all the setup that you duplicate in the calculateDrawTransforms functions.

In part 2 of this, I&apos;m expecting this function to go away.  So, would it be OK to keep it as-is for this patch?  If it turns out not to be possible to totally remove the root layer setup, then I&apos;ll change it at that time to this idea you&apos;re proposing - are you OK with that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678381</commentid>
    <comment_count>11</comment_count>
      <attachid>154403</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-25 13:16:43 -0700</bug_when>
    <thetext>Comment on attachment 154403
Patch

R=me.  Ok, sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678416</commentid>
    <comment_count>12</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-07-25 13:47:58 -0700</bug_when>
    <thetext>Committed r123654: &lt;http://trac.webkit.org/changeset/123654&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154166</attachid>
            <date>2012-07-24 16:22:19 -0700</date>
            <delta_ts>2012-07-25 11:39:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88953-20120724162211.patch</filename>
            <type>text/plain</type>
            <size>68625</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzc5Njg3MjM2OGM5N2Q0
OWI3ZWVkMjExN2JiNWRkZjkxODVlZmExNy4uMjZmYzRiZjNiZGI4OTY0NzM1OWQxYTc3YmUwNjBk
ZGVkZDRmMzBjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA3LTI0ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
UmVmYWN0b3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uOiBtb3ZlIHJvb3QgbGF5ZXIgc3BlY2lhbCBj
YXNlIGluaXRpYWxpemF0aW9uIGludG8gaW50ZXJuYWwgY29kZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4OTUzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IDEgb2YgdHJ5aW5nIHRv
IHJlZHVjZSB0aGUgcm9vdCBsYXllciBzcGVjaWFsCisgICAgICAgIGNhc2UuIFRoaXMgdHJpZXMg
dG8gcmVkdWNlIHRoZSBzcGVjaWFsLW5lc3Mgb2YgdGhlIHJvb3QgbGF5ZXIgZnJvbQorICAgICAg
ICB0aGUgcGVyc3BlY3RpdmUgb2Ygb3V0c2lkZSBjb2RlLgorICAgICAgICAKKyAgICAgICAgQWZ0
ZXIgdGhpcyBwYXRjaCwgY29kZSB0aGF0IHVzZXMgY2FsY0RyYXdUcmFuc2Zvcm1zKCkgbm8gbG9u
Z2VyCisgICAgICAgIG5lZWRzIHRvIGluaXRpYWxpemUgdGhlIHJvb3QgbGF5ZXIncyBzdXJmYWNl
LCBhbmQgbm8gbG9uZ2VyIG5lZWRzCisgICAgICAgIHRvIG1hbnVhbGx5IGFwcGVuZCB0aGUgcm9v
dCBsYXllciB0byB0aGUgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4KKworICAgICAgICBVbml0IHRl
c3RzIHdlcmUgYWxzbyB1cGRhdGVkIChtdWNoIGNsZWFuZXIhKSB0byBhY2NvdW50IGZvciB0aGlz
IGNoYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0
ZUxheWVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0dXBSb290TGF5ZXJBbmRTdXJmYWNlRm9yUmVjdXJzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1v
bi5oOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0Q29tbW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXll
ckxpc3QpOgorCiAyMDEyLTA3LTI0ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFN0b3JlIHRoZSBmdWxsIHllYXIgaW4gR3JlZ29yaWFuRGF0ZVRpbWUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZTA2Y2RhZWI4ZWQ4NjJiODc1MWJhMzQyN2U1
NzRhMTZkMTQyNmU4Mi4uY2E4OTdiNmM3ZDBmY2RiMGRjOWEyYjU1NjcwODlhZDlhMmQ2MGYzMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wNy0yNCAg
U2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIFJlZmFjdG9yIENDTGF5ZXJUcmVlSG9zdENvbW1vbjogbW92ZSByb290IGxheWVyIHNwZWNp
YWwgY2FzZSBpbml0aWFsaXphdGlvbiBpbnRvIGludGVybmFsIGNvZGUuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODk1MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdHMgdXBkYXRlZCB0byBh
Y2NvdW50IGZvciB0aGUgbmV3IGxlc3Mtc3BlY2lhbCByb290IGxheWVyIHNldHVwLgorICAgICAg
ICAgIC0gbW9zdCB0ZXN0IGNhc2VzIGp1c3QgbmVlZGVkIHRvIHJlbW92ZSByb290LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRCb3VuZHMoKSwgY3JlYXRlUmVuZGVyU3VyZmFjZSgpLCBhbmQg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQoKS4KKyAgICAgICAgICAtIHNvbWUgdGVzdCBj
YXNlcyBvcmlnaW5hbGx5IHJlbGllZCBvbiBzZXR0aW5nIHNvbWUgYXdrd2FyZCB1bmNvbnZlbnRp
b25hbCBib3VuZHMgb2YgdGhlIHJvb3RMYXllciB0aGF0IHdlcmUgZGlmZmVyZW50IHRoYW4gdGhl
IHJvb3RMYXllcidzIHJlbmRlclN1cmZhY2UuIHRoZXNlIHRlc3RzIGFyZSB1cGRhdGVkLgorICAg
ICAgICAgIC0gYSBmZXcgbWlub3IgY2xlYW51cHMgb3RoZXJ3aXNlLgorCisgICAgICAgICogdGVz
dHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6ZXhlY3V0
ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6CisgICAgICAgICogdGVzdHMv
Q0NMYXllckl0ZXJhdG9yVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5j
cHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdDo6Y2FsY0Ry
YXdFdGMpOgorCiAyMDEyLTA3LTI0ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIzNDcyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZDJhNzllYjFiZmJlNWY2NmRlMWYyOTBi
ZTU3MTJiZjEwYTZmYTE3NS4uY2RjN2VmNzJmOTliNTMzYzJiNzE4NWJjODA1OThhNGIyZGEyZjM1
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC00NjMsMjIgKzQ2MywxMSBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RM
YXllciwgQ0NUZXh0dXJlVXBkYXRlciYgdQogewogICAgIFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NM
YXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMiKTsKIAotICAgIGlmICghcm9vdExheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpCi0gICAgICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwot
ICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KElu
dFBvaW50KDAsIDApLCBkZXZpY2VWaWV3cG9ydFNpemUoKSkpOwotCiAgICAgTGF5ZXJMaXN0IHVw
ZGF0ZUxpc3Q7Ci0gICAgdXBkYXRlTGlzdC5hcHBlbmQocm9vdExheWVyKTsKLQotICAgIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSogcm9vdFJlbmRlclN1cmZhY2UgPSByb290TGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKLSAgICByb290UmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxpc3QoKTsKIAogICAg
IHsKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxh
eWVyczo6Y2FsY0RyYXdFdGMiKTsKLSAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRl
bnRpdHlNYXRyaXg7Ci0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxl
VHJhbnNmb3JtOwotICAgICAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX2RldmljZVNj
YWxlRmFjdG9yKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJvb3RMYXllciwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0sIGlk
ZW50aXR5TWF0cml4LCB1cGRhdGVMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCks
IGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLCBk
ZXZpY2VWaWV3cG9ydFNpemUoKSwgbV9kZXZpY2VTY2FsZUZhY3RvciwgdXBkYXRlTGlzdCwgbGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplKTsKIAogICAgICAgICBGbG9h
dFJlY3Qgcm9vdFNjaXNzb3JSZWN0KEZsb2F0UG9pbnQoMCwgMCksIHZpZXdwb3J0U2l6ZSgpKTsK
ICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHVwZGF0ZUxpc3QsIHJvb3RTY2lzc29yUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCAzNDM3NjZhNmFkZmRjYzJjZmZhMWIzMGM4YWVm
NmU4ZDcxZGY4ZGRiLi5hMGIxMjc0Nzg5YTdmYmI5MmZiZmNhYjBmMmZmNGM2ZTE4NmRlYjk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTM5OSw2ICsz
OTksMjAgQEAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY29tcHV0ZVNjcm9sbENvbXBlbnNhdGlv
bk1hdHJpeEZvckNoaWxkcmVuKENDTGF5ZXJJbXBsKgogICAgIHJldHVybiBuZXh0U2Nyb2xsQ29t
cGVuc2F0aW9uTWF0cml4OwogfQogCisvLyBTaG91bGQgYmUgY2FsbGVkIGp1c3QgYmVmb3JlIHRo
ZSByZWN1cnNpdmUgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbCgpLgordGVtcGxhdGU8
dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3Q+Cit2b2lkIHNldHVwUm9vdExh
eWVyQW5kU3VyZmFjZUZvclJlY3Vyc2lvbihMYXllclR5cGUqIHJvb3RMYXllciwgTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBJbnRTaXplJiBkZXZpY2VWaWV3cG9ydFNp
emUpCit7CisgICAgaWYgKCFyb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgcm9v
dExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisKKyAgICByb290TGF5ZXItPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBkZXZpY2VW
aWV3cG9ydFNpemUpKTsKKyAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y2xlYXJMYXll
ckxpc3QoKTsKKworICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1wdHkoKSk7
CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKTsKK30KKwogLy8g
UmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5v
ZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIGNs
aXBSZWN0cywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5
cGUsIHR5cGVuYW1lIExheWVyTGlzdCwgdHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGUsIHR5cGVu
YW1lIExheWVyU29ydGVyPgpAQCAtODgwLDIyICs4OTQsMzIgQEAgc3RhdGljIHZvaWQgY2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsKGNvbnN0IExheWVyTGlzdCYgcmVuZGVy
U3VyZmEKICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3JtcyhMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKQordm9pZCBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKExheWVyQ2hyb21p
dW0qIHJvb3RMYXllciwgY29uc3QgSW50U2l6ZSYgZGV2aWNlVmlld3BvcnRTaXplLCBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7Ci0gICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggc2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4OwotICAgIEludFJlY3QgZHJhd2Fi
bGVDb250ZW50UmVjdDsKLSAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0ludGVy
bmFsPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiwgUmVuZGVy
U3VyZmFjZUNocm9taXVtLCB2b2lkPihsYXllciwgcm9vdExheWVyLCBwYXJlbnRNYXRyaXgsIGZ1
bGxIaWVyYXJjaHlNYXRyaXgsIHNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeCwKKyAgICBJbnRSZWN0
IHRvdGFsRHJhd2FibGVDb250ZW50UmVjdDsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VTY2FsZVRy
YW5zZm9ybTsKKyAgICBkZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rv
cik7CisKKyAgICBzZXR1cFJvb3RMYXllckFuZFN1cmZhY2VGb3JSZWN1cnNpb248TGF5ZXJDaHJv
bWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+ID4ocm9vdExheWVyLCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBkZXZpY2VWaWV3cG9ydFNpemUpOworCisgICAgV2ViQ29yZTo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0b3I8UmVmUHRy
PExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZD4ocm9vdExheWVy
LCByb290TGF5ZXIsIGRldmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0
KCksIHRydWUsIDAsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJMaXN0LCAw
LCBtYXhUZXh0dXJlU2l6ZSwgZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdExheWVy
LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLCAwLCBtYXhUZXh0dXJlU2l6ZSwgdG90YWxE
cmF3YWJsZUNvbnRlbnRSZWN0KTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwqIHJv
b3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29u
c3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxD
Q0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwq
PiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVT
aXplKQordm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
KENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IEludFNpemUmIGRldmljZVZpZXdwb3J0U2l6
ZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1
cmVTaXplKQogewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBlbnNhdGlv
bk1hdHJpeDsKLSAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3Q7Ci0gICAgV2ViQ29yZTo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5
ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4obGF5ZXIsIHJvb3RMYXll
ciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCBzY3JvbGxDb21wZW5zYXRpb25N
YXRyaXgsCisgICAgSW50UmVjdCB0b3RhbERyYXdhYmxlQ29udGVudFJlY3Q7CisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggZGV2aWNlU2NhbGVUcmFuc2Zvcm07CisgICAgZGV2aWNlU2NhbGVUcmFuc2Zvcm0uc2Nh
bGUoZGV2aWNlU2NhbGVGYWN0b3IpOworCisgICAgc2V0dXBSb290TGF5ZXJBbmRTdXJmYWNlRm9y
UmVjdXJzaW9uPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiA+KHJvb3RMYXllciwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGV2aWNlVmlld3BvcnRTaXplKTsKKworICAgIFdlYkNv
cmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxD
Q0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KHJvb3RMYXllciwg
cm9vdExheWVyLCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLCB0cnVlLCAw
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyTGlzdCwgbGF5ZXJTb3J0ZXIsIG1heFRleHR1
cmVTaXplLCBkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+
bGF5ZXJMaXN0KCksIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSwgdG90YWxEcmF3YWJsZUNv
bnRlbnRSZWN0KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKaW5kZXggZTVhNGZlYzljMTU2ZTRm
NTEwMTllNmY2NmJmNmExOGM4NjA2M2IyYy4uOTA0ODIyNDdjYTdkNTE5ZjAzZjVkYzI4YWVlZGQx
OTQ3NWM0MDM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKQEAg
LTQxLDggKzQxLDggQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbW9uIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJn
ZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAotICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qLCBMYXllckNocm9taXVtKiByb290TGF5ZXIs
IGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29u
c3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVT
aXplKTsKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xheWVySW1w
bCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5ZXJT
b3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zKExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgSW50U2l6ZSYgZGV2
aWNlVmlld3BvcnRTaXplLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBpbnQgbWF4VGV4dHVyZVNp
emUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKENDTGF5ZXJJbXBs
KiByb290TGF5ZXIsIGNvbnN0IEludFNpemUmIGRldmljZVZpZXdwb3J0U2l6ZSwgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsKIAogICAgIHN0YXRpYyB2
b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPENDTGF5ZXJJbXBsKj4m
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0
KTsKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29uc3Qg
RmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcAppbmRleCA1OThlYzYzOTdiOWM0ZTgwNTRmZTE0OTQ1OTkxOTI4YmMzYjczOWY5
Li41ZTM1MDZhODBjNGZiMjc2NDEyNDJlYjcyNGRkYjU0NGM4Y2Y5ZmRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjUyLDE5ICsyNTIsOSBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclN1cmZhY2VMYXllckxpc3QoQ0NMYXll
ckxpc3QmIHJlbmRlclN1cgogICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmlzRW1w
dHkoKSk7CiAgICAgQVNTRVJUKG1fcm9vdExheWVySW1wbCk7CiAKLSAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChtX3Jvb3RMYXllckltcGwuZ2V0KCkpOwotCi0gICAgaWYgKCFtX3Jv
b3RMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKSkKLSAgICAgICAgbV9yb290TGF5ZXJJbXBsLT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNl
KCktPmNsZWFyTGF5ZXJMaXN0KCk7Ci0gICAgbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNl
KCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgZGV2aWNlVmlld3BvcnRTaXpl
KCkpKTsKLQogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJjYyIsICJDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjYWxjRHJhd0V0YyIpOwotICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKLSAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlU2Nh
bGVUcmFuc2Zvcm07Ci0gICAgICAgIGRldmljZVNjYWxlVHJhbnNmb3JtLnNjYWxlKG1fZGV2aWNl
U2NhbGVGYWN0b3IpOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zKG1fcm9vdExheWVySW1wbC5nZXQoKSwgbV9yb290TGF5ZXJJbXBsLmdldCgp
LCBkZXZpY2VTY2FsZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSwgJm1f
bGF5ZXJTb3J0ZXIsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7
CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMo
bV9yb290TGF5ZXJJbXBsLmdldCgpLCBkZXZpY2VWaWV3cG9ydFNpemUoKSwgbV9kZXZpY2VTY2Fs
ZUZhY3RvciwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgJm1fbGF5ZXJTb3J0ZXIsIGxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAgICAgdHJhY2tEYW1h
Z2VGb3JBbGxTdXJmYWNlcyhtX3Jvb3RMYXllckltcGwuZ2V0KCksIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFt
YWdlVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFn
ZVRyYWNrZXJUZXN0LmNwcAppbmRleCA5YWE0MTIwOTAxOWEzMDE5OTczMjU2MWY0YzUxY2EyMDY0
NDEwODg0Li5lNTQ1ZDgxNDZmODM4MTFmYWNjZDViMWM3ZTBmYjQ5NTQ5YWE3OGJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5j
cHAKQEAgLTQ2LDggKzQ2LDYgQEAgbmFtZXNwYWNlIHsKIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCogcm9vdCwgVmVjdG9yPENDTGF5
ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgQ0NMYXllclNvcnRlciBs
YXllclNvcnRlcjsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
LSAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKIAogICAgIC8vIFNhbml0eSBjaGVjazogVGhlIHRlc3QgaXRz
ZWxmIHNob3VsZCBjcmVhdGUgdGhlIHJvb3QgbGF5ZXIncyByZW5kZXIgc3VyZmFjZSwgc28KQEAg
LTU2LDkgKzU0LDcgQEAgdm9pZCBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KENDTGF5ZXJJbXBsKiByb290LCBWZWN0b3I8Q0NMYXkKICAgICBBU1NFUlRfVFJVRShy
b290LT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIEFTU0VSVF9GQUxTRShyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LnNpemUoKSk7CiAKLSAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5ZXJM
aXN0KCk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdCk7Ci0gICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdCwgcm9vdC0+
Ym91bmRzKCksIDEsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCmluZGV4IDc2ZGM0MjVhYTlmNmIx
ZTI5NDQwZTFjYWY1YWM4MDllMjQ3NjlmYzUuLmY0ZGIyMDBlOGZhNmY3MmVmODRkZGQ2MzQwZTE2
NTU2MTlmY2JjNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllckl0ZXJhdG9yVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVySXRlcmF0b3JUZXN0LmNwcApAQCAtMTQ3LDEyICsxNDcsNyBAQCBURVNUKENDTGF5ZXJJ
dGVyYXRvclRlc3QsIHNpbXBsZVRyZWUpCiAgICAgcm9vdExheWVyLT5hZGRDaGlsZChmb3VydGgp
OwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKLSAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLmdl
dCgpLCByb290TGF5ZXIuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwg
cm9vdExheWVyLT5ib3VuZHMoKSwgMSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgMjU2KTsKICAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRl
bnRSZWN0KCkpOwogCiAgICAgaXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKQEAgLTE5NSwxMiArMTkwLDcgQEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBjb21w
bGV4VHJlZSkKICAgICByb290MjMtPmFkZENoaWxkKHJvb3QyMzEpOwogCiAgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKLSAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLT5ib3VuZHMo
KSwgMSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgMjU2KTsKICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAg
aXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKQEAgLTI1NiwxMyAr
MjQ2LDcgQEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4VHJlZU11bHRpU3VyZmFj
ZSkKICAgICByb290MjMtPmFkZENoaWxkKHJvb3QyMzEpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwotICAgIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMjU2KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLT5ib3VuZHMo
KSwgMSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgMjU2KTsKICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAg
aXRlcmF0ZUJhY2tUb0Zyb250KCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QuY3BwCmluZGV4IDg2YWY0MGEwMjliNDIwYTVmMGE2ZTAzNzg5ZDhlZjYzNTczNTkyZDEuLmQy
ZDY1OWJhYjE0YTdkODBmMzc2NWVlNDQzZGQyMmRhNmViODY2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LmNwcApAQCAtNzUsMjUgKzc1LDI1IEBAIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiByb290TGF5ZXIpCiB7CiAgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4
dHVyZVNpemUgPSA1MTI7CiAKLSAgICBBU1NFUlQocm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkp
OworICAgIC8vIFdlIGFyZSBwcm9iYWJseSBub3QgdGVzdGluZyB3aGF0IGlzIGludGVuZGVkIGlm
IHRoZSByb290TGF5ZXIgYm91bmRzIGFyZSBlbXB0eS4KICAgICBBU1NFUlQoIXJvb3RMYXllci0+
Ym91bmRzKCkuaXNFbXB0eSgpKTsKLSAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0
Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCByb290TGF5ZXItPmJvdW5kcygpKSk7Ci0g
ICAgCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhy
b290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1t
eVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
KHJvb3RMYXllciwgcm9vdExheWVyLT5ib3VuZHMoKSwgMSwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiB9CiAKIHZv
aWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1w
bCogcm9vdExheWVyKQogewogICAgIC8vIE5vdGU6IHRoaXMgdmVyc2lvbiBza2lwcyBsYXllciBz
b3J0aW5nLgorCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAg
ICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAg
IFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXMocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisKKyAgICAvLyBXZSBhcmUgcHJvYmFibHkgbm90IHRlc3Rp
bmcgd2hhdCBpcyBpbnRlbmRlZCBpZiB0aGUgcm9vdExheWVyIGJvdW5kcyBhcmUgZW1wdHkuCisg
ICAgQVNTRVJUKCFyb290TGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJvb3RMYXll
ci0+Ym91bmRzKCksIDEsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgMCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQogCkBAIC0xMjksOCArMTI5LDYgQEAg
UGFzc093blB0cjxDQ0xheWVySW1wbD4gY3JlYXRlVHJlZUZvckZpeGVkUG9zaXRpb25UZXN0cygp
CiAgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRHcmFuZENoaWxkLnJlbGVhc2UoKSk7CiAg
ICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsKICAgICByb290LT5hZGRD
aGlsZChjaGlsZC5yZWxlYXNlKCkpOwotICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
LSAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgcm9vdC0+Ym91bmRzKCkpKTsKIAogICAgIHJldHVybiByb290LnJlbGVhc2Uo
KTsKIH0KQEAgLTE1NSw3ICsxNTMsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeVRyYW5zZm9ybXNGb3JOb09wTGF5ZXIpCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+
IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0gICAgcGFyZW50
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CiAg
ICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOwogCkBAIC0xNzYsNyArMTczLDYgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5
ZXIpCiB7CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7Ci0g
ICAgbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKIAogICAgIC8vIENhc2UgMTogc2V0dGlu
ZyB0aGUgc3VibGF5ZXIgdHJhbnNmb3JtIHNob3VsZCBub3QgYWZmZWN0IHRoaXMgbGF5ZXIncyBk
cmF3IHRyYW5zZm9ybSBvciBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtLgogICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGFyYml0cmFyeVRyYW5zbGF0aW9uOwpAQCAtMjQ1LDcgKzI0MSw2IEBAIFRF
U1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbXBsZUhp
ZXJhcmNoeSkKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0gTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKICAgICBjaGlsZC0+YWRkQ2hpbGQoZ3Jh
bmRDaGlsZCk7CiAKQEAgLTMyNyw3ICszMjIsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVSZW5kZXJTdXJmYWNlKQogICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdyYW5kQ2hpbGQg
PSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7Ci0g
ICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcGFyZW50LT5hZGRDaGlsZChj
aGlsZCk7CiAgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOwogCkBAIC00MDgsMTIgKzQw
MiwxMCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENs
aXApCiAgICAgSW50UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOwogICAgIEludFJlY3Qg
Z3JhbmRDaGlsZFJlY3QoNSwgNSwgMTUwLCAxNTApOwogCi0gICAgcm9vdC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOwogICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwog
ICAgIHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290UmVjdC55
KCkpKTsKICAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290
UmVjdC5oZWlnaHQoKSkpOwogICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICBy
b290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
SW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKIAogICAgIGNo
aWxkLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICBjaGlsZC0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CkBAIC00MzYs
MTQgKzQyOCw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RX
aXRoQ2xpcCkKIAogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CiAgICAgewotICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJp
eDsKLSAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gbGF5ZXJMaXN0OwogICAgICAgICBpbnQg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKICAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNv
cnRlcjsKLQotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgp
KTsKLQotICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15
TWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QtPmJvdW5kcygpLCAxLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAg
ICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teURhbWFnZVJlY3QpOwpAQCAtNTc1LDEyICs1NjIsMTAgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwQW5kU3BhY2VUcmFuc2Zvcm0p
CiAgICAgSW50UmVjdCBjaGlsZFJlY3QoMTAsIDEwLCA1MCwgNTApOwogICAgIEludFJlY3QgZ3Jh
bmRDaGlsZFJlY3QoNSwgNSwgMTUwLCAxNTApOwogCi0gICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOwogICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwogICAg
IHJvb3QtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQocm9vdFJlY3QueCgpLCByb290UmVjdC55KCkp
KTsKICAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVj
dC5oZWlnaHQoKSkpOwogICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKLSAgICByb290
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgSW50
U2l6ZShyb290UmVjdC53aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSkpKTsKIAogICAgIGNoaWxk
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICBjaGlsZC0+c2V0UG9zaXRp
b24oRmxvYXRQb2ludChjaGlsZFJlY3QueCgpLCBjaGlsZFJlY3QueSgpKSk7CkBAIC02MTEsMTQg
KzU5Niw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRo
Q2xpcEFuZFNwYWNlVHJhbnNmb3JtKQogCiAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdDsKICAgICB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OwotICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBsYXllckxpc3Q7
CiAgICAgICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwogICAgICAgICBDQ0xheWVy
U29ydGVyIGxheWVyU29ydGVyOwotCi0gICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHJvb3QuZ2V0KCkpOwotCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsICZsYXll
clNvcnRlciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC0+Ym91bmRzKCks
IDEsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsICZsYXllclNvcnRlciwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CiAKICAgICAgICAgRmxvYXRSZWN0IGR1bW15RGFtYWdlUmVjdDsKICAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15RGFtYWdlUmVjdCk7CkBAIC03MjksNyArNzA5LDYgQEAg
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVwbGlj
YSkKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGRSZXBsaWNhID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3ND
b250ZW50PiBncmFuZENoaWxkID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2Vk
RHJhd3NDb250ZW50KCkpOwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAg
IHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOwogICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxk
KTsKICAgICBjaGlsZC0+c2V0UmVwbGljYUxheWVyKGNoaWxkUmVwbGljYS5nZXQoKSk7CkBAIC03
OTEsNyArNzcwLDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFu
c2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJhcmNoeSkKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gZ3JhbmRDaGlsZE9mUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0
cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZE9mUlMxID0g
YWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwogICAg
IFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZE9m
UlMyID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkp
OwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHBhcmVudC0+YWRkQ2hp
bGQocmVuZGVyU3VyZmFjZTEpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGRPZlJvb3QpOwog
ICAgIHJlbmRlclN1cmZhY2UxLT5hZGRDaGlsZChjaGlsZE9mUlMxKTsKQEAgLTk0MiwxNiArOTIw
LDE1IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFj
ZUxpc3RGb3JDbGlwTGF5ZXIpCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5k
ZXJTdXJmYWNlMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7
CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQoMzAs
IDMwKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7CisgICAgLy8gRklYTUU6IGNy
ZWF0aW5nIGEgcmVuZGVyU3VyZmFjZSBvbiByZW5kZXJTdXJmYWNlMSBtaWdodCBub3QgaGF2ZSB0
aGUgaW50ZW5kZWQgZWZmZWN0IGhlcmUuIGRvIHdlIG1lYW4gdG8gc2V0Rm9yY2VSZW5kZXJTdXJm
YWNlKHRydWUpID8/CisgICAgLy8gICAgICAgIChzYW1lIEZJWE1FIGV4aXN0cyBpbiAxIG1vcmUg
bG9jYXRpb24uKQogICAgIHBhcmVudC0+YWRkQ2hpbGQocmVuZGVyU3VyZmFjZTEpOwogICAgIHJl
bmRlclN1cmZhY2UxLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcmVuZGVyU3VyZmFjZTEt
PmFkZENoaWxkKGNoaWxkKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5n
ZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVu
dC5nZXQoKSwgcGFyZW50LT5ib3VuZHMoKSwgMSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OwogICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJl
Y3QoKSk7CkBAIC05NTksOCArOTM2LDkgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZvckNsaXBMYXllcikKICAgICAvLyBUaGUgY2hpbGQg
bGF5ZXIncyBjb250ZW50IGlzIGVudGlyZWx5IG91dHNpZGUgdGhlIHBhcmVudCdzIGNsaXAgcmVj
dCwgc28gdGhlIGludGVybWVkaWF0ZQogICAgIC8vIHJlbmRlciBzdXJmYWNlIHNob3VsZCBoYXZl
IGJlZW4gcmVtb3ZlZC4gUmVuZGVyIHN1cmZhY2VzIHdpdGhvdXQgY2hpbGRyZW4gb3IgdmlzaWJs
ZQogICAgIC8vIGNvbnRlbnQgYXJlIHVuZXhwZWN0ZWQgYXQgZHJhdyB0aW1lIChlLmcuIHdlIG1p
Z2h0IHRyeSB0byBjcmVhdGUgYSBjb250ZW50IHRleHR1cmUgb2Ygc2l6ZSAwKS4KKyAgICBBU1NF
UlRfVFJVRShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUX0ZBTFNFKHJlbmRl
clN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCkpOwotICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSwgMFUpOworICAgIEVYUEVDVF9FUSgxVSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeVJlbmRlclN1cmZhY2VMaXN0Rm9yVHJhbnNwYXJlbnRDaGlsZCkKQEAgLTk3NCwyMyArOTUy
LDI1IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFj
ZUxpc3RGb3JUcmFuc3BhcmVudENoaWxkKQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcocmVuZGVyU3VyZmFjZTEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludDo6emVybygpLCBGbG9hdFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAsIDEwKSwg
ZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludDo6emVybygpLCBGbG9hdFBv
aW50Ojp6ZXJvKCksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOwogCi0gICAgcGFyZW50LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CisgICAgLy8gRklYTUU6IGNyZWF0aW5nIGEgcmVuZGVyU3VyZmFj
ZSBvbiByZW5kZXJTdXJmYWNlMSBtaWdodCBub3QgaGF2ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IGhl
cmUuIGRvIHdlIG1lYW4gdG8gc2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpID8/CisgICAgLy8g
ICAgICAgIChzYW1lIEZJWE1FIGV4aXN0cyBpbiAxIG1vcmUgbG9jYXRpb24uKQogICAgIHBhcmVu
dC0+YWRkQ2hpbGQocmVuZGVyU3VyZmFjZTEpOwogICAgIHJlbmRlclN1cmZhY2UxLT5jcmVhdGVS
ZW5kZXJTdXJmYWNlKCk7CiAgICAgcmVuZGVyU3VyZmFjZTEtPmFkZENoaWxkKGNoaWxkKTsKIAog
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LT5ib3Vu
ZHMoKSwgMSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAK
ICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVj
dHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRl
bnRSZWN0KCkpOwogCiAgICAgLy8gU2luY2UgdGhlIGxheWVyIGlzIHRyYW5zcGFyZW50LCByZW5k
ZXJTdXJmYWNlMS0+cmVuZGVyU3VyZmFjZSgpIHNob3VsZCBub3QgaGF2ZSBnb3R0ZW4gYWRkZWQg
YW55d2hlcmUuCiAgICAgLy8gQWxzbywgdGhlIGRyYXdhYmxlIGNvbnRlbnQgcmVjdCBzaG91bGQg
bm90IGhhdmUgYmVlbiBleHRlbmRlZCBieSB0aGUgY2hpbGRyZW4uCi0gICAgRVhQRUNUX0VRKHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCksIDBVKTsKLSAgICBFWFBF
Q1RfRVEocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDBVKTsKLSAgICBFWFBFQ1RfRVEo
cGFyZW50LT5kcmF3YWJsZUNvbnRlbnRSZWN0KCksIEludFJlY3QoKSk7CisgICAgQVNTRVJUX1RS
VUUocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUSgwVSwgcGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDFVLCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+aWQo
KSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7CisgICAgRVhQRUNUX0VRKEludFJl
Y3QoKSwgcGFyZW50LT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwogfQogCiBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFjZSkKQEAgLTEwMDUsMjQg
Kzk4NSwyOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVu
ZGVyU3VyZmFjZSkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJlbmRlclN1cmZh
Y2UxLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQ6Onpl
cm8oKSwgRmxvYXRQb2ludDo6emVybygpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKICAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRQb2ludDo6emVybygpLCBJ
bnRTaXplKDEwLCAxMCksIGZhbHNlKTsKIAotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOwotICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0
KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKHJl
bmRlclN1cmZhY2UxKTsKICAgICByZW5kZXJTdXJmYWNlMS0+YWRkQ2hpbGQoY2hpbGQpOwogCisg
ICAgLy8gU2FuaXR5IGNoZWNrIGJlZm9yZSB0aGUgYWN0dWFsIHRlc3QKKyAgICBFWFBFQ1RfRkFM
U0UocGFyZW50LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9GQUxTRShyZW5kZXJTdXJm
YWNlMS0+cmVuZGVyU3VyZmFjZSgpKTsKKwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUx
MjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBh
cmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
KHBhcmVudC5nZXQoKSwgcGFyZW50LT5ib3VuZHMoKSwgMSwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKKyAgICAvLyBUaGUgcm9vdCBsYXllciBhbHdheXMg
Y3JlYXRlcyBhIHJlbmRlclN1cmZhY2UKKyAgICBFWFBFQ1RfVFJVRShwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKSk7CiAgICAgRVhQRUNUX1RSVUUocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2Uo
KSk7Ci0gICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAxVSk7Cisg
ICAgRVhQRUNUX0VRKDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CiAKICAgICBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmNsZWFyKCk7CiAgICAgcmVuZGVyU3VyZmFjZTEtPnNldEZv
cmNlUmVuZGVyU3VyZmFjZShmYWxzZSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC0+Ym91bmRzKCksIDEs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIEVYUEVD
VF9UUlVFKHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfRkFMU0UocmVuZGVy
U3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSk7Ci0gICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VM
YXllckxpc3Quc2l6ZSgpLCAwVSk7CisgICAgRVhQRUNUX0VRKDFVLCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LnNpemUoKSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5U2Nyb2xsQ29tcGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aERpcmVjdENvbnRh
aW5lcikKQEAgLTE2NDYsNyArMTYzMCw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBncmVhdEdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMSA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMiA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBw
YXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxk
KTsKICAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CiAgICAgZ3JhbmRDaGlsZC0+YWRk
Q2hpbGQoZ3JlYXRHcmFuZENoaWxkKTsKQEAgLTE2NjksMTQgKzE2NTIsOCBAQCBURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykK
ICAgICBncmVhdEdyYW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40KTsKIAogICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSA9IDUxMjsKLQotICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290
LWxheWVyIHNwZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxs
IGhhdmUgdG8gZml4IGl0IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0g
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKLQotICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgp
LCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50Lmdl
dCgpLCBwYXJlbnQtPmJvdW5kcygpLCAxLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teU1h
eFRleHR1cmVTaXplKTsKIAogICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CiAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgp
KTsKQEAgLTE3MjQsMTQgKzE3MDEsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeUNsaXBSZWN0Q3VsbHNTdXJmYWNlV2l0aG91dFZpc2libGVDb250ZW50KQogICAgIGdy
YW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40KTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKLQotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVu
dC0+Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQu
Z2V0KCkpOwotCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC0+Ym91bmRzKCksIDEsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gV2l0aG91dCBhbiBhbmlt
YXRpb24sIHdlIHNob3VsZCBjdWxsIGNoaWxkIGFuZCBncmFuZENoaWxkIGZyb20gdGhlIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuCiAgICAgQVNTRVJUX0VRKDFVLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LnNpemUoKSk7CkBAIC0xNzQ0LDEzICsxNzE1LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzU3VyZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVu
dCkKICAgICBjaGlsZC0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CiAgICAgZ3JhbmRDaGlsZC0+Y2xl
YXJSZW5kZXJTdXJmYWNlKCk7CiAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5jbGVhcigpOwot
ICAgIGR1bW15TGF5ZXJMaXN0LmNsZWFyKCk7Ci0KLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKIAotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQtPmJvdW5k
cygpLCAxLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKIAog
ICAgIC8vIFdpdGggYW4gYW5pbWF0aW5nIHRyYW5zZm9ybSwgd2Ugc2hvdWxkIGtlZXAgY2hpbGQg
YW5kIGdyYW5kQ2hpbGQgaW4gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QuCiAgICAgQVNTRVJU
X0VRKDNVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CkBAIC0xNzc3LDcgKzE3NDMs
NiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeURyYXdhYmxlQ29udGVu
dFJlY3RGb3JMYXllcnMpCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGQzID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5k
Q2hpbGQ0ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAKLSAgICBwYXJlbnQtPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKICAgICBjaGlsZC0+
YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOwogICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMik7
CkBAIC0xODAyLDE0ICsxNzY3LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2
ZXJpZnlEcmF3YWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXJzKQogICAgIGdyYW5kQ2hpbGQ0LT5zZXRP
cGFjaXR5KDAuNSk7CiAKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVt
bXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0KLSAgICAv
LyBGSVhNRTogd2hlbiB3ZSBmaXggdGhpcyAicm9vdC1sYXllciBzcGVjaWFsIGNhc2UiIGJlaGF2
aW9yIGluIENDTGF5ZXJUcmVlSG9zdCwgd2Ugd2lsbCBoYXZlIHRvIGZpeCBpdCBoZXJlLCB0b28u
Ci0gICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHBhcmVudC5nZXQoKSk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LT5ib3VuZHMoKSwgMSwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkp
OwogCkBAIC0xODQxLDcgKzE4MDAsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNlcykKICAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMyA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKICAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlNCA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKIAotICAgIHBh
cmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQp
OwogICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkMSk7CiAgICAgY2hpbGQtPmFkZENoaWxk
KGdyYW5kQ2hpbGQyKTsKQEAgLTE4NzcsMTQgKzE4MzUsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0SXNQcm9wYWdhdGVkQ29ycmVjdGx5VG9TdXJmYWNl
cykKICAgICBncmFuZENoaWxkNC0+c2V0T3BhY2l0eSgwLjUpOwogCiAgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOwotCi0gICAgLy8gRklYTUU6IHdoZW4gd2UgZml4IHRoaXMgInJvb3Qt
bGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBDQ0xheWVyVHJlZUhvc3QsIHdlIHdpbGwg
aGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwotCi0gICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCks
IHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0
KCksIHBhcmVudC0+Ym91bmRzKCksIDEsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TWF4
VGV4dHVyZVNpemUpOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNp
YmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIApAQCAtMTkxMCw3ICsxODYyLDYgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlBbmltYXRpb25zRm9yUmVuZGVyU3VyZmFj
ZUhpZXJhcmNoeSkKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZE9mUm9vdCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZE9mUlMxID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZE9mUlMyID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwotICAgIHBhcmVudC0+Y3JlYXRl
UmVuZGVyU3VyZmFjZSgpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQocmVuZGVyU3VyZmFjZTEpOwog
ICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGRPZlJvb3QpOwogICAgIHJlbmRlclN1cmZhY2UxLT5h
ZGRDaGlsZChjaGlsZE9mUlMxKTsKQEAgLTIzMTYsNyArMjI2Nyw2IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aG91dFByZXNlcnZlczNk
KQogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gZnJvbnRG
YWNpbmdDaGlsZE9mQmFja0ZhY2luZ1N1cmZhY2UgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1
bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRo
Rm9yY2VkRHJhd3NDb250ZW50PiBiYWNrRmFjaW5nQ2hpbGRPZkJhY2tGYWNpbmdTdXJmYWNlID0g
YWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwogCi0g
ICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcGFyZW50LT5hZGRDaGlsZChm
cm9udEZhY2luZ0NoaWxkKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGJhY2tGYWNpbmdDaGlsZCk7
CiAgICAgcGFyZW50LT5hZGRDaGlsZChmcm9udEZhY2luZ1N1cmZhY2UpOwpAQCAtMjM1OCwxMiAr
MjMwOCw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VD
dWxsaW5nV2l0aG91dFByZXNlcnZlczNkKQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcoYmFja0ZhY2luZ0NoaWxkT2ZCYWNrRmFjaW5nU3VyZmFjZS5nZXQoKSwgYmFja2ZhY2VNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJ
bnRTaXplKDEwMCwgMTAwKSwgZmFsc2UpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOwotICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0
KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwotCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC0+Ym91bmRzKCks
IDEsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAg
Ly8gVmVyaWZ5IHdoaWNoIHJlbmRlclN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAgICBFWFBFQ1Rf
RkFMU0UoZnJvbnRGYWNpbmdDaGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTI0MTUsNyArMjM2
MSw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxs
aW5nV2l0aFByZXNlcnZlczNkKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudD4gZHVtbXlSZXBsaWNhTGF5ZXIxID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudD4gZHVtbXlSZXBsaWNhTGF5ZXIyID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwogCi0gICAgcGFyZW50LT5jcmVh
dGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcGFyZW50LT5hZGRDaGlsZChmcm9udEZhY2luZ0NoaWxk
KTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGJhY2tGYWNpbmdDaGlsZCk7CiAgICAgcGFyZW50LT5h
ZGRDaGlsZChmcm9udEZhY2luZ1N1cmZhY2UpOwpAQCAtMjQ2MiwxMiArMjQwNyw4IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNl
cnZlczNkKQogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoYmFja0ZhY2luZ0NoaWxk
T2ZCYWNrRmFjaW5nU3VyZmFjZS5nZXQoKSwgYmFja2ZhY2VNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwg
ZmFsc2UpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5
ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIHBhcmVudC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVu
dC0+Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQu
Z2V0KCkpOwotCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC0+Ym91bmRzKCksIDEsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gVmVyaWZ5IHdoaWNoIHJl
bmRlclN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAgICBFWFBFQ1RfRkFMU0UoZnJvbnRGYWNpbmdD
aGlsZC0+cmVuZGVyU3VyZmFjZSgpKTsKQEAgLTI1MTIsNyArMjQ1Myw2IEBAIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aEFuaW1hdGluZ1Ry
YW5zZm9ybXMpCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50
PiBhbmltYXRpbmdDaGlsZCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudCgpKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0Nv
bnRlbnQ+IGNoaWxkMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKIAotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHBh
cmVudC0+YWRkQ2hpbGQoY2hpbGQpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQoYW5pbWF0aW5nU3Vy
ZmFjZSk7CiAgICAgYW5pbWF0aW5nU3VyZmFjZS0+YWRkQ2hpbGQoY2hpbGRPZkFuaW1hdGluZ1N1
cmZhY2UpOwpAQCAtMjU0NywxMyArMjQ4Nyw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aEFuaW1hdGluZ1RyYW5zZm9ybXMpCiAgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50
U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUx
MjsKLQotICAgIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0
KEludFBvaW50KCksIHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmFwcGVuZChwYXJlbnQuZ2V0KCkpOwotCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC0+Ym91bmRzKCks
IDEsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVj
dCgpKTsKIApAQCAtMjU5OSw3ICsyNTM0LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoUHJlc2VydmVzM2RGb3JGbGF0dGVuaW4KICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNoaWxkMSA9IGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNoaWxkMiA9IGFkb3B0
UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKIAotICAgIHBh
cmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQoZnJvbnRG
YWNpbmdTdXJmYWNlKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGJhY2tGYWNpbmdTdXJmYWNlKTsK
ICAgICBmcm9udEZhY2luZ1N1cmZhY2UtPmFkZENoaWxkKGNoaWxkMSk7CkBAIC0yNjIxLDEyICsy
NTU1LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1
bGxpbmdXaXRoUHJlc2VydmVzM2RGb3JGbGF0dGVuaW4KICAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBG
bG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSwgZmFs
c2UpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIHBhcmVudC0+cmVu
ZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCksIHBhcmVudC0+
Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChwYXJlbnQuZ2V0
KCkpOwotCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0
dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC0+Ym91bmRzKCksIDEsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgLy8gVmVyaWZ5IHdoaWNoIHJlbmRl
clN1cmZhY2VzIHdlcmUgY3JlYXRlZC4KICAgICBFWFBFQ1RfVFJVRShmcm9udEZhY2luZ1N1cmZh
Y2UtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0yNjcwLDggKzI2MDAsNiBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVMYXllcikKICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CiAKICAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMzQ1KTsKLSAg
ICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAx
MDApKSk7CiAKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAg
ICBGbG9hdFBvaW50IGFuY2hvcigwLCAwKTsKQEAgLTI2ODEsMTAgKzI2MDksOCBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVMYXllcikK
ICAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CiAKICAgICBWZWN0b3I8Q0NMYXllcklt
cGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1
bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LT5i
b3VuZHMoKSwgMSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Np
c3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCBy
ZWN0LgogCiAgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQu
CkBAIC0yNzE3LDggKzI2NDMsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeUhpdFRlc3RpbmdGb3JVbmludmVydGlibGVUcmFuc2Zvcm0pCiAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhyZWFkOwogCiAgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMjM0NSk7Ci0gICAgcm9vdC0+Y3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVu
dFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOwogCiAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdW5pbnZlcnRpYmxlVHJhbnNmb3JtOwogICAgIHVu
aW52ZXJ0aWJsZVRyYW5zZm9ybS5zZXRNMTEoMCk7CkBAIC0yNzM1LDEwICsyNjU5LDggQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yVW5pbnZlcnRp
YmxlVHJhbnNmb3JtKQogICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKIAogICAgIFZl
Y3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPEND
TGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7Ci0g
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290Lmdl
dCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3Qu
Z2V0KCksIHJvb3QtPmJvdW5kcygpLCAxLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCAwLCBkdW1t
eU1heFRleHR1cmVTaXplKTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkp
OyAvLyBlbXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5n
IHRoZSBjb3JyZWN0IHJlY3QuCiAKICAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdl
IGp1c3QgY3JlYXRlZC4KQEAgLTI3ODMsOCArMjcwNSw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZVBvc2l0aW9uZWRMYXllcikKICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CiAKICAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMzQ1KTsK
LSAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAw
LCAxMDApKSk7CiAKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsK
ICAgICBGbG9hdFBvaW50IGFuY2hvcigwLCAwKTsKQEAgLTI3OTQsMTAgKzI3MTQsOCBAQCBURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVQb3Np
dGlvbmVkTGF5ZXIpCiAgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwogCiAgICAgVmVj
dG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8Q0NM
YXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKLSAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0
KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5n
ZXQoKSwgcm9vdC0+Ym91bmRzKCksIDEsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIDAsIGR1bW15
TWF4VGV4dHVyZVNpemUpOwogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlz
aWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9hdFJlY3QoKSk7
IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0IHRlc3Rpbmcg
dGhlIGNvcnJlY3QgcmVjdC4KIAogICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2NlbmFyaW8gd2Ug
anVzdCBjcmVhdGVkLgpAQCAtMjgzMSw4ICsyNzQ5LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlUm90YXRlZExheWVyKQogICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKIAogICAgIE93
blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTIzNDUpOwotICAg
IHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICByb290LT5yZW5kZXJTdXJmYWNlKCkt
PnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEw
MCkpKTsKIAogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0aW9uNDVEZWdyZWVzQWJvdXRDZW50ZXI7CkBA
IC0yODQ2LDEwICsyNzYyLDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJp
ZnlIaXRUZXN0aW5nRm9yU2luZ2xlUm90YXRlZExheWVyKQogICAgIHJvb3QtPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKIAogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXll
ckxpc3Q7Ci0gICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5h
cHBlbmQocm9vdC5nZXQoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBk
dW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QtPmJvdW5kcygpLCAxLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBlbXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5z
dXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBjb3JyZWN0IHJlY3QuCiAKICAgICAvLyBTYW5pdHkg
Y2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3QgY3JlYXRlZC4KQEAgLTI4ODcsOCArMjgwMSw2IEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmds
ZVBlcnNwZWN0aXZlTGF5ZXIpCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29w
ZUlzT25JbXBsVGhyZWFkOwogCiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgxMjM0NSk7Ci0gICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwot
ICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOwogCiAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7CiAKQEAgLTI5MDcsMTAgKzI4MTksOCBAQCBURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVQZXJzcGVjdGl2
ZUxheWVyKQogICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKIAogICAgIFZlY3RvcjxD
Q0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPENDTGF5ZXJJ
bXBsKj4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7
Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7Ci0gICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCBy
b290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCks
IHJvb3QtPmJvdW5kcygpLCAxLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCAwLCBkdW1teU1heFRl
eHR1cmVTaXplKTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBl
bXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBj
b3JyZWN0IHJlY3QuCiAKICAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3Qg
Y3JlYXRlZC4KQEAgLTI5NTQsNDQgKzI4NjQsNTIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlTGF5ZXJXaXRoU2NhbGVkQ29udGVudHMK
ICAgICAvLwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRo
cmVhZDsKIAotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVh
dGUoMTIzNDUpOwotICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICByb290LT5y
ZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
SW50U2l6ZSgxMDAsIDEwMCkpKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDEpOwogCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRp
dHlNYXRyaXg7CiAgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7Ci0gICAgRmxvYXRQb2ludCBw
b3NpdGlvbigyNSwgMjUpOwotICAgIEludFNpemUgYm91bmRzKDUwLCA1MCk7Ci0gICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOwotICAgIHJvb3QtPnNl
dERyYXdzQ29udGVudCh0cnVlKTsKIAotICAgIHJvb3QtPnNldENvbnRlbnRCb3VuZHMoSW50U2l6
ZSgxMDAsIDEwMCkpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIEZsb2F0UG9pbnQoMCwg
MCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CisKKyAgICB7CisgICAgICAgIEZsb2F0UG9p
bnQgcG9zaXRpb24oMjUsIDI1KTsKKyAgICAgICAgSW50U2l6ZSBib3VuZHMoNTAsIDUwKTsKKyAg
ICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiB0ZXN0TGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDEyMzQ1KTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyh0ZXN0TGF5ZXIu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwg
Ym91bmRzLCBmYWxzZSk7CisKKyAgICAgICAgLy8gb3ZlcnJpZGUgY29udGVudEJvdW5kcworICAg
ICAgICB0ZXN0TGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworCisg
ICAgICAgIHRlc3RMYXllci0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICByb290LT5h
ZGRDaGlsZCh0ZXN0TGF5ZXIucmVsZWFzZSgpKTsKKyAgICB9CiAKICAgICBWZWN0b3I8Q0NMYXll
ckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+
IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOwotICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290
LT5ib3VuZHMoKSwgMSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkg
c2Npc3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVj
dCByZWN0LgogCiAgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0
ZWQuCi0gICAgLy8gVGhlIHZpc2libGVDb250ZW50UmVjdCBpcyBhY3R1YWxseSAxMDB4MTAwLCBl
dmVuIHRob3VnaCB0aGUgbGF5b3V0IHNpemUgb2YgdGhlIGxheWVyIGlzIDUweDUwLCBwb3NpdGlv
bmVkIGF0IDI1eDI1LgotICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIEludFNpemUoMTAwLCAxMDApKSwgcm9vdC0+dmlzaWJsZUNvbnRlbnRSZWN0KCkpOwor
ICAgIC8vIFRoZSB2aXNpYmxlQ29udGVudFJlY3QgZm9yIHRlc3RMYXllciBpcyBhY3R1YWxseSAx
MDB4MTAwLCBldmVuIHRob3VnaCBpdHMgbGF5b3V0IHNpemUgaXMgNTB4NTAsIHBvc2l0aW9uZWQg
YXQgMjV4MjUuCisgICAgQ0NMYXllckltcGwqIHRlc3RMYXllciA9IHJvb3QtPmNoaWxkcmVuKClb
MF0uZ2V0KCk7CisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZSgxMDAsIDEwMCkpLCB0ZXN0TGF5ZXItPnZpc2libGVDb250ZW50UmVjdCgpKTsK
ICAgICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKICAgICBB
U1NFUlRfRVEoMXUsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsK
IAotICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IG91dHNpZGUgdGhlIGxheWVyIHNob3Vs
ZCByZXR1cm4gYSBudWxsIHBvaW50ZXIuCi0gICAgSW50UG9pbnQgdGVzdFBvaW50KDI0LCAyNCk7
CisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIGEgcG9pbnQgb3V0c2lkZSB0aGUgbGF5ZXIgc2hvdWxk
IHJldHVybiBhIG51bGwgcG9pbnRlciAodGhlIHJvb3QgbGF5ZXIgZG9lcyBub3QgZHJhdyBjb250
ZW50LCBzbyBpdCB3aWxsIG5vdCBiZSBoaXQgdGVzdGVkIGVpdGhlcikuCisgICAgSW50UG9pbnQg
dGVzdFBvaW50KDEwMSwgMTAxKTsKICAgICBDQ0xheWVySW1wbCogcmVzdWx0TGF5ZXIgPSBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOwog
Ci0gICAgLy8gRXZlbiB0aG91Z2ggdGhlIGxheWVyIGV4aXN0cyBhdCAoMTAxLCAxMDEpLCBpdCBz
aG91bGQgbm90IGJlIHZpc2libGUgdGhlcmUgc2luY2UgdGhlIHJvb3QgcmVuZGVyU3VyZmFjZSB3
b3VsZCBjbGFtcCBpdC4KLSAgICAvLyBUaGlzIGNhc2UgaW4gcGFydGljdWxhciBpcyBsaWtlbHkg
dG8gZmFpbCBpZiBjb250ZW50cyBzY2FsZSBpcyBub3QgY29ycmVjdGx5IGFjY291bnRlZCBmb3Iu
CisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMjQsIDI0KTsKKyAgICByZXN1bHRMYXllciA9IEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7
CisKICAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3NiwgNzYpOwogICAgIHJlc3VsdExheWVyID0g
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2lu
dCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVy
KTsKIAotICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IGluc2lkZSBzaG91bGQgcmV0dXJu
IHRoZSByb290IGxheWVyLgorICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IGluc2lkZSBz
aG91bGQgcmV0dXJuIHRoZSB0ZXN0IGxheWVyLgogICAgIHRlc3RQb2ludCA9IEludFBvaW50KDI2
LCAyNik7CiAgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXll
clRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAg
ICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CkBAIC0zMDA5LDM2ICsyOTI3LDM3IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0ZvclNpbXBsZUNsaXBw
ZWRMYXllcikKICAgICAvLyB0aGUgZW50aXJlIGxheWVyIGJvdW5kcy4gSGVyZSB3ZSBqdXN0IHRl
c3QgdGhlIHNpbXBsZSBheGlzLWFsaWduZWQgY2FzZS4KICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CiAKLSAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMyk7Ci0gICAgcm9vdC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOwotICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOwotCiAgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgRmxvYXRQb2ludCBhbmNob3Io
MCwgMCk7Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbigyNSwgMjUpOyAvLyB0aGlzIGxheWVyIGlz
IHBvc2l0aW9uZWQsIGFuZCBoaXQgdGVzdGluZyBzaG91bGQgY29ycmVjdGx5IGtub3cgd2hlcmUg
dGhlIGxheWVyIGlzIGxvY2F0ZWQuCi0gICAgSW50U2l6ZSBib3VuZHMoNTAsIDUwKTsKLSAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7Ci0gICAgcm9v
dC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhyb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwg
RmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKIAogICAgIHsKKyAg
ICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjbGlwcGluZ0xheWVyID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgxMjMpOworICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uKDI1LCAyNSk7IC8vIHRoaXMg
bGF5ZXIgaXMgcG9zaXRpb25lZCwgYW5kIGhpdCB0ZXN0aW5nIHNob3VsZCBjb3JyZWN0bHkga25v
dyB3aGVyZSB0aGUgbGF5ZXIgaXMgbG9jYXRlZC4KKyAgICAgICAgSW50U2l6ZSBib3VuZHMoNTAs
IDUwKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjbGlwcGluZ0xheWVy
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24s
IGJvdW5kcywgZmFsc2UpOworICAgICAgICBjbGlwcGluZ0xheWVyLT5zZXRNYXNrc1RvQm91bmRz
KHRydWUpOworCiAgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDQ1Nik7CiAgICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludCgtNTAsIC01MCk7
CiAgICAgICAgIGJvdW5kcyA9IEludFNpemUoMzAwLCAzMDApOwogICAgICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOwogICAgICAgICBjaGlsZC0+
c2V0RHJhd3NDb250ZW50KHRydWUpOwotICAgICAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxl
YXNlKCkpOworICAgICAgICBjbGlwcGluZ0xheWVyLT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkp
OworICAgICAgICByb290LT5hZGRDaGlsZChjbGlwcGluZ0xheWVyLnJlbGVhc2UoKSk7CiAgICAg
fQogCiAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAg
ICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290
LmdldCgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4
dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXMocm9vdC5nZXQoKSwgcm9vdC0+Ym91bmRzKCksIDEsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBG
bG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUg
aGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KIAogICAgIC8vIFNhbml0eSBjaGVjayB0aGUg
c2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgogICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkpOwogICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEFTU0VSVF9FUSg0NTYsIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOwogCiAgICAgLy8gSGl0IHRlc3Rpbmcg
Zm9yIGEgcG9pbnQgb3V0c2lkZSB0aGUgbGF5ZXIgc2hvdWxkIHJldHVybiBhIG51bGwgcG9pbnRl
ci4KICAgICAvLyBEZXNwaXRlIHRoZSBjaGlsZCBsYXllciBiZWluZyB2ZXJ5IGxhcmdlLCBpdCBz
aG91bGQgYmUgY2xpcHBlZCB0byB0aGUgcm9vdCBsYXllcidzIGJvdW5kcy4KQEAgLTMwNDYsNyAr
Mjk2NSw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGlu
Z0ZvclNpbXBsZUNsaXBwZWRMYXllcikKICAgICBDQ0xheWVySW1wbCogcmVzdWx0TGF5ZXIgPSBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIp
OwogCi0gICAgLy8gRXZlbiB0aG91Z2ggdGhlIGxheWVyIGV4aXN0cyBhdCAoMTAxLCAxMDEpLCBp
dCBzaG91bGQgbm90IGJlIHZpc2libGUgdGhlcmUgc2luY2UgdGhlIHJvb3QgcmVuZGVyU3VyZmFj
ZSB3b3VsZCBjbGFtcCBpdC4KKyAgICAvLyBFdmVuIHRob3VnaCB0aGUgbGF5ZXIgZXhpc3RzIGF0
ICgxMDEsIDEwMSksIGl0IHNob3VsZCBub3QgYmUgdmlzaWJsZSB0aGVyZSBzaW5jZSB0aGUgY2xp
cHBpbmdMYXllciB3b3VsZCBjbGFtcCBpdC4KICAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3Niwg
NzYpOwogICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJU
aGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
RVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKQEAgLTMwNzgsOCArMjk5Nyw2IEBAIFRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpQ2xpcHBlZFJv
dGF0ZWRMYXllcikKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbklt
cGxUaHJlYWQ7CiAKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDEyMyk7Ci0gICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBJbnRTaXplKDEwMCwgMTAwKSkpOwogCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRl
bnRpdHlNYXRyaXg7CiAgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CkBAIC0zMTI0LDEwICsz
MDQxLDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5n
Rm9yTXVsdGlDbGlwcGVkUm90YXRlZExheWVyKQogICAgIH0KIAogICAgIFZlY3RvcjxDQ0xheWVy
SW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4g
ZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7Ci0gICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3Qt
PmJvdW5kcygpLCAxLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVT
aXplKTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBlbXB0eSBz
Y2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBjb3JyZWN0
IHJlY3QuCiAKICAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3QgY3JlYXRl
ZC4KQEAgLTMxODEsOCArMzA5Niw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJzKQogICAgIERlYnVnU2NvcGVkU2V0SW1w
bFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKIAogICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7Ci0gICAgcm9vdC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOwotICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOwogCiAgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgRmxvYXRQb2ludCBhbmNob3Io
MCwgMCk7CkBAIC0zMjI4LDEwICszMTQxLDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yTXVsdGlwbGVMYXllcnMpCiAgICAgQ0NMYXllckltcGwq
IGdyYW5kQ2hpbGQxID0gY2hpbGQxLT5jaGlsZHJlbigpWzBdLmdldCgpOwogCiAgICAgVmVjdG9y
PENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8Q0NMYXll
ckltcGwqPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUx
MjsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKLSAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCks
IHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQo
KSwgcm9vdC0+Ym91bmRzKCksIDEsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIDAsIGR1bW15TWF4
VGV4dHVyZVNpemUpOwogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJs
ZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9hdFJlY3QoKSk7IC8v
IGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0IHRlc3RpbmcgdGhl
IGNvcnJlY3QgcmVjdC4KIAogICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2NlbmFyaW8gd2UganVz
dCBjcmVhdGVkLgpAQCAtMzI5MSw4ICszMjAyLDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yTXVsdGlwbGVMYXllckxpc3RzKQogICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKIAogICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7Ci0gICAgcm9vdC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOwog
CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgRmxvYXRQ
b2ludCBhbmNob3IoMCwgMCk7CkBAIC0zMzQxLDEwICszMjUwLDggQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yTXVsdGlwbGVMYXllckxpc3RzKQog
ICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkMSA9IGNoaWxkMS0+Y2hpbGRyZW4oKVswXS5nZXQo
KTsKIAogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0g
ICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4
VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9v
dC5nZXQoKSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QtPmJvdW5kcygpLCAxLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
RmxvYXRSZWN0KCkpOyAvLyBlbXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3Jl
IGhpdCB0ZXN0aW5nIHRoZSBjb3JyZWN0IHJlY3QuCiAKICAgICAvLyBTYW5pdHkgY2hlY2sgdGhl
IHNjZW5hcmlvIHdlIGp1c3QgY3JlYXRlZC4KQEAgLTM0MjAsNyArMzMyNyw2IEBAIFRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5TGF5ZXJUcmFuc2Zvcm1zSW5IaWdoRFBJKQog
ICAgIC8vIFZlcmlmeSBkcmF3IGFuZCBzY3JlZW4gc3BhY2UgdHJhbnNmb3JtcyBvZiBsYXllcnMg
bm90IGluIGEgc3VyZmFjZS4KICAgICBNb2NrQ29udGVudExheWVyRGVsZWdhdGUgZGVsZWdhdGU7
CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggcGFyZW50TWF0cml4OwogCiAgICAgUmVmUHRyPENvbnRlbnRMYXll
ckNocm9taXVtPiBwYXJlbnQgPSBjcmVhdGVEcmF3YWJsZUNvbnRlbnRMYXllckNocm9taXVtKCZk
ZWxlZ2F0ZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQ
b2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIHRydWUpOwpAQCAtMzQzNSwyMCArMzM0MSwx
NCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUxheWVyVHJhbnNmb3Jt
c0luSGlnaERQSSkKICAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkTm9TY2FsZSk7CiAKICAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50
IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKLQogICAgIGNvbnN0IGRvdWJsZSBkZXZpY2VT
Y2FsZUZhY3RvciA9IDIuNTsKLSAgICBwYXJlbnRNYXRyaXguc2NhbGUoZGV2aWNlU2NhbGVGYWN0
b3IpOwogICAgIHBhcmVudC0+c2V0Q29udGVudHNTY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAg
ICAgY2hpbGQtPnNldENvbnRlbnRzU2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIEVYUEVD
VF9FUShjaGlsZE5vU2NhbGUtPmNvbnRlbnRzU2NhbGUoKSwgMSk7CiAKLSAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50
LmdldCgpLCBwYXJlbnRNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVu
dC0+Ym91bmRzKCksIGRldmljZVNjYWxlRmFjdG9yLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBk
dW1teU1heFRleHR1cmVTaXplKTsKIAogICAgIEVYUEVDVF9FUSgxdSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkpOwogCkBAIC0zNTA5LDcgKzM0MDksNiBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1cmZhY2VUcmFuc2Zvcm1zSW5IaWdoRFBJKQog
ewogICAgIE1vY2tDb250ZW50TGF5ZXJEZWxlZ2F0ZSBkZWxlZ2F0ZTsKICAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwYXJlbnRNYXRyaXg7CiAKICAgICBSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IHBhcmVu
dCA9IGNyZWF0ZURyYXdhYmxlQ29udGVudExheWVyQ2hyb21pdW0oJmRlbGVnYXRlKTsKICAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDMwLCAzMCksIHRydWUpOwpAQCAtMzUzMiwyMSArMzQzMSwxNSBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1cmZhY2VUcmFuc2Zvcm1zSW5IaWdoRFBJ
KQogICAgIGNoaWxkLT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYS5nZXQoKSk7CiAKICAgICBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1
bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKLQogICAgIGNvbnN0IGRvdWJsZSBkZXZpY2VTY2Fs
ZUZhY3RvciA9IDEuNTsKLSAgICBwYXJlbnRNYXRyaXguc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3Ip
OwogICAgIHBhcmVudC0+c2V0Q29udGVudHNTY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAg
Y2hpbGQtPnNldENvbnRlbnRzU2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIGR1cGxpY2F0
ZUNoaWxkTm9uT3duZXItPnNldENvbnRlbnRzU2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwogICAg
IHJlcGxpY2EtPnNldENvbnRlbnRzU2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwogCi0gICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCks
IHBhcmVudC5nZXQoKSwgcGFyZW50TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgp
LCBwYXJlbnQtPmJvdW5kcygpLCBkZXZpY2VTY2FsZUZhY3RvciwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CiAKICAgICAvLyBXZSBzaG91bGQgaGF2ZSB0d28g
cmVuZGVyIHN1cmZhY2VzLiBUaGUgcm9vdCdzIHJlbmRlciBzdXJmYWNlIGFuZCBjaGlsZCdzCiAg
ICAgLy8gcmVuZGVyIHN1cmZhY2UgKGl0IG5lZWRzIG9uZSBiZWNhdXNlIGl0IGhhcyBhIHJlcGxp
Y2EgbGF5ZXIpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09j
Y2x1c2lvblRyYWNrZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdC5jcHAKaW5kZXggYjU1OWRiMTJjYWU0NDJjNjExZTk1YTU5NmY1
ODQzNTEwZWI2YzdlZi4uY2NiYzRjMjc3ZjY5NmFmNjQ3ZWU2YTY4YzI5NTU0Mjc4ZjMwNjc0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNr
ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9u
VHJhY2tlclRlc3QuY3BwCkBAIC0yNTYsMTYgKzI1NiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBjYWxjRHJhd0V0YyhUZXN0Q29udGVudExheWVySW1wbCogcm9vdCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChyb290ID09IG1fcm9vdC5nZXQoKSk7Ci0gICAgICAgIFZlY3RvcjxDQ0xheWVySW1w
bCo+IGR1bW15TGF5ZXJMaXN0OwogICAgICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUx
MjsKICAgICAgICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKIAogICAgICAgICBBU1NFUlQo
IXJvb3QtPnJlbmRlclN1cmZhY2UoKSk7Ci0gICAgICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKLSAgICAgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7Ci0gICAgICAgIG1fcmVuZGVy
U3VyZmFjZUxheWVyTGlzdEltcGwuYXBwZW5kKG1fcm9vdC5nZXQoKSk7CiAKLSAgICAgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdElt
cGwsIGR1bW15TGF5ZXJMaXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJv
b3QsIHJvb3QtPmJvdW5kcygpLCAxLCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLCAmbGF5
ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOwogCiAgICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhtX3JlbmRlclN1cmZhY2VM
YXllckxpc3RJbXBsLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCkBA
IC0yNzUsMTUgKzI3MSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjYWxjRHJhd0V0YyhUZXN0
Q29udGVudExheWVyQ2hyb21pdW0qIHJvb3QpCiAgICAgewogICAgICAgICBBU1NFUlQocm9vdCA9
PSBtX3Jvb3QuZ2V0KCkpOwotICAgICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
ZHVtbXlMYXllckxpc3Q7CiAgICAgICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwog
CiAgICAgICAgIEFTU0VSVCghcm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsKLSAgICAgICAgcm9vdC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgICAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNl
dENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgcm9vdC0+Ym91bmRzKCkpKTsK
LSAgICAgICAgbV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Q2hyb21pdW0uYXBwZW5kKG1fcm9vdCk7
CiAKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhyb290LCByb290LCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIG1fcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdENocm9taXVtLCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9y
bXMocm9vdCwgcm9vdC0+Ym91bmRzKCksIDEsIG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9t
aXVtLCBkdW1teU1heFRleHR1cmVTaXplKTsKIAogICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMobV9yZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0Q2hyb21pdW0sIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154403</attachid>
            <date>2012-07-25 11:39:38 -0700</date>
            <delta_ts>2012-07-25 13:16:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88953-20120725113929.patch</filename>
            <type>text/plain</type>
            <size>70648</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjliMTEyZmIwYzliZjE1
YmZiNmM0YTc2NmY5ZWU3MDE4MWE4ODA4Yi4uYjE1ODBhMTk1YTkwNDk3MjEwZjY1MzFhMGZjMTNj
ZjU4ZDM0N2E0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA3LTI0ICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
UmVmYWN0b3IgQ0NMYXllclRyZWVIb3N0Q29tbW9uOiBtb3ZlIHJvb3QgbGF5ZXIgc3BlY2lhbCBj
YXNlIGluaXRpYWxpemF0aW9uIGludG8gaW50ZXJuYWwgY29kZS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4OTUzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IDEgb2YgdHJ5aW5nIHRv
IHJlZHVjZSB0aGUgcm9vdCBsYXllciBzcGVjaWFsCisgICAgICAgIGNhc2UuIFRoaXMgdHJpZXMg
dG8gcmVkdWNlIHRoZSBzcGVjaWFsLW5lc3Mgb2YgdGhlIHJvb3QgbGF5ZXIgZnJvbQorICAgICAg
ICB0aGUgcGVyc3BlY3RpdmUgb2Ygb3V0c2lkZSBjb2RlLgorCisgICAgICAgIEFmdGVyIHRoaXMg
cGF0Y2gsIGNvZGUgdGhhdCB1c2VzIGNhbGNEcmF3VHJhbnNmb3JtcygpIG5vIGxvbmdlcgorICAg
ICAgICBuZWVkcyB0byBpbml0aWFsaXplIHRoZSByb290IGxheWVyJ3Mgc3VyZmFjZSwgYW5kIG5v
IGxvbmdlciBuZWVkcworICAgICAgICB0byBtYW51YWxseSBhcHBlbmQgdGhlIHJvb3QgbGF5ZXIg
dG8gdGhlIHJlbmRlclN1cmZhY2VMYXllckxpc3QuCisKKyAgICAgICAgVW5pdCB0ZXN0cyB3ZXJl
IGFsc28gdXBkYXRlZCAobXVjaCBjbGVhbmVyISkgdG8gYWNjb3VudCBmb3IgdGhpcyBjaGFuZ2Uu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVw
Um9vdExheWVyQW5kU3VyZmFjZUZvclJlY3Vyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KToK
KwogMjAxMi0wNy0yNSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbY2hyb21pdW1dIEJ1aWxkIGZpeCBmb3IgY2xhbmcgYnVpbGRzIGFmdGVyIHIxMjM2
MjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggZjFiNDNmZTJiMjdiNDMwMDJhYTBmZWY0
OGEzMDI0OTc2NWUyOTJjYy4uZDQ1ZjU0OTgwNjg5OTNjMWY4YjJiNjc0OGE5MzhjZjdiNTllNTll
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wNy0y
NCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIFJlZmFjdG9yIENDTGF5ZXJUcmVlSG9zdENvbW1vbjogbW92ZSByb290IGxheWVyIHNw
ZWNpYWwgY2FzZSBpbml0aWFsaXphdGlvbiBpbnRvIGludGVybmFsIGNvZGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODk1MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgdGVzdHMgdXBkYXRlZCB0
byBhY2NvdW50IGZvciB0aGUgbmV3IGxlc3Mtc3BlY2lhbCByb290IGxheWVyIHNldHVwLgorICAg
ICAgICAgIC0gbW9zdCB0ZXN0IGNhc2VzIGp1c3QgbmVlZGVkIHRvIHJlbW92ZSByb290LT5yZW5k
ZXJTdXJmYWNlKCktPnNldENvbnRlbnRCb3VuZHMoKSwgY3JlYXRlUmVuZGVyU3VyZmFjZSgpLCBh
bmQgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQoKS4KKyAgICAgICAgICAtIHNvbWUgdGVz
dCBjYXNlcyBvcmlnaW5hbGx5IHJlbGllZCBvbiBzZXR0aW5nIHNvbWUgYXdrd2FyZCB1bmNvbnZl
bnRpb25hbCBib3VuZHMgb2YgdGhlIHJvb3RMYXllciB0aGF0IHdlcmUgZGlmZmVyZW50IHRoYW4g
dGhlIHJvb3RMYXllcidzIHJlbmRlclN1cmZhY2UuIHRoZXNlIHRlc3RzIGFyZSB1cGRhdGVkLgor
ICAgICAgICAgIC0gYSBmZXcgbWlub3IgY2xlYW51cHMgb3RoZXJ3aXNlLgorCisgICAgICAgICog
dGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6ZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSk6CisgICAgICAgICogdGVz
dHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVI
b3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgICogdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVz
dC5jcHA6CisgICAgICAgIChXZWJLaXRUZXN0czo6Q0NPY2NsdXNpb25UcmFja2VyVGVzdDo6Y2Fs
Y0RyYXdFdGMpOgorCiAyMDEyLTA3LTI1ICBBZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5j
b20+CiAKICAgICAgICAgW2Nocm9taXVtXSBVbmlmeSBjb21wb3NpdG9yIHF1YWRUcmFuc2Zvcm0v
ZHJhd1RyYW5zZm9ybS9vcmlnaW5UcmFuc2Zvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCmluZGV4IGEwNjFkMGQ2NDgyZDU4ZDNmMmU5ZjI0NDg4ZjVlNmUzYjhmZDVmNWIuLmZlOTg0
NDlhNzI1NTQ4NjE3ZWM2MjAxZmY4YmYzMjUyOGEwMGYzNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcApAQCAtNDYyLDIyICs0NjIsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIsIENDVGV4dHVyZVVwZGF0ZXIm
IHUKIHsKICAgICBUUkFDRV9FVkVOVDAoImNjIiwgIkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5
ZXJzIik7CiAKLSAgICBpZiAoIXJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICBy
b290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICByb290TGF5ZXItPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgZGV2aWNlVmll
d3BvcnRTaXplKCkpKTsKLQogICAgIExheWVyTGlzdCB1cGRhdGVMaXN0OwotICAgIHVwZGF0ZUxp
c3QuYXBwZW5kKHJvb3RMYXllcik7Ci0KLSAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJvb3RS
ZW5kZXJTdXJmYWNlID0gcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9vdFJlbmRl
clN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7CiAKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5U
MCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnM6OmNhbGNEcmF3RXRjIik7Ci0g
ICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgICAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VTY2FsZVRyYW5zZm9ybTsKLSAgICAgICAgZGV2
aWNlU2NhbGVUcmFuc2Zvcm0uc2NhbGUobV9kZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLCBy
b290TGF5ZXIsIGRldmljZVNjYWxlVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgdXBkYXRlTGlz
dCwgcm9vdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllciwgZGV2aWNlVmlld3BvcnRTaXplKCksIG1f
ZGV2aWNlU2NhbGVGYWN0b3IsIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJl
U2l6ZSwgdXBkYXRlTGlzdCk7CiAKICAgICAgICAgRmxvYXRSZWN0IHJvb3RTY2lzc29yUmVjdChG
bG9hdFBvaW50KDAsIDApLCB2aWV3cG9ydFNpemUoKSk7CiAgICAgICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyh1cGRhdGVMaXN0LCByb290
U2Npc3NvclJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAK
aW5kZXggNTNkMjY1YzI5ZDgwN2JmNzVkNjQyYTY4ZWY2ZTNhMWNmMTkwYjBkNi4uMzFlOWZmZmRm
MTNlM2E4OWE2OTkxOWI3NjMwOTk5N2RhYzllM2FiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0zODksNiArMzg5LDIwIEBAIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGNvbXB1dGVTY3JvbGxDb21wZW5zYXRpb25NYXRyaXhGb3JDaGlsZHJlbihDQ0xh
eWVySW1wbCoKICAgICByZXR1cm4gbmV4dFNjcm9sbENvbXBlbnNhdGlvbk1hdHJpeDsKIH0KIAor
Ly8gU2hvdWxkIGJlIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgcmVjdXJzaXZlIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zSW50ZXJuYWwoKS4KK3RlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlw
ZW5hbWUgTGF5ZXJMaXN0Pgordm9pZCBzZXR1cFJvb3RMYXllckFuZFN1cmZhY2VGb3JSZWN1cnNp
b24oTGF5ZXJUeXBlKiByb290TGF5ZXIsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgY29uc3QgSW50U2l6ZSYgZGV2aWNlVmlld3BvcnRTaXplKQoreworICAgIGlmICghcm9vdExh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOworCisgICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgZGV2aWNlVmlld3BvcnRTaXplKSk7CisgICAgcm9v
dExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNsZWFyTGF5ZXJMaXN0KCk7CisKKyAgICBBU1NFUlQo
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5pc0VtcHR5KCkpOworICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKHJvb3RMYXllcik7Cit9CisKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBs
YXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhl
CiAvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBjbGlwUmVjdHMsIHJlbmRlciBzdXJmYWNl
cywgZXRjLgogdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBMYXllckxpc3Qs
IHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KQEAgLTg1
MywyMiArODY3LDMyIEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVj
dHNJbnRlcm5hbChjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhCiAgICAgfQogfQogCi12b2lk
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMoTGF5ZXJDaHJv
bWl1bSogbGF5ZXIsIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXll
ckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhMYXllckNocm9taXVtKiByb290TGF5ZXIsIGNvbnN0IElu
dFNpemUmIGRldmljZVZpZXdwb3J0U2l6ZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IsIGludCBt
YXhUZXh0dXJlU2l6ZSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQogewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbENvbXBl
bnNhdGlvbk1hdHJpeDsKLSAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3Q7Ci0gICAgV2Vi
Q29yZTo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNJbnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZD4o
bGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4LCBmdWxsSGllcmFyY2h5TWF0cml4LCBzY3Jv
bGxDb21wZW5zYXRpb25NYXRyaXgsCisgICAgSW50UmVjdCB0b3RhbERyYXdhYmxlQ29udGVudFJl
Y3Q7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlU2NhbGVUcmFuc2Zvcm07CisgICAgZGV2aWNlU2Nh
bGVUcmFuc2Zvcm0uc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworCisgICAgc2V0dXBSb290TGF5
ZXJBbmRTdXJmYWNlRm9yUmVjdXJzaW9uPExheWVyQ2hyb21pdW0sIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiA+KHJvb3RMYXllciwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGV2aWNl
Vmlld3BvcnRTaXplKTsKKworICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zSW50
ZXJuYWw8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+LCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQ+KHJvb3RMYXllciwgcm9vdExheWVyLCBkZXZpY2VTY2Fs
ZVRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RM
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpLCB0cnVlLCAwLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxheWVyTGlzdCwgMCwgbWF4VGV4dHVyZVNpemUsIGRyYXdh
YmxlQ29udGVudFJlY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5sYXll
ckxpc3QoKSwgMCwgbWF4VGV4dHVyZVNpemUsIHRvdGFsRHJhd2FibGVDb250ZW50UmVjdCk7CiB9
CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhD
Q0xheWVySW1wbCogbGF5ZXIsIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCwgQ0NMYXllclNv
cnRlciogbGF5ZXJTb3J0ZXIsIGludCBtYXhUZXh0dXJlU2l6ZSkKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xheWVySW1wbCogcm9vdExheWVy
LCBjb25zdCBJbnRTaXplJiBkZXZpY2VWaWV3cG9ydFNpemUsIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yLCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplLCBWZWN0
b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKLSAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBzY3JvbGxDb21wZW5zYXRpb25NYXRyaXg7Ci0gICAgSW50UmVjdCBk
cmF3YWJsZUNvbnRlbnRSZWN0OwotICAgIFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
SW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZh
Y2UsIENDTGF5ZXJTb3J0ZXI+KGxheWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhp
ZXJhcmNoeU1hdHJpeCwgc2Nyb2xsQ29tcGVuc2F0aW9uTWF0cml4LAorICAgIEludFJlY3QgdG90
YWxEcmF3YWJsZUNvbnRlbnRSZWN0OworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50
aXR5TWF0cml4OworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxlVHJhbnNm
b3JtOworICAgIGRldmljZVNjYWxlVHJhbnNmb3JtLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsK
KworICAgIHNldHVwUm9vdExheWVyQW5kU3VyZmFjZUZvclJlY3Vyc2lvbjxDQ0xheWVySW1wbCwg
VmVjdG9yPENDTGF5ZXJJbXBsKj4gPihyb290TGF5ZXIsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IGRldmljZVZpZXdwb3J0U2l6ZSk7CisKKyAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0ludGVybmFsPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJT
dXJmYWNlLCBDQ0xheWVyU29ydGVyPihyb290TGF5ZXIsIHJvb3RMYXllciwgZGV2aWNlU2NhbGVU
cmFuc2Zvcm0sIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290TGF5ZXItPnJlbmRl
clN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSwgdHJ1ZSwgMCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXllckxpc3QsIGxheWVyU29ydGVyLCBtYXhUZXh0dXJlU2l6ZSwgZHJhd2FibGVDb250ZW50
UmVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLCBsYXllclNvcnRl
ciwgbWF4VGV4dHVyZVNpemUsIHRvdGFsRHJhd2FibGVDb250ZW50UmVjdCk7CiB9CiAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29u
c3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCmluZGV4IGU1YTRmZWM5YzE1NmU0ZjUxMDE5ZTZmNjZiZjZhMThjODYwNjNi
MmMuLmI2ZTJhMDdjNTcwNWE1ZDA2Yzc0OGE5YTA5NDkzN2M0MDMxNWFjMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC00MSw4ICs0MSw4IEBAIGNsYXNzIEND
TGF5ZXJUcmVlSG9zdENvbW1vbiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIEludFJlY3QgY2FsY3Vs
YXRlVmlzaWJsZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGxheWVyQm91bmRSZWN0LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4Jik7CiAKLSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhMYXllckNo
cm9taXVtKiwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCogcm9vdExh
eWVyLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgs
IGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRy
aXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8
Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVT
aXplKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhMYXllckNocm9t
aXVtKiByb290TGF5ZXIsIGNvbnN0IEludFNpemUmIGRldmljZVZpZXdwb3J0U2l6ZSwgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IsIGludCBtYXhUZXh0dXJlU2l6ZSwgVmVjdG9yPFJlZlB0cjxMYXll
ckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBzdGF0aWMgdm9pZCBj
YWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBJbnRT
aXplJiBkZXZpY2VWaWV3cG9ydFNpemUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yLCBDQ0xheWVy
U29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplLCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVjdCk7CiAgICAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JS
ZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNTk4ZWM2
Mzk3YjljNGU4MDU0ZmUxNDk0NTk5MTkyOGJjM2I3MzlmOS4uM2JjZTVkYzljMjMxMjg4MTk0NTE0
YzJlMmUxYjdlODJlOTg1YTE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAKQEAgLTI1MiwxOSArMjUyLDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxj
dWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5kZXJTdXIKICAgICBB
U1NFUlQocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5pc0VtcHR5KCkpOwogICAgIEFTU0VSVChtX3Jv
b3RMYXllckltcGwpOwogCi0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobV9yb290
TGF5ZXJJbXBsLmdldCgpKTsKLQotICAgIGlmICghbV9yb290TGF5ZXJJbXBsLT5yZW5kZXJTdXJm
YWNlKCkpCi0gICAgICAgIG1fcm9vdExheWVySW1wbC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwot
ICAgIG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5jbGVhckxheWVyTGlzdCgpOwot
ICAgIG1fcm9vdExheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRS
ZWN0KEludFBvaW50KCksIGRldmljZVZpZXdwb3J0U2l6ZSgpKSk7Ci0KICAgICB7CiAgICAgICAg
IFRSQUNFX0VWRU5UMCgiY2MiLCAiQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY0RyYXdFdGMiKTsK
LSAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVNjYWxlVHJhbnNmb3JtOwotICAgICAgICBk
ZXZpY2VTY2FsZVRyYW5zZm9ybS5zY2FsZShtX2RldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAg
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhtX3Jvb3RMYXll
ckltcGwuZ2V0KCksIG1fcm9vdExheWVySW1wbC5nZXQoKSwgZGV2aWNlU2NhbGVUcmFuc2Zvcm0s
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX3Jvb3RMYXllckltcGwt
PnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKG1fcm9vdExheWVySW1wbC5nZXQoKSwg
ZGV2aWNlVmlld3BvcnRTaXplKCksIG1fZGV2aWNlU2NhbGVGYWN0b3IsICZtX2xheWVyU29ydGVy
LCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemUsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOwogCiAgICAgICAgIHRyYWNrRGFtYWdlRm9yQWxsU3VyZmFjZXMobV9yb290
TGF5ZXJJbXBsLmdldCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKaW5kZXgg
MTRlODNhMDI2NTE5MTQ1MDdmMjI3ZTg0YmRlZTAzNjFjYzU2YzkxZS4uODI5NGNhNjIyZDQzNGVh
MDBjMDE4OTg1N2U2NTAwMWE1OWY0NTE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCkBAIC00Niw4ICs0Niw2IEBAIG5h
bWVzcGFjZSB7CiB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxp
dHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQogewogICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7Ci0gICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAK
ICAgICAvLyBTYW5pdHkgY2hlY2s6IFRoZSB0ZXN0IGl0c2VsZiBzaG91bGQgY3JlYXRlIHRoZSBy
b290IGxheWVyJ3MgcmVuZGVyIHN1cmZhY2UsIHNvCkBAIC01Niw5ICs1NCw3IEBAIHZvaWQgZXhl
Y3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCogcm9v
dCwgVmVjdG9yPENDTGF5CiAgICAgQVNTRVJUX1RSVUUocm9vdC0+cmVuZGVyU3VyZmFjZSgpKTsK
ICAgICBBU1NFUlRfRkFMU0UocmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwogCi0gICAg
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5jbGVhckxheWVyTGlzdCgpOwotICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHJvb3QpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29y
dGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QtPmJvdW5kcygpLCAxLCAmbGF5ZXJTb3J0
ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJ
dGVyYXRvclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRl
cmF0b3JUZXN0LmNwcAppbmRleCA3NmRjNDI1YWE5ZjZiMWUyOTQ0MGUxY2FmNWFjODA5ZTI0NzY5
ZmM1Li43M2ZkYTRjYjQ2ZDQzYjJlYWJhZTFhZDVjNzFkODU4NzlhZWNmNWM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAK
QEAgLTE0NywxMiArMTQ3LDcgQEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBzaW1wbGVUcmVl
KQogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQoZm91cnRoKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQocm9vdExheWVyLmdldCgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIGxheWVyTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDI1Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci0+Ym91bmRzKCksIDEs
IDI1NiwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJh
dGVCYWNrVG9Gcm9udCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CkBAIC0xOTUsMTIgKzE5MCw3
IEBAIFRFU1QoQ0NMYXllckl0ZXJhdG9yVGVzdCwgY29tcGxleFRyZWUpCiAgICAgcm9vdDIzLT5h
ZGRDaGlsZChyb290MjMxKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBsYXllckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVy
LmdldCgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlz
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1
Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhy
b290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci0+Ym91bmRzKCksIDEsIDI1NiwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CkBAIC0yNTYsMTMgKzI0Niw3IEBAIFRFU1QoQ0NMYXllckl0
ZXJhdG9yVGVzdCwgY29tcGxleFRyZWVNdWx0aVN1cmZhY2UpCiAgICAgcm9vdDIzLT5hZGRDaGls
ZChyb290MjMxKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXll
ckxpc3Q7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyLmdldCgp
KTsKLSAgICAKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zKHJvb3RMYXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlz
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1
Nik7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhy
b290TGF5ZXIuZ2V0KCksIHJvb3RMYXllci0+Ym91bmRzKCksIDEsIDI1NiwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
QW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogICAgIGl0ZXJhdGVCYWNrVG9Gcm9udCgmcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCBlNDBhMWMyODk1
YmI3OTdjNGI1NDAzNTZjNDljY2EwMzJkYTJmNWZjLi40NmY5NmFlYTg0MmYzZDgyZmEyMTk4YWY5
NTFlYzM4MzhmZWRiM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTc1LDI1ICs3NSwyNSBA
QCB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJD
aHJvbWl1bSogcm9vdExheWVyKQogewogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50
aXR5TWF0cml4OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teVJlbmRl
clN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1
bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwogCi0gICAg
QVNTRVJUKHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICAvLyBXZSBhcmUgcHJvYmFi
bHkgbm90IHRlc3Rpbmcgd2hhdCBpcyBpbnRlbmRlZCBpZiB0aGUgcm9vdExheWVyIGJvdW5kcyBh
cmUgZW1wdHkuCiAgICAgQVNTRVJUKCFyb290TGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSk7Ci0g
ICAgcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgcm9vdExheWVyLT5ib3VuZHMoKSkpOwotICAgIAotICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdExheWVyLCByb290TGF5ZXIsIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgZHVtbXlSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290TGF5ZXIsIHJvb3RMYXllci0+
Ym91bmRzKCksIDEsIGR1bW15TWF4VGV4dHVyZVNpemUsIGR1bW15UmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdExheWVyLT5yZW5kZXJT
dXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwogfQogCiB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqIHJvb3RMYXllcikKIHsKICAgICAv
LyBOb3RlOiB0aGlzIHZlcnNpb24gc2tpcHMgbGF5ZXIgc29ydGluZy4KKwogICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+
IGR1bW15UmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBk
dW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3RMYXllciwg
cm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGR1bW15UmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
CisgICAgLy8gV2UgYXJlIHByb2JhYmx5IG5vdCB0ZXN0aW5nIHdoYXQgaXMgaW50ZW5kZWQgaWYg
dGhlIHJvb3RMYXllciBib3VuZHMgYXJlIGVtcHR5LgorICAgIEFTU0VSVCghcm9vdExheWVyLT5i
b3VuZHMoKS5pc0VtcHR5KCkpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocm9vdExheWVyLCByb290TGF5ZXItPmJvdW5kcygpLCAxLCAwLCBkdW1t
eU1heFRleHR1cmVTaXplLCBkdW1teVJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhkdW1teVJl
bmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50
UmVjdCgpKTsKIH0KIApAQCAtMTI5LDggKzEyOSw2IEBAIFBhc3NPd25QdHI8Q0NMYXllckltcGw+
IGNyZWF0ZVRyZWVGb3JGaXhlZFBvc2l0aW9uVGVzdHMoKQogICAgIGdyYW5kQ2hpbGQtPmFkZENo
aWxkKGdyZWF0R3JhbmRDaGlsZC5yZWxlYXNlKCkpOwogICAgIGNoaWxkLT5hZGRDaGlsZChncmFu
ZENoaWxkLnJlbGVhc2UoKSk7CiAgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsK
LSAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHJvb3QtPmJvdW5k
cygpKSk7CiAKICAgICByZXR1cm4gcm9vdC5yZWxlYXNlKCk7CiB9CkBAIC0xNTUsNyArMTUzLDYg
QEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yTm9P
cExheWVyKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
OwogICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOwogICAgIGNoaWxkLT5hZGRDaGlsZChncmFu
ZENoaWxkKTsKIApAQCAtMTc2LDcgKzE3Myw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogewogICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBs
YXllciA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwotICAgIGxheWVyLT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CiAKICAgICAvLyBDYXNlIDE6IHNldHRpbmcgdGhlIHN1YmxheWVyIHRyYW5zZm9y
bSBzaG91bGQgbm90IGFmZmVjdCB0aGlzIGxheWVyJ3MgZHJhdyB0cmFuc2Zvcm0gb3Igc2NyZWVu
LXNwYWNlIHRyYW5zZm9ybS4KICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhcmJpdHJhcnlU
cmFuc2xhdGlvbjsKQEAgLTI0Myw3ICsyMzksNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiAgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7
Ci0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgcGFyZW50LT5hZGRDaGls
ZChjaGlsZCk7CiAgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOwogCkBAIC0zMjIsNyAr
MzE3LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1z
Rm9yU2luZ2xlUmVuZGVyU3VyZmFjZSkKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNo
aWxkID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1X
aXRoRm9yY2VkRHJhd3NDb250ZW50PiBncmFuZENoaWxkID0gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQoY2hpbGQpOwogICAgIGNoaWxkLT5hZGRD
aGlsZChncmFuZENoaWxkKTsKIApAQCAtMzk3LDEzICszOTEsMTEgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCBzY2lzc29yUmVjdFdpdGhDbGlwKQogICAgIEludFJlY3QgY2hpbGRS
ZWN0KDEwLCAxMCwgNTAsIDUwKTsKICAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1
MCwgMTUwKTsKIAotICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICByb290LT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICByb290LT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KHJvb3RSZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CiAgICAgcm9vdC0+c2V0Qm91
bmRzKEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKICAgICBy
b290LT5zZXRDb250ZW50Qm91bmRzKHJvb3QtPmJvdW5kcygpKTsKICAgICByb290LT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7Ci0gICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVj
dChJbnRSZWN0KEludFBvaW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3Qu
aGVpZ2h0KCkpKSk7CiAKICAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAw
KSk7CiAgICAgY2hpbGQtPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hp
bGRSZWN0LnkoKSkpOwpAQCAtNDI4LDE0ICs0MjAsOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHNjaXNzb3JSZWN0V2l0aENsaXApCiAKICAgICBWZWN0b3I8Q0NMYXllckltcGwq
PiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIHsKLSAgICAgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGxh
eWVyTGlzdDsKICAgICAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAgICAgICAg
IENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7Ci0KLSAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7Ci0KLSAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlz
dCwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LT5i
b3VuZHMoKSwgMSwgJmxheWVyU29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIAogICAgICAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OwogICAg
ICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVj
dHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlEYW1hZ2VSZWN0KTsKQEAgLTU2NywxMyAr
NTU0LDExIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgc2Npc3NvclJlY3RXaXRo
Q2xpcEFuZFNwYWNlVHJhbnNmb3JtKQogICAgIEludFJlY3QgY2hpbGRSZWN0KDEwLCAxMCwgNTAs
IDUwKTsKICAgICBJbnRSZWN0IGdyYW5kQ2hpbGRSZWN0KDUsIDUsIDE1MCwgMTUwKTsKIAotICAg
IHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICByb290LT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50KDAsIDApKTsKICAgICByb290LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHJvb3RS
ZWN0LngoKSwgcm9vdFJlY3QueSgpKSk7CiAgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUocm9v
dFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKTsKICAgICByb290LT5zZXRDb250ZW50
Qm91bmRzKHJvb3QtPmJvdW5kcygpKTsKICAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7
Ci0gICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBv
aW50KCksIEludFNpemUocm9vdFJlY3Qud2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpKSk7CiAK
ICAgICBjaGlsZC0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CiAgICAgY2hpbGQt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoY2hpbGRSZWN0LngoKSwgY2hpbGRSZWN0LnkoKSkpOwpA
QCAtNjA3LDE0ICs1OTIsOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHNjaXNz
b3JSZWN0V2l0aENsaXBBbmRTcGFjZVRyYW5zZm9ybSkKIAogICAgIFZlY3RvcjxDQ0xheWVySW1w
bCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAgICAgewotICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4g
bGF5ZXJMaXN0OwogICAgICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKICAgICAg
ICAgQ0NMYXllclNvcnRlciBsYXllclNvcnRlcjsKLQotICAgICAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKLQotICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJM
aXN0LCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3Qt
PmJvdW5kcygpLCAxLCAmbGF5ZXJTb3J0ZXIsIGR1bW15TWF4VGV4dHVyZVNpemUsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwogCiAgICAgICAgIEZsb2F0UmVjdCBkdW1teURhbWFnZVJlY3Q7CiAg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JS
ZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teURhbWFnZVJlY3QpOwpAQCAtNzI1LDcg
KzcwNSw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jt
c0ZvclJlcGxpY2EpCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxkUmVwbGljYSA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudD4gZ3JhbmRDaGlsZCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVt
V2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKICAgICBjaGlsZC0+YWRkQ2hpbGQo
Z3JhbmRDaGlsZCk7CiAgICAgY2hpbGQtPnNldFJlcGxpY2FMYXllcihjaGlsZFJlcGxpY2EuZ2V0
KCkpOwpAQCAtNzg3LDcgKzc2Niw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5VHJhbnNmb3Jtc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJjaHkpCiAgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGRPZlJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsK
ICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdyYW5kQ2hp
bGRPZlJTMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVu
dCgpKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGdy
YW5kQ2hpbGRPZlJTMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdz
Q29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICBwYXJl
bnQtPmFkZENoaWxkKHJlbmRlclN1cmZhY2UxKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxk
T2ZSb290KTsKICAgICByZW5kZXJTdXJmYWNlMS0+YWRkQ2hpbGQoY2hpbGRPZlJTMSk7CkBAIC05
MjcsMzcgKzkwNSwzMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRy
YW5zZm9ybXNGb3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIEVYUEVDVF9GTE9BVF9FUSg1
LCBncmFuZENoaWxkT2ZSUzItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkubTQyKCkpOwogfQogCi1U
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1cmZhY2VMaXN0Rm9y
Q2xpcExheWVyKQorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5kZXJT
dXJmYWNlTGlzdEZvclJlbmRlclN1cmZhY2VXaXRoQ2xpcHBlZExheWVyKQogewogICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcmVuZGVyU3VyZmFjZTEgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNo
aWxkID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkp
OwotICAgIHJlbmRlclN1cmZhY2UxLT5zZXRPcGFjaXR5KDAuOSk7CiAKICAgICBjb25zdCBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTAp
LCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5kZXJTdXJmYWNl
MS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJv
KCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQoMzAsIDMwKSwgSW50
U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7CiAgICAgcGFyZW50LT5hZGRDaGlsZChyZW5k
ZXJTdXJmYWNlMSk7Ci0gICAgcmVuZGVyU3VyZmFjZTEtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsK
ICAgICByZW5kZXJTdXJmYWNlMS0+YWRkQ2hpbGQoY2hpbGQpOworICAgIHJlbmRlclN1cmZhY2Ux
LT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CiAKICAgICBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNp
emUgPSA1MTI7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7Ci0KLSAgICBGbG9hdFJlY3QgZHVtbXlEYW1hZ2VSZWN0OworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBw
YXJlbnQtPmJvdW5kcygpLCAxLCBkdW1teU1heFRleHR1cmVTaXplLCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRT
Y2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNl
KCktPmNvbnRlbnRSZWN0KCkpOwogCiAgICAgLy8gVGhlIGNoaWxkIGxheWVyJ3MgY29udGVudCBp
cyBlbnRpcmVseSBvdXRzaWRlIHRoZSBwYXJlbnQncyBjbGlwIHJlY3QsIHNvIHRoZSBpbnRlcm1l
ZGlhdGUKLSAgICAvLyByZW5kZXIgc3VyZmFjZSBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQuIFJl
bmRlciBzdXJmYWNlcyB3aXRob3V0IGNoaWxkcmVuIG9yIHZpc2libGUKKyAgICAvLyByZW5kZXIg
c3VyZmFjZSBzaG91bGQgbm90IGJlIGxpc3RlZCBoZXJlLCBldmVuIGlmIGl0IHdhcyBmb3JjZWQg
dG8gYmUgY3JlYXRlZC4gUmVuZGVyIHN1cmZhY2VzIHdpdGhvdXQgY2hpbGRyZW4gb3IgdmlzaWJs
ZQogICAgIC8vIGNvbnRlbnQgYXJlIHVuZXhwZWN0ZWQgYXQgZHJhdyB0aW1lIChlLmcuIHdlIG1p
Z2h0IHRyeSB0byBjcmVhdGUgYSBjb250ZW50IHRleHR1cmUgb2Ygc2l6ZSAwKS4KKyAgICBBU1NF
UlRfVFJVRShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgQVNTRVJUX0ZBTFNFKHJlbmRl
clN1cmZhY2UxLT5yZW5kZXJTdXJmYWNlKCkpOwotICAgIEVYUEVDVF9FUShyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSwgMFUpOworICAgIEVYUEVDVF9FUSgxVSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeVJlbmRlclN1cmZhY2VMaXN0Rm9yVHJhbnNwYXJlbnRDaGlsZCkKQEAgLTk2NSwyOSArOTM4
LDI4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5UmVuZGVyU3VyZmFj
ZUxpc3RGb3JUcmFuc3BhcmVudENoaWxkKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJl
bnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cmVuZGVyU3VyZmFjZTEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGNoaWxkID0gYWRvcHRSZWYobmV3IExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50KCkpOwotICAgIHJlbmRlclN1cmZhY2Ux
LT5zZXRPcGFjaXR5KDApOwogCiAgICAgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRl
bnRpdHlNYXRyaXg7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5kZXJTdXJm
YWNlMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6
ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAg
c2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwg
SW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKHJlbmRlclN1cmZhY2UxKTsKLSAgICByZW5kZXJT
dXJmYWNlMS0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHJlbmRlclN1cmZhY2UxLT5hZGRD
aGlsZChjaGlsZCk7CisgICAgcmVuZGVyU3VyZmFjZTEtPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0
cnVlKTsKKyAgICByZW5kZXJTdXJmYWNlMS0+c2V0T3BhY2l0eSgwKTsKIAogICAgIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlN
YXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0
LCBkdW1teU1heFRleHR1cmVTaXplKTsKLQorICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQtPmJvdW5kcygpLCAxLCBk
dW1teU1heFRleHR1cmVTaXplLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpOwog
CiAgICAgLy8gU2luY2UgdGhlIGxheWVyIGlzIHRyYW5zcGFyZW50LCByZW5kZXJTdXJmYWNlMS0+
cmVuZGVyU3VyZmFjZSgpIHNob3VsZCBub3QgaGF2ZSBnb3R0ZW4gYWRkZWQgYW55d2hlcmUuCiAg
ICAgLy8gQWxzbywgdGhlIGRyYXdhYmxlIGNvbnRlbnQgcmVjdCBzaG91bGQgbm90IGhhdmUgYmVl
biBleHRlbmRlZCBieSB0aGUgY2hpbGRyZW4uCi0gICAgRVhQRUNUX0VRKHBhcmVudC0+cmVuZGVy
U3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCksIDBVKTsKLSAgICBFWFBFQ1RfRVEocmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5zaXplKCksIDBVKTsKLSAgICBFWFBFQ1RfRVEocGFyZW50LT5kcmF3
YWJsZUNvbnRlbnRSZWN0KCksIEludFJlY3QoKSk7CisgICAgQVNTRVJUX1RSVUUocGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9FUSgwVSwgcGFyZW50LT5yZW5kZXJTdXJmYWNl
KCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgRVhQRUNUX0VRKDFVLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHBhcmVudC0+aWQoKSwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7CisgICAgRVhQRUNUX0VRKEludFJlY3QoKSwgcGFyZW50
LT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwogfQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFjZSkKQEAgLTEwMDIsMjQgKzk3NCwyOCBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUZvcmNlUmVuZGVyU3VyZmFjZSkK
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJlbmRlclN1cmZhY2UxLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRQ
b2ludDo6emVybygpLCBJbnRTaXplKDEwLCAxMCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIEZsb2F0UG9pbnQ6Onplcm8oKSwgRmxvYXRQb2ludDo6emVybygpLCBJbnRTaXplKDEwLCAx
MCksIGZhbHNlKTsKIAotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKHJlbmRlclN1cmZhY2Ux
KTsKICAgICByZW5kZXJTdXJmYWNlMS0+YWRkQ2hpbGQoY2hpbGQpOwogCisgICAgLy8gU2FuaXR5
IGNoZWNrIGJlZm9yZSB0aGUgYWN0dWFsIHRlc3QKKyAgICBFWFBFQ1RfRkFMU0UocGFyZW50LT5y
ZW5kZXJTdXJmYWNlKCkpOworICAgIEVYUEVDVF9GQUxTRShyZW5kZXJTdXJmYWNlMS0+cmVuZGVy
U3VyZmFjZSgpKTsKKwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1t
eUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwg
cGFyZW50LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQo
KSwgcGFyZW50LT5ib3VuZHMoKSwgMSwgZHVtbXlNYXhUZXh0dXJlU2l6ZSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CiAKKyAgICAvLyBUaGUgcm9vdCBsYXllciBhbHdheXMgY3JlYXRlcyBhIHJl
bmRlclN1cmZhY2UKKyAgICBFWFBFQ1RfVFJVRShwYXJlbnQtPnJlbmRlclN1cmZhY2UoKSk7CiAg
ICAgRVhQRUNUX1RSVUUocmVuZGVyU3VyZmFjZTEtPnJlbmRlclN1cmZhY2UoKSk7Ci0gICAgRVhQ
RUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpLCAxVSk7CisgICAgRVhQRUNUX0VR
KDJVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CiAKICAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmNsZWFyKCk7CiAgICAgcmVuZGVyU3VyZmFjZTEtPnNldEZvcmNlUmVuZGVyU3Vy
ZmFjZShmYWxzZSk7Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVtbXlN
YXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC0+Ym91bmRzKCksIDEsIGR1bW15TWF4VGV4
dHVyZVNpemUsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9UUlVFKHBhcmVu
dC0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBFWFBFQ1RfRkFMU0UocmVuZGVyU3VyZmFjZTEtPnJl
bmRlclN1cmZhY2UoKSk7Ci0gICAgRVhQRUNUX0VRKHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6
ZSgpLCAwVSk7CisgICAgRVhQRUNUX0VRKDFVLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUo
KSk7CiB9CiAKIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5U2Nyb2xsQ29t
cGVuc2F0aW9uRm9yRml4ZWRQb3NpdGlvbkxheWVyV2l0aERpcmVjdENvbnRhaW5lcikKQEAgLTE2
MDcsNyArMTU4Myw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xp
cFJlY3RDdWxsc1JlbmRlclN1cmZhY2VzKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmVh
dEdyYW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMSA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKICAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGxlYWZOb2RlMiA9IGFkb3B0UmVmKG5ldyBM
YXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKICAgICBjaGls
ZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CiAgICAgZ3JhbmRDaGlsZC0+YWRkQ2hpbGQoZ3JlYXRH
cmFuZENoaWxkKTsKQEAgLTE2MzAsMTYgKzE2MDUsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKICAgICBncmVhdEdy
YW5kQ2hpbGQtPnNldE9wYWNpdHkoMC40KTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKLQotICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNwZWNp
YWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8gZml4
IGl0IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKLQotICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOwotCi0gICAgRmxvYXRSZWN0
IGR1bW15RGFtYWdlUmVjdDsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LT5ib3VuZHMoKSwgMSwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIAogCkBAIC0x
Njg1LDE0ICsxNjUyLDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlD
bGlwUmVjdEN1bGxzU3VyZmFjZVdpdGhvdXRWaXNpYmxlQ29udGVudCkKICAgICBncmFuZENoaWxk
LT5zZXRPcGFjaXR5KDAuNCk7CiAKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0K
LSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5k
cygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsK
LQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMo
cGFyZW50LmdldCgpLCBwYXJlbnQtPmJvdW5kcygpLCAxLCBkdW1teU1heFRleHR1cmVTaXplLCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIFdpdGhvdXQgYW4gYW5pbWF0aW9uLCB3
ZSBzaG91bGQgY3VsbCBjaGlsZCBhbmQgZ3JhbmRDaGlsZCBmcm9tIHRoZSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LgogICAgIEFTU0VSVF9FUSgxVSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXpl
KCkpOwpAQCAtMTcwNSwxMyArMTY2Niw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5Q2xpcFJlY3RDdWxsc1N1cmZhY2VXaXRob3V0VmlzaWJsZUNvbnRlbnQpCiAgICAg
Y2hpbGQtPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogICAgIGdyYW5kQ2hpbGQtPmNsZWFyUmVuZGVy
U3VyZmFjZSgpOwogICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuY2xlYXIoKTsKLSAgICBkdW1t
eUxheWVyTGlzdC5jbGVhcigpOwogCi0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7
Ci0gICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHBhcmVudC5nZXQoKSk7Ci0KLSAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50LT5ib3VuZHMoKSwgMSwg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICAvLyBX
aXRoIGFuIGFuaW1hdGluZyB0cmFuc2Zvcm0sIHdlIHNob3VsZCBrZWVwIGNoaWxkIGFuZCBncmFu
ZENoaWxkIGluIHRoZSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LgogICAgIEFTU0VSVF9FUSgzVSwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOwpAQCAtMTczOCw3ICsxNjk0LDYgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlEcmF3YWJsZUNvbnRlbnRSZWN0Rm9y
TGF5ZXJzKQogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMyA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkNCA9
IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogCi0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CiAgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZCk7CiAgICAgY2hpbGQtPmFkZENoaWxk
KGdyYW5kQ2hpbGQxKTsKICAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDIpOwpAQCAtMTc2
MywxNCArMTcxOCw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5RHJh
d2FibGVDb250ZW50UmVjdEZvckxheWVycykKICAgICBncmFuZENoaWxkNC0+c2V0T3BhY2l0eSgw
LjUpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJM
aXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotCi0gICAgLy8gRklYTUU6
IHdoZW4gd2UgZml4IHRoaXMgInJvb3QtbGF5ZXIgc3BlY2lhbCBjYXNlIiBiZWhhdmlvciBpbiBD
Q0xheWVyVHJlZUhvc3QsIHdlIHdpbGwgaGF2ZSB0byBmaXggaXQgaGVyZSwgdG9vLgotICAgIHBh
cmVudC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KCks
IHBhcmVudC0+Ym91bmRzKCkpKTsKLSAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChw
YXJlbnQuZ2V0KCkpOwotCi0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgZHVt
bXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVE
cmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC0+Ym91bmRzKCksIDEsIGR1bW15TWF4
VGV4dHVyZVNpemUsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCiAgICAgQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIHBhcmVudC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIApAQCAt
MTgwMiw3ICsxNzUxLDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlD
bGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvU3VyZmFjZXMpCiAgICAgUmVmUHRyPExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsZWFmTm9kZTMgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CiAgICAgUmVmUHRyPExheWVy
Q2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBsZWFmTm9kZTQgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CiAKLSAgICBwYXJlbnQtPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKICAgICBj
aGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEpOwogICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENo
aWxkMik7CkBAIC0xODM4LDE0ICsxNzg2LDggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlDbGlwUmVjdElzUHJvcGFnYXRlZENvcnJlY3RseVRvU3VyZmFjZXMpCiAgICAg
Z3JhbmRDaGlsZDQtPnNldE9wYWNpdHkoMC41KTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6
ZSA9IDUxMjsKLQotICAgIC8vIEZJWE1FOiB3aGVuIHdlIGZpeCB0aGlzICJyb290LWxheWVyIHNw
ZWNpYWwgY2FzZSIgYmVoYXZpb3IgaW4gQ0NMYXllclRyZWVIb3N0LCB3ZSB3aWxsIGhhdmUgdG8g
Zml4IGl0IGhlcmUsIHRvby4KLSAgICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVu
dFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKLQotICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJl
bnQtPmJvdW5kcygpLCAxLCBkdW1teU1heFRleHR1cmVTaXplLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudFJlY3QoKSk7CiAKQEAgLTE4NzEsNyArMTgxMyw2IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QW5pbWF0aW9uc0ZvclJlbmRlclN1cmZhY2VIaWVyYXJj
aHkpCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdyYW5kQ2hpbGRPZlJvb3QgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3
c0NvbnRlbnQ+IGdyYW5kQ2hpbGRPZlJTMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0
aEZvcmNlZERyYXdzQ29udGVudCgpKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3Jj
ZWREcmF3c0NvbnRlbnQ+IGdyYW5kQ2hpbGRPZlJTMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKHJlbmRlclN1cmZhY2UxKTsKICAgICBwYXJl
bnQtPmFkZENoaWxkKGNoaWxkT2ZSb290KTsKICAgICByZW5kZXJTdXJmYWNlMS0+YWRkQ2hpbGQo
Y2hpbGRPZlJTMSk7CkBAIC0yMjc3LDcgKzIyMTgsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhvdXRQcmVzZXJ2ZXMzZCkKICAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQ+IGZyb250RmFjaW5nQ2hp
bGRPZkJhY2tGYWNpbmdTdXJmYWNlID0gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW1XaXRoRm9y
Y2VkRHJhd3NDb250ZW50KCkpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudD4gYmFja0ZhY2luZ0NoaWxkT2ZCYWNrRmFjaW5nU3VyZmFjZSA9IGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKIAotICAgIHBhcmVu
dC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQoZnJvbnRGYWNp
bmdDaGlsZCk7CiAgICAgcGFyZW50LT5hZGRDaGlsZChiYWNrRmFjaW5nQ2hpbGQpOwogICAgIHBh
cmVudC0+YWRkQ2hpbGQoZnJvbnRGYWNpbmdTdXJmYWNlKTsKQEAgLTIzMTksMTIgKzIyNTksOCBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dp
dGhvdXRQcmVzZXJ2ZXMzZCkKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGJhY2tG
YWNpbmdDaGlsZE9mQmFja0ZhY2luZ1N1cmZhY2UuZ2V0KCksIGJhY2tmYWNlTWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgx
MDAsIDEwMCksIGZhbHNlKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiBkdW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAg
ICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50LmdldCgpKTsKLQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQtPmJvdW5kcygpLCAxLCBkdW1t
eU1heFRleHR1cmVTaXplLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIFZlcmlm
eSB3aGljaCByZW5kZXJTdXJmYWNlcyB3ZXJlIGNyZWF0ZWQuCiAgICAgRVhQRUNUX0ZBTFNFKGZy
b250RmFjaW5nQ2hpbGQtPnJlbmRlclN1cmZhY2UoKSk7CkBAIC0yMzc2LDcgKzIzMTIsNiBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhQ
cmVzZXJ2ZXMzZCkKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQ+IGR1bW15UmVwbGljYUxheWVyMSA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZv
cmNlZERyYXdzQ29udGVudCgpKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWRE
cmF3c0NvbnRlbnQ+IGR1bW15UmVwbGljYUxheWVyMiA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKIAotICAgIHBhcmVudC0+Y3JlYXRlUmVuZGVy
U3VyZmFjZSgpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQoZnJvbnRGYWNpbmdDaGlsZCk7CiAgICAg
cGFyZW50LT5hZGRDaGlsZChiYWNrRmFjaW5nQ2hpbGQpOwogICAgIHBhcmVudC0+YWRkQ2hpbGQo
ZnJvbnRGYWNpbmdTdXJmYWNlKTsKQEAgLTI0MjMsMTIgKzIzNTgsOCBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhQcmVzZXJ2ZXMzZCkK
ICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGJhY2tGYWNpbmdDaGlsZE9mQmFja0Zh
Y2luZ1N1cmZhY2UuZ2V0KCksIGJhY2tmYWNlTWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQ
b2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsK
IAogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsK
ICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBwYXJlbnQtPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5k
cygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsK
LQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFy
ZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMo
cGFyZW50LmdldCgpLCBwYXJlbnQtPmJvdW5kcygpLCAxLCBkdW1teU1heFRleHR1cmVTaXplLCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIFZlcmlmeSB3aGljaCByZW5kZXJTdXJm
YWNlcyB3ZXJlIGNyZWF0ZWQuCiAgICAgRVhQRUNUX0ZBTFNFKGZyb250RmFjaW5nQ2hpbGQtPnJl
bmRlclN1cmZhY2UoKSk7CkBAIC0yNDczLDcgKzI0MDQsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhBbmltYXRpbmdUcmFuc2Zvcm1z
KQogICAgIFJlZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gYW5pbWF0
aW5nQ2hpbGQgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRl
bnQoKSk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBj
aGlsZDIgPSBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQo
KSk7CiAKLSAgICBwYXJlbnQtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICBwYXJlbnQtPmFk
ZENoaWxkKGNoaWxkKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGFuaW1hdGluZ1N1cmZhY2UpOwog
ICAgIGFuaW1hdGluZ1N1cmZhY2UtPmFkZENoaWxkKGNoaWxkT2ZBbmltYXRpbmdTdXJmYWNlKTsK
QEAgLTI1MDgsMTMgKzI0MzgsOCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhBbmltYXRpbmdUcmFuc2Zvcm1zKQogICAgIHNldExheWVy
UHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwgMCksIEludFNpemUoMTAw
LCAxMDApLCBmYWxzZSk7CiAKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4g
ZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0KLSAg
ICBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBwYXJlbnQtPmJvdW5kcygpKSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocGFyZW50LmdldCgpKTsKLQotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQtPmJvdW5kcygpLCAxLCBkdW1t
eU1heFRleHR1cmVTaXplLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBwYXJlbnQtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSk7CiAK
QEAgLTI1NjAsNyArMjQ4NSw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZlczNkRm9yRmxhdHRlbmluCiAgICAgUmVmUHRy
PExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBjaGlsZDEgPSBhZG9wdFJlZihu
ZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CiAgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBjaGlsZDIgPSBhZG9wdFJlZihuZXcg
TGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CiAKLSAgICBwYXJlbnQtPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICBwYXJlbnQtPmFkZENoaWxkKGZyb250RmFjaW5nU3Vy
ZmFjZSk7CiAgICAgcGFyZW50LT5hZGRDaGlsZChiYWNrRmFjaW5nU3VyZmFjZSk7CiAgICAgZnJv
bnRGYWNpbmdTdXJmYWNlLT5hZGRDaGlsZChjaGlsZDEpOwpAQCAtMjU4MiwxMiArMjUwNiw4IEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0
aFByZXNlcnZlczNkRm9yRmxhdHRlbmluCiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
ZyhjaGlsZDIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgxMDAsIDEwMCksIGZhbHNlKTsKIAog
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
OwotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1teUxheWVyTGlzdDsKICAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICBwYXJlbnQtPnJlbmRlclN1cmZh
Y2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBwYXJlbnQtPmJvdW5kcygp
KSk7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocGFyZW50LmdldCgpKTsKLQot
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50
LmdldCgpLCBwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFy
ZW50LmdldCgpLCBwYXJlbnQtPmJvdW5kcygpLCAxLCBkdW1teU1heFRleHR1cmVTaXplLCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIFZlcmlmeSB3aGljaCByZW5kZXJTdXJmYWNl
cyB3ZXJlIGNyZWF0ZWQuCiAgICAgRVhQRUNUX1RSVUUoZnJvbnRGYWNpbmdTdXJmYWNlLT5yZW5k
ZXJTdXJmYWNlKCkpOwpAQCAtMjYzMSw4ICsyNTUxLDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlTGF5ZXIpCiAgICAgRGVidWdTY29w
ZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhyZWFkOwogCiAgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMjM0NSk7Ci0gICAgcm9vdC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOwog
CiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgRmxvYXRQ
b2ludCBhbmNob3IoMCwgMCk7CkBAIC0yNjQyLDEwICsyNTYwLDggQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlTGF5ZXIpCiAgICAgcm9v
dC0+c2V0RHJhd3NDb250ZW50KHRydWUpOwogCiAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVy
TGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC0+Ym91bmRzKCks
IDEsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0
IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KIAog
ICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgpAQCAtMjY3
OCw4ICsyNTk0LDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRU
ZXN0aW5nRm9yVW5pbnZlcnRpYmxlVHJhbnNmb3JtKQogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRo
cmVhZCB0aGlzU2NvcGVJc09uSW1wbFRocmVhZDsKIAogICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTIzNDUpOwotICAgIHJvb3QtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKLSAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKIAogICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IHVuaW52ZXJ0aWJsZVRyYW5zZm9ybTsKICAgICB1bmludmVydGli
bGVUcmFuc2Zvcm0uc2V0TTExKDApOwpAQCAtMjY5NiwxMCArMjYxMCw4IEBAIFRFU1QoQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0ZvclVuaW52ZXJ0aWJsZVRyYW5z
Zm9ybSkKICAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CiAKICAgICBWZWN0b3I8Q0NM
YXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxDQ0xheWVySW1w
bCo+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwot
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOwotICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9v
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCBy
b290LT5ib3VuZHMoKSwgMSwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5k
U2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1w
dHkgc2Npc3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29y
cmVjdCByZWN0LgogCiAgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNy
ZWF0ZWQuCkBAIC0yNzQ0LDggKzI2NTYsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVQb3NpdGlvbmVkTGF5ZXIpCiAgICAgRGVidWdT
Y29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhyZWFkOwogCiAgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMjM0NSk7Ci0gICAgcm9v
dC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0
Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkp
OwogCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgRmxv
YXRQb2ludCBhbmNob3IoMCwgMCk7CkBAIC0yNzU1LDEwICsyNjY1LDggQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlUG9zaXRpb25lZExh
eWVyKQogICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKIAogICAgIFZlY3RvcjxDQ0xh
eWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0g
ICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7Ci0gICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJv
b3QtPmJvdW5kcygpLCAxLCAwLCBkdW1teU1heFRleHR1cmVTaXplLCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRT
Y2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBlbXB0
eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBjb3Jy
ZWN0IHJlY3QuCiAKICAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3QgY3Jl
YXRlZC4KQEAgLTI3OTIsOCArMjcwMCw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZVJvdGF0ZWRMYXllcikKICAgICBEZWJ1Z1Njb3Bl
ZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CiAKICAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMzQ1KTsKLSAgICByb290LT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAxMDApKSk7CiAK
ICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbjQ1RGVncmVlc0Fib3V0Q2VudGVyOwpAQCAtMjgwNywx
MCArMjcxMyw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVz
dGluZ0ZvclNpbmdsZVJvdGF0ZWRMYXllcikKICAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1
ZSk7CiAKICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owot
ICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1h
eFRleHR1cmVTaXplID0gNTEyOwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJv
b3QuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhU
ZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJh
bnNmb3Jtcyhyb290LmdldCgpLCByb290LT5ib3VuZHMoKSwgMSwgMCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdy
ZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0LgogCiAgICAgLy8gU2FuaXR5IGNoZWNrIHRo
ZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCkBAIC0yODQ4LDggKzI3NTIsNiBAQCBURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVQZXJzcGVj
dGl2ZUxheWVyKQogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCB0aGlzU2NvcGVJc09uSW1w
bFRocmVhZDsKIAogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMTIzNDUpOwotICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICByb290
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKIAogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlk
ZW50aXR5TWF0cml4OwogCkBAIC0yODY4LDEwICsyNzcwLDggQEAgVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlUGVyc3BlY3RpdmVMYXllcikK
ICAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CiAKICAgICBWZWN0b3I8Q0NMYXllcklt
cGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1
bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LT5i
b3VuZHMoKSwgMSwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Np
c3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCBy
ZWN0LgogCiAgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQu
CkBAIC0yOTE1LDQ0ICsyODE1LDUyIEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZUxheWVyV2l0aFNjYWxlZENvbnRlbnRzCiAgICAgLy8K
ICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CiAK
LSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMzQ1
KTsKLSAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUo
MTAwLCAxMDApKSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgxKTsKIAogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OwogICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOwotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24o
MjUsIDI1KTsKLSAgICBJbnRTaXplIGJvdW5kcyg1MCwgNTApOwotICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKLSAgICByb290LT5zZXREcmF3c0Nv
bnRlbnQodHJ1ZSk7CiAKLSAgICByb290LT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoMTAwLCAx
MDApKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBGbG9hdFBvaW50KDAsIDApLCBJbnRT
aXplKDEwMCwgMTAwKSwgZmFsc2UpOworCisgICAgeworICAgICAgICBGbG9hdFBvaW50IHBvc2l0
aW9uKDI1LCAyNSk7CisgICAgICAgIEludFNpemUgYm91bmRzKDUwLCA1MCk7CisgICAgICAgIE93
blB0cjxDQ0xheWVySW1wbD4gdGVzdExheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMjM0NSk7
CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcodGVzdExheWVyLmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywg
ZmFsc2UpOworCisgICAgICAgIC8vIG92ZXJyaWRlIGNvbnRlbnRCb3VuZHMKKyAgICAgICAgdGVz
dExheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoMTAwLCAxMDApKTsKKworICAgICAgICB0
ZXN0TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgcm9vdC0+YWRkQ2hpbGQo
dGVzdExheWVyLnJlbGVhc2UoKSk7CisgICAgfQogCiAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKLSAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxh
eWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKLSAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKLSAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC0+Ym91bmRz
KCksIDEsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwog
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JS
ZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4K
IAogICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgotICAg
IC8vIFRoZSB2aXNpYmxlQ29udGVudFJlY3QgaXMgYWN0dWFsbHkgMTAweDEwMCwgZXZlbiB0aG91
Z2ggdGhlIGxheW91dCBzaXplIG9mIHRoZSBsYXllciBpcyA1MHg1MCwgcG9zaXRpb25lZCBhdCAy
NXgyNS4KLSAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJ
bnRTaXplKDEwMCwgMTAwKSksIHJvb3QtPnZpc2libGVDb250ZW50UmVjdCgpKTsKKyAgICAvLyBU
aGUgdmlzaWJsZUNvbnRlbnRSZWN0IGZvciB0ZXN0TGF5ZXIgaXMgYWN0dWFsbHkgMTAweDEwMCwg
ZXZlbiB0aG91Z2ggaXRzIGxheW91dCBzaXplIGlzIDUweDUwLCBwb3NpdGlvbmVkIGF0IDI1eDI1
LgorICAgIENDTGF5ZXJJbXBsKiB0ZXN0TGF5ZXIgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgp
OworICAgIEVYUEVDVF9JTlRfUkVDVF9FUShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNp
emUoMTAwLCAxMDApKSwgdGVzdExheWVyLT52aXNpYmxlQ29udGVudFJlY3QoKSk7CiAgICAgQVNT
RVJUX0VRKDF1LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgQVNTRVJUX0VR
KDF1LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CiAKLSAgICAv
LyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBvdXRzaWRlIHRoZSBsYXllciBzaG91bGQgcmV0dXJu
IGEgbnVsbCBwb2ludGVyLgotICAgIEludFBvaW50IHRlc3RQb2ludCgyNCwgMjQpOworICAgIC8v
IEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IG91dHNpZGUgdGhlIGxheWVyIHNob3VsZCByZXR1cm4g
YSBudWxsIHBvaW50ZXIgKHRoZSByb290IGxheWVyIGRvZXMgbm90IGRyYXcgY29udGVudCwgc28g
aXQgd2lsbCBub3QgYmUgaGl0IHRlc3RlZCBlaXRoZXIpLgorICAgIEludFBvaW50IHRlc3RQb2lu
dCgxMDEsIDEwMSk7CiAgICAgQ0NMYXllckltcGwqIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKIAotICAgIC8v
IEV2ZW4gdGhvdWdoIHRoZSBsYXllciBleGlzdHMgYXQgKDEwMSwgMTAxKSwgaXQgc2hvdWxkIG5v
dCBiZSB2aXNpYmxlIHRoZXJlIHNpbmNlIHRoZSByb290IHJlbmRlclN1cmZhY2Ugd291bGQgY2xh
bXAgaXQuCi0gICAgLy8gVGhpcyBjYXNlIGluIHBhcnRpY3VsYXIgaXMgbGlrZWx5IHRvIGZhaWwg
aWYgY29udGVudHMgc2NhbGUgaXMgbm90IGNvcnJlY3RseSBhY2NvdW50ZWQgZm9yLgorICAgIHRl
c3RQb2ludCA9IEludFBvaW50KDI0LCAyNCk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCiAgICAg
dGVzdFBvaW50ID0gSW50UG9pbnQoNzYsIDc2KTsKICAgICByZXN1bHRMYXllciA9IENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CiAKLSAg
ICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBpbnNpZGUgc2hvdWxkIHJldHVybiB0aGUgcm9v
dCBsYXllci4KKyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBpbnNpZGUgc2hvdWxkIHJl
dHVybiB0aGUgdGVzdCBsYXllci4KICAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgyNiwgMjYpOwog
ICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNI
aXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgQVNTRVJU
X1RSVUUocmVzdWx0TGF5ZXIpOwpAQCAtMjk3MCwzNiArMjg3OCwzNyBAQCBURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW1wbGVDbGlwcGVkTGF5ZXIp
CiAgICAgLy8gdGhlIGVudGlyZSBsYXllciBib3VuZHMuIEhlcmUgd2UganVzdCB0ZXN0IHRoZSBz
aW1wbGUgYXhpcy1hbGlnbmVkIGNhc2UuCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRo
aXNTY29wZUlzT25JbXBsVGhyZWFkOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgxMjMpOwotICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKLSAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKLQogICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOwot
ICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oMjUsIDI1KTsgLy8gdGhpcyBsYXllciBpcyBwb3NpdGlv
bmVkLCBhbmQgaGl0IHRlc3Rpbmcgc2hvdWxkIGNvcnJlY3RseSBrbm93IHdoZXJlIHRoZSBsYXll
ciBpcyBsb2NhdGVkLgotICAgIEludFNpemUgYm91bmRzKDUwLCA1MCk7Ci0gICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhyb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOwotICAgIHJvb3QtPnNldE1h
c2tzVG9Cb3VuZHModHJ1ZSk7CisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDEpOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9v
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIEZsb2F0UG9p
bnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApLCBmYWxzZSk7CiAKICAgICB7CisgICAgICAgIE93
blB0cjxDQ0xheWVySW1wbD4gY2xpcHBpbmdMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTIz
KTsKKyAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbigyNSwgMjUpOyAvLyB0aGlzIGxheWVyIGlz
IHBvc2l0aW9uZWQsIGFuZCBoaXQgdGVzdGluZyBzaG91bGQgY29ycmVjdGx5IGtub3cgd2hlcmUg
dGhlIGxheWVyIGlzIGxvY2F0ZWQuCisgICAgICAgIEludFNpemUgYm91bmRzKDUwLCA1MCk7Cisg
ICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2xpcHBpbmdMYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMs
IGZhbHNlKTsKKyAgICAgICAgY2xpcHBpbmdMYXllci0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsK
KwogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0
ZSg0NTYpOwogICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQoLTUwLCAtNTApOwogICAgICAg
ICBib3VuZHMgPSBJbnRTaXplKDMwMCwgMzAwKTsKICAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBh
bmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKICAgICAgICAgY2hpbGQtPnNldERyYXdz
Q29udGVudCh0cnVlKTsKLSAgICAgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsK
KyAgICAgICAgY2xpcHBpbmdMYXllci0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKyAgICAg
ICAgcm9vdC0+YWRkQ2hpbGQoY2xpcHBpbmdMYXllci5yZWxlYXNlKCkpOwogICAgIH0KIAogICAg
IFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9y
PENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNp
emUgPSA1MTI7Ci0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7
Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290
LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJv
b3QuZ2V0KCksIHJvb3QtPmJvdW5kcygpLCAxLCAwLCBkdW1teU1heFRleHR1cmVTaXplLCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0
KCkpOyAvLyBlbXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0
aW5nIHRoZSBjb3JyZWN0IHJlY3QuCiAKICAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlv
IHdlIGp1c3QgY3JlYXRlZC4KICAgICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxp
c3Quc2l6ZSgpKTsKICAgICBBU1NFUlRfRVEoMXUsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5
ZXJMaXN0KCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoNDU2LCByb290LT5yZW5kZXJTdXJmYWNl
KCktPmxheWVyTGlzdCgpWzBdLT5pZCgpKTsKIAogICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBv
aW50IG91dHNpZGUgdGhlIGxheWVyIHNob3VsZCByZXR1cm4gYSBudWxsIHBvaW50ZXIuCiAgICAg
Ly8gRGVzcGl0ZSB0aGUgY2hpbGQgbGF5ZXIgYmVpbmcgdmVyeSBsYXJnZSwgaXQgc2hvdWxkIGJl
IGNsaXBwZWQgdG8gdGhlIHJvb3QgbGF5ZXIncyBib3VuZHMuCkBAIC0zMDA3LDcgKzI5MTYsNyBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW1w
bGVDbGlwcGVkTGF5ZXIpCiAgICAgQ0NMYXllckltcGwqIHJlc3VsdExheWVyID0gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKIAotICAg
IC8vIEV2ZW4gdGhvdWdoIHRoZSBsYXllciBleGlzdHMgYXQgKDEwMSwgMTAxKSwgaXQgc2hvdWxk
IG5vdCBiZSB2aXNpYmxlIHRoZXJlIHNpbmNlIHRoZSByb290IHJlbmRlclN1cmZhY2Ugd291bGQg
Y2xhbXAgaXQuCisgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGxheWVyIGV4aXN0cyBhdCAoMTAxLCAx
MDEpLCBpdCBzaG91bGQgbm90IGJlIHZpc2libGUgdGhlcmUgc2luY2UgdGhlIGNsaXBwaW5nTGF5
ZXIgd291bGQgY2xhbXAgaXQuCiAgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNzYsIDc2KTsKICAg
ICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0
QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEVYUEVDVF9G
QUxTRShyZXN1bHRMYXllcik7CkBAIC0zMDM5LDggKzI5NDgsNiBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JNdWx0aUNsaXBwZWRSb3RhdGVkTGF5
ZXIpCiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHRoaXNTY29wZUlzT25JbXBsVGhyZWFk
OwogCiAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgx
MjMpOwotICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICByb290LT5yZW5kZXJT
dXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6
ZSgxMDAsIDEwMCkpKTsKIAogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OwogICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOwpAQCAtMzA4NSwxMCArMjk5Miw4IEBA
IFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRp
Q2xpcHBlZFJvdGF0ZWRMYXllcikKICAgICB9CiAKICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5
ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwotICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOwotICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LT5ib3VuZHMo
KSwgMSwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJl
Y3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0Lgog
CiAgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCkBAIC0z
MTQyLDggKzMwNDcsNiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhp
dFRlc3RpbmdGb3JNdWx0aXBsZUxheWVycykKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
dGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CiAKICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwotICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKLSAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKIAogICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOwpA
QCAtMzE4OSwxMCArMzA5Miw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVy
aWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJzKQogICAgIENDTGF5ZXJJbXBsKiBncmFuZENo
aWxkMSA9IGNoaWxkMS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKIAogICAgIFZlY3RvcjxDQ0xheWVy
SW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4g
ZHVtbXlMYXllckxpc3Q7CiAgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7Ci0gICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7Ci0gICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3Qt
PmJvdW5kcygpLCAxLCAwLCBkdW1teU1heFRleHR1cmVTaXplLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lz
c29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBlbXB0eSBz
Y2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBjb3JyZWN0
IHJlY3QuCiAKICAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3QgY3JlYXRl
ZC4KQEAgLTMyNTIsOCArMzE1Myw2IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJMaXN0cykKICAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgdGhpc1Njb3BlSXNPbkltcGxUaHJlYWQ7CiAKICAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwotICAgIHJvb3QtPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKLSAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKIAogICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIEZsb2F0UG9pbnQgYW5j
aG9yKDAsIDApOwpAQCAtMzMwMiwxMCArMzIwMSw4IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJMaXN0cykKICAgICBDQ0xh
eWVySW1wbCogZ3JhbmRDaGlsZDEgPSBjaGlsZDEtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CiAKICAg
ICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwotICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkp
OwotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9v
dC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhy
b290LmdldCgpLCByb290LT5ib3VuZHMoKSwgMSwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxh
dGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVj
dCgpKTsgLy8gZW1wdHkgc2Npc3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVz
dGluZyB0aGUgY29ycmVjdCByZWN0LgogCiAgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJp
byB3ZSBqdXN0IGNyZWF0ZWQuCkBAIC0zMzgxLDcgKzMyNzgsNiBAQCBURVNUKENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QsIHZlcmlmeUxheWVyVHJhbnNmb3Jtc0luSGlnaERQSSkKICAgICAvLyBW
ZXJpZnkgZHJhdyBhbmQgc2NyZWVuIHNwYWNlIHRyYW5zZm9ybXMgb2YgbGF5ZXJzIG5vdCBpbiBh
IHN1cmZhY2UuCiAgICAgTW9ja0NvbnRlbnRMYXllckRlbGVnYXRlIGRlbGVnYXRlOwogICAgIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IHBhcmVudE1hdHJpeDsKIAogICAgIFJlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1
bT4gcGFyZW50ID0gY3JlYXRlRHJhd2FibGVDb250ZW50TGF5ZXJDaHJvbWl1bSgmZGVsZWdhdGUp
OwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9pbnQoMCwg
MCksIEludFNpemUoMTAwLCAxMDApLCB0cnVlKTsKQEAgLTMzOTYsMjAgKzMyOTIsMTQgQEAgVEVT
VChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlMYXllclRyYW5zZm9ybXNJbkhpZ2hE
UEkpCiAgICAgcGFyZW50LT5hZGRDaGlsZChjaGlsZE5vU2NhbGUpOwogCiAgICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1h
eFRleHR1cmVTaXplID0gNTEyOwogCi0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7
Ci0gICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
YXBwZW5kKHBhcmVudC5nZXQoKSk7Ci0KICAgICBjb25zdCBkb3VibGUgZGV2aWNlU2NhbGVGYWN0
b3IgPSAyLjU7Ci0gICAgcGFyZW50TWF0cml4LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKICAg
ICBwYXJlbnQtPnNldENvbnRlbnRzU2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIGNoaWxk
LT5zZXRDb250ZW50c1NjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKICAgICBFWFBFQ1RfRVEoY2hp
bGROb1NjYWxlLT5jb250ZW50c1NjYWxlKCksIDEpOwogCi0gICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3JtcyhwYXJlbnQuZ2V0KCksIHBhcmVudC5nZXQoKSwg
cGFyZW50TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQtPmJvdW5k
cygpLCBkZXZpY2VTY2FsZUZhY3RvciwgZHVtbXlNYXhUZXh0dXJlU2l6ZSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CiAKICAgICBFWFBFQ1RfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpKTsKIApAQCAtMzQ3MCw3ICszMzYwLDYgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlVHJhbnNmb3Jtc0luSGlnaERQSSkKIHsKICAgICBN
b2NrQ29udGVudExheWVyRGVsZWdhdGUgZGVsZWdhdGU7CiAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50
TWF0cml4OwogCiAgICAgUmVmUHRyPENvbnRlbnRMYXllckNocm9taXVtPiBwYXJlbnQgPSBjcmVh
dGVEcmF3YWJsZUNvbnRlbnRMYXllckNocm9taXVtKCZkZWxlZ2F0ZSk7CiAgICAgc2V0TGF5ZXJQ
cm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgRmxvYXRQb2ludCgwLCAwKSwgRmxvYXRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMCwg
MzApLCB0cnVlKTsKQEAgLTM0OTMsMjEgKzMzODIsMTUgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlVHJhbnNmb3Jtc0luSGlnaERQSSkKICAgICBj
aGlsZC0+c2V0UmVwbGljYUxheWVyKHJlcGxpY2EuZ2V0KCkpOwogCiAgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Ci0gICAgVmVjdG9yPFJl
ZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgIGludCBkdW1teU1heFRl
eHR1cmVTaXplID0gNTEyOwogCi0gICAgcGFyZW50LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0g
ICAgcGFyZW50LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgcGFyZW50LT5ib3VuZHMoKSkpOwotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHBhcmVudC5nZXQoKSk7Ci0KICAgICBjb25zdCBkb3VibGUgZGV2aWNlU2NhbGVGYWN0b3Ig
PSAxLjU7Ci0gICAgcGFyZW50TWF0cml4LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKICAgICBw
YXJlbnQtPnNldENvbnRlbnRzU2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgIGNoaWxkLT5z
ZXRDb250ZW50c1NjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKICAgICBkdXBsaWNhdGVDaGlsZE5v
bk93bmVyLT5zZXRDb250ZW50c1NjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKICAgICByZXBsaWNh
LT5zZXRDb250ZW50c1NjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKIAotICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocGFyZW50LmdldCgpLCBwYXJlbnQu
Z2V0KCksIHBhcmVudE1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHBhcmVudC5nZXQoKSwgcGFyZW50
LT5ib3VuZHMoKSwgZGV2aWNlU2NhbGVGYWN0b3IsIGR1bW15TWF4VGV4dHVyZVNpemUsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOwogCiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgdHdvIHJlbmRlciBz
dXJmYWNlcy4gVGhlIHJvb3QncyByZW5kZXIgc3VyZmFjZSBhbmQgY2hpbGQncwogICAgIC8vIHJl
bmRlciBzdXJmYWNlIChpdCBuZWVkcyBvbmUgYmVjYXVzZSBpdCBoYXMgYSByZXBsaWNhIGxheWVy
KS4KQEAgLTM1ODgsMTcgKzM0NzEsNCBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeVN1YnRyZWVTZWFyY2gpCiAgICAgRVhQRUNUX0VRKDAsIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6ZmluZExheWVySW5TdWJ0cmVlKHJvb3QuZ2V0KCksIG5vbmV4aXN0ZW50SWQpKTsKIH0K
IAotLy8gRklYTUU6Ci0vLyBjb250aW51ZSB3b3JraW5nIG9uIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODk0MgotLy8gIC0gYWRkIGEgdGVzdCB0byB2ZXJpZnkgY2xp
cHBpbmcgdGhhdCBjaGFuZ2VzIHRoZSAiY2VudGVyIHBvaW50IgotLy8gIC0gYWRkIGEgY2FzZSB0
aGF0IGNoZWNrcyBpZiBhIHJlbmRlciBzdXJmYWNlJ3MgZHJhd1RyYW5zZm9ybSBpcyBjb21wdXRl
ZCBjb3JyZWN0bHkuIEZvciB0aGUgZ2VuZXJhbCBjYXNlLCBhbmQgZm9yIHNwZWNpYWwgY2FzZXMg
d2hlbiBjbGlwcGluZy4KLS8vICAtIGFkZCBhIGNhc2UgdGhhdCBjaGVja3MgaWYgYSByZW5kZXIg
c3VyZmFjZSdzIHJlcGxpY2FUcmFuc2Zvcm0gaXMgY29tcHV0ZWQgY29ycmVjdGx5LgotLy8gIC0g
dGVzdCBhbGwgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggcmVuZGVyIHN1cmZhY2VzIGFyZSBj
cmVhdGVkCi0vLyAgLSBpZiBwb3NzaWJsZSwgdGVzdCBhbGwgY29uZGl0aW9ucyB1bmRlciB3aGlj
aCByZW5kZXIgc3VyZmFjZXMgYXJlIG5vdCBjcmVhdGVkCi0vLyAgLSB2ZXJpZnkgdGhhdCB0aGUg
bGF5ZXIgbGlzdHMgb2YgcmVuZGVyIHN1cmZhY2VzIGFyZSBjb3JyZWN0LCB2ZXJpZnkgdGhhdCBy
ZW5kZXJUYXJnZXQncyBSZW5kZXJTdXJmYWNlIHZhbHVlcyBmb3IgZWFjaCBsYXllciBhcmUgY29y
cmVjdC4KLS8vICAtIHRlc3QgdGhlIGNvbXB1dGF0aW9uIG9mIGNsaXAgcmVjdHMgYW5kIGNvbnRl
bnQgcmVjdHMKLS8vICAtIHRlc3QgdGhlIHNwZWNpYWwgY2FzZXMgZm9yIG1hc2sgbGF5ZXJzIGFu
ZCByZXBsaWNhIGxheWVycwotLy8gIC0gdGVzdCB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIENDTGF5
ZXJUcmVlSG9zdENvbW1vbgotLy8KLQogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCmluZGV4
IGI1NTlkYjEyY2FlNDQyYzYxMWU5NWE1OTZmNTg0MzUxMGViNmM3ZWYuLjU5NmIwNjkyY2FiNzk5
MzM4ZTVjYzM2NTg5YzMyOTQyYzJhNWE3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtMjU2LDE2ICsy
NTYsMTIgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY2FsY0RyYXdFdGMoVGVzdENvbnRlbnRMYXll
ckltcGwqIHJvb3QpCiAgICAgewogICAgICAgICBBU1NFUlQocm9vdCA9PSBtX3Jvb3QuZ2V0KCkp
OwotICAgICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKICAgICAgICAg
aW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CiAgICAgICAgIENDTGF5ZXJTb3J0ZXIgbGF5
ZXJTb3J0ZXI7CiAKICAgICAgICAgQVNTRVJUKCFyb290LT5yZW5kZXJTdXJmYWNlKCkpOwotICAg
ICAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCByb290LT5i
b3VuZHMoKSkpOwotICAgICAgICBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLmFwcGVuZCht
X3Jvb3QuZ2V0KCkpOwogCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRl
RHJhd1RyYW5zZm9ybXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBsLCBkdW1teUxheWVyTGlzdCwgJmxheWVyU29y
dGVyLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LCByb290LT5ib3VuZHMoKSwgMSwgJmxheWVy
U29ydGVyLCBkdW1teU1heFRleHR1cmVTaXplLCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RJbXBs
KTsKIAogICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRT
Y2lzc29yUmVjdHMobV9yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0SW1wbCwgcm9vdC0+cmVuZGVyU3Vy
ZmFjZSgpLT5jb250ZW50UmVjdCgpKTsKIApAQCAtMjc1LDE1ICsyNzEsMTEgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgY2FsY0RyYXdFdGMoVGVzdENvbnRlbnRMYXllckNocm9taXVtKiByb290KQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHJvb3QgPT0gbV9yb290LmdldCgpKTsKLSAgICAgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGR1bW15TGF5ZXJMaXN0OwogICAgICAgICBpbnQg
ZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKIAogICAgICAgICBBU1NFUlQoIXJvb3QtPnJlbmRl
clN1cmZhY2UoKSk7Ci0gICAgICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICAg
ICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50
Ojp6ZXJvKCksIHJvb3QtPmJvdW5kcygpKSk7Ci0gICAgICAgIG1fcmVuZGVyU3VyZmFjZUxheWVy
TGlzdENocm9taXVtLmFwcGVuZChtX3Jvb3QpOwogCi0gICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdCwgcm9vdCwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bSwgZHVtbXlM
YXllckxpc3QsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QsIHJvb3QtPmJvdW5kcygpLCAxLCBk
dW1teU1heFRleHR1cmVTaXplLCBtX3JlbmRlclN1cmZhY2VMYXllckxpc3RDaHJvbWl1bSk7CiAK
ICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKG1fcmVuZGVyU3VyZmFjZUxheWVyTGlzdENocm9taXVtLCByb290LT5yZW5kZXJTdXJm
YWNlKCktPmNvbnRlbnRSZWN0KCkpOwogCg==
</data>
<flag name="review"
          id="163608"
          type_id="1"
          status="+"
          setter="enne"
    />
          </attachment>
      

    </bug>

</bugzilla>