<?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>87565</bug_id>
          
          <creation_ts>2012-05-25 22:16:05 -0700</creation_ts>
          <short_desc>[BlackBerry] Update WebPageCompositor::render() API</short_desc>
          <delta_ts>2012-05-28 10:29:32 -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>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87564</dependson>
          <blocked>87567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Arvid Nilsson">anilsson</reporter>
          <assigned_to name="Arvid Nilsson">anilsson</assigned_to>
          <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>634582</commentid>
    <comment_count>0</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-25 22:16:05 -0700</bug_when>
    <thetext>This was several patches internally


2012-04-24  Arvid Nilsson  &lt;anilsson@rim.com&gt;
    
            Update WebPageCompositor::render() API
            RIM PR #151887
    
            Now we have a clearer picture of what parameters need to be available
            in order to render the web page.
    
            Rubber-stamped by Mike Lattanzio and Filip Spacek.
    
            * Api/WebPageCompositor.cpp:
            (BlackBerry::WebKit::WebPageCompositorPrivate::render):
            (BlackBerry::WebKit::WebPageCompositor::render):
            (WebKit):
            * Api/WebPageCompositor.h:
            * Api/WebPageCompositorClient.h:
            * Api/WebPageCompositor_p.h:
            (WebPageCompositorPrivate):


commit e93e215b039248e18c4ae38432671f3269a8c9cb
Author: Arvid Nilsson &lt;anilsson@rim.com&gt;
Date:   Fri May 4 00:43:15 2012 +0200

    Source/WebKit/blackberry:
    
    2012-05-03  Arvid Nilsson  &lt;anilsson@rim.com&gt;
    
            Plumb through new WebPageCompositor parameters to LayerRenderer
            PR #154334
    
            The new API allows the embedder to specify the root transform and many
            OpenGL related parameters to be used when rendering the web page.
    
            To honor the transform, we have to implement a way to composite the
            BackingStore output using a generic transform. This method,
            BackingStorePrivate::compositeContents(), uses a strategy that differs
            from blitContents(), because that one is optimized for software
            blitting, while this one is optimized for GPU rendering. Specifically,
            instead of drawing the checkerboard first, and the rendered subregions
            of the tile afterward, we draw the whole tile in one call, and then
            draw checkered regions on top, if any.
    
            Removed the blit generation condvar from the new code paths for drawing
            BackingStore output using a transform, since the condvar is ineffective
            in preventing flicker when we&apos;re not in charge of swapping the window.
            Instead, another synchronization solution will be implemented in the
            future.
    
            Reviewed by Filip Spacek.
    
            * Api/BackingStore.cpp:
            (BlackBerry::WebKit::BackingStorePrivate::render):
            (BlackBerry::WebKit::BackingStorePrivate::blitContents):
            (WebKit):
            (BlackBerry::WebKit::BackingStorePrivate::compositeContents):
            * Api/BackingStore_p.h:
            (WebCore):
            (BackingStorePrivate):

            * Api/WebPageCompositor.cpp:
            (BlackBerry::WebKit::WebPageCompositorPrivate::setContext):
            (BlackBerry::WebKit::WebPageCompositorPrivate::setRootLayer):
            (BlackBerry::WebKit::WebPageCompositorPrivate::animationFrameChanged):
            (BlackBerry::WebKit::WebPageCompositorPrivate::prepareFrame):
            (BlackBerry::WebKit::WebPageCompositorPrivate::render):
            (BlackBerry::WebKit::WebPageCompositorPrivate::drawLayers):
            * Api/WebPageCompositor.h:
            * Api/WebPageCompositor_p.h:
            (WebPageCompositorPrivate):
            * WebCoreSupport/ChromeClientBlackBerry.cpp:
    
    Source/WebCore:
    
    2012-05-03  Arvid Nilsson  &lt;anilsson@rim.com&gt;
    
            Plumb through new WebPageCompositor parameters to LayerRenderer
            PR #154334
    
            The new API allows the embedder to specify the root transform and many
            OpenGL related parameters.
    
            Also refactor the code to allow several sets of layers to be rendered,
            and to allow interleaving the rendering of layers with rendering of
            buffer and checkerboard.
    
            Reviewed by Filip Spacek.
    
            * platform/graphics/blackberry/LayerCompositingThread.cpp:
            (WebCore::LayerCompositingThread::drawTextures):
            (WebCore::LayerCompositingThread::drawSurface):
            * platform/graphics/blackberry/LayerRenderer.cpp:
            (WebCore::LayerRenderer::orthoMatrix):
            (WebCore::LayerRenderer::LayerRenderer):
            (WebCore::LayerRenderer::prepareFrame):
            (WebCore):
            (WebCore::LayerRenderer::setViewport):
            (WebCore::LayerRenderer::compositeLayers):
            (WebCore::LayerRenderer::compositeBuffer):

            (WebCore::LayerRenderer::drawCheckerboardPattern):
            (WebCore::LayerRenderer::drawLayersOnSurfaces):
            (WebCore::LayerRenderer::prepareFrameRecursive):
            (WebCore::LayerRenderer::updateLayersRecursive):
            (WebCore::LayerRenderer::compositeLayersRecursive):
            (WebCore::LayerRenderer::updateScissorIfNeeded):
            (WebCore::LayerRenderingResults::addHolePunchRect):
            * platform/graphics/blackberry/LayerRenderer.h:
            (LayerRenderer):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634583</commentid>
    <comment_count>1</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-25 22:17:50 -0700</bug_when>
    <thetext>And this one, in between the other two:

commit 65c17ae0be75eb6c0db392b649e36528e55364be
Author: Arvid Nilsson &lt;anilsson@rim.com&gt;
Date:   Wed Apr 25 14:27:15 2012 +0200

    2012-04-25  Arvid Nilsson  &lt;anilsson@rim.com&gt;
    
            Another compositing change, another simulator build fix
            PR #151887
    
            Reviewed by Torch BuildBot.
    
            * Api/WebPageCompositor.cpp:
            (BlackBerry::WebKit::WebPageCompositor::render):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634728</commentid>
    <comment_count>2</comment_count>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-27 00:40:02 -0700</bug_when>
    <thetext>This one also belongs in here:

commit 5b2bef3baa081daf8757ed785ec3a20a6a7cfe4a
Author: Arvid Nilsson &lt;anilsson@rim.com&gt;
Date:   Tue May 8 23:52:21 2012 +0200

    2012-05-08  Arvid Nilsson  &lt;anilsson@rim.com&gt;
    
            Remove unused variables
    
            Reviewed by Jacky Jiang.
    
            * Api/BackingStore.cpp:
            (BlackBerry::WebKit::BackingStorePrivate::compositeContents):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634742</commentid>
    <comment_count>3</comment_count>
      <attachid>144228</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2012-05-27 06:08:30 -0700</bug_when>
    <thetext>Created attachment 144228
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635260</commentid>
    <comment_count>4</comment_count>
      <attachid>144228</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-28 08:45:34 -0700</bug_when>
    <thetext>Comment on attachment 144228
Patch

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

Looks good.

&gt; Source/WebCore/platform/graphics/blackberry/LayerRenderer.cpp:321
&gt; +        return;

Could combine with above if.

&gt; Source/WebCore/platform/graphics/blackberry/LayerRenderer.cpp:325
&gt; +    for (size_t i = 0; i &lt; sublayers.size(); i++) {

might want to stick to always using ++i or i++, now it is inconsistent.

&gt; Source/WebCore/platform/graphics/blackberry/LayerRenderer.cpp:326
&gt; +        float opacity = 1;

I am not sure this extra var is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635311</commentid>
    <comment_count>5</comment_count>
      <attachid>144228</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-28 10:29:28 -0700</bug_when>
    <thetext>Comment on attachment 144228
Patch

Clearing flags on attachment: 144228

Committed r118696: &lt;http://trac.webkit.org/changeset/118696&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635312</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-28 10:29:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144228</attachid>
            <date>2012-05-27 06:08:30 -0700</date>
            <delta_ts>2012-05-28 10:29:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87565-20120527150828.patch</filename>
            <type>text/plain</type>
            <size>51649</size>
            <attacher name="Arvid Nilsson">anilsson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU3NGYwNTVjYjgzODc3
MmExNDk0MDA3MGVlYThkZTg2MmVkZjU0Mi4uOTVkN2I5ZmM2N2U3MDM3ODNkY2I5YWNjZTg1NGFj
ZTcwNDg0ZGJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA1LTI3ICBBcnZp
ZCBOaWxzc29uICA8YW5pbHNzb25AcmltLmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gVXBk
YXRlIFdlYlBhZ2VDb21wb3NpdG9yOjpyZW5kZXIoKSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3NTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG5ldyBBUEkgYWxsb3dzIHRoZSBlbWJlZGRl
ciB0byBzcGVjaWZ5IHRoZSByb290IHRyYW5zZm9ybSBhbmQgbWFueQorICAgICAgICBPcGVuR0wg
cmVsYXRlZCBwYXJhbWV0ZXJzLgorCisgICAgICAgIEFsc28gcmVmYWN0b3IgdGhlIGNvZGUgdG8g
YWxsb3cgc2V2ZXJhbCBzZXRzIG9mIGxheWVycyB0byBiZSByZW5kZXJlZCwKKyAgICAgICAgYW5k
IHRvIGFsbG93IGludGVybGVhdmluZyB0aGUgcmVuZGVyaW5nIG9mIGxheWVycyB3aXRoIHJlbmRl
cmluZyBvZgorICAgICAgICBidWZmZXJzIGFuZCBjaGVja2VyYm9hcmQuCisKKyAgICAgICAgUmV2
aWV3ZWQgaW50ZXJuYWxseSBieSBGaWxpcCBTcGFjZWsuCisKKyAgICAgICAgUFIgIzE1NDMzNAor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5n
VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OmRy
YXdUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpk
cmF3U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXll
clJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6Om9ydGhvTWF0
cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OkxheWVyUmVuZGVyZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6cHJlcGFyZUZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6c2V0Vmlld3BvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpkcmF3Q2hlY2tlcmJvYXJkUGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpkcmF3TGF5ZXJzT25TdXJmYWNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjpwcmVwYXJlRnJhbWVSZWN1cnNpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlcjo6dXBkYXRlTGF5ZXJzUmVjdXJzaXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXI6OmNvbXBvc2l0ZUxheWVyc1JlY3Vyc2l2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyOjp1cGRhdGVTY2lzc29ySWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJpbmdSZXN1bHRzOjphZGRIb2xlUHVuY2hS
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVy
ZXIuaDoKKyAgICAgICAgKExheWVyUmVuZGVyZXIpOgorCiAyMDEyLTA1LTI3ICBEYXZpZCBLaWx6
ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHhjcnVuIHRvIGZpbmQgZ3Bl
cmYgcGF0aCBvbiBwbGF0Zm9ybXMgdGhhdCB1c2UgWGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hh
bmdlTG9nCmluZGV4IDk4YzY0ZmRjYzI1NDRkMTIzZmQ5MTQwYzJlN2I4YmI1YjM5NDJhOWYuLjg4
NjM0MmUwZDk3NzUyZjRhOTNlZWFlNzlmMTI3MTVlZWQ1OGNmODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU4IEBACiAyMDEyLTA1LTI3ICBBcnZpZCBOaWxzc29u
ICA8YW5pbHNzb25AcmltLmNvbT4KIAorICAgICAgICBbQmxhY2tCZXJyeV0gVXBkYXRlIFdlYlBh
Z2VDb21wb3NpdG9yOjpyZW5kZXIoKSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg3NTY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIG5ldyBBUEkgYWxsb3dzIHRoZSBlbWJlZGRlciB0byBzcGVj
aWZ5IHRoZSByb290IHRyYW5zZm9ybSBhbmQgbWFueQorICAgICAgICBPcGVuR0wgcmVsYXRlZCBw
YXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2hlbiByZW5kZXJpbmcgdGhlIHdlYiBwYWdlLgorCisgICAg
ICAgIFRvIGhvbm9yIHRoZSB0cmFuc2Zvcm0sIHdlIGhhdmUgdG8gaW1wbGVtZW50IGEgd2F5IHRv
IGNvbXBvc2l0ZSB0aGUKKyAgICAgICAgQmFja2luZ1N0b3JlIG91dHB1dCB1c2luZyBhIGdlbmVy
aWMgdHJhbnNmb3JtLiBUaGlzIG1ldGhvZCwKKyAgICAgICAgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
Y29tcG9zaXRlQ29udGVudHMoKSwgdXNlcyBhIHN0cmF0ZWd5IHRoYXQgZGlmZmVycworICAgICAg
ICBmcm9tIGJsaXRDb250ZW50cygpLCBiZWNhdXNlIHRoYXQgb25lIGlzIG9wdGltaXplZCBmb3Ig
c29mdHdhcmUKKyAgICAgICAgYmxpdHRpbmcsIHdoaWxlIHRoaXMgb25lIGlzIG9wdGltaXplZCBm
b3IgR1BVIHJlbmRlcmluZy4gU3BlY2lmaWNhbGx5LAorICAgICAgICBpbnN0ZWFkIG9mIGRyYXdp
bmcgdGhlIGNoZWNrZXJib2FyZCBmaXJzdCwgYW5kIHRoZSByZW5kZXJlZCBzdWJyZWdpb25zCisg
ICAgICAgIG9mIHRoZSB0aWxlIGFmdGVyd2FyZCwgd2UgZHJhdyB0aGUgd2hvbGUgdGlsZSBpbiBv
bmUgY2FsbCwgYW5kIHRoZW4KKyAgICAgICAgZHJhdyBjaGVja2VyZWQgcmVnaW9ucyBvbiB0b3As
IGlmIGFueS4KKworICAgICAgICBSZW1vdmVkIHRoZSBibGl0IGdlbmVyYXRpb24gY29uZHZhciBm
cm9tIHRoZSBuZXcgY29kZSBwYXRocyBmb3IgZHJhd2luZworICAgICAgICBCYWNraW5nU3RvcmUg
b3V0cHV0IHVzaW5nIGEgdHJhbnNmb3JtLCBzaW5jZSB0aGUgY29uZHZhciBpcyBpbmVmZmVjdGl2
ZQorICAgICAgICBpbiBwcmV2ZW50aW5nIGZsaWNrZXIgd2hlbiB3ZSdyZSBub3QgaW4gY2hhcmdl
IG9mIHN3YXBwaW5nIHRoZSB3aW5kb3cuCisgICAgICAgIEluc3RlYWQsIGFub3RoZXIgc3luY2hy
b25pemF0aW9uIHNvbHV0aW9uIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gdGhlCisgICAgICAgIGZ1
dHVyZS4KKworICAgICAgICBSZXZpZXdlZCBpbnRlcm5hbGx5IGJ5IEZpbGlwIFNwYWNlay4KKyAg
ICAgICAgU29tZSBwYXJ0cyByZXZpZXdlZCBpbnRlcm5hbGx5IGJ5IEphY2t5IEppYW5nIGFuZCBv
dGhlcnMgYnkKKyAgICAgICAgTWlrZSBMYXR0YW56aW8uCisKKyAgICAgICAgUFIgIzE1MTg4Nywg
IzE1NDMzNAorCisgICAgICAgICogQXBpL0JhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OnJlbmRlcik6CisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRDb250ZW50cyk6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3Rv
cmVQcml2YXRlOjpjb21wb3NpdGVDb250ZW50cyk6CisgICAgICAgICogQXBpL0JhY2tpbmdTdG9y
ZV9wLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEJhY2tpbmdTdG9yZVByaXZhdGUp
OgorICAgICAgICAqIEFwaS9XZWJQYWdlQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChCbGFja0Jl
cnJ5OjpXZWJLaXQ6OldlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6c2V0Q29udGV4dCk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6c2V0Um9v
dExheWVyKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZUNvbXBvc2l0b3JQ
cml2YXRlOjpwcmVwYXJlRnJhbWUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQ
YWdlQ29tcG9zaXRvclByaXZhdGU6OnJlbmRlcik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6ZHJhd0xheWVycyk6CisgICAgICAgIChCbGFj
a0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VDb21wb3NpdG9yOjpwcmVwYXJlRnJhbWUpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlQ29tcG9zaXRvcjo6cmVuZGVyKToKKyAgICAg
ICAgKiBBcGkvV2ViUGFnZUNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiBBcGkvV2ViUGFnZUNvbXBv
c2l0b3JDbGllbnQuaDoKKyAgICAgICAgKiBBcGkvV2ViUGFnZUNvbXBvc2l0b3JfcC5oOgorICAg
ICAgICAoV2ViUGFnZUNvbXBvc2l0b3JQcml2YXRlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNwcDoKKworMjAxMi0wNS0yNyAgQXJ2aWQgTmlsc3Nv
biAgPGFuaWxzc29uQHJpbS5jb20+CisKICAgICAgICAgW0JsYWNrQmVycnldIFBsdW1iIHRocm91
Z2ggdGhlIHJldHVybiB2YWx1ZSBvZiBtYWtlQ3VycmVudCB0byBjYWxsZXIKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3NTY0CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTGF5ZXJDb21wb3Np
dGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2Jl
cnJ5L0xheWVyQ29tcG9zaXRpbmdUaHJlYWQuY3BwCmluZGV4IDdlZjg5NmQxYzM3Njc5OWUwZjlk
NDdjNzYyOTg5YmViYmI1MzM2NTkuLmY4NzlkMDFkMDRiYzg1NTM2MmJkY2MzZjQ5ODE4ZmFjMjYw
OTFmZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvTGF5ZXJDb21wb3NpdGluZ1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllckNvbXBvc2l0aW5nVGhyZWFkLmNwcApAQCAt
MTg3LDcgKzE4Nyw3IEBAIEZsb2F0UXVhZCBMYXllckNvbXBvc2l0aW5nVGhyZWFkOjpnZXRUcmFu
c2Zvcm1lZEhvbGVQdW5jaFJlY3QoKSBjb25zdAogCiB2b2lkIExheWVyQ29tcG9zaXRpbmdUaHJl
YWQ6OmRyYXdUZXh0dXJlcyhpbnQgcG9zaXRpb25Mb2NhdGlvbiwgaW50IHRleENvb3JkTG9jYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpCiB7Ci0gICAgZmxvYXQgdGV4Y29vcmRz
WzQgKiAyXSA9IHsgMCwgMCwgIDAsIDEsICAxLCAxLCAgMSwgMCB9OworICAgIHN0YXRpYyBmbG9h
dCB0ZXhjb29yZHNbNCAqIDJdID0geyAwLCAwLCAgMCwgMSwgIDEsIDEsICAxLCAwIH07CiAKICAg
ICBpZiAobV9wbHVnaW5WaWV3KSB7CiAgICAgICAgIGlmIChtX2lzVmlzaWJsZSkgewpAQCAtMjc5
LDcgKzI3OSw3IEBAIHZvaWQgTGF5ZXJDb21wb3NpdGluZ1RocmVhZDo6ZHJhd1N1cmZhY2UoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2ZvCiAgICAgICAgIEZsb2F0UXVhZCBz
dXJmYWNlUXVhZCA9IGdldFRyYW5zZm9ybWVkUmVjdChtX2JvdW5kcywgSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBtX2JvdW5kcyksIGRyYXdUcmFuc2Zvcm0pOwogICAgICAgICBnbFZlcnRleEF0
dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAm
c3VyZmFjZVF1YWQpOwogCi0gICAgICAgIGZsb2F0IHRleGNvb3Jkc1s0ICogMl0gPSB7IDAsIDAs
ICAwLCAxLCAgMSwgMSwgIDEsIDAgfTsKKyAgICAgICAgc3RhdGljIGZsb2F0IHRleGNvb3Jkc1s0
ICogMl0gPSB7IDAsIDAsICAwLCAxLCAgMSwgMSwgIDEsIDAgfTsKICAgICAgICAgZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKHRleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwg
dGV4Y29vcmRzKTsKICAgICAgICAgZ2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTGF5ZXJSZW5kZXJlci5jcHAKaW5kZXggMzIzNWE5MmI4YzRkYWFiZjg4
MjE0ODYxZDlhYjM5NWQ1NjI0YjNkNC4uNGYwYWY4ZWFmZDZmMTIwNDc1MDhkYzQ4NzIwOWU3ODdm
ZjRhM2UwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9MYXllclJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuY3BwCkBAIC00MCw4ICs0MCw5IEBACiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJUZXh0dXJlQ2FjaGVDb21wb3Np
dGluZ1RocmVhZC5oIgogCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtR3JhcGhpY3MuaD4K
ICNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKyNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiAjZGVmaW5lIEVOQUJMRV9TQ0lTU09SIDEKQEAgLTQ5LDcgKzUwLDcgQEAKICNkZWZpbmUg
REVCVUdfU0hBREVSX0NPTVBJTEFUSU9OIDAKICNkZWZpbmUgREVCVUdfRElSVFlfTEFZRVJTIDAg
Ly8gU2hvdyBkaXJ0eSBsYXllcnMgYXMgcmVkLgogI2RlZmluZSBERUJVR19MQVlFUl9BTklNQVRJ
T05TIDAgLy8gU2hvdyBydW5uaW5nIGFuaW1hdGlvbnMgYXMgZ3JlZW4uCi0jZGVmaW5lIERFQlVH
X1ZJREVPX0NMSVBQSU5HIDAKKyNkZWZpbmUgREVCVUdfQ0xJUFBJTkcgMAogCiB1c2luZyBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyQ29udGV4dDsKIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CkBAIC0xMTYsNyArMTE3LDcgQEAgc3RhdGljIEdMdWludCBsb2FkU2hhZGVyUHJvZ3Jh
bShjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGNvbnN0IGNoYXIqIGZyYWcKICAgICBy
ZXR1cm4gcHJvZ3JhbU9iamVjdDsKIH0KIAotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9y
dGhvTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRv
cCwgZmxvYXQgbmVhclosIGZsb2F0IGZhclopCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBMYXllclJl
bmRlcmVyOjpvcnRob01hdHJpeChmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9t
LCBmbG9hdCB0b3AsIGZsb2F0IG5lYXJaLCBmbG9hdCBmYXJaKQogewogICAgIGZsb2F0IGRlbHRh
WCA9IHJpZ2h0IC0gbGVmdDsKICAgICBmbG9hdCBkZWx0YVkgPSB0b3AgLSBib3R0b207CkBAIC0x
NTIsNiArMTUzLDcgQEAgTGF5ZXJSZW5kZXJlcjo6TGF5ZXJSZW5kZXJlcihHTEVTMkNvbnRleHQq
IGNvbnRleHQpCiAgICAgLCBtX2NoZWNrZXJQcm9ncmFtT2JqZWN0KDApCiAgICAgLCBtX3Bvc2l0
aW9uTG9jYXRpb24oMCkKICAgICAsIG1fdGV4Q29vcmRMb2NhdGlvbigxKQorICAgICwgbV9hbmlt
YXRpb25UaW1lKC1udW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAgICwgbV9m
Ym8oMCkKICAgICAsIG1fY3VycmVudExheWVyUmVuZGVyZXJTdXJmYWNlKDApCiAgICAgLCBtX2Ns
ZWFyU3VyZmFjZU9uRHJhd0xheWVycyh0cnVlKQpAQCAtMjA3LDY3ICsyMDksNTQgQEAgc3RhdGlj
IGlubGluZSBib29sIGNvbXBhcmVMYXllclooY29uc3QgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCog
YSwgY29uc3QgTGF5ZXJDb20KICAgICByZXR1cm4gdHJhbnNmb3JtQS5tNDMoKSA8IHRyYW5zZm9y
bUIubTQzKCk7CiB9CiAKLS8vIFJlLWNvbXBvc2l0ZXMgYWxsIHN1YmxheWVycy4KLXZvaWQgTGF5
ZXJSZW5kZXJlcjo6ZHJhd0xheWVycyhjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBJbnRSZWN0JiBsYXlvdXRSZWN0LCBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0
IEludFJlY3QmIGRzdFJlY3QpCit2b2lkIExheWVyUmVuZGVyZXI6OnByZXBhcmVGcmFtZShkb3Vi
bGUgYW5pbWF0aW9uVGltZSwgTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogcm9vdExheWVyKQogewot
ICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwotICAgIGlmICghbV9oYXJkd2FyZUNv
bXBvc2l0aW5nKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGFuaW1hdGlvblRpbWUgIT0gbV9h
bmltYXRpb25UaW1lKSB7CisgICAgICAgIG1fYW5pbWF0aW9uVGltZSA9IGFuaW1hdGlvblRpbWU7
CiAKLSAgICBib29sIHdhc0VtcHR5ID0gbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5pc0VtcHR5KCk7
Ci0gICAgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cyA9IExheWVyUmVuZGVyaW5nUmVzdWx0cygpOwot
ICAgIG1fbGFzdFJlbmRlcmluZ1Jlc3VsdHMud2FzRW1wdHkgPSB3YXNFbXB0eTsKKyAgICAgICAg
Ly8gQWhhLCBuZXcgZnJhbWUhIFJlc2V0IHJlbmRlcmluZyByZXN1bHRzLgorICAgICAgICBib29s
IHdhc0VtcHR5ID0gbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5pc0VtcHR5KCk7CisgICAgICAgIG1f
bGFzdFJlbmRlcmluZ1Jlc3VsdHMgPSBMYXllclJlbmRlcmluZ1Jlc3VsdHMoKTsKKyAgICAgICAg
bV9sYXN0UmVuZGVyaW5nUmVzdWx0cy53YXNFbXB0eSA9IHdhc0VtcHR5OworICAgIH0KIAotICAg
IGlmICghbV9yb290TGF5ZXIpCisgICAgaWYgKCFyb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsK
IAorICAgIGJvb2wgaXNDb250ZXh0Q3VycmVudCA9IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IHByZXBhcmVGcmFtZVJlY3Vyc2l2ZShyb290TGF5ZXIsIGFuaW1hdGlvblRpbWUsIGlzQ29udGV4
dEN1cnJlbnQpOworfQorCit2b2lkIExheWVyUmVuZGVyZXI6OnNldFZpZXdwb3J0KGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXlvdXRSZWN0LCBjb25zdCBJbnRTaXpl
JiBjb250ZW50c1NpemUpCit7CiAgICAgLy8gVGhlc2UgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBj
YWxjdWxhdGUgcG9zaXRpb24gb2YgZml4ZWQgcG9zaXRpb24gZWxlbWVudHMKICAgICBtX3Zpc2li
bGVSZWN0ID0gdmlzaWJsZVJlY3Q7CiAgICAgbV9sYXlvdXRSZWN0ID0gbGF5b3V0UmVjdDsKICAg
ICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKIAotICAgIC8vIFdlYktpdCB1c2VzIHJv
dyB2ZWN0b3JzIHdoaWNoIGFyZSBtdWx0aXBsaWVkIGJ5IHRoZSBtYXRyaXggb24gdGhlIGxlZnQg
KGkuZS4gdipNKQotICAgIC8vIFRyYW5zZm9ybWF0aW9ucyBhcmUgY29tcG9zZWQgb24gdGhlIGxl
ZnQgc28gdGhhdCBNMS54Zm9ybShNMikgbWVhbnMgTTIqTTEKLSAgICAvLyBXZSB0aGVyZWZvcmUg
c3RhcnQgd2l0aCBvdXIgKG90aG9nb25hbCkgcHJvamVjdGlvbiBtYXRyaXgsIHdoaWNoIHdpbGwg
YmUgYXBwbGllZAotICAgIC8vIGFzIHRoZSBsYXN0IHRyYW5zZm9ybWF0aW9uLgotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IG9ydGhvTWF0cml4KDAsIHZpc2libGVSZWN0LndpZHRo
KCksIHZpc2libGVSZWN0LmhlaWdodCgpLCAwLCAtMTAwMCwgMTAwMCk7Ci0gICAgbWF0cml4LnRy
YW5zbGF0ZTNkKC12aXNpYmxlUmVjdC54KCksIC12aXNpYmxlUmVjdC55KCksIDApOwotCi0gICAg
Ly8gT3BlbkdMIHdpbmRvdyBjb29yZGluYXRlcyBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQg
Y29ybmVyIG9mIHRoZSBzdXJmYWNlIHdoaWxlCi0gICAgLy8gV2ViS2l0IHVzZXMgdXBwZXIgbGVm
dCBhcyB0aGUgb3JpZ2luIG9mIHRoZSB3aW5kb3cgY29vcmRpbmF0ZSBzeXN0ZW0uIFRoZSBwYXNz
ZWQgaW4gJ2RzdFJlY3QnCi0gICAgLy8gaXMgaW4gV2ViS2l0IHdpbmRvdyBjb29yZGluYXRlIHN5
c3RlbS4gSGVyZSB3ZSBzZXR1cCB0aGUgdmlld3BvcnQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFs
dWUKLSAgICAvLyBpbiBPcGVuR0wgd2luZG93IGNvb3JkaW5hdGVzLgotICAgIGludCB2aWV3cG9y
dFkgPSBzdGQ6Om1heCgwLCBtX2NvbnRleHQtPnN1cmZhY2VTaXplKCkuaGVpZ2h0KCkgLSBkc3RS
ZWN0Lm1heFkoKSk7Ci0gICAgbV92aWV3cG9ydCA9IEludFJlY3QoZHN0UmVjdC54KCksIHZpZXdw
b3J0WSwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKLQotICAgIGRvdWJsZSBh
bmltYXRpb25UaW1lID0gY3VycmVudFRpbWUoKTsKLQotI2lmIERFQlVHX1ZJREVPX0NMSVBQSU5H
Ci0gICAgLy8gSW52b2tpbmcgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKCkgd2hpY2ggd2lsbCBjYWxs
IExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnNldERyYXdUcmFuc2Zvcm0oKS4KLSAgICBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dMZXZlbEluZm8sICJM
YXllclJlbmRlcmVyOjpkcmF3TGF5ZXJzKCkgdmlzaWJsZT0oeD0lLjJmLHk9JS4yZix3aWR0aD0l
LjJmLGhlaWdodD0lLjJmKSwgbGF5b3V0PSh4PSVkLHk9JWQsd2lkdGg9JWQsaGVpZ2h0PSVkKSwg
Y29udGVudHM9KCVkeCVkKSwgZHN0PSh4PSVkLHk9JWQsd2lkdGg9JWQsaGVpZ2h0PSVkKS4iLAot
ICAgICAgICB2aXNpYmxlUmVjdC54KCksIHZpc2libGVSZWN0LnkoKSwgdmlzaWJsZVJlY3Qud2lk
dGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCksCi0gICAgICAgIGxheW91dFJlY3QueCgpLCBsYXlv
dXRSZWN0LnkoKSwgbGF5b3V0UmVjdC53aWR0aCgpLCBsYXlvdXRSZWN0LmhlaWdodCgpLAotICAg
ICAgICBjb250ZW50c1NpemUud2lkdGgoKSwgY29udGVudHNTaXplLmhlaWdodCgpLAotICAgICAg
ICBkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWln
aHQoKSk7CisgICAgbV92aWV3cG9ydCA9IHRhcmdldFJlY3Q7CisgICAgbV9zY2lzc29yUmVjdCA9
IGNsaXBSZWN0OworCisgICAgLy8gVGhlIGNsaXBSZWN0IHBhcmFtZXRlciB1c2VzIHJlbmRlciB0
YXJnZXQgY29vcmRpbmF0ZXMsIG1hcCB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcwor
ICAgIG1fY2xpcFJlY3QgPSBjbGlwUmVjdDsKKyAgICBtX2NsaXBSZWN0LmludGVyc2VjdCh0YXJn
ZXRSZWN0KTsKKyAgICBtX2NsaXBSZWN0ID0gRmxvYXRSZWN0KC0xICsgMiAqIChtX2NsaXBSZWN0
LngoKSAtIHRhcmdldFJlY3QueCgpKSAvIHRhcmdldFJlY3Qud2lkdGgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xICsgMiAqIChtX2NsaXBSZWN0LnkoKSAtIHRhcmdldFJlY3QueSgp
KSAvIHRhcmdldFJlY3QuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAyICog
bV9jbGlwUmVjdC53aWR0aCgpIC8gdGFyZ2V0UmVjdC53aWR0aCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMiAqIG1fY2xpcFJlY3QuaGVpZ2h0KCkgLyB0YXJnZXRSZWN0LmhlaWdodCgp
KTsKKworI2lmIERFQlVHX0NMSVBQSU5HCisgICAgcHJpbnRmKCJMYXllclJlbmRlcmVyOjpzZXRW
aWV3cG9ydCgpIG1fdmlzaWJsZVJlY3Q9KCUuMmYsJS4yZiAlLjJmeCUuMmYpLCBtX2xheW91dFJl
Y3Q9KCVkLCVkICVkeCVkKSwgbV9jb250ZW50c1NpemU9KCVkeCVkKSwgbV92aWV3cG9ydD0oJWQs
JWQgJWR4JWQpLCBtX3NjaXNzb3JSZWN0PSglZCwlZCAlZHglZCksIG1fY2xpcFJlY3Q9KCUuMmYs
JS4yZiAlLjJmeCUuMmYpXG4iLAorICAgICAgICBtX3Zpc2libGVSZWN0LngoKSwgbV92aXNpYmxl
UmVjdC55KCksIG1fdmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aXNpYmxlUmVjdC5oZWlnaHQoKSwK
KyAgICAgICAgbV9sYXlvdXRSZWN0LngoKSwgbV9sYXlvdXRSZWN0LnkoKSwgbV9sYXlvdXRSZWN0
LndpZHRoKCksIG1fbGF5b3V0UmVjdC5oZWlnaHQoKSwKKyAgICAgICAgbV9jb250ZW50c1NpemUu
d2lkdGgoKSwgbV9jb250ZW50c1NpemUuaGVpZ2h0KCksCisgICAgICAgIG1fdmlld3BvcnQueCgp
LCBtX3ZpZXdwb3J0LnkoKSwgbV92aWV3cG9ydC53aWR0aCgpLCBtX3ZpZXdwb3J0LmhlaWdodCgp
LAorICAgICAgICBtX3NjaXNzb3JSZWN0LngoKSwgbV9zY2lzc29yUmVjdC55KCksIG1fc2Npc3Nv
clJlY3Qud2lkdGgoKSwgbV9zY2lzc29yUmVjdC5oZWlnaHQoKSwKKyAgICAgICAgbV9jbGlwUmVj
dC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0LndpZHRoKCksIG1fY2xpcFJlY3QuaGVp
Z2h0KCkpOworICAgIGZmbHVzaChzdGRvdXQpOwogI2VuZGlmCiAKLSAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4gc3VyZmFjZUxheWVyczsKLSAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4mIHN1YmxheWVycyA9IG1fcm9vdExh
eWVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVy
cy5zaXplKCk7IGkrKykgewotICAgICAgICBmbG9hdCBvcGFjaXR5ID0gMTsKLSAgICAgICAgRmxv
YXRSZWN0IGNsaXBSZWN0KC0xLCAtMSwgMiwgMik7Ci0gICAgICAgIHVwZGF0ZUxheWVyc1JlY3Vy
c2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hdHJpeCwgc3VyZmFjZUxheWVycywgb3BhY2l0eSwg
Y2xpcFJlY3QsIGFuaW1hdGlvblRpbWUpOwotICAgIH0KLQotICAgIC8vIERlY29tcG9zZSB0aGUg
ZGlydHkgcmVjdCBpbnRvIGEgc2V0IG9mIG5vbi1vdmVybGFwaW5nIHJlY3RhbmdsZXMKLSAgICAv
LyAodGhleSBuZWVkIHRvIG5vdCBvdmVybGFwIHNvIHRoYXQgdGhlIGJsZW5kaW5nIGNvZGUgZG9l
c24ndCBkcmF3IGFueSByZWdpb24gdHdpY2UpLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTGF5
ZXJSZW5kZXJpbmdSZXN1bHRzOjpOdW1iZXJPZkRpcnR5UmVjdHM7ICsraSkgewotICAgICAgICBC
bGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiByZWdpb24oQmxhY2tCZXJyeTo6UGxh
dGZvcm06OkludFJlY3QobV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5kaXJ0eVJlY3QoaSkpKTsKLSAg
ICAgICAgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5kaXJ0eVJlZ2lvbiA9IEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpJbnRSZWN0UmVnaW9uOjp1bmlvblJlZ2lvbnMobV9sYXN0UmVuZGVyaW5nUmVzdWx0
cy5kaXJ0eVJlZ2lvbiwgcmVnaW9uKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSB3b24ndCBkcmF3
IGFueXRoaW5nLCBkb24ndCB0b3VjaCB0aGUgT3BlbkdMIEFQSXMuCi0gICAgaWYgKG1fbGFzdFJl
bmRlcmluZ1Jlc3VsdHMuaXNFbXB0eSgpICYmIHdhc0VtcHR5KQorICAgIGlmICghbV9oYXJkd2Fy
ZUNvbXBvc2l0aW5nKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBPa2F5LCB3ZSdyZSBnb2lu
ZyB0byBkbyBzb21lIGRyYXdpbmcuCkBAIC0yOTMsNDMgKzI4Miw4MCBAQCB2b2lkIExheWVyUmVu
ZGVyZXI6OmRyYXdMYXllcnMoY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50
UmVjdCYgbGF5bwogICAgIC8vIFRoZSBsYXllciBxdWFkcyBhcmUgZHJhd24gaW4gY2xvY2std2lz
ZSBvcmRlciBzbyB0aGUgZnJvbnQgZmFjZSBpcyBDQ1cuCiAgICAgZ2xGcm9udEZhY2UoR0xfQ0NX
KTsKIAotICAgIC8vIFRoZSBzaGFkZXIgdXNlZCB0byByZW5kZXIgbGF5ZXJzIHJldHVybnMgcHJl
LW11bHRpcGxpZWQgYWxwaGEgY29sb3JzCi0gICAgLy8gc28gd2UgbmVlZCB0byBzZW5kIHRoZSBi
bGVuZGluZyBtb2RlIGFwcHJvcHJpYXRlbHkuCi0gICAgZ2xFbmFibGUoR0xfQkxFTkQpOwotICAg
IGdsQmxlbmRGdW5jKEdMX09ORSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7Ci0KICAgICAvLyBV
cGRhdGUgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjaGVja2VyYm9hcmQgZHJhd2luZy4KICAgICBn
bFVzZVByb2dyYW0obV9jaGVja2VyUHJvZ3JhbU9iamVjdCk7CiAgICAgZmxvYXQgYml0bWFwU2Nh
bGUgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9sYXlvdXRSZWN0LndpZHRoKCkpIC8gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG1fdmlzaWJsZVJlY3Qud2lkdGgoKSk7CiAgICAgZ2xVbmlmb3JtMWYobV9jaGVj
a2VyU2NhbGVMb2NhdGlvbiwgYml0bWFwU2NhbGUpOwotICAgIGZsb2F0IHNjYWxlID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGRzdFJlY3Qud2lkdGgoKSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obV92aXNp
YmxlUmVjdC53aWR0aCgpKTsKKyAgICBmbG9hdCBzY2FsZSA9IHN0YXRpY19jYXN0PGZsb2F0Piht
X3ZpZXdwb3J0LndpZHRoKCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmlzaWJsZVJlY3Qud2lk
dGgoKSk7CiAgICAgZ2xVbmlmb3JtMmYobV9jaGVja2VyT3JpZ2luTG9jYXRpb24sIG1fdmlzaWJs
ZVJlY3QueCgpKnNjYWxlLCBtX3Zpc2libGVSZWN0LnkoKSpzY2FsZSk7CiAgICAgZ2xVbmlmb3Jt
MWYobV9jaGVja2VyU3VyZmFjZUhlaWdodExvY2F0aW9uLCBtX2NvbnRleHQtPnN1cmZhY2VTaXpl
KCkuaGVpZ2h0KCkpOwogCiAgICAgY2hlY2tHTEVycm9yKCk7CiAKLSAgICAvLyBJZiBzb21lIGxh
eWVycyBzaG91bGQgYmUgZHJhd2VkIG9uIHRlbXBvcmFyeSBzdXJmYWNlcywgd2Ugc2hvdWxkIGRv
IGl0IGZpcnN0LgotICAgIGRyYXdMYXllcnNPblN1cmZhY2VzKHN1cmZhY2VMYXllcnMpOworICAg
IGdsVmlld3BvcnQobV92aWV3cG9ydC54KCksIG1fdmlld3BvcnQueSgpLCBtX3ZpZXdwb3J0Lndp
ZHRoKCksIG1fdmlld3BvcnQuaGVpZ2h0KCkpOwogCiAjaWYgRU5BQkxFX1NDSVNTT1IKLSAgICBt
X3NjaXNzb3JSZWN0ID0gbV92aWV3cG9ydDsKICAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1Qp
OworI2lmIERFQlVHX0NMSVBQSU5HCisgICAgcHJpbnRmKCJMYXllclJlbmRlcmVyOjpjb21wb3Np
dGVMYXllcnMoKTogY2xpcHBpbmcgdG8gKCVkLCVkICVkeCVkKVxuIiwgbV9zY2lzc29yUmVjdC54
KCksIG1fc2Npc3NvclJlY3QueSgpLCBtX3NjaXNzb3JSZWN0LndpZHRoKCksIG1fc2Npc3NvclJl
Y3QuaGVpZ2h0KCkpOworICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmCiAgICAgZ2xTY2lzc29y
KG1fc2Npc3NvclJlY3QueCgpLCBtX3NjaXNzb3JSZWN0LnkoKSwgbV9zY2lzc29yUmVjdC53aWR0
aCgpLCBtX3NjaXNzb3JSZWN0LmhlaWdodCgpKTsKICNlbmRpZgogCiAgICAgZ2xDbGVhclN0ZW5j
aWwoMCk7CiAgICAgZ2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwogICAgIEdMZW51bSBidWZmZXJz
VG9DbGVhciA9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICBpZiAobV9jbGVhclN1cmZhY2VP
bkRyYXdMYXllcnMpIHsKKyAgICBpZiAobV9jbGVhclN1cmZhY2VPbkRyYXdMYXllcnMpCiAgICAg
ICAgIGJ1ZmZlcnNUb0NsZWFyIHw9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgfQogICAgIGds
Q2xlYXIoYnVmZmVyc1RvQ2xlYXIpOworfQorCit2b2lkIExheWVyUmVuZGVyZXI6OmNvbXBvc2l0
ZUxheWVycyhjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBMYXllckNvbXBvc2l0
aW5nVGhyZWFkKiByb290TGF5ZXIpCit7CisgICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGlu
Zyk7CisgICAgaWYgKCFtX2hhcmR3YXJlQ29tcG9zaXRpbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UmVmUHRy
PExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4gc3VyZmFjZUxheWVyczsKKyAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4mIHN1YmxheWVycyA9IHJvb3RMYXll
ci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgZmxvYXQgb3BhY2l0eSA9IDE7CisgICAgICAgIEZsb2F0
UmVjdCBjbGlwUmVjdChtX2NsaXBSZWN0KTsKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZl
KHN1YmxheWVyc1tpXS5nZXQoKSwgbWF0cml4LCBzdXJmYWNlTGF5ZXJzLCBvcGFjaXR5LCBjbGlw
UmVjdCk7CisgICAgfQorCisgICAgLy8gRGVjb21wb3NlIHRoZSBkaXJ0eSByZWN0IGludG8gYSBz
ZXQgb2Ygbm9uLW92ZXJsYXBpbmcgcmVjdGFuZ2xlcworICAgIC8vICh0aGV5IG5lZWQgdG8gbm90
IG92ZXJsYXAgc28gdGhhdCB0aGUgYmxlbmRpbmcgY29kZSBkb2Vzbid0IGRyYXcgYW55IHJlZ2lv
biB0d2ljZSkuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBMYXllclJlbmRlcmluZ1Jlc3VsdHM6
Ok51bWJlck9mRGlydHlSZWN0czsgKytpKSB7CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRmb3Jt
OjpJbnRSZWN0UmVnaW9uIHJlZ2lvbihCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdChtX2xh
c3RSZW5kZXJpbmdSZXN1bHRzLmRpcnR5UmVjdChpKSkpOworICAgICAgICBtX2xhc3RSZW5kZXJp
bmdSZXN1bHRzLmRpcnR5UmVnaW9uID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3RSZWdp
b246OnVuaW9uUmVnaW9ucyhtX2xhc3RSZW5kZXJpbmdSZXN1bHRzLmRpcnR5UmVnaW9uLCByZWdp
b24pOworICAgIH0KKworICAgIC8vIElmIHdlIHdvbid0IGRyYXcgYW55dGhpbmcsIGRvbid0IHRv
dWNoIHRoZSBPcGVuR0wgQVBJcy4KKyAgICBpZiAobV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5pc0Vt
cHR5KCkgJiYgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy53YXNFbXB0eSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gT2theSwgd2UncmUgZ29pbmcgdG8gZG8gc29tZSBkcmF3aW5nLgorICAgIGlm
ICghbWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBz
aGFkZXIgdXNlZCB0byByZW5kZXIgbGF5ZXJzIHJldHVybnMgcHJlLW11bHRpcGxpZWQgYWxwaGEg
Y29sb3JzCisgICAgLy8gc28gd2UgbmVlZCB0byBzZW5kIHRoZSBibGVuZGluZyBtb2RlIGFwcHJv
cHJpYXRlbHkuCisgICAgZ2xFbmFibGUoR0xfQkxFTkQpOworICAgIGdsQmxlbmRGdW5jKEdMX09O
RSwgR0xfT05FX01JTlVTX1NSQ19BTFBIQSk7CisKKyAgICAvLyBJZiBzb21lIGxheWVycyBzaG91
bGQgYmUgZHJhd2VkIG9uIHRlbXBvcmFyeSBzdXJmYWNlcywgd2Ugc2hvdWxkIGRvIGl0IGZpcnN0
LgorICAgIGRyYXdMYXllcnNPblN1cmZhY2VzKHN1cmZhY2VMYXllcnMpOwogCiAgICAgLy8gRG9u
J3QgcmVuZGVyIHRoZSByb290IGxheWVyLCB0aGUgQmxhY2tCZXJyeSBwb3J0IHVzZXMgdGhlIEJh
Y2tpbmdTdG9yZSB0byBkcmF3IHRoZQogICAgIC8vIHJvb3QgbGF5ZXIuCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaW50IGN1cnJl
bnRTdGVuY2lsVmFsdWUgPSAwOwotICAgICAgICBGbG9hdFJlY3QgY2xpcFJlY3QoLTEsIC0xLCAy
LCAyKTsKKyAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KG1fY2xpcFJlY3QpOwogICAgICAgICBj
b21wb3NpdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpLCBjdXJyZW50U3RlbmNp
bFZhbHVlLCBjbGlwUmVjdCk7CiAgICAgfQogCkBAIC0zNTEsNiArMzc3LDkgQEAgdm9pZCBMYXll
clJlbmRlcmVyOjpkcmF3TGF5ZXJzKGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0
IEludFJlY3QmIGxheW8KICAgICAvLyBkcml2ZXIgYnkgdW5iaW5kaW5nIGVhcmx5ICh3aGVuIHRo
ZSBwaXhtYXAgaXMgaG9wZWZ1bGx5IHN0aWxsIGFyb3VuZCkuCiAgICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCAwKTsKIAorICAgIC8vIFR1cm4gb2ZmIGJsZW5kaW5nIGFnYWluCisgICAg
Z2xEaXNhYmxlKEdMX0JMRU5EKTsKKwogICAgIExheWVyU2V0OjppdGVyYXRvciBpdGVyID0gbV9s
YXllcnNMb2NraW5nVGV4dHVyZVJlc291cmNlcy5iZWdpbigpOwogICAgIGZvciAoOyBpdGVyICE9
IG1fbGF5ZXJzTG9ja2luZ1RleHR1cmVSZXNvdXJjZXMuZW5kKCk7ICsraXRlcikKICAgICAgICAg
KCppdGVyKS0+cmVsZWFzZVRleHR1cmVSZXNvdXJjZXMoKTsKQEAgLTM1OSwxMiArMzg4LDY1IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlcjo6ZHJhd0xheWVycyhjb25zdCBGbG9hdFJlY3QmIHZpc2libGVS
ZWN0LCBjb25zdCBJbnRSZWN0JiBsYXlvCiAKICAgICBpZiAobV9uZWVkc0NvbW1pdCkgewogICAg
ICAgICBtX25lZWRzQ29tbWl0ID0gZmFsc2U7Ci0gICAgICAgIG1fcm9vdExheWVyLT5zY2hlZHVs
ZUNvbW1pdCgpOworICAgICAgICByb290TGF5ZXItPnNjaGVkdWxlQ29tbWl0KCk7CiAgICAgfQog
CiAgICAgdGV4dHVyZUNhY2hlQ29tcG9zaXRpbmdUaHJlYWQoKS0+Y29sbGVjdEdhcmJhZ2UoKTsK
IH0KIAorc3RhdGljIGZsb2F0IHRleGNvb3Jkc1s0ICogMl0gPSB7IDAsIDAsICAwLCAxLCAgMSwg
MSwgIDEsIDAgfTsKKwordm9pZCBMYXllclJlbmRlcmVyOjpjb21wb3NpdGVCdWZmZXIoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBjb250ZW50
cywgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNzOjpCdWZmZXIqIGJ1ZmZlciwgZmxvYXQg
b3BhY2l0eSkKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgRmxv
YXRRdWFkIHZlcnRpY2VzKHRyYW5zZm9ybS5tYXBQb2ludChjb250ZW50cy5taW5YTWluWUNvcm5l
cigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLm1hcFBvaW50KGNvbnRlbnRz
Lm1pblhNYXhZQ29ybmVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0ubWFw
UG9pbnQoY29udGVudHMubWF4WE1heFlDb3JuZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAg
IHRyYW5zZm9ybS5tYXBQb2ludChjb250ZW50cy5tYXhYTWluWUNvcm5lcigpKSk7CisKKyAgICBp
ZiAoIXZlcnRpY2VzLmJvdW5kaW5nQm94KCkuaW50ZXJzZWN0cyhtX2NsaXBSZWN0KSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG9wYWNpdHkgPCAxLjBmKSB7CisgICAgICAgIGdsRW5hYmxl
KEdMX0JMRU5EKTsKKyAgICAgICAgZ2xCbGVuZEZ1bmMoR0xfT05FLCBHTF9PTkVfTUlOVVNfU1JD
X0FMUEhBKTsKKyAgICB9CisKKyAgICBnbFVzZVByb2dyYW0obV9sYXllclByb2dyYW1PYmplY3Rb
TGF5ZXJEYXRhOjpMYXllclByb2dyYW1TaGFkZXJSR0JBXSk7CisgICAgZ2xVbmlmb3JtMWYobV9h
bHBoYUxvY2F0aW9uW0xheWVyRGF0YTo6TGF5ZXJQcm9ncmFtU2hhZGVyUkdCQV0sIG9wYWNpdHkp
OworCisgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCAmdmVydGljZXMpOworICAgIGdsVmVydGV4QXR0cmliUG9pbnRl
cihtX3RleENvb3JkTG9jYXRpb24sIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgdGV4Y29vcmRz
KTsKKworICAgIGlmIChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6OmxvY2tBbmRCaW5k
QnVmZmVyR0xUZXh0dXJlKGJ1ZmZlciwgR0xfVEVYVFVSRV8yRCkpIHsKKyAgICAgICAgZ2xEcmF3
QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CisgICAgICAgIEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpHcmFwaGljczo6cmVsZWFzZUJ1ZmZlckdMVGV4dHVyZShidWZmZXIpOworICAgIH0KKwor
ICAgIGlmIChvcGFjaXR5IDwgMS4wZikKKyAgICAgICAgZ2xEaXNhYmxlKEdMX0JMRU5EKTsKK30K
Kwordm9pZCBMYXllclJlbmRlcmVyOjpkcmF3Q2hlY2tlcmJvYXJkUGF0dGVybihjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIGNvbnRlbnRzKQor
eworICAgIEZsb2F0UXVhZCB2ZXJ0aWNlcyh0cmFuc2Zvcm0ubWFwUG9pbnQoY29udGVudHMubWlu
WE1pbllDb3JuZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tYXBQb2lu
dChjb250ZW50cy5taW5YTWF4WUNvcm5lcigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgdHJh
bnNmb3JtLm1hcFBvaW50KGNvbnRlbnRzLm1heFhNYXhZQ29ybmVyKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICB0cmFuc2Zvcm0ubWFwUG9pbnQoY29udGVudHMubWF4WE1pbllDb3JuZXIoKSkp
OworCisgICAgaWYgKCF2ZXJ0aWNlcy5ib3VuZGluZ0JveCgpLmludGVyc2VjdHMobV9jbGlwUmVj
dCkpCisgICAgICAgIHJldHVybjsKKworICAgIGdsVXNlUHJvZ3JhbShtX2NoZWNrZXJQcm9ncmFt
T2JqZWN0KTsKKworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24s
IDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgJnZlcnRpY2VzKTsKKyAgICBnbFZlcnRleEF0dHJp
YlBvaW50ZXIobV90ZXhDb29yZExvY2F0aW9uLCAyLCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsIHRl
eGNvb3Jkcyk7CisKKyAgICBnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKK30K
KwogYm9vbCBMYXllclJlbmRlcmVyOjp1c2VTdXJmYWNlKExheWVyUmVuZGVyZXJTdXJmYWNlKiBz
dXJmYWNlKQogewogICAgIGlmIChtX2N1cnJlbnRMYXllclJlbmRlcmVyU3VyZmFjZSA9PSBzdXJm
YWNlKQpAQCAtNDE1LDE1ICs0OTcsMTMgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpkcmF3TGF5ZXJz
T25TdXJmYWNlcyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHIKIAogICAg
IC8vIElmIHRoZXJlIGFyZSBsYXllcnMgZHJhd2VkIG9uIHN1cmZhY2VzLCB3ZSBuZWVkIHRvIHN3
aXRjaCB0byBkZWZhdWx0IGZyYW1lYnVmZmVyLgogICAgIC8vIE90aGVyd2lzZSwgd2UganVzdCBu
ZWVkIHRvIHNldCB2aWV3cG9ydC4KLSAgICBpZiAoc3VyZmFjZUxheWVycy5zaXplKCkpCisgICAg
aWYgKHN1cmZhY2VMYXllcnMuc2l6ZSgpKSB7CiAgICAgICAgIHVzZVN1cmZhY2UoMCk7Ci0gICAg
ZWxzZQotICAgICAgICBnbFZpZXdwb3J0KG1fdmlld3BvcnQueCgpLCBtX3ZpZXdwb3J0LnkoKSwg
bV92aWV3cG9ydC53aWR0aCgpLCBtX3ZpZXdwb3J0LmhlaWdodCgpKTsKLX0KLQotdm9pZCBMYXll
clJlbmRlcmVyOjpzZXRSb290TGF5ZXIoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIpCi17
Ci0gICAgbV9yb290TGF5ZXIgPSBsYXllcjsKKyNpZiBFTkFCTEVfU0NJU1NPUgorICAgICAgICBn
bEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgICAgICBnbFNjaXNzb3IobV9zY2lzc29yUmVj
dC54KCksIG1fc2Npc3NvclJlY3QueSgpLCBtX3NjaXNzb3JSZWN0LndpZHRoKCksIG1fc2Npc3Nv
clJlY3QuaGVpZ2h0KCkpOworI2VuZGlmCisgICAgfQogfQogCiB2b2lkIExheWVyUmVuZGVyZXI6
OmFkZExheWVyKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyKQpAQCAtNTI2LDkgKzYwNiwz
NCBAQCB2b2lkIExheWVyUmVuZGVyZXI6OmRyYXdIb2xlUHVuY2hSZWN0KExheWVyQ29tcG9zaXRp
bmdUaHJlYWQqIGxheWVyKQogICAgIG1fbGFzdFJlbmRlcmluZ1Jlc3VsdHMuYWRkSG9sZVB1bmNo
UmVjdChob2xlV0MpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXI6OnVwZGF0ZUxheWVyc1JlY3Vy
c2l2ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+JiBz
dXJmYWNlTGF5ZXJzLCBmbG9hdCBvcGFjaXR5LCBGbG9hdFJlY3QgY2xpcFJlY3QsIGRvdWJsZSBj
dXJyZW50VGltZSkKK3ZvaWQgTGF5ZXJSZW5kZXJlcjo6cHJlcGFyZUZyYW1lUmVjdXJzaXZlKExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBkb3VibGUgYW5pbWF0aW9uVGltZSwgYm9vbCBp
c0NvbnRleHRDdXJyZW50KQogeworICAgIC8vIFRoaXMgbWlnaHQgY2F1c2UgdGhlIGxheWVyIHRv
IHJlY29tcHV0ZSBzb21lIGF0dHJpYnV0ZXMuCisgICAgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5u
ZWVkc0FuaW1hdGlvbkZyYW1lIHw9IGxheWVyLT51cGRhdGVBbmltYXRpb25zKGFuaW1hdGlvblRp
bWUpOworCisgICAgaWYgKGlzQ29udGV4dEN1cnJlbnQpIHsKKyAgICAgICAgLy8gRXZlbiBub24t
dmlzaWJsZSBsYXllcnMgbmVlZCB0byBwZXJmb3JtIHRoZWlyIHRleHR1cmUgam9icywgb3IgdGhl
eSB3aWxsCisgICAgICAgIC8vIHBpbGUgdXAgYW5kIHdhc3RlIG1lbW9yeS4KKyAgICAgICAgaWYg
KGxheWVyLT5uZWVkc1RleHR1cmUoKSkKKyAgICAgICAgICAgIGxheWVyLT51cGRhdGVUZXh0dXJl
Q29udGVudHNJZk5lZWRlZCgpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpICYmIGxh
eWVyLT5tYXNrTGF5ZXIoKS0+bmVlZHNUZXh0dXJlKCkpCisgICAgICAgICAgICBsYXllci0+bWFz
a0xheWVyKCktPnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7CisgICAgICAgIGlmIChs
YXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgIExheWVyQ29tcG9zaXRpbmdUaHJl
YWQqIHJlcGxpY2EgPSBsYXllci0+cmVwbGljYUxheWVyKCk7CisgICAgICAgICAgICBpZiAocmVw
bGljYS0+bmVlZHNUZXh0dXJlKCkpCisgICAgICAgICAgICAgICAgcmVwbGljYS0+dXBkYXRlVGV4
dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGlmIChyZXBsaWNhLT5tYXNrTGF5
ZXIoKSAmJiByZXBsaWNhLT5tYXNrTGF5ZXIoKS0+bmVlZHNUZXh0dXJlKCkpCisgICAgICAgICAg
ICAgICAgcmVwbGljYS0+bWFza0xheWVyKCktPnVwZGF0ZVRleHR1cmVDb250ZW50c0lmTmVlZGVk
KCk7CisgICAgICAgIH0KKyAgICB9CiAKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ29t
cG9zaXRpbmdUaHJlYWQ+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7IGkrKykKKyAgICAgICAg
cHJlcGFyZUZyYW1lUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgYW5pbWF0aW9uVGltZSwg
aXNDb250ZXh0Q3VycmVudCk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlcjo6dXBkYXRlTGF5ZXJz
UmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ29tcG9zaXRpbmdUaHJlYWQ+
ID4mIHN1cmZhY2VMYXllcnMsIGZsb2F0IG9wYWNpdHksIEZsb2F0UmVjdCBjbGlwUmVjdCkKK3sK
ICAgICAvLyBUaGUgY29udHJhY3QgZm9yIExheWVyQ29tcG9zaXRpbmdUaHJlYWQ6OnNldExheWVy
UmVuZGVyZXIgaXMgaXQgbXVzdCBiZSBzZXQgaWYgdGhlIGxheWVyIGhhcyBiZWVuIHJlbmRlcmVk
LgogICAgIC8vIFNvIGRvIGl0IG5vdywgYmVmb3JlIHdlIHJlbmRlciBpdCBpbiBjb21wb3NpdGVM
YXllcnNSZWN1cnNpdmUuCiAgICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7CkBAIC01
NDEsOSArNjQ2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyOjp1cGRhdGVMYXllcnNSZWN1cnNpdmUo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IFQKICAgICAgICAgICAgIHJlcGxp
Y2EtPm1hc2tMYXllcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwogICAgIH0KIAotICAgIC8v
IFRoaXMgbWlnaHQgY2F1c2UgdGhlIGxheWVyIHRvIHJlY29tcHV0ZSBzb21lIGF0dHJpYnV0ZXMu
Ci0gICAgbV9sYXN0UmVuZGVyaW5nUmVzdWx0cy5uZWVkc0FuaW1hdGlvbkZyYW1lIHw9IGxheWVy
LT51cGRhdGVBbmltYXRpb25zKGN1cnJlbnRUaW1lKTsKLQogICAgIC8vIENvbXB1dGUgdGhlIG5l
dyBtYXRyaXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhpcyBsYXll
ciBhbmQKICAgICAvLyBhbGwgaXRzIHN1YmxheWVycy4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1i
ZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgogICAgIC8vIGlzIHRoZSBwb3NpdGlvbiBvZiB0
aGUgbGF5ZXIncyBhbmNob3IgcG9pbnQuIEFsc28sIHRoZSBjb29yZGluYXRlIHN5c3RlbSB1c2Vk
CkBAIC02ODEsNyArNzgzLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyOjp1cGRhdGVMYXllcnNSZWN1
cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGNvbnN0IFQKIAogICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gPiYgc3VibGF5ZXJzID0gbGF5
ZXItPmdldFN1YmxheWVycygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJz
LnNpemUoKTsgaSsrKQotICAgICAgICB1cGRhdGVMYXllcnNSZWN1cnNpdmUoc3VibGF5ZXJzW2ld
LmdldCgpLCBsb2NhbE1hdHJpeCwgc3VyZmFjZUxheWVycywgb3BhY2l0eSwgY2xpcFJlY3QsIGN1
cnJlbnRUaW1lKTsKKyAgICAgICAgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKHN1YmxheWVyc1tpXS5n
ZXQoKSwgbG9jYWxNYXRyaXgsIHN1cmZhY2VMYXllcnMsIG9wYWNpdHksIGNsaXBSZWN0KTsKIH0K
IAogc3RhdGljIGJvb2wgaGFzUm90YXRpb25hbENvbXBvbmVudChjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgbSkKQEAgLTczMSwyMCArODMzLDYgQEAgdm9pZCBMYXllclJlbmRlcmVyOjpjb21w
b3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGluZ1RocmVhZCogbGF5ZXIsIGludAog
ICAgIC8vIDEuIExheWVycyB0aGF0IGhhdmUgdGhlaXIgb3duIEdyYXBoaWNzQ29udGV4dCBhbmQg
Y2FuIGRyYXcgdGhlaXIgY29udGVudHMgb24gZGVtYW5kIChsYXllci0+ZHJhd3NDb250ZW50KCkg
PT0gdHJ1ZSkuCiAgICAgLy8gMi4gTGF5ZXJzIHRoYXQgYXJlIGp1c3QgY29udGFpbmVycyBvZiBp
bWFnZXMvdmlkZW8vZXRjIHRoYXQgZG9uJ3Qgb3duIGEgR3JhcGhpY3NDb250ZXh0IChsYXllci0+
Y29udGVudHMoKSA9PSB0cnVlKS4KIAotICAgIC8vIEV2ZW4gbm9uLXZpc2libGUgbGF5ZXJzIG5l
ZWQgdG8gcGVyZm9ybSB0aGVpciB0ZXh0dXJlIGpvYnMsIG9yIHRoZXkgd2lsbAotICAgIC8vIHBp
bGUgdXAgYW5kIHdhc3RlIG1lbW9yeS4KLSAgICBpZiAobGF5ZXItPm5lZWRzVGV4dHVyZSgpKQot
ICAgICAgICBsYXllci0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsKLSAgICBpZiAo
bGF5ZXItPm1hc2tMYXllcigpICYmIGxheWVyLT5tYXNrTGF5ZXIoKS0+bmVlZHNUZXh0dXJlKCkp
Ci0gICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVk
ZWQoKTsKLSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgIExheWVyQ29t
cG9zaXRpbmdUaHJlYWQqIHJlcGxpY2EgPSBsYXllci0+cmVwbGljYUxheWVyKCk7Ci0gICAgICAg
IGlmIChyZXBsaWNhLT5uZWVkc1RleHR1cmUoKSkKLSAgICAgICAgICAgIHJlcGxpY2EtPnVwZGF0
ZVRleHR1cmVDb250ZW50c0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChyZXBsaWNhLT5tYXNrTGF5
ZXIoKSAmJiByZXBsaWNhLT5tYXNrTGF5ZXIoKS0+bmVlZHNUZXh0dXJlKCkpCi0gICAgICAgICAg
ICByZXBsaWNhLT5tYXNrTGF5ZXIoKS0+dXBkYXRlVGV4dHVyZUNvbnRlbnRzSWZOZWVkZWQoKTsK
LSAgICB9Ci0KICAgICBpZiAoKGxheWVyLT5uZWVkc1RleHR1cmUoKSB8fCBsYXllci0+bGF5ZXJS
ZW5kZXJlclN1cmZhY2UoKSkgJiYgbGF5ZXJWaXNpYmxlKSB7CiAgICAgICAgIHVwZGF0ZVNjaXNz
b3JJZk5lZWRlZChjbGlwUmVjdCk7CiAKQEAgLTg3MCwxMSArOTU4LDE5IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlcjo6Y29tcG9zaXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQq
IGxheWVyLCBpbnQKIHZvaWQgTGF5ZXJSZW5kZXJlcjo6dXBkYXRlU2Npc3NvcklmTmVlZGVkKGNv
bnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCiB7CiAjaWYgRU5BQkxFX1NDSVNTT1IKKyNpZiBERUJV
R19DTElQUElORworICAgIHByaW50ZigiTGF5ZXJSZW5kZXJlcjo6dXBkYXRlU2Npc3NvcklmTmVl
ZGVkKCk6IGNsaXBSZWN0PSglLjJmLCUuMmYgJS4yZnglLjJmKVxuIiwgY2xpcFJlY3QueCgpLCBj
bGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKTsKKyAgICBm
Zmx1c2goc3Rkb3V0KTsKKyNlbmRpZgogICAgIEludFJlY3QgY2xpcFJlY3RXQyA9IHRvT3BlbkdM
V2luZG93Q29vcmRpbmF0ZXMoY2xpcFJlY3QpOwogICAgIGlmIChtX3NjaXNzb3JSZWN0ID09IGNs
aXBSZWN0V0MpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fc2Npc3NvclJlY3QgPSBjbGlwUmVj
dFdDOworI2lmIERFQlVHX0NMSVBQSU5HCisgICAgcHJpbnRmKCJMYXllclJlbmRlcmVyOjp1cGRh
dGVTY2lzc29ySWZOZWVkZWQoKTogY2xpcHBpbmcgdG8gKCVkLCVkICVkeCVkKVxuIiwgbV9zY2lz
c29yUmVjdC54KCksIG1fc2Npc3NvclJlY3QueSgpLCBtX3NjaXNzb3JSZWN0LndpZHRoKCksIG1f
c2Npc3NvclJlY3QuaGVpZ2h0KCkpOworICAgIGZmbHVzaChzdGRvdXQpOworI2VuZGlmCiAgICAg
Z2xTY2lzc29yKG1fc2Npc3NvclJlY3QueCgpLCBtX3NjaXNzb3JSZWN0LnkoKSwgbV9zY2lzc29y
UmVjdC53aWR0aCgpLCBtX3NjaXNzb3JSZWN0LmhlaWdodCgpKTsKICNlbmRpZgogfQpAQCAtMTA5
Miw4ICsxMTg4LDkgQEAgSW50UmVjdCBMYXllclJlbmRlcmluZ1Jlc3VsdHM6OmhvbGVQdW5jaFJl
Y3QodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAKIHZvaWQgTGF5ZXJSZW5kZXJpbmdSZXN1bHRzOjph
ZGRIb2xlUHVuY2hSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0jaWYgREVCVUdfVklERU9f
Q0xJUFBJTkcKLSAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6bG9nKEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpMb2dMZXZlbEluZm8sICJMYXllclJlbmRlcmluZ1Jlc3VsdHM6OmFkZEhvbGVQdW5jaFJl
Y3QgKHg9JWQseT0lZCx3aWR0aD0lZCxoZWlnaHQ9JWQpLiIsIHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyNpZiBERUJVR19DTElQUElORworICAgIHBy
aW50ZigiTGF5ZXJSZW5kZXJpbmdSZXN1bHRzOjphZGRIb2xlUHVuY2hSZWN0ICglZCwlZCAlZHgl
ZClcbiIsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
KyAgICBmZmx1c2goc3Rkb3V0KTsKICNlbmRpZgogICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIG1faG9sZVB1bmNoUmVjdHMuYXBwZW5kKHJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxhY2tiZXJyeS9MYXllclJlbmRlcmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIu
aAppbmRleCBmZTVlYTAwMTEwMjQ3NjhlNDJhYjlhYzBhZGIyMDA0NTRhZWU0ZmQxLi5hMDNhNzk5
NjE4NDMzOWUxNDA2MGU0ZWFhZWI0M2NhZjkwODJjNzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0xheWVyUmVuZGVyZXIu
aApAQCAtNzksNiArNzksOCBAQCBwcml2YXRlOgogY2xhc3MgTGF5ZXJSZW5kZXJlciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJSZW5kZXJlcik7CiBwdWJsaWM6CisgICAgc3RhdGlj
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0
LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCwgZmxvYXQgbmVhclosIGZsb2F0IGZhclopOworCiAg
ICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlcj4gY3JlYXRlKEJsYWNrQmVycnk6OlBs
YXRmb3JtOjpHcmFwaGljczo6R0xFUzJDb250ZXh0Kik7CiAKICAgICBMYXllclJlbmRlcmVyKEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJDb250ZXh0Kik7CkBAIC04NiwxMSAr
ODgsMjYgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWxlYXNlTGF5ZXJSZXNvdXJjZXMoKTsKIAot
ICAgIC8vIFJlY29tcG9zaXRlcyBhbGwgdGhlIGxheWVycy4gUmV0dXJucyB0cnVlIGlmIGl0IG5l
ZWRzIG1vcmUgZHJhdy4KLSAgICB2b2lkIGRyYXdMYXllcnMoY29uc3QgRmxvYXRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5b3V0UmVjdCwgY29uc3QgSW50U2l6ZSYgY29udGVu
dHNTaXplLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0KTsKKyAgICAvLyBJbiBvcmRlciB0byByZW5k
ZXIgdGhlIGxheWVycywgeW91IG11c3QgZG8gdGhlIGZvbGxvd2luZyAzIG9wZXJhdGlvbnMsIGlu
IG9yZGVyLgorCisgICAgLy8gMS4gVXBsb2FkIHRleHR1cmVzIGFuZCBvdGhlciBvcGVyYXRpb25z
IHRoYXQgc2hvdWxkIGJlIHBlcmZvcm1lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZnJhbWUu
CisgICAgLy8gTm90ZSwgdGhpcyBjYWxsIGFsc28gcmVzZXRzIHRoZSBsYXN0IHJlbmRlcmluZyBy
ZXN1bHRzLgorICAgIHZvaWQgcHJlcGFyZUZyYW1lKGRvdWJsZSBhbmltYXRpb25UaW1lLCBMYXll
ckNvbXBvc2l0aW5nVGhyZWFkKiByb290TGF5ZXIpOwogCi0gICAgdm9pZCBzZXRSb290TGF5ZXIo
TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwotICAgIExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHJv
b3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisgICAgLy8gMi4gU2V0IHRo
ZSBPcGVuR0wgdmlld3BvcnQgYW5kIHN0b3JlIG90aGVyIHZpZXdwb3J0LXJlbGF0ZWQgcGFyYW1l
dGVycworICAgIC8vICAgdmlld3BvcnQgaXMgdGhlIEdMIHZpZXdwb3J0CisgICAgLy8gICBjbGlw
UmVjdCBpcyBhbiBhZGRpdGlvbmFsIGNsaXAgcmVjdCwgaWYgY2xpcHBpbmcgaXMgcmVxdWlyZWQg
YmV5b25kIHRoZSBjbGlwcGluZyBlZmZlY3Qgb2YgdGhlIHZpZXdwb3J0LgorICAgIC8vICAgdmlz
aWJsZVJlY3QgaXMgdGhlIHN1YnJlY3Qgb2YgdGhlIHdlYiBwYWdlIHRoYXQgeW91IHdpc2ggdG8g
Y29tcG9zaXRlLCBleHByZXNzZWQgaW4gY29udGVudCBjb29yZGluYXRlcworICAgIC8vIFRoZSBs
YXN0IHR3byBwYXJhbWV0ZXJzIGFyZSByZXF1aXJlZCB0byBkcmF3IGZpeGVkIHBvc2l0aW9uIGVs
ZW1lbnRzIGluIHRoZSByaWdodCBwbGFjZToKKyAgICAvLyAgIGxheW91dFJlY3QgaXMgdGhlIHN1
YnJlY3Qgb2YgdGhlIHdlYiBwYWdlIHRoYXQgdGhlIFdlYktpdCB0aHJlYWQgYmVsaWV2ZXMgaXMg
dmlzaWJsZSAoc2Nyb2xsIHBvc2l0aW9uLCBhY3R1YWwgdmlzaWJsZSBzaXplKS4KKyAgICAvLyAg
IGNvbnRlbnRzU2l6ZSBpcyB0aGUgY29udGVudHMgc2l6ZSBvZiB0aGUgd2ViIHBhZ2UKKyAgICB2
b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHZpZXdwb3J0LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5
b3V0UmVjdCwgY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplKTsKKworICAgIC8vIDMuIFByZXBh
cmVzIGFsbCB0aGUgbGF5ZXJzIGZvciBjb21wb3NpdGluZworICAgIC8vIHRyYW5zZm9ybSBpcyB0
aGUgbW9kZWwtdmlldy1wcm9qZWN0IG1hdHJpeCB0aGF0IGdvZXMgYWxsIHRoZSB3YXkgZnJvbSBj
b250ZW50cyB0byBub3JtYWxpemVkIGRldmljZSBjb29yZGluYXRlcy4KKyAgICB2b2lkIGNvbXBv
c2l0ZUxheWVycyhjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqIHJvb3RMYXllcik7CisgICAgdm9pZCBjb21wb3NpdGVCdWZmZXIoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJlY3QmIGNvbnRlbnRzLCBCbGFja0JlcnJ5OjpQ
bGF0Zm9ybTo6R3JhcGhpY3M6OkJ1ZmZlciosIGZsb2F0IG9wYWNpdHkpOworICAgIHZvaWQgZHJh
d0NoZWNrZXJib2FyZFBhdHRlcm4oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBG
bG9hdFJlY3QmIGNvbnRlbnRzKTsKIAogICAgIC8vIEtlZXAgdHJhY2sgb2YgbGF5ZXJzIHRoYXQg
bmVlZCBjbGVhbnVwIHdoZW4gdGhlIExheWVyUmVuZGVyZXIgaXMgZGVzdHJveWVkCiAgICAgdm9p
ZCBhZGRMYXllcihMYXllckNvbXBvc2l0aW5nVGhyZWFkKik7CkBAIC0xMTgsNyArMTM1LDggQEAg
cHVibGljOgogICAgIGJvb2wgbGF5ZXJBbHJlYWR5T25TdXJmYWNlKExheWVyQ29tcG9zaXRpbmdU
aHJlYWQqKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZUxheWVyc1JlY3Vyc2l2
ZShMYXllckNvbXBvc2l0aW5nVGhyZWFkKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBh
cmVudE1hdHJpeCwgVmVjdG9yPFJlZlB0cjxMYXllckNvbXBvc2l0aW5nVGhyZWFkPiA+JiBzdXJm
YWNlTGF5ZXJzLCBmbG9hdCBvcGFjaXR5LCBGbG9hdFJlY3QgY2xpcFJlY3QsIGRvdWJsZSBjdXJy
ZW50VGltZSk7CisgICAgdm9pZCBwcmVwYXJlRnJhbWVSZWN1cnNpdmUoTGF5ZXJDb21wb3NpdGlu
Z1RocmVhZCosIGRvdWJsZSBhbmltYXRpb25UaW1lLCBib29sIGlzQ29udGV4dEN1cnJlbnQpOwor
ICAgIHZvaWQgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBWZWN0b3I8UmVmUHRyPExh
eWVyQ29tcG9zaXRpbmdUaHJlYWQ+ID4mIHN1cmZhY2VMYXllcnMsIGZsb2F0IG9wYWNpdHksIEZs
b2F0UmVjdCBjbGlwUmVjdCk7CiAgICAgdm9pZCBjb21wb3NpdGVMYXllcnNSZWN1cnNpdmUoTGF5
ZXJDb21wb3NpdGluZ1RocmVhZCosIGludCBzdGVuY2lsVmFsdWUsIEZsb2F0UmVjdCBjbGlwUmVj
dCk7CiAgICAgdm9pZCB1cGRhdGVTY2lzc29ySWZOZWVkZWQoY29uc3QgRmxvYXRSZWN0JiBjbGlw
UmVjdCk7CiAKQEAgLTE1OCwxNCArMTc2LDE0IEBAIHByaXZhdGU6CiAgICAgaW50IG1fY2hlY2tl
clN1cmZhY2VIZWlnaHRMb2NhdGlvbjsKIAogICAgIC8vIEN1cnJlbnQgZHJhdyBjb25maWd1cmF0
aW9uLgorICAgIGRvdWJsZSBtX2FuaW1hdGlvblRpbWU7CiAgICAgRmxvYXRSZWN0IG1fdmlzaWJs
ZVJlY3Q7CiAgICAgSW50UmVjdCBtX2xheW91dFJlY3Q7CiAgICAgSW50U2l6ZSBtX2NvbnRlbnRz
U2l6ZTsKIAotICAgIEludFJlY3QgbV92aWV3cG9ydDsKLSAgICBJbnRSZWN0IG1fc2Npc3NvclJl
Y3Q7Ci0KLSAgICBSZWZQdHI8TGF5ZXJDb21wb3NpdGluZ1RocmVhZD4gbV9yb290TGF5ZXI7Cisg
ICAgSW50UmVjdCBtX3ZpZXdwb3J0OyAvLyBJbiByZW5kZXIgdGFyZ2V0IGNvb3JkaW5hdGVzCisg
ICAgSW50UmVjdCBtX3NjaXNzb3JSZWN0OyAvLyBJbiByZW5kZXIgdGFyZ2V0IGNvb3JkaW5hdGVz
CisgICAgRmxvYXRSZWN0IG1fY2xpcFJlY3Q7IC8vIEluIG5vcm1hbGl6ZWQgZGV2aWNlIGNvb3Jk
aW5hdGVzCiAKICAgICB1bnNpZ25lZCBtX2ZibzsKICAgICBMYXllclJlbmRlcmVyU3VyZmFjZSog
bV9jdXJyZW50TGF5ZXJSZW5kZXJlclN1cmZhY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5kZXggOTI5Y2Q5OTIxOGQ4MjI1MWQ0Y2EwMWY1MDRh
OGM1ODMwYTM5MmI4Mi4uNDZmMmMxMTNkNWNiOWIxMDdhMDJmM2JkMzc5NmVkY2RiNzAwZDgxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAt
MTAyOCw4ICsxMDI4LDYgQEAgYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpyZW5kZXIoY29uc3Qg
UGxhdGZvcm06OkludFJlY3QmIHJlY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3N1
c3BlbmRCYWNraW5nU3RvcmVVcGRhdGVzID8gInRydWUiIDogImZhbHNlIik7CiAjZW5kaWYKIAot
ICAgIGJvb2wgYmxpdHRpbmdEaXJlY3RseVRvQ29tcG9zaXRpbmdXaW5kb3cgPSBpc09wZW5HTENv
bXBvc2l0aW5nKCk7Ci0KICAgICBCYWNraW5nU3RvcmVHZW9tZXRyeSogY3VycmVudFN0YXRlID0g
ZnJvbnRTdGF0ZSgpOwogICAgIFRpbGVNYXAgY3VycmVudE1hcCA9IGN1cnJlbnRTdGF0ZS0+dGls
ZU1hcCgpOwogCkBAIC0xMDc4LDcgKzEwNzYsMTEgQEAgYm9vbCBCYWNraW5nU3RvcmVQcml2YXRl
OjpyZW5kZXIoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpCiAgICAgICAgIEJsYWNrQmVy
cnk6OlBsYXRmb3JtOjpHcmFwaGljczo6QnVmZmVyKiBuYXRpdmVCdWZmZXIKICAgICAgICAgICAg
ID0gdGlsZS0+YmFja0J1ZmZlcigpLT5uYXRpdmVCdWZmZXIoKTsKIAotICAgICAgICBpZiAoYmxp
dHRpbmdEaXJlY3RseVRvQ29tcG9zaXRpbmdXaW5kb3cpIHsKKyAgICAgICAgLy8gVGhpcyBjb2Rl
IGlzIG9ubHkgbmVlZGVkIGZvciBFR0xJbWFnZSBjb2RlIHBhdGgsIGFuZCBvbmx5IGVmZmVjdGl2
ZSBpZiB3ZSBhcmUgc3dhcHBpbmcgdGhlIHJlbmRlciB0YXJnZXQuCisgICAgICAgIC8vIFRoaXMg
Y29tYmluYXRpb24gaXMgb25seSB0cnVlIGlmIHRoZXJlJ3MgYSBHTEVTMlVzYWdlIHdpbmRvdy4K
KyAgICAgICAgLy8gRklYTUU6IFVzZSBhbiBFR0wgZmVuY2UgaW5zdGVhZCwgUFIxNTIxMzIKKyAg
ICAgICAgV2luZG93KiB3aW5kb3cgPSBtX3dlYlBhZ2UtPmNsaWVudCgpLT53aW5kb3coKTsKKyAg
ICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPndpbmRvd1VzYWdlKCkgPT0gV2luZG93OjpHTEVT
MlVzYWdlKSB7CiAgICAgICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJm1fYmxpdEdlbmVyYXRp
b25Mb2NrKTsKICAgICAgICAgICAgIHdoaWxlIChtX2JsaXRHZW5lcmF0aW9uID09IHRpbGUtPmJh
Y2tCdWZmZXIoKS0+YmxpdEdlbmVyYXRpb24oKSkgewogICAgICAgICAgICAgICAgIGludCBlcnIg
PSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCZtX2JsaXRHZW5lcmF0aW9uQ29uZCwgJm1fYmxpdEdl
bmVyYXRpb25Mb2NrLCAmbV9jdXJyZW50QmxpdEVuZCk7CkBAIC0xNTMyLDggKzE1MzQsNiBAQCB2
b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRDb250ZW50cyhjb25zdCBQbGF0Zm9ybTo6SW50
UmVjdCYgZHN0UmVjdCwKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgYmxpdHRpbmdEaXJl
Y3RseVRvQ29tcG9zaXRpbmdXaW5kb3cgPSBpc09wZW5HTENvbXBvc2l0aW5nKCk7Ci0KICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKFdlYlBhZ2VDb21wb3NpdG9yUHJp
dmF0ZSogY29tcG9zaXRvciA9IG1fd2ViUGFnZS0+ZC0+Y29tcG9zaXRvcigpKSB7CiAgICAgICAg
IFdlYkNvcmU6OkZsb2F0UmVjdCBjb250ZW50c1JlY3QgPSBtX3dlYlBhZ2UtPmQtPm1hcEZyb21U
cmFuc2Zvcm1lZEZsb2F0UmVjdChXZWJDb3JlOjpGbG9hdFJlY3QoV2ViQ29yZTo6SW50UmVjdChj
b250ZW50cykpKTsKQEAgLTE1NDIsNyArMTU0Miw3IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6YmxpdENvbnRlbnRzKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBkc3RSZWN0LAogICAgICAg
ICAgICAgcGFpbnREZWZhdWx0QmFja2dyb3VuZChjb250ZW50cywgdHJhbnNmb3JtYXRpb24sIGZh
bHNlIC8qZmx1c2gqLyk7CiAgICAgfQogCi0gICAgaWYgKCFibGl0dGluZ0RpcmVjdGx5VG9Db21w
b3NpdGluZ1dpbmRvdykKKyAgICBpZiAoIWlzT3BlbkdMQ29tcG9zaXRpbmcoKSkKICAgICAgICAg
YmxlbmRDb21wb3NpdGluZ1N1cmZhY2UoZHN0UmVjdCk7CiAjZW5kaWYKIApAQCAtMTYwNCw3ICsx
NjA0LDExIEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6YmxpdENvbnRlbnRzKGNvbnN0IFBs
YXRmb3JtOjpJbnRSZWN0JiBkc3RSZWN0LAogCiAgICAgaW52YWxpZGF0ZVdpbmRvdyhkc3RSZWN0
KTsKIAotICAgIGlmIChibGl0dGluZ0RpcmVjdGx5VG9Db21wb3NpdGluZ1dpbmRvdyAmJiAhYmxp
dHRlZFRpbGVzLmlzRW1wdHkoKSkgeworICAgIC8vIFRoaXMgY29kZSBpcyBvbmx5IG5lZWRlZCBm
b3IgRUdMSW1hZ2UgY29kZSBwYXRoLCBhbmQgb25seSBlZmZlY3RpdmUgaWYgd2UgYXJlIHN3YXBw
aW5nIHRoZSByZW5kZXIgdGFyZ2V0LgorICAgIC8vIFRoaXMgY29tYmluYXRpb24gaXMgb25seSB0
cnVlIGlmIHRoZXJlJ3MgYSBHTEVTMlVzYWdlIHdpbmRvdy4KKyAgICAvLyBGSVhNRTogVXNlIGFu
IEVHTCBmZW5jZSBpbnN0ZWFkCisgICAgV2luZG93KiB3aW5kb3cgPSBtX3dlYlBhZ2UtPmNsaWVu
dCgpLT53aW5kb3coKTsKKyAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+d2luZG93VXNhZ2UoKSA9
PSBXaW5kb3c6OkdMRVMyVXNhZ2UgJiYgIWJsaXR0ZWRUaWxlcy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgcHRocmVhZF9tdXRleF9sb2NrKCZtX2JsaXRHZW5lcmF0aW9uTG9jayk7CiAKICAgICAgICAg
KyttX2JsaXRHZW5lcmF0aW9uOwpAQCAtMTYyMyw2ICsxNjI3LDczIEBAIHZvaWQgQmFja2luZ1N0
b3JlUHJpdmF0ZTo6YmxpdENvbnRlbnRzKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBkc3RSZWN0
LAogICAgIH0KIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK3ZvaWQgQmFj
a2luZ1N0b3JlUHJpdmF0ZTo6Y29tcG9zaXRlQ29udGVudHMoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ciogbGF5ZXJSZW5kZXJlciwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBjb250ZW50cykKK3sKKyAgICBjb25z
dCBQbGF0Zm9ybTo6SW50UmVjdCB0cmFuc2Zvcm1lZENvbnRlbnRzUmVjdCA9IFBsYXRmb3JtOjpJ
bnRSZWN0KFBsYXRmb3JtOjpJbnRQb2ludCgwLCAwKSwgbV9jbGllbnQtPnRyYW5zZm9ybWVkQ29u
dGVudHNTaXplKCkpOworICAgIFBsYXRmb3JtOjpJbnRSZWN0IHRyYW5zZm9ybWVkQ29udGVudHMg
PSBlbmNsb3NpbmdJbnRSZWN0KG1fd2ViUGFnZS0+ZC0+bV90cmFuc2Zvcm1hdGlvbk1hdHJpeC0+
bWFwUmVjdChjb250ZW50cykpOworICAgIHRyYW5zZm9ybWVkQ29udGVudHMuaW50ZXJzZWN0KHRy
YW5zZm9ybWVkQ29udGVudHNSZWN0KTsKKyAgICBpZiAodHJhbnNmb3JtZWRDb250ZW50cy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghaXNBY3RpdmUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fd2ViUGFnZS0+ZC0+Y29tcG9zaXRvckRyYXdzUm9vdExheWVy
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEJhY2tpbmdTdG9yZUdlb21ldHJ5KiBjdXJyZW50
U3RhdGUgPSBmcm9udFN0YXRlKCk7CisgICAgVGlsZU1hcCBjdXJyZW50TWFwID0gY3VycmVudFN0
YXRlLT50aWxlTWFwKCk7CisKKyAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiB0cmFuc2Zvcm1l
ZENvbnRlbnRzUmVnaW9uID0gdHJhbnNmb3JtZWRDb250ZW50czsKKyAgICBQbGF0Zm9ybTo6SW50
UmVjdFJlZ2lvbiBiYWNraW5nU3RvcmVSZWdpb24gPSBjdXJyZW50U3RhdGUtPmJhY2tpbmdTdG9y
ZVJlY3QoKTsKKyAgICBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbiBjaGVja2VyZWRSZWdpb24KKyAg
ICAgICAgPSBQbGF0Zm9ybTo6SW50UmVjdFJlZ2lvbjo6c3VidHJhY3RSZWdpb25zKHRyYW5zZm9y
bWVkQ29udGVudHNSZWdpb24sIGJhY2tpbmdTdG9yZVJlZ2lvbik7CisKKyAgICAvLyBCbGl0IGNo
ZWNrZXJlZCB0byB0aG9zZSBwYXJ0cyB0aGF0IGFyZSBub3QgY292ZXJlZCBieSB0aGUgYmFja2lu
Z1N0b3JlUmVjdC4KKyAgICBJbnRSZWN0TGlzdCBjaGVja2VyZWRSZWN0cyA9IGNoZWNrZXJlZFJl
Z2lvbi5yZWN0cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hlY2tlcmVkUmVjdHMu
c2l6ZSgpOyArK2kpCisgICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdDaGVja2VyYm9hcmRQYXR0
ZXJuKHRyYW5zZm9ybSwgbV93ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3Qo
V2ViQ29yZTo6SW50UmVjdChjaGVja2VyZWRSZWN0cy5hdChpKSkpKTsKKworICAgIC8vIEdldCB0
aGUgbGlzdCBvZiB0aWxlIHJlY3RzIHRoYXQgbWFrZXVwIHRoZSBjb250ZW50LgorICAgIFRpbGVS
ZWN0TGlzdCB0aWxlUmVjdExpc3QgPSBtYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVGlsZXMo
dHJhbnNmb3JtZWRDb250ZW50cywgY3VycmVudFN0YXRlKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRpbGVSZWN0TGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBUaWxlUmVjdCB0aWxl
UmVjdCA9IHRpbGVSZWN0TGlzdFtpXTsKKyAgICAgICAgVGlsZUluZGV4IGluZGV4ID0gdGlsZVJl
Y3QuZmlyc3Q7CisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5VGlsZVJlY3QgPSB0aWxl
UmVjdC5zZWNvbmQ7CisgICAgICAgIEJhY2tpbmdTdG9yZVRpbGUqIHRpbGUgPSBjdXJyZW50TWFw
LmdldChpbmRleCk7CisgICAgICAgIFRpbGVCdWZmZXIqIHRpbGVCdWZmZXIgPSB0aWxlLT5mcm9u
dEJ1ZmZlcigpOworCisgICAgICAgIC8vIFRoaXMgZGlydHkgcmVjdCBpcyBpbiB0aWxlIGNvb3Jk
aW5hdGVzLCBidXQgaXQgbmVlZHMgdG8gYmUgaW4KKyAgICAgICAgLy8gdHJhbnNmb3JtZWQgY29u
dGVudHMgY29vcmRpbmF0ZXMuCisgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IGRpcnR5UmVjdCA9
IG1hcEZyb21UaWxlc1RvVHJhbnNmb3JtZWRDb250ZW50cyh0aWxlUmVjdCwgY3VycmVudFN0YXRl
LT5iYWNraW5nU3RvcmVSZWN0KCkpOworCisgICAgICAgIGlmICghZGlydHlSZWN0LmludGVyc2Vj
dHModHJhbnNmb3JtZWRDb250ZW50cykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBUaWxlUmVjdCB3aG9sZVRpbGVSZWN0OworICAgICAgICB3aG9sZVRpbGVSZWN0LmZpcnN0ID0g
aW5kZXg7CisgICAgICAgIHdob2xlVGlsZVJlY3Quc2Vjb25kID0gdGhpcy0+dGlsZVJlY3QoKTsK
KworICAgICAgICBQbGF0Zm9ybTo6SW50UmVjdCB3aG9sZVJlY3QgPSBtYXBGcm9tVGlsZXNUb1Ry
YW5zZm9ybWVkQ29udGVudHMod2hvbGVUaWxlUmVjdCwgY3VycmVudFN0YXRlLT5iYWNraW5nU3Rv
cmVSZWN0KCkpOworCisgICAgICAgIGJvb2wgY29tbWl0dGVkID0gdGlsZS0+aXNDb21taXR0ZWQo
KTsKKworICAgICAgICBpZiAoIWNvbW1pdHRlZCkKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXIt
PmRyYXdDaGVja2VyYm9hcmRQYXR0ZXJuKHRyYW5zZm9ybSwgbV93ZWJQYWdlLT5kLT5tYXBGcm9t
VHJhbnNmb3JtZWRGbG9hdFJlY3QoUGxhdGZvcm06OkZsb2F0UmVjdChkaXJ0eVJlY3QpKSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgbGF5ZXJSZW5kZXJlci0+Y29tcG9zaXRlQnVmZmVy
KHRyYW5zZm9ybSwgbV93ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoUGxh
dGZvcm06OkZsb2F0UmVjdCh3aG9sZVJlY3QpKSwgdGlsZUJ1ZmZlci0+bmF0aXZlQnVmZmVyKCks
IDEuMGYpOworCisgICAgICAgICAgICAvLyBJbnRlcnNlY3QgdGhlIHJlbmRlcmVkIHJlZ2lvbi4K
KyAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uIG5vdFJlbmRlcmVkUmVnaW9uID0g
UGxhdGZvcm06OkludFJlY3RSZWdpb246OnN1YnRyYWN0UmVnaW9ucyhkaXJ0eVRpbGVSZWN0LCB0
aWxlQnVmZmVyLT5yZW5kZXJlZFJlZ2lvbigpKTsKKyAgICAgICAgICAgIEludFJlY3RMaXN0IG5v
dFJlbmRlcmVkUmVjdHMgPSBub3RSZW5kZXJlZFJlZ2lvbi5yZWN0cygpOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBub3RSZW5kZXJlZFJlY3RzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPmRyYXdDaGVja2VyYm9hcmRQYXR0ZXJuKHRyYW5z
Zm9ybSwgbV93ZWJQYWdlLT5kLT5tYXBGcm9tVHJhbnNmb3JtZWRGbG9hdFJlY3QoUGxhdGZvcm06
OkZsb2F0UmVjdChub3RSZW5kZXJlZFJlY3RzLmF0KGkpKSkpOworICAgICAgICB9CisgICAgfQor
fQorI2VuZGlmCisKIFBsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OmJsaXRU
aWxlUmVjdChUaWxlQnVmZmVyKiB0aWxlQnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGlsZVJlY3QmIHRpbGVSZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGxh
dGZvcm06OkludFBvaW50JiBvcmlnaW4sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0JhY2tpbmdTdG9yZV9wLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L0JhY2tpbmdTdG9yZV9wLmgKaW5kZXggZmE4MGEzMTlhYWQ4ZDVjZmUxODJlNDBkMTc1MGExZGEz
ZjYxMGFiNC4uMzZjMmY2MzhiNmJiMTc5MjQ4NzA5MTQyMTg3MjFmZDk5ZDQ4NTQ2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmVfcC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlX3AuaApAQCAtMzIsNiAr
MzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OworY2xhc3MgRmxv
YXRSZWN0OworY2xhc3MgTGF5ZXJSZW5kZXJlcjsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OwogfQogCkBAIC0xOTYsOCArMTk4LDE1IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybTo6SW50UmVj
dCBibGl0VGlsZVJlY3QoVGlsZUJ1ZmZlciosIGNvbnN0IFRpbGVSZWN0JiwgY29uc3QgUGxhdGZv
cm06OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBCYWNr
aW5nU3RvcmVHZW9tZXRyeSopOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIC8vIFVzZSBpbnN0ZWFkIG9mIGJsaXRDb250ZW50cyBpZiB5b3UgbmVlZCBtb3JlIGNvbnRy
b2wgb3ZlciBPcGVuR0wgc3RhdGUuCisgICAgLy8gTm90ZSB0aGF0IGNvbnRlbnRzIGlzIGV4cHJl
c3NlZCBpbiB1bnRyYW5zZm9ybWVkIGNvbnRlbnQgY29vcmRpbmF0ZXMuCisgICAgLy8gUHJlY29u
ZGl0aW9uczogWW91IGhhdmUgdG8gY2FsbCBwcmVwYXJlRnJhbWUgYW5kIHNldFZpZXdwb3J0IG9u
IHRoZSBMYXllclJlbmRlcmVyIGJlZm9yZQorICAgIC8vICAgICAgICAgICAgICAgIGNhbGxpbmcg
dGhpcy4KKyAgICB2b2lkIGNvbXBvc2l0ZUNvbnRlbnRzKFdlYkNvcmU6OkxheWVyUmVuZGVyZXIq
LCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgY29udGVudHMpOworCiAgICAgdm9pZCBibGVuZENvbXBvc2l0aW5nU3VyZmFjZShj
b25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgZHN0UmVjdCk7CiAgICAgdm9pZCBjbGVhckNvbXBvc2l0
aW5nU3VyZmFjZSgpOworCiAgICAgYm9vbCBkcmF3TGF5ZXJzT25Db21taXRJZk5lZWRlZCgpOwog
ICAgIHZvaWQgZHJhd0FuZEJsZW5kTGF5ZXJzRm9yRGlyZWN0UmVuZGVyaW5nKGNvbnN0IFBsYXRm
b3JtOjpJbnRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIC8vIFdlYlBhZ2Ugd2lsbCBjYWxsIHRoaXMg
d2hlbiBkcmF3aW5nIGxheWVycyB0byB0ZWxsIHVzIHdlIGRvbid0IG5lZWQgdG8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZUNvbXBvc2l0b3IuY3BwIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvci5jcHAKaW5kZXgg
OWVjNjhlYTI5YTEwNjA1ZjQ0ODc2ZmIyMTU4NmU0ODk0NTQyODA1MS4uYTJjMzAwNmQ1YTM5NWIy
OWYzODJhNWVmZmIzY2I2NWEwYTU4YTFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvci5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1NZXNzYWdlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8R2VuZXJp
Y1RpbWVyQ2xpZW50Lmg+CiAjaW5jbHVkZSA8VGhyZWFkVGltZXJDbGllbnQuaD4KKyNpbmNsdWRl
IDx3dGYvQ3VycmVudFRpbWUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTY1
LDcgKzY2LDYgQEAgdm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnNldENvbnRleHQoUGxh
dGZvcm06OkdyYXBoaWNzOjpHTEVTMkNvbnRleHQqIGNvbnQKICAgICB9CiAKICAgICBtX2xheWVy
UmVuZGVyZXIgPSBMYXllclJlbmRlcmVyOjpjcmVhdGUobV9jb250ZXh0KTsKLSAgICBtX2xheWVy
UmVuZGVyZXItPnNldFJvb3RMYXllcihtX3Jvb3RMYXllci5nZXQoKSk7CiB9CiAKIGJvb2wgV2Vi
UGFnZUNvbXBvc2l0b3JQcml2YXRlOjpoYXJkd2FyZUNvbXBvc2l0aW5nKCkgY29uc3QKQEAgLTc2
LDM0ICs3Niw1NiBAQCBib29sIFdlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6aGFyZHdhcmVDb21w
b3NpdGluZygpIGNvbnN0CiB2b2lkIFdlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6c2V0Um9vdExh
eWVyKExheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHJvb3RMYXllcikKIHsKICAgICBtX3Jvb3RMYXll
ciA9IHJvb3RMYXllcjsKLQotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1fbGF5
ZXJSZW5kZXJlci0+c2V0Um9vdExheWVyKG1fcm9vdExheWVyLmdldCgpKTsKIH0KIAotdm9pZCBX
ZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OmNvbW1pdChMYXllcldlYktpdFRocmVhZCogcm9vdExh
eWVyKQordm9pZCBXZWJQYWdlQ29tcG9zaXRvclByaXZhdGU6OnByZXBhcmVGcmFtZShkb3VibGUg
YW5pbWF0aW9uVGltZSkKIHsKLSAgICBpZiAoIXJvb3RMYXllcikKKyAgICBpZiAoIW1fbGF5ZXJS
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcm9vdExheWVyLT5jb21taXRPbkNvbXBv
c2l0aW5nVGhyZWFkKCk7CisgICAgLy8gVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSB0byB1c2UgY3Vy
cmVudFRpbWUoKSBiZWNhdXNlIHRoZSBhbmltYXRpb25zIGFyZQorICAgIC8vIHN0YXJ0ZWQgaW4g
dGhhdCB0aW1lIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGFuaW1hdGlvblRpbWUgPSBjdXJyZW50
VGltZSgpOworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5w
cmVwYXJlRnJhbWUoYW5pbWF0aW9uVGltZSwgbV9yb290TGF5ZXIuZ2V0KCkpOwogfQogCi12b2lk
IFdlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZTo6cmVuZGVyKGNvbnN0IEludFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEludFJlY3QmIHRyYW5zZm9ybWVkQ29udGVudHMpCit2b2lkIFdlYlBhZ2VDb21wb3Np
dG9yUHJpdmF0ZTo6cmVuZGVyKGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtSW4sIGNv
bnN0IEZsb2F0UmVjdCYgdHJhbnNmb3JtZWRDb250ZW50cywgY29uc3QgRmxvYXRSZWN0JiAvKnZp
ZXdwb3J0Ki8pCiB7Ci0gICAgLy8gSXQncyBub3Qgc2FmZSB0byBjYWxsIGludG8gdGhlIEJhY2tp
bmdTdG9yZSBpZiB0aGUgY29tcG9zaXRvciBoYXNuJ3QgYmVlbiBzZXQgeWV0LgotICAgIC8vIEZv
ciB0aHJlYWQgc2FmZXR5LCB3ZSBoYXZlIHRvIGRvIGl0IHVzaW5nIGEgcm91bmQtdHJpcCB0byB0
aGUgV2ViS2l0IHRocmVhZCwgc28gdGhlCi0gICAgLy8gZW1iZWRkZXIgbWlnaHQgY2FsbCB0aGlz
IGJlZm9yZSB0aGUgcm91bmQtdHJpcCB0byBXZWJQYWdlUHJpdmF0ZTo6c2V0Q29tcG9zaXRvcigp
IGlzCi0gICAgLy8gZG9uZS4KLSAgICBpZiAobV93ZWJQYWdlLT5jb21wb3NpdG9yKCkgIT0gdGhp
cykKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikgeworICAgICAgICAvLyBJdCdzIG5vdCBzYWZl
IHRvIGNhbGwgaW50byB0aGUgQmFja2luZ1N0b3JlIGlmIHRoZSBjb21wb3NpdG9yIGhhc24ndCBi
ZWVuIHNldCB5ZXQuCisgICAgICAgIC8vIEZvciB0aHJlYWQgc2FmZXR5LCB3ZSBoYXZlIHRvIGRv
IGl0IHVzaW5nIGEgcm91bmQtdHJpcCB0byB0aGUgV2ViS2l0IHRocmVhZCwgc28gdGhlCisgICAg
ICAgIC8vIGVtYmVkZGVyIG1pZ2h0IGNhbGwgdGhpcyBiZWZvcmUgdGhlIHJvdW5kLXRyaXAgdG8g
V2ViUGFnZVByaXZhdGU6OnNldENvbXBvc2l0b3IoKSBpcworICAgICAgICAvLyBkb25lLgorICAg
ICAgICBpZiAobV93ZWJQYWdlLT5jb21wb3NpdG9yKCkgIT0gdGhpcykKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAvLyBUaGUgY2xpcCByZWN0IGlzIGluIE9wZW5HTCBjb29yZGluYXRl
IHN5c3RlbSwgc28gdHVybiBpdCB1cHNpZGUgZG93biB0byBnZXQgdG8gd2luZG93IGNvb3JkaW5h
dGVzLgorICAgICAgICBJbnRSZWN0IGRzdFJlY3QoY2xpcFJlY3QueCgpLCBtX2NvbnRleHQtPnN1
cmZhY2VTaXplKCkuaGVpZ2h0KCkgLSBjbGlwUmVjdC55KCkgLSBjbGlwUmVjdC5oZWlnaHQoKSwg
Y2xpcFJlY3Qud2lkdGgoKSwgY2xpcFJlY3QuaGVpZ2h0KCkpOworICAgICAgICBtX3dlYlBhZ2Ut
Pm1fYmFja2luZ1N0b3JlLT5kLT5ibGl0Q29udGVudHMoZHN0UmVjdCwgZW5jbG9zaW5nSW50UmVj
dCh0cmFuc2Zvcm1lZENvbnRlbnRzKSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICAvLyBUaGUgQmFja2luZ1N0b3JlIGlzIHRoZSByb290IGxheWVyCi0gICAgaWYgKEJhY2tp
bmdTdG9yZSogYmFja2luZ1N0b3JlID0gbV93ZWJQYWdlLT5tX2JhY2tpbmdTdG9yZSkKLSAgICAg
ICAgYmFja2luZ1N0b3JlLT5kLT5ibGl0Q29udGVudHMoZHN0UmVjdCwgdHJhbnNmb3JtZWRDb250
ZW50cywgdHJ1ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjb250ZW50cyA9IG1f
d2ViUGFnZS0+bWFwRnJvbVRyYW5zZm9ybWVkRmxvYXRSZWN0KEZsb2F0UmVjdCh0cmFuc2Zvcm1l
ZENvbnRlbnRzKSk7Ci0gICAgICAgIGRyYXdMYXllcnMoZHN0UmVjdCwgY29udGVudHMpOworICAg
IG1fbGF5ZXJSZW5kZXJlci0+c2V0Q2xlYXJTdXJmYWNlT25EcmF3TGF5ZXJzKGZhbHNlKTsKKwor
ICAgIEZsb2F0UmVjdCBjb250ZW50cyA9IG1fd2ViUGFnZS0+bWFwRnJvbVRyYW5zZm9ybWVkRmxv
YXRSZWN0KHRyYW5zZm9ybWVkQ29udGVudHMpOworCisgICAgbV9sYXllclJlbmRlcmVyLT5zZXRW
aWV3cG9ydCh0YXJnZXRSZWN0LCBjbGlwUmVjdCwgY29udGVudHMsIG1fbGF5b3V0UmVjdEZvckNv
bXBvc2l0aW5nLCBtX2NvbnRlbnRzU2l6ZUZvckNvbXBvc2l0aW5nKTsKKworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zZm9ybSh0cmFuc2Zvcm1Jbik7CisgICAgdHJhbnNmb3JtICo9ICpt
X3dlYlBhZ2UtPm1fdHJhbnNmb3JtYXRpb25NYXRyaXg7CisKKyAgICBpZiAoIWRyYXdzUm9vdExh
eWVyKCkpCisgICAgICAgIG1fd2ViUGFnZS0+bV9iYWNraW5nU3RvcmUtPmQtPmNvbXBvc2l0ZUNv
bnRlbnRzKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSwgdHJhbnNmb3JtLCBjb250ZW50cyk7CisKKyAg
ICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Y29tcG9zaXRlTGF5
ZXJzKHRyYW5zZm9ybSwgbV9yb290TGF5ZXIuZ2V0KCkpOworCisgICAgbV9sYXN0Q29tcG9zaXRp
bmdSZXN1bHRzID0gbV9sYXllclJlbmRlcmVyLT5sYXN0UmVuZGVyaW5nUmVzdWx0cygpOworCisg
ICAgaWYgKG1fbGFzdENvbXBvc2l0aW5nUmVzdWx0cy5uZWVkc0FuaW1hdGlvbkZyYW1lKSB7Cisg
ICAgICAgIFBsYXRmb3JtOjpBbmltYXRpb25GcmFtZVJhdGVDb250cm9sbGVyOjppbnN0YW5jZSgp
LT5hZGRDbGllbnQodGhpcyk7CisgICAgICAgIG1fd2ViUGFnZS0+dXBkYXRlRGVsZWdhdGVkT3Zl
cmxheXMoKTsKICAgICB9CiB9CiAKQEAgLTEyMiw3ICsxNDQsMjUgQEAgYm9vbCBXZWJQYWdlQ29t
cG9zaXRvclByaXZhdGU6OmRyYXdMYXllcnMoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgY29uc3Qg
RmxvYXRSZWMKICAgICAgICAgc2hvdWxkQ2xlYXIgPSBzaG91bGRDbGVhciB8fCAhYmFja2luZ1N0
b3JlLT5kLT5pc09wZW5HTENvbXBvc2l0aW5nKCk7CiAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRD
bGVhclN1cmZhY2VPbkRyYXdMYXllcnMoc2hvdWxkQ2xlYXIpOwogCi0gICAgbV9sYXllclJlbmRl
cmVyLT5kcmF3TGF5ZXJzKGNvbnRlbnRzLCBtX2xheW91dFJlY3RGb3JDb21wb3NpdGluZywgbV9j
b250ZW50c1NpemVGb3JDb21wb3NpdGluZywgZHN0UmVjdCk7CisgICAgLy8gT3BlbkdMIHdpbmRv
dyBjb29yZGluYXRlcyBvcmlnaW4gaXMgYXQgdGhlIGxvd2VyIGxlZnQgY29ybmVyIG9mIHRoZSBz
dXJmYWNlIHdoaWxlCisgICAgLy8gV2ViS2l0IHVzZXMgdXBwZXIgbGVmdCBhcyB0aGUgb3JpZ2lu
IG9mIHRoZSB3aW5kb3cgY29vcmRpbmF0ZSBzeXN0ZW0uIFRoZSBwYXNzZWQgaW4gJ2RzdFJlY3Qn
CisgICAgLy8gaXMgaW4gV2ViS2l0IHdpbmRvdyBjb29yZGluYXRlIHN5c3RlbS4gSGVyZSB3ZSBz
ZXR1cCB0aGUgdmlld3BvcnQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUKKyAgICAvLyBpbiBP
cGVuR0wgd2luZG93IGNvb3JkaW5hdGVzLgorICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlcGFyZUZy
YW1lKGN1cnJlbnRUaW1lKCksIG1fcm9vdExheWVyLmdldCgpKTsKKyAgICBpbnQgdmlld3BvcnRZ
ID0gc3RkOjptYXgoMCwgbV9jb250ZXh0LT5zdXJmYWNlU2l6ZSgpLmhlaWdodCgpIC0gZHN0UmVj
dC5tYXhZKCkpOworICAgIEludFJlY3Qgdmlld3BvcnQgPSBJbnRSZWN0KGRzdFJlY3QueCgpLCB2
aWV3cG9ydFksIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7CisKKyAgICBtX2xh
eWVyUmVuZGVyZXItPnNldFZpZXdwb3J0KHZpZXdwb3J0LCB2aWV3cG9ydCwgY29udGVudHMsIG1f
bGF5b3V0UmVjdEZvckNvbXBvc2l0aW5nLCBtX2NvbnRlbnRzU2l6ZUZvckNvbXBvc2l0aW5nKTsK
KworICAgIC8vIFdlYktpdCB1c2VzIHJvdyB2ZWN0b3JzIHdoaWNoIGFyZSBtdWx0aXBsaWVkIGJ5
IHRoZSBtYXRyaXggb24gdGhlIGxlZnQgKGkuZS4gdipNKQorICAgIC8vIFRyYW5zZm9ybWF0aW9u
cyBhcmUgY29tcG9zZWQgb24gdGhlIGxlZnQgc28gdGhhdCBNMS54Zm9ybShNMikgbWVhbnMgTTIq
TTEKKyAgICAvLyBXZSB0aGVyZWZvcmUgc3RhcnQgd2l0aCBvdXIgKG90aG9nb25hbCkgcHJvamVj
dGlvbiBtYXRyaXgsIHdoaWNoIHdpbGwgYmUgYXBwbGllZAorICAgIC8vIGFzIHRoZSBsYXN0IHRy
YW5zZm9ybWF0aW9uLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IExheWVy
UmVuZGVyZXI6Om9ydGhvTWF0cml4KDAsIGNvbnRlbnRzLndpZHRoKCksIGNvbnRlbnRzLmhlaWdo
dCgpLCAwLCAtMTAwMCwgMTAwMCk7CisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC1jb250ZW50
cy54KCksIC1jb250ZW50cy55KCksIDApOworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAg
bV9sYXllclJlbmRlcmVyLT5jb21wb3NpdGVMYXllcnModHJhbnNmb3JtLCBtX3Jvb3RMYXllci5n
ZXQoKSk7CisKICAgICBtX2xhc3RDb21wb3NpdGluZ1Jlc3VsdHMgPSBtX2xheWVyUmVuZGVyZXIt
Pmxhc3RSZW5kZXJpbmdSZXN1bHRzKCk7CiAKICAgICBpZiAobV9sYXN0Q29tcG9zaXRpbmdSZXN1
bHRzLm5lZWRzQW5pbWF0aW9uRnJhbWUpIHsKQEAgLTIwMCwxNSArMjQwLDIxIEBAIFdlYlBhZ2VD
b21wb3NpdG9yQ2xpZW50KiBXZWJQYWdlQ29tcG9zaXRvcjo6Y2xpZW50KCkgY29uc3QKICAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBXZWJQYWdlQ29tcG9zaXRvcjo6cHJlcGFyZUZyYW1lKFBsYXRm
b3JtOjpHcmFwaGljczo6R0xFUzJDb250ZXh0KiBjb250ZXh0LCBkb3VibGUgdGltZXN0YW1wKQor
dm9pZCBXZWJQYWdlQ29tcG9zaXRvcjo6cHJlcGFyZUZyYW1lKFBsYXRmb3JtOjpHcmFwaGljczo6
R0xFUzJDb250ZXh0KiBjb250ZXh0LCBkb3VibGUgYW5pbWF0aW9uVGltZSkKIHsKICAgICBkLT5z
ZXRDb250ZXh0KGNvbnRleHQpOworICAgIGQtPnByZXBhcmVGcmFtZShhbmltYXRpb25UaW1lKTsK
IH0KIAotdm9pZCBXZWJQYWdlQ29tcG9zaXRvcjo6cmVuZGVyKFBsYXRmb3JtOjpHcmFwaGljczo6
R0xFUzJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgZHN0UmVjdCwg
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmIGNvbnRlbnRzKQordm9pZCBXZWJQYWdlQ29tcG9zaXRv
cjo6cmVuZGVyKFBsYXRmb3JtOjpHcmFwaGljczo6R0xFUzJDb250ZXh0KiBjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiB0YXJn
ZXRSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0JiBjbGlwUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQ
bGF0Zm9ybTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6RmxvYXRSZWN0JiBjb250ZW50cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6RmxvYXRSZWN0JiB2
aWV3cG9ydCkKIHsKICAgICBkLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIGQtPnJlbmRlcihk
c3RSZWN0LCBjb250ZW50cyk7CisgICAgZC0+cmVuZGVyKHRhcmdldFJlY3QsIGNsaXBSZWN0LCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeChyZWludGVycHJldF9jYXN0PGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4Jj4odHJhbnNmb3JtKSksIGNvbnRlbnRzLCB2aWV3cG9ydCk7CiB9CiAKIHZvaWQgV2Vi
UGFnZUNvbXBvc2l0b3I6OmNsZWFudXAoUGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMkNvbnRleHQq
IGNvbnRleHQpCkBAIC0yNTAsNyArMjk2LDEyIEBAIHZvaWQgV2ViUGFnZUNvbXBvc2l0b3I6OnBy
ZXBhcmVGcmFtZShQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyQ29udGV4dCosIGRvdWJsZSkKIHsK
IH0KIAotdm9pZCBXZWJQYWdlQ29tcG9zaXRvcjo6cmVuZGVyKFBsYXRmb3JtOjpHcmFwaGljczo6
R0xFUzJDb250ZXh0KiwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmLCBjb25zdCBQbGF0Zm9ybTo6
SW50UmVjdCYpCit2b2lkIFdlYlBhZ2VDb21wb3NpdG9yOjpyZW5kZXIoUGxhdGZvcm06OkdyYXBo
aWNzOjpHTEVTMkNvbnRleHQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFBsYXRmb3JtOjpJbnRSZWN0JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBQbGF0Zm9ybTo6SW50UmVjdCYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6RmxvYXRSZWN0JiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6RmxvYXRSZWN0JikKIHsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvci5oIGIv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvci5oCmluZGV4IDEx
YmYyODQxZmE5OWNlNmJhZTcxMjI1YmI5NmViMzJkYTZhMDQ0OTIuLjkxM2Y1MDZlZGJiZjU1ZWQ0
ZWI5YjAzMWEyMDgzOTZkZTM2NDc2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViUGFnZUNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yLmgKQEAgLTM5LDEwICszOSwxNCBAQCBwdWJsaWM6CiAK
ICAgICBXZWJQYWdlQ29tcG9zaXRvckNsaWVudCogY2xpZW50KCkgY29uc3Q7CiAKLSAgICB2b2lk
IHByZXBhcmVGcmFtZShQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyQ29udGV4dCosIGRvdWJsZSB0
aW1lc3RhbXApOwotCi0gICAgLy8gRklYTUU6IGRzdFJlY3Qgc2hvdWxkIGJlIGEgUGxhdGZvcm06
OlRyYW5zZm9ybWF0aW9uTWF0cml4IGluc3RlYWQuIFBSMTQyNjI4Ci0gICAgdm9pZCByZW5kZXIo
UGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMkNvbnRleHQqLCBjb25zdCBQbGF0Zm9ybTo6SW50UmVj
dCYgZHN0UmVjdCwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGNvbnRlbnRzKTsKKyAgICB2b2lk
IHByZXBhcmVGcmFtZShQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyQ29udGV4dCosIGRvdWJsZSBh
bmltYXRpb25UaW1lKTsKKworICAgIHZvaWQgcmVuZGVyKFBsYXRmb3JtOjpHcmFwaGljczo6R0xF
UzJDb250ZXh0KiwKKyAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgdGFy
Z2V0UmVjdCwKKyAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgY2xpcFJl
Y3QsCisgICAgICAgICAgICAgICAgY29uc3QgUGxhdGZvcm06OlRyYW5zZm9ybWF0aW9uTWF0cml4
JiwKKyAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6RmxvYXRSZWN0JiBjb250ZW50cywK
KyAgICAgICAgICAgICAgICBjb25zdCBQbGF0Zm9ybTo6RmxvYXRSZWN0JiB2aWV3cG9ydCk7CiAK
ICAgICB2b2lkIGNsZWFudXAoUGxhdGZvcm06OkdyYXBoaWNzOjpHTEVTMkNvbnRleHQqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRv
ckNsaWVudC5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRv
ckNsaWVudC5oCmluZGV4IDAwNDk3ZWU4YWEwOTI4MmM3Njk5ZjYxMTgwOTNlYWNiZTFmN2E2YWEu
LjcwZGQ4Mjg5Zjc2YWJhNjEzZTFlNTllYjVhZTEzOWVlNDE3OWI1M2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZUNvbXBvc2l0b3JDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yQ2xpZW50LmgK
QEAgLTMyLDcgKzMyLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBkb3VibGUgcmVxdWVzdEFu
aW1hdGlvbkZyYW1lKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKGRvdWJsZSBh
bmltYXRpb25GcmFtZVRpbWVzdGFtcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2xl
YW51cCgpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlQ29tcG9zaXRvcl9wLmggYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDb21wb3NpdG9yX3AuaAppbmRleCA0YmQwNmM0
MDQ4M2EwNzFiYWFhNWZmZTZhYmRhYmM1OWU4YzQ1MzhkLi5lM2NkODdmNmM4MTM3NzZmZTQ2ZTVl
NTYxZTRmOTNiMTdlNzA0NjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2VDb21wb3NpdG9yX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkv
QXBpL1dlYlBhZ2VDb21wb3NpdG9yX3AuaApAQCAtNTAsNiArNTAsMTUgQEAgcHVibGljOgogCiAg
ICAgfldlYlBhZ2VDb21wb3NpdG9yUHJpdmF0ZSgpOwogCisgICAgLy8gUHVibGljIEFQSQorICAg
IHZvaWQgcHJlcGFyZUZyYW1lKGRvdWJsZSBhbmltYXRpb25UaW1lKTsKKyAgICB2b2lkIHJlbmRl
cihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXRSZWN0LAorICAgICAgICAgICAgICAgIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGNsaXBSZWN0LAorICAgICAgICAgICAgICAgIGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwKKyAgICAgICAgICAgICAgICBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmIGNvbnRlbnRzLCAvLyBUaGlzIGlzIHB1YmxpYyBBUEksIHRodXMgdGFr
ZXMgdHJhbnNmb3JtZWQgY29udGVudHMKKyAgICAgICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIHZpZXdwb3J0KTsKKworICAgIC8vIEludGVybmFsCiAgICAgYm9vbCBoYXJkd2Fy
ZUNvbXBvc2l0aW5nKCkgY29uc3Q7CiAKICAgICBQbGF0Zm9ybTo6R3JhcGhpY3M6OkdMRVMyQ29u
dGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQpAQCAtNTgsMTIgKzY3
LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OkxheWVyQ29tcG9zaXRpbmdUaHJlYWQqIHJvb3RM
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRS
b290TGF5ZXIoV2ViQ29yZTo6TGF5ZXJDb21wb3NpdGluZ1RocmVhZCopOwogCi0gICAgdm9pZCBj
b21taXQoV2ViQ29yZTo6TGF5ZXJXZWJLaXRUaHJlYWQqIHJvb3RMYXllclByb3h5KTsKLQotICAg
IC8vIFRoaXMgaXMgbWFwcGVkIGZyb20gdGhlIHB1YmxpYyBBUEksIHRodXMgdGFrZXMgdHJhbnNm
b3JtZWQgY29udGVudHMKLSAgICB2b2lkIHJlbmRlcihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBk
c3RSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0cmFuc2Zvcm1lZENvbnRlbnRzKTsKLQot
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgV2ViUGFnZUNvbXBvc2l0b3IgZHJhd3MgdGhlIHJv
b3QgbGF5ZXIsIGZhbHNlIGlmIHRoZSBCYWNraW5nU3RvcmUgZHJhd3MgdGhlIHJvb3QgbGF5ZXIK
ICAgICBib29sIGRyYXdzUm9vdExheWVyKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREcmF3c1Jvb3RM
YXllcihib29sIGRyYXdzUm9vdExheWVyKSB7IG1fZHJhd3NSb290TGF5ZXIgPSBkcmF3c1Jvb3RM
YXllcjsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50QmxhY2tCZXJyeS5jcHAKaW5kZXggZDIzNDA4
NzlkOTYzNzEwYWY3ZTA0MTBhMmI2NmNjNTVkYTNkMjYwZC4uYTJkNmI0YzMzNWFkZDY3YzI2NmVj
OWY5YTI5NGE4MjQ5ZWE1NGJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEJsYWNrQmVycnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRCbGFja0JlcnJ5LmNw
cApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
R2VvbG9jYXRpb24uaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnRCbGFj
a0JlcnJ5LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>