<?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>65791</bug_id>
          
          <creation_ts>2011-08-05 14:21:31 -0700</creation_ts>
          <short_desc>[chromium] Make WebViewImpl point at CCLayerTreeHost and related separation</short_desc>
          <delta_ts>2011-08-11 17:23:22 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nat Duca">nduca</reporter>
          <assigned_to name="Nat Duca">nduca</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>447419</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-05 14:21:31 -0700</bug_when>
    <thetext>[chromium] Make WebViewImpl point at CCLayerTreeHost and related separation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447420</commentid>
    <comment_count>1</comment_count>
      <attachid>103113</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-05 14:22:49 -0700</bug_when>
    <thetext>Created attachment 103113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447450</commentid>
    <comment_count>2</comment_count>
      <attachid>103113</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-05 15:36:22 -0700</bug_when>
    <thetext>Comment on attachment 103113
Patch

Attachment 103113 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9324055

New failing tests:
fast/canvas/webgl/premultiplyalpha-test.html
fast/canvas/webgl/program-test.html
fast/canvas/webgl/index-validation.html
fast/canvas/webgl/index-validation-with-resized-buffer.html
fast/canvas/webgl/index-validation-copies-indices.html
fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view.html
fast/canvas/webgl/index-validation-verifies-too-many-indices.html
fast/canvas/webgl/copy-tex-image-and-sub-image-2d.html
fast/canvas/webgl/context-lost-restored.html
fast/canvas/webgl/gl-pixelstorei.html
fast/canvas/webgl/gl-bind-attrib-location-test.html
fast/canvas/webgl/canvas-test.html
fast/canvas/webgl/css-webkit-canvas-repaint.html
fast/canvas/webgl/css-webkit-canvas.html
fast/canvas/webgl/canvas-zero-size.html
fast/canvas/webgl/context-attributes-alpha-depth-stencil-antialias.html
fast/canvas/webgl/gl-vertex-attrib-zero-issues.html
fast/canvas/webgl/invalid-passed-params.html
fast/canvas/webgl/read-pixels-pack-alignment.html
fast/canvas/webgl/gl-teximage.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447501</commentid>
    <comment_count>3</comment_count>
      <attachid>103113</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-05 17:36:22 -0700</bug_when>
    <thetext>Comment on attachment 103113
Patch

Attachment 103113 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9305990</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448302</commentid>
    <comment_count>4</comment_count>
      <attachid>103303</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-08 15:17:45 -0700</bug_when>
    <thetext>Created attachment 103303
All tests should pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448404</commentid>
    <comment_count>5</comment_count>
      <attachid>103303</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-08 18:48:54 -0700</bug_when>
    <thetext>Comment on attachment 103303
All tests should pass.

Attachment 103303 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9335191</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448649</commentid>
    <comment_count>6</comment_count>
      <attachid>103368</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-09 10:13:01 -0700</bug_when>
    <thetext>Created attachment 103368
Pass mac ews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448815</commentid>
    <comment_count>7</comment_count>
      <attachid>103368</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-08-09 14:32:39 -0700</bug_when>
    <thetext>Comment on attachment 103368
Pass mac ews

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

The separation looks nice and clean!  I like where this is going.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:56
&gt; +class CCLayerTreeHost;

You&apos;re not using CCLayerTreeHost yet so not necessary

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:153
&gt; +    // TOOD, replace with CCLayerTreeHost

TOOD -&gt; FIXME

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:470
&gt; +

nit: one too many newlines

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:489
&gt; +bool LayerRendererChromium::contextSupportsAcceleratedPainting(GraphicsContext3D* context)

Since this method is only called by the CCLayerTreeHost, why not move it up there?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:200
&gt; +    // For this rev, the LRC is owned by the CCLayerTreeHost. This will change in a following revision.

FIXME:

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:206
&gt; +    // TODO: split the texture updater and tiler into two parts. Then,

TODO: -&gt; FIXME:

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:207
&gt; +    // keep the impl here and put the painting-side on the LayerTreeHost

Period &apos;.&apos; missing at the end of the comment.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCHeadsUpDisplay.cpp:42
&gt; +#include &quot;cc/CCLayerTreeHost.h&quot;

Is this include necessary?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:105
&gt; +    // TODO: only called in threading case, fix when possible.

TODO -&gt; FIXME

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:123
&gt; +    // TODO: need to implement this

TODO: -&gt; FIXME:

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:138
&gt; +    // TODO: need to implement this

TODO -&gt; FIXME

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:243
&gt; +    // GraphicsContext3D::create might fail and return 0, in that case fall back to softwaree

typo: software

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:250
&gt; +    // Check that the context supports accelerated drawing, if needed.

Ideally ::initialize and ::reallocateRender should share this bit of code to eliminate code duplication.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:29
&gt; +#include &quot;Extensions3D.h&quot;

It&apos;s not clear to me whether changes to CCLayerTreeHostImpl.cpp and the proxy are required for the CL.

&gt; Source/WebKit/chromium/src/WebSettingsImpl.cpp:50
&gt; +    , m_acceleratedDrawingEnabled(false)

Why are we switching to a new member instead of using the existing one in Settings ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449429</commentid>
    <comment_count>8</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-10 15:26:18 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:29
&gt; &gt; +#include &quot;Extensions3D.h&quot;
&gt; 
&gt; It&apos;s not clear to me whether changes to CCLayerTreeHostImpl.cpp and the proxy are required for the CL.

Ideally, I&apos;d make zero changes. But, the removal of the LayerRendererChromiumImpl from the previous version then causes the CCLayerTreeHostImpl to start breaking. This is sort of &quot;temporary fixyness&quot; to get things compiling enough to move on to the next patch set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449458</commentid>
    <comment_count>9</comment_count>
      <attachid>103548</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-10 15:59:03 -0700</bug_when>
    <thetext>Created attachment 103548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449497</commentid>
    <comment_count>10</comment_count>
      <attachid>103548</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-10 17:01:46 -0700</bug_when>
    <thetext>Comment on attachment 103548
Patch

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

This is looking really great.  Left a bunch of nits, but besides a bunch of style-type things I think we&apos;re ready to rock and roll.

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:141
&gt; +    // TODO: This setting is currently ignored.

FIXME is preferred in WebKit style

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.h:152
&gt; +    // TOOD, replace with CCLayerTreeHost

TOOD-&gt;TODO, or even better FIXME

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:595
&gt; +    // FIXME: The multithreaded compositor case will not work as long as
&gt; +    // copyTexImage2D resolves to the parent texture, because the main
&gt; +    // thread can execute WebGL calls on the child context at any time,
&gt; +    // potentially clobbering the parent texture that is being renderered
&gt; +    // by the compositor thread.

I&apos;m pretty sure you can nuke this FIXME now that Al fixed the command buffer&apos;s glFlush() semantics.  This is all good now.

I also don&apos;t think we really need to flush() all child contexts any more since we do a flush() on the appropriate context in updateCompositorResources().  That&apos;s probably for another patch, tho.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:620
&gt; +        // TODOD: might have to call

TODOD-&gt;FIXME.  I&apos;m pretty sure you don&apos;t need the call, though, the root layer render surface will get blown away on the next draw anyway.  So maybe just delete the comment completely.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:195
&gt; +

nit: extra newline

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:270
&gt; +#endif

nit: would you mind adding a comment to this #endif saying what it was for? something like:
#endif // !USE(THREADED_COMPOSITING)
would be sufficient

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:58
&gt; +struct CCSettings {

could you add a no-arg constructor that initializes the bools to something reasonable (maybe all false), just to be sure that we don&apos;t allocate one of these, forget to set a bool, and have it be some random value? it can still be a struct

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:116
&gt; +    explicit CCLayerTreeHost(CCLayerTreeHostClient*, const CCSettings&amp;);

nit: no &apos;explicit&apos; for 2-arg c&apos;tors, only for 1-arg c&apos;tors

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:121
&gt; +    PassRefPtr&lt;LayerRendererChromium&gt; createRenderer();

although it&apos;s quite verbose, would you mind naming this createLayerRenderer()?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:68
&gt; +    explicit CCLayerTreeHostImpl(CCLayerTreeHostImplClient*, PassRefPtr&lt;LayerRendererChromium&gt;);

nit: no &apos;explicit&apos; for 2-arg constructors, just 1-arg

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:76
&gt; +#include &quot;LayerChromium.h&quot;

do we need this #include? it&apos;s a surprising dependency

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:343
&gt; +    , m_layerTreeHost(0)

WTF smart pointers (RefPtr&lt;&gt;, OwnPtr&lt;&gt;, etc) will null-initialize themselves, no need to do so yourself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450103</commentid>
    <comment_count>11</comment_count>
      <attachid>103689</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-11 15:44:38 -0700</bug_when>
    <thetext>Created attachment 103689
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450138</commentid>
    <comment_count>12</comment_count>
      <attachid>103689</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-11 16:26:39 -0700</bug_when>
    <thetext>Comment on attachment 103689
Cleanup

Boogie</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450183</commentid>
    <comment_count>13</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-11 17:23:22 -0700</bug_when>
    <thetext>Committed r92895: &lt;http://trac.webkit.org/changeset/92895&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103113</attachid>
            <date>2011-08-05 14:22:49 -0700</date>
            <delta_ts>2011-08-08 15:17:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65791-20110805142248.patch</filename>
            <type>text/plain</type>
            <size>75333</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTIyOTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NTU2ZjliYzRjYWRjYWM3
YTI5MDI3YmU4MTQwMzllY2YzOTAyMjVlLi5kZGY2MzM0MmUyNWI5YWU3ZDdhODA4YTAzM2IwYzMz
Y2ZiNDY3NDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMDUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBXZWJW
aWV3SW1wbCBwb2ludCBhdCBDQ0xheWVyVHJlZUhvc3QgYW5kIHJlbGF0ZWQgc2VwYXJhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3OTEKKwor
ICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIExheWVyUmVuZGVyZXJDaHJvbWl1bSBiZWNvbWVzIGlu
Y3JlYXNpbmdseSByZXNwb25zaWJsZQorICAgICAgICBmb3IgcmVuZGVyaW5nLCB3aGlsZSByZW5k
ZXIgc2NoZWR1bGluZyBhbmQgdHJlZSBob3N0aW5nIG1vdmVzIGludG8gdGhlCisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0
dXJlVXBkYXRlcklmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlVGV4dHVyZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlk
YXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OnJvb3RMYXllckNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp2aWV3cG9ydENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRv
RGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJl
bmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpz
ZXRTY2lzc29yVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6bGF5ZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpvd25lcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OnNraWFDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9t
aXVtOjpzZXRUZXh0dXJlVXBkYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRz
VXBEaXNwbGF5OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmVu
YWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZVJvb3RMYXllclBhaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlUm9vdExheWVy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNS
ZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpkb0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnJlYWxsb2NhdGVSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OnNldEFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnJvb3RM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldHRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dmlld3BvcnRDb250ZW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnZpZXdwb3J0U2Nyb2xsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp2aWV3cG9ydFZpc2libGVSZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhv
c3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09u
TWFpblRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCk6CisKIDIwMTEtMDgtMDMg
IEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
c2UgYXBwcm9wcmlhdGUgbWFjcm8gZm9yIENTU1Byb3BlcnR5SW1hZ2VSZW5kZXJpbmcuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNGFjYzAzNjVhYzAxMTI2NmMwYzJl
MTc2NmZmZWNjMTNmZjZkYjc4OS4uYjA2Nzk3MTFiMmI0ZTFiMjRmNGRjMzRkOTMzMzk3ZTlmZGUx
MGE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTIzLDcgKzEy
Myw3IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZO
ZWVkZWQoKQogICAgIGlmIChtX3RleHR1cmVVcGRhdGVyKQogICAgICAgICByZXR1cm47CiAjaWYg
VVNFKFNLSUEpCi0gICAgaWYgKGxheWVyUmVuZGVyZXIoKS0+YWNjZWxlcmF0ZURyYXdpbmcoKSkg
eworICAgIGlmIChsYXllclJlbmRlcmVyKCktPnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5n
KSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0
dXJlOjpjcmVhdGUobGF5ZXJSZW5kZXJlckNvbnRleHQoKSwgQ29udGVudExheWVyUGFpbnRlcjo6
Y3JlYXRlKG1fb3duZXIpLCBsYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0KCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDRlNDAxY2NlODhhYjlhZDIy
MWJkNDdkN2RmZTE5YzczZDViMWY0MGUuLmU1N2FlYWEzZmQ0NWYzY2Y0ZWQ4OGIwNGRiNTFlNWFk
YTNiMTE5YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTUzLDYgKzUzLDcgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllckltcGw7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsK
IApAQCAtMTQ5LDYgKzE1MCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIERlcml2ZWQgdHlwZXMgbXVz
dCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGV5IG5lZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UK
ICAgICAvLyBpbiB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtLgorICAgIC8vIFRPT0QsIHJlcGxh
Y2Ugd2l0aCBDQ0xheWVyVHJlZUhvc3QKICAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZW5kZXJl
cihMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKIAogICAgIHZvaWQgc2V0T3duZXIoR3JhcGhpY3NM
YXllckNocm9taXVtKiBvd25lcikgeyBtX293bmVyID0gb3duZXI7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGJmYzI5Yjc4ZDFkM2Y1NzA4N2MwYzczZDMwNjky
MTQ4ZjEyOGQ1YjguLjAzODNiM2VkMDEwYTFkYTAzNzFjMWVkZjc1NGRlMTVhYjMxYjc0YTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTEsNyArNTEsNiBAQAog
I2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCiAjaWYgVVNFKFNLSUEp
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCkBAIC00MjAsNjQgKzQxOSw1OSBAQCBzdGF0aWMg
VHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuTWF0cml4KGludCB4LCBpbnQgeSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQogICAgIHJldHVybiBzY3JlZW47CiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3RDbGllbnQqIGNsaWVudCwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29u
dGVudFBhaW50LCBib29sIGFjY2VsZXJhdGVEcmF3aW5nKQorUGFzc1JlZlB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9z
dCogb3duZXIsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7Ci0gICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gY2xpZW50LT5jcmVhdGVMYXllclRy
ZWVIb3N0Q29udGV4dDNEKCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRS
ZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShjbGllbnQsIGNvbnRleHQsIGNvbnRlbnRQYWlu
dCwgYWNjZWxlcmF0ZURyYXdpbmcpKSk7Ci0gICAgbGF5ZXJSZW5kZXJlci0+aW5pdCgpOwotICAg
IGlmICghbGF5ZXJSZW5kZXJlci0+aGFyZHdhcmVDb21wb3NpdGluZygpKQorICAgIFJlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVu
ZGVyZXJDaHJvbWl1bShvd25lciwgY29udGV4dCkpKTsKKyAgICBpZiAoIWxheWVyUmVuZGVyZXIt
PmluaXRpYWxpemUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGF5ZXJSZW5k
ZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZWxlcmF0ZURyYXdp
bmcpCi0gICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50KQotICAgICwgbV92aWV3cG9ydFNjcm9s
bFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCi0gICAgLCBtX3Jvb3RMYXllcigwKQotICAgICwg
bV9hY2NlbGVyYXRlRHJhd2luZyhmYWxzZSkKK0xheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KQorICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY3VycmVudFJlbmRlclN1
cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQotICAgICwgbV9jb21w
b3NpdGVPZmZzY3JlZW4oZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1f
Y29udGV4dFN1cHBvcnRzVGV4dHVyZUZvcm1hdEJHUkEoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRT
dXBwb3J0c1JlYWRGb3JtYXRCR1JBKGZhbHNlKQotICAgICwgbV9hbmltYXRpbmcoZmFsc2UpCiAg
ICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiB7Cit9CisKK2Jvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplKCkKK3sKICAgICBXZWJDb3JlOjpFeHRlbnNpb25zM0QqIGV4
dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBtX2NvbnRleHRTdXBw
b3J0c01hcFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7
CiAgICAgaWYgKG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKQogICAgICAgICBleHRlbnNpb25zLT5l
bnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7Ci0gICAgbV9jb250ZXh0U3VwcG9y
dHNUZXh0dXJlRm9ybWF0QkdSQSA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVy
ZV9mb3JtYXRfQkdSQTg4ODgiKTsKLSAgICBpZiAobV9jb250ZXh0U3VwcG9ydHNUZXh0dXJlRm9y
bWF0QkdSQSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1
cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgbV9jb250ZXh0U3VwcG9ydHNSZWFkRm9ybWF0QkdS
QSA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOwotICAg
IGlmIChtX2NvbnRleHRTdXBwb3J0c1JlYWRGb3JtYXRCR1JBKQotICAgICAgICBleHRlbnNpb25z
LT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOwogCi0jaWYgVVNFKFNL
SUEpCi0gICAgbV9hY2NlbGVyYXRlRHJhd2luZyA9IGFjY2VsZXJhdGVEcmF3aW5nICYmIHNraWFD
b250ZXh0KCk7Ci0jZW5kaWYKLSAgICBtX2hhcmR3YXJlQ29tcG9zaXRpbmcgPSBpbml0aWFsaXpl
U2hhcmVkT2JqZWN0cygpOworICAgIGlmICghaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgVVNFKFNLSUEpCi0gICAgaWYgKG1fYWNjZWxlcmF0
ZURyYXdpbmcpCi0gICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1
cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBjb250ZW50UGFpbnQs
IHNraWFDb250ZXh0KCkpOworICAgIGlmIChzZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykg
eworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICBtX3Nr
aWFDb250ZXh0ID0gYWRvcHRQdHIoR3JDb250ZXh0OjpDcmVhdGVHTFNoYWRlckNvbnRleHQoKSk7
CisgICAgICAgIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUg
Yml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heFRleHR1
cmVDYWNoZUNvdW50ID0gNTEyOworICAgICAgICAvLyBMaW1pdCB0aGUgYnl0ZXMgYWxsb2NhdGVk
IHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0ICogMTAy
NDsKKyAgICAgICAgbV9za2lhQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRleHR1
cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgICAgIG1fcm9vdExheWVy
VGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUobV9j
b250ZXh0LmdldCgpLCBtX293bmVyLT5jcmVhdGVSb290TGF5ZXJQYWludGVyKCksIHNraWFDb250
ZXh0KCkpOworICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgbV9yb290TGF5ZXJUZXh0
dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShtX2NvbnRleHQu
Z2V0KCksIGNvbnRlbnRQYWludCwgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIpOworICAgICAgICBt
X3Jvb3RMYXllclRleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3Jl
YXRlKG1fY29udGV4dC5nZXQoKSwgbV9vd25lci0+Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpLCBt
X2NvbnRleHRTdXBwb3J0c01hcFN1Yik7CiAKICAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlciA9
IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAyNTYpLCBMYXll
clRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICBBU1NFUlQobV9yb290TGF5ZXJD
b250ZW50VGlsZXIpOwogCiAgICAgbV9oZWFkc1VwRGlzcGxheSA9IENDSGVhZHNVcERpc3BsYXk6
OmNyZWF0ZSh0aGlzKTsKKworCisgICAgLy8gTWFrZSBzdXJlIHRoZSB2aWV3cG9ydCBhbmQgY29u
dGV4dCBnZXRzIGluaXRpYWxpemVkLCBldmVuIGlmIGl0IGlzIHRvIHplcm8uCisgICAgdmlld3Bv
cnRDaGFuZ2VkKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6fkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpCkBAIC00OTIsMTggKzQ4NiwyMCBAQCBHcmFwaGlj
c0NvbnRleHQzRCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0KCkKIH0KIAogI2lmIFVT
RShTS0lBKQotR3JDb250ZXh0KiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNraWFDb250ZXh0KCkK
K2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBh
aW50aW5nKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogewotICAgIGlmICghbV9za2lhQ29u
dGV4dCAmJiBtX2NvbnRleHRTdXBwb3J0c1RleHR1cmVGb3JtYXRCR1JBICYmIG1fY29udGV4dFN1
cHBvcnRzUmVhZEZvcm1hdEJHUkEpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICAgICAgbV9za2lhQ29udGV4dCA9IGFkb3B0UHRyKEdyQ29udGV4dDo6Q3Jl
YXRlR0xTaGFkZXJDb250ZXh0KCkpOwotICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIHRl
eHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KLSAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhUZXh0dXJlQ2FjaGVDb3VudCA9IDUxMjsKLSAgICAgICAgLy8gTGlt
aXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4
dHVyZSBjYWNoZS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVC
eXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7Ci0gICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRleHR1
cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMp
OwotICAgIH0KLSAgICByZXR1cm4gbV9za2lhQ29udGV4dC5nZXQoKTsKKyAgICBXZWJDb3JlOjpF
eHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAg
aWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgi
KSkKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4Iik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIikpCisgICAg
ICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
ICNlbmRpZgogCkBAIC01MTQsMTYgKzUxMCwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZGVidWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqCiAg
ICAgICAgIExPR19FUlJPUigiR0wgY29tbWFuZCBmYWlsZWQ6IEZpbGU6ICVzXG5cdExpbmUgJWRc
blx0Y29tbWFuZDogJXMsIGVycm9yICV4XG4iLCBmaWxlLCBsaW5lLCBjb21tYW5kLCBzdGF0aWNf
Y2FzdDxpbnQ+KGVycm9yKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZh
bGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCi17Ci0gICAgbV9y
b290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7Ci19Ci0KIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlVGV4dHVyZXMoKQogewogICAgIC8vIFJl
ZHVjZXMgdGV4dHVyZSBtZW1vcnkgdXNhZ2UgdG8gdGV4dHVyZU1lbW9yeUxvd0xpbWl0Qnl0ZXMg
YnkgZGVsZXRpbmcgbm9uIHJvb3QgbGF5ZXIKICAgICAvLyB0ZXh0dXJlcy4KLSAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlci0+cHJvdGVjdFRpbGVUZXh0dXJlcyhtX3ZpZXdwb3J0VmlzaWJsZVJl
Y3QpOworICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5wcm90ZWN0VGlsZVRleHR1cmVzKG1f
b3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKSk7CiAgICAgbV9jb250ZW50c1RleHR1cmVNYW5h
Z2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzKTsKICAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7CiAgICAg
Ly8gRXZpY3QgYWxsIFJlbmRlclN1cmZhY2UgdGV4dHVyZXMuCkBAIC01MzQsNzkgKzUyNSw3OSBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVRleHR1cmVzKCkKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJDb250ZW50cygpCiB7CiAgICAgVFJB
Q0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMi
LCB0aGlzLCAwKTsKLSAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+cHJlcGFyZVRvVXBkYXRl
KG1fdmlld3BvcnRWaXNpYmxlUmVjdCwgbV9yb290TGF5ZXJUZXh0dXJlVXBkYXRlci5nZXQoKSk7
CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnByZXBhcmVUb1VwZGF0ZShtX293bmVyLT52
aWV3cG9ydFZpc2libGVSZWN0KCksIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOwog
fQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcigpCiB7CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggc2Nyb2xsOwotICAgIHNjcm9sbC50cmFuc2xhdGUoLW1fdmll
d3BvcnRWaXNpYmxlUmVjdC54KCksIC1tX3ZpZXdwb3J0VmlzaWJsZVJlY3QueSgpKTsKKyAgICBz
Y3JvbGwudHJhbnNsYXRlKC1tX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkueCgpLCAtbV9v
d25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLnkoKSk7CiAKLSAgICBtX3Jvb3RMYXllckNvbnRl
bnRUaWxlci0+ZHJhdyhtX3ZpZXdwb3J0VmlzaWJsZVJlY3QsIHNjcm9sbCwgMS4wZik7CisgICAg
bV9yb290TGF5ZXJDb250ZW50VGlsZXItPmRyYXcobV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVj
dCgpLCBzY3JvbGwsIDEuMGYpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0
Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0KQogewotICAgIGJvb2wgdmlzaWJsZVJlY3RDaGFuZ2VkID0gbV92aWV3cG9ydFZpc2libGVS
ZWN0LnNpemUoKSAhPSB2aXNpYmxlUmVjdC5zaXplKCk7Ci0KLSAgICBtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3QgPSB2aXNpYmxlUmVjdDsKLSAgICBtX3ZpZXdwb3J0Q29udGVudFJlY3QgPSBjb250ZW50
UmVjdDsKLSAgICBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKLQot
ICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dCkKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+cmVzaGFwZShzdGQ6Om1heCgxLCB2aXNpYmxlUmVjdC53aWR0
aCgpKSwgc3RkOjptYXgoMSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgLy8gUmVz
ZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZhY2UgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2
aWV3cG9ydCBhbmQKLSAgICAgICAgLy8gcHJvamVjdGlvbiBtYXRyaXggbmV4dCB0aW1lIHVzZVJl
bmRlclN1cmZhY2UgaXMgY2FsbGVkLgotICAgICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0g
MDsKLSAgICAgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRhdGVFbnRpcmVMYXll
cigpOwotICAgIH0KLSAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIG1fcm9vdExh
eWVyQ29udGVudFRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOworfQorCit2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6cm9vdExheWVyQ2hhbmdlZCgpCit7CisgICAgbV9yb290TGF5
ZXJDb250ZW50VGlsZXItPmludmFsaWRhdGVFbnRpcmVMYXllcigpOworfQorCit2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9jb250ZXh0
KQorICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgbV9vd25lci0+dmlld3Bv
cnRWaXNpYmxlUmVjdCgpLndpZHRoKCkpLCBzdGQ6Om1heCgxLCBtX293bmVyLT52aWV3cG9ydFZp
c2libGVSZWN0KCkuaGVpZ2h0KCkpKTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+aW52
YWxpZGF0ZUVudGlyZUxheWVyKCk7CisKKyAgICAvLyBSZXNldCB0aGUgY3VycmVudCByZW5kZXIg
c3VyZmFjZSB0byBmb3JjZSBhbiB1cGRhdGUgb2YgdGhlIHZpZXdwb3J0IGFuZAorICAgIC8vIHBy
b2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJTdXJmYWNlIGlzIGNhbGxlZC4KKyAg
ICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gMDsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZUxheWVycygpCiB7Ci0gICAgaWYgKG1fdmlld3BvcnRWaXNpYmxlUmVjdC5p
c0VtcHR5KCkpCisgICAgaWYgKG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiB1c2UgdGhlIGZyYW1lIGJlZ2lu
IHRpbWUgZnJvbSB0aGUgb3ZlcmFsbCBjb21wb3NpdG9yIHNjaGVkdWxlci4KICAgICAvLyBUaGlz
IHZhbHVlIGlzIGN1cnJlbnRseSBpbmFjY2Vzc2libGUgYmVjYXVzZSBpdCBpcyB1cCBpbiBDaHJv
bWl1bSdzCiAgICAgLy8gUmVuZGVyV2lkZ2V0LgogICAgIG1faGVhZHNVcERpc3BsYXktPm9uRnJh
bWVCZWdpbihjdXJyZW50VGltZSgpKTsKLSAgICBBU1NFUlQobV9oYXJkd2FyZUNvbXBvc2l0aW5n
KTsKIAotICAgIGlmICghbV9yb290TGF5ZXIpCisgICAgaWYgKCFyb290TGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgdXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKIAogICAgIC8vIFJl
Y2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4gVGhpcyBtYXkgYmVjb21lIG51
bGwgaWYKICAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYgZHVyaW5nIGEgcGFpbnQg
b3BlcmF0aW9uLgotICAgIGlmICghbV9yb290TGF5ZXIpCisgICAgaWYgKCFyb290TGF5ZXIoKSkg
eworICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbC5jbGVhcigpOwogICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgdXBkYXRlTGF5ZXJzKG1fcm9vdExheWVyLmdldCgpKTsKKyAgICB1cGRhdGVM
YXllcnMocm9vdExheWVyKCkpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycygpCiB7Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CiAgICAgLy8g
QmVmb3JlIGRyYXdMYXllcnM6Ci0gICAgaWYgKGhhcmR3YXJlQ29tcG9zaXRpbmcoKSkgewotICAg
ICAgICAvLyBGSVhNRTogVGhlIG11bHRpdGhyZWFkZWQgY29tcG9zaXRvciBjYXNlIHdpbGwgbm90
IHdvcmsgYXMgbG9uZyBhcwotICAgICAgICAvLyBjb3B5VGV4SW1hZ2UyRCByZXNvbHZlcyB0byB0
aGUgcGFyZW50IHRleHR1cmUsIGJlY2F1c2UgdGhlIG1haW4KLSAgICAgICAgLy8gdGhyZWFkIGNh
biBleGVjdXRlIFdlYkdMIGNhbGxzIG9uIHRoZSBjaGlsZCBjb250ZXh0IGF0IGFueSB0aW1lLAot
ICAgICAgICAvLyBwb3RlbnRpYWxseSBjbG9iYmVyaW5nIHRoZSBwYXJlbnQgdGV4dHVyZSB0aGF0
IGlzIGJlaW5nIHJlbmRlcmVyZWQKLSAgICAgICAgLy8gYnkgdGhlIGNvbXBvc2l0b3IgdGhyZWFk
LgotICAgICAgICBDaGlsZENvbnRleHRNYXA6Oml0ZXJhdG9yIGkgPSBtX2NoaWxkQ29udGV4dHMu
YmVnaW4oKTsKLSAgICAgICAgZm9yICg7IGkgIT0gbV9jaGlsZENvbnRleHRzLmVuZCgpOyArK2kp
IHsKLSAgICAgICAgICAgIGktPmZpcnN0LT5mbHVzaCgpOwotICAgICAgICB9CisgICAgLy8gRklY
TUU6IFRoZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2FzZSB3aWxsIG5vdCB3b3JrIGFzIGxv
bmcgYXMKKyAgICAvLyBjb3B5VGV4SW1hZ2UyRCByZXNvbHZlcyB0byB0aGUgcGFyZW50IHRleHR1
cmUsIGJlY2F1c2UgdGhlIG1haW4KKyAgICAvLyB0aHJlYWQgY2FuIGV4ZWN1dGUgV2ViR0wgY2Fs
bHMgb24gdGhlIGNoaWxkIGNvbnRleHQgYXQgYW55IHRpbWUsCisgICAgLy8gcG90ZW50aWFsbHkg
Y2xvYmJlcmluZyB0aGUgcGFyZW50IHRleHR1cmUgdGhhdCBpcyBiZWluZyByZW5kZXJlcmVkCisg
ICAgLy8gYnkgdGhlIGNvbXBvc2l0b3IgdGhyZWFkLgorICAgIENoaWxkQ29udGV4dE1hcDo6aXRl
cmF0b3IgaSA9IG1fY2hpbGRDb250ZXh0cy5iZWdpbigpOworICAgIGZvciAoOyBpICE9IG1fY2hp
bGRDb250ZXh0cy5lbmQoKTsgKytpKSB7CisgICAgICAgIGktPmZpcnN0LT5mbHVzaCgpOwogICAg
IH0KIAogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c3luY2hyb25pemVUcmVlcyIsIHRoaXMsIDApOwotICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9yb290TGF5ZXIuZ2V0KCksIG1f
cm9vdENDTGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLCBtX3Jvb3RDQ0xheWVy
SW1wbC5nZXQoKSk7CiAgICAgfQogCiAKQEAgLTYyMSw4ICs2MTIsMTEgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgIGVsc2UKICAgICAgICAgbV9yZW5kZXJT
dXJmYWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7CiAKLSAgICBpZiAo
aXNDb21wb3NpdGluZ09mZnNjcmVlbigpKQorICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9m
ZnNjcmVlbikgewogICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOworICAg
ICAgICAvLyBUT0RPRDogbWlnaHQgaGF2ZSB0byBjYWxsCisgICAgICAgIC8vIG1fcm9vdENDTGF5
ZXJJbXBsLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKKyAgICB9CiB9CiAKIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQpAQCAt
NjMxLDExICs2MjUsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVy
cyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCiAKICAgICBpZiAoIXJvb3RMYXllci0+cmVuZGVy
U3VyZmFjZSgpKQogICAgICAgICByb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAg
ICByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQ
b2ludCgwLCAwKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUoKSkpOworICAgIHJvb3RMYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50KDAsIDAp
LCBtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkuc2l6ZSgpKSk7CiAKLSAgICBJbnRSZWN0
IHJvb3RTY2lzc29yUmVjdChtX3ZpZXdwb3J0VmlzaWJsZVJlY3QpOworICAgIEludFJlY3Qgcm9v
dFNjaXNzb3JSZWN0KG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKSk7CiAgICAgLy8gVGhl
IHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Nyb2xsIG9mZnNldC4KLSAgICBy
b290U2Npc3NvclJlY3QubW92ZSgtbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uLngoKSwgLW1fdmll
d3BvcnRTY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX293
bmVyLT52aWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkueCgpLCAtbV9vd25lci0+dmlld3BvcnRTY3Jv
bGxQb3NpdGlvbigpLnkoKSk7CiAgICAgcm9vdExheWVyLT5zZXRTY2lzc29yUmVjdChyb290U2Np
c3NvclJlY3QpOwogCiAgICAgTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CkBAIC03
NjEsNyArNzU1LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnBhaW50TGF5ZXJDb250
ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXkKIAogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiB7Ci0gICAgaWYgKG1fdmlld3BvcnRW
aXNpYmxlUmVjdC5pc0VtcHR5KCkgfHwgIW1fcm9vdExheWVyKQorICAgIGlmIChtX293bmVyLT52
aWV3cG9ydFZpc2libGVSZWN0KCkuaXNFbXB0eSgpIHx8ICFyb290TGF5ZXIoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xh
eWVycyIsIHRoaXMsIDApOwpAQCAtNzcwLDExICs3NjQsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAKICAgICBpZiAoIXJvb3REcmF3TGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSkKICAgICAgICAgcm9vdERyYXdMYXllci0+Y3JlYXRlUmVuZGVyU3Vy
ZmFjZSgpOwotICAgIHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJl
Y3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUoKSkp
OworICAgIHJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50
UmVjdChJbnRQb2ludCgwLCAwKSwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLnNpemUo
KSkpOwogCi0gICAgSW50UmVjdCByb290U2Npc3NvclJlY3QobV92aWV3cG9ydFZpc2libGVSZWN0
KTsKKyAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdChtX293bmVyLT52aWV3cG9ydFZpc2libGVS
ZWN0KCkpOwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNj
cm9sbCBvZmZzZXQuCi0gICAgcm9vdFNjaXNzb3JSZWN0Lm1vdmUoLW1fdmlld3BvcnRTY3JvbGxQ
b3NpdGlvbi54KCksIC1tX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICByb290U2Np
c3NvclJlY3QubW92ZSgtbV9vd25lci0+dmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLngoKSwgLW1f
b3duZXItPnZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS55KCkpOwogICAgIHJvb3REcmF3TGF5ZXIt
PnNldFNjaXNzb3JSZWN0KHJvb3RTY2lzc29yUmVjdCk7CiAKICAgICBDQ0xheWVyTGlzdCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OwpAQCAtNzkwLDggKzc4NCw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgIH0KIAogICAgIC8vIFRoZSBHTCB2
aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGluZyB0aGUgc2Ny
b2xsYmFycy4KLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnZpZXdwb3J0KDAs
IDAsIG1fdmlld3BvcnRWaXNpYmxlUmVjdC53aWR0aCgpLCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Qu
aGVpZ2h0KCkpKTsKLSAgICBtX3dpbmRvd01hdHJpeCA9IHNjcmVlbk1hdHJpeCgwLCAwLCBtX3Zp
ZXdwb3J0VmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LmhlaWdodCgp
KTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG1f
b3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS53aWR0aCgpLCBtX293bmVyLT52aWV3cG9ydFZp
c2libGVSZWN0KCkuaGVpZ2h0KCkpKTsKKyAgICBtX3dpbmRvd01hdHJpeCA9IHNjcmVlbk1hdHJp
eCgwLCAwLCBtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkud2lkdGgoKSwgbV9vd25lci0+
dmlld3BvcnRWaXNpYmxlUmVjdCgpLmhlaWdodCgpKTsKIAogICAgIC8vIEJpbmQgdGhlIGNvbW1v
biB2ZXJ0ZXggYXR0cmlidXRlcyB1c2VkIGZvciBkcmF3aW5nIGFsbCB0aGUgbGF5ZXJzLgogICAg
IG1fc2hhcmVkR2VvbWV0cnktPnByZXBhcmVGb3JEcmF3KCk7CkBAIC04ODcsMTQgKzg4MSw2IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVzZW50KCkKICAgICBtX2hlYWRzVXBEaXNw
bGF5LT5vblByZXNlbnQoKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFJv
b3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyKQotewotICAgIG1fcm9vdExh
eWVyID0gbGF5ZXI7Ci0gICAgaWYgKG1fcm9vdExheWVyKQotICAgICAgICBtX3Jvb3RMYXllci0+
c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLSAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+aW52
YWxpZGF0ZUVudGlyZUxheWVyKCk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpz
ZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQogewogICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBsYXllci0+Y2hp
bGRyZW4oKTsKQEAgLTkwOSwxNSArODk1LDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiAgICAgbGF5
ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp0cmFuc2ZlclJvb3RMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIG90aGVyKQotewot
ICAgIG90aGVyLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKG1fcm9vdExheWVyLmdldCgpKTsK
LSAgICBvdGhlci0+bV9yb290TGF5ZXIgPSBtX3Jvb3RMYXllci5yZWxlYXNlKCk7Ci19Ci0KIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhl
bHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKHJlY3QubWF4WCgpIDw9IG1f
dmlld3BvcnRWaXNpYmxlUmVjdC53aWR0aCgpICYmIHJlY3QubWF4WSgpIDw9IG1fdmlld3BvcnRW
aXNpYmxlUmVjdC5oZWlnaHQoKSk7CisgICAgQVNTRVJUKHJlY3QubWF4WCgpIDw9IG1fb3duZXIt
PnZpZXdwb3J0VmlzaWJsZVJlY3QoKS53aWR0aCgpICYmIHJlY3QubWF4WSgpIDw9IG1fb3duZXIt
PnZpZXdwb3J0VmlzaWJsZVJlY3QoKS5oZWlnaHQoKSk7CiAKICAgICBpZiAoIXBpeGVscykKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTAwNywyNSArOTg3LDE0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qIGxheWVyKQog
ICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogfQogCi12b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wgY29tcG9zaXRl
T2Zmc2NyZWVuKQotewotICAgIGlmIChtX2NvbXBvc2l0ZU9mZnNjcmVlbiA9PSBjb21wb3NpdGVP
ZmZzY3JlZW4pCi0gICAgICAgcmV0dXJuOwotCi0gICAgbV9jb21wb3NpdGVPZmZzY3JlZW4gPSBj
b21wb3NpdGVPZmZzY3JlZW47Ci0KLSAgICBpZiAoIW1fY29tcG9zaXRlT2Zmc2NyZWVuICYmIG1f
cm9vdENDTGF5ZXJJbXBsKQotICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbC0+Y2xlYXJSZW5kZXJT
dXJmYWNlKCk7Ci19Ci0KIExheWVyVGV4dHVyZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRP
ZmZzY3JlZW5MYXllclRleHR1cmUoKQogewotICAgIHJldHVybiBtX2NvbXBvc2l0ZU9mZnNjcmVl
biAmJiBtX3Jvb3RDQ0xheWVySW1wbCA/IG1fcm9vdENDTGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNl
KCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKKyAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3Np
dGVPZmZzY3JlZW4gJiYgbV9yb290Q0NMYXllckltcGwgPyBtX3Jvb3RDQ0xheWVySW1wbC0+cmVu
ZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpCiB7Ci0gICAgaWYg
KG1fY29tcG9zaXRlT2Zmc2NyZWVuKSB7CisgICAgaWYgKHNldHRpbmdzKCkuY29tcG9zaXRlT2Zm
c2NyZWVuKSB7CiAgICAgICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgICAgIHVzZVJl
bmRlclN1cmZhY2UoMCk7CkBAIC0xMDQ0LDcgKzEwMTMsNyBAQCBib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2Up
CiAKICAgICBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZTsKIAotICAgIGlm
ICgocmVuZGVyU3VyZmFjZSA9PSBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlICYmICFtX2NvbXBvc2l0
ZU9mZnNjcmVlbikgfHwgKCFyZW5kZXJTdXJmYWNlICYmIG1fY29tcG9zaXRlT2Zmc2NyZWVuKSkg
eworICAgIGlmICgocmVuZGVyU3VyZmFjZSA9PSBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlICYmICFz
ZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikgfHwgKCFyZW5kZXJTdXJmYWNlICYmIHNldHRp
bmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuKSkgewogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIDApKTsKICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2UpCiAgICAgICAgICAgICBzZXREcmF3
Vmlld3BvcnRSZWN0KHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCksIHRydWUpOwpAQCAtMTE0
MCw3ICsxMTA5LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNjaXNzb3JUb1Jl
Y3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpCiAgICAgLy8gb2YgdGhlIEdMIHNjaXNzb3Ig
aXMgdGhlIGJvdHRvbSBvZiBvdXIgbGF5ZXIuCiAgICAgLy8gQnV0LCBpZiByZW5kZXJpbmcgdG8g
b2Zmc2NyZWVuIHRleHR1cmUsIHdlIHJldmVyc2Ugb3VyIHNlbnNlIG9mICd1cHNpZGUgZG93bicu
CiAgICAgaW50IHNjaXNzb3JZOwotICAgIGlmIChtX2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IG1f
ZGVmYXVsdFJlbmRlclN1cmZhY2UgJiYgIW1fY29tcG9zaXRlT2Zmc2NyZWVuKQorICAgIGlmICht
X2N1cnJlbnRSZW5kZXJTdXJmYWNlID09IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgJiYgIXNldHRp
bmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuKQogICAgICAgICBzY2lzc29yWSA9IG1fY3VycmVudFJl
bmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkuaGVpZ2h0KCkgLSAoc2Npc3NvclJlY3QubWF4WSgp
IC0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS55KCkpOwogICAgIGVsc2UK
ICAgICAgICAgc2Npc3NvclkgPSBzY2lzc29yUmVjdC55KCkgLSBjb250ZW50UmVjdC55KCk7CkBA
IC0xMzU5LDEwICsxMzI4LDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVw
U2hhcmVkT2JqZWN0cygpCiBTdHJpbmcgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpsYXllclRyZWVB
c1RleHQoKSBjb25zdAogewogICAgIFRleHRTdHJlYW0gdHM7Ci0gICAgaWYgKG1fcm9vdExheWVy
LmdldCgpKSB7Ci0gICAgICAgIHRzIDw8IG1fcm9vdExheWVyLT5sYXllclRyZWVBc1RleHQoKTsK
KyAgICBpZiAocm9vdExheWVyKCkpIHsKKyAgICAgICAgdHMgPDwgcm9vdExheWVyKCktPmxheWVy
VHJlZUFzVGV4dCgpOwogICAgICAgICB0cyA8PCAiUmVuZGVyU3VyZmFjZXM6XG4iOwotICAgICAg
ICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIDEsIG1fcm9vdExheWVyLmdldCgpKTsKKyAgICAgICAg
ZHVtcFJlbmRlclN1cmZhY2VzKHRzLCAxLCByb290TGF5ZXIoKSk7CiAgICAgfQogICAgIHJldHVy
biB0cy5yZWxlYXNlKCk7CiB9CkBAIC0xNDA4LDcgKzEzNzcsNyBAQCBib29sIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKQogICAgIHJldHVybiAobV9jb250
ZXh0LmdldCgpLT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBM
YXllckNocm9taXVtKiBsYXllcikgY29uc3QKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
dW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQsIGNvbnN0IExheWVy
Q2hyb21pdW0qIGxheWVyKSBjb25zdAogewogICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgp
KQogICAgICAgICBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5kdW1wU3VyZmFjZSh0cywgaW5kZW50
KTsKQEAgLTE0MTcsNzQgKzEzODYsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVt
cFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBMYXllcgogICAgICAg
ICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIGluZGVudCwgbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0
KCkpOwogfQogCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsIDogcHVibGljIENDTGF5
ZXJUcmVlSG9zdEltcGwgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGw+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGll
bnQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbChjbGllbnQsIGxh
eWVyUmVuZGVyZXIpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFBy
ZXNlbnQoKQotICAgIHsKLSAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAg
ICAgICAgYm9vbCBjb250ZXh0TG9zdDsKLSAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhj
cmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbDo6ZHJh
d0xheWVyc09uTWFpblRocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbiks
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbnRleHRMb3N0KSkpOwotICAgICAgICBjb21wbGV0
aW9uLndhaXQoKTsKLQotICAgICAgICAvLyBGSVhNRTogU2VuZCB0aGUgIlVwZGF0ZVJlY3QiIG1l
c3NhZ2UgdXAgdG8gdGhlIFJlbmRlcldpZGdldCBbb3IgbW92ZXBsdWdpbiBlcXVpdmFsZW50cy4u
Ll0KLQotICAgICAgICAvLyBGSVhNRTogaGFuZGxlIGNvbnRleHQgbG9zdAotICAgICAgICBpZiAo
Y29udGV4dExvc3QpCi0gICAgICAgICAgICBGQVRBTCgiTGF5ZXJSZW5kZXJlckNocm9taXVtSW1w
bCBkb2VzIG5vdCBoYW5kbGUgY29udGV4dCBsb3N0IHlldC4iKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
KiBjbGllbnQsIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKLSAgICAgICAg
OiBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCkKLSAgICAgICAgLCBtX2xheWVyUmVuZGVyZXIo
bGF5ZXJSZW5kZXJlcikgeyB9Ci0KLSAgICB2b2lkIGRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGNvbnRleHRMb3N0KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgICAgICBpZiAobV9sYXllclJlbmRl
cmVyLT5yb290TGF5ZXIoKSkgewotICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5
ZXJzKCk7Ci0gICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKLQotICAgICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRl
eHQoKTsKLSAgICAgICAgICAgICpjb250ZXh0TG9zdCA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAqY29udGV4dExvc3QgPSBmYWxzZTsK
LSAgICAgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Ci0gICAgfQotCi0gICAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiBtX2xheWVyUmVuZGVyZXI7Ci19OwotCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hy
b21pdW1JbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHk+
IGNyZWF0ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eShs
YXllclJlbmRlcmVyKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpjcmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8
TGF5ZXJSZW5kZXJlckNocm9taXVtKj4oaG9zdCgpKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIpCi0gICAgICAgIDogQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KGxheWVyUmVu
ZGVyZXIpIHsgfQotfTsKLQotUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCi17Ci0g
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gcHJveHkgPSBMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsUHJveHk6OmNyZWF0ZSh0aGlzKTsKLSAgICBwcm94eS0+c3RhcnQoKTsKLSAg
ICByZXR1cm4gcHJveHkucmVsZWFzZSgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCmluZGV4IGNhYzA3NTRiMDhhMDA0ZWMwZThlZGQyYjI1MjhlNTY0NzI1
NzM4NjguLmI3YWNjZWRhYmM4OTQ3NTMyYTI0MGE2Y2I1ZTZkM2YyNzNmZjY4ZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC02OSw1MiArNjksNDQgQEAgY2xhc3MgQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNz
IEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgTGF5ZXJQ
YWludGVyQ2hyb21pdW07CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBv
c2l0ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KLWNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1
bSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgeworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVt
IDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXll
clRyZWVIb3N0Q2xpZW50KiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVu
dFBhaW50LCBib29sIGFjY2VsZXJhdGVEcmF3aW5nKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqLCBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPik7CiAKLSAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7Cisg
ICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CisKKyAgICBjb25zdCBDQ1NldHRp
bmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnNldHRpbmdzKCk7IH0KKwor
ICAgIENDTGF5ZXJUcmVlSG9zdCogb3duZXIoKSB7IHJldHVybiBtX293bmVyOyB9CisgICAgY29u
c3QgQ0NMYXllclRyZWVIb3N0KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KKwor
ICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXll
cigpOyB9CisgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9vd25lci0+cm9vdExheWVyKCk7IH0KIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KCk7CiAgICAgYm9vbCBjb250ZXh0U3VwcG9ydHNNYXBTdWIoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRleHRTdXBwb3J0c01hcFN1YjsgfQogI2lmIFVTRShTS0lBKQotICAgIEdyQ29udGV4dCog
c2tpYUNvbnRleHQoKTsKKyAgICBzdGF0aWMgYm9vbCBjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRl
ZFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgR3JDb250ZXh0KiBza2lhQ29udGV4
dCgpIHsgcmV0dXJuIG1fc2tpYUNvbnRleHQuZ2V0KCk7IH0KICNlbmRpZgogCiAgICAgdm9pZCBp
bnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCi0gICAg
dm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CisgICAgdm9p
ZCByb290TGF5ZXJDaGFuZ2VkKCk7CisgICAgdm9pZCB2aWV3cG9ydENoYW5nZWQoKTsKIAogICAg
IC8vIHVwZGF0ZXMgYW5kIGRyYXdzIHRoZSBjdXJyZW50IGxheWVycyBvbnRvIHRoZSBiYWNrYnVm
ZmVyCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKICAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAot
ICAgIC8vIFNldCBieSBXZWJWaWV3SW1wbCB3aGVuIGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIHJ1
bm5pbmcuCi0gICAgLy8gRklYTUU6IFdoZW4gd2UgbW92ZSBzY2hlZHVsaW5nIGludG8gdGhlIGNv
bXBvc2l0b3IsIHdlIGNhbiByZW1vdmUgdGhpcyBmbGFnLgotICAgIHZvaWQgc2V0SXNBbmltYXRp
bmcoYm9vbCBhbmltYXRpbmcpIHsgbV9hbmltYXRpbmcgPSBhbmltYXRpbmc7IH0KLSAgICBib29s
IGlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpbmc7IH0KLQogICAgIC8vIHdh
aXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAgICAgdm9pZCBmaW5pc2goKTsKIAogICAgIC8v
IHB1dHMgYmFja2J1ZmZlciBvbnNjcmVlbgogICAgIHZvaWQgcHJlc2VudCgpOwogCi0gICAgSW50
U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Qu
c2l6ZSgpOyB9Ci0KLSAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21p
dW0+KTsKLSAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXll
ci5nZXQoKTsgfQotICAgIHZvaWQgdHJhbnNmZXJSb290TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBvdGhlcik7Ci0KLSAgICBib29sIGhhcmR3YXJlQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7IH0KLSAgICBib29sIGFjY2VsZXJhdGVEcmF3aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRlRHJhd2luZzsgfSAKLQotICAgIHZvaWQgc2V0
Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wpOwotICAgIGJvb2wgaXNDb21wb3NpdGluZ09mZnNjcmVl
bigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT2Zmc2NyZWVuOyB9Ci0KICAgICB1bnNpZ25l
ZCBjcmVhdGVMYXllclRleHR1cmUoKTsKICAgICB2b2lkIGRlbGV0ZUxheWVyVGV4dHVyZSh1bnNp
Z25lZCk7CiAKQEAgLTE1OSwyMiArMTUxLDIyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVsZWFz
ZVRleHR1cmVzKCk7CiAKKyAgICB2b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJD
aHJvbWl1bSopOworCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyBib29sIHNfaW5QYWludExh
eWVyQ29udGVudHM7CiAjZW5kaWYKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiBMYXllckxpc3Q7CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBs
PiA+IENDTGF5ZXJMaXN0OwogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOwot
CiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFwaGljc0NvbnRleHQzRCosIGludD4g
Q2hpbGRDb250ZXh0TWFwOwogCiAgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgbW92ZWQg
dG8gdGhlIENDTGF5ZXJUcmVlSG9zdEltcGwgd2hlbiB0aGF0IGNsYXNzIGV4aXN0cy4KICAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdENDTGF5ZXJJbXBsOwogCi0gICAgTGF5ZXJSZW5kZXJl
ckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJv
b2wgYWNjZWxlcmF0ZURyYXdpbmcpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVy
VHJlZUhvc3QqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgYm9vbCBpbml0
aWFsaXplKCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CiAgICAg
dm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cygpOwpAQCAtMjAwLDMyICsxOTIsMjYgQEAgcHJp
dmF0ZToKIAogICAgIHN0YXRpYyBib29sIGNvbXBhcmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5
ZXJJbXBsPiYsIGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mKTsKIAotICAgIHZvaWQgZHVtcFJl
bmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBMYXllckNocm9taXVtKikgY29u
c3Q7CisgICAgdm9pZCBkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQs
IGNvbnN0IExheWVyQ2hyb21pdW0qKSBjb25zdDsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJl
ZE9iamVjdHMoKTsKICAgICB2b2lkIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAKLSAgICB2b2lk
IHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSopOwotCi0gICAgSW50UmVj
dCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Q7Ci0gICAgSW50UmVjdCBtX3ZpZXdwb3J0Q29udGVudFJl
Y3Q7Ci0gICAgSW50UG9pbnQgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uOworICAgIC8vIEZvciB0
aGlzIHJldiwgdGhlIExSQyBpcyBvd25lZCBieSB0aGUgQ0NMYXllclRyZWVIb3N0LiBUaGlzIHdp
bGwgY2hhbmdlIGluIGEgZm9sbG93aW5nIHJldmlzaW9uLgorICAgIENDTGF5ZXJUcmVlSG9zdCog
bV9vd25lcjsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJpeDsK
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3dpbmRvd01hdHJpeDsKIAotICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKKyAgICAvLyBUT0RPOiBzcGxpdCB0aGUgdGV4dHVy
ZSB1cGRhdGVyIGFuZCB0aWxlciBpbnRvIHR3byBwYXJ0cy4gVGhlbiwKKyAgICAvLyBrZWVwIHRo
ZSBpbXBsIGhlcmUgYW5kIHB1dCB0aGUgcGFpbnRpbmctc2lkZSBvbiB0aGUgTGF5ZXJUcmVlSG9z
dAogICAgIE93blB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBtX3Jvb3RMYXllclRleHR1cmVVcGRh
dGVyOwogICAgIE93blB0cjxMYXllclRpbGVyQ2hyb21pdW0+IG1fcm9vdExheWVyQ29udGVudFRp
bGVyOwogCi0gICAgYm9vbCBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7Ci0gICAgYm9vbCBtX2FjY2Vs
ZXJhdGVEcmF3aW5nOwotCiAgICAgT3duUHRyPExheWVyTGlzdD4gbV9jb21wdXRlZFJlbmRlclN1
cmZhY2VMYXllckxpc3Q7CiAKICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fY3VycmVudFJlbmRlclN1
cmZhY2U7CiAgICAgdW5zaWduZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkOwotICAgIGJvb2wg
bV9jb21wb3NpdGVPZmZzY3JlZW47CiAKICAgICAvLyBNYXhpbXVtIHRleHR1cmUgZGltZW5zaW9u
cyBzdXBwb3J0ZWQuCiAgICAgaW50IG1fbWF4VGV4dHVyZVNpemU7CkBAIC0yNjEsMTAgKzI0Nyw2
IEBAIHByaXZhdGU6CiAgICAgQ2hpbGRDb250ZXh0TWFwIG1fY2hpbGRDb250ZXh0czsKIAogICAg
IGJvb2wgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7Ci0gICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0
c1RleHR1cmVGb3JtYXRCR1JBOwotICAgIGJvb2wgbV9jb250ZXh0U3VwcG9ydHNSZWFkRm9ybWF0
QkdSQTsKLQotICAgIGJvb2wgbV9hbmltYXRpbmc7CiAKICAgICBDQ1JlbmRlclN1cmZhY2UqIG1f
ZGVmYXVsdFJlbmRlclN1cmZhY2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IGJkNTA2NDFiOTI4NjMyMDYyYTAzYjY5ZDI4MzVlNzUyZmMwN2RhMTcuLmU3YjgxZDgyNmUz
MzZhMGI2YjVlYWY5NTQ4MDY2OTU1ZmNjNzUxMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXRU
ZXh0dXJlVXBkYXRlZCgpCiAgICAgbV90ZXh0dXJlVXBkYXRlZCA9IHRydWU7CiAgICAgLy8gSWYg
V2ViR0wgY29tbWFuZHMgYXJlIGlzc3VlZCBvdXRzaWRlIG9mIGEgdGhlIGFuaW1hdGlvbiBjYWxs
YmFja3MsIHRoZW4gdXNlCiAgICAgLy8gY2FsbCByYXRlTGltaXRPZmZzY3JlZW5Db250ZXh0Q0hS
T01JVU0oKSB0byBrZWVwIHRoZSBjb250ZXh0IGZyb20gZ2V0dGluZyB0b28gZmFyIGFoZWFkLgot
ICAgIGlmIChsYXllclJlbmRlcmVyKCkgJiYgIWxheWVyUmVuZGVyZXIoKS0+aXNBbmltYXRpbmco
KSAmJiBtX2NvbnRleHRTdXBwb3J0c1JhdGVMaW1pdGluZ0V4dGVuc2lvbiAmJiAhbV9yYXRlTGlt
aXRpbmdUaW1lci5pc0FjdGl2ZSgpKQorICAgIGlmIChsYXllclJlbmRlcmVyKCktPm93bmVyKCkt
PmFuaW1hdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzUmF0ZUxpbWl0aW5nRXh0ZW5zaW9uICYm
ICFtX3JhdGVMaW1pdGluZ1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcmF0ZUxpbWl0aW5n
VGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXku
Y3BwCmluZGV4IDdmMmNlYzc3ODVjZjBmMGUwZjFhZDNkNDEzMzU0YzgzOTM2YTE1ZmMuLjMzMzU1
MzY0MTdjMjU4MzNjM2NhZWVjNGVkYjI4OGE5NjcyOTIwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVh
ZHNVcERpc3BsYXkuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KQEAgLTg4LDggKzg5LDggQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KCkK
ICAgICAvLyBVc2UgYSBmdWxsc2NyZWVuIHRleHR1cmUgb25seSBpZiB3ZSBuZWVkIHRvLi4uCiAg
ICAgSW50U2l6ZSBodWRTaXplOwogICAgIGlmIChtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSkgewot
ICAgICAgICBodWRTaXplLnNldFdpZHRoKG1pbigyMDQ4LCBtX2xheWVyUmVuZGVyZXItPnZpZXdw
b3J0U2l6ZSgpLndpZHRoKCkpKTsKLSAgICAgICAgaHVkU2l6ZS5zZXRIZWlnaHQobWluKDIwNDgs
IG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgaHVk
U2l6ZS5zZXRXaWR0aChtaW4oMjA0OCwgbV9sYXllclJlbmRlcmVyLT5vd25lcigpLT52aWV3cG9y
dFZpc2libGVSZWN0KCkud2lkdGgoKSkpOworICAgICAgICBodWRTaXplLnNldEhlaWdodChtaW4o
MjA0OCwgbV9sYXllclJlbmRlcmVyLT5vd25lcigpLT52aWV3cG9ydFZpc2libGVSZWN0KCkuaGVp
Z2h0KCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBodWRTaXplLnNldFdpZHRoKDUxMik7CiAg
ICAgICAgIGh1ZFNpemUuc2V0SGVpZ2h0KDEyOCk7CkBAIC0yNDgsMTYgKzI0OSw5IEBAIHZvaWQg
Q0NIZWFkc1VwRGlzcGxheTo6b25QcmVzZW50KCkKICAgICBtX2N1cnJlbnRGcmFtZU51bWJlciAr
PSAxOwogfQogCi12b2lkIENDSGVhZHNVcERpc3BsYXk6OnNldFNob3dGUFNDb3VudGVyKGJvb2wg
c2hvdykKK2Jvb2wgQ0NIZWFkc1VwRGlzcGxheTo6ZW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgbV9z
aG93RlBTQ291bnRlciA9IHNob3c7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJh
dygpOwotfQotCi12b2lkIENDSGVhZHNVcERpc3BsYXk6OnNldFNob3dQbGF0Zm9ybUxheWVyVHJl
ZShib29sIHNob3cpCi17Ci0gICAgbV9zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzaG93OwotICAg
IG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICByZXR1cm4gbV9sYXllclJl
bmRlcmVyLT5zZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJlZSB8fCBtX2xheWVyUmVuZGVy
ZXItPnNldHRpbmdzKCkuc2hvd0ZQU0NvdW50ZXI7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXku
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuaAppbmRleCBmMDQzMzE3ZjU1ZmQ5N2MxYmZmNjJhZWZmYWFiMmQwMDYyMjBiNGRh
Li5mNDlkMDA5ZWU2NzlhZGI1ZTQ4ZDU3ZjBhYjRlZjI2MzE5NTQwNDA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NIZWFkc1VwRGlzcGxheS5oCkBAIC01NCwxMyArNTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBv
bkZyYW1lQmVnaW4oZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgdm9pZCBvblByZXNlbnQoKTsKIAot
ICAgIHZvaWQgc2V0U2hvd0ZQU0NvdW50ZXIoYm9vbCBlbmFibGUpOwotICAgIGJvb2wgc2hvd0ZQ
U0NvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3Nob3dGUFNDb3VudGVyOyB9Ci0KLSAgICB2b2lk
IHNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShib29sIGVuYWJsZSk7Ci0gICAgYm9vbCBzaG93UGxh
dGZvcm1MYXllclRyZWUoKSBjb25zdCB7IHJldHVybiBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZTsg
fQotCi0gICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXll
clRyZWUgfHwgbV9zaG93RlBTQ291bnRlcjsgfQorICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0Owog
ICAgIHZvaWQgZHJhdygpOwogCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4gUHJvZ3JhbTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGQ3Nzk1YzcxMDQzOWM5YjIxOWNkMGY4
NGQ5MjI0ZmUzZGM1N2IyMmYuLjQwMTBjNGEwYzllMTg1NDFhZGEyZTI2ZTAxYjIwZDQzYWZmYTVm
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjYsMjYgKzI2LDUzIEBA
CiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKIAorI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgiCiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ0xheWVyVHJlZUhvc3Q6
OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCkKK1Bhc3NSZWZQ
dHI8Q0NMYXllclRyZWVIb3N0PiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShDQ0xheWVyVHJlZUhv
c3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCit7CisgICAgUmVm
UHRyPENDTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdCA9IGFkb3B0UmVmKG5ldyBDQ0xheWVy
VHJlZUhvc3QoY2xpZW50LCBzZXR0aW5ncykpOworICAgIGlmICghbGF5ZXJUcmVlSG9zdC0+aW5p
dGlhbGl6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbGF5ZXJUcmVlSG9zdDsK
K30KKworQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xp
ZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQogICAgIDogbV9jbGllbnQo
Y2xpZW50KQogICAgICwgbV9mcmFtZU51bWJlcigwKQorICAgICwgbV9zZXR0aW5ncyhzZXR0aW5n
cykKIHsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmluaXQoKQorYm9vbCBDQ0xheWVyVHJl
ZUhvc3Q6OmluaXRpYWxpemUoKQogeworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGYWxsIGJhY2sgdG8g
bm9uLWFjY2VsZXJhdGVkIGRyYXdpbmcgaWYgdGhlIHVuZGVybHlpbmcgY29udGV4dCBkb2VzIG5v
dCBzdXBwb3J0IGl0LgorI2lmIFVTRShTS0lBKQorICAgIGlmIChtX3NldHRpbmdzLmFjY2VsZXJh
dGVQYWludGluZyAmJiAhTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0U3VwcG9ydHNBY2Nl
bGVyYXRlZFBhaW50aW5nKGNvbnRleHQuZ2V0KCkpKQorICAgICAgICBtX3NldHRpbmdzLmFjY2Vs
ZXJhdGVQYWludGluZyA9IGZhbHNlOworI2VuZGlmCisKKyAgICBtX2xheWVyUmVuZGVyZXIgPSBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKKyAgICBpZiAoIW1f
bGF5ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAjaWYgVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQotICAgIG1fcHJveHkgPSBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5
KCk7CisgICAgbV9wcm94eSA9IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMp
OwogICAgIEFTU0VSVChtX3Byb3h5LT5pc1N0YXJ0ZWQoKSk7CiAgICAgbV9wcm94eS0+c2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKTsKICNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIEND
TGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgpCkBAIC02OCwyNyArOTUsMTc5IEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpCiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIHsKKyAgICBtX2Fu
aW1hdGluZyA9IHRydWU7CiAgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdp
blRpbWUpOworICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKIFBhc3NPd25QdHI8Q0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RD
b21taXR0ZXIoKQogewotICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0
ZSgpOworICAgIC8vIFRPRE86IG9ubHkgY2FsbGVkIGluIHRocmVhZGluZyBjYXNlLCBmaXggd2hl
biBwb3NzaWJsZS4KKyAgICByZXR1cm4gbnVsbHB0cjsgLy8gIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyPigpOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0
SW1wbENsaWVudCogY2xpZW50KQoreworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IHJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmNyZWF0ZShjbGllbnQsIHJlbmRlcmVyKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIEND
TGF5ZXJUcmVlSG9zdDo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+
Y29udGV4dCgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJh
Y2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworI2lmIFVTRShUSFJFQURF
RF9DT01QT1NJVElORykKKyAgICAvLyBUT0RPOiBuZWVkIHRvIGltcGxlbWVudCB0aGlzCisjZWxz
ZQorICAgIGRvQ29tcG9zaXRlKCk7CisgICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1ZmZl
clBpeGVscyhwaXhlbHMsIHJlY3QpOworI2VuZGlmCit9CisKK1Bhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpCit7
CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVSb290TGF5ZXJQYWludGVyKCk7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQoreworI2lmIFVTRShUSFJF
QURFRF9DT01QT1NJVElORykKKyAgICAvLyBUT0RPOiBuZWVkIHRvIGltcGxlbWVudCB0aGlzCisj
ZWxzZQorICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7CisjZW5kaWYKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkKK3sKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRpcnR5UmVjdCk7CiB9CiAKIHZvaWQgQ0NM
YXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAjaWYgVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQorICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnNldE5l
ZWRzUmVkcmF3IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKTsKKyNlbHNlCisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiAjZW5kaWYK
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKIHsKLSAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOwogI2lm
IFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOwogICAgIG1fcHJveHktPnNldE5lZWRzUmVk
cmF3KCk7CisjZWxzZQorICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlm
Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXll
ckNocm9taXVtPiBsYXllcikKK3sKKyAgICBtX3Jvb3RMYXllciA9IGxheWVyOworICAgIGlmICht
X3Jvb3RMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPnNldExheWVyUmVuZGVyZXIobV9sYXll
clJlbmRlcmVyLmdldCgpKTsKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnJvb3RMYXllckNoYW5nZWQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQoreworICAgIGJv
b2wgdmlzaWJsZVJlY3RDaGFuZ2VkID0gbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUoKSAhPSB2
aXNpYmxlUmVjdC5zaXplKCk7CisKKyAgICBtX3ZpZXdwb3J0VmlzaWJsZVJlY3QgPSB2aXNpYmxl
UmVjdDsKKyAgICBtX3ZpZXdwb3J0Q29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKKyAgICBtX3Zp
ZXdwb3J0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKKworICAgIGlmICh2aXNpYmxl
UmVjdENoYW5nZWQpIHsKKyAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRDaGFuZ2VkKCk7CisgICAgfQorICAgIHNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxl
KGJvb2wgdmlzaWJsZSkKK3sKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIGlm
ICghdmlzaWJsZSkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNlVGV4dHVyZXMoKTsK
ICNlbmRpZgogfQogCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0Ojpkb0NvbXBvc2l0ZSgpCit7CisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7
CisgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKKyAgICBtX2xheWVyUmVuZGVy
ZXItPmRyYXdMYXllcnMoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZShi
b29sIGZpbmlzaCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21wb3Np
dGUiLCB0aGlzLCAwKTsKKworICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQpIHsK
KyAgICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hl
dGhlciBvciBub3QgaXQgc3VjY2VlZGVkCisgICAgICAgIC8vIGluIGNyZWF0aW5nIGEgbmV3IGNv
bnRleHQuCisgICAgICAgIHJlYWxsb2NhdGVSZW5kZXJlcigpOworICAgICAgICBtX3JlY3JlYXRp
bmdHcmFwaGljc0NvbnRleHQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIERvIG5vdCBjb21wb3NpdGUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBpcyBhbHJlYWR5
IGxvc3QuCisgICAgaWYgKCFtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9zaXRvckNvbnRleHRMb3N0
KCkpIHsKKyAgICAgICAgZG9Db21wb3NpdGUoKTsKKworICAgICAgICAvLyBQdXQgcmVzdWx0IG9u
c2NyZWVuLgorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKyAgICB9CisKKyAg
ICBpZiAobV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgIC8vIFRyeWluZyB0byByZWNvdmVyIHRoZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2lsbCBub3Qg
d29yayBpZiBHUFUgcHJvY2VzcworICAgICAgICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1c2UgR3B1
Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdlIHdpbGwgb25seSBiZQorICAgICAgICAvLyBjYWxs
ZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVydGluZyBv
dXIKKyAgICAgICAgLy8gcmVjb3ZlcnkgYXR0ZW1wdHMgaGVyZS4gSW5zdGVhZCwgd2UgZGV0YWNo
IHRoZSByb290IGxheWVyIGZyb20gdGhlCisgICAgICAgIC8vIHJlbmRlcmVyLCByZWNyZWF0ZSB0
aGUgcmVuZGVyZXIgYXQgdGhlIG5leHQgbWVzc2FnZSBsb29wIGl0ZXJhdGlvbgorICAgICAgICAv
LyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgorICAgICAgICBtX3JlY3JlYXRpbmdH
cmFwaGljc0NvbnRleHQgPSB0cnVlOworICAgICAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
OworICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnJlYWxsb2NhdGVSZW5kZXJlcigp
Cit7CisgICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1
cm4gMCwgaW4gdGhhdCBjYXNlIGZhbGwgYmFjayB0byBzb2Z0d2FyZWUKKyAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENv
bnRleHQzRCgpOworICAgIGlmICghY29udGV4dCkgeworICAgICAgICBtX2NsaWVudC0+ZGlkUmVj
cmVhdGVHcmFwaGljc0NvbnRleHQoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gQ2hlY2sgdGhhdCB0aGUgY29udGV4dCBzdXBwb3J0cyBhY2NlbGVyYXRlZCBkcmF3aW5n
LCBpZiBuZWVkZWQuCisgICAgaWYgKG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nICYmICFM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmco
Y29udGV4dC5nZXQoKSkpCisgICAgICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0g
ZmFsc2U7CisKKyAgICAvLyBUaGUgbmV3IGdyYXBoY2lzIGNvbnRleHQgbWlnaHQgbm90IHN1cHBv
cnQgYWxsIHRoZSBleHRlbnNpb25zIHdlIG5lZWQsCisgICAgLy8gYXQgd2hpY2ggcG9pbnQgZmFs
bCBiYWNrIHRvIHNvZnR3YXJlLgorICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxh
eWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0
KTsKKworICAgIC8vIElmIGNyZWF0aW5nIHRoZSBzZWNvbmQgY29udGV4dCBmYWlsZWQsCisgICAg
aWYgKCFsYXllclJlbmRlcmVyKSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBo
aWNzQ29udGV4dChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBSZWF0
dGFjaCB0aGUgcm9vdCBsYXllci4gQ2hpbGQgbGF5ZXJzIHdpbGwgZ2V0IHJlYXR0YWNoZWQgYXMg
YSBzaWRlIGVmZmVjdCBvZiB1cGRhdGVMYXllcnNSZWN1cnNpdmUuCisgICAgbGF5ZXJSZW5kZXJl
ci0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgbV9s
YXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKKworICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0
ZUdyYXBoaWNzQ29udGV4dCh0cnVlKTsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCmluZGV4IDI4ODk1MGVmZTEzYTc5NjBkNjAzZjdlYjNmN2UyMDFlNjc5NDZlYTcu
LmRjMmMzNGEwOTkzNWIzNjhjNzM3MjdjMmE3NjU4NTQzYzEwNmRmNTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oCkBAIC0yNSw4ICsyNSwxMCBAQAogI2lmbmRlZiBDQ0xheWVyVHJlZUhv
c3RfaAogI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RfaAogCisjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CkBAIC0zNiwzOSArMzgsMTA5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDTGF5ZXJU
cmVlSG9zdEltcGw7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50OwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CitjbGFzcyBMYXllckNocm9taXVtOworY2xhc3MgTGF5ZXJQYWludGVy
Q2hyb21pdW07CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAKIGNsYXNzIENDTGF5ZXJU
cmVlSG9zdENsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlv
dXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkgPSAwOwotCisg
ICAgdmlydHVhbCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjcmVhdGVSb290TGF5
ZXJQYWludGVyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29u
dGV4dChib29sIHN1Y2Nlc3MpID0gMDsKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQor
ICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpID0gMDsKKyNlbmRpZgogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdENsaWVudCgpIHsgfQogfTsKIAorc3Ry
dWN0IENDU2V0dGluZ3MgeworICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOworICAgIGJvb2wg
Y29tcG9zaXRlT2Zmc2NyZWVuOworICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CisgICAgYm9vbCBz
aG93UGxhdGZvcm1MYXllclRyZWU7Cit9OworCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3QgOiBwdWJs
aWMgUmVmQ291bnRlZDxDQ0xheWVyVHJlZUhvc3Q+IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBD
Q0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50Kik7Ci0gICAgdm9pZCBpbml0KCk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBjcmVhdGUoQ0NMYXllclRy
ZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJU
cmVlSG9zdCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZy
YW1lQmVnaW5UaW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKKworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJ
bXBsQ2xpZW50Kik7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOwogCisgICAgYm9vbCBhbmltYXRp
bmcoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGluZzsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW5n
KGJvb2wgYW5pbWF0aW5nKSB7IG1fYW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9IC8vIENhbiBiZSBy
ZW1vdmVkIHdoZW4gbm9uLXRocmVhZGVkIHNjaGVkdWxpbmcgbW92ZXMgaW5zaWRlLgorCisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKworICAgIHZvaWQgY29tcG9zaXRlQW5kUmVh
ZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiBjcmVhdGVSb290TGF5ZXJQYWludGVyKCk7CisKKyAgICB2b2lk
IGZpbmlzaEFsbFJlbmRlcmluZygpOworCiAgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZU51bWJlcjsgfQogCisgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVj
dChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworCiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIAorICAgIHZvaWQgc2V0Um9v
dExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4pOworICAgIExheWVyQ2hyb21pdW0qIHJv
b3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisgICAgY29uc3QgTGF5ZXJD
aHJvbWl1bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0K
KworICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0
aW5nczsgfQorCisgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbik7CisKKyAgICBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydENvbnRlbnRSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV92aWV3cG9ydENvbnRlbnRSZWN0OyB9CisgICAgY29uc3QgSW50UG9pbnQmIHZp
ZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2Nyb2xsUG9z
aXRpb247IH0KKyAgICBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV92aWV3cG9ydFZpc2libGVSZWN0OyB9CisKKyAgICB2b2lkIHNldFZpc2libGUo
Ym9vbCk7CisKKyAgICAvLyBUZW1wb3JhcnkgaG9tZSBmb3IgdGhlIG5vbi10aHJlYWRlZCByZW5k
ZXJpbmcgcGF0aC4KKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgY29t
cG9zaXRlKGJvb2wgZmluaXNoKTsKKyNlbmRpZgorCisKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBjcmVhdGVMYXllclRyZWVIb3N0
SW1wbFByb3h5KCkgPSAwOworICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJl
ZUhvc3RDbGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAKIHByaXZhdGU6CisgICAgYm9vbCBp
bml0aWFsaXplKCk7CisKKyAgICAvLyBUZW1wb3JhcnkgaG9tZSBmb3IgdGhlIG5vbi10aHJlYWRl
ZCByZW5kZXJpbmcgcGF0aC4KKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZv
aWQgZG9Db21wb3NpdGUoKTsKKyAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOworCisgICAg
Ym9vbCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQ7CisgICAgUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOworI2VuZGlmCisKKyAgICBib29sIG1fYW5pbWF0
aW5nOworCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKKwogICAgIGludCBt
X2ZyYW1lTnVtYmVyOworCiAgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gbV9w
cm94eTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKKyAgICBDQ1Nl
dHRpbmdzIG1fc2V0dGluZ3M7CisKKyAgICBJbnRSZWN0IG1fdmlld3BvcnRWaXNpYmxlUmVjdDsK
KyAgICBJbnRSZWN0IG1fdmlld3BvcnRDb250ZW50UmVjdDsKKyAgICBJbnRQb2ludCBtX3ZpZXdw
b3J0U2Nyb2xsUG9zaXRpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCmluZGV4IGEzYWEyYmEyMTBkYmRkZDE2YjljYTFhZDEyZTYxMTU1NThiMmFiMzcu
LjRlMmQxYjg0M2MxODMyY2ZhZmExNDM1NDg2MmNiZmExNTM4NjY5YWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0yNiwxOCArMjYsMjkgQEAKIAogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZC5oIgorI2luY2x1ZGUgImNj
L0NDTWFpblRocmVhZFRhc2suaCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKICNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ0xheWVy
VHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGll
bnQqIGNsaWVudCkKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVI
b3N0SW1wbDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1Jl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKQoreworICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NMYXllclRyZWVIb3N0SW1wbChjbGllbnQsIHJlbmRlcmVyKSk7Cit9CisKK0ND
TGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1w
bENsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVy
ZXIpCiAgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigw
KQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQor
ICAgICwgbV9sYXllclJlbmRlcmVyKHJlbmRlcmVyKQogICAgICwgbV9yZWRyYXdQZW5kaW5nKGZh
bHNlKQogewogfQpAQCAtNzAsNyArODEsMTYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpk
cmF3TGF5ZXJzKCkKIAogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50IiwgdGhpcywgMCk7Ci0gICAgICAgIGRyYXdMYXll
cnNBbmRQcmVzZW50KCk7CisgICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Cisg
ICAgICAgIGJvb2wgY29udGV4dExvc3Q7CisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2so
Y3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250ZXh0TG9zdCkpKTsKKyAgICAgICAgY29tcGxldGlvbi53
YWl0KCk7CisKKyAgICAgICAgLy8gRklYTUU6IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBtZXNzYWdl
IHVwIHRvIHRoZSBSZW5kZXJXaWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1aXZhbGVudHMuLi5dCisK
KyAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKKyAgICAgICAgaWYgKGNvbnRl
eHRMb3N0KQorICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9l
cyBub3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7CiAgICAgfQogCiAgICAgKyttX2ZyYW1l
TnVtYmVyOwpAQCAtOTYsNCArMTE2LDE5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0
TmVlZHNSZWRyYXcoKQogICAgIG1fY2xpZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFk
KCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93
bmVyKCktPnJvb3RMYXllcigpKSB7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVy
cygpOworICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKworICAgICAgICBHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAg
ICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CisgICAgfSBl
bHNlCisgICAgICAgICpjb250ZXh0TG9zdCA9IGZhbHNlOworICAgIGNvbXBsZXRpb24tPnNpZ25h
bCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggMDgw
NWM3YTRlYjU4MjVjYzkxOTQ0MTBmMWYxMTI1NTE5ZGY1ZGE1Mi4uYjYxZjdiMmZiZGQxZjJlOTNk
NGRiNWUwZWIyMzVlZDJjNmQxYzkyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaApAQCAtMzEsNiArMzEsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEND
Q29tcGxldGlvbkV2ZW50OworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworCiAvLyBQcm92
aWRlcyBzY2hlZHVsaW5nIGluZnJhc3RydWN0dXJlIGZvciBhIENDTGF5ZXJUcmVlSG9zdEltcGwK
IGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgIHsKIHB1YmxpYzoKQEAgLTQ1LDE0ICs0
OCwxMyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RJbXBsKTsKIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUoQ0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCosIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPik7CiAg
ICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGJl
Z2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAKICAgICB2
b2lkIGRyYXdMYXllcnMoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnQo
KSA9IDA7CiAKICAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVt
YmVyOyB9CiAKQEAgLTYzLDEyICs2NSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTb3VyY2VG
cmFtZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1l
TnVtYmVyOyB9CiAKIHByb3RlY3RlZDoKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBs
KENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4pOworICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCosIGJvb2wqIGNvbnRleHRMb3N0KTsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKICAg
ICBpbnQgbV9mcmFtZU51bWJlcjsKIAogcHJpdmF0ZToKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBs
Q2xpZW50KiBtX2NsaWVudDsKICAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX3JlZHJh
d1BlbmRpbmc7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5LmNwcAppbmRleCA2OGEyNTFhZTQxM2Y5M2RhNTUzYmJmYThkOGQ2OTRlMDVmZWFiODg3Li5l
MjU1YTk0ZTNjZTE4OGUyMjZmYzBhMjNjM2RhZjQ5NzM3OWM5YWI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKQEAgLTIwMSw3ICsyMDEsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChp
c0NDVGhyZWFkKCkpOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVI
b3N0SW1wbCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBtX2xheWVyVHJlZUhvc3QtPmNy
ZWF0ZUxheWVyVHJlZUhvc3RJbXBsKHRoaXMpOwogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDU5Mzc0YjMyOWJmZmRiM2ZmYTYyZmNm
MTQzOTY5NmI0Y2NjNjY5ODIuLmI2M2NmNWJhZjgyOTk2YWNkZWRkZWY5YTQyMDQxMjdkMDZlZTA1
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTEtMDgt
MDUgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
TWFrZSBXZWJWaWV3SW1wbCBwb2ludCBhdCBDQ0xheWVyVHJlZUhvc3QgYW5kIHJlbGF0ZWQgc2Vw
YXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjU3OTEKKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIExheWVyUmVuZGVyZXJDaHJvbWl1bSBi
ZWNvbWVzIGluY3JlYXNpbmdseSByZXNwb25zaWJsZQorICAgICAgICBmb3IgcmVuZGVyaW5nLCB3
aGlsZSByZW5kZXIgc2NoZWR1bGluZyBhbmQgdHJlZSBob3N0aW5nIG1vdmVzIGludG8gdGhlCisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHB1YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9X
ZWJTZXR0aW5nc0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6Oldl
YlNldHRpbmdzSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2V0QWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCk6CisgICAgICAgICogc3JjL1dlYlNldHRpbmdzSW1wbC5o
OgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OmFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpyZXNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9v
dFBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdExh
eWVyTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJv
b3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJv
b3RMYXllclJlY3QpOgorICAgICAgICAoV2ViS2l0OjpnZXRDb21wb3NpdG9yU2V0dGluZ3MpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZVJvb3RMYXllclBh
aW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRWaXNpYmlsaXR5U3RhdGUpOgorICAgICAgICAqIHNy
Yy9XZWJWaWV3SW1wbC5oOgorCiAyMDExLTA4LTAzICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5A
Z29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbVGltZWxpbmVdIEhvdmVyIG9u
IHBhaW50IGV2ZW50cyBhbmQgc2VlIHJlY3Qgb3V0bGluZSBhcm91bmQgdGhhdCBhcmVhLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5kZXggMjVlNzZhODZj
OWZiNjM3OTk0MjBmZTVjMWFiNWVmZjc2MmFiZGMwMC4uMzkwZTk4YWQxZmQ1MjQ4M2I5NmEzMDYz
NDAwMmI3OGNlMjRlYTlmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJT
ZXR0aW5ncy5oCkBAIC0xMTQsNiArMTE0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
ZXRMZWdhY3lBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldE1pbmltdW1BY2NlbGVyYXRlZDJkQ2FudmFzU2l6ZShpbnQpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChib29sKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCkgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKaW5kZXggMDRh
MzQyODE0ZTJiYmY2YjBiMjUwNDNlOWRiM2IxZGY3YzJmNzM1YS4uOWJiZDZhNTMyOWIwODA2YTAz
Nzc5ZWE4ZmUyZDZlMmQ2Njc2ZDA5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbChTZXR0aW5ncyogc2V0dGluZ3Mp
CiAgICAgOiBtX3NldHRpbmdzKHNldHRpbmdzKQorICAgICwgbV9hY2NlbGVyYXRlZERyYXdpbmdF
bmFibGVkKGZhbHNlKQogICAgICwgbV9jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKGZhbHNlKQog
ICAgICwgbV9zaG93RlBTQ291bnRlcihmYWxzZSkKICAgICAsIG1fc2hvd1BsYXRmb3JtTGF5ZXJU
cmVlKGZhbHNlKQpAQCAtMzUwLDcgKzM1MSw3IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yQW5pbWF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiAK
IHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBtX3NldHRpbmdzLT5zZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVk
KGVuYWJsZWQpOworICAgIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCA9IGVuYWJsZWQ7CiB9
CiAKIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChi
b29sIGVuYWJsZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1w
bC5oCmluZGV4IDU4ZjI1Y2NmOGUwYjdlMjU2MWNmMDgwOWMzOGEzYjEyOTA0YTJkYzMuLjZkZDI5
MjBmOTI5ZjQ5NjhmZWRkMDZiNWUzMTI4ZWRiM2YyOTcyMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCkBAIC0xMDcsNiArMTA3LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBzZXRMZWdhY3lBY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZChi
b29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXpl
KGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoYm9v
bCk7CisgICAgdmlydHVhbCBib29sIGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0TWVtb3J5SW5mb0VuYWJsZWQoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEh5cGVybGlu
a0F1ZGl0aW5nRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCk7CkBAIC0xMjMsNiArMTI0LDcgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIFdlYkNvcmU6OlNldHRpbmdzKiBtX3NldHRpbmdzOworICAgIGJvb2wg
bV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkOwogICAgIGJvb2wgbV9jb21wb3NpdGVUb1RleHR1
cmVFbmFibGVkOwogICAgIGJvb2wgbV9zaG93RlBTQ291bnRlcjsKICAgICBib29sIG1fc2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCmluZGV4IDE2NmQ4ZDQ0MWQzYTEwNTI4Y2MxZDJlNjdkZThjNmI2ZTAwNjhlOTguLjZjYjk0
YWE5NDUxNjk4ODg5NWI4NzE4YjNjN2E5OWUwYjRiNTM3MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlICJJ
bnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgogI2luY2x1
ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCkBAIC0zMzksNyArMzQwLDcgQEAgV2ViVmll
d0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICAgICAsIG1fdGFic1Rv
TGlua3MoZmFsc2UpCiAgICAgLCBtX2RyYWdTY3JvbGxUaW1lcihhZG9wdFB0cihuZXcgRHJhZ1Nj
cm9sbFRpbWVyKSkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLCBtX2xh
eWVyUmVuZGVyZXIoMCkKKyAgICAsIG1fbGF5ZXJUcmVlSG9zdCgwKQogICAgICwgbV9yb290R3Jh
cGhpY3NMYXllcigwKQogICAgICwgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoZmFs
c2UpCiAgICAgLCBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZChmYWxzZSkKQEAgLTEwMTYsNyAr
MTAxNyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlc2l6ZShjb25zdCBXZWJTaXplJiBuZXdTaXpl
KQogICAgIGlmIChtX2NsaWVudCkgewogICAgICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKCkpIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAg
ICAgICB1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQoKTsKKyAgICAgICAgICAgIHVwZGF0ZUxh
eWVyVHJlZVZpZXdwb3J0KCk7CiAjZW5kaWYKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IFdlYlJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsK
QEAgLTEwNDMsMTEgKzEwNDQsMTUgQEAgdm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZShkb3VibGUg
ZnJhbWVCZWdpblRpbWUpCiAgICAgaWYgKHdlYmZyYW1lKSB7CiAgICAgICAgIEZyYW1lVmlldyog
dmlldyA9IHdlYmZyYW1lLT5mcmFtZVZpZXcoKTsKICAgICAgICAgaWYgKHZpZXcpIHsKLSAgICAg
ICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgICAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5zZXRJc0FuaW1hdGluZyh0cnVlKTsKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQorICAgICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldEFuaW1hdGluZyh0cnVlKTsKKyNlbmRpZgogICAgICAgICAgICAgdmll
dy0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1w
KGZyYW1lQmVnaW5UaW1lKSk7Ci0gICAgICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAg
ICAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0SXNBbmltYXRpbmcoZmFsc2UpOworI2lm
ICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgICAgICAgICBpZiAobV9sYXllclRyZWVI
b3N0KQorICAgICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW5nKGZhbHNl
KTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0xMDk3LDcgKzExMDIsNyBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqIGNh
bnZhcywgY29uc3QgSW50UmVjdCYgcmVjdAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUoKSkpOwogICAgIFJlZlB0cjxCeXRl
QXJyYXk+IHBpeGVsQXJyYXkoQnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICogcmVjdC5o
ZWlnaHQoKSAqIDQpKTsKICAgICBpZiAoaW1hZ2VCdWZmZXIuZ2V0KCkgJiYgcGl4ZWxBcnJheS5n
ZXQoKSkgewotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBp
eGVsQXJyYXktPmRhdGEoKSwgaW52ZXJ0UmVjdCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
Y29tcG9zaXRlQW5kUmVhZGJhY2socGl4ZWxBcnJheS0+ZGF0YSgpLCBpbnZlcnRSZWN0KTsKICAg
ICAgICAgaW1hZ2VCdWZmZXItPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxBcnJheS5n
ZXQoKSwgcmVjdC5zaXplKCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBJbnRQ
b2ludCgpKTsKICAgICAgICAgZ2Muc2F2ZSgpOwogICAgICAgICBnYy50cmFuc2xhdGUoSW50U2l6
ZSgwLCBiaXRtYXBIZWlnaHQpKTsKQEAgLTExMTQsMTggKzExMTksMTIgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCiB7CiAg
ICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICAg
ICAgLy8gRklYTUU6IGRvIHJlYWRiYWNrIGluIHRocmVhZGVkIGNvbXBvc2l0aW5nIG1vZGUgcmF0
aGVyIHRoYW4gcmV0dXJuaW5nIG5vdGhpbmcKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAg
ICAgIGRvQ29tcG9zaXRlKCk7Ci0KICAgICAgICAgLy8gSWYgYSBjYW52YXMgd2FzIHBhc3NlZCBp
biwgd2UgdXNlIGl0IHRvIGdyYWIgYSBjb3B5IG9mIHRoZQogICAgICAgICAvLyBmcmVzaGx5LXJl
bmRlcmVkIHBpeGVscy4KICAgICAgICAgaWYgKGNhbnZhcykgewogICAgICAgICAgICAgLy8gQ2xp
cCByZWN0IHRvIHRoZSBjb25maW5lcyBvZiB0aGUgcm9vdExheWVyVGV4dHVyZS4KICAgICAgICAg
ICAgIEludFJlY3QgcmVzaXplUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJlc2l6ZVJlY3QuaW50
ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9sYXllclJlbmRlcmVyLT52aWV3cG9ydFNpemUo
KSkpOworICAgICAgICAgICAgcmVzaXplUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgbV9sYXllclRyZWVIb3N0LT52aWV3cG9ydFZpc2libGVSZWN0KCkuc2l6ZSgpKSk7CiAg
ICAgICAgICAgICBkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyhjYW52YXMsIHJlc2l6ZVJlY3QpOwog
ICAgICAgICB9CiAjZW5kaWYKQEAgLTExNTEsNDYgKzExNTAsMjAgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6dGhlbWVDaGFuZ2VkKCkKICAgICB2aWV3LT5pbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVjdCk7
CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVn
aW5UaW1lKQotewotICAgIGFuaW1hdGUoZnJhbWVCZWdpblRpbWUpOwotICAgIGxheW91dCgpOwot
fQotCiB2b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCiB7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
LSAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7CisgICAgbV9sYXllclRyZWVI
b3N0LT5zZXROZWVkc1JlZHJhdygpOwogI2Vsc2UKLSAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0lt
cGw6OmNvbXBvc2l0ZSIsIHRoaXMsIDApOwotCi0gICAgaWYgKG1fcmVjcmVhdGluZ0dyYXBoaWNz
Q29udGV4dCkgewotICAgICAgICAvLyByZWFsbG9jYXRlUmVuZGVyZXIgd2lsbCByZXF1ZXN0IGEg
cmVwYWludCB3aGV0aGVyIG9yIG5vdCBpdCBzdWNjZWVkZWQKLSAgICAgICAgLy8gaW4gY3JlYXRp
bmcgYSBuZXcgY29udGV4dC4KLSAgICAgICAgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7Ci0gICAgICAg
IG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IGZhbHNlOworICAgIEFTU0VSVChpc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSk7CisgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKLSAgICAvLyBEbyBub3QgY29tcG9zaXRlIGlmIHRoZSBjb21wb3NpdG9y
IGNvbnRleHQgaXMgYWxyZWFkeSBsb3N0LgotICAgIGlmICghbV9sYXllclJlbmRlcmVyLT5pc0Nv
bXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIGRvQ29tcG9zaXRlKCk7Ci0KLSAgICAg
ICAgLy8gUHV0IHJlc3VsdCBvbnNjcmVlbi4KLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVz
ZW50KCk7Ci0gICAgfQorICAgIGlmIChtX3BhZ2VPdmVybGF5KQorICAgICAgICBtX3BhZ2VPdmVy
bGF5LT51cGRhdGUoKTsKIAotICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9zaXRvckNv
bnRleHRMb3N0KCkpIHsKLSAgICAgICAgLy8gVHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNvbnRleHQg
cmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBwcm9jZXNzCi0gICAgICAgIC8vIGRpZWQu
IFRoaXMgaXMgYmVjYXVzZSBHcHVDaGFubmVsSG9zdDo6T25FcnJvck1lc3NhZ2Ugd2lsbCBvbmx5
IGJlCi0gICAgICAgIC8vIGNhbGxlZCBhdCB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIG1lc3Nh
Z2UgbG9vcCwgcmV2ZXJ0aW5nIG91cgotICAgICAgICAvLyByZWNvdmVyeSBhdHRlbXB0cyBoZXJl
LiBJbnN0ZWFkLCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIgZnJvbSB0aGUKLSAgICAgICAgLy8g
cmVuZGVyZXIsIHJlY3JlYXRlIHRoZSByZW5kZXJlciBhdCB0aGUgbmV4dCBtZXNzYWdlIGxvb3Ag
aXRlcmF0aW9uCi0gICAgICAgIC8vIGFuZCByZXF1ZXN0IGEgcmVwYWludCB5ZXQgYWdhaW4uCi0g
ICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7Ci0gICAgICAgIHNldFJv
b3RMYXllck5lZWRzRGlzcGxheSgpOwotICAgIH0KKyAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBv
c2l0ZShmaW5pc2gpOwogI2VuZGlmCiAjZW5kaWYKIH0KQEAgLTI0NTQsOCArMjQyNyw4IEBAIHZv
aWQgV2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIGxheWVyKQogdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdFBsYXRmb3JtTGF5ZXIoV2ViQ29y
ZTo6UGxhdGZvcm1MYXllciogbGF5ZXIpCiB7CiAgICAgc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKGxheWVyKTsKLSAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnNldFJvb3RMYXllcihsYXllcik7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIobGF5ZXIpOwogCiAgICAg
SW50UmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwog
ICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSkKQEAgLTI0NjcsMzEgKzI0
NDAsMzAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdFBsYXRmb3JtTGF5ZXIoV2ViQ29yZTo6
UGxhdGZvcm1MYXllciogbGF5ZXIpCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290TGF5ZXJOZWVk
c0Rpc3BsYXkoKQogewogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICBpZiAobV9s
YXllclJlbmRlcmVyKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogI2Vsc2UKICAgICBtX2NsaWVudC0+c2No
ZWR1bGVDb21wb3NpdGUoKTsKICNlbmRpZgogfQogCi0KIHZvaWQgV2ViVmlld0ltcGw6OnNjcm9s
bFJvb3RMYXllclJlY3QoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KQogewotICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOworICAgIHVw
ZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7
CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgQVNTRVJU
KG1fbGF5ZXJUcmVlSG9zdCk7CiAKICAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gcGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygpOwogICAg
IEludFJlY3QgZGlydHlSZWN0ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhyZWN0KTsKLSAgICB1
cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQoKTsKLSAgICBtX2xheWVyUmVuZGVyZXItPmludmFs
aWRhdGVSb290TGF5ZXJSZWN0KGRpcnR5UmVjdCk7CisgICAgdXBkYXRlTGF5ZXJUcmVlVmlld3Bv
cnQoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRpcnR5
UmVjdCk7CiAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7CiB9CiAKQEAgLTI1MjYsNiAr
MjQ5OCwxNiBAQCBwcml2YXRlOgogICAgIFdlYlZpZXdJbXBsKiBtX3dlYlZpZXdJbXBsOwogfTsK
IAorV2ViQ29yZTo6Q0NTZXR0aW5ncyBnZXRDb21wb3NpdG9yU2V0dGluZ3MoV2ViU2V0dGluZ3Mq
IHNldHRpbmdzKQoreworICAgIFdlYkNvcmU6OkNDU2V0dGluZ3MgcmVzOworICAgIHJlcy5hY2Nl
bGVyYXRlUGFpbnRpbmcgPSBzZXR0aW5ncy0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpOwor
ICAgIHJlcy5jb21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5ncy0+Y29tcG9zaXRlVG9UZXh0dXJl
RW5hYmxlZCgpOworICAgIHJlcy5zaG93RlBTQ291bnRlciA9IHNldHRpbmdzLT5zaG93RlBTQ291
bnRlcigpOworICAgIHJlcy5zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzZXR0aW5ncy0+c2hvd1Bs
YXRmb3JtTGF5ZXJUcmVlKCk7CisgICAgcmV0dXJuIHJlczsKK30KKwogdm9pZCBXZWJWaWV3SW1w
bDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogewogICAg
IFBsYXRmb3JtQnJpZGdlOjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiR1BVLnNldElzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSIsIGFjdGl2ZSAqIDIgKyBtX2lzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZSwgNCk7CkBAIC0yNTM4LDIwICsyNTIwLDE5IEBAIHZvaWQgV2ViVmlld0ltcGw6
OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAg
Ly8gV2UgbmVlZCB0byBmaW5pc2ggYWxsIEdMIHJlbmRlcmluZyBiZWZvcmUgc2VuZGluZwogICAg
ICAgICAvLyBkaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoZmFsc2UpIHRvIHByZXZl
bnQKICAgICAgICAgLy8gZmxpY2tlcmluZyB3aGVuIGNvbXBvc2l0aW5nIHR1cm5zIG9mZi4KLSAg
ICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZmluaXNoKCk7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPmZpbmlzaEFsbFJlbmRlcmluZygpOwogICAgICAgICBtX2NsaWVudC0+ZGlk
QWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKGZhbHNlKTsKLSAgICB9IGVsc2UgaWYgKG1f
bGF5ZXJSZW5kZXJlcikgeworICAgIH0gZWxzZSBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAg
ICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgdXBk
YXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7CisgICAgICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdw
b3J0KCk7CiAKICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZyh0cnVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0lt
cGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSh0cnVlKSIsIHRoaXMsIDApOwog
Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRl
KHRoaXMsIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgbV9wYWdlLT5z
ZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwotICAgICAgICBpZiAobV9s
YXllclJlbmRlcmVyKSB7Ci0gICAgICAgICAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3Mo
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0ID0gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUodGhp
cywgZ2V0Q29tcG9zaXRvclNldHRpbmdzKHNldHRpbmdzKCkpKTsKKyAgICAgICAgaWYgKG1fbGF5
ZXJUcmVlSG9zdCkgewogICAgICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyh0cnVlKTsKICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVk
ID0gZmFsc2U7CkBAIC0yNTY3LDI0ICsyNTQ4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAgICBwYWdlKCkt
Pm1haW5GcmFtZSgpLT52aWV3KCktPnNldENsaXBzUmVwYWludHMoIW1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlKTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6ZG9Db21wb3NpdGUoKQot
ewotICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwotICAgIGlmICghbV9sYXllclJlbmRlcmVy
KSB7Ci0gICAgICAgIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShmYWxzZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKCkpOwotICAgIGlmICghcGFnZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9wYWdlT3ZlcmxheSkKLSAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7Ci0KLSAg
ICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZHJhd0xheWVycygpOwotfQorI2VuZGlmCiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IFdlYlZpZXdJbXBsOjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKIHsKQEAgLTI1OTcs
NDYgKzI1NjEsMzggQEAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6
OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQogICAgIHJldHVybiBjb250ZXh0OwogfQog
Ci12b2lkIFdlYlZpZXdJbXBsOjpyZWFsbG9jYXRlUmVuZGVyZXIoKQorUGFzc093blB0cjxMYXll
clBhaW50ZXJDaHJvbWl1bT4gV2ViVmlld0ltcGw6OmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKQog
ewotICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0dXJu
IDAsIGluIHRoYXQgY2FzZSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSB3aWxsIGFsc28g
cmV0dXJuIDAuCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJl
ciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIFdlYlZpZXdJbXBsQ29udGVu
dFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgbV9wYWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERy
YXdpbmdFbmFibGVkKCkpOworICAgIHJldHVybiBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpj
cmVhdGUodGhpcyk7Cit9CiAKLSAgICAvLyBSZWF0dGFjaCB0aGUgcm9vdCBsYXllci4gIENoaWxk
IGxheWVycyB3aWxsIGdldCByZWF0dGFjaGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgdXBkYXRlTGF5
ZXJzUmVjdXJzaXZlLgotICAgIGlmIChsYXllclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+dHJhbnNmZXJSb290TGF5ZXIobGF5ZXJSZW5kZXJlci5nZXQoKSk7Ci0gICAgICAg
IG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7Ci0gICAgICAgIHVwZGF0ZUxheWVyUmVu
ZGVyZXJTZXR0aW5ncygpOwordm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgYW5pbWF0ZShmcmFtZUJlZ2luVGltZSk7CisgICAg
bGF5b3V0KCk7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6IEluIE1hY09TIG5ld0NvbnRleHQtPnJl
c2hhcGUgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCB0bwotICAgICAgICAvLyBhbGxvY2F0ZSBJ
T1N1cmZhY2VzLiBBbGwgY2FsbHMgdG8gY3JlYXRlIGEgY29udGV4dCBmb2xsb3dlZCBieQotICAg
ICAgICAvLyByZXNoYXBlIHNob3VsZCByZWFsbHkgYmUgZXh0cmFjdGVkIGludG8gb25lIGZ1bmN0
aW9uOyBpdCBpcyBub3QKLSAgICAgICAgLy8gaW1tZWRpYXRlbHkgb2J2aW91cyB0aGF0IEdyYXBo
aWNzQ29udGV4dDNEIG9iamVjdCB3aWxsIG5vdAotICAgICAgICAvLyBmdW5jdGlvbiBwcm9wZXJs
eSB1bnRpbCBpdHMgcmVzaGFwZSBtZXRob2QgaXMgY2FsbGVkLgotICAgICAgICBsYXllclJlbmRl
cmVyLT5jb250ZXh0KCktPnJlc2hhcGUobWF4KDEsIG1fc2l6ZS53aWR0aCksIG1heCgxLCBtX3Np
emUuaGVpZ2h0KSk7Ci0gICAgICAgIHNldFJvb3RQbGF0Zm9ybUxheWVyKG1fbGF5ZXJSZW5kZXJl
ci0+cm9vdExheWVyKCkpOwordm9pZCBXZWJWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0Nv
bnRleHQoYm9vbCBzdWNjZXNzKQoreworICAgIHNldFJvb3RQbGF0Zm9ybUxheWVyKHN1Y2Nlc3Mg
PyBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpIDogMCk7CiAKLSAgICAgICAgLy8gRm9yY2Vz
IFZpZXdIb3N0TXNnX0RpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyB0byBiZSBzZW50
IHNvCi0gICAgICAgIC8vIHRoYXQgdGhlIGJyb3dzZXIgcHJvY2VzcyBjYW4gcmVhY3F1aXJlIHN1
cmZhY2VzLgotICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKHRydWUpOwotICAgICAgICBpZiAobV9wYWdlT3ZlcmxheSkKLSAgICAgICAgICAgIG1fcGFn
ZU92ZXJsYXktPnVwZGF0ZSgpOwotICAgIH0gZWxzZQotICAgICAgICBzZXRSb290UGxhdGZvcm1M
YXllcigwKTsKKyAgICBpZiAoc3VjY2VzcykgeworICAgICAgLy8gRm9yY2VzIFZpZXdIb3N0TXNn
X0RpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyB0byBiZSBzZW50IHNvCisgICAgICAv
LyB0aGF0IHRoZSBicm93c2VyIHByb2Nlc3MgY2FuIHJlYWNxdWlyZSBzdXJmYWNlcy4KKyAgICAg
IG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CisgICAg
ICBpZiAobV9wYWdlT3ZlcmxheSkKKyAgICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsK
KyAgICB9CiB9Ci0jZW5kaWYKIAotdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJl
clNldHRpbmdzKCkKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQordm9pZCBXZWJWaWV3
SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUoKQogewotICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIp
OwotICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29tcG9zaXRlT2Zmc2NyZWVuKHNldHRpbmdzKCkt
PmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKSk7Ci0KLSAgICBDQ0hlYWRzVXBEaXNwbGF5KiBo
dWQgPSBtX2xheWVyUmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5KCk7Ci0gICAgaHVkLT5zZXRTaG93
RlBTQ291bnRlcihzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpKTsKLSAgICBodWQtPnNldFNo
b3dQbGF0Zm9ybUxheWVyVHJlZShzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKSk7
CisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiB9CisjZW5kaWYKIAotdm9pZCBX
ZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCkKK3ZvaWQgV2ViVmlld0lt
cGw6OnVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCkKIHsKICAgICBpZiAoIXBhZ2UoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjY0NiwxNSArMjYwMiwxNSBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRh
dGVMYXllclJlbmRlcmVyVmlld3BvcnQoKQogICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3
LT52aXNpYmxlQ29udGVudFJlY3QodHJ1ZSk7CiAgICAgSW50UG9pbnQgc2Nyb2xsKHZpZXctPnNj
cm9sbFgoKSwgdmlldy0+c2Nyb2xsWSgpKTsKIAotICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Vmll
d3BvcnQodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBzY3JvbGwpOworICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0Vmlld3BvcnQodmlzaWJsZVJlY3QsIGNvbnRlbnRSZWN0LCBzY3JvbGwpOwogfQog
CiBXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViVmlld0ltcGw6OmdyYXBoaWNzQ29udGV4dDNEKCkK
IHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgaWYgKG1fcGFnZS0+c2V0
dGluZ3MoKS0+YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSAmJiBhbGxvd3NBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgewotICAg
ICAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpleHRyYWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobV9sYXllclJlbmRlcmVy
LT5jb250ZXh0KCkpOworICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CisgICAgICAgICAg
ICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2ViQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtX2xheWVyVHJlZUhvc3QtPmNvbnRl
eHQoKSk7CiAgICAgICAgICAgICBpZiAod2ViQ29udGV4dCAmJiAhd2ViQ29udGV4dC0+aXNDb250
ZXh0TG9zdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB3ZWJDb250ZXh0OwogICAgICAgICB9
CkBAIC0yNjg2LDggKzI2NDIsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRWaXNpYmlsaXR5U3Rh
dGUoV2ViUGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUsCiAjZW5kaWYKIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKCkgJiYgdmlzaWJpbGl0eVN0YXRlID09IFdlYlBhZ2VWaXNpYmlsaXR5U3Rh
dGVIaWRkZW4pCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7Cisg
ICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKQorICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNldFZpc2libGUodmlzaWJpbGl0eVN0YXRlID09IFdlYlBhZ2VWaXNpYmlsaXR5
U3RhdGVWaXNpYmxlKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAppbmRleCA0NDhhZWM3YTA4NjI4MzRlMWQ1MjRlYjIxMmRiNDBiNTFiM2UwNGYx
Li5iZDQwZGRlNjlmYWFlNDNiNDg3NTVjMDY3NDM2YWU3MTllNDE5MmNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTQ2LDkgKzQ2LDkgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50SW1wbC5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmgiCiAjaW5jbHVkZSAiUGFnZU92ZXJs
YXkuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtMjA5LDYgKzIwOSwxMSBA
QCBwdWJsaWM6CiAgICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xpZW50CiAgICAgdmlydHVhbCB2b2lk
IGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RD
b250ZXh0M0QoKTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6TGF5ZXJQYWludGVy
Q2hyb21pdW0+IGNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKTsKKyNpZiAhVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOworI2Vu
ZGlmCiAKICAgICAvLyBXZWJWaWV3SW1wbAogCkBAIC00MzMsMTEgKzQzOCwxMiBAQCBwcml2YXRl
OgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wpOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9T
SVRJTkcpCiAgICAgdm9pZCBkb0NvbXBvc2l0ZSgpOworI2VuZGlmCiAgICAgdm9pZCBkb1BpeGVs
UmVhZGJhY2tUb0NhbnZhcyhXZWJDYW52YXMqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAg
ICAgdm9pZCByZWFsbG9jYXRlUmVuZGVyZXIoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVy
ZXJTZXR0aW5ncygpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7Cisg
ICAgdm9pZCB1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpOwogI2VuZGlmCiAKICAgICBXZWJWaWV3
Q2xpZW50KiBtX2NsaWVudDsKQEAgLTU1NCw3ICs1NjAsNyBAQCBwcml2YXRlOgogCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFdlYkNvcmU6OkludFJlY3QgbV9yb290TGF5
ZXJTY3JvbGxEYW1hZ2U7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bT4gbV9sYXllclJlbmRlcmVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q+
IG1fbGF5ZXJUcmVlSG9zdDsKICAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX3Jvb3RHcmFw
aGljc0xheWVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmU7CiAg
ICAgYm9vbCBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103303</attachid>
            <date>2011-08-08 15:17:45 -0700</date>
            <delta_ts>2011-08-09 10:12:57 -0700</delta_ts>
            <desc>All tests should pass.</desc>
            <filename>bug-65791-20110808151743.patch</filename>
            <type>text/plain</type>
            <size>78191</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI0ODgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4M2UxMjk5OWQ5MDY3YzRj
NDMzYmY1YzcwOTcyMzE1N2Q0MTE0NjJmLi4zMmJlYjY5ZjcwOGU0MzNhMzU5YmMyYTY2YjRlMTJk
NTdjMTE1YTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMDUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBXZWJW
aWV3SW1wbCBwb2ludCBhdCBDQ0xheWVyVHJlZUhvc3QgYW5kIHJlbGF0ZWQgc2VwYXJhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3OTEKKwor
ICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIExheWVyUmVuZGVyZXJDaHJvbWl1bSBiZWNvbWVzIGlu
Y3JlYXNpbmdseSByZXNwb25zaWJsZQorICAgICAgICBmb3IgcmVuZGVyaW5nLCB3aGlsZSByZW5k
ZXIgc2NoZWR1bGluZyBhbmQgdHJlZSBob3N0aW5nIG1vdmVzIGludG8gdGhlCisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0
dXJlVXBkYXRlcklmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlVGV4dHVyZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlk
YXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OnJvb3RMYXllckNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp2aWV3cG9ydENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRv
RGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJl
bmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpz
ZXRTY2lzc29yVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6bGF5ZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpvd25lcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OnNraWFDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9t
aXVtOjpzZXRUZXh0dXJlVXBkYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRz
VXBEaXNwbGF5OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmVu
YWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZVJvb3RMYXllclBhaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlUm9vdExheWVy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNS
ZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpkb0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnJlYWxsb2NhdGVSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OnNldEFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnJvb3RM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldHRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dmlld3BvcnRDb250ZW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnZpZXdwb3J0U2Nyb2xsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp2aWV3cG9ydFZpc2libGVSZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhv
c3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09u
TWFpblRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCk6CisKIDIwMTEtMDgtMDUg
IEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW50cm9k
dWNlIGEgbmV3IFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0VHlwZSBmb3IgWEhScwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRhY2MwMzY1YWMwMTEyNjZjMGMyZTE3NjZm
ZmVjYzEzZmY2ZGI3ODkuLmIwNjc5NzExYjJiNGUxYjI0ZjRkYzM0ZDkzMzM5N2U5ZmRlMTBhNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEyMyw3ICsxMjMsNyBA
QCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVk
KCkKICAgICBpZiAobV90ZXh0dXJlVXBkYXRlcikKICAgICAgICAgcmV0dXJuOwogI2lmIFVTRShT
S0lBKQotICAgIGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVEcmF3aW5nKCkpIHsKKyAg
ICBpZiAobGF5ZXJSZW5kZXJlcigpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewog
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6
Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250ZXh0KCksIENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0
ZShtX293bmVyKSwgbGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA0ZTQwMWNjZTg4YWI5YWQyMjFiZDQ3
ZDdkZmUxOWM3M2Q1YjFmNDBlLi5lNTdhZWFhM2ZkNDVmM2NmNGVkODhiMDRkYjUxZTVhZGEzYjEx
OWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01Myw2ICs1Myw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAKQEAg
LTE0OSw2ICsxNTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBEZXJpdmVkIHR5cGVzIG11c3Qgb3Zl
cnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSBuZWVkIHRvIHJlYWN0IHRvIGEgY2hhbmdlCiAgICAg
Ly8gaW4gdGhlIExheWVyUmVuZGVyZXJDaHJvbWl1bS4KKyAgICAvLyBUT09ELCByZXBsYWNlIHdp
dGggQ0NMYXllclRyZWVIb3N0CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5
ZXJSZW5kZXJlckNocm9taXVtKik7CiAKICAgICB2b2lkIHNldE93bmVyKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogb3duZXIpIHsgbV9vd25lciA9IG93bmVyOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAppbmRleCBiZmMyOWI3OGQxZDNmNTcwODdjMGM3M2QzMDY5MjE0OGYx
MjhkNWI4Li4wMzgzYjNlZDAxMGExZGEwMzcxYzFlZGY3NTRkZTE1YWIzMWI3NGE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgiCiAjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgogI2lmIFVTRShTS0lBKQogI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgpAQCAtNDIwLDY0ICs0MTksNTkgQEAgc3RhdGljIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHNjcmVlbk1hdHJpeChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCkKICAgICByZXR1cm4gc2NyZWVuOwogfQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0
Q2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQ
YWludCwgYm9vbCBhY2NlbGVyYXRlRHJhd2luZykKK1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93
bmVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogewotICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGNsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9z
dENvbnRleHQzRCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5l
dyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY2xpZW50LCBjb250ZXh0LCBjb250ZW50UGFpbnQsIGFj
Y2VsZXJhdGVEcmF3aW5nKSkpOwotICAgIGxheWVyUmVuZGVyZXItPmluaXQoKTsKLSAgICBpZiAo
IWxheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKKyAgICBSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVy
Q2hyb21pdW0ob3duZXIsIGNvbnRleHQpKSk7CisgICAgaWYgKCFsYXllclJlbmRlcmVyLT5pbml0
aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGxheWVyUmVuZGVyZXIu
cmVsZWFzZSgpOwogfQogCi1MYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjY2VsZXJhdGVEcmF3aW5nKQot
ICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCkKLSAgICAsIG1fdmlld3BvcnRTY3JvbGxQb3Np
dGlvbihJbnRQb2ludCgtMSwgLTEpKQotICAgICwgbV9yb290TGF5ZXIoMCkKLSAgICAsIG1fYWNj
ZWxlcmF0ZURyYXdpbmcoZmFsc2UpCitMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCkKKyAgICA6IG1fb3duZXIob3duZXIpCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNl
KDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKLSAgICAsIG1fY29tcG9zaXRl
T2Zmc2NyZWVuKGZhbHNlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2NvbnRl
eHRTdXBwb3J0c1RleHR1cmVGb3JtYXRCR1JBKGZhbHNlKQotICAgICwgbV9jb250ZXh0U3VwcG9y
dHNSZWFkRm9ybWF0QkdSQShmYWxzZSkKLSAgICAsIG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwg
bV9kZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQogeworfQorCitib29sIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6aW5pdGlhbGl6ZSgpCit7CiAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNp
b25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CiAgICAgbV9jb250ZXh0U3VwcG9ydHNN
YXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwogICAg
IGlmIChtX2NvbnRleHRTdXBwb3J0c01hcFN1YikKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJl
RW5hYmxlZCgiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwotICAgIG1fY29udGV4dFN1cHBvcnRzVGV4
dHVyZUZvcm1hdEJHUkEgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4Iik7Ci0gICAgaWYgKG1fY29udGV4dFN1cHBvcnRzVGV4dHVyZUZvcm1hdEJH
UkEpCi0gICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OCIpOwotICAgIG1fY29udGV4dFN1cHBvcnRzUmVhZEZvcm1hdEJHUkEgPSBl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKLSAgICBpZiAo
bV9jb250ZXh0U3VwcG9ydHNSZWFkRm9ybWF0QkdSQSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKIAotI2lmIFVTRShTS0lBKQot
ICAgIG1fYWNjZWxlcmF0ZURyYXdpbmcgPSBhY2NlbGVyYXRlRHJhd2luZyAmJiBza2lhQ29udGV4
dCgpOwotI2VuZGlmCi0gICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJl
ZE9iamVjdHMoKTsKKyAgICBpZiAoIWluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAogI2lmIFVTRShTS0lBKQotICAgIGlmIChtX2FjY2VsZXJhdGVEcmF3
aW5nKQotICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZTo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgY29udGVudFBhaW50LCBza2lh
Q29udGV4dCgpKTsKKyAgICBpZiAoc2V0dGluZ3MoKS5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgbV9za2lhQ29u
dGV4dCA9IGFkb3B0UHRyKEdyQ29udGV4dDo6Q3JlYXRlR0xTaGFkZXJDb250ZXh0KCkpOworICAg
ICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1h
cC0+dGV4dHVyZSBjYWNoZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhUZXh0dXJlQ2Fj
aGVDb3VudCA9IDUxMjsKKyAgICAgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dh
cmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7Cisg
ICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2Fj
aGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgICAgICBtX3Jvb3RMYXllclRleHR1
cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKG1fY29udGV4
dC5nZXQoKSwgbV9vd25lci0+Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpLCBza2lhQ29udGV4dCgp
KTsKKyAgICB9CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVVw
ZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUobV9jb250ZXh0LmdldCgp
LCBjb250ZW50UGFpbnQsIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKTsKKyAgICAgICAgbV9yb290
TGF5ZXJUZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZSht
X2NvbnRleHQuZ2V0KCksIG1fb3duZXItPmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKSwgbV9jb250
ZXh0U3VwcG9ydHNNYXBTdWIpOwogCiAgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIgPSBMYXll
clRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSwgTGF5ZXJUaWxl
ckNocm9taXVtOjpOb0JvcmRlclRleGVscyk7CiAgICAgQVNTRVJUKG1fcm9vdExheWVyQ29udGVu
dFRpbGVyKTsKIAogICAgIG1faGVhZHNVcERpc3BsYXkgPSBDQ0hlYWRzVXBEaXNwbGF5OjpjcmVh
dGUodGhpcyk7CisKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmlld3BvcnQgYW5kIGNvbnRleHQg
Z2V0cyBpbml0aWFsaXplZCwgZXZlbiBpZiBpdCBpcyB0byB6ZXJvLgorICAgIHZpZXdwb3J0Q2hh
bmdlZCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06On5M
YXllclJlbmRlcmVyQ2hyb21pdW0oKQpAQCAtNDkyLDE4ICs0ODYsMjAgQEAgR3JhcGhpY3NDb250
ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29udGV4dCgpCiB9CiAKICNpZiBVU0UoU0tJ
QSkKLUdyQ29udGV4dCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpza2lhQ29udGV4dCgpCitib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGlu
ZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKLSAgICBpZiAoIW1fc2tpYUNvbnRleHQg
JiYgbV9jb250ZXh0U3VwcG9ydHNUZXh0dXJlRm9ybWF0QkdSQSAmJiBtX2NvbnRleHRTdXBwb3J0
c1JlYWRGb3JtYXRCR1JBKSB7Ci0gICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgICAgIG1fc2tpYUNvbnRleHQgPSBhZG9wdFB0cihHckNvbnRleHQ6OkNyZWF0ZUdM
U2hhZGVyQ29udGV4dCgpKTsKLSAgICAgICAgLy8gTGltaXQgdGhlIG51bWJlciBvZiB0ZXh0dXJl
cyB3ZSBob2xkIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCi0gICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4VGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7Ci0gICAgICAgIC8vIExpbWl0IHRo
ZSBieXRlcyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUg
Y2FjaGUuCi0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4VGV4dHVyZUNhY2hlQnl0ZXMg
PSA1MCAqIDEwMjQgKiAxMDI0OwotICAgICAgICBtX3NraWFDb250ZXh0LT5zZXRUZXh0dXJlQ2Fj
aGVMaW1pdHMobWF4VGV4dHVyZUNhY2hlQ291bnQsIG1heFRleHR1cmVDYWNoZUJ5dGVzKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1fc2tpYUNvbnRleHQuZ2V0KCk7CisgICAgV2ViQ29yZTo6RXh0ZW5z
aW9uczNEKiBleHRlbnNpb25zID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IikpCisg
ICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9C
R1JBODg4OCIpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGV4
dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpKQorICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5k
aWYKIApAQCAtNTE0LDE2ICs1MTAsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRl
YnVnR0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogICAgICAg
ICBMT0dfRVJST1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNv
bW1hbmQ6ICVzLCBlcnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8
aW50PihlcnJvcikpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0
ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIG1fcm9vdExh
eWVyQ29udGVudFRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOwotfQotCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVRleHR1cmVzKCkKIHsKICAgICAvLyBSZWR1Y2Vz
IHRleHR1cmUgbWVtb3J5IHVzYWdlIHRvIHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzIGJ5IGRl
bGV0aW5nIG5vbiByb290IGxheWVyCiAgICAgLy8gdGV4dHVyZXMuCi0gICAgbV9yb290TGF5ZXJD
b250ZW50VGlsZXItPnByb3RlY3RUaWxlVGV4dHVyZXMobV92aWV3cG9ydFZpc2libGVSZWN0KTsK
KyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+cHJvdGVjdFRpbGVUZXh0dXJlcyhtX293bmVy
LT52aWV3cG9ydFZpc2libGVSZWN0KCkpOwogICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
cmVkdWNlTWVtb3J5VG9MaW1pdCh0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyk7CiAgICAgbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogICAgIC8vIEV2
aWN0IGFsbCBSZW5kZXJTdXJmYWNlIHRleHR1cmVzLgpAQCAtNTM0LDc5ICs1MjUsNzkgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VUZXh0dXJlcygpCiB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoKQogewogICAgIFRSQUNFX0VW
RU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzIiwgdGhp
cywgMCk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnByZXBhcmVUb1VwZGF0ZShtX3Zp
ZXdwb3J0VmlzaWJsZVJlY3QsIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOworICAg
IG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5wcmVwYXJlVG9VcGRhdGUobV9vd25lci0+dmlld3Bv
cnRWaXNpYmxlUmVjdCgpLCBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyLmdldCgpKTsKIH0KIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIoKQogewogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHNjcm9sbDsKLSAgICBzY3JvbGwudHJhbnNsYXRlKC1tX3ZpZXdwb3J0
VmlzaWJsZVJlY3QueCgpLCAtbV92aWV3cG9ydFZpc2libGVSZWN0LnkoKSk7CisgICAgc2Nyb2xs
LnRyYW5zbGF0ZSgtbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLngoKSwgLW1fb3duZXIt
PnZpZXdwb3J0VmlzaWJsZVJlY3QoKS55KCkpOwogCi0gICAgbV9yb290TGF5ZXJDb250ZW50VGls
ZXItPmRyYXcobV92aWV3cG9ydFZpc2libGVSZWN0LCBzY3JvbGwsIDEuMGYpOworICAgIG1fcm9v
dExheWVyQ29udGVudFRpbGVyLT5kcmF3KG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKSwg
c2Nyb2xsLCAxLjBmKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpZXdw
b3J0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
IHsKLSAgICBib29sIHZpc2libGVSZWN0Q2hhbmdlZCA9IG1fdmlld3BvcnRWaXNpYmxlUmVjdC5z
aXplKCkgIT0gdmlzaWJsZVJlY3Quc2l6ZSgpOwotCi0gICAgbV92aWV3cG9ydFZpc2libGVSZWN0
ID0gdmlzaWJsZVJlY3Q7Ci0gICAgbV92aWV3cG9ydENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7
Ci0gICAgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247Ci0KLSAgICBp
ZiAodmlzaWJsZVJlY3RDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAg
ICAgICBtX2NvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgdmlzaWJsZVJlY3Qud2lkdGgoKSks
IHN0ZDo6bWF4KDEsIHZpc2libGVSZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgIC8vIFJlc2V0IHRo
ZSBjdXJyZW50IHJlbmRlciBzdXJmYWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmlld3Bv
cnQgYW5kCi0gICAgICAgIC8vIHByb2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJT
dXJmYWNlIGlzIGNhbGxlZC4KLSAgICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7Ci0g
ICAgICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsK
LSAgICB9Ci0gICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBtX3Jvb3RMYXllckNv
bnRlbnRUaWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnJvb3RMYXllckNoYW5nZWQoKQoreworICAgIG1fcm9vdExheWVyQ29u
dGVudFRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKK30KKwordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fY29udGV4dCkKKyAg
ICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fb3duZXItPnZpZXdwb3J0Vmlz
aWJsZVJlY3QoKS53aWR0aCgpKSwgc3RkOjptYXgoMSwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxl
UmVjdCgpLmhlaWdodCgpKSk7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRh
dGVFbnRpcmVMYXllcigpOworCisgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZh
Y2UgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKKyAgICAvLyBwcm9qZWN0
aW9uIG1hdHJpeCBuZXh0IHRpbWUgdXNlUmVuZGVyU3VyZmFjZSBpcyBjYWxsZWQuCisgICAgbV9j
dXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVMYXllcnMoKQogewotICAgIGlmIChtX3ZpZXdwb3J0VmlzaWJsZVJlY3QuaXNFbXB0
eSgpKQorICAgIGlmIChtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogdXNlIHRoZSBmcmFtZSBiZWdpbiB0aW1l
IGZyb20gdGhlIG92ZXJhbGwgY29tcG9zaXRvciBzY2hlZHVsZXIuCiAgICAgLy8gVGhpcyB2YWx1
ZSBpcyBjdXJyZW50bHkgaW5hY2Nlc3NpYmxlIGJlY2F1c2UgaXQgaXMgdXAgaW4gQ2hyb21pdW0n
cwogICAgIC8vIFJlbmRlcldpZGdldC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVn
aW4oY3VycmVudFRpbWUoKSk7Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CiAK
LSAgICBpZiAoIW1fcm9vdExheWVyKQorICAgIGlmICghcm9vdExheWVyKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CiAKICAgICAvLyBSZWNoZWNr
IHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIuIFRoaXMgbWF5IGJlY29tZSBudWxsIGlm
CiAgICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0dXJuZWQgb2ZmIGR1cmluZyBhIHBhaW50IG9wZXJh
dGlvbi4KLSAgICBpZiAoIW1fcm9vdExheWVyKQorICAgIGlmICghcm9vdExheWVyKCkpIHsKKyAg
ICAgICAgbV9yb290Q0NMYXllckltcGwuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIHVwZGF0ZUxheWVycyhtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJz
KHJvb3RMYXllcigpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoKQogewotICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogICAgIC8vIEJlZm9y
ZSBkcmF3TGF5ZXJzOgotICAgIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2FzZSB3aWxsIG5vdCB3b3Jr
IGFzIGxvbmcgYXMKLSAgICAgICAgLy8gY29weVRleEltYWdlMkQgcmVzb2x2ZXMgdG8gdGhlIHBh
cmVudCB0ZXh0dXJlLCBiZWNhdXNlIHRoZSBtYWluCi0gICAgICAgIC8vIHRocmVhZCBjYW4gZXhl
Y3V0ZSBXZWJHTCBjYWxscyBvbiB0aGUgY2hpbGQgY29udGV4dCBhdCBhbnkgdGltZSwKLSAgICAg
ICAgLy8gcG90ZW50aWFsbHkgY2xvYmJlcmluZyB0aGUgcGFyZW50IHRleHR1cmUgdGhhdCBpcyBi
ZWluZyByZW5kZXJlcmVkCi0gICAgICAgIC8vIGJ5IHRoZSBjb21wb3NpdG9yIHRocmVhZC4KLSAg
ICAgICAgQ2hpbGRDb250ZXh0TWFwOjppdGVyYXRvciBpID0gbV9jaGlsZENvbnRleHRzLmJlZ2lu
KCk7Ci0gICAgICAgIGZvciAoOyBpICE9IG1fY2hpbGRDb250ZXh0cy5lbmQoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBpLT5maXJzdC0+Zmx1c2goKTsKLSAgICAgICAgfQorICAgIC8vIEZJWE1FOiBU
aGUgbXVsdGl0aHJlYWRlZCBjb21wb3NpdG9yIGNhc2Ugd2lsbCBub3Qgd29yayBhcyBsb25nIGFz
CisgICAgLy8gY29weVRleEltYWdlMkQgcmVzb2x2ZXMgdG8gdGhlIHBhcmVudCB0ZXh0dXJlLCBi
ZWNhdXNlIHRoZSBtYWluCisgICAgLy8gdGhyZWFkIGNhbiBleGVjdXRlIFdlYkdMIGNhbGxzIG9u
IHRoZSBjaGlsZCBjb250ZXh0IGF0IGFueSB0aW1lLAorICAgIC8vIHBvdGVudGlhbGx5IGNsb2Ji
ZXJpbmcgdGhlIHBhcmVudCB0ZXh0dXJlIHRoYXQgaXMgYmVpbmcgcmVuZGVyZXJlZAorICAgIC8v
IGJ5IHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICBDaGlsZENvbnRleHRNYXA6Oml0ZXJhdG9y
IGkgPSBtX2NoaWxkQ29udGV4dHMuYmVnaW4oKTsKKyAgICBmb3IgKDsgaSAhPSBtX2NoaWxkQ29u
dGV4dHMuZW5kKCk7ICsraSkgeworICAgICAgICBpLT5maXJzdC0+Zmx1c2goKTsKICAgICB9CiAK
ICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnN5bmNo
cm9uaXplVHJlZXMiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKG1fcm9vdExheWVyLmdldCgpLCBtX3Jvb3RD
Q0xheWVySW1wbC5nZXQoKSk7CisgICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNo
cm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgbV9yb290Q0NMYXllckltcGwu
Z2V0KCkpOwogICAgIH0KIAogCkBAIC02MjEsOCArNjEyLDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICBlbHNlCiAgICAgICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDApOwogCi0gICAgaWYgKGlzQ29t
cG9zaXRpbmdPZmZzY3JlZW4oKSkKKyAgICBpZiAoc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3Jl
ZW4pIHsKICAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKKyAgICAgICAg
Ly8gVE9ET0Q6IG1pZ2h0IGhhdmUgdG8gY2FsbAorICAgICAgICAvLyBtX3Jvb3RDQ0xheWVySW1w
bC0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CisgICAgfQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKQEAgLTYzMSwx
MSArNjI1LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5
ZXJDaHJvbWl1bSogcm9vdExheWVyKQogCiAgICAgaWYgKCFyb290TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSkKICAgICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9v
dExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQo
MCwgMCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKKyAgICByb290TGF5ZXItPnJl
bmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9v
d25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLnNpemUoKSkpOwogCi0gICAgSW50UmVjdCByb290
U2Npc3NvclJlY3QobV92aWV3cG9ydFZpc2libGVSZWN0KTsKKyAgICBJbnRSZWN0IHJvb3RTY2lz
c29yUmVjdChtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkpOwogICAgIC8vIFRoZSBzY2lz
c29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQuCi0gICAgcm9vdFNj
aXNzb3JSZWN0Lm1vdmUoLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi54KCksIC1tX3ZpZXdwb3J0
U2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICByb290U2Npc3NvclJlY3QubW92ZSgtbV9vd25lci0+
dmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLngoKSwgLW1fb3duZXItPnZpZXdwb3J0U2Nyb2xsUG9z
aXRpb24oKS55KCkpOwogICAgIHJvb3RMYXllci0+c2V0U2Npc3NvclJlY3Qocm9vdFNjaXNzb3JS
ZWN0KTsKIAogICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwpAQCAtNzYxLDcg
Kzc1NSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwYWludExheWVyQ29udGVudHMo
Y29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogewotICAgIGlmIChtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3QuaXNFbXB0eSgpIHx8ICFtX3Jvb3RMYXllcikKKyAgICBpZiAobV9vd25lci0+dmlld3Bv
cnRWaXNpYmxlUmVjdCgpLmlzRW1wdHkoKSB8fCAhcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMi
LCB0aGlzLCAwKTsKQEAgLTc3MCwxMSArNzY0LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogCiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpCiAgICAgICAgIHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKLSAgICByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKKyAg
ICByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3Qo
SW50UG9pbnQoMCwgMCksIG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS5zaXplKCkpKTsK
IAotICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7Cisg
ICAgSW50UmVjdCByb290U2Npc3NvclJlY3QobV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgp
KTsKICAgICAvLyBUaGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwg
b2Zmc2V0LgotICAgIHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3ZpZXdwb3J0U2Nyb2xsUG9zaXRp
b24ueCgpLCAtbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgcm9vdFNjaXNzb3JS
ZWN0Lm1vdmUoLW1fb3duZXItPnZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS54KCksIC1tX293bmVy
LT52aWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkueSgpKTsKICAgICByb290RHJhd0xheWVyLT5zZXRT
Y2lzc29yUmVjdChyb290U2Npc3NvclJlY3QpOwogCiAgICAgQ0NMYXllckxpc3QgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKQEAgLTc5MCw4ICs3ODQsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3Bv
cnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJh
cnMuCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBt
X3ZpZXdwb3J0VmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LmhlaWdo
dCgpKSk7Ci0gICAgbV93aW5kb3dNYXRyaXggPSBzY3JlZW5NYXRyaXgoMCwgMCwgbV92aWV3cG9y
dFZpc2libGVSZWN0LndpZHRoKCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5oZWlnaHQoKSk7Cisg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBtX293bmVy
LT52aWV3cG9ydFZpc2libGVSZWN0KCkud2lkdGgoKSwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxl
UmVjdCgpLmhlaWdodCgpKSk7CisgICAgbV93aW5kb3dNYXRyaXggPSBzY3JlZW5NYXRyaXgoMCwg
MCwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLndpZHRoKCksIG1fb3duZXItPnZpZXdw
b3J0VmlzaWJsZVJlY3QoKS5oZWlnaHQoKSk7CiAKICAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVy
dGV4IGF0dHJpYnV0ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KICAgICBtX3No
YXJlZEdlb21ldHJ5LT5wcmVwYXJlRm9yRHJhdygpOwpAQCAtODg3LDE0ICs4ODEsNiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgpCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+
b25QcmVzZW50KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5
ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBsYXllcikKLXsKLSAgICBtX3Jvb3RMYXllciA9
IGxheWVyOwotICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgbV9yb290TGF5ZXItPnNldExh
eWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRh
dGVFbnRpcmVMYXllcigpOwotfQotCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0TGF5
ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllcikKIHsKICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVu
KCk7CkBAIC05MDksMTUgKzg5NSw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRM
YXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQogICAgIGxheWVyLT5z
ZXRMYXllclJlbmRlcmVyKHRoaXMpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dHJhbnNmZXJSb290TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBvdGhlcikKLXsKLSAgICBv
dGhlci0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAg
b3RoZXItPm1fcm9vdExheWVyID0gbV9yb290TGF5ZXIucmVsZWFzZSgpOwotfQotCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8PSBtX3ZpZXdw
b3J0VmlzaWJsZVJlY3Qud2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSBtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3QuaGVpZ2h0KCkpOworICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8PSBtX293bmVyLT52aWV3
cG9ydFZpc2libGVSZWN0KCkud2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSBtX293bmVyLT52aWV3
cG9ydFZpc2libGVSZWN0KCkuaGVpZ2h0KCkpOwogCiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwMDcsMjUgKzk4NywxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKICAgICAg
ICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnNldENvbXBvc2l0ZU9mZnNjcmVlbihib29sIGNvbXBvc2l0ZU9mZnNj
cmVlbikKLXsKLSAgICBpZiAobV9jb21wb3NpdGVPZmZzY3JlZW4gPT0gY29tcG9zaXRlT2Zmc2Ny
ZWVuKQotICAgICAgIHJldHVybjsKLQotICAgIG1fY29tcG9zaXRlT2Zmc2NyZWVuID0gY29tcG9z
aXRlT2Zmc2NyZWVuOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RD
Q0xheWVySW1wbCkKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwtPmNsZWFyUmVuZGVyU3VyZmFj
ZSgpOwotfQotCiBMYXllclRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2Ny
ZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW4gJiYg
bV9yb290Q0NMYXllckltcGwgPyBtX3Jvb3RDQ0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRlT2Zm
c2NyZWVuICYmIG1fcm9vdENDTGF5ZXJJbXBsID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRlclN1
cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQogewotICAgIGlmIChtX2Nv
bXBvc2l0ZU9mZnNjcmVlbikgeworICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVl
bikgewogICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgICAgICB1c2VSZW5kZXJT
dXJmYWNlKDApOwpAQCAtMTA0NCw3ICsxMDEzLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogCiAg
ICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2U7CiAKLSAgICBpZiAoKHJl
bmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhbV9jb21wb3NpdGVPZmZz
Y3JlZW4pIHx8ICghcmVuZGVyU3VyZmFjZSAmJiBtX2NvbXBvc2l0ZU9mZnNjcmVlbikpIHsKKyAg
ICBpZiAoKHJlbmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhc2V0dGlu
Z3MoKS5jb21wb3NpdGVPZmZzY3JlZW4pIHx8ICghcmVuZGVyU3VyZmFjZSAmJiBzZXR0aW5ncygp
LmNvbXBvc2l0ZU9mZnNjcmVlbikpIHsKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAw
KSk7CiAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlKQogICAgICAgICAgICAgc2V0RHJhd1ZpZXdw
b3J0UmVjdChyZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLCB0cnVlKTsKQEAgLTExNDAsNyAr
MTEwOSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG9SZWN0KGNv
bnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KQogICAgIC8vIG9mIHRoZSBHTCBzY2lzc29yIGlzIHRo
ZSBib3R0b20gb2Ygb3VyIGxheWVyLgogICAgIC8vIEJ1dCwgaWYgcmVuZGVyaW5nIHRvIG9mZnNj
cmVlbiB0ZXh0dXJlLCB3ZSByZXZlcnNlIG91ciBzZW5zZSBvZiAndXBzaWRlIGRvd24nLgogICAg
IGludCBzY2lzc29yWTsKLSAgICBpZiAobV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9PSBtX2RlZmF1
bHRSZW5kZXJTdXJmYWNlICYmICFtX2NvbXBvc2l0ZU9mZnNjcmVlbikKKyAgICBpZiAobV9jdXJy
ZW50UmVuZGVyU3VyZmFjZSA9PSBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlICYmICFzZXR0aW5ncygp
LmNvbXBvc2l0ZU9mZnNjcmVlbikKICAgICAgICAgc2Npc3NvclkgPSBtX2N1cnJlbnRSZW5kZXJT
dXJmYWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpIC0gKHNjaXNzb3JSZWN0Lm1heFkoKSAtIG1f
Y3VycmVudFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkueSgpKTsKICAgICBlbHNlCiAgICAg
ICAgIHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gY29udGVudFJlY3QueSgpOwpAQCAtMTM1
OSwxMCArMTMyOCwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJl
ZE9iamVjdHMoKQogU3RyaW5nIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6bGF5ZXJUcmVlQXNUZXh0
KCkgY29uc3QKIHsKICAgICBUZXh0U3RyZWFtIHRzOwotICAgIGlmIChtX3Jvb3RMYXllci5nZXQo
KSkgewotICAgICAgICB0cyA8PCBtX3Jvb3RMYXllci0+bGF5ZXJUcmVlQXNUZXh0KCk7CisgICAg
aWYgKHJvb3RMYXllcigpKSB7CisgICAgICAgIHRzIDw8IHJvb3RMYXllcigpLT5sYXllclRyZWVB
c1RleHQoKTsKICAgICAgICAgdHMgPDwgIlJlbmRlclN1cmZhY2VzOlxuIjsKLSAgICAgICAgZHVt
cFJlbmRlclN1cmZhY2VzKHRzLCAxLCBtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgICAgIGR1bXBS
ZW5kZXJTdXJmYWNlcyh0cywgMSwgcm9vdExheWVyKCkpOwogICAgIH0KICAgICByZXR1cm4gdHMu
cmVsZWFzZSgpOwogfQpAQCAtMTQwOCw3ICsxMzc3LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkKICAgICByZXR1cm4gKG1fY29udGV4dC5n
ZXQoKS0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXJD
aHJvbWl1bSogbGF5ZXIpIGNvbnN0Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJl
bmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBjb25zdCBMYXllckNocm9t
aXVtKiBsYXllcikgY29uc3QKIHsKICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKICAg
ICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHVtcFN1cmZhY2UodHMsIGluZGVudCk7CkBA
IC0xNDE3LDc0ICsxMzg2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5k
ZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVt
cFJlbmRlclN1cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsK
IH0KIAotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbCA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RJbXBsIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoY2xpZW50LCBsYXllclJl
bmRlcmVyKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50
KCkKLSAgICB7Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgICAg
IGJvb2wgY29udGV4dExvc3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRl
TWFpblRocmVhZFRhc2sodGhpcywgJkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXll
cnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxldGlvbi53
YWl0KCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBtZXNzYWdl
IHVwIHRvIHRoZSBSZW5kZXJXaWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1aXZhbGVudHMuLi5dCi0K
LSAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNvbnRl
eHRMb3N0KQotICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9l
cyBub3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xp
ZW50LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi0gICAgICAgIDogQ0NM
YXllclRyZWVIb3N0SW1wbChjbGllbnQpCi0gICAgICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVy
UmVuZGVyZXIpIHsgfQotCi0gICAgdm9pZCBkcmF3TGF5ZXJzT25NYWluVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBjb250ZXh0TG9zdCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+
cm9vdExheWVyKCkpIHsKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygp
OwotICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Ci0KLSAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7
Ci0gICAgICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7Ci0gICAg
ICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwotICAgIH0KLQotICAgIExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbV9sYXllclJlbmRlcmVyOwotfTsKLQotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVt
SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5PiBjcmVh
dGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHkobGF5ZXJS
ZW5kZXJlcikpOwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCi0gICAgewotICAgICAgICByZXR1cm4g
TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbDo6Y3JlYXRlKHRoaXMsIHN0YXRpY19jYXN0PExheWVy
UmVuZGVyZXJDaHJvbWl1bSo+KGhvc3QoKSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBMYXll
clJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHkoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyKQotICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShsYXllclJlbmRlcmVy
KSB7IH0KLX07Ci0KLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKQotewotICAgIE93
blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IHByb3h5ID0gTGF5ZXJSZW5kZXJlckNocm9t
aXVtSW1wbFByb3h5OjpjcmVhdGUodGhpcyk7Ci0gICAgcHJveHktPnN0YXJ0KCk7Ci0gICAgcmV0
dXJuIHByb3h5LnJlbGVhc2UoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAppbmRleCBjYWMwNzU0YjA4YTAwNGVjMGU4ZWRkMmIyNTI4ZTU2NDcyNTczODY4
Li5iN2FjY2VkYWJjODk0NzUzMmEyNDBhNmNiNWU2ZDNmMjczZmY2OGU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNjksNTIgKzY5LDQ0IEBAIGNsYXNzIENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcjsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBHZW9t
ZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIExheWVyUGFpbnRl
ckNocm9taXVtOwogCiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVk
IHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCi1jbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0IHsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1
YmxpYyBSZWZDb3VudGVkPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVl
SG9zdENsaWVudCosIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWlu
dCwgYm9vbCBhY2NlbGVyYXRlRHJhd2luZyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4pOwogCi0gICAgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOworICAgIHZp
cnR1YWwgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOworCisgICAgY29uc3QgQ0NTZXR0aW5ncyYg
c2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX293bmVyLT5zZXR0aW5ncygpOyB9CisKKyAgICBD
Q0xheWVyVHJlZUhvc3QqIG93bmVyKCkgeyByZXR1cm4gbV9vd25lcjsgfQorICAgIGNvbnN0IEND
TGF5ZXJUcmVlSG9zdCogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CisKKyAgICBM
YXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsg
fQorICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXItPnJvb3RMYXllcigpOyB9CiAKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgp
OwogICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0U3VwcG9ydHNNYXBTdWI7IH0KICNpZiBVU0UoU0tJQSkKLSAgICBHckNvbnRleHQqIHNraWFD
b250ZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHQzRCopOworICAgIEdyQ29udGV4dCogc2tpYUNvbnRleHQoKSB7
IHJldHVybiBtX3NraWFDb250ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgaW52YWxp
ZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKIAotICAgIHZvaWQg
c2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIHZvaWQgcm9v
dExheWVyQ2hhbmdlZCgpOworICAgIHZvaWQgdmlld3BvcnRDaGFuZ2VkKCk7CiAKICAgICAvLyB1
cGRhdGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgog
ICAgIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CiAKLSAgICAv
LyBTZXQgYnkgV2ViVmlld0ltcGwgd2hlbiBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBydW5uaW5n
LgotICAgIC8vIEZJWE1FOiBXaGVuIHdlIG1vdmUgc2NoZWR1bGluZyBpbnRvIHRoZSBjb21wb3Np
dG9yLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgZmxhZy4KLSAgICB2b2lkIHNldElzQW5pbWF0aW5nKGJv
b2wgYW5pbWF0aW5nKSB7IG1fYW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9Ci0gICAgYm9vbCBpc0Fu
aW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nOyB9Ci0KICAgICAvLyB3YWl0cyBm
b3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZvaWQgZmluaXNoKCk7CiAKICAgICAvLyBwdXRz
IGJhY2tidWZmZXIgb25zY3JlZW4KICAgICB2b2lkIHByZXNlbnQoKTsKIAotICAgIEludFNpemUg
dmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUo
KTsgfQotCi0gICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik7
Ci0gICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0
KCk7IH0KLSAgICB2b2lkIHRyYW5zZmVyUm9vdExheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
b3RoZXIpOwotCi0gICAgYm9vbCBoYXJkd2FyZUNvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4g
bV9oYXJkd2FyZUNvbXBvc2l0aW5nOyB9Ci0gICAgYm9vbCBhY2NlbGVyYXRlRHJhd2luZygpIGNv
bnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZURyYXdpbmc7IH0gCi0KLSAgICB2b2lkIHNldENvbXBv
c2l0ZU9mZnNjcmVlbihib29sKTsKLSAgICBib29sIGlzQ29tcG9zaXRpbmdPZmZzY3JlZW4oKSBj
b25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsgfQotCiAgICAgdW5zaWduZWQgY3Jl
YXRlTGF5ZXJUZXh0dXJlKCk7CiAgICAgdm9pZCBkZWxldGVMYXllclRleHR1cmUodW5zaWduZWQp
OwogCkBAIC0xNTksMjIgKzE1MSwyMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbGVhc2VUZXh0
dXJlcygpOwogCisgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21p
dW0qKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9vbCBzX2luUGFpbnRMYXllckNv
bnRlbnRzOwogI2VuZGlmCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBD
Q0xheWVyTGlzdDsKIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKLQogcHJp
dmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxk
Q29udGV4dE1hcDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRo
ZSBDQ0xheWVyVHJlZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCiAgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKIAotICAgIExheWVyUmVuZGVyZXJDaHJv
bWl1bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50LCBib29sIGFj
Y2VsZXJhdGVEcmF3aW5nKTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVI
b3N0KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIGJvb2wgaW5pdGlhbGl6
ZSgpOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQg
dXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKQEAgLTIwMCwzMiArMTkyLDI2IEBAIHByaXZhdGU6
CiAKICAgICBzdGF0aWMgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xheWVySW1w
bD4mLCBjb25zdCBSZWZQdHI8Q0NMYXllckltcGw+Jik7CiAKLSAgICB2b2lkIGR1bXBSZW5kZXJT
dXJmYWNlcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCwgTGF5ZXJDaHJvbWl1bSopIGNvbnN0Owor
ICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25z
dCBMYXllckNocm9taXVtKikgY29uc3Q7CiAKICAgICBib29sIGluaXRpYWxpemVTaGFyZWRPYmpl
Y3RzKCk7CiAgICAgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogCi0gICAgdm9pZCBzZXRM
YXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKLQotICAgIEludFJlY3QgbV92
aWV3cG9ydFZpc2libGVSZWN0OwotICAgIEludFJlY3QgbV92aWV3cG9ydENvbnRlbnRSZWN0Owot
ICAgIEludFBvaW50IG1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbjsKKyAgICAvLyBGb3IgdGhpcyBy
ZXYsIHRoZSBMUkMgaXMgb3duZWQgYnkgdGhlIENDTGF5ZXJUcmVlSG9zdC4gVGhpcyB3aWxsIGNo
YW5nZSBpbiBhIGZvbGxvd2luZyByZXZpc2lvbi4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fb3du
ZXI7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV93aW5kb3dNYXRyaXg7CiAKLSAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbV9yb290TGF5ZXI7CisgICAgLy8gVE9ETzogc3BsaXQgdGhlIHRleHR1cmUgdXBk
YXRlciBhbmQgdGlsZXIgaW50byB0d28gcGFydHMuIFRoZW4sCisgICAgLy8ga2VlcCB0aGUgaW1w
bCBoZXJlIGFuZCBwdXQgdGhlIHBhaW50aW5nLXNpZGUgb24gdGhlIExheWVyVHJlZUhvc3QKICAg
ICBPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV9yb290TGF5ZXJUZXh0dXJlVXBkYXRlcjsK
ICAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsK
IAotICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwotICAgIGJvb2wgbV9hY2NlbGVyYXRl
RHJhd2luZzsKLQogICAgIE93blB0cjxMYXllckxpc3Q+IG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2N1cnJlbnRSZW5kZXJTdXJmYWNl
OwogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKLSAgICBib29sIG1fY29t
cG9zaXRlT2Zmc2NyZWVuOwogCiAgICAgLy8gTWF4aW11bSB0ZXh0dXJlIGRpbWVuc2lvbnMgc3Vw
cG9ydGVkLgogICAgIGludCBtX21heFRleHR1cmVTaXplOwpAQCAtMjYxLDEwICsyNDcsNiBAQCBw
cml2YXRlOgogICAgIENoaWxkQ29udGV4dE1hcCBtX2NoaWxkQ29udGV4dHM7CiAKICAgICBib29s
IG1fY29udGV4dFN1cHBvcnRzTWFwU3ViOwotICAgIGJvb2wgbV9jb250ZXh0U3VwcG9ydHNUZXh0
dXJlRm9ybWF0QkdSQTsKLSAgICBib29sIG1fY29udGV4dFN1cHBvcnRzUmVhZEZvcm1hdEJHUkE7
Ci0KLSAgICBib29sIG1fYW5pbWF0aW5nOwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1
bHRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAppbmRleCBi
ZDUwNjQxYjkyODYzMjA2MmEwM2I2OWQyODM1ZTc1MmZjMDdkYTE3Li4xYjcyZWI0MGU3ZTk0ZDY1
ZTFhMTkxYTJkZTQzNTAxMWEzMWZiMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVy
ZVVwZGF0ZWQoKQogICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOwogICAgIC8vIElmIFdlYkdM
IGNvbW1hbmRzIGFyZSBpc3N1ZWQgb3V0c2lkZSBvZiBhIHRoZSBhbmltYXRpb24gY2FsbGJhY2tz
LCB0aGVuIHVzZQogICAgIC8vIGNhbGwgcmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVN
KCkgdG8ga2VlcCB0aGUgY29udGV4dCBmcm9tIGdldHRpbmcgdG9vIGZhciBhaGVhZC4KLSAgICBp
ZiAobGF5ZXJSZW5kZXJlcigpICYmICFsYXllclJlbmRlcmVyKCktPmlzQW5pbWF0aW5nKCkgJiYg
bV9jb250ZXh0U3VwcG9ydHNSYXRlTGltaXRpbmdFeHRlbnNpb24gJiYgIW1fcmF0ZUxpbWl0aW5n
VGltZXIuaXNBY3RpdmUoKSkKKyAgICBpZiAobGF5ZXJSZW5kZXJlcigpICYmIGxheWVyUmVuZGVy
ZXIoKS0+b3duZXIoKS0+YW5pbWF0aW5nKCkgJiYgbV9jb250ZXh0U3VwcG9ydHNSYXRlTGltaXRp
bmdFeHRlbnNpb24gJiYgIW1fcmF0ZUxpbWl0aW5nVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9yYXRlTGltaXRpbmdUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggN2YyY2VjNzc4NWNmMGYwZTBmMWFkM2Q0MTMzNTRjODM5
MzZhMTVmYy4uZWU5ZTc0ODZmZWQ2MTA4Yjg5MGM4NjYyZjMzNzU0YzU4ZTNlNDcyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRl
ICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTEsOCArNTIsNiBAQCBDQ0hlYWRzVXBEaXNwbGF5
OjpDQ0hlYWRzVXBEaXNwbGF5KExheWVyUmVuZGVyZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBt
X2N1cnJlbnRGcmFtZU51bWJlcigxKQogICAgICwgbV9maWx0ZXJlZEZyYW1lVGltZSgwKQogICAg
ICwgbV9sYXllclJlbmRlcmVyKG93bmVyKQotICAgICwgbV9zaG93RlBTQ291bnRlcihmYWxzZSkK
LSAgICAsIG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKQogICAgICwgbV91c2VNYXBTdWJG
b3JVcGxvYWRzKG93bmVyLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSkKIHsKICAgICBtX2JlZ2lu
VGltZUhpc3RvcnlJblNlY1swXSA9IGN1cnJlbnRUaW1lKCk7CkBAIC03OSw2ICs3OCwyMSBAQCBD
Q0hlYWRzVXBEaXNwbGF5Ojp+Q0NIZWFkc1VwRGlzcGxheSgpCiB7CiB9CiAKK3ZvaWQgQ0NIZWFk
c1VwRGlzcGxheTo6b25GcmFtZUJlZ2luKGRvdWJsZSB0aW1lc3RhbXApCit7CisgICAgbV9iZWdp
blRpbWVIaXN0b3J5SW5TZWNbbV9jdXJyZW50RnJhbWVOdW1iZXIgJSBrQmVnaW5GcmFtZUhpc3Rv
cnlTaXplXSA9IHRpbWVzdGFtcDsKK30KKwordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpvblByZXNl
bnQoKQoreworICAgIG1fY3VycmVudEZyYW1lTnVtYmVyICs9IDE7Cit9CisKK2Jvb2wgQ0NIZWFk
c1VwRGlzcGxheTo6ZW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuc2hv
d1BsYXRmb3JtTGF5ZXJUcmVlIHx8IHNldHRpbmdzKCkuc2hvd0ZQU0NvdW50ZXI7Cit9CisKIHZv
aWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdygpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKQEAgLTg3LDkgKzEwMSw5IEBAIHZv
aWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdygpCiAKICAgICAvLyBVc2UgYSBmdWxsc2NyZWVuIHRl
eHR1cmUgb25seSBpZiB3ZSBuZWVkIHRvLi4uCiAgICAgSW50U2l6ZSBodWRTaXplOwotICAgIGlm
IChtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSkgewotICAgICAgICBodWRTaXplLnNldFdpZHRoKG1p
bigyMDQ4LCBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0U2l6ZSgpLndpZHRoKCkpKTsKLSAgICAg
ICAgaHVkU2l6ZS5zZXRIZWlnaHQobWluKDIwNDgsIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRT
aXplKCkuaGVpZ2h0KCkpKTsKKyAgICBpZiAoc2V0dGluZ3MoKS5zaG93UGxhdGZvcm1MYXllclRy
ZWUpIHsKKyAgICAgICAgaHVkU2l6ZS5zZXRXaWR0aChtaW4oMjA0OCwgbV9sYXllclJlbmRlcmVy
LT5vd25lcigpLT52aWV3cG9ydFZpc2libGVSZWN0KCkud2lkdGgoKSkpOworICAgICAgICBodWRT
aXplLnNldEhlaWdodChtaW4oMjA0OCwgbV9sYXllclJlbmRlcmVyLT5vd25lcigpLT52aWV3cG9y
dFZpc2libGVSZWN0KCkuaGVpZ2h0KCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBodWRTaXpl
LnNldFdpZHRoKDUxMik7CiAgICAgICAgIGh1ZFNpemUuc2V0SGVpZ2h0KDEyOCk7CkBAIC0xNDks
NyArMTYzLDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29udGVudHMoR3JhcGhp
Y3NDb250ZXh0KiBjdHgsIGNvbnN0IEludFNpemUmIGh1ZFMKIHsKICAgICBGb250Q2FjaGVQdXJn
ZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKIAotICAgIGlmIChtX3Nob3dQbGF0
Zm9ybUxheWVyVHJlZSkgeworICAgIGlmIChzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJl
ZSkgewogICAgICAgICBjdHgtPnNldEZpbGxDb2xvcihDb2xvcigwLCAwLCAwLCAxOTIpLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgY3R4LT5maWxsUmVjdChGbG9hdFJlY3QoMCwgMCwg
aHVkU2l6ZS53aWR0aCgpLCBodWRTaXplLmhlaWdodCgpKSk7CiAgICAgfQpAQCAtMTU3LDE1ICsx
NzEsMTUgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29udGVudHMoR3JhcGhpY3ND
b250ZXh0KiBjdHgsIGNvbnN0IEludFNpemUmIGh1ZFMKICAgICBpbnQgZnBzQ291bnRlckhlaWdo
dCA9IG1fbWVkaXVtRm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdEhlaWdodCgpICsgMjsKICAgICBp
bnQgZnBzQ291bnRlclRvcCA9IDI7CiAgICAgaW50IHBsYXRmb3JtTGF5ZXJUcmVlVG9wOwotICAg
IGlmIChtX3Nob3dGUFNDb3VudGVyKQorICAgIGlmIChzZXR0aW5ncygpLnNob3dGUFNDb3VudGVy
KQogICAgICAgICBwbGF0Zm9ybUxheWVyVHJlZVRvcCA9IGZwc0NvdW50ZXJUb3AgKyBmcHNDb3Vu
dGVySGVpZ2h0ICsgMjsKICAgICBlbHNlCiAgICAgICAgIHBsYXRmb3JtTGF5ZXJUcmVlVG9wID0g
MDsKIAotICAgIGlmIChtX3Nob3dGUFNDb3VudGVyKQorICAgIGlmIChzZXR0aW5ncygpLnNob3dG
UFNDb3VudGVyKQogICAgICAgICBkcmF3RlBTQ291bnRlcihjdHgsIGZwc0NvdW50ZXJUb3AsIGZw
c0NvdW50ZXJIZWlnaHQpOwogCi0gICAgaWYgKG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKQorICAg
IGlmIChzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJlZSkKICAgICAgICAgZHJhd1BsYXRm
b3JtTGF5ZXJUcmVlKGN0eCwgcGxhdGZvcm1MYXllclRyZWVUb3ApOwogfQogCkBAIC0yMzgsMjYg
KzI1Miw5IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd1BsYXRmb3JtTGF5ZXJUcmVlKEdy
YXBoaWNzQ29udGV4dCogY3R4LCBpbnQgdG9wKQogICAgIH0KIH0KIAotdm9pZCBDQ0hlYWRzVXBE
aXNwbGF5OjpvbkZyYW1lQmVnaW4oZG91YmxlIHRpbWVzdGFtcCkKLXsKLSAgICBtX2JlZ2luVGlt
ZUhpc3RvcnlJblNlY1ttX2N1cnJlbnRGcmFtZU51bWJlciAlIGtCZWdpbkZyYW1lSGlzdG9yeVNp
emVdID0gdGltZXN0YW1wOwotfQotCi12b2lkIENDSGVhZHNVcERpc3BsYXk6Om9uUHJlc2VudCgp
Ci17Ci0gICAgbV9jdXJyZW50RnJhbWVOdW1iZXIgKz0gMTsKLX0KLQotdm9pZCBDQ0hlYWRzVXBE
aXNwbGF5OjpzZXRTaG93RlBTQ291bnRlcihib29sIHNob3cpCi17Ci0gICAgbV9zaG93RlBTQ291
bnRlciA9IHNob3c7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOwotfQot
Ci12b2lkIENDSGVhZHNVcERpc3BsYXk6OnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShib29sIHNo
b3cpCitjb25zdCBDQ1NldHRpbmdzJiBDQ0hlYWRzVXBEaXNwbGF5OjpzZXR0aW5ncygpIGNvbnN0
CiB7Ci0gICAgbV9zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzaG93OwotICAgIG1fbGF5ZXJSZW5k
ZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5zZXR0
aW5ncygpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5kZXggZjA0MzMx
N2Y1NWZkOTdjMWJmZjYyYWVmZmFhYjJkMDA2MjIwYjRkYS4uNWM2ZTdlMzBkZTc2M2I1ZDQxMGMx
MGY4Nzk1MjgzNWZhMmRhYzlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaApAQCAt
MzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDU2V0dGluZ3M7
CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNz
IExheWVyUmVuZGVyZXJDaHJvbWl1bTsKQEAgLTU0LDEzICs1NSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIG9uRnJhbWVCZWdpbihkb3VibGUgdGltZXN0YW1wKTsKICAgICB2b2lkIG9uUHJlc2VudCgp
OwogCi0gICAgdm9pZCBzZXRTaG93RlBTQ291bnRlcihib29sIGVuYWJsZSk7Ci0gICAgYm9vbCBz
aG93RlBTQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd0ZQU0NvdW50ZXI7IH0KLQotICAg
IHZvaWQgc2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJvb2wgZW5hYmxlKTsKLSAgICBib29sIHNo
b3dQbGF0Zm9ybUxheWVyVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd1BsYXRmb3JtTGF5ZXJU
cmVlOyB9Ci0KLSAgICBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3dQbGF0Zm9y
bUxheWVyVHJlZSB8fCBtX3Nob3dGUFNDb3VudGVyOyB9CisgICAgYm9vbCBlbmFibGVkKCkgY29u
c3Q7CiAgICAgdm9pZCBkcmF3KCk7CiAKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRl
eFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dpenpsZUFscGhhPiBQcm9ncmFt
OwpAQCAtNzAsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0h1ZENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpOwogICAgIHZvaWQgZHJhd0ZQ
U0NvdW50ZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50IHRvcCwgaW50IGhlaWdodCk7CiAgICAgdm9p
ZCBkcmF3UGxhdGZvcm1MYXllclRyZWUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHRvcCk7Ci0KKyAg
ICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0OwogCiAgICAgaW50IG1fY3VycmVu
dEZyYW1lTnVtYmVyOwogCkBAIC04Myw5ICs3OCw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNv
bnN0IGludCBrQmVnaW5GcmFtZUhpc3RvcnlTaXplID0gNjQ7CiAgICAgZG91YmxlIG1fYmVnaW5U
aW1lSGlzdG9yeUluU2VjW2tCZWdpbkZyYW1lSGlzdG9yeVNpemVdOwogCi0gICAgYm9vbCBtX3No
b3dGUFNDb3VudGVyOwotICAgIGJvb2wgbV9zaG93UGxhdGZvcm1MYXllclRyZWU7Ci0KICAgICBP
d25QdHI8Rm9udD4gbV9zbWFsbEZvbnQ7CiAgICAgT3duUHRyPEZvbnQ+IG1fbWVkaXVtRm9udDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZDc3OTVjNzEwNDM5YzliMjE5
Y2QwZjg0ZDkyMjRmZTNkYzU3YjIyZi4uMzVjYzMwYmIxNjQ0MGE1NzExMWE2Njc2NTBjN2IxZTlm
OWFlNWUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yNiwyNiArMjYs
NTMgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogCisjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaCIKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDTGF5ZXJUcmVl
SG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50KQorUGFz
c1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJU
cmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKK3sKKyAg
ICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBsYXllclRyZWVIb3N0ID0gYWRvcHRSZWYobmV3IEND
TGF5ZXJUcmVlSG9zdChjbGllbnQsIHNldHRpbmdzKSk7CisgICAgaWYgKCFsYXllclRyZWVIb3N0
LT5pbml0aWFsaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBsYXllclRyZWVI
b3N0OworfQorCitDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhv
c3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX2Ns
aWVudChjbGllbnQpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCisgICAgLCBtX3NldHRpbmdzKHNl
dHRpbmdzKQogewogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdCgpCitib29sIENDTGF5
ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiB7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gbV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZhbGwgYmFj
ayB0byBub24tYWNjZWxlcmF0ZWQgZHJhd2luZyBpZiB0aGUgdW5kZXJseWluZyBjb250ZXh0IGRv
ZXMgbm90IHN1cHBvcnQgaXQuCisjaWYgVVNFKFNLSUEpCisgICAgaWYgKG1fc2V0dGluZ3MuYWNj
ZWxlcmF0ZVBhaW50aW5nICYmICFMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHRTdXBwb3J0
c0FjY2VsZXJhdGVkUGFpbnRpbmcoY29udGV4dC5nZXQoKSkpCisgICAgICAgIG1fc2V0dGluZ3Mu
YWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisjZW5kaWYKKworICAgIG1fbGF5ZXJSZW5kZXJl
ciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOworICAgIGlm
ICghbV9sYXllclJlbmRlcmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICNpZiBVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCi0gICAgbV9wcm94eSA9IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBs
UHJveHkoKTsKKyAgICBtX3Byb3h5ID0gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVhdGUo
dGhpcyk7CiAgICAgQVNTRVJUKG1fcHJveHktPmlzU3RhcnRlZCgpKTsKICAgICBtX3Byb3h5LT5z
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KCkKQEAgLTY4LDI3ICs5NSwxNzgg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlKCkKIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogeworICAg
IG1fYW5pbWF0aW5nID0gdHJ1ZTsKICAgICBtX2NsaWVudC0+YW5pbWF0ZUFuZExheW91dChmcmFt
ZUJlZ2luVGltZSk7CisgICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKIH0KIAogUGFzc093blB0cjxD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcigpCiB7Ci0gICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6
Y3JlYXRlKCk7CisgICAgLy8gVE9ETzogb25seSBjYWxsZWQgaW4gdGhyZWFkaW5nIGNhc2UsIGZp
eCB3aGVuIHBvc3NpYmxlLgorICAgIHJldHVybiBudWxscHRyOyAvLyAgUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXI+KCk7Cit9CisKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCit7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4gcmVuZGVyZXIobV9sYXllclJlbmRlcmVyKTsKKyAgICByZXR1cm4gQ0NMYXllclRyZWVI
b3N0SW1wbDo6Y3JlYXRlKGNsaWVudCwgcmVuZGVyZXIpOworfQorCitHcmFwaGljc0NvbnRleHQz
RCogQ0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9sYXllclJlbmRl
cmVyLT5jb250ZXh0KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRS
ZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQorICAgIC8vIFRPRE86IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMK
KyNlbHNlCisgICAgZG9Db21wb3NpdGUoKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1l
YnVmZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CisjZW5kaWYKK30KKworUGFzc093blB0cjxMYXll
clBhaW50ZXJDaHJvbWl1bT4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVSb290TGF5ZXJQYWludGVy
KCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaEFsbFJlbmRlcmluZygpCit7CisjaWYgVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIC8vIFRPRE86IG5lZWQgdG8gaW1wbGVtZW50IHRo
aXMKKyNlbHNlCisgICAgbV9sYXllclJlbmRlcmVyLT5maW5pc2goKTsKKyNlbmRpZgorfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQoreworICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5
ZXJSZW5kZXJlci0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGlydHlSZWN0KTsKIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHsKICNpZiBVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6
c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKICAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpOworI2Vsc2UKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKICNl
bmRpZgogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNSZWRyYXcoKQogewotICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7
CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+c2V0TmVl
ZHNSZWRyYXcoKTsKKyNlbHNlCisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiAj
ZW5kaWYKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcihQYXNzUmVmUHRy
PExheWVyQ2hyb21pdW0+IGxheWVyKQoreworICAgIG1fcm9vdExheWVyID0gbGF5ZXI7CisgICAg
aWYgKG1fcm9vdExheWVyKQorICAgICAgICBtX3Jvb3RMYXllci0+c2V0TGF5ZXJSZW5kZXJlciht
X2xheWVyUmVuZGVyZXIuZ2V0KCkpOworICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyQ2hhbmdlZCgpOworfQorCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit7Cisg
ICAgYm9vbCB2aXNpYmxlUmVjdENoYW5nZWQgPSBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Quc2l6ZSgp
ICE9IHZpc2libGVSZWN0LnNpemUoKTsKKworICAgIG1fdmlld3BvcnRWaXNpYmxlUmVjdCA9IHZp
c2libGVSZWN0OworICAgIG1fdmlld3BvcnRDb250ZW50UmVjdCA9IGNvbnRlbnRSZWN0OworICAg
IG1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOworCisgICAgaWYgKHZp
c2libGVSZWN0Q2hhbmdlZCAmJiBtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5k
ZXJlci0+dmlld3BvcnRDaGFuZ2VkKCk7CisKKyAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
OworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7
CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBpZiAoIXZpc2libGUpCisgICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7CisjZW5kaWYKK30KKworI2lm
ICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZG9Db21w
b3NpdGUoKQoreworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIG1fbGF5ZXJSZW5k
ZXJlci0+dXBkYXRlTGF5ZXJzKCk7CisgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7
Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlIiwgdGhpcywgMCk7CisK
KyAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CisgICAgICAgIC8vIHJlYWxs
b2NhdGVSZW5kZXJlciB3aWxsIHJlcXVlc3QgYSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0IHN1
Y2NlZWRlZAorICAgICAgICAvLyBpbiBjcmVhdGluZyBhIG5ldyBjb250ZXh0LgorICAgICAgICBy
ZWFsbG9jYXRlUmVuZGVyZXIoKTsKKyAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0
ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEbyBub3QgY29tcG9z
aXRlIGlmIHRoZSBjb21wb3NpdG9yIGNvbnRleHQgaXMgYWxyZWFkeSBsb3N0LgorICAgIGlmICgh
bV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGRv
Q29tcG9zaXRlKCk7CisKKyAgICAgICAgLy8gUHV0IHJlc3VsdCBvbnNjcmVlbi4KKyAgICAgICAg
bV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisgICAgfQorCisgICAgaWYgKG1fbGF5ZXJSZW5k
ZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgeworICAgICAgICAvLyBUcnlpbmcgdG8g
cmVjb3ZlciB0aGUgY29udGV4dCByaWdodCBoZXJlIHdpbGwgbm90IHdvcmsgaWYgR1BVIHByb2Nl
c3MKKyAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVy
cm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKKyAgICAgICAgLy8gY2FsbGVkIGF0IHRoZSBuZXh0IGl0
ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29wLCByZXZlcnRpbmcgb3VyCisgICAgICAgIC8vIHJl
Y292ZXJ5IGF0dGVtcHRzIGhlcmUuIEluc3RlYWQsIHdlIGRldGFjaCB0aGUgcm9vdCBsYXllciBm
cm9tIHRoZQorICAgICAgICAvLyByZW5kZXJlciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRo
ZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24KKyAgICAgICAgLy8gYW5kIHJlcXVlc3QgYSBy
ZXBhaW50IHlldCBhZ2Fpbi4KKyAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0g
dHJ1ZTsKKyAgICAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB9Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0OjpyZWFsbG9jYXRlUmVuZGVyZXIoKQoreworICAgIC8vIEdyYXBo
aWNzQ29udGV4dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0dXJuIDAsIGluIHRoYXQgY2Fz
ZSBmYWxsIGJhY2sgdG8gc29mdHdhcmVlCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0ID0gbV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICBp
ZiAoIWNvbnRleHQpIHsKKyAgICAgICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250
ZXh0KGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENoZWNrIHRoYXQg
dGhlIGNvbnRleHQgc3VwcG9ydHMgYWNjZWxlcmF0ZWQgZHJhd2luZywgaWYgbmVlZGVkLgorICAg
IGlmIChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyAmJiAhTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKGNvbnRleHQuZ2V0KCkpKQor
ICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNlOworCisgICAgLy8g
VGhlIG5ldyBncmFwaGNpcyBjb250ZXh0IG1pZ2h0IG5vdCBzdXBwb3J0IGFsbCB0aGUgZXh0ZW5z
aW9ucyB3ZSBuZWVkLAorICAgIC8vIGF0IHdoaWNoIHBvaW50IGZhbGwgYmFjayB0byBzb2Z0d2Fy
ZS4KKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7CisKKyAgICAvLyBJZiBj
cmVhdGluZyB0aGUgc2Vjb25kIGNvbnRleHQgZmFpbGVkLAorICAgIGlmICghbGF5ZXJSZW5kZXJl
cikgeworICAgICAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoZmFsc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVhdHRhY2ggdGhlIHJvb3QgbGF5
ZXIuIENoaWxkIGxheWVycyB3aWxsIGdldCByZWF0dGFjaGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2Yg
dXBkYXRlTGF5ZXJzUmVjdXJzaXZlLgorICAgIGxheWVyUmVuZGVyZXItPnNldExheWVyUmVuZGVy
ZXJSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxh
eWVyUmVuZGVyZXI7CisKKyAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQo
dHJ1ZSk7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCAy
ODg5NTBlZmUxM2E3OTYwZDYwM2Y3ZWIzZjdlMjAxZTY3OTQ2ZWE3Li5kYzJjMzRhMDk5MzViMzY4
YzczNzI3YzJhNzY1ODU0M2MxMDZkZjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApA
QCAtMjUsOCArMjUsMTAgQEAKICNpZm5kZWYgQ0NMYXllclRyZWVIb3N0X2gKICNkZWZpbmUgQ0NM
YXllclRyZWVIb3N0X2gKIAorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuaCIKKwogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzYsMzkgKzM4LDEw
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwor
Y2xhc3MgTGF5ZXJDaHJvbWl1bTsKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3Mg
TGF5ZXJSZW5kZXJlckNocm9taXVtOwogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewog
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSkgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpID0gMDsKLQorICAgIHZpcnR1YWwgUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY3JlYXRlUm9vdExheWVyUGFpbnRlcigpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNz
KSA9IDA7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVDb21wb3NpdGUoKSA9IDA7CisjZW5kaWYKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IH5DQ0xheWVyVHJlZUhvc3RDbGllbnQoKSB7IH0KIH07CiAKK3N0cnVjdCBDQ1NldHRpbmdzIHsK
KyAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKKyAgICBib29sIGNvbXBvc2l0ZU9mZnNjcmVl
bjsKKyAgICBib29sIHNob3dGUFNDb3VudGVyOworICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJU
cmVlOworfTsKKwogY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NM
YXllclRyZWVIb3N0PiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0KEND
TGF5ZXJUcmVlSG9zdENsaWVudCopOwotICAgIHZvaWQgaW5pdCgpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCosIGNv
bnN0IENDU2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3QoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAg
ICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENv
bXBsZXRlKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4g
Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwogICAg
IHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0ZUxheWVy
VHJlZUhvc3RDb21taXR0ZXIoKTsKIAorICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1
cm4gbV9hbmltYXRpbmc7IH0KKyAgICB2b2lkIHNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykg
eyBtX2FuaW1hdGluZyA9IGFuaW1hdGluZzsgfSAvLyBDYW4gYmUgcmVtb3ZlZCB3aGVuIG5vbi10
aHJlYWRlZCBzY2hlZHVsaW5nIG1vdmVzIGluc2lkZS4KKworICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KCk7CisKKyAgICB2b2lkIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVs
cywgY29uc3QgSW50UmVjdCYpOworCisgICAgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4gY3JlYXRlUm9vdExheWVyUGFpbnRlcigpOworCisgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJp
bmcoKTsKKwogICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1i
ZXI7IH0KIAorICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KTsKKwogICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKICAgICB2
b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAKKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRy
PExheWVyQ2hyb21pdW0+KTsKKyAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVy
biBtX3Jvb3RMYXllci5nZXQoKTsgfQorICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisKKyAgICBjb25zdCBDQ1Nl
dHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KKworICAgIHZv
aWQgc2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworCisgICAgY29u
c3QgSW50UmVjdCYgdmlld3BvcnRDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3Bv
cnRDb250ZW50UmVjdDsgfQorICAgIGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uOyB9CisgICAgY29u
c3QgSW50UmVjdCYgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3Bv
cnRWaXNpYmxlUmVjdDsgfQorCisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworCisgICAgLy8g
VGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGguCisjaWYg
IVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlz
aCk7CisjZW5kaWYKKworCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpID0gMDsK
KyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29u
c3QgQ0NTZXR0aW5ncyYpOwogCiBwcml2YXRlOgorICAgIGJvb2wgaW5pdGlhbGl6ZSgpOworCisg
ICAgLy8gVGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGgu
CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGRvQ29tcG9zaXRlKCk7
CisgICAgdm9pZCByZWFsbG9jYXRlUmVuZGVyZXIoKTsKKworICAgIGJvb2wgbV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0OworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5
ZXJSZW5kZXJlcjsKKyNlbmRpZgorCisgICAgYm9vbCBtX2FuaW1hdGluZzsKKwogICAgIENDTGF5
ZXJUcmVlSG9zdENsaWVudCogbV9jbGllbnQ7CisKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKKwog
ICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IG1fcHJveHk7CisKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290TGF5ZXI7CisgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdz
OworCisgICAgSW50UmVjdCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Q7CisgICAgSW50UmVjdCBtX3Zp
ZXdwb3J0Q29udGVudFJlY3Q7CisgICAgSW50UG9pbnQgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9u
OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBh
M2FhMmJhMjEwZGJkZGQxNmI5Y2ExYWQxMmU2MTE1NTU4YjJhYjM3Li40ZTJkMWI4NDNjMTgzMmNm
YWZhMTQzNTQ4NjJjYmZhMTUzODY2OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcApAQCAtMjYsMTggKzI2LDI5IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNp
bmNsdWRlICJjYy9DQ01haW5UaHJlYWQuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNr
LmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NM
YXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCitQYXNz
T3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJl
ckNocm9taXVtPiByZW5kZXJlcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJU
cmVlSG9zdEltcGwoY2xpZW50LCByZW5kZXJlcikpOworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBs
OjpDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwg
UGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKQogICAgIDogbV9zb3Vy
Y2VGcmFtZU51bWJlcigtMSkKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKICAgICAsIG1fY2xpZW50
KGNsaWVudCkKICAgICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fbGF5ZXJSZW5k
ZXJlcihyZW5kZXJlcikKICAgICAsIG1fcmVkcmF3UGVuZGluZyhmYWxzZSkKIHsKIH0KQEAgLTcw
LDcgKzgxLDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiAKICAg
ICB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
QW5kUHJlc2VudCIsIHRoaXMsIDApOwotICAgICAgICBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpOwor
ICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBib29sIGNvbnRl
eHRMb3N0OworICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRU
YXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzT25NYWluVGhyZWFkLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cygmY29udGV4dExvc3QpKSk7CisgICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgICAg
IC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1cCB0byB0aGUgUmVuZGVy
V2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4uXQorCisgICAgICAgIC8vIEZJWE1F
OiBoYW5kbGUgY29udGV4dCBsb3N0CisgICAgICAgIGlmIChjb250ZXh0TG9zdCkKKyAgICAgICAg
ICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsIGRvZXMgbm90IGhhbmRsZSBjb250
ZXh0IGxvc3QgeWV0LiIpOwogICAgIH0KIAogICAgICsrbV9mcmFtZU51bWJlcjsKQEAgLTk2LDQg
KzExNiwxOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAg
ICBtX2NsaWVudC0+cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwogfQogCit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqIGNvbXBsZXRpb24sIGJvb2wqIGNvbnRleHRMb3N0KQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisKKyAgICBpZiAobV9sYXllclJlbmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIo
KSkgeworICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKKyAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICAgICAgKmNvbnRleHRMb3N0
ID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworICAgIH0gZWxzZQorICAgICAgICAqY29u
dGV4dExvc3QgPSBmYWxzZTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDA4MDVjN2E0ZWI1ODI1Y2M5MTk0
NDEwZjFmMTEyNTUxOWRmNWRhNTIuLmI2MWY3YjJmYmRkMWYyZTkzZDRkYjVlMGViMjM1ZWQyYzZk
MWM5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTMxLDYgKzMx
LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsK
K2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKKwogLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBp
bmZyYXN0cnVjdHVyZSBmb3IgYSBDQ0xheWVyVHJlZUhvc3RJbXBsCiBjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50ICB7CiBwdWJsaWM6CkBAIC00NSwxNCArNDgsMTMgQEAgcHJvdGVjdGVk
OgogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q0NMYXllclRyZWVIb3N0SW1wbCk7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ0NMYXllclRyZWVI
b3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
LCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOwogICAgIHZpcnR1YWwgfkNDTGF5
ZXJUcmVlSG9zdEltcGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwogICAg
IHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOwogCiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOwogCiAgICAgaW50
IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQogCkBAIC02Mywx
MiArNjUsMTUgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50IGZy
YW1lTnVtYmVyKSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQogCiBwcm90
ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJ
bXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+KTsKKyAgICB2b2lk
IGRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBjb250ZXh0
TG9zdCk7CiAgICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJhbWVOdW1i
ZXI7CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9jbGllbnQ7
CiAgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKaW5kZXggNjhh
MjUxYWU0MTNmOTNkYTU1M2JiZmE4ZDhkNjk0ZTA1ZmVhYjg4Ny4uZTI1NWE5NGUzY2UxODhlMjI2
ZmMwYTIzYzNkYWY0OTczNzljOWFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkuY3BwCkBAIC0yMDEsNyArMjAxLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxl
dGlvbikKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0
SW1wbE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKLSAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsID0gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKTsKKyAgICBt
X2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0
SW1wbCh0aGlzKTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCA1MTFiYTUwMDEzZDBjYzI3YmY2MThmZGYwYmYxNjViMWE1ZjZiODhm
Li42NDE3MTQxNjQ5MDM4ZjUzMWRjMTFjYjQ1NWNmZmFlYmQ0ODM1NDdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDExLTA4LTA1ICBOYXQgRHVjYSAgPG5k
dWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1ha2UgV2ViVmlld0ltcGwg
cG9pbnQgYXQgQ0NMYXllclRyZWVIb3N0IGFuZCByZWxhdGVkIHNlcGFyYXRpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1NzkxCisKKyAgICAgICAg
V2l0aCB0aGlzIHBhdGNoLCBMYXllclJlbmRlcmVyQ2hyb21pdW0gYmVjb21lcyBpbmNyZWFzaW5n
bHkgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIHJlbmRlcmluZywgd2hpbGUgcmVuZGVyIHNjaGVk
dWxpbmcgYW5kIHRyZWUgaG9zdGluZyBtb3ZlcyBpbnRvIHRoZQorICAgICAgICBDQ0xheWVyVHJl
ZUhvc3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpXZWJTZXR0aW5nc0ltcGwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0Vu
YWJsZWQpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViU2V0dGluZ3NJbXBsOjphY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6V2Vi
Vmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RQbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6Z2V0Q29tcG9zaXRvclNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVSb290TGF5ZXJQYWludGVyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6c2V0VmlzaWJpbGl0eVN0YXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoK
KwogMjAxMS0wOC0wNSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBJbnRyb2R1Y2UgYSBuZXcgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIGZvciBY
SFJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5n
cy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCAy
NWU3NmE4NmM5ZmI2Mzc5OTQyMGZlNWMxYWI1ZWZmNzYyYWJkYzAwLi4zOTBlOThhZDFmZDUyNDgz
Yjk2YTMwNjM0MDAyYjc4Y2UyNGVhOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlNldHRpbmdzLmgKQEAgLTExNCw2ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHNldExlZ2FjeUFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGJvb2wpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11bUFjY2VsZXJhdGVkMmRDYW52YXNTaXplKGludCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGJvb2wpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5SW5mb0VuYWJsZWQoYm9vbCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRIeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQoYm9vbCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKSA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0lt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcApp
bmRleCAwNGEzNDI4MTRlMmJiZjZiMGIyNTA0M2U5ZGIzYjFkZjdjMmY3MzVhLi45YmJkNmE1MzI5
YjA4MDZhMDM3NzllYThmZTJkNmUyZDY2NzZkMDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAKIFdlYlNldHRpbmdzSW1wbDo6V2ViU2V0dGluZ3NJbXBsKFNldHRpbmdzKiBz
ZXR0aW5ncykKICAgICA6IG1fc2V0dGluZ3Moc2V0dGluZ3MpCisgICAgLCBtX2FjY2VsZXJhdGVk
RHJhd2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2NvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQo
ZmFsc2UpCiAgICAgLCBtX3Nob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICwgbV9zaG93UGxhdGZv
cm1MYXllclRyZWUoZmFsc2UpCkBAIC0zNTAsNyArMzUxLDcgQEAgdm9pZCBXZWJTZXR0aW5nc0lt
cGw6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JBbmltYXRpb25FbmFibGVkKGJvb2wgZW5h
YmxlZCkKIAogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewotICAgIG1fc2V0dGluZ3MtPnNldEFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQoZW5hYmxlZCk7CisgICAgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkID0gZW5h
YmxlZDsKIH0KIAogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkMmRDYW52YXNF
bmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmgKaW5kZXggNThmMjVjY2Y4ZTBiN2UyNTYxY2YwODA5YzM4YTNiMTI5MDRhMmRj
My4uNmRkMjkyMGY5MjlmNDk2OGZlZGQwNmI1ZTMxMjhlZGIzZjI5NzIyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKQEAgLTEwNyw2ICsxMDcsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldExlZ2FjeUFjY2VsZXJhdGVkMmRDYW52YXNF
bmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNaW5pbXVtQWNjZWxlcmF0ZWQyZENh
bnZhc1NpemUoaW50KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5h
YmxlZChib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDsgfQogICAgIHZpcnR1
YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBc3lu
Y2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sKTsKQEAgLTEyMyw2ICsxMjQsNyBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6U2V0dGluZ3MqIG1fc2V0dGluZ3M7Cisg
ICAgYm9vbCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX2NvbXBvc2l0
ZVRvVGV4dHVyZUVuYWJsZWQ7CiAgICAgYm9vbCBtX3Nob3dGUFNDb3VudGVyOwogICAgIGJvb2wg
bV9zaG93UGxhdGZvcm1MYXllclRyZWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKaW5kZXggMGNlYmQxMzI5ZjZkNmIwNTJlMGQzNWM0ZWQzMDI1MThmYTE4ZjU5
YS4uOGUyNmYzYWM0ZTU1ZjUzNWViNjRkZGQ4OGU5ZjU2YTk2ZGVmOTZmMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtNzMsNiArNzMsNyBAQAogI2lu
Y2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgi
CiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKQEAgLTMzOSw3ICszNDAsNyBA
QCBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KQogICAgICwg
bV90YWJzVG9MaW5rcyhmYWxzZSkKICAgICAsIG1fZHJhZ1Njcm9sbFRpbWVyKGFkb3B0UHRyKG5l
dyBEcmFnU2Nyb2xsVGltZXIpKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAg
ICAsIG1fbGF5ZXJSZW5kZXJlcigwKQorICAgICwgbV9sYXllclRyZWVIb3N0KDApCiAgICAgLCBt
X3Jvb3RHcmFwaGljc0xheWVyKDApCiAgICAgLCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZShmYWxzZSkKICAgICAsIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkKGZhbHNlKQpAQCAt
MTAxNiw3ICsxMDE3LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUm
IG5ld1NpemUpCiAgICAgaWYgKG1fY2xpZW50KSB7CiAgICAgICAgIGlmIChpc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
LSAgICAgICAgICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOworICAgICAgICAgICAg
dXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKICNlbmRpZgogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5o
ZWlnaHQpOwpAQCAtMTA0MywxMSArMTA0NCwxNSBAQCB2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRl
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICBpZiAod2ViZnJhbWUpIHsKICAgICAgICAgRnJh
bWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmlldygpOwogICAgICAgICBpZiAodmlldykg
ewotICAgICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnNldElzQW5pbWF0aW5nKHRydWUpOworI2lmICFVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCisgICAgICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW5nKHRydWUpOworI2VuZGlmCiAgICAgICAg
ICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01U
aW1lU3RhbXAoZnJhbWVCZWdpblRpbWUpKTsKLSAgICAgICAgICAgIGlmIChtX2xheWVyUmVuZGVy
ZXIpCi0gICAgICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRJc0FuaW1hdGluZyhmYWxz
ZSk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgICAgIGlmIChtX2xh
eWVyVHJlZUhvc3QpCisgICAgICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRBbmltYXRp
bmcoZmFsc2UpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTEwOTcsNyAr
MTEwMiw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNh
bnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiByZWN0CiAgICAgT3duUHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpKSk7CiAgICAgUmVm
UHRyPEJ5dGVBcnJheT4gcGl4ZWxBcnJheShCeXRlQXJyYXk6OmNyZWF0ZShyZWN0LndpZHRoKCkg
KiByZWN0LmhlaWdodCgpICogNCkpOwogICAgIGlmIChpbWFnZUJ1ZmZlci5nZXQoKSAmJiBwaXhl
bEFycmF5LmdldCgpKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQ
aXhlbHMocGl4ZWxBcnJheS0+ZGF0YSgpLCBpbnZlcnRSZWN0KTsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbEFycmF5LT5kYXRhKCksIGludmVydFJl
Y3QpOwogICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShwaXhl
bEFycmF5LmdldCgpLCByZWN0LnNpemUoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUo
KSksIEludFBvaW50KCkpOwogICAgICAgICBnYy5zYXZlKCk7CiAgICAgICAgIGdjLnRyYW5zbGF0
ZShJbnRTaXplKDAsIGJpdG1hcEhlaWdodCkpOwpAQCAtMTExNCwxOCArMTExOSwxMiBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVj
dCkKIHsKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQotICAgICAgICAvLyBGSVhNRTogZG8gcmVhZGJhY2sgaW4gdGhyZWFkZWQgY29tcG9zaXRpbmcg
bW9kZSByYXRoZXIgdGhhbiByZXR1cm5pbmcgbm90aGluZwotICAgICAgICByZXR1cm47Ci0jZW5k
aWYKLSAgICAgICAgZG9Db21wb3NpdGUoKTsKLQogICAgICAgICAvLyBJZiBhIGNhbnZhcyB3YXMg
cGFzc2VkIGluLCB3ZSB1c2UgaXQgdG8gZ3JhYiBhIGNvcHkgb2YgdGhlCiAgICAgICAgIC8vIGZy
ZXNobHktcmVuZGVyZWQgcGl4ZWxzLgogICAgICAgICBpZiAoY2FudmFzKSB7CiAgICAgICAgICAg
ICAvLyBDbGlwIHJlY3QgdG8gdGhlIGNvbmZpbmVzIG9mIHRoZSByb290TGF5ZXJUZXh0dXJlLgog
ICAgICAgICAgICAgSW50UmVjdCByZXNpemVSZWN0KHJlY3QpOwotICAgICAgICAgICAgcmVzaXpl
UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX2xheWVyUmVuZGVyZXItPnZpZXdw
b3J0U2l6ZSgpKSk7CisgICAgICAgICAgICByZXNpemVSZWN0LmludGVyc2VjdChJbnRSZWN0KElu
dFBvaW50KDAsIDApLCBtX2xheWVyVHJlZUhvc3QtPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS5zaXpl
KCkpKTsKICAgICAgICAgICAgIGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKGNhbnZhcywgcmVzaXpl
UmVjdCk7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMTE1MSw0NiArMTE1MCwyMCBAQCB2b2lkIFdl
YlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXctPmludmFsaWRhdGVSZWN0KGRhbWFn
ZWRSZWN0KTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUg
ZnJhbWVCZWdpblRpbWUpCi17Ci0gICAgYW5pbWF0ZShmcmFtZUJlZ2luVGltZSk7Ci0gICAgbGF5
b3V0KCk7Ci19Ci0KIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKIHsK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFRIUkVBREVEX0NPTVBP
U0lUSU5HKQotICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldE5lZWRzUmVkcmF3KCk7CiAjZWxzZQotICAgIFRSQUNFX0VWRU5UKCJX
ZWJWaWV3SW1wbDo6Y29tcG9zaXRlIiwgdGhpcywgMCk7Ci0KLSAgICBpZiAobV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0KSB7Ci0gICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJl
cXVlc3QgYSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0IHN1Y2NlZWRlZAotICAgICAgICAvLyBp
biBjcmVhdGluZyBhIG5ldyBjb250ZXh0LgotICAgICAgICByZWFsbG9jYXRlUmVuZGVyZXIoKTsK
LSAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7CisgICAgQVNTRVJU
KGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKTsKKyAgICBpZiAoIXBhZ2UoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIC8vIERvIG5vdCBjb21wb3NpdGUgaWYgdGhlIGNv
bXBvc2l0b3IgY29udGV4dCBpcyBhbHJlYWR5IGxvc3QuCi0gICAgaWYgKCFtX2xheWVyUmVuZGVy
ZXItPmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkpIHsKLSAgICAgICAgZG9Db21wb3NpdGUoKTsK
LQotICAgICAgICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgotICAgICAgICBtX2xheWVyUmVuZGVy
ZXItPnByZXNlbnQoKTsKLSAgICB9CisgICAgaWYgKG1fcGFnZU92ZXJsYXkpCisgICAgICAgIG1f
cGFnZU92ZXJsYXktPnVwZGF0ZSgpOwogCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+aXNDb21w
b3NpdG9yQ29udGV4dExvc3QoKSkgewotICAgICAgICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUg
Y29udGV4dCByaWdodCBoZXJlIHdpbGwgbm90IHdvcmsgaWYgR1BVIHByb2Nlc3MKLSAgICAgICAg
Ly8gZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3
aWxsIG9ubHkgYmUKLSAgICAgICAgLy8gY2FsbGVkIGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0
aGUgbWVzc2FnZSBsb29wLCByZXZlcnRpbmcgb3VyCi0gICAgICAgIC8vIHJlY292ZXJ5IGF0dGVt
cHRzIGhlcmUuIEluc3RlYWQsIHdlIGRldGFjaCB0aGUgcm9vdCBsYXllciBmcm9tIHRoZQotICAg
ICAgICAvLyByZW5kZXJlciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3Nh
Z2UgbG9vcCBpdGVyYXRpb24KLSAgICAgICAgLy8gYW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBh
Z2Fpbi4KLSAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKLSAgICAg
ICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0gICAgfQorICAgIG1fbGF5ZXJUcmVlSG9z
dC0+Y29tcG9zaXRlKGZpbmlzaCk7CiAjZW5kaWYKICNlbmRpZgogfQpAQCAtMjQ2Niw4ICsyNDM5
LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogbGF5ZXIpCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290UGxhdGZvcm1MYXll
cihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXllcikKIHsKICAgICBzZXRJc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUobGF5ZXIpOwotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Um9vdExheWVyKGxheWVyKTsKKyAgICBpZiAobV9sYXll
clRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihsYXllcik7
CiAKICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhl
aWdodCk7CiAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKQpAQCAtMjQ3
OSwzMSArMjQ1MiwzMCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290UGxhdGZvcm1MYXllcihX
ZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXllcikKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RM
YXllck5lZWRzRGlzcGxheSgpCiB7CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAg
IGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAjZWxzZQogICAgIG1fY2xp
ZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOwogI2VuZGlmCiB9CiAKLQogdm9pZCBXZWJWaWV3SW1w
bDo6c2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3Qg
SW50UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7
CisgICAgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rp
c3BsYXkoKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAg
ICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKIAogICAgIGlmICghcGFnZSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJlY3Qp
OwotICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOwotICAgIG1fbGF5ZXJSZW5kZXJl
ci0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGlydHlSZWN0KTsKKyAgICB1cGRhdGVMYXllclRy
ZWVWaWV3cG9ydCgpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+aW52YWxpZGF0ZVJvb3RMYXllclJl
Y3QoZGlydHlSZWN0KTsKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIApAQCAt
MjUzOCw2ICsyNTEwLDE2IEBAIHByaXZhdGU6CiAgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0lt
cGw7CiB9OwogCitXZWJDb3JlOjpDQ1NldHRpbmdzIGdldENvbXBvc2l0b3JTZXR0aW5ncyhXZWJT
ZXR0aW5ncyogc2V0dGluZ3MpCit7CisgICAgV2ViQ29yZTo6Q0NTZXR0aW5ncyByZXM7CisgICAg
cmVzLmFjY2VsZXJhdGVQYWludGluZyA9IHNldHRpbmdzLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFi
bGVkKCk7CisgICAgcmVzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IHNldHRpbmdzLT5jb21wb3NpdGVU
b1RleHR1cmVFbmFibGVkKCk7CisgICAgcmVzLnNob3dGUFNDb3VudGVyID0gc2V0dGluZ3MtPnNo
b3dGUFNDb3VudGVyKCk7CisgICAgcmVzLnNob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNldHRpbmdz
LT5zaG93UGxhdGZvcm1MYXllclRyZWUoKTsKKyAgICByZXR1cm4gcmVzOworfQorCiB2b2lkIFdl
YlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUp
CiB7CiAgICAgUGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJHUFUuc2V0SXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlIiwgYWN0aXZlICogMiArIG1faXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQWN0aXZlLCA0KTsKQEAgLTI1NTAsMjAgKzI1MzIsMTkgQEAgdm9pZCBXZWJW
aWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQog
ICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmlzaCBhbGwgR0wgcmVuZGVyaW5nIGJlZm9yZSBzZW5k
aW5nCiAgICAgICAgIC8vIGRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhmYWxzZSkg
dG8gcHJldmVudAogICAgICAgICAvLyBmbGlja2VyaW5nIHdoZW4gY29tcG9zaXRpbmcgdHVybnMg
b2ZmLgotICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5maW5pc2goKTsKKyAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAgICAgICAgIG1fY2xp
ZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoZmFsc2UpOwotICAgIH0gZWxz
ZSBpZiAobV9sYXllclJlbmRlcmVyKSB7CisgICAgfSBlbHNlIGlmIChtX2xheWVyVHJlZUhvc3Qp
IHsKICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwotICAg
ICAgICB1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQoKTsKKyAgICAgICAgdXBkYXRlTGF5ZXJU
cmVlVmlld3BvcnQoKTsKIAogICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKHRydWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJX
ZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKHRydWUpIiwgdGhp
cywgMCk7CiAKLSAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjcmVhdGUodGhpcywgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpLCBt
X3BhZ2UtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7Ci0gICAgICAg
IGlmIChtX2xheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJT
ZXR0aW5ncygpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNy
ZWF0ZSh0aGlzLCBnZXRDb21wb3NpdG9yU2V0dGluZ3Moc2V0dGluZ3MoKSkpOworICAgICAgICBp
ZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRp
b25GYWlsZWQgPSBmYWxzZTsKQEAgLTI1NzksMjQgKzI1NjAsNyBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAg
IHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0Q2xpcHNSZXBhaW50cyghbV9pc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBv
c2l0ZSgpCi17Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgaWYgKCFtX2xheWVy
UmVuZGVyZXIpIHsKLSAgICAgICAgc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGZh
bHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChpc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUoKSk7Ci0gICAgaWYgKCFwYWdlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUo
KTsKLQotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci0gICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzKCk7Ci19CisjZW5kaWYKIAogUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQogewpA
QCAtMjYwOSw0NiArMjU3MywzOCBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBXZWJW
aWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCiAgICAgcmV0dXJuIGNvbnRl
eHQ7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigpCitQYXNzT3du
UHRyPExheWVyUGFpbnRlckNocm9taXVtPiBXZWJWaWV3SW1wbDo6Y3JlYXRlUm9vdExheWVyUGFp
bnRlcigpCiB7Ci0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFu
ZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNlIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlIHdp
bGwgYWxzbyByZXR1cm4gMC4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXll
clJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgV2ViVmlld0lt
cGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpLCBtX3BhZ2UtPnNldHRpbmdzKCktPmFjY2Vs
ZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7CisgICAgcmV0dXJuIFdlYlZpZXdJbXBsQ29udGVudFBh
aW50ZXI6OmNyZWF0ZSh0aGlzKTsKK30KIAotICAgIC8vIFJlYXR0YWNoIHRoZSByb290IGxheWVy
LiAgQ2hpbGQgbGF5ZXJzIHdpbGwgZ2V0IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1
cGRhdGVMYXllcnNSZWN1cnNpdmUuCi0gICAgaWYgKGxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAg
bV9sYXllclJlbmRlcmVyLT50cmFuc2ZlclJvb3RMYXllcihsYXllclJlbmRlcmVyLmdldCgpKTsK
LSAgICAgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKLSAgICAgICAgdXBkYXRl
TGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7Cit2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBhbmltYXRlKGZyYW1lQmVnaW5UaW1l
KTsKKyAgICBsYXlvdXQoKTsKK30KIAotICAgICAgICAvLyBGSVhNRTogSW4gTWFjT1MgbmV3Q29u
dGV4dC0+cmVzaGFwZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIHRvCi0gICAgICAgIC8vIGFs
bG9jYXRlIElPU3VyZmFjZXMuIEFsbCBjYWxscyB0byBjcmVhdGUgYSBjb250ZXh0IGZvbGxvd2Vk
IGJ5Ci0gICAgICAgIC8vIHJlc2hhcGUgc2hvdWxkIHJlYWxseSBiZSBleHRyYWN0ZWQgaW50byBv
bmUgZnVuY3Rpb247IGl0IGlzIG5vdAotICAgICAgICAvLyBpbW1lZGlhdGVseSBvYnZpb3VzIHRo
YXQgR3JhcGhpY3NDb250ZXh0M0Qgb2JqZWN0IHdpbGwgbm90Ci0gICAgICAgIC8vIGZ1bmN0aW9u
IHByb3Blcmx5IHVudGlsIGl0cyByZXNoYXBlIG1ldGhvZCBpcyBjYWxsZWQuCi0gICAgICAgIGxh
eWVyUmVuZGVyZXItPmNvbnRleHQoKS0+cmVzaGFwZShtYXgoMSwgbV9zaXplLndpZHRoKSwgbWF4
KDEsIG1fc2l6ZS5oZWlnaHQpKTsKLSAgICAgICAgc2V0Um9vdFBsYXRmb3JtTGF5ZXIobV9sYXll
clJlbmRlcmVyLT5yb290TGF5ZXIoKSk7Cit2b2lkIFdlYlZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdy
YXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCit7CisgICAgc2V0Um9vdFBsYXRmb3JtTGF5ZXIo
c3VjY2VzcyA/IG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkgOiAwKTsKIAotICAgICAgICAv
LyBGb3JjZXMgVmlld0hvc3RNc2dfRGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nIHRv
IGJlIHNlbnQgc28KLSAgICAgICAgLy8gdGhhdCB0aGUgYnJvd3NlciBwcm9jZXNzIGNhbiByZWFj
cXVpcmUgc3VyZmFjZXMuCi0gICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcodHJ1ZSk7Ci0gICAgICAgIGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAgICAg
ICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldFJvb3RQ
bGF0Zm9ybUxheWVyKDApOworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAvLyBGb3JjZXMgVmll
d0hvc3RNc2dfRGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nIHRvIGJlIHNlbnQgc28K
KyAgICAgIC8vIHRoYXQgdGhlIGJyb3dzZXIgcHJvY2VzcyBjYW4gcmVhY3F1aXJlIHN1cmZhY2Vz
LgorICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVl
KTsKKyAgICAgIGlmIChtX3BhZ2VPdmVybGF5KQorICAgICAgICAgIG1fcGFnZU92ZXJsYXktPnVw
ZGF0ZSgpOworICAgIH0KIH0KLSNlbmRpZgogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXll
clJlbmRlcmVyU2V0dGluZ3MoKQorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCit2b2lk
IFdlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSgpCiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJS
ZW5kZXJlcik7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5zZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0
dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpKTsKLQotICAgIENDSGVhZHNVcERp
c3BsYXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVhZHNVcERpc3BsYXkoKTsKLSAgICBodWQt
PnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCkpOwotICAgIGh1
ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVy
VHJlZSgpKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0KKyNlbmRpZgog
Ci12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQoKQordm9pZCBX
ZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKQogewogICAgIGlmICghcGFnZSgp
KQogICAgICAgICByZXR1cm47CkBAIC0yNjU4LDE1ICsyNjE0LDE1IEBAIHZvaWQgV2ViVmlld0lt
cGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpCiAgICAgSW50UmVjdCB2aXNpYmxlUmVj
dCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKICAgICBJbnRQb2ludCBzY3JvbGwo
dmlldy0+c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpOwogCi0gICAgbV9sYXllclJlbmRlcmVy
LT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIHNjcm9sbCk7CisgICAgbV9s
YXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIHNjcm9s
bCk7CiB9CiAKIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6Z3JhcGhpY3NDb250
ZXh0M0QoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAobV9w
YWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpICYmIGFsbG93
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBpZiAobV9sYXllclJlbmRlcmVy
KSB7Ci0gICAgICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2ViQ29udGV4dCA9IEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChtX2xheWVy
UmVuZGVyZXItPmNvbnRleHQoKSk7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKKyAg
ICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1fbGF5ZXJUcmVlSG9z
dC0+Y29udGV4dCgpKTsKICAgICAgICAgICAgIGlmICh3ZWJDb250ZXh0ICYmICF3ZWJDb250ZXh0
LT5pc0NvbnRleHRMb3N0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYkNvbnRleHQ7CiAg
ICAgICAgIH0KQEAgLTI2OTgsOCArMjY1NCw4IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFZpc2li
aWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0ZSwKICNlbmRp
ZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChpc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoKSAmJiB2aXNpYmlsaXR5U3RhdGUgPT0gV2ViUGFnZVZpc2li
aWxpdHlTdGF0ZUhpZGRlbikKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNlVGV4dHVy
ZXMoKTsKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpCisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0VmlzaWJsZSh2aXNpYmlsaXR5U3RhdGUgPT0gV2ViUGFnZVZp
c2liaWxpdHlTdGF0ZVZpc2libGUpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGFlMzUyNWY2ZGY5OTBiZTJiOWIxYWM0ZTU4ZGQ4MTdh
MThkYzc5YjQuLjhkMTEzZTZkMGVjODkzM2JjMTg3ZDM1ZDY5YmYzOWE0YTE0ODc5MTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNDYsOSArNDYsOSBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRJbXBs
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCIKICNpbmNsdWRlICJQ
YWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC0yMTAsNiAr
MjEwLDExIEBAIHB1YmxpYzoKICAgICAvLyBDQ0xheWVyVHJlZUhvc3RDbGllbnQKICAgICB2aXJ0
dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJU
cmVlSG9zdENvbnRleHQzRCgpOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpMYXll
clBhaW50ZXJDaHJvbWl1bT4gY3JlYXRlUm9vdExheWVyUGFpbnRlcigpOworICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOworI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRl
KCk7CisjZW5kaWYKIAogICAgIC8vIFdlYlZpZXdJbXBsCiAKQEAgLTQzNCwxMSArNDM5LDEyIEBA
IHByaXZhdGU6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdm9pZCBz
ZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCk7CisjaWYgIVVTRShUSFJFQURF
RF9DT01QT1NJVElORykKICAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CisjZW5kaWYKICAgICB2b2lk
IGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyosIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKTsKICAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOwotICAgIHZvaWQgdXBkYXRlTGF5
ZXJSZW5kZXJlclNldHRpbmdzKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclJlbmRlcmVyVmlld3Bv
cnQoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAjZW5kaWYKIAogICAg
IFdlYlZpZXdDbGllbnQqIG1fY2xpZW50OwpAQCAtNTU1LDcgKzU2MSw3IEBAIHByaXZhdGU6CiAK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgV2ViQ29yZTo6SW50UmVjdCBt
X3Jvb3RMYXllclNjcm9sbERhbWFnZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OwogICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1f
cm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZTsKICAgICBib29sIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103368</attachid>
            <date>2011-08-09 10:13:01 -0700</date>
            <delta_ts>2011-08-10 15:59:00 -0700</delta_ts>
            <desc>Pass mac ews</desc>
            <filename>bug-65791-20110809101300.patch</filename>
            <type>text/plain</type>
            <size>78443</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI0ODgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4M2UxMjk5OWQ5MDY3YzRj
NDMzYmY1YzcwOTcyMzE1N2Q0MTE0NjJmLi4zMmJlYjY5ZjcwOGU0MzNhMzU5YmMyYTY2YjRlMTJk
NTdjMTE1YTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMDUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBXZWJW
aWV3SW1wbCBwb2ludCBhdCBDQ0xheWVyVHJlZUhvc3QgYW5kIHJlbGF0ZWQgc2VwYXJhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3OTEKKwor
ICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIExheWVyUmVuZGVyZXJDaHJvbWl1bSBiZWNvbWVzIGlu
Y3JlYXNpbmdseSByZXNwb25zaWJsZQorICAgICAgICBmb3IgcmVuZGVyaW5nLCB3aGlsZSByZW5k
ZXIgc2NoZWR1bGluZyBhbmQgdHJlZSBob3N0aW5nIG1vdmVzIGludG8gdGhlCisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0
dXJlVXBkYXRlcklmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbnRleHRTdXBwb3J0c0FjY2VsZXJhdGVkUGFpbnRpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlVGV4dHVyZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVSb290TGF5ZXJDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbnZhbGlk
YXRlUm9vdExheWVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OnJvb3RMYXllckNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp2aWV3cG9ydENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRv
RGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJl
bmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpz
ZXRTY2lzc29yVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6bGF5ZXJUcmVlQXNUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpvd25lcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OnNraWFDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9X
ZWJHTExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9t
aXVtOjpzZXRUZXh0dXJlVXBkYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0hlYWRz
VXBEaXNwbGF5OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmVu
YWJsZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNV
cERpc3BsYXkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZVJvb3RMYXllclBhaW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlUm9vdExheWVy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNS
ZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpkb0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OnJlYWxsb2NhdGVSZW5kZXJlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OnNldEFuaW1hdGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnJvb3RM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldHRpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dmlld3BvcnRDb250ZW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnZpZXdwb3J0U2Nyb2xsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp2aWV3cG9ydFZpc2libGVSZWN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhv
c3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09u
TWFpblRocmVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCk6CisKIDIwMTEtMDgtMDUg
IEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW50cm9k
dWNlIGEgbmV3IFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0VHlwZSBmb3IgWEhScwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDRhY2MwMzY1YWMwMTEyNjZjMGMyZTE3NjZm
ZmVjYzEzZmY2ZGI3ODkuLmIwNjc5NzExYjJiNGUxYjI0ZjRkYzM0ZDkzMzM5N2U5ZmRlMTBhNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEyMyw3ICsxMjMsNyBA
QCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcklmTmVlZGVk
KCkKICAgICBpZiAobV90ZXh0dXJlVXBkYXRlcikKICAgICAgICAgcmV0dXJuOwogI2lmIFVTRShT
S0lBKQotICAgIGlmIChsYXllclJlbmRlcmVyKCktPmFjY2VsZXJhdGVEcmF3aW5nKCkpIHsKKyAg
ICBpZiAobGF5ZXJSZW5kZXJlcigpLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewog
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6
Y3JlYXRlKGxheWVyUmVuZGVyZXJDb250ZXh0KCksIENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0
ZShtX293bmVyKSwgbGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA0ZTQwMWNjZTg4YWI5YWQyMjFiZDQ3
ZDdkZmUxOWM3M2Q1YjFmNDBlLi5lNTdhZWFhM2ZkNDVmM2NmNGVkODhiMDRkYjUxZTVhZGEzYjEx
OWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC01Myw2ICs1Myw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CiAKQEAg
LTE0OSw2ICsxNTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBEZXJpdmVkIHR5cGVzIG11c3Qgb3Zl
cnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSBuZWVkIHRvIHJlYWN0IHRvIGEgY2hhbmdlCiAgICAg
Ly8gaW4gdGhlIExheWVyUmVuZGVyZXJDaHJvbWl1bS4KKyAgICAvLyBUT09ELCByZXBsYWNlIHdp
dGggQ0NMYXllclRyZWVIb3N0CiAgICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVuZGVyZXIoTGF5
ZXJSZW5kZXJlckNocm9taXVtKik7CiAKICAgICB2b2lkIHNldE93bmVyKEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSogb3duZXIpIHsgbV9vd25lciA9IG93bmVyOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAppbmRleCBiZmMyOWI3OGQxZDNmNTcwODdjMGM3M2QzMDY5MjE0OGYx
MjhkNWI4Li4wMzgzYjNlZDAxMGExZGEwMzcxYzFlZGY3NTRkZTE1YWIzMWI3NGE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgiCiAjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgogI2lmIFVTRShTS0lBKQogI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgpAQCAtNDIwLDY0ICs0MTksNTkgQEAgc3RhdGljIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHNjcmVlbk1hdHJpeChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCkKICAgICByZXR1cm4gc2NyZWVuOwogfQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0
Q2xpZW50KiBjbGllbnQsIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQ
YWludCwgYm9vbCBhY2NlbGVyYXRlRHJhd2luZykKK1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93
bmVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogewotICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IGNsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9z
dENvbnRleHQzRCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5l
dyBMYXllclJlbmRlcmVyQ2hyb21pdW0oY2xpZW50LCBjb250ZXh0LCBjb250ZW50UGFpbnQsIGFj
Y2VsZXJhdGVEcmF3aW5nKSkpOwotICAgIGxheWVyUmVuZGVyZXItPmluaXQoKTsKLSAgICBpZiAo
IWxheWVyUmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKKyAgICBSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVy
Q2hyb21pdW0ob3duZXIsIGNvbnRleHQpKSk7CisgICAgaWYgKCFsYXllclJlbmRlcmVyLT5pbml0
aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGxheWVyUmVuZGVyZXIu
cmVsZWFzZSgpOwogfQogCi1MYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFjY2VsZXJhdGVEcmF3aW5nKQot
ICAgIDogQ0NMYXllclRyZWVIb3N0KGNsaWVudCkKLSAgICAsIG1fdmlld3BvcnRTY3JvbGxQb3Np
dGlvbihJbnRQb2ludCgtMSwgLTEpKQotICAgICwgbV9yb290TGF5ZXIoMCkKLSAgICAsIG1fYWNj
ZWxlcmF0ZURyYXdpbmcoZmFsc2UpCitMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCkKKyAgICA6IG1fb3duZXIob3duZXIpCiAgICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNl
KDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKLSAgICAsIG1fY29tcG9zaXRl
T2Zmc2NyZWVuKGZhbHNlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2NvbnRl
eHRTdXBwb3J0c1RleHR1cmVGb3JtYXRCR1JBKGZhbHNlKQotICAgICwgbV9jb250ZXh0U3VwcG9y
dHNSZWFkRm9ybWF0QkdSQShmYWxzZSkKLSAgICAsIG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwg
bV9kZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQogeworfQorCitib29sIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6aW5pdGlhbGl6ZSgpCit7CiAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNp
b25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CiAgICAgbV9jb250ZXh0U3VwcG9ydHNN
YXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwogICAg
IGlmIChtX2NvbnRleHRTdXBwb3J0c01hcFN1YikKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJl
RW5hYmxlZCgiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwotICAgIG1fY29udGV4dFN1cHBvcnRzVGV4
dHVyZUZvcm1hdEJHUkEgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4Iik7Ci0gICAgaWYgKG1fY29udGV4dFN1cHBvcnRzVGV4dHVyZUZvcm1hdEJH
UkEpCi0gICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OCIpOwotICAgIG1fY29udGV4dFN1cHBvcnRzUmVhZEZvcm1hdEJHUkEgPSBl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKLSAgICBpZiAo
bV9jb250ZXh0U3VwcG9ydHNSZWFkRm9ybWF0QkdSQSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKIAotI2lmIFVTRShTS0lBKQot
ICAgIG1fYWNjZWxlcmF0ZURyYXdpbmcgPSBhY2NlbGVyYXRlRHJhd2luZyAmJiBza2lhQ29udGV4
dCgpOwotI2VuZGlmCi0gICAgbV9oYXJkd2FyZUNvbXBvc2l0aW5nID0gaW5pdGlhbGl6ZVNoYXJl
ZE9iamVjdHMoKTsKKyAgICBpZiAoIWluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAogI2lmIFVTRShTS0lBKQotICAgIGlmIChtX2FjY2VsZXJhdGVEcmF3
aW5nKQotICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBk
YXRlclNrUGljdHVyZTo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgY29udGVudFBhaW50LCBza2lh
Q29udGV4dCgpKTsKKyAgICBpZiAoc2V0dGluZ3MoKS5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAgICAgbV9za2lhQ29u
dGV4dCA9IGFkb3B0UHRyKEdyQ29udGV4dDo6Q3JlYXRlR0xTaGFkZXJDb250ZXh0KCkpOworICAg
ICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1h
cC0+dGV4dHVyZSBjYWNoZS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhUZXh0dXJlQ2Fj
aGVDb3VudCA9IDUxMjsKKyAgICAgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dh
cmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7Cisg
ICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2Fj
aGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgICAgICBtX3Jvb3RMYXllclRleHR1
cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKG1fY29udGV4
dC5nZXQoKSwgbV9vd25lci0+Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpLCBza2lhQ29udGV4dCgp
KTsKKyAgICB9CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVVw
ZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUobV9jb250ZXh0LmdldCgp
LCBjb250ZW50UGFpbnQsIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKTsKKyAgICAgICAgbV9yb290
TGF5ZXJUZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZSht
X2NvbnRleHQuZ2V0KCksIG1fb3duZXItPmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKSwgbV9jb250
ZXh0U3VwcG9ydHNNYXBTdWIpOwogCiAgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIgPSBMYXll
clRpbGVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBJbnRTaXplKDI1NiwgMjU2KSwgTGF5ZXJUaWxl
ckNocm9taXVtOjpOb0JvcmRlclRleGVscyk7CiAgICAgQVNTRVJUKG1fcm9vdExheWVyQ29udGVu
dFRpbGVyKTsKIAogICAgIG1faGVhZHNVcERpc3BsYXkgPSBDQ0hlYWRzVXBEaXNwbGF5OjpjcmVh
dGUodGhpcyk7CisKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmlld3BvcnQgYW5kIGNvbnRleHQg
Z2V0cyBpbml0aWFsaXplZCwgZXZlbiBpZiBpdCBpcyB0byB6ZXJvLgorICAgIHZpZXdwb3J0Q2hh
bmdlZCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiBMYXllclJlbmRlcmVyQ2hyb21pdW06On5M
YXllclJlbmRlcmVyQ2hyb21pdW0oKQpAQCAtNDkyLDE4ICs0ODYsMjAgQEAgR3JhcGhpY3NDb250
ZXh0M0QqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29udGV4dCgpCiB9CiAKICNpZiBVU0UoU0tJ
QSkKLUdyQ29udGV4dCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpza2lhQ29udGV4dCgpCitib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGlu
ZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIHsKLSAgICBpZiAoIW1fc2tpYUNvbnRleHQg
JiYgbV9jb250ZXh0U3VwcG9ydHNUZXh0dXJlRm9ybWF0QkdSQSAmJiBtX2NvbnRleHRTdXBwb3J0
c1JlYWRGb3JtYXRCR1JBKSB7Ci0gICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgICAgIG1fc2tpYUNvbnRleHQgPSBhZG9wdFB0cihHckNvbnRleHQ6OkNyZWF0ZUdM
U2hhZGVyQ29udGV4dCgpKTsKLSAgICAgICAgLy8gTGltaXQgdGhlIG51bWJlciBvZiB0ZXh0dXJl
cyB3ZSBob2xkIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCi0gICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4VGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7Ci0gICAgICAgIC8vIExpbWl0IHRo
ZSBieXRlcyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUg
Y2FjaGUuCi0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4VGV4dHVyZUNhY2hlQnl0ZXMg
PSA1MCAqIDEwMjQgKiAxMDI0OwotICAgICAgICBtX3NraWFDb250ZXh0LT5zZXRUZXh0dXJlQ2Fj
aGVMaW1pdHMobWF4VGV4dHVyZUNhY2hlQ291bnQsIG1heFRleHR1cmVDYWNoZUJ5dGVzKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIG1fc2tpYUNvbnRleHQuZ2V0KCk7CisgICAgV2ViQ29yZTo6RXh0ZW5z
aW9uczNEKiBleHRlbnNpb25zID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IikpCisg
ICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9C
R1JBODg4OCIpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGV4
dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpKQorICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5k
aWYKIApAQCAtNTE0LDE2ICs1MTAsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRl
YnVnR0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogICAgICAg
ICBMT0dfRVJST1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNv
bW1hbmQ6ICVzLCBlcnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8
aW50PihlcnJvcikpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0
ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIG1fcm9vdExh
eWVyQ29udGVudFRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOwotfQotCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVRleHR1cmVzKCkKIHsKICAgICAvLyBSZWR1Y2Vz
IHRleHR1cmUgbWVtb3J5IHVzYWdlIHRvIHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzIGJ5IGRl
bGV0aW5nIG5vbiByb290IGxheWVyCiAgICAgLy8gdGV4dHVyZXMuCi0gICAgbV9yb290TGF5ZXJD
b250ZW50VGlsZXItPnByb3RlY3RUaWxlVGV4dHVyZXMobV92aWV3cG9ydFZpc2libGVSZWN0KTsK
KyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+cHJvdGVjdFRpbGVUZXh0dXJlcyhtX293bmVy
LT52aWV3cG9ydFZpc2libGVSZWN0KCkpOwogICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
cmVkdWNlTWVtb3J5VG9MaW1pdCh0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyk7CiAgICAgbV9j
b250ZW50c1RleHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogICAgIC8vIEV2
aWN0IGFsbCBSZW5kZXJTdXJmYWNlIHRleHR1cmVzLgpAQCAtNTM0LDc5ICs1MjUsNzkgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VUZXh0dXJlcygpCiB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoKQogewogICAgIFRSQUNFX0VW
RU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzIiwgdGhp
cywgMCk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnByZXBhcmVUb1VwZGF0ZShtX3Zp
ZXdwb3J0VmlzaWJsZVJlY3QsIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOworICAg
IG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5wcmVwYXJlVG9VcGRhdGUobV9vd25lci0+dmlld3Bv
cnRWaXNpYmxlUmVjdCgpLCBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyLmdldCgpKTsKIH0KIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIoKQogewogICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHNjcm9sbDsKLSAgICBzY3JvbGwudHJhbnNsYXRlKC1tX3ZpZXdwb3J0
VmlzaWJsZVJlY3QueCgpLCAtbV92aWV3cG9ydFZpc2libGVSZWN0LnkoKSk7CisgICAgc2Nyb2xs
LnRyYW5zbGF0ZSgtbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLngoKSwgLW1fb3duZXIt
PnZpZXdwb3J0VmlzaWJsZVJlY3QoKS55KCkpOwogCi0gICAgbV9yb290TGF5ZXJDb250ZW50VGls
ZXItPmRyYXcobV92aWV3cG9ydFZpc2libGVSZWN0LCBzY3JvbGwsIDEuMGYpOworICAgIG1fcm9v
dExheWVyQ29udGVudFRpbGVyLT5kcmF3KG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKSwg
c2Nyb2xsLCAxLjBmKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpZXdw
b3J0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
IHsKLSAgICBib29sIHZpc2libGVSZWN0Q2hhbmdlZCA9IG1fdmlld3BvcnRWaXNpYmxlUmVjdC5z
aXplKCkgIT0gdmlzaWJsZVJlY3Quc2l6ZSgpOwotCi0gICAgbV92aWV3cG9ydFZpc2libGVSZWN0
ID0gdmlzaWJsZVJlY3Q7Ci0gICAgbV92aWV3cG9ydENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7
Ci0gICAgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247Ci0KLSAgICBp
ZiAodmlzaWJsZVJlY3RDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAg
ICAgICBtX2NvbnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgdmlzaWJsZVJlY3Qud2lkdGgoKSks
IHN0ZDo6bWF4KDEsIHZpc2libGVSZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgIC8vIFJlc2V0IHRo
ZSBjdXJyZW50IHJlbmRlciBzdXJmYWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmlld3Bv
cnQgYW5kCi0gICAgICAgIC8vIHByb2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJT
dXJmYWNlIGlzIGNhbGxlZC4KLSAgICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7Ci0g
ICAgICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsK
LSAgICB9Ci0gICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBtX3Jvb3RMYXllckNv
bnRlbnRUaWxlci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnJvb3RMYXllckNoYW5nZWQoKQoreworICAgIG1fcm9vdExheWVyQ29u
dGVudFRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKK30KKwordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fY29udGV4dCkKKyAg
ICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fb3duZXItPnZpZXdwb3J0Vmlz
aWJsZVJlY3QoKS53aWR0aCgpKSwgc3RkOjptYXgoMSwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxl
UmVjdCgpLmhlaWdodCgpKSk7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRh
dGVFbnRpcmVMYXllcigpOworCisgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZh
Y2UgdG8gZm9yY2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKKyAgICAvLyBwcm9qZWN0
aW9uIG1hdHJpeCBuZXh0IHRpbWUgdXNlUmVuZGVyU3VyZmFjZSBpcyBjYWxsZWQuCisgICAgbV9j
dXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVMYXllcnMoKQogewotICAgIGlmIChtX3ZpZXdwb3J0VmlzaWJsZVJlY3QuaXNFbXB0
eSgpKQorICAgIGlmIChtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogdXNlIHRoZSBmcmFtZSBiZWdpbiB0aW1l
IGZyb20gdGhlIG92ZXJhbGwgY29tcG9zaXRvciBzY2hlZHVsZXIuCiAgICAgLy8gVGhpcyB2YWx1
ZSBpcyBjdXJyZW50bHkgaW5hY2Nlc3NpYmxlIGJlY2F1c2UgaXQgaXMgdXAgaW4gQ2hyb21pdW0n
cwogICAgIC8vIFJlbmRlcldpZGdldC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVn
aW4oY3VycmVudFRpbWUoKSk7Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CiAK
LSAgICBpZiAoIW1fcm9vdExheWVyKQorICAgIGlmICghcm9vdExheWVyKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CiAKICAgICAvLyBSZWNoZWNr
IHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIuIFRoaXMgbWF5IGJlY29tZSBudWxsIGlm
CiAgICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0dXJuZWQgb2ZmIGR1cmluZyBhIHBhaW50IG9wZXJh
dGlvbi4KLSAgICBpZiAoIW1fcm9vdExheWVyKQorICAgIGlmICghcm9vdExheWVyKCkpIHsKKyAg
ICAgICAgbV9yb290Q0NMYXllckltcGwuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIHVwZGF0ZUxheWVycyhtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJz
KHJvb3RMYXllcigpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoKQogewotICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogICAgIC8vIEJlZm9y
ZSBkcmF3TGF5ZXJzOgotICAgIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2FzZSB3aWxsIG5vdCB3b3Jr
IGFzIGxvbmcgYXMKLSAgICAgICAgLy8gY29weVRleEltYWdlMkQgcmVzb2x2ZXMgdG8gdGhlIHBh
cmVudCB0ZXh0dXJlLCBiZWNhdXNlIHRoZSBtYWluCi0gICAgICAgIC8vIHRocmVhZCBjYW4gZXhl
Y3V0ZSBXZWJHTCBjYWxscyBvbiB0aGUgY2hpbGQgY29udGV4dCBhdCBhbnkgdGltZSwKLSAgICAg
ICAgLy8gcG90ZW50aWFsbHkgY2xvYmJlcmluZyB0aGUgcGFyZW50IHRleHR1cmUgdGhhdCBpcyBi
ZWluZyByZW5kZXJlcmVkCi0gICAgICAgIC8vIGJ5IHRoZSBjb21wb3NpdG9yIHRocmVhZC4KLSAg
ICAgICAgQ2hpbGRDb250ZXh0TWFwOjppdGVyYXRvciBpID0gbV9jaGlsZENvbnRleHRzLmJlZ2lu
KCk7Ci0gICAgICAgIGZvciAoOyBpICE9IG1fY2hpbGRDb250ZXh0cy5lbmQoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBpLT5maXJzdC0+Zmx1c2goKTsKLSAgICAgICAgfQorICAgIC8vIEZJWE1FOiBU
aGUgbXVsdGl0aHJlYWRlZCBjb21wb3NpdG9yIGNhc2Ugd2lsbCBub3Qgd29yayBhcyBsb25nIGFz
CisgICAgLy8gY29weVRleEltYWdlMkQgcmVzb2x2ZXMgdG8gdGhlIHBhcmVudCB0ZXh0dXJlLCBi
ZWNhdXNlIHRoZSBtYWluCisgICAgLy8gdGhyZWFkIGNhbiBleGVjdXRlIFdlYkdMIGNhbGxzIG9u
IHRoZSBjaGlsZCBjb250ZXh0IGF0IGFueSB0aW1lLAorICAgIC8vIHBvdGVudGlhbGx5IGNsb2Ji
ZXJpbmcgdGhlIHBhcmVudCB0ZXh0dXJlIHRoYXQgaXMgYmVpbmcgcmVuZGVyZXJlZAorICAgIC8v
IGJ5IHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICBDaGlsZENvbnRleHRNYXA6Oml0ZXJhdG9y
IGkgPSBtX2NoaWxkQ29udGV4dHMuYmVnaW4oKTsKKyAgICBmb3IgKDsgaSAhPSBtX2NoaWxkQ29u
dGV4dHMuZW5kKCk7ICsraSkgeworICAgICAgICBpLT5maXJzdC0+Zmx1c2goKTsKICAgICB9CiAK
ICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnN5bmNo
cm9uaXplVHJlZXMiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKG1fcm9vdExheWVyLmdldCgpLCBtX3Jvb3RD
Q0xheWVySW1wbC5nZXQoKSk7CisgICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNo
cm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgbV9yb290Q0NMYXllckltcGwu
Z2V0KCkpOwogICAgIH0KIAogCkBAIC02MjEsOCArNjEyLDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICBlbHNlCiAgICAgICAgIG1fcmVuZGVyU3VyZmFj
ZVRleHR1cmVNYW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDApOwogCi0gICAgaWYgKGlzQ29t
cG9zaXRpbmdPZmZzY3JlZW4oKSkKKyAgICBpZiAoc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3Jl
ZW4pIHsKICAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKKyAgICAgICAg
Ly8gVE9ET0Q6IG1pZ2h0IGhhdmUgdG8gY2FsbAorICAgICAgICAvLyBtX3Jvb3RDQ0xheWVySW1w
bC0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CisgICAgfQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKQEAgLTYzMSwx
MSArNjI1LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5
ZXJDaHJvbWl1bSogcm9vdExheWVyKQogCiAgICAgaWYgKCFyb290TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSkKICAgICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9v
dExheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQo
MCwgMCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKKyAgICByb290TGF5ZXItPnJl
bmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9v
d25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLnNpemUoKSkpOwogCi0gICAgSW50UmVjdCByb290
U2Npc3NvclJlY3QobV92aWV3cG9ydFZpc2libGVSZWN0KTsKKyAgICBJbnRSZWN0IHJvb3RTY2lz
c29yUmVjdChtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkpOwogICAgIC8vIFRoZSBzY2lz
c29yUmVjdCBzaG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQuCi0gICAgcm9vdFNj
aXNzb3JSZWN0Lm1vdmUoLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi54KCksIC1tX3ZpZXdwb3J0
U2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICByb290U2Npc3NvclJlY3QubW92ZSgtbV9vd25lci0+
dmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLngoKSwgLW1fb3duZXItPnZpZXdwb3J0U2Nyb2xsUG9z
aXRpb24oKS55KCkpOwogICAgIHJvb3RMYXllci0+c2V0U2Npc3NvclJlY3Qocm9vdFNjaXNzb3JS
ZWN0KTsKIAogICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwpAQCAtNzYxLDcg
Kzc1NSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwYWludExheWVyQ29udGVudHMo
Y29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogewotICAgIGlmIChtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3QuaXNFbXB0eSgpIHx8ICFtX3Jvb3RMYXllcikKKyAgICBpZiAobV9vd25lci0+dmlld3Bv
cnRWaXNpYmxlUmVjdCgpLmlzRW1wdHkoKSB8fCAhcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMi
LCB0aGlzLCAwKTsKQEAgLTc3MCwxMSArNzY0LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogCiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpCiAgICAgICAgIHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKLSAgICByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQoMCwgMCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKKyAg
ICByb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3Qo
SW50UG9pbnQoMCwgMCksIG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS5zaXplKCkpKTsK
IAotICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7Cisg
ICAgSW50UmVjdCByb290U2Npc3NvclJlY3QobV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgp
KTsKICAgICAvLyBUaGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwg
b2Zmc2V0LgotICAgIHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3ZpZXdwb3J0U2Nyb2xsUG9zaXRp
b24ueCgpLCAtbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgcm9vdFNjaXNzb3JS
ZWN0Lm1vdmUoLW1fb3duZXItPnZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS54KCksIC1tX293bmVy
LT52aWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkueSgpKTsKICAgICByb290RHJhd0xheWVyLT5zZXRT
Y2lzc29yUmVjdChyb290U2Npc3NvclJlY3QpOwogCiAgICAgQ0NMYXllckxpc3QgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKQEAgLTc5MCw4ICs3ODQsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3Bv
cnQgY292ZXJzIHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJh
cnMuCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBt
X3ZpZXdwb3J0VmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LmhlaWdo
dCgpKSk7Ci0gICAgbV93aW5kb3dNYXRyaXggPSBzY3JlZW5NYXRyaXgoMCwgMCwgbV92aWV3cG9y
dFZpc2libGVSZWN0LndpZHRoKCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5oZWlnaHQoKSk7Cisg
ICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBtX293bmVy
LT52aWV3cG9ydFZpc2libGVSZWN0KCkud2lkdGgoKSwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxl
UmVjdCgpLmhlaWdodCgpKSk7CisgICAgbV93aW5kb3dNYXRyaXggPSBzY3JlZW5NYXRyaXgoMCwg
MCwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLndpZHRoKCksIG1fb3duZXItPnZpZXdw
b3J0VmlzaWJsZVJlY3QoKS5oZWlnaHQoKSk7CiAKICAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVy
dGV4IGF0dHJpYnV0ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KICAgICBtX3No
YXJlZEdlb21ldHJ5LT5wcmVwYXJlRm9yRHJhdygpOwpAQCAtODg3LDE0ICs4ODEsNiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgpCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+
b25QcmVzZW50KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5
ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBsYXllcikKLXsKLSAgICBtX3Jvb3RMYXllciA9
IGxheWVyOwotICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgbV9yb290TGF5ZXItPnNldExh
eWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRh
dGVFbnRpcmVMYXllcigpOwotfQotCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0TGF5
ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllcikKIHsKICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVu
KCk7CkBAIC05MDksMTUgKzg5NSw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRM
YXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQogICAgIGxheWVyLT5z
ZXRMYXllclJlbmRlcmVyKHRoaXMpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dHJhbnNmZXJSb290TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBvdGhlcikKLXsKLSAgICBv
dGhlci0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAg
b3RoZXItPm1fcm9vdExheWVyID0gbV9yb290TGF5ZXIucmVsZWFzZSgpOwotfQotCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8PSBtX3ZpZXdw
b3J0VmlzaWJsZVJlY3Qud2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSBtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3QuaGVpZ2h0KCkpOworICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8PSBtX293bmVyLT52aWV3
cG9ydFZpc2libGVSZWN0KCkud2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSBtX293bmVyLT52aWV3
cG9ydFZpc2libGVSZWN0KCkuaGVpZ2h0KCkpOwogCiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwMDcsMjUgKzk4NywxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKICAgICAg
ICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnNldENvbXBvc2l0ZU9mZnNjcmVlbihib29sIGNvbXBvc2l0ZU9mZnNj
cmVlbikKLXsKLSAgICBpZiAobV9jb21wb3NpdGVPZmZzY3JlZW4gPT0gY29tcG9zaXRlT2Zmc2Ny
ZWVuKQotICAgICAgIHJldHVybjsKLQotICAgIG1fY29tcG9zaXRlT2Zmc2NyZWVuID0gY29tcG9z
aXRlT2Zmc2NyZWVuOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RD
Q0xheWVySW1wbCkKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwtPmNsZWFyUmVuZGVyU3VyZmFj
ZSgpOwotfQotCiBMYXllclRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2Ny
ZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW4gJiYg
bV9yb290Q0NMYXllckltcGwgPyBtX3Jvb3RDQ0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRlT2Zm
c2NyZWVuICYmIG1fcm9vdENDTGF5ZXJJbXBsID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRlclN1
cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQogewotICAgIGlmIChtX2Nv
bXBvc2l0ZU9mZnNjcmVlbikgeworICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVl
bikgewogICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgICAgICB1c2VSZW5kZXJT
dXJmYWNlKDApOwpAQCAtMTA0NCw3ICsxMDEzLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogCiAg
ICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2U7CiAKLSAgICBpZiAoKHJl
bmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhbV9jb21wb3NpdGVPZmZz
Y3JlZW4pIHx8ICghcmVuZGVyU3VyZmFjZSAmJiBtX2NvbXBvc2l0ZU9mZnNjcmVlbikpIHsKKyAg
ICBpZiAoKHJlbmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhc2V0dGlu
Z3MoKS5jb21wb3NpdGVPZmZzY3JlZW4pIHx8ICghcmVuZGVyU3VyZmFjZSAmJiBzZXR0aW5ncygp
LmNvbXBvc2l0ZU9mZnNjcmVlbikpIHsKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAw
KSk7CiAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlKQogICAgICAgICAgICAgc2V0RHJhd1ZpZXdw
b3J0UmVjdChyZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLCB0cnVlKTsKQEAgLTExNDAsNyAr
MTEwOSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG9SZWN0KGNv
bnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KQogICAgIC8vIG9mIHRoZSBHTCBzY2lzc29yIGlzIHRo
ZSBib3R0b20gb2Ygb3VyIGxheWVyLgogICAgIC8vIEJ1dCwgaWYgcmVuZGVyaW5nIHRvIG9mZnNj
cmVlbiB0ZXh0dXJlLCB3ZSByZXZlcnNlIG91ciBzZW5zZSBvZiAndXBzaWRlIGRvd24nLgogICAg
IGludCBzY2lzc29yWTsKLSAgICBpZiAobV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9PSBtX2RlZmF1
bHRSZW5kZXJTdXJmYWNlICYmICFtX2NvbXBvc2l0ZU9mZnNjcmVlbikKKyAgICBpZiAobV9jdXJy
ZW50UmVuZGVyU3VyZmFjZSA9PSBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlICYmICFzZXR0aW5ncygp
LmNvbXBvc2l0ZU9mZnNjcmVlbikKICAgICAgICAgc2Npc3NvclkgPSBtX2N1cnJlbnRSZW5kZXJT
dXJmYWNlLT5jb250ZW50UmVjdCgpLmhlaWdodCgpIC0gKHNjaXNzb3JSZWN0Lm1heFkoKSAtIG1f
Y3VycmVudFJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkueSgpKTsKICAgICBlbHNlCiAgICAg
ICAgIHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gY29udGVudFJlY3QueSgpOwpAQCAtMTM1
OSwxMCArMTMyOCwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJl
ZE9iamVjdHMoKQogU3RyaW5nIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6bGF5ZXJUcmVlQXNUZXh0
KCkgY29uc3QKIHsKICAgICBUZXh0U3RyZWFtIHRzOwotICAgIGlmIChtX3Jvb3RMYXllci5nZXQo
KSkgewotICAgICAgICB0cyA8PCBtX3Jvb3RMYXllci0+bGF5ZXJUcmVlQXNUZXh0KCk7CisgICAg
aWYgKHJvb3RMYXllcigpKSB7CisgICAgICAgIHRzIDw8IHJvb3RMYXllcigpLT5sYXllclRyZWVB
c1RleHQoKTsKICAgICAgICAgdHMgPDwgIlJlbmRlclN1cmZhY2VzOlxuIjsKLSAgICAgICAgZHVt
cFJlbmRlclN1cmZhY2VzKHRzLCAxLCBtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgICAgIGR1bXBS
ZW5kZXJTdXJmYWNlcyh0cywgMSwgcm9vdExheWVyKCkpOwogICAgIH0KICAgICByZXR1cm4gdHMu
cmVsZWFzZSgpOwogfQpAQCAtMTQwOCw3ICsxMzc3LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkKICAgICByZXR1cm4gKG1fY29udGV4dC5n
ZXQoKS0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXJD
aHJvbWl1bSogbGF5ZXIpIGNvbnN0Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJl
bmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBjb25zdCBMYXllckNocm9t
aXVtKiBsYXllcikgY29uc3QKIHsKICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKICAg
ICAgICAgbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHVtcFN1cmZhY2UodHMsIGluZGVudCk7CkBA
IC0xNDE3LDc0ICsxMzg2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5k
ZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVt
cFJlbmRlclN1cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsK
IH0KIAotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbCA6IHB1YmxpYyBDQ0xheWVyVHJl
ZUhvc3RJbXBsIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoY2xpZW50LCBsYXllclJl
bmRlcmVyKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50
KCkKLSAgICB7Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgICAg
IGJvb2wgY29udGV4dExvc3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRl
TWFpblRocmVhZFRhc2sodGhpcywgJkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXll
cnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxldGlvbi53
YWl0KCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBtZXNzYWdl
IHVwIHRvIHRoZSBSZW5kZXJXaWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1aXZhbGVudHMuLi5dCi0K
LSAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNvbnRl
eHRMb3N0KQotICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9l
cyBub3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xp
ZW50LCBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi0gICAgICAgIDogQ0NM
YXllclRyZWVIb3N0SW1wbChjbGllbnQpCi0gICAgICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVy
UmVuZGVyZXIpIHsgfQotCi0gICAgdm9pZCBkcmF3TGF5ZXJzT25NYWluVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBjb250ZXh0TG9zdCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+
cm9vdExheWVyKCkpIHsKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygp
OwotICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Ci0KLSAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7
Ci0gICAgICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7Ci0gICAg
ICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwotICAgIH0KLQotICAgIExheWVyUmVuZGVyZXJDaHJv
bWl1bSogbV9sYXllclJlbmRlcmVyOwotfTsKLQotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVt
SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSB7Ci1wdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5PiBjcmVh
dGUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHkobGF5ZXJS
ZW5kZXJlcikpOwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCi0gICAgewotICAgICAgICByZXR1cm4g
TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbDo6Y3JlYXRlKHRoaXMsIHN0YXRpY19jYXN0PExheWVy
UmVuZGVyZXJDaHJvbWl1bSo+KGhvc3QoKSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBMYXll
clJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHkoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyKQotICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShsYXllclJlbmRlcmVy
KSB7IH0KLX07Ci0KLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKQotewotICAgIE93
blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IHByb3h5ID0gTGF5ZXJSZW5kZXJlckNocm9t
aXVtSW1wbFByb3h5OjpjcmVhdGUodGhpcyk7Ci0gICAgcHJveHktPnN0YXJ0KCk7Ci0gICAgcmV0
dXJuIHByb3h5LnJlbGVhc2UoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAppbmRleCBjYWMwNzU0YjA4YTAwNGVjMGU4ZWRkMmIyNTI4ZTU2NDcyNTczODY4
Li4yYzk0MTU3NzZkY2VjODJjZGJmOWQwMDAwNTNiYmU0M2ViZjYxMTVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUaWxlckNo
cm9taXVtLmgiCi0jaW5jbHVkZSAiU2tCaXRtYXAuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNj
L0NDSGVhZHNVcERpc3BsYXkuaCIKQEAgLTY5LDUyICs2OCw0NSBAQCBjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgR2VvbWV0
cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBMYXllclBhaW50ZXJD
aHJvbWl1bTsKIAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCBy
ZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdCB7CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJs
aWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhv
c3RDbGllbnQqLCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQs
IGJvb2wgYWNjZWxlcmF0ZURyYXdpbmcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+KTsKIAotICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKKyAgICB2aXJ0
dWFsIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKKworICAgIGNvbnN0IENDU2V0dGluZ3MmIHNl
dHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9vd25lci0+c2V0dGluZ3MoKTsgfQorCisgICAgQ0NM
YXllclRyZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KKyAgICBjb25zdCBDQ0xh
eWVyVHJlZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQorCisgICAgTGF5
ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9vd25lci0+cm9vdExheWVyKCk7IH0K
KyAgICBjb25zdCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX293
bmVyLT5yb290TGF5ZXIoKTsgfQogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsK
ICAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4
dFN1cHBvcnRzTWFwU3ViOyB9CisKICNpZiBVU0UoU0tJQSkKLSAgICBHckNvbnRleHQqIHNraWFD
b250ZXh0KCk7CisgICAgc3RhdGljIGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWlu
dGluZyhHcmFwaGljc0NvbnRleHQzRCopOworICAgIEdyQ29udGV4dCogc2tpYUNvbnRleHQoKSB7
IHJldHVybiBtX3NraWFDb250ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgaW52YWxp
ZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKIAotICAgIHZvaWQg
c2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIHZvaWQgcm9v
dExheWVyQ2hhbmdlZCgpOworICAgIHZvaWQgdmlld3BvcnRDaGFuZ2VkKCk7CiAKICAgICAvLyB1
cGRhdGVzIGFuZCBkcmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgog
ICAgIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CiAKLSAgICAv
LyBTZXQgYnkgV2ViVmlld0ltcGwgd2hlbiBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBydW5uaW5n
LgotICAgIC8vIEZJWE1FOiBXaGVuIHdlIG1vdmUgc2NoZWR1bGluZyBpbnRvIHRoZSBjb21wb3Np
dG9yLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgZmxhZy4KLSAgICB2b2lkIHNldElzQW5pbWF0aW5nKGJv
b2wgYW5pbWF0aW5nKSB7IG1fYW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9Ci0gICAgYm9vbCBpc0Fu
aW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nOyB9Ci0KICAgICAvLyB3YWl0cyBm
b3IgcmVuZGVyaW5nIHRvIGZpbmlzaAogICAgIHZvaWQgZmluaXNoKCk7CiAKICAgICAvLyBwdXRz
IGJhY2tidWZmZXIgb25zY3JlZW4KICAgICB2b2lkIHByZXNlbnQoKTsKIAotICAgIEludFNpemUg
dmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUo
KTsgfQotCi0gICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik7
Ci0gICAgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0
KCk7IH0KLSAgICB2b2lkIHRyYW5zZmVyUm9vdExheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
b3RoZXIpOwotCi0gICAgYm9vbCBoYXJkd2FyZUNvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4g
bV9oYXJkd2FyZUNvbXBvc2l0aW5nOyB9Ci0gICAgYm9vbCBhY2NlbGVyYXRlRHJhd2luZygpIGNv
bnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZURyYXdpbmc7IH0gCi0KLSAgICB2b2lkIHNldENvbXBv
c2l0ZU9mZnNjcmVlbihib29sKTsKLSAgICBib29sIGlzQ29tcG9zaXRpbmdPZmZzY3JlZW4oKSBj
b25zdCB7IHJldHVybiBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsgfQotCiAgICAgdW5zaWduZWQgY3Jl
YXRlTGF5ZXJUZXh0dXJlKCk7CiAgICAgdm9pZCBkZWxldGVMYXllclRleHR1cmUodW5zaWduZWQp
OwogCkBAIC0xNTksMjIgKzE1MSwyMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbGVhc2VUZXh0
dXJlcygpOwogCisgICAgdm9pZCBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21p
dW0qKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9vbCBzX2luUGFpbnRMYXllckNv
bnRlbnRzOwogI2VuZGlmCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBD
Q0xheWVyTGlzdDsKIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKLQogcHJp
dmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxk
Q29udGV4dE1hcDsKIAogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRo
ZSBDQ0xheWVyVHJlZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCiAgICAgUmVmUHRy
PENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKIAotICAgIExheWVyUmVuZGVyZXJDaHJv
bWl1bShDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50LCBib29sIGFj
Y2VsZXJhdGVEcmF3aW5nKTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVI
b3N0KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIGJvb2wgaW5pdGlhbGl6
ZSgpOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQg
dXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKQEAgLTIwMCwzMiArMTkyLDI2IEBAIHByaXZhdGU6
CiAKICAgICBzdGF0aWMgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xheWVySW1w
bD4mLCBjb25zdCBSZWZQdHI8Q0NMYXllckltcGw+Jik7CiAKLSAgICB2b2lkIGR1bXBSZW5kZXJT
dXJmYWNlcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCwgTGF5ZXJDaHJvbWl1bSopIGNvbnN0Owor
ICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25z
dCBMYXllckNocm9taXVtKikgY29uc3Q7CiAKICAgICBib29sIGluaXRpYWxpemVTaGFyZWRPYmpl
Y3RzKCk7CiAgICAgdm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogCi0gICAgdm9pZCBzZXRM
YXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKLQotICAgIEludFJlY3QgbV92
aWV3cG9ydFZpc2libGVSZWN0OwotICAgIEludFJlY3QgbV92aWV3cG9ydENvbnRlbnRSZWN0Owot
ICAgIEludFBvaW50IG1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbjsKKyAgICAvLyBGb3IgdGhpcyBy
ZXYsIHRoZSBMUkMgaXMgb3duZWQgYnkgdGhlIENDTGF5ZXJUcmVlSG9zdC4gVGhpcyB3aWxsIGNo
YW5nZSBpbiBhIGZvbGxvd2luZyByZXZpc2lvbi4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fb3du
ZXI7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV93aW5kb3dNYXRyaXg7CiAKLSAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbV9yb290TGF5ZXI7CisgICAgLy8gVE9ETzogc3BsaXQgdGhlIHRleHR1cmUgdXBk
YXRlciBhbmQgdGlsZXIgaW50byB0d28gcGFydHMuIFRoZW4sCisgICAgLy8ga2VlcCB0aGUgaW1w
bCBoZXJlIGFuZCBwdXQgdGhlIHBhaW50aW5nLXNpZGUgb24gdGhlIExheWVyVHJlZUhvc3QKICAg
ICBPd25QdHI8TGF5ZXJUZXh0dXJlVXBkYXRlcj4gbV9yb290TGF5ZXJUZXh0dXJlVXBkYXRlcjsK
ICAgICBPd25QdHI8TGF5ZXJUaWxlckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsK
IAotICAgIGJvb2wgbV9oYXJkd2FyZUNvbXBvc2l0aW5nOwotICAgIGJvb2wgbV9hY2NlbGVyYXRl
RHJhd2luZzsKLQogICAgIE93blB0cjxMYXllckxpc3Q+IG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2N1cnJlbnRSZW5kZXJTdXJmYWNl
OwogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZDsKLSAgICBib29sIG1fY29t
cG9zaXRlT2Zmc2NyZWVuOwogCiAgICAgLy8gTWF4aW11bSB0ZXh0dXJlIGRpbWVuc2lvbnMgc3Vw
cG9ydGVkLgogICAgIGludCBtX21heFRleHR1cmVTaXplOwpAQCAtMjYxLDEwICsyNDcsNiBAQCBw
cml2YXRlOgogICAgIENoaWxkQ29udGV4dE1hcCBtX2NoaWxkQ29udGV4dHM7CiAKICAgICBib29s
IG1fY29udGV4dFN1cHBvcnRzTWFwU3ViOwotICAgIGJvb2wgbV9jb250ZXh0U3VwcG9ydHNUZXh0
dXJlRm9ybWF0QkdSQTsKLSAgICBib29sIG1fY29udGV4dFN1cHBvcnRzUmVhZEZvcm1hdEJHUkE7
Ci0KLSAgICBib29sIG1fYW5pbWF0aW5nOwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1
bHRSZW5kZXJTdXJmYWNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAppbmRleCBi
ZDUwNjQxYjkyODYzMjA2MmEwM2I2OWQyODM1ZTc1MmZjMDdkYTE3Li4xYjcyZWI0MGU3ZTk0ZDY1
ZTFhMTkxYTJkZTQzNTAxMWEzMWZiMWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVy
ZVVwZGF0ZWQoKQogICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOwogICAgIC8vIElmIFdlYkdM
IGNvbW1hbmRzIGFyZSBpc3N1ZWQgb3V0c2lkZSBvZiBhIHRoZSBhbmltYXRpb24gY2FsbGJhY2tz
LCB0aGVuIHVzZQogICAgIC8vIGNhbGwgcmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVN
KCkgdG8ga2VlcCB0aGUgY29udGV4dCBmcm9tIGdldHRpbmcgdG9vIGZhciBhaGVhZC4KLSAgICBp
ZiAobGF5ZXJSZW5kZXJlcigpICYmICFsYXllclJlbmRlcmVyKCktPmlzQW5pbWF0aW5nKCkgJiYg
bV9jb250ZXh0U3VwcG9ydHNSYXRlTGltaXRpbmdFeHRlbnNpb24gJiYgIW1fcmF0ZUxpbWl0aW5n
VGltZXIuaXNBY3RpdmUoKSkKKyAgICBpZiAobGF5ZXJSZW5kZXJlcigpICYmIGxheWVyUmVuZGVy
ZXIoKS0+b3duZXIoKS0+YW5pbWF0aW5nKCkgJiYgbV9jb250ZXh0U3VwcG9ydHNSYXRlTGltaXRp
bmdFeHRlbnNpb24gJiYgIW1fcmF0ZUxpbWl0aW5nVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
bV9yYXRlTGltaXRpbmdUaW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NI
ZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggN2YyY2VjNzc4NWNmMGYwZTBmMWFkM2Q0MTMzNTRjODM5
MzZhMTVmYy4uZWU5ZTc0ODZmZWQ2MTA4Yjg5MGM4NjYyZjMzNzU0YzU4ZTNlNDcyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFk
c1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRl
ICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTEsOCArNTIsNiBAQCBDQ0hlYWRzVXBEaXNwbGF5
OjpDQ0hlYWRzVXBEaXNwbGF5KExheWVyUmVuZGVyZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBt
X2N1cnJlbnRGcmFtZU51bWJlcigxKQogICAgICwgbV9maWx0ZXJlZEZyYW1lVGltZSgwKQogICAg
ICwgbV9sYXllclJlbmRlcmVyKG93bmVyKQotICAgICwgbV9zaG93RlBTQ291bnRlcihmYWxzZSkK
LSAgICAsIG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKQogICAgICwgbV91c2VNYXBTdWJG
b3JVcGxvYWRzKG93bmVyLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSkKIHsKICAgICBtX2JlZ2lu
VGltZUhpc3RvcnlJblNlY1swXSA9IGN1cnJlbnRUaW1lKCk7CkBAIC03OSw2ICs3OCwyMSBAQCBD
Q0hlYWRzVXBEaXNwbGF5Ojp+Q0NIZWFkc1VwRGlzcGxheSgpCiB7CiB9CiAKK3ZvaWQgQ0NIZWFk
c1VwRGlzcGxheTo6b25GcmFtZUJlZ2luKGRvdWJsZSB0aW1lc3RhbXApCit7CisgICAgbV9iZWdp
blRpbWVIaXN0b3J5SW5TZWNbbV9jdXJyZW50RnJhbWVOdW1iZXIgJSBrQmVnaW5GcmFtZUhpc3Rv
cnlTaXplXSA9IHRpbWVzdGFtcDsKK30KKwordm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpvblByZXNl
bnQoKQoreworICAgIG1fY3VycmVudEZyYW1lTnVtYmVyICs9IDE7Cit9CisKK2Jvb2wgQ0NIZWFk
c1VwRGlzcGxheTo6ZW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuc2hv
d1BsYXRmb3JtTGF5ZXJUcmVlIHx8IHNldHRpbmdzKCkuc2hvd0ZQU0NvdW50ZXI7Cit9CisKIHZv
aWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdygpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKQEAgLTg3LDkgKzEwMSw5IEBAIHZv
aWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhdygpCiAKICAgICAvLyBVc2UgYSBmdWxsc2NyZWVuIHRl
eHR1cmUgb25seSBpZiB3ZSBuZWVkIHRvLi4uCiAgICAgSW50U2l6ZSBodWRTaXplOwotICAgIGlm
IChtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSkgewotICAgICAgICBodWRTaXplLnNldFdpZHRoKG1p
bigyMDQ4LCBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0U2l6ZSgpLndpZHRoKCkpKTsKLSAgICAg
ICAgaHVkU2l6ZS5zZXRIZWlnaHQobWluKDIwNDgsIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRT
aXplKCkuaGVpZ2h0KCkpKTsKKyAgICBpZiAoc2V0dGluZ3MoKS5zaG93UGxhdGZvcm1MYXllclRy
ZWUpIHsKKyAgICAgICAgaHVkU2l6ZS5zZXRXaWR0aChtaW4oMjA0OCwgbV9sYXllclJlbmRlcmVy
LT5vd25lcigpLT52aWV3cG9ydFZpc2libGVSZWN0KCkud2lkdGgoKSkpOworICAgICAgICBodWRT
aXplLnNldEhlaWdodChtaW4oMjA0OCwgbV9sYXllclJlbmRlcmVyLT5vd25lcigpLT52aWV3cG9y
dFZpc2libGVSZWN0KCkuaGVpZ2h0KCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBodWRTaXpl
LnNldFdpZHRoKDUxMik7CiAgICAgICAgIGh1ZFNpemUuc2V0SGVpZ2h0KDEyOCk7CkBAIC0xNDks
NyArMTYzLDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29udGVudHMoR3JhcGhp
Y3NDb250ZXh0KiBjdHgsIGNvbnN0IEludFNpemUmIGh1ZFMKIHsKICAgICBGb250Q2FjaGVQdXJn
ZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKIAotICAgIGlmIChtX3Nob3dQbGF0
Zm9ybUxheWVyVHJlZSkgeworICAgIGlmIChzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJl
ZSkgewogICAgICAgICBjdHgtPnNldEZpbGxDb2xvcihDb2xvcigwLCAwLCAwLCAxOTIpLCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKICAgICAgICAgY3R4LT5maWxsUmVjdChGbG9hdFJlY3QoMCwgMCwg
aHVkU2l6ZS53aWR0aCgpLCBodWRTaXplLmhlaWdodCgpKSk7CiAgICAgfQpAQCAtMTU3LDE1ICsx
NzEsMTUgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29udGVudHMoR3JhcGhpY3ND
b250ZXh0KiBjdHgsIGNvbnN0IEludFNpemUmIGh1ZFMKICAgICBpbnQgZnBzQ291bnRlckhlaWdo
dCA9IG1fbWVkaXVtRm9udC0+Zm9udE1ldHJpY3MoKS5mbG9hdEhlaWdodCgpICsgMjsKICAgICBp
bnQgZnBzQ291bnRlclRvcCA9IDI7CiAgICAgaW50IHBsYXRmb3JtTGF5ZXJUcmVlVG9wOwotICAg
IGlmIChtX3Nob3dGUFNDb3VudGVyKQorICAgIGlmIChzZXR0aW5ncygpLnNob3dGUFNDb3VudGVy
KQogICAgICAgICBwbGF0Zm9ybUxheWVyVHJlZVRvcCA9IGZwc0NvdW50ZXJUb3AgKyBmcHNDb3Vu
dGVySGVpZ2h0ICsgMjsKICAgICBlbHNlCiAgICAgICAgIHBsYXRmb3JtTGF5ZXJUcmVlVG9wID0g
MDsKIAotICAgIGlmIChtX3Nob3dGUFNDb3VudGVyKQorICAgIGlmIChzZXR0aW5ncygpLnNob3dG
UFNDb3VudGVyKQogICAgICAgICBkcmF3RlBTQ291bnRlcihjdHgsIGZwc0NvdW50ZXJUb3AsIGZw
c0NvdW50ZXJIZWlnaHQpOwogCi0gICAgaWYgKG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKQorICAg
IGlmIChzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJlZSkKICAgICAgICAgZHJhd1BsYXRm
b3JtTGF5ZXJUcmVlKGN0eCwgcGxhdGZvcm1MYXllclRyZWVUb3ApOwogfQogCkBAIC0yMzgsMjYg
KzI1Miw5IEBAIHZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd1BsYXRmb3JtTGF5ZXJUcmVlKEdy
YXBoaWNzQ29udGV4dCogY3R4LCBpbnQgdG9wKQogICAgIH0KIH0KIAotdm9pZCBDQ0hlYWRzVXBE
aXNwbGF5OjpvbkZyYW1lQmVnaW4oZG91YmxlIHRpbWVzdGFtcCkKLXsKLSAgICBtX2JlZ2luVGlt
ZUhpc3RvcnlJblNlY1ttX2N1cnJlbnRGcmFtZU51bWJlciAlIGtCZWdpbkZyYW1lSGlzdG9yeVNp
emVdID0gdGltZXN0YW1wOwotfQotCi12b2lkIENDSGVhZHNVcERpc3BsYXk6Om9uUHJlc2VudCgp
Ci17Ci0gICAgbV9jdXJyZW50RnJhbWVOdW1iZXIgKz0gMTsKLX0KLQotdm9pZCBDQ0hlYWRzVXBE
aXNwbGF5OjpzZXRTaG93RlBTQ291bnRlcihib29sIHNob3cpCi17Ci0gICAgbV9zaG93RlBTQ291
bnRlciA9IHNob3c7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygpOwotfQot
Ci12b2lkIENDSGVhZHNVcERpc3BsYXk6OnNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShib29sIHNo
b3cpCitjb25zdCBDQ1NldHRpbmdzJiBDQ0hlYWRzVXBEaXNwbGF5OjpzZXR0aW5ncygpIGNvbnN0
CiB7Ci0gICAgbV9zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzaG93OwotICAgIG1fbGF5ZXJSZW5k
ZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5zZXR0
aW5ncygpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5kZXggZjA0MzMx
N2Y1NWZkOTdjMWJmZjYyYWVmZmFhYjJkMDA2MjIwYjRkYS4uMDJjNjYwZDI4OThjZTdhZDEzNGJm
MzUzZGI3YzM4OTRhOWI2Y2YyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaApAQCAt
MzMsNiArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBDQ1NldHRpbmdz
OwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFz
cyBMYXllclJlbmRlcmVyQ2hyb21pdW07CkBAIC01NCwxMyArNTUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBvbkZyYW1lQmVnaW4oZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgdm9pZCBvblByZXNlbnQo
KTsKIAotICAgIHZvaWQgc2V0U2hvd0ZQU0NvdW50ZXIoYm9vbCBlbmFibGUpOwotICAgIGJvb2wg
c2hvd0ZQU0NvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3Nob3dGUFNDb3VudGVyOyB9Ci0KLSAg
ICB2b2lkIHNldFNob3dQbGF0Zm9ybUxheWVyVHJlZShib29sIGVuYWJsZSk7Ci0gICAgYm9vbCBz
aG93UGxhdGZvcm1MYXllclRyZWUoKSBjb25zdCB7IHJldHVybiBtX3Nob3dQbGF0Zm9ybUxheWVy
VHJlZTsgfQotCi0gICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zaG93UGxhdGZv
cm1MYXllclRyZWUgfHwgbV9zaG93RlBTQ291bnRlcjsgfQorICAgIGJvb2wgZW5hYmxlZCgpIGNv
bnN0OwogICAgIHZvaWQgZHJhdygpOwogCiAgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0
ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4gUHJvZ3Jh
bTsKQEAgLTcwLDcgKzY1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdIdWRDb250ZW50cyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRTaXplJiBodWRTaXplKTsKICAgICB2b2lkIGRyYXdG
UFNDb3VudGVyKEdyYXBoaWNzQ29udGV4dCosIGludCB0b3AsIGludCBoZWlnaHQpOwogICAgIHZv
aWQgZHJhd1BsYXRmb3JtTGF5ZXJUcmVlKEdyYXBoaWNzQ29udGV4dCosIGludCB0b3ApOwotCisg
ICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdDsKIAogICAgIGludCBtX2N1cnJl
bnRGcmFtZU51bWJlcjsKIApAQCAtODMsOSArNzgsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBj
b25zdCBpbnQga0JlZ2luRnJhbWVIaXN0b3J5U2l6ZSA9IDY0OwogICAgIGRvdWJsZSBtX2JlZ2lu
VGltZUhpc3RvcnlJblNlY1trQmVnaW5GcmFtZUhpc3RvcnlTaXplXTsKIAotICAgIGJvb2wgbV9z
aG93RlBTQ291bnRlcjsKLSAgICBib29sIG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOwotCiAgICAg
T3duUHRyPEZvbnQ+IG1fc21hbGxGb250OwogICAgIE93blB0cjxGb250PiBtX21lZGl1bUZvbnQ7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IGQ3Nzk1YzcxMDQzOWM5YjIx
OWNkMGY4NGQ5MjI0ZmUzZGM1N2IyMmYuLjFhZTQwOWExM2IyNjMyOWEyNTZlMzM1NDhhZDJmMDIw
YmY3NmI2MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjYsMjYgKzI2
LDUzIEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKIAorI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgorI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgiCiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ0xheWVyVHJl
ZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCkKK1Bh
c3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShDQ0xheWVy
VHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCit7Cisg
ICAgUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gbGF5ZXJUcmVlSG9zdCA9IGFkb3B0UmVmKG5ldyBD
Q0xheWVyVHJlZUhvc3QoY2xpZW50LCBzZXR0aW5ncykpOworICAgIGlmICghbGF5ZXJUcmVlSG9z
dC0+aW5pdGlhbGl6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbGF5ZXJUcmVl
SG9zdDsKK30KKworQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVI
b3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQogICAgIDogbV9j
bGllbnQoY2xpZW50KQogICAgICwgbV9mcmFtZU51bWJlcigwKQorICAgICwgbV9zZXR0aW5ncyhz
ZXR0aW5ncykKIHsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmluaXQoKQorYm9vbCBDQ0xh
eWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogeworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGYWxsIGJh
Y2sgdG8gbm9uLWFjY2VsZXJhdGVkIGRyYXdpbmcgaWYgdGhlIHVuZGVybHlpbmcgY29udGV4dCBk
b2VzIG5vdCBzdXBwb3J0IGl0LgorI2lmIFVTRShTS0lBKQorICAgIGlmIChtX3NldHRpbmdzLmFj
Y2VsZXJhdGVQYWludGluZyAmJiAhTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0U3VwcG9y
dHNBY2NlbGVyYXRlZFBhaW50aW5nKGNvbnRleHQuZ2V0KCkpKQorICAgICAgICBtX3NldHRpbmdz
LmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNlOworI2VuZGlmCisKKyAgICBtX2xheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKKyAgICBp
ZiAoIW1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAjaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQotICAgIG1fcHJveHkgPSBjcmVhdGVMYXllclRyZWVIb3N0SW1w
bFByb3h5KCk7CisgICAgbV9wcm94eSA9IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRl
KHRoaXMpOwogICAgIEFTU0VSVChtX3Byb3h5LT5pc1N0YXJ0ZWQoKSk7CiAgICAgbV9wcm94eS0+
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKICNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIENDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgpCkBAIC02OCwyNyArOTUsMTgw
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpCiAKIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIHsKKyAg
ICBtX2FuaW1hdGluZyA9IHRydWU7CiAgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJh
bWVCZWdpblRpbWUpOworICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKIFBhc3NPd25QdHI8
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJl
ZUhvc3RDb21taXR0ZXIoKQogewotICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6
OmNyZWF0ZSgpOworICAgIC8vIFRPRE86IG9ubHkgY2FsbGVkIGluIHRocmVhZGluZyBjYXNlLCBm
aXggd2hlbiBwb3NzaWJsZS4KKyAgICByZXR1cm4gbnVsbHB0cjsgLy8gIFBhc3NPd25QdHI8Q0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyPigpOworfQorCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dEltcGw+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQoreworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+IHJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgcmV0dXJuIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmNyZWF0ZShjbGllbnQsIHJlbmRlcmVyKTsKK30KKworR3JhcGhpY3NDb250ZXh0
M0QqIENDTGF5ZXJUcmVlSG9zdDo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5k
UmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworI2lmIFVTRShU
SFJFQURFRF9DT01QT1NJVElORykKKyAgICAvLyBUT0RPOiBuZWVkIHRvIGltcGxlbWVudCB0aGlz
CisjZWxzZQorICAgIGRvQ29tcG9zaXRlKCk7CisgICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFt
ZWJ1ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOworI2VuZGlmCit9CisKK1Bhc3NPd25QdHI8TGF5
ZXJQYWludGVyQ2hyb21pdW0+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUm9vdExheWVyUGFpbnRl
cigpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVSb290TGF5ZXJQYWludGVyKCk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQoreworI2lmIFVT
RShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAvLyBUT0RPOiBuZWVkIHRvIGltcGxlbWVudCB0
aGlzCisjZWxzZQorICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7CisjZW5kaWYKK30KKwor
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCkKK3sKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRpcnR5UmVjdCk7CiB9CiAKIHZv
aWQgQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAjaWYgVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6
OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRB
bmRSZWRyYXcoKTsKKyNlbHNlCisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiAj
ZW5kaWYKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKIHsKLSAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDAp
OwogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOwogICAgIG1fcHJveHktPnNldE5l
ZWRzUmVkcmF3KCk7CisjZWxzZQorICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOwog
I2VuZGlmCiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0
cjxMYXllckNocm9taXVtPiBsYXllcikKK3sKKyAgICBtX3Jvb3RMYXllciA9IGxheWVyOworICAg
IGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPnNldExheWVyUmVuZGVyZXIo
bV9sYXllclJlbmRlcmVyLmdldCgpKTsKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllckNoYW5nZWQoKTsKK30KKwordm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJ
bnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQorewor
ICAgIGJvb2wgdmlzaWJsZVJlY3RDaGFuZ2VkID0gbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUo
KSAhPSB2aXNpYmxlUmVjdC5zaXplKCk7CisKKyAgICBtX3ZpZXdwb3J0VmlzaWJsZVJlY3QgPSB2
aXNpYmxlUmVjdDsKKyAgICBtX3ZpZXdwb3J0Q29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKKyAg
ICBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKKworICAgIGlmICh2
aXNpYmxlUmVjdENoYW5nZWQgJiYgbV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOworCisgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQor
eworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgaWYgKCF2aXNpYmxlKQorICAg
ICAgICBtX2xheWVyUmVuZGVyZXItPnJlbGVhc2VUZXh0dXJlcygpOworI2VuZGlmCit9CisKKyNp
ZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRvQ29t
cG9zaXRlKCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICBtX2xheWVyUmVu
ZGVyZXItPnVwZGF0ZUxheWVycygpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygp
OworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQorewor
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSIsIHRoaXMsIDApOwor
CisgICAgaWYgKG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCkgeworICAgICAgICAvLyByZWFs
bG9jYXRlUmVuZGVyZXIgd2lsbCByZXF1ZXN0IGEgcmVwYWludCB3aGV0aGVyIG9yIG5vdCBpdCBz
dWNjZWVkZWQKKyAgICAgICAgLy8gaW4gY3JlYXRpbmcgYSBuZXcgY29udGV4dC4KKyAgICAgICAg
cmVhbGxvY2F0ZVJlbmRlcmVyKCk7CisgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4
dCA9IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG8gbm90IGNvbXBv
c2l0ZSBpZiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGlzIGFscmVhZHkgbG9zdC4KKyAgICBpZiAo
IW1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgeworICAgICAgICBk
b0NvbXBvc2l0ZSgpOworCisgICAgICAgIC8vIFB1dCByZXN1bHQgb25zY3JlZW4uCisgICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOworICAgIH0KKworICAgIGlmIChtX2xheWVyUmVu
ZGVyZXItPmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgLy8gVHJ5aW5nIHRv
IHJlY292ZXIgdGhlIGNvbnRleHQgcmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBwcm9j
ZXNzCisgICAgICAgIC8vIGRpZWQuIFRoaXMgaXMgYmVjYXVzZSBHcHVDaGFubmVsSG9zdDo6T25F
cnJvck1lc3NhZ2Ugd2lsbCBvbmx5IGJlCisgICAgICAgIC8vIGNhbGxlZCBhdCB0aGUgbmV4dCBp
dGVyYXRpb24gb2YgdGhlIG1lc3NhZ2UgbG9vcCwgcmV2ZXJ0aW5nIG91cgorICAgICAgICAvLyBy
ZWNvdmVyeSBhdHRlbXB0cyBoZXJlLiBJbnN0ZWFkLCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIg
ZnJvbSB0aGUKKyAgICAgICAgLy8gcmVuZGVyZXIsIHJlY3JlYXRlIHRoZSByZW5kZXJlciBhdCB0
aGUgbmV4dCBtZXNzYWdlIGxvb3AgaXRlcmF0aW9uCisgICAgICAgIC8vIGFuZCByZXF1ZXN0IGEg
cmVwYWludCB5ZXQgYWdhaW4uCisgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9
IHRydWU7CisgICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgfQorfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKK3sKKyAgICAvLyBHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNh
c2UgZmFsbCBiYWNrIHRvIHNvZnR3YXJlZQorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CisgICAg
aWYgKCFjb250ZXh0KSB7CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29u
dGV4dChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDaGVjayB0aGF0
IHRoZSBjb250ZXh0IHN1cHBvcnRzIGFjY2VsZXJhdGVkIGRyYXdpbmcsIGlmIG5lZWRlZC4KKyNp
ZiBVU0UoU0tJQSkKKyAgICBpZiAobV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgJiYgIUxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGluZyhj
b250ZXh0LmdldCgpKSkKKyAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBm
YWxzZTsKKyNlbmRpZgorCisgICAgLy8gVGhlIG5ldyBncmFwaGNpcyBjb250ZXh0IG1pZ2h0IG5v
dCBzdXBwb3J0IGFsbCB0aGUgZXh0ZW5zaW9ucyB3ZSBuZWVkLAorICAgIC8vIGF0IHdoaWNoIHBv
aW50IGZhbGwgYmFjayB0byBzb2Z0d2FyZS4KKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywg
Y29udGV4dCk7CisKKyAgICAvLyBJZiBjcmVhdGluZyB0aGUgc2Vjb25kIGNvbnRleHQgZmFpbGVk
LAorICAgIGlmICghbGF5ZXJSZW5kZXJlcikgeworICAgICAgICBtX2NsaWVudC0+ZGlkUmVjcmVh
dGVHcmFwaGljc0NvbnRleHQoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gUmVhdHRhY2ggdGhlIHJvb3QgbGF5ZXIuIENoaWxkIGxheWVycyB3aWxsIGdldCByZWF0dGFj
aGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlLgorICAgIGxheWVy
UmVuZGVyZXItPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCkpOwor
ICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7CisKKyAgICBtX2NsaWVudC0+ZGlk
UmVjcmVhdGVHcmFwaGljc0NvbnRleHQodHJ1ZSk7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaAppbmRleCAyODg5NTBlZmUxM2E3OTYwZDYwM2Y3ZWIzZjdlMjAxZTY3
OTQ2ZWE3Li5kYzJjMzRhMDk5MzViMzY4YzczNzI3YzJhNzY1ODU0M2MxMDZkZjUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMjUsOCArMjUsMTAgQEAKICNpZm5kZWYgQ0NMYXll
clRyZWVIb3N0X2gKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0X2gKIAorI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKwogI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgpAQCAtMzYsMzkgKzM4LDEwOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgTGF5ZXJDaHJvbWl1bTsKK2NsYXNzIExheWVy
UGFpbnRlckNocm9taXVtOworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwogCiBjbGFzcyBD
Q0xheWVyVHJlZUhvc3RDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRl
QW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpID0g
MDsKLQorICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY3JlYXRl
Um9vdExheWVyUGFpbnRlcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFw
aGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSA9IDA7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJ
VElORykKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSA9IDA7CisjZW5kaWYK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RDbGllbnQoKSB7IH0KIH07
CiAKK3N0cnVjdCBDQ1NldHRpbmdzIHsKKyAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKKyAg
ICBib29sIGNvbXBvc2l0ZU9mZnNjcmVlbjsKKyAgICBib29sIHNob3dGUFNDb3VudGVyOworICAg
IGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOworfTsKKwogY2xhc3MgQ0NMYXllclRyZWVIb3N0
IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7CiBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgQ0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCopOwotICAgIHZvaWQg
aW5pdCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKEND
TGF5ZXJUcmVlSG9zdENsaWVudCosIGNvbnN0IENDU2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5D
Q0xheWVyVHJlZUhvc3QoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAg
ICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCopOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhv
c3RDb21taXR0ZXI+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKIAorICAgIGJvb2wg
YW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpbmc7IH0KKyAgICB2b2lkIHNldEFu
aW1hdGluZyhib29sIGFuaW1hdGluZykgeyBtX2FuaW1hdGluZyA9IGFuaW1hdGluZzsgfSAvLyBD
YW4gYmUgcmVtb3ZlZCB3aGVuIG5vbi10aHJlYWRlZCBzY2hlZHVsaW5nIG1vdmVzIGluc2lkZS4K
KworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CisKKyAgICB2b2lkIGNvbXBvc2l0
ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOworCisgICAgUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY3JlYXRlUm9vdExheWVyUGFpbnRlcigpOworCisg
ICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKKwogICAgIGludCBmcmFtZU51bWJlcigpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0KIAorICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RM
YXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKKwogICAgIHZvaWQgc2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKICAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAKKyAgICB2b2lk
IHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KTsKKyAgICBMYXllckNocm9t
aXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorICAgIGNvbnN0
IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdl
dCgpOyB9CisKKyAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0dGluZ3M7IH0KKworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Ny
b2xsUG9zaXRpb24pOworCisgICAgY29uc3QgSW50UmVjdCYgdmlld3BvcnRDb250ZW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRDb250ZW50UmVjdDsgfQorICAgIGNvbnN0IEludFBv
aW50JiB2aWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFNj
cm9sbFBvc2l0aW9uOyB9CisgICAgY29uc3QgSW50UmVjdCYgdmlld3BvcnRWaXNpYmxlUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRWaXNpYmxlUmVjdDsgfQorCisgICAgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpOworCisgICAgLy8gVGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFk
ZWQgcmVuZGVyaW5nIHBhdGguCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2
b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7CisjZW5kaWYKKworCiBwcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSgpID0gMDsKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3QoQ0NM
YXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogCiBwcml2YXRlOgorICAg
IGJvb2wgaW5pdGlhbGl6ZSgpOworCisgICAgLy8gVGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBub24t
dGhyZWFkZWQgcmVuZGVyaW5nIHBhdGguCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykK
KyAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CisgICAgdm9pZCByZWFsbG9jYXRlUmVuZGVyZXIoKTsK
KworICAgIGJvb2wgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0OworICAgIFJlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKKyNlbmRpZgorCisgICAgYm9vbCBt
X2FuaW1hdGluZzsKKwogICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCogbV9jbGllbnQ7CisKICAg
ICBpbnQgbV9mcmFtZU51bWJlcjsKKwogICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk+IG1fcHJveHk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9yb290TGF5ZXI7Cisg
ICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOworCisgICAgSW50UmVjdCBtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3Q7CisgICAgSW50UmVjdCBtX3ZpZXdwb3J0Q29udGVudFJlY3Q7CisgICAgSW50UG9pbnQg
bV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcAppbmRleCBhM2FhMmJhMjEwZGJkZGQxNmI5Y2ExYWQxMmU2MTE1NTU4
YjJhYjM3Li40ZTJkMWI4NDNjMTgzMmNmYWZhMTQzNTQ4NjJjYmZhMTUzODY2OWFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjYsMTggKzI2LDI5IEBACiAK
ICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNp
b25zM0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWQuaCIKKyNpbmNs
dWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgi
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJ
bXBsQ2xpZW50KiBjbGllbnQpCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5
ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQs
IFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiByZW5kZXJlcikKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50LCByZW5kZXJlcikpOwor
fQorCitDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVl
SG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IHJlbmRlcmVyKQogICAgIDogbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKICAgICAsIG1fZnJhbWVO
dW1iZXIoMCkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fY29tbWl0UGVuZGluZyhm
YWxzZSkKKyAgICAsIG1fbGF5ZXJSZW5kZXJlcihyZW5kZXJlcikKICAgICAsIG1fcmVkcmF3UGVu
ZGluZyhmYWxzZSkKIHsKIH0KQEAgLTcwLDcgKzgxLDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6ZHJhd0xheWVycygpCiAKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCIsIHRoaXMsIDApOwotICAgICAgICBk
cmF3TGF5ZXJzQW5kUHJlc2VudCgpOworICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOworICAgICAgICBib29sIGNvbnRleHRMb3N0OworICAgICAgICBDQ01haW5UaHJlYWQ6OnBv
c3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsOjpk
cmF3TGF5ZXJzT25NYWluVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9u
KSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29udGV4dExvc3QpKSk7CisgICAgICAgIGNvbXBs
ZXRpb24ud2FpdCgpOworCisgICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIg
bWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRz
Li4uXQorCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0CisgICAgICAgIGlm
IChjb250ZXh0TG9zdCkKKyAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1J
bXBsIGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOwogICAgIH0KIAogICAgICsr
bV9mcmFtZU51bWJlcjsKQEAgLTk2LDQgKzExNiwxOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnNldE5lZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+cG9zdERyYXdMYXllcnNUYXNrT25D
Q1RocmVhZCgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNPbk1h
aW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGNvbnRleHRMb3N0
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV9sYXllclJlbmRl
cmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkgeworICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRy
YXdMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQo
KTsKKyAgICAgICAgKmNvbnRleHRMb3N0ID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRH
cmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwor
ICAgIH0gZWxzZQorICAgICAgICAqY29udGV4dExvc3QgPSBmYWxzZTsKKyAgICBjb21wbGV0aW9u
LT5zaWduYWwoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmlu
ZGV4IDA4MDVjN2E0ZWI1ODI1Y2M5MTk0NDEwZjFmMTEyNTUxOWRmNWRhNTIuLmI2MWY3YjJmYmRk
MWYyZTkzZDRkYjVlMGViMjM1ZWQyYzZkMWM5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKQEAgLTMxLDYgKzMxLDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBDQ0NvbXBsZXRpb25FdmVudDsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKKwog
Ly8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZyYXN0cnVjdHVyZSBmb3IgYSBDQ0xheWVyVHJlZUhv
c3RJbXBsCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50ICB7CiBwdWJsaWM6CkBAIC00
NSwxNCArNDgsMTMgQEAgcHJvdGVjdGVkOgogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbCB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbCk7CiBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4pOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOwog
CiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQ
cmVzZW50KCkgPSAwOwogCiAgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZU51bWJlcjsgfQogCkBAIC02MywxMiArNjUsMTUgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
U291cmNlRnJhbWVOdW1iZXIoaW50IGZyYW1lTnVtYmVyKSB7IG1fc291cmNlRnJhbWVOdW1iZXIg
PSBmcmFtZU51bWJlcjsgfQogCiBwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVI
b3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+KTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqLCBib29sKiBjb250ZXh0TG9zdCk7CiAgICAgaW50IG1fc291cmNlRnJhbWVOdW1i
ZXI7CiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllclRyZWVI
b3N0SW1wbENsaWVudCogbV9jbGllbnQ7CiAgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisgICAg
UmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIGJvb2wg
bV9yZWRyYXdQZW5kaW5nOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eS5jcHAKaW5kZXggNjhhMjUxYWU0MTNmOTNkYTU1M2JiZmE4ZDhkNjk0ZTA1ZmVh
Yjg4Ny4uZTI1NWE5NGUzY2UxODhlMjI2ZmMwYTIzYzNkYWY0OTczNzljOWFiOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCkBAIC0yMDEsNyArMjAx
LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBB
U1NFUlQoaXNDQ1RocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gY3JlYXRlTGF5
ZXJUcmVlSG9zdEltcGwoKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVI
b3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKICAgICBjb21wbGV0aW9uLT5zaWdu
YWwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MTFiYTUwMDEzZDBjYzI3
YmY2MThmZGYwYmYxNjViMWE1ZjZiODhmLi42NDE3MTQxNjQ5MDM4ZjUzMWRjMTFjYjQ1NWNmZmFl
YmQ0ODM1NDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisy
MDExLTA4LTA1ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hy
b21pdW1dIE1ha2UgV2ViVmlld0ltcGwgcG9pbnQgYXQgQ0NMYXllclRyZWVIb3N0IGFuZCByZWxh
dGVkIHNlcGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY1NzkxCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBMYXllclJlbmRlcmVyQ2hy
b21pdW0gYmVjb21lcyBpbmNyZWFzaW5nbHkgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIHJlbmRl
cmluZywgd2hpbGUgcmVuZGVyIHNjaGVkdWxpbmcgYW5kIHRyZWUgaG9zdGluZyBtb3ZlcyBpbnRv
IHRoZQorICAgICAgICBDQ0xheWVyVHJlZUhvc3QuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAg
KiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJ
bXBsOjpXZWJTZXR0aW5nc0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6
OnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQpOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5n
c0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjphY2NlbGVyYXRlZERy
YXdpbmdFbmFibGVkKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFpbnQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnNldFJvb3RQbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNl
dFJvb3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
Y3JvbGxSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmludmFs
aWRhdGVSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Z2V0Q29tcG9zaXRvclNldHRp
bmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVSb290
TGF5ZXJQYWludGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFuaW1hdGVBbmRM
YXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGlj
c0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2NoZWR1bGVDb21wb3Np
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVlVmlld3Bv
cnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0VmlzaWJpbGl0eVN0YXRlKToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0wOC0wNSAgSm9jaGVuIEVpc2luZ2VyICA8
am9jaGVuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgYSBuZXcgUmVzb3VyY2VS
ZXF1ZXN0OjpUYXJnZXRUeXBlIGZvciBYSFJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViU2V0dGluZ3MuaAppbmRleCAyNWU3NmE4NmM5ZmI2Mzc5OTQyMGZlNWMxYWI1ZWZmNzYy
YWJkYzAwLi4zOTBlOThhZDFmZDUyNDgzYjk2YTMwNjM0MDAyYjc4Y2UyNGVhOWY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKQEAgLTExNCw2ICsxMTQs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldExlZ2FjeUFjY2VsZXJhdGVkMmRDYW52
YXNFbmFibGVkKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWluaW11bUFjY2VsZXJh
dGVkMmRDYW52YXNTaXplKGludCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWNjZWxlcmF0ZWRE
cmF3aW5nRW5hYmxlZCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5SW5m
b0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIeXBlcmxpbmtBdWRpdGlu
Z0VuYWJsZWQoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZChib29sKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU2V0dGluZ3NJbXBsLmNwcAppbmRleCAwNGEzNDI4MTRlMmJiZjZiMGIyNTA0M2U5ZGIz
YjFkZjdjMmY3MzVhLi45YmJkNmE1MzI5YjA4MDZhMDM3NzllYThmZTJkNmUyZDY2NzZkMDk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAg
LTQ3LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFdlYlNldHRpbmdzSW1wbDo6V2Vi
U2V0dGluZ3NJbXBsKFNldHRpbmdzKiBzZXR0aW5ncykKICAgICA6IG1fc2V0dGluZ3Moc2V0dGlu
Z3MpCisgICAgLCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2Nv
bXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3Nob3dGUFNDb3VudGVyKGZh
bHNlKQogICAgICwgbV9zaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpCkBAIC0zNTAsNyArMzUx
LDcgQEAgdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JB
bmltYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKIAogdm9pZCBXZWJTZXR0aW5nc0ltcGw6OnNl
dEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIG1fc2V0dGlu
Z3MtPnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoZW5hYmxlZCk7CisgICAgbV9hY2NlbGVy
YXRlZERyYXdpbmdFbmFibGVkID0gZW5hYmxlZDsKIH0KIAogdm9pZCBXZWJTZXR0aW5nc0ltcGw6
OnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKaW5kZXggNThmMjVjY2Y4ZTBiN2Uy
NTYxY2YwODA5YzM4YTNiMTI5MDRhMmRjMy4uNmRkMjkyMGY5MjlmNDk2OGZlZGQwNmI1ZTMxMjhl
ZGIzZjI5NzIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmgKQEAgLTEwNyw2ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldExl
Z2FjeUFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRNaW5pbXVtQWNjZWxlcmF0ZWQyZENhbnZhc1NpemUoaW50KTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0QWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZChib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWNj
ZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZWREcmF3
aW5nRW5hYmxlZDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29s
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKGJvb2wpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29s
KTsKQEAgLTEyMyw2ICsxMjQsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6
U2V0dGluZ3MqIG1fc2V0dGluZ3M7CisgICAgYm9vbCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJs
ZWQ7CiAgICAgYm9vbCBtX2NvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQ7CiAgICAgYm9vbCBtX3No
b3dGUFNDb3VudGVyOwogICAgIGJvb2wgbV9zaG93UGxhdGZvcm1MYXllclRyZWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggMGNlYmQxMzI5ZjZkNmIw
NTJlMGQzNWM0ZWQzMDI1MThmYTE4ZjU5YS4uOGUyNmYzYWM0ZTU1ZjUzNWViNjRkZGQ4OGU5ZjU2
YTk2ZGVmOTZmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNw
cApAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5
bGUuaCIKQEAgLTMzOSw3ICszNDAsNyBAQCBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2ViVmll
d0NsaWVudCogY2xpZW50KQogICAgICwgbV90YWJzVG9MaW5rcyhmYWxzZSkKICAgICAsIG1fZHJh
Z1Njcm9sbFRpbWVyKGFkb3B0UHRyKG5ldyBEcmFnU2Nyb2xsVGltZXIpKQogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICAsIG1fbGF5ZXJSZW5kZXJlcigwKQorICAgICwgbV9s
YXllclRyZWVIb3N0KDApCiAgICAgLCBtX3Jvb3RHcmFwaGljc0xheWVyKDApCiAgICAgLCBtX2lz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShmYWxzZSkKICAgICAsIG1fY29tcG9zaXRvckNy
ZWF0aW9uRmFpbGVkKGZhbHNlKQpAQCAtMTAxNiw3ICsxMDE3LDcgQEAgdm9pZCBXZWJWaWV3SW1w
bDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAgICAgaWYgKG1fY2xpZW50KSB7CiAg
ICAgICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkgewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJW
aWV3cG9ydCgpOworICAgICAgICAgICAgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKICNlbmRp
ZgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgV2ViUmVjdCBkYW1hZ2VkUmVjdCgwLCAw
LCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwpAQCAtMTA0MywxMSArMTA0NCwxNSBAQCB2
b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICBpZiAo
d2ViZnJhbWUpIHsKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2ViZnJhbWUtPmZyYW1lVmll
dygpOwogICAgICAgICBpZiAodmlldykgewotICAgICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJl
cikKLSAgICAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldElzQW5pbWF0aW5nKHRydWUp
OworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgICAgICAgICBpZiAobV9sYXll
clRyZWVIb3N0KQorICAgICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0QW5pbWF0aW5n
KHRydWUpOworI2VuZGlmCiAgICAgICAgICAgICB2aWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRp
b25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoZnJhbWVCZWdpblRpbWUpKTsKLSAgICAg
ICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgICAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKyAgICAgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAgICAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5zZXRBbmltYXRpbmcoZmFsc2UpOworI2VuZGlmCiAgICAgICAgIH0KICAg
ICB9CiAjZW5kaWYKQEAgLTEwOTcsNyArMTEwMiw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRvUGl4
ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBJbnRSZWN0JiByZWN0
CiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHJlY3Quc2l6ZSgpKSk7CiAgICAgUmVmUHRyPEJ5dGVBcnJheT4gcGl4ZWxBcnJheShCeXRlQXJy
YXk6OmNyZWF0ZShyZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCkpOwogICAgIGlmIChp
bWFnZUJ1ZmZlci5nZXQoKSAmJiBwaXhlbEFycmF5LmdldCgpKSB7Ci0gICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxBcnJheS0+ZGF0YSgpLCBpbnZlcnRS
ZWN0KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhl
bEFycmF5LT5kYXRhKCksIGludmVydFJlY3QpOwogICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShwaXhlbEFycmF5LmdldCgpLCByZWN0LnNpemUoKSwgSW50UmVj
dChJbnRQb2ludCgpLCByZWN0LnNpemUoKSksIEludFBvaW50KCkpOwogICAgICAgICBnYy5zYXZl
KCk7CiAgICAgICAgIGdjLnRyYW5zbGF0ZShJbnRTaXplKDAsIGJpdG1hcEhlaWdodCkpOwpAQCAt
MTExNCwxOCArMTExOSwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNh
bnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKICAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKCkpIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaWYg
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgICAgICAvLyBGSVhNRTogZG8gcmVhZGJhY2sg
aW4gdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9kZSByYXRoZXIgdGhhbiByZXR1cm5pbmcgbm90aGlu
ZwotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgZG9Db21wb3NpdGUoKTsKLQogICAg
ICAgICAvLyBJZiBhIGNhbnZhcyB3YXMgcGFzc2VkIGluLCB3ZSB1c2UgaXQgdG8gZ3JhYiBhIGNv
cHkgb2YgdGhlCiAgICAgICAgIC8vIGZyZXNobHktcmVuZGVyZWQgcGl4ZWxzLgogICAgICAgICBp
ZiAoY2FudmFzKSB7CiAgICAgICAgICAgICAvLyBDbGlwIHJlY3QgdG8gdGhlIGNvbmZpbmVzIG9m
IHRoZSByb290TGF5ZXJUZXh0dXJlLgogICAgICAgICAgICAgSW50UmVjdCByZXNpemVSZWN0KHJl
Y3QpOwotICAgICAgICAgICAgcmVzaXplUmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0U2l6ZSgpKSk7CisgICAgICAgICAgICByZXNpemVS
ZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX2xheWVyVHJlZUhvc3QtPnZp
ZXdwb3J0VmlzaWJsZVJlY3QoKS5zaXplKCkpKTsKICAgICAgICAgICAgIGRvUGl4ZWxSZWFkYmFj
a1RvQ2FudmFzKGNhbnZhcywgcmVzaXplUmVjdCk7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMTE1
MSw0NiArMTE1MCwyMCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZp
ZXctPmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6
YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCi17Ci0gICAgYW5pbWF0ZShm
cmFtZUJlZ2luVGltZSk7Ci0gICAgbGF5b3V0KCk7Ci19Ci0KIHZvaWQgV2ViVmlld0ltcGw6OmNv
bXBvc2l0ZShib29sIGZpbmlzaCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0
TmVlZHNSZWRyYXcoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzUmVkcmF3KCk7CiAj
ZWxzZQotICAgIFRSQUNFX0VWRU5UKCJXZWJWaWV3SW1wbDo6Y29tcG9zaXRlIiwgdGhpcywgMCk7
Ci0KLSAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7Ci0gICAgICAgIC8vIHJl
YWxsb2NhdGVSZW5kZXJlciB3aWxsIHJlcXVlc3QgYSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0
IHN1Y2NlZWRlZAotICAgICAgICAvLyBpbiBjcmVhdGluZyBhIG5ldyBjb250ZXh0LgotICAgICAg
ICByZWFsbG9jYXRlUmVuZGVyZXIoKTsKLSAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250
ZXh0ID0gZmFsc2U7CisgICAgQVNTRVJUKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgp
KTsKKyAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIC8vIERv
IG5vdCBjb21wb3NpdGUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBpcyBhbHJlYWR5IGxvc3Qu
Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkpIHsK
LSAgICAgICAgZG9Db21wb3NpdGUoKTsKLQotICAgICAgICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVu
LgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKLSAgICB9CisgICAgaWYgKG1f
cGFnZU92ZXJsYXkpCisgICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOwogCi0gICAgaWYg
KG1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgewotICAgICAgICAv
LyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4dCByaWdodCBoZXJlIHdpbGwgbm90IHdvcmsg
aWYgR1BVIHByb2Nlc3MKLSAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNoYW5u
ZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKLSAgICAgICAgLy8gY2FsbGVkIGF0
IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29wLCByZXZlcnRpbmcgb3VyCi0g
ICAgICAgIC8vIHJlY292ZXJ5IGF0dGVtcHRzIGhlcmUuIEluc3RlYWQsIHdlIGRldGFjaCB0aGUg
cm9vdCBsYXllciBmcm9tIHRoZQotICAgICAgICAvLyByZW5kZXJlciwgcmVjcmVhdGUgdGhlIHJl
bmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24KLSAgICAgICAgLy8gYW5k
IHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4KLSAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhp
Y3NDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgc2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCk7Ci0g
ICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRlKGZpbmlzaCk7CiAjZW5kaWYKICNl
bmRpZgogfQpAQCAtMjQ2Niw4ICsyNDM5LDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdy
YXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIpCiB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRSb290UGxhdGZvcm1MYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXllcikK
IHsKICAgICBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUobGF5ZXIpOwotICAgIGlm
IChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Um9vdExheWVy
KGxheWVyKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPnNldFJvb3RMYXllcihsYXllcik7CiAKICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0KDAsIDAs
IG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CiAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlKQpAQCAtMjQ3OSwzMSArMjQ1MiwzMCBAQCB2b2lkIFdlYlZpZXdJbXBs
OjpzZXRSb290UGxhdGZvcm1MYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKiBsYXllcikKIHZv
aWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpCiB7CiAjaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1f
bGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBpZiAobV9sYXll
clRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7CiAjZWxzZQogICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOwogI2VuZGlm
CiB9CiAKLQogdm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVyUmVjdChjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgdXBkYXRl
TGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7CisgICAgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsK
ICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6
aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NF
UlQobV9sYXllclJlbmRlcmVyKTsKKyAgICBBU1NFUlQobV9sYXllclRyZWVIb3N0KTsKIAogICAg
IGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBw
YWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSB2aWV3
LT53aW5kb3dUb0NvbnRlbnRzKHJlY3QpOwotICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9y
dCgpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGlydHlS
ZWN0KTsKKyAgICB1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpOworICAgIG1fbGF5ZXJUcmVlSG9z
dC0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGlydHlSZWN0KTsKICAgICBzZXRSb290TGF5ZXJO
ZWVkc0Rpc3BsYXkoKTsKIH0KIApAQCAtMjUzOCw2ICsyNTEwLDE2IEBAIHByaXZhdGU6CiAgICAg
V2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CiB9OwogCitXZWJDb3JlOjpDQ1NldHRpbmdzIGdl
dENvbXBvc2l0b3JTZXR0aW5ncyhXZWJTZXR0aW5ncyogc2V0dGluZ3MpCit7CisgICAgV2ViQ29y
ZTo6Q0NTZXR0aW5ncyByZXM7CisgICAgcmVzLmFjY2VsZXJhdGVQYWludGluZyA9IHNldHRpbmdz
LT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCk7CisgICAgcmVzLmNvbXBvc2l0ZU9mZnNjcmVl
biA9IHNldHRpbmdzLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCk7CisgICAgcmVzLnNob3dG
UFNDb3VudGVyID0gc2V0dGluZ3MtPnNob3dGUFNDb3VudGVyKCk7CisgICAgcmVzLnNob3dQbGF0
Zm9ybUxheWVyVHJlZSA9IHNldHRpbmdzLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKTsKKyAgICBy
ZXR1cm4gcmVzOworfQorCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiB7CiAgICAgUGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3Jh
bUVudW1lcmF0aW9uKCJHUFUuc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlIiwgYWN0
aXZlICogMiArIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlLCA0KTsKQEAgLTI1NTAs
MjAgKzI1MzIsMTkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQWN0aXZlKGJvb2wgYWN0aXZlKQogICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmlzaCBhbGwg
R0wgcmVuZGVyaW5nIGJlZm9yZSBzZW5kaW5nCiAgICAgICAgIC8vIGRpZEFjdGl2YXRlQWNjZWxl
cmF0ZWRDb21wb3NpdGluZyhmYWxzZSkgdG8gcHJldmVudAogICAgICAgICAvLyBmbGlja2VyaW5n
IHdoZW4gY29tcG9zaXRpbmcgdHVybnMgb2ZmLgotICAgICAgICBpZiAobV9sYXllclJlbmRlcmVy
KQotICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5maW5pc2goKTsKKyAgICAgICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZmluaXNoQWxsUmVu
ZGVyaW5nKCk7CiAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoZmFsc2UpOwotICAgIH0gZWxzZSBpZiAobV9sYXllclJlbmRlcmVyKSB7CisgICAgfSBl
bHNlIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdBY3RpdmUgPSB0cnVlOwotICAgICAgICB1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQo
KTsKKyAgICAgICAgdXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKIAogICAgICAgICBtX2NsaWVu
dC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIFRSQUNFX0VWRU5UKCJXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKHRydWUpIiwgdGhpcywgMCk7CiAKLSAgICAgICAgbV9sYXllclJlbmRlcmVy
ID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgV2ViVmlld0ltcGxDb250ZW50
UGFpbnRlcjo6Y3JlYXRlKHRoaXMpLCBtX3BhZ2UtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJh
d2luZ0VuYWJsZWQoKSk7Ci0gICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKLSAgICAgICAg
ICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygpOworICAgICAgICBtX2xheWVyVHJlZUhv
c3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBnZXRDb21wb3NpdG9yU2V0dGluZ3Mo
c2V0dGluZ3MoKSkpOworICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAg
ICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwogICAgICAg
ICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxzZTsKQEAgLTI1NzksMjQgKzI1
NjAsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0
Q2xpcHNSZXBhaW50cyghbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOwogfQogCi12
b2lkIFdlYlZpZXdJbXBsOjpkb0NvbXBvc2l0ZSgpCi17Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5k
ZXJlcik7Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgc2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSk7Ci0gICAgaWYgKCFw
YWdlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAg
ICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKLQotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRl
TGF5ZXJzKCk7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7Ci19CisjZW5kaWYK
IAogUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUxheWVy
VHJlZUhvc3RDb250ZXh0M0QoKQogewpAQCAtMjYwOSw0NiArMjU3MywzOCBAQCBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBXZWJWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRl
eHQzRCgpCiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnJlYWxs
b2NhdGVSZW5kZXJlcigpCitQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBXZWJWaWV3
SW1wbDo6Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpCiB7Ci0gICAgLy8gR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNlIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y3JlYXRlIHdpbGwgYWxzbyByZXR1cm4gMC4KLSAgICBSZWZQdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjcmVhdGUodGhpcywgV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpLCBt
X3BhZ2UtPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7CisgICAgcmV0
dXJuIFdlYlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKTsKK30KIAotICAgIC8v
IFJlYXR0YWNoIHRoZSByb290IGxheWVyLiAgQ2hpbGQgbGF5ZXJzIHdpbGwgZ2V0IHJlYXR0YWNo
ZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB1cGRhdGVMYXllcnNSZWN1cnNpdmUuCi0gICAgaWYgKGxh
eWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT50cmFuc2ZlclJvb3RMYXll
cihsYXllclJlbmRlcmVyLmdldCgpKTsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJS
ZW5kZXJlcjsKLSAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7Cit2b2lkIFdl
YlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAg
ICBhbmltYXRlKGZyYW1lQmVnaW5UaW1lKTsKKyAgICBsYXlvdXQoKTsKK30KIAotICAgICAgICAv
LyBGSVhNRTogSW4gTWFjT1MgbmV3Q29udGV4dC0+cmVzaGFwZSBtZXRob2QgbmVlZHMgdG8gYmUg
Y2FsbGVkIHRvCi0gICAgICAgIC8vIGFsbG9jYXRlIElPU3VyZmFjZXMuIEFsbCBjYWxscyB0byBj
cmVhdGUgYSBjb250ZXh0IGZvbGxvd2VkIGJ5Ci0gICAgICAgIC8vIHJlc2hhcGUgc2hvdWxkIHJl
YWxseSBiZSBleHRyYWN0ZWQgaW50byBvbmUgZnVuY3Rpb247IGl0IGlzIG5vdAotICAgICAgICAv
LyBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgR3JhcGhpY3NDb250ZXh0M0Qgb2JqZWN0IHdpbGwg
bm90Ci0gICAgICAgIC8vIGZ1bmN0aW9uIHByb3Blcmx5IHVudGlsIGl0cyByZXNoYXBlIG1ldGhv
ZCBpcyBjYWxsZWQuCi0gICAgICAgIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+cmVzaGFwZSht
YXgoMSwgbV9zaXplLndpZHRoKSwgbWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKLSAgICAgICAgc2V0
Um9vdFBsYXRmb3JtTGF5ZXIobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKSk7Cit2b2lkIFdl
YlZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCit7Cisg
ICAgc2V0Um9vdFBsYXRmb3JtTGF5ZXIoc3VjY2VzcyA/IG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExh
eWVyKCkgOiAwKTsKIAotICAgICAgICAvLyBGb3JjZXMgVmlld0hvc3RNc2dfRGlkQWN0aXZhdGVB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nIHRvIGJlIHNlbnQgc28KLSAgICAgICAgLy8gdGhhdCB0aGUg
YnJvd3NlciBwcm9jZXNzIGNhbiByZWFjcXVpcmUgc3VyZmFjZXMuCi0gICAgICAgIG1fY2xpZW50
LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7Ci0gICAgICAgIGlmICht
X3BhZ2VPdmVybGF5KQotICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHNldFJvb3RQbGF0Zm9ybUxheWVyKDApOworICAgIGlmIChzdWNjZXNz
KSB7CisgICAgICAvLyBGb3JjZXMgVmlld0hvc3RNc2dfRGlkQWN0aXZhdGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nIHRvIGJlIHNlbnQgc28KKyAgICAgIC8vIHRoYXQgdGhlIGJyb3dzZXIgcHJvY2Vz
cyBjYW4gcmVhY3F1aXJlIHN1cmZhY2VzLgorICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsKKyAgICAgIGlmIChtX3BhZ2VPdmVybGF5KQorICAg
ICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOworICAgIH0KIH0KLSNlbmRpZgogCi12b2lk
IFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKQorI2lmICFVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCit2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSgp
CiB7Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5z
ZXRDb21wb3NpdGVPZmZzY3JlZW4oc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxl
ZCgpKTsKLQotICAgIENDSGVhZHNVcERpc3BsYXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVh
ZHNVcERpc3BsYXkoKTsKLSAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNo
b3dGUFNDb3VudGVyKCkpOwotICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRp
bmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVD
b21wb3NpdGUoKTsKIH0KKyNlbmRpZgogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJl
bmRlcmVyVmlld3BvcnQoKQordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVlVmlld3Bv
cnQoKQogewogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjU4LDE1ICsy
NjE0LDE1IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgp
CiAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVl
KTsKICAgICBJbnRQb2ludCBzY3JvbGwodmlldy0+c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkp
OwogCi0gICAgbV9sYXllclJlbmRlcmVyLT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdCwgY29udGVu
dFJlY3QsIHNjcm9sbCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydCh2aXNpYmxl
UmVjdCwgY29udGVudFJlY3QsIHNjcm9sbCk7CiB9CiAKIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBX
ZWJWaWV3SW1wbDo6Z3JhcGhpY3NDb250ZXh0M0QoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICBpZiAobV9wYWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZCgpICYmIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAg
ICAgICBpZiAobV9sYXllclJlbmRlcmVyKSB7Ci0gICAgICAgICAgICBXZWJHcmFwaGljc0NvbnRl
eHQzRCogd2ViQ29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmV4dHJhY3RXZWJH
cmFwaGljc0NvbnRleHQzRChtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKSk7CisgICAgICAgIGlm
IChtX2xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3
ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZXh0cmFjdFdlYkdyYXBoaWNz
Q29udGV4dDNEKG1fbGF5ZXJUcmVlSG9zdC0+Y29udGV4dCgpKTsKICAgICAgICAgICAgIGlmICh3
ZWJDb250ZXh0ICYmICF3ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHdlYkNvbnRleHQ7CiAgICAgICAgIH0KQEAgLTI2OTgsOCArMjY1NCw4IEBAIHZv
aWQgV2ViVmlld0ltcGw6OnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRl
IHZpc2liaWxpdHlTdGF0ZSwKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSAmJiB2aXNpYmls
aXR5U3RhdGUgPT0gV2ViUGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbikKLSAgICAgICAgbV9sYXll
clJlbmRlcmVyLT5yZWxlYXNlVGV4dHVyZXMoKTsKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nQWN0aXZlKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0VmlzaWJsZSh2aXNp
YmlsaXR5U3RhdGUgPT0gV2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUpOwogI2VuZGlmCiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGFlMzUyNWY2
ZGY5OTBiZTJiOWIxYWM0ZTU4ZGQ4MTdhMThkYzc5YjQuLjhkMTEzZTZkMGVjODkzM2JjMTg3ZDM1
ZDY5YmYzOWE0YTE0ODc5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaApAQCAtNDYsOSArNDYsOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNl
bnRlckltcGwuaCIKICNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCkBAIC0yMTAsNiArMjEwLDExIEBAIHB1YmxpYzoKICAgICAvLyBDQ0xheWVy
VHJlZUhvc3RDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUg
ZnJhbWVCZWdpblRpbWUpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIHZpcnR1YWwg
UGFzc093blB0cjxXZWJDb3JlOjpMYXllclBhaW50ZXJDaHJvbWl1bT4gY3JlYXRlUm9vdExheWVy
UGFpbnRlcigpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChi
b29sIHN1Y2Nlc3MpOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZW5kaWYKIAogICAgIC8vIFdlYlZpZXdJbXBs
CiAKQEAgLTQzNCwxMSArNDM5LDEyIEBAIHByaXZhdGU6CiAKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
Ym9vbCk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKICAgICB2b2lkIGRvQ29tcG9z
aXRlKCk7CisjZW5kaWYKICAgICB2b2lkIGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZh
cyosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJl
cigpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7Ci0gICAgdm9pZCB1
cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyVHJlZVZp
ZXdwb3J0KCk7CiAjZW5kaWYKIAogICAgIFdlYlZpZXdDbGllbnQqIG1fY2xpZW50OwpAQCAtNTU1
LDcgKzU2MSw3IEBAIHByaXZhdGU6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Jvb3RMYXllclNjcm9sbERhbWFnZTsKLSAgICBSZWZQ
dHI8V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OwogICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgYm9vbCBtX2lz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZTsKICAgICBib29sIG1fY29tcG9zaXRvckNyZWF0
aW9uRmFpbGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103548</attachid>
            <date>2011-08-10 15:59:03 -0700</date>
            <delta_ts>2011-08-11 15:44:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65791-20110810155902.patch</filename>
            <type>text/plain</type>
            <size>75179</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI2ODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NGU4ODU5ZmQzNDBmNDc0
ZTE4Mzg5ZDM4NGNlZTMyOWYxMzJlNGI0Li41N2JhMmQzNTM4N2IzZTViN2EyZWEwYWE4NDkxMjA0
OTI2MGE4M2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMDgtMDUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBXZWJW
aWV3SW1wbCBwb2ludCBhdCBDQ0xheWVyVHJlZUhvc3QgYW5kIHJlbGF0ZWQgc2VwYXJhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3OTEKKwor
ICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIExheWVyUmVuZGVyZXJDaHJvbWl1bSBiZWNvbWVzIGlu
Y3JlYXNpbmdseSByZXNwb25zaWJsZQorICAgICAgICBmb3IgcmVuZGVyaW5nLCB3aGlsZSByZW5k
ZXIgc2NoZWR1bGluZyBhbmQgdHJlZSBob3N0aW5nIG1vdmVzIGludG8gdGhlCisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0
dXJlVXBkYXRlcklmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJlbGVhc2VUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cm9vdExheWVyQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFt
ZWJ1ZmZlclBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNjaXNzb3JUb1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpsYXllclRyZWVBc1RleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkdW1wUmVuZGVyU3VyZmFj
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXR0
aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Om93bmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cm9vdExheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnNldFRleHR1cmVVcGRhdGVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlUm9vdExheWVyUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmZpbmlzaEFsbFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OmRvQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9z
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cmVhbGxvY2F0ZVJlbmRl
cmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0QW5pbWF0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0Ojp2aWV3cG9ydENvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6dmlld3BvcnRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnZpZXdwb3J0VmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzT25NYWluVGhyZWFkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
aW5pdEltcGxPbkNDVGhyZWFkKToKKwogMjAxMS0wOC0wOSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxk
bWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcHJvdmlkZSBhIHdheSB0
byBoaWRlIHVzZXIgYWdlbnQgc3R5bGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggNGFjYzAzNjVhYzAxMTI2NmMwYzJlMTc2NmZmZWNjMTNmZjZkYjc4OS4uYjA2Nzk3
MTFiMmI0ZTFiMjRmNGRjMzRkOTMzMzk3ZTlmZGUxMGE1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcApAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgQ29udGVudExheWVyQ2hy
b21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVySWZOZWVkZWQoKQogICAgIGlmIChtX3RleHR1cmVV
cGRhdGVyKQogICAgICAgICByZXR1cm47CiAjaWYgVVNFKFNLSUEpCi0gICAgaWYgKGxheWVyUmVu
ZGVyZXIoKS0+YWNjZWxlcmF0ZURyYXdpbmcoKSkgeworICAgIGlmIChsYXllclJlbmRlcmVyKCkt
PnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nKSB7CiAgICAgICAgIG1fdGV4dHVyZVVwZGF0
ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUobGF5ZXJSZW5kZXJlckNv
bnRleHQoKSwgQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBsYXllclJlbmRl
cmVyKCktPnNraWFDb250ZXh0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDRlNDAxY2NlODhhYjlhZDIyMWJkNDdkN2RmZTE5YzczZDViMWY0MGUuLjEz
OWRhNjZjMjc1OWMzZmZkYzM3ODI2MWE5MjczZDA3NDI0ZDk2MjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKQEAgLTEzOCw3ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkb3VibGVTaWRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZG91YmxlU2lkZWQ7IH0KICAgICB2b2lkIHNldERvdWJsZVNpZGVkKGJv
b2wgZG91YmxlU2lkZWQpIHsgbV9kb3VibGVTaWRlZCA9IGRvdWJsZVNpZGVkOyBzZXROZWVkc0Nv
bW1pdCgpOyB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyBzZXR0aW5nIGlzIGN1cnJlbnRseSBpZ25v
cmVkLgorICAgIC8vIFRPRE86IFRoaXMgc2V0dGluZyBpcyBjdXJyZW50bHkgaWdub3JlZC4KICAg
ICB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChib29sIGZsaXBwZWQpIHsgbV9nZW9tZXRyeUZsaXBw
ZWQgPSBmbGlwcGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBnZW9tZXRyeUZsaXBw
ZWQoKSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5RmxpcHBlZDsgfQogCkBAIC0xNDksNiArMTQ5
LDcgQEAgcHVibGljOgogCiAgICAgLy8gRGVyaXZlZCB0eXBlcyBtdXN0IG92ZXJyaWRlIHRoaXMg
bWV0aG9kIGlmIHRoZXkgbmVlZCB0byByZWFjdCB0byBhIGNoYW5nZQogICAgIC8vIGluIHRoZSBM
YXllclJlbmRlcmVyQ2hyb21pdW0uCisgICAgLy8gVE9PRCwgcmVwbGFjZSB3aXRoIENDTGF5ZXJU
cmVlSG9zdAogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJD
aHJvbWl1bSopOwogCiAgICAgdm9pZCBzZXRPd25lcihHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93
bmVyKSB7IG1fb3duZXIgPSBvd25lcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKaW5kZXggYmZjMjliNzhkMWQzZjU3MDg3YzBjNzNkMzA2OTIxNDhmMTI4ZDViOC4uZDEx
MzEzMjIzZTU4ZjhkN2Y0ZjdhYzI3YjM1ZjU3NjNhMzk4MDJmNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiVHJhY2VF
dmVudC5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKQEAgLTQyMCw2NCArNDE5LDgwIEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBzY3JlZW5NYXRyaXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAg
ICAgcmV0dXJuIHNjcmVlbjsKIH0KIAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xp
ZW50LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJvb2wg
YWNjZWxlcmF0ZURyYXdpbmcpCisjaWYgVVNFKFNLSUEpCitib29sIGNvbnRleHRTdXBwb3J0c0Fj
Y2VsZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gY2xpZW50LT5jcmVhdGVMYXllclRyZWVI
b3N0Q29udGV4dDNEKCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKKyAg
ICBXZWJDb3JlOjpFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNp
b25zKCk7CisgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9mb3Jt
YXRfQkdSQTg4ODgiKSkKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhU
X3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9yZWFkX2Zvcm1hdF9i
Z3JhIikpCisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9yZWFkX2Zv
cm1hdF9iZ3JhIik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXll
clJlbmRlcmVyQ2hyb21pdW0oY2xpZW50LCBjb250ZXh0LCBjb250ZW50UGFpbnQsIGFjY2VsZXJh
dGVEcmF3aW5nKSkpOwotICAgIGxheWVyUmVuZGVyZXItPmluaXQoKTsKLSAgICBpZiAoIWxheWVy
UmVuZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNl
bmRpZgorCitQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBvd25lciwgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCkKK3sKKyNpZiBVU0UoU0tJQSkKKyAgICBpZiAob3duZXItPnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nICYmICFjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRl
ZFBhaW50aW5nKGNvbnRleHQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAg
IFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3
IExheWVyUmVuZGVyZXJDaHJvbWl1bShvd25lciwgY29udGV4dCkpKTsKKyAgICBpZiAoIWxheWVy
UmVuZGVyZXItPmluaXRpYWxpemUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4g
bGF5ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZWxl
cmF0ZURyYXdpbmcpCi0gICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50KQotICAgICwgbV92aWV3
cG9ydFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCi0gICAgLCBtX3Jvb3RMYXllcigw
KQotICAgICwgbV9hY2NlbGVyYXRlRHJhd2luZyhmYWxzZSkKK0xheWVyUmVuZGVyZXJDaHJvbWl1
bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0KQorICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY3VycmVu
dFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQotICAg
ICwgbV9jb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
LSAgICAsIG1fY29udGV4dFN1cHBvcnRzVGV4dHVyZUZvcm1hdEJHUkEoZmFsc2UpCi0gICAgLCBt
X2NvbnRleHRTdXBwb3J0c1JlYWRGb3JtYXRCR1JBKGZhbHNlKQotICAgICwgbV9hbmltYXRpbmco
ZmFsc2UpCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiB7Cit9CisKK2Jvb2wgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKK3sKICAgICBXZWJDb3JlOjpFeHRlbnNp
b25zM0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBtX2Nv
bnRleHRTdXBwb3J0c01hcFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9t
YXBfc3ViIik7CiAgICAgaWYgKG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKQogICAgICAgICBleHRl
bnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7Ci0gICAgbV9jb250
ZXh0U3VwcG9ydHNUZXh0dXJlRm9ybWF0QkdSQSA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9F
WFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKLSAgICBpZiAobV9jb250ZXh0U3VwcG9ydHNU
ZXh0dXJlRm9ybWF0QkdSQSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgbV9jb250ZXh0U3VwcG9ydHNSZWFk
Rm9ybWF0QkdSQSA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdy
YSIpOwotICAgIGlmIChtX2NvbnRleHRTdXBwb3J0c1JlYWRGb3JtYXRCR1JBKQotICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOwogCi0j
aWYgVVNFKFNLSUEpCi0gICAgbV9hY2NlbGVyYXRlRHJhd2luZyA9IGFjY2VsZXJhdGVEcmF3aW5n
ICYmIHNraWFDb250ZXh0KCk7Ci0jZW5kaWYKLSAgICBtX2hhcmR3YXJlQ29tcG9zaXRpbmcgPSBp
bml0aWFsaXplU2hhcmVkT2JqZWN0cygpOworICAgIGlmICghaW5pdGlhbGl6ZVNoYXJlZE9iamVj
dHMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgVVNFKFNLSUEpCi0gICAgaWYgKG1f
YWNjZWxlcmF0ZURyYXdpbmcpCi0gICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIgPSBM
YXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBjb250
ZW50UGFpbnQsIHNraWFDb250ZXh0KCkpOworICAgIGlmIChzZXR0aW5ncygpLmFjY2VsZXJhdGVQ
YWludGluZykgeworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
ICAgICBtX3NraWFDb250ZXh0ID0gYWRvcHRQdHIoR3JDb250ZXh0OjpDcmVhdGVHTFNoYWRlckNv
bnRleHQoKSk7CisgICAgICAgIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9s
ZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1heFRleHR1cmVDYWNoZUNvdW50ID0gNTEyOworICAgICAgICAvLyBMaW1pdCB0aGUgYnl0ZXMg
YWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgor
ICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAx
MDI0ICogMTAyNDsKKyAgICAgICAgbV9za2lhQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRz
KG1heFRleHR1cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgICAgIG1f
cm9vdExheWVyVGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpj
cmVhdGUobV9jb250ZXh0LmdldCgpLCBtX293bmVyLT5jcmVhdGVSb290TGF5ZXJQYWludGVyKCks
IHNraWFDb250ZXh0KCkpOworICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgbV9yb290
TGF5ZXJUZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZSht
X2NvbnRleHQuZ2V0KCksIGNvbnRlbnRQYWludCwgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIpOwor
ICAgICAgICBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJp
dG1hcDo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgbV9vd25lci0+Y3JlYXRlUm9vdExheWVyUGFp
bnRlcigpLCBtX2NvbnRleHRTdXBwb3J0c01hcFN1Yik7CiAKICAgICBtX3Jvb3RMYXllckNvbnRl
bnRUaWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAy
NTYpLCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICBBU1NFUlQobV9y
b290TGF5ZXJDb250ZW50VGlsZXIpOwogCiAgICAgbV9oZWFkc1VwRGlzcGxheSA9IENDSGVhZHNV
cERpc3BsYXk6OmNyZWF0ZSh0aGlzKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmlld3BvcnQg
YW5kIGNvbnRleHQgZ2V0cyBpbml0aWFsaXplZCwgZXZlbiBpZiBpdCBpcyB0byB6ZXJvLgorICAg
IHZpZXdwb3J0Q2hhbmdlZCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiBMYXllclJlbmRlcmVy
Q2hyb21pdW06On5MYXllclJlbmRlcmVyQ2hyb21pdW0oKQpAQCAtNDkxLDIyICs1MDYsNiBAQCBH
cmFwaGljc0NvbnRleHQzRCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0KCkKICAgICBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi0jaWYgVVNFKFNLSUEpCi1HckNvbnRleHQqIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQoKQotewotICAgIGlmICghbV9za2lhQ29u
dGV4dCAmJiBtX2NvbnRleHRTdXBwb3J0c1RleHR1cmVGb3JtYXRCR1JBICYmIG1fY29udGV4dFN1
cHBvcnRzUmVhZEZvcm1hdEJHUkEpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICAgICAgbV9za2lhQ29udGV4dCA9IGFkb3B0UHRyKEdyQ29udGV4dDo6Q3Jl
YXRlR0xTaGFkZXJDb250ZXh0KCkpOwotICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIHRl
eHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KLSAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhUZXh0dXJlQ2FjaGVDb3VudCA9IDUxMjsKLSAgICAgICAgLy8gTGlt
aXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4
dHVyZSBjYWNoZS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVC
eXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7Ci0gICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRleHR1
cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMp
OwotICAgIH0KLSAgICByZXR1cm4gbV9za2lhQ29udGV4dC5nZXQoKTsKLX0KLSNlbmRpZgotCiB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5l
KQogewogICAgIHVuc2lnbmVkIGxvbmcgZXJyb3IgPSBjb250ZXh0LT5nZXRFcnJvcigpOwpAQCAt
NTE0LDE2ICs1MTMsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxs
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogICAgICAgICBMT0dfRVJS
T1IoIkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNvbW1hbmQ6ICVz
LCBlcnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8aW50PihlcnJv
cikpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJvb3RMYXll
clJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIG1fcm9vdExheWVyQ29udGVu
dFRpbGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOwotfQotCiB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6cmVsZWFzZVRleHR1cmVzKCkKIHsKICAgICAvLyBSZWR1Y2VzIHRleHR1cmUg
bWVtb3J5IHVzYWdlIHRvIHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzIGJ5IGRlbGV0aW5nIG5v
biByb290IGxheWVyCiAgICAgLy8gdGV4dHVyZXMuCi0gICAgbV9yb290TGF5ZXJDb250ZW50VGls
ZXItPnByb3RlY3RUaWxlVGV4dHVyZXMobV92aWV3cG9ydFZpc2libGVSZWN0KTsKKyAgICBtX3Jv
b3RMYXllckNvbnRlbnRUaWxlci0+cHJvdGVjdFRpbGVUZXh0dXJlcyhtX293bmVyLT52aWV3cG9y
dFZpc2libGVSZWN0KCkpOwogICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVt
b3J5VG9MaW1pdCh0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyk7CiAgICAgbV9jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogICAgIC8vIEV2aWN0IGFsbCBS
ZW5kZXJTdXJmYWNlIHRleHR1cmVzLgpAQCAtNTM0LDc5ICs1MjgsNzkgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnJlbGVhc2VUZXh0dXJlcygpCiB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoKQogewogICAgIFRSQUNFX0VWRU5UKCJMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzIiwgdGhpcywgMCk7Ci0g
ICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnByZXBhcmVUb1VwZGF0ZShtX3ZpZXdwb3J0Vmlz
aWJsZVJlY3QsIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOworICAgIG1fcm9vdExh
eWVyQ29udGVudFRpbGVyLT5wcmVwYXJlVG9VcGRhdGUobV9vd25lci0+dmlld3BvcnRWaXNpYmxl
UmVjdCgpLCBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyLmdldCgpKTsKIH0KIAogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIoKQogewogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHNjcm9sbDsKLSAgICBzY3JvbGwudHJhbnNsYXRlKC1tX3ZpZXdwb3J0VmlzaWJsZVJl
Y3QueCgpLCAtbV92aWV3cG9ydFZpc2libGVSZWN0LnkoKSk7CisgICAgc2Nyb2xsLnRyYW5zbGF0
ZSgtbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLngoKSwgLW1fb3duZXItPnZpZXdwb3J0
VmlzaWJsZVJlY3QoKS55KCkpOwogCi0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmRyYXco
bV92aWV3cG9ydFZpc2libGVSZWN0LCBzY3JvbGwsIDEuMGYpOworICAgIG1fcm9vdExheWVyQ29u
dGVudFRpbGVyLT5kcmF3KG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKSwgc2Nyb2xsLCAx
LjBmKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpZXdwb3J0KGNvbnN0
IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlu
dmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBi
b29sIHZpc2libGVSZWN0Q2hhbmdlZCA9IG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkgIT0g
dmlzaWJsZVJlY3Quc2l6ZSgpOwotCi0gICAgbV92aWV3cG9ydFZpc2libGVSZWN0ID0gdmlzaWJs
ZVJlY3Q7Ci0gICAgbV92aWV3cG9ydENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Ci0gICAgbV92
aWV3cG9ydFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247Ci0KLSAgICBpZiAodmlzaWJs
ZVJlY3RDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgdmlzaWJsZVJlY3Qud2lkdGgoKSksIHN0ZDo6bWF4
KDEsIHZpc2libGVSZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50
IHJlbmRlciBzdXJmYWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmlld3BvcnQgYW5kCi0g
ICAgICAgIC8vIHByb2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJTdXJmYWNlIGlz
IGNhbGxlZC4KLSAgICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7Ci0gICAgICAgIG1f
cm9vdExheWVyQ29udGVudFRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKLSAgICB9Ci0g
ICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxl
ci0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnJvb3RMYXllckNoYW5nZWQoKQoreworICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVy
LT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnZpZXdwb3J0Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgbV9j
b250ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3Qo
KS53aWR0aCgpKSwgc3RkOjptYXgoMSwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLmhl
aWdodCgpKSk7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRhdGVFbnRpcmVM
YXllcigpOworCisgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZhY2UgdG8gZm9y
Y2UgYW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKKyAgICAvLyBwcm9qZWN0aW9uIG1hdHJp
eCBuZXh0IHRpbWUgdXNlUmVuZGVyU3VyZmFjZSBpcyBjYWxsZWQuCisgICAgbV9jdXJyZW50UmVu
ZGVyU3VyZmFjZSA9IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVM
YXllcnMoKQogewotICAgIGlmIChtX3ZpZXdwb3J0VmlzaWJsZVJlY3QuaXNFbXB0eSgpKQorICAg
IGlmIChtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBGSVhNRTogdXNlIHRoZSBmcmFtZSBiZWdpbiB0aW1lIGZyb20gdGhl
IG92ZXJhbGwgY29tcG9zaXRvciBzY2hlZHVsZXIuCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyBjdXJy
ZW50bHkgaW5hY2Nlc3NpYmxlIGJlY2F1c2UgaXQgaXMgdXAgaW4gQ2hyb21pdW0ncwogICAgIC8v
IFJlbmRlcldpZGdldC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVu
dFRpbWUoKSk7Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CiAKLSAgICBpZiAo
IW1fcm9vdExheWVyKQorICAgIGlmICghcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CiAKICAgICAvLyBSZWNoZWNrIHRoYXQgd2Ug
c3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIuIFRoaXMgbWF5IGJlY29tZSBudWxsIGlmCiAgICAgLy8g
Y29tcG9zaXRpbmcgZ2V0cyB0dXJuZWQgb2ZmIGR1cmluZyBhIHBhaW50IG9wZXJhdGlvbi4KLSAg
ICBpZiAoIW1fcm9vdExheWVyKQorICAgIGlmICghcm9vdExheWVyKCkpIHsKKyAgICAgICAgbV9y
b290Q0NMYXllckltcGwuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIHVw
ZGF0ZUxheWVycyhtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXll
cigpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogewot
ICAgIEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogICAgIC8vIEJlZm9yZSBkcmF3TGF5
ZXJzOgotICAgIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAgLy8gRklYTUU6
IFRoZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2FzZSB3aWxsIG5vdCB3b3JrIGFzIGxvbmcg
YXMKLSAgICAgICAgLy8gY29weVRleEltYWdlMkQgcmVzb2x2ZXMgdG8gdGhlIHBhcmVudCB0ZXh0
dXJlLCBiZWNhdXNlIHRoZSBtYWluCi0gICAgICAgIC8vIHRocmVhZCBjYW4gZXhlY3V0ZSBXZWJH
TCBjYWxscyBvbiB0aGUgY2hpbGQgY29udGV4dCBhdCBhbnkgdGltZSwKLSAgICAgICAgLy8gcG90
ZW50aWFsbHkgY2xvYmJlcmluZyB0aGUgcGFyZW50IHRleHR1cmUgdGhhdCBpcyBiZWluZyByZW5k
ZXJlcmVkCi0gICAgICAgIC8vIGJ5IHRoZSBjb21wb3NpdG9yIHRocmVhZC4KLSAgICAgICAgQ2hp
bGRDb250ZXh0TWFwOjppdGVyYXRvciBpID0gbV9jaGlsZENvbnRleHRzLmJlZ2luKCk7Ci0gICAg
ICAgIGZvciAoOyBpICE9IG1fY2hpbGRDb250ZXh0cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBpLT5maXJzdC0+Zmx1c2goKTsKLSAgICAgICAgfQorICAgIC8vIEZJWE1FOiBUaGUgbXVsdGl0
aHJlYWRlZCBjb21wb3NpdG9yIGNhc2Ugd2lsbCBub3Qgd29yayBhcyBsb25nIGFzCisgICAgLy8g
Y29weVRleEltYWdlMkQgcmVzb2x2ZXMgdG8gdGhlIHBhcmVudCB0ZXh0dXJlLCBiZWNhdXNlIHRo
ZSBtYWluCisgICAgLy8gdGhyZWFkIGNhbiBleGVjdXRlIFdlYkdMIGNhbGxzIG9uIHRoZSBjaGls
ZCBjb250ZXh0IGF0IGFueSB0aW1lLAorICAgIC8vIHBvdGVudGlhbGx5IGNsb2JiZXJpbmcgdGhl
IHBhcmVudCB0ZXh0dXJlIHRoYXQgaXMgYmVpbmcgcmVuZGVyZXJlZAorICAgIC8vIGJ5IHRoZSBj
b21wb3NpdG9yIHRocmVhZC4KKyAgICBDaGlsZENvbnRleHRNYXA6Oml0ZXJhdG9yIGkgPSBtX2No
aWxkQ29udGV4dHMuYmVnaW4oKTsKKyAgICBmb3IgKDsgaSAhPSBtX2NoaWxkQ29udGV4dHMuZW5k
KCk7ICsraSkgeworICAgICAgICBpLT5maXJzdC0+Zmx1c2goKTsKICAgICB9CiAKICAgICB7CiAg
ICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnN5bmNocm9uaXplVHJl
ZXMiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVlU3luY2hyb25p
emVyOjpzeW5jaHJvbml6ZVRyZWVzKG1fcm9vdExheWVyLmdldCgpLCBtX3Jvb3RDQ0xheWVySW1w
bC5nZXQoKSk7CisgICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKSwgbV9yb290Q0NMYXllckltcGwuZ2V0KCkpOwog
ICAgIH0KIAogCkBAIC02MjEsOCArNjE1LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3TGF5ZXJzKCkKICAgICBlbHNlCiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyLT5yZWR1Y2VNZW1vcnlUb0xpbWl0KDApOwogCi0gICAgaWYgKGlzQ29tcG9zaXRpbmdP
ZmZzY3JlZW4oKSkKKyAgICBpZiAoc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4pIHsKICAg
ICAgICAgY29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKTsKKyAgICAgICAgLy8gVE9ET0Q6
IG1pZ2h0IGhhdmUgdG8gY2FsbAorICAgICAgICAvLyBtX3Jvb3RDQ0xheWVySW1wbC0+Y2xlYXJS
ZW5kZXJTdXJmYWNlKCk7CisgICAgfQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKQEAgLTYzMSwxMSArNjI4LDEx
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1
bSogcm9vdExheWVyKQogCiAgICAgaWYgKCFyb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKICAg
ICAgICAgcm9vdExheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7Ci0gICAgcm9vdExheWVyLT5y
ZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1f
dmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKKyAgICByb290TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludCgwLCAwKSwgbV9vd25lci0+dmll
d3BvcnRWaXNpYmxlUmVjdCgpLnNpemUoKSkpOwogCi0gICAgSW50UmVjdCByb290U2Npc3NvclJl
Y3QobV92aWV3cG9ydFZpc2libGVSZWN0KTsKKyAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdCht
X293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkpOwogICAgIC8vIFRoZSBzY2lzc29yUmVjdCBz
aG91bGQgbm90IGluY2x1ZGUgdGhlIHNjcm9sbCBvZmZzZXQuCi0gICAgcm9vdFNjaXNzb3JSZWN0
Lm1vdmUoLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi54KCksIC1tX3ZpZXdwb3J0U2Nyb2xsUG9z
aXRpb24ueSgpKTsKKyAgICByb290U2Npc3NvclJlY3QubW92ZSgtbV9vd25lci0+dmlld3BvcnRT
Y3JvbGxQb3NpdGlvbigpLngoKSwgLW1fb3duZXItPnZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS55
KCkpOwogICAgIHJvb3RMYXllci0+c2V0U2Npc3NvclJlY3Qocm9vdFNjaXNzb3JSZWN0KTsKIAog
ICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwpAQCAtNzYxLDcgKzc1OCw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5
ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzSW50ZXJuYWwoKQogewotICAgIGlmIChtX3ZpZXdwb3J0VmlzaWJsZVJlY3QuaXNF
bXB0eSgpIHx8ICFtX3Jvb3RMYXllcikKKyAgICBpZiAobV9vd25lci0+dmlld3BvcnRWaXNpYmxl
UmVjdCgpLmlzRW1wdHkoKSB8fCAhcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMiLCB0aGlzLCAw
KTsKQEAgLTc3MCwxMSArNzY3LDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzSW50ZXJuYWwoKQogCiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNl
KCkpCiAgICAgICAgIHJvb3REcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICBy
b290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQoMCwgMCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkpKTsKKyAgICByb290RHJh
d0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQo
MCwgMCksIG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS5zaXplKCkpKTsKIAotICAgIElu
dFJlY3Qgcm9vdFNjaXNzb3JSZWN0KG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7CisgICAgSW50UmVj
dCByb290U2Npc3NvclJlY3QobV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpKTsKICAgICAv
LyBUaGUgc2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0Lgot
ICAgIHJvb3RTY2lzc29yUmVjdC5tb3ZlKC1tX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24ueCgpLCAt
bV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgcm9vdFNjaXNzb3JSZWN0Lm1vdmUo
LW1fb3duZXItPnZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS54KCksIC1tX293bmVyLT52aWV3cG9y
dFNjcm9sbFBvc2l0aW9uKCkueSgpKTsKICAgICByb290RHJhd0xheWVyLT5zZXRTY2lzc29yUmVj
dChyb290U2Npc3NvclJlY3QpOwogCiAgICAgQ0NMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdDsKQEAgLTc5MCw4ICs3ODcsOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVyc0ludGVybmFsKCkKICAgICB9CiAKICAgICAvLyBUaGUgR0wgdmlld3BvcnQgY292ZXJz
IHRoZSBlbnRpcmUgdmlzaWJsZSBhcmVhLCBpbmNsdWRpbmcgdGhlIHNjcm9sbGJhcnMuCi0gICAg
R0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBtX3ZpZXdwb3J0
VmlzaWJsZVJlY3Qud2lkdGgoKSwgbV92aWV3cG9ydFZpc2libGVSZWN0LmhlaWdodCgpKSk7Ci0g
ICAgbV93aW5kb3dNYXRyaXggPSBzY3JlZW5NYXRyaXgoMCwgMCwgbV92aWV3cG9ydFZpc2libGVS
ZWN0LndpZHRoKCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5oZWlnaHQoKSk7CisgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBtX293bmVyLT52aWV3cG9y
dFZpc2libGVSZWN0KCkud2lkdGgoKSwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLmhl
aWdodCgpKSk7CisgICAgbV93aW5kb3dNYXRyaXggPSBzY3JlZW5NYXRyaXgoMCwgMCwgbV9vd25l
ci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLndpZHRoKCksIG1fb3duZXItPnZpZXdwb3J0VmlzaWJs
ZVJlY3QoKS5oZWlnaHQoKSk7CiAKICAgICAvLyBCaW5kIHRoZSBjb21tb24gdmVydGV4IGF0dHJp
YnV0ZXMgdXNlZCBmb3IgZHJhd2luZyBhbGwgdGhlIGxheWVycy4KICAgICBtX3NoYXJlZEdlb21l
dHJ5LT5wcmVwYXJlRm9yRHJhdygpOwpAQCAtODg3LDE0ICs4ODQsNiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgpCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25QcmVzZW50
KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRSb290TGF5ZXIoUGFzc1Jl
ZlB0cjxMYXllckNocm9taXVtPiBsYXllcikKLXsKLSAgICBtX3Jvb3RMYXllciA9IGxheWVyOwot
ICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgbV9yb290TGF5ZXItPnNldExheWVyUmVuZGVy
ZXIodGhpcyk7Ci0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRhdGVFbnRpcmVM
YXllcigpOwotfQotCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJl
clJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllcikKIHsKICAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7CkBAIC05
MDksMTUgKzg5OCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRMYXllclJlbmRl
cmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQogICAgIGxheWVyLT5zZXRMYXllclJl
bmRlcmVyKHRoaXMpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dHJhbnNmZXJS
b290TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBvdGhlcikKLXsKLSAgICBvdGhlci0+c2V0
TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7Ci0gICAgb3RoZXItPm1f
cm9vdExheWVyID0gbV9yb290TGF5ZXIucmVsZWFzZSgpOwotfQotCiB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewotICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8PSBtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3Qud2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSBtX3ZpZXdwb3J0VmlzaWJsZVJlY3QuaGVp
Z2h0KCkpOworICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8PSBtX293bmVyLT52aWV3cG9ydFZpc2li
bGVSZWN0KCkud2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSBtX293bmVyLT52aWV3cG9ydFZpc2li
bGVSZWN0KCkuaGVpZ2h0KCkpOwogCiAgICAgaWYgKCFwaXhlbHMpCiAgICAgICAgIHJldHVybjsK
QEAgLTEwMDcsMjUgKzk5MCwxNCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKICAgICAgICAgbGF5ZXIt
PnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldENvbXBvc2l0ZU9mZnNjcmVlbihib29sIGNvbXBvc2l0ZU9mZnNjcmVlbikKLXsK
LSAgICBpZiAobV9jb21wb3NpdGVPZmZzY3JlZW4gPT0gY29tcG9zaXRlT2Zmc2NyZWVuKQotICAg
ICAgIHJldHVybjsKLQotICAgIG1fY29tcG9zaXRlT2Zmc2NyZWVuID0gY29tcG9zaXRlT2Zmc2Ny
ZWVuOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RDQ0xheWVySW1w
bCkKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwtPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwotfQot
CiBMYXllclRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJU
ZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gbV9jb21wb3NpdGVPZmZzY3JlZW4gJiYgbV9yb290Q0NM
YXllckltcGwgPyBtX3Jvb3RDQ0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1Rl
eHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuICYm
IG1fcm9vdENDTGF5ZXJJbXBsID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+
Y29udGVudHNUZXh0dXJlKCkgOiAwOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQogewotICAgIGlmIChtX2NvbXBvc2l0ZU9m
ZnNjcmVlbikgeworICAgIGlmIChzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikgewogICAg
ICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgICAgICB1c2VSZW5kZXJTdXJmYWNlKDAp
OwpAQCAtMTA0NCw3ICsxMDE2LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZVJl
bmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogCiAgICAgbV9jdXJy
ZW50UmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2U7CiAKLSAgICBpZiAoKHJlbmRlclN1cmZh
Y2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhbV9jb21wb3NpdGVPZmZzY3JlZW4pIHx8
ICghcmVuZGVyU3VyZmFjZSAmJiBtX2NvbXBvc2l0ZU9mZnNjcmVlbikpIHsKKyAgICBpZiAoKHJl
bmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhc2V0dGluZ3MoKS5jb21w
b3NpdGVPZmZzY3JlZW4pIHx8ICghcmVuZGVyU3VyZmFjZSAmJiBzZXR0aW5ncygpLmNvbXBvc2l0
ZU9mZnNjcmVlbikpIHsKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKSk7CiAgICAg
ICAgIGlmIChyZW5kZXJTdXJmYWNlKQogICAgICAgICAgICAgc2V0RHJhd1ZpZXdwb3J0UmVjdChy
ZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLCB0cnVlKTsKQEAgLTExNDAsNyArMTExMiw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG9SZWN0KGNvbnN0IEludFJl
Y3QmIHNjaXNzb3JSZWN0KQogICAgIC8vIG9mIHRoZSBHTCBzY2lzc29yIGlzIHRoZSBib3R0b20g
b2Ygb3VyIGxheWVyLgogICAgIC8vIEJ1dCwgaWYgcmVuZGVyaW5nIHRvIG9mZnNjcmVlbiB0ZXh0
dXJlLCB3ZSByZXZlcnNlIG91ciBzZW5zZSBvZiAndXBzaWRlIGRvd24nLgogICAgIGludCBzY2lz
c29yWTsKLSAgICBpZiAobV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9PSBtX2RlZmF1bHRSZW5kZXJT
dXJmYWNlICYmICFtX2NvbXBvc2l0ZU9mZnNjcmVlbikKKyAgICBpZiAobV9jdXJyZW50UmVuZGVy
U3VyZmFjZSA9PSBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlICYmICFzZXR0aW5ncygpLmNvbXBvc2l0
ZU9mZnNjcmVlbikKICAgICAgICAgc2Npc3NvclkgPSBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlLT5j
b250ZW50UmVjdCgpLmhlaWdodCgpIC0gKHNjaXNzb3JSZWN0Lm1heFkoKSAtIG1fY3VycmVudFJl
bmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0KCkueSgpKTsKICAgICBlbHNlCiAgICAgICAgIHNjaXNz
b3JZID0gc2Npc3NvclJlY3QueSgpIC0gY29udGVudFJlY3QueSgpOwpAQCAtMTM1OSwxMCArMTMz
MSwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMo
KQogU3RyaW5nIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6bGF5ZXJUcmVlQXNUZXh0KCkgY29uc3QK
IHsKICAgICBUZXh0U3RyZWFtIHRzOwotICAgIGlmIChtX3Jvb3RMYXllci5nZXQoKSkgewotICAg
ICAgICB0cyA8PCBtX3Jvb3RMYXllci0+bGF5ZXJUcmVlQXNUZXh0KCk7CisgICAgaWYgKHJvb3RM
YXllcigpKSB7CisgICAgICAgIHRzIDw8IHJvb3RMYXllcigpLT5sYXllclRyZWVBc1RleHQoKTsK
ICAgICAgICAgdHMgPDwgIlJlbmRlclN1cmZhY2VzOlxuIjsKLSAgICAgICAgZHVtcFJlbmRlclN1
cmZhY2VzKHRzLCAxLCBtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgICAgIGR1bXBSZW5kZXJTdXJm
YWNlcyh0cywgMSwgcm9vdExheWVyKCkpOwogICAgIH0KICAgICByZXR1cm4gdHMucmVsZWFzZSgp
OwogfQpAQCAtMTQwOCw3ICsxMzgwLDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlz
Q29tcG9zaXRvckNvbnRleHRMb3N0KCkKICAgICByZXR1cm4gKG1fY29udGV4dC5nZXQoKS0+Z2V0
RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBS
ZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXJDaHJvbWl1bSog
bGF5ZXIpIGNvbnN0Cit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZh
Y2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBjb25zdCBMYXllckNocm9taXVtKiBsYXll
cikgY29uc3QKIHsKICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKICAgICAgICAgbGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+ZHVtcFN1cmZhY2UodHMsIGluZGVudCk7CkBAIC0xNDE3LDc0
ICsxMzg5LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNl
cyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgTGF5ZXIKICAgICAgICAgZHVtcFJlbmRlclN1
cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKIH0KIAotY2xh
c3MgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBs
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW1J
bXBsPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBMYXllclJlbmRl
cmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwoY2xpZW50LCBsYXllclJlbmRlcmVyKSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkKLSAgICB7
Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgICAgIGJvb2wgY29u
dGV4dExvc3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVh
ZFRhc2sodGhpcywgJkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmRyYXdMYXllcnNPbk1haW5U
aHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxldGlvbi53YWl0KCk7Ci0K
LSAgICAgICAgLy8gRklYTUU6IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBtZXNzYWdlIHVwIHRvIHRo
ZSBSZW5kZXJXaWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1aXZhbGVudHMuLi5dCi0KLSAgICAgICAg
Ly8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNvbnRleHRMb3N0KQot
ICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBub3QgaGFu
ZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bUltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi0gICAgICAgIDogQ0NMYXllclRyZWVI
b3N0SW1wbChjbGllbnQpCi0gICAgICAgICwgbV9sYXllclJlbmRlcmVyKGxheWVyUmVuZGVyZXIp
IHsgfQotCi0gICAgdm9pZCBkcmF3TGF5ZXJzT25NYWluVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50
KiBjb21wbGV0aW9uLCBib29sKiBjb250ZXh0TG9zdCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0KLSAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVy
KCkpIHsKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwotICAgICAg
ICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Ci0KLSAgICAgICAgICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgICAg
ICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7Ci0gICAgICAgIGNvbXBs
ZXRpb24tPnNpZ25hbCgpOwotICAgIH0KLQotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbV9s
YXllclJlbmRlcmVyOwotfTsKLQotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5
IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5PiBjcmVhdGUoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsUHJveHkobGF5ZXJSZW5kZXJlcikp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBj
cmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCi0gICAgewotICAgICAgICByZXR1cm4gTGF5ZXJSZW5k
ZXJlckNocm9taXVtSW1wbDo6Y3JlYXRlKHRoaXMsIHN0YXRpY19jYXN0PExheWVyUmVuZGVyZXJD
aHJvbWl1bSo+KGhvc3QoKSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBMYXllclJlbmRlcmVy
Q2hyb21pdW1JbXBsUHJveHkoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQot
ICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShsYXllclJlbmRlcmVyKSB7IH0KLX07
Ci0KLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKQotewotICAgIE93blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk+IHByb3h5ID0gTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFBy
b3h5OjpjcmVhdGUodGhpcyk7Ci0gICAgcHJveHktPnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHByb3h5
LnJlbGVhc2UoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAppbmRleCBjYWMwNzU0YjA4YTAwNGVjMGU4ZWRkMmIyNTI4ZTU2NDcyNTczODY4Li4wZTBkOTY0
YmRiOWFkMDM5NjgyMGNkNjlmNjU5NmFlOTUyMGM5ZjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaApAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJUaWxlckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiU2tCaXRtYXAuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDSGVhZHNV
cERpc3BsYXkuaCIKQEAgLTY5LDUyICs2OCw0NCBAQCBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21t
aXR0ZXI7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5n
OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsK
IAogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5
ZXJzIHVzaW5nIEdMLgotY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIENDTGF5
ZXJUcmVlSG9zdCB7CitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQq
LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJvb2wgYWNj
ZWxlcmF0ZURyYXdpbmcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+KTsKIAotICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKKyAgICB2aXJ0dWFsIH5MYXll
clJlbmRlcmVyQ2hyb21pdW0oKTsKKworICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkg
Y29uc3QgeyByZXR1cm4gbV9vd25lci0+c2V0dGluZ3MoKTsgfQorCisgICAgQ0NMYXllclRyZWVI
b3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KKyAgICBjb25zdCBDQ0xheWVyVHJlZUhv
c3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQorCisgICAgTGF5ZXJDaHJvbWl1
bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9vd25lci0+cm9vdExheWVyKCk7IH0KKyAgICBjb25z
dCBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyLT5yb290
TGF5ZXIoKTsgfQogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKICAgICBib29s
IGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFN1cHBvcnRz
TWFwU3ViOyB9CisKICNpZiBVU0UoU0tJQSkKLSAgICBHckNvbnRleHQqIHNraWFDb250ZXh0KCk7
CisgICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpIHsgcmV0dXJuIG1fc2tpYUNvbnRleHQuZ2V0
KCk7IH0KICNlbmRpZgogCiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpOwogCi0gICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRSZWN0
JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFBvaW50
JiBzY3JvbGxQb3NpdGlvbik7CisgICAgdm9pZCByb290TGF5ZXJDaGFuZ2VkKCk7CisgICAgdm9p
ZCB2aWV3cG9ydENoYW5nZWQoKTsKIAogICAgIC8vIHVwZGF0ZXMgYW5kIGRyYXdzIHRoZSBjdXJy
ZW50IGxheWVycyBvbnRvIHRoZSBiYWNrYnVmZmVyCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsK
ICAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAotICAgIC8vIFNldCBieSBXZWJWaWV3SW1wbCB3aGVu
IGFuaW1hdGlvbiBjYWxsYmFja3MgYXJlIHJ1bm5pbmcuCi0gICAgLy8gRklYTUU6IFdoZW4gd2Ug
bW92ZSBzY2hlZHVsaW5nIGludG8gdGhlIGNvbXBvc2l0b3IsIHdlIGNhbiByZW1vdmUgdGhpcyBm
bGFnLgotICAgIHZvaWQgc2V0SXNBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpIHsgbV9hbmltYXRp
bmcgPSBhbmltYXRpbmc7IH0KLSAgICBib29sIGlzQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpbmc7IH0KLQogICAgIC8vIHdhaXRzIGZvciByZW5kZXJpbmcgdG8gZmluaXNoCiAg
ICAgdm9pZCBmaW5pc2goKTsKIAogICAgIC8vIHB1dHMgYmFja2J1ZmZlciBvbnNjcmVlbgogICAg
IHZvaWQgcHJlc2VudCgpOwogCi0gICAgSW50U2l6ZSB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Quc2l6ZSgpOyB9Ci0KLSAgICB2b2lkIHNldFJvb3RM
YXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KTsKLSAgICBMYXllckNocm9taXVtKiByb290
TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQotICAgIHZvaWQgdHJhbnNmZXJS
b290TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBvdGhlcik7Ci0KLSAgICBib29sIGhhcmR3
YXJlQ29tcG9zaXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2hhcmR3YXJlQ29tcG9zaXRpbmc7IH0K
LSAgICBib29sIGFjY2VsZXJhdGVEcmF3aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRl
RHJhd2luZzsgfSAKLQotICAgIHZvaWQgc2V0Q29tcG9zaXRlT2Zmc2NyZWVuKGJvb2wpOwotICAg
IGJvb2wgaXNDb21wb3NpdGluZ09mZnNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRl
T2Zmc2NyZWVuOyB9Ci0KICAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRleHR1cmUoKTsKICAgICB2
b2lkIGRlbGV0ZUxheWVyVGV4dHVyZSh1bnNpZ25lZCk7CiAKQEAgLTE1OSwyMiArMTUwLDIyIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgcmVsZWFzZVRleHR1cmVzKCk7CiAKKyAgICB2b2lkIHNldExh
eWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSopOworCiAjaWZuZGVmIE5ERUJVRwog
ICAgIHN0YXRpYyBib29sIHNfaW5QYWludExheWVyQ29udGVudHM7CiAjZW5kaWYKICAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxpc3Q7CiAgICAgdHlwZWRl
ZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0OwogCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRl
TGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOwotCiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1h
cDxHcmFwaGljc0NvbnRleHQzRCosIGludD4gQ2hpbGRDb250ZXh0TWFwOwogCiAgICAgLy8gRklY
TUU6IFRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdEltcGwgd2hl
biB0aGF0IGNsYXNzIGV4aXN0cy4KICAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdENDTGF5
ZXJJbXBsOwogCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVu
dCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPExheWVyUGFpbnRl
ckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJvb2wgYWNjZWxlcmF0ZURyYXdpbmcpOworICAgIExh
eWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqLCBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPik7CisgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIHVwZGF0ZUxh
eWVycyhMYXllckNocm9taXVtKik7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cygp
OwpAQCAtMjAwLDMyICsxOTEsMjYgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGNvbXBh
cmVMYXllclooY29uc3QgUmVmUHRyPENDTGF5ZXJJbXBsPiYsIGNvbnN0IFJlZlB0cjxDQ0xheWVy
SW1wbD4mKTsKIAotICAgIHZvaWQgZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQg
aW5kZW50LCBMYXllckNocm9taXVtKikgY29uc3Q7CisgICAgdm9pZCBkdW1wUmVuZGVyU3VyZmFj
ZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQsIGNvbnN0IExheWVyQ2hyb21pdW0qKSBjb25zdDsK
IAogICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKTsKICAgICB2b2lkIGNsZWFudXBT
aGFyZWRPYmplY3RzKCk7CiAKLSAgICB2b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5
ZXJDaHJvbWl1bSopOwotCi0gICAgSW50UmVjdCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Q7Ci0gICAg
SW50UmVjdCBtX3ZpZXdwb3J0Q29udGVudFJlY3Q7Ci0gICAgSW50UG9pbnQgbV92aWV3cG9ydFNj
cm9sbFBvc2l0aW9uOworICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBDQ0xheWVyVHJlZUhv
c3RJbXBsCisgICAgQ0NMYXllclRyZWVIb3N0KiBtX293bmVyOwogCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
d2luZG93TWF0cml4OwogCi0gICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1fcm9vdExheWVyOwor
ICAgIC8vIEZJWE1FOiBzcGxpdCB0aGUgdGV4dHVyZSB1cGRhdGVyIGFuZCB0aWxlciBpbnRvIHR3
byBwYXJ0cy4gVGhlbiwga2VlcCB0aGUKKyAgICAvLyBpbXBsIGhlcmUgYW5kIHB1dCB0aGUgcGFp
bnRpbmctc2lkZSBvbiB0aGUgTGF5ZXJUcmVlSG9zdC4KICAgICBPd25QdHI8TGF5ZXJUZXh0dXJl
VXBkYXRlcj4gbV9yb290TGF5ZXJUZXh0dXJlVXBkYXRlcjsKICAgICBPd25QdHI8TGF5ZXJUaWxl
ckNocm9taXVtPiBtX3Jvb3RMYXllckNvbnRlbnRUaWxlcjsKIAotICAgIGJvb2wgbV9oYXJkd2Fy
ZUNvbXBvc2l0aW5nOwotICAgIGJvb2wgbV9hY2NlbGVyYXRlRHJhd2luZzsKLQogICAgIE93blB0
cjxMYXllckxpc3Q+IG1fY29tcHV0ZWRSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogCiAgICAgQ0NS
ZW5kZXJTdXJmYWNlKiBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlOwogICAgIHVuc2lnbmVkIG1fb2Zm
c2NyZWVuRnJhbWVidWZmZXJJZDsKLSAgICBib29sIG1fY29tcG9zaXRlT2Zmc2NyZWVuOwogCiAg
ICAgLy8gTWF4aW11bSB0ZXh0dXJlIGRpbWVuc2lvbnMgc3VwcG9ydGVkLgogICAgIGludCBtX21h
eFRleHR1cmVTaXplOwpAQCAtMjYxLDEwICsyNDYsNiBAQCBwcml2YXRlOgogICAgIENoaWxkQ29u
dGV4dE1hcCBtX2NoaWxkQ29udGV4dHM7CiAKICAgICBib29sIG1fY29udGV4dFN1cHBvcnRzTWFw
U3ViOwotICAgIGJvb2wgbV9jb250ZXh0U3VwcG9ydHNUZXh0dXJlRm9ybWF0QkdSQTsKLSAgICBi
b29sIG1fY29udGV4dFN1cHBvcnRzUmVhZEZvcm1hdEJHUkE7Ci0KLSAgICBib29sIG1fYW5pbWF0
aW5nOwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAppbmRleCA3NjIxN2I0YjllNmM5NWFmMmQwOGI0
MjVkM2FhY2EyN2NkZjZlZmY0Li5mMzViMGQzZGNlMWVmMmU0ZWU2YTNlNDFjYTliZTEwZWMzZjMx
ZTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEwNCw3ICsxMDQsNyBA
QCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZVVwZGF0ZWQoKQogICAgIG1fdGV4
dHVyZVVwZGF0ZWQgPSB0cnVlOwogICAgIC8vIElmIFdlYkdMIGNvbW1hbmRzIGFyZSBpc3N1ZWQg
b3V0c2lkZSBvZiBhIHRoZSBhbmltYXRpb24gY2FsbGJhY2tzLCB0aGVuIHVzZQogICAgIC8vIGNh
bGwgcmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKCkgdG8ga2VlcCB0aGUgY29udGV4
dCBmcm9tIGdldHRpbmcgdG9vIGZhciBhaGVhZC4KLSAgICBpZiAobGF5ZXJSZW5kZXJlcigpICYm
ICFsYXllclJlbmRlcmVyKCktPmlzQW5pbWF0aW5nKCkgJiYgbV9jb250ZXh0U3VwcG9ydHNSYXRl
TGltaXRpbmdFeHRlbnNpb24gJiYgIW1fcmF0ZUxpbWl0aW5nVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICBpZiAobGF5ZXJSZW5kZXJlcigpICYmIGxheWVyUmVuZGVyZXIoKS0+b3duZXIoKS0+YW5pbWF0
aW5nKCkgJiYgbV9jb250ZXh0U3VwcG9ydHNSYXRlTGltaXRpbmdFeHRlbnNpb24gJiYgIW1fcmF0
ZUxpbWl0aW5nVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV9yYXRlTGltaXRpbmdUaW1lci5z
dGFydE9uZVNob3QoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5k
ZXggN2YyY2VjNzc4NWNmMGYwZTBmMWFkM2Q0MTMzNTRjODM5MzZhMTVmYy4uODE3ZWI2ZTNmYmNh
MDNiNzM1M2MwMmMzMDFjNjJiNTg0YzI5Nzk1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlz
cGxheS5jcHAKQEAgLTUxLDggKzUxLDYgQEAgQ0NIZWFkc1VwRGlzcGxheTo6Q0NIZWFkc1VwRGlz
cGxheShMYXllclJlbmRlcmVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogbV9jdXJyZW50RnJhbWVO
dW1iZXIoMSkKICAgICAsIG1fZmlsdGVyZWRGcmFtZVRpbWUoMCkKICAgICAsIG1fbGF5ZXJSZW5k
ZXJlcihvd25lcikKLSAgICAsIG1fc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCi0gICAgLCBtX3Nob3dQ
bGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKICAgICAsIG1fdXNlTWFwU3ViRm9yVXBsb2Fkcyhvd25l
ci0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpCiB7CiAgICAgbV9iZWdpblRpbWVIaXN0b3J5SW5T
ZWNbMF0gPSBjdXJyZW50VGltZSgpOwpAQCAtNzksNiArNzcsMjEgQEAgQ0NIZWFkc1VwRGlzcGxh
eTo6fkNDSGVhZHNVcERpc3BsYXkoKQogewogfQogCit2b2lkIENDSGVhZHNVcERpc3BsYXk6Om9u
RnJhbWVCZWdpbihkb3VibGUgdGltZXN0YW1wKQoreworICAgIG1fYmVnaW5UaW1lSGlzdG9yeUlu
U2VjW21fY3VycmVudEZyYW1lTnVtYmVyICUga0JlZ2luRnJhbWVIaXN0b3J5U2l6ZV0gPSB0aW1l
c3RhbXA7Cit9CisKK3ZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25QcmVzZW50KCkKK3sKKyAgICBt
X2N1cnJlbnRGcmFtZU51bWJlciArPSAxOworfQorCitib29sIENDSGVhZHNVcERpc3BsYXk6OmVu
YWJsZWQoKSBjb25zdAoreworICAgIHJldHVybiBzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVy
VHJlZSB8fCBzZXR0aW5ncygpLnNob3dGUFNDb3VudGVyOworfQorCiB2b2lkIENDSGVhZHNVcERp
c3BsYXk6OmRyYXcoKQogewogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXll
clJlbmRlcmVyLT5jb250ZXh0KCk7CkBAIC04Nyw5ICsxMDAsOSBAQCB2b2lkIENDSGVhZHNVcERp
c3BsYXk6OmRyYXcoKQogCiAgICAgLy8gVXNlIGEgZnVsbHNjcmVlbiB0ZXh0dXJlIG9ubHkgaWYg
d2UgbmVlZCB0by4uLgogICAgIEludFNpemUgaHVkU2l6ZTsKLSAgICBpZiAobV9zaG93UGxhdGZv
cm1MYXllclRyZWUpIHsKLSAgICAgICAgaHVkU2l6ZS5zZXRXaWR0aChtaW4oMjA0OCwgbV9sYXll
clJlbmRlcmVyLT52aWV3cG9ydFNpemUoKS53aWR0aCgpKSk7Ci0gICAgICAgIGh1ZFNpemUuc2V0
SGVpZ2h0KG1pbigyMDQ4LCBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0U2l6ZSgpLmhlaWdodCgp
KSk7CisgICAgaWYgKHNldHRpbmdzKCkuc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKSB7CisgICAgICAg
IGh1ZFNpemUuc2V0V2lkdGgobWluKDIwNDgsIG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKS0+dmll
d3BvcnRWaXNpYmxlUmVjdCgpLndpZHRoKCkpKTsKKyAgICAgICAgaHVkU2l6ZS5zZXRIZWlnaHQo
bWluKDIwNDgsIG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKS0+dmlld3BvcnRWaXNpYmxlUmVjdCgp
LmhlaWdodCgpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaHVkU2l6ZS5zZXRXaWR0aCg1MTIp
OwogICAgICAgICBodWRTaXplLnNldEhlaWdodCgxMjgpOwpAQCAtMTQ5LDcgKzE2Miw3IEBAIHZv
aWQgQ0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY3R4
LCBjb25zdCBJbnRTaXplJiBodWRTCiB7CiAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9u
dENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAKLSAgICBpZiAobV9zaG93UGxhdGZvcm1MYXllclRyZWUp
IHsKKyAgICBpZiAoc2V0dGluZ3MoKS5zaG93UGxhdGZvcm1MYXllclRyZWUpIHsKICAgICAgICAg
Y3R4LT5zZXRGaWxsQ29sb3IoQ29sb3IoMCwgMCwgMCwgMTkyKSwgQ29sb3JTcGFjZURldmljZVJH
Qik7CiAgICAgICAgIGN0eC0+ZmlsbFJlY3QoRmxvYXRSZWN0KDAsIDAsIGh1ZFNpemUud2lkdGgo
KSwgaHVkU2l6ZS5oZWlnaHQoKSkpOwogICAgIH0KQEAgLTE1NywxNSArMTcwLDE1IEBAIHZvaWQg
Q0NIZWFkc1VwRGlzcGxheTo6ZHJhd0h1ZENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCogY3R4LCBj
b25zdCBJbnRTaXplJiBodWRTCiAgICAgaW50IGZwc0NvdW50ZXJIZWlnaHQgPSBtX21lZGl1bUZv
bnQtPmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKSArIDI7CiAgICAgaW50IGZwc0NvdW50ZXJU
b3AgPSAyOwogICAgIGludCBwbGF0Zm9ybUxheWVyVHJlZVRvcDsKLSAgICBpZiAobV9zaG93RlBT
Q291bnRlcikKKyAgICBpZiAoc2V0dGluZ3MoKS5zaG93RlBTQ291bnRlcikKICAgICAgICAgcGxh
dGZvcm1MYXllclRyZWVUb3AgPSBmcHNDb3VudGVyVG9wICsgZnBzQ291bnRlckhlaWdodCArIDI7
CiAgICAgZWxzZQogICAgICAgICBwbGF0Zm9ybUxheWVyVHJlZVRvcCA9IDA7CiAKLSAgICBpZiAo
bV9zaG93RlBTQ291bnRlcikKKyAgICBpZiAoc2V0dGluZ3MoKS5zaG93RlBTQ291bnRlcikKICAg
ICAgICAgZHJhd0ZQU0NvdW50ZXIoY3R4LCBmcHNDb3VudGVyVG9wLCBmcHNDb3VudGVySGVpZ2h0
KTsKIAotICAgIGlmIChtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSkKKyAgICBpZiAoc2V0dGluZ3Mo
KS5zaG93UGxhdGZvcm1MYXllclRyZWUpCiAgICAgICAgIGRyYXdQbGF0Zm9ybUxheWVyVHJlZShj
dHgsIHBsYXRmb3JtTGF5ZXJUcmVlVG9wKTsKIH0KIApAQCAtMjM4LDI2ICsyNTEsOSBAQCB2b2lk
IENDSGVhZHNVcERpc3BsYXk6OmRyYXdQbGF0Zm9ybUxheWVyVHJlZShHcmFwaGljc0NvbnRleHQq
IGN0eCwgaW50IHRvcCkKICAgICB9CiB9CiAKLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25GcmFt
ZUJlZ2luKGRvdWJsZSB0aW1lc3RhbXApCi17Ci0gICAgbV9iZWdpblRpbWVIaXN0b3J5SW5TZWNb
bV9jdXJyZW50RnJhbWVOdW1iZXIgJSBrQmVnaW5GcmFtZUhpc3RvcnlTaXplXSA9IHRpbWVzdGFt
cDsKLX0KLQotdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpvblByZXNlbnQoKQotewotICAgIG1fY3Vy
cmVudEZyYW1lTnVtYmVyICs9IDE7Ci19Ci0KLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6c2V0U2hv
d0ZQU0NvdW50ZXIoYm9vbCBzaG93KQotewotICAgIG1fc2hvd0ZQU0NvdW50ZXIgPSBzaG93Owot
ICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsKLX0KLQotdm9pZCBDQ0hlYWRz
VXBEaXNwbGF5OjpzZXRTaG93UGxhdGZvcm1MYXllclRyZWUoYm9vbCBzaG93KQorY29uc3QgQ0NT
ZXR0aW5ncyYgQ0NIZWFkc1VwRGlzcGxheTo6c2V0dGluZ3MoKSBjb25zdAogewotICAgIG1fc2hv
d1BsYXRmb3JtTGF5ZXJUcmVlID0gc2hvdzsKLSAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRz
UmVkcmF3KCk7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+c2V0dGluZ3MoKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NIZWFkc1VwRGlzcGxheS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCmluZGV4IGYwNDMzMTdmNTVmZDk3YzFiZmY2
MmFlZmZhYWIyZDAwNjIyMGI0ZGEuLjAyYzY2MGQyODk4Y2U3YWQxMzRiZjM1M2RiN2MzODk0YTli
NmNmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKQEAgLTMzLDYgKzMzLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQ0NTZXR0aW5nczsKIGNsYXNzIEdlb21l
dHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOwpAQCAtNTQsMTMgKzU1LDcgQEAgcHVibGljOgogICAgIHZvaWQgb25GcmFtZUJl
Z2luKGRvdWJsZSB0aW1lc3RhbXApOwogICAgIHZvaWQgb25QcmVzZW50KCk7CiAKLSAgICB2b2lk
IHNldFNob3dGUFNDb3VudGVyKGJvb2wgZW5hYmxlKTsKLSAgICBib29sIHNob3dGUFNDb3VudGVy
KCkgY29uc3QgeyByZXR1cm4gbV9zaG93RlBTQ291bnRlcjsgfQotCi0gICAgdm9pZCBzZXRTaG93
UGxhdGZvcm1MYXllclRyZWUoYm9vbCBlbmFibGUpOwotICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5
ZXJUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9zaG93UGxhdGZvcm1MYXllclRyZWU7IH0KLQotICAg
IGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlIHx8
IG1fc2hvd0ZQU0NvdW50ZXI7IH0KKyAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKICAgICB2b2lk
IGRyYXcoKTsKIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGE+IFByb2dyYW07CkBAIC03MCw3ICs2
NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3SHVkQ29udGVudHMoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50U2l6ZSYgaHVkU2l6ZSk7CiAgICAgdm9pZCBkcmF3RlBTQ291bnRlcihHcmFw
aGljc0NvbnRleHQqLCBpbnQgdG9wLCBpbnQgaGVpZ2h0KTsKICAgICB2b2lkIGRyYXdQbGF0Zm9y
bUxheWVyVHJlZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdG9wKTsKLQorICAgIGNvbnN0IENDU2V0
dGluZ3MmIHNldHRpbmdzKCkgY29uc3Q7CiAKICAgICBpbnQgbV9jdXJyZW50RnJhbWVOdW1iZXI7
CiAKQEAgLTgzLDkgKzc4LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50IGtCZWdp
bkZyYW1lSGlzdG9yeVNpemUgPSA2NDsKICAgICBkb3VibGUgbV9iZWdpblRpbWVIaXN0b3J5SW5T
ZWNba0JlZ2luRnJhbWVIaXN0b3J5U2l6ZV07CiAKLSAgICBib29sIG1fc2hvd0ZQU0NvdW50ZXI7
Ci0gICAgYm9vbCBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZTsKLQogICAgIE93blB0cjxGb250PiBt
X3NtYWxsRm9udDsKICAgICBPd25QdHI8Rm9udD4gbV9tZWRpdW1Gb250OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBkNzc5NWM3MTA0MzljOWIyMTljZDBmODRkOTIyNGZl
M2RjNTdiMjJmLi4xYmZlNmRmZjMwYWY5ZWFjNDkzZWIxZjYzMzM5OTdlMmQ0Y2NhYTUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTI2LDI2ICsyNiw0NyBAQAogCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CisjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oIgogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVy
VHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQpCitQYXNzUmVmUHRyPENDTGF5
ZXJUcmVlSG9zdD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQoreworICAgIFJlZlB0cjxDQ0xh
eWVyVHJlZUhvc3Q+IGxheWVyVHJlZUhvc3QgPSBhZG9wdFJlZihuZXcgQ0NMYXllclRyZWVIb3N0
KGNsaWVudCwgc2V0dGluZ3MpKTsKKyAgICBpZiAoIWxheWVyVHJlZUhvc3QtPmluaXRpYWxpemUo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGxheWVyVHJlZUhvc3Q7Cit9CisKK0ND
TGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xp
ZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKICAgICA6IG1fY2xpZW50KGNsaWVudCkK
ICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKKyAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiB7CiB9
CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojppbml0KCkKK2Jvb2wgQ0NMYXllclRyZWVIb3N0Ojpp
bml0aWFsaXplKCkKIHsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBt
X2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9sYXllclJlbmRlcmVyID0gY3JlYXRl
UmVuZGVyZXIoKTsKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIG1fcHJveHkgPSBjcmVh
dGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisgICAgbV9wcm94eSA9IENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6Y3JlYXRlKHRoaXMpOwogICAgIEFTU0VSVChtX3Byb3h5LT5pc1N0YXJ0ZWQo
KSk7CiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKICNlbmRpZgorCisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIENDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgp
CkBAIC02OCwyNyArODksMTg0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0
ZSgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSkKIHsKKyAgICBtX2FuaW1hdGluZyA9IHRydWU7CiAgICAgbV9jbGllbnQtPmFu
aW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7
CiB9CiAKIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhv
c3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKQogewotICAgIHJldHVybiBDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZSgpOworICAgIC8vIEZJWE1FOiBvbmx5IGNhbGxlZCBp
biB0aHJlYWRpbmcgY2FzZSwgZml4IHdoZW4gcG9zc2libGUuCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0Ojpj
cmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQp
Cit7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIobV9sYXllclJl
bmRlcmVyKTsKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKGNsaWVudCwg
cmVuZGVyZXIpOworfQorCitHcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0Ojpjb250
ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAg
IC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCB0aGlzLgorI2Vsc2UKKyAgICBkb0NvbXBvc2l0
ZSgpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxzLCBy
ZWN0KTsKKyNlbmRpZgorfQorCitQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBDQ0xh
eWVyVHJlZUhvc3Q6OmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKQoreworICAgIHJldHVybiBtX2Ns
aWVudC0+Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKK3sKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisgICAgLy8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMuCisjZWxzZQorICAgIG1fbGF5
ZXJSZW5kZXJlci0+ZmluaXNoKCk7CisjZW5kaWYKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAg
ICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPmludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGRpcnR5UmVjdCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQorICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3IiwgdGhp
cywgMCk7CiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyNlbHNlCisg
ICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOwogI2lmIFVTRShUSFJFQURFRF9D
T01QT1NJVElORykKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1Jl
ZHJhdyIsIHRoaXMsIDApOwogICAgIG1fcHJveHktPnNldE5lZWRzUmVkcmF3KCk7CisjZWxzZQor
ICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBsYXll
cikKK3sKKyAgICBtX3Jvb3RMYXllciA9IGxheWVyOworICAgIGlmIChtX3Jvb3RMYXllcikKKyAg
ICAgICAgbV9yb290TGF5ZXItPnNldExheWVyUmVuZGVyZXIobV9sYXllclJlbmRlcmVyLmdldCgp
KTsKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJv
b3RMYXllckNoYW5nZWQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0
KGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwg
Y29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQoreworICAgIGJvb2wgdmlzaWJsZVJlY3RD
aGFuZ2VkID0gbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUoKSAhPSB2aXNpYmxlUmVjdC5zaXpl
KCk7CisKKyAgICBtX3ZpZXdwb3J0VmlzaWJsZVJlY3QgPSB2aXNpYmxlUmVjdDsKKyAgICBtX3Zp
ZXdwb3J0Q29udGVudFJlY3QgPSBjb250ZW50UmVjdDsKKyAgICBtX3ZpZXdwb3J0U2Nyb2xsUG9z
aXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKKworICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQgJiYg
bV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdl
ZCgpOworCisgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworI2lmICFVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCisgICAgaWYgKCF2aXNpYmxlKQorICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnJlbGVhc2VUZXh0dXJlcygpOwogI2VuZGlmCiB9CiAKKworUGFzc1JlZlB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlUmVuZGVyZXIoKQoreworICAgIC8v
IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0dXJuIDAsIGluIHRo
YXQgY2FzZSBmYWxsIGJhY2sgdG8gc29mdHdhcmUuCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0ID0gbV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQWN0dWFsbHkg
Y3JlYXRlIHRoZSByZW5kZXJlci4KKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBs
YXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4
dCk7CisKKyAgICAvLyBJZiBjcmVhdGlvbiBmYWlsZWQsIGFuZCB3ZSBoYWQgYXNrZWQgZm9yIGFj
Y2VsZXJhdGVkIHBhaW50aW5nLCBkaXNhYmxlIGFjY2VsZXJhdGVkIHBhaW50aW5nCisgICAgLy8g
YW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIgYWdhaW4uCisgICAgaWYgKG1fc2V0dGluZ3Mu
YWNjZWxlcmF0ZVBhaW50aW5nICYmICFsYXllclJlbmRlcmVyKSB7CisgICAgICAgIG1fc2V0dGlu
Z3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgIGxheWVyUmVuZGVyZXIgPSBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbGF5ZXJSZW5kZXJlcjsKK30KKworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZG9Db21wb3NpdGUoKQoreworICAgIEFTU0VSVCht
X2xheWVyUmVuZGVyZXIpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Cisg
ICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0Ojpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdDo6Y29tcG9zaXRlIiwgdGhpcywgMCk7CisKKyAgICBpZiAobV9yZWNyZWF0aW5nR3Jh
cGhpY3NDb250ZXh0KSB7CisgICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJlcXVl
c3QgYSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0IHN1Y2NlZWRlZAorICAgICAgICAvLyBpbiBj
cmVhdGluZyBhIG5ldyBjb250ZXh0LgorICAgICAgICByZWFsbG9jYXRlUmVuZGVyZXIoKTsKKyAg
ICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBEbyBub3QgY29tcG9zaXRlIGlmIHRoZSBjb21wb3NpdG9yIGNv
bnRleHQgaXMgYWxyZWFkeSBsb3N0LgorICAgIGlmICghbV9sYXllclJlbmRlcmVyLT5pc0NvbXBv
c2l0b3JDb250ZXh0TG9zdCgpKSB7CisgICAgICAgIGRvQ29tcG9zaXRlKCk7CisKKyAgICAgICAg
Ly8gUHV0IHJlc3VsdCBvbnNjcmVlbi4KKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50
KCk7CisgICAgfQorCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4
dExvc3QoKSkgeworICAgICAgICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4dCByaWdo
dCBoZXJlIHdpbGwgbm90IHdvcmsgaWYgR1BVIHByb2Nlc3MKKyAgICAgICAgLy8gZGllZC4gVGhp
cyBpcyBiZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUK
KyAgICAgICAgLy8gY2FsbGVkIGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBs
b29wLCByZXZlcnRpbmcgb3VyCisgICAgICAgIC8vIHJlY292ZXJ5IGF0dGVtcHRzIGhlcmUuIElu
c3RlYWQsIHdlIGRldGFjaCB0aGUgcm9vdCBsYXllciBmcm9tIHRoZQorICAgICAgICAvLyByZW5k
ZXJlciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVy
YXRpb24KKyAgICAgICAgLy8gYW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4KKyAgICAg
ICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKKyAgICAgICAgc2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpyZWFs
bG9jYXRlUmVuZGVyZXIoKQoreworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxh
eWVyUmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcigpOworICAgIGlmICghbGF5ZXJSZW5kZXJlcikg
eworICAgICAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoZmFsc2UpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVhdHRhY2ggdGhlIHJvb3QgbGF5ZXIu
IENoaWxkIGxheWVycyB3aWxsIGdldCByZWF0dGFjaGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgdXBk
YXRlTGF5ZXJzUmVjdXJzaXZlLgorICAgIGxheWVyUmVuZGVyZXItPnNldExheWVyUmVuZGVyZXJS
ZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVy
UmVuZGVyZXI7CisKKyAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQodHJ1
ZSk7Cit9CisjZW5kaWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCAyODg5
NTBlZmUxM2E3OTYwZDYwM2Y3ZWIzZjdlMjAxZTY3OTQ2ZWE3Li5hNTc3ODQwNTgxZjM0MzhlMTFk
YWMzMGEwNTI1N2NlOTExOTJmNGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAt
MjUsOCArMjUsMTAgQEAKICNpZm5kZWYgQ0NMYXllclRyZWVIb3N0X2gKICNkZWZpbmUgQ0NMYXll
clRyZWVIb3N0X2gKIAorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkuaCIKKwogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzYsMzkgKzM4LDExMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3Mg
Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xh
c3MgTGF5ZXJDaHJvbWl1bTsKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3MgTGF5
ZXJSZW5kZXJlckNocm9taXVtOwogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewogcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSkgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpID0gMDsKLQorICAgIHZpcnR1YWwgUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY3JlYXRlUm9vdExheWVyUGFpbnRlcigpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSA9
IDA7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgc2No
ZWR1bGVDb21wb3NpdGUoKSA9IDA7CisjZW5kaWYKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5D
Q0xheWVyVHJlZUhvc3RDbGllbnQoKSB7IH0KIH07CiAKK3N0cnVjdCBDQ1NldHRpbmdzIHsKKyAg
ICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKKyAgICBib29sIGNvbXBvc2l0ZU9mZnNjcmVlbjsK
KyAgICBib29sIHNob3dGUFNDb3VudGVyOworICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVl
OworfTsKKwogY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXll
clRyZWVIb3N0PiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0KENDTGF5
ZXJUcmVlSG9zdENsaWVudCopOwotICAgIHZvaWQgaW5pdCgpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENDTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCosIGNvbnN0
IENDU2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3QoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAgICAg
dmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBs
ZXRlKCk7CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwogICAgIHZp
cnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0ZUxheWVyVHJl
ZUhvc3RDb21taXR0ZXIoKTsKIAorICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpbmc7IH0KKyAgICB2b2lkIHNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykgeyBt
X2FuaW1hdGluZyA9IGFuaW1hdGluZzsgfSAvLyBDYW4gYmUgcmVtb3ZlZCB3aGVuIG5vbi10aHJl
YWRlZCBzY2hlZHVsaW5nIG1vdmVzIGluc2lkZS4KKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KCk7CisKKyAgICB2b2lkIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywg
Y29uc3QgSW50UmVjdCYpOworCisgICAgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4g
Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpOworCisgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmco
KTsKKwogICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7
IH0KIAorICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0KTsKKwogICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKICAgICB2b2lk
IHNldE5lZWRzUmVkcmF3KCk7CiAKKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExh
eWVyQ2hyb21pdW0+KTsKKyAgICBMYXllckNocm9taXVtKiByb290TGF5ZXIoKSB7IHJldHVybiBt
X3Jvb3RMYXllci5nZXQoKTsgfQorICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisKKyAgICBjb25zdCBDQ1NldHRp
bmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KKworICAgIHZvaWQg
c2V0Vmlld3BvcnQoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworCisgICAgY29uc3Qg
SW50UmVjdCYgdmlld3BvcnRDb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRD
b250ZW50UmVjdDsgfQorICAgIGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFNjcm9sbFBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uOyB9CisgICAgY29uc3Qg
SW50UmVjdCYgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRW
aXNpYmxlUmVjdDsgfQorCisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworCisgICAgLy8gVGVt
cG9yYXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGguCisjaWYgIVVT
RShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7
CisjZW5kaWYKKworCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eT4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpID0gMDsKKyAg
ICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3Qg
Q0NTZXR0aW5ncyYpOwogCiBwcml2YXRlOgorICAgIGJvb2wgaW5pdGlhbGl6ZSgpOworCisgICAg
UGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZVJlbmRlcmVyKCk7CisKKyAg
ICAvLyBUZW1wb3JhcnkgaG9tZSBmb3IgdGhlIG5vbi10aHJlYWRlZCByZW5kZXJpbmcgcGF0aC4K
KyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgZG9Db21wb3NpdGUoKTsK
KyAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOworCisgICAgYm9vbCBtX3JlY3JlYXRpbmdH
cmFwaGljc0NvbnRleHQ7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXll
clJlbmRlcmVyOworI2VuZGlmCisKKyAgICBib29sIG1fYW5pbWF0aW5nOworCiAgICAgQ0NMYXll
clRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKKwogICAgIGludCBtX2ZyYW1lTnVtYmVyOworCiAg
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gbV9wcm94eTsKKworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKKyAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7
CisKKyAgICBJbnRSZWN0IG1fdmlld3BvcnRWaXNpYmxlUmVjdDsKKyAgICBJbnRSZWN0IG1fdmll
d3BvcnRDb250ZW50UmVjdDsKKyAgICBJbnRQb2ludCBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb247
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGEz
YWEyYmEyMTBkYmRkZDE2YjljYTFhZDEyZTYxMTU1NThiMmFiMzcuLjRlMmQxYjg0M2MxODMyY2Zh
ZmExNDM1NDg2MmNiZmExNTM4NjY5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCkBAIC0yNiwxOCArMjYsMjkgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2lu
Y2x1ZGUgImNjL0NDTWFpblRocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2su
aCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRp
bWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCkKK1Bhc3NP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW0+IHJlbmRlcmVyKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllclRy
ZWVIb3N0SW1wbChjbGllbnQsIHJlbmRlcmVyKSk7Cit9CisKK0NDTGF5ZXJUcmVlSG9zdEltcGw6
OkNDTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBQ
YXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIpCiAgICAgOiBtX3NvdXJj
ZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigwKQogICAgICwgbV9jbGllbnQo
Y2xpZW50KQogICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9sYXllclJlbmRl
cmVyKHJlbmRlcmVyKQogICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQogewogfQpAQCAtNzAs
NyArODEsMTYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKIAogICAg
IHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNB
bmRQcmVzZW50IiwgdGhpcywgMCk7Ci0gICAgICAgIGRyYXdMYXllcnNBbmRQcmVzZW50KCk7Cisg
ICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgICAgIGJvb2wgY29udGV4
dExvc3Q7CisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRh
c2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQsIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KCZjb250ZXh0TG9zdCkpKTsKKyAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICAgICAg
Ly8gRklYTUU6IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBtZXNzYWdlIHVwIHRvIHRoZSBSZW5kZXJX
aWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1aXZhbGVudHMuLi5dCisKKyAgICAgICAgLy8gRklYTUU6
IGhhbmRsZSBjb250ZXh0IGxvc3QKKyAgICAgICAgaWYgKGNvbnRleHRMb3N0KQorICAgICAgICAg
ICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBub3QgaGFuZGxlIGNvbnRl
eHQgbG9zdCB5ZXQuIik7CiAgICAgfQogCiAgICAgKyttX2ZyYW1lTnVtYmVyOwpAQCAtOTYsNCAr
MTE2LDE5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQogICAg
IG1fY2xpZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7CiB9CiAKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKworICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXllcigp
KSB7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgICAgICAqY29udGV4dExvc3Qg
PSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CisgICAgfSBlbHNlCisgICAgICAgICpjb250
ZXh0TG9zdCA9IGZhbHNlOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggMDgwNWM3YTRlYjU4MjVjYzkxOTQ0
MTBmMWYxMTI1NTE5ZGY1ZGE1Mi4uYjYxZjdiMmZiZGQxZjJlOTNkNGRiNWUwZWIyMzVlZDJjNmQx
YzkyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMzEsNiArMzEs
OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENDQ29tcGxldGlvbkV2ZW50Owor
Y2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworCiAvLyBQcm92aWRlcyBzY2hlZHVsaW5nIGlu
ZnJhc3RydWN0dXJlIGZvciBhIENDTGF5ZXJUcmVlSG9zdEltcGwKIGNsYXNzIENDTGF5ZXJUcmVl
SG9zdEltcGxDbGllbnQgIHsKIHB1YmxpYzoKQEAgLTQ1LDE0ICs0OCwxMyBAQCBwcm90ZWN0ZWQ6
CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q0xheWVyVHJlZUhvc3RJbXBsKTsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhv
c3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCos
IFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPik7CiAgICAgdmlydHVhbCB+Q0NMYXll
clRyZWVIb3N0SW1wbCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAgICAg
dmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAKICAgICB2b2lkIGRyYXdMYXllcnMoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xheWVyc0FuZFByZXNlbnQoKSA9IDA7CiAKICAgICBpbnQg
ZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVtYmVyOyB9CiAKQEAgLTYzLDEy
ICs2NSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTb3VyY2VGcmFtZU51bWJlcihpbnQgZnJh
bWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOyB9CiAKIHByb3Rl
Y3RlZDoKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOworICAgIHZvaWQg
ZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGNvbnRleHRM
b3N0KTsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKICAgICBpbnQgbV9mcmFtZU51bWJl
cjsKIAogcHJpdmF0ZToKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsK
ICAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBtX2xheWVyUmVuZGVyZXI7CiAgICAgYm9vbCBtX3JlZHJhd1BlbmRpbmc7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcAppbmRleCA2OGEy
NTFhZTQxM2Y5M2RhNTUzYmJmYThkOGQ2OTRlMDVmZWFiODg3Li5lMjU1YTk0ZTNjZTE4OGUyMjZm
YzBhMjNjM2RhZjQ5NzM3OWM5YWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eS5jcHAKQEAgLTIwMSw3ICsyMDEsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0
aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJ
bXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChpc0NDVGhyZWFkKCkpOwotICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsKHRoaXMpOwogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGNhOGY3NTIzMmU5YjA0NTMwYzEwY2ZkODU0YTEwNjQ5YWFiNTVhOGQu
LjFiYWUyNTBjOTEyNjM4NjEyZTZmN2YyNjgwMDYzNjhmZjFkYmM4YTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDgtMDUgIE5hdCBEdWNhICA8bmR1
Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBXZWJWaWV3SW1wbCBw
b2ludCBhdCBDQ0xheWVyVHJlZUhvc3QgYW5kIHJlbGF0ZWQgc2VwYXJhdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3OTEKKworICAgICAgICBX
aXRoIHRoaXMgcGF0Y2gsIExheWVyUmVuZGVyZXJDaHJvbWl1bSBiZWNvbWVzIGluY3JlYXNpbmds
eSByZXNwb25zaWJsZQorICAgICAgICBmb3IgcmVuZGVyaW5nLCB3aGlsZSByZW5kZXIgc2NoZWR1
bGluZyBhbmQgdHJlZSBob3N0aW5nIG1vdmVzIGludG8gdGhlCisgICAgICAgIENDTGF5ZXJUcmVl
SG9zdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpXZWJW
aWV3SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpyZXNpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdFBsYXRmb3JtTGF5ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNjcm9sbFJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpnZXRDb21wb3NpdG9yU2V0dGluZ3MpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZVJvb3RMYXllclBhaW50ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjp1cGRhdGVMYXllclRyZWVWaWV3cG9ydCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpzZXRWaXNpYmlsaXR5U3RhdGUpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5oOgor
CiAyMDExLTA4LTA5ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gcmVtb3ZlIHRlbXBvcmFyeSAjZGVmaW5lIGZyb20gV2ViVVJMUmVx
dWVzdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXgg
MGNlYmQxMzI5ZjZkNmIwNTJlMGQzNWM0ZWQzMDI1MThmYTE4ZjU5YS4uNTYwZTNjYmI2MzMxNzc5
YzQ5ZmFlMTg3NDExOTZkZTZlZjdjODM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcApAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVkZSAiS2V5Ym9h
cmRFdmVudC5oIgorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJMYXllclBh
aW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRl
ICJOb2RlUmVuZGVyU3R5bGUuaCIKQEAgLTMzOSw3ICszNDAsNyBAQCBXZWJWaWV3SW1wbDo6V2Vi
Vmlld0ltcGwoV2ViVmlld0NsaWVudCogY2xpZW50KQogICAgICwgbV90YWJzVG9MaW5rcyhmYWxz
ZSkKICAgICAsIG1fZHJhZ1Njcm9sbFRpbWVyKGFkb3B0UHRyKG5ldyBEcmFnU2Nyb2xsVGltZXIp
KQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAsIG1fbGF5ZXJSZW5kZXJl
cigwKQorICAgICwgbV9sYXllclRyZWVIb3N0KDApCiAgICAgLCBtX3Jvb3RHcmFwaGljc0xheWVy
KDApCiAgICAgLCBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShmYWxzZSkKICAgICAs
IG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkKGZhbHNlKQpAQCAtMTAxNiw3ICsxMDE3LDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6cmVzaXplKGNvbnN0IFdlYlNpemUmIG5ld1NpemUpCiAgICAgaWYg
KG1fY2xpZW50KSB7CiAgICAgICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
KSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgICAgIHVwZGF0
ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOworICAgICAgICAgICAgdXBkYXRlTGF5ZXJUcmVlVmll
d3BvcnQoKTsKICNlbmRpZgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgV2ViUmVjdCBk
YW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwpAQCAtMTA0Mywx
MSArMTA0NCwxNSBAQCB2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSkKICAgICBpZiAod2ViZnJhbWUpIHsKICAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gd2Vi
ZnJhbWUtPmZyYW1lVmlldygpOwogICAgICAgICBpZiAodmlldykgewotICAgICAgICAgICAgaWYg
KG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldElz
QW5pbWF0aW5nKHRydWUpOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgICAg
ICAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+c2V0QW5pbWF0aW5nKHRydWUpOworI2VuZGlmCiAgICAgICAgICAgICB2aWV3LT5zZXJ2aWNl
U2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoZnJhbWVCZWdp
blRpbWUpKTsKLSAgICAgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgICAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5zZXRJc0FuaW1hdGluZyhmYWxzZSk7CisjaWYgIVVTRShUSFJF
QURFRF9DT01QT1NJVElORykKKyAgICAgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAg
ICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRBbmltYXRpbmcoZmFsc2UpOworI2VuZGlm
CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKQEAgLTEwOTcsNyArMTEwMiw3IEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OmRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyogY2FudmFzLCBjb25z
dCBJbnRSZWN0JiByZWN0CiAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpKSk7CiAgICAgUmVmUHRyPEJ5dGVBcnJheT4gcGl4
ZWxBcnJheShCeXRlQXJyYXk6OmNyZWF0ZShyZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICog
NCkpOwogICAgIGlmIChpbWFnZUJ1ZmZlci5nZXQoKSAmJiBwaXhlbEFycmF5LmdldCgpKSB7Ci0g
ICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxBcnJheS0+
ZGF0YSgpLCBpbnZlcnRSZWN0KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21wb3NpdGVB
bmRSZWFkYmFjayhwaXhlbEFycmF5LT5kYXRhKCksIGludmVydFJlY3QpOwogICAgICAgICBpbWFn
ZUJ1ZmZlci0+cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShwaXhlbEFycmF5LmdldCgpLCByZWN0
LnNpemUoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZWN0LnNpemUoKSksIEludFBvaW50KCkpOwog
ICAgICAgICBnYy5zYXZlKCk7CiAgICAgICAgIGdjLnRyYW5zbGF0ZShJbnRTaXplKDAsIGJpdG1h
cEhlaWdodCkpOwpAQCAtMTExNCwxOCArMTExOSwxMiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpwYWlu
dChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVjdCYgcmVjdCkKIHsKICAgICBpZiAoaXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCi0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgICAgICAvLyBGSVhN
RTogZG8gcmVhZGJhY2sgaW4gdGhyZWFkZWQgY29tcG9zaXRpbmcgbW9kZSByYXRoZXIgdGhhbiBy
ZXR1cm5pbmcgbm90aGluZwotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgZG9Db21w
b3NpdGUoKTsKLQogICAgICAgICAvLyBJZiBhIGNhbnZhcyB3YXMgcGFzc2VkIGluLCB3ZSB1c2Ug
aXQgdG8gZ3JhYiBhIGNvcHkgb2YgdGhlCiAgICAgICAgIC8vIGZyZXNobHktcmVuZGVyZWQgcGl4
ZWxzLgogICAgICAgICBpZiAoY2FudmFzKSB7CiAgICAgICAgICAgICAvLyBDbGlwIHJlY3QgdG8g
dGhlIGNvbmZpbmVzIG9mIHRoZSByb290TGF5ZXJUZXh0dXJlLgogICAgICAgICAgICAgSW50UmVj
dCByZXNpemVSZWN0KHJlY3QpOwotICAgICAgICAgICAgcmVzaXplUmVjdC5pbnRlcnNlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0U2l6ZSgpKSk7CisgICAg
ICAgICAgICByZXNpemVSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX2xh
eWVyVHJlZUhvc3QtPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS5zaXplKCkpKTsKICAgICAgICAgICAg
IGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKGNhbnZhcywgcmVzaXplUmVjdCk7CiAgICAgICAgIH0K
ICNlbmRpZgpAQCAtMTE1MSw0NiArMTE1MCwyMCBAQCB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNo
YW5nZWQoKQogICAgIHZpZXctPmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAotdm9p
ZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCi17
Ci0gICAgYW5pbWF0ZShmcmFtZUJlZ2luVGltZSk7Ci0gICAgbGF5b3V0KCk7Ci19Ci0KIHZvaWQg
V2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKIHsKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIG1fbGF5
ZXJSZW5kZXJlci0+c2V0TmVlZHNSZWRyYXcoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5l
ZWRzUmVkcmF3KCk7CiAjZWxzZQotICAgIFRSQUNFX0VWRU5UKCJXZWJWaWV3SW1wbDo6Y29tcG9z
aXRlIiwgdGhpcywgMCk7Ci0KLSAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7
Ci0gICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJlcXVlc3QgYSByZXBhaW50IHdo
ZXRoZXIgb3Igbm90IGl0IHN1Y2NlZWRlZAotICAgICAgICAvLyBpbiBjcmVhdGluZyBhIG5ldyBj
b250ZXh0LgotICAgICAgICByZWFsbG9jYXRlUmVuZGVyZXIoKTsKLSAgICAgICAgbV9yZWNyZWF0
aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7CisgICAgQVNTRVJUKGlzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSgpKTsKKyAgICBpZiAoIXBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIERvIG5vdCBjb21wb3NpdGUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBp
cyBhbHJlYWR5IGxvc3QuCi0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9zaXRvckNv
bnRleHRMb3N0KCkpIHsKLSAgICAgICAgZG9Db21wb3NpdGUoKTsKIAotICAgICAgICAvLyBQdXQg
cmVzdWx0IG9uc2NyZWVuLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKLSAg
ICB9CisgICAgaWYgKG1fcGFnZU92ZXJsYXkpCisgICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0
ZSgpOwogCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3Qo
KSkgewotICAgICAgICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4dCByaWdodCBoZXJl
IHdpbGwgbm90IHdvcmsgaWYgR1BVIHByb2Nlc3MKLSAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBi
ZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKLSAgICAg
ICAgLy8gY2FsbGVkIGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29wLCBy
ZXZlcnRpbmcgb3VyCi0gICAgICAgIC8vIHJlY292ZXJ5IGF0dGVtcHRzIGhlcmUuIEluc3RlYWQs
IHdlIGRldGFjaCB0aGUgcm9vdCBsYXllciBmcm9tIHRoZQotICAgICAgICAvLyByZW5kZXJlciwg
cmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24K
LSAgICAgICAgLy8gYW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4KLSAgICAgICAgbV9y
ZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgc2V0Um9vdExheWVyTmVl
ZHNEaXNwbGF5KCk7Ci0gICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRlKGZpbmlz
aCk7CiAjZW5kaWYKICNlbmRpZgogfQpAQCAtMjQ2Niw4ICsyNDM5LDggQEAgdm9pZCBXZWJWaWV3
SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXIp
CiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290UGxhdGZvcm1MYXllcihXZWJDb3JlOjpQbGF0Zm9y
bUxheWVyKiBsYXllcikKIHsKICAgICBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
bGF5ZXIpOwotICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJl
ci0+c2V0Um9vdExheWVyKGxheWVyKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihsYXllcik7CiAKICAgICBJbnRSZWN0IGRh
bWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7CiAgICAgaWYgKG1f
aXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKQpAQCAtMjQ3OSwzMSArMjQ1MiwzMCBAQCB2
b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290UGxhdGZvcm1MYXllcihXZWJDb3JlOjpQbGF0Zm9ybUxh
eWVyKiBsYXllcikKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSgp
CiB7CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChtX2xheWVyUmVuZGVy
ZXIpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsK
KyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAjZWxzZQogICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBv
c2l0ZSgpOwogI2VuZGlmCiB9CiAKLQogdm9pZCBXZWJWaWV3SW1wbDo6c2Nyb2xsUm9vdExheWVy
UmVjdChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qp
CiB7Ci0gICAgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7CisgICAgdXBkYXRlTGF5ZXJU
cmVlVmlld3BvcnQoKTsKICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIAogdm9p
ZCBXZWJWaWV3SW1wbDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICBBU1NFUlQobV9sYXllclRy
ZWVIb3N0KTsKIAogICAgIGlmICghcGFnZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBwYWdlKCktPm1haW5GcmFtZSgpLT52aWV3KCk7CiAgICAgSW50UmVjdCBk
aXJ0eVJlY3QgPSB2aWV3LT53aW5kb3dUb0NvbnRlbnRzKHJlY3QpOwotICAgIHVwZGF0ZUxheWVy
UmVuZGVyZXJWaWV3cG9ydCgpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+aW52YWxpZGF0ZVJvb3RM
YXllclJlY3QoZGlydHlSZWN0KTsKKyAgICB1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpOworICAg
IG1fbGF5ZXJUcmVlSG9zdC0+aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGlydHlSZWN0KTsKICAg
ICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKIH0KIApAQCAtMjU1MCwyMCArMjUyMiwyNSBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9v
bCBhY3RpdmUpCiAgICAgICAgIC8vIFdlIG5lZWQgdG8gZmluaXNoIGFsbCBHTCByZW5kZXJpbmcg
YmVmb3JlIHNlbmRpbmcKICAgICAgICAgLy8gZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKGZhbHNlKSB0byBwcmV2ZW50CiAgICAgICAgIC8vIGZsaWNrZXJpbmcgd2hlbiBjb21wb3Np
dGluZyB0dXJucyBvZmYuCi0gICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOworICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0
KQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKICAg
ICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyhmYWxzZSk7
Ci0gICAgfSBlbHNlIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKKyAgICB9IGVsc2UgaWYgKG1fbGF5
ZXJUcmVlSG9zdCkgewogICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9
IHRydWU7Ci0gICAgICAgIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOworICAgICAgICB1
cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpOwogCiAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgVFJB
Q0VfRVZFTlQoIldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
dHJ1ZSkiLCB0aGlzLCAwKTsKIAotICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpjcmVh
dGUodGhpcyksIG1fcGFnZS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgp
KTsKLSAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgewotICAgICAgICAgICAgdXBkYXRlTGF5
ZXJSZW5kZXJlclNldHRpbmdzKCk7CisgICAgICAgIFdlYkNvcmU6OkNDU2V0dGluZ3MgY2NTZXR0
aW5nczsKKyAgICAgICAgY2NTZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBwYWdlKCktPnNl
dHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKTsKKyAgICAgICAgY2NTZXR0aW5n
cy5jb21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFi
bGVkKCk7CisgICAgICAgIGNjU2V0dGluZ3Muc2hvd0ZQU0NvdW50ZXIgPSBzZXR0aW5ncygpLT5z
aG93RlBTQ291bnRlcigpOworICAgICAgICBjY1NldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVyVHJl
ZSA9IHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpOworCisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdCA9IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKHRoaXMsIGNjU2V0dGluZ3MpOwor
ICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlk
QWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAgICAgICAgICAgbV9pc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgbV9jb21wb3Np
dG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxzZTsKQEAgLTI1NzksMjQgKzI1NTYsNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUp
CiAgICAgICAgIHBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2V0Q2xpcHNSZXBhaW50cygh
bV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOwogfQogCi12b2lkIFdlYlZpZXdJbXBs
Ojpkb0NvbXBvc2l0ZSgpCi17Ci0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgaWYg
KCFtX2xheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChpc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSk7Ci0gICAgaWYgKCFwYWdlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX3BhZ2VPdmVybGF5KQotICAgICAgICBtX3BhZ2VPdmVybGF5
LT51cGRhdGUoKTsKLQotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci0gICAg
bV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7Ci19CisjZW5kaWYKIAogUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gV2ViVmlld0ltcGw6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0
M0QoKQogewpAQCAtMjYwOSw0NiArMjU2OSwzOCBAQCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBXZWJWaWV3SW1wbDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCiAgICAgcmV0
dXJuIGNvbnRleHQ7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnJlYWxsb2NhdGVSZW5kZXJlcigp
CitQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBXZWJWaWV3SW1wbDo6Y3JlYXRlUm9v
dExheWVyUGFpbnRlcigpCiB7Ci0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdo
dCBmYWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNlIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
Y3JlYXRlIHdpbGwgYWxzbyByZXR1cm4gMC4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywg
V2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMpLCBtX3BhZ2UtPnNldHRpbmdz
KCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKSk7CisgICAgcmV0dXJuIFdlYlZpZXdJbXBs
Q29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKTsKK30KIAotICAgIC8vIFJlYXR0YWNoIHRoZSBy
b290IGxheWVyLiAgQ2hpbGQgbGF5ZXJzIHdpbGwgZ2V0IHJlYXR0YWNoZWQgYXMgYSBzaWRlIGVm
ZmVjdCBvZiB1cGRhdGVMYXllcnNSZWN1cnNpdmUuCi0gICAgaWYgKGxheWVyUmVuZGVyZXIpIHsK
LSAgICAgICAgbV9sYXllclJlbmRlcmVyLT50cmFuc2ZlclJvb3RMYXllcihsYXllclJlbmRlcmVy
LmdldCgpKTsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKLSAgICAg
ICAgdXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7Cit2b2lkIFdlYlZpZXdJbXBsOjphbmlt
YXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBhbmltYXRlKGZyYW1l
QmVnaW5UaW1lKTsKKyAgICBsYXlvdXQoKTsKK30KIAotICAgICAgICAvLyBGSVhNRTogSW4gTWFj
T1MgbmV3Q29udGV4dC0+cmVzaGFwZSBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIHRvCi0gICAg
ICAgIC8vIGFsbG9jYXRlIElPU3VyZmFjZXMuIEFsbCBjYWxscyB0byBjcmVhdGUgYSBjb250ZXh0
IGZvbGxvd2VkIGJ5Ci0gICAgICAgIC8vIHJlc2hhcGUgc2hvdWxkIHJlYWxseSBiZSBleHRyYWN0
ZWQgaW50byBvbmUgZnVuY3Rpb247IGl0IGlzIG5vdAotICAgICAgICAvLyBpbW1lZGlhdGVseSBv
YnZpb3VzIHRoYXQgR3JhcGhpY3NDb250ZXh0M0Qgb2JqZWN0IHdpbGwgbm90Ci0gICAgICAgIC8v
IGZ1bmN0aW9uIHByb3Blcmx5IHVudGlsIGl0cyByZXNoYXBlIG1ldGhvZCBpcyBjYWxsZWQuCi0g
ICAgICAgIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+cmVzaGFwZShtYXgoMSwgbV9zaXplLndp
ZHRoKSwgbWF4KDEsIG1fc2l6ZS5oZWlnaHQpKTsKLSAgICAgICAgc2V0Um9vdFBsYXRmb3JtTGF5
ZXIobV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKSk7Cit2b2lkIFdlYlZpZXdJbXBsOjpkaWRS
ZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCit7CisgICAgc2V0Um9vdFBsYXRm
b3JtTGF5ZXIoc3VjY2VzcyA/IG1fbGF5ZXJUcmVlSG9zdC0+cm9vdExheWVyKCkgOiAwKTsKIAot
ICAgICAgICAvLyBGb3JjZXMgVmlld0hvc3RNc2dfRGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nIHRvIGJlIHNlbnQgc28KLSAgICAgICAgLy8gdGhhdCB0aGUgYnJvd3NlciBwcm9jZXNz
IGNhbiByZWFjcXVpcmUgc3VyZmFjZXMuCi0gICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7Ci0gICAgICAgIGlmIChtX3BhZ2VPdmVybGF5KQot
ICAgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHNldFJvb3RQbGF0Zm9ybUxheWVyKDApOworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAvLyBG
b3JjZXMgVmlld0hvc3RNc2dfRGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nIHRvIGJl
IHNlbnQgc28KKyAgICAgIC8vIHRoYXQgdGhlIGJyb3dzZXIgcHJvY2VzcyBjYW4gcmVhY3F1aXJl
IHN1cmZhY2VzLgorICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZyh0cnVlKTsKKyAgICAgIGlmIChtX3BhZ2VPdmVybGF5KQorICAgICAgICAgIG1fcGFnZU92
ZXJsYXktPnVwZGF0ZSgpOworICAgIH0KIH0KLSNlbmRpZgogCi12b2lkIFdlYlZpZXdJbXBsOjp1
cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKQorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCit2b2lkIFdlYlZpZXdJbXBsOjpzY2hlZHVsZUNvbXBvc2l0ZSgpCiB7Ci0gICAgQVNTRVJU
KG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5zZXRDb21wb3NpdGVPZmZz
Y3JlZW4oc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpKTsKLQotICAgIEND
SGVhZHNVcERpc3BsYXkqIGh1ZCA9IG1fbGF5ZXJSZW5kZXJlci0+aGVhZHNVcERpc3BsYXkoKTsK
LSAgICBodWQtPnNldFNob3dGUFNDb3VudGVyKHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCkp
OwotICAgIGh1ZC0+c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKHNldHRpbmdzKCktPnNob3dQbGF0
Zm9ybUxheWVyVHJlZSgpKTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKIH0K
KyNlbmRpZgogCi12b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVMYXllclJlbmRlcmVyVmlld3BvcnQo
KQordm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJUcmVlVmlld3BvcnQoKQogewogICAgIGlm
ICghcGFnZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNjU4LDE1ICsyNjEwLDE1IEBAIHZvaWQg
V2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpCiAgICAgSW50UmVjdCB2
aXNpYmxlUmVjdCA9IHZpZXctPnZpc2libGVDb250ZW50UmVjdCh0cnVlKTsKICAgICBJbnRQb2lu
dCBzY3JvbGwodmlldy0+c2Nyb2xsWCgpLCB2aWV3LT5zY3JvbGxZKCkpOwogCi0gICAgbV9sYXll
clJlbmRlcmVyLT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdCwgY29udGVudFJlY3QsIHNjcm9sbCk7
CisgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9ydCh2aXNpYmxlUmVjdCwgY29udGVudFJl
Y3QsIHNjcm9sbCk7CiB9CiAKIFdlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6Z3Jh
cGhpY3NDb250ZXh0M0QoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBpZiAobV9wYWdlLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgp
ICYmIGFsbG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBpZiAobV9sYXll
clJlbmRlcmVyKSB7Ci0gICAgICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRCogd2ViQ29udGV4
dCA9IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQz
RChtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKSk7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhv
c3QpIHsKKyAgICAgICAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1fbGF5
ZXJUcmVlSG9zdC0+Y29udGV4dCgpKTsKICAgICAgICAgICAgIGlmICh3ZWJDb250ZXh0ICYmICF3
ZWJDb250ZXh0LT5pc0NvbnRleHRMb3N0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYkNv
bnRleHQ7CiAgICAgICAgIH0KQEAgLTI2OTgsOCArMjY1MCw4IEBAIHZvaWQgV2ViVmlld0ltcGw6
OnNldFZpc2liaWxpdHlTdGF0ZShXZWJQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0
ZSwKICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChp
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSAmJiB2aXNpYmlsaXR5U3RhdGUgPT0gV2Vi
UGFnZVZpc2liaWxpdHlTdGF0ZUhpZGRlbikKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxl
YXNlVGV4dHVyZXMoKTsKKyAgICBpZiAoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkp
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0VmlzaWJsZSh2aXNpYmlsaXR5U3RhdGUgPT0g
V2ViUGFnZVZpc2liaWxpdHlTdGF0ZVZpc2libGUpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGFlMzUyNWY2ZGY5OTBiZTJiOWIxYWM0
ZTU4ZGQ4MTdhMThkYzc5YjQuLjhkMTEzZTZkMGVjODkzM2JjMTg3ZDM1ZDY5YmYzOWE0YTE0ODc5
MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtNDYsOSAr
NDYsOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JD
bGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCIKICNp
bmNsdWRlICJQYWdlT3ZlcmxheS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgog
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBA
IC0yMTAsNiArMjEwLDExIEBAIHB1YmxpYzoKICAgICAvLyBDQ0xheWVyVHJlZUhvc3RDbGllbnQK
ICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUp
OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRD4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJD
b3JlOjpMYXllclBhaW50ZXJDaHJvbWl1bT4gY3JlYXRlUm9vdExheWVyUGFpbnRlcigpOworICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOwor
I2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRlKCk7CisjZW5kaWYKIAogICAgIC8vIFdlYlZpZXdJbXBsCiAKQEAgLTQzNCwxMSAr
NDM5LDEyIEBAIHByaXZhdGU6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCk7CisjaWYgIVVT
RShUSFJFQURFRF9DT01QT1NJVElORykKICAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CisjZW5kaWYK
ICAgICB2b2lkIGRvUGl4ZWxSZWFkYmFja1RvQ2FudmFzKFdlYkNhbnZhcyosIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKICAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOwotICAgIHZvaWQg
dXBkYXRlTGF5ZXJSZW5kZXJlclNldHRpbmdzKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclJlbmRl
cmVyVmlld3BvcnQoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAjZW5k
aWYKIAogICAgIFdlYlZpZXdDbGllbnQqIG1fY2xpZW50OwpAQCAtNTU1LDcgKzU2MSw3IEBAIHBy
aXZhdGU6CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgV2ViQ29yZTo6
SW50UmVjdCBtX3Jvb3RMYXllclNjcm9sbERhbWFnZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OwogICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CiAgICAgYm9vbCBtX2lzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZTsKICAgICBib29sIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103689</attachid>
            <date>2011-08-11 15:44:38 -0700</date>
            <delta_ts>2011-08-11 16:26:38 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-65791-20110811154437.patch</filename>
            <type>text/plain</type>
            <size>74182</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI4NDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMGQxMDVlOGY1M2Q0NmVm
NTYyNGY2ZDZkODJjM2QxMzdkOTkwNGQ1Li5hYjg0ZTBlNDdlNjY0YjAyY2IwN2NlMGEzZGY1YmQ3
NDQyNTY3YjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMDgtMDUgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTWFrZSBXZWJW
aWV3SW1wbCBwb2ludCBhdCBDQ0xheWVyVHJlZUhvc3QgYW5kIHJlbGF0ZWQgc2VwYXJhdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU3OTEKKwor
ICAgICAgICBXaXRoIHRoaXMgcGF0Y2gsIExheWVyUmVuZGVyZXJDaHJvbWl1bSBiZWNvbWVzIGlu
Y3JlYXNpbmdseSByZXNwb25zaWJsZQorICAgICAgICBmb3IgcmVuZGVyaW5nLCB3aGlsZSByZW5k
ZXIgc2NoZWR1bGluZyBhbmQgdHJlZSBob3N0aW5nIG1vdmVzIGludG8gdGhlCisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0
dXJlVXBkYXRlcklmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJlbGVhc2VUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Jvb3RMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cm9vdExheWVyQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFt
ZWJ1ZmZlclBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06
OmdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFNjaXNzb3JUb1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpsYXllclRyZWVBc1RleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkdW1wUmVuZGVyU3VyZmFj
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXR0
aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Om93bmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cm9vdExheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06OnNldFRleHR1cmVVcGRhdGVk
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NIZWFkc1VwRGlzcGxheTo6ZW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlUm9vdExheWVyUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmZpbmlzaEFsbFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6c2V0VmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OmRvQ29tcG9zaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9z
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cmVhbGxvY2F0ZVJlbmRl
cmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0QW5pbWF0aW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cm9vdExheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0Ojp2aWV3cG9ydENvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6dmlld3BvcnRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnZpZXdwb3J0VmlzaWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzT25NYWluVGhyZWFkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
aW5pdEltcGxPbkNDVGhyZWFkKToKKwogMjAxMS0wOC0xMSAgWGFuIExvcGV6ICA8eGxvcGV6QGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQWRkIG1pc3NpbmcgZmlsZXMgdG8gR05VTWFrZWZp
bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAppbmRleCA0YWNjMDM2NWFjMDEx
MjY2YzBjMmUxNzY2ZmZlY2MxM2ZmNmRiNzg5Li5iMDY3OTcxMWIyYjRlMWIyNGY0ZGMzNGQ5MzMz
OTdlOWZkZTEwYTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0x
MjMsNyArMTIzLDcgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVw
ZGF0ZXJJZk5lZWRlZCgpCiAgICAgaWYgKG1fdGV4dHVyZVVwZGF0ZXIpCiAgICAgICAgIHJldHVy
bjsKICNpZiBVU0UoU0tJQSkKLSAgICBpZiAobGF5ZXJSZW5kZXJlcigpLT5hY2NlbGVyYXRlRHJh
d2luZygpKSB7CisgICAgaWYgKGxheWVyUmVuZGVyZXIoKS0+c2V0dGluZ3MoKS5hY2NlbGVyYXRl
UGFpbnRpbmcpIHsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0
ZXJTa1BpY3R1cmU6OmNyZWF0ZShsYXllclJlbmRlcmVyQ29udGV4dCgpLCBDb250ZW50TGF5ZXJQ
YWludGVyOjpjcmVhdGUobV9vd25lciksIGxheWVyUmVuZGVyZXIoKS0+c2tpYUNvbnRleHQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNGU0MDFjY2U4
OGFiOWFkMjIxYmQ0N2Q3ZGZlMTljNzNkNWIxZjQwZS4uY2EyYjY0MTczNzAwNmI3ZmVjMjIyYzU1
MTVhY2YwMjAyYTgwZDUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTQ5LDYgKzE0OSw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIERlcml2ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhv
ZCBpZiB0aGV5IG5lZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UKICAgICAvLyBpbiB0aGUgTGF5ZXJS
ZW5kZXJlckNocm9taXVtLgorICAgIC8vIEZJWE1FLCByZXBsYWNlIHdpdGggQ0NMYXllclRyZWVI
b3N0LgogICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJv
bWl1bSopOwogCiAgICAgdm9pZCBzZXRPd25lcihHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KSB7IG1fb3duZXIgPSBvd25lcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKaW5kZXggYmZjMjliNzhkMWQzZjU3MDg3YzBjNzNkMzA2OTIxNDhmMTI4ZDViOC4uMDFjNThj
ZGYwZTEyM2RiM2ZiYzMxNzYxYmY2OGUzNGRjMDQ3MWZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiVHJhY2VFdmVu
dC5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJJbXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUg
ImNjL0NDTWFpblRocmVhZFRhc2suaCIKICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJFeHRlbnNp
b25zM0QuaCIKQEAgLTQyMCw2NCArNDE5LDgwIEBAIHN0YXRpYyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBzY3JlZW5NYXRyaXgoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAg
cmV0dXJuIHNjcmVlbjsKIH0KIAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50
LCBQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPiBjb250ZW50UGFpbnQsIGJvb2wgYWNj
ZWxlcmF0ZURyYXdpbmcpCisjaWYgVVNFKFNLSUEpCitib29sIGNvbnRleHRTdXBwb3J0c0FjY2Vs
ZXJhdGVkUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0
Q29udGV4dDNEKCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKKyAgICBX
ZWJDb3JlOjpFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25z
KCk7CisgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRf
QkdSQTg4ODgiKSkKKyAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3Jh
IikpCisgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9yZWFkX2Zvcm1h
dF9iZ3JhIik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJl
bmRlcmVyQ2hyb21pdW0oY2xpZW50LCBjb250ZXh0LCBjb250ZW50UGFpbnQsIGFjY2VsZXJhdGVE
cmF3aW5nKSkpOwotICAgIGxheWVyUmVuZGVyZXItPmluaXQoKTsKLSAgICBpZiAoIWxheWVyUmVu
ZGVyZXItPmhhcmR3YXJlQ29tcG9zaXRpbmcoKSkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRp
ZgorCitQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBvd25lciwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCkKK3sKKyNpZiBVU0UoU0tJQSkKKyAgICBpZiAob3duZXItPnNldHRp
bmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nICYmICFjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBh
aW50aW5nKGNvbnRleHQuZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIFJl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3IExh
eWVyUmVuZGVyZXJDaHJvbWl1bShvd25lciwgY29udGV4dCkpKTsKKyAgICBpZiAoIWxheWVyUmVu
ZGVyZXItPmluaXRpYWxpemUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gbGF5
ZXJSZW5kZXJlci5yZWxlYXNlKCk7CiB9CiAKLUxheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IGNvbnRlbnRQYWludCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWNjZWxlcmF0
ZURyYXdpbmcpCi0gICAgOiBDQ0xheWVyVHJlZUhvc3QoY2xpZW50KQotICAgICwgbV92aWV3cG9y
dFNjcm9sbFBvc2l0aW9uKEludFBvaW50KC0xLCAtMSkpCi0gICAgLCBtX3Jvb3RMYXllcigwKQot
ICAgICwgbV9hY2NlbGVyYXRlRHJhd2luZyhmYWxzZSkKK0xheWVyUmVuZGVyZXJDaHJvbWl1bTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0KQorICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY3VycmVudFJl
bmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQotICAgICwg
bV9jb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAg
ICAsIG1fY29udGV4dFN1cHBvcnRzVGV4dHVyZUZvcm1hdEJHUkEoZmFsc2UpCi0gICAgLCBtX2Nv
bnRleHRTdXBwb3J0c1JlYWRGb3JtYXRCR1JBKGZhbHNlKQotICAgICwgbV9hbmltYXRpbmcoZmFs
c2UpCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiB7Cit9CisKK2Jvb2wgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKK3sKICAgICBXZWJDb3JlOjpFeHRlbnNpb25z
M0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBtX2NvbnRl
eHRTdXBwb3J0c01hcFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9tYXBf
c3ViIik7CiAgICAgaWYgKG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKQogICAgICAgICBleHRlbnNp
b25zLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7Ci0gICAgbV9jb250ZXh0
U3VwcG9ydHNUZXh0dXJlRm9ybWF0QkdSQSA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRf
dGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKLSAgICBpZiAobV9jb250ZXh0U3VwcG9ydHNUZXh0
dXJlRm9ybWF0QkdSQSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhU
X3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgbV9jb250ZXh0U3VwcG9ydHNSZWFkRm9y
bWF0QkdSQSA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIp
OwotICAgIGlmIChtX2NvbnRleHRTdXBwb3J0c1JlYWRGb3JtYXRCR1JBKQotICAgICAgICBleHRl
bnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOwogCi0jaWYg
VVNFKFNLSUEpCi0gICAgbV9hY2NlbGVyYXRlRHJhd2luZyA9IGFjY2VsZXJhdGVEcmF3aW5nICYm
IHNraWFDb250ZXh0KCk7Ci0jZW5kaWYKLSAgICBtX2hhcmR3YXJlQ29tcG9zaXRpbmcgPSBpbml0
aWFsaXplU2hhcmVkT2JqZWN0cygpOworICAgIGlmICghaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgVVNFKFNLSUEpCi0gICAgaWYgKG1fYWNj
ZWxlcmF0ZURyYXdpbmcpCi0gICAgICAgIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIgPSBMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBjb250ZW50
UGFpbnQsIHNraWFDb250ZXh0KCkpOworICAgIGlmIChzZXR0aW5ncygpLmFjY2VsZXJhdGVQYWlu
dGluZykgeworICAgICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAg
ICBtX3NraWFDb250ZXh0ID0gYWRvcHRQdHIoR3JDb250ZXh0OjpDcmVhdGVHTFNoYWRlckNvbnRl
eHQoKSk7CisgICAgICAgIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9sZCBp
biB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eFRleHR1cmVDYWNoZUNvdW50ID0gNTEyOworICAgICAgICAvLyBMaW1pdCB0aGUgYnl0ZXMgYWxs
b2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAg
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0
ICogMTAyNDsKKyAgICAgICAgbV9za2lhQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1h
eFRleHR1cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgICAgIG1fcm9v
dExheWVyVGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVh
dGUobV9jb250ZXh0LmdldCgpLCBtX293bmVyLT5jcmVhdGVSb290TGF5ZXJQYWludGVyKCksIHNr
aWFDb250ZXh0KCkpOworICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgbV9yb290TGF5
ZXJUZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShtX2Nv
bnRleHQuZ2V0KCksIGNvbnRlbnRQYWludCwgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIpOworICAg
ICAgICBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1h
cDo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgbV9vd25lci0+Y3JlYXRlUm9vdExheWVyUGFpbnRl
cigpLCBtX2NvbnRleHRTdXBwb3J0c01hcFN1Yik7CiAKICAgICBtX3Jvb3RMYXllckNvbnRlbnRU
aWxlciA9IExheWVyVGlsZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIEludFNpemUoMjU2LCAyNTYp
LCBMYXllclRpbGVyQ2hyb21pdW06Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICBBU1NFUlQobV9yb290
TGF5ZXJDb250ZW50VGlsZXIpOwogCiAgICAgbV9oZWFkc1VwRGlzcGxheSA9IENDSGVhZHNVcERp
c3BsYXk6OmNyZWF0ZSh0aGlzKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmlld3BvcnQgYW5k
IGNvbnRleHQgZ2V0cyBpbml0aWFsaXplZCwgZXZlbiBpZiBpdCBpcyB0byB6ZXJvLgorICAgIHZp
ZXdwb3J0Q2hhbmdlZCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiBMYXllclJlbmRlcmVyQ2hy
b21pdW06On5MYXllclJlbmRlcmVyQ2hyb21pdW0oKQpAQCAtNDkxLDIyICs1MDYsNiBAQCBHcmFw
aGljc0NvbnRleHQzRCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0KCkKICAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi0jaWYgVVNFKFNLSUEpCi1HckNvbnRleHQqIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2tpYUNvbnRleHQoKQotewotICAgIGlmICghbV9za2lhQ29udGV4
dCAmJiBtX2NvbnRleHRTdXBwb3J0c1RleHR1cmVGb3JtYXRCR1JBICYmIG1fY29udGV4dFN1cHBv
cnRzUmVhZEZvcm1hdEJHUkEpIHsKLSAgICAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICAgICAgbV9za2lhQ29udGV4dCA9IGFkb3B0UHRyKEdyQ29udGV4dDo6Q3JlYXRl
R0xTaGFkZXJDb250ZXh0KCkpOwotICAgICAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9mIHRleHR1
cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KLSAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhUZXh0dXJlQ2FjaGVDb3VudCA9IDUxMjsKLSAgICAgICAgLy8gTGltaXQg
dGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4dHVy
ZSBjYWNoZS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRl
cyA9IDUwICogMTAyNCAqIDEwMjQ7Ci0gICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRleHR1cmVD
YWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMpOwot
ICAgIH0KLSAgICByZXR1cm4gbV9za2lhQ29udGV4dC5nZXQoKTsKLX0KLSNlbmRpZgotCiB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVidWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKQog
ewogICAgIHVuc2lnbmVkIGxvbmcgZXJyb3IgPSBjb250ZXh0LT5nZXRFcnJvcigpOwpAQCAtNTE0
LDE2ICs1MTMsMTEgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVnR0xDYWxsKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogICAgICAgICBMT0dfRVJST1Io
IkdMIGNvbW1hbmQgZmFpbGVkOiBGaWxlOiAlc1xuXHRMaW5lICVkXG5cdGNvbW1hbmQ6ICVzLCBl
cnJvciAleFxuIiwgZmlsZSwgbGluZSwgY29tbWFuZCwgc3RhdGljX2Nhc3Q8aW50PihlcnJvcikp
OwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW52YWxpZGF0ZVJvb3RMYXllclJl
Y3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIG1fcm9vdExheWVyQ29udGVudFRp
bGVyLT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOwotfQotCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cmVsZWFzZVRleHR1cmVzKCkKIHsKICAgICAvLyBSZWR1Y2VzIHRleHR1cmUgbWVt
b3J5IHVzYWdlIHRvIHRleHR1cmVNZW1vcnlMb3dMaW1pdEJ5dGVzIGJ5IGRlbGV0aW5nIG5vbiBy
b290IGxheWVyCiAgICAgLy8gdGV4dHVyZXMuCi0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXIt
PnByb3RlY3RUaWxlVGV4dHVyZXMobV92aWV3cG9ydFZpc2libGVSZWN0KTsKKyAgICBtX3Jvb3RM
YXllckNvbnRlbnRUaWxlci0+cHJvdGVjdFRpbGVUZXh0dXJlcyhtX293bmVyLT52aWV3cG9ydFZp
c2libGVSZWN0KCkpOwogICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5
VG9MaW1pdCh0ZXh0dXJlTWVtb3J5TG93TGltaXRCeXRlcyk7CiAgICAgbV9jb250ZW50c1RleHR1
cmVNYW5hZ2VyLT51bnByb3RlY3RBbGxUZXh0dXJlcygpOwogICAgIC8vIEV2aWN0IGFsbCBSZW5k
ZXJTdXJmYWNlIHRleHR1cmVzLgpAQCAtNTM0LDc5ICs1MjgsNzQgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJlbGVhc2VUZXh0dXJlcygpCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlUm9vdExheWVyQ29udGVudHMoKQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzIiwgdGhpcywgMCk7Ci0gICAg
bV9yb290TGF5ZXJDb250ZW50VGlsZXItPnByZXBhcmVUb1VwZGF0ZShtX3ZpZXdwb3J0VmlzaWJs
ZVJlY3QsIG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXIuZ2V0KCkpOworICAgIG1fcm9vdExheWVy
Q29udGVudFRpbGVyLT5wcmVwYXJlVG9VcGRhdGUobV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVj
dCgpLCBtX3Jvb3RMYXllclRleHR1cmVVcGRhdGVyLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdSb290TGF5ZXIoKQogewogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHNjcm9sbDsKLSAgICBzY3JvbGwudHJhbnNsYXRlKC1tX3ZpZXdwb3J0VmlzaWJsZVJlY3Qu
eCgpLCAtbV92aWV3cG9ydFZpc2libGVSZWN0LnkoKSk7CisgICAgc2Nyb2xsLnRyYW5zbGF0ZSgt
bV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLngoKSwgLW1fb3duZXItPnZpZXdwb3J0Vmlz
aWJsZVJlY3QoKS55KCkpOwogCi0gICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmRyYXcobV92
aWV3cG9ydFZpc2libGVSZWN0LCBzY3JvbGwsIDEuMGYpOworICAgIG1fcm9vdExheWVyQ29udGVu
dFRpbGVyLT5kcmF3KG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKSwgc2Nyb2xsLCAxLjBm
KTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpZXdwb3J0KGNvbnN0IElu
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50
UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmludmFs
aWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKLSAgICBib29s
IHZpc2libGVSZWN0Q2hhbmdlZCA9IG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkgIT0gdmlz
aWJsZVJlY3Quc2l6ZSgpOwotCi0gICAgbV92aWV3cG9ydFZpc2libGVSZWN0ID0gdmlzaWJsZVJl
Y3Q7Ci0gICAgbV92aWV3cG9ydENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7Ci0gICAgbV92aWV3
cG9ydFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247Ci0KLSAgICBpZiAodmlzaWJsZVJl
Y3RDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPnJlc2hhcGUoc3RkOjptYXgoMSwgdmlzaWJsZVJlY3Qud2lkdGgoKSksIHN0ZDo6bWF4KDEs
IHZpc2libGVSZWN0LmhlaWdodCgpKSk7Ci0gICAgICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IHJl
bmRlciBzdXJmYWNlIHRvIGZvcmNlIGFuIHVwZGF0ZSBvZiB0aGUgdmlld3BvcnQgYW5kCi0gICAg
ICAgIC8vIHByb2plY3Rpb24gbWF0cml4IG5leHQgdGltZSB1c2VSZW5kZXJTdXJmYWNlIGlzIGNh
bGxlZC4KLSAgICAgICAgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSA9IDA7Ci0gICAgICAgIG1fcm9v
dExheWVyQ29udGVudFRpbGVyLT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKLSAgICB9Ci0gICAg
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBtX3Jvb3RMYXllckNvbnRlbnRUaWxlci0+
aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnJvb3RMYXllckNoYW5nZWQoKQoreworICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5p
bnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKK30KKwordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnZpZXdwb3J0Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgbV9jb250
ZXh0LT5yZXNoYXBlKHN0ZDo6bWF4KDEsIG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS53
aWR0aCgpKSwgc3RkOjptYXgoMSwgbV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLmhlaWdo
dCgpKSk7CisgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPmludmFsaWRhdGVFbnRpcmVMYXll
cigpOworCisgICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgcmVuZGVyIHN1cmZhY2UgdG8gZm9yY2Ug
YW4gdXBkYXRlIG9mIHRoZSB2aWV3cG9ydCBhbmQKKyAgICAvLyBwcm9qZWN0aW9uIG1hdHJpeCBu
ZXh0IHRpbWUgdXNlUmVuZGVyU3VyZmFjZSBpcyBjYWxsZWQuCisgICAgbV9jdXJyZW50UmVuZGVy
U3VyZmFjZSA9IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXll
cnMoKQogewotICAgIGlmIChtX3ZpZXdwb3J0VmlzaWJsZVJlY3QuaXNFbXB0eSgpKQorICAgIGlm
IChtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBGSVhNRTogdXNlIHRoZSBmcmFtZSBiZWdpbiB0aW1lIGZyb20gdGhlIG92
ZXJhbGwgY29tcG9zaXRvciBzY2hlZHVsZXIuCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyBjdXJyZW50
bHkgaW5hY2Nlc3NpYmxlIGJlY2F1c2UgaXQgaXMgdXAgaW4gQ2hyb21pdW0ncwogICAgIC8vIFJl
bmRlcldpZGdldC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRp
bWUoKSk7Ci0gICAgQVNTRVJUKG1faGFyZHdhcmVDb21wb3NpdGluZyk7CiAKLSAgICBpZiAoIW1f
cm9vdExheWVyKQorICAgIGlmICghcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7CiAKICAgICAvLyBSZWNoZWNrIHRoYXQgd2Ugc3Rp
bGwgaGF2ZSBhIHJvb3QgbGF5ZXIuIFRoaXMgbWF5IGJlY29tZSBudWxsIGlmCiAgICAgLy8gY29t
cG9zaXRpbmcgZ2V0cyB0dXJuZWQgb2ZmIGR1cmluZyBhIHBhaW50IG9wZXJhdGlvbi4KLSAgICBp
ZiAoIW1fcm9vdExheWVyKQorICAgIGlmICghcm9vdExheWVyKCkpIHsKKyAgICAgICAgbV9yb290
Q0NMYXllckltcGwuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIHVwZGF0
ZUxheWVycyhtX3Jvb3RMYXllci5nZXQoKSk7CisgICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXllcigp
KTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogewotICAg
IEFTU0VSVChtX2hhcmR3YXJlQ29tcG9zaXRpbmcpOwogICAgIC8vIEJlZm9yZSBkcmF3TGF5ZXJz
OgotICAgIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRo
ZSBtdWx0aXRocmVhZGVkIGNvbXBvc2l0b3IgY2FzZSB3aWxsIG5vdCB3b3JrIGFzIGxvbmcgYXMK
LSAgICAgICAgLy8gY29weVRleEltYWdlMkQgcmVzb2x2ZXMgdG8gdGhlIHBhcmVudCB0ZXh0dXJl
LCBiZWNhdXNlIHRoZSBtYWluCi0gICAgICAgIC8vIHRocmVhZCBjYW4gZXhlY3V0ZSBXZWJHTCBj
YWxscyBvbiB0aGUgY2hpbGQgY29udGV4dCBhdCBhbnkgdGltZSwKLSAgICAgICAgLy8gcG90ZW50
aWFsbHkgY2xvYmJlcmluZyB0aGUgcGFyZW50IHRleHR1cmUgdGhhdCBpcyBiZWluZyByZW5kZXJl
cmVkCi0gICAgICAgIC8vIGJ5IHRoZSBjb21wb3NpdG9yIHRocmVhZC4KLSAgICAgICAgQ2hpbGRD
b250ZXh0TWFwOjppdGVyYXRvciBpID0gbV9jaGlsZENvbnRleHRzLmJlZ2luKCk7Ci0gICAgICAg
IGZvciAoOyBpICE9IG1fY2hpbGRDb250ZXh0cy5lbmQoKTsgKytpKSB7Ci0gICAgICAgICAgICBp
LT5maXJzdC0+Zmx1c2goKTsKLSAgICAgICAgfQorICAgIENoaWxkQ29udGV4dE1hcDo6aXRlcmF0
b3IgaSA9IG1fY2hpbGRDb250ZXh0cy5iZWdpbigpOworICAgIGZvciAoOyBpICE9IG1fY2hpbGRD
b250ZXh0cy5lbmQoKTsgKytpKSB7CisgICAgICAgIGktPmZpcnN0LT5mbHVzaCgpOwogICAgIH0K
IAogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3lu
Y2hyb25pemVUcmVlcyIsIHRoaXMsIDApOwotICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRy
ZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9yb290TGF5ZXIuZ2V0KCksIG1fcm9v
dENDTGF5ZXJJbXBsLmdldCgpKTsKKyAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVlU3lu
Y2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLCBtX3Jvb3RDQ0xheWVySW1w
bC5nZXQoKSk7CiAgICAgfQogCiAKQEAgLTYyMSw3ICs2MTAsNyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgZWxzZQogICAgICAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKIAotICAgIGlmIChpc0Nv
bXBvc2l0aW5nT2Zmc2NyZWVuKCkpCisgICAgaWYgKHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2Ny
ZWVuKQogICAgICAgICBjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpOwogfQogCkBAIC02
MzEsMTEgKzYyMCwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJz
KExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKIAogICAgIGlmICghcm9vdExheWVyLT5yZW5kZXJT
dXJmYWNlKCkpCiAgICAgICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAg
IHJvb3RMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBv
aW50KDAsIDApLCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Quc2l6ZSgpKSk7CisgICAgcm9vdExheWVy
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQoMCwgMCks
IG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS5zaXplKCkpKTsKIAotICAgIEludFJlY3Qg
cm9vdFNjaXNzb3JSZWN0KG1fdmlld3BvcnRWaXNpYmxlUmVjdCk7CisgICAgSW50UmVjdCByb290
U2Npc3NvclJlY3QobV9vd25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpKTsKICAgICAvLyBUaGUg
c2Npc3NvclJlY3Qgc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzY3JvbGwgb2Zmc2V0LgotICAgIHJv
b3RTY2lzc29yUmVjdC5tb3ZlKC1tX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb24ueCgpLCAtbV92aWV3
cG9ydFNjcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgcm9vdFNjaXNzb3JSZWN0Lm1vdmUoLW1fb3du
ZXItPnZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS54KCksIC1tX293bmVyLT52aWV3cG9ydFNjcm9s
bFBvc2l0aW9uKCkueSgpKTsKICAgICByb290TGF5ZXItPnNldFNjaXNzb3JSZWN0KHJvb3RTY2lz
c29yUmVjdCk7CiAKICAgICBMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKQEAgLTc2
MSw3ICs3NTAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXllckNvbnRl
bnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheQogCiB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIHsKLSAgICBpZiAobV92aWV3cG9ydFZp
c2libGVSZWN0LmlzRW1wdHkoKSB8fCAhbV9yb290TGF5ZXIpCisgICAgaWYgKG1fb3duZXItPnZp
ZXdwb3J0VmlzaWJsZVJlY3QoKS5pc0VtcHR5KCkgfHwgIXJvb3RMYXllcigpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzIiwgdGhpcywgMCk7CkBAIC03NzAsMTEgKzc1OSwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKIAogICAgIGlmICghcm9vdERyYXdMYXllci0+
cmVuZGVyU3VyZmFjZSgpKQogICAgICAgICByb290RHJhd0xheWVyLT5jcmVhdGVSZW5kZXJTdXJm
YWNlKCk7Ci0gICAgcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVj
dChJbnRSZWN0KEludFBvaW50KDAsIDApLCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Quc2l6ZSgpKSk7
CisgICAgcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRS
ZWN0KEludFBvaW50KDAsIDApLCBtX293bmVyLT52aWV3cG9ydFZpc2libGVSZWN0KCkuc2l6ZSgp
KSk7CiAKLSAgICBJbnRSZWN0IHJvb3RTY2lzc29yUmVjdChtX3ZpZXdwb3J0VmlzaWJsZVJlY3Qp
OworICAgIEludFJlY3Qgcm9vdFNjaXNzb3JSZWN0KG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJl
Y3QoKSk7CiAgICAgLy8gVGhlIHNjaXNzb3JSZWN0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgc2Ny
b2xsIG9mZnNldC4KLSAgICByb290U2Npc3NvclJlY3QubW92ZSgtbV92aWV3cG9ydFNjcm9sbFBv
c2l0aW9uLngoKSwgLW1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHJvb3RTY2lz
c29yUmVjdC5tb3ZlKC1tX293bmVyLT52aWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkueCgpLCAtbV9v
d25lci0+dmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnkoKSk7CiAgICAgcm9vdERyYXdMYXllci0+
c2V0U2Npc3NvclJlY3Qocm9vdFNjaXNzb3JSZWN0KTsKIAogICAgIENDTGF5ZXJMaXN0IHJlbmRl
clN1cmZhY2VMYXllckxpc3Q7CkBAIC03OTAsOCArNzc5LDggQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgfQogCiAgICAgLy8gVGhlIEdMIHZp
ZXdwb3J0IGNvdmVycyB0aGUgZW50aXJlIHZpc2libGUgYXJlYSwgaW5jbHVkaW5nIHRoZSBzY3Jv
bGxiYXJzLgotICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwg
MCwgbV92aWV3cG9ydFZpc2libGVSZWN0LndpZHRoKCksIG1fdmlld3BvcnRWaXNpYmxlUmVjdC5o
ZWlnaHQoKSkpOwotICAgIG1fd2luZG93TWF0cml4ID0gc2NyZWVuTWF0cml4KDAsIDAsIG1fdmll
d3BvcnRWaXNpYmxlUmVjdC53aWR0aCgpLCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3QuaGVpZ2h0KCkp
OworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV9v
d25lci0+dmlld3BvcnRWaXNpYmxlUmVjdCgpLndpZHRoKCksIG1fb3duZXItPnZpZXdwb3J0Vmlz
aWJsZVJlY3QoKS5oZWlnaHQoKSkpOworICAgIG1fd2luZG93TWF0cml4ID0gc2NyZWVuTWF0cml4
KDAsIDAsIG1fb3duZXItPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS53aWR0aCgpLCBtX293bmVyLT52
aWV3cG9ydFZpc2libGVSZWN0KCkuaGVpZ2h0KCkpOwogCiAgICAgLy8gQmluZCB0aGUgY29tbW9u
IHZlcnRleCBhdHRyaWJ1dGVzIHVzZWQgZm9yIGRyYXdpbmcgYWxsIHRoZSBsYXllcnMuCiAgICAg
bV9zaGFyZWRHZW9tZXRyeS0+cHJlcGFyZUZvckRyYXcoKTsKQEAgLTg4NywxNCArODc2LDYgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXNlbnQoKQogICAgIG1faGVhZHNVcERpc3Bs
YXktPm9uUHJlc2VudCgpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0Um9v
dExheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpCi17Ci0gICAgbV9yb290TGF5
ZXIgPSBsYXllcjsKLSAgICBpZiAobV9yb290TGF5ZXIpCi0gICAgICAgIG1fcm9vdExheWVyLT5z
ZXRMYXllclJlbmRlcmVyKHRoaXMpOwotICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT5pbnZh
bGlkYXRlRW50aXJlTGF5ZXIoKTsKLX0KLQogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNl
dExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiB7CiAgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVyLT5jaGls
ZHJlbigpOwpAQCAtOTA5LDE1ICs4OTAsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllcikKICAgICBsYXll
ci0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnRyYW5zZmVyUm9vdExheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogb3RoZXIpCi17Ci0g
ICAgb3RoZXItPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCkpOwot
ICAgIG90aGVyLT5tX3Jvb3RMYXllciA9IG1fcm9vdExheWVyLnJlbGVhc2UoKTsKLX0KLQogdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVs
cywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gbV92
aWV3cG9ydFZpc2libGVSZWN0LndpZHRoKCkgJiYgcmVjdC5tYXhZKCkgPD0gbV92aWV3cG9ydFZp
c2libGVSZWN0LmhlaWdodCgpKTsKKyAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gbV9vd25lci0+
dmlld3BvcnRWaXNpYmxlUmVjdCgpLndpZHRoKCkgJiYgcmVjdC5tYXhZKCkgPD0gbV9vd25lci0+
dmlld3BvcnRWaXNpYmxlUmVjdCgpLmhlaWdodCgpKTsKIAogICAgIGlmICghcGl4ZWxzKQogICAg
ICAgICByZXR1cm47CkBAIC0xMDA3LDI1ICs5ODIsMTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiAg
ICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CiB9CiAKLXZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpzZXRDb21wb3NpdGVPZmZzY3JlZW4oYm9vbCBjb21wb3NpdGVP
ZmZzY3JlZW4pCi17Ci0gICAgaWYgKG1fY29tcG9zaXRlT2Zmc2NyZWVuID09IGNvbXBvc2l0ZU9m
ZnNjcmVlbikKLSAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbXBvc2l0ZU9mZnNjcmVlbiA9IGNv
bXBvc2l0ZU9mZnNjcmVlbjsKLQotICAgIGlmICghbV9jb21wb3NpdGVPZmZzY3JlZW4gJiYgbV9y
b290Q0NMYXllckltcGwpCi0gICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsLT5jbGVhclJlbmRlclN1
cmZhY2UoKTsKLX0KLQogTGF5ZXJUZXh0dXJlKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9m
ZnNjcmVlbkxheWVyVGV4dHVyZSgpCiB7Ci0gICAgcmV0dXJuIG1fY29tcG9zaXRlT2Zmc2NyZWVu
ICYmIG1fcm9vdENDTGF5ZXJJbXBsID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRlclN1cmZhY2Uo
KS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOworICAgIHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0
ZU9mZnNjcmVlbiAmJiBtX3Jvb3RDQ0xheWVySW1wbCA/IG1fcm9vdENDTGF5ZXJJbXBsLT5yZW5k
ZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKIH0KIAogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCkKIHsKLSAgICBpZiAo
bV9jb21wb3NpdGVPZmZzY3JlZW4pIHsKKyAgICBpZiAoc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZz
Y3JlZW4pIHsKICAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICAgICAgdXNlUmVu
ZGVyU3VyZmFjZSgwKTsKQEAgLTEwNDQsNyArMTAwOCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1c2VSZW5kZXJTdXJmYWNlKENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSkK
IAogICAgIG1fY3VycmVudFJlbmRlclN1cmZhY2UgPSByZW5kZXJTdXJmYWNlOwogCi0gICAgaWYg
KChyZW5kZXJTdXJmYWNlID09IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgJiYgIW1fY29tcG9zaXRl
T2Zmc2NyZWVuKSB8fCAoIXJlbmRlclN1cmZhY2UgJiYgbV9jb21wb3NpdGVPZmZzY3JlZW4pKSB7
CisgICAgaWYgKChyZW5kZXJTdXJmYWNlID09IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UgJiYgIXNl
dHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuKSB8fCAoIXJlbmRlclN1cmZhY2UgJiYgc2V0dGlu
Z3MoKS5jb21wb3NpdGVPZmZzY3JlZW4pKSB7CiAgICAgICAgIEdMQyhtX2NvbnRleHQuZ2V0KCks
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgMCkpOwogICAgICAgICBpZiAocmVuZGVyU3VyZmFjZSkKICAgICAgICAgICAgIHNldERyYXdW
aWV3cG9ydFJlY3QocmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKSwgdHJ1ZSk7CkBAIC0xMTQw
LDcgKzExMDQsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0U2Npc3NvclRvUmVj
dChjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCkKICAgICAvLyBvZiB0aGUgR0wgc2Npc3NvciBp
cyB0aGUgYm90dG9tIG9mIG91ciBsYXllci4KICAgICAvLyBCdXQsIGlmIHJlbmRlcmluZyB0byBv
ZmZzY3JlZW4gdGV4dHVyZSwgd2UgcmV2ZXJzZSBvdXIgc2Vuc2Ugb2YgJ3Vwc2lkZSBkb3duJy4K
ICAgICBpbnQgc2Npc3Nvclk7Ci0gICAgaWYgKG1fY3VycmVudFJlbmRlclN1cmZhY2UgPT0gbV9k
ZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhbV9jb21wb3NpdGVPZmZzY3JlZW4pCisgICAgaWYgKG1f
Y3VycmVudFJlbmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhc2V0dGlu
Z3MoKS5jb21wb3NpdGVPZmZzY3JlZW4pCiAgICAgICAgIHNjaXNzb3JZID0gbV9jdXJyZW50UmVu
ZGVyU3VyZmFjZS0+Y29udGVudFJlY3QoKS5oZWlnaHQoKSAtIChzY2lzc29yUmVjdC5tYXhZKCkg
LSBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpLnkoKSk7CiAgICAgZWxzZQog
ICAgICAgICBzY2lzc29yWSA9IHNjaXNzb3JSZWN0LnkoKSAtIGNvbnRlbnRSZWN0LnkoKTsKQEAg
LTEzNTksMTAgKzEzMjMsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBT
aGFyZWRPYmplY3RzKCkKIFN0cmluZyBMYXllclJlbmRlcmVyQ2hyb21pdW06OmxheWVyVHJlZUFz
VGV4dCgpIGNvbnN0CiB7CiAgICAgVGV4dFN0cmVhbSB0czsKLSAgICBpZiAobV9yb290TGF5ZXIu
Z2V0KCkpIHsKLSAgICAgICAgdHMgPDwgbV9yb290TGF5ZXItPmxheWVyVHJlZUFzVGV4dCgpOwor
ICAgIGlmIChyb290TGF5ZXIoKSkgeworICAgICAgICB0cyA8PCByb290TGF5ZXIoKS0+bGF5ZXJU
cmVlQXNUZXh0KCk7CiAgICAgICAgIHRzIDw8ICJSZW5kZXJTdXJmYWNlczpcbiI7Ci0gICAgICAg
IGR1bXBSZW5kZXJTdXJmYWNlcyh0cywgMSwgbV9yb290TGF5ZXIuZ2V0KCkpOworICAgICAgICBk
dW1wUmVuZGVyU3VyZmFjZXModHMsIDEsIHJvb3RMYXllcigpKTsKICAgICB9CiAgICAgcmV0dXJu
IHRzLnJlbGVhc2UoKTsKIH0KQEAgLTE0MDgsNyArMTM3Miw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpCiAgICAgcmV0dXJuIChtX2NvbnRl
eHQuZ2V0KCktPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQsIExh
eWVyQ2hyb21pdW0qIGxheWVyKSBjb25zdAordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1
bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgY29uc3QgTGF5ZXJD
aHJvbWl1bSogbGF5ZXIpIGNvbnN0CiB7CiAgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkp
CiAgICAgICAgIGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPmR1bXBTdXJmYWNlKHRzLCBpbmRlbnQp
OwpAQCAtMTQxNyw3NCArMTM4MSw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkdW1w
UmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQsIExheWVyCiAgICAgICAg
IGR1bXBSZW5kZXJTdXJmYWNlcyh0cywgaW5kZW50LCBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQo
KSk7CiB9CiAKLWNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgOiBwdWJsaWMgQ0NMYXll
clRyZWVIb3N0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtSW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVu
dCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKGNsaWVudCwgbGF5
ZXJSZW5kZXJlcikpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzQW5kUHJl
c2VudCgpCi0gICAgewotICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAg
ICAgICBib29sIGNvbnRleHRMb3N0OwotICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNy
ZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsOjpkcmF3
TGF5ZXJzT25NYWluVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29udGV4dExvc3QpKSk7Ci0gICAgICAgIGNvbXBsZXRp
b24ud2FpdCgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVz
c2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4u
XQotCi0gICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0Ci0gICAgICAgIGlmIChj
b250ZXh0TG9zdCkKLSAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBs
IGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
IGNsaWVudCwgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotICAgICAgICA6
IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50KQotICAgICAgICAsIG1fbGF5ZXJSZW5kZXJlcihs
YXllclJlbmRlcmVyKSB7IH0KLQotICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCi0gICAgewotICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgICAgIGlmIChtX2xheWVyUmVuZGVy
ZXItPnJvb3RMYXllcigpKSB7Ci0gICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXll
cnMoKTsKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOwotCi0gICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpOwotICAgICAgICAgICAgKmNvbnRleHRMb3N0ID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VS
Uk9SOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICpjb250ZXh0TG9zdCA9IGZhbHNlOwot
ICAgICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKLSAgICB9Ci0KLSAgICBMYXllclJlbmRlcmVy
Q2hyb21pdW0qIG1fbGF5ZXJSZW5kZXJlcjsKLX07Ci0KLWNsYXNzIExheWVyUmVuZGVyZXJDaHJv
bWl1bUltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGxQcm94eT4g
Y3JlYXRlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5KGxh
eWVyUmVuZGVyZXIpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIExheWVyUmVuZGVyZXJDaHJvbWl1bUltcGw6OmNyZWF0ZSh0aGlzLCBzdGF0aWNfY2FzdDxM
YXllclJlbmRlcmVyQ2hyb21pdW0qPihob3N0KCkpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
TGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbFByb3h5KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlcikKLSAgICAgICAgOiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkobGF5ZXJSZW5k
ZXJlcikgeyB9Ci19OwotCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCkKLXsKLSAg
ICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBwcm94eSA9IExheWVyUmVuZGVyZXJD
aHJvbWl1bUltcGxQcm94eTo6Y3JlYXRlKHRoaXMpOwotICAgIHByb3h5LT5zdGFydCgpOwotICAg
IHJldHVybiBwcm94eS5yZWxlYXNlKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKaW5kZXggY2FjMDc1NGIwOGEwMDRlYzBlOGVkZDJiMjUyOGU1NjQ3MjU3
Mzg2OC4uMGUwZDk2NGJkYjlhZDAzOTY4MjBjZDY5ZjY1OTZhZTk1MjBjOWY4MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyVGls
ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXll
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NDYW52YXNMYXllckltcGwuaCIKICNpbmNsdWRl
ICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCkBAIC02OSw1MiArNjgsNDQgQEAgY2xhc3MgQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIEdl
b21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgTGF5ZXJQYWlu
dGVyQ2hyb21pdW07CiAKIC8vIENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0
ZWQgcmVuZGVyIGxheWVycyB1c2luZyBHTC4KLWNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3QgeworY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDog
cHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRy
ZWVIb3N0Q2xpZW50KiwgUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBh
aW50LCBib29sIGFjY2VsZXJhdGVEcmF3aW5nKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqLCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPik7CiAKLSAgICB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CisgICAg
dmlydHVhbCB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CisKKyAgICBjb25zdCBDQ1NldHRpbmdz
JiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnNldHRpbmdzKCk7IH0KKworICAg
IENDTGF5ZXJUcmVlSG9zdCogb3duZXIoKSB7IHJldHVybiBtX293bmVyOyB9CisgICAgY29uc3Qg
Q0NMYXllclRyZWVIb3N0KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KKworICAg
IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigp
OyB9CisgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9vd25lci0+cm9vdExheWVyKCk7IH0KIAogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KCk7CiAgICAgYm9vbCBjb250ZXh0U3VwcG9ydHNNYXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHRTdXBwb3J0c01hcFN1YjsgfQorCiAjaWYgVVNFKFNLSUEpCi0gICAgR3JDb250ZXh0KiBz
a2lhQ29udGV4dCgpOworICAgIEdyQ29udGV4dCogc2tpYUNvbnRleHQoKSB7IHJldHVybiBtX3Nr
aWFDb250ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXll
clJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKIAotICAgIHZvaWQgc2V0Vmlld3BvcnQo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBj
b25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworICAgIHZvaWQgcm9vdExheWVyQ2hhbmdl
ZCgpOworICAgIHZvaWQgdmlld3BvcnRDaGFuZ2VkKCk7CiAKICAgICAvLyB1cGRhdGVzIGFuZCBk
cmF3cyB0aGUgY3VycmVudCBsYXllcnMgb250byB0aGUgYmFja2J1ZmZlcgogICAgIHZvaWQgdXBk
YXRlTGF5ZXJzKCk7CiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CiAKLSAgICAvLyBTZXQgYnkgV2Vi
Vmlld0ltcGwgd2hlbiBhbmltYXRpb24gY2FsbGJhY2tzIGFyZSBydW5uaW5nLgotICAgIC8vIEZJ
WE1FOiBXaGVuIHdlIG1vdmUgc2NoZWR1bGluZyBpbnRvIHRoZSBjb21wb3NpdG9yLCB3ZSBjYW4g
cmVtb3ZlIHRoaXMgZmxhZy4KLSAgICB2b2lkIHNldElzQW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5n
KSB7IG1fYW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9Ci0gICAgYm9vbCBpc0FuaW1hdGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nOyB9Ci0KICAgICAvLyB3YWl0cyBmb3IgcmVuZGVyaW5n
IHRvIGZpbmlzaAogICAgIHZvaWQgZmluaXNoKCk7CiAKICAgICAvLyBwdXRzIGJhY2tidWZmZXIg
b25zY3JlZW4KICAgICB2b2lkIHByZXNlbnQoKTsKIAotICAgIEludFNpemUgdmlld3BvcnRTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFZpc2libGVSZWN0LnNpemUoKTsgfQotCi0gICAg
dm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPik7Ci0gICAgTGF5ZXJD
aHJvbWl1bSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KLSAgICB2
b2lkIHRyYW5zZmVyUm9vdExheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogb3RoZXIpOwotCi0g
ICAgYm9vbCBoYXJkd2FyZUNvbXBvc2l0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9oYXJkd2FyZUNv
bXBvc2l0aW5nOyB9Ci0gICAgYm9vbCBhY2NlbGVyYXRlRHJhd2luZygpIGNvbnN0IHsgcmV0dXJu
IG1fYWNjZWxlcmF0ZURyYXdpbmc7IH0gCi0KLSAgICB2b2lkIHNldENvbXBvc2l0ZU9mZnNjcmVl
bihib29sKTsKLSAgICBib29sIGlzQ29tcG9zaXRpbmdPZmZzY3JlZW4oKSBjb25zdCB7IHJldHVy
biBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsgfQotCiAgICAgdW5zaWduZWQgY3JlYXRlTGF5ZXJUZXh0
dXJlKCk7CiAgICAgdm9pZCBkZWxldGVMYXllclRleHR1cmUodW5zaWduZWQpOwogCkBAIC0xNTks
MjIgKzE1MCwyMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbGVhc2VUZXh0dXJlcygpOwogCisg
ICAgdm9pZCBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKKwogI2lm
bmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9vbCBzX2luUGFpbnRMYXllckNvbnRlbnRzOwogI2Vu
ZGlmCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0
OwogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsK
IAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKLQogcHJpdmF0ZToKICAgICB0
eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxkQ29udGV4dE1hcDsK
IAogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ0xheWVyVHJl
ZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCiAgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBtX3Jvb3RDQ0xheWVySW1wbDsKIAotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVy
VHJlZUhvc3RDbGllbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0
cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gY29udGVudFBhaW50LCBib29sIGFjY2VsZXJhdGVEcmF3
aW5nKTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0KiwgUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCiAgICAg
dm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgdXBkYXRlUm9vdExh
eWVyQ29udGVudHMoKTsKQEAgLTIwMCwzMiArMTkxLDI2IEBAIHByaXZhdGU6CiAKICAgICBzdGF0
aWMgYm9vbCBjb21wYXJlTGF5ZXJaKGNvbnN0IFJlZlB0cjxDQ0xheWVySW1wbD4mLCBjb25zdCBS
ZWZQdHI8Q0NMYXllckltcGw+Jik7CiAKLSAgICB2b2lkIGR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0
U3RyZWFtJiwgaW50IGluZGVudCwgTGF5ZXJDaHJvbWl1bSopIGNvbnN0OworICAgIHZvaWQgZHVt
cFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50LCBjb25zdCBMYXllckNocm9t
aXVtKikgY29uc3Q7CiAKICAgICBib29sIGluaXRpYWxpemVTaGFyZWRPYmplY3RzKCk7CiAgICAg
dm9pZCBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogCi0gICAgdm9pZCBzZXRMYXllclJlbmRlcmVy
UmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKLQotICAgIEludFJlY3QgbV92aWV3cG9ydFZpc2li
bGVSZWN0OwotICAgIEludFJlY3QgbV92aWV3cG9ydENvbnRlbnRSZWN0OwotICAgIEludFBvaW50
IG1fdmlld3BvcnRTY3JvbGxQb3NpdGlvbjsKKyAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8g
Q0NMYXllclRyZWVIb3N0SW1wbAorICAgIENDTGF5ZXJUcmVlSG9zdCogbV9vd25lcjsKIAogICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJpeDsKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBtX3dpbmRvd01hdHJpeDsKIAotICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBt
X3Jvb3RMYXllcjsKKyAgICAvLyBGSVhNRTogc3BsaXQgdGhlIHRleHR1cmUgdXBkYXRlciBhbmQg
dGlsZXIgaW50byB0d28gcGFydHMuIFRoZW4sIGtlZXAgdGhlCisgICAgLy8gaW1wbCBoZXJlIGFu
ZCBwdXQgdGhlIHBhaW50aW5nLXNpZGUgb24gdGhlIExheWVyVHJlZUhvc3QuCiAgICAgT3duUHRy
PExheWVyVGV4dHVyZVVwZGF0ZXI+IG1fcm9vdExheWVyVGV4dHVyZVVwZGF0ZXI7CiAgICAgT3du
UHRyPExheWVyVGlsZXJDaHJvbWl1bT4gbV9yb290TGF5ZXJDb250ZW50VGlsZXI7CiAKLSAgICBi
b29sIG1faGFyZHdhcmVDb21wb3NpdGluZzsKLSAgICBib29sIG1fYWNjZWxlcmF0ZURyYXdpbmc7
Ci0KICAgICBPd25QdHI8TGF5ZXJMaXN0PiBtX2NvbXB1dGVkUmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKIAogICAgIENDUmVuZGVyU3VyZmFjZSogbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsKICAgICB1
bnNpZ25lZCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQ7Ci0gICAgYm9vbCBtX2NvbXBvc2l0ZU9m
ZnNjcmVlbjsKIAogICAgIC8vIE1heGltdW0gdGV4dHVyZSBkaW1lbnNpb25zIHN1cHBvcnRlZC4K
ICAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKQEAgLTI2MSwxMCArMjQ2LDYgQEAgcHJpdmF0ZToK
ICAgICBDaGlsZENvbnRleHRNYXAgbV9jaGlsZENvbnRleHRzOwogCiAgICAgYm9vbCBtX2NvbnRl
eHRTdXBwb3J0c01hcFN1YjsKLSAgICBib29sIG1fY29udGV4dFN1cHBvcnRzVGV4dHVyZUZvcm1h
dEJHUkE7Ci0gICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0c1JlYWRGb3JtYXRCR1JBOwotCi0gICAg
Ym9vbCBtX2FuaW1hdGluZzsKIAogICAgIENDUmVuZGVyU3VyZmFjZSogbV9kZWZhdWx0UmVuZGVy
U3VyZmFjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNzYyMTdiNGI5
ZTZjOTVhZjJkMDhiNDI1ZDNhYWNhMjdjZGY2ZWZmNC4uZjM1YjBkM2RjZTFlZjJlNGVlNmEzZTQx
Y2E5YmUxMGVjM2YzMWU3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC0x
MDQsNyArMTA0LDcgQEAgdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnNldFRleHR1cmVVcGRhdGVk
KCkKICAgICBtX3RleHR1cmVVcGRhdGVkID0gdHJ1ZTsKICAgICAvLyBJZiBXZWJHTCBjb21tYW5k
cyBhcmUgaXNzdWVkIG91dHNpZGUgb2YgYSB0aGUgYW5pbWF0aW9uIGNhbGxiYWNrcywgdGhlbiB1
c2UKICAgICAvLyBjYWxsIHJhdGVMaW1pdE9mZnNjcmVlbkNvbnRleHRDSFJPTUlVTSgpIHRvIGtl
ZXAgdGhlIGNvbnRleHQgZnJvbSBnZXR0aW5nIHRvbyBmYXIgYWhlYWQuCi0gICAgaWYgKGxheWVy
UmVuZGVyZXIoKSAmJiAhbGF5ZXJSZW5kZXJlcigpLT5pc0FuaW1hdGluZygpICYmIG1fY29udGV4
dFN1cHBvcnRzUmF0ZUxpbWl0aW5nRXh0ZW5zaW9uICYmICFtX3JhdGVMaW1pdGluZ1RpbWVyLmlz
QWN0aXZlKCkpCisgICAgaWYgKGxheWVyUmVuZGVyZXIoKSAmJiBsYXllclJlbmRlcmVyKCktPm93
bmVyKCktPmFuaW1hdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzUmF0ZUxpbWl0aW5nRXh0ZW5z
aW9uICYmICFtX3JhdGVMaW1pdGluZ1RpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIG1fcmF0ZUxp
bWl0aW5nVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERp
c3BsYXkuY3BwCmluZGV4IDdmMmNlYzc3ODVjZjBmMGUwZjFhZDNkNDEzMzU0YzgzOTM2YTE1ZmMu
LjgxN2ViNmUzZmJjYTAzYjczNTNjMDJjMzAxYzYyYjU4NGMyOTc5NWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3Bs
YXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSGVhZHNVcERpc3BsYXkuY3BwCkBAIC01MSw4ICs1MSw2IEBAIENDSGVhZHNVcERpc3BsYXk6
OkNDSGVhZHNVcERpc3BsYXkoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBvd25lcikKICAgICA6IG1f
Y3VycmVudEZyYW1lTnVtYmVyKDEpCiAgICAgLCBtX2ZpbHRlcmVkRnJhbWVUaW1lKDApCiAgICAg
LCBtX2xheWVyUmVuZGVyZXIob3duZXIpCi0gICAgLCBtX3Nob3dGUFNDb3VudGVyKGZhbHNlKQot
ICAgICwgbV9zaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpCiAgICAgLCBtX3VzZU1hcFN1YkZv
clVwbG9hZHMob3duZXItPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKQogewogICAgIG1fYmVnaW5U
aW1lSGlzdG9yeUluU2VjWzBdID0gY3VycmVudFRpbWUoKTsKQEAgLTc5LDYgKzc3LDIxIEBAIEND
SGVhZHNVcERpc3BsYXk6On5DQ0hlYWRzVXBEaXNwbGF5KCkKIHsKIH0KIAordm9pZCBDQ0hlYWRz
VXBEaXNwbGF5OjpvbkZyYW1lQmVnaW4oZG91YmxlIHRpbWVzdGFtcCkKK3sKKyAgICBtX2JlZ2lu
VGltZUhpc3RvcnlJblNlY1ttX2N1cnJlbnRGcmFtZU51bWJlciAlIGtCZWdpbkZyYW1lSGlzdG9y
eVNpemVdID0gdGltZXN0YW1wOworfQorCit2b2lkIENDSGVhZHNVcERpc3BsYXk6Om9uUHJlc2Vu
dCgpCit7CisgICAgbV9jdXJyZW50RnJhbWVOdW1iZXIgKz0gMTsKK30KKworYm9vbCBDQ0hlYWRz
VXBEaXNwbGF5OjplbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2V0dGluZ3MoKS5zaG93
UGxhdGZvcm1MYXllclRyZWUgfHwgc2V0dGluZ3MoKS5zaG93RlBTQ291bnRlcjsKK30KKwogdm9p
ZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KCkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwpAQCAtODcsOSArMTAwLDkgQEAgdm9p
ZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KCkKIAogICAgIC8vIFVzZSBhIGZ1bGxzY3JlZW4gdGV4
dHVyZSBvbmx5IGlmIHdlIG5lZWQgdG8uLi4KICAgICBJbnRTaXplIGh1ZFNpemU7Ci0gICAgaWYg
KG1fc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKSB7Ci0gICAgICAgIGh1ZFNpemUuc2V0V2lkdGgobWlu
KDIwNDgsIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRTaXplKCkud2lkdGgoKSkpOwotICAgICAg
ICBodWRTaXplLnNldEhlaWdodChtaW4oMjA0OCwgbV9sYXllclJlbmRlcmVyLT52aWV3cG9ydFNp
emUoKS5oZWlnaHQoKSkpOworICAgIGlmIChzZXR0aW5ncygpLnNob3dQbGF0Zm9ybUxheWVyVHJl
ZSkgeworICAgICAgICBodWRTaXplLnNldFdpZHRoKG1pbigyMDQ4LCBtX2xheWVyUmVuZGVyZXIt
Pm93bmVyKCktPnZpZXdwb3J0VmlzaWJsZVJlY3QoKS53aWR0aCgpKSk7CisgICAgICAgIGh1ZFNp
emUuc2V0SGVpZ2h0KG1pbigyMDQ4LCBtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnZpZXdwb3J0
VmlzaWJsZVJlY3QoKS5oZWlnaHQoKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGh1ZFNpemUu
c2V0V2lkdGgoNTEyKTsKICAgICAgICAgaHVkU2l6ZS5zZXRIZWlnaHQoMTI4KTsKQEAgLTE0OSw3
ICsxNjIsNyBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXdIdWRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQqIGN0eCwgY29uc3QgSW50U2l6ZSYgaHVkUwogewogICAgIEZvbnRDYWNoZVB1cmdl
UHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCi0gICAgaWYgKG1fc2hvd1BsYXRm
b3JtTGF5ZXJUcmVlKSB7CisgICAgaWYgKHNldHRpbmdzKCkuc2hvd1BsYXRmb3JtTGF5ZXJUcmVl
KSB7CiAgICAgICAgIGN0eC0+c2V0RmlsbENvbG9yKENvbG9yKDAsIDAsIDAsIDE5MiksIENvbG9y
U3BhY2VEZXZpY2VSR0IpOwogICAgICAgICBjdHgtPmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCBo
dWRTaXplLndpZHRoKCksIGh1ZFNpemUuaGVpZ2h0KCkpKTsKICAgICB9CkBAIC0xNTcsMTUgKzE3
MCwxNSBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXdIdWRDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQqIGN0eCwgY29uc3QgSW50U2l6ZSYgaHVkUwogICAgIGludCBmcHNDb3VudGVySGVpZ2h0
ID0gbV9tZWRpdW1Gb250LT5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCkgKyAyOwogICAgIGlu
dCBmcHNDb3VudGVyVG9wID0gMjsKICAgICBpbnQgcGxhdGZvcm1MYXllclRyZWVUb3A7Ci0gICAg
aWYgKG1fc2hvd0ZQU0NvdW50ZXIpCisgICAgaWYgKHNldHRpbmdzKCkuc2hvd0ZQU0NvdW50ZXIp
CiAgICAgICAgIHBsYXRmb3JtTGF5ZXJUcmVlVG9wID0gZnBzQ291bnRlclRvcCArIGZwc0NvdW50
ZXJIZWlnaHQgKyAyOwogICAgIGVsc2UKICAgICAgICAgcGxhdGZvcm1MYXllclRyZWVUb3AgPSAw
OwogCi0gICAgaWYgKG1fc2hvd0ZQU0NvdW50ZXIpCisgICAgaWYgKHNldHRpbmdzKCkuc2hvd0ZQ
U0NvdW50ZXIpCiAgICAgICAgIGRyYXdGUFNDb3VudGVyKGN0eCwgZnBzQ291bnRlclRvcCwgZnBz
Q291bnRlckhlaWdodCk7CiAKLSAgICBpZiAobV9zaG93UGxhdGZvcm1MYXllclRyZWUpCisgICAg
aWYgKHNldHRpbmdzKCkuc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKQogICAgICAgICBkcmF3UGxhdGZv
cm1MYXllclRyZWUoY3R4LCBwbGF0Zm9ybUxheWVyVHJlZVRvcCk7CiB9CiAKQEAgLTIzOCwyNiAr
MjUxLDkgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3UGxhdGZvcm1MYXllclRyZWUoR3Jh
cGhpY3NDb250ZXh0KiBjdHgsIGludCB0b3ApCiAgICAgfQogfQogCi12b2lkIENDSGVhZHNVcERp
c3BsYXk6Om9uRnJhbWVCZWdpbihkb3VibGUgdGltZXN0YW1wKQotewotICAgIG1fYmVnaW5UaW1l
SGlzdG9yeUluU2VjW21fY3VycmVudEZyYW1lTnVtYmVyICUga0JlZ2luRnJhbWVIaXN0b3J5U2l6
ZV0gPSB0aW1lc3RhbXA7Ci19Ci0KLXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6b25QcmVzZW50KCkK
LXsKLSAgICBtX2N1cnJlbnRGcmFtZU51bWJlciArPSAxOwotfQotCi12b2lkIENDSGVhZHNVcERp
c3BsYXk6OnNldFNob3dGUFNDb3VudGVyKGJvb2wgc2hvdykKLXsKLSAgICBtX3Nob3dGUFNDb3Vu
dGVyID0gc2hvdzsKLSAgICBtX2xheWVyUmVuZGVyZXItPnNldE5lZWRzUmVkcmF3KCk7Ci19Ci0K
LXZvaWQgQ0NIZWFkc1VwRGlzcGxheTo6c2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJvb2wgc2hv
dykKK2NvbnN0IENDU2V0dGluZ3MmIENDSGVhZHNVcERpc3BsYXk6OnNldHRpbmdzKCkgY29uc3QK
IHsKLSAgICBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNob3c7Ci0gICAgbV9sYXllclJlbmRl
cmVyLT5zZXROZWVkc1JlZHJhdygpOworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPnNldHRp
bmdzKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaAppbmRleCBmMDQzMzE3
ZjU1ZmQ5N2MxYmZmNjJhZWZmYWFiMmQwMDYyMjBiNGRhLi4wMmM2NjBkMjg5OGNlN2FkMTM0YmYz
NTNkYjdjMzg5NGE5YjZjZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCkBAIC0z
Myw2ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IENDU2V0dGluZ3M7
CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNz
IExheWVyUmVuZGVyZXJDaHJvbWl1bTsKQEAgLTU0LDEzICs1NSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIG9uRnJhbWVCZWdpbihkb3VibGUgdGltZXN0YW1wKTsKICAgICB2b2lkIG9uUHJlc2VudCgp
OwogCi0gICAgdm9pZCBzZXRTaG93RlBTQ291bnRlcihib29sIGVuYWJsZSk7Ci0gICAgYm9vbCBz
aG93RlBTQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd0ZQU0NvdW50ZXI7IH0KLQotICAg
IHZvaWQgc2V0U2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGJvb2wgZW5hYmxlKTsKLSAgICBib29sIHNo
b3dQbGF0Zm9ybUxheWVyVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd1BsYXRmb3JtTGF5ZXJU
cmVlOyB9Ci0KLSAgICBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3dQbGF0Zm9y
bUxheWVyVHJlZSB8fCBtX3Nob3dGUFNDb3VudGVyOyB9CisgICAgYm9vbCBlbmFibGVkKCkgY29u
c3Q7CiAgICAgdm9pZCBkcmF3KCk7CiAKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRl
eFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dpenpsZUFscGhhPiBQcm9ncmFt
OwpAQCAtNzAsNyArNjUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd0h1ZENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFNpemUmIGh1ZFNpemUpOwogICAgIHZvaWQgZHJhd0ZQ
U0NvdW50ZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50IHRvcCwgaW50IGhlaWdodCk7CiAgICAgdm9p
ZCBkcmF3UGxhdGZvcm1MYXllclRyZWUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHRvcCk7Ci0KKyAg
ICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0OwogCiAgICAgaW50IG1fY3VycmVu
dEZyYW1lTnVtYmVyOwogCkBAIC04Myw5ICs3OCw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNv
bnN0IGludCBrQmVnaW5GcmFtZUhpc3RvcnlTaXplID0gNjQ7CiAgICAgZG91YmxlIG1fYmVnaW5U
aW1lSGlzdG9yeUluU2VjW2tCZWdpbkZyYW1lSGlzdG9yeVNpemVdOwogCi0gICAgYm9vbCBtX3No
b3dGUFNDb3VudGVyOwotICAgIGJvb2wgbV9zaG93UGxhdGZvcm1MYXllclRyZWU7Ci0KICAgICBP
d25QdHI8Rm9udD4gbV9zbWFsbEZvbnQ7CiAgICAgT3duUHRyPEZvbnQ+IG1fbWVkaXVtRm9udDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZDc3OTVjNzEwNDM5YzliMjE5
Y2QwZjg0ZDkyMjRmZTNkYzU3YjIyZi4uNDA2ZWE0YjY5Zjk0YTE3YzUxYWVjMDdiMGNmZGJmMDQ1
ZGU2MjFiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yNiwyNiArMjYs
NDcgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogCisjaW5jbHVkZSAiTGF5
ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCisjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaCIKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDTGF5ZXJUcmVl
SG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50KQorUGFz
c1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJU
cmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKK3sKKyAg
ICBSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBsYXllclRyZWVIb3N0ID0gYWRvcHRSZWYobmV3IEND
TGF5ZXJUcmVlSG9zdChjbGllbnQsIHNldHRpbmdzKSk7CisgICAgaWYgKCFsYXllclRyZWVIb3N0
LT5pbml0aWFsaXplKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBsYXllclRyZWVI
b3N0OworfQorCitDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhv
c3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX2Ns
aWVudChjbGllbnQpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCisgICAgLCBtX3NldHRpbmdzKHNl
dHRpbmdzKQogewogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW5pdCgpCitib29sIENDTGF5
ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiB7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gbV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fbGF5ZXJSZW5k
ZXJlciA9IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQot
ICAgIG1fcHJveHkgPSBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7CisgICAgbV9wcm94
eSA9IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMpOwogICAgIEFTU0VSVCht
X3Byb3h5LT5pc1N0YXJ0ZWQoKSk7CiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKTsKICNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIENDTGF5ZXJUcmVlSG9zdDo6
fkNDTGF5ZXJUcmVlSG9zdCgpCkBAIC02OCwyNyArODksMTgzIEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0Ojpjb21taXRDb21wbGV0ZSgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5k
TGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIHsKKyAgICBtX2FuaW1hdGluZyA9IHRydWU7
CiAgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIG1f
YW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0
dGVyPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKQogewot
ICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZSgpOworICAgIC8vIEZJ
WE1FOiBvbmx5IGNhbGxlZCBpbiB0aHJlYWRpbmcgY2FzZSwgZml4IHdoZW4gcG9zc2libGUuCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4g
Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJ
bXBsQ2xpZW50KiBjbGllbnQpCit7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
cmVuZGVyZXIobV9sYXllclJlbmRlcmVyKTsKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1w
bDo6Y3JlYXRlKGNsaWVudCwgcmVuZGVyZXIpOworfQorCitHcmFwaGljc0NvbnRleHQzRCogQ0NM
YXllclRyZWVIb3N0Ojpjb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5j
b250ZXh0KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFj
ayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisjaWYgVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQorICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCB0aGlzLgorI2Vs
c2UKKyAgICBkb0NvbXBvc2l0ZSgpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZm
ZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKKyNlbmRpZgorfQorCitQYXNzT3duUHRyPExheWVyUGFp
bnRlckNocm9taXVtPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKQor
eworICAgIHJldHVybiBtX2NsaWVudC0+Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpOworfQorCit2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKK3sKKyNpZiBVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCisgICAgLy8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMu
CisjZWxzZQorICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7CisjZW5kaWYKK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKK3sKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVy
UmVuZGVyZXItPmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRpcnR5UmVjdCk7CiB9CiAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAjaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQorICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnNl
dE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7CiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKyNlbHNlCisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiAjZW5k
aWYKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzUmVkcmF3KCkKIHsKLSAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOwog
I2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0OjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOwogICAgIG1fcHJveHktPnNldE5lZWRz
UmVkcmF3KCk7CisjZWxzZQorICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2Vu
ZGlmCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIpCit7CisgICAgbV9yb290TGF5ZXIgPSBsYXllcjsKKyAgICBpZiAobV9yb290TGF5
ZXIpCisgICAgICAgIG1fcm9vdExheWVyLT5zZXRMYXllclJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJl
ci5nZXQoKSk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5yb290TGF5ZXJDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRW
aWV3cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICBib29sIHZpc2li
bGVSZWN0Q2hhbmdlZCA9IG1fdmlld3BvcnRWaXNpYmxlUmVjdC5zaXplKCkgIT0gdmlzaWJsZVJl
Y3Quc2l6ZSgpOworCisgICAgbV92aWV3cG9ydFZpc2libGVSZWN0ID0gdmlzaWJsZVJlY3Q7Cisg
ICAgbV92aWV3cG9ydENvbnRlbnRSZWN0ID0gY29udGVudFJlY3Q7CisgICAgbV92aWV3cG9ydFNj
cm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247CisKKyAgICBpZiAodmlzaWJsZVJlY3RDaGFu
Z2VkICYmIG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT52aWV3cG9y
dENoYW5nZWQoKTsKKworICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Cit9CisKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyNpZiAhVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghdmlzaWJsZSkKKyAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5yZWxlYXNlVGV4dHVyZXMoKTsKICNlbmRpZgogfQogCitQYXNzUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclJlbmRlcmVyKCkK
K3sKKyAgICAvLyBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVy
biAwLCBpbiB0aGF0IGNhc2UgZmFsbCBiYWNrIHRvIHNvZnR3YXJlLgorICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29u
dGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8v
IEFjdHVhbGx5IGNyZWF0ZSB0aGUgcmVuZGVyZXIuCisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJD
aHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRo
aXMsIGNvbnRleHQpOworCisgICAgLy8gSWYgY3JlYXRpb24gZmFpbGVkLCBhbmQgd2UgaGFkIGFz
a2VkIGZvciBhY2NlbGVyYXRlZCBwYWludGluZywgZGlzYWJsZSBhY2NlbGVyYXRlZCBwYWludGlu
ZworICAgIC8vIGFuZCB0cnkgY3JlYXRpbmcgdGhlIHJlbmRlcmVyIGFnYWluLgorICAgIGlmICht
X3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyAmJiAhbGF5ZXJSZW5kZXJlcikgeworICAgICAg
ICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNlOworICAgICAgICBsYXllclJl
bmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGxheWVyUmVuZGVyZXI7Cit9CisKKyNpZiAhVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRvQ29tcG9zaXRlKCkKK3sKKyAg
ICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUxh
eWVycygpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOworfQorCit2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSIsIHRoaXMsIDApOworCisgICAgaWYgKG1fcmVj
cmVhdGluZ0dyYXBoaWNzQ29udGV4dCkgeworICAgICAgICAvLyByZWFsbG9jYXRlUmVuZGVyZXIg
d2lsbCByZXF1ZXN0IGEgcmVwYWludCB3aGV0aGVyIG9yIG5vdCBpdCBzdWNjZWVkZWQKKyAgICAg
ICAgLy8gaW4gY3JlYXRpbmcgYSBuZXcgY29udGV4dC4KKyAgICAgICAgcmVhbGxvY2F0ZVJlbmRl
cmVyKCk7CisgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IGZhbHNlOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG8gbm90IGNvbXBvc2l0ZSBpZiB0aGUgY29t
cG9zaXRvciBjb250ZXh0IGlzIGFscmVhZHkgbG9zdC4KKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJl
ci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgeworICAgICAgICBkb0NvbXBvc2l0ZSgpOwor
CisgICAgICAgIC8vIFB1dCByZXN1bHQgb25zY3JlZW4uCisgICAgICAgIG1fbGF5ZXJSZW5kZXJl
ci0+cHJlc2VudCgpOworICAgIH0KKworICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9z
aXRvckNvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgLy8gVHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNv
bnRleHQgcmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBwcm9jZXNzCisgICAgICAgIC8v
IGRpZWQuIFRoaXMgaXMgYmVjYXVzZSBHcHVDaGFubmVsSG9zdDo6T25FcnJvck1lc3NhZ2Ugd2ls
bCBvbmx5IGJlCisgICAgICAgIC8vIGNhbGxlZCBhdCB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhl
IG1lc3NhZ2UgbG9vcCwgcmV2ZXJ0aW5nIG91cgorICAgICAgICAvLyByZWNvdmVyeSBhdHRlbXB0
cyBoZXJlLiBJbnN0ZWFkLCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIgZnJvbSB0aGUKKyAgICAg
ICAgLy8gcmVuZGVyZXIsIHJlY3JlYXRlIHRoZSByZW5kZXJlciBhdCB0aGUgbmV4dCBtZXNzYWdl
IGxvb3AgaXRlcmF0aW9uCisgICAgICAgIC8vIGFuZCByZXF1ZXN0IGEgcmVwYWludCB5ZXQgYWdh
aW4uCisgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7CisgICAgICAg
IHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKK3sKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBsYXllclJlbmRlcmVyID0gY3JlYXRlTGF5ZXJSZW5kZXJlcigpOworICAgIGlmICgh
bGF5ZXJSZW5kZXJlcikgeworICAgICAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0Nv
bnRleHQoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVhdHRhY2gg
dGhlIHJvb3QgbGF5ZXIuIENoaWxkIGxheWVycyB3aWxsIGdldCByZWF0dGFjaGVkIGFzIGEgc2lk
ZSBlZmZlY3Qgb2YgdXBkYXRlTGF5ZXJzUmVjdXJzaXZlLgorICAgIGxheWVyUmVuZGVyZXItPnNl
dExheWVyUmVuZGVyZXJSZWN1cnNpdmUobV9yb290TGF5ZXIuZ2V0KCkpOworICAgIG1fbGF5ZXJS
ZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7CisKKyAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFw
aGljc0NvbnRleHQodHJ1ZSk7Cit9CisjZW5kaWYgLy8gIVVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCAyODg5NTBlZmUxM2E3OTYw
ZDYwM2Y3ZWIzZjdlMjAxZTY3OTQ2ZWE3Li4wZGMxNDc4Y2VmNzc5MjM4MzA0ZTgzMTRmZDE3MGJk
OTNmN2FjZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMjUsOCArMjUsMTAg
QEAKICNpZm5kZWYgQ0NMYXllclRyZWVIb3N0X2gKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0X2gK
IAorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21t
aXR0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKwogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzYsMzkgKzM4LDExNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgQ0NMYXllclRyZWVI
b3N0SW1wbENsaWVudDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgTGF5ZXJDaHJv
bWl1bTsKK2NsYXNzIExheWVyUGFpbnRlckNocm9taXVtOworY2xhc3MgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOwogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewogcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOwog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVl
SG9zdENvbnRleHQzRCgpID0gMDsKLQorICAgIHZpcnR1YWwgUGFzc093blB0cjxMYXllclBhaW50
ZXJDaHJvbWl1bT4gY3JlYXRlUm9vdExheWVyUGFpbnRlcigpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKSA9IDA7CisjaWYgIVVT
RShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3Np
dGUoKSA9IDA7CisjZW5kaWYKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhv
c3RDbGllbnQoKSB7IH0KIH07CiAKK3N0cnVjdCBDQ1NldHRpbmdzIHsKKyAgICBDQ1NldHRpbmdz
KCkKKyAgICAgICAgICAgIDogYWNjZWxlcmF0ZVBhaW50aW5nKGZhbHNlKQorICAgICAgICAgICAg
LCBjb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCisgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVy
KGZhbHNlKQorICAgICAgICAgICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpIHsgfQor
CisgICAgYm9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CisgICAgYm9vbCBjb21wb3NpdGVPZmZzY3Jl
ZW47CisgICAgYm9vbCBzaG93RlBTQ291bnRlcjsKKyAgICBib29sIHNob3dQbGF0Zm9ybUxheWVy
VHJlZTsKK307CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPEND
TGF5ZXJUcmVlSG9zdD4gewogcHVibGljOgotICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdChD
Q0xheWVyVHJlZUhvc3RDbGllbnQqKTsKLSAgICB2b2lkIGluaXQoKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBj
b25zdCBDQ1NldHRpbmdzJik7CiAgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0KCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwog
ICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRD
b21wbGV0ZSgpOworCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKICAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGVMYXll
clRyZWVIb3N0Q29tbWl0dGVyKCk7CiAKKyAgICBib29sIGFuaW1hdGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW5nOyB9CisgICAgdm9pZCBzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcp
IHsgbV9hbmltYXRpbmcgPSBhbmltYXRpbmc7IH0gLy8gQ2FuIGJlIHJlbW92ZWQgd2hlbiBub24t
dGhyZWFkZWQgc2NoZWR1bGluZyBtb3ZlcyBpbnNpZGUuCisKKyAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpOworCisgICAgdm9pZCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhl
bHMsIGNvbnN0IEludFJlY3QmKTsKKworICAgIFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21p
dW0+IGNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKTsKKworICAgIHZvaWQgZmluaXNoQWxsUmVuZGVy
aW5nKCk7CisKICAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVt
YmVyOyB9CiAKKyAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCk7CisKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAgICAg
dm9pZCBzZXROZWVkc1JlZHJhdygpOwogCisgICAgdm9pZCBzZXRSb290TGF5ZXIoTGF5ZXJDaHJv
bWl1bSopOworICAgIExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExh
eWVyLmdldCgpOyB9CisgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KKworICAgIGNvbnN0IENDU2V0dGluZ3MmIHNl
dHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQorCisgICAgdm9pZCBzZXRWaWV3
cG9ydChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbik7CisKKyAgICBjb25zdCBJbnRSZWN0
JiB2aWV3cG9ydENvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydENvbnRlbnRS
ZWN0OyB9CisgICAgY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3ZpZXdwb3J0U2Nyb2xsUG9zaXRpb247IH0KKyAgICBjb25zdCBJbnRSZWN0
JiB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFZpc2libGVS
ZWN0OyB9CisKKyAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CisKKyAgICAvLyBUZW1wb3Jhcnkg
aG9tZSBmb3IgdGhlIG5vbi10aHJlYWRlZCByZW5kZXJpbmcgcGF0aC4KKyNpZiAhVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKKyNlbmRp
ZgorCisKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbFByb3h5PiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbFByb3h5KCkgPSAwOworICAgIENDTGF5
ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAK
IHByaXZhdGU6CisgICAgYm9vbCBpbml0aWFsaXplKCk7CisKKyAgICBQYXNzUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlTGF5ZXJSZW5kZXJlcigpOworCisgICAgLy8gVGVtcG9y
YXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGguCisjaWYgIVVTRShU
SFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGRvQ29tcG9zaXRlKCk7CisgICAgdm9pZCBy
ZWFsbG9jYXRlUmVuZGVyZXIoKTsKKworICAgIGJvb2wgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250
ZXh0OworICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsK
KyNlbmRpZgorCisgICAgYm9vbCBtX2FuaW1hdGluZzsKKwogICAgIENDTGF5ZXJUcmVlSG9zdENs
aWVudCogbV9jbGllbnQ7CisKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKKwogICAgIE93blB0cjxD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IG1fcHJveHk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gbV9yb290TGF5ZXI7CisgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOworCisgICAgSW50
UmVjdCBtX3ZpZXdwb3J0VmlzaWJsZVJlY3Q7CisgICAgSW50UmVjdCBtX3ZpZXdwb3J0Q29udGVu
dFJlY3Q7CisgICAgSW50UG9pbnQgbV92aWV3cG9ydFNjcm9sbFBvc2l0aW9uOwogfTsKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBhM2FhMmJhMjEwZGJk
ZGQxNmI5Y2ExYWQxMmU2MTE1NTU4YjJhYjM3Li40ZTJkMWI4NDNjMTgzMmNmYWZhMTQzNTQ4NjJj
YmZhMTUzODY2OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApA
QCAtMjYsMTggKzI2LDI5IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgi
CiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYWNl
RXZlbnQuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9D
Q01haW5UaHJlYWQuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0
SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCitQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBy
ZW5kZXJlcikKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwo
Y2xpZW50LCByZW5kZXJlcikpOworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJl
ZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKQogICAgIDogbV9zb3VyY2VGcmFtZU51bWJl
cigtMSkKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAg
ICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fbGF5ZXJSZW5kZXJlcihyZW5kZXJl
cikKICAgICAsIG1fcmVkcmF3UGVuZGluZyhmYWxzZSkKIHsKIH0KQEAgLTcwLDcgKzgxLDE2IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCiAKICAgICB7CiAgICAgICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCIs
IHRoaXMsIDApOwotICAgICAgICBkcmF3TGF5ZXJzQW5kUHJlc2VudCgpOworICAgICAgICBDQ0Nv
bXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgICAgICBib29sIGNvbnRleHRMb3N0OworICAg
ICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZD
Q0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzT25NYWluVGhyZWFkLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29udGV4dExv
c3QpKSk7CisgICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgICAgIC8vIEZJWE1FOiBT
ZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBt
b3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4uXQorCisgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29u
dGV4dCBsb3N0CisgICAgICAgIGlmIChjb250ZXh0TG9zdCkKKyAgICAgICAgICAgIEZBVEFMKCJM
YXllclJlbmRlcmVyQ2hyb21pdW1JbXBsIGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0
LiIpOwogICAgIH0KIAogICAgICsrbV9mcmFtZU51bWJlcjsKQEAgLTk2LDQgKzExNiwxOSBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKICAgICBtX2NsaWVudC0+
cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRp
b24sIGJvb2wqIGNvbnRleHRMb3N0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBpZiAobV9sYXllclJlbmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkgeworICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5wcmVzZW50KCk7CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2xh
eWVyUmVuZGVyZXItPmNvbnRleHQoKTsKKyAgICAgICAgKmNvbnRleHRMb3N0ID0gY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6Ok5PX0VSUk9SOworICAgIH0gZWxzZQorICAgICAgICAqY29udGV4dExvc3QgPSBm
YWxzZTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDA4MDVjN2E0ZWI1ODI1Y2M5MTk0NDEwZjFmMTEyNTUx
OWRmNWRhNTIuLmM0MTFjY2M3MzU1NGYxZGQzMmJjY2UyZTE1ZTQ4ZGJlY2FjNGE4OGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTMxLDYgKzMxLDkgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsKK2NsYXNzIExheWVy
UmVuZGVyZXJDaHJvbWl1bTsKKwogLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZyYXN0cnVjdHVy
ZSBmb3IgYSBDQ0xheWVyVHJlZUhvc3RJbXBsCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xp
ZW50ICB7CiBwdWJsaWM6CkBAIC00NSwxNCArNDgsMTMgQEAgcHJvdGVjdGVkOgogY2xhc3MgQ0NM
YXllclRyZWVIb3N0SW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVI
b3N0SW1wbCk7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0SW1wbChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdElt
cGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9p
ZCBjb21taXRDb21wbGV0ZSgpOwogCiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdMYXllcnNBbmRQcmVzZW50KCkgPSAwOwogCiAgICAgaW50IGZyYW1lTnVtYmVy
KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQogCkBAIC02MywxMiArNjUsMTUgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50IGZyYW1lTnVtYmVyKSB7
IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQogCiBwcm90ZWN0ZWQ6CisgICAg
Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0
cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+KTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbk1haW5UaHJl
YWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBjb250ZXh0TG9zdCk7CiAgICAgaW50IG1fc291
cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKIHByaXZhdGU6CiAgICAg
Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9jbGllbnQ7CiAgICAgYm9vbCBtX2NvbW1pdFBl
bmRpbmc7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVy
OwogICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKaW5kZXggNjhhMjUxYWU0MTNmOTNkYTU1M2JiZmE4
ZDhkNjk0ZTA1ZmVhYjg4Ny4uZTI1NWE5NGUzY2UxODhlMjI2ZmMwYTIzYzNkYWY0OTczNzljOWFi
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCkBA
IC0yMDEsNyArMjAxLDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBs
T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKICAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQiLCB0aGlz
LCAwKTsKICAgICBBU1NFUlQoaXNDQ1RocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBs
ID0gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0g
bV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKICAgICBjb21w
bGV0aW9uLT5zaWduYWwoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0M2Q0
MjUwMGZmNzc0OTQwYzZiYWE2ODBmNDMxNmM0MDlhMzk3YzI5Li4yOTg0YTI1NGM3MWY3Y2QzYmM3
MjI2ZmY2ZTI2NTQyNWQ1NzhmZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM2IEBACisyMDExLTA4LTA1ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBbY2hyb21pdW1dIE1ha2UgV2ViVmlld0ltcGwgcG9pbnQgYXQgQ0NMYXllclRyZWVI
b3N0IGFuZCByZWxhdGVkIHNlcGFyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY1NzkxCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCBMYXll
clJlbmRlcmVyQ2hyb21pdW0gYmVjb21lcyBpbmNyZWFzaW5nbHkgcmVzcG9uc2libGUKKyAgICAg
ICAgZm9yIHJlbmRlcmluZywgd2hpbGUgcmVuZGVyIHNjaGVkdWxpbmcgYW5kIHRyZWUgaG9zdGlu
ZyBtb3ZlcyBpbnRvIHRoZQorICAgICAgICBDQ0xheWVyVHJlZUhvc3QuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6cmVzaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OmFuaW1hdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZG9QaXhlbFJlYWRi
YWNrVG9DYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6cGFpbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnNldFJvb3RQbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlld0ltcGw6OnNldFJvb3RMYXllck5lZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
d0ltcGw6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Z2V0Q29t
cG9zaXRvclNldHRpbmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBs
OjpjcmVhdGVSb290TGF5ZXJQYWludGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmFuaW1hdGVBbmRMYXlvdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZGlkUmVj
cmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2No
ZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlTGF5
ZXJUcmVlVmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Z3JhcGhpY3ND
b250ZXh0M0QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0VmlzaWJpbGl0eVN0
YXRlKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMS0wOC0xMCAgSm9obiBB
YmQtRWwtTWFsZWsgIDxqYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gVXBk
YXRlIFdlYlNjcm9sbGJhciBzbyB0aGF0IGl0IHdvcmtzIHdpdGggb3ZlcmxheSBzY3JvbGxiYXJz
IG9uIExpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRl
eCA3ZDJkZjQzMWU0YjM2NjQ2NDE5NTljNmI0ZGZlNDBjYjM0NzI0YzI2Li44ZjgzODA4YzY5MWU5
NmE5MmNlMzU5ZjEyNzgzNTAwZWQwMjYyMGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCkBAIC0zMzksNyArMzM5LDYgQEAgV2ViVmlld0ltcGw6OldlYlZp
ZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVudCkKICAgICAsIG1fdGFic1RvTGlua3MoZmFsc2Up
CiAgICAgLCBtX2RyYWdTY3JvbGxUaW1lcihhZG9wdFB0cihuZXcgRHJhZ1Njcm9sbFRpbWVyKSkK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgLCBtX2xheWVyUmVuZGVyZXIo
MCkKICAgICAsIG1fcm9vdEdyYXBoaWNzTGF5ZXIoMCkKICAgICAsIG1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlKGZhbHNlKQogICAgICwgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQo
ZmFsc2UpCkBAIC0xMDI5LDcgKzEwMjgsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZXNpemUoY29u
c3QgV2ViU2l6ZSYgbmV3U2l6ZSkKICAgICBpZiAobV9jbGllbnQpIHsKICAgICAgICAgaWYgKGlz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgpKSB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotICAgICAgICAgICAgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7Cisg
ICAgICAgICAgICB1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpOwogI2VuZGlmCiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBXZWJSZWN0IGRhbWFnZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0
aCwgbV9zaXplLmhlaWdodCk7CkBAIC0xMDYxLDExICsxMDYwLDE1IEBAIHZvaWQgV2ViVmlld0lt
cGw6OmFuaW1hdGUoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogICAgIGlmICh3ZWJmcmFtZSkgewog
ICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSB3ZWJmcmFtZS0+ZnJhbWVWaWV3KCk7CiAgICAgICAg
IGlmICh2aWV3KSB7Ci0gICAgICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICAg
ICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0SXNBbmltYXRpbmcodHJ1ZSk7CisjaWYgIVVTRShU
SFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisg
ICAgICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRBbmltYXRpbmcodHJ1ZSk7CisjZW5k
aWYKICAgICAgICAgICAgIHZpZXctPnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoY29udmVydFNl
Y29uZHNUb0RPTVRpbWVTdGFtcChmcmFtZUJlZ2luVGltZSkpOwotICAgICAgICAgICAgaWYgKG1f
bGF5ZXJSZW5kZXJlcikKLSAgICAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnNldElzQW5p
bWF0aW5nKGZhbHNlKTsKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgICAgICAg
ICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldEFuaW1hdGluZyhmYWxzZSk7CisjZW5kaWYKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpA
QCAtMTExNSw3ICsxMTE4LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZG9QaXhlbFJlYWRiYWNrVG9D
YW52YXMoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IEludFJlY3QmIHJlY3QKICAgICBPd25QdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCkp
KTsKICAgICBSZWZQdHI8Qnl0ZUFycmF5PiBwaXhlbEFycmF5KEJ5dGVBcnJheTo6Y3JlYXRlKHJl
Y3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KSk7CiAgICAgaWYgKGltYWdlQnVmZmVyLmdl
dCgpICYmIHBpeGVsQXJyYXkuZ2V0KCkpIHsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5nZXRG
cmFtZWJ1ZmZlclBpeGVscyhwaXhlbEFycmF5LT5kYXRhKCksIGludmVydFJlY3QpOworICAgICAg
ICBtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHBpeGVsQXJyYXktPmRhdGEo
KSwgaW52ZXJ0UmVjdCk7CiAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKHBpeGVsQXJyYXkuZ2V0KCksIHJlY3Quc2l6ZSgpLCBJbnRSZWN0KEludFBvaW50KCks
IHJlY3Quc2l6ZSgpKSwgSW50UG9pbnQoKSk7CiAgICAgICAgIGdjLnNhdmUoKTsKICAgICAgICAg
Z2MudHJhbnNsYXRlKEludFNpemUoMCwgYml0bWFwSGVpZ2h0KSk7CkBAIC0xMTMyLDE4ICsxMTM1
LDEyIEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBX
ZWJSZWN0JiByZWN0KQogewogICAgIGlmIChpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
KSkgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpZiBVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCi0gICAgICAgIC8vIEZJWE1FOiBkbyByZWFkYmFjayBpbiB0aHJlYWRlZCBj
b21wb3NpdGluZyBtb2RlIHJhdGhlciB0aGFuIHJldHVybmluZyBub3RoaW5nCi0gICAgICAgIHJl
dHVybjsKLSNlbmRpZgotICAgICAgICBkb0NvbXBvc2l0ZSgpOwotCiAgICAgICAgIC8vIElmIGEg
Y2FudmFzIHdhcyBwYXNzZWQgaW4sIHdlIHVzZSBpdCB0byBncmFiIGEgY29weSBvZiB0aGUKICAg
ICAgICAgLy8gZnJlc2hseS1yZW5kZXJlZCBwaXhlbHMuCiAgICAgICAgIGlmIChjYW52YXMpIHsK
ICAgICAgICAgICAgIC8vIENsaXAgcmVjdCB0byB0aGUgY29uZmluZXMgb2YgdGhlIHJvb3RMYXll
clRleHR1cmUuCiAgICAgICAgICAgICBJbnRSZWN0IHJlc2l6ZVJlY3QocmVjdCk7Ci0gICAgICAg
ICAgICByZXNpemVSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIG1fbGF5ZXJSZW5k
ZXJlci0+dmlld3BvcnRTaXplKCkpKTsKKyAgICAgICAgICAgIHJlc2l6ZVJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoMCwgMCksIG1fbGF5ZXJUcmVlSG9zdC0+dmlld3BvcnRWaXNpYmxl
UmVjdCgpLnNpemUoKSkpOwogICAgICAgICAgICAgZG9QaXhlbFJlYWRiYWNrVG9DYW52YXMoY2Fu
dmFzLCByZXNpemVSZWN0KTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0xMTY5LDQ2ICsxMTY2LDIw
IEBAIHZvaWQgV2ViVmlld0ltcGw6OnRoZW1lQ2hhbmdlZCgpCiAgICAgdmlldy0+aW52YWxpZGF0
ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKLXsKLSAgICBhbmltYXRlKGZyYW1lQmVnaW5UaW1l
KTsKLSAgICBsYXlvdXQoKTsKLX0KLQogdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wg
ZmluaXNoKQogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpZiBVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCi0gICAgbV9sYXllclJlbmRlcmVyLT5zZXROZWVkc1JlZHJhdygp
OworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNSZWRyYXcoKTsKICNlbHNlCi0gICAgVFJB
Q0VfRVZFTlQoIldlYlZpZXdJbXBsOjpjb21wb3NpdGUiLCB0aGlzLCAwKTsKLQotICAgIGlmICht
X3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQpIHsKLSAgICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRl
cmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hldGhlciBvciBub3QgaXQgc3VjY2VlZGVkCi0g
ICAgICAgIC8vIGluIGNyZWF0aW5nIGEgbmV3IGNvbnRleHQuCi0gICAgICAgIHJlYWxsb2NhdGVS
ZW5kZXJlcigpOwotICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSBmYWxzZTsK
KyAgICBBU1NFUlQoaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKCkpOworICAgIGlmICgh
cGFnZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRG8gbm90IGNvbXBvc2l0
ZSBpZiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGlzIGFscmVhZHkgbG9zdC4KLSAgICBpZiAoIW1f
bGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgewotICAgICAgICBkb0Nv
bXBvc2l0ZSgpOwogCi0gICAgICAgIC8vIFB1dCByZXN1bHQgb25zY3JlZW4uCi0gICAgICAgIG1f
bGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOwotICAgIH0KKyAgICBpZiAobV9wYWdlT3ZlcmxheSkK
KyAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CiAKLSAgICBpZiAobV9sYXllclJlbmRl
cmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIC8vIFRyeWluZyB0byBy
ZWNvdmVyIHRoZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2lsbCBub3Qgd29yayBpZiBHUFUgcHJvY2Vz
cwotICAgICAgICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1c2UgR3B1Q2hhbm5lbEhvc3Q6Ok9uRXJy
b3JNZXNzYWdlIHdpbGwgb25seSBiZQotICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRl
cmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVydGluZyBvdXIKLSAgICAgICAgLy8gcmVj
b3ZlcnkgYXR0ZW1wdHMgaGVyZS4gSW5zdGVhZCwgd2UgZGV0YWNoIHRoZSByb290IGxheWVyIGZy
b20gdGhlCi0gICAgICAgIC8vIHJlbmRlcmVyLCByZWNyZWF0ZSB0aGUgcmVuZGVyZXIgYXQgdGhl
IG5leHQgbWVzc2FnZSBsb29wIGl0ZXJhdGlvbgotICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJl
cGFpbnQgeWV0IGFnYWluLgotICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSB0
cnVlOwotICAgICAgICBzZXRSb290TGF5ZXJOZWVkc0Rpc3BsYXkoKTsKLSAgICB9CisgICAgbV9s
YXllclRyZWVIb3N0LT5jb21wb3NpdGUoZmluaXNoKTsKICNlbmRpZgogI2VuZGlmCiB9CkBAIC0y
NDkxLDggKzI0NjIsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikKIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RQ
bGF0Zm9ybUxheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogewogICAgIHNldElz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShsYXllcik7Ci0gICAgaWYgKG1fbGF5ZXJSZW5k
ZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRSb290TGF5ZXIobGF5ZXIpOworICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExh
eWVyKGxheWVyKTsKIAogICAgIEludFJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRo
LCBtX3NpemUuaGVpZ2h0KTsKICAgICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUpCkBAIC0yNTA0LDMxICsyNDc1LDMwIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldFJvb3RQbGF0
Zm9ybUxheWVyKFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqIGxheWVyKQogdm9pZCBXZWJWaWV3SW1w
bDo6c2V0Um9vdExheWVyTmVlZHNEaXNwbGF5KCkKIHsKICNpZiBVU0UoVEhSRUFERURfQ09NUE9T
SVRJTkcpCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKICNlbHNl
CiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CiAjZW5kaWYKIH0KIAotCiB2b2lk
IFdlYlZpZXdJbXBsOjpzY3JvbGxSb290TGF5ZXJSZWN0KGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKLSAgICB1cGRhdGVMYXllclJlbmRlcmVy
Vmlld3BvcnQoKTsKKyAgICB1cGRhdGVMYXllclRyZWVWaWV3cG9ydCgpOwogICAgIHNldFJvb3RM
YXllck5lZWRzRGlzcGxheSgpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjppbnZhbGlkYXRlUm9v
dExheWVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChtX2xheWVyUmVu
ZGVyZXIpOworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOwogCiAgICAgaWYgKCFwYWdlKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIEZyYW1lVmlldyogdmlldyA9IHBhZ2UoKS0+bWFpbkZy
YW1lKCktPnZpZXcoKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHZpZXctPndpbmRvd1RvQ29u
dGVudHMocmVjdCk7Ci0gICAgdXBkYXRlTGF5ZXJSZW5kZXJlclZpZXdwb3J0KCk7Ci0gICAgbV9s
YXllclJlbmRlcmVyLT5pbnZhbGlkYXRlUm9vdExheWVyUmVjdChkaXJ0eVJlY3QpOworICAgIHVw
ZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5pbnZhbGlkYXRl
Um9vdExheWVyUmVjdChkaXJ0eVJlY3QpOwogICAgIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgp
OwogfQogCkBAIC0yNTc1LDIwICsyNTQ1LDI1IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgLy8gV2UgbmVl
ZCB0byBmaW5pc2ggYWxsIEdMIHJlbmRlcmluZyBiZWZvcmUgc2VuZGluZwogICAgICAgICAvLyBk
aWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoZmFsc2UpIHRvIHByZXZlbnQKICAgICAg
ICAgLy8gZmxpY2tlcmluZyB3aGVuIGNvbXBvc2l0aW5nIHR1cm5zIG9mZi4KLSAgICAgICAgaWYg
KG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7
CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpCisgICAgICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPmZpbmlzaEFsbFJlbmRlcmluZygpOwogICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKGZhbHNlKTsKLSAgICB9IGVsc2UgaWYgKG1fbGF5ZXJSZW5k
ZXJlcikgeworICAgIH0gZWxzZSBpZiAobV9sYXllclRyZWVIb3N0KSB7CiAgICAgICAgIG1faXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgdXBkYXRlTGF5ZXJS
ZW5kZXJlclZpZXdwb3J0KCk7CisgICAgICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAK
ICAgICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVl
KTsKICAgICB9IGVsc2UgewogICAgICAgICBUUkFDRV9FVkVOVCgiV2ViVmlld0ltcGw6OnNldElz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSh0cnVlKSIsIHRoaXMsIDApOwogCi0gICAgICAg
IG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIFdl
YlZpZXdJbXBsQ29udGVudFBhaW50ZXI6OmNyZWF0ZSh0aGlzKSwgbV9wYWdlLT5zZXR0aW5ncygp
LT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpOwotICAgICAgICBpZiAobV9sYXllclJlbmRl
cmVyKSB7Ci0gICAgICAgICAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3MoKTsKKyAgICAg
ICAgV2ViQ29yZTo6Q0NTZXR0aW5ncyBjY1NldHRpbmdzOworICAgICAgICBjY1NldHRpbmdzLmFj
Y2VsZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCgpOworICAgICAgICBjY1NldHRpbmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IHNldHRp
bmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKTsKKyAgICAgICAgY2NTZXR0aW5ncy5z
aG93RlBTQ291bnRlciA9IHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCk7CisgICAgICAgIGNj
U2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3Jt
TGF5ZXJUcmVlKCk7CisKKyAgICAgICAgbV9sYXllclRyZWVIb3N0ID0gQ0NMYXllclRyZWVIb3N0
OjpjcmVhdGUodGhpcywgY2NTZXR0aW5ncyk7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3Qp
IHsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmcodHJ1ZSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSA9
IHRydWU7CiAgICAgICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZhaWxlZCA9IGZhbHNlOwpA
QCAtMjYwNCwyNCArMjU3OSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgcGFnZSgpLT5tYWluRnJhbWUo
KS0+dmlldygpLT5zZXRDbGlwc1JlcGFpbnRzKCFtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSk7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OmRvQ29tcG9zaXRlKCkKLXsKLSAgICBBU1NF
UlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikgewotICAgICAg
ICBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoZmFsc2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSgp
KTsKLSAgICBpZiAoIXBhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGFnZU92
ZXJsYXkpCi0gICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOwotCi0gICAgbV9sYXllclJl
bmRlcmVyLT51cGRhdGVMYXllcnMoKTsKLSAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMo
KTsKLX0KKyNlbmRpZgogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBXZWJWaWV3SW1w
bDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCiB7CkBAIC0yNjM0LDQ2ICsyNTkyLDM4
IEBAIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IFdlYlZpZXdJbXBsOjpjcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKCkKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotdm9pZCBXZWJW
aWV3SW1wbDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKK1Bhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hy
b21pdW0+IFdlYlZpZXdJbXBsOjpjcmVhdGVSb290TGF5ZXJQYWludGVyKCkKIHsKLSAgICAvLyBH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0
IGNhc2UgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUgd2lsbCBhbHNvIHJldHVybiAwLgot
ICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBXZWJWaWV3SW1wbENvbnRlbnRQYWludGVyOjpj
cmVhdGUodGhpcyksIG1fcGFnZS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZCgpKTsKKyAgICByZXR1cm4gV2ViVmlld0ltcGxDb250ZW50UGFpbnRlcjo6Y3JlYXRlKHRoaXMp
OworfQogCi0gICAgLy8gUmVhdHRhY2ggdGhlIHJvb3QgbGF5ZXIuICBDaGlsZCBsYXllcnMgd2ls
bCBnZXQgcmVhdHRhY2hlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHVwZGF0ZUxheWVyc1JlY3Vyc2l2
ZS4KLSAgICBpZiAobGF5ZXJSZW5kZXJlcikgewotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnRy
YW5zZmVyUm9vdExheWVyKGxheWVyUmVuZGVyZXIuZ2V0KCkpOwotICAgICAgICBtX2xheWVyUmVu
ZGVyZXIgPSBsYXllclJlbmRlcmVyOwotICAgICAgICB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGlu
Z3MoKTsKK3ZvaWQgV2ViVmlld0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVn
aW5UaW1lKQoreworICAgIGFuaW1hdGUoZnJhbWVCZWdpblRpbWUpOworICAgIGxheW91dCgpOwor
fQogCi0gICAgICAgIC8vIEZJWE1FOiBJbiBNYWNPUyBuZXdDb250ZXh0LT5yZXNoYXBlIG1ldGhv
ZCBuZWVkcyB0byBiZSBjYWxsZWQgdG8KLSAgICAgICAgLy8gYWxsb2NhdGUgSU9TdXJmYWNlcy4g
QWxsIGNhbGxzIHRvIGNyZWF0ZSBhIGNvbnRleHQgZm9sbG93ZWQgYnkKLSAgICAgICAgLy8gcmVz
aGFwZSBzaG91bGQgcmVhbGx5IGJlIGV4dHJhY3RlZCBpbnRvIG9uZSBmdW5jdGlvbjsgaXQgaXMg
bm90Ci0gICAgICAgIC8vIGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCBHcmFwaGljc0NvbnRleHQz
RCBvYmplY3Qgd2lsbCBub3QKLSAgICAgICAgLy8gZnVuY3Rpb24gcHJvcGVybHkgdW50aWwgaXRz
IHJlc2hhcGUgbWV0aG9kIGlzIGNhbGxlZC4KLSAgICAgICAgbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpLT5yZXNoYXBlKG1heCgxLCBtX3NpemUud2lkdGgpLCBtYXgoMSwgbV9zaXplLmhlaWdodCkp
OwotICAgICAgICBzZXRSb290UGxhdGZvcm1MYXllcihtX2xheWVyUmVuZGVyZXItPnJvb3RMYXll
cigpKTsKK3ZvaWQgV2ViVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wg
c3VjY2VzcykKK3sKKyAgICBzZXRSb290UGxhdGZvcm1MYXllcihzdWNjZXNzID8gbV9sYXllclRy
ZWVIb3N0LT5yb290TGF5ZXIoKSA6IDApOwogCi0gICAgICAgIC8vIEZvcmNlcyBWaWV3SG9zdE1z
Z19EaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcgdG8gYmUgc2VudCBzbwotICAgICAg
ICAvLyB0aGF0IHRoZSBicm93c2VyIHByb2Nlc3MgY2FuIHJlYWNxdWlyZSBzdXJmYWNlcy4KLSAg
ICAgICAgbV9jbGllbnQtPmRpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyh0cnVlKTsK
LSAgICAgICAgaWYgKG1fcGFnZU92ZXJsYXkpCi0gICAgICAgICAgICBtX3BhZ2VPdmVybGF5LT51
cGRhdGUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2V0Um9vdFBsYXRmb3JtTGF5ZXIoMCk7Cisg
ICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgIC8vIEZvcmNlcyBWaWV3SG9zdE1zZ19EaWRBY3RpdmF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcgdG8gYmUgc2VudCBzbworICAgICAgLy8gdGhhdCB0aGUg
YnJvd3NlciBwcm9jZXNzIGNhbiByZWFjcXVpcmUgc3VyZmFjZXMuCisgICAgICBtX2NsaWVudC0+
ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOworICAgICAgaWYgKG1fcGFn
ZU92ZXJsYXkpCisgICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CisgICAgfQogfQot
I2VuZGlmCiAKLXZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZUxheWVyUmVuZGVyZXJTZXR0aW5ncygp
CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKK3ZvaWQgV2ViVmlld0ltcGw6OnNjaGVk
dWxlQ29tcG9zaXRlKCkKIHsKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBtX2xh
eWVyUmVuZGVyZXItPnNldENvbXBvc2l0ZU9mZnNjcmVlbihzZXR0aW5ncygpLT5jb21wb3NpdGVU
b1RleHR1cmVFbmFibGVkKCkpOwotCi0gICAgQ0NIZWFkc1VwRGlzcGxheSogaHVkID0gbV9sYXll
clJlbmRlcmVyLT5oZWFkc1VwRGlzcGxheSgpOwotICAgIGh1ZC0+c2V0U2hvd0ZQU0NvdW50ZXIo
c2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIoKSk7Ci0gICAgaHVkLT5zZXRTaG93UGxhdGZvcm1M
YXllclRyZWUoc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCkpOworICAgIG1fY2xp
ZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOwogfQorI2VuZGlmCiAKLXZvaWQgV2ViVmlld0ltcGw6
OnVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpCit2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVM
YXllclRyZWVWaWV3cG9ydCgpCiB7CiAgICAgaWYgKCFwYWdlKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTI2ODMsMTUgKzI2MzMsMTUgQEAgdm9pZCBXZWJWaWV3SW1wbDo6dXBkYXRlTGF5ZXJSZW5k
ZXJlclZpZXdwb3J0KCkKICAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdmlldy0+dmlzaWJsZUNv
bnRlbnRSZWN0KHRydWUpOwogICAgIEludFBvaW50IHNjcm9sbCh2aWV3LT5zY3JvbGxYKCksIHZp
ZXctPnNjcm9sbFkoKSk7CiAKLSAgICBtX2xheWVyUmVuZGVyZXItPnNldFZpZXdwb3J0KHZpc2li
bGVSZWN0LCBjb250ZW50UmVjdCwgc2Nyb2xsKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNldFZp
ZXdwb3J0KHZpc2libGVSZWN0LCBjb250ZW50UmVjdCwgc2Nyb2xsKTsKIH0KIAogV2ViR3JhcGhp
Y3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpncmFwaGljc0NvbnRleHQzRCgpCiB7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGlmIChtX3BhZ2UtPnNldHRpbmdzKCktPmFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkgJiYgYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpKSB7Ci0gICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgICAgIFdl
YkdyYXBoaWNzQ29udGV4dDNEKiB3ZWJDb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6ZXh0cmFjdFdlYkdyYXBoaWNzQ29udGV4dDNEKG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgp
KTsKKyAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICAgICAgV2ViR3JhcGhp
Y3NDb250ZXh0M0QqIHdlYkNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpleHRy
YWN0V2ViR3JhcGhpY3NDb250ZXh0M0QobV9sYXllclRyZWVIb3N0LT5jb250ZXh0KCkpOwogICAg
ICAgICAgICAgaWYgKHdlYkNvbnRleHQgJiYgIXdlYkNvbnRleHQtPmlzQ29udGV4dExvc3QoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gd2ViQ29udGV4dDsKICAgICAgICAgfQpAQCAtMjcyMyw4
ICsyNjczLDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0VmlzaWJpbGl0eVN0YXRlKFdlYlBhZ2VW
aXNpYmlsaXR5U3RhdGUgdmlzaWJpbGl0eVN0YXRlLAogI2VuZGlmCiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSgpICYmIHZpc2liaWxpdHlTdGF0ZSA9PSBXZWJQYWdlVmlzaWJpbGl0eVN0YXRlSGlkZGVuKQot
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJlbGVhc2VUZXh0dXJlcygpOworICAgIGlmIChpc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoKSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRWaXNpYmxlKHZpc2liaWxpdHlTdGF0ZSA9PSBXZWJQYWdlVmlzaWJpbGl0eVN0YXRlVmlzaWJs
ZSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
aW5kZXggNmVlMjI2YjkzNmExZjY5MGQwZDI0Y2RiYWRjMTFlOWZiMzFjMThiZS4uNGEyYTI5ZWNi
OTgyZjdiNjYxN2Q2NDU5NGVjODU3MjVjM2I1MDJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5oCkBAIC00Niw5ICs0Niw5IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NM
YXllci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEltcGwuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm90
aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTIxMSw2ICsyMTEsMTEgQEAgcHVibGljOgog
ICAgIC8vIENDTGF5ZXJUcmVlSG9zdENsaWVudAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5k
TGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7
CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkxheWVyUGFpbnRlckNocm9taXVtPiBj
cmVhdGVSb290TGF5ZXJQYWludGVyKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlR3Jh
cGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKTsKKyNlbmRpZgogCiAgICAg
Ly8gV2ViVmlld0ltcGwKIApAQCAtNDM2LDExICs0NDEsMTIgQEAgcHJpdmF0ZToKIAogI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZShib29sKTsKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAg
IHZvaWQgZG9Db21wb3NpdGUoKTsKKyNlbmRpZgogICAgIHZvaWQgZG9QaXhlbFJlYWRiYWNrVG9D
YW52YXMoV2ViQ2FudmFzKiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZvaWQgcmVh
bGxvY2F0ZVJlbmRlcmVyKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclJlbmRlcmVyU2V0dGluZ3Mo
KTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUmVuZGVyZXJWaWV3cG9ydCgpOworICAgIHZvaWQgdXBk
YXRlTGF5ZXJUcmVlVmlld3BvcnQoKTsKICNlbmRpZgogCiAgICAgV2ViVmlld0NsaWVudCogbV9j
bGllbnQ7CkBAIC01NTcsNyArNTYzLDcgQEAgcHJpdmF0ZToKIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fcm9vdExheWVyU2Nyb2xsRGFt
YWdlOwotICAgIFJlZlB0cjxXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJS
ZW5kZXJlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0PiBtX2xheWVyVHJl
ZUhvc3Q7CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9yb290R3JhcGhpY3NMYXllcjsK
ICAgICBib29sIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlOwogICAgIGJvb2wgbV9j
b21wb3NpdG9yQ3JlYXRpb25GYWlsZWQ7Cg==
</data>
<flag name="review"
          id="99374"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>