<?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>93927</bug_id>
          
          <creation_ts>2012-08-13 20:47:03 -0700</creation_ts>
          <short_desc>[chromium] Move non-GL-specific code out of LayerRendererChromium</short_desc>
          <delta_ts>2012-08-20 12:16:05 -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>
          
          <blocked>93761</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexandre Elias">aelias</reporter>
          <assigned_to name="Alexandre Elias">aelias</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>694460</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-13 20:47:03 -0700</bug_when>
    <thetext>[chromium] Move non-GL-specific code out of LayerRendererChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694462</commentid>
    <comment_count>1</comment_count>
      <attachid>158198</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-13 20:53:16 -0700</bug_when>
    <thetext>Created attachment 158198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694464</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-13 20:55:30 -0700</bug_when>
    <thetext>Attachment 158198 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:14:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/ChangeLog:15:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 8 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694471</commentid>
    <comment_count>3</comment_count>
      <attachid>158198</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-13 21:15:24 -0700</bug_when>
    <thetext>Comment on attachment 158198
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.cpp:40
&gt; +static WebTransformationMatrix projectionMatrix(float left, float right, float bottom, float top)

Are non-GL renderers going to need this 3d math?  I thought that any software backend we put in would have to ignore 3d content - we don&apos;t have a perspective-aware software rasterizer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694476</commentid>
    <comment_count>4</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-13 21:24:12 -0700</bug_when>
    <thetext>In my software rasterizer prototype, I&apos;ve been multiplying all the 4x4 matrices in the usual way and then collapsing to 3x3 at the last minute by cutting the 3rd row and column (see toSkMatrix() in Bug 93761 ).  Because neither the input quads nor the output surface have a nonzero Z coordinate, it looks like every supported 3d transformation can be expressed that way.  The projection matrix already ensures that any z-axis movement is collapsed into x,y space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694632</commentid>
    <comment_count>5</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2012-08-14 01:04:26 -0700</bug_when>
    <thetext>Perspective correction?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698604</commentid>
    <comment_count>6</comment_count>
      <attachid>159191</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-17 13:31:56 -0700</bug_when>
    <thetext>Created attachment 159191
Patch

Rebased on Bug 94050</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698610</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-17 13:41:38 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=158198&amp;action=review

I&apos;m ok with 3D software layers that don&apos;t have perspective correct texture interpolation.  I think that&apos;s better than not having 3D layers at all, honestly.

The direction of this patch seems great to me.  I just have a bunch of additional style and bikeshed nits:

&gt; Source/WebCore/platform/graphics/chromium/TextureUploader.h:49
&gt; +class UnthrottledTextureUploader : public TextureUploader {

Put this in its own header file if it&apos;s not just being used internal to a single class, please.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.cpp:40
&gt;&gt; +static WebTransformationMatrix projectionMatrix(float left, float right, float bottom, float top)
&gt; 
&gt; Are non-GL renderers going to need this 3d math?  I thought that any software backend we put in would have to ignore 3d content - we don&apos;t have a perspective-aware software rasterizer.

Did you need to rename this? What about orthoProjectionMatrix?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.cpp:61
&gt; +static WebTransformationMatrix canvasMatrix(int x, int y, int width, int height)

Did you need to rename this too? windowMatrix makes more sense to me than canvasMatrix, since &quot;window coordinates&quot; are often talked about in OpenGL.  I&apos;ll also suggest viewportMatrix as an option?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.cpp:78
&gt; +void CCDirectRenderer::DrawingFrame::initializeMatrices(const IntRect&amp; drawRect, bool flipY)

I don&apos;t like the way that this struct now has member functions.  This should either be &quot;just a struct&quot; and CCDirectRenderer::initializeMatrices should take a DrawingFrame&amp; or it should be a class and have m_-named member variables so that it&apos;s obvious at a glance what side effects these functions have.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.h:52
&gt; +    explicit CCDirectRenderer(CCRendererClient* client, CCResourceProvider* resourceProvider)

No explicit.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.h:111
&gt; +    inline static WebKit::WebTransformationMatrix quadRectTransform(const WebKit::WebTransformationMatrix&amp; quadTransform, const FloatRect&amp; quadRect)
&gt; +    {
&gt; +        WebKit::WebTransformationMatrix quadRectTransform = quadTransform;
&gt; +        quadRectTransform.translate(0.5 * quadRect.width() + quadRect.x(), 0.5 * quadRect.height() + quadRect.y());
&gt; +        quadRectTransform.scaleNonUniform(quadRect.width(), quadRect.height());
&gt; +        return quadRectTransform;
&gt; +    }

inline, really?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698786</commentid>
    <comment_count>8</comment_count>
      <attachid>159227</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-17 16:42:41 -0700</bug_when>
    <thetext>Created attachment 159227
Patch

All suggestions applied, and added &quot;const&quot; to most drawQuad DrawingFrame params</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698791</commentid>
    <comment_count>9</comment_count>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-17 16:51:43 -0700</bug_when>
    <thetext>In addition to applying your comments, I changed most drawQuad methods taking DrawingFrame&amp; to take a const DrawingFrame&amp;.  The exception is drawRenderPassQuad, which needs to modify it due to some weird tricks involving the background pass.  I don&apos;t know quite what to do with that; that&apos;s an area I&apos;d like to see cleaned up in the future as the call structure is quite tangled and I don&apos;t fully understand it.

(In reply to comment #7)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=158198&amp;action=review
&gt; 
&gt; I&apos;m ok with 3D software layers that don&apos;t have perspective correct texture interpolation.  I think that&apos;s better than not having 3D layers at all, honestly.

Happily, Skia matrices are better than expected and poster circle displays decently in my software renderer prototype.  I sent a screenshot to chrome-gpu@ (&quot;First look at software compositing&quot;)

&gt; &gt; Source/WebCore/platform/graphics/chromium/TextureUploader.h:49
&gt; &gt; +class UnthrottledTextureUploader : public TextureUploader {
&gt; 
&gt; Put this in its own header file if it&apos;s not just being used internal to a single class, please.
&gt; 

Done

&gt; Did you need to rename this? What about orthoProjectionMatrix?
&gt; 

Renamed to orthoProjectionMatrix() and windowMatrix()

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.cpp:78
&gt; &gt; +void CCDirectRenderer::DrawingFrame::initializeMatrices(const IntRect&amp; drawRect, bool flipY)
&gt; 
&gt; I don&apos;t like the way that this struct now has member functions.  This should either be &quot;just a struct&quot; and CCDirectRenderer::initializeMatrices should take a DrawingFrame&amp; or it should be a class and have m_-named member variables so that it&apos;s obvious at a glance what side effects these functions have.
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.h:52
&gt; &gt; +    explicit CCDirectRenderer(CCRendererClient* client, CCResourceProvider* resourceProvider)
&gt; 
&gt; No explicit.
&gt; 

Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.h:111
&gt; &gt; +    inline static WebKit::WebTransformationMatrix quadRectTransform(const WebKit::WebTransformationMatrix&amp; quadTransform, const FloatRect&amp; quadRect)
&gt; &gt; +    {
&gt; &gt; +        WebKit::WebTransformationMatrix quadRectTransform = quadTransform;
&gt; &gt; +        quadRectTransform.translate(0.5 * quadRect.width() + quadRect.x(), 0.5 * quadRect.height() + quadRect.y());
&gt; &gt; +        quadRectTransform.scaleNonUniform(quadRect.width(), quadRect.height());
&gt; &gt; +        return quadRectTransform;
&gt; &gt; +    }
&gt; 
&gt; inline, really?

I mainly want to avoid copying around a WebTransformationMatrix for every drawQuad.  I moved it to the .cpp file and changed the function to take a pointer to the target matrix instead of returning one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698855</commentid>
    <comment_count>10</comment_count>
      <attachid>159245</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-17 17:55:20 -0700</bug_when>
    <thetext>Created attachment 159245
Patch

Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699533</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-08-20 08:23:39 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; In addition to applying your comments, I changed most drawQuad methods taking DrawingFrame&amp; to take a const DrawingFrame&amp;.  The exception is drawRenderPassQuad, which needs to modify it due to some weird tricks involving the background pass.  I don&apos;t know quite what to do with that; that&apos;s an area I&apos;d like to see cleaned up in the future as the call structure is quite tangled and I don&apos;t fully understand it.

The reason is DrawingFrame holds the current render target, and background filters are drawn in a different render target, then merged with content back into the original render target. So the current target changes during this.

In order to avoid this, you&apos;d have to do the background filter drawing steps in another place that has a non-const DrawingFrame, or not keep the current target in the DrawingFrame, or something else. But I&apos;m not sure it&apos;s worth it for the const, and might make things more convoluted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699668</commentid>
    <comment_count>12</comment_count>
      <attachid>159245</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-20 10:47:15 -0700</bug_when>
    <thetext>Comment on attachment 159245
Patch

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

R=me.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCDirectRenderer.cpp:16
&gt; + *     * Redistributions of source code must retain the above copyright
&gt; + * notice, this list of conditions and the following disclaimer.
&gt; + *     * Redistributions in binary form must reproduce the above
&gt; + * copyright notice, this list of conditions and the following disclaimer
&gt; + * in the documentation and/or other materials provided with the
&gt; + * distribution.
&gt; + *     * Neither the name of Google Inc. nor the names of its
&gt; + * contributors may be used to endorse or promote products derived from
&gt; + * this software without specific prior written permission.

Please use the 2-clause license like you do in UnthrottledTextureUploader.h and CCDirectRenderer.h instead here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699673</commentid>
    <comment_count>13</comment_count>
      <attachid>159473</attachid>
    <who name="Alexandre Elias">aelias</who>
    <bug_when>2012-08-20 10:53:12 -0700</bug_when>
    <thetext>Created attachment 159473
Patch

Updated CCDirectRenderer.cpp license header</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699675</commentid>
    <comment_count>14</comment_count>
      <attachid>159473</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-20 10:59:01 -0700</bug_when>
    <thetext>Comment on attachment 159473
Patch

R=meagain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699780</commentid>
    <comment_count>15</comment_count>
      <attachid>159473</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-20 12:16:01 -0700</bug_when>
    <thetext>Comment on attachment 159473
Patch

Clearing flags on attachment: 159473

Committed r126052: &lt;http://trac.webkit.org/changeset/126052&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699781</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-20 12:16:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158198</attachid>
            <date>2012-08-13 20:53:16 -0700</date>
            <delta_ts>2012-08-17 13:31:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93927-20120813205244.patch</filename>
            <type>text/plain</type>
            <size>49521</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmY4ZDdlM2Q3YTRlYzU4
YTYwOGYxOWI5YWM4Y2VjY2M2OWY4NDgyZS4uNTA3ZGY3ZjYzMTIwZTRiZDQzNjEzOWEzOGU3MzA5
MGJmN2Q5NWYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTEzICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE1v
dmUgbm9uLUdMLXNwZWNpZmljIGNvZGUgb3V0IG9mIExheWVyUmVuZGVyZXJDaHJvbWl1bQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM5MjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCVRoaXMgcGF0Y2ggbW92ZXMgbW9z
dCBvZiB0aGUgZ2VuZXJpYyBsb2dpYyBkZWFsaW5nIHdpdGggbWF0cmljZXMgYW5kCisJcmVuZGVy
IHBhc3NlcyBpbnRvIGEgbmV3IGNsYXNzICJDQ0RpcmVjdFJlbmRlcmVyIiB0aGF0IHNpdHMgYmV0
d2VlbgorCUNDUmVuZGVyZXIgYW5kIExheWVyUmVuZGVyZXJDaHJvbWl1bSwgYW5kIGFsc28gcHVi
bGljbHkgZXhwb3NlcyBhCisJZmV3IG90aGVyIHRoaW5ncyBsaWtlIHRoZSBVbnRocm90dGxlZFRl
eHR1cmVVcGxvYWRlci4KKwkKKwlUaGUgcGxhbiBpcyBmb3IgdGhlIGZ1dHVyZSBzb2Z0d2FyZSBj
b21wb3NpdGluZyBpbXBsZW1lbnRhdGlvbiB0byBhbHNvCisJZGVyaXZlIGZyb20gQ0NEaXJlY3RS
ZW5kZXJlciwgd2hlcmVhcyB0aGUgdWJlcmNvbXBvc2l0b3IgY2hpbGQKKwlyZW5kZXJlciB3aWxs
IHN0aWxsIGRlcml2ZSBmcm9tIENDUmVuZGVyZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChu
by1vcCByZWZhY3RvcmluZykuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okdlb21ldHJ5QmluZGluZzo6R2VvbWV0cnlCaW5kaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuaDoKKyAgICAgICAgKEdl
b21ldHJ5QmluZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkR2VvbWV0cnkpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb091dHB1
dFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmVuYWJsZVNjaXNzb3JUZXN0UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRpc2FibGVTY2lzc29yVGVzdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldERyYXdWaWV3cG9y
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjptYWtlQ29u
dGV4dEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
bml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hy
b21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3Bp
ZXIuaDoKKyAgICAgICAgKFRleHR1cmVDb3BpZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RleHR1cmVVcGxvYWRlci5oOgorICAgICAgICAoVW50aHJvdHRsZWRUZXh0
dXJlVXBsb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VW50aHJvdHRsZWRUZXh0dXJlVXBsb2Fk
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpVbnRocm90dGxlZFRleHR1cmVVcGxvYWRl
cjo6flVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlVudGhy
b3R0bGVkVGV4dHVyZVVwbG9hZGVyOjpVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RpcmVjdFJlbmRlcmVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcm9qZWN0aW9uTWF0cml4KToK
KyAgICAgICAgKGNhbnZhc01hdHJpeCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OkRyYXdpbmdGcmFtZTo6aW5pdGlhbGl6ZU1hdHJpY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OkRyYXdpbmdGcmFtZTo6aW5p
dGlhbGl6ZVNjaXNzb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OmRl
Y2lkZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RGlyZWN0UmVuZGVyZXI6OmRyYXdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJl
bmRlcmVyOjpkcmF3UmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRl
cmVyOjp1c2VSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6
OmhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NEaXJlY3RSZW5kZXJlcjo6cmVuZGVyUGFzc1RleHR1cmVTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGlyZWN0UmVuZGVyZXI6OnJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0RpcmVjdFJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6On5DQ0RpcmVjdFJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OnJlc291cmNlUHJvdmlkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q0NEaXJlY3RSZW5kZXJlcik6CisgICAgICAg
IChEcmF3aW5nRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6RHJh
d2luZ0ZyYW1lOjpEcmF3aW5nRnJhbWUpOgorICAgICAgICAoQ2FjaGVkVGV4dHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDYWNoZWRUZXh0dXJlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q2FjaGVkVGV4dHVyZTo6fkNhY2hl
ZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q2FjaGVkVGV4
dHVyZTo6aXNDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpD
YWNoZWRUZXh0dXJlOjpzZXRJc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0
UmVuZGVyZXI6OkNhY2hlZFRleHR1cmU6OkNhY2hlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEaXJlY3RSZW5kZXJlcjo6cXVhZFZlcnRleFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NEaXJlY3RSZW5kZXJlcjo6cXVhZFJlY3RUcmFuc2Zvcm0pOgorCiAyMDEyLTA4LTA5ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFJlbmFtZSBW
OEJpbmRpbmdQZXJDb250ZXh0RGF0YSB0byBWOFBlckNvbnRleHREYXRhCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggNmYyNmY1NTJlYjdkODZkYWY2ZTc3ZmVlM2Y4ZmE3ODMxYTQwNjU0MC4uZGM5MzM3OWFi
MWI2YTc2YjNkZWM1NjIxN2NkYjBhMzJiYjA3Y2Y4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtODMy
OCw2ICs4MzI4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0RlYnVnUmVjdEhpc3RvcnkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEZWxheUJhc2VkVGltZVNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJl
ci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVj
dFJlbmRlcmVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEcmF3UXVhZC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDRHJhd1F1YWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NGb250QXRsYXMuY3BwJywKQEAgLTgzODMsNiArODM4NSw3IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkU2luay5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJl
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclBhc3MuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuY3BwCmlu
ZGV4IDFhNDU2OGJiMDdlYjY0OGViNjU3ODE3NGY4MWRlNWY1ZDkxYWMxN2QuLjY3YWI0NjI0ZjEw
YWY1MjkzODNmNzA3YzMzOTQxMDZiZmZlNDQ1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNw
cApAQCAtMzUsMTcgKzM1LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR2VvbWV0cnlC
aW5kaW5nOjpHZW9tZXRyeUJpbmRpbmcoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKK0dlb21ldHJ5QmluZGluZzo6R2VvbWV0cnlCaW5kaW5nKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFZlcnRleFJlY3QpCiAg
ICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fcXVhZFZlcnRpY2VzVmJvKDApCiAgICAg
LCBtX3F1YWRFbGVtZW50c1ZibygwKQogICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKIHsKICAg
ICAvLyBWZXJ0ZXggcG9zaXRpb25zIGFuZCB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgNCBj
b3JuZXJzIG9mIGEgMXgxIHF1YWQuCi0gICAgZmxvYXQgdmVydGljZXNbXSA9IHsgLTAuNWYsICAw
LjVmLCAwLjBmLCAwLjBmLCAgMS4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAtMC41Ziwg
LTAuNWYsIDAuMGYsIDAuMGYsICAwLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgIDAuNWYs
IC0wLjVmLCAwLjBmLCAxLjBmLCAgMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwLjVm
LCAgMC41ZiwgMC4wZiwgMS4wZiwgIDEuMGYgfTsKKyAgICBmbG9hdCB2ZXJ0aWNlc1tdID0geyBx
dWFkVmVydGV4UmVjdC54KCksIHF1YWRWZXJ0ZXhSZWN0Lm1heFkoKSwgMC4wZiwgMC4wZiwgIDEu
MGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZFZlcnRleFJlY3QueCgpLCBxdWFkVmVy
dGV4UmVjdC55KCksIDAuMGYsIDAuMGYsICAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHF1YWRWZXJ0ZXhSZWN0Lm1heFgoKSwgcXVhZFZlcnRleFJlY3QueSgpLCAwLjBmLCAxLjBmLCAg
MC4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkVmVydGV4UmVjdC5tYXhYKCksICBx
dWFkVmVydGV4UmVjdC5tYXhZKCksIDAuMGYsIDEuMGYsICAxLjBmIH07CiAgICAgdWludDE2X3Qg
aW5kaWNlc1tdID0geyAwLCAxLCAyLCAwLCAyLCAzLCAvLyBUaGUgdHdvIHRyaWFuZ2xlcyB0aGF0
IG1ha2UgdXAgdGhlIGxheWVyIHF1YWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAx
LCAyLCAzfTsgLy8gQSBsaW5lIHBhdGggZm9yIGRyYXdpbmcgdGhlIGxheWVyIGJvcmRlci4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2Vv
bWV0cnlCaW5kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HZW9tZXRyeUJpbmRpbmcuaAppbmRleCAyMGIyZDVhMDA1YjhlOTRjYzFiZTljNzdlYzcyNDJi
NmRhY2QzMzgyLi4wYWYxNDZjOTQ2MjI2ZGJjOTc3ZjU1YzU1ZjkwNWU0N2U2YWJjYTBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRy
eUJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9HZW9tZXRyeUJpbmRpbmcuaApAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBHZW9tZXRyeUJp
bmRpbmdfaAogI2RlZmluZSBHZW9tZXRyeUJpbmRpbmdfaAogCisjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKIG5hbWVzcGFjZSBXZWJL
aXQgewpAQCAtMzYsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdlb21l
dHJ5QmluZGluZyB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgR2VvbWV0cnlCaW5kaW5nKFdlYktp
dDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICBHZW9tZXRyeUJpbmRpbmcoV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFZlcnRleFJlY3QpOwog
ICAgIH5HZW9tZXRyeUJpbmRpbmcoKTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25zdCB7
IHJldHVybiBtX2luaXRpYWxpemVkOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAppbmRleCA3Zjk0NzFhOTg1ZTNhN2QwZGUwZTg4YjdmNTZiMWZlMjQ1OTdjMjU1Li44Mzk1
YzZhZDYwYTc5OGU5N2YwMjk0YzMzOGM2MDEwOTg5ZjA3MDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTcxLDQwICs3MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogbmFtZXNwYWNlIHsKIAotc3RhdGljIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhv
TWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkK
LXsKLSAgICBmbG9hdCBkZWx0YVggPSByaWdodCAtIGxlZnQ7Ci0gICAgZmxvYXQgZGVsdGFZID0g
dG9wIC0gYm90dG9tOwotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvOwotICAgIGlm
ICghZGVsdGFYIHx8ICFkZWx0YVkpCi0gICAgICAgIHJldHVybiBvcnRobzsKLSAgICBvcnRoby5z
ZXRNMTEoMi4wZiAvIGRlbHRhWCk7Ci0gICAgb3J0aG8uc2V0TTQxKC0ocmlnaHQgKyBsZWZ0KSAv
IGRlbHRhWCk7Ci0gICAgb3J0aG8uc2V0TTIyKDIuMGYgLyBkZWx0YVkpOwotICAgIG9ydGhvLnNl
dE00MigtKHRvcCArIGJvdHRvbSkgLyBkZWx0YVkpOwotCi0gICAgLy8gWiBjb21wb25lbnQgb2Yg
dmVydGljZXMgaXMgYWx3YXlzIHNldCB0byB6ZXJvIGFzIHdlIGRvbid0IHVzZSB0aGUgZGVwdGgg
YnVmZmVyCi0gICAgLy8gd2hpbGUgZHJhd2luZy4KLSAgICBvcnRoby5zZXRNMzMoMCk7Ci0KLSAg
ICByZXR1cm4gb3J0aG87Ci19Ci0KLXN0YXRpYyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3Jl
ZW5NYXRyaXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuOwotCi0gICAgLy8gTWFwIHRvIHZpZXdwb3J0Lgot
ICAgIHNjcmVlbi50cmFuc2xhdGUzZCh4LCB5LCAwKTsKLSAgICBzY3JlZW4uc2NhbGUzZCh3aWR0
aCwgaGVpZ2h0LCAwKTsKLQotICAgIC8vIE1hcCB4LCB5IGFuZCB6IHRvIHVuaXQgc3F1YXJlLgot
ICAgIHNjcmVlbi50cmFuc2xhdGUzZCgwLjUsIDAuNSwgMC41KTsKLSAgICBzY3JlZW4uc2NhbGUz
ZCgwLjUsIDAuNSwgMC41KTsKLQotICAgIHJldHVybiBzY3JlZW47Ci19Ci0KIGJvb2wgbmVlZHNJ
T1N1cmZhY2VSZWFkYmFja1dvcmthcm91bmQoKQogewogI2lmIE9TKERBUldJTikKQEAgLTExNCw0
NiArODAsOCBAQCBib29sIG5lZWRzSU9TdXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kKCkKICNlbmRp
ZgogfQogCi1jbGFzcyBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlciA6IHB1YmxpYyBUZXh0dXJl
VXBsb2FkZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVudGhyb3R0bGVkVGV4dHVyZVVw
bG9hZGVyKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxVbnRocm90dGxlZFRleHR1
cmVVcGxvYWRlcj4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIoKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgflVudGhy
b3R0bGVkVGV4dHVyZVVwbG9hZGVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNCdXN5KCkg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5VcGxvYWRz
KCkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGVuZFVwbG9hZHMoKSBPVkVSUklERSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgdXBsb2FkVGV4dHVyZShDQ1Jlc291cmNlUHJvdmlkZXIqIHJl
c291cmNlUHJvdmlkZXIsIFBhcmFtZXRlcnMgdXBsb2FkKSBPVkVSUklERSB7IHVwbG9hZC50ZXh0
dXJlLT51cGRhdGVSZWN0KHJlc291cmNlUHJvdmlkZXIsIHVwbG9hZC5zb3VyY2VSZWN0LCB1cGxv
YWQuZGVzdFJlY3QpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBVbnRocm90dGxlZFRleHR1cmVVcGxv
YWRlcigpIHsgfQotfTsKLQogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWNsYXNzIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Q2FjaGVkVGV4dHVyZSA6IHB1YmxpYyBDQ1Njb3BlZFRleHR1cmUg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZFRleHR1cmUpOwotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPENhY2hlZFRleHR1cmU+IGNyZWF0ZShDQ1Jlc291cmNlUHJvdmlk
ZXIqIHJlc291cmNlUHJvdmlkZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZWRUZXh0dXJl
KHJlc291cmNlUHJvdmlkZXIpKTsgfQotICAgIHZpcnR1YWwgfkNhY2hlZFRleHR1cmUoKSB7IH0K
LQotICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQot
ICAgIHZvaWQgc2V0SXNDb21wbGV0ZShib29sIGlzQ29tcGxldGUpIHsgbV9pc0NvbXBsZXRlID0g
aXNDb21wbGV0ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgQ2FjaGVkVGV4dHVyZShD
Q1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgIDogQ0NTY29wZWRU
ZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQot
ICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzQ29tcGxldGU7Ci19OwotCiBQ
YXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUoQ0NSZW5kZXJlckNsaWVudCogY2xpZW50LCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291
cmNlUHJvdmlkZXIsIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJlVXBsb2FkZXJTZXR0aW5n
KQogewogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRv
cHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjbGllbnQsIHJlc291cmNlUHJvdmlkZXIs
IHRleHR1cmVVcGxvYWRlclNldHRpbmcpKSk7CkBAIC0xNjYsMTAgKzk0LDkgQEAgUGFzc093blB0
cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKEND
UmVuZGVyZXJDbGllbnQKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtKENDUmVuZGVyZXJDbGllbnQqIGNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVVcGxv
YWRlck9wdGlvbiB0ZXh0dXJlVXBsb2FkZXJTZXR0aW5nKQotICAgIDogQ0NSZW5kZXJlcihjbGll
bnQpCisgICAgOiBDQ0RpcmVjdFJlbmRlcmVyKGNsaWVudCwgcmVzb3VyY2VQcm92aWRlcikKICAg
ICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9zaGFyZWRHZW9tZXRyeVF1
YWQoRmxvYXRSZWN0KC0wLjVmLCAtMC41ZiwgMS4wZiwgMS4wZikpCi0gICAgLCBtX3Jlc291cmNl
UHJvdmlkZXIocmVzb3VyY2VQcm92aWRlcikKICAgICAsIG1fY29udGV4dChyZXNvdXJjZVByb3Zp
ZGVyLT5ncmFwaGljc0NvbnRleHQzRCgpKQogICAgICwgbV9pc1ZpZXdwb3J0Q2hhbmdlZChmYWxz
ZSkKICAgICAsIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZChmYWxzZSkKQEAgLTI5OCw4MyArMjI1
LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyRnJhbWVidWZmZXIoRHJhd2lu
Z0ZyYW1lJiBmcmFtZSkKICAgICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCk7CiB9CiAKLS8vIHN0YXRpYwotSW50U2l6ZSBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJlbmRlclBhc3NUZXh0dXJlU2l6ZShjb25zdCBDQ1JlbmRlclBhc3MqIHBh
c3MpCi17Ci0gICAgcmV0dXJuIHBhc3MtPm91dHB1dFJlY3QoKS5zaXplKCk7Ci19Ci0KLS8vIHN0
YXRpYwotR0MzRGVudW0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZUZv
cm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRlclBh
c3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nl
c0luRHJhd09yZGVyKQotewotICAgIEhhc2hNYXA8aW50LCBjb25zdCBDQ1JlbmRlclBhc3MqPiBy
ZW5kZXJQYXNzZXNJbkZyYW1lOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbmRlclBhc3Nlc0luRnJhbWUu
c2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdP
cmRlcltpXSk7Ci0KLSAgICBWZWN0b3I8aW50PiBwYXNzZXNUb0RlbGV0ZTsKLSAgICBIYXNoTWFw
PGludCwgT3duUHRyPENhY2hlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRv
cjsKLSAgICBmb3IgKHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7
IHBhc3NJdGVyYXRvciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0
b3IpIHsKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJl
bmRlclBhc3Nlc0luRnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAo
IXJlbmRlclBhc3NJbkZyYW1lKSB7Ci0gICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQo
cGFzc0l0ZXJhdG9yLT5maXJzdCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJlbmRlclBhc3NUZXh0dXJl
U2l6ZShyZW5kZXJQYXNzSW5GcmFtZSk7Ci0gICAgICAgIEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0
ID0gcmVuZGVyUGFzc1RleHR1cmVGb3JtYXQocmVuZGVyUGFzc0luRnJhbWUpOwotICAgICAgICBD
YWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gcGFzc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7Ci0gICAg
ICAgIEFTU0VSVCh0ZXh0dXJlKTsKLQotICAgICAgICBpZiAodGV4dHVyZS0+aWQoKSAmJiAodGV4
dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkU2l6ZSB8fCB0ZXh0dXJlLT5mb3JtYXQoKSAhPSByZXF1
aXJlZEZvcm1hdCkpCi0gICAgICAgICAgICB0ZXh0dXJlLT5mcmVlKCk7Ci0gICAgfQotCi0gICAg
Ly8gRGVsZXRlIFJlbmRlclBhc3MgdGV4dHVyZXMgZnJvbSB0aGUgcHJldmlvdXMgZnJhbWUgdGhh
dCB3aWxsIG5vdCBiZSB1c2VkIGFnYWluLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFz
c2VzVG9EZWxldGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnJl
bW92ZShwYXNzZXNUb0RlbGV0ZVtpXSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJl
bmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9yZW5k
ZXJQYXNzVGV4dHVyZXMuY29udGFpbnMocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCkp
KSB7Ci0gICAgICAgICAgICBPd25QdHI8Q2FjaGVkVGV4dHVyZT4gdGV4dHVyZSA9IENhY2hlZFRl
eHR1cmU6OmNyZWF0ZShtX3Jlc291cmNlUHJvdmlkZXIpOwotICAgICAgICAgICAgbV9yZW5kZXJQ
YXNzVGV4dHVyZXMuc2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCB0ZXh0dXJl
LnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3QK
LXsKLSAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0
KGlkKTsKLSAgICByZXR1cm4gdGV4dHVyZSAmJiB0ZXh0dXJlLT5pZCgpICYmIHRleHR1cmUtPmlz
Q29tcGxldGUoKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdGcmFtZShj
b25zdCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlciwgY29uc3QgQ0NS
ZW5kZXJQYXNzSWRIYXNoTWFwJiByZW5kZXJQYXNzZXNCeUlkKQotewotICAgIGNvbnN0IENDUmVu
ZGVyUGFzcyogcm9vdFJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5sYXN0KCk7
Ci0gICAgQVNTRVJUKHJvb3RSZW5kZXJQYXNzKTsKLQotICAgIERyYXdpbmdGcmFtZSBmcmFtZTsK
LSAgICBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkID0gJnJlbmRlclBhc3Nlc0J5SWQ7Ci0gICAgZnJh
bWUucm9vdFJlbmRlclBhc3MgPSByb290UmVuZGVyUGFzczsKLQotICAgIGZyYW1lLnJvb3REYW1h
Z2VSZWN0ID0gbV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCA/IGZyYW1lLnJvb3RSZW5k
ZXJQYXNzLT5kYW1hZ2VSZWN0KCkgOiBmcmFtZS5yb290UmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgp
OwotICAgIGZyYW1lLnJvb3REYW1hZ2VSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHZpZXdwb3J0U2l6ZSgpKSk7Ci0KLSAgICBiZWdpbkRyYXdpbmdGcmFtZSgpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7
ICsraSkKLSAgICAgICAgZHJhd1JlbmRlclBhc3MoZnJhbWUsIHJlbmRlclBhc3Nlc0luRHJhd09y
ZGVyW2ldKTsKLQotICAgIGZpbmlzaERyYXdpbmdGcmFtZSgpOwotCi0gICAgbV9zd2FwQnVmZmVy
UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnJvb3REYW1hZ2VSZWN0KSk7Ci19Ci0K
LXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSgpCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJiBmcmFt
ZSkKIHsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBmcmFtZWJ1ZmZlciBpcyBhdXRv
bWF0aWNhbGx5IHJlY3JlYXRlZCBvbiBmaXJzdCB1c2UKICAgICBlbnN1cmVGcmFtZWJ1ZmZlcigp
OwpAQCAtNDA4LDM5ICsyNTksOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZG9Ob09w
KCkKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogfQogCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFtZSwg
Y29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDRHJhd1F1YWQqIHF1YWQp
CiB7Ci0gICAgaWYgKCF1c2VSZW5kZXJQYXNzKGZyYW1lLCByZW5kZXJQYXNzKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRmxvYXRSZWN0IHNjaXNzb3JSZWN0ID0gcmVuZGVyUGFzcy0+b3V0cHV0
UmVjdCgpOwotICAgIGlmIChmcmFtZS5yb290RGFtYWdlUmVjdCAhPSBmcmFtZS5yb290UmVuZGVy
UGFzcy0+b3V0cHV0UmVjdCgpKSB7Ci0gICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlu
dmVyc2VUcmFuc2Zvcm1Ub1Jvb3QgPSByZW5kZXJQYXNzLT50cmFuc2Zvcm1Ub1Jvb3RUYXJnZXQo
KS5pbnZlcnNlKCk7Ci0gICAgICAgIHNjaXNzb3JSZWN0LmludGVyc2VjdChDQ01hdGhVdGlsOjpw
cm9qZWN0Q2xpcHBlZFJlY3QoaW52ZXJzZVRyYW5zZm9ybVRvUm9vdCwgZnJhbWUucm9vdERhbWFn
ZVJlY3QpKTsKLSAgICB9Ci0KLSAgICBpZiAoc2Npc3NvclJlY3QgIT0gcmVuZGVyUGFzcy0+b3V0
cHV0UmVjdCgpKQotICAgICAgICBzZXRTY2lzc29yVG9SZWN0KGZyYW1lLCBlbmNsb3NpbmdJbnRS
ZWN0KHNjaXNzb3JSZWN0KSk7Ci0gICAgZWxzZQotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotCi0gICAg
Y2xlYXJGcmFtZWJ1ZmZlcihmcmFtZSk7Ci0KLSAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlz
dCA9IHJlbmRlclBhc3MtPnF1YWRMaXN0KCk7Ci0gICAgZm9yIChDQ1F1YWRMaXN0Ojpjb25zdEJh
Y2tUb0Zyb250SXRlcmF0b3IgaXQgPSBxdWFkTGlzdC5iYWNrVG9Gcm9udEJlZ2luKCk7IGl0ICE9
IHF1YWRMaXN0LmJhY2tUb0Zyb250RW5kKCk7ICsraXQpCi0gICAgICAgIGRyYXdRdWFkKGZyYW1l
LCBpdC0+Z2V0KCksIHNjaXNzb3JSZWN0KTsKLQotICAgIENhY2hlZFRleHR1cmUqIHRleHR1cmUg
PSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQoKSk7Ci0gICAgaWYgKHRl
eHR1cmUpCi0gICAgICAgIHRleHR1cmUtPnNldElzQ29tcGxldGUoIXJlbmRlclBhc3MtPmhhc09j
Y2x1c2lvbkZyb21PdXRzaWRlVGFyZ2V0U3VyZmFjZSgpKTsKLX0KLQotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDRHJhd1F1
YWQqIHF1YWQsIEZsb2F0UmVjdCBzY2lzc29yUmVjdCkKLXsKLSAgICBzY2lzc29yUmVjdC5pbnRl
cnNlY3QocXVhZC0+Y2xpcHBlZFJlY3RJblRhcmdldCgpKTsKLSAgICBpZiAoc2Npc3NvclJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAocXVhZC0+bmVlZHNCbGVuZGlu
ZygpKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpKTsKICAgICBlbHNlCkBAIC02MzIsNyArNDUyLDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1l
LCBjb25zdCBDQ1JlbmQKICAgICByZW5kZXJNYXRyaXgudHJhbnNsYXRlKDAuNSAqIHF1YWQtPnF1
YWRSZWN0KCkud2lkdGgoKSArIHF1YWQtPnF1YWRSZWN0KCkueCgpLCAwLjUgKiBxdWFkLT5xdWFk
UmVjdCgpLmhlaWdodCgpICsgcXVhZC0+cXVhZFJlY3QoKS55KCkpOwogICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGRldmljZU1hdHJpeCA9IHJlbmRlck1hdHJpeDsKICAgICBkZXZpY2VNYXRy
aXguc2NhbGVOb25Vbmlmb3JtKHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSwgcXVhZC0+cXVhZFJl
Y3QoKS5oZWlnaHQoKSk7Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudHNEZXZp
Y2VUcmFuc2Zvcm0gPSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChmcmFtZS53aW5kb3dNYXRyaXgg
KiBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ICogZGV2aWNlTWF0cml4KS50bzJkVHJhbnNmb3JtKCk7
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudHNEZXZpY2VUcmFuc2Zvcm0gPSBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChmcmFtZS5jYW52YXNNYXRyaXggKiBmcmFtZS5wcm9qZWN0
aW9uTWF0cml4ICogZGV2aWNlTWF0cml4KS50bzJkVHJhbnNmb3JtKCk7CiAKICAgICAvLyBDYW4g
b25seSBkcmF3IHN1cmZhY2UgaWYgZGV2aWNlIG1hdHJpeCBpcyBpbnZlcnRpYmxlLgogICAgIGlm
ICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCkBAIC04MzQsNyArNjU0
LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZChEcmF3aW5nRnJh
bWUmIGZyYW1lLCBjb25zdCBDQ1RpbGVEcmF3UXUKIAogCiAgICAgRmxvYXRRdWFkIGxvY2FsUXVh
ZDsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VUcmFuc2Zvcm0gPSBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeChmcmFtZS53aW5kb3dNYXRyaXggKiBmcmFtZS5wcm9qZWN0aW9uTWF0
cml4ICogcXVhZC0+cXVhZFRyYW5zZm9ybSgpKS50bzJkVHJhbnNmb3JtKCk7CisgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggZGV2aWNlVHJhbnNmb3JtID0gV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgoZnJhbWUuY2FudmFzTWF0cml4ICogZnJhbWUucHJvamVjdGlvbk1hdHJpeCAqIHF1YWQtPnF1
YWRUcmFuc2Zvcm0oKSkudG8yZFRyYW5zZm9ybSgpOwogICAgIGlmICghZGV2aWNlVHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTExMzYsOCArOTU2LDExIEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SU9TdXJmYWNlUXVhZChEcmF3aW5nRnJh
bWUmIGZyYW1lLCBjb25zdCBDQ0lPU3VyCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5i
aW5kVGV4dHVyZShFeHRlbnNpb25zM0Q6OlRFWFRVUkVfUkVDVEFOR0xFX0FSQiwgMCkpOwogfQog
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKCkKK3ZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJiBm
cmFtZSkKIHsKKyAgICBtX2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2suY2xlYXIoKTsKKyAgICBtX3N3
YXBCdWZmZXJSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoZnJhbWUucm9vdERhbWFnZVJlY3Qp
KTsKKwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwogfQpAQCAtMTE4NywxMCArMTAxMCw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTaGFkZXJPcGFjaXR5KGZsb2F0IG9wYWNp
dHksIGludCBhbHBoYUxvY2F0aW9uKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1F1YWRHZW9tZXRyeShEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIHF1YWRSZWN0
LCBpbnQgbWF0cml4TG9jYXRpb24pCiB7Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVh
ZE1hdHJpeCA9IGRyYXdUcmFuc2Zvcm07Ci0gICAgcXVhZE1hdHJpeC50cmFuc2xhdGUoMC41ICog
cXVhZFJlY3Qud2lkdGgoKSArIHF1YWRSZWN0LngoKSwgMC41ICogcXVhZFJlY3QuaGVpZ2h0KCkg
KyBxdWFkUmVjdC55KCkpOwotICAgIHF1YWRNYXRyaXguc2NhbGVOb25Vbmlmb3JtKHF1YWRSZWN0
LndpZHRoKCksIHF1YWRSZWN0LmhlaWdodCgpKTsKLQorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHF1YWRNYXRyaXggPSBxdWFkUmVjdFRyYW5zZm9ybShkcmF3VHJhbnNmb3JtLCBxdWFkUmVj
dCk7CiAgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKICAgICB0b0dMTWF0cml4KCZnbE1h
dHJpeFswXSwgZnJhbWUucHJvamVjdGlvbk1hdHJpeCAqIHF1YWRNYXRyaXgpOwogICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihtYXRyaXhMb2NhdGlvbiwgMSwg
ZmFsc2UsICZnbE1hdHJpeFswXSkpOwpAQCAtMTM4MywzMSArMTIwMyw2IEBAIGJvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclRleHR1cmUoQ0NTY29wZWRUZXh0dXJlKiB0
ZXh0dXJlLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppc0N1cnJlbnRSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IEND
UmVuZGVyUGFzcyogcmVuZGVyUGFzcykKLXsKLSAgICByZXR1cm4gZnJhbWUuY3VycmVudFJlbmRl
clBhc3MgPT0gcmVuZGVyUGFzcyAmJiAhZnJhbWUuY3VycmVudFRleHR1cmU7Ci19Ci0KLWJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYgZnJhbWUs
IGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKLXsKLSAgICBmcmFtZS5jdXJyZW50UmVu
ZGVyUGFzcyA9IHJlbmRlclBhc3M7Ci0gICAgZnJhbWUuY3VycmVudFRleHR1cmUgPSAwOwotCi0g
ICAgaWYgKHJlbmRlclBhc3MgPT0gZnJhbWUucm9vdFJlbmRlclBhc3MpIHsKLSAgICAgICAgZnJh
bWUuY3VycmVudEZyYW1lYnVmZmVyTG9jay5jbGVhcigpOwotICAgICAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApKTsKLSAgICAgICAgc2V0RHJhd0ZyYW1lYnVmZmVyUmVjdChmcmFtZSwgcmVuZGVyUGFz
cy0+b3V0cHV0UmVjdCgpLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5k
ZXJQYXNzLT5pZCgpKTsKLSAgICBBU1NFUlQodGV4dHVyZSk7Ci0gICAgaWYgKCF0ZXh0dXJlLT5p
ZCgpICYmICF0ZXh0dXJlLT5hbGxvY2F0ZShDQ1JlbmRlcmVyOjpJbXBsUG9vbCwgcmVuZGVyUGFz
c1RleHR1cmVTaXplKHJlbmRlclBhc3MpLCByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQ
YXNzKSwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VGcmFtZWJ1ZmZlcikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUo
ZnJhbWUsIHRleHR1cmUsIHJlbmRlclBhc3MtPm91dHB1dFJlY3QoKSk7Ci19Ci0KIGJvb2wgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1c2VTY29wZWRUZXh0dXJlKERyYXdpbmdGcmFtZSYgZnJhbWUs
IGNvbnN0IENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRS
ZWN0KQogewogICAgIEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsKQEAgLTE0MTcsMTMgKzEyMTIsMTkg
QEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNjb3BlZFRleHR1cmUoRHJhd2luZ0Zy
YW1lJiBmcmFtZSwgY29uc3QgQ0NTY29wZWQKICAgICByZXR1cm4gYmluZEZyYW1lYnVmZmVyVG9U
ZXh0dXJlKGZyYW1lLCB0ZXh0dXJlLCB2aWV3cG9ydFJlY3QpOwogfQogCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVmZmVyVG9PdXRwdXRTdXJmYWNlKERyYXdpbmdGcmFt
ZSYgZnJhbWUpCit7CisgICAgbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrLmNsZWFyKCk7CisgICAg
R0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Cit9CisKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpi
aW5kRnJhbWVidWZmZXJUb1RleHR1cmUoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NTY29w
ZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBmcmFtZWJ1ZmZlclJlY3QpCiB7CiAg
ICAgQVNTRVJUKHRleHR1cmUtPmlkKCkpOwogCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX29mZnNj
cmVlbkZyYW1lYnVmZmVySWQpKTsKLSAgICBmcmFtZS5jdXJyZW50RnJhbWVidWZmZXJMb2NrID0g
YWRvcHRQdHIobmV3IENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGUobV9yZXNvdXJjZVByb3Zp
ZGVyLCB0ZXh0dXJlLT5pZCgpKSk7Ci0gICAgdW5zaWduZWQgdGV4dHVyZUlkID0gZnJhbWUuY3Vy
cmVudEZyYW1lYnVmZmVyTG9jay0+dGV4dHVyZUlkKCk7CisgICAgbV9jdXJyZW50RnJhbWVidWZm
ZXJMb2NrID0gYWRvcHRQdHIobmV3IENDU2NvcGVkTG9ja1Jlc291cmNlRm9yV3JpdGUobV9yZXNv
dXJjZVByb3ZpZGVyLCB0ZXh0dXJlLT5pZCgpKSk7CisgICAgdW5zaWduZWQgdGV4dHVyZUlkID0g
bV9jdXJyZW50RnJhbWVidWZmZXJMb2NrLT50ZXh0dXJlSWQoKTsKICAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkLCAwKSk7CiAKICNpZiAhZGVmaW5lZCAoIE5E
RUJVRyApCkBAIC0xNDMzLDUxICsxMjM0LDMyIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QKICAg
ICB9CiAjZW5kaWYKIAotICAgIHNldERyYXdGcmFtZWJ1ZmZlclJlY3QoZnJhbWUsIGZyYW1lYnVm
ZmVyUmVjdCwgZmFsc2UpOworICAgIGZyYW1lLmluaXRpYWxpemVNYXRyaWNlcyhmcmFtZWJ1ZmZl
clJlY3QsIGZhbHNlKTsKKyAgICBzZXREcmF3Vmlld3BvcnRTaXplKGZyYW1lYnVmZmVyUmVjdC5z
aXplKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFNldHMgdGhlIHNjaXNzb3IgcmVn
aW9uIHRvIHRoZSBnaXZlbiByZWN0YW5nbGUuIFRoZSBjb29yZGluYXRlIHN5c3RlbSBmb3IgdGhl
Ci0vLyBzY2lzc29yUmVjdCBoYXMgaXRzIG9yaWdpbiBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9m
IHRoZSBjdXJyZW50IHZpc2libGUgcmVjdC4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpz
ZXRTY2lzc29yVG9SZWN0KERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlY3QmIHNjaXNz
b3JSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmVuYWJsZVNjaXNzb3JUZXN0UmVj
dChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkKIHsKLSAgICBJbnRSZWN0IGZyYW1lYnVmZmVy
T3V0cHV0UmVjdCA9IGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7Ci0KICAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKSk7Ci0KLSAgICAvLyBUaGUgc2Npc3NvciBjb29yZGluYXRlcyBtdXN0IGJlIHN1
cHBsaWVkIGluIHZpZXdwb3J0IHNwYWNlIHNvIHdlIG5lZWQgdG8gb2Zmc2V0Ci0gICAgLy8gYnkg
dGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGN1cnJl
bnQgcmVuZGVyIHBhc3MuCi0gICAgaW50IHNjaXNzb3JYID0gc2Npc3NvclJlY3QueCgpIC0gZnJh
bWVidWZmZXJPdXRwdXRSZWN0LngoKTsKLSAgICAvLyBXaGVuIHJlbmRlcmluZyB0byB0aGUgZGVm
YXVsdCByZW5kZXIgc3VyZmFjZSB3ZSdyZSByZW5kZXJpbmcgdXBzaWRlIGRvd24gc28gdGhlIHRv
cAotICAgIC8vIG9mIHRoZSBHTCBzY2lzc29yIGlzIHRoZSBib3R0b20gb2Ygb3VyIGxheWVyLgot
ICAgIC8vIEJ1dCwgaWYgcmVuZGVyaW5nIHRvIG9mZnNjcmVlbiB0ZXh0dXJlLCB3ZSByZXZlcnNl
IG91ciBzZW5zZSBvZiAndXBzaWRlIGRvd24nLgotICAgIGludCBzY2lzc29yWTsKLSAgICBpZiAo
aXNDdXJyZW50UmVuZGVyUGFzcyhmcmFtZSwgZnJhbWUucm9vdFJlbmRlclBhc3MpKQotICAgICAg
ICBzY2lzc29yWSA9IGZyYW1lYnVmZmVyT3V0cHV0UmVjdC5oZWlnaHQoKSAtIChzY2lzc29yUmVj
dC5tYXhZKCkgLSBmcmFtZWJ1ZmZlck91dHB1dFJlY3QueSgpKTsKLSAgICBlbHNlCi0gICAgICAg
IHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gZnJhbWVidWZmZXJPdXRwdXRSZWN0LnkoKTsK
LSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnNjaXNzb3Ioc2Npc3NvclgsIHNjaXNzb3JZ
LCBzY2lzc29yUmVjdC53aWR0aCgpLCBzY2lzc29yUmVjdC5oZWlnaHQoKSkpOworICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+c2Npc3NvcihzY2lzc29yUmVjdC54KCksIHNjaXNzb3JSZWN0
LnkoKSwgc2Npc3NvclJlY3Qud2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsKIH0KIAot
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Om1ha2VDb250ZXh0Q3VycmVudCgpCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlzYWJsZVNjaXNzb3JUZXN0KCkKIHsKLSAgICByZXR1cm4g
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2Nv
bnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogfQogCi0v
LyBTZXRzIHRoZSBjb29yZGluYXRlIHJhbmdlIG9mIGNvbnRlbnQgdGhhdCBlbmRzIGJlaW5nIGRy
YXduIG9udG8gdGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZS4KLS8vIFRoZSB0YXJnZXQgcmVuZGVy
IHN1cmZhY2UgaXMgYXNzdW1lZCB0byBoYXZlIGFuIG9yaWdpbiBhdCAwLCAwIGFuZCB0aGUgd2lk
dGggYW5kIGhlaWdodCBvZgotLy8gb2YgdGhlIGRyYXdSZWN0Lgotdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnNldERyYXdGcmFtZWJ1ZmZlclJlY3QoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29u
c3QgSW50UmVjdCYgZHJhd1JlY3QsIGJvb2wgZmxpcFkpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6c2V0RHJhd1ZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiB7
Ci0gICAgaWYgKGZsaXBZKQotICAgICAgICBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9N
YXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5tYXhYKCksIGRyYXdSZWN0Lm1heFkoKSwgZHJh
d1JlY3QueSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGZyYW1lLnByb2plY3Rpb25NYXRyaXggPSBv
cnRob01hdHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0Lm1heFgoKSwgZHJhd1JlY3QueSgpLCBk
cmF3UmVjdC5tYXhZKCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dmlld3BvcnQo
MCwgMCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpKTsKLSAgICBmcmFtZS53
aW5kb3dNYXRyaXggPSBzY3JlZW5NYXRyaXgoMCwgMCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1Jl
Y3QuaGVpZ2h0KCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dmlld3BvcnQoMCwg
MCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOwogfQogCiti
b29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KIAogYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKIHsKQEAgLTE0ODksNyAr
MTI3MSw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2Jq
ZWN0cygpCiAKICAgICAvLyBXZSB3aWxsIGFsd2F5cyBuZWVkIHRoZXNlIHByb2dyYW1zIHRvIHJl
bmRlciwgc28gY3JlYXRlIHRoZSBwcm9ncmFtcyBlYWdlcmx5IHNvIHRoYXQgdGhlIHNoYWRlciBj
b21waWxhdGlvbiBjYW4KICAgICAvLyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhl
ciBwcm9ncmFtcyBhcmUgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLgotICAgIG1fc2hh
cmVkR2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dCkpOwor
ICAgIG1fc2hhcmVkR2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29u
dGV4dCwgcXVhZFZlcnRleFJlY3QoKSkpOwogICAgIG1fcmVuZGVyUGFzc1Byb2dyYW0gPSBhZG9w
dFB0cihuZXcgUmVuZGVyUGFzc1Byb2dyYW0obV9jb250ZXh0KSk7CiAgICAgbV90aWxlUHJvZ3Jh
bSA9IGFkb3B0UHRyKG5ldyBUaWxlUHJvZ3JhbShtX2NvbnRleHQpKTsKICAgICBtX3RpbGVQcm9n
cmFtT3BhcXVlID0gYWRvcHRQdHIobmV3IFRpbGVQcm9ncmFtT3BhcXVlKG1fY29udGV4dCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAxNzkxMDMzNTlhNDliNGY5NzA4
YjkxNGM5ODJjMGZjZWRhNTA2MDUyLi5mNTc2YmU3OWM4MTllYTJhNjI2NzZiZGUzMDg0Zjc3MjUw
ZWJlNzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMzgsOSArMzgs
OSBAQAogI2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKICNpbmNsdWRlICJjYy9DQ0NoZWNrZXJi
b2FyZERyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisj
aW5jbHVkZSAiY2MvQ0NEaXJlY3RSZW5kZXJlci5oIgogI2luY2x1ZGUgImNjL0NDSU9TdXJmYWNl
RHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oIgotI2luY2x1
ZGUgImNjL0NDUmVuZGVyZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5o
IgogI2luY2x1ZGUgImNjL0NDU3RyZWFtVmlkZW9EcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0ND
VGV4dHVyZURyYXdRdWFkLmgiCkBAIC01OSw3ICs1OSw3IEBAIGNsYXNzIEdlb21ldHJ5QmluZGlu
ZzsKIGNsYXNzIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbjsKIAogLy8gQ2xhc3Mg
dGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdM
LgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIENDUmVuZGVyZXIsCitjbGFz
cyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgQ0NEaXJlY3RSZW5kZXJlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNEOjpXZWJHcmFwaGljc1N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0Q6OldlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVN
ICwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2sgewpAQCAtNzcsMTEg
Kzc3LDYgQEAgcHVibGljOgogCiAgICAgY29uc3QgRmxvYXRRdWFkJiBzaGFyZWRHZW9tZXRyeVF1
YWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5UXVhZDsgfQogCi0gICAgdmlydHVh
bCB2b2lkIGRlY2lkZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVy
UGFzc0xpc3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaGF2ZUNhY2hlZFJlc291cmNl
c0ZvclJlbmRlclBhc3NJZChpbnQgaWQpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2
b2lkIGRyYXdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQYXNz
SWRIYXNoTWFwJikgT1ZFUlJJREU7Ci0KICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZp
bmlzaAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSBPVkVSUklERTsKIApAQCAtMTAzLDQ0ICs5
OCwyNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSBPVkVS
UklERTsKIAotICAgIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb3VyY2VQcm92aWRlcjsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKENDUmVuZGVyZXJDbGllbnQqLCBDQ1Jlc291cmNlUHJvdmlkZXIqLCBU
ZXh0dXJlVXBsb2FkZXJPcHRpb24pOwogCi0KICAgICBib29sIGlzRnJhbWVidWZmZXJEaXNjYXJk
ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7IH0KICAgICBib29s
IGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgcmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwog
Ci1wcml2YXRlOgotICAgIHN0cnVjdCBEcmF3aW5nRnJhbWUgewotICAgICAgICBjb25zdCBDQ1Jl
bmRlclBhc3NJZEhhc2hNYXAqIHJlbmRlclBhc3Nlc0J5SWQ7Ci0gICAgICAgIGNvbnN0IENDUmVu
ZGVyUGFzcyogcm9vdFJlbmRlclBhc3M7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogY3Vy
cmVudFJlbmRlclBhc3M7Ci0gICAgICAgIGNvbnN0IENDU2NvcGVkVGV4dHVyZSogY3VycmVudFRl
eHR1cmU7Ci0gICAgICAgIE93blB0cjxDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlPiBjdXJy
ZW50RnJhbWVidWZmZXJMb2NrOwotCi0gICAgICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsK
LQotICAgICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRy
aXg7Ci0gICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggd2luZG93TWF0cml4
OwotCi0gICAgICAgIERyYXdpbmdGcmFtZSgpCi0gICAgICAgICAgICA6IHJvb3RSZW5kZXJQYXNz
KDApCi0gICAgICAgICAgICAsIGN1cnJlbnRSZW5kZXJQYXNzKDApCi0gICAgICAgICAgICAsIGN1
cnJlbnRUZXh0dXJlKDApCi0gICAgICAgIHsgfQotICAgIH07CisgICAgdmlydHVhbCB2b2lkIGJp
bmRGcmFtZWJ1ZmZlclRvT3V0cHV0U3VyZmFjZShEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERyYXdpbmdGcmFtZSYsIGNv
bnN0IENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldERyYXdWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6
ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbmFibGVTY2lzc29yVGVzdFJlY3QoY29u
c3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNh
YmxlU2Npc3NvclRlc3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZWJ1
ZmZlcihEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1F1YWQo
RHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NEcmF3UXVhZCopIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBiZWdpbkRyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKERyYXdpbmdGcmFtZSYpIE9WRVJSSURFOwogCitw
cml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICB2b2lkIGJlZ2luRHJhd2luZ0ZyYW1l
KCk7Ci0gICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRl
clBhc3MqKTsKLSAgICB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpOwotCi0gICAgdm9pZCBkcmF3
UXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0RyYXdRdWFkKiwgRmxvYXRSZWN0IHNjaXNzb3JS
ZWN0KTsKICAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0
IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQo
RHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7CiAgICAgUGFzc093
blB0cjxDQ1Njb3BlZFRleHR1cmU+IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhEcmF3aW5nRnJhbWUm
LCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucyYsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRy
YW5zZm9ybSk7CkBAIC0xNTgsMTggKzEzNiw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvcHlU
ZXh0dXJlVG9GcmFtZWJ1ZmZlcihEcmF3aW5nRnJhbWUmLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01hdHJp
eCk7CiAKLSAgICB2b2lkIHNldFNjaXNzb3JUb1JlY3QoRHJhd2luZ0ZyYW1lJiwgY29uc3QgSW50
UmVjdCYpOwotCi0gICAgdm9pZCBzZXREcmF3RnJhbWVidWZmZXJSZWN0KERyYXdpbmdGcmFtZSYs
IGNvbnN0IEludFJlY3QmLCBib29sIGZsaXBZKTsKLQotICAgIC8vIFRoZSBjdXJyZW50IGRyYXdp
bmcgdGFyZ2V0IGlzIGVpdGhlciBhIFJlbmRlclBhc3Mgb3IgU2NvcGVkVGV4dHVyZS4gVXNlIHRo
ZXNlIGZ1bmN0aW9ucyB0byBzd2l0Y2ggdG8gYSBuZXcgZHJhd2luZyB0YXJnZXQuCi0gICAgYm9v
bCB1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVuZGVyUGFzcyopOwogICAg
IGJvb2wgdXNlU2NvcGVkVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRleHR1
cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOwotICAgIGJvb2wgaXNDdXJyZW50UmVu
ZGVyUGFzcyhEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3MqKTsKLQotICAgIGJvb2wg
YmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDU2NvcGVkVGV4
dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7Ci0KLSAgICB2b2lkIGNsZWFyRnJh
bWVidWZmZXIoRHJhd2luZ0ZyYW1lJik7CiAKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogCkBAIC0xODgsOSArMTU1LDYgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJHcmFwaGljc0NvbnRl
eHQzRDo6V2ViR3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrIGltcGxlbWVudGF0aW9uLgogICAg
IHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkgT1ZFUlJJREU7CiAKLSAgICBzdGF0aWMgSW50
U2l6ZSByZW5kZXJQYXNzVGV4dHVyZVNpemUoY29uc3QgQ0NSZW5kZXJQYXNzKik7Ci0gICAgc3Rh
dGljIEdDM0RlbnVtIHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KGNvbnN0IENDUmVuZGVyUGFzcyop
OwotCiAgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllczsKIAogICAg
IHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKQEAgLTE5OCw4ICsxNjIsNiBAQCBw
cml2YXRlOgogICAgIE93blB0cjxHZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2VvbWV0cnk7CiAg
ICAgRmxvYXRRdWFkIG1fc2hhcmVkR2VvbWV0cnlRdWFkOwogCi0gICAgY2xhc3MgQ2FjaGVkVGV4
dHVyZTsKLQogICAgIC8vIFRoaXMgYmxvY2sgb2YgYmluZGluZ3MgZGVmaW5lcyBhbGwgb2YgdGhl
IHByb2dyYW1zIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IgaXRzZWxmLgogCiAgICAgLy8gVGlsZWQg
bGF5ZXIgc2hhZGVycy4KQEAgLTI3MywxMiArMjM1LDkgQEAgcHJpdmF0ZToKIAogICAgIE93blB0
cjxTb2xpZENvbG9yUHJvZ3JhbT4gbV9zb2xpZENvbG9yUHJvZ3JhbTsKIAotICAgIENDUmVzb3Vy
Y2VQcm92aWRlciogbV9yZXNvdXJjZVByb3ZpZGVyOwogICAgIE93blB0cjxBY2NlbGVyYXRlZFRl
eHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsKICAgICBPd25QdHI8VGV4dHVyZVVwbG9hZGVy
PiBtX3RleHR1cmVVcGxvYWRlcjsKIAotICAgIEhhc2hNYXA8aW50LCBPd25QdHI8Q2FjaGVkVGV4
dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0dXJlczsKLQogICAgIFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0QqIG1fY29udGV4dDsKIAogICAgIEludFJlY3QgbV9zd2FwQnVmZmVyUmVjdDsKQEAg
LTI4Nyw2ICsyNDYsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1VzaW5nQmluZFVuaWZvcm07
CiAgICAgYm9vbCBtX3Zpc2libGU7CiAgICAgVGV4dHVyZVVwbG9hZGVyT3B0aW9uIG1fdGV4dHVy
ZVVwbG9hZGVyU2V0dGluZzsKKworICAgIE93blB0cjxDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldy
aXRlPiBtX2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2s7CiB9OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaApp
bmRleCBhZmUyZWMwMjU2NGFkN2FiZGM4MDIxNTdlZmY3YmNlODk2Njg3YzRmLi42OGIwZjE2NTY1
Nzc1NzY4NDllYmY0NzU1Y2ZhNGMxNDM5Y2Y1Mjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oCkBAIC01
MSw3ICs1MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUoUGFyYW1l
dGVycykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKIAotcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgflRleHR1cmVDb3BpZXIoKSB7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVVcGxvYWRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZVVwbG9hZGVy
LmgKaW5kZXggN2E1MTY1M2Y4YWNkMTAwMzJlYWQxMWU0YzQ2ZTdjMmEyNDkyMWRhZC4uNDYyMjJm
MTFlYjRkODlmMDZkYzY3ODUwODBhMzk3MzBiMGNkOGZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZVVwbG9hZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZVVwbG9hZGVy
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgVGV4dHVyZVVwbG9hZGVyX2gKIAogI2luY2x1
ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Jlc291cmNlUHJvdmlk
ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NSw2ICs0NiwyNCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHVwbG9hZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiwgUGFy
YW1ldGVycykgPSAwOwogfTsKIAorY2xhc3MgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIgOiBw
dWJsaWMgVGV4dHVyZVVwbG9hZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVbnRocm90
dGxlZFRleHR1cmVVcGxvYWRlcik7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8VW50
aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyKCkpOworICAgIH0KKyAgICB2
aXJ0dWFsIH5VbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcigpIHsgfQorCisgICAgdmlydHVhbCBi
b29sIGlzQnVzeSgpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lk
IGJlZ2luVXBsb2FkcygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBlbmRVcGxvYWRz
KCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwbG9hZFRleHR1cmUoQ0NSZXNvdXJj
ZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBQYXJhbWV0ZXJzIHVwbG9hZCkgT1ZFUlJJREUg
eyB1cGxvYWQudGV4dHVyZS0+dXBkYXRlUmVjdChyZXNvdXJjZVByb3ZpZGVyLCB1cGxvYWQuc291
cmNlUmVjdCwgdXBsb2FkLmRlc3RSZWN0KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVW50aHJvdHRs
ZWRUZXh0dXJlVXBsb2FkZXIoKSB7IH0KK307CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRl
cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGlyZWN0UmVuZGVyZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0MGE1ZGI0NmU1NTNmNmNjM2I4M2NjNjgx
M2ZiYmZjYTg1MDZkMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDIy
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDRGlyZWN0UmVuZGVyZXIu
aCIKKworI2luY2x1ZGUgImNjL0NDTWF0aFV0aWwuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguaD4KKwordXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDsKKworc3RhdGljIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXgo
ZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wKQoreworICAg
IC8vIFVzZSB0aGUgc3RhbmRhcmQgZm9ybXVsYSB0byBtYXAgdGhlIGNsaXBwaW5nIGZydXN0dW0g
dG8gdGhlIGN1YmUgZnJvbQorICAgIC8vIFstMSwgLTEsIC0xXSB0byBbMSwgMSwgMV0uCisgICAg
ZmxvYXQgZGVsdGFYID0gcmlnaHQgLSBsZWZ0OworICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJv
dHRvbTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qOworICAgIGlmICghZGVsdGFY
IHx8ICFkZWx0YVkpCisgICAgICAgIHJldHVybiBwcm9qOworICAgIHByb2ouc2V0TTExKDIuMGYg
LyBkZWx0YVgpOworICAgIHByb2ouc2V0TTQxKC0ocmlnaHQgKyBsZWZ0KSAvIGRlbHRhWCk7Cisg
ICAgcHJvai5zZXRNMjIoMi4wZiAvIGRlbHRhWSk7CisgICAgcHJvai5zZXRNNDIoLSh0b3AgKyBi
b3R0b20pIC8gZGVsdGFZKTsKKworICAgIC8vIFogY29tcG9uZW50IG9mIHZlcnRpY2VzIGlzIGFs
d2F5cyBzZXQgdG8gemVybyBhcyB3ZSBkb24ndCB1c2UgdGhlIGRlcHRoIGJ1ZmZlcgorICAgIC8v
IHdoaWxlIGRyYXdpbmcuCisgICAgcHJvai5zZXRNMzMoMCk7CisKKyAgICByZXR1cm4gcHJvajsK
K30KKworc3RhdGljIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNhbnZhc01hdHJpeChpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjYW52YXM7CisKKyAgICAvLyBNYXAgdG8gdmlld3BvcnQgcG9zaXRpb24gYW5kIHNjYWxl
IHVwIHRvIHBpeGVsIGNvb3JkaW5hdGVzLgorICAgIGNhbnZhcy50cmFuc2xhdGUzZCh4LCB5LCAw
KTsKKyAgICBjYW52YXMuc2NhbGUzZCh3aWR0aCwgaGVpZ2h0LCAwKTsKKworICAgIC8vIE1hcCBm
cm9tIChbLTEsIC0xXSB0byBbMSwgMV0pIC0+IChbMCwgMF0gdG8gWzEsIDFdKQorICAgIGNhbnZh
cy50cmFuc2xhdGUzZCgwLjUsIDAuNSwgMC41KTsKKyAgICBjYW52YXMuc2NhbGUzZCgwLjUsIDAu
NSwgMC41KTsKKworICAgIHJldHVybiBjYW52YXM7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBDQ0RpcmVjdFJlbmRlcmVyOjpEcmF3aW5nRnJhbWU6OmluaXRpYWxpemVNYXRyaWNl
cyhjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9vbCBmbGlwWSkKK3sKKyAgICBpZiAoZmxpcFkp
CisgICAgICAgIHByb2plY3Rpb25NYXRyaXggPSA6OnByb2plY3Rpb25NYXRyaXgoZHJhd1JlY3Qu
eCgpLCBkcmF3UmVjdC5tYXhYKCksIGRyYXdSZWN0Lm1heFkoKSwgZHJhd1JlY3QueSgpKTsKKyAg
ICBlbHNlCisgICAgICAgIHByb2plY3Rpb25NYXRyaXggPSA6OnByb2plY3Rpb25NYXRyaXgoZHJh
d1JlY3QueCgpLCBkcmF3UmVjdC5tYXhYKCksIGRyYXdSZWN0LnkoKSwgZHJhd1JlY3QubWF4WSgp
KTsKKyAgICBjYW52YXNNYXRyaXggPSA6OmNhbnZhc01hdHJpeCgwLCAwLCBkcmF3UmVjdC53aWR0
aCgpLCBkcmF3UmVjdC5oZWlnaHQoKSk7CisKKyAgICBmbGlwcGVkWSA9IGZsaXBZOworfQorCit2
b2lkIENDRGlyZWN0UmVuZGVyZXI6OkRyYXdpbmdGcmFtZTo6aW5pdGlhbGl6ZVNjaXNzb3JzKCkK
K3sKKyAgICBzY2lzc29yUmVjdEluUmVuZGVyUGFzc1NwYWNlID0gY3VycmVudFJlbmRlclBhc3Mt
Pm91dHB1dFJlY3QoKTsKKyAgICBpZiAocm9vdERhbWFnZVJlY3QgIT0gcm9vdFJlbmRlclBhc3Mt
Pm91dHB1dFJlY3QoKSkgeworICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNl
VHJhbnNmb3JtVG9Sb290ID0gY3VycmVudFJlbmRlclBhc3MtPnRyYW5zZm9ybVRvUm9vdFRhcmdl
dCgpLmludmVyc2UoKTsKKyAgICAgICAgc2Npc3NvclJlY3RJblJlbmRlclBhc3NTcGFjZS5pbnRl
cnNlY3QoQ0NNYXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0KGludmVyc2VUcmFuc2Zvcm1Ub1Jv
b3QsIHJvb3REYW1hZ2VSZWN0KSk7CisgICAgfQorCisgICAgbmVlZFNjaXNzb3IgPSBzY2lzc29y
UmVjdEluUmVuZGVyUGFzc1NwYWNlICE9IGN1cnJlbnRSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7
CisgICAgc2Npc3NvclJlY3RJbkNhbnZhc1NwYWNlID0gZW5jbG9zaW5nSW50UmVjdChzY2lzc29y
UmVjdEluUmVuZGVyUGFzc1NwYWNlKTsKKyAgICAvLyBUaGUgc2Npc3NvciBjb29yZGluYXRlcyBt
dXN0IGJlIHN1cHBsaWVkIGluIHZpZXdwb3J0IHNwYWNlIHNvIHdlIG5lZWQgdG8gb2Zmc2V0Cisg
ICAgLy8gYnkgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2Yg
dGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuCisgICAgSW50UmVjdCBmcmFtZWJ1ZmZlck91dHB1dFJl
Y3QgPSBjdXJyZW50UmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpOworICAgIHNjaXNzb3JSZWN0SW5D
YW52YXNTcGFjZS5zZXRYKHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZS54KCkgLSBmcmFtZWJ1ZmZl
ck91dHB1dFJlY3QueCgpKTsKKyAgICBpZiAoZmxpcHBlZFkgJiYgIWN1cnJlbnRUZXh0dXJlKQor
ICAgICAgICBzY2lzc29yUmVjdEluQ2FudmFzU3BhY2Uuc2V0WShmcmFtZWJ1ZmZlck91dHB1dFJl
Y3QuaGVpZ2h0KCkgLSAoc2Npc3NvclJlY3RJbkNhbnZhc1NwYWNlLm1heFkoKSAtIGZyYW1lYnVm
ZmVyT3V0cHV0UmVjdC55KCkpKTsKKyAgICBlbHNlCisgICAgICAgIHNjaXNzb3JSZWN0SW5DYW52
YXNTcGFjZS5zZXRZKHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZS55KCkgLSBmcmFtZWJ1ZmZlck91
dHB1dFJlY3QueSgpKTsKK30KKwordm9pZCBDQ0RpcmVjdFJlbmRlcmVyOjpkZWNpZGVSZW5kZXJQ
YXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNz
ZXNJbkRyYXdPcmRlcikKK3sKKyAgICBIYXNoTWFwPGludCwgY29uc3QgQ0NSZW5kZXJQYXNzKj4g
cmVuZGVyUGFzc2VzSW5GcmFtZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclBh
c3Nlc0luRHJhd09yZGVyLnNpemUoKTsgKytpKQorICAgICAgICByZW5kZXJQYXNzZXNJbkZyYW1l
LnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgcmVuZGVyUGFzc2VzSW5EcmF3
T3JkZXJbaV0pOworCisgICAgVmVjdG9yPGludD4gcGFzc2VzVG9EZWxldGU7CisgICAgSGFzaE1h
cDxpbnQsIE93blB0cjxDYWNoZWRUZXh0dXJlPiA+Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0
b3I7CisgICAgZm9yIChwYXNzSXRlcmF0b3IgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5iZWdpbigp
OyBwYXNzSXRlcmF0b3IgIT0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZW5kKCk7ICsrcGFzc0l0ZXJh
dG9yKSB7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzc0luRnJhbWUgPSBy
ZW5kZXJQYXNzZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgaWYg
KCFyZW5kZXJQYXNzSW5GcmFtZSkgeworICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5k
KHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBJbnRTaXplJiByZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzVGV4dHVy
ZVNpemUocmVuZGVyUGFzc0luRnJhbWUpOworICAgICAgICBHQzNEZW51bSByZXF1aXJlZEZvcm1h
dCA9IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3NJbkZyYW1lKTsKKyAgICAgICAg
Q2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAg
ICAgICBBU1NFUlQodGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHRleHR1cmUtPmlkKCkgJiYgKHRl
eHR1cmUtPnNpemUoKSAhPSByZXF1aXJlZFNpemUgfHwgdGV4dHVyZS0+Zm9ybWF0KCkgIT0gcmVx
dWlyZWRGb3JtYXQpKQorICAgICAgICAgICAgdGV4dHVyZS0+ZnJlZSgpOworICAgIH0KKworICAg
IC8vIERlbGV0ZSBSZW5kZXJQYXNzIHRleHR1cmVzIGZyb20gdGhlIHByZXZpb3VzIGZyYW1lIHRo
YXQgd2lsbCBub3QgYmUgdXNlZCBhZ2Fpbi4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBh
c3Nlc1RvRGVsZXRlLnNpemUoKTsgKytpKQorICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlcy5y
ZW1vdmUocGFzc2VzVG9EZWxldGVbaV0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIW1fcmVu
ZGVyUGFzc1RleHR1cmVzLmNvbnRhaW5zKHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgp
KSkgeworICAgICAgICAgICAgT3duUHRyPENhY2hlZFRleHR1cmU+IHRleHR1cmUgPSBDYWNoZWRU
ZXh0dXJlOjpjcmVhdGUobV9yZXNvdXJjZVByb3ZpZGVyKTsKKyAgICAgICAgICAgIG1fcmVuZGVy
UGFzc1RleHR1cmVzLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgdGV4dHVy
ZS5yZWxlYXNlKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENDRGlyZWN0UmVuZGVy
ZXI6OmRyYXdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdP
cmRlciwgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwJiByZW5kZXJQYXNzZXNCeUlkKQorewor
ICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRy
YXdPcmRlci5sYXN0KCk7CisgICAgQVNTRVJUKHJvb3RSZW5kZXJQYXNzKTsKKworICAgIERyYXdp
bmdGcmFtZSBmcmFtZTsKKyAgICBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkID0gJnJlbmRlclBhc3Nl
c0J5SWQ7CisgICAgZnJhbWUucm9vdFJlbmRlclBhc3MgPSByb290UmVuZGVyUGFzczsKKyAgICBm
cmFtZS5yb290RGFtYWdlUmVjdCA9IGNhcGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXAgPyBy
b290UmVuZGVyUGFzcy0+ZGFtYWdlUmVjdCgpIDogcm9vdFJlbmRlclBhc3MtPm91dHB1dFJlY3Qo
KTsKKyAgICBmcmFtZS5yb290RGFtYWdlUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6
emVybygpLCB2aWV3cG9ydFNpemUoKSkpOworCisgICAgYmVnaW5EcmF3aW5nRnJhbWUoZnJhbWUp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6
ZSgpOyArK2kpCisgICAgICAgIGRyYXdSZW5kZXJQYXNzKGZyYW1lLCByZW5kZXJQYXNzZXNJbkRy
YXdPcmRlcltpXSk7CisgICAgZmluaXNoRHJhd2luZ0ZyYW1lKGZyYW1lKTsKK30KKwordm9pZCBD
Q0RpcmVjdFJlbmRlcmVyOjpkcmF3UmVuZGVyUGFzcyhEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25z
dCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCit7CisgICAgaWYgKCF1c2VSZW5kZXJQYXNzKGZy
YW1lLCByZW5kZXJQYXNzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWUuaW5pdGlhbGl6
ZVNjaXNzb3JzKCk7CisKKyAgICBpZiAoZnJhbWUubmVlZFNjaXNzb3IpCisgICAgICAgIGVuYWJs
ZVNjaXNzb3JUZXN0UmVjdChmcmFtZS5zY2lzc29yUmVjdEluQ2FudmFzU3BhY2UpOworICAgIGVs
c2UKKyAgICAgICAgZGlzYWJsZVNjaXNzb3JUZXN0KCk7CisKKyAgICBjbGVhckZyYW1lYnVmZmVy
KGZyYW1lKTsKKworICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFzcy0+
cXVhZExpc3QoKTsKKyAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRv
ciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0gcXVhZExpc3QuYmFja1Rv
RnJvbnRFbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoZnJhbWUuc2Npc3NvclJlY3RJblJlbmRl
clBhc3NTcGFjZS5pbnRlcnNlY3RzKGl0LT5nZXQoKS0+Y2xpcHBlZFJlY3RJblRhcmdldCgpKSkK
KyAgICAgICAgICAgIGRyYXdRdWFkKGZyYW1lLCBpdC0+Z2V0KCkpOworICAgIH0KKworICAgIENh
Y2hlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFz
cy0+aWQoKSk7CisgICAgaWYgKHRleHR1cmUpCisgICAgICAgIHRleHR1cmUtPnNldElzQ29tcGxl
dGUoIXJlbmRlclBhc3MtPmhhc09jY2x1c2lvbkZyb21PdXRzaWRlVGFyZ2V0U3VyZmFjZSgpKTsK
K30KKworYm9vbCBDQ0RpcmVjdFJlbmRlcmVyOjp1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYg
ZnJhbWUsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKK3sKKyAgICBmcmFtZS5jdXJy
ZW50UmVuZGVyUGFzcyA9IHJlbmRlclBhc3M7CisgICAgZnJhbWUuY3VycmVudFRleHR1cmUgPSAw
OworCisgICAgaWYgKHJlbmRlclBhc3MgPT0gZnJhbWUucm9vdFJlbmRlclBhc3MpIHsKKyAgICAg
ICAgYmluZEZyYW1lYnVmZmVyVG9PdXRwdXRTdXJmYWNlKGZyYW1lKTsKKyAgICAgICAgZnJhbWUu
aW5pdGlhbGl6ZU1hdHJpY2VzKHJlbmRlclBhc3MtPm91dHB1dFJlY3QoKSwgdHJ1ZSk7CisgICAg
ICAgIHNldERyYXdWaWV3cG9ydFNpemUocmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpLnNpemUoKSk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIENhY2hlZFRleHR1cmUqIHRleHR1
cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQoKSk7CisgICAgQVNT
RVJUKHRleHR1cmUpOworICAgIGlmICghdGV4dHVyZS0+aWQoKSAmJiAhdGV4dHVyZS0+YWxsb2Nh
dGUoQ0NSZW5kZXJlcjo6SW1wbFBvb2wsIHJlbmRlclBhc3NUZXh0dXJlU2l6ZShyZW5kZXJQYXNz
KSwgcmVuZGVyUGFzc1RleHR1cmVGb3JtYXQocmVuZGVyUGFzcyksIENDUmVzb3VyY2VQcm92aWRl
cjo6VGV4dHVyZVVzYWdlRnJhbWVidWZmZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKGZyYW1lLCB0ZXh0dXJlLCByZW5kZXJQ
YXNzLT5vdXRwdXRSZWN0KCkpOworfQorCitib29sIENDRGlyZWN0UmVuZGVyZXI6OmhhdmVDYWNo
ZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25zdAoreworICAgIENhY2hlZFRl
eHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQoaWQpOworICAgIHJldHVy
biB0ZXh0dXJlICYmIHRleHR1cmUtPmlkKCkgJiYgdGV4dHVyZS0+aXNDb21wbGV0ZSgpOworfQor
CisvLyBzdGF0aWMKK0ludFNpemUgQ0NEaXJlY3RSZW5kZXJlcjo6cmVuZGVyUGFzc1RleHR1cmVT
aXplKGNvbnN0IENDUmVuZGVyUGFzcyogcGFzcykKK3sKKyAgICByZXR1cm4gcGFzcy0+b3V0cHV0
UmVjdCgpLnNpemUoKTsKK30KKworLy8gc3RhdGljCitHQzNEZW51bSBDQ0RpcmVjdFJlbmRlcmVy
OjpyZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKQoreworICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RS
ZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5MzI0OTJjNzRjZjM5MTY2Nzg5NTAxMzA3M2IyODViNDIz
Y2E2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDRGlyZWN0UmVuZGVyZXJfaAorI2RlZmluZSBDQ0RpcmVjdFJlbmRlcmVyX2gK
KworI2luY2x1ZGUgImNjL0NDUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Jlc291cmNlUHJv
dmlkZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Njb3BlZFRleHR1cmUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDQ1Jlc291cmNlUHJvdmlkZXI7CisKKy8vIFRoaXMgaXMgdGhlIGJh
c2UgY2xhc3MgZm9yIGNvZGUgc2hhcmVkIGJldHdlZW4gdGhlIEdMIGFuZCBzb2Z0d2FyZQorLy8g
cmVuZGVyZXIgaW1wbGVtZW50YXRpb25zLiAgIkRpcmVjdCIgcmVmZXJzIHRvIHRoZSBmYWN0IHRo
YXQgaXQgZG9lcyBub3QKKy8vIGRlbGVnYXRlIHJlbmRlcmluZyB0byBhbm90aGVyIGNvbXBvc2l0
b3IuCitjbGFzcyBDQ0RpcmVjdFJlbmRlcmVyIDogcHVibGljIENDUmVuZGVyZXIgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENDRGlyZWN0UmVuZGVyZXIpOworcHVibGljOgorICAgIHZpcnR1
YWwgfkNDRGlyZWN0UmVuZGVyZXIoKSB7IH0KKworICAgIENDUmVzb3VyY2VQcm92aWRlciogcmVz
b3VyY2VQcm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VQcm92aWRlcjsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGRlY2lkZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0
IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChpbnQgaWQp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWUoY29uc3QgQ0NSZW5k
ZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIsIGNvbnN0IENDUmVuZGVyUGFzc0lk
SGFzaE1hcCYgcmVuZGVyUGFzc2VzQnlJZCkgT1ZFUlJJREU7CisKK3Byb3RlY3RlZDoKKyAgICBl
eHBsaWNpdCBDQ0RpcmVjdFJlbmRlcmVyKENDUmVuZGVyZXJDbGllbnQqIGNsaWVudCwgQ0NSZXNv
dXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQorICAgICAgICA6IENDUmVuZGVyZXIoY2xp
ZW50KQorICAgICAgICAsIG1fcmVzb3VyY2VQcm92aWRlcihyZXNvdXJjZVByb3ZpZGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBzdHJ1Y3QgRHJhd2luZ0ZyYW1lIHsKKyAgICAgICAgY29uc3QgQ0NS
ZW5kZXJQYXNzSWRIYXNoTWFwKiByZW5kZXJQYXNzZXNCeUlkOworICAgICAgICBjb25zdCBDQ1Jl
bmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzOworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIGN1
cnJlbnRSZW5kZXJQYXNzOworICAgICAgICBjb25zdCBDQ1Njb3BlZFRleHR1cmUqIGN1cnJlbnRU
ZXh0dXJlOworCisgICAgICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKKworICAgICAgICBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CisgICAgICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY2FudmFzTWF0cml4OworICAgICAgICBi
b29sIGZsaXBwZWRZOworICAgICAgICBGbG9hdFJlY3Qgc2Npc3NvclJlY3RJblJlbmRlclBhc3NT
cGFjZTsKKyAgICAgICAgSW50UmVjdCBzY2lzc29yUmVjdEluQ2FudmFzU3BhY2U7CisgICAgICAg
IGJvb2wgbmVlZFNjaXNzb3I7CisKKyAgICAgICAgdm9pZCBpbml0aWFsaXplTWF0cmljZXMoY29u
c3QgSW50UmVjdCYgZHJhd1JlY3QsIGJvb2wgZmxpcFkpOworICAgICAgICB2b2lkIGluaXRpYWxp
emVTY2lzc29ycygpOworCisgICAgICAgIERyYXdpbmdGcmFtZSgpCisgICAgICAgICAgICA6IHJv
b3RSZW5kZXJQYXNzKDApCisgICAgICAgICAgICAsIGN1cnJlbnRSZW5kZXJQYXNzKDApCisgICAg
ICAgICAgICAsIGN1cnJlbnRUZXh0dXJlKDApCisgICAgICAgICAgICAsIGZsaXBwZWRZKGZhbHNl
KQorICAgICAgICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgQ2FjaGVkVGV4dHVyZSA6IHB1Ymxp
YyBDQ1Njb3BlZFRleHR1cmUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWNoZWRU
ZXh0dXJlKTsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlZFRl
eHR1cmU+IGNyZWF0ZShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDYWNoZWRUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpKTsgfQorICAg
ICAgICB2aXJ0dWFsIH5DYWNoZWRUZXh0dXJlKCkgeyB9CisKKyAgICAgICAgYm9vbCBpc0NvbXBs
ZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisgICAgICAgIHZvaWQgc2V0SXND
b21wbGV0ZShib29sIGlzQ29tcGxldGUpIHsgbV9pc0NvbXBsZXRlID0gaXNDb21wbGV0ZTsgfQor
CisgICAgcHJvdGVjdGVkOgorICAgICAgICBleHBsaWNpdCBDYWNoZWRUZXh0dXJlKENDUmVzb3Vy
Y2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKKyAgICAgICAgICAgIDogQ0NTY29wZWRUZXh0
dXJlKHJlc291cmNlUHJvdmlkZXIpCisgICAgICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBib29sIG1faXND
b21wbGV0ZTsKKyAgICB9OworCisgICAgaW5saW5lIHN0YXRpYyBGbG9hdFJlY3QgcXVhZFZlcnRl
eFJlY3QoKSB7IHJldHVybiBGbG9hdFJlY3QoLTAuNSwgLTAuNSwgMSwgMSk7IH0KKyAgICBpbmxp
bmUgc3RhdGljIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFJlY3RUcmFuc2Zv
cm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRSZWN0JiBxdWFkUmVjdCkKKyAgICB7CisgICAgICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggcXVhZFJlY3RUcmFuc2Zvcm0gPSBxdWFkVHJhbnNmb3JtOworICAg
ICAgICBxdWFkUmVjdFRyYW5zZm9ybS50cmFuc2xhdGUoMC41ICogcXVhZFJlY3Qud2lkdGgoKSAr
IHF1YWRSZWN0LngoKSwgMC41ICogcXVhZFJlY3QuaGVpZ2h0KCkgKyBxdWFkUmVjdC55KCkpOwor
ICAgICAgICBxdWFkUmVjdFRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ocXVhZFJlY3Qud2lkdGgo
KSwgcXVhZFJlY3QuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gcXVhZFJlY3RUcmFuc2Zvcm07
CisgICAgfQorICAgIGJvb2wgaGF2ZUNhY2hlZFJlc291cmNlcyhpbnQgcmVuZGVyUGFzc0lkKSBj
b25zdDsKKyAgICBzdGF0aWMgSW50U2l6ZSByZW5kZXJQYXNzVGV4dHVyZVNpemUoY29uc3QgQ0NS
ZW5kZXJQYXNzKik7CisgICAgc3RhdGljIEdDM0RlbnVtIHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0
KGNvbnN0IENDUmVuZGVyUGFzcyopOworCisgICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhEcmF3aW5n
RnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3MqKTsKKyAgICBib29sIHVzZVJlbmRlclBhc3MoRHJh
d2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmlu
ZEZyYW1lYnVmZmVyVG9PdXRwdXRTdXJmYWNlKERyYXdpbmdGcmFtZSYpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERyYXdpbmdGcmFtZSYsIGNvbnN0IEND
U2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXREcmF3Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGVuYWJsZVNjaXNzb3JUZXN0UmVjdChjb25zdCBJbnRSZWN0JiBzY2lz
c29yUmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlU2Npc3NvclRlc3QoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVidWZmZXIoRHJhd2luZ0ZyYW1lJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0RyYXdRdWFk
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUm
KSA9IDA7CisKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPENhY2hlZFRleHR1cmU+ID4gbV9yZW5k
ZXJQYXNzVGV4dHVyZXM7CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiBtX3Jlc291cmNlUHJvdmlk
ZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBDQ0RpcmVjdFJlbmRlcmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159191</attachid>
            <date>2012-08-17 13:31:56 -0700</date>
            <delta_ts>2012-08-17 16:42:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93927-20120817133120.patch</filename>
            <type>text/plain</type>
            <size>49977</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1OTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ5YTYyZGNjNTA2M2Mx
NDJmMTViMzU0ZWQyNTY2NzEwOGVlMTBiNS4uMzUyYmViNTA2ZDhkZjhiNmY0NDY3MzQ5ZmY5MTAy
ZWUwZjBkYjBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTEzICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE1v
dmUgbm9uLUdMLXNwZWNpZmljIGNvZGUgb3V0IG9mIExheWVyUmVuZGVyZXJDaHJvbWl1bQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM5MjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1v
dmVzIG1vc3Qgb2YgdGhlIGdlbmVyaWMgbG9naWMgZGVhbGluZyB3aXRoIG1hdHJpY2VzIGFuZAor
ICAgICAgICByZW5kZXIgcGFzc2VzIGludG8gYSBuZXcgY2xhc3MgIkNDRGlyZWN0UmVuZGVyZXIi
IHRoYXQgc2l0cyBiZXR3ZWVuCisgICAgICAgIENDUmVuZGVyZXIgYW5kIExheWVyUmVuZGVyZXJD
aHJvbWl1bSwgYW5kIGFsc28gcHVibGljbHkgZXhwb3NlcyBhCisgICAgICAgIGZldyBvdGhlciB0
aGluZ3MgbGlrZSB0aGUgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIuCisKKyAgICAgICAgVGhl
IHBsYW4gaXMgZm9yIHRoZSBmdXR1cmUgc29mdHdhcmUgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRp
b24gdG8gYWxzbworICAgICAgICBkZXJpdmUgZnJvbSBDQ0RpcmVjdFJlbmRlcmVyLCB3aGVyZWFz
IHRoZSB1YmVyY29tcG9zaXRvciBjaGlsZAorICAgICAgICByZW5kZXJlciB3aWxsIHN0aWxsIGRl
cml2ZSBmcm9tIENDUmVuZGVyZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChuby1vcCByZWZh
Y3RvcmluZykuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okdlb21ldHJ5QmluZGluZzo6R2VvbWV0cnlCaW5kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuaDoKKyAgICAgICAgKEdlb21ldHJ5Qmlu
ZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb091dHB1dFN1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmVuYWJsZVNjaXNzb3JUZXN0UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRpc2FibGVTY2lzc29yVGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldERyYXdWaWV3cG9ydFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjptYWtlQ29udGV4dEN1cnJl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
U2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDoKKyAg
ICAgICAgKFRleHR1cmVDb3BpZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVVcGxvYWRlci5oOgorICAgICAgICAoVW50aHJvdHRsZWRUZXh0dXJlVXBsb2Fk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcjo6flVudGhy
b3R0bGVkVGV4dHVyZVVwbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlVudGhyb3R0bGVkVGV4
dHVyZVVwbG9hZGVyOjpVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcik6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJl
bmRlcmVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAg
KGNhbnZhc01hdHJpeCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RGlyZWN0UmVuZGVyZXI6OkRyYXdpbmdGcmFtZTo6aW5pdGlhbGl6ZU1hdHJpY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OkRyYXdpbmdGcmFtZTo6aW5pdGlhbGl6ZVNj
aXNzb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OmRlY2lkZVJlbmRl
clBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVu
ZGVyZXI6OmRyYXdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpk
cmF3UmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjp1c2VS
ZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OmhhdmVDYWNo
ZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RS
ZW5kZXJlcjo6cmVuZGVyUGFzc1RleHR1cmVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGly
ZWN0UmVuZGVyZXI6OnJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0RpcmVjdFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGlyZWN0UmVuZGVyZXI6On5DQ0RpcmVjdFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGlyZWN0UmVuZGVyZXI6OnJlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q0NEaXJlY3RSZW5kZXJlcik6CisgICAgICAgIChEcmF3aW5n
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6RHJhd2luZ0ZyYW1l
OjpEcmF3aW5nRnJhbWUpOgorICAgICAgICAoQ2FjaGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDYWNoZWRUZXh0dXJlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q2FjaGVkVGV4dHVyZTo6fkNhY2hlZFRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q2FjaGVkVGV4dHVyZTo6aXND
b21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDYWNoZWRUZXh0
dXJlOjpzZXRJc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6
OkNhY2hlZFRleHR1cmU6OkNhY2hlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJl
Y3RSZW5kZXJlcjo6cXVhZFZlcnRleFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RS
ZW5kZXJlcjo6cXVhZFJlY3RUcmFuc2Zvcm0pOgorCiAyMDEyLTA4LTE3ICBEb21pbmljIE1henpv
bmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEyNTcxMCkg
LSBjYW52YXMtZmFsbGJhY2stY29udGVudCB0ZXN0cyBhc3NlcnRpbmcgaW4gQ2hyb21pdW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA2ZjVhMjEzMzEzYzc1YzY5ZTVhMWVlOTQzZjdhMjUzNjJkYWUyNjll
Li5kYjVkZTM5ZGI1ZTcyMzIxOWRhMDU4YTI5YmY3OGMwZDE5ZWQ5MzIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC04MzU4LDYgKzgzNTgsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRGVidWdSZWN0SGlzdG9yeS5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWxheUJhc2VkVGltZVNv
dXJjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Rp
cmVjdFJlbmRlcmVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZvbnRBdGxhcy5jcHAnLApAQCAtODQxMyw2ICs4NDE1LDcg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRTaW5r
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1
bGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UXVhZEN1bGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlcmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5Qmlu
ZGluZy5jcHAKaW5kZXggMWE0NTY4YmIwN2ViNjQ4ZWI2NTc4MTc0ZjgxZGU1ZjVkOTFhYzE3ZC4u
NjdhYjQ2MjRmMTBhZjUyOTM4M2Y3MDdjMzM5NDEwNmJmZmU0NDVlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRy
eUJpbmRpbmcuY3BwCkBAIC0zNSwxNyArMzUsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1HZW9tZXRyeUJpbmRpbmc6Okdlb21ldHJ5QmluZGluZyhXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQorR2VvbWV0cnlCaW5kaW5nOjpHZW9tZXRyeUJpbmRpbmcoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBxdWFkVmVy
dGV4UmVjdCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9xdWFkVmVydGljZXNW
Ym8oMCkKICAgICAsIG1fcXVhZEVsZW1lbnRzVmJvKDApCiAgICAgLCBtX2luaXRpYWxpemVkKGZh
bHNlKQogewogICAgIC8vIFZlcnRleCBwb3NpdGlvbnMgYW5kIHRleHR1cmUgY29vcmRpbmF0ZXMg
Zm9yIHRoZSA0IGNvcm5lcnMgb2YgYSAxeDEgcXVhZC4KLSAgICBmbG9hdCB2ZXJ0aWNlc1tdID0g
eyAtMC41ZiwgIDAuNWYsIDAuMGYsIDAuMGYsICAxLjBmLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIC0wLjVmLCAtMC41ZiwgMC4wZiwgMC4wZiwgIDAuMGYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgMC41ZiwgLTAuNWYsIDAuMGYsIDEuMGYsICAwLjBmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIDAuNWYsICAwLjVmLCAwLjBmLCAxLjBmLCAgMS4wZiB9OworICAgIGZsb2F0IHZlcnRp
Y2VzW10gPSB7IHF1YWRWZXJ0ZXhSZWN0LngoKSwgcXVhZFZlcnRleFJlY3QubWF4WSgpLCAwLjBm
LCAwLjBmLCAgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkVmVydGV4UmVjdC54
KCksIHF1YWRWZXJ0ZXhSZWN0LnkoKSwgMC4wZiwgMC4wZiwgIDAuMGYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgcXVhZFZlcnRleFJlY3QubWF4WCgpLCBxdWFkVmVydGV4UmVjdC55KCksIDAu
MGYsIDEuMGYsICAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRWZXJ0ZXhSZWN0
Lm1heFgoKSwgIHF1YWRWZXJ0ZXhSZWN0Lm1heFkoKSwgMC4wZiwgMS4wZiwgIDEuMGYgfTsKICAg
ICB1aW50MTZfdCBpbmRpY2VzW10gPSB7IDAsIDEsIDIsIDAsIDIsIDMsIC8vIFRoZSB0d28gdHJp
YW5nbGVzIHRoYXQgbWFrZSB1cCB0aGUgbGF5ZXIgcXVhZC4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDEsIDIsIDN9OyAvLyBBIGxpbmUgcGF0aCBmb3IgZHJhd2luZyB0aGUgbGF5ZXIg
Ym9yZGVyLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5oCmluZGV4IDIwYjJkNWEwMDViOGU5NGNjMWJl
OWM3N2VjNzI0MmI2ZGFjZDMzODIuLjBhZjE0NmM5NDYyMjZkYmM5NzdmNTVjNTVmOTA1ZTQ3ZTZh
YmNhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dlb21ldHJ5QmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5oCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVm
IEdlb21ldHJ5QmluZGluZ19oCiAjZGVmaW5lIEdlb21ldHJ5QmluZGluZ19oCiAKKyNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CkBAIC0zNiw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgR2VvbWV0cnlCaW5kaW5nIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBHZW9tZXRyeUJp
bmRpbmcoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCopOworICAgIEdlb21ldHJ5QmluZGlu
ZyhXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgRmxvYXRSZWN0JiBxdWFkVmVy
dGV4UmVjdCk7CiAgICAgfkdlb21ldHJ5QmluZGluZygpOwogCiAgICAgYm9vbCBpbml0aWFsaXpl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbGl6ZWQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCmluZGV4IDA4NWY0YmIyOTRjZDEzZjU5NzVlNTdjN2M0MWIwZWJlNjNm
OGI3YmUuLmE2OGExNDI2ZDc5NjFhZTY5M2JiNjNkZjVkZjFlODZjOTZlZDY2NzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNzEsNDAgKzcxLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1zdGF0aWMgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggb3J0aG9NYXRyaXgoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwg
ZmxvYXQgdG9wKQotewotICAgIGZsb2F0IGRlbHRhWCA9IHJpZ2h0IC0gbGVmdDsKLSAgICBmbG9h
dCBkZWx0YVkgPSB0b3AgLSBib3R0b207Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0
aG87Ci0gICAgaWYgKCFkZWx0YVggfHwgIWRlbHRhWSkKLSAgICAgICAgcmV0dXJuIG9ydGhvOwot
ICAgIG9ydGhvLnNldE0xMSgyLjBmIC8gZGVsdGFYKTsKLSAgICBvcnRoby5zZXRNNDEoLShyaWdo
dCArIGxlZnQpIC8gZGVsdGFYKTsKLSAgICBvcnRoby5zZXRNMjIoMi4wZiAvIGRlbHRhWSk7Ci0g
ICAgb3J0aG8uc2V0TTQyKC0odG9wICsgYm90dG9tKSAvIGRlbHRhWSk7Ci0KLSAgICAvLyBaIGNv
bXBvbmVudCBvZiB2ZXJ0aWNlcyBpcyBhbHdheXMgc2V0IHRvIHplcm8gYXMgd2UgZG9uJ3QgdXNl
IHRoZSBkZXB0aCBidWZmZXIKLSAgICAvLyB3aGlsZSBkcmF3aW5nLgotICAgIG9ydGhvLnNldE0z
MygwKTsKLQotICAgIHJldHVybiBvcnRobzsKLX0KLQotc3RhdGljIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IHNjcmVlbk1hdHJpeChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkK
LXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW47Ci0KLSAgICAvLyBNYXAgdG8g
dmlld3BvcnQuCi0gICAgc2NyZWVuLnRyYW5zbGF0ZTNkKHgsIHksIDApOwotICAgIHNjcmVlbi5z
Y2FsZTNkKHdpZHRoLCBoZWlnaHQsIDApOwotCi0gICAgLy8gTWFwIHgsIHkgYW5kIHogdG8gdW5p
dCBzcXVhcmUuCi0gICAgc2NyZWVuLnRyYW5zbGF0ZTNkKDAuNSwgMC41LCAwLjUpOwotICAgIHNj
cmVlbi5zY2FsZTNkKDAuNSwgMC41LCAwLjUpOwotCi0gICAgcmV0dXJuIHNjcmVlbjsKLX0KLQog
Ym9vbCBuZWVkc0lPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZCgpCiB7CiAjaWYgT1MoREFSV0lO
KQpAQCAtMTE0LDQ2ICs4MCw4IEBAIGJvb2wgbmVlZHNJT1N1cmZhY2VSZWFkYmFja1dvcmthcm91
bmQoKQogI2VuZGlmCiB9CiAKLWNsYXNzIFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyIDogcHVi
bGljIFRleHR1cmVVcGxvYWRlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVW50aHJvdHRs
ZWRUZXh0dXJlVXBsb2FkZXIpOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFVudGhy
b3R0bGVkVGV4dHVyZVVwbG9hZGVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcigpKTsKLSAgICB9Ci0gICAgdmly
dHVhbCB+VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgYm9v
bCBpc0J1c3koKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblVwbG9hZHMoKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZW5kVXBsb2Fkcygp
IE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGxvYWRUZXh0dXJlKENDUmVzb3VyY2VQ
cm92aWRlciogcmVzb3VyY2VQcm92aWRlciwgUGFyYW1ldGVycyB1cGxvYWQpIE9WRVJSSURFIHsg
dXBsb2FkLnRleHR1cmUtPnVwZGF0ZVJlY3QocmVzb3VyY2VQcm92aWRlciwgdXBsb2FkLnNvdXJj
ZVJlY3QsIHVwbG9hZC5kZXN0T2Zmc2V0KTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVW50aHJvdHRs
ZWRUZXh0dXJlVXBsb2FkZXIoKSB7IH0KLX07Ci0KIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQog
Ci1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW06OkNhY2hlZFRleHR1cmUgOiBwdWJsaWMgQ0NT
Y29wZWRUZXh0dXJlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWNoZWRUZXh0dXJlKTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDYWNoZWRUZXh0dXJlPiBjcmVhdGUoQ0NS
ZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKSB7IHJldHVybiBhZG9wdFB0cihuZXcg
Q2FjaGVkVGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKSk7IH0KLSAgICB2aXJ0dWFsIH5DYWNoZWRU
ZXh0dXJlKCkgeyB9Ci0KLSAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lz
Q29tcGxldGU7IH0KLSAgICB2b2lkIHNldElzQ29tcGxldGUoYm9vbCBpc0NvbXBsZXRlKSB7IG1f
aXNDb21wbGV0ZSA9IGlzQ29tcGxldGU7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IENh
Y2hlZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQotICAgICAg
ICA6IENDU2NvcGVkVGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKQotICAgICAgICAsIG1faXNDb21w
bGV0ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0NvbXBs
ZXRlOwotfTsKLQogUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKENDUmVuZGVyZXJDbGllbnQqIGNsaWVudCwgQ0NSZXNvdXJjZVBy
b3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBUZXh0dXJlVXBsb2FkZXJPcHRpb24gdGV4dHVyZVVw
bG9hZGVyU2V0dGluZykKIHsKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXll
clJlbmRlcmVyKGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY2xpZW50LCByZXNv
dXJjZVByb3ZpZGVyLCB0ZXh0dXJlVXBsb2FkZXJTZXR0aW5nKSkpOwpAQCAtMTY2LDEwICs5NCw5
IEBAIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZShDQ1JlbmRlcmVyQ2xpZW50CiBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVy
UmVuZGVyZXJDaHJvbWl1bShDQ1JlbmRlcmVyQ2xpZW50KiBjbGllbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291
cmNlUHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUZXh0dXJlVXBsb2FkZXJPcHRpb24gdGV4dHVyZVVwbG9hZGVyU2V0dGluZykKLSAgICA6IEND
UmVuZGVyZXIoY2xpZW50KQorICAgIDogQ0NEaXJlY3RSZW5kZXJlcihjbGllbnQsIHJlc291cmNl
UHJvdmlkZXIpCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKICAgICAsIG1fc2hh
cmVkR2VvbWV0cnlRdWFkKEZsb2F0UmVjdCgtMC41ZiwgLTAuNWYsIDEuMGYsIDEuMGYpKQotICAg
ICwgbV9yZXNvdXJjZVByb3ZpZGVyKHJlc291cmNlUHJvdmlkZXIpCiAgICAgLCBtX2NvbnRleHQo
cmVzb3VyY2VQcm92aWRlci0+Z3JhcGhpY3NDb250ZXh0M0QoKSkKICAgICAsIG1faXNWaWV3cG9y
dENoYW5nZWQoZmFsc2UpCiAgICAgLCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQoZmFsc2UpCkBA
IC0yOTksODMgKzIyNiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhckZyYW1l
YnVmZmVyKERyYXdpbmdGcmFtZSYgZnJhbWUpCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogfQogCi0vLyBzdGF0aWMKLUludFNp
emUgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZVNpemUoY29uc3QgQ0NS
ZW5kZXJQYXNzKiBwYXNzKQotewotICAgIHJldHVybiBwYXNzLT5vdXRwdXRSZWN0KCkuc2l6ZSgp
OwotfQotCi0vLyBzdGF0aWMKLUdDM0RlbnVtIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVy
UGFzc1RleHR1cmVGb3JtYXQoY29uc3QgQ0NSZW5kZXJQYXNzKikKLXsKLSAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
ZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0
JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikKLXsKLSAgICBIYXNoTWFwPGludCwgY29uc3QgQ0NS
ZW5kZXJQYXNzKj4gcmVuZGVyUGFzc2VzSW5GcmFtZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUoKTsgKytpKQotICAgICAgICByZW5kZXJQ
YXNzZXNJbkZyYW1lLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgcmVuZGVy
UGFzc2VzSW5EcmF3T3JkZXJbaV0pOwotCi0gICAgVmVjdG9yPGludD4gcGFzc2VzVG9EZWxldGU7
Ci0gICAgSGFzaE1hcDxpbnQsIE93blB0cjxDYWNoZWRUZXh0dXJlPiA+Ojpjb25zdF9pdGVyYXRv
ciBwYXNzSXRlcmF0b3I7Ci0gICAgZm9yIChwYXNzSXRlcmF0b3IgPSBtX3JlbmRlclBhc3NUZXh0
dXJlcy5iZWdpbigpOyBwYXNzSXRlcmF0b3IgIT0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZW5kKCk7
ICsrcGFzc0l0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFz
c0luRnJhbWUgPSByZW5kZXJQYXNzZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0b3ItPmZpcnN0KTsK
LSAgICAgICAgaWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgewotICAgICAgICAgICAgcGFzc2VzVG9E
ZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBJbnRTaXplJiByZXF1aXJlZFNpemUgPSByZW5k
ZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzc0luRnJhbWUpOwotICAgICAgICBHQzNEZW51bSBy
ZXF1aXJlZEZvcm1hdCA9IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3NJbkZyYW1l
KTsKLSAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVyYXRvci0+c2Vjb25k
LmdldCgpOwotICAgICAgICBBU1NFUlQodGV4dHVyZSk7Ci0KLSAgICAgICAgaWYgKHRleHR1cmUt
PmlkKCkgJiYgKHRleHR1cmUtPnNpemUoKSAhPSByZXF1aXJlZFNpemUgfHwgdGV4dHVyZS0+Zm9y
bWF0KCkgIT0gcmVxdWlyZWRGb3JtYXQpKQotICAgICAgICAgICAgdGV4dHVyZS0+ZnJlZSgpOwot
ICAgIH0KLQotICAgIC8vIERlbGV0ZSBSZW5kZXJQYXNzIHRleHR1cmVzIGZyb20gdGhlIHByZXZp
b3VzIGZyYW1lIHRoYXQgd2lsbCBub3QgYmUgdXNlZCBhZ2Fpbi4KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBhc3Nlc1RvRGVsZXRlLnNpemUoKTsgKytpKQotICAgICAgICBtX3JlbmRlclBh
c3NUZXh0dXJlcy5yZW1vdmUocGFzc2VzVG9EZWxldGVbaV0pOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAoIW1fcmVuZGVyUGFzc1RleHR1cmVzLmNvbnRhaW5zKHJlbmRlclBhc3Nlc0luRHJhd09y
ZGVyW2ldLT5pZCgpKSkgewotICAgICAgICAgICAgT3duUHRyPENhY2hlZFRleHR1cmU+IHRleHR1
cmUgPSBDYWNoZWRUZXh0dXJlOjpjcmVhdGUobV9yZXNvdXJjZVByb3ZpZGVyKTsKLSAgICAgICAg
ICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+
aWQoKSwgdGV4dHVyZS5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChp
bnQgaWQpIGNvbnN0Ci17Ci0gICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFz
c1RleHR1cmVzLmdldChpZCk7Ci0gICAgcmV0dXJuIHRleHR1cmUgJiYgdGV4dHVyZS0+aWQoKSAm
JiB0ZXh0dXJlLT5pc0NvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3Jk
ZXIsIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCYgcmVuZGVyUGFzc2VzQnlJZCkKLXsKLSAg
ICBjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzID0gcmVuZGVyUGFzc2VzSW5EcmF3
T3JkZXIubGFzdCgpOwotICAgIEFTU0VSVChyb290UmVuZGVyUGFzcyk7Ci0KLSAgICBEcmF3aW5n
RnJhbWUgZnJhbWU7Ci0gICAgZnJhbWUucmVuZGVyUGFzc2VzQnlJZCA9ICZyZW5kZXJQYXNzZXNC
eUlkOwotICAgIGZyYW1lLnJvb3RSZW5kZXJQYXNzID0gcm9vdFJlbmRlclBhc3M7Ci0KLSAgICBm
cmFtZS5yb290RGFtYWdlUmVjdCA9IG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXAgPyBm
cmFtZS5yb290UmVuZGVyUGFzcy0+ZGFtYWdlUmVjdCgpIDogZnJhbWUucm9vdFJlbmRlclBhc3Mt
Pm91dHB1dFJlY3QoKTsKLSAgICBmcmFtZS5yb290RGFtYWdlUmVjdC5pbnRlcnNlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCB2aWV3cG9ydFNpemUoKSkpOwotCi0gICAgYmVnaW5EcmF3aW5n
RnJhbWUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5EcmF3
T3JkZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRyYXdSZW5kZXJQYXNzKGZyYW1lLCByZW5kZXJQ
YXNzZXNJbkRyYXdPcmRlcltpXSk7Ci0KLSAgICBmaW5pc2hEcmF3aW5nRnJhbWUoKTsKLQotICAg
IG1fc3dhcEJ1ZmZlclJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdChmcmFtZS5yb290RGFtYWdl
UmVjdCkpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJh
bWUoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJlZ2luRHJhd2luZ0ZyYW1lKERyYXdp
bmdGcmFtZSYgZnJhbWUpCiB7CiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZnJhbWVi
dWZmZXIgaXMgYXV0b21hdGljYWxseSByZWNyZWF0ZWQgb24gZmlyc3QgdXNlCiAgICAgZW5zdXJl
RnJhbWVidWZmZXIoKTsKQEAgLTQwOSwzOSArMjYwLDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRvTm9PcCgpCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsK
IH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKERyYXdpbmdG
cmFtZSYgZnJhbWUsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKLXsKLSAgICBpZiAo
IXVzZVJlbmRlclBhc3MoZnJhbWUsIHJlbmRlclBhc3MpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBGbG9hdFJlY3Qgc2Npc3NvclJlY3QgPSByZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7Ci0gICAg
aWYgKGZyYW1lLnJvb3REYW1hZ2VSZWN0ICE9IGZyYW1lLnJvb3RSZW5kZXJQYXNzLT5vdXRwdXRS
ZWN0KCkpIHsKLSAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVRyYW5zZm9y
bVRvUm9vdCA9IHJlbmRlclBhc3MtPnRyYW5zZm9ybVRvUm9vdFRhcmdldCgpLmludmVyc2UoKTsK
LSAgICAgICAgc2Npc3NvclJlY3QuaW50ZXJzZWN0KENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVk
UmVjdChpbnZlcnNlVHJhbnNmb3JtVG9Sb290LCBmcmFtZS5yb290RGFtYWdlUmVjdCkpOwotICAg
IH0KLQotICAgIHNldFNjaXNzb3JUb1JlY3QoZnJhbWUsIGVuY2xvc2luZ0ludFJlY3Qoc2Npc3Nv
clJlY3QpKTsKLSAgICBjbGVhckZyYW1lYnVmZmVyKGZyYW1lKTsKLQotICAgIGNvbnN0IENDUXVh
ZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKLSAgICBmb3IgKENDUXVh
ZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250
QmVnaW4oKTsgaXQgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytpdCkKLSAgICAgICAg
ZHJhd1F1YWQoZnJhbWUsIGl0LT5nZXQoKSwgc2Npc3NvclJlY3QpOwotCi0gICAgQ2FjaGVkVGV4
dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNzLT5pZCgp
KTsKLSAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgdGV4dHVyZS0+c2V0SXNDb21wbGV0ZSghcmVu
ZGVyUGFzcy0+aGFzT2NjbHVzaW9uRnJvbU91dHNpZGVUYXJnZXRTdXJmYWNlKCkpOwotfQotCi12
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwg
Y29uc3QgQ0NEcmF3UXVhZCogcXVhZCwgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KQordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IEND
RHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgc2Npc3NvclJlY3QuaW50ZXJzZWN0KHF1YWQtPmNsaXBw
ZWRSZWN0SW5UYXJnZXQoKSk7Ci0gICAgaWYgKHNjaXNzb3JSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gRm9yIG5vdywgd2UgYWx3YXlzIGRvIHBlci1xdWFkIHNjaXNz
b3JpbmcgYmVjYXVzZSBzb21lIHF1YWQgdHlwZXMgZHJhdyB0aGVpcgotICAgIC8vIHVuLWNsaXBw
ZWQgYm91bmRzLCByZWx5aW5nIG9uIHNjaXNzb3JpbmcgZm9yIGNvcnJlY3QgY2xpcHBpbmcuCi0g
ICAgc2V0U2Npc3NvclRvUmVjdChmcmFtZSwgZW5jbG9zaW5nSW50UmVjdChzY2lzc29yUmVjdCkp
OwotCiAgICAgaWYgKHF1YWQtPm5lZWRzQmxlbmRpbmcoKSkKICAgICAgICAgR0xDKG1fY29udGV4
dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CiAgICAgZWxz
ZQpAQCAtNjMzLDcgKzQ1Myw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVu
ZGVyUGFzc1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kCiAgICAgcmVuZGVy
TWF0cml4LnRyYW5zbGF0ZSgwLjUgKiBxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCkgKyBxdWFkLT5x
dWFkUmVjdCgpLngoKSwgMC41ICogcXVhZC0+cXVhZFJlY3QoKS5oZWlnaHQoKSArIHF1YWQtPnF1
YWRSZWN0KCkueSgpKTsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VNYXRyaXgg
PSByZW5kZXJNYXRyaXg7CiAgICAgZGV2aWNlTWF0cml4LnNjYWxlTm9uVW5pZm9ybShxdWFkLT5x
dWFkUmVjdCgpLndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCkpOwotICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtID0gV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgoZnJhbWUud2luZG93TWF0cml4ICogZnJhbWUucHJvamVjdGlvbk1hdHJpeCAq
IGRldmljZU1hdHJpeCkudG8yZFRyYW5zZm9ybSgpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtID0gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoZnJh
bWUuY2FudmFzTWF0cml4ICogZnJhbWUucHJvamVjdGlvbk1hdHJpeCAqIGRldmljZU1hdHJpeCku
dG8yZFRyYW5zZm9ybSgpOwogCiAgICAgLy8gQ2FuIG9ubHkgZHJhdyBzdXJmYWNlIGlmIGRldmlj
ZSBtYXRyaXggaXMgaW52ZXJ0aWJsZS4KICAgICBpZiAoIWNvbnRlbnRzRGV2aWNlVHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKQpAQCAtODM1LDcgKzY1NSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3VGlsZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NUaWxlRHJh
d1F1CiAKIAogICAgIEZsb2F0UXVhZCBsb2NhbFF1YWQ7Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggZGV2aWNlVHJhbnNmb3JtID0gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoZnJhbWUud2lu
ZG93TWF0cml4ICogZnJhbWUucHJvamVjdGlvbk1hdHJpeCAqIHF1YWQtPnF1YWRUcmFuc2Zvcm0o
KSkudG8yZFRyYW5zZm9ybSgpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRy
YW5zZm9ybSA9IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGZyYW1lLmNhbnZhc01hdHJpeCAqIGZy
YW1lLnByb2plY3Rpb25NYXRyaXggKiBxdWFkLT5xdWFkVHJhbnNmb3JtKCkpLnRvMmRUcmFuc2Zv
cm0oKTsKICAgICBpZiAoIWRldmljZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xMTM3LDggKzk1NywxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0lPU3VyZmFjZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NJT1N1cgog
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpU
RVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDApKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmZpbmlzaERyYXdpbmdGcmFtZSgpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Zmlu
aXNoRHJhd2luZ0ZyYW1lKERyYXdpbmdGcmFtZSYgZnJhbWUpCiB7CisgICAgbV9jdXJyZW50RnJh
bWVidWZmZXJMb2NrLmNsZWFyKCk7CisgICAgbV9zd2FwQnVmZmVyUmVjdC51bml0ZShlbmNsb3Np
bmdJbnRSZWN0KGZyYW1lLnJvb3REYW1hZ2VSZWN0KSk7CisKICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAg
IEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxF
TkQpKTsKIH0KQEAgLTExODgsMTAgKzEwMTEsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6c2V0U2hhZGVyT3BhY2l0eShmbG9hdCBvcGFjaXR5LCBpbnQgYWxwaGFMb2NhdGlvbikKIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkR2VvbWV0cnkoRHJhd2luZ0ZyYW1l
JiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5z
Zm9ybSwgY29uc3QgRmxvYXRSZWN0JiBxdWFkUmVjdCwgaW50IG1hdHJpeExvY2F0aW9uKQogewot
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHF1YWRNYXRyaXggPSBkcmF3VHJhbnNmb3JtOwot
ICAgIHF1YWRNYXRyaXgudHJhbnNsYXRlKDAuNSAqIHF1YWRSZWN0LndpZHRoKCkgKyBxdWFkUmVj
dC54KCksIDAuNSAqIHF1YWRSZWN0LmhlaWdodCgpICsgcXVhZFJlY3QueSgpKTsKLSAgICBxdWFk
TWF0cml4LnNjYWxlTm9uVW5pZm9ybShxdWFkUmVjdC53aWR0aCgpLCBxdWFkUmVjdC5oZWlnaHQo
KSk7Ci0KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkTWF0cml4ID0gcXVhZFJlY3RU
cmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSwgcXVhZFJlY3QpOwogICAgIHN0YXRpYyBmbG9hdCBnbE1h
dHJpeFsxNl07CiAgICAgdG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGZyYW1lLnByb2plY3Rpb25N
YXRyaXggKiBxdWFkTWF0cml4KTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZv
cm1NYXRyaXg0ZnYobWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pKTsKQEAg
LTEzODQsMzEgKzEyMDQsNiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVi
dWZmZXJUZXh0dXJlKENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29ucwogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNDdXJyZW50UmVuZGVyUGFz
cyhEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCi17
Ci0gICAgcmV0dXJuIGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzID09IHJlbmRlclBhc3MgJiYgIWZy
YW1lLmN1cnJlbnRUZXh0dXJlOwotfQotCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNl
UmVuZGVyUGFzcyhEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRl
clBhc3MpCi17Ci0gICAgZnJhbWUuY3VycmVudFJlbmRlclBhc3MgPSByZW5kZXJQYXNzOwotICAg
IGZyYW1lLmN1cnJlbnRUZXh0dXJlID0gMDsKLQotICAgIGlmIChyZW5kZXJQYXNzID09IGZyYW1l
LnJvb3RSZW5kZXJQYXNzKSB7Ci0gICAgICAgIGZyYW1lLmN1cnJlbnRGcmFtZWJ1ZmZlckxvY2su
Y2xlYXIoKTsKLSAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Ci0gICAgICAgIHNldERyYXdG
cmFtZWJ1ZmZlclJlY3QoZnJhbWUsIHJlbmRlclBhc3MtPm91dHB1dFJlY3QoKSwgdHJ1ZSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIENhY2hlZFRleHR1cmUqIHRleHR1cmUg
PSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQoKSk7Ci0gICAgQVNTRVJU
KHRleHR1cmUpOwotICAgIGlmICghdGV4dHVyZS0+aWQoKSAmJiAhdGV4dHVyZS0+YWxsb2NhdGUo
Q0NSZW5kZXJlcjo6SW1wbFBvb2wsIHJlbmRlclBhc3NUZXh0dXJlU2l6ZShyZW5kZXJQYXNzKSwg
cmVuZGVyUGFzc1RleHR1cmVGb3JtYXQocmVuZGVyUGFzcyksIENDUmVzb3VyY2VQcm92aWRlcjo6
VGV4dHVyZVVzYWdlRnJhbWVidWZmZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXR1cm4gYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKGZyYW1lLCB0ZXh0dXJlLCByZW5kZXJQYXNz
LT5vdXRwdXRSZWN0KCkpOwotfQotCiBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2Nv
cGVkVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqIHRl
eHR1cmUsIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCkKIHsKICAgICBBU1NFUlQodGV4dHVy
ZS0+aWQoKSk7CkBAIC0xNDE4LDEzICsxMjEzLDE5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1c2VTY29wZWRUZXh0dXJlKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDU2NvcGVk
CiAgICAgcmV0dXJuIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShmcmFtZSwgdGV4dHVyZSwgdmll
d3BvcnRSZWN0KTsKIH0KIAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1
ZmZlclRvT3V0cHV0U3VyZmFjZShEcmF3aW5nRnJhbWUmIGZyYW1lKQoreworICAgIG1fY3VycmVu
dEZyYW1lYnVmZmVyTG9jay5jbGVhcigpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkpOworfQor
CiBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERy
YXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDU2NvcGVkVGV4dHVyZSogdGV4dHVyZSwgY29uc3Qg
SW50UmVjdCYgZnJhbWVidWZmZXJSZWN0KQogewogICAgIEFTU0VSVCh0ZXh0dXJlLT5pZCgpKTsK
IAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7Ci0gICAg
ZnJhbWUuY3VycmVudEZyYW1lYnVmZmVyTG9jayA9IGFkb3B0UHRyKG5ldyBDQ1Njb3BlZExvY2tS
ZXNvdXJjZUZvcldyaXRlKG1fcmVzb3VyY2VQcm92aWRlciwgdGV4dHVyZS0+aWQoKSkpOwotICAg
IHVuc2lnbmVkIHRleHR1cmVJZCA9IGZyYW1lLmN1cnJlbnRGcmFtZWJ1ZmZlckxvY2stPnRleHR1
cmVJZCgpOworICAgIG1fY3VycmVudEZyYW1lYnVmZmVyTG9jayA9IGFkb3B0UHRyKG5ldyBDQ1Nj
b3BlZExvY2tSZXNvdXJjZUZvcldyaXRlKG1fcmVzb3VyY2VQcm92aWRlciwgdGV4dHVyZS0+aWQo
KSkpOworICAgIHVuc2lnbmVkIHRleHR1cmVJZCA9IG1fY3VycmVudEZyYW1lYnVmZmVyTG9jay0+
dGV4dHVyZUlkKCk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1
cmVJZCwgMCkpOwogCiAjaWYgIWRlZmluZWQgKCBOREVCVUcgKQpAQCAtMTQzNCw1MSArMTIzNSwz
MiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVmZmVyVG9UZXh0dXJl
KERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0CiAgICAgfQogI2VuZGlmCiAKLSAgICBzZXREcmF3
RnJhbWVidWZmZXJSZWN0KGZyYW1lLCBmcmFtZWJ1ZmZlclJlY3QsIGZhbHNlKTsKKyAgICBmcmFt
ZS5pbml0aWFsaXplTWF0cmljZXMoZnJhbWVidWZmZXJSZWN0LCBmYWxzZSk7CisgICAgc2V0RHJh
d1ZpZXdwb3J0U2l6ZShmcmFtZWJ1ZmZlclJlY3Quc2l6ZSgpKTsKIAogICAgIHJldHVybiB0cnVl
OwogfQogCi0vLyBTZXRzIHRoZSBzY2lzc29yIHJlZ2lvbiB0byB0aGUgZ2l2ZW4gcmVjdGFuZ2xl
LiBUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yIHRoZQotLy8gc2Npc3NvclJlY3QgaGFzIGl0cyBv
cmlnaW4gYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgY3VycmVudCB2aXNpYmxlIHJlY3Qu
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0U2Npc3NvclRvUmVjdChEcmF3aW5nRnJh
bWUmIGZyYW1lLCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjplbmFibGVTY2lzc29yVGVzdFJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJl
Y3QpCiB7Ci0gICAgSW50UmVjdCBmcmFtZWJ1ZmZlck91dHB1dFJlY3QgPSBmcmFtZS5jdXJyZW50
UmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpOwotCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotCi0gICAgLy8gVGhl
IHNjaXNzb3IgY29vcmRpbmF0ZXMgbXVzdCBiZSBzdXBwbGllZCBpbiB2aWV3cG9ydCBzcGFjZSBz
byB3ZSBuZWVkIHRvIG9mZnNldAotICAgIC8vIGJ5IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0
aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLgotICAgIGludCBz
Y2lzc29yWCA9IHNjaXNzb3JSZWN0LngoKSAtIGZyYW1lYnVmZmVyT3V0cHV0UmVjdC54KCk7Ci0g
ICAgLy8gV2hlbiByZW5kZXJpbmcgdG8gdGhlIGRlZmF1bHQgcmVuZGVyIHN1cmZhY2Ugd2UncmUg
cmVuZGVyaW5nIHVwc2lkZSBkb3duIHNvIHRoZSB0b3AKLSAgICAvLyBvZiB0aGUgR0wgc2Npc3Nv
ciBpcyB0aGUgYm90dG9tIG9mIG91ciBsYXllci4KLSAgICAvLyBCdXQsIGlmIHJlbmRlcmluZyB0
byBvZmZzY3JlZW4gdGV4dHVyZSwgd2UgcmV2ZXJzZSBvdXIgc2Vuc2Ugb2YgJ3Vwc2lkZSBkb3du
Jy4KLSAgICBpbnQgc2Npc3Nvclk7Ci0gICAgaWYgKGlzQ3VycmVudFJlbmRlclBhc3MoZnJhbWUs
IGZyYW1lLnJvb3RSZW5kZXJQYXNzKSkKLSAgICAgICAgc2Npc3NvclkgPSBmcmFtZWJ1ZmZlck91
dHB1dFJlY3QuaGVpZ2h0KCkgLSAoc2Npc3NvclJlY3QubWF4WSgpIC0gZnJhbWVidWZmZXJPdXRw
dXRSZWN0LnkoKSk7Ci0gICAgZWxzZQotICAgICAgICBzY2lzc29yWSA9IHNjaXNzb3JSZWN0Lnko
KSAtIGZyYW1lYnVmZmVyT3V0cHV0UmVjdC55KCk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5zY2lzc29yKHNjaXNzb3JYLCBzY2lzc29yWSwgc2Npc3NvclJlY3Qud2lkdGgoKSwgc2Np
c3NvclJlY3QuaGVpZ2h0KCkpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnNjaXNz
b3Ioc2Npc3NvclJlY3QueCgpLCBzY2lzc29yUmVjdC55KCksIHNjaXNzb3JSZWN0LndpZHRoKCks
IHNjaXNzb3JSZWN0LmhlaWdodCgpKSk7CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjptYWtlQ29udGV4dEN1cnJlbnQoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRpc2Fi
bGVTY2lzc29yVGVzdCgpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKIH0KIAotLy8gU2V0cyB0aGUgY29vcmRpbmF0ZSByYW5n
ZSBvZiBjb250ZW50IHRoYXQgZW5kcyBiZWluZyBkcmF3biBvbnRvIHRoZSB0YXJnZXQgcmVuZGVy
IHN1cmZhY2UuCi0vLyBUaGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGlzIGFzc3VtZWQgdG8gaGF2
ZSBhbiBvcmlnaW4gYXQgMCwgMCBhbmQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YKLS8vIG9mIHRo
ZSBkcmF3UmVjdC4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXREcmF3RnJhbWVidWZm
ZXJSZWN0KERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlY3QmIGRyYXdSZWN0LCBib29s
IGZsaXBZKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldERyYXdWaWV3cG9ydFNpemUo
Y29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogewotICAgIGlmIChmbGlwWSkKLSAgICAgICAg
ZnJhbWUucHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1Jl
Y3QubWF4WCgpLCBkcmF3UmVjdC5tYXhZKCksIGRyYXdSZWN0LnkoKSk7Ci0gICAgZWxzZQotICAg
ICAgICBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoZHJhd1JlY3QueCgpLCBk
cmF3UmVjdC5tYXhYKCksIGRyYXdSZWN0LnkoKSwgZHJhd1JlY3QubWF4WSgpKTsKLSAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGRyYXdSZWN0LndpZHRoKCksIGRy
YXdSZWN0LmhlaWdodCgpKSk7Ci0gICAgZnJhbWUud2luZG93TWF0cml4ID0gc2NyZWVuTWF0cml4
KDAsIDAsIGRyYXdSZWN0LndpZHRoKCksIGRyYXdSZWN0LmhlaWdodCgpKTsKKyAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2
aWV3cG9ydFNpemUuaGVpZ2h0KCkpKTsKIH0KIAorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Cit9CiAKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
U2hhcmVkT2JqZWN0cygpCiB7CkBAIC0xNDkwLDcgKzEyNzIsNyBAQCBib29sIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogCiAgICAgLy8gV2Ugd2lsbCBh
bHdheXMgbmVlZCB0aGVzZSBwcm9ncmFtcyB0byByZW5kZXIsIHNvIGNyZWF0ZSB0aGUgcHJvZ3Jh
bXMgZWFnZXJseSBzbyB0aGF0IHRoZSBzaGFkZXIgY29tcGlsYXRpb24gY2FuCiAgICAgLy8gc3Rh
cnQgd2hpbGUgd2UgZG8gb3RoZXIgd29yay4gT3RoZXIgcHJvZ3JhbXMgYXJlIGNyZWF0ZWQgbGF6
aWx5IG9uIGZpcnN0IGFjY2Vzcy4KLSAgICBtX3NoYXJlZEdlb21ldHJ5ID0gYWRvcHRQdHIobmV3
IEdlb21ldHJ5QmluZGluZyhtX2NvbnRleHQpKTsKKyAgICBtX3NoYXJlZEdlb21ldHJ5ID0gYWRv
cHRQdHIobmV3IEdlb21ldHJ5QmluZGluZyhtX2NvbnRleHQsIHF1YWRWZXJ0ZXhSZWN0KCkpKTsK
ICAgICBtX3JlbmRlclBhc3NQcm9ncmFtID0gYWRvcHRQdHIobmV3IFJlbmRlclBhc3NQcm9ncmFt
KG1fY29udGV4dCkpOwogICAgIG1fdGlsZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgVGlsZVByb2dy
YW0obV9jb250ZXh0KSk7CiAgICAgbV90aWxlUHJvZ3JhbU9wYXF1ZSA9IGFkb3B0UHRyKG5ldyBU
aWxlUHJvZ3JhbU9wYXF1ZShtX2NvbnRleHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgKaW5kZXggMTc5MTAzMzU5YTQ5YjRmOTcwOGI5MTRjOTgyYzBmY2VkYTUwNjA1Mi4uZjU3
NmJlNzljODE5ZWEyYTYyNjc2YmRlMzA4NGY3NzI1MGViZTc5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKQEAgLTM4LDkgKzM4LDkgQEAKICNpbmNsdWRlICJUZXh0dXJlQ29w
aWVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NDaGVja2VyYm9hcmREcmF3UXVhZC5oIgogI2luY2x1ZGUg
ImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDRGlyZWN0UmVuZGVy
ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0lPU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NSZW5kZXJQYXNzRHJhd1F1YWQuaCIKLSNpbmNsdWRlICJjYy9DQ1JlbmRlcmVyLmgiCiAjaW5j
bHVkZSAiY2MvQ0NTb2xpZENvbG9yRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1N0cmVhbVZp
ZGVvRHJhd1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ1RleHR1cmVEcmF3UXVhZC5oIgpAQCAtNTks
NyArNTksNyBAQCBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBTY29wZWRFbnN1cmVGcmFt
ZWJ1ZmZlckFsbG9jYXRpb247CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNv
bXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KLWNsYXNzIExheWVyUmVuZGVyZXJDaHJv
bWl1bSA6IHB1YmxpYyBDQ1JlbmRlcmVyLAorY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDog
cHVibGljIENDRGlyZWN0UmVuZGVyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NTd2FwQnVmZmVy
c0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc01lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3ND
b250ZXh0TG9zdENhbGxiYWNrIHsKQEAgLTc3LDExICs3Nyw2IEBAIHB1YmxpYzoKIAogICAgIGNv
bnN0IEZsb2F0UXVhZCYgc2hhcmVkR2VvbWV0cnlRdWFkKCkgY29uc3QgeyByZXR1cm4gbV9zaGFy
ZWRHZW9tZXRyeVF1YWQ7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVSZW5kZXJQYXNzQWxs
b2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBib29sIGhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSBj
b25zdCBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWUoY29uc3QgQ0NSZW5k
ZXJQYXNzTGlzdCYsIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCYpIE9WRVJSSURFOwotCiAg
ICAgLy8gd2FpdHMgZm9yIHJlbmRlcmluZyB0byBmaW5pc2gKICAgICB2aXJ0dWFsIHZvaWQgZmlu
aXNoKCkgT1ZFUlJJREU7CiAKQEAgLTEwMyw0NCArOTgsMjcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCkgT1ZFUlJJREU7CiAKLSAgICBDQ1Jlc291cmNlUHJv
dmlkZXIqIHJlc291cmNlUHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUHJvdmlk
ZXI7IH0KLQogcHJvdGVjdGVkOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ1JlbmRlcmVy
Q2xpZW50KiwgQ0NSZXNvdXJjZVByb3ZpZGVyKiwgVGV4dHVyZVVwbG9hZGVyT3B0aW9uKTsKIAot
CiAgICAgYm9vbCBpc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0Zy
YW1lYnVmZmVyRGlzY2FyZGVkOyB9CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lk
IHJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKIAotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgRHJh
d2luZ0ZyYW1lIHsKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwKiByZW5kZXJQ
YXNzZXNCeUlkOwotICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzOwot
ICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIGN1cnJlbnRSZW5kZXJQYXNzOwotICAgICAgICBj
b25zdCBDQ1Njb3BlZFRleHR1cmUqIGN1cnJlbnRUZXh0dXJlOwotICAgICAgICBPd25QdHI8Q0NT
Y29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZT4gY3VycmVudEZyYW1lYnVmZmVyTG9jazsKLQotICAg
ICAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7Ci0KLSAgICAgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OwotICAgICAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IHdpbmRvd01hdHJpeDsKLQotICAgICAgICBEcmF3aW5nRnJhbWUo
KQotICAgICAgICAgICAgOiByb290UmVuZGVyUGFzcygwKQotICAgICAgICAgICAgLCBjdXJyZW50
UmVuZGVyUGFzcygwKQotICAgICAgICAgICAgLCBjdXJyZW50VGV4dHVyZSgwKQotICAgICAgICB7
IH0KLSAgICB9OworICAgIHZpcnR1YWwgdm9pZCBiaW5kRnJhbWVidWZmZXJUb091dHB1dFN1cmZh
Y2UoRHJhd2luZ0ZyYW1lJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGJpbmRGcmFtZWJ1
ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiBmcmFtZWJ1ZmZlclJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXREcmF3Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgZW5hYmxlU2Npc3NvclRlc3RSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVNjaXNzb3JUZXN0KCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVidWZmZXIoRHJhd2luZ0ZyYW1lJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDRHJh
d1F1YWQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoRHJh
d2luZ0ZyYW1lJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaERyYXdpbmdGcmFt
ZShEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsKIAorcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB0
b0dMTWF0cml4KGZsb2F0KiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
OwogCi0gICAgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZSgpOwotICAgIHZvaWQgZHJhd1JlbmRlclBh
c3MoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzKik7Ci0gICAgdm9pZCBmaW5pc2hE
cmF3aW5nRnJhbWUoKTsKLQotICAgIHZvaWQgZHJhd1F1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3Qg
Q0NEcmF3UXVhZCosIEZsb2F0UmVjdCBzY2lzc29yUmVjdCk7CiAgICAgdm9pZCBkcmF3Q2hlY2tl
cmJvYXJkUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKik7
CiAgICAgdm9pZCBkcmF3RGVidWdCb3JkZXJRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDRGVi
dWdCb3JkZXJEcmF3UXVhZCopOwogICAgIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBkcmF3
QmFja2dyb3VuZEZpbHRlcnMoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQqLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmLCBjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pOwpAQCAtMTU4LDE4ICsxMzYs
NyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoRHJhd2lu
Z0ZyYW1lJiwgaW50IHRleHR1cmVJZCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgpOwogCi0gICAgdm9pZCBzZXRTY2lzc29y
VG9SZWN0KERyYXdpbmdGcmFtZSYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZvaWQgc2V0RHJh
d0ZyYW1lYnVmZmVyUmVjdChEcmF3aW5nRnJhbWUmLCBjb25zdCBJbnRSZWN0JiwgYm9vbCBmbGlw
WSk7Ci0KLSAgICAvLyBUaGUgY3VycmVudCBkcmF3aW5nIHRhcmdldCBpcyBlaXRoZXIgYSBSZW5k
ZXJQYXNzIG9yIFNjb3BlZFRleHR1cmUuIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gc3dpdGNoIHRv
IGEgbmV3IGRyYXdpbmcgdGFyZ2V0LgotICAgIGJvb2wgdXNlUmVuZGVyUGFzcyhEcmF3aW5nRnJh
bWUmLCBjb25zdCBDQ1JlbmRlclBhc3MqKTsKICAgICBib29sIHVzZVNjb3BlZFRleHR1cmUoRHJh
d2luZ0ZyYW1lJiwgY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgdmlld3Bv
cnRSZWN0KTsKLSAgICBib29sIGlzQ3VycmVudFJlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiwgY29u
c3QgQ0NSZW5kZXJQYXNzKik7Ci0KLSAgICBib29sIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShE
cmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3
cG9ydFJlY3QpOwotCi0gICAgdm9pZCBjbGVhckZyYW1lYnVmZmVyKERyYXdpbmdGcmFtZSYpOwog
CiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIApAQCAtMTg4LDkgKzE1NSw2IEBAIHBy
aXZhdGU6CiAgICAgLy8gV2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzQ29udGV4dExv
c3RDYWxsYmFjayBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9z
dCgpIE9WRVJSSURFOwogCi0gICAgc3RhdGljIEludFNpemUgcmVuZGVyUGFzc1RleHR1cmVTaXpl
KGNvbnN0IENDUmVuZGVyUGFzcyopOwotICAgIHN0YXRpYyBHQzNEZW51bSByZW5kZXJQYXNzVGV4
dHVyZUZvcm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKTsKLQogICAgIExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7CiAKICAgICB1bnNpZ25lZCBtX29mZnNjcmVlbkZyYW1l
YnVmZmVySWQ7CkBAIC0xOTgsOCArMTYyLDYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R2VvbWV0
cnlCaW5kaW5nPiBtX3NoYXJlZEdlb21ldHJ5OwogICAgIEZsb2F0UXVhZCBtX3NoYXJlZEdlb21l
dHJ5UXVhZDsKIAotICAgIGNsYXNzIENhY2hlZFRleHR1cmU7Ci0KICAgICAvLyBUaGlzIGJsb2Nr
IG9mIGJpbmRpbmdzIGRlZmluZXMgYWxsIG9mIHRoZSBwcm9ncmFtcyB1c2VkIGJ5IHRoZSBjb21w
b3NpdG9yIGl0c2VsZi4KIAogICAgIC8vIFRpbGVkIGxheWVyIHNoYWRlcnMuCkBAIC0yNzMsMTIg
KzIzNSw5IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8U29saWRDb2xvclByb2dyYW0+IG1fc29s
aWRDb2xvclByb2dyYW07CiAKLSAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIG1fcmVzb3VyY2VQcm92
aWRlcjsKICAgICBPd25QdHI8QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyPiBtX3RleHR1cmVDb3Bp
ZXI7CiAgICAgT3duUHRyPFRleHR1cmVVcGxvYWRlcj4gbV90ZXh0dXJlVXBsb2FkZXI7CiAKLSAg
ICBIYXNoTWFwPGludCwgT3duUHRyPENhY2hlZFRleHR1cmU+ID4gbV9yZW5kZXJQYXNzVGV4dHVy
ZXM7Ci0KICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CiAKICAg
ICBJbnRSZWN0IG1fc3dhcEJ1ZmZlclJlY3Q7CkBAIC0yODcsNiArMjQ2LDggQEAgcHJpdmF0ZToK
ICAgICBib29sIG1faXNVc2luZ0JpbmRVbmlmb3JtOwogICAgIGJvb2wgbV92aXNpYmxlOwogICAg
IFRleHR1cmVVcGxvYWRlck9wdGlvbiBtX3RleHR1cmVVcGxvYWRlclNldHRpbmc7CisKKyAgICBP
d25QdHI8Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZT4gbV9jdXJyZW50RnJhbWVidWZmZXJM
b2NrOwogfTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgKaW5kZXggYWZlMmVjMDI1NjRhZDdhYmRjODAy
MTU3ZWZmN2JjZTg5NjY4N2M0Zi4uNjhiMGYxNjU2NTc3NTc2ODQ5ZWJmNDc1NWNmYTRjMTQzOWNm
NTI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZUNvcGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaApAQCAtNTEsNyArNTEsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlKFBhcmFtZXRlcnMpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZmx1c2goKSA9IDA7CiAKLXByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5UZXh0dXJlQ29waWVy
KCkgeyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UZXh0dXJlVXBsb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVVcGxvYWRlci5oCmluZGV4IDBhODYxNjEyZTM1OWFmZDZl
NDJkOTA2MTFlNTY3ZTRjMzYyMmU2NzYuLjQyZmNiZTliYzUzN2Y4MTE1MTA5ZTg5M2UzNTE0OGY5
MzJjYzRhZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVVcGxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RleHR1cmVVcGxvYWRlci5oCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVm
aW5lIFRleHR1cmVVcGxvYWRlcl9oCiAKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgi
CisjaW5jbHVkZSAiY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDUsNiArNDYsMjQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGxvYWRU
ZXh0dXJlKENDUmVzb3VyY2VQcm92aWRlciosIFBhcmFtZXRlcnMpID0gMDsKIH07CiAKK2NsYXNz
IFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyIDogcHVibGljIFRleHR1cmVVcGxvYWRlciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIpOworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyPiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBVbnRocm90dGxlZFRl
eHR1cmVVcGxvYWRlcigpKTsKKyAgICB9CisgICAgdmlydHVhbCB+VW50aHJvdHRsZWRUZXh0dXJl
VXBsb2FkZXIoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0J1c3koKSBPVkVSUklERSB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBiZWdpblVwbG9hZHMoKSBPVkVSUklERSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW5kVXBsb2FkcygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1
YWwgdm9pZCB1cGxvYWRUZXh0dXJlKENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRl
ciwgUGFyYW1ldGVycyB1cGxvYWQpIE9WRVJSSURFIHsgdXBsb2FkLnRleHR1cmUtPnVwZGF0ZVJl
Y3QocmVzb3VyY2VQcm92aWRlciwgdXBsb2FkLnNvdXJjZVJlY3QsIHVwbG9hZC5kZXN0T2Zmc2V0
KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIoKSB7IH0K
K307CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjllZjRmNzcyNjhiN2QwYjU4M2ZiMzU1OTBkM2YxNTI2OGMwYjgyMDAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0RpcmVjdFJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDRGlyZWN0UmVuZGVyZXIuaCIKKworI2luY2x1ZGUgImNjL0NDTWF0
aFV0aWwuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KKwor
dXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKKworc3RhdGljIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXgoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQs
IGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wKQoreworICAgIC8vIFVzZSB0aGUgc3RhbmRhcmQgZm9y
bXVsYSB0byBtYXAgdGhlIGNsaXBwaW5nIGZydXN0dW0gdG8gdGhlIGN1YmUgZnJvbQorICAgIC8v
IFstMSwgLTEsIC0xXSB0byBbMSwgMSwgMV0uCisgICAgZmxvYXQgZGVsdGFYID0gcmlnaHQgLSBs
ZWZ0OworICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJvdHRvbTsKKyAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBwcm9qOworICAgIGlmICghZGVsdGFYIHx8ICFkZWx0YVkpCisgICAgICAgIHJl
dHVybiBwcm9qOworICAgIHByb2ouc2V0TTExKDIuMGYgLyBkZWx0YVgpOworICAgIHByb2ouc2V0
TTQxKC0ocmlnaHQgKyBsZWZ0KSAvIGRlbHRhWCk7CisgICAgcHJvai5zZXRNMjIoMi4wZiAvIGRl
bHRhWSk7CisgICAgcHJvai5zZXRNNDIoLSh0b3AgKyBib3R0b20pIC8gZGVsdGFZKTsKKworICAg
IC8vIFogY29tcG9uZW50IG9mIHZlcnRpY2VzIGlzIGFsd2F5cyBzZXQgdG8gemVybyBhcyB3ZSBk
b24ndCB1c2UgdGhlIGRlcHRoIGJ1ZmZlcgorICAgIC8vIHdoaWxlIGRyYXdpbmcuCisgICAgcHJv
ai5zZXRNMzMoMCk7CisKKyAgICByZXR1cm4gcHJvajsKK30KKworc3RhdGljIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGNhbnZhc01hdHJpeChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCkKK3sKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjYW52YXM7CisKKyAgICAvLyBN
YXAgdG8gdmlld3BvcnQgcG9zaXRpb24gYW5kIHNjYWxlIHVwIHRvIHBpeGVsIGNvb3JkaW5hdGVz
LgorICAgIGNhbnZhcy50cmFuc2xhdGUzZCh4LCB5LCAwKTsKKyAgICBjYW52YXMuc2NhbGUzZCh3
aWR0aCwgaGVpZ2h0LCAwKTsKKworICAgIC8vIE1hcCBmcm9tIChbLTEsIC0xXSB0byBbMSwgMV0p
IC0+IChbMCwgMF0gdG8gWzEsIDFdKQorICAgIGNhbnZhcy50cmFuc2xhdGUzZCgwLjUsIDAuNSwg
MC41KTsKKyAgICBjYW52YXMuc2NhbGUzZCgwLjUsIDAuNSwgMC41KTsKKworICAgIHJldHVybiBj
YW52YXM7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDQ0RpcmVjdFJlbmRlcmVy
OjpEcmF3aW5nRnJhbWU6OmluaXRpYWxpemVNYXRyaWNlcyhjb25zdCBJbnRSZWN0JiBkcmF3UmVj
dCwgYm9vbCBmbGlwWSkKK3sKKyAgICBpZiAoZmxpcFkpCisgICAgICAgIHByb2plY3Rpb25NYXRy
aXggPSA6OnByb2plY3Rpb25NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5tYXhYKCksIGRy
YXdSZWN0Lm1heFkoKSwgZHJhd1JlY3QueSgpKTsKKyAgICBlbHNlCisgICAgICAgIHByb2plY3Rp
b25NYXRyaXggPSA6OnByb2plY3Rpb25NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5tYXhY
KCksIGRyYXdSZWN0LnkoKSwgZHJhd1JlY3QubWF4WSgpKTsKKyAgICBjYW52YXNNYXRyaXggPSA6
OmNhbnZhc01hdHJpeCgwLCAwLCBkcmF3UmVjdC53aWR0aCgpLCBkcmF3UmVjdC5oZWlnaHQoKSk7
CisKKyAgICBmbGlwcGVkWSA9IGZsaXBZOworfQorCit2b2lkIENDRGlyZWN0UmVuZGVyZXI6OkRy
YXdpbmdGcmFtZTo6aW5pdGlhbGl6ZVNjaXNzb3IoKQoreworICAgIHNjaXNzb3JSZWN0SW5SZW5k
ZXJQYXNzU3BhY2UgPSBjdXJyZW50UmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpOworICAgIGlmIChy
b290RGFtYWdlUmVjdCAhPSByb290UmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpKSB7CisgICAgICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VUcmFuc2Zvcm1Ub1Jvb3QgPSBjdXJyZW50
UmVuZGVyUGFzcy0+dHJhbnNmb3JtVG9Sb290VGFyZ2V0KCkuaW52ZXJzZSgpOworICAgICAgICBz
Y2lzc29yUmVjdEluUmVuZGVyUGFzc1NwYWNlLmludGVyc2VjdChDQ01hdGhVdGlsOjpwcm9qZWN0
Q2xpcHBlZFJlY3QoaW52ZXJzZVRyYW5zZm9ybVRvUm9vdCwgcm9vdERhbWFnZVJlY3QpKTsKKyAg
ICB9CisKKyAgICBuZWVkU2Npc3NvciA9IHNjaXNzb3JSZWN0SW5SZW5kZXJQYXNzU3BhY2UgIT0g
Y3VycmVudFJlbmRlclBhc3MtPm91dHB1dFJlY3QoKTsKK30KKworSW50UmVjdCBDQ0RpcmVjdFJl
bmRlcmVyOjpEcmF3aW5nRnJhbWU6Om1vdmVTY2lzc29yVG9DYW52YXNTcGFjZShGbG9hdFJlY3Qg
c2Npc3NvclJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzY2lzc29yUmVjdEluQ2FudmFzU3Bh
Y2UgPSBlbmNsb3NpbmdJbnRSZWN0KHNjaXNzb3JSZWN0KTsKKyAgICAvLyBUaGUgc2Npc3NvciBj
b29yZGluYXRlcyBtdXN0IGJlIHN1cHBsaWVkIGluIHZpZXdwb3J0IHNwYWNlIHNvIHdlIG5lZWQg
dG8gb2Zmc2V0CisgICAgLy8gYnkgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVm
dCBjb3JuZXIgb2YgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuCisgICAgSW50UmVjdCBmcmFtZWJ1
ZmZlck91dHB1dFJlY3QgPSBjdXJyZW50UmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpOworICAgIHNj
aXNzb3JSZWN0SW5DYW52YXNTcGFjZS5zZXRYKHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZS54KCkg
LSBmcmFtZWJ1ZmZlck91dHB1dFJlY3QueCgpKTsKKyAgICBpZiAoZmxpcHBlZFkgJiYgIWN1cnJl
bnRUZXh0dXJlKQorICAgICAgICBzY2lzc29yUmVjdEluQ2FudmFzU3BhY2Uuc2V0WShmcmFtZWJ1
ZmZlck91dHB1dFJlY3QuaGVpZ2h0KCkgLSAoc2Npc3NvclJlY3RJbkNhbnZhc1NwYWNlLm1heFko
KSAtIGZyYW1lYnVmZmVyT3V0cHV0UmVjdC55KCkpKTsKKyAgICBlbHNlCisgICAgICAgIHNjaXNz
b3JSZWN0SW5DYW52YXNTcGFjZS5zZXRZKHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZS55KCkgLSBm
cmFtZWJ1ZmZlck91dHB1dFJlY3QueSgpKTsKKworICAgIHJldHVybiBzY2lzc29yUmVjdEluQ2Fu
dmFzU3BhY2U7Cit9CisKK3ZvaWQgQ0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRlUmVuZGVyUGFzc0Fs
bG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXIpCit7CisgICAgSGFzaE1hcDxpbnQsIGNvbnN0IENDUmVuZGVyUGFzcyo+IHJlbmRl
clBhc3Nlc0luRnJhbWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJ
bkRyYXdPcmRlci5zaXplKCk7ICsraSkKKyAgICAgICAgcmVuZGVyUGFzc2VzSW5GcmFtZS5zZXQo
cmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHJlbmRlclBhc3Nlc0luRHJhd09yZGVy
W2ldKTsKKworICAgIFZlY3RvcjxpbnQ+IHBhc3Nlc1RvRGVsZXRlOworICAgIEhhc2hNYXA8aW50
LCBPd25QdHI8Q2FjaGVkVGV4dHVyZT4gPjo6Y29uc3RfaXRlcmF0b3IgcGFzc0l0ZXJhdG9yOwor
ICAgIGZvciAocGFzc0l0ZXJhdG9yID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuYmVnaW4oKTsgcGFz
c0l0ZXJhdG9yICE9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmVuZCgpOyArK3Bhc3NJdGVyYXRvcikg
eworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3NJbkZyYW1lID0gcmVuZGVy
UGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CisgICAgICAgIGlmICghcmVu
ZGVyUGFzc0luRnJhbWUpIHsKKyAgICAgICAgICAgIHBhc3Nlc1RvRGVsZXRlLmFwcGVuZChwYXNz
SXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRTaXplID0gcmVuZGVyUGFzc1RleHR1cmVTaXpl
KHJlbmRlclBhc3NJbkZyYW1lKTsKKyAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSBy
ZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQYXNzSW5GcmFtZSk7CisgICAgICAgIENhY2hl
ZFRleHR1cmUqIHRleHR1cmUgPSBwYXNzSXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAg
QVNTRVJUKHRleHR1cmUpOworCisgICAgICAgIGlmICh0ZXh0dXJlLT5pZCgpICYmICh0ZXh0dXJl
LT5zaXplKCkgIT0gcmVxdWlyZWRTaXplIHx8IHRleHR1cmUtPmZvcm1hdCgpICE9IHJlcXVpcmVk
Rm9ybWF0KSkKKyAgICAgICAgICAgIHRleHR1cmUtPmZyZWUoKTsKKyAgICB9CisKKyAgICAvLyBE
ZWxldGUgUmVuZGVyUGFzcyB0ZXh0dXJlcyBmcm9tIHRoZSBwcmV2aW91cyBmcmFtZSB0aGF0IHdp
bGwgbm90IGJlIHVzZWQgYWdhaW4uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNzZXNU
b0RlbGV0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMucmVtb3Zl
KHBhc3Nlc1RvRGVsZXRlW2ldKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVy
UGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3JlbmRlclBh
c3NUZXh0dXJlcy5jb250YWlucyhyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSkpIHsK
KyAgICAgICAgICAgIE93blB0cjxDYWNoZWRUZXh0dXJlPiB0ZXh0dXJlID0gQ2FjaGVkVGV4dHVy
ZTo6Y3JlYXRlKG1fcmVzb3VyY2VQcm92aWRlcik7CisgICAgICAgICAgICBtX3JlbmRlclBhc3NU
ZXh0dXJlcy5zZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHRleHR1cmUucmVs
ZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0RpcmVjdFJlbmRlcmVyOjpk
cmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIs
IGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCYgcmVuZGVyUGFzc2VzQnlJZCkKK3sKKyAgICBj
b25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzID0gcmVuZGVyUGFzc2VzSW5EcmF3T3Jk
ZXIubGFzdCgpOworICAgIEFTU0VSVChyb290UmVuZGVyUGFzcyk7CisKKyAgICBEcmF3aW5nRnJh
bWUgZnJhbWU7CisgICAgZnJhbWUucmVuZGVyUGFzc2VzQnlJZCA9ICZyZW5kZXJQYXNzZXNCeUlk
OworICAgIGZyYW1lLnJvb3RSZW5kZXJQYXNzID0gcm9vdFJlbmRlclBhc3M7CisgICAgZnJhbWUu
cm9vdERhbWFnZVJlY3QgPSBjYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwID8gcm9vdFJl
bmRlclBhc3MtPmRhbWFnZVJlY3QoKSA6IHJvb3RSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7Cisg
ICAgZnJhbWUucm9vdERhbWFnZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgdmlld3BvcnRTaXplKCkpKTsKKworICAgIGJlZ2luRHJhd2luZ0ZyYW1lKGZyYW1lKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUoKTsg
KytpKQorICAgICAgICBkcmF3UmVuZGVyUGFzcyhmcmFtZSwgcmVuZGVyUGFzc2VzSW5EcmF3T3Jk
ZXJbaV0pOworICAgIGZpbmlzaERyYXdpbmdGcmFtZShmcmFtZSk7Cit9CisKK3ZvaWQgQ0NEaXJl
Y3RSZW5kZXJlcjo6ZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NS
ZW5kZXJQYXNzKiByZW5kZXJQYXNzKQoreworICAgIGlmICghdXNlUmVuZGVyUGFzcyhmcmFtZSwg
cmVuZGVyUGFzcykpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lLmluaXRpYWxpemVTY2lz
c29yKCk7CisKKyAgICBlbmFibGVTY2lzc29yVGVzdFJlY3QoZnJhbWUubW92ZVNjaXNzb3JUb0Nh
bnZhc1NwYWNlKGZyYW1lLnNjaXNzb3JSZWN0SW5SZW5kZXJQYXNzU3BhY2UpKTsKKyAgICBjbGVh
ckZyYW1lYnVmZmVyKGZyYW1lKTsKKworICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0ID0g
cmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKKyAgICBmb3IgKENDUXVhZExpc3Q6OmNvbnN0QmFja1Rv
RnJvbnRJdGVyYXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVnaW4oKTsgaXQgIT0gcXVh
ZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytpdCkgeworICAgICAgICBGbG9hdFJlY3QgcXVhZFNj
aXNzb3JSZWN0ID0gZnJhbWUuc2Npc3NvclJlY3RJblJlbmRlclBhc3NTcGFjZTsKKyAgICAgICAg
cXVhZFNjaXNzb3JSZWN0LmludGVyc2VjdChpdC0+Z2V0KCktPmNsaXBwZWRSZWN0SW5UYXJnZXQo
KSk7CisgICAgICAgIGlmICghcXVhZFNjaXNzb3JSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgZW5hYmxlU2Npc3NvclRlc3RSZWN0KGZyYW1lLm1vdmVTY2lzc29yVG9DYW52YXNTcGFjZShx
dWFkU2Npc3NvclJlY3QpKTsKKyAgICAgICAgICAgIGRyYXdRdWFkKGZyYW1lLCBpdC0+Z2V0KCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVu
ZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNzLT5pZCgpKTsKKyAgICBpZiAodGV4dHVyZSkK
KyAgICAgICAgdGV4dHVyZS0+c2V0SXNDb21wbGV0ZSghcmVuZGVyUGFzcy0+aGFzT2NjbHVzaW9u
RnJvbU91dHNpZGVUYXJnZXRTdXJmYWNlKCkpOworfQorCitib29sIENDRGlyZWN0UmVuZGVyZXI6
OnVzZVJlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kZXJQYXNzKiBy
ZW5kZXJQYXNzKQoreworICAgIGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzID0gcmVuZGVyUGFzczsK
KyAgICBmcmFtZS5jdXJyZW50VGV4dHVyZSA9IDA7CisKKyAgICBpZiAocmVuZGVyUGFzcyA9PSBm
cmFtZS5yb290UmVuZGVyUGFzcykgeworICAgICAgICBiaW5kRnJhbWVidWZmZXJUb091dHB1dFN1
cmZhY2UoZnJhbWUpOworICAgICAgICBmcmFtZS5pbml0aWFsaXplTWF0cmljZXMocmVuZGVyUGFz
cy0+b3V0cHV0UmVjdCgpLCB0cnVlKTsKKyAgICAgICAgc2V0RHJhd1ZpZXdwb3J0U2l6ZShyZW5k
ZXJQYXNzLT5vdXRwdXRSZWN0KCkuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdl
dChyZW5kZXJQYXNzLT5pZCgpKTsKKyAgICBBU1NFUlQodGV4dHVyZSk7CisgICAgaWYgKCF0ZXh0
dXJlLT5pZCgpICYmICF0ZXh0dXJlLT5hbGxvY2F0ZShDQ1JlbmRlcmVyOjpJbXBsUG9vbCwgcmVu
ZGVyUGFzc1RleHR1cmVTaXplKHJlbmRlclBhc3MpLCByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChy
ZW5kZXJQYXNzKSwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VGcmFtZWJ1ZmZlcikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1Rl
eHR1cmUoZnJhbWUsIHRleHR1cmUsIHJlbmRlclBhc3MtPm91dHB1dFJlY3QoKSk7Cit9CisKK2Jv
b2wgQ0NEaXJlY3RSZW5kZXJlcjo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChp
bnQgaWQpIGNvbnN0Cit7CisgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFz
c1RleHR1cmVzLmdldChpZCk7CisgICAgcmV0dXJuIHRleHR1cmUgJiYgdGV4dHVyZS0+aWQoKSAm
JiB0ZXh0dXJlLT5pc0NvbXBsZXRlKCk7Cit9CisKKy8vIHN0YXRpYworSW50U2l6ZSBDQ0RpcmVj
dFJlbmRlcmVyOjpyZW5kZXJQYXNzVGV4dHVyZVNpemUoY29uc3QgQ0NSZW5kZXJQYXNzKiBwYXNz
KQoreworICAgIHJldHVybiBwYXNzLT5vdXRwdXRSZWN0KCkuc2l6ZSgpOworfQorCisvLyBzdGF0
aWMKK0dDM0RlbnVtIENDRGlyZWN0UmVuZGVyZXI6OnJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KGNv
bnN0IENDUmVuZGVyUGFzcyopCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDViZjNl
ZDAwOWE5NDgzMGQ4ZWRjMGViZTEzYWI3ZWUxNjgxZmFhOQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVy
ZXIuaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NEaXJlY3RSZW5kZXJlcl9o
CisjZGVmaW5lIENDRGlyZWN0UmVuZGVyZXJfaAorCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJlci5o
IgorI2luY2x1ZGUgImNjL0NDUmVzb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgImNjL0NDU2Nv
cGVkVGV4dHVyZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDUmVzb3VyY2VQ
cm92aWRlcjsKKworLy8gVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgY29kZSBzaGFyZWQgYmV0
d2VlbiB0aGUgR0wgYW5kIHNvZnR3YXJlCisvLyByZW5kZXJlciBpbXBsZW1lbnRhdGlvbnMuICAi
RGlyZWN0IiByZWZlcnMgdG8gdGhlIGZhY3QgdGhhdCBpdCBkb2VzIG5vdAorLy8gZGVsZWdhdGUg
cmVuZGVyaW5nIHRvIGFub3RoZXIgY29tcG9zaXRvci4KK2NsYXNzIENDRGlyZWN0UmVuZGVyZXIg
OiBwdWJsaWMgQ0NSZW5kZXJlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NEaXJlY3RS
ZW5kZXJlcik7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NEaXJlY3RSZW5kZXJlcigpIHsgfQor
CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1
cm4gbV9yZXNvdXJjZVByb3ZpZGVyOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlUmVuZGVy
UGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXIpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYXZlQ2FjaGVkUmVz
b3VyY2VzRm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRy
YXdPcmRlciwgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwJiByZW5kZXJQYXNzZXNCeUlkKSBP
VkVSUklERTsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IENDRGlyZWN0UmVuZGVyZXIoQ0NS
ZW5kZXJlckNsaWVudCogY2xpZW50LCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlk
ZXIpCisgICAgICAgIDogQ0NSZW5kZXJlcihjbGllbnQpCisgICAgICAgICwgbV9yZXNvdXJjZVBy
b3ZpZGVyKHJlc291cmNlUHJvdmlkZXIpCisgICAgeworICAgIH0KKworICAgIHN0cnVjdCBEcmF3
aW5nRnJhbWUgeworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3NJZEhhc2hNYXAqIHJlbmRlclBh
c3Nlc0J5SWQ7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3M7Cisg
ICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogY3VycmVudFJlbmRlclBhc3M7CisgICAgICAgIGNv
bnN0IENDU2NvcGVkVGV4dHVyZSogY3VycmVudFRleHR1cmU7CisKKyAgICAgICAgRmxvYXRSZWN0
IHJvb3REYW1hZ2VSZWN0OworCisgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggcHJvamVjdGlvbk1hdHJpeDsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjYW52YXNNYXRyaXg7CisgICAgICAgIGJvb2wgZmxpcHBlZFk7CisgICAgICAgIEZsb2F0
UmVjdCBzY2lzc29yUmVjdEluUmVuZGVyUGFzc1NwYWNlOworICAgICAgICBib29sIG5lZWRTY2lz
c29yOworCisgICAgICAgIHZvaWQgaW5pdGlhbGl6ZU1hdHJpY2VzKGNvbnN0IEludFJlY3QmIGRy
YXdSZWN0LCBib29sIGZsaXBZKTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplU2Npc3NvcigpOwor
ICAgICAgICBJbnRSZWN0IG1vdmVTY2lzc29yVG9DYW52YXNTcGFjZShGbG9hdFJlY3Qgc2Npc3Nv
clJlY3QpIGNvbnN0OworCisgICAgICAgIERyYXdpbmdGcmFtZSgpCisgICAgICAgICAgICA6IHJv
b3RSZW5kZXJQYXNzKDApCisgICAgICAgICAgICAsIGN1cnJlbnRSZW5kZXJQYXNzKDApCisgICAg
ICAgICAgICAsIGN1cnJlbnRUZXh0dXJlKDApCisgICAgICAgICAgICAsIGZsaXBwZWRZKGZhbHNl
KQorICAgICAgICB7IH0KKyAgICB9OworCisgICAgY2xhc3MgQ2FjaGVkVGV4dHVyZSA6IHB1Ymxp
YyBDQ1Njb3BlZFRleHR1cmUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWNoZWRU
ZXh0dXJlKTsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlZFRl
eHR1cmU+IGNyZWF0ZShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDYWNoZWRUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpKTsgfQorICAg
ICAgICB2aXJ0dWFsIH5DYWNoZWRUZXh0dXJlKCkgeyB9CisKKyAgICAgICAgYm9vbCBpc0NvbXBs
ZXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisgICAgICAgIHZvaWQgc2V0SXND
b21wbGV0ZShib29sIGlzQ29tcGxldGUpIHsgbV9pc0NvbXBsZXRlID0gaXNDb21wbGV0ZTsgfQor
CisgICAgcHJvdGVjdGVkOgorICAgICAgICBleHBsaWNpdCBDYWNoZWRUZXh0dXJlKENDUmVzb3Vy
Y2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcikKKyAgICAgICAgICAgIDogQ0NTY29wZWRUZXh0
dXJlKHJlc291cmNlUHJvdmlkZXIpCisgICAgICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBib29sIG1faXND
b21wbGV0ZTsKKyAgICB9OworCisgICAgaW5saW5lIHN0YXRpYyBGbG9hdFJlY3QgcXVhZFZlcnRl
eFJlY3QoKSB7IHJldHVybiBGbG9hdFJlY3QoLTAuNSwgLTAuNSwgMSwgMSk7IH0KKyAgICBpbmxp
bmUgc3RhdGljIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFJlY3RUcmFuc2Zv
cm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRSZWN0JiBxdWFkUmVjdCkKKyAgICB7CisgICAgICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggcXVhZFJlY3RUcmFuc2Zvcm0gPSBxdWFkVHJhbnNmb3JtOworICAg
ICAgICBxdWFkUmVjdFRyYW5zZm9ybS50cmFuc2xhdGUoMC41ICogcXVhZFJlY3Qud2lkdGgoKSAr
IHF1YWRSZWN0LngoKSwgMC41ICogcXVhZFJlY3QuaGVpZ2h0KCkgKyBxdWFkUmVjdC55KCkpOwor
ICAgICAgICBxdWFkUmVjdFRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ocXVhZFJlY3Qud2lkdGgo
KSwgcXVhZFJlY3QuaGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gcXVhZFJlY3RUcmFuc2Zvcm07
CisgICAgfQorICAgIGJvb2wgaGF2ZUNhY2hlZFJlc291cmNlcyhpbnQgcmVuZGVyUGFzc0lkKSBj
b25zdDsKKyAgICBzdGF0aWMgSW50U2l6ZSByZW5kZXJQYXNzVGV4dHVyZVNpemUoY29uc3QgQ0NS
ZW5kZXJQYXNzKik7CisgICAgc3RhdGljIEdDM0RlbnVtIHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0
KGNvbnN0IENDUmVuZGVyUGFzcyopOworCisgICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhEcmF3aW5n
RnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3MqKTsKKyAgICBib29sIHVzZVJlbmRlclBhc3MoRHJh
d2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmlu
ZEZyYW1lYnVmZmVyVG9PdXRwdXRTdXJmYWNlKERyYXdpbmdGcmFtZSYpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERyYXdpbmdGcmFtZSYsIGNvbnN0IEND
U2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXREcmF3Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGVuYWJsZVNjaXNzb3JUZXN0UmVjdChjb25zdCBJbnRSZWN0JiBzY2lz
c29yUmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlU2Npc3NvclRlc3QoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVidWZmZXIoRHJhd2luZ0ZyYW1lJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3UXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0RyYXdRdWFk
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUm
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUm
KSA9IDA7CisKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPENhY2hlZFRleHR1cmU+ID4gbV9yZW5k
ZXJQYXNzVGV4dHVyZXM7CisgICAgQ0NSZXNvdXJjZVByb3ZpZGVyKiBtX3Jlc291cmNlUHJvdmlk
ZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBDQ0RpcmVjdFJlbmRlcmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159227</attachid>
            <date>2012-08-17 16:42:41 -0700</date>
            <delta_ts>2012-08-17 17:55:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93927-20120817164205.patch</filename>
            <type>text/plain</type>
            <size>58105</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1OTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWQ5YTYyZGNjNTA2M2Mx
NDJmMTViMzU0ZWQyNTY2NzEwOGVlMTBiNS4uMzUyYmViNTA2ZDhkZjhiNmY0NDY3MzQ5ZmY5MTAy
ZWUwZjBkYjBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTEzICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE1v
dmUgbm9uLUdMLXNwZWNpZmljIGNvZGUgb3V0IG9mIExheWVyUmVuZGVyZXJDaHJvbWl1bQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM5MjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1v
dmVzIG1vc3Qgb2YgdGhlIGdlbmVyaWMgbG9naWMgZGVhbGluZyB3aXRoIG1hdHJpY2VzIGFuZAor
ICAgICAgICByZW5kZXIgcGFzc2VzIGludG8gYSBuZXcgY2xhc3MgIkNDRGlyZWN0UmVuZGVyZXIi
IHRoYXQgc2l0cyBiZXR3ZWVuCisgICAgICAgIENDUmVuZGVyZXIgYW5kIExheWVyUmVuZGVyZXJD
aHJvbWl1bSwgYW5kIGFsc28gcHVibGljbHkgZXhwb3NlcyBhCisgICAgICAgIGZldyBvdGhlciB0
aGluZ3MgbGlrZSB0aGUgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIuCisKKyAgICAgICAgVGhl
IHBsYW4gaXMgZm9yIHRoZSBmdXR1cmUgc29mdHdhcmUgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRp
b24gdG8gYWxzbworICAgICAgICBkZXJpdmUgZnJvbSBDQ0RpcmVjdFJlbmRlcmVyLCB3aGVyZWFz
IHRoZSB1YmVyY29tcG9zaXRvciBjaGlsZAorICAgICAgICByZW5kZXJlciB3aWxsIHN0aWxsIGRl
cml2ZSBmcm9tIENDUmVuZGVyZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChuby1vcCByZWZh
Y3RvcmluZykuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okdlb21ldHJ5QmluZGluZzo6R2VvbWV0cnlCaW5kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuaDoKKyAgICAgICAgKEdlb21ldHJ5Qmlu
ZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb091dHB1dFN1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmVuYWJsZVNjaXNzb3JUZXN0UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRpc2FibGVTY2lzc29yVGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldERyYXdWaWV3cG9ydFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjptYWtlQ29udGV4dEN1cnJl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
U2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDoKKyAg
ICAgICAgKFRleHR1cmVDb3BpZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVVcGxvYWRlci5oOgorICAgICAgICAoVW50aHJvdHRsZWRUZXh0dXJlVXBsb2Fk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcjo6flVudGhy
b3R0bGVkVGV4dHVyZVVwbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlVudGhyb3R0bGVkVGV4
dHVyZVVwbG9hZGVyOjpVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcik6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJl
bmRlcmVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAg
KGNhbnZhc01hdHJpeCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RGlyZWN0UmVuZGVyZXI6OkRyYXdpbmdGcmFtZTo6aW5pdGlhbGl6ZU1hdHJpY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OkRyYXdpbmdGcmFtZTo6aW5pdGlhbGl6ZVNj
aXNzb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OmRlY2lkZVJlbmRl
clBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVu
ZGVyZXI6OmRyYXdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpk
cmF3UmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjp1c2VS
ZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OmhhdmVDYWNo
ZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RS
ZW5kZXJlcjo6cmVuZGVyUGFzc1RleHR1cmVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGly
ZWN0UmVuZGVyZXI6OnJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0RpcmVjdFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGlyZWN0UmVuZGVyZXI6On5DQ0RpcmVjdFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGlyZWN0UmVuZGVyZXI6OnJlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q0NEaXJlY3RSZW5kZXJlcik6CisgICAgICAgIChEcmF3aW5n
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6RHJhd2luZ0ZyYW1l
OjpEcmF3aW5nRnJhbWUpOgorICAgICAgICAoQ2FjaGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDYWNoZWRUZXh0dXJlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q2FjaGVkVGV4dHVyZTo6fkNhY2hlZFRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q2FjaGVkVGV4dHVyZTo6aXND
b21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDYWNoZWRUZXh0
dXJlOjpzZXRJc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6
OkNhY2hlZFRleHR1cmU6OkNhY2hlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJl
Y3RSZW5kZXJlcjo6cXVhZFZlcnRleFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RS
ZW5kZXJlcjo6cXVhZFJlY3RUcmFuc2Zvcm0pOgorCiAyMDEyLTA4LTE3ICBEb21pbmljIE1henpv
bmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjEyNTcxMCkg
LSBjYW52YXMtZmFsbGJhY2stY29udGVudCB0ZXN0cyBhc3NlcnRpbmcgaW4gQ2hyb21pdW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA2ZjVhMjEzMzEzYzc1YzY5ZTVhMWVlOTQzZjdhMjUzNjJkYWUyNjll
Li4wYjc2YjA2ZTc3OGIzNDA3ZmZiNjQwNzU4ZDU2ZDA4ZGE2MGZhMmNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC04MzM5LDYgKzgzMzksNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbnRocm90dGxlZFRleHR1cmVVcGxvYWRlci5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRl
b0xheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NBY3RpdmVBbmltYXRpb24uY3BwJywKQEAgLTgzNTgsNiArODM1OSw4IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z1JlY3RIaXN0b3J5
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlC
YXNlZFRpbWVTb3VyY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRm9udEF0bGFz
LmNwcCcsCkBAIC04NDEzLDYgKzg0MTYsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUXVhZFNpbmsuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmgnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdR
dWFkLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNwcAppbmRleCAxYTQ1NjhiYjA3ZWI2NDhl
YjY1NzgxNzRmODFkZTVmNWQ5MWFjMTdkLi42N2FiNDYyNGYxMGFmNTI5MzgzZjcwN2MzMzk0MTA2
YmZmZTQ0NWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5jcHAKQEAgLTM1LDE3ICszNSwxNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdlb21ldHJ5QmluZGluZzo6R2VvbWV0cnlCaW5k
aW5nKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCitHZW9tZXRyeUJpbmRp
bmc6Okdlb21ldHJ5QmluZGluZyhXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIHF1YWRWZXJ0ZXhSZWN0KQogICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCiAgICAgLCBtX3F1YWRWZXJ0aWNlc1ZibygwKQogICAgICwgbV9xdWFkRWxlbWVudHNWYm8o
MCkKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCiB7CiAgICAgLy8gVmVydGV4IHBvc2l0aW9u
cyBhbmQgdGV4dHVyZSBjb29yZGluYXRlcyBmb3IgdGhlIDQgY29ybmVycyBvZiBhIDF4MSBxdWFk
LgotICAgIGZsb2F0IHZlcnRpY2VzW10gPSB7IC0wLjVmLCAgMC41ZiwgMC4wZiwgMC4wZiwgIDEu
MGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgLTAuNWYsIC0wLjVmLCAwLjBmLCAwLjBmLCAg
MC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAtMC41ZiwgMC4wZiwgMS4wZiwg
IDAuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgMC41ZiwgIDAuNWYsIDAuMGYsIDEuMGYs
ICAxLjBmIH07CisgICAgZmxvYXQgdmVydGljZXNbXSA9IHsgcXVhZFZlcnRleFJlY3QueCgpLCBx
dWFkVmVydGV4UmVjdC5tYXhZKCksIDAuMGYsIDAuMGYsICAxLjBmLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIHF1YWRWZXJ0ZXhSZWN0LngoKSwgcXVhZFZlcnRleFJlY3QueSgpLCAwLjBmLCAw
LjBmLCAgMC4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkVmVydGV4UmVjdC5tYXhY
KCksIHF1YWRWZXJ0ZXhSZWN0LnkoKSwgMC4wZiwgMS4wZiwgIDAuMGYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgcXVhZFZlcnRleFJlY3QubWF4WCgpLCAgcXVhZFZlcnRleFJlY3QubWF4WSgp
LCAwLjBmLCAxLjBmLCAgMS4wZiB9OwogICAgIHVpbnQxNl90IGluZGljZXNbXSA9IHsgMCwgMSwg
MiwgMCwgMiwgMywgLy8gVGhlIHR3byB0cmlhbmdsZXMgdGhhdCBtYWtlIHVwIHRoZSBsYXllciBx
dWFkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgMiwgM307IC8vIEEgbGluZSBw
YXRoIGZvciBkcmF3aW5nIHRoZSBsYXllciBib3JkZXIuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmgK
aW5kZXggMjBiMmQ1YTAwNWI4ZTk0Y2MxYmU5Yzc3ZWM3MjQyYjZkYWNkMzM4Mi4uMGFmMTQ2Yzk0
NjIyNmRiYzk3N2Y1NWM1NWY5MDVlNDdlNmFiY2EwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmgK
QEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgR2VvbWV0cnlCaW5kaW5nX2gKICNkZWZpbmUgR2Vv
bWV0cnlCaW5kaW5nX2gKIAorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM2LDcgKzM4LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHZW9tZXRyeUJpbmRpbmcgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IEdlb21ldHJ5QmluZGluZyhXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNEKik7CisgICAgR2VvbWV0cnlCaW5kaW5nKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Qq
LCBjb25zdCBGbG9hdFJlY3QmIHF1YWRWZXJ0ZXhSZWN0KTsKICAgICB+R2VvbWV0cnlCaW5kaW5n
KCk7CiAKICAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXpl
ZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggMDg1ZjRiYjI5
NGNkMTNmNTk3NWU1N2M3YzQxYjBlYmU2M2Y4YjdiZS4uMTM3ZWFlOWIyMWI3MTQ4Zjc2MzY0M2Ez
MGNlNDhjYWY5YTVkMDIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CkBAIC03MSw0MCArNzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSB7CiAK
LXN0YXRpYyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcnRob01hdHJpeChmbG9hdCBsZWZ0LCBm
bG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3ApCi17Ci0gICAgZmxvYXQgZGVsdGFY
ID0gcmlnaHQgLSBsZWZ0OwotICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJvdHRvbTsKLSAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcnRobzsKLSAgICBpZiAoIWRlbHRhWCB8fCAhZGVsdGFZ
KQotICAgICAgICByZXR1cm4gb3J0aG87Ci0gICAgb3J0aG8uc2V0TTExKDIuMGYgLyBkZWx0YVgp
OwotICAgIG9ydGhvLnNldE00MSgtKHJpZ2h0ICsgbGVmdCkgLyBkZWx0YVgpOwotICAgIG9ydGhv
LnNldE0yMigyLjBmIC8gZGVsdGFZKTsKLSAgICBvcnRoby5zZXRNNDIoLSh0b3AgKyBib3R0b20p
IC8gZGVsdGFZKTsKLQotICAgIC8vIFogY29tcG9uZW50IG9mIHZlcnRpY2VzIGlzIGFsd2F5cyBz
ZXQgdG8gemVybyBhcyB3ZSBkb24ndCB1c2UgdGhlIGRlcHRoIGJ1ZmZlcgotICAgIC8vIHdoaWxl
IGRyYXdpbmcuCi0gICAgb3J0aG8uc2V0TTMzKDApOwotCi0gICAgcmV0dXJuIG9ydGhvOwotfQot
Ci1zdGF0aWMgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuTWF0cml4KGludCB4LCBpbnQg
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IHNjcmVlbjsKLQotICAgIC8vIE1hcCB0byB2aWV3cG9ydC4KLSAgICBzY3JlZW4udHJhbnNsYXRl
M2QoeCwgeSwgMCk7Ci0gICAgc2NyZWVuLnNjYWxlM2Qod2lkdGgsIGhlaWdodCwgMCk7Ci0KLSAg
ICAvLyBNYXAgeCwgeSBhbmQgeiB0byB1bml0IHNxdWFyZS4KLSAgICBzY3JlZW4udHJhbnNsYXRl
M2QoMC41LCAwLjUsIDAuNSk7Ci0gICAgc2NyZWVuLnNjYWxlM2QoMC41LCAwLjUsIDAuNSk7Ci0K
LSAgICByZXR1cm4gc2NyZWVuOwotfQotCiBib29sIG5lZWRzSU9TdXJmYWNlUmVhZGJhY2tXb3Jr
YXJvdW5kKCkKIHsKICNpZiBPUyhEQVJXSU4pCkBAIC0xMTQsNDYgKzgwLDggQEAgYm9vbCBuZWVk
c0lPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZCgpCiAjZW5kaWYKIH0KIAotY2xhc3MgVW50aHJv
dHRsZWRUZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMgVGV4dHVyZVVwbG9hZGVyIHsKLSAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcik7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXI+IGNyZWF0ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFVudGhyb3R0bGVkVGV4dHVyZVVw
bG9hZGVyKCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5VbnRocm90dGxlZFRleHR1cmVVcGxvYWRl
cigpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQnVzeSgpIE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luVXBsb2FkcygpIE9WRVJSSURFIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBlbmRVcGxvYWRzKCkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHVwbG9hZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBQYXJh
bWV0ZXJzIHVwbG9hZCkgT1ZFUlJJREUgeyB1cGxvYWQudGV4dHVyZS0+dXBkYXRlUmVjdChyZXNv
dXJjZVByb3ZpZGVyLCB1cGxvYWQuc291cmNlUmVjdCwgdXBsb2FkLmRlc3RPZmZzZXQpOyB9Ci0K
LXByb3RlY3RlZDoKLSAgICBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcigpIHsgfQotfTsKLQog
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Q2FjaGVkVGV4dHVyZSA6IHB1YmxpYyBDQ1Njb3BlZFRleHR1cmUgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENhY2hlZFRleHR1cmUpOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PENhY2hlZFRleHR1cmU+IGNyZWF0ZShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlk
ZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZWRUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIp
KTsgfQotICAgIHZpcnR1YWwgfkNhY2hlZFRleHR1cmUoKSB7IH0KLQotICAgIGJvb2wgaXNDb21w
bGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQotICAgIHZvaWQgc2V0SXNDb21w
bGV0ZShib29sIGlzQ29tcGxldGUpIHsgbV9pc0NvbXBsZXRlID0gaXNDb21wbGV0ZTsgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgQ2FjaGVkVGV4dHVyZShDQ1Jlc291cmNlUHJvdmlkZXIq
IHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgIDogQ0NTY29wZWRUZXh0dXJlKHJlc291cmNlUHJv
dmlkZXIpCi0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgYm9vbCBtX2lzQ29tcGxldGU7Ci19OwotCiBQYXNzT3duUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NSZW5kZXJlckNs
aWVudCogY2xpZW50LCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIsIFRleHR1
cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJlVXBsb2FkZXJTZXR0aW5nKQogewogICAgIE93blB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRQdHIobmV3IExheWVyUmVu
ZGVyZXJDaHJvbWl1bShjbGllbnQsIHJlc291cmNlUHJvdmlkZXIsIHRleHR1cmVVcGxvYWRlclNl
dHRpbmcpKSk7CkBAIC0xNjYsMTAgKzk0LDkgQEAgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDUmVuZGVyZXJDbGllbnQKIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKENDUmVuZGVyZXJDbGll
bnQqIGNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJl
VXBsb2FkZXJTZXR0aW5nKQotICAgIDogQ0NSZW5kZXJlcihjbGllbnQpCisgICAgOiBDQ0RpcmVj
dFJlbmRlcmVyKGNsaWVudCwgcmVzb3VyY2VQcm92aWRlcikKICAgICAsIG1fb2Zmc2NyZWVuRnJh
bWVidWZmZXJJZCgwKQogICAgICwgbV9zaGFyZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0KC0wLjVm
LCAtMC41ZiwgMS4wZiwgMS4wZikpCi0gICAgLCBtX3Jlc291cmNlUHJvdmlkZXIocmVzb3VyY2VQ
cm92aWRlcikKICAgICAsIG1fY29udGV4dChyZXNvdXJjZVByb3ZpZGVyLT5ncmFwaGljc0NvbnRl
eHQzRCgpKQogICAgICwgbV9pc1ZpZXdwb3J0Q2hhbmdlZChmYWxzZSkKICAgICAsIG1faXNGcmFt
ZWJ1ZmZlckRpc2NhcmRlZChmYWxzZSkKQEAgLTI5OSw4MyArMjI2LDcgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNsZWFyRnJhbWVidWZmZXIoRHJhd2luZ0ZyYW1lJiBmcmFtZSkKICAg
ICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJ
VCk7CiB9CiAKLS8vIHN0YXRpYwotSW50U2l6ZSBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRl
clBhc3NUZXh0dXJlU2l6ZShjb25zdCBDQ1JlbmRlclBhc3MqIHBhc3MpCi17Ci0gICAgcmV0dXJu
IHBhc3MtPm91dHB1dFJlY3QoKS5zaXplKCk7Ci19Ci0KLS8vIHN0YXRpYwotR0MzRGVudW0gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChjb25zdCBDQ1JlbmRl
clBhc3MqKQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKLX0KLQotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZy
YW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyKQotewot
ICAgIEhhc2hNYXA8aW50LCBjb25zdCBDQ1JlbmRlclBhc3MqPiByZW5kZXJQYXNzZXNJbkZyYW1l
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6
ZSgpOyArK2kpCi0gICAgICAgIHJlbmRlclBhc3Nlc0luRnJhbWUuc2V0KHJlbmRlclBhc3Nlc0lu
RHJhd09yZGVyW2ldLT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXSk7Ci0KLSAgICBW
ZWN0b3I8aW50PiBwYXNzZXNUb0RlbGV0ZTsKLSAgICBIYXNoTWFwPGludCwgT3duUHRyPENhY2hl
ZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsKLSAgICBmb3IgKHBhc3NJ
dGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBhc3NJdGVyYXRvciAhPSBt
X3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3IpIHsKLSAgICAgICAgY29u
c3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJlbmRlclBhc3Nlc0luRnJhbWUu
Z2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAoIXJlbmRlclBhc3NJbkZyYW1l
KSB7Ci0gICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5maXJz
dCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IElu
dFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJlbmRlclBhc3NUZXh0dXJlU2l6ZShyZW5kZXJQYXNzSW5G
cmFtZSk7Ci0gICAgICAgIEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0ID0gcmVuZGVyUGFzc1RleHR1
cmVGb3JtYXQocmVuZGVyUGFzc0luRnJhbWUpOwotICAgICAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0
dXJlID0gcGFzc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCh0ZXh0dXJl
KTsKLQotICAgICAgICBpZiAodGV4dHVyZS0+aWQoKSAmJiAodGV4dHVyZS0+c2l6ZSgpICE9IHJl
cXVpcmVkU2l6ZSB8fCB0ZXh0dXJlLT5mb3JtYXQoKSAhPSByZXF1aXJlZEZvcm1hdCkpCi0gICAg
ICAgICAgICB0ZXh0dXJlLT5mcmVlKCk7Ci0gICAgfQotCi0gICAgLy8gRGVsZXRlIFJlbmRlclBh
c3MgdGV4dHVyZXMgZnJvbSB0aGUgcHJldmlvdXMgZnJhbWUgdGhhdCB3aWxsIG5vdCBiZSB1c2Vk
IGFnYWluLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFzc2VzVG9EZWxldGUuc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnJlbW92ZShwYXNzZXNUb0RlbGV0
ZVtpXSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclBhc3Nlc0luRHJhd09y
ZGVyLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9yZW5kZXJQYXNzVGV4dHVyZXMuY29u
dGFpbnMocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCkpKSB7Ci0gICAgICAgICAgICBP
d25QdHI8Q2FjaGVkVGV4dHVyZT4gdGV4dHVyZSA9IENhY2hlZFRleHR1cmU6OmNyZWF0ZShtX3Jl
c291cmNlUHJvdmlkZXIpOwotICAgICAgICAgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMuc2V0KHJl
bmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCB0ZXh0dXJlLnJlbGVhc2UoKSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpoYXZlQ2FjaGVk
UmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3QKLXsKLSAgICBDYWNoZWRUZXh0
dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KGlkKTsKLSAgICByZXR1cm4g
dGV4dHVyZSAmJiB0ZXh0dXJlLT5pZCgpICYmIHRleHR1cmUtPmlzQ29tcGxldGUoKTsKLX0KLQot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NM
aXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlciwgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNoTWFw
JiByZW5kZXJQYXNzZXNCeUlkKQotewotICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRl
clBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5sYXN0KCk7Ci0gICAgQVNTRVJUKHJvb3RS
ZW5kZXJQYXNzKTsKLQotICAgIERyYXdpbmdGcmFtZSBmcmFtZTsKLSAgICBmcmFtZS5yZW5kZXJQ
YXNzZXNCeUlkID0gJnJlbmRlclBhc3Nlc0J5SWQ7Ci0gICAgZnJhbWUucm9vdFJlbmRlclBhc3Mg
PSByb290UmVuZGVyUGFzczsKLQotICAgIGZyYW1lLnJvb3REYW1hZ2VSZWN0ID0gbV9jYXBhYmls
aXRpZXMudXNpbmdQYXJ0aWFsU3dhcCA/IGZyYW1lLnJvb3RSZW5kZXJQYXNzLT5kYW1hZ2VSZWN0
KCkgOiBmcmFtZS5yb290UmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpOwotICAgIGZyYW1lLnJvb3RE
YW1hZ2VSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIHZpZXdwb3J0U2l6
ZSgpKSk7Ci0KLSAgICBiZWdpbkRyYXdpbmdGcmFtZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkKLSAgICAgICAgZHJh
d1JlbmRlclBhc3MoZnJhbWUsIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldKTsKLQotICAgIGZp
bmlzaERyYXdpbmdGcmFtZSgpOwotCi0gICAgbV9zd2FwQnVmZmVyUmVjdC51bml0ZShlbmNsb3Np
bmdJbnRSZWN0KGZyYW1lLnJvb3REYW1hZ2VSZWN0KSk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSgpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6YmVnaW5EcmF3aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJiBmcmFtZSkKIHsKICAgICAvLyBGSVhN
RTogUmVtb3ZlIHRoaXMgb25jZSBmcmFtZWJ1ZmZlciBpcyBhdXRvbWF0aWNhbGx5IHJlY3JlYXRl
ZCBvbiBmaXJzdCB1c2UKICAgICBlbnN1cmVGcmFtZWJ1ZmZlcigpOwpAQCAtNDA5LDM5ICsyNjAs
OCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZG9Ob09wKCkKICAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kZXJQYXNz
KiByZW5kZXJQYXNzKQotewotICAgIGlmICghdXNlUmVuZGVyUGFzcyhmcmFtZSwgcmVuZGVyUGFz
cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdCA9IHJlbmRl
clBhc3MtPm91dHB1dFJlY3QoKTsKLSAgICBpZiAoZnJhbWUucm9vdERhbWFnZVJlY3QgIT0gZnJh
bWUucm9vdFJlbmRlclBhc3MtPm91dHB1dFJlY3QoKSkgewotICAgICAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpbnZlcnNlVHJhbnNmb3JtVG9Sb290ID0gcmVuZGVyUGFzcy0+dHJhbnNmb3Jt
VG9Sb290VGFyZ2V0KCkuaW52ZXJzZSgpOwotICAgICAgICBzY2lzc29yUmVjdC5pbnRlcnNlY3Qo
Q0NNYXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0KGludmVyc2VUcmFuc2Zvcm1Ub1Jvb3QsIGZy
YW1lLnJvb3REYW1hZ2VSZWN0KSk7Ci0gICAgfQotCi0gICAgc2V0U2Npc3NvclRvUmVjdChmcmFt
ZSwgZW5jbG9zaW5nSW50UmVjdChzY2lzc29yUmVjdCkpOwotICAgIGNsZWFyRnJhbWVidWZmZXIo
ZnJhbWUpOwotCi0gICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExpc3QgPSByZW5kZXJQYXNzLT5x
dWFkTGlzdCgpOwotICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RCYWNrVG9Gcm9udEl0ZXJhdG9y
IGl0ID0gcXVhZExpc3QuYmFja1RvRnJvbnRCZWdpbigpOyBpdCAhPSBxdWFkTGlzdC5iYWNrVG9G
cm9udEVuZCgpOyArK2l0KQotICAgICAgICBkcmF3UXVhZChmcmFtZSwgaXQtPmdldCgpLCBzY2lz
c29yUmVjdCk7Ci0KLSAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4
dHVyZXMuZ2V0KHJlbmRlclBhc3MtPmlkKCkpOwotICAgIGlmICh0ZXh0dXJlKQotICAgICAgICB0
ZXh0dXJlLT5zZXRJc0NvbXBsZXRlKCFyZW5kZXJQYXNzLT5oYXNPY2NsdXNpb25Gcm9tT3V0c2lk
ZVRhcmdldFN1cmZhY2UoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0RyYXdRdWFkKiBxdWFkLCBGbG9hdFJl
Y3Qgc2Npc3NvclJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoRHJh
d2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NEcmF3UXVhZCogcXVhZCkKIHsKLSAgICBzY2lzc29y
UmVjdC5pbnRlcnNlY3QocXVhZC0+Y2xpcHBlZFJlY3RJblRhcmdldCgpKTsKLSAgICBpZiAoc2Np
c3NvclJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGb3Igbm93LCB3
ZSBhbHdheXMgZG8gcGVyLXF1YWQgc2Npc3NvcmluZyBiZWNhdXNlIHNvbWUgcXVhZCB0eXBlcyBk
cmF3IHRoZWlyCi0gICAgLy8gdW4tY2xpcHBlZCBib3VuZHMsIHJlbHlpbmcgb24gc2Npc3Nvcmlu
ZyBmb3IgY29ycmVjdCBjbGlwcGluZy4KLSAgICBzZXRTY2lzc29yVG9SZWN0KGZyYW1lLCBlbmNs
b3NpbmdJbnRSZWN0KHNjaXNzb3JSZWN0KSk7Ci0KICAgICBpZiAocXVhZC0+bmVlZHNCbGVuZGlu
ZygpKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQpKTsKICAgICBlbHNlCkBAIC00ODEsNyArMzAxLDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IEND
RHJhd1F1YWQqIHF1YWQKICAgICB9CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3Q2hlY2tlcmJvYXJkUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0NoZWNrZXJi
b2FyZERyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdDaGVj
a2VyYm9hcmRRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDQ2hlY2tlcmJv
YXJkRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgY29uc3QgVGlsZUNoZWNrZXJib2FyZFByb2dyYW0q
IHByb2dyYW0gPSB0aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFt
ICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpAQCAtNTAzLDcgKzMyMyw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q2hlY2tlcmJvYXJkUXVhZChEcmF3aW5nRnJhbWUmIGZy
YW1lLCBjb25zdCBDQ0NoCiAgICAgZHJhd1F1YWRHZW9tZXRyeShmcmFtZSwgcXVhZC0+cXVhZFRy
YW5zZm9ybSgpLCBxdWFkLT5xdWFkUmVjdCgpLCBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRy
aXhMb2NhdGlvbigpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdEZWJ1
Z0JvcmRlclF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdR
dWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlclF1
YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFk
KiBxdWFkKQogewogICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsxNl07CiAgICAgY29uc3QgU29s
aWRDb2xvclByb2dyYW0qIHByb2dyYW0gPSBzb2xpZENvbG9yUHJvZ3JhbSgpOwpAQCAtNzYwLDcg
KzU4MCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQo
RHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kCiAgICAgZHJhd1F1YWRHZW9tZXRyeShm
cmFtZSwgcXVhZC0+cXVhZFRyYW5zZm9ybSgpLCBxdWFkLT5xdWFkUmVjdCgpLCBzaGFkZXJNYXRy
aXhMb2NhdGlvbik7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U29saWRD
b2xvclF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQq
IHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JRdWFkKGNv
bnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiBxdWFk
KQogewogICAgIGNvbnN0IFNvbGlkQ29sb3JQcm9ncmFtKiBwcm9ncmFtID0gc29saWRDb2xvclBy
b2dyYW0oKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3Jh
bS0+cHJvZ3JhbSgpKSk7CkBAIC03OTksNyArNjE5LDcgQEAgc3RhdGljIHZvaWQgdGlsZVVuaWZv
cm1Mb2NhdGlvbihUIHByb2dyYW0sIFRpbGVQcm9ncmFtVW5pZm9ybXMmIHVuaWZvcm1zKQogICAg
IHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxv
Y2F0aW9uKCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQo
RHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NUaWxlRHJhd1F1YWQqIHF1YWQpCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYgZnJh
bWUsIGNvbnN0IENDVGlsZURyYXdRdWFkKiBxdWFkKQogewogICAgIEludFJlY3QgdGlsZVJlY3Qg
PSBxdWFkLT5xdWFkVmlzaWJsZVJlY3QoKTsKIApAQCAtOTY2LDcgKzc4Niw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29u
c3QgQ0NUaWxlRHJhd1F1CiAgICAgZHJhd1F1YWRHZW9tZXRyeShmcmFtZSwgcXVhZC0+cXVhZFRy
YW5zZm9ybSgpLCBjZW50ZXJlZFJlY3QsIHVuaWZvcm1zLm1hdHJpeExvY2F0aW9uKTsKIH0KIAot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVZWaWRlb1F1YWQoRHJhd2luZ0ZyYW1l
JiBmcmFtZSwgY29uc3QgQ0NZVVZWaWRlb0RyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdZVVZWaWRlb1F1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwg
Y29uc3QgQ0NZVVZWaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAgIGNvbnN0IFZpZGVvWVVWUHJv
Z3JhbSogcHJvZ3JhbSA9IHZpZGVvWVVWUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYm
IHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpAQCAtMTAyNiw3ICs4NDYsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVlZpZGVvUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBj
b25zdCBDQ1lVVlZpZAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+YWN0aXZlVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdTdHJlYW1WaWRlb1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NTdHJlYW1WaWRlb0RyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdTdHJlYW1WaWRlb1F1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NT
dHJlYW1WaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsx
Nl07CiAKQEAgLTEwNzEsNyArODkxLDcgQEAgc3RydWN0IFRleFRyYW5zZm9ybVRleHR1cmVQcm9n
cmFtQmluZGluZyA6IFRleHR1cmVQcm9ncmFtQmluZGluZyB7CiAgICAgaW50IHRleFRyYW5zZm9y
bUxvY2F0aW9uOwogfTsKIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJl
UXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCogcXVhZCkK
K3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZVF1YWQoY29uc3QgRHJhd2lu
Z0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIApAQCAtMTExNSw3ICs5MzUsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVRdWFkKERyYXdpbmdGcmFtZSYgZnJh
bWUsIGNvbnN0IENDVGV4dHVyZQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJs
ZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01J
TlVTX1NSQ19BTFBIQSkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0lP
U3VyZmFjZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NJT1N1cmZhY2VEcmF3UXVh
ZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SU9TdXJmYWNlUXVhZChj
b25zdCBEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0lPU3VyZmFjZURyYXdRdWFkKiBxdWFk
KQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgVGV4VHJhbnNm
b3JtVGV4dHVyZVByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CkBAIC0xMTM3LDggKzk1NywxMSBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0lPU3VyZmFjZVF1YWQoRHJhd2luZ0ZyYW1l
JiBmcmFtZSwgY29uc3QgQ0NJT1N1cgogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+Ymlu
ZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdMRV9BUkIsIDApKTsKIH0KIAot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSgpCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKERyYXdpbmdGcmFtZSYgZnJh
bWUpCiB7CisgICAgbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrLmNsZWFyKCk7CisgICAgbV9zd2Fw
QnVmZmVyUmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnJvb3REYW1hZ2VSZWN0KSk7
CisKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKIH0KQEAgLTExODYsMjAgKzEwMDksMTggQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNoYWRlck9wYWNpdHkoZmxvYXQgb3BhY2l0
eSwgaW50IGFscGhhTG9jYXRpb24pCiAgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
dW5pZm9ybTFmKGFscGhhTG9jYXRpb24sIG9wYWNpdHkpKTsKIH0KIAotdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdRdWFkR2VvbWV0cnkoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgRmxv
YXRSZWN0JiBxdWFkUmVjdCwgaW50IG1hdHJpeExvY2F0aW9uKQordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdRdWFkR2VvbWV0cnkoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29u
c3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3Qg
RmxvYXRSZWN0JiBxdWFkUmVjdCwgaW50IG1hdHJpeExvY2F0aW9uKQogewotICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHF1YWRNYXRyaXggPSBkcmF3VHJhbnNmb3JtOwotICAgIHF1YWRNYXRy
aXgudHJhbnNsYXRlKDAuNSAqIHF1YWRSZWN0LndpZHRoKCkgKyBxdWFkUmVjdC54KCksIDAuNSAq
IHF1YWRSZWN0LmhlaWdodCgpICsgcXVhZFJlY3QueSgpKTsKLSAgICBxdWFkTWF0cml4LnNjYWxl
Tm9uVW5pZm9ybShxdWFkUmVjdC53aWR0aCgpLCBxdWFkUmVjdC5oZWlnaHQoKSk7Ci0KKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkUmVjdE1hdHJpeDsKKyAgICBxdWFkUmVjdFRyYW5z
Zm9ybSgmcXVhZFJlY3RNYXRyaXgsIGRyYXdUcmFuc2Zvcm0sIHF1YWRSZWN0KTsKICAgICBzdGF0
aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOwotICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBmcmFt
ZS5wcm9qZWN0aW9uTWF0cml4ICogcXVhZE1hdHJpeCk7CisgICAgdG9HTE1hdHJpeCgmZ2xNYXRy
aXhbMF0sIGZyYW1lLnByb2plY3Rpb25NYXRyaXggKiBxdWFkUmVjdE1hdHJpeCk7CiAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KG1hdHJpeExvY2F0aW9uLCAx
LCBmYWxzZSwgJmdsTWF0cml4WzBdKSk7CiAKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCA2LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihEcmF3aW5nRnJhbWUmIGZyYW1lLCBpbnQg
dGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZHJhd01hdHJpeCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5VGV4dHVy
ZVRvRnJhbWVidWZmZXIoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgaW50IHRleHR1cmVJZCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdN
YXRyaXgpCiB7CiAgICAgY29uc3QgUmVuZGVyUGFzc1Byb2dyYW0qIHByb2dyYW0gPSByZW5kZXJQ
YXNzUHJvZ3JhbSgpOwogCkBAIC0xMzg0LDMxICsxMjA1LDYgQEAgYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmdldEZyYW1lYnVmZmVyVGV4dHVyZShDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUs
IGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmlzQ3VycmVudFJlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kZXJQ
YXNzKiByZW5kZXJQYXNzKQotewotICAgIHJldHVybiBmcmFtZS5jdXJyZW50UmVuZGVyUGFzcyA9
PSByZW5kZXJQYXNzICYmICFmcmFtZS5jdXJyZW50VGV4dHVyZTsKLX0KLQotYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQotewotICAgIGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNz
ID0gcmVuZGVyUGFzczsKLSAgICBmcmFtZS5jdXJyZW50VGV4dHVyZSA9IDA7Ci0KLSAgICBpZiAo
cmVuZGVyUGFzcyA9PSBmcmFtZS5yb290UmVuZGVyUGFzcykgewotICAgICAgICBmcmFtZS5jdXJy
ZW50RnJhbWVidWZmZXJMb2NrLmNsZWFyKCk7Ci0gICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCkp
OwotICAgICAgICBzZXREcmF3RnJhbWVidWZmZXJSZWN0KGZyYW1lLCByZW5kZXJQYXNzLT5vdXRw
dXRSZWN0KCksIHRydWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBDYWNo
ZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KHJlbmRlclBhc3Mt
PmlkKCkpOwotICAgIEFTU0VSVCh0ZXh0dXJlKTsKLSAgICBpZiAoIXRleHR1cmUtPmlkKCkgJiYg
IXRleHR1cmUtPmFsbG9jYXRlKENDUmVuZGVyZXI6OkltcGxQb29sLCByZW5kZXJQYXNzVGV4dHVy
ZVNpemUocmVuZGVyUGFzcyksIHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3MpLCBD
Q1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUZyYW1lYnVmZmVyKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShmcmFtZSwg
dGV4dHVyZSwgcmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpKTsKLX0KLQogYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnVzZVNjb3BlZFRleHR1cmUoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NTY29wZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpCiB7
CiAgICAgQVNTRVJUKHRleHR1cmUtPmlkKCkpOwpAQCAtMTQxOCwxMyArMTIxNCwxOSBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2NvcGVkVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZy
YW1lLCBjb25zdCBDQ1Njb3BlZAogICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUo
ZnJhbWUsIHRleHR1cmUsIHZpZXdwb3J0UmVjdCk7CiB9CiAKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb091dHB1dFN1cmZhY2UoRHJhd2luZ0ZyYW1lJiBmcmFt
ZSkKK3sKKyAgICBtX2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2suY2xlYXIoKTsKKyAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIDApKTsKK30KKwogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFt
ZWJ1ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1Njb3BlZFRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkKIHsKICAgICBBU1NF
UlQodGV4dHVyZS0+aWQoKSk7CiAKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fb2Zmc2NyZWVuRnJh
bWVidWZmZXJJZCkpOwotICAgIGZyYW1lLmN1cnJlbnRGcmFtZWJ1ZmZlckxvY2sgPSBhZG9wdFB0
cihuZXcgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZShtX3Jlc291cmNlUHJvdmlkZXIsIHRl
eHR1cmUtPmlkKCkpKTsKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBmcmFtZS5jdXJyZW50RnJh
bWVidWZmZXJMb2NrLT50ZXh0dXJlSWQoKTsKKyAgICBtX2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2sg
PSBhZG9wdFB0cihuZXcgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZShtX3Jlc291cmNlUHJv
dmlkZXIsIHRleHR1cmUtPmlkKCkpKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSBtX2N1cnJl
bnRGcmFtZWJ1ZmZlckxvY2stPnRleHR1cmVJZCgpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCB0ZXh0dXJlSWQsIDApKTsKIAogI2lmICFkZWZpbmVkICggTkRFQlVHICkK
QEAgLTE0MzQsNTEgKzEyMzYsMzIgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRG
cmFtZWJ1ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdAogICAgIH0KICNl
bmRpZgogCi0gICAgc2V0RHJhd0ZyYW1lYnVmZmVyUmVjdChmcmFtZSwgZnJhbWVidWZmZXJSZWN0
LCBmYWxzZSk7CisgICAgaW5pdGlhbGl6ZU1hdHJpY2VzKGZyYW1lLCBmcmFtZWJ1ZmZlclJlY3Qs
IGZhbHNlKTsKKyAgICBzZXREcmF3Vmlld3BvcnRTaXplKGZyYW1lYnVmZmVyUmVjdC5zaXplKCkp
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFNldHMgdGhlIHNjaXNzb3IgcmVnaW9uIHRv
IHRoZSBnaXZlbiByZWN0YW5nbGUuIFRoZSBjb29yZGluYXRlIHN5c3RlbSBmb3IgdGhlCi0vLyBz
Y2lzc29yUmVjdCBoYXMgaXRzIG9yaWdpbiBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBj
dXJyZW50IHZpc2libGUgcmVjdC4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lz
c29yVG9SZWN0KERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0
KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmVuYWJsZVNjaXNzb3JUZXN0UmVjdChjb25z
dCBJbnRSZWN0JiBzY2lzc29yUmVjdCkKIHsKLSAgICBJbnRSZWN0IGZyYW1lYnVmZmVyT3V0cHV0
UmVjdCA9IGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7Ci0KICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKSk7Ci0KLSAgICAvLyBUaGUgc2Npc3NvciBjb29yZGluYXRlcyBtdXN0IGJlIHN1cHBsaWVk
IGluIHZpZXdwb3J0IHNwYWNlIHNvIHdlIG5lZWQgdG8gb2Zmc2V0Ci0gICAgLy8gYnkgdGhlIHJl
bGF0aXZlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGN1cnJlbnQgcmVu
ZGVyIHBhc3MuCi0gICAgaW50IHNjaXNzb3JYID0gc2Npc3NvclJlY3QueCgpIC0gZnJhbWVidWZm
ZXJPdXRwdXRSZWN0LngoKTsKLSAgICAvLyBXaGVuIHJlbmRlcmluZyB0byB0aGUgZGVmYXVsdCBy
ZW5kZXIgc3VyZmFjZSB3ZSdyZSByZW5kZXJpbmcgdXBzaWRlIGRvd24gc28gdGhlIHRvcAotICAg
IC8vIG9mIHRoZSBHTCBzY2lzc29yIGlzIHRoZSBib3R0b20gb2Ygb3VyIGxheWVyLgotICAgIC8v
IEJ1dCwgaWYgcmVuZGVyaW5nIHRvIG9mZnNjcmVlbiB0ZXh0dXJlLCB3ZSByZXZlcnNlIG91ciBz
ZW5zZSBvZiAndXBzaWRlIGRvd24nLgotICAgIGludCBzY2lzc29yWTsKLSAgICBpZiAoaXNDdXJy
ZW50UmVuZGVyUGFzcyhmcmFtZSwgZnJhbWUucm9vdFJlbmRlclBhc3MpKQotICAgICAgICBzY2lz
c29yWSA9IGZyYW1lYnVmZmVyT3V0cHV0UmVjdC5oZWlnaHQoKSAtIChzY2lzc29yUmVjdC5tYXhZ
KCkgLSBmcmFtZWJ1ZmZlck91dHB1dFJlY3QueSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHNjaXNz
b3JZID0gc2Npc3NvclJlY3QueSgpIC0gZnJhbWVidWZmZXJPdXRwdXRSZWN0LnkoKTsKLSAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnNjaXNzb3Ioc2Npc3NvclgsIHNjaXNzb3JZLCBzY2lz
c29yUmVjdC53aWR0aCgpLCBzY2lzc29yUmVjdC5oZWlnaHQoKSkpOworICAgIEdMQyhtX2NvbnRl
eHQsIG1fY29udGV4dC0+c2Npc3NvcihzY2lzc29yUmVjdC54KCksIHNjaXNzb3JSZWN0LnkoKSwg
c2Npc3NvclJlY3Qud2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsKIH0KIAotYm9vbCBM
YXllclJlbmRlcmVyQ2hyb21pdW06Om1ha2VDb250ZXh0Q3VycmVudCgpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZGlzYWJsZVNjaXNzb3JUZXN0KCkKIHsKLSAgICByZXR1cm4gbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogfQogCi0vLyBTZXRz
IHRoZSBjb29yZGluYXRlIHJhbmdlIG9mIGNvbnRlbnQgdGhhdCBlbmRzIGJlaW5nIGRyYXduIG9u
dG8gdGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZS4KLS8vIFRoZSB0YXJnZXQgcmVuZGVyIHN1cmZh
Y2UgaXMgYXNzdW1lZCB0byBoYXZlIGFuIG9yaWdpbiBhdCAwLCAwIGFuZCB0aGUgd2lkdGggYW5k
IGhlaWdodCBvZgotLy8gb2YgdGhlIGRyYXdSZWN0Lgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnNldERyYXdGcmFtZWJ1ZmZlclJlY3QoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgSW50
UmVjdCYgZHJhd1JlY3QsIGJvb2wgZmxpcFkpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c2V0RHJhd1ZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCiB7Ci0gICAg
aWYgKGZsaXBZKQotICAgICAgICBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgo
ZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5tYXhYKCksIGRyYXdSZWN0Lm1heFkoKSwgZHJhd1JlY3Qu
eSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGZyYW1lLnByb2plY3Rpb25NYXRyaXggPSBvcnRob01h
dHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0Lm1heFgoKSwgZHJhd1JlY3QueSgpLCBkcmF3UmVj
dC5tYXhZKCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwg
ZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpKTsKLSAgICBmcmFtZS53aW5kb3dN
YXRyaXggPSBzY3JlZW5NYXRyaXgoMCwgMCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVp
Z2h0KCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgdmll
d3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOwogfQogCitib29sIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICByZXR1cm4g
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KIAogYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKIHsKQEAgLTE0OTAsNyArMTI3Myw3
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygp
CiAKICAgICAvLyBXZSB3aWxsIGFsd2F5cyBuZWVkIHRoZXNlIHByb2dyYW1zIHRvIHJlbmRlciwg
c28gY3JlYXRlIHRoZSBwcm9ncmFtcyBlYWdlcmx5IHNvIHRoYXQgdGhlIHNoYWRlciBjb21waWxh
dGlvbiBjYW4KICAgICAvLyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhlciBwcm9n
cmFtcyBhcmUgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLgotICAgIG1fc2hhcmVkR2Vv
bWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dCkpOworICAgIG1f
c2hhcmVkR2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dCwg
cXVhZFZlcnRleFJlY3QoKSkpOwogICAgIG1fcmVuZGVyUGFzc1Byb2dyYW0gPSBhZG9wdFB0cihu
ZXcgUmVuZGVyUGFzc1Byb2dyYW0obV9jb250ZXh0KSk7CiAgICAgbV90aWxlUHJvZ3JhbSA9IGFk
b3B0UHRyKG5ldyBUaWxlUHJvZ3JhbShtX2NvbnRleHQpKTsKICAgICBtX3RpbGVQcm9ncmFtT3Bh
cXVlID0gYWRvcHRQdHIobmV3IFRpbGVQcm9ncmFtT3BhcXVlKG1fY29udGV4dCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAxNzkxMDMzNTlhNDliNGY5NzA4YjkxNGM5
ODJjMGZjZWRhNTA2MDUyLi5hOTk3ZWY2MzJlZjczOWViYjY0YzQ1MDJkOGY3OTI3YjE4NzM3YWZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMzgsOSArMzgsOSBAQAog
I2luY2x1ZGUgIlRleHR1cmVDb3BpZXIuaCIKICNpbmNsdWRlICJjYy9DQ0NoZWNrZXJib2FyZERy
YXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCisjaW5jbHVk
ZSAiY2MvQ0NEaXJlY3RSZW5kZXJlci5oIgogI2luY2x1ZGUgImNjL0NDSU9TdXJmYWNlRHJhd1F1
YWQuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oIgotI2luY2x1ZGUgImNj
L0NDUmVuZGVyZXIuaCIKICNpbmNsdWRlICJjYy9DQ1NvbGlkQ29sb3JEcmF3UXVhZC5oIgogI2lu
Y2x1ZGUgImNjL0NDU3RyZWFtVmlkZW9EcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVy
ZURyYXdRdWFkLmgiCkBAIC01OSw3ICs1OSw3IEBAIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNs
YXNzIFNjb3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbjsKIAogLy8gQ2xhc3MgdGhhdCBo
YW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgotY2xh
c3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIENDUmVuZGVyZXIsCitjbGFzcyBMYXll
clJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgQ0NEaXJlY3RSZW5kZXJlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpX
ZWJHcmFwaGljc1N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6
OldlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNICwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEOjpXZWJHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2sgewpAQCAtNzcsMTEgKzc3LDYg
QEAgcHVibGljOgogCiAgICAgY29uc3QgRmxvYXRRdWFkJiBzaGFyZWRHZW9tZXRyeVF1YWQoKSBj
b25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5UXVhZDsgfQogCi0gICAgdmlydHVhbCB2b2lk
IGRlY2lkZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xp
c3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaGF2ZUNhY2hlZFJlc291cmNlc0ZvclJl
bmRlclBhc3NJZChpbnQgaWQpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2b2lkIGRy
YXdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNo
TWFwJikgT1ZFUlJJREU7Ci0KICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAog
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSBPVkVSUklERTsKIApAQCAtMTAzLDczICs5OCw0NSBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSBPVkVSUklERTsK
IAotICAgIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fcmVzb3VyY2VQcm92aWRlcjsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKENDUmVuZGVyZXJDbGllbnQqLCBDQ1Jlc291cmNlUHJvdmlkZXIqLCBUZXh0dXJl
VXBsb2FkZXJPcHRpb24pOwogCi0KICAgICBib29sIGlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSBj
b25zdCB7IHJldHVybiBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7IH0KICAgICBib29sIGluaXRp
YWxpemUoKTsKIAogICAgIHZvaWQgcmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwogCi1wcml2
YXRlOgotICAgIHN0cnVjdCBEcmF3aW5nRnJhbWUgewotICAgICAgICBjb25zdCBDQ1JlbmRlclBh
c3NJZEhhc2hNYXAqIHJlbmRlclBhc3Nlc0J5SWQ7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFz
cyogcm9vdFJlbmRlclBhc3M7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogY3VycmVudFJl
bmRlclBhc3M7Ci0gICAgICAgIGNvbnN0IENDU2NvcGVkVGV4dHVyZSogY3VycmVudFRleHR1cmU7
Ci0gICAgICAgIE93blB0cjxDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlPiBjdXJyZW50RnJh
bWVidWZmZXJMb2NrOwotCi0gICAgICAgIEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKLQotICAg
ICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7Ci0g
ICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggd2luZG93TWF0cml4OwotCi0g
ICAgICAgIERyYXdpbmdGcmFtZSgpCi0gICAgICAgICAgICA6IHJvb3RSZW5kZXJQYXNzKDApCi0g
ICAgICAgICAgICAsIGN1cnJlbnRSZW5kZXJQYXNzKDApCi0gICAgICAgICAgICAsIGN1cnJlbnRU
ZXh0dXJlKDApCi0gICAgICAgIHsgfQotICAgIH07CisgICAgdmlydHVhbCB2b2lkIGJpbmRGcmFt
ZWJ1ZmZlclRvT3V0cHV0U3VyZmFjZShEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERyYXdpbmdGcmFtZSYsIGNvbnN0IEND
U2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldERyYXdWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBlbmFibGVTY2lzc29yVGVzdFJlY3QoY29uc3QgSW50
UmVjdCYgc2Npc3NvclJlY3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlU2Np
c3NvclRlc3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZWJ1ZmZlcihE
cmF3aW5nRnJhbWUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1F1YWQoRHJhd2lu
Z0ZyYW1lJiwgY29uc3QgQ0NEcmF3UXVhZCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpbkRyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoRHJhd2luZ0ZyYW1lKERyYXdpbmdGcmFtZSYpIE9WRVJSSURFOwogCitwcml2YXRl
OgogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKLSAgICB2b2lkIGJlZ2luRHJhd2luZ0ZyYW1lKCk7Ci0g
ICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3Mq
KTsKLSAgICB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpOwotCi0gICAgdm9pZCBkcmF3UXVhZChE
cmF3aW5nRnJhbWUmLCBjb25zdCBDQ0RyYXdRdWFkKiwgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KTsK
LSAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDQ2hl
Y2tlcmJvYXJkRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoRHJhd2lu
Z0ZyYW1lJiwgY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3Q2hl
Y2tlcmJvYXJkUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0NoZWNrZXJib2FyZERy
YXdRdWFkKik7CisgICAgdm9pZCBkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IERyYXdpbmdGcmFt
ZSYsIGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwogICAgIFBhc3NPd25QdHI8Q0NTY29w
ZWRUZXh0dXJlPiBkcmF3QmFja2dyb3VuZEZpbHRlcnMoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQqLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmLCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pOwog
ICAgIHZvaWQgZHJhd1JlbmRlclBhc3NRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVuZGVy
UGFzc0RyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3U29saWRDb2xvclF1YWQoRHJhd2luZ0ZyYW1l
JiwgY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdTdHJlYW1WaWRl
b1F1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKik7Ci0gICAg
dm9pZCBkcmF3VGV4dHVyZVF1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NUZXh0dXJlRHJhd1F1
YWQqKTsKLSAgICB2b2lkIGRyYXdJT1N1cmZhY2VRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IEND
SU9TdXJmYWNlRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdUaWxlUXVhZChEcmF3aW5nRnJhbWUm
LCBjb25zdCBDQ1RpbGVEcmF3UXVhZCopOwotICAgIHZvaWQgZHJhd1lVVlZpZGVvUXVhZChEcmF3
aW5nRnJhbWUmLCBjb25zdCBDQ1lVVlZpZGVvRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdTb2xp
ZENvbG9yUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVh
ZCopOworICAgIHZvaWQgZHJhd1N0cmVhbVZpZGVvUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBj
b25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlUXVhZChj
b25zdCBEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCopOworICAgIHZvaWQg
ZHJhd0lPU3VyZmFjZVF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NJT1N1cmZhY2VE
cmF3UXVhZCopOworICAgIHZvaWQgZHJhd1RpbGVRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNv
bnN0IENDVGlsZURyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3WVVWVmlkZW9RdWFkKGNvbnN0IERy
YXdpbmdGcmFtZSYsIGNvbnN0IENDWVVWVmlkZW9EcmF3UXVhZCopOwogCiAgICAgdm9pZCBzZXRT
aGFkZXJPcGFjaXR5KGZsb2F0IG9wYWNpdHksIGludCBhbHBoYUxvY2F0aW9uKTsKICAgICB2b2lk
IHNldFNoYWRlckZsb2F0UXVhZChjb25zdCBGbG9hdFF1YWQmLCBpbnQgcXVhZExvY2F0aW9uKTsK
LSAgICB2b2lkIGRyYXdRdWFkR2VvbWV0cnkoRHJhd2luZ0ZyYW1lJiwgY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBx
dWFkUmVjdCwgaW50IG1hdHJpeExvY2F0aW9uKTsKLQotICAgIHZvaWQgY29weVRleHR1cmVUb0Zy
YW1lYnVmZmVyKERyYXdpbmdGcmFtZSYsIGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmLCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKLQotICAg
IHZvaWQgc2V0U2Npc3NvclRvUmVjdChEcmF3aW5nRnJhbWUmLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdm9pZCBkcmF3UXVhZEdlb21ldHJ5KGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVj
dCYgcXVhZFJlY3QsIGludCBtYXRyaXhMb2NhdGlvbik7CiAKLSAgICB2b2lkIHNldERyYXdGcmFt
ZWJ1ZmZlclJlY3QoRHJhd2luZ0ZyYW1lJiwgY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOwor
ICAgIHZvaWQgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGNvbnN0IERyYXdpbmdGcmFtZSYsIGlu
dCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKIAotICAgIC8vIFRoZSBjdXJyZW50IGRyYXdpbmcgdGFy
Z2V0IGlzIGVpdGhlciBhIFJlbmRlclBhc3Mgb3IgU2NvcGVkVGV4dHVyZS4gVXNlIHRoZXNlIGZ1
bmN0aW9ucyB0byBzd2l0Y2ggdG8gYSBuZXcgZHJhd2luZyB0YXJnZXQuCi0gICAgYm9vbCB1c2VS
ZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVuZGVyUGFzcyopOwogICAgIGJvb2wg
dXNlU2NvcGVkVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBj
b25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpOwotICAgIGJvb2wgaXNDdXJyZW50UmVuZGVyUGFz
cyhEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3MqKTsKLQotICAgIGJvb2wgYmluZEZy
YW1lYnVmZmVyVG9UZXh0dXJlKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDU2NvcGVkVGV4dHVyZSos
IGNvbnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCk7Ci0KLSAgICB2b2lkIGNsZWFyRnJhbWVidWZm
ZXIoRHJhd2luZ0ZyYW1lJik7CiAKICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCkBA
IC0xODgsOSArMTU1LDYgQEAgcHJpdmF0ZToKICAgICAvLyBXZWJHcmFwaGljc0NvbnRleHQzRDo6
V2ViR3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1
YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkgT1ZFUlJJREU7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBy
ZW5kZXJQYXNzVGV4dHVyZVNpemUoY29uc3QgQ0NSZW5kZXJQYXNzKik7Ci0gICAgc3RhdGljIEdD
M0RlbnVtIHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KGNvbnN0IENDUmVuZGVyUGFzcyopOwotCiAg
ICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllczsKIAogICAgIHVuc2ln
bmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKQEAgLTE5OCw4ICsxNjIsNiBAQCBwcml2YXRl
OgogICAgIE93blB0cjxHZW9tZXRyeUJpbmRpbmc+IG1fc2hhcmVkR2VvbWV0cnk7CiAgICAgRmxv
YXRRdWFkIG1fc2hhcmVkR2VvbWV0cnlRdWFkOwogCi0gICAgY2xhc3MgQ2FjaGVkVGV4dHVyZTsK
LQogICAgIC8vIFRoaXMgYmxvY2sgb2YgYmluZGluZ3MgZGVmaW5lcyBhbGwgb2YgdGhlIHByb2dy
YW1zIHVzZWQgYnkgdGhlIGNvbXBvc2l0b3IgaXRzZWxmLgogCiAgICAgLy8gVGlsZWQgbGF5ZXIg
c2hhZGVycy4KQEAgLTI3MywxMiArMjM1LDkgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxTb2xp
ZENvbG9yUHJvZ3JhbT4gbV9zb2xpZENvbG9yUHJvZ3JhbTsKIAotICAgIENDUmVzb3VyY2VQcm92
aWRlciogbV9yZXNvdXJjZVByb3ZpZGVyOwogICAgIE93blB0cjxBY2NlbGVyYXRlZFRleHR1cmVD
b3BpZXI+IG1fdGV4dHVyZUNvcGllcjsKICAgICBPd25QdHI8VGV4dHVyZVVwbG9hZGVyPiBtX3Rl
eHR1cmVVcGxvYWRlcjsKIAotICAgIEhhc2hNYXA8aW50LCBPd25QdHI8Q2FjaGVkVGV4dHVyZT4g
PiBtX3JlbmRlclBhc3NUZXh0dXJlczsKLQogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0QqIG1fY29udGV4dDsKIAogICAgIEludFJlY3QgbV9zd2FwQnVmZmVyUmVjdDsKQEAgLTI4Nyw2
ICsyNDYsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1VzaW5nQmluZFVuaWZvcm07CiAgICAg
Ym9vbCBtX3Zpc2libGU7CiAgICAgVGV4dHVyZVVwbG9hZGVyT3B0aW9uIG1fdGV4dHVyZVVwbG9h
ZGVyU2V0dGluZzsKKworICAgIE93blB0cjxDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlPiBt
X2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2s7CiB9OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaAppbmRleCBh
ZmUyZWMwMjU2NGFkN2FiZGM4MDIxNTdlZmY3YmNlODk2Njg3YzRmLi42OGIwZjE2NTY1Nzc1NzY4
NDllYmY0NzU1Y2ZhNGMxNDM5Y2Y1Mjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oCkBAIC01MSw3ICs1
MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmUoUGFyYW1ldGVycykg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpID0gMDsKIAotcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgflRleHR1cmVDb3BpZXIoKSB7IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVVcGxvYWRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZVVwbG9hZGVyLmgKaW5k
ZXggMGE4NjE2MTJlMzU5YWZkNmU0MmQ5MDYxMWU1NjdlNGMzNjIyZTY3Ni4uNDJmY2JlOWJjNTM3
ZjgxMTUxMDllODkzZTM1MTQ4ZjkzMmNjNGFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZVVwbG9hZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZVVwbG9hZGVyLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgVGV4dHVyZVVwbG9hZGVyX2gKIAogI2luY2x1ZGUgIkxh
eWVyVGV4dHVyZVVwZGF0ZXIuaCIKKyNpbmNsdWRlICJjYy9DQ1Jlc291cmNlUHJvdmlkZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NSw2ICs0NiwyNCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIHVwbG9hZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiwgUGFyYW1ldGVy
cykgPSAwOwogfTsKIAorY2xhc3MgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMg
VGV4dHVyZVVwbG9hZGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVbnRocm90dGxlZFRl
eHR1cmVVcGxvYWRlcik7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8VW50aHJvdHRs
ZWRUZXh0dXJlVXBsb2FkZXI+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyKCkpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5VbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcigpIHsgfQorCisgICAgdmlydHVhbCBib29sIGlz
QnVzeSgpIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
VXBsb2FkcygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBlbmRVcGxvYWRzKCkgT1ZF
UlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHVwbG9hZFRleHR1cmUoQ0NSZXNvdXJjZVByb3Zp
ZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBQYXJhbWV0ZXJzIHVwbG9hZCkgT1ZFUlJJREUgeyB1cGxv
YWQudGV4dHVyZS0+dXBkYXRlUmVjdChyZXNvdXJjZVByb3ZpZGVyLCB1cGxvYWQuc291cmNlUmVj
dCwgdXBsb2FkLmRlc3RPZmZzZXQpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBVbnRocm90dGxlZFRl
eHR1cmVVcGxvYWRlcigpIHsgfQorfTsKKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VudGhyb3R0bGVkVGV4dHVyZVVw
bG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbnRo
cm90dGxlZFRleHR1cmVVcGxvYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkNDgwYWZhMGFmNDFlNWVkMDFk
MDcyZGFhOTk1ZjJhN2MxMzE1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbnRocm90dGxlZFRleHR1cmVVcGxvYWRlci5oCkBA
IC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFVudGhyb3R0bGVkVGV4dHVy
ZVVwbG9hZGVyX2gKKyNkZWZpbmUgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXJfaAorCisjaW5j
bHVkZSAiVGV4dHVyZVVwbG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMgVGV4dHVyZVVwbG9hZGVyIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcik7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXI+IGNy
ZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFVudGhyb3R0bGVkVGV4
dHVyZVVwbG9hZGVyKCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5VbnRocm90dGxlZFRleHR1cmVV
cGxvYWRlcigpIHsgfQorCisgICAgdmlydHVhbCBib29sIGlzQnVzeSgpIE9WRVJSSURFIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVXBsb2FkcygpIE9WRVJSSURFIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBlbmRVcGxvYWRzKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVh
bCB2b2lkIHVwbG9hZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVy
LCBQYXJhbWV0ZXJzIHVwbG9hZCkgT1ZFUlJJREUgeyB1cGxvYWQudGV4dHVyZS0+dXBkYXRlUmVj
dChyZXNvdXJjZVByb3ZpZGVyLCB1cGxvYWQuc291cmNlUmVjdCwgdXBsb2FkLmRlc3RPZmZzZXQp
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcigpIHsgfQor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmE4OTgyNTViZTVjYmJlNDQwNDVkNzlmMzAyZGEwYjRlMWFhOWVkZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGlyZWN0UmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiY2MvQ0NEaXJlY3RSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiY2MvQ0NNYXRo
VXRpbC5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgorCit1
c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OworCitzdGF0aWMgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggb3J0aG9Qcm9qZWN0aW9uTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJp
Z2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKK3sKKyAgICAvLyBVc2UgdGhlIHN0YW5kYXJk
IGZvcm11bGEgdG8gbWFwIHRoZSBjbGlwcGluZyBmcnVzdHVtIHRvIHRoZSBjdWJlIGZyb20KKyAg
ICAvLyBbLTEsIC0xLCAtMV0gdG8gWzEsIDEsIDFdLgorICAgIGZsb2F0IGRlbHRhWCA9IHJpZ2h0
IC0gbGVmdDsKKyAgICBmbG9hdCBkZWx0YVkgPSB0b3AgLSBib3R0b207CisgICAgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggcHJvajsKKyAgICBpZiAoIWRlbHRhWCB8fCAhZGVsdGFZKQorICAgICAg
ICByZXR1cm4gcHJvajsKKyAgICBwcm9qLnNldE0xMSgyLjBmIC8gZGVsdGFYKTsKKyAgICBwcm9q
LnNldE00MSgtKHJpZ2h0ICsgbGVmdCkgLyBkZWx0YVgpOworICAgIHByb2ouc2V0TTIyKDIuMGYg
LyBkZWx0YVkpOworICAgIHByb2ouc2V0TTQyKC0odG9wICsgYm90dG9tKSAvIGRlbHRhWSk7CisK
KyAgICAvLyBaIGNvbXBvbmVudCBvZiB2ZXJ0aWNlcyBpcyBhbHdheXMgc2V0IHRvIHplcm8gYXMg
d2UgZG9uJ3QgdXNlIHRoZSBkZXB0aCBidWZmZXIKKyAgICAvLyB3aGlsZSBkcmF3aW5nLgorICAg
IHByb2ouc2V0TTMzKDApOworCisgICAgcmV0dXJuIHByb2o7Cit9CisKK3N0YXRpYyBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB3aW5kb3dNYXRyaXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY2FudmFzOworCisgICAg
Ly8gTWFwIHRvIHdpbmRvdyBwb3NpdGlvbiBhbmQgc2NhbGUgdXAgdG8gcGl4ZWwgY29vcmRpbmF0
ZXMuCisgICAgY2FudmFzLnRyYW5zbGF0ZTNkKHgsIHksIDApOworICAgIGNhbnZhcy5zY2FsZTNk
KHdpZHRoLCBoZWlnaHQsIDApOworCisgICAgLy8gTWFwIGZyb20gKFstMSwgLTFdIHRvIFsxLCAx
XSkgLT4gKFswLCAwXSB0byBbMSwgMV0pCisgICAgY2FudmFzLnRyYW5zbGF0ZTNkKDAuNSwgMC41
LCAwLjUpOworICAgIGNhbnZhcy5zY2FsZTNkKDAuNSwgMC41LCAwLjUpOworCisgICAgcmV0dXJu
IGNhbnZhczsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworLy8KKy8vIHN0YXRpYworRmxvYXRS
ZWN0IENDRGlyZWN0UmVuZGVyZXI6OnF1YWRWZXJ0ZXhSZWN0KCkKK3sKKyAgICByZXR1cm4gRmxv
YXRSZWN0KC0wLjUsIC0wLjUsIDEsIDEpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgQ0NEaXJlY3RS
ZW5kZXJlcjo6cXVhZFJlY3RUcmFuc2Zvcm0oV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCogcXVhZFJlY3RUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFJlY3QpCit7CisgICAgKnF1
YWRSZWN0VHJhbnNmb3JtID0gcXVhZFRyYW5zZm9ybTsKKyAgICBxdWFkUmVjdFRyYW5zZm9ybS0+
dHJhbnNsYXRlKDAuNSAqIHF1YWRSZWN0LndpZHRoKCkgKyBxdWFkUmVjdC54KCksIDAuNSAqIHF1
YWRSZWN0LmhlaWdodCgpICsgcXVhZFJlY3QueSgpKTsKKyAgICBxdWFkUmVjdFRyYW5zZm9ybS0+
c2NhbGVOb25Vbmlmb3JtKHF1YWRSZWN0LndpZHRoKCksIHF1YWRSZWN0LmhlaWdodCgpKTsKK30K
KworLy8gc3RhdGljCit2b2lkIENDRGlyZWN0UmVuZGVyZXI6OmluaXRpYWxpemVNYXRyaWNlcyhE
cmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9vbCBmbGlwWSkK
K3sKKyAgICBpZiAoZmxpcFkpCisgICAgICAgIGZyYW1lLnByb2plY3Rpb25NYXRyaXggPSBvcnRo
b1Byb2plY3Rpb25NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5tYXhYKCksIGRyYXdSZWN0
Lm1heFkoKSwgZHJhd1JlY3QueSgpKTsKKyAgICBlbHNlCisgICAgICAgIGZyYW1lLnByb2plY3Rp
b25NYXRyaXggPSBvcnRob1Byb2plY3Rpb25NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5t
YXhYKCksIGRyYXdSZWN0LnkoKSwgZHJhd1JlY3QubWF4WSgpKTsKKyAgICBmcmFtZS53aW5kb3dN
YXRyaXggPSB3aW5kb3dNYXRyaXgoMCwgMCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVp
Z2h0KCkpOworICAgIGZyYW1lLmZsaXBwZWRZID0gZmxpcFk7Cit9CisKKy8vIHN0YXRpYworSW50
UmVjdCBDQ0RpcmVjdFJlbmRlcmVyOjptb3ZlU2Npc3NvclRvV2luZG93U3BhY2UoY29uc3QgRHJh
d2luZ0ZyYW1lJiBmcmFtZSwgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KQoreworICAgIEludFJlY3Qg
c2Npc3NvclJlY3RJbkNhbnZhc1NwYWNlID0gZW5jbG9zaW5nSW50UmVjdChzY2lzc29yUmVjdCk7
CisgICAgLy8gVGhlIHNjaXNzb3IgY29vcmRpbmF0ZXMgbXVzdCBiZSBzdXBwbGllZCBpbiB2aWV3
cG9ydCBzcGFjZSBzbyB3ZSBuZWVkIHRvIG9mZnNldAorICAgIC8vIGJ5IHRoZSByZWxhdGl2ZSBw
b3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHJlbmRlciBwYXNz
LgorICAgIEludFJlY3QgZnJhbWVidWZmZXJPdXRwdXRSZWN0ID0gZnJhbWUuY3VycmVudFJlbmRl
clBhc3MtPm91dHB1dFJlY3QoKTsKKyAgICBzY2lzc29yUmVjdEluQ2FudmFzU3BhY2Uuc2V0WChz
Y2lzc29yUmVjdEluQ2FudmFzU3BhY2UueCgpIC0gZnJhbWVidWZmZXJPdXRwdXRSZWN0LngoKSk7
CisgICAgaWYgKGZyYW1lLmZsaXBwZWRZICYmICFmcmFtZS5jdXJyZW50VGV4dHVyZSkKKyAgICAg
ICAgc2Npc3NvclJlY3RJbkNhbnZhc1NwYWNlLnNldFkoZnJhbWVidWZmZXJPdXRwdXRSZWN0Lmhl
aWdodCgpIC0gKHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZS5tYXhZKCkgLSBmcmFtZWJ1ZmZlck91
dHB1dFJlY3QueSgpKSk7CisgICAgZWxzZQorICAgICAgICBzY2lzc29yUmVjdEluQ2FudmFzU3Bh
Y2Uuc2V0WShzY2lzc29yUmVjdEluQ2FudmFzU3BhY2UueSgpIC0gZnJhbWVidWZmZXJPdXRwdXRS
ZWN0LnkoKSk7CisgICAgcmV0dXJuIHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZTsKK30KKwordm9p
ZCBDQ0RpcmVjdFJlbmRlcmVyOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShj
b25zdCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikKK3sKKyAgICBI
YXNoTWFwPGludCwgY29uc3QgQ0NSZW5kZXJQYXNzKj4gcmVuZGVyUGFzc2VzSW5GcmFtZTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUoKTsg
KytpKQorICAgICAgICByZW5kZXJQYXNzZXNJbkZyYW1lLnNldChyZW5kZXJQYXNzZXNJbkRyYXdP
cmRlcltpXS0+aWQoKSwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0pOworCisgICAgVmVjdG9y
PGludD4gcGFzc2VzVG9EZWxldGU7CisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxDYWNoZWRUZXh0
dXJlPiA+Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0b3I7CisgICAgZm9yIChwYXNzSXRlcmF0
b3IgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5iZWdpbigpOyBwYXNzSXRlcmF0b3IgIT0gbV9yZW5k
ZXJQYXNzVGV4dHVyZXMuZW5kKCk7ICsrcGFzc0l0ZXJhdG9yKSB7CisgICAgICAgIGNvbnN0IEND
UmVuZGVyUGFzcyogcmVuZGVyUGFzc0luRnJhbWUgPSByZW5kZXJQYXNzZXNJbkZyYW1lLmdldChw
YXNzSXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgaWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgewor
ICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBJbnRTaXpl
JiByZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzc0luRnJhbWUp
OworICAgICAgICBHQzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IHJlbmRlclBhc3NUZXh0dXJlRm9y
bWF0KHJlbmRlclBhc3NJbkZyYW1lKTsKKyAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9
IHBhc3NJdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICBBU1NFUlQodGV4dHVyZSk7CisK
KyAgICAgICAgaWYgKHRleHR1cmUtPmlkKCkgJiYgKHRleHR1cmUtPnNpemUoKSAhPSByZXF1aXJl
ZFNpemUgfHwgdGV4dHVyZS0+Zm9ybWF0KCkgIT0gcmVxdWlyZWRGb3JtYXQpKQorICAgICAgICAg
ICAgdGV4dHVyZS0+ZnJlZSgpOworICAgIH0KKworICAgIC8vIERlbGV0ZSBSZW5kZXJQYXNzIHRl
eHR1cmVzIGZyb20gdGhlIHByZXZpb3VzIGZyYW1lIHRoYXQgd2lsbCBub3QgYmUgdXNlZCBhZ2Fp
bi4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3Nlc1RvRGVsZXRlLnNpemUoKTsgKytp
KQorICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlcy5yZW1vdmUocGFzc2VzVG9EZWxldGVbaV0p
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAoIW1fcmVuZGVyUGFzc1RleHR1cmVzLmNvbnRhaW5z
KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpKSkgeworICAgICAgICAgICAgT3duUHRy
PENhY2hlZFRleHR1cmU+IHRleHR1cmUgPSBDYWNoZWRUZXh0dXJlOjpjcmVhdGUobV9yZXNvdXJj
ZVByb3ZpZGVyKTsKKyAgICAgICAgICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnNldChyZW5kZXJQ
YXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgdGV4dHVyZS5yZWxlYXNlKCkpOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIENDRGlyZWN0UmVuZGVyZXI6OmRyYXdGcmFtZShjb25zdCBDQ1Jl
bmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlciwgY29uc3QgQ0NSZW5kZXJQYXNz
SWRIYXNoTWFwJiByZW5kZXJQYXNzZXNCeUlkKQoreworICAgIGNvbnN0IENDUmVuZGVyUGFzcyog
cm9vdFJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5sYXN0KCk7CisgICAgQVNT
RVJUKHJvb3RSZW5kZXJQYXNzKTsKKworICAgIERyYXdpbmdGcmFtZSBmcmFtZTsKKyAgICBmcmFt
ZS5yZW5kZXJQYXNzZXNCeUlkID0gJnJlbmRlclBhc3Nlc0J5SWQ7CisgICAgZnJhbWUucm9vdFJl
bmRlclBhc3MgPSByb290UmVuZGVyUGFzczsKKyAgICBmcmFtZS5yb290RGFtYWdlUmVjdCA9IGNh
cGFiaWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXAgPyByb290UmVuZGVyUGFzcy0+ZGFtYWdlUmVj
dCgpIDogcm9vdFJlbmRlclBhc3MtPm91dHB1dFJlY3QoKTsKKyAgICBmcmFtZS5yb290RGFtYWdl
UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCB2aWV3cG9ydFNpemUoKSkp
OworCisgICAgYmVnaW5EcmF3aW5nRnJhbWUoZnJhbWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdS
ZW5kZXJQYXNzKGZyYW1lLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXSk7CisgICAgZmluaXNo
RHJhd2luZ0ZyYW1lKGZyYW1lKTsKK30KKwordm9pZCBDQ0RpcmVjdFJlbmRlcmVyOjpkcmF3UmVu
ZGVyUGFzcyhEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBh
c3MpCit7CisgICAgaWYgKCF1c2VSZW5kZXJQYXNzKGZyYW1lLCByZW5kZXJQYXNzKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZnJhbWUuc2Npc3NvclJlY3RJblJlbmRlclBhc3NTcGFjZSA9IGZy
YW1lLmN1cnJlbnRSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7CisgICAgaWYgKGZyYW1lLnJvb3RE
YW1hZ2VSZWN0ICE9IGZyYW1lLnJvb3RSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCkpIHsKKyAgICAg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVRyYW5zZm9ybVRvUm9vdCA9IGZyYW1l
LmN1cnJlbnRSZW5kZXJQYXNzLT50cmFuc2Zvcm1Ub1Jvb3RUYXJnZXQoKS5pbnZlcnNlKCk7Cisg
ICAgICAgIGZyYW1lLnNjaXNzb3JSZWN0SW5SZW5kZXJQYXNzU3BhY2UuaW50ZXJzZWN0KENDTWF0
aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChpbnZlcnNlVHJhbnNmb3JtVG9Sb290LCBmcmFtZS5y
b290RGFtYWdlUmVjdCkpOworICAgIH0KKworICAgIGVuYWJsZVNjaXNzb3JUZXN0UmVjdChtb3Zl
U2Npc3NvclRvV2luZG93U3BhY2UoZnJhbWUsIGZyYW1lLnNjaXNzb3JSZWN0SW5SZW5kZXJQYXNz
U3BhY2UpKTsKKyAgICBjbGVhckZyYW1lYnVmZmVyKGZyYW1lKTsKKworICAgIGNvbnN0IENDUXVh
ZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKKyAgICBmb3IgKENDUXVh
ZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250
QmVnaW4oKTsgaXQgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytpdCkgeworICAgICAg
ICBGbG9hdFJlY3QgcXVhZFNjaXNzb3JSZWN0ID0gZnJhbWUuc2Npc3NvclJlY3RJblJlbmRlclBh
c3NTcGFjZTsKKyAgICAgICAgcXVhZFNjaXNzb3JSZWN0LmludGVyc2VjdChpdC0+Z2V0KCktPmNs
aXBwZWRSZWN0SW5UYXJnZXQoKSk7CisgICAgICAgIGlmICghcXVhZFNjaXNzb3JSZWN0LmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgZW5hYmxlU2Npc3NvclRlc3RSZWN0KG1vdmVTY2lzc29yVG9X
aW5kb3dTcGFjZShmcmFtZSwgcXVhZFNjaXNzb3JSZWN0KSk7CisgICAgICAgICAgICBkcmF3UXVh
ZChmcmFtZSwgaXQtPmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIENhY2hlZFRleHR1
cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQoKSk7
CisgICAgaWYgKHRleHR1cmUpCisgICAgICAgIHRleHR1cmUtPnNldElzQ29tcGxldGUoIXJlbmRl
clBhc3MtPmhhc09jY2x1c2lvbkZyb21PdXRzaWRlVGFyZ2V0U3VyZmFjZSgpKTsKK30KKworYm9v
bCBDQ0RpcmVjdFJlbmRlcmVyOjp1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNv
bnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKK3sKKyAgICBmcmFtZS5jdXJyZW50UmVuZGVy
UGFzcyA9IHJlbmRlclBhc3M7CisgICAgZnJhbWUuY3VycmVudFRleHR1cmUgPSAwOworCisgICAg
aWYgKHJlbmRlclBhc3MgPT0gZnJhbWUucm9vdFJlbmRlclBhc3MpIHsKKyAgICAgICAgYmluZEZy
YW1lYnVmZmVyVG9PdXRwdXRTdXJmYWNlKGZyYW1lKTsKKyAgICAgICAgaW5pdGlhbGl6ZU1hdHJp
Y2VzKGZyYW1lLCByZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCksIHRydWUpOworICAgICAgICBzZXRE
cmF3Vmlld3BvcnRTaXplKHJlbmRlclBhc3MtPm91dHB1dFJlY3QoKS5zaXplKCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9y
ZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KHJlbmRlclBhc3MtPmlkKCkpOworICAgIEFTU0VSVCh0ZXh0
dXJlKTsKKyAgICBpZiAoIXRleHR1cmUtPmlkKCkgJiYgIXRleHR1cmUtPmFsbG9jYXRlKENDUmVu
ZGVyZXI6OkltcGxQb29sLCByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzcyksIHJlbmRl
clBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3MpLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1
cmVVc2FnZUZyYW1lYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShmcmFtZSwgdGV4dHVyZSwgcmVuZGVyUGFzcy0+b3V0
cHV0UmVjdCgpKTsKK30KKworYm9vbCBDQ0RpcmVjdFJlbmRlcmVyOjpoYXZlQ2FjaGVkUmVzb3Vy
Y2VzRm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3QKK3sKKyAgICBDYWNoZWRUZXh0dXJlKiB0
ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KGlkKTsKKyAgICByZXR1cm4gdGV4dHVy
ZSAmJiB0ZXh0dXJlLT5pZCgpICYmIHRleHR1cmUtPmlzQ29tcGxldGUoKTsKK30KKworLy8gc3Rh
dGljCitJbnRTaXplIENDRGlyZWN0UmVuZGVyZXI6OnJlbmRlclBhc3NUZXh0dXJlU2l6ZShjb25z
dCBDQ1JlbmRlclBhc3MqIHBhc3MpCit7CisgICAgcmV0dXJuIHBhc3MtPm91dHB1dFJlY3QoKS5z
aXplKCk7Cit9CisKKy8vIHN0YXRpYworR0MzRGVudW0gQ0NEaXJlY3RSZW5kZXJlcjo6cmVuZGVy
UGFzc1RleHR1cmVGb3JtYXQoY29uc3QgQ0NSZW5kZXJQYXNzKikKK3sKKyAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MDgxOTAzM2JiM2FiNmE5MjljZDMwNzBmNzk5Y2FmZDBlMDhjOTk3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDQ0RpcmVjdFJlbmRlcmVyX2gKKyNkZWZpbmUgQ0NEaXJlY3RSZW5kZXJlcl9oCisKKyNpbmNs
dWRlICJjYy9DQ1JlbmRlcmVyLmgiCisjaW5jbHVkZSAiY2MvQ0NSZXNvdXJjZVByb3ZpZGVyLmgi
CisjaW5jbHVkZSAiY2MvQ0NTY29wZWRUZXh0dXJlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ0NSZXNvdXJjZVByb3ZpZGVyOworCisvLyBUaGlzIGlzIHRoZSBiYXNlIGNsYXNz
IGZvciBjb2RlIHNoYXJlZCBiZXR3ZWVuIHRoZSBHTCBhbmQgc29mdHdhcmUKKy8vIHJlbmRlcmVy
IGltcGxlbWVudGF0aW9ucy4gICJEaXJlY3QiIHJlZmVycyB0byB0aGUgZmFjdCB0aGF0IGl0IGRv
ZXMgbm90CisvLyBkZWxlZ2F0ZSByZW5kZXJpbmcgdG8gYW5vdGhlciBjb21wb3NpdG9yLgorY2xh
c3MgQ0NEaXJlY3RSZW5kZXJlciA6IHB1YmxpYyBDQ1JlbmRlcmVyIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDQ0RpcmVjdFJlbmRlcmVyKTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0Rp
cmVjdFJlbmRlcmVyKCkgeyB9CisKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJv
dmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlUHJvdmlkZXI7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRl
clBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIGhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xp
c3QmIHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLCBjb25zdCBDQ1JlbmRlclBhc3NJZEhhc2hNYXAm
IHJlbmRlclBhc3Nlc0J5SWQpIE9WRVJSSURFOworCitwcm90ZWN0ZWQ6CisgICAgQ0NEaXJlY3RS
ZW5kZXJlcihDQ1JlbmRlcmVyQ2xpZW50KiBjbGllbnQsIENDUmVzb3VyY2VQcm92aWRlciogcmVz
b3VyY2VQcm92aWRlcikKKyAgICAgICAgOiBDQ1JlbmRlcmVyKGNsaWVudCkKKyAgICAgICAgLCBt
X3Jlc291cmNlUHJvdmlkZXIocmVzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgfQorCisgICAg
c3RydWN0IERyYXdpbmdGcmFtZSB7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1h
cCogcmVuZGVyUGFzc2VzQnlJZDsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByb290UmVu
ZGVyUGFzczsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBjdXJyZW50UmVuZGVyUGFzczsK
KyAgICAgICAgY29uc3QgQ0NTY29wZWRUZXh0dXJlKiBjdXJyZW50VGV4dHVyZTsKKworICAgICAg
ICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7CisKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgICAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHdpbmRvd01hdHJpeDsKKyAgICAgICAgYm9vbCBmbGlwcGVkWTsKKyAg
ICAgICAgRmxvYXRSZWN0IHNjaXNzb3JSZWN0SW5SZW5kZXJQYXNzU3BhY2U7CisKKyAgICAgICAg
RHJhd2luZ0ZyYW1lKCkKKyAgICAgICAgICAgIDogcm9vdFJlbmRlclBhc3MoMCkKKyAgICAgICAg
ICAgICwgY3VycmVudFJlbmRlclBhc3MoMCkKKyAgICAgICAgICAgICwgY3VycmVudFRleHR1cmUo
MCkKKyAgICAgICAgICAgICwgZmxpcHBlZFkoZmFsc2UpCisgICAgICAgIHsgfQorICAgIH07CisK
KyAgICBjbGFzcyBDYWNoZWRUZXh0dXJlIDogcHVibGljIENDU2NvcGVkVGV4dHVyZSB7CisgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZFRleHR1cmUpOworICAgIHB1YmxpYzoKKyAg
ICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FjaGVkVGV4dHVyZT4gY3JlYXRlKENDUmVzb3VyY2VQ
cm92aWRlciogcmVzb3VyY2VQcm92aWRlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hlZFRl
eHR1cmUocmVzb3VyY2VQcm92aWRlcikpOyB9CisgICAgICAgIHZpcnR1YWwgfkNhY2hlZFRleHR1
cmUoKSB7IH0KKworICAgICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lz
Q29tcGxldGU7IH0KKyAgICAgICAgdm9pZCBzZXRJc0NvbXBsZXRlKGJvb2wgaXNDb21wbGV0ZSkg
eyBtX2lzQ29tcGxldGUgPSBpc0NvbXBsZXRlOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IGV4cGxpY2l0IENhY2hlZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3Zp
ZGVyKQorICAgICAgICAgICAgOiBDQ1Njb3BlZFRleHR1cmUocmVzb3VyY2VQcm92aWRlcikKKyAg
ICAgICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgbV9pc0NvbXBsZXRlOworICAgIH07CisKKyAgICBz
dGF0aWMgRmxvYXRSZWN0IHF1YWRWZXJ0ZXhSZWN0KCk7CisgICAgc3RhdGljIHZvaWQgcXVhZFJl
Y3RUcmFuc2Zvcm0oV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCogcXVhZFJlY3RUcmFu
c2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFJlY3QpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVNYXRyaWNlcyhEcmF3aW5nRnJhbWUmLCBjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9vbCBm
bGlwWSk7CisgICAgc3RhdGljIEludFJlY3QgbW92ZVNjaXNzb3JUb1dpbmRvd1NwYWNlKGNvbnN0
IERyYXdpbmdGcmFtZSYsIEZsb2F0UmVjdCBzY2lzc29yUmVjdCk7CisKKyAgICBib29sIGhhdmVD
YWNoZWRSZXNvdXJjZXMoaW50IHJlbmRlclBhc3NJZCkgY29uc3Q7CisgICAgc3RhdGljIEludFNp
emUgcmVuZGVyUGFzc1RleHR1cmVTaXplKGNvbnN0IENDUmVuZGVyUGFzcyopOworICAgIHN0YXRp
YyBHQzNEZW51bSByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKTsK
KworICAgIHZvaWQgZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQ
YXNzKik7CisgICAgYm9vbCB1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVu
ZGVyUGFzcyopOworCisgICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZlclRvT3V0cHV0U3Vy
ZmFjZShEcmF3aW5nRnJhbWUmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGJpbmRGcmFtZWJ1ZmZl
clRvVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJ
bnRSZWN0JiBmcmFtZWJ1ZmZlclJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd1Zp
ZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmFibGVT
Y2lzc29yVGVzdFJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzYWJsZVNjaXNzb3JUZXN0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVh
ckZyYW1lYnVmZmVyKERyYXdpbmdGcmFtZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1F1
YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NEcmF3UXVhZCopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5EcmF3aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBmaW5pc2hEcmF3aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJikgPSAwOworCisgICAgSGFzaE1hcDxp
bnQsIE93blB0cjxDYWNoZWRUZXh0dXJlPiA+IG1fcmVuZGVyUGFzc1RleHR1cmVzOworICAgIEND
UmVzb3VyY2VQcm92aWRlciogbV9yZXNvdXJjZVByb3ZpZGVyOworfTsKKworfQorCisjZW5kaWYg
Ly8gQ0NEaXJlY3RSZW5kZXJlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159245</attachid>
            <date>2012-08-17 17:55:20 -0700</date>
            <delta_ts>2012-08-20 10:53:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93927-20120817175444.patch</filename>
            <type>text/plain</type>
            <size>56896</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1OTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY3YmRjOTUxMGU3MmFl
NmM4MjM4NTFjNGFmOTA1NDY3YzRiMmJlZi4uM2M4MGNmNzYwNzU0M2NmZWFhNjFjODMwY2UzNTUy
ZjNhNDBiOGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTEzICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE1v
dmUgbm9uLUdMLXNwZWNpZmljIGNvZGUgb3V0IG9mIExheWVyUmVuZGVyZXJDaHJvbWl1bQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM5MjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1v
dmVzIG1vc3Qgb2YgdGhlIGdlbmVyaWMgbG9naWMgZGVhbGluZyB3aXRoIG1hdHJpY2VzIGFuZAor
ICAgICAgICByZW5kZXIgcGFzc2VzIGludG8gYSBuZXcgY2xhc3MgIkNDRGlyZWN0UmVuZGVyZXIi
IHRoYXQgc2l0cyBiZXR3ZWVuCisgICAgICAgIENDUmVuZGVyZXIgYW5kIExheWVyUmVuZGVyZXJD
aHJvbWl1bSwgYW5kIGFsc28gcHVibGljbHkgZXhwb3NlcyBhCisgICAgICAgIGZldyBvdGhlciB0
aGluZ3MgbGlrZSB0aGUgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIuCisKKyAgICAgICAgVGhl
IHBsYW4gaXMgZm9yIHRoZSBmdXR1cmUgc29mdHdhcmUgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRp
b24gdG8gYWxzbworICAgICAgICBkZXJpdmUgZnJvbSBDQ0RpcmVjdFJlbmRlcmVyLCB3aGVyZWFz
IHRoZSB1YmVyY29tcG9zaXRvciBjaGlsZAorICAgICAgICByZW5kZXJlciB3aWxsIHN0aWxsIGRl
cml2ZSBmcm9tIENDUmVuZGVyZXIuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChuby1vcCByZWZh
Y3RvcmluZykuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okdlb21ldHJ5QmluZGluZzo6R2VvbWV0cnlCaW5kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuaDoKKyAgICAgICAgKEdlb21ldHJ5Qmlu
ZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb091dHB1dFN1cmZhY2Up
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmVuYWJsZVNjaXNzb3JUZXN0UmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRpc2FibGVTY2lzc29yVGVzdCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldERyYXdWaWV3cG9ydFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjptYWtlQ29udGV4dEN1cnJl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
U2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChMYXllclJlbmRlcmVyQ2hyb21pdW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaDoKKyAg
ICAgICAgKFRleHR1cmVDb3BpZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RleHR1cmVVcGxvYWRlci5oOgorICAgICAgICAoVW50aHJvdHRsZWRUZXh0dXJlVXBsb2Fk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcjo6flVudGhy
b3R0bGVkVGV4dHVyZVVwbG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlVudGhyb3R0bGVkVGV4
dHVyZVVwbG9hZGVyOjpVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcik6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJl
bmRlcmVyLmNwcDogQWRkZWQuCisgICAgICAgIChwcm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAg
KGNhbnZhc01hdHJpeCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
RGlyZWN0UmVuZGVyZXI6OkRyYXdpbmdGcmFtZTo6aW5pdGlhbGl6ZU1hdHJpY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OkRyYXdpbmdGcmFtZTo6aW5pdGlhbGl6ZVNj
aXNzb3JzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OmRlY2lkZVJlbmRl
clBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVu
ZGVyZXI6OmRyYXdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpk
cmF3UmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjp1c2VS
ZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OmhhdmVDYWNo
ZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RS
ZW5kZXJlcjo6cmVuZGVyUGFzc1RleHR1cmVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGly
ZWN0UmVuZGVyZXI6OnJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChDQ0RpcmVjdFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGlyZWN0UmVuZGVyZXI6On5DQ0RpcmVjdFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDRGlyZWN0UmVuZGVyZXI6OnJlc291cmNlUHJvdmlkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q0NEaXJlY3RSZW5kZXJlcik6CisgICAgICAgIChEcmF3aW5n
RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6RHJhd2luZ0ZyYW1l
OjpEcmF3aW5nRnJhbWUpOgorICAgICAgICAoQ2FjaGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDYWNoZWRUZXh0dXJlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q2FjaGVkVGV4dHVyZTo6fkNhY2hlZFRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6Q2FjaGVkVGV4dHVyZTo6aXND
b21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDYWNoZWRUZXh0
dXJlOjpzZXRJc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6
OkNhY2hlZFRleHR1cmU6OkNhY2hlZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJl
Y3RSZW5kZXJlcjo6cXVhZFZlcnRleFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RS
ZW5kZXJlcjo6cXVhZFJlY3RUcmFuc2Zvcm0pOgorCiAyMDEyLTA4LTE3ICBBbGljZSBDaGVuZyAg
PGFsaWNlX2NoZW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBQcmVzZXJ2ZSBzdHlsaW5nIGVsZW1l
bnRzIGluIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAwMmYyNTI3
YmVkYTE1ZjFmYjIzYTgwMDY3YTczYTIxNDkyM2FlOWM5Li5jMDAzNWFhNmNjZjYxMmJmN2YxMWQx
ZTlmYzJiMzhhZmNiZjFkYTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC04MzM5LDYgKzgzMzksNyBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3lu
Y2hyb25pemVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJlZVN5bmNocm9uaXplci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9VbnRocm90dGxlZFRleHR1cmVVcGxvYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBY3RpdmVBbmltYXRpb24u
Y3BwJywKQEAgLTgzNTksNiArODM2MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NEZWJ1Z1JlY3RIaXN0b3J5LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1l
U291cmNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
RGlyZWN0UmVuZGVyZXIuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRm9udEF0bGFzLmNwcCcsCkBAIC04NDE1LDYgKzg0MTgs
NyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZFNp
bmsuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFk
Q3VsbGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NRdWFkQ3VsbGVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2VvbWV0cnlC
aW5kaW5nLmNwcAppbmRleCAxYTQ1NjhiYjA3ZWI2NDhlYjY1NzgxNzRmODFkZTVmNWQ5MWFjMTdk
Li42N2FiNDYyNGYxMGFmNTI5MzgzZjcwN2MzMzk0MTA2YmZmZTQ0NWUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21l
dHJ5QmluZGluZy5jcHAKQEAgLTM1LDE3ICszNSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUdlb21ldHJ5QmluZGluZzo6R2VvbWV0cnlCaW5kaW5nKFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCitHZW9tZXRyeUJpbmRpbmc6Okdlb21ldHJ5QmluZGluZyhXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHF1YWRW
ZXJ0ZXhSZWN0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3F1YWRWZXJ0aWNl
c1ZibygwKQogICAgICwgbV9xdWFkRWxlbWVudHNWYm8oMCkKICAgICAsIG1faW5pdGlhbGl6ZWQo
ZmFsc2UpCiB7CiAgICAgLy8gVmVydGV4IHBvc2l0aW9ucyBhbmQgdGV4dHVyZSBjb29yZGluYXRl
cyBmb3IgdGhlIDQgY29ybmVycyBvZiBhIDF4MSBxdWFkLgotICAgIGZsb2F0IHZlcnRpY2VzW10g
PSB7IC0wLjVmLCAgMC41ZiwgMC4wZiwgMC4wZiwgIDEuMGYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgLTAuNWYsIC0wLjVmLCAwLjBmLCAwLjBmLCAgMC4wZiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAwLjVmLCAtMC41ZiwgMC4wZiwgMS4wZiwgIDAuMGYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgMC41ZiwgIDAuNWYsIDAuMGYsIDEuMGYsICAxLjBmIH07CisgICAgZmxvYXQgdmVy
dGljZXNbXSA9IHsgcXVhZFZlcnRleFJlY3QueCgpLCBxdWFkVmVydGV4UmVjdC5tYXhZKCksIDAu
MGYsIDAuMGYsICAxLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRWZXJ0ZXhSZWN0
LngoKSwgcXVhZFZlcnRleFJlY3QueSgpLCAwLjBmLCAwLjBmLCAgMC4wZiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBxdWFkVmVydGV4UmVjdC5tYXhYKCksIHF1YWRWZXJ0ZXhSZWN0LnkoKSwg
MC4wZiwgMS4wZiwgIDAuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZFZlcnRleFJl
Y3QubWF4WCgpLCAgcXVhZFZlcnRleFJlY3QubWF4WSgpLCAwLjBmLCAxLjBmLCAgMS4wZiB9Owog
ICAgIHVpbnQxNl90IGluZGljZXNbXSA9IHsgMCwgMSwgMiwgMCwgMiwgMywgLy8gVGhlIHR3byB0
cmlhbmdsZXMgdGhhdCBtYWtlIHVwIHRoZSBsYXllciBxdWFkLgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMSwgMiwgM307IC8vIEEgbGluZSBwYXRoIGZvciBkcmF3aW5nIHRoZSBsYXll
ciBib3JkZXIuCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmgKaW5kZXggMjBiMmQ1YTAwNWI4ZTk0Y2Mx
YmU5Yzc3ZWM3MjQyYjZkYWNkMzM4Mi4uMGFmMTQ2Yzk0NjIyNmRiYzk3N2Y1NWM1NWY5MDVlNDdl
NmFiY2EwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR2VvbWV0cnlCaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vR2VvbWV0cnlCaW5kaW5nLmgKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5k
ZWYgR2VvbWV0cnlCaW5kaW5nX2gKICNkZWZpbmUgR2VvbWV0cnlCaW5kaW5nX2gKIAorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM2LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmcgewogcHVibGljOgotICAgIGV4cGxpY2l0IEdlb21ldHJ5
QmluZGluZyhXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgR2VvbWV0cnlCaW5k
aW5nKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBGbG9hdFJlY3QmIHF1YWRW
ZXJ0ZXhSZWN0KTsKICAgICB+R2VvbWV0cnlCaW5kaW5nKCk7CiAKICAgICBib29sIGluaXRpYWxp
emVkKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXplZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYjkzMjgwMGY2NzZiNDQwMDg4ZDA1N2VmNDAwOTdlYzBk
ZWVhMWFmYS4uMzZlNDdkMTc3ZDRhZmIzYjAxNzMxYzkwZDRjODBmYzMzZDA1ZGRlNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01NCw2ICs1NCw3IEBACiAjaW5j
bHVkZSAiU2tDb2xvci5oIgogI2luY2x1ZGUgIlRocm90dGxlZFRleHR1cmVVcGxvYWRlci5oIgog
I2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJVbnRocm90dGxlZFRleHR1cmVVcGxv
YWRlci5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oPgogI2luY2x1
ZGUgPHB1YmxpYy9XZWJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oPgogI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJWaWRlb0ZyYW1lLmg+CkBAIC03MSw0MCArNzIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIG5hbWVzcGFjZSB7CiAKLXN0YXRpYyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcnRob01h
dHJpeChmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3ApCi17
Ci0gICAgZmxvYXQgZGVsdGFYID0gcmlnaHQgLSBsZWZ0OwotICAgIGZsb2F0IGRlbHRhWSA9IHRv
cCAtIGJvdHRvbTsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvcnRobzsKLSAgICBpZiAo
IWRlbHRhWCB8fCAhZGVsdGFZKQotICAgICAgICByZXR1cm4gb3J0aG87Ci0gICAgb3J0aG8uc2V0
TTExKDIuMGYgLyBkZWx0YVgpOwotICAgIG9ydGhvLnNldE00MSgtKHJpZ2h0ICsgbGVmdCkgLyBk
ZWx0YVgpOwotICAgIG9ydGhvLnNldE0yMigyLjBmIC8gZGVsdGFZKTsKLSAgICBvcnRoby5zZXRN
NDIoLSh0b3AgKyBib3R0b20pIC8gZGVsdGFZKTsKLQotICAgIC8vIFogY29tcG9uZW50IG9mIHZl
cnRpY2VzIGlzIGFsd2F5cyBzZXQgdG8gemVybyBhcyB3ZSBkb24ndCB1c2UgdGhlIGRlcHRoIGJ1
ZmZlcgotICAgIC8vIHdoaWxlIGRyYXdpbmcuCi0gICAgb3J0aG8uc2V0TTMzKDApOwotCi0gICAg
cmV0dXJuIG9ydGhvOwotfQotCi1zdGF0aWMgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVu
TWF0cml4KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlbjsKLQotICAgIC8vIE1hcCB0byB2aWV3cG9ydC4KLSAg
ICBzY3JlZW4udHJhbnNsYXRlM2QoeCwgeSwgMCk7Ci0gICAgc2NyZWVuLnNjYWxlM2Qod2lkdGgs
IGhlaWdodCwgMCk7Ci0KLSAgICAvLyBNYXAgeCwgeSBhbmQgeiB0byB1bml0IHNxdWFyZS4KLSAg
ICBzY3JlZW4udHJhbnNsYXRlM2QoMC41LCAwLjUsIDAuNSk7Ci0gICAgc2NyZWVuLnNjYWxlM2Qo
MC41LCAwLjUsIDAuNSk7Ci0KLSAgICByZXR1cm4gc2NyZWVuOwotfQotCiBib29sIG5lZWRzSU9T
dXJmYWNlUmVhZGJhY2tXb3JrYXJvdW5kKCkKIHsKICNpZiBPUyhEQVJXSU4pCkBAIC0xMTQsNDYg
KzgxLDggQEAgYm9vbCBuZWVkc0lPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZCgpCiAjZW5kaWYK
IH0KIAotY2xhc3MgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMgVGV4dHVyZVVw
bG9hZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVbnRocm90dGxlZFRleHR1cmVVcGxv
YWRlcik7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VW50aHJvdHRsZWRUZXh0dXJl
VXBsb2FkZXI+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFVu
dGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyKCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5VbnRocm90
dGxlZFRleHR1cmVVcGxvYWRlcigpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQnVzeSgpIE9W
RVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luVXBsb2Fkcygp
IE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCBlbmRVcGxvYWRzKCkgT1ZFUlJJREUgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIHVwbG9hZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNv
dXJjZVByb3ZpZGVyLCBQYXJhbWV0ZXJzIHVwbG9hZCkgT1ZFUlJJREUgeyB1cGxvYWQudGV4dHVy
ZS0+dXBkYXRlUmVjdChyZXNvdXJjZVByb3ZpZGVyLCB1cGxvYWQuc291cmNlUmVjdCwgdXBsb2Fk
LmRlc3RPZmZzZXQpOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBVbnRocm90dGxlZFRleHR1cmVVcGxv
YWRlcigpIHsgfQotfTsKLQogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWNsYXNzIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Q2FjaGVkVGV4dHVyZSA6IHB1YmxpYyBDQ1Njb3BlZFRleHR1cmUg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENhY2hlZFRleHR1cmUpOwotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzT3duUHRyPENhY2hlZFRleHR1cmU+IGNyZWF0ZShDQ1Jlc291cmNlUHJvdmlk
ZXIqIHJlc291cmNlUHJvdmlkZXIpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDYWNoZWRUZXh0dXJl
KHJlc291cmNlUHJvdmlkZXIpKTsgfQotICAgIHZpcnR1YWwgfkNhY2hlZFRleHR1cmUoKSB7IH0K
LQotICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21wbGV0ZTsgfQot
ICAgIHZvaWQgc2V0SXNDb21wbGV0ZShib29sIGlzQ29tcGxldGUpIHsgbV9pc0NvbXBsZXRlID0g
aXNDb21wbGV0ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgQ2FjaGVkVGV4dHVyZShD
Q1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgIDogQ0NTY29wZWRU
ZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpCi0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQot
ICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtX2lzQ29tcGxldGU7Ci19OwotCiBQ
YXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUoQ0NSZW5kZXJlckNsaWVudCogY2xpZW50LCBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291
cmNlUHJvdmlkZXIsIFRleHR1cmVVcGxvYWRlck9wdGlvbiB0ZXh0dXJlVXBsb2FkZXJTZXR0aW5n
KQogewogICAgIE93blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRv
cHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjbGllbnQsIHJlc291cmNlUHJvdmlkZXIs
IHRleHR1cmVVcGxvYWRlclNldHRpbmcpKSk7CkBAIC0xNjYsMTAgKzk1LDkgQEAgUGFzc093blB0
cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKEND
UmVuZGVyZXJDbGllbnQKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtKENDUmVuZGVyZXJDbGllbnQqIGNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVVcGxv
YWRlck9wdGlvbiB0ZXh0dXJlVXBsb2FkZXJTZXR0aW5nKQotICAgIDogQ0NSZW5kZXJlcihjbGll
bnQpCisgICAgOiBDQ0RpcmVjdFJlbmRlcmVyKGNsaWVudCwgcmVzb3VyY2VQcm92aWRlcikKICAg
ICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9zaGFyZWRHZW9tZXRyeVF1
YWQoRmxvYXRSZWN0KC0wLjVmLCAtMC41ZiwgMS4wZiwgMS4wZikpCi0gICAgLCBtX3Jlc291cmNl
UHJvdmlkZXIocmVzb3VyY2VQcm92aWRlcikKICAgICAsIG1fY29udGV4dChyZXNvdXJjZVByb3Zp
ZGVyLT5ncmFwaGljc0NvbnRleHQzRCgpKQogICAgICwgbV9pc1ZpZXdwb3J0Q2hhbmdlZChmYWxz
ZSkKICAgICAsIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZChmYWxzZSkKQEAgLTI5OSw4MyArMjI3
LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyRnJhbWVidWZmZXIoRHJhd2lu
Z0ZyYW1lJiBmcmFtZSkKICAgICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCk7CiB9CiAKLS8vIHN0YXRpYwotSW50U2l6ZSBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJlbmRlclBhc3NUZXh0dXJlU2l6ZShjb25zdCBDQ1JlbmRlclBhc3MqIHBh
c3MpCi17Ci0gICAgcmV0dXJuIHBhc3MtPm91dHB1dFJlY3QoKS5zaXplKCk7Ci19Ci0KLS8vIHN0
YXRpYwotR0MzRGVudW0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZUZv
cm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRlclBh
c3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nl
c0luRHJhd09yZGVyKQotewotICAgIEhhc2hNYXA8aW50LCBjb25zdCBDQ1JlbmRlclBhc3MqPiBy
ZW5kZXJQYXNzZXNJbkZyYW1lOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbmRlclBhc3Nlc0luRnJhbWUu
c2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdP
cmRlcltpXSk7Ci0KLSAgICBWZWN0b3I8aW50PiBwYXNzZXNUb0RlbGV0ZTsKLSAgICBIYXNoTWFw
PGludCwgT3duUHRyPENhY2hlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRv
cjsKLSAgICBmb3IgKHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7
IHBhc3NJdGVyYXRvciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0
b3IpIHsKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHJl
bmRlclBhc3Nlc0luRnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICBpZiAo
IXJlbmRlclBhc3NJbkZyYW1lKSB7Ci0gICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQo
cGFzc0l0ZXJhdG9yLT5maXJzdCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJlbmRlclBhc3NUZXh0dXJl
U2l6ZShyZW5kZXJQYXNzSW5GcmFtZSk7Ci0gICAgICAgIEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0
ID0gcmVuZGVyUGFzc1RleHR1cmVGb3JtYXQocmVuZGVyUGFzc0luRnJhbWUpOwotICAgICAgICBD
YWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gcGFzc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7Ci0gICAg
ICAgIEFTU0VSVCh0ZXh0dXJlKTsKLQotICAgICAgICBpZiAodGV4dHVyZS0+aWQoKSAmJiAodGV4
dHVyZS0+c2l6ZSgpICE9IHJlcXVpcmVkU2l6ZSB8fCB0ZXh0dXJlLT5mb3JtYXQoKSAhPSByZXF1
aXJlZEZvcm1hdCkpCi0gICAgICAgICAgICB0ZXh0dXJlLT5mcmVlKCk7Ci0gICAgfQotCi0gICAg
Ly8gRGVsZXRlIFJlbmRlclBhc3MgdGV4dHVyZXMgZnJvbSB0aGUgcHJldmlvdXMgZnJhbWUgdGhh
dCB3aWxsIG5vdCBiZSB1c2VkIGFnYWluLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFz
c2VzVG9EZWxldGUuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnJl
bW92ZShwYXNzZXNUb0RlbGV0ZVtpXSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJl
bmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9yZW5k
ZXJQYXNzVGV4dHVyZXMuY29udGFpbnMocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCkp
KSB7Ci0gICAgICAgICAgICBPd25QdHI8Q2FjaGVkVGV4dHVyZT4gdGV4dHVyZSA9IENhY2hlZFRl
eHR1cmU6OmNyZWF0ZShtX3Jlc291cmNlUHJvdmlkZXIpOwotICAgICAgICAgICAgbV9yZW5kZXJQ
YXNzVGV4dHVyZXMuc2V0KHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCB0ZXh0dXJl
LnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3QK
LXsKLSAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0
KGlkKTsKLSAgICByZXR1cm4gdGV4dHVyZSAmJiB0ZXh0dXJlLT5pZCgpICYmIHRleHR1cmUtPmlz
Q29tcGxldGUoKTsKLX0KLQotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdGcmFtZShj
b25zdCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlciwgY29uc3QgQ0NS
ZW5kZXJQYXNzSWRIYXNoTWFwJiByZW5kZXJQYXNzZXNCeUlkKQotewotICAgIGNvbnN0IENDUmVu
ZGVyUGFzcyogcm9vdFJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5sYXN0KCk7
Ci0gICAgQVNTRVJUKHJvb3RSZW5kZXJQYXNzKTsKLQotICAgIERyYXdpbmdGcmFtZSBmcmFtZTsK
LSAgICBmcmFtZS5yZW5kZXJQYXNzZXNCeUlkID0gJnJlbmRlclBhc3Nlc0J5SWQ7Ci0gICAgZnJh
bWUucm9vdFJlbmRlclBhc3MgPSByb290UmVuZGVyUGFzczsKLQotICAgIGZyYW1lLnJvb3REYW1h
Z2VSZWN0ID0gbV9jYXBhYmlsaXRpZXMudXNpbmdQYXJ0aWFsU3dhcCA/IGZyYW1lLnJvb3RSZW5k
ZXJQYXNzLT5kYW1hZ2VSZWN0KCkgOiBmcmFtZS5yb290UmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgp
OwotICAgIGZyYW1lLnJvb3REYW1hZ2VSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIHZpZXdwb3J0U2l6ZSgpKSk7Ci0KLSAgICBiZWdpbkRyYXdpbmdGcmFtZSgpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7
ICsraSkKLSAgICAgICAgZHJhd1JlbmRlclBhc3MoZnJhbWUsIHJlbmRlclBhc3Nlc0luRHJhd09y
ZGVyW2ldKTsKLQotICAgIGZpbmlzaERyYXdpbmdGcmFtZSgpOwotCi0gICAgbV9zd2FwQnVmZmVy
UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGZyYW1lLnJvb3REYW1hZ2VSZWN0KSk7Ci19Ci0K
LXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSgpCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJiBmcmFt
ZSkKIHsKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBmcmFtZWJ1ZmZlciBpcyBhdXRv
bWF0aWNhbGx5IHJlY3JlYXRlZCBvbiBmaXJzdCB1c2UKICAgICBlbnN1cmVGcmFtZWJ1ZmZlcigp
OwpAQCAtNDA5LDM5ICsyNjEsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZG9Ob09w
KCkKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogfQogCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFtZSwg
Y29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQotewotICAgIGlmICghdXNlUmVuZGVyUGFz
cyhmcmFtZSwgcmVuZGVyUGFzcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCBz
Y2lzc29yUmVjdCA9IHJlbmRlclBhc3MtPm91dHB1dFJlY3QoKTsKLSAgICBpZiAoZnJhbWUucm9v
dERhbWFnZVJlY3QgIT0gZnJhbWUucm9vdFJlbmRlclBhc3MtPm91dHB1dFJlY3QoKSkgewotICAg
ICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlVHJhbnNmb3JtVG9Sb290ID0gcmVu
ZGVyUGFzcy0+dHJhbnNmb3JtVG9Sb290VGFyZ2V0KCkuaW52ZXJzZSgpOwotICAgICAgICBzY2lz
c29yUmVjdC5pbnRlcnNlY3QoQ0NNYXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0KGludmVyc2VU
cmFuc2Zvcm1Ub1Jvb3QsIGZyYW1lLnJvb3REYW1hZ2VSZWN0KSk7Ci0gICAgfQotCi0gICAgc2V0
U2Npc3NvclRvUmVjdChmcmFtZSwgZW5jbG9zaW5nSW50UmVjdChzY2lzc29yUmVjdCkpOwotICAg
IGNsZWFyRnJhbWVidWZmZXIoZnJhbWUpOwotCi0gICAgY29uc3QgQ0NRdWFkTGlzdCYgcXVhZExp
c3QgPSByZW5kZXJQYXNzLT5xdWFkTGlzdCgpOwotICAgIGZvciAoQ0NRdWFkTGlzdDo6Y29uc3RC
YWNrVG9Gcm9udEl0ZXJhdG9yIGl0ID0gcXVhZExpc3QuYmFja1RvRnJvbnRCZWdpbigpOyBpdCAh
PSBxdWFkTGlzdC5iYWNrVG9Gcm9udEVuZCgpOyArK2l0KQotICAgICAgICBkcmF3UXVhZChmcmFt
ZSwgaXQtPmdldCgpLCBzY2lzc29yUmVjdCk7Ci0KLSAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJl
ID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KHJlbmRlclBhc3MtPmlkKCkpOwotICAgIGlmICh0
ZXh0dXJlKQotICAgICAgICB0ZXh0dXJlLT5zZXRJc0NvbXBsZXRlKCFyZW5kZXJQYXNzLT5oYXNP
Y2NsdXNpb25Gcm9tT3V0c2lkZVRhcmdldFN1cmZhY2UoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3UXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0RyYXdR
dWFkKiBxdWFkLCBGbG9hdFJlY3Qgc2Npc3NvclJlY3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NEcmF3UXVhZCogcXVh
ZCkKIHsKLSAgICBzY2lzc29yUmVjdC5pbnRlcnNlY3QocXVhZC0+Y2xpcHBlZFJlY3RJblRhcmdl
dCgpKTsKLSAgICBpZiAoc2Npc3NvclJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBGb3Igbm93LCB3ZSBhbHdheXMgZG8gcGVyLXF1YWQgc2Npc3NvcmluZyBiZWNhdXNl
IHNvbWUgcXVhZCB0eXBlcyBkcmF3IHRoZWlyCi0gICAgLy8gdW4tY2xpcHBlZCBib3VuZHMsIHJl
bHlpbmcgb24gc2Npc3NvcmluZyBmb3IgY29ycmVjdCBjbGlwcGluZy4KLSAgICBzZXRTY2lzc29y
VG9SZWN0KGZyYW1lLCBlbmNsb3NpbmdJbnRSZWN0KHNjaXNzb3JSZWN0KSk7Ci0KICAgICBpZiAo
cXVhZC0+bmVlZHNCbGVuZGluZygpKQogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKICAgICBlbHNlCkBAIC00ODEsNyAr
MzAyLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKERyYXdpbmdGcmFt
ZSYgZnJhbWUsIGNvbnN0IENDRHJhd1F1YWQqIHF1YWQKICAgICB9CiB9CiAKLXZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3Q2hlY2tlcmJvYXJkUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1l
LCBjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUs
IGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgY29uc3QgVGlsZUNo
ZWNrZXJib2FyZFByb2dyYW0qIHByb2dyYW0gPSB0aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSgpOwog
ICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpAQCAtNTAzLDcg
KzMyNCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q2hlY2tlcmJvYXJkUXVh
ZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0NoCiAgICAgZHJhd1F1YWRHZW9tZXRyeShm
cmFtZSwgcXVhZC0+cXVhZFRyYW5zZm9ybSgpLCBxdWFkLT5xdWFkUmVjdCgpLCBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlclF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NEZWJ1Z0JvcmRlckRyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NE
ZWJ1Z0JvcmRlckRyYXdRdWFkKiBxdWFkKQogewogICAgIHN0YXRpYyBmbG9hdCBnbE1hdHJpeFsx
Nl07CiAgICAgY29uc3QgU29saWRDb2xvclByb2dyYW0qIHByb2dyYW0gPSBzb2xpZENvbG9yUHJv
Z3JhbSgpOwpAQCAtNzYwLDcgKzU4MSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UmVuZGVyUGFzc1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kCiAgICAg
ZHJhd1F1YWRHZW9tZXRyeShmcmFtZSwgcXVhZC0+cXVhZFRyYW5zZm9ybSgpLCBxdWFkLT5xdWFk
UmVjdCgpLCBzaGFkZXJNYXRyaXhMb2NhdGlvbik7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3U29saWRDb2xvclF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NT
b2xpZENvbG9yRHJhd1F1YWQqIHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1NvbGlkQ29sb3JRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDU29saWRD
b2xvckRyYXdRdWFkKiBxdWFkKQogewogICAgIGNvbnN0IFNvbGlkQ29sb3JQcm9ncmFtKiBwcm9n
cmFtID0gc29saWRDb2xvclByb2dyYW0oKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCkt
PnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CkBAIC03OTksNyArNjIwLDcgQEAgc3Rh
dGljIHZvaWQgdGlsZVVuaWZvcm1Mb2NhdGlvbihUIHByb2dyYW0sIFRpbGVQcm9ncmFtVW5pZm9y
bXMmIHVuaWZvcm1zKQogICAgIHVuaWZvcm1zLmVkZ2VMb2NhdGlvbiA9IHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3VGlsZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NUaWxlRHJhd1F1
YWQqIHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKGNvbnN0
IERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDVGlsZURyYXdRdWFkKiBxdWFkKQogewogICAg
IEludFJlY3QgdGlsZVJlY3QgPSBxdWFkLT5xdWFkVmlzaWJsZVJlY3QoKTsKIApAQCAtOTY2LDcg
Kzc4Nyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQoRHJhd2lu
Z0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NUaWxlRHJhd1F1CiAgICAgZHJhd1F1YWRHZW9tZXRyeShm
cmFtZSwgcXVhZC0+cXVhZFRyYW5zZm9ybSgpLCBjZW50ZXJlZFJlY3QsIHVuaWZvcm1zLm1hdHJp
eExvY2F0aW9uKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVZWaWRl
b1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NZVVZWaWRlb0RyYXdRdWFkKiBxdWFk
KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVZWaWRlb1F1YWQoY29uc3QgRHJh
d2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NZVVZWaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAg
IGNvbnN0IFZpZGVvWVVWUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvWVVWUHJvZ3JhbSgpOwogICAg
IEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpAQCAtMTAyNiw3ICs4
NDcsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVlZpZGVvUXVhZChEcmF3
aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1lVVlZpZAogICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKIH0KIAot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJlYW1WaWRlb1F1YWQoRHJhd2luZ0Zy
YW1lJiBmcmFtZSwgY29uc3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKiBxdWFkKQordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJlYW1WaWRlb1F1YWQoY29uc3QgRHJhd2luZ0ZyYW1l
JiBmcmFtZSwgY29uc3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAgIHN0YXRp
YyBmbG9hdCBnbE1hdHJpeFsxNl07CiAKQEAgLTEwNzEsNyArODkyLDcgQEAgc3RydWN0IFRleFRy
YW5zZm9ybVRleHR1cmVQcm9ncmFtQmluZGluZyA6IFRleHR1cmVQcm9ncmFtQmluZGluZyB7CiAg
ICAgaW50IHRleFRyYW5zZm9ybUxvY2F0aW9uOwogfTsKIAotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdUZXh0dXJlUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1RleHR1
cmVEcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVy
ZVF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQq
IHF1YWQpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIApAQCAtMTEx
NSw3ICs5MzYsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVRdWFk
KERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDVGV4dHVyZQogICAgICAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGlj
c0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSkpOwogfQogCi12b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0lPU3VyZmFjZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NJT1N1cmZhY2VEcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3SU9TdXJmYWNlUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0lPU3Vy
ZmFjZURyYXdRdWFkKiBxdWFkKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSk7CiAgICAgVGV4VHJhbnNmb3JtVGV4dHVyZVByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CkBAIC0x
MTM3LDggKzk1OCwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0lPU3VyZmFj
ZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NJT1N1cgogICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+YmluZFRleHR1cmUoRXh0ZW5zaW9uczNEOjpURVhUVVJFX1JFQ1RBTkdM
RV9BUkIsIDApKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdp
bmdGcmFtZSgpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1l
KERyYXdpbmdGcmFtZSYgZnJhbWUpCiB7CisgICAgbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrLmNs
ZWFyKCk7CisgICAgbV9zd2FwQnVmZmVyUmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGZyYW1l
LnJvb3REYW1hZ2VSZWN0KSk7CisKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwogICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpKTsKIH0KQEAgLTEx
ODYsMjAgKzEwMTAsMTggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNoYWRlck9w
YWNpdHkoZmxvYXQgb3BhY2l0eSwgaW50IGFscGhhTG9jYXRpb24pCiAgICAgICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+dW5pZm9ybTFmKGFscGhhTG9jYXRpb24sIG9wYWNpdHkpKTsKIH0K
IAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkR2VvbWV0cnkoRHJhd2luZ0Zy
YW1lJiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBxdWFkUmVjdCwgaW50IG1hdHJpeExvY2F0aW9uKQor
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkR2VvbWV0cnkoY29uc3QgRHJhd2lu
Z0ZyYW1lJiBmcmFtZSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJh
d1RyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBxdWFkUmVjdCwgaW50IG1hdHJpeExvY2F0aW9u
KQogewotICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHF1YWRNYXRyaXggPSBkcmF3VHJhbnNm
b3JtOwotICAgIHF1YWRNYXRyaXgudHJhbnNsYXRlKDAuNSAqIHF1YWRSZWN0LndpZHRoKCkgKyBx
dWFkUmVjdC54KCksIDAuNSAqIHF1YWRSZWN0LmhlaWdodCgpICsgcXVhZFJlY3QueSgpKTsKLSAg
ICBxdWFkTWF0cml4LnNjYWxlTm9uVW5pZm9ybShxdWFkUmVjdC53aWR0aCgpLCBxdWFkUmVjdC5o
ZWlnaHQoKSk7Ci0KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkUmVjdE1hdHJpeDsK
KyAgICBxdWFkUmVjdFRyYW5zZm9ybSgmcXVhZFJlY3RNYXRyaXgsIGRyYXdUcmFuc2Zvcm0sIHF1
YWRSZWN0KTsKICAgICBzdGF0aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOwotICAgIHRvR0xNYXRyaXgo
JmdsTWF0cml4WzBdLCBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ICogcXVhZE1hdHJpeCk7CisgICAg
dG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIGZyYW1lLnByb2plY3Rpb25NYXRyaXggKiBxdWFkUmVj
dE1hdHJpeCk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2
KG1hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwgJmdsTWF0cml4WzBdKSk7CiAKICAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5H
TEVTLCA2LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApKTsKIH0KIAotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihEcmF3aW5n
RnJhbWUmIGZyYW1lLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01hdHJpeCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFt
ZSwgaW50IHRleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGRyYXdNYXRyaXgpCiB7CiAgICAgY29uc3QgUmVuZGVyUGFzc1Byb2dyYW0q
IHByb2dyYW0gPSByZW5kZXJQYXNzUHJvZ3JhbSgpOwogCkBAIC0xMzg0LDMxICsxMjA2LDYgQEAg
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyVGV4dHVyZShDQ1Njb3Bl
ZFRleHR1cmUqIHRleHR1cmUsIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmlzQ3VycmVudFJlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFt
ZSwgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQotewotICAgIHJldHVybiBmcmFtZS5j
dXJyZW50UmVuZGVyUGFzcyA9PSByZW5kZXJQYXNzICYmICFmcmFtZS5jdXJyZW50VGV4dHVyZTsK
LX0KLQotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclBhc3MoRHJhd2luZ0Zy
YW1lJiBmcmFtZSwgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQotewotICAgIGZyYW1l
LmN1cnJlbnRSZW5kZXJQYXNzID0gcmVuZGVyUGFzczsKLSAgICBmcmFtZS5jdXJyZW50VGV4dHVy
ZSA9IDA7Ci0KLSAgICBpZiAocmVuZGVyUGFzcyA9PSBmcmFtZS5yb290UmVuZGVyUGFzcykgewot
ICAgICAgICBmcmFtZS5jdXJyZW50RnJhbWVidWZmZXJMb2NrLmNsZWFyKCk7Ci0gICAgICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgMCkpOwotICAgICAgICBzZXREcmF3RnJhbWVidWZmZXJSZWN0KGZyYW1l
LCByZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCksIHRydWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVy
ZXMuZ2V0KHJlbmRlclBhc3MtPmlkKCkpOwotICAgIEFTU0VSVCh0ZXh0dXJlKTsKLSAgICBpZiAo
IXRleHR1cmUtPmlkKCkgJiYgIXRleHR1cmUtPmFsbG9jYXRlKENDUmVuZGVyZXI6OkltcGxQb29s
LCByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzcyksIHJlbmRlclBhc3NUZXh0dXJlRm9y
bWF0KHJlbmRlclBhc3MpLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVVc2FnZUZyYW1lYnVm
ZmVyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGJpbmRGcmFtZWJ1ZmZl
clRvVGV4dHVyZShmcmFtZSwgdGV4dHVyZSwgcmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpKTsKLX0K
LQogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVNjb3BlZFRleHR1cmUoRHJhd2luZ0Zy
YW1lJiBmcmFtZSwgY29uc3QgQ0NTY29wZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiB2aWV3cG9ydFJlY3QpCiB7CiAgICAgQVNTRVJUKHRleHR1cmUtPmlkKCkpOwpAQCAtMTQxOCwx
MyArMTIxNSwxOSBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2NvcGVkVGV4dHVy
ZShEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1Njb3BlZAogICAgIHJldHVybiBiaW5kRnJh
bWVidWZmZXJUb1RleHR1cmUoZnJhbWUsIHRleHR1cmUsIHZpZXdwb3J0UmVjdCk7CiB9CiAKK3Zv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb091dHB1dFN1cmZhY2Uo
RHJhd2luZ0ZyYW1lJiBmcmFtZSkKK3sKKyAgICBtX2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2suY2xl
YXIoKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKK30KKwogYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZyYW1lLCBj
b25zdCBDQ1Njb3BlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVy
UmVjdCkKIHsKICAgICBBU1NFUlQodGV4dHVyZS0+aWQoKSk7CiAKICAgICBHTEMobV9jb250ZXh0
LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOwotICAgIGZyYW1lLmN1cnJlbnRGcmFtZWJ1
ZmZlckxvY2sgPSBhZG9wdFB0cihuZXcgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZShtX3Jl
c291cmNlUHJvdmlkZXIsIHRleHR1cmUtPmlkKCkpKTsKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQg
PSBmcmFtZS5jdXJyZW50RnJhbWVidWZmZXJMb2NrLT50ZXh0dXJlSWQoKTsKKyAgICBtX2N1cnJl
bnRGcmFtZWJ1ZmZlckxvY2sgPSBhZG9wdFB0cihuZXcgQ0NTY29wZWRMb2NrUmVzb3VyY2VGb3JX
cml0ZShtX3Jlc291cmNlUHJvdmlkZXIsIHRleHR1cmUtPmlkKCkpKTsKKyAgICB1bnNpZ25lZCB0
ZXh0dXJlSWQgPSBtX2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2stPnRleHR1cmVJZCgpOwogICAgIEdM
QyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQsIDApKTsKIAogI2lmICFk
ZWZpbmVkICggTkRFQlVHICkKQEAgLTE0MzQsNTEgKzEyMzcsMzIgQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmIGZyYW1l
LCBjb25zdAogICAgIH0KICNlbmRpZgogCi0gICAgc2V0RHJhd0ZyYW1lYnVmZmVyUmVjdChmcmFt
ZSwgZnJhbWVidWZmZXJSZWN0LCBmYWxzZSk7CisgICAgaW5pdGlhbGl6ZU1hdHJpY2VzKGZyYW1l
LCBmcmFtZWJ1ZmZlclJlY3QsIGZhbHNlKTsKKyAgICBzZXREcmF3Vmlld3BvcnRTaXplKGZyYW1l
YnVmZmVyUmVjdC5zaXplKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFNldHMgdGhl
IHNjaXNzb3IgcmVnaW9uIHRvIHRoZSBnaXZlbiByZWN0YW5nbGUuIFRoZSBjb29yZGluYXRlIHN5
c3RlbSBmb3IgdGhlCi0vLyBzY2lzc29yUmVjdCBoYXMgaXRzIG9yaWdpbiBhdCB0aGUgdG9wIGxl
ZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHZpc2libGUgcmVjdC4KLXZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpzZXRTY2lzc29yVG9SZWN0KERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IElu
dFJlY3QmIHNjaXNzb3JSZWN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmVuYWJsZVNj
aXNzb3JUZXN0UmVjdChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkKIHsKLSAgICBJbnRSZWN0
IGZyYW1lYnVmZmVyT3V0cHV0UmVjdCA9IGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzLT5vdXRwdXRS
ZWN0KCk7Ci0KICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKSk7Ci0KLSAgICAvLyBUaGUgc2Npc3NvciBjb29yZGluYXRl
cyBtdXN0IGJlIHN1cHBsaWVkIGluIHZpZXdwb3J0IHNwYWNlIHNvIHdlIG5lZWQgdG8gb2Zmc2V0
Ci0gICAgLy8gYnkgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIg
b2YgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuCi0gICAgaW50IHNjaXNzb3JYID0gc2Npc3NvclJl
Y3QueCgpIC0gZnJhbWVidWZmZXJPdXRwdXRSZWN0LngoKTsKLSAgICAvLyBXaGVuIHJlbmRlcmlu
ZyB0byB0aGUgZGVmYXVsdCByZW5kZXIgc3VyZmFjZSB3ZSdyZSByZW5kZXJpbmcgdXBzaWRlIGRv
d24gc28gdGhlIHRvcAotICAgIC8vIG9mIHRoZSBHTCBzY2lzc29yIGlzIHRoZSBib3R0b20gb2Yg
b3VyIGxheWVyLgotICAgIC8vIEJ1dCwgaWYgcmVuZGVyaW5nIHRvIG9mZnNjcmVlbiB0ZXh0dXJl
LCB3ZSByZXZlcnNlIG91ciBzZW5zZSBvZiAndXBzaWRlIGRvd24nLgotICAgIGludCBzY2lzc29y
WTsKLSAgICBpZiAoaXNDdXJyZW50UmVuZGVyUGFzcyhmcmFtZSwgZnJhbWUucm9vdFJlbmRlclBh
c3MpKQotICAgICAgICBzY2lzc29yWSA9IGZyYW1lYnVmZmVyT3V0cHV0UmVjdC5oZWlnaHQoKSAt
IChzY2lzc29yUmVjdC5tYXhZKCkgLSBmcmFtZWJ1ZmZlck91dHB1dFJlY3QueSgpKTsKLSAgICBl
bHNlCi0gICAgICAgIHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gZnJhbWVidWZmZXJPdXRw
dXRSZWN0LnkoKTsKLSAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnNjaXNzb3Ioc2Npc3Nv
clgsIHNjaXNzb3JZLCBzY2lzc29yUmVjdC53aWR0aCgpLCBzY2lzc29yUmVjdC5oZWlnaHQoKSkp
OworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+c2Npc3NvcihzY2lzc29yUmVjdC54KCks
IHNjaXNzb3JSZWN0LnkoKSwgc2Npc3NvclJlY3Qud2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0
KCkpKTsKIH0KIAotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Om1ha2VDb250ZXh0Q3VycmVu
dCgpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlzYWJsZVNjaXNzb3JUZXN0KCkKIHsK
LSAgICByZXR1cm4gbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCkpOwogfQogCi0vLyBTZXRzIHRoZSBjb29yZGluYXRlIHJhbmdlIG9mIGNvbnRlbnQgdGhhdCBl
bmRzIGJlaW5nIGRyYXduIG9udG8gdGhlIHRhcmdldCByZW5kZXIgc3VyZmFjZS4KLS8vIFRoZSB0
YXJnZXQgcmVuZGVyIHN1cmZhY2UgaXMgYXNzdW1lZCB0byBoYXZlIGFuIG9yaWdpbiBhdCAwLCAw
IGFuZCB0aGUgd2lkdGggYW5kIGhlaWdodCBvZgotLy8gb2YgdGhlIGRyYXdSZWN0Lgotdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnNldERyYXdGcmFtZWJ1ZmZlclJlY3QoRHJhd2luZ0ZyYW1l
JiBmcmFtZSwgY29uc3QgSW50UmVjdCYgZHJhd1JlY3QsIGJvb2wgZmxpcFkpCit2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2V0RHJhd1ZpZXdwb3J0U2l6ZShjb25zdCBJbnRTaXplJiB2aWV3
cG9ydFNpemUpCiB7Ci0gICAgaWYgKGZsaXBZKQotICAgICAgICBmcmFtZS5wcm9qZWN0aW9uTWF0
cml4ID0gb3J0aG9NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5tYXhYKCksIGRyYXdSZWN0
Lm1heFkoKSwgZHJhd1JlY3QueSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGZyYW1lLnByb2plY3Rp
b25NYXRyaXggPSBvcnRob01hdHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0Lm1heFgoKSwgZHJh
d1JlY3QueSgpLCBkcmF3UmVjdC5tYXhZKCkpOwotICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4
dC0+dmlld3BvcnQoMCwgMCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpKTsK
LSAgICBmcmFtZS53aW5kb3dNYXRyaXggPSBzY3JlZW5NYXRyaXgoMCwgMCwgZHJhd1JlY3Qud2lk
dGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpOworICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
dmlld3BvcnQoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQo
KSkpOwogfQogCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6bWFrZUNvbnRleHRDdXJyZW50
KCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KIAog
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKIHsK
QEAgLTE0OTAsNyArMTI3NCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cygpCiAKICAgICAvLyBXZSB3aWxsIGFsd2F5cyBuZWVkIHRoZXNlIHBy
b2dyYW1zIHRvIHJlbmRlciwgc28gY3JlYXRlIHRoZSBwcm9ncmFtcyBlYWdlcmx5IHNvIHRoYXQg
dGhlIHNoYWRlciBjb21waWxhdGlvbiBjYW4KICAgICAvLyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhl
ciB3b3JrLiBPdGhlciBwcm9ncmFtcyBhcmUgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNz
LgotICAgIG1fc2hhcmVkR2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1f
Y29udGV4dCkpOworICAgIG1fc2hhcmVkR2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlC
aW5kaW5nKG1fY29udGV4dCwgcXVhZFZlcnRleFJlY3QoKSkpOwogICAgIG1fcmVuZGVyUGFzc1By
b2dyYW0gPSBhZG9wdFB0cihuZXcgUmVuZGVyUGFzc1Byb2dyYW0obV9jb250ZXh0KSk7CiAgICAg
bV90aWxlUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBUaWxlUHJvZ3JhbShtX2NvbnRleHQpKTsKICAg
ICBtX3RpbGVQcm9ncmFtT3BhcXVlID0gYWRvcHRQdHIobmV3IFRpbGVQcm9ncmFtT3BhcXVlKG1f
Y29udGV4dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBmYjUxZjg0
MGU4OTNhMzQ0NzJiMmY3ZWY4MjIyY2M4NzEyNGYwNGQ3Li4wOWNkMGUyOTExMTliZTc0MTk0MjI4
ZjkwMzdkOWFlZGUzZjFkYWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApA
QCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiQ0NDaGVja2VyYm9hcmREcmF3UXVhZC5oIgog
I2luY2x1ZGUgIkNDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgorI2luY2x1ZGUgIkNDRGlyZWN0UmVu
ZGVyZXIuaCIKICNpbmNsdWRlICJDQ0lPU3VyZmFjZURyYXdRdWFkLmgiCiAjaW5jbHVkZSAiQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQuaCIKICNpbmNsdWRlICJDQ1JlbmRlcmVyLmgiCkBAIC01OSw3ICs2
MCw3IEBAIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIFNjb3BlZEVuc3VyZUZyYW1lYnVm
ZmVyQWxsb2NhdGlvbjsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9z
aXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVt
IDogcHVibGljIENDUmVuZGVyZXIsCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJs
aWMgQ0NEaXJlY3RSZW5kZXJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc1N3YXBCdWZmZXJzQ29t
cGxldGVDYWxsYmFja0NIUk9NSVVNLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzTWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNICwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc0NvbnRl
eHRMb3N0Q2FsbGJhY2sgewpAQCAtNzcsMTEgKzc4LDYgQEAgcHVibGljOgogCiAgICAgY29uc3Qg
RmxvYXRRdWFkJiBzaGFyZWRHZW9tZXRyeVF1YWQoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdl
b21ldHJ5UXVhZDsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRlY2lkZVJlbmRlclBhc3NBbGxvY2F0
aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGJvb2wgaGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChpbnQgaWQpIGNvbnN0
IE9WRVJSSURFOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZShjb25zdCBDQ1JlbmRlclBh
c3NMaXN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNoTWFwJikgT1ZFUlJJREU7Ci0KICAgICAv
LyB3YWl0cyBmb3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2go
KSBPVkVSUklERTsKIApAQCAtMTAzLDczICs5OSw0NSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0VmlzaWJsZShib29sKSBPVkVSUklERTsKIAotICAgIENDUmVzb3VyY2VQcm92aWRl
ciogcmVzb3VyY2VQcm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VQcm92aWRlcjsg
fQotCiBwcm90ZWN0ZWQ6CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDUmVuZGVyZXJDbGll
bnQqLCBDQ1Jlc291cmNlUHJvdmlkZXIqLCBUZXh0dXJlVXBsb2FkZXJPcHRpb24pOwogCi0KICAg
ICBib29sIGlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVi
dWZmZXJEaXNjYXJkZWQ7IH0KICAgICBib29sIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgcmVs
ZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwogCi1wcml2YXRlOgotICAgIHN0cnVjdCBEcmF3aW5n
RnJhbWUgewotICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3NJZEhhc2hNYXAqIHJlbmRlclBhc3Nl
c0J5SWQ7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcm9vdFJlbmRlclBhc3M7Ci0gICAg
ICAgIGNvbnN0IENDUmVuZGVyUGFzcyogY3VycmVudFJlbmRlclBhc3M7Ci0gICAgICAgIGNvbnN0
IENDU2NvcGVkVGV4dHVyZSogY3VycmVudFRleHR1cmU7Ci0gICAgICAgIE93blB0cjxDQ1Njb3Bl
ZExvY2tSZXNvdXJjZUZvcldyaXRlPiBjdXJyZW50RnJhbWVidWZmZXJMb2NrOwotCi0gICAgICAg
IEZsb2F0UmVjdCByb290RGFtYWdlUmVjdDsKLQotICAgICAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7Ci0gICAgICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggd2luZG93TWF0cml4OwotCi0gICAgICAgIERyYXdpbmdGcmFtZSgpCi0g
ICAgICAgICAgICA6IHJvb3RSZW5kZXJQYXNzKDApCi0gICAgICAgICAgICAsIGN1cnJlbnRSZW5k
ZXJQYXNzKDApCi0gICAgICAgICAgICAsIGN1cnJlbnRUZXh0dXJlKDApCi0gICAgICAgIHsgfQot
ICAgIH07CisgICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZlclRvT3V0cHV0U3VyZmFjZShE
cmF3aW5nRnJhbWUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgYmluZEZyYW1lYnVmZmVy
VG9UZXh0dXJlKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IElu
dFJlY3QmIGZyYW1lYnVmZmVyUmVjdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldERy
YXdWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBlbmFibGVTY2lzc29yVGVzdFJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlU2Npc3NvclRlc3QoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZWJ1ZmZlcihEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1F1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NEcmF3UXVh
ZCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZShEcmF3aW5n
RnJhbWUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKERy
YXdpbmdGcmFtZSYpIE9WRVJSSURFOwogCitwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHRvR0xN
YXRyaXgoZmxvYXQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAK
LSAgICB2b2lkIGJlZ2luRHJhd2luZ0ZyYW1lKCk7Ci0gICAgdm9pZCBkcmF3UmVuZGVyUGFzcyhE
cmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3MqKTsKLSAgICB2b2lkIGZpbmlzaERyYXdp
bmdGcmFtZSgpOwotCi0gICAgdm9pZCBkcmF3UXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0Ry
YXdRdWFkKiwgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KTsKLSAgICB2b2lkIGRyYXdDaGVja2VyYm9h
cmRRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqKTsKLSAg
ICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NEZWJ1Z0Jv
cmRlckRyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3Q2hlY2tlcmJvYXJkUXVhZChjb25zdCBEcmF3
aW5nRnJhbWUmLCBjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3
RGVidWdCb3JkZXJRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IENDRGVidWdCb3JkZXJE
cmF3UXVhZCopOwogICAgIFBhc3NPd25QdHI8Q0NTY29wZWRUZXh0dXJlPiBkcmF3QmFja2dyb3Vu
ZEZpbHRlcnMoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqLCBjb25z
dCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pOwogICAgIHZvaWQgZHJhd1JlbmRlclBhc3NR
dWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKik7Ci0gICAgdm9p
ZCBkcmF3U29saWRDb2xvclF1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NTb2xpZENvbG9yRHJh
d1F1YWQqKTsKLSAgICB2b2lkIGRyYXdTdHJlYW1WaWRlb1F1YWQoRHJhd2luZ0ZyYW1lJiwgY29u
c3QgQ0NTdHJlYW1WaWRlb0RyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3VGV4dHVyZVF1YWQoRHJh
d2luZ0ZyYW1lJiwgY29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdJT1N1
cmZhY2VRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDSU9TdXJmYWNlRHJhd1F1YWQqKTsKLSAg
ICB2b2lkIGRyYXdUaWxlUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1RpbGVEcmF3UXVhZCop
OwotICAgIHZvaWQgZHJhd1lVVlZpZGVvUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1lVVlZp
ZGVvRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBEcmF3aW5n
RnJhbWUmLCBjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1N0cmVh
bVZpZGVvUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1
YWQqKTsKKyAgICB2b2lkIGRyYXdUZXh0dXJlUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBjb25z
dCBDQ1RleHR1cmVEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd0lPU3VyZmFjZVF1YWQoY29uc3Qg
RHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NJT1N1cmZhY2VEcmF3UXVhZCopOworICAgIHZvaWQgZHJh
d1RpbGVRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IENDVGlsZURyYXdRdWFkKik7Cisg
ICAgdm9pZCBkcmF3WVVWVmlkZW9RdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IENDWVVW
VmlkZW9EcmF3UXVhZCopOwogCiAgICAgdm9pZCBzZXRTaGFkZXJPcGFjaXR5KGZsb2F0IG9wYWNp
dHksIGludCBhbHBoYUxvY2F0aW9uKTsKICAgICB2b2lkIHNldFNoYWRlckZsb2F0UXVhZChjb25z
dCBGbG9hdFF1YWQmLCBpbnQgcXVhZExvY2F0aW9uKTsKLSAgICB2b2lkIGRyYXdRdWFkR2VvbWV0
cnkoRHJhd2luZ0ZyYW1lJiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
ZHJhd1RyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBxdWFkUmVjdCwgaW50IG1hdHJpeExvY2F0
aW9uKTsKLQotICAgIHZvaWQgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKERyYXdpbmdGcmFtZSYs
IGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKLQotICAgIHZvaWQgc2V0U2Npc3NvclRvUmVjdChE
cmF3aW5nRnJhbWUmLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBkcmF3UXVhZEdlb21ldHJ5
KGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFJlY3QsIGludCBtYXRyaXhM
b2NhdGlvbik7CiAKLSAgICB2b2lkIHNldERyYXdGcmFtZWJ1ZmZlclJlY3QoRHJhd2luZ0ZyYW1l
JiwgY29uc3QgSW50UmVjdCYsIGJvb2wgZmxpcFkpOworICAgIHZvaWQgY29weVRleHR1cmVUb0Zy
YW1lYnVmZmVyKGNvbnN0IERyYXdpbmdGcmFtZSYsIGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFJl
Y3QmLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsK
IAotICAgIC8vIFRoZSBjdXJyZW50IGRyYXdpbmcgdGFyZ2V0IGlzIGVpdGhlciBhIFJlbmRlclBh
c3Mgb3IgU2NvcGVkVGV4dHVyZS4gVXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzd2l0Y2ggdG8gYSBu
ZXcgZHJhd2luZyB0YXJnZXQuCi0gICAgYm9vbCB1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYs
IGNvbnN0IENDUmVuZGVyUGFzcyopOwogICAgIGJvb2wgdXNlU2NvcGVkVGV4dHVyZShEcmF3aW5n
RnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJl
Y3QpOwotICAgIGJvb2wgaXNDdXJyZW50UmVuZGVyUGFzcyhEcmF3aW5nRnJhbWUmLCBjb25zdCBD
Q1JlbmRlclBhc3MqKTsKLQotICAgIGJvb2wgYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKERyYXdp
bmdGcmFtZSYsIGNvbnN0IENDU2NvcGVkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHZpZXdwb3J0
UmVjdCk7Ci0KLSAgICB2b2lkIGNsZWFyRnJhbWVidWZmZXIoRHJhd2luZ0ZyYW1lJik7CiAKICAg
ICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCkBAIC0xODgsOSArMTU2LDYgQEAgcHJpdmF0
ZToKICAgICAvLyBXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NDb250ZXh0TG9zdENh
bGxiYWNrIGltcGxlbWVudGF0aW9uLgogICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkg
T1ZFUlJJREU7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSByZW5kZXJQYXNzVGV4dHVyZVNpemUoY29u
c3QgQ0NSZW5kZXJQYXNzKik7Ci0gICAgc3RhdGljIEdDM0RlbnVtIHJlbmRlclBhc3NUZXh0dXJl
Rm9ybWF0KGNvbnN0IENDUmVuZGVyUGFzcyopOwotCiAgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcyBtX2NhcGFiaWxpdGllczsKIAogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZm
ZXJJZDsKQEAgLTE5OCw4ICsxNjMsNiBAQCBwcml2YXRlOgogICAgIE93blB0cjxHZW9tZXRyeUJp
bmRpbmc+IG1fc2hhcmVkR2VvbWV0cnk7CiAgICAgRmxvYXRRdWFkIG1fc2hhcmVkR2VvbWV0cnlR
dWFkOwogCi0gICAgY2xhc3MgQ2FjaGVkVGV4dHVyZTsKLQogICAgIC8vIFRoaXMgYmxvY2sgb2Yg
YmluZGluZ3MgZGVmaW5lcyBhbGwgb2YgdGhlIHByb2dyYW1zIHVzZWQgYnkgdGhlIGNvbXBvc2l0
b3IgaXRzZWxmLgogCiAgICAgLy8gVGlsZWQgbGF5ZXIgc2hhZGVycy4KQEAgLTI3MywxMiArMjM2
LDkgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxTb2xpZENvbG9yUHJvZ3JhbT4gbV9zb2xpZENv
bG9yUHJvZ3JhbTsKIAotICAgIENDUmVzb3VyY2VQcm92aWRlciogbV9yZXNvdXJjZVByb3ZpZGVy
OwogICAgIE93blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsK
ICAgICBPd25QdHI8VGV4dHVyZVVwbG9hZGVyPiBtX3RleHR1cmVVcGxvYWRlcjsKIAotICAgIEhh
c2hNYXA8aW50LCBPd25QdHI8Q2FjaGVkVGV4dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0dXJlczsK
LQogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIAogICAgIElu
dFJlY3QgbV9zd2FwQnVmZmVyUmVjdDsKQEAgLTI4Nyw2ICsyNDcsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9pc1VzaW5nQmluZFVuaWZvcm07CiAgICAgYm9vbCBtX3Zpc2libGU7CiAgICAgVGV4
dHVyZVVwbG9hZGVyT3B0aW9uIG1fdGV4dHVyZVVwbG9hZGVyU2V0dGluZzsKKworICAgIE93blB0
cjxDQ1Njb3BlZExvY2tSZXNvdXJjZUZvcldyaXRlPiBtX2N1cnJlbnRGcmFtZWJ1ZmZlckxvY2s7
CiB9OwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVDb3BpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaAppbmRleCBhZmUyZWMwMjU2NGFkN2FiZGM4MDIxNTdl
ZmY3YmNlODk2Njg3YzRmLi42OGIwZjE2NTY1Nzc1NzY4NDllYmY0NzU1Y2ZhNGMxNDM5Y2Y1Mjg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
ZXh0dXJlQ29waWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZUNvcGllci5oCkBAIC01MSw3ICs1MSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY29weVRleHR1cmUoUGFyYW1ldGVycykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBm
bHVzaCgpID0gMDsKIAotcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgflRleHR1cmVDb3BpZXIoKSB7
IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1VudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbnRocm90dGxlZFRleHR1cmVVcGxvYWRlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZhOTY4OTliNjE5ZWM0ZjZhMjczMzg4ZGZmZDc2NGIwMDA2ZTExODMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbnRo
cm90dGxlZFRleHR1cmVVcGxvYWRlci5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyX2gKKyNkZWZpbmUgVW50aHJvdHRs
ZWRUZXh0dXJlVXBsb2FkZXJfaAorCisjaW5jbHVkZSAiQ0NSZXNvdXJjZVByb3ZpZGVyLmgiCisj
aW5jbHVkZSAiVGV4dHVyZVVwbG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIgOiBwdWJsaWMgVGV4dHVyZVVwbG9hZGVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcik7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXI+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFVudGhyb3R0bGVk
VGV4dHVyZVVwbG9hZGVyKCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5VbnRocm90dGxlZFRleHR1
cmVVcGxvYWRlcigpIHsgfQorCisgICAgdmlydHVhbCBib29sIGlzQnVzeSgpIE9WRVJSSURFIHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVXBsb2FkcygpIE9WRVJSSURF
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBlbmRVcGxvYWRzKCkgT1ZFUlJJREUgeyB9CisgICAgdmly
dHVhbCB2b2lkIHVwbG9hZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3Zp
ZGVyLCBQYXJhbWV0ZXJzIHVwbG9hZCkgT1ZFUlJJREUgeyB1cGxvYWQudGV4dHVyZS0+dXBkYXRl
UmVjdChyZXNvdXJjZVByb3ZpZGVyLCB1cGxvYWQuc291cmNlUmVjdCwgdXBsb2FkLmRlc3RPZmZz
ZXQpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcigpIHsg
fQorfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEaXJlY3RSZW5kZXJlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDE4ZGYzZjc1YmUxNTdmNDJhNzlhZDAzYWRkZjE5YWZmM2ExZjNkZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDRGlyZWN0UmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiQ0NEaXJlY3RSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiQ0NNYXRoVXRp
bC5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgorCit1c2lu
ZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OworCitzdGF0aWMgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggb3J0aG9Qcm9qZWN0aW9uTWF0cml4KGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0
LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKK3sKKyAgICAvLyBVc2UgdGhlIHN0YW5kYXJkIGZv
cm11bGEgdG8gbWFwIHRoZSBjbGlwcGluZyBmcnVzdHVtIHRvIHRoZSBjdWJlIGZyb20KKyAgICAv
LyBbLTEsIC0xLCAtMV0gdG8gWzEsIDEsIDFdLgorICAgIGZsb2F0IGRlbHRhWCA9IHJpZ2h0IC0g
bGVmdDsKKyAgICBmbG9hdCBkZWx0YVkgPSB0b3AgLSBib3R0b207CisgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggcHJvajsKKyAgICBpZiAoIWRlbHRhWCB8fCAhZGVsdGFZKQorICAgICAgICBy
ZXR1cm4gcHJvajsKKyAgICBwcm9qLnNldE0xMSgyLjBmIC8gZGVsdGFYKTsKKyAgICBwcm9qLnNl
dE00MSgtKHJpZ2h0ICsgbGVmdCkgLyBkZWx0YVgpOworICAgIHByb2ouc2V0TTIyKDIuMGYgLyBk
ZWx0YVkpOworICAgIHByb2ouc2V0TTQyKC0odG9wICsgYm90dG9tKSAvIGRlbHRhWSk7CisKKyAg
ICAvLyBaIGNvbXBvbmVudCBvZiB2ZXJ0aWNlcyBpcyBhbHdheXMgc2V0IHRvIHplcm8gYXMgd2Ug
ZG9uJ3QgdXNlIHRoZSBkZXB0aCBidWZmZXIKKyAgICAvLyB3aGlsZSBkcmF3aW5nLgorICAgIHBy
b2ouc2V0TTMzKDApOworCisgICAgcmV0dXJuIHByb2o7Cit9CisKK3N0YXRpYyBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB3aW5kb3dNYXRyaXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY2FudmFzOworCisgICAgLy8g
TWFwIHRvIHdpbmRvdyBwb3NpdGlvbiBhbmQgc2NhbGUgdXAgdG8gcGl4ZWwgY29vcmRpbmF0ZXMu
CisgICAgY2FudmFzLnRyYW5zbGF0ZTNkKHgsIHksIDApOworICAgIGNhbnZhcy5zY2FsZTNkKHdp
ZHRoLCBoZWlnaHQsIDApOworCisgICAgLy8gTWFwIGZyb20gKFstMSwgLTFdIHRvIFsxLCAxXSkg
LT4gKFswLCAwXSB0byBbMSwgMV0pCisgICAgY2FudmFzLnRyYW5zbGF0ZTNkKDAuNSwgMC41LCAw
LjUpOworICAgIGNhbnZhcy5zY2FsZTNkKDAuNSwgMC41LCAwLjUpOworCisgICAgcmV0dXJuIGNh
bnZhczsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworLy8KKy8vIHN0YXRpYworRmxvYXRSZWN0
IENDRGlyZWN0UmVuZGVyZXI6OnF1YWRWZXJ0ZXhSZWN0KCkKK3sKKyAgICByZXR1cm4gRmxvYXRS
ZWN0KC0wLjUsIC0wLjUsIDEsIDEpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgQ0NEaXJlY3RSZW5k
ZXJlcjo6cXVhZFJlY3RUcmFuc2Zvcm0oV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCog
cXVhZFJlY3RUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHF1YWRUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFJlY3QpCit7CisgICAgKnF1YWRS
ZWN0VHJhbnNmb3JtID0gcXVhZFRyYW5zZm9ybTsKKyAgICBxdWFkUmVjdFRyYW5zZm9ybS0+dHJh
bnNsYXRlKDAuNSAqIHF1YWRSZWN0LndpZHRoKCkgKyBxdWFkUmVjdC54KCksIDAuNSAqIHF1YWRS
ZWN0LmhlaWdodCgpICsgcXVhZFJlY3QueSgpKTsKKyAgICBxdWFkUmVjdFRyYW5zZm9ybS0+c2Nh
bGVOb25Vbmlmb3JtKHF1YWRSZWN0LndpZHRoKCksIHF1YWRSZWN0LmhlaWdodCgpKTsKK30KKwor
Ly8gc3RhdGljCit2b2lkIENDRGlyZWN0UmVuZGVyZXI6OmluaXRpYWxpemVNYXRyaWNlcyhEcmF3
aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9vbCBmbGlwWSkKK3sK
KyAgICBpZiAoZmxpcFkpCisgICAgICAgIGZyYW1lLnByb2plY3Rpb25NYXRyaXggPSBvcnRob1By
b2plY3Rpb25NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5tYXhYKCksIGRyYXdSZWN0Lm1h
eFkoKSwgZHJhd1JlY3QueSgpKTsKKyAgICBlbHNlCisgICAgICAgIGZyYW1lLnByb2plY3Rpb25N
YXRyaXggPSBvcnRob1Byb2plY3Rpb25NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3UmVjdC5tYXhY
KCksIGRyYXdSZWN0LnkoKSwgZHJhd1JlY3QubWF4WSgpKTsKKyAgICBmcmFtZS53aW5kb3dNYXRy
aXggPSB3aW5kb3dNYXRyaXgoMCwgMCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0
KCkpOworICAgIGZyYW1lLmZsaXBwZWRZID0gZmxpcFk7Cit9CisKKy8vIHN0YXRpYworSW50UmVj
dCBDQ0RpcmVjdFJlbmRlcmVyOjptb3ZlU2Npc3NvclRvV2luZG93U3BhY2UoY29uc3QgRHJhd2lu
Z0ZyYW1lJiBmcmFtZSwgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KQoreworICAgIEludFJlY3Qgc2Np
c3NvclJlY3RJbkNhbnZhc1NwYWNlID0gZW5jbG9zaW5nSW50UmVjdChzY2lzc29yUmVjdCk7Cisg
ICAgLy8gVGhlIHNjaXNzb3IgY29vcmRpbmF0ZXMgbXVzdCBiZSBzdXBwbGllZCBpbiB2aWV3cG9y
dCBzcGFjZSBzbyB3ZSBuZWVkIHRvIG9mZnNldAorICAgIC8vIGJ5IHRoZSByZWxhdGl2ZSBwb3Np
dGlvbiBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLgor
ICAgIEludFJlY3QgZnJhbWVidWZmZXJPdXRwdXRSZWN0ID0gZnJhbWUuY3VycmVudFJlbmRlclBh
c3MtPm91dHB1dFJlY3QoKTsKKyAgICBzY2lzc29yUmVjdEluQ2FudmFzU3BhY2Uuc2V0WChzY2lz
c29yUmVjdEluQ2FudmFzU3BhY2UueCgpIC0gZnJhbWVidWZmZXJPdXRwdXRSZWN0LngoKSk7Cisg
ICAgaWYgKGZyYW1lLmZsaXBwZWRZICYmICFmcmFtZS5jdXJyZW50VGV4dHVyZSkKKyAgICAgICAg
c2Npc3NvclJlY3RJbkNhbnZhc1NwYWNlLnNldFkoZnJhbWVidWZmZXJPdXRwdXRSZWN0LmhlaWdo
dCgpIC0gKHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZS5tYXhZKCkgLSBmcmFtZWJ1ZmZlck91dHB1
dFJlY3QueSgpKSk7CisgICAgZWxzZQorICAgICAgICBzY2lzc29yUmVjdEluQ2FudmFzU3BhY2Uu
c2V0WShzY2lzc29yUmVjdEluQ2FudmFzU3BhY2UueSgpIC0gZnJhbWVidWZmZXJPdXRwdXRSZWN0
LnkoKSk7CisgICAgcmV0dXJuIHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZTsKK30KKwordm9pZCBD
Q0RpcmVjdFJlbmRlcmVyOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25z
dCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikKK3sKKyAgICBIYXNo
TWFwPGludCwgY29uc3QgQ0NSZW5kZXJQYXNzKj4gcmVuZGVyUGFzc2VzSW5GcmFtZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUoKTsgKytp
KQorICAgICAgICByZW5kZXJQYXNzZXNJbkZyYW1lLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRl
cltpXS0+aWQoKSwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0pOworCisgICAgVmVjdG9yPGlu
dD4gcGFzc2VzVG9EZWxldGU7CisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxDYWNoZWRUZXh0dXJl
PiA+Ojpjb25zdF9pdGVyYXRvciBwYXNzSXRlcmF0b3I7CisgICAgZm9yIChwYXNzSXRlcmF0b3Ig
PSBtX3JlbmRlclBhc3NUZXh0dXJlcy5iZWdpbigpOyBwYXNzSXRlcmF0b3IgIT0gbV9yZW5kZXJQ
YXNzVGV4dHVyZXMuZW5kKCk7ICsrcGFzc0l0ZXJhdG9yKSB7CisgICAgICAgIGNvbnN0IENDUmVu
ZGVyUGFzcyogcmVuZGVyUGFzc0luRnJhbWUgPSByZW5kZXJQYXNzZXNJbkZyYW1lLmdldChwYXNz
SXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgaWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgeworICAg
ICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBJbnRTaXplJiBy
ZXF1aXJlZFNpemUgPSByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzc0luRnJhbWUpOwor
ICAgICAgICBHQzNEZW51bSByZXF1aXJlZEZvcm1hdCA9IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0
KHJlbmRlclBhc3NJbkZyYW1lKTsKKyAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBh
c3NJdGVyYXRvci0+c2Vjb25kLmdldCgpOworICAgICAgICBBU1NFUlQodGV4dHVyZSk7CisKKyAg
ICAgICAgaWYgKHRleHR1cmUtPmlkKCkgJiYgKHRleHR1cmUtPnNpemUoKSAhPSByZXF1aXJlZFNp
emUgfHwgdGV4dHVyZS0+Zm9ybWF0KCkgIT0gcmVxdWlyZWRGb3JtYXQpKQorICAgICAgICAgICAg
dGV4dHVyZS0+ZnJlZSgpOworICAgIH0KKworICAgIC8vIERlbGV0ZSBSZW5kZXJQYXNzIHRleHR1
cmVzIGZyb20gdGhlIHByZXZpb3VzIGZyYW1lIHRoYXQgd2lsbCBub3QgYmUgdXNlZCBhZ2Fpbi4K
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhc3Nlc1RvRGVsZXRlLnNpemUoKTsgKytpKQor
ICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlcy5yZW1vdmUocGFzc2VzVG9EZWxldGVbaV0pOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAoIW1fcmVuZGVyUGFzc1RleHR1cmVzLmNvbnRhaW5zKHJl
bmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpKSkgeworICAgICAgICAgICAgT3duUHRyPENh
Y2hlZFRleHR1cmU+IHRleHR1cmUgPSBDYWNoZWRUZXh0dXJlOjpjcmVhdGUobV9yZXNvdXJjZVBy
b3ZpZGVyKTsKKyAgICAgICAgICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnNldChyZW5kZXJQYXNz
ZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgdGV4dHVyZS5yZWxlYXNlKCkpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIENDRGlyZWN0UmVuZGVyZXI6OmRyYXdGcmFtZShjb25zdCBDQ1JlbmRl
clBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlciwgY29uc3QgQ0NSZW5kZXJQYXNzSWRI
YXNoTWFwJiByZW5kZXJQYXNzZXNCeUlkKQoreworICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcm9v
dFJlbmRlclBhc3MgPSByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5sYXN0KCk7CisgICAgQVNTRVJU
KHJvb3RSZW5kZXJQYXNzKTsKKworICAgIERyYXdpbmdGcmFtZSBmcmFtZTsKKyAgICBmcmFtZS5y
ZW5kZXJQYXNzZXNCeUlkID0gJnJlbmRlclBhc3Nlc0J5SWQ7CisgICAgZnJhbWUucm9vdFJlbmRl
clBhc3MgPSByb290UmVuZGVyUGFzczsKKyAgICBmcmFtZS5yb290RGFtYWdlUmVjdCA9IGNhcGFi
aWxpdGllcygpLnVzaW5nUGFydGlhbFN3YXAgPyByb290UmVuZGVyUGFzcy0+ZGFtYWdlUmVjdCgp
IDogcm9vdFJlbmRlclBhc3MtPm91dHB1dFJlY3QoKTsKKyAgICBmcmFtZS5yb290RGFtYWdlUmVj
dC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCB2aWV3cG9ydFNpemUoKSkpOwor
CisgICAgYmVnaW5EcmF3aW5nRnJhbWUoZnJhbWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpCisgICAgICAgIGRyYXdSZW5k
ZXJQYXNzKGZyYW1lLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXSk7CisgICAgZmluaXNoRHJh
d2luZ0ZyYW1lKGZyYW1lKTsKK30KKwordm9pZCBDQ0RpcmVjdFJlbmRlcmVyOjpkcmF3UmVuZGVy
UGFzcyhEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3Mp
Cit7CisgICAgaWYgKCF1c2VSZW5kZXJQYXNzKGZyYW1lLCByZW5kZXJQYXNzKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZnJhbWUuc2Npc3NvclJlY3RJblJlbmRlclBhc3NTcGFjZSA9IGZyYW1l
LmN1cnJlbnRSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7CisgICAgaWYgKGZyYW1lLnJvb3REYW1h
Z2VSZWN0ICE9IGZyYW1lLnJvb3RSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCkpIHsKKyAgICAgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVRyYW5zZm9ybVRvUm9vdCA9IGZyYW1lLmN1
cnJlbnRSZW5kZXJQYXNzLT50cmFuc2Zvcm1Ub1Jvb3RUYXJnZXQoKS5pbnZlcnNlKCk7CisgICAg
ICAgIGZyYW1lLnNjaXNzb3JSZWN0SW5SZW5kZXJQYXNzU3BhY2UuaW50ZXJzZWN0KENDTWF0aFV0
aWw6OnByb2plY3RDbGlwcGVkUmVjdChpbnZlcnNlVHJhbnNmb3JtVG9Sb290LCBmcmFtZS5yb290
RGFtYWdlUmVjdCkpOworICAgIH0KKworICAgIGVuYWJsZVNjaXNzb3JUZXN0UmVjdChtb3ZlU2Np
c3NvclRvV2luZG93U3BhY2UoZnJhbWUsIGZyYW1lLnNjaXNzb3JSZWN0SW5SZW5kZXJQYXNzU3Bh
Y2UpKTsKKyAgICBjbGVhckZyYW1lYnVmZmVyKGZyYW1lKTsKKworICAgIGNvbnN0IENDUXVhZExp
c3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKKyAgICBmb3IgKENDUXVhZExp
c3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zyb250QmVn
aW4oKTsgaXQgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytpdCkgeworICAgICAgICBG
bG9hdFJlY3QgcXVhZFNjaXNzb3JSZWN0ID0gZnJhbWUuc2Npc3NvclJlY3RJblJlbmRlclBhc3NT
cGFjZTsKKyAgICAgICAgcXVhZFNjaXNzb3JSZWN0LmludGVyc2VjdChpdC0+Z2V0KCktPmNsaXBw
ZWRSZWN0SW5UYXJnZXQoKSk7CisgICAgICAgIGlmICghcXVhZFNjaXNzb3JSZWN0LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgZW5hYmxlU2Npc3NvclRlc3RSZWN0KG1vdmVTY2lzc29yVG9XaW5k
b3dTcGFjZShmcmFtZSwgcXVhZFNjaXNzb3JSZWN0KSk7CisgICAgICAgICAgICBkcmF3UXVhZChm
cmFtZSwgaXQtPmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIENhY2hlZFRleHR1cmUq
IHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzcy0+aWQoKSk7Cisg
ICAgaWYgKHRleHR1cmUpCisgICAgICAgIHRleHR1cmUtPnNldElzQ29tcGxldGUoIXJlbmRlclBh
c3MtPmhhc09jY2x1c2lvbkZyb21PdXRzaWRlVGFyZ2V0U3VyZmFjZSgpKTsKK30KKworYm9vbCBD
Q0RpcmVjdFJlbmRlcmVyOjp1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0
IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKK3sKKyAgICBmcmFtZS5jdXJyZW50UmVuZGVyUGFz
cyA9IHJlbmRlclBhc3M7CisgICAgZnJhbWUuY3VycmVudFRleHR1cmUgPSAwOworCisgICAgaWYg
KHJlbmRlclBhc3MgPT0gZnJhbWUucm9vdFJlbmRlclBhc3MpIHsKKyAgICAgICAgYmluZEZyYW1l
YnVmZmVyVG9PdXRwdXRTdXJmYWNlKGZyYW1lKTsKKyAgICAgICAgaW5pdGlhbGl6ZU1hdHJpY2Vz
KGZyYW1lLCByZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCksIHRydWUpOworICAgICAgICBzZXREcmF3
Vmlld3BvcnRTaXplKHJlbmRlclBhc3MtPm91dHB1dFJlY3QoKS5zaXplKCkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5k
ZXJQYXNzVGV4dHVyZXMuZ2V0KHJlbmRlclBhc3MtPmlkKCkpOworICAgIEFTU0VSVCh0ZXh0dXJl
KTsKKyAgICBpZiAoIXRleHR1cmUtPmlkKCkgJiYgIXRleHR1cmUtPmFsbG9jYXRlKENDUmVuZGVy
ZXI6OkltcGxQb29sLCByZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzcyksIHJlbmRlclBh
c3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3MpLCBDQ1Jlc291cmNlUHJvdmlkZXI6OlRleHR1cmVV
c2FnZUZyYW1lYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGJp
bmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShmcmFtZSwgdGV4dHVyZSwgcmVuZGVyUGFzcy0+b3V0cHV0
UmVjdCgpKTsKK30KKworYm9vbCBDQ0RpcmVjdFJlbmRlcmVyOjpoYXZlQ2FjaGVkUmVzb3VyY2Vz
Rm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3QKK3sKKyAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0
dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KGlkKTsKKyAgICByZXR1cm4gdGV4dHVyZSAm
JiB0ZXh0dXJlLT5pZCgpICYmIHRleHR1cmUtPmlzQ29tcGxldGUoKTsKK30KKworLy8gc3RhdGlj
CitJbnRTaXplIENDRGlyZWN0UmVuZGVyZXI6OnJlbmRlclBhc3NUZXh0dXJlU2l6ZShjb25zdCBD
Q1JlbmRlclBhc3MqIHBhc3MpCit7CisgICAgcmV0dXJuIHBhc3MtPm91dHB1dFJlY3QoKS5zaXpl
KCk7Cit9CisKKy8vIHN0YXRpYworR0MzRGVudW0gQ0NEaXJlY3RSZW5kZXJlcjo6cmVuZGVyUGFz
c1RleHR1cmVGb3JtYXQoY29uc3QgQ0NSZW5kZXJQYXNzKikKK3sKKyAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yOTQxNTJjZGRmM2E1NWVhZWU4Y2FjMjM1YjMxYTJiOWUwMjM3MzAwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NEaXJlY3RSZW5kZXJlci5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBD
Q0RpcmVjdFJlbmRlcmVyX2gKKyNkZWZpbmUgQ0NEaXJlY3RSZW5kZXJlcl9oCisKKyNpbmNsdWRl
ICJDQ1JlbmRlcmVyLmgiCisjaW5jbHVkZSAiQ0NSZXNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVk
ZSAiQ0NTY29wZWRUZXh0dXJlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NS
ZXNvdXJjZVByb3ZpZGVyOworCisvLyBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBjb2RlIHNo
YXJlZCBiZXR3ZWVuIHRoZSBHTCBhbmQgc29mdHdhcmUKKy8vIHJlbmRlcmVyIGltcGxlbWVudGF0
aW9ucy4gICJEaXJlY3QiIHJlZmVycyB0byB0aGUgZmFjdCB0aGF0IGl0IGRvZXMgbm90CisvLyBk
ZWxlZ2F0ZSByZW5kZXJpbmcgdG8gYW5vdGhlciBjb21wb3NpdG9yLgorY2xhc3MgQ0NEaXJlY3RS
ZW5kZXJlciA6IHB1YmxpYyBDQ1JlbmRlcmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q0RpcmVjdFJlbmRlcmVyKTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0RpcmVjdFJlbmRlcmVy
KCkgeyB9CisKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIoKSBjb25z
dCB7IHJldHVybiBtX3Jlc291cmNlUHJvdmlkZXI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWNp
ZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiBy
ZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhdmVD
YWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBh
c3Nlc0luRHJhd09yZGVyLCBjb25zdCBDQ1JlbmRlclBhc3NJZEhhc2hNYXAmIHJlbmRlclBhc3Nl
c0J5SWQpIE9WRVJSSURFOworCitwcm90ZWN0ZWQ6CisgICAgQ0NEaXJlY3RSZW5kZXJlcihDQ1Jl
bmRlcmVyQ2xpZW50KiBjbGllbnQsIENDUmVzb3VyY2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRl
cikKKyAgICAgICAgOiBDQ1JlbmRlcmVyKGNsaWVudCkKKyAgICAgICAgLCBtX3Jlc291cmNlUHJv
dmlkZXIocmVzb3VyY2VQcm92aWRlcikKKyAgICB7CisgICAgfQorCisgICAgc3RydWN0IERyYXdp
bmdGcmFtZSB7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCogcmVuZGVyUGFz
c2VzQnlJZDsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByb290UmVuZGVyUGFzczsKKyAg
ICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBjdXJyZW50UmVuZGVyUGFzczsKKyAgICAgICAgY29u
c3QgQ0NTY29wZWRUZXh0dXJlKiBjdXJyZW50VGV4dHVyZTsKKworICAgICAgICBGbG9hdFJlY3Qg
cm9vdERhbWFnZVJlY3Q7CisKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwcm9qZWN0aW9uTWF0cml4OworICAgICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHdpbmRvd01hdHJpeDsKKyAgICAgICAgYm9vbCBmbGlwcGVkWTsKKyAgICAgICAgRmxvYXRS
ZWN0IHNjaXNzb3JSZWN0SW5SZW5kZXJQYXNzU3BhY2U7CisKKyAgICAgICAgRHJhd2luZ0ZyYW1l
KCkKKyAgICAgICAgICAgIDogcm9vdFJlbmRlclBhc3MoMCkKKyAgICAgICAgICAgICwgY3VycmVu
dFJlbmRlclBhc3MoMCkKKyAgICAgICAgICAgICwgY3VycmVudFRleHR1cmUoMCkKKyAgICAgICAg
ICAgICwgZmxpcHBlZFkoZmFsc2UpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBjbGFzcyBD
YWNoZWRUZXh0dXJlIDogcHVibGljIENDU2NvcGVkVGV4dHVyZSB7CisgICAgICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENhY2hlZFRleHR1cmUpOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q2FjaGVkVGV4dHVyZT4gY3JlYXRlKENDUmVzb3VyY2VQcm92aWRlciogcmVz
b3VyY2VQcm92aWRlcikgeyByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hlZFRleHR1cmUocmVzb3Vy
Y2VQcm92aWRlcikpOyB9CisgICAgICAgIHZpcnR1YWwgfkNhY2hlZFRleHR1cmUoKSB7IH0KKwor
ICAgICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tcGxldGU7IH0K
KyAgICAgICAgdm9pZCBzZXRJc0NvbXBsZXRlKGJvb2wgaXNDb21wbGV0ZSkgeyBtX2lzQ29tcGxl
dGUgPSBpc0NvbXBsZXRlOyB9CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIGV4cGxpY2l0IENh
Y2hlZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQorICAgICAg
ICAgICAgOiBDQ1Njb3BlZFRleHR1cmUocmVzb3VyY2VQcm92aWRlcikKKyAgICAgICAgICAgICwg
bV9pc0NvbXBsZXRlKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIGJvb2wgbV9pc0NvbXBsZXRlOworICAgIH07CisKKyAgICBzdGF0aWMgRmxvYXRS
ZWN0IHF1YWRWZXJ0ZXhSZWN0KCk7CisgICAgc3RhdGljIHZvaWQgcXVhZFJlY3RUcmFuc2Zvcm0o
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCogcXVhZFJlY3RUcmFuc2Zvcm0sIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UmVjdCYgcXVhZFJlY3QpOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVNYXRyaWNlcyhE
cmF3aW5nRnJhbWUmLCBjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9vbCBmbGlwWSk7CisgICAg
c3RhdGljIEludFJlY3QgbW92ZVNjaXNzb3JUb1dpbmRvd1NwYWNlKGNvbnN0IERyYXdpbmdGcmFt
ZSYsIEZsb2F0UmVjdCBzY2lzc29yUmVjdCk7CisKKyAgICBib29sIGhhdmVDYWNoZWRSZXNvdXJj
ZXMoaW50IHJlbmRlclBhc3NJZCkgY29uc3Q7CisgICAgc3RhdGljIEludFNpemUgcmVuZGVyUGFz
c1RleHR1cmVTaXplKGNvbnN0IENDUmVuZGVyUGFzcyopOworICAgIHN0YXRpYyBHQzNEZW51bSBy
ZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKTsKKworICAgIHZvaWQg
ZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzKik7CisgICAg
Ym9vbCB1c2VSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVuZGVyUGFzcyopOwor
CisgICAgdmlydHVhbCB2b2lkIGJpbmRGcmFtZWJ1ZmZlclRvT3V0cHV0U3VyZmFjZShEcmF3aW5n
RnJhbWUmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShE
cmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBmcmFt
ZWJ1ZmZlclJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd1ZpZXdwb3J0U2l6ZShj
b25zdCBJbnRTaXplJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBlbmFibGVTY2lzc29yVGVzdFJl
Y3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
YWJsZVNjaXNzb3JUZXN0KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lYnVmZmVy
KERyYXdpbmdGcmFtZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1F1YWQoRHJhd2luZ0Zy
YW1lJiwgY29uc3QgQ0NEcmF3UXVhZCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5EcmF3
aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hEcmF3
aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJikgPSAwOworCisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxD
YWNoZWRUZXh0dXJlPiA+IG1fcmVuZGVyUGFzc1RleHR1cmVzOworICAgIENDUmVzb3VyY2VQcm92
aWRlciogbV9yZXNvdXJjZVByb3ZpZGVyOworfTsKKworfQorCisjZW5kaWYgLy8gQ0NEaXJlY3RS
ZW5kZXJlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159473</attachid>
            <date>2012-08-20 10:53:12 -0700</date>
            <delta_ts>2012-08-20 12:16:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93927-20120820105233.patch</filename>
            <type>text/plain</type>
            <size>56693</size>
            <attacher name="Alexandre Elias">aelias</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzFkN2UzNTU1YTNjNjY2
MjhkNmM4ZWQ1N2MxYjMzNTc2YTU0NjIwZC4uZWRlMTM3NDkzMDlhNjBmODk2NDdmODBlMDEwZTcz
NzAxODg4ZWEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgyIEBACisyMDEyLTA4LTEzICBBbGV4
YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIE1v
dmUgbm9uLUdMLXNwZWNpZmljIGNvZGUgb3V0IG9mIExheWVyUmVuZGVyZXJDaHJvbWl1bQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM5MjcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1v
dmVzIG1vc3Qgb2YgdGhlIGdlbmVyaWMgbG9naWMgZGVhbGluZyB3aXRoIG1hdHJpY2VzIGFuZAor
ICAgICAgICByZW5kZXIgcGFzc2VzIGludG8gYSBuZXcgY2xhc3MgIkNDRGlyZWN0UmVuZGVyZXIi
IHRoYXQgc2l0cyBiZXR3ZWVuCisgICAgICAgIENDUmVuZGVyZXIgYW5kIExheWVyUmVuZGVyZXJD
aHJvbWl1bSwgYW5kIGFsc28gcHVibGljbHkgZXhwb3NlcyBhCisgICAgICAgIGZldyBvdGhlciB0
aGluZ3MgbGlrZSB0aGUgVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIuCisKKyAgICAgICAgVGhl
IHBsYW4gaXMgZm9yIHRoZSBmdXR1cmUgc29mdHdhcmUgY29tcG9zaXRpbmcgaW1wbGVtZW50YXRp
b24gdG8gYWxzbworICAgICAgICBkZXJpdmUgZnJvbSBDQ0RpcmVjdFJlbmRlcmVyLCB3aGVyZWFz
IHRoZSB1YmVyY29tcG9zaXRvciBkZWxlZ2F0aW5nCisgICAgICAgIHJlbmRlcmVyIHdpbGwgc3Rp
bGwgZGVyaXZlIGZyb20gQ0NSZW5kZXJlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgKG5vLW9w
IHJlZmFjdG9yaW5nKS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R2VvbWV0cnlCaW5kaW5nOjpHZW9tZXRyeUJpbmRpbmcpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5oOgorICAgICAgICAoR2VvbWV0
cnlCaW5kaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWRHZW9tZXRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmJpbmRGcmFtZWJ1ZmZlclRvT3V0cHV0U3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZW5hYmxlU2Npc3NvclRlc3RSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGlzYWJsZVNjaXNzb3JUZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0RHJhd1ZpZXdwb3J0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Om1ha2VDb250ZXh0
Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRp
YWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKExheWVyUmVuZGVyZXJDaHJvbWl1
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5o
OgorICAgICAgICAoVGV4dHVyZUNvcGllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGV4dHVyZVVwbG9hZGVyLmg6CisgICAgICAgIChVbnRocm90dGxlZFRleHR1cmVV
cGxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyOjp+
VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6VW50aHJvdHRs
ZWRUZXh0dXJlVXBsb2FkZXI6OlVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGly
ZWN0UmVuZGVyZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHByb2plY3Rpb25NYXRyaXgpOgorICAg
ICAgICAoY2FudmFzTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NEaXJlY3RSZW5kZXJlcjo6RHJhd2luZ0ZyYW1lOjppbml0aWFsaXplTWF0cmljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6RHJhd2luZ0ZyYW1lOjppbml0aWFs
aXplU2Npc3NvcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRl
UmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJl
Y3RSZW5kZXJlcjo6ZHJhd0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVy
ZXI6OmRyYXdSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6
OnVzZVJlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6aGF2
ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Rp
cmVjdFJlbmRlcmVyOjpyZW5kZXJQYXNzVGV4dHVyZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NEaXJlY3RSZW5kZXJlcjo6cmVuZGVyUGFzc1RleHR1cmVGb3JtYXQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENDRGlyZWN0UmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6fkNDRGlyZWN0UmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NEaXJlY3RSZW5kZXJlcjo6cmVzb3VyY2VQcm92aWRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDQ0RpcmVjdFJlbmRlcmVyKToKKyAgICAgICAgKERy
YXdpbmdGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpEcmF3aW5n
RnJhbWU6OkRyYXdpbmdGcmFtZSk6CisgICAgICAgIChDYWNoZWRUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OkNhY2hlZFRleHR1cmU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDYWNoZWRUZXh0dXJlOjp+Q2FjaGVkVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0RpcmVjdFJlbmRlcmVyOjpDYWNoZWRUZXh0dXJl
Ojppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDRGlyZWN0UmVuZGVyZXI6OkNhY2hl
ZFRleHR1cmU6OnNldElzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NEaXJlY3RSZW5k
ZXJlcjo6Q2FjaGVkVGV4dHVyZTo6Q2FjaGVkVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0RpcmVjdFJlbmRlcmVyOjpxdWFkVmVydGV4UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0Rp
cmVjdFJlbmRlcmVyOjpxdWFkUmVjdFRyYW5zZm9ybSk6CisKIDIwMTItMDgtMjAgIENocmlzdG9w
aGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBwb3N0TWVz
c2FnZSgpIGluIE1lc3NhZ2VQb3J0LmlkbCBkb2VzIG5vdCBtYXRjaCBzcGVjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggNWIyNjkyODc0YjQxZTAwOTkzODRiMWYwNjEzNjUwMTc3NmM4NjFlMS4uOTZjNjc2
ZDQ0NjNkOTdiMzVmZjQ0ZTI3MWYxMDJmZGRkYjMxMjkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAt
ODM1NCw2ICs4MzU0LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIuaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
QWN0aXZlQW5pbWF0aW9uLmNwcCcsCkBAIC04Mzc0LDYgKzgzNzUsOCBAQAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGVidWdSZWN0SGlzdG9yeS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RlbGF5QmFzZWRUaW1l
U291cmNlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NEZWxheUJhc2VkVGltZVNvdXJjZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NEcmF3UXVhZC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0ZvbnRBdGxhcy5jcHAnLApA
QCAtODQzMCw2ICs4NDMzLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1F1YWRTaW5rLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R2VvbWV0cnlCaW5kaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dlb21ldHJ5QmluZGluZy5jcHAKaW5kZXggMWE0NTY4YmIwN2ViNjQ4ZWI2NTc4MTc0
ZjgxZGU1ZjVkOTFhYzE3ZC4uNjdhYjQ2MjRmMTBhZjUyOTM4M2Y3MDdjMzM5NDEwNmJmZmU0NDVl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R2VvbWV0cnlCaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuY3BwCkBAIC0zNSwxNyArMzUsMTcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1HZW9tZXRyeUJpbmRpbmc6Okdlb21ldHJ5QmluZGluZyhXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorR2VvbWV0cnlCaW5kaW5nOjpHZW9t
ZXRyeUJpbmRpbmcoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBxdWFkVmVydGV4UmVjdCkKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAg
ICwgbV9xdWFkVmVydGljZXNWYm8oMCkKICAgICAsIG1fcXVhZEVsZW1lbnRzVmJvKDApCiAgICAg
LCBtX2luaXRpYWxpemVkKGZhbHNlKQogewogICAgIC8vIFZlcnRleCBwb3NpdGlvbnMgYW5kIHRl
eHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRoZSA0IGNvcm5lcnMgb2YgYSAxeDEgcXVhZC4KLSAgICBm
bG9hdCB2ZXJ0aWNlc1tdID0geyAtMC41ZiwgIDAuNWYsIDAuMGYsIDAuMGYsICAxLjBmLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIC0wLjVmLCAtMC41ZiwgMC4wZiwgMC4wZiwgIDAuMGYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgMC41ZiwgLTAuNWYsIDAuMGYsIDEuMGYsICAwLjBmLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIDAuNWYsICAwLjVmLCAwLjBmLCAxLjBmLCAgMS4wZiB9
OworICAgIGZsb2F0IHZlcnRpY2VzW10gPSB7IHF1YWRWZXJ0ZXhSZWN0LngoKSwgcXVhZFZlcnRl
eFJlY3QubWF4WSgpLCAwLjBmLCAwLjBmLCAgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBxdWFkVmVydGV4UmVjdC54KCksIHF1YWRWZXJ0ZXhSZWN0LnkoKSwgMC4wZiwgMC4wZiwgIDAu
MGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZFZlcnRleFJlY3QubWF4WCgpLCBxdWFk
VmVydGV4UmVjdC55KCksIDAuMGYsIDEuMGYsICAwLjBmLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIHF1YWRWZXJ0ZXhSZWN0Lm1heFgoKSwgIHF1YWRWZXJ0ZXhSZWN0Lm1heFkoKSwgMC4wZiwg
MS4wZiwgIDEuMGYgfTsKICAgICB1aW50MTZfdCBpbmRpY2VzW10gPSB7IDAsIDEsIDIsIDAsIDIs
IDMsIC8vIFRoZSB0d28gdHJpYW5nbGVzIHRoYXQgbWFrZSB1cCB0aGUgbGF5ZXIgcXVhZC4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDIsIDN9OyAvLyBBIGxpbmUgcGF0aCBmb3Ig
ZHJhd2luZyB0aGUgbGF5ZXIgYm9yZGVyLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HZW9tZXRyeUJpbmRpbmcuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5oCmluZGV4IDIw
YjJkNWEwMDViOGU5NGNjMWJlOWM3N2VjNzI0MmI2ZGFjZDMzODIuLjBhZjE0NmM5NDYyMjZkYmM5
NzdmNTVjNTVmOTA1ZTQ3ZTZhYmNhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dlb21ldHJ5QmluZGluZy5oCkBAIC0yNiw2
ICsyNiw4IEBACiAjaWZuZGVmIEdlb21ldHJ5QmluZGluZ19oCiAjZGVmaW5lIEdlb21ldHJ5Qmlu
ZGluZ19oCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0zNiw3ICszOCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR2VvbWV0cnlCaW5kaW5nIHsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBHZW9tZXRyeUJpbmRpbmcoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCopOwor
ICAgIEdlb21ldHJ5QmluZGluZyhXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3Qg
RmxvYXRSZWN0JiBxdWFkVmVydGV4UmVjdCk7CiAgICAgfkdlb21ldHJ5QmluZGluZygpOwogCiAg
ICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbGl6ZWQ7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGI5MzI4MDBmNjc2YjQ0MDA4
OGQwNTdlZjQwMDk3ZWMwZGVlYTFhZmEuLjM2ZTQ3ZDE3N2Q0YWZiM2IwMTczMWM5MGQ0YzgwZmMz
M2QwNWRkZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTQs
NiArNTQsNyBAQAogI2luY2x1ZGUgIlNrQ29sb3IuaCIKICNpbmNsdWRlICJUaHJvdHRsZWRUZXh0
dXJlVXBsb2FkZXIuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiVW50aHJv
dHRsZWRUZXh0dXJlVXBsb2FkZXIuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViR3JhcGhpY3NDb250
ZXh0M0QuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaD4K
ICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZS5oPgpAQCAtNzEsNDAgKzcyLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgewogCi1zdGF0aWMgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggb3J0aG9NYXRyaXgoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRv
bSwgZmxvYXQgdG9wKQotewotICAgIGZsb2F0IGRlbHRhWCA9IHJpZ2h0IC0gbGVmdDsKLSAgICBm
bG9hdCBkZWx0YVkgPSB0b3AgLSBib3R0b207Ci0gICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
b3J0aG87Ci0gICAgaWYgKCFkZWx0YVggfHwgIWRlbHRhWSkKLSAgICAgICAgcmV0dXJuIG9ydGhv
OwotICAgIG9ydGhvLnNldE0xMSgyLjBmIC8gZGVsdGFYKTsKLSAgICBvcnRoby5zZXRNNDEoLShy
aWdodCArIGxlZnQpIC8gZGVsdGFYKTsKLSAgICBvcnRoby5zZXRNMjIoMi4wZiAvIGRlbHRhWSk7
Ci0gICAgb3J0aG8uc2V0TTQyKC0odG9wICsgYm90dG9tKSAvIGRlbHRhWSk7Ci0KLSAgICAvLyBa
IGNvbXBvbmVudCBvZiB2ZXJ0aWNlcyBpcyBhbHdheXMgc2V0IHRvIHplcm8gYXMgd2UgZG9uJ3Qg
dXNlIHRoZSBkZXB0aCBidWZmZXIKLSAgICAvLyB3aGlsZSBkcmF3aW5nLgotICAgIG9ydGhvLnNl
dE0zMygwKTsKLQotICAgIHJldHVybiBvcnRobzsKLX0KLQotc3RhdGljIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IHNjcmVlbk1hdHJpeChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo
dCkKLXsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW47Ci0KLSAgICAvLyBNYXAg
dG8gdmlld3BvcnQuCi0gICAgc2NyZWVuLnRyYW5zbGF0ZTNkKHgsIHksIDApOwotICAgIHNjcmVl
bi5zY2FsZTNkKHdpZHRoLCBoZWlnaHQsIDApOwotCi0gICAgLy8gTWFwIHgsIHkgYW5kIHogdG8g
dW5pdCBzcXVhcmUuCi0gICAgc2NyZWVuLnRyYW5zbGF0ZTNkKDAuNSwgMC41LCAwLjUpOwotICAg
IHNjcmVlbi5zY2FsZTNkKDAuNSwgMC41LCAwLjUpOwotCi0gICAgcmV0dXJuIHNjcmVlbjsKLX0K
LQogYm9vbCBuZWVkc0lPU3VyZmFjZVJlYWRiYWNrV29ya2Fyb3VuZCgpCiB7CiAjaWYgT1MoREFS
V0lOKQpAQCAtMTE0LDQ2ICs4MSw4IEBAIGJvb2wgbmVlZHNJT1N1cmZhY2VSZWFkYmFja1dvcmth
cm91bmQoKQogI2VuZGlmCiB9CiAKLWNsYXNzIFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyIDog
cHVibGljIFRleHR1cmVVcGxvYWRlciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVW50aHJv
dHRsZWRUZXh0dXJlVXBsb2FkZXIpOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFVu
dGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyPiBjcmVhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcigpKTsKLSAgICB9Ci0gICAg
dmlydHVhbCB+VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIoKSB7IH0KLQotICAgIHZpcnR1YWwg
Ym9vbCBpc0J1c3koKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBiZWdpblVwbG9hZHMoKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZW5kVXBsb2Fk
cygpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGxvYWRUZXh0dXJlKENDUmVzb3Vy
Y2VQcm92aWRlciogcmVzb3VyY2VQcm92aWRlciwgUGFyYW1ldGVycyB1cGxvYWQpIE9WRVJSSURF
IHsgdXBsb2FkLnRleHR1cmUtPnVwZGF0ZVJlY3QocmVzb3VyY2VQcm92aWRlciwgdXBsb2FkLnNv
dXJjZVJlY3QsIHVwbG9hZC5kZXN0T2Zmc2V0KTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgVW50aHJv
dHRsZWRUZXh0dXJlVXBsb2FkZXIoKSB7IH0KLX07Ci0KIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQogCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW06OkNhY2hlZFRleHR1cmUgOiBwdWJsaWMg
Q0NTY29wZWRUZXh0dXJlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWNoZWRUZXh0dXJl
KTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDYWNoZWRUZXh0dXJlPiBjcmVhdGUo
Q0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKSB7IHJldHVybiBhZG9wdFB0cihu
ZXcgQ2FjaGVkVGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKSk7IH0KLSAgICB2aXJ0dWFsIH5DYWNo
ZWRUZXh0dXJlKCkgeyB9Ci0KLSAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBt
X2lzQ29tcGxldGU7IH0KLSAgICB2b2lkIHNldElzQ29tcGxldGUoYm9vbCBpc0NvbXBsZXRlKSB7
IG1faXNDb21wbGV0ZSA9IGlzQ29tcGxldGU7IH0KLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0
IENhY2hlZFRleHR1cmUoQ0NSZXNvdXJjZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyKQotICAg
ICAgICA6IENDU2NvcGVkVGV4dHVyZShyZXNvdXJjZVByb3ZpZGVyKQotICAgICAgICAsIG1faXND
b21wbGV0ZShmYWxzZSkKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0Nv
bXBsZXRlOwotfTsKLQogUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDUmVuZGVyZXJDbGllbnQqIGNsaWVudCwgQ0NSZXNvdXJj
ZVByb3ZpZGVyKiByZXNvdXJjZVByb3ZpZGVyLCBUZXh0dXJlVXBsb2FkZXJPcHRpb24gdGV4dHVy
ZVVwbG9hZGVyU2V0dGluZykKIHsKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBs
YXllclJlbmRlcmVyKGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY2xpZW50LCBy
ZXNvdXJjZVByb3ZpZGVyLCB0ZXh0dXJlVXBsb2FkZXJTZXR0aW5nKSkpOwpAQCAtMTY2LDEwICs5
NSw5IEBAIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZShDQ1JlbmRlcmVyQ2xpZW50CiBMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bShDQ1JlbmRlcmVyQ2xpZW50KiBjbGllbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIHJl
c291cmNlUHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUZXh0dXJlVXBsb2FkZXJPcHRpb24gdGV4dHVyZVVwbG9hZGVyU2V0dGluZykKLSAgICA6
IENDUmVuZGVyZXIoY2xpZW50KQorICAgIDogQ0NEaXJlY3RSZW5kZXJlcihjbGllbnQsIHJlc291
cmNlUHJvdmlkZXIpCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKICAgICAsIG1f
c2hhcmVkR2VvbWV0cnlRdWFkKEZsb2F0UmVjdCgtMC41ZiwgLTAuNWYsIDEuMGYsIDEuMGYpKQot
ICAgICwgbV9yZXNvdXJjZVByb3ZpZGVyKHJlc291cmNlUHJvdmlkZXIpCiAgICAgLCBtX2NvbnRl
eHQocmVzb3VyY2VQcm92aWRlci0+Z3JhcGhpY3NDb250ZXh0M0QoKSkKICAgICAsIG1faXNWaWV3
cG9ydENoYW5nZWQoZmFsc2UpCiAgICAgLCBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQoZmFsc2Up
CkBAIC0yOTksODMgKzIyNyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhckZy
YW1lYnVmZmVyKERyYXdpbmdGcmFtZSYgZnJhbWUpCiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwogfQogCi0vLyBzdGF0aWMKLUlu
dFNpemUgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJQYXNzVGV4dHVyZVNpemUoY29uc3Qg
Q0NSZW5kZXJQYXNzKiBwYXNzKQotewotICAgIHJldHVybiBwYXNzLT5vdXRwdXRSZWN0KCkuc2l6
ZSgpOwotfQotCi0vLyBzdGF0aWMKLUdDM0RlbnVtIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVu
ZGVyUGFzc1RleHR1cmVGb3JtYXQoY29uc3QgQ0NSZW5kZXJQYXNzKikKLXsKLSAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NM
aXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikKLXsKLSAgICBIYXNoTWFwPGludCwgY29uc3Qg
Q0NSZW5kZXJQYXNzKj4gcmVuZGVyUGFzc2VzSW5GcmFtZTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUoKTsgKytpKQotICAgICAgICByZW5k
ZXJQYXNzZXNJbkZyYW1lLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgcmVu
ZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0pOwotCi0gICAgVmVjdG9yPGludD4gcGFzc2VzVG9EZWxl
dGU7Ci0gICAgSGFzaE1hcDxpbnQsIE93blB0cjxDYWNoZWRUZXh0dXJlPiA+Ojpjb25zdF9pdGVy
YXRvciBwYXNzSXRlcmF0b3I7Ci0gICAgZm9yIChwYXNzSXRlcmF0b3IgPSBtX3JlbmRlclBhc3NU
ZXh0dXJlcy5iZWdpbigpOyBwYXNzSXRlcmF0b3IgIT0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZW5k
KCk7ICsrcGFzc0l0ZXJhdG9yKSB7Ci0gICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVy
UGFzc0luRnJhbWUgPSByZW5kZXJQYXNzZXNJbkZyYW1lLmdldChwYXNzSXRlcmF0b3ItPmZpcnN0
KTsKLSAgICAgICAgaWYgKCFyZW5kZXJQYXNzSW5GcmFtZSkgewotICAgICAgICAgICAgcGFzc2Vz
VG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBJbnRTaXplJiByZXF1aXJlZFNpemUgPSBy
ZW5kZXJQYXNzVGV4dHVyZVNpemUocmVuZGVyUGFzc0luRnJhbWUpOwotICAgICAgICBHQzNEZW51
bSByZXF1aXJlZEZvcm1hdCA9IHJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KHJlbmRlclBhc3NJbkZy
YW1lKTsKLSAgICAgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IHBhc3NJdGVyYXRvci0+c2Vj
b25kLmdldCgpOwotICAgICAgICBBU1NFUlQodGV4dHVyZSk7Ci0KLSAgICAgICAgaWYgKHRleHR1
cmUtPmlkKCkgJiYgKHRleHR1cmUtPnNpemUoKSAhPSByZXF1aXJlZFNpemUgfHwgdGV4dHVyZS0+
Zm9ybWF0KCkgIT0gcmVxdWlyZWRGb3JtYXQpKQotICAgICAgICAgICAgdGV4dHVyZS0+ZnJlZSgp
OwotICAgIH0KLQotICAgIC8vIERlbGV0ZSBSZW5kZXJQYXNzIHRleHR1cmVzIGZyb20gdGhlIHBy
ZXZpb3VzIGZyYW1lIHRoYXQgd2lsbCBub3QgYmUgdXNlZCBhZ2Fpbi4KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBhc3Nlc1RvRGVsZXRlLnNpemUoKTsgKytpKQotICAgICAgICBtX3JlbmRl
clBhc3NUZXh0dXJlcy5yZW1vdmUocGFzc2VzVG9EZWxldGVbaV0pOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkgewotICAg
ICAgICBpZiAoIW1fcmVuZGVyUGFzc1RleHR1cmVzLmNvbnRhaW5zKHJlbmRlclBhc3Nlc0luRHJh
d09yZGVyW2ldLT5pZCgpKSkgewotICAgICAgICAgICAgT3duUHRyPENhY2hlZFRleHR1cmU+IHRl
eHR1cmUgPSBDYWNoZWRUZXh0dXJlOjpjcmVhdGUobV9yZXNvdXJjZVByb3ZpZGVyKTsKLSAgICAg
ICAgICAgIG1fcmVuZGVyUGFzc1RleHR1cmVzLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltp
XS0+aWQoKSwgdGV4dHVyZS5yZWxlYXNlKCkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJ
ZChpbnQgaWQpIGNvbnN0Ci17Ci0gICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVy
UGFzc1RleHR1cmVzLmdldChpZCk7Ci0gICAgcmV0dXJuIHRleHR1cmUgJiYgdGV4dHVyZS0+aWQo
KSAmJiB0ZXh0dXJlLT5pc0NvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3
T3JkZXIsIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCYgcmVuZGVyUGFzc2VzQnlJZCkKLXsK
LSAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzID0gcmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXIubGFzdCgpOwotICAgIEFTU0VSVChyb290UmVuZGVyUGFzcyk7Ci0KLSAgICBEcmF3
aW5nRnJhbWUgZnJhbWU7Ci0gICAgZnJhbWUucmVuZGVyUGFzc2VzQnlJZCA9ICZyZW5kZXJQYXNz
ZXNCeUlkOwotICAgIGZyYW1lLnJvb3RSZW5kZXJQYXNzID0gcm9vdFJlbmRlclBhc3M7Ci0KLSAg
ICBmcmFtZS5yb290RGFtYWdlUmVjdCA9IG1fY2FwYWJpbGl0aWVzLnVzaW5nUGFydGlhbFN3YXAg
PyBmcmFtZS5yb290UmVuZGVyUGFzcy0+ZGFtYWdlUmVjdCgpIDogZnJhbWUucm9vdFJlbmRlclBh
c3MtPm91dHB1dFJlY3QoKTsKLSAgICBmcmFtZS5yb290RGFtYWdlUmVjdC5pbnRlcnNlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCB2aWV3cG9ydFNpemUoKSkpOwotCi0gICAgYmVnaW5EcmF3
aW5nRnJhbWUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXIuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRyYXdSZW5kZXJQYXNzKGZyYW1lLCByZW5k
ZXJQYXNzZXNJbkRyYXdPcmRlcltpXSk7Ci0KLSAgICBmaW5pc2hEcmF3aW5nRnJhbWUoKTsKLQot
ICAgIG1fc3dhcEJ1ZmZlclJlY3QudW5pdGUoZW5jbG9zaW5nSW50UmVjdChmcmFtZS5yb290RGFt
YWdlUmVjdCkpOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5n
RnJhbWUoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJlZ2luRHJhd2luZ0ZyYW1lKERy
YXdpbmdGcmFtZSYgZnJhbWUpCiB7CiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgZnJh
bWVidWZmZXIgaXMgYXV0b21hdGljYWxseSByZWNyZWF0ZWQgb24gZmlyc3QgdXNlCiAgICAgZW5z
dXJlRnJhbWVidWZmZXIoKTsKQEAgLTQwOSwzOSArMjYxLDggQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRvTm9PcCgpCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgp
KTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzKERyYXdp
bmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKLXsKLSAgICBp
ZiAoIXVzZVJlbmRlclBhc3MoZnJhbWUsIHJlbmRlclBhc3MpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBGbG9hdFJlY3Qgc2Npc3NvclJlY3QgPSByZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7Ci0g
ICAgaWYgKGZyYW1lLnJvb3REYW1hZ2VSZWN0ICE9IGZyYW1lLnJvb3RSZW5kZXJQYXNzLT5vdXRw
dXRSZWN0KCkpIHsKLSAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW52ZXJzZVRyYW5z
Zm9ybVRvUm9vdCA9IHJlbmRlclBhc3MtPnRyYW5zZm9ybVRvUm9vdFRhcmdldCgpLmludmVyc2Uo
KTsKLSAgICAgICAgc2Npc3NvclJlY3QuaW50ZXJzZWN0KENDTWF0aFV0aWw6OnByb2plY3RDbGlw
cGVkUmVjdChpbnZlcnNlVHJhbnNmb3JtVG9Sb290LCBmcmFtZS5yb290RGFtYWdlUmVjdCkpOwot
ICAgIH0KLQotICAgIHNldFNjaXNzb3JUb1JlY3QoZnJhbWUsIGVuY2xvc2luZ0ludFJlY3Qoc2Np
c3NvclJlY3QpKTsKLSAgICBjbGVhckZyYW1lYnVmZmVyKGZyYW1lKTsKLQotICAgIGNvbnN0IEND
UXVhZExpc3QmIHF1YWRMaXN0ID0gcmVuZGVyUGFzcy0+cXVhZExpc3QoKTsKLSAgICBmb3IgKEND
UXVhZExpc3Q6OmNvbnN0QmFja1RvRnJvbnRJdGVyYXRvciBpdCA9IHF1YWRMaXN0LmJhY2tUb0Zy
b250QmVnaW4oKTsgaXQgIT0gcXVhZExpc3QuYmFja1RvRnJvbnRFbmQoKTsgKytpdCkKLSAgICAg
ICAgZHJhd1F1YWQoZnJhbWUsIGl0LT5nZXQoKSwgc2Npc3NvclJlY3QpOwotCi0gICAgQ2FjaGVk
VGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNzLT5p
ZCgpKTsKLSAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgdGV4dHVyZS0+c2V0SXNDb21wbGV0ZSgh
cmVuZGVyUGFzcy0+aGFzT2NjbHVzaW9uRnJvbU91dHNpZGVUYXJnZXRTdXJmYWNlKCkpOwotfQot
Ci12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFt
ZSwgY29uc3QgQ0NEcmF3UXVhZCogcXVhZCwgRmxvYXRSZWN0IHNjaXNzb3JSZWN0KQordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0
IENDRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgc2Npc3NvclJlY3QuaW50ZXJzZWN0KHF1YWQtPmNs
aXBwZWRSZWN0SW5UYXJnZXQoKSk7Ci0gICAgaWYgKHNjaXNzb3JSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gRm9yIG5vdywgd2UgYWx3YXlzIGRvIHBlci1xdWFkIHNj
aXNzb3JpbmcgYmVjYXVzZSBzb21lIHF1YWQgdHlwZXMgZHJhdyB0aGVpcgotICAgIC8vIHVuLWNs
aXBwZWQgYm91bmRzLCByZWx5aW5nIG9uIHNjaXNzb3JpbmcgZm9yIGNvcnJlY3QgY2xpcHBpbmcu
Ci0gICAgc2V0U2Npc3NvclRvUmVjdChmcmFtZSwgZW5jbG9zaW5nSW50UmVjdChzY2lzc29yUmVj
dCkpOwotCiAgICAgaWYgKHF1YWQtPm5lZWRzQmxlbmRpbmcoKSkKICAgICAgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKSk7CiAgICAg
ZWxzZQpAQCAtNDgxLDcgKzMwMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
UXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0RyYXdRdWFkKiBxdWFkCiAgICAgfQog
fQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoRHJh
d2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCogcXVhZCkKK3Zv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q2hlY2tlcmJvYXJkUXVhZChjb25zdCBEcmF3
aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ0NoZWNrZXJib2FyZERyYXdRdWFkKiBxdWFkKQogewog
ICAgIGNvbnN0IFRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKiBwcm9ncmFtID0gdGlsZUNoZWNrZXJi
b2FyZFByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXpl
ZCgpKTsKQEAgLTUwMyw3ICszMjQsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0NoZWNrZXJib2FyZFF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NDaAogICAgIGRy
YXdRdWFkR2VvbWV0cnkoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zvcm0oKSwgcXVhZC0+cXVhZFJl
Y3QoKSwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4TG9jYXRpb24oKSk7CiB9CiAKLXZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKERyYXdpbmdGcmFt
ZSYgZnJhbWUsIGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYg
ZnJhbWUsIGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCogcXVhZCkKIHsKICAgICBzdGF0aWMg
ZmxvYXQgZ2xNYXRyaXhbMTZdOwogICAgIGNvbnN0IFNvbGlkQ29sb3JQcm9ncmFtKiBwcm9ncmFt
ID0gc29saWRDb2xvclByb2dyYW0oKTsKQEAgLTc2MCw3ICs1ODEsNyBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNv
bnN0IENDUmVuZAogICAgIGRyYXdRdWFkR2VvbWV0cnkoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zv
cm0oKSwgcXVhZC0+cXVhZFJlY3QoKSwgc2hhZGVyTWF0cml4TG9jYXRpb24pOwogfQogCi12b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JRdWFkKERyYXdpbmdGcmFtZSYg
ZnJhbWUsIGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmIGZyYW1l
LCBjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCogcXVhZCkKIHsKICAgICBjb25zdCBTb2xpZENv
bG9yUHJvZ3JhbSogcHJvZ3JhbSA9IHNvbGlkQ29sb3JQcm9ncmFtKCk7CiAgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwpAQCAtNzk5
LDcgKzYyMCw3IEBAIHN0YXRpYyB2b2lkIHRpbGVVbmlmb3JtTG9jYXRpb24oVCBwcm9ncmFtLCBU
aWxlUHJvZ3JhbVVuaWZvcm1zJiB1bmlmb3JtcykKICAgICB1bmlmb3Jtcy5lZGdlTG9jYXRpb24g
PSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpOwogfQogCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNv
bnN0IENDVGlsZURyYXdRdWFkKiBxdWFkKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdUaWxlUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1RpbGVEcmF3UXVh
ZCogcXVhZCkKIHsKICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcXVhZC0+cXVhZFZpc2libGVSZWN0
KCk7CiAKQEAgLTk2Niw3ICs3ODcsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1RpbGVRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDVGlsZURyYXdRdQogICAgIGRy
YXdRdWFkR2VvbWV0cnkoZnJhbWUsIHF1YWQtPnF1YWRUcmFuc2Zvcm0oKSwgY2VudGVyZWRSZWN0
LCB1bmlmb3Jtcy5tYXRyaXhMb2NhdGlvbik7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3WVVWVmlkZW9RdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDWVVWVmlk
ZW9EcmF3UXVhZCogcXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWVmlk
ZW9RdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDWVVWVmlkZW9EcmF3UXVh
ZCogcXVhZCkKIHsKICAgICBjb25zdCBWaWRlb1lVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRlb1lV
VlByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgp
KTsKQEAgLTEwMjYsNyArODQ3LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdZ
VVZWaWRlb1F1YWQoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NZVVZWaWQKICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUwKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U3RyZWFtVmlk
ZW9RdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDU3RyZWFtVmlkZW9EcmF3UXVhZCog
cXVhZCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U3RyZWFtVmlkZW9RdWFkKGNv
bnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDU3RyZWFtVmlkZW9EcmF3UXVhZCogcXVh
ZCkKIHsKICAgICBzdGF0aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOwogCkBAIC0xMDcxLDcgKzg5Miw3
IEBAIHN0cnVjdCBUZXhUcmFuc2Zvcm1UZXh0dXJlUHJvZ3JhbUJpbmRpbmcgOiBUZXh0dXJlUHJv
Z3JhbUJpbmRpbmcgewogICAgIGludCB0ZXhUcmFuc2Zvcm1Mb2NhdGlvbjsKIH07CiAKLXZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZVF1YWQoRHJhd2luZ0ZyYW1lJiBmcmFt
ZSwgY29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQqIHF1YWQpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd1RleHR1cmVRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IEND
VGV4dHVyZURyYXdRdWFkKiBxdWFkKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CiAKQEAgLTExMTUsNyArOTM2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmRyYXdUZXh0dXJlUXVhZChEcmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1RleHR1cmUKICAg
ICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpKTsKIH0KIAot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdJT1N1cmZhY2VRdWFkKERyYXdpbmdGcmFt
ZSYgZnJhbWUsIGNvbnN0IENDSU9TdXJmYWNlRHJhd1F1YWQqIHF1YWQpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0lPU3VyZmFjZVF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiBmcmFt
ZSwgY29uc3QgQ0NJT1N1cmZhY2VEcmF3UXVhZCogcXVhZCkKIHsKICAgICBBU1NFUlQoQ0NQcm94
eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIFRleFRyYW5zZm9ybVRleHR1cmVQcm9ncmFtQmluZGlu
ZyBiaW5kaW5nOwpAQCAtMTEzNyw4ICs5NTgsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdJT1N1cmZhY2VRdWFkKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDSU9TdXIK
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPmJpbmRUZXh0dXJlKEV4dGVuc2lvbnMzRDo6
VEVYVFVSRV9SRUNUQU5HTEVfQVJCLCAwKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZp
bmlzaERyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUmIGZyYW1lKQogeworICAgIG1fY3VycmVudEZy
YW1lYnVmZmVyTG9jay5jbGVhcigpOworICAgIG1fc3dhcEJ1ZmZlclJlY3QudW5pdGUoZW5jbG9z
aW5nSW50UmVjdChmcmFtZS5yb290RGFtYWdlUmVjdCkpOworCiAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKSk7CiB9CkBAIC0xMTg2LDIwICsxMDEwLDE4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpzZXRTaGFkZXJPcGFjaXR5KGZsb2F0IG9wYWNpdHksIGludCBhbHBoYUxvY2F0aW9uKQog
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVuaWZvcm0xZihhbHBoYUxvY2F0aW9u
LCBvcGFjaXR5KSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZEdl
b21ldHJ5KERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFJlY3QsIGludCBt
YXRyaXhMb2NhdGlvbikKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZEdlb21l
dHJ5KGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFJlY3QsIGlu
dCBtYXRyaXhMb2NhdGlvbikKIHsKLSAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkTWF0
cml4ID0gZHJhd1RyYW5zZm9ybTsKLSAgICBxdWFkTWF0cml4LnRyYW5zbGF0ZSgwLjUgKiBxdWFk
UmVjdC53aWR0aCgpICsgcXVhZFJlY3QueCgpLCAwLjUgKiBxdWFkUmVjdC5oZWlnaHQoKSArIHF1
YWRSZWN0LnkoKSk7Ci0gICAgcXVhZE1hdHJpeC5zY2FsZU5vblVuaWZvcm0ocXVhZFJlY3Qud2lk
dGgoKSwgcXVhZFJlY3QuaGVpZ2h0KCkpOwotCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
cXVhZFJlY3RNYXRyaXg7CisgICAgcXVhZFJlY3RUcmFuc2Zvcm0oJnF1YWRSZWN0TWF0cml4LCBk
cmF3VHJhbnNmb3JtLCBxdWFkUmVjdCk7CiAgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsK
LSAgICB0b0dMTWF0cml4KCZnbE1hdHJpeFswXSwgZnJhbWUucHJvamVjdGlvbk1hdHJpeCAqIHF1
YWRNYXRyaXgpOworICAgIHRvR0xNYXRyaXgoJmdsTWF0cml4WzBdLCBmcmFtZS5wcm9qZWN0aW9u
TWF0cml4ICogcXVhZFJlY3RNYXRyaXgpOwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
dW5pZm9ybU1hdHJpeDRmdihtYXRyaXhMb2NhdGlvbiwgMSwgZmFsc2UsICZnbE1hdHJpeFswXSkp
OwogCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3ND
b250ZXh0M0Q6OlRSSUFOR0xFUywgNiwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
LCAwKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5VGV4dHVyZVRvRnJh
bWVidWZmZXIoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgaW50IHRleHR1cmVJZCwgY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgpCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGNvbnN0IERy
YXdpbmdGcmFtZSYgZnJhbWUsIGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KQogewogICAgIGNvbnN0IFJl
bmRlclBhc3NQcm9ncmFtKiBwcm9ncmFtID0gcmVuZGVyUGFzc1Byb2dyYW0oKTsKIApAQCAtMTM4
NCwzMSArMTIwNiw2IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZl
clRleHR1cmUoQ0NTY29wZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0N1cnJlbnRSZW5kZXJQYXNzKERy
YXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKLXsKLSAg
ICByZXR1cm4gZnJhbWUuY3VycmVudFJlbmRlclBhc3MgPT0gcmVuZGVyUGFzcyAmJiAhZnJhbWUu
Y3VycmVudFRleHR1cmU7Ci19Ci0KLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5k
ZXJQYXNzKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFz
cykKLXsKLSAgICBmcmFtZS5jdXJyZW50UmVuZGVyUGFzcyA9IHJlbmRlclBhc3M7Ci0gICAgZnJh
bWUuY3VycmVudFRleHR1cmUgPSAwOwotCi0gICAgaWYgKHJlbmRlclBhc3MgPT0gZnJhbWUucm9v
dFJlbmRlclBhc3MpIHsKLSAgICAgICAgZnJhbWUuY3VycmVudEZyYW1lYnVmZmVyTG9jay5jbGVh
cigpOwotICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApKTsKLSAgICAgICAgc2V0RHJhd0ZyYW1l
YnVmZmVyUmVjdChmcmFtZSwgcmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgpLCB0cnVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IG1f
cmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNzLT5pZCgpKTsKLSAgICBBU1NFUlQodGV4
dHVyZSk7Ci0gICAgaWYgKCF0ZXh0dXJlLT5pZCgpICYmICF0ZXh0dXJlLT5hbGxvY2F0ZShDQ1Jl
bmRlcmVyOjpJbXBsUG9vbCwgcmVuZGVyUGFzc1RleHR1cmVTaXplKHJlbmRlclBhc3MpLCByZW5k
ZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQYXNzKSwgQ0NSZXNvdXJjZVByb3ZpZGVyOjpUZXh0
dXJlVXNhZ2VGcmFtZWJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoZnJhbWUsIHRleHR1cmUsIHJlbmRlclBhc3MtPm91
dHB1dFJlY3QoKSk7Ci19Ci0KIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VTY29wZWRU
ZXh0dXJlKERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IENDU2NvcGVkVGV4dHVyZSogdGV4dHVy
ZSwgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KQogewogICAgIEFTU0VSVCh0ZXh0dXJlLT5p
ZCgpKTsKQEAgLTE0MTgsMTMgKzEyMTUsMTkgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVzZVNjb3BlZFRleHR1cmUoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NTY29wZWQKICAg
ICByZXR1cm4gYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKGZyYW1lLCB0ZXh0dXJlLCB2aWV3cG9y
dFJlY3QpOwogfQogCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmluZEZyYW1lYnVmZmVy
VG9PdXRwdXRTdXJmYWNlKERyYXdpbmdGcmFtZSYgZnJhbWUpCit7CisgICAgbV9jdXJyZW50RnJh
bWVidWZmZXJMb2NrLmNsZWFyKCk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7Cit9CisKIGJv
b2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoRHJhd2lu
Z0ZyYW1lJiBmcmFtZSwgY29uc3QgQ0NTY29wZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRS
ZWN0JiBmcmFtZWJ1ZmZlclJlY3QpCiB7CiAgICAgQVNTRVJUKHRleHR1cmUtPmlkKCkpOwogCiAg
ICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKLSAgICBmcmFt
ZS5jdXJyZW50RnJhbWVidWZmZXJMb2NrID0gYWRvcHRQdHIobmV3IENDU2NvcGVkTG9ja1Jlc291
cmNlRm9yV3JpdGUobV9yZXNvdXJjZVByb3ZpZGVyLCB0ZXh0dXJlLT5pZCgpKSk7Ci0gICAgdW5z
aWduZWQgdGV4dHVyZUlkID0gZnJhbWUuY3VycmVudEZyYW1lYnVmZmVyTG9jay0+dGV4dHVyZUlk
KCk7CisgICAgbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrID0gYWRvcHRQdHIobmV3IENDU2NvcGVk
TG9ja1Jlc291cmNlRm9yV3JpdGUobV9yZXNvdXJjZVByb3ZpZGVyLCB0ZXh0dXJlLT5pZCgpKSk7
CisgICAgdW5zaWduZWQgdGV4dHVyZUlkID0gbV9jdXJyZW50RnJhbWVidWZmZXJMb2NrLT50ZXh0
dXJlSWQoKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlk
LCAwKSk7CiAKICNpZiAhZGVmaW5lZCAoIE5ERUJVRyApCkBAIC0xNDM0LDUxICsxMjM3LDMyIEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoRHJh
d2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QKICAgICB9CiAjZW5kaWYKIAotICAgIHNldERyYXdGcmFt
ZWJ1ZmZlclJlY3QoZnJhbWUsIGZyYW1lYnVmZmVyUmVjdCwgZmFsc2UpOworICAgIGluaXRpYWxp
emVNYXRyaWNlcyhmcmFtZSwgZnJhbWVidWZmZXJSZWN0LCBmYWxzZSk7CisgICAgc2V0RHJhd1Zp
ZXdwb3J0U2l6ZShmcmFtZWJ1ZmZlclJlY3Quc2l6ZSgpKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQogCi0vLyBTZXRzIHRoZSBzY2lzc29yIHJlZ2lvbiB0byB0aGUgZ2l2ZW4gcmVjdGFuZ2xlLiBU
aGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yIHRoZQotLy8gc2Npc3NvclJlY3QgaGFzIGl0cyBvcmln
aW4gYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgY3VycmVudCB2aXNpYmxlIHJlY3QuCi12
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0U2Npc3NvclRvUmVjdChEcmF3aW5nRnJhbWUm
IGZyYW1lLCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjplbmFibGVTY2lzc29yVGVzdFJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3Qp
CiB7Ci0gICAgSW50UmVjdCBmcmFtZWJ1ZmZlck91dHB1dFJlY3QgPSBmcmFtZS5jdXJyZW50UmVu
ZGVyUGFzcy0+b3V0cHV0UmVjdCgpOwotCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5l
bmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwotCi0gICAgLy8gVGhlIHNj
aXNzb3IgY29vcmRpbmF0ZXMgbXVzdCBiZSBzdXBwbGllZCBpbiB2aWV3cG9ydCBzcGFjZSBzbyB3
ZSBuZWVkIHRvIG9mZnNldAotICAgIC8vIGJ5IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUg
dG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLgotICAgIGludCBzY2lz
c29yWCA9IHNjaXNzb3JSZWN0LngoKSAtIGZyYW1lYnVmZmVyT3V0cHV0UmVjdC54KCk7Ci0gICAg
Ly8gV2hlbiByZW5kZXJpbmcgdG8gdGhlIGRlZmF1bHQgcmVuZGVyIHN1cmZhY2Ugd2UncmUgcmVu
ZGVyaW5nIHVwc2lkZSBkb3duIHNvIHRoZSB0b3AKLSAgICAvLyBvZiB0aGUgR0wgc2Npc3NvciBp
cyB0aGUgYm90dG9tIG9mIG91ciBsYXllci4KLSAgICAvLyBCdXQsIGlmIHJlbmRlcmluZyB0byBv
ZmZzY3JlZW4gdGV4dHVyZSwgd2UgcmV2ZXJzZSBvdXIgc2Vuc2Ugb2YgJ3Vwc2lkZSBkb3duJy4K
LSAgICBpbnQgc2Npc3Nvclk7Ci0gICAgaWYgKGlzQ3VycmVudFJlbmRlclBhc3MoZnJhbWUsIGZy
YW1lLnJvb3RSZW5kZXJQYXNzKSkKLSAgICAgICAgc2Npc3NvclkgPSBmcmFtZWJ1ZmZlck91dHB1
dFJlY3QuaGVpZ2h0KCkgLSAoc2Npc3NvclJlY3QubWF4WSgpIC0gZnJhbWVidWZmZXJPdXRwdXRS
ZWN0LnkoKSk7Ci0gICAgZWxzZQotICAgICAgICBzY2lzc29yWSA9IHNjaXNzb3JSZWN0LnkoKSAt
IGZyYW1lYnVmZmVyT3V0cHV0UmVjdC55KCk7Ci0gICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0
LT5zY2lzc29yKHNjaXNzb3JYLCBzY2lzc29yWSwgc2Npc3NvclJlY3Qud2lkdGgoKSwgc2Npc3Nv
clJlY3QuaGVpZ2h0KCkpKTsKKyAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnNjaXNzb3Io
c2Npc3NvclJlY3QueCgpLCBzY2lzc29yUmVjdC55KCksIHNjaXNzb3JSZWN0LndpZHRoKCksIHNj
aXNzb3JSZWN0LmhlaWdodCgpKSk7CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRpc2FibGVT
Y2lzc29yVGVzdCgpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpKTsKIH0KIAotLy8gU2V0cyB0aGUgY29vcmRpbmF0ZSByYW5nZSBv
ZiBjb250ZW50IHRoYXQgZW5kcyBiZWluZyBkcmF3biBvbnRvIHRoZSB0YXJnZXQgcmVuZGVyIHN1
cmZhY2UuCi0vLyBUaGUgdGFyZ2V0IHJlbmRlciBzdXJmYWNlIGlzIGFzc3VtZWQgdG8gaGF2ZSBh
biBvcmlnaW4gYXQgMCwgMCBhbmQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YKLS8vIG9mIHRoZSBk
cmF3UmVjdC4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXREcmF3RnJhbWVidWZmZXJS
ZWN0KERyYXdpbmdGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlY3QmIGRyYXdSZWN0LCBib29sIGZs
aXBZKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldERyYXdWaWV3cG9ydFNpemUoY29u
c3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQogewotICAgIGlmIChmbGlwWSkKLSAgICAgICAgZnJh
bWUucHJvamVjdGlvbk1hdHJpeCA9IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3Qu
bWF4WCgpLCBkcmF3UmVjdC5tYXhZKCksIGRyYXdSZWN0LnkoKSk7Ci0gICAgZWxzZQotICAgICAg
ICBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9NYXRyaXgoZHJhd1JlY3QueCgpLCBkcmF3
UmVjdC5tYXhYKCksIGRyYXdSZWN0LnkoKSwgZHJhd1JlY3QubWF4WSgpKTsKLSAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGRyYXdSZWN0LndpZHRoKCksIGRyYXdS
ZWN0LmhlaWdodCgpKSk7Ci0gICAgZnJhbWUud2luZG93TWF0cml4ID0gc2NyZWVuTWF0cml4KDAs
IDAsIGRyYXdSZWN0LndpZHRoKCksIGRyYXdSZWN0LmhlaWdodCgpKTsKKyAgICBHTEMobV9jb250
ZXh0LCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIHZpZXdwb3J0U2l6ZS53aWR0aCgpLCB2aWV3
cG9ydFNpemUuaGVpZ2h0KCkpKTsKIH0KIAorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Om1h
a2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Cit9CiAKIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hh
cmVkT2JqZWN0cygpCiB7CkBAIC0xNDkwLDcgKzEyNzQsNyBAQCBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogCiAgICAgLy8gV2Ugd2lsbCBhbHdh
eXMgbmVlZCB0aGVzZSBwcm9ncmFtcyB0byByZW5kZXIsIHNvIGNyZWF0ZSB0aGUgcHJvZ3JhbXMg
ZWFnZXJseSBzbyB0aGF0IHRoZSBzaGFkZXIgY29tcGlsYXRpb24gY2FuCiAgICAgLy8gc3RhcnQg
d2hpbGUgd2UgZG8gb3RoZXIgd29yay4gT3RoZXIgcHJvZ3JhbXMgYXJlIGNyZWF0ZWQgbGF6aWx5
IG9uIGZpcnN0IGFjY2Vzcy4KLSAgICBtX3NoYXJlZEdlb21ldHJ5ID0gYWRvcHRQdHIobmV3IEdl
b21ldHJ5QmluZGluZyhtX2NvbnRleHQpKTsKKyAgICBtX3NoYXJlZEdlb21ldHJ5ID0gYWRvcHRQ
dHIobmV3IEdlb21ldHJ5QmluZGluZyhtX2NvbnRleHQsIHF1YWRWZXJ0ZXhSZWN0KCkpKTsKICAg
ICBtX3JlbmRlclBhc3NQcm9ncmFtID0gYWRvcHRQdHIobmV3IFJlbmRlclBhc3NQcm9ncmFtKG1f
Y29udGV4dCkpOwogICAgIG1fdGlsZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgVGlsZVByb2dyYW0o
bV9jb250ZXh0KSk7CiAgICAgbV90aWxlUHJvZ3JhbU9wYXF1ZSA9IGFkb3B0UHRyKG5ldyBUaWxl
UHJvZ3JhbU9wYXF1ZShtX2NvbnRleHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgKaW5kZXggZmI1MWY4NDBlODkzYTM0NDcyYjJmN2VmODIyMmNjODcxMjRmMDRkNy4uMDljZDBl
MjkxMTE5YmU3NDE5NDIyOGY5MDM3ZDlhZWRlM2YxZGFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgIkNDQ2hlY2tlcmJv
YXJkRHJhd1F1YWQuaCIKICNpbmNsdWRlICJDQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKKyNpbmNs
dWRlICJDQ0RpcmVjdFJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiQ0NJT1N1cmZhY2VEcmF3UXVhZC5o
IgogI2luY2x1ZGUgIkNDUmVuZGVyUGFzc0RyYXdRdWFkLmgiCiAjaW5jbHVkZSAiQ0NSZW5kZXJl
ci5oIgpAQCAtNTksNyArNjAsNyBAQCBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBTY29w
ZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb247CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBk
cmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KLWNsYXNzIExheWVy
UmVuZGVyZXJDaHJvbWl1bSA6IHB1YmxpYyBDQ1JlbmRlcmVyLAorY2xhc3MgTGF5ZXJSZW5kZXJl
ckNocm9taXVtIDogcHVibGljIENDRGlyZWN0UmVuZGVyZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhp
Y3NTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFw
aGljc01lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6
V2ViR3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrIHsKQEAgLTc3LDExICs3OCw2IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IEZsb2F0UXVhZCYgc2hhcmVkR2VvbWV0cnlRdWFkKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFyZWRHZW9tZXRyeVF1YWQ7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVS
ZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCBib29sIGhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNz
SWQoaW50IGlkKSBjb25zdCBPVkVSUklERTsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3RnJhbWUo
Y29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYsIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCYpIE9W
RVJSSURFOwotCiAgICAgLy8gd2FpdHMgZm9yIHJlbmRlcmluZyB0byBmaW5pc2gKICAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoKCkgT1ZFUlJJREU7CiAKQEAgLTEwMyw3MyArOTksNDUgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCkgT1ZFUlJJREU7CiAKLSAgICBD
Q1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Jl
c291cmNlUHJvdmlkZXI7IH0KLQogcHJvdGVjdGVkOgogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1
bShDQ1JlbmRlcmVyQ2xpZW50KiwgQ0NSZXNvdXJjZVByb3ZpZGVyKiwgVGV4dHVyZVVwbG9hZGVy
T3B0aW9uKTsKIAotCiAgICAgYm9vbCBpc0ZyYW1lYnVmZmVyRGlzY2FyZGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkOyB9CiAgICAgYm9vbCBpbml0aWFsaXplKCk7
CiAKICAgICB2b2lkIHJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKIAotcHJpdmF0ZToKLSAg
ICBzdHJ1Y3QgRHJhd2luZ0ZyYW1lIHsKLSAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzSWRIYXNo
TWFwKiByZW5kZXJQYXNzZXNCeUlkOwotICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RS
ZW5kZXJQYXNzOwotICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIGN1cnJlbnRSZW5kZXJQYXNz
OwotICAgICAgICBjb25zdCBDQ1Njb3BlZFRleHR1cmUqIGN1cnJlbnRUZXh0dXJlOwotICAgICAg
ICBPd25QdHI8Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZT4gY3VycmVudEZyYW1lYnVmZmVy
TG9jazsKLQotICAgICAgICBGbG9hdFJlY3Qgcm9vdERhbWFnZVJlY3Q7Ci0KLSAgICAgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OwotICAgICAgICBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHdpbmRvd01hdHJpeDsKLQotICAgICAgICBE
cmF3aW5nRnJhbWUoKQotICAgICAgICAgICAgOiByb290UmVuZGVyUGFzcygwKQotICAgICAgICAg
ICAgLCBjdXJyZW50UmVuZGVyUGFzcygwKQotICAgICAgICAgICAgLCBjdXJyZW50VGV4dHVyZSgw
KQotICAgICAgICB7IH0KLSAgICB9OworICAgIHZpcnR1YWwgdm9pZCBiaW5kRnJhbWVidWZmZXJU
b091dHB1dFN1cmZhY2UoRHJhd2luZ0ZyYW1lJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29s
IGJpbmRGcmFtZWJ1ZmZlclRvVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRl
eHR1cmUqLCBjb25zdCBJbnRSZWN0JiBmcmFtZWJ1ZmZlclJlY3QpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXREcmF3Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlU2Npc3NvclRlc3RSZWN0KGNvbnN0IEludFJlY3QmIHNj
aXNzb3JSZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZVNjaXNzb3JUZXN0
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVidWZmZXIoRHJhd2luZ0Zy
YW1lJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdRdWFkKERyYXdpbmdGcmFtZSYs
IGNvbnN0IENDRHJhd1F1YWQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5EcmF3
aW5nRnJhbWUoRHJhd2luZ0ZyYW1lJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZpbmlz
aERyYXdpbmdGcmFtZShEcmF3aW5nRnJhbWUmKSBPVkVSUklERTsKIAorcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpOwogCi0gICAgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZSgpOwotICAgIHZvaWQg
ZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzKik7Ci0gICAg
dm9pZCBmaW5pc2hEcmF3aW5nRnJhbWUoKTsKLQotICAgIHZvaWQgZHJhd1F1YWQoRHJhd2luZ0Zy
YW1lJiwgY29uc3QgQ0NEcmF3UXVhZCosIEZsb2F0UmVjdCBzY2lzc29yUmVjdCk7Ci0gICAgdm9p
ZCBkcmF3Q2hlY2tlcmJvYXJkUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0NoZWNrZXJib2Fy
ZERyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3RGVidWdCb3JkZXJRdWFkKERyYXdpbmdGcmFtZSYs
IGNvbnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd0NoZWNrZXJib2Fy
ZFF1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCop
OworICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBjb25z
dCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqKTsKICAgICBQYXNzT3duUHRyPENDU2NvcGVkVGV4dHVy
ZT4gZHJhd0JhY2tncm91bmRGaWx0ZXJzKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDUmVuZGVyUGFz
c0RyYXdRdWFkKiwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiwgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKICAgICB2b2lk
IGRyYXdSZW5kZXJQYXNzUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3NEcmF3
UXVhZCopOwotICAgIHZvaWQgZHJhd1NvbGlkQ29sb3JRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0
IENDU29saWRDb2xvckRyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3U3RyZWFtVmlkZW9RdWFkKERy
YXdpbmdGcmFtZSYsIGNvbnN0IENDU3RyZWFtVmlkZW9EcmF3UXVhZCopOwotICAgIHZvaWQgZHJh
d1RleHR1cmVRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDVGV4dHVyZURyYXdRdWFkKik7Ci0g
ICAgdm9pZCBkcmF3SU9TdXJmYWNlUXVhZChEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ0lPU3VyZmFj
ZURyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3VGlsZVF1YWQoRHJhd2luZ0ZyYW1lJiwgY29uc3Qg
Q0NUaWxlRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdZVVZWaWRlb1F1YWQoRHJhd2luZ0ZyYW1l
JiwgY29uc3QgQ0NZVVZWaWRlb0RyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3U29saWRDb2xvclF1
YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqKTsKKyAg
ICB2b2lkIGRyYXdTdHJlYW1WaWRlb1F1YWQoY29uc3QgRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NT
dHJlYW1WaWRlb0RyYXdRdWFkKik7CisgICAgdm9pZCBkcmF3VGV4dHVyZVF1YWQoY29uc3QgRHJh
d2luZ0ZyYW1lJiwgY29uc3QgQ0NUZXh0dXJlRHJhd1F1YWQqKTsKKyAgICB2b2lkIGRyYXdJT1N1
cmZhY2VRdWFkKGNvbnN0IERyYXdpbmdGcmFtZSYsIGNvbnN0IENDSU9TdXJmYWNlRHJhd1F1YWQq
KTsKKyAgICB2b2lkIGRyYXdUaWxlUXVhZChjb25zdCBEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Rp
bGVEcmF3UXVhZCopOworICAgIHZvaWQgZHJhd1lVVlZpZGVvUXVhZChjb25zdCBEcmF3aW5nRnJh
bWUmLCBjb25zdCBDQ1lVVlZpZGVvRHJhd1F1YWQqKTsKIAogICAgIHZvaWQgc2V0U2hhZGVyT3Bh
Y2l0eShmbG9hdCBvcGFjaXR5LCBpbnQgYWxwaGFMb2NhdGlvbik7CiAgICAgdm9pZCBzZXRTaGFk
ZXJGbG9hdFF1YWQoY29uc3QgRmxvYXRRdWFkJiwgaW50IHF1YWRMb2NhdGlvbik7Ci0gICAgdm9p
ZCBkcmF3UXVhZEdlb21ldHJ5KERyYXdpbmdGcmFtZSYsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgcXVhZFJlY3Qs
IGludCBtYXRyaXhMb2NhdGlvbik7Ci0KLSAgICB2b2lkIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZl
cihEcmF3aW5nRnJhbWUmLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01hdHJpeCk7Ci0KLSAgICB2b2lkIHNl
dFNjaXNzb3JUb1JlY3QoRHJhd2luZ0ZyYW1lJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQg
ZHJhd1F1YWRHZW9tZXRyeShjb25zdCBEcmF3aW5nRnJhbWUmLCBjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIHF1YWRS
ZWN0LCBpbnQgbWF0cml4TG9jYXRpb24pOwogCi0gICAgdm9pZCBzZXREcmF3RnJhbWVidWZmZXJS
ZWN0KERyYXdpbmdGcmFtZSYsIGNvbnN0IEludFJlY3QmLCBib29sIGZsaXBZKTsKKyAgICB2b2lk
IGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihjb25zdCBEcmF3aW5nRnJhbWUmLCBpbnQgdGV4dHVy
ZUlkLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZHJhd01hdHJpeCk7CiAKLSAgICAvLyBUaGUgY3VycmVudCBkcmF3aW5nIHRhcmdldCBpcyBl
aXRoZXIgYSBSZW5kZXJQYXNzIG9yIFNjb3BlZFRleHR1cmUuIFVzZSB0aGVzZSBmdW5jdGlvbnMg
dG8gc3dpdGNoIHRvIGEgbmV3IGRyYXdpbmcgdGFyZ2V0LgotICAgIGJvb2wgdXNlUmVuZGVyUGFz
cyhEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1JlbmRlclBhc3MqKTsKICAgICBib29sIHVzZVNjb3Bl
ZFRleHR1cmUoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NTY29wZWRUZXh0dXJlKiwgY29uc3QgSW50
UmVjdCYgdmlld3BvcnRSZWN0KTsKLSAgICBib29sIGlzQ3VycmVudFJlbmRlclBhc3MoRHJhd2lu
Z0ZyYW1lJiwgY29uc3QgQ0NSZW5kZXJQYXNzKik7Ci0KLSAgICBib29sIGJpbmRGcmFtZWJ1ZmZl
clRvVGV4dHVyZShEcmF3aW5nRnJhbWUmLCBjb25zdCBDQ1Njb3BlZFRleHR1cmUqLCBjb25zdCBJ
bnRSZWN0JiB2aWV3cG9ydFJlY3QpOwotCi0gICAgdm9pZCBjbGVhckZyYW1lYnVmZmVyKERyYXdp
bmdGcmFtZSYpOwogCiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIApAQCAtMTg4LDkg
KzE1Niw2IEBAIHByaXZhdGU6CiAgICAgLy8gV2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBo
aWNzQ29udGV4dExvc3RDYWxsYmFjayBpbXBsZW1lbnRhdGlvbi4KICAgICB2aXJ0dWFsIHZvaWQg
b25Db250ZXh0TG9zdCgpIE9WRVJSSURFOwogCi0gICAgc3RhdGljIEludFNpemUgcmVuZGVyUGFz
c1RleHR1cmVTaXplKGNvbnN0IENDUmVuZGVyUGFzcyopOwotICAgIHN0YXRpYyBHQzNEZW51bSBy
ZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChjb25zdCBDQ1JlbmRlclBhc3MqKTsKLQogICAgIExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7CiAKICAgICB1bnNpZ25lZCBtX29m
ZnNjcmVlbkZyYW1lYnVmZmVySWQ7CkBAIC0xOTgsOCArMTYzLDYgQEAgcHJpdmF0ZToKICAgICBP
d25QdHI8R2VvbWV0cnlCaW5kaW5nPiBtX3NoYXJlZEdlb21ldHJ5OwogICAgIEZsb2F0UXVhZCBt
X3NoYXJlZEdlb21ldHJ5UXVhZDsKIAotICAgIGNsYXNzIENhY2hlZFRleHR1cmU7Ci0KICAgICAv
LyBUaGlzIGJsb2NrIG9mIGJpbmRpbmdzIGRlZmluZXMgYWxsIG9mIHRoZSBwcm9ncmFtcyB1c2Vk
IGJ5IHRoZSBjb21wb3NpdG9yIGl0c2VsZi4KIAogICAgIC8vIFRpbGVkIGxheWVyIHNoYWRlcnMu
CkBAIC0yNzMsMTIgKzIzNiw5IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8U29saWRDb2xvclBy
b2dyYW0+IG1fc29saWRDb2xvclByb2dyYW07CiAKLSAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIG1f
cmVzb3VyY2VQcm92aWRlcjsKICAgICBPd25QdHI8QWNjZWxlcmF0ZWRUZXh0dXJlQ29waWVyPiBt
X3RleHR1cmVDb3BpZXI7CiAgICAgT3duUHRyPFRleHR1cmVVcGxvYWRlcj4gbV90ZXh0dXJlVXBs
b2FkZXI7CiAKLSAgICBIYXNoTWFwPGludCwgT3duUHRyPENhY2hlZFRleHR1cmU+ID4gbV9yZW5k
ZXJQYXNzVGV4dHVyZXM7Ci0KICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBtX2Nv
bnRleHQ7CiAKICAgICBJbnRSZWN0IG1fc3dhcEJ1ZmZlclJlY3Q7CkBAIC0yODcsNiArMjQ3LDgg
QEAgcHJpdmF0ZToKICAgICBib29sIG1faXNVc2luZ0JpbmRVbmlmb3JtOwogICAgIGJvb2wgbV92
aXNpYmxlOwogICAgIFRleHR1cmVVcGxvYWRlck9wdGlvbiBtX3RleHR1cmVVcGxvYWRlclNldHRp
bmc7CisKKyAgICBPd25QdHI8Q0NTY29wZWRMb2NrUmVzb3VyY2VGb3JXcml0ZT4gbV9jdXJyZW50
RnJhbWVidWZmZXJMb2NrOwogfTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlQ29waWVyLmgKaW5kZXggYWZlMmVjMDI1
NjRhZDdhYmRjODAyMTU3ZWZmN2JjZTg5NjY4N2M0Zi4uNjhiMGYxNjU2NTc3NTc2ODQ5ZWJmNDc1
NWNmYTRjMTQzOWNmNTI4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGV4dHVyZUNvcGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVDb3BpZXIuaApAQCAtNTEsNyArNTEsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlKFBhcmFtZXRlcnMpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgZmx1c2goKSA9IDA7CiAKLXByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5U
ZXh0dXJlQ29waWVyKCkgeyB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbnRocm90dGxlZFRleHR1cmVVcGxvYWRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW50aHJvdHRsZWRUZXh0dXJl
VXBsb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTk2ODk5YjYxOWVjNGY2YTI3MzM4OGRmZmQ3NjRiMDAw
NmUxMTgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIuaApAQCAtMCwwICsxLDUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcl9oCisj
ZGVmaW5lIFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyX2gKKworI2luY2x1ZGUgIkNDUmVzb3Vy
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlRleHR1cmVVcGxvYWRlci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFVudGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyIDogcHVibGljIFRl
eHR1cmVVcGxvYWRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVW50aHJvdHRsZWRUZXh0
dXJlVXBsb2FkZXIpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFVudGhyb3R0bGVk
VGV4dHVyZVVwbG9hZGVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBVbnRocm90dGxlZFRleHR1cmVVcGxvYWRlcigpKTsKKyAgICB9CisgICAgdmlydHVhbCB+
VW50aHJvdHRsZWRUZXh0dXJlVXBsb2FkZXIoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0J1
c3koKSBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBiZWdpblVw
bG9hZHMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZW5kVXBsb2FkcygpIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGxvYWRUZXh0dXJlKENDUmVzb3VyY2VQcm92aWRl
ciogcmVzb3VyY2VQcm92aWRlciwgUGFyYW1ldGVycyB1cGxvYWQpIE9WRVJSSURFIHsgdXBsb2Fk
LnRleHR1cmUtPnVwZGF0ZVJlY3QocmVzb3VyY2VQcm92aWRlciwgdXBsb2FkLnNvdXJjZVJlY3Qs
IHVwbG9hZC5kZXN0T2Zmc2V0KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVW50aHJvdHRsZWRUZXh0
dXJlVXBsb2FkZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0
UmVuZGVyZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2ODhiZWQxOWJmYzRlODM1YmFkZjM3OTI2ZDkwM2Qy
NmEwZWQzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDIzMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNDRGlyZWN0UmVuZGVyZXIu
aCIKKworI2luY2x1ZGUgIkNDTWF0aFV0aWwuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguaD4KKwordXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDsKKworc3RhdGljIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG9ydGhvUHJvamVjdGlvbk1hdHJp
eChmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3ApCit7Cisg
ICAgLy8gVXNlIHRoZSBzdGFuZGFyZCBmb3JtdWxhIHRvIG1hcCB0aGUgY2xpcHBpbmcgZnJ1c3R1
bSB0byB0aGUgY3ViZSBmcm9tCisgICAgLy8gWy0xLCAtMSwgLTFdIHRvIFsxLCAxLCAxXS4KKyAg
ICBmbG9hdCBkZWx0YVggPSByaWdodCAtIGxlZnQ7CisgICAgZmxvYXQgZGVsdGFZID0gdG9wIC0g
Ym90dG9tOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2o7CisgICAgaWYgKCFkZWx0
YVggfHwgIWRlbHRhWSkKKyAgICAgICAgcmV0dXJuIHByb2o7CisgICAgcHJvai5zZXRNMTEoMi4w
ZiAvIGRlbHRhWCk7CisgICAgcHJvai5zZXRNNDEoLShyaWdodCArIGxlZnQpIC8gZGVsdGFYKTsK
KyAgICBwcm9qLnNldE0yMigyLjBmIC8gZGVsdGFZKTsKKyAgICBwcm9qLnNldE00MigtKHRvcCAr
IGJvdHRvbSkgLyBkZWx0YVkpOworCisgICAgLy8gWiBjb21wb25lbnQgb2YgdmVydGljZXMgaXMg
YWx3YXlzIHNldCB0byB6ZXJvIGFzIHdlIGRvbid0IHVzZSB0aGUgZGVwdGggYnVmZmVyCisgICAg
Ly8gd2hpbGUgZHJhd2luZy4KKyAgICBwcm9qLnNldE0zMygwKTsKKworICAgIHJldHVybiBwcm9q
OworfQorCitzdGF0aWMgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggd2luZG93TWF0cml4KGludCB4
LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGNhbnZhczsKKworICAgIC8vIE1hcCB0byB3aW5kb3cgcG9zaXRpb24gYW5kIHNjYWxl
IHVwIHRvIHBpeGVsIGNvb3JkaW5hdGVzLgorICAgIGNhbnZhcy50cmFuc2xhdGUzZCh4LCB5LCAw
KTsKKyAgICBjYW52YXMuc2NhbGUzZCh3aWR0aCwgaGVpZ2h0LCAwKTsKKworICAgIC8vIE1hcCBm
cm9tIChbLTEsIC0xXSB0byBbMSwgMV0pIC0+IChbMCwgMF0gdG8gWzEsIDFdKQorICAgIGNhbnZh
cy50cmFuc2xhdGUzZCgwLjUsIDAuNSwgMC41KTsKKyAgICBjYW52YXMuc2NhbGUzZCgwLjUsIDAu
NSwgMC41KTsKKworICAgIHJldHVybiBjYW52YXM7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Ky8vCisvLyBzdGF0aWMKK0Zsb2F0UmVjdCBDQ0RpcmVjdFJlbmRlcmVyOjpxdWFkVmVydGV4UmVj
dCgpCit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgtMC41LCAtMC41LCAxLCAxKTsKK30KKworLy8g
c3RhdGljCit2b2lkIENDRGlyZWN0UmVuZGVyZXI6OnF1YWRSZWN0VHJhbnNmb3JtKFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgqIHF1YWRSZWN0VHJhbnNmb3JtLCBjb25zdCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3Qm
IHF1YWRSZWN0KQoreworICAgICpxdWFkUmVjdFRyYW5zZm9ybSA9IHF1YWRUcmFuc2Zvcm07Cisg
ICAgcXVhZFJlY3RUcmFuc2Zvcm0tPnRyYW5zbGF0ZSgwLjUgKiBxdWFkUmVjdC53aWR0aCgpICsg
cXVhZFJlY3QueCgpLCAwLjUgKiBxdWFkUmVjdC5oZWlnaHQoKSArIHF1YWRSZWN0LnkoKSk7Cisg
ICAgcXVhZFJlY3RUcmFuc2Zvcm0tPnNjYWxlTm9uVW5pZm9ybShxdWFkUmVjdC53aWR0aCgpLCBx
dWFkUmVjdC5oZWlnaHQoKSk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBDQ0RpcmVjdFJlbmRlcmVy
Ojppbml0aWFsaXplTWF0cmljZXMoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3QgSW50UmVjdCYg
ZHJhd1JlY3QsIGJvb2wgZmxpcFkpCit7CisgICAgaWYgKGZsaXBZKQorICAgICAgICBmcmFtZS5w
cm9qZWN0aW9uTWF0cml4ID0gb3J0aG9Qcm9qZWN0aW9uTWF0cml4KGRyYXdSZWN0LngoKSwgZHJh
d1JlY3QubWF4WCgpLCBkcmF3UmVjdC5tYXhZKCksIGRyYXdSZWN0LnkoKSk7CisgICAgZWxzZQor
ICAgICAgICBmcmFtZS5wcm9qZWN0aW9uTWF0cml4ID0gb3J0aG9Qcm9qZWN0aW9uTWF0cml4KGRy
YXdSZWN0LngoKSwgZHJhd1JlY3QubWF4WCgpLCBkcmF3UmVjdC55KCksIGRyYXdSZWN0Lm1heFko
KSk7CisgICAgZnJhbWUud2luZG93TWF0cml4ID0gd2luZG93TWF0cml4KDAsIDAsIGRyYXdSZWN0
LndpZHRoKCksIGRyYXdSZWN0LmhlaWdodCgpKTsKKyAgICBmcmFtZS5mbGlwcGVkWSA9IGZsaXBZ
OworfQorCisvLyBzdGF0aWMKK0ludFJlY3QgQ0NEaXJlY3RSZW5kZXJlcjo6bW92ZVNjaXNzb3JU
b1dpbmRvd1NwYWNlKGNvbnN0IERyYXdpbmdGcmFtZSYgZnJhbWUsIEZsb2F0UmVjdCBzY2lzc29y
UmVjdCkKK3sKKyAgICBJbnRSZWN0IHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZSA9IGVuY2xvc2lu
Z0ludFJlY3Qoc2Npc3NvclJlY3QpOworICAgIC8vIFRoZSBzY2lzc29yIGNvb3JkaW5hdGVzIG11
c3QgYmUgc3VwcGxpZWQgaW4gdmlld3BvcnQgc3BhY2Ugc28gd2UgbmVlZCB0byBvZmZzZXQKKyAg
ICAvLyBieSB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0
aGUgY3VycmVudCByZW5kZXIgcGFzcy4KKyAgICBJbnRSZWN0IGZyYW1lYnVmZmVyT3V0cHV0UmVj
dCA9IGZyYW1lLmN1cnJlbnRSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7CisgICAgc2Npc3NvclJl
Y3RJbkNhbnZhc1NwYWNlLnNldFgoc2Npc3NvclJlY3RJbkNhbnZhc1NwYWNlLngoKSAtIGZyYW1l
YnVmZmVyT3V0cHV0UmVjdC54KCkpOworICAgIGlmIChmcmFtZS5mbGlwcGVkWSAmJiAhZnJhbWUu
Y3VycmVudFRleHR1cmUpCisgICAgICAgIHNjaXNzb3JSZWN0SW5DYW52YXNTcGFjZS5zZXRZKGZy
YW1lYnVmZmVyT3V0cHV0UmVjdC5oZWlnaHQoKSAtIChzY2lzc29yUmVjdEluQ2FudmFzU3BhY2Uu
bWF4WSgpIC0gZnJhbWVidWZmZXJPdXRwdXRSZWN0LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAg
c2Npc3NvclJlY3RJbkNhbnZhc1NwYWNlLnNldFkoc2Npc3NvclJlY3RJbkNhbnZhc1NwYWNlLnko
KSAtIGZyYW1lYnVmZmVyT3V0cHV0UmVjdC55KCkpOworICAgIHJldHVybiBzY2lzc29yUmVjdElu
Q2FudmFzU3BhY2U7Cit9CisKK3ZvaWQgQ0NEaXJlY3RSZW5kZXJlcjo6ZGVjaWRlUmVuZGVyUGFz
c0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2Vz
SW5EcmF3T3JkZXIpCit7CisgICAgSGFzaE1hcDxpbnQsIGNvbnN0IENDUmVuZGVyUGFzcyo+IHJl
bmRlclBhc3Nlc0luRnJhbWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNz
ZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkKKyAgICAgICAgcmVuZGVyUGFzc2VzSW5GcmFtZS5z
ZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHJlbmRlclBhc3Nlc0luRHJhd09y
ZGVyW2ldKTsKKworICAgIFZlY3RvcjxpbnQ+IHBhc3Nlc1RvRGVsZXRlOworICAgIEhhc2hNYXA8
aW50LCBPd25QdHI8Q2FjaGVkVGV4dHVyZT4gPjo6Y29uc3RfaXRlcmF0b3IgcGFzc0l0ZXJhdG9y
OworICAgIGZvciAocGFzc0l0ZXJhdG9yID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuYmVnaW4oKTsg
cGFzc0l0ZXJhdG9yICE9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmVuZCgpOyArK3Bhc3NJdGVyYXRv
cikgeworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3NJbkZyYW1lID0gcmVu
ZGVyUGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CisgICAgICAgIGlmICgh
cmVuZGVyUGFzc0luRnJhbWUpIHsKKyAgICAgICAgICAgIHBhc3Nlc1RvRGVsZXRlLmFwcGVuZChw
YXNzSXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisK
KyAgICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRTaXplID0gcmVuZGVyUGFzc1RleHR1cmVT
aXplKHJlbmRlclBhc3NJbkZyYW1lKTsKKyAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQg
PSByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQYXNzSW5GcmFtZSk7CisgICAgICAgIENh
Y2hlZFRleHR1cmUqIHRleHR1cmUgPSBwYXNzSXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgQVNTRVJUKHRleHR1cmUpOworCisgICAgICAgIGlmICh0ZXh0dXJlLT5pZCgpICYmICh0ZXh0
dXJlLT5zaXplKCkgIT0gcmVxdWlyZWRTaXplIHx8IHRleHR1cmUtPmZvcm1hdCgpICE9IHJlcXVp
cmVkRm9ybWF0KSkKKyAgICAgICAgICAgIHRleHR1cmUtPmZyZWUoKTsKKyAgICB9CisKKyAgICAv
LyBEZWxldGUgUmVuZGVyUGFzcyB0ZXh0dXJlcyBmcm9tIHRoZSBwcmV2aW91cyBmcmFtZSB0aGF0
IHdpbGwgbm90IGJlIHVzZWQgYWdhaW4uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNz
ZXNUb0RlbGV0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMucmVt
b3ZlKHBhc3Nlc1RvRGVsZXRlW2ldKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVu
ZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX3JlbmRl
clBhc3NUZXh0dXJlcy5jb250YWlucyhyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSkp
IHsKKyAgICAgICAgICAgIE93blB0cjxDYWNoZWRUZXh0dXJlPiB0ZXh0dXJlID0gQ2FjaGVkVGV4
dHVyZTo6Y3JlYXRlKG1fcmVzb3VyY2VQcm92aWRlcik7CisgICAgICAgICAgICBtX3JlbmRlclBh
c3NUZXh0dXJlcy5zZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHRleHR1cmUu
cmVsZWFzZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0RpcmVjdFJlbmRlcmVy
OjpkcmF3RnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3Jk
ZXIsIGNvbnN0IENDUmVuZGVyUGFzc0lkSGFzaE1hcCYgcmVuZGVyUGFzc2VzQnlJZCkKK3sKKyAg
ICBjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzID0gcmVuZGVyUGFzc2VzSW5EcmF3
T3JkZXIubGFzdCgpOworICAgIEFTU0VSVChyb290UmVuZGVyUGFzcyk7CisKKyAgICBEcmF3aW5n
RnJhbWUgZnJhbWU7CisgICAgZnJhbWUucmVuZGVyUGFzc2VzQnlJZCA9ICZyZW5kZXJQYXNzZXNC
eUlkOworICAgIGZyYW1lLnJvb3RSZW5kZXJQYXNzID0gcm9vdFJlbmRlclBhc3M7CisgICAgZnJh
bWUucm9vdERhbWFnZVJlY3QgPSBjYXBhYmlsaXRpZXMoKS51c2luZ1BhcnRpYWxTd2FwID8gcm9v
dFJlbmRlclBhc3MtPmRhbWFnZVJlY3QoKSA6IHJvb3RSZW5kZXJQYXNzLT5vdXRwdXRSZWN0KCk7
CisgICAgZnJhbWUucm9vdERhbWFnZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgdmlld3BvcnRTaXplKCkpKTsKKworICAgIGJlZ2luRHJhd2luZ0ZyYW1lKGZyYW1lKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUo
KTsgKytpKQorICAgICAgICBkcmF3UmVuZGVyUGFzcyhmcmFtZSwgcmVuZGVyUGFzc2VzSW5EcmF3
T3JkZXJbaV0pOworICAgIGZpbmlzaERyYXdpbmdGcmFtZShmcmFtZSk7Cit9CisKK3ZvaWQgQ0NE
aXJlY3RSZW5kZXJlcjo6ZHJhd1JlbmRlclBhc3MoRHJhd2luZ0ZyYW1lJiBmcmFtZSwgY29uc3Qg
Q0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQoreworICAgIGlmICghdXNlUmVuZGVyUGFzcyhmcmFt
ZSwgcmVuZGVyUGFzcykpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lLnNjaXNzb3JSZWN0
SW5SZW5kZXJQYXNzU3BhY2UgPSBmcmFtZS5jdXJyZW50UmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgp
OworICAgIGlmIChmcmFtZS5yb290RGFtYWdlUmVjdCAhPSBmcmFtZS5yb290UmVuZGVyUGFzcy0+
b3V0cHV0UmVjdCgpKSB7CisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VU
cmFuc2Zvcm1Ub1Jvb3QgPSBmcmFtZS5jdXJyZW50UmVuZGVyUGFzcy0+dHJhbnNmb3JtVG9Sb290
VGFyZ2V0KCkuaW52ZXJzZSgpOworICAgICAgICBmcmFtZS5zY2lzc29yUmVjdEluUmVuZGVyUGFz
c1NwYWNlLmludGVyc2VjdChDQ01hdGhVdGlsOjpwcm9qZWN0Q2xpcHBlZFJlY3QoaW52ZXJzZVRy
YW5zZm9ybVRvUm9vdCwgZnJhbWUucm9vdERhbWFnZVJlY3QpKTsKKyAgICB9CisKKyAgICBlbmFi
bGVTY2lzc29yVGVzdFJlY3QobW92ZVNjaXNzb3JUb1dpbmRvd1NwYWNlKGZyYW1lLCBmcmFtZS5z
Y2lzc29yUmVjdEluUmVuZGVyUGFzc1NwYWNlKSk7CisgICAgY2xlYXJGcmFtZWJ1ZmZlcihmcmFt
ZSk7CisKKyAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlzdCA9IHJlbmRlclBhc3MtPnF1YWRM
aXN0KCk7CisgICAgZm9yIChDQ1F1YWRMaXN0Ojpjb25zdEJhY2tUb0Zyb250SXRlcmF0b3IgaXQg
PSBxdWFkTGlzdC5iYWNrVG9Gcm9udEJlZ2luKCk7IGl0ICE9IHF1YWRMaXN0LmJhY2tUb0Zyb250
RW5kKCk7ICsraXQpIHsKKyAgICAgICAgRmxvYXRSZWN0IHF1YWRTY2lzc29yUmVjdCA9IGZyYW1l
LnNjaXNzb3JSZWN0SW5SZW5kZXJQYXNzU3BhY2U7CisgICAgICAgIHF1YWRTY2lzc29yUmVjdC5p
bnRlcnNlY3QoaXQtPmdldCgpLT5jbGlwcGVkUmVjdEluVGFyZ2V0KCkpOworICAgICAgICBpZiAo
IXF1YWRTY2lzc29yUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGVuYWJsZVNjaXNzb3JU
ZXN0UmVjdChtb3ZlU2Npc3NvclRvV2luZG93U3BhY2UoZnJhbWUsIHF1YWRTY2lzc29yUmVjdCkp
OworICAgICAgICAgICAgZHJhd1F1YWQoZnJhbWUsIGl0LT5nZXQoKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBDYWNoZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMu
Z2V0KHJlbmRlclBhc3MtPmlkKCkpOworICAgIGlmICh0ZXh0dXJlKQorICAgICAgICB0ZXh0dXJl
LT5zZXRJc0NvbXBsZXRlKCFyZW5kZXJQYXNzLT5oYXNPY2NsdXNpb25Gcm9tT3V0c2lkZVRhcmdl
dFN1cmZhY2UoKSk7Cit9CisKK2Jvb2wgQ0NEaXJlY3RSZW5kZXJlcjo6dXNlUmVuZGVyUGFzcyhE
cmF3aW5nRnJhbWUmIGZyYW1lLCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MpCit7Cisg
ICAgZnJhbWUuY3VycmVudFJlbmRlclBhc3MgPSByZW5kZXJQYXNzOworICAgIGZyYW1lLmN1cnJl
bnRUZXh0dXJlID0gMDsKKworICAgIGlmIChyZW5kZXJQYXNzID09IGZyYW1lLnJvb3RSZW5kZXJQ
YXNzKSB7CisgICAgICAgIGJpbmRGcmFtZWJ1ZmZlclRvT3V0cHV0U3VyZmFjZShmcmFtZSk7Cisg
ICAgICAgIGluaXRpYWxpemVNYXRyaWNlcyhmcmFtZSwgcmVuZGVyUGFzcy0+b3V0cHV0UmVjdCgp
LCB0cnVlKTsKKyAgICAgICAgc2V0RHJhd1ZpZXdwb3J0U2l6ZShyZW5kZXJQYXNzLT5vdXRwdXRS
ZWN0KCkuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQ2FjaGVk
VGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNzLT5p
ZCgpKTsKKyAgICBBU1NFUlQodGV4dHVyZSk7CisgICAgaWYgKCF0ZXh0dXJlLT5pZCgpICYmICF0
ZXh0dXJlLT5hbGxvY2F0ZShDQ1JlbmRlcmVyOjpJbXBsUG9vbCwgcmVuZGVyUGFzc1RleHR1cmVT
aXplKHJlbmRlclBhc3MpLCByZW5kZXJQYXNzVGV4dHVyZUZvcm1hdChyZW5kZXJQYXNzKSwgQ0NS
ZXNvdXJjZVByb3ZpZGVyOjpUZXh0dXJlVXNhZ2VGcmFtZWJ1ZmZlcikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUoZnJhbWUsIHRl
eHR1cmUsIHJlbmRlclBhc3MtPm91dHB1dFJlY3QoKSk7Cit9CisKK2Jvb2wgQ0NEaXJlY3RSZW5k
ZXJlcjo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChpbnQgaWQpIGNvbnN0Cit7
CisgICAgQ2FjaGVkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChp
ZCk7CisgICAgcmV0dXJuIHRleHR1cmUgJiYgdGV4dHVyZS0+aWQoKSAmJiB0ZXh0dXJlLT5pc0Nv
bXBsZXRlKCk7Cit9CisKKy8vIHN0YXRpYworSW50U2l6ZSBDQ0RpcmVjdFJlbmRlcmVyOjpyZW5k
ZXJQYXNzVGV4dHVyZVNpemUoY29uc3QgQ0NSZW5kZXJQYXNzKiBwYXNzKQoreworICAgIHJldHVy
biBwYXNzLT5vdXRwdXRSZWN0KCkuc2l6ZSgpOworfQorCisvLyBzdGF0aWMKK0dDM0RlbnVtIEND
RGlyZWN0UmVuZGVyZXI6OnJlbmRlclBhc3NUZXh0dXJlRm9ybWF0KGNvbnN0IENDUmVuZGVyUGFz
cyopCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Rp
cmVjdFJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0RpcmVjdFJlbmRlcmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjk0MTUyY2RkZjNhNTVlYWVlOGNh
YzIzNWIzMWEyYjllMDIzNzMwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGlyZWN0UmVuZGVyZXIuaApAQCAtMCwwICsx
LDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NEaXJlY3RSZW5kZXJlcl9oCisjZGVmaW5lIENDRGly
ZWN0UmVuZGVyZXJfaAorCisjaW5jbHVkZSAiQ0NSZW5kZXJlci5oIgorI2luY2x1ZGUgIkNDUmVz
b3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIkNDU2NvcGVkVGV4dHVyZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENDUmVzb3VyY2VQcm92aWRlcjsKKworLy8gVGhpcyBpcyB0
aGUgYmFzZSBjbGFzcyBmb3IgY29kZSBzaGFyZWQgYmV0d2VlbiB0aGUgR0wgYW5kIHNvZnR3YXJl
CisvLyByZW5kZXJlciBpbXBsZW1lbnRhdGlvbnMuICAiRGlyZWN0IiByZWZlcnMgdG8gdGhlIGZh
Y3QgdGhhdCBpdCBkb2VzIG5vdAorLy8gZGVsZWdhdGUgcmVuZGVyaW5nIHRvIGFub3RoZXIgY29t
cG9zaXRvci4KK2NsYXNzIENDRGlyZWN0UmVuZGVyZXIgOiBwdWJsaWMgQ0NSZW5kZXJlciB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NEaXJlY3RSZW5kZXJlcik7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+Q0NEaXJlY3RSZW5kZXJlcigpIHsgfQorCisgICAgQ0NSZXNvdXJjZVByb3ZpZGVy
KiByZXNvdXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVByb3ZpZGVyOyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUo
Y29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGlu
dCBpZCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGcmFtZShjb25zdCBD
Q1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlciwgY29uc3QgQ0NSZW5kZXJQ
YXNzSWRIYXNoTWFwJiByZW5kZXJQYXNzZXNCeUlkKSBPVkVSUklERTsKKworcHJvdGVjdGVkOgor
ICAgIENDRGlyZWN0UmVuZGVyZXIoQ0NSZW5kZXJlckNsaWVudCogY2xpZW50LCBDQ1Jlc291cmNl
UHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpCisgICAgICAgIDogQ0NSZW5kZXJlcihjbGllbnQp
CisgICAgICAgICwgbV9yZXNvdXJjZVByb3ZpZGVyKHJlc291cmNlUHJvdmlkZXIpCisgICAgewor
ICAgIH0KKworICAgIHN0cnVjdCBEcmF3aW5nRnJhbWUgeworICAgICAgICBjb25zdCBDQ1JlbmRl
clBhc3NJZEhhc2hNYXAqIHJlbmRlclBhc3Nlc0J5SWQ7CisgICAgICAgIGNvbnN0IENDUmVuZGVy
UGFzcyogcm9vdFJlbmRlclBhc3M7CisgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogY3VycmVu
dFJlbmRlclBhc3M7CisgICAgICAgIGNvbnN0IENDU2NvcGVkVGV4dHVyZSogY3VycmVudFRleHR1
cmU7CisKKyAgICAgICAgRmxvYXRSZWN0IHJvb3REYW1hZ2VSZWN0OworCisgICAgICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKKyAgICAgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB3aW5kb3dNYXRyaXg7CisgICAgICAgIGJvb2wg
ZmxpcHBlZFk7CisgICAgICAgIEZsb2F0UmVjdCBzY2lzc29yUmVjdEluUmVuZGVyUGFzc1NwYWNl
OworCisgICAgICAgIERyYXdpbmdGcmFtZSgpCisgICAgICAgICAgICA6IHJvb3RSZW5kZXJQYXNz
KDApCisgICAgICAgICAgICAsIGN1cnJlbnRSZW5kZXJQYXNzKDApCisgICAgICAgICAgICAsIGN1
cnJlbnRUZXh0dXJlKDApCisgICAgICAgICAgICAsIGZsaXBwZWRZKGZhbHNlKQorICAgICAgICB7
IH0KKyAgICB9OworCisgICAgY2xhc3MgQ2FjaGVkVGV4dHVyZSA6IHB1YmxpYyBDQ1Njb3BlZFRl
eHR1cmUgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWNoZWRUZXh0dXJlKTsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlZFRleHR1cmU+IGNyZWF0
ZShDQ1Jlc291cmNlUHJvdmlkZXIqIHJlc291cmNlUHJvdmlkZXIpIHsgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDYWNoZWRUZXh0dXJlKHJlc291cmNlUHJvdmlkZXIpKTsgfQorICAgICAgICB2aXJ0dWFs
IH5DYWNoZWRUZXh0dXJlKCkgeyB9CisKKyAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0NvbXBsZXRlOyB9CisgICAgICAgIHZvaWQgc2V0SXNDb21wbGV0ZShib29s
IGlzQ29tcGxldGUpIHsgbV9pc0NvbXBsZXRlID0gaXNDb21wbGV0ZTsgfQorCisgICAgcHJvdGVj
dGVkOgorICAgICAgICBleHBsaWNpdCBDYWNoZWRUZXh0dXJlKENDUmVzb3VyY2VQcm92aWRlciog
cmVzb3VyY2VQcm92aWRlcikKKyAgICAgICAgICAgIDogQ0NTY29wZWRUZXh0dXJlKHJlc291cmNl
UHJvdmlkZXIpCisgICAgICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBib29sIG1faXNDb21wbGV0ZTsKKyAg
ICB9OworCisgICAgc3RhdGljIEZsb2F0UmVjdCBxdWFkVmVydGV4UmVjdCgpOworICAgIHN0YXRp
YyB2b2lkIHF1YWRSZWN0VHJhbnNmb3JtKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgq
IHF1YWRSZWN0VHJhbnNmb3JtLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBGbG9hdFJlY3QmIHF1YWRSZWN0KTsKKyAgICBzdGF0aWMg
dm9pZCBpbml0aWFsaXplTWF0cmljZXMoRHJhd2luZ0ZyYW1lJiwgY29uc3QgSW50UmVjdCYgZHJh
d1JlY3QsIGJvb2wgZmxpcFkpOworICAgIHN0YXRpYyBJbnRSZWN0IG1vdmVTY2lzc29yVG9XaW5k
b3dTcGFjZShjb25zdCBEcmF3aW5nRnJhbWUmLCBGbG9hdFJlY3Qgc2Npc3NvclJlY3QpOworCisg
ICAgYm9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzKGludCByZW5kZXJQYXNzSWQpIGNvbnN0OworICAg
IHN0YXRpYyBJbnRTaXplIHJlbmRlclBhc3NUZXh0dXJlU2l6ZShjb25zdCBDQ1JlbmRlclBhc3Mq
KTsKKyAgICBzdGF0aWMgR0MzRGVudW0gcmVuZGVyUGFzc1RleHR1cmVGb3JtYXQoY29uc3QgQ0NS
ZW5kZXJQYXNzKik7CisKKyAgICB2b2lkIGRyYXdSZW5kZXJQYXNzKERyYXdpbmdGcmFtZSYsIGNv
bnN0IENDUmVuZGVyUGFzcyopOworICAgIGJvb2wgdXNlUmVuZGVyUGFzcyhEcmF3aW5nRnJhbWUm
LCBjb25zdCBDQ1JlbmRlclBhc3MqKTsKKworICAgIHZpcnR1YWwgdm9pZCBiaW5kRnJhbWVidWZm
ZXJUb091dHB1dFN1cmZhY2UoRHJhd2luZ0ZyYW1lJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBi
aW5kRnJhbWVidWZmZXJUb1RleHR1cmUoRHJhd2luZ0ZyYW1lJiwgY29uc3QgQ0NTY29wZWRUZXh0
dXJlKiwgY29uc3QgSW50UmVjdCYgZnJhbWVidWZmZXJSZWN0KSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldERyYXdWaWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZW5hYmxlU2Npc3NvclRlc3RSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGVTY2lzc29yVGVzdCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJGcmFtZWJ1ZmZlcihEcmF3aW5nRnJhbWUmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdRdWFkKERyYXdpbmdGcmFtZSYsIGNvbnN0IENDRHJhd1F1YWQqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luRHJhd2luZ0ZyYW1lKERyYXdpbmdGcmFtZSYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKERyYXdpbmdGcmFtZSYpID0gMDsKKwor
ICAgIEhhc2hNYXA8aW50LCBPd25QdHI8Q2FjaGVkVGV4dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0
dXJlczsKKyAgICBDQ1Jlc291cmNlUHJvdmlkZXIqIG1fcmVzb3VyY2VQcm92aWRlcjsKK307CisK
K30KKworI2VuZGlmIC8vIENDRGlyZWN0UmVuZGVyZXJfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>