<?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>58833</bug_id>
          
          <creation_ts>2011-04-18 14:50:23 -0700</creation_ts>
          <short_desc>[chromium] Move draw implementation for ContentLayerChromium/ImageLayerChromium to the appropriate CCLayerImpl subclass</short_desc>
          <delta_ts>2011-07-13 16:15:15 -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>64401</dependson>
    
    <dependson>64406</dependson>
          <blocked>58799</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>alokp</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>388064</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-18 14:50:23 -0700</bug_when>
    <thetext>As title says.  I&apos;m looking into this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428305</commentid>
    <comment_count>1</comment_count>
      <attachid>98785</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-27 14:26:25 -0700</bug_when>
    <thetext>Created attachment 98785
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428565</commentid>
    <comment_count>2</comment_count>
      <attachid>98785</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-06-27 19:03:48 -0700</bug_when>
    <thetext>Comment on attachment 98785
Patch

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

I&apos;m really excited that you&apos;re cleaning this up, because it&apos;s been a long time coming.

Did you sort out why changing the tile size was causing rendering issues?

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:178
&gt; +bool ImageLayerChromium::drawsContent() const
&gt;  {
&gt; -    if (!m_textureUpdater)
&gt; -        m_textureUpdater = ImageLayerTextureUpdater::create(layerRendererContext(), layerRenderer()-&gt;contextSupportsMapSub());
&gt; +    return m_contents;

I&apos;m curious why you needed an implementation of drawsContent for ImageLayer.  I could see adding a check for m_contents as an early out.  However, I think you might need to call the base class version too to catch cases like GraphicsLayerChromium::drawsContent() returning false or a really huge image layer being used as a mask that can&apos;t be drawn.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:49
&gt; +// When tiling is enabled, use tiles of this dimension squared.
&gt; +static int defaultTileSize = 256;

I suppose that this could wait for a follow-up patch, but I think the TiledLayerChromium-derived classes should manage their own tile sizes, so that image layers and content layers can have different behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428581</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-27 20:23:23 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 98785 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98785&amp;action=review
&gt; 
&gt; I&apos;m really excited that you&apos;re cleaning this up, because it&apos;s been a long time coming.
&gt; 
&gt; Did you sort out why changing the tile size was causing rendering issues?

No, but I&apos;m pretty sure it&apos;s orthogonal to this patch.  I&apos;ll try to investigate that in parallel.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:178
&gt; &gt; +bool ImageLayerChromium::drawsContent() const
&gt; &gt;  {
&gt; &gt; -    if (!m_textureUpdater)
&gt; &gt; -        m_textureUpdater = ImageLayerTextureUpdater::create(layerRendererContext(), layerRenderer()-&gt;contextSupportsMapSub());
&gt; &gt; +    return m_contents;
&gt; 
&gt; I&apos;m curious why you needed an implementation of drawsContent for ImageLayer.  I could see adding a check for m_contents as an early out.  However, I think you might need to call the base class version too to catch cases like GraphicsLayerChromium::drawsContent() returning false or a really huge image layer being used as a mask that can&apos;t be drawn.

drawsContent() was returning false for simple image layers that should render, I need to do some more digging to figure out why.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:49
&gt; &gt; +// When tiling is enabled, use tiles of this dimension squared.
&gt; &gt; +static int defaultTileSize = 256;
&gt; 
&gt; I suppose that this could wait for a follow-up patch, but I think the TiledLayerChromium-derived classes should manage their own tile sizes, so that image layers and content layers can have different behavior.

Agree on both points.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428918</commentid>
    <comment_count>4</comment_count>
      <attachid>98785</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-06-28 08:56:19 -0700</bug_when>
    <thetext>Comment on attachment 98785
Patch

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

lgtm

&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:164
&gt; +LayerTextureUpdater* ImageLayerChromium::textureUpdater() const

nit: move this to the header file

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:382
&gt; +static void paintLayerHelper(LayerChromium* layer, const IntRect&amp; targetRenderSurface)

nit: paintLayerContentsIfDirty may be a better name

&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:276
&gt; +    m_textureOrientation = textureUpdater-&gt;orientation();

ASSERT if all tiles are not being updated and orientation and texelformat changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429114</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-28 13:50:02 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 98785 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98785&amp;action=review
&gt; &gt; 
&gt; &gt; I&apos;m really excited that you&apos;re cleaning this up, because it&apos;s been a long time coming.
&gt; &gt; 
&gt; &gt; Did you sort out why changing the tile size was causing rendering issues?
&gt; 
&gt; No, but I&apos;m pretty sure it&apos;s orthogonal to this patch.  I&apos;ll try to investigate that in parallel.
&gt; 

It seems that the tiler can&apos;t handle non-square tiles smaller than the layer bounds.  If I make the default tile size 256x306 then I get weird distortion on compositing/color-matching/image-color-matching.html.  Interesting, but not directly related to this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429148</commentid>
    <comment_count>6</comment_count>
      <attachid>98785</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-28 14:33:27 -0700</bug_when>
    <thetext>Comment on attachment 98785
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:164
&gt;&gt; +LayerTextureUpdater* ImageLayerChromium::textureUpdater() const
&gt; 
&gt; nit: move this to the header file

no can do, ImageLayerTextureUpdater is declared in the .cpp so in the header there&apos;s no way for the compiler to know whether a ImageLayerTextureUpdater* actually is a LayerTextureUpdater* or not.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:382
&gt;&gt; +static void paintLayerHelper(LayerChromium* layer, const IntRect&amp; targetRenderSurface)
&gt; 
&gt; nit: paintLayerContentsIfDirty may be a better name

good idea

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerTilerChromium.cpp:276
&gt;&gt; +    m_textureOrientation = textureUpdater-&gt;orientation();
&gt; 
&gt; ASSERT if all tiles are not being updated and orientation and texelformat changes.

sure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429209</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-28 15:49:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp:178
&gt; &gt; &gt; +bool ImageLayerChromium::drawsContent() const
&gt; &gt; &gt;  {
&gt; &gt; &gt; -    if (!m_textureUpdater)
&gt; &gt; &gt; -        m_textureUpdater = ImageLayerTextureUpdater::create(layerRendererContext(), layerRenderer()-&gt;contextSupportsMapSub());
&gt; &gt; &gt; +    return m_contents;
&gt; &gt; 
&gt; &gt; I&apos;m curious why you needed an implementation of drawsContent for ImageLayer.  I could see adding a check for m_contents as an early out.  However, I think you might need to call the base class version too to catch cases like GraphicsLayerChromium::drawsContent() returning false or a really huge image layer being used as a mask that can&apos;t be drawn.
&gt; 
&gt; drawsContent() was returning false for simple image layers that should render, I need to do some more digging to figure out why.
&gt; 

Ah, the issue is that GraphicsLayer::drawsContent() returns false for simple composited images, as it should, because only the image layer draws.  It would make sense to return false for the other cases, though.  I&apos;ll see how reasonable that is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429217</commentid>
    <comment_count>8</comment_count>
      <attachid>98989</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-28 16:05:40 -0700</bug_when>
    <thetext>Created attachment 98989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429223</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-28 16:10:18 -0700</bug_when>
    <thetext>Addressed most review feedback:
- renamed the helper fn in LayerRendererChromium to paintLayerContentsIfDirty
- made ImageLayerChromium::drawsContent() check m_contents and the parent class&apos; ::drawsContent() to check for missing owner, bad tiling assumptions, etc. To do this I added a ContentLayerChromium::drawsContent() override to check for m_owner-&gt;drawsContent() since that check is only applicable to content layers


There&apos;s no good way to ASSERT() that the texel format or texture orientation only change if all of the tiles are updated since there&apos;s no simple way to define &apos;all the tiles&apos;. The code behaves the same way with this patch as it did before, anyhow, since the draw() implementation assumes that all tiles have the texture orientation and texel format as the updater.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430094</commentid>
    <comment_count>10</comment_count>
      <attachid>98989</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-06-29 19:03:04 -0700</bug_when>
    <thetext>Comment on attachment 98989
Patch

Looks really good!  If you don&apos;t mind holding off landing it until the memory reduction patches are in, it will make backporting them to M13 a lot simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433060</commentid>
    <comment_count>11</comment_count>
      <attachid>99890</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-06 15:00:35 -0700</bug_when>
    <thetext>Created attachment 99890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433063</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-06 15:01:58 -0700</bug_when>
    <thetext>Merge up to ToT.  I think https://bugs.webkit.org/show_bug.cgi?id=64009 is the last bug that Vangelis wanted to hold off on, and it shouldn&apos;t conflict with this patch, so as soon as that lands we should be good to go for this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435264</commentid>
    <comment_count>13</comment_count>
      <attachid>99890</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-07-11 16:04:17 -0700</bug_when>
    <thetext>Comment on attachment 99890
Patch

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

Unofficially, this looks good to me, other than that one nit.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:142
&gt;  void CCLayerImpl::draw()
&gt;  {
&gt; -    return m_owner-&gt;draw();
&gt; +    ASSERT_NOT_REACHED();
&gt;  }

Nit: If you don&apos;t want anyone to call this particular function, consider making it abstract.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435332</commentid>
    <comment_count>14</comment_count>
      <attachid>99890</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-07-11 17:30:59 -0700</bug_when>
    <thetext>Comment on attachment 99890
Patch

Looks good based on cursory review and Adrienne&apos;s and Vangelis&apos;s unofficial reviews. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435881</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-12 12:57:17 -0700</bug_when>
    <thetext>Committed r90842: &lt;http://trac.webkit.org/changeset/90842&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435888</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-12 12:59:35 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 99890 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=99890&amp;action=review
&gt; 
&gt; Unofficially, this looks good to me, other than that one nit.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:142
&gt; &gt;  void CCLayerImpl::draw()
&gt; &gt;  {
&gt; &gt; -    return m_owner-&gt;draw();
&gt; &gt; +    ASSERT_NOT_REACHED();
&gt; &gt;  }
&gt; 
&gt; Nit: If you don&apos;t want anyone to call this particular function, consider making it abstract.

Note for posterity:  This can&apos;t be abstract since we do instantiate CCLayerImpls (the base class), but the draw() call should be unreached since drawsContent() always returns false for these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436039</commentid>
    <comment_count>17</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-12 16:00:32 -0700</bug_when>
    <thetext>Patch was reverted, I was being a little sloppy with drawsContent() handling.  Updating patch on the way...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436047</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-12 16:16:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/90859</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436125</commentid>
    <comment_count>19</comment_count>
      <attachid>100599</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-12 17:56:31 -0700</bug_when>
    <thetext>Created attachment 100599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436126</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-12 17:59:56 -0700</bug_when>
    <thetext>Patch updated.  The change between the previous version that fixes the bug is changing LayerRendererChromium::updateCompositorResources() to check drawsContent() on the LayerChromium* instead of the CCLayerImpl*, since that bit hasn&apos;t been synchronized at the time the function is called.  Other changes to make things a bit safer/more reliable are:
- adding invalid values for the LayerTextureUpdater enums and initializing the values on LayerTilerChromium explicitly
- initializing CCLayerImpl::m_drawsContent explicitly (oops).

passes all tests on linux in release _and_ debug so should be good to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436129</commentid>
    <comment_count>21</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-07-12 18:05:52 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Patch updated.  The change between the previous version that fixes the bug is changing LayerRendererChromium::updateCompositorResources() to check drawsContent() on the LayerChromium* instead of the CCLayerImpl*, since that bit hasn&apos;t been synchronized at the time the function is called.  Other changes to make things a bit safer/more reliable are:
&gt; - adding invalid values for the LayerTextureUpdater enums and initializing the values on LayerTilerChromium explicitly
&gt; - initializing CCLayerImpl::m_drawsContent explicitly (oops).
&gt; 
&gt; passes all tests on linux in release _and_ debug so should be good to go.

Those changes unofficially look good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436687</commentid>
    <comment_count>22</comment_count>
      <attachid>100599</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-07-13 14:56:38 -0700</bug_when>
    <thetext>Comment on attachment 100599
Patch

Sounds fine. rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436743</commentid>
    <comment_count>23</comment_count>
      <attachid>100599</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 16:15:10 -0700</bug_when>
    <thetext>Comment on attachment 100599
Patch

Clearing flags on attachment: 100599

Committed r90963: &lt;http://trac.webkit.org/changeset/90963&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436744</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-13 16:15:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98785</attachid>
            <date>2011-06-27 14:26:25 -0700</date>
            <delta_ts>2011-06-28 16:05:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58833-20110627142624.patch</filename>
            <type>text/plain</type>
            <size>54343</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk2NDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NjhiZmVmZjA0YTRmZDk2
YzBmMjI4ZDBmYzM5YmI5N2ZhYzRjMzUxLi5iODE2MThlZDIxNTNiYWUxM2RlYjBiZTE2OTFkMzY2
OWNiZGM4N2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIwMTEtMDYtMjcgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgZHJhdyBpbXBsZW1lbnRh
dGlvbiBmb3IgQ29udGVudExheWVyQ2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtIHRvIHRoZSBh
cHByb3ByaWF0ZSBDQ0xheWVySW1wbCBzdWJjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzMKKworICAgICAgICBBZGRzIGEgVGlsZWRMYXll
ckNocm9taXVtIGNsYXNzIHRvIGhhbmRsZSB0aGUgdGlsaW5nIGxvZ2ljIHNoYXJlZCBieSBDb250
ZW50TGF5ZXJDaHJvbWl1bSBhbmQgSW1hZ2VMYXllckNocm9taXVtCisgICAgICAgIHNvIHRoYXQg
dGhleSBjYW4gYmUgc2libGluZ3MgaW4gdGhlIGNsYXNzIGhpZXJhcmNoeSBpbnN0ZWFkIG9mIGNo
aWxkcmVuLiBBbHNvIGFkZHMgYSBDQ1RpbGVkTGF5ZXJJbXBsIHRvIGhhbmRsZQorICAgICAgICB0
aGUgZHJhd2luZyByZXNwb25zaWJpbGl0aWVzIGZvciB0aWxlZCBsYXllcnMuCisKKyAgICAgICAg
VGlsZWRMYXllckNocm9taXVtIG1haW50YWlucyBhIHRpbGVyLCB0aWxpbmcgb3B0aW9ucywgYW5k
IGNhbGN1bGF0ZXMgdGhlIHRpbGluZyB0cmFuc2Zvcm0uIFN1YmNsYXNzZXMgYXJlCisgICAgICAg
IHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgYW4gYXBwcm9wcmlhdGUgdGV4dHVyZSB1cGRhdGVy
IGltcGxlbWVudGF0aW9uLiBDQ1RpbGVkTGF5ZXJJbXBsIHRha2VzIHRoZSB0aWxlciwKKyAgICAg
ICAgdGlsaW5nIHRyYW5zZm9ybSBhbmQgbGF5ZXIgcHJvcGVydGllcyBhbmQgZHJhd3MgdGhlIGxh
eWVyLiAgTG9uZ2VyIHRlcm0gaXQnZCBiZSBiZXR0ZXIgb2YgdGhlIENDVGlsZWRMYXllckltcGwK
KyAgICAgICAgb3duZWQgdGhlIHRpbGVyIGFuZCB0aGUgVGlsZWRMYXllckNocm9taXVtIG9ubHkg
b3duZWQgYW4gdXBkYXRlciwgYnV0IGdldHRpbmcgdGhlcmUgd2lsbCByZXF1aXJlIGNoYW5naW5n
IHRoZQorICAgICAgICB3YXkgdGlsZSBldmljdGlvbiB3b3Jrcy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
Q29udGVudExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudExheWVyQ2hyb21pdW06OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VMYXllckNocm9taXVtOjpJbWFnZUxheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjp0ZXh0dXJlVXBkYXRlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmNvbnRlbnRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OmNvbnRlbnRCb3VuZHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6dmlzaWJsZUxheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpwYWludExheWVy
SGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRM
YXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjp1
cGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OmRyYXdUaWxlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OlRpbGVkTGF5
ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06On5UaWxl
ZExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpj
cmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjpzZXRMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRM
YXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldFRpbGluZ09wdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldElzTWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlZExheWVyQ2hyb21pdW06OnRpbGluZ1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgorICAgICAgICAoV2ViQ29y
ZTo6d3JpdGVJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpk
dW1wTGF5ZXJQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpzZXREcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRyYXdz
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y29udGVudEJvdW5kcyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0Q29udGVudEJvdW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6ZG91YmxlU2lkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OnNldERvdWJsZVNpZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpDQ1RpbGVkTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGlsZWRMYXllckltcGw6On5DQ1RpbGVkTGF5ZXJJbXBsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxl
ZExheWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Rp
bGVkTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGlsZWRMYXllckltcGw6OnNldFRpbGluZ1RyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RpbGVkTGF5ZXJJbXBsOjpzZXRUaWxlcik6CisKIDIwMTEtMDUtMjUgIEphbWVzIFJvYmluc29u
ICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1
c3NlbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYmJhMTI5NWRhZThmNDM2NDYzM2E2N2U0M2NlZTAz
Y2JjZDNkYTdkYS4uZGYzOTk5MGEzZjRhMTUwZTYxNTkyNjdmOTI1YTFhMGNmNDEwMzY0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtNDE0MCw2ICs0MTQwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJh
bnNwYXJlbmN5V2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVHJhbnNwYXJlbmN5V2luLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwJywKQEAgLTQxNzMsNiArNDE3NSw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCA2ZTIyNWZkZTc4OTAyYTA4OWNlNDdhZGY2ZDU0
YmNjZGYzOWJlYmViLi44YzlmOWMwMmVlMjA5YThlNjA3ZTYyZGYzZDcwZDQ1MTc0NDg3ZDRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0zNCwyNiArMzQsMTIgQEAK
IAogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5
ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIK
LSNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzLmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1CcmlkZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKLSNpbmNsdWRl
ICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKLS8vIFN0YXJ0
IHRpbGluZyB3aGVuIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIGEgbGF5ZXIgYXJlIGxhcmdlciB0
aGFuIHRoaXMgc2l6ZS4KLXN0YXRpYyBpbnQgbWF4VW50aWxlZFNpemUgPSA1MTI7Ci0KLS8vIFdo
ZW4gdGlsaW5nIGlzIGVuYWJsZWQsIHVzZSB0aWxlcyBvZiB0aGlzIGRpbWVuc2lvbiBzcXVhcmVk
Lgotc3RhdGljIGludCBkZWZhdWx0VGlsZVNpemUgPSAyNTY7Ci0KLXVzaW5nIG5hbWVzcGFjZSBz
dGQ7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29udGVudExheWVyUGFpbnRlciA6
IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CkBAIC05MCw4ICs3Niw3IEBAIFBhc3NSZWZQ
dHI8Q29udGVudExheWVyQ2hyb21pdW0+IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGUoR3Jh
cGhpY3NMYXllckNocm9tCiB9CiAKIENvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50TGF5ZXJD
aHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogTGF5ZXJDaHJvbWl1
bShvd25lcikKLSAgICAsIG1fdGlsaW5nT3B0aW9uKENvbnRlbnRMYXllckNocm9taXVtOjpBdXRv
VGlsZSkKKyAgICA6IFRpbGVkTGF5ZXJDaHJvbWl1bShvd25lcikKIHsKIH0KIApAQCAtMTAwLDQw
ICs4NSwyNyBAQCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6fkNvbnRlbnRMYXllckNocm9taXVtKCkK
ICAgICBjbGVhbnVwUmVzb3VyY2VzKCk7CiB9CiAKLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06
OnBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KQor
dm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgSW50
UmVjdCYgbGF5ZXJSZWN0KQogewogICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7CiAgICAgQVNT
RVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKLSAgICB1cGRhdGVMYXllclNpemUobGF5ZXJCb3VuZHMo
KS5zaXplKCkpOworICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAKLSAgICBJ
bnRSZWN0IGxheWVyUmVjdCA9IHZpc2libGVMYXllclJlY3QodGFyZ2V0U3VyZmFjZVJlY3QpOwog
ICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRS
ZWN0IGRpcnR5ID0gZW5jbG9zaW5nSW50UmVjdChtX2RpcnR5UmVjdCk7Ci0gICAgZGlydHkuaW50
ZXJzZWN0KGxheWVyQm91bmRzKCkpOworICAgIGRpcnR5LmludGVyc2VjdChJbnRSZWN0KEludFBv
aW50KCksIGJvdW5kcygpKSk7CiAgICAgbV90aWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHkpOwog
CiAgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV90aWxl
ci0+cHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCwgbV90ZXh0dXJlVXBkYXRlci5nZXQoKSk7Cisg
ICAgbV90aWxlci0+cHJlcGFyZVRvVXBkYXRlKGxheWVyUmVjdCwgdGV4dHVyZVVwZGF0ZXIoKSk7
CiAgICAgbV9kaXJ0eVJlY3QgPSBGbG9hdFJlY3QoKTsKIH0KIAotdm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCi17Ci0gICAgbV90ZXh0dXJlVXBkYXRlci5jbGVh
cigpOwotICAgIG1fdGlsZXIuY2xlYXIoKTsKLSAgICBMYXllckNocm9taXVtOjpjbGVhbnVwUmVz
b3VyY2VzKCk7Ci19Ci0KLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVy
ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIExheWVyQ2hy
b21pdW06OnNldExheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcik7Ci0gICAgY3JlYXRlVGlsZXJJ
Zk5lZWRlZCgpOwotfQogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJl
VXBkYXRlcklmTmVlZGVkKCkKIHsKQEAgLTE0OCwxNTQgKzEyMCw1IEBAIHZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQogICAgIG1fdGV4dHVy
ZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUobGF5ZXJSZW5kZXJl
ckNvbnRleHQoKSwgQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBsYXllclJl
bmRlcmVyKCktPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKIH0KIAotVHJhbnNmb3JtYXRpb25N
YXRyaXggQ29udGVudExheWVyQ2hyb21pdW06OnRpbGluZ1RyYW5zZm9ybSgpCi17Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gY2NMYXllckltcGwoKS0+ZHJhd1RyYW5zZm9y
bSgpOwotICAgIC8vIFRpbGVyIGRyYXdzIGZyb20gdGhlIHVwcGVyIGxlZnQgY29ybmVyLiBUaGUg
ZHJhdyB0cmFuc2Zvcm0KLSAgICAvLyBzcGVjaWZpZXMgdGhlIG1pZGRsZSBvZiB0aGUgbGF5ZXIu
Ci0gICAgSW50U2l6ZSBzaXplID0gYm91bmRzKCk7Ci0gICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgt
c2l6ZS53aWR0aCgpIC8gMi4wLCAtc2l6ZS5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICByZXR1cm4g
dHJhbnNmb3JtOwotfQotCi1JbnRSZWN0IENvbnRlbnRMYXllckNocm9taXVtOjp2aXNpYmxlTGF5
ZXJSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KQotewotICAgIGlmICh0YXJn
ZXRTdXJmYWNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0YXJnZXRTdXJmYWNlUmVj
dDsKLQotICAgIGNvbnN0IEludFJlY3QgbGF5ZXJCb3VuZFJlY3QgPSBsYXllckJvdW5kcygpOwot
ICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9y
bSgpOwotCi0gICAgLy8gSXMgdGhpcyBsYXllciBmdWxseSBjb250YWluZWQgd2l0aGluIHRoZSB0
YXJnZXQgc3VyZmFjZT8KLSAgICBJbnRSZWN0IGxheWVySW5TdXJmYWNlU3BhY2UgPSB0cmFuc2Zv
cm0ubWFwUmVjdChsYXllckJvdW5kUmVjdCk7Ci0gICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0LmNv
bnRhaW5zKGxheWVySW5TdXJmYWNlU3BhY2UpKQotICAgICAgICByZXR1cm4gbGF5ZXJCb3VuZFJl
Y3Q7Ci0KLSAgICAvLyBJZiB0aGUgbGF5ZXIgZG9lc24ndCBmaWxsIHVwIHRoZSBlbnRpcmUgc3Vy
ZmFjZSwgdGhlbiBmaW5kIHRoZSBwYXJ0IG9mCi0gICAgLy8gdGhlIHN1cmZhY2UgcmVjdCB3aGVy
ZSB0aGUgbGF5ZXIgY291bGQgYmUgdmlzaWJsZS4gVGhpcyBhdm9pZHMgdHJ5aW5nIHRvCi0gICAg
Ly8gcHJvamVjdCBzdXJmYWNlIHJlY3QgcG9pbnRzIHRoYXQgYXJlIGJlaGluZCB0aGUgcHJvamVj
dGlvbiBwb2ludC4KLSAgICBJbnRSZWN0IG1pbmltYWxTdXJmYWNlUmVjdCA9IHRhcmdldFN1cmZh
Y2VSZWN0OwotICAgIG1pbmltYWxTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXJJblN1cmZhY2VT
cGFjZSk7Ci0KLSAgICAvLyBQcm9qZWN0IHRoZSBjb3JuZXJzIG9mIHRoZSB0YXJnZXQgc3VyZmFj
ZSByZWN0IGludG8gdGhlIGxheWVyIHNwYWNlLgotICAgIC8vIFRoaXMgYm91bmRpbmcgcmVjdGFu
Z2xlIG1heSBiZSBsYXJnZXIgdGhhbiBpdCBuZWVkcyB0byBiZSAoYmVpbmcKLSAgICAvLyBheGlz
LWFsaWduZWQpLCBidXQgaXMgYSByZWFzb25hYmxlIGZpbHRlciBvbiB0aGUgc3BhY2UgdG8gY29u
c2lkZXIuCi0gICAgLy8gTm9uLWludmVydGlibGUgdHJhbnNmb3JtcyB3aWxsIGNyZWF0ZSBhbiBl
bXB0eSByZWN0IGhlcmUuCi0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZVRv
TGF5ZXIgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gc3Vy
ZmFjZVRvTGF5ZXIucHJvamVjdFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChtaW5pbWFsU3VyZmFj
ZVJlY3QpKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICBsYXllclJlY3QuaW50ZXJzZWN0
KGxheWVyQm91bmRSZWN0KTsKLSAgICByZXR1cm4gbGF5ZXJSZWN0OwotfQotCi1JbnRSZWN0IENv
bnRlbnRMYXllckNocm9taXVtOjpsYXllckJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIGJvdW5kcygpKTsKLX0KLQotdm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJTaXplKGNvbnN0IEludFNpemUmIGxheWVyU2l6ZSkKLXsKLSAg
ICBpZiAoIW1fdGlsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IEludFNpemUgdGls
ZVNpemUobWluKGRlZmF1bHRUaWxlU2l6ZSwgbGF5ZXJTaXplLndpZHRoKCkpLCBtaW4oZGVmYXVs
dFRpbGVTaXplLCBsYXllclNpemUuaGVpZ2h0KCkpKTsKLQotICAgIC8vIFRpbGUgaWYgYm90aCBk
aW1lbnNpb25zIGxhcmdlLCBvciBhbnkgb25lIGRpbWVuc2lvbiBsYXJnZSBhbmQgdGhlIG90aGVy
Ci0gICAgLy8gZXh0ZW5kcyBpbnRvIGEgc2Vjb25kIHRpbGUuIFRoaXMgaGV1cmlzdGljIGFsbG93
cyBmb3IgbG9uZyBza2lubnkgbGF5ZXJzCi0gICAgLy8gKGUuZy4gc2Nyb2xsYmFycykgdGhhdCBh
cmUgTngxIHRpbGVzIHRvIG1pbmltaXplIHdhc3RlZCB0ZXh0dXJlIHNwYWNlLgotICAgIGNvbnN0
IGJvb2wgYW55RGltZW5zaW9uTGFyZ2UgPSBsYXllclNpemUud2lkdGgoKSA+IG1heFVudGlsZWRT
aXplIHx8IGxheWVyU2l6ZS5oZWlnaHQoKSA+IG1heFVudGlsZWRTaXplOwotICAgIGNvbnN0IGJv
b2wgYW55RGltZW5zaW9uT25lVGlsZSA9IGxheWVyU2l6ZS53aWR0aCgpIDw9IGRlZmF1bHRUaWxl
U2l6ZSB8fCBsYXllclNpemUuaGVpZ2h0KCkgPD0gZGVmYXVsdFRpbGVTaXplOwotICAgIGNvbnN0
IGJvb2wgYXV0b1RpbGVkID0gYW55RGltZW5zaW9uTGFyZ2UgJiYgIWFueURpbWVuc2lvbk9uZVRp
bGU7Ci0KLSAgICBib29sIGlzVGlsZWQ7Ci0gICAgaWYgKG1fdGlsaW5nT3B0aW9uID09IEFsd2F5
c1RpbGUpCi0gICAgICAgIGlzVGlsZWQgPSB0cnVlOwotICAgIGVsc2UgaWYgKG1fdGlsaW5nT3B0
aW9uID09IE5ldmVyVGlsZSkKLSAgICAgICAgaXNUaWxlZCA9IGZhbHNlOwotICAgIGVsc2UKLSAg
ICAgICAgaXNUaWxlZCA9IGF1dG9UaWxlZDsKLQotICAgIEludFNpemUgcmVxdWVzdGVkU2l6ZSA9
IGlzVGlsZWQgPyB0aWxlU2l6ZSA6IGxheWVyU2l6ZTsKLSAgICBjb25zdCBpbnQgbWF4U2l6ZSA9
IGxheWVyUmVuZGVyZXIoKS0+bWF4VGV4dHVyZVNpemUoKTsKLSAgICBJbnRTaXplIGNsYW1wZWRT
aXplID0gcmVxdWVzdGVkU2l6ZS5zaHJ1bmtUbyhJbnRTaXplKG1heFNpemUsIG1heFNpemUpKTsK
LSAgICBtX3RpbGVyLT5zZXRUaWxlU2l6ZShjbGFtcGVkU2l6ZSk7Ci19Ci0KLXZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OmRyYXcoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpCi17
Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gdGlsaW5nVHJhbnNm
b3JtKCk7Ci0gICAgSW50UmVjdCBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KHRhcmdldFN1
cmZhY2VSZWN0KTsKLSAgICBpZiAoIWxheWVyUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIG1fdGls
ZXItPmRyYXcobGF5ZXJSZWN0LCB0cmFuc2Zvcm0sIGNjTGF5ZXJJbXBsKCktPmRyYXdPcGFjaXR5
KCksIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOwotfQotCi1ib29sIENvbnRlbnRMYXllckNocm9t
aXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAotewotICAgIGlmICghbV9vd25lciB8fCAhbV9vd25l
ci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV90
aWxlcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAobV90aWxpbmdPcHRpb24gPT0g
TmV2ZXJUaWxlICYmIG1fdGlsZXItPm51bVRpbGVzKCkgPiAxKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gIW1fdGlsZXItPnNraXBzRHJhdygpOwotfQotCi12b2lkIENvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90aWxl
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgp
OwotCi0gICAgbV90aWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKAotICAgICAgICBs
YXllclJlbmRlcmVyKCksCi0gICAgICAgIEludFNpemUoZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0
VGlsZVNpemUpLAotICAgICAgICBMYXllclRpbGVyQ2hyb21pdW06Okhhc0JvcmRlclRleGVscyk7
Ci19Ci0KLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoKQotewotICAgIG1fdGlsZXItPnVwZGF0ZVJlY3QobV90ZXh0dXJlVXBkYXRlci5nZXQoKSk7
Ci19Ci0KLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldFRpbGluZ09wdGlvbihUaWxpbmdP
cHRpb24gb3B0aW9uKQotewotICAgIG1fdGlsaW5nT3B0aW9uID0gb3B0aW9uOwotICAgIHVwZGF0
ZUxheWVyU2l6ZShib3VuZHMoKSk7Ci19Ci0KLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmJp
bmRDb250ZW50c1RleHR1cmUoKQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB2YWxp
ZCBmb3Igc2luZ2xlIHRleHR1cmUgbGF5ZXJzLCBlLmcuIG1hc2tzLgotICAgIEFTU0VSVChtX3Rp
bGluZ09wdGlvbiA9PSBOZXZlclRpbGUpOwotICAgIEFTU0VSVChtX3RpbGVyKTsKLQotICAgIExh
eWVyVGV4dHVyZSogdGV4dHVyZSA9IG1fdGlsZXItPmdldFNpbmdsZVRleHR1cmUoKTsKLSAgICBB
U1NFUlQodGV4dHVyZSk7Ci0KLSAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOwotfQotCi12b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjpzZXRJc01hc2soYm9vbCBpc01hc2spCi17Ci0gICAgc2V0
VGlsaW5nT3B0aW9uKGlzTWFzayA/IE5ldmVyVGlsZSA6IEF1dG9UaWxlKTsKLX0KLQotc3RhdGlj
IHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCi17Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgIT0gaW5kZW50OyArK2kpCi0gICAgICAgIHRzIDw8ICIgICI7Ci19Ci0K
LXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Ci17Ci0gICAgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVy
UHJvcGVydGllcyh0cywgaW5kZW50KTsKLSAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAg
ICB0cyA8PCAic2tpcHNEcmF3OiAiIDw8ICghbV90aWxlciB8fCBtX3RpbGVyLT5za2lwc0RyYXco
KSkgPDwgIlxuIjsKLX0KLQogfQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGE1ZWVlNmMzYjhkZDE1ZGUx
MDUzZGZlYjQzZmEzYmNhNzc2OTA4YjYuLjE2ZTgxZmUyZjg4NTE1ZmJiMjhjYWQ4MjM5MGQyMWJk
YTQ1NGEzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaApAQCAtMzQsNyArMzQs
OCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUg
ImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Myw0
OCArNDQsMjMgQEAgY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOwogY2xhc3MgTGF5ZXJUZXh0dXJl
VXBkYXRlcjsKIAogLy8gQSBMYXllciB0aGF0IHJlcXVpcmVzIGEgR3JhcGhpY3NDb250ZXh0IHRv
IHJlbmRlciBpdHMgY29udGVudHMuCi1jbGFzcyBDb250ZW50TGF5ZXJDaHJvbWl1bSA6IHB1Ymxp
YyBMYXllckNocm9taXVtIHsKLSAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVt
OworY2xhc3MgQ29udGVudExheWVyQ2hyb21pdW0gOiBwdWJsaWMgVGlsZWRMYXllckNocm9taXVt
IHsKIHB1YmxpYzoKLSAgICBlbnVtIFRpbGluZ09wdGlvbiB7IEFsd2F5c1RpbGUsIE5ldmVyVGls
ZSwgQXV0b1RpbGUgfTsKLQogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbnRlbnRMYXllckNocm9t
aXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9IDApOwogCiAgICAgdmly
dHVhbCB+Q29udGVudExheWVyQ2hyb21pdW0oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzSWZEaXJ0eShjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCk7Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0SXNNYXNrKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVj
dCk7Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBJbnRSZWN0Jik7CiAKLXByb3RlY3RlZDoK
K3ByaXZhdGU6CiAgICAgZXhwbGljaXQgQ29udGVudExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXll
ckNocm9taXVtKiBvd25lcik7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFz
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgY2xlYW51cFJlc291cmNlcygpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwotCi0gICAgdmlydHVhbCBJ
bnRSZWN0IGxheWVyQm91bmRzKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpOwotCi0gICAgLy8gRm9yIGEgZ2l2ZW4gcmVuZGVyIHN1
cmZhY2UgcmVjdCB0aGF0IHRoaXMgbGF5ZXIgd2lsbCBiZSB0cmFuc2Zvcm1lZCBhbmQKLSAgICAv
LyBkcmF3biBpbnRvLCByZXR1cm4gdGhlIGxheWVyIHNwYWNlIHJlY3QgdGhhdCBpcyB2aXNpYmxl
IGluIHRoYXQgc3VyZmFjZS4KLSAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QoY29uc3QgSW50
UmVjdCYpOwogCi0gICAgdm9pZCB1cGRhdGVMYXllclNpemUoY29uc3QgSW50U2l6ZSYpOwotICAg
IHZvaWQgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0
dXJlVXBkYXRlcklmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0
aW9uKTsKKyAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlci5nZXQoKTsgfQogCiAgICAgT3duUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7Ci0gICAgT3duUHRyPExheWVyVGls
ZXJDaHJvbWl1bT4gbV90aWxlcjsKLSAgICBUaWxpbmdPcHRpb24gbV90aWxpbmdPcHRpb247CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCA2MmNmYzIxNWFlMTZk
MWU4ZGU0YjYzNTEzNjI0MGI1ZWE4MTRiOTgzLi45ZWYyNzBlOTRiMGM2OTIxZDkzMDk3Y2M5Yjdj
MTZmNzBhNTczYzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTExNSw5
ICsxMTUsOCBAQCBQYXNzUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gSW1hZ2VMYXllckNocm9t
aXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKgogfQogCiBJbWFnZUxheWVyQ2hyb21p
dW06OkltYWdlTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAg
IDogQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpCisgICAgOiBUaWxlZExheWVyQ2hyb21pdW0o
b3duZXIpCiAgICAgLCBtX2ltYWdlRm9yQ3VycmVudEZyYW1lKDApCi0gICAgLCBtX2NvbnRlbnRz
KDApCiB7CiB9CiAKQEAgLTEyNSw2ICsxMjQsMTIgQEAgSW1hZ2VMYXllckNocm9taXVtOjp+SW1h
Z2VMYXllckNocm9taXVtKCkKIHsKIH0KIAordm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OmNsZWFu
dXBSZXNvdXJjZXMoKQoreworICAgIG1fdGV4dHVyZVVwZGF0ZXIuY2xlYXIoKTsKKyAgICBUaWxl
ZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKK30KKwogdm9pZCBJbWFnZUxheWVy
Q2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50cykKIHsKICAgICAvLyBzZXRDb250
ZW50cygpIGN1cnJlbnRseSBnZXRzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBpcyBhbnkKQEAgLTE0
NSwxMSArMTUwLDkgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRp
cnR5KGNvbnN0IEludFJlY3QmKQogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogCiAgICAg
aWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZG93
bmNhc3QgaXMgYmFkLiBUaGUgZml4IGlzIHRvIG1ha2UgSW1hZ2VMYXllckNocm9taXVtIG5vdCBk
ZXJpdmUgZnJvbSBDb250ZW50TGF5ZXJDaHJvbWl1bS4KLSAgICAgICAgSW1hZ2VMYXllclRleHR1
cmVVcGRhdGVyKiBpbWFnZVRleHR1cmVVcGRhdGVyID0gc3RhdGljX2Nhc3Q8SW1hZ2VMYXllclRl
eHR1cmVVcGRhdGVyKj4obV90ZXh0dXJlVXBkYXRlci5nZXQoKSk7Ci0gICAgICAgIGltYWdlVGV4
dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpKTsKLSAgICAgICAgdXBkYXRlTGF5ZXJTaXplKGltYWdlVGV4dHVyZVVwZGF0
ZXItPmltYWdlU2l6ZSgpKTsKLSAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoMCwg
MCksIGltYWdlVGV4dHVyZVVwZGF0ZXItPmltYWdlU2l6ZSgpKTsKKyAgICAgICAgbV90ZXh0dXJl
VXBkYXRlci0+dXBkYXRlRnJvbUltYWdlKG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkpOworICAgICAgICB1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbigpOworICAg
ICAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpOwogICAg
ICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbV90aWxlci0+
aW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKICAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gSW50
UmVjdCgpOwpAQCAtMTU4LDQ5ICsxNjEsMjcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KGNvbnN0IEludFJlY3QmKQogICAgIH0KIH0KIAotdm9pZCBJbWFn
ZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQorTGF5ZXJUZXh0dXJl
VXBkYXRlciogSW1hZ2VMYXllckNocm9taXVtOjp0ZXh0dXJlVXBkYXRlcigpIGNvbnN0CiB7Ci0g
ICAgbV90aWxlci0+dXBkYXRlUmVjdChtX3RleHR1cmVVcGRhdGVyLmdldCgpKTsKKyAgICByZXR1
cm4gbV90ZXh0dXJlVXBkYXRlci5nZXQoKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06
OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBuZXdMYXllclJlbmRlcmVy
KQorSW50U2l6ZSBJbWFnZUxheWVyQ2hyb21pdW06OmNvbnRlbnRCb3VuZHMoKSBjb25zdAogewot
ICAgIGlmIChuZXdMYXllclJlbmRlcmVyICE9IGxheWVyUmVuZGVyZXIoKSkKLSAgICAgICAgbV90
ZXh0dXJlVXBkYXRlci5jbGVhcigpOwotICAgIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRMYXll
clJlbmRlcmVyKG5ld0xheWVyUmVuZGVyZXIpOworICAgIGlmICghbV9jb250ZW50cykKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKKyAgICByZXR1cm4gbV9jb250ZW50cy0+c2l6ZSgpOwogfQog
Ci12b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgp
Citib29sIEltYWdlTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fdGV4dHVyZVVwZGF0ZXIpCi0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShsYXllclJlbmRlcmVyQ29udGV4dCgpLCBsYXllclJl
bmRlcmVyKCktPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKKyAgICByZXR1cm4gbV9jb250ZW50
czsKIH0KIAotSW50UmVjdCBJbWFnZUxheWVyQ2hyb21pdW06OmxheWVyQm91bmRzKCkgY29uc3QK
K3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCkK
IHsKICAgICBpZiAoIW1fdGV4dHVyZVVwZGF0ZXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0gICAgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKiBpbWFnZVRleHR1cmVVcGRhdGVyID0gc3Rh
dGljX2Nhc3Q8SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyKj4obV90ZXh0dXJlVXBkYXRlci5nZXQo
KSk7Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VUZXh0dXJlVXBkYXRlci0+
aW1hZ2VTaXplKCkpOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBJbWFnZUxheWVyQ2hyb21p
dW06OnRpbGluZ1RyYW5zZm9ybSgpCi17Ci0gICAgLy8gVGlsZXIgZHJhd3MgZnJvbSB0aGUgdXBw
ZXIgbGVmdCBjb3JuZXIuIFRoZSBkcmF3IHRyYW5zZm9ybQotICAgIC8vIHNwZWNpZmllcyB0aGUg
bWlkZGxlIG9mIHRoZSBsYXllci4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0g
PSBjY0xheWVySW1wbCgpLT5kcmF3VHJhbnNmb3JtKCk7Ci0gICAgY29uc3QgSW50UmVjdCBzb3Vy
Y2VSZWN0ID0gbGF5ZXJCb3VuZHMoKTsKLSAgICBjb25zdCBJbnRTaXplIGRlc3RTaXplID0gYm91
bmRzKCk7Ci0KLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1kZXN0U2l6ZS53aWR0aCgpIC8gMi4w
LCAtZGVzdFNpemUuaGVpZ2h0KCkgLyAyLjApOwotCi0gICAgLy8gVGlsZXIgYWxzbyBkcmF3cyBh
dCB0aGUgb3JpZ2luYWwgY29udGVudCBzaXplLCBzbyByZXNjYWxlIHRoZSBvcmlnaW5hbAotICAg
IC8vIGltYWdlIGRpbWVuc2lvbnMgdG8gdGhlIGJvdW5kcyB0aGF0IGl0IGlzIG1lYW50IHRvIGJl
IGRyYXduIGF0LgotICAgIGZsb2F0IHNjYWxlWCA9IGRlc3RTaXplLndpZHRoKCkgLyBzdGF0aWNf
Y2FzdDxmbG9hdD4oc291cmNlUmVjdC5zaXplKCkud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVZ
ID0gZGVzdFNpemUuaGVpZ2h0KCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlUmVjdC5zaXpl
KCkuaGVpZ2h0KCkpOwotICAgIHRyYW5zZm9ybS5zY2FsZTNkKHNjYWxlWCwgc2NhbGVZLCAxLjBm
KTsKLQotICAgIHJldHVybiB0cmFuc2Zvcm07CisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJ
bWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShsYXllclJlbmRlcmVyQ29udGV4dCgpLCBs
YXllclJlbmRlcmVyKCktPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uaAppbmRleCAzMzEzYzE0ZTIwYmM1ZjYyMTI4NjA1NjBlMmZhOGFj
YjMzYzc4ZTA4Li40ZDJlMDQ3NWE4ZjAxMTBiYjJkZWIzNGZkZDAyMTA4NDc1ZDI2ZjY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNDQsMzQgKzQ0LDM2IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlOworY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVy
OwogCiAvLyBBIExheWVyIHRoYXQgY29udGFpbnMgb25seSBhbiBJbWFnZSBlbGVtZW50LgotY2xh
c3MgSW1hZ2VMYXllckNocm9taXVtIDogcHVibGljIENvbnRlbnRMYXllckNocm9taXVtIHsKK2Ns
YXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBUaWxlZExheWVyQ2hyb21pdW0gewogcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKICAgICB2aXJ0dWFsIH5JbWFnZUxheWVy
Q2hyb21pdW0oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eShjb25z
dCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50czsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
SWZEaXJ0eShjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2UpOwogCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuICJJbWFnZUxheWVyIjsgfQogCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVuZGVy
ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7Ci0KLSAgICB2aXJ0dWFsIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpOwotICAgIHZpcnR1YWwgSW50UmVjdCBsYXllckJvdW5k
cygpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIEltYWdlTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKTsKIAorICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2Vz
KCk7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKKyAg
ICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24pOworCisgICAgdmlydHVhbCBMYXll
clRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0OworICAgIHZpcnR1YWwgSW50
U2l6ZSBjb250ZW50Qm91bmRzKCkgY29uc3Q7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdl
Rm9yQ3VycmVudEZyYW1lOwogICAgIFJlZlB0cjxJbWFnZT4gbV9jb250ZW50czsKKworICAgIE93
blB0cjxJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGI2MTYyOGJiNjdhZDMwMWQ3YjNhMWZkYzVkY2Zl
YmU1ZDFmYmRjZDQuLjk2ZDVjYWYxOTQwM2QyZWZjYTJhNmUxOWIwNjkyMGE0OTgzOGI5OTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0yOTEsOSArMjkxLDExIEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgbGF5ZXItPnNl
dEFuY2hvclBvaW50KG1fYW5jaG9yUG9pbnQpOwogICAgIGxheWVyLT5zZXRBbmNob3JQb2ludFoo
bV9hbmNob3JQb2ludFopOwogICAgIGxheWVyLT5zZXRCb3VuZHMobV9ib3VuZHMpOworICAgIGxh
eWVyLT5zZXRDb250ZW50Qm91bmRzKGNvbnRlbnRCb3VuZHMoKSk7CiAgICAgbGF5ZXItPnNldERl
YnVnQm9yZGVyQ29sb3IobV9kZWJ1Z0JvcmRlckNvbG9yKTsKICAgICBsYXllci0+c2V0RGVidWdC
b3JkZXJXaWR0aChtX2RlYnVnQm9yZGVyV2lkdGgpOwogICAgIGxheWVyLT5zZXREb3VibGVTaWRl
ZChtX2RvdWJsZVNpZGVkKTsKKyAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGRyYXdzQ29udGVu
dCgpKTsKICAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJlcihtX2xheWVyUmVuZGVyZXIuZ2V0KCkp
OwogICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CiAgICAgbGF5
ZXItPnNldE5hbWUobV9uYW1lKTsKQEAgLTM4MSw3ICszODMsNyBAQCBQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPiBMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiAgICAgcmV0dXJuIEND
TGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKIH0KIAotQ0NMYXllckltcGwqIExh
eWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKCkKK0NDTGF5ZXJJbXBsKiBMYXllckNocm9taXVtOjpj
Y0xheWVySW1wbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY2NMYXllckltcGw7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKaW5kZXggYjRhMTEyZjBhMzQ4YmViMzZiZDU0NjAxZGIwZWRiZGU3ZWI2ZTcz
MC4uZjhjYjA3ODc2MTJjYjUzZGE0MDc5YTU2M2E5NDk3NTQwYzc4NDE3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaApAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEJvdW5kcyhj
b25zdCBJbnRTaXplJik7CiAgICAgY29uc3QgSW50U2l6ZSYgYm91bmRzKCkgY29uc3QgeyByZXR1
cm4gbV9ib3VuZHM7IH0KKyAgICB2aXJ0dWFsIEludFNpemUgY29udGVudEJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIGJvdW5kcygpOyB9CiAKICAgICB2b2lkIHNldENsZWFyc0NvbnRleHQoYm9vbCBj
bGVhcnMpIHsgbV9jbGVhcnNDb250ZXh0ID0gY2xlYXJzOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAg
ICAgYm9vbCBjbGVhcnNDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jbGVhcnNDb250ZXh0OyB9
CkBAIC0xNTgsNyArMTU5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2so
Ym9vbCkge30KICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JikgeyB9CiAKICAgICAvLyBUaGVzZSBleGlzdHMganVz
dCBmb3IgZGVidWdnaW5nICh2aWEgZHJhd0RlYnVnQm9yZGVyKCkpLgogICAgIHZvaWQgc2V0Qm9y
ZGVyQ29sb3IoY29uc3QgQ29sb3ImKTsKQEAgLTE2OSw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRCb3JkZXJXaWR0aChmbG9hdCk7CiAKICAgICAvLyBFdmVyeXRoaW5nIGZyb20gaGVy
ZSBkb3duIGluIHRoZSBwdWJsaWMgc2VjdGlvbiB3aWxsIG1vdmUgdG8gQ0NMYXllckltcGwuCi0g
ICAgQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBsKCk7CisgICAgQ0NMYXllckltcGwqIGNjTGF5ZXJJ
bXBsKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKEdyYXBoaWNz
Q29udGV4dDNEKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1hdHJpeCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNp
dHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA5NjU2YWQzYTQ2
ZDBlY2MzZmUyYjZmMWE0MmU4NDcyZjRlODQzOGRlLi5mMjI2NjZjNzA1ZjBkMjRhNDE4Yjc2MGQw
YzI5NjFlNjI1ZThiYjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
QEAgLTIwNiw3ICsyMDYsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RM
YXllcigpCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsOwogICAgIHNjcm9sbC50cmFu
c2xhdGUoLW1fdmlld3BvcnRWaXNpYmxlUmVjdC54KCksIC1tX3ZpZXdwb3J0VmlzaWJsZVJlY3Qu
eSgpKTsKIAotICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5kcmF3KG1fdmlld3BvcnRWaXNp
YmxlUmVjdCwgc2Nyb2xsLCAxLjBmLCBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyLmdldCgpKTsK
KyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+ZHJhdyhtX3ZpZXdwb3J0VmlzaWJsZVJlY3Qs
IHNjcm9sbCwgMS4wZik7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRWaWV3
cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKQEAgLTM0NSw2ICszNDUsNDYgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpCiAgICAgfQogfQogCitzdGF0aWMgSW50UmVjdCB2aXNpYmxlTGF5
ZXJSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25zdCBJbnRTaXplJiBi
b3VuZHMsIGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0aWxpbmdUcmFuc2Zvcm0pCit7CisgICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRhcmdldFN1cmZhY2VSZWN0OworCisgICAgY29uc3Qg
SW50UmVjdCBsYXllckJvdW5kUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5k
cyk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gdGlsaW5nVHJhbnNmb3Jt
OworCisgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHMud2lkdGgoKSAvIHN0YXRp
Y19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcy53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvdW5kcy5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVu
dEJvdW5kcy5oZWlnaHQoKSkpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3Vu
ZHMud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMuaGVpZ2h0KCkgLyAyLjApOworCisgICAg
Ly8gSXMgdGhpcyBsYXllciBmdWxseSBjb250YWluZWQgd2l0aGluIHRoZSB0YXJnZXQgc3VyZmFj
ZT8KKyAgICBJbnRSZWN0IGxheWVySW5TdXJmYWNlU3BhY2UgPSB0cmFuc2Zvcm0ubWFwUmVjdChs
YXllckJvdW5kUmVjdCk7CisgICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0LmNvbnRhaW5zKGxheWVy
SW5TdXJmYWNlU3BhY2UpKQorICAgICAgICByZXR1cm4gbGF5ZXJCb3VuZFJlY3Q7CisKKyAgICAv
LyBJZiB0aGUgbGF5ZXIgZG9lc24ndCBmaWxsIHVwIHRoZSBlbnRpcmUgc3VyZmFjZSwgdGhlbiBm
aW5kIHRoZSBwYXJ0IG9mCisgICAgLy8gdGhlIHN1cmZhY2UgcmVjdCB3aGVyZSB0aGUgbGF5ZXIg
Y291bGQgYmUgdmlzaWJsZS4gVGhpcyBhdm9pZHMgdHJ5aW5nIHRvCisgICAgLy8gcHJvamVjdCBz
dXJmYWNlIHJlY3QgcG9pbnRzIHRoYXQgYXJlIGJlaGluZCB0aGUgcHJvamVjdGlvbiBwb2ludC4K
KyAgICBJbnRSZWN0IG1pbmltYWxTdXJmYWNlUmVjdCA9IHRhcmdldFN1cmZhY2VSZWN0OworICAg
IG1pbmltYWxTdXJmYWNlUmVjdC5pbnRlcnNlY3QobGF5ZXJJblN1cmZhY2VTcGFjZSk7CisKKyAg
ICAvLyBQcm9qZWN0IHRoZSBjb3JuZXJzIG9mIHRoZSB0YXJnZXQgc3VyZmFjZSByZWN0IGludG8g
dGhlIGxheWVyIHNwYWNlLgorICAgIC8vIFRoaXMgYm91bmRpbmcgcmVjdGFuZ2xlIG1heSBiZSBs
YXJnZXIgdGhhbiBpdCBuZWVkcyB0byBiZSAoYmVpbmcKKyAgICAvLyBheGlzLWFsaWduZWQpLCBi
dXQgaXMgYSByZWFzb25hYmxlIGZpbHRlciBvbiB0aGUgc3BhY2UgdG8gY29uc2lkZXIuCisgICAg
Ly8gTm9uLWludmVydGlibGUgdHJhbnNmb3JtcyB3aWxsIGNyZWF0ZSBhbiBlbXB0eSByZWN0IGhl
cmUuCisgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZVRvTGF5ZXIgPSB0cmFu
c2Zvcm0uaW52ZXJzZSgpOworICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gc3VyZmFjZVRvTGF5ZXIu
cHJvamVjdFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChtaW5pbWFsU3VyZmFjZVJlY3QpKSkuZW5j
bG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICBsYXllclJlY3QuaW50ZXJzZWN0KGxheWVyQm91bmRS
ZWN0KTsKKyAgICByZXR1cm4gbGF5ZXJSZWN0OworfQorCisKK3N0YXRpYyB2b2lkIHBhaW50TGF5
ZXJIZWxwZXIoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlbmRl
clN1cmZhY2UpCit7CisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5
ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KHZpc2libGVMYXllclJlY3QodGFyZ2V0UmVuZGVyU3Vy
ZmFjZSwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+Y2NM
YXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpKSk7Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQogewogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VM
YXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkg
ewpAQCAtMzkyLDE0ICs0MzIsMTYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50
TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXkKICAgICAgICAg
ICAgIGlmICghc2Npc3NvclJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHRhcmdldFN1
cmZhY2VSZWN0LmludGVyc2VjdChzY2lzc29yUmVjdCk7CiAKLSAgICAgICAgICAgIGlmIChsYXll
ci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgICAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJ
ZkRpcnR5KHRhcmdldFN1cmZhY2VSZWN0KTsKLSAgICAgICAgICAgIGlmIChsYXllci0+bWFza0xh
eWVyKCkgJiYgbGF5ZXItPm1hc2tMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgICAg
ICAgICBsYXllci0+bWFza0xheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KHRhcmdldFN1cmZh
Y2VSZWN0KTsKLSAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgICAgICAgICBsYXllci0+
cmVwbGljYUxheWVyKCktPnBhaW50Q29udGVudHNJZkRpcnR5KHRhcmdldFN1cmZhY2VSZWN0KTsK
LSAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FM
YXllcigpLT5tYXNrTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigp
LT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCkt
Pm1hc2tMYXllcigpLT5wYWludENvbnRlbnRzSWZEaXJ0eSh0YXJnZXRTdXJmYWNlUmVjdCk7Cisg
ICAgICAgICAgICBwYWludExheWVySGVscGVyKGxheWVyLCB0YXJnZXRTdXJmYWNlUmVjdCk7CisK
KyAgICAgICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCisgICAgICAgICAgICAgICAgcGFp
bnRMYXllckhlbHBlcihsYXllci0+bWFza0xheWVyKCksIHRhcmdldFN1cmZhY2VSZWN0KTsKKwor
ICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBw
YWludExheWVySGVscGVyKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSwgdGFyZ2V0U3VyZmFjZVJlY3Qp
OworCisgICAgICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCisgICAgICAgICAgICAgICAgcGFpbnRMYXllckhlbHBl
cihsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLCB0YXJnZXRTdXJmYWNlUmVjdCk7
CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC05NzksNyArMTAyMSw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBsYXllci0+ZHJhdyh0YXJnZXRTdXJm
YWNlUmVjdCk7CisgICAgbGF5ZXItPmRyYXcodmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNl
UmVjdCwgbGF5ZXItPmJvdW5kcygpLCBsYXllci0+Y29udGVudEJvdW5kcygpLCBsYXllci0+ZHJh
d1RyYW5zZm9ybSgpKSk7CiAKICAgICAvLyBEcmF3IHRoZSBkZWJ1ZyBib3JkZXIgaWYgdGhlcmUg
aXMgb25lLgogICAgIGxheWVyLT5kcmF3RGVidWdCb3JkZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVy
Q2hyb21pdW0uY3BwCmluZGV4IGI5MDI0MTZiYTM3YzRiOTFiNTEzZDJmYjI0MDIzNmZhMDcyYjJj
MWMuLjJlNzczNGQ3OWQ3OGI5YjRiMDkyNWJhMTU2NTcwZjYzMTU0YjA5MWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUaWxlckNocm9taXVtLmNwcApAQCAtMjczLDYgKzI3Myw4IEBAIHZvaWQgTGF5ZXJUaWxl
ckNocm9taXVtOjp1cGRhdGVSZWN0KExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVy
KQogICAgICAgICByZXR1cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxh
eWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgbV90ZXh0dXJlT3JpZW50YXRpb24gPSB0ZXh0dXJl
VXBkYXRlci0+b3JpZW50YXRpb24oKTsKKyAgICBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1
cmVVcGRhdGVyLT5zYW1wbGVkVGV4ZWxGb3JtYXQobV90ZXh0dXJlRm9ybWF0KTsKIAogICAgIGlu
dCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b207CiAgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2Vz
KG1fdXBkYXRlUmVjdCwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKQEAgLTMzNywxNyArMzM5
LDE3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpzZXRMYXllclBvc2l0aW9uKGNvbnN0IElu
dFBvaW50JiBsYXllclBvc2l0aW9uKQogICAgIG1fbGF5ZXJQb3NpdGlvbiA9IGxheWVyUG9zaXRp
b247CiB9CiAKLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBm
bG9hdCBvcGFjaXR5LCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcikKK3ZvaWQg
TGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KQog
ewogICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV90aWxlcy5zaXplKCkgfHwgY29udGVudFJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzd2l0Y2ggKHRleHR1cmVVcGRhdGVy
LT5zYW1wbGVkVGV4ZWxGb3JtYXQobV90ZXh0dXJlRm9ybWF0KSkgeworICAgIHN3aXRjaCAobV9z
YW1wbGVkVGV4ZWxGb3JtYXQpIHsKICAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBs
ZWRUZXhlbEZvcm1hdFJHQkE6Ci0gICAgICAgIGRyYXdUaWxlcyhjb250ZW50UmVjdCwgZ2xvYmFs
VHJhbnNmb3JtLCBvcGFjaXR5LCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbSgpLCB0ZXh0
dXJlVXBkYXRlcik7CisgICAgICAgIGRyYXdUaWxlcyhjb250ZW50UmVjdCwgZ2xvYmFsVHJhbnNm
b3JtLCBvcGFjaXR5LCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRC
R1JBOgotICAgICAgICBkcmF3VGlsZXMoY29udGVudFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3Bh
Y2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW1Td2l6emxlKCksIHRleHR1cmVVcGRh
dGVyKTsKKyAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9w
YWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZSgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0z
NjYsNyArMzY4LDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06Omdyb3dMYXllclRvQ29udGFp
bihjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIH0KIAogdGVtcGxhdGUgPGNsYXNzIFQ+Ci12
b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBv
cGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBk
YXRlcikKK3ZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYg
Y29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0s
IGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0pCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOwogICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwpAQCAtNDA2LDcgKzQwOCw3
IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0CiAgICAgICAgICAgICBmbG9hdCB0ZXhTY2FsZVkg
PSB0aWxlUmVjdC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQ7CiAgICAgICAgICAgICAvLyBPcGVuR0wg
Y29vcmRpbmF0ZSBzeXN0ZW0gaXMgYm90dG9tLXVwLgogICAgICAgICAgICAgLy8gSWYgdGlsZSB0
ZXh0dXJlIGlzIHRvcC1kb3duLCB3ZSBuZWVkIHRvIGZsaXAgdGhlIHRleHR1cmUgY29vcmRpbmF0
ZXMuCi0gICAgICAgICAgICBpZiAodGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0aW9uKCkgPT0gTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uKSB7CisgICAgICAgICAgICBpZiAo
bV90ZXh0dXJlT3JpZW50YXRpb24gPT0gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVu
dGF0aW9uKSB7CiAgICAgICAgICAgICAgICAgdGV4VHJhbnNsYXRlWSA9IDEuMCAtIHRleFRyYW5z
bGF0ZVk7CiAgICAgICAgICAgICAgICAgdGV4U2NhbGVZICo9IC0xLjA7CiAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCmluZGV4IDRhMjZjOWY3ODM2YzYyMDBhMTcxZGMw
NzliNmI2YzNhOTI5Y2Q1NDIuLjlhMTU0NmFjNmNlYzc2MTA2MmFmZWQ2M2VjODdkNGI1Mjg3MDQz
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyVGlsZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oCkBAIC0zMSw2ICszMSw3IEBACiAKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlLmgiCisjaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC01OSw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAvLyBVcGRhdGUgaW52YWxpZCB0ZXh0dXJlcyB0
aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0IHByb3ZpZGVkIGluIHByZXBhcmVUb1VwZGF0
ZSgpLgogICAgIHZvaWQgdXBkYXRlUmVjdChMYXllclRleHR1cmVVcGRhdGVyKik7CiAgICAgLy8g
RHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVudCByZWN0LgotICAg
IHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBMYXllclRleHR1cmVVcGRhdGVyKik7CisgICAgdm9p
ZCBkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGZsb2F0IG9wYWNpdHkpOwogCiAgICAgaW50IG51bVRpbGVzKCkgY29uc3QgeyByZXR1
cm4gbV90aWxpbmdEYXRhLm51bVRpbGVzKCk7IH0KIApAQCAtMTA1LDcgKzEwNiw3IEBAIHByaXZh
dGU6CiAKICAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRS
ZWN0LgogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgotICAgIHZvaWQgZHJhd1RpbGVzKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIExheWVyVGV4dHVyZVVwZGF0ZXIqKTsKKyAgICB2b2lk
IGRyYXdUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtKTsKIAogICAgIHRlbXBs
YXRlIDxjbGFzcyBUPgogICAgIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQz
RCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01hdHJpeCwKQEAgLTE2MCw2ICsxNjEsOCBAQCBwcml2
YXRlOgogICAgIEludFJlY3QgbV9wYWludFJlY3Q7CiAgICAgSW50UmVjdCBtX3VwZGF0ZVJlY3Q7
CiAKKyAgICBMYXllclRleHR1cmVVcGRhdGVyOjpPcmllbnRhdGlvbiBtX3RleHR1cmVPcmllbnRh
dGlvbjsKKyAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgbV9zYW1w
bGVkVGV4ZWxGb3JtYXQ7CiAgICAgVGlsaW5nRGF0YSBtX3RpbGluZ0RhdGE7CiAKICAgICBMYXll
clJlbmRlcmVyQ2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhZWMyMmU0MzBjY2Y5N2VmYjMyMzhjN2ZjYWU2ZTllMzc5
YWYyZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0wLDAgKzEsMTg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiVGlsZWRMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVy
VGlsZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KKworLy8gU3RhcnQgdGlsaW5nIHdoZW4gdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgb2YgYSBsYXllciBhcmUgbGFyZ2VyIHRoYW4gdGhpcyBzaXplLgorc3RhdGljIGlu
dCBtYXhVbnRpbGVkU2l6ZSA9IDUxMjsKKworLy8gV2hlbiB0aWxpbmcgaXMgZW5hYmxlZCwgdXNl
IHRpbGVzIG9mIHRoaXMgZGltZW5zaW9uIHNxdWFyZWQuCitzdGF0aWMgaW50IGRlZmF1bHRUaWxl
U2l6ZSA9IDI1NjsKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitUaWxlZExheWVyQ2hyb21pdW06OlRpbGVkTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVy
Q2hyb21pdW0qIG93bmVyKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKKyAgICAsIG1fdGls
aW5nT3B0aW9uKEF1dG9UaWxlKQoreworfQorCitUaWxlZExheWVyQ2hyb21pdW06On5UaWxlZExh
eWVyQ2hyb21pdW0oKQoreworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUaWxlZExheWVy
Q2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKK3sKKyAgICByZXR1cm4gQ0NUaWxlZExheWVy
SW1wbDo6Y3JlYXRlKHRoaXMsIGlkKCkpOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
Y2xlYW51cFJlc291cmNlcygpCit7CisgICAgbV90aWxlci5jbGVhcigpOworICAgIExheWVyQ2hy
b21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKK30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQor
eworICAgIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcik7Cisg
ICAgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKQoreworICAgIGlmICghbV90aWxlcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY29uc3QgSW50U2l6ZSB0aWxlU2l6ZShtaW4oZGVmYXVsdFRp
bGVTaXplLCBjb250ZW50Qm91bmRzKCkud2lkdGgoKSksIG1pbihkZWZhdWx0VGlsZVNpemUsIGNv
bnRlbnRCb3VuZHMoKS5oZWlnaHQoKSkpOworCisgICAgLy8gVGlsZSBpZiBib3RoIGRpbWVuc2lv
bnMgbGFyZ2UsIG9yIGFueSBvbmUgZGltZW5zaW9uIGxhcmdlIGFuZCB0aGUgb3RoZXIKKyAgICAv
LyBleHRlbmRzIGludG8gYSBzZWNvbmQgdGlsZS4gVGhpcyBoZXVyaXN0aWMgYWxsb3dzIGZvciBs
b25nIHNraW5ueSBsYXllcnMKKyAgICAvLyAoZS5nLiBzY3JvbGxiYXJzKSB0aGF0IGFyZSBOeDEg
dGlsZXMgdG8gbWluaW1pemUgd2FzdGVkIHRleHR1cmUgc3BhY2UuCisgICAgY29uc3QgYm9vbCBh
bnlEaW1lbnNpb25MYXJnZSA9IGNvbnRlbnRCb3VuZHMoKS53aWR0aCgpID4gbWF4VW50aWxlZFNp
emUgfHwgY29udGVudEJvdW5kcygpLmhlaWdodCgpID4gbWF4VW50aWxlZFNpemU7CisgICAgY29u
c3QgYm9vbCBhbnlEaW1lbnNpb25PbmVUaWxlID0gY29udGVudEJvdW5kcygpLndpZHRoKCkgPD0g
ZGVmYXVsdFRpbGVTaXplIHx8IGNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSA8PSBkZWZhdWx0VGls
ZVNpemU7CisgICAgY29uc3QgYm9vbCBhdXRvVGlsZWQgPSBhbnlEaW1lbnNpb25MYXJnZSAmJiAh
YW55RGltZW5zaW9uT25lVGlsZTsKKworICAgIGJvb2wgaXNUaWxlZDsKKyAgICBpZiAobV90aWxp
bmdPcHRpb24gPT0gQWx3YXlzVGlsZSkKKyAgICAgICAgaXNUaWxlZCA9IHRydWU7CisgICAgZWxz
ZSBpZiAobV90aWxpbmdPcHRpb24gPT0gTmV2ZXJUaWxlKQorICAgICAgICBpc1RpbGVkID0gZmFs
c2U7CisgICAgZWxzZQorICAgICAgICBpc1RpbGVkID0gYXV0b1RpbGVkOworCisgICAgSW50U2l6
ZSByZXF1ZXN0ZWRTaXplID0gaXNUaWxlZCA/IHRpbGVTaXplIDogY29udGVudEJvdW5kcygpOwor
ICAgIGNvbnN0IGludCBtYXhTaXplID0gbGF5ZXJSZW5kZXJlcigpLT5tYXhUZXh0dXJlU2l6ZSgp
OworICAgIEludFNpemUgY2xhbXBlZFNpemUgPSByZXF1ZXN0ZWRTaXplLnNocnVua1RvKEludFNp
emUobWF4U2l6ZSwgbWF4U2l6ZSkpOworICAgIG1fdGlsZXItPnNldFRpbGVTaXplKGNsYW1wZWRT
aXplKTsKK30KKworYm9vbCBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX293bmVyIHx8ICFtX293bmVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3RpbGVyKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmIChtX3RpbGluZ09wdGlvbiA9PSBOZXZlclRpbGUgJiYgbV90aWxlci0+bnVt
VGlsZXMoKSA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhbV90aWxl
ci0+c2tpcHNEcmF3KCk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxl
cklmTmVlZGVkKCkKK3sKKyAgICBpZiAobV90aWxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpOworCisgICAgbV90aWxlciA9IExheWVyVGls
ZXJDaHJvbWl1bTo6Y3JlYXRlKAorICAgICAgICBsYXllclJlbmRlcmVyKCksCisgICAgICAgIElu
dFNpemUoZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0VGlsZVNpemUpLAorICAgICAgICBMYXllclRp
bGVyQ2hyb21pdW06Okhhc0JvcmRlclRleGVscyk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKK3sKKyAgICBtX3RpbGVyLT51cGRhdGVS
ZWN0KHRleHR1cmVVcGRhdGVyKCkpOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0
VGlsaW5nT3B0aW9uKFRpbGluZ09wdGlvbiB0aWxpbmdPcHRpb24pCit7CisgICAgbV90aWxpbmdP
cHRpb24gPSB0aWxpbmdPcHRpb247CisgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24o
KTsKK30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldElzTWFzayhib29sIGlzTWFzaykK
K3sKKyAgICBzZXRUaWxpbmdPcHRpb24oaXNNYXNrID8gTmV2ZXJUaWxlIDogQXV0b1RpbGUpOwor
fQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBUaWxlZExheWVyQ2hyb21pdW06OnRpbGluZ1RyYW5z
Zm9ybSgpIGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gY2NM
YXllckltcGwoKS0+ZHJhd1RyYW5zZm9ybSgpOworCisgICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5p
Zm9ybShib3VuZHMoKS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRz
KCkud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS5oZWln
aHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcygpLmhlaWdodCgpKSk7CisK
KyAgICAvLyBUaWxlciBkcmF3cyB3aXRoIGEgZGlmZmVyZW50IG9yaWdpbiBmcm9tIG90aGVyIGxh
eWVycy4KKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzKCkud2lkdGgoKSAv
IDIuMCwgLWNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSAvIDIuMCk7CisKKyAgICByZXR1cm4gdHJh
bnNmb3JtOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNU
byhsYXllcik7CisKKyAgICBDQ1RpbGVkTGF5ZXJJbXBsKiB0aWxlZExheWVyID0gc3RhdGljX2Nh
c3Q8Q0NUaWxlZExheWVySW1wbCo+KGxheWVyKTsKKyAgICB0aWxlZExheWVyLT5zZXRUaWxpbmdU
cmFuc2Zvcm0odGlsaW5nVHJhbnNmb3JtKCkpOworICAgIHRpbGVkTGF5ZXItPnNldFRpbGVyKG1f
dGlsZXIuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkK
KyAgICAgICAgdHMgPDwgIiAgIjsKK30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OmR1bXBM
YXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAg
TGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKKyAgICB3cml0
ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAic2tpcHNEcmF3OiAiIDw8ICghbV90aWxl
ciB8fCBtX3RpbGVyLT5za2lwc0RyYXcoKSkgPDwgIlxuIjsKK30KKworfQorI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzNlOTM3NDNjYjJlMjE0MTNkNTU0NWFiY2UwZWUxNGM4NDEyOGFjNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgVGlsZWRMYXllckNo
cm9taXVtX2gKKyNkZWZpbmUgVGlsZWRMYXllckNocm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
TGF5ZXJUZXh0dXJlOworY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOworY2xhc3MgTGF5ZXJUZXh0
dXJlVXBkYXRlcjsKKworY2xhc3MgVGlsZWRMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hy
b21pdW0geworcHVibGljOgorICAgIGVudW0gVGlsaW5nT3B0aW9uIHsgQWx3YXlzVGlsZSwgTmV2
ZXJUaWxlLCBBdXRvVGlsZSB9OworCisgICAgdmlydHVhbCB+VGlsZWRMYXllckNocm9taXVtKCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3Bl
cnRpZXNUbyhDQ0xheWVySW1wbCopOworCisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgVGlsZWRMYXllckNocm9taXVtKEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSopOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJj
ZXMoKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpID0gMDsKKyAgICB2aXJ0
dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3QgPSAwOworCisg
ICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV90aWxlcjsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVu
dCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKKworICAgIHZvaWQgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOworICAgIHZv
aWQgc2V0VGlsaW5nT3B0aW9uKFRpbGluZ09wdGlvbik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdGlsaW5nVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICBUaWxpbmdPcHRpb24gbV90aWxpbmdP
cHRpb247Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCAzZjc0Nzc4ZDY5NDliNWIwMTJi
ODEwYTBhMDY1ZTUyOGY1YjQwNTA2Li41NDc5YzRjZjM1OGI5Y2ZiZWUwZWM0OGVmZmQwODRjM2M0
MDA1Y2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xMzYsMTUgKzEzNiw5IEBAIGJv
b2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLS8vIFRoZXNlIGJlbG9uZyBvbiBDQ0xheWVySW1wbCwgYnV0IHNob3VsZCBiZSBv
dmVycmlkZGVuIGJ5IGVhY2ggdHlwZSBhbmQgbm90IGRlZmVyIHRvIHRoZSBMYXllckNocm9taXVt
IHN1YnR5cGVzLgotYm9vbCBDQ0xheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3ZvaWQg
Q0NMYXllckltcGw6OmRyYXcoY29uc3QgSW50UmVjdCYpCiB7Ci0gICAgcmV0dXJuIG1fb3duZXIt
PmRyYXdzQ29udGVudCgpOwotfQotCi12b2lkIENDTGF5ZXJJbXBsOjpkcmF3KGNvbnN0IEludFJl
Y3QmIHRhcmdldFN1cmZhY2VSZWN0KQotewotICAgIHJldHVybiBtX293bmVyLT5kcmF3KHRhcmdl
dFN1cmZhY2VSZWN0KTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBDQ0xh
eWVySW1wbDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApp
bmRleCA5ZTJkYTFjZmYwODU1ZTJiZmNkN2RkNzJhNzEzY2E3MTliNDE2YjNkLi41MTZkNDBlNjYx
MzBjY2Y4NDVmOTllYjc3NTMxYWVmNGEyZDJjOTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAg
LTcyLDEwICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXcoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKCk7CiAgICAgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsKLSAgICB2b2lk
IGJpbmRDb250ZW50c1RleHR1cmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4
dHVyZSgpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGF5ZXIgaGFzIGNvbnRlbnQg
dG8gZHJhdy4KLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CisgICAgdm9p
ZCBzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpIHsgbV9kcmF3c0NvbnRlbnQgPSBk
cmF3c0NvbnRlbnQ7IH0KKyAgICBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZHJhd3NDb250ZW50OyB9CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBsYXll
cidzIGRlc2NlbmRhbnRzIGhhcyBjb250ZW50IHRvIGRyYXcuCiAgICAgYm9vbCBkZXNjZW5kYW50
c0RyYXdzQ29udGVudCgpOwpAQCAtMTM0LDExICsxMzUsMTUgQEAgcHVibGljOgogICAgIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFyZ2V0UmVuZGVyU3VyZmFjZTsgfQogICAgIHZvaWQgc2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHN1cmZhY2UpIHsgbV90YXJnZXRSZW5kZXJTdXJmYWNlID0g
c3VyZmFjZTsgfQogCi0gICAgYm9vbCBkb3VibGVTaWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91
YmxlU2lkZWQ7IH0KLSAgICB2b2lkIHNldERvdWJsZVNpZGVkKGJvb2wgZG91YmxlU2lkZWQpIHsg
bV9kb3VibGVTaWRlZCA9IGRvdWJsZVNpZGVkOyB9CiAgICAgY29uc3QgSW50U2l6ZSYgYm91bmRz
KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZHM7IH0KICAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBJ
bnRTaXplJiBib3VuZHMpIHsgbV9ib3VuZHMgPSBib3VuZHM7IH0KIAorICAgIGNvbnN0IEludFNp
emUmIGNvbnRlbnRCb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRCb3VuZHM7IH0KKyAg
ICB2b2lkIHNldENvbnRlbnRCb3VuZHMoY29uc3QgSW50U2l6ZSYgY29udGVudEJvdW5kcykgeyBt
X2NvbnRlbnRCb3VuZHMgPSBjb250ZW50Qm91bmRzOyB9CisKKyAgICBib29sIGRvdWJsZVNpZGVk
KCkgY29uc3QgeyByZXR1cm4gbV9kb3VibGVTaWRlZDsgfQorICAgIHZvaWQgc2V0RG91YmxlU2lk
ZWQoYm9vbCBkb3VibGVTaWRlZCkgeyBtX2RvdWJsZVNpZGVkID0gZG91YmxlU2lkZWQ7IH0KKwog
ICAgIC8vIFJldHVybnMgdGhlIHJlY3QgY29udGFpbnRhaW5pbmcgdGhpcyBsYXllciBpbiB0aGUg
Y3VycmVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgY29uc3QgSW50UmVjdCBnZXRE
cmF3UmVjdCgpIGNvbnN0OwogCkBAIC0xNTIsNiArMTU3LDcgQEAgcHVibGljOgogICAgIC8vIEhB
Q0sgVE9ETyBmaXggdGhpcwogICAgIExheWVyQ2hyb21pdW0qIG93bmVyKCkgY29uc3QgeyByZXR1
cm4gbV9vd25lcjsgfQogICAgIHZvaWQgY2xlYXJPd25lcigpIHsgbV9vd25lciA9IDA7IH0KKwog
cHJvdGVjdGVkOgogICAgIC8vIEZvciBub3csIENDTGF5ZXJJbXBscyBoYXZlIGEgYmFjayBwb2lu
dGVyIHRvIHRoZWlyIExheWVyQ2hyb21pdW0uCiAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIGFm
dGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzMyBpcyBmaXhl
ZC4KQEAgLTE3Niw2ICsxODIsNyBAQCBwcml2YXRlOgogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQ
b2ludDsKICAgICBmbG9hdCBtX2FuY2hvclBvaW50WjsKICAgICBJbnRTaXplIG1fYm91bmRzOwor
ICAgIEludFNpemUgbV9jb250ZW50Qm91bmRzOwogCiAgICAgLy8gV2hldGhlciB0aGUgImJhY2si
IG9mIHRoaXMgbGF5ZXIgc2hvdWxkIGRyYXcuCiAgICAgYm9vbCBtX2RvdWJsZVNpZGVkOwpAQCAt
MTg4LDYgKzE5NSw4IEBAIHByaXZhdGU6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFu
c2Zvcm07CiAgICAgYm9vbCBtX3VzZXNMYXllclNjaXNzb3I7CiAKKyAgICBib29sIG1fZHJhd3ND
b250ZW50OworCiAgICAgLy8gUHJvcGVydGllcyBvd25lZCBleGNsdXNpdmVseSBieSB0aGlzIEND
TGF5ZXJJbXBsLgogICAgIC8vIERlYnVnZ2luZy4KICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyMTA5MGI3ZjIxMWU5YTdjMzU5YTQ4
YjVjODJlMmM4NWJjMDRmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtMCwwICsx
LDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgorCisjaW5j
bHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyVGV4dHVyZTsKKwor
Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwg
aW50IGlkKQorICAgIDogQ0NMYXllckltcGwob3duZXIsIGlkKQorICAgICwgbV90aWxlcigwKQor
eworfQorCitDQ1RpbGVkTGF5ZXJJbXBsOjp+Q0NUaWxlZExheWVySW1wbCgpCit7Cit9CisKK3Zv
aWQgQ0NUaWxlZExheWVySW1wbDo6ZHJhdyhjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCit7Cisg
ICAgaWYgKCFsYXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX3RpbGVyLT5kcmF3KGxheWVy
UmVjdCwgbV90aWxpbmdUcmFuc2Zvcm0sIGRyYXdPcGFjaXR5KCkpOworfQorCit2b2lkIENDVGls
ZWRMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoKQoreworICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgb25seSB2YWxpZCBmb3Igc2luZ2xlIHRleHR1cmUgbGF5ZXJzLCBlLmcuIG1hc2tzLgor
ICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIExheWVyVGV4dHVyZSogdGV4dHVyZSA9IG1fdGls
ZXItPmdldFNpbmdsZVRleHR1cmUoKTsKKyAgICBBU1NFUlQodGV4dHVyZSk7CisKKyAgICB0ZXh0
dXJlLT5iaW5kVGV4dHVyZSgpOworfQorCit2b2lkIENDVGlsZWRMYXllckltcGw6OmR1bXBMYXll
clByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRp
ZXModHMsIGluZGVudCk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNDI3NTM5
NmQyNTAxYzFmNmMwNTMzNmFmZGZlNTAwYmNmZTI3MThkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGlsZWRMYXllckltcGxfaAor
I2RlZmluZSBDQ1RpbGVkTGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ0NUaWxlZExheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaWxlZExheWVySW1wbD4gY3JlYXRlKExheWVyQ2hy
b21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENDVGlsZWRMYXllckltcGwob3duZXIsIGlkKSk7CisgICAgfQorICAgIHZpcnR1YWwgfkNDVGls
ZWRMYXllckltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOworCisgICAgdmlydHVhbCB2
b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRUaWxpbmdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRpbGluZ1RyYW5zZm9ybSkgeyBtX3RpbGluZ1RyYW5zZm9ybSA9IHRpbGluZ1RyYW5zZm9ybTsg
fQorICAgIHZvaWQgc2V0VGlsZXIoTGF5ZXJUaWxlckNocm9taXVtKiB0aWxlcikgeyBtX3RpbGVy
ID0gdGlsZXI7IH0KKworcHJpdmF0ZToKKyAgICBDQ1RpbGVkTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qLCBpbnQgaWQpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90aWxpbmdUcmFuc2Zv
cm07CisgICAgTGF5ZXJUaWxlckNocm9taXVtKiBtX3RpbGVyOworfTsKKworfQorCisjZW5kaWYg
Ly8gQ0NUaWxlZExheWVySW1wbF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98989</attachid>
            <date>2011-06-28 16:05:40 -0700</date>
            <delta_ts>2011-07-06 15:00:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58833-20110628160539.patch</filename>
            <type>text/plain</type>
            <size>54626</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk5NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MTkzNTIyNWRmYmRjMTI1
ZmVhZDhjYmUzMGFjODRhNmI3YjlhZDU4Li4xYjdiMmE1MWVhNjZiZWQ5YzExZWRiOGEyMTZiNjg4
NzQzOGE3MzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkgQEAKKzIwMTEtMDYtMjggIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgZHJhdyBpbXBsZW1lbnRh
dGlvbiBmb3IgQ29udGVudExheWVyQ2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtIHRvIHRoZSBh
cHByb3ByaWF0ZSBDQ0xheWVySW1wbCBzdWJjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzMKKworICAgICAgICBBZGRzIGEgVGlsZWRMYXll
ckNocm9taXVtIGNsYXNzIHRvIGhhbmRsZSB0aGUgdGlsaW5nIGxvZ2ljIHNoYXJlZCBieSBDb250
ZW50TGF5ZXJDaHJvbWl1bSBhbmQgSW1hZ2VMYXllckNocm9taXVtCisgICAgICAgIHNvIHRoYXQg
dGhleSBjYW4gYmUgc2libGluZ3MgaW4gdGhlIGNsYXNzIGhpZXJhcmNoeSBpbnN0ZWFkIG9mIGNo
aWxkcmVuLiBBbHNvIGFkZHMgYSBDQ1RpbGVkTGF5ZXJJbXBsIHRvIGhhbmRsZQorICAgICAgICB0
aGUgZHJhd2luZyByZXNwb25zaWJpbGl0aWVzIGZvciB0aWxlZCBsYXllcnMuCisKKyAgICAgICAg
VGlsZWRMYXllckNocm9taXVtIG1haW50YWlucyBhIHRpbGVyLCB0aWxpbmcgb3B0aW9ucywgYW5k
IGNhbGN1bGF0ZXMgdGhlIHRpbGluZyB0cmFuc2Zvcm0uIFN1YmNsYXNzZXMgYXJlCisgICAgICAg
IHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgYW4gYXBwcm9wcmlhdGUgdGV4dHVyZSB1cGRhdGVy
IGltcGxlbWVudGF0aW9uLiBDQ1RpbGVkTGF5ZXJJbXBsIHRha2VzIHRoZSB0aWxlciwKKyAgICAg
ICAgdGlsaW5nIHRyYW5zZm9ybSBhbmQgbGF5ZXIgcHJvcGVydGllcyBhbmQgZHJhd3MgdGhlIGxh
eWVyLiAgTG9uZ2VyIHRlcm0gaXQnZCBiZSBiZXR0ZXIgb2YgdGhlIENDVGlsZWRMYXllckltcGwK
KyAgICAgICAgb3duZWQgdGhlIHRpbGVyIGFuZCB0aGUgVGlsZWRMYXllckNocm9taXVtIG9ubHkg
b3duZWQgYW4gdXBkYXRlciwgYnV0IGdldHRpbmcgdGhlcmUgd2lsbCByZXF1aXJlIGNoYW5naW5n
IHRoZQorICAgICAgICB3YXkgdGlsZSBldmljdGlvbiB3b3Jrcy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
Q29udGVudExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6dGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y29udGVudEJvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpjY0xheWVySW1wbCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6Y29udGVudEJvdW5kcyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjp2aXNpYmxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50TGF5ZXJD
b250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyVGlsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hy
b21pdW06OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6ZHJhd1RpbGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6flRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hy
b21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OnNldExheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXll
ckNocm9taXVtOjp1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5nT3B0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0SXNNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAg
IChXZWJDb3JlOjp3cml0ZUluZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hy
b21pdW06OmR1bXBMYXllclByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckltcGw6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpjb250ZW50
Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRDb250ZW50Qm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkb3VibGVTaWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0RG91YmxlU2lkZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6fkNDVGlsZWRMYXllckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGlsZWRMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaWxlZExheWVySW1wbDo6c2V0VGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnNldFRpbGVyKToKKwogMjAxMS0wNi0yOCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMGVhYjk3M2M5MmE0ZDc5YzYyNGEzY2FmODhhZjZk
OWYwNGVjM2VkLi5jMmI3YWFhOTYwOWIxOWE2YTM4NjY2YThmZjYzNTI2MTZhZGUwM2JkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC00MTQyLDYgKzQxNDIsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFu
c3BhcmVuY3lXaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmFuc3BhcmVuY3lXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAnLApAQCAtNDE4Myw2ICs0MTg1LDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlZExheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0nLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29u
dGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDZlMjI1ZmRlNzg5MDJhMDg5Y2U0N2FkZjZkNTRi
Y2NkZjM5YmViZWIuLjZjYzEzOWRiMTJhYThiYjk5MWM1M2M4NDE5MjJhZDY3ZmVmMjk4OGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDI2ICszNCwxMiBAQAog
CiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKIAotI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
clBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgot
I2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJD
YW52YXMuaCIKLSNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgotI2luY2x1ZGUg
IlRleHRTdHJlYW0uaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAotLy8gU3RhcnQg
dGlsaW5nIHdoZW4gdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgYSBsYXllciBhcmUgbGFyZ2VyIHRo
YW4gdGhpcyBzaXplLgotc3RhdGljIGludCBtYXhVbnRpbGVkU2l6ZSA9IDUxMjsKLQotLy8gV2hl
biB0aWxpbmcgaXMgZW5hYmxlZCwgdXNlIHRpbGVzIG9mIHRoaXMgZGltZW5zaW9uIHNxdWFyZWQu
Ci1zdGF0aWMgaW50IGRlZmF1bHRUaWxlU2l6ZSA9IDI1NjsKLQotdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb250ZW50TGF5ZXJQYWludGVyIDog
cHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKQEAgLTkwLDggKzc2LDcgQEAgUGFzc1JlZlB0
cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFw
aGljc0xheWVyQ2hyb20KIH0KIAogQ29udGVudExheWVyQ2hyb21pdW06OkNvbnRlbnRMYXllckNo
cm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBMYXllckNocm9taXVt
KG93bmVyKQotICAgICwgbV90aWxpbmdPcHRpb24oQ29udGVudExheWVyQ2hyb21pdW06OkF1dG9U
aWxlKQorICAgIDogVGlsZWRMYXllckNocm9taXVtKG93bmVyKQogewogfQogCkBAIC0xMDAsMzkg
Kzg1LDMwIEBAIENvbnRlbnRMYXllckNocm9taXVtOjp+Q29udGVudExheWVyQ2hyb21pdW0oKQog
ICAgIGNsZWFudXBSZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
cGFpbnRDb250ZW50c0lmRGlydHkoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpCit2
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eShjb25zdCBJbnRS
ZWN0JiBsYXllclJlY3QpCiB7CiAgICAgQVNTRVJUKGRyYXdzQ29udGVudCgpKTsKICAgICBBU1NF
UlQobGF5ZXJSZW5kZXJlcigpKTsKIAotICAgIHVwZGF0ZUxheWVyU2l6ZShsYXllckJvdW5kcygp
LnNpemUoKSk7CisgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKIAotICAgIElu
dFJlY3QgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCh0YXJnZXRTdXJmYWNlUmVjdCk7CiAg
ICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJl
Y3QgZGlydHkgPSBlbmNsb3NpbmdJbnRSZWN0KG1fZGlydHlSZWN0KTsKLSAgICBkaXJ0eS5pbnRl
cnNlY3QobGF5ZXJCb3VuZHMoKSk7CisgICAgZGlydHkuaW50ZXJzZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgYm91bmRzKCkpKTsKICAgICBtX3RpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eSk7CiAK
ICAgICBpZiAoIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3RpbGVy
LT5wcmVwYXJlVG9VcGRhdGUobGF5ZXJSZWN0LCBtX3RleHR1cmVVcGRhdGVyLmdldCgpKTsKKyAg
ICBtX3RpbGVyLT5wcmVwYXJlVG9VcGRhdGUobGF5ZXJSZWN0LCB0ZXh0dXJlVXBkYXRlcigpKTsK
ICAgICBtX2RpcnR5UmVjdCA9IEZsb2F0UmVjdCgpOwogfQogCi12b2lkIENvbnRlbnRMYXllckNo
cm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKLXsKLSAgICBtX3RleHR1cmVVcGRhdGVyLmNsZWFy
KCk7Ci0gICAgbV90aWxlci5jbGVhcigpOwotICAgIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNv
dXJjZXMoKTsKLX0KLQotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJl
cihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCitib29sIENvbnRlbnRMYXll
ckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewotICAgIExheWVyQ2hyb21pdW06OnNl
dExheWVyUmVuZGVyZXIobGF5ZXJSZW5kZXJlcik7Ci0gICAgY3JlYXRlVGlsZXJJZk5lZWRlZCgp
OworICAgIHJldHVybiBtX293bmVyICYmIG1fb3duZXItPmRyYXdzQ29udGVudCgpICYmIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7CiB9CiAKIHZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQpAQCAtMTQ4LDE1NCArMTI0LDUg
QEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRl
ZCgpCiAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNy
ZWF0ZShsYXllclJlbmRlcmVyQ29udGV4dCgpLCBDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9vd25lciksIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpOwogfQog
Ci1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNm
b3JtKCkKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBjY0xheWVySW1w
bCgpLT5kcmF3VHJhbnNmb3JtKCk7Ci0gICAgLy8gVGlsZXIgZHJhd3MgZnJvbSB0aGUgdXBwZXIg
bGVmdCBjb3JuZXIuIFRoZSBkcmF3IHRyYW5zZm9ybQotICAgIC8vIHNwZWNpZmllcyB0aGUgbWlk
ZGxlIG9mIHRoZSBsYXllci4KLSAgICBJbnRTaXplIHNpemUgPSBib3VuZHMoKTsKLSAgICB0cmFu
c2Zvcm0udHJhbnNsYXRlKC1zaXplLndpZHRoKCkgLyAyLjAsIC1zaXplLmhlaWdodCgpIC8gMi4w
KTsKLQotICAgIHJldHVybiB0cmFuc2Zvcm07Ci19Ci0KLUludFJlY3QgQ29udGVudExheWVyQ2hy
b21pdW06OnZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3Qp
Ci17Ci0gICAgaWYgKHRhcmdldFN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IHRhcmdldFN1cmZhY2VSZWN0OwotCi0gICAgY29uc3QgSW50UmVjdCBsYXllckJvdW5kUmVjdCA9
IGxheWVyQm91bmRzKCk7Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3Jt
ID0gdGlsaW5nVHJhbnNmb3JtKCk7Ci0KLSAgICAvLyBJcyB0aGlzIGxheWVyIGZ1bGx5IGNvbnRh
aW5lZCB3aXRoaW4gdGhlIHRhcmdldCBzdXJmYWNlPwotICAgIEludFJlY3QgbGF5ZXJJblN1cmZh
Y2VTcGFjZSA9IHRyYW5zZm9ybS5tYXBSZWN0KGxheWVyQm91bmRSZWN0KTsKLSAgICBpZiAodGFy
Z2V0U3VyZmFjZVJlY3QuY29udGFpbnMobGF5ZXJJblN1cmZhY2VTcGFjZSkpCi0gICAgICAgIHJl
dHVybiBsYXllckJvdW5kUmVjdDsKLQotICAgIC8vIElmIHRoZSBsYXllciBkb2Vzbid0IGZpbGwg
dXAgdGhlIGVudGlyZSBzdXJmYWNlLCB0aGVuIGZpbmQgdGhlIHBhcnQgb2YKLSAgICAvLyB0aGUg
c3VyZmFjZSByZWN0IHdoZXJlIHRoZSBsYXllciBjb3VsZCBiZSB2aXNpYmxlLiBUaGlzIGF2b2lk
cyB0cnlpbmcgdG8KLSAgICAvLyBwcm9qZWN0IHN1cmZhY2UgcmVjdCBwb2ludHMgdGhhdCBhcmUg
YmVoaW5kIHRoZSBwcm9qZWN0aW9uIHBvaW50LgotICAgIEludFJlY3QgbWluaW1hbFN1cmZhY2VS
ZWN0ID0gdGFyZ2V0U3VyZmFjZVJlY3Q7Ci0gICAgbWluaW1hbFN1cmZhY2VSZWN0LmludGVyc2Vj
dChsYXllckluU3VyZmFjZVNwYWNlKTsKLQotICAgIC8vIFByb2plY3QgdGhlIGNvcm5lcnMgb2Yg
dGhlIHRhcmdldCBzdXJmYWNlIHJlY3QgaW50byB0aGUgbGF5ZXIgc3BhY2UuCi0gICAgLy8gVGhp
cyBib3VuZGluZyByZWN0YW5nbGUgbWF5IGJlIGxhcmdlciB0aGFuIGl0IG5lZWRzIHRvIGJlIChi
ZWluZwotICAgIC8vIGF4aXMtYWxpZ25lZCksIGJ1dCBpcyBhIHJlYXNvbmFibGUgZmlsdGVyIG9u
IHRoZSBzcGFjZSB0byBjb25zaWRlci4KLSAgICAvLyBOb24taW52ZXJ0aWJsZSB0cmFuc2Zvcm1z
IHdpbGwgY3JlYXRlIGFuIGVtcHR5IHJlY3QgaGVyZS4KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBzdXJmYWNlVG9MYXllciA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgSW50UmVj
dCBsYXllclJlY3QgPSBzdXJmYWNlVG9MYXllci5wcm9qZWN0UXVhZChGbG9hdFF1YWQoRmxvYXRS
ZWN0KG1pbmltYWxTdXJmYWNlUmVjdCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgIGxh
eWVyUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZFJlY3QpOwotICAgIHJldHVybiBsYXllclJlY3Q7
Ci19Ci0KLUludFJlY3QgQ29udGVudExheWVyQ2hyb21pdW06OmxheWVyQm91bmRzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgYm91bmRzKCkpOwotfQotCi12
b2lkIENvbnRlbnRMYXllckNocm9taXVtOjp1cGRhdGVMYXllclNpemUoY29uc3QgSW50U2l6ZSYg
bGF5ZXJTaXplKQotewotICAgIGlmICghbV90aWxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y29uc3QgSW50U2l6ZSB0aWxlU2l6ZShtaW4oZGVmYXVsdFRpbGVTaXplLCBsYXllclNpemUud2lk
dGgoKSksIG1pbihkZWZhdWx0VGlsZVNpemUsIGxheWVyU2l6ZS5oZWlnaHQoKSkpOwotCi0gICAg
Ly8gVGlsZSBpZiBib3RoIGRpbWVuc2lvbnMgbGFyZ2UsIG9yIGFueSBvbmUgZGltZW5zaW9uIGxh
cmdlIGFuZCB0aGUgb3RoZXIKLSAgICAvLyBleHRlbmRzIGludG8gYSBzZWNvbmQgdGlsZS4gVGhp
cyBoZXVyaXN0aWMgYWxsb3dzIGZvciBsb25nIHNraW5ueSBsYXllcnMKLSAgICAvLyAoZS5nLiBz
Y3JvbGxiYXJzKSB0aGF0IGFyZSBOeDEgdGlsZXMgdG8gbWluaW1pemUgd2FzdGVkIHRleHR1cmUg
c3BhY2UuCi0gICAgY29uc3QgYm9vbCBhbnlEaW1lbnNpb25MYXJnZSA9IGxheWVyU2l6ZS53aWR0
aCgpID4gbWF4VW50aWxlZFNpemUgfHwgbGF5ZXJTaXplLmhlaWdodCgpID4gbWF4VW50aWxlZFNp
emU7Ci0gICAgY29uc3QgYm9vbCBhbnlEaW1lbnNpb25PbmVUaWxlID0gbGF5ZXJTaXplLndpZHRo
KCkgPD0gZGVmYXVsdFRpbGVTaXplIHx8IGxheWVyU2l6ZS5oZWlnaHQoKSA8PSBkZWZhdWx0VGls
ZVNpemU7Ci0gICAgY29uc3QgYm9vbCBhdXRvVGlsZWQgPSBhbnlEaW1lbnNpb25MYXJnZSAmJiAh
YW55RGltZW5zaW9uT25lVGlsZTsKLQotICAgIGJvb2wgaXNUaWxlZDsKLSAgICBpZiAobV90aWxp
bmdPcHRpb24gPT0gQWx3YXlzVGlsZSkKLSAgICAgICAgaXNUaWxlZCA9IHRydWU7Ci0gICAgZWxz
ZSBpZiAobV90aWxpbmdPcHRpb24gPT0gTmV2ZXJUaWxlKQotICAgICAgICBpc1RpbGVkID0gZmFs
c2U7Ci0gICAgZWxzZQotICAgICAgICBpc1RpbGVkID0gYXV0b1RpbGVkOwotCi0gICAgSW50U2l6
ZSByZXF1ZXN0ZWRTaXplID0gaXNUaWxlZCA/IHRpbGVTaXplIDogbGF5ZXJTaXplOwotICAgIGNv
bnN0IGludCBtYXhTaXplID0gbGF5ZXJSZW5kZXJlcigpLT5tYXhUZXh0dXJlU2l6ZSgpOwotICAg
IEludFNpemUgY2xhbXBlZFNpemUgPSByZXF1ZXN0ZWRTaXplLnNocnVua1RvKEludFNpemUobWF4
U2l6ZSwgbWF4U2l6ZSkpOwotICAgIG1fdGlsZXItPnNldFRpbGVTaXplKGNsYW1wZWRTaXplKTsK
LX0KLQotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSZWN0JiB0YXJn
ZXRTdXJmYWNlUmVjdCkKLXsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm0gPSB0aWxpbmdUcmFuc2Zvcm0oKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IHZpc2libGVM
YXllclJlY3QodGFyZ2V0U3VyZmFjZVJlY3QpOwotICAgIGlmICghbGF5ZXJSZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgbV90aWxlci0+ZHJhdyhsYXllclJlY3QsIHRyYW5zZm9ybSwgY2NMYXllcklt
cGwoKS0+ZHJhd09wYWNpdHkoKSwgbV90ZXh0dXJlVXBkYXRlci5nZXQoKSk7Ci19Ci0KLWJvb2wg
Q29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X293bmVyIHx8ICFtX293bmVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFtX3RpbGVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICht
X3RpbGluZ09wdGlvbiA9PSBOZXZlclRpbGUgJiYgbV90aWxlci0+bnVtVGlsZXMoKSA+IDEpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhbV90aWxlci0+c2tpcHNEcmF3KCk7
Ci19Ci0KLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVkZWQoKQot
ewotICAgIGlmIChtX3RpbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVUZXh0dXJl
VXBkYXRlcklmTmVlZGVkKCk7Ci0KLSAgICBtX3RpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpj
cmVhdGUoCi0gICAgICAgIGxheWVyUmVuZGVyZXIoKSwKLSAgICAgICAgSW50U2l6ZShkZWZhdWx0
VGlsZVNpemUsIGRlZmF1bHRUaWxlU2l6ZSksCi0gICAgICAgIExheWVyVGlsZXJDaHJvbWl1bTo6
SGFzQm9yZGVyVGV4ZWxzKTsKLX0KLQotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcygpCi17Ci0gICAgbV90aWxlci0+dXBkYXRlUmVjdChtX3RleHR1
cmVVcGRhdGVyLmdldCgpKTsKLX0KLQotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0VGls
aW5nT3B0aW9uKFRpbGluZ09wdGlvbiBvcHRpb24pCi17Ci0gICAgbV90aWxpbmdPcHRpb24gPSBv
cHRpb247Ci0gICAgdXBkYXRlTGF5ZXJTaXplKGJvdW5kcygpKTsKLX0KLQotdm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6YmluZENvbnRlbnRzVGV4dHVyZSgpCi17Ci0gICAgLy8gVGhpcyBmdW5j
dGlvbiBpcyBvbmx5IHZhbGlkIGZvciBzaW5nbGUgdGV4dHVyZSBsYXllcnMsIGUuZy4gbWFza3Mu
Ci0gICAgQVNTRVJUKG1fdGlsaW5nT3B0aW9uID09IE5ldmVyVGlsZSk7Ci0gICAgQVNTRVJUKG1f
dGlsZXIpOwotCi0gICAgTGF5ZXJUZXh0dXJlKiB0ZXh0dXJlID0gbV90aWxlci0+Z2V0U2luZ2xl
VGV4dHVyZSgpOwotICAgIEFTU0VSVCh0ZXh0dXJlKTsKLQotICAgIHRleHR1cmUtPmJpbmRUZXh0
dXJlKCk7Ci19Ci0KLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnNldElzTWFzayhib29sIGlz
TWFzaykKLXsKLSAgICBzZXRUaWxpbmdPcHRpb24oaXNNYXNrID8gTmV2ZXJUaWxlIDogQXV0b1Rp
bGUpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGlu
ZGVudCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkKLSAgICAgICAg
dHMgPDwgIiAgIjsKLX0KLQotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJv
cGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKLXsKLSAgICBMYXllckNo
cm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOwotICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJza2lwc0RyYXc6ICIgPDwgKCFtX3RpbGVyIHx8IG1f
dGlsZXItPnNraXBzRHJhdygpKSA8PCAiXG4iOwotfQotCiB9CiAjZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKaW5kZXgg
YTVlZWU2YzNiOGRkMTVkZTEwNTNkZmViNDNmYTNiY2E3NzY5MDhiNi4uOGRmMTIwNjdkMzVjNjUx
MGJkZmVmYzM4MTY0NTI0NzNlNWM4NDYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5oCkBAIC0zNCw3ICszNCw4IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAKLSNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiVGlsZWRMYXllckNocm9t
aXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQzLDQ4ICs0NCwyNCBAQCBjbGFzcyBMYXllclRpbGVyQ2hyb21pdW07CiBj
bGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwogCiAvLyBBIExheWVyIHRoYXQgcmVxdWlyZXMgYSBH
cmFwaGljc0NvbnRleHQgdG8gcmVuZGVyIGl0cyBjb250ZW50cy4KLWNsYXNzIENvbnRlbnRMYXll
ckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewotICAgIGZyaWVuZCBjbGFzcyBMYXll
clJlbmRlcmVyQ2hyb21pdW07CitjbGFzcyBDb250ZW50TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBU
aWxlZExheWVyQ2hyb21pdW0gewogcHVibGljOgotICAgIGVudW0gVGlsaW5nT3B0aW9uIHsgQWx3
YXlzVGlsZSwgTmV2ZXJUaWxlLCBBdXRvVGlsZSB9OwotCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q29udGVudExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
ID0gMCk7CiAKICAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZh
Y2VSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRD
b250ZW50c1RleHR1cmUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KGNvbnN0IEludFJlY3Qm
IHRhcmdldFN1cmZhY2VSZWN0KTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IEludFJlY3Qm
KTsKIAotcHJvdGVjdGVkOgorcHJpdmF0ZToKICAgICBleHBsaWNpdCBDb250ZW50TGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAogICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ29udGVudExheWVyIjsg
fQotICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7
CiAKLSAgICB2aXJ0dWFsIEludFJlY3QgbGF5ZXJCb3VuZHMoKSBjb25zdDsKLQotICAgIHZpcnR1
YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJhbnNmb3JtKCk7Ci0KLSAgICAvLyBGb3Ig
YSBnaXZlbiByZW5kZXIgc3VyZmFjZSByZWN0IHRoYXQgdGhpcyBsYXllciB3aWxsIGJlIHRyYW5z
Zm9ybWVkIGFuZAotICAgIC8vIGRyYXduIGludG8sIHJldHVybiB0aGUgbGF5ZXIgc3BhY2UgcmVj
dCB0aGF0IGlzIHZpc2libGUgaW4gdGhhdCBzdXJmYWNlLgotICAgIEludFJlY3QgdmlzaWJsZUxh
eWVyUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2b2lkIHVwZGF0ZUxheWVyU2l6ZShjb25z
dCBJbnRTaXplJik7Ci0gICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CisgICAgdmlydHVh
bCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0
dXJlVXBkYXRlcklmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0
aW9uKTsKKyAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlci5nZXQoKTsgfQogCiAgICAgT3duUHRyPExh
eWVyVGV4dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7Ci0gICAgT3duUHRyPExheWVyVGls
ZXJDaHJvbWl1bT4gbV90aWxlcjsKLSAgICBUaWxpbmdPcHRpb24gbV90aWxpbmdPcHRpb247CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCA2MmNmYzIxNWFlMTZk
MWU4ZGU0YjYzNTEzNjI0MGI1ZWE4MTRiOTgzLi40OGU5Y2VkYTJiZjA5MGQ5ZDg3ZWYyNzFkNmI0
ODhmOWZlODE2MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTExNSw5
ICsxMTUsOCBAQCBQYXNzUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gSW1hZ2VMYXllckNocm9t
aXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKgogfQogCiBJbWFnZUxheWVyQ2hyb21p
dW06OkltYWdlTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAg
IDogQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpCisgICAgOiBUaWxlZExheWVyQ2hyb21pdW0o
b3duZXIpCiAgICAgLCBtX2ltYWdlRm9yQ3VycmVudEZyYW1lKDApCi0gICAgLCBtX2NvbnRlbnRz
KDApCiB7CiB9CiAKQEAgLTEyNSw2ICsxMjQsMTIgQEAgSW1hZ2VMYXllckNocm9taXVtOjp+SW1h
Z2VMYXllckNocm9taXVtKCkKIHsKIH0KIAordm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OmNsZWFu
dXBSZXNvdXJjZXMoKQoreworICAgIG1fdGV4dHVyZVVwZGF0ZXIuY2xlYXIoKTsKKyAgICBUaWxl
ZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKK30KKwogdm9pZCBJbWFnZUxheWVy
Q2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50cykKIHsKICAgICAvLyBzZXRDb250
ZW50cygpIGN1cnJlbnRseSBnZXRzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBpcyBhbnkKQEAgLTE0
NSwxMSArMTUwLDkgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRp
cnR5KGNvbnN0IEludFJlY3QmKQogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogCiAgICAg
aWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZG93
bmNhc3QgaXMgYmFkLiBUaGUgZml4IGlzIHRvIG1ha2UgSW1hZ2VMYXllckNocm9taXVtIG5vdCBk
ZXJpdmUgZnJvbSBDb250ZW50TGF5ZXJDaHJvbWl1bS4KLSAgICAgICAgSW1hZ2VMYXllclRleHR1
cmVVcGRhdGVyKiBpbWFnZVRleHR1cmVVcGRhdGVyID0gc3RhdGljX2Nhc3Q8SW1hZ2VMYXllclRl
eHR1cmVVcGRhdGVyKj4obV90ZXh0dXJlVXBkYXRlci5nZXQoKSk7Ci0gICAgICAgIGltYWdlVGV4
dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpKTsKLSAgICAgICAgdXBkYXRlTGF5ZXJTaXplKGltYWdlVGV4dHVyZVVwZGF0
ZXItPmltYWdlU2l6ZSgpKTsKLSAgICAgICAgSW50UmVjdCBwYWludFJlY3QoSW50UG9pbnQoMCwg
MCksIGltYWdlVGV4dHVyZVVwZGF0ZXItPmltYWdlU2l6ZSgpKTsKKyAgICAgICAgbV90ZXh0dXJl
VXBkYXRlci0+dXBkYXRlRnJvbUltYWdlKG1fY29udGVudHMtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkpOworICAgICAgICB1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbigpOworICAg
ICAgICBJbnRSZWN0IHBhaW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKCkpOwogICAg
ICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbV90aWxlci0+
aW52YWxpZGF0ZVJlY3QocGFpbnRSZWN0KTsKICAgICAgICAgICAgIG1fZGlydHlSZWN0ID0gSW50
UmVjdCgpOwpAQCAtMTU4LDQ5ICsxNjEsMjcgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBh
aW50Q29udGVudHNJZkRpcnR5KGNvbnN0IEludFJlY3QmKQogICAgIH0KIH0KIAotdm9pZCBJbWFn
ZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQorTGF5ZXJUZXh0dXJl
VXBkYXRlciogSW1hZ2VMYXllckNocm9taXVtOjp0ZXh0dXJlVXBkYXRlcigpIGNvbnN0CiB7Ci0g
ICAgbV90aWxlci0+dXBkYXRlUmVjdChtX3RleHR1cmVVcGRhdGVyLmdldCgpKTsKKyAgICByZXR1
cm4gbV90ZXh0dXJlVXBkYXRlci5nZXQoKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06
OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBuZXdMYXllclJlbmRlcmVy
KQorSW50U2l6ZSBJbWFnZUxheWVyQ2hyb21pdW06OmNvbnRlbnRCb3VuZHMoKSBjb25zdAogewot
ICAgIGlmIChuZXdMYXllclJlbmRlcmVyICE9IGxheWVyUmVuZGVyZXIoKSkKLSAgICAgICAgbV90
ZXh0dXJlVXBkYXRlci5jbGVhcigpOwotICAgIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRMYXll
clJlbmRlcmVyKG5ld0xheWVyUmVuZGVyZXIpOworICAgIGlmICghbV9jb250ZW50cykKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKKyAgICByZXR1cm4gbV9jb250ZW50cy0+c2l6ZSgpOwogfQog
Ci12b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgp
Citib29sIEltYWdlTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fdGV4dHVyZVVwZGF0ZXIpCi0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShsYXllclJlbmRlcmVyQ29udGV4dCgpLCBsYXllclJl
bmRlcmVyKCktPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKKyAgICByZXR1cm4gbV9jb250ZW50
cyAmJiBUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpOwogfQogCi1JbnRSZWN0IElt
YWdlTGF5ZXJDaHJvbWl1bTo6bGF5ZXJCb3VuZHMoKSBjb25zdAordm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQogewogICAgIGlmICghbV90ZXh0
dXJlVXBkYXRlcikKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICBJbWFnZUxheWVyVGV4
dHVyZVVwZGF0ZXIqIGltYWdlVGV4dHVyZVVwZGF0ZXIgPSBzdGF0aWNfY2FzdDxJbWFnZUxheWVy
VGV4dHVyZVVwZGF0ZXIqPihtX3RleHR1cmVVcGRhdGVyLmdldCgpKTsKLSAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBpbWFnZVRleHR1cmVVcGRhdGVyLT5pbWFnZVNpemUoKSk7Ci19Ci0K
LVRyYW5zZm9ybWF0aW9uTWF0cml4IEltYWdlTGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3Jt
KCkKLXsKLSAgICAvLyBUaWxlciBkcmF3cyBmcm9tIHRoZSB1cHBlciBsZWZ0IGNvcm5lci4gVGhl
IGRyYXcgdHJhbnNmb3JtCi0gICAgLy8gc3BlY2lmaWVzIHRoZSBtaWRkbGUgb2YgdGhlIGxheWVy
LgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGNjTGF5ZXJJbXBsKCktPmRy
YXdUcmFuc2Zvcm0oKTsKLSAgICBjb25zdCBJbnRSZWN0IHNvdXJjZVJlY3QgPSBsYXllckJvdW5k
cygpOwotICAgIGNvbnN0IEludFNpemUgZGVzdFNpemUgPSBib3VuZHMoKTsKLQotICAgIHRyYW5z
Zm9ybS50cmFuc2xhdGUoLWRlc3RTaXplLndpZHRoKCkgLyAyLjAsIC1kZXN0U2l6ZS5oZWlnaHQo
KSAvIDIuMCk7Ci0KLSAgICAvLyBUaWxlciBhbHNvIGRyYXdzIGF0IHRoZSBvcmlnaW5hbCBjb250
ZW50IHNpemUsIHNvIHJlc2NhbGUgdGhlIG9yaWdpbmFsCi0gICAgLy8gaW1hZ2UgZGltZW5zaW9u
cyB0byB0aGUgYm91bmRzIHRoYXQgaXQgaXMgbWVhbnQgdG8gYmUgZHJhd24gYXQuCi0gICAgZmxv
YXQgc2NhbGVYID0gZGVzdFNpemUud2lkdGgoKSAvIHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VS
ZWN0LnNpemUoKS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZVkgPSBkZXN0U2l6ZS5oZWlnaHQo
KSAvIHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0gICAg
dHJhbnNmb3JtLnNjYWxlM2Qoc2NhbGVYLCBzY2FsZVksIDEuMGYpOwotCi0gICAgcmV0dXJuIHRy
YW5zZm9ybTsKKyAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBk
YXRlcjo6Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250ZXh0KCksIGxheWVyUmVuZGVyZXIoKS0+Y29u
dGV4dFN1cHBvcnRzTWFwU3ViKCkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
CmluZGV4IDMzMTNjMTRlMjBiYzVmNjIxMjg2MDU2MGUyZmE4YWNiMzNjNzhlMDguLjRkMmUwNDc1
YThmMDExMGJiMmRlYjM0ZmRkMDIxMDg0NzVkMjZmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJv
bWl1bS5oCkBAIC00NCwzNCArNDQsMzYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
SW1hZ2U7CitjbGFzcyBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI7CiAKIC8vIEEgTGF5ZXIgdGhh
dCBjb250YWlucyBvbmx5IGFuIEltYWdlIGVsZW1lbnQuCi1jbGFzcyBJbWFnZUxheWVyQ2hyb21p
dW0gOiBwdWJsaWMgQ29udGVudExheWVyQ2hyb21pdW0geworY2xhc3MgSW1hZ2VMYXllckNocm9t
aXVtIDogcHVibGljIFRpbGVkTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW1hZ2VMYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lciA9IDApOwogICAgIHZpcnR1YWwgfkltYWdlTGF5ZXJDaHJvbWl1bSgpOwogCi0gICAg
dmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IEludFJlY3QmIHRhcmdldFN1
cmZhY2VSZWN0KTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygp
OwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRzOyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAKICAgICB2b2lk
IHNldENvbnRlbnRzKEltYWdlKiBpbWFnZSk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkltYWdlTGF5ZXIi
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hy
b21pdW0qKTsKLQotICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJhbnNm
b3JtKCk7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGxheWVyQm91bmRzKCkgY29uc3Q7Ci0KIHByaXZh
dGU6CiAgICAgSW1hZ2VMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
OwogCisgICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJjZXMoKTsKICAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpOworICAgIHZvaWQgc2V0VGlsaW5nT3B0
aW9uKFRpbGluZ09wdGlvbik7CisKKyAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRl
eHR1cmVVcGRhdGVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRCb3VuZHMo
KSBjb25zdDsKIAogICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2VGb3JDdXJyZW50RnJhbWU7CiAg
ICAgUmVmUHRyPEltYWdlPiBtX2NvbnRlbnRzOworCisgICAgT3duUHRyPEltYWdlTGF5ZXJUZXh0
dXJlVXBkYXRlcj4gbV90ZXh0dXJlVXBkYXRlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggYjYxNjI4YmI2N2FkMzAxZDdiM2ExZmRjNWRjZmViZTVkMWZiZGNkNC4uOTZkNWNh
ZjE5NDAzZDJlZmNhMmE2ZTE5YjA2OTIwYTQ5ODM4Yjk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTI5MSw5ICsyOTEsMTEgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobV9hbmNo
b3JQb2ludCk7CiAgICAgbGF5ZXItPnNldEFuY2hvclBvaW50WihtX2FuY2hvclBvaW50Wik7CiAg
ICAgbGF5ZXItPnNldEJvdW5kcyhtX2JvdW5kcyk7CisgICAgbGF5ZXItPnNldENvbnRlbnRCb3Vu
ZHMoY29udGVudEJvdW5kcygpKTsKICAgICBsYXllci0+c2V0RGVidWdCb3JkZXJDb2xvcihtX2Rl
YnVnQm9yZGVyQ29sb3IpOwogICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlcldpZHRoKG1fZGVidWdC
b3JkZXJXaWR0aCk7CiAgICAgbGF5ZXItPnNldERvdWJsZVNpZGVkKG1fZG91YmxlU2lkZWQpOwor
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KCkpOwogICAgIGxheWVyLT5z
ZXRMYXllclJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAgICAgbGF5ZXItPnNldE1h
c2tzVG9Cb3VuZHMobV9tYXNrc1RvQm91bmRzKTsKICAgICBsYXllci0+c2V0TmFtZShtX25hbWUp
OwpAQCAtMzgxLDcgKzM4Myw3IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IExheWVyQ2hyb21p
dW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKICAgICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZSh0
aGlzLCBtX2xheWVySWQpOwogfQogCi1DQ0xheWVySW1wbCogTGF5ZXJDaHJvbWl1bTo6Y2NMYXll
ckltcGwoKQorQ0NMYXllckltcGwqIExheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9jY0xheWVySW1wbDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBi
NGExMTJmMGEzNDhiZWIzNmJkNTQ2MDFkYjBlZGJkZTdlYjZlNzMwLi5mOGNiMDc4NzYxMmNiNTNk
YTQwNzlhNTYzYTk0OTc1NDBjNzg0MTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC04Niw2ICs4
Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmKTsKICAg
ICBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kczsgfQorICAg
IHZpcnR1YWwgSW50U2l6ZSBjb250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gYm91bmRzKCk7
IH0KIAogICAgIHZvaWQgc2V0Q2xlYXJzQ29udGV4dChib29sIGNsZWFycykgeyBtX2NsZWFyc0Nv
bnRleHQgPSBjbGVhcnM7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGNsZWFyc0NvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2NsZWFyc0NvbnRleHQ7IH0KQEAgLTE1OCw3ICsxNTksNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldElzTWFzayhib29sKSB7fQogICAgIHZpcnR1
YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
YmluZENvbnRlbnRzVGV4dHVyZSgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KGNvbnN0IElu
dFJlY3QmKSB7IH0KIAogICAgIC8vIFRoZXNlIGV4aXN0cyBqdXN0IGZvciBkZWJ1Z2dpbmcgKHZp
YSBkcmF3RGVidWdCb3JkZXIoKSkuCiAgICAgdm9pZCBzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xv
ciYpOwpAQCAtMTY5LDcgKzE2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJvcmRlcldpZHRo
KGZsb2F0KTsKIAogICAgIC8vIEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIGRvd24gaW4gdGhlIHB1Ymxp
YyBzZWN0aW9uIHdpbGwgbW92ZSB0byBDQ0xheWVySW1wbC4KLSAgICBDQ0xheWVySW1wbCogY2NM
YXllckltcGwoKTsKKyAgICBDQ0xheWVySW1wbCogY2NMYXllckltcGwoKSBjb25zdDsKIAogICAg
IHN0YXRpYyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGxheWVyTWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGZkM2RlNmIyMDM0MzkyMGUyYWZmMDBhMGZlZTQ2
MTZmZTlmMGI1ODYuLjk5ZmE5YjI3YWU5OTc0MWZiYTgxMTAzMDU0YzlhZjFkMzliMzI3NzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMjEyLDcgKzIxMiw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Um9vdExheWVyKCkKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBzY3JvbGw7CiAgICAgc2Nyb2xsLnRyYW5zbGF0ZSgtbV92aWV3cG9ydFZp
c2libGVSZWN0LngoKSwgLW1fdmlld3BvcnRWaXNpYmxlUmVjdC55KCkpOwogCi0gICAgbV9yb290
TGF5ZXJDb250ZW50VGlsZXItPmRyYXcobV92aWV3cG9ydFZpc2libGVSZWN0LCBzY3JvbGwsIDEu
MGYsIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOworICAgIG1fcm9vdExheWVyQ29u
dGVudFRpbGVyLT5kcmF3KG1fdmlld3BvcnRWaXNpYmxlUmVjdCwgc2Nyb2xsLCAxLjBmKTsKIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpZXdwb3J0KGNvbnN0IEludFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQm
IHNjcm9sbFBvc2l0aW9uKQpAQCAtMzU4LDYgKzM1OCw0NiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkK
ICAgICB9CiB9CiAKK3N0YXRpYyBJbnRSZWN0IHZpc2libGVMYXllclJlY3QoY29uc3QgSW50UmVj
dCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29uc3QgSW50U2l6
ZSYgY29udGVudEJvdW5kcywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRpbGluZ1RyYW5z
Zm9ybSkKK3sKKyAgICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gdGFyZ2V0U3VyZmFjZVJlY3Q7CisKKyAgICBjb25zdCBJbnRSZWN0IGxheWVyQm91bmRS
ZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBjb250ZW50Qm91bmRzKTsKKyAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm07CisKKyAgICB0cmFuc2Zvcm0u
c2NhbGVOb25Vbmlmb3JtKGJvdW5kcy53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250
ZW50Qm91bmRzLndpZHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRz
LmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLmhlaWdodCgpKSk7
CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcy53aWR0aCgpIC8gMi4wLCAt
Y29udGVudEJvdW5kcy5oZWlnaHQoKSAvIDIuMCk7CisKKyAgICAvLyBJcyB0aGlzIGxheWVyIGZ1
bGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhcmdldCBzdXJmYWNlPworICAgIEludFJlY3QgbGF5
ZXJJblN1cmZhY2VTcGFjZSA9IHRyYW5zZm9ybS5tYXBSZWN0KGxheWVyQm91bmRSZWN0KTsKKyAg
ICBpZiAodGFyZ2V0U3VyZmFjZVJlY3QuY29udGFpbnMobGF5ZXJJblN1cmZhY2VTcGFjZSkpCisg
ICAgICAgIHJldHVybiBsYXllckJvdW5kUmVjdDsKKworICAgIC8vIElmIHRoZSBsYXllciBkb2Vz
bid0IGZpbGwgdXAgdGhlIGVudGlyZSBzdXJmYWNlLCB0aGVuIGZpbmQgdGhlIHBhcnQgb2YKKyAg
ICAvLyB0aGUgc3VyZmFjZSByZWN0IHdoZXJlIHRoZSBsYXllciBjb3VsZCBiZSB2aXNpYmxlLiBU
aGlzIGF2b2lkcyB0cnlpbmcgdG8KKyAgICAvLyBwcm9qZWN0IHN1cmZhY2UgcmVjdCBwb2ludHMg
dGhhdCBhcmUgYmVoaW5kIHRoZSBwcm9qZWN0aW9uIHBvaW50LgorICAgIEludFJlY3QgbWluaW1h
bFN1cmZhY2VSZWN0ID0gdGFyZ2V0U3VyZmFjZVJlY3Q7CisgICAgbWluaW1hbFN1cmZhY2VSZWN0
LmludGVyc2VjdChsYXllckluU3VyZmFjZVNwYWNlKTsKKworICAgIC8vIFByb2plY3QgdGhlIGNv
cm5lcnMgb2YgdGhlIHRhcmdldCBzdXJmYWNlIHJlY3QgaW50byB0aGUgbGF5ZXIgc3BhY2UuCisg
ICAgLy8gVGhpcyBib3VuZGluZyByZWN0YW5nbGUgbWF5IGJlIGxhcmdlciB0aGFuIGl0IG5lZWRz
IHRvIGJlIChiZWluZworICAgIC8vIGF4aXMtYWxpZ25lZCksIGJ1dCBpcyBhIHJlYXNvbmFibGUg
ZmlsdGVyIG9uIHRoZSBzcGFjZSB0byBjb25zaWRlci4KKyAgICAvLyBOb24taW52ZXJ0aWJsZSB0
cmFuc2Zvcm1zIHdpbGwgY3JlYXRlIGFuIGVtcHR5IHJlY3QgaGVyZS4KKyAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlVG9MYXllciA9IHRyYW5zZm9ybS5pbnZlcnNlKCk7Cisg
ICAgSW50UmVjdCBsYXllclJlY3QgPSBzdXJmYWNlVG9MYXllci5wcm9qZWN0UXVhZChGbG9hdFF1
YWQoRmxvYXRSZWN0KG1pbmltYWxTdXJmYWNlUmVjdCkpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgp
OworICAgIGxheWVyUmVjdC5pbnRlcnNlY3QobGF5ZXJCb3VuZFJlY3QpOworICAgIHJldHVybiBs
YXllclJlY3Q7Cit9CisKKworc3RhdGljIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzSWZEaXJ0eShM
YXllckNocm9taXVtKiBsYXllciwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVuZGVyU3VyZmFjZSkK
K3sKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAgICBsYXllci0+cGFpbnRD
b250ZW50c0lmRGlydHkodmlzaWJsZUxheWVyUmVjdCh0YXJnZXRSZW5kZXJTdXJmYWNlLCBsYXll
ci0+Ym91bmRzKCksIGxheWVyLT5jb250ZW50Qm91bmRzKCksIGxheWVyLT5jY0xheWVySW1wbCgp
LT5kcmF3VHJhbnNmb3JtKCkpKTsKK30KKwogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBh
aW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
CiB7CiAgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5z
aXplKCkgLSAxOyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CkBAIC00MDUs
MTQgKzQ0NSwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRl
bnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheQogICAgICAgICAgICAgaWYgKCFz
Y2lzc29yUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgdGFyZ2V0U3VyZmFjZVJlY3Qu
aW50ZXJzZWN0KHNjaXNzb3JSZWN0KTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLT5kcmF3c0Nv
bnRlbnQoKSkKLSAgICAgICAgICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkodGFy
Z2V0U3VyZmFjZVJlY3QpOwotICAgICAgICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSAmJiBs
YXllci0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgICAgIGxheWVy
LT5tYXNrTGF5ZXIoKS0+cGFpbnRDb250ZW50c0lmRGlydHkodGFyZ2V0U3VyZmFjZVJlY3QpOwot
ICAgICAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxh
eWVyKCktPmRyYXdzQ29udGVudCgpKQotICAgICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+cGFpbnRDb250ZW50c0lmRGlydHkodGFyZ2V0U3VyZmFjZVJlY3QpOwotICAgICAgICAg
ICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1h
c2tMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPmRyYXdzQ29u
dGVudCgpKQotICAgICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVy
KCktPnBhaW50Q29udGVudHNJZkRpcnR5KHRhcmdldFN1cmZhY2VSZWN0KTsKKyAgICAgICAgICAg
IHBhaW50TGF5ZXJDb250ZW50c0lmRGlydHkobGF5ZXIsIHRhcmdldFN1cmZhY2VSZWN0KTsKKwor
ICAgICAgICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBwYWlu
dExheWVyQ29udGVudHNJZkRpcnR5KGxheWVyLT5tYXNrTGF5ZXIoKSwgdGFyZ2V0U3VyZmFjZVJl
Y3QpOworCisgICAgICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICAg
ICAgICAgIHBhaW50TGF5ZXJDb250ZW50c0lmRGlydHkobGF5ZXItPnJlcGxpY2FMYXllcigpLCB0
YXJnZXRTdXJmYWNlUmVjdCk7CisKKyAgICAgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVy
KCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgICAg
ICBwYWludExheWVyQ29udGVudHNJZkRpcnR5KGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xh
eWVyKCksIHRhcmdldFN1cmZhY2VSZWN0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTk5Miw3
ICsxMDM0LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIFJlbmRlclN1cmZhY2VDaHJvbWl1bSoKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGxheWVyLT5kcmF3KHRhcmdldFN1cmZhY2VSZWN0KTsKKyAgICBsYXllci0+ZHJhdyh2aXNp
YmxlTGF5ZXJSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+Ym91bmRzKCksIGxheWVyLT5j
b250ZW50Qm91bmRzKCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpKTsKIAogICAgIC8vIERyYXcg
dGhlIGRlYnVnIGJvcmRlciBpZiB0aGVyZSBpcyBvbmUuCiAgICAgbGF5ZXItPmRyYXdEZWJ1Z0Jv
cmRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKaW5kZXggYjkwMjQxNmJhMzdj
NGI5MWI1MTNkMmZiMjQwMjM2ZmEwNzJiMmMxYy4uMmU3NzM0ZDc5ZDc4YjliNGIwOTI1YmExNTY1
NzBmNjMxNTRiMDkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCkBAIC0yNzMs
NiArMjczLDggQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZVJlY3QoTGF5ZXJUZXh0
dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICBtX3Rl
eHR1cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRhdGVyLT5vcmllbnRhdGlvbigpOworICAgIG1f
c2FtcGxlZFRleGVsRm9ybWF0ID0gdGV4dHVyZVVwZGF0ZXItPnNhbXBsZWRUZXhlbEZvcm1hdCht
X3RleHR1cmVGb3JtYXQpOwogCiAgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKICAg
ICBjb250ZW50UmVjdFRvVGlsZUluZGljZXMobV91cGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0
LCBib3R0b20pOwpAQCAtMzM3LDE3ICszMzksMTcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06
OnNldExheWVyUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIGxheWVyUG9zaXRpb24pCiAgICAgbV9s
YXllclBvc2l0aW9uID0gbGF5ZXJQb3NpdGlvbjsKIH0KIAotdm9pZCBMYXllclRpbGVyQ2hyb21p
dW06OmRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIExheWVyVGV4dHVyZVVwZGF0
ZXIqIHRleHR1cmVVcGRhdGVyKQordm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXcoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBnbG9iYWxU
cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX3Rp
bGVzLnNpemUoKSB8fCBjb250ZW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHN3aXRjaCAodGV4dHVyZVVwZGF0ZXItPnNhbXBsZWRUZXhlbEZvcm1hdChtX3RleHR1cmVG
b3JtYXQpKSB7CisgICAgc3dpdGNoIChtX3NhbXBsZWRUZXhlbEZvcm1hdCkgewogICAgIGNhc2Ug
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQToKLSAgICAgICAgZHJh
d1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVy
ZXIoKS0+dGlsZXJQcm9ncmFtKCksIHRleHR1cmVVcGRhdGVyKTsKKyAgICAgICAgZHJhd1RpbGVz
KGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+
dGlsZXJQcm9ncmFtKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIExheWVyVGV4dHVyZVVw
ZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE6Ci0gICAgICAgIGRyYXdUaWxlcyhjb250ZW50
UmVjdCwgZ2xvYmFsVHJhbnNmb3JtLCBvcGFjaXR5LCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJv
Z3JhbVN3aXp6bGUoKSwgdGV4dHVyZVVwZGF0ZXIpOworICAgICAgICBkcmF3VGlsZXMoY29udGVu
dFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclBy
b2dyYW1Td2l6emxlKCkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTM2Niw3ICszNjgsNyBAQCB2b2lkIExheWVyVGlsZXJD
aHJvbWl1bTo6Z3Jvd0xheWVyVG9Db250YWluKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQog
fQogCiB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpkcmF3VGls
ZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBnbG9iYWxUcmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IFQqIHByb2dyYW0sIExheWVy
VGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKQordm9pZCBMYXllclRpbGVyQ2hyb21pdW06
OmRyYXdUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGdsb2JhbFRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3Jh
bSkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250
ZXh0KCk7CiAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbSgpKSk7CkBAIC00MDYsNyArNDA4LDcgQEAgdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRy
YXdUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXQKICAg
ICAgICAgICAgIGZsb2F0IHRleFNjYWxlWSA9IHRpbGVSZWN0LmhlaWdodCgpIC8gdGlsZUhlaWdo
dDsKICAgICAgICAgICAgIC8vIE9wZW5HTCBjb29yZGluYXRlIHN5c3RlbSBpcyBib3R0b20tdXAu
CiAgICAgICAgICAgICAvLyBJZiB0aWxlIHRleHR1cmUgaXMgdG9wLWRvd24sIHdlIG5lZWQgdG8g
ZmxpcCB0aGUgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlVXBk
YXRlci0+b3JpZW50YXRpb24oKSA9PSBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50
YXRpb24pIHsKKyAgICAgICAgICAgIGlmIChtX3RleHR1cmVPcmllbnRhdGlvbiA9PSBMYXllclRl
eHR1cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50YXRpb24pIHsKICAgICAgICAgICAgICAgICB0ZXhU
cmFuc2xhdGVZID0gMS4wIC0gdGV4VHJhbnNsYXRlWTsKICAgICAgICAgICAgICAgICB0ZXhTY2Fs
ZVkgKj0gLTEuMDsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKaW5k
ZXggNGEyNmM5Zjc4MzZjNjIwMGExNzFkYzA3OWI2YjZjM2E5MjljZDU0Mi4uOWExNTQ2YWM2Y2Vj
NzYxMDYyYWZlZDYzZWM4N2Q0YjUyODcwNDNiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJMYXllclRleHR1cmUuaCIKKyNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCiAj
aW5jbHVkZSAiVGlsaW5nRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTU5LDcgKzYwLDcgQEAgcHVibGljOgogICAgIC8v
IFVwZGF0ZSBpbnZhbGlkIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3Qg
cHJvdmlkZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuCiAgICAgdm9pZCB1cGRhdGVSZWN0KExheWVy
VGV4dHVyZVVwZGF0ZXIqKTsKICAgICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3
aXRoIHRoZSBjb250ZW50IHJlY3QuCi0gICAgdm9pZCBkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIExheWVy
VGV4dHVyZVVwZGF0ZXIqKTsKKyAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CiAKICAgICBp
bnQgbnVtVGlsZXMoKSBjb25zdCB7IHJldHVybiBtX3RpbGluZ0RhdGEubnVtVGlsZXMoKTsgfQog
CkBAIC0xMDUsNyArMTA2LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIERyYXcgYWxsIHRpbGVzIHRo
YXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QuCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0g
ICAgdm9pZCBkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgTGF5ZXJU
ZXh0dXJlVXBkYXRlciopOworICAgIHZvaWQgZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHksIGNvbnN0
IFQqIHByb2dyYW0pOwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgICAgdm9pZCBkcmF3VGV4
dHVyZWRRdWFkKEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHByb2plY3Rpb25NYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4
LApAQCAtMTYwLDYgKzE2MSw4IEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX3BhaW50UmVjdDsK
ICAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKIAorICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6Ok9y
aWVudGF0aW9uIG1fdGV4dHVyZU9yaWVudGF0aW9uOworICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6
OlNhbXBsZWRUZXhlbEZvcm1hdCBtX3NhbXBsZWRUZXhlbEZvcm1hdDsKICAgICBUaWxpbmdEYXRh
IG1fdGlsaW5nRGF0YTsKIAogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9sYXllclJlbmRl
cmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGY2ZGI2MTQx
ODMyZDc0MzNhYzU5ZDJkZGE3NzQzM2Q1ZjQ1MDhlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJUaWxlZExheWVyQ2hyb21pdW0uaCIKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgiCisjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCisjaW5jbHVkZSAiVGV4
dFN0cmVhbS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NU
aWxlZExheWVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCisvLyBTdGFy
dCB0aWxpbmcgd2hlbiB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiBhIGxheWVyIGFyZSBsYXJnZXIg
dGhhbiB0aGlzIHNpemUuCitzdGF0aWMgaW50IG1heFVudGlsZWRTaXplID0gNTEyOworCisvLyBX
aGVuIHRpbGluZyBpcyBlbmFibGVkLCB1c2UgdGlsZXMgb2YgdGhpcyBkaW1lbnNpb24gc3F1YXJl
ZC4KK3N0YXRpYyBpbnQgZGVmYXVsdFRpbGVTaXplID0gMjU2OworCit1c2luZyBuYW1lc3BhY2Ug
c3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRM
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgOiBMYXllckNo
cm9taXVtKG93bmVyKQorICAgICwgbV90aWxpbmdPcHRpb24oQXV0b1RpbGUpCit7Cit9CisKK1Rp
bGVkTGF5ZXJDaHJvbWl1bTo6flRpbGVkTGF5ZXJDaHJvbWl1bSgpCit7Cit9CisKK1Bhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQor
eworICAgIHJldHVybiBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgaWQoKSk7Cit9CisK
K3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKK3sKKyAgICBtX3Rp
bGVyLmNsZWFyKCk7CisgICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOworfQor
Cit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit7CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJS
ZW5kZXJlcihsYXllclJlbmRlcmVyKTsKKyAgICBjcmVhdGVUaWxlcklmTmVlZGVkKCk7Cit9CisK
K3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbigp
Cit7CisgICAgaWYgKCFtX3RpbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRT
aXplIHRpbGVTaXplKG1pbihkZWZhdWx0VGlsZVNpemUsIGNvbnRlbnRCb3VuZHMoKS53aWR0aCgp
KSwgbWluKGRlZmF1bHRUaWxlU2l6ZSwgY29udGVudEJvdW5kcygpLmhlaWdodCgpKSk7CisKKyAg
ICAvLyBUaWxlIGlmIGJvdGggZGltZW5zaW9ucyBsYXJnZSwgb3IgYW55IG9uZSBkaW1lbnNpb24g
bGFyZ2UgYW5kIHRoZSBvdGhlcgorICAgIC8vIGV4dGVuZHMgaW50byBhIHNlY29uZCB0aWxlLiBU
aGlzIGhldXJpc3RpYyBhbGxvd3MgZm9yIGxvbmcgc2tpbm55IGxheWVycworICAgIC8vIChlLmcu
IHNjcm9sbGJhcnMpIHRoYXQgYXJlIE54MSB0aWxlcyB0byBtaW5pbWl6ZSB3YXN0ZWQgdGV4dHVy
ZSBzcGFjZS4KKyAgICBjb25zdCBib29sIGFueURpbWVuc2lvbkxhcmdlID0gY29udGVudEJvdW5k
cygpLndpZHRoKCkgPiBtYXhVbnRpbGVkU2l6ZSB8fCBjb250ZW50Qm91bmRzKCkuaGVpZ2h0KCkg
PiBtYXhVbnRpbGVkU2l6ZTsKKyAgICBjb25zdCBib29sIGFueURpbWVuc2lvbk9uZVRpbGUgPSBj
b250ZW50Qm91bmRzKCkud2lkdGgoKSA8PSBkZWZhdWx0VGlsZVNpemUgfHwgY29udGVudEJvdW5k
cygpLmhlaWdodCgpIDw9IGRlZmF1bHRUaWxlU2l6ZTsKKyAgICBjb25zdCBib29sIGF1dG9UaWxl
ZCA9IGFueURpbWVuc2lvbkxhcmdlICYmICFhbnlEaW1lbnNpb25PbmVUaWxlOworCisgICAgYm9v
bCBpc1RpbGVkOworICAgIGlmIChtX3RpbGluZ09wdGlvbiA9PSBBbHdheXNUaWxlKQorICAgICAg
ICBpc1RpbGVkID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChtX3RpbGluZ09wdGlvbiA9PSBOZXZlclRp
bGUpCisgICAgICAgIGlzVGlsZWQgPSBmYWxzZTsKKyAgICBlbHNlCisgICAgICAgIGlzVGlsZWQg
PSBhdXRvVGlsZWQ7CisKKyAgICBJbnRTaXplIHJlcXVlc3RlZFNpemUgPSBpc1RpbGVkID8gdGls
ZVNpemUgOiBjb250ZW50Qm91bmRzKCk7CisgICAgY29uc3QgaW50IG1heFNpemUgPSBsYXllclJl
bmRlcmVyKCktPm1heFRleHR1cmVTaXplKCk7CisgICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9IHJl
cXVlc3RlZFNpemUuc2hydW5rVG8oSW50U2l6ZShtYXhTaXplLCBtYXhTaXplKSk7CisgICAgbV90
aWxlci0+c2V0VGlsZVNpemUoY2xhbXBlZFNpemUpOworfQorCitib29sIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fb3duZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV90aWxlcikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAobV90aWxpbmdPcHRpb24gPT0gTmV2ZXJUaWxlICYmIG1fdGlsZXItPm51bVRp
bGVzKCkgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIW1fdGlsZXIt
PnNraXBzRHJhdygpOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGlsZXJJ
Zk5lZWRlZCgpCit7CisgICAgaWYgKG1fdGlsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGNy
ZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKKworICAgIG1fdGlsZXIgPSBMYXllclRpbGVy
Q2hyb21pdW06OmNyZWF0ZSgKKyAgICAgICAgbGF5ZXJSZW5kZXJlcigpLAorICAgICAgICBJbnRT
aXplKGRlZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXplKSwKKyAgICAgICAgTGF5ZXJUaWxl
ckNocm9taXVtOjpIYXNCb3JkZXJUZXhlbHMpOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCit7CisgICAgbV90aWxlci0+dXBkYXRlUmVj
dCh0ZXh0dXJlVXBkYXRlcigpKTsKK30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldFRp
bGluZ09wdGlvbihUaWxpbmdPcHRpb24gdGlsaW5nT3B0aW9uKQoreworICAgIG1fdGlsaW5nT3B0
aW9uID0gdGlsaW5nT3B0aW9uOworICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7
Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRJc01hc2soYm9vbCBpc01hc2spCit7
CisgICAgc2V0VGlsaW5nT3B0aW9uKGlzTWFzayA/IE5ldmVyVGlsZSA6IEF1dG9UaWxlKTsKK30K
KworVHJhbnNmb3JtYXRpb25NYXRyaXggVGlsZWRMYXllckNocm9taXVtOjp0aWxpbmdUcmFuc2Zv
cm0oKSBjb25zdAoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGNjTGF5
ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKTsKKworICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZv
cm0oYm91bmRzKCkud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcygp
LndpZHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkuaGVpZ2h0
KCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSkpOworCisg
ICAgLy8gVGlsZXIgZHJhd3Mgd2l0aCBhIGRpZmZlcmVudCBvcmlnaW4gZnJvbSBvdGhlciBsYXll
cnMuCisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcygpLndpZHRoKCkgLyAy
LjAsIC1jb250ZW50Qm91bmRzKCkuaGVpZ2h0KCkgLyAyLjApOworCisgICAgcmV0dXJuIHRyYW5z
Zm9ybTsKK30KKwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NM
YXllckltcGwqIGxheWVyKQoreworICAgIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8o
bGF5ZXIpOworCisgICAgQ0NUaWxlZExheWVySW1wbCogdGlsZWRMYXllciA9IHN0YXRpY19jYXN0
PENDVGlsZWRMYXllckltcGwqPihsYXllcik7CisgICAgdGlsZWRMYXllci0+c2V0VGlsaW5nVHJh
bnNmb3JtKHRpbGluZ1RyYW5zZm9ybSgpKTsKKyAgICB0aWxlZExheWVyLT5zZXRUaWxlcihtX3Rp
bGVyLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gaW5kZW50OyArK2kpCisg
ICAgICAgIHRzIDw8ICIgICI7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpkdW1wTGF5
ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIExh
eWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCk7CisgICAgd3JpdGVJ
bmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgInNraXBzRHJhdzogIiA8PCAoIW1fdGlsZXIg
fHwgbV90aWxlci0+c2tpcHNEcmF3KCkpIDw8ICJcbiI7Cit9CisKK30KKyNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmMzZTkzNzQzY2IyZTIxNDEzZDU1NDVhYmNlMGVlMTRjODQxMjhhYzQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFRpbGVkTGF5ZXJDaHJv
bWl1bV9oCisjZGVmaW5lIFRpbGVkTGF5ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAi
Y2MvQ0NUaWxlZExheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExh
eWVyVGV4dHVyZTsKK2NsYXNzIExheWVyVGlsZXJDaHJvbWl1bTsKK2NsYXNzIExheWVyVGV4dHVy
ZVVwZGF0ZXI7CisKK2NsYXNzIFRpbGVkTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9t
aXVtIHsKK3B1YmxpYzoKKyAgICBlbnVtIFRpbGluZ09wdGlvbiB7IEFsd2F5c1RpbGUsIE5ldmVy
VGlsZSwgQXV0b1RpbGUgfTsKKworICAgIHZpcnR1YWwgflRpbGVkTGF5ZXJDaHJvbWl1bSgpOwor
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0
aWVzVG8oQ0NMYXllckltcGwqKTsKKworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBj
b25zdDsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFRpbGVkTGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2Vz
KCk7CisgICAgdm9pZCB1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbigpOworCisgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKSA9IDA7CisgICAgdmlydHVh
bCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0ID0gMDsKKworICAg
IE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fdGlsZXI7CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworCisgICAg
dmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQp
IGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKik7CisKKyAgICB2b2lkIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKKyAgICB2b2lk
IHNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24pOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0OworCisgICAgVGlsaW5nT3B0aW9uIG1fdGlsaW5nT3B0
aW9uOworfTsKKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggM2Y3NDc3OGQ2OTQ5YjViMDEyYjgx
MGEwYTA2NWU1MjhmNWI0MDUwNi4uNTQ3OWM0Y2YzNThiOWNmYmVlMGVjNDhlZmZkMDg0YzNjNDAw
NWNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTM2LDE1ICsxMzYsOSBAQCBib29s
IENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCgpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi0vLyBUaGVzZSBiZWxvbmcgb24gQ0NMYXllckltcGwsIGJ1dCBzaG91bGQgYmUgb3Zl
cnJpZGRlbiBieSBlYWNoIHR5cGUgYW5kIG5vdCBkZWZlciB0byB0aGUgTGF5ZXJDaHJvbWl1bSBz
dWJ0eXBlcy4KLWJvb2wgQ0NMYXllckltcGw6OmRyYXdzQ29udGVudCgpIGNvbnN0Cit2b2lkIEND
TGF5ZXJJbXBsOjpkcmF3KGNvbnN0IEludFJlY3QmKQogewotICAgIHJldHVybiBtX293bmVyLT5k
cmF3c0NvbnRlbnQoKTsKLX0KLQotdm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhjb25zdCBJbnRSZWN0
JiB0YXJnZXRTdXJmYWNlUmVjdCkKLXsKLSAgICByZXR1cm4gbV9vd25lci0+ZHJhdyh0YXJnZXRT
dXJmYWNlUmVjdCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgQ0NMYXll
ckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5k
ZXggOWUyZGExY2ZmMDg1NWUyYmZjZDdkZDcyYTcxM2NhNzE5YjQxNmIzZC4uNTE2ZDQwZTY2MTMw
Y2NmODQ1Zjk5ZWI3NzUzMWFlZjRhMmQyYzk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC03
MiwxMCArNzIsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygpOwogICAgIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgdm9pZCBi
aW5kQ29udGVudHNUZXh0dXJlKCk7CisgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1
cmUoKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGxheWVyIGhhcyBjb250ZW50IHRv
IGRyYXcuCi0gICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZvaWQg
c2V0RHJhd3NDb250ZW50KGJvb2wgZHJhd3NDb250ZW50KSB7IG1fZHJhd3NDb250ZW50ID0gZHJh
d3NDb250ZW50OyB9CisgICAgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2Ry
YXdzQ29udGVudDsgfQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgbGF5ZXIn
cyBkZXNjZW5kYW50cyBoYXMgY29udGVudCB0byBkcmF3LgogICAgIGJvb2wgZGVzY2VuZGFudHNE
cmF3c0NvbnRlbnQoKTsKQEAgLTEzNCwxMSArMTM1LDE1IEBAIHB1YmxpYzoKICAgICBSZW5kZXJT
dXJmYWNlQ2hyb21pdW0qIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldFJlbmRlclN1cmZhY2U7IH0KICAgICB2b2lkIHNldFRhcmdldFJlbmRlclN1cmZhY2UoUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBzdXJmYWNlKSB7IG1fdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IHN1
cmZhY2U7IH0KIAotICAgIGJvb2wgZG91YmxlU2lkZWQoKSBjb25zdCB7IHJldHVybiBtX2RvdWJs
ZVNpZGVkOyB9Ci0gICAgdm9pZCBzZXREb3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKSB7IG1f
ZG91YmxlU2lkZWQgPSBkb3VibGVTaWRlZDsgfQogICAgIGNvbnN0IEludFNpemUmIGJvdW5kcygp
IGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAgICAgdm9pZCBzZXRCb3VuZHMoY29uc3QgSW50
U2l6ZSYgYm91bmRzKSB7IG1fYm91bmRzID0gYm91bmRzOyB9CiAKKyAgICBjb25zdCBJbnRTaXpl
JiBjb250ZW50Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50Qm91bmRzOyB9CisgICAg
dm9pZCBzZXRDb250ZW50Qm91bmRzKGNvbnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMpIHsgbV9j
b250ZW50Qm91bmRzID0gY29udGVudEJvdW5kczsgfQorCisgICAgYm9vbCBkb3VibGVTaWRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlU2lkZWQ7IH0KKyAgICB2b2lkIHNldERvdWJsZVNpZGVk
KGJvb2wgZG91YmxlU2lkZWQpIHsgbV9kb3VibGVTaWRlZCA9IGRvdWJsZVNpZGVkOyB9CisKICAg
ICAvLyBSZXR1cm5zIHRoZSByZWN0IGNvbnRhaW50YWluaW5nIHRoaXMgbGF5ZXIgaW4gdGhlIGN1
cnJlbnQgdmlldydzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgIGNvbnN0IEludFJlY3QgZ2V0RHJh
d1JlY3QoKSBjb25zdDsKIApAQCAtMTUyLDYgKzE1Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBIQUNL
IFRPRE8gZml4IHRoaXMKICAgICBMYXllckNocm9taXVtKiBvd25lcigpIGNvbnN0IHsgcmV0dXJu
IG1fb3duZXI7IH0KICAgICB2b2lkIGNsZWFyT3duZXIoKSB7IG1fb3duZXIgPSAwOyB9CisKIHBy
b3RlY3RlZDoKICAgICAvLyBGb3Igbm93LCBDQ0xheWVySW1wbHMgaGF2ZSBhIGJhY2sgcG9pbnRl
ciB0byB0aGVpciBMYXllckNocm9taXVtLgogICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBhZnRl
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzMgaXMgZml4ZWQu
CkBAIC0xNzYsNiArMTgyLDcgQEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9p
bnQ7CiAgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7CiAgICAgSW50U2l6ZSBtX2JvdW5kczsKKyAg
ICBJbnRTaXplIG1fY29udGVudEJvdW5kczsKIAogICAgIC8vIFdoZXRoZXIgdGhlICJiYWNrIiBv
ZiB0aGlzIGxheWVyIHNob3VsZCBkcmF3LgogICAgIGJvb2wgbV9kb3VibGVTaWRlZDsKQEAgLTE4
OCw2ICsxOTUsOCBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNm
b3JtOwogICAgIGJvb2wgbV91c2VzTGF5ZXJTY2lzc29yOwogCisgICAgYm9vbCBtX2RyYXdzQ29u
dGVudDsKKwogICAgIC8vIFByb3BlcnRpZXMgb3duZWQgZXhjbHVzaXZlbHkgYnkgdGhpcyBDQ0xh
eWVySW1wbC4KICAgICAvLyBEZWJ1Z2dpbmcuCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMjEwOTBiN2YyMTFlOWE3YzM1OWE0OGI1
YzgyZTJjODViYzA0ZjM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTAsMCArMSw3
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKKworI2luY2x1
ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXllclRleHR1cmU7CisKK0ND
VGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGlu
dCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKKyAgICAsIG1fdGlsZXIoMCkKK3sK
K30KKworQ0NUaWxlZExheWVySW1wbDo6fkNDVGlsZWRMYXllckltcGwoKQoreworfQorCit2b2lk
IENDVGlsZWRMYXllckltcGw6OmRyYXcoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQoreworICAg
IGlmICghbGF5ZXJSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgbV90aWxlci0+ZHJhdyhsYXllclJl
Y3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkcmF3T3BhY2l0eSgpKTsKK30KKwordm9pZCBDQ1RpbGVk
TGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKCkKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIG9ubHkgdmFsaWQgZm9yIHNpbmdsZSB0ZXh0dXJlIGxheWVycywgZS5nLiBtYXNrcy4KKyAg
ICBBU1NFUlQobV90aWxlcik7CisKKyAgICBMYXllclRleHR1cmUqIHRleHR1cmUgPSBtX3RpbGVy
LT5nZXRTaW5nbGVUZXh0dXJlKCk7CisgICAgQVNTRVJUKHRleHR1cmUpOworCisgICAgdGV4dHVy
ZS0+YmluZFRleHR1cmUoKTsKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAoreworICAgIHdyaXRl
SW5kZW50KHRzLCBpbmRlbnQpOworICAgIENDTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVz
KHRzLCBpbmRlbnQpOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQyNzUzOTZk
MjUwMWMxZjZjMDUzMzZhZmRmZTUwMGJjZmUyNzE4ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwu
aApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1RpbGVkTGF5ZXJJbXBsX2gKKyNk
ZWZpbmUgQ0NUaWxlZExheWVySW1wbF9oCisKKyNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0u
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENDVGlsZWRMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVGlsZWRMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9t
aXVtKiBvd25lciwgaW50IGlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
Q1RpbGVkTGF5ZXJJbXBsKG93bmVyLCBpZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5DQ1RpbGVk
TGF5ZXJJbXBsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0VGlsaW5nVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
aWxpbmdUcmFuc2Zvcm0pIHsgbV90aWxpbmdUcmFuc2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm07IH0K
KyAgICB2b2lkIHNldFRpbGVyKExheWVyVGlsZXJDaHJvbWl1bSogdGlsZXIpIHsgbV90aWxlciA9
IHRpbGVyOyB9CisKK3ByaXZhdGU6CisgICAgQ0NUaWxlZExheWVySW1wbChMYXllckNocm9taXVt
KiwgaW50IGlkKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdGlsaW5nVHJhbnNmb3Jt
OworICAgIExheWVyVGlsZXJDaHJvbWl1bSogbV90aWxlcjsKK307CisKK30KKworI2VuZGlmIC8v
IENDVGlsZWRMYXllckltcGxfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99890</attachid>
            <date>2011-07-06 15:00:35 -0700</date>
            <delta_ts>2011-07-12 17:56:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58833-20110706150034.patch</filename>
            <type>text/plain</type>
            <size>44639</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA0OTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MTVmYjhkYjlmMGYwOWFl
OTkwOGM5MmEwYjk4YzEzMGM5ZWVjZDIzLi5jNDUyYTFkMDQ4MWY4YTNlODkwMDI1ZWJhYjBmMjRl
MTFhMzdlOTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkgQEAKKzIwMTEtMDctMDYgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgZHJhdyBpbXBsZW1lbnRh
dGlvbiBmb3IgQ29udGVudExheWVyQ2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtIHRvIHRoZSBh
cHByb3ByaWF0ZSBDQ0xheWVySW1wbCBzdWJjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzMKKworICAgICAgICBBZGRzIGEgVGlsZWRMYXll
ckNocm9taXVtIGNsYXNzIHRvIGhhbmRsZSB0aGUgdGlsaW5nIGxvZ2ljIHNoYXJlZCBieSBDb250
ZW50TGF5ZXJDaHJvbWl1bSBhbmQgSW1hZ2VMYXllckNocm9taXVtCisgICAgICAgIHNvIHRoYXQg
dGhleSBjYW4gYmUgc2libGluZ3MgaW4gdGhlIGNsYXNzIGhpZXJhcmNoeSBpbnN0ZWFkIG9mIGNo
aWxkcmVuLiBBbHNvIGFkZHMgYSBDQ1RpbGVkTGF5ZXJJbXBsIHRvIGhhbmRsZQorICAgICAgICB0
aGUgZHJhd2luZyByZXNwb25zaWJpbGl0aWVzIGZvciB0aWxlZCBsYXllcnMuCisKKyAgICAgICAg
VGlsZWRMYXllckNocm9taXVtIG1haW50YWlucyBhIHRpbGVyLCB0aWxpbmcgb3B0aW9ucywgYW5k
IGNhbGN1bGF0ZXMgdGhlIHRpbGluZyB0cmFuc2Zvcm0uIFN1YmNsYXNzZXMgYXJlCisgICAgICAg
IHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgYW4gYXBwcm9wcmlhdGUgdGV4dHVyZSB1cGRhdGVy
IGltcGxlbWVudGF0aW9uLiBDQ1RpbGVkTGF5ZXJJbXBsIHRha2VzIHRoZSB0aWxlciwKKyAgICAg
ICAgdGlsaW5nIHRyYW5zZm9ybSBhbmQgbGF5ZXIgcHJvcGVydGllcyBhbmQgZHJhd3MgdGhlIGxh
eWVyLiAgTG9uZ2VyIHRlcm0gaXQnZCBiZSBiZXR0ZXIgb2YgdGhlIENDVGlsZWRMYXllckltcGwK
KyAgICAgICAgb3duZWQgdGhlIHRpbGVyIGFuZCB0aGUgVGlsZWRMYXllckNocm9taXVtIG9ubHkg
b3duZWQgYW4gdXBkYXRlciwgYnV0IGdldHRpbmcgdGhlcmUgd2lsbCByZXF1aXJlIGNoYW5naW5n
IHRoZQorICAgICAgICB3YXkgdGlsZSBldmljdGlvbiB3b3Jrcy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
Q29udGVudExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6dGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y29udGVudEJvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpjY0xheWVySW1wbCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6Y29udGVudEJvdW5kcyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjp2aXNpYmxlTGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50TGF5ZXJD
b250ZW50c0lmRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyVGlsZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hy
b21pdW06OnVwZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVt
OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6ZHJhd1RpbGVz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6
VGlsZWRMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1
bTo6flRpbGVkTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hy
b21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVy
Q2hyb21pdW06OnNldExheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXll
ckNocm9taXVtOjp1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5nT3B0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0SXNNYXNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAg
IChXZWJDb3JlOjp3cml0ZUluZGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hy
b21pdW06OmR1bXBMYXllclByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllckltcGw6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpjb250ZW50
Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRDb250ZW50Qm91bmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkb3VibGVTaWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0RG91YmxlU2lkZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6fkNDVGlsZWRMYXllckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGlsZWRMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaWxlZExheWVySW1wbDo6c2V0VGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnNldFRpbGVyKToKKwogMjAxMS0wNy0wMSAgSmFtZXMg
Um9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0
ZXBoZW4gV2hpdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOWRhODE1MWEzNDc5ODU0ZDkxNTYxNGIx
MTJiODBhOGQzNDgwZjY0MC4uNzMzOWExNTc2NzIwNjVhY2Y3NTMzYmU2ZGU3MDNiYzg0NDk4YWVh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDEzNCw2ICs0MTM0LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwJywKQEAgLTQxNzUsNiArNDE3Nyw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRh
c2suaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCA1MTI1Yzk4MTZmYzg2OTViZTEyNDI5
ZjA3M2I1ZmQ5MGIwZWI2MTI3Li44NTQyODcwNDg0Mjc1ZTU1NzcxNzEzNzQ3MjM0MWI1ZDIxMDFl
ZDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0zNCwyNiArMzQs
MTIgQEAKIAogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJj
Yy9DQ0xheWVySW1wbC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21p
dW0uaCIKLSNpbmNsdWRlICJMYXllclRleHR1cmUuaCIKICNpbmNsdWRlICJMYXllclRleHR1cmVV
cGRhdGVyQ2FudmFzLmgiCi0jaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1CcmlkZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKLSNp
bmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKLS8v
IFN0YXJ0IHRpbGluZyB3aGVuIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIGEgbGF5ZXIgYXJlIGxh
cmdlciB0aGFuIHRoaXMgc2l6ZS4KLXN0YXRpYyBpbnQgbWF4VW50aWxlZFNpemUgPSA1MTI7Ci0K
LS8vIFdoZW4gdGlsaW5nIGlzIGVuYWJsZWQsIHVzZSB0aWxlcyBvZiB0aGlzIGRpbWVuc2lvbiBz
cXVhcmVkLgotc3RhdGljIGludCBkZWZhdWx0VGlsZVNpemUgPSAyNTY7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBzdGQ7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29udGVudExheWVyUGFp
bnRlciA6IHB1YmxpYyBMYXllclBhaW50ZXJDaHJvbWl1bSB7CkBAIC05MCw4ICs3Niw3IEBAIFBh
c3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IENvbnRlbnRMYXllckNocm9taXVtOjpjcmVh
dGUoR3JhcGhpY3NMYXllckNocm9tCiB9CiAKIENvbnRlbnRMYXllckNocm9taXVtOjpDb250ZW50
TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogTGF5ZXJD
aHJvbWl1bShvd25lcikKLSAgICAsIG1fdGlsaW5nT3B0aW9uKENvbnRlbnRMYXllckNocm9taXVt
OjpBdXRvVGlsZSkKKyAgICA6IFRpbGVkTGF5ZXJDaHJvbWl1bShvd25lcikKIHsKIH0KIApAQCAt
MTA1LDcgKzkwLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lm
RGlydHkoKQogICAgIEFTU0VSVChkcmF3c0NvbnRlbnQoKSk7CiAgICAgQVNTRVJUKGxheWVyUmVu
ZGVyZXIoKSk7CiAKLSAgICB1cGRhdGVMYXllclNpemUoKTsKKyAgICB1cGRhdGVUaWxlU2l6ZUFu
ZFRpbGluZ09wdGlvbigpOwogCiAgICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gdmlzaWJs
ZUxheWVyUmVjdCgpOwogICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQpAQCAtMTE4LDIxICsx
MDMsMTMgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHko
KQogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdGls
ZXItPnByZXBhcmVUb1VwZGF0ZShsYXllclJlY3QsIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOwor
ICAgIG1fdGlsZXItPnByZXBhcmVUb1VwZGF0ZShsYXllclJlY3QsIHRleHR1cmVVcGRhdGVyKCkp
OwogICAgIG1fZGlydHlSZWN0ID0gRmxvYXRSZWN0KCk7CiB9CiAKLXZvaWQgQ29udGVudExheWVy
Q2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQotewotICAgIG1fdGV4dHVyZVVwZGF0ZXIuY2xl
YXIoKTsKLSAgICBtX3RpbGVyLmNsZWFyKCk7Ci0gICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJl
c291cmNlcygpOwotfQotCi12b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRl
cmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK2Jvb2wgQ29udGVudExh
eWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgTGF5ZXJDaHJvbWl1bTo6
c2V0TGF5ZXJSZW5kZXJlcihsYXllclJlbmRlcmVyKTsKLSAgICBjcmVhdGVUaWxlcklmTmVlZGVk
KCk7CisgICAgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+ZHJhd3NDb250ZW50KCkgJiYgVGls
ZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpCkBAIC0xNDgsMTI5ICsxMjUs
NSBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVl
ZGVkKCkKICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6
Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250ZXh0KCksIENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0
ZShtX293bmVyKSwgbGF5ZXJSZW5kZXJlcigpLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7CiB9
CiAKLVRyYW5zZm9ybWF0aW9uTWF0cml4IENvbnRlbnRMYXllckNocm9taXVtOjp0aWxpbmdUcmFu
c2Zvcm0oKQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGNjTGF5ZXJJ
bXBsKCktPmRyYXdUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChjb250ZW50Qm91bmRzKCkuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwotCi0gICAgdHJhbnNmb3JtLnNjYWxlTm9u
VW5pZm9ybShib3VuZHMoKS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91
bmRzKCkud2lkdGgoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS5o
ZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcygpLmhlaWdodCgpKSk7
Ci0KLSAgICAvLyBUaWxlciBkcmF3cyB3aXRoIGEgZGlmZmVyZW50IG9yaWdpbiBmcm9tIG90aGVy
IGxheWVycy4KLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzKCkud2lkdGgo
KSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICByZXR1cm4g
dHJhbnNmb3JtOwotfQotCi1JbnRTaXplIENvbnRlbnRMYXllckNocm9taXVtOjpjb250ZW50Qm91
bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYm91bmRzKCk7Ci19Ci0KLXZvaWQgQ29udGVudExh
eWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyU2l6ZSgpCi17Ci0gICAgaWYgKCFtX3RpbGVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBJbnRTaXplIHRpbGVTaXplKG1pbihkZWZhdWx0VGls
ZVNpemUsIGNvbnRlbnRCb3VuZHMoKS53aWR0aCgpKSwgbWluKGRlZmF1bHRUaWxlU2l6ZSwgY29u
dGVudEJvdW5kcygpLmhlaWdodCgpKSk7Ci0KLSAgICAvLyBUaWxlIGlmIGJvdGggZGltZW5zaW9u
cyBsYXJnZSwgb3IgYW55IG9uZSBkaW1lbnNpb24gbGFyZ2UgYW5kIHRoZSBvdGhlcgotICAgIC8v
IGV4dGVuZHMgaW50byBhIHNlY29uZCB0aWxlLiBUaGlzIGhldXJpc3RpYyBhbGxvd3MgZm9yIGxv
bmcgc2tpbm55IGxheWVycwotICAgIC8vIChlLmcuIHNjcm9sbGJhcnMpIHRoYXQgYXJlIE54MSB0
aWxlcyB0byBtaW5pbWl6ZSB3YXN0ZWQgdGV4dHVyZSBzcGFjZS4KLSAgICBjb25zdCBib29sIGFu
eURpbWVuc2lvbkxhcmdlID0gY29udGVudEJvdW5kcygpLndpZHRoKCkgPiBtYXhVbnRpbGVkU2l6
ZSB8fCBjb250ZW50Qm91bmRzKCkuaGVpZ2h0KCkgPiBtYXhVbnRpbGVkU2l6ZTsKLSAgICBjb25z
dCBib29sIGFueURpbWVuc2lvbk9uZVRpbGUgPSBjb250ZW50Qm91bmRzKCkud2lkdGgoKSA8PSBk
ZWZhdWx0VGlsZVNpemUgfHwgY29udGVudEJvdW5kcygpLmhlaWdodCgpIDw9IGRlZmF1bHRUaWxl
U2l6ZTsKLSAgICBjb25zdCBib29sIGF1dG9UaWxlZCA9IGFueURpbWVuc2lvbkxhcmdlICYmICFh
bnlEaW1lbnNpb25PbmVUaWxlOwotCi0gICAgYm9vbCBpc1RpbGVkOwotICAgIGlmIChtX3RpbGlu
Z09wdGlvbiA9PSBBbHdheXNUaWxlKQotICAgICAgICBpc1RpbGVkID0gdHJ1ZTsKLSAgICBlbHNl
IGlmIChtX3RpbGluZ09wdGlvbiA9PSBOZXZlclRpbGUpCi0gICAgICAgIGlzVGlsZWQgPSBmYWxz
ZTsKLSAgICBlbHNlCi0gICAgICAgIGlzVGlsZWQgPSBhdXRvVGlsZWQ7Ci0KLSAgICBJbnRTaXpl
IHJlcXVlc3RlZFNpemUgPSBpc1RpbGVkID8gdGlsZVNpemUgOiBjb250ZW50Qm91bmRzKCk7Ci0g
ICAgY29uc3QgaW50IG1heFNpemUgPSBsYXllclJlbmRlcmVyKCktPm1heFRleHR1cmVTaXplKCk7
Ci0gICAgSW50U2l6ZSBjbGFtcGVkU2l6ZSA9IHJlcXVlc3RlZFNpemUuc2hydW5rVG8oSW50U2l6
ZShtYXhTaXplLCBtYXhTaXplKSk7Ci0gICAgbV90aWxlci0+c2V0VGlsZVNpemUoY2xhbXBlZFNp
emUpOwotfQotCi12b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3KCkKLXsKLSAgICBjb25z
dCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7Ci0gICAgaWYgKCFsYXll
clJlY3QuaXNFbXB0eSgpKQotICAgICAgICBtX3RpbGVyLT5kcmF3KGxheWVyUmVjdCwgdGlsaW5n
VHJhbnNmb3JtKCksIGNjTGF5ZXJJbXBsKCktPmRyYXdPcGFjaXR5KCksIG1fdGV4dHVyZVVwZGF0
ZXIuZ2V0KCkpOwotfQotCi1ib29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQo
KSBjb25zdAotewotICAgIGlmICghbV9vd25lciB8fCAhbV9vd25lci0+ZHJhd3NDb250ZW50KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV90aWxlcikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAobV90aWxpbmdPcHRpb24gPT0gTmV2ZXJUaWxlICYmIG1fdGls
ZXItPm51bVRpbGVzKCkgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
IW1fdGlsZXItPnNraXBzRHJhdygpOwotfQotCi12b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpj
cmVhdGVUaWxlcklmTmVlZGVkKCkKLXsKLSAgICBpZiAobV90aWxlcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpOwotCi0gICAgbV90aWxlciA9
IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKAotICAgICAgICBsYXllclJlbmRlcmVyKCksCi0g
ICAgICAgIEludFNpemUoZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0VGlsZVNpemUpLAotICAgICAg
ICBMYXllclRpbGVyQ2hyb21pdW06Okhhc0JvcmRlclRleGVscyk7Ci19Ci0KLXZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQotewotICAgIG1fdGls
ZXItPnVwZGF0ZVJlY3QobV90ZXh0dXJlVXBkYXRlci5nZXQoKSk7Ci19Ci0KLXZvaWQgQ29udGVu
dExheWVyQ2hyb21pdW06OnNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24gb3B0aW9uKQotewot
ICAgIG1fdGlsaW5nT3B0aW9uID0gb3B0aW9uOwotICAgIHVwZGF0ZUxheWVyU2l6ZSgpOwotfQot
Ci12b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpiaW5kQ29udGVudHNUZXh0dXJlKCkKLXsKLSAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHNpbmdsZSB0ZXh0dXJlIGxheWVy
cywgZS5nLiBtYXNrcy4KLSAgICBBU1NFUlQobV90aWxpbmdPcHRpb24gPT0gTmV2ZXJUaWxlKTsK
LSAgICBBU1NFUlQobV90aWxlcik7Ci0KLSAgICBMYXllclRleHR1cmUqIHRleHR1cmUgPSBtX3Rp
bGVyLT5nZXRTaW5nbGVUZXh0dXJlKCk7Ci0gICAgQVNTRVJUKHRleHR1cmUpOwotCi0gICAgdGV4
dHVyZS0+YmluZFRleHR1cmUoKTsKLX0KLQotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0
SXNNYXNrKGJvb2wgaXNNYXNrKQotewotICAgIHNldFRpbGluZ09wdGlvbihpc01hc2sgPyBOZXZl
clRpbGUgOiBBdXRvVGlsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsg
KytpKQotICAgICAgICB0cyA8PCAiICAiOwotfQotCi12b2lkIENvbnRlbnRMYXllckNocm9taXVt
OjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAot
ewotICAgIExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCk7Ci0g
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgInNraXBzRHJhdzogIiA8PCAo
IW1fdGlsZXIgfHwgbV90aWxlci0+c2tpcHNEcmF3KCkpIDw8ICJcbiI7Ci19Ci0KIH0KICNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaAppbmRleCA5YjU3MDk0ZWJlNWEzNzJjMzcwMmRjYjg3ODNhOWY0ZjE1YjY2NmVkLi5l
MGJiZGVkYTgyNmE2NjYwMzVlYjk2MjM0MmRhOTc1NjU4YTE3MjNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRl
bnRMYXllckNocm9taXVtLmgKQEAgLTM0LDcgKzM0LDggQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKIAotI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJU
aWxlZExheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDMsNDQgKzQ0LDI0IEBAIGNsYXNzIExheWVyVGls
ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CiAKIC8vIEEgTGF5ZXIgdGhh
dCByZXF1aXJlcyBhIEdyYXBoaWNzQ29udGV4dCB0byByZW5kZXIgaXRzIGNvbnRlbnRzLgotY2xh
c3MgQ29udGVudExheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7Ci0gICAgZnJp
ZW5kIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKK2NsYXNzIENvbnRlbnRMYXllckNocm9t
aXVtIDogcHVibGljIFRpbGVkTGF5ZXJDaHJvbWl1bSB7CiBwdWJsaWM6Ci0gICAgZW51bSBUaWxp
bmdPcHRpb24geyBBbHdheXNUaWxlLCBOZXZlclRpbGUsIEF1dG9UaWxlIH07Ci0KICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogb3duZXIgPSAwKTsKIAogICAgIHZpcnR1YWwgfkNvbnRlbnRMYXllckNocm9taXVt
KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRJc01hc2soYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVu
dCgpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6Citwcml2YXRlOgogICAgIGV4cGxpY2l0IENvbnRlbnRM
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuICJDb250ZW50
TGF5ZXIiOyB9Ci0gICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVh
bSYsIGludCBpbmRlbnQpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGNsZWFudXBSZXNvdXJj
ZXMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hy
b21pdW0qKTsKIAotICAgIHZpcnR1YWwgSW50U2l6ZSBjb250ZW50Qm91bmRzKCkgY29uc3Q7Ci0K
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxpbmdUcmFuc2Zvcm0oKTsKLQotICAgIHZvaWQg
dXBkYXRlTGF5ZXJTaXplKCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CisgICAg
dmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCk7Ci0gICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGls
aW5nT3B0aW9uKTsKKyAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRh
dGVyKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlVXBkYXRlci5nZXQoKTsgfQogCiAgICAgT3du
UHRyPExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7Ci0gICAgT3duUHRyPExh
eWVyVGlsZXJDaHJvbWl1bT4gbV90aWxlcjsKLSAgICBUaWxpbmdPcHRpb24gbV90aWxpbmdPcHRp
b247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCA2Mzg1ZmMz
ZjFmZDFhMWE0Nzg2MzYxZjEzMTcxMTlmNDJkMDk0ZTQ1Li5mMjQ4ZjJjMTYyNTY0OTgwOTE2ZTA5
ZGI0YjU5ZWNkZTNjMTQwMjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTExNSw5ICsxMTUsOCBAQCBQYXNzUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gSW1hZ2VMYXll
ckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKgogfQogCiBJbWFnZUxheWVy
Q2hyb21pdW06OkltYWdlTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KQotICAgIDogQ29udGVudExheWVyQ2hyb21pdW0ob3duZXIpCisgICAgOiBUaWxlZExheWVyQ2hy
b21pdW0ob3duZXIpCiAgICAgLCBtX2ltYWdlRm9yQ3VycmVudEZyYW1lKDApCi0gICAgLCBtX2Nv
bnRlbnRzKDApCiB7CiB9CiAKQEAgLTEyNSw2ICsxMjQsMTIgQEAgSW1hZ2VMYXllckNocm9taXVt
Ojp+SW1hZ2VMYXllckNocm9taXVtKCkKIHsKIH0KIAordm9pZCBJbWFnZUxheWVyQ2hyb21pdW06
OmNsZWFudXBSZXNvdXJjZXMoKQoreworICAgIG1fdGV4dHVyZVVwZGF0ZXIuY2xlYXIoKTsKKyAg
ICBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKK30KKwogdm9pZCBJbWFn
ZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRzKEltYWdlKiBjb250ZW50cykKIHsKICAgICAvLyBz
ZXRDb250ZW50cygpIGN1cnJlbnRseSBnZXRzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBpcyBhbnkK
QEAgLTE0NSwxMCArMTUwLDggQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVu
dHNJZkRpcnR5KCkKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKIAogICAgIGlmICghbV9k
aXJ0eVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvd25jYXN0IGlz
IGJhZC4gVGhlIGZpeCBpcyB0byBtYWtlIEltYWdlTGF5ZXJDaHJvbWl1bSBub3QgZGVyaXZlIGZy
b20gQ29udGVudExheWVyQ2hyb21pdW0uCi0gICAgICAgIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRl
ciogaW1hZ2VUZXh0dXJlVXBkYXRlciA9IHN0YXRpY19jYXN0PEltYWdlTGF5ZXJUZXh0dXJlVXBk
YXRlcio+KG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOwotICAgICAgICBpbWFnZVRleHR1cmVVcGRh
dGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSk7Ci0gICAgICAgIHVwZGF0ZUxheWVyU2l6ZSgpOworICAgICAgICBtX3RleHR1cmVVcGRh
dGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSk7CisgICAgICAgIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7CiAgICAgICAg
IEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50KCksIGNvbnRlbnRCb3VuZHMoKSk7CiAgICAgICAg
IGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX3RpbGVyLT5pbnZh
bGlkYXRlUmVjdChwYWludFJlY3QpOwpAQCAtMTU2LDIzICsxNTksMzMgQEAgdm9pZCBJbWFnZUxh
eWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKICAgICAgICAgfQogICAgIH0KIAor
ICAgIGlmICh2aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
ICAgICBtX3RpbGVyLT5wcmVwYXJlVG9VcGRhdGUodmlzaWJsZUxheWVyUmVjdCgpLCBtX3RleHR1
cmVVcGRhdGVyLmdldCgpKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoKQorTGF5ZXJUZXh0dXJlVXBkYXRlciogSW1hZ2VMYXllckNocm9t
aXVtOjp0ZXh0dXJlVXBkYXRlcigpIGNvbnN0CiB7Ci0gICAgbV90aWxlci0+dXBkYXRlUmVjdCht
X3RleHR1cmVVcGRhdGVyLmdldCgpKTsKKyAgICByZXR1cm4gbV90ZXh0dXJlVXBkYXRlci5nZXQo
KTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZO
ZWVkZWQoKQorSW50U2l6ZSBJbWFnZUxheWVyQ2hyb21pdW06OmNvbnRlbnRCb3VuZHMoKSBjb25z
dAogewotICAgIGlmICghbV90ZXh0dXJlVXBkYXRlcikKLSAgICAgICAgbV90ZXh0dXJlVXBkYXRl
ciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250ZXh0
KCksIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpOworICAgIGlmICgh
bV9jb250ZW50cykKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICByZXR1cm4gbV9jb250
ZW50cy0+c2l6ZSgpOwogfQogCi1JbnRTaXplIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y29udGVudEJv
dW5kcygpIGNvbnN0Citib29sIEltYWdlTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9jb250ZW50cy0+c2l6ZSgpOworICAgIHJldHVybiBtX2NvbnRl
bnRzICYmIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCk7Cit9CisKK3ZvaWQgSW1h
Z2VMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCkKK3sKKyAgICBp
ZiAoIW1fdGV4dHVyZVVwZGF0ZXIpCisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShsYXllclJlbmRlcmVyQ29udGV4dCgpLCBsYXllclJl
bmRlcmVyKCktPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uaAppbmRleCA2YTc0NzYxMGY3OTBlZjU2MDY4NmU4MWNlZDNjYTIwNjllMDU2
NjM3Li45OTUzMzgwOTkzZGNjMmE5MDJmNWM2ZjA5MWViZTUzNTVjY2MxYjE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNDQsMzEgKzQ0LDM2IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEltYWdlOworY2xhc3MgSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOwogCiAv
LyBBIExheWVyIHRoYXQgY29udGFpbnMgb25seSBhbiBJbWFnZSBlbGVtZW50LgotY2xhc3MgSW1h
Z2VMYXllckNocm9taXVtIDogcHVibGljIENvbnRlbnRMYXllckNocm9taXVtIHsKK2NsYXNzIElt
YWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBUaWxlZExheWVyQ2hyb21pdW0gewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKICAgICB2aXJ0dWFsIH5JbWFnZUxheWVyQ2hyb21p
dW0oKTsKIAorICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcygpOwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRlbnRzOyB9CiAKICAgICB2b2lkIHNldENvbnRlbnRzKEltYWdl
KiBpbWFnZSk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlw
ZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkltYWdlTGF5ZXIiOyB9CiAKLSAgICB2aXJ0dWFs
IEludFNpemUgY29udGVudEJvdW5kcygpIGNvbnN0OwotCiBwcml2YXRlOgogICAgIEltYWdlTGF5
ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAorICAgIHZpcnR1YWwg
dm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVV
cGRhdGVySWZOZWVkZWQoKTsKKyAgICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24p
OworCisgICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNv
bnN0OworICAgIHZpcnR1YWwgSW50U2l6ZSBjb250ZW50Qm91bmRzKCkgY29uc3Q7CiAKICAgICBO
YXRpdmVJbWFnZVB0ciBtX2ltYWdlRm9yQ3VycmVudEZyYW1lOwogICAgIFJlZlB0cjxJbWFnZT4g
bV9jb250ZW50czsKKworICAgIE93blB0cjxJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI+IG1fdGV4
dHVyZVVwZGF0ZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRjOThjNDhl
ZDNlOGU4ZWQ4NjNlMDg3MjJlNTFhNzc1OWFkYWYwYTcuLjFkODczZGMxZmFlNmYwMTYzOWU1M2Fi
YWZiMWM3ZTFjOWZjZjQzNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0yOTUsNiArMjk1
LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBs
YXllcikKICAgICBsYXllci0+c2V0RGVidWdCb3JkZXJDb2xvcihtX2RlYnVnQm9yZGVyQ29sb3Ip
OwogICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlcldpZHRoKG1fZGVidWdCb3JkZXJXaWR0aCk7CiAg
ICAgbGF5ZXItPnNldERvdWJsZVNpZGVkKG1fZG91YmxlU2lkZWQpOworICAgIGxheWVyLT5zZXRE
cmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KCkpOwogICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVy
KG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobV9t
YXNrc1RvQm91bmRzKTsKICAgICBsYXllci0+c2V0TmFtZShtX25hbWUpOwpAQCAtMzgzLDcgKzM4
NCw3IEBAIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5
ZXJJbXBsKCkKICAgICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQp
OwogfQogCi1DQ0xheWVySW1wbCogTGF5ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwoKQorQ0NMYXll
ckltcGwqIExheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9jY0xheWVySW1wbDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBkNDYzOTAzMzQxZWNkN2Vi
ZWVhYzBiNDRmMzA5MDFiNGQyMzFlYTczLi4zYmE3YjlmMGRiMGNmOTcxYWI5NjhkNjFiOWMzMGEw
MWRlZjcyM2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNjEsNyArMTYxLDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCkge30KICAgICB2aXJ0dWFsIHZvaWQg
dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250
ZW50c1RleHR1cmUoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdygpIHsgfQogCiAgICAgLy8g
VGhlc2UgZXhpc3RzIGp1c3QgZm9yIGRlYnVnZ2luZyAodmlhIGRyYXdEZWJ1Z0JvcmRlcigpKS4K
ICAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0xNzIsNyArMTcxLDcg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQpOwogCiAgICAgLy8gRXZl
cnl0aGluZyBmcm9tIGhlcmUgZG93biBpbiB0aGUgcHVibGljIHNlY3Rpb24gd2lsbCBtb3ZlIHRv
IENDTGF5ZXJJbXBsLgotICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpOworICAgIENDTGF5
ZXJJbXBsKiBjY0xheWVySW1wbCgpIGNvbnN0OwogCiAgICAgc3RhdGljIHZvaWQgZHJhd1RleHR1
cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBw
cm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0LCBmbG9hdCBvcGFjaXR5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
aW5kZXggYzJhZDUxOTcxOTk4OTNhMDNjZDhkNzQzODE5NjhmODU4NDZmZTU3YS4uZTA4MGM3Njc4
YjE5YjQyNTkzZmFiNWNjOGUyNjE1NGI0M2U4ZTRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdSb290TGF5ZXIoKQogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbDsK
ICAgICBzY3JvbGwudHJhbnNsYXRlKC1tX3ZpZXdwb3J0VmlzaWJsZVJlY3QueCgpLCAtbV92aWV3
cG9ydFZpc2libGVSZWN0LnkoKSk7CiAKLSAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+ZHJh
dyhtX3ZpZXdwb3J0VmlzaWJsZVJlY3QsIHNjcm9sbCwgMS4wZiwgbV9yb290TGF5ZXJUZXh0dXJl
VXBkYXRlci5nZXQoKSk7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmRyYXcobV92aWV3
cG9ydFZpc2libGVSZWN0LCBzY3JvbGwsIDEuMGYpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRp
bGVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUaWxlckNocm9taXVtLmNwcAppbmRleCA3NDg4NTY5NWU3OTBjODJlZmNjN2FkNGZh
YjdlMmJiNjdjNWYzOWU5Li40NmM3MTBhMjc0YWY5N2Y5YzJmZjk5NWEzMTFmNDA2ZWNjNjg5ZGYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRpbGVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAKQEAgLTI4Nyw2ICsyODcsOCBAQCB2
b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6dXBkYXRlUmVjdChMYXllclRleHR1cmVVcGRhdGVyKiB0
ZXh0dXJlVXBkYXRlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIG1fdGV4dHVyZU9yaWVudGF0
aW9uID0gdGV4dHVyZVVwZGF0ZXItPm9yaWVudGF0aW9uKCk7CisgICAgbV9zYW1wbGVkVGV4ZWxG
b3JtYXQgPSB0ZXh0dXJlVXBkYXRlci0+c2FtcGxlZFRleGVsRm9ybWF0KG1fdGV4dHVyZUZvcm1h
dCk7CiAKICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwogICAgIGNvbnRlbnRSZWN0
VG9UaWxlSW5kaWNlcyhtX3VwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CkBA
IC0zNDUsMTcgKzM0NywxNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6c2V0TGF5ZXJQb3Np
dGlvbihjb25zdCBJbnRQb2ludCYgbGF5ZXJQb3NpdGlvbikKICAgICBtX2xheWVyUG9zaXRpb24g
PSBsYXllclBvc2l0aW9uOwogfQogCi12b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyhjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2Jh
bFRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgTGF5ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVw
ZGF0ZXIpCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhdyhjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5zZm9ybSwgZmxv
YXQgb3BhY2l0eSkKIHsKICAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fdGlsZXMuc2l6ZSgpIHx8
IGNvbnRlbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3dpdGNoICh0
ZXh0dXJlVXBkYXRlci0+c2FtcGxlZFRleGVsRm9ybWF0KG1fdGV4dHVyZUZvcm1hdCkpIHsKKyAg
ICBzd2l0Y2ggKG1fc2FtcGxlZFRleGVsRm9ybWF0KSB7CiAgICAgY2FzZSBMYXllclRleHR1cmVV
cGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOgotICAgICAgICBkcmF3VGlsZXMoY29udGVu
dFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclBy
b2dyYW0oKSwgdGV4dHVyZVVwZGF0ZXIpOworICAgICAgICBkcmF3VGlsZXMoY29udGVudFJlY3Qs
IGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5kZXJlcigpLT50aWxlclByb2dyYW0o
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0QkdSQToKLSAgICAgICAgZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxU
cmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVuZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZSgp
LCB0ZXh0dXJlVXBkYXRlcik7CisgICAgICAgIGRyYXdUaWxlcyhjb250ZW50UmVjdCwgZ2xvYmFs
VHJhbnNmb3JtLCBvcGFjaXR5LCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbVN3aXp6bGUo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpAQCAtMzc0LDcgKzM3Niw3IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjpncm93
TGF5ZXJUb0NvbnRhaW4oY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB9CiAKIHRlbXBsYXRl
IDxjbGFzcyBUPgotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXdUaWxlcyhjb25zdCBJbnRS
ZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGdsb2JhbFRyYW5z
Zm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgTGF5ZXJUZXh0dXJlVXBkYXRl
ciogdGV4dHVyZVVwZGF0ZXIpCit2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhd1RpbGVzKGNv
bnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xv
YmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtKQogewogICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKQEAg
LTQxNiw3ICs0MTgsNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6ZHJhd1RpbGVzKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdAogICAgICAgICAgICAgZmxv
YXQgdGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVpZ2h0OwogICAgICAgICAg
ICAgLy8gT3BlbkdMIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJvdHRvbS11cC4KICAgICAgICAgICAg
IC8vIElmIHRpbGUgdGV4dHVyZSBpcyB0b3AtZG93biwgd2UgbmVlZCB0byBmbGlwIHRoZSB0ZXh0
dXJlIGNvb3JkaW5hdGVzLgotICAgICAgICAgICAgaWYgKHRleHR1cmVVcGRhdGVyLT5vcmllbnRh
dGlvbigpID09IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikgeworICAg
ICAgICAgICAgaWYgKG1fdGV4dHVyZU9yaWVudGF0aW9uID09IExheWVyVGV4dHVyZVVwZGF0ZXI6
OlRvcERvd25PcmllbnRhdGlvbikgewogICAgICAgICAgICAgICAgIHRleFRyYW5zbGF0ZVkgPSAx
LjAgLSB0ZXhUcmFuc2xhdGVZOwogICAgICAgICAgICAgICAgIHRleFNjYWxlWSAqPSAtMS4wOwog
ICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAppbmRleCA0YTI2YzlmNzgz
NmM2MjAwYTE3MWRjMDc5YjZiNmMzYTkyOWNkNTQyLi45YTE1NDZhYzZjZWM3NjEwNjJhZmVkNjNl
Yzg3ZDRiNTI4NzA0M2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaApAQCAtMzEsNiAr
MzEsNyBAQAogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGV4
dHVyZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKICNpbmNsdWRlICJUaWxp
bmdEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgpAQCAtNTksNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgLy8gVXBkYXRlIGludmFs
aWQgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdCBwcm92aWRlZCBpbiBw
cmVwYXJlVG9VcGRhdGUoKS4KICAgICB2b2lkIHVwZGF0ZVJlY3QoTGF5ZXJUZXh0dXJlVXBkYXRl
ciopOwogICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhlIGNvbnRl
bnQgcmVjdC4KLSAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgTGF5ZXJUZXh0dXJlVXBkYXRl
ciopOworICAgIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKIAogICAgIGludCBudW1UaWxlcygp
IGNvbnN0IHsgcmV0dXJuIG1fdGlsaW5nRGF0YS5udW1UaWxlcygpOyB9CiAKQEAgLTEwNSw3ICsx
MDYsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qg
d2l0aCBjb250ZW50UmVjdC4KICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICB2b2lkIGRyYXdU
aWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBMYXllclRleHR1cmVVcGRhdGVy
Kik7CisgICAgdm9pZCBkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSk7
CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoR3Jh
cGhpY3NDb250ZXh0M0QqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1h
dHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgsCkBAIC0xNjAsNiAr
MTYxLDggQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0OwogICAgIEludFJlY3Qg
bV91cGRhdGVSZWN0OwogCisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gbV90
ZXh0dXJlT3JpZW50YXRpb247CisgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVs
Rm9ybWF0IG1fc2FtcGxlZFRleGVsRm9ybWF0OwogICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRh
OwogCiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Njc1Y2VhMTNhNmViZGFjMWQ5Y2Iz
YWE0ZTJmZmNjNTQ5YTA0ZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMCwwICsx
LDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUZXh0U3Ry
ZWFtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1RpbGVk
TGF5ZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKKy8vIFN0YXJ0IHRp
bGluZyB3aGVuIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIGEgbGF5ZXIgYXJlIGxhcmdlciB0aGFu
IHRoaXMgc2l6ZS4KK3N0YXRpYyBpbnQgbWF4VW50aWxlZFNpemUgPSA1MTI7CisKKy8vIFdoZW4g
dGlsaW5nIGlzIGVuYWJsZWQsIHVzZSB0aWxlcyBvZiB0aGlzIGRpbWVuc2lvbiBzcXVhcmVkLgor
c3RhdGljIGludCBkZWZhdWx0VGlsZVNpemUgPSAyNTY7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVy
Q2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKKyAgICA6IExheWVyQ2hyb21p
dW0ob3duZXIpCisgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkKK3sKK30KKworVGlsZWRM
YXllckNocm9taXVtOjp+VGlsZWRMYXllckNocm9taXVtKCkKK3sKK30KKworUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCit7Cisg
ICAgcmV0dXJuIENDVGlsZWRMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBpZCgpKTsKK30KKwordm9p
ZCBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQoreworICAgIG1fdGlsZXIu
Y2xlYXIoKTsKKyAgICBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCk7Cit9CisKK3Zv
aWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlcikKK3sKKyAgICBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRl
cmVyKGxheWVyUmVuZGVyZXIpOworICAgIGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKK30KKwordm9p
ZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCkKK3sK
KyAgICBpZiAoIW1fdGlsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFNpemUg
dGlsZVNpemUobWluKGRlZmF1bHRUaWxlU2l6ZSwgY29udGVudEJvdW5kcygpLndpZHRoKCkpLCBt
aW4oZGVmYXVsdFRpbGVTaXplLCBjb250ZW50Qm91bmRzKCkuaGVpZ2h0KCkpKTsKKworICAgIC8v
IFRpbGUgaWYgYm90aCBkaW1lbnNpb25zIGxhcmdlLCBvciBhbnkgb25lIGRpbWVuc2lvbiBsYXJn
ZSBhbmQgdGhlIG90aGVyCisgICAgLy8gZXh0ZW5kcyBpbnRvIGEgc2Vjb25kIHRpbGUuIFRoaXMg
aGV1cmlzdGljIGFsbG93cyBmb3IgbG9uZyBza2lubnkgbGF5ZXJzCisgICAgLy8gKGUuZy4gc2Ny
b2xsYmFycykgdGhhdCBhcmUgTngxIHRpbGVzIHRvIG1pbmltaXplIHdhc3RlZCB0ZXh0dXJlIHNw
YWNlLgorICAgIGNvbnN0IGJvb2wgYW55RGltZW5zaW9uTGFyZ2UgPSBjb250ZW50Qm91bmRzKCku
d2lkdGgoKSA+IG1heFVudGlsZWRTaXplIHx8IGNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSA+IG1h
eFVudGlsZWRTaXplOworICAgIGNvbnN0IGJvb2wgYW55RGltZW5zaW9uT25lVGlsZSA9IGNvbnRl
bnRCb3VuZHMoKS53aWR0aCgpIDw9IGRlZmF1bHRUaWxlU2l6ZSB8fCBjb250ZW50Qm91bmRzKCku
aGVpZ2h0KCkgPD0gZGVmYXVsdFRpbGVTaXplOworICAgIGNvbnN0IGJvb2wgYXV0b1RpbGVkID0g
YW55RGltZW5zaW9uTGFyZ2UgJiYgIWFueURpbWVuc2lvbk9uZVRpbGU7CisKKyAgICBib29sIGlz
VGlsZWQ7CisgICAgaWYgKG1fdGlsaW5nT3B0aW9uID09IEFsd2F5c1RpbGUpCisgICAgICAgIGlz
VGlsZWQgPSB0cnVlOworICAgIGVsc2UgaWYgKG1fdGlsaW5nT3B0aW9uID09IE5ldmVyVGlsZSkK
KyAgICAgICAgaXNUaWxlZCA9IGZhbHNlOworICAgIGVsc2UKKyAgICAgICAgaXNUaWxlZCA9IGF1
dG9UaWxlZDsKKworICAgIEludFNpemUgcmVxdWVzdGVkU2l6ZSA9IGlzVGlsZWQgPyB0aWxlU2l6
ZSA6IGNvbnRlbnRCb3VuZHMoKTsKKyAgICBjb25zdCBpbnQgbWF4U2l6ZSA9IGxheWVyUmVuZGVy
ZXIoKS0+bWF4VGV4dHVyZVNpemUoKTsKKyAgICBJbnRTaXplIGNsYW1wZWRTaXplID0gcmVxdWVz
dGVkU2l6ZS5zaHJ1bmtUbyhJbnRTaXplKG1heFNpemUsIG1heFNpemUpKTsKKyAgICBtX3RpbGVy
LT5zZXRUaWxlU2l6ZShjbGFtcGVkU2l6ZSk7Cit9CisKK2Jvb2wgVGlsZWRMYXllckNocm9taXVt
OjpkcmF3c0NvbnRlbnQoKSBjb25zdAoreworICAgIGlmICghbV9vd25lcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3RpbGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChtX3RpbGluZ09wdGlvbiA9PSBOZXZlclRpbGUgJiYgbV90aWxlci0+bnVtVGlsZXMo
KSA+IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhbV90aWxlci0+c2tp
cHNEcmF3KCk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVl
ZGVkKCkKK3sKKyAgICBpZiAobV90aWxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRl
VGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpOworCisgICAgbV90aWxlciA9IExheWVyVGlsZXJDaHJv
bWl1bTo6Y3JlYXRlKAorICAgICAgICBsYXllclJlbmRlcmVyKCksCisgICAgICAgIEludFNpemUo
ZGVmYXVsdFRpbGVTaXplLCBkZWZhdWx0VGlsZVNpemUpLAorICAgICAgICBMYXllclRpbGVyQ2hy
b21pdW06Okhhc0JvcmRlclRleGVscyk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKK3sKKyAgICBtX3RpbGVyLT51cGRhdGVSZWN0KHRl
eHR1cmVVcGRhdGVyKCkpOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5n
T3B0aW9uKFRpbGluZ09wdGlvbiB0aWxpbmdPcHRpb24pCit7CisgICAgbV90aWxpbmdPcHRpb24g
PSB0aWxpbmdPcHRpb247CisgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKK30K
Kwordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldElzTWFzayhib29sIGlzTWFzaykKK3sKKyAg
ICBzZXRUaWxpbmdPcHRpb24oaXNNYXNrID8gTmV2ZXJUaWxlIDogQXV0b1RpbGUpOworfQorCitU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBUaWxlZExheWVyQ2hyb21pdW06OnRpbGluZ1RyYW5zZm9ybSgp
IGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gY2NMYXllcklt
cGwoKS0+ZHJhd1RyYW5zZm9ybSgpOworCisgICAgaWYgKGNvbnRlbnRCb3VuZHMoKS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisKKyAgICB0cmFuc2Zvcm0uc2NhbGVOb25V
bmlmb3JtKGJvdW5kcygpLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGNvbnRlbnRCb3Vu
ZHMoKS53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLmhl
aWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzKCkuaGVpZ2h0KCkpKTsK
KworICAgIC8vIFRpbGVyIGRyYXdzIHdpdGggYSBkaWZmZXJlbnQgb3JpZ2luIGZyb20gb3RoZXIg
bGF5ZXJzLgorICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3VuZHMoKS53aWR0aCgp
IC8gMi4wLCAtY29udGVudEJvdW5kcygpLmhlaWdodCgpIC8gMi4wKTsKKworICAgIHJldHVybiB0
cmFuc2Zvcm07Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1Rv
KENDTGF5ZXJJbXBsKiBsYXllcikKK3sKKyAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGll
c1RvKGxheWVyKTsKKworICAgIENDVGlsZWRMYXllckltcGwqIHRpbGVkTGF5ZXIgPSBzdGF0aWNf
Y2FzdDxDQ1RpbGVkTGF5ZXJJbXBsKj4obGF5ZXIpOworICAgIHRpbGVkTGF5ZXItPnNldFRpbGlu
Z1RyYW5zZm9ybSh0aWxpbmdUcmFuc2Zvcm0oKSk7CisgICAgdGlsZWRMYXllci0+c2V0VGlsZXIo
bV90aWxlci5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0m
IHRzLCBpbnQgaW5kZW50KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpICE9IGluZGVudDsgKytp
KQorICAgICAgICB0cyA8PCAiICAiOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6ZHVt
cExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKK3sKKyAg
ICBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQpOworICAgIHdy
aXRlSW5kZW50KHRzLCBpbmRlbnQpOworICAgIHRzIDw8ICJza2lwc0RyYXc6ICIgPDwgKCFtX3Rp
bGVyIHx8IG1fdGlsZXItPnNraXBzRHJhdygpKSA8PCAiXG4iOworfQorCit9CisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yZjQzNjliNjQwMzgzODUxNzBjNzcxNDMyZmQ3YTFlYzI3MjJjZjk3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGls
ZWRMYXllckNocm9taXVtX2gKKyNkZWZpbmUgVGlsZWRMYXllckNocm9taXVtX2gKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgTGF5ZXJUZXh0dXJlOworY2xhc3MgTGF5ZXJUaWxlckNocm9taXVtOworY2xhc3Mg
TGF5ZXJUZXh0dXJlVXBkYXRlcjsKKworY2xhc3MgVGlsZWRMYXllckNocm9taXVtIDogcHVibGlj
IExheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIGVudW0gVGlsaW5nT3B0aW9uIHsgQWx3YXlz
VGlsZSwgTmV2ZXJUaWxlLCBBdXRvVGlsZSB9OworCisgICAgdmlydHVhbCB+VGlsZWRMYXllckNo
cm9taXVtKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCopOworCisgICAgdmlydHVhbCBib29sIGRyYXdz
Q29udGVudCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgVGlsZWRMYXllckNo
cm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSopOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFu
dXBSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpID0gMDsK
KyAgICB2aXJ0dWFsIExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKCkgY29uc3Qg
PSAwOworCisgICAgT3duUHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV90aWxlcjsKKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBs
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwg
aW50IGluZGVudCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJlcihM
YXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKworICAgIHZvaWQgY3JlYXRlVGlsZXJJZk5lZWRlZCgp
OworICAgIHZvaWQgc2V0VGlsaW5nT3B0aW9uKFRpbGluZ09wdGlvbik7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggdGlsaW5nVHJhbnNmb3JtKCkgY29uc3Q7CisKKyAgICBUaWxpbmdPcHRpb24g
bV90aWxpbmdPcHRpb247Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBlMThkNTRmOGE4
MDEwYTQzOWZmM2JmY2QwNmQxNmU3NWNhODc1YjZjLi42YzY1YThjOTA3NGU3YTQ5MDUxNDg1NjM3
OWU1ZDAzMDJjOGEyM2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xMzYsMTUgKzEz
Niw5IEBAIGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLS8vIFRoZXNlIGJlbG9uZyBvbiBDQ0xheWVySW1wbCwgYnV0IHNo
b3VsZCBiZSBvdmVycmlkZGVuIGJ5IGVhY2ggdHlwZSBhbmQgbm90IGRlZmVyIHRvIHRoZSBMYXll
ckNocm9taXVtIHN1YnR5cGVzLgotYm9vbCBDQ0xheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9vd25lci0+ZHJhd3NDb250ZW50KCk7Ci19Ci0KIHZvaWQgQ0NM
YXllckltcGw6OmRyYXcoKQogewotICAgIHJldHVybiBtX293bmVyLT5kcmF3KCk7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggZDc5NTRjYjZlZWI5MTU0NzU3
MjNiYmI0ZmQ4YzVkYmNkMTVlM2ZiMC4uYmQyNzZmZTgwOTA3NjcxNmE2OGQwOTY3N2NkYjFiNWE2
NGY5MGZlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC03MiwxMCArNzIsMTEgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoKTsKICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwot
ICAgIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29u
dGVudHNUZXh0dXJlKCk7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBsYXllciBoYXMg
Y29udGVudCB0byBkcmF3LgotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsK
KyAgICB2b2lkIHNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkgeyBtX2RyYXdzQ29u
dGVudCA9IGRyYXdzQ29udGVudDsgfQorICAgIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9kcmF3c0NvbnRlbnQ7IH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2Yg
dGhlIGxheWVyJ3MgZGVzY2VuZGFudHMgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAgICBib29sIGRl
c2NlbmRhbnRzRHJhd3NDb250ZW50KCk7CkBAIC0yMDEsNiArMjAyLDggQEAgcHJpdmF0ZToKICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3RyYW5zZm9ybTsKICAgICBib29sIG1fdXNlc0xheWVy
U2Npc3NvcjsKIAorICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQ7CisKICAgICAvLyBQcm9wZXJ0aWVz
IG93bmVkIGV4Y2x1c2l2ZWx5IGJ5IHRoaXMgQ0NMYXllckltcGwuCiAgICAgLy8gRGVidWdnaW5n
LgogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODAzYmEwNmQ1NjE5N2QyOGFhZTU1YTc4YzViY2QxMWUxMjQ3N2I1ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJj
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCisKKyNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5o
IgorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgTGF5ZXJUZXh0dXJlOworCitDQ1RpbGVkTGF5ZXJJbXBsOjpDQ1RpbGVkTGF5
ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgOiBDQ0xheWVySW1wbChv
d25lciwgaWQpCisgICAgLCBtX3RpbGVyKDApCit7Cit9CisKK0NDVGlsZWRMYXllckltcGw6On5D
Q1RpbGVkTGF5ZXJJbXBsKCkKK3sKK30KKwordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3KCkK
K3sKKyAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7Cisg
ICAgaWYgKCFsYXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICBtX3RpbGVyLT5kcmF3KGxheWVy
UmVjdCwgbV90aWxpbmdUcmFuc2Zvcm0sIGRyYXdPcGFjaXR5KCkpOworfQorCit2b2lkIENDVGls
ZWRMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoKQoreworICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgb25seSB2YWxpZCBmb3Igc2luZ2xlIHRleHR1cmUgbGF5ZXJzLCBlLmcuIG1hc2tzLgor
ICAgIEFTU0VSVChtX3RpbGVyKTsKKworICAgIExheWVyVGV4dHVyZSogdGV4dHVyZSA9IG1fdGls
ZXItPmdldFNpbmdsZVRleHR1cmUoKTsKKyAgICBBU1NFUlQodGV4dHVyZSk7CisKKyAgICB0ZXh0
dXJlLT5iaW5kVGV4dHVyZSgpOworfQorCit2b2lkIENDVGlsZWRMYXllckltcGw6OmR1bXBMYXll
clByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0Cit7CisgICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgQ0NMYXllckltcGw6OmR1bXBMYXllclByb3BlcnRp
ZXModHMsIGluZGVudCk7Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGQxMDMx
ZmJiN2I4ZjgwZjQ3OGFjODEzYzhmMjcyOWRjODlhOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGlsZWRMYXllckltcGxfaAor
I2RlZmluZSBDQ1RpbGVkTGF5ZXJJbXBsX2gKKworI2luY2x1ZGUgIkxheWVyVGlsZXJDaHJvbWl1
bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ0NUaWxlZExheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NUaWxlZExheWVySW1wbD4gY3JlYXRlKExheWVyQ2hy
b21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENDVGlsZWRMYXllckltcGwob3duZXIsIGlkKSk7CisgICAgfQorICAgIHZpcnR1YWwgfkNDVGls
ZWRMYXllckltcGwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisgICAgdmlydHVhbCB2
b2lkIGJpbmRDb250ZW50c1RleHR1cmUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKKworICAgIHZvaWQgc2V0
VGlsaW5nVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0aWxpbmdUcmFuc2Zv
cm0pIHsgbV90aWxpbmdUcmFuc2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNl
dFRpbGVyKExheWVyVGlsZXJDaHJvbWl1bSogdGlsZXIpIHsgbV90aWxlciA9IHRpbGVyOyB9CisK
K3ByaXZhdGU6CisgICAgQ0NUaWxlZExheWVySW1wbChMYXllckNocm9taXVtKiwgaW50IGlkKTsK
KworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdGlsaW5nVHJhbnNmb3JtOworICAgIExheWVy
VGlsZXJDaHJvbWl1bSogbV90aWxlcjsKK307CisKK30KKworI2VuZGlmIC8vIENDVGlsZWRMYXll
ckltcGxfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100599</attachid>
            <date>2011-07-12 17:56:31 -0700</date>
            <delta_ts>2011-07-13 16:15:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58833-20110712175630.patch</filename>
            <type>text/plain</type>
            <size>46603</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA4NzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ZTRmY2MyN2Y2NTU5NWMy
NjQ3NjQ1YWMxMjJhODJhZjZmYTc1YTg3Li5lZDM3NTZjMjc3NTg4YmVmNTE0ZTQ1ZTNkN2ZkOGQy
NDlhYTU3OTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODIgQEAKIDIwMTEtMDctMTIgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgZHJhdyBpbXBsZW1lbnRh
dGlvbiBmb3IgQ29udGVudExheWVyQ2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtIHRvIHRoZSBh
cHByb3ByaWF0ZSBDQ0xheWVySW1wbCBzdWJjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzMKKworICAgICAgICBBZGRzIGEgVGlsZWRMYXll
ckNocm9taXVtIGNsYXNzIHRvIGhhbmRsZSB0aGUgdGlsaW5nIGxvZ2ljIHNoYXJlZCBieSBDb250
ZW50TGF5ZXJDaHJvbWl1bSBhbmQgSW1hZ2VMYXllckNocm9taXVtCisgICAgICAgIHNvIHRoYXQg
dGhleSBjYW4gYmUgc2libGluZ3MgaW4gdGhlIGNsYXNzIGhpZXJhcmNoeSBpbnN0ZWFkIG9mIGNo
aWxkcmVuLiBBbHNvIGFkZHMgYSBDQ1RpbGVkTGF5ZXJJbXBsIHRvIGhhbmRsZQorICAgICAgICB0
aGUgZHJhd2luZyByZXNwb25zaWJpbGl0aWVzIGZvciB0aWxlZCBsYXllcnMuCisKKyAgICAgICAg
VGlsZWRMYXllckNocm9taXVtIG1haW50YWlucyBhIHRpbGVyLCB0aWxpbmcgb3B0aW9ucywgYW5k
IGNhbGN1bGF0ZXMgdGhlIHRpbGluZyB0cmFuc2Zvcm0uIFN1YmNsYXNzZXMgYXJlCisgICAgICAg
IHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgYW4gYXBwcm9wcmlhdGUgdGV4dHVyZSB1cGRhdGVy
IGltcGxlbWVudGF0aW9uLiBDQ1RpbGVkTGF5ZXJJbXBsIHRha2VzIHRoZSB0aWxlciwKKyAgICAg
ICAgdGlsaW5nIHRyYW5zZm9ybSBhbmQgbGF5ZXIgcHJvcGVydGllcyBhbmQgZHJhd3MgdGhlIGxh
eWVyLiAgTG9uZ2VyIHRlcm0gaXQnZCBiZSBiZXR0ZXIgb2YgdGhlIENDVGlsZWRMYXllckltcGwK
KyAgICAgICAgb3duZWQgdGhlIHRpbGVyIGFuZCB0aGUgVGlsZWRMYXllckNocm9taXVtIG9ubHkg
b3duZWQgYW4gdXBkYXRlciwgYnV0IGdldHRpbmcgdGhlcmUgd2lsbCByZXF1aXJlIGNoYW5naW5n
IHRoZQorICAgICAgICB3YXkgdGlsZSBldmljdGlvbiB3b3Jrcy4KKworICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50TGF5ZXJDaHJvbWl1bTo6
Q29udGVudExheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hy
b21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50TGF5ZXJDaHJvbWl1bTo6dGV4dHVyZVVwZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OnRleHR1cmVVcGRhdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y29udGVudEJvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpjY0xheWVySW1wbCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRpbGVyQ2hyb21pdW06OnVwZGF0ZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGlsZXJDaHJvbWl1bTo6ZHJhd1RpbGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6flRpbGVkTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVUaWxlU2l6
ZUFuZFRpbGluZ09wdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06
OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmNy
ZWF0ZVRpbGVySWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5
ZXJDaHJvbWl1bTo6c2V0VGlsaW5nT3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5
ZXJDaHJvbWl1bTo6c2V0SXNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJv
bWl1bTo6dGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUluZGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6ZHJhdyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXREcmF3c0NvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjp+Q0NUaWxlZExheWVySW1wbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGlsZWRMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaWxlZExheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RpbGVkTGF5ZXJJbXBsOjpzZXRUaWxpbmdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaWxlZExheWVySW1wbDo6c2V0VGlsZXIpOgorCisyMDExLTA3LTEyICBKYW1lcyBSb2Jp
bnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgW2Nocm9taXVtXSBDaHJvbWl1
bSB3aW4gYnVpbGQgZml4LgogCiAgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udENocm9taXVtV2luLmNwcDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkOWM4ZTE4ZjQ4MGE2YTgw
NjAxYzFiMjY0ZTYwYWE2NGM5MGU0NDNmLi44MDU0ZGE5YjZkMjU1NDRhYjNhMzY0MmQzNjhiNzA4
ZDg4ZjNlNmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00MTQwLDYgKzQxNDAsOCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVN
YW5hZ2VyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAnLApAQCAtNDE4MSw2ICs0
MTgzLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkVGFzay5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0n
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDBmYmI0YzIyZDExZjNi
NGI1NTE2MzIyNjAyMjE0MzJlYTdjMDdlMDAuLjg1NDI4NzA0ODQyNzVlNTU3NzE3MTM3NDcyMzQx
YjVkMjEwMWVkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM0
LDI2ICszNCwxMiBAQAogCiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21pdW0uaCIKIAotI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIkxheWVyVGV4dHVyZS5oIgogI2luY2x1ZGUgIkxheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKLSNpbmNsdWRlICJMYXllclRpbGVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgotI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KIAotLy8gU3RhcnQgdGlsaW5nIHdoZW4gdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgYSBsYXll
ciBhcmUgbGFyZ2VyIHRoYW4gdGhpcyBzaXplLgotc3RhdGljIGludCBtYXhVbnRpbGVkU2l6ZSA9
IDUxMDsKLQotLy8gV2hlbiB0aWxpbmcgaXMgZW5hYmxlZCwgdXNlIHRpbGVzIG9mIHRoaXMgZGlt
ZW5zaW9uIHNxdWFyZWQuCi1zdGF0aWMgaW50IGRlZmF1bHRUaWxlU2l6ZSA9IDI1NjsKLQotdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb250ZW50
TGF5ZXJQYWludGVyIDogcHVibGljIExheWVyUGFpbnRlckNocm9taXVtIHsKQEAgLTkwLDkgKzc2
LDcgQEAgUGFzc1JlZlB0cjxDb250ZW50TGF5ZXJDaHJvbWl1bT4gQ29udGVudExheWVyQ2hyb21p
dW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb20KIH0KIAogQ29udGVudExheWVyQ2hyb21pdW06
OkNvbnRlbnRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAg
OiBMYXllckNocm9taXVtKG93bmVyKQotICAgICwgbV90aWxpbmdPcHRpb24oQ29udGVudExheWVy
Q2hyb21pdW06OkF1dG9UaWxlKQotICAgICwgbV9ib3JkZXJUZXhlbHModHJ1ZSkKKyAgICA6IFRp
bGVkTGF5ZXJDaHJvbWl1bShvd25lcikKIHsKIH0KIApAQCAtMTA2LDcgKzkwLDcgQEAgdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogICAgIEFTU0VSVChk
cmF3c0NvbnRlbnQoKSk7CiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAKLSAgICB1cGRh
dGVMYXllclNpemUoKTsKKyAgICB1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbigpOwogCiAg
ICAgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdCgpOwogICAgIGlm
IChsYXllclJlY3QuaXNFbXB0eSgpKQpAQCAtMTE5LDIxICsxMDMsMTMgQEAgdm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQogICAgIGlmICghZHJhd3NDb250
ZW50KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdGlsZXItPnByZXBhcmVUb1VwZGF0ZShs
YXllclJlY3QsIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOworICAgIG1fdGlsZXItPnByZXBhcmVU
b1VwZGF0ZShsYXllclJlY3QsIHRleHR1cmVVcGRhdGVyKCkpOwogICAgIG1fZGlydHlSZWN0ID0g
RmxvYXRSZWN0KCk7CiB9CiAKLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNv
dXJjZXMoKQotewotICAgIG1fdGV4dHVyZVVwZGF0ZXIuY2xlYXIoKTsKLSAgICBtX3RpbGVyLmNs
ZWFyKCk7Ci0gICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOwotfQotCi12b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlcikKK2Jvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29u
dGVudCgpIGNvbnN0CiB7Ci0gICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihsYXll
clJlbmRlcmVyKTsKLSAgICBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CisgICAgcmV0dXJuIG1fb3du
ZXIgJiYgbV9vd25lci0+ZHJhd3NDb250ZW50KCkgJiYgVGlsZWRMYXllckNocm9taXVtOjpkcmF3
c0NvbnRlbnQoKTsKIH0KIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVy
ZVVwZGF0ZXJJZk5lZWRlZCgpCkBAIC0xNDksMTMyICsxMjUsNSBAQCB2b2lkIENvbnRlbnRMYXll
ckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVkKCkKICAgICBtX3RleHR1cmVV
cGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKGxheWVyUmVuZGVyZXJD
b250ZXh0KCksIENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgbGF5ZXJSZW5k
ZXJlcigpLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7CiB9CiAKLVRyYW5zZm9ybWF0aW9uTWF0
cml4IENvbnRlbnRMYXllckNocm9taXVtOjp0aWxpbmdUcmFuc2Zvcm0oKQotewotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0o
KTsKLQotICAgIGlmIChjb250ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
dHJhbnNmb3JtOwotCi0gICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHMoKS53aWR0
aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzKCkud2lkdGgoKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0
PGRvdWJsZT4oY29udGVudEJvdW5kcygpLmhlaWdodCgpKSk7Ci0KLSAgICAvLyBUaWxlciBkcmF3
cyB3aXRoIGEgZGlmZmVyZW50IG9yaWdpbiBmcm9tIG90aGVyIGxheWVycy4KLSAgICB0cmFuc2Zv
cm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzKCkud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3Vu
ZHMoKS5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICByZXR1cm4gdHJhbnNmb3JtOwotfQotCi1JbnRT
aXplIENvbnRlbnRMYXllckNocm9taXVtOjpjb250ZW50Qm91bmRzKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gYm91bmRzKCk7Ci19Ci0KLXZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OnVwZGF0ZUxh
eWVyU2l6ZSgpCi17Ci0gICAgaWYgKCFtX3RpbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj
b25zdCBJbnRTaXplIHRpbGVTaXplKGRlZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXplKTsK
LQotICAgIC8vIFRpbGUgaWYgYm90aCBkaW1lbnNpb25zIGxhcmdlLCBvciBhbnkgb25lIGRpbWVu
c2lvbiBsYXJnZSBhbmQgdGhlIG90aGVyCi0gICAgLy8gZXh0ZW5kcyBpbnRvIGEgc2Vjb25kIHRp
bGUuIFRoaXMgaGV1cmlzdGljIGFsbG93cyBmb3IgbG9uZyBza2lubnkgbGF5ZXJzCi0gICAgLy8g
KGUuZy4gc2Nyb2xsYmFycykgdGhhdCBhcmUgTngxIHRpbGVzIHRvIG1pbmltaXplIHdhc3RlZCB0
ZXh0dXJlIHNwYWNlLgotICAgIGNvbnN0IGJvb2wgYW55RGltZW5zaW9uTGFyZ2UgPSBjb250ZW50
Qm91bmRzKCkud2lkdGgoKSA+IG1heFVudGlsZWRTaXplIHx8IGNvbnRlbnRCb3VuZHMoKS5oZWln
aHQoKSA+IG1heFVudGlsZWRTaXplOwotICAgIGNvbnN0IGJvb2wgYW55RGltZW5zaW9uT25lVGls
ZSA9IGNvbnRlbnRCb3VuZHMoKS53aWR0aCgpIDw9IGRlZmF1bHRUaWxlU2l6ZSB8fCBjb250ZW50
Qm91bmRzKCkuaGVpZ2h0KCkgPD0gZGVmYXVsdFRpbGVTaXplOwotICAgIGNvbnN0IGJvb2wgYXV0
b1RpbGVkID0gYW55RGltZW5zaW9uTGFyZ2UgJiYgIWFueURpbWVuc2lvbk9uZVRpbGU7Ci0KLSAg
ICBib29sIGlzVGlsZWQ7Ci0gICAgaWYgKG1fdGlsaW5nT3B0aW9uID09IEFsd2F5c1RpbGUpCi0g
ICAgICAgIGlzVGlsZWQgPSB0cnVlOwotICAgIGVsc2UgaWYgKG1fdGlsaW5nT3B0aW9uID09IE5l
dmVyVGlsZSkKLSAgICAgICAgaXNUaWxlZCA9IGZhbHNlOwotICAgIGVsc2UKLSAgICAgICAgaXNU
aWxlZCA9IGF1dG9UaWxlZDsKLQotICAgIC8vIEVtcHR5IHRpbGUgc2l6ZSB0ZWxscyB0aGUgdGls
ZXIgdG8gYXZvaWQgdGlsaW5nLgotICAgIEludFNpemUgcmVxdWVzdGVkU2l6ZSA9IGlzVGlsZWQg
PyB0aWxlU2l6ZSA6IEludFNpemUoKTsKLSAgICBjb25zdCBpbnQgbWF4U2l6ZSA9IGxheWVyUmVu
ZGVyZXIoKS0+bWF4VGV4dHVyZVNpemUoKTsKLSAgICBJbnRTaXplIGNsYW1wZWRTaXplID0gcmVx
dWVzdGVkU2l6ZS5zaHJ1bmtUbyhJbnRTaXplKG1heFNpemUsIG1heFNpemUpKTsKLSAgICBtX3Rp
bGVyLT5zZXRUaWxlU2l6ZShjbGFtcGVkU2l6ZSk7Ci19Ci0KLXZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OmRyYXcoKQotewotICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHZpc2libGVM
YXllclJlY3QoKTsKLSAgICBpZiAoIWxheWVyUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIG1fdGls
ZXItPmRyYXcobGF5ZXJSZWN0LCB0aWxpbmdUcmFuc2Zvcm0oKSwgY2NMYXllckltcGwoKS0+ZHJh
d09wYWNpdHkoKSwgbV90ZXh0dXJlVXBkYXRlci5nZXQoKSk7Ci19Ci0KLWJvb2wgQ29udGVudExh
eWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX293bmVyIHx8
ICFtX293bmVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFtX3RpbGVyKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChtX3RpbGluZ09w
dGlvbiA9PSBOZXZlclRpbGUgJiYgbV90aWxlci0+bnVtVGlsZXMoKSA+IDEpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiAhbV90aWxlci0+c2tpcHNEcmF3KCk7Ci19Ci0KLXZv
aWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRpbGVySWZOZWVkZWQoKQotewotICAgIGlm
IChtX3RpbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcklm
TmVlZGVkKCk7Ci0KLSAgICBtX3RpbGVyID0gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoCi0g
ICAgICAgIGxheWVyUmVuZGVyZXIoKSwKLSAgICAgICAgSW50U2l6ZShkZWZhdWx0VGlsZVNpemUs
IGRlZmF1bHRUaWxlU2l6ZSksCi0gICAgICAgIG1fYm9yZGVyVGV4ZWxzID8gTGF5ZXJUaWxlckNo
cm9taXVtOjpIYXNCb3JkZXJUZXhlbHMgOgotICAgICAgICBMYXllclRpbGVyQ2hyb21pdW06Ok5v
Qm9yZGVyVGV4ZWxzKTsKLX0KLQotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcygpCi17Ci0gICAgbV90aWxlci0+dXBkYXRlUmVjdChtX3RleHR1cmVV
cGRhdGVyLmdldCgpKTsKLX0KLQotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5n
T3B0aW9uKFRpbGluZ09wdGlvbiBvcHRpb24pCi17Ci0gICAgbV90aWxpbmdPcHRpb24gPSBvcHRp
b247Ci0gICAgdXBkYXRlTGF5ZXJTaXplKCk7Ci19Ci0KLXZvaWQgQ29udGVudExheWVyQ2hyb21p
dW06OmJpbmRDb250ZW50c1RleHR1cmUoKQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25s
eSB2YWxpZCBmb3Igc2luZ2xlIHRleHR1cmUgbGF5ZXJzLCBlLmcuIG1hc2tzLgotICAgIEFTU0VS
VChtX3RpbGluZ09wdGlvbiA9PSBOZXZlclRpbGUpOwotICAgIEFTU0VSVChtX3RpbGVyKTsKLQot
ICAgIExheWVyVGV4dHVyZSogdGV4dHVyZSA9IG1fdGlsZXItPmdldFNpbmdsZVRleHR1cmUoKTsK
LSAgICBBU1NFUlQodGV4dHVyZSk7Ci0KLSAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZSgpOwotfQot
Ci12b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpzZXRJc01hc2soYm9vbCBpc01hc2spCi17Ci0g
ICAgbV9ib3JkZXJUZXhlbHMgPSBmYWxzZTsKLSAgICBzZXRUaWxpbmdPcHRpb24oaXNNYXNrID8g
TmV2ZXJUaWxlIDogQXV0b1RpbGUpOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZUluZGVudChUZXh0
U3RyZWFtJiB0cywgaW50IGluZGVudCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSAhPSBpbmRl
bnQ7ICsraSkKLSAgICAgICAgdHMgPDwgIiAgIjsKLX0KLQotdm9pZCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29u
c3QKLXsKLSAgICBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQp
OwotICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgIHRzIDw8ICJza2lwc0RyYXc6ICIg
PDwgKCFtX3RpbGVyIHx8IG1fdGlsZXItPnNraXBzRHJhdygpKSA8PCAiXG4iOwotfQotCiB9CiAj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmgKaW5kZXggNGQ5MjI1ZmNjYmYxZTk3Mzc0MGZlOWQxMTQ1NTA5M2IxMmQ2Y2Yw
MS4uZTBiYmRlZGE4MjZhNjY2MDM1ZWI5NjIzNDJkYTk3NTY1OGExNzIzYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5oCkBAIC0zNCw3ICszNCw4IEBACiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAKLSNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiVGlsZWRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDQ1ICs0NCwyNCBAQCBjbGFzcyBMYXll
clRpbGVyQ2hyb21pdW07CiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyOwogCiAvLyBBIExheWVy
IHRoYXQgcmVxdWlyZXMgYSBHcmFwaGljc0NvbnRleHQgdG8gcmVuZGVyIGl0cyBjb250ZW50cy4K
LWNsYXNzIENvbnRlbnRMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0gewotICAg
IGZyaWVuZCBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CitjbGFzcyBDb250ZW50TGF5ZXJD
aHJvbWl1bSA6IHB1YmxpYyBUaWxlZExheWVyQ2hyb21pdW0gewogcHVibGljOgotICAgIGVudW0g
VGlsaW5nT3B0aW9uIHsgQWx3YXlzVGlsZSwgTmV2ZXJUaWxlLCBBdXRvVGlsZSB9OwotCiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q29udGVudExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CiAKICAgICB2aXJ0dWFsIH5Db250ZW50TGF5ZXJDaHJv
bWl1bSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7Ci0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SXNNYXNrKGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJl
KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOwotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0Nv
bnRlbnQoKSBjb25zdDsKIAotcHJvdGVjdGVkOgorcHJpdmF0ZToKICAgICBleHBsaWNpdCBDb250
ZW50TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAogICAgIHZp
cnR1YWwgY29uc3QgY2hhciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ29u
dGVudExheWVyIjsgfQotICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRT
dHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVz
b3VyY2VzKCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKik7CiAKLSAgICB2aXJ0dWFsIEludFNpemUgY29udGVudEJvdW5kcygpIGNvbnN0
OwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJhbnNmb3JtKCk7Ci0KLSAgICB2
b2lkIHVwZGF0ZUxheWVyU2l6ZSgpOwotICAgIHZvaWQgY3JlYXRlVGlsZXJJZk5lZWRlZCgpOwor
ICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlVGV4dHVyZVVwZGF0ZXJJZk5lZWRlZCgpOwotICAgIHZvaWQgc2V0VGlsaW5nT3B0aW9u
KFRpbGluZ09wdGlvbik7CisgICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJl
VXBkYXRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCk7IH0KIAogICAg
IE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX3RleHR1cmVVcGRhdGVyOwotICAgIE93blB0
cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fdGlsZXI7Ci0gICAgVGlsaW5nT3B0aW9uIG1fdGlsaW5n
T3B0aW9uOwotICAgIGJvb2wgbV9ib3JkZXJUZXhlbHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcAppbmRleCA2Mzg1ZmMzZjFmZDFhMWE0Nzg2MzYxZjEzMTcxMTlmNDJk
MDk0ZTQ1Li5mMjQ4ZjJjMTYyNTY0OTgwOTE2ZTA5ZGI0YjU5ZWNkZTNjMTQwMjVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTExNSw5ICsxMTUsOCBAQCBQYXNzUmVmUHRy
PEltYWdlTGF5ZXJDaHJvbWl1bT4gSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NM
YXllckNocm9taXVtKgogfQogCiBJbWFnZUxheWVyQ2hyb21pdW06OkltYWdlTGF5ZXJDaHJvbWl1
bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogQ29udGVudExheWVyQ2hyb21p
dW0ob3duZXIpCisgICAgOiBUaWxlZExheWVyQ2hyb21pdW0ob3duZXIpCiAgICAgLCBtX2ltYWdl
Rm9yQ3VycmVudEZyYW1lKDApCi0gICAgLCBtX2NvbnRlbnRzKDApCiB7CiB9CiAKQEAgLTEyNSw2
ICsxMjQsMTIgQEAgSW1hZ2VMYXllckNocm9taXVtOjp+SW1hZ2VMYXllckNocm9taXVtKCkKIHsK
IH0KIAordm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQoreworICAg
IG1fdGV4dHVyZVVwZGF0ZXIuY2xlYXIoKTsKKyAgICBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFu
dXBSZXNvdXJjZXMoKTsKK30KKwogdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnNldENvbnRlbnRz
KEltYWdlKiBjb250ZW50cykKIHsKICAgICAvLyBzZXRDb250ZW50cygpIGN1cnJlbnRseSBnZXRz
IGNhbGxlZCB3aGVuZXZlciB0aGVyZSBpcyBhbnkKQEAgLTE0NSwxMCArMTUwLDggQEAgdm9pZCBJ
bWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKICAgICBBU1NFUlQobGF5
ZXJSZW5kZXJlcigpKTsKIAogICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGRvd25jYXN0IGlzIGJhZC4gVGhlIGZpeCBpcyB0byBtYWtlIElt
YWdlTGF5ZXJDaHJvbWl1bSBub3QgZGVyaXZlIGZyb20gQ29udGVudExheWVyQ2hyb21pdW0uCi0g
ICAgICAgIEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlciogaW1hZ2VUZXh0dXJlVXBkYXRlciA9IHN0
YXRpY19jYXN0PEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcio+KG1fdGV4dHVyZVVwZGF0ZXIuZ2V0
KCkpOwotICAgICAgICBpbWFnZVRleHR1cmVVcGRhdGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250
ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7Ci0gICAgICAgIHVwZGF0ZUxheWVy
U2l6ZSgpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250
ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CisgICAgICAgIHVwZGF0ZVRpbGVT
aXplQW5kVGlsaW5nT3B0aW9uKCk7CiAgICAgICAgIEludFJlY3QgcGFpbnRSZWN0KEludFBvaW50
KCksIGNvbnRlbnRCb3VuZHMoKSk7CiAgICAgICAgIGlmICghbV9kaXJ0eVJlY3QuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBtX3RpbGVyLT5pbnZhbGlkYXRlUmVjdChwYWludFJlY3QpOwpAQCAt
MTU2LDIzICsxNTksMzMgQEAgdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJ
ZkRpcnR5KCkKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICh2aXNpYmxlTGF5ZXJSZWN0KCku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKICAgICBtX3RpbGVyLT5wcmVwYXJlVG9VcGRh
dGUodmlzaWJsZUxheWVyUmVjdCgpLCBtX3RleHR1cmVVcGRhdGVyLmdldCgpKTsKIH0KIAotdm9p
ZCBJbWFnZUxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKQorTGF5ZXJU
ZXh0dXJlVXBkYXRlciogSW1hZ2VMYXllckNocm9taXVtOjp0ZXh0dXJlVXBkYXRlcigpIGNvbnN0
CiB7Ci0gICAgbV90aWxlci0+dXBkYXRlUmVjdChtX3RleHR1cmVVcGRhdGVyLmdldCgpKTsKKyAg
ICByZXR1cm4gbV90ZXh0dXJlVXBkYXRlci5nZXQoKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hy
b21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQorSW50U2l6ZSBJbWFnZUxheWVy
Q2hyb21pdW06OmNvbnRlbnRCb3VuZHMoKSBjb25zdAogewotICAgIGlmICghbV90ZXh0dXJlVXBk
YXRlcikKLSAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250ZXh0KCksIGxheWVyUmVuZGVyZXIoKS0+Y29udGV4
dFN1cHBvcnRzTWFwU3ViKCkpOworICAgIGlmICghbV9jb250ZW50cykKKyAgICAgICAgcmV0dXJu
IEludFNpemUoKTsKKyAgICByZXR1cm4gbV9jb250ZW50cy0+c2l6ZSgpOwogfQogCi1JbnRTaXpl
IEltYWdlTGF5ZXJDaHJvbWl1bTo6Y29udGVudEJvdW5kcygpIGNvbnN0Citib29sIEltYWdlTGF5
ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZW50
cy0+c2l6ZSgpOworICAgIHJldHVybiBtX2NvbnRlbnRzICYmIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
ZHJhd3NDb250ZW50KCk7Cit9CisKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVUZXh0
dXJlVXBkYXRlcklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fdGV4dHVyZVVwZGF0ZXIpCisgICAg
ICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShs
YXllclJlbmRlcmVyQ29udGV4dCgpLCBsYXllclJlbmRlcmVyKCktPmNvbnRleHRTdXBwb3J0c01h
cFN1YigpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAppbmRleCA2YTc0NzYx
MGY3OTBlZjU2MDY4NmU4MWNlZDNjYTIwNjllMDU2NjM3Li45OTUzMzgwOTkzZGNjMmE5MDJmNWM2
ZjA5MWViZTUzNTVjY2MxYjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaApAQCAtNDQs
MzEgKzQ0LDM2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEltYWdlOworY2xhc3Mg
SW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOwogCiAvLyBBIExheWVyIHRoYXQgY29udGFpbnMgb25s
eSBhbiBJbWFnZSBlbGVtZW50LgotY2xhc3MgSW1hZ2VMYXllckNocm9taXVtIDogcHVibGljIENv
bnRlbnRMYXllckNocm9taXVtIHsKK2NsYXNzIEltYWdlTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBU
aWxlZExheWVyQ2hyb21pdW0gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdl
TGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsK
ICAgICB2aXJ0dWFsIH5JbWFnZUxheWVyQ2hyb21pdW0oKTsKIAorICAgIHZpcnR1YWwgYm9vbCBk
cmF3c0NvbnRlbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50c0lmRGly
dHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwotICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzOyB9
CiAKICAgICB2b2lkIHNldENvbnRlbnRzKEltYWdlKiBpbWFnZSk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
IkltYWdlTGF5ZXIiOyB9CiAKLSAgICB2aXJ0dWFsIEludFNpemUgY29udGVudEJvdW5kcygpIGNv
bnN0OwotCiBwcml2YXRlOgogICAgIEltYWdlTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKTsKIAorICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKTsKKyAgICB2b2lk
IHNldFRpbGluZ09wdGlvbihUaWxpbmdPcHRpb24pOworCisgICAgdmlydHVhbCBMYXllclRleHR1
cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcigpIGNvbnN0OworICAgIHZpcnR1YWwgSW50U2l6ZSBj
b250ZW50Qm91bmRzKCkgY29uc3Q7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlRm9yQ3Vy
cmVudEZyYW1lOwogICAgIFJlZlB0cjxJbWFnZT4gbV9jb250ZW50czsKKworICAgIE93blB0cjxJ
bWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI+IG1fdGV4dHVyZVVwZGF0ZXI7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDRjOThjNDhlZDNlOGU4ZWQ4NjNlMDg3MjJlNTFhNzc1OWFk
YWYwYTcuLjFkODczZGMxZmFlNmYwMTYzOWU1M2FiYWZiMWM3ZTFjOWZjZjQzNmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0yOTUsNiArMjk1LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpw
dXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0RGVidWdC
b3JkZXJDb2xvcihtX2RlYnVnQm9yZGVyQ29sb3IpOwogICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRl
cldpZHRoKG1fZGVidWdCb3JkZXJXaWR0aCk7CiAgICAgbGF5ZXItPnNldERvdWJsZVNpZGVkKG1f
ZG91YmxlU2lkZWQpOworICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoZHJhd3NDb250ZW50KCkp
OwogICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAg
ICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobV9tYXNrc1RvQm91bmRzKTsKICAgICBsYXllci0+
c2V0TmFtZShtX25hbWUpOwpAQCAtMzgzLDcgKzM4NCw3IEBAIFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKICAgICByZXR1cm4gQ0NMYXll
ckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOwogfQogCi1DQ0xheWVySW1wbCogTGF5ZXJD
aHJvbWl1bTo6Y2NMYXllckltcGwoKQorQ0NMYXllckltcGwqIExheWVyQ2hyb21pdW06OmNjTGF5
ZXJJbXBsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jY0xheWVySW1wbDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaAppbmRleCBkNDYzOTAzMzQxZWNkN2ViZWVhYzBiNDRmMzA5MDFiNGQyMzFlYTczLi4z
YmE3YjlmMGRiMGNmOTcxYWI5NjhkNjFiOWMzMGEwMWRlZjcyM2FiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCkBAIC0xNjEsNyArMTYxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRJc01h
c2soYm9vbCkge30KICAgICB2aXJ0dWFsIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZHJhdygpIHsgfQogCiAgICAgLy8gVGhlc2UgZXhpc3RzIGp1c3QgZm9yIGRlYnVn
Z2luZyAodmlhIGRyYXdEZWJ1Z0JvcmRlcigpKS4KICAgICB2b2lkIHNldEJvcmRlckNvbG9yKGNv
bnN0IENvbG9yJik7CkBAIC0xNzIsNyArMTcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Qm9y
ZGVyV2lkdGgoZmxvYXQpOwogCiAgICAgLy8gRXZlcnl0aGluZyBmcm9tIGhlcmUgZG93biBpbiB0
aGUgcHVibGljIHNlY3Rpb24gd2lsbCBtb3ZlIHRvIENDTGF5ZXJJbXBsLgotICAgIENDTGF5ZXJJ
bXBsKiBjY0xheWVySW1wbCgpOworICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpIGNvbnN0
OwogCiAgICAgc3RhdGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCos
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggM2VmNTIyMjFhOGUwMTY5OWMyYzll
OGU3NTExNDYzZWZmODIzNTIxNy4uMzFiZTlkZGM1MjRkMDE4NDM0NTUwNmJlOTU3MDdkNjliY2Vj
NjljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC0yMjcsNyAr
MjI3LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIoKQogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcm9sbDsKICAgICBzY3JvbGwudHJhbnNsYXRlKC1tX3Zp
ZXdwb3J0VmlzaWJsZVJlY3QueCgpLCAtbV92aWV3cG9ydFZpc2libGVSZWN0LnkoKSk7CiAKLSAg
ICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+ZHJhdyhtX3ZpZXdwb3J0VmlzaWJsZVJlY3QsIHNj
cm9sbCwgMS4wZiwgbV9yb290TGF5ZXJUZXh0dXJlVXBkYXRlci5nZXQoKSk7CisgICAgbV9yb290
TGF5ZXJDb250ZW50VGlsZXItPmRyYXcobV92aWV3cG9ydFZpc2libGVSZWN0LCBzY3JvbGwsIDEu
MGYpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Vmlld3BvcnQoY29uc3Qg
SW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCkBAIC05NjIsOCArOTYyLDggQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoQ0NMYXllckltcGwqIGNj
TGF5ZXJJbXBsKQogICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpCiAgICAgICAgIHVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY2NMYXllckltcGwtPnJlcGxpY2FMYXllcigpKTsKIAotICAg
IGlmIChjY0xheWVySW1wbC0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGNjTGF5ZXJJbXBsLT51
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQo
KSkKKyAgICAgICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKIAogICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVy
ZVVwZGF0ZXIuaAppbmRleCAyNTc2N2E4YzY2Yzg5OTJlODM5MmUzMGUwNjg2ZGFhNjA3ODhkMmZk
Li4yZGM0NGUzZDI0ZTJmOWM0MDc1MDAzYzcyNzg5ZjU5YjkyYWQxYjEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRh
dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC00NSwxMSArNDUsMTMgQEAgcHVibGljOgogCiAgICAgZW51
bSBPcmllbnRhdGlvbiB7CiAgICAgICAgIEJvdHRvbVVwT3JpZW50YXRpb24sCi0gICAgICAgIFRv
cERvd25PcmllbnRhdGlvbgorICAgICAgICBUb3BEb3duT3JpZW50YXRpb24sCisgICAgICAgIElu
dmFsaWRPcmllbnRhdGlvbiwKICAgICB9OwogICAgIGVudW0gU2FtcGxlZFRleGVsRm9ybWF0IHsK
ICAgICAgICAgU2FtcGxlZFRleGVsRm9ybWF0UkdCQSwKLSAgICAgICAgU2FtcGxlZFRleGVsRm9y
bWF0QkdSQQorICAgICAgICBTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBLAorICAgICAgICBTYW1wbGVk
VGV4ZWxGb3JtYXRJbnZhbGlkLAogICAgIH07CiAgICAgLy8gUmV0dXJucyB0aGUgb3JpZW50YXRp
b24gb2YgdGhlIHRleHR1cmUgdXBsb2FkZWQgYnkgdGhpcyBpbnRlcmZhY2UuCiAgICAgdmlydHVh
bCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21p
dW0uY3BwCmluZGV4IDY3NjdkN2NkYmUyYWE0MmIyZGI3NjcwNDI5OTI4ZWQwZGRlMTJiMzAuLjU5
OGYwYmE3YTkzOGMzMDQ2Yjk1MmJjYmI3MTFkYmNkMDNjZWI4MjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
aWxlckNocm9taXVtLmNwcApAQCAtNTcsNiArNTcsOCBAQCBQYXNzT3duUHRyPExheWVyVGlsZXJD
aHJvbWl1bT4gTGF5ZXJUaWxlckNocm9taXVtOjpjcmVhdGUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KgogTGF5ZXJUaWxlckNocm9taXVtOjpMYXllclRpbGVyQ2hyb21pdW0oTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgQm9yZGVyVGV4
ZWxPcHRpb24gYm9yZGVyKQogICAgIDogbV90ZXh0dXJlRm9ybWF0KFBsYXRmb3JtQ29sb3I6OmJl
c3RUZXh0dXJlRm9ybWF0KGxheWVyUmVuZGVyZXItPmNvbnRleHQoKSkpCiAgICAgLCBtX3NraXBz
RHJhdyhmYWxzZSkKKyAgICAsIG1fdGV4dHVyZU9yaWVudGF0aW9uKExheWVyVGV4dHVyZVVwZGF0
ZXI6OkludmFsaWRPcmllbnRhdGlvbikKKyAgICAsIG1fc2FtcGxlZFRleGVsRm9ybWF0KExheWVy
VGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEludmFsaWQpCiAgICAgLCBtX3RpbGlu
Z0RhdGEobWF4KHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXplLmhlaWdodCgpKSwgMCwgMCwgYm9y
ZGVyID09IEhhc0JvcmRlclRleGVscykKICAgICAsIG1fbGF5ZXJSZW5kZXJlcihsYXllclJlbmRl
cmVyKQogewpAQCAtMzI2LDYgKzMyOCw4IEBAIHZvaWQgTGF5ZXJUaWxlckNocm9taXVtOjp1cGRh
dGVSZWN0KExheWVyVGV4dHVyZVVwZGF0ZXIqIHRleHR1cmVVcGRhdGVyKQogICAgICAgICByZXR1
cm47CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250
ZXh0KCk7CisgICAgbV90ZXh0dXJlT3JpZW50YXRpb24gPSB0ZXh0dXJlVXBkYXRlci0+b3JpZW50
YXRpb24oKTsKKyAgICBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1cmVVcGRhdGVyLT5zYW1w
bGVkVGV4ZWxGb3JtYXQobV90ZXh0dXJlRm9ybWF0KTsKIAogICAgIGludCBsZWZ0LCB0b3AsIHJp
Z2h0LCBib3R0b207CiAgICAgY29udGVudFJlY3RUb1RpbGVJbmRpY2VzKG1fdXBkYXRlUmVjdCwg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKQEAgLTM4NSwxNyArMzg5LDE3IEBAIHZvaWQgTGF5
ZXJUaWxlckNocm9taXVtOjpzZXRMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBsYXllclBv
c2l0aW9uKQogICAgIG1fbGF5ZXJQb3NpdGlvbiA9IGxheWVyUG9zaXRpb247CiB9CiAKLXZvaWQg
TGF5ZXJUaWxlckNocm9taXVtOjpkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBM
YXllclRleHR1cmVVcGRhdGVyKiB0ZXh0dXJlVXBkYXRlcikKK3ZvaWQgTGF5ZXJUaWxlckNocm9t
aXVtOjpkcmF3KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5KQogewogICAgIGlmIChtX3Nr
aXBzRHJhdyB8fCAhbV90aWxlcy5zaXplKCkgfHwgY29udGVudFJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBzd2l0Y2ggKHRleHR1cmVVcGRhdGVyLT5zYW1wbGVkVGV4ZWxG
b3JtYXQobV90ZXh0dXJlRm9ybWF0KSkgeworICAgIHN3aXRjaCAobV9zYW1wbGVkVGV4ZWxGb3Jt
YXQpIHsKICAgICBjYXNlIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJH
QkE6Ci0gICAgICAgIGRyYXdUaWxlcyhjb250ZW50UmVjdCwgZ2xvYmFsVHJhbnNmb3JtLCBvcGFj
aXR5LCBsYXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbSgpLCB0ZXh0dXJlVXBkYXRlcik7Cisg
ICAgICAgIGRyYXdUaWxlcyhjb250ZW50UmVjdCwgZ2xvYmFsVHJhbnNmb3JtLCBvcGFjaXR5LCBs
YXllclJlbmRlcmVyKCktPnRpbGVyUHJvZ3JhbSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOgotICAgICAgICBk
cmF3VGlsZXMoY29udGVudFJlY3QsIGdsb2JhbFRyYW5zZm9ybSwgb3BhY2l0eSwgbGF5ZXJSZW5k
ZXJlcigpLT50aWxlclByb2dyYW1Td2l6emxlKCksIHRleHR1cmVVcGRhdGVyKTsKKyAgICAgICAg
ZHJhd1RpbGVzKGNvbnRlbnRSZWN0LCBnbG9iYWxUcmFuc2Zvcm0sIG9wYWNpdHksIGxheWVyUmVu
ZGVyZXIoKS0+dGlsZXJQcm9ncmFtU3dpenpsZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00NTMsNyArNDU3LDcgQEAg
c3RhdGljIEZsb2F0UG9pbnQgaW50ZXJzZWN0KGNvbnN0IEVkZ2UmIGEsIGNvbnN0IEVkZ2UmIGIp
CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBMYXllclRpbGVyQ2hyb21pdW06OmRyYXdU
aWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGdsb2JhbFRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgY29uc3QgVCogcHJvZ3JhbSwgTGF5
ZXJUZXh0dXJlVXBkYXRlciogdGV4dHVyZVVwZGF0ZXIpCit2b2lkIExheWVyVGlsZXJDaHJvbWl1
bTo6ZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZ2xvYmFsVHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9n
cmFtKQogewogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNv
bnRleHQoKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5w
cm9ncmFtKCkpKTsKQEAgLTU0Nyw3ICs1NTEsNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6
ZHJhd1RpbGVzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdAog
ICAgICAgICAgICAgZmxvYXQgdGV4U2NhbGVZID0gdGlsZVJlY3QuaGVpZ2h0KCkgLyB0aWxlSGVp
Z2h0OwogICAgICAgICAgICAgLy8gT3BlbkdMIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGJvdHRvbS11
cC4KICAgICAgICAgICAgIC8vIElmIHRpbGUgdGV4dHVyZSBpcyB0b3AtZG93biwgd2UgbmVlZCB0
byBmbGlwIHRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzLgotICAgICAgICAgICAgaWYgKHRleHR1cmVV
cGRhdGVyLT5vcmllbnRhdGlvbigpID09IExheWVyVGV4dHVyZVVwZGF0ZXI6OlRvcERvd25Pcmll
bnRhdGlvbikgeworICAgICAgICAgICAgaWYgKG1fdGV4dHVyZU9yaWVudGF0aW9uID09IExheWVy
VGV4dHVyZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbikgewogICAgICAgICAgICAgICAgIHRl
eFRyYW5zbGF0ZVkgPSAxLjAgLSB0ZXhUcmFuc2xhdGVZOwogICAgICAgICAgICAgICAgIHRleFNj
YWxlWSAqPSAtMS4wOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaApp
bmRleCA5ZWUwMTIxYWY3NGI2NGY4OThlN2E3OGM2YzExZjY4MzQ2YWZjMDkxLi4wZWYxMWEyNTVh
ZDFiNTE0MzM0ODUyOGQ5OTgzNGVlZTcyNDY3ZDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRpbGVyQ2hyb21p
dW0uaApAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIkxheWVyVGV4dHVyZS5oIgorI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIK
ICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNTksNyArNjAsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gVXBkYXRlIGludmFsaWQgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVj
dCBwcm92aWRlZCBpbiBwcmVwYXJlVG9VcGRhdGUoKS4KICAgICB2b2lkIHVwZGF0ZVJlY3QoTGF5
ZXJUZXh0dXJlVXBkYXRlciopOwogICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50ZXJzZWN0
IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KLSAgICB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgTGF5
ZXJUZXh0dXJlVXBkYXRlciopOworICAgIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKIAogICAg
IGludCBudW1UaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdGlsaW5nRGF0YS5udW1UaWxlcygpOyB9
CiAKQEAgLTEwOSw3ICsxMTAsNyBAQCBwcml2YXRlOgogCiAgICAgLy8gRHJhdyBhbGwgdGlsZXMg
dGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4K
LSAgICB2b2lkIGRyYXdUaWxlcyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBUKiBwcm9ncmFtLCBMYXll
clRleHR1cmVVcGRhdGVyKik7CisgICAgdm9pZCBkcmF3VGlsZXMoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgVCogcHJvZ3JhbSk7CiAKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgICB2b2lkIGRyYXdU
ZXh0dXJlZFF1YWQoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBGbG9hdFF1YWQmLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGRyYXdNYXRyaXgsCkBAIC0xNjUsNiArMTY2LDggQEAgcHJpdmF0ZToKICAgICBJ
bnRSZWN0IG1fcGFpbnRSZWN0OwogICAgIEludFJlY3QgbV91cGRhdGVSZWN0OwogCisgICAgTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6T3JpZW50YXRpb24gbV90ZXh0dXJlT3JpZW50YXRpb247CisgICAg
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IG1fc2FtcGxlZFRleGVsRm9y
bWF0OwogICAgIFRpbGluZ0RhdGEgbV90aWxpbmdEYXRhOwogCiAgICAgTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBtX2xheWVyUmVuZGVyZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zZTllNmRkMDQ4ZjIyMTVkMjg5NDkxNzU5MzQxZDdlMzc2YmMwZDI3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1
ZGUgIlRpbGVkTGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclRp
bGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CisKKy8vIFN0YXJ0IHRpbGluZyB3aGVuIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IG9mIGEgbGF5ZXIgYXJlIGxhcmdlciB0aGFuIHRoaXMgc2l6ZS4KK3N0YXRpYyBpbnQg
bWF4VW50aWxlZFNpemUgPSA1MTA7CisKKy8vIFdoZW4gdGlsaW5nIGlzIGVuYWJsZWQsIHVzZSB0
aWxlcyBvZiB0aGlzIGRpbWVuc2lvbiBzcXVhcmVkLgorc3RhdGljIGludCBkZWZhdWx0VGlsZVNp
emUgPSAyNTY7CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworVGlsZWRMYXllckNocm9taXVtOjpUaWxlZExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lcikKKyAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCisgICAgLCBtX3RpbGlu
Z09wdGlvbihBdXRvVGlsZSkKKyAgICAsIG1fYm9yZGVyVGV4ZWxzKHRydWUpCit7Cit9CisKK1Rp
bGVkTGF5ZXJDaHJvbWl1bTo6flRpbGVkTGF5ZXJDaHJvbWl1bSgpCit7Cit9CisKK1Bhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IFRpbGVkTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQor
eworICAgIHJldHVybiBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgaWQoKSk7Cit9CisK
K3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKK3sKKyAgICBtX3Rp
bGVyLmNsZWFyKCk7CisgICAgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpOworfQor
Cit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit7CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJS
ZW5kZXJlcihsYXllclJlbmRlcmVyKTsKKyAgICBjcmVhdGVUaWxlcklmTmVlZGVkKCk7Cit9CisK
K3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVUaWxlU2l6ZUFuZFRpbGluZ09wdGlvbigp
Cit7CisgICAgaWYgKCFtX3RpbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBJbnRT
aXplIHRpbGVTaXplKGRlZmF1bHRUaWxlU2l6ZSwgZGVmYXVsdFRpbGVTaXplKTsKKworICAgIC8v
IFRpbGUgaWYgYm90aCBkaW1lbnNpb25zIGxhcmdlLCBvciBhbnkgb25lIGRpbWVuc2lvbiBsYXJn
ZSBhbmQgdGhlIG90aGVyCisgICAgLy8gZXh0ZW5kcyBpbnRvIGEgc2Vjb25kIHRpbGUuIFRoaXMg
aGV1cmlzdGljIGFsbG93cyBmb3IgbG9uZyBza2lubnkgbGF5ZXJzCisgICAgLy8gKGUuZy4gc2Ny
b2xsYmFycykgdGhhdCBhcmUgTngxIHRpbGVzIHRvIG1pbmltaXplIHdhc3RlZCB0ZXh0dXJlIHNw
YWNlLgorICAgIGNvbnN0IGJvb2wgYW55RGltZW5zaW9uTGFyZ2UgPSBjb250ZW50Qm91bmRzKCku
d2lkdGgoKSA+IG1heFVudGlsZWRTaXplIHx8IGNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSA+IG1h
eFVudGlsZWRTaXplOworICAgIGNvbnN0IGJvb2wgYW55RGltZW5zaW9uT25lVGlsZSA9IGNvbnRl
bnRCb3VuZHMoKS53aWR0aCgpIDw9IGRlZmF1bHRUaWxlU2l6ZSB8fCBjb250ZW50Qm91bmRzKCku
aGVpZ2h0KCkgPD0gZGVmYXVsdFRpbGVTaXplOworICAgIGNvbnN0IGJvb2wgYXV0b1RpbGVkID0g
YW55RGltZW5zaW9uTGFyZ2UgJiYgIWFueURpbWVuc2lvbk9uZVRpbGU7CisKKyAgICBib29sIGlz
VGlsZWQ7CisgICAgaWYgKG1fdGlsaW5nT3B0aW9uID09IEFsd2F5c1RpbGUpCisgICAgICAgIGlz
VGlsZWQgPSB0cnVlOworICAgIGVsc2UgaWYgKG1fdGlsaW5nT3B0aW9uID09IE5ldmVyVGlsZSkK
KyAgICAgICAgaXNUaWxlZCA9IGZhbHNlOworICAgIGVsc2UKKyAgICAgICAgaXNUaWxlZCA9IGF1
dG9UaWxlZDsKKworICAgIC8vIEVtcHR5IHRpbGUgc2l6ZSB0ZWxscyB0aGUgdGlsZXIgdG8gYXZv
aWQgdGlsaW5nLgorICAgIEludFNpemUgcmVxdWVzdGVkU2l6ZSA9IGlzVGlsZWQgPyB0aWxlU2l6
ZSA6IEludFNpemUoKTsKKyAgICBjb25zdCBpbnQgbWF4U2l6ZSA9IGxheWVyUmVuZGVyZXIoKS0+
bWF4VGV4dHVyZVNpemUoKTsKKyAgICBJbnRTaXplIGNsYW1wZWRTaXplID0gcmVxdWVzdGVkU2l6
ZS5zaHJ1bmtUbyhJbnRTaXplKG1heFNpemUsIG1heFNpemUpKTsKKyAgICBtX3RpbGVyLT5zZXRU
aWxlU2l6ZShjbGFtcGVkU2l6ZSk7Cit9CisKK2Jvb2wgVGlsZWRMYXllckNocm9taXVtOjpkcmF3
c0NvbnRlbnQoKSBjb25zdAoreworICAgIGlmICghbV9vd25lcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFtX3RpbGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChtX3RpbGluZ09wdGlvbiA9PSBOZXZlclRpbGUgJiYgbV90aWxlci0+bnVtVGlsZXMoKSA+IDEp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhbV90aWxlci0+c2tpcHNEcmF3
KCk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjpjcmVhdGVUaWxlcklmTmVlZGVkKCkK
K3sKKyAgICBpZiAobV90aWxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgY3JlYXRlVGV4dHVy
ZVVwZGF0ZXJJZk5lZWRlZCgpOworCisgICAgbV90aWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6
Y3JlYXRlKAorICAgICAgICBsYXllclJlbmRlcmVyKCksCisgICAgICAgIEludFNpemUoZGVmYXVs
dFRpbGVTaXplLCBkZWZhdWx0VGlsZVNpemUpLAorICAgICAgICBtX2JvcmRlclRleGVscyA/IExh
eWVyVGlsZXJDaHJvbWl1bTo6SGFzQm9yZGVyVGV4ZWxzIDogTGF5ZXJUaWxlckNocm9taXVtOjpO
b0JvcmRlclRleGVscyk7Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKCkKK3sKKyAgICBtX3RpbGVyLT51cGRhdGVSZWN0KHRleHR1cmVVcGRh
dGVyKCkpOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0VGlsaW5nT3B0aW9uKFRp
bGluZ09wdGlvbiB0aWxpbmdPcHRpb24pCit7CisgICAgbV90aWxpbmdPcHRpb24gPSB0aWxpbmdP
cHRpb247CisgICAgdXBkYXRlVGlsZVNpemVBbmRUaWxpbmdPcHRpb24oKTsKK30KKwordm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnNldElzTWFzayhib29sIGlzTWFzaykKK3sKKyAgICBtX2JvcmRl
clRleGVscyA9ICFpc01hc2s7CisgICAgc2V0VGlsaW5nT3B0aW9uKGlzTWFzayA/IE5ldmVyVGls
ZSA6IEF1dG9UaWxlKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggVGlsZWRMYXllckNocm9t
aXVtOjp0aWxpbmdUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybSA9IGNjTGF5ZXJJbXBsKCktPmRyYXdUcmFuc2Zvcm0oKTsKKworICAgIGlmIChj
b250ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJhbnNmb3JtOworCisg
ICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHMoKS53aWR0aCgpIC8gc3RhdGljX2Nh
c3Q8ZG91YmxlPihjb250ZW50Qm91bmRzKCkud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3VuZHMoKS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVu
dEJvdW5kcygpLmhlaWdodCgpKSk7CisKKyAgICAvLyBUaWxlciBkcmF3cyB3aXRoIGEgZGlmZmVy
ZW50IG9yaWdpbiBmcm9tIG90aGVyIGxheWVycy4KKyAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1j
b250ZW50Qm91bmRzKCkud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSAv
IDIuMCk7CisKKyAgICByZXR1cm4gdHJhbnNmb3JtOworfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgTGF5ZXJD
aHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhsYXllcik7CisKKyAgICBDQ1RpbGVkTGF5ZXJJbXBs
KiB0aWxlZExheWVyID0gc3RhdGljX2Nhc3Q8Q0NUaWxlZExheWVySW1wbCo+KGxheWVyKTsKKyAg
ICB0aWxlZExheWVyLT5zZXRUaWxpbmdUcmFuc2Zvcm0odGlsaW5nVHJhbnNmb3JtKCkpOworICAg
IHRpbGVkTGF5ZXItPnNldFRpbGVyKG1fdGlsZXIuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCB3
cml0ZUluZGVudChUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkKK3sKKyAgICBmb3IgKGludCBp
ID0gMDsgaSAhPSBpbmRlbnQ7ICsraSkKKyAgICAgICAgdHMgPDwgIiAgIjsKK30KKwordm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGlu
dCBpbmRlbnQpIGNvbnN0Cit7CisgICAgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGll
cyh0cywgaW5kZW50KTsKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCAi
c2tpcHNEcmF3OiAiIDw8ICghbV90aWxlciB8fCBtX3RpbGVyLT5za2lwc0RyYXcoKSkgPDwgIlxu
IjsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzg4YWRjN2YxMDhhYTZhMjVjYjNkNGNm
OGNkMTQ5MzBlNjQ2NDE1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC0wLDAgKzEsODIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFRpbGVkTGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5lIFRpbGVkTGF5
ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIExheWVyVGV4dHVyZTsKK2NsYXNzIExheWVy
VGlsZXJDaHJvbWl1bTsKK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXI7CisKK2NsYXNzIFRpbGVk
TGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBlbnVt
IFRpbGluZ09wdGlvbiB7IEFsd2F5c1RpbGUsIE5ldmVyVGlsZSwgQXV0b1RpbGUgfTsKKworICAg
IHZpcnR1YWwgflRpbGVkTGF5ZXJDaHJvbWl1bSgpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wp
OworCisgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAg
IGV4cGxpY2l0IFRpbGVkTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwUmVzb3VyY2VzKCk7CisgICAgdm9pZCB1cGRhdGVUaWxl
U2l6ZUFuZFRpbGluZ09wdGlvbigpOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmVV
cGRhdGVySWZOZWVkZWQoKSA9IDA7CisgICAgdmlydHVhbCBMYXllclRleHR1cmVVcGRhdGVyKiB0
ZXh0dXJlVXBkYXRlcigpIGNvbnN0ID0gMDsKKworICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21p
dW0+IG1fdGlsZXI7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclBy
b3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OworCisgICAgdmlydHVhbCB2
b2lkIHNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisKKyAgICB2b2lk
IGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKKyAgICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdP
cHRpb24pOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0
OworCisgICAgVGlsaW5nT3B0aW9uIG1fdGlsaW5nT3B0aW9uOworICAgIGJvb2wgbV9ib3JkZXJU
ZXhlbHM7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBlMThkNTRmOGE4MDEwYTQzOWZm
M2JmY2QwNmQxNmU3NWNhODc1YjZjLi4yNGU5YjVmOWVmMGQyMDc4YjRiMWI3ZTNkOGY2ODQxODAy
Njk1MmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC03MSw2ICs3MSw3IEBAIENDTGF5
ZXJJbXBsOjpDQ0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQogICAgICwg
bV9vcGFjaXR5KDEuMCkKICAgICAsIG1fcHJlc2VydmVzM0QoZmFsc2UpCiAgICAgLCBtX3VzZXNM
YXllclNjaXNzb3IoZmFsc2UpCisgICAgLCBtX2RyYXdzQ29udGVudChmYWxzZSkKICAgICAsIG1f
dGFyZ2V0UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9kcmF3RGVwdGgoMCkKICAgICAsIG1fZHJh
d09wYWNpdHkoMCkKQEAgLTEzNiwxNSArMTM3LDkgQEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVzY2Vu
ZGFudHNEcmF3c0NvbnRlbnQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gVGhlc2UgYmVs
b25nIG9uIENDTGF5ZXJJbXBsLCBidXQgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgZWFjaCB0eXBl
IGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlwZXMuCi1ib29sIENDTGF5
ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX293bmVyLT5kcmF3
c0NvbnRlbnQoKTsKLX0KLQogdm9pZCBDQ0xheWVySW1wbDo6ZHJhdygpCiB7Ci0gICAgcmV0dXJu
IG1fb3duZXItPmRyYXcoKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdm9pZCBD
Q0xheWVySW1wbDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAppbmRleCBkNzk1NGNiNmVlYjkxNTQ3NTcyM2JiYjRmZDhjNWRiY2QxNWUzZmIwLi5iZDI3NmZl
ODA5MDc2NzE2YTY4ZDA5Njc3Y2RiMWI1YTY0ZjkwZmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
QEAgLTcyLDEwICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRyYXcoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogICAgIHZvaWQgdW5y
ZXNlcnZlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCk7
CisgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoKTsKIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIGxheWVyIGhhcyBjb250ZW50IHRvIGRyYXcuCi0gICAgdmlydHVhbCBi
b29sIGRyYXdzQ29udGVudCgpIGNvbnN0OworICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wg
ZHJhd3NDb250ZW50KSB7IG1fZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50OyB9CisgICAgYm9v
bCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2RyYXdzQ29udGVudDsgfQogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgbGF5ZXIncyBkZXNjZW5kYW50cyBoYXMgY29u
dGVudCB0byBkcmF3LgogICAgIGJvb2wgZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKTsKQEAgLTIw
MSw2ICsyMDIsOCBAQCBwcml2YXRlOgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNm
b3JtOwogICAgIGJvb2wgbV91c2VzTGF5ZXJTY2lzc29yOwogCisgICAgYm9vbCBtX2RyYXdzQ29u
dGVudDsKKwogICAgIC8vIFByb3BlcnRpZXMgb3duZWQgZXhjbHVzaXZlbHkgYnkgdGhpcyBDQ0xh
eWVySW1wbC4KICAgICAvLyBEZWJ1Z2dpbmcuCiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MDNiYTA2ZDU2MTk3ZDI4YWFlNTVhNzhj
NWJjZDExZTEyNDc3YjVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTAsMCArMSw3
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKKworI2luY2x1
ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBMYXllclRleHR1cmU7CisKK0ND
VGlsZWRMYXllckltcGw6OkNDVGlsZWRMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGlu
dCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKKyAgICAsIG1fdGlsZXIoMCkKK3sK
K30KKworQ0NUaWxlZExheWVySW1wbDo6fkNDVGlsZWRMYXllckltcGwoKQoreworfQorCit2b2lk
IENDVGlsZWRMYXllckltcGw6OmRyYXcoKQoreworICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCA9IHZpc2libGVMYXllclJlY3QoKTsKKyAgICBpZiAoIWxheWVyUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIG1fdGlsZXItPmRyYXcobGF5ZXJSZWN0LCBtX3RpbGluZ1RyYW5zZm9ybSwgZHJhd09w
YWNpdHkoKSk7Cit9CisKK3ZvaWQgQ0NUaWxlZExheWVySW1wbDo6YmluZENvbnRlbnRzVGV4dHVy
ZSgpCit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBzaW5nbGUgdGV4
dHVyZSBsYXllcnMsIGUuZy4gbWFza3MuCisgICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgTGF5
ZXJUZXh0dXJlKiB0ZXh0dXJlID0gbV90aWxlci0+Z2V0U2luZ2xlVGV4dHVyZSgpOworICAgIEFT
U0VSVCh0ZXh0dXJlKTsKKworICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKCk7Cit9CisKK3ZvaWQg
Q0NUaWxlZExheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50
IGluZGVudCkgY29uc3QKK3sKKyAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICBDQ0xh
eWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KTsKK30KKworfQorCisjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIwZDEwMzFmYmI3YjhmODBmNDc4YWM4MTNjOGYyNzI5ZGM4OWE5
MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQ0NUaWxlZExheWVySW1wbF9oCisjZGVmaW5lIENDVGlsZWRMYXllckltcGxfaAorCisj
aW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1RpbGVkTGF5ZXJJbXBsIDogcHVi
bGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1RpbGVk
TGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NUaWxlZExheWVySW1wbChvd25lciwgaWQpKTsK
KyAgICB9CisgICAgdmlydHVhbCB+Q0NUaWxlZExheWVySW1wbCgpOworCisgICAgdmlydHVhbCB2
b2lkIGRyYXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZSgpOworCisg
ICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRl
bnQpIGNvbnN0OworCisgICAgdm9pZCBzZXRUaWxpbmdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRpbGluZ1RyYW5zZm9ybSkgeyBtX3RpbGluZ1RyYW5zZm9ybSA9IHRpbGlu
Z1RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0VGlsZXIoTGF5ZXJUaWxlckNocm9taXVtKiB0aWxl
cikgeyBtX3RpbGVyID0gdGlsZXI7IH0KKworcHJpdmF0ZToKKyAgICBDQ1RpbGVkTGF5ZXJJbXBs
KExheWVyQ2hyb21pdW0qLCBpbnQgaWQpOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90
aWxpbmdUcmFuc2Zvcm07CisgICAgTGF5ZXJUaWxlckNocm9taXVtKiBtX3RpbGVyOworfTsKKwor
fQorCisjZW5kaWYgLy8gQ0NUaWxlZExheWVySW1wbF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>