<?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>87877</bug_id>
          
          <creation_ts>2012-05-30 11:06:35 -0700</creation_ts>
          <short_desc>[chromium] Move drawing code for RenderSurfaces into LayerRendererChromium</short_desc>
          <delta_ts>2012-05-31 13:42:01 -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>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>87970</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>637435</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 11:06:35 -0700</bug_when>
    <thetext>[chromium] Move drawing code for RenderSurfaces into LayerRendererChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637447</commentid>
    <comment_count>1</comment_count>
      <attachid>144874</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 11:12:29 -0700</bug_when>
    <thetext>Created attachment 144874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637458</commentid>
    <comment_count>2</comment_count>
      <attachid>144874</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-30 11:20:23 -0700</bug_when>
    <thetext>Comment on attachment 144874
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:172
&gt; +Platform3DObject CCLayerImpl::contentsTextureId() const

just use &quot;unsigned&quot; for texture IDs

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:-482
&gt; -        if (layer-&gt;maskLayer()) {
&gt; -            renderSurface-&gt;setMaskLayer(layer-&gt;maskLayer());
&gt; +        if (layer-&gt;maskLayer())
&gt;              layer-&gt;maskLayer()-&gt;setTargetRenderSurface(renderSurface);
&gt; -        } else
&gt; -            renderSurface-&gt;setMaskLayer(0);

I&apos;m not sure I understand this change - could you explain?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.h:29
&gt; +#include &quot;GraphicsTypes3D.h&quot;

this is unnecessary, just use unsigned for texture ids

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.h:36
&gt; +#include &lt;public/WebFilterOperations.h&gt;
&gt;  #include &lt;wtf/PassOwnPtr.h&gt;
&gt;  
&gt; +namespace WebKit {
&gt; +class WebFilterOperations;
&gt; +}

you don&apos;t need a forward declaration if you are #including the header</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637465</commentid>
    <comment_count>3</comment_count>
      <attachid>144874</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 11:25:41 -0700</bug_when>
    <thetext>Comment on attachment 144874
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:172
&gt;&gt; +Platform3DObject CCLayerImpl::contentsTextureId() const
&gt; 
&gt; just use &quot;unsigned&quot; for texture IDs

done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:-482
&gt;&gt; -            renderSurface-&gt;setMaskLayer(0);
&gt; 
&gt; I&apos;m not sure I understand this change - could you explain?

RenderSurface uses as its mask either either m_owningLayer-&gt;maskLayer or m_owningLayer-&gt;replicaLayer-&gt;maskLayer. So, while being a bit of a lie here, it&apos;s also not needed, the surface already has access to this.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.h:29
&gt;&gt; +#include &quot;GraphicsTypes3D.h&quot;
&gt; 
&gt; this is unnecessary, just use unsigned for texture ids

k

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.h:36
&gt;&gt; +}
&gt; 
&gt; you don&apos;t need a forward declaration if you are #including the header

oops yeh, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637473</commentid>
    <comment_count>4</comment_count>
      <attachid>144879</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 11:31:40 -0700</bug_when>
    <thetext>Created attachment 144879
Patch

Comments addressed, and dropped a couple unneeded headers from CCRenderSurface.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637679</commentid>
    <comment_count>5</comment_count>
      <attachid>144879</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-05-30 14:06:02 -0700</bug_when>
    <thetext>Comment on attachment 144879
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:657
&gt; +    // The replica is always drawn first, so free after drawing the contents.
&gt; +    bool shouldReleaseTextures = !quad-&gt;isReplica();

What if the contents surface quad is occluded/clipped but the replica is not? How would this texture get unreserved? The previous behavior looks like we always unreserved after the first render surface quad draws (possibly a replica) and happily because nothing else reserved textures (causing potential evictions), then those textures were still &quot;valid&quot; to use for the second render surface quad even if those textures weren&apos;t reserved.  (Ack.) However, the previous behavior seems mildly safer in that you couldn&apos;t ever have permanently reserved surface textures.

How can this be better? Maybe you should unreserve all render surface textures at the end of a frame? Do you need some sort of dummy quad that unreserves textures? Can you check to see if the quads actually get added and set a shouldReleaseTextures flag on them?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:680
&gt; +    if (drawingSurface-&gt;hasValidContentsTexture()) {

Since you can&apos;t draw the background without a contents texture to draw into, can you move this early out up above with the contentsDeviceTransform.isInvertible check?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:67
&gt; +    surface-&gt;appendQuads(quadCuller, sharedQuadState.get(), false, surfaceDamageRect());

style nit: unnamed boolean function arg.  Can you name this isReplica still like in the previous code or have two different appendQuads functions?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:47
&gt; +static const int debugSurfaceBorderWidth = 2;

(We really need a CCColorConstants class... Not in this patch, though.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637735</commentid>
    <comment_count>6</comment_count>
      <attachid>144879</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 15:03:44 -0700</bug_when>
    <thetext>Comment on attachment 144879
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:657
&gt;&gt; +    bool shouldReleaseTextures = !quad-&gt;isReplica();
&gt; 
&gt; What if the contents surface quad is occluded/clipped but the replica is not? How would this texture get unreserved? The previous behavior looks like we always unreserved after the first render surface quad draws (possibly a replica) and happily because nothing else reserved textures (causing potential evictions), then those textures were still &quot;valid&quot; to use for the second render surface quad even if those textures weren&apos;t reserved.  (Ack.) However, the previous behavior seems mildly safer in that you couldn&apos;t ever have permanently reserved surface textures.
&gt; 
&gt; How can this be better? Maybe you should unreserve all render surface textures at the end of a frame? Do you need some sort of dummy quad that unreserves textures? Can you check to see if the quads actually get added and set a shouldReleaseTextures flag on them?

Oh argh.. yeh. Adding an unprotectAllTextures at the end of the frame.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:680
&gt;&gt; +    if (drawingSurface-&gt;hasValidContentsTexture()) {
&gt; 
&gt; Since you can&apos;t draw the background without a contents texture to draw into, can you move this early out up above with the contentsDeviceTransform.isInvertible check?

yup!

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:67
&gt;&gt; +    surface-&gt;appendQuads(quadCuller, sharedQuadState.get(), false, surfaceDamageRect());
&gt; 
&gt; style nit: unnamed boolean function arg.  Can you name this isReplica still like in the previous code or have two different appendQuads functions?

right, i was kinda like &quot;hm..&quot; about this, thanks.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:47
&gt;&gt; +static const int debugSurfaceBorderWidth = 2;
&gt; 
&gt; (We really need a CCColorConstants class... Not in this patch, though.)

true!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637739</commentid>
    <comment_count>7</comment_count>
      <attachid>144933</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 15:05:18 -0700</bug_when>
    <thetext>Created attachment 144933
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637923</commentid>
    <comment_count>8</comment_count>
      <attachid>144933</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-30 18:55:15 -0700</bug_when>
    <thetext>Comment on attachment 144933
Patch

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

R=me, few nits here and there.  Nice work.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:69
&gt; +    bool isReplica;
&gt; +
&gt;      OwnPtr&lt;CCSharedQuadState&gt; sharedQuadState = surface-&gt;createSharedQuadState();
&gt; -    if (layer-&gt;hasDebugBorders()) {
&gt; -        Color color(debugSurfaceBorderColorRed, debugSurfaceBorderColorGreen, debugSurfaceBorderColorBlue, debugSurfaceBorderAlpha);
&gt; -        quadCuller.appendSurface(CCDebugBorderDrawQuad::create(sharedQuadState.get(), surface-&gt;contentRect(), color, debugSurfaceBorderWidth));
&gt; -    }
&gt; -    bool isReplica = false;
&gt; -    quadCuller.appendSurface(CCRenderSurfaceDrawQuad::create(sharedQuadState.get(), surface-&gt;contentRect(), layer, surfaceDamageRect(), isReplica));
&gt; +    isReplica = false;

I&apos;d prefer initializing this bool on the same line as we declare it, just to be a bit clearer what&apos;s going on

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:112
&gt; +    IntSize requiredSize(m_contentRect.size());
&gt; +    return m_contentsTexture &amp;&amp; m_contentsTexture-&gt;isReserved() &amp;&amp; m_contentsTexture-&gt;isValid(requiredSize, GraphicsContext3D::RGBA);

why is a temp IntSize needed here? can you just pass m_contentRect.size() to isValid() ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:142
&gt; +    IntSize requiredSize(m_contentRect.size());
&gt; +    return m_backgroundTexture &amp;&amp; m_backgroundTexture-&gt;isReserved() &amp;&amp; m_backgroundTexture-&gt;isValid(requiredSize, GraphicsContext3D::RGBA);

same Q here

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:264
&gt; +        int red = !forReplica ? debugSurfaceBorderColorRed : debugReplicaBorderColorRed;

the ! ? : makes my brain hurt - why not the other way &apos;round i.e. &quot;forReplica ? debugReplicaBorderColorRed : ...&quot; ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.cpp:46
&gt; +    m_filters.assign(filters);
&gt; +    m_backgroundFilters.assign(backgroundFilters);

can you put these in the initializer list like other members, or does that not work with WebFilterOperations? i.e. just have

, m_filters(filters)
, m_backgroundFilters(backgroundFilters)

?

If that doesn&apos;t work we should add the appropriate c&apos;tor to WebFilterOperations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637948</commentid>
    <comment_count>9</comment_count>
      <attachid>144933</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 19:49:20 -0700</bug_when>
    <thetext>Comment on attachment 144933
Patch

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

thanks!

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:69
&gt;&gt; +    isReplica = false;
&gt; 
&gt; I&apos;d prefer initializing this bool on the same line as we declare it, just to be a bit clearer what&apos;s going on

k

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:112
&gt;&gt; +    return m_contentsTexture &amp;&amp; m_contentsTexture-&gt;isReserved() &amp;&amp; m_contentsTexture-&gt;isValid(requiredSize, GraphicsContext3D::RGBA);
&gt; 
&gt; why is a temp IntSize needed here? can you just pass m_contentRect.size() to isValid() ?

sure yeh.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurface.cpp:264
&gt;&gt; +        int red = !forReplica ? debugSurfaceBorderColorRed : debugReplicaBorderColorRed;
&gt; 
&gt; the ! ? : makes my brain hurt - why not the other way &apos;round i.e. &quot;forReplica ? debugReplicaBorderColorRed : ...&quot; ?

haha ok, i liked surface as the &quot;true&quot; case, but that&apos;s fine :)

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderSurfaceDrawQuad.cpp:46
&gt;&gt; +    m_backgroundFilters.assign(backgroundFilters);
&gt; 
&gt; can you put these in the initializer list like other members, or does that not work with WebFilterOperations? i.e. just have
&gt; 
&gt; , m_filters(filters)
&gt; , m_backgroundFilters(backgroundFilters)
&gt; 
&gt; ?
&gt; 
&gt; If that doesn&apos;t work we should add the appropriate c&apos;tor to WebFilterOperations

Right it doesn&apos;t have a copy c&apos;tor. It seemed un-public-api-like, so I didn&apos;t question, but we should add that then!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638619</commentid>
    <comment_count>10</comment_count>
      <attachid>145128</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-31 12:05:38 -0700</bug_when>
    <thetext>Created attachment 145128
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638680</commentid>
    <comment_count>11</comment_count>
      <attachid>145128</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-31 13:41:56 -0700</bug_when>
    <thetext>Comment on attachment 145128
Patch for landing

Clearing flags on attachment: 145128

Committed r119139: &lt;http://trac.webkit.org/changeset/119139&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638681</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-31 13:42:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144874</attachid>
            <date>2012-05-30 11:12:29 -0700</date>
            <delta_ts>2012-05-30 11:31:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87877-20120530141228.patch</filename>
            <type>text/plain</type>
            <size>58519</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhhNmM2ZWU0MjVkNzg0
ZjUxNTI1MjVjZThjZWQ3YzljNzQ4YWViMS4uNWM1MjFhMzZlZTFlNDFkMTEzMmQxMmFmZWZjZTQ0
NDkyZmIzNjVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA1LTMwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92
ZSBkcmF3aW5nIGNvZGUgZm9yIFJlbmRlclN1cmZhY2VzIGludG8gTGF5ZXJSZW5kZXJlckNocm9t
aXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFk
ZCBkYXRhIHRvIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkIHNvIHRoYXQgdGhlIG9ubHkgdXNlIG9m
CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSBkaXJlY3RseSBmcm9tIExheWVyUmVuZGVyZXJDaHJv
bWl1bSBpcyB0bworICAgICAgICByZXNlcnZlLCByZWxlYXNlLCBhbmQgdXNlIHRoZSBzdXJmYWNl
J3MgdGV4dHVyZXMsIGFuZCB0byBzZXQgdGhlCisgICAgICAgIHNjaXNzb3IgcmVjdC4gRWFjaCBv
ZiB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgZG9uZSBpbmRlcGVuZGVudAorICAgICAgICBvZiB0aGlz
IGNoYW5nZS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRl
clN1cmZhY2VRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKExheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNvbnRlbnRzVGV4dHVy
ZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaDoKKyAgICAg
ICAgKENDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YXBw
ZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZENvbnRlbnRz
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VCYWNr
Z3JvdW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhhc1Zh
bGlkQmFja2dyb3VuZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpoYXNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cmVwbGljYUhh
c01hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDUmVuZGVyU3VyZmFjZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6Om1hc2tUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQ6OmZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmJhY2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZWRMYXllckltcGw6OmNvbnRlbnRzVGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ1Rp
bGVkTGF5ZXJJbXBsKToKKwogMjAxMi0wNS0yOSAgSm9uYXRoYW4gRG9uZyAgPGpvbmF0aGFuLmRv
bmdAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBSZWZhY3Rvcmlu
ZyBodHRwL3Byb3h5IGF1dGhlbnRpY2F0aW9uIHRvIHVzZSBhdXRoY2FsbGJhY2sgbWVjaGFuaXNt
IGludHJvZHVjZWQgd2l0aCBsaWJjdXJsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkx
OTdkYTBmODYyNDQzODA3Y2VmOTkxNGZhY2E4YTkzMzUxYzVlN2YuLmY5NmI4NWY1ODBlYzQzZGJm
OTM3MGFkYzAzNTk5NTIzMTIyN2ExMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTItMDUtMzAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGRyYXdpbmcgY29kZSBmb3IgUmVuZGVyU3Vy
ZmFjZXMgaW50byBMYXllclJlbmRlcmVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTA1LTI5ICBEYXZpZCBCYXJyICA8ZGF2
aWRiYXJyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgRU5BQkxFX0NTU19JTUFH
RV9SRVNPTFVUSU9OIGNvbXBpbGUgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKaW5kZXggYTlmM2Q0NjY1ZDM2ZTUyOGQzZmUzZmM5MWM4NjAyNWY0ZTlhODdlZC4uNTI3
NDdiZTljZDQ2OTk0ZTY3YTRhZDNiNDhmNzgxZjU0M2I1YTYzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00Niw2ICs0Niw4IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1Db2xvci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGhyb3R0bGVkVGV4dHVyZVVw
bG9hZGVyLmgiCkBAIC01NiwxMSArNTgsMTMgQEAKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVy
RHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0lPU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyUXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwu
aCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgi
CiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9D
Q1JlbmRlclN1cmZhY2VGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1
YWQuaCIKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0ND
VGlsZURyYXdRdWFkLmgiCkBAIC01NjgsNyArNTcyLDIxIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCog
cXVhCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
LCA2ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkKiBxdWFkKQorc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZpbHRlcnMoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMsIE1hbmFnZWRUZXh0dXJlKiBzb3VyY2VUZXh0dXJlKQoreworICAgIGlm
IChmaWx0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CisKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGZpbHRlckNvbnRleHQgPSBDQ1Byb3h5OjpoYXNJbXBs
VGhyZWFkKCkgPyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0Rm9ySW1wbFRocmVhZCgpIDog
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CisKKyAgICBsYXllclJlbmRlcmVyLT5jb250ZXh0
KCktPmZsdXNoKCk7CisKKyAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmlsdGVyczo6YXBwbHko
ZmlsdGVycywgc291cmNlVGV4dHVyZS0+dGV4dHVyZUlkKCksIHNvdXJjZVRleHR1cmUtPnNpemUo
KSwgZmlsdGVyQ29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqIHF1
YWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkK
IHsKICAgICAvLyBUaGlzIG1ldGhvZCBkcmF3cyBhIGJhY2tncm91bmQgZmlsdGVyLCB3aGljaCBh
cHBsaWVzIGEgZmlsdGVyIHRvIGFueSBwaXhlbHMgYmVoaW5kIHRoZSBxdWFkIGFuZCBzZWVuIHRo
cm91Z2ggaXRzIGJhY2tncm91bmQuCiAgICAgLy8gVGhlIGFsZ29yaXRobSB3b3JrcyBhcyBmb2xs
b3dzOgpAQCAtNTg1LDcgKzYwMyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAgICAgLy8g
UGl4ZWwgY29waWVzIGluIHRoaXMgYWxnb3JpdGhtIG9jY3VyIGF0IHN0ZXBzIDIsIDMsIDQsIGFu
ZCA1LgogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBkcmF3aW5nU3VyZmFjZSA9IHF1YWQtPmxheWVy
KCktPnJlbmRlclN1cmZhY2UoKTsKLSAgICBpZiAoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRG
aWx0ZXJzKCkuaXNFbXB0eSgpKQorICAgIGlmIChxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIG9ubHkgYWxsb3cg
YmFja2dyb3VuZCBmaWx0ZXJzIG9uIHRoZSByb290IHJlbmRlciBzdXJmYWNlIGJlY2F1c2Ugb3Ro
ZXIgc3VyZmFjZXMgbWF5IGNvbnRhaW4KQEAgLTU5MywxNyArNjExLDIxIEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQqCiAgICAgaWYgKCFpc0N1cnJlbnRSZW5kZXJTdXJmYWNlKG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc3VyZmFjZURyYXdUcmFuc2Zvcm0gPSBxdWFkLT5pc1JlcGxpY2EoKSA/IGRyYXdp
bmdTdXJmYWNlLT5yZXBsaWNhRHJhd1RyYW5zZm9ybSgpIDogZHJhd2luZ1N1cmZhY2UtPmRyYXdU
cmFuc2Zvcm0oKTsKLQogICAgIC8vIEZJWE1FOiBEbyBhIHNpbmdsZSByZWFkYmFjayBmb3IgYm90
aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2FjaGUgdGhlIGZpbHRlcmVkIHJlc3VsdHMg
KG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1c2VkKS4KLSAgICBJbnRSZWN0IGRldmlj
ZVJlY3QgPSBkcmF3aW5nU3VyZmFjZS0+cmVhZGJhY2tEZXZpY2VDb250ZW50UmVjdCh0aGlzLCBz
dXJmYWNlRHJhd1RyYW5zZm9ybSk7CisgICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChjb250ZW50c0RldmljZVRyYW5zZm9y
bSwgc2hhcmVkR2VvbWV0cnlRdWFkKCkuYm91bmRpbmdCb3goKSkpOworCisgICAgaW50IHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdDsKKyAgICBkcmF3aW5nU3VyZmFjZS0+YmFja2dyb3VuZEZpbHRl
cnMoKS5nZXRPdXRzZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CisgICAgZGV2aWNlUmVj
dC5tb3ZlKC1sZWZ0LCAtdG9wKTsKKyAgICBkZXZpY2VSZWN0LmV4cGFuZChsZWZ0ICsgcmlnaHQs
IHRvcCArIGJvdHRvbSk7CisKICAgICBkZXZpY2VSZWN0LmludGVyc2VjdChtX2N1cnJlbnRSZW5k
ZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpKTsKIAogICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4g
ZGV2aWNlQmFja2dyb3VuZFRleHR1cmUgPSBNYW5hZ2VkVGV4dHVyZTo6Y3JlYXRlKG1fcmVuZGVy
U3VyZmFjZVRleHR1cmVNYW5hZ2VyLmdldCgpKTsKICAgICBpZiAoIWdldEZyYW1lYnVmZmVyVGV4
dHVyZShkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwgZGV2aWNlUmVjdCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFNrQml0bWFwIGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZCA9IGRyYXdp
bmdTdXJmYWNlLT5hcHBseUZpbHRlcnModGhpcywgZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRG
aWx0ZXJzKCksIGRldmljZUJhY2tncm91bmRUZXh0dXJlLmdldCgpKTsKKyAgICBTa0JpdG1hcCBm
aWx0ZXJlZERldmljZUJhY2tncm91bmQgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+YmFja2dy
b3VuZEZpbHRlcnMoKSwgZGV2aWNlQmFja2dyb3VuZFRleHR1cmUuZ2V0KCkpOwogICAgIGlmICgh
ZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kLmdldFRleHR1cmUoKSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC02MTMsMjkgKzYzNSwxNDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdC
YWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCoKICAgICBpZiAo
IWRyYXdpbmdTdXJmYWNlLT5wcmVwYXJlQmFja2dyb3VuZFRleHR1cmUodGhpcykpCiAgICAgICAg
IHJldHVybjsKIAotICAgIC8vIFRoaXMgbXVzdCBiZSBjb21wdXRlZCBiZWZvcmUgc3dpdGNoaW5n
IHRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UgdG8gdGhlIGJhY2tncm91bmQgdGV4dHVyZS4KLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9ybSA9IGRyYXdpbmdT
dXJmYWNlLT5jb21wdXRlRGV2aWNlVHJhbnNmb3JtKHRoaXMsIHN1cmZhY2VEcmF3VHJhbnNmb3Jt
KTsKLQogICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSA9IG1fY3VycmVu
dFJlbmRlclN1cmZhY2U7Ci0gICAgaWYgKHVzZU1hbmFnZWRUZXh0dXJlKGRyYXdpbmdTdXJmYWNl
LT5iYWNrZ3JvdW5kVGV4dHVyZSgpLCBkcmF3aW5nU3VyZmFjZS0+Y29udGVudFJlY3QoKSkpIHsK
LSAgICAgICAgZHJhd2luZ1N1cmZhY2UtPmNvcHlEZXZpY2VUb0JhY2tncm91bmRUZXh0dXJlKHRo
aXMsIGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCwgZGV2aWNlUmVjdCwgY29udGVu
dHNEZXZpY2VUcmFuc2Zvcm0pOworICAgIGlmICh1c2VNYW5hZ2VkVGV4dHVyZShkcmF3aW5nU3Vy
ZmFjZS0+YmFja2dyb3VuZFRleHR1cmUoKSwgcXVhZC0+cXVhZFJlY3QoKSkpIHsKKyAgICAgICAg
Ly8gQ29weSB0aGUgcmVhZGJhY2sgcGl4ZWxzIGZyb20gZGV2aWNlIHRvIHRoZSBiYWNrZ3JvdW5k
IHRleHR1cmUgZm9yIHRoZSBzdXJmYWNlLgorICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBk
ZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm07CisgICAgICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9y
bS50cmFuc2xhdGUocXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpIC8gMi4wLCBxdWFkLT5xdWFkUmVj
dCgpLmhlaWdodCgpIC8gMi4wKTsKKyAgICAgICAgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3JtLnNj
YWxlM2QocXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgp
LCAxKTsKKyAgICAgICAgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3JtICo9IGNvbnRlbnRzRGV2aWNl
VHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICAgICAgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3JtLnRy
YW5zbGF0ZShkZXZpY2VSZWN0LndpZHRoKCkgLyAyLjAsIGRldmljZVJlY3QuaGVpZ2h0KCkgLyAy
LjApOworICAgICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKGRldmljZVJl
Y3QueCgpLCBkZXZpY2VSZWN0LnkoKSk7CisKKyAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVm
ZmVyKGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCwgZGV2aWNlUmVjdC5zaXplKCks
IGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybSk7CisKICAgICAgICAgdXNlUmVuZGVyU3VyZmFjZSh0
YXJnZXRSZW5kZXJTdXJmYWNlKTsKICAgICB9CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3UmVuZGVyU3VyZmFjZVF1YWQoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQq
IHF1YWQpCiB7CisgICAgLy8gVGhlIHJlcGxpY2EgaXMgYWx3YXlzIGRyYXduIGZpcnN0LCBzbyBm
cmVlIGFmdGVyIGRyYXdpbmcgdGhlIGNvbnRlbnRzLgorICAgIGJvb2wgc2hvdWxkUmVsZWFzZVRl
eHR1cmVzID0gIXF1YWQtPmlzUmVwbGljYSgpOworCiAgICAgQ0NMYXllckltcGwqIGxheWVyID0g
cXVhZC0+bGF5ZXIoKTsKKyAgICBDQ1JlbmRlclN1cmZhY2UqIGRyYXdpbmdTdXJmYWNlID0gbGF5
ZXItPnJlbmRlclN1cmZhY2UoKTsKIAotICAgIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkKTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJUcmFuc2Zvcm0gPSBxdWFkLT5sYXllclRy
YW5zZm9ybSgpOworICAgIC8vIEFwcGx5IGEgc2NhbGluZyBmYWN0b3IgdG8gc2l6ZSB0aGUgcXVh
ZCBmcm9tIDF4MSB0byBpdHMgaW50ZW5kZWQgc2l6ZS4KKyAgICByZW5kZXJUcmFuc2Zvcm0uc2Nh
bGUzZChxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCks
IDEpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgod2luZG93TWF0cml4KCkgKiBwcm9qZWN0aW9uTWF0cml4KCkg
KiByZW5kZXJUcmFuc2Zvcm0pLnRvMmRUcmFuc2Zvcm0oKTsKKworICAgIC8vIENhbiBvbmx5IGRy
YXcgc3VyZmFjZSBpZiBkZXZpY2UgbWF0cml4IGlzIGludmVydGlibGUuCisgICAgaWYgKCFjb250
ZW50c0RldmljZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkgeworICAgICAgICBpZiAoc2hvdWxk
UmVsZWFzZVRleHR1cmVzKSB7CisgICAgICAgICAgICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUJh
Y2tncm91bmRUZXh0dXJlKCk7CisgICAgICAgICAgICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUNv
bnRlbnRzVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBkcmF3QmFja2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pOwog
CiAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0U2Npc3NvclJlY3QodGhpcywgcXVhZC0+
c3VyZmFjZURhbWFnZVJlY3QoKSk7Ci0gICAgaWYgKHF1YWQtPmlzUmVwbGljYSgpKQotICAgICAg
ICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3UmVwbGljYSh0aGlzKTsKLSAgICBlbHNlCi0g
ICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXdDb250ZW50cyh0aGlzKTsKLSAgICBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKLSAgICBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisKKyAgICBp
ZiAoZHJhd2luZ1N1cmZhY2UtPmhhc1ZhbGlkQ29udGVudHNUZXh0dXJlKCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IENhY2hlIHRoaXMgdmFsdWUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0
IGZvciBib3RoIHRoZSBzdXJmYWNlIGFuZCBpdHMgcmVwbGljYS4KKyAgICAgICAgLy8gQXBwbHkg
ZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4KKyAgICAgICAgU2tCaXRtYXAgZmlsdGVy
Qml0bWFwID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmZpbHRlcnMoKSwgZHJhd2luZ1N1cmZh
Y2UtPmNvbnRlbnRzVGV4dHVyZSgpKTsKKyAgICAgICAgaW50IGNvbnRlbnRzVGV4dHVyZUlkID0g
ZHJhd2luZ1N1cmZhY2UtPmNvbnRlbnRzVGV4dHVyZSgpLT50ZXh0dXJlSWQoKTsKKyAgICAgICAg
aWYgKGZpbHRlckJpdG1hcC5nZXRUZXh0dXJlKCkpIHsKKyAgICAgICAgICAgIEdyVGV4dHVyZSog
dGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVyQml0bWFwLmdldFRl
eHR1cmUoKSk7CisgICAgICAgICAgICBjb250ZW50c1RleHR1cmVJZCA9IHRleHR1cmUtPmdldFRl
eHR1cmVIYW5kbGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyYXcgdGhlIGJhY2tncm91
bmQgdGV4dHVyZSBpZiB0aGVyZSBpcyBvbmUuCisgICAgICAgIGlmIChkcmF3aW5nU3VyZmFjZS0+
aGFzVmFsaWRCYWNrZ3JvdW5kVGV4dHVyZSgpKQorICAgICAgICAgICAgY29weVRleHR1cmVUb0Zy
YW1lYnVmZmVyKGRyYXdpbmdTdXJmYWNlLT5iYWNrZ3JvdW5kVGV4dHVyZSgpLT50ZXh0dXJlSWQo
KSwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQtPmxheWVyVHJhbnNmb3JtKCkpOworCisg
ICAgICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkID0gY29udGVudHNEZXZpY2VUcmFuc2Zvcm0ubWFw
UXVhZChzaGFyZWRHZW9tZXRyeVF1YWQoKSk7CisgICAgICAgIENDTGF5ZXJRdWFkIGRldmljZUxh
eWVyQm91bmRzID0gQ0NMYXllclF1YWQoRmxvYXRRdWFkKGRldmljZVF1YWQuYm91bmRpbmdCb3go
KSkpOworICAgICAgICBDQ0xheWVyUXVhZCBkZXZpY2VMYXllckVkZ2VzID0gQ0NMYXllclF1YWQo
ZGV2aWNlUXVhZCk7CisKKyAgICAgICAgLy8gVXNlIGFudGktYWxpYXNpbmcgcHJvZ3JhbXMgb25s
eSB3aGVuIG5lY2Vzc2FyeS4KKyAgICAgICAgYm9vbCB1c2VBQSA9ICghZGV2aWNlUXVhZC5pc1Jl
Y3RpbGluZWFyKCkgfHwgIWRldmljZVF1YWQuYm91bmRpbmdCb3goKS5pc0V4cHJlc3NpYmxlQXNJ
bnRSZWN0KCkpOworCisgICAgICAgIGlmICh1c2VBQSkgeworICAgICAgICAgICAgZGV2aWNlTGF5
ZXJCb3VuZHMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7CisgICAgICAgICAgICBkZXZp
Y2VMYXllckVkZ2VzLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCB1c2VNYXNrID0gcXVhZC0+bWFza1RleHR1cmVJZCgpOworCisgICAgICAg
IC8vIEZJWE1FOiB1c2UgdGhlIGJhY2tncm91bmRUZXh0dXJlIGFuZCBibGVuZCB0aGUgYmFja2dy
b3VuZCBpbiB3aXRoIHRoaXMgZHJhdyBpbnN0ZWFkIG9mIGhhdmluZyBhIHNlcGFyYXRlIGNvcHkg
b2YgdGhlIGJhY2tncm91bmQgdGV4dHVyZS4KKworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAg
ICAgIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IGNvbnRlbnRzVGV4dHVyZUlkKTsKKworICAgICAgICBpbnQgc2hhZGVyUXVhZExvY2F0aW9uID0g
LTE7CisgICAgICAgIGludCBzaGFkZXJFZGdlTG9jYXRpb24gPSAtMTsKKyAgICAgICAgaW50IHNo
YWRlck1hc2tTYW1wbGVyTG9jYXRpb24gPSAtMTsKKyAgICAgICAgaW50IHNoYWRlck1hdHJpeExv
Y2F0aW9uID0gLTE7CisgICAgICAgIGludCBzaGFkZXJBbHBoYUxvY2F0aW9uID0gLTE7CisgICAg
ICAgIGlmICh1c2VBQSAmJiB1c2VNYXNrKSB7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJTdXJm
YWNlTWFza1Byb2dyYW1BQSogcHJvZ3JhbSA9IHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBKCk7
CisgICAgICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+cHJvZ3JhbSgpKSk7CisgICAgICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVu
aWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7
CisKKyAgICAgICAgICAgIHNoYWRlclF1YWRMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLnBvaW50TG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNoYWRlckVkZ2VMb2NhdGlvbiA9IHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCk7CisgICAgICAgICAgICBzaGFk
ZXJNYXNrU2FtcGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2Ft
cGxlckxvY2F0aW9uKCk7CisgICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IHByb2dy
YW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAgICAgICBzaGFkZXJB
bHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7
CisgICAgICAgIH0gZWxzZSBpZiAoIXVzZUFBICYmIHVzZU1hc2spIHsKKyAgICAgICAgICAgIGNv
bnN0IFJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSogcHJvZ3JhbSA9IHJlbmRlclN1cmZhY2VNYXNr
UHJvZ3JhbSgpOworICAgICAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9n
cmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICAgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRp
b24oKSwgMCkpOworCisgICAgICAgICAgICBzaGFkZXJNYXNrU2FtcGxlckxvY2F0aW9uID0gcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxvY2F0aW9uKCk7CisgICAgICAgICAg
ICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExv
Y2F0aW9uKCk7CisgICAgICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgICAgIH0gZWxzZSBpZiAodXNlQUEg
JiYgIXVzZU1hc2spIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VQcm9ncmFtQUEq
IHByb2dyYW0gPSByZW5kZXJTdXJmYWNlUHJvZ3JhbUFBKCk7CisgICAgICAgICAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAg
ICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisKKyAgICAgICAgICAgIHNoYWRl
clF1YWRMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50TG9jYXRpb24oKTsK
KyAgICAgICAgICAgIHNoYWRlckVkZ2VMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVy
KCkuZWRnZUxvY2F0aW9uKCk7CisgICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiA9IHBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CisgICAgICAgICAgICBzaGFk
ZXJBbHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9u
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJTdXJmYWNlUHJv
Z3JhbSogcHJvZ3JhbSA9IHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CisgICAgICAgICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Cisg
ICAgICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisKKyAgICAgICAgICAgIHNo
YWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRp
b24oKTsKKyAgICAgICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVu
dFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaGFk
ZXJNYXNrU2FtcGxlckxvY2F0aW9uICE9IC0xKSB7CisgICAgICAgICAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7
CisgICAgICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShzaGFkZXJN
YXNrU2FtcGxlckxvY2F0aW9uLCAxKSk7CisgICAgICAgICAgICBjb250ZXh0KCktPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBxdWFkLT5tYXNrVGV4dHVyZUlkKCkp
OworICAgICAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNo
YWRlckVkZ2VMb2NhdGlvbiAhPSAtMSkgeworICAgICAgICAgICAgZmxvYXQgZWRnZVsyNF07Cisg
ICAgICAgICAgICBkZXZpY2VMYXllckVkZ2VzLnRvRmxvYXRBcnJheShlZGdlKTsKKyAgICAgICAg
ICAgIGRldmljZUxheWVyQm91bmRzLnRvRmxvYXRBcnJheSgmZWRnZVsxMl0pOworICAgICAgICAg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtM2Z2KHNoYWRlckVkZ2VMb2NhdGlv
biwgOCwgZWRnZSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTWFwIGRldmljZSBzcGFjZSBx
dWFkIHRvIHN1cmZhY2Ugc3BhY2UuCisgICAgICAgIEZsb2F0UXVhZCBzdXJmYWNlUXVhZCA9IGNv
bnRlbnRzRGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBRdWFkKGRldmljZUxheWVyRWRnZXMu
ZmxvYXRRdWFkKCkpOworCisgICAgICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFu
c2Zvcm0oKSwgcXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdo
dCgpLCBxdWFkLT5vcGFjaXR5KCksIHN1cmZhY2VRdWFkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHNoYWRlck1hdHJpeExvY2F0aW9uLCBzaGFkZXJBbHBoYUxvY2F0aW9uLCBzaGFkZXJRdWFk
TG9jYXRpb24pOworICAgIH0KKworICAgIGlmIChzaG91bGRSZWxlYXNlVGV4dHVyZXMpIHsKKyAg
ICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpOworICAgICAg
ICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOworICAgIH0KIH0KIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1Nv
bGlkQ29sb3JEcmF3UXVhZCogcXVhZCkKQEAgLTExNTksNiArMTI5OSwyNSBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZHJhd01hdAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRz
KEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIDYsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVCwgMCkpOwogfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weVRl
eHR1cmVUb0ZyYW1lYnVmZmVyKGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGJvdW5kcywg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgpCit7CisgICAgY29uc3QgUmVu
ZGVyU3VyZmFjZVByb2dyYW0qIHByb2dyYW0gPSByZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOworCisg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOworICAgIEdMQyhj
b250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0Nv
bnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkp
OworCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnBy
b2dyYW0oKSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKyAgICBkcmF3VGV4
dHVyZWRRdWFkKGRyYXdNYXRyaXgsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIDEs
IHNoYXJlZEdlb21ldHJ5UXVhZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFM
b2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOworfQor
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoKCkKIHsKICAgICBUUkFDRV9FVkVO
VCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2giLCB0aGlzLCAwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggMWEyZWJlZDBlODZiOTlmNTgxOTY4MzFiY2VjZTQ2
MzAxNDcyYzk1OS4uODFlZTFhN2I1MWI3NTBkNTMyNDI3OGRhYzEyY2IyODU2ZjZjMzViOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTEzNSw2ICsxMzUsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBsYXllck1hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZs
b2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRRdWFkJiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG1hdHJpeExvY2F0aW9uLCBpbnQgYWxwaGFMb2NhdGlvbiwgaW50
IHF1YWRMb2NhdGlvbik7CisgICAgdm9pZCBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoaW50IHRl
eHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZHJhd01hdHJpeCk7CiAKIHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgTGF5ZXJSZW5k
ZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOwpAQCAtMTUzLDcg
KzE1NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiwg
Y29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CiAgICAgdm9pZCBkcmF3Q2hlY2tl
cmJvYXJkUXVhZChjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3
RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwotICAgIHZvaWQg
ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKik7Cisg
ICAgdm9pZCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKICAgICB2
b2lkIGRyYXdSZW5kZXJTdXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCop
OwogICAgIHZvaWQgZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFk
Kik7CiAgICAgdm9pZCBkcmF3VGV4dHVyZVF1YWQoY29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA2ZDgwNjg0ZjY2NGYwMjVkZjUzNmE3MGVlZGZk
NDQ1YmZiODM0NGY0Li44MWE1NWY0ZGY1MjljOTNkY2JmYzRjMTRhYmFhOTU4MzIwMjczNDQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0xNjksOSArMTY5LDEwIEBAIHZvaWQgQ0NMYXll
ckltcGw6OmFwcGVuZERlYnVnQm9yZGVyUXVhZChDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBjb25z
dCBDQ1NoYXJlZFF1CiAgICAgcXVhZExpc3QuYXBwZW5kKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6
Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgbGF5ZXJSZWN0LCBkZWJ1Z0JvcmRlckNvbG9yKCksIGRl
YnVnQm9yZGVyV2lkdGgoKSkpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNU
ZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopCitQbGF0Zm9ybTNET2JqZWN0IENDTGF5ZXJJ
bXBsOjpjb250ZW50c1RleHR1cmVJZCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0
IEZsb2F0U2l6ZSYgc2Nyb2xsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKaW5kZXggYmI3NWE4OWViYWQz
ZjVhYWEzOTg1MmQ0NGQ5ODRhODIxMTliOTZmMC4uZTQ1NzcyZTM2OTFmMmRiZTlhYmQzZDI1ZmNh
NDA2OGE3MThkN2E4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSZWdpb24u
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCkBAIC04OCw3ICs4OSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRHJhdygpOwogICAgIHZvaWQgYXBwZW5kRGVidWdCb3JkZXJRdWFk
KENDUXVhZEN1bGxlciYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKikgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY29udGVudHNUZXh0dXJlSWQoKSBjb25zdDsK
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGxheWVyIGhhcyBjb250ZW50IHRvIGRyYXcu
CiAgICAgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbW9uLmNwcAppbmRleCAyYTBmNzE4MDM5MjIyNmY1ZTRhMjgwNzkyOGFmNTdm
NDU2ZWFmNjg4Li5lNGVlM2VkYzFhNzhlM2YwODAxZTk4ZWU5Y2NjNTUxNTE4NGU1MThkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTQ3NSwxMSArNDc1
LDggQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50
ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICAgICAgbGF5ZXItPnNldFVzZXNMYXll
ckNsaXBwaW5nKGZhbHNlKTsKICAgICAgICAgbGF5ZXItPnNldENsaXBSZWN0KEludFJlY3QoKSk7
CiAKLSAgICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZS0+c2V0TWFza0xheWVyKGxheWVyLT5tYXNrTGF5ZXIoKSk7CisgICAgICAgIGlmIChs
YXllci0+bWFza0xheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+bWFza0xheWVyKCktPnNldFRh
cmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0TWFza0xheWVyKDApOwogCiAgICAgICAgIGlmIChsYXll
ci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkK
ICAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldFRhcmdl
dFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApp
bmRleCAzNjQ2MjQ4NjYyNDU2NjkwYjViZmJjZTJhOWM4YzFlYjM1ODc0OGI3Li5lNWI0NWU5MTMx
MWM0MmY2MTg2MTc0NjA5NmQ3ZWM5ODViMmIyNzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5j
cHAKQEAgLTg5LDExICs4OSw1IEBAIGJvb2wgQ0NRdWFkQ3VsbGVyOjphcHBlbmRTdXJmYWNlKFBh
c3NPd25QdHI8Q0NEcmF3UXVhZD4gcGFzc0RyYXdRdWFkKQogICAgIHJldHVybiBhcHBlbmRRdWFk
SW50ZXJuYWwocGFzc0RyYXdRdWFkLCBjdWxsZWRSZWN0LCBtX3F1YWRMaXN0LCAqbV9vY2NsdXNp
b25UcmFja2VyLCBtX3Nob3dDdWxsaW5nV2l0aERlYnVnQm9yZGVyUXVhZHMpOwogfQogCi1ib29s
IENDUXVhZEN1bGxlcjo6YXBwZW5kUmVwbGljYShQYXNzT3duUHRyPENDRHJhd1F1YWQ+IHBhc3NE
cmF3UXVhZCkKLXsKLSAgICBJbnRSZWN0IGN1bGxlZFJlY3QgPSBtX29jY2x1c2lvblRyYWNrZXIt
PnVub2NjbHVkZWRDb250cmlidXRpbmdTdXJmYWNlQ29udGVudFJlY3QobV9sYXllci0+cmVuZGVy
U3VyZmFjZSgpLCB0cnVlLCBwYXNzRHJhd1F1YWQtPnF1YWRSZWN0KCkpOwotICAgIHJldHVybiBh
cHBlbmRRdWFkSW50ZXJuYWwocGFzc0RyYXdRdWFkLCBjdWxsZWRSZWN0LCBtX3F1YWRMaXN0LCAq
bV9vY2NsdXNpb25UcmFja2VyLCBtX3Nob3dDdWxsaW5nV2l0aERlYnVnQm9yZGVyUXVhZHMpOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaAppbmRleCAyZDJkODAxNjYzZTZmMDYxMzgz
NTNmMmM1NjVkYTdkMDkwZDIzYjdiLi4yOTk5YjZhZDVhZjg0NDU1NDI3NGQ0NGUxYjk0NWY2Nzk4
N2U1ZjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1F1YWRDdWxsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaApAQCAtNDEsNyArNDEsNiBAQCBwdWJsaWM6
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBxdWFkIGlzIGFkZGVkIHRvIHRoZSBsaXN0LCBh
bmQgZmFsc2UgaWYgdGhlIHF1YWQgaXMgZW50aXJlbHkgY3VsbGVkLgogICAgIHZpcnR1YWwgYm9v
bCBhcHBlbmQoUGFzc093blB0cjxDQ0RyYXdRdWFkPiBwYXNzRHJhd1F1YWQpOwogICAgIHZpcnR1
YWwgYm9vbCBhcHBlbmRTdXJmYWNlKFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4gcGFzc0RyYXdRdWFk
KTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kUmVwbGljYShQYXNzT3duUHRyPENDRHJhd1F1YWQ+
IHBhc3NEcmF3UXVhZCk7CiAKIHByaXZhdGU6CiAgICAgQ0NRdWFkTGlzdCYgbV9xdWFkTGlzdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCmluZGV4IDg0ODczMGEyYzdiNjBiNzYyMzg5OWZkN2Y5
YjQxMzMwYTJlOTdjYjcuLjY1NDAxZTAzZDc5NWY2ZWYxY2JhNzk2YmI4MWM0NzQ5ZmQ3NmJhN2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApAQCAtMjgsMjUgKzI4LDEzIEBACiAjaW5jbHVk
ZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgImNj
L0NDRGFtYWdlVHJhY2tlci5oIgotI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVy
LmgiCi0jaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKICNpbmNsdWRlICJj
Yy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgogI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFk
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZh
Y2VCb3JkZXJXaWR0aCA9IDI7Ci1zdGF0aWMgY29uc3QgaW50IGRlYnVnU3VyZmFjZUJvcmRlckFs
cGhhID0gMTAwOwotc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvclJlZCA9
IDA7Ci1zdGF0aWMgY29uc3QgaW50IGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yR3JlZW4gPSAwOwot
c3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckJsdWUgPSAyNTU7Ci1zdGF0
aWMgY29uc3QgaW50IGRlYnVnUmVwbGljYUJvcmRlckNvbG9yUmVkID0gMTYwOwotc3RhdGljIGNv
bnN0IGludCBkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvckdyZWVuID0gMDsKLXN0YXRpYyBjb25zdCBp
bnQgZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JCbHVlID0gMjU1OwotCiBQYXNzT3duUHRyPENDUmVu
ZGVyUGFzcz4gQ0NSZW5kZXJQYXNzOjpjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJm
YWNlKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzKHRhcmdldFN1cmZh
Y2UpKTsKQEAgLTc2LDI1ICs2NCwxNiBAQCB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNG
b3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllckltcGwqIGxheWVyLCBDQ09jY2x1cwogCiAgICAg
Q0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICBP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNyZWF0
ZVNoYXJlZFF1YWRTdGF0ZSgpOwotICAgIGlmIChsYXllci0+aGFzRGVidWdCb3JkZXJzKCkpIHsK
LSAgICAgICAgQ29sb3IgY29sb3IoZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JSZWQsIGRlYnVnU3Vy
ZmFjZUJvcmRlckNvbG9yR3JlZW4sIGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yQmx1ZSwgZGVidWdT
dXJmYWNlQm9yZGVyQWxwaGEpOwotICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFN1cmZhY2UoQ0NE
ZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNl
LT5jb250ZW50UmVjdCgpLCBjb2xvciwgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGgpKTsKLSAgICB9
Ci0gICAgYm9vbCBpc1JlcGxpY2EgPSBmYWxzZTsKLSAgICBxdWFkQ3VsbGVyLmFwcGVuZFN1cmZh
Y2UoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCks
IHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCgpLCBpc1Jl
cGxpY2EpKTsKKyAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCBzaGFyZWRRdWFk
U3RhdGUuZ2V0KCksIGZhbHNlLCBzdXJmYWNlRGFtYWdlUmVjdCgpKTsKICAgICBtX3NoYXJlZFF1
YWRTdGF0ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogCisgICAgaWYg
KCFzdXJmYWNlLT5oYXNSZXBsaWNhKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEFkZCBy
ZXBsaWNhIGFmdGVyIHRoZSBzdXJmYWNlIHNvIHRoYXQgaXQgYXBwZWFycyBiZWxvdyB0aGUgc3Vy
ZmFjZS4KLSAgICBpZiAoc3VyZmFjZS0+aGFzUmVwbGljYSgpKSB7Ci0gICAgICAgIE93blB0cjxD
Q1NoYXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlID0gc3VyZmFjZS0+Y3JlYXRlUmVwbGlj
YVNoYXJlZFF1YWRTdGF0ZSgpOwotICAgICAgICBpZiAobGF5ZXItPmhhc0RlYnVnQm9yZGVycygp
KSB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvcihkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvclJlZCwg
ZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JHcmVlbiwgZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JCbHVl
LCBkZWJ1Z1N1cmZhY2VCb3JkZXJBbHBoYSk7Ci0gICAgICAgICAgICBxdWFkQ3VsbGVyLmFwcGVu
ZFJlcGxpY2EoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdl
dCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBjb2xvciwgZGVidWdTdXJmYWNlQm9yZGVyV2lk
dGgpKTsKLSAgICAgICAgfQotICAgICAgICBib29sIGlzUmVwbGljYSA9IHRydWU7Ci0gICAgICAg
IHF1YWRDdWxsZXIuYXBwZW5kUmVwbGljYShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRl
KHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgbGF5ZXIsIHN1
cmZhY2VEYW1hZ2VSZWN0KCksIGlzUmVwbGljYSkpOwotICAgICAgICBtX3NoYXJlZFF1YWRTdGF0
ZUxpc3QuYXBwZW5kKHNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwotICAgIH0KKyAgICBPd25Q
dHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUgPSBzdXJmYWNlLT5j
cmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCk7CisgICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMo
cXVhZEN1bGxlciwgcmVwbGljYVNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgdHJ1ZSwgc3VyZmFjZURh
bWFnZVJlY3QoKSk7CisgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChyZXBsaWNhU2hh
cmVkUXVhZFN0YXRlLnJlbGVhc2UoKSk7CiB9CiAKIHZvaWQgQ0NSZW5kZXJQYXNzOjphcHBlbmRR
dWFkc1RvRmlsbFNjcmVlbihDQ0xheWVySW1wbCogcm9vdExheWVyLCBjb25zdCBDb2xvciYgc2Ny
ZWVuQmFja2dyb3VuZENvbG9yLCBjb25zdCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsJiBvY2NsdXNp
b25UcmFja2VyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKaW5kZXggNmFiNTA5OThk
NDMzZjU2MzRkYmUwZjIwYmM2NzE4MjdkNmU5MmIzMi4uNmE4ZDcxOTg0MDMyOWFmOWRlYmNiZmRl
NjNkYWE0YjFjMmQ1MTMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0z
NSwyMSArMzUsMjggQEAKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5
ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKLSNpbmNs
dWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIK
ICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJjYy9DQ0RlYnVnQm9y
ZGVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgotI2luY2x1ZGUgImNj
L0NDUHJveHkuaCIKLSNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VGaWx0ZXJzLmgiCisjaW5j
bHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1YWRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgY29uc3Qg
aW50IGRlYnVnU3VyZmFjZUJvcmRlcldpZHRoID0gMjsKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdT
dXJmYWNlQm9yZGVyQWxwaGEgPSAxMDA7CitzdGF0aWMgY29uc3QgaW50IGRlYnVnU3VyZmFjZUJv
cmRlckNvbG9yUmVkID0gMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyQ29s
b3JHcmVlbiA9IDA7CitzdGF0aWMgY29uc3QgaW50IGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yQmx1
ZSA9IDI1NTsKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JSZWQgPSAx
NjA7CitzdGF0aWMgY29uc3QgaW50IGRlYnVnUmVwbGljYUJvcmRlckNvbG9yR3JlZW4gPSAwOwor
c3RhdGljIGNvbnN0IGludCBkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvckJsdWUgPSAyNTU7CisKIEND
UmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBvd25pbmdMYXllcikK
ICAgICA6IG1fb3duaW5nTGF5ZXIob3duaW5nTGF5ZXIpCi0gICAgLCBtX21hc2tMYXllcigwKQot
ICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCiAgICAgLCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQo
ZmFsc2UpCiAgICAgLCBtX2RyYXdPcGFjaXR5KDEpCiAgICAgLCBtX2RyYXdPcGFjaXR5SXNBbmlt
YXRpbmcoZmFsc2UpCkBAIC04OCwyMiArOTUsMjUgQEAgYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnBy
ZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmUK
ICAgICBpZiAobV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkU2l6
ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKSB7Ci0gICAgICAgIG1fc2tpcHNEcmF3ID0gdHJ1
ZTsKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkU2l6ZSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCi0g
ICAgbV9za2lwc0RyYXcgPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBDQ1Jl
bmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1cmUoKQogewotICAgIGlmIChtX3NraXBz
RHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUpCisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSB8
fCAhbV9jb250ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IG1fY29udGVudHNUZXh0dXJlLT51bnJlc2VydmUoKTsKIH0KIAorYm9vbCBDQ1JlbmRlclN1cmZh
Y2U6Omhhc1ZhbGlkQ29udGVudHNUZXh0dXJlKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIHJlcXVp
cmVkU2l6ZShtX2NvbnRlbnRSZWN0LnNpemUoKSk7CisgICAgcmV0dXJuIG1fY29udGVudHNUZXh0
dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9jb250ZW50c1RleHR1
cmUtPmlzVmFsaWQocmVxdWlyZWRTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Cit9CisK
IGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQmFja2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQogewogICAgIEludFNpemUgcmVxdWlyZWRTaXpl
KG1fY29udGVudFJlY3Quc2l6ZSgpKTsKQEAgLTEyMyw4OSArMTMzLDE1IEBAIGJvb2wgQ0NSZW5k
ZXJTdXJmYWNlOjpwcmVwYXJlQmFja2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlCiAKIHZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQmFja2dyb3VuZFRl
eHR1cmUoKQogewotICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZSkKKyAgICBpZiAoIW1fYmFj
a2dyb3VuZFRleHR1cmUgfHwgIW1fYmFja2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fYmFja2dyb3VuZFRleHR1cmUtPnVucmVzZXJ2ZSgpOwogfQog
Ci1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ1JlbmRlclN1cmZhY2U6OmNvbXB1dGVEZXZpY2VUcmFu
c2Zvcm0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3QKLXsKLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCByZW5kZXJUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOwotICAgIC8vIEFwcGx5IGEg
c2NhbGluZyBmYWN0b3IgdG8gc2l6ZSB0aGUgcXVhZCBmcm9tIDF4MSB0byBpdHMgaW50ZW5kZWQg
c2l6ZS4KLSAgICByZW5kZXJUcmFuc2Zvcm0uc2NhbGUzZChtX2NvbnRlbnRSZWN0LndpZHRoKCks
IG1fY29udGVudFJlY3QuaGVpZ2h0KCksIDEpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRl
dmljZVRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGxheWVyUmVuZGVyZXItPndpbmRv
d01hdHJpeCgpICogbGF5ZXJSZW5kZXJlci0+cHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyVHJh
bnNmb3JtKS50bzJkVHJhbnNmb3JtKCk7Ci0gICAgcmV0dXJuIGRldmljZVRyYW5zZm9ybTsKLX0K
LQotSW50UmVjdCBDQ1JlbmRlclN1cmZhY2U6OmNvbXB1dGVEZXZpY2VCb3VuZGluZ0JveChMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdAotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNv
bnRlbnRzRGV2aWNlVHJhbnNmb3JtID0gY29tcHV0ZURldmljZVRyYW5zZm9ybShsYXllclJlbmRl
cmVyLCBkcmF3VHJhbnNmb3JtKTsKLQotICAgIC8vIENhbiBvbmx5IGRyYXcgc3VyZmFjZSBpZiBk
ZXZpY2UgbWF0cml4IGlzIGludmVydGlibGUuCi0gICAgaWYgKCFjb250ZW50c0RldmljZVRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIEZs
b2F0UXVhZCBkZXZpY2VRdWFkID0gY29udGVudHNEZXZpY2VUcmFuc2Zvcm0ubWFwUXVhZChsYXll
clJlbmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1YWQoKSk7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0lu
dFJlY3QoZGV2aWNlUXVhZC5ib3VuZGluZ0JveCgpKTsKLX0KLQotSW50UmVjdCBDQ1JlbmRlclN1
cmZhY2U6OmNvbXB1dGVSZWFkYmFja0RldmljZUJvdW5kaW5nQm94KExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFu
c2Zvcm0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gY29tcHV0ZURldmljZUJv
dW5kaW5nQm94KGxheWVyUmVuZGVyZXIsIGRyYXdUcmFuc2Zvcm0pOwotCi0gICAgaWYgKG1fYmFj
a2dyb3VuZEZpbHRlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZGV2aWNlUmVjdDsKLQot
ICAgIGludCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQ7Ci0gICAgbV9iYWNrZ3JvdW5kRmlsdGVy
cy5nZXRPdXRzZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7Ci0gICAgZGV2aWNlUmVjdC5t
b3ZlKC1sZWZ0LCAtdG9wKTsKLSAgICBkZXZpY2VSZWN0LmV4cGFuZChsZWZ0ICsgcmlnaHQsIHRv
cCArIGJvdHRvbSk7Ci0KLSAgICByZXR1cm4gZGV2aWNlUmVjdDsKLX0KLQotSW50UmVjdCBDQ1Jl
bmRlclN1cmZhY2U6OnJlYWRiYWNrRGV2aWNlQ29udGVudFJlY3QoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5z
Zm9ybSkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0ZVJlYWRiYWNrRGV2aWNlQm91bmRpbmdC
b3gobGF5ZXJSZW5kZXJlciwgZHJhd1RyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgQ0NSZW5kZXJTdXJm
YWNlOjpjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KQorYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhh
c1ZhbGlkQmFja2dyb3VuZFRleHR1cmUoKSBjb25zdAogewotICAgIGNvbnN0IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVy
LT5yZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOwotCi0gICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKSwgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxh
eWVyUmVuZGVyZXItPmNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHRleHR1cmVJZCkpOwotICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCks
IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0
KCksIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotCi0gICAgR0xDKGxheWVyUmVuZGVyZXItPmNv
bnRleHQoKSwgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnBy
b2dyYW0oKSkpOwotICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVuZGVy
ZXItPmNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxl
ckxvY2F0aW9uKCksIDApKTsKLSAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4dHVyZWRRdWFkKGRy
YXdNYXRyaXgsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCksIDEsIGxheWVyUmVuZGVy
ZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxw
aGFMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpOwot
fQotCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6Y29weURldmljZVRvQmFja2dyb3VuZFRleHR1cmUo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBpbnQgZGV2aWNlQmFja2dyb3Vu
ZFRleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgZGV2aWNlVGV4dHVyZVJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFt
X2JhY2tncm91bmRGaWx0ZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm07Ci0gICAgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3Jt
LnRyYW5zbGF0ZShtX2NvbnRlbnRSZWN0LndpZHRoKCkgLyAyLjAsIG1fY29udGVudFJlY3QuaGVp
Z2h0KCkgLyAyLjApOwotICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS5zY2FsZTNkKG1fY29u
dGVudFJlY3Qud2lkdGgoKSwgbV9jb250ZW50UmVjdC5oZWlnaHQoKSwgMSk7Ci0gICAgZGV2aWNl
VG9TdXJmYWNlVHJhbnNmb3JtICo9IGRldmljZVRyYW5zZm9ybS5pbnZlcnNlKCk7Ci0gICAgZGV2
aWNlVG9TdXJmYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShkZXZpY2VUZXh0dXJlUmVjdC53aWR0aCgp
IC8gMi4wLCBkZXZpY2VUZXh0dXJlUmVjdC5oZWlnaHQoKSAvIDIuMCk7Ci0gICAgZGV2aWNlVG9T
dXJmYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShkZXZpY2VUZXh0dXJlUmVjdC54KCksIGRldmljZVRl
eHR1cmVSZWN0LnkoKSk7Ci0KLSAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIobGF5ZXJSZW5k
ZXJlciwgZGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCwgZGV2aWNlVGV4dHVyZVJlY3Quc2l6ZSgp
LCBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0pOwotfQotCi1pbmxpbmUgc3RhdGljIGludCBnZXRT
a0JpdG1hcFRleHR1cmVJZChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBpbnQgZmFsbGJhY2spCi17
Ci0gICAgaWYgKCFiaXRtYXAuZ2V0VGV4dHVyZSgpKQotICAgICAgICByZXR1cm4gZmFsbGJhY2s7
Ci0gICAgR3JUZXh0dXJlKiB0ZXh0dXJlID0gcmVpbnRlcnByZXRfY2FzdDxHclRleHR1cmUqPihi
aXRtYXAuZ2V0VGV4dHVyZSgpKTsKLSAgICByZXR1cm4gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRs
ZSgpOworICAgIEludFNpemUgcmVxdWlyZWRTaXplKG1fY29udGVudFJlY3Quc2l6ZSgpKTsKKyAg
ICByZXR1cm4gbV9iYWNrZ3JvdW5kVGV4dHVyZSAmJiBtX2JhY2tncm91bmRUZXh0dXJlLT5pc1Jl
c2VydmVkKCkgJiYgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNWYWxpZChyZXF1aXJlZFNpemUsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKIH0KIAogdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnNldFNj
aXNzb3JSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgRmxv
YXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgY29uc3QKQEAgLTIyMiwxMzkgKzE1OCw2IEBAIHZv
aWQgQ0NSZW5kZXJTdXJmYWNlOjpzZXRTY2lzc29yUmVjdChMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIsIGNvbnN0CiAgICAgICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0
KCksIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKSk7CiB9CiAKLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3Q29udGVudHMo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIGlmIChtX3NraXBz
RHJhdyB8fCAhbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJ
WE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3Ig
Ym90aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCi0gICAgLy8gQXBwbHkgZmlsdGVycyB0
byB0aGUgY29udGVudHMgdGV4dHVyZS4KLSAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBs
eUZpbHRlcnMobGF5ZXJSZW5kZXJlciwgbV9maWx0ZXJzLCBtX2NvbnRlbnRzVGV4dHVyZS5nZXQo
KSk7Ci0KLSAgICBpbnQgY29udGVudHNUZXh0dXJlSWQgPSBnZXRTa0JpdG1hcFRleHR1cmVJZChm
aWx0ZXJCaXRtYXAsIG1fY29udGVudHNUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Ci0gICAgZHJhd0xh
eWVyKGxheWVyUmVuZGVyZXIsIG1fbWFza0xheWVyLCBtX2RyYXdUcmFuc2Zvcm0sIGNvbnRlbnRz
VGV4dHVyZUlkKTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdSZXBsaWNhKExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKLXsKLSAgICBBU1NFUlQoaGFzUmVwbGlj
YSgpKTsKLSAgICBpZiAoIWhhc1JlcGxpY2EoKSB8fCBtX3NraXBzRHJhdyB8fCAhbV9jb250ZW50
c1RleHR1cmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEFwcGx5IGZpbHRlcnMgdG8gdGhl
IGNvbnRlbnRzIHRleHR1cmUuCi0gICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0
ZXJzKGxheWVyUmVuZGVyZXIsIG1fZmlsdGVycywgbV9jb250ZW50c1RleHR1cmUuZ2V0KCkpOwot
Ci0gICAgLy8gRklYTUU6IEJ5IHVzaW5nIHRoZSBzYW1lIFJlbmRlclN1cmZhY2UgZm9yIGJvdGgg
dGhlIGNvbnRlbnQgYW5kIGl0cyByZWZsZWN0aW9uLAotICAgIC8vIGl0J3MgY3VycmVudGx5IG5v
dCBwb3NzaWJsZSB0byBhcHBseSBhIHNlcGFyYXRlIG1hc2sgdG8gdGhlIHJlZmxlY3Rpb24gbGF5
ZXIKLSAgICAvLyBvciBjb3JyZWN0bHkgaGFuZGxlIG9wYWNpdHkgaW4gcmVmbGVjdGlvbnMgKG9w
YWNpdHkgbXVzdCBiZSBhcHBsaWVkIGFmdGVyIGRyYXdpbmcKLSAgICAvLyBib3RoIHRoZSBsYXll
ciBhbmQgaXRzIHJlZmxlY3Rpb24pLiBUaGUgc29sdXRpb24gaXMgdG8gaW50cm9kdWNlIHlldCBh
bm90aGVyIFJlbmRlclN1cmZhY2UKLSAgICAvLyB0byBkcmF3IHRoZSBsYXllciBhbmQgaXRzIHJl
ZmxlY3Rpb24gaW4uIEZvciBub3cgd2Ugb25seSBhcHBseSBhIHNlcGFyYXRlIHJlZmxlY3Rpb24K
LSAgICAvLyBtYXNrIGlmIHRoZSBjb250ZW50cyBkb24ndCBoYXZlIGEgbWFzayBvZiB0aGVpciBv
d24uCi0gICAgQ0NMYXllckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSBtX21hc2tMYXllcjsKLSAg
ICBpZiAoIW1fbWFza0xheWVyICYmIG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAg
ICAgICByZXBsaWNhTWFza0xheWVyID0gbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCktPm1h
c2tMYXllcigpOwotCi0gICAgaW50IGNvbnRlbnRzVGV4dHVyZUlkID0gZ2V0U2tCaXRtYXBUZXh0
dXJlSWQoZmlsdGVyQml0bWFwLCBtX2NvbnRlbnRzVGV4dHVyZS0+dGV4dHVyZUlkKCkpOwotICAg
IGRyYXdMYXllcihsYXllclJlbmRlcmVyLCByZXBsaWNhTWFza0xheWVyLCBtX3JlcGxpY2FEcmF3
VHJhbnNmb3JtLCBjb250ZW50c1RleHR1cmVJZCk7Ci19Ci0KLXZvaWQgQ0NSZW5kZXJTdXJmYWNl
OjpkcmF3TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBDQ0xheWVy
SW1wbCogbWFza0xheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSwgaW50IGNvbnRlbnRzVGV4dHVyZUlkKQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRl
dmljZU1hdHJpeCA9IGNvbXB1dGVEZXZpY2VUcmFuc2Zvcm0obGF5ZXJSZW5kZXJlciwgZHJhd1Ry
YW5zZm9ybSk7Ci0KLSAgICAvLyBDYW4gb25seSBkcmF3IHN1cmZhY2UgaWYgZGV2aWNlIG1hdHJp
eCBpcyBpbnZlcnRpYmxlLgotICAgIGlmICghZGV2aWNlTWF0cml4LmlzSW52ZXJ0aWJsZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBEcmF3IHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgaWYg
dGhlcmUgaXMgb25lLgotICAgIGlmIChtX2JhY2tncm91bmRUZXh0dXJlICYmIG1fYmFja2dyb3Vu
ZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKLSAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVy
KGxheWVyUmVuZGVyZXIsIG1fYmFja2dyb3VuZFRleHR1cmUtPnRleHR1cmVJZCgpLCBtX2NvbnRl
bnRSZWN0LnNpemUoKSwgZHJhd1RyYW5zZm9ybSk7Ci0KLSAgICBGbG9hdFF1YWQgcXVhZCA9IGRl
dmljZU1hdHJpeC5tYXBRdWFkKGxheWVyUmVuZGVyZXItPnNoYXJlZEdlb21ldHJ5UXVhZCgpKTsK
LSAgICBDQ0xheWVyUXVhZCBkZXZpY2VSZWN0ID0gQ0NMYXllclF1YWQoRmxvYXRRdWFkKHF1YWQu
Ym91bmRpbmdCb3goKSkpOwotICAgIENDTGF5ZXJRdWFkIGxheWVyUXVhZCA9IENDTGF5ZXJRdWFk
KHF1YWQpOwotCi0gICAgLy8gVXNlIGFudGktYWxpYXNpbmcgcHJvZ3JhbXMgb25seSB3aGVuIG5l
Y2Vzc2FyeS4KLSAgICBib29sIHVzZUFBID0gKCFxdWFkLmlzUmVjdGlsaW5lYXIoKSB8fCAhcXVh
ZC5ib3VuZGluZ0JveCgpLmlzRXhwcmVzc2libGVBc0ludFJlY3QoKSk7Ci0KLSAgICBpZiAodXNl
QUEpIHsKLSAgICAgICAgZGV2aWNlUmVjdC5pbmZsYXRlQW50aUFsaWFzaW5nRGlzdGFuY2UoKTsK
LSAgICAgICAgbGF5ZXJRdWFkLmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOwotICAgIH0K
LQotICAgIGJvb2wgdXNlTWFzayA9IGZhbHNlOwotICAgIGlmIChtYXNrTGF5ZXIgJiYgbWFza0xh
eWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgaWYgKCFtYXNrTGF5ZXItPmJvdW5kcygpLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHVzZU1hc2sgPSB0cnVlOwotCi0gICAgLy8gRklYTUU6IHBh
c3MgaW4gYmFja2dyb3VuZFRleHR1cmVJZCBhbmQgYmxlbmQgdGhlIGJhY2tncm91bmQgaW4gd2l0
aCB0aGlzIGRyYXcgaW5zdGVhZCBvZiBoYXZpbmcgYSBzZXBhcmF0ZSBkcmF3QmFja2dyb3VuZCgp
IHBhc3MuCi0KLSAgICBpZiAodXNlTWFzaykgewotICAgICAgICBpZiAodXNlQUEpIHsKLSAgICAg
ICAgICAgIGNvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZU1hc2tQcm9n
cmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1B
QSgpOwotICAgICAgICAgICAgZHJhd1N1cmZhY2UobGF5ZXJSZW5kZXJlciwgbWFza0xheWVyLCBk
cmF3VHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgY29udGVu
dHNUZXh0dXJlSWQsIHByb2dyYW0sIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkubWFza1NhbXBs
ZXJMb2NhdGlvbigpLCBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCksIHBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpSZW5kZXJTdXJmYWNl
TWFza1Byb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlTWFza1By
b2dyYW0oKTsKLSAgICAgICAgICAgIGRyYXdTdXJmYWNlKGxheWVyUmVuZGVyZXIsIG1hc2tMYXll
ciwgZHJhd1RyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGNv
bnRlbnRzVGV4dHVyZUlkLCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tT
YW1wbGVyTG9jYXRpb24oKSwgLTEsIC0xKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmICh1c2VBQSkgewotICAgICAgICAgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpSZW5kZXJTdXJmYWNlUHJvZ3JhbUFBKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVy
U3VyZmFjZVByb2dyYW1BQSgpOwotICAgICAgICAgICAgZHJhd1N1cmZhY2UobGF5ZXJSZW5kZXJl
ciwgbWFza0xheWVyLCBkcmF3VHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxh
eWVyUXVhZCwgY29udGVudHNUZXh0dXJlSWQsIHByb2dyYW0sIC0xLCBwcm9ncmFtLT52ZXJ0ZXhT
aGFkZXIoKS5wb2ludExvY2F0aW9uKCksIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxv
Y2F0aW9uKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpSZW5kZXJTdXJmYWNlUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVy
ZXItPnJlbmRlclN1cmZhY2VQcm9ncmFtKCk7Ci0gICAgICAgICAgICBkcmF3U3VyZmFjZShsYXll
clJlbmRlcmVyLCBtYXNrTGF5ZXIsIGRyYXdUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNl
UmVjdCwgbGF5ZXJRdWFkLCBjb250ZW50c1RleHR1cmVJZCwgcHJvZ3JhbSwgLTEsIC0xLCAtMSk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPgotdm9pZCBDQ1JlbmRl
clN1cmZhY2U6OmRyYXdTdXJmYWNlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
ciwgQ0NMYXllckltcGwqIG1hc2tMYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0s
IGNvbnN0IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBDQ0xheWVyUXVhZCYgbGF5ZXJR
dWFkLCBpbnQgY29udGVudHNUZXh0dXJlSWQsIGNvbnN0IFQqIHByb2dyYW0sIGludCBzaGFkZXJN
YXNrU2FtcGxlckxvY2F0aW9uLCBpbnQgc2hhZGVyUXVhZExvY2F0aW9uLCBpbnQgc2hhZGVyRWRn
ZUxvY2F0aW9uKQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0M0QgPSBsYXllclJl
bmRlcmVyLT5jb250ZXh0KCk7Ci0KLSAgICBjb250ZXh0M0QtPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtKCkpKTsKLQotICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBHTEMoY29udGV4dDNELCBjb250ZXh0
M0QtPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigp
LCAwKSk7Ci0gICAgY29udGV4dDNELT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgY29udGVudHNUZXh0dXJlSWQpOwotCi0gICAgaWYgKHNoYWRlck1hc2tTYW1wbGVy
TG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOwotICAgICAgICBHTEMoY29u
dGV4dDNELCBjb250ZXh0M0QtPnVuaWZvcm0xaShzaGFkZXJNYXNrU2FtcGxlckxvY2F0aW9uLCAx
KSk7Ci0gICAgICAgIG1hc2tMYXllci0+YmluZENvbnRlbnRzVGV4dHVyZShsYXllclJlbmRlcmVy
KTsKLSAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIH0KLQotICAgIGlmIChzaGFkZXJFZGdlTG9j
YXRpb24gIT0gLTEpIHsKLSAgICAgICAgZmxvYXQgZWRnZVsyNF07Ci0gICAgICAgIGxheWVyUXVh
ZC50b0Zsb2F0QXJyYXkoZWRnZSk7Ci0gICAgICAgIGRldmljZVJlY3QudG9GbG9hdEFycmF5KCZl
ZGdlWzEyXSk7Ci0gICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTNmdihz
aGFkZXJFZGdlTG9jYXRpb24sIDgsIGVkZ2UpKTsKLSAgICB9Ci0KLSAgICAvLyBNYXAgZGV2aWNl
IHNwYWNlIHF1YWQgdG8gbGF5ZXIgc3BhY2UuCi0gICAgRmxvYXRRdWFkIHF1YWQgPSBkZXZpY2VU
cmFuc2Zvcm0uaW52ZXJzZSgpLm1hcFF1YWQobGF5ZXJRdWFkLmZsb2F0UXVhZCgpKTsKLQotICAg
IGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd1RyYW5zZm9ybSwgbV9jb250ZW50
UmVjdC53aWR0aCgpLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgpLCBtX2RyYXdPcGFjaXR5LCBxdWFk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkubWF0cml4TG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxv
Y2F0aW9uKCksIHNoYWRlclF1YWRMb2NhdGlvbik7Ci19Ci0KLVNrQml0bWFwIENDUmVuZGVyU3Vy
ZmFjZTo6YXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwg
Y29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBNYW5hZ2VkVGV4dHVy
ZSogc291cmNlVGV4dHVyZSkKLXsKLSAgICBpZiAoZmlsdGVycy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBTa0JpdG1hcCgpOwotCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBmaWx0
ZXJDb250ZXh0ID0gQ0NQcm94eTo6aGFzSW1wbFRocmVhZCgpID8gU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEZvckltcGxUaHJlYWQoKSA6IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXQo
KTsKLSAgICBpZiAoIWZpbHRlckNvbnRleHQpCi0gICAgICAgIHJldHVybiBTa0JpdG1hcCgpOwot
Ci0gICAgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5mbHVzaCgpOwotCi0gICAgcmV0dXJuIEND
UmVuZGVyU3VyZmFjZUZpbHRlcnM6OmFwcGx5KGZpbHRlcnMsIHNvdXJjZVRleHR1cmUtPnRleHR1
cmVJZCgpLCBzb3VyY2VUZXh0dXJlLT5zaXplKCksIGZpbHRlckNvbnRleHQuZ2V0KCkpOwotfQot
CiBTdHJpbmcgQ0NSZW5kZXJTdXJmYWNlOjpuYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoIlJlbmRlclN1cmZhY2UoaWQ9JWksb3duZXI9JXMpIiwgbV9vd25pbmdMYXll
ci0+aWQoKSwgbV9vd25pbmdMYXllci0+ZGVidWdOYW1lKCkudXRmOCgpLmRhdGEoKSk7CkBAIC0z
OTgsMTIgKzIwMSwxMiBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6aGFzUmVwbGljYSgpIGNvbnN0
CiAKIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNNYXNrKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9tYXNrTGF5ZXI7CisgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPm1hc2tMYXllcigpOwogfQog
CiBib29sIENDUmVuZGVyU3VyZmFjZTo6cmVwbGljYUhhc01hc2soKSBjb25zdAogewotICAgIHJl
dHVybiBoYXNSZXBsaWNhKCkgJiYgKG1fbWFza0xheWVyIHx8IG1fb3duaW5nTGF5ZXItPnJlcGxp
Y2FMYXllcigpLT5tYXNrTGF5ZXIoKSk7CisgICAgcmV0dXJuIGhhc1JlcGxpY2EoKSAmJiAobV9v
d25pbmdMYXllci0+bWFza0xheWVyKCkgfHwgbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkt
Pm1hc2tMYXllcigpKTsKIH0KIAogdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnNldENsaXBSZWN0KGNv
bnN0IEludFJlY3QmIGNsaXBSZWN0KQpAQCAtNDU1LDUgKzI1OCwzOCBAQCBQYXNzT3duUHRyPEND
U2hhcmVkUXVhZFN0YXRlPiBDQ1JlbmRlclN1cmZhY2U6OmNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFk
U3RhdGUoKSBjbwogICAgIHJldHVybiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKHJlcGxpY2FP
cmlnaW5UcmFuc2Zvcm0oKSwgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSwgY29udGVudFJlY3QoKSwg
Y2xpcFJlY3QoKSwgZHJhd09wYWNpdHkoKSwgaXNPcGFxdWUpOwogfQogCit2b2lkIENDUmVuZGVy
U3VyZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFk
U3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBGbG9hdFJlY3Qm
IHN1cmZhY2VEYW1hZ2VSZWN0KQoreworICAgIEFTU0VSVCghZm9yUmVwbGljYSB8fCBoYXNSZXBs
aWNhKCkpOworCisgICAgaWYgKG1fb3duaW5nTGF5ZXItPmhhc0RlYnVnQm9yZGVycygpKSB7Cisg
ICAgICAgIGludCByZWQgPSAhZm9yUmVwbGljYSA/IGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yUmVk
IDogZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JSZWQ7CisgICAgICAgIGludCBncmVlbiA9ICFmb3JS
ZXBsaWNhID8gZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JHcmVlbiA6IGRlYnVnUmVwbGljYUJvcmRl
ckNvbG9yR3JlZW47CisgICAgICAgIGludCBibHVlID0gIWZvclJlcGxpY2EgPyBkZWJ1Z1N1cmZh
Y2VCb3JkZXJDb2xvckJsdWUgOiBkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvckJsdWU7CisgICAgICAg
IENvbG9yIGNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGRlYnVnU3VyZmFjZUJvcmRlckFscGhhKTsK
KyAgICAgICAgcXVhZExpc3QuYXBwZW5kU3VyZmFjZShDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OmNy
ZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIGNvbG9yLCBkZWJ1Z1N1cmZhY2VC
b3JkZXJXaWR0aCkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBCeSB1c2luZyB0aGUgc2FtZSBS
ZW5kZXJTdXJmYWNlIGZvciBib3RoIHRoZSBjb250ZW50IGFuZCBpdHMgcmVmbGVjdGlvbiwKKyAg
ICAvLyBpdCdzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gYXBwbHkgYSBzZXBhcmF0ZSBtYXNr
IHRvIHRoZSByZWZsZWN0aW9uIGxheWVyCisgICAgLy8gb3IgY29ycmVjdGx5IGhhbmRsZSBvcGFj
aXR5IGluIHJlZmxlY3Rpb25zIChvcGFjaXR5IG11c3QgYmUgYXBwbGllZCBhZnRlciBkcmF3aW5n
CisgICAgLy8gYm90aCB0aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0aW9uKS4gVGhlIHNvbHV0aW9u
IGlzIHRvIGludHJvZHVjZSB5ZXQgYW5vdGhlciBSZW5kZXJTdXJmYWNlCisgICAgLy8gdG8gZHJh
dyB0aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0aW9uIGluLiBGb3Igbm93IHdlIG9ubHkgYXBwbHkg
YSBzZXBhcmF0ZSByZWZsZWN0aW9uCisgICAgLy8gbWFzayBpZiB0aGUgY29udGVudHMgZG9uJ3Qg
aGF2ZSBhIG1hc2sgb2YgdGhlaXIgb3duLgorICAgIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIgPSBt
X293bmluZ0xheWVyLT5tYXNrTGF5ZXIoKTsKKyAgICBpZiAobWFza0xheWVyICYmICghbWFza0xh
eWVyLT5kcmF3c0NvbnRlbnQoKSB8fCBtYXNrTGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkpCisg
ICAgICAgIG1hc2tMYXllciA9IDA7CisKKyAgICBpZiAoIW1hc2tMYXllciAmJiBmb3JSZXBsaWNh
KSB7CisgICAgICAgIG1hc2tMYXllciA9IG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpLT5t
YXNrTGF5ZXIoKTsKKyAgICAgICAgaWYgKG1hc2tMYXllciAmJiAoIW1hc2tMYXllci0+ZHJhd3ND
b250ZW50KCkgfHwgbWFza0xheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpKQorICAgICAgICAgICAg
bWFza0xheWVyID0gMDsKKyAgICB9CisKKyAgICBpbnQgbWFza1RleHR1cmVJZCA9IG1hc2tMYXll
ciA/IG1hc2tMYXllci0+Y29udGVudHNUZXh0dXJlSWQoKSA6IDA7CisKKyAgICBxdWFkTGlzdC5h
cHBlbmRTdXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0
YXRlLCBjb250ZW50UmVjdCgpLCBtX293bmluZ0xheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCwgZm9y
UmVwbGljYSwgZmlsdGVycygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkKSk7
Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IGE2ZGVlMTBlY2VkMDk3YzgyMGE0YTk4MjM1Y2Q4MmVi
OWUxOGU1YWQuLjkxNDFhNzBkN2NmMzNkZDU1MDU5ZjViZTJmNGQxMDgwNGRhN2JmZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiU2tCaXRtYXAuaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclF1YWQuaCIKQEAgLTQxLDYgKzQwLDcgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NEYW1hZ2VUcmFja2VyOworY2xhc3MgQ0NRdWFk
Q3VsbGVyOwogY2xhc3MgQ0NTaGFyZWRRdWFkU3RhdGU7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNs
YXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKQEAgLTU0LDE5ICs1NCwxNCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIHByZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7
CiAgICAgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAgYm9vbCBoYXNWYWxpZENv
bnRlbnRzVGV4dHVyZSgpIGNvbnN0OwogCiAgICAgYm9vbCBwcmVwYXJlQmFja2dyb3VuZFRleHR1
cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdm9pZCByZWxlYXNlQmFja2dyb3VuZFRl
eHR1cmUoKTsKKyAgICBib29sIGhhc1ZhbGlkQmFja2dyb3VuZFRleHR1cmUoKSBjb25zdDsKIAog
ICAgIHZvaWQgc2V0U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgRmxv
YXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkgY29uc3Q7CiAKLSAgICB2b2lkIGRyYXdDb250ZW50
cyhMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKLSAgICB2b2lkIGRyYXdSZXBsaWNhKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSopOwotCi0gICAgLy8gVGFrZXMgYSB0ZXh0dXJlIHdpdGggcGl4ZWxzIGlu
IGRldmljZSBzcGFjZSwgYW5kIGEgdHJhbnNmb3JtIGZyb20gY29udGVudCBzcGFjZSB0byB0aGUg
ZGV2aWNlLiBDb3BpZXMgdGhlIGRldmljZS1zcGFjZSB0ZXh0dXJlIGJhY2sgaW50bwotICAgIC8v
IGNvbnRlbnQgc3BhY2UgZm9yIHRoZSBzdXJmYWNlLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gdGhl
IGJhY2tncm91bmRUZXh0dXJlKCkuIFRoZSBzdXJmYWNlJ3MgYmFja2dyb3VuZFRleHR1cmUoKSBt
dXN0IGJlIHRoZSBhY3RpdmUgZHJhd2luZyB0YXJnZXQuCi0gICAgdm9pZCBjb3B5RGV2aWNlVG9C
YWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBpbnQgZGV2aWNlQmFja2dy
b3VuZFRleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgZGV2aWNlVGV4dHVyZVJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pIGNvbnN0OwotCiAgICAgU3RyaW5n
IG5hbWUoKSBjb25zdDsKICAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5k
ZW50KSBjb25zdDsKIApAQCAtNzQsMTggKzY5LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVy
bnMgdGhlIHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgUmVuZGVyU3VyZmFjZSBpbmNsdWRpbmcgYW55
IHJlZmxlY3Rpb24uCiAgICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdDsK
LSAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIHBpeGVscyB0aGF0IG1h
eSBhZmZlY3QgdGhlIHBpeGVsIHZhbHVlcyBpbiB0aGlzIHN1cmZhY2UgdGhyb3VnaCBiYWNrZ3Jv
dW5kIGZpbHRlcnMuCi0gICAgSW50UmVjdCByZWFkYmFja0RldmljZUNvbnRlbnRSZWN0KExheWVy
UmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNm
b3JtKSBjb25zdDsKLQotICAgIC8vIEdpdmVzIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgc3VyZmFj
ZSBjb250ZW50IHNwYWNlLCB3aXRoIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQsIHRvIHRoZSBjdXJy
ZW50IHRhcmdldCBkZXZpY2Ugc3BhY2UsIHdpdGggb3JpZ2luIGluIHRoZSB0b3AgbGVmdC4KLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlRGV2aWNlVHJhbnNmb3JtKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBj
b25zdDsKIAogICAgIGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3Bh
Y2l0eTsgfQogICAgIHZvaWQgc2V0RHJhd09wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX2RyYXdP
cGFjaXR5ID0gb3BhY2l0eTsgfQogCiAgICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IFdlYktpdDo6
V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBmaWx0ZXJzOyB9CiAg
ICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWx0ZXJzOyB9Ci0gICAgU2tCaXRtYXAgYXBwbHlGaWx0ZXJzKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSosIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYsIE1hbmFnZWRU
ZXh0dXJlKiBzb3VyY2VUZXh0dXJlKTsKIAogICAgIHZvaWQgc2V0QmFja2dyb3VuZEZpbHRlcnMo
Y29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSB7IG1fYmFja2dyb3Vu
ZEZpbHRlcnMgPSBmaWx0ZXJzOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRp
b25zJiBiYWNrZ3JvdW5kRmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZEZpbHRl
cnM7IH0KQEAgLTEyNiwxNCArMTE1LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29udGVudFJl
Y3QoY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQogCi0gICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9v
bCBza2lwc0RyYXcpIHsgbV9za2lwc0RyYXcgPSBza2lwc0RyYXc7IH0KLSAgICBib29sIHNraXBz
RHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9Ci0KICAgICB2b2lkIGNsZWFyTGF5
ZXJMaXN0KCkgeyBtX2xheWVyTGlzdC5jbGVhcigpOyB9CiAgICAgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4mIGxheWVyTGlzdCgpIHsgcmV0dXJuIG1fbGF5ZXJMaXN0OyB9CiAKLSAgICB2b2lkIHNldE1h
c2tMYXllcihDQ0xheWVySW1wbCogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVy
OyB9Ci0KICAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KICAgICBNYW5hZ2VkVGV4dHVyZSogYmFja2dy
b3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRUZXh0dXJlLmdldCgpOyB9
CiAKQEAgLTE1MywyMSArMTM3LDEzIEBAIHB1YmxpYzoKICAgICBQYXNzT3duUHRyPENDU2hhcmVk
UXVhZFN0YXRlPiBjcmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdDsKICAgICBQYXNzT3duUHRy
PENDU2hhcmVkUXVhZFN0YXRlPiBjcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7
CiAKLXByaXZhdGU6Ci0gICAgSW50UmVjdCBjb21wdXRlRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zv
cm0pIGNvbnN0OwotICAgIEludFJlY3QgY29tcHV0ZVJlYWRiYWNrRGV2aWNlQm91bmRpbmdCb3go
TGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdU
cmFuc2Zvcm0pIGNvbnN0OwotCi0gICAgdm9pZCBkcmF3TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiwgQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGludCBjb250
ZW50c1RleHR1cmVJZCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgdm9pZCBkcmF3U3Vy
ZmFjZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ0xheWVySW1wbCosIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
ZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NM
YXllclF1YWQmLCBpbnQgY29udGVudHNUZXh0dXJlSWQsIGNvbnN0IFQqIHByb2dyYW0sIGludCBz
aGFkZXJNYXNrU2FtcGxlckxvY2F0aW9uLCBpbnQgc2hhZGVyUXVhZExvY2F0aW9uLCBpbnQgc2hh
ZGVyRWRnZUxvY2F0aW9uKTsKLQotICAgIHN0YXRpYyB2b2lkIGNvcHlUZXh0dXJlVG9GcmFtZWJ1
ZmZlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXpl
JiBib3VuZHMsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKKyAgICAv
LyBGSVhNRTogUmVtb3ZlIHN1cmZhY2VEYW1hZ2VSZWN0IHdoZW4gaXQgaXMgcmVtb3ZlZCBmcm9t
IENDUmVuZGVyUGFzcy4KKyAgICB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYsIENDU2hh
cmVkUXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VE
YW1hZ2VSZWN0KTsKIAorcHJpdmF0ZToKICAgICBDQ0xheWVySW1wbCogbV9vd25pbmdMYXllcjsK
LSAgICBDQ0xheWVySW1wbCogbV9tYXNrTGF5ZXI7CiAKICAgICBJbnRSZWN0IG1fY29udGVudFJl
Y3Q7Ci0gICAgYm9vbCBtX3NraXBzRHJhdzsKICAgICBib29sIG1fc3VyZmFjZVByb3BlcnR5Q2hh
bmdlZDsKIAogICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9jb250ZW50c1RleHR1cmU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAKaW5kZXggYzZlMDIx
ZWNlMjA2NWM3OWM1ZWNmNmNkMGI2ZDM3Y2U5NTQ3YjMxMC4uN2IwYmNkNzgxYTEyODM3NGNiNWI4
MmJlNjRmNWRmZmU1MWVjMzliNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkLmNwcApAQCAtMjksMTggKzI5LDIxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBj
b25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSkKK1Bhc3NPd25QdHI8Q0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJl
Y3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVj
dCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmls
dGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVy
cywgUGxhdGZvcm0zRE9iamVjdCBtYXNrVGV4dHVyZUlkKQogewotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwg
bGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0LCBpc1JlcGxpY2EpKTsKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3Qs
IGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCwgaXNSZXBsaWNhLCBmaWx0ZXJzLCBiYWNrZ3JvdW5k
RmlsdGVycywgbWFza1RleHR1cmVJZCkpOwogfQogCi1DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1
YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EpCitDQ1JlbmRl
clN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRR
dWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5
ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBp
c1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29u
c3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgUGxhdGZv
cm0zRE9iamVjdCBtYXNrVGV4dHVyZUlkKQogICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFkU3Rh
dGUsIENDRHJhd1F1YWQ6OlJlbmRlclN1cmZhY2UsIHF1YWRSZWN0KQogICAgICwgbV9sYXllcihs
YXllcikKICAgICAsIG1fc3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpCiAgICAg
LCBtX2lzUmVwbGljYShpc1JlcGxpY2EpCisgICAgLCBtX21hc2tUZXh0dXJlSWQobWFza1RleHR1
cmVJZCkKIHsKICAgICBBU1NFUlQobV9sYXllcik7CisgICAgbV9maWx0ZXJzLmFzc2lnbihmaWx0
ZXJzKTsKKyAgICBtX2JhY2tncm91bmRGaWx0ZXJzLmFzc2lnbihiYWNrZ3JvdW5kRmlsdGVycyk7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oCmluZGV4
IDhmNmRhNWVlZTFkODI3ZmMxMGVhNWE1OGQ1ZjgxOWViMjA1OTMxNmQuLjNjZWU5ZDVhZTFmNjA2
OTkwYjBjMTA1NWIxZTg2NTBjMTU2Njg5YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQuaApAQCAtMjYsOSArMjYsMTUgQEAKICNpZm5kZWYgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWRfaAogI2RlZmluZSBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZF9oCiAKKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5j
bHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkZpbHRlck9wZXJhdGlvbnM7
Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllckltcGw7CkBAIC0zNiwy
MSArNDIsMjggQEAgY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBDQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1Jl
bmRlclN1cmZhY2VEcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNv
bnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFn
ZVJlY3QsIGJvb2wgaXNSZXBsaWNhKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50
UmVjdCYsIENDTGF5ZXJJbXBsKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwg
Ym9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywg
UGxhdGZvcm0zRE9iamVjdCBtYXNrVGV4dHVyZUlkKTsKIAogICAgIENDTGF5ZXJJbXBsKiBsYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KICAgICBib29sIGlzUmVwbGljYSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNSZXBsaWNhOyB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBtYXNrVGV4dHVy
ZUlkKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUlkOyB9CiAKICAgICAvLyBUaGUgc3Vy
ZmFjZSBkYW1hZ2UgcmVjdCBmb3IgdGhlIHRhcmdldCBzdXJmYWNlIHRoaXMgcXVhZCBkcmF3cyBp
bnRvLgogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBiZSByZW1vdmVkIG9uY2UgcmVuZGVyIHN1cmZh
Y2VzIGdldCB0aGVpciBvd24gbGF5ZXIgdHlwZS4KICAgICBjb25zdCBGbG9hdFJlY3QmIHN1cmZh
Y2VEYW1hZ2VSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlRGFtYWdlUmVjdDsgfQogCisg
ICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9maWx0ZXJzOyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBiYWNrZ3JvdW5kRmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZEZpbHRlcnM7
IH0KKwogcHJpdmF0ZToKLSAgICBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJl
ZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1wbCosIGNvbnN0IEZsb2F0UmVj
dCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhKTsKKyAgICBDQ1JlbmRlclN1cmZh
Y2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xh
eWVySW1wbCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBs
aWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdl
YktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIFBsYXRmb3JtM0RP
YmplY3QgbWFza1RleHR1cmVJZCk7CiAKICAgICBDQ0xheWVySW1wbCogbV9sYXllcjsKICAgICBG
bG9hdFJlY3QgbV9zdXJmYWNlRGFtYWdlUmVjdDsKICAgICBib29sIG1faXNSZXBsaWNhOworICAg
IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CisgICAgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CisgICAgUGxhdGZvcm0zRE9iamVj
dCBtX21hc2tUZXh0dXJlSWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwu
Y3BwCmluZGV4IGVjMjJhOWZkNjc2YjkwODJmNzA4NWM5YTI5YTUwYTRjZGFlMjE5YWUuLjJkMzJi
ZmMzMDI1YTk2NmE5MTc2NzE3OWZkNjNkZDY1NWY3ZmEzZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIENDVGlsZWRMYXllckltcGw6On5DQ1Rp
bGVkTGF5ZXJJbXBsKCkKIHsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVu
dHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK1BsYXRmb3Jt
M0RPYmplY3QgQ0NUaWxlZExheWVySW1wbDo6Y29udGVudHNUZXh0dXJlSWQoKSBjb25zdAogewog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSB2YWxpZCBmb3Igc2luZ2xlIHRleHR1cmUgbGF5
ZXJzLCBlLmcuIG1hc2tzLgogICAgIEFTU0VSVChtX3RpbGVyKTsKQEAgLTg4LDcgKzg4LDcgQEAg
dm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKICAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCA9
IHRpbGUgPyB0aWxlLT50ZXh0dXJlSWQoKSA6IDA7CiAgICAgQVNTRVJUKHRleHR1cmVJZCk7CiAK
LSAgICBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpOworICAgIHJldHVybiB0ZXh0dXJlSWQ7CiB9CiAK
IHZvaWQgQ0NUaWxlZExheWVySW1wbDo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0
cywgaW50IGluZGVudCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCBi
ZDE0NjY1MGJhZDVhN2FkNjAyMWY5YWE3MmRkZWU3NzUyYWExNWJlLi44NjU2ZTUwZDAyMWU4OGVk
OTkwMzE5OGIwMDY1ZDFhMTA2ZmUyNWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5o
CkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFk
cyhDQ1F1YWRDdWxsZXImLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGJvb2wmIGhhZE1pc3Np
bmdUaWxlcykgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVy
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
M0RPYmplY3QgY29udGVudHNUZXh0dXJlSWQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25z
dCBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1JlbmRlclN1cmZhY2VUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NS
ZW5kZXJTdXJmYWNlVGVzdC5jcHAKaW5kZXggN2RhYzAwNWQyNGNhZmFjYzI3MWI4NmFkNWZkZTM4
NTY2ZDBiZDg3NC4uMzA3NTFkNzQ4MzI2OGI0NWY2ZDc5MTgwZGE5MThlM2I1M2YzN2ZmYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRl
c3QuY3BwCkBAIC04Niw5ICs4Niw3IEBAIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwgdmVyaWZ5
U3VyZmFjZUNoYW5nZXNBcmVUcmFja2VkUHJvcGVybHkpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X1NVUkZBQ0VfRElEX05PVF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0RHJhd1RyYW5zZm9ybShk
dW1teU1hdHJpeCkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNFX0RJRF9OT1RfQ0hB
TkdFKHJlbmRlclN1cmZhY2UtPnNldFJlcGxpY2FEcmF3VHJhbnNmb3JtKGR1bW15TWF0cml4KSk7
CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfRElEX05PVF9DSEFOR0UocmVuZGVyU3Vy
ZmFjZS0+c2V0T3JpZ2luVHJhbnNmb3JtKGR1bW15TWF0cml4KSk7Ci0gICAgRVhFQ1VURV9BTkRf
VkVSSUZZX1NVUkZBQ0VfRElEX05PVF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNEcmF3
KHRydWUpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9ESURfTk9UX0NIQU5HRShy
ZW5kZXJTdXJmYWNlLT5jbGVhckxheWVyTGlzdCgpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllf
U1VSRkFDRV9ESURfTk9UX0NIQU5HRShyZW5kZXJTdXJmYWNlLT5zZXRNYXNrTGF5ZXIoZHVtbXlN
YXNrLmdldCgpKSk7CiB9CiAKIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwgc2FuaXR5Q2hlY2tT
dXJmYWNlQ3JlYXRlc0NvcnJlY3RTaGFyZWRRdWFkU3RhdGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144879</attachid>
            <date>2012-05-30 11:31:40 -0700</date>
            <delta_ts>2012-05-30 15:05:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87877-20120530143139.patch</filename>
            <type>text/plain</type>
            <size>58437</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhhNmM2ZWU0MjVkNzg0
ZjUxNTI1MjVjZThjZWQ3YzljNzQ4YWViMS4uNWM1MjFhMzZlZTFlNDFkMTEzMmQxMmFmZWZjZTQ0
NDkyZmIzNjVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA1LTMwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92
ZSBkcmF3aW5nIGNvZGUgZm9yIFJlbmRlclN1cmZhY2VzIGludG8gTGF5ZXJSZW5kZXJlckNocm9t
aXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFk
ZCBkYXRhIHRvIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkIHNvIHRoYXQgdGhlIG9ubHkgdXNlIG9m
CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSBkaXJlY3RseSBmcm9tIExheWVyUmVuZGVyZXJDaHJv
bWl1bSBpcyB0bworICAgICAgICByZXNlcnZlLCByZWxlYXNlLCBhbmQgdXNlIHRoZSBzdXJmYWNl
J3MgdGV4dHVyZXMsIGFuZCB0byBzZXQgdGhlCisgICAgICAgIHNjaXNzb3IgcmVjdC4gRWFjaCBv
ZiB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgZG9uZSBpbmRlcGVuZGVudAorICAgICAgICBvZiB0aGlz
IGNoYW5nZS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRl
clN1cmZhY2VRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKExheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNvbnRlbnRzVGV4dHVy
ZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaDoKKyAgICAg
ICAgKENDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YXBw
ZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZENvbnRlbnRz
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VCYWNr
Z3JvdW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhhc1Zh
bGlkQmFja2dyb3VuZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpoYXNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cmVwbGljYUhh
c01hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDUmVuZGVyU3VyZmFjZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6Om1hc2tUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQ6OmZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmJhY2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZWRMYXllckltcGw6OmNvbnRlbnRzVGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ1Rp
bGVkTGF5ZXJJbXBsKToKKwogMjAxMi0wNS0yOSAgSm9uYXRoYW4gRG9uZyAgPGpvbmF0aGFuLmRv
bmdAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBSZWZhY3Rvcmlu
ZyBodHRwL3Byb3h5IGF1dGhlbnRpY2F0aW9uIHRvIHVzZSBhdXRoY2FsbGJhY2sgbWVjaGFuaXNt
IGludHJvZHVjZWQgd2l0aCBsaWJjdXJsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkx
OTdkYTBmODYyNDQzODA3Y2VmOTkxNGZhY2E4YTkzMzUxYzVlN2YuLmY5NmI4NWY1ODBlYzQzZGJm
OTM3MGFkYzAzNTk5NTIzMTIyN2ExMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTItMDUtMzAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGRyYXdpbmcgY29kZSBmb3IgUmVuZGVyU3Vy
ZmFjZXMgaW50byBMYXllclJlbmRlcmVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTA1LTI5ICBEYXZpZCBCYXJyICA8ZGF2
aWRiYXJyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgRU5BQkxFX0NTU19JTUFH
RV9SRVNPTFVUSU9OIGNvbXBpbGUgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKaW5kZXggYTlmM2Q0NjY1ZDM2ZTUyOGQzZmUzZmM5MWM4NjAyNWY0ZTlhODdlZC4uOWJk
MGIxZGZhNTA2OWMxN2RhMTQyMTRmYjAyMGZkMzY2NTA5ZTk4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00Niw2ICs0Niw4IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1Db2xvci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGhyb3R0bGVkVGV4dHVyZVVw
bG9hZGVyLmgiCkBAIC01NiwxMSArNTgsMTMgQEAKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVy
RHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0lPU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyUXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwu
aCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgi
CiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9D
Q1JlbmRlclN1cmZhY2VGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1
YWQuaCIKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0ND
VGlsZURyYXdRdWFkLmgiCkBAIC01NjgsNyArNTcyLDIxIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCog
cXVhCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
LCA2ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkKiBxdWFkKQorc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZpbHRlcnMoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMsIE1hbmFnZWRUZXh0dXJlKiBzb3VyY2VUZXh0dXJlKQoreworICAgIGlm
IChmaWx0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CisKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGZpbHRlckNvbnRleHQgPSBDQ1Byb3h5OjpoYXNJbXBs
VGhyZWFkKCkgPyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0Rm9ySW1wbFRocmVhZCgpIDog
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CisKKyAgICBsYXllclJlbmRlcmVyLT5jb250ZXh0
KCktPmZsdXNoKCk7CisKKyAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmlsdGVyczo6YXBwbHko
ZmlsdGVycywgc291cmNlVGV4dHVyZS0+dGV4dHVyZUlkKCksIHNvdXJjZVRleHR1cmUtPnNpemUo
KSwgZmlsdGVyQ29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqIHF1
YWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkK
IHsKICAgICAvLyBUaGlzIG1ldGhvZCBkcmF3cyBhIGJhY2tncm91bmQgZmlsdGVyLCB3aGljaCBh
cHBsaWVzIGEgZmlsdGVyIHRvIGFueSBwaXhlbHMgYmVoaW5kIHRoZSBxdWFkIGFuZCBzZWVuIHRo
cm91Z2ggaXRzIGJhY2tncm91bmQuCiAgICAgLy8gVGhlIGFsZ29yaXRobSB3b3JrcyBhcyBmb2xs
b3dzOgpAQCAtNTg1LDcgKzYwMyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAgICAgLy8g
UGl4ZWwgY29waWVzIGluIHRoaXMgYWxnb3JpdGhtIG9jY3VyIGF0IHN0ZXBzIDIsIDMsIDQsIGFu
ZCA1LgogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBkcmF3aW5nU3VyZmFjZSA9IHF1YWQtPmxheWVy
KCktPnJlbmRlclN1cmZhY2UoKTsKLSAgICBpZiAoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRG
aWx0ZXJzKCkuaXNFbXB0eSgpKQorICAgIGlmIChxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIG9ubHkgYWxsb3cg
YmFja2dyb3VuZCBmaWx0ZXJzIG9uIHRoZSByb290IHJlbmRlciBzdXJmYWNlIGJlY2F1c2Ugb3Ro
ZXIgc3VyZmFjZXMgbWF5IGNvbnRhaW4KQEAgLTU5MywxNyArNjExLDIxIEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQqCiAgICAgaWYgKCFpc0N1cnJlbnRSZW5kZXJTdXJmYWNlKG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc3VyZmFjZURyYXdUcmFuc2Zvcm0gPSBxdWFkLT5pc1JlcGxpY2EoKSA/IGRyYXdp
bmdTdXJmYWNlLT5yZXBsaWNhRHJhd1RyYW5zZm9ybSgpIDogZHJhd2luZ1N1cmZhY2UtPmRyYXdU
cmFuc2Zvcm0oKTsKLQogICAgIC8vIEZJWE1FOiBEbyBhIHNpbmdsZSByZWFkYmFjayBmb3IgYm90
aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2FjaGUgdGhlIGZpbHRlcmVkIHJlc3VsdHMg
KG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1c2VkKS4KLSAgICBJbnRSZWN0IGRldmlj
ZVJlY3QgPSBkcmF3aW5nU3VyZmFjZS0+cmVhZGJhY2tEZXZpY2VDb250ZW50UmVjdCh0aGlzLCBz
dXJmYWNlRHJhd1RyYW5zZm9ybSk7CisgICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChjb250ZW50c0RldmljZVRyYW5zZm9y
bSwgc2hhcmVkR2VvbWV0cnlRdWFkKCkuYm91bmRpbmdCb3goKSkpOworCisgICAgaW50IHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdDsKKyAgICBxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmdldE91
dHNldHModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKKyAgICBkZXZpY2VSZWN0Lm1vdmUoLWxl
ZnQsIC10b3ApOworICAgIGRldmljZVJlY3QuZXhwYW5kKGxlZnQgKyByaWdodCwgdG9wICsgYm90
dG9tKTsKKwogICAgIGRldmljZVJlY3QuaW50ZXJzZWN0KG1fY3VycmVudFJlbmRlclN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCkpOwogCiAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBkZXZpY2VCYWNr
Z3JvdW5kVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9yZW5kZXJTdXJmYWNlVGV4
dHVyZU1hbmFnZXIuZ2V0KCkpOwogICAgIGlmICghZ2V0RnJhbWVidWZmZXJUZXh0dXJlKGRldmlj
ZUJhY2tncm91bmRUZXh0dXJlLmdldCgpLCBkZXZpY2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgU2tCaXRtYXAgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kID0gZHJhd2luZ1N1cmZhY2Ut
PmFwcGx5RmlsdGVycyh0aGlzLCBkcmF3aW5nU3VyZmFjZS0+YmFja2dyb3VuZEZpbHRlcnMoKSwg
ZGV2aWNlQmFja2dyb3VuZFRleHR1cmUuZ2V0KCkpOworICAgIFNrQml0bWFwIGZpbHRlcmVkRGV2
aWNlQmFja2dyb3VuZCA9IGFwcGx5RmlsdGVycyh0aGlzLCBxdWFkLT5iYWNrZ3JvdW5kRmlsdGVy
cygpLCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSk7CiAgICAgaWYgKCFmaWx0ZXJlZERl
dmljZUJhY2tncm91bmQuZ2V0VGV4dHVyZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTYxMywy
OSArNjM1LDE0NiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRG
aWx0ZXJzKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKgogICAgIGlmICghZHJhd2luZ1N1
cmZhY2UtPnByZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZSh0aGlzKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gVGhpcyBtdXN0IGJlIGNvbXB1dGVkIGJlZm9yZSBzd2l0Y2hpbmcgdGhlIHRhcmdl
dCByZW5kZXIgc3VyZmFjZSB0byB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlLgotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtID0gZHJhd2luZ1N1cmZhY2UtPmNv
bXB1dGVEZXZpY2VUcmFuc2Zvcm0odGhpcywgc3VyZmFjZURyYXdUcmFuc2Zvcm0pOwotCiAgICAg
Q0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlID0gbV9jdXJyZW50UmVuZGVyU3Vy
ZmFjZTsKLSAgICBpZiAodXNlTWFuYWdlZFRleHR1cmUoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91
bmRUZXh0dXJlKCksIGRyYXdpbmdTdXJmYWNlLT5jb250ZW50UmVjdCgpKSkgewotICAgICAgICBk
cmF3aW5nU3VyZmFjZS0+Y29weURldmljZVRvQmFja2dyb3VuZFRleHR1cmUodGhpcywgZmlsdGVy
ZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkLCBkZXZpY2VSZWN0LCBjb250ZW50c0RldmljZVRy
YW5zZm9ybSk7CisgICAgaWYgKHVzZU1hbmFnZWRUZXh0dXJlKGRyYXdpbmdTdXJmYWNlLT5iYWNr
Z3JvdW5kVGV4dHVyZSgpLCBxdWFkLT5xdWFkUmVjdCgpKSkgeworICAgICAgICAvLyBDb3B5IHRo
ZSByZWFkYmFjayBwaXhlbHMgZnJvbSBkZXZpY2UgdG8gdGhlIGJhY2tncm91bmQgdGV4dHVyZSBm
b3IgdGhlIHN1cmZhY2UuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRvU3Vy
ZmFjZVRyYW5zZm9ybTsKKyAgICAgICAgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3JtLnRyYW5zbGF0
ZShxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCkgLyAyLjAsIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0
KCkgLyAyLjApOworICAgICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0uc2NhbGUzZChxdWFk
LT5xdWFkUmVjdCgpLndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIDEpOworICAg
ICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0gKj0gY29udGVudHNEZXZpY2VUcmFuc2Zvcm0u
aW52ZXJzZSgpOworICAgICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKGRl
dmljZVJlY3Qud2lkdGgoKSAvIDIuMCwgZGV2aWNlUmVjdC5oZWlnaHQoKSAvIDIuMCk7CisgICAg
ICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS50cmFuc2xhdGUoZGV2aWNlUmVjdC54KCksIGRl
dmljZVJlY3QueSgpKTsKKworICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoZmlsdGVy
ZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkLCBkZXZpY2VSZWN0LnNpemUoKSwgZGV2aWNlVG9T
dXJmYWNlVHJhbnNmb3JtKTsKKwogICAgICAgICB1c2VSZW5kZXJTdXJmYWNlKHRhcmdldFJlbmRl
clN1cmZhY2UpOwogICAgIH0KIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCogcXVhZCkKIHsK
LSAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkLT5sYXllcigpOworICAgIC8vIFRoZSByZXBs
aWNhIGlzIGFsd2F5cyBkcmF3biBmaXJzdCwgc28gZnJlZSBhZnRlciBkcmF3aW5nIHRoZSBjb250
ZW50cy4KKyAgICBib29sIHNob3VsZFJlbGVhc2VUZXh0dXJlcyA9ICFxdWFkLT5pc1JlcGxpY2Eo
KTsKIAotICAgIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkKTsKKyAgICBDQ1JlbmRlclN1cmZh
Y2UqIGRyYXdpbmdTdXJmYWNlID0gcXVhZC0+bGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOwogCi0g
ICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0U2Npc3NvclJlY3QodGhpcywgcXVhZC0+c3Vy
ZmFjZURhbWFnZVJlY3QoKSk7Ci0gICAgaWYgKHF1YWQtPmlzUmVwbGljYSgpKQotICAgICAgICBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3UmVwbGljYSh0aGlzKTsKLSAgICBlbHNlCi0gICAg
ICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXdDb250ZW50cyh0aGlzKTsKLSAgICBsYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKLSAgICBsYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcmVuZGVyVHJhbnNmb3JtID0gcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKTsK
KyAgICAvLyBBcHBseSBhIHNjYWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEg
dG8gaXRzIGludGVuZGVkIHNpemUuCisgICAgcmVuZGVyVHJhbnNmb3JtLnNjYWxlM2QocXVhZC0+
cXVhZFJlY3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpLCAxKTsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4KHdpbmRvd01hdHJpeCgpICogcHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyVHJh
bnNmb3JtKS50bzJkVHJhbnNmb3JtKCk7CisKKyAgICAvLyBDYW4gb25seSBkcmF3IHN1cmZhY2Ug
aWYgZGV2aWNlIG1hdHJpeCBpcyBpbnZlcnRpYmxlLgorICAgIGlmICghY29udGVudHNEZXZpY2VU
cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFJlbGVhc2VUZXh0
dXJlcykgeworICAgICAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VCYWNrZ3JvdW5kVGV4
dHVyZSgpOworICAgICAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VDb250ZW50c1RleHR1
cmUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZHJhd0JhY2tn
cm91bmRGaWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKKworICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyBjYWxsIHdoZW4gdGhlIHF1YWQncyBzY2lzc29yUmVjdCgpIGlzIHNl
dCBjb3JyZWN0bHkuCisgICAgZHJhd2luZ1N1cmZhY2UtPnNldFNjaXNzb3JSZWN0KHRoaXMsIHF1
YWQtPnN1cmZhY2VEYW1hZ2VSZWN0KCkpOworCisgICAgaWYgKGRyYXdpbmdTdXJmYWNlLT5oYXNW
YWxpZENvbnRlbnRzVGV4dHVyZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZh
bHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBh
bmQgaXRzIHJlcGxpY2EuCisgICAgICAgIC8vIEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRlbnRz
IHRleHR1cmUuCisgICAgICAgIFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFwcGx5RmlsdGVycyh0
aGlzLCBxdWFkLT5maWx0ZXJzKCksIGRyYXdpbmdTdXJmYWNlLT5jb250ZW50c1RleHR1cmUoKSk7
CisgICAgICAgIGludCBjb250ZW50c1RleHR1cmVJZCA9IGRyYXdpbmdTdXJmYWNlLT5jb250ZW50
c1RleHR1cmUoKS0+dGV4dHVyZUlkKCk7CisgICAgICAgIGlmIChmaWx0ZXJCaXRtYXAuZ2V0VGV4
dHVyZSgpKSB7CisgICAgICAgICAgICBHclRleHR1cmUqIHRleHR1cmUgPSByZWludGVycHJldF9j
YXN0PEdyVGV4dHVyZSo+KGZpbHRlckJpdG1hcC5nZXRUZXh0dXJlKCkpOworICAgICAgICAgICAg
Y29udGVudHNUZXh0dXJlSWQgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlSGFuZGxlKCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBEcmF3IHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgaWYgdGhlcmUgaXMg
b25lLgorICAgICAgICBpZiAoZHJhd2luZ1N1cmZhY2UtPmhhc1ZhbGlkQmFja2dyb3VuZFRleHR1
cmUoKSkKKyAgICAgICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihkcmF3aW5nU3VyZmFj
ZS0+YmFja2dyb3VuZFRleHR1cmUoKS0+dGV4dHVyZUlkKCksIHF1YWQtPnF1YWRSZWN0KCkuc2l6
ZSgpLCBxdWFkLT5sYXllclRyYW5zZm9ybSgpKTsKKworICAgICAgICBGbG9hdFF1YWQgZGV2aWNl
UXVhZCA9IGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLm1hcFF1YWQoc2hhcmVkR2VvbWV0cnlRdWFk
KCkpOworICAgICAgICBDQ0xheWVyUXVhZCBkZXZpY2VMYXllckJvdW5kcyA9IENDTGF5ZXJRdWFk
KEZsb2F0UXVhZChkZXZpY2VRdWFkLmJvdW5kaW5nQm94KCkpKTsKKyAgICAgICAgQ0NMYXllclF1
YWQgZGV2aWNlTGF5ZXJFZGdlcyA9IENDTGF5ZXJRdWFkKGRldmljZVF1YWQpOworCisgICAgICAg
IC8vIFVzZSBhbnRpLWFsaWFzaW5nIHByb2dyYW1zIG9ubHkgd2hlbiBuZWNlc3NhcnkuCisgICAg
ICAgIGJvb2wgdXNlQUEgPSAoIWRldmljZVF1YWQuaXNSZWN0aWxpbmVhcigpIHx8ICFkZXZpY2VR
dWFkLmJvdW5kaW5nQm94KCkuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKTsKKyAgICAgICAgaWYg
KHVzZUFBKSB7CisgICAgICAgICAgICBkZXZpY2VMYXllckJvdW5kcy5pbmZsYXRlQW50aUFsaWFz
aW5nRGlzdGFuY2UoKTsKKyAgICAgICAgICAgIGRldmljZUxheWVyRWRnZXMuaW5mbGF0ZUFudGlB
bGlhc2luZ0Rpc3RhbmNlKCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHVzZU1hc2sgPSBx
dWFkLT5tYXNrVGV4dHVyZUlkKCk7CisKKyAgICAgICAgLy8gRklYTUU6IHVzZSB0aGUgYmFja2dy
b3VuZFRleHR1cmUgYW5kIGJsZW5kIHRoZSBiYWNrZ3JvdW5kIGluIHdpdGggdGhpcyBkcmF3IGlu
c3RlYWQgb2YgaGF2aW5nIGEgc2VwYXJhdGUgY29weSBvZiB0aGUgYmFja2dyb3VuZCB0ZXh0dXJl
LgorCisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICAgICAgY29udGV4dCgpLT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudHNUZXh0dXJlSWQpOworCisg
ICAgICAgIGludCBzaGFkZXJRdWFkTG9jYXRpb24gPSAtMTsKKyAgICAgICAgaW50IHNoYWRlckVk
Z2VMb2NhdGlvbiA9IC0xOworICAgICAgICBpbnQgc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiA9
IC0xOworICAgICAgICBpbnQgc2hhZGVyTWF0cml4TG9jYXRpb24gPSAtMTsKKyAgICAgICAgaW50
IHNoYWRlckFscGhhTG9jYXRpb24gPSAtMTsKKyAgICAgICAgaWYgKHVzZUFBICYmIHVzZU1hc2sp
IHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBKiBwcm9ncmFt
ID0gcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEoKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICAgICAg
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50
U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKworICAgICAgICAgICAgc2hhZGVyUXVh
ZExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpOworICAg
ICAgICAgICAgc2hhZGVyRWRnZUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5l
ZGdlTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24gPSBw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVyTG9jYXRpb24oKTsKKyAgICAgICAg
ICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4
TG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5m
cmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKKyAgICAgICAgfSBlbHNlIGlmICghdXNl
QUEgJiYgdXNlTWFzaykgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyU3VyZmFjZU1hc2tQcm9n
cmFtKiBwcm9ncmFtID0gcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7CisgICAgICAgICAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7
CisgICAgICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisKKyAgICAgICAgICAg
IHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1h
c2tTYW1wbGVyTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0g
cHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNo
YWRlckFscGhhTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRp
b24oKTsKKyAgICAgICAgfSBlbHNlIGlmICh1c2VBQSAmJiAhdXNlTWFzaykgeworICAgICAgICAg
ICAgY29uc3QgUmVuZGVyU3VyZmFjZVByb2dyYW1BQSogcHJvZ3JhbSA9IHJlbmRlclN1cmZhY2VQ
cm9ncmFtQUEoKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJv
Z3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0
aW9uKCksIDApKTsKKworICAgICAgICAgICAgc2hhZGVyUXVhZExvY2F0aW9uID0gcHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpOworICAgICAgICAgICAgc2hhZGVyRWRnZUxv
Y2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKTsKKyAgICAg
ICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0
cml4TG9jYXRpb24oKTsKKyAgICAgICAgICAgIHNoYWRlckFscGhhTG9jYXRpb24gPSBwcm9ncmFt
LT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VQcm9ncmFtKiBwcm9ncmFtID0gcmVuZGVyU3Vy
ZmFjZVByb2dyYW0oKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNl
UHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0KCks
IGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxv
Y2F0aW9uKCksIDApKTsKKworICAgICAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBwcm9n
cmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOworICAgICAgICAgICAgc2hhZGVy
QWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24gIT0g
LTEpIHsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsKKyAgICAgICAgICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24sIDEpKTsK
KyAgICAgICAgICAgIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHF1YWQtPm1hc2tUZXh0dXJlSWQoKSk7CisgICAgICAgICAgICBHTEMoY29udGV4
dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2hhZGVyRWRnZUxvY2F0aW9uICE9IC0xKSB7
CisgICAgICAgICAgICBmbG9hdCBlZGdlWzI0XTsKKyAgICAgICAgICAgIGRldmljZUxheWVyRWRn
ZXMudG9GbG9hdEFycmF5KGVkZ2UpOworICAgICAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMudG9G
bG9hdEFycmF5KCZlZGdlWzEyXSk7CisgICAgICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVuaWZvcm0zZnYoc2hhZGVyRWRnZUxvY2F0aW9uLCA4LCBlZGdlKSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBNYXAgZGV2aWNlIHNwYWNlIHF1YWQgdG8gc3VyZmFjZSBzcGFjZS4KKyAg
ICAgICAgRmxvYXRRdWFkIHN1cmZhY2VRdWFkID0gY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaW52
ZXJzZSgpLm1hcFF1YWQoZGV2aWNlTGF5ZXJFZGdlcy5mbG9hdFF1YWQoKSk7CisKKyAgICAgICAg
ZHJhd1RleHR1cmVkUXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBxdWFkLT5xdWFkUmVjdCgp
LndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc3Vy
ZmFjZVF1YWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24s
IHNoYWRlckFscGhhTG9jYXRpb24sIHNoYWRlclF1YWRMb2NhdGlvbik7CisgICAgfQorCisgICAg
aWYgKHNob3VsZFJlbGVhc2VUZXh0dXJlcykgeworICAgICAgICBkcmF3aW5nU3VyZmFjZS0+cmVs
ZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7CisgICAgICAgIGRyYXdpbmdTdXJmYWNlLT5yZWxlYXNl
Q29udGVudHNUZXh0dXJlKCk7CisgICAgfQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiBxdWFkKQpA
QCAtMTE1OSw2ICsxMjk4LDI1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4
dHVyZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0CiAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFO
R0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7CiB9CiAKK3Zv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoaW50IHRl
eHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZHJhd01hdHJpeCkKK3sKKyAgICBjb25zdCBSZW5kZXJTdXJmYWNlUHJvZ3JhbSogcHJvZ3Jh
bSA9IHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdGV4dHVyZUlkKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFw
aGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7
CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBj
b250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1w
bGVyTG9jYXRpb24oKSwgMCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoZHJhd01hdHJpeCwgYm91
bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgMSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIo
KS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtMSk7Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpmaW5pc2goKQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06
OmZpbmlzaCIsIHRoaXMsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRl
eCAxYTJlYmVkMGU4NmI5OWY1ODE5NjgzMWJjZWNlNDYzMDE0NzJjOTU5Li44MWVlMWE3YjUxYjc1
MGQ1MzI0Mjc4ZGFjMTJjYjI4NTZmNmMzNWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaApAQCAtMTM1LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdUZXh0dXJl
ZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBGbG9hdFF1YWQmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0cml4
TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uLCBpbnQgcXVhZExvY2F0aW9uKTsKKyAgICB2b2lk
IGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBi
b3VuZHMsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKIAogcHJvdGVj
dGVkOgogICAgIGZyaWVuZCBjbGFzcyBMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0FkYXB0ZXI7CkBAIC0xNTMsNyArMTU0LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VE
YW1hZ2VSZWN0KTsKICAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tl
cmJvYXJkRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NE
ZWJ1Z0JvcmRlckRyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29u
c3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdCYWNrZ3JvdW5kRmls
dGVycyhjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCosIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pOwogICAgIHZvaWQgZHJhd1JlbmRlclN1cmZhY2VRdWFk
KGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3U29saWRDb2xv
clF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdUZXh0dXJl
UXVhZChjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmlu
ZGV4IDZkODA2ODRmNjY0ZjAyNWRmNTM2YTcwZWVkZmQ0NDViZmI4MzQ0ZjQuLjY5ZGU5MDQ3MjQ4
ZjgzYzg5ODMwYzgwYjBmYjkxMjRjYWJjZTQ5MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAK
QEAgLTE2OSw5ICsxNjksMTAgQEAgdm9pZCBDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJR
dWFkKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXUKICAgICBxdWFkTGlz
dC5hcHBlbmQoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBs
YXllclJlY3QsIGRlYnVnQm9yZGVyQ29sb3IoKSwgZGVidWdCb3JkZXJXaWR0aCgpKSk7CiB9CiAK
LXZvaWQgQ0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKikKK3Vuc2lnbmVkIENDTGF5ZXJJbXBsOjpjb250ZW50c1RleHR1cmVJZCgpIGNvbnN0CiB7
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgQ0NM
YXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmgKaW5kZXggYmI3NWE4OWViYWQzZjVhYWEzOTg1MmQ0NGQ5ODRhODIxMTliOTZmMC4uODg0
YzEyOWFkYWEwOGYwNWNiZDQ0MzhjNzk3MWI0ZTA3ZDVmNzdkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdygp
OwogICAgIHZvaWQgYXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZEN1bGxlciYsIGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRz
VGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNv
bnRlbnRzVGV4dHVyZUlkKCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBs
YXllciBoYXMgY29udGVudCB0byBkcmF3LgogICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggMmEwZjcx
ODAzOTIyMjZmNWU0YTI4MDc5MjhhZjU3ZjQ1NmVhZjY4OC4uZTRlZTNlZGMxYTc4ZTNmMDgwMWU5
OGVlOWNjYzU1MTUxODRlNTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21tb24uY3BwCkBAIC00NzUsMTEgKzQ3NSw4IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAg
ICAgICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyhmYWxzZSk7CiAgICAgICAgIGxheWVy
LT5zZXRDbGlwUmVjdChJbnRSZWN0KCkpOwogCi0gICAgICAgIGlmIChsYXllci0+bWFza0xheWVy
KCkpIHsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihsYXllci0+bWFz
a0xheWVyKCkpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQogICAgICAgICAgICAg
bGF5ZXItPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2Up
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXll
cigwKTsKIAogICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVy
KCktPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NRdWFkQ3VsbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKaW5kZXggMzY0NjI0ODY2MjQ1NjY5MGI1YmZiY2UyYTlj
OGMxZWIzNTg3NDhiNy4uZTViNDVlOTEzMTFjNDJmNjE4NjE3NDYwOTZkN2VjOTg1YjJiMjcyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NRdWFkQ3VsbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCkBAIC04OSwxMSArODksNSBAQCBib29sIENDUXVh
ZEN1bGxlcjo6YXBwZW5kU3VyZmFjZShQYXNzT3duUHRyPENDRHJhd1F1YWQ+IHBhc3NEcmF3UXVh
ZCkKICAgICByZXR1cm4gYXBwZW5kUXVhZEludGVybmFsKHBhc3NEcmF3UXVhZCwgY3VsbGVkUmVj
dCwgbV9xdWFkTGlzdCwgKm1fb2NjbHVzaW9uVHJhY2tlciwgbV9zaG93Q3VsbGluZ1dpdGhEZWJ1
Z0JvcmRlclF1YWRzKTsKIH0KIAotYm9vbCBDQ1F1YWRDdWxsZXI6OmFwcGVuZFJlcGxpY2EoUGFz
c093blB0cjxDQ0RyYXdRdWFkPiBwYXNzRHJhd1F1YWQpCi17Ci0gICAgSW50UmVjdCBjdWxsZWRS
ZWN0ID0gbV9vY2NsdXNpb25UcmFja2VyLT51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNv
bnRlbnRSZWN0KG1fbGF5ZXItPnJlbmRlclN1cmZhY2UoKSwgdHJ1ZSwgcGFzc0RyYXdRdWFkLT5x
dWFkUmVjdCgpKTsKLSAgICByZXR1cm4gYXBwZW5kUXVhZEludGVybmFsKHBhc3NEcmF3UXVhZCwg
Y3VsbGVkUmVjdCwgbV9xdWFkTGlzdCwgKm1fb2NjbHVzaW9uVHJhY2tlciwgbV9zaG93Q3VsbGlu
Z1dpdGhEZWJ1Z0JvcmRlclF1YWRzKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgK
aW5kZXggMmQyZDgwMTY2M2U2ZjA2MTM4MzUzZjJjNTY1ZGE3ZDA5MGQyM2I3Yi4uMjk5OWI2YWQ1
YWY4NDQ1NTQyNzRkNDRlMWI5NDVmNjc5ODdlNWY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgK
QEAgLTQxLDcgKzQxLDYgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVh
ZCBpcyBhZGRlZCB0byB0aGUgbGlzdCwgYW5kIGZhbHNlIGlmIHRoZSBxdWFkIGlzIGVudGlyZWx5
IGN1bGxlZC4KICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kKFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4g
cGFzc0RyYXdRdWFkKTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kU3VyZmFjZShQYXNzT3duUHRy
PENDRHJhd1F1YWQ+IHBhc3NEcmF3UXVhZCk7Ci0gICAgdmlydHVhbCBib29sIGFwcGVuZFJlcGxp
Y2EoUGFzc093blB0cjxDQ0RyYXdRdWFkPiBwYXNzRHJhd1F1YWQpOwogCiBwcml2YXRlOgogICAg
IENDUXVhZExpc3QmIG1fcXVhZExpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAppbmRleCA4
NDg3MzBhMmM3YjYwYjc2MjM4OTlmZDdmOWI0MTMzMGEyZTk3Y2I3Li42NTQwMWUwM2Q3OTVmNmVm
MWNiYTc5NmJiODFjNDc0OWZkNzZiYTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKQEAg
LTI4LDI1ICsyOCwxMyBAQAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogCiAjaW5jbHVk
ZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJj
Yy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgotI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKICNpbmNsdWRl
ICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGggPSAyOwotc3RhdGljIGNvbnN0
IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJBbHBoYSA9IDEwMDsKLXN0YXRpYyBjb25zdCBpbnQgZGVi
dWdTdXJmYWNlQm9yZGVyQ29sb3JSZWQgPSAwOwotc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZh
Y2VCb3JkZXJDb2xvckdyZWVuID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9y
ZGVyQ29sb3JCbHVlID0gMjU1Owotc3RhdGljIGNvbnN0IGludCBkZWJ1Z1JlcGxpY2FCb3JkZXJD
b2xvclJlZCA9IDE2MDsKLXN0YXRpYyBjb25zdCBpbnQgZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JH
cmVlbiA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IGRlYnVnUmVwbGljYUJvcmRlckNvbG9yQmx1ZSA9
IDI1NTsKLQogUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IENDUmVuZGVyUGFzczo6Y3JlYXRlKEND
UmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDUmVuZGVyUGFzcyh0YXJnZXRTdXJmYWNlKSk7CkBAIC03NiwyNSArNjQsMTYgQEAgdm9pZCBD
Q1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBs
KiBsYXllciwgQ0NPY2NsdXMKIAogICAgIENDUmVuZGVyU3VyZmFjZSogc3VyZmFjZSA9IGxheWVy
LT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBzaGFyZWRR
dWFkU3RhdGUgPSBzdXJmYWNlLT5jcmVhdGVTaGFyZWRRdWFkU3RhdGUoKTsKLSAgICBpZiAobGF5
ZXItPmhhc0RlYnVnQm9yZGVycygpKSB7Ci0gICAgICAgIENvbG9yIGNvbG9yKGRlYnVnU3VyZmFj
ZUJvcmRlckNvbG9yUmVkLCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckdyZWVuLCBkZWJ1Z1N1cmZh
Y2VCb3JkZXJDb2xvckJsdWUsIGRlYnVnU3VyZmFjZUJvcmRlckFscGhhKTsKLSAgICAgICAgcXVh
ZEN1bGxlci5hcHBlbmRTdXJmYWNlKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJl
ZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgY29sb3IsIGRlYnVnU3Vy
ZmFjZUJvcmRlcldpZHRoKSk7Ci0gICAgfQotICAgIGJvb2wgaXNSZXBsaWNhID0gZmFsc2U7Ci0g
ICAgcXVhZEN1bGxlci5hcHBlbmRTdXJmYWNlKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVh
dGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBsYXllciwg
c3VyZmFjZURhbWFnZVJlY3QoKSwgaXNSZXBsaWNhKSk7CisgICAgc3VyZmFjZS0+YXBwZW5kUXVh
ZHMocXVhZEN1bGxlciwgc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBmYWxzZSwgc3VyZmFjZURhbWFn
ZVJlY3QoKSk7CiAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3Rh
dGUucmVsZWFzZSgpKTsKIAorICAgIGlmICghc3VyZmFjZS0+aGFzUmVwbGljYSgpKQorICAgICAg
ICByZXR1cm47CisKICAgICAvLyBBZGQgcmVwbGljYSBhZnRlciB0aGUgc3VyZmFjZSBzbyB0aGF0
IGl0IGFwcGVhcnMgYmVsb3cgdGhlIHN1cmZhY2UuCi0gICAgaWYgKHN1cmZhY2UtPmhhc1JlcGxp
Y2EoKSkgewotICAgICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0
ZSA9IHN1cmZhY2UtPmNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFkU3RhdGUoKTsKLSAgICAgICAgaWYg
KGxheWVyLT5oYXNEZWJ1Z0JvcmRlcnMoKSkgewotICAgICAgICAgICAgQ29sb3IgY29sb3IoZGVi
dWdSZXBsaWNhQm9yZGVyQ29sb3JSZWQsIGRlYnVnUmVwbGljYUJvcmRlckNvbG9yR3JlZW4sIGRl
YnVnUmVwbGljYUJvcmRlckNvbG9yQmx1ZSwgZGVidWdTdXJmYWNlQm9yZGVyQWxwaGEpOwotICAg
ICAgICAgICAgcXVhZEN1bGxlci5hcHBlbmRSZXBsaWNhKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6
Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgY29s
b3IsIGRlYnVnU3VyZmFjZUJvcmRlcldpZHRoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBp
c1JlcGxpY2EgPSB0cnVlOwotICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFJlcGxpY2EoQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCksIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCgpLCBpc1JlcGxpY2EpKTsK
LSAgICAgICAgbV9zaGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVs
ZWFzZSgpKTsKLSAgICB9CisgICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByZXBsaWNhU2hh
cmVkUXVhZFN0YXRlID0gc3VyZmFjZS0+Y3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpOwor
ICAgIHN1cmZhY2UtPmFwcGVuZFF1YWRzKHF1YWRDdWxsZXIsIHJlcGxpY2FTaGFyZWRRdWFkU3Rh
dGUuZ2V0KCksIHRydWUsIHN1cmZhY2VEYW1hZ2VSZWN0KCkpOworICAgIG1fc2hhcmVkUXVhZFN0
YXRlTGlzdC5hcHBlbmQocmVwbGljYVNoYXJlZFF1YWRTdGF0ZS5yZWxlYXNlKCkpOwogfQogCiB2
b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNUb0ZpbGxTY3JlZW4oQ0NMYXllckltcGwqIHJv
b3RMYXllciwgY29uc3QgQ29sb3ImIHNjcmVlbkJhY2tncm91bmRDb2xvciwgY29uc3QgQ0NPY2Ns
dXNpb25UcmFja2VySW1wbCYgb2NjbHVzaW9uVHJhY2tlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwCmluZGV4IDZhYjUwOTk4ZDQzM2Y1NjM0ZGJlMGYyMGJjNjcxODI3ZDZlOTJiMzIu
LjBlMGQ5YTQ5MmQ5YWM4ODk0ODhjZTU3MDAyYWQ4YTJiMzIzN2I4ZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMjksMjcgKzI5LDMyIEBACiAKICNpbmNsdWRlICJjYy9D
Q1JlbmRlclN1cmZhY2UuaCIKIAotI2luY2x1ZGUgIkdlb21ldHJ5QmluZGluZy5oIgotI2luY2x1
ZGUgIkdyVGV4dHVyZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVk
ZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCi0jaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VU
cmFja2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKLSNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCi0jaW5jbHVkZSAi
Y2MvQ0NSZW5kZXJTdXJmYWNlRmlsdGVycy5oIgorI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5o
IgorI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NTaGFyZWRRdWFkU3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJX
aWR0aCA9IDI7CitzdGF0aWMgY29uc3QgaW50IGRlYnVnU3VyZmFjZUJvcmRlckFscGhhID0gMTAw
Oworc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvclJlZCA9IDA7CitzdGF0
aWMgY29uc3QgaW50IGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yR3JlZW4gPSAwOworc3RhdGljIGNv
bnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckJsdWUgPSAyNTU7CitzdGF0aWMgY29uc3Qg
aW50IGRlYnVnUmVwbGljYUJvcmRlckNvbG9yUmVkID0gMTYwOworc3RhdGljIGNvbnN0IGludCBk
ZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvckdyZWVuID0gMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdS
ZXBsaWNhQm9yZGVyQ29sb3JCbHVlID0gMjU1OworCiBDQ1JlbmRlclN1cmZhY2U6OkNDUmVuZGVy
U3VyZmFjZShDQ0xheWVySW1wbCogb3duaW5nTGF5ZXIpCiAgICAgOiBtX293bmluZ0xheWVyKG93
bmluZ0xheWVyKQotICAgICwgbV9tYXNrTGF5ZXIoMCkKLSAgICAsIG1fc2tpcHNEcmF3KGZhbHNl
KQogICAgICwgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkKGZhbHNlKQogICAgICwgbV9kcmF3T3Bh
Y2l0eSgxKQogICAgICwgbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nKGZhbHNlKQpAQCAtODgsMjIg
KzkzLDI1IEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQ29udGVudHNUZXh0dXJlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlCiAgICAgaWYgKG1fY29udGVudHNUZXh0
dXJlLT5pc1Jlc2VydmVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX2Nv
bnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBKSkgewotICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgaWYgKCFtX2NvbnRlbnRz
VGV4dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIG1fc2tpcHNEcmF3ID0gZmFsc2U7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQ29u
dGVudHNUZXh0dXJlKCkKIHsKLSAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0
dXJlKQorICAgIGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5p
c1Jlc2VydmVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRlbnRzVGV4dHVyZS0+dW5y
ZXNlcnZlKCk7CiB9CiAKK2Jvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZENvbnRlbnRzVGV4
dHVyZSgpIGNvbnN0Cit7CisgICAgSW50U2l6ZSByZXF1aXJlZFNpemUobV9jb250ZW50UmVjdC5z
aXplKCkpOworICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAmJiBtX2NvbnRlbnRzVGV4dHVy
ZS0+aXNSZXNlcnZlZCgpICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkU2l6
ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworfQorCiBib29sIENDUmVuZGVyU3VyZmFjZTo6
cHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlcikKIHsKICAgICBJbnRTaXplIHJlcXVpcmVkU2l6ZShtX2NvbnRlbnRSZWN0LnNpemUoKSk7
CkBAIC0xMjMsODkgKzEzMSwxNSBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUJhY2tn
cm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZQogCiB2b2lkIEND
UmVuZGVyU3VyZmFjZTo6cmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCkKIHsKLSAgICBpZiAoIW1f
YmFja2dyb3VuZFRleHR1cmUpCisgICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlIHx8ICFtX2Jh
Y2tncm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2Jh
Y2tncm91bmRUZXh0dXJlLT51bnJlc2VydmUoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXgg
Q0NSZW5kZXJTdXJmYWNlOjpjb21wdXRlRGV2aWNlVHJhbnNmb3JtKExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFu
c2Zvcm0pIGNvbnN0Ci17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyVHJhbnNmb3Jt
ID0gZHJhd1RyYW5zZm9ybTsKLSAgICAvLyBBcHBseSBhIHNjYWxpbmcgZmFjdG9yIHRvIHNpemUg
dGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGludGVuZGVkIHNpemUuCi0gICAgcmVuZGVyVHJhbnNm
b3JtLnNjYWxlM2QobV9jb250ZW50UmVjdC53aWR0aCgpLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgp
LCAxKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VUcmFuc2Zvcm0gPSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeChsYXllclJlbmRlcmVyLT53aW5kb3dNYXRyaXgoKSAqIGxheWVyUmVuZGVy
ZXItPnByb2plY3Rpb25NYXRyaXgoKSAqIHJlbmRlclRyYW5zZm9ybSkudG8yZFRyYW5zZm9ybSgp
OwotICAgIHJldHVybiBkZXZpY2VUcmFuc2Zvcm07Ci19Ci0KLUludFJlY3QgQ0NSZW5kZXJTdXJm
YWNlOjpjb21wdXRlRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29u
c3QKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9ybSA9
IGNvbXB1dGVEZXZpY2VUcmFuc2Zvcm0obGF5ZXJSZW5kZXJlciwgZHJhd1RyYW5zZm9ybSk7Ci0K
LSAgICAvLyBDYW4gb25seSBkcmF3IHN1cmZhY2UgaWYgZGV2aWNlIG1hdHJpeCBpcyBpbnZlcnRp
YmxlLgotICAgIGlmICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0g
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBGbG9hdFF1YWQgZGV2aWNlUXVhZCA9IGNv
bnRlbnRzRGV2aWNlVHJhbnNmb3JtLm1hcFF1YWQobGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0
cnlRdWFkKCkpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGRldmljZVF1YWQuYm91bmRp
bmdCb3goKSk7Ci19Ci0KLUludFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpjb21wdXRlUmVhZGJhY2tE
ZXZpY2VCb3VuZGluZ0JveChMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdAotewotICAgIElu
dFJlY3QgZGV2aWNlUmVjdCA9IGNvbXB1dGVEZXZpY2VCb3VuZGluZ0JveChsYXllclJlbmRlcmVy
LCBkcmF3VHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2JhY2tncm91bmRGaWx0ZXJzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIGRldmljZVJlY3Q7Ci0KLSAgICBpbnQgdG9wLCByaWdodCwgYm90
dG9tLCBsZWZ0OwotICAgIG1fYmFja2dyb3VuZEZpbHRlcnMuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0
LCBib3R0b20sIGxlZnQpOwotICAgIGRldmljZVJlY3QubW92ZSgtbGVmdCwgLXRvcCk7Ci0gICAg
ZGV2aWNlUmVjdC5leHBhbmQobGVmdCArIHJpZ2h0LCB0b3AgKyBib3R0b20pOwotCi0gICAgcmV0
dXJuIGRldmljZVJlY3Q7Ci19Ci0KLUludFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpyZWFkYmFja0Rl
dmljZUNvbnRlbnRSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNvbXB1dGVSZWFkYmFja0RldmljZUJvdW5kaW5nQm94KGxheWVyUmVuZGVyZXIsIGRyYXdU
cmFuc2Zvcm0pOwotfQotCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6Y29weVRleHR1cmVUb0ZyYW1l
YnVmZmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgaW50IHRleHR1cmVJ
ZCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJh
d01hdHJpeCkKK2Jvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZEJhY2tncm91bmRUZXh0dXJl
KCkgY29uc3QKIHsKLSAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1cmZh
Y2VQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVByb2dyYW0o
KTsKLQotICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXItPmNv
bnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAg
ICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCkt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsK
LSAgICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0
KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
KTsKLSAgICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250
ZXh0KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
QVIpKTsKLQotICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXIt
PmNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICBHTEMobGF5
ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPnVuaWZvcm0x
aShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAg
bGF5ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3TWF0cml4LCBib3VuZHMud2lkdGgo
KSwgYm91bmRzLmhlaWdodCgpLCAxLCBsYXllclJlbmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1YWQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNo
YWRlcigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZh
Y2U6OmNvcHlEZXZpY2VUb0JhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlciwgaW50IGRldmljZUJhY2tncm91bmRUZXh0dXJlSWQsIGNvbnN0IEludFJl
Y3QmIGRldmljZVRleHR1cmVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNl
VHJhbnNmb3JtKSBjb25zdAotewotICAgIEFTU0VSVCghbV9iYWNrZ3JvdW5kRmlsdGVycy5pc0Vt
cHR5KCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlVG9TdXJmYWNlVHJhbnNm
b3JtOwotICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS50cmFuc2xhdGUobV9jb250ZW50UmVj
dC53aWR0aCgpIC8gMi4wLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgpIC8gMi4wKTsKLSAgICBkZXZp
Y2VUb1N1cmZhY2VUcmFuc2Zvcm0uc2NhbGUzZChtX2NvbnRlbnRSZWN0LndpZHRoKCksIG1fY29u
dGVudFJlY3QuaGVpZ2h0KCksIDEpOwotICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybSAqPSBk
ZXZpY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS50
cmFuc2xhdGUoZGV2aWNlVGV4dHVyZVJlY3Qud2lkdGgoKSAvIDIuMCwgZGV2aWNlVGV4dHVyZVJl
Y3QuaGVpZ2h0KCkgLyAyLjApOwotICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS50cmFuc2xh
dGUoZGV2aWNlVGV4dHVyZVJlY3QueCgpLCBkZXZpY2VUZXh0dXJlUmVjdC55KCkpOwotCi0gICAg
Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGxheWVyUmVuZGVyZXIsIGRldmljZUJhY2tncm91bmRU
ZXh0dXJlSWQsIGRldmljZVRleHR1cmVSZWN0LnNpemUoKSwgZGV2aWNlVG9TdXJmYWNlVHJhbnNm
b3JtKTsKLX0KLQotaW5saW5lIHN0YXRpYyBpbnQgZ2V0U2tCaXRtYXBUZXh0dXJlSWQoY29uc3Qg
U2tCaXRtYXAmIGJpdG1hcCwgaW50IGZhbGxiYWNrKQotewotICAgIGlmICghYml0bWFwLmdldFRl
eHR1cmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbGxiYWNrOwotICAgIEdyVGV4dHVyZSogdGV4dHVy
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oYml0bWFwLmdldFRleHR1cmUoKSk7Ci0g
ICAgcmV0dXJuIHRleHR1cmUtPmdldFRleHR1cmVIYW5kbGUoKTsKKyAgICBJbnRTaXplIHJlcXVp
cmVkU2l6ZShtX2NvbnRlbnRSZWN0LnNpemUoKSk7CisgICAgcmV0dXJuIG1fYmFja2dyb3VuZFRl
eHR1cmUgJiYgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpICYmIG1fYmFja2dyb3Vu
ZFRleHR1cmUtPmlzVmFsaWQocmVxdWlyZWRTaXplLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7
CiB9CiAKIHZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpzZXRTY2lzc29yUmVjdChMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJl
Y3QpIGNvbnN0CkBAIC0yMjIsMTM5ICsxNTYsNiBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6c2V0
U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdAog
ICAgICAgICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250
ZXh0KCktPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogfQogCi12
b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhd0NvbnRlbnRzKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcikKLXsKLSAgICBpZiAobV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0
dXJlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogQ2FjaGUgdGhpcyB2YWx1ZSBz
byB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gaXQgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIGl0
cyByZXBsaWNhLgotICAgIC8vIEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRlbnRzIHRleHR1cmUu
Ci0gICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0ZXJzKGxheWVyUmVuZGVyZXIs
IG1fZmlsdGVycywgbV9jb250ZW50c1RleHR1cmUuZ2V0KCkpOwotCi0gICAgaW50IGNvbnRlbnRz
VGV4dHVyZUlkID0gZ2V0U2tCaXRtYXBUZXh0dXJlSWQoZmlsdGVyQml0bWFwLCBtX2NvbnRlbnRz
VGV4dHVyZS0+dGV4dHVyZUlkKCkpOwotICAgIGRyYXdMYXllcihsYXllclJlbmRlcmVyLCBtX21h
c2tMYXllciwgbV9kcmF3VHJhbnNmb3JtLCBjb250ZW50c1RleHR1cmVJZCk7Ci19Ci0KLXZvaWQg
Q0NSZW5kZXJTdXJmYWNlOjpkcmF3UmVwbGljYShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIpCi17Ci0gICAgQVNTRVJUKGhhc1JlcGxpY2EoKSk7Ci0gICAgaWYgKCFoYXNSZXBs
aWNhKCkgfHwgbV9za2lwc0RyYXcgfHwgIW1fY29udGVudHNUZXh0dXJlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBBcHBseSBmaWx0ZXJzIHRvIHRoZSBjb250ZW50cyB0ZXh0dXJlLgotICAg
IFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFwcGx5RmlsdGVycyhsYXllclJlbmRlcmVyLCBtX2Zp
bHRlcnMsIG1fY29udGVudHNUZXh0dXJlLmdldCgpKTsKLQotICAgIC8vIEZJWE1FOiBCeSB1c2lu
ZyB0aGUgc2FtZSBSZW5kZXJTdXJmYWNlIGZvciBib3RoIHRoZSBjb250ZW50IGFuZCBpdHMgcmVm
bGVjdGlvbiwKLSAgICAvLyBpdCdzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gYXBwbHkgYSBz
ZXBhcmF0ZSBtYXNrIHRvIHRoZSByZWZsZWN0aW9uIGxheWVyCi0gICAgLy8gb3IgY29ycmVjdGx5
IGhhbmRsZSBvcGFjaXR5IGluIHJlZmxlY3Rpb25zIChvcGFjaXR5IG11c3QgYmUgYXBwbGllZCBh
ZnRlciBkcmF3aW5nCi0gICAgLy8gYm90aCB0aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0aW9uKS4g
VGhlIHNvbHV0aW9uIGlzIHRvIGludHJvZHVjZSB5ZXQgYW5vdGhlciBSZW5kZXJTdXJmYWNlCi0g
ICAgLy8gdG8gZHJhdyB0aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0aW9uIGluLiBGb3Igbm93IHdl
IG9ubHkgYXBwbHkgYSBzZXBhcmF0ZSByZWZsZWN0aW9uCi0gICAgLy8gbWFzayBpZiB0aGUgY29u
dGVudHMgZG9uJ3QgaGF2ZSBhIG1hc2sgb2YgdGhlaXIgb3duLgotICAgIENDTGF5ZXJJbXBsKiBy
ZXBsaWNhTWFza0xheWVyID0gbV9tYXNrTGF5ZXI7Ci0gICAgaWYgKCFtX21hc2tMYXllciAmJiBt
X293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgcmVwbGljYU1hc2tMYXllciA9
IG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKTsKLQotICAgIGludCBj
b250ZW50c1RleHR1cmVJZCA9IGdldFNrQml0bWFwVGV4dHVyZUlkKGZpbHRlckJpdG1hcCwgbV9j
b250ZW50c1RleHR1cmUtPnRleHR1cmVJZCgpKTsKLSAgICBkcmF3TGF5ZXIobGF5ZXJSZW5kZXJl
ciwgcmVwbGljYU1hc2tMYXllciwgbV9yZXBsaWNhRHJhd1RyYW5zZm9ybSwgY29udGVudHNUZXh0
dXJlSWQpOwotfQotCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhd0xheWVyKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgQ0NMYXllckltcGwqIG1hc2tMYXllciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGludCBjb250ZW50c1RleHR1cmVJ
ZCkKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VNYXRyaXggPSBjb21wdXRlRGV2
aWNlVHJhbnNmb3JtKGxheWVyUmVuZGVyZXIsIGRyYXdUcmFuc2Zvcm0pOwotCi0gICAgLy8gQ2Fu
IG9ubHkgZHJhdyBzdXJmYWNlIGlmIGRldmljZSBtYXRyaXggaXMgaW52ZXJ0aWJsZS4KLSAgICBp
ZiAoIWRldmljZU1hdHJpeC5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRHJhdyB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGlmIHRoZXJlIGlzIG9uZS4KLSAgICBpZiAo
bV9iYWNrZ3JvdW5kVGV4dHVyZSAmJiBtX2JhY2tncm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkp
Ci0gICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihsYXllclJlbmRlcmVyLCBtX2JhY2tn
cm91bmRUZXh0dXJlLT50ZXh0dXJlSWQoKSwgbV9jb250ZW50UmVjdC5zaXplKCksIGRyYXdUcmFu
c2Zvcm0pOwotCi0gICAgRmxvYXRRdWFkIHF1YWQgPSBkZXZpY2VNYXRyaXgubWFwUXVhZChsYXll
clJlbmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1YWQoKSk7Ci0gICAgQ0NMYXllclF1YWQgZGV2aWNl
UmVjdCA9IENDTGF5ZXJRdWFkKEZsb2F0UXVhZChxdWFkLmJvdW5kaW5nQm94KCkpKTsKLSAgICBD
Q0xheWVyUXVhZCBsYXllclF1YWQgPSBDQ0xheWVyUXVhZChxdWFkKTsKLQotICAgIC8vIFVzZSBh
bnRpLWFsaWFzaW5nIHByb2dyYW1zIG9ubHkgd2hlbiBuZWNlc3NhcnkuCi0gICAgYm9vbCB1c2VB
QSA9ICghcXVhZC5pc1JlY3RpbGluZWFyKCkgfHwgIXF1YWQuYm91bmRpbmdCb3goKS5pc0V4cHJl
c3NpYmxlQXNJbnRSZWN0KCkpOwotCi0gICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgIGRldmljZVJl
Y3QuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7Ci0gICAgICAgIGxheWVyUXVhZC5pbmZs
YXRlQW50aUFsaWFzaW5nRGlzdGFuY2UoKTsKLSAgICB9Ci0KLSAgICBib29sIHVzZU1hc2sgPSBm
YWxzZTsKLSAgICBpZiAobWFza0xheWVyICYmIG1hc2tMYXllci0+ZHJhd3NDb250ZW50KCkpCi0g
ICAgICAgIGlmICghbWFza0xheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICB1
c2VNYXNrID0gdHJ1ZTsKLQotICAgIC8vIEZJWE1FOiBwYXNzIGluIGJhY2tncm91bmRUZXh0dXJl
SWQgYW5kIGJsZW5kIHRoZSBiYWNrZ3JvdW5kIGluIHdpdGggdGhpcyBkcmF3IGluc3RlYWQgb2Yg
aGF2aW5nIGEgc2VwYXJhdGUgZHJhd0JhY2tncm91bmQoKSBwYXNzLgotCi0gICAgaWYgKHVzZU1h
c2spIHsKLSAgICAgICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgICAgICBjb25zdCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OlJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBKiBwcm9ncmFtID0gbGF5ZXJS
ZW5kZXJlci0+cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEoKTsKLSAgICAgICAgICAgIGRyYXdT
dXJmYWNlKGxheWVyUmVuZGVyZXIsIG1hc2tMYXllciwgZHJhd1RyYW5zZm9ybSwgZGV2aWNlTWF0
cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGNvbnRlbnRzVGV4dHVyZUlkLCBwcm9ncmFtLCBw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVyTG9jYXRpb24oKSwgcHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigp
LmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKiBwcm9ncmFtID0g
bGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7Ci0gICAgICAgICAgICBk
cmF3U3VyZmFjZShsYXllclJlbmRlcmVyLCBtYXNrTGF5ZXIsIGRyYXdUcmFuc2Zvcm0sIGRldmlj
ZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBjb250ZW50c1RleHR1cmVJZCwgcHJvZ3Jh
bSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxvY2F0aW9uKCksIC0xLCAt
MSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAodXNlQUEpIHsKLSAgICAg
ICAgICAgIGNvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZVByb2dyYW1B
QSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VQcm9ncmFtQUEoKTsKLSAg
ICAgICAgICAgIGRyYXdTdXJmYWNlKGxheWVyUmVuZGVyZXIsIG1hc2tMYXllciwgZHJhd1RyYW5z
Zm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGNvbnRlbnRzVGV4dHVy
ZUlkLCBwcm9ncmFtLCAtMSwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigp
LCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGNvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6UmVuZGVyU3Vy
ZmFjZVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlUHJvZ3Jh
bSgpOwotICAgICAgICAgICAgZHJhd1N1cmZhY2UobGF5ZXJSZW5kZXJlciwgbWFza0xheWVyLCBk
cmF3VHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgY29udGVu
dHNUZXh0dXJlSWQsIHByb2dyYW0sIC0xLCAtMSwgLTEpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3U3VyZmFjZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIENDTGF5ZXJJbXBsKiBtYXNrTGF5
ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2
aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQmIGxheWVyUXVhZCwgaW50IGNvbnRlbnRzVGV4dHVy
ZUlkLCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiwgaW50
IHNoYWRlclF1YWRMb2NhdGlvbiwgaW50IHNoYWRlckVkZ2VMb2NhdGlvbikKLXsKLSAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dDNEID0gbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotCi0g
ICAgY29udGV4dDNELT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTEMoY29udGV4dDNELCBj
b250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0KLSAgICBHTEMoY29u
dGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKSk7Ci0gICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+
ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwotICAgIGNvbnRleHQzRC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRzVGV4dHVy
ZUlkKTsKLQotICAgIGlmIChzaGFkZXJNYXNrU2FtcGxlckxvY2F0aW9uICE9IC0xKSB7Ci0gICAg
ICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTEpKTsKLSAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlm
b3JtMWkoc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiwgMSkpOwotICAgICAgICBtYXNrTGF5ZXIt
PmJpbmRDb250ZW50c1RleHR1cmUobGF5ZXJSZW5kZXJlcik7Ci0gICAgICAgIEdMQyhjb250ZXh0
M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAp
KTsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyRWRnZUxvY2F0aW9uICE9IC0xKSB7Ci0gICAgICAg
IGZsb2F0IGVkZ2VbMjRdOwotICAgICAgICBsYXllclF1YWQudG9GbG9hdEFycmF5KGVkZ2UpOwot
ICAgICAgICBkZXZpY2VSZWN0LnRvRmxvYXRBcnJheSgmZWRnZVsxMl0pOwotICAgICAgICBHTEMo
Y29udGV4dDNELCBjb250ZXh0M0QtPnVuaWZvcm0zZnYoc2hhZGVyRWRnZUxvY2F0aW9uLCA4LCBl
ZGdlKSk7Ci0gICAgfQotCi0gICAgLy8gTWFwIGRldmljZSBzcGFjZSBxdWFkIHRvIGxheWVyIHNw
YWNlLgotICAgIEZsb2F0UXVhZCBxdWFkID0gZGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKS5tYXBR
dWFkKGxheWVyUXVhZC5mbG9hdFF1YWQoKSk7Ci0KLSAgICBsYXllclJlbmRlcmVyLT5kcmF3VGV4
dHVyZWRRdWFkKGRyYXdUcmFuc2Zvcm0sIG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250ZW50
UmVjdC5oZWlnaHQoKSwgbV9kcmF3T3BhY2l0eSwgcXVhZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCks
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpLCBzaGFkZXJRdWFkTG9j
YXRpb24pOwotfQotCi1Ta0JpdG1hcCBDQ1JlbmRlclN1cmZhY2U6OmFwcGx5RmlsdGVycyhMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycywgTWFuYWdlZFRleHR1cmUqIHNvdXJjZVRleHR1cmUpCi17Ci0g
ICAgaWYgKGZpbHRlcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gU2tCaXRtYXAoKTsKLQot
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gZmlsdGVyQ29udGV4dCA9IENDUHJveHk6Omhh
c0ltcGxUaHJlYWQoKSA/IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGb3JJbXBsVGhyZWFk
KCkgOiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCk7Ci0gICAgaWYgKCFmaWx0ZXJDb250
ZXh0KQotICAgICAgICByZXR1cm4gU2tCaXRtYXAoKTsKLQotICAgIGxheWVyUmVuZGVyZXItPmNv
bnRleHQoKS0+Zmx1c2goKTsKLQotICAgIHJldHVybiBDQ1JlbmRlclN1cmZhY2VGaWx0ZXJzOjph
cHBseShmaWx0ZXJzLCBzb3VyY2VUZXh0dXJlLT50ZXh0dXJlSWQoKSwgc291cmNlVGV4dHVyZS0+
c2l6ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsKLX0KLQogU3RyaW5nIENDUmVuZGVyU3VyZmFj
ZTo6bmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJSZW5kZXJTdXJm
YWNlKGlkPSVpLG93bmVyPSVzKSIsIG1fb3duaW5nTGF5ZXItPmlkKCksIG1fb3duaW5nTGF5ZXIt
PmRlYnVnTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwpAQCAtMzk4LDEyICsxOTksMTIgQEAgYm9vbCBD
Q1JlbmRlclN1cmZhY2U6Omhhc1JlcGxpY2EoKSBjb25zdAogCiBib29sIENDUmVuZGVyU3VyZmFj
ZTo6aGFzTWFzaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWFza0xheWVyOworICAgIHJldHVy
biBtX293bmluZ0xheWVyLT5tYXNrTGF5ZXIoKTsKIH0KIAogYm9vbCBDQ1JlbmRlclN1cmZhY2U6
OnJlcGxpY2FIYXNNYXNrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzUmVwbGljYSgpICYmICht
X21hc2tMYXllciB8fCBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkp
OworICAgIHJldHVybiBoYXNSZXBsaWNhKCkgJiYgKG1fb3duaW5nTGF5ZXItPm1hc2tMYXllcigp
IHx8IG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSk7CiB9CiAKIHZv
aWQgQ0NSZW5kZXJTdXJmYWNlOjpzZXRDbGlwUmVjdChjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
QEAgLTQ1NSw1ICsyNTYsMzggQEAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gQ0NSZW5k
ZXJTdXJmYWNlOjpjcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCkgY28KICAgICByZXR1cm4g
Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShyZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCksIHJlcGxp
Y2FEcmF3VHJhbnNmb3JtKCksIGNvbnRlbnRSZWN0KCksIGNsaXBSZWN0KCksIGRyYXdPcGFjaXR5
KCksIGlzT3BhcXVlKTsKIH0KIAordm9pZCBDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKEND
UXVhZEN1bGxlciYgcXVhZExpc3QsIENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUs
IGJvb2wgZm9yUmVwbGljYSwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCkKK3sK
KyAgICBBU1NFUlQoIWZvclJlcGxpY2EgfHwgaGFzUmVwbGljYSgpKTsKKworICAgIGlmIChtX293
bmluZ0xheWVyLT5oYXNEZWJ1Z0JvcmRlcnMoKSkgeworICAgICAgICBpbnQgcmVkID0gIWZvclJl
cGxpY2EgPyBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvclJlZCA6IGRlYnVnUmVwbGljYUJvcmRlckNv
bG9yUmVkOworICAgICAgICBpbnQgZ3JlZW4gPSAhZm9yUmVwbGljYSA/IGRlYnVnU3VyZmFjZUJv
cmRlckNvbG9yR3JlZW4gOiBkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvckdyZWVuOworICAgICAgICBp
bnQgYmx1ZSA9ICFmb3JSZXBsaWNhID8gZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JCbHVlIDogZGVi
dWdSZXBsaWNhQm9yZGVyQ29sb3JCbHVlOworICAgICAgICBDb2xvciBjb2xvcihyZWQsIGdyZWVu
LCBibHVlLCBkZWJ1Z1N1cmZhY2VCb3JkZXJBbHBoYSk7CisgICAgICAgIHF1YWRMaXN0LmFwcGVu
ZFN1cmZhY2UoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBj
b250ZW50UmVjdCgpLCBjb2xvciwgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGgpKTsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogQnkgdXNpbmcgdGhlIHNhbWUgUmVuZGVyU3VyZmFjZSBmb3IgYm90aCB0
aGUgY29udGVudCBhbmQgaXRzIHJlZmxlY3Rpb24sCisgICAgLy8gaXQncyBjdXJyZW50bHkgbm90
IHBvc3NpYmxlIHRvIGFwcGx5IGEgc2VwYXJhdGUgbWFzayB0byB0aGUgcmVmbGVjdGlvbiBsYXll
cgorICAgIC8vIG9yIGNvcnJlY3RseSBoYW5kbGUgb3BhY2l0eSBpbiByZWZsZWN0aW9ucyAob3Bh
Y2l0eSBtdXN0IGJlIGFwcGxpZWQgYWZ0ZXIgZHJhd2luZworICAgIC8vIGJvdGggdGhlIGxheWVy
IGFuZCBpdHMgcmVmbGVjdGlvbikuIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgeWV0IGFu
b3RoZXIgUmVuZGVyU3VyZmFjZQorICAgIC8vIHRvIGRyYXcgdGhlIGxheWVyIGFuZCBpdHMgcmVm
bGVjdGlvbiBpbi4gRm9yIG5vdyB3ZSBvbmx5IGFwcGx5IGEgc2VwYXJhdGUgcmVmbGVjdGlvbgor
ICAgIC8vIG1hc2sgaWYgdGhlIGNvbnRlbnRzIGRvbid0IGhhdmUgYSBtYXNrIG9mIHRoZWlyIG93
bi4KKyAgICBDQ0xheWVySW1wbCogbWFza0xheWVyID0gbV9vd25pbmdMYXllci0+bWFza0xheWVy
KCk7CisgICAgaWYgKG1hc2tMYXllciAmJiAoIW1hc2tMYXllci0+ZHJhd3NDb250ZW50KCkgfHwg
bWFza0xheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpKQorICAgICAgICBtYXNrTGF5ZXIgPSAwOwor
CisgICAgaWYgKCFtYXNrTGF5ZXIgJiYgZm9yUmVwbGljYSkgeworICAgICAgICBtYXNrTGF5ZXIg
PSBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7CisgICAgICAgIGlm
IChtYXNrTGF5ZXIgJiYgKCFtYXNrTGF5ZXItPmRyYXdzQ29udGVudCgpIHx8IG1hc2tMYXllci0+
Ym91bmRzKCkuaXNFbXB0eSgpKSkKKyAgICAgICAgICAgIG1hc2tMYXllciA9IDA7CisgICAgfQor
CisgICAgaW50IG1hc2tUZXh0dXJlSWQgPSBtYXNrTGF5ZXIgPyBtYXNrTGF5ZXItPmNvbnRlbnRz
VGV4dHVyZUlkKCkgOiAwOworCisgICAgcXVhZExpc3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgbV9v
d25pbmdMYXllciwgc3VyZmFjZURhbWFnZVJlY3QsIGZvclJlcGxpY2EsIGZpbHRlcnMoKSwgYmFj
a2dyb3VuZEZpbHRlcnMoKSwgbWFza1RleHR1cmVJZCkpOworfQorCiB9CiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAppbmRl
eCBhNmRlZTEwZWNlZDA5N2M4MjBhNGE5ODIzNWNkODJlYjllMThlNWFkLi4zZTFhZDFmZDcxYTg1
ZTJiZTlmOWEzNTc5YWE2ZjQ3Yzk2NjBmYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
aApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFn
ZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJRdWFkLmgiCkBAIC00MSw2ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENDRGFtYWdlVHJhY2tlcjsKK2NsYXNzIENDUXVhZEN1bGxlcjsKIGNsYXNzIENDU2hhcmVk
UXVhZFN0YXRlOwogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21p
dW07CkBAIC01NCwxOSArNTQsMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBwcmVwYXJlQ29udGVu
dHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwogICAgIHZvaWQgcmVsZWFzZUNvbnRl
bnRzVGV4dHVyZSgpOworICAgIGJvb2wgaGFzVmFsaWRDb250ZW50c1RleHR1cmUoKSBjb25zdDsK
IAogICAgIGJvb2wgcHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1
bSopOwogICAgIHZvaWQgcmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7CisgICAgYm9vbCBoYXNW
YWxpZEJhY2tncm91bmRUZXh0dXJlKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFNjaXNzb3JSZWN0
KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJl
Y3QpIGNvbnN0OwogCi0gICAgdm9pZCBkcmF3Q29udGVudHMoTGF5ZXJSZW5kZXJlckNocm9taXVt
Kik7Ci0gICAgdm9pZCBkcmF3UmVwbGljYShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKLQotICAg
IC8vIFRha2VzIGEgdGV4dHVyZSB3aXRoIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UsIGFuZCBhIHRy
YW5zZm9ybSBmcm9tIGNvbnRlbnQgc3BhY2UgdG8gdGhlIGRldmljZS4gQ29waWVzIHRoZSBkZXZp
Y2Utc3BhY2UgdGV4dHVyZSBiYWNrIGludG8KLSAgICAvLyBjb250ZW50IHNwYWNlIGZvciB0aGUg
c3VyZmFjZSwgc3RvcmluZyB0aGUgcmVzdWx0IGluIHRoZSBiYWNrZ3JvdW5kVGV4dHVyZSgpLiBU
aGUgc3VyZmFjZSdzIGJhY2tncm91bmRUZXh0dXJlKCkgbXVzdCBiZSB0aGUgYWN0aXZlIGRyYXdp
bmcgdGFyZ2V0LgotICAgIHZvaWQgY29weURldmljZVRvQmFja2dyb3VuZFRleHR1cmUoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiwgaW50IGRldmljZUJhY2tncm91bmRUZXh0dXJlSWQsIGNvbnN0IElu
dFJlY3QmIGRldmljZVRleHR1cmVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2
aWNlVHJhbnNmb3JtKSBjb25zdDsKLQogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAgICAgdm9p
ZCBkdW1wU3VyZmFjZShUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKQEAgLTc0LDE4
ICs2OSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgZW5jbG9z
ZXMgdGhlIFJlbmRlclN1cmZhY2UgaW5jbHVkaW5nIGFueSByZWZsZWN0aW9uLgogICAgIEZsb2F0
UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3Q7Ci0gICAgLy8gUmV0dXJucyB0aGUgcmVj
dCB0aGF0IGVuY2xvc2VzIHRoZSBwaXhlbHMgdGhhdCBtYXkgYWZmZWN0IHRoZSBwaXhlbCB2YWx1
ZXMgaW4gdGhpcyBzdXJmYWNlIHRocm91Z2ggYmFja2dyb3VuZCBmaWx0ZXJzLgotICAgIEludFJl
Y3QgcmVhZGJhY2tEZXZpY2VDb250ZW50UmVjdChMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3Q7Ci0KLSAgICAvLyBH
aXZlcyB0aGUgdHJhbnNmb3JtIGZyb20gdGhlIHN1cmZhY2UgY29udGVudCBzcGFjZSwgd2l0aCBv
cmlnaW4gaW4gdGhlIHRvcCBsZWZ0LCB0byB0aGUgY3VycmVudCB0YXJnZXQgZGV2aWNlIHNwYWNl
LCB3aXRoIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Y29tcHV0ZURldmljZVRyYW5zZm9ybShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3Q7CiAKICAgICBmbG9hdCBkcmF3
T3BhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KICAgICB2b2lkIHNldERy
YXdPcGFjaXR5KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KIAog
ICAgIHZvaWQgc2V0RmlsdGVycyhjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpIHsgbV9maWx0ZXJzID0gZmlsdGVyczsgfQogICAgIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQotICAg
IFNrQml0bWFwIGFwcGx5RmlsdGVycyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBXZWJL
aXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmLCBNYW5hZ2VkVGV4dHVyZSogc291cmNlVGV4dHVyZSk7
CiAKICAgICB2b2lkIHNldEJhY2tncm91bmRGaWx0ZXJzKGNvbnN0IFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycykgeyBtX2JhY2tncm91bmRGaWx0ZXJzID0gZmlsdGVyczsgfQog
ICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRGaWx0ZXJzOyB9CkBAIC0xMjYsMTQgKzExNSw5
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmKTsKICAg
ICBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJl
Y3Q7IH0KIAotICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7IG1fc2tpcHNE
cmF3ID0gc2tpcHNEcmF3OyB9Ci0gICAgYm9vbCBza2lwc0RyYXcoKSBjb25zdCB7IHJldHVybiBt
X3NraXBzRHJhdzsgfQotCiAgICAgdm9pZCBjbGVhckxheWVyTGlzdCgpIHsgbV9sYXllckxpc3Qu
Y2xlYXIoKTsgfQogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3QoKSB7IHJldHVy
biBtX2xheWVyTGlzdDsgfQogCi0gICAgdm9pZCBzZXRNYXNrTGF5ZXIoQ0NMYXllckltcGwqIG1h
c2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQotCiAgICAgTWFuYWdlZFRleHR1
cmUqIGNvbnRlbnRzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlLmdl
dCgpOyB9CiAgICAgTWFuYWdlZFRleHR1cmUqIGJhY2tncm91bmRUZXh0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKTsgfQogCkBAIC0xNTMsMjEgKzEzNywxMyBA
QCBwdWJsaWM6CiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlU2hhcmVk
UXVhZFN0YXRlKCkgY29uc3Q7CiAgICAgUGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3Jl
YXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0OwogCi1wcml2YXRlOgotICAgIEludFJl
Y3QgY29tcHV0ZURldmljZUJvdW5kaW5nQm94KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdDsKLSAgICBJbnRSZWN0
IGNvbXB1dGVSZWFkYmFja0RldmljZUJvdW5kaW5nQm94KExheWVyUmVuZGVyZXJDaHJvbWl1bSos
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdDsKLQotICAg
IHZvaWQgZHJhd0xheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIENDTGF5ZXJJbXBsKiwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBpbnQgY29udGVudHNUZXh0dXJlSWQpOwotICAgIHRl
bXBsYXRlIDxjbGFzcyBUPgotICAgIHZvaWQgZHJhd1N1cmZhY2UoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiwgQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5z
Zm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3Qg
Q0NMYXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiwgaW50IGNvbnRlbnRz
VGV4dHVyZUlkLCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlv
biwgaW50IHNoYWRlclF1YWRMb2NhdGlvbiwgaW50IHNoYWRlckVkZ2VMb2NhdGlvbik7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiwgaW50IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZHJhd01hdHJpeCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgc3Vy
ZmFjZURhbWFnZVJlY3QgcGFyYW1ldGVyIHdoZW4gdGhlIHZhbHVlIGlzIHJlbW92ZWQgZnJvbSBD
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZC4KKyAgICB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1bGxl
ciYsIENDU2hhcmVkUXVhZFN0YXRlKiwgYm9vbCBmb3JSZXBsaWNhLCBjb25zdCBGbG9hdFJlY3Qm
IHN1cmZhY2VEYW1hZ2VSZWN0KTsKIAorcHJpdmF0ZToKICAgICBDQ0xheWVySW1wbCogbV9vd25p
bmdMYXllcjsKLSAgICBDQ0xheWVySW1wbCogbV9tYXNrTGF5ZXI7CiAKICAgICBJbnRSZWN0IG1f
Y29udGVudFJlY3Q7Ci0gICAgYm9vbCBtX3NraXBzRHJhdzsKICAgICBib29sIG1fc3VyZmFjZVBy
b3BlcnR5Q2hhbmdlZDsKIAogICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9jb250ZW50c1Rl
eHR1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAKaW5k
ZXggYzZlMDIxZWNlMjA2NWM3OWM1ZWNmNmNkMGI2ZDM3Y2U5NTQ3YjMxMC4uMGY4MmM1ZWNjNmVi
MTA4ZTc2ZTQyZjFiZGU3YWZmMmU3OGFkYjIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkLmNwcApAQCAtMjksMTggKzI5LDIxIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gQ0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVh
ZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25z
dCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSkKK1Bhc3NPd25Q
dHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVh
dGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVj
dCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNl
RGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3Jv
dW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCkKIHsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3Qs
IGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCwgaXNSZXBsaWNhKSk7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUsIHF1YWRSZWN0
LCBsYXllciwgc3VyZmFjZURhbWFnZVJlY3QsIGlzUmVwbGljYSwgZmlsdGVycywgYmFja2dyb3Vu
ZEZpbHRlcnMsIG1hc2tUZXh0dXJlSWQpKTsKIH0KIAotQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6
OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRR
dWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGNv
bnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhKQorQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQ6OkNDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xh
eWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wg
aXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNv
bnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2ln
bmVkIG1hc2tUZXh0dXJlSWQpCiAgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NE
cmF3UXVhZDo6UmVuZGVyU3VyZmFjZSwgcXVhZFJlY3QpCiAgICAgLCBtX2xheWVyKGxheWVyKQog
ICAgICwgbV9zdXJmYWNlRGFtYWdlUmVjdChzdXJmYWNlRGFtYWdlUmVjdCkKICAgICAsIG1faXNS
ZXBsaWNhKGlzUmVwbGljYSkKKyAgICAsIG1fbWFza1RleHR1cmVJZChtYXNrVGV4dHVyZUlkKQog
ewogICAgIEFTU0VSVChtX2xheWVyKTsKKyAgICBtX2ZpbHRlcnMuYXNzaWduKGZpbHRlcnMpOwor
ICAgIG1fYmFja2dyb3VuZEZpbHRlcnMuYXNzaWduKGJhY2tncm91bmRGaWx0ZXJzKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKaW5kZXggOGY2ZGE1
ZWVlMWQ4MjdmYzEwZWE1YTU4ZDVmODE5ZWIyMDU5MzE2ZC4uMGEwMTI4MWZhNGY2OWRlMmNkNmQy
OTFmZjFhNjE2YjY5NjdiOTRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkX2gKIAogI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2Vi
RmlsdGVyT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTM2LDIxICszNywyOCBAQCBjbGFzcyBDQ0xheWVySW1wbDsKIGNs
YXNzIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKTsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gY3JlYXRlKGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EpOworICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJl
Y3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsKIAogICAgIEND
TGF5ZXJJbXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KICAgICBib29sIGlz
UmVwbGljYSgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXBsaWNhOyB9CisgICAgdW5zaWduZWQgbWFz
a1RleHR1cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVJZDsgfQogCiAgICAgLy8g
VGhlIHN1cmZhY2UgZGFtYWdlIHJlY3QgZm9yIHRoZSB0YXJnZXQgc3VyZmFjZSB0aGlzIHF1YWQg
ZHJhd3MgaW50by4KICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHJlbmRl
ciBzdXJmYWNlcyBnZXQgdGhlaXIgb3duIGxheWVyIHR5cGUuCiAgICAgY29uc3QgRmxvYXRSZWN0
JiBzdXJmYWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZURhbWFnZVJlY3Q7
IH0KIAorICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsdGVyczsgfQorICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRG
aWx0ZXJzOyB9CisKIHByaXZhdGU6Ci0gICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBG
bG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSk7CisgICAgQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0
JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29s
IGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBj
b25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNp
Z25lZCBtYXNrVGV4dHVyZUlkKTsKIAogICAgIENDTGF5ZXJJbXBsKiBtX2xheWVyOwogICAgIEZs
b2F0UmVjdCBtX3N1cmZhY2VEYW1hZ2VSZWN0OwogICAgIGJvb2wgbV9pc1JlcGxpY2E7CisgICAg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKKyAgICBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVyczsKKyAgICB1bnNpZ25lZCBtX21hc2tU
ZXh0dXJlSWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4
IGVjMjJhOWZkNjc2YjkwODJmNzA4NWM5YTI5YTUwYTRjZGFlMjE5YWUuLjk2MDVlNDk5NzM2MWNj
MjU0ZDM1YzQ4MGYwYTJlZTVjODgxZDYwNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllcklt
cGwuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIENDVGlsZWRMYXllckltcGw6On5DQ1RpbGVkTGF5ZXJJ
bXBsKCkKIHsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJl
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3Vuc2lnbmVkIENDVGlsZWRM
YXllckltcGw6OmNvbnRlbnRzVGV4dHVyZUlkKCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHNpbmdsZSB0ZXh0dXJlIGxheWVycywgZS5nLiBtYXNrcy4K
ICAgICBBU1NFUlQobV90aWxlcik7CkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgQ0NUaWxlZExheWVy
SW1wbDo6YmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIpCiAgICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQgPSB0aWxlID8gdGlsZS0+dGV4
dHVyZUlkKCkgOiAwOwogICAgIEFTU0VSVCh0ZXh0dXJlSWQpOwogCi0gICAgbGF5ZXJSZW5kZXJl
ci0+Y29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
dGV4dHVyZUlkKTsKKyAgICByZXR1cm4gdGV4dHVyZUlkOwogfQogCiB2b2lkIENDVGlsZWRMYXll
ckltcGw6OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggYmQxNDY2NTBiYWQ1YTdhZDYw
MjFmOWFhNzJkZGVlNzc1MmFhMTViZS4uMmU4NTM5YWUxODZhMjAwMjZmZjkyMjhiNzA3OWMyMGNk
YzNiZjUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAtNDUsNyArNDUsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiwg
Y29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBib29sJiBoYWRNaXNzaW5nVGlsZXMpIE9WRVJSSURF
OwogCi0gICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjb250ZW50c1RleHR1cmVJ
ZCgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRp
ZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0IE9WRVJSSURFOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAppbmRl
eCA3ZGFjMDA1ZDI0Y2FmYWNjMjcxYjg2YWQ1ZmRlMzg1NjZkMGJkODc0Li4zMDc1MWQ3NDgzMjY4
YjQ1ZjZkNzkxODBkYTkxOGUzYjUzZjM3ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKQEAgLTg2LDkgKzg2LDcgQEAg
VEVTVChDQ1JlbmRlclN1cmZhY2VUZXN0LCB2ZXJpZnlTdXJmYWNlQ2hhbmdlc0FyZVRyYWNrZWRQ
cm9wZXJseSkKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9ESURfTk9UX0NIQU5HRShy
ZW5kZXJTdXJmYWNlLT5zZXREcmF3VHJhbnNmb3JtKGR1bW15TWF0cml4KSk7CiAgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX1NVUkZBQ0VfRElEX05PVF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0UmVw
bGljYURyYXdUcmFuc2Zvcm0oZHVtbXlNYXRyaXgpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllf
U1VSRkFDRV9ESURfTk9UX0NIQU5HRShyZW5kZXJTdXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0o
ZHVtbXlNYXRyaXgpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9ESURfTk9UX0NI
QU5HRShyZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSkpOwogICAgIEVYRUNVVEVfQU5E
X1ZFUklGWV9TVVJGQUNFX0RJRF9OT1RfQ0hBTkdFKHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJM
aXN0KCkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNFX0RJRF9OT1RfQ0hBTkdFKHJl
bmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihkdW1teU1hc2suZ2V0KCkpKTsKIH0KIAogVEVTVChD
Q1JlbmRlclN1cmZhY2VUZXN0LCBzYW5pdHlDaGVja1N1cmZhY2VDcmVhdGVzQ29ycmVjdFNoYXJl
ZFF1YWRTdGF0ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144933</attachid>
            <date>2012-05-30 15:05:18 -0700</date>
            <delta_ts>2012-05-31 12:05:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87877-20120530180516.patch</filename>
            <type>text/plain</type>
            <size>58846</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzhhNmM2ZWU0MjVkNzg0
ZjUxNTI1MjVjZThjZWQ3YzljNzQ4YWViMS4uNWM1MjFhMzZlZTFlNDFkMTEzMmQxMmFmZWZjZTQ0
NDkyZmIzNjVmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA1LTMwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92
ZSBkcmF3aW5nIGNvZGUgZm9yIFJlbmRlclN1cmZhY2VzIGludG8gTGF5ZXJSZW5kZXJlckNocm9t
aXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFk
ZCBkYXRhIHRvIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkIHNvIHRoYXQgdGhlIG9ubHkgdXNlIG9m
CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSBkaXJlY3RseSBmcm9tIExheWVyUmVuZGVyZXJDaHJv
bWl1bSBpcyB0bworICAgICAgICByZXNlcnZlLCByZWxlYXNlLCBhbmQgdXNlIHRoZSBzdXJmYWNl
J3MgdGV4dHVyZXMsIGFuZCB0byBzZXQgdGhlCisgICAgICAgIHNjaXNzb3IgcmVjdC4gRWFjaCBv
ZiB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgZG9uZSBpbmRlcGVuZGVudAorICAgICAgICBvZiB0aGlz
IGNoYW5nZS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRl
clN1cmZhY2VRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKExheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNvbnRlbnRzVGV4dHVy
ZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaDoKKyAgICAg
ICAgKENDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YXBw
ZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZENvbnRlbnRz
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VCYWNr
Z3JvdW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhhc1Zh
bGlkQmFja2dyb3VuZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpoYXNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cmVwbGljYUhh
c01hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDUmVuZGVyU3VyZmFjZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6Om1hc2tUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQ6OmZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmJhY2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZWRMYXllckltcGw6OmNvbnRlbnRzVGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ1Rp
bGVkTGF5ZXJJbXBsKToKKwogMjAxMi0wNS0yOSAgSm9uYXRoYW4gRG9uZyAgPGpvbmF0aGFuLmRv
bmdAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBSZWZhY3Rvcmlu
ZyBodHRwL3Byb3h5IGF1dGhlbnRpY2F0aW9uIHRvIHVzZSBhdXRoY2FsbGJhY2sgbWVjaGFuaXNt
IGludHJvZHVjZWQgd2l0aCBsaWJjdXJsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkx
OTdkYTBmODYyNDQzODA3Y2VmOTkxNGZhY2E4YTkzMzUxYzVlN2YuLmY5NmI4NWY1ODBlYzQzZGJm
OTM3MGFkYzAzNTk5NTIzMTIyN2ExMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTItMDUtMzAgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBNb3ZlIGRyYXdpbmcgY29kZSBmb3IgUmVuZGVyU3Vy
ZmFjZXMgaW50byBMYXllclJlbmRlcmVyQ2hyb21pdW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTA1LTI5ICBEYXZpZCBCYXJyICA8ZGF2
aWRiYXJyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgRU5BQkxFX0NTU19JTUFH
RV9SRVNPTFVUSU9OIGNvbXBpbGUgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKaW5kZXggYTlmM2Q0NjY1ZDM2ZTUyOGQzZmUzZmM5MWM4NjAyNWY0ZTlhODdlZC4uOTdk
NmU3N2VjZTE2ZWUyY2NkYzE0NDYyMThiYjYwYjVkNzhhOGQ4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00Niw2ICs0Niw4IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1Db2xvci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgog
I2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGhyb3R0bGVkVGV4dHVyZVVw
bG9hZGVyLmgiCkBAIC01NiwxMSArNTgsMTMgQEAKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVy
RHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0lPU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyUXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwu
aCIKICNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgi
CiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9D
Q1JlbmRlclN1cmZhY2VGaWx0ZXJzLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1
YWQuaCIKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0ND
VGlsZURyYXdRdWFkLmgiCkBAIC01NjgsNyArNTcyLDIxIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCog
cXVhCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVfTE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
LCA2ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkKiBxdWFkKQorc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZpbHRlcnMoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMsIE1hbmFnZWRUZXh0dXJlKiBzb3VyY2VUZXh0dXJlKQoreworICAgIGlm
IChmaWx0ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CisKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGZpbHRlckNvbnRleHQgPSBDQ1Byb3h5OjpoYXNJbXBs
VGhyZWFkKCkgPyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0Rm9ySW1wbFRocmVhZCgpIDog
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CisKKyAgICBsYXllclJlbmRlcmVyLT5jb250ZXh0
KCktPmZsdXNoKCk7CisKKyAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmlsdGVyczo6YXBwbHko
ZmlsdGVycywgc291cmNlVGV4dHVyZS0+dGV4dHVyZUlkKCksIHNvdXJjZVRleHR1cmUtPnNpemUo
KSwgZmlsdGVyQ29udGV4dC5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqIHF1
YWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkK
IHsKICAgICAvLyBUaGlzIG1ldGhvZCBkcmF3cyBhIGJhY2tncm91bmQgZmlsdGVyLCB3aGljaCBh
cHBsaWVzIGEgZmlsdGVyIHRvIGFueSBwaXhlbHMgYmVoaW5kIHRoZSBxdWFkIGFuZCBzZWVuIHRo
cm91Z2ggaXRzIGJhY2tncm91bmQuCiAgICAgLy8gVGhlIGFsZ29yaXRobSB3b3JrcyBhcyBmb2xs
b3dzOgpAQCAtNTg1LDcgKzYwMyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAgICAgLy8g
UGl4ZWwgY29waWVzIGluIHRoaXMgYWxnb3JpdGhtIG9jY3VyIGF0IHN0ZXBzIDIsIDMsIDQsIGFu
ZCA1LgogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBkcmF3aW5nU3VyZmFjZSA9IHF1YWQtPmxheWVy
KCktPnJlbmRlclN1cmZhY2UoKTsKLSAgICBpZiAoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRG
aWx0ZXJzKCkuaXNFbXB0eSgpKQorICAgIGlmIChxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIG9ubHkgYWxsb3cg
YmFja2dyb3VuZCBmaWx0ZXJzIG9uIHRoZSByb290IHJlbmRlciBzdXJmYWNlIGJlY2F1c2Ugb3Ro
ZXIgc3VyZmFjZXMgbWF5IGNvbnRhaW4KQEAgLTU5MywxNyArNjExLDIxIEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQqCiAgICAgaWYgKCFpc0N1cnJlbnRSZW5kZXJTdXJmYWNlKG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc3VyZmFjZURyYXdUcmFuc2Zvcm0gPSBxdWFkLT5pc1JlcGxpY2EoKSA/IGRyYXdp
bmdTdXJmYWNlLT5yZXBsaWNhRHJhd1RyYW5zZm9ybSgpIDogZHJhd2luZ1N1cmZhY2UtPmRyYXdU
cmFuc2Zvcm0oKTsKLQogICAgIC8vIEZJWE1FOiBEbyBhIHNpbmdsZSByZWFkYmFjayBmb3IgYm90
aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2FjaGUgdGhlIGZpbHRlcmVkIHJlc3VsdHMg
KG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1c2VkKS4KLSAgICBJbnRSZWN0IGRldmlj
ZVJlY3QgPSBkcmF3aW5nU3VyZmFjZS0+cmVhZGJhY2tEZXZpY2VDb250ZW50UmVjdCh0aGlzLCBz
dXJmYWNlRHJhd1RyYW5zZm9ybSk7CisgICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChjb250ZW50c0RldmljZVRyYW5zZm9y
bSwgc2hhcmVkR2VvbWV0cnlRdWFkKCkuYm91bmRpbmdCb3goKSkpOworCisgICAgaW50IHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdDsKKyAgICBxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmdldE91
dHNldHModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKKyAgICBkZXZpY2VSZWN0Lm1vdmUoLWxl
ZnQsIC10b3ApOworICAgIGRldmljZVJlY3QuZXhwYW5kKGxlZnQgKyByaWdodCwgdG9wICsgYm90
dG9tKTsKKwogICAgIGRldmljZVJlY3QuaW50ZXJzZWN0KG1fY3VycmVudFJlbmRlclN1cmZhY2Ut
PmNvbnRlbnRSZWN0KCkpOwogCiAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBkZXZpY2VCYWNr
Z3JvdW5kVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9yZW5kZXJTdXJmYWNlVGV4
dHVyZU1hbmFnZXIuZ2V0KCkpOwogICAgIGlmICghZ2V0RnJhbWVidWZmZXJUZXh0dXJlKGRldmlj
ZUJhY2tncm91bmRUZXh0dXJlLmdldCgpLCBkZXZpY2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgU2tCaXRtYXAgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kID0gZHJhd2luZ1N1cmZhY2Ut
PmFwcGx5RmlsdGVycyh0aGlzLCBkcmF3aW5nU3VyZmFjZS0+YmFja2dyb3VuZEZpbHRlcnMoKSwg
ZGV2aWNlQmFja2dyb3VuZFRleHR1cmUuZ2V0KCkpOworICAgIFNrQml0bWFwIGZpbHRlcmVkRGV2
aWNlQmFja2dyb3VuZCA9IGFwcGx5RmlsdGVycyh0aGlzLCBxdWFkLT5iYWNrZ3JvdW5kRmlsdGVy
cygpLCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSk7CiAgICAgaWYgKCFmaWx0ZXJlZERl
dmljZUJhY2tncm91bmQuZ2V0VGV4dHVyZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTYxMywy
OSArNjM1LDE0NCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRG
aWx0ZXJzKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKgogICAgIGlmICghZHJhd2luZ1N1
cmZhY2UtPnByZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZSh0aGlzKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gVGhpcyBtdXN0IGJlIGNvbXB1dGVkIGJlZm9yZSBzd2l0Y2hpbmcgdGhlIHRhcmdl
dCByZW5kZXIgc3VyZmFjZSB0byB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlLgotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtID0gZHJhd2luZ1N1cmZhY2UtPmNv
bXB1dGVEZXZpY2VUcmFuc2Zvcm0odGhpcywgc3VyZmFjZURyYXdUcmFuc2Zvcm0pOwotCiAgICAg
Q0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJTdXJmYWNlID0gbV9jdXJyZW50UmVuZGVyU3Vy
ZmFjZTsKLSAgICBpZiAodXNlTWFuYWdlZFRleHR1cmUoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91
bmRUZXh0dXJlKCksIGRyYXdpbmdTdXJmYWNlLT5jb250ZW50UmVjdCgpKSkgewotICAgICAgICBk
cmF3aW5nU3VyZmFjZS0+Y29weURldmljZVRvQmFja2dyb3VuZFRleHR1cmUodGhpcywgZmlsdGVy
ZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkLCBkZXZpY2VSZWN0LCBjb250ZW50c0RldmljZVRy
YW5zZm9ybSk7CisgICAgaWYgKHVzZU1hbmFnZWRUZXh0dXJlKGRyYXdpbmdTdXJmYWNlLT5iYWNr
Z3JvdW5kVGV4dHVyZSgpLCBxdWFkLT5xdWFkUmVjdCgpKSkgeworICAgICAgICAvLyBDb3B5IHRo
ZSByZWFkYmFjayBwaXhlbHMgZnJvbSBkZXZpY2UgdG8gdGhlIGJhY2tncm91bmQgdGV4dHVyZSBm
b3IgdGhlIHN1cmZhY2UuCisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRvU3Vy
ZmFjZVRyYW5zZm9ybTsKKyAgICAgICAgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3JtLnRyYW5zbGF0
ZShxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCkgLyAyLjAsIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0
KCkgLyAyLjApOworICAgICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0uc2NhbGUzZChxdWFk
LT5xdWFkUmVjdCgpLndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIDEpOworICAg
ICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0gKj0gY29udGVudHNEZXZpY2VUcmFuc2Zvcm0u
aW52ZXJzZSgpOworICAgICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKGRl
dmljZVJlY3Qud2lkdGgoKSAvIDIuMCwgZGV2aWNlUmVjdC5oZWlnaHQoKSAvIDIuMCk7CisgICAg
ICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS50cmFuc2xhdGUoZGV2aWNlUmVjdC54KCksIGRl
dmljZVJlY3QueSgpKTsKKworICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoZmlsdGVy
ZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkLCBkZXZpY2VSZWN0LnNpemUoKSwgZGV2aWNlVG9T
dXJmYWNlVHJhbnNmb3JtKTsKKwogICAgICAgICB1c2VSZW5kZXJTdXJmYWNlKHRhcmdldFJlbmRl
clN1cmZhY2UpOwogICAgIH0KIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdS
ZW5kZXJTdXJmYWNlUXVhZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCogcXVhZCkKIHsK
LSAgICBDQ0xheWVySW1wbCogbGF5ZXIgPSBxdWFkLT5sYXllcigpOworICAgIC8vIFRoZSByZXBs
aWNhIGlzIGFsd2F5cyBkcmF3biBmaXJzdCwgc28gZnJlZSBhZnRlciBkcmF3aW5nIHRoZSBjb250
ZW50cy4KKyAgICBib29sIHNob3VsZFJlbGVhc2VUZXh0dXJlcyA9ICFxdWFkLT5pc1JlcGxpY2Eo
KTsKIAotICAgIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkKTsKKyAgICBDQ1JlbmRlclN1cmZh
Y2UqIGRyYXdpbmdTdXJmYWNlID0gcXVhZC0+bGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOwogCi0g
ICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0U2Npc3NvclJlY3QodGhpcywgcXVhZC0+c3Vy
ZmFjZURhbWFnZVJlY3QoKSk7Ci0gICAgaWYgKHF1YWQtPmlzUmVwbGljYSgpKQotICAgICAgICBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5kcmF3UmVwbGljYSh0aGlzKTsKLSAgICBlbHNlCi0gICAg
ICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmRyYXdDb250ZW50cyh0aGlzKTsKLSAgICBsYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKLSAgICBsYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcmVuZGVyVHJhbnNmb3JtID0gcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKTsK
KyAgICAvLyBBcHBseSBhIHNjYWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEg
dG8gaXRzIGludGVuZGVkIHNpemUuCisgICAgcmVuZGVyVHJhbnNmb3JtLnNjYWxlM2QocXVhZC0+
cXVhZFJlY3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpLCAxKTsKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0
aW9uTWF0cml4KHdpbmRvd01hdHJpeCgpICogcHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyVHJh
bnNmb3JtKS50bzJkVHJhbnNmb3JtKCk7CisKKyAgICAvLyBDYW4gb25seSBkcmF3IHN1cmZhY2Ug
aWYgZGV2aWNlIG1hdHJpeCBpcyBpbnZlcnRpYmxlLgorICAgIGlmICghY29udGVudHNEZXZpY2VU
cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkgfHwgIWRyYXdpbmdTdXJmYWNlLT5oYXNWYWxpZENvbnRl
bnRzVGV4dHVyZSgpKSB7CisgICAgICAgIGlmIChzaG91bGRSZWxlYXNlVGV4dHVyZXMpIHsKKyAg
ICAgICAgICAgIGRyYXdpbmdTdXJmYWNlLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKKyAg
ICAgICAgICAgIGRyYXdpbmdTdXJmYWNlLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdCYWNrZ3JvdW5kRmlsdGVy
cyhxdWFkLCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7CisKKyAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgY2FsbCB3aGVuIHRoZSBxdWFkJ3Mgc2Npc3NvclJlY3QoKSBpcyBzZXQgY29ycmVjdGx5
LgorICAgIGRyYXdpbmdTdXJmYWNlLT5zZXRTY2lzc29yUmVjdCh0aGlzLCBxdWFkLT5zdXJmYWNl
RGFtYWdlUmVjdCgpKTsKKworICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQg
d2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxp
Y2EuCisgICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4KKyAgICBT
a0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+ZmlsdGVycygp
LCBkcmF3aW5nU3VyZmFjZS0+Y29udGVudHNUZXh0dXJlKCkpOworICAgIGludCBjb250ZW50c1Rl
eHR1cmVJZCA9IGRyYXdpbmdTdXJmYWNlLT5jb250ZW50c1RleHR1cmUoKS0+dGV4dHVyZUlkKCk7
CisgICAgaWYgKGZpbHRlckJpdG1hcC5nZXRUZXh0dXJlKCkpIHsKKyAgICAgICAgR3JUZXh0dXJl
KiB0ZXh0dXJlID0gcmVpbnRlcnByZXRfY2FzdDxHclRleHR1cmUqPihmaWx0ZXJCaXRtYXAuZ2V0
VGV4dHVyZSgpKTsKKyAgICAgICAgY29udGVudHNUZXh0dXJlSWQgPSB0ZXh0dXJlLT5nZXRUZXh0
dXJlSGFuZGxlKCk7CisgICAgfQorCisgICAgLy8gRHJhdyB0aGUgYmFja2dyb3VuZCB0ZXh0dXJl
IGlmIHRoZXJlIGlzIG9uZS4KKyAgICBpZiAoZHJhd2luZ1N1cmZhY2UtPmhhc1ZhbGlkQmFja2dy
b3VuZFRleHR1cmUoKSkKKyAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGRyYXdpbmdT
dXJmYWNlLT5iYWNrZ3JvdW5kVGV4dHVyZSgpLT50ZXh0dXJlSWQoKSwgcXVhZC0+cXVhZFJlY3Qo
KS5zaXplKCksIHF1YWQtPmxheWVyVHJhbnNmb3JtKCkpOworCisgICAgRmxvYXRRdWFkIGRldmlj
ZVF1YWQgPSBjb250ZW50c0RldmljZVRyYW5zZm9ybS5tYXBRdWFkKHNoYXJlZEdlb21ldHJ5UXVh
ZCgpKTsKKyAgICBDQ0xheWVyUXVhZCBkZXZpY2VMYXllckJvdW5kcyA9IENDTGF5ZXJRdWFkKEZs
b2F0UXVhZChkZXZpY2VRdWFkLmJvdW5kaW5nQm94KCkpKTsKKyAgICBDQ0xheWVyUXVhZCBkZXZp
Y2VMYXllckVkZ2VzID0gQ0NMYXllclF1YWQoZGV2aWNlUXVhZCk7CisKKyAgICAvLyBVc2UgYW50
aS1hbGlhc2luZyBwcm9ncmFtcyBvbmx5IHdoZW4gbmVjZXNzYXJ5LgorICAgIGJvb2wgdXNlQUEg
PSAoIWRldmljZVF1YWQuaXNSZWN0aWxpbmVhcigpIHx8ICFkZXZpY2VRdWFkLmJvdW5kaW5nQm94
KCkuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKTsKKyAgICBpZiAodXNlQUEpIHsKKyAgICAgICAg
ZGV2aWNlTGF5ZXJCb3VuZHMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7CisgICAgICAg
IGRldmljZUxheWVyRWRnZXMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7CisgICAgfQor
CisgICAgYm9vbCB1c2VNYXNrID0gcXVhZC0+bWFza1RleHR1cmVJZCgpOworCisgICAgLy8gRklY
TUU6IHVzZSB0aGUgYmFja2dyb3VuZFRleHR1cmUgYW5kIGJsZW5kIHRoZSBiYWNrZ3JvdW5kIGlu
IHdpdGggdGhpcyBkcmF3IGluc3RlYWQgb2YgaGF2aW5nIGEgc2VwYXJhdGUgY29weSBvZiB0aGUg
YmFja2dyb3VuZCB0ZXh0dXJlLgorCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIGNvbnRleHQoKS0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRzVGV4dHVy
ZUlkKTsKKworICAgIGludCBzaGFkZXJRdWFkTG9jYXRpb24gPSAtMTsKKyAgICBpbnQgc2hhZGVy
RWRnZUxvY2F0aW9uID0gLTE7CisgICAgaW50IHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24gPSAt
MTsKKyAgICBpbnQgc2hhZGVyTWF0cml4TG9jYXRpb24gPSAtMTsKKyAgICBpbnQgc2hhZGVyQWxw
aGFMb2NhdGlvbiA9IC0xOworICAgIGlmICh1c2VBQSAmJiB1c2VNYXNrKSB7CisgICAgICAgIGNv
bnN0IFJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBKiBwcm9ncmFtID0gcmVuZGVyU3VyZmFjZU1h
c2tQcm9ncmFtQUEoKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9n
cmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigp
LCAwKSk7CisKKyAgICAgICAgc2hhZGVyUXVhZExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkucG9pbnRMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJFZGdlTG9jYXRpb24gPSBwcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJNYXNr
U2FtcGxlckxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxv
Y2F0aW9uKCk7CisgICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICAgICAgc2hhZGVyQWxwaGFMb2NhdGlvbiA9
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOworICAgIH0gZWxzZSBp
ZiAoIXVzZUFBICYmIHVzZU1hc2spIHsKKyAgICAgICAgY29uc3QgUmVuZGVyU3VyZmFjZU1hc2tQ
cm9ncmFtKiBwcm9ncmFtID0gcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7CisgICAgICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsK
KyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworCisgICAgICAgIHNoYWRlck1h
c2tTYW1wbGVyTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVy
TG9jYXRpb24oKTsKKyAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9u
ID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgfSBlbHNl
IGlmICh1c2VBQSAmJiAhdXNlTWFzaykgeworICAgICAgICBjb25zdCBSZW5kZXJTdXJmYWNlUHJv
Z3JhbUFBKiBwcm9ncmFtID0gcmVuZGVyU3VyZmFjZVByb2dyYW1BQSgpOworICAgICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Cisg
ICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKKworICAgICAgICBzaGFkZXJRdWFk
TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCk7CisgICAg
ICAgIHNoYWRlckVkZ2VMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxv
Y2F0aW9uKCk7CisgICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4
U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKTsKKyAgICAgICAgc2hhZGVyQWxwaGFMb2NhdGlvbiA9
IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VQcm9ncmFtKiBwcm9ncmFtID0gcmVuZGVyU3Vy
ZmFjZVByb2dyYW0oKTsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9n
cmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVuaWZvcm0xaShwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigp
LCAwKSk7CisKKyAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhT
aGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0g
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgfQorCisgICAg
aWYgKHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
MSkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShzaGFkZXJN
YXNrU2FtcGxlckxvY2F0aW9uLCAxKSk7CisgICAgICAgIGNvbnRleHQoKS0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHF1YWQtPm1hc2tUZXh0dXJlSWQoKSk7Cisg
ICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApKTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyRWRnZUxvY2F0aW9u
ICE9IC0xKSB7CisgICAgICAgIGZsb2F0IGVkZ2VbMjRdOworICAgICAgICBkZXZpY2VMYXllckVk
Z2VzLnRvRmxvYXRBcnJheShlZGdlKTsKKyAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMudG9GbG9h
dEFycmF5KCZlZGdlWzEyXSk7CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5p
Zm9ybTNmdihzaGFkZXJFZGdlTG9jYXRpb24sIDgsIGVkZ2UpKTsKKyAgICB9CisKKyAgICAvLyBN
YXAgZGV2aWNlIHNwYWNlIHF1YWQgdG8gc3VyZmFjZSBzcGFjZS4KKyAgICBGbG9hdFF1YWQgc3Vy
ZmFjZVF1YWQgPSBjb250ZW50c0RldmljZVRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUXVhZChkZXZp
Y2VMYXllckVkZ2VzLmZsb2F0UXVhZCgpKTsKKworICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+
bGF5ZXJUcmFuc2Zvcm0oKSwgcXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVj
dCgpLmhlaWdodCgpLCBxdWFkLT5vcGFjaXR5KCksIHN1cmZhY2VRdWFkLAorICAgICAgICAgICAg
ICAgICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24sIHNoYWRlckFscGhhTG9jYXRpb24sIHNoYWRl
clF1YWRMb2NhdGlvbik7CisKKyAgICBpZiAoc2hvdWxkUmVsZWFzZVRleHR1cmVzKSB7CisgICAg
ICAgIGRyYXdpbmdTdXJmYWNlLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKKyAgICAgICAg
ZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKKyAgICB9CiB9CiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xp
ZENvbG9yRHJhd1F1YWQqIHF1YWQpCkBAIC0xMDk2LDYgKzEyMzMsOCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKCkKICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxF
TkQpKTsKIAorICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxU
ZXh0dXJlcygpOworCiAgICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRl
bnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7CiAgICAgc2l6ZV90
IHJlY2xhaW1MaW1pdCA9IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9y
dFNpemUoKSk7CiAgICAgc2l6ZV90IHByZWZlcnJlZExpbWl0ID0gcmVjbGFpbUxpbWl0ID4gY29u
dGVudHNNZW1vcnlVc2VCeXRlcyA/IHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0
ZXMgOiAwOwpAQCAtMTE1OSw2ICsxMjk4LDI1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0CiAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0
M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7
CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5VGV4dHVyZVRvRnJhbWVidWZm
ZXIoaW50IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZHJhd01hdHJpeCkKK3sKKyAgICBjb25zdCBSZW5kZXJTdXJmYWNlUHJvZ3Jh
bSogcHJvZ3JhbSA9IHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CisKKyAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7
CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4
dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFS
KSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklM
VEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisKKyAgICBHTEMoY29u
dGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoZHJhd01h
dHJpeCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgMSwgc2hhcmVkR2VvbWV0cnlR
dWFkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0
ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Cit9CisKIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpmaW5pc2goKQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVy
Q2hyb21pdW06OmZpbmlzaCIsIHRoaXMsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAppbmRleCAxYTJlYmVkMGU4NmI5OWY1ODE5NjgzMWJjZWNlNDYzMDE0NzJjOTU5Li44MWVl
MWE3YjUxYjc1MGQ1MzI0Mjc4ZGFjMTJjYjI4NTZmNmMzNWI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaApAQCAtMTM1LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRy
YXdUZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9h
dCBvcGFjaXR5LCBjb25zdCBGbG9hdFF1YWQmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbWF0cml4TG9jYXRpb24sIGludCBhbHBoYUxvY2F0aW9uLCBpbnQgcXVhZExvY2F0aW9uKTsK
KyAgICB2b2lkIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihpbnQgdGV4dHVyZUlkLCBjb25zdCBJ
bnRTaXplJiBib3VuZHMsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsK
IAogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI7CkBAIC0xNTMsNyArMTU0LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqLCBjb25zdCBGbG9hdFJlY3Qm
IHN1cmZhY2VEYW1hZ2VSZWN0KTsKICAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0
IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQo
Y29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3QmFja2dyb3VuZEZp
bHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdCYWNr
Z3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCosIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pOwogICAgIHZvaWQgZHJhd1JlbmRlclN1
cmZhY2VRdWFkKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3
U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqKTsKICAgICB2b2lkIGRy
YXdUZXh0dXJlUXVhZChjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwCmluZGV4IDZkODA2ODRmNjY0ZjAyNWRmNTM2YTcwZWVkZmQ0NDViZmI4MzQ0ZjQuLjY5
ZGU5MDQ3MjQ4ZjgzYzg5ODMwYzgwYjBmYjkxMjRjYWJjZTQ5MTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKQEAgLTE2OSw5ICsxNjksMTAgQEAgdm9pZCBDQ0xheWVySW1wbDo6YXBwZW5kRGVi
dWdCb3JkZXJRdWFkKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXUKICAg
ICBxdWFkTGlzdC5hcHBlbmQoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVh
ZFN0YXRlLCBsYXllclJlY3QsIGRlYnVnQm9yZGVyQ29sb3IoKSwgZGVidWdCb3JkZXJXaWR0aCgp
KSk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKikKK3Vuc2lnbmVkIENDTGF5ZXJJbXBsOjpjb250ZW50c1RleHR1cmVJZCgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7CiB9CiAK
IHZvaWQgQ0NMYXllckltcGw6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKaW5kZXggYmI3NWE4OWViYWQzZjVhYWEzOTg1MmQ0NGQ5ODRhODIxMTli
OTZmMC4uODg0YzEyOWFkYWEwOGYwNWNiZDQ0MzhjNzk3MWI0ZTA3ZDVmNzdkOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5oCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRHJhdygpOwogICAgIHZvaWQgYXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZEN1bGxlciYs
IGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYmlu
ZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGNvbnRlbnRzVGV4dHVyZUlkKCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhpcyBsYXllciBoYXMgY29udGVudCB0byBkcmF3LgogICAgIHZvaWQgc2V0RHJhd3NDb250
ZW50KGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5k
ZXggMmEwZjcxODAzOTIyMjZmNWU0YTI4MDc5MjhhZjU3ZjQ1NmVhZjY4OC4uZTRlZTNlZGMxYTc4
ZTNmMDgwMWU5OGVlOWNjYzU1MTUxODRlNTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uY3BwCkBAIC00NzUsMTEgKzQ3NSw4IEBAIHN0YXRpYyBib29sIGNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIs
IExheWVyCiAgICAgICAgIGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyhmYWxzZSk7CiAgICAg
ICAgIGxheWVyLT5zZXRDbGlwUmVjdChJbnRSZWN0KCkpOwogCi0gICAgICAgIGlmIChsYXllci0+
bWFza0xheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihs
YXllci0+bWFza0xheWVyKCkpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQogICAg
ICAgICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRl
clN1cmZhY2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNl
dE1hc2tMYXllcigwKTsKIAogICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1
cmZhY2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKaW5kZXggMzY0NjI0ODY2MjQ1NjY5MGI1
YmZiY2UyYTljOGMxZWIzNTg3NDhiNy4uZTViNDVlOTEzMTFjNDJmNjE4NjE3NDYwOTZkN2VjOTg1
YjJiMjcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCkBAIC04OSwxMSArODksNSBAQCBi
b29sIENDUXVhZEN1bGxlcjo6YXBwZW5kU3VyZmFjZShQYXNzT3duUHRyPENDRHJhd1F1YWQ+IHBh
c3NEcmF3UXVhZCkKICAgICByZXR1cm4gYXBwZW5kUXVhZEludGVybmFsKHBhc3NEcmF3UXVhZCwg
Y3VsbGVkUmVjdCwgbV9xdWFkTGlzdCwgKm1fb2NjbHVzaW9uVHJhY2tlciwgbV9zaG93Q3VsbGlu
Z1dpdGhEZWJ1Z0JvcmRlclF1YWRzKTsKIH0KIAotYm9vbCBDQ1F1YWRDdWxsZXI6OmFwcGVuZFJl
cGxpY2EoUGFzc093blB0cjxDQ0RyYXdRdWFkPiBwYXNzRHJhd1F1YWQpCi17Ci0gICAgSW50UmVj
dCBjdWxsZWRSZWN0ID0gbV9vY2NsdXNpb25UcmFja2VyLT51bm9jY2x1ZGVkQ29udHJpYnV0aW5n
U3VyZmFjZUNvbnRlbnRSZWN0KG1fbGF5ZXItPnJlbmRlclN1cmZhY2UoKSwgdHJ1ZSwgcGFzc0Ry
YXdRdWFkLT5xdWFkUmVjdCgpKTsKLSAgICByZXR1cm4gYXBwZW5kUXVhZEludGVybmFsKHBhc3NE
cmF3UXVhZCwgY3VsbGVkUmVjdCwgbV9xdWFkTGlzdCwgKm1fb2NjbHVzaW9uVHJhY2tlciwgbV9z
aG93Q3VsbGluZ1dpdGhEZWJ1Z0JvcmRlclF1YWRzKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmgKaW5kZXggMmQyZDgwMTY2M2U2ZjA2MTM4MzUzZjJjNTY1ZGE3ZDA5MGQyM2I3Yi4u
Mjk5OWI2YWQ1YWY4NDQ1NTQyNzRkNDRlMWI5NDVmNjc5ODdlNWY2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmgKQEAgLTQxLDcgKzQxLDYgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgcXVhZCBpcyBhZGRlZCB0byB0aGUgbGlzdCwgYW5kIGZhbHNlIGlmIHRoZSBxdWFkIGlz
IGVudGlyZWx5IGN1bGxlZC4KICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kKFBhc3NPd25QdHI8Q0NE
cmF3UXVhZD4gcGFzc0RyYXdRdWFkKTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kU3VyZmFjZShQ
YXNzT3duUHRyPENDRHJhd1F1YWQ+IHBhc3NEcmF3UXVhZCk7Ci0gICAgdmlydHVhbCBib29sIGFw
cGVuZFJlcGxpY2EoUGFzc093blB0cjxDQ0RyYXdRdWFkPiBwYXNzRHJhd1F1YWQpOwogCiBwcml2
YXRlOgogICAgIENDUXVhZExpc3QmIG1fcXVhZExpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNw
cAppbmRleCA4NDg3MzBhMmM3YjYwYjc2MjM4OTlmZDdmOWI0MTMzMGEyZTk3Y2I3Li5hM2FhMTc1
MGNjOTM3NjFjYjA5OThhN2NhYzZiOTY2N2NjOGI1MGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
cy5jcHAKQEAgLTI4LDI1ICsyOCwxMyBAQAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgog
CiAjaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKLSNp
bmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgotI2luY2x1ZGUgImNjL0NDUmVu
ZGVyU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIK
ICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGggPSAyOwotc3Rh
dGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJBbHBoYSA9IDEwMDsKLXN0YXRpYyBjb25z
dCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JSZWQgPSAwOwotc3RhdGljIGNvbnN0IGludCBk
ZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckdyZWVuID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgZGVidWdT
dXJmYWNlQm9yZGVyQ29sb3JCbHVlID0gMjU1Owotc3RhdGljIGNvbnN0IGludCBkZWJ1Z1JlcGxp
Y2FCb3JkZXJDb2xvclJlZCA9IDE2MDsKLXN0YXRpYyBjb25zdCBpbnQgZGVidWdSZXBsaWNhQm9y
ZGVyQ29sb3JHcmVlbiA9IDA7Ci1zdGF0aWMgY29uc3QgaW50IGRlYnVnUmVwbGljYUJvcmRlckNv
bG9yQmx1ZSA9IDI1NTsKLQogUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IENDUmVuZGVyUGFzczo6
Y3JlYXRlKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKIHsKICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IENDUmVuZGVyUGFzcyh0YXJnZXRTdXJmYWNlKSk7CkBAIC03NSwyNiArNjMsMjEg
QEAgdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKEND
TGF5ZXJJbXBsKiBsYXllciwgQ0NPY2NsdXMKICAgICBDQ1F1YWRDdWxsZXIgcXVhZEN1bGxlciht
X3F1YWRMaXN0LCBsYXllciwgb2NjbHVzaW9uVHJhY2tlciwgbGF5ZXItPmhhc0RlYnVnQm9yZGVy
cygpKTsKIAogICAgIENDUmVuZGVyU3VyZmFjZSogc3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7CisgICAgYm9vbCBpc1JlcGxpY2E7CisKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNyZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpOwot
ICAgIGlmIChsYXllci0+aGFzRGVidWdCb3JkZXJzKCkpIHsKLSAgICAgICAgQ29sb3IgY29sb3Io
ZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JSZWQsIGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yR3JlZW4s
IGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yQmx1ZSwgZGVidWdTdXJmYWNlQm9yZGVyQWxwaGEpOwot
ICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFN1cmZhY2UoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpj
cmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNlLT5jb250ZW50UmVjdCgpLCBjb2xv
ciwgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGgpKTsKLSAgICB9Ci0gICAgYm9vbCBpc1JlcGxpY2Eg
PSBmYWxzZTsKLSAgICBxdWFkQ3VsbGVyLmFwcGVuZFN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0
KCksIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCgpLCBpc1JlcGxpY2EpKTsKKyAgICBpc1JlcGxp
Y2EgPSBmYWxzZTsKKyAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCBzaGFyZWRR
dWFkU3RhdGUuZ2V0KCksIGlzUmVwbGljYSwgc3VyZmFjZURhbWFnZVJlY3QoKSk7CiAgICAgbV9z
aGFyZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIAor
ICAgIGlmICghc3VyZmFjZS0+aGFzUmVwbGljYSgpKQorICAgICAgICByZXR1cm47CisKICAgICAv
LyBBZGQgcmVwbGljYSBhZnRlciB0aGUgc3VyZmFjZSBzbyB0aGF0IGl0IGFwcGVhcnMgYmVsb3cg
dGhlIHN1cmZhY2UuCi0gICAgaWYgKHN1cmZhY2UtPmhhc1JlcGxpY2EoKSkgewotICAgICAgICBP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNyZWF0
ZVJlcGxpY2FTaGFyZWRRdWFkU3RhdGUoKTsKLSAgICAgICAgaWYgKGxheWVyLT5oYXNEZWJ1Z0Jv
cmRlcnMoKSkgewotICAgICAgICAgICAgQ29sb3IgY29sb3IoZGVidWdSZXBsaWNhQm9yZGVyQ29s
b3JSZWQsIGRlYnVnUmVwbGljYUJvcmRlckNvbG9yR3JlZW4sIGRlYnVnUmVwbGljYUJvcmRlckNv
bG9yQmx1ZSwgZGVidWdTdXJmYWNlQm9yZGVyQWxwaGEpOwotICAgICAgICAgICAgcXVhZEN1bGxl
ci5hcHBlbmRSZXBsaWNhKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRT
dGF0ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgY29sb3IsIGRlYnVnU3VyZmFjZUJv
cmRlcldpZHRoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBpc1JlcGxpY2EgPSB0cnVlOwot
ICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFJlcGxpY2EoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6
OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIGxh
eWVyLCBzdXJmYWNlRGFtYWdlUmVjdCgpLCBpc1JlcGxpY2EpKTsKLSAgICAgICAgbV9zaGFyZWRR
dWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKLSAgICB9Cisg
ICAgT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByZXBsaWNhU2hhcmVkUXVhZFN0YXRlID0gc3Vy
ZmFjZS0+Y3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpOworICAgIGlzUmVwbGljYSA9IHRy
dWU7CisgICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMocXVhZEN1bGxlciwgcmVwbGljYVNoYXJlZFF1
YWRTdGF0ZS5nZXQoKSwgaXNSZXBsaWNhLCBzdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBtX3No
YXJlZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgp
KTsKIH0KIAogdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzVG9GaWxsU2NyZWVuKENDTGF5
ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IENvbG9yJiBzY3JlZW5CYWNrZ3JvdW5kQ29sb3IsIGNv
bnN0IENDT2NjbHVzaW9uVHJhY2tlckltcGwmIG9jY2x1c2lvblRyYWNrZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCA2YWI1MDk5OGQ0MzNmNTYzNGRiZTBmMjBiYzY3MTgy
N2Q2ZTkyYjMyLi4wZTBkOWE0OTJkOWFjODg5NDg4Y2U1NzAwMmFkOGEyYjMyMzdiOGY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTI5LDI3ICsyOSwzMiBAQAogCiAjaW5j
bHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAKLSNpbmNsdWRlICJHZW9tZXRyeUJpbmRpbmcu
aCIKLSNpbmNsdWRlICJHclRleHR1cmUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotI2luY2x1ZGUgIlNoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgImNj
L0NDRGFtYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgot
I2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZUZpbHRlcnMuaCIKKyNpbmNsdWRlICJjYy9DQ1F1
YWRDdWxsZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgogI2lu
Y2x1ZGUgImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJm
YWNlQm9yZGVyV2lkdGggPSAyOworc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJB
bHBoYSA9IDEwMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JSZWQg
PSAwOworc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckdyZWVuID0gMDsK
K3N0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JCbHVlID0gMjU1Oworc3Rh
dGljIGNvbnN0IGludCBkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvclJlZCA9IDE2MDsKK3N0YXRpYyBj
b25zdCBpbnQgZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JHcmVlbiA9IDA7CitzdGF0aWMgY29uc3Qg
aW50IGRlYnVnUmVwbGljYUJvcmRlckNvbG9yQmx1ZSA9IDI1NTsKKwogQ0NSZW5kZXJTdXJmYWNl
OjpDQ1JlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqIG93bmluZ0xheWVyKQogICAgIDogbV9vd25p
bmdMYXllcihvd25pbmdMYXllcikKLSAgICAsIG1fbWFza0xheWVyKDApCi0gICAgLCBtX3NraXBz
RHJhdyhmYWxzZSkKICAgICAsIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZChmYWxzZSkKICAgICAs
IG1fZHJhd09wYWNpdHkoMSkKICAgICAsIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyhmYWxzZSkK
QEAgLTg4LDIyICs5MywyNSBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRz
VGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZQogICAgIGlmIChtX2Nv
bnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmICghbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRTaXplLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSkpIHsKLSAgICAgICAgbV9za2lwc0RyYXcgPSB0cnVlOworICAgIGlmICgh
bV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUocmVxdWlyZWRTaXplLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICBtX3NraXBzRHJh
dyA9IGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIENDUmVuZGVyU3VyZmFjZTo6
cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX2Nv
bnRlbnRzVGV4dHVyZSkKKyAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRz
VGV4dHVyZS0+aXNSZXNlcnZlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZW50c1Rl
eHR1cmUtPnVucmVzZXJ2ZSgpOwogfQogCitib29sIENDUmVuZGVyU3VyZmFjZTo6aGFzVmFsaWRD
b250ZW50c1RleHR1cmUoKSBjb25zdAoreworICAgIEludFNpemUgcmVxdWlyZWRTaXplKG1fY29u
dGVudFJlY3Quc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9jb250ZW50c1RleHR1cmUgJiYgbV9jb250
ZW50c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChy
ZXF1aXJlZFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKK30KKwogYm9vbCBDQ1JlbmRl
clN1cmZhY2U6OnByZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIpCiB7CiAgICAgSW50U2l6ZSByZXF1aXJlZFNpemUobV9jb250ZW50UmVj
dC5zaXplKCkpOwpAQCAtMTIzLDg5ICsxMzEsMTUgQEAgYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnBy
ZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGUK
IAogdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpCiB7Ci0g
ICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlKQorICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVy
ZSB8fCAhbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQogICAgICAgICByZXR1cm47
CiAgICAgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+dW5yZXNlcnZlKCk7CiB9CiAKLVRyYW5zZm9ybWF0
aW9uTWF0cml4IENDUmVuZGVyU3VyZmFjZTo6Y29tcHV0ZURldmljZVRyYW5zZm9ybShMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBkcmF3VHJhbnNmb3JtKSBjb25zdAotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlbmRl
clRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm07Ci0gICAgLy8gQXBwbHkgYSBzY2FsaW5nIGZhY3Rv
ciB0byBzaXplIHRoZSBxdWFkIGZyb20gMXgxIHRvIGl0cyBpbnRlbmRlZCBzaXplLgotICAgIHJl
bmRlclRyYW5zZm9ybS5zY2FsZTNkKG1fY29udGVudFJlY3Qud2lkdGgoKSwgbV9jb250ZW50UmVj
dC5oZWlnaHQoKSwgMSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlVHJhbnNmb3Jt
ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobGF5ZXJSZW5kZXJlci0+d2luZG93TWF0cml4KCkgKiBs
YXllclJlbmRlcmVyLT5wcm9qZWN0aW9uTWF0cml4KCkgKiByZW5kZXJUcmFuc2Zvcm0pLnRvMmRU
cmFuc2Zvcm0oKTsKLSAgICByZXR1cm4gZGV2aWNlVHJhbnNmb3JtOwotfQotCi1JbnRSZWN0IEND
UmVuZGVyU3VyZmFjZTo6Y29tcHV0ZURldmljZUJvdW5kaW5nQm94KExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFu
c2Zvcm0pIGNvbnN0Ci17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudHNEZXZpY2VU
cmFuc2Zvcm0gPSBjb21wdXRlRGV2aWNlVHJhbnNmb3JtKGxheWVyUmVuZGVyZXIsIGRyYXdUcmFu
c2Zvcm0pOwotCi0gICAgLy8gQ2FuIG9ubHkgZHJhdyBzdXJmYWNlIGlmIGRldmljZSBtYXRyaXgg
aXMgaW52ZXJ0aWJsZS4KLSAgICBpZiAoIWNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLmlzSW52ZXJ0
aWJsZSgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgRmxvYXRRdWFkIGRldmlj
ZVF1YWQgPSBjb250ZW50c0RldmljZVRyYW5zZm9ybS5tYXBRdWFkKGxheWVyUmVuZGVyZXItPnNo
YXJlZEdlb21ldHJ5UXVhZCgpKTsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChkZXZpY2VR
dWFkLmJvdW5kaW5nQm94KCkpOwotfQotCi1JbnRSZWN0IENDUmVuZGVyU3VyZmFjZTo6Y29tcHV0
ZVJlYWRiYWNrRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3QK
LXsKLSAgICBJbnRSZWN0IGRldmljZVJlY3QgPSBjb21wdXRlRGV2aWNlQm91bmRpbmdCb3gobGF5
ZXJSZW5kZXJlciwgZHJhd1RyYW5zZm9ybSk7Ci0KLSAgICBpZiAobV9iYWNrZ3JvdW5kRmlsdGVy
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBkZXZpY2VSZWN0OwotCi0gICAgaW50IHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdDsKLSAgICBtX2JhY2tncm91bmRGaWx0ZXJzLmdldE91dHNldHMo
dG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICBkZXZpY2VSZWN0Lm1vdmUoLWxlZnQsIC10
b3ApOwotICAgIGRldmljZVJlY3QuZXhwYW5kKGxlZnQgKyByaWdodCwgdG9wICsgYm90dG9tKTsK
LQotICAgIHJldHVybiBkZXZpY2VSZWN0OwotfQotCi1JbnRSZWN0IENDUmVuZGVyU3VyZmFjZTo6
cmVhZGJhY2tEZXZpY2VDb250ZW50UmVjdChMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdAot
ewotICAgIHJldHVybiBjb21wdXRlUmVhZGJhY2tEZXZpY2VCb3VuZGluZ0JveChsYXllclJlbmRl
cmVyLCBkcmF3VHJhbnNmb3JtKTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmNvcHlUZXh0
dXJlVG9GcmFtZWJ1ZmZlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGlu
dCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdNYXRyaXgpCitib29sIENDUmVuZGVyU3VyZmFjZTo6aGFzVmFsaWRCYWNrZ3Jv
dW5kVGV4dHVyZSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpS
ZW5kZXJTdXJmYWNlUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZh
Y2VQcm9ncmFtKCk7Ci0KLSAgICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJl
bmRlcmVyLT5jb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKSk7Ci0gICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlci0+
Y29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4
dHVyZUlkKSk7Ci0gICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJl
ci0+Y29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSKSk7Ci0gICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKSk7Ci0KLSAgICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXll
clJlbmRlcmVyLT5jb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0g
ICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgp
LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwg
MCkpOwotICAgIGxheWVyUmVuZGVyZXItPmRyYXdUZXh0dXJlZFF1YWQoZHJhd01hdHJpeCwgYm91
bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgMSwgbGF5ZXJSZW5kZXJlci0+c2hhcmVkR2Vv
bWV0cnlRdWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFt
LT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSk7Ci19Ci0KLXZvaWQgQ0NS
ZW5kZXJTdXJmYWNlOjpjb3B5RGV2aWNlVG9CYWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGludCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkLCBj
b25zdCBJbnRSZWN0JiBkZXZpY2VUZXh0dXJlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGRldmljZVRyYW5zZm9ybSkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fYmFja2dyb3VuZEZp
bHRlcnMuaXNFbXB0eSgpKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRvU3Vy
ZmFjZVRyYW5zZm9ybTsKLSAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKG1f
Y29udGVudFJlY3Qud2lkdGgoKSAvIDIuMCwgbV9jb250ZW50UmVjdC5oZWlnaHQoKSAvIDIuMCk7
Ci0gICAgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3JtLnNjYWxlM2QobV9jb250ZW50UmVjdC53aWR0
aCgpLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgpLCAxKTsKLSAgICBkZXZpY2VUb1N1cmZhY2VUcmFu
c2Zvcm0gKj0gZGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKTsKLSAgICBkZXZpY2VUb1N1cmZhY2VU
cmFuc2Zvcm0udHJhbnNsYXRlKGRldmljZVRleHR1cmVSZWN0LndpZHRoKCkgLyAyLjAsIGRldmlj
ZVRleHR1cmVSZWN0LmhlaWdodCgpIC8gMi4wKTsKLSAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zv
cm0udHJhbnNsYXRlKGRldmljZVRleHR1cmVSZWN0LngoKSwgZGV2aWNlVGV4dHVyZVJlY3QueSgp
KTsKLQotICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihsYXllclJlbmRlcmVyLCBkZXZpY2VC
YWNrZ3JvdW5kVGV4dHVyZUlkLCBkZXZpY2VUZXh0dXJlUmVjdC5zaXplKCksIGRldmljZVRvU3Vy
ZmFjZVRyYW5zZm9ybSk7Ci19Ci0KLWlubGluZSBzdGF0aWMgaW50IGdldFNrQml0bWFwVGV4dHVy
ZUlkKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGludCBmYWxsYmFjaykKLXsKLSAgICBpZiAoIWJp
dG1hcC5nZXRUZXh0dXJlKCkpCi0gICAgICAgIHJldHVybiBmYWxsYmFjazsKLSAgICBHclRleHR1
cmUqIHRleHR1cmUgPSByZWludGVycHJldF9jYXN0PEdyVGV4dHVyZSo+KGJpdG1hcC5nZXRUZXh0
dXJlKCkpOwotICAgIHJldHVybiB0ZXh0dXJlLT5nZXRUZXh0dXJlSGFuZGxlKCk7CisgICAgSW50
U2l6ZSByZXF1aXJlZFNpemUobV9jb250ZW50UmVjdC5zaXplKCkpOworICAgIHJldHVybiBtX2Jh
Y2tncm91bmRUZXh0dXJlICYmIG1fYmFja2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSAmJiBt
X2JhY2tncm91bmRUZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkU2l6ZSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEpOwogfQogCiB2b2lkIENDUmVuZGVyU3VyZmFjZTo6c2V0U2Npc3NvclJlY3QoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZh
Y2VEYW1hZ2VSZWN0KSBjb25zdApAQCAtMjIyLDEzOSArMTU2LDYgQEAgdm9pZCBDQ1JlbmRlclN1
cmZhY2U6OnNldFNjaXNzb3JSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
ciwgY29uc3QKICAgICAgICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
KTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdDb250ZW50cyhMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi17Ci0gICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFtX2Nv
bnRlbnRzVGV4dHVyZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IENhY2hlIHRo
aXMgdmFsdWUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0IGZvciBib3RoIHRoZSBzdXJm
YWNlIGFuZCBpdHMgcmVwbGljYS4KLSAgICAvLyBBcHBseSBmaWx0ZXJzIHRvIHRoZSBjb250ZW50
cyB0ZXh0dXJlLgotICAgIFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFwcGx5RmlsdGVycyhsYXll
clJlbmRlcmVyLCBtX2ZpbHRlcnMsIG1fY29udGVudHNUZXh0dXJlLmdldCgpKTsKLQotICAgIGlu
dCBjb250ZW50c1RleHR1cmVJZCA9IGdldFNrQml0bWFwVGV4dHVyZUlkKGZpbHRlckJpdG1hcCwg
bV9jb250ZW50c1RleHR1cmUtPnRleHR1cmVJZCgpKTsKLSAgICBkcmF3TGF5ZXIobGF5ZXJSZW5k
ZXJlciwgbV9tYXNrTGF5ZXIsIG1fZHJhd1RyYW5zZm9ybSwgY29udGVudHNUZXh0dXJlSWQpOwot
fQotCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhd1JlcGxpY2EoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIEFTU0VSVChoYXNSZXBsaWNhKCkpOwotICAgIGlm
ICghaGFzUmVwbGljYSgpIHx8IG1fc2tpcHNEcmF3IHx8ICFtX2NvbnRlbnRzVGV4dHVyZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4
dHVyZS4KLSAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnMobGF5ZXJSZW5k
ZXJlciwgbV9maWx0ZXJzLCBtX2NvbnRlbnRzVGV4dHVyZS5nZXQoKSk7Ci0KLSAgICAvLyBGSVhN
RTogQnkgdXNpbmcgdGhlIHNhbWUgUmVuZGVyU3VyZmFjZSBmb3IgYm90aCB0aGUgY29udGVudCBh
bmQgaXRzIHJlZmxlY3Rpb24sCi0gICAgLy8gaXQncyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRv
IGFwcGx5IGEgc2VwYXJhdGUgbWFzayB0byB0aGUgcmVmbGVjdGlvbiBsYXllcgotICAgIC8vIG9y
IGNvcnJlY3RseSBoYW5kbGUgb3BhY2l0eSBpbiByZWZsZWN0aW9ucyAob3BhY2l0eSBtdXN0IGJl
IGFwcGxpZWQgYWZ0ZXIgZHJhd2luZwotICAgIC8vIGJvdGggdGhlIGxheWVyIGFuZCBpdHMgcmVm
bGVjdGlvbikuIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgeWV0IGFub3RoZXIgUmVuZGVy
U3VyZmFjZQotICAgIC8vIHRvIGRyYXcgdGhlIGxheWVyIGFuZCBpdHMgcmVmbGVjdGlvbiBpbi4g
Rm9yIG5vdyB3ZSBvbmx5IGFwcGx5IGEgc2VwYXJhdGUgcmVmbGVjdGlvbgotICAgIC8vIG1hc2sg
aWYgdGhlIGNvbnRlbnRzIGRvbid0IGhhdmUgYSBtYXNrIG9mIHRoZWlyIG93bi4KLSAgICBDQ0xh
eWVySW1wbCogcmVwbGljYU1hc2tMYXllciA9IG1fbWFza0xheWVyOwotICAgIGlmICghbV9tYXNr
TGF5ZXIgJiYgbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJlcGxpY2FN
YXNrTGF5ZXIgPSBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7Ci0K
LSAgICBpbnQgY29udGVudHNUZXh0dXJlSWQgPSBnZXRTa0JpdG1hcFRleHR1cmVJZChmaWx0ZXJC
aXRtYXAsIG1fY29udGVudHNUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Ci0gICAgZHJhd0xheWVyKGxh
eWVyUmVuZGVyZXIsIHJlcGxpY2FNYXNrTGF5ZXIsIG1fcmVwbGljYURyYXdUcmFuc2Zvcm0sIGNv
bnRlbnRzVGV4dHVyZUlkKTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdMYXllcihM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIENDTGF5ZXJJbXBsKiBtYXNrTGF5
ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBpbnQgY29udGVu
dHNUZXh0dXJlSWQpCi17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlTWF0cml4ID0g
Y29tcHV0ZURldmljZVRyYW5zZm9ybShsYXllclJlbmRlcmVyLCBkcmF3VHJhbnNmb3JtKTsKLQot
ICAgIC8vIENhbiBvbmx5IGRyYXcgc3VyZmFjZSBpZiBkZXZpY2UgbWF0cml4IGlzIGludmVydGli
bGUuCi0gICAgaWYgKCFkZXZpY2VNYXRyaXguaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgdGV4dHVyZSBpZiB0aGVyZSBpcyBvbmUu
Ci0gICAgaWYgKG1fYmFja2dyb3VuZFRleHR1cmUgJiYgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNS
ZXNlcnZlZCgpKQotICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIobGF5ZXJSZW5kZXJl
ciwgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+dGV4dHVyZUlkKCksIG1fY29udGVudFJlY3Quc2l6ZSgp
LCBkcmF3VHJhbnNmb3JtKTsKLQotICAgIEZsb2F0UXVhZCBxdWFkID0gZGV2aWNlTWF0cml4Lm1h
cFF1YWQobGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCkpOwotICAgIENDTGF5ZXJR
dWFkIGRldmljZVJlY3QgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQocXVhZC5ib3VuZGluZ0JveCgp
KSk7Ci0gICAgQ0NMYXllclF1YWQgbGF5ZXJRdWFkID0gQ0NMYXllclF1YWQocXVhZCk7Ci0KLSAg
ICAvLyBVc2UgYW50aS1hbGlhc2luZyBwcm9ncmFtcyBvbmx5IHdoZW4gbmVjZXNzYXJ5LgotICAg
IGJvb2wgdXNlQUEgPSAoIXF1YWQuaXNSZWN0aWxpbmVhcigpIHx8ICFxdWFkLmJvdW5kaW5nQm94
KCkuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKTsKLQotICAgIGlmICh1c2VBQSkgewotICAgICAg
ICBkZXZpY2VSZWN0LmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOwotICAgICAgICBsYXll
clF1YWQuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7Ci0gICAgfQotCi0gICAgYm9vbCB1
c2VNYXNrID0gZmFsc2U7Ci0gICAgaWYgKG1hc2tMYXllciAmJiBtYXNrTGF5ZXItPmRyYXdzQ29u
dGVudCgpKQotICAgICAgICBpZiAoIW1hc2tMYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgdXNlTWFzayA9IHRydWU7Ci0KLSAgICAvLyBGSVhNRTogcGFzcyBpbiBiYWNrZ3Jv
dW5kVGV4dHVyZUlkIGFuZCBibGVuZCB0aGUgYmFja2dyb3VuZCBpbiB3aXRoIHRoaXMgZHJhdyBp
bnN0ZWFkIG9mIGhhdmluZyBhIHNlcGFyYXRlIGRyYXdCYWNrZ3JvdW5kKCkgcGFzcy4KLQotICAg
IGlmICh1c2VNYXNrKSB7Ci0gICAgICAgIGlmICh1c2VBQSkgewotICAgICAgICAgICAgY29uc3Qg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpSZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQSogcHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBKCk7Ci0gICAgICAg
ICAgICBkcmF3U3VyZmFjZShsYXllclJlbmRlcmVyLCBtYXNrTGF5ZXIsIGRyYXdUcmFuc2Zvcm0s
IGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBjb250ZW50c1RleHR1cmVJZCwg
cHJvZ3JhbSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxvY2F0aW9uKCks
IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50TG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOwotICAg
ICAgICAgICAgZHJhd1N1cmZhY2UobGF5ZXJSZW5kZXJlciwgbWFza0xheWVyLCBkcmF3VHJhbnNm
b3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgY29udGVudHNUZXh0dXJl
SWQsIHByb2dyYW0sIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkubWFza1NhbXBsZXJMb2NhdGlv
bigpLCAtMSwgLTEpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHVzZUFB
KSB7Ci0gICAgICAgICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1cmZh
Y2VQcm9ncmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlUHJvZ3Jh
bUFBKCk7Ci0gICAgICAgICAgICBkcmF3U3VyZmFjZShsYXllclJlbmRlcmVyLCBtYXNrTGF5ZXIs
IGRyYXdUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBjb250
ZW50c1RleHR1cmVJZCwgcHJvZ3JhbSwgLTEsIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50
TG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OlJlbmRlclN1cmZhY2VQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3Vy
ZmFjZVByb2dyYW0oKTsKLSAgICAgICAgICAgIGRyYXdTdXJmYWNlKGxheWVyUmVuZGVyZXIsIG1h
c2tMYXllciwgZHJhd1RyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1
YWQsIGNvbnRlbnRzVGV4dHVyZUlkLCBwcm9ncmFtLCAtMSwgLTEsIC0xKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJh
d1N1cmZhY2UoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBDQ0xheWVySW1w
bCogbWFza0xheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3QgQ0NMYXll
clF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBsYXllclF1YWQsIGludCBjb250
ZW50c1RleHR1cmVJZCwgY29uc3QgVCogcHJvZ3JhbSwgaW50IHNoYWRlck1hc2tTYW1wbGVyTG9j
YXRpb24sIGludCBzaGFkZXJRdWFkTG9jYXRpb24sIGludCBzaGFkZXJFZGdlTG9jYXRpb24pCi17
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKTsKLQotICAgIGNvbnRleHQzRC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xDKGNv
bnRleHQzRCwgY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwotCi0g
ICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFp
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICBj
b250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBjb250
ZW50c1RleHR1cmVJZCk7Ci0KLSAgICBpZiAoc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiAhPSAt
MSkgewotICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRl
eHQzRC0+dW5pZm9ybTFpKHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24sIDEpKTsKLSAgICAgICAg
bWFza0xheWVyLT5iaW5kQ29udGVudHNUZXh0dXJlKGxheWVyUmVuZGVyZXIpOwotICAgICAgICBH
TEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUwKSk7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlckVkZ2VMb2NhdGlvbiAhPSAtMSkg
ewotICAgICAgICBmbG9hdCBlZGdlWzI0XTsKLSAgICAgICAgbGF5ZXJRdWFkLnRvRmxvYXRBcnJh
eShlZGdlKTsKLSAgICAgICAgZGV2aWNlUmVjdC50b0Zsb2F0QXJyYXkoJmVkZ2VbMTJdKTsKLSAg
ICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3JtM2Z2KHNoYWRlckVkZ2VMb2Nh
dGlvbiwgOCwgZWRnZSkpOwotICAgIH0KLQotICAgIC8vIE1hcCBkZXZpY2Ugc3BhY2UgcXVhZCB0
byBsYXllciBzcGFjZS4KLSAgICBGbG9hdFF1YWQgcXVhZCA9IGRldmljZVRyYW5zZm9ybS5pbnZl
cnNlKCkubWFwUXVhZChsYXllclF1YWQuZmxvYXRRdWFkKCkpOwotCi0gICAgbGF5ZXJSZW5kZXJl
ci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3VHJhbnNmb3JtLCBtX2NvbnRlbnRSZWN0LndpZHRoKCks
IG1fY29udGVudFJlY3QuaGVpZ2h0KCksIG1fZHJhd09wYWNpdHksIHF1YWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhM
b2NhdGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwgc2hh
ZGVyUXVhZExvY2F0aW9uKTsKLX0KLQotU2tCaXRtYXAgQ0NSZW5kZXJTdXJmYWNlOjphcHBseUZp
bHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIE1hbmFnZWRUZXh0dXJlKiBzb3VyY2VUZXh0
dXJlKQotewotICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFNrQml0
bWFwKCk7Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGZpbHRlckNvbnRleHQgPSBD
Q1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkgPyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0Rm9y
SW1wbFRocmVhZCgpIDogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOwotICAgIGlmICgh
ZmlsdGVyQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7Ci0KLSAgICBsYXllclJl
bmRlcmVyLT5jb250ZXh0KCktPmZsdXNoKCk7Ci0KLSAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNl
RmlsdGVyczo6YXBwbHkoZmlsdGVycywgc291cmNlVGV4dHVyZS0+dGV4dHVyZUlkKCksIHNvdXJj
ZVRleHR1cmUtPnNpemUoKSwgZmlsdGVyQ29udGV4dC5nZXQoKSk7Ci19Ci0KIFN0cmluZyBDQ1Jl
bmRlclN1cmZhY2U6Om5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgi
UmVuZGVyU3VyZmFjZShpZD0laSxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293
bmluZ0xheWVyLT5kZWJ1Z05hbWUoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTM5OCwxMiArMTk5LDEy
IEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNSZXBsaWNhKCkgY29uc3QKIAogYm9vbCBDQ1Jl
bmRlclN1cmZhY2U6Omhhc01hc2soKSBjb25zdAogewotICAgIHJldHVybiBtX21hc2tMYXllcjsK
KyAgICByZXR1cm4gbV9vd25pbmdMYXllci0+bWFza0xheWVyKCk7CiB9CiAKIGJvb2wgQ0NSZW5k
ZXJTdXJmYWNlOjpyZXBsaWNhSGFzTWFzaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1JlcGxp
Y2EoKSAmJiAobV9tYXNrTGF5ZXIgfHwgbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCktPm1h
c2tMYXllcigpKTsKKyAgICByZXR1cm4gaGFzUmVwbGljYSgpICYmIChtX293bmluZ0xheWVyLT5t
YXNrTGF5ZXIoKSB8fCBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkp
OwogfQogCiB2b2lkIENDUmVuZGVyU3VyZmFjZTo6c2V0Q2xpcFJlY3QoY29uc3QgSW50UmVjdCYg
Y2xpcFJlY3QpCkBAIC00NTUsNSArMjU2LDM4IEBAIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3Rh
dGU+IENDUmVuZGVyU3VyZmFjZTo6Y3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpIGNvCiAg
ICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocmVwbGljYU9yaWdpblRyYW5zZm9y
bSgpLCByZXBsaWNhRHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBjbGlwUmVjdCgpLCBk
cmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7CiB9CiAKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjphcHBl
bmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVk
UXVhZFN0YXRlLCBib29sIGZvclJlcGxpY2EsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFn
ZVJlY3QpCit7CisgICAgQVNTRVJUKCFmb3JSZXBsaWNhIHx8IGhhc1JlcGxpY2EoKSk7CisKKyAg
ICBpZiAobV9vd25pbmdMYXllci0+aGFzRGVidWdCb3JkZXJzKCkpIHsKKyAgICAgICAgaW50IHJl
ZCA9ICFmb3JSZXBsaWNhID8gZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JSZWQgOiBkZWJ1Z1JlcGxp
Y2FCb3JkZXJDb2xvclJlZDsKKyAgICAgICAgaW50IGdyZWVuID0gIWZvclJlcGxpY2EgPyBkZWJ1
Z1N1cmZhY2VCb3JkZXJDb2xvckdyZWVuIDogZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JHcmVlbjsK
KyAgICAgICAgaW50IGJsdWUgPSAhZm9yUmVwbGljYSA/IGRlYnVnU3VyZmFjZUJvcmRlckNvbG9y
Qmx1ZSA6IGRlYnVnUmVwbGljYUJvcmRlckNvbG9yQmx1ZTsKKyAgICAgICAgQ29sb3IgY29sb3Io
cmVkLCBncmVlbiwgYmx1ZSwgZGVidWdTdXJmYWNlQm9yZGVyQWxwaGEpOworICAgICAgICBxdWFk
TGlzdC5hcHBlbmRTdXJmYWNlKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1
YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgY29sb3IsIGRlYnVnU3VyZmFjZUJvcmRlcldpZHRoKSk7
CisgICAgfQorCisgICAgLy8gRklYTUU6IEJ5IHVzaW5nIHRoZSBzYW1lIFJlbmRlclN1cmZhY2Ug
Zm9yIGJvdGggdGhlIGNvbnRlbnQgYW5kIGl0cyByZWZsZWN0aW9uLAorICAgIC8vIGl0J3MgY3Vy
cmVudGx5IG5vdCBwb3NzaWJsZSB0byBhcHBseSBhIHNlcGFyYXRlIG1hc2sgdG8gdGhlIHJlZmxl
Y3Rpb24gbGF5ZXIKKyAgICAvLyBvciBjb3JyZWN0bHkgaGFuZGxlIG9wYWNpdHkgaW4gcmVmbGVj
dGlvbnMgKG9wYWNpdHkgbXVzdCBiZSBhcHBsaWVkIGFmdGVyIGRyYXdpbmcKKyAgICAvLyBib3Ro
IHRoZSBsYXllciBhbmQgaXRzIHJlZmxlY3Rpb24pLiBUaGUgc29sdXRpb24gaXMgdG8gaW50cm9k
dWNlIHlldCBhbm90aGVyIFJlbmRlclN1cmZhY2UKKyAgICAvLyB0byBkcmF3IHRoZSBsYXllciBh
bmQgaXRzIHJlZmxlY3Rpb24gaW4uIEZvciBub3cgd2Ugb25seSBhcHBseSBhIHNlcGFyYXRlIHJl
ZmxlY3Rpb24KKyAgICAvLyBtYXNrIGlmIHRoZSBjb250ZW50cyBkb24ndCBoYXZlIGEgbWFzayBv
ZiB0aGVpciBvd24uCisgICAgQ0NMYXllckltcGwqIG1hc2tMYXllciA9IG1fb3duaW5nTGF5ZXIt
Pm1hc2tMYXllcigpOworICAgIGlmIChtYXNrTGF5ZXIgJiYgKCFtYXNrTGF5ZXItPmRyYXdzQ29u
dGVudCgpIHx8IG1hc2tMYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKSkKKyAgICAgICAgbWFza0xh
eWVyID0gMDsKKworICAgIGlmICghbWFza0xheWVyICYmIGZvclJlcGxpY2EpIHsKKyAgICAgICAg
bWFza0xheWVyID0gbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpOwor
ICAgICAgICBpZiAobWFza0xheWVyICYmICghbWFza0xheWVyLT5kcmF3c0NvbnRlbnQoKSB8fCBt
YXNrTGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkpCisgICAgICAgICAgICBtYXNrTGF5ZXIgPSAw
OworICAgIH0KKworICAgIGludCBtYXNrVGV4dHVyZUlkID0gbWFza0xheWVyID8gbWFza0xheWVy
LT5jb250ZW50c1RleHR1cmVJZCgpIDogMDsKKworICAgIHF1YWRMaXN0LmFwcGVuZFN1cmZhY2Uo
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRS
ZWN0KCksIG1fb3duaW5nTGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0LCBmb3JSZXBsaWNhLCBmaWx0
ZXJzKCksIGJhY2tncm91bmRGaWx0ZXJzKCksIG1hc2tUZXh0dXJlSWQpKTsKK30KKwogfQogI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmgKaW5kZXggYTZkZWUxMGVjZWQwOTdjODIwYTRhOTgyMzVjZDgyZWI5ZTE4ZTVhZC4uM2Ux
YWQxZmQ3MWE4NWUyYmU5ZjlhMzU3OWFhNmY0N2M5NjYwZmM3YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmgKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVyUXVhZC5oIgpAQCAtNDEsNiArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBDQ0RhbWFnZVRyYWNrZXI7CitjbGFzcyBDQ1F1YWRDdWxsZXI7CiBjbGFz
cyBDQ1NoYXJlZFF1YWRTdGF0ZTsKIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOwpAQCAtNTQsMTkgKzU0LDE0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgcHJl
cGFyZUNvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKICAgICB2b2lkIHJl
bGVhc2VDb250ZW50c1RleHR1cmUoKTsKKyAgICBib29sIGhhc1ZhbGlkQ29udGVudHNUZXh0dXJl
KCkgY29uc3Q7CiAKICAgICBib29sIHByZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKICAgICB2b2lkIHJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpOworICAg
IGJvb2wgaGFzVmFsaWRCYWNrZ3JvdW5kVGV4dHVyZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRT
Y2lzc29yUmVjdChMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZh
Y2VEYW1hZ2VSZWN0KSBjb25zdDsKIAotICAgIHZvaWQgZHJhd0NvbnRlbnRzKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSopOwotICAgIHZvaWQgZHJhd1JlcGxpY2EoTGF5ZXJSZW5kZXJlckNocm9taXVt
Kik7Ci0KLSAgICAvLyBUYWtlcyBhIHRleHR1cmUgd2l0aCBwaXhlbHMgaW4gZGV2aWNlIHNwYWNl
LCBhbmQgYSB0cmFuc2Zvcm0gZnJvbSBjb250ZW50IHNwYWNlIHRvIHRoZSBkZXZpY2UuIENvcGll
cyB0aGUgZGV2aWNlLXNwYWNlIHRleHR1cmUgYmFjayBpbnRvCi0gICAgLy8gY29udGVudCBzcGFj
ZSBmb3IgdGhlIHN1cmZhY2UsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiB0aGUgYmFja2dyb3VuZFRl
eHR1cmUoKS4gVGhlIHN1cmZhY2UncyBiYWNrZ3JvdW5kVGV4dHVyZSgpIG11c3QgYmUgdGhlIGFj
dGl2ZSBkcmF3aW5nIHRhcmdldC4KLSAgICB2b2lkIGNvcHlEZXZpY2VUb0JhY2tncm91bmRUZXh0
dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGludCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlk
LCBjb25zdCBJbnRSZWN0JiBkZXZpY2VUZXh0dXJlUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRldmljZVRyYW5zZm9ybSkgY29uc3Q7Ci0KICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0
OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0Owog
CkBAIC03NCwxOCArNjksMTIgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyB0aGUgcmVjdCB0
aGF0IGVuY2xvc2VzIHRoZSBSZW5kZXJTdXJmYWNlIGluY2x1ZGluZyBhbnkgcmVmbGVjdGlvbi4K
ICAgICBGbG9hdFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0OwotICAgIC8vIFJldHVy
bnMgdGhlIHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgcGl4ZWxzIHRoYXQgbWF5IGFmZmVjdCB0aGUg
cGl4ZWwgdmFsdWVzIGluIHRoaXMgc3VyZmFjZSB0aHJvdWdoIGJhY2tncm91bmQgZmlsdGVycy4K
LSAgICBJbnRSZWN0IHJlYWRiYWNrRGV2aWNlQ29udGVudFJlY3QoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0Owot
Ci0gICAgLy8gR2l2ZXMgdGhlIHRyYW5zZm9ybSBmcm9tIHRoZSBzdXJmYWNlIGNvbnRlbnQgc3Bh
Y2UsIHdpdGggb3JpZ2luIGluIHRoZSB0b3AgbGVmdCwgdG8gdGhlIGN1cnJlbnQgdGFyZ2V0IGRl
dmljZSBzcGFjZSwgd2l0aCBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0LgotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGNvbXB1dGVEZXZpY2VUcmFuc2Zvcm0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0OwogCiAgICAg
ZmxvYXQgZHJhd09wYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdPcGFjaXR5OyB9CiAgICAg
dm9pZCBzZXREcmF3T3BhY2l0eShmbG9hdCBvcGFjaXR5KSB7IG1fZHJhd09wYWNpdHkgPSBvcGFj
aXR5OyB9CiAKICAgICB2b2lkIHNldEZpbHRlcnMoY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKSB7IG1fZmlsdGVycyA9IGZpbHRlcnM7IH0KICAgICBjb25zdCBXZWJL
aXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRl
cnM7IH0KLSAgICBTa0JpdG1hcCBhcHBseUZpbHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwg
Y29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiwgTWFuYWdlZFRleHR1cmUqIHNvdXJj
ZVRleHR1cmUpOwogCiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIHsgbV9iYWNrZ3JvdW5kRmlsdGVycyA9IGZp
bHRlcnM7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91
bmRGaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRmlsdGVyczsgfQpAQCAtMTI2
LDE0ICsxMTUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb250ZW50UmVjdChjb25zdCBJbnRS
ZWN0Jik7CiAgICAgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRSZWN0OyB9CiAKLSAgICB2b2lkIHNldFNraXBzRHJhdyhib29sIHNraXBzRHJhdykg
eyBtX3NraXBzRHJhdyA9IHNraXBzRHJhdzsgfQotICAgIGJvb2wgc2tpcHNEcmF3KCkgY29uc3Qg
eyByZXR1cm4gbV9za2lwc0RyYXc7IH0KLQogICAgIHZvaWQgY2xlYXJMYXllckxpc3QoKSB7IG1f
bGF5ZXJMaXN0LmNsZWFyKCk7IH0KICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0
KCkgeyByZXR1cm4gbV9sYXllckxpc3Q7IH0KIAotICAgIHZvaWQgc2V0TWFza0xheWVyKENDTGF5
ZXJJbXBsKiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IH0KLQogICAgIE1h
bmFnZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRz
VGV4dHVyZS5nZXQoKTsgfQogICAgIE1hbmFnZWRUZXh0dXJlKiBiYWNrZ3JvdW5kVGV4dHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFRleHR1cmUuZ2V0KCk7IH0KIApAQCAtMTUzLDIx
ICsxMzcsMTMgQEAgcHVibGljOgogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNy
ZWF0ZVNoYXJlZFF1YWRTdGF0ZSgpIGNvbnN0OwogICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IGNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFkU3RhdGUoKSBjb25zdDsKIAotcHJpdmF0ZToK
LSAgICBJbnRSZWN0IGNvbXB1dGVEZXZpY2VCb3VuZGluZ0JveChMYXllclJlbmRlcmVyQ2hyb21p
dW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3Q7Ci0g
ICAgSW50UmVjdCBjb21wdXRlUmVhZGJhY2tEZXZpY2VCb3VuZGluZ0JveChMYXllclJlbmRlcmVy
Q2hyb21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29u
c3Q7Ci0KLSAgICB2b2lkIGRyYXdMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBDQ0xheWVy
SW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgaW50IGNvbnRlbnRzVGV4dHVyZUlk
KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICB2b2lkIGRyYXdTdXJmYWNlKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSosIENDTGF5ZXJJbXBsKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zv
cm0sIGNvbnN0IENDTGF5ZXJRdWFkJiBkZXZpY2VSZWN0LCBjb25zdCBDQ0xheWVyUXVhZCYsIGlu
dCBjb250ZW50c1RleHR1cmVJZCwgY29uc3QgVCogcHJvZ3JhbSwgaW50IHNoYWRlck1hc2tTYW1w
bGVyTG9jYXRpb24sIGludCBzaGFkZXJRdWFkTG9jYXRpb24sIGludCBzaGFkZXJFZGdlTG9jYXRp
b24pOwotCi0gICAgc3RhdGljIHZvaWQgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSosIGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgpOworICAgIC8vIEZJWE1FOiBSZW1v
dmUgdGhlIHN1cmZhY2VEYW1hZ2VSZWN0IHBhcmFtZXRlciB3aGVuIHRoZSB2YWx1ZSBpcyByZW1v
dmVkIGZyb20gQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuCisgICAgdm9pZCBhcHBlbmRRdWFkcyhD
Q1F1YWRDdWxsZXImLCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGJvb2wgZm9yUmVwbGljYSwgY29uc3Qg
RmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCk7CiAKK3ByaXZhdGU6CiAgICAgQ0NMYXllcklt
cGwqIG1fb3duaW5nTGF5ZXI7Ci0gICAgQ0NMYXllckltcGwqIG1fbWFza0xheWVyOwogCiAgICAg
SW50UmVjdCBtX2NvbnRlbnRSZWN0OwotICAgIGJvb2wgbV9za2lwc0RyYXc7CiAgICAgYm9vbCBt
X3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQ7CiAKICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1f
Y29udGVudHNUZXh0dXJlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQuY3BwCmluZGV4IGM2ZTAyMWVjZTIwNjVjNzljNWVjZjZjZDBiNmQzN2NlOTU0N2IzMTAuLjBm
ODJjNWVjYzZlYjEwOGU3NmU0MmYxYmRlN2FmZjJlNzhhZGIyMjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURy
YXdRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5jcHAKQEAgLTI5LDE4ICsyOSwyMSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+
IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUq
IHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBsKiBs
YXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2Ep
CitQYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBDQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IEZsb2F0UmVj
dCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9u
cyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChzaGFyZWRRdWFkU3RhdGUs
IHF1YWRSZWN0LCBsYXllciwgc3VyZmFjZURhbWFnZVJlY3QsIGlzUmVwbGljYSkpOworICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRl
LCBxdWFkUmVjdCwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0LCBpc1JlcGxpY2EsIGZpbHRlcnMs
IGJhY2tncm91bmRGaWx0ZXJzLCBtYXNrVGV4dHVyZUlkKSk7CiB9CiAKLUNDUmVuZGVyU3VyZmFj
ZURyYXdRdWFkOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0
ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwq
IGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGlj
YSkKK0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZChjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFk
UmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VS
ZWN0LCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBm
aWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0
ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKQogICAgIDogQ0NEcmF3UXVhZChzaGFyZWRRdWFk
U3RhdGUsIENDRHJhd1F1YWQ6OlJlbmRlclN1cmZhY2UsIHF1YWRSZWN0KQogICAgICwgbV9sYXll
cihsYXllcikKICAgICAsIG1fc3VyZmFjZURhbWFnZVJlY3Qoc3VyZmFjZURhbWFnZVJlY3QpCiAg
ICAgLCBtX2lzUmVwbGljYShpc1JlcGxpY2EpCisgICAgLCBtX21hc2tUZXh0dXJlSWQobWFza1Rl
eHR1cmVJZCkKIHsKICAgICBBU1NFUlQobV9sYXllcik7CisgICAgbV9maWx0ZXJzLmFzc2lnbihm
aWx0ZXJzKTsKKyAgICBtX2JhY2tncm91bmRGaWx0ZXJzLmFzc2lnbihiYWNrZ3JvdW5kRmlsdGVy
cyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oCmlu
ZGV4IDhmNmRhNWVlZTFkODI3ZmMxMGVhNWE1OGQ1ZjgxOWViMjA1OTMxNmQuLjBhMDEyODFmYTRm
NjlkZTJjZDZkMjkxZmYxYTYxNmI2OTY3Yjk0YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBDQ1JlbmRlclN1
cmZhY2VEcmF3UXVhZF9oCiAKICNpbmNsdWRlICJjYy9DQ0RyYXdRdWFkLmgiCisjaW5jbHVkZSA8
cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiwyMSArMzcsMjggQEAgY2xhc3MgQ0NMYXll
ckltcGw7CiBjbGFzcyBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFk
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCk7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ+IGNy
ZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBDQ0xheWVySW1w
bCosIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNhKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gY3JlYXRlKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgY29u
c3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdl
YktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0
ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCk7
CiAKICAgICBDQ0xheWVySW1wbCogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9CiAg
ICAgYm9vbCBpc1JlcGxpY2EoKSBjb25zdCB7IHJldHVybiBtX2lzUmVwbGljYTsgfQorICAgIHVu
c2lnbmVkIG1hc2tUZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX21hc2tUZXh0dXJlSWQ7IH0K
IAogICAgIC8vIFRoZSBzdXJmYWNlIGRhbWFnZSByZWN0IGZvciB0aGUgdGFyZ2V0IHN1cmZhY2Ug
dGhpcyBxdWFkIGRyYXdzIGludG8uCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGJlIHJlbW92ZWQg
b25jZSByZW5kZXIgc3VyZmFjZXMgZ2V0IHRoZWlyIG93biBsYXllciB0eXBlLgogICAgIGNvbnN0
IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2VE
YW1hZ2VSZWN0OyB9CiAKKyAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KKyAgICBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kRmlsdGVyczsgfQorCiBwcml2YXRlOgotICAgIENDUmVuZGVyU3VyZmFjZURyYXdR
dWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBs
KiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EpOwor
ICAgIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29u
c3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdl
UmVjdCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmls
dGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCk7CiAKICAgICBDQ0xheWVySW1wbCogbV9sYXll
cjsKICAgICBGbG9hdFJlY3QgbV9zdXJmYWNlRGFtYWdlUmVjdDsKICAgICBib29sIG1faXNSZXBs
aWNhOworICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CisgICAgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CisgICAgdW5zaWdu
ZWQgbV9tYXNrVGV4dHVyZUlkOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcAppbmRleCBlYzIyYTlmZDY3NmI5MDgyZjcwODVjOWEyOWE1MGE0Y2RhZTIxOWFlLi45NjA1
ZTQ5OTczNjFjYzI1NGQzNWM0ODBmMGEyZWU1Yzg4MWQ2MDZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVkTGF5ZXJJbXBsLmNwcApAQCAtNzcsNyArNzcsNyBAQCBDQ1RpbGVkTGF5ZXJJbXBsOjp+Q0NU
aWxlZExheWVySW1wbCgpCiB7CiB9CiAKLXZvaWQgQ0NUaWxlZExheWVySW1wbDo6YmluZENvbnRl
bnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCit1bnNpZ25l
ZCBDQ1RpbGVkTGF5ZXJJbXBsOjpjb250ZW50c1RleHR1cmVJZCgpIGNvbnN0CiB7CiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBzaW5nbGUgdGV4dHVyZSBsYXllcnMsIGUu
Zy4gbWFza3MuCiAgICAgQVNTRVJUKG1fdGlsZXIpOwpAQCAtODgsNyArODgsNyBAQCB2b2lkIEND
VGlsZWRMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlcmVyKQogICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkID0gdGlsZSA/
IHRpbGUtPnRleHR1cmVJZCgpIDogMDsKICAgICBBU1NFUlQodGV4dHVyZUlkKTsKIAotICAgIGxh
eWVyUmVuZGVyZXItPmNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIHRleHR1cmVJZCk7CisgICAgcmV0dXJuIHRleHR1cmVJZDsKIH0KIAogdm9pZCBD
Q1RpbGVkTGF5ZXJJbXBsOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQg
aW5kZW50KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IGJkMTQ2NjUw
YmFkNWE3YWQ2MDIxZjlhYTcyZGRlZTc3NTJhYTE1YmUuLjJlODUzOWFlMTg2YTIwMDI2ZmY5MjI4
YjcwNzljMjBjZGMzYmY1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTQ1
LDcgKzQ1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVh
ZEN1bGxlciYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgYm9vbCYgaGFkTWlzc2luZ1RpbGVz
KSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKExheWVy
UmVuZGVyZXJDaHJvbWl1bSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdW5zaWduZWQgY29udGVu
dHNUZXh0dXJlSWQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5
ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdCBPVkVSUklERTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVz
dC5jcHAKaW5kZXggN2RhYzAwNWQyNGNhZmFjYzI3MWI4NmFkNWZkZTM4NTY2ZDBiZDg3NC4uMzA3
NTFkNzQ4MzI2OGI0NWY2ZDc5MTgwZGE5MThlM2I1M2YzN2ZmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCkBAIC04Niw5
ICs4Niw3IEBAIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwgdmVyaWZ5U3VyZmFjZUNoYW5nZXNB
cmVUcmFja2VkUHJvcGVybHkpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0VfRElEX05P
VF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0RHJhd1RyYW5zZm9ybShkdW1teU1hdHJpeCkpOwog
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNFX0RJRF9OT1RfQ0hBTkdFKHJlbmRlclN1cmZh
Y2UtPnNldFJlcGxpY2FEcmF3VHJhbnNmb3JtKGR1bW15TWF0cml4KSk7CiAgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX1NVUkZBQ0VfRElEX05PVF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0T3JpZ2lu
VHJhbnNmb3JtKGR1bW15TWF0cml4KSk7Ci0gICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NVUkZBQ0Vf
RElEX05PVF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0U2tpcHNEcmF3KHRydWUpKTsKICAgICBF
WEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9ESURfTk9UX0NIQU5HRShyZW5kZXJTdXJmYWNlLT5j
bGVhckxheWVyTGlzdCgpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9ESURfTk9U
X0NIQU5HRShyZW5kZXJTdXJmYWNlLT5zZXRNYXNrTGF5ZXIoZHVtbXlNYXNrLmdldCgpKSk7CiB9
CiAKIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwgc2FuaXR5Q2hlY2tTdXJmYWNlQ3JlYXRlc0Nv
cnJlY3RTaGFyZWRRdWFkU3RhdGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145128</attachid>
            <date>2012-05-31 12:05:38 -0700</date>
            <delta_ts>2012-05-31 13:41:56 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-87877-20120531150536.patch</filename>
            <type>text/plain</type>
            <size>59514</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI2MTk4YmIzOWEyYjgy
YWNiZDA2NDIyYTJjMTc2ZmYzZDg5NzkxMC4uYmU0MzljMWY2ZDEzOTEyMzFlYzVhZGI3ZjFkN2U2
OGU1MmY2YjI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA1LTMwICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92
ZSBkcmF3aW5nIGNvZGUgZm9yIFJlbmRlclN1cmZhY2VzIGludG8gTGF5ZXJSZW5kZXJlckNocm9t
aXVtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3
NworCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgIFdlIGFk
ZCBkYXRhIHRvIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkIHNvIHRoYXQgdGhlIG9ubHkgdXNlIG9m
CisgICAgICAgIENDUmVuZGVyU3VyZmFjZSBkaXJlY3RseSBmcm9tIExheWVyUmVuZGVyZXJDaHJv
bWl1bSBpcyB0bworICAgICAgICByZXNlcnZlLCByZWxlYXNlLCBhbmQgdXNlIHRoZSBzdXJmYWNl
J3MgdGV4dHVyZXMsIGFuZCB0byBzZXQgdGhlCisgICAgICAgIHNjaXNzb3IgcmVjdC4gRWFjaCBv
ZiB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgZG9uZSBpbmRlcGVuZGVudAorICAgICAgICBvZiB0aGlz
IGNoYW5nZS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGx5RmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRl
clN1cmZhY2VRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKExheWVyUmVuZGVyZXJD
aHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNvbnRlbnRzVGV4dHVy
ZUlkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5oOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuaDoKKyAgICAg
ICAgKENDUXVhZEN1bGxlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzczo6YXBw
ZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6Q0NSZW5kZXJTdXJmYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZENvbnRlbnRz
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VCYWNr
Z3JvdW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2U6Omhhc1Zh
bGlkQmFja2dyb3VuZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNl
OjpoYXNNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6cmVwbGljYUhh
c01hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlOjphcHBlbmRRdWFkcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDUmVuZGVyU3VyZmFjZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6Om1hc2tUZXh0dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJT
dXJmYWNlRHJhd1F1YWQ6OmZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQ6OmJhY2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGlsZWRMYXllckltcGw6OmNvbnRlbnRzVGV4dHVyZUlkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ1Rp
bGVkTGF5ZXJJbXBsKToKKwogMjAxMi0wNS0zMSAgQW1pIEZpc2NobWFuICA8ZmlzY2htYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJlcGxhY2UgV2ViTWVkaWFQbGF5ZXI6OmJ5dGVzTG9hZGVk
KCkgd2l0aCBhbiBleHBsaWNpdCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCBkMDg2ZTRhYTJlNzY0OGYxYzRhOTA0NTBlZjA2NzEwNWNkODRhMTAzLi5k
YmIyNzVkZTkxMDg3NDE1ZjA2MWYzMzZkNmQ4Yjk5MGMyNGI1NmU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA1LTMwICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBkcmF3aW5nIGNv
ZGUgZm9yIFJlbmRlclN1cmZhY2VzIGludG8gTGF5ZXJSZW5kZXJlckNocm9taXVtCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3NworCisgICAgICAg
IFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgICogdGVzdHMvQ0NSZW5kZXJT
dXJmYWNlVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0wNS0zMSAg
QW1pIEZpc2NobWFuICA8ZmlzY2htYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlcGxhY2Ug
V2ViTWVkaWFQbGF5ZXI6OmJ5dGVzTG9hZGVkKCkgd2l0aCBhbiBleHBsaWNpdCBkaWRMb2FkaW5n
UHJvZ3Jlc3MoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYTlm
M2Q0NjY1ZDM2ZTUyOGQzZmUzZmM5MWM4NjAyNWY0ZTlhODdlZC4uOTdkNmU3N2VjZTE2ZWUyY2Nk
YzE0NDYyMThiYjYwYjVkNzhhOGQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCkBAIC00Niw2ICs0Niw4IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1ZGUgIlRleHR1
cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyLmgiCkBAIC01
NiwxMSArNTgsMTMgQEAKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKICNp
bmNsdWRlICJjYy9DQ0lPU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllcklt
cGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyUXVhZC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKICNpbmNsdWRlICJj
Yy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VG
aWx0ZXJzLmgiCiAjaW5jbHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKICNpbmNsdWRl
ICJjYy9DQ1RleHR1cmVEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgi
CkBAIC01NjgsNyArNTcyLDIxIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVi
dWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCogcXVhCiAgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVf
TE9PUCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCA2ICogc2l6ZW9mKHVu
c2lnbmVkIHNob3J0KSkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0Jh
Y2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKiBxdWFkKQorc3Rh
dGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZpbHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBs
YXllclJlbmRlcmVyLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMs
IE1hbmFnZWRUZXh0dXJlKiBzb3VyY2VUZXh0dXJlKQoreworICAgIGlmIChmaWx0ZXJzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGZpbHRlckNvbnRleHQgPSBDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkgPyBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0Rm9ySW1wbFRocmVhZCgpIDogU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0Q6OmdldCgpOworICAgIGlmICghZmlsdGVyQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IFNrQml0bWFwKCk7CisKKyAgICBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPmZsdXNoKCk7CisK
KyAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmlsdGVyczo6YXBwbHkoZmlsdGVycywgc291cmNl
VGV4dHVyZS0+dGV4dHVyZUlkKCksIHNvdXJjZVRleHR1cmUtPnNpemUoKSwgZmlsdGVyQ29udGV4
dC5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3Vu
ZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqIHF1YWQsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkKIHsKICAgICAvLyBUaGlz
IG1ldGhvZCBkcmF3cyBhIGJhY2tncm91bmQgZmlsdGVyLCB3aGljaCBhcHBsaWVzIGEgZmlsdGVy
IHRvIGFueSBwaXhlbHMgYmVoaW5kIHRoZSBxdWFkIGFuZCBzZWVuIHRocm91Z2ggaXRzIGJhY2tn
cm91bmQuCiAgICAgLy8gVGhlIGFsZ29yaXRobSB3b3JrcyBhcyBmb2xsb3dzOgpAQCAtNTg1LDcg
KzYwMyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRl
cnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAgICAgLy8gUGl4ZWwgY29waWVzIGlu
IHRoaXMgYWxnb3JpdGhtIG9jY3VyIGF0IHN0ZXBzIDIsIDMsIDQsIGFuZCA1LgogCiAgICAgQ0NS
ZW5kZXJTdXJmYWNlKiBkcmF3aW5nU3VyZmFjZSA9IHF1YWQtPmxheWVyKCktPnJlbmRlclN1cmZh
Y2UoKTsKLSAgICBpZiAoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRGaWx0ZXJzKCkuaXNFbXB0
eSgpKQorICAgIGlmIChxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIG9ubHkgYWxsb3cgYmFja2dyb3VuZCBmaWx0
ZXJzIG9uIHRoZSByb290IHJlbmRlciBzdXJmYWNlIGJlY2F1c2Ugb3RoZXIgc3VyZmFjZXMgbWF5
IGNvbnRhaW4KQEAgLTU5MywxNyArNjExLDIxIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAg
ICAgaWYgKCFpc0N1cnJlbnRSZW5kZXJTdXJmYWNlKG1fZGVmYXVsdFJlbmRlclN1cmZhY2UpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VyZmFj
ZURyYXdUcmFuc2Zvcm0gPSBxdWFkLT5pc1JlcGxpY2EoKSA/IGRyYXdpbmdTdXJmYWNlLT5yZXBs
aWNhRHJhd1RyYW5zZm9ybSgpIDogZHJhd2luZ1N1cmZhY2UtPmRyYXdUcmFuc2Zvcm0oKTsKLQog
ICAgIC8vIEZJWE1FOiBEbyBhIHNpbmdsZSByZWFkYmFjayBmb3IgYm90aCB0aGUgc3VyZmFjZSBh
bmQgcmVwbGljYSBhbmQgY2FjaGUgdGhlIGZpbHRlcmVkIHJlc3VsdHMgKG9uY2UgZmlsdGVyIHRl
eHR1cmVzIGFyZSBub3QgcmV1c2VkKS4KLSAgICBJbnRSZWN0IGRldmljZVJlY3QgPSBkcmF3aW5n
U3VyZmFjZS0+cmVhZGJhY2tEZXZpY2VDb250ZW50UmVjdCh0aGlzLCBzdXJmYWNlRHJhd1RyYW5z
Zm9ybSk7CisgICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChDQ01hdGhV
dGlsOjptYXBDbGlwcGVkUmVjdChjb250ZW50c0RldmljZVRyYW5zZm9ybSwgc2hhcmVkR2VvbWV0
cnlRdWFkKCkuYm91bmRpbmdCb3goKSkpOworCisgICAgaW50IHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdDsKKyAgICBxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmdldE91dHNldHModG9wLCByaWdo
dCwgYm90dG9tLCBsZWZ0KTsKKyAgICBkZXZpY2VSZWN0Lm1vdmUoLWxlZnQsIC10b3ApOworICAg
IGRldmljZVJlY3QuZXhwYW5kKGxlZnQgKyByaWdodCwgdG9wICsgYm90dG9tKTsKKwogICAgIGRl
dmljZVJlY3QuaW50ZXJzZWN0KG1fY3VycmVudFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkp
OwogCiAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZSA9
IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIuZ2V0
KCkpOwogICAgIGlmICghZ2V0RnJhbWVidWZmZXJUZXh0dXJlKGRldmljZUJhY2tncm91bmRUZXh0
dXJlLmdldCgpLCBkZXZpY2VSZWN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2tCaXRtYXAg
ZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kID0gZHJhd2luZ1N1cmZhY2UtPmFwcGx5RmlsdGVycyh0
aGlzLCBkcmF3aW5nU3VyZmFjZS0+YmFja2dyb3VuZEZpbHRlcnMoKSwgZGV2aWNlQmFja2dyb3Vu
ZFRleHR1cmUuZ2V0KCkpOworICAgIFNrQml0bWFwIGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZCA9
IGFwcGx5RmlsdGVycyh0aGlzLCBxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLCBkZXZpY2VCYWNr
Z3JvdW5kVGV4dHVyZS5nZXQoKSk7CiAgICAgaWYgKCFmaWx0ZXJlZERldmljZUJhY2tncm91bmQu
Z2V0VGV4dHVyZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTYxMywyOSArNjM1LDE0NCBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IEND
UmVuZGVyU3VyZmFjZURyYXdRdWFkKgogICAgIGlmICghZHJhd2luZ1N1cmZhY2UtPnByZXBhcmVC
YWNrZ3JvdW5kVGV4dHVyZSh0aGlzKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhpcyBt
dXN0IGJlIGNvbXB1dGVkIGJlZm9yZSBzd2l0Y2hpbmcgdGhlIHRhcmdldCByZW5kZXIgc3VyZmFj
ZSB0byB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNv
bnRlbnRzRGV2aWNlVHJhbnNmb3JtID0gZHJhd2luZ1N1cmZhY2UtPmNvbXB1dGVEZXZpY2VUcmFu
c2Zvcm0odGhpcywgc3VyZmFjZURyYXdUcmFuc2Zvcm0pOwotCiAgICAgQ0NSZW5kZXJTdXJmYWNl
KiB0YXJnZXRSZW5kZXJTdXJmYWNlID0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsKLSAgICBpZiAo
dXNlTWFuYWdlZFRleHR1cmUoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRUZXh0dXJlKCksIGRy
YXdpbmdTdXJmYWNlLT5jb250ZW50UmVjdCgpKSkgewotICAgICAgICBkcmF3aW5nU3VyZmFjZS0+
Y29weURldmljZVRvQmFja2dyb3VuZFRleHR1cmUodGhpcywgZmlsdGVyZWREZXZpY2VCYWNrZ3Jv
dW5kVGV4dHVyZUlkLCBkZXZpY2VSZWN0LCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7CisgICAg
aWYgKHVzZU1hbmFnZWRUZXh0dXJlKGRyYXdpbmdTdXJmYWNlLT5iYWNrZ3JvdW5kVGV4dHVyZSgp
LCBxdWFkLT5xdWFkUmVjdCgpKSkgeworICAgICAgICAvLyBDb3B5IHRoZSByZWFkYmFjayBwaXhl
bHMgZnJvbSBkZXZpY2UgdG8gdGhlIGJhY2tncm91bmQgdGV4dHVyZSBmb3IgdGhlIHN1cmZhY2Uu
CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybTsK
KyAgICAgICAgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShxdWFkLT5xdWFkUmVj
dCgpLndpZHRoKCkgLyAyLjAsIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCkgLyAyLjApOworICAg
ICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0uc2NhbGUzZChxdWFkLT5xdWFkUmVjdCgpLndp
ZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIDEpOworICAgICAgICBkZXZpY2VUb1N1
cmZhY2VUcmFuc2Zvcm0gKj0gY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAg
ICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKGRldmljZVJlY3Qud2lkdGgo
KSAvIDIuMCwgZGV2aWNlUmVjdC5oZWlnaHQoKSAvIDIuMCk7CisgICAgICAgIGRldmljZVRvU3Vy
ZmFjZVRyYW5zZm9ybS50cmFuc2xhdGUoZGV2aWNlUmVjdC54KCksIGRldmljZVJlY3QueSgpKTsK
KworICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoZmlsdGVyZWREZXZpY2VCYWNrZ3Jv
dW5kVGV4dHVyZUlkLCBkZXZpY2VSZWN0LnNpemUoKSwgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3Jt
KTsKKwogICAgICAgICB1c2VSZW5kZXJTdXJmYWNlKHRhcmdldFJlbmRlclN1cmZhY2UpOwogICAg
IH0KIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJTdXJmYWNlUXVh
ZChjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCogcXVhZCkKIHsKLSAgICBDQ0xheWVySW1w
bCogbGF5ZXIgPSBxdWFkLT5sYXllcigpOworICAgIC8vIFRoZSByZXBsaWNhIGlzIGFsd2F5cyBk
cmF3biBmaXJzdCwgc28gZnJlZSBhZnRlciBkcmF3aW5nIHRoZSBjb250ZW50cy4KKyAgICBib29s
IHNob3VsZFJlbGVhc2VUZXh0dXJlcyA9ICFxdWFkLT5pc1JlcGxpY2EoKTsKIAotICAgIGRyYXdC
YWNrZ3JvdW5kRmlsdGVycyhxdWFkKTsKKyAgICBDQ1JlbmRlclN1cmZhY2UqIGRyYXdpbmdTdXJm
YWNlID0gcXVhZC0+bGF5ZXIoKS0+cmVuZGVyU3VyZmFjZSgpOwogCi0gICAgbGF5ZXItPnJlbmRl
clN1cmZhY2UoKS0+c2V0U2Npc3NvclJlY3QodGhpcywgcXVhZC0+c3VyZmFjZURhbWFnZVJlY3Qo
KSk7Ci0gICAgaWYgKHF1YWQtPmlzUmVwbGljYSgpKQotICAgICAgICBsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpLT5kcmF3UmVwbGljYSh0aGlzKTsKLSAgICBlbHNlCi0gICAgICAgIGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCktPmRyYXdDb250ZW50cyh0aGlzKTsKLSAgICBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKLSAgICBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cmVuZGVyVHJhbnNmb3JtID0gcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKTsKKyAgICAvLyBBcHBseSBh
IHNjYWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGludGVuZGVk
IHNpemUuCisgICAgcmVuZGVyVHJhbnNmb3JtLnNjYWxlM2QocXVhZC0+cXVhZFJlY3QoKS53aWR0
aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpLCAxKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KHdpbmRv
d01hdHJpeCgpICogcHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyVHJhbnNmb3JtKS50bzJkVHJh
bnNmb3JtKCk7CisKKyAgICAvLyBDYW4gb25seSBkcmF3IHN1cmZhY2UgaWYgZGV2aWNlIG1hdHJp
eCBpcyBpbnZlcnRpYmxlLgorICAgIGlmICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkgfHwgIWRyYXdpbmdTdXJmYWNlLT5oYXNWYWxpZENvbnRlbnRzVGV4dHVyZSgpKSB7
CisgICAgICAgIGlmIChzaG91bGRSZWxlYXNlVGV4dHVyZXMpIHsKKyAgICAgICAgICAgIGRyYXdp
bmdTdXJmYWNlLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKKyAgICAgICAgICAgIGRyYXdp
bmdTdXJmYWNlLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkLCBjb250ZW50
c0RldmljZVRyYW5zZm9ybSk7CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgY2FsbCB3aGVu
IHRoZSBxdWFkJ3Mgc2Npc3NvclJlY3QoKSBpcyBzZXQgY29ycmVjdGx5LgorICAgIGRyYXdpbmdT
dXJmYWNlLT5zZXRTY2lzc29yUmVjdCh0aGlzLCBxdWFkLT5zdXJmYWNlRGFtYWdlUmVjdCgpKTsK
KworICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0
byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCisgICAgLy8gQXBw
bHkgZmlsdGVycyB0byB0aGUgY29udGVudHMgdGV4dHVyZS4KKyAgICBTa0JpdG1hcCBmaWx0ZXJC
aXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywgcXVhZC0+ZmlsdGVycygpLCBkcmF3aW5nU3VyZmFj
ZS0+Y29udGVudHNUZXh0dXJlKCkpOworICAgIGludCBjb250ZW50c1RleHR1cmVJZCA9IGRyYXdp
bmdTdXJmYWNlLT5jb250ZW50c1RleHR1cmUoKS0+dGV4dHVyZUlkKCk7CisgICAgaWYgKGZpbHRl
ckJpdG1hcC5nZXRUZXh0dXJlKCkpIHsKKyAgICAgICAgR3JUZXh0dXJlKiB0ZXh0dXJlID0gcmVp
bnRlcnByZXRfY2FzdDxHclRleHR1cmUqPihmaWx0ZXJCaXRtYXAuZ2V0VGV4dHVyZSgpKTsKKyAg
ICAgICAgY29udGVudHNUZXh0dXJlSWQgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlSGFuZGxlKCk7Cisg
ICAgfQorCisgICAgLy8gRHJhdyB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGlmIHRoZXJlIGlzIG9u
ZS4KKyAgICBpZiAoZHJhd2luZ1N1cmZhY2UtPmhhc1ZhbGlkQmFja2dyb3VuZFRleHR1cmUoKSkK
KyAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGRyYXdpbmdTdXJmYWNlLT5iYWNrZ3Jv
dW5kVGV4dHVyZSgpLT50ZXh0dXJlSWQoKSwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQt
PmxheWVyVHJhbnNmb3JtKCkpOworCisgICAgRmxvYXRRdWFkIGRldmljZVF1YWQgPSBjb250ZW50
c0RldmljZVRyYW5zZm9ybS5tYXBRdWFkKHNoYXJlZEdlb21ldHJ5UXVhZCgpKTsKKyAgICBDQ0xh
eWVyUXVhZCBkZXZpY2VMYXllckJvdW5kcyA9IENDTGF5ZXJRdWFkKEZsb2F0UXVhZChkZXZpY2VR
dWFkLmJvdW5kaW5nQm94KCkpKTsKKyAgICBDQ0xheWVyUXVhZCBkZXZpY2VMYXllckVkZ2VzID0g
Q0NMYXllclF1YWQoZGV2aWNlUXVhZCk7CisKKyAgICAvLyBVc2UgYW50aS1hbGlhc2luZyBwcm9n
cmFtcyBvbmx5IHdoZW4gbmVjZXNzYXJ5LgorICAgIGJvb2wgdXNlQUEgPSAoIWRldmljZVF1YWQu
aXNSZWN0aWxpbmVhcigpIHx8ICFkZXZpY2VRdWFkLmJvdW5kaW5nQm94KCkuaXNFeHByZXNzaWJs
ZUFzSW50UmVjdCgpKTsKKyAgICBpZiAodXNlQUEpIHsKKyAgICAgICAgZGV2aWNlTGF5ZXJCb3Vu
ZHMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7CisgICAgICAgIGRldmljZUxheWVyRWRn
ZXMuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7CisgICAgfQorCisgICAgYm9vbCB1c2VN
YXNrID0gcXVhZC0+bWFza1RleHR1cmVJZCgpOworCisgICAgLy8gRklYTUU6IHVzZSB0aGUgYmFj
a2dyb3VuZFRleHR1cmUgYW5kIGJsZW5kIHRoZSBiYWNrZ3JvdW5kIGluIHdpdGggdGhpcyBkcmF3
IGluc3RlYWQgb2YgaGF2aW5nIGEgc2VwYXJhdGUgY29weSBvZiB0aGUgYmFja2dyb3VuZCB0ZXh0
dXJlLgorCisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOworICAgIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRzVGV4dHVyZUlkKTsKKworICAgIGlu
dCBzaGFkZXJRdWFkTG9jYXRpb24gPSAtMTsKKyAgICBpbnQgc2hhZGVyRWRnZUxvY2F0aW9uID0g
LTE7CisgICAgaW50IHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24gPSAtMTsKKyAgICBpbnQgc2hh
ZGVyTWF0cml4TG9jYXRpb24gPSAtMTsKKyAgICBpbnQgc2hhZGVyQWxwaGFMb2NhdGlvbiA9IC0x
OworICAgIGlmICh1c2VBQSAmJiB1c2VNYXNrKSB7CisgICAgICAgIGNvbnN0IFJlbmRlclN1cmZh
Y2VNYXNrUHJvZ3JhbUFBKiBwcm9ncmFtID0gcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEoKTsK
KyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnBy
b2dyYW0oKSkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisKKyAgICAg
ICAgc2hhZGVyUXVhZExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2Nh
dGlvbigpOworICAgICAgICBzaGFkZXJFZGdlTG9jYXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNo
YWRlcigpLmVkZ2VMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJNYXNrU2FtcGxlckxvY2F0aW9u
ID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxvY2F0aW9uKCk7CisgICAg
ICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4
TG9jYXRpb24oKTsKKyAgICAgICAgc2hhZGVyQWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOworICAgIH0gZWxzZSBpZiAoIXVzZUFBICYmIHVz
ZU1hc2spIHsKKyAgICAgICAgY29uc3QgUmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKiBwcm9ncmFt
ID0gcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKCk7CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKKyAgICAgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5z
YW1wbGVyTG9jYXRpb24oKSwgMCkpOworCisgICAgICAgIHNoYWRlck1hc2tTYW1wbGVyTG9jYXRp
b24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVyTG9jYXRpb24oKTsKKyAg
ICAgICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRy
aXhMb2NhdGlvbigpOworICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgfSBlbHNlIGlmICh1c2VBQSAmJiAh
dXNlTWFzaykgeworICAgICAgICBjb25zdCBSZW5kZXJTdXJmYWNlUHJvZ3JhbUFBKiBwcm9ncmFt
ID0gcmVuZGVyU3VyZmFjZVByb2dyYW1BQSgpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAgICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2Ft
cGxlckxvY2F0aW9uKCksIDApKTsKKworICAgICAgICBzaGFkZXJRdWFkTG9jYXRpb24gPSBwcm9n
cmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCk7CisgICAgICAgIHNoYWRlckVkZ2VM
b2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCk7CisgICAg
ICAgIHNoYWRlck1hdHJpeExvY2F0aW9uID0gcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4
TG9jYXRpb24oKTsKKyAgICAgICAgc2hhZGVyQWxwaGFMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuYWxwaGFMb2NhdGlvbigpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0
IFJlbmRlclN1cmZhY2VQcm9ncmFtKiBwcm9ncmFtID0gcmVuZGVyU3VyZmFjZVByb2dyYW0oKTsK
KyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnBy
b2dyYW0oKSkpOworICAgICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisKKyAgICAg
ICAgc2hhZGVyTWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhM
b2NhdGlvbigpOworICAgICAgICBzaGFkZXJBbHBoYUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CisgICAgfQorCisgICAgaWYgKHNoYWRlck1hc2tT
YW1wbGVyTG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgp
LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSkpOworICAgICAgICBH
TEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0xaShzaGFkZXJNYXNrU2FtcGxlckxvY2F0
aW9uLCAxKSk7CisgICAgICAgIGNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIHF1YWQtPm1hc2tUZXh0dXJlSWQoKSk7CisgICAgICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyRWRnZUxvY2F0aW9uICE9IC0xKSB7CisgICAg
ICAgIGZsb2F0IGVkZ2VbMjRdOworICAgICAgICBkZXZpY2VMYXllckVkZ2VzLnRvRmxvYXRBcnJh
eShlZGdlKTsKKyAgICAgICAgZGV2aWNlTGF5ZXJCb3VuZHMudG9GbG9hdEFycmF5KCZlZGdlWzEy
XSk7CisgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTNmdihzaGFkZXJF
ZGdlTG9jYXRpb24sIDgsIGVkZ2UpKTsKKyAgICB9CisKKyAgICAvLyBNYXAgZGV2aWNlIHNwYWNl
IHF1YWQgdG8gc3VyZmFjZSBzcGFjZS4KKyAgICBGbG9hdFF1YWQgc3VyZmFjZVF1YWQgPSBjb250
ZW50c0RldmljZVRyYW5zZm9ybS5pbnZlcnNlKCkubWFwUXVhZChkZXZpY2VMYXllckVkZ2VzLmZs
b2F0UXVhZCgpKTsKKworICAgIGRyYXdUZXh0dXJlZFF1YWQocXVhZC0+bGF5ZXJUcmFuc2Zvcm0o
KSwgcXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpLCBx
dWFkLT5vcGFjaXR5KCksIHN1cmZhY2VRdWFkLAorICAgICAgICAgICAgICAgICAgICAgc2hhZGVy
TWF0cml4TG9jYXRpb24sIHNoYWRlckFscGhhTG9jYXRpb24sIHNoYWRlclF1YWRMb2NhdGlvbik7
CisKKyAgICBpZiAoc2hvdWxkUmVsZWFzZVRleHR1cmVzKSB7CisgICAgICAgIGRyYXdpbmdTdXJm
YWNlLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKKyAgICAgICAgZHJhd2luZ1N1cmZhY2Ut
PnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKKyAgICB9CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQq
IHF1YWQpCkBAIC0xMDk2LDYgKzEyMzMsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZmluaXNoRHJhd2luZ0ZyYW1lKCkKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKIAorICAgIG1f
cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOworCiAg
ICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9j
YXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7CiAgICAgc2l6ZV90IHJlY2xhaW1MaW1pdCA9
IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSk7CiAgICAg
c2l6ZV90IHByZWZlcnJlZExpbWl0ID0gcmVjbGFpbUxpbWl0ID4gY29udGVudHNNZW1vcnlVc2VC
eXRlcyA/IHJlY2xhaW1MaW1pdCAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgOiAwOwpAQCAtMTE1
OSw2ICsxMjk4LDI1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZWRR
dWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0CiAgICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywg
NiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKSk7CiB9CiAKK3ZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoaW50IHRleHR1cmVJ
ZCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJh
d01hdHJpeCkKK3sKKyAgICBjb25zdCBSZW5kZXJTdXJmYWNlUHJvZ3JhbSogcHJvZ3JhbSA9IHJl
bmRlclN1cmZhY2VQcm9ncmFtKCk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmFj
dGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgdGV4dHVyZUlkKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6TElORUFSKSk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAg
R0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0
KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CisgICAgR0xDKGNvbnRleHQoKSwg
Y29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9j
YXRpb24oKSwgMCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoZHJhd01hdHJpeCwgYm91bmRzLndp
ZHRoKCksIGJvdW5kcy5oZWlnaHQoKSwgMSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRy
aXhMb2NhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtMSk7Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpm
aW5pc2goKQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlz
aCIsIHRoaXMsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAxYTJl
YmVkMGU4NmI5OWY1ODE5NjgzMWJjZWNlNDYzMDE0NzJjOTU5Li44MWVlMWE3YjUxYjc1MGQ1MzI0
Mjc4ZGFjMTJjYjI4NTZmNmMzNWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aApAQCAtMTM1LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWQo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBGbG9hdFF1YWQmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0cml4TG9jYXRp
b24sIGludCBhbHBoYUxvY2F0aW9uLCBpbnQgcXVhZExvY2F0aW9uKTsKKyAgICB2b2lkIGNvcHlU
ZXh0dXJlVG9GcmFtZWJ1ZmZlcihpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBib3VuZHMs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKIAogcHJvdGVjdGVkOgog
ICAgIGZyaWVuZCBjbGFzcyBMYXllclJlbmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRD
YWxsYmFja0FkYXB0ZXI7CkBAIC0xNTMsNyArMTU0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRy
YXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VS
ZWN0KTsKICAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJk
RHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhj
b25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBkZXZpY2VUcmFuc2Zvcm0pOwogICAgIHZvaWQgZHJhd1JlbmRlclN1cmZhY2VRdWFkKGNvbnN0
IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3U29saWRDb2xvclF1YWQo
Y29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdUZXh0dXJlUXVhZChj
b25zdCBDQ1RleHR1cmVEcmF3UXVhZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCmluZGV4IDZk
ODA2ODRmNjY0ZjAyNWRmNTM2YTcwZWVkZmQ0NDViZmI4MzQ0ZjQuLjY5ZGU5MDQ3MjQ4ZjgzYzg5
ODMwYzgwYjBmYjkxMjRjYWJjZTQ5MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKQEAgLTE2
OSw5ICsxNjksMTAgQEAgdm9pZCBDQ0xheWVySW1wbDo6YXBwZW5kRGVidWdCb3JkZXJRdWFkKEND
UXVhZEN1bGxlciYgcXVhZExpc3QsIGNvbnN0IENDU2hhcmVkUXUKICAgICBxdWFkTGlzdC5hcHBl
bmQoQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBsYXllclJl
Y3QsIGRlYnVnQm9yZGVyQ29sb3IoKSwgZGVidWdCb3JkZXJXaWR0aCgpKSk7CiB9CiAKLXZvaWQg
Q0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKikK
K3Vuc2lnbmVkIENDTGF5ZXJJbXBsOjpjb250ZW50c1RleHR1cmVJZCgpIGNvbnN0CiB7CiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgQ0NMYXllcklt
cGw6OnNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgc2Nyb2xsKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgK
aW5kZXggYmI3NWE4OWViYWQzZjVhYWEzOTg1MmQ0NGQ5ODRhODIxMTliOTZmMC4uODg0YzEyOWFk
YWEwOGYwNWNiZDQ0MzhjNzk3MWI0ZTA3ZDVmNzdkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCkBA
IC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdygpOwogICAg
IHZvaWQgYXBwZW5kRGVidWdCb3JkZXJRdWFkKENDUXVhZEN1bGxlciYsIGNvbnN0IENDU2hhcmVk
UXVhZFN0YXRlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYmluZENvbnRlbnRzVGV4dHVy
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNvbnRlbnRz
VGV4dHVyZUlkKCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBsYXllciBo
YXMgY29udGVudCB0byBkcmF3LgogICAgIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXggMmEwZjcxODAzOTIy
MjZmNWU0YTI4MDc5MjhhZjU3ZjQ1NmVhZjY4OC4uZTRlZTNlZGMxYTc4ZTNmMDgwMWU5OGVlOWNj
YzU1MTUxODRlNTE4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwCkBAIC00NzUsMTEgKzQ3NSw4IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zv
cm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAgICAg
IGxheWVyLT5zZXRVc2VzTGF5ZXJDbGlwcGluZyhmYWxzZSk7CiAgICAgICAgIGxheWVyLT5zZXRD
bGlwUmVjdChJbnRSZWN0KCkpOwogCi0gICAgICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpIHsK
LSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcihsYXllci0+bWFza0xheWVy
KCkpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQogICAgICAgICAgICAgbGF5ZXIt
Pm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldE1hc2tMYXllcigwKTsK
IAogICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+bWFza0xheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1h
c2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUXVhZEN1bGxlci5jcHAKaW5kZXggMzY0NjI0ODY2MjQ1NjY5MGI1YmZiY2UyYTljOGMxZWIz
NTg3NDhiNy4uZTViNDVlOTEzMTFjNDJmNjE4NjE3NDYwOTZkN2VjOTg1YjJiMjcyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCkBAIC04OSwxMSArODksNSBAQCBib29sIENDUXVhZEN1bGxl
cjo6YXBwZW5kU3VyZmFjZShQYXNzT3duUHRyPENDRHJhd1F1YWQ+IHBhc3NEcmF3UXVhZCkKICAg
ICByZXR1cm4gYXBwZW5kUXVhZEludGVybmFsKHBhc3NEcmF3UXVhZCwgY3VsbGVkUmVjdCwgbV9x
dWFkTGlzdCwgKm1fb2NjbHVzaW9uVHJhY2tlciwgbV9zaG93Q3VsbGluZ1dpdGhEZWJ1Z0JvcmRl
clF1YWRzKTsKIH0KIAotYm9vbCBDQ1F1YWRDdWxsZXI6OmFwcGVuZFJlcGxpY2EoUGFzc093blB0
cjxDQ0RyYXdRdWFkPiBwYXNzRHJhd1F1YWQpCi17Ci0gICAgSW50UmVjdCBjdWxsZWRSZWN0ID0g
bV9vY2NsdXNpb25UcmFja2VyLT51bm9jY2x1ZGVkQ29udHJpYnV0aW5nU3VyZmFjZUNvbnRlbnRS
ZWN0KG1fbGF5ZXItPnJlbmRlclN1cmZhY2UoKSwgdHJ1ZSwgcGFzc0RyYXdRdWFkLT5xdWFkUmVj
dCgpKTsKLSAgICByZXR1cm4gYXBwZW5kUXVhZEludGVybmFsKHBhc3NEcmF3UXVhZCwgY3VsbGVk
UmVjdCwgbV9xdWFkTGlzdCwgKm1fb2NjbHVzaW9uVHJhY2tlciwgbV9zaG93Q3VsbGluZ1dpdGhE
ZWJ1Z0JvcmRlclF1YWRzKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmIC8v
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgKaW5kZXgg
MmQyZDgwMTY2M2U2ZjA2MTM4MzUzZjJjNTY1ZGE3ZDA5MGQyM2I3Yi4uMjk5OWI2YWQ1YWY4NDQ1
NTQyNzRkNDRlMWI5NDVmNjc5ODdlNWY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgKQEAgLTQx
LDcgKzQxLDYgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVhZCBpcyBh
ZGRlZCB0byB0aGUgbGlzdCwgYW5kIGZhbHNlIGlmIHRoZSBxdWFkIGlzIGVudGlyZWx5IGN1bGxl
ZC4KICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kKFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4gcGFzc0Ry
YXdRdWFkKTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwZW5kU3VyZmFjZShQYXNzT3duUHRyPENDRHJh
d1F1YWQ+IHBhc3NEcmF3UXVhZCk7Ci0gICAgdmlydHVhbCBib29sIGFwcGVuZFJlcGxpY2EoUGFz
c093blB0cjxDQ0RyYXdRdWFkPiBwYXNzRHJhd1F1YWQpOwogCiBwcml2YXRlOgogICAgIENDUXVh
ZExpc3QmIG1fcXVhZExpc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAppbmRleCA4NDg3MzBh
MmM3YjYwYjc2MjM4OTlmZDdmOWI0MTMzMGEyZTk3Y2I3Li4zNTE4NjYwN2Y1NWU1NGQzMDY5ZTA0
ZjhjN2JhZDY3ODRhMTA4YWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKQEAgLTI4LDI1
ICsyOCwxMyBAQAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgogCiAjaW5jbHVkZSAiQ29s
b3IuaCIKLSNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKLSNpbmNsdWRlICJjYy9DQ0Rl
YnVnQm9yZGVyRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDUXVhZEN1bGxlci5oIgotI2luY2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZURyYXdR
dWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NTaGFyZWRRdWFkU3RhdGUuaCIKICNpbmNsdWRlICJjYy9D
Q1NvbGlkQ29sb3JEcmF3UXVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBj
b25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGggPSAyOwotc3RhdGljIGNvbnN0IGludCBk
ZWJ1Z1N1cmZhY2VCb3JkZXJBbHBoYSA9IDEwMDsKLXN0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJm
YWNlQm9yZGVyQ29sb3JSZWQgPSAwOwotc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3Jk
ZXJDb2xvckdyZWVuID0gMDsKLXN0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyQ29s
b3JCbHVlID0gMjU1Owotc3RhdGljIGNvbnN0IGludCBkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvclJl
ZCA9IDE2MDsKLXN0YXRpYyBjb25zdCBpbnQgZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JHcmVlbiA9
IDA7Ci1zdGF0aWMgY29uc3QgaW50IGRlYnVnUmVwbGljYUJvcmRlckNvbG9yQmx1ZSA9IDI1NTsK
LQogUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IENDUmVuZGVyUGFzczo6Y3JlYXRlKENDUmVuZGVy
U3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVu
ZGVyUGFzcyh0YXJnZXRTdXJmYWNlKSk7CkBAIC03NSwyNiArNjMsMjAgQEAgdm9pZCBDQ1JlbmRl
clBhc3M6OmFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVyKENDTGF5ZXJJbXBsKiBsYXll
ciwgQ0NPY2NsdXMKICAgICBDQ1F1YWRDdWxsZXIgcXVhZEN1bGxlcihtX3F1YWRMaXN0LCBsYXll
ciwgb2NjbHVzaW9uVHJhY2tlciwgbGF5ZXItPmhhc0RlYnVnQm9yZGVycygpKTsKIAogICAgIEND
UmVuZGVyU3VyZmFjZSogc3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisKICAgICBP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNyZWF0
ZVNoYXJlZFF1YWRTdGF0ZSgpOwotICAgIGlmIChsYXllci0+aGFzRGVidWdCb3JkZXJzKCkpIHsK
LSAgICAgICAgQ29sb3IgY29sb3IoZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JSZWQsIGRlYnVnU3Vy
ZmFjZUJvcmRlckNvbG9yR3JlZW4sIGRlYnVnU3VyZmFjZUJvcmRlckNvbG9yQmx1ZSwgZGVidWdT
dXJmYWNlQm9yZGVyQWxwaGEpOwotICAgICAgICBxdWFkQ3VsbGVyLmFwcGVuZFN1cmZhY2UoQ0NE
ZWJ1Z0JvcmRlckRyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBzdXJmYWNl
LT5jb250ZW50UmVjdCgpLCBjb2xvciwgZGVidWdTdXJmYWNlQm9yZGVyV2lkdGgpKTsKLSAgICB9
CiAgICAgYm9vbCBpc1JlcGxpY2EgPSBmYWxzZTsKLSAgICBxdWFkQ3VsbGVyLmFwcGVuZFN1cmZh
Y2UoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCks
IHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCgpLCBpc1Jl
cGxpY2EpKTsKKyAgICBzdXJmYWNlLT5hcHBlbmRRdWFkcyhxdWFkQ3VsbGVyLCBzaGFyZWRRdWFk
U3RhdGUuZ2V0KCksIGlzUmVwbGljYSwgc3VyZmFjZURhbWFnZVJlY3QoKSk7CiAgICAgbV9zaGFy
ZWRRdWFkU3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKIAorICAg
IGlmICghc3VyZmFjZS0+aGFzUmVwbGljYSgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBB
ZGQgcmVwbGljYSBhZnRlciB0aGUgc3VyZmFjZSBzbyB0aGF0IGl0IGFwcGVhcnMgYmVsb3cgdGhl
IHN1cmZhY2UuCi0gICAgaWYgKHN1cmZhY2UtPmhhc1JlcGxpY2EoKSkgewotICAgICAgICBPd25Q
dHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHN1cmZhY2UtPmNyZWF0ZVJl
cGxpY2FTaGFyZWRRdWFkU3RhdGUoKTsKLSAgICAgICAgaWYgKGxheWVyLT5oYXNEZWJ1Z0JvcmRl
cnMoKSkgewotICAgICAgICAgICAgQ29sb3IgY29sb3IoZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JS
ZWQsIGRlYnVnUmVwbGljYUJvcmRlckNvbG9yR3JlZW4sIGRlYnVnUmVwbGljYUJvcmRlckNvbG9y
Qmx1ZSwgZGVidWdTdXJmYWNlQm9yZGVyQWxwaGEpOwotICAgICAgICAgICAgcXVhZEN1bGxlci5h
cHBlbmRSZXBsaWNhKENDRGVidWdCb3JkZXJEcmF3UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0
ZS5nZXQoKSwgc3VyZmFjZS0+Y29udGVudFJlY3QoKSwgY29sb3IsIGRlYnVnU3VyZmFjZUJvcmRl
cldpZHRoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBpc1JlcGxpY2EgPSB0cnVlOwotICAg
ICAgICBxdWFkQ3VsbGVyLmFwcGVuZFJlcGxpY2EoQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQ6OmNy
ZWF0ZShzaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIGxheWVy
LCBzdXJmYWNlRGFtYWdlUmVjdCgpLCBpc1JlcGxpY2EpKTsKLSAgICAgICAgbV9zaGFyZWRRdWFk
U3RhdGVMaXN0LmFwcGVuZChzaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsKLSAgICB9CisgICAg
T3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiByZXBsaWNhU2hhcmVkUXVhZFN0YXRlID0gc3VyZmFj
ZS0+Y3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpOworICAgIGlzUmVwbGljYSA9IHRydWU7
CisgICAgc3VyZmFjZS0+YXBwZW5kUXVhZHMocXVhZEN1bGxlciwgcmVwbGljYVNoYXJlZFF1YWRT
dGF0ZS5nZXQoKSwgaXNSZXBsaWNhLCBzdXJmYWNlRGFtYWdlUmVjdCgpKTsKKyAgICBtX3NoYXJl
ZFF1YWRTdGF0ZUxpc3QuYXBwZW5kKHJlcGxpY2FTaGFyZWRRdWFkU3RhdGUucmVsZWFzZSgpKTsK
IH0KIAogdm9pZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzVG9GaWxsU2NyZWVuKENDTGF5ZXJJ
bXBsKiByb290TGF5ZXIsIGNvbnN0IENvbG9yJiBzY3JlZW5CYWNrZ3JvdW5kQ29sb3IsIGNvbnN0
IENDT2NjbHVzaW9uVHJhY2tlckltcGwmIG9jY2x1c2lvblRyYWNrZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlLmNwcAppbmRleCAyNmM0NjdhYjQwMzNkZDJjYjFkMjM4YjJiYzFiZjc5MzVh
ZDA5YmEwLi45NDNjNTNmYmYwODI3ZTEyNmE3YjYyZWUxOGQ4NmJmM2QyOGY1NzhjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTI5LDI3ICsyOSwzMiBAQAogCiAjaW5jbHVk
ZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAKLSNpbmNsdWRlICJHZW9tZXRyeUJpbmRpbmcuaCIK
LSNpbmNsdWRlICJHclRleHR1cmUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotI2luY2x1ZGUgIlNoYXJlZEdyYXBo
aWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgImNjL0ND
RGFtYWdlVHJhY2tlci5oIgorI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgotI2lu
Y2x1ZGUgImNjL0NDUmVuZGVyU3VyZmFjZUZpbHRlcnMuaCIKKyNpbmNsdWRlICJjYy9DQ1F1YWRD
dWxsZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNl
Qm9yZGVyV2lkdGggPSAyOworc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJBbHBo
YSA9IDEwMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JSZWQgPSAw
Oworc3RhdGljIGNvbnN0IGludCBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckdyZWVuID0gMDsKK3N0
YXRpYyBjb25zdCBpbnQgZGVidWdTdXJmYWNlQm9yZGVyQ29sb3JCbHVlID0gMjU1Oworc3RhdGlj
IGNvbnN0IGludCBkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvclJlZCA9IDE2MDsKK3N0YXRpYyBjb25z
dCBpbnQgZGVidWdSZXBsaWNhQm9yZGVyQ29sb3JHcmVlbiA9IDA7CitzdGF0aWMgY29uc3QgaW50
IGRlYnVnUmVwbGljYUJvcmRlckNvbG9yQmx1ZSA9IDI1NTsKKwogQ0NSZW5kZXJTdXJmYWNlOjpD
Q1JlbmRlclN1cmZhY2UoQ0NMYXllckltcGwqIG93bmluZ0xheWVyKQogICAgIDogbV9vd25pbmdM
YXllcihvd25pbmdMYXllcikKLSAgICAsIG1fbWFza0xheWVyKDApCi0gICAgLCBtX3NraXBzRHJh
dyhmYWxzZSkKICAgICAsIG1fc3VyZmFjZVByb3BlcnR5Q2hhbmdlZChmYWxzZSkKICAgICAsIG1f
ZHJhd09wYWNpdHkoMSkKICAgICAsIG1fZHJhd09wYWNpdHlJc0FuaW1hdGluZyhmYWxzZSkKQEAg
LTc5LDcgKzg0LDYgQEAgRmxvYXRSZWN0IENDUmVuZGVyU3VyZmFjZTo6ZHJhd2FibGVDb250ZW50
UmVjdCgpIGNvbnN0CiAKIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQ29udGVudHNUZXh0
dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKIHsKLSAgICBJbnRTaXpl
IHJlcXVpcmVkU2l6ZShtX2NvbnRlbnRSZWN0LnNpemUoKSk7CiAgICAgVGV4dHVyZU1hbmFnZXIq
IHRleHR1cmVNYW5hZ2VyID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5h
Z2VyKCk7CiAKICAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlKQpAQCAtODgsMjUgKzkyLDI2IEBA
IGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVy
ZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlCiAgICAgaWYgKG1fY29udGVudHNUZXh0dXJlLT5pc1Jl
c2VydmVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4
dHVyZS0+cmVzZXJ2ZShyZXF1aXJlZFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkgewot
ICAgICAgICBtX3NraXBzRHJhdyA9IHRydWU7CisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+
cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCi0gICAgbV9za2lwc0RyYXcgPSBmYWxzZTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250
ZW50c1RleHR1cmUoKQogewotICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV9jb250ZW50c1RleHR1
cmUpCisgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSB8fCAhbV9jb250ZW50c1RleHR1cmUtPmlz
UmVzZXJ2ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGVudHNUZXh0dXJlLT51bnJl
c2VydmUoKTsKIH0KIAorYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhhc1ZhbGlkQ29udGVudHNUZXh0
dXJlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZW50c1RleHR1cmUgJiYgbV9jb250ZW50
c1RleHR1cmUtPmlzUmVzZXJ2ZWQoKSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNWYWxpZChtX2Nv
bnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOworfQorCiBib29sIEND
UmVuZGVyU3VyZmFjZTo6cHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbGF5ZXJSZW5kZXJlcikKIHsKLSAgICBJbnRTaXplIHJlcXVpcmVkU2l6ZShtX2NvbnRl
bnRSZWN0LnNpemUoKSk7CiAgICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gbGF5
ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyKCk7CiAKICAgICBpZiAoIW1f
YmFja2dyb3VuZFRleHR1cmUpCkBAIC0xMTUsNyArMTIwLDcgQEAgYm9vbCBDQ1JlbmRlclN1cmZh
Y2U6OnByZXBhcmVCYWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGUKICAgICBpZiAobV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZS0+cmVzZXJ2ZShy
ZXF1aXJlZFNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICBpZiAoIW1fYmFja2dy
b3VuZFRleHR1cmUtPnJlc2VydmUobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMjMsODkgKzEyOCwxNCBAQCBib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUJhY2tncm91
bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZQogCiB2b2lkIENDUmVu
ZGVyU3VyZmFjZTo6cmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCkKIHsKLSAgICBpZiAoIW1fYmFj
a2dyb3VuZFRleHR1cmUpCisgICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlIHx8ICFtX2JhY2tn
cm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2JhY2tn
cm91bmRUZXh0dXJlLT51bnJlc2VydmUoKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NS
ZW5kZXJTdXJmYWNlOjpjb21wdXRlRGV2aWNlVHJhbnNmb3JtKExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zv
cm0pIGNvbnN0Ci17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyVHJhbnNmb3JtID0g
ZHJhd1RyYW5zZm9ybTsKLSAgICAvLyBBcHBseSBhIHNjYWxpbmcgZmFjdG9yIHRvIHNpemUgdGhl
IHF1YWQgZnJvbSAxeDEgdG8gaXRzIGludGVuZGVkIHNpemUuCi0gICAgcmVuZGVyVHJhbnNmb3Jt
LnNjYWxlM2QobV9jb250ZW50UmVjdC53aWR0aCgpLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgpLCAx
KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChsYXllclJlbmRlcmVyLT53aW5kb3dNYXRyaXgoKSAqIGxheWVyUmVuZGVyZXIt
PnByb2plY3Rpb25NYXRyaXgoKSAqIHJlbmRlclRyYW5zZm9ybSkudG8yZFRyYW5zZm9ybSgpOwot
ICAgIHJldHVybiBkZXZpY2VUcmFuc2Zvcm07Ci19Ci0KLUludFJlY3QgQ0NSZW5kZXJTdXJmYWNl
Ojpjb21wdXRlRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3QK
LXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9ybSA9IGNv
bXB1dGVEZXZpY2VUcmFuc2Zvcm0obGF5ZXJSZW5kZXJlciwgZHJhd1RyYW5zZm9ybSk7Ci0KLSAg
ICAvLyBDYW4gb25seSBkcmF3IHN1cmZhY2UgaWYgZGV2aWNlIG1hdHJpeCBpcyBpbnZlcnRpYmxl
LgotICAgIGlmICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBGbG9hdFF1YWQgZGV2aWNlUXVhZCA9IGNvbnRl
bnRzRGV2aWNlVHJhbnNmb3JtLm1hcFF1YWQobGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlR
dWFkKCkpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGRldmljZVF1YWQuYm91bmRpbmdC
b3goKSk7Ci19Ci0KLUludFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpjb21wdXRlUmVhZGJhY2tEZXZp
Y2VCb3VuZGluZ0JveChMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdAotewotICAgIEludFJl
Y3QgZGV2aWNlUmVjdCA9IGNvbXB1dGVEZXZpY2VCb3VuZGluZ0JveChsYXllclJlbmRlcmVyLCBk
cmF3VHJhbnNmb3JtKTsKLQotICAgIGlmIChtX2JhY2tncm91bmRGaWx0ZXJzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGRldmljZVJlY3Q7Ci0KLSAgICBpbnQgdG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0OwotICAgIG1fYmFja2dyb3VuZEZpbHRlcnMuZ2V0T3V0c2V0cyh0b3AsIHJpZ2h0LCBi
b3R0b20sIGxlZnQpOwotICAgIGRldmljZVJlY3QubW92ZSgtbGVmdCwgLXRvcCk7Ci0gICAgZGV2
aWNlUmVjdC5leHBhbmQobGVmdCArIHJpZ2h0LCB0b3AgKyBib3R0b20pOwotCi0gICAgcmV0dXJu
IGRldmljZVJlY3Q7Ci19Ci0KLUludFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpyZWFkYmFja0Rldmlj
ZUNvbnRlbnRSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGNvbXB1dGVSZWFkYmFja0RldmljZUJvdW5kaW5nQm94KGxheWVyUmVuZGVyZXIsIGRyYXdUcmFu
c2Zvcm0pOwotfQotCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6Y29weVRleHR1cmVUb0ZyYW1lYnVm
ZmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgaW50IHRleHR1cmVJZCwg
Y29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01h
dHJpeCkKK2Jvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkg
Y29uc3QKIHsKLSAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1cmZhY2VQ
cm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVByb2dyYW0oKTsK
LQotICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXItPmNvbnRl
eHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBH
TEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKLSAg
ICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCkt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsK
LSAgICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0
KCktPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
KTsKLQotICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVuZGVyZXItPmNv
bnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKLSAgICBHTEMobGF5ZXJS
ZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5jb250ZXh0KCktPnVuaWZvcm0xaShw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLnNhbXBsZXJMb2NhdGlvbigpLCAwKSk7Ci0gICAgbGF5
ZXJSZW5kZXJlci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3TWF0cml4LCBib3VuZHMud2lkdGgoKSwg
Ym91bmRzLmhlaWdodCgpLCAxLCBsYXllclJlbmRlcmVyLT5zaGFyZWRHZW9tZXRyeVF1YWQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLm1hdHJpeExvY2F0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6
OmNvcHlEZXZpY2VUb0JhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlciwgaW50IGRldmljZUJhY2tncm91bmRUZXh0dXJlSWQsIGNvbnN0IEludFJlY3Qm
IGRldmljZVRleHR1cmVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJh
bnNmb3JtKSBjb25zdAotewotICAgIEFTU0VSVCghbV9iYWNrZ3JvdW5kRmlsdGVycy5pc0VtcHR5
KCkpOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3Jt
OwotICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS50cmFuc2xhdGUobV9jb250ZW50UmVjdC53
aWR0aCgpIC8gMi4wLCBtX2NvbnRlbnRSZWN0LmhlaWdodCgpIC8gMi4wKTsKLSAgICBkZXZpY2VU
b1N1cmZhY2VUcmFuc2Zvcm0uc2NhbGUzZChtX2NvbnRlbnRSZWN0LndpZHRoKCksIG1fY29udGVu
dFJlY3QuaGVpZ2h0KCksIDEpOwotICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybSAqPSBkZXZp
Y2VUcmFuc2Zvcm0uaW52ZXJzZSgpOwotICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS50cmFu
c2xhdGUoZGV2aWNlVGV4dHVyZVJlY3Qud2lkdGgoKSAvIDIuMCwgZGV2aWNlVGV4dHVyZVJlY3Qu
aGVpZ2h0KCkgLyAyLjApOwotICAgIGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS50cmFuc2xhdGUo
ZGV2aWNlVGV4dHVyZVJlY3QueCgpLCBkZXZpY2VUZXh0dXJlUmVjdC55KCkpOwotCi0gICAgY29w
eVRleHR1cmVUb0ZyYW1lYnVmZmVyKGxheWVyUmVuZGVyZXIsIGRldmljZUJhY2tncm91bmRUZXh0
dXJlSWQsIGRldmljZVRleHR1cmVSZWN0LnNpemUoKSwgZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3Jt
KTsKLX0KLQotaW5saW5lIHN0YXRpYyBpbnQgZ2V0U2tCaXRtYXBUZXh0dXJlSWQoY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgaW50IGZhbGxiYWNrKQotewotICAgIGlmICghYml0bWFwLmdldFRleHR1
cmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbGxiYWNrOwotICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oYml0bWFwLmdldFRleHR1cmUoKSk7Ci0gICAg
cmV0dXJuIHRleHR1cmUtPmdldFRleHR1cmVIYW5kbGUoKTsKKyAgICByZXR1cm4gbV9iYWNrZ3Jv
dW5kVGV4dHVyZSAmJiBtX2JhY2tncm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9iYWNr
Z3JvdW5kVGV4dHVyZS0+aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpOwogfQogCiB2b2lkIENDUmVuZGVyU3VyZmFjZTo6c2V0U2Npc3NvclJlY3Qo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIHN1
cmZhY2VEYW1hZ2VSZWN0KSBjb25zdApAQCAtMjIyLDEzOSArMTUyLDYgQEAgdm9pZCBDQ1JlbmRl
clN1cmZhY2U6OnNldFNjaXNzb3JSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5k
ZXJlciwgY29uc3QKICAgICAgICAgR0xDKGxheWVyUmVuZGVyZXItPmNvbnRleHQoKSwgbGF5ZXJS
ZW5kZXJlci0+Y29udGV4dCgpLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpKTsKIH0KIAotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdDb250ZW50cyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi17Ci0gICAgaWYgKG1fc2tpcHNEcmF3IHx8ICFt
X2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IENhY2hl
IHRoaXMgdmFsdWUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0IGZvciBib3RoIHRoZSBz
dXJmYWNlIGFuZCBpdHMgcmVwbGljYS4KLSAgICAvLyBBcHBseSBmaWx0ZXJzIHRvIHRoZSBjb250
ZW50cyB0ZXh0dXJlLgotICAgIFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFwcGx5RmlsdGVycyhs
YXllclJlbmRlcmVyLCBtX2ZpbHRlcnMsIG1fY29udGVudHNUZXh0dXJlLmdldCgpKTsKLQotICAg
IGludCBjb250ZW50c1RleHR1cmVJZCA9IGdldFNrQml0bWFwVGV4dHVyZUlkKGZpbHRlckJpdG1h
cCwgbV9jb250ZW50c1RleHR1cmUtPnRleHR1cmVJZCgpKTsKLSAgICBkcmF3TGF5ZXIobGF5ZXJS
ZW5kZXJlciwgbV9tYXNrTGF5ZXIsIG1fZHJhd1RyYW5zZm9ybSwgY29udGVudHNUZXh0dXJlSWQp
OwotfQotCi12b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhd1JlcGxpY2EoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIEFTU0VSVChoYXNSZXBsaWNhKCkpOwotICAg
IGlmICghaGFzUmVwbGljYSgpIHx8IG1fc2tpcHNEcmF3IHx8ICFtX2NvbnRlbnRzVGV4dHVyZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMg
dGV4dHVyZS4KLSAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnMobGF5ZXJS
ZW5kZXJlciwgbV9maWx0ZXJzLCBtX2NvbnRlbnRzVGV4dHVyZS5nZXQoKSk7Ci0KLSAgICAvLyBG
SVhNRTogQnkgdXNpbmcgdGhlIHNhbWUgUmVuZGVyU3VyZmFjZSBmb3IgYm90aCB0aGUgY29udGVu
dCBhbmQgaXRzIHJlZmxlY3Rpb24sCi0gICAgLy8gaXQncyBjdXJyZW50bHkgbm90IHBvc3NpYmxl
IHRvIGFwcGx5IGEgc2VwYXJhdGUgbWFzayB0byB0aGUgcmVmbGVjdGlvbiBsYXllcgotICAgIC8v
IG9yIGNvcnJlY3RseSBoYW5kbGUgb3BhY2l0eSBpbiByZWZsZWN0aW9ucyAob3BhY2l0eSBtdXN0
IGJlIGFwcGxpZWQgYWZ0ZXIgZHJhd2luZwotICAgIC8vIGJvdGggdGhlIGxheWVyIGFuZCBpdHMg
cmVmbGVjdGlvbikuIFRoZSBzb2x1dGlvbiBpcyB0byBpbnRyb2R1Y2UgeWV0IGFub3RoZXIgUmVu
ZGVyU3VyZmFjZQotICAgIC8vIHRvIGRyYXcgdGhlIGxheWVyIGFuZCBpdHMgcmVmbGVjdGlvbiBp
bi4gRm9yIG5vdyB3ZSBvbmx5IGFwcGx5IGEgc2VwYXJhdGUgcmVmbGVjdGlvbgotICAgIC8vIG1h
c2sgaWYgdGhlIGNvbnRlbnRzIGRvbid0IGhhdmUgYSBtYXNrIG9mIHRoZWlyIG93bi4KLSAgICBD
Q0xheWVySW1wbCogcmVwbGljYU1hc2tMYXllciA9IG1fbWFza0xheWVyOwotICAgIGlmICghbV9t
YXNrTGF5ZXIgJiYgbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAgICAgIHJlcGxp
Y2FNYXNrTGF5ZXIgPSBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCk7
Ci0KLSAgICBpbnQgY29udGVudHNUZXh0dXJlSWQgPSBnZXRTa0JpdG1hcFRleHR1cmVJZChmaWx0
ZXJCaXRtYXAsIG1fY29udGVudHNUZXh0dXJlLT50ZXh0dXJlSWQoKSk7Ci0gICAgZHJhd0xheWVy
KGxheWVyUmVuZGVyZXIsIHJlcGxpY2FNYXNrTGF5ZXIsIG1fcmVwbGljYURyYXdUcmFuc2Zvcm0s
IGNvbnRlbnRzVGV4dHVyZUlkKTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdMYXll
cihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIENDTGF5ZXJJbXBsKiBtYXNr
TGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBpbnQgY29u
dGVudHNUZXh0dXJlSWQpCi17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlTWF0cml4
ID0gY29tcHV0ZURldmljZVRyYW5zZm9ybShsYXllclJlbmRlcmVyLCBkcmF3VHJhbnNmb3JtKTsK
LQotICAgIC8vIENhbiBvbmx5IGRyYXcgc3VyZmFjZSBpZiBkZXZpY2UgbWF0cml4IGlzIGludmVy
dGlibGUuCi0gICAgaWYgKCFkZXZpY2VNYXRyaXguaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgdGV4dHVyZSBpZiB0aGVyZSBpcyBv
bmUuCi0gICAgaWYgKG1fYmFja2dyb3VuZFRleHR1cmUgJiYgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+
aXNSZXNlcnZlZCgpKQotICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIobGF5ZXJSZW5k
ZXJlciwgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+dGV4dHVyZUlkKCksIG1fY29udGVudFJlY3Quc2l6
ZSgpLCBkcmF3VHJhbnNmb3JtKTsKLQotICAgIEZsb2F0UXVhZCBxdWFkID0gZGV2aWNlTWF0cml4
Lm1hcFF1YWQobGF5ZXJSZW5kZXJlci0+c2hhcmVkR2VvbWV0cnlRdWFkKCkpOwotICAgIENDTGF5
ZXJRdWFkIGRldmljZVJlY3QgPSBDQ0xheWVyUXVhZChGbG9hdFF1YWQocXVhZC5ib3VuZGluZ0Jv
eCgpKSk7Ci0gICAgQ0NMYXllclF1YWQgbGF5ZXJRdWFkID0gQ0NMYXllclF1YWQocXVhZCk7Ci0K
LSAgICAvLyBVc2UgYW50aS1hbGlhc2luZyBwcm9ncmFtcyBvbmx5IHdoZW4gbmVjZXNzYXJ5Lgot
ICAgIGJvb2wgdXNlQUEgPSAoIXF1YWQuaXNSZWN0aWxpbmVhcigpIHx8ICFxdWFkLmJvdW5kaW5n
Qm94KCkuaXNFeHByZXNzaWJsZUFzSW50UmVjdCgpKTsKLQotICAgIGlmICh1c2VBQSkgewotICAg
ICAgICBkZXZpY2VSZWN0LmluZmxhdGVBbnRpQWxpYXNpbmdEaXN0YW5jZSgpOwotICAgICAgICBs
YXllclF1YWQuaW5mbGF0ZUFudGlBbGlhc2luZ0Rpc3RhbmNlKCk7Ci0gICAgfQotCi0gICAgYm9v
bCB1c2VNYXNrID0gZmFsc2U7Ci0gICAgaWYgKG1hc2tMYXllciAmJiBtYXNrTGF5ZXItPmRyYXdz
Q29udGVudCgpKQotICAgICAgICBpZiAoIW1hc2tMYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgdXNlTWFzayA9IHRydWU7Ci0KLSAgICAvLyBGSVhNRTogcGFzcyBpbiBiYWNr
Z3JvdW5kVGV4dHVyZUlkIGFuZCBibGVuZCB0aGUgYmFja2dyb3VuZCBpbiB3aXRoIHRoaXMgZHJh
dyBpbnN0ZWFkIG9mIGhhdmluZyBhIHNlcGFyYXRlIGRyYXdCYWNrZ3JvdW5kKCkgcGFzcy4KLQot
ICAgIGlmICh1c2VNYXNrKSB7Ci0gICAgICAgIGlmICh1c2VBQSkgewotICAgICAgICAgICAgY29u
c3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpSZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQSogcHJv
Z3JhbSA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBKCk7Ci0gICAg
ICAgICAgICBkcmF3U3VyZmFjZShsYXllclJlbmRlcmVyLCBtYXNrTGF5ZXIsIGRyYXdUcmFuc2Zv
cm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBjb250ZW50c1RleHR1cmVJ
ZCwgcHJvZ3JhbSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxvY2F0aW9u
KCksIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50TG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1cmZhY2VNYXNrUHJvZ3Jh
bSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOwot
ICAgICAgICAgICAgZHJhd1N1cmZhY2UobGF5ZXJSZW5kZXJlciwgbWFza0xheWVyLCBkcmF3VHJh
bnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgY29udGVudHNUZXh0
dXJlSWQsIHByb2dyYW0sIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkubWFza1NhbXBsZXJMb2Nh
dGlvbigpLCAtMSwgLTEpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHVz
ZUFBKSB7Ci0gICAgICAgICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1
cmZhY2VQcm9ncmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlUHJv
Z3JhbUFBKCk7Ci0gICAgICAgICAgICBkcmF3U3VyZmFjZShsYXllclJlbmRlcmVyLCBtYXNrTGF5
ZXIsIGRyYXdUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBj
b250ZW50c1RleHR1cmVJZCwgcHJvZ3JhbSwgLTEsIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBv
aW50TG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OlJlbmRlclN1cmZhY2VQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVy
U3VyZmFjZVByb2dyYW0oKTsKLSAgICAgICAgICAgIGRyYXdTdXJmYWNlKGxheWVyUmVuZGVyZXIs
IG1hc2tMYXllciwgZHJhd1RyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXll
clF1YWQsIGNvbnRlbnRzVGV4dHVyZUlkLCBwcm9ncmFtLCAtMSwgLTEsIC0xKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+Ci12b2lkIENDUmVuZGVyU3VyZmFjZTo6
ZHJhd1N1cmZhY2UoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBDQ0xheWVy
SW1wbCogbWFza0xheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9y
bSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3QgQ0NM
YXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0IENDTGF5ZXJRdWFkJiBsYXllclF1YWQsIGludCBj
b250ZW50c1RleHR1cmVJZCwgY29uc3QgVCogcHJvZ3JhbSwgaW50IHNoYWRlck1hc2tTYW1wbGVy
TG9jYXRpb24sIGludCBzaGFkZXJRdWFkTG9jYXRpb24sIGludCBzaGFkZXJFZGdlTG9jYXRpb24p
Ci17Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQzRCA9IGxheWVyUmVuZGVyZXItPmNv
bnRleHQoKTsKLQotICAgIGNvbnRleHQzRC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xD
KGNvbnRleHQzRCwgY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwot
Ci0gICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFMCkpOwotICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9y
bTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAg
ICBjb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBj
b250ZW50c1RleHR1cmVJZCk7Ci0KLSAgICBpZiAoc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiAh
PSAtMSkgewotICAgICAgICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0M0QsIGNv
bnRleHQzRC0+dW5pZm9ybTFpKHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24sIDEpKTsKLSAgICAg
ICAgbWFza0xheWVyLT5iaW5kQ29udGVudHNUZXh0dXJlKGxheWVyUmVuZGVyZXIpOwotICAgICAg
ICBHTEMoY29udGV4dDNELCBjb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkUwKSk7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlckVkZ2VMb2NhdGlvbiAhPSAt
MSkgewotICAgICAgICBmbG9hdCBlZGdlWzI0XTsKLSAgICAgICAgbGF5ZXJRdWFkLnRvRmxvYXRB
cnJheShlZGdlKTsKLSAgICAgICAgZGV2aWNlUmVjdC50b0Zsb2F0QXJyYXkoJmVkZ2VbMTJdKTsK
LSAgICAgICAgR0xDKGNvbnRleHQzRCwgY29udGV4dDNELT51bmlmb3JtM2Z2KHNoYWRlckVkZ2VM
b2NhdGlvbiwgOCwgZWRnZSkpOwotICAgIH0KLQotICAgIC8vIE1hcCBkZXZpY2Ugc3BhY2UgcXVh
ZCB0byBsYXllciBzcGFjZS4KLSAgICBGbG9hdFF1YWQgcXVhZCA9IGRldmljZVRyYW5zZm9ybS5p
bnZlcnNlKCkubWFwUXVhZChsYXllclF1YWQuZmxvYXRRdWFkKCkpOwotCi0gICAgbGF5ZXJSZW5k
ZXJlci0+ZHJhd1RleHR1cmVkUXVhZChkcmF3VHJhbnNmb3JtLCBtX2NvbnRlbnRSZWN0LndpZHRo
KCksIG1fY29udGVudFJlY3QuaGVpZ2h0KCksIG1fZHJhd09wYWNpdHksIHF1YWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRy
aXhMb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKSwg
c2hhZGVyUXVhZExvY2F0aW9uKTsKLX0KLQotU2tCaXRtYXAgQ0NSZW5kZXJTdXJmYWNlOjphcHBs
eUZpbHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBXZWJL
aXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIE1hbmFnZWRUZXh0dXJlKiBzb3VyY2VU
ZXh0dXJlKQotewotICAgIGlmIChmaWx0ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFNr
Qml0bWFwKCk7Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGZpbHRlckNvbnRleHQg
PSBDQ1Byb3h5OjpoYXNJbXBsVGhyZWFkKCkgPyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Rm9ySW1wbFRocmVhZCgpIDogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpOwotICAgIGlm
ICghZmlsdGVyQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIFNrQml0bWFwKCk7Ci0KLSAgICBsYXll
clJlbmRlcmVyLT5jb250ZXh0KCktPmZsdXNoKCk7Ci0KLSAgICByZXR1cm4gQ0NSZW5kZXJTdXJm
YWNlRmlsdGVyczo6YXBwbHkoZmlsdGVycywgc291cmNlVGV4dHVyZS0+dGV4dHVyZUlkKCksIHNv
dXJjZVRleHR1cmUtPnNpemUoKSwgZmlsdGVyQ29udGV4dC5nZXQoKSk7Ci19Ci0KIFN0cmluZyBD
Q1JlbmRlclN1cmZhY2U6Om5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBTdHJpbmc6OmZvcm1h
dCgiUmVuZGVyU3VyZmFjZShpZD0laSxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBt
X293bmluZ0xheWVyLT5kZWJ1Z05hbWUoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTQwNiwxMiArMjAz
LDEyIEBAIGJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNSZXBsaWNhKCkgY29uc3QKIAogYm9vbCBD
Q1JlbmRlclN1cmZhY2U6Omhhc01hc2soKSBjb25zdAogewotICAgIHJldHVybiBtX21hc2tMYXll
cjsKKyAgICByZXR1cm4gbV9vd25pbmdMYXllci0+bWFza0xheWVyKCk7CiB9CiAKIGJvb2wgQ0NS
ZW5kZXJTdXJmYWNlOjpyZXBsaWNhSGFzTWFzaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1Jl
cGxpY2EoKSAmJiAobV9tYXNrTGF5ZXIgfHwgbV9vd25pbmdMYXllci0+cmVwbGljYUxheWVyKCkt
Pm1hc2tMYXllcigpKTsKKyAgICByZXR1cm4gaGFzUmVwbGljYSgpICYmIChtX293bmluZ0xheWVy
LT5tYXNrTGF5ZXIoKSB8fCBtX293bmluZ0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVy
KCkpOwogfQogCiB2b2lkIENDUmVuZGVyU3VyZmFjZTo6c2V0Q2xpcFJlY3QoY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QpCkBAIC00NjMsNSArMjYwLDM4IEBAIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFk
U3RhdGU+IENDUmVuZGVyU3VyZmFjZTo6Y3JlYXRlUmVwbGljYVNoYXJlZFF1YWRTdGF0ZSgpIGNv
CiAgICAgcmV0dXJuIENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUocmVwbGljYU9yaWdpblRyYW5z
Zm9ybSgpLCByZXBsaWNhRHJhd1RyYW5zZm9ybSgpLCBjb250ZW50UmVjdCgpLCBjbGlwUmVjdCgp
LCBkcmF3T3BhY2l0eSgpLCBpc09wYXF1ZSk7CiB9CiAKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjph
cHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImIHF1YWRMaXN0LCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hh
cmVkUXVhZFN0YXRlLCBib29sIGZvclJlcGxpY2EsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURh
bWFnZVJlY3QpCit7CisgICAgQVNTRVJUKCFmb3JSZXBsaWNhIHx8IGhhc1JlcGxpY2EoKSk7CisK
KyAgICBpZiAobV9vd25pbmdMYXllci0+aGFzRGVidWdCb3JkZXJzKCkpIHsKKyAgICAgICAgaW50
IHJlZCA9IGZvclJlcGxpY2EgPyBkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xvclJlZCA6IGRlYnVnU3Vy
ZmFjZUJvcmRlckNvbG9yUmVkOworICAgICAgICBpbnQgZ3JlZW4gPSBmb3JSZXBsaWNhID8gIGRl
YnVnUmVwbGljYUJvcmRlckNvbG9yR3JlZW4gOiBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckdyZWVu
OworICAgICAgICBpbnQgYmx1ZSA9IGZvclJlcGxpY2EgPyBkZWJ1Z1JlcGxpY2FCb3JkZXJDb2xv
ckJsdWUgOiBkZWJ1Z1N1cmZhY2VCb3JkZXJDb2xvckJsdWU7CisgICAgICAgIENvbG9yIGNvbG9y
KHJlZCwgZ3JlZW4sIGJsdWUsIGRlYnVnU3VyZmFjZUJvcmRlckFscGhhKTsKKyAgICAgICAgcXVh
ZExpc3QuYXBwZW5kU3VyZmFjZShDQ0RlYnVnQm9yZGVyRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRR
dWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIGNvbG9yLCBkZWJ1Z1N1cmZhY2VCb3JkZXJXaWR0aCkp
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBCeSB1c2luZyB0aGUgc2FtZSBSZW5kZXJTdXJmYWNl
IGZvciBib3RoIHRoZSBjb250ZW50IGFuZCBpdHMgcmVmbGVjdGlvbiwKKyAgICAvLyBpdCdzIGN1
cnJlbnRseSBub3QgcG9zc2libGUgdG8gYXBwbHkgYSBzZXBhcmF0ZSBtYXNrIHRvIHRoZSByZWZs
ZWN0aW9uIGxheWVyCisgICAgLy8gb3IgY29ycmVjdGx5IGhhbmRsZSBvcGFjaXR5IGluIHJlZmxl
Y3Rpb25zIChvcGFjaXR5IG11c3QgYmUgYXBwbGllZCBhZnRlciBkcmF3aW5nCisgICAgLy8gYm90
aCB0aGUgbGF5ZXIgYW5kIGl0cyByZWZsZWN0aW9uKS4gVGhlIHNvbHV0aW9uIGlzIHRvIGludHJv
ZHVjZSB5ZXQgYW5vdGhlciBSZW5kZXJTdXJmYWNlCisgICAgLy8gdG8gZHJhdyB0aGUgbGF5ZXIg
YW5kIGl0cyByZWZsZWN0aW9uIGluLiBGb3Igbm93IHdlIG9ubHkgYXBwbHkgYSBzZXBhcmF0ZSBy
ZWZsZWN0aW9uCisgICAgLy8gbWFzayBpZiB0aGUgY29udGVudHMgZG9uJ3QgaGF2ZSBhIG1hc2sg
b2YgdGhlaXIgb3duLgorICAgIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIgPSBtX293bmluZ0xheWVy
LT5tYXNrTGF5ZXIoKTsKKyAgICBpZiAobWFza0xheWVyICYmICghbWFza0xheWVyLT5kcmF3c0Nv
bnRlbnQoKSB8fCBtYXNrTGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkpCisgICAgICAgIG1hc2tM
YXllciA9IDA7CisKKyAgICBpZiAoIW1hc2tMYXllciAmJiBmb3JSZXBsaWNhKSB7CisgICAgICAg
IG1hc2tMYXllciA9IG1fb3duaW5nTGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKTsK
KyAgICAgICAgaWYgKG1hc2tMYXllciAmJiAoIW1hc2tMYXllci0+ZHJhd3NDb250ZW50KCkgfHwg
bWFza0xheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpKQorICAgICAgICAgICAgbWFza0xheWVyID0g
MDsKKyAgICB9CisKKyAgICBpbnQgbWFza1RleHR1cmVJZCA9IG1hc2tMYXllciA/IG1hc2tMYXll
ci0+Y29udGVudHNUZXh0dXJlSWQoKSA6IDA7CisKKyAgICBxdWFkTGlzdC5hcHBlbmRTdXJmYWNl
KENDUmVuZGVyU3VyZmFjZURyYXdRdWFkOjpjcmVhdGUoc2hhcmVkUXVhZFN0YXRlLCBjb250ZW50
UmVjdCgpLCBtX293bmluZ0xheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCwgZm9yUmVwbGljYSwgZmls
dGVycygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkKSk7Cit9CisKIH0KICNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oCmluZGV4IDZhNjcxYTcwMGVkNjc3MDg2N2ViZTkyNjljMTI5Njc2MGQyMDQ0YTEuLjhl
MzcwNTc4Y2VkMjEwNTAxZTlkZGRjNDQ4YTg3OTVkOTQ2NjkyNGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5oCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiU2tCaXRtYXAuaCIKICNpbmNsdWRlICJU
ZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclF1YWQuaCIKQEAgLTQxLDYgKzQwLDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ0NEYW1hZ2VUcmFja2VyOworY2xhc3MgQ0NRdWFkQ3VsbGVyOwogY2xh
c3MgQ0NTaGFyZWRRdWFkU3RhdGU7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTsKQEAgLTU0LDE5ICs1NCwxNCBAQCBwdWJsaWM6CiAKICAgICBib29sIHBy
ZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CiAgICAgdm9pZCBy
ZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7CisgICAgYm9vbCBoYXNWYWxpZENvbnRlbnRzVGV4dHVy
ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBwcmVwYXJlQmFja2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5k
ZXJlckNocm9taXVtKik7CiAgICAgdm9pZCByZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKKyAg
ICBib29sIGhhc1ZhbGlkQmFja2dyb3VuZFRleHR1cmUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0
U2Npc3NvclJlY3QoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgRmxvYXRSZWN0JiBzdXJm
YWNlRGFtYWdlUmVjdCkgY29uc3Q7CiAKLSAgICB2b2lkIGRyYXdDb250ZW50cyhMYXllclJlbmRl
cmVyQ2hyb21pdW0qKTsKLSAgICB2b2lkIGRyYXdSZXBsaWNhKExheWVyUmVuZGVyZXJDaHJvbWl1
bSopOwotCi0gICAgLy8gVGFrZXMgYSB0ZXh0dXJlIHdpdGggcGl4ZWxzIGluIGRldmljZSBzcGFj
ZSwgYW5kIGEgdHJhbnNmb3JtIGZyb20gY29udGVudCBzcGFjZSB0byB0aGUgZGV2aWNlLiBDb3Bp
ZXMgdGhlIGRldmljZS1zcGFjZSB0ZXh0dXJlIGJhY2sgaW50bwotICAgIC8vIGNvbnRlbnQgc3Bh
Y2UgZm9yIHRoZSBzdXJmYWNlLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gdGhlIGJhY2tncm91bmRU
ZXh0dXJlKCkuIFRoZSBzdXJmYWNlJ3MgYmFja2dyb3VuZFRleHR1cmUoKSBtdXN0IGJlIHRoZSBh
Y3RpdmUgZHJhd2luZyB0YXJnZXQuCi0gICAgdm9pZCBjb3B5RGV2aWNlVG9CYWNrZ3JvdW5kVGV4
dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBpbnQgZGV2aWNlQmFja2dyb3VuZFRleHR1cmVJ
ZCwgY29uc3QgSW50UmVjdCYgZGV2aWNlVGV4dHVyZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pIGNvbnN0OwotCiAgICAgU3RyaW5nIG5hbWUoKSBjb25z
dDsKICAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsK
IApAQCAtNzQsMTggKzY5LDEyIEBAIHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMgdGhlIHJlY3Qg
dGhhdCBlbmNsb3NlcyB0aGUgUmVuZGVyU3VyZmFjZSBpbmNsdWRpbmcgYW55IHJlZmxlY3Rpb24u
CiAgICAgRmxvYXRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdDsKLSAgICAvLyBSZXR1
cm5zIHRoZSByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIHBpeGVscyB0aGF0IG1heSBhZmZlY3QgdGhl
IHBpeGVsIHZhbHVlcyBpbiB0aGlzIHN1cmZhY2UgdGhyb3VnaCBiYWNrZ3JvdW5kIGZpbHRlcnMu
Ci0gICAgSW50UmVjdCByZWFkYmFja0RldmljZUNvbnRlbnRSZWN0KExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdDsK
LQotICAgIC8vIEdpdmVzIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgc3VyZmFjZSBjb250ZW50IHNw
YWNlLCB3aXRoIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQsIHRvIHRoZSBjdXJyZW50IHRhcmdldCBk
ZXZpY2Ugc3BhY2UsIHdpdGggb3JpZ2luIGluIHRoZSB0b3AgbGVmdC4KLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBjb21wdXRlRGV2aWNlVHJhbnNmb3JtKExheWVyUmVuZGVyZXJDaHJvbWl1bSos
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdDsKIAogICAg
IGZsb2F0IGRyYXdPcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3T3BhY2l0eTsgfQogICAg
IHZvaWQgc2V0RHJhd09wYWNpdHkoZmxvYXQgb3BhY2l0eSkgeyBtX2RyYXdPcGFjaXR5ID0gb3Bh
Y2l0eTsgfQogCiAgICAgdm9pZCBzZXRGaWx0ZXJzKGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycykgeyBtX2ZpbHRlcnMgPSBmaWx0ZXJzOyB9CiAgICAgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9maWx0
ZXJzOyB9Ci0gICAgU2tCaXRtYXAgYXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSos
IGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYsIE1hbmFnZWRUZXh0dXJlKiBzb3Vy
Y2VUZXh0dXJlKTsKIAogICAgIHZvaWQgc2V0QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgV2ViS2l0
OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSB7IG1fYmFja2dyb3VuZEZpbHRlcnMgPSBm
aWx0ZXJzOyB9CiAgICAgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3Jv
dW5kRmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZEZpbHRlcnM7IH0KQEAgLTEy
NiwxNCArMTE1LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29udGVudFJlY3QoY29uc3QgSW50
UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50UmVjdDsgfQogCi0gICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcp
IHsgbV9za2lwc0RyYXcgPSBza2lwc0RyYXc7IH0KLSAgICBib29sIHNraXBzRHJhdygpIGNvbnN0
IHsgcmV0dXJuIG1fc2tpcHNEcmF3OyB9Ci0KICAgICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCkgeyBt
X2xheWVyTGlzdC5jbGVhcigpOyB9CiAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlz
dCgpIHsgcmV0dXJuIG1fbGF5ZXJMaXN0OyB9CiAKLSAgICB2b2lkIHNldE1hc2tMYXllcihDQ0xh
eWVySW1wbCogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVyOyB9Ci0KICAgICBN
YW5hZ2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50
c1RleHR1cmUuZ2V0KCk7IH0KICAgICBNYW5hZ2VkVGV4dHVyZSogYmFja2dyb3VuZFRleHR1cmUo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRUZXh0dXJlLmdldCgpOyB9CiAKQEAgLTE1NCwy
MSArMTM4LDEzIEBAIHB1YmxpYzoKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVhZFN0YXRlPiBj
cmVhdGVTaGFyZWRRdWFkU3RhdGUoKSBjb25zdDsKICAgICBQYXNzT3duUHRyPENDU2hhcmVkUXVh
ZFN0YXRlPiBjcmVhdGVSZXBsaWNhU2hhcmVkUXVhZFN0YXRlKCkgY29uc3Q7CiAKLXByaXZhdGU6
Ci0gICAgSW50UmVjdCBjb21wdXRlRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0Owot
ICAgIEludFJlY3QgY29tcHV0ZVJlYWRiYWNrRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNv
bnN0OwotCi0gICAgdm9pZCBkcmF3TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgQ0NMYXll
ckltcGwqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGludCBjb250ZW50c1RleHR1cmVJ
ZCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgdm9pZCBkcmF3U3VyZmFjZShMYXllclJl
bmRlcmVyQ2hyb21pdW0qLCBDQ0xheWVySW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNm
b3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQmLCBp
bnQgY29udGVudHNUZXh0dXJlSWQsIGNvbnN0IFQqIHByb2dyYW0sIGludCBzaGFkZXJNYXNrU2Ft
cGxlckxvY2F0aW9uLCBpbnQgc2hhZGVyUXVhZExvY2F0aW9uLCBpbnQgc2hhZGVyRWRnZUxvY2F0
aW9uKTsKLQotICAgIHN0YXRpYyB2b2lkIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihMYXllclJl
bmRlcmVyQ2hyb21pdW0qLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKKyAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoZSBzdXJmYWNlRGFtYWdlUmVjdCBwYXJhbWV0ZXIgd2hlbiB0aGUgdmFsdWUgaXMgcmVt
b3ZlZCBmcm9tIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkLgorICAgIHZvaWQgYXBwZW5kUXVhZHMo
Q0NRdWFkQ3VsbGVyJiwgQ0NTaGFyZWRRdWFkU3RhdGUqLCBib29sIGZvclJlcGxpY2EsIGNvbnN0
IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QpOwogCitwcml2YXRlOgogICAgIENDTGF5ZXJJ
bXBsKiBtX293bmluZ0xheWVyOwotICAgIENDTGF5ZXJJbXBsKiBtX21hc2tMYXllcjsKIAogICAg
IEludFJlY3QgbV9jb250ZW50UmVjdDsKLSAgICBib29sIG1fc2tpcHNEcmF3OwogICAgIGJvb2wg
bV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkOwogCiAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBt
X2NvbnRlbnRzVGV4dHVyZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdR
dWFkLmNwcAppbmRleCBjNmUwMjFlY2UyMDY1Yzc5YzVlY2Y2Y2QwYjZkMzdjZTk1NDdiMzEwLi5k
ZjAwYzBlMGZhMzY1NjIxYTM2NjNiYzI5NjZmMjM3YzNiNzVhYjVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VE
cmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuY3BwCkBAIC0yOSwxNiArMjksMTkgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFk
PiBDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
KiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBDQ0xheWVySW1wbCog
bGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc3VyZmFjZURhbWFnZVJlY3QsIGJvb2wgaXNSZXBsaWNh
KQorUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gQ0NSZW5kZXJTdXJmYWNlRHJh
d1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBj
b25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBGbG9hdFJl
Y3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKQogewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRl
LCBxdWFkUmVjdCwgbGF5ZXIsIHN1cmZhY2VEYW1hZ2VSZWN0LCBpc1JlcGxpY2EpKTsKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKHNoYXJlZFF1YWRTdGF0
ZSwgcXVhZFJlY3QsIGxheWVyLCBzdXJmYWNlRGFtYWdlUmVjdCwgaXNSZXBsaWNhLCBmaWx0ZXJz
LCBiYWNrZ3JvdW5kRmlsdGVycywgbWFza1RleHR1cmVJZCkpOwogfQogCi1DQ1JlbmRlclN1cmZh
Y2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3Rh
dGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIENDTGF5ZXJJbXBs
KiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxp
Y2EpCitDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZDo6Q0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29u
c3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVh
ZFJlY3QsIENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBzdXJmYWNlRGFtYWdl
UmVjdCwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmls
dGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCkKICAgICA6IENDRHJhd1F1YWQoc2hhcmVkUXVh
ZFN0YXRlLCBDQ0RyYXdRdWFkOjpSZW5kZXJTdXJmYWNlLCBxdWFkUmVjdCkKICAgICAsIG1fbGF5
ZXIobGF5ZXIpCiAgICAgLCBtX3N1cmZhY2VEYW1hZ2VSZWN0KHN1cmZhY2VEYW1hZ2VSZWN0KQog
ICAgICwgbV9pc1JlcGxpY2EoaXNSZXBsaWNhKQorICAgICwgbV9maWx0ZXJzKGZpbHRlcnMpCisg
ICAgLCBtX2JhY2tncm91bmRGaWx0ZXJzKGJhY2tncm91bmRGaWx0ZXJzKQorICAgICwgbV9tYXNr
VGV4dHVyZUlkKG1hc2tUZXh0dXJlSWQpCiB7CiAgICAgQVNTRVJUKG1fbGF5ZXIpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NS
ZW5kZXJTdXJmYWNlRHJhd1F1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZURyYXdRdWFkLmgKaW5kZXggOGY2ZGE1ZWVlMWQ4
MjdmYzEwZWE1YTU4ZDVmODE5ZWIyMDU5MzE2ZC4uMGEwMTI4MWZhNGY2OWRlMmNkNmQyOTFmZjFh
NjE2YjY5NjdiOTRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2VEcmF3UXVh
ZC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIENDUmVuZGVyU3VyZmFjZURyYXdRdWFkX2gK
IAogI2luY2x1ZGUgImNjL0NDRHJhd1F1YWQuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVy
T3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM2LDIxICszNywyOCBAQCBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIEND
UmVuZGVyU3VyZmFjZURyYXdRdWFkIDogcHVibGljIENDRHJhd1F1YWQgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENDUmVuZGVyU3VyZmFjZURyYXdRdWFkKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxDQ1JlbmRlclN1cmZhY2VEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hh
cmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIENDTGF5ZXJJbXBsKiwgY29uc3QgRmxvYXRS
ZWN0JiBzdXJmYWNlRGFtYWdlUmVjdCwgYm9vbCBpc1JlcGxpY2EpOworICAgIHN0YXRpYyBQYXNz
T3duUHRyPENDUmVuZGVyU3VyZmFjZURyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFk
U3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1
cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJh
Y2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsKIAogICAgIENDTGF5ZXJJ
bXBsKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXI7IH0KICAgICBib29sIGlzUmVwbGlj
YSgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXBsaWNhOyB9CisgICAgdW5zaWduZWQgbWFza1RleHR1
cmVJZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFza1RleHR1cmVJZDsgfQogCiAgICAgLy8gVGhlIHN1
cmZhY2UgZGFtYWdlIHJlY3QgZm9yIHRoZSB0YXJnZXQgc3VyZmFjZSB0aGlzIHF1YWQgZHJhd3Mg
aW50by4KICAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHJlbmRlciBzdXJm
YWNlcyBnZXQgdGhlaXIgb3duIGxheWVyIHR5cGUuCiAgICAgY29uc3QgRmxvYXRSZWN0JiBzdXJm
YWNlRGFtYWdlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZURhbWFnZVJlY3Q7IH0KIAor
ICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsdGVyczsgfQorICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9u
cyYgYmFja2dyb3VuZEZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRGaWx0ZXJz
OyB9CisKIHByaXZhdGU6Ci0gICAgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NMYXllckltcGwqLCBjb25zdCBGbG9hdFJl
Y3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVwbGljYSk7CisgICAgQ0NSZW5kZXJTdXJm
YWNlRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJbnRSZWN0JiwgQ0NM
YXllckltcGwqLCBjb25zdCBGbG9hdFJlY3QmIHN1cmZhY2VEYW1hZ2VSZWN0LCBib29sIGlzUmVw
bGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBX
ZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBt
YXNrVGV4dHVyZUlkKTsKIAogICAgIENDTGF5ZXJJbXBsKiBtX2xheWVyOwogICAgIEZsb2F0UmVj
dCBtX3N1cmZhY2VEYW1hZ2VSZWN0OwogICAgIGJvb2wgbV9pc1JlcGxpY2E7CisgICAgV2ViS2l0
OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fZmlsdGVyczsKKyAgICBXZWJLaXQ6OldlYkZpbHRlck9w
ZXJhdGlvbnMgbV9iYWNrZ3JvdW5kRmlsdGVyczsKKyAgICB1bnNpZ25lZCBtX21hc2tUZXh0dXJl
SWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IGVjMjJh
OWZkNjc2YjkwODJmNzA4NWM5YTI5YTUwYTRjZGFlMjE5YWUuLjk2MDVlNDk5NzM2MWNjMjU0ZDM1
YzQ4MGYwYTJlZTVjODgxZDYwNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3Bw
CkBAIC03Nyw3ICs3Nyw3IEBAIENDVGlsZWRMYXllckltcGw6On5DQ1RpbGVkTGF5ZXJJbXBsKCkK
IHsKIH0KIAotdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKK3Vuc2lnbmVkIENDVGlsZWRMYXllcklt
cGw6OmNvbnRlbnRzVGV4dHVyZUlkKCkgY29uc3QKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlz
IG9ubHkgdmFsaWQgZm9yIHNpbmdsZSB0ZXh0dXJlIGxheWVycywgZS5nLiBtYXNrcy4KICAgICBB
U1NFUlQobV90aWxlcik7CkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgQ0NUaWxlZExheWVySW1wbDo6
YmluZENvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIp
CiAgICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQgPSB0aWxlID8gdGlsZS0+dGV4dHVyZUlk
KCkgOiAwOwogICAgIEFTU0VSVCh0ZXh0dXJlSWQpOwogCi0gICAgbGF5ZXJSZW5kZXJlci0+Y29u
dGV4dCgpLT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVy
ZUlkKTsKKyAgICByZXR1cm4gdGV4dHVyZUlkOwogfQogCiB2b2lkIENDVGlsZWRMYXllckltcGw6
OmR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggYmQxNDY2NTBiYWQ1YTdhZDYwMjFmOWFh
NzJkZGVlNzc1MmFhMTViZS4uMmU4NTM5YWUxODZhMjAwMjZmZjkyMjhiNzA3OWMyMGNkYzNiZjUy
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiwgY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqLCBib29sJiBoYWRNaXNzaW5nVGlsZXMpIE9WRVJSSURFOwogCi0g
ICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjb250ZW50c1RleHR1cmVJZCgpIGNv
bnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4
dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0IE9WRVJSSURFOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcAppbmRleCA3ZGFj
MDA1ZDI0Y2FmYWNjMjcxYjg2YWQ1ZmRlMzg1NjZkMGJkODc0Li4zMDc1MWQ3NDgzMjY4YjQ1ZjZk
NzkxODBkYTkxOGUzYjUzZjM3ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKQEAgLTg2LDkgKzg2LDcgQEAgVEVTVChD
Q1JlbmRlclN1cmZhY2VUZXN0LCB2ZXJpZnlTdXJmYWNlQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJs
eSkKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9ESURfTk9UX0NIQU5HRShyZW5kZXJT
dXJmYWNlLT5zZXREcmF3VHJhbnNmb3JtKGR1bW15TWF0cml4KSk7CiAgICAgRVhFQ1VURV9BTkRf
VkVSSUZZX1NVUkZBQ0VfRElEX05PVF9DSEFOR0UocmVuZGVyU3VyZmFjZS0+c2V0UmVwbGljYURy
YXdUcmFuc2Zvcm0oZHVtbXlNYXRyaXgpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFD
RV9ESURfTk9UX0NIQU5HRShyZW5kZXJTdXJmYWNlLT5zZXRPcmlnaW5UcmFuc2Zvcm0oZHVtbXlN
YXRyaXgpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfU1VSRkFDRV9ESURfTk9UX0NIQU5HRShy
ZW5kZXJTdXJmYWNlLT5zZXRTa2lwc0RyYXcodHJ1ZSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklG
WV9TVVJGQUNFX0RJRF9OT1RfQ0hBTkdFKHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCkp
OwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TVVJGQUNFX0RJRF9OT1RfQ0hBTkdFKHJlbmRlclN1
cmZhY2UtPnNldE1hc2tMYXllcihkdW1teU1hc2suZ2V0KCkpKTsKIH0KIAogVEVTVChDQ1JlbmRl
clN1cmZhY2VUZXN0LCBzYW5pdHlDaGVja1N1cmZhY2VDcmVhdGVzQ29ycmVjdFNoYXJlZFF1YWRT
dGF0ZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>