<?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>58840</bug_id>
          
          <creation_ts>2011-04-18 15:05:16 -0700</creation_ts>
          <short_desc>[chromium] Decouple layer visibility calculations from render surfaces / computed draw transforms</short_desc>
          <delta_ts>2011-08-02 16:21:04 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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>58830</dependson>
    
    <dependson>65354</dependson>
          <blocked>58799</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>388085</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-18 15:05:16 -0700</bug_when>
    <thetext>Currently in ContentLayerChromium we determine the visible portion of the layer using the render surface scissor rect and the computed draw transform for the layer.  In the multithreaded compositor world, however, we&apos;ll be generating render surfaces and the final draw transform in the compositor thread since they might change from frame to frame (due to animation or whatnot).

We need to figure out some way to calculate visibility on the main thread, preferably without having to duplicate all of the draw transform + render surface bound calculations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396837</commentid>
    <comment_count>1</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-02 17:59:13 -0700</bug_when>
    <thetext>I&apos;m taking a look into this now.  My rough plan is as follows:

- land https://bugs.webkit.org/show_bug.cgi?id=58830 so the property pushing aspect of LRC::updatePropertiesAndRenderSurfaces() is separate from the transform portion

- make LayerRendererChromium::updatePropertiesAndRenderSurfaces() a generic function to calculate the draw transforms, visible regions, and z-order for a set of layers templated for LayerChromium+??? and CCLayerImpl+RenderSurfaceChromium so we can use the same codepath for LayerChromiums and CCLayerImpl.  This will also involve abstracting the &quot;holds on to a z-order list of layers, transform and bounds&quot; portion of RenderSurfaceChromium out from the &quot;is usable as a render target and can draw itself&quot; of RenderSurfaceChromium.

We&apos;ll run the algorithm to calculate draw transforms, visible regions, and z-order in the main thread portion using the LayerChromium tree and aggregate results into some class name TBD.  We&apos;ll then run the same code on the CCLayerImpl tree in the compositor thread and aggregate into real RenderSurfaceChromiums.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397103</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-03 08:45:49 -0700</bug_when>
    <thetext>(In reply to comment #1)

&gt; - make LayerRendererChromium::updatePropertiesAndRenderSurfaces() a generic function to calculate the draw transforms, visible regions, and z-order for a set of layers templated for LayerChromium+??? and CCLayerImpl+RenderSurfaceChromium so we can use the same codepath for LayerChromiums and CCLayerImpl.  This will also involve abstracting the &quot;holds on to a z-order list of layers, transform and bounds&quot; portion of RenderSurfaceChromium out from the &quot;is usable as a render target and can draw itself&quot; of RenderSurfaceChromium.

I was looking at some of this same code yesterday to try to better fix https://bugs.webkit.org/show_bug.cgi?id=59020.  The scissor rect / visible region calculation is wrong in one particular case, but I think there also needs to be some refactoring about where we calculate and store that scissor rect.  However, this sounds like exactly the same patch of code that you&apos;re about to uproot.

Would it make sense for you to try to address both at the same time? Otherwise, maybe I should postpone that fix until you&apos;re done reorganizing this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443765</commentid>
    <comment_count>3</comment_count>
      <attachid>102323</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-28 19:17:00 -0700</bug_when>
    <thetext>Created attachment 102323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443767</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-28 19:18:20 -0700</bug_when>
    <thetext>This patch might be a touch large to review (hah!).  I can think of at least one preliminary patch that I can land ahead of time to make the diff easier to read, which I&apos;ll file as a dependent bug on this one, but for the most part these changes have to land atomically, I&apos;m afraid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443785</commentid>
    <comment_count>5</comment_count>
      <attachid>102323</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-28 19:55:15 -0700</bug_when>
    <thetext>Comment on attachment 102323
Patch

Attachment 102323 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9269278</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443786</commentid>
    <comment_count>6</comment_count>
      <attachid>102323</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-28 20:00:16 -0700</bug_when>
    <thetext>Comment on attachment 102323
Patch

Attachment 102323 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9266366</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443973</commentid>
    <comment_count>7</comment_count>
      <attachid>102372</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-29 10:09:51 -0700</bug_when>
    <thetext>Created attachment 102372
compile fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444218</commentid>
    <comment_count>8</comment_count>
      <attachid>102417</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-29 18:33:36 -0700</bug_when>
    <thetext>Created attachment 102417
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444219</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-29 18:33:54 -0700</bug_when>
    <thetext>With http://trac.webkit.org/changeset/92037 landed this patch is still large, but a bit more manageable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444771</commentid>
    <comment_count>10</comment_count>
      <attachid>102417</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-08-01 10:54:13 -0700</bug_when>
    <thetext>Comment on attachment 102417
Patch

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

Looks good!  I suppose additional work will need to be done to deal with the texture manager used by CCRenderSurface?

&gt; Source/WebCore/ChangeLog:408
&gt; +2011-07-29  James Robinson  &lt;jamesr@chromium.org&gt;

Needs to be removed

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:410
&gt; +bool LayerChromium::descendantsDrawsContent()

nit: descendantDrawsContent() ?

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:-42
&gt; -#include &quot;RenderSurfaceChromium.h&quot;

Why change the order here?  Headers were alphabetically sorted.  If the need to be rearranged then there are hidden dependencies that should be eliminated.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

2011

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:30
&gt; +#include &quot;CCRenderSurface.h&quot;

cc/CCRenderSurface.h  ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444850</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-01 13:57:36 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 102417 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102417&amp;action=review
&gt; 
&gt; Looks good!  I suppose additional work will need to be done to deal with the texture manager used by CCRenderSurface?

Yes, there&apos;s some more work needed here - https://bugs.webkit.org/show_bug.cgi?id=64772 is the next piece of that puzzle.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:408
&gt; &gt; +2011-07-29  James Robinson  &lt;jamesr@chromium.org&gt;
&gt; 
&gt; Needs to be removed

fixed

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:410
&gt; &gt; +bool LayerChromium::descendantsDrawsContent()
&gt; 
&gt; nit: descendantDrawsContent() ?

good idea, fixed

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:-42
&gt; &gt; -#include &quot;RenderSurfaceChromium.h&quot;
&gt; 
&gt; Why change the order here?  Headers were alphabetically sorted.  If the need to be rearranged then there are hidden dependencies that should be eliminated.

resorted

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:2
&gt; &gt; + * Copyright (C) 2010 Google Inc. All rights reserved.
&gt; 
&gt; 2011

done
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:30
&gt; &gt; +#include &quot;CCRenderSurface.h&quot;
&gt; 
&gt; cc/CCRenderSurface.h  ?

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444947</commentid>
    <comment_count>12</comment_count>
      <attachid>102579</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-01 15:48:36 -0700</bug_when>
    <thetext>Created attachment 102579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444987</commentid>
    <comment_count>13</comment_count>
      <attachid>102579</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-08-01 16:30:14 -0700</bug_when>
    <thetext>Comment on attachment 102579
Patch

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

Couple more small things but otherwise and unofficial LGTM from me.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:66
&gt; +    , m_debugBorderWidth(0)

I don&apos;t see m_debugBorderWidth used here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:2
&gt; + * Copyright (C) 2010 Google Inc. All rights reserved.

2011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444997</commentid>
    <comment_count>14</comment_count>
      <attachid>102592</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-01 16:59:12 -0700</bug_when>
    <thetext>Created attachment 102592
fix copyright year</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445069</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-01 18:26:50 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 102579 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102579&amp;action=review
&gt; 
&gt; Couple more small things but otherwise and unofficial LGTM from me.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:66
&gt; &gt; +    , m_debugBorderWidth(0)
&gt; 
&gt; I don&apos;t see m_debugBorderWidth used here.
&gt; 

It&apos;s used in pushPropertiesTo() and later used on the CC side of life when drawing layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445538</commentid>
    <comment_count>16</comment_count>
      <attachid>102592</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-02 14:34:44 -0700</bug_when>
    <thetext>Comment on attachment 102592
fix copyright year

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

Overall this looks like good progress. A couple of minor comments. r=me

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:245
&gt;      OwnPtr&lt;CCCanvasLayerImpl::Program&gt; m_canvasLayerProgram;
&gt; +    OwnPtr&lt;CCPluginLayerImpl::Program&gt; m_pluginLayerProgram;
&gt; +    OwnPtr&lt;CCRenderSurface::MaskProgram&gt; m_renderSurfaceMaskProgram;
&gt; +    OwnPtr&lt;CCRenderSurface::Program&gt; m_renderSurfaceProgram;
&gt;      OwnPtr&lt;CCVideoLayerImpl::RGBAProgram&gt; m_videoLayerRGBAProgram;
&gt;      OwnPtr&lt;CCVideoLayerImpl::YUVProgram&gt; m_videoLayerYUVProgram;

It seems to me that these references are abstraction violations. The LayerRendererChromium shouldn&apos;t reference these programs directly. Is there a plan to move these entirely into the cc/ package? If so, is it worth a FIXME?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.h:107
&gt; +    OwnPtr&lt;LayerTexture&gt; m_contentsTexture;

Is this reference an abstraction violation? It seems to me that the compositor&apos;s classes should use those in cc/ but not the other way around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445569</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-02 15:38:29 -0700</bug_when>
    <thetext>You are correct on both points.  Nat is working on splitting up LayerRendererChromium into (at least) two halves, part of that will involve moving the program management into a cc/ class.  For now, though, there isn&apos;t a good cc/ class to hold the programs on.

The LayerTexture dependency is also a bit wonky because we are using the TextureManager concept for both content textures (which aren&apos;t currently a cc/ concept) and for render surfaces (which are).  It&apos;s going to take a bit more work over the next few weeks to fully clean this up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445592</commentid>
    <comment_count>18</comment_count>
      <attachid>102592</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 16:20:58 -0700</bug_when>
    <thetext>Comment on attachment 102592
fix copyright year

Clearing flags on attachment: 102592

Committed r92245: &lt;http://trac.webkit.org/changeset/92245&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445593</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 16:21:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102323</attachid>
            <date>2011-07-28 19:17:00 -0700</date>
            <delta_ts>2011-07-29 10:09:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58840-20110728191659.patch</filename>
            <type>text/plain</type>
            <size>109816</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5NDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4Mzg1ODkyNTRmYjBiYWFm
MDg5YTgzMzZhMjRhNDM1NzBkNDVjNzAwLi4xMDA5ZmVhMmFkZGIyNzYwMGU1YTI2NTIzNzMxMDcy
OTQwZTQyNWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ4IEBACisyMDExLTA3LTI4ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBE
ZWNvdXBsZSBsYXllciB2aXNpYmlsaXR5IGNhbGN1bGF0aW9ucyBmcm9tIHJlbmRlciBzdXJmYWNl
cyAvIGNvbXB1dGVkIGRyYXcgdHJhbnNmb3JtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4NDAKKworICAgICAgICBUaGlzIGRlY291cGxlcyB0aGUg
bGF5ZXIgdmlzaWJpbGl0eSByZWxhdGVkIGNhbGN1bGF0aW9ucyBmcm9tIHRoZSBMYXllckNocm9t
aXVtIGFuZCBDQ0xheWVySW1wbCB0cmVlcy4gIFRoaXMgaXMKKyAgICAgICAgZG9uZSBieSBtYWtp
bmcgTGF5ZXJSZW5kZXJlckNocm9taXVtJ3MgImNhbGN1bGF0ZSB0aGUgd29ybGQiIGZ1bmN0aW9u
IChyZW5hbWVkCisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSgp
KSBhIHRlbXBsYXRlZCwgZnJlZSBmdW5jdGlvbiB0aGF0IGNhbiBvcGVyYXRlIG9uIGVpdGhlciBM
YXllckNocm9taXVtICsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtIHBhaXJzIG9yIG9u
IENDTGF5ZXJJbXBsICsgQ0NSZW5kZXJTdXJmYWNlIHBhaXJzIGFuZCBpbnZva2luZyBpdCB0d2lj
ZSwgb25jZSBiZWZvcmUKKyAgICAgICAgcGFpbnRpbmcgYW5kIG9uY2UgYmVmb3JlIGRyYXdpbmcu
ICBCZWZvcmUgcGFpbnRpbmcsIHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgdXNlZCB0byBkZXRlcm1p
bmUgd2hpY2ggbGF5ZXJzIGFyZQorICAgICAgICBwb3RlbnRpYWxseSB2aXNpYmxlIGFuZCBzaG91
bGQgYmUgcGFpbnRlZCwgd2hpY2ggZGVwZW5kcyBvbiB0aGUgY2FsY3VsYXRlZCBvcGFjaXR5LCBy
ZW5kZXIgc3VyZmFjZSBib3VuZHMsIGFuZAorICAgICAgICBkcmF3IHRyYW5zZm9ybXMuICBCZWZv
cmUgZHJhd2luZywgdGhlc2UgY2FsY3VsYXRpb25zIGFyZSB1c2VkIHRvIGZpZ3VyZSBvdXQgZXZl
cnl0aGluZyBuZWVkZWQgdG8gZHJhdy4KKworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0g
aXMgbm93IHVzZWQganVzdCBmb3IgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMgd2hlbiBwYWludGlu
Zy4gIENDUmVuZGVyU3VyZmFjZUNocm9taXVtIGlzCisgICAgICAgIHJlc3BvbnNpYmxlIGZvciBh
Y3R1YWxseSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZXMuCisKKyAgICAgICAgVGhpcyBkb2Vz
IG1lYW4gdGhhdCBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGUgc2Vjb25kIGNhbGN1
bGF0aW9ucyBhcmUgcmVkdW5kYW50LCBidXQgaW4gdGhlIGZ1dHVyZSB0aGlzCisgICAgICAgIHdv
bid0IGJlIHRoZSBjYXNlIHNpbmNlIHRoZSBwcmUtZHJhdyB0aW1lIGNhbGN1bGF0aW9ucyBtaWdo
dCBiZSBpbmZsdWVuY2VkIGJ5IGFuaW1hdGlvbnMgb3IgZ2VzdHVyZXMuICBJJ3ZlCisgICAgICAg
IGFkZGVkIHNvbWUgdHJhY2VzIHRvIHRyeSB0byBtb25pdG9yIGlmIHRoaXMgbWF0aCBpcyBhIHNp
Z25pZmljYW50IGFtb3VudCBvZiB0aGUgcGVyLWZyYW1lIGNvbXB1dGF0aW9uLiAgTm90ZQorICAg
ICAgICB0aGF0IGxheWVyIHNvcnRpbmcgb25seSBoYXBwZW5zIG9uIHRoZSBDQ0xheWVySW1wbCB0
cmVlIGFuZCB0aGUgbGF5ZXIgc29ydCBhbGdvcml0aG0gaXMgdGhlIG1vc3QgZXhwZW5zaXZlIHBh
cnQKKyAgICAgICAgb2YgdGhlIGNhbGN1bGF0aW9ucyBjdXJyZW50bHkuCisKKyAgICAgICAgVGhp
cyByZW1vdmVzIGFsbCBvZiB0aGUgd2VhayBiYWNrL2ZvcndhcmQgcG9pbnRlcnMgYmV0d2VlbiBM
YXllckNocm9taXVtIGFuZCBDQ0xheWVySW1wbHMsIHRoZSB0cmVlcyBhcmUgbm93CisgICAgICAg
IHRydWx5IGRlY291cGxlZC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGNvbXBvc2l0aW5nLyB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6fkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpk
ZXNjZW5kYW50c0RyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0VXNlc0xheWVyU2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1
c2VzTGF5ZXJTY2lzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFy
UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZW5kZXJT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdPcGFjaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldERyYXdPcGFjaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OnRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckNocm9taXVtOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldERyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6ZHJhd2FibGVDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXREcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbXBvc2l0ZU9m
ZnNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9m
ZnNjcmVlbkxheWVyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVzZVJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2Vz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNy
ZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFj
ZUNocm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3VyZmFjZUNocm9taXVtOjp+UmVuZGVyU3VyZmFjZUNocm9taXVtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6Y2xlYXJMYXllckxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpsYXllckxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzZXRNYXNrTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3JtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJl
Y3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlQ0NMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJ
bXBsOjpDQ0NhbnZhc0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFz
TGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xh
eWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6cmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6
dGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0
VGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclNvcnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVy
OjpjcmVhdGVHcmFwaE5vZGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxh
eWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1Bs
dWdpbkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpDQ1JlbmRlclN1cmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjp+Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJTdXJmYWNlOjpkcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkcmF3U3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlSW5kZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6ZHVtcFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJTdXJmYWNlOjpvd25pbmdMYXllcklkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmguCisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNvbnRlbnRSZWN0Q2VudGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6ZHJhd09wYWNpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzZXREcmF3T3BhY2l0eSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldERyYXdUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0UmVwbGljYURyYXdUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpyZXBsaWNhRHJhd1RyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldE9yaWdpblRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Om9yaWdpblRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXRDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6OmNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2V0U2tpcHNEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2tp
cHNEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Y2xlYXJMYXllckxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpsYXllckxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDctMjggIERh
dmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICA8aHR0cDovL3dlYmtp
dC5vcmcvYi82NTI4OT4gUmVtb3ZlIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDQwZjdlNTM1OWE5NjAxZGRjOTNhZTY0NWVmNTgzYTY5ZDIxODliNTIuLjIyMjM1
Nzg4ZDdjZWEyYTNiOTRlZGJmMTBkMTE5YTU0M2YyMDk5NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1NjIsNiArMzU2Miw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkVGFzay5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMGExZDMy
ZThjNDIyNTM0Nzg2YWE3ZGFjNWVhMmUyZWY3ZGM1MDBmNC4uYWM0YjlmMjA5MjhkZjNhMWY1MjVh
MmYxNGM1YzIxYWVlNDcwYzVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTU1LDcgKzU1LDcgQEAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6fkNhbnZhc0xheWVyQ2hyb21p
dW0oKQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBDYW52YXNMYXllckNocm9taXVtOjpjcmVh
dGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDQ2FudmFzTGF5ZXJJbXBsOjpjcmVhdGUo
dGhpcywgbV9sYXllcklkKTsKKyAgICByZXR1cm4gQ0NDYW52YXNMYXllckltcGw6OmNyZWF0ZSht
X2xheWVySWQpOwogfQogCiB2b2lkIENhbnZhc0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVz
VG8oQ0NMYXllckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCAxZDg3M2Rj
MWZhZTZmMDE2MzllNTNhYmFmYjFjN2UxYzlmY2Y0MzZmLi4xODJjNzQ0NGM4Y2JlODU0MGRiZDFj
MzhiYWU0YzBmMDIwNmE1YzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtNjEsOSArNjEs
OSBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSog
b3duZXIpCiAgICAgLCBtX2NvbnRlbnRzRGlydHkoZmFsc2UpCiAgICAgLCBtX2xheWVySWQoc19u
ZXh0TGF5ZXJJZCsrKQogICAgICwgbV9wYXJlbnQoMCkKLSAgICAsIG1fY2NMYXllckltcGwoMCkK
ICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBtX2JhY2tncm91bmRDb2xvcigw
LCAwLCAwLCAwKQorICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRoKDApCiAgICAgLCBtX29wYWNpdHko
MS4wKQogICAgICwgbV96UG9zaXRpb24oMC4wKQogICAgICwgbV9hbmNob3JQb2ludFooMCkKQEAg
LTc0LDcgKzc0LDEwIEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcikKICAgICAsIG1fZ2VvbWV0cnlGbGlwcGVkKGZhbHNlKQogICAgICwg
bV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShmYWxzZSkKICAgICAsIG1fZG91YmxlU2lkZWQo
dHJ1ZSkKKyAgICAsIG1fdXNlc0xheWVyU2Npc3NvcihmYWxzZSkKICAgICAsIG1fcmVwbGljYUxh
eWVyKDApCisgICAgLCBtX2RyYXdPcGFjaXR5KDApCisgICAgLCBtX3RhcmdldFJlbmRlclN1cmZh
Y2UoMCkKIHsKICAgICBBU1NFUlQoIUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c19pblBhaW50TGF5
ZXJDb250ZW50cyk7CiB9CkBAIC04Niw5ICs4OSw2IEBAIExheWVyQ2hyb21pdW06On5MYXllckNo
cm9taXVtKCkKICAgICAvLyB3YXkgZm9yIHVzIHRvIGJlIGRlc3Ryb3llZCB3aGlsZSB3ZSBzdGls
bCBoYXZlIGEgcGFyZW50LgogICAgIEFTU0VSVCghcGFyZW50KCkpOwogCi0gICAgaWYgKG1fY2NM
YXllckltcGwpCi0gICAgICAgIG1fY2NMYXllckltcGwtPmNsZWFyT3duZXIoKTsKLQogICAgIC8v
IFJlbW92ZSB0aGUgcGFyZW50IHJlZmVyZW5jZSBmcm9tIGFsbCBjaGlsZHJlbi4KICAgICByZW1v
dmVBbGxDaGlsZHJlbigpOwogfQpAQCAtMzgxLDEyICszODEsNyBAQCB2b2lkIExheWVyQ2hyb21p
dW06OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0
CiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJ
bXBsKCkKIHsKLSAgICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQp
OwotfQotCi1DQ0xheWVySW1wbCogTGF5ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsOworICAgIHJldHVybiBDQ0xheWVySW1wbDo6Y3Jl
YXRlKG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Qm9yZGVyQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDA2LDUgKzQwMSwyMCBAQCBMYXllclJlbmRlcmVyQ2hy
b21pdW0qIExheWVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXIoKSBjb25zdAogICAgIHJldHVybiBt
X2xheWVyUmVuZGVyZXIuZ2V0KCk7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVu
ZGVyU3VyZmFjZSgpCit7CisgICAgQVNTRVJUKCFtX3JlbmRlclN1cmZhY2UpOworICAgIG1fcmVu
ZGVyU3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW0odGhpcykpOwor
fQorCitib29sIExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkKK3sKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fY2hpbGRyZW5baV0tPmRyYXdzQ29udGVudCgpIHx8IG1fY2hpbGRyZW5baV0tPmRl
c2NlbmRhbnRzRHJhd3NDb250ZW50KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDNiYTdiOWYwZGIwY2Y5NzFhYjk2OGQ2
MWI5YzMwYTAxZGVmNzIzYWIuLjkwNjdiZTQ3MjFhNjM2ZTZkNDljNTBmYjk0Mjc3ZDQ4MjU4YzBm
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTM3LDkgKzM3LDkgQEAKICNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgot
I2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNoYWRlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKIApAQCAtMTA0LDcgKzEw
NCw2IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBt
X25hbWU7IH0KIAogICAgIHZvaWQgc2V0TWFza0xheWVyKExheWVyQ2hyb21pdW0qIG1hc2tMYXll
cikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQotICAgIENDTGF5ZXJJbXBsKiBtYXNrRHJh
d0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIgPyBtX21hc2tMYXllci0+Y2NMYXll
ckltcGwoKSA6IDA7IH0KICAgICBMYXllckNocm9taXVtKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX21hc2tMYXllci5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29u
c3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwpAQCAtMTQ1LDYgKzE0NCw5IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgcHJlc2VydmVzM0QoKSB7IHJldHVybiBtX293bmVyICYmIG1fb3duZXItPnByZXNl
cnZlczNEKCk7IH0KIAorICAgIHZvaWQgc2V0VXNlc0xheWVyU2Npc3Nvcihib29sIHVzZXNMYXll
clNjaXNzb3IpIHsgbV91c2VzTGF5ZXJTY2lzc29yID0gdXNlc0xheWVyU2Npc3NvcjsgfQorICAg
IGJvb2wgdXNlc0xheWVyU2Npc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc0xheWVyU2Npc3Nv
cjsgfQorCiAgICAgLy8gRGVyaXZlZCB0eXBlcyBtdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlm
IHRoZXkgbmVlZCB0byByZWFjdCB0byBhIGNoYW5nZQogICAgIC8vIGluIHRoZSBMYXllclJlbmRl
cmVyQ2hyb21pdW0uCiAgICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKik7CkBAIC0xNzAsOSArMTcyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRCb3JkZXJXaWR0aChmbG9hdCk7CiAKLSAgICAvLyBFdmVyeXRoaW5nIGZyb20gaGVyZSBkb3du
IGluIHRoZSBwdWJsaWMgc2VjdGlvbiB3aWxsIG1vdmUgdG8gQ0NMYXllckltcGwuCi0gICAgQ0NM
YXllckltcGwqIGNjTGF5ZXJJbXBsKCkgY29uc3Q7Ci0KICAgICBzdGF0aWMgdm9pZCBkcmF3VGV4
dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJp
eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQsIGZsb2F0IG9wYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uKTsKQEAgLTE4Nyw2ICsxODYsMjQg
QEAgcHVibGljOgogCiAgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CiAK
KyAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZSgpIHsgbV9yZW5kZXJTdXJmYWNlLmNsZWFyKCk7
IH0KKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7IH0KKyAgICB2b2lkIGNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKKworICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3Bh
Y2l0eTsgfQorICAgIHZvaWQgc2V0RHJhd09wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX2RyYXdP
cGFjaXR5ID0gb3BhY2l0eTsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0gcmVjdDsgfQorICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0UmVuZGVyU3VyZmFjZTsgfQorICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3Vy
ZmFjZTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXREcmF3VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV9kcmF3VHJhbnNmb3Jt
ID0gbWF0cml4OyB9CisgICAgY29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZHJhd2FibGVDb250ZW50UmVjdDsgfQorICAgIHZvaWQgc2V0RHJhd2Fi
bGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fZHJhd2FibGVDb250ZW50UmVj
dCA9IHJlY3Q7IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIGxheWVyJ3Mg
ZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KKyAgICBib29sIGRlc2NlbmRhbnRzRHJh
d3NDb250ZW50KCk7CisKIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1f
b3duZXI7CiAgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyKTsKQEAgLTIxMCwxOCArMjI3LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBtX21hc2tMYXllcjsKIAotICAgIC8vIEFsbCBsYXllciBzaGFkZXJzIHNo
YXJlIHRoZSBzYW1lIGF0dHJpYnV0ZSBsb2NhdGlvbnMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb25z
Ci0gICAgLy8gYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMuIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBz
aGFkZXJzIHdpdGhvdXQgcmViaW5kaW5nIGF0dHJpYnV0ZQotICAgIC8vIGFycmF5cy4KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX3RleENvb3JkQXR0cmliTG9jYXRpb247Ci0KICAgICBmcmllbmQg
Y2xhc3MgVHJlZVN5bmNocm9uaXplcjsKICAgICBmcmllbmQgY2xhc3MgQ0NMYXllckltcGw7CiAg
ICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRpbWUgdHlw
ZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hl
biBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzAgaXMgZml4ZWQu
Ci0gICAgdm9pZCBzZXRDQ0xheWVySW1wbChDQ0xheWVySW1wbCogaW1wbCkgeyBtX2NjTGF5ZXJJ
bXBsID0gaW1wbDsgfQogICAgIGludCBtX2xheWVySWQ7CiAKIHByaXZhdGU6CkBAIC0yNDUsMTAg
KzI1NCw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBt
X2xheWVyUmVuZGVyZXI7CiAKLSAgICAvLyBUZW1wb3JhcnkgZm9yd2FyZCB3ZWFrIHBvaW50ZXIg
dG8gdGhlIENDTGF5ZXJJbXBsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLgotICAgIC8vIEZJ
WE1FOiBSZW1vdmUgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTg4MzAgaXMgZml4ZWQuCi0gICAgQ0NMYXllckltcGwqIG1fY2NMYXllckltcGw7Ci0KICAgICAv
LyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50UmVjdCBt
X3Zpc2libGVMYXllclJlY3Q7CkBAIC0yNjcsNiArMjcyLDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fZ2VvbWV0cnlGbGlwcGVkOwogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5n
ZTsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7CisgICAgYm9vbCBtX3VzZXNMYXllclNjaXNzb3I7
CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwpAQCAtMjc2LDYgKzI4MiwxNCBAQCBwcml2
YXRlOgogICAgIC8vIFJlcGxpY2EgbGF5ZXIgdXNlZCBmb3IgcmVmbGVjdGlvbnMuCiAgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IG1fcmVwbGljYUxheWVyOwogCisgICAgLy8gVHJhbnNpZW50IHBy
b3BlcnRpZXMuCisgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bT4gbV9yZW5kZXJTdXJm
YWNlOworICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0
OworICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKKyAgICBJbnRSZWN0IG1fZHJh
d2FibGVDb250ZW50UmVjdDsKKwogICAgIFN0cmluZyBtX25hbWU7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA1NDAyMDY4MmIzMjJjMTE2ZmY2NjNmZDhj
OGE3ZDhjMTMzMzEwZDkxLi43ODRiYmU0MTRiZjM1MDg3YThiYzEyYWNiMWY5ZGUzYzg2MmIyYjMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQ0LDYgKzQ0LDcg
QEAKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAi
VGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCkBAIC02Miw2
ICs2Myw4IEBACiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBGSVhNRTogTWFrZSB0
aGlzIGxpbWl0IGFkanVzdGFibGUgYW5kIGdpdmUgaXQgYSB1c2VmdWwgdmFsdWUuCkBAIC03Nyw2
ICs4MCwzMTEgQEAgc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyA9IDMg
KiAxMDI0ICogMTAyNDsKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzX2luUGFpbnRMYXll
ckNvbnRlbnRzID0gZmFsc2U7CiAjZW5kaWYKIAorbmFtZXNwYWNlIHsKKworSW50UmVjdCBjYWxj
dWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCit7CisgICAgLy8gSXMgdGhpcyBsYXllciBmdWxseSBjb250YWluZWQgd2l0aGluIHRo
ZSB0YXJnZXQgc3VyZmFjZT8KKyAgICBJbnRSZWN0IGxheWVySW5TdXJmYWNlU3BhY2UgPSB0cmFu
c2Zvcm0ubWFwUmVjdChsYXllckJvdW5kUmVjdCk7CisgICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0
LmNvbnRhaW5zKGxheWVySW5TdXJmYWNlU3BhY2UpKQorICAgICAgICByZXR1cm4gbGF5ZXJCb3Vu
ZFJlY3Q7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgZG9lc24ndCBmaWxsIHVwIHRoZSBlbnRpcmUg
c3VyZmFjZSwgdGhlbiBmaW5kIHRoZSBwYXJ0IG9mCisgICAgLy8gdGhlIHN1cmZhY2UgcmVjdCB3
aGVyZSB0aGUgbGF5ZXIgY291bGQgYmUgdmlzaWJsZS4gVGhpcyBhdm9pZHMgdHJ5aW5nIHRvCisg
ICAgLy8gcHJvamVjdCBzdXJmYWNlIHJlY3QgcG9pbnRzIHRoYXQgYXJlIGJlaGluZCB0aGUgcHJv
amVjdGlvbiBwb2ludC4KKyAgICBJbnRSZWN0IG1pbmltYWxTdXJmYWNlUmVjdCA9IHRhcmdldFN1
cmZhY2VSZWN0OworICAgIG1pbmltYWxTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXJJblN1cmZh
Y2VTcGFjZSk7CisKKyAgICAvLyBQcm9qZWN0IHRoZSBjb3JuZXJzIG9mIHRoZSB0YXJnZXQgc3Vy
ZmFjZSByZWN0IGludG8gdGhlIGxheWVyIHNwYWNlLgorICAgIC8vIFRoaXMgYm91bmRpbmcgcmVj
dGFuZ2xlIG1heSBiZSBsYXJnZXIgdGhhbiBpdCBuZWVkcyB0byBiZSAoYmVpbmcKKyAgICAvLyBh
eGlzLWFsaWduZWQpLCBidXQgaXMgYSByZWFzb25hYmxlIGZpbHRlciBvbiB0aGUgc3BhY2UgdG8g
Y29uc2lkZXIuCisgICAgLy8gTm9uLWludmVydGlibGUgdHJhbnNmb3JtcyB3aWxsIGNyZWF0ZSBh
biBlbXB0eSByZWN0IGhlcmUuCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFj
ZVRvTGF5ZXIgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOworICAgIEludFJlY3QgbGF5ZXJSZWN0ID0g
c3VyZmFjZVRvTGF5ZXIucHJvamVjdFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChtaW5pbWFsU3Vy
ZmFjZVJlY3QpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICBsYXllclJlY3QuaW50ZXJz
ZWN0KGxheWVyQm91bmRSZWN0KTsKKyAgICByZXR1cm4gbGF5ZXJSZWN0OworfQorCisvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIG1hdHJpeCBoYXMgbm8gcm90YXRpb24sIHNrZXcgb3IgcGVyc3BlY3Rp
dmUgY29tcG9uZW50cyB0byBpdC4KK2Jvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG0pCit7CisgICAgcmV0dXJuICFtLm0xMigpICYmICFtLm0xMygp
ICYmICFtLm0xNCgpCisgICAgICAgICAgICYmICFtLm0yMSgpICYmICFtLm0yMygpICYmICFtLm0y
NCgpCisgICAgICAgICAgICYmICFtLm0zMSgpICYmICFtLm0zMigpICYmICFtLm00MygpCisgICAg
ICAgICAgICYmIG0ubTQ0KCk7CisKK30KKwordm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Pjo6aXRlcmF0b3IsIHZvaWQqKQoreworICAgIC8vIEN1cnJlbnRseSB3ZSBkb24ndCB1c2Ugei1v
cmRlciB0byBkZWNpZGUgd2hhdCB0byBwYWludCwgc28gdGhlcmUncyBubyBuZWVkIHRvIGFjdHVh
bGx5IHNvcnQgTGF5ZXJDaHJvbWl1bXMuCit9CisKK3ZvaWQgc29ydExheWVycyhWZWN0b3I8UmVm
UHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVy
SW1wbD4gPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlcikKK3sKKyAg
ICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzb3J0TGF5ZXJzIiwgMCwgMCk7
CisgICAgbGF5ZXJTb3J0ZXItPnNvcnQoZmlyc3QsIGVuZCk7Cit9CisKKy8vIFJlY3Vyc2l2ZWx5
IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21w
dXRlcyBhbGwgdGhlCisvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBzY2lzc29yIHJlY3Rh
bmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBl
LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Cit2b2lk
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllclR5cGUqIGxheWVyLCBM
YXllclR5cGUqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBsYXll
clNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQoreworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxMYXllclR5cGU+ID4gTGF5ZXJMaXN0OworICAgIC8vIENvbXB1dGUgdGhlIG5ldyBtYXRyaXgg
dHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhpcyBsYXllciBhbmQKKyAg
ICAvLyBhbGwgaXRzIGNoaWxkcmVuLiBJdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHRo
ZSBsYXllcidzIHBvc2l0aW9uCisgICAgLy8gaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXllcidz
IGFuY2hvciBwb2ludC4gQWxzbywgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIHVzZWQKKyAgICAvLyBh
c3N1bWVzIHRoYXQgdGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93ZXIgbGVmdCBldmVuIHRob3VnaCB0
aGUgY29vcmRpbmF0ZXMgdGhlIGJyb3dzZXIKKyAgICAvLyBnaXZlcyB1cyBmb3IgdGhlIGxheWVy
cyBhcmUgZm9yIHRoZSB1cHBlciBsZWZ0IGNvcm5lci4gVGhlIFkgZmxpcCBoYXBwZW5zIHZpYQor
ICAgIC8vIHRoZSBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBhcHBsaWVkIGF0IHJlbmRlciB0aW1l
LgorICAgIC8vIFRoZSB0cmFuc2Zvcm1hdGlvbiBjaGFpbiBmb3IgdGhlIGxheWVyIGlzICh1c2lu
ZyB0aGUgTWF0cml4IHggVmVjdG9yIG9yZGVyKToKKyAgICAvLyBNID0gTVtwXSAqIFRyW2xdICog
TVtsXSAqIFRyW2NdCisgICAgLy8gV2hlcmUgTVtwXSBpcyB0aGUgcGFyZW50IG1hdHJpeCBwYXNz
ZWQgZG93biB0byB0aGUgZnVuY3Rpb24KKyAgICAvLyAgICAgICBUcltsXSBpcyB0aGUgdHJhbnNs
YXRpb24gbWF0cml4IGxvY2F0aW5nIHRoZSBsYXllcidzIGFuY2hvciBwb2ludAorICAgIC8vICAg
ICAgIFRyW2NdIGlzIHRoZSB0cmFuc2xhdGlvbiBvZmZzZXQgYmV0d2VlbiB0aGUgYW5jaG9yIHBv
aW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBsYXllcgorICAgIC8vICAgICAgIE1bbF0gaXMgdGhl
IGxheWVyJ3MgbWF0cml4IChhcHBsaWVkIGF0IHRoZSBhbmNob3IgcG9pbnQpCisgICAgLy8gVGhp
cyB0cmFuc2Zvcm0gY3JlYXRlcyBhIGNvb3JkaW5hdGUgc3lzdGVtIHdob3NlIG9yaWdpbiBpcyB0
aGUgY2VudGVyIG9mIHRoZSBsYXllci4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIGZpbmFsIG1hdHJp
eCB1c2VkIGJ5IHRoZSBzaGFkZXIgZm9yIHRoZSBsYXllciBpcyBQICogTSAqIFMgLiBUaGlzIGZp
bmFsIHByb2R1Y3QKKyAgICAvLyBpcyBjb21wdXRlZCBpbiBkcmF3VGV4dHVyZWRRdWFkKCkuCisg
ICAgLy8gV2hlcmU6IFAgaXMgdGhlIHByb2plY3Rpb24gbWF0cml4CisgICAgLy8gICAgICAgIE0g
aXMgdGhlIGxheWVyJ3MgbWF0cml4IGNvbXB1dGVkIGFib3ZlCisgICAgLy8gICAgICAgIFMgaXMg
dGhlIHNjYWxlIGFkanVzdG1lbnQgKHRvIHNjYWxlIHVwIHRvIHRoZSBsYXllciBzaXplKQorICAg
IEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOworICAgIEZsb2F0UG9pbnQgYW5jaG9y
UG9pbnQgPSBsYXllci0+YW5jaG9yUG9pbnQoKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0g
bGF5ZXItPnBvc2l0aW9uKCk7CisKKyAgICAvLyBPZmZzZXQgYmV0d2VlbiBhbmNob3IgcG9pbnQg
YW5kIHRoZSBjZW50ZXIgb2YgdGhlIHF1YWQuCisgICAgZmxvYXQgY2VudGVyT2Zmc2V0WCA9ICgw
LjUgLSBhbmNob3JQb2ludC54KCkpICogYm91bmRzLndpZHRoKCk7CisgICAgZmxvYXQgY2VudGVy
T2Zmc2V0WSA9ICgwLjUgLSBhbmNob3JQb2ludC55KCkpICogYm91bmRzLmhlaWdodCgpOworCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJMb2NhbFRyYW5zZm9ybTsKKyAgICAvLyBMVCA9
IFRyW2xdCisgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChwb3NpdGlvbi54KCks
IHBvc2l0aW9uLnkoKSwgbGF5ZXItPmFuY2hvclBvaW50WigpKTsKKyAgICAvLyBMVCA9IFRyW2xd
ICogTVtsXQorICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPnRyYW5zZm9y
bSgpKTsKKyAgICAvLyBMVCA9IFRyW2xdICogTVtsXSAqIFRyW2NdCisgICAgbGF5ZXJMb2NhbFRy
YW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRYLCBjZW50ZXJPZmZzZXRZLCAtbGF5ZXIt
PmFuY2hvclBvaW50WigpKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbWJpbmVkVHJh
bnNmb3JtID0gcGFyZW50TWF0cml4OworICAgIGNvbWJpbmVkVHJhbnNmb3JtID0gY29tYmluZWRU
cmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJMb2NhbFRyYW5zZm9ybSk7CisKKyAgICBGbG9hdFJlY3Qg
bGF5ZXJSZWN0KC0wLjUgKiBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5i
b3VuZHMoKS5oZWlnaHQoKSwgbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMo
KS5oZWlnaHQoKSk7CisgICAgSW50UmVjdCB0cmFuc2Zvcm1lZExheWVyUmVjdDsKKworICAgIC8v
IEZJWE1FOiBUaGlzIHNlZW1zIGxpa2UgdGhlIHdyb25nIHBsYWNlIHRvIHNldCB0aGlzCisgICAg
bGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IoZmFsc2UpOworCisgICAgLy8gVGhlIGxheWVyIGFu
ZCBpdHMgZGVzY2VuZGFudHMgcmVuZGVyIG9uIGEgbmV3IFJlbmRlclN1cmZhY2UgaWYgYW55IG9m
CisgICAgLy8gdGhlc2UgY29uZGl0aW9ucyBob2xkOgorICAgIC8vIDEuIFRoZSBsYXllciBjbGlw
cyBpdHMgZGVzY2VuZGFudHMgYW5kIGl0cyB0cmFuc2Zvcm0gaXMgbm90IGEgc2ltcGxlIHRyYW5z
bGF0aW9uLgorICAgIC8vIDIuIElmIHRoZSBsYXllciBoYXMgb3BhY2l0eSAhPSAxIGFuZCBkb2Vz
IG5vdCBoYXZlIGEgcHJlc2VydmVzLTNkIHRyYW5zZm9ybSBzdHlsZS4KKyAgICAvLyAzLiBUaGUg
bGF5ZXIgdXNlcyBhIG1hc2sKKyAgICAvLyA0LiBUaGUgbGF5ZXIgaGFzIGEgcmVwbGljYSAodXNl
ZCBmb3IgcmVmbGVjdGlvbnMpCisgICAgLy8gNS4gVGhlIGxheWVyIGRvZXNuJ3QgcHJlc2VydmUt
M2QgYnV0IGlzIHRoZSBjaGlsZCBvZiBhIGxheWVyIHdoaWNoIGRvZXMuCisgICAgLy8gSWYgYSBs
YXllciBwcmVzZXJ2ZXMtM2QgdGhlbiB3ZSBkb24ndCBjcmVhdGUgYSBSZW5kZXJTdXJmYWNlIGZv
ciBpdCB0byBhdm9pZCBmbGF0dGVuaW5nCisgICAgLy8gb3V0IGl0cyBjaGlsZHJlbi4gVGhlIG9w
YWNpdHkgdmFsdWUgb2YgdGhlIGNoaWxkcmVuIGxheWVycyBpcyBtdWx0aXBsaWVkIGJ5IHRoZSBv
cGFjaXR5CisgICAgLy8gb2YgdGhlaXIgcGFyZW50LgorICAgIGJvb2wgdXNlU3VyZmFjZUZvckNs
aXBwaW5nID0gbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAhaXNTY2FsZU9yVHJhbnNsYXRpb24o
Y29tYmluZWRUcmFuc2Zvcm0pOworICAgIGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBsYXll
ci0+b3BhY2l0eSgpICE9IDEgJiYgIWxheWVyLT5wcmVzZXJ2ZXMzRCgpOworICAgIGJvb2wgdXNl
U3VyZmFjZUZvck1hc2tpbmcgPSBsYXllci0+bWFza0xheWVyKCk7CisgICAgYm9vbCB1c2VTdXJm
YWNlRm9yUmVmbGVjdGlvbiA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKyAgICBib29sIHVzZVN1
cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgPSBsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVu
dCgpLT5wcmVzZXJ2ZXMzRCgpICYmICFsYXllci0+cHJlc2VydmVzM0QoKSAmJiBsYXllci0+ZGVz
Y2VuZGFudHNEcmF3c0NvbnRlbnQoKTsKKyAgICBpZiAodXNlU3VyZmFjZUZvck1hc2tpbmcgfHwg
dXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNlU3VyZmFjZUZvckZsYXREZXNjZW5kYW50cyB8
fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNlRm9yT3BhY2l0eSkgJiYgbGF5
ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7CisgICAgICAgIGlmICghbGF5ZXItPnJl
bmRlclN1cmZhY2UoKSkKKyAgICAgICAgICAgIGxheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7
CisgICAgICAgIFJlbmRlclN1cmZhY2VUeXBlKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKKworICAgICAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBuZXcgc3VyZmFjZSBp
cyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLgorICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtOworICAgICAgICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0
ZTNkKDAuNSAqIGJvdW5kcy53aWR0aCgpLCAwLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOworICAg
ICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKworICAgICAgICB0
cmFuc2Zvcm1lZExheWVyUmVjdCA9IEludFJlY3QoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5k
cy5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gTGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGll
ZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlLgorICAgICAgICBmbG9hdCBkcmF3T3Bh
Y2l0eSA9IGxheWVyLT5vcGFjaXR5KCk7CisgICAgICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYg
bGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgZHJhd09wYWNpdHkg
Kj0gbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0eSgpOworICAgICAgICByZW5kZXJTdXJmYWNl
LT5zZXREcmF3T3BhY2l0eShkcmF3T3BhY2l0eSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3T3Bh
Y2l0eSgxKTsKKworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5z
Zm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtOworICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50
cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCks
IDApOworICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0obGF5ZXJPcmln
aW5UcmFuc2Zvcm0pOworCisgICAgICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBzY2lzc29yIHJl
Y3QgaXMgdGhlIHNjaXNzb3IgcmVjdCB0aGF0IG5lZWRzIHRvCisgICAgICAgIC8vIGJlIGFwcGxp
ZWQgYmVmb3JlIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlIG9udG8gaXRzIGNvbnRhaW5pbmcK
KyAgICAgICAgLy8gc3VyZmFjZSBhbmQgaXMgdGhlcmVmb3JlIGV4cHJlc3NlZCBpbiB0aGUgcGFy
ZW50J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNjaXNz
b3JSZWN0KGxheWVyLT5wYXJlbnQoKSA/IGxheWVyLT5wYXJlbnQoKS0+c2Npc3NvclJlY3QoKSA6
IGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKworICAgICAgICByZW5kZXJTdXJmYWNlLT5jbGVhckxh
eWVyTGlzdCgpOworCisgICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpIHsKKyAgICAgICAg
ICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihsYXllci0+bWFza0xheWVyKCkpOworICAg
ICAgICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRl
clN1cmZhY2UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNl
dE1hc2tMYXllcigwKTsKKworICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCisgICAgICAgICAgICBsYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1
cmZhY2UpOworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKGxheWVyKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBEVCA9IE1bcF0gKiBMVAorICAgICAgICBsYXllci0+
c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7CisgICAgICAgIHRyYW5zZm9ybWVk
TGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsYXllci0+ZHJhd1RyYW5zZm9ybSgpLm1hcFJl
Y3QobGF5ZXJSZWN0KSk7CisKKyAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KGxheWVyLT5v
cGFjaXR5KCkpOworCisgICAgICAgIGlmIChsYXllci0+cGFyZW50KCkpIHsKKyAgICAgICAgICAg
IGlmIChsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCisgICAgICAgICAgICAgICBsYXll
ci0+c2V0RHJhd09wYWNpdHkobGF5ZXItPmRyYXdPcGFjaXR5KCkgKiBsYXllci0+cGFyZW50KCkt
PmRyYXdPcGFjaXR5KCkpOworCisgICAgICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0aGUgc2Np
c3NvciByZWN0IGZyb20gdGhlaXIgcGFyZW50LgorICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNz
b3JSZWN0KGxheWVyLT5wYXJlbnQoKS0+c2Npc3NvclJlY3QoKSk7CisgICAgICAgICAgICBpZiAo
bGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJTY2lzc29yKCkpCisgICAgICAgICAgICAgICAgbGF5
ZXItPnNldFVzZXNMYXllclNjaXNzb3IodHJ1ZSk7CisKKyAgICAgICAgICAgIGxheWVyLT5zZXRU
YXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXllciAhPSByb290TGF5ZXIpCisgICAgICAg
ICAgICBsYXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CisKKyAgICAgICAgaWYgKGxheWVyLT5t
YXNrc1RvQm91bmRzKCkpIHsKKyAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvciA9IHRyYW5zZm9y
bWVkTGF5ZXJSZWN0OworICAgICAgICAgICAgaWYgKCFsYXllci0+c2Npc3NvclJlY3QoKS5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgc2Npc3Nvci5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JS
ZWN0KCkpOworICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOworICAg
ICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IodHJ1ZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgbGF5ZXItPnNl
dFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIEFTU0VSVChsYXllci0+cGFyZW50KCkpOworICAgICAgICBsYXllci0+c2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZShsYXllci0+cGFyZW50KCktPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7
CisgICAgfQorCisgICAgLy8gZHJhd2FibGVDb250ZW50UmVjdCgpIGlzIGFsd2F5cyBzdG9yZWQg
aW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZQorICAgIC8vIFJlbmRlclN1cmZhY2UgdGhl
IGxheWVyIGRyYXdzIGludG8uCisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAg
ICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsK
KyAgICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJTY2lzc29yKCkpCisgICAgICAgICAgICBkcmF3
YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdChsYXllci0+c2Npc3NvclJlY3QoKSk7CisgICAgICAg
IGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOworICAg
IH0gZWxzZQorICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkp
OworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBsYXllci0+ZHJh
d1RyYW5zZm9ybSgpOworCisgICAgLy8gRmxhdHRlbiB0byAyRCBpZiB0aGUgbGF5ZXIgZG9lc24n
dCBwcmVzZXJ2ZSAzRC4KKyAgICBpZiAoIWxheWVyLT5wcmVzZXJ2ZXMzRCgpKSB7CisgICAgICAg
IHN1YmxheWVyTWF0cml4LnNldE0xMygwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTIz
KDApOworICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzEoMCk7CisgICAgICAgIHN1YmxheWVy
TWF0cml4LnNldE0zMigwKTsKKyAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTMzKDEpOworICAg
ICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzQoMCk7CisgICAgICAgIHN1YmxheWVyTWF0cml4LnNl
dE00MygwKTsKKyAgICB9CisKKyAgICAvLyBBcHBseSB0aGUgc3VibGF5ZXIgdHJhbnNmb3JtIGF0
IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgorICAgIHN1YmxheWVyTWF0cml4Lm11bHRpcGx5KGxh
eWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKKworICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIGNo
aWxkcmVuIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLCBub3QgdGhlCisgICAg
Ly8gY2VudGVyLiBUaGUgbWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBjaGlsZHJlbiBpcyB0aGVy
ZWZvcmU6CisgICAgLy8gTVtzXSA9IE0gKiBUclstY2VudGVyXQorICAgIHN1YmxheWVyTWF0cml4
LnRyYW5zbGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5oZWlnaHQoKSAqIDAu
NSwgMCk7CisKKyAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkgPyBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKSA6IGxheWVyTGlzdCk7
CisgICAgZGVzY2VuZGFudHMuYXBwZW5kKGxheWVyKTsKKworICAgIHVuc2lnbmVkIHRoaXNMYXll
ckluZGV4ID0gZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTGF5ZXJUeXBl
KiBjaGlsZCA9IGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpOworICAgICAgICBjYWxjdWxhdGVE
cmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwg
TGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsK
KworICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSkgeworICAgICAgICAgICAgUmVu
ZGVyU3VyZmFjZVR5cGUqIGNoaWxkUmVuZGVyU3VyZmFjZSA9IGNoaWxkLT5yZW5kZXJTdXJmYWNl
KCk7CisgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJh
d2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0
ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVj
dCgpKSk7CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJs
ZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgIGRlc2NlbmRhbnRzLmFwcGVuZChjaGlsZCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3Qg
PSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgZHJhd2FibGVDb250
ZW50UmVjdC51bml0ZShjaGlsZC0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKKyAgICAgICAgICAg
IGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkgfHwgdXNlU3Vy
ZmFjZUZvck1hc2tpbmcpIHsKKyAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0g
bGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgZHJhd2FibGVDb250ZW50UmVj
dC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOworICAgICAgICBsYXllci0+c2V0RHJh
d2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICB9CisKKyAgICBpZiAo
bGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSByb290TGF5ZXIpIHsKKyAgICAgICAg
UmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgp
OworICAgICAgICBJbnRSZWN0IGNsaXBwZWRDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNv
bnRlbnRSZWN0KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc3VyZmFjZUNlbnRlciA9IEZsb2F0UmVj
dChjbGlwcGVkQ29udGVudFJlY3QpLmNlbnRlcigpOworCisgICAgICAgIC8vIFJlc3RyaWN0IHRo
ZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24gdGhhdCdzIHZpc2libGUuCisgICAg
ICAgIEZsb2F0U2l6ZSBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nOworCisgICAgICAgIC8vIERv
bid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBhcyB0aGUgcmVmbGVjdGlvbiBzaG91
bGRuJ3QgYmUKKyAgICAgICAgLy8gY2xpcHBlZC4KKyAgICAgICAgaWYgKCFsYXllci0+cmVwbGlj
YUxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+c2Npc3NvclJlY3Qo
KS5pc0VtcHR5KCkgJiYgIWNsaXBwZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICBJbnRSZWN0IHN1cmZhY2VTY2lzc29yUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVSZWN0
KHJlbmRlclN1cmZhY2UtPnNjaXNzb3JSZWN0KCksIGNsaXBwZWRDb250ZW50UmVjdCwgcmVuZGVy
U3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgICAgIGNsaXBwZWRDb250
ZW50UmVjdC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSBGbG9hdFJlY3QoY2xp
cHBlZENvbnRlbnRSZWN0KS5jZW50ZXIoKTsKKyAgICAgICAgICAgIGNlbnRlck9mZnNldER1ZVRv
Q2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1cmZhY2VDZW50ZXI7CisgICAgICAg
IH0KKworICAgICAgICAvLyBUaGUgUmVuZGVyU3VyZmFjZSBiYWNraW5nIHRleHR1cmUgY2Fubm90
IGV4Y2VlZCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQKKyAgICAgICAgLy8gdGV4dHVyZSBzaXplLgor
ICAgICAgICBjbGlwcGVkQ29udGVudFJlY3Quc2V0V2lkdGgobWluKGNsaXBwZWRDb250ZW50UmVj
dC53aWR0aCgpLCBtYXhUZXh0dXJlU2l6ZSkpOworICAgICAgICBjbGlwcGVkQ29udGVudFJlY3Qu
c2V0SGVpZ2h0KG1pbihjbGlwcGVkQ29udGVudFJlY3QuaGVpZ2h0KCksIG1heFRleHR1cmVTaXpl
KSk7CisKKyAgICAgICAgaWYgKGNsaXBwZWRDb250ZW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOworCisgICAgICAgIHJlbmRlclN1
cmZhY2UtPnNldENvbnRlbnRSZWN0KGNsaXBwZWRDb250ZW50UmVjdCk7CisKKyAgICAgICAgLy8g
U2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIgc3VyZmFjZSB3ZSBuZWVkIHRvIGFk
anVzdCBpdHMKKyAgICAgICAgLy8gc2Npc3NvciByZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUg
bmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAgICAgbGF5ZXItPnNldFNjaXNz
b3JSZWN0KGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOworCisgICAgICAgIC8vIEFkanVz
dCB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2Zvcm0gdG8gYmUgdGhlIGNlbnRlciBvZiB0aGUgcmVu
ZGVyIHN1cmZhY2UuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm0g
PSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgZHJhd1RyYW5zZm9y
bS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBp
bmcud2lkdGgoKSwgc3VyZmFjZUNlbnRlci55KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5n
LmhlaWdodCgpLCAwKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0RHJhd1RyYW5zZm9ybShk
cmF3VHJhbnNmb3JtKTsKKworICAgICAgICAvLyBDb21wdXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXggdXNlZCB0byBkcmF3IHRoZSByZXBsaWNhIG9mIHRoZSByZW5kZXIKKyAgICAgICAgLy8g
c3VyZmFjZS4KKyAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgeworICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJm
YWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAgIHJlcGxpY2FEcmF3VHJhbnNmb3Jt
LnRyYW5zbGF0ZTNkKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGxheWVy
LT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDApOworICAgICAgICAgICAgcmVwbGlj
YURyYXdUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0o
KSk7CisgICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNl
Q2VudGVyLngoKSAtIGFuY2hvclBvaW50LngoKSAqIGJvdW5kcy53aWR0aCgpLCBzdXJmYWNlQ2Vu
dGVyLnkoKSAtIGFuY2hvclBvaW50LnkoKSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CisgICAgICAg
ICAgICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShyZXBsaWNhRHJhd1Ry
YW5zZm9ybSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhl
biBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgaW4gM0Qgc28gdGhhdCB0aGV5IGNhbiBiZQorICAg
IC8vIGRyYXduIGZyb20gYmFjayB0byBmcm9udC4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0
eSBpcyBhbHNvIHNldCBvbiB0aGUgcGFyZW50IHRoZW4KKyAgICAvLyBza2lwIHRoZSBzb3J0aW5n
IGFzIHRoZSBwYXJlbnQgd2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgorICAg
IGlmIChsYXllci0+cHJlc2VydmVzM0QoKSAmJiAoIWxheWVyLT5wYXJlbnQoKSB8fCAhbGF5ZXIt
PnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKSkKKyAgICAgICAgc29ydExheWVycygmZGVzY2VuZGFu
dHMuYXQodGhpc0xheWVySW5kZXgpLCBkZXNjZW5kYW50cy5lbmQoKSwgbGF5ZXJTb3J0ZXIpOwor
fQorCit9CisKIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcnRob01hdHJpeChmbG9hdCBs
ZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3ApCiB7CiAgICAgZmxvYXQg
ZGVsdGFYID0gcmlnaHQgLSBsZWZ0OwpAQCAtOTYsMTYgKzQwNCw2IEBAIHN0YXRpYyBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBvcnRob01hdHJpeChmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQg
Ym90dG9tLCBmCiAgICAgcmV0dXJuIG9ydGhvOwogfQogCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhl
IG1hdHJpeCBoYXMgbm8gcm90YXRpb24sIHNrZXcgb3IgcGVyc3BlY3RpdmUgY29tcG9uZW50cyB0
byBpdC4KLXN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtKQotewotICAgIHJldHVybiAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5t
MTQoKQotICAgICAgICAgICAmJiAhbS5tMjEoKSAmJiAhbS5tMjMoKSAmJiAhbS5tMjQoKQotICAg
ICAgICAgICAmJiAhbS5tMzEoKSAmJiAhbS5tMzIoKSAmJiAhbS5tNDMoKQotICAgICAgICAgICAm
JiBtLm00NCgpOwotCi19Ci0KIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwg
UGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50LCBib29sIGFjY2Vs
ZXJhdGVEcmF3aW5nKQogewogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IGNsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwpAQCAtMjY5LDE5ICs1Njcs
MTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycygpCiAgICAgaWYg
KCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgewotICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVzIiwgdGhpcywgMCk7
Ci0gICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25p
emVUcmVlcyhtX3Jvb3RMYXllci5nZXQoKSwgbV9yb290Q0NMYXllckltcGwuZ2V0KCkpOwotICAg
IH0KLQotICAgIG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0ID0gYWRvcHRQdHIobmV3
IExheWVyTGlzdCgpKTsKLSAgICB1cGRhdGVMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKKyAgICB1cGRhdGVMYXllcnMobV9yb290TGF5ZXIuZ2V0KCkpOwogfQogCiB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiB7CiAgICAgQVNTRVJUKG1f
aGFyZHdhcmVDb21wb3NpdGluZyk7Ci0gICAgQVNTRVJUKG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKICAgICAvLyBCZWZvcmUgZHJhd0xheWVyczoKICAgICBpZiAoaGFyZHdhcmVD
b21wb3NpdGluZygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgbXVsdGl0aHJlYWRlZCBjb21w
b3NpdG9yIGNhc2Ugd2lsbCBub3Qgd29yayBhcyBsb25nIGFzCkBAIC0yOTUsOCArNTg2LDE0IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgfQogICAg
IH0KIAorICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c3luY2hyb25pemVUcmVlcyIsIHRoaXMsIDApOworICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9yb290TGF5ZXIuZ2V0KCksIG1f
cm9vdENDTGF5ZXJJbXBsLmdldCgpKTsKKyAgICB9CisKKwogICAgIG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVNZW1vcnlIaWdoTGltaXRC
eXRlcyAtIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkp
OwotICAgIGRyYXdMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKIAogICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnJl
ZHVjZU1lbW9yeVRvTGltaXQodGV4dHVyZU1lbW9yeVJlY2xhaW1MaW1pdEJ5dGVzKTsKQEAgLTMx
MCwzMyArNjA3LDMxIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkK
ICAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVy
Q2hyb21pdW0qIHJvb3RMYXllcikKIHsKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKLSAgICBDQ0xheWVySW1wbCogcm9vdERy
YXdMYXllciA9IG1fcm9vdExheWVyLT5jY0xheWVySW1wbCgpOwogCi0gICAgaWYgKCFyb290RHJh
d0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCi0gICAgICAgIHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKLSAgICBBU1NFUlQocm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgp
KTsKLQotICAgIHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3Qo
SW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUoKSkpOwor
ICAgIGlmICghcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJvb3RMYXllci0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3ZpZXdwb3J0VmlzaWJsZVJl
Y3Quc2l6ZSgpKSk7CiAKICAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdChtX3ZpZXdwb3J0Vmlz
aWJsZVJlY3QpOwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhl
IHNjcm9sbCBvZmZzZXQuCiAgICAgcm9vdFNjaXNzb3JSZWN0Lm1vdmUoLW1fdmlld3BvcnRTY3Jv
bGxQb3NpdGlvbi54KCksIC1tX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24ueSgpKTsKLSAgICByb290
RHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChyb290U2Npc3NvclJlY3QpOworICAgIHJvb3RMYXll
ci0+c2V0U2Npc3NvclJlY3Qocm9vdFNjaXNzb3JSZWN0KTsKIAotICAgIG1fZGVmYXVsdFJlbmRl
clN1cmZhY2UgPSByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgTGF5ZXJMaXN0
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocm9vdExheWVyKTsKIAotICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RE
cmF3TGF5ZXIpOworICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcm9vdFJlbmRlclN1cmZhY2Ug
PSByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICByb290UmVuZGVyU3VyZmFjZS0+Y2xl
YXJMYXllckxpc3QoKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OwotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7Ci0gICAgLy8g
VW5mb3J0dW5hdGVseSwgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKCkgY3VycmVu
dGx5IGJvdGggdXBkYXRlcyB0aGUgbGF5ZXJzIGFuZCB1cGRhdGVzIHRoZSBkcmF3IHN0YXRlCi0g
ICAgLy8gKHRyYW5zZm9ybXMsIGV0YykuIEl0J2QgYmUgbmljZXIgaWYgb3BlcmF0aW9ucyBvbiB0
aGUgcHJlc2VudGF0aW9uIGxheWVycyBoYXBwZW5lZCBsYXRlciwgYnV0IHRoZSBkcmF3Ci0gICAg
Ly8gdHJhbnNmb3JtcyBhcmUgbmVlZGVkIGJ5IGxhcmdlIGxheWVycyB0byBkZXRlcm1pbmUgdmlz
aWJpbGl0eS4gVGlsaW5nIHdpbGwgZml4IHRoaXMgYnkgZWxpbWluYXRpbmcgdGhlCi0gICAgLy8g
Y29uY2VwdCBvZiBhIGxhcmdlIGNvbnRlbnQgbGF5ZXIuCi0gICAgdXBkYXRlUHJvcGVydGllc0Fu
ZFJlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSk7CisKKyAg
ICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxh
eWVyczo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKKyAgICAgICAgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5PExheWVyQ2hyb21pdW0sIFJlbmRlclN1cmZhY2VDaHJvbWl1bSwg
dm9pZCo+KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgcm9vdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAwLCBtX21heFRleHR1
cmVTaXplKTsKKyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc19pblBhaW50TGF5ZXJDb250
ZW50cyA9IHRydWU7CkBAIC0zNTUsMjkgKzY1MCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogICAg
IHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiB9CiAK
LXN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdl
dFN1cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICAvLyBJcyB0aGlzIGxheWVyIGZ1bGx5
IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhcmdldCBzdXJmYWNlPwotICAgIEludFJlY3QgbGF5ZXJJ
blN1cmZhY2VTcGFjZSA9IHRyYW5zZm9ybS5tYXBSZWN0KGxheWVyQm91bmRSZWN0KTsKLSAgICBp
ZiAodGFyZ2V0U3VyZmFjZVJlY3QuY29udGFpbnMobGF5ZXJJblN1cmZhY2VTcGFjZSkpCi0gICAg
ICAgIHJldHVybiBsYXllckJvdW5kUmVjdDsKLQotICAgIC8vIElmIHRoZSBsYXllciBkb2Vzbid0
IGZpbGwgdXAgdGhlIGVudGlyZSBzdXJmYWNlLCB0aGVuIGZpbmQgdGhlIHBhcnQgb2YKLSAgICAv
LyB0aGUgc3VyZmFjZSByZWN0IHdoZXJlIHRoZSBsYXllciBjb3VsZCBiZSB2aXNpYmxlLiBUaGlz
IGF2b2lkcyB0cnlpbmcgdG8KLSAgICAvLyBwcm9qZWN0IHN1cmZhY2UgcmVjdCBwb2ludHMgdGhh
dCBhcmUgYmVoaW5kIHRoZSBwcm9qZWN0aW9uIHBvaW50LgotICAgIEludFJlY3QgbWluaW1hbFN1
cmZhY2VSZWN0ID0gdGFyZ2V0U3VyZmFjZVJlY3Q7Ci0gICAgbWluaW1hbFN1cmZhY2VSZWN0Lmlu
dGVyc2VjdChsYXllckluU3VyZmFjZVNwYWNlKTsKLQotICAgIC8vIFByb2plY3QgdGhlIGNvcm5l
cnMgb2YgdGhlIHRhcmdldCBzdXJmYWNlIHJlY3QgaW50byB0aGUgbGF5ZXIgc3BhY2UuCi0gICAg
Ly8gVGhpcyBib3VuZGluZyByZWN0YW5nbGUgbWF5IGJlIGxhcmdlciB0aGFuIGl0IG5lZWRzIHRv
IGJlIChiZWluZwotICAgIC8vIGF4aXMtYWxpZ25lZCksIGJ1dCBpcyBhIHJlYXNvbmFibGUgZmls
dGVyIG9uIHRoZSBzcGFjZSB0byBjb25zaWRlci4KLSAgICAvLyBOb24taW52ZXJ0aWJsZSB0cmFu
c2Zvcm1zIHdpbGwgY3JlYXRlIGFuIGVtcHR5IHJlY3QgaGVyZS4KLSAgICBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBzdXJmYWNlVG9MYXllciA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAg
SW50UmVjdCBsYXllclJlY3QgPSBzdXJmYWNlVG9MYXllci5wcm9qZWN0UXVhZChGbG9hdFF1YWQo
RmxvYXRSZWN0KG1pbmltYWxTdXJmYWNlUmVjdCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwot
ICAgIGxheWVyUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZFJlY3QpOwotICAgIHJldHVybiBsYXll
clJlY3Q7Ci19Ci0KIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoY29u
c3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29u
c3QgSW50U2l6ZSYgY29udGVudEJvdW5kcywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRp
bGluZ1RyYW5zZm9ybSkKIHsKICAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuaXNFbXB0eSgpIHx8
IGNvbnRlbnRCb3VuZHMuaXNFbXB0eSgpKQpAQCAtNDA0LDcgKzY3Niw3IEBAIHN0YXRpYyB2b2lk
IHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBJbnRSZWN0
JiB2aXNpYmxlTGF5CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRl
bnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBmb3Ig
KGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1
cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NMYXllckltcGwq
IHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4
XS5nZXQoKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwogICAgICAgICBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwogCkBAIC00MjEsMTgg
KzY5MywxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRlbnRz
KGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheQogICAgICAgICBpZiAoIXJlbmRlclN1
cmZhY2UtPmRyYXdPcGFjaXR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBM
YXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOworICAgICAg
ICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgp
OwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVy
SW5kZXgpIHsKLSAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCA9IGxheWVyTGlz
dFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0g
bGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwogCiAgICAgICAgICAgICAvLyBMYXllcnMgdGhh
dCBzdGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxsIGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVu
ZGVyCiAgICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlzdCBpcyBwcm9jZXNzZWQuCi0gICAgICAg
ICAgICBpZiAoY2NMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKSAmJiBjY0xheWVySW1wbC0+cmVu
ZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCisgICAgICAgICAgICBpZiAobGF5ZXItPnJl
bmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2Up
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIExheWVyQ2hyb21pdW0q
IGxheWVyID0gY2NMYXllckltcGwtPm93bmVyKCk7Ci0KICAgICAgICAgICAgIGxheWVyLT5zZXRM
YXllclJlbmRlcmVyKHRoaXMpOwogCiAgICAgICAgICAgICBpZiAoIWxheWVyLT5vcGFjaXR5KCkp
CkBAIC00NDksMTAgKzcxOSwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRM
YXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheQogICAgICAgICAg
ICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBjY0xheWVySW1w
bC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gY2NMYXllckltcGwtPnRhcmdldFJlbmRlclN1cmZh
Y2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0
KCk7Ci0gICAgICAgICAgICBpZiAobGF5ZXItPmNjTGF5ZXJJbXBsKCktPnVzZXNMYXllclNjaXNz
b3IoKSkKLSAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXIt
PmNjTGF5ZXJJbXBsKCktPnNjaXNzb3JSZWN0KCkpOwotICAgICAgICAgICAgSW50UmVjdCB2aXNp
YmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVj
dCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBjY0xheWVySW1wbC0+
ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3Qg
PSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZh
Y2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0
KCk7CisgICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKKyAgICAgICAg
ICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkp
OworICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJs
ZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29u
dGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgpKTsKIAogICAgICAgICAgICAgcGFp
bnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHZpc2libGVMYXllclJlY3QpOwogCkBAIC00NzEsMTUg
Kzc0MSwzNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRlbnRz
KGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheQogICAgIH0KIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRl
cm5hbCgpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRWaXNpYmxlUmVjdC5pc0VtcHR5KCkgfHwgIW1f
cm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7Ci0gICAgQ0NMYXllckltcGwqIHJv
b3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKTsKKyAgICBDQ0xheWVySW1w
bCogcm9vdERyYXdMYXllciA9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpOwogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogCisgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkp
CisgICAgICAgIHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290
RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9p
bnQoMCwgMCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKKworICAgIEludFJlY3Qg
cm9vdFNjaXNzb3JSZWN0KG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7CisgICAgLy8gVGhlIHNjaXNz
b3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KKyAgICByb290U2Np
c3NvclJlY3QubW92ZSgtbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uLngoKSwgLW1fdmlld3BvcnRT
Y3JvbGxQb3NpdGlvbi55KCkpOworICAgIHJvb3REcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KHJv
b3RTY2lzc29yUmVjdCk7CisKKyAgICBDQ0xheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3REcmF3TGF5ZXIpOworCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgbV9kZWZhdWx0UmVu
ZGVyU3VyZmFjZSA9IHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICBtX2RlZmF1
bHRSZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOworCisgICAgeworICAgICAgICBUUkFD
RV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWw6OmNhbGNE
cmF3RXRjIiwgdGhpcywgMCk7CisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihyb290
RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29y
dGVyLCBtX21heFRleHR1cmVTaXplKTsKKyAgICB9CisKICAgICAvLyBUaGUgR0wgdmlld3BvcnQg
Y292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMu
CiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBtX3Zp
ZXdwb3J0VmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LmhlaWdodCgp
KSk7CiAKQEAgLTUxNyw3ICs4MDgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiAgICAgLy8g
Y29ycmVjdCBvcmRlci4KICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgp
IHsKICAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZh
Y2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7
CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNEcmF3KHRydWUpOwpAQCAtNTQxLDcg
KzgzMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IExh
eWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKICAgICAgICAgICAgICAgICBHTEMobV9j
b250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIExheWVyTGlzdCYgbGF5ZXJM
aXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CisgICAgICAgICAgICBjb25zdCBDQ0xh
eWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0
LnNpemUoKTsgKytsYXllckluZGV4KQogICAgICAgICAgICAgICAgIGRyYXdMYXllcihsYXllckxp
c3RbbGF5ZXJJbmRleF0uZ2V0KCksIHJlbmRlclN1cmZhY2UpOwogICAgICAgICB9CkBAIC02NTgs
MjY0ICs5NDksMTAgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxl
KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KICAgICByZXR1cm4gbWFwcGVk
UmVjdC5pbnRlcnNlY3RzKEZsb2F0UmVjdCgtMSwgLTEsIDIsIDIpKTsKIH0KIAotLy8gUmVjdXJz
aXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5k
IGNvbXB1dGVzIGFsbCB0aGUKLS8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3Ig
cmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCi12b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiBsYXll
ciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCkKLXsKLSAgICAvLyBD
b21wdXRlIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVk
IHRvIHRoaXMgbGF5ZXIgYW5kCi0gICAgLy8gYWxsIGl0cyBjaGlsZHJlbi4gSXQncyBpbXBvcnRh
bnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgotICAgIC8vIGlzIHRoZSBw
b3NpdGlvbiBvZiB0aGUgbGF5ZXIncyBhbmNob3IgcG9pbnQuIEFsc28sIHRoZSBjb29yZGluYXRl
IHN5c3RlbSB1c2VkCi0gICAgLy8gYXNzdW1lcyB0aGF0IHRoZSBvcmlnaW4gaXMgYXQgdGhlIGxv
d2VyIGxlZnQgZXZlbiB0aG91Z2ggdGhlIGNvb3JkaW5hdGVzIHRoZSBicm93c2VyCi0gICAgLy8g
Z2l2ZXMgdXMgZm9yIHRoZSBsYXllcnMgYXJlIGZvciB0aGUgdXBwZXIgbGVmdCBjb3JuZXIuIFRo
ZSBZIGZsaXAgaGFwcGVucyB2aWEKLSAgICAvLyB0aGUgb3J0aG9ncmFwaGljIHByb2plY3Rpb24g
YXBwbGllZCBhdCByZW5kZXIgdGltZS4KLSAgICAvLyBUaGUgdHJhbnNmb3JtYXRpb24gY2hhaW4g
Zm9yIHRoZSBsYXllciBpcyAodXNpbmcgdGhlIE1hdHJpeCB4IFZlY3RvciBvcmRlcik6Ci0gICAg
Ly8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltjXQotICAgIC8vIFdoZXJlIE1bcF0gaXMg
dGhlIHBhcmVudCBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhlIGZ1bmN0aW9uCi0gICAgLy8gICAg
ICAgVHJbbF0gaXMgdGhlIHRyYW5zbGF0aW9uIG1hdHJpeCBsb2NhdGluZyB0aGUgbGF5ZXIncyBh
bmNob3IgcG9pbnQKLSAgICAvLyAgICAgICBUcltjXSBpcyB0aGUgdHJhbnNsYXRpb24gb2Zmc2V0
IGJldHdlZW4gdGhlIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIKLSAg
ICAvLyAgICAgICBNW2xdIGlzIHRoZSBsYXllcidzIG1hdHJpeCAoYXBwbGllZCBhdCB0aGUgYW5j
aG9yIHBvaW50KQotICAgIC8vIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBjb29yZGluYXRlIHN5
c3RlbSB3aG9zZSBvcmlnaW4gaXMgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCi0gICAgLy8gTm90
ZSB0aGF0IHRoZSBmaW5hbCBtYXRyaXggdXNlZCBieSB0aGUgc2hhZGVyIGZvciB0aGUgbGF5ZXIg
aXMgUCAqIE0gKiBTIC4gVGhpcyBmaW5hbCBwcm9kdWN0Ci0gICAgLy8gaXMgY29tcHV0ZWQgaW4g
ZHJhd1RleHR1cmVkUXVhZCgpLgotICAgIC8vIFdoZXJlOiBQIGlzIHRoZSBwcm9qZWN0aW9uIG1h
dHJpeAotICAgIC8vICAgICAgICBNIGlzIHRoZSBsYXllcidzIG1hdHJpeCBjb21wdXRlZCBhYm92
ZQotICAgIC8vICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1c3RtZW50ICh0byBzY2FsZSB1cCB0
byB0aGUgbGF5ZXIgc2l6ZSkKLSAgICBJbnRTaXplIGJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsK
LSAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7Ci0gICAg
RmxvYXRQb2ludCBwb3NpdGlvbiA9IGxheWVyLT5wb3NpdGlvbigpOwotCi0gICAgLy8gT2Zmc2V0
IGJldHdlZW4gYW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBxdWFkLgotICAgIGZs
b2F0IGNlbnRlck9mZnNldFggPSAoMC41IC0gYW5jaG9yUG9pbnQueCgpKSAqIGJvdW5kcy53aWR0
aCgpOwotICAgIGZsb2F0IGNlbnRlck9mZnNldFkgPSAoMC41IC0gYW5jaG9yUG9pbnQueSgpKSAq
IGJvdW5kcy5oZWlnaHQoKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyTG9jYWxU
cmFuc2Zvcm07Ci0gICAgLy8gTFQgPSBUcltsXQotICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJh
bnNsYXRlM2QocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCksIGxheWVyLT5hbmNob3JQb2ludFoo
KSk7Ci0gICAgLy8gTFQgPSBUcltsXSAqIE1bbF0KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLm11
bHRpcGx5KGxheWVyLT50cmFuc2Zvcm0oKSk7Ci0gICAgLy8gTFQgPSBUcltsXSAqIE1bbF0gKiBU
cltjXQotICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwg
Y2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7Ci0KLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKLSAgICBjb21iaW5l
ZFRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyTG9jYWxUcmFuc2Zv
cm0pOwotCi0gICAgRmxvYXRSZWN0IGxheWVyUmVjdCgtMC41ICogbGF5ZXItPmJvdW5kcygpLndp
ZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIGxheWVyLT5ib3VuZHMoKS53
aWR0aCgpLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOwotICAgIEludFJlY3QgdHJhbnNmb3Jt
ZWRMYXllclJlY3Q7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyBsaWtlIHRoZSB3cm9uZyBw
bGFjZSB0byBzZXQgdGhpcwotICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJTY2lzc29yKGZhbHNlKTsK
LQotICAgIC8vIFRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzIHJlbmRlciBvbiBhIG5ldyBS
ZW5kZXJTdXJmYWNlIGlmIGFueSBvZgotICAgIC8vIHRoZXNlIGNvbmRpdGlvbnMgaG9sZDoKLSAg
ICAvLyAxLiBUaGUgbGF5ZXIgY2xpcHMgaXRzIGRlc2NlbmRhbnRzIGFuZCBpdHMgdHJhbnNmb3Jt
IGlzIG5vdCBhIHNpbXBsZSB0cmFuc2xhdGlvbi4KLSAgICAvLyAyLiBJZiB0aGUgbGF5ZXIgaGFz
IG9wYWNpdHkgIT0gMSBhbmQgZG9lcyBub3QgaGF2ZSBhIHByZXNlcnZlcy0zZCB0cmFuc2Zvcm0g
c3R5bGUuCi0gICAgLy8gMy4gVGhlIGxheWVyIHVzZXMgYSBtYXNrCi0gICAgLy8gNC4gVGhlIGxh
eWVyIGhhcyBhIHJlcGxpY2EgKHVzZWQgZm9yIHJlZmxlY3Rpb25zKQotICAgIC8vIDUuIFRoZSBs
YXllciBkb2Vzbid0IHByZXNlcnZlLTNkIGJ1dCBpcyB0aGUgY2hpbGQgb2YgYSBsYXllciB3aGlj
aCBkb2VzLgotICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3Jl
YXRlIGEgUmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZwotICAgIC8vIG91
dCBpdHMgY2hpbGRyZW4uIFRoZSBvcGFjaXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMg
aXMgbXVsdGlwbGllZCBieSB0aGUgb3BhY2l0eQotICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KLSAg
ICBib29sIHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkgJiYg
IWlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKTsKLSAgICBib29sIHVzZVN1
cmZhY2VGb3JPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJlc2Vy
dmVzM0QoKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gbGF5ZXItPm1hc2tMYXll
cigpOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBsYXllci0+cmVwbGljYUxh
eWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0gbGF5ZXItPnBh
cmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAmJiAhbGF5ZXItPnByZXNl
cnZlczNEKCkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCk7Ci0gICAgaWYgKHVz
ZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8IHVzZVN1cmZh
Y2VGb3JGbGF0RGVzY2VuZGFudHMgfHwgKCh1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNlU3Vy
ZmFjZUZvck9wYWNpdHkpICYmIGxheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKSkgewot
ICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpOwotICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UpCi0gICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlID0gbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLQotICAgICAgICAv
LyBUaGUgb3JpZ2luIG9mIHRoZSBuZXcgc3VyZmFjZSBpcyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIg
b2YgdGhlIGxheWVyLgotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3Jt
OwotICAgICAgICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKDAuNSAqIGJvdW5kcy53aWR0aCgp
LCAwLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwotICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5z
Zm9ybShkcmF3VHJhbnNmb3JtKTsKLQotICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IElu
dFJlY3QoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7Ci0KLSAgICAgICAg
Ly8gTGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRl
ciBzdXJmYWNlLgotICAgICAgICBmbG9hdCBkcmF3T3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCk7
Ci0gICAgICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2
ZXMzRCgpKQotICAgICAgICAgICAgZHJhd09wYWNpdHkgKj0gbGF5ZXItPnBhcmVudCgpLT5kcmF3
T3BhY2l0eSgpOwotICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3T3BhY2l0eShkcmF3T3Bh
Y2l0eSk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKLQotICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3Jt
OwotICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRz
LndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwotICAgICAgICByZW5kZXJTdXJm
YWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0obGF5ZXJPcmlnaW5UcmFuc2Zvcm0pOwotCi0gICAgICAg
IC8vIFRoZSByZW5kZXIgc3VyZmFjZSBzY2lzc29yIHJlY3QgaXMgdGhlIHNjaXNzb3IgcmVjdCB0
aGF0IG5lZWRzIHRvCi0gICAgICAgIC8vIGJlIGFwcGxpZWQgYmVmb3JlIGRyYXdpbmcgdGhlIHJl
bmRlciBzdXJmYWNlIG9udG8gaXRzIGNvbnRhaW5pbmcKLSAgICAgICAgLy8gc3VyZmFjZSBhbmQg
aXMgdGhlcmVmb3JlIGV4cHJlc3NlZCBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0ZSBzeXN0ZW0u
Ci0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNjaXNzb3JSZWN0KGxheWVyLT5wYXJlbnQoKSA/
IGxheWVyLT5wYXJlbnQoKS0+c2Npc3NvclJlY3QoKSA6IGxheWVyLT5zY2lzc29yUmVjdCgpKTsK
LQotICAgICAgICByZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOwotCi0gICAgICAgIGlm
IChsYXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1h
c2tMYXllcihsYXllci0+bWFza0xheWVyKCkpOwotICAgICAgICAgICAgbGF5ZXItPm1hc2tMYXll
cigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcigwKTsKLQotICAgICAg
ICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFz
a0xheWVyKCkpCi0gICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigp
LT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwotCi0gICAgICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKGxheWVyKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBEVCA9IE1bcF0gKiBMVAotICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5l
ZFRyYW5zZm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChsYXllci0+ZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7Ci0KLSAgICAg
ICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KGxheWVyLT5vcGFjaXR5KCkpOwotCi0gICAgICAgIGlm
IChsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCktPnBy
ZXNlcnZlczNEKCkpCi0gICAgICAgICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkobGF5ZXIt
PmRyYXdPcGFjaXR5KCkgKiBsYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCkpOwotCi0gICAg
ICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIgcGFy
ZW50LgotICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KGxheWVyLT5wYXJlbnQoKS0+
c2Npc3NvclJlY3QoKSk7Ci0gICAgICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpLT51c2VzTGF5
ZXJTY2lzc29yKCkpCi0gICAgICAgICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3Io
dHJ1ZSk7Ci0KLSAgICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVy
LT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsYXllciAhPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSkKLSAgICAgICAgICAgIGxheWVy
LT5jbGVhclJlbmRlclN1cmZhY2UoKTsKLQotICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3Vu
ZHMoKSkgewotICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yID0gdHJhbnNmb3JtZWRMYXllclJl
Y3Q7Ci0gICAgICAgICAgICBpZiAoIWxheWVyLT5zY2lzc29yUmVjdCgpLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICBzY2lzc29yLmludGVyc2VjdChsYXllci0+c2Npc3NvclJlY3QoKSk7Ci0g
ICAgICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3Qoc2Npc3Nvcik7Ci0gICAgICAgICAgICBs
YXllci0+c2V0VXNlc0xheWVyU2Npc3Nvcih0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVu
ZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKGxheWVyLT5wYXJlbnQoKSk7Ci0gICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJT
dXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKLSAgICB9Ci0K
LSAgICAvLyBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29v
cmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCi0gICAgLy8gUmVuZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJh
d3MgaW50by4KLSAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7Ci0gICAgICAgIEludFJl
Y3QgZHJhd2FibGVDb250ZW50UmVjdCA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwotICAgICAgICBp
ZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgIGRyYXdhYmxlQ29udGVu
dFJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKLSAgICAgICAgbGF5ZXItPnNl
dERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoKSk7Ci0KLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9IGxheWVyLT5kcmF3VHJhbnNmb3Jt
KCk7Ci0KLSAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBsYXllciBkb2Vzbid0IHByZXNlcnZl
IDNELgotICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpIHsKLSAgICAgICAgc3VibGF5ZXJN
YXRyaXguc2V0TTEzKDApOwotICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMjMoMCk7Ci0gICAg
ICAgIHN1YmxheWVyTWF0cml4LnNldE0zMSgwKTsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0
TTMyKDApOwotICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzMoMSk7Ci0gICAgICAgIHN1Ymxh
eWVyTWF0cml4LnNldE0zNCgwKTsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTQzKDApOwot
ICAgIH0KLQotICAgIC8vIEFwcGx5IHRoZSBzdWJsYXllciB0cmFuc2Zvcm0gYXQgdGhlIGNlbnRl
ciBvZiB0aGUgbGF5ZXIuCi0gICAgc3VibGF5ZXJNYXRyaXgubXVsdGlwbHkobGF5ZXItPnN1Ymxh
eWVyVHJhbnNmb3JtKCkpOwotCi0gICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgY2hpbGRyZW4gaXMg
dGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIsIG5vdCB0aGUKLSAgICAvLyBjZW50ZXIu
IFRoZSBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhlIGNoaWxkcmVuIGlzIHRoZXJlZm9yZToKLSAg
ICAvLyBNW3NdID0gTSAqIFRyWy1jZW50ZXJdCi0gICAgc3VibGF5ZXJNYXRyaXgudHJhbnNsYXRl
M2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAtYm91bmRzLmhlaWdodCgpICogMC41LCAwKTsKLQot
ICAgIExheWVyTGlzdCYgZGVzY2VuZGFudHMgPSAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpIDogbGF5ZXJMaXN0KTsKLSAgICBkZXNj
ZW5kYW50cy5hcHBlbmQobGF5ZXIpOwotCi0gICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBk
ZXNjZW5kYW50cy5zaXplKCkgLSAxOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXll
ci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQg
PSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKLSAgICAgICAgdXBkYXRlUHJvcGVydGllc0Fu
ZFJlbmRlclN1cmZhY2VzKGNoaWxkLCBzdWJsYXllck1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgZGVzY2VuZGFudHMpOwotCi0gICAgICAgIGlmIChjaGlsZC0+cmVuZGVyU3VyZmFjZSgp
KSB7Ci0gICAgICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGNoaWxkUmVuZGVyU3VyZmFj
ZSA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxl
Q29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAg
ZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3Vy
ZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0RHJh
d2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKLSAgICAgICAgICAgIGRlc2Nl
bmRhbnRzLmFwcGVuZChjaGlsZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRS
ZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwot
ICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShjaGlsZC0+ZHJhd2FibGVDb250
ZW50UmVjdCgpKTsKLSAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRy
YXdhYmxlQ29udGVudFJlY3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxheWVyLT5t
YXNrc1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKLSAgICAgICAgSW50UmVj
dCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKLSAg
ICAgICAgZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3Qp
OwotICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRS
ZWN0KTsKLSAgICB9Ci0KLSAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAh
PSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSkgewotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBJbnRS
ZWN0IHJlbmRlclN1cmZhY2VDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0
KCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgc3VyZmFjZUNlbnRlciA9IEZsb2F0UmVjdChyZW5kZXJT
dXJmYWNlQ29udGVudFJlY3QpLmNlbnRlcigpOwotCi0gICAgICAgIC8vIFJlc3RyaWN0IHRoZSBS
ZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24gdGhhdCdzIHZpc2libGUuCi0gICAgICAg
IEZsb2F0U2l6ZSBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nOwotCi0gICAgICAgIC8vIERvbid0
IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBhcyB0aGUgcmVmbGVjdGlvbiBzaG91bGRu
J3QgYmUKLSAgICAgICAgLy8gY2xpcHBlZC4KLSAgICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxh
eWVyKCkpIHsKLSAgICAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZS0+c2Npc3NvclJlY3QoKS5p
c0VtcHR5KCkgJiYgIXJlbmRlclN1cmZhY2VDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VTY2lzc29yUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVS
ZWN0KHJlbmRlclN1cmZhY2UtPnNjaXNzb3JSZWN0KCksIHJlbmRlclN1cmZhY2VDb250ZW50UmVj
dCwgcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgICAgIHJl
bmRlclN1cmZhY2VDb250ZW50UmVjdC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIg
PSBGbG9hdFJlY3QocmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0KS5jZW50ZXIoKTsKLSAgICAgICAg
ICAgIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1
cmZhY2VDZW50ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgUmVuZGVyU3VyZmFjZSBi
YWNraW5nIHRleHR1cmUgY2Fubm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQKLSAgICAg
ICAgLy8gdGV4dHVyZSBzaXplLgotICAgICAgICByZW5kZXJTdXJmYWNlQ29udGVudFJlY3Quc2V0
V2lkdGgoc3RkOjptaW4ocmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0LndpZHRoKCksIG1fbWF4VGV4
dHVyZVNpemUpKTsKLSAgICAgICAgcmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0LnNldEhlaWdodChz
dGQ6Om1pbihyZW5kZXJTdXJmYWNlQ29udGVudFJlY3QuaGVpZ2h0KCksIG1fbWF4VGV4dHVyZVNp
emUpKTsKLQotICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7Ci0gICAgICAgIHJl
bmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KHJlbmRlclN1cmZhY2VDb250ZW50UmVjdCk7Ci0K
LSAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIgc3VyZmFjZSB3
ZSBuZWVkIHRvIGFkanVzdCBpdHMKLSAgICAgICAgLy8gc2Npc3NvciByZWN0IHRvIGJlIGV4cHJl
c3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgbGF5
ZXItPnNldFNjaXNzb3JSZWN0KGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwotCi0gICAg
ICAgIC8vIEFkanVzdCB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2Zvcm0gdG8gYmUgdGhlIGNlbnRl
ciBvZiB0aGUgcmVuZGVyIHN1cmZhY2UuCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRy
YXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKLSAgICAgICAg
ZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSArIGNlbnRlck9mZnNl
dER1ZVRvQ2xpcHBpbmcud2lkdGgoKSwgc3VyZmFjZUNlbnRlci55KCkgKyBjZW50ZXJPZmZzZXRE
dWVUb0NsaXBwaW5nLmhlaWdodCgpLCAwKTsKLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0RHJh
d1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKLQotICAgICAgICAvLyBDb21wdXRlIHRoZSB0cmFu
c2Zvcm1hdGlvbiBtYXRyaXggdXNlZCB0byBkcmF3IHRoZSByZXBsaWNhIG9mIHRoZSByZW5kZXIK
LSAgICAgICAgLy8gc3VyZmFjZS4KLSAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkg
ewotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYURyYXdUcmFuc2Zvcm0g
PSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIHJlcGxpY2FE
cmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24o
KS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDApOwotICAgICAg
ICAgICAgcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigp
LT50cmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xh
dGUzZChzdXJmYWNlQ2VudGVyLngoKSAtIGFuY2hvclBvaW50LngoKSAqIGJvdW5kcy53aWR0aCgp
LCBzdXJmYWNlQ2VudGVyLnkoKSAtIGFuY2hvclBvaW50LnkoKSAqIGJvdW5kcy5oZWlnaHQoKSwg
MCk7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShy
ZXBsaWNhRHJhd1RyYW5zZm9ybSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiBwcmVz
ZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgaW4gM0Qgc28gdGhhdCB0aGV5
IGNhbiBiZSAKLSAgICAvLyBkcmF3biBmcm9tIGJhY2sgdG8gZnJvbnQuIElmIHRoZSBwcmVzZXJ2
ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhlIHBhcmVudCB0aGVuCi0gICAgLy8gc2tp
cCB0aGUgc29ydGluZyBhcyB0aGUgcGFyZW50IHdpbGwgc29ydCBhbGwgdGhlIGRlc2NlbmRhbnRz
IGFueXdheS4KLSAgICBpZiAobGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50
KCkgfHwgIWxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkpCi0gICAgICAgIG1fbGF5ZXJT
b3J0ZXIuc29ydCgmZGVzY2VuZGFudHMuYXQodGhpc0xheWVySW5kZXgpLCBkZXNjZW5kYW50cy5l
bmQoKSk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAg
ICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAt
IDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NMYXll
ckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFj
ZUluZGV4XS5nZXQoKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVy
ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwogICAgICAgICBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXIt
PnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwogCkBAIC05
MjUsMTkgKzk2MiwxNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cgogICAgICAgICBjb25zdCBM
YXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAg
ICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJ
bmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsK
LSAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCA9IGxheWVyTGlzdFtsYXllcklu
ZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChjY0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgp
ICYmIGNjTGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKKyAgICAg
ICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgp
OworICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRl
clN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNjTGF5ZXJJbXBsKTsKKyAg
ICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXIpOwogICAgICAgICB9CiAg
ICAgfQogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhDQ0xheWVySW1wbCogY2NMYXllckltcGwpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKIHsK
LSAgICBMYXllckNocm9taXVtKiBsYXllciA9IGNjTGF5ZXJJbXBsLT5vd25lcigpOwotCiAgICAg
aWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTQ1
LDE0ICs5ODAsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKGNjTGF5ZXJJbXBsLT5tYXNrTGF5ZXIoKSk7CisgICAgICAgIHVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMobGF5ZXItPm1hc2tMYXllcigpKTsKICAgICBpZiAobGF5ZXItPnJlcGxpY2FM
YXllcigpKQotICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNjTGF5ZXJJbXBsLT5y
ZXBsaWNhTGF5ZXIoKSk7CisgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXIt
PnJlcGxpY2FMYXllcigpKTsKIAogICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCiAgICAg
ICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0KLSAgICBsYXllci0+cHVz
aFByb3BlcnRpZXNUbyhjY0xheWVySW1wbCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpzZXRDb21wb3NpdGVPZmZzY3JlZW4oYm9vbCBjb21wb3NpdGVPZmZzY3JlZW4pCkBAIC05
NjIsMTMgKzk5NSwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRl
T2Zmc2NyZWVuKGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuKQogCiAgICAgbV9jb21wb3NpdGVPZmZz
Y3JlZW4gPSBjb21wb3NpdGVPZmZzY3JlZW47CiAKLSAgICBpZiAoIW1fY29tcG9zaXRlT2Zmc2Ny
ZWVuICYmIG1fcm9vdExheWVyKQotICAgICAgICBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKS0+
Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CisgICAgaWYgKCFtX2NvbXBvc2l0ZU9mZnNjcmVlbiAmJiBt
X3Jvb3RDQ0xheWVySW1wbCkKKyAgICAgICAgbV9yb290Q0NMYXllckltcGwtPmNsZWFyUmVuZGVy
U3VyZmFjZSgpOwogfQogCiBMYXllclRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0
T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3Jl
ZW4gPyBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50
c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIG1fY29tcG9zaXRlT2Zmc2NyZWVuICYmIG1fcm9v
dENDTGF5ZXJJbXBsID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVu
dHNUZXh0dXJlKCkgOiAwOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weU9m
ZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQpAQCAtOTg1LDcgKzEwMTgsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQogICAgIH0K
IH0KIAotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoUmVuZGVy
U3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKQorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogewog
ICAgIGlmIChtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IHJlbmRlclN1cmZhY2UpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTAxOSw3ICsxMDUyLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVzZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJm
YWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0
U3VyZmFjZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllcklt
cGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCiB7CiAgICAgaWYgKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSB0YXJnZXRT
dXJmYWNlKSB7CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXcobGF5ZXItPmdl
dERyYXdSZWN0KCkpOwpAQCAtMTA0Niw3ICsxMDc5LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSoKICAgICB9IGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIAotCiAgICAgaWYgKCFs
YXllci0+ZG91YmxlU2lkZWQoKSkgewogICAgICAgICAvLyBGSVhNRTogTmVlZCB0byB0YWtlIGlu
dG8gYWNjb3VudCB0aGUgY3VtdWxhdGl2ZSByZW5kZXIgc3VyZmFjZSB0cmFuc2Zvcm1zIGFsbCB0
aGUgd2F5IGZyb20KICAgICAgICAgLy8gICAgICAgIHRoZSBkZWZhdWx0IHJlbmRlciBzdXJmYWNl
IGluIG9yZGVyIHRvIGRldGVybWluZSB2aXNpYmlsaXR5LgpAQCAtMTE0NSw3ICsxMTc3LDcgQEAg
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAg
ICAvLyBXZSB3aWxsIGFsd2F5cyBuZWVkIHRoZXNlIHByb2dyYW1zIHRvIHJlbmRlciwgc28gY3Jl
YXRlIHRoZSBwcm9ncmFtcyBlYWdlcmx5IHNvIHRoYXQgdGhlIHNoYWRlciBjb21waWxhdGlvbiBj
YW4KICAgICAvLyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhlciBwcm9ncmFtcyBh
cmUgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLgogICAgIG1fc2hhcmVkR2VvbWV0cnkg
PSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkpOwotICAgIG1f
cmVuZGVyU3VyZmFjZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVt
OjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0g
PSBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkp
OwogICAgIG1fdGlsZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bTo6
UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1f
Y29udGV4dC0+Zmx1c2goKSk7CkBAIC0xMTc3LDcgKzEyMDksNyBAQCBjb25zdCBDQ0hlYWRzVXBE
aXNwbGF5OjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmhlYWRzVXBEaXNwbGF5UHJv
Z3JhbSgpCiAgICAgcmV0dXJuIG1faGVhZHNVcERpc3BsYXlQcm9ncmFtLmdldCgpOwogfQogCi1j
b25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6cmVuZGVyU3VyZmFjZVByb2dyYW0oKQorY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFt
KiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtKCkKIHsKICAgICBB
U1NFUlQobV9yZW5kZXJTdXJmYWNlUHJvZ3JhbSk7CiAgICAgaWYgKCFtX3JlbmRlclN1cmZhY2VQ
cm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CkBAIC0xMTg3LDEwICsxMjE5LDEwIEBAIGNvbnN0IFJl
bmRlclN1cmZhY2VDaHJvbWl1bTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5k
ZXJTdXJmYWNlUHJvZ3JhCiAgICAgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0uZ2V0KCk7
CiB9CiAKLWNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6TWFza1Byb2dyYW0qIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCkKK2NvbnN0IENDUmVuZGVy
U3VyZmFjZTo6TWFza1Byb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFj
ZU1hc2tQcm9ncmFtKCkKIHsKICAgICBpZiAoIW1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKQot
ICAgICAgICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJT
dXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgICAgICBt
X3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2U6
Ok1hc2tQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwogICAgIGlmICghbV9yZW5kZXJTdXJmYWNl
TWFza1Byb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Ym9yZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwog
ICAgICAgICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOwpAQCAtMTM0
Myw4ICsxMzc1LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ29tcG9zaXRvckNv
bnRleHRMb3N0KCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJm
YWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIGNv
bnN0CiB7Ci0gICAgaWYgKGxheWVyLT5jY0xheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCkpCi0g
ICAgICAgIGxheWVyLT5jY0xheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPmR1bXBTdXJmYWNl
KHRzLCBpbmRlbnQpOworICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5kdW1wU3VyZmFjZSh0cywgaW5kZW50KTsKIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIGR1bXBSZW5kZXJTdXJmYWNlcyh0cywgaW5kZW50LCBsYXllci0+Y2hpbGRyZW4oKVtpXS5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGNiMTQ0NzQ5NDdk
NDNlNzhmNTNkMmRlOTI3YjVlNTFkMmZlMzZlMGIuLjA2Yjk0ODY5Njg4MGIwZDQzMjBkMWFiYmVk
N2M4N2YzYzE1YWJhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0z
OCw3ICszOCw2IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJSZW5kZXJT
dXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlZpZGVv
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCkBAIC0x
MjksOCArMTI4LDggQEAgcHVibGljOgogICAgIGNvbnN0IEdlb21ldHJ5QmluZGluZyogc2hhcmVk
R2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5LmdldCgpOyB9CiAgICAg
Y29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogYm9yZGVyUHJvZ3JhbSgpOwogICAg
IGNvbnN0IENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0qIGhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgp
OwotICAgIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UHJvZ3JhbSogcmVuZGVyU3VyZmFj
ZVByb2dyYW0oKTsKLSAgICBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFt
KiByZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0oKTsKKyAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6
OlByb2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CisgICAgY29uc3QgQ0NSZW5kZXJTdXJm
YWNlOjpNYXNrUHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7CiAgICAgY29uc3Qg
TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiB0aWxlclByb2dyYW0oKTsKICAgICBjb25zdCBM
YXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlKiB0aWxlclByb2dyYW1Td2l6emxlKCk7
CiAgICAgY29uc3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3Jh
bSgpOwpAQCAtMTYyLDExICsxNjEsMTMgQEAgcHVibGljOgogI2lmbmRlZiBOREVCVUcKICAgICBz
dGF0aWMgYm9vbCBzX2luUGFpbnRMYXllckNvbnRlbnRzOwogI2VuZGlmCisgICAgdHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0OworICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKKwogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVy
VHJlZUhvc3RJbXBsUHJveHkoKTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFwaGlj
c0NvbnRleHQzRCosIGludD4gQ2hpbGRDb250ZXh0TWFwOwogCiAgICAgLy8gRklYTUU6IFRoaXMg
bmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdEltcGwgd2hlbiB0aGF0IGNs
YXNzIGV4aXN0cy4KQEAgLTE3NCwxNiArMTc1LDE1IEBAIHByaXZhdGU6CiAKICAgICBMYXllclJl
bmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4sIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWlu
dCwgYm9vbCBhY2NlbGVyYXRlRHJhd2luZyk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExh
eWVyQ2hyb21pdW0qKTsKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7Ci0gICAg
dm9pZCB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJzKTsKIAogICAgIHZvaWQgcGFpbnRMYXll
ckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIHZv
aWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVySW1wbCopOworICAgIHZvaWQgdXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKik7CiAKLSAgICB2b2lkIGRyYXdM
YXllcnMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lk
IGRyYXdMYXllcihDQ0xheWVySW1wbCosIFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOworICAgIHZv
aWQgZHJhd0xheWVyc0ludGVybmFsKCk7CisgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwq
LCBDQ1JlbmRlclN1cmZhY2UqKTsKIAogICAgIHZvaWQgZHJhd1Jvb3RMYXllcigpOwogICAgIExh
eWVyVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CkBAIC0xOTMsNyArMTkzLDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0
JiwgYm9vbCBmbGlwWSk7CiAKLSAgICBib29sIHVzZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFj
ZUNocm9taXVtKik7CisgICAgYm9vbCB1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSop
OwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIApAQCAtMjIxLDcgKzIyMSw3IEBA
IHByaXZhdGU6CiAKICAgICBPd25QdHI8TGF5ZXJMaXN0PiBtX2NvbXB1dGVkUmVuZGVyU3VyZmFj
ZUxheWVyTGlzdDsKIAotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9jdXJyZW50UmVuZGVy
U3VyZmFjZTsKKyAgICBDQ1JlbmRlclN1cmZhY2UqIG1fY3VycmVudFJlbmRlclN1cmZhY2U7CiAg
ICAgdW5zaWduZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkOwogICAgIGJvb2wgbV9jb21wb3Np
dGVPZmZzY3JlZW47CiAKQEAgLTIzNSwxNCArMjM1LDE0IEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PEdlb21ldHJ5QmluZGluZz4gbV9zaGFyZWRHZW9tZXRyeTsKICAgICBPd25QdHI8TGF5ZXJDaHJv
bWl1bTo6Qm9yZGVyUHJvZ3JhbT4gbV9ib3JkZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ0hlYWRz
VXBEaXNwbGF5OjpQcm9ncmFtPiBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbTsKLSAgICBPd25QdHI8
UmVuZGVyU3VyZmFjZUNocm9taXVtOjpQcm9ncmFtPiBtX3JlbmRlclN1cmZhY2VQcm9ncmFtOwot
ICAgIE93blB0cjxSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFtPiBtX3JlbmRlclN1
cmZhY2VNYXNrUHJvZ3JhbTsKICAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFt
PiBtX3RpbGVyUHJvZ3JhbTsKICAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFt
U3dpenpsZT4gbV90aWxlclByb2dyYW1Td2l6emxlOwogICAgIE93blB0cjxDQ0NhbnZhc0xheWVy
SW1wbDo6UHJvZ3JhbT4gbV9jYW52YXNMYXllclByb2dyYW07CisgICAgT3duUHRyPENDUGx1Z2lu
TGF5ZXJJbXBsOjpQcm9ncmFtPiBtX3BsdWdpbkxheWVyUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NS
ZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW07Cisg
ICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlUHJvZ3Jh
bTsKICAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0+IG1fdmlkZW9MYXll
clJHQkFQcm9ncmFtOwogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtPiBt
X3ZpZGVvTGF5ZXJZVVZQcm9ncmFtOwotICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJv
Z3JhbT4gbV9wbHVnaW5MYXllclByb2dyYW07CiAKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlcjsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1f
cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyOwpAQCAtMjYyLDcgKzI2Miw3IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1fYW5pbWF0aW5nOwogCi0gICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBt
X2RlZmF1bHRSZW5kZXJTdXJmYWNlOworICAgIENDUmVuZGVyU3VyZmFjZSogbV9kZWZhdWx0UmVu
ZGVyU3VyZmFjZTsKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDAwMGYyOTUwZjQ5Y2NiNTJiYzY2MzU5
NzY2ZWQxYzY4M2EzMzg5NDcuLmI2ZTM1MDZmY2ZmZjNhNTY4MWE1NTNmNDFhNmY1ZWIyNDhlODFl
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCkBAIC00OSw3ICs0OSw3IEBA
IFBsdWdpbkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lcikKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gUGx1Z2luTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1BsdWdpbkxheWVySW1w
bDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CisgICAgcmV0dXJuIENDUGx1Z2luTGF5ZXJJbXBs
OjpjcmVhdGUobV9sYXllcklkKTsKIH0KIAogdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRU
ZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNw
cAppbmRleCA2YTI3MjE2ZDAyNGJlOTMxMmVmNjk2MjcxOTQyZTYyOTVkYjg0MzY0Li5lODdmZWY2
NzNkMTMwNDRmZjg1ZGVmNTUwMTMzNmY3N2VjZjdjNDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1
cmZhY2VDaHJvbWl1bS5jcHAKQEAgLTI5LDE3ICsyOSwxMyBAQAogCiAjaW5jbHVkZSAiUmVuZGVy
U3VyZmFjZUNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5o
IgotI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJT
dXJmYWNlQ2hyb21pdW0oQ0NMYXllckltcGwqIG93bmluZ0xheWVyKQorUmVuZGVyU3VyZmFjZUNo
cm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0oTGF5ZXJDaHJvbWl1bSogb3duaW5nTGF5ZXIp
CiAgICAgOiBtX293bmluZ0xheWVyKG93bmluZ0xheWVyKQogICAgICwgbV9tYXNrTGF5ZXIoMCkK
ICAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQpAQCAtNDksMTcgKzQ1LDYgQEAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0oQ0NMYXllckltcGwqIG93bmluZ0xheWVy
KQogCiBSZW5kZXJTdXJmYWNlQ2hyb21pdW06On5SZW5kZXJTdXJmYWNlQ2hyb21pdW0oKQogewot
ICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKLX0KLQotdm9pZCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06
OmNsZWFudXBSZXNvdXJjZXMoKQotewotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwotCi0gICAgbV9jb250
ZW50c1RleHR1cmUuY2xlYXIoKTsKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtKiBSZW5kZXJT
dXJmYWNlQ2hyb21pdW06OmxheWVyUmVuZGVyZXIoKQpAQCAtNzksMTA1ICs2NCw2IEBAIEZsb2F0
UmVjdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAog
ICAgIHJldHVybiBkcmF3YWJsZUNvbnRlbnRSZWN0OwogfQogCi1ib29sIFJlbmRlclN1cmZhY2VD
aHJvbWl1bTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSgpCi17Ci0gICAgSW50U2l6ZSByZXF1aXJl
ZFNpemUobV9jb250ZW50UmVjdC5zaXplKCkpOwotICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJl
TWFuYWdlciA9IGxheWVyUmVuZGVyZXIoKS0+cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCk7
Ci0KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICBtX2NvbnRlbnRzVGV4dHVy
ZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCB0ZXh0
dXJlTWFuYWdlcik7Ci0KLSAgICBpZiAobV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNl
cnZlKHJlcXVpcmVkU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7Ci0gICAgICAgIG1f
c2tpcHNEcmF3ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1f
c2tpcHNEcmF3ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlKCkKLXsKLSAgICBpZiAobV9za2lw
c0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZW50c1RleHR1cmUtPnVucmVzZXJ2ZSgpOwotfQotCi12b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1
bTo6ZHJhd1N1cmZhY2UoQ0NMYXllckltcGwqIG1hc2tMYXllciwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQzRCA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOwotCi0gICAgaW50IHNoYWRlck1hdHJp
eExvY2F0aW9uID0gLTE7Ci0gICAgaW50IHNoYWRlckFscGhhTG9jYXRpb24gPSAtMTsKLSAgICBj
b25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRl
cmVyKCktPnJlbmRlclN1cmZhY2VQcm9ncmFtKCk7Ci0gICAgY29uc3QgUmVuZGVyU3VyZmFjZUNo
cm9taXVtOjpNYXNrUHJvZ3JhbSogbWFza1Byb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnJlbmRl
clN1cmZhY2VNYXNrUHJvZ3JhbSgpOwotICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmlu
aXRpYWxpemVkKCkpOwotICAgIGJvb2wgdXNlTWFzayA9IGZhbHNlOwotICAgIGlmIChtYXNrTGF5
ZXIgJiYgbWFza0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBpZiAoIW1hc2tMYXll
ci0+Ym91bmRzKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0M0QtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51c2VQ
cm9ncmFtKG1hc2tQcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0
M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
KTsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFpKG1hc2tQ
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgICAg
ICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKLSAgICAgICAgICAgIEdMQyhj
b250ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTEpKTsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFp
KG1hc2tQcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVyTG9jYXRpb24oKSwgMSkp
OwotICAgICAgICAgICAgbWFza0xheWVyLT5iaW5kQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgICAg
ICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1h
c2tQcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOwotICAgICAgICAgICAg
c2hhZGVyQWxwaGFMb2NhdGlvbiA9IG1hc2tQcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhh
TG9jYXRpb24oKTsKLSAgICAgICAgICAgIHVzZU1hc2sgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKCF1c2VNYXNrKSB7Ci0gICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQz
RC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgbV9jb250ZW50c1Rl
eHR1cmUtPmJpbmRUZXh0dXJlKCk7Ci0gICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+
dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDAp
KTsKLSAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS5tYXRyaXhMb2NhdGlvbigpOwotICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0gcHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIExh
eWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCks
IGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29udGVudFJlY3Qud2lkdGgo
KSwgbV9jb250ZW50UmVjdC5oZWlnaHQoKSwgbV9kcmF3T3BhY2l0eSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiwgc2hhZGVyQWxw
aGFMb2NhdGlvbik7Ci19Ci0KLXZvaWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3KGNvbnN0
IEludFJlY3QmKQotewotICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUp
Ci0gICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogQnkgdXNpbmcgdGhlIHNhbWUgUmVuZGVy
U3VyZmFjZSBmb3IgYm90aCB0aGUgY29udGVudCBhbmQgaXRzIHJlZmxlY3Rpb24sCi0gICAgLy8g
aXQncyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIGFwcGx5IGEgc2VwYXJhdGUgbWFzayB0byB0
aGUgcmVmbGVjdGlvbiBsYXllcgotICAgIC8vIG9yIGNvcnJlY3RseSBoYW5kbGUgb3BhY2l0eSBp
biByZWZsZWN0aW9ucyAob3BhY2l0eSBtdXN0IGJlIGFwcGxpZWQgYWZ0ZXIgZHJhd2luZwotICAg
IC8vIGJvdGggdGhlIGxheWVyIGFuZCBpdHMgcmVmbGVjdGlvbikuIFRoZSBzb2x1dGlvbiBpcyB0
byBpbnRyb2R1Y2UgeWV0IGFub3RoZXIgUmVuZGVyU3VyZmFjZQotICAgIC8vIHRvIGRyYXcgdGhl
IGxheWVyIGFuZCBpdHMgcmVmbGVjdGlvbiBpbi4gRm9yIG5vdyB3ZSBvbmx5IGFwcGx5IGEgc2Vw
YXJhdGUgcmVmbGVjdGlvbgotICAgIC8vIG1hc2sgaWYgdGhlIGNvbnRlbnRzIGRvbid0IGhhdmUg
YSBtYXNrIG9mIHRoZWlyIG93bi4KLSAgICBDQ0xheWVySW1wbCogcmVwbGljYU1hc2tMYXllciA9
IG1fbWFza0xheWVyOwotICAgIGlmICghbV9tYXNrTGF5ZXIgJiYgbV9vd25pbmdMYXllci0+cmVw
bGljYUxheWVyKCkpCi0gICAgICAgIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX293bmluZ0xheWVyLT5y
ZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7Ci0KLSAgICBpZiAobV9vd25pbmdMYXllci0+cGFy
ZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllclNjaXNzb3IoKSkKLSAg
ICAgICAgbGF5ZXJSZW5kZXJlcigpLT5zZXRTY2lzc29yVG9SZWN0KG1fc2Npc3NvclJlY3QpOwot
ICAgIGVsc2UKLSAgICAgICAgR0xDKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCBsYXllclJl
bmRlcmVyKCktPmNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKSk7Ci0KLQotICAgIC8vIFJlZmxlY3Rpb24gZHJhd3MgYmVmb3JlIHRoZSBsYXllci4KLSAg
ICBpZiAobV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAgICAgIGRyYXdTdXJmYWNl
KHJlcGxpY2FNYXNrTGF5ZXIsIG1fcmVwbGljYURyYXdUcmFuc2Zvcm0pOwotCi0gICAgZHJhd1N1
cmZhY2UobV9tYXNrTGF5ZXIsIG1fZHJhd1RyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtOjpjbGVhckxheWVyTGlzdCgpCi17Ci0gICAgbV9sYXllckxpc3QuY2xlYXIo
KTsKLX0KLQogU3RyaW5nIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6bmFtZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJTdXJmYWNlKGlkPSVkLG93bmVyPSVzKSIs
IG1fb3duaW5nTGF5ZXItPmlkKCksIG1fb3duaW5nTGF5ZXItPm5hbWUoKS51dGY4KCkuZGF0YSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggMWQyY2I2MjNmOWIxYzIy
MzY1N2VkMGMwMGE0ZGY1NDJjODVjNGFmZC4uYzM0ZWRhZTFhZjdmZWQ4ZDVjODI5YTU0NzJiMTM3
ODIzM2VlNDYyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTM5LDE0
ICszOSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENDTGF5ZXJJbXBsOwor
Y2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIGNsYXNz
IExheWVyVGV4dHVyZTsKIAogY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOwogcHVibGljOgotICAgIGV4
cGxpY2l0IFJlbmRlclN1cmZhY2VDaHJvbWl1bShDQ0xheWVySW1wbCopOworICAgIGV4cGxpY2l0
IFJlbmRlclN1cmZhY2VDaHJvbWl1bShMYXllckNocm9taXVtKik7CiAgICAgflJlbmRlclN1cmZh
Y2VDaHJvbWl1bSgpOwogCiAgICAgYm9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKCk7CkBAIC02
MCw5ICs2MCw2IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgZW5jbG9z
ZXMgdGhlIFJlbmRlclN1cmZhY2UgaW5jbHVkaW5nIGFueSByZWZsZWN0aW9uLgogICAgIEZsb2F0
UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEND
TGF5ZXJJbXBsPiA+JiBsYXllckxpc3QoKSB7IHJldHVybiBtX2xheWVyTGlzdDsgfQotICAgIHZv
aWQgY2xlYXJMYXllckxpc3QoKTsKLQogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQogICAgIHZvaWQgc2V0Q29udGVudFJlY3Qo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIHsgbV9jb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0
OyB9CiAKQEAgLTcyLDkgKzY5LDYgQEAgcHVibGljOgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9
CiAgICAgdm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBk
cmF3VHJhbnNmb3JtKSB7IG1fZHJhd1RyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm07IH0KIAotICAg
IENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllcjsgfQot
ICAgIHZvaWQgc2V0TWFza0xheWVyKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5
ZXIgPSBtYXNrTGF5ZXI7IH0KLQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmln
aW5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX29yaWdpblRyYW5zZm9ybTsgfQogICAgIHZv
aWQgc2V0T3JpZ2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5U
cmFuc2Zvcm0pIHsgbV9vcmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KIApAQCAt
ODcsMjggKzgxLDI2IEBAIHB1YmxpYzoKICAgICBib29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0
dXJuIG1fc2tpcHNEcmF3OyB9CiAgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcp
IHsgbV9za2lwc0RyYXcgPSBza2lwc0RyYXc7IH0KIAotICAgIExheWVyVGV4dHVyZSogY29udGVu
dHNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KKyAg
ICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCkgeyBtX2xheWVyTGlzdC5jbGVhcigpOyB9CisgICAgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QoKSB7IHJldHVybiBtX2xheWVy
TGlzdDsgfQogCi0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgs
IEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtOwotICAgIHR5cGVkZWYgUHJvZ3Jh
bUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYU1h
c2s+IE1hc2tQcm9ncmFtOworICAgIHZvaWQgc2V0TWFza0xheWVyKExheWVyQ2hyb21pdW0qIG1h
c2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQogCiBwcml2YXRlOgogICAgIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpOwotICAgIHZvaWQgZHJhd1N1cmZh
Y2UoQ0NMYXllckltcGwqIG1hc2tMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0pOwogCi0gICAgQ0NMYXllckltcGwqIG1fb3duaW5nTGF5ZXI7Ci0gICAgQ0NM
YXllckltcGwqIG1fbWFza0xheWVyOworICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5nTGF5ZXI7
CisgICAgTGF5ZXJDaHJvbWl1bSogbV9tYXNrTGF5ZXI7CiAKICAgICBJbnRSZWN0IG1fY29udGVu
dFJlY3Q7CiAgICAgYm9vbCBtX3NraXBzRHJhdzsKIAotICAgIE93blB0cjxMYXllclRleHR1cmU+
IG1fY29udGVudHNUZXh0dXJlOwogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fcmVwbGljYURyYXdUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9vcmln
aW5UcmFuc2Zvcm07CiAgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwotICAgIFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4gbV9sYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNo
cm9taXVtPiA+IG1fbGF5ZXJMaXN0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggM2U5ZTZkZDA0OGYyMjE1ZDI4OTQ5MTc1OTM0MWQ3ZTM3NmJjMGQyNy4uMmE4
YzU1MWE4MGEyZDZmMWYyMDI2N2Q4Mjk0MjBlODVmN2NjZGUyMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwCkBAIC02MCw3ICs2MCw3IEBAIFRpbGVkTGF5ZXJDaHJvbWl1bTo6flRp
bGVkTGF5ZXJDaHJvbWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRpbGVkTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1RpbGVkTGF5ZXJJ
bXBsOjpjcmVhdGUodGhpcywgaWQoKSk7CisgICAgcmV0dXJuIENDVGlsZWRMYXllckltcGw6OmNy
ZWF0ZShpZCgpKTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJj
ZXMoKQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRJc01h
c2soYm9vbCBpc01hc2spCiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IFRpbGVkTGF5ZXJDaHJvbWl1
bTo6dGlsaW5nVHJhbnNmb3JtKCkgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm0gPSBjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgaWYgKGNvbnRl
bnRCb3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hy
b25pemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Ry
ZWVTeW5jaHJvbml6ZXIuY3BwCmluZGV4IDZhZDRiMTEyZDJhNGNmN2VmMTE2Y2FmMTNkOTE0ZTM3
YmJhYzcyMDguLmQwZmQwY2U1MjNkNjM4ODRiZTkzMmUxYmQ0MTY1ODJmMjU3NjJlNDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5j
aHJvbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwCkBAIC03NCw4ICs3NCw2IEBAIFBhc3NSZWZQdHI8Q0NM
YXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXll
ckNocm9taXVtCiAgICAgZWxzZQogICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVy
KDApOwogCi0gICAgbGF5ZXItPnNldENDTGF5ZXJJbXBsKGNjTGF5ZXJJbXBsLmdldCgpKTsKLQog
ICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsKICAgICByZXR1
cm4gY2NMYXllckltcGwucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggMmZjZDIxOTM4MmE3MGM1ZDc3MmI2YTZkMTMyNjUxMjU4MWUwMTg2ZC4uMjJiZDMw
Yzc4ZDQ2ODcyYThiMjdhMGJlOGQxZThhMzY0ZGY5YjI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uY3BwCkBAIC02OSw3ICs2OSw3IEBAIFZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVv
TGF5ZXJDaHJvbWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFZpZGVvTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1ZpZGVvTGF5ZXJJbXBs
OjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKKyAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6
Y3JlYXRlKG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkZWxldGVU
ZXh0dXJlc0luVXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAppbmRleCA3
MTI1Yjk2ODA3YjQwZmMzNGViMWM4NGU3YTlkOTgzMTc1YTE4M2ViLi44NjVmZDcyNGU1ZDg2YjI1
YTM0N2QwNGM0MTgzOGM0YzVmYzA5OTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllcklt
cGwuY3BwCkBAIC0yOSwxNSArMjksMTQgQEAKIAogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmgiCiAKLSNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1D
Q0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIs
IGludCBpZCkKLSAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKK0NDQ2FudmFzTGF5ZXJJbXBs
OjpDQ0NhbnZhc0xheWVySW1wbChpbnQgaWQpCisgICAgOiBDQ0xheWVySW1wbChpZCkKICAgICAs
IG1fdGV4dHVyZUlkKDApCiAgICAgLCBtX2hhc0FscGhhKHRydWUpCiAgICAgLCBtX3ByZW11bHRp
cGxpZWRBbHBoYSh0cnVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggYzE3
YWY1ZmM3ZWJjZTI1MGEzNmMzNmI4Y2U1ODExOTBlZTkxM2E5Ny4uZDg1ZWJhOGRlODgzYWJlN2Uw
ZTA5ZTU3ZTQwMDFmZjBmNmM0ZmE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5o
CkBAIC0zNCw5ICszNCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NDYW52YXNM
YXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDQ2FudmFzTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGlu
dCBpZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NhbnZhc0xheWVySW1wbD4gY3JlYXRlKGlu
dCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllcklt
cGwob3duZXIsIGlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXll
ckltcGwoaWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NDYW52YXNMYXllckltcGwoKTsKIApA
QCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0Fs
cGhhKSB7IG1faGFzQWxwaGEgPSBoYXNBbHBoYTsgfQogICAgIHZvaWQgc2V0UHJlbXVsdGlwbGll
ZEFscGhhKGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0g
cHJlbXVsdGlwbGllZEFscGhhOyB9CiBwcml2YXRlOgotICAgIENDQ2FudmFzTGF5ZXJJbXBsKExh
eWVyQ2hyb21pdW0qLCBpbnQpOworICAgIGV4cGxpY2l0IENDQ2FudmFzTGF5ZXJJbXBsKGludCk7
CiAKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKICAgICBib29sIG1faGFzQWxwaGE7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKaW5kZXggMjRlOWI1ZjllZjBkMjA3OGI0YjFiN2UzZDhmNjg0MTgw
MjY5NTJiMC4uZmFiNTMxNjgwYjVmODc1ODEyYmJkNDgwMzE1YmZiYTNmNjQwZmIwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgewpAQCAtNjAsOSAr
NTksOCBAQCB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NMYXll
ckltcGw6OkNDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCi0gICAgOiBt
X293bmVyKG93bmVyKQotICAgICwgbV9wYXJlbnQoMCkKK0NDTGF5ZXJJbXBsOjpDQ0xheWVySW1w
bChpbnQgaWQpCisgICAgOiBtX3BhcmVudCgwKQogICAgICwgbV9sYXllcklkKGlkKQogICAgICwg
bV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCkBAIC04Myw4
ICs4MSw2IEBAIENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwg
aW50IGlkKQogCiBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKIHsKLSAgICBpZiAobV9vd25l
cikKLSAgICAgICAgbV9vd25lci0+c2V0Q0NMYXllckltcGwoMCk7CiB9CiAKIHZvaWQgQ0NMYXll
ckltcGw6OmFkZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkKQpAQCAtMTIyLDEw
ICsxMTgsMTAgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRl
cmVyQ2hyb21pdW0qIHJlbmRlcmVyKQogICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRlcmVyOwog
fQogCi1SZW5kZXJTdXJmYWNlQ2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJm
YWNlKCkKK3ZvaWQgQ0NMYXllckltcGw6OmNyZWF0ZVJlbmRlclN1cmZhY2UoKQogewotICAgIG1f
cmVuZGVyU3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW0odGhpcykp
OwotICAgIHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7CisgICAgQVNTRVJUKCFtX3JlbmRl
clN1cmZhY2UpOworICAgIG1fcmVuZGVyU3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1
cmZhY2UodGhpcykpOwogfQogCiBib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29u
dGVudCgpCkBAIC0xNDIsMTkgKzEzOCw4IEBAIHZvaWQgQ0NMYXllckltcGw6OmRyYXcoKQogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKCkKLXsKLSAgICBtX293bmVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKCk7Ci19Ci0KLXZvaWQgQ0NMYXllckltcGw6OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgp
Ci17Ci0gICAgbV9vd25lci0+dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7Ci19Ci0KIHZvaWQg
Q0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoKQogewotICAgIG1fb3duZXItPmJpbmRD
b250ZW50c1RleHR1cmUoKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6Y2xlYW51cFJlc291cmNl
cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCBiZDI3NmZlODA5MDc2NzE2YTY4ZDA5Njc3Y2Ri
MWI1YTY0ZjkwZmUzLi43YzVmMzYzNjY2NGIwYjcyZmJlZDViZThhMzY2NDY2Njg3ODJjMmRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KQEAgLTQwLDEzICs0MSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IExheWVyQ2hyb21pdW07CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07Ci1jbGFzcyBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW07CiAKIGNsYXNzIENDTGF5ZXJJbXBsIDogcHVibGljIFJlZkNvdW50
ZWQ8Q0NMYXllckltcGw+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKGlkKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfkNDTGF5
ZXJJbXBsKCk7CiAKQEAgLTcwLDcgKzcwLDYgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2aXJ0
dWFsIHZvaWQgZHJhdygpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKCk7CiAgICAgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKICAgICB2aXJ0dWFs
IHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOwogCkBAIC0xMjQsOSArMTIzLDggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKICAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KIAotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogY3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOwotCi0gICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJT
dXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9CisgICAgQ0NS
ZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJm
YWNlLmdldCgpOyB9CisgICAgdm9pZCBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAgICAgdm9pZCBj
bGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFjZS5jbGVhcigpOyB9CiAKICAgICBm
bG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KQEAgLTEz
NCw5ICsxMzIsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KICAgICB2b2lkIHNldFNjaXNzb3JSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KLQotICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQotICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFj
ZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNl
ID0gc3VyZmFjZTsgfQorICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQorICAgIHZvaWQgc2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5k
ZXJTdXJmYWNlID0gc3VyZmFjZTsgfQogCiAgICAgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29u
c3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJbnRTaXpl
JiBib3VuZHMpIHsgbV9ib3VuZHMgPSBib3VuZHM7IH0KQEAgLTE2MCwxNSArMTU3LDggQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYs
IGludCBpbmRlbnQpIGNvbnN0OwogCi0gICAgLy8gSEFDSyBUT0RPIGZpeCB0aGlzCi0gICAgTGF5
ZXJDaHJvbWl1bSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9Ci0gICAgdm9pZCBj
bGVhck93bmVyKCkgeyBtX293bmVyID0gMDsgfQotCiBwcm90ZWN0ZWQ6Ci0gICAgLy8gRm9yIG5v
dywgQ0NMYXllckltcGxzIGhhdmUgYSBiYWNrIHBvaW50ZXIgdG8gdGhlaXIgTGF5ZXJDaHJvbWl1
bS4KLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4ODMzIGlzIGZpeGVkLgotICAgIExheWVyQ2hyb21pdW0qIG1f
b3duZXI7Ci0gICAgQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CisgICAgZXhwbGlj
aXQgQ0NMYXllckltcGwoaW50KTsKIAogICAgIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRT
dHJlYW0mLCBpbnQgaW5kZW50KTsKIApAQCAtMjE2LDcgKzIwNiw3IEBAIHByaXZhdGU6CiAgICAg
Ly8gZWl0aGVyIHRvIHRoaXMgbGF5ZXIgKGlmIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9PSBtX3Jl
bmRlclN1cmZhY2UpIG9yCiAgICAgLy8gdG8gYW4gYW5jZXN0b3Igb2YgdGhpcyBsYXllci4gVGhl
IHRhcmdldCByZW5kZXIgc3VyZmFjZSBkZXRlcm1pbmVzIHRoZQogICAgIC8vIGNvb3JkaW5hdGUg
c3lzdGVtIHRoZSBsYXllcidzIHRyYW5zZm9ybXMgYXJlIHJlbGF0aXZlIHRvLgotICAgIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOworICAgIENDUmVuZGVyU3Vy
ZmFjZSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogCiAgICAgLy8gVGhlIGdsb2JhbCBkZXB0aCB2
YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4gVGhpcyB2YWx1ZSBpcyB1c2VkCiAgICAg
Ly8gdG8gc29ydCBsYXllcnMgZnJvbSBiYWNrIHRvIGZyb250LgpAQCAtMjM2LDcgKzIyNiw3IEBA
IHByaXZhdGU6CiAKICAgICAvLyBSZW5kZXIgc3VyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBs
YXllci4gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMKICAgICAvLyB3aWxsIHJlbmRlciB0
byB0aGlzIHN1cmZhY2UuCi0gICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bT4gbV9yZW5k
ZXJTdXJmYWNlOworICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U+IG1fcmVuZGVyU3VyZmFjZTsK
IAogICAgIC8vIEhpZXJhcmNoaWNhbCBib3VuZGluZyByZWN0IGNvbnRhaW5pbmcgdGhlIGxheWVy
IGFuZCBpdHMgZGVzY2VuZGFudHMuCiAgICAgSW50UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyU29ydGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCmluZGV4IGIyYzU1NzQyZjc5ZjhkM2I1NzQxYmVj
N2U1ODhlN2Q4YjFjYTI3ZDMuLmQxMDFjYzA3YTE0YzI5MzE4YmVlMDMwODU5MWQzNTQyYmJhOTg5
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCkBAIC0yNiw4ICsyNiw4IEBACiAKICNp
bmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAKLSNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNj
L0NDUmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgQ0NMYXllclNvcnRlcjo6Y3JlYXRlR3Jh
cGhOb2RlcyhMYXllckxpc3Q6Oml0ZXJhdG9yIGZpcnN0LCBMYXllckxpc3Q6Oml0ZXJhCiAgICAg
Zm9yIChMYXllckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmlyc3Q7IGl0IDwgbGFzdDsgaXQr
KykgewogICAgICAgICBtX25vZGVzLmFwcGVuZChHcmFwaE5vZGUoaXQtPmdldCgpKSk7CiAgICAg
ICAgIEdyYXBoTm9kZSYgbm9kZSA9IG1fbm9kZXMuYXQobV9ub2Rlcy5zaXplKCkgLSAxKTsKLSAg
ICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbm9kZS5sYXllci0+
cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2Ug
PSBub2RlLmxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgIGlmICghbm9kZS5sYXllci0+
ZHJhd3NDb250ZW50KCkgJiYgIXJlbmRlclN1cmZhY2UpCiAgICAgICAgICAgICBjb250aW51ZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQbHVnaW5MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCmluZGV4IGRlZTFlZjBiN2U2YTJk
ZGFkMzc1Zjg5MWY5ZGUwNTY1OWQyODZjMjEuLjhhMjVjNWI1NDFlMmUzNDUwYjkzZjhkMWZmY2Q2
MjJjYjI0NzZiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKQEAgLTMx
LDEzICszMSwxMiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVt
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0q
IG93bmVyLCBpbnQgaWQpCi0gICAgOiBDQ0xheWVySW1wbChvd25lciwgaWQpCitDQ1BsdWdpbkxh
eWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwoaW50IGlkKQorICAgIDogQ0NMYXllckltcGwoaWQp
CiAgICAgLCBtX3RleHR1cmVJZCgwKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBs
LmgKaW5kZXggNmU0ODJkMTQ2NGIwZjhlNzg5MjA2MTc1ZDIxMjAzYTg5ZTA4ZDI3My4uOWI0YzUz
NjcyM2QyYWIxNmRkZDQyOTA2M2RjN2ZmNWI0ZjFkMTI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdp
bkxheWVySW1wbC5oCkBAIC0zNCw5ICszNCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ0NQbHVnaW5MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENDUGx1Z2luTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1
bSogb3duZXIsIGludCBpZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1BsdWdpbkxheWVySW1w
bD4gY3JlYXRlKGludCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NQ
bHVnaW5MYXllckltcGwob3duZXIsIGlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q0NQbHVnaW5MYXllckltcGwoaWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NQbHVnaW5MYXll
ckltcGwoKTsKIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0dXJl
SWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsgfQogCiBwcml2YXRlOgotICAgIEND
UGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOworICAgIGV4cGxpY2l0IENDUGx1
Z2luTGF5ZXJJbXBsKGludCk7CiAKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmZhZjcyMzA3YTkyYWVjMzkw
MTIyMWQ1NGVmMGZmNzY2NzYzYWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMCww
ICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkNDUmVuZGVyU3VyZmFjZS5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisj
aW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJUZXh0dXJl
LmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0NDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBvd25pbmdMYXll
cikKKyAgICA6IG1fb3duaW5nTGF5ZXIob3duaW5nTGF5ZXIpCisgICAgLCBtX21hc2tMYXllcigw
KQorICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCisgICAgLCBtX2RyYXdPcGFjaXR5KDEpCit7Cit9
CisKK0NDUmVuZGVyU3VyZmFjZTo6fkNDUmVuZGVyU3VyZmFjZSgpCit7CisgICAgY2xlYW51cFJl
c291cmNlcygpOworfQorCit2b2lkIENDUmVuZGVyU3VyZmFjZTo6Y2xlYW51cFJlc291cmNlcygp
Cit7CisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisKKyAgICBtX2NvbnRlbnRzVGV4dHVyZS5jbGVhcigp
OworfQorCitMYXllclJlbmRlcmVyQ2hyb21pdW0qIENDUmVuZGVyU3VyZmFjZTo6bGF5ZXJSZW5k
ZXJlcigpCit7CisgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIpOworICAgIHJldHVybiBtX293bmlu
Z0xheWVyLT5sYXllclJlbmRlcmVyKCk7Cit9CisKK0Zsb2F0UmVjdCBDQ1JlbmRlclN1cmZhY2U6
OmRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBsb2NhbENvbnRl
bnRSZWN0KC0wLjUgKiBtX2NvbnRlbnRSZWN0LndpZHRoKCksIC0wLjUgKiBtX2NvbnRlbnRSZWN0
LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29udGVudFJlY3Qu
d2lkdGgoKSwgbV9jb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgRmxvYXRSZWN0IGRyYXdhYmxl
Q29udGVudFJlY3QgPSBtX2RyYXdUcmFuc2Zvcm0ubWFwUmVjdChsb2NhbENvbnRlbnRSZWN0KTsK
KyAgICBpZiAobV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIGRyYXdhYmxl
Q29udGVudFJlY3QudW5pdGUobV9yZXBsaWNhRHJhd1RyYW5zZm9ybS5tYXBSZWN0KGxvY2FsQ29u
dGVudFJlY3QpKTsKKworICAgIHJldHVybiBkcmF3YWJsZUNvbnRlbnRSZWN0OworfQorCitib29s
IENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSgpCit7CisgICAgSW50U2l6
ZSByZXF1aXJlZFNpemUobV9jb250ZW50UmVjdC5zaXplKCkpOworICAgIFRleHR1cmVNYW5hZ2Vy
KiB0ZXh0dXJlTWFuYWdlciA9IGxheWVyUmVuZGVyZXIoKS0+cmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyKCk7CisKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQorICAgICAgICBtX2NvbnRl
bnRzVGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4
dCgpLCB0ZXh0dXJlTWFuYWdlcik7CisKKyAgICBpZiAobV9jb250ZW50c1RleHR1cmUtPmlzUmVz
ZXJ2ZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIW1fY29udGVudHNUZXh0
dXJlLT5yZXNlcnZlKHJlcXVpcmVkU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7Cisg
ICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
Q0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlKCkKK3sKKyAgICBpZiAobV9z
a2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQorICAgICAgICByZXR1cm47CisgICAgbV9j
b250ZW50c1RleHR1cmUtPnVucmVzZXJ2ZSgpOworfQorCisKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNl
OjpkcmF3U3VyZmFjZShDQ0xheWVySW1wbCogbWFza0xheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dDNEID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisKKyAgICBpbnQgc2hhZGVyTWF0cml4
TG9jYXRpb24gPSAtMTsKKyAgICBpbnQgc2hhZGVyQWxwaGFMb2NhdGlvbiA9IC0xOworICAgIGNv
bnN0IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+
cmVuZGVyU3VyZmFjZVByb2dyYW0oKTsKKyAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQ
cm9ncmFtKiBtYXNrUHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+cmVuZGVyU3VyZmFjZU1hc2tQ
cm9ncmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7
CisgICAgYm9vbCB1c2VNYXNrID0gZmFsc2U7CisgICAgaWYgKG1hc2tMYXllciAmJiBtYXNrTGF5
ZXItPmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIGlmICghbWFza0xheWVyLT5ib3VuZHMoKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQzRC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPnVzZVByb2dyYW0obWFza1By
b2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNE
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgICAgICAg
ICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3JtMWkobWFza1Byb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKyAgICAgICAgICAgIG1fY29udGVu
dHNUZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29u
dGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOworICAg
ICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3JtMWkobWFza1Byb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCkubWFza1NhbXBsZXJMb2NhdGlvbigpLCAxKSk7CisgICAgICAgICAg
ICBtYXNrTGF5ZXItPmJpbmRDb250ZW50c1RleHR1cmUoKTsKKyAgICAgICAgICAgIEdMQyhjb250
ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKKyAgICAgICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gbWFza1Byb2dyYW0tPnZl
cnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAgICAgICBzaGFkZXJBbHBoYUxv
Y2F0aW9uID0gbWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOwor
ICAgICAgICAgICAgdXNlTWFzayA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IXVzZU1hc2spIHsKKyAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51c2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+YmluZFRl
eHR1cmUoKTsKKyAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3JtMWkocHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgICAgICBz
aGFkZXJNYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0
aW9uKCk7CisgICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLmFscGhhTG9jYXRpb24oKTsKKyAgICB9CisKKyAgICBMYXllckNocm9taXVtOjpkcmF3
VGV4dHVyZWRRdWFkKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyKCkt
PnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NvbnRlbnRSZWN0LndpZHRoKCksIG1fY29udGVudFJlY3Qu
aGVpZ2h0KCksIG1fZHJhd09wYWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24sIHNoYWRlckFscGhhTG9jYXRpb24pOworfQor
Cit2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhdyhjb25zdCBJbnRSZWN0JikKK3sKKyAgICBpZiAo
bV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQorICAgICAgICByZXR1cm47CisgICAg
Ly8gRklYTUU6IEJ5IHVzaW5nIHRoZSBzYW1lIFJlbmRlclN1cmZhY2UgZm9yIGJvdGggdGhlIGNv
bnRlbnQgYW5kIGl0cyByZWZsZWN0aW9uLAorICAgIC8vIGl0J3MgY3VycmVudGx5IG5vdCBwb3Nz
aWJsZSB0byBhcHBseSBhIHNlcGFyYXRlIG1hc2sgdG8gdGhlIHJlZmxlY3Rpb24gbGF5ZXIKKyAg
ICAvLyBvciBjb3JyZWN0bHkgaGFuZGxlIG9wYWNpdHkgaW4gcmVmbGVjdGlvbnMgKG9wYWNpdHkg
bXVzdCBiZSBhcHBsaWVkIGFmdGVyIGRyYXdpbmcKKyAgICAvLyBib3RoIHRoZSBsYXllciBhbmQg
aXRzIHJlZmxlY3Rpb24pLiBUaGUgc29sdXRpb24gaXMgdG8gaW50cm9kdWNlIHlldCBhbm90aGVy
IFJlbmRlclN1cmZhY2UKKyAgICAvLyB0byBkcmF3IHRoZSBsYXllciBhbmQgaXRzIHJlZmxlY3Rp
b24gaW4uIEZvciBub3cgd2Ugb25seSBhcHBseSBhIHNlcGFyYXRlIHJlZmxlY3Rpb24KKyAgICAv
LyBtYXNrIGlmIHRoZSBjb250ZW50cyBkb24ndCBoYXZlIGEgbWFzayBvZiB0aGVpciBvd24uCisg
ICAgQ0NMYXllckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX21hc2tMYXllcjsKKyAgICBpZiAo
IW1fbWFza0xheWVyICYmIG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICBy
ZXBsaWNhTWFza0xheWVyID0gbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXll
cigpOworCisgICAgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXIt
PnBhcmVudCgpLT51c2VzTGF5ZXJTY2lzc29yKCkpCisgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+
c2V0U2Npc3NvclRvUmVjdChtX3NjaXNzb3JSZWN0KTsKKyAgICBlbHNlCisgICAgICAgIEdMQyhs
YXllclJlbmRlcmVyKCktPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCktPmRp
c2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOworCisgICAgLy8gUmVmbGVj
dGlvbiBkcmF3cyBiZWZvcmUgdGhlIGxheWVyLgorICAgIGlmIChtX293bmluZ0xheWVyLT5yZXBs
aWNhTGF5ZXIoKSkKKyAgICAgICAgZHJhd1N1cmZhY2UocmVwbGljYU1hc2tMYXllciwgbV9yZXBs
aWNhRHJhd1RyYW5zZm9ybSk7CisKKyAgICBkcmF3U3VyZmFjZShtX21hc2tMYXllciwgbV9kcmF3
VHJhbnNmb3JtKTsKK30KKworU3RyaW5nIENDUmVuZGVyU3VyZmFjZTo6bmFtZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJTdXJmYWNlKGlkPSVpLG93bmVyPSVz
KSIsIG1fb3duaW5nTGF5ZXItPmlkKCksIG1fb3duaW5nTGF5ZXItPm5hbWUoKS51dGY4KCkuZGF0
YSgpKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBp
bmRlbnQpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaW5kZW50OyArK2kpCisgICAgICAg
IHRzIDw8ICIgICI7Cit9CisKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkdW1wU3VyZmFjZShUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5k
ZW50KTsKKyAgICB0cyA8PCBuYW1lKCkgPDwgIlxuIjsKKworICAgIHdyaXRlSW5kZW50KHRzLCBp
bmRlbnQrMSk7CisgICAgdHMgPDwgImNvbnRlbnRSZWN0OiAoIiA8PCBtX2NvbnRlbnRSZWN0Lngo
KSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3QueSgpIDw8ICIsICIgPDwgbV9jb250ZW50UmVjdC53
aWR0aCgpIDw8ICIsICIgPDwgbV9jb250ZW50UmVjdC5oZWlnaHQoKSA8PCAiXG4iOworfQorCitp
bnQgQ0NSZW5kZXJTdXJmYWNlOjpvd25pbmdMYXllcklkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9vd25pbmdMYXllciA/IG1fb3duaW5nTGF5ZXItPmlkKCkgOiAwOworfQorCit9CisjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYWIxODkxODUxZmYwODJmOGZlYjQyNTkxZGFlYjI0NzI4ODg5ZTU1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5k
ZWYgQ0NSZW5kZXJTdXJmYWNlX2gKKyNkZWZpbmUgQ0NSZW5kZXJTdXJmYWNlX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgorI2luY2x1ZGUg
IlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOworY2xhc3MgTGF5ZXJUZXh0dXJlOworCitjbGFzcyBDQ1JlbmRlclN1
cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyU3VyZmFjZSk7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgQ0NSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKik7CisgICAgfkND
UmVuZGVyU3VyZmFjZSgpOworCisgICAgYm9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKCk7Cisg
ICAgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAgdm9pZCBjbGVhbnVwUmVzb3Vy
Y2VzKCk7CisgICAgdm9pZCBkcmF3KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KTsK
KworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgdm9pZCBkdW1wU3VyZmFjZShUZXh0U3Ry
ZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICBGbG9hdFBvaW50IGNvbnRlbnRSZWN0Q2Vu
dGVyKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KG1fY29udGVudFJlY3QpLmNlbnRlcigpOyB9
CisKKyAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIFJlbmRlclN1cmZh
Y2UgaW5jbHVkaW5nIGFueSByZWZsZWN0aW9uLgorICAgIEZsb2F0UmVjdCBkcmF3YWJsZUNvbnRl
bnRSZWN0KCkgY29uc3Q7CisKKyAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHJhd09wYWNpdHk7IH0KKyAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KKworICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgeyBtX2RyYXdUcmFu
c2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KKworICAg
IHZvaWQgc2V0UmVwbGljYURyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHJlcGxpY2FEcmF3VHJhbnNmb3JtKSB7IG1fcmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZXBsaWNh
RHJhd1RyYW5zZm9ybTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNh
RHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYURyYXdUcmFuc2Zvcm07IH0K
KworICAgIHZvaWQgc2V0T3JpZ2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBvcmlnaW5UcmFuc2Zvcm0pIHsgbV9vcmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zvcm07
IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV9vcmlnaW5UcmFuc2Zvcm07IH0KKworICAgIHZvaWQgc2V0U2Npc3NvclJl
Y3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHNjaXNzb3JS
ZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBt
X3NjaXNzb3JSZWN0OyB9CisKKyAgICB2b2lkIHNldENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KSB7IG1fY29udGVudFJlY3QgPSBjb250ZW50UmVjdDsgfQorICAgIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQor
CisgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lwc0RyYXcgPSBz
a2lwc0RyYXc7IH0KKyAgICBib29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHNE
cmF3OyB9CisKKyAgICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCkgeyBtX2xheWVyTGlzdC5jbGVhcigp
OyB9CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0KCkgeyByZXR1
cm4gbV9sYXllckxpc3Q7IH0KKworICAgIHZvaWQgc2V0TWFza0xheWVyKENDTGF5ZXJJbXBsKiBt
YXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IH0KKworICAgIHR5cGVkZWYgUHJv
Z3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBo
YT4gUHJvZ3JhbTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1Rl
eCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrPiBNYXNrUHJvZ3JhbTsKKworICAgIExh
eWVyVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1Rl
eHR1cmUuZ2V0KCk7IH0KKworICAgIGludCBvd25pbmdMYXllcklkKCkgY29uc3Q7Citwcml2YXRl
OgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpOworICAgIHZvaWQg
ZHJhd1N1cmZhY2UoQ0NMYXllckltcGwqIG1hc2tMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdUcmFuc2Zvcm0pOworCisgICAgQ0NMYXllckltcGwqIG1fb3duaW5nTGF5ZXI7
CisgICAgQ0NMYXllckltcGwqIG1fbWFza0xheWVyOworCisgICAgSW50UmVjdCBtX2NvbnRlbnRS
ZWN0OworICAgIGJvb2wgbV9za2lwc0RyYXc7CisKKyAgICBPd25QdHI8TGF5ZXJUZXh0dXJlPiBt
X2NvbnRlbnRzVGV4dHVyZTsKKyAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X3JlcGxpY2FEcmF3VHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fb3JpZ2lu
VHJhbnNmb3JtOworICAgIEludFJlY3QgbV9zY2lzc29yUmVjdDsKKyAgICBWZWN0b3I8UmVmUHRy
PENDTGF5ZXJJbXBsPiA+IG1fbGF5ZXJMaXN0OworfTsKKworfQorI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllcklt
cGwuY3BwCmluZGV4IDgwM2JhMDZkNTYxOTdkMjhhYWU1NWE3OGM1YmNkMTFlMTI0NzdiNWUuLmZj
MTAzZWFkY2FiMmU5ZmEzYTAwNjc0ZWZjYmRkM2IwZGRkMTU4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuY3BwCkBAIC0yOSwxNiArMjksMTQgQEAKIAogI2luY2x1ZGUgImNjL0ND
VGlsZWRMYXllckltcGwuaCIKIAotI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCi0K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBMYXllclRleHR1cmU7CiAKLUNDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllcklt
cGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKLSAgICA6IENDTGF5ZXJJbXBsKG93bmVy
LCBpZCkKK0NDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwoaW50IGlkKQorICAgIDog
Q0NMYXllckltcGwoaWQpCiAgICAgLCBtX3RpbGVyKDApCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmgKaW5kZXggYjBkMTAzMWZiYjdiOGY4MGY0NzhhYzgxM2M4ZjI3MjlkYzg5YTkx
NS4uNzM0NmJiN2U3ZDZmYTZiYzhjYTFlYmNmMjljYzU4NDlmMWVmNjNhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuaApAQCAtMzMsOSArMzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENDVGlsZWRMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVGlsZWRMYXllckltcGw+IGNyZWF0ZShMYXllckNo
cm9taXVtKiBvd25lciwgaW50IGlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVGlsZWRMYXll
ckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENDVGlsZWRMYXllckltcGwob3duZXIsIGlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ0NUaWxlZExheWVySW1wbChpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1RpbGVkTGF5
ZXJJbXBsKCk7CiAKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGlsZXIo
TGF5ZXJUaWxlckNocm9taXVtKiB0aWxlcikgeyBtX3RpbGVyID0gdGlsZXI7IH0KIAogcHJpdmF0
ZToKLSAgICBDQ1RpbGVkTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQgaWQpOworICAgIGV4
cGxpY2l0IENDVGlsZWRMYXllckltcGwoaW50IGlkKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1fdGlsaW5nVHJhbnNmb3JtOwogICAgIExheWVyVGlsZXJDaHJvbWl1bSogbV90aWxlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggZjQ0YWJiMDYxMWRlYzdjZjgx
NjAxNzg4YzljNDU1YmI1ZTk3OGE5YS4uMGM5MzkzMjE4YmYzNDQ0YmNiYWRiMWRjODI4NzM0Mjc3
NDIwNGMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTU5LDggKzU5
LDggQEAgY29uc3QgZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0WzNdID0gewogICAg
IC0wLjVmLAogfTsKIAotQ0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChMYXllckNo
cm9taXVtKiBvd25lciwgaW50IGlkKQotICAgIDogQ0NMYXllckltcGwob3duZXIsIGlkKQorQ0NW
aWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChpbnQgaWQpCisgICAgOiBDQ0xheWVySW1w
bChpZCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCmluZGV4IGZjMDdmNzcy
ZTYxOGM4OWM4ZTI0NGNhZmM1NThjMzdlOTljZWJiNmYuLmVlOWQ0MjE2OTNhOWQxNzc3OTg0ZThi
YjA2NzY2YTM2MDRlNTBjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTM4
LDkgKzM4LDkgQEAgY2xhc3MgVmlkZW9GcmFtZVByb3ZpZGVyOwogCiBjbGFzcyBDQ1ZpZGVvTGF5
ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBp
ZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlk
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKG93
bmVyLCBpZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDVmlkZW9MYXllckltcGwo
aWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NWaWRlb0xheWVySW1wbCgpOwogCkBAIC01Niw3
ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHR1cmUoc2l6ZV90LCBWaWRlb0xheWVy
Q2hyb21pdW06OlRleHR1cmUpOwogCiBwcml2YXRlOgotICAgIENDVmlkZW9MYXllckltcGwoTGF5
ZXJDaHJvbWl1bSosIGludCk7CisgICAgZXhwbGljaXQgQ0NWaWRlb0xheWVySW1wbChpbnQpOwog
CiAgICAgdm9pZCBkcmF3WVVWKGNvbnN0IFlVVlByb2dyYW0qKSBjb25zdDsKICAgICB2b2lkIGRy
YXdSR0JBKGNvbnN0IFJHQkFQcm9ncmFtKikgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102372</attachid>
            <date>2011-07-29 10:09:51 -0700</date>
            <delta_ts>2011-07-29 18:33:32 -0700</delta_ts>
            <desc>compile fixes</desc>
            <filename>bug-58840-20110729101011.patch</filename>
            <type>text/plain</type>
            <size>111200</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE5NzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ZDMwNWExYmZiZTVlOGJl
NTRiZWQ2ZjBjODMzMTM1MmVhNjAxODYwLi44ZTUwYWViNzNmMzY0ZWE0OTUwNjQzMDAwYzFjOTZk
ODMyMzE1NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ4IEBACisyMDExLTA3LTI4ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBE
ZWNvdXBsZSBsYXllciB2aXNpYmlsaXR5IGNhbGN1bGF0aW9ucyBmcm9tIHJlbmRlciBzdXJmYWNl
cyAvIGNvbXB1dGVkIGRyYXcgdHJhbnNmb3JtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4NDAKKworICAgICAgICBUaGlzIGRlY291cGxlcyB0aGUg
bGF5ZXIgdmlzaWJpbGl0eSByZWxhdGVkIGNhbGN1bGF0aW9ucyBmcm9tIHRoZSBMYXllckNocm9t
aXVtIGFuZCBDQ0xheWVySW1wbCB0cmVlcy4gIFRoaXMgaXMKKyAgICAgICAgZG9uZSBieSBtYWtp
bmcgTGF5ZXJSZW5kZXJlckNocm9taXVtJ3MgImNhbGN1bGF0ZSB0aGUgd29ybGQiIGZ1bmN0aW9u
IChyZW5hbWVkCisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSgp
KSBhIHRlbXBsYXRlZCwgZnJlZSBmdW5jdGlvbiB0aGF0IGNhbiBvcGVyYXRlIG9uIGVpdGhlciBM
YXllckNocm9taXVtICsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtIHBhaXJzIG9yIG9u
IENDTGF5ZXJJbXBsICsgQ0NSZW5kZXJTdXJmYWNlIHBhaXJzIGFuZCBpbnZva2luZyBpdCB0d2lj
ZSwgb25jZSBiZWZvcmUKKyAgICAgICAgcGFpbnRpbmcgYW5kIG9uY2UgYmVmb3JlIGRyYXdpbmcu
ICBCZWZvcmUgcGFpbnRpbmcsIHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgdXNlZCB0byBkZXRlcm1p
bmUgd2hpY2ggbGF5ZXJzIGFyZQorICAgICAgICBwb3RlbnRpYWxseSB2aXNpYmxlIGFuZCBzaG91
bGQgYmUgcGFpbnRlZCwgd2hpY2ggZGVwZW5kcyBvbiB0aGUgY2FsY3VsYXRlZCBvcGFjaXR5LCBy
ZW5kZXIgc3VyZmFjZSBib3VuZHMsIGFuZAorICAgICAgICBkcmF3IHRyYW5zZm9ybXMuICBCZWZv
cmUgZHJhd2luZywgdGhlc2UgY2FsY3VsYXRpb25zIGFyZSB1c2VkIHRvIGZpZ3VyZSBvdXQgZXZl
cnl0aGluZyBuZWVkZWQgdG8gZHJhdy4KKworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0g
aXMgbm93IHVzZWQganVzdCBmb3IgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMgd2hlbiBwYWludGlu
Zy4gIENDUmVuZGVyU3VyZmFjZUNocm9taXVtIGlzCisgICAgICAgIHJlc3BvbnNpYmxlIGZvciBh
Y3R1YWxseSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZXMuCisKKyAgICAgICAgVGhpcyBkb2Vz
IG1lYW4gdGhhdCBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGUgc2Vjb25kIGNhbGN1
bGF0aW9ucyBhcmUgcmVkdW5kYW50LCBidXQgaW4gdGhlIGZ1dHVyZSB0aGlzCisgICAgICAgIHdv
bid0IGJlIHRoZSBjYXNlIHNpbmNlIHRoZSBwcmUtZHJhdyB0aW1lIGNhbGN1bGF0aW9ucyBtaWdo
dCBiZSBpbmZsdWVuY2VkIGJ5IGFuaW1hdGlvbnMgb3IgZ2VzdHVyZXMuICBJJ3ZlCisgICAgICAg
IGFkZGVkIHNvbWUgdHJhY2VzIHRvIHRyeSB0byBtb25pdG9yIGlmIHRoaXMgbWF0aCBpcyBhIHNp
Z25pZmljYW50IGFtb3VudCBvZiB0aGUgcGVyLWZyYW1lIGNvbXB1dGF0aW9uLiAgTm90ZQorICAg
ICAgICB0aGF0IGxheWVyIHNvcnRpbmcgb25seSBoYXBwZW5zIG9uIHRoZSBDQ0xheWVySW1wbCB0
cmVlIGFuZCB0aGUgbGF5ZXIgc29ydCBhbGdvcml0aG0gaXMgdGhlIG1vc3QgZXhwZW5zaXZlIHBh
cnQKKyAgICAgICAgb2YgdGhlIGNhbGN1bGF0aW9ucyBjdXJyZW50bHkuCisKKyAgICAgICAgVGhp
cyByZW1vdmVzIGFsbCBvZiB0aGUgd2VhayBiYWNrL2ZvcndhcmQgcG9pbnRlcnMgYmV0d2VlbiBM
YXllckNocm9taXVtIGFuZCBDQ0xheWVySW1wbHMsIHRoZSB0cmVlcyBhcmUgbm93CisgICAgICAg
IHRydWx5IGRlY291cGxlZC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGNvbXBvc2l0aW5nLyB0ZXN0
cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJD
aHJvbWl1bTo6fkxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlQ0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpk
ZXNjZW5kYW50c0RyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6
c2V0VXNlc0xheWVyU2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1
c2VzTGF5ZXJTY2lzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFy
UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZW5kZXJT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdPcGFjaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldERyYXdPcGFjaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyQ2hyb21pdW06OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06OnRhcmdldFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckNocm9taXVtOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnNldERyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1
bTo6ZHJhd2FibGVDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXREcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbXBvc2l0ZU9m
ZnNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9m
ZnNjcmVlbkxheWVyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVzZVJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2Vz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNy
ZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9S
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFj
ZUNocm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3VyZmFjZUNocm9taXVtOjp+UmVuZGVyU3VyZmFjZUNocm9taXVtKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclN1cmZhY2VDaHJvbWl1bTo6Y2xlYXJMYXllckxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpsYXllckxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpzZXRNYXNrTGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3JtKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJl
Y3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlQ0NMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJ
bXBsOjpDQ0NhbnZhc0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFz
TGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xh
eWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6cmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6
dGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0
VGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclNvcnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVy
OjpjcmVhdGVHcmFwaE5vZGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxh
eWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1Bs
dWdpbkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpDQ1JlbmRlclN1cmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjp+Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJTdXJmYWNlOjpkcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkcmF3U3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlclN1cmZhY2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlSW5kZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6ZHVtcFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJTdXJmYWNlOjpvd25pbmdMYXllcklkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVt
LmguCisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNvbnRlbnRSZWN0Q2VudGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6ZHJhd09wYWNpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzZXREcmF3T3BhY2l0eSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldERyYXdUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0UmVwbGljYURyYXdUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpyZXBsaWNhRHJhd1RyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldE9yaWdpblRyYW5zZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Om9yaWdpblRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXRDb250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6OmNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2V0U2tpcHNEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2tp
cHNEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Y2xlYXJMYXllckxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpsYXllckxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpjb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDctMjggIEx1
a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1v
dmUgcmVtYWluaW5nIHVzZXMgb2YgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRG
b3JMZW5ndGgoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDQwZjdlNTM1OWE5NjAxZGRjOTNhZTY0NWVm
NTgzYTY5ZDIxODliNTIuLjIyMjM1Nzg4ZDdjZWEyYTNiOTRlZGJmMTBkMTE5YTU0M2YyMDk5NWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NjIsNiArMzU2Miw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5
ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggMGExZDMyZThjNDIyNTM0Nzg2YWE3ZGFjNWVhMmUyZWY3ZGM1MDBmNC4u
YWM0YjlmMjA5MjhkZjNhMWY1MjVhMmYxNGM1YzIxYWVlNDcwYzVmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgQ2FudmFzTGF5ZXJDaHJvbWl1
bTo6fkNhbnZhc0xheWVyQ2hyb21pdW0oKQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBDYW52
YXNMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDQ2Fu
dmFzTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKKyAgICByZXR1cm4gQ0NDYW52
YXNMYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwogfQogCiB2b2lkIENhbnZhc0xheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcAppbmRleCAxZDg3M2RjMWZhZTZmMDE2MzllNTNhYmFmYjFjN2UxYzlmY2Y0MzZmLi4x
ODJjNzQ0NGM4Y2JlODU0MGRiZDFjMzhiYWU0YzBmMDIwNmE1YzM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcApAQCAtNjEsOSArNjEsOSBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgLCBtX2NvbnRlbnRzRGlydHkoZmFsc2Up
CiAgICAgLCBtX2xheWVySWQoc19uZXh0TGF5ZXJJZCsrKQogICAgICwgbV9wYXJlbnQoMCkKLSAg
ICAsIG1fY2NMYXllckltcGwoMCkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAg
LCBtX2JhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQorICAgICwgbV9kZWJ1Z0JvcmRlcldpZHRo
KDApCiAgICAgLCBtX29wYWNpdHkoMS4wKQogICAgICwgbV96UG9zaXRpb24oMC4wKQogICAgICwg
bV9hbmNob3JQb2ludFooMCkKQEAgLTc0LDcgKzc0LDEwIEBAIExheWVyQ2hyb21pdW06OkxheWVy
Q2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICAsIG1fZ2VvbWV0cnlG
bGlwcGVkKGZhbHNlKQogICAgICwgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShmYWxzZSkK
ICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKKyAgICAsIG1fdXNlc0xheWVyU2Npc3NvcihmYWxz
ZSkKICAgICAsIG1fcmVwbGljYUxheWVyKDApCisgICAgLCBtX2RyYXdPcGFjaXR5KDApCisgICAg
LCBtX3RhcmdldFJlbmRlclN1cmZhY2UoMCkKIHsKICAgICBBU1NFUlQoIUxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c19pblBhaW50TGF5ZXJDb250ZW50cyk7CiB9CkBAIC04Niw5ICs4OSw2IEBAIExh
eWVyQ2hyb21pdW06On5MYXllckNocm9taXVtKCkKICAgICAvLyB3YXkgZm9yIHVzIHRvIGJlIGRl
c3Ryb3llZCB3aGlsZSB3ZSBzdGlsbCBoYXZlIGEgcGFyZW50LgogICAgIEFTU0VSVCghcGFyZW50
KCkpOwogCi0gICAgaWYgKG1fY2NMYXllckltcGwpCi0gICAgICAgIG1fY2NMYXllckltcGwtPmNs
ZWFyT3duZXIoKTsKLQogICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHJlZmVyZW5jZSBmcm9tIGFs
bCBjaGlsZHJlbi4KICAgICByZW1vdmVBbGxDaGlsZHJlbigpOwogfQpAQCAtMzgxLDEyICszODEs
NyBAQCB2b2lkIExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYg
dHMsIGludCBpbmRlbnQpIGNvbnN0CiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IExheWVyQ2hy
b21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4gQ0NMYXllckltcGw6OmNy
ZWF0ZSh0aGlzLCBtX2xheWVySWQpOwotfQotCi1DQ0xheWVySW1wbCogTGF5ZXJDaHJvbWl1bTo6
Y2NMYXllckltcGwoKSBjb25zdAotewotICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsOworICAgIHJl
dHVybiBDQ0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0Qm9yZGVyQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDA2LDUgKzQwMSwy
MCBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OmxheWVyUmVuZGVyZXIo
KSBjb25zdAogICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7CiB9CiAKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCit7CisgICAgQVNTRVJUKCFtX3JlbmRl
clN1cmZhY2UpOworICAgIG1fcmVuZGVyU3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0odGhpcykpOworfQorCitib29sIExheWVyQ2hyb21pdW06OmRlc2NlbmRhbnRz
RHJhd3NDb250ZW50KCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4u
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0tPmRyYXdzQ29udGVudCgp
IHx8IG1fY2hpbGRyZW5baV0tPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CiAjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDNi
YTdiOWYwZGIwY2Y5NzFhYjk2OGQ2MWI5YzMwYTAxZGVmNzIzYWIuLjkwNjdiZTQ3MjFhNjM2ZTZk
NDljNTBmYjk0Mjc3ZDQ4MjU4YzBmMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTM3LDkgKzM3
LDkgQEAKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUmVuZGVy
U3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJQcm9ncmFtQmluZGluZy5oIgotI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKIApAQCAtMTA0LDcgKzEwNCw2IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAogICAgIHZvaWQgc2V0TWFza0xheWVyKExh
eWVyQ2hyb21pdW0qIG1hc2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQotICAg
IENDTGF5ZXJJbXBsKiBtYXNrRHJhd0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIg
PyBtX21hc2tMYXllci0+Y2NMYXllckltcGwoKSA6IDA7IH0KICAgICBMYXllckNocm9taXVtKiBt
YXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllci5nZXQoKTsgfQogCiAgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwpAQCAtMTQ1LDYg
KzE0NCw5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcHJlc2VydmVzM0QoKSB7IHJldHVybiBtX293
bmVyICYmIG1fb3duZXItPnByZXNlcnZlczNEKCk7IH0KIAorICAgIHZvaWQgc2V0VXNlc0xheWVy
U2Npc3Nvcihib29sIHVzZXNMYXllclNjaXNzb3IpIHsgbV91c2VzTGF5ZXJTY2lzc29yID0gdXNl
c0xheWVyU2Npc3NvcjsgfQorICAgIGJvb2wgdXNlc0xheWVyU2Npc3NvcigpIGNvbnN0IHsgcmV0
dXJuIG1fdXNlc0xheWVyU2Npc3NvcjsgfQorCiAgICAgLy8gRGVyaXZlZCB0eXBlcyBtdXN0IG92
ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZXkgbmVlZCB0byByZWFjdCB0byBhIGNoYW5nZQogICAg
IC8vIGluIHRoZSBMYXllclJlbmRlcmVyQ2hyb21pdW0uCiAgICAgdmlydHVhbCB2b2lkIHNldExh
eWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CkBAIC0xNzAsOSArMTcyLDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCk7CiAKLSAgICAvLyBFdmVy
eXRoaW5nIGZyb20gaGVyZSBkb3duIGluIHRoZSBwdWJsaWMgc2VjdGlvbiB3aWxsIG1vdmUgdG8g
Q0NMYXllckltcGwuCi0gICAgQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBsKCkgY29uc3Q7Ci0KICAg
ICBzdGF0aWMgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBsYXllck1hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9u
KTsKQEAgLTE4Nyw2ICsxODYsMjQgQEAgcHVibGljOgogCiAgICAgaW50IGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllcklkOyB9CiAKKyAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZSgpIHsgbV9y
ZW5kZXJTdXJmYWNlLmNsZWFyKCk7IH0KKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRl
clN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7IH0KKyAgICB2
b2lkIGNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKworICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQorICAgIHZvaWQgc2V0RHJhd09wYWNpdHkoZmxv
YXQgb3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0gb3BhY2l0eTsgfQorICAgIGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorICAgIHZv
aWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX3NjaXNzb3JSZWN0ID0g
cmVjdDsgfQorICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQorICAgIHZvaWQgc2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90YXJn
ZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9Cisg
ICAgdm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgpIHsgbV9kcmF3VHJhbnNmb3JtID0gbWF0cml4OyB9CisgICAgY29uc3QgSW50UmVjdCYgZHJh
d2FibGVDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2FibGVDb250ZW50UmVjdDsg
fQorICAgIHZvaWQgc2V0RHJhd2FibGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7
IG1fZHJhd2FibGVDb250ZW50UmVjdCA9IHJlY3Q7IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhbnkgb2YgdGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KKyAg
ICBib29sIGRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCk7CisKIHByb3RlY3RlZDoKICAgICBHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG1fb3duZXI7CiAgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1bShH
cmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKQEAgLTIxMCwxOCArMjI3LDEwIEBAIHByb3Rl
Y3RlZDoKIAogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX21hc2tMYXllcjsKIAotICAgIC8v
IEFsbCBsYXllciBzaGFkZXJzIHNoYXJlIHRoZSBzYW1lIGF0dHJpYnV0ZSBsb2NhdGlvbnMgZm9y
IHRoZSB2ZXJ0ZXggcG9zaXRpb25zCi0gICAgLy8gYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMuIFRo
aXMgYWxsb3dzIHN3aXRjaGluZyBzaGFkZXJzIHdpdGhvdXQgcmViaW5kaW5nIGF0dHJpYnV0ZQot
ICAgIC8vIGFycmF5cy4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19wb3NpdGlvbkF0dHJp
YkxvY2F0aW9uOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RleENvb3JkQXR0cmliTG9j
YXRpb247Ci0KICAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKICAgICBmcmllbmQg
Y2xhc3MgQ0NMYXllckltcGw7CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRo
ZSBjb3JyZWN0IHJ1bnRpbWUgdHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwotICAg
IC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTg4MzAgaXMgZml4ZWQuCi0gICAgdm9pZCBzZXRDQ0xheWVySW1wbChDQ0xheWVySW1w
bCogaW1wbCkgeyBtX2NjTGF5ZXJJbXBsID0gaW1wbDsgfQogICAgIGludCBtX2xheWVySWQ7CiAK
IHByaXZhdGU6CkBAIC0yNDUsMTAgKzI1NCw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAKLSAgICAvLyBUZW1wb3Jhcnkg
Zm9yd2FyZCB3ZWFrIHBvaW50ZXIgdG8gdGhlIENDTGF5ZXJJbXBsIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIGxheWVyLgotICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzAgaXMgZml4ZWQuCi0gICAgQ0NMYXllckltcGwqIG1f
Y2NMYXllckltcGw7Ci0KICAgICAvLyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9i
b3VuZHM7CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CkBAIC0yNjcsNiArMjcyLDcg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fZ2VvbWV0cnlGbGlwcGVkOwogICAgIGJvb2wgbV9uZWVk
c0Rpc3BsYXlPbkJvdW5kc0NoYW5nZTsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7CisgICAgYm9v
bCBtX3VzZXNMYXllclNjaXNzb3I7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5z
Zm9ybTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwpAQCAt
Mjc2LDYgKzI4MiwxNCBAQCBwcml2YXRlOgogICAgIC8vIFJlcGxpY2EgbGF5ZXIgdXNlZCBmb3Ig
cmVmbGVjdGlvbnMuCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcmVwbGljYUxheWVyOwog
CisgICAgLy8gVHJhbnNpZW50IHByb3BlcnRpZXMuCisgICAgT3duUHRyPFJlbmRlclN1cmZhY2VD
aHJvbWl1bT4gbV9yZW5kZXJTdXJmYWNlOworICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CisgICAg
SW50UmVjdCBtX3NjaXNzb3JSZWN0OworICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJn
ZXRSZW5kZXJTdXJmYWNlOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9y
bTsKKyAgICBJbnRSZWN0IG1fZHJhd2FibGVDb250ZW50UmVjdDsKKwogICAgIFN0cmluZyBtX25h
bWU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA1NDAy
MDY4MmIzMjJjMTE2ZmY2NjNmZDhjOGE3ZDhjMTMzMzEwZDkxLi43ODRiYmU0MTRiZjM1MDg3YThi
YzEyYWNiMWY5ZGUzYzg2MmIyYjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKICNpbmNs
dWRlICJMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0
U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJUcmVlU3lu
Y2hyb25pemVyLmgiCkBAIC02Miw2ICs2Myw4IEBACiAjZW5kaWYKICNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBGSVhNRTogTWFrZSB0aGlzIGxpbWl0IGFkanVzdGFibGUgYW5kIGdpdmUgaXQgYSB1
c2VmdWwgdmFsdWUuCkBAIC03Nyw2ICs4MCwzMTEgQEAgc3RhdGljIHNpemVfdCB0ZXh0dXJlTWVt
b3J5TG93TGltaXRCeXRlcyA9IDMgKiAxMDI0ICogMTAyNDsKIGJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzX2luUGFpbnRMYXllckNvbnRlbnRzID0gZmFsc2U7CiAjZW5kaWYKIAorbmFtZXNw
YWNlIHsKKworSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJn
ZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit7CisgICAgLy8gSXMgdGhpcyBsYXllciBmdWxs
eSBjb250YWluZWQgd2l0aGluIHRoZSB0YXJnZXQgc3VyZmFjZT8KKyAgICBJbnRSZWN0IGxheWVy
SW5TdXJmYWNlU3BhY2UgPSB0cmFuc2Zvcm0ubWFwUmVjdChsYXllckJvdW5kUmVjdCk7CisgICAg
aWYgKHRhcmdldFN1cmZhY2VSZWN0LmNvbnRhaW5zKGxheWVySW5TdXJmYWNlU3BhY2UpKQorICAg
ICAgICByZXR1cm4gbGF5ZXJCb3VuZFJlY3Q7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIgZG9lc24n
dCBmaWxsIHVwIHRoZSBlbnRpcmUgc3VyZmFjZSwgdGhlbiBmaW5kIHRoZSBwYXJ0IG9mCisgICAg
Ly8gdGhlIHN1cmZhY2UgcmVjdCB3aGVyZSB0aGUgbGF5ZXIgY291bGQgYmUgdmlzaWJsZS4gVGhp
cyBhdm9pZHMgdHJ5aW5nIHRvCisgICAgLy8gcHJvamVjdCBzdXJmYWNlIHJlY3QgcG9pbnRzIHRo
YXQgYXJlIGJlaGluZCB0aGUgcHJvamVjdGlvbiBwb2ludC4KKyAgICBJbnRSZWN0IG1pbmltYWxT
dXJmYWNlUmVjdCA9IHRhcmdldFN1cmZhY2VSZWN0OworICAgIG1pbmltYWxTdXJmYWNlUmVjdC5p
bnRlcnNlY3QobGF5ZXJJblN1cmZhY2VTcGFjZSk7CisKKyAgICAvLyBQcm9qZWN0IHRoZSBjb3Ju
ZXJzIG9mIHRoZSB0YXJnZXQgc3VyZmFjZSByZWN0IGludG8gdGhlIGxheWVyIHNwYWNlLgorICAg
IC8vIFRoaXMgYm91bmRpbmcgcmVjdGFuZ2xlIG1heSBiZSBsYXJnZXIgdGhhbiBpdCBuZWVkcyB0
byBiZSAoYmVpbmcKKyAgICAvLyBheGlzLWFsaWduZWQpLCBidXQgaXMgYSByZWFzb25hYmxlIGZp
bHRlciBvbiB0aGUgc3BhY2UgdG8gY29uc2lkZXIuCisgICAgLy8gTm9uLWludmVydGlibGUgdHJh
bnNmb3JtcyB3aWxsIGNyZWF0ZSBhbiBlbXB0eSByZWN0IGhlcmUuCisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXggc3VyZmFjZVRvTGF5ZXIgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOworICAg
IEludFJlY3QgbGF5ZXJSZWN0ID0gc3VyZmFjZVRvTGF5ZXIucHJvamVjdFF1YWQoRmxvYXRRdWFk
KEZsb2F0UmVjdChtaW5pbWFsU3VyZmFjZVJlY3QpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
KyAgICBsYXllclJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRSZWN0KTsKKyAgICByZXR1cm4gbGF5
ZXJSZWN0OworfQorCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hdHJpeCBoYXMgbm8gcm90YXRp
b24sIHNrZXcgb3IgcGVyc3BlY3RpdmUgY29tcG9uZW50cyB0byBpdC4KK2Jvb2wgaXNTY2FsZU9y
VHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCit7CisgICAgcmV0dXJu
ICFtLm0xMigpICYmICFtLm0xMygpICYmICFtLm0xNCgpCisgICAgICAgICAgICYmICFtLm0yMSgp
ICYmICFtLm0yMygpICYmICFtLm0yNCgpCisgICAgICAgICAgICYmICFtLm0zMSgpICYmICFtLm0z
MigpICYmICFtLm00MygpCisgICAgICAgICAgICYmIG0ubTQ0KCk7CisKK30KKwordm9pZCBzb3J0
TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZvaWQqKQoreworICAgIC8vIEN1cnJl
bnRseSB3ZSBkb24ndCB1c2Ugei1vcmRlciB0byBkZWNpZGUgd2hhdCB0byBwYWludCwgc28gdGhl
cmUncyBubyBuZWVkIHRvIGFjdHVhbGx5IHNvcnQgTGF5ZXJDaHJvbWl1bXMuCit9CisKK3ZvaWQg
c29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+OjppdGVyYXRvciBmaXJzdCwg
VmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0b3IgZW5kLCBDQ0xheWVyU29ydGVy
KiBsYXllclNvcnRlcikKK3sKKyAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojpzb3J0TGF5ZXJzIiwgMCwgMCk7CisgICAgbGF5ZXJTb3J0ZXItPnNvcnQoZmlyc3QsIGVuZCk7
Cit9CisKKy8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRo
ZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCisvLyBuZWNlc3NhcnkgdHJhbnNmb3Jt
YXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgordGVtcGxh
dGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5h
bWUgTGF5ZXJTb3J0ZXI+Cit2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0
eShMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJUeXBlPiA+JiBsYXllckxp
c3QsIExheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQoreworICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4gTGF5ZXJMaXN0OworICAgIC8vIENv
bXB1dGUgdGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQg
dG8gdGhpcyBsYXllciBhbmQKKyAgICAvLyBhbGwgaXRzIGNoaWxkcmVuLiBJdCdzIGltcG9ydGFu
dCB0byByZW1lbWJlciB0aGF0IHRoZSBsYXllcidzIHBvc2l0aW9uCisgICAgLy8gaXMgdGhlIHBv
c2l0aW9uIG9mIHRoZSBsYXllcidzIGFuY2hvciBwb2ludC4gQWxzbywgdGhlIGNvb3JkaW5hdGUg
c3lzdGVtIHVzZWQKKyAgICAvLyBhc3N1bWVzIHRoYXQgdGhlIG9yaWdpbiBpcyBhdCB0aGUgbG93
ZXIgbGVmdCBldmVuIHRob3VnaCB0aGUgY29vcmRpbmF0ZXMgdGhlIGJyb3dzZXIKKyAgICAvLyBn
aXZlcyB1cyBmb3IgdGhlIGxheWVycyBhcmUgZm9yIHRoZSB1cHBlciBsZWZ0IGNvcm5lci4gVGhl
IFkgZmxpcCBoYXBwZW5zIHZpYQorICAgIC8vIHRoZSBvcnRob2dyYXBoaWMgcHJvamVjdGlvbiBh
cHBsaWVkIGF0IHJlbmRlciB0aW1lLgorICAgIC8vIFRoZSB0cmFuc2Zvcm1hdGlvbiBjaGFpbiBm
b3IgdGhlIGxheWVyIGlzICh1c2luZyB0aGUgTWF0cml4IHggVmVjdG9yIG9yZGVyKToKKyAgICAv
LyBNID0gTVtwXSAqIFRyW2xdICogTVtsXSAqIFRyW2NdCisgICAgLy8gV2hlcmUgTVtwXSBpcyB0
aGUgcGFyZW50IG1hdHJpeCBwYXNzZWQgZG93biB0byB0aGUgZnVuY3Rpb24KKyAgICAvLyAgICAg
ICBUcltsXSBpcyB0aGUgdHJhbnNsYXRpb24gbWF0cml4IGxvY2F0aW5nIHRoZSBsYXllcidzIGFu
Y2hvciBwb2ludAorICAgIC8vICAgICAgIFRyW2NdIGlzIHRoZSB0cmFuc2xhdGlvbiBvZmZzZXQg
YmV0d2VlbiB0aGUgYW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBsYXllcgorICAg
IC8vICAgICAgIE1bbF0gaXMgdGhlIGxheWVyJ3MgbWF0cml4IChhcHBsaWVkIGF0IHRoZSBhbmNo
b3IgcG9pbnQpCisgICAgLy8gVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIGNvb3JkaW5hdGUgc3lz
dGVtIHdob3NlIG9yaWdpbiBpcyB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KKyAgICAvLyBOb3Rl
IHRoYXQgdGhlIGZpbmFsIG1hdHJpeCB1c2VkIGJ5IHRoZSBzaGFkZXIgZm9yIHRoZSBsYXllciBp
cyBQICogTSAqIFMgLiBUaGlzIGZpbmFsIHByb2R1Y3QKKyAgICAvLyBpcyBjb21wdXRlZCBpbiBk
cmF3VGV4dHVyZWRRdWFkKCkuCisgICAgLy8gV2hlcmU6IFAgaXMgdGhlIHByb2plY3Rpb24gbWF0
cml4CisgICAgLy8gICAgICAgIE0gaXMgdGhlIGxheWVyJ3MgbWF0cml4IGNvbXB1dGVkIGFib3Zl
CisgICAgLy8gICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQgKHRvIHNjYWxlIHVwIHRv
IHRoZSBsYXllciBzaXplKQorICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwor
ICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQgPSBsYXllci0+YW5jaG9yUG9pbnQoKTsKKyAgICBG
bG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7CisKKyAgICAvLyBPZmZzZXQg
YmV0d2VlbiBhbmNob3IgcG9pbnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIHF1YWQuCisgICAgZmxv
YXQgY2VudGVyT2Zmc2V0WCA9ICgwLjUgLSBhbmNob3JQb2ludC54KCkpICogYm91bmRzLndpZHRo
KCk7CisgICAgZmxvYXQgY2VudGVyT2Zmc2V0WSA9ICgwLjUgLSBhbmNob3JQb2ludC55KCkpICog
Ym91bmRzLmhlaWdodCgpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJMb2NhbFRy
YW5zZm9ybTsKKyAgICAvLyBMVCA9IFRyW2xdCisgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFu
c2xhdGUzZChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSwgbGF5ZXItPmFuY2hvclBvaW50Wigp
KTsKKyAgICAvLyBMVCA9IFRyW2xdICogTVtsXQorICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0ubXVs
dGlwbHkobGF5ZXItPnRyYW5zZm9ybSgpKTsKKyAgICAvLyBMVCA9IFRyW2xdICogTVtsXSAqIFRy
W2NdCisgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRYLCBj
ZW50ZXJPZmZzZXRZLCAtbGF5ZXItPmFuY2hvclBvaW50WigpKTsKKworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGNvbWJpbmVkVHJhbnNmb3JtID0gcGFyZW50TWF0cml4OworICAgIGNvbWJpbmVk
VHJhbnNmb3JtID0gY29tYmluZWRUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJMb2NhbFRyYW5zZm9y
bSk7CisKKyAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KC0wLjUgKiBsYXllci0+Ym91bmRzKCkud2lk
dGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgbGF5ZXItPmJvdW5kcygpLndp
ZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgSW50UmVjdCB0cmFuc2Zvcm1l
ZExheWVyUmVjdDsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNlZW1zIGxpa2UgdGhlIHdyb25nIHBs
YWNlIHRvIHNldCB0aGlzCisgICAgbGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IoZmFsc2UpOwor
CisgICAgLy8gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMgcmVuZGVyIG9uIGEgbmV3IFJl
bmRlclN1cmZhY2UgaWYgYW55IG9mCisgICAgLy8gdGhlc2UgY29uZGl0aW9ucyBob2xkOgorICAg
IC8vIDEuIFRoZSBsYXllciBjbGlwcyBpdHMgZGVzY2VuZGFudHMgYW5kIGl0cyB0cmFuc2Zvcm0g
aXMgbm90IGEgc2ltcGxlIHRyYW5zbGF0aW9uLgorICAgIC8vIDIuIElmIHRoZSBsYXllciBoYXMg
b3BhY2l0eSAhPSAxIGFuZCBkb2VzIG5vdCBoYXZlIGEgcHJlc2VydmVzLTNkIHRyYW5zZm9ybSBz
dHlsZS4KKyAgICAvLyAzLiBUaGUgbGF5ZXIgdXNlcyBhIG1hc2sKKyAgICAvLyA0LiBUaGUgbGF5
ZXIgaGFzIGEgcmVwbGljYSAodXNlZCBmb3IgcmVmbGVjdGlvbnMpCisgICAgLy8gNS4gVGhlIGxh
eWVyIGRvZXNuJ3QgcHJlc2VydmUtM2QgYnV0IGlzIHRoZSBjaGlsZCBvZiBhIGxheWVyIHdoaWNo
IGRvZXMuCisgICAgLy8gSWYgYSBsYXllciBwcmVzZXJ2ZXMtM2QgdGhlbiB3ZSBkb24ndCBjcmVh
dGUgYSBSZW5kZXJTdXJmYWNlIGZvciBpdCB0byBhdm9pZCBmbGF0dGVuaW5nCisgICAgLy8gb3V0
IGl0cyBjaGlsZHJlbi4gVGhlIG9wYWNpdHkgdmFsdWUgb2YgdGhlIGNoaWxkcmVuIGxheWVycyBp
cyBtdWx0aXBsaWVkIGJ5IHRoZSBvcGFjaXR5CisgICAgLy8gb2YgdGhlaXIgcGFyZW50LgorICAg
IGJvb2wgdXNlU3VyZmFjZUZvckNsaXBwaW5nID0gbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAh
aXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zvcm0pOworICAgIGJvb2wgdXNlU3Vy
ZmFjZUZvck9wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpICE9IDEgJiYgIWxheWVyLT5wcmVzZXJ2
ZXMzRCgpOworICAgIGJvb2wgdXNlU3VyZmFjZUZvck1hc2tpbmcgPSBsYXllci0+bWFza0xheWVy
KCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGxheWVyLT5yZXBsaWNhTGF5
ZXIoKTsKKyAgICBib29sIHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgPSBsYXllci0+cGFy
ZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpICYmICFsYXllci0+cHJlc2Vy
dmVzM0QoKSAmJiBsYXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKTsKKyAgICBpZiAodXNl
U3VyZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNlU3VyZmFj
ZUZvckZsYXREZXNjZW5kYW50cyB8fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJm
YWNlRm9yT3BhY2l0eSkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7Cisg
ICAgICAgIGlmICghbGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgICAgIGxheWVyLT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIFJlbmRlclN1cmZhY2VUeXBlKiByZW5kZXJT
dXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKworICAgICAgICAvLyBUaGUgb3JpZ2lu
IG9mIHRoZSBuZXcgc3VyZmFjZSBpcyB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVy
LgorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtOworICAgICAgICBk
cmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKDAuNSAqIGJvdW5kcy53aWR0aCgpLCAwLjUgKiBib3Vu
ZHMuaGVpZ2h0KCksIDApOworICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJh
bnNmb3JtKTsKKworICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IEludFJlY3QoMCwgMCwg
Ym91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gTGF5ZXIncyBv
cGFjaXR5IHdpbGwgYmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlLgor
ICAgICAgICBmbG9hdCBkcmF3T3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCk7CisgICAgICAgIGlm
IChsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQorICAg
ICAgICAgICAgZHJhd09wYWNpdHkgKj0gbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0eSgpOwor
ICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXREcmF3T3BhY2l0eShkcmF3T3BhY2l0eSk7CisgICAg
ICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKKworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBsYXllck9yaWdpblRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtOworICAgICAgICBs
YXllck9yaWdpblRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCksIC0w
LjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOworICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRPcmln
aW5UcmFuc2Zvcm0obGF5ZXJPcmlnaW5UcmFuc2Zvcm0pOworCisgICAgICAgIC8vIFRoZSByZW5k
ZXIgc3VyZmFjZSBzY2lzc29yIHJlY3QgaXMgdGhlIHNjaXNzb3IgcmVjdCB0aGF0IG5lZWRzIHRv
CisgICAgICAgIC8vIGJlIGFwcGxpZWQgYmVmb3JlIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNl
IG9udG8gaXRzIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gc3VyZmFjZSBhbmQgaXMgdGhlcmVmb3Jl
IGV4cHJlc3NlZCBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgICAgIHJl
bmRlclN1cmZhY2UtPnNldFNjaXNzb3JSZWN0KGxheWVyLT5wYXJlbnQoKSA/IGxheWVyLT5wYXJl
bnQoKS0+c2Npc3NvclJlY3QoKSA6IGxheWVyLT5zY2lzc29yUmVjdCgpKTsKKworICAgICAgICBy
ZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOworCisgICAgICAgIGlmIChsYXllci0+bWFz
a0xheWVyKCkpIHsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihsYXll
ci0+bWFza0xheWVyKCkpOworICAgICAgICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRUYXJn
ZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcigwKTsKKworICAgICAgICBpZiAobGF5ZXIt
PnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCisg
ICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRUYXJnZXRS
ZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOworCisgICAgICAgIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QuYXBwZW5kKGxheWVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBEVCA9IE1bcF0g
KiBMVAorICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7
CisgICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsYXllci0+
ZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CisKKyAgICAgICAgbGF5ZXItPnNl
dERyYXdPcGFjaXR5KGxheWVyLT5vcGFjaXR5KCkpOworCisgICAgICAgIGlmIChsYXllci0+cGFy
ZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkp
CisgICAgICAgICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkobGF5ZXItPmRyYXdPcGFjaXR5
KCkgKiBsYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCkpOworCisgICAgICAgICAgICAvLyBM
YXllcnMgaW5oZXJpdCB0aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIgcGFyZW50LgorICAgICAg
ICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KGxheWVyLT5wYXJlbnQoKS0+c2Npc3NvclJlY3Qo
KSk7CisgICAgICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJTY2lzc29yKCkp
CisgICAgICAgICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3IodHJ1ZSk7CisKKyAg
ICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXllciAh
PSByb290TGF5ZXIpCisgICAgICAgICAgICBsYXllci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CisK
KyAgICAgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkpIHsKKyAgICAgICAgICAgIEludFJl
Y3Qgc2Npc3NvciA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OworICAgICAgICAgICAgaWYgKCFsYXll
ci0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgc2Npc3Nvci5pbnRl
cnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNz
b3JSZWN0KHNjaXNzb3IpOworICAgICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXllclNjaXNzb3Io
dHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSkKKyAgICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1
cmZhY2UoKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChsYXllci0+cGFyZW50KCkpOwor
ICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cGFyZW50KCktPnRh
cmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgfQorCisgICAgLy8gZHJhd2FibGVDb250ZW50UmVj
dCgpIGlzIGFsd2F5cyBzdG9yZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZQorICAg
IC8vIFJlbmRlclN1cmZhY2UgdGhlIGxheWVyIGRyYXdzIGludG8uCisgICAgaWYgKGxheWVyLT5k
cmF3c0NvbnRlbnQoKSkgeworICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSB0
cmFuc2Zvcm1lZExheWVyUmVjdDsKKyAgICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJTY2lzc29y
KCkpCisgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdChsYXllci0+c2Np
c3NvclJlY3QoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdh
YmxlQ29udGVudFJlY3QpOworICAgIH0gZWxzZQorICAgICAgICBsYXllci0+c2V0RHJhd2FibGVD
b250ZW50UmVjdChJbnRSZWN0KCkpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5
ZXJNYXRyaXggPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOworCisgICAgLy8gRmxhdHRlbiB0byAy
RCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZSAzRC4KKyAgICBpZiAoIWxheWVyLT5wcmVz
ZXJ2ZXMzRCgpKSB7CisgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0xMygwKTsKKyAgICAgICAg
c3VibGF5ZXJNYXRyaXguc2V0TTIzKDApOworICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzEo
MCk7CisgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zMigwKTsKKyAgICAgICAgc3VibGF5ZXJN
YXRyaXguc2V0TTMzKDEpOworICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzQoMCk7CisgICAg
ICAgIHN1YmxheWVyTWF0cml4LnNldE00MygwKTsKKyAgICB9CisKKyAgICAvLyBBcHBseSB0aGUg
c3VibGF5ZXIgdHJhbnNmb3JtIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgorICAgIHN1Ymxh
eWVyTWF0cml4Lm11bHRpcGx5KGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKKworICAgIC8v
IFRoZSBvcmlnaW4gb2YgdGhlIGNoaWxkcmVuIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhl
IGxheWVyLCBub3QgdGhlCisgICAgLy8gY2VudGVyLiBUaGUgbWF0cml4IHBhc3NlZCBkb3duIHRv
IHRoZSBjaGlsZHJlbiBpcyB0aGVyZWZvcmU6CisgICAgLy8gTVtzXSA9IE0gKiBUclstY2VudGVy
XQorICAgIHN1YmxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwg
LWJvdW5kcy5oZWlnaHQoKSAqIDAuNSwgMCk7CisKKyAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRz
ID0gKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5sYXll
ckxpc3QoKSA6IGxheWVyTGlzdCk7CisgICAgZGVzY2VuZGFudHMuYXBwZW5kKGxheWVyKTsKKwor
ICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0gZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgTGF5ZXJUeXBlKiBjaGlsZCA9IGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgp
OworICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8TGF5ZXJUeXBl
LCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxkLCByb290TGF5ZXIsIHN1Ymxh
eWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cywgbGF5ZXJTb3J0
ZXIsIG1heFRleHR1cmVTaXplKTsKKworICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2Uo
KSkgeworICAgICAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIGNoaWxkUmVuZGVyU3VyZmFjZSA9
IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29u
dGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgZHJh
d2FibGVDb250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFj
ZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKSk7CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2Fi
bGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgIGRlc2NlbmRh
bnRzLmFwcGVuZChjaGlsZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnRSZWN0
IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAg
ICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShjaGlsZC0+ZHJhd2FibGVDb250ZW50
UmVjdCgpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdh
YmxlQ29udGVudFJlY3QpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxheWVyLT5tYXNr
c1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKKyAgICAgICAgSW50UmVjdCBk
cmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAg
ICAgZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOwor
ICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0
KTsKKyAgICB9CisKKyAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSBy
b290TGF5ZXIpIHsKKyAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJlbmRlclN1cmZhY2UgPSBs
YXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBJbnRSZWN0IGNsaXBwZWRDb250ZW50UmVj
dCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc3Vy
ZmFjZUNlbnRlciA9IEZsb2F0UmVjdChjbGlwcGVkQ29udGVudFJlY3QpLmNlbnRlcigpOworCisg
ICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24g
dGhhdCdzIHZpc2libGUuCisgICAgICAgIEZsb2F0U2l6ZSBjZW50ZXJPZmZzZXREdWVUb0NsaXBw
aW5nOworCisgICAgICAgIC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBh
cyB0aGUgcmVmbGVjdGlvbiBzaG91bGRuJ3QgYmUKKyAgICAgICAgLy8gY2xpcHBlZC4KKyAgICAg
ICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICghcmVuZGVy
U3VyZmFjZS0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkgJiYgIWNsaXBwZWRDb250ZW50UmVjdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VTY2lzc29yUmVjdCA9
IGNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPnNjaXNzb3JSZWN0KCksIGNsaXBw
ZWRDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgICAg
ICAgICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VD
ZW50ZXIgPSBGbG9hdFJlY3QoY2xpcHBlZENvbnRlbnRSZWN0KS5jZW50ZXIoKTsKKyAgICAgICAg
ICAgIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1
cmZhY2VDZW50ZXI7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgUmVuZGVyU3VyZmFjZSBi
YWNraW5nIHRleHR1cmUgY2Fubm90IGV4Y2VlZCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQKKyAgICAg
ICAgLy8gdGV4dHVyZSBzaXplLgorICAgICAgICBjbGlwcGVkQ29udGVudFJlY3Quc2V0V2lkdGgo
bWluKGNsaXBwZWRDb250ZW50UmVjdC53aWR0aCgpLCBtYXhUZXh0dXJlU2l6ZSkpOworICAgICAg
ICBjbGlwcGVkQ29udGVudFJlY3Quc2V0SGVpZ2h0KG1pbihjbGlwcGVkQ29udGVudFJlY3QuaGVp
Z2h0KCksIG1heFRleHR1cmVTaXplKSk7CisKKyAgICAgICAgaWYgKGNsaXBwZWRDb250ZW50UmVj
dC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgp
OworCisgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KGNsaXBwZWRDb250ZW50
UmVjdCk7CisKKyAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIg
c3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMKKyAgICAgICAgLy8gc2Npc3NvciByZWN0IHRv
IGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KKyAg
ICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkp
OworCisgICAgICAgIC8vIEFkanVzdCB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2Zvcm0gdG8gYmUg
dGhlIGNlbnRlciBvZiB0aGUgcmVuZGVyIHN1cmZhY2UuCisgICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGRyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsK
KyAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSArIGNl
bnRlck9mZnNldER1ZVRvQ2xpcHBpbmcud2lkdGgoKSwgc3VyZmFjZUNlbnRlci55KCkgKyBjZW50
ZXJPZmZzZXREdWVUb0NsaXBwaW5nLmhlaWdodCgpLCAwKTsKKyAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKworICAgICAgICAvLyBDb21wdXRl
IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNlZCB0byBkcmF3IHRoZSByZXBsaWNhIG9mIHRo
ZSByZW5kZXIKKyAgICAgICAgLy8gc3VyZmFjZS4KKyAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNh
TGF5ZXIoKSkgeworICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYURyYXdU
cmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgICAg
IHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
cG9zaXRpb24oKS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCksIDAp
OworICAgICAgICAgICAgcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJlcGxp
Y2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CisgICAgICAgICAgICByZXBsaWNhRHJhd1RyYW5zZm9y
bS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSAtIGFuY2hvclBvaW50LngoKSAqIGJvdW5k
cy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSAtIGFuY2hvclBvaW50LnkoKSAqIGJvdW5kcy5o
ZWlnaHQoKSwgMCk7CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRSZXBsaWNhRHJhd1Ry
YW5zZm9ybShyZXBsaWNhRHJhd1RyYW5zZm9ybSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgaW4gM0Qgc28g
dGhhdCB0aGV5IGNhbiBiZQorICAgIC8vIGRyYXduIGZyb20gYmFjayB0byBmcm9udC4gSWYgdGhl
IHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgcGFyZW50IHRoZW4KKyAg
ICAvLyBza2lwIHRoZSBzb3J0aW5nIGFzIHRoZSBwYXJlbnQgd2lsbCBzb3J0IGFsbCB0aGUgZGVz
Y2VuZGFudHMgYW55d2F5LgorICAgIGlmIChsYXllci0+cHJlc2VydmVzM0QoKSAmJiAoIWxheWVy
LT5wYXJlbnQoKSB8fCAhbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKSkKKyAgICAgICAg
c29ydExheWVycygmZGVzY2VuZGFudHMuYXQodGhpc0xheWVySW5kZXgpLCBkZXNjZW5kYW50cy5l
bmQoKSwgbGF5ZXJTb3J0ZXIpOworfQorCit9CisKIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBvcnRob01hdHJpeChmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9h
dCB0b3ApCiB7CiAgICAgZmxvYXQgZGVsdGFYID0gcmlnaHQgLSBsZWZ0OwpAQCAtOTYsMTYgKzQw
NCw2IEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcnRob01hdHJpeChmbG9hdCBsZWZ0
LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmCiAgICAgcmV0dXJuIG9ydGhvOwogfQogCi0v
LyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hdHJpeCBoYXMgbm8gcm90YXRpb24sIHNrZXcgb3IgcGVy
c3BlY3RpdmUgY29tcG9uZW50cyB0byBpdC4KLXN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5zbGF0
aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQotewotICAgIHJldHVybiAhbS5tMTIo
KSAmJiAhbS5tMTMoKSAmJiAhbS5tMTQoKQotICAgICAgICAgICAmJiAhbS5tMjEoKSAmJiAhbS5t
MjMoKSAmJiAhbS5tMjQoKQotICAgICAgICAgICAmJiAhbS5tMzEoKSAmJiAhbS5tMzIoKSAmJiAh
bS5tNDMoKQotICAgICAgICAgICAmJiBtLm00NCgpOwotCi19Ci0KIFBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3RDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29u
dGVudFBhaW50LCBib29sIGFjY2VsZXJhdGVEcmF3aW5nKQogewogICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IGNsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQz
RCgpOwpAQCAtMjY5LDE5ICs1NjcsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUxheWVycygpCiAgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzeW5jaHJv
bml6ZVRyZWVzIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5
bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhtX3Jvb3RMYXllci5nZXQoKSwgbV9yb290Q0NM
YXllckltcGwuZ2V0KCkpOwotICAgIH0KLQotICAgIG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0ID0gYWRvcHRQdHIobmV3IExheWVyTGlzdCgpKTsKLSAgICB1cGRhdGVMYXllcnMoKm1f
Y29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICB1cGRhdGVMYXllcnMobV9yb290
TGF5ZXIuZ2V0KCkpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cygpCiB7CiAgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7Ci0gICAgQVNTRVJUKG1f
Y29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICAvLyBCZWZvcmUgZHJhd0xheWVy
czoKICAgICBpZiAoaGFyZHdhcmVDb21wb3NpdGluZygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBU
aGUgbXVsdGl0aHJlYWRlZCBjb21wb3NpdG9yIGNhc2Ugd2lsbCBub3Qgd29yayBhcyBsb25nIGFz
CkBAIC0yOTUsOCArNTg2LDE0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzKCkKICAgICAgICAgfQogICAgIH0KIAorICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6c3luY2hyb25pemVUcmVlcyIsIHRoaXMsIDApOworICAgICAg
ICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
bV9yb290TGF5ZXIuZ2V0KCksIG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKTsKKyAgICB9CisKKwog
ICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKHRl
eHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcyAtIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3Vy
cmVudE1lbW9yeVVzZUJ5dGVzKCkpOwotICAgIGRyYXdMYXllcnMoKm1fY29tcHV0ZWRSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKIAogICAgIG1fY29u
dGVudHNUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKICAgICBtX2NvbnRl
bnRzVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQodGV4dHVyZU1lbW9yeVJlY2xh
aW1MaW1pdEJ5dGVzKTsKQEAgLTMxMCwzMyArNjA3LDMxIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3Bs
YXkoKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKIHsKICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKLSAg
ICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1fcm9vdExheWVyLT5jY0xheWVySW1wbCgp
OwogCi0gICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCi0gICAgICAgIHJv
b3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBBU1NFUlQocm9vdERyYXdM
YXllci0+cmVuZGVyU3VyZmFjZSgpKTsKLQotICAgIHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV92aWV3cG9ydFZp
c2libGVSZWN0LnNpemUoKSkpOworICAgIGlmICghcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkp
CisgICAgICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3RMYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KDAsIDAp
LCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Quc2l6ZSgpKSk7CiAKICAgICBJbnRSZWN0IHJvb3RTY2lz
c29yUmVjdChtX3ZpZXdwb3J0VmlzaWJsZVJlY3QpOwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBz
aG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQuCiAgICAgcm9vdFNjaXNzb3JSZWN0
Lm1vdmUoLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi54KCksIC1tX3ZpZXdwb3J0U2Nyb2xsUG9z
aXRpb24ueSgpKTsKLSAgICByb290RHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChyb290U2Npc3Nv
clJlY3QpOworICAgIHJvb3RMYXllci0+c2V0U2Npc3NvclJlY3Qocm9vdFNjaXNzb3JSZWN0KTsK
IAotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgPSByb290RHJhd0xheWVyLT5yZW5kZXJTdXJm
YWNlKCk7CisgICAgTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyKTsKIAotICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QuYXBwZW5kKHJvb3REcmF3TGF5ZXIpOworICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogcm9vdFJlbmRlclN1cmZhY2UgPSByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICBy
b290UmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxpc3QoKTsKIAogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmNsZWFy
TGF5ZXJMaXN0KCk7Ci0gICAgLy8gVW5mb3J0dW5hdGVseSwgdXBkYXRlUHJvcGVydGllc0FuZFJl
bmRlclN1cmZhY2VzKCkgY3VycmVudGx5IGJvdGggdXBkYXRlcyB0aGUgbGF5ZXJzIGFuZCB1cGRh
dGVzIHRoZSBkcmF3IHN0YXRlCi0gICAgLy8gKHRyYW5zZm9ybXMsIGV0YykuIEl0J2QgYmUgbmlj
ZXIgaWYgb3BlcmF0aW9ucyBvbiB0aGUgcHJlc2VudGF0aW9uIGxheWVycyBoYXBwZW5lZCBsYXRl
ciwgYnV0IHRoZSBkcmF3Ci0gICAgLy8gdHJhbnNmb3JtcyBhcmUgbmVlZGVkIGJ5IGxhcmdlIGxh
eWVycyB0byBkZXRlcm1pbmUgdmlzaWJpbGl0eS4gVGlsaW5nIHdpbGwgZml4IHRoaXMgYnkgZWxp
bWluYXRpbmcgdGhlCi0gICAgLy8gY29uY2VwdCBvZiBhIGxhcmdlIGNvbnRlbnQgbGF5ZXIuCi0g
ICAgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIGlkZW50
aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNl
LT5sYXllckxpc3QoKSk7CisKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRl
cmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyczo6Y2FsY0RyYXdFdGMiLCB0aGlzLCAwKTsKKyAgICAg
ICAgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5PExheWVyQ2hyb21pdW0sIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZCo+KHJvb3RMYXllciwgcm9vdExheWVyLCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdFJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpLCAwLCBtX21heFRleHR1cmVTaXplKTsKKyAgICB9CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgc19pblBhaW50TGF5ZXJDb250ZW50cyA9IHRydWU7CkBAIC0zNTUsMjkgKzY1MCw2IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQogICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMocmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CiB9CiAKLXN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0
KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJv
dW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKLXsKLSAgICAv
LyBJcyB0aGlzIGxheWVyIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhcmdldCBzdXJmYWNl
PwotICAgIEludFJlY3QgbGF5ZXJJblN1cmZhY2VTcGFjZSA9IHRyYW5zZm9ybS5tYXBSZWN0KGxh
eWVyQm91bmRSZWN0KTsKLSAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuY29udGFpbnMobGF5ZXJJ
blN1cmZhY2VTcGFjZSkpCi0gICAgICAgIHJldHVybiBsYXllckJvdW5kUmVjdDsKLQotICAgIC8v
IElmIHRoZSBsYXllciBkb2Vzbid0IGZpbGwgdXAgdGhlIGVudGlyZSBzdXJmYWNlLCB0aGVuIGZp
bmQgdGhlIHBhcnQgb2YKLSAgICAvLyB0aGUgc3VyZmFjZSByZWN0IHdoZXJlIHRoZSBsYXllciBj
b3VsZCBiZSB2aXNpYmxlLiBUaGlzIGF2b2lkcyB0cnlpbmcgdG8KLSAgICAvLyBwcm9qZWN0IHN1
cmZhY2UgcmVjdCBwb2ludHMgdGhhdCBhcmUgYmVoaW5kIHRoZSBwcm9qZWN0aW9uIHBvaW50Lgot
ICAgIEludFJlY3QgbWluaW1hbFN1cmZhY2VSZWN0ID0gdGFyZ2V0U3VyZmFjZVJlY3Q7Ci0gICAg
bWluaW1hbFN1cmZhY2VSZWN0LmludGVyc2VjdChsYXllckluU3VyZmFjZVNwYWNlKTsKLQotICAg
IC8vIFByb2plY3QgdGhlIGNvcm5lcnMgb2YgdGhlIHRhcmdldCBzdXJmYWNlIHJlY3QgaW50byB0
aGUgbGF5ZXIgc3BhY2UuCi0gICAgLy8gVGhpcyBib3VuZGluZyByZWN0YW5nbGUgbWF5IGJlIGxh
cmdlciB0aGFuIGl0IG5lZWRzIHRvIGJlIChiZWluZwotICAgIC8vIGF4aXMtYWxpZ25lZCksIGJ1
dCBpcyBhIHJlYXNvbmFibGUgZmlsdGVyIG9uIHRoZSBzcGFjZSB0byBjb25zaWRlci4KLSAgICAv
LyBOb24taW52ZXJ0aWJsZSB0cmFuc2Zvcm1zIHdpbGwgY3JlYXRlIGFuIGVtcHR5IHJlY3QgaGVy
ZS4KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlVG9MYXllciA9IHRyYW5z
Zm9ybS5pbnZlcnNlKCk7Ci0gICAgSW50UmVjdCBsYXllclJlY3QgPSBzdXJmYWNlVG9MYXllci5w
cm9qZWN0UXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KG1pbmltYWxTdXJmYWNlUmVjdCkpKS5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpOwotICAgIGxheWVyUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZFJl
Y3QpOwotICAgIHJldHVybiBsYXllclJlY3Q7Ci19Ci0KIHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0
ZVZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0
IEludFNpemUmIGJvdW5kcywgY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcywgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRpbGluZ1RyYW5zZm9ybSkKIHsKICAgICBpZiAodGFyZ2V0U3Vy
ZmFjZVJlY3QuaXNFbXB0eSgpIHx8IGNvbnRlbnRCb3VuZHMuaXNFbXB0eSgpKQpAQCAtNDA0LDcg
KzY3Niw3IEBAIHN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0q
IGxheWVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5CiB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsK
LSAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VM
YXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVu
ZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdl
dCgpOwogICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5k
ZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1
cmZhY2UpOwogCkBAIC00MjEsMTggKzY5MywxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheQog
ICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2Ut
PmxheWVyTGlzdCgpOworICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRl
clN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXll
ckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBj
Y0xheWVySW1wbCA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIExh
eWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwogCiAgICAg
ICAgICAgICAvLyBMYXllcnMgdGhhdCBzdGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxsIGJl
IHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVyCiAgICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlzdCBp
cyBwcm9jZXNzZWQuCi0gICAgICAgICAgICBpZiAoY2NMYXllckltcGwtPnJlbmRlclN1cmZhY2Uo
KSAmJiBjY0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCisgICAg
ICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpICE9IHJlbmRlclN1cmZhY2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gY2NMYXllckltcGwtPm93bmVyKCk7Ci0KICAg
ICAgICAgICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwogCiAgICAgICAgICAgICBp
ZiAoIWxheWVyLT5vcGFjaXR5KCkpCkBAIC00NDksMTAgKzcxOSwxMCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheQogICAgICAgICAgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIEludFJlY3QgdGFyZ2V0U3Vy
ZmFjZVJlY3QgPSBjY0xheWVySW1wbC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gY2NMYXllcklt
cGwtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJlbmRl
clN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBpZiAobGF5ZXItPmNjTGF5ZXJJ
bXBsKCktPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNl
UmVjdC5pbnRlcnNlY3QobGF5ZXItPmNjTGF5ZXJJbXBsKCktPnNjaXNzb3JSZWN0KCkpOwotICAg
ICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxheWVy
UmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJv
dW5kcygpLCBjY0xheWVySW1wbC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIEludFJl
Y3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gbGF5
ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJlbmRl
clN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXll
clNjaXNzb3IoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNlY3Qo
bGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJS
ZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXIt
PmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
KTsKIAogICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHZpc2libGVMYXll
clJlY3QpOwogCkBAIC00NzEsMTUgKzc0MSwzNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheQog
ICAgIH0KIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29uc3Qg
TGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRWaXNpYmxl
UmVjdC5pc0VtcHR5KCkgfHwgIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICBU
UkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7
Ci0gICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXllci0+Y2NMYXllcklt
cGwoKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1fcm9vdENDTGF5ZXJJbXBs
LmdldCgpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCisgICAgaWYgKCFyb290RHJhd0xh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKKyAgICByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRl
bnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXpl
KCkpKTsKKworICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KG1fdmlld3BvcnRWaXNpYmxlUmVj
dCk7CisgICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xs
IG9mZnNldC4KKyAgICByb290U2Npc3NvclJlY3QubW92ZSgtbV92aWV3cG9ydFNjcm9sbFBvc2l0
aW9uLngoKSwgLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHJvb3REcmF3TGF5
ZXItPnNldFNjaXNzb3JSZWN0KHJvb3RTY2lzc29yUmVjdCk7CisKKyAgICBDQ0xheWVyTGlzdCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5k
KHJvb3REcmF3TGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IHJvb3REcmF3TGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKKyAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOwor
CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzSW50ZXJuYWw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7CisgICAgICAgIGNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNl
LCBDQ0xheWVyU29ydGVyPihyb290RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVudGl0eU1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+bGF5
ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBtX21heFRleHR1cmVTaXplKTsKKyAgICB9CisKICAg
ICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNs
dWRpbmcgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT52aWV3cG9ydCgwLCAwLCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aWV3cG9y
dFZpc2libGVSZWN0LmhlaWdodCgpKSk7CiAKQEAgLTUxNyw3ICs4MDgsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpCiAgICAgLy8gY29ycmVjdCBvcmRlci4KICAgICBmb3IgKGludCBzdXJmYWNl
SW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+
PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKICAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZh
Y2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKLSAg
ICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFj
ZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVy
U3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICBB
U1NFUlQocmVuZGVyU3VyZmFjZSk7CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNE
cmF3KHRydWUpOwpAQCAtNTQxLDcgKzgzMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKICAg
ICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7Cisg
ICAgICAgICAgICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+
bGF5ZXJMaXN0KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBs
YXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KQogICAgICAgICAgICAg
ICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCksIHJlbmRlclN1cmZhY2Up
OwogICAgICAgICB9CkBAIC02NTgsMjY0ICs5NDksMTAgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zv
cm0KICAgICByZXR1cm4gbWFwcGVkUmVjdC5pbnRlcnNlY3RzKEZsb2F0UmVjdCgtMSwgLTEsIDIs
IDIpKTsKIH0KIAotLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcg
YXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0aGUKLS8vIG5lY2Vzc2FyeSB0cmFu
c2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCi12
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZh
Y2VzKENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVu
dE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxh
eWVyTGlzdCkKLXsKLSAgICAvLyBDb21wdXRlIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9u
IHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoaXMgbGF5ZXIgYW5kCi0gICAgLy8gYWxsIGl0cyBj
aGlsZHJlbi4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3Np
dGlvbgotICAgIC8vIGlzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGF5ZXIncyBhbmNob3IgcG9pbnQu
IEFsc28sIHRoZSBjb29yZGluYXRlIHN5c3RlbSB1c2VkCi0gICAgLy8gYXNzdW1lcyB0aGF0IHRo
ZSBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgZXZlbiB0aG91Z2ggdGhlIGNvb3JkaW5hdGVz
IHRoZSBicm93c2VyCi0gICAgLy8gZ2l2ZXMgdXMgZm9yIHRoZSBsYXllcnMgYXJlIGZvciB0aGUg
dXBwZXIgbGVmdCBjb3JuZXIuIFRoZSBZIGZsaXAgaGFwcGVucyB2aWEKLSAgICAvLyB0aGUgb3J0
aG9ncmFwaGljIHByb2plY3Rpb24gYXBwbGllZCBhdCByZW5kZXIgdGltZS4KLSAgICAvLyBUaGUg
dHJhbnNmb3JtYXRpb24gY2hhaW4gZm9yIHRoZSBsYXllciBpcyAodXNpbmcgdGhlIE1hdHJpeCB4
IFZlY3RvciBvcmRlcik6Ci0gICAgLy8gTSA9IE1bcF0gKiBUcltsXSAqIE1bbF0gKiBUcltjXQot
ICAgIC8vIFdoZXJlIE1bcF0gaXMgdGhlIHBhcmVudCBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhl
IGZ1bmN0aW9uCi0gICAgLy8gICAgICAgVHJbbF0gaXMgdGhlIHRyYW5zbGF0aW9uIG1hdHJpeCBs
b2NhdGluZyB0aGUgbGF5ZXIncyBhbmNob3IgcG9pbnQKLSAgICAvLyAgICAgICBUcltjXSBpcyB0
aGUgdHJhbnNsYXRpb24gb2Zmc2V0IGJldHdlZW4gdGhlIGFuY2hvciBwb2ludCBhbmQgdGhlIGNl
bnRlciBvZiB0aGUgbGF5ZXIKLSAgICAvLyAgICAgICBNW2xdIGlzIHRoZSBsYXllcidzIG1hdHJp
eCAoYXBwbGllZCBhdCB0aGUgYW5jaG9yIHBvaW50KQotICAgIC8vIFRoaXMgdHJhbnNmb3JtIGNy
ZWF0ZXMgYSBjb29yZGluYXRlIHN5c3RlbSB3aG9zZSBvcmlnaW4gaXMgdGhlIGNlbnRlciBvZiB0
aGUgbGF5ZXIuCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBmaW5hbCBtYXRyaXggdXNlZCBieSB0aGUg
c2hhZGVyIGZvciB0aGUgbGF5ZXIgaXMgUCAqIE0gKiBTIC4gVGhpcyBmaW5hbCBwcm9kdWN0Ci0g
ICAgLy8gaXMgY29tcHV0ZWQgaW4gZHJhd1RleHR1cmVkUXVhZCgpLgotICAgIC8vIFdoZXJlOiBQ
IGlzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeAotICAgIC8vICAgICAgICBNIGlzIHRoZSBsYXllcidz
IG1hdHJpeCBjb21wdXRlZCBhYm92ZQotICAgIC8vICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1
c3RtZW50ICh0byBzY2FsZSB1cCB0byB0aGUgbGF5ZXIgc2l6ZSkKLSAgICBJbnRTaXplIGJvdW5k
cyA9IGxheWVyLT5ib3VuZHMoKTsKLSAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gbGF5ZXIt
PmFuY2hvclBvaW50KCk7Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGxheWVyLT5wb3NpdGlv
bigpOwotCi0gICAgLy8gT2Zmc2V0IGJldHdlZW4gYW5jaG9yIHBvaW50IGFuZCB0aGUgY2VudGVy
IG9mIHRoZSBxdWFkLgotICAgIGZsb2F0IGNlbnRlck9mZnNldFggPSAoMC41IC0gYW5jaG9yUG9p
bnQueCgpKSAqIGJvdW5kcy53aWR0aCgpOwotICAgIGZsb2F0IGNlbnRlck9mZnNldFkgPSAoMC41
IC0gYW5jaG9yUG9pbnQueSgpKSAqIGJvdW5kcy5oZWlnaHQoKTsKLQotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGxheWVyTG9jYWxUcmFuc2Zvcm07Ci0gICAgLy8gTFQgPSBUcltsXQotICAgIGxh
eWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCks
IGxheWVyLT5hbmNob3JQb2ludFooKSk7Ci0gICAgLy8gTFQgPSBUcltsXSAqIE1bbF0KLSAgICBs
YXllckxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT50cmFuc2Zvcm0oKSk7Ci0gICAgLy8g
TFQgPSBUcltsXSAqIE1bbF0gKiBUcltjXQotICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNs
YXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFoo
KSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVu
dE1hdHJpeDsKLSAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRp
cGx5KGxheWVyTG9jYWxUcmFuc2Zvcm0pOwotCi0gICAgRmxvYXRSZWN0IGxheWVyUmVjdCgtMC41
ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCkuaGVpZ2h0
KCksIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOwot
ICAgIEludFJlY3QgdHJhbnNmb3JtZWRMYXllclJlY3Q7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBz
ZWVtcyBsaWtlIHRoZSB3cm9uZyBwbGFjZSB0byBzZXQgdGhpcwotICAgIGxheWVyLT5zZXRVc2Vz
TGF5ZXJTY2lzc29yKGZhbHNlKTsKLQotICAgIC8vIFRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRh
bnRzIHJlbmRlciBvbiBhIG5ldyBSZW5kZXJTdXJmYWNlIGlmIGFueSBvZgotICAgIC8vIHRoZXNl
IGNvbmRpdGlvbnMgaG9sZDoKLSAgICAvLyAxLiBUaGUgbGF5ZXIgY2xpcHMgaXRzIGRlc2NlbmRh
bnRzIGFuZCBpdHMgdHJhbnNmb3JtIGlzIG5vdCBhIHNpbXBsZSB0cmFuc2xhdGlvbi4KLSAgICAv
LyAyLiBJZiB0aGUgbGF5ZXIgaGFzIG9wYWNpdHkgIT0gMSBhbmQgZG9lcyBub3QgaGF2ZSBhIHBy
ZXNlcnZlcy0zZCB0cmFuc2Zvcm0gc3R5bGUuCi0gICAgLy8gMy4gVGhlIGxheWVyIHVzZXMgYSBt
YXNrCi0gICAgLy8gNC4gVGhlIGxheWVyIGhhcyBhIHJlcGxpY2EgKHVzZWQgZm9yIHJlZmxlY3Rp
b25zKQotICAgIC8vIDUuIFRoZSBsYXllciBkb2Vzbid0IHByZXNlcnZlLTNkIGJ1dCBpcyB0aGUg
Y2hpbGQgb2YgYSBsYXllciB3aGljaCBkb2VzLgotICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVz
LTNkIHRoZW4gd2UgZG9uJ3QgY3JlYXRlIGEgUmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQg
ZmxhdHRlbmluZwotICAgIC8vIG91dCBpdHMgY2hpbGRyZW4uIFRoZSBvcGFjaXR5IHZhbHVlIG9m
IHRoZSBjaGlsZHJlbiBsYXllcnMgaXMgbXVsdGlwbGllZCBieSB0aGUgb3BhY2l0eQotICAgIC8v
IG9mIHRoZWlyIHBhcmVudC4KLSAgICBib29sIHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGxheWVy
LT5tYXNrc1RvQm91bmRzKCkgJiYgIWlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNm
b3JtKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKSAh
PSAxICYmICFsYXllci0+cHJlc2VydmVzM0QoKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNr
aW5nID0gbGF5ZXItPm1hc2tMYXllcigpOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rp
b24gPSBsYXllci0+cmVwbGljYUxheWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERl
c2NlbmRhbnRzID0gbGF5ZXItPnBhcmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVz
M0QoKSAmJiAhbGF5ZXItPnByZXNlcnZlczNEKCkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KCk7Ci0gICAgaWYgKHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JS
ZWZsZWN0aW9uIHx8IHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgfHwgKCh1c2VTdXJmYWNl
Rm9yQ2xpcHBpbmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGxheWVyLT5kZXNjZW5kYW50
c0RyYXdzQ29udGVudCgpKSkgewotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRl
clN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBpZiAoIXJlbmRlclN1
cmZhY2UpCi0gICAgICAgICAgICByZW5kZXJTdXJmYWNlID0gbGF5ZXItPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKLQotICAgICAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBuZXcgc3VyZmFjZSBpcyB0
aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLgotICAgICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBkcmF3VHJhbnNmb3JtOwotICAgICAgICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNk
KDAuNSAqIGJvdW5kcy53aWR0aCgpLCAwLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwotICAgICAg
ICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKLQotICAgICAgICB0cmFu
c2Zvcm1lZExheWVyUmVjdCA9IEludFJlY3QoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5o
ZWlnaHQoKSk7Ci0KLSAgICAgICAgLy8gTGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGllZCB3
aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlLgotICAgICAgICBmbG9hdCBkcmF3T3BhY2l0
eSA9IGxheWVyLT5vcGFjaXR5KCk7Ci0gICAgICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYgbGF5
ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQotICAgICAgICAgICAgZHJhd09wYWNpdHkgKj0g
bGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0eSgpOwotICAgICAgICByZW5kZXJTdXJmYWNlLT5z
ZXREcmF3T3BhY2l0eShkcmF3T3BhY2l0eSk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0
eSgxKTsKLQotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRyYW5zZm9y
bSA9IGNvbWJpbmVkVHJhbnNmb3JtOwotICAgICAgICBsYXllck9yaWdpblRyYW5zZm9ybS50cmFu
c2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDAp
OwotICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0obGF5ZXJPcmlnaW5U
cmFuc2Zvcm0pOwotCi0gICAgICAgIC8vIFRoZSByZW5kZXIgc3VyZmFjZSBzY2lzc29yIHJlY3Qg
aXMgdGhlIHNjaXNzb3IgcmVjdCB0aGF0IG5lZWRzIHRvCi0gICAgICAgIC8vIGJlIGFwcGxpZWQg
YmVmb3JlIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlIG9udG8gaXRzIGNvbnRhaW5pbmcKLSAg
ICAgICAgLy8gc3VyZmFjZSBhbmQgaXMgdGhlcmVmb3JlIGV4cHJlc3NlZCBpbiB0aGUgcGFyZW50
J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNjaXNzb3JS
ZWN0KGxheWVyLT5wYXJlbnQoKSA/IGxheWVyLT5wYXJlbnQoKS0+c2Npc3NvclJlY3QoKSA6IGxh
eWVyLT5zY2lzc29yUmVjdCgpKTsKLQotICAgICAgICByZW5kZXJTdXJmYWNlLT5jbGVhckxheWVy
TGlzdCgpOwotCi0gICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgICAg
IHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihsYXllci0+bWFza0xheWVyKCkpOwotICAgICAg
ICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1
cmZhY2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1h
c2tMYXllcigwKTsKLQotICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVy
LT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICBsYXllci0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZh
Y2UpOwotCi0gICAgICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKGxheWVyKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBEVCA9IE1bcF0gKiBMVAotICAgICAgICBsYXllci0+c2V0
RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybWVkTGF5
ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsYXllci0+ZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3Qo
bGF5ZXJSZWN0KSk7Ci0KLSAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KGxheWVyLT5vcGFj
aXR5KCkpOwotCi0gICAgICAgIGlmIChsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlm
IChsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCi0gICAgICAgICAgICAgICBsYXllci0+
c2V0RHJhd09wYWNpdHkobGF5ZXItPmRyYXdPcGFjaXR5KCkgKiBsYXllci0+cGFyZW50KCktPmRy
YXdPcGFjaXR5KCkpOwotCi0gICAgICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0aGUgc2Npc3Nv
ciByZWN0IGZyb20gdGhlaXIgcGFyZW50LgotICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JS
ZWN0KGxheWVyLT5wYXJlbnQoKS0+c2Npc3NvclJlY3QoKSk7Ci0gICAgICAgICAgICBpZiAobGF5
ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJTY2lzc29yKCkpCi0gICAgICAgICAgICAgICAgbGF5ZXIt
PnNldFVzZXNMYXllclNjaXNzb3IodHJ1ZSk7Ci0KLSAgICAgICAgICAgIGxheWVyLT5zZXRUYXJn
ZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXllciAhPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQo
KSkKLSAgICAgICAgICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKLQotICAgICAgICBp
ZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkgewotICAgICAgICAgICAgSW50UmVjdCBzY2lzc29y
ID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7Ci0gICAgICAgICAgICBpZiAoIWxheWVyLT5zY2lzc29y
UmVjdCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzY2lzc29yLmludGVyc2VjdChsYXll
ci0+c2Npc3NvclJlY3QoKSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3Qoc2Np
c3Nvcik7Ci0gICAgICAgICAgICBsYXllci0+c2V0VXNlc0xheWVyU2Npc3Nvcih0cnVlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAg
ICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGxheWVyLT5wYXJlbnQoKSk7Ci0gICAgICAgIGxh
eWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgaXMgYWx3
YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCi0gICAgLy8gUmVuZGVy
U3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KLSAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVu
dCgpKSB7Ci0gICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IHRyYW5zZm9ybWVk
TGF5ZXJSZWN0OwotICAgICAgICBpZiAobGF5ZXItPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAg
ICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgp
KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50
UmVjdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0
KEludFJlY3QoKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9
IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0KLSAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBs
YXllciBkb2Vzbid0IHByZXNlcnZlIDNELgotICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkp
IHsKLSAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTEzKDApOwotICAgICAgICBzdWJsYXllck1h
dHJpeC5zZXRNMjMoMCk7Ci0gICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zMSgwKTsKLSAgICAg
ICAgc3VibGF5ZXJNYXRyaXguc2V0TTMyKDApOwotICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRN
MzMoMSk7Ci0gICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zNCgwKTsKLSAgICAgICAgc3VibGF5
ZXJNYXRyaXguc2V0TTQzKDApOwotICAgIH0KLQotICAgIC8vIEFwcGx5IHRoZSBzdWJsYXllciB0
cmFuc2Zvcm0gYXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCi0gICAgc3VibGF5ZXJNYXRyaXgu
bXVsdGlwbHkobGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOwotCi0gICAgLy8gVGhlIG9yaWdp
biBvZiB0aGUgY2hpbGRyZW4gaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIsIG5v
dCB0aGUKLSAgICAvLyBjZW50ZXIuIFRoZSBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhlIGNoaWxk
cmVuIGlzIHRoZXJlZm9yZToKLSAgICAvLyBNW3NdID0gTSAqIFRyWy1jZW50ZXJdCi0gICAgc3Vi
bGF5ZXJNYXRyaXgudHJhbnNsYXRlM2QoLWJvdW5kcy53aWR0aCgpICogMC41LCAtYm91bmRzLmhl
aWdodCgpICogMC41LCAwKTsKLQotICAgIExheWVyTGlzdCYgZGVzY2VuZGFudHMgPSAobGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpIDog
bGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQobGF5ZXIpOwotCi0gICAgdW5zaWdu
ZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkgLSAxOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewotICAgICAg
ICBDQ0xheWVySW1wbCogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKLSAgICAg
ICAgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKGNoaWxkLCBzdWJsYXllck1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOwotCi0gICAgICAgIGlmIChj
aGlsZC0+cmVuZGVyU3VyZmFjZSgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0qIGNoaWxkUmVuZGVyU3VyZmFjZSA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAg
ICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50
UmVjdCgpOwotICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJ
bnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKSk7Ci0gICAg
ICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0
KTsKLSAgICAgICAgICAgIGRlc2NlbmRhbnRzLmFwcGVuZChjaGlsZCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJh
d2FibGVDb250ZW50UmVjdCgpOwotICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0
ZShjaGlsZC0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRE
cmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tp
bmcpIHsKLSAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdh
YmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3Qo
dHJhbnNmb3JtZWRMYXllclJlY3QpOwotICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50
UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKLSAgICB9Ci0KLSAgICBpZiAobGF5ZXItPnJlbmRl
clN1cmZhY2UoKSAmJiBsYXllciAhPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSkgewotICAgICAg
ICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpOwotICAgICAgICBJbnRSZWN0IHJlbmRlclN1cmZhY2VDb250ZW50UmVjdCA9IGxheWVy
LT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgIEZsb2F0UG9pbnQgc3VyZmFjZUNlbnRl
ciA9IEZsb2F0UmVjdChyZW5kZXJTdXJmYWNlQ29udGVudFJlY3QpLmNlbnRlcigpOwotCi0gICAg
ICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24gdGhh
dCdzIHZpc2libGUuCi0gICAgICAgIEZsb2F0U2l6ZSBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5n
OwotCi0gICAgICAgIC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBhcyB0
aGUgcmVmbGVjdGlvbiBzaG91bGRuJ3QgYmUKLSAgICAgICAgLy8gY2xpcHBlZC4KLSAgICAgICAg
aWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAgIGlmICghcmVuZGVyU3Vy
ZmFjZS0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkgJiYgIXJlbmRlclN1cmZhY2VDb250ZW50UmVj
dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VTY2lzc29yUmVj
dCA9IGNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPnNjaXNzb3JSZWN0KCksIHJl
bmRlclN1cmZhY2VDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkp
OwotICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VDb250ZW50UmVjdC5pbnRlcnNlY3Qoc3Vy
ZmFjZVNjaXNzb3JSZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQg
Y2xpcHBlZFN1cmZhY2VDZW50ZXIgPSBGbG9hdFJlY3QocmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0
KS5jZW50ZXIoKTsKLSAgICAgICAgICAgIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcgPSBjbGlw
cGVkU3VyZmFjZUNlbnRlciAtIHN1cmZhY2VDZW50ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBUaGUgUmVuZGVyU3VyZmFjZSBiYWNraW5nIHRleHR1cmUgY2Fubm90IGV4Y2VlZCB0aGUgbWF4
aW11bSBzdXBwb3J0ZWQKLSAgICAgICAgLy8gdGV4dHVyZSBzaXplLgotICAgICAgICByZW5kZXJT
dXJmYWNlQ29udGVudFJlY3Quc2V0V2lkdGgoc3RkOjptaW4ocmVuZGVyU3VyZmFjZUNvbnRlbnRS
ZWN0LndpZHRoKCksIG1fbWF4VGV4dHVyZVNpemUpKTsKLSAgICAgICAgcmVuZGVyU3VyZmFjZUNv
bnRlbnRSZWN0LnNldEhlaWdodChzdGQ6Om1pbihyZW5kZXJTdXJmYWNlQ29udGVudFJlY3QuaGVp
Z2h0KCksIG1fbWF4VGV4dHVyZVNpemUpKTsKLQotICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUNv
bnRlbnRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5
ZXJMaXN0KCk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KHJlbmRlclN1
cmZhY2VDb250ZW50UmVjdCk7Ci0KLSAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBh
IG5ldyByZW5kZXIgc3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMKLSAgICAgICAgLy8gc2Np
c3NvciByZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRl
IHN5c3RlbS4KLSAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KGxheWVyLT5kcmF3YWJsZUNv
bnRlbnRSZWN0KCkpOwotCi0gICAgICAgIC8vIEFkanVzdCB0aGUgb3JpZ2luIG9mIHRoZSB0cmFu
c2Zvcm0gdG8gYmUgdGhlIGNlbnRlciBvZiB0aGUgcmVuZGVyIHN1cmZhY2UuCi0gICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5U
cmFuc2Zvcm0oKTsKLSAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2Vu
dGVyLngoKSArIGNlbnRlck9mZnNldER1ZVRvQ2xpcHBpbmcud2lkdGgoKSwgc3VyZmFjZUNlbnRl
ci55KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nLmhlaWdodCgpLCAwKTsKLSAgICAgICAg
cmVuZGVyU3VyZmFjZS0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKLQotICAgICAg
ICAvLyBDb21wdXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXNlZCB0byBkcmF3IHRoZSBy
ZXBsaWNhIG9mIHRoZSByZW5kZXIKLSAgICAgICAgLy8gc3VyZmFjZS4KLSAgICAgICAgaWYgKGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsK
LSAgICAgICAgICAgIHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRp
b24oKS55KCksIDApOwotICAgICAgICAgICAgcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHko
bGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7Ci0gICAgICAgICAgICByZXBsaWNh
RHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSAtIGFuY2hvclBvaW50
LngoKSAqIGJvdW5kcy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSAtIGFuY2hvclBvaW50Lnko
KSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5zZXRS
ZXBsaWNhRHJhd1RyYW5zZm9ybShyZXBsaWNhRHJhd1RyYW5zZm9ybSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBJZiBwcmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUgZGVzY2VuZGFu
dHMgaW4gM0Qgc28gdGhhdCB0aGV5IGNhbiBiZSAKLSAgICAvLyBkcmF3biBmcm9tIGJhY2sgdG8g
ZnJvbnQuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhlIHBh
cmVudCB0aGVuCi0gICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgcGFyZW50IHdpbGwgc29y
dCBhbGwgdGhlIGRlc2NlbmRhbnRzIGFueXdheS4KLSAgICBpZiAobGF5ZXItPnByZXNlcnZlczNE
KCkgJiYgKCFsYXllci0+cGFyZW50KCkgfHwgIWxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0Qo
KSkpCi0gICAgICAgIG1fbGF5ZXJTb3J0ZXIuc29ydCgmZGVzY2VuZGFudHMuYXQodGhpc0xheWVy
SW5kZXgpLCBkZXNjZW5kYW50cy5lbmQoKSk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5k
ZXgpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1
cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1
bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5k
ZXhdLmdldCgpOwogICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2Ug
PSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJl
bmRlclN1cmZhY2UpOwogCkBAIC05MjUsMTkgKzk2MiwxNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRl
clN1cgogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2Ut
PmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6
ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1w
bCA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChjY0xheWVy
SW1wbC0+cmVuZGVyU3VyZmFjZSgpICYmIGNjTGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkgIT0g
cmVuZGVyU3VyZmFjZSkKKyAgICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJM
aXN0W2xheWVySW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJm
YWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKGNjTGF5ZXJJbXBsKTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
bGF5ZXIpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVySW1wbCogY2NMYXllckltcGwpCit2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXll
ckNocm9taXVtKiBsYXllcikKIHsKLSAgICBMYXllckNocm9taXVtKiBsYXllciA9IGNjTGF5ZXJJ
bXBsLT5vd25lcigpOwotCiAgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtOTQ1LDE0ICs5ODAsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBs
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQotICAgICAg
ICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNjTGF5ZXJJbXBsLT5tYXNrTGF5ZXIoKSk7Cisg
ICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPm1hc2tMYXllcigpKTsKICAg
ICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKGNjTGF5ZXJJbXBsLT5yZXBsaWNhTGF5ZXIoKSk7CisgICAgICAgIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMobGF5ZXItPnJlcGxpY2FMYXllcigpKTsKIAogICAgIGlmIChsYXllci0+
ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KCk7Ci0KLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhjY0xheWVySW1wbCk7CiB9CiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRDb21wb3NpdGVPZmZzY3JlZW4oYm9vbCBjb21w
b3NpdGVPZmZzY3JlZW4pCkBAIC05NjIsMTMgKzk5NSwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuKQog
CiAgICAgbV9jb21wb3NpdGVPZmZzY3JlZW4gPSBjb21wb3NpdGVPZmZzY3JlZW47CiAKLSAgICBp
ZiAoIW1fY29tcG9zaXRlT2Zmc2NyZWVuICYmIG1fcm9vdExheWVyKQotICAgICAgICBtX3Jvb3RM
YXllci0+Y2NMYXllckltcGwoKS0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CisgICAgaWYgKCFtX2Nv
bXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RDQ0xheWVySW1wbCkKKyAgICAgICAgbV9yb290Q0NM
YXllckltcGwtPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogfQogCiBMYXllclRleHR1cmUqIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1
cm4gbV9jb21wb3NpdGVPZmZzY3JlZW4gPyBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKS0+cmVu
ZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIG1fY29tcG9z
aXRlT2Zmc2NyZWVuICYmIG1fcm9vdENDTGF5ZXJJbXBsID8gbV9yb290Q0NMYXllckltcGwtPnJl
bmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOwogfQogCiB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQpAQCAtOTg1LDcg
KzEwMTgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1
cmVUb0Rpc3BsYXkoKQogICAgIH0KIH0KIAotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVz
ZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKQorYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNl
KiByZW5kZXJTdXJmYWNlKQogewogICAgIGlmIChtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IHJl
bmRlclN1cmZhY2UpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTAxOSw3ICsxMDUyLDcgQEAg
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogdGFyZ2V0U3VyZmFjZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1
cmZhY2UpCiB7CiAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRl
clN1cmZhY2UoKSAhPSB0YXJnZXRTdXJmYWNlKSB7CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJm
YWNlKCktPmRyYXcobGF5ZXItPmdldERyYXdSZWN0KCkpOwpAQCAtMTA0Niw3ICsxMDc5LDYgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIs
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSoKICAgICB9IGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4
dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpKTsKIAotCiAgICAgaWYgKCFsYXllci0+ZG91YmxlU2lkZWQoKSkgewogICAgICAgICAvLyBG
SVhNRTogTmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgY3VtdWxhdGl2ZSByZW5kZXIgc3Vy
ZmFjZSB0cmFuc2Zvcm1zIGFsbCB0aGUgd2F5IGZyb20KICAgICAgICAgLy8gICAgICAgIHRoZSBk
ZWZhdWx0IHJlbmRlciBzdXJmYWNlIGluIG9yZGVyIHRvIGRldGVybWluZSB2aXNpYmlsaXR5LgpA
QCAtMTE0NSw3ICsxMTc3LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emVTaGFyZWRPYmplY3RzKCkKICAgICAvLyBXZSB3aWxsIGFsd2F5cyBuZWVkIHRoZXNlIHByb2dy
YW1zIHRvIHJlbmRlciwgc28gY3JlYXRlIHRoZSBwcm9ncmFtcyBlYWdlcmx5IHNvIHRoYXQgdGhl
IHNoYWRlciBjb21waWxhdGlvbiBjYW4KICAgICAvLyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhlciB3
b3JrLiBPdGhlciBwcm9ncmFtcyBhcmUgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLgog
ICAgIG1fc2hhcmVkR2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29u
dGV4dC5nZXQoKSkpOwotICAgIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0gPSBhZG9wdFB0cihuZXcg
UmVuZGVyU3VyZmFjZUNocm9taXVtOjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgIG1f
cmVuZGVyU3VyZmFjZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlOjpQcm9n
cmFtKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fdGlsZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3
IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKIAogICAgIEdM
QyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Zmx1c2goKSk7CkBAIC0xMTc3LDcgKzEyMDks
NyBAQCBjb25zdCBDQ0hlYWRzVXBEaXNwbGF5OjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpCiAgICAgcmV0dXJuIG1faGVhZHNVcERpc3BsYXlQ
cm9ncmFtLmdldCgpOwogfQogCi1jb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0q
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZVByb2dyYW0oKQorY29uc3QgQ0NS
ZW5kZXJTdXJmYWNlOjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZh
Y2VQcm9ncmFtKCkKIHsKICAgICBBU1NFUlQobV9yZW5kZXJTdXJmYWNlUHJvZ3JhbSk7CiAgICAg
aWYgKCFtX3JlbmRlclN1cmZhY2VQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CkBAIC0xMTg3LDEw
ICsxMjE5LDEwIEBAIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UHJvZ3JhbSogTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJmYWNlUHJvZ3JhCiAgICAgcmV0dXJuIG1fcmVuZGVy
U3VyZmFjZVByb2dyYW0uZ2V0KCk7CiB9CiAKLWNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
TWFza1Byb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9n
cmFtKCkKK2NvbnN0IENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW0qIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCkKIHsKICAgICBpZiAoIW1fcmVuZGVy
U3VyZmFjZU1hc2tQcm9ncmFtKQotICAgICAgICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSA9
IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFtKG1fY29udGV4
dC5nZXQoKSkpOworICAgICAgICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSA9IGFkb3B0UHRy
KG5ldyBDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwogICAg
IGlmICghbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKICAgICAg
ICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Ym9yZGVyUHJvZ3JhbTo6aW5p
dGlhbGl6ZSIsIHRoaXMsIDApOwogICAgICAgICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbS0+
aW5pdGlhbGl6ZSgpOwpAQCAtMTM0Myw4ICsxMzc1LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5
ZXJDaHJvbWl1bSogbGF5ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKGxheWVyLT5jY0xheWVySW1wbCgp
LT5yZW5kZXJTdXJmYWNlKCkpCi0gICAgICAgIGxheWVyLT5jY0xheWVySW1wbCgpLT5yZW5kZXJT
dXJmYWNlKCktPmR1bXBTdXJmYWNlKHRzLCBpbmRlbnQpOworICAgIGlmIChsYXllci0+cmVuZGVy
U3VyZmFjZSgpKQorICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kdW1wU3VyZmFjZSh0
cywgaW5kZW50KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpCiAgICAgICAgIGR1bXBSZW5kZXJTdXJmYWNlcyh0cywgaW5kZW50LCBs
YXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCmluZGV4IGNiMTQ0NzQ5NDdkNDNlNzhmNTNkMmRlOTI3YjVlNTFkMmZlMzZlMGIuLjA2Yjk0
ODY5Njg4MGIwZDQzMjBkMWFiYmVkN2M4N2YzYzE1YWJhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0u
aCIKLSNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJTa0JpdG1h
cC5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2Fu
dmFzTGF5ZXJJbXBsLmgiCkBAIC0xMjksOCArMTI4LDggQEAgcHVibGljOgogICAgIGNvbnN0IEdl
b21ldHJ5QmluZGluZyogc2hhcmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdl
b21ldHJ5LmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSog
Ym9yZGVyUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0qIGhl
YWRzVXBEaXNwbGF5UHJvZ3JhbSgpOwotICAgIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
UHJvZ3JhbSogcmVuZGVyU3VyZmFjZVByb2dyYW0oKTsKLSAgICBjb25zdCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW06Ok1hc2tQcm9ncmFtKiByZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0oKTsKKyAgICBj
b25zdCBDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7Cisg
ICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1hc2tQ
cm9ncmFtKCk7CiAgICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtKiB0aWxlclBy
b2dyYW0oKTsKICAgICBjb25zdCBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW1Td2l6emxlKiB0
aWxlclByb2dyYW1Td2l6emxlKCk7CiAgICAgY29uc3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dy
YW0qIGNhbnZhc0xheWVyUHJvZ3JhbSgpOwpAQCAtMTYyLDExICsxNjEsMTMgQEAgcHVibGljOgog
I2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9vbCBzX2luUGFpbnRMYXllckNvbnRlbnRzOwog
I2VuZGlmCisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gTGF5ZXJM
aXN0OworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlz
dDsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKIAogcHJpdmF0ZToKLSAg
ICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gTGF5ZXJMaXN0OwogICAgIHR5
cGVkZWYgSGFzaE1hcDxHcmFwaGljc0NvbnRleHQzRCosIGludD4gQ2hpbGRDb250ZXh0TWFwOwog
CiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDTGF5ZXJUcmVl
SG9zdEltcGwgd2hlbiB0aGF0IGNsYXNzIGV4aXN0cy4KQEAgLTE3NCwxNiArMTc1LDE1IEBAIHBy
aXZhdGU6CiAKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8TGF5ZXJQYWludGVy
Q2hyb21pdW0+IGNvbnRlbnRQYWludCwgYm9vbCBhY2NlbGVyYXRlRHJhd2luZyk7CiAKLSAgICB2
b2lkIHVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKICAgICB2b2lkIHVwZGF0ZVJvb3RM
YXllckNvbnRlbnRzKCk7Ci0gICAgdm9pZCB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFj
ZXMoQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJzKTsK
IAogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOwogICAgIHZv
aWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOwotICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVy
SW1wbCopOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVt
Kik7CiAKLSAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKLSAgICB2b2lkIGRyYXdMYXllcihDQ0xheWVySW1wbCosIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSopOworICAgIHZvaWQgZHJhd0xheWVyc0ludGVybmFsKCk7CisgICAgdm9pZCBk
cmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRlclN1cmZhY2UqKTsKIAogICAgIHZvaWQgZHJh
d1Jvb3RMYXllcigpOwogICAgIExheWVyVGV4dHVyZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJl
KCk7CkBAIC0xOTMsNyArMTkzLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0RHJhd1ZpZXdw
b3J0UmVjdChjb25zdCBJbnRSZWN0JiwgYm9vbCBmbGlwWSk7CiAKLSAgICBib29sIHVzZVJlbmRl
clN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKik7CisgICAgYm9vbCB1c2VSZW5kZXJTdXJm
YWNlKENDUmVuZGVyU3VyZmFjZSopOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
IApAQCAtMjIxLDcgKzIyMSw3IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8TGF5ZXJMaXN0PiBt
X2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKIAotICAgIFJlbmRlclN1cmZhY2VDaHJv
bWl1bSogbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsKKyAgICBDQ1JlbmRlclN1cmZhY2UqIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2U7CiAgICAgdW5zaWduZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklk
OwogICAgIGJvb2wgbV9jb21wb3NpdGVPZmZzY3JlZW47CiAKQEAgLTIzNSwxNCArMjM1LDE0IEBA
IHByaXZhdGU6CiAgICAgT3duUHRyPEdlb21ldHJ5QmluZGluZz4gbV9zaGFyZWRHZW9tZXRyeTsK
ICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbT4gbV9ib3JkZXJQcm9ncmFt
OwogICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5OjpQcm9ncmFtPiBtX2hlYWRzVXBEaXNwbGF5
UHJvZ3JhbTsKLSAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVtOjpQcm9ncmFtPiBtX3Jl
bmRlclN1cmZhY2VQcm9ncmFtOwotICAgIE93blB0cjxSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1h
c2tQcm9ncmFtPiBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbTsKICAgICBPd25QdHI8TGF5ZXJU
aWxlckNocm9taXVtOjpQcm9ncmFtPiBtX3RpbGVyUHJvZ3JhbTsKICAgICBPd25QdHI8TGF5ZXJU
aWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZT4gbV90aWxlclByb2dyYW1Td2l6emxlOwogICAg
IE93blB0cjxDQ0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbT4gbV9jYW52YXNMYXllclByb2dyYW07
CisgICAgT3duUHRyPENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtPiBtX3BsdWdpbkxheWVyUHJv
Z3JhbTsKKyAgICBPd25QdHI8Q0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbT4gbV9yZW5kZXJT
dXJmYWNlTWFza1Byb2dyYW07CisgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbT4g
bV9yZW5kZXJTdXJmYWNlUHJvZ3JhbTsKICAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6UkdC
QVByb2dyYW0+IG1fdmlkZW9MYXllclJHQkFQcm9ncmFtOwogICAgIE93blB0cjxDQ1ZpZGVvTGF5
ZXJJbXBsOjpZVVZQcm9ncmFtPiBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtOwotICAgIE93blB0cjxD
Q1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbT4gbV9wbHVnaW5MYXllclByb2dyYW07CiAKICAgICBP
d25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fY29udGVudHNUZXh0dXJlTWFuYWdlcjsKICAgICBPd25Q
dHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyOwpAQCAtMjYy
LDcgKzI2Miw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fYW5pbWF0aW5nOwogCi0gICAgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOworICAgIENDUmVuZGVy
U3VyZmFjZSogbV9kZWZhdWx0UmVuZGVyU3VyZmFjZTsKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9s
YXllclNvcnRlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDAw
MGYyOTUwZjQ5Y2NiNTJiYzY2MzU5NzY2ZWQxYzY4M2EzMzg5NDcuLmI2ZTM1MDZmY2ZmZjNhNTY4
MWE1NTNmNDFhNmY1ZWIyNDhlODFlNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0u
Y3BwCkBAIC00OSw3ICs0OSw3IEBAIFBsdWdpbkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hy
b21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKIAogUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gUGx1Z2luTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJl
dHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CisgICAgcmV0
dXJuIENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKIH0KIAogdm9pZCBQbHVn
aW5MYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmNwcAppbmRleCA2YTI3MjE2ZDAyNGJlOTMxMmVmNjk2MjcxOTQy
ZTYyOTVkYjg0MzY0Li5kN2M2OGRlMmZhOGVjNThhZDM1YmRmMmNiYjE4OTliNGU5ZTM4ODkzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKQEAgLTI5LDE3ICsyOSwxNSBA
QAogCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2lu
Y2x1ZGUgIkxheWVyVGV4dHVyZS5oIgotI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKwogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW5kZXJT
dXJmYWNlQ2hyb21pdW06OlJlbmRlclN1cmZhY2VDaHJvbWl1bShDQ0xheWVySW1wbCogb3duaW5n
TGF5ZXIpCitSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJlbmRlclN1cmZhY2VDaHJvbWl1bShMYXll
ckNocm9taXVtKiBvd25pbmdMYXllcikKICAgICA6IG1fb3duaW5nTGF5ZXIob3duaW5nTGF5ZXIp
CiAgICAgLCBtX21hc2tMYXllcigwKQogICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCkBAIC00OSwx
NyArNDcsNiBAQCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlJlbmRlclN1cmZhY2VDaHJvbWl1bShD
Q0xheWVySW1wbCogb3duaW5nTGF5ZXIpCiAKIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6flJlbmRl
clN1cmZhY2VDaHJvbWl1bSgpCiB7Ci0gICAgY2xlYW51cFJlc291cmNlcygpOwotfQotCi12b2lk
IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCi17Ci0gICAgaWYgKCFt
X2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGxheWVyUmVu
ZGVyZXIoKSk7Ci0KLSAgICBtX2NvbnRlbnRzVGV4dHVyZS5jbGVhcigpOwogfQogCiBMYXllclJl
bmRlcmVyQ2hyb21pdW0qIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6bGF5ZXJSZW5kZXJlcigpCkBA
IC03OSwxMDUgKzY2LDYgQEAgRmxvYXRSZWN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd2Fi
bGVDb250ZW50UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIGRyYXdhYmxlQ29udGVudFJlY3Q7CiB9
CiAKLWJvb2wgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpwcmVwYXJlQ29udGVudHNUZXh0dXJlKCkK
LXsKLSAgICBJbnRTaXplIHJlcXVpcmVkU2l6ZShtX2NvbnRlbnRSZWN0LnNpemUoKSk7Ci0gICAg
VGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gbGF5ZXJSZW5kZXJlcigpLT5yZW5kZXJT
dXJmYWNlVGV4dHVyZU1hbmFnZXIoKTsKLQotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0g
ICAgICAgIG1fY29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUobGF5ZXJSZW5k
ZXJlcigpLT5jb250ZXh0KCksIHRleHR1cmVNYW5hZ2VyKTsKLQotICAgIGlmIChtX2NvbnRlbnRz
VGV4dHVyZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgh
bV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRTaXplLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSkpIHsKLSAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnJlbGVhc2VDb250ZW50c1RleHR1
cmUoKQotewotICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZS0+dW5yZXNlcnZlKCk7Ci19Ci0KLXZv
aWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3U3VyZmFjZShDQ0xheWVySW1wbCogbWFza0xh
eWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkKLXsKLSAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7
Ci0KLSAgICBpbnQgc2hhZGVyTWF0cml4TG9jYXRpb24gPSAtMTsKLSAgICBpbnQgc2hhZGVyQWxw
aGFMb2NhdGlvbiA9IC0xOwotICAgIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UHJvZ3Jh
bSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+cmVuZGVyU3VyZmFjZVByb2dyYW0oKTsKLSAg
ICBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFtKiBtYXNrUHJvZ3JhbSA9
IGxheWVyUmVuZGVyZXIoKS0+cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7Ci0gICAgQVNTRVJU
KHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7Ci0gICAgYm9vbCB1c2VNYXNrID0g
ZmFsc2U7Ci0gICAgaWYgKG1hc2tMYXllciAmJiBtYXNrTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7
Ci0gICAgICAgIGlmICghbWFza0xheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQzRC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgICAgICBHTEMoY29u
dGV4dDNELCBjb250ZXh0M0QtPnVzZVByb2dyYW0obWFza1Byb2dyYW0tPnByb2dyYW0oKSkpOwot
ICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29u
dGV4dDNELT51bmlmb3JtMWkobWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxv
Y2F0aW9uKCksIDApKTsKLSAgICAgICAgICAgIG1fY29udGVudHNUZXh0dXJlLT5iaW5kVGV4dHVy
ZSgpOwotICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOwotICAgICAgICAgICAgR0xDKGNvbnRleHQz
RCwgY29udGV4dDNELT51bmlmb3JtMWkobWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkubWFz
a1NhbXBsZXJMb2NhdGlvbigpLCAxKSk7Ci0gICAgICAgICAgICBtYXNrTGF5ZXItPmJpbmRDb250
ZW50c1RleHR1cmUoKTsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+YWN0
aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICAgICAgICAgIHNo
YWRlck1hdHJpeExvY2F0aW9uID0gbWFza1Byb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExv
Y2F0aW9uKCk7Ci0gICAgICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0gbWFza1Byb2dyYW0t
PmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOwotICAgICAgICAgICAgdXNlTWFzayA9
IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXVzZU1hc2spIHsKLSAgICAgICAg
R0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkp
OwotICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKLSAgICAgICAgR0xD
KGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIo
KS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9
IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7Ci0gICAgICAgIHNoYWRl
ckFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24o
KTsKLSAgICB9Ci0gICAgCi0gICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChsYXll
clJlbmRlcmVyKCktPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4
KCksIGRyYXdUcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jb250ZW50UmVjdC53aWR0aCgpLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgpLCBtX2RyYXdP
cGFjaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlck1h
dHJpeExvY2F0aW9uLCBzaGFkZXJBbHBoYUxvY2F0aW9uKTsKLX0KLQotdm9pZCBSZW5kZXJTdXJm
YWNlQ2hyb21pdW06OmRyYXcoY29uc3QgSW50UmVjdCYpCi17Ci0gICAgaWYgKG1fc2tpcHNEcmF3
IHx8ICFtX2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBC
eSB1c2luZyB0aGUgc2FtZSBSZW5kZXJTdXJmYWNlIGZvciBib3RoIHRoZSBjb250ZW50IGFuZCBp
dHMgcmVmbGVjdGlvbiwKLSAgICAvLyBpdCdzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gYXBw
bHkgYSBzZXBhcmF0ZSBtYXNrIHRvIHRoZSByZWZsZWN0aW9uIGxheWVyCi0gICAgLy8gb3IgY29y
cmVjdGx5IGhhbmRsZSBvcGFjaXR5IGluIHJlZmxlY3Rpb25zIChvcGFjaXR5IG11c3QgYmUgYXBw
bGllZCBhZnRlciBkcmF3aW5nCi0gICAgLy8gYm90aCB0aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0
aW9uKS4gVGhlIHNvbHV0aW9uIGlzIHRvIGludHJvZHVjZSB5ZXQgYW5vdGhlciBSZW5kZXJTdXJm
YWNlCi0gICAgLy8gdG8gZHJhdyB0aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0aW9uIGluLiBGb3Ig
bm93IHdlIG9ubHkgYXBwbHkgYSBzZXBhcmF0ZSByZWZsZWN0aW9uCi0gICAgLy8gbWFzayBpZiB0
aGUgY29udGVudHMgZG9uJ3QgaGF2ZSBhIG1hc2sgb2YgdGhlaXIgb3duLgotICAgIENDTGF5ZXJJ
bXBsKiByZXBsaWNhTWFza0xheWVyID0gbV9tYXNrTGF5ZXI7Ci0gICAgaWYgKCFtX21hc2tMYXll
ciAmJiBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYU1hc2tM
YXllciA9IG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKTsKLQotICAg
IGlmIChtX293bmluZ0xheWVyLT5wYXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5wYXJlbnQoKS0+
dXNlc0xheWVyU2Npc3NvcigpKQotICAgICAgICBsYXllclJlbmRlcmVyKCktPnNldFNjaXNzb3JU
b1JlY3QobV9zY2lzc29yUmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBHTEMobGF5ZXJSZW5kZXJl
cigpLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKLQotCi0gICAgLy8gUmVmbGVjdGlvbiBkcmF3
cyBiZWZvcmUgdGhlIGxheWVyLgotICAgIGlmIChtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIo
KSkKLSAgICAgICAgZHJhd1N1cmZhY2UocmVwbGljYU1hc2tMYXllciwgbV9yZXBsaWNhRHJhd1Ry
YW5zZm9ybSk7Ci0KLSAgICBkcmF3U3VyZmFjZShtX21hc2tMYXllciwgbV9kcmF3VHJhbnNmb3Jt
KTsKLX0KLQotdm9pZCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmNsZWFyTGF5ZXJMaXN0KCkKLXsK
LSAgICBtX2xheWVyTGlzdC5jbGVhcigpOwotfQotCiBTdHJpbmcgUmVuZGVyU3VyZmFjZUNocm9t
aXVtOjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlJlbmRlclN1
cmZhY2UoaWQ9JWQsb3duZXI9JXMpIiwgbV9vd25pbmdMYXllci0+aWQoKSwgbV9vd25pbmdMYXll
ci0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0u
aAppbmRleCAxZDJjYjYyM2Y5YjFjMjIzNjU3ZWQwYzAwYTRkZjU0MmM4NWM0YWZkLi5jMzRlZGFl
MWFmN2ZlZDhkNWM4MjlhNTQ3MmIxMzc4MjMzZWU0NjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaApAQCAtMzksMTQgKzM5LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOwogY2xhc3MgTGF5ZXJUZXh0dXJlOwogCiBjbGFzcyBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlclN1cmZhY2VDaHJv
bWl1bSk7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyU3VyZmFjZUNocm9taXVtKENDTGF5
ZXJJbXBsKik7CisgICAgZXhwbGljaXQgUmVuZGVyU3VyZmFjZUNocm9taXVtKExheWVyQ2hyb21p
dW0qKTsKICAgICB+UmVuZGVyU3VyZmFjZUNocm9taXVtKCk7CiAKICAgICBib29sIHByZXBhcmVD
b250ZW50c1RleHR1cmUoKTsKQEAgLTYwLDkgKzYwLDYgQEAgcHVibGljOgogICAgIC8vIFJldHVy
bnMgdGhlIHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgUmVuZGVyU3VyZmFjZSBpbmNsdWRpbmcgYW55
IHJlZmxlY3Rpb24uCiAgICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdDsK
IAotICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGxheWVyTGlzdCgpIHsgcmV0dXJu
IG1fbGF5ZXJMaXN0OyB9Ci0gICAgdm9pZCBjbGVhckxheWVyTGlzdCgpOwotCiAgICAgY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRSZWN0OyB9CiAg
ICAgdm9pZCBzZXRDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgeyBtX2Nv
bnRlbnRSZWN0ID0gY29udGVudFJlY3Q7IH0KIApAQCAtNzIsOSArNjksNiBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KICAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIHsgbV9kcmF3VHJhbnNmb3JtID0g
ZHJhd1RyYW5zZm9ybTsgfQogCi0gICAgQ0NMYXllckltcGwqIG1hc2tMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fbWFza0xheWVyOyB9Ci0gICAgdm9pZCBzZXRNYXNrTGF5ZXIoQ0NMYXllckltcGwq
IG1hc2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQotCiAgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG9yaWdpblRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Jp
Z2luVHJhbnNmb3JtOyB9CiAgICAgdm9pZCBzZXRPcmlnaW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG9yaWdpblRyYW5zZm9ybSkgeyBtX29yaWdpblRyYW5zZm9ybSA9IG9y
aWdpblRyYW5zZm9ybTsgfQogCkBAIC04NywyOCArODEsMjYgQEAgcHVibGljOgogICAgIGJvb2wg
c2tpcHNEcmF3KCkgY29uc3QgeyByZXR1cm4gbV9za2lwc0RyYXc7IH0KICAgICB2b2lkIHNldFNr
aXBzRHJhdyhib29sIHNraXBzRHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsgfQogCi0g
ICAgTGF5ZXJUZXh0dXJlKiBjb250ZW50c1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRzVGV4dHVyZS5nZXQoKTsgfQorICAgIHZvaWQgY2xlYXJMYXllckxpc3QoKSB7IG1fbGF5ZXJM
aXN0LmNsZWFyKCk7IH0KKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVy
TGlzdCgpIHsgcmV0dXJuIG1fbGF5ZXJMaXN0OyB9CiAKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5k
aW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGE+IFByb2dy
YW07Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdt
ZW50U2hhZGVyUkdCQVRleEFscGhhTWFzaz4gTWFza1Byb2dyYW07CisgICAgdm9pZCBzZXRNYXNr
TGF5ZXIoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVy
OyB9CiAKIHByaXZhdGU6CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVy
KCk7Ci0gICAgdm9pZCBkcmF3U3VyZmFjZShDQ0xheWVySW1wbCogbWFza0xheWVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSk7CiAKLSAgICBDQ0xheWVySW1wbCog
bV9vd25pbmdMYXllcjsKLSAgICBDQ0xheWVySW1wbCogbV9tYXNrTGF5ZXI7CisgICAgTGF5ZXJD
aHJvbWl1bSogbV9vd25pbmdMYXllcjsKKyAgICBMYXllckNocm9taXVtKiBtX21hc2tMYXllcjsK
IAogICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKICAgICBib29sIG1fc2tpcHNEcmF3OwogCi0g
ICAgT3duUHRyPExheWVyVGV4dHVyZT4gbV9jb250ZW50c1RleHR1cmU7CiAgICAgZmxvYXQgbV9k
cmF3T3BhY2l0eTsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9ybTsKICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKICAgICBJbnRSZWN0IG1fc2Npc3Nv
clJlY3Q7Ci0gICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBtX2xheWVyTGlzdDsKKyAg
ICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbV9sYXllckxpc3Q7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCAzZTllNmRkMDQ4ZjIyMTVkMjg5NDkx
NzU5MzQxZDdlMzc2YmMwZDI3Li4yYThjNTUxYTgwYTJkNmYxZjIwMjY3ZDgyOTQyMGU4NWY3Y2Nk
ZTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTYwLDcgKzYwLDcgQEAg
VGlsZWRMYXllckNocm9taXVtOjp+VGlsZWRMYXllckNocm9taXVtKCkKIAogUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0g
ICAgcmV0dXJuIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBpZCgpKTsKKyAgICByZXR1
cm4gQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKGlkKCkpOwogfQogCiB2b2lkIFRpbGVkTGF5ZXJD
aHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OnNldElzTWFzayhib29sIGlzTWFzaykKIAogVHJhbnNmb3JtYXRpb25N
YXRyaXggVGlsZWRMYXllckNocm9taXVtOjp0aWxpbmdUcmFuc2Zvcm0oKSBjb25zdAogewotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFu
c2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBkcmF3VHJhbnNm
b3JtKCk7CiAKICAgICBpZiAoY29udGVudEJvdW5kcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHRyYW5zZm9ybTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKaW5kZXggNmFkNGIxMTJk
MmE0Y2Y3ZWYxMTZjYWYxM2Q5MTRlMzdiYmFjNzIwOC4uZDBmZDBjZTUyM2Q2Mzg4NGJlOTMyZTFi
ZDQxNjU4MmYyNTc2MmU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKQEAgLTc0LDgg
Kzc0LDYgQEAgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hy
b25pemVUcmVlUmVjdXJzaXZlKExheWVyQ2hyb21pdW0KICAgICBlbHNlCiAgICAgICAgIGNjTGF5
ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoMCk7CiAKLSAgICBsYXllci0+c2V0Q0NMYXllckltcGwo
Y2NMYXllckltcGwuZ2V0KCkpOwotCiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8oY2NMYXll
ckltcGwuZ2V0KCkpOwogICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxlYXNlKCk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCAyZmNkMjE5MzgyYTcwYzVkNzcyYjZhNmQx
MzI2NTEyNTgxZTAxODZkLi4yMmJkMzBjNzhkNDY4NzJhOGIyN2EwYmU4ZDFlOGEzNjRkZjliMjc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgVmlk
ZW9MYXllckNocm9taXVtOjp+VmlkZW9MYXllckNocm9taXVtKCkKIAogUGFzc1JlZlB0cjxDQ0xh
eWVySW1wbD4gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAg
cmV0dXJuIENDVmlkZW9MYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOworICAgIHJl
dHVybiBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKIH0KIAogdm9pZCBWaWRl
b0xheWVyQ2hyb21pdW06OmRlbGV0ZVRleHR1cmVzSW5Vc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuY3BwCmluZGV4IDcxMjViOTY4MDdiNDBmYzM0ZWIxYzg0ZTdhOWQ5ODMxNzVh
MTgzZWIuLjg2NWZkNzI0ZTVkODZiMjVhMzQ3ZDA0YzQxODM4YzRjNWZjMDk5NWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFz
TGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKQEAgLTI5LDE1ICsyOSwxNCBAQAogCiAjaW5j
bHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKIAotI2luY2x1ZGUgIkNhbnZhc0xheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVySW1w
bChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQotICAgIDogQ0NMYXllckltcGwob3duZXIs
IGlkKQorQ0NDYW52YXNMYXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKGludCBpZCkKKyAgICA6
IENDTGF5ZXJJbXBsKGlkKQogICAgICwgbV90ZXh0dXJlSWQoMCkKICAgICAsIG1faGFzQWxwaGEo
dHJ1ZSkKICAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuaAppbmRleCBjMTdhZjVmYzdlYmNlMjUwYTM2YzM2YjhjZTU4MTE5MGVlOTEz
YTk3Li5kODVlYmE4ZGU4ODNhYmU3ZTBlMDllNTdlNDAwMWZmMGY2YzRmYTUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xh
eWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBDQ0NhbnZhc0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NDYW52YXNMYXllckltcGw+IGNyZWF0ZShM
YXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ2Fu
dmFzTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDQ0NhbnZhc0xheWVySW1wbChvd25lciwgaWQpKTsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDQ0NhbnZhc0xheWVySW1wbChpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5D
Q0NhbnZhc0xheWVySW1wbCgpOwogCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEhhc0FscGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9CiAg
ICAgdm9pZCBzZXRQcmVtdWx0aXBsaWVkQWxwaGEoYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEpIHsg
bV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBwcmVtdWx0aXBsaWVkQWxwaGE7IH0KIHByaXZhdGU6Ci0g
ICAgQ0NDYW52YXNMYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CisgICAgZXhwbGljaXQg
Q0NDYW52YXNMYXllckltcGwoaW50KTsKIAogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAg
IGJvb2wgbV9oYXNBbHBoYTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAyNGU5YjVmOWVm
MGQyMDc4YjRiMWI3ZTNkOGY2ODQxODAyNjk1MmIwLi5mYWI1MzE2ODBiNWY4NzU4MTJiYmQ0ODAz
MTViZmJhM2Y2NDBmYjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMiw3ICszMiw2
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSB7CkBAIC02MCw5ICs1OSw4IEBAIHZvaWQgdG9HTE1hdHJpeChmbG9hdCogZmxh
dHRlbmVkLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DQ0xheWVySW1wbDo6Q0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSog
b3duZXIsIGludCBpZCkKLSAgICA6IG1fb3duZXIob3duZXIpCi0gICAgLCBtX3BhcmVudCgwKQor
Q0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKGludCBpZCkKKyAgICA6IG1fcGFyZW50KDApCiAgICAg
LCBtX2xheWVySWQoaWQpCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQogICAgICwgbV9h
bmNob3JQb2ludFooMCkKQEAgLTgzLDggKzgxLDYgQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBs
KExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAKIENDTGF5ZXJJbXBsOjp+Q0NMYXllcklt
cGwoKQogewotICAgIGlmIChtX293bmVyKQotICAgICAgICBtX293bmVyLT5zZXRDQ0xheWVySW1w
bCgwKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6YWRkQ2hpbGQoUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gY2hpbGQpCkBAIC0xMjIsMTAgKzExOCwxMCBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzZXRM
YXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCiAgICAgbV9sYXll
clJlbmRlcmVyID0gcmVuZGVyZXI7CiB9CiAKLVJlbmRlclN1cmZhY2VDaHJvbWl1bSogQ0NMYXll
ckltcGw6OmNyZWF0ZVJlbmRlclN1cmZhY2UoKQordm9pZCBDQ0xheWVySW1wbDo6Y3JlYXRlUmVu
ZGVyU3VyZmFjZSgpCiB7Ci0gICAgbV9yZW5kZXJTdXJmYWNlID0gYWRvcHRQdHIobmV3IFJlbmRl
clN1cmZhY2VDaHJvbWl1bSh0aGlzKSk7Ci0gICAgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZS5nZXQo
KTsKKyAgICBBU1NFUlQoIW1fcmVuZGVyU3VyZmFjZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlID0g
YWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZSh0aGlzKSk7CiB9CiAKIGJvb2wgQ0NMYXllcklt
cGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkKQEAgLTE0MiwxOSArMTM4LDggQEAgdm9pZCBD
Q0xheWVySW1wbDo6ZHJhdygpCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQg
Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQotewotICAgIG1fb3duZXIt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKLX0KLQotdm9pZCBDQ0xheWVySW1wbDo6dW5y
ZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKLXsKLSAgICBtX293bmVyLT51bnJlc2VydmVDb250ZW50
c1RleHR1cmUoKTsKLX0KLQogdm9pZCBDQ0xheWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZSgp
CiB7Ci0gICAgbV9vd25lci0+YmluZENvbnRlbnRzVGV4dHVyZSgpOwogfQogCiB2b2lkIENDTGF5
ZXJJbXBsOjpjbGVhbnVwUmVzb3VyY2VzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IGJkMjc2
ZmU4MDkwNzY3MTZhNjhkMDk2NzdjZGIxYjVhNjRmOTBmZTMuLjdjNWYzNjM2NjY0YjBiNzJmYmVk
NWJlOGEzNjY0NjY2ODc4MmMyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZh
Y2UuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNDAsMTMgKzQxLDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTsKLWNsYXNzIFJlbmRlclN1cmZhY2VDaHJvbWl1bTsKIAogY2xhc3MgQ0NMYXll
ckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4gewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIs
IGludCBpZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKGludCBp
ZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NMYXllckltcGwob3duZXIs
IGlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NMYXllckltcGwoaWQpKTsKICAg
ICB9CiAgICAgdmlydHVhbCB+Q0NMYXllckltcGwoKTsKIApAQCAtNzAsNyArNzAsNiBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRz
VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCk7CiAKQEAg
LTEyNCw5ICsxMjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVy
UmVuZGVyZXJDaHJvbWl1bSopOwogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsgfQogCi0gICAgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0KLSAgICBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclN1
cmZhY2UuZ2V0KCk7IH0KKyAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7IH0KKyAgICB2b2lkIGNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKICAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZSgpIHsgbV9yZW5kZXJTdXJm
YWNlLmNsZWFyKCk7IH0KIAogICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3T3BhY2l0eTsgfQpAQCAtMTM0LDkgKzEzMiw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IEludFJlY3QmIHNjaXNzb3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQog
ICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX3NjaXNzb3JS
ZWN0ID0gcmVjdDsgfQotCi0gICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiB0YXJnZXRSZW5kZXJT
dXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5kZXJTdXJmYWNlOyB9Ci0gICAgdm9p
ZCBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogc3VyZmFjZSkg
eyBtX3RhcmdldFJlbmRlclN1cmZhY2UgPSBzdXJmYWNlOyB9CisgICAgQ0NSZW5kZXJTdXJmYWNl
KiB0YXJnZXRSZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRSZW5kZXJTdXJm
YWNlOyB9CisgICAgdm9pZCBzZXRUYXJnZXRSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSog
c3VyZmFjZSkgeyBtX3RhcmdldFJlbmRlclN1cmZhY2UgPSBzdXJmYWNlOyB9CiAKICAgICBjb25z
dCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQogICAgIHZvaWQg
c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIGJvdW5kcykgeyBtX2JvdW5kcyA9IGJvdW5kczsgfQpA
QCAtMTYwLDE1ICsxNTcsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVy
UHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKLSAgICAvLyBIQUNL
IFRPRE8gZml4IHRoaXMKLSAgICBMYXllckNocm9taXVtKiBvd25lcigpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXI7IH0KLSAgICB2b2lkIGNsZWFyT3duZXIoKSB7IG1fb3duZXIgPSAwOyB9Ci0KIHBy
b3RlY3RlZDoKLSAgICAvLyBGb3Igbm93LCBDQ0xheWVySW1wbHMgaGF2ZSBhIGJhY2sgcG9pbnRl
ciB0byB0aGVpciBMYXllckNocm9taXVtLgotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBhZnRl
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzMgaXMgZml4ZWQu
Ci0gICAgTGF5ZXJDaHJvbWl1bSogbV9vd25lcjsKLSAgICBDQ0xheWVySW1wbChMYXllckNocm9t
aXVtKiwgaW50KTsKKyAgICBleHBsaWNpdCBDQ0xheWVySW1wbChpbnQpOwogCiAgICAgc3RhdGlj
IHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpOwogCkBAIC0yMTYsNyAr
MjA2LDcgQEAgcHJpdmF0ZToKICAgICAvLyBlaXRoZXIgdG8gdGhpcyBsYXllciAoaWYgbV90YXJn
ZXRSZW5kZXJTdXJmYWNlID09IG1fcmVuZGVyU3VyZmFjZSkgb3IKICAgICAvLyB0byBhbiBhbmNl
c3RvciBvZiB0aGlzIGxheWVyLiBUaGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGRldGVybWluZXMg
dGhlCiAgICAgLy8gY29vcmRpbmF0ZSBzeXN0ZW0gdGhlIGxheWVyJ3MgdHJhbnNmb3JtcyBhcmUg
cmVsYXRpdmUgdG8uCi0gICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX3RhcmdldFJlbmRlclN1
cmZhY2U7CisgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX3RhcmdldFJlbmRlclN1cmZhY2U7CiAKICAg
ICAvLyBUaGUgZ2xvYmFsIGRlcHRoIHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLiBU
aGlzIHZhbHVlIGlzIHVzZWQKICAgICAvLyB0byBzb3J0IGxheWVycyBmcm9tIGJhY2sgdG8gZnJv
bnQuCkBAIC0yMzYsNyArMjI2LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFJlbmRlciBzdXJmYWNl
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLiBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50
cwogICAgIC8vIHdpbGwgcmVuZGVyIHRvIHRoaXMgc3VyZmFjZS4KLSAgICBPd25QdHI8UmVuZGVy
U3VyZmFjZUNocm9taXVtPiBtX3JlbmRlclN1cmZhY2U7CisgICAgT3duUHRyPENDUmVuZGVyU3Vy
ZmFjZT4gbV9yZW5kZXJTdXJmYWNlOwogCiAgICAgLy8gSGllcmFyY2hpY2FsIGJvdW5kaW5nIHJl
Y3QgY29udGFpbmluZyB0aGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cy4KICAgICBJbnRSZWN0
IG1fZHJhd2FibGVDb250ZW50UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAKaW5kZXgg
YjJjNTU3NDJmNzlmOGQzYjU3NDFiZWM3ZTU4OGU3ZDhiMWNhMjdkMy4uZDEwMWNjMDdhMTRjMjkz
MThiZWUwMzA4NTkxZDM1NDJiYmE5ODlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAK
QEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKIAotI2lu
Y2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSA8bGlt
aXRzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0yNzgsNyArMjc4LDcgQEAgdm9pZCBD
Q0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVzKExheWVyTGlzdDo6aXRlcmF0b3IgZmlyc3Qs
IExheWVyTGlzdDo6aXRlcmEKICAgICBmb3IgKExheWVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBmaXJzdDsgaXQgPCBsYXN0OyBpdCsrKSB7CiAgICAgICAgIG1fbm9kZXMuYXBwZW5kKEdyYXBo
Tm9kZShpdC0+Z2V0KCkpKTsKICAgICAgICAgR3JhcGhOb2RlJiBub2RlID0gbV9ub2Rlcy5hdCht
X25vZGVzLnNpemUoKSAtIDEpOwotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRl
clN1cmZhY2UgPSBub2RlLmxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIENDUmVuZGVy
U3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IG5vZGUubGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAg
ICAgICAgaWYgKCFub2RlLmxheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiAhcmVuZGVyU3VyZmFjZSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5j
cHAKaW5kZXggZGVlMWVmMGI3ZTZhMmRkYWQzNzVmODkxZjlkZTA1NjU5ZDI4NmMyMS4uOGEyNWM1
YjU0MWUyZTM0NTBiOTNmOGQxZmZjZDYyMmNiMjQ3NmIyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1
Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzEsMTMgKzMxLDEyIEBACiAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1
ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5M
YXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKLSAgICA6IENDTGF5ZXJJbXBs
KG93bmVyLCBpZCkKK0NDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdpbkxheWVySW1wbChpbnQgaWQp
CisgICAgOiBDQ0xheWVySW1wbChpZCkKICAgICAsIG1fdGV4dHVyZUlkKDApCiB7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Bs
dWdpbkxheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAppbmRleCA2ZTQ4MmQxNDY0YjBmOGU3ODkyMDYxNzVk
MjEyMDNhODllMDhkMjczLi45YjRjNTM2NzIzZDJhYjE2ZGRkNDI5MDYzZGM3ZmY1YjRmMWQxMjc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKQEAgLTM0LDkgKzM0LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ1BsdWdpbkxheWVySW1wbCA6IHB1YmxpYyBDQ0xh
eWVySW1wbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NQbHVnaW5MYXllcklt
cGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDUGx1Z2luTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1BsdWdpbkxheWVySW1wbChvd25lciwgaWQpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1BsdWdpbkxheWVySW1wbChpZCkpOwogICAgIH0KICAg
ICB2aXJ0dWFsIH5DQ1BsdWdpbkxheWVySW1wbCgpOwogCkBAIC00OSw3ICs0OSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlk
OyB9CiAKIHByaXZhdGU6Ci0gICAgQ0NQbHVnaW5MYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGlu
dCk7CisgICAgZXhwbGljaXQgQ0NQbHVnaW5MYXllckltcGwoaW50KTsKIAogICAgIHVuc2lnbmVk
IG1fdGV4dHVyZUlkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjI2ZmFmNzIzMDdhOTJhZWMzOTAxMjIxZDU0ZWYwZmY3NjY3NjNhYTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiQ0NS
ZW5kZXJTdXJmYWNlLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0NSZW5kZXJTdXJmYWNlOjpDQ1JlbmRlclN1cmZhY2Uo
Q0NMYXllckltcGwqIG93bmluZ0xheWVyKQorICAgIDogbV9vd25pbmdMYXllcihvd25pbmdMYXll
cikKKyAgICAsIG1fbWFza0xheWVyKDApCisgICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKKyAgICAs
IG1fZHJhd09wYWNpdHkoMSkKK3sKK30KKworQ0NSZW5kZXJTdXJmYWNlOjp+Q0NSZW5kZXJTdXJm
YWNlKCkKK3sKKyAgICBjbGVhbnVwUmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgQ0NSZW5kZXJTdXJm
YWNlOjpjbGVhbnVwUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKKworICAgIG1f
Y29udGVudHNUZXh0dXJlLmNsZWFyKCk7Cit9CisKK0xheWVyUmVuZGVyZXJDaHJvbWl1bSogQ0NS
ZW5kZXJTdXJmYWNlOjpsYXllclJlbmRlcmVyKCkKK3sKKyAgICBBU1NFUlQobV9vd25pbmdMYXll
cik7CisgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPmxheWVyUmVuZGVyZXIoKTsKK30KKworRmxv
YXRSZWN0IENDUmVuZGVyU3VyZmFjZTo6ZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0Cit7Cisg
ICAgRmxvYXRSZWN0IGxvY2FsQ29udGVudFJlY3QoLTAuNSAqIG1fY29udGVudFJlY3Qud2lkdGgo
KSwgLTAuNSAqIG1fY29udGVudFJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9jb250ZW50UmVjdC53aWR0aCgpLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgpKTsK
KyAgICBGbG9hdFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IG1fZHJhd1RyYW5zZm9ybS5tYXBS
ZWN0KGxvY2FsQ29udGVudFJlY3QpOworICAgIGlmIChtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5
ZXIoKSkKKyAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShtX3JlcGxpY2FEcmF3VHJh
bnNmb3JtLm1hcFJlY3QobG9jYWxDb250ZW50UmVjdCkpOworCisgICAgcmV0dXJuIGRyYXdhYmxl
Q29udGVudFJlY3Q7Cit9CisKK2Jvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQ29udGVudHNU
ZXh0dXJlKCkKK3sKKyAgICBJbnRTaXplIHJlcXVpcmVkU2l6ZShtX2NvbnRlbnRSZWN0LnNpemUo
KSk7CisgICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gbGF5ZXJSZW5kZXJlcigp
LT5yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKTsKKworICAgIGlmICghbV9jb250ZW50c1Rl
eHR1cmUpCisgICAgICAgIG1fY29udGVudHNUZXh0dXJlID0gTGF5ZXJUZXh0dXJlOjpjcmVhdGUo
bGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCksIHRleHR1cmVNYW5hZ2VyKTsKKworICAgIGlmICht
X2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRTaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSkpIHsKKyAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1Rl
eHR1cmUoKQoreworICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZS0+dW5yZXNlcnZlKCk7Cit9CisK
Kwordm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdTdXJmYWNlKENDTGF5ZXJJbXBsKiBtYXNrTGF5
ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKQoreworICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKTsK
KworICAgIGludCBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IC0xOworICAgIGludCBzaGFkZXJBbHBo
YUxvY2F0aW9uID0gLTE7CisgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKiBwcm9n
cmFtID0gbGF5ZXJSZW5kZXJlcigpLT5yZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOworICAgIGNvbnN0
IENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW0qIG1hc2tQcm9ncmFtID0gbGF5ZXJSZW5kZXJl
cigpLT5yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0oKTsKKyAgICBBU1NFUlQocHJvZ3JhbSAmJiBw
cm9ncmFtLT5pbml0aWFsaXplZCgpKTsKKyAgICBib29sIHVzZU1hc2sgPSBmYWxzZTsKKyAgICBp
ZiAobWFza0xheWVyICYmIG1hc2tMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgaWYg
KCFtYXNrTGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29udGV4dDNE
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRl
eHQzRC0+dXNlUHJvZ3JhbShtYXNrUHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAgICAgICAgICBH
TEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPnVuaWZv
cm0xaShtYXNrUHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkp
OworICAgICAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0dXJlKCk7CisgICAgICAg
ICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkUxKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0Qt
PnVuaWZvcm0xaShtYXNrUHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxvY2F0
aW9uKCksIDEpKTsKKyAgICAgICAgICAgIG1hc2tMYXllci0+YmluZENvbnRlbnRzVGV4dHVyZSgp
OworICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgICAgICAgICAgc2hhZGVyTWF0cml4TG9j
YXRpb24gPSBtYXNrUHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAg
ICAgICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24gPSBtYXNrUHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgICAgICAgICB1c2VNYXNrID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICghdXNlTWFzaykgeworICAgICAgICBHTEMoY29udGV4dDNE
LCBjb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAgICAgIG1f
Y29udGVudHNUZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgICAgICBHTEMoY29udGV4dDNELCBj
b250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2Nh
dGlvbigpLCAwKSk7CisgICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVy
dGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICAgICAgc2hhZGVyQWxwaGFMb2NhdGlv
biA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOworICAgIH0KKwor
ICAgIExheWVyQ2hyb21pdW06OmRyYXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5jb250
ZXh0KCksIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3Jt
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29udGVudFJlY3Qu
d2lkdGgoKSwgbV9jb250ZW50UmVjdC5oZWlnaHQoKSwgbV9kcmF3T3BhY2l0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiwgc2hh
ZGVyQWxwaGFMb2NhdGlvbik7Cit9CisKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3KGNvbnN0
IEludFJlY3QmKQoreworICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUp
CisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogQnkgdXNpbmcgdGhlIHNhbWUgUmVuZGVy
U3VyZmFjZSBmb3IgYm90aCB0aGUgY29udGVudCBhbmQgaXRzIHJlZmxlY3Rpb24sCisgICAgLy8g
aXQncyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIGFwcGx5IGEgc2VwYXJhdGUgbWFzayB0byB0
aGUgcmVmbGVjdGlvbiBsYXllcgorICAgIC8vIG9yIGNvcnJlY3RseSBoYW5kbGUgb3BhY2l0eSBp
biByZWZsZWN0aW9ucyAob3BhY2l0eSBtdXN0IGJlIGFwcGxpZWQgYWZ0ZXIgZHJhd2luZworICAg
IC8vIGJvdGggdGhlIGxheWVyIGFuZCBpdHMgcmVmbGVjdGlvbikuIFRoZSBzb2x1dGlvbiBpcyB0
byBpbnRyb2R1Y2UgeWV0IGFub3RoZXIgUmVuZGVyU3VyZmFjZQorICAgIC8vIHRvIGRyYXcgdGhl
IGxheWVyIGFuZCBpdHMgcmVmbGVjdGlvbiBpbi4gRm9yIG5vdyB3ZSBvbmx5IGFwcGx5IGEgc2Vw
YXJhdGUgcmVmbGVjdGlvbgorICAgIC8vIG1hc2sgaWYgdGhlIGNvbnRlbnRzIGRvbid0IGhhdmUg
YSBtYXNrIG9mIHRoZWlyIG93bi4KKyAgICBDQ0xheWVySW1wbCogcmVwbGljYU1hc2tMYXllciA9
IG1fbWFza0xheWVyOworICAgIGlmICghbV9tYXNrTGF5ZXIgJiYgbV9vd25pbmdMYXllci0+cmVw
bGljYUxheWVyKCkpCisgICAgICAgIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX293bmluZ0xheWVyLT5y
ZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7CisKKyAgICBpZiAobV9vd25pbmdMYXllci0+cGFy
ZW50KCkgJiYgbV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllclNjaXNzb3IoKSkKKyAg
ICAgICAgbGF5ZXJSZW5kZXJlcigpLT5zZXRTY2lzc29yVG9SZWN0KG1fc2Npc3NvclJlY3QpOwor
ICAgIGVsc2UKKyAgICAgICAgR0xDKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCBsYXllclJl
bmRlcmVyKCktPmNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKSk7CisKKyAgICAvLyBSZWZsZWN0aW9uIGRyYXdzIGJlZm9yZSB0aGUgbGF5ZXIuCisgICAg
aWYgKG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICBkcmF3U3VyZmFjZShy
ZXBsaWNhTWFza0xheWVyLCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtKTsKKworICAgIGRyYXdTdXJm
YWNlKG1fbWFza0xheWVyLCBtX2RyYXdUcmFuc2Zvcm0pOworfQorCitTdHJpbmcgQ0NSZW5kZXJT
dXJmYWNlOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlJlbmRl
clN1cmZhY2UoaWQ9JWksb3duZXI9JXMpIiwgbV9vd25pbmdMYXllci0+aWQoKSwgbV9vd25pbmdM
YXllci0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZUluZGVu
dChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSAh
PSBpbmRlbnQ7ICsraSkKKyAgICAgICAgdHMgPDwgIiAgIjsKK30KKwordm9pZCBDQ1JlbmRlclN1
cmZhY2U6OmR1bXBTdXJmYWNlKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAorewor
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8IG5hbWUoKSA8PCAiXG4iOwor
CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCsxKTsKKyAgICB0cyA8PCAiY29udGVudFJlY3Q6
ICgiIDw8IG1fY29udGVudFJlY3QueCgpIDw8ICIsICIgPDwgbV9jb250ZW50UmVjdC55KCkgPDwg
IiwgIiA8PCBtX2NvbnRlbnRSZWN0LndpZHRoKCkgPDwgIiwgIiA8PCBtX2NvbnRlbnRSZWN0Lmhl
aWdodCgpIDw8ICJcbiI7Cit9CisKK2ludCBDQ1JlbmRlclN1cmZhY2U6Om93bmluZ0xheWVySWQo
KSBjb25zdAoreworICAgIHJldHVybiBtX293bmluZ0xheWVyID8gbV9vd25pbmdMYXllci0+aWQo
KSA6IDA7Cit9CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhYjE4OTE4NTFmZjA4MmY4ZmVi
NDI1OTFkYWViMjQ3Mjg4ODllNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApAQCAtMCwwICsx
LDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKworI2lmbmRlZiBDQ1JlbmRlclN1cmZhY2VfaAorI2RlZmluZSBDQ1Jl
bmRlclN1cmZhY2VfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlByb2dy
YW1CaW5kaW5nLmgiCisjaW5jbHVkZSAiU2hhZGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUZXh0
dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NM
YXllckltcGw7CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CitjbGFzcyBMYXllclRleHR1
cmU7CisKK2NsYXNzIENDUmVuZGVyU3VyZmFjZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q0NSZW5kZXJTdXJmYWNlKTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDQ1JlbmRlclN1cmZhY2Uo
Q0NMYXllckltcGwqKTsKKyAgICB+Q0NSZW5kZXJTdXJmYWNlKCk7CisKKyAgICBib29sIHByZXBh
cmVDb250ZW50c1RleHR1cmUoKTsKKyAgICB2b2lkIHJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsK
KyAgICB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKKyAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVj
dCYgdGFyZ2V0U3VyZmFjZVJlY3QpOworCisgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKKyAgICB2
b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKworICAgIEZs
b2F0UG9pbnQgY29udGVudFJlY3RDZW50ZXIoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QobV9j
b250ZW50UmVjdCkuY2VudGVyKCk7IH0KKworICAgIC8vIFJldHVybnMgdGhlIHJlY3QgdGhhdCBl
bmNsb3NlcyB0aGUgUmVuZGVyU3VyZmFjZSBpbmNsdWRpbmcgYW55IHJlZmxlY3Rpb24uCisgICAg
RmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdDsKKworICAgIGZsb2F0IGRyYXdP
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQorICAgIHZvaWQgc2V0RHJh
d09wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0gb3BhY2l0eTsgfQorCisg
ICAgdm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3
VHJhbnNmb3JtKSB7IG1fZHJhd1RyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm07IH0KKyAgICBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZHJhd1RyYW5zZm9ybTsgfQorCisgICAgdm9pZCBzZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYURyYXdUcmFuc2Zvcm0pIHsgbV9yZXBsaWNh
RHJhd1RyYW5zZm9ybSA9IHJlcGxpY2FEcmF3VHJhbnNmb3JtOyB9CisgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHJlcGxpY2FEcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXBsaWNhRHJhd1RyYW5zZm9ybTsgfQorCisgICAgdm9pZCBzZXRPcmlnaW5UcmFuc2Zvcm0oY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9yaWdpblRyYW5zZm9ybSkgeyBtX29yaWdpblRyYW5z
Zm9ybSA9IG9yaWdpblRyYW5zZm9ybTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBvcmlnaW5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX29yaWdpblRyYW5zZm9ybTsgfQor
CisgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkgeyBt
X3NjaXNzb3JSZWN0ID0gc2Npc3NvclJlY3Q7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29y
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKworICAgIHZvaWQgc2V0Q29u
dGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpIHsgbV9jb250ZW50UmVjdCA9IGNv
bnRlbnRSZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRlbnRSZWN0OyB9CisKKyAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBz
RHJhdykgeyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsgfQorICAgIGJvb2wgc2tpcHNEcmF3KCkg
Y29uc3QgeyByZXR1cm4gbV9za2lwc0RyYXc7IH0KKworICAgIHZvaWQgY2xlYXJMYXllckxpc3Qo
KSB7IG1fbGF5ZXJMaXN0LmNsZWFyKCk7IH0KKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBs
PiA+JiBsYXllckxpc3QoKSB7IHJldHVybiBtX2xheWVyTGlzdDsgfQorCisgICAgdm9pZCBzZXRN
YXNrTGF5ZXIoQ0NMYXllckltcGwqIG1hc2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXll
cjsgfQorCisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZy
YWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtOworICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYU1hc2s+
IE1hc2tQcm9ncmFtOworCisgICAgTGF5ZXJUZXh0dXJlKiBjb250ZW50c1RleHR1cmUoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZS5nZXQoKTsgfQorCisgICAgaW50IG93bmluZ0xh
eWVySWQoKSBjb25zdDsKK3ByaXZhdGU6CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyKCk7CisgICAgdm9pZCBkcmF3U3VyZmFjZShDQ0xheWVySW1wbCogbWFza0xheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSk7CisKKyAgICBDQ0xh
eWVySW1wbCogbV9vd25pbmdMYXllcjsKKyAgICBDQ0xheWVySW1wbCogbV9tYXNrTGF5ZXI7CisK
KyAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CisgICAgYm9vbCBtX3NraXBzRHJhdzsKKworICAg
IE93blB0cjxMYXllclRleHR1cmU+IG1fY29udGVudHNUZXh0dXJlOworICAgIGZsb2F0IG1fZHJh
d09wYWNpdHk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmVwbGljYURyYXdUcmFuc2Zvcm07CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07CisgICAgSW50UmVjdCBtX3NjaXNzb3JS
ZWN0OworICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gbV9sYXllckxpc3Q7Cit9Owor
Cit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKaW5kZXggODAzYmEwNmQ1NjE5N2QyOGFhZTU1
YTc4YzViY2QxMWUxMjQ3N2I1ZS4uZmMxMDNlYWRjYWIyZTlmYTNhMDA2NzRlZmNiZGQzYjBkZGQx
NTgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTI5LDE2ICsyOSwx
NCBAQAogCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCi0jaW5jbHVkZSAiQ29u
dGVudExheWVyQ2hyb21pdW0uaCIKLQogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIExheWVyVGV4dHVyZTsKIAotQ0NUaWxlZExh
eWVySW1wbDo6Q0NUaWxlZExheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQot
ICAgIDogQ0NMYXllckltcGwob3duZXIsIGlkKQorQ0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExh
eWVySW1wbChpbnQgaWQpCisgICAgOiBDQ0xheWVySW1wbChpZCkKICAgICAsIG1fdGlsZXIoMCkK
IHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCBiMGQxMDMxZmJiN2I4Zjgw
ZjQ3OGFjODEzYzhmMjcyOWRjODlhOTE1Li43MzQ2YmI3ZTdkNmZhNmJjOGNhMWViY2YyOWNjNTg0
OWYxZWY2M2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC0zMyw5ICszMyw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NUaWxlZExheWVySW1wbCA6IHB1Ymxp
YyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaWxlZExh
eWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q0NUaWxlZExheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NUaWxlZExheWVySW1wbChvd25lciwgaWQpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsKGlkKSk7CiAgICAgfQog
ICAgIHZpcnR1YWwgfkNDVGlsZWRMYXllckltcGwoKTsKIApAQCAtNDgsNyArNDgsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRUaWxlcihMYXllclRpbGVyQ2hyb21pdW0qIHRpbGVyKSB7IG1fdGls
ZXIgPSB0aWxlcjsgfQogCiBwcml2YXRlOgotICAgIENDVGlsZWRMYXllckltcGwoTGF5ZXJDaHJv
bWl1bSosIGludCBpZCk7CisgICAgZXhwbGljaXQgQ0NUaWxlZExheWVySW1wbChpbnQgaWQpOwog
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90aWxpbmdUcmFuc2Zvcm07CiAgICAgTGF5ZXJU
aWxlckNocm9taXVtKiBtX3RpbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcApp
bmRleCBmNDRhYmIwNjExZGVjN2NmODE2MDE3ODhjOWM0NTViYjVlOTc4YTlhLi4wYzkzOTMyMThi
ZjM0NDRiY2JhZGIxZGM4Mjg3MzQyNzc0MjA0YzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcApAQCAtNTksOCArNTksOCBAQCBjb25zdCBmbG9hdCBDQ1ZpZGVvTGF5ZXJJbXBs
Ojp5dXZBZGp1c3RbM10gPSB7CiAgICAgLTAuNWYsCiB9OwogCi1DQ1ZpZGVvTGF5ZXJJbXBsOjpD
Q1ZpZGVvTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCi0gICAgOiBDQ0xh
eWVySW1wbChvd25lciwgaWQpCitDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBsKGlu
dCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKGlkKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgKaW5kZXggZmMwN2Y3NzJlNjE4Yzg5YzhlMjQ0Y2FmYzU1OGMzN2U5OWNlYmI2Zi4u
ZWU5ZDQyMTY5M2E5ZDE3Nzc5ODRlOGJiMDY3NjZhMzYwNGU1MGNlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuaApAQCAtMzgsOSArMzgsOSBAQCBjbGFzcyBWaWRlb0ZyYW1lUHJvdmlk
ZXI7CiAKIGNsYXNzIENDVmlkZW9MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlkZW9MYXllckltcGw+IGNyZWF0ZShMYXll
ckNocm9taXVtKiBvd25lciwgaW50IGlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlkZW9M
YXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENDVmlkZW9MYXllckltcGwob3duZXIsIGlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ0NWaWRlb0xheWVySW1wbChpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1ZpZGVv
TGF5ZXJJbXBsKCk7CiAKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4
dHVyZShzaXplX3QsIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VGV4dHVyZSk7CiAKIHByaXZhdGU6Ci0g
ICAgQ0NWaWRlb0xheWVySW1wbChMYXllckNocm9taXVtKiwgaW50KTsKKyAgICBleHBsaWNpdCBD
Q1ZpZGVvTGF5ZXJJbXBsKGludCk7CiAKICAgICB2b2lkIGRyYXdZVVYoY29uc3QgWVVWUHJvZ3Jh
bSopIGNvbnN0OwogICAgIHZvaWQgZHJhd1JHQkEoY29uc3QgUkdCQVByb2dyYW0qKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXpl
clRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVy
VGVzdC5jcHAKaW5kZXggNzAyNjIwYTBmOTQwN2RmYTM1NzFmYTM1NzQ4MGUxNjQ1YzhlMjdiMS4u
MTM4MGZlZTI2M2I1NmMwY2MwNTRjOWZiMThiMGMwYjRlNjRhYjk5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAKQEAg
LTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIHsKIAogY2xhc3MgTW9ja0NDTGF5ZXJJbXBsIDogcHVi
bGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb2NrQ0NM
YXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGxheWVySWQpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TW9ja0NDTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGxheWVySWQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tDQ0xheWVySW1wbChvd25lciwg
bGF5ZXJJZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tDQ0xheWVySW1wbChs
YXllcklkKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfk1vY2tDQ0xheWVySW1wbCgpCiAgICAgewpA
QCAtNDksOCArNDksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDQ0xheWVyRGVzdHJ1Y3Rpb25M
aXN0KFZlY3RvcjxpbnQ+KiBsaXN0KSB7IG1fY2NMYXllckRlc3RydWN0aW9uTGlzdCA9IGxpc3Q7
IH0KIAogcHJpdmF0ZToKLSAgICBNb2NrQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIs
IGludCBsYXllcklkKQotICAgICAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBsYXllcklkKQorICAg
IGV4cGxpY2l0IE1vY2tDQ0xheWVySW1wbChpbnQgbGF5ZXJJZCkKKyAgICAgICAgOiBDQ0xheWVy
SW1wbChsYXllcklkKQogICAgICAgICAsIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdCgwKQogICAg
IHsKICAgICB9CkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIE1vY2tDQ0xheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CisgICAgICAgIHJl
dHVybiBNb2NrQ0NMYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBjY0xheWVyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102417</attachid>
            <date>2011-07-29 18:33:36 -0700</date>
            <delta_ts>2011-08-01 15:48:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58840-20110729183335.patch</filename>
            <type>text/plain</type>
            <size>89305</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIwMzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlMjY3NTcyZjg5MDIzZjcw
Nzg3MWRlYTRiNDNiOGFhMDk3NWZjMWZjLi4yYjQyMmUzMDNjOTY5NjQzZWZiMTQyNWFkNjI2OTdj
NWEwYzllNzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTUyIEBACiAyMDExLTA3LTI5ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2Nocm9taXVtXSBE
ZWNvdXBsZSBsYXllciB2aXNpYmlsaXR5IGNhbGN1bGF0aW9ucyBmcm9tIHJlbmRlciBzdXJmYWNl
cyAvIGNvbXB1dGVkIGRyYXcgdHJhbnNmb3JtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGRlY291cGxlcyB0aGUgbGF5ZXIgdmlzaWJpbGl0eSBy
ZWxhdGVkIGNhbGN1bGF0aW9ucyBmcm9tIHRoZSBMYXllckNocm9taXVtIGFuZCBDQ0xheWVySW1w
bCB0cmVlcy4gIFRoaXMgaXMKKyAgICAgICAgZG9uZSBieSBtYWtpbmcgTGF5ZXJSZW5kZXJlckNo
cm9taXVtJ3MgImNhbGN1bGF0ZSB0aGUgd29ybGQiIGZ1bmN0aW9uIChyZW5hbWVkCisgICAgICAg
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSgpKSBhIHRlbXBsYXRlZCwgZnJl
ZSBmdW5jdGlvbiB0aGF0IGNhbiBvcGVyYXRlIG9uIGVpdGhlciBMYXllckNocm9taXVtICsKKyAg
ICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtIHBhaXJzIG9yIG9uIENDTGF5ZXJJbXBsICsgQ0NS
ZW5kZXJTdXJmYWNlIHBhaXJzIGFuZCBpbnZva2luZyBpdCB0d2ljZSwgb25jZSBiZWZvcmUKKyAg
ICAgICAgcGFpbnRpbmcgYW5kIG9uY2UgYmVmb3JlIGRyYXdpbmcuICBCZWZvcmUgcGFpbnRpbmcs
IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGFy
ZQorICAgICAgICBwb3RlbnRpYWxseSB2aXNpYmxlIGFuZCBzaG91bGQgYmUgcGFpbnRlZCwgd2hp
Y2ggZGVwZW5kcyBvbiB0aGUgY2FsY3VsYXRlZCBvcGFjaXR5LCByZW5kZXIgc3VyZmFjZSBib3Vu
ZHMsIGFuZAorICAgICAgICBkcmF3IHRyYW5zZm9ybXMuICBCZWZvcmUgZHJhd2luZywgdGhlc2Ug
Y2FsY3VsYXRpb25zIGFyZSB1c2VkIHRvIGZpZ3VyZSBvdXQgZXZlcnl0aGluZyBuZWVkZWQgdG8g
ZHJhdy4KKworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0gaXMgbm93IHVzZWQganVzdCBm
b3IgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMgd2hlbiBwYWludGluZy4gIENDUmVuZGVyU3VyZmFj
ZUNocm9taXVtIGlzCisgICAgICAgIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBkcmF3aW5nIHRo
ZSByZW5kZXIgc3VyZmFjZXMuCisKKyAgICAgICAgVGhpcyBkb2VzIG1lYW4gdGhhdCBpbiB0aGUg
Y3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGUgc2Vjb25kIGNhbGN1bGF0aW9ucyBhcmUgcmVkdW5k
YW50LCBidXQgaW4gdGhlIGZ1dHVyZSB0aGlzCisgICAgICAgIHdvbid0IGJlIHRoZSBjYXNlIHNp
bmNlIHRoZSBwcmUtZHJhdyB0aW1lIGNhbGN1bGF0aW9ucyBtaWdodCBiZSBpbmZsdWVuY2VkIGJ5
IGFuaW1hdGlvbnMgb3IgZ2VzdHVyZXMuICBJJ3ZlCisgICAgICAgIGFkZGVkIHNvbWUgdHJhY2Vz
IHRvIHRyeSB0byBtb25pdG9yIGlmIHRoaXMgbWF0aCBpcyBhIHNpZ25pZmljYW50IGFtb3VudCBv
ZiB0aGUgcGVyLWZyYW1lIGNvbXB1dGF0aW9uLiAgTm90ZQorICAgICAgICB0aGF0IGxheWVyIHNv
cnRpbmcgb25seSBoYXBwZW5zIG9uIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFuZCB0aGUgbGF5ZXIg
c29ydCBhbGdvcml0aG0gaXMgdGhlIG1vc3QgZXhwZW5zaXZlIHBhcnQKKyAgICAgICAgb2YgdGhl
IGNhbGN1bGF0aW9ucyBjdXJyZW50bHkuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIGFsbCBvZiB0
aGUgd2VhayBiYWNrL2ZvcndhcmQgcG9pbnRlcnMgYmV0d2VlbiBMYXllckNocm9taXVtIGFuZCBD
Q0xheWVySW1wbHMsIHRoZSB0cmVlcyBhcmUgbm93CisgICAgICAgIHRydWx5IGRlY291cGxlZC4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGNvbXBvc2l0aW5nLyB0ZXN0cy4KKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06
OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Okxh
eWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0RyYXdzQ29u
dGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0VXNlc0xheWVyU2Npc3Nv
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1c2VzTGF5ZXJTY2lzc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZW5kZXJTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNldERyYXdPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnRhcmdl
dFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldERyYXdUcmFu
c2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXREcmF3YWJsZUNvbnRl
bnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbXBvc2l0ZU9mZnNjcmVlbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9mZnNjcmVlbkxheWVyVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1
cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
U2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OnJlbmRlclN1cmZhY2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJT
dXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVt
Ojp+UmVuZGVyU3VyZmFjZUNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN1cmZhY2VDaHJvbWl1bTo6Y2xlYXJMYXllckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3VyZmFjZUNocm9taXVtOjpsYXllckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3VyZmFjZUNocm9taXVtOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVy
SW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVuZGVyU3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dGFyZ2V0UmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0VGFyZ2V0UmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5M
YXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1
Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpDQ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjp+Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVy
U3VyZmFjZTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OmxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpkcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjpkcmF3U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZh
Y2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlSW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVy
U3VyZmFjZTo6ZHVtcFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
Ojpvd25pbmdMYXllcklkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmguCisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNvbnRlbnRSZWN0Q2VudGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6ZHJhd09wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXREcmF3T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6OnNldERyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2V0UmVwbGljYURyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpyZXBsaWNhRHJhd1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6OnNldE9yaWdpblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6Om9yaWdpblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzZXRD
b250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNvbnRlbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0U2tpcHNEcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2tpcHNEcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Y2xlYXJMYXllckxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpsYXllckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpjb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
ZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aWxlZExheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlk
ZW9MYXllckltcGw6OmNyZWF0ZSk6CisKKzIwMTEtMDctMjkgIEphbWVzIFJvYmluc29uICA8amFt
ZXNyQGNocm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIFJlb3JkZXIgZnVuY3Rpb25z
IGluIExheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgdG8gbWFrZSBidWcgNTg4NDAgZWFzaWVyIHRv
IHJldmlldwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjUzNTQKIApAQCAtMjU4LDYgKzQwNSwyMyBAQAogCiAgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CiAKKzIwMTEtMDctMjkgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFJlb3JkZXIgZnVuY3Rpb25zIGluIExh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgdG8gbWFrZSBidWcgNTg4NDAgZWFzaWVyIHRvIHJldmll
dworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzNTQK
KworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAgVGhpcyBt
b3ZlcyBhIGZldyBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBMYXllclJlbmRlcmVyQ2hyb21pdW0g
YXJvdW5kIHRvIG1ha2UgdGhlIHBhdGNoIG9uIGJ1ZyA1ODg0MCBlYXNpZXIgdG8KKyAgICAgICAg
cmV2aWV3LiAgSW4gdGhhdCBwYXRjaCwgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2Vz
KCkgYmVjb21lcyBhIHRlbXBsYXRlZCBmcmVlIGZ1bmN0aW9uIGluc3RlYWQgb2YgYQorICAgICAg
ICBtZW1iZXIgZnVuY3Rpb24sIHNvIGl0IGhhcyB0byBiZSBuZWFyIHRoZSB0b3Agb2YgdGhlIC5j
cHAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlVmlzaWJsZVJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNTY2FsZU9yVHJhbnNsYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFj
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnMpOgorCiAyMDExLTA3LTI5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkZWQgdGhlIHJlZ2lvbmFsIGluZGljYXRvciBzeW1ib2xzIHRvIHRoZSBzZXQgb2Yg
Y29kZXBvaW50cyB0aGF0IGZvcmNlIHVzZSBvZiB0aGUgY29tcGxleCB0ZXh0IGNvZGUgcGF0aC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCA1NGM5YTM0ZDNiNWIyYWMxMTUzNzAwZGM4MjUxNDBlNmFmNzI5
YjAyLi5mMWI0YjAyYzhkOGUxMzk3YjQwOWI0OWQ0YzY1NjFlMmQxZDcwNjZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC0zNTY0LDYgKzM1NjQsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFRhc2suaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDBhMWQzMmU4YzQyMjUzNDc4NmFhN2RhYzVlYTJlMmVmN2RjNTAwZjQuLmFjNGI5ZjIwOTI4
ZGYzYTFmNTI1YTJmMTRjNWMyMWFlZTQ3MGM1ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uY3BwCkBAIC01NSw3ICs1NSw3IEBAIENhbnZhc0xheWVyQ2hyb21pdW06On5DYW52YXNM
YXllckNocm9taXVtKCkKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gQ2FudmFzTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ0NhbnZhc0xheWVySW1w
bDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CisgICAgcmV0dXJuIENDQ2FudmFzTGF5ZXJJbXBs
OjpjcmVhdGUobV9sYXllcklkKTsKIH0KIAogdm9pZCBDYW52YXNMYXllckNocm9taXVtOjpwdXNo
UHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggMWQ4NzNkYzFmYWU2ZjAxNjM5ZTUzYWJhZmIxYzdlMWM5ZmNmNDM2Zi4uMTgyYzc0NDRjOGNi
ZTg1NDBkYmQxYzM4YmFlNGMwZjAyMDZhNWMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTYxLDkgKzYxLDkgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyKQogICAgICwgbV9jb250ZW50c0RpcnR5KGZhbHNlKQogICAgICwgbV9s
YXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDApCi0gICAgLCBtX2NjTGF5
ZXJJbXBsKDApCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQogICAgICwgbV9iYWNrZ3Jv
dW5kQ29sb3IoMCwgMCwgMCwgMCkKKyAgICAsIG1fZGVidWdCb3JkZXJXaWR0aCgwKQogICAgICwg
bV9vcGFjaXR5KDEuMCkKICAgICAsIG1felBvc2l0aW9uKDAuMCkKICAgICAsIG1fYW5jaG9yUG9p
bnRaKDApCkBAIC03NCw3ICs3NCwxMCBAQCBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgLCBtX2dlb21ldHJ5RmxpcHBlZChmYWxz
ZSkKICAgICAsIG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UoZmFsc2UpCiAgICAgLCBtX2Rv
dWJsZVNpZGVkKHRydWUpCisgICAgLCBtX3VzZXNMYXllclNjaXNzb3IoZmFsc2UpCiAgICAgLCBt
X3JlcGxpY2FMYXllcigwKQorICAgICwgbV9kcmF3T3BhY2l0eSgwKQorICAgICwgbV90YXJnZXRS
ZW5kZXJTdXJmYWNlKDApCiB7CiAgICAgQVNTRVJUKCFMYXllclJlbmRlcmVyQ2hyb21pdW06OnNf
aW5QYWludExheWVyQ29udGVudHMpOwogfQpAQCAtODYsOSArODksNiBAQCBMYXllckNocm9taXVt
Ojp+TGF5ZXJDaHJvbWl1bSgpCiAgICAgLy8gd2F5IGZvciB1cyB0byBiZSBkZXN0cm95ZWQgd2hp
bGUgd2Ugc3RpbGwgaGF2ZSBhIHBhcmVudC4KICAgICBBU1NFUlQoIXBhcmVudCgpKTsKIAotICAg
IGlmIChtX2NjTGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBsLT5jbGVhck93bmVyKCk7
Ci0KICAgICAvLyBSZW1vdmUgdGhlIHBhcmVudCByZWZlcmVuY2UgZnJvbSBhbGwgY2hpbGRyZW4u
CiAgICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKTsKIH0KQEAgLTM4MSwxMiArMzgxLDcgQEAgdm9pZCBM
YXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5k
ZW50KSBjb25zdAogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBMYXllckNocm9taXVtOjpjcmVh
dGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywg
bV9sYXllcklkKTsKLX0KLQotQ0NMYXllckltcGwqIExheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBs
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jY0xheWVySW1wbDsKKyAgICByZXR1cm4gQ0NMYXll
ckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEJv
cmRlckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTQwNiw1ICs0MDEsMjAgQEAgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBMYXllckNocm9taXVtOjpsYXllclJlbmRlcmVyKCkgY29uc3QKICAg
ICByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOwogfQogCit2b2lkIExheWVyQ2hyb21pdW06
OmNyZWF0ZVJlbmRlclN1cmZhY2UoKQoreworICAgIEFTU0VSVCghbV9yZW5kZXJTdXJmYWNlKTsK
KyAgICBtX3JlbmRlclN1cmZhY2UgPSBhZG9wdFB0cihuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVt
KHRoaXMpKTsKK30KKworYm9vbCBMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0RyYXdzQ29udGVu
dCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kcmF3c0NvbnRlbnQoKSB8fCBtX2NoaWxk
cmVuW2ldLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogfQogI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCAzYmE3YjlmMGRiMGNm
OTcxYWI5NjhkNjFiOWMzMGEwMWRlZjcyM2FiLi45MDY3YmU0NzIxYTYzNmU2ZDQ5YzUwZmI5NDI3
N2Q0ODI1OGMwZjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNyw5ICszNyw5IEBACiAjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJT
aGFkZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKQEAg
LTEwNCw3ICsxMDQsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CiAKICAgICB2b2lkIHNldE1hc2tMYXllcihMYXllckNocm9taXVt
KiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IH0KLSAgICBDQ0xheWVySW1w
bCogbWFza0RyYXdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyID8gbV9tYXNrTGF5
ZXItPmNjTGF5ZXJJbXBsKCkgOiAwOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0TmVlZHNE
aXNwbGF5KGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKQEAgLTE0NSw2ICsxNDQsOSBAQCBw
dWJsaWM6CiAKICAgICBib29sIHByZXNlcnZlczNEKCkgeyByZXR1cm4gbV9vd25lciAmJiBtX293
bmVyLT5wcmVzZXJ2ZXMzRCgpOyB9CiAKKyAgICB2b2lkIHNldFVzZXNMYXllclNjaXNzb3IoYm9v
bCB1c2VzTGF5ZXJTY2lzc29yKSB7IG1fdXNlc0xheWVyU2Npc3NvciA9IHVzZXNMYXllclNjaXNz
b3I7IH0KKyAgICBib29sIHVzZXNMYXllclNjaXNzb3IoKSBjb25zdCB7IHJldHVybiBtX3VzZXNM
YXllclNjaXNzb3I7IH0KKwogICAgIC8vIERlcml2ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlz
IG1ldGhvZCBpZiB0aGV5IG5lZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UKICAgICAvLyBpbiB0aGUg
TGF5ZXJSZW5kZXJlckNocm9taXVtLgogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlbmRlcmVy
KExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwpAQCAtMTcwLDkgKzE3Miw2IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwogCi0gICAgLy8gRXZlcnl0aGluZyBmcm9t
IGhlcmUgZG93biBpbiB0aGUgcHVibGljIHNlY3Rpb24gd2lsbCBtb3ZlIHRvIENDTGF5ZXJJbXBs
LgotICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpIGNvbnN0OwotCiAgICAgc3RhdGljIHZv
aWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0
aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbik7CkBAIC0xODcs
NiArMTg2LDI0IEBAIHB1YmxpYzoKIAogICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5
ZXJJZDsgfQogCisgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFj
ZS5jbGVhcigpOyB9CisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9CisgICAgdm9pZCBjcmVhdGVS
ZW5kZXJTdXJmYWNlKCk7CisKKyAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fZHJhd09wYWNpdHk7IH0KKyAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
IHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29y
UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNz
b3JSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KKyAg
ICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KKyAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1
cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZSA9IHN1cmZhY2U7IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0
RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJh
d1RyYW5zZm9ybSA9IG1hdHJpeDsgfQorICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVu
dFJlY3QoKSBjb25zdCB7IHJldHVybiBtX2RyYXdhYmxlQ29udGVudFJlY3Q7IH0KKyAgICB2b2lk
IHNldERyYXdhYmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2RyYXdhYmxl
Q29udGVudFJlY3QgPSByZWN0OyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRo
ZSBsYXllcidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCisgICAgYm9vbCBkZXNj
ZW5kYW50c0RyYXdzQ29udGVudCgpOworCiBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NMYXllckNo
cm9taXVtKiBtX293bmVyOwogICAgIGV4cGxpY2l0IExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcik7CkBAIC0yMTAsMTggKzIyNywxMCBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9tYXNrTGF5ZXI7CiAKLSAgICAvLyBBbGwgbGF5ZXIg
c2hhZGVycyBzaGFyZSB0aGUgc2FtZSBhdHRyaWJ1dGUgbG9jYXRpb25zIGZvciB0aGUgdmVydGV4
IHBvc2l0aW9ucwotICAgIC8vIGFuZCB0ZXh0dXJlIGNvb3JkaW5hdGVzLiBUaGlzIGFsbG93cyBz
d2l0Y2hpbmcgc2hhZGVycyB3aXRob3V0IHJlYmluZGluZyBhdHRyaWJ1dGUKLSAgICAvLyBhcnJh
eXMuCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcG9zaXRpb25BdHRyaWJMb2NhdGlvbjsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc190ZXhDb29yZEF0dHJpYkxvY2F0aW9uOwotCiAg
ICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7CiAgICAgZnJpZW5kIGNsYXNzIENDTGF5
ZXJJbXBsOwogICAgIC8vIENvbnN0cnVjdHMgYSBDQ0xheWVySW1wbCBvZiB0aGUgY29ycmVjdCBy
dW50aW1lIHR5cGUgZm9yIHRoaXMgTGF5ZXJDaHJvbWl1bSB0eXBlLgogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKTsKLSAgICAvLyBGSVhNRTog
UmVtb3ZlIHdoZW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMw
IGlzIGZpeGVkLgotICAgIHZvaWQgc2V0Q0NMYXllckltcGwoQ0NMYXllckltcGwqIGltcGwpIHsg
bV9jY0xheWVySW1wbCA9IGltcGw7IH0KICAgICBpbnQgbV9sYXllcklkOwogCiBwcml2YXRlOgpA
QCAtMjQ1LDEwICsyNTQsNiBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPExheWVyUmVuZGVyZXJD
aHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogCi0gICAgLy8gVGVtcG9yYXJ5IGZvcndhcmQgd2Vh
ayBwb2ludGVyIHRvIHRoZSBDQ0xheWVySW1wbCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4K
LSAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU4ODMwIGlzIGZpeGVkLgotICAgIENDTGF5ZXJJbXBsKiBtX2NjTGF5ZXJJbXBs
OwotCiAgICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAg
IEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OwpAQCAtMjY3LDYgKzI3Miw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2dlb21ldHJ5RmxpcHBlZDsKICAgICBib29sIG1fbmVlZHNEaXNwbGF5T25C
b3VuZHNDaGFuZ2U7CiAgICAgYm9vbCBtX2RvdWJsZVNpZGVkOworICAgIGJvb2wgbV91c2VzTGF5
ZXJTY2lzc29yOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKQEAgLTI3Niw2ICsyODIs
MTQgQEAgcHJpdmF0ZToKICAgICAvLyBSZXBsaWNhIGxheWVyIHVzZWQgZm9yIHJlZmxlY3Rpb25z
LgogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3JlcGxpY2FMYXllcjsKIAorICAgIC8vIFRy
YW5zaWVudCBwcm9wZXJ0aWVzLgorICAgIE93blB0cjxSZW5kZXJTdXJmYWNlQ2hyb21pdW0+IG1f
cmVuZGVyU3VyZmFjZTsKKyAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OworICAgIEludFJlY3QgbV9z
Y2lzc29yUmVjdDsKKyAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fdGFyZ2V0UmVuZGVyU3Vy
ZmFjZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CisgICAgSW50
UmVjdCBtX2RyYXdhYmxlQ29udGVudFJlY3Q7CisKICAgICBTdHJpbmcgbV9uYW1lOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggZTQ3ZDVkODYwMDQwN2Fh
NjIyYWQ0ZmZiY2IzY2NkZmNmOTE3MTY4ZS4uNzg0YmJlNDE0YmYzNTA4N2E4YmMxMmFjYjFmOWRl
M2M4NjJiMmIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00
NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCiAjaW5jbHVkZSAiTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5o
IgpAQCAtNjIsNiArNjMsOCBAQAogI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklY
TUU6IE1ha2UgdGhpcyBsaW1pdCBhZGp1c3RhYmxlIGFuZCBnaXZlIGl0IGEgdXNlZnVsIHZhbHVl
LgpAQCAtNzcsNyArODAsOSBAQCBzdGF0aWMgc2l6ZV90IHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5
dGVzID0gMyAqIDEwMjQgKiAxMDI0OwogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNfaW5Q
YWludExheWVyQ29udGVudHMgPSBmYWxzZTsKICNlbmRpZgogCi1zdGF0aWMgSW50UmVjdCBjYWxj
dWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCituYW1lc3BhY2UgeworCitJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0
IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVj
dCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICAvLyBJcyB0
aGlzIGxheWVyIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhcmdldCBzdXJmYWNlPwogICAg
IEludFJlY3QgbGF5ZXJJblN1cmZhY2VTcGFjZSA9IHRyYW5zZm9ybS5tYXBSZWN0KGxheWVyQm91
bmRSZWN0KTsKQEAgLTEwMSw3ICsxMDYsNyBAQCBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNp
YmxlUmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UgogfQog
CiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hdHJpeCBoYXMgbm8gcm90YXRpb24sIHNrZXcgb3Ig
cGVyc3BlY3RpdmUgY29tcG9uZW50cyB0byBpdC4KLXN0YXRpYyBib29sIGlzU2NhbGVPclRyYW5z
bGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQorYm9vbCBpc1NjYWxlT3JUcmFu
c2xhdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKIHsKICAgICByZXR1cm4gIW0u
bTEyKCkgJiYgIW0ubTEzKCkgJiYgIW0ubTE0KCkKICAgICAgICAgICAgJiYgIW0ubTIxKCkgJiYg
IW0ubTIzKCkgJiYgIW0ubTI0KCkKQEAgLTExMCwxMCArMTE1LDIzIEBAIHN0YXRpYyBib29sIGlz
U2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiB9CiAK
K3ZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJhdG9y
LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46Oml0ZXJhdG9yLCB2b2lkKikKK3sKKyAg
ICAvLyBDdXJyZW50bHkgd2UgZG9uJ3QgdXNlIHotb3JkZXIgdG8gZGVjaWRlIHdoYXQgdG8gcGFp
bnQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBhY3R1YWxseSBzb3J0IExheWVyQ2hyb21pdW1zLgor
fQorCit2b2lkIHNvcnRMYXllcnMoVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0
b3IgZmlyc3QsIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID46Oml0ZXJhdG9yIGVuZCwgQ0NM
YXllclNvcnRlciogbGF5ZXJTb3J0ZXIpCit7CisgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6c29ydExheWVycyIsIDAsIDApOworICAgIGxheWVyU29ydGVyLT5zb3J0KGZp
cnN0LCBlbmQpOworfQorCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFy
dGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5
IHRyYW5zZm9ybWF0aW9ucywgc2Npc3NvciByZWN0YW5nbGVzLCByZW5kZXIgc3VyZmFjZXMsIGV0
Yy4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVy
U3VyZmFjZXMoQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIExheWVyTGlz
dCYgbGF5ZXJMaXN0KQordGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlLCB0eXBlbmFtZSBSZW5k
ZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Cit2b2lkIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RM
YXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgVmVjdG9yPFJl
ZlB0cjxMYXllclR5cGU+ID4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8
TGF5ZXJUeXBlPiA+JiBsYXllckxpc3QsIExheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1h
eFRleHR1cmVTaXplKQogeworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllclR5cGU+ID4g
TGF5ZXJMaXN0OwogICAgIC8vIENvbXB1dGUgdGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24g
dGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhpcyBsYXllciBhbmQKICAgICAvLyBhbGwgaXRzIGNo
aWxkcmVuLiBJdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHRoZSBsYXllcidzIHBvc2l0
aW9uCiAgICAgLy8gaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXllcidzIGFuY2hvciBwb2ludC4g
QWxzbywgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIHVzZWQKQEAgLTE3Myw5ICsxOTEsOSBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2Vz
KENDTGF5ZXJJbXBsKiBsYXllcgogICAgIGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBs
YXllci0+cmVwbGljYUxheWVyKCk7CiAgICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRh
bnRzID0gbGF5ZXItPnBhcmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAm
JiAhbGF5ZXItPnByZXNlcnZlczNEKCkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50
KCk7CiAgICAgaWYgKHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0
aW9uIHx8IHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgfHwgKCh1c2VTdXJmYWNlRm9yQ2xp
cHBpbmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGxheWVyLT5kZXNjZW5kYW50c0RyYXdz
Q29udGVudCgpKSkgewotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZh
Y2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2Up
Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlID0gbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICAgICAgaWYgKCFsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICAgICAgbGF5
ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgUmVuZGVyU3VyZmFjZVR5cGUqIHJl
bmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwogCiAgICAgICAgIC8vIFRoZSBv
cmlnaW4gb2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUg
bGF5ZXIuCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm07CkBAIC0y
MzEsNyArMjQ5LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRp
ZXNBbmRSZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5ZXIKICAgICAgICAgICAgIGxheWVy
LT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3Vy
ZmFjZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChsYXllciAhPSBtX3Jvb3RDQ0xheWVy
SW1wbC5nZXQoKSkKKyAgICAgICAgaWYgKGxheWVyICE9IHJvb3RMYXllcikKICAgICAgICAgICAg
IGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKIAogICAgICAgICBpZiAobGF5ZXItPm1hc2tz
VG9Cb3VuZHMoKSkgewpAQCAtMjg3LDExICszMDUsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5
ZXIKICAgICB1bnNpZ25lZCB0aGlzTGF5ZXJJbmRleCA9IGRlc2NlbmRhbnRzLnNpemUoKSAtIDE7
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGlsZHJlbigpLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IGxheWVyLT5jaGlsZHJlbigpW2ld
LmdldCgpOwotICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoY2hpbGQs
IHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cyk7Cisg
ICAgICAgIExheWVyVHlwZSogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAg
ICAgICAgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5PExheWVyVHlwZSwgUmVu
ZGVyU3VyZmFjZVR5cGUsIExheWVyU29ydGVyPihjaGlsZCwgcm9vdExheWVyLCBzdWJsYXllck1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMsIGxheWVyU29ydGVyLCBt
YXhUZXh0dXJlU2l6ZSk7CiAKICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJTdXJmYWNlKCkpIHsK
LSAgICAgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogY2hpbGRSZW5kZXJTdXJmYWNlID0g
Y2hpbGQtPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgICAgIFJlbmRlclN1cmZhY2VUeXBlKiBj
aGlsZFJlbmRlclN1cmZhY2UgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICAgICAg
SW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3Qo
KTsKICAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVj
dChjaGlsZFJlbmRlclN1cmZhY2UtPmRyYXdhYmxlQ29udGVudFJlY3QoKSkpOwogICAgICAgICAg
ICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CkBA
IC0zMDksMTAgKzMyNywxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJv
cGVydGllc0FuZFJlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiBsYXllcgogICAgICAgICBsYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKICAgICB9CiAK
LSAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSBtX3Jvb3RDQ0xheWVy
SW1wbC5nZXQoKSkgewotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZh
Y2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBJbnRSZWN0IHJlbmRlclN1cmZh
Y2VDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7Ci0gICAgICAgIEZs
b2F0UG9pbnQgc3VyZmFjZUNlbnRlciA9IEZsb2F0UmVjdChyZW5kZXJTdXJmYWNlQ29udGVudFJl
Y3QpLmNlbnRlcigpOworICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9
IHJvb3RMYXllcikgeworICAgICAgICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9
IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIEludFJlY3QgY2xpcHBlZENvbnRlbnRS
ZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgRmxvYXRQb2ludCBz
dXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KGNsaXBwZWRDb250ZW50UmVjdCkuY2VudGVyKCk7CiAK
ICAgICAgICAgLy8gUmVzdHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlv
biB0aGF0J3MgdmlzaWJsZS4KICAgICAgICAgRmxvYXRTaXplIGNlbnRlck9mZnNldER1ZVRvQ2xp
cHBpbmc7CkBAIC0zMjAsMjIgKzMzOCwyMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiBsYXllcgogICAg
ICAgICAvLyBEb24ndCBjbGlwIGlmIHRoZSBsYXllciBpcyByZWZsZWN0ZWQgYXMgdGhlIHJlZmxl
Y3Rpb24gc2hvdWxkbid0IGJlCiAgICAgICAgIC8vIGNsaXBwZWQuCiAgICAgICAgIGlmICghbGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPnNj
aXNzb3JSZWN0KCkuaXNFbXB0eSgpICYmICFyZW5kZXJTdXJmYWNlQ29udGVudFJlY3QuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgSW50UmVjdCBzdXJmYWNlU2Npc3NvclJlY3QgPSBjYWxj
dWxhdGVWaXNpYmxlUmVjdChyZW5kZXJTdXJmYWNlLT5zY2lzc29yUmVjdCgpLCByZW5kZXJTdXJm
YWNlQ29udGVudFJlY3QsIHJlbmRlclN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpKTsKLSAgICAg
ICAgICAgICAgICByZW5kZXJTdXJmYWNlQ29udGVudFJlY3QuaW50ZXJzZWN0KHN1cmZhY2VTY2lz
c29yUmVjdCk7CisgICAgICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPnNjaXNzb3JSZWN0KCku
aXNFbXB0eSgpICYmICFjbGlwcGVkQ29udGVudFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgSW50UmVjdCBzdXJmYWNlU2Npc3NvclJlY3QgPSBjYWxjdWxhdGVWaXNpYmxlUmVjdChy
ZW5kZXJTdXJmYWNlLT5zY2lzc29yUmVjdCgpLCBjbGlwcGVkQ29udGVudFJlY3QsIHJlbmRlclN1
cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgICAgICBjbGlwcGVkQ29udGVu
dFJlY3QuaW50ZXJzZWN0KHN1cmZhY2VTY2lzc29yUmVjdCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBGbG9hdFBvaW50IGNsaXBwZWRTdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KHJlbmRl
clN1cmZhY2VDb250ZW50UmVjdCkuY2VudGVyKCk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGNs
aXBwZWRTdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0KGNsaXBwZWRDb250ZW50UmVjdCkuY2VudGVy
KCk7CiAgICAgICAgICAgICBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nID0gY2xpcHBlZFN1cmZh
Y2VDZW50ZXIgLSBzdXJmYWNlQ2VudGVyOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIFJl
bmRlclN1cmZhY2UgYmFja2luZyB0ZXh0dXJlIGNhbm5vdCBleGNlZWQgdGhlIG1heGltdW0gc3Vw
cG9ydGVkCiAgICAgICAgIC8vIHRleHR1cmUgc2l6ZS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZUNv
bnRlbnRSZWN0LnNldFdpZHRoKHN0ZDo6bWluKHJlbmRlclN1cmZhY2VDb250ZW50UmVjdC53aWR0
aCgpLCBtX21heFRleHR1cmVTaXplKSk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2VDb250ZW50UmVj
dC5zZXRIZWlnaHQoc3RkOjptaW4ocmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0LmhlaWdodCgpLCBt
X21heFRleHR1cmVTaXplKSk7CisgICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5zZXRXaWR0aCht
aW4oY2xpcHBlZENvbnRlbnRSZWN0LndpZHRoKCksIG1heFRleHR1cmVTaXplKSk7CisgICAgICAg
IGNsaXBwZWRDb250ZW50UmVjdC5zZXRIZWlnaHQobWluKGNsaXBwZWRDb250ZW50UmVjdC5oZWln
aHQoKSwgbWF4VGV4dHVyZVNpemUpKTsKIAotICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUNvbnRl
bnRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKGNsaXBwZWRDb250ZW50UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOwotICAgICAg
ICByZW5kZXJTdXJmYWNlLT5zZXRDb250ZW50UmVjdChyZW5kZXJTdXJmYWNlQ29udGVudFJlY3Qp
OworCisgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KGNsaXBwZWRDb250ZW50
UmVjdCk7CiAKICAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIg
c3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMKICAgICAgICAgLy8gc2Npc3NvciByZWN0IHRv
IGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KQEAg
LTM2MSw3ICszODAsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVy
dGllc0FuZFJlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiBsYXllcgogICAgIC8vIGRyYXduIGZy
b20gYmFjayB0byBmcm9udC4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNl
dCBvbiB0aGUgcGFyZW50IHRoZW4KICAgICAvLyBza2lwIHRoZSBzb3J0aW5nIGFzIHRoZSBwYXJl
bnQgd2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgogICAgIGlmIChsYXllci0+
cHJlc2VydmVzM0QoKSAmJiAoIWxheWVyLT5wYXJlbnQoKSB8fCAhbGF5ZXItPnBhcmVudCgpLT5w
cmVzZXJ2ZXMzRCgpKSkKLSAgICAgICAgbV9sYXllclNvcnRlci5zb3J0KCZkZXNjZW5kYW50cy5h
dCh0aGlzTGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpKTsKKyAgICAgICAgc29ydExheWVy
cygmZGVzY2VuZGFudHMuYXQodGhpc0xheWVySW5kZXgpLCBkZXNjZW5kYW50cy5lbmQoKSwgbGF5
ZXJTb3J0ZXIpOworfQorCiB9CiAKIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcnRob01h
dHJpeChmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3ApCkBA
IC01NDYsMTkgKzU2NywxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5
ZXJzKCkKICAgICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICB7Ci0g
ICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnN5bmNocm9uaXplVHJl
ZXMiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVlU3luY2hyb25p
emVyOjpzeW5jaHJvbml6ZVRyZWVzKG1fcm9vdExheWVyLmdldCgpLCBtX3Jvb3RDQ0xheWVySW1w
bC5nZXQoKSk7Ci0gICAgfQotCi0gICAgbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Qg
PSBhZG9wdFB0cihuZXcgTGF5ZXJMaXN0KCkpOwotICAgIHVwZGF0ZUxheWVycygqbV9jb21wdXRl
ZFJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIHVwZGF0ZUxheWVycyhtX3Jvb3RMYXllci5n
ZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKIHsK
ICAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5nKTsKLSAgICBBU1NFUlQobV9jb21wdXRl
ZFJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIC8vIEJlZm9yZSBkcmF3TGF5ZXJzOgogICAg
IGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoZSBtdWx0
aXRocmVhZGVkIGNvbXBvc2l0b3IgY2FzZSB3aWxsIG5vdCB3b3JrIGFzIGxvbmcgYXMKQEAgLTU3
Miw4ICs1ODYsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQog
ICAgICAgICB9CiAgICAgfQogCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVzIiwgdGhpcywgMCk7CisgICAgICAgIG1fcm9v
dENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhtX3Jvb3RM
YXllci5nZXQoKSwgbV9yb290Q0NMYXllckltcGwuZ2V0KCkpOworICAgIH0KKworCiAgICAgbV9y
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZU1l
bW9yeUhpZ2hMaW1pdEJ5dGVzIC0gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVt
b3J5VXNlQnl0ZXMoKSk7Ci0gICAgZHJhd0xheWVycygqbV9jb21wdXRlZFJlbmRlclN1cmZhY2VM
YXllckxpc3QpOworICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogCiAgICAgbV9jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogICAgIG1fY29udGVudHNUZXh0
dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCh0ZXh0dXJlTWVtb3J5UmVjbGFpbUxpbWl0
Qnl0ZXMpOwpAQCAtNTg3LDMzICs2MDcsMzEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdMYXllcnMoKQogICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwog
fQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQogewogICAgIFRSQUNFX0VWRU5UKCJM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOwotICAgIENDTGF5
ZXJJbXBsKiByb290RHJhd0xheWVyID0gbV9yb290TGF5ZXItPmNjTGF5ZXJJbXBsKCk7CiAKLSAg
ICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKLSAgICAgICAgcm9vdERyYXdM
YXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgIEFTU0VSVChyb290RHJhd0xheWVyLT5y
ZW5kZXJTdXJmYWNlKCkpOwotCi0gICAgcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3ZpZXdwb3J0VmlzaWJsZVJl
Y3Quc2l6ZSgpKSk7CisgICAgaWYgKCFyb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAg
ICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdExheWVyLT5yZW5k
ZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmll
d3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKIAogICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0
KG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7CiAgICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNob3VsZCBu
b3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KICAgICByb290U2Npc3NvclJlY3QubW92ZSgt
bV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uLngoKSwgLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi55
KCkpOwotICAgIHJvb3REcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KHJvb3RTY2lzc29yUmVjdCk7
CisgICAgcm9vdExheWVyLT5zZXRTY2lzc29yUmVjdChyb290U2Npc3NvclJlY3QpOwogCi0gICAg
bV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsK
KyAgICBMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIpOwogCi0gICAgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dC5hcHBlbmQocm9vdERyYXdMYXllcik7CisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByb290
UmVuZGVyU3VyZmFjZSA9IHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3RSZW5k
ZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
aWRlbnRpdHlNYXRyaXg7Ci0gICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxp
c3QoKTsKLSAgICAvLyBVbmZvcnR1bmF0ZWx5LCB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3Vy
ZmFjZXMoKSBjdXJyZW50bHkgYm90aCB1cGRhdGVzIHRoZSBsYXllcnMgYW5kIHVwZGF0ZXMgdGhl
IGRyYXcgc3RhdGUKLSAgICAvLyAodHJhbnNmb3JtcywgZXRjKS4gSXQnZCBiZSBuaWNlciBpZiBv
cGVyYXRpb25zIG9uIHRoZSBwcmVzZW50YXRpb24gbGF5ZXJzIGhhcHBlbmVkIGxhdGVyLCBidXQg
dGhlIGRyYXcKLSAgICAvLyB0cmFuc2Zvcm1zIGFyZSBuZWVkZWQgYnkgbGFyZ2UgbGF5ZXJzIHRv
IGRldGVybWluZSB2aXNpYmlsaXR5LiBUaWxpbmcgd2lsbCBmaXggdGhpcyBieSBlbGltaW5hdGlu
ZyB0aGUKLSAgICAvLyBjb25jZXB0IG9mIGEgbGFyZ2UgY29udGVudCBsYXllci4KLSAgICB1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMocm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpKTsKKworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlTGF5ZXJzOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOworICAgICAgICBjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtLCB2b2lkKj4ocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCks
IDAsIG1fbWF4VGV4dHVyZVNpemUpOworICAgIH0KIAogI2lmbmRlZiBOREVCVUcKICAgICBzX2lu
UGFpbnRMYXllckNvbnRlbnRzID0gdHJ1ZTsKQEAgLTY1OCw3ICs2NzYsNyBAQCBzdGF0aWMgdm9p
ZCBwYWludENvbnRlbnRzSWZEaXJ0eShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgSW50UmVj
dCYgdmlzaWJsZUxheQogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50TGF5ZXJDb250
ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgZm9y
IChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBz
dXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7Ci0gICAgICAgIENDTGF5ZXJJbXBs
KiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRl
eF0uZ2V0KCk7CisgICAgICAgIExheWVyQ2hyb21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJl
bmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKICAgICAgICAgUmVuZGVy
U3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5k
ZXJTdXJmYWNlKCk7CiAgICAgICAgIEFTU0VSVChyZW5kZXJTdXJmYWNlKTsKIApAQCAtNjc1LDE4
ICs2OTMsMTYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50TGF5ZXJDb250ZW50
cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXkKICAgICAgICAgaWYgKCFyZW5kZXJT
dXJmYWNlLT5kcmF3T3BhY2l0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
TGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKTsKKyAgICAg
ICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJmYWNlLT5sYXllckxpc3Qo
KTsKICAgICAgICAgQVNTRVJUKGxheWVyTGlzdC5zaXplKCkpOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXll
ckluZGV4KSB7Ci0gICAgICAgICAgICBDQ0xheWVySW1wbCogY2NMYXllckltcGwgPSBsYXllckxp
c3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9
IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKIAogICAgICAgICAgICAgLy8gTGF5ZXJzIHRo
YXQgc3RhcnQgYSBuZXcgcmVuZGVyIHN1cmZhY2Ugd2lsbCBiZSBwYWludGVkIHdoZW4gdGhlIHJl
bmRlcgogICAgICAgICAgICAgLy8gc3VyZmFjZSdzIGxpc3QgaXMgcHJvY2Vzc2VkLgotICAgICAg
ICAgICAgaWYgKGNjTGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkgJiYgY2NMYXllckltcGwtPnJl
bmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNlKQorICAgICAgICAgICAgaWYgKGxheWVyLT5y
ZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSByZW5kZXJTdXJmYWNl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBMYXllckNocm9taXVt
KiBsYXllciA9IGNjTGF5ZXJJbXBsLT5vd25lcigpOwotCiAgICAgICAgICAgICBsYXllci0+c2V0
TGF5ZXJSZW5kZXJlcih0aGlzKTsKIAogICAgICAgICAgICAgaWYgKCFsYXllci0+b3BhY2l0eSgp
KQpAQCAtNzAzLDEwICs3MTksMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXkKICAgICAgICAg
ICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gY2NMYXllcklt
cGwtPnRhcmdldFJlbmRlclN1cmZhY2UoKSA/IGNjTGF5ZXJJbXBsLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPmNvbnRlbnRSZWN0KCkgOiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVj
dCgpOwotICAgICAgICAgICAgaWYgKGxheWVyLT5jY0xheWVySW1wbCgpLT51c2VzTGF5ZXJTY2lz
c29yKCkpCi0gICAgICAgICAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KGxheWVy
LT5jY0xheWVySW1wbCgpLT5zY2lzc29yUmVjdCgpKTsKLSAgICAgICAgICAgIEludFJlY3Qgdmlz
aWJsZUxheWVyUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QodGFyZ2V0U3VyZmFjZVJl
Y3QsIGxheWVyLT5ib3VuZHMoKSwgbGF5ZXItPmNvbnRlbnRCb3VuZHMoKSwgY2NMYXllckltcGwt
PmRyYXdUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0
ID0gbGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT50YXJnZXRSZW5kZXJTdXJm
YWNlKCktPmNvbnRlbnRSZWN0KCkgOiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVj
dCgpOworICAgICAgICAgICAgaWYgKGxheWVyLT51c2VzTGF5ZXJTY2lzc29yKCkpCisgICAgICAg
ICAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgp
KTsKKyAgICAgICAgICAgIEludFJlY3QgdmlzaWJsZUxheWVyUmVjdCA9IGNhbGN1bGF0ZVZpc2li
bGVMYXllclJlY3QodGFyZ2V0U3VyZmFjZVJlY3QsIGxheWVyLT5ib3VuZHMoKSwgbGF5ZXItPmNv
bnRlbnRCb3VuZHMoKSwgbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKSk7CiAKICAgICAgICAgICAgIHBh
aW50Q29udGVudHNJZkRpcnR5KGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0KTsKIApAQCAtNzI1LDE1
ICs3NDEsMzYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50TGF5ZXJDb250ZW50
cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXkKICAgICB9CiB9CiAKLXZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50
ZXJuYWwoKQogewogICAgIGlmIChtX3ZpZXdwb3J0VmlzaWJsZVJlY3QuaXNFbXB0eSgpIHx8ICFt
X3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIENDTGF5ZXJJbXBsKiBy
b290RHJhd0xheWVyID0gbV9yb290TGF5ZXItPmNjTGF5ZXJJbXBsKCk7CisgICAgQ0NMYXllcklt
cGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKTsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIAorICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgp
KQorICAgICAgICByb290RHJhd0xheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9v
dERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBv
aW50KDAsIDApLCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Quc2l6ZSgpKSk7CisKKyAgICBJbnRSZWN0
IHJvb3RTY2lzc29yUmVjdChtX3ZpZXdwb3J0VmlzaWJsZVJlY3QpOworICAgIC8vIFRoZSBzY2lz
c29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQuCisgICAgcm9vdFNj
aXNzb3JSZWN0Lm1vdmUoLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi54KCksIC1tX3ZpZXdwb3J0
U2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICByb290RHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChy
b290U2Npc3NvclJlY3QpOworCisgICAgQ0NMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290RHJhd0xheWVyKTsKKwor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UgPSByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgbV9kZWZh
dWx0UmVuZGVyU3VyZmFjZS0+Y2xlYXJMYXllckxpc3QoKTsKKworICAgIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsOjpjYWxj
RHJhd0V0YyIsIHRoaXMsIDApOworICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHk8Q0NMYXllckltcGwsIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllclNvcnRlcj4ocm9v
dERyYXdMYXllciwgcm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAmbV9sYXllclNv
cnRlciwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgfQorCiAgICAgLy8gVGhlIEdMIHZpZXdwb3J0
IGNvdmVycyB0aGUgZW50aXJlIHZpc2libGUgYXJlYSwgaW5jbHVkaW5nIHRoZSBzY3JvbGxiYXJz
LgogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV92
aWV3cG9ydFZpc2libGVSZWN0LndpZHRoKCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5oZWlnaHQo
KSkpOwogCkBAIC03NzEsNyArODA4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogICAgIC8v
IGNvcnJlY3Qgb3JkZXIuCiAgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4
KSB7CiAgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VD
aHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFj
ZSgpOworICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJm
YWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2Up
OwogCiAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFNraXBzRHJhdyh0cnVlKTsKQEAgLTc5NSw3
ICs4MzIsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBM
YXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiAgICAgICAgICAgICAgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBMYXllckxpc3QmIGxheWVy
TGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOworICAgICAgICAgICAgY29uc3QgQ0NM
YXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlz
dC5zaXplKCk7ICsrbGF5ZXJJbmRleCkKICAgICAgICAgICAgICAgICBkcmF3TGF5ZXIobGF5ZXJM
aXN0W2xheWVySW5kZXhdLmdldCgpLCByZW5kZXJTdXJmYWNlKTsKICAgICAgICAgfQpAQCAtOTE1
LDcgKzk1Miw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVyVmlzaWJsZShM
YXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpCiB7CiAgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFj
ZUluZGV4KSB7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIExheWVyQ2hy
b21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFj
ZUluZGV4XS5nZXQoKTsKICAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJm
YWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgIEFTU0VS
VChyZW5kZXJTdXJmYWNlKTsKIApAQCAtOTI1LDE5ICs5NjIsMTcgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiBy
ZW5kZXJTdXIKICAgICAgICAgY29uc3QgTGF5ZXJMaXN0JiBsYXllckxpc3QgPSByZW5kZXJTdXJm
YWNlLT5sYXllckxpc3QoKTsKICAgICAgICAgQVNTRVJUKGxheWVyTGlzdC5zaXplKCkpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAwOyBsYXllckluZGV4IDwgbGF5ZXJMaXN0
LnNpemUoKTsgKytsYXllckluZGV4KSB7Ci0gICAgICAgICAgICBDQ0xheWVySW1wbCogY2NMYXll
ckltcGwgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoY2NM
YXllckltcGwtPnJlbmRlclN1cmZhY2UoKSAmJiBjY0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgp
ICE9IHJlbmRlclN1cmZhY2UpCisgICAgICAgICAgICBMYXllckNocm9taXVtKiBsYXllciA9IGxh
eWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVy
U3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhjY0xheWVySW1wbCk7CisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKGxheWVyKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBs
KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
TGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiB7Ci0gICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBjY0xh
eWVySW1wbC0+b3duZXIoKTsKLQogICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTk0NSwxNCArOTgwLDEyIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKENDTGF5ZXJJbXBsKiBjY0xheWVy
SW1wbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAg
ICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhjY0xheWVySW1wbC0+bWFza0xheWVyKCkp
OworICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5tYXNrTGF5ZXIoKSk7
CiAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhjY0xheWVySW1wbC0+cmVwbGljYUxheWVyKCkpOworICAgICAgICB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSk7CiAKICAgICBpZiAobGF5
ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygpOwotCi0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8oY2NMYXllckltcGwpOwogfQog
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wg
Y29tcG9zaXRlT2Zmc2NyZWVuKQpAQCAtOTYyLDEzICs5OTUsMTMgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnNldENvbXBvc2l0ZU9mZnNjcmVlbihib29sIGNvbXBvc2l0ZU9mZnNjcmVl
bikKIAogICAgIG1fY29tcG9zaXRlT2Zmc2NyZWVuID0gY29tcG9zaXRlT2Zmc2NyZWVuOwogCi0g
ICAgaWYgKCFtX2NvbXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RMYXllcikKLSAgICAgICAgbV9y
b290TGF5ZXItPmNjTGF5ZXJJbXBsKCktPmNsZWFyUmVuZGVyU3VyZmFjZSgpOworICAgIGlmICgh
bV9jb21wb3NpdGVPZmZzY3JlZW4gJiYgbV9yb290Q0NMYXllckltcGwpCisgICAgICAgIG1fcm9v
dENDTGF5ZXJJbXBsLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKIH0KIAogTGF5ZXJUZXh0dXJlKiBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgpCiB7Ci0gICAg
cmV0dXJuIG1fY29tcG9zaXRlT2Zmc2NyZWVuID8gbV9yb290TGF5ZXItPmNjTGF5ZXJJbXBsKCkt
PnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOworICAgIHJldHVybiBtX2Nv
bXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RDQ0xheWVySW1wbCA/IG1fcm9vdENDTGF5ZXJJbXBs
LT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKIH0KIAogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCkKQEAgLTk4
NSw3ICsxMDE4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlPZmZzY3JlZW5U
ZXh0dXJlVG9EaXNwbGF5KCkKICAgICB9CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1c2VSZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSkK
K2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3Vy
ZmFjZSogcmVuZGVyU3VyZmFjZSkKIHsKICAgICBpZiAobV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9
PSByZW5kZXJTdXJmYWNlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEwMTksNyArMTA1Miw3
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFN1cmZhY2UpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5kZXJTdXJmYWNlKiB0YXJn
ZXRTdXJmYWNlKQogewogICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5y
ZW5kZXJTdXJmYWNlKCkgIT0gdGFyZ2V0U3VyZmFjZSkgewogICAgICAgICBsYXllci0+cmVuZGVy
U3VyZmFjZSgpLT5kcmF3KGxheWVyLT5nZXREcmF3UmVjdCgpKTsKQEAgLTEwNDYsNyArMTA3OSw2
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxh
eWVyLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qCiAgICAgfSBlbHNlCiAgICAgICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKSk7CiAKLQogICAgIGlmICghbGF5ZXItPmRvdWJsZVNpZGVkKCkpIHsKICAgICAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGN1bXVsYXRpdmUgcmVuZGVy
IHN1cmZhY2UgdHJhbnNmb3JtcyBhbGwgdGhlIHdheSBmcm9tCiAgICAgICAgIC8vICAgICAgICB0
aGUgZGVmYXVsdCByZW5kZXIgc3VyZmFjZSBpbiBvcmRlciB0byBkZXRlcm1pbmUgdmlzaWJpbGl0
eS4KQEAgLTExNDUsNyArMTE3Nyw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0
aWFsaXplU2hhcmVkT2JqZWN0cygpCiAgICAgLy8gV2Ugd2lsbCBhbHdheXMgbmVlZCB0aGVzZSBw
cm9ncmFtcyB0byByZW5kZXIsIHNvIGNyZWF0ZSB0aGUgcHJvZ3JhbXMgZWFnZXJseSBzbyB0aGF0
IHRoZSBzaGFkZXIgY29tcGlsYXRpb24gY2FuCiAgICAgLy8gc3RhcnQgd2hpbGUgd2UgZG8gb3Ro
ZXIgd29yay4gT3RoZXIgcHJvZ3JhbXMgYXJlIGNyZWF0ZWQgbGF6aWx5IG9uIGZpcnN0IGFjY2Vz
cy4KICAgICBtX3NoYXJlZEdlb21ldHJ5ID0gYWRvcHRQdHIobmV3IEdlb21ldHJ5QmluZGluZyht
X2NvbnRleHQuZ2V0KCkpKTsKLSAgICBtX3JlbmRlclN1cmZhY2VQcm9ncmFtID0gYWRvcHRQdHIo
bmV3IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAg
ICBtX3JlbmRlclN1cmZhY2VQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZTo6
UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3RpbGVyUHJvZ3JhbSA9IGFkb3B0UHRy
KG5ldyBMYXllclRpbGVyQ2hyb21pdW06OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CiAKICAg
ICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmZsdXNoKCkpOwpAQCAtMTE3Nyw3ICsx
MjA5LDcgQEAgY29uc3QgQ0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpoZWFkc1VwRGlzcGxheVByb2dyYW0oKQogICAgIHJldHVybiBtX2hlYWRzVXBEaXNw
bGF5UHJvZ3JhbS5nZXQoKTsKIH0KIAotY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpQcm9n
cmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtKCkKK2NvbnN0
IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJT
dXJmYWNlUHJvZ3JhbSgpCiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyU3VyZmFjZVByb2dyYW0pOwog
ICAgIGlmICghbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewpAQCAtMTE4
NywxMCArMTIxOSwxMCBAQCBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0qIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZVByb2dyYQogICAgIHJldHVybiBtX3Jl
bmRlclN1cmZhY2VQcm9ncmFtLmdldCgpOwogfQogCi1jb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW06Ok1hc2tQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VNYXNr
UHJvZ3JhbSgpCitjb25zdCBDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9ncmFtKiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpCiB7CiAgICAgaWYgKCFtX3Jl
bmRlclN1cmZhY2VNYXNrUHJvZ3JhbSkKLSAgICAgICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dy
YW0gPSBhZG9wdFB0cihuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpNYXNrUHJvZ3JhbShtX2Nv
bnRleHQuZ2V0KCkpKTsKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0gPSBhZG9w
dFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsK
ICAgICBpZiAoIW1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CiAg
ICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmJvcmRlclByb2dyYW06
OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKICAgICAgICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dy
YW0tPmluaXRpYWxpemUoKTsKQEAgLTEzNDMsOCArMTM3NSw4IEBAIGJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpCiAKIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQs
IExheWVyQ2hyb21pdW0qIGxheWVyKSBjb25zdAogewotICAgIGlmIChsYXllci0+Y2NMYXllcklt
cGwoKS0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICBsYXllci0+Y2NMYXllckltcGwoKS0+cmVu
ZGVyU3VyZmFjZSgpLT5kdW1wU3VyZmFjZSh0cywgaW5kZW50KTsKKyAgICBpZiAobGF5ZXItPnJl
bmRlclN1cmZhY2UoKSkKKyAgICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHVtcFN1cmZh
Y2UodHMsIGluZGVudCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVyLT5jaGls
ZHJlbigpLnNpemUoKTsgKytpKQogICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIGluZGVu
dCwgbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAppbmRleCBjYjE0NDc0OTQ3ZDQzZTc4ZjUzZDJkZTkyN2I1ZTUxZDJmZTM2ZTBiLi4w
NmI5NDg2OTY4ODBiMGQ0MzIwZDFhYmJlZDdjODdmM2MxNWFiYTM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9t
aXVtLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2tC
aXRtYXAuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9D
Q0NhbnZhc0xheWVySW1wbC5oIgpAQCAtMTI5LDggKzEyOCw4IEBAIHB1YmxpYzoKICAgICBjb25z
dCBHZW9tZXRyeUJpbmRpbmcqIHNoYXJlZEdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gbV9zaGFy
ZWRHZW9tZXRyeS5nZXQoKTsgfQogICAgIGNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRlclByb2dy
YW0qIGJvcmRlclByb2dyYW0oKTsKICAgICBjb25zdCBDQ0hlYWRzVXBEaXNwbGF5OjpQcm9ncmFt
KiBoZWFkc1VwRGlzcGxheVByb2dyYW0oKTsKLSAgICBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW06OlByb2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7Ci0gICAgY29uc3QgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtOjpNYXNrUHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7Cisg
ICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKiByZW5kZXJTdXJmYWNlUHJvZ3JhbSgp
OworICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW0qIHJlbmRlclN1cmZhY2VN
YXNrUHJvZ3JhbSgpOwogICAgIGNvbnN0IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbSogdGls
ZXJQcm9ncmFtKCk7CiAgICAgY29uc3QgTGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenps
ZSogdGlsZXJQcm9ncmFtU3dpenpsZSgpOwogICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJbXBsOjpQ
cm9ncmFtKiBjYW52YXNMYXllclByb2dyYW0oKTsKQEAgLTE2MiwxMSArMTYxLDEzIEBAIHB1Ymxp
YzoKICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGJvb2wgc19pblBhaW50TGF5ZXJDb250ZW50
czsKICNlbmRpZgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExh
eWVyTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXll
ckxpc3Q7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbFByb3h5PiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CiAKIHByaXZhdGU6
Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVyTGlzdDsKICAg
ICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxkQ29udGV4dE1h
cDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ0xheWVy
VHJlZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCkBAIC0xNzQsMTYgKzE3NSwxNSBA
QCBwcml2YXRlOgogCiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENs
aWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVyUGFp
bnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJvb2wgYWNjZWxlcmF0ZURyYXdpbmcpOwogCi0g
ICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
KyAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CiAgICAgdm9pZCB1cGRhdGVS
b290TGF5ZXJDb250ZW50cygpOwotICAgIHZvaWQgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1
cmZhY2VzKENDTGF5ZXJJbXBsKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1h
dHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVy
cyk7CiAKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmKTsKICAg
ICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoQ0NM
YXllckltcGwqKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJv
bWl1bSopOwogCi0gICAgdm9pZCBkcmF3TGF5ZXJzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7Ci0gICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qKTsKKyAgICB2b2lkIGRyYXdMYXllcnNJbnRlcm5hbCgpOworICAgIHZv
aWQgZHJhd0xheWVyKENDTGF5ZXJJbXBsKiwgQ0NSZW5kZXJTdXJmYWNlKik7CiAKICAgICB2b2lk
IGRyYXdSb290TGF5ZXIoKTsKICAgICBMYXllclRleHR1cmUqIGdldE9mZnNjcmVlbkxheWVyVGV4
dHVyZSgpOwpAQCAtMTkzLDcgKzE5Myw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldERyYXdW
aWV3cG9ydFJlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwogCi0gICAgYm9vbCB1c2VS
ZW5kZXJTdXJmYWNlKFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOworICAgIGJvb2wgdXNlUmVuZGVy
U3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqKTsKIAogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAKQEAgLTIyMSw3ICsyMjEsNyBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPExheWVyTGlz
dD4gbV9jb21wdXRlZFJlbmRlclN1cmZhY2VMYXllckxpc3Q7CiAKLSAgICBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qIG1fY3VycmVudFJlbmRlclN1cmZhY2U7CisgICAgQ0NSZW5kZXJTdXJmYWNlKiBt
X2N1cnJlbnRSZW5kZXJTdXJmYWNlOwogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZm
ZXJJZDsKICAgICBib29sIG1fY29tcG9zaXRlT2Zmc2NyZWVuOwogCkBAIC0yMzUsMTQgKzIzNSwx
NCBAQCBwcml2YXRlOgogICAgIE93blB0cjxHZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2VvbWV0
cnk7CiAgICAgT3duUHRyPExheWVyQ2hyb21pdW06OkJvcmRlclByb2dyYW0+IG1fYm9yZGVyUHJv
Z3JhbTsKICAgICBPd25QdHI8Q0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbT4gbV9oZWFkc1VwRGlz
cGxheVByb2dyYW07Ci0gICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UHJvZ3JhbT4g
bV9yZW5kZXJTdXJmYWNlUHJvZ3JhbTsKLSAgICBPd25QdHI8UmVuZGVyU3VyZmFjZUNocm9taXVt
OjpNYXNrUHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW07CiAgICAgT3duUHRyPExh
eWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbT4gbV90aWxlclByb2dyYW07CiAgICAgT3duUHRyPExh
eWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbVN3aXp6bGU+IG1fdGlsZXJQcm9ncmFtU3dpenpsZTsK
ICAgICBPd25QdHI8Q0NDYW52YXNMYXllckltcGw6OlByb2dyYW0+IG1fY2FudmFzTGF5ZXJQcm9n
cmFtOworICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbT4gbV9wbHVnaW5MYXll
clByb2dyYW07CisgICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW0+IG1fcmVu
ZGVyU3VyZmFjZU1hc2tQcm9ncmFtOworICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U6OlByb2dy
YW0+IG1fcmVuZGVyU3VyZmFjZVByb2dyYW07CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6
OlJHQkFQcm9ncmFtPiBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbTsKICAgICBPd25QdHI8Q0NWaWRl
b0xheWVySW1wbDo6WVVWUHJvZ3JhbT4gbV92aWRlb0xheWVyWVVWUHJvZ3JhbTsKLSAgICBPd25Q
dHI8Q0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0+IG1fcGx1Z2luTGF5ZXJQcm9ncmFtOwogCiAg
ICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXI7CiAgICAg
T3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlcjsKQEAg
LTI2Miw3ICsyNjIsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2FuaW1hdGluZzsKIAotICAg
IFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9kZWZhdWx0UmVuZGVyU3VyZmFjZTsKKyAgICBDQ1Jl
bmRlclN1cmZhY2UqIG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CiAKICAgICBDQ0xheWVyU29ydGVy
IG1fbGF5ZXJTb3J0ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcAppbmRl
eCAwMDBmMjk1MGY0OWNjYjUyYmM2NjM1OTc2NmVkMWM2ODNhMzM4OTQ3Li5iNmUzNTA2ZmNmZmYz
YTU2ODFhNTUzZjQxYTZmNWViMjQ4ZTgxZTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcApAQCAtNDksNyArNDksNyBAQCBQbHVnaW5MYXllckNocm9taXVtOjpQbHVnaW5MYXll
ckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAKIFBhc3NSZWZQdHI8Q0NM
YXllckltcGw+IFBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAg
ICByZXR1cm4gQ0NQbHVnaW5MYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOworICAg
IHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQg
UGx1Z2luTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1JlbmRlclN1cmZhY2VDaHJvbWl1bS5jcHAKaW5kZXggNmEyNzIxNmQwMjRiZTkzMTJlZjY5NjI3
MTk0MmU2Mjk1ZGI4NDM2NC4uZTlhM2RmZDBiNWQ2NjhiZjc0MjVkNjJkNTA2ODlkZmYxODFmYTYw
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCkBAIC0yOSwxNyArMjks
MTQgQEAKIAogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAi
Y2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIK
LSNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKLSNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRl
clN1cmZhY2VDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZUNocm9taXVtKENDTGF5ZXJJbXBsKiBvd25p
bmdMYXllcikKK1JlbmRlclN1cmZhY2VDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZUNocm9taXVtKExh
eWVyQ2hyb21pdW0qIG93bmluZ0xheWVyKQogICAgIDogbV9vd25pbmdMYXllcihvd25pbmdMYXll
cikKICAgICAsIG1fbWFza0xheWVyKDApCiAgICAgLCBtX3NraXBzRHJhdyhmYWxzZSkKQEAgLTQ5
LDE3ICs0Niw2IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZUNocm9taXVt
KENDTGF5ZXJJbXBsKiBvd25pbmdMYXllcikKIAogUmVuZGVyU3VyZmFjZUNocm9taXVtOjp+UmVu
ZGVyU3VyZmFjZUNocm9taXVtKCkKIHsKLSAgICBjbGVhbnVwUmVzb3VyY2VzKCk7Ci19Ci0KLXZv
aWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKLXsKLSAgICBpZiAo
IW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobGF5ZXJS
ZW5kZXJlcigpKTsKLQotICAgIG1fY29udGVudHNUZXh0dXJlLmNsZWFyKCk7CiB9CiAKIExheWVy
UmVuZGVyZXJDaHJvbWl1bSogUmVuZGVyU3VyZmFjZUNocm9taXVtOjpsYXllclJlbmRlcmVyKCkK
QEAgLTc5LDEwNSArNjUsNiBAQCBGbG9hdFJlY3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3
YWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKICAgICByZXR1cm4gZHJhd2FibGVDb250ZW50UmVjdDsK
IH0KIAotYm9vbCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OnByZXBhcmVDb250ZW50c1RleHR1cmUo
KQotewotICAgIEludFNpemUgcmVxdWlyZWRTaXplKG1fY29udGVudFJlY3Quc2l6ZSgpKTsKLSAg
ICBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIgPSBsYXllclJlbmRlcmVyKCktPnJlbmRl
clN1cmZhY2VUZXh0dXJlTWFuYWdlcigpOwotCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkK
LSAgICAgICAgbV9jb250ZW50c1RleHR1cmUgPSBMYXllclRleHR1cmU6OmNyZWF0ZShsYXllclJl
bmRlcmVyKCktPmNvbnRleHQoKSwgdGV4dHVyZU1hbmFnZXIpOwotCi0gICAgaWYgKG1fY29udGVu
dHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFNpemUsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKSkgewotICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBtX3NraXBzRHJhdyA9IGZhbHNlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6cmVsZWFzZUNvbnRlbnRzVGV4
dHVyZSgpCi17Ci0gICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX2NvbnRlbnRzVGV4dHVyZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fY29udGVudHNUZXh0dXJlLT51bnJlc2VydmUoKTsKLX0KLQot
dm9pZCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdTdXJmYWNlKENDTGF5ZXJJbXBsKiBtYXNr
TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKQotewotICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBsYXllclJlbmRlcmVyKCktPmNvbnRleHQo
KTsKLQotICAgIGludCBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IC0xOwotICAgIGludCBzaGFkZXJB
bHBoYUxvY2F0aW9uID0gLTE7Ci0gICAgY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpQcm9n
cmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5yZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOwot
ICAgIGNvbnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6TWFza1Byb2dyYW0qIG1hc2tQcm9ncmFt
ID0gbGF5ZXJSZW5kZXJlcigpLT5yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0oKTsKLSAgICBBU1NF
UlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKLSAgICBib29sIHVzZU1hc2sg
PSBmYWxzZTsKLSAgICBpZiAobWFza0xheWVyICYmIG1hc2tMYXllci0+ZHJhd3NDb250ZW50KCkp
IHsKLSAgICAgICAgaWYgKCFtYXNrTGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgY29udGV4dDNELT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgICAgIEdMQyhj
b250ZXh0M0QsIGNvbnRleHQzRC0+dXNlUHJvZ3JhbShtYXNrUHJvZ3JhbS0+cHJvZ3JhbSgpKSk7
Ci0gICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7Ci0gICAgICAgICAgICBHTEMoY29udGV4dDNELCBj
b250ZXh0M0QtPnVuaWZvcm0xaShtYXNrUHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVy
TG9jYXRpb24oKSwgMCkpOwotICAgICAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0
dXJlKCk7Ci0gICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7Ci0gICAgICAgICAgICBHTEMoY29udGV4
dDNELCBjb250ZXh0M0QtPnVuaWZvcm0xaShtYXNrUHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5t
YXNrU2FtcGxlckxvY2F0aW9uKCksIDEpKTsKLSAgICAgICAgICAgIG1hc2tMYXllci0+YmluZENv
bnRlbnRzVGV4dHVyZSgpOwotICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgICAgICAgICAg
c2hhZGVyTWF0cml4TG9jYXRpb24gPSBtYXNrUHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4
TG9jYXRpb24oKTsKLSAgICAgICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24gPSBtYXNrUHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7Ci0gICAgICAgICAgICB1c2VNYXNr
ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghdXNlTWFzaykgewotICAgICAg
ICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgp
KSk7Ci0gICAgICAgIG1fY29udGVudHNUZXh0dXJlLT5iaW5kVGV4dHVyZSgpOwotICAgICAgICBH
TEMoY29udGV4dDNELCBjb250ZXh0M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRl
cigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9u
ID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKLSAgICAgICAgc2hh
ZGVyQWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlv
bigpOwotICAgIH0KLSAgICAKLSAgICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGxh
eWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRy
aXgoKSwgZHJhd1RyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NvbnRlbnRSZWN0LndpZHRoKCksIG1fY29udGVudFJlY3QuaGVpZ2h0KCksIG1fZHJh
d09wYWNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVy
TWF0cml4TG9jYXRpb24sIHNoYWRlckFscGhhTG9jYXRpb24pOwotfQotCi12b2lkIFJlbmRlclN1
cmZhY2VDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSZWN0JikKLXsKLSAgICBpZiAobV9za2lwc0Ry
YXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6
IEJ5IHVzaW5nIHRoZSBzYW1lIFJlbmRlclN1cmZhY2UgZm9yIGJvdGggdGhlIGNvbnRlbnQgYW5k
IGl0cyByZWZsZWN0aW9uLAotICAgIC8vIGl0J3MgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0byBh
cHBseSBhIHNlcGFyYXRlIG1hc2sgdG8gdGhlIHJlZmxlY3Rpb24gbGF5ZXIKLSAgICAvLyBvciBj
b3JyZWN0bHkgaGFuZGxlIG9wYWNpdHkgaW4gcmVmbGVjdGlvbnMgKG9wYWNpdHkgbXVzdCBiZSBh
cHBsaWVkIGFmdGVyIGRyYXdpbmcKLSAgICAvLyBib3RoIHRoZSBsYXllciBhbmQgaXRzIHJlZmxl
Y3Rpb24pLiBUaGUgc29sdXRpb24gaXMgdG8gaW50cm9kdWNlIHlldCBhbm90aGVyIFJlbmRlclN1
cmZhY2UKLSAgICAvLyB0byBkcmF3IHRoZSBsYXllciBhbmQgaXRzIHJlZmxlY3Rpb24gaW4uIEZv
ciBub3cgd2Ugb25seSBhcHBseSBhIHNlcGFyYXRlIHJlZmxlY3Rpb24KLSAgICAvLyBtYXNrIGlm
IHRoZSBjb250ZW50cyBkb24ndCBoYXZlIGEgbWFzayBvZiB0aGVpciBvd24uCi0gICAgQ0NMYXll
ckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX21hc2tMYXllcjsKLSAgICBpZiAoIW1fbWFza0xh
eWVyICYmIG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAgICAgICByZXBsaWNhTWFz
a0xheWVyID0gbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpOwotCi0g
ICAgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVudCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgp
LT51c2VzTGF5ZXJTY2lzc29yKCkpCi0gICAgICAgIGxheWVyUmVuZGVyZXIoKS0+c2V0U2Npc3Nv
clRvUmVjdChtX3NjaXNzb3JSZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIEdMQyhsYXllclJlbmRl
cmVyKCktPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCktPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotCi0KLSAgICAvLyBSZWZsZWN0aW9uIGRy
YXdzIGJlZm9yZSB0aGUgbGF5ZXIuCi0gICAgaWYgKG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXll
cigpKQotICAgICAgICBkcmF3U3VyZmFjZShyZXBsaWNhTWFza0xheWVyLCBtX3JlcGxpY2FEcmF3
VHJhbnNmb3JtKTsKLQotICAgIGRyYXdTdXJmYWNlKG1fbWFza0xheWVyLCBtX2RyYXdUcmFuc2Zv
cm0pOwotfQotCi12b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6Y2xlYXJMYXllckxpc3QoKQot
ewotICAgIG1fbGF5ZXJMaXN0LmNsZWFyKCk7Ci19Ci0KIFN0cmluZyBSZW5kZXJTdXJmYWNlQ2hy
b21pdW06Om5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiUmVuZGVy
U3VyZmFjZShpZD0lZCxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293bmluZ0xh
eWVyLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1
bS5oCmluZGV4IDFkMmNiNjIzZjliMWMyMjM2NTdlZDBjMDBhNGRmNTQyYzg1YzRhZmQuLmMzNGVk
YWUxYWY3ZmVkOGQ1YzgyOWE1NDcyYjEzNzgyMzNlZTQ2MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1
cmZhY2VDaHJvbWl1bS5oCkBAIC0zOSwxNCArMzksMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBDQ0xheWVySW1wbDsKK2NsYXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBMYXll
clJlbmRlcmVyQ2hyb21pdW07CiBjbGFzcyBMYXllclRleHR1cmU7CiAKIGNsYXNzIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyU3VyZmFjZUNo
cm9taXVtKTsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0oQ0NM
YXllckltcGwqKTsKKyAgICBleHBsaWNpdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0oTGF5ZXJDaHJv
bWl1bSopOwogICAgIH5SZW5kZXJTdXJmYWNlQ2hyb21pdW0oKTsKIAogICAgIGJvb2wgcHJlcGFy
ZUNvbnRlbnRzVGV4dHVyZSgpOwpAQCAtNjAsOSArNjAsNiBAQCBwdWJsaWM6CiAgICAgLy8gUmV0
dXJucyB0aGUgcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSBSZW5kZXJTdXJmYWNlIGluY2x1ZGluZyBh
bnkgcmVmbGVjdGlvbi4KICAgICBGbG9hdFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0
OwogCi0gICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0KCkgeyByZXR1
cm4gbV9sYXllckxpc3Q7IH0KLSAgICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCk7Ci0KICAgICBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0K
ICAgICB2b2lkIHNldENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSB7IG1f
Y29udGVudFJlY3QgPSBjb250ZW50UmVjdDsgfQogCkBAIC03Miw5ICs2OSw2IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgeyBtX2RyYXdUcmFuc2Zvcm0g
PSBkcmF3VHJhbnNmb3JtOyB9CiAKLSAgICBDQ0xheWVySW1wbCogbWFza0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXNrTGF5ZXI7IH0KLSAgICB2b2lkIHNldE1hc2tMYXllcihDQ0xheWVySW1w
bCogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVyOyB9Ci0KICAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5UcmFuc2Zvcm07IH0KICAgICB2b2lkIHNldE9yaWdpblRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKSB7IG1fb3JpZ2luVHJhbnNmb3JtID0g
b3JpZ2luVHJhbnNmb3JtOyB9CiAKQEAgLTg3LDI4ICs4MSwyNiBAQCBwdWJsaWM6CiAgICAgYm9v
bCBza2lwc0RyYXcoKSBjb25zdCB7IHJldHVybiBtX3NraXBzRHJhdzsgfQogICAgIHZvaWQgc2V0
U2tpcHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7IG1fc2tpcHNEcmF3ID0gc2tpcHNEcmF3OyB9CiAK
LSAgICBMYXllclRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudHNUZXh0dXJlLmdldCgpOyB9CisgICAgdm9pZCBjbGVhckxheWVyTGlzdCgpIHsgbV9sYXll
ckxpc3QuY2xlYXIoKTsgfQorICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5
ZXJMaXN0KCkgeyByZXR1cm4gbV9sYXllckxpc3Q7IH0KIAotICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJv
Z3JhbTsKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJh
Z21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrPiBNYXNrUHJvZ3JhbTsKKyAgICB2b2lkIHNldE1h
c2tMYXllcihMYXllckNocm9taXVtKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5
ZXI7IH0KIAogcHJpdmF0ZToKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVy
ZXIoKTsKLSAgICB2b2lkIGRyYXdTdXJmYWNlKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKTsKIAotICAgIENDTGF5ZXJJbXBs
KiBtX293bmluZ0xheWVyOwotICAgIENDTGF5ZXJJbXBsKiBtX21hc2tMYXllcjsKKyAgICBMYXll
ckNocm9taXVtKiBtX293bmluZ0xheWVyOworICAgIExheWVyQ2hyb21pdW0qIG1fbWFza0xheWVy
OwogCiAgICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0OwogICAgIGJvb2wgbV9za2lwc0RyYXc7CiAK
LSAgICBPd25QdHI8TGF5ZXJUZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsKICAgICBmbG9hdCBt
X2RyYXdPcGFjaXR5OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOwogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fb3JpZ2luVHJhbnNmb3JtOwogICAgIEludFJlY3QgbV9zY2lz
c29yUmVjdDsKLSAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IG1fbGF5ZXJMaXN0Owor
ICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBtX2xheWVyTGlzdDsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDNlOWU2ZGQwNDhmMjIxNWQyODk0
OTE3NTkzNDFkN2UzNzZiYzBkMjcuLjJhOGM1NTFhODBhMmQ2ZjFmMjAyNjdkODI5NDIwZTg1Zjdj
Y2RlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNjAsNyArNjAsNyBA
QCBUaWxlZExheWVyQ2hyb21pdW06On5UaWxlZExheWVyQ2hyb21pdW0oKQogCiBQYXNzUmVmUHRy
PENDTGF5ZXJJbXBsPiBUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsK
LSAgICByZXR1cm4gQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKHRoaXMsIGlkKCkpOworICAgIHJl
dHVybiBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUoaWQoKSk7CiB9CiAKIHZvaWQgVGlsZWRMYXll
ckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0SXNNYXNrKGJvb2wgaXNNYXNrKQogCiBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBUaWxlZExheWVyQ2hyb21pdW06OnRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0CiB7Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gY2NMYXllckltcGwoKS0+ZHJhd1Ry
YW5zZm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGRyYXdUcmFu
c2Zvcm0oKTsKIAogICAgIGlmIChjb250ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gdHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAppbmRleCA2YWQ0YjEx
MmQyYTRjZjdlZjExNmNhZjEzZDkxNGUzN2JiYWM3MjA4Li5kMGZkMGNlNTIzZDYzODg0YmU5MzJl
MWJkNDE2NTgyZjI1NzYyZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApAQCAtNzQs
OCArNzQsNiBAQCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bQogICAgIGVsc2UKICAgICAgICAgY2NM
YXllckltcGwtPnNldFJlcGxpY2FMYXllcigwKTsKIAotICAgIGxheWVyLT5zZXRDQ0xheWVySW1w
bChjY0xheWVySW1wbC5nZXQoKSk7Ci0KICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhjY0xh
eWVySW1wbC5nZXQoKSk7CiAgICAgcmV0dXJuIGNjTGF5ZXJJbXBsLnJlbGVhc2UoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVv
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDJmY2QyMTkzODJhNzBjNWQ3NzJiNmE2
ZDEzMjY1MTI1ODFlMDE4NmQuLjIyYmQzMGM3OGQ0Njg3MmE4YjI3YTBiZThkMWU4YTM2NGRmOWIy
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtNjksNyArNjksNyBAQCBW
aWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oKQogCiBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAg
ICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CisgICAg
cmV0dXJuIENDVmlkZW9MYXllckltcGw6OmNyZWF0ZShtX2xheWVySWQpOwogfQogCiB2b2lkIFZp
ZGVvTGF5ZXJDaHJvbWl1bTo6ZGVsZXRlVGV4dHVyZXNJblVzZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Nh
bnZhc0xheWVySW1wbC5jcHAKaW5kZXggNzEyNWI5NjgwN2I0MGZjMzRlYjFjODRlN2E5ZDk4MzE3
NWExODNlYi4uODY1ZmQ3MjRlNWQ4NmIyNWEzNDdkMDRjNDE4MzhjNGM1ZmMwOTk1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcApAQCAtMjksMTUgKzI5LDE0IEBACiAKICNp
bmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgogCi0jaW5jbHVkZSAiQ2FudmFzTGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NDYW52YXNMYXllckltcGw6OkNDQ2FudmFzTGF5ZXJJ
bXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCi0gICAgOiBDQ0xheWVySW1wbChvd25l
ciwgaWQpCitDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwoaW50IGlkKQorICAg
IDogQ0NMYXllckltcGwoaWQpCiAgICAgLCBtX3RleHR1cmVJZCgwKQogICAgICwgbV9oYXNBbHBo
YSh0cnVlKQogICAgICwgbV9wcmVtdWx0aXBsaWVkQWxwaGEodHJ1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Nh
bnZhc0xheWVySW1wbC5oCmluZGV4IGMxN2FmNWZjN2ViY2UyNTBhMzZjMzZiOGNlNTgxMTkwZWU5
MTNhOTcuLmQ4NWViYThkZTg4M2FiZTdlMGUwOWU1N2U0MDAxZmYwZjZjNGZhNTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFz
TGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NDYW52YXNMYXllckltcGwuaApAQCAtMzQsOSArMzQsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENDQ2FudmFzTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NhbnZhc0xheWVySW1wbD4gY3JlYXRl
KExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0ND
YW52YXNMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENDQ2FudmFzTGF5ZXJJbXBsKG93bmVyLCBpZCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENDQ2FudmFzTGF5ZXJJbXBsKGlkKSk7CiAgICAgfQogICAgIHZpcnR1YWwg
fkNDQ2FudmFzTGF5ZXJJbXBsKCk7CiAKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0SGFzQWxwaGEoYm9vbCBoYXNBbHBoYSkgeyBtX2hhc0FscGhhID0gaGFzQWxwaGE7IH0K
ICAgICB2b2lkIHNldFByZW11bHRpcGxpZWRBbHBoYShib29sIHByZW11bHRpcGxpZWRBbHBoYSkg
eyBtX3ByZW11bHRpcGxpZWRBbHBoYSA9IHByZW11bHRpcGxpZWRBbHBoYTsgfQogcHJpdmF0ZToK
LSAgICBDQ0NhbnZhc0xheWVySW1wbChMYXllckNocm9taXVtKiwgaW50KTsKKyAgICBleHBsaWNp
dCBDQ0NhbnZhc0xheWVySW1wbChpbnQpOwogCiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAg
ICAgYm9vbCBtX2hhc0FscGhhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDI0ZTliNWY5
ZWYwZDIwNzhiNGIxYjdlM2Q4ZjY4NDE4MDI2OTUyYjAuLmZhYjUzMTY4MGI1Zjg3NTgxMmJiZDQ4
MDMxNWJmYmEzZjY0MGZiMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTMyLDcgKzMy
LDYgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIHsKQEAgLTYwLDkgKzU5LDggQEAgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiBm
bGF0dGVuZWQsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChMYXllckNocm9taXVt
KiBvd25lciwgaW50IGlkKQotICAgIDogbV9vd25lcihvd25lcikKLSAgICAsIG1fcGFyZW50KDAp
CitDQ0xheWVySW1wbDo6Q0NMYXllckltcGwoaW50IGlkKQorICAgIDogbV9wYXJlbnQoMCkKICAg
ICAsIG1fbGF5ZXJJZChpZCkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBt
X2FuY2hvclBvaW50WigwKQpAQCAtODMsOCArODEsNiBAQCBDQ0xheWVySW1wbDo6Q0NMYXllcklt
cGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKIAogQ0NMYXllckltcGw6On5DQ0xheWVy
SW1wbCgpCiB7Ci0gICAgaWYgKG1fb3duZXIpCi0gICAgICAgIG1fb3duZXItPnNldENDTGF5ZXJJ
bXBsKDApOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjphZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPiBjaGlsZCkKQEAgLTEyMiwxMCArMTE4LDEwIEBAIHZvaWQgQ0NMYXllckltcGw6OnNl
dExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKICAgICBtX2xh
eWVyUmVuZGVyZXIgPSByZW5kZXJlcjsKIH0KIAotUmVuZGVyU3VyZmFjZUNocm9taXVtKiBDQ0xh
eWVySW1wbDo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCit2b2lkIENDTGF5ZXJJbXBsOjpjcmVhdGVS
ZW5kZXJTdXJmYWNlKCkKIHsKLSAgICBtX3JlbmRlclN1cmZhY2UgPSBhZG9wdFB0cihuZXcgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKHRoaXMpKTsKLSAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdl
dCgpOworICAgIEFTU0VSVCghbV9yZW5kZXJTdXJmYWNlKTsKKyAgICBtX3JlbmRlclN1cmZhY2Ug
PSBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlKHRoaXMpKTsKIH0KIAogYm9vbCBDQ0xheWVy
SW1wbDo6ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKQpAQCAtMTQyLDE5ICsxMzgsOCBAQCB2b2lk
IENDTGF5ZXJJbXBsOjpkcmF3KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9p
ZCBDQ0xheWVySW1wbDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCi17Ci0gICAgbV9vd25l
ci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwotfQotCi12b2lkIENDTGF5ZXJJbXBsOjp1
bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQotewotICAgIG1fb3duZXItPnVucmVzZXJ2ZUNvbnRl
bnRzVGV4dHVyZSgpOwotfQotCiB2b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJl
KCkKIHsKLSAgICBtX293bmVyLT5iaW5kQ29udGVudHNUZXh0dXJlKCk7CiB9CiAKIHZvaWQgQ0NM
YXllckltcGw6OmNsZWFudXBSZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggYmQy
NzZmZTgwOTA3NjcxNmE2OGQwOTY3N2NkYjFiNWE2NGY5MGZlMy4uN2M1ZjM2MzY2NjRiMGI3MmZi
ZWQ1YmU4YTM2NjQ2NjY4NzgyYzJkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3Vy
ZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00MCwxMyArNDEsMTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOwotY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOwogCiBjbGFzcyBDQ0xh
eWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25l
ciwgaW50IGlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGUoaW50
IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1wbChvd25l
ciwgaWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1wbChpZCkpOwog
ICAgIH0KICAgICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwogCkBAIC03MCw3ICs3MCw2IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogICAgIHZvaWQgdW5yZXNlcnZlQ29udGVu
dHNUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoKTsKIApA
QCAtMTI0LDkgKzEyMyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5
ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9CiAKLSAgICBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLQotICAgIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVy
U3VyZmFjZS5nZXQoKTsgfQorICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZS5nZXQoKTsgfQorICAgIHZvaWQgY3JlYXRlUmVu
ZGVyU3VyZmFjZSgpOwogICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKCkgeyBtX3JlbmRlclN1
cmZhY2UuY2xlYXIoKTsgfQogCiAgICAgZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVy
biBtX2RyYXdPcGFjaXR5OyB9CkBAIC0xMzQsOSArMTMyLDggQEAgcHVibGljOgogCiAgICAgY29u
c3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9
CiAgICAgdm9pZCBzZXRTY2lzc29yUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fc2Npc3Nv
clJlY3QgPSByZWN0OyB9Ci0KLSAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRl
clN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1cmZhY2U7IH0KLSAgICB2
b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNl
KSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KKyAgICBDQ1JlbmRlclN1cmZh
Y2UqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFJlbmRlclN1
cmZhY2U7IH0KKyAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNl
KiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1cmZhY2U7IH0KIAogICAgIGNv
bnN0IEludFNpemUmIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAgICAgdm9p
ZCBzZXRCb3VuZHMoY29uc3QgSW50U2l6ZSYgYm91bmRzKSB7IG1fYm91bmRzID0gYm91bmRzOyB9
CkBAIC0xNjAsMTUgKzE1Nyw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5
ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAotICAgIC8vIEhB
Q0sgVE9ETyBmaXggdGhpcwotICAgIExheWVyQ2hyb21pdW0qIG93bmVyKCkgY29uc3QgeyByZXR1
cm4gbV9vd25lcjsgfQotICAgIHZvaWQgY2xlYXJPd25lcigpIHsgbV9vd25lciA9IDA7IH0KLQog
cHJvdGVjdGVkOgotICAgIC8vIEZvciBub3csIENDTGF5ZXJJbXBscyBoYXZlIGEgYmFjayBwb2lu
dGVyIHRvIHRoZWlyIExheWVyQ2hyb21pdW0uCi0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGFm
dGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzMyBpcyBmaXhl
ZC4KLSAgICBMYXllckNocm9taXVtKiBtX293bmVyOwotICAgIENDTGF5ZXJJbXBsKExheWVyQ2hy
b21pdW0qLCBpbnQpOworICAgIGV4cGxpY2l0IENDTGF5ZXJJbXBsKGludCk7CiAKICAgICBzdGF0
aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiwgaW50IGluZGVudCk7CiAKQEAgLTIxNiw3
ICsyMDYsNyBAQCBwcml2YXRlOgogICAgIC8vIGVpdGhlciB0byB0aGlzIGxheWVyIChpZiBtX3Rh
cmdldFJlbmRlclN1cmZhY2UgPT0gbV9yZW5kZXJTdXJmYWNlKSBvcgogICAgIC8vIHRvIGFuIGFu
Y2VzdG9yIG9mIHRoaXMgbGF5ZXIuIFRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UgZGV0ZXJtaW5l
cyB0aGUKICAgICAvLyBjb29yZGluYXRlIHN5c3RlbSB0aGUgbGF5ZXIncyB0cmFuc2Zvcm1zIGFy
ZSByZWxhdGl2ZSB0by4KLSAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIG1fdGFyZ2V0UmVuZGVy
U3VyZmFjZTsKKyAgICBDQ1JlbmRlclN1cmZhY2UqIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsKIAog
ICAgIC8vIFRoZSBnbG9iYWwgZGVwdGggdmFsdWUgb2YgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIu
IFRoaXMgdmFsdWUgaXMgdXNlZAogICAgIC8vIHRvIHNvcnQgbGF5ZXJzIGZyb20gYmFjayB0byBm
cm9udC4KQEAgLTIzNiw3ICsyMjYsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gUmVuZGVyIHN1cmZh
Y2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuIFRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRh
bnRzCiAgICAgLy8gd2lsbCByZW5kZXIgdG8gdGhpcyBzdXJmYWNlLgotICAgIE93blB0cjxSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0+IG1fcmVuZGVyU3VyZmFjZTsKKyAgICBPd25QdHI8Q0NSZW5kZXJT
dXJmYWNlPiBtX3JlbmRlclN1cmZhY2U7CiAKICAgICAvLyBIaWVyYXJjaGljYWwgYm91bmRpbmcg
cmVjdCBjb250YWluaW5nIHRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzLgogICAgIEludFJl
Y3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcAppbmRl
eCBiMmM1NTc0MmY3OWY4ZDNiNTc0MWJlYzdlNTg4ZTdkOGIxY2EyN2QzLi5kMTAxY2MwN2ExNGMy
OTMxOGJlZTAzMDg1OTFkMzU0MmJiYTk4OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNw
cApAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogCi0j
aW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDxs
aW1pdHMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTI3OCw3ICsyNzgsNyBAQCB2b2lk
IENDTGF5ZXJTb3J0ZXI6OmNyZWF0ZUdyYXBoTm9kZXMoTGF5ZXJMaXN0OjppdGVyYXRvciBmaXJz
dCwgTGF5ZXJMaXN0OjppdGVyYQogICAgIGZvciAoTGF5ZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGZpcnN0OyBpdCA8IGxhc3Q7IGl0KyspIHsKICAgICAgICAgbV9ub2Rlcy5hcHBlbmQoR3Jh
cGhOb2RlKGl0LT5nZXQoKSkpOwogICAgICAgICBHcmFwaE5vZGUmIG5vZGUgPSBtX25vZGVzLmF0
KG1fbm9kZXMuc2l6ZSgpIC0gMSk7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVu
ZGVyU3VyZmFjZSA9IG5vZGUubGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgQ0NSZW5k
ZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gbm9kZS5sYXllci0+cmVuZGVyU3VyZmFjZSgpOwog
ICAgICAgICBpZiAoIW5vZGUubGF5ZXItPmRyYXdzQ29udGVudCgpICYmICFyZW5kZXJTdXJmYWNl
KQogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBs
LmNwcAppbmRleCBkZWUxZWYwYjdlNmEyZGRhZDM3NWY4OTFmOWRlMDU2NTlkMjg2YzIxLi44YTI1
YzViNTQxZTJlMzQ1MGI5M2Y4ZDFmZmNkNjIyY2IyNDc2YjI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5MYXllckltcGwuY3BwCkBAIC0zMSwxMyArMzEsMTIgQEAKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5j
bHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdp
bkxheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQotICAgIDogQ0NMYXllcklt
cGwob3duZXIsIGlkKQorQ0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKGludCBp
ZCkKKyAgICA6IENDTGF5ZXJJbXBsKGlkKQogICAgICwgbV90ZXh0dXJlSWQoMCkKIHsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UGx1Z2luTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCmluZGV4IDZlNDgyZDE0NjRiMGY4ZTc4OTIwNjE3
NWQyMTIwM2E4OWUwOGQyNzMuLjliNGM1MzY3MjNkMmFiMTZkZGQ0MjkwNjNkYzdmZjViNGYxZDEy
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApAQCAtMzQsOSArMzQsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDUGx1Z2luTGF5ZXJJbXBsIDogcHVibGljIEND
TGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1BsdWdpbkxheWVy
SW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q0NQbHVnaW5MYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENDUGx1Z2luTGF5ZXJJbXBsKG93bmVyLCBpZCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDUGx1Z2luTGF5ZXJJbXBsKGlkKSk7CiAgICAgfQog
ICAgIHZpcnR1YWwgfkNDUGx1Z2luTGF5ZXJJbXBsKCk7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0g
aWQ7IH0KIAogcHJpdmF0ZToKLSAgICBDQ1BsdWdpbkxheWVySW1wbChMYXllckNocm9taXVtKiwg
aW50KTsKKyAgICBleHBsaWNpdCBDQ1BsdWdpbkxheWVySW1wbChpbnQpOwogCiAgICAgdW5zaWdu
ZWQgbV90ZXh0dXJlSWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjZmYWY3MjMwN2E5MmFlYzM5MDEyMjFkNTRlZjBmZjc2Njc2M2FhMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJD
Q1JlbmRlclN1cmZhY2UuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVyU3VyZmFj
ZShDQ0xheWVySW1wbCogb3duaW5nTGF5ZXIpCisgICAgOiBtX293bmluZ0xheWVyKG93bmluZ0xh
eWVyKQorICAgICwgbV9tYXNrTGF5ZXIoMCkKKyAgICAsIG1fc2tpcHNEcmF3KGZhbHNlKQorICAg
ICwgbV9kcmF3T3BhY2l0eSgxKQoreworfQorCitDQ1JlbmRlclN1cmZhY2U6On5DQ1JlbmRlclN1
cmZhY2UoKQoreworICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKK30KKwordm9pZCBDQ1JlbmRlclN1
cmZhY2U6OmNsZWFudXBSZXNvdXJjZXMoKQoreworICAgIGlmICghbV9jb250ZW50c1RleHR1cmUp
CisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOworCisgICAg
bV9jb250ZW50c1RleHR1cmUuY2xlYXIoKTsKK30KKworTGF5ZXJSZW5kZXJlckNocm9taXVtKiBD
Q1JlbmRlclN1cmZhY2U6OmxheWVyUmVuZGVyZXIoKQoreworICAgIEFTU0VSVChtX293bmluZ0xh
eWVyKTsKKyAgICByZXR1cm4gbV9vd25pbmdMYXllci0+bGF5ZXJSZW5kZXJlcigpOworfQorCitG
bG9hdFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKK3sK
KyAgICBGbG9hdFJlY3QgbG9jYWxDb250ZW50UmVjdCgtMC41ICogbV9jb250ZW50UmVjdC53aWR0
aCgpLCAtMC41ICogbV9jb250ZW50UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2NvbnRlbnRSZWN0LndpZHRoKCksIG1fY29udGVudFJlY3QuaGVpZ2h0KCkp
OworICAgIEZsb2F0UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbV9kcmF3VHJhbnNmb3JtLm1h
cFJlY3QobG9jYWxDb250ZW50UmVjdCk7CisgICAgaWYgKG1fb3duaW5nTGF5ZXItPnJlcGxpY2FM
YXllcigpKQorICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKG1fcmVwbGljYURyYXdU
cmFuc2Zvcm0ubWFwUmVjdChsb2NhbENvbnRlbnRSZWN0KSk7CisKKyAgICByZXR1cm4gZHJhd2Fi
bGVDb250ZW50UmVjdDsKK30KKworYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVDb250ZW50
c1RleHR1cmUoKQoreworICAgIEludFNpemUgcmVxdWlyZWRTaXplKG1fY29udGVudFJlY3Quc2l6
ZSgpKTsKKyAgICBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIgPSBsYXllclJlbmRlcmVy
KCktPnJlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlcigpOworCisgICAgaWYgKCFtX2NvbnRlbnRz
VGV4dHVyZSkKKyAgICAgICAgbV9jb250ZW50c1RleHR1cmUgPSBMYXllclRleHR1cmU6OmNyZWF0
ZShsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKSwgdGV4dHVyZU1hbmFnZXIpOworCisgICAgaWYg
KG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFNpemUsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBKSkgeworICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX3NraXBzRHJhdyA9IGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIENDUmVuZGVyU3VyZmFjZTo6cmVsZWFzZUNvbnRlbnRz
VGV4dHVyZSgpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX2NvbnRlbnRzVGV4dHVyZSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGVudHNUZXh0dXJlLT51bnJlc2VydmUoKTsKK30K
KworCit2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhd1N1cmZhY2UoQ0NMYXllckltcGwqIG1hc2tM
YXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pCit7CisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgp
OworCisgICAgaW50IHNoYWRlck1hdHJpeExvY2F0aW9uID0gLTE7CisgICAgaW50IHNoYWRlckFs
cGhhTG9jYXRpb24gPSAtMTsKKyAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW0qIHBy
b2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CisgICAgY29u
c3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbSogbWFza1Byb2dyYW0gPSBsYXllclJlbmRl
cmVyKCktPnJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOworICAgIEFTU0VSVChwcm9ncmFtICYm
IHByb2dyYW0tPmluaXRpYWxpemVkKCkpOworICAgIGJvb2wgdXNlTWFzayA9IGZhbHNlOworICAg
IGlmIChtYXNrTGF5ZXIgJiYgbWFza0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBp
ZiAoIW1hc2tMYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjb250ZXh0
M0QtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29u
dGV4dDNELT51c2VQcm9ncmFtKG1hc2tQcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICAgICAgICAg
IEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5p
Zm9ybTFpKG1hc2tQcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAw
KSk7CisgICAgICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKKyAgICAg
ICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTEpKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQz
RC0+dW5pZm9ybTFpKG1hc2tQcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVyTG9j
YXRpb24oKSwgMSkpOworICAgICAgICAgICAgbWFza0xheWVyLT5iaW5kQ29udGVudHNUZXh0dXJl
KCk7CisgICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgICAgICAgICBzaGFkZXJNYXRyaXhM
b2NhdGlvbiA9IG1hc2tQcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOwor
ICAgICAgICAgICAgc2hhZGVyQWxwaGFMb2NhdGlvbiA9IG1hc2tQcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLmFscGhhTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHVzZU1hc2sgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCF1c2VNYXNrKSB7CisgICAgICAgIEdMQyhjb250ZXh0
M0QsIGNvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICAgICAg
bV9jb250ZW50c1RleHR1cmUtPmJpbmRUZXh0dXJlKCk7CisgICAgICAgIEdMQyhjb250ZXh0M0Qs
IGNvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxv
Y2F0aW9uKCksIDApKTsKKyAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJBbHBoYUxvY2F0
aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgfQor
CisgICAgTGF5ZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChsYXllclJlbmRlcmVyKCktPmNv
bnRleHQoKSwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zv
cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb250ZW50UmVj
dC53aWR0aCgpLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgpLCBtX2RyYXdPcGFjaXR5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uLCBz
aGFkZXJBbHBoYUxvY2F0aW9uKTsKK30KKwordm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXcoY29u
c3QgSW50UmVjdCYpCit7CisgICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX2NvbnRlbnRzVGV4dHVy
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBCeSB1c2luZyB0aGUgc2FtZSBSZW5k
ZXJTdXJmYWNlIGZvciBib3RoIHRoZSBjb250ZW50IGFuZCBpdHMgcmVmbGVjdGlvbiwKKyAgICAv
LyBpdCdzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gYXBwbHkgYSBzZXBhcmF0ZSBtYXNrIHRv
IHRoZSByZWZsZWN0aW9uIGxheWVyCisgICAgLy8gb3IgY29ycmVjdGx5IGhhbmRsZSBvcGFjaXR5
IGluIHJlZmxlY3Rpb25zIChvcGFjaXR5IG11c3QgYmUgYXBwbGllZCBhZnRlciBkcmF3aW5nCisg
ICAgLy8gYm90aCB0aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0aW9uKS4gVGhlIHNvbHV0aW9uIGlz
IHRvIGludHJvZHVjZSB5ZXQgYW5vdGhlciBSZW5kZXJTdXJmYWNlCisgICAgLy8gdG8gZHJhdyB0
aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0aW9uIGluLiBGb3Igbm93IHdlIG9ubHkgYXBwbHkgYSBz
ZXBhcmF0ZSByZWZsZWN0aW9uCisgICAgLy8gbWFzayBpZiB0aGUgY29udGVudHMgZG9uJ3QgaGF2
ZSBhIG1hc2sgb2YgdGhlaXIgb3duLgorICAgIENDTGF5ZXJJbXBsKiByZXBsaWNhTWFza0xheWVy
ID0gbV9tYXNrTGF5ZXI7CisgICAgaWYgKCFtX21hc2tMYXllciAmJiBtX293bmluZ0xheWVyLT5y
ZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYU1hc2tMYXllciA9IG1fb3duaW5nTGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKTsKKworICAgIGlmIChtX293bmluZ0xheWVyLT5w
YXJlbnQoKSAmJiBtX293bmluZ0xheWVyLT5wYXJlbnQoKS0+dXNlc0xheWVyU2Npc3NvcigpKQor
ICAgICAgICBsYXllclJlbmRlcmVyKCktPnNldFNjaXNzb3JUb1JlY3QobV9zY2lzc29yUmVjdCk7
CisgICAgZWxzZQorICAgICAgICBHTEMobGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCksIGxheWVy
UmVuZGVyZXIoKS0+Y29udGV4dCgpLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpKTsKKworICAgIC8vIFJlZmxlY3Rpb24gZHJhd3MgYmVmb3JlIHRoZSBsYXllci4KKyAg
ICBpZiAobV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIGRyYXdTdXJmYWNl
KHJlcGxpY2FNYXNrTGF5ZXIsIG1fcmVwbGljYURyYXdUcmFuc2Zvcm0pOworCisgICAgZHJhd1N1
cmZhY2UobV9tYXNrTGF5ZXIsIG1fZHJhd1RyYW5zZm9ybSk7Cit9CisKK1N0cmluZyBDQ1JlbmRl
clN1cmZhY2U6Om5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiUmVu
ZGVyU3VyZmFjZShpZD0laSxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293bmlu
Z0xheWVyLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlSW5k
ZW50KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KQoreworICAgIGZvciAoaW50IGkgPSAwOyBp
ICE9IGluZGVudDsgKytpKQorICAgICAgICB0cyA8PCAiICAiOworfQorCit2b2lkIENDUmVuZGVy
U3VyZmFjZTo6ZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7
CisgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgbmFtZSgpIDw8ICJcbiI7
CisKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KzEpOworICAgIHRzIDw8ICJjb250ZW50UmVj
dDogKCIgPDwgbV9jb250ZW50UmVjdC54KCkgPDwgIiwgIiA8PCBtX2NvbnRlbnRSZWN0LnkoKSA8
PCAiLCAiIDw8IG1fY29udGVudFJlY3Qud2lkdGgoKSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3Qu
aGVpZ2h0KCkgPDwgIlxuIjsKK30KKworaW50IENDUmVuZGVyU3VyZmFjZTo6b3duaW5nTGF5ZXJJ
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXIgPyBtX293bmluZ0xheWVyLT5p
ZCgpIDogMDsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGFiMTg5MTg1MWZmMDgyZjhm
ZWI0MjU5MWRhZWIyNDcyODg4OWU1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC0wLDAg
KzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIENDUmVuZGVyU3VyZmFjZV9oCisjZGVmaW5lIEND
UmVuZGVyU3VyZmFjZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUHJv
Z3JhbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
Q0xheWVySW1wbDsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKK2NsYXNzIExheWVyVGV4
dHVyZTsKKworY2xhc3MgQ0NSZW5kZXJTdXJmYWNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShDQ1JlbmRlclN1cmZhY2UpOworcHVibGljOgorICAgIGV4cGxpY2l0IENDUmVuZGVyU3VyZmFj
ZShDQ0xheWVySW1wbCopOworICAgIH5DQ1JlbmRlclN1cmZhY2UoKTsKKworICAgIGJvb2wgcHJl
cGFyZUNvbnRlbnRzVGV4dHVyZSgpOworICAgIHZvaWQgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgp
OworICAgIHZvaWQgY2xlYW51cFJlc291cmNlcygpOworICAgIHZvaWQgZHJhdyhjb25zdCBJbnRS
ZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCk7CisKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OworICAg
IHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAg
RmxvYXRQb2ludCBjb250ZW50UmVjdENlbnRlcigpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCht
X2NvbnRlbnRSZWN0KS5jZW50ZXIoKTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgcmVjdCB0aGF0
IGVuY2xvc2VzIHRoZSBSZW5kZXJTdXJmYWNlIGluY2x1ZGluZyBhbnkgcmVmbGVjdGlvbi4KKyAg
ICBGbG9hdFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0OworCisgICAgZmxvYXQgZHJh
d09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CisgICAgdm9pZCBzZXRE
cmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fZHJhd09wYWNpdHkgPSBvcGFjaXR5OyB9CisK
KyAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0pIHsgbV9kcmF3VHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybTsgfQorICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9kcmF3VHJhbnNmb3JtOyB9CisKKyAgICB2b2lkIHNldFJlcGxpY2FEcmF3VHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhRHJhd1RyYW5zZm9ybSkgeyBtX3JlcGxp
Y2FEcmF3VHJhbnNmb3JtID0gcmVwbGljYURyYXdUcmFuc2Zvcm07IH0KKyAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3JlcGxpY2FEcmF3VHJhbnNmb3JtOyB9CisKKyAgICB2b2lkIHNldE9yaWdpblRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKSB7IG1fb3JpZ2luVHJh
bnNmb3JtID0gb3JpZ2luVHJhbnNmb3JtOyB9CisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG9yaWdpblRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luVHJhbnNmb3JtOyB9
CisKKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7
IG1fc2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIHNjaXNz
b3JSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQorCisgICAgdm9pZCBzZXRD
b250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgeyBtX2NvbnRlbnRSZWN0ID0g
Y29udGVudFJlY3Q7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudFJlY3Q7IH0KKworICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJvb2wgc2tp
cHNEcmF3KSB7IG1fc2tpcHNEcmF3ID0gc2tpcHNEcmF3OyB9CisgICAgYm9vbCBza2lwc0RyYXco
KSBjb25zdCB7IHJldHVybiBtX3NraXBzRHJhdzsgfQorCisgICAgdm9pZCBjbGVhckxheWVyTGlz
dCgpIHsgbV9sYXllckxpc3QuY2xlYXIoKTsgfQorICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllcklt
cGw+ID4mIGxheWVyTGlzdCgpIHsgcmV0dXJuIG1fbGF5ZXJMaXN0OyB9CisKKyAgICB2b2lkIHNl
dE1hc2tMYXllcihDQ0xheWVySW1wbCogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xh
eWVyOyB9CisKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwg
RnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGE+IFByb2dyYW07CisgICAgdHlwZWRlZiBQcm9ncmFt
QmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhTWFz
az4gTWFza1Byb2dyYW07CisKKyAgICBMYXllclRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlLmdldCgpOyB9CisKKyAgICBpbnQgb3duaW5n
TGF5ZXJJZCgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIoKTsKKyAgICB2b2lkIGRyYXdTdXJmYWNlKENDTGF5ZXJJbXBsKiBtYXNrTGF5
ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKTsKKworICAgIEND
TGF5ZXJJbXBsKiBtX293bmluZ0xheWVyOworICAgIENDTGF5ZXJJbXBsKiBtX21hc2tMYXllcjsK
KworICAgIEludFJlY3QgbV9jb250ZW50UmVjdDsKKyAgICBib29sIG1fc2tpcHNEcmF3OworCisg
ICAgT3duUHRyPExheWVyVGV4dHVyZT4gbV9jb250ZW50c1RleHR1cmU7CisgICAgZmxvYXQgbV9k
cmF3T3BhY2l0eTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9ybTsKKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKKyAgICBJbnRSZWN0IG1fc2Npc3Nv
clJlY3Q7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBtX2xheWVyTGlzdDsKK307
CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCA4MDNiYTA2ZDU2MTk3ZDI4YWFl
NTVhNzhjNWJjZDExZTEyNDc3YjVlLi5mYzEwM2VhZGNhYjJlOWZhM2EwMDY3NGVmY2JkZDNiMGRk
ZDE1ODAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtMjksMTYgKzI5
LDE0IEBACiAKICNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCiAKLSNpbmNsdWRlICJD
b250ZW50TGF5ZXJDaHJvbWl1bS5oIgotCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGF5ZXJUZXh0dXJlOwogCi1DQ1RpbGVk
TGF5ZXJJbXBsOjpDQ1RpbGVkTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQp
Ci0gICAgOiBDQ0xheWVySW1wbChvd25lciwgaWQpCitDQ1RpbGVkTGF5ZXJJbXBsOjpDQ1RpbGVk
TGF5ZXJJbXBsKGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKGlkKQogICAgICwgbV90aWxlcigw
KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IGIwZDEwMzFmYmI3Yjhm
ODBmNDc4YWM4MTNjOGYyNzI5ZGM4OWE5MTUuLjczNDZiYjdlN2Q2ZmE2YmM4Y2ExZWJjZjI5Y2M1
ODQ5ZjFlZjYzYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTMzLDkgKzMz
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ1RpbGVkTGF5ZXJJbXBsIDogcHVi
bGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1RpbGVk
TGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsKG93bmVyLCBpZCkpOwor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDVGlsZWRMYXllckltcGwoaWQpKTsKICAgICB9
CiAgICAgdmlydHVhbCB+Q0NUaWxlZExheWVySW1wbCgpOwogCkBAIC00OCw3ICs0OCw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFRpbGVyKExheWVyVGlsZXJDaHJvbWl1bSogdGlsZXIpIHsgbV90
aWxlciA9IHRpbGVyOyB9CiAKIHByaXZhdGU6Ci0gICAgQ0NUaWxlZExheWVySW1wbChMYXllckNo
cm9taXVtKiwgaW50IGlkKTsKKyAgICBleHBsaWNpdCBDQ1RpbGVkTGF5ZXJJbXBsKGludCBpZCk7
CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RpbGluZ1RyYW5zZm9ybTsKICAgICBMYXll
clRpbGVyQ2hyb21pdW0qIG1fdGlsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3Bw
CmluZGV4IGY0NGFiYjA2MTFkZWM3Y2Y4MTYwMTc4OGM5YzQ1NWJiNWU5NzhhOWEuLjBjOTM5MzIx
OGJmMzQ0NGJjYmFkYjFkYzgyODczNDI3NzQyMDRjMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9M
YXllckltcGwuY3BwCkBAIC01OSw4ICs1OSw4IEBAIGNvbnN0IGZsb2F0IENDVmlkZW9MYXllcklt
cGw6Onl1dkFkanVzdFszXSA9IHsKICAgICAtMC41ZiwKIH07CiAKLUNDVmlkZW9MYXllckltcGw6
OkNDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKLSAgICA6IEND
TGF5ZXJJbXBsKG93bmVyLCBpZCkKK0NDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwo
aW50IGlkKQorICAgIDogQ0NMYXllckltcGwoaWQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9M
YXllckltcGwuaAppbmRleCBmYzA3Zjc3MmU2MThjODljOGUyNDRjYWZjNTU4YzM3ZTk5Y2ViYjZm
Li5lZTlkNDIxNjkzYTlkMTc3Nzk4NGU4YmIwNjc2NmEzNjA0ZTUwY2U0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5oCkBAIC0zOCw5ICszOCw5IEBAIGNsYXNzIFZpZGVvRnJhbWVQcm92
aWRlcjsKIAogY2xhc3MgQ0NWaWRlb0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWRlb0xheWVySW1wbD4gY3JlYXRlKExh
eWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWRl
b0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ0NWaWRlb0xheWVySW1wbChvd25lciwgaWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKGlkKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfkNDVmlk
ZW9MYXllckltcGwoKTsKIApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRU
ZXh0dXJlKHNpemVfdCwgVmlkZW9MYXllckNocm9taXVtOjpUZXh0dXJlKTsKIAogcHJpdmF0ZToK
LSAgICBDQ1ZpZGVvTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOworICAgIGV4cGxpY2l0
IENDVmlkZW9MYXllckltcGwoaW50KTsKIAogICAgIHZvaWQgZHJhd1lVVihjb25zdCBZVVZQcm9n
cmFtKikgY29uc3Q7CiAgICAgdm9pZCBkcmF3UkdCQShjb25zdCBSR0JBUHJvZ3JhbSopIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25p
emVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6
ZXJUZXN0LmNwcAppbmRleCA3MDI2MjBhMGY5NDA3ZGZhMzU3MWZhMzU3NDgwZTE2NDVjOGUyN2Ix
Li44YWRmNDc2OTlkNDg3MGRkNTQ5N2E4MTUyYTNkNGViMGNjZWIzZDViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApA
QCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgewogCiBjbGFzcyBNb2NrQ0NMYXllckltcGwgOiBw
dWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tD
Q0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgbGF5ZXJJZCkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxNb2NrQ0NMYXllckltcGw+IGNyZWF0ZShpbnQgbGF5ZXJJZCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0NDTGF5ZXJJbXBsKG93bmVy
LCBsYXllcklkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0NDTGF5ZXJJbXBs
KGxheWVySWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+TW9ja0NDTGF5ZXJJbXBsKCkKICAgICB7
CkBAIC00OSw4ICs0OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENDTGF5ZXJEZXN0cnVjdGlv
bkxpc3QoVmVjdG9yPGludD4qIGxpc3QpIHsgbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0ID0gbGlz
dDsgfQogCiBwcml2YXRlOgotICAgIE1vY2tDQ0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25l
ciwgaW50IGxheWVySWQpCi0gICAgICAgIDogQ0NMYXllckltcGwob3duZXIsIGxheWVySWQpCisg
ICAgTW9ja0NDTGF5ZXJJbXBsKGludCBsYXllcklkKQorICAgICAgICA6IENDTGF5ZXJJbXBsKGxh
eWVySWQpCiAgICAgICAgICwgbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KDApCiAgICAgewogICAg
IH0KQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpCiAgICAgewotICAgICAgICByZXR1cm4gTW9j
a0NDTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKKyAgICAgICAgcmV0dXJuIE1v
Y2tDQ0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2
b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGNjTGF5ZXIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102579</attachid>
            <date>2011-08-01 15:48:36 -0700</date>
            <delta_ts>2011-08-01 16:59:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58840-20110801154835.patch</filename>
            <type>text/plain</type>
            <size>88902</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIxMzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMWJjOTdkYThmZjNmZjZh
YjA4YWZmOGU3YWRjZTY0ZDcxNTYxMmJmLi4yMjgzYmVkMmJhOTllNjg4NDczZTQ3ZmRmMGQ4YjJj
YTBjNTk4MmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUwIEBACisyMDExLTA4LTAxICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBE
ZWNvdXBsZSBsYXllciB2aXNpYmlsaXR5IGNhbGN1bGF0aW9ucyBmcm9tIHJlbmRlciBzdXJmYWNl
cyAvIGNvbXB1dGVkIGRyYXcgdHJhbnNmb3JtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGRlY291cGxlcyB0aGUgbGF5ZXIgdmlzaWJpbGl0eSBy
ZWxhdGVkIGNhbGN1bGF0aW9ucyBmcm9tIHRoZSBMYXllckNocm9taXVtIGFuZCBDQ0xheWVySW1w
bCB0cmVlcy4gIFRoaXMgaXMKKyAgICAgICAgZG9uZSBieSBtYWtpbmcgTGF5ZXJSZW5kZXJlckNo
cm9taXVtJ3MgImNhbGN1bGF0ZSB0aGUgd29ybGQiIGZ1bmN0aW9uIChyZW5hbWVkCisgICAgICAg
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSgpKSBhIHRlbXBsYXRlZCwgZnJl
ZSBmdW5jdGlvbiB0aGF0IGNhbiBvcGVyYXRlIG9uIGVpdGhlciBMYXllckNocm9taXVtICsKKyAg
ICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtIHBhaXJzIG9yIG9uIENDTGF5ZXJJbXBsICsgQ0NS
ZW5kZXJTdXJmYWNlIHBhaXJzIGFuZCBpbnZva2luZyBpdCB0d2ljZSwgb25jZSBiZWZvcmUKKyAg
ICAgICAgcGFpbnRpbmcgYW5kIG9uY2UgYmVmb3JlIGRyYXdpbmcuICBCZWZvcmUgcGFpbnRpbmcs
IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGFy
ZQorICAgICAgICBwb3RlbnRpYWxseSB2aXNpYmxlIGFuZCBzaG91bGQgYmUgcGFpbnRlZCwgd2hp
Y2ggZGVwZW5kcyBvbiB0aGUgY2FsY3VsYXRlZCBvcGFjaXR5LCByZW5kZXIgc3VyZmFjZSBib3Vu
ZHMsIGFuZAorICAgICAgICBkcmF3IHRyYW5zZm9ybXMuICBCZWZvcmUgZHJhd2luZywgdGhlc2Ug
Y2FsY3VsYXRpb25zIGFyZSB1c2VkIHRvIGZpZ3VyZSBvdXQgZXZlcnl0aGluZyBuZWVkZWQgdG8g
ZHJhdy4KKworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0gaXMgbm93IHVzZWQganVzdCBm
b3IgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMgd2hlbiBwYWludGluZy4gIENDUmVuZGVyU3VyZmFj
ZUNocm9taXVtIGlzCisgICAgICAgIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBkcmF3aW5nIHRo
ZSByZW5kZXIgc3VyZmFjZXMuCisKKyAgICAgICAgVGhpcyBkb2VzIG1lYW4gdGhhdCBpbiB0aGUg
Y3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGUgc2Vjb25kIGNhbGN1bGF0aW9ucyBhcmUgcmVkdW5k
YW50LCBidXQgaW4gdGhlIGZ1dHVyZSB0aGlzCisgICAgICAgIHdvbid0IGJlIHRoZSBjYXNlIHNp
bmNlIHRoZSBwcmUtZHJhdyB0aW1lIGNhbGN1bGF0aW9ucyBtaWdodCBiZSBpbmZsdWVuY2VkIGJ5
IGFuaW1hdGlvbnMgb3IgZ2VzdHVyZXMuICBJJ3ZlCisgICAgICAgIGFkZGVkIHNvbWUgdHJhY2Vz
IHRvIHRyeSB0byBtb25pdG9yIGlmIHRoaXMgbWF0aCBpcyBhIHNpZ25pZmljYW50IGFtb3VudCBv
ZiB0aGUgcGVyLWZyYW1lIGNvbXB1dGF0aW9uLiAgTm90ZQorICAgICAgICB0aGF0IGxheWVyIHNv
cnRpbmcgb25seSBoYXBwZW5zIG9uIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFuZCB0aGUgbGF5ZXIg
c29ydCBhbGdvcml0aG0gaXMgdGhlIG1vc3QgZXhwZW5zaXZlIHBhcnQKKyAgICAgICAgb2YgdGhl
IGNhbGN1bGF0aW9ucyBjdXJyZW50bHkuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIGFsbCBvZiB0
aGUgd2VhayBiYWNrL2ZvcndhcmQgcG9pbnRlcnMgYmV0d2VlbiBMYXllckNocm9taXVtIGFuZCBD
Q0xheWVySW1wbHMsIHRoZSB0cmVlcyBhcmUgbm93CisgICAgICAgIHRydWx5IGRlY291cGxlZC4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGNvbXBvc2l0aW5nLyB0ZXN0cy4KKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06
OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Okxh
eWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0RyYXdzQ29u
dGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0VXNlc0xheWVyU2Npc3Nv
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1c2VzTGF5ZXJTY2lzc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZW5kZXJTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNldERyYXdPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnRhcmdl
dFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldERyYXdUcmFu
c2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXREcmF3YWJsZUNvbnRl
bnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbXBvc2l0ZU9mZnNjcmVlbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9mZnNjcmVlbkxheWVyVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1
cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
U2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OnJlbmRlclN1cmZhY2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJT
dXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVt
Ojp+UmVuZGVyU3VyZmFjZUNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN1cmZhY2VDaHJvbWl1bTo6Y2xlYXJMYXllckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3VyZmFjZUNocm9taXVtOjpsYXllckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3VyZmFjZUNocm9taXVtOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVy
SW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVuZGVyU3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dGFyZ2V0UmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0VGFyZ2V0UmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5M
YXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1
Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpDQ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjp+Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVy
U3VyZmFjZTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OmxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpkcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjpkcmF3U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZh
Y2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlSW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVy
U3VyZmFjZTo6ZHVtcFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
Ojpvd25pbmdMYXllcklkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmguCisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNvbnRlbnRSZWN0Q2VudGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6ZHJhd09wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXREcmF3T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6OnNldERyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2V0UmVwbGljYURyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpyZXBsaWNhRHJhd1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6OnNldE9yaWdpblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6Om9yaWdpblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzZXRD
b250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNvbnRlbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0U2tpcHNEcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2tpcHNEcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Y2xlYXJMYXllckxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpsYXllckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpjb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
ZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aWxlZExheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlk
ZW9MYXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDgtMDEgIEJlbmphbWluIFBvdWxhaW4gIDxi
ZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gT3BlbkdMU2hpbXMgZG9lcyBub3Qg
YnVpbGQgb24gQVJNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNTRjOWEzNGQzYjViMmFjMTE1MzcwMGRj
ODI1MTQwZTZhZjcyOWIwMi4uZjFiNGIwMmM4ZDhlMTM5N2I0MDliNDlkNGM2NTYxZTJkMWQ3MDY2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU2NCw2ICszNTY0LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcAppbmRleCAwYTFkMzJlOGM0MjI1MzQ3ODZhYTdkYWM1ZWEyZTJlZjdkYzUwMGY0
Li5hYzRiOWYyMDkyOGRmM2ExZjUyNWEyZjE0YzVjMjFhZWU0NzBjNWY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmNwcApAQCAtNTUsNyArNTUsNyBAQCBDYW52YXNMYXllckNocm9t
aXVtOjp+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IENh
bnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4gQ0ND
YW52YXNMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOworICAgIHJldHVybiBDQ0Nh
bnZhc0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgQ2FudmFzTGF5ZXJD
aHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDFkODczZGMxZmFlNmYwMTYzOWU1M2FiYWZiMWM3ZTFjOWZjZjQzNmYu
LmJhNzEzZWI4OTliZDMxNDhkNzg5Yzg5N2Q2NTY5MmQ5Nzg4MzVhMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwCkBAIC02MSw5ICs2MSw5IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0o
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxz
ZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVudCgwKQot
ICAgICwgbV9jY0xheWVySW1wbCgwKQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAg
ICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCisgICAgLCBtX2RlYnVnQm9yZGVyV2lk
dGgoMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX3pQb3NpdGlvbigwLjApCiAgICAg
LCBtX2FuY2hvclBvaW50WigwKQpAQCAtNzQsNyArNzQsMTAgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5
ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgICwgbV9nZW9tZXRy
eUZsaXBwZWQoZmFsc2UpCiAgICAgLCBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlKGZhbHNl
KQogICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQorICAgICwgbV91c2VzTGF5ZXJTY2lzc29yKGZh
bHNlKQogICAgICwgbV9yZXBsaWNhTGF5ZXIoMCkKKyAgICAsIG1fZHJhd09wYWNpdHkoMCkKKyAg
ICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogewogICAgIEFTU0VSVCghTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpzX2luUGFpbnRMYXllckNvbnRlbnRzKTsKIH0KQEAgLTg2LDkgKzg5LDYgQEAg
TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIC8vIHdheSBmb3IgdXMgdG8gYmUg
ZGVzdHJveWVkIHdoaWxlIHdlIHN0aWxsIGhhdmUgYSBwYXJlbnQuCiAgICAgQVNTRVJUKCFwYXJl
bnQoKSk7CiAKLSAgICBpZiAobV9jY0xheWVySW1wbCkKLSAgICAgICAgbV9jY0xheWVySW1wbC0+
Y2xlYXJPd25lcigpOwotCiAgICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgcmVmZXJlbmNlIGZyb20g
YWxsIGNoaWxkcmVuLgogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CkBAIC0zODEsMTIgKzM4
MSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFt
JiB0cywgaW50IGluZGVudCkgY29uc3QKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ0xheWVySW1wbDo6
Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7Ci19Ci0KLUNDTGF5ZXJJbXBsKiBMYXllckNocm9taXVt
OjpjY0xheWVySW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY2NMYXllckltcGw7CisgICAg
cmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKIH0KIAogdm9pZCBMYXllckNo
cm9taXVtOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC00MDYsNSArNDAx
LDIwIEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bSogTGF5ZXJDaHJvbWl1bTo6bGF5ZXJSZW5kZXJl
cigpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsKIH0KIAordm9pZCBM
YXllckNocm9taXVtOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKK3sKKyAgICBBU1NFUlQoIW1fcmVu
ZGVyU3VyZmFjZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlID0gYWRvcHRQdHIobmV3IFJlbmRlclN1
cmZhY2VDaHJvbWl1bSh0aGlzKSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFu
dERyYXdzQ29udGVudCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVu
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kcmF3c0NvbnRlbnQo
KSB8fCBtX2NoaWxkcmVuW2ldLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CiAjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDNi
YTdiOWYwZGIwY2Y5NzFhYjk2OGQ2MWI5YzMwYTAxZGVmNzIzYWIuLjRlNDAxY2NlODhhYjlhZDIy
MWJkNDdkN2RmZTE5YzczZDViMWY0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEwNCw3ICsx
MDQsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9CiAKICAgICB2b2lkIHNldE1hc2tMYXllcihMYXllckNocm9taXVtKiBtYXNrTGF5
ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IH0KLSAgICBDQ0xheWVySW1wbCogbWFza0Ry
YXdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyID8gbV9tYXNrTGF5ZXItPmNjTGF5
ZXJJbXBsKCkgOiAwOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNv
bnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKQEAgLTE0NSw2ICsxNDQsOSBAQCBwdWJsaWM6CiAK
ICAgICBib29sIHByZXNlcnZlczNEKCkgeyByZXR1cm4gbV9vd25lciAmJiBtX293bmVyLT5wcmVz
ZXJ2ZXMzRCgpOyB9CiAKKyAgICB2b2lkIHNldFVzZXNMYXllclNjaXNzb3IoYm9vbCB1c2VzTGF5
ZXJTY2lzc29yKSB7IG1fdXNlc0xheWVyU2Npc3NvciA9IHVzZXNMYXllclNjaXNzb3I7IH0KKyAg
ICBib29sIHVzZXNMYXllclNjaXNzb3IoKSBjb25zdCB7IHJldHVybiBtX3VzZXNMYXllclNjaXNz
b3I7IH0KKwogICAgIC8vIERlcml2ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBp
ZiB0aGV5IG5lZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UKICAgICAvLyBpbiB0aGUgTGF5ZXJSZW5k
ZXJlckNocm9taXVtLgogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopOwpAQCAtMTcwLDkgKzE3Miw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwogCi0gICAgLy8gRXZlcnl0aGluZyBmcm9tIGhlcmUgZG93
biBpbiB0aGUgcHVibGljIHNlY3Rpb24gd2lsbCBtb3ZlIHRvIENDTGF5ZXJJbXBsLgotICAgIEND
TGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpIGNvbnN0OwotCiAgICAgc3RhdGljIHZvaWQgZHJhd1Rl
eHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRy
aXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0LCBmbG9hdCBvcGFjaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbik7CkBAIC0xODcsNiArMTg2LDI0
IEBAIHB1YmxpYzoKIAogICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQog
CisgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFjZS5jbGVhcigp
OyB9CisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9CisgICAgdm9pZCBjcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CisKKyAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09w
YWNpdHk7IH0KKyAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3
T3BhY2l0eSA9IG9wYWNpdHk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KKyAgICBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldFJlbmRlclN1cmZhY2U7IH0KKyAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1
cmZhY2U7IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0RHJhd1RyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJhd1RyYW5zZm9y
bSA9IG1hdHJpeDsgfQorICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVudFJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2RyYXdhYmxlQ29udGVudFJlY3Q7IH0KKyAgICB2b2lkIHNldERyYXdh
YmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2RyYXdhYmxlQ29udGVudFJl
Y3QgPSByZWN0OyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBsYXllcidz
IGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCisgICAgYm9vbCBkZXNjZW5kYW50RHJh
d3NDb250ZW50KCk7CisKIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1f
b3duZXI7CiAgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyKTsKQEAgLTIxMCwxOCArMjI3LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBtX21hc2tMYXllcjsKIAotICAgIC8vIEFsbCBsYXllciBzaGFkZXJzIHNo
YXJlIHRoZSBzYW1lIGF0dHJpYnV0ZSBsb2NhdGlvbnMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb25z
Ci0gICAgLy8gYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMuIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBz
aGFkZXJzIHdpdGhvdXQgcmViaW5kaW5nIGF0dHJpYnV0ZQotICAgIC8vIGFycmF5cy4KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX3RleENvb3JkQXR0cmliTG9jYXRpb247Ci0KICAgICBmcmllbmQg
Y2xhc3MgVHJlZVN5bmNocm9uaXplcjsKICAgICBmcmllbmQgY2xhc3MgQ0NMYXllckltcGw7CiAg
ICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRpbWUgdHlw
ZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hl
biBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzAgaXMgZml4ZWQu
Ci0gICAgdm9pZCBzZXRDQ0xheWVySW1wbChDQ0xheWVySW1wbCogaW1wbCkgeyBtX2NjTGF5ZXJJ
bXBsID0gaW1wbDsgfQogICAgIGludCBtX2xheWVySWQ7CiAKIHByaXZhdGU6CkBAIC0yNDUsMTAg
KzI1NCw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBt
X2xheWVyUmVuZGVyZXI7CiAKLSAgICAvLyBUZW1wb3JhcnkgZm9yd2FyZCB3ZWFrIHBvaW50ZXIg
dG8gdGhlIENDTGF5ZXJJbXBsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLgotICAgIC8vIEZJ
WE1FOiBSZW1vdmUgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTg4MzAgaXMgZml4ZWQuCi0gICAgQ0NMYXllckltcGwqIG1fY2NMYXllckltcGw7Ci0KICAgICAv
LyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50UmVjdCBt
X3Zpc2libGVMYXllclJlY3Q7CkBAIC0yNjcsNiArMjcyLDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fZ2VvbWV0cnlGbGlwcGVkOwogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5n
ZTsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7CisgICAgYm9vbCBtX3VzZXNMYXllclNjaXNzb3I7
CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwpAQCAtMjc2LDYgKzI4MiwxNCBAQCBwcml2
YXRlOgogICAgIC8vIFJlcGxpY2EgbGF5ZXIgdXNlZCBmb3IgcmVmbGVjdGlvbnMuCiAgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IG1fcmVwbGljYUxheWVyOwogCisgICAgLy8gVHJhbnNpZW50IHBy
b3BlcnRpZXMuCisgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bT4gbV9yZW5kZXJTdXJm
YWNlOworICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0
OworICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKKyAgICBJbnRSZWN0IG1fZHJh
d2FibGVDb250ZW50UmVjdDsKKwogICAgIFN0cmluZyBtX25hbWU7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCAzOTVmZWM2OTU2ZWYxNzA4NGQyMGQ3ZTU1
YmM3ZmY0YzQzZWJjZGNjLi4yNzM4NTliNGVkMGQ2Mjk4NDU0ZWMyMjlkNDBiMGNmYThlODAzZDY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQ0LDYgKzQ0LDcg
QEAKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAi
VGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCkBAIC02Myw2
ICs2NCw4IEBACiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBGSVhNRTogTWFrZSB0aGlzIGxpbWl0IGFkanVzdGFibGUgYW5kIGdpdmUgaXQgYSB1
c2VmdWwgdmFsdWUuCkBAIC03OCw3ICs4MSw5IEBAIHN0YXRpYyBzaXplX3QgdGV4dHVyZU1lbW9y
eUxvd0xpbWl0Qnl0ZXMgPSAzICogMTAyNCAqIDEwMjQ7CiBib29sIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6c19pblBhaW50TGF5ZXJDb250ZW50cyA9IGZhbHNlOwogI2VuZGlmCiAKLXN0YXRpYyBJ
bnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSkKK25hbWVzcGFjZSB7CisKK0ludFJlY3QgY2FsY3VsYXRlVmlzaWJs
ZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFJlY3QmIGxh
eWVyQm91bmRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewog
ICAgIC8vIElzIHRoaXMgbGF5ZXIgZnVsbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgdGFyZ2V0IHN1
cmZhY2U/CiAgICAgSW50UmVjdCBsYXllckluU3VyZmFjZVNwYWNlID0gdHJhbnNmb3JtLm1hcFJl
Y3QobGF5ZXJCb3VuZFJlY3QpOwpAQCAtMTAyLDcgKzEwNyw3IEBAIHN0YXRpYyBJbnRSZWN0IGNh
bGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25z
dCBJbnRSCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWF0cml4IGhhcyBubyByb3RhdGlv
biwgc2tldyBvciBwZXJzcGVjdGl2ZSBjb21wb25lbnRzIHRvIGl0Lgotc3RhdGljIGJvb2wgaXNT
Y2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCitib29sIGlz
U2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewogICAg
IHJldHVybiAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5tMTQoKQogICAgICAgICAgICAmJiAh
bS5tMjEoKSAmJiAhbS5tMjMoKSAmJiAhbS5tMjQoKQpAQCAtMTExLDEwICsxMTYsMjMgQEAgc3Rh
dGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG0pCiAKIH0KIAordm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Pjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZv
aWQqKQoreworICAgIC8vIEN1cnJlbnRseSB3ZSBkb24ndCB1c2Ugei1vcmRlciB0byBkZWNpZGUg
d2hhdCB0byBwYWludCwgc28gdGhlcmUncyBubyBuZWVkIHRvIGFjdHVhbGx5IHNvcnQgTGF5ZXJD
aHJvbWl1bXMuCit9CisKK3ZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBs
PiA+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0
b3IgZW5kLCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlcikKK3sKKyAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzb3J0TGF5ZXJzIiwgMCwgMCk7CisgICAgbGF5ZXJTb3J0
ZXItPnNvcnQoZmlyc3QsIGVuZCk7Cit9CisKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXll
ciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAv
LyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBz
dXJmYWNlcywgZXRjLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRp
ZXNBbmRSZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgTGF5ZXJMaXN0JiBsYXllckxpc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KK3ZvaWQgY2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyVHlwZSogbGF5ZXIsIExheWVy
VHlwZSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVj
dG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIGxheWVyTGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVyU29y
dGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExh
eWVyVHlwZT4gPiBMYXllckxpc3Q7CiAgICAgLy8gQ29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFu
c2Zvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIGxheWVyIGFuZAogICAgIC8v
IGFsbCBpdHMgY2hpbGRyZW4uIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxh
eWVyJ3MgcG9zaXRpb24KICAgICAvLyBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyJ3MgYW5j
aG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNlZApAQCAtMTcyLDExICsx
OTAsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRS
ZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5ZXIKICAgICBib29sIHVzZVN1cmZhY2VGb3JP
cGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJlc2VydmVzM0QoKTsK
ICAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gbGF5ZXItPm1hc2tMYXllcigpOwogICAg
IGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBsYXllci0+cmVwbGljYUxheWVyKCk7Ci0g
ICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0gbGF5ZXItPnBhcmVudCgpICYm
IGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAmJiAhbGF5ZXItPnByZXNlcnZlczNEKCkg
JiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCk7Ci0gICAgaWYgKHVzZVN1cmZhY2VG
b3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8IHVzZVN1cmZhY2VGb3JGbGF0
RGVzY2VuZGFudHMgfHwgKCh1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNlU3VyZmFjZUZvck9w
YWNpdHkpICYmIGxheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKSkgewotICAgICAgICBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpOwotICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UpCi0gICAgICAgICAgICByZW5kZXJTdXJm
YWNlID0gbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBib29sIHVzZVN1cmZhY2VG
b3JGbGF0RGVzY2VuZGFudHMgPSBsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5w
cmVzZXJ2ZXMzRCgpICYmICFsYXllci0+cHJlc2VydmVzM0QoKSAmJiBsYXllci0+ZGVzY2VuZGFu
dERyYXdzQ29udGVudCgpOworICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8fCB1c2VTdXJm
YWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzIHx8ICgodXNl
U3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBsYXllci0+ZGVz
Y2VuZGFudERyYXdzQ29udGVudCgpKSkgeworICAgICAgICBpZiAoIWxheWVyLT5yZW5kZXJTdXJm
YWNlKCkpCisgICAgICAgICAgICBsYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgICAg
ICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CiAKICAgICAgICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVw
cGVyIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllci4KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggZHJhd1RyYW5zZm9ybTsKQEAgLTIzMiw3ICsyNTAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiBs
YXllcgogICAgICAgICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBh
cmVudCgpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KGxheWVyICE9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKQorICAgICAgICBpZiAobGF5ZXIgIT0g
cm9vdExheWVyKQogICAgICAgICAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogCiAg
ICAgICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7CkBAIC0yODgsMTEgKzMwNiwxMSBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1
cmZhY2VzKENDTGF5ZXJJbXBsKiBsYXllcgogICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0g
ZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5
ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIGNoaWxk
ID0gbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCk7Ci0gICAgICAgIHVwZGF0ZVByb3BlcnRpZXNB
bmRSZW5kZXJTdXJmYWNlcyhjaGlsZCwgc3VibGF5ZXJNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGRlc2NlbmRhbnRzKTsKKyAgICAgICAgTGF5ZXJUeXBlKiBjaGlsZCA9IGxheWVyLT5j
aGlsZHJlbigpW2ldLmdldCgpOworICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHk8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxk
LCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNj
ZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKIAogICAgICAgICBpZiAoY2hp
bGQtPnJlbmRlclN1cmZhY2UoKSkgewotICAgICAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVt
KiBjaGlsZFJlbmRlclN1cmZhY2UgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICAg
ICAgUmVuZGVyU3VyZmFjZVR5cGUqIGNoaWxkUmVuZGVyU3VyZmFjZSA9IGNoaWxkLT5yZW5kZXJT
dXJmYWNlKCk7CiAgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXll
ci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVj
dC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250
ZW50UmVjdCgpKSk7CiAgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChk
cmF3YWJsZUNvbnRlbnRSZWN0KTsKQEAgLTMxMCwxMCArMzI4LDEwIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllcklt
cGwqIGxheWVyCiAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxl
Q29udGVudFJlY3QpOwogICAgIH0KIAotICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYm
IGxheWVyICE9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKSB7Ci0gICAgICAgIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAg
ICAgIEludFJlY3QgcmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29u
dGVudFJlY3QoKTsKLSAgICAgICAgRmxvYXRQb2ludCBzdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0
KHJlbmRlclN1cmZhY2VDb250ZW50UmVjdCkuY2VudGVyKCk7CisgICAgaWYgKGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkgJiYgbGF5ZXIgIT0gcm9vdExheWVyKSB7CisgICAgICAgIFJlbmRlclN1cmZh
Y2VUeXBlKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAg
SW50UmVjdCBjbGlwcGVkQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgp
OworICAgICAgICBGbG9hdFBvaW50IHN1cmZhY2VDZW50ZXIgPSBGbG9hdFJlY3QoY2xpcHBlZENv
bnRlbnRSZWN0KS5jZW50ZXIoKTsKIAogICAgICAgICAvLyBSZXN0cmljdCB0aGUgUmVuZGVyU3Vy
ZmFjZSBzaXplIHRvIHRoZSBwb3J0aW9uIHRoYXQncyB2aXNpYmxlLgogICAgICAgICBGbG9hdFNp
emUgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZzsKQEAgLTMyMSwyMiArMzM5LDIzIEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMo
Q0NMYXllckltcGwqIGxheWVyCiAgICAgICAgIC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlz
IHJlZmxlY3RlZCBhcyB0aGUgcmVmbGVjdGlvbiBzaG91bGRuJ3QgYmUKICAgICAgICAgLy8gY2xp
cHBlZC4KICAgICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAg
IGlmICghcmVuZGVyU3VyZmFjZS0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkgJiYgIXJlbmRlclN1
cmZhY2VDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IHN1
cmZhY2VTY2lzc29yUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPnNj
aXNzb3JSZWN0KCksIHJlbmRlclN1cmZhY2VDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3Jp
Z2luVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VDb250ZW50UmVj
dC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0KTsKKyAgICAgICAgICAgIGlmICghcmVuZGVy
U3VyZmFjZS0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkgJiYgIWNsaXBwZWRDb250ZW50UmVjdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VTY2lzc29yUmVjdCA9
IGNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPnNjaXNzb3JSZWN0KCksIGNsaXBw
ZWRDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgICAg
ICAgICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VD
ZW50ZXIgPSBGbG9hdFJlY3QocmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0KS5jZW50ZXIoKTsKKyAg
ICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSBGbG9hdFJlY3QoY2xp
cHBlZENvbnRlbnRSZWN0KS5jZW50ZXIoKTsKICAgICAgICAgICAgIGNlbnRlck9mZnNldER1ZVRv
Q2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1cmZhY2VDZW50ZXI7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBUaGUgUmVuZGVyU3VyZmFjZSBiYWNraW5nIHRleHR1cmUgY2Fubm90
IGV4Y2VlZCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQKICAgICAgICAgLy8gdGV4dHVyZSBzaXplLgot
ICAgICAgICByZW5kZXJTdXJmYWNlQ29udGVudFJlY3Quc2V0V2lkdGgoc3RkOjptaW4ocmVuZGVy
U3VyZmFjZUNvbnRlbnRSZWN0LndpZHRoKCksIG1fbWF4VGV4dHVyZVNpemUpKTsKLSAgICAgICAg
cmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0LnNldEhlaWdodChzdGQ6Om1pbihyZW5kZXJTdXJmYWNl
Q29udGVudFJlY3QuaGVpZ2h0KCksIG1fbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgY2xpcHBl
ZENvbnRlbnRSZWN0LnNldFdpZHRoKG1pbihjbGlwcGVkQ29udGVudFJlY3Qud2lkdGgoKSwgbWF4
VGV4dHVyZVNpemUpKTsKKyAgICAgICAgY2xpcHBlZENvbnRlbnRSZWN0LnNldEhlaWdodChtaW4o
Y2xpcHBlZENvbnRlbnRSZWN0LmhlaWdodCgpLCBtYXhUZXh0dXJlU2l6ZSkpOwogCi0gICAgICAg
IGlmIChyZW5kZXJTdXJmYWNlQ29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBpZiAoY2xp
cHBlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPmNs
ZWFyTGF5ZXJMaXN0KCk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KHJl
bmRlclN1cmZhY2VDb250ZW50UmVjdCk7CisKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q29u
dGVudFJlY3QoY2xpcHBlZENvbnRlbnRSZWN0KTsKIAogICAgICAgICAvLyBTaW5jZSB0aGUgbGF5
ZXIgc3RhcnRzIGEgbmV3IHJlbmRlciBzdXJmYWNlIHdlIG5lZWQgdG8gYWRqdXN0IGl0cwogICAg
ICAgICAvLyBzY2lzc29yIHJlY3QgdG8gYmUgZXhwcmVzc2VkIGluIHRoZSBuZXcgc3VyZmFjZSdz
IGNvb3JkaW5hdGUgc3lzdGVtLgpAQCAtMzYyLDcgKzM4MSw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwq
IGxheWVyCiAgICAgLy8gZHJhd24gZnJvbSBiYWNrIHRvIGZyb250LiBJZiB0aGUgcHJlc2VydmVz
LTNkIHByb3BlcnR5IGlzIGFsc28gc2V0IG9uIHRoZSBwYXJlbnQgdGhlbgogICAgIC8vIHNraXAg
dGhlIHNvcnRpbmcgYXMgdGhlIHBhcmVudCB3aWxsIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBh
bnl3YXkuCiAgICAgaWYgKGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBhcmVudCgp
IHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQotICAgICAgICBtX2xheWVyU29y
dGVyLnNvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5k
KCkpOworICAgICAgICBzb3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCks
IGRlc2NlbmRhbnRzLmVuZCgpLCBsYXllclNvcnRlcik7Cit9CisKIH0KIAogc3RhdGljIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9h
dCBib3R0b20sIGZsb2F0IHRvcCkKQEAgLTU0NywxOSArNTY4LDEyIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoKQogICAgIGlmICghbV9yb290TGF5ZXIpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c3luY2hyb25pemVUcmVlcyIsIHRoaXMsIDApOwotICAgICAgICBtX3Jvb3RDQ0xh
eWVySW1wbCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9yb290TGF5ZXIu
Z2V0KCksIG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKTsKLSAgICB9Ci0KLSAgICBtX2NvbXB1dGVk
UmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IGFkb3B0UHRyKG5ldyBMYXllckxpc3QoKSk7Ci0gICAg
dXBkYXRlTGF5ZXJzKCptX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdXBk
YXRlTGF5ZXJzKG1fcm9vdExheWVyLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnMoKQogewogICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OwotICAgIEFTU0VSVChtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgLy8g
QmVmb3JlIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3YXJlQ29tcG9zaXRpbmcoKSkgewogICAg
ICAgICAvLyBGSVhNRTogVGhlIG11bHRpdGhyZWFkZWQgY29tcG9zaXRvciBjYXNlIHdpbGwgbm90
IHdvcmsgYXMgbG9uZyBhcwpAQCAtNTczLDggKzU4NywxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB7CisgICAgICAg
IFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnN5bmNocm9uaXplVHJlZXMiLCB0
aGlzLCAwKTsKKyAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVlU3luY2hyb25pemVyOjpz
eW5jaHJvbml6ZVRyZWVzKG1fcm9vdExheWVyLmdldCgpLCBtX3Jvb3RDQ0xheWVySW1wbC5nZXQo
KSk7CisgICAgfQorCisKICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVt
b3J5TGltaXRCeXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMgLSBtX2NvbnRlbnRzVGV4
dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKLSAgICBkcmF3TGF5ZXJzKCpt
X2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZHJhd0xheWVyc0ludGVybmFs
KCk7CiAKICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7CiAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHRl
eHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlcyk7CkBAIC01ODgsMzMgKzYwOCwzMSBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3Jl
ZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIp
CiB7CiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJz
IiwgdGhpcywgMCk7Ci0gICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXll
ci0+Y2NMYXllckltcGwoKTsKIAotICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFj
ZSgpKQotICAgICAgICByb290RHJhd0xheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAg
QVNTRVJUKHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7Ci0KLSAgICByb290RHJhd0xh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwg
MCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKKyAgICBpZiAoIXJvb3RMYXllci0+
cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludCgwLCAwKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUoKSkpOwogCiAgICAg
SW50UmVjdCByb290U2Npc3NvclJlY3QobV92aWV3cG9ydFZpc2libGVSZWN0KTsKICAgICAvLyBU
aGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgogICAg
IHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24ueCgpLCAtbV92
aWV3cG9ydFNjcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgcm9vdERyYXdMYXllci0+c2V0U2Npc3Nv
clJlY3Qocm9vdFNjaXNzb3JSZWN0KTsKKyAgICByb290TGF5ZXItPnNldFNjaXNzb3JSZWN0KHJv
b3RTY2lzc29yUmVjdCk7CiAKLSAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gcm9vdERyYXdM
YXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcik7CiAKLSAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290RHJhd0xheWVyKTsKKyAgICBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qIHJvb3RSZW5kZXJTdXJmYWNlID0gcm9vdExheWVyLT5yZW5kZXJT
dXJmYWNlKCk7CisgICAgcm9vdFJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7CiAKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBtX2RlZmF1bHRSZW5k
ZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOwotICAgIC8vIFVuZm9ydHVuYXRlbHksIHVwZGF0
ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcygpIGN1cnJlbnRseSBib3RoIHVwZGF0ZXMgdGhl
IGxheWVycyBhbmQgdXBkYXRlcyB0aGUgZHJhdyBzdGF0ZQotICAgIC8vICh0cmFuc2Zvcm1zLCBl
dGMpLiBJdCdkIGJlIG5pY2VyIGlmIG9wZXJhdGlvbnMgb24gdGhlIHByZXNlbnRhdGlvbiBsYXll
cnMgaGFwcGVuZWQgbGF0ZXIsIGJ1dCB0aGUgZHJhdwotICAgIC8vIHRyYW5zZm9ybXMgYXJlIG5l
ZWRlZCBieSBsYXJnZSBsYXllcnMgdG8gZGV0ZXJtaW5lIHZpc2liaWxpdHkuIFRpbGluZyB3aWxs
IGZpeCB0aGlzIGJ5IGVsaW1pbmF0aW5nIHRoZQotICAgIC8vIGNvbmNlcHQgb2YgYSBsYXJnZSBj
b250ZW50IGxheWVyLgotICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhyb290
RHJhd0xheWVyLCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9kZWZh
dWx0UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkpOworCisgICAgeworICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnM6OmNhbGNEcmF3RXRjIiwg
dGhpcywgMCk7CisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQqPihyb290TGF5ZXIsIHJv
b3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RSZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgMCwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgfQogCiAj
aWZuZGVmIE5ERUJVRwogICAgIHNfaW5QYWludExheWVyQ29udGVudHMgPSB0cnVlOwpAQCAtNjU5
LDcgKzY3Nyw3IEBAIHN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21p
dW0qIGxheWVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5CiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgp
IHsKLSAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSog
cmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhd
LmdldCgpOwogICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRl
clN1cmZhY2UpOwogCkBAIC02NzYsMTggKzY5NCwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eQogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZh
Y2UtPmxheWVyTGlzdCgpOworICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJl
bmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUo
KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBs
YXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIENDTGF5ZXJJbXBs
KiBjY0xheWVySW1wbCA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
IExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwogCiAg
ICAgICAgICAgICAvLyBMYXllcnMgdGhhdCBzdGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxs
IGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVyCiAgICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlz
dCBpcyBwcm9jZXNzZWQuCi0gICAgICAgICAgICBpZiAoY2NMYXllckltcGwtPnJlbmRlclN1cmZh
Y2UoKSAmJiBjY0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCisg
ICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gY2NMYXllckltcGwtPm93bmVyKCk7Ci0K
ICAgICAgICAgICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwogCiAgICAgICAgICAg
ICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCkBAIC03MDQsMTAgKzcyMCwxMCBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheQogICAgICAgICAgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIEludFJlY3QgdGFyZ2V0
U3VyZmFjZVJlY3QgPSBjY0xheWVySW1wbC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gY2NMYXll
ckltcGwtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBpZiAobGF5ZXItPmNjTGF5
ZXJJbXBsKCktPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgICAgICB0YXJnZXRTdXJm
YWNlUmVjdC5pbnRlcnNlY3QobGF5ZXItPmNjTGF5ZXJJbXBsKCktPnNjaXNzb3JSZWN0KCkpOwot
ICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxh
eWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVu
dEJvdW5kcygpLCBjY0xheWVySW1wbC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIElu
dFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8g
bGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNM
YXllclNjaXNzb3IoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNl
Y3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5
ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5
ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKIAogICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHZpc2libGVM
YXllclJlY3QpOwogCkBAIC03MjYsMTUgKzc0MiwzNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eQogICAgIH0KIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRWaXNp
YmxlUmVjdC5pc0VtcHR5KCkgfHwgIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKICAg
ICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzIiwgdGhpcywg
MCk7Ci0gICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXllci0+Y2NMYXll
ckltcGwoKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1fcm9vdENDTGF5ZXJJ
bXBsLmdldCgpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCisgICAgaWYgKCFyb290RHJh
d0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKKyAgICByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENv
bnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5z
aXplKCkpKTsKKworICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KG1fdmlld3BvcnRWaXNpYmxl
UmVjdCk7CisgICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Ny
b2xsIG9mZnNldC4KKyAgICByb290U2Npc3NvclJlY3QubW92ZSgtbV92aWV3cG9ydFNjcm9sbFBv
c2l0aW9uLngoKSwgLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHJvb3REcmF3
TGF5ZXItPnNldFNjaXNzb3JSZWN0KHJvb3RTY2lzc29yUmVjdCk7CisKKyAgICBDQ0xheWVyTGlz
dCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHJvb3REcmF3TGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IHJvb3REcmF3TGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKKyAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgp
OworCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzSW50ZXJuYWw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7CisgICAgICAgIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJm
YWNlLCBDQ0xheWVyU29ydGVyPihyb290RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+
bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBtX21heFRleHR1cmVTaXplKTsKKyAgICB9CisK
ICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBp
bmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT52aWV3cG9ydCgwLCAwLCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aWV3
cG9ydFZpc2libGVSZWN0LmhlaWdodCgpKSk7CiAKQEAgLTc3Miw3ICs4MDksNyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpCiAgICAgLy8gY29ycmVjdCBvcmRlci4KICAgICBmb3IgKGludCBzdXJm
YWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRl
eCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKICAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1
cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsK
LSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3Vy
ZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVu
ZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAg
ICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tp
cHNEcmF3KHRydWUpOwpAQCAtNzk2LDcgKzgzMyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkK
ICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7
CisgICAgICAgICAgICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFj
ZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAw
OyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KQogICAgICAgICAg
ICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCksIHJlbmRlclN1cmZh
Y2UpOwogICAgICAgICB9CkBAIC05MTYsNyArOTUzLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zv
cm0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBmb3IgKGlu
dCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZh
Y2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIHJl
bmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5n
ZXQoKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwogICAgICAgICBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwogCkBAIC05MjYsMTkgKzk2
MywxNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cgogICAgICAgICBjb25zdCBMYXllckxpc3Qm
IGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQo
bGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAg
ICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQo
KTsKLSAgICAgICAgICAgIGlmIChjY0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpICYmIGNjTGF5
ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKKyAgICAgICAgICAgIExh
eWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOworICAgICAg
ICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSAhPSByZW5kZXJTdXJmYWNlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNjTGF5ZXJJbXBsKTsKKyAgICAgICAgICAg
IHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXIpOwogICAgICAgICB9CiAgICAgfQogfQog
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhD
Q0xheWVySW1wbCogY2NMYXllckltcGwpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKIHsKLSAgICBMYXll
ckNocm9taXVtKiBsYXllciA9IGNjTGF5ZXJJbXBsLT5vd25lcigpOwotCiAgICAgaWYgKGxheWVy
LT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTQ2LDE0ICs5ODEs
MTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
bGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNj
TGF5ZXJJbXBsLT5tYXNrTGF5ZXIoKSk7CisgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMobGF5ZXItPm1hc2tMYXllcigpKTsKICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQot
ICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNjTGF5ZXJJbXBsLT5yZXBsaWNhTGF5
ZXIoKSk7CisgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPnJlcGxpY2FM
YXllcigpKTsKIAogICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIGxheWVy
LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0KLSAgICBsYXllci0+cHVzaFByb3BlcnRp
ZXNUbyhjY0xheWVySW1wbCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRD
b21wb3NpdGVPZmZzY3JlZW4oYm9vbCBjb21wb3NpdGVPZmZzY3JlZW4pCkBAIC05NjMsMTMgKzk5
NiwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVu
KGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuKQogCiAgICAgbV9jb21wb3NpdGVPZmZzY3JlZW4gPSBj
b21wb3NpdGVPZmZzY3JlZW47CiAKLSAgICBpZiAoIW1fY29tcG9zaXRlT2Zmc2NyZWVuICYmIG1f
cm9vdExheWVyKQotICAgICAgICBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKS0+Y2xlYXJSZW5k
ZXJTdXJmYWNlKCk7CisgICAgaWYgKCFtX2NvbXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RDQ0xh
eWVySW1wbCkKKyAgICAgICAgbV9yb290Q0NMYXllckltcGwtPmNsZWFyUmVuZGVyU3VyZmFjZSgp
OwogfQogCiBMYXllclRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVu
TGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW4gPyBtX3Jv
b3RMYXllci0+Y2NMYXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUo
KSA6IDA7CisgICAgcmV0dXJuIG1fY29tcG9zaXRlT2Zmc2NyZWVuICYmIG1fcm9vdENDTGF5ZXJJ
bXBsID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJl
KCkgOiAwOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNjcmVlblRl
eHR1cmVUb0Rpc3BsYXkoKQpAQCAtOTg2LDcgKzEwMTksNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQogICAgIH0KIH0KIAotYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiByZW5kZXJTdXJmYWNlKQorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJl
bmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogewogICAgIGlmICht
X2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IHJlbmRlclN1cmZhY2UpCiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTAyMCw3ICsxMDUzLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVz
ZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihD
Q0xheWVySW1wbCogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0U3VyZmFjZSkK
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVy
LCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCiB7CiAgICAgaWYgKGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSB0YXJnZXRTdXJmYWNlKSB7
CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXcobGF5ZXItPmdldERyYXdSZWN0
KCkpOwpAQCAtMTA0Nyw3ICsxMDgwLDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSoKICAgICB9
IGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIAotCiAgICAgaWYgKCFsYXllci0+ZG91
YmxlU2lkZWQoKSkgewogICAgICAgICAvLyBGSVhNRTogTmVlZCB0byB0YWtlIGludG8gYWNjb3Vu
dCB0aGUgY3VtdWxhdGl2ZSByZW5kZXIgc3VyZmFjZSB0cmFuc2Zvcm1zIGFsbCB0aGUgd2F5IGZy
b20KICAgICAgICAgLy8gICAgICAgIHRoZSBkZWZhdWx0IHJlbmRlciBzdXJmYWNlIGluIG9yZGVy
IHRvIGRldGVybWluZSB2aXNpYmlsaXR5LgpAQCAtMTE0Niw3ICsxMTc4LDcgQEAgYm9vbCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICAvLyBXZSB3
aWxsIGFsd2F5cyBuZWVkIHRoZXNlIHByb2dyYW1zIHRvIHJlbmRlciwgc28gY3JlYXRlIHRoZSBw
cm9ncmFtcyBlYWdlcmx5IHNvIHRoYXQgdGhlIHNoYWRlciBjb21waWxhdGlvbiBjYW4KICAgICAv
LyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhlciBwcm9ncmFtcyBhcmUgY3JlYXRl
ZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLgogICAgIG1fc2hhcmVkR2VvbWV0cnkgPSBhZG9wdFB0
cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkpOwotICAgIG1fcmVuZGVyU3Vy
ZmFjZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpQcm9ncmFt
KG1fY29udGV4dC5nZXQoKSkpOworICAgIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0gPSBhZG9wdFB0
cihuZXcgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1f
dGlsZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbSht
X2NvbnRleHQuZ2V0KCkpKTsKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
Zmx1c2goKSk7CkBAIC0xMTc4LDcgKzEyMTAsNyBAQCBjb25zdCBDQ0hlYWRzVXBEaXNwbGF5OjpQ
cm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpCiAg
ICAgcmV0dXJuIG1faGVhZHNVcERpc3BsYXlQcm9ncmFtLmdldCgpOwogfQogCi1jb25zdCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVy
U3VyZmFjZVByb2dyYW0oKQorY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtKCkKIHsKICAgICBBU1NFUlQobV9y
ZW5kZXJTdXJmYWNlUHJvZ3JhbSk7CiAgICAgaWYgKCFtX3JlbmRlclN1cmZhY2VQcm9ncmFtLT5p
bml0aWFsaXplZCgpKSB7CkBAIC0xMTg4LDEwICsxMjIwLDEwIEBAIGNvbnN0IFJlbmRlclN1cmZh
Y2VDaHJvbWl1bTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJmYWNl
UHJvZ3JhCiAgICAgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0uZ2V0KCk7CiB9CiAKLWNv
bnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6TWFza1Byb2dyYW0qIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCkKK2NvbnN0IENDUmVuZGVyU3VyZmFjZTo6
TWFza1Byb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9n
cmFtKCkKIHsKICAgICBpZiAoIW1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKQotICAgICAgICBt
X3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hy
b21pdW06Ok1hc2tQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgICAgICBtX3JlbmRlclN1
cmZhY2VNYXNrUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9n
cmFtKG1fY29udGV4dC5nZXQoKSkpOwogICAgIGlmICghbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dy
YW0tPmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Ym9yZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwogICAgICAgICBt
X3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOwpAQCAtMTM0NCw4ICsxMzc2
LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ29tcG9zaXRvckNvbnRleHRMb3N0
KCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIGNvbnN0CiB7Ci0g
ICAgaWYgKGxheWVyLT5jY0xheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCkpCi0gICAgICAgIGxh
eWVyLT5jY0xheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPmR1bXBTdXJmYWNlKHRzLCBpbmRl
bnQpOworICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpLT5kdW1wU3VyZmFjZSh0cywgaW5kZW50KTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCiAgICAgICAgIGR1bXBS
ZW5kZXJTdXJmYWNlcyh0cywgaW5kZW50LCBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGNiMTQ0NzQ5NDdkNDNlNzhmNTNk
MmRlOTI3YjVlNTFkMmZlMzZlMGIuLjA2Yjk0ODY5Njg4MGIwZDQzMjBkMWFiYmVkN2M4N2YzYzE1
YWJhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0zOCw3ICszOCw2
IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCkBAIC0xMjksOCArMTI4
LDggQEAgcHVibGljOgogICAgIGNvbnN0IEdlb21ldHJ5QmluZGluZyogc2hhcmVkR2VvbWV0cnko
KSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5LmdldCgpOyB9CiAgICAgY29uc3QgTGF5
ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogYm9yZGVyUHJvZ3JhbSgpOwogICAgIGNvbnN0IEND
SGVhZHNVcERpc3BsYXk6OlByb2dyYW0qIGhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpOwotICAgIGNv
bnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UHJvZ3JhbSogcmVuZGVyU3VyZmFjZVByb2dyYW0o
KTsKLSAgICBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFtKiByZW5kZXJT
dXJmYWNlTWFza1Byb2dyYW0oKTsKKyAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW0q
IHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CisgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNr
UHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7CiAgICAgY29uc3QgTGF5ZXJUaWxl
ckNocm9taXVtOjpQcm9ncmFtKiB0aWxlclByb2dyYW0oKTsKICAgICBjb25zdCBMYXllclRpbGVy
Q2hyb21pdW06OlByb2dyYW1Td2l6emxlKiB0aWxlclByb2dyYW1Td2l6emxlKCk7CiAgICAgY29u
c3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3JhbSgpOwpAQCAt
MTYyLDExICsxNjEsMTMgQEAgcHVibGljOgogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9v
bCBzX2luUGFpbnRMYXllckNvbnRlbnRzOwogI2VuZGlmCisgICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsUHJveHkoKTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXll
ckltcGw+ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFwaGljc0NvbnRleHQz
RCosIGludD4gQ2hpbGRDb250ZXh0TWFwOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8g
YmUgbW92ZWQgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdEltcGwgd2hlbiB0aGF0IGNsYXNzIGV4aXN0
cy4KQEAgLTE3NCwxNiArMTc1LDE1IEBAIHByaXZhdGU6CiAKICAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0oQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4sIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCwgYm9vbCBh
Y2NlbGVyYXRlRHJhd2luZyk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21p
dW0qKTsKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7Ci0gICAgdm9pZCB1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIExheWVyTGlzdCYgbGF5ZXJzKTsKIAogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRz
KGNvbnN0IExheWVyTGlzdCYpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhj
b25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIHZvaWQgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVySW1wbCopOworICAgIHZvaWQgdXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhMYXllckNocm9taXVtKik7CiAKLSAgICB2b2lkIGRyYXdMYXllcnMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGRyYXdMYXll
cihDQ0xheWVySW1wbCosIFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOworICAgIHZvaWQgZHJhd0xh
eWVyc0ludGVybmFsKCk7CisgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRl
clN1cmZhY2UqKTsKIAogICAgIHZvaWQgZHJhd1Jvb3RMYXllcigpOwogICAgIExheWVyVGV4dHVy
ZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CkBAIC0xOTMsNyArMTkzLDcgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgc2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiwgYm9vbCBm
bGlwWSk7CiAKLSAgICBib29sIHVzZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVt
Kik7CisgICAgYm9vbCB1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSopOwogCiAgICAg
Ym9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIApAQCAtMjIxLDcgKzIyMSw3IEBAIHByaXZhdGU6
CiAKICAgICBPd25QdHI8TGF5ZXJMaXN0PiBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKIAotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsK
KyAgICBDQ1JlbmRlclN1cmZhY2UqIG1fY3VycmVudFJlbmRlclN1cmZhY2U7CiAgICAgdW5zaWdu
ZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkOwogICAgIGJvb2wgbV9jb21wb3NpdGVPZmZzY3Jl
ZW47CiAKQEAgLTIzNSwxNCArMjM1LDE0IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEdlb21ldHJ5
QmluZGluZz4gbV9zaGFyZWRHZW9tZXRyeTsKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1bTo6Qm9y
ZGVyUHJvZ3JhbT4gbV9ib3JkZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5
OjpQcm9ncmFtPiBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbTsKLSAgICBPd25QdHI8UmVuZGVyU3Vy
ZmFjZUNocm9taXVtOjpQcm9ncmFtPiBtX3JlbmRlclN1cmZhY2VQcm9ncmFtOwotICAgIE93blB0
cjxSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFtPiBtX3JlbmRlclN1cmZhY2VNYXNr
UHJvZ3JhbTsKICAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtPiBtX3RpbGVy
UHJvZ3JhbTsKICAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZT4g
bV90aWxlclByb2dyYW1Td2l6emxlOwogICAgIE93blB0cjxDQ0NhbnZhc0xheWVySW1wbDo6UHJv
Z3JhbT4gbV9jYW52YXNMYXllclByb2dyYW07CisgICAgT3duUHRyPENDUGx1Z2luTGF5ZXJJbXBs
OjpQcm9ncmFtPiBtX3BsdWdpbkxheWVyUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NSZW5kZXJTdXJm
YWNlOjpNYXNrUHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW07CisgICAgT3duUHRy
PENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbTsKICAgICBP
d25QdHI8Q0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0+IG1fdmlkZW9MYXllclJHQkFQcm9n
cmFtOwogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtPiBtX3ZpZGVvTGF5
ZXJZVVZQcm9ncmFtOwotICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbT4gbV9w
bHVnaW5MYXllclByb2dyYW07CiAKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlcjsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVNYW5hZ2VyOwpAQCAtMjYyLDcgKzI2Miw3IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1fYW5pbWF0aW5nOwogCi0gICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2RlZmF1bHRS
ZW5kZXJTdXJmYWNlOworICAgIENDUmVuZGVyU3VyZmFjZSogbV9kZWZhdWx0UmVuZGVyU3VyZmFj
ZTsKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdp
bkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDAwMGYyOTUwZjQ5Y2NiNTJiYzY2MzU5NzY2ZWQxYzY4
M2EzMzg5NDcuLmI2ZTM1MDZmY2ZmZjNhNTY4MWE1NTNmNDFhNmY1ZWIyNDhlODFlNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCkBAIC00OSw3ICs0OSw3IEBAIFBsdWdpbkxh
eWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcikKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gUGx1Z2luTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRl
KHRoaXMsIG1fbGF5ZXJJZCk7CisgICAgcmV0dXJuIENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUo
bV9sYXllcklkKTsKIH0KIAogdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQo
dW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAppbmRleCA2
YTI3MjE2ZDAyNGJlOTMxMmVmNjk2MjcxOTQyZTYyOTVkYjg0MzY0Li5lOWEzZGZkMGI1ZDY2OGJm
NzQyNWQ2MmQ1MDY4OWRmZjE4MWZhNjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHAKQEAgLTI5LDE3ICsyOSwxNCBAQAogCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNo
cm9taXVtLmgiCiAKLSNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgotI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hy
b21pdW0oQ0NMYXllckltcGwqIG93bmluZ0xheWVyKQorUmVuZGVyU3VyZmFjZUNocm9taXVtOjpS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0oTGF5ZXJDaHJvbWl1bSogb3duaW5nTGF5ZXIpCiAgICAgOiBt
X293bmluZ0xheWVyKG93bmluZ0xheWVyKQogICAgICwgbV9tYXNrTGF5ZXIoMCkKICAgICAsIG1f
c2tpcHNEcmF3KGZhbHNlKQpAQCAtNDksMTcgKzQ2LDYgQEAgUmVuZGVyU3VyZmFjZUNocm9taXVt
OjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0oQ0NMYXllckltcGwqIG93bmluZ0xheWVyKQogCiBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06On5SZW5kZXJTdXJmYWNlQ2hyb21pdW0oKQogewotICAgIGNsZWFu
dXBSZXNvdXJjZXMoKTsKLX0KLQotdm9pZCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmNsZWFudXBS
ZXNvdXJjZXMoKQotewotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwotCi0gICAgbV9jb250ZW50c1RleHR1
cmUuY2xlYXIoKTsKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtKiBSZW5kZXJTdXJmYWNlQ2hy
b21pdW06OmxheWVyUmVuZGVyZXIoKQpAQCAtNzksMTA1ICs2NSw2IEBAIEZsb2F0UmVjdCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAogICAgIHJldHVy
biBkcmF3YWJsZUNvbnRlbnRSZWN0OwogfQogCi1ib29sIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSgpCi17Ci0gICAgSW50U2l6ZSByZXF1aXJlZFNpemUobV9j
b250ZW50UmVjdC5zaXplKCkpOwotICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlciA9
IGxheWVyUmVuZGVyZXIoKS0+cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCk7Ci0KLSAgICBp
ZiAoIW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IExheWVy
VGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCB0ZXh0dXJlTWFuYWdl
cik7Ci0KLSAgICBpZiAobV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHJlcXVp
cmVkU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7Ci0gICAgICAgIG1fc2tpcHNEcmF3
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1fc2tpcHNEcmF3
ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU3VyZmFjZUNocm9t
aXVtOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlKCkKLXsKLSAgICBpZiAobV9za2lwc0RyYXcgfHwg
IW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZW50c1RleHR1
cmUtPnVucmVzZXJ2ZSgpOwotfQotCi12b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd1N1
cmZhY2UoQ0NMYXllckltcGwqIG1hc2tMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGRyYXdUcmFuc2Zvcm0pCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IGxh
eWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOwotCi0gICAgaW50IHNoYWRlck1hdHJpeExvY2F0aW9u
ID0gLTE7Ci0gICAgaW50IHNoYWRlckFscGhhTG9jYXRpb24gPSAtMTsKLSAgICBjb25zdCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnJl
bmRlclN1cmZhY2VQcm9ncmFtKCk7Ci0gICAgY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpN
YXNrUHJvZ3JhbSogbWFza1Byb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnJlbmRlclN1cmZhY2VN
YXNrUHJvZ3JhbSgpOwotICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVk
KCkpOwotICAgIGJvb2wgdXNlTWFzayA9IGZhbHNlOwotICAgIGlmIChtYXNrTGF5ZXIgJiYgbWFz
a0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBpZiAoIW1hc2tMYXllci0+Ym91bmRz
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0M0QtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51c2VQcm9ncmFtKG1h
c2tQcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRl
eHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICAg
ICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFpKG1hc2tQcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgICAgICAgICBtX2Nv
bnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0M0Qs
IGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsK
LSAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFpKG1hc2tQcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVyTG9jYXRpb24oKSwgMSkpOwotICAgICAg
ICAgICAgbWFza0xheWVyLT5iaW5kQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgICAgICAgICBHTEMo
Y29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUwKSk7Ci0gICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1hc2tQcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOwotICAgICAgICAgICAgc2hhZGVyQWxw
aGFMb2NhdGlvbiA9IG1hc2tQcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24o
KTsKLSAgICAgICAgICAgIHVzZU1hc2sgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKCF1c2VNYXNrKSB7Ci0gICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJp
bmRUZXh0dXJlKCk7Ci0gICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFp
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICAg
ICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhM
b2NhdGlvbigpOwotICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIExheWVyQ2hyb21p
dW06OmRyYXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCksIGxheWVyUmVu
ZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250
ZW50UmVjdC5oZWlnaHQoKSwgbV9kcmF3T3BhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiwgc2hhZGVyQWxwaGFMb2NhdGlv
bik7Ci19Ci0KLXZvaWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3KGNvbnN0IEludFJlY3Qm
KQotewotICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAg
IHJldHVybjsKLSAgICAvLyBGSVhNRTogQnkgdXNpbmcgdGhlIHNhbWUgUmVuZGVyU3VyZmFjZSBm
b3IgYm90aCB0aGUgY29udGVudCBhbmQgaXRzIHJlZmxlY3Rpb24sCi0gICAgLy8gaXQncyBjdXJy
ZW50bHkgbm90IHBvc3NpYmxlIHRvIGFwcGx5IGEgc2VwYXJhdGUgbWFzayB0byB0aGUgcmVmbGVj
dGlvbiBsYXllcgotICAgIC8vIG9yIGNvcnJlY3RseSBoYW5kbGUgb3BhY2l0eSBpbiByZWZsZWN0
aW9ucyAob3BhY2l0eSBtdXN0IGJlIGFwcGxpZWQgYWZ0ZXIgZHJhd2luZwotICAgIC8vIGJvdGgg
dGhlIGxheWVyIGFuZCBpdHMgcmVmbGVjdGlvbikuIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1
Y2UgeWV0IGFub3RoZXIgUmVuZGVyU3VyZmFjZQotICAgIC8vIHRvIGRyYXcgdGhlIGxheWVyIGFu
ZCBpdHMgcmVmbGVjdGlvbiBpbi4gRm9yIG5vdyB3ZSBvbmx5IGFwcGx5IGEgc2VwYXJhdGUgcmVm
bGVjdGlvbgotICAgIC8vIG1hc2sgaWYgdGhlIGNvbnRlbnRzIGRvbid0IGhhdmUgYSBtYXNrIG9m
IHRoZWlyIG93bi4KLSAgICBDQ0xheWVySW1wbCogcmVwbGljYU1hc2tMYXllciA9IG1fbWFza0xh
eWVyOwotICAgIGlmICghbV9tYXNrTGF5ZXIgJiYgbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVy
KCkpCi0gICAgICAgIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+bWFza0xheWVyKCk7Ci0KLSAgICBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYg
bV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgbGF5
ZXJSZW5kZXJlcigpLT5zZXRTY2lzc29yVG9SZWN0KG1fc2Npc3NvclJlY3QpOwotICAgIGVsc2UK
LSAgICAgICAgR0xDKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyKCkt
PmNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0K
LQotICAgIC8vIFJlZmxlY3Rpb24gZHJhd3MgYmVmb3JlIHRoZSBsYXllci4KLSAgICBpZiAobV9v
d25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAgICAgIGRyYXdTdXJmYWNlKHJlcGxpY2FN
YXNrTGF5ZXIsIG1fcmVwbGljYURyYXdUcmFuc2Zvcm0pOwotCi0gICAgZHJhd1N1cmZhY2UobV9t
YXNrTGF5ZXIsIG1fZHJhd1RyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgUmVuZGVyU3VyZmFjZUNocm9t
aXVtOjpjbGVhckxheWVyTGlzdCgpCi17Ci0gICAgbV9sYXllckxpc3QuY2xlYXIoKTsKLX0KLQog
U3RyaW5nIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJTdXJmYWNlKGlkPSVkLG93bmVyPSVzKSIsIG1fb3duaW5n
TGF5ZXItPmlkKCksIG1fb3duaW5nTGF5ZXItPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1
cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggMWQyY2I2MjNmOWIxYzIyMzY1N2VkMGMw
MGE0ZGY1NDJjODVjNGFmZC4uYzM0ZWRhZTFhZjdmZWQ4ZDVjODI5YTU0NzJiMTM3ODIzM2VlNDYy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTM5LDE0ICszOSwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgTGF5
ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyVGV4
dHVyZTsKIAogY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOwogcHVibGljOgotICAgIGV4cGxpY2l0IFJl
bmRlclN1cmZhY2VDaHJvbWl1bShDQ0xheWVySW1wbCopOworICAgIGV4cGxpY2l0IFJlbmRlclN1
cmZhY2VDaHJvbWl1bShMYXllckNocm9taXVtKik7CiAgICAgflJlbmRlclN1cmZhY2VDaHJvbWl1
bSgpOwogCiAgICAgYm9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKCk7CkBAIC02MCw5ICs2MCw2
IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIFJl
bmRlclN1cmZhY2UgaW5jbHVkaW5nIGFueSByZWZsZWN0aW9uLgogICAgIEZsb2F0UmVjdCBkcmF3
YWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7CiAKLSAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBs
PiA+JiBsYXllckxpc3QoKSB7IHJldHVybiBtX2xheWVyTGlzdDsgfQotICAgIHZvaWQgY2xlYXJM
YXllckxpc3QoKTsKLQogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50UmVjdDsgfQogICAgIHZvaWQgc2V0Q29udGVudFJlY3QoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpIHsgbV9jb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OyB9CiAKQEAg
LTcyLDkgKzY5LDYgQEAgcHVibGljOgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBk
cmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAgICAgdm9p
ZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNm
b3JtKSB7IG1fZHJhd1RyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm07IH0KIAotICAgIENDTGF5ZXJJ
bXBsKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllcjsgfQotICAgIHZvaWQg
c2V0TWFza0xheWVyKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNr
TGF5ZXI7IH0KLQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX29yaWdpblRyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0T3Jp
Z2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0p
IHsgbV9vcmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KIApAQCAtODcsMjggKzgx
LDI2IEBAIHB1YmxpYzoKICAgICBib29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tp
cHNEcmF3OyB9CiAgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lw
c0RyYXcgPSBza2lwc0RyYXc7IH0KIAotICAgIExheWVyVGV4dHVyZSogY29udGVudHNUZXh0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KKyAgICB2b2lkIGNs
ZWFyTGF5ZXJMaXN0KCkgeyBtX2xheWVyTGlzdC5jbGVhcigpOyB9CisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QoKSB7IHJldHVybiBtX2xheWVyTGlzdDsgfQog
Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50
U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8
VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYU1hc2s+IE1hc2tQ
cm9ncmFtOworICAgIHZvaWQgc2V0TWFza0xheWVyKExheWVyQ2hyb21pdW0qIG1hc2tMYXllcikg
eyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQogCiBwcml2YXRlOgogICAgIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpOwotICAgIHZvaWQgZHJhd1N1cmZhY2UoQ0NMYXll
ckltcGwqIG1hc2tMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zv
cm0pOwogCi0gICAgQ0NMYXllckltcGwqIG1fb3duaW5nTGF5ZXI7Ci0gICAgQ0NMYXllckltcGwq
IG1fbWFza0xheWVyOworICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5nTGF5ZXI7CisgICAgTGF5
ZXJDaHJvbWl1bSogbV9tYXNrTGF5ZXI7CiAKICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAg
ICAgYm9vbCBtX3NraXBzRHJhdzsKIAotICAgIE93blB0cjxMYXllclRleHR1cmU+IG1fY29udGVu
dHNUZXh0dXJlOwogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmVwbGlj
YURyYXdUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9vcmlnaW5UcmFuc2Zv
cm07CiAgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwotICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXll
ckltcGw+ID4gbV9sYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IG1fbGF5ZXJMaXN0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggM2U5ZTZkZDA0OGYyMjE1ZDI4OTQ5MTc1OTM0MWQ3ZTM3NmJjMGQyNy4uMmE4YzU1MWE4MGEy
ZDZmMWYyMDI2N2Q4Mjk0MjBlODVmN2NjZGUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC02MCw3ICs2MCw3IEBAIFRpbGVkTGF5ZXJDaHJvbWl1bTo6flRpbGVkTGF5ZXJD
aHJvbWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRpbGVkTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVh
dGUodGhpcywgaWQoKSk7CisgICAgcmV0dXJuIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZShpZCgp
KTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQpAQCAt
MTUwLDcgKzE1MCw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRJc01hc2soYm9vbCBp
c01hc2spCiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsaW5n
VHJhbnNmb3JtKCkgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0g
PSBjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgaWYgKGNvbnRlbnRCb3VuZHMo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuY3BwCmluZGV4IDZhZDRiMTEyZDJhNGNmN2VmMTE2Y2FmMTNkOTE0ZTM3YmJhYzcyMDgu
LmQwZmQwY2U1MjNkNjM4ODRiZTkzMmUxYmQ0MTY1ODJmMjU3NjJlNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuY3BwCkBAIC03NCw4ICs3NCw2IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVt
CiAgICAgZWxzZQogICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVyKDApOwogCi0g
ICAgbGF5ZXItPnNldENDTGF5ZXJJbXBsKGNjTGF5ZXJJbXBsLmdldCgpKTsKLQogICAgIGxheWVy
LT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsKICAgICByZXR1cm4gY2NMYXll
ckltcGwucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
MmZjZDIxOTM4MmE3MGM1ZDc3MmI2YTZkMTMyNjUxMjU4MWUwMTg2ZC4uMjJiZDMwYzc4ZDQ2ODcy
YThiMjdhMGJlOGQxZThhMzY0ZGY5YjI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC02OSw3ICs2OSw3IEBAIFZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJv
bWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUo
dGhpcywgbV9sYXllcklkKTsKKyAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKG1f
bGF5ZXJJZCk7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkZWxldGVUZXh0dXJlc0lu
VXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAppbmRleCA3MTI1Yjk2ODA3
YjQwZmMzNGViMWM4NGU3YTlkOTgzMTc1YTE4M2ViLi44NjVmZDcyNGU1ZDg2YjI1YTM0N2QwNGM0
MTgzOGM0YzVmYzA5OTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCkBA
IC0yOSwxNSArMjksMTQgQEAKIAogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAK
LSNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ0NhbnZhc0xh
eWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkK
LSAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKK0NDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZh
c0xheWVySW1wbChpbnQgaWQpCisgICAgOiBDQ0xheWVySW1wbChpZCkKICAgICAsIG1fdGV4dHVy
ZUlkKDApCiAgICAgLCBtX2hhc0FscGhhKHRydWUpCiAgICAgLCBtX3ByZW11bHRpcGxpZWRBbHBo
YSh0cnVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggYzE3YWY1ZmM3ZWJj
ZTI1MGEzNmMzNmI4Y2U1ODExOTBlZTkxM2E5Ny4uZDg1ZWJhOGRlODgzYWJlN2UwZTA5ZTU3ZTQw
MDFmZjBmNmM0ZmE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC0zNCw5
ICszNCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NDYW52YXNMYXllckltcGwg
OiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEND
Q2FudmFzTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NhbnZhc0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwob3duZXIs
IGlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwoaWQp
KTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NDYW52YXNMYXllckltcGwoKTsKIApAQCAtNTAsNyAr
NTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1f
aGFzQWxwaGEgPSBoYXNBbHBoYTsgfQogICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJv
b2wgcHJlbXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlw
bGllZEFscGhhOyB9CiBwcml2YXRlOgotICAgIENDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qLCBpbnQpOworICAgIGV4cGxpY2l0IENDQ2FudmFzTGF5ZXJJbXBsKGludCk7CiAKICAgICB1
bnNpZ25lZCBtX3RleHR1cmVJZDsKICAgICBib29sIG1faGFzQWxwaGE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKaW5kZXggMjRlOWI1ZjllZjBkMjA3OGI0YjFiN2UzZDhmNjg0MTgwMjY5NTJiMC4u
M2NlYWQ0YzEyYzM1NTEyZjg1ODkzNGU1OWNmYTEwMTAyNDE3MTdiNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgotI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgewpAQCAtNjAsOSArNTksOCBAQCB2
b2lkIHRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG0pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NMYXllckltcGw6OkND
TGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCi0gICAgOiBtX293bmVyKG93
bmVyKQotICAgICwgbV9wYXJlbnQoMCkKK0NDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQp
CisgICAgOiBtX3BhcmVudCgwKQogICAgICwgbV9sYXllcklkKGlkKQogICAgICwgbV9hbmNob3JQ
b2ludCgwLjUsIDAuNSkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCkBAIC04Myw4ICs4MSw2IEBA
IENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQog
CiBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKIHsKLSAgICBpZiAobV9vd25lcikKLSAgICAg
ICAgbV9vd25lci0+c2V0Q0NMYXllckltcGwoMCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OmFk
ZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkKQpAQCAtMTIyLDE2ICsxMTgsMTYg
QEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21p
dW0qIHJlbmRlcmVyKQogICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRlcmVyOwogfQogCi1SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKK3Zv
aWQgQ0NMYXllckltcGw6OmNyZWF0ZVJlbmRlclN1cmZhY2UoKQogewotICAgIG1fcmVuZGVyU3Vy
ZmFjZSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW0odGhpcykpOwotICAgIHJl
dHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7CisgICAgQVNTRVJUKCFtX3JlbmRlclN1cmZhY2Up
OworICAgIG1fcmVuZGVyU3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2UodGhp
cykpOwogfQogCi1ib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCgpCiti
b29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKIHsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
Y2hpbGRyZW5baV0tPmRyYXdzQ29udGVudCgpIHx8IG1fY2hpbGRyZW5baV0tPmRlc2NlbmRhbnRz
RHJhd3NDb250ZW50KCkpCisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kcmF3c0NvbnRlbnQo
KSB8fCBtX2NoaWxkcmVuW2ldLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQyLDE5ICsxMzgs
OCBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotdm9pZCBDQ0xheWVySW1wbDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCi17Ci0g
ICAgbV9vd25lci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwotfQotCi12b2lkIENDTGF5
ZXJJbXBsOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQotewotICAgIG1fb3duZXItPnVucmVz
ZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwotfQotCiB2b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVu
dHNUZXh0dXJlKCkKIHsKLSAgICBtX293bmVyLT5iaW5kQ29udGVudHNUZXh0dXJlKCk7CiB9CiAK
IHZvaWQgQ0NMYXllckltcGw6OmNsZWFudXBSZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
aW5kZXggYmQyNzZmZTgwOTA3NjcxNmE2OGQwOTY3N2NkYjFiNWE2NGY5MGZlMy4uZmZkN2FhNGZi
MjY2ZTBmODY5NDM0MTU0ZTcxNjBmZDUxZjM5Y2M0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlRleHRTdHJl
YW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0ND
UmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00MCwxMyArNDEs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3Mg
TGF5ZXJSZW5kZXJlckNocm9taXVtOwotY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOwogCiBj
bGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9t
aXVtKiBvd25lciwgaW50IGlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBj
cmVhdGUoaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVy
SW1wbChvd25lciwgaWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1w
bChpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwogCkBAIC03MCw3ICs3
MCw2IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogICAgIHZvaWQgdW5yZXNl
cnZlQ29udGVudHNUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1
cmUoKTsKIApAQCAtNzksNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkcmF3c0NvbnRlbnQo
KSBjb25zdCB7IHJldHVybiBtX2RyYXdzQ29udGVudDsgfQogCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIGFueSBvZiB0aGUgbGF5ZXIncyBkZXNjZW5kYW50cyBoYXMgY29udGVudCB0byBkcmF3Lgot
ICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKTsKKyAgICBib29sIGRlc2NlbmRhbnRE
cmF3c0NvbnRlbnQoKTsKIAogICAgIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogCkBAIC0xMjQs
OSArMTIzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KIAotICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogY3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotCi0gICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNl
LmdldCgpOyB9CisgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9CisgICAgdm9pZCBjcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFjZS5j
bGVhcigpOyB9CiAKICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJh
d09wYWNpdHk7IH0KQEAgLTEzNCw5ICsxMzIsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBJbnRS
ZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KICAgICB2
b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9
IHJlY3Q7IH0KLQotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQotICAgIHZvaWQgc2V0
VGFyZ2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90
YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQorICAgIENDUmVuZGVyU3VyZmFjZSogdGFy
Z2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsg
fQorICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHN1cmZh
Y2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQogCiAgICAgY29uc3QgSW50
U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICB2b2lkIHNldEJv
dW5kcyhjb25zdCBJbnRTaXplJiBib3VuZHMpIHsgbV9ib3VuZHMgPSBib3VuZHM7IH0KQEAgLTE2
MCwxNSArMTU3LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3Bl
cnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCi0gICAgLy8gSEFDSyBUT0RP
IGZpeCB0aGlzCi0gICAgTGF5ZXJDaHJvbWl1bSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293
bmVyOyB9Ci0gICAgdm9pZCBjbGVhck93bmVyKCkgeyBtX293bmVyID0gMDsgfQotCiBwcm90ZWN0
ZWQ6Ci0gICAgLy8gRm9yIG5vdywgQ0NMYXllckltcGxzIGhhdmUgYSBiYWNrIHBvaW50ZXIgdG8g
dGhlaXIgTGF5ZXJDaHJvbWl1bS4KLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgYWZ0ZXIgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMzIGlzIGZpeGVkLgotICAg
IExheWVyQ2hyb21pdW0qIG1fb3duZXI7Ci0gICAgQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSos
IGludCk7CisgICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIAogICAgIHN0YXRpYyB2b2lk
IHdyaXRlSW5kZW50KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KTsKIApAQCAtMjE2LDcgKzIwNiw3
IEBAIHByaXZhdGU6CiAgICAgLy8gZWl0aGVyIHRvIHRoaXMgbGF5ZXIgKGlmIG1fdGFyZ2V0UmVu
ZGVyU3VyZmFjZSA9PSBtX3JlbmRlclN1cmZhY2UpIG9yCiAgICAgLy8gdG8gYW4gYW5jZXN0b3Ig
b2YgdGhpcyBsYXllci4gVGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZSBkZXRlcm1pbmVzIHRoZQog
ICAgIC8vIGNvb3JkaW5hdGUgc3lzdGVtIHRoZSBsYXllcidzIHRyYW5zZm9ybXMgYXJlIHJlbGF0
aXZlIHRvLgotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNl
OworICAgIENDUmVuZGVyU3VyZmFjZSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogCiAgICAgLy8g
VGhlIGdsb2JhbCBkZXB0aCB2YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4gVGhpcyB2
YWx1ZSBpcyB1c2VkCiAgICAgLy8gdG8gc29ydCBsYXllcnMgZnJvbSBiYWNrIHRvIGZyb250LgpA
QCAtMjM2LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBSZW5kZXIgc3VyZmFjZSBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBsYXllci4gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMKICAg
ICAvLyB3aWxsIHJlbmRlciB0byB0aGlzIHN1cmZhY2UuCi0gICAgT3duUHRyPFJlbmRlclN1cmZh
Y2VDaHJvbWl1bT4gbV9yZW5kZXJTdXJmYWNlOworICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U+
IG1fcmVuZGVyU3VyZmFjZTsKIAogICAgIC8vIEhpZXJhcmNoaWNhbCBib3VuZGluZyByZWN0IGNv
bnRhaW5pbmcgdGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMuCiAgICAgSW50UmVjdCBtX2Ry
YXdhYmxlQ29udGVudFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCmluZGV4IGIyYzU1
NzQyZjc5ZjhkM2I1NzQxYmVjN2U1ODhlN2Q4YjFjYTI3ZDMuLmQxMDFjYzA3YTE0YzI5MzE4YmVl
MDMwODU5MWQzNTQyYmJhOTg5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCkBAIC0y
Niw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAKLSNpbmNsdWRl
ICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgPGxpbWl0cy5o
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgQ0NMYXll
clNvcnRlcjo6Y3JlYXRlR3JhcGhOb2RlcyhMYXllckxpc3Q6Oml0ZXJhdG9yIGZpcnN0LCBMYXll
ckxpc3Q6Oml0ZXJhCiAgICAgZm9yIChMYXllckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmly
c3Q7IGl0IDwgbGFzdDsgaXQrKykgewogICAgICAgICBtX25vZGVzLmFwcGVuZChHcmFwaE5vZGUo
aXQtPmdldCgpKSk7CiAgICAgICAgIEdyYXBoTm9kZSYgbm9kZSA9IG1fbm9kZXMuYXQobV9ub2Rl
cy5zaXplKCkgLSAxKTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJm
YWNlID0gbm9kZS5sYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBDQ1JlbmRlclN1cmZh
Y2UqIHJlbmRlclN1cmZhY2UgPSBub2RlLmxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgICAg
IGlmICghbm9kZS5sYXllci0+ZHJhd3NDb250ZW50KCkgJiYgIXJlbmRlclN1cmZhY2UpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCmlu
ZGV4IGRlZTFlZjBiN2U2YTJkZGFkMzc1Zjg5MWY5ZGUwNTY1OWQyODZjMjEuLjhhMjVjNWI1NDFl
MmUzNDUwYjkzZjhkMWZmY2Q2MjJjYjI0NzZiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxh
eWVySW1wbC5jcHAKQEAgLTMxLDEzICszMSwxMiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJQ
bHVnaW5MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJ
bXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCi0gICAgOiBDQ0xheWVySW1wbChvd25l
ciwgaWQpCitDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwoaW50IGlkKQorICAg
IDogQ0NMYXllckltcGwoaWQpCiAgICAgLCBtX3RleHR1cmVJZCgwKQogewogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmgKaW5kZXggNmU0ODJkMTQ2NGIwZjhlNzg5MjA2MTc1ZDIxMjAz
YTg5ZTA4ZDI3My4uOWI0YzUzNjcyM2QyYWIxNmRkZDQyOTA2M2RjN2ZmNWI0ZjFkMTI3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCkBAIC0zNCw5ICszNCw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NQbHVnaW5MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllcklt
cGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDUGx1Z2luTGF5ZXJJbXBsPiBj
cmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDQ1BsdWdpbkxheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ0NQbHVnaW5MYXllckltcGwob3duZXIsIGlkKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ0NQbHVnaW5MYXllckltcGwoaWQpKTsKICAgICB9CiAgICAgdmly
dHVhbCB+Q0NQbHVnaW5MYXllckltcGwoKTsKIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsgfQog
CiBwcml2YXRlOgotICAgIENDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOwor
ICAgIGV4cGxpY2l0IENDUGx1Z2luTGF5ZXJJbXBsKGludCk7CiAKICAgICB1bnNpZ25lZCBtX3Rl
eHR1cmVJZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
MDYwYmNjMjg4Y2RiMDlmNjNmZTQ1YTRlNDdiNDI2ZTQ0Yjc0MzI0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDUmVu
ZGVyU3VyZmFjZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRl
ICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisj
aW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKEND
TGF5ZXJJbXBsKiBvd25pbmdMYXllcikKKyAgICA6IG1fb3duaW5nTGF5ZXIob3duaW5nTGF5ZXIp
CisgICAgLCBtX21hc2tMYXllcigwKQorICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCisgICAgLCBt
X2RyYXdPcGFjaXR5KDEpCit7Cit9CisKK0NDUmVuZGVyU3VyZmFjZTo6fkNDUmVuZGVyU3VyZmFj
ZSgpCit7CisgICAgY2xlYW51cFJlc291cmNlcygpOworfQorCit2b2lkIENDUmVuZGVyU3VyZmFj
ZTo6Y2xlYW51cFJlc291cmNlcygpCit7CisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisKKyAgICBtX2Nv
bnRlbnRzVGV4dHVyZS5jbGVhcigpOworfQorCitMYXllclJlbmRlcmVyQ2hyb21pdW0qIENDUmVu
ZGVyU3VyZmFjZTo6bGF5ZXJSZW5kZXJlcigpCit7CisgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIp
OworICAgIHJldHVybiBtX293bmluZ0xheWVyLT5sYXllclJlbmRlcmVyKCk7Cit9CisKK0Zsb2F0
UmVjdCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAoreworICAg
IEZsb2F0UmVjdCBsb2NhbENvbnRlbnRSZWN0KC0wLjUgKiBtX2NvbnRlbnRSZWN0LndpZHRoKCks
IC0wLjUgKiBtX2NvbnRlbnRSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250ZW50UmVjdC5oZWlnaHQoKSk7Cisg
ICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBtX2RyYXdUcmFuc2Zvcm0ubWFwUmVj
dChsb2NhbENvbnRlbnRSZWN0KTsKKyAgICBpZiAobV9vd25pbmdMYXllci0+cmVwbGljYUxheWVy
KCkpCisgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QudW5pdGUobV9yZXBsaWNhRHJhd1RyYW5z
Zm9ybS5tYXBSZWN0KGxvY2FsQ29udGVudFJlY3QpKTsKKworICAgIHJldHVybiBkcmF3YWJsZUNv
bnRlbnRSZWN0OworfQorCitib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4
dHVyZSgpCit7CisgICAgSW50U2l6ZSByZXF1aXJlZFNpemUobV9jb250ZW50UmVjdC5zaXplKCkp
OworICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlciA9IGxheWVyUmVuZGVyZXIoKS0+
cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCk7CisKKyAgICBpZiAoIW1fY29udGVudHNUZXh0
dXJlKQorICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGxh
eWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCB0ZXh0dXJlTWFuYWdlcik7CisKKyAgICBpZiAobV9j
b250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkU2l6ZSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpKSB7CisgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQ29udGVudHNUZXh0
dXJlKCkKK3sKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZW50c1RleHR1cmUtPnVucmVzZXJ2ZSgpOworfQorCisK
K3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3U3VyZmFjZShDQ0xheWVySW1wbCogbWFza0xheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkKK3sKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisK
KyAgICBpbnQgc2hhZGVyTWF0cml4TG9jYXRpb24gPSAtMTsKKyAgICBpbnQgc2hhZGVyQWxwaGFM
b2NhdGlvbiA9IC0xOworICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbSogcHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXIoKS0+cmVuZGVyU3VyZmFjZVByb2dyYW0oKTsKKyAgICBjb25zdCBD
Q1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9ncmFtKiBtYXNrUHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIo
KS0+cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJv
Z3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisgICAgYm9vbCB1c2VNYXNrID0gZmFsc2U7CisgICAgaWYg
KG1hc2tMYXllciAmJiBtYXNrTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIGlmICgh
bWFza0xheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQzRC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0
M0QtPnVzZVByb2dyYW0obWFza1Byb2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICAgICAgR0xD
KGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCkpOworICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3Jt
MWkobWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsK
KyAgICAgICAgICAgIG1fY29udGVudHNUZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgICAgICAg
ICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMSkpOworICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51
bmlmb3JtMWkobWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkubWFza1NhbXBsZXJMb2NhdGlv
bigpLCAxKSk7CisgICAgICAgICAgICBtYXNrTGF5ZXItPmJpbmRDb250ZW50c1RleHR1cmUoKTsK
KyAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICAgICAgICAgIHNoYWRlck1hdHJpeExvY2F0
aW9uID0gbWFza1Byb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAg
ICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0gbWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVy
KCkuYWxwaGFMb2NhdGlvbigpOworICAgICAgICAgICAgdXNlTWFzayA9IHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoIXVzZU1hc2spIHsKKyAgICAgICAgR0xDKGNvbnRleHQzRCwg
Y29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICBtX2Nv
bnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKKyAgICAgICAgR0xDKGNvbnRleHQzRCwgY29u
dGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRp
b24oKSwgMCkpOworICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRl
eFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24g
PSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKKyAgICB9CisKKyAg
ICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4
dCgpLCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbnRlbnRSZWN0Lndp
ZHRoKCksIG1fY29udGVudFJlY3QuaGVpZ2h0KCksIG1fZHJhd09wYWNpdHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24sIHNoYWRl
ckFscGhhTG9jYXRpb24pOworfQorCit2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhdyhjb25zdCBJ
bnRSZWN0JikKK3sKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQor
ICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IEJ5IHVzaW5nIHRoZSBzYW1lIFJlbmRlclN1
cmZhY2UgZm9yIGJvdGggdGhlIGNvbnRlbnQgYW5kIGl0cyByZWZsZWN0aW9uLAorICAgIC8vIGl0
J3MgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0byBhcHBseSBhIHNlcGFyYXRlIG1hc2sgdG8gdGhl
IHJlZmxlY3Rpb24gbGF5ZXIKKyAgICAvLyBvciBjb3JyZWN0bHkgaGFuZGxlIG9wYWNpdHkgaW4g
cmVmbGVjdGlvbnMgKG9wYWNpdHkgbXVzdCBiZSBhcHBsaWVkIGFmdGVyIGRyYXdpbmcKKyAgICAv
LyBib3RoIHRoZSBsYXllciBhbmQgaXRzIHJlZmxlY3Rpb24pLiBUaGUgc29sdXRpb24gaXMgdG8g
aW50cm9kdWNlIHlldCBhbm90aGVyIFJlbmRlclN1cmZhY2UKKyAgICAvLyB0byBkcmF3IHRoZSBs
YXllciBhbmQgaXRzIHJlZmxlY3Rpb24gaW4uIEZvciBub3cgd2Ugb25seSBhcHBseSBhIHNlcGFy
YXRlIHJlZmxlY3Rpb24KKyAgICAvLyBtYXNrIGlmIHRoZSBjb250ZW50cyBkb24ndCBoYXZlIGEg
bWFzayBvZiB0aGVpciBvd24uCisgICAgQ0NMYXllckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSBt
X21hc2tMYXllcjsKKyAgICBpZiAoIW1fbWFza0xheWVyICYmIG1fb3duaW5nTGF5ZXItPnJlcGxp
Y2FMYXllcigpKQorICAgICAgICByZXBsaWNhTWFza0xheWVyID0gbV9vd25pbmdMYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpOworCisgICAgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVu
dCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJTY2lzc29yKCkpCisgICAg
ICAgIGxheWVyUmVuZGVyZXIoKS0+c2V0U2Npc3NvclRvUmVjdChtX3NjaXNzb3JSZWN0KTsKKyAg
ICBlbHNlCisgICAgICAgIEdMQyhsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKSwgbGF5ZXJSZW5k
ZXJlcigpLT5jb250ZXh0KCktPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCkpOworCisgICAgLy8gUmVmbGVjdGlvbiBkcmF3cyBiZWZvcmUgdGhlIGxheWVyLgorICAgIGlm
IChtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgZHJhd1N1cmZhY2UocmVw
bGljYU1hc2tMYXllciwgbV9yZXBsaWNhRHJhd1RyYW5zZm9ybSk7CisKKyAgICBkcmF3U3VyZmFj
ZShtX21hc2tMYXllciwgbV9kcmF3VHJhbnNmb3JtKTsKK30KKworU3RyaW5nIENDUmVuZGVyU3Vy
ZmFjZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJT
dXJmYWNlKGlkPSVpLG93bmVyPSVzKSIsIG1fb3duaW5nTGF5ZXItPmlkKCksIG1fb3duaW5nTGF5
ZXItPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQo
VGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0g
aW5kZW50OyArK2kpCisgICAgICAgIHRzIDw8ICIgICI7Cit9CisKK3ZvaWQgQ0NSZW5kZXJTdXJm
YWNlOjpkdW1wU3VyZmFjZShUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCBuYW1lKCkgPDwgIlxuIjsKKwor
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMSk7CisgICAgdHMgPDwgImNvbnRlbnRSZWN0OiAo
IiA8PCBtX2NvbnRlbnRSZWN0LngoKSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3QueSgpIDw8ICIs
ICIgPDwgbV9jb250ZW50UmVjdC53aWR0aCgpIDw8ICIsICIgPDwgbV9jb250ZW50UmVjdC5oZWln
aHQoKSA8PCAiXG4iOworfQorCitpbnQgQ0NSZW5kZXJTdXJmYWNlOjpvd25pbmdMYXllcklkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25pbmdMYXllciA/IG1fb3duaW5nTGF5ZXItPmlkKCkg
OiAwOworfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWIxODkxODUxZmYwODJmOGZlYjQy
NTkxZGFlYjI0NzI4ODg5ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTAsMCArMSwx
MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ0NSZW5kZXJTdXJmYWNlX2gKKyNkZWZpbmUgQ0NSZW5k
ZXJTdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQcm9ncmFt
QmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5
ZXJJbXBsOworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworY2xhc3MgTGF5ZXJUZXh0dXJl
OworCitjbGFzcyBDQ1JlbmRlclN1cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEND
UmVuZGVyU3VyZmFjZSk7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NSZW5kZXJTdXJmYWNlKEND
TGF5ZXJJbXBsKik7CisgICAgfkNDUmVuZGVyU3VyZmFjZSgpOworCisgICAgYm9vbCBwcmVwYXJl
Q29udGVudHNUZXh0dXJlKCk7CisgICAgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Cisg
ICAgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgdm9pZCBkcmF3KGNvbnN0IEludFJlY3Qm
IHRhcmdldFN1cmZhY2VSZWN0KTsKKworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgdm9p
ZCBkdW1wU3VyZmFjZShUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICBGbG9h
dFBvaW50IGNvbnRlbnRSZWN0Q2VudGVyKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KG1fY29u
dGVudFJlY3QpLmNlbnRlcigpOyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgZW5j
bG9zZXMgdGhlIFJlbmRlclN1cmZhY2UgaW5jbHVkaW5nIGFueSByZWZsZWN0aW9uLgorICAgIEZs
b2F0UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7CisKKyAgICBmbG9hdCBkcmF3T3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KKyAgICB2b2lkIHNldERyYXdP
cGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KKworICAg
IHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSkgeyBtX2RyYXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CisgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdUcmFuc2Zvcm07IH0KKworICAgIHZvaWQgc2V0UmVwbGljYURyYXdUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FEcmF3VHJhbnNmb3JtKSB7IG1fcmVwbGljYURy
YXdUcmFuc2Zvcm0gPSByZXBsaWNhRHJhd1RyYW5zZm9ybTsgfQorICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiByZXBsaWNhRHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
bGljYURyYXdUcmFuc2Zvcm07IH0KKworICAgIHZvaWQgc2V0T3JpZ2luVHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0pIHsgbV9vcmlnaW5UcmFuc2Zv
cm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
b3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5UcmFuc2Zvcm07IH0KKwor
ICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9z
Y2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisKKyAgICB2b2lkIHNldENvbnRl
bnRSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSB7IG1fY29udGVudFJlY3QgPSBjb250
ZW50UmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZW50UmVjdDsgfQorCisgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0Ry
YXcpIHsgbV9za2lwc0RyYXcgPSBza2lwc0RyYXc7IH0KKyAgICBib29sIHNraXBzRHJhdygpIGNv
bnN0IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9CisKKyAgICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCkg
eyBtX2xheWVyTGlzdC5jbGVhcigpOyB9CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4g
PiYgbGF5ZXJMaXN0KCkgeyByZXR1cm4gbV9sYXllckxpc3Q7IH0KKworICAgIHZvaWQgc2V0TWFz
a0xheWVyKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7
IH0KKworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFn
bWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJvZ3JhbTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5k
aW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrPiBN
YXNrUHJvZ3JhbTsKKworICAgIExheWVyVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KKworICAgIGludCBvd25pbmdMYXll
cklkKCkgY29uc3Q7Citwcml2YXRlOgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcigpOworICAgIHZvaWQgZHJhd1N1cmZhY2UoQ0NMYXllckltcGwqIG1hc2tMYXllciwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pOworCisgICAgQ0NMYXll
ckltcGwqIG1fb3duaW5nTGF5ZXI7CisgICAgQ0NMYXllckltcGwqIG1fbWFza0xheWVyOworCisg
ICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0OworICAgIGJvb2wgbV9za2lwc0RyYXc7CisKKyAgICBP
d25QdHI8TGF5ZXJUZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsKKyAgICBmbG9hdCBtX2RyYXdP
cGFjaXR5OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fb3JpZ2luVHJhbnNmb3JtOworICAgIEludFJlY3QgbV9zY2lzc29yUmVj
dDsKKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IG1fbGF5ZXJMaXN0OworfTsKKwor
fQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IDgwM2JhMDZkNTYxOTdkMjhhYWU1NWE3
OGM1YmNkMTFlMTI0NzdiNWUuLmZjMTAzZWFkY2FiMmU5ZmEzYTAwNjc0ZWZjYmRkM2IwZGRkMTU4
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0yOSwxNiArMjksMTQg
QEAKIAogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAotI2luY2x1ZGUgIkNvbnRl
bnRMYXllckNocm9taXVtLmgiCi0KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllclRleHR1cmU7CiAKLUNDVGlsZWRMYXll
ckltcGw6OkNDVGlsZWRMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKLSAg
ICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKK0NDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXll
ckltcGwoaW50IGlkKQorICAgIDogQ0NMYXllckltcGwoaWQpCiAgICAgLCBtX3RpbGVyKDApCiB7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggYjBkMTAzMWZiYjdiOGY4MGY0
NzhhYzgxM2M4ZjI3MjlkYzg5YTkxNS4uNzM0NmJiN2U3ZDZmYTZiYzhjYTFlYmNmMjljYzU4NDlm
MWVmNjNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAtMzMsOSArMzMsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDVGlsZWRMYXllckltcGwgOiBwdWJsaWMg
Q0NMYXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVGlsZWRMYXll
ckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENDVGlsZWRMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENDVGlsZWRMYXllckltcGwob3duZXIsIGlkKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NUaWxlZExheWVySW1wbChpZCkpOwogICAgIH0KICAg
ICB2aXJ0dWFsIH5DQ1RpbGVkTGF5ZXJJbXBsKCk7CiAKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VGlsZXIoTGF5ZXJUaWxlckNocm9taXVtKiB0aWxlcikgeyBtX3RpbGVy
ID0gdGlsZXI7IH0KIAogcHJpdmF0ZToKLSAgICBDQ1RpbGVkTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qLCBpbnQgaWQpOworICAgIGV4cGxpY2l0IENDVGlsZWRMYXllckltcGwoaW50IGlkKTsKIAog
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdGlsaW5nVHJhbnNmb3JtOwogICAgIExheWVyVGls
ZXJDaHJvbWl1bSogbV90aWxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5k
ZXggZjQ0YWJiMDYxMWRlYzdjZjgxNjAxNzg4YzljNDU1YmI1ZTk3OGE5YS4uMGM5MzkzMjE4YmYz
NDQ0YmNiYWRiMWRjODI4NzM0Mjc3NDIwNGMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5jcHAKQEAgLTU5LDggKzU5LDggQEAgY29uc3QgZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6
eXV2QWRqdXN0WzNdID0gewogICAgIC0wLjVmLAogfTsKIAotQ0NWaWRlb0xheWVySW1wbDo6Q0NW
aWRlb0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQotICAgIDogQ0NMYXll
ckltcGwob3duZXIsIGlkKQorQ0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChpbnQg
aWQpCisgICAgOiBDQ0xheWVySW1wbChpZCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oCmluZGV4IGZjMDdmNzcyZTYxOGM4OWM4ZTI0NGNhZmM1NThjMzdlOTljZWJiNmYuLmVl
OWQ0MjE2OTNhOWQxNzc3OTg0ZThiYjA2NzY2YTM2MDRlNTBjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmgKQEAgLTM4LDkgKzM4LDkgQEAgY2xhc3MgVmlkZW9GcmFtZVByb3ZpZGVy
OwogCiBjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJD
aHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5
ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDQ1ZpZGVvTGF5ZXJJbXBsKG93bmVyLCBpZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENDVmlkZW9MYXllckltcGwoaWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NWaWRlb0xh
eWVySW1wbCgpOwogCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHR1
cmUoc2l6ZV90LCBWaWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUpOwogCiBwcml2YXRlOgotICAg
IENDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CisgICAgZXhwbGljaXQgQ0NW
aWRlb0xheWVySW1wbChpbnQpOwogCiAgICAgdm9pZCBkcmF3WVVWKGNvbnN0IFlVVlByb2dyYW0q
KSBjb25zdDsKICAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IFJHQkFQcm9ncmFtKikgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRl
c3QuY3BwCmluZGV4IDcwMjYyMGEwZjk0MDdkZmEzNTcxZmEzNTc0ODBlMTY0NWM4ZTI3YjEuLjhh
ZGY0NzY5OWQ0ODcwZGQ1NDk3YTgxNTJhM2Q0ZWIwY2NlYjNkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC0z
Niw5ICszNiw5IEBAIG5hbWVzcGFjZSB7CiAKIGNsYXNzIE1vY2tDQ0xheWVySW1wbCA6IHB1Ymxp
YyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TW9ja0NDTGF5
ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBsYXllcklkKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE1vY2tDQ0xheWVySW1wbD4gY3JlYXRlKGludCBsYXllcklkKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2NrQ0NMYXllckltcGwob3duZXIsIGxh
eWVySWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2NrQ0NMYXllckltcGwobGF5
ZXJJZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5Nb2NrQ0NMYXllckltcGwoKQogICAgIHsKQEAg
LTQ5LDggKzQ5LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q0NMYXllckRlc3RydWN0aW9uTGlz
dChWZWN0b3I8aW50PiogbGlzdCkgeyBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QgPSBsaXN0OyB9
CiAKIHByaXZhdGU6Ci0gICAgTW9ja0NDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBp
bnQgbGF5ZXJJZCkKLSAgICAgICAgOiBDQ0xheWVySW1wbChvd25lciwgbGF5ZXJJZCkKKyAgICBN
b2NrQ0NMYXllckltcGwoaW50IGxheWVySWQpCisgICAgICAgIDogQ0NMYXllckltcGwobGF5ZXJJ
ZCkKICAgICAgICAgLCBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QoMCkKICAgICB7CiAgICAgfQpA
QCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXll
ckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBNb2NrQ0NM
YXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOworICAgICAgICByZXR1cm4gTW9ja0ND
TGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogY2NMYXllcikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102592</attachid>
            <date>2011-08-01 16:59:12 -0700</date>
            <delta_ts>2011-08-02 16:20:58 -0700</delta_ts>
            <desc>fix copyright year</desc>
            <filename>bug-58840-20110801165911.patch</filename>
            <type>text/plain</type>
            <size>88902</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIxMzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMWJjOTdkYThmZjNmZjZh
YjA4YWZmOGU3YWRjZTY0ZDcxNTYxMmJmLi4yMjgzYmVkMmJhOTllNjg4NDczZTQ3ZmRmMGQ4YjJj
YTBjNTk4MmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUwIEBACisyMDExLTA4LTAxICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBE
ZWNvdXBsZSBsYXllciB2aXNpYmlsaXR5IGNhbGN1bGF0aW9ucyBmcm9tIHJlbmRlciBzdXJmYWNl
cyAvIGNvbXB1dGVkIGRyYXcgdHJhbnNmb3JtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGRlY291cGxlcyB0aGUgbGF5ZXIgdmlzaWJpbGl0eSBy
ZWxhdGVkIGNhbGN1bGF0aW9ucyBmcm9tIHRoZSBMYXllckNocm9taXVtIGFuZCBDQ0xheWVySW1w
bCB0cmVlcy4gIFRoaXMgaXMKKyAgICAgICAgZG9uZSBieSBtYWtpbmcgTGF5ZXJSZW5kZXJlckNo
cm9taXVtJ3MgImNhbGN1bGF0ZSB0aGUgd29ybGQiIGZ1bmN0aW9uIChyZW5hbWVkCisgICAgICAg
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eSgpKSBhIHRlbXBsYXRlZCwgZnJl
ZSBmdW5jdGlvbiB0aGF0IGNhbiBvcGVyYXRlIG9uIGVpdGhlciBMYXllckNocm9taXVtICsKKyAg
ICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtIHBhaXJzIG9yIG9uIENDTGF5ZXJJbXBsICsgQ0NS
ZW5kZXJTdXJmYWNlIHBhaXJzIGFuZCBpbnZva2luZyBpdCB0d2ljZSwgb25jZSBiZWZvcmUKKyAg
ICAgICAgcGFpbnRpbmcgYW5kIG9uY2UgYmVmb3JlIGRyYXdpbmcuICBCZWZvcmUgcGFpbnRpbmcs
IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGFy
ZQorICAgICAgICBwb3RlbnRpYWxseSB2aXNpYmxlIGFuZCBzaG91bGQgYmUgcGFpbnRlZCwgd2hp
Y2ggZGVwZW5kcyBvbiB0aGUgY2FsY3VsYXRlZCBvcGFjaXR5LCByZW5kZXIgc3VyZmFjZSBib3Vu
ZHMsIGFuZAorICAgICAgICBkcmF3IHRyYW5zZm9ybXMuICBCZWZvcmUgZHJhd2luZywgdGhlc2Ug
Y2FsY3VsYXRpb25zIGFyZSB1c2VkIHRvIGZpZ3VyZSBvdXQgZXZlcnl0aGluZyBuZWVkZWQgdG8g
ZHJhdy4KKworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0gaXMgbm93IHVzZWQganVzdCBm
b3IgdmlzaWJpbGl0eSBjYWxjdWxhdGlvbnMgd2hlbiBwYWludGluZy4gIENDUmVuZGVyU3VyZmFj
ZUNocm9taXVtIGlzCisgICAgICAgIHJlc3BvbnNpYmxlIGZvciBhY3R1YWxseSBkcmF3aW5nIHRo
ZSByZW5kZXIgc3VyZmFjZXMuCisKKyAgICAgICAgVGhpcyBkb2VzIG1lYW4gdGhhdCBpbiB0aGUg
Y3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGUgc2Vjb25kIGNhbGN1bGF0aW9ucyBhcmUgcmVkdW5k
YW50LCBidXQgaW4gdGhlIGZ1dHVyZSB0aGlzCisgICAgICAgIHdvbid0IGJlIHRoZSBjYXNlIHNp
bmNlIHRoZSBwcmUtZHJhdyB0aW1lIGNhbGN1bGF0aW9ucyBtaWdodCBiZSBpbmZsdWVuY2VkIGJ5
IGFuaW1hdGlvbnMgb3IgZ2VzdHVyZXMuICBJJ3ZlCisgICAgICAgIGFkZGVkIHNvbWUgdHJhY2Vz
IHRvIHRyeSB0byBtb25pdG9yIGlmIHRoaXMgbWF0aCBpcyBhIHNpZ25pZmljYW50IGFtb3VudCBv
ZiB0aGUgcGVyLWZyYW1lIGNvbXB1dGF0aW9uLiAgTm90ZQorICAgICAgICB0aGF0IGxheWVyIHNv
cnRpbmcgb25seSBoYXBwZW5zIG9uIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFuZCB0aGUgbGF5ZXIg
c29ydCBhbGdvcml0aG0gaXMgdGhlIG1vc3QgZXhwZW5zaXZlIHBhcnQKKyAgICAgICAgb2YgdGhl
IGNhbGN1bGF0aW9ucyBjdXJyZW50bHkuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIGFsbCBvZiB0
aGUgd2VhayBiYWNrL2ZvcndhcmQgcG9pbnRlcnMgYmV0d2VlbiBMYXllckNocm9taXVtIGFuZCBD
Q0xheWVySW1wbHMsIHRoZSB0cmVlcyBhcmUgbm93CisgICAgICAgIHRydWx5IGRlY291cGxlZC4K
KworICAgICAgICBDb3ZlcmVkIGJ5IGNvbXBvc2l0aW5nLyB0ZXN0cy4KKworICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNM
YXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06
OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06Okxh
eWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hy
b21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlUmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkZXNjZW5kYW50c0RyYXdzQ29u
dGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0VXNlc0xheWVyU2Npc3Nv
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1c2VzTGF5ZXJTY2lzc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNsZWFyUmVuZGVyU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZW5kZXJTdXJmYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmRyYXdPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyQ2hyb21pdW06OnNldERyYXdPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnRhcmdl
dFJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpkcmF3
VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldERyYXdUcmFu
c2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHJhd2FibGVDb250ZW50
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXREcmF3YWJsZUNvbnRl
bnRSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldENvbXBvc2l0ZU9mZnNjcmVlbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9mZnNjcmVlbkxheWVyVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1
cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
U2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OnJlbmRlclN1cmZhY2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJT
dXJmYWNlQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3VyZmFjZUNocm9taXVt
Ojp+UmVuZGVyU3VyZmFjZUNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clN1cmZhY2VDaHJvbWl1bTo6Y2xlYXJMYXllckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3VyZmFjZUNocm9taXVtOjpsYXllckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3VyZmFjZUNocm9taXVtOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
aWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVy
SW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDQ2FudmFzTGF5ZXJJbXBsOjpjcmVhdGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVuZGVyU3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6dGFyZ2V0UmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0VGFyZ2V0UmVuZGVyU3VyZmFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5M
YXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1
Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpDQ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjp+Q0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVy
U3VyZmFjZTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OmxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpkcmF3YWJsZUNvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5k
ZXJTdXJmYWNlOjpkcmF3U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZh
Y2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlSW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVy
U3VyZmFjZTo6ZHVtcFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
Ojpvd25pbmdMYXllcklkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmguCisgICAgICAgIChXZWJD
b3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNvbnRlbnRSZWN0Q2VudGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyU3VyZmFjZTo6ZHJhd09wYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXREcmF3T3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6OnNldERyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpkcmF3VHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2V0UmVwbGljYURyYXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpyZXBsaWNhRHJhd1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6OnNldE9yaWdpblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clN1cmZhY2U6Om9yaWdpblRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1
cmZhY2U6OnNldFNjaXNzb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFj
ZTo6c2Npc3NvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpzZXRD
b250ZW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OmNvbnRlbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2V0U2tpcHNEcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6c2tpcHNEcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Y2xlYXJMYXllckxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpsYXllckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJTdXJmYWNlOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlOjpjb250ZW50c1RleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
ZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aWxlZExheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlk
ZW9MYXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDgtMDEgIEJlbmphbWluIFBvdWxhaW4gIDxi
ZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gT3BlbkdMU2hpbXMgZG9lcyBub3Qg
YnVpbGQgb24gQVJNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNTRjOWEzNGQzYjViMmFjMTE1MzcwMGRj
ODI1MTQwZTZhZjcyOWIwMi4uZjFiNGIwMmM4ZDhlMTM5N2I0MDliNDlkNGM2NTYxZTJkMWQ3MDY2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU2NCw2ICszNTY0LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcAppbmRleCAwYTFkMzJlOGM0MjI1MzQ3ODZhYTdkYWM1ZWEyZTJlZjdkYzUwMGY0
Li5hYzRiOWYyMDkyOGRmM2ExZjUyNWEyZjE0YzVjMjFhZWU0NzBjNWY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXNMYXllckNocm9taXVtLmNwcApAQCAtNTUsNyArNTUsNyBAQCBDYW52YXNMYXllckNocm9t
aXVtOjp+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IENh
bnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4gQ0ND
YW52YXNMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOworICAgIHJldHVybiBDQ0Nh
bnZhc0xheWVySW1wbDo6Y3JlYXRlKG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgQ2FudmFzTGF5ZXJD
aHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwCmluZGV4IDFkODczZGMxZmFlNmYwMTYzOWU1M2FiYWZiMWM3ZTFjOWZjZjQzNmYu
LmJhNzEzZWI4OTliZDMxNDhkNzg5Yzg5N2Q2NTY5MmQ5Nzg4MzVhMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwCkBAIC02MSw5ICs2MSw5IEBAIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0o
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxz
ZSkKICAgICAsIG1fbGF5ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3BhcmVudCgwKQot
ICAgICwgbV9jY0xheWVySW1wbCgwKQogICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAg
ICAsIG1fYmFja2dyb3VuZENvbG9yKDAsIDAsIDAsIDApCisgICAgLCBtX2RlYnVnQm9yZGVyV2lk
dGgoMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCiAgICAgLCBtX3pQb3NpdGlvbigwLjApCiAgICAg
LCBtX2FuY2hvclBvaW50WigwKQpAQCAtNzQsNyArNzQsMTAgQEAgTGF5ZXJDaHJvbWl1bTo6TGF5
ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgICwgbV9nZW9tZXRy
eUZsaXBwZWQoZmFsc2UpCiAgICAgLCBtX25lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlKGZhbHNl
KQogICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQorICAgICwgbV91c2VzTGF5ZXJTY2lzc29yKGZh
bHNlKQogICAgICwgbV9yZXBsaWNhTGF5ZXIoMCkKKyAgICAsIG1fZHJhd09wYWNpdHkoMCkKKyAg
ICAsIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogewogICAgIEFTU0VSVCghTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpzX2luUGFpbnRMYXllckNvbnRlbnRzKTsKIH0KQEAgLTg2LDkgKzg5LDYgQEAg
TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIC8vIHdheSBmb3IgdXMgdG8gYmUg
ZGVzdHJveWVkIHdoaWxlIHdlIHN0aWxsIGhhdmUgYSBwYXJlbnQuCiAgICAgQVNTRVJUKCFwYXJl
bnQoKSk7CiAKLSAgICBpZiAobV9jY0xheWVySW1wbCkKLSAgICAgICAgbV9jY0xheWVySW1wbC0+
Y2xlYXJPd25lcigpOwotCiAgICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgcmVmZXJlbmNlIGZyb20g
YWxsIGNoaWxkcmVuLgogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CiB9CkBAIC0zODEsMTIgKzM4
MSw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFt
JiB0cywgaW50IGluZGVudCkgY29uc3QKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ0xheWVySW1wbDo6
Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7Ci19Ci0KLUNDTGF5ZXJJbXBsKiBMYXllckNocm9taXVt
OjpjY0xheWVySW1wbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY2NMYXllckltcGw7CisgICAg
cmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKIH0KIAogdm9pZCBMYXllckNo
cm9taXVtOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC00MDYsNSArNDAx
LDIwIEBAIExheWVyUmVuZGVyZXJDaHJvbWl1bSogTGF5ZXJDaHJvbWl1bTo6bGF5ZXJSZW5kZXJl
cigpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsKIH0KIAordm9pZCBM
YXllckNocm9taXVtOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKK3sKKyAgICBBU1NFUlQoIW1fcmVu
ZGVyU3VyZmFjZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlID0gYWRvcHRQdHIobmV3IFJlbmRlclN1
cmZhY2VDaHJvbWl1bSh0aGlzKSk7Cit9CisKK2Jvb2wgTGF5ZXJDaHJvbWl1bTo6ZGVzY2VuZGFu
dERyYXdzQ29udGVudCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVu
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kcmF3c0NvbnRlbnQo
KSB8fCBtX2NoaWxkcmVuW2ldLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CiAjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDNi
YTdiOWYwZGIwY2Y5NzFhYjk2OGQ2MWI5YzMwYTAxZGVmNzIzYWIuLjRlNDAxY2NlODhhYjlhZDIy
MWJkNDdkN2RmZTE5YzczZDViMWY0MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTEwNCw3ICsx
MDQsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9CiAKICAgICB2b2lkIHNldE1hc2tMYXllcihMYXllckNocm9taXVtKiBtYXNrTGF5
ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IH0KLSAgICBDQ0xheWVySW1wbCogbWFza0Ry
YXdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyID8gbV9tYXNrTGF5ZXItPmNjTGF5
ZXJJbXBsKCkgOiAwOyB9CiAgICAgTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KIAogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNv
bnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KTsKQEAgLTE0NSw2ICsxNDQsOSBAQCBwdWJsaWM6CiAK
ICAgICBib29sIHByZXNlcnZlczNEKCkgeyByZXR1cm4gbV9vd25lciAmJiBtX293bmVyLT5wcmVz
ZXJ2ZXMzRCgpOyB9CiAKKyAgICB2b2lkIHNldFVzZXNMYXllclNjaXNzb3IoYm9vbCB1c2VzTGF5
ZXJTY2lzc29yKSB7IG1fdXNlc0xheWVyU2Npc3NvciA9IHVzZXNMYXllclNjaXNzb3I7IH0KKyAg
ICBib29sIHVzZXNMYXllclNjaXNzb3IoKSBjb25zdCB7IHJldHVybiBtX3VzZXNMYXllclNjaXNz
b3I7IH0KKwogICAgIC8vIERlcml2ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBp
ZiB0aGV5IG5lZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UKICAgICAvLyBpbiB0aGUgTGF5ZXJSZW5k
ZXJlckNocm9taXVtLgogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopOwpAQCAtMTcwLDkgKzE3Miw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwogCi0gICAgLy8gRXZlcnl0aGluZyBmcm9tIGhlcmUgZG93
biBpbiB0aGUgcHVibGljIHNlY3Rpb24gd2lsbCBtb3ZlIHRvIENDTGF5ZXJJbXBsLgotICAgIEND
TGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpIGNvbnN0OwotCiAgICAgc3RhdGljIHZvaWQgZHJhd1Rl
eHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRy
aXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpZ2h0LCBmbG9hdCBvcGFjaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbik7CkBAIC0xODcsNiArMTg2LDI0
IEBAIHB1YmxpYzoKIAogICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQog
CisgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFjZS5jbGVhcigp
OyB9CisgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9CisgICAgdm9pZCBjcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CisKKyAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09w
YWNpdHk7IH0KKyAgICB2b2lkIHNldERyYXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3
T3BhY2l0eSA9IG9wYWNpdHk7IH0KKyAgICBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KKyAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHJlY3Q7IH0KKyAgICBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldFJlbmRlclN1cmZhY2U7IH0KKyAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1
cmZhY2U7IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0RHJhd1RyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJhd1RyYW5zZm9y
bSA9IG1hdHJpeDsgfQorICAgIGNvbnN0IEludFJlY3QmIGRyYXdhYmxlQ29udGVudFJlY3QoKSBj
b25zdCB7IHJldHVybiBtX2RyYXdhYmxlQ29udGVudFJlY3Q7IH0KKyAgICB2b2lkIHNldERyYXdh
YmxlQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2RyYXdhYmxlQ29udGVudFJl
Y3QgPSByZWN0OyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBsYXllcidz
IGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCisgICAgYm9vbCBkZXNjZW5kYW50RHJh
d3NDb250ZW50KCk7CisKIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1f
b3duZXI7CiAgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyKTsKQEAgLTIxMCwxOCArMjI3LDEwIEBAIHByb3RlY3RlZDoKIAogICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBtX21hc2tMYXllcjsKIAotICAgIC8vIEFsbCBsYXllciBzaGFkZXJzIHNo
YXJlIHRoZSBzYW1lIGF0dHJpYnV0ZSBsb2NhdGlvbnMgZm9yIHRoZSB2ZXJ0ZXggcG9zaXRpb25z
Ci0gICAgLy8gYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMuIFRoaXMgYWxsb3dzIHN3aXRjaGluZyBz
aGFkZXJzIHdpdGhvdXQgcmViaW5kaW5nIGF0dHJpYnV0ZQotICAgIC8vIGFycmF5cy4KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX3RleENvb3JkQXR0cmliTG9jYXRpb247Ci0KICAgICBmcmllbmQg
Y2xhc3MgVHJlZVN5bmNocm9uaXplcjsKICAgICBmcmllbmQgY2xhc3MgQ0NMYXllckltcGw7CiAg
ICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRpbWUgdHlw
ZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEND
TGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hl
biBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzAgaXMgZml4ZWQu
Ci0gICAgdm9pZCBzZXRDQ0xheWVySW1wbChDQ0xheWVySW1wbCogaW1wbCkgeyBtX2NjTGF5ZXJJ
bXBsID0gaW1wbDsgfQogICAgIGludCBtX2xheWVySWQ7CiAKIHByaXZhdGU6CkBAIC0yNDUsMTAg
KzI1NCw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBt
X2xheWVyUmVuZGVyZXI7CiAKLSAgICAvLyBUZW1wb3JhcnkgZm9yd2FyZCB3ZWFrIHBvaW50ZXIg
dG8gdGhlIENDTGF5ZXJJbXBsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxheWVyLgotICAgIC8vIEZJ
WE1FOiBSZW1vdmUgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTg4MzAgaXMgZml4ZWQuCi0gICAgQ0NMYXllckltcGwqIG1fY2NMYXllckltcGw7Ci0KICAgICAv
LyBMYXllciBwcm9wZXJ0aWVzLgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAgSW50UmVjdCBt
X3Zpc2libGVMYXllclJlY3Q7CkBAIC0yNjcsNiArMjcyLDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fZ2VvbWV0cnlGbGlwcGVkOwogICAgIGJvb2wgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5n
ZTsKICAgICBib29sIG1fZG91YmxlU2lkZWQ7CisgICAgYm9vbCBtX3VzZXNMYXllclNjaXNzb3I7
CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX3N1YmxheWVyVHJhbnNmb3JtOwpAQCAtMjc2LDYgKzI4MiwxNCBAQCBwcml2
YXRlOgogICAgIC8vIFJlcGxpY2EgbGF5ZXIgdXNlZCBmb3IgcmVmbGVjdGlvbnMuCiAgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IG1fcmVwbGljYUxheWVyOwogCisgICAgLy8gVHJhbnNpZW50IHBy
b3BlcnRpZXMuCisgICAgT3duUHRyPFJlbmRlclN1cmZhY2VDaHJvbWl1bT4gbV9yZW5kZXJTdXJm
YWNlOworICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CisgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0
OworICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOworICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKKyAgICBJbnRSZWN0IG1fZHJh
d2FibGVDb250ZW50UmVjdDsKKwogICAgIFN0cmluZyBtX25hbWU7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCAzOTVmZWM2OTU2ZWYxNzA4NGQyMGQ3ZTU1
YmM3ZmY0YzQzZWJjZGNjLi4yNzM4NTliNGVkMGQ2Mjk4NDU0ZWMyMjlkNDBiMGNmYThlODAzZDY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQ0LDYgKzQ0LDcg
QEAKICNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRh
dGVyQ2FudmFzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAi
VGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCkBAIC02Myw2
ICs2NCw4IEBACiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBGSVhNRTogTWFrZSB0aGlzIGxpbWl0IGFkanVzdGFibGUgYW5kIGdpdmUgaXQgYSB1
c2VmdWwgdmFsdWUuCkBAIC03OCw3ICs4MSw5IEBAIHN0YXRpYyBzaXplX3QgdGV4dHVyZU1lbW9y
eUxvd0xpbWl0Qnl0ZXMgPSAzICogMTAyNCAqIDEwMjQ7CiBib29sIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6c19pblBhaW50TGF5ZXJDb250ZW50cyA9IGZhbHNlOwogI2VuZGlmCiAKLXN0YXRpYyBJ
bnRSZWN0IGNhbGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSkKK25hbWVzcGFjZSB7CisKK0ludFJlY3QgY2FsY3VsYXRlVmlzaWJs
ZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFJlY3QmIGxh
eWVyQm91bmRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewog
ICAgIC8vIElzIHRoaXMgbGF5ZXIgZnVsbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgdGFyZ2V0IHN1
cmZhY2U/CiAgICAgSW50UmVjdCBsYXllckluU3VyZmFjZVNwYWNlID0gdHJhbnNmb3JtLm1hcFJl
Y3QobGF5ZXJCb3VuZFJlY3QpOwpAQCAtMTAyLDcgKzEwNyw3IEBAIHN0YXRpYyBJbnRSZWN0IGNh
bGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25z
dCBJbnRSCiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWF0cml4IGhhcyBubyByb3RhdGlv
biwgc2tldyBvciBwZXJzcGVjdGl2ZSBjb21wb25lbnRzIHRvIGl0Lgotc3RhdGljIGJvb2wgaXNT
Y2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCitib29sIGlz
U2NhbGVPclRyYW5zbGF0aW9uKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogewogICAg
IHJldHVybiAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5tMTQoKQogICAgICAgICAgICAmJiAh
bS5tMjEoKSAmJiAhbS5tMjMoKSAmJiAhbS5tMjQoKQpAQCAtMTExLDEwICsxMTYsMjMgQEAgc3Rh
dGljIGJvb2wgaXNTY2FsZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG0pCiAKIH0KIAordm9pZCBzb3J0TGF5ZXJzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
Pjo6aXRlcmF0b3IsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPjo6aXRlcmF0b3IsIHZv
aWQqKQoreworICAgIC8vIEN1cnJlbnRseSB3ZSBkb24ndCB1c2Ugei1vcmRlciB0byBkZWNpZGUg
d2hhdCB0byBwYWludCwgc28gdGhlcmUncyBubyBuZWVkIHRvIGFjdHVhbGx5IHNvcnQgTGF5ZXJD
aHJvbWl1bXMuCit9CisKK3ZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBs
PiA+OjppdGVyYXRvciBmaXJzdCwgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPjo6aXRlcmF0
b3IgZW5kLCBDQ0xheWVyU29ydGVyKiBsYXllclNvcnRlcikKK3sKKyAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzb3J0TGF5ZXJzIiwgMCwgMCk7CisgICAgbGF5ZXJTb3J0
ZXItPnNvcnQoZmlyc3QsIGVuZCk7Cit9CisKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXll
ciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAv
LyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBz
dXJmYWNlcywgZXRjLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRp
ZXNBbmRSZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgTGF5ZXJMaXN0JiBsYXllckxpc3QpCit0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGUsIHR5
cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlLCB0eXBlbmFtZSBMYXllclNvcnRlcj4KK3ZvaWQgY2Fs
Y3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KExheWVyVHlwZSogbGF5ZXIsIExheWVy
VHlwZSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBWZWN0b3I8UmVmUHRyPExheWVyVHlwZT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVj
dG9yPFJlZlB0cjxMYXllclR5cGU+ID4mIGxheWVyTGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVyU29y
dGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExh
eWVyVHlwZT4gPiBMYXllckxpc3Q7CiAgICAgLy8gQ29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFu
c2Zvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIGxheWVyIGFuZAogICAgIC8v
IGFsbCBpdHMgY2hpbGRyZW4uIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxh
eWVyJ3MgcG9zaXRpb24KICAgICAvLyBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyJ3MgYW5j
aG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNlZApAQCAtMTcyLDExICsx
OTAsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRS
ZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5ZXIKICAgICBib29sIHVzZVN1cmZhY2VGb3JP
cGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJlc2VydmVzM0QoKTsK
ICAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gbGF5ZXItPm1hc2tMYXllcigpOwogICAg
IGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBsYXllci0+cmVwbGljYUxheWVyKCk7Ci0g
ICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0gbGF5ZXItPnBhcmVudCgpICYm
IGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAmJiAhbGF5ZXItPnByZXNlcnZlczNEKCkg
JiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCk7Ci0gICAgaWYgKHVzZVN1cmZhY2VG
b3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8IHVzZVN1cmZhY2VGb3JGbGF0
RGVzY2VuZGFudHMgfHwgKCh1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNlU3VyZmFjZUZvck9w
YWNpdHkpICYmIGxheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKSkgewotICAgICAgICBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpOwotICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UpCi0gICAgICAgICAgICByZW5kZXJTdXJm
YWNlID0gbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBib29sIHVzZVN1cmZhY2VG
b3JGbGF0RGVzY2VuZGFudHMgPSBsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5w
cmVzZXJ2ZXMzRCgpICYmICFsYXllci0+cHJlc2VydmVzM0QoKSAmJiBsYXllci0+ZGVzY2VuZGFu
dERyYXdzQ29udGVudCgpOworICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8fCB1c2VTdXJm
YWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzIHx8ICgodXNl
U3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBsYXllci0+ZGVz
Y2VuZGFudERyYXdzQ29udGVudCgpKSkgeworICAgICAgICBpZiAoIWxheWVyLT5yZW5kZXJTdXJm
YWNlKCkpCisgICAgICAgICAgICBsYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgICAg
ICBSZW5kZXJTdXJmYWNlVHlwZSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNl
KCk7CiAKICAgICAgICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVw
cGVyIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllci4KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggZHJhd1RyYW5zZm9ybTsKQEAgLTIzMiw3ICsyNTAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiBs
YXllcgogICAgICAgICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBh
cmVudCgpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KGxheWVyICE9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKQorICAgICAgICBpZiAobGF5ZXIgIT0g
cm9vdExheWVyKQogICAgICAgICAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogCiAg
ICAgICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7CkBAIC0yODgsMTEgKzMwNiwxMSBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1
cmZhY2VzKENDTGF5ZXJJbXBsKiBsYXllcgogICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0g
ZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5
ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIGNoaWxk
ID0gbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCk7Ci0gICAgICAgIHVwZGF0ZVByb3BlcnRpZXNB
bmRSZW5kZXJTdXJmYWNlcyhjaGlsZCwgc3VibGF5ZXJNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGRlc2NlbmRhbnRzKTsKKyAgICAgICAgTGF5ZXJUeXBlKiBjaGlsZCA9IGxheWVyLT5j
aGlsZHJlbigpW2ldLmdldCgpOworICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZp
c2liaWxpdHk8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZSwgTGF5ZXJTb3J0ZXI+KGNoaWxk
LCByb290TGF5ZXIsIHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNj
ZW5kYW50cywgbGF5ZXJTb3J0ZXIsIG1heFRleHR1cmVTaXplKTsKIAogICAgICAgICBpZiAoY2hp
bGQtPnJlbmRlclN1cmZhY2UoKSkgewotICAgICAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVt
KiBjaGlsZFJlbmRlclN1cmZhY2UgPSBjaGlsZC0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICAg
ICAgUmVuZGVyU3VyZmFjZVR5cGUqIGNoaWxkUmVuZGVyU3VyZmFjZSA9IGNoaWxkLT5yZW5kZXJT
dXJmYWNlKCk7CiAgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXll
ci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVj
dC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250
ZW50UmVjdCgpKSk7CiAgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChk
cmF3YWJsZUNvbnRlbnRSZWN0KTsKQEAgLTMxMCwxMCArMzI4LDEwIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllcklt
cGwqIGxheWVyCiAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxl
Q29udGVudFJlY3QpOwogICAgIH0KIAotICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYm
IGxheWVyICE9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKSB7Ci0gICAgICAgIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAg
ICAgIEludFJlY3QgcmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29u
dGVudFJlY3QoKTsKLSAgICAgICAgRmxvYXRQb2ludCBzdXJmYWNlQ2VudGVyID0gRmxvYXRSZWN0
KHJlbmRlclN1cmZhY2VDb250ZW50UmVjdCkuY2VudGVyKCk7CisgICAgaWYgKGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkgJiYgbGF5ZXIgIT0gcm9vdExheWVyKSB7CisgICAgICAgIFJlbmRlclN1cmZh
Y2VUeXBlKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAg
SW50UmVjdCBjbGlwcGVkQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgp
OworICAgICAgICBGbG9hdFBvaW50IHN1cmZhY2VDZW50ZXIgPSBGbG9hdFJlY3QoY2xpcHBlZENv
bnRlbnRSZWN0KS5jZW50ZXIoKTsKIAogICAgICAgICAvLyBSZXN0cmljdCB0aGUgUmVuZGVyU3Vy
ZmFjZSBzaXplIHRvIHRoZSBwb3J0aW9uIHRoYXQncyB2aXNpYmxlLgogICAgICAgICBGbG9hdFNp
emUgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZzsKQEAgLTMyMSwyMiArMzM5LDIzIEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMo
Q0NMYXllckltcGwqIGxheWVyCiAgICAgICAgIC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlz
IHJlZmxlY3RlZCBhcyB0aGUgcmVmbGVjdGlvbiBzaG91bGRuJ3QgYmUKICAgICAgICAgLy8gY2xp
cHBlZC4KICAgICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAg
IGlmICghcmVuZGVyU3VyZmFjZS0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkgJiYgIXJlbmRlclN1
cmZhY2VDb250ZW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IHN1
cmZhY2VTY2lzc29yUmVjdCA9IGNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPnNj
aXNzb3JSZWN0KCksIHJlbmRlclN1cmZhY2VDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3Jp
Z2luVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2VDb250ZW50UmVj
dC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0KTsKKyAgICAgICAgICAgIGlmICghcmVuZGVy
U3VyZmFjZS0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkgJiYgIWNsaXBwZWRDb250ZW50UmVjdC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IHN1cmZhY2VTY2lzc29yUmVjdCA9
IGNhbGN1bGF0ZVZpc2libGVSZWN0KHJlbmRlclN1cmZhY2UtPnNjaXNzb3JSZWN0KCksIGNsaXBw
ZWRDb250ZW50UmVjdCwgcmVuZGVyU3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgICAg
ICAgICAgICAgIGNsaXBwZWRDb250ZW50UmVjdC5pbnRlcnNlY3Qoc3VyZmFjZVNjaXNzb3JSZWN0
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VD
ZW50ZXIgPSBGbG9hdFJlY3QocmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0KS5jZW50ZXIoKTsKKyAg
ICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSBGbG9hdFJlY3QoY2xp
cHBlZENvbnRlbnRSZWN0KS5jZW50ZXIoKTsKICAgICAgICAgICAgIGNlbnRlck9mZnNldER1ZVRv
Q2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1cmZhY2VDZW50ZXI7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBUaGUgUmVuZGVyU3VyZmFjZSBiYWNraW5nIHRleHR1cmUgY2Fubm90
IGV4Y2VlZCB0aGUgbWF4aW11bSBzdXBwb3J0ZWQKICAgICAgICAgLy8gdGV4dHVyZSBzaXplLgot
ICAgICAgICByZW5kZXJTdXJmYWNlQ29udGVudFJlY3Quc2V0V2lkdGgoc3RkOjptaW4ocmVuZGVy
U3VyZmFjZUNvbnRlbnRSZWN0LndpZHRoKCksIG1fbWF4VGV4dHVyZVNpemUpKTsKLSAgICAgICAg
cmVuZGVyU3VyZmFjZUNvbnRlbnRSZWN0LnNldEhlaWdodChzdGQ6Om1pbihyZW5kZXJTdXJmYWNl
Q29udGVudFJlY3QuaGVpZ2h0KCksIG1fbWF4VGV4dHVyZVNpemUpKTsKKyAgICAgICAgY2xpcHBl
ZENvbnRlbnRSZWN0LnNldFdpZHRoKG1pbihjbGlwcGVkQ29udGVudFJlY3Qud2lkdGgoKSwgbWF4
VGV4dHVyZVNpemUpKTsKKyAgICAgICAgY2xpcHBlZENvbnRlbnRSZWN0LnNldEhlaWdodChtaW4o
Y2xpcHBlZENvbnRlbnRSZWN0LmhlaWdodCgpLCBtYXhUZXh0dXJlU2l6ZSkpOwogCi0gICAgICAg
IGlmIChyZW5kZXJTdXJmYWNlQ29udGVudFJlY3QuaXNFbXB0eSgpKQorICAgICAgICBpZiAoY2xp
cHBlZENvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPmNs
ZWFyTGF5ZXJMaXN0KCk7Ci0gICAgICAgIHJlbmRlclN1cmZhY2UtPnNldENvbnRlbnRSZWN0KHJl
bmRlclN1cmZhY2VDb250ZW50UmVjdCk7CisKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0Q29u
dGVudFJlY3QoY2xpcHBlZENvbnRlbnRSZWN0KTsKIAogICAgICAgICAvLyBTaW5jZSB0aGUgbGF5
ZXIgc3RhcnRzIGEgbmV3IHJlbmRlciBzdXJmYWNlIHdlIG5lZWQgdG8gYWRqdXN0IGl0cwogICAg
ICAgICAvLyBzY2lzc29yIHJlY3QgdG8gYmUgZXhwcmVzc2VkIGluIHRoZSBuZXcgc3VyZmFjZSdz
IGNvb3JkaW5hdGUgc3lzdGVtLgpAQCAtMzYyLDcgKzM4MSw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwq
IGxheWVyCiAgICAgLy8gZHJhd24gZnJvbSBiYWNrIHRvIGZyb250LiBJZiB0aGUgcHJlc2VydmVz
LTNkIHByb3BlcnR5IGlzIGFsc28gc2V0IG9uIHRoZSBwYXJlbnQgdGhlbgogICAgIC8vIHNraXAg
dGhlIHNvcnRpbmcgYXMgdGhlIHBhcmVudCB3aWxsIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBh
bnl3YXkuCiAgICAgaWYgKGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBhcmVudCgp
IHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQotICAgICAgICBtX2xheWVyU29y
dGVyLnNvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5k
KCkpOworICAgICAgICBzb3J0TGF5ZXJzKCZkZXNjZW5kYW50cy5hdCh0aGlzTGF5ZXJJbmRleCks
IGRlc2NlbmRhbnRzLmVuZCgpLCBsYXllclNvcnRlcik7Cit9CisKIH0KIAogc3RhdGljIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9h
dCBib3R0b20sIGZsb2F0IHRvcCkKQEAgLTU0NywxOSArNTY4LDEyIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoKQogICAgIGlmICghbV9yb290TGF5ZXIpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c3luY2hyb25pemVUcmVlcyIsIHRoaXMsIDApOwotICAgICAgICBtX3Jvb3RDQ0xh
eWVySW1wbCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9yb290TGF5ZXIu
Z2V0KCksIG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKTsKLSAgICB9Ci0KLSAgICBtX2NvbXB1dGVk
UmVuZGVyU3VyZmFjZUxheWVyTGlzdCA9IGFkb3B0UHRyKG5ldyBMYXllckxpc3QoKSk7Ci0gICAg
dXBkYXRlTGF5ZXJzKCptX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgdXBk
YXRlTGF5ZXJzKG1fcm9vdExheWVyLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdMYXllcnMoKQogewogICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcp
OwotICAgIEFTU0VSVChtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgLy8g
QmVmb3JlIGRyYXdMYXllcnM6CiAgICAgaWYgKGhhcmR3YXJlQ29tcG9zaXRpbmcoKSkgewogICAg
ICAgICAvLyBGSVhNRTogVGhlIG11bHRpdGhyZWFkZWQgY29tcG9zaXRvciBjYXNlIHdpbGwgbm90
IHdvcmsgYXMgbG9uZyBhcwpAQCAtNTczLDggKzU4NywxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICB7CisgICAgICAg
IFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnN5bmNocm9uaXplVHJlZXMiLCB0
aGlzLCAwKTsKKyAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVlU3luY2hyb25pemVyOjpz
eW5jaHJvbml6ZVRyZWVzKG1fcm9vdExheWVyLmdldCgpLCBtX3Jvb3RDQ0xheWVySW1wbC5nZXQo
KSk7CisgICAgfQorCisKICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVt
b3J5TGltaXRCeXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMgLSBtX2NvbnRlbnRzVGV4
dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKLSAgICBkcmF3TGF5ZXJzKCpt
X2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgZHJhd0xheWVyc0ludGVybmFs
KCk7CiAKICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVz
KCk7CiAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHRl
eHR1cmVNZW1vcnlSZWNsYWltTGltaXRCeXRlcyk7CkBAIC01ODgsMzMgKzYwOCwzMSBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgICAgIGNvcHlPZmZzY3Jl
ZW5UZXh0dXJlVG9EaXNwbGF5KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIp
CiB7CiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJz
IiwgdGhpcywgMCk7Ci0gICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXll
ci0+Y2NMYXllckltcGwoKTsKIAotICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFj
ZSgpKQotICAgICAgICByb290RHJhd0xheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAg
QVNTRVJUKHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7Ci0KLSAgICByb290RHJhd0xh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwg
MCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKKyAgICBpZiAoIXJvb3RMYXllci0+
cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVj
dChJbnRQb2ludCgwLCAwKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUoKSkpOwogCiAgICAg
SW50UmVjdCByb290U2Npc3NvclJlY3QobV92aWV3cG9ydFZpc2libGVSZWN0KTsKICAgICAvLyBU
aGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgogICAg
IHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24ueCgpLCAtbV92
aWV3cG9ydFNjcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgcm9vdERyYXdMYXllci0+c2V0U2Npc3Nv
clJlY3Qocm9vdFNjaXNzb3JSZWN0KTsKKyAgICByb290TGF5ZXItPnNldFNjaXNzb3JSZWN0KHJv
b3RTY2lzc29yUmVjdCk7CiAKLSAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlID0gcm9vdERyYXdM
YXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllcik7CiAKLSAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290RHJhd0xheWVyKTsKKyAgICBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qIHJvb3RSZW5kZXJTdXJmYWNlID0gcm9vdExheWVyLT5yZW5kZXJT
dXJmYWNlKCk7CisgICAgcm9vdFJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7CiAKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKLSAgICBtX2RlZmF1bHRSZW5k
ZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpOwotICAgIC8vIFVuZm9ydHVuYXRlbHksIHVwZGF0
ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcygpIGN1cnJlbnRseSBib3RoIHVwZGF0ZXMgdGhl
IGxheWVycyBhbmQgdXBkYXRlcyB0aGUgZHJhdyBzdGF0ZQotICAgIC8vICh0cmFuc2Zvcm1zLCBl
dGMpLiBJdCdkIGJlIG5pY2VyIGlmIG9wZXJhdGlvbnMgb24gdGhlIHByZXNlbnRhdGlvbiBsYXll
cnMgaGFwcGVuZWQgbGF0ZXIsIGJ1dCB0aGUgZHJhdwotICAgIC8vIHRyYW5zZm9ybXMgYXJlIG5l
ZWRlZCBieSBsYXJnZSBsYXllcnMgdG8gZGV0ZXJtaW5lIHZpc2liaWxpdHkuIFRpbGluZyB3aWxs
IGZpeCB0aGlzIGJ5IGVsaW1pbmF0aW5nIHRoZQotICAgIC8vIGNvbmNlcHQgb2YgYSBsYXJnZSBj
b250ZW50IGxheWVyLgotICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhyb290
RHJhd0xheWVyLCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9kZWZh
dWx0UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCkpOworCisgICAgeworICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnM6OmNhbGNEcmF3RXRjIiwg
dGhpcywgMCk7CisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQqPihyb290TGF5ZXIsIHJv
b3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RSZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgMCwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgfQogCiAj
aWZuZGVmIE5ERUJVRwogICAgIHNfaW5QYWludExheWVyQ29udGVudHMgPSB0cnVlOwpAQCAtNjU5
LDcgKzY3Nyw3IEBAIHN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21p
dW0qIGxheWVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5CiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCkKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgp
IHsKLSAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZh
Y2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSog
cmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhd
LmdldCgpOwogICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRl
clN1cmZhY2UpOwogCkBAIC02NzYsMTggKzY5NCwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eQogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZh
Y2UtPmxheWVyTGlzdCgpOworICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJl
bmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUo
KSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7IGxheWVySW5kZXggPCBs
YXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAgICAgIENDTGF5ZXJJbXBs
KiBjY0xheWVySW1wbCA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
IExheWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOwogCiAg
ICAgICAgICAgICAvLyBMYXllcnMgdGhhdCBzdGFydCBhIG5ldyByZW5kZXIgc3VyZmFjZSB3aWxs
IGJlIHBhaW50ZWQgd2hlbiB0aGUgcmVuZGVyCiAgICAgICAgICAgICAvLyBzdXJmYWNlJ3MgbGlz
dCBpcyBwcm9jZXNzZWQuCi0gICAgICAgICAgICBpZiAoY2NMYXllckltcGwtPnJlbmRlclN1cmZh
Y2UoKSAmJiBjY0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCisg
ICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgICAgIExheWVyQ2hyb21pdW0qIGxheWVyID0gY2NMYXllckltcGwtPm93bmVyKCk7Ci0K
ICAgICAgICAgICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwogCiAgICAgICAgICAg
ICBpZiAoIWxheWVyLT5vcGFjaXR5KCkpCkBAIC03MDQsMTAgKzcyMCwxMCBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheQogICAgICAgICAgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIEludFJlY3QgdGFyZ2V0
U3VyZmFjZVJlY3QgPSBjY0xheWVySW1wbC0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8gY2NMYXll
ckltcGwtPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7Ci0gICAgICAgICAgICBpZiAobGF5ZXItPmNjTGF5
ZXJJbXBsKCktPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgICAgICAgICB0YXJnZXRTdXJm
YWNlUmVjdC5pbnRlcnNlY3QobGF5ZXItPmNjTGF5ZXJJbXBsKCktPnNjaXNzb3JSZWN0KCkpOwot
ICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxh
eWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVu
dEJvdW5kcygpLCBjY0xheWVySW1wbC0+ZHJhd1RyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIElu
dFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBsYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpID8g
bGF5ZXItPnRhcmdldFJlbmRlclN1cmZhY2UoKS0+Y29udGVudFJlY3QoKSA6IG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBpZiAobGF5ZXItPnVzZXNM
YXllclNjaXNzb3IoKSkKKyAgICAgICAgICAgICAgICB0YXJnZXRTdXJmYWNlUmVjdC5pbnRlcnNl
Y3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAgICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5
ZXJSZWN0ID0gY2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCwgbGF5
ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJhd1RyYW5zZm9y
bSgpKTsKIAogICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIsIHZpc2libGVM
YXllclJlY3QpOwogCkBAIC03MjYsMTUgKzc0MiwzNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eQogICAgIH0KIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiB7CiAgICAgaWYgKG1fdmlld3BvcnRWaXNp
YmxlUmVjdC5pc0VtcHR5KCkgfHwgIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKICAg
ICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzIiwgdGhpcywg
MCk7Ci0gICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXllci0+Y2NMYXll
ckltcGwoKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1fcm9vdENDTGF5ZXJJ
bXBsLmdldCgpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCisgICAgaWYgKCFyb290RHJh
d0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJl
bmRlclN1cmZhY2UoKTsKKyAgICByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENv
bnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5z
aXplKCkpKTsKKworICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KG1fdmlld3BvcnRWaXNpYmxl
UmVjdCk7CisgICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Ny
b2xsIG9mZnNldC4KKyAgICByb290U2Npc3NvclJlY3QubW92ZSgtbV92aWV3cG9ydFNjcm9sbFBv
c2l0aW9uLngoKSwgLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHJvb3REcmF3
TGF5ZXItPnNldFNjaXNzb3JSZWN0KHJvb3RTY2lzc29yUmVjdCk7CisKKyAgICBDQ0xheWVyTGlz
dCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBw
ZW5kKHJvb3REcmF3TGF5ZXIpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSA9IHJvb3REcmF3TGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKKyAgICBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgp
OworCisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzSW50ZXJuYWw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7CisgICAgICAgIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJm
YWNlLCBDQ0xheWVyU29ydGVyPihyb290RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVudGl0
eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZS0+
bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBtX21heFRleHR1cmVTaXplKTsKKyAgICB9CisK
ICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBp
bmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCiAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT52aWV3cG9ydCgwLCAwLCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aWV3
cG9ydFZpc2libGVSZWN0LmhlaWdodCgpKSk7CiAKQEAgLTc3Miw3ICs4MDksNyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpCiAgICAgLy8gY29ycmVjdCBvcmRlci4KICAgICBmb3IgKGludCBzdXJm
YWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRl
eCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKICAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1
cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5nZXQoKTsK
LSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3Vy
ZmFjZUxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVu
ZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAg
ICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CiAKICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0U2tp
cHNEcmF3KHRydWUpOwpAQCAtNzk2LDcgKzgzMyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkK
ICAgICAgICAgICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7
CisgICAgICAgICAgICBjb25zdCBDQ0xheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFj
ZS0+bGF5ZXJMaXN0KCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxheWVySW5kZXggPSAw
OyBsYXllckluZGV4IDwgbGF5ZXJMaXN0LnNpemUoKTsgKytsYXllckluZGV4KQogICAgICAgICAg
ICAgICAgIGRyYXdMYXllcihsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCksIHJlbmRlclN1cmZh
Y2UpOwogICAgICAgICB9CkBAIC05MTYsNyArOTUzLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zv
cm0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBmb3IgKGlu
dCBzdXJmYWNlSW5kZXggPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZh
Y2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKLSAgICAgICAgQ0NMYXllckltcGwqIHJl
bmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFjZUluZGV4XS5n
ZXQoKTsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVuZGVy
U3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwogICAgICAgICBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKICAgICAgICAgQVNTRVJUKHJlbmRlclN1cmZhY2UpOwogCkBAIC05MjYsMTkgKzk2
MywxNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cgogICAgICAgICBjb25zdCBMYXllckxpc3Qm
IGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQo
bGF5ZXJMaXN0LnNpemUoKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgbGF5ZXJJbmRleCA9IDA7
IGxheWVySW5kZXggPCBsYXllckxpc3Quc2l6ZSgpOyArK2xheWVySW5kZXgpIHsKLSAgICAgICAg
ICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCA9IGxheWVyTGlzdFtsYXllckluZGV4XS5nZXQo
KTsKLSAgICAgICAgICAgIGlmIChjY0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpICYmIGNjTGF5
ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKKyAgICAgICAgICAgIExh
eWVyQ2hyb21pdW0qIGxheWVyID0gbGF5ZXJMaXN0W2xheWVySW5kZXhdLmdldCgpOworICAgICAg
ICAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSAhPSByZW5kZXJTdXJmYWNlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNjTGF5ZXJJbXBsKTsKKyAgICAgICAgICAg
IHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXIpOwogICAgICAgICB9CiAgICAgfQogfQog
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhD
Q0xheWVySW1wbCogY2NMYXllckltcGwpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKIHsKLSAgICBMYXll
ckNocm9taXVtKiBsYXllciA9IGNjTGF5ZXJJbXBsLT5vd25lcigpOwotCiAgICAgaWYgKGxheWVy
LT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTQ2LDE0ICs5ODEs
MTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBsKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
bGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNj
TGF5ZXJJbXBsLT5tYXNrTGF5ZXIoKSk7CisgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMobGF5ZXItPm1hc2tMYXllcigpKTsKICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQot
ICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNjTGF5ZXJJbXBsLT5yZXBsaWNhTGF5
ZXIoKSk7CisgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPnJlcGxpY2FM
YXllcigpKTsKIAogICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIGxheWVy
LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0KLSAgICBsYXllci0+cHVzaFByb3BlcnRp
ZXNUbyhjY0xheWVySW1wbCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRD
b21wb3NpdGVPZmZzY3JlZW4oYm9vbCBjb21wb3NpdGVPZmZzY3JlZW4pCkBAIC05NjMsMTMgKzk5
NiwxMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVu
KGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuKQogCiAgICAgbV9jb21wb3NpdGVPZmZzY3JlZW4gPSBj
b21wb3NpdGVPZmZzY3JlZW47CiAKLSAgICBpZiAoIW1fY29tcG9zaXRlT2Zmc2NyZWVuICYmIG1f
cm9vdExheWVyKQotICAgICAgICBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKS0+Y2xlYXJSZW5k
ZXJTdXJmYWNlKCk7CisgICAgaWYgKCFtX2NvbXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RDQ0xh
eWVySW1wbCkKKyAgICAgICAgbV9yb290Q0NMYXllckltcGwtPmNsZWFyUmVuZGVyU3VyZmFjZSgp
OwogfQogCiBMYXllclRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVu
TGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW4gPyBtX3Jv
b3RMYXllci0+Y2NMYXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUo
KSA6IDA7CisgICAgcmV0dXJuIG1fY29tcG9zaXRlT2Zmc2NyZWVuICYmIG1fcm9vdENDTGF5ZXJJ
bXBsID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJl
KCkgOiAwOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNjcmVlblRl
eHR1cmVUb0Rpc3BsYXkoKQpAQCAtOTg2LDcgKzEwMTksNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQogICAgIH0KIH0KIAotYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNo
cm9taXVtKiByZW5kZXJTdXJmYWNlKQorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJl
bmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogewogICAgIGlmICht
X2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IHJlbmRlclN1cmZhY2UpCiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMTAyMCw3ICsxMDUzLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVz
ZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihD
Q0xheWVySW1wbCogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0U3VyZmFjZSkK
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVy
LCBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCiB7CiAgICAgaWYgKGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkgJiYgbGF5ZXItPnJlbmRlclN1cmZhY2UoKSAhPSB0YXJnZXRTdXJmYWNlKSB7
CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXcobGF5ZXItPmdldERyYXdSZWN0
KCkpOwpAQCAtMTA0Nyw3ICsxMDgwLDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSoKICAgICB9
IGVsc2UKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIAotCiAgICAgaWYgKCFsYXllci0+ZG91
YmxlU2lkZWQoKSkgewogICAgICAgICAvLyBGSVhNRTogTmVlZCB0byB0YWtlIGludG8gYWNjb3Vu
dCB0aGUgY3VtdWxhdGl2ZSByZW5kZXIgc3VyZmFjZSB0cmFuc2Zvcm1zIGFsbCB0aGUgd2F5IGZy
b20KICAgICAgICAgLy8gICAgICAgIHRoZSBkZWZhdWx0IHJlbmRlciBzdXJmYWNlIGluIG9yZGVy
IHRvIGRldGVybWluZSB2aXNpYmlsaXR5LgpAQCAtMTE0Niw3ICsxMTc4LDcgQEAgYm9vbCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICAvLyBXZSB3
aWxsIGFsd2F5cyBuZWVkIHRoZXNlIHByb2dyYW1zIHRvIHJlbmRlciwgc28gY3JlYXRlIHRoZSBw
cm9ncmFtcyBlYWdlcmx5IHNvIHRoYXQgdGhlIHNoYWRlciBjb21waWxhdGlvbiBjYW4KICAgICAv
LyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhlciBwcm9ncmFtcyBhcmUgY3JlYXRl
ZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLgogICAgIG1fc2hhcmVkR2VvbWV0cnkgPSBhZG9wdFB0
cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkpOwotICAgIG1fcmVuZGVyU3Vy
ZmFjZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpQcm9ncmFt
KG1fY29udGV4dC5nZXQoKSkpOworICAgIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0gPSBhZG9wdFB0
cihuZXcgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1f
dGlsZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IExheWVyVGlsZXJDaHJvbWl1bTo6UHJvZ3JhbSht
X2NvbnRleHQuZ2V0KCkpKTsKIAogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
Zmx1c2goKSk7CkBAIC0xMTc4LDcgKzEyMTAsNyBAQCBjb25zdCBDQ0hlYWRzVXBEaXNwbGF5OjpQ
cm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpCiAg
ICAgcmV0dXJuIG1faGVhZHNVcERpc3BsYXlQcm9ncmFtLmdldCgpOwogfQogCi1jb25zdCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVy
U3VyZmFjZVByb2dyYW0oKQorY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtKCkKIHsKICAgICBBU1NFUlQobV9y
ZW5kZXJTdXJmYWNlUHJvZ3JhbSk7CiAgICAgaWYgKCFtX3JlbmRlclN1cmZhY2VQcm9ncmFtLT5p
bml0aWFsaXplZCgpKSB7CkBAIC0xMTg4LDEwICsxMjIwLDEwIEBAIGNvbnN0IFJlbmRlclN1cmZh
Y2VDaHJvbWl1bTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJmYWNl
UHJvZ3JhCiAgICAgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0uZ2V0KCk7CiB9CiAKLWNv
bnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6TWFza1Byb2dyYW0qIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCkKK2NvbnN0IENDUmVuZGVyU3VyZmFjZTo6
TWFza1Byb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9n
cmFtKCkKIHsKICAgICBpZiAoIW1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKQotICAgICAgICBt
X3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hy
b21pdW06Ok1hc2tQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgICAgICBtX3JlbmRlclN1
cmZhY2VNYXNrUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9n
cmFtKG1fY29udGV4dC5nZXQoKSkpOwogICAgIGlmICghbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dy
YW0tPmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Ym9yZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwogICAgICAgICBt
X3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbS0+aW5pdGlhbGl6ZSgpOwpAQCAtMTM0NCw4ICsxMzc2
LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ29tcG9zaXRvckNvbnRleHRMb3N0
KCkKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXJDaHJvbWl1bSogbGF5ZXIpIGNvbnN0CiB7Ci0g
ICAgaWYgKGxheWVyLT5jY0xheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCkpCi0gICAgICAgIGxh
eWVyLT5jY0xheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPmR1bXBTdXJmYWNlKHRzLCBpbmRl
bnQpOworICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpLT5kdW1wU3VyZmFjZSh0cywgaW5kZW50KTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCiAgICAgICAgIGR1bXBS
ZW5kZXJTdXJmYWNlcyh0cywgaW5kZW50LCBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGNiMTQ0NzQ5NDdkNDNlNzhmNTNk
MmRlOTI3YjVlNTFkMmZlMzZlMGIuLjA2Yjk0ODY5Njg4MGIwZDQzMjBkMWFiYmVkN2M4N2YzYzE1
YWJhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0zOCw3ICszOCw2
IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCkBAIC0xMjksOCArMTI4
LDggQEAgcHVibGljOgogICAgIGNvbnN0IEdlb21ldHJ5QmluZGluZyogc2hhcmVkR2VvbWV0cnko
KSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5LmdldCgpOyB9CiAgICAgY29uc3QgTGF5
ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogYm9yZGVyUHJvZ3JhbSgpOwogICAgIGNvbnN0IEND
SGVhZHNVcERpc3BsYXk6OlByb2dyYW0qIGhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpOwotICAgIGNv
bnN0IFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6UHJvZ3JhbSogcmVuZGVyU3VyZmFjZVByb2dyYW0o
KTsKLSAgICBjb25zdCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFtKiByZW5kZXJT
dXJmYWNlTWFza1Byb2dyYW0oKTsKKyAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW0q
IHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CisgICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNr
UHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7CiAgICAgY29uc3QgTGF5ZXJUaWxl
ckNocm9taXVtOjpQcm9ncmFtKiB0aWxlclByb2dyYW0oKTsKICAgICBjb25zdCBMYXllclRpbGVy
Q2hyb21pdW06OlByb2dyYW1Td2l6emxlKiB0aWxlclByb2dyYW1Td2l6emxlKCk7CiAgICAgY29u
c3QgQ0NDYW52YXNMYXllckltcGw6OlByb2dyYW0qIGNhbnZhc0xheWVyUHJvZ3JhbSgpOwpAQCAt
MTYyLDExICsxNjEsMTMgQEAgcHVibGljOgogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9v
bCBzX2luUGFpbnRMYXllckNvbnRlbnRzOwogI2VuZGlmCisgICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsUHJveHkoKTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXll
ckltcGw+ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFwaGljc0NvbnRleHQz
RCosIGludD4gQ2hpbGRDb250ZXh0TWFwOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8g
YmUgbW92ZWQgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdEltcGwgd2hlbiB0aGF0IGNsYXNzIGV4aXN0
cy4KQEAgLTE3NCwxNiArMTc1LDE1IEBAIHByaXZhdGU6CiAKICAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0oQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4sIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCwgYm9vbCBh
Y2NlbGVyYXRlRHJhd2luZyk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21p
dW0qKTsKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7Ci0gICAgdm9pZCB1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIExheWVyTGlzdCYgbGF5ZXJzKTsKIAogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRz
KGNvbnN0IExheWVyTGlzdCYpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhj
b25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwotICAgIHZvaWQgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhDQ0xheWVySW1wbCopOworICAgIHZvaWQgdXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhMYXllckNocm9taXVtKik7CiAKLSAgICB2b2lkIGRyYXdMYXllcnMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAgICB2b2lkIGRyYXdMYXll
cihDQ0xheWVySW1wbCosIFJlbmRlclN1cmZhY2VDaHJvbWl1bSopOworICAgIHZvaWQgZHJhd0xh
eWVyc0ludGVybmFsKCk7CisgICAgdm9pZCBkcmF3TGF5ZXIoQ0NMYXllckltcGwqLCBDQ1JlbmRl
clN1cmZhY2UqKTsKIAogICAgIHZvaWQgZHJhd1Jvb3RMYXllcigpOwogICAgIExheWVyVGV4dHVy
ZSogZ2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCk7CkBAIC0xOTMsNyArMTkzLDcgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgc2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiwgYm9vbCBm
bGlwWSk7CiAKLSAgICBib29sIHVzZVJlbmRlclN1cmZhY2UoUmVuZGVyU3VyZmFjZUNocm9taXVt
Kik7CisgICAgYm9vbCB1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSopOwogCiAgICAg
Ym9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIApAQCAtMjIxLDcgKzIyMSw3IEBAIHByaXZhdGU6
CiAKICAgICBPd25QdHI8TGF5ZXJMaXN0PiBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKIAotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsK
KyAgICBDQ1JlbmRlclN1cmZhY2UqIG1fY3VycmVudFJlbmRlclN1cmZhY2U7CiAgICAgdW5zaWdu
ZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkOwogICAgIGJvb2wgbV9jb21wb3NpdGVPZmZzY3Jl
ZW47CiAKQEAgLTIzNSwxNCArMjM1LDE0IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEdlb21ldHJ5
QmluZGluZz4gbV9zaGFyZWRHZW9tZXRyeTsKICAgICBPd25QdHI8TGF5ZXJDaHJvbWl1bTo6Qm9y
ZGVyUHJvZ3JhbT4gbV9ib3JkZXJQcm9ncmFtOwogICAgIE93blB0cjxDQ0hlYWRzVXBEaXNwbGF5
OjpQcm9ncmFtPiBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbTsKLSAgICBPd25QdHI8UmVuZGVyU3Vy
ZmFjZUNocm9taXVtOjpQcm9ncmFtPiBtX3JlbmRlclN1cmZhY2VQcm9ncmFtOwotICAgIE93blB0
cjxSZW5kZXJTdXJmYWNlQ2hyb21pdW06Ok1hc2tQcm9ncmFtPiBtX3JlbmRlclN1cmZhY2VNYXNr
UHJvZ3JhbTsKICAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtPiBtX3RpbGVy
UHJvZ3JhbTsKICAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtOjpQcm9ncmFtU3dpenpsZT4g
bV90aWxlclByb2dyYW1Td2l6emxlOwogICAgIE93blB0cjxDQ0NhbnZhc0xheWVySW1wbDo6UHJv
Z3JhbT4gbV9jYW52YXNMYXllclByb2dyYW07CisgICAgT3duUHRyPENDUGx1Z2luTGF5ZXJJbXBs
OjpQcm9ncmFtPiBtX3BsdWdpbkxheWVyUHJvZ3JhbTsKKyAgICBPd25QdHI8Q0NSZW5kZXJTdXJm
YWNlOjpNYXNrUHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW07CisgICAgT3duUHRy
PENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbTsKICAgICBP
d25QdHI8Q0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0+IG1fdmlkZW9MYXllclJHQkFQcm9n
cmFtOwogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtPiBtX3ZpZGVvTGF5
ZXJZVVZQcm9ncmFtOwotICAgIE93blB0cjxDQ1BsdWdpbkxheWVySW1wbDo6UHJvZ3JhbT4gbV9w
bHVnaW5MYXllclByb2dyYW07CiAKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fY29udGVu
dHNUZXh0dXJlTWFuYWdlcjsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVNYW5hZ2VyOwpAQCAtMjYyLDcgKzI2Miw3IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1fYW5pbWF0aW5nOwogCi0gICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBtX2RlZmF1bHRS
ZW5kZXJTdXJmYWNlOworICAgIENDUmVuZGVyU3VyZmFjZSogbV9kZWZhdWx0UmVuZGVyU3VyZmFj
ZTsKIAogICAgIENDTGF5ZXJTb3J0ZXIgbV9sYXllclNvcnRlcjsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdp
bkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDAwMGYyOTUwZjQ5Y2NiNTJiYzY2MzU5NzY2ZWQxYzY4
M2EzMzg5NDcuLmI2ZTM1MDZmY2ZmZjNhNTY4MWE1NTNmNDFhNmY1ZWIyNDhlODFlNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCkBAIC00OSw3ICs0OSw3IEBAIFBsdWdpbkxh
eWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcikKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gUGx1Z2luTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRl
KHRoaXMsIG1fbGF5ZXJJZCk7CisgICAgcmV0dXJuIENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUo
bV9sYXllcklkKTsKIH0KIAogdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQo
dW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmNwcAppbmRleCA2
YTI3MjE2ZDAyNGJlOTMxMmVmNjk2MjcxOTQyZTYyOTVkYjg0MzY0Li5lOWEzZGZkMGI1ZDY2OGJm
NzQyNWQ2MmQ1MDY4OWRmZjE4MWZhNjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1cmZhY2VDaHJv
bWl1bS5jcHAKQEAgLTI5LDE3ICsyOSwxNCBAQAogCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNo
cm9taXVtLmgiCiAKLSNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgotI2luY2x1
ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyU3VyZmFjZUNocm9taXVtOjpSZW5kZXJTdXJmYWNlQ2hy
b21pdW0oQ0NMYXllckltcGwqIG93bmluZ0xheWVyKQorUmVuZGVyU3VyZmFjZUNocm9taXVtOjpS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0oTGF5ZXJDaHJvbWl1bSogb3duaW5nTGF5ZXIpCiAgICAgOiBt
X293bmluZ0xheWVyKG93bmluZ0xheWVyKQogICAgICwgbV9tYXNrTGF5ZXIoMCkKICAgICAsIG1f
c2tpcHNEcmF3KGZhbHNlKQpAQCAtNDksMTcgKzQ2LDYgQEAgUmVuZGVyU3VyZmFjZUNocm9taXVt
OjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0oQ0NMYXllckltcGwqIG93bmluZ0xheWVyKQogCiBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06On5SZW5kZXJTdXJmYWNlQ2hyb21pdW0oKQogewotICAgIGNsZWFu
dXBSZXNvdXJjZXMoKTsKLX0KLQotdm9pZCBSZW5kZXJTdXJmYWNlQ2hyb21pdW06OmNsZWFudXBS
ZXNvdXJjZXMoKQotewotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwotCi0gICAgbV9jb250ZW50c1RleHR1
cmUuY2xlYXIoKTsKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtKiBSZW5kZXJTdXJmYWNlQ2hy
b21pdW06OmxheWVyUmVuZGVyZXIoKQpAQCAtNzksMTA1ICs2NSw2IEBAIEZsb2F0UmVjdCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OmRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAogICAgIHJldHVy
biBkcmF3YWJsZUNvbnRlbnRSZWN0OwogfQogCi1ib29sIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6
cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSgpCi17Ci0gICAgSW50U2l6ZSByZXF1aXJlZFNpemUobV9j
b250ZW50UmVjdC5zaXplKCkpOwotICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlciA9
IGxheWVyUmVuZGVyZXIoKS0+cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCk7Ci0KLSAgICBp
ZiAoIW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IExheWVy
VGV4dHVyZTo6Y3JlYXRlKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCB0ZXh0dXJlTWFuYWdl
cik7Ci0KLSAgICBpZiAobV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHJlcXVp
cmVkU2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7Ci0gICAgICAgIG1fc2tpcHNEcmF3
ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1fc2tpcHNEcmF3
ID0gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyU3VyZmFjZUNocm9t
aXVtOjpyZWxlYXNlQ29udGVudHNUZXh0dXJlKCkKLXsKLSAgICBpZiAobV9za2lwc0RyYXcgfHwg
IW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZW50c1RleHR1
cmUtPnVucmVzZXJ2ZSgpOwotfQotCi12b2lkIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6ZHJhd1N1
cmZhY2UoQ0NMYXllckltcGwqIG1hc2tMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGRyYXdUcmFuc2Zvcm0pCi17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IGxh
eWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpOwotCi0gICAgaW50IHNoYWRlck1hdHJpeExvY2F0aW9u
ID0gLTE7Ci0gICAgaW50IHNoYWRlckFscGhhTG9jYXRpb24gPSAtMTsKLSAgICBjb25zdCBSZW5k
ZXJTdXJmYWNlQ2hyb21pdW06OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnJl
bmRlclN1cmZhY2VQcm9ncmFtKCk7Ci0gICAgY29uc3QgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpN
YXNrUHJvZ3JhbSogbWFza1Byb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnJlbmRlclN1cmZhY2VN
YXNrUHJvZ3JhbSgpOwotICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVk
KCkpOwotICAgIGJvb2wgdXNlTWFzayA9IGZhbHNlOwotICAgIGlmIChtYXNrTGF5ZXIgJiYgbWFz
a0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewotICAgICAgICBpZiAoIW1hc2tMYXllci0+Ym91bmRz
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0M0QtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51c2VQcm9ncmFtKG1h
c2tQcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRl
eHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICAg
ICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFpKG1hc2tQcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgICAgICAgICBtX2Nv
bnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKLSAgICAgICAgICAgIEdMQyhjb250ZXh0M0Qs
IGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsK
LSAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFpKG1hc2tQcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVyTG9jYXRpb24oKSwgMSkpOwotICAgICAg
ICAgICAgbWFza0xheWVyLT5iaW5kQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgICAgICAgICBHTEMo
Y29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUwKSk7Ci0gICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1hc2tQcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOwotICAgICAgICAgICAgc2hhZGVyQWxw
aGFMb2NhdGlvbiA9IG1hc2tQcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24o
KTsKLSAgICAgICAgICAgIHVzZU1hc2sgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKCF1c2VNYXNrKSB7Ci0gICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICAgICAgbV9jb250ZW50c1RleHR1cmUtPmJp
bmRUZXh0dXJlKCk7Ci0gICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFp
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICAg
ICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhM
b2NhdGlvbigpOwotICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7Ci0gICAgfQotICAgIAotICAgIExheWVyQ2hyb21p
dW06OmRyYXdUZXh0dXJlZFF1YWQobGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCksIGxheWVyUmVu
ZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250
ZW50UmVjdC5oZWlnaHQoKSwgbV9kcmF3T3BhY2l0eSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiwgc2hhZGVyQWxwaGFMb2NhdGlv
bik7Ci19Ci0KLXZvaWQgUmVuZGVyU3VyZmFjZUNocm9taXVtOjpkcmF3KGNvbnN0IEludFJlY3Qm
KQotewotICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAg
IHJldHVybjsKLSAgICAvLyBGSVhNRTogQnkgdXNpbmcgdGhlIHNhbWUgUmVuZGVyU3VyZmFjZSBm
b3IgYm90aCB0aGUgY29udGVudCBhbmQgaXRzIHJlZmxlY3Rpb24sCi0gICAgLy8gaXQncyBjdXJy
ZW50bHkgbm90IHBvc3NpYmxlIHRvIGFwcGx5IGEgc2VwYXJhdGUgbWFzayB0byB0aGUgcmVmbGVj
dGlvbiBsYXllcgotICAgIC8vIG9yIGNvcnJlY3RseSBoYW5kbGUgb3BhY2l0eSBpbiByZWZsZWN0
aW9ucyAob3BhY2l0eSBtdXN0IGJlIGFwcGxpZWQgYWZ0ZXIgZHJhd2luZwotICAgIC8vIGJvdGgg
dGhlIGxheWVyIGFuZCBpdHMgcmVmbGVjdGlvbikuIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1
Y2UgeWV0IGFub3RoZXIgUmVuZGVyU3VyZmFjZQotICAgIC8vIHRvIGRyYXcgdGhlIGxheWVyIGFu
ZCBpdHMgcmVmbGVjdGlvbiBpbi4gRm9yIG5vdyB3ZSBvbmx5IGFwcGx5IGEgc2VwYXJhdGUgcmVm
bGVjdGlvbgotICAgIC8vIG1hc2sgaWYgdGhlIGNvbnRlbnRzIGRvbid0IGhhdmUgYSBtYXNrIG9m
IHRoZWlyIG93bi4KLSAgICBDQ0xheWVySW1wbCogcmVwbGljYU1hc2tMYXllciA9IG1fbWFza0xh
eWVyOwotICAgIGlmICghbV9tYXNrTGF5ZXIgJiYgbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVy
KCkpCi0gICAgICAgIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+bWFza0xheWVyKCk7Ci0KLSAgICBpZiAobV9vd25pbmdMYXllci0+cGFyZW50KCkgJiYg
bV9vd25pbmdMYXllci0+cGFyZW50KCktPnVzZXNMYXllclNjaXNzb3IoKSkKLSAgICAgICAgbGF5
ZXJSZW5kZXJlcigpLT5zZXRTY2lzc29yVG9SZWN0KG1fc2Npc3NvclJlY3QpOwotICAgIGVsc2UK
LSAgICAgICAgR0xDKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyKCkt
PmNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0K
LQotICAgIC8vIFJlZmxlY3Rpb24gZHJhd3MgYmVmb3JlIHRoZSBsYXllci4KLSAgICBpZiAobV9v
d25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAgICAgIGRyYXdTdXJmYWNlKHJlcGxpY2FN
YXNrTGF5ZXIsIG1fcmVwbGljYURyYXdUcmFuc2Zvcm0pOwotCi0gICAgZHJhd1N1cmZhY2UobV9t
YXNrTGF5ZXIsIG1fZHJhd1RyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgUmVuZGVyU3VyZmFjZUNocm9t
aXVtOjpjbGVhckxheWVyTGlzdCgpCi17Ci0gICAgbV9sYXllckxpc3QuY2xlYXIoKTsKLX0KLQog
U3RyaW5nIFJlbmRlclN1cmZhY2VDaHJvbWl1bTo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJTdXJmYWNlKGlkPSVkLG93bmVyPSVzKSIsIG1fb3duaW5n
TGF5ZXItPmlkKCksIG1fb3duaW5nTGF5ZXItPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1JlbmRlclN1
cmZhY2VDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKaW5kZXggMWQyY2I2MjNmOWIxYzIyMzY1N2VkMGMw
MGE0ZGY1NDJjODVjNGFmZC4uYzM0ZWRhZTFhZjdmZWQ4ZDVjODI5YTU0NzJiMTM3ODIzM2VlNDYy
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUmVuZGVyU3VyZmFjZUNocm9taXVtLmgKQEAgLTM5LDE0ICszOSwxNCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgTGF5
ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyVGV4
dHVyZTsKIAogY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShSZW5kZXJTdXJmYWNlQ2hyb21pdW0pOwogcHVibGljOgotICAgIGV4cGxpY2l0IFJl
bmRlclN1cmZhY2VDaHJvbWl1bShDQ0xheWVySW1wbCopOworICAgIGV4cGxpY2l0IFJlbmRlclN1
cmZhY2VDaHJvbWl1bShMYXllckNocm9taXVtKik7CiAgICAgflJlbmRlclN1cmZhY2VDaHJvbWl1
bSgpOwogCiAgICAgYm9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKCk7CkBAIC02MCw5ICs2MCw2
IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIFJl
bmRlclN1cmZhY2UgaW5jbHVkaW5nIGFueSByZWZsZWN0aW9uLgogICAgIEZsb2F0UmVjdCBkcmF3
YWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7CiAKLSAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBs
PiA+JiBsYXllckxpc3QoKSB7IHJldHVybiBtX2xheWVyTGlzdDsgfQotICAgIHZvaWQgY2xlYXJM
YXllckxpc3QoKTsKLQogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50UmVjdDsgfQogICAgIHZvaWQgc2V0Q29udGVudFJlY3QoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpIHsgbV9jb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OyB9CiAKQEAg
LTcyLDkgKzY5LDYgQEAgcHVibGljOgogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBk
cmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9CiAgICAgdm9p
ZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNm
b3JtKSB7IG1fZHJhd1RyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm07IH0KIAotICAgIENDTGF5ZXJJ
bXBsKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllcjsgfQotICAgIHZvaWQg
c2V0TWFza0xheWVyKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNr
TGF5ZXI7IH0KLQogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX29yaWdpblRyYW5zZm9ybTsgfQogICAgIHZvaWQgc2V0T3Jp
Z2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0p
IHsgbV9vcmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KIApAQCAtODcsMjggKzgx
LDI2IEBAIHB1YmxpYzoKICAgICBib29sIHNraXBzRHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tp
cHNEcmF3OyB9CiAgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lw
c0RyYXcgPSBza2lwc0RyYXc7IH0KIAotICAgIExheWVyVGV4dHVyZSogY29udGVudHNUZXh0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KKyAgICB2b2lkIGNs
ZWFyTGF5ZXJMaXN0KCkgeyBtX2xheWVyTGlzdC5jbGVhcigpOyB9CisgICAgVmVjdG9yPFJlZlB0
cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QoKSB7IHJldHVybiBtX2xheWVyTGlzdDsgfQog
Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50
U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8
VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYU1hc2s+IE1hc2tQ
cm9ncmFtOworICAgIHZvaWQgc2V0TWFza0xheWVyKExheWVyQ2hyb21pdW0qIG1hc2tMYXllcikg
eyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQogCiBwcml2YXRlOgogICAgIExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpOwotICAgIHZvaWQgZHJhd1N1cmZhY2UoQ0NMYXll
ckltcGwqIG1hc2tMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zv
cm0pOwogCi0gICAgQ0NMYXllckltcGwqIG1fb3duaW5nTGF5ZXI7Ci0gICAgQ0NMYXllckltcGwq
IG1fbWFza0xheWVyOworICAgIExheWVyQ2hyb21pdW0qIG1fb3duaW5nTGF5ZXI7CisgICAgTGF5
ZXJDaHJvbWl1bSogbV9tYXNrTGF5ZXI7CiAKICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAg
ICAgYm9vbCBtX3NraXBzRHJhdzsKIAotICAgIE93blB0cjxMYXllclRleHR1cmU+IG1fY29udGVu
dHNUZXh0dXJlOwogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9kcmF3VHJhbnNmb3JtOwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcmVwbGlj
YURyYXdUcmFuc2Zvcm07CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9vcmlnaW5UcmFuc2Zv
cm07CiAgICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OwotICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXll
ckltcGw+ID4gbV9sYXllckxpc3Q7CisgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
IG1fbGF5ZXJMaXN0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggM2U5ZTZkZDA0OGYyMjE1ZDI4OTQ5MTc1OTM0MWQ3ZTM3NmJjMGQyNy4uMmE4YzU1MWE4MGEy
ZDZmMWYyMDI2N2Q4Mjk0MjBlODVmN2NjZGUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC02MCw3ICs2MCw3IEBAIFRpbGVkTGF5ZXJDaHJvbWl1bTo6flRpbGVkTGF5ZXJD
aHJvbWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRpbGVkTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVh
dGUodGhpcywgaWQoKSk7CisgICAgcmV0dXJuIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZShpZCgp
KTsKIH0KIAogdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQpAQCAt
MTUwLDcgKzE1MCw3IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRJc01hc2soYm9vbCBp
c01hc2spCiAKIFRyYW5zZm9ybWF0aW9uTWF0cml4IFRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsaW5n
VHJhbnNmb3JtKCkgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0g
PSBjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgaWYgKGNvbnRlbnRCb3VuZHMo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJv
bml6ZXIuY3BwCmluZGV4IDZhZDRiMTEyZDJhNGNmN2VmMTE2Y2FmMTNkOTE0ZTM3YmJhYzcyMDgu
LmQwZmQwY2U1MjNkNjM4ODRiZTkzMmUxYmQ0MTY1ODJmMjU3NjJlNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuY3BwCkBAIC03NCw4ICs3NCw2IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVt
CiAgICAgZWxzZQogICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVyKDApOwogCi0g
ICAgbGF5ZXItPnNldENDTGF5ZXJJbXBsKGNjTGF5ZXJJbXBsLmdldCgpKTsKLQogICAgIGxheWVy
LT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsKICAgICByZXR1cm4gY2NMYXll
ckltcGwucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
MmZjZDIxOTM4MmE3MGM1ZDc3MmI2YTZkMTMyNjUxMjU4MWUwMTg2ZC4uMjJiZDMwYzc4ZDQ2ODcy
YThiMjdhMGJlOGQxZThhMzY0ZGY5YjI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC02OSw3ICs2OSw3IEBAIFZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJv
bWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUo
dGhpcywgbV9sYXllcklkKTsKKyAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKG1f
bGF5ZXJJZCk7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkZWxldGVUZXh0dXJlc0lu
VXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAppbmRleCA3MTI1Yjk2ODA3
YjQwZmMzNGViMWM4NGU3YTlkOTgzMTc1YTE4M2ViLi44NjVmZDcyNGU1ZDg2YjI1YTM0N2QwNGM0
MTgzOGM0YzVmYzA5OTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCkBA
IC0yOSwxNSArMjksMTQgQEAKIAogI2luY2x1ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAK
LSNpbmNsdWRlICJDYW52YXNMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ0NhbnZhc0xh
eWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkK
LSAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKK0NDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZh
c0xheWVySW1wbChpbnQgaWQpCisgICAgOiBDQ0xheWVySW1wbChpZCkKICAgICAsIG1fdGV4dHVy
ZUlkKDApCiAgICAgLCBtX2hhc0FscGhhKHRydWUpCiAgICAgLCBtX3ByZW11bHRpcGxpZWRBbHBo
YSh0cnVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggYzE3YWY1ZmM3ZWJj
ZTI1MGEzNmMzNmI4Y2U1ODExOTBlZTkxM2E5Ny4uZDg1ZWJhOGRlODgzYWJlN2UwZTA5ZTU3ZTQw
MDFmZjBmNmM0ZmE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC0zNCw5
ICszNCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NDYW52YXNMYXllckltcGwg
OiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEND
Q2FudmFzTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NhbnZhc0xheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwob3duZXIs
IGlkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwoaWQp
KTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NDYW52YXNMYXllckltcGwoKTsKIApAQCAtNTAsNyAr
NTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhhKSB7IG1f
aGFzQWxwaGEgPSBoYXNBbHBoYTsgfQogICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJv
b2wgcHJlbXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlw
bGllZEFscGhhOyB9CiBwcml2YXRlOgotICAgIENDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qLCBpbnQpOworICAgIGV4cGxpY2l0IENDQ2FudmFzTGF5ZXJJbXBsKGludCk7CiAKICAgICB1
bnNpZ25lZCBtX3RleHR1cmVJZDsKICAgICBib29sIG1faGFzQWxwaGE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKaW5kZXggMjRlOWI1ZjllZjBkMjA3OGI0YjFiN2UzZDhmNjg0MTgwMjY5NTJiMC4u
M2NlYWQ0YzEyYzM1NTEyZjg1ODkzNGU1OWNmYTEwMTAyNDE3MTdiNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgotI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgewpAQCAtNjAsOSArNTksOCBAQCB2
b2lkIHRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG0pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NMYXllckltcGw6OkND
TGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCi0gICAgOiBtX293bmVyKG93
bmVyKQotICAgICwgbV9wYXJlbnQoMCkKK0NDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChpbnQgaWQp
CisgICAgOiBtX3BhcmVudCgwKQogICAgICwgbV9sYXllcklkKGlkKQogICAgICwgbV9hbmNob3JQ
b2ludCgwLjUsIDAuNSkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCkBAIC04Myw4ICs4MSw2IEBA
IENDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQog
CiBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKIHsKLSAgICBpZiAobV9vd25lcikKLSAgICAg
ICAgbV9vd25lci0+c2V0Q0NMYXllckltcGwoMCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OmFk
ZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNoaWxkKQpAQCAtMTIyLDE2ICsxMTgsMTYg
QEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21p
dW0qIHJlbmRlcmVyKQogICAgIG1fbGF5ZXJSZW5kZXJlciA9IHJlbmRlcmVyOwogfQogCi1SZW5k
ZXJTdXJmYWNlQ2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKK3Zv
aWQgQ0NMYXllckltcGw6OmNyZWF0ZVJlbmRlclN1cmZhY2UoKQogewotICAgIG1fcmVuZGVyU3Vy
ZmFjZSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlQ2hyb21pdW0odGhpcykpOwotICAgIHJl
dHVybiBtX3JlbmRlclN1cmZhY2UuZ2V0KCk7CisgICAgQVNTRVJUKCFtX3JlbmRlclN1cmZhY2Up
OworICAgIG1fcmVuZGVyU3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2UodGhp
cykpOwogfQogCi1ib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCgpCiti
b29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50RHJhd3NDb250ZW50KCkKIHsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
Y2hpbGRyZW5baV0tPmRyYXdzQ29udGVudCgpIHx8IG1fY2hpbGRyZW5baV0tPmRlc2NlbmRhbnRz
RHJhd3NDb250ZW50KCkpCisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kcmF3c0NvbnRlbnQo
KSB8fCBtX2NoaWxkcmVuW2ldLT5kZXNjZW5kYW50RHJhd3NDb250ZW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQyLDE5ICsxMzgs
OCBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotdm9pZCBDQ0xheWVySW1wbDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCi17Ci0g
ICAgbV9vd25lci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwotfQotCi12b2lkIENDTGF5
ZXJJbXBsOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQotewotICAgIG1fb3duZXItPnVucmVz
ZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwotfQotCiB2b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVu
dHNUZXh0dXJlKCkKIHsKLSAgICBtX293bmVyLT5iaW5kQ29udGVudHNUZXh0dXJlKCk7CiB9CiAK
IHZvaWQgQ0NMYXllckltcGw6OmNsZWFudXBSZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
aW5kZXggYmQyNzZmZTgwOTA3NjcxNmE2OGQwOTY3N2NkYjFiNWE2NGY5MGZlMy4uZmZkN2FhNGZi
MjY2ZTBmODY5NDM0MTU0ZTcxNjBmZDUxZjM5Y2M0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlRleHRTdHJl
YW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0ND
UmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00MCwxMyArNDEs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3Mg
TGF5ZXJSZW5kZXJlckNocm9taXVtOwotY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOwogCiBj
bGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9t
aXVtKiBvd25lciwgaW50IGlkKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBj
cmVhdGUoaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVy
SW1wbChvd25lciwgaWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1w
bChpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwogCkBAIC03MCw3ICs3
MCw2IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogICAgIHZvaWQgdW5yZXNl
cnZlQ29udGVudHNUZXh0dXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1
cmUoKTsKIApAQCAtNzksNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkcmF3c0NvbnRlbnQo
KSBjb25zdCB7IHJldHVybiBtX2RyYXdzQ29udGVudDsgfQogCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIGFueSBvZiB0aGUgbGF5ZXIncyBkZXNjZW5kYW50cyBoYXMgY29udGVudCB0byBkcmF3Lgot
ICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKTsKKyAgICBib29sIGRlc2NlbmRhbnRE
cmF3c0NvbnRlbnQoKTsKIAogICAgIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwogCkBAIC0xMjQs
OSArMTIzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KIAotICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogY3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotCi0gICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNl
LmdldCgpOyB9CisgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9CisgICAgdm9pZCBjcmVhdGVSZW5kZXJTdXJm
YWNlKCk7CiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7IG1fcmVuZGVyU3VyZmFjZS5j
bGVhcigpOyB9CiAKICAgICBmbG9hdCBkcmF3T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJh
d09wYWNpdHk7IH0KQEAgLTEzNCw5ICsxMzIsOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBJbnRS
ZWN0JiBzY2lzc29yUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Npc3NvclJlY3Q7IH0KICAgICB2
b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIHsgbV9zY2lzc29yUmVjdCA9
IHJlY3Q7IH0KLQotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQotICAgIHZvaWQgc2V0
VGFyZ2V0UmVuZGVyU3VyZmFjZShSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90
YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQorICAgIENDUmVuZGVyU3VyZmFjZSogdGFy
Z2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0UmVuZGVyU3VyZmFjZTsg
fQorICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHN1cmZh
Y2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0gc3VyZmFjZTsgfQogCiAgICAgY29uc3QgSW50
U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICB2b2lkIHNldEJv
dW5kcyhjb25zdCBJbnRTaXplJiBib3VuZHMpIHsgbV9ib3VuZHMgPSBib3VuZHM7IH0KQEAgLTE2
MCwxNSArMTU3LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3Bl
cnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCi0gICAgLy8gSEFDSyBUT0RP
IGZpeCB0aGlzCi0gICAgTGF5ZXJDaHJvbWl1bSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293
bmVyOyB9Ci0gICAgdm9pZCBjbGVhck93bmVyKCkgeyBtX293bmVyID0gMDsgfQotCiBwcm90ZWN0
ZWQ6Ci0gICAgLy8gRm9yIG5vdywgQ0NMYXllckltcGxzIGhhdmUgYSBiYWNrIHBvaW50ZXIgdG8g
dGhlaXIgTGF5ZXJDaHJvbWl1bS4KLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgYWZ0ZXIgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMzIGlzIGZpeGVkLgotICAg
IExheWVyQ2hyb21pdW0qIG1fb3duZXI7Ci0gICAgQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSos
IGludCk7CisgICAgZXhwbGljaXQgQ0NMYXllckltcGwoaW50KTsKIAogICAgIHN0YXRpYyB2b2lk
IHdyaXRlSW5kZW50KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KTsKIApAQCAtMjE2LDcgKzIwNiw3
IEBAIHByaXZhdGU6CiAgICAgLy8gZWl0aGVyIHRvIHRoaXMgbGF5ZXIgKGlmIG1fdGFyZ2V0UmVu
ZGVyU3VyZmFjZSA9PSBtX3JlbmRlclN1cmZhY2UpIG9yCiAgICAgLy8gdG8gYW4gYW5jZXN0b3Ig
b2YgdGhpcyBsYXllci4gVGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZSBkZXRlcm1pbmVzIHRoZQog
ICAgIC8vIGNvb3JkaW5hdGUgc3lzdGVtIHRoZSBsYXllcidzIHRyYW5zZm9ybXMgYXJlIHJlbGF0
aXZlIHRvLgotICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNl
OworICAgIENDUmVuZGVyU3VyZmFjZSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwogCiAgICAgLy8g
VGhlIGdsb2JhbCBkZXB0aCB2YWx1ZSBvZiB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4gVGhpcyB2
YWx1ZSBpcyB1c2VkCiAgICAgLy8gdG8gc29ydCBsYXllcnMgZnJvbSBiYWNrIHRvIGZyb250LgpA
QCAtMjM2LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBSZW5kZXIgc3VyZmFjZSBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBsYXllci4gVGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMKICAg
ICAvLyB3aWxsIHJlbmRlciB0byB0aGlzIHN1cmZhY2UuCi0gICAgT3duUHRyPFJlbmRlclN1cmZh
Y2VDaHJvbWl1bT4gbV9yZW5kZXJTdXJmYWNlOworICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U+
IG1fcmVuZGVyU3VyZmFjZTsKIAogICAgIC8vIEhpZXJhcmNoaWNhbCBib3VuZGluZyByZWN0IGNv
bnRhaW5pbmcgdGhlIGxheWVyIGFuZCBpdHMgZGVzY2VuZGFudHMuCiAgICAgSW50UmVjdCBtX2Ry
YXdhYmxlQ29udGVudFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCmluZGV4IGIyYzU1
NzQyZjc5ZjhkM2I1NzQxYmVjN2U1ODhlN2Q4YjFjYTI3ZDMuLmQxMDFjYzA3YTE0YzI5MzE4YmVl
MDMwODU5MWQzNTQyYmJhOTg5ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCkBAIC0y
Niw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAKLSNpbmNsdWRl
ICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgPGxpbWl0cy5o
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgQ0NMYXll
clNvcnRlcjo6Y3JlYXRlR3JhcGhOb2RlcyhMYXllckxpc3Q6Oml0ZXJhdG9yIGZpcnN0LCBMYXll
ckxpc3Q6Oml0ZXJhCiAgICAgZm9yIChMYXllckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmly
c3Q7IGl0IDwgbGFzdDsgaXQrKykgewogICAgICAgICBtX25vZGVzLmFwcGVuZChHcmFwaE5vZGUo
aXQtPmdldCgpKSk7CiAgICAgICAgIEdyYXBoTm9kZSYgbm9kZSA9IG1fbm9kZXMuYXQobV9ub2Rl
cy5zaXplKCkgLSAxKTsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJm
YWNlID0gbm9kZS5sYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBDQ1JlbmRlclN1cmZh
Y2UqIHJlbmRlclN1cmZhY2UgPSBub2RlLmxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgICAg
IGlmICghbm9kZS5sYXllci0+ZHJhd3NDb250ZW50KCkgJiYgIXJlbmRlclN1cmZhY2UpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCmlu
ZGV4IGRlZTFlZjBiN2U2YTJkZGFkMzc1Zjg5MWY5ZGUwNTY1OWQyODZjMjEuLjhhMjVjNWI1NDFl
MmUzNDUwYjkzZjhkMWZmY2Q2MjJjYjI0NzZiMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxh
eWVySW1wbC5jcHAKQEAgLTMxLDEzICszMSwxMiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJQ
bHVnaW5MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJ
bXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCi0gICAgOiBDQ0xheWVySW1wbChvd25l
ciwgaWQpCitDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwoaW50IGlkKQorICAg
IDogQ0NMYXllckltcGwoaWQpCiAgICAgLCBtX3RleHR1cmVJZCgwKQogewogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmgKaW5kZXggNmU0ODJkMTQ2NGIwZjhlNzg5MjA2MTc1ZDIxMjAz
YTg5ZTA4ZDI3My4uOWI0YzUzNjcyM2QyYWIxNmRkZDQyOTA2M2RjN2ZmNWI0ZjFkMTI3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCkBAIC0zNCw5ICszNCw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NQbHVnaW5MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllcklt
cGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDUGx1Z2luTGF5ZXJJbXBsPiBj
cmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDQ1BsdWdpbkxheWVySW1wbD4gY3JlYXRlKGludCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ0NQbHVnaW5MYXllckltcGwob3duZXIsIGlkKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ0NQbHVnaW5MYXllckltcGwoaWQpKTsKICAgICB9CiAgICAgdmly
dHVhbCB+Q0NQbHVnaW5MYXllckltcGwoKTsKIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsgfQog
CiBwcml2YXRlOgotICAgIENDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOwor
ICAgIGV4cGxpY2l0IENDUGx1Z2luTGF5ZXJJbXBsKGludCk7CiAKICAgICB1bnNpZ25lZCBtX3Rl
eHR1cmVJZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
MDYwYmNjMjg4Y2RiMDlmNjNmZTQ1YTRlNDdiNDI2ZTQ0Yjc0MzI0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmNwcApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDUmVu
ZGVyU3VyZmFjZS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRl
ICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisj
aW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKEND
TGF5ZXJJbXBsKiBvd25pbmdMYXllcikKKyAgICA6IG1fb3duaW5nTGF5ZXIob3duaW5nTGF5ZXIp
CisgICAgLCBtX21hc2tMYXllcigwKQorICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCisgICAgLCBt
X2RyYXdPcGFjaXR5KDEpCit7Cit9CisKK0NDUmVuZGVyU3VyZmFjZTo6fkNDUmVuZGVyU3VyZmFj
ZSgpCit7CisgICAgY2xlYW51cFJlc291cmNlcygpOworfQorCit2b2lkIENDUmVuZGVyU3VyZmFj
ZTo6Y2xlYW51cFJlc291cmNlcygpCit7CisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisKKyAgICBtX2Nv
bnRlbnRzVGV4dHVyZS5jbGVhcigpOworfQorCitMYXllclJlbmRlcmVyQ2hyb21pdW0qIENDUmVu
ZGVyU3VyZmFjZTo6bGF5ZXJSZW5kZXJlcigpCit7CisgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIp
OworICAgIHJldHVybiBtX293bmluZ0xheWVyLT5sYXllclJlbmRlcmVyKCk7Cit9CisKK0Zsb2F0
UmVjdCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAoreworICAg
IEZsb2F0UmVjdCBsb2NhbENvbnRlbnRSZWN0KC0wLjUgKiBtX2NvbnRlbnRSZWN0LndpZHRoKCks
IC0wLjUgKiBtX2NvbnRlbnRSZWN0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250ZW50UmVjdC5oZWlnaHQoKSk7Cisg
ICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBtX2RyYXdUcmFuc2Zvcm0ubWFwUmVj
dChsb2NhbENvbnRlbnRSZWN0KTsKKyAgICBpZiAobV9vd25pbmdMYXllci0+cmVwbGljYUxheWVy
KCkpCisgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QudW5pdGUobV9yZXBsaWNhRHJhd1RyYW5z
Zm9ybS5tYXBSZWN0KGxvY2FsQ29udGVudFJlY3QpKTsKKworICAgIHJldHVybiBkcmF3YWJsZUNv
bnRlbnRSZWN0OworfQorCitib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4
dHVyZSgpCit7CisgICAgSW50U2l6ZSByZXF1aXJlZFNpemUobV9jb250ZW50UmVjdC5zaXplKCkp
OworICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlciA9IGxheWVyUmVuZGVyZXIoKS0+
cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCk7CisKKyAgICBpZiAoIW1fY29udGVudHNUZXh0
dXJlKQorICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZSA9IExheWVyVGV4dHVyZTo6Y3JlYXRlKGxh
eWVyUmVuZGVyZXIoKS0+Y29udGV4dCgpLCB0ZXh0dXJlTWFuYWdlcik7CisKKyAgICBpZiAobV9j
b250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkU2l6ZSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpKSB7CisgICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQ29udGVudHNUZXh0
dXJlKCkKK3sKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZW50c1RleHR1cmUtPnVucmVzZXJ2ZSgpOworfQorCisK
K3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3U3VyZmFjZShDQ0xheWVySW1wbCogbWFza0xheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkKK3sKKyAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0KCk7CisK
KyAgICBpbnQgc2hhZGVyTWF0cml4TG9jYXRpb24gPSAtMTsKKyAgICBpbnQgc2hhZGVyQWxwaGFM
b2NhdGlvbiA9IC0xOworICAgIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbSogcHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXIoKS0+cmVuZGVyU3VyZmFjZVByb2dyYW0oKTsKKyAgICBjb25zdCBD
Q1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9ncmFtKiBtYXNrUHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIo
KS0+cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7CisgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJv
Z3JhbS0+aW5pdGlhbGl6ZWQoKSk7CisgICAgYm9vbCB1c2VNYXNrID0gZmFsc2U7CisgICAgaWYg
KG1hc2tMYXllciAmJiBtYXNrTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIGlmICgh
bWFza0xheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQzRC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0
M0QtPnVzZVByb2dyYW0obWFza1Byb2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICAgICAgR0xD
KGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCkpOworICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3Jt
MWkobWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsK
KyAgICAgICAgICAgIG1fY29udGVudHNUZXh0dXJlLT5iaW5kVGV4dHVyZSgpOworICAgICAgICAg
ICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMSkpOworICAgICAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51
bmlmb3JtMWkobWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkubWFza1NhbXBsZXJMb2NhdGlv
bigpLCAxKSk7CisgICAgICAgICAgICBtYXNrTGF5ZXItPmJpbmRDb250ZW50c1RleHR1cmUoKTsK
KyAgICAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICAgICAgICAgIHNoYWRlck1hdHJpeExvY2F0
aW9uID0gbWFza1Byb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAg
ICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0gbWFza1Byb2dyYW0tPmZyYWdtZW50U2hhZGVy
KCkuYWxwaGFMb2NhdGlvbigpOworICAgICAgICAgICAgdXNlTWFzayA9IHRydWU7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAoIXVzZU1hc2spIHsKKyAgICAgICAgR0xDKGNvbnRleHQzRCwg
Y29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICBtX2Nv
bnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUoKTsKKyAgICAgICAgR0xDKGNvbnRleHQzRCwgY29u
dGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRp
b24oKSwgMCkpOworICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRl
eFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24g
PSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKKyAgICB9CisKKyAg
ICBMYXllckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGxheWVyUmVuZGVyZXIoKS0+Y29udGV4
dCgpLCBsYXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbnRlbnRSZWN0Lndp
ZHRoKCksIG1fY29udGVudFJlY3QuaGVpZ2h0KCksIG1fZHJhd09wYWNpdHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24sIHNoYWRl
ckFscGhhTG9jYXRpb24pOworfQorCit2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhdyhjb25zdCBJ
bnRSZWN0JikKK3sKKyAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQor
ICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IEJ5IHVzaW5nIHRoZSBzYW1lIFJlbmRlclN1
cmZhY2UgZm9yIGJvdGggdGhlIGNvbnRlbnQgYW5kIGl0cyByZWZsZWN0aW9uLAorICAgIC8vIGl0
J3MgY3VycmVudGx5IG5vdCBwb3NzaWJsZSB0byBhcHBseSBhIHNlcGFyYXRlIG1hc2sgdG8gdGhl
IHJlZmxlY3Rpb24gbGF5ZXIKKyAgICAvLyBvciBjb3JyZWN0bHkgaGFuZGxlIG9wYWNpdHkgaW4g
cmVmbGVjdGlvbnMgKG9wYWNpdHkgbXVzdCBiZSBhcHBsaWVkIGFmdGVyIGRyYXdpbmcKKyAgICAv
LyBib3RoIHRoZSBsYXllciBhbmQgaXRzIHJlZmxlY3Rpb24pLiBUaGUgc29sdXRpb24gaXMgdG8g
aW50cm9kdWNlIHlldCBhbm90aGVyIFJlbmRlclN1cmZhY2UKKyAgICAvLyB0byBkcmF3IHRoZSBs
YXllciBhbmQgaXRzIHJlZmxlY3Rpb24gaW4uIEZvciBub3cgd2Ugb25seSBhcHBseSBhIHNlcGFy
YXRlIHJlZmxlY3Rpb24KKyAgICAvLyBtYXNrIGlmIHRoZSBjb250ZW50cyBkb24ndCBoYXZlIGEg
bWFzayBvZiB0aGVpciBvd24uCisgICAgQ0NMYXllckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSBt
X21hc2tMYXllcjsKKyAgICBpZiAoIW1fbWFza0xheWVyICYmIG1fb3duaW5nTGF5ZXItPnJlcGxp
Y2FMYXllcigpKQorICAgICAgICByZXBsaWNhTWFza0xheWVyID0gbV9vd25pbmdMYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpOworCisgICAgaWYgKG1fb3duaW5nTGF5ZXItPnBhcmVu
dCgpICYmIG1fb3duaW5nTGF5ZXItPnBhcmVudCgpLT51c2VzTGF5ZXJTY2lzc29yKCkpCisgICAg
ICAgIGxheWVyUmVuZGVyZXIoKS0+c2V0U2Npc3NvclRvUmVjdChtX3NjaXNzb3JSZWN0KTsKKyAg
ICBlbHNlCisgICAgICAgIEdMQyhsYXllclJlbmRlcmVyKCktPmNvbnRleHQoKSwgbGF5ZXJSZW5k
ZXJlcigpLT5jb250ZXh0KCktPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCkpOworCisgICAgLy8gUmVmbGVjdGlvbiBkcmF3cyBiZWZvcmUgdGhlIGxheWVyLgorICAgIGlm
IChtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgZHJhd1N1cmZhY2UocmVw
bGljYU1hc2tMYXllciwgbV9yZXBsaWNhRHJhd1RyYW5zZm9ybSk7CisKKyAgICBkcmF3U3VyZmFj
ZShtX21hc2tMYXllciwgbV9kcmF3VHJhbnNmb3JtKTsKK30KKworU3RyaW5nIENDUmVuZGVyU3Vy
ZmFjZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJT
dXJmYWNlKGlkPSVpLG93bmVyPSVzKSIsIG1fb3duaW5nTGF5ZXItPmlkKCksIG1fb3duaW5nTGF5
ZXItPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQo
VGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0g
aW5kZW50OyArK2kpCisgICAgICAgIHRzIDw8ICIgICI7Cit9CisKK3ZvaWQgQ0NSZW5kZXJTdXJm
YWNlOjpkdW1wU3VyZmFjZShUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCBuYW1lKCkgPDwgIlxuIjsKKwor
ICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMSk7CisgICAgdHMgPDwgImNvbnRlbnRSZWN0OiAo
IiA8PCBtX2NvbnRlbnRSZWN0LngoKSA8PCAiLCAiIDw8IG1fY29udGVudFJlY3QueSgpIDw8ICIs
ICIgPDwgbV9jb250ZW50UmVjdC53aWR0aCgpIDw8ICIsICIgPDwgbV9jb250ZW50UmVjdC5oZWln
aHQoKSA8PCAiXG4iOworfQorCitpbnQgQ0NSZW5kZXJTdXJmYWNlOjpvd25pbmdMYXllcklkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25pbmdMYXllciA/IG1fb3duaW5nTGF5ZXItPmlkKCkg
OiAwOworfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzcyNmRiNzgyMGRlYjViODllNjIy
ZDI0MTRhZmU4ZTE5YjFlNzFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTAsMCArMSwx
MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpZm5kZWYgQ0NSZW5kZXJTdXJmYWNlX2gKKyNkZWZpbmUgQ0NSZW5k
ZXJTdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQcm9ncmFt
QmluZGluZy5oIgorI2luY2x1ZGUgIlNoYWRlckNocm9taXVtLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5
ZXJJbXBsOworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworY2xhc3MgTGF5ZXJUZXh0dXJl
OworCitjbGFzcyBDQ1JlbmRlclN1cmZhY2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEND
UmVuZGVyU3VyZmFjZSk7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0NSZW5kZXJTdXJmYWNlKEND
TGF5ZXJJbXBsKik7CisgICAgfkNDUmVuZGVyU3VyZmFjZSgpOworCisgICAgYm9vbCBwcmVwYXJl
Q29udGVudHNUZXh0dXJlKCk7CisgICAgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Cisg
ICAgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgdm9pZCBkcmF3KGNvbnN0IEludFJlY3Qm
IHRhcmdldFN1cmZhY2VSZWN0KTsKKworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgdm9p
ZCBkdW1wU3VyZmFjZShUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CisKKyAgICBGbG9h
dFBvaW50IGNvbnRlbnRSZWN0Q2VudGVyKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KG1fY29u
dGVudFJlY3QpLmNlbnRlcigpOyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgZW5j
bG9zZXMgdGhlIFJlbmRlclN1cmZhY2UgaW5jbHVkaW5nIGFueSByZWZsZWN0aW9uLgorICAgIEZs
b2F0UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7CisKKyAgICBmbG9hdCBkcmF3T3Bh
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KKyAgICB2b2lkIHNldERyYXdP
cGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KKworICAg
IHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSkgeyBtX2RyYXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CisgICAgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdUcmFuc2Zvcm07IH0KKworICAgIHZvaWQgc2V0UmVwbGljYURyYXdUcmFuc2Zvcm0oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FEcmF3VHJhbnNmb3JtKSB7IG1fcmVwbGljYURy
YXdUcmFuc2Zvcm0gPSByZXBsaWNhRHJhd1RyYW5zZm9ybTsgfQorICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiByZXBsaWNhRHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
bGljYURyYXdUcmFuc2Zvcm07IH0KKworICAgIHZvaWQgc2V0T3JpZ2luVHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0pIHsgbV9vcmlnaW5UcmFuc2Zv
cm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
b3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5UcmFuc2Zvcm07IH0KKwor
ICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9z
Y2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0OyB9CisgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CisKKyAgICB2b2lkIHNldENvbnRl
bnRSZWN0KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KSB7IG1fY29udGVudFJlY3QgPSBjb250
ZW50UmVjdDsgfQorICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZW50UmVjdDsgfQorCisgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0Ry
YXcpIHsgbV9za2lwc0RyYXcgPSBza2lwc0RyYXc7IH0KKyAgICBib29sIHNraXBzRHJhdygpIGNv
bnN0IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9CisKKyAgICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCkg
eyBtX2xheWVyTGlzdC5jbGVhcigpOyB9CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4g
PiYgbGF5ZXJMaXN0KCkgeyByZXR1cm4gbV9sYXllckxpc3Q7IH0KKworICAgIHZvaWQgc2V0TWFz
a0xheWVyKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7
IH0KKworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFn
bWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJvZ3JhbTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5k
aW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrPiBN
YXNrUHJvZ3JhbTsKKworICAgIExheWVyVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KKworICAgIGludCBvd25pbmdMYXll
cklkKCkgY29uc3Q7Citwcml2YXRlOgorICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlcigpOworICAgIHZvaWQgZHJhd1N1cmZhY2UoQ0NMYXllckltcGwqIG1hc2tMYXllciwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pOworCisgICAgQ0NMYXll
ckltcGwqIG1fb3duaW5nTGF5ZXI7CisgICAgQ0NMYXllckltcGwqIG1fbWFza0xheWVyOworCisg
ICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0OworICAgIGJvb2wgbV9za2lwc0RyYXc7CisKKyAgICBP
d25QdHI8TGF5ZXJUZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsKKyAgICBmbG9hdCBtX2RyYXdP
cGFjaXR5OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fb3JpZ2luVHJhbnNmb3JtOworICAgIEludFJlY3QgbV9zY2lzc29yUmVj
dDsKKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IG1fbGF5ZXJMaXN0OworfTsKKwor
fQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IDgwM2JhMDZkNTYxOTdkMjhhYWU1NWE3
OGM1YmNkMTFlMTI0NzdiNWUuLmZjMTAzZWFkY2FiMmU5ZmEzYTAwNjc0ZWZjYmRkM2IwZGRkMTU4
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0yOSwxNiArMjksMTQg
QEAKIAogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAotI2luY2x1ZGUgIkNvbnRl
bnRMYXllckNocm9taXVtLmgiCi0KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBMYXllclRleHR1cmU7CiAKLUNDVGlsZWRMYXll
ckltcGw6OkNDVGlsZWRMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKLSAg
ICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKK0NDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXll
ckltcGwoaW50IGlkKQorICAgIDogQ0NMYXllckltcGwoaWQpCiAgICAgLCBtX3RpbGVyKDApCiB7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggYjBkMTAzMWZiYjdiOGY4MGY0
NzhhYzgxM2M4ZjI3MjlkYzg5YTkxNS4uNzM0NmJiN2U3ZDZmYTZiYzhjYTFlYmNmMjljYzU4NDlm
MWVmNjNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAtMzMsOSArMzMsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDVGlsZWRMYXllckltcGwgOiBwdWJsaWMg
Q0NMYXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVGlsZWRMYXll
ckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENDVGlsZWRMYXllckltcGw+IGNyZWF0ZShpbnQgaWQpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENDVGlsZWRMYXllckltcGwob3duZXIsIGlkKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NUaWxlZExheWVySW1wbChpZCkpOwogICAgIH0KICAg
ICB2aXJ0dWFsIH5DQ1RpbGVkTGF5ZXJJbXBsKCk7CiAKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VGlsZXIoTGF5ZXJUaWxlckNocm9taXVtKiB0aWxlcikgeyBtX3RpbGVy
ID0gdGlsZXI7IH0KIAogcHJpdmF0ZToKLSAgICBDQ1RpbGVkTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qLCBpbnQgaWQpOworICAgIGV4cGxpY2l0IENDVGlsZWRMYXllckltcGwoaW50IGlkKTsKIAog
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdGlsaW5nVHJhbnNmb3JtOwogICAgIExheWVyVGls
ZXJDaHJvbWl1bSogbV90aWxlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5k
ZXggZjQ0YWJiMDYxMWRlYzdjZjgxNjAxNzg4YzljNDU1YmI1ZTk3OGE5YS4uMGM5MzkzMjE4YmYz
NDQ0YmNiYWRiMWRjODI4NzM0Mjc3NDIwNGMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5jcHAKQEAgLTU5LDggKzU5LDggQEAgY29uc3QgZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6
eXV2QWRqdXN0WzNdID0gewogICAgIC0wLjVmLAogfTsKIAotQ0NWaWRlb0xheWVySW1wbDo6Q0NW
aWRlb0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQotICAgIDogQ0NMYXll
ckltcGwob3duZXIsIGlkKQorQ0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChpbnQg
aWQpCisgICAgOiBDQ0xheWVySW1wbChpZCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oCmluZGV4IGZjMDdmNzcyZTYxOGM4OWM4ZTI0NGNhZmM1NThjMzdlOTljZWJiNmYuLmVl
OWQ0MjE2OTNhOWQxNzc3OTg0ZThiYjA2NzY2YTM2MDRlNTBjZTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmgKQEAgLTM4LDkgKzM4LDkgQEAgY2xhc3MgVmlkZW9GcmFtZVByb3ZpZGVy
OwogCiBjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJD
aHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5
ZXJJbXBsPiBjcmVhdGUoaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDQ1ZpZGVvTGF5ZXJJbXBsKG93bmVyLCBpZCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENDVmlkZW9MYXllckltcGwoaWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NWaWRlb0xh
eWVySW1wbCgpOwogCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHR1
cmUoc2l6ZV90LCBWaWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUpOwogCiBwcml2YXRlOgotICAg
IENDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CisgICAgZXhwbGljaXQgQ0NW
aWRlb0xheWVySW1wbChpbnQpOwogCiAgICAgdm9pZCBkcmF3WVVWKGNvbnN0IFlVVlByb2dyYW0q
KSBjb25zdDsKICAgICB2b2lkIGRyYXdSR0JBKGNvbnN0IFJHQkFQcm9ncmFtKikgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRl
c3QuY3BwCmluZGV4IDcwMjYyMGEwZjk0MDdkZmEzNTcxZmEzNTc0ODBlMTY0NWM4ZTI3YjEuLjhh
ZGY0NzY5OWQ0ODcwZGQ1NDk3YTgxNTJhM2Q0ZWIwY2NlYjNkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC0z
Niw5ICszNiw5IEBAIG5hbWVzcGFjZSB7CiAKIGNsYXNzIE1vY2tDQ0xheWVySW1wbCA6IHB1Ymxp
YyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TW9ja0NDTGF5
ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBsYXllcklkKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPE1vY2tDQ0xheWVySW1wbD4gY3JlYXRlKGludCBsYXllcklkKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2NrQ0NMYXllckltcGwob3duZXIsIGxh
eWVySWQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2NrQ0NMYXllckltcGwobGF5
ZXJJZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5Nb2NrQ0NMYXllckltcGwoKQogICAgIHsKQEAg
LTQ5LDggKzQ5LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q0NMYXllckRlc3RydWN0aW9uTGlz
dChWZWN0b3I8aW50PiogbGlzdCkgeyBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QgPSBsaXN0OyB9
CiAKIHByaXZhdGU6Ci0gICAgTW9ja0NDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBp
bnQgbGF5ZXJJZCkKLSAgICAgICAgOiBDQ0xheWVySW1wbChvd25lciwgbGF5ZXJJZCkKKyAgICBN
b2NrQ0NMYXllckltcGwoaW50IGxheWVySWQpCisgICAgICAgIDogQ0NMYXllckltcGwobGF5ZXJJ
ZCkKICAgICAgICAgLCBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QoMCkKICAgICB7CiAgICAgfQpA
QCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXll
ckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBNb2NrQ0NM
YXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOworICAgICAgICByZXR1cm4gTW9ja0ND
TGF5ZXJJbXBsOjpjcmVhdGUobV9sYXllcklkKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogY2NMYXllcikK
</data>

          </attachment>
      

    </bug>

</bugzilla>