<?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>71023</bug_id>
          
          <creation_ts>2011-10-27 08:54:46 -0700</creation_ts>
          <short_desc>[chromium] Paint directly to shared memory buffers</short_desc>
          <delta_ts>2011-11-11 15:26:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>72191</dup_id>
          
          <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="David Reveman">reveman</reporter>
          <assigned_to name="David Reveman">reveman</assigned_to>
          <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>levin+threading</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>491620</commentid>
    <comment_count>0</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-10-27 08:54:46 -0700</bug_when>
    <thetext>Instead of painting to temporary buffers and copying to shared memory buffers used for texture uploads. Paint directly to shared memory buffers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491715</commentid>
    <comment_count>1</comment_count>
      <attachid>112706</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-10-27 10:52:01 -0700</bug_when>
    <thetext>Created attachment 112706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491718</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-27 10:54:08 -0700</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491746</commentid>
    <comment_count>3</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-10-27 11:19:44 -0700</bug_when>
    <thetext>Adds chromium command-line switch --enable-shared-memory-painting: http://codereview.chromium.org/8413006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491765</commentid>
    <comment_count>4</comment_count>
      <attachid>112706</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-10-27 11:30:15 -0700</bug_when>
    <thetext>Comment on attachment 112706
Patch

WebKit API changes LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491770</commentid>
    <comment_count>5</comment_count>
      <attachid>112706</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-27 11:38:13 -0700</bug_when>
    <thetext>Comment on attachment 112706
Patch

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

I don&apos;t understand why you are adding extra &apos;prepare&apos; steps to painting and uploading. Could you elaborate?

&gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.h:109
&gt; +    LayerTextureUpdaterShm(PassOwnPtr&lt;LayerPainterChromium&gt;);

explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491774</commentid>
    <comment_count>6</comment_count>
      <attachid>112706</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-27 11:42:56 -0700</bug_when>
    <thetext>Comment on attachment 112706
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:401
&gt; +        // Blocking call to CCThreadProxy::allocateOnImplThread
&gt; +        TRACE_EVENT(&quot;allocate&quot;, this, 0);
&gt; +        CCCompletionEvent completion;
&gt; +        s_ccThread-&gt;postTask(createCCThreadTask(this, &amp;CCThreadProxy::allocateOnImplThread, AllowCrossThreadAccess(&amp;completion)));
&gt; +        completion.wait();

woah what? This is not right at all!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491777</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-27 11:44:21 -0700</bug_when>
    <thetext>It looks like you are trying to map the shared memory segments before doing the paint, but you shouldn&apos;t need to do that when painting to an SkPicture - you only need the shared memory segment to exist when playing back the SkPicture into tiles. This change would be significantly less invasive if you did that map only when the segment was actually needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491808</commentid>
    <comment_count>8</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-10-27 12:16:32 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; It looks like you are trying to map the shared memory segments before doing the paint, but you shouldn&apos;t need to do that when painting to an SkPicture - you only need the shared memory segment to exist when playing back the SkPicture into tiles. This change would be significantly less invasive if you did that map only when the segment was actually needed.

Yes, but that would mean that the SkPicture playback would happen on the impl thread. There&apos;s a few reasons I don&apos;t like that idea. The compositor thread gets busier, less time to redraw as a result of scroll changes. An out-of-process compositor becomes significantly harder to create as we now have to transfer SkPictures between processes. It will be important to keep the compositor lightweight and responsive for the long term unified compositor case where multiple processes are talking to it. The PBO patch I&apos;m working on also builds on top of this patch and allows painting directly to shared memory without using a SkPicture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491822</commentid>
    <comment_count>9</comment_count>
      <attachid>112730</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-10-27 12:29:02 -0700</bug_when>
    <thetext>Created attachment 112730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491826</commentid>
    <comment_count>10</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-10-27 12:32:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 112706 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112706&amp;action=review
&gt; 
&gt; I don&apos;t understand why you are adding extra &apos;prepare&apos; steps to painting and uploading. Could you elaborate?

Plumbing to allow allocation of compositor resources before painting of layer contents. I assume you understand the reason for this after on my previous comment.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.h:109
&gt; &gt; +    LayerTextureUpdaterShm(PassOwnPtr&lt;LayerPainterChromium&gt;);
&gt; 
&gt; explicit

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491830</commentid>
    <comment_count>11</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-10-27 12:37:20 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 112706 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112706&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:401
&gt; &gt; +        // Blocking call to CCThreadProxy::allocateOnImplThread
&gt; &gt; +        TRACE_EVENT(&quot;allocate&quot;, this, 0);
&gt; &gt; +        CCCompletionEvent completion;
&gt; &gt; +        s_ccThread-&gt;postTask(createCCThreadTask(this, &amp;CCThreadProxy::allocateOnImplThread, AllowCrossThreadAccess(&amp;completion)));
&gt; &gt; +        completion.wait();
&gt; 
&gt; woah what? This is not right at all!

On the condition that we want to allow compositor resource allocation before painting, please elaborate if there&apos;s still something wrong here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491876</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-27 13:30:54 -0700</bug_when>
    <thetext>Sorry for jumping in without full context, Nat filled me in on what&apos;s up here.

I like the idea of keeping rasterization out of the critical path.  I think we should approach this piece-by-piece to keep it a bit more manageable:

1.) Add support for painting into an SkPicture and then rasterizing into tile-sized chunks
2.) Add support for doing the playback into mapped memory segments to avoid an extra memcpy()

Doing step (1) first will give us a lot of flexibility down the road.  To get (2) done effectively I think we&apos;ll want to refactor the way we do layer iterations to make it more general - this patch adds a few copy-pasted layer iterations that are going to be a headache to maintain IMO.

Would you mind breaking (1) out into its own patch and doing it first? It&apos;d be really useful for many things we are considering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491878</commentid>
    <comment_count>13</comment_count>
      <attachid>112730</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-27 13:33:07 -0700</bug_when>
    <thetext>Comment on attachment 112730
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/ManagedTexture.cpp:108
&gt; +    m_mappedBuffer = static_cast&lt;uint8_t*&gt;(extensions-&gt;mapTexSubImage2DCHROMIUM(GraphicsContext3D::TEXTURE_2D, 0, destRect.x(), destRect.y(), destRect.width(), destRect.height(), m_format, GraphicsContext3D::UNSIGNED_BYTE, Extensions3DChromium::WRITE_ONLY));

keep in mind this call can fail and return NULL - you have to be deal with that case (generally by malloc()ing a buffer and using texSubImage2D)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491903</commentid>
    <comment_count>14</comment_count>
      <attachid>112730</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-10-27 13:51:33 -0700</bug_when>
    <thetext>Comment on attachment 112730
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:156
&gt; +void TiledLayerChromium::prepareCompositorResources(GraphicsContext3D* context, CCTextureUpdater&amp; updater)

This also looks mostly like a copy-paste of updateCompositorResources()

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:430
&gt; +void CCLayerTreeHost::prepareCompositorResources(GraphicsContext3D* context, CCTextureUpdater&amp; updater)

I think that functions like this are not going to be maintainable. This is almost entirely a copy-paste of updateCompositorResources() - it seems like what you need is an iterator pattern so we can keep the logic of &apos;how do we go through the layer list&apos; in one place and the and potentially do different things at each layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491909</commentid>
    <comment_count>15</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-10-27 13:54:53 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Sorry for jumping in without full context, Nat filled me in on what&apos;s up here.
&gt; 
&gt; I like the idea of keeping rasterization out of the critical path.  I think we should approach this piece-by-piece to keep it a bit more manageable:
&gt; 
&gt; 1.) Add support for painting into an SkPicture and then rasterizing into tile-sized chunks
&gt; 2.) Add support for doing the playback into mapped memory segments to avoid an extra memcpy()
&gt; 
&gt; Doing step (1) first will give us a lot of flexibility down the road.  To get (2) done effectively I think we&apos;ll want to refactor the way we do layer iterations to make it more general - this patch adds a few copy-pasted layer iterations that are going to be a headache to maintain IMO.

Couldn&apos;t agree more. I&apos;m happy to fix this.

&gt; 
&gt; Would you mind breaking (1) out into its own patch and doing it first? It&apos;d be really useful for many things we are considering.

Sounds good. I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501164</commentid>
    <comment_count>16</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-11 15:26:17 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 72191 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112706</attachid>
            <date>2011-10-27 10:52:01 -0700</date>
            <delta_ts>2011-10-27 12:28:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71023-20111027135159.patch</filename>
            <type>text/plain</type>
            <size>56725</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1ODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMGQyYTI3NTQ4OTQyZWRh
NWM2NzMzZjA2OWEzYzNlOTBhNDkxY2MxLi45NTYwMWFlN2RjYTEzMWFiMzU0YzE3ZGQ2NGYwZDE1
ZmU2MDY2NzEwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMTAtMjcgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFBh
aW50IGRpcmVjdGx5IHRvIHNoYXJlZCBtZW1vcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFBsdW1iaW5nIHRvIGFsbG93IGFsbG9jYXRpb24gb2YgY29t
cG9zaXRvciByZXNvdXJjZXMgYmVmb3JlIHBhaW50aW5nCisgICAgICAgIG9mIGxheWVyIGNvbnRl
bnRzLiBBZGQgbWFwVGV4U3ViSW1hZ2UyRCBpbnRlcmZhY2UgdG8gTWFuYWdlZFRleHR1cmUKKyAg
ICAgICAgY2xhc3MgYW5kIG5ldyBMYXllclRleHR1cmVVcGRhdGVyU2htIGNsYXNzIHRoYXQgcmVu
ZGVyIGRpcmVjdGx5CisgICAgICAgIHRvIG1hcHBlZCBtZW1vcnkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnByZXBhcmVUb1BhaW50Q29udGVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJl
VXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVV
cGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRl
eHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50VGV4dHVyZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwcmVwYXJlVG9QYWludENvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnByZXBhcmVUb1BhaW50Q29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZUNvbXBvc2l0b3JS
ZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXM6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJT
a1BpY3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZTo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
U2tQaWN0dXJlOjpkcmF3UGljdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVV
cGRhdGVyU2htOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRl
clNobTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNobSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRl
eHR1cmVVcGRhdGVyU2htOjpzYW1wbGVkVGV4ZWxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJUZXh0dXJlVXBkYXRlclNobTo6cHJlcGFyZVRvVXBkYXRlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2htOjpwYWludFRleHR1cmVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTaG06OnVwZGF0ZVRleHR1cmVSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6TGF5
ZXJUZXh0dXJlVXBkYXRlckZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4
dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6fkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVidWZmZXI6OnNhbXBs
ZWRUZXhlbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyRnJh
bWVidWZmZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnBhaW50VGV4dHVyZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNobTo6b3JpZW50YXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNobTo6cHJlcGFyZVRvVXBk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6
cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJG
cmFtZWJ1ZmZlcjo6cHJlcGFyZVRvVXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyRnJhbWVidWZmZXI6OnBhaW50VGV4dHVyZVJlY3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpNYW5hZ2VkVGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpNYW5hZ2VkVGV4dHVyZTo6fk1hbmFnZWRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1hbmFnZWRUZXh0dXJlOjptYXBUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
bmFnZWRUZXh0dXJlOjp1bm1hcFRleFN1YkltYWdlMkQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmg6CisgICAgICAgIChXZWJDb3JlOjpNYW5h
Z2VkVGV4dHVyZTo6bWFwcGVkQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRM
YXllckNocm9taXVtOjpwcmVwYXJlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlVG9VcGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwcmVwYXJlVG9VcGRhdGVMYXll
cnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZVRvUGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnByZXBhcmVUb1BhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5k
ZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZVRv
UGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50Q29udGVudHNJZkRp
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVw
bGljYUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
OjpwcmVwYXJlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTZXR0aW5nczo6Q0NTZXR0aW5ncyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
Q1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDVGhyZWFkUHJveHk6OmFsbG9jYXRlT25JbXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisKIDIwMTEtMTAtMjcgIERh
bmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAgTWlj
cm9EYXRhSXRlbVZhbHVlIHRvIHVzZSBjb25zdCBTdHJpbmcmIGluc3RlYWQgb2YgU3RyaW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZhMmQ2ZjY1YzIxMDA1YmJkNDJkZDJjNWEzYzI2
MWMwMDFlNWU4MjAuLmI3Nzk1MWM3MzEyNDhjYjc1OTk4NTEyNTZlZTA0NjJmYmMxNTkwZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMTAtMjcgIERh
dmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IFBhaW50IGRpcmVjdGx5IHRvIHNoYXJlZCBtZW1vcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzaGFyZWRNZW1vcnlQYWludGluZyBzZXR0aW5n
LgorCisgICAgICAgICogcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaDoKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKiBwdWJs
aWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBzcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6OlNldHRpbmdzOjpvcGVyYXRvciBDQ1Nl
dHRpbmdzKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViU2V0dGluZ3NJbXBsOjpXZWJTZXR0aW5nc0ltcGwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJTZXR0aW5nc0ltcGw6OnNldFNoYXJlZE1lbW9yeVBhaW50aW5nKToKKyAgICAgICAgKiBz
cmMvV2ViU2V0dGluZ3NJbXBsLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6
c2hhcmVkTWVtb3J5UGFpbnRpbmcpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUpOgorCiAyMDExLTEwLTI3ICBEYXZlIE1pY2hhZWwgIDxkbWljaGFlbEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgQ2hyb21pdW0gdWlfdGVzdHMgV29ya2VyVGVzdC5Xb3JrZXJNZXNzYWdl
UG9ydFtHQ10gd2VyZSBicm9rZW4gYnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvYXR0YWNobWVu
dC5jZ2k/aWQ9MTEyMzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXgg
Y2E4YjNiZDc2MWYwODE1ZTQ3YjZjZmIwNDkxYTFkOTcyODc5ZjA0Yy4uMmI2Yjc0ODQ0ZWUyZjY4
N2JhMDRjMzE4N2RiYmZhYzM5MDUzZmY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjbGVh
bnVwUmVzb3VyY2VzKCkKICAgICBUaWxlZExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMo
KTsKIH0KIAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHko
KQordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvUGFpbnRDb250ZW50cygpCiB7
CiAgICAgQVNTRVJUKGRyYXdzQ29udGVudCgpKTsKIApAQCAtMTEzLDYgKzExMywxNyBAQCB2b2lk
IENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgcmVzZXRO
ZWVkc0Rpc3BsYXkoKTsKIH0KIAordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250
ZW50c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3NDb250ZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICh2aXNpYmxlTGF5ZXJSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBwYWludENvbnRlbnRzKCk7Cit9CisKIGJvb2wgQ29udGVudExheWVyQ2hyb21p
dW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgJiYgbV9k
ZWxlZ2F0ZS0+ZHJhd3NDb250ZW50KCkgJiYgVGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRl
bnQoKTsKQEAgLTEyMiw3ICsxMzMsMTEgQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewogI2lmIFVT
RShTS0lBKQogICAgIGlmIChob3N0LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewot
ICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6
Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CisgICAgICAg
IG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyRnJhbWVidWZmZXI6OmNyZWF0
ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9kZWxlZ2F0ZSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChob3N0LT5zZXR0aW5ncygpLnNoYXJlZE1lbW9yeVBhaW50aW5n
ICYmIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1YikgeworICAg
ICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNobTo6Y3JlYXRlKENv
bnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX2RlbGVnYXRlKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAjZW5kaWYgLy8gVVNFKFNLSUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0u
aAppbmRleCBiODM0ZTY3NmJkNjM0NDVhYTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi43OWQ4MTZl
NDY1Njg0YjNmZDdmYThmYWM5YWY4OTZjM2ZiNTFhNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+Q29u
dGVudExheWVyQ2hyb21pdW0oKTsKIAorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9QYWludENv
bnRlbnRzKCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKIHBy
b3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDM2MzM2Mjk2N2Fj
Y2RlYmMyNTU5ZTI5YzI0ZDQzYzFjODg4ODAzMTcuLjU5M2YxMjc3MGY3ODYxZTAxNzM1ZGI1OWQ4
NDI1ZTU2M2JjZjRlZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtNjEs
MTEgKzYxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBMYXllclRleHR1cmVVcGRhdGVy
OjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBIDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRl
eGVsRm9ybWF0QkdSQTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRl
KGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50
IC8qIGJvcmRlclRleGVscyAqLykKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUpCiAgICAgewogICAgICAgICBtX3RleFN1YkltYWdlLnNldFN1
YkltYWdlU2l6ZSh0aWxlU2l6ZSk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVU
b1VwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3Iq
IGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0LCBpbnQgYm9yZGVyVGV4ZWxzKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBw
YWludFRleHR1cmVSZWN0KE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0KSB7IH0KKwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCiAgICAgewogICAgICAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250
ZXh0LCBhbGxvY2F0b3IpOwpAQCAtMTQ0LDcgKzE1MCw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9t
aXVtOjpzZXRDb250ZW50cyhJbWFnZSogY29udGVudHMpCiAgICAgc2V0T3BhcXVlKCFtX2NvbnRl
bnRzLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hyb21p
dW06OnBhaW50Q29udGVudHNJZkRpcnR5KCkKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwcmVw
YXJlVG9QYWludENvbnRlbnRzKCkKIHsKICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSkg
ewogICAgICAgICBtX3RleHR1cmVVcGRhdGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSk7CkBAIC0xNjIsNiArMTY4LDEyIEBAIHZvaWQg
SW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgcHJlcGFyZVRv
VXBkYXRlKHZpc2libGVMYXllclJlY3QoKSk7CiB9CiAKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVt
OjpwYWludENvbnRlbnRzSWZEaXJ0eSgpCit7CisgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5
KCkpCisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRz
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKTsKK30KKwogTGF5ZXJUZXh0dXJlVXBkYXRl
ciogSW1hZ2VMYXllckNocm9taXVtOjp0ZXh0dXJlVXBkYXRlcigpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IDFhZmNjZmUyZmRjZTY0NDc1YTc0YWIyYzkyNmQwNDJjYjVmMzc2NzQuLmZiYTc1YWQwZjg1
NmU5MjRmNTUzY2ZhNTBiNTgzZDM5NTAxOWMyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbWFnZUxheWVyQ2hy
b21pdW0oKTsKIAogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZVRvUGFpbnRDb250ZW50cygpOwogICAgIHZpcnR1YWwgdm9pZCBw
YWludENvbnRlbnRzSWZEaXJ0eSgpOwogCiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1h
Z2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDZmMTZiNDg2M2Q0NGI0NGFlODNhYzJjMjYxZDIz
YzY3OGZjMTc2ZTUuLjQ0NTFmOTlkZTlhMzcwNjhhMjQzM2VhMjFiMzcxMzNhYTc1YjA4NzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKQEAgLTE1OSw3ICsxNTksOSBAQCBwdWJsaWM6CiAKICAgICAvLyBU
aGVzZSBtZXRob2RzIHR5cGljYWxseSBuZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQg
Y2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvUGFpbnRDb250ZW50cygpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBwcmVwYXJlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4
dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVD
b250ZW50c1RleHR1cmUoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAz
ZDg1OTdlMzllODVkNGNiZjAxNTZkNWNjMTE3OTQ2Nzk1MzcxMjRmLi44NmZmOTNjMGFmODhmYTcw
NTI0MGE2MGNkMWM4ZGNiNmYxZDM1ZGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5o
CkBAIC02MSw3ICs2MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBmb3JtYXQgc3BlY2lmaWVz
IHRoZSBjb21wb25lbnQgb3JkZXIgaW4gdGhlIHNhbXBsZWQgdGV4ZWwuCiAgICAgLy8gSWYgdGhl
IGZvcm1hdCBpcyBUZXhlbEZvcm1hdEJHUkEsIHZlYzQueCBpcyBibHVlIGFuZCB2ZWM0LnogaXMg
cmVkLgogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChH
QzNEZW51bSB0ZXh0dXJlRm9ybWF0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1Vw
ZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUs
IGludCBib3JkZXJUZXhlbHMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IElu
dFNpemUmIHRpbGVTaXplKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZVJl
Y3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUq
LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQgYm9yZGVyVGV4ZWxzKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGV4dHVyZVJlY3QoTWFuYWdlZFRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1
cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0
dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3Qp
ID0gMDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAK
aW5kZXggYWNiMmNkM2U0NmIzMDEzNGVhZjg4MDViNDUzZTVjYWI4ZDU0NWMxYi4uNDMwNjBjZTA3
OGVhMWYyNmY2ODZlMTBiNzVhYTZiOTFhNmQzZTZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2tDYW52YXMuaCIKICNpbmNsdWRlICJTa0dw
dURldmljZS5oIgorI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgogI2VuZGlm
IC8vIFVTRShTS0lBKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTEsNyArMTEyLDcgQEAg
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhczo6TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhQYXNz
T3duUHRyPExheWVyUGFpbnRlckNocm8KIHsKIH0KIAotdm9pZCBMYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzOjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QpCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7
CiAgICAgY29udGV4dC50cmFuc2xhdGUoLWNvbnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0Lnko
KSk7CiAgICAgewpAQCAtMTM5LDE4ICsxNDAsMjIgQEAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2Ft
cGxlZFRleGVsRm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnNhbXBsZWRUZXhlbEYK
ICAgICAgICAgICAgIExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEg
OiBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRCR1JBOwogfQogCi12b2lk
IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMp
Cit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IElu
dFNpemUmIHRpbGVTaXplKQogewogICAgIG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRp
bGVTaXplKTsKIAogICAgIG1fY2FudmFzLnJlc2l6ZShjb250ZW50UmVjdC5zaXplKCkpOworfQor
Cit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnBhaW50Q29udGVudHMoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGludCBib3JkZXJUZXhlbHMpCit7CiAgICAgLy8gQXNzdW1wdGlv
bjogaWYgYSB0aWxlciBpcyB1c2luZyBib3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2Ug
dGhlCiAgICAgLy8gbGF5ZXIgaXMgbGlrZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVk
LiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJlCiAgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRl
eHQgaW4gZ3JheXNjYWxlIGluc3RlYWQgb2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgIFBs
YXRmb3JtQ2FudmFzOjpQYWludGVyOjpUZXh0T3B0aW9uIHRleHRPcHRpb24gPQogICAgICAgICBi
b3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNhbnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBs
YXRmb3JtQ2FudmFzOjpQYWludGVyOjpTdWJwaXhlbFRleHQ7CiAgICAgUGxhdGZvcm1DYW52YXM6
OlBhaW50ZXIgY2FudmFzUGFpbnRlcigmbV9jYW52YXMsIHRleHRPcHRpb24pOwotICAgIHBhaW50
Q29udGVudHMoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCk7CisgICAgcGFp
bnQoKmNhbnZhc1BhaW50ZXIuY29udGV4dCgpLCBjb250ZW50UmVjdCk7CiB9CiAKIHZvaWQgTGF5
ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUq
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RS
ZWN0KQpAQCAtMTYyLDM2ICsxNjcsODUgQEAgdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFw
Ojp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGUKIH0KIAog
I2lmIFVTRShTS0lBKQotUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlPiBM
YXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50
ZXJDaHJvbWl1bT4gcGFpbnRlcikKK0xheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVy
VGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4g
cGFpbnRlcikKKyAgICA6IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRlcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUocGFpbnRl
cikpOwogfQogCi1MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpMYXllclRleHR1cmVVcGRh
dGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCi0g
ICAgOiBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzKHBhaW50ZXIpCit2b2lkIExheWVyVGV4dHVy
ZVVwZGF0ZXJTa1BpY3R1cmU6OnBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJl
Y3QsIGludCBib3JkZXJUZXhlbHMpCiB7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IG1fcGljdHVy
ZS5iZWdpblJlY29yZGluZyhjb250ZW50UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQo
KSk7CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworICAg
IHBhaW50KGdyYXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QpOworICAgIG1fcGljdHVyZS5lbmRS
ZWNvcmRpbmcoKTsKIH0KIAotTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6fkxheWVyVGV4
dHVyZVVwZGF0ZXJTa1BpY3R1cmUoKQordm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJl
OjpkcmF3UGljdHVyZShTa0NhbnZhcyogY2FudmFzKQogeworICAgIFRSQUNFX0VWRU5UKCJMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpkcmF3UGljdHVyZSIsIHRoaXMsIDApOworICAgIGNh
bnZhcy0+ZHJhd1BpY3R1cmUobV9waWN0dXJlKTsKIH0KIAotTGF5ZXJUZXh0dXJlVXBkYXRlcjo6
U2FtcGxlZFRleGVsRm9ybWF0IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnNhbXBsZWRU
ZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQorUGFzc1JlZlB0cjxMYXllclRleHR1
cmVVcGRhdGVyU2htPiBMYXllclRleHR1cmVVcGRhdGVyU2htOjpjcmVhdGUoUGFzc093blB0cjxM
YXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKIHsKLSAgICAvLyBIZXJlIHdlIGRpcmVjdGx5
IHJlbmRlciB0byB0aGUgdGV4dHVyZSwgc28gdGhlIGNvbXBvbmVudCBvcmRlciBpcyBhbHdheXMg
Y29ycmVjdC4KLSAgICByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0UkdCQTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJTaG0o
cGFpbnRlcikpOwogfQogCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnByZXBh
cmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGls
ZVNpemUsIGludCBib3JkZXJUZXhlbHMpCitMYXllclRleHR1cmVVcGRhdGVyU2htOjpMYXllclRl
eHR1cmVVcGRhdGVyU2htKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIp
IDogTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShwYWludGVyKQogewotICAgIFNrQ2FudmFz
KiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmcoY29udGVudFJlY3Qud2lkdGgoKSwg
Y29udGVudFJlY3QuaGVpZ2h0KCkpOwotICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1D
b250ZXh0KGNhbnZhcyk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCgmcGxh
dGZvcm1Db250ZXh0KTsKLSAgICBwYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgY29udGVu
dFJlY3QpOwotICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKIH0KIAotdm9pZCBMYXllclRl
eHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSog
dGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJl
Y3QpCitMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXQgTGF5ZXJUZXh0dXJl
VXBkYXRlclNobTo6c2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCit7
CisgICAgLy8gVGhlIGNvbXBvbmVudCBvcmRlciBtYXkgYmUgYmdyYSBpZiB3ZSB1cGxvYWRlZCBi
Z3JhIHBpeGVscyB0byByZ2JhIHRleHR1cmVzLgorICAgIHJldHVybiBQbGF0Zm9ybUNvbG9yOjpz
YW1lQ29tcG9uZW50T3JkZXIodGV4dHVyZUZvcm1hdCkgPworICAgICAgICAgICAgTGF5ZXJUZXh0
dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdCQSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6
OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNo
bTo6cHJlcGFyZVRvVXBkYXRlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVy
ZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCit7CisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxs
b2NhdG9yKTsKKyAgICB0ZXh0dXJlLT5tYXBUZXhTdWJJbWFnZTJEKGNvbnRleHQsIGFsbG9jYXRv
ciwgZGVzdFJlY3QpOworfQorCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTaG06OnBhaW50VGV4
dHVyZVJlY3QoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QpCit7CisgICAgT3duUHRyPFNrQ2FudmFzPiBjYW52YXMgPSBhZG9wdFB0cihuZXcgc2tpYTo6
UGxhdGZvcm1DYW52YXMoc291cmNlUmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LmhlaWdodCgpLCBm
YWxzZSwgdGV4dHVyZS0+bWFwcGVkQnVmZmVyKCkpKTsKKworICAgIC8vIFRyYW5zbGF0ZSB0aGUg
b3JpZ2luIG9mIGNvbnRlbnRSZWN0IHRvIHRoYXQgb2Ygc291cmNlUmVjdC4KKyAgICBjYW52YXMt
PnRyYW5zbGF0ZShjb250ZW50UmVjdCgpLngoKSAtIHNvdXJjZVJlY3QueCgpLAorICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRlbnRSZWN0KCkueSgpIC0gc291cmNlUmVjdC55KCkpOworICAgIGRy
YXdQaWN0dXJlKGNhbnZhcy5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNo
bTo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVB
bGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIHRleHR1cmUt
PmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CisgICAgdGV4dHVyZS0+dW5tYXBUZXhT
dWJJbWFnZTJEKGNvbnRleHQpOworfQorCitQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJG
cmFtZWJ1ZmZlcj4gTGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lYnVmZmVyOjpjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcihwYWludGVyKSk7Cit9CisKK0xh
eWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lYnVm
ZmVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKHBhaW50ZXIpCit7Cit9CisKK0xheWVyVGV4dHVyZVVw
ZGF0ZXJGcmFtZWJ1ZmZlcjo6fkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcigpCit7Cit9
CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBMYXllclRleHR1cmVV
cGRhdGVyRnJhbWVidWZmZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9y
bWF0KQoreworICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVuZGVyIHRvIHRoZSB0ZXh0dXJlLCBz
byB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3JyZWN0LgorICAgIHJldHVybiBMYXll
clRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOworfQorCit2b2lkIExheWVy
VGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQogewogICAgIC8vIE1ha2Ugc3VyZSBTS0lBIHVzZXMgdGhlIGNvcnJlY3QgR0wgY29u
dGV4dC4KICAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAppbmRleCBmZmM3MWM2OGZmN2M3ZGM5ODIxY2U5YWM4
YTFiNDA4OGFhNTg4Mzg5Li5hZmQ5MzJiMDIzY2EyYzdhZWQ2MTI1NDBlNGY1ZjkzNTlhZGYwYThj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCkBAIC01NCw3ICs1
NCw3IEBAIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgOiBwdWJsaWMgTGF5ZXJUZXh0
dXJlVXBkYXRlciB7CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhcyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CiAKLSAgICB2b2lkIHBh
aW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
OworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50UmVjdDsgfQogCiBwcml2YXRlOgpAQCAtNzAsNyArNzAsMTAgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4
dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3JpZW50YXRpb247IH0KICAgICB2aXJ0dWFsIFNhbXBsZWRU
ZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOworICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpOworICAgIHZpcnR1YWwgdm9p
ZCBwcmVwYXJlVG9VcGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJl
QWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGludCBib3JkZXJUZXhlbHMpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludFRleHR1cmVSZWN0KE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3Jh
cGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKIHByaXZh
dGU6CkBAIC04MiwxOCArODUsNDQgQEAgcHJpdmF0ZToKICNpZiBVU0UoU0tJQSkKIGNsYXNzIExh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
clNrUGljdHVyZT4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKLSAg
ICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKCk7CisgICAgZXhwbGljaXQg
TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9t
aXVtPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgaW50IGJvcmRlclRleGVscyk7CisgICAgdm9pZCBkcmF3UGljdHVyZShTa0Nh
bnZhcyopOworCitwcm90ZWN0ZWQ6CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsgLy8gUmVjb3Jk
aW5nIGNhbnZhcy4KK307CisKK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJTaG0gOiBwdWJsaWMg
TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlclNobT4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+KTsKKworICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7
IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVudGF0aW9uOyB9CisgICAg
dmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRl
eHR1cmVGb3JtYXQpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoR3JhcGhpY3ND
b250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGls
ZVNpemUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGVSZWN0KEdyYXBoaWNz
Q29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHR1cmVSZWN0KE1hbmFn
ZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvcios
IE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpOworCitwcml2YXRlOgorICAgIExheWVyVGV4dHVyZVVwZGF0ZXJTaG0oUGFz
c093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOworfTsKKworY2xhc3MgTGF5ZXJUZXh0dXJl
VXBkYXRlckZyYW1lYnVmZmVyIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJGcmFt
ZWJ1ZmZlcj4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKKyAgICB2
aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyRnJhbWVidWZmZXIoKTsKIAogICAgIHZpcnR1YWwg
T3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpU
b3BEb3duT3JpZW50YXRpb247IH0KICAgICB2aXJ0dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1w
bGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdmlydHVhbCB2b2lk
IHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6
ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VG9VcGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwg
Y29uc3QgSW50U2l6ZSYgdGlsZVNpemUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9V
cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50VGV4dHVyZVJlY3QoTWFuYWdlZFRleHR1cmUq
IHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3Iq
LCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBMYXllclRleHR1cmVVcGRh
dGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKLSAgCi0gICAg
U2tQaWN0dXJlIG1fcGljdHVyZTsgLy8gUmVjb3JkaW5nIGNhbnZhcy4KKyAgICBleHBsaWNpdCBM
YXllclRleHR1cmVVcGRhdGVyRnJhbWVidWZmZXIoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJv
bWl1bT4pOwogfTsKICNlbmRpZiAvLyBVU0UoU0tJQSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3Bw
CmluZGV4IDViYmZmNmE0M2U1YjAzOGIzYmYzMzI3ZmJkM2QxZTUxNDNiN2YxZGUuLjc4NmI5MTkz
NjQ5MTRiZTI4ZGY0ODlmZjczZDI3NmU3NzEzYmI2MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5j
cHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAKKyNp
bmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKIApAQCAtMzgsMTEgKzM5LDEzIEBA
IE1hbmFnZWRUZXh0dXJlOjpNYW5hZ2VkVGV4dHVyZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikK
ICAgICAsIG1fdG9rZW4oMCkKICAgICAsIG1fZm9ybWF0KDApCiAgICAgLCBtX3RleHR1cmVJZCgw
KQorICAgICwgbV9tYXBwZWRCdWZmZXIoMCkKIHsKIH0KIAogTWFuYWdlZFRleHR1cmU6On5NYW5h
Z2VkVGV4dHVyZSgpCiB7CisgICAgQVNTRVJUKCFtX21hcHBlZEJ1ZmZlcik7CiAgICAgaWYgKG1f
dG9rZW4pCiAgICAgICAgIG1fdGV4dHVyZU1hbmFnZXItPnJlbGVhc2VUb2tlbihtX3Rva2VuKTsK
IH0KQEAgLTk2LDYgKzk5LDIzIEBAIHZvaWQgTWFuYWdlZFRleHR1cmU6OmZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsCiAgICAgY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX3RleHR1cmVJZCwgMCk7CiB9CiAKK3ZvaWQgTWFuYWdlZFRleHR1cmU6Om1h
cFRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0
b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7CisgICAgQVNTRVJUKCFt
X21hcHBlZEJ1ZmZlcik7CisgICAgaWYgKCFtX3RleHR1cmVJZCkKKyAgICAgICAgbV90ZXh0dXJl
SWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0ZVRleHR1cmUoYWxsb2NhdG9yLCBtX3Rva2Vu
KTsKKyAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4
dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICBtX21h
cHBlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihleHRlbnNpb25zLT5tYXBUZXhTdWJJ
bWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0
LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwg
bV9mb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RD
aHJvbWl1bTo6V1JJVEVfT05MWSkpOworfQorCit2b2lkIE1hbmFnZWRUZXh0dXJlOjp1bm1hcFRl
eFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1f
bWFwcGVkQnVmZmVyKTsKKyAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0
YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
KTsKKyAgICBleHRlbnNpb25zLT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShtX21hcHBlZEJ1
ZmZlcik7CisgICAgbV9tYXBwZWRCdWZmZXIgPSAwOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAppbmRleCA0ZDQzODA5
NTk1MzQwZjVkNzMzZDU2NzkyOTFhOTIwNjRjN2IxYWU1Li42MzNlNWY4ZGJmOWJiOTRmMDA3ZTIz
MTY4YjE4NjZjODljNWYwOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKQEAgLTU3LDEwICs1Nywx
MyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwg
VGV4dHVyZUFsbG9jYXRvciopOwogICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CisgICAgdm9pZCBtYXBUZXhTdWJJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2b2lkIHVubWFwVGV4U3ViSW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRCopOwogCiAg
ICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdW5zaWduZWQg
Zm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXQ7IH0KICAgICB1bnNpZ25lZCB0ZXh0dXJl
SWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJZDsgfQorICAgIHVpbnQ4X3QqIG1hcHBlZEJ1
ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwcGVkQnVmZmVyOyB9CiAKIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgTWFuYWdlZFRleHR1cmUoVGV4dHVyZU1hbmFnZXIqKTsKQEAgLTcwLDYgKzczLDcg
QEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBtX2Zvcm1hdDsK
ICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAgICB1aW50OF90KiBtX21hcHBlZEJ1ZmZlcjsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZjYzQ2ZDk5M2Q1
NDBhNDIxOWQ3ZjI3MDEwMDE4NzM4ZWY3YjhmZmUuLmMwODIwMmNiMzNlMjRiZjM1ZjdhOWUxOGI4
MjEzNTdmNmY2ODYwM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcApAQCAtNjAs
NiArNjAsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBMYXllci1zcGFjZSBkaXJ0eSByZWN0YW5nbGUg
dGhhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQuCiAgICAgSW50UmVjdCBtX2RpcnR5TGF5ZXJSZWN0
OworICAgIC8vIFRpbGUtc3BhY2UgcmVjdGFuZ2xlIHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZC4K
KyAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKIHByaXZhdGU6CiAgICAgT3duUHRyPE1hbmFnZWRU
ZXh0dXJlPiBtX3RleDsKIH07CkBAIC0xNTEsOSArMTUzLDEzIEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKICAgICAgICAg
aXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4
ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0JvcmRlclRleGVscyk7CiB9CiAKLXZvaWQgVGls
ZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQordm9pZCBUaWxlZExheWVy
Q2hyb21pdW06OnByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQogewotICAgIC8vIFBhaW50aW5nIGNv
dWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2Ug
dGhlIHRpbGVyIHRvIGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgorICAgIGlmIChtX3Bh
aW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHR1cmVVcGRhdGVy
KCktPnByZXBhcmVUb1VwZGF0ZShjb250ZXh0LCBtX3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNp
emUoKSk7CisKICAgICBpZiAobV9za2lwc0RyYXcgfHwgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0Lmlz
RW1wdHkoKSB8fCAhbV90aWxlci0+bnVtVGlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0x
NjIsMTIgKzE2OCwxMCBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQwogICAgIGZvciAoaW50IGog
PSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkg
PD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVB
dChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGlsZSkKLSAgICAgICAgICAgICAgICB0aWxlID0g
Y3JlYXRlVGlsZShpLCBqKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQor
ICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5kaXJ0eSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5n
bGUgdG8gY29weSBmcm9tLgorICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2UgcmVj
dGFuZ2xlIHRvIHVwZGF0ZS4KICAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdCA9IG1fdGls
ZXItPnRpbGVDb250ZW50UmVjdCh0aWxlKTsKICAgICAgICAgICAgIGNvbnN0IEludFBvaW50IGFu
Y2hvciA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKICAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50
ZXJzZWN0KG1fdGlsZXItPmxheWVyUmVjdFRvQ29udGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVy
UmVjdCkpOwpAQCAtMTc3LDI0ICsxODEsNTIgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAg
ICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJUKHRpbGUtPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgp
KTsKLQotICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRpbGUtc3BhY2UgcmVjdGFuZ2xlIHRvIHVw
bG9hZCBpbnRvLgorICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRpbGUtc3BhY2UgcmVjdGFuZ2xl
IHRvIHVwZGF0ZS4KICAgICAgICAgICAgIEludFJlY3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNl
UmVjdC54KCkgLSBhbmNob3IueCgpLCBzb3VyY2VSZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3Vy
Y2VSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBpZiAoZGVzdFJlY3QueCgpIDwgMCkKICAgICAg
ICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCiAg
ICAgICAgICAgICAgICAgQ1JBU0goKTsKIAorICAgICAgICAgICAgdGlsZS0+bV91cGRhdGVSZWN0
ID0gZGVzdFJlY3Q7CisKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1Vw
ZGF0ZVJlY3QoY29udGV4dCwgdXBkYXRlci5hbGxvY2F0b3IoKSwgdGlsZS0+dGV4dHVyZSgpLCBk
ZXN0UmVjdCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBD
Q1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQoreworICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNl
IGNvbXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVy
IHRvIGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgorICAgIGlmIChtX3NraXBzRHJhdyB8
fCBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyLT5udW1UaWxlcygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwor
ICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxlSW5kaWNlcyhtX3JlcXVlc3RlZFVwZGF0ZVJl
Y3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8
PSBib3R0b207ICsraikgeworICAgICAgICBmb3IgKGludCBpID0gbGVmdDsgaSA8PSByaWdodDsg
KytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwor
ICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxlLT5kaXJ0eSgpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICBJbnRQb2ludCB0aWxlT2Zmc2V0ID0gbV90aWxlci0+
dGlsZUNvbnRlbnRSZWN0KHRpbGUpLmxvY2F0aW9uKCk7CisKKyAgICAgICAgICAgIC8vIENhbGN1
bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCisgICAgICAgICAgICBJbnRS
ZWN0IHNvdXJjZVJlY3QoSW50UG9pbnQodGlsZS0+bV91cGRhdGVSZWN0LngoKSArIHRpbGVPZmZz
ZXQueCgpLCB0aWxlLT5tX3VwZGF0ZVJlY3QueSgpICsgdGlsZU9mZnNldC55KCkpLCB0aWxlLT5t
X3VwZGF0ZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgQVNTRVJUKHRpbGUt
PnRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKTsKKwogICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20g
cGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGlsZSdzIGRpcnR5IHJlY3RhbmdsZS4KICAgICAgICAg
ICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJjZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgp
LCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFpbnRSZWN0LnkoKSk7CiAgICAgICAgICAgICBpZiAocGFp
bnRPZmZzZXQueCgpIDwgMCkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAg
aWYgKHBhaW50T2Zmc2V0LnkoKSA8IDApCiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgICAgIGlmIChwYWludE9mZnNldC54KCkgKyBkZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJl
Y3Qud2lkdGgoKSkKKyAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgKyB0aWxlLT5tX3Vw
ZGF0ZVJlY3Qud2lkdGgoKSA+IG1fcGFpbnRSZWN0LndpZHRoKCkpCiAgICAgICAgICAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5oZWln
aHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQorICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0
LnkoKSArIHRpbGUtPm1fdXBkYXRlUmVjdC5oZWlnaHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgp
KQogICAgICAgICAgICAgICAgIENSQVNIKCk7CiAKICAgICAgICAgICAgIHRpbGUtPnRleHR1cmUo
KS0+YmluZFRleHR1cmUoY29udGV4dCwgdXBkYXRlci5hbGxvY2F0b3IoKSk7CkBAIC0yMDIsNyAr
MjM0LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICAgICAgICAgIEdMQyhjb250ZXh0
LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKICAgICAgICAg
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0
ZXIpKTsKIAotICAgICAgICAgICAgdXBkYXRlci5hcHBlbmQodGlsZS0+dGV4dHVyZSgpLCB0ZXh0
dXJlVXBkYXRlcigpLCBzb3VyY2VSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgICAgICB1cGRhdGVy
LmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHRleHR1cmVVcGRhdGVyKCksIHNvdXJjZVJlY3QsIHRp
bGUtPm1fdXBkYXRlUmVjdCk7CiAgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0zNjUsMTUgKzM5Nyw0OSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogICAgIG1fcmVx
dWVzdGVkVXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0OwogCiAgICAgbV9wYWludFJlY3QgPSBtX3Rp
bGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KGRpcnR5TGF5ZXJSZWN0KTsKLSAgICBpZiAoZGly
dHlMYXllclJlY3QuaXNFbXB0eSgpKQorfQorCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cGFp
bnRDb250ZW50cygpCit7CisgICAgQVNTRVJUKG1fdGlsZXIpOworCisgICAgaWYgKG1fcmVxdWVz
dGVkVXBkYXRlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV90
aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc2tpcHNEcmF3
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9wYWludFJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBDYWxsaW5nIHByZXBhcmVUb1VwZGF0ZSgpIGNhbGxzIGlu
dG8gV2ViS2l0IHRvIHBhaW50LCB3aGljaCBtYXkgaGF2ZSB0aGUgc2lkZQorICAgIC8vIENhbGxp
bmcgcGFpbnRDb250ZW50cygpIGNhbGxzIGludG8gV2ViS2l0IHRvIHBhaW50LCB3aGljaCBtYXkg
aGF2ZSB0aGUgc2lkZQogICAgIC8vIGVmZmVjdCBvZiBkaXNhYmxpbmcgY29tcG9zaXRpbmcsIHdo
aWNoIGNhdXNlcyBvdXIgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlIHVwZGF0ZXIgdG8gYmUgZGVs
ZXRlZC4KICAgICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBmcmVlIHRoZSBtZW1vcnkgYmFja2luZyB0
aGUgR3JhcGhpY3NDb250ZXh0IHVudGlsIHRoZSBwYWludCBmaW5pc2hlcywKICAgICAvLyBzbyB3
ZSBncmFiIGEgbG9jYWwgcmVmZXJlbmNlIGhlcmUgdG8gaG9sZCB0aGUgdXBkYXRlciBhbGl2ZSB1
bnRpbCB0aGUgcGFpbnQgY29tcGxldGVzLgogICAgIFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVy
PiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7Ci0gICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJl
cGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3RpbGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5o
YXNCb3JkZXJUZXhlbHMoKSk7CisgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRDb250ZW50cyht
X3BhaW50UmVjdCwgbV90aWxlci0+aGFzQm9yZGVyVGV4ZWxzKCkpOworCisgICAgaW50IGxlZnQs
IHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3RpbGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGlj
ZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAg
IGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKKyAgICAgICAgZm9yIChpbnQg
aSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgeworICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSog
dGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAgICAgIGlmICghdGlsZSB8fCAhdGlsZS0+ZGly
dHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgSW50UG9pbnQg
dGlsZU9mZnNldCA9IG1fdGlsZXItPnRpbGVDb250ZW50UmVjdCh0aWxlKS5sb2NhdGlvbigpOwor
CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5nbGUgdG8gcGFpbnQu
CisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoSW50UG9pbnQodGlsZS0+bV91cGRhdGVS
ZWN0LngoKSArIHRpbGVPZmZzZXQueCgpLCB0aWxlLT5tX3VwZGF0ZVJlY3QueSgpICsgdGlsZU9m
ZnNldC55KCkpLCB0aWxlLT5tX3VwZGF0ZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChz
b3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRUZXh0dXJlUmVjdCh0aWxlLT50ZXh0dXJlKCks
IHNvdXJjZVJlY3QpOworICAgICAgICB9CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5oCmluZGV4IDVkYWYwZjAxOTQ3YTk5NDdjZDIzNWY1NWZiNzM5NTllNDQ3YjFmNTYu
LmMzODZlNzUxYjZlNDViYmMyODI0ZDI0M2Y4Y2Y4YjFkOTYwZmVmNTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5oCkBAIC00Myw2ICs0Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
flRpbGVkTGF5ZXJDaHJvbWl1bSgpOwogCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpOwogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNE
KiwgQ0NUZXh0dXJlVXBkYXRlciYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCk7
CiAKQEAgLTY1LDggKzY2LDEyIEBAIHByb3RlY3RlZDoKIAogICAgIC8vIFNldCBpbnZhbGlkYXRp
b25zIHRvIGJlIHBvdGVudGlhbGx5IHJlcGFpbnRlZCBkdXJpbmcgdXBkYXRlKCkuCiAgICAgdm9p
ZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7Ci0gICAgLy8gUHJl
cGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBj
b250ZW50UmVjdC4KKyAgICAvLyBQcmVwYXJlIHRvIHVwZGF0ZSB0ZXh0dXJlcyB0aGF0IGludGVy
c2VjdCB3aXRoIGNvbnRlbnRSZWN0LgogICAgIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICAvLyBQYWludCBjb250ZW50cyBuZWVkZWQgdG8gdXBk
YXRlIHRleHR1cmVzLgorICAgIHZvaWQgcGFpbnRDb250ZW50cygpOworICAgIC8vIFVwZGF0ZSBp
bnZhbGlkIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0IHdpdGggY29udGVudFJlY3QgcHJvdmlkZWQg
aW4gcHJlcGFyZVRvVXBkYXRlKCkuCisgICAgdm9pZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4
dDNEKiwgTGF5ZXJUZXh0dXJlVXBkYXRlciopOwogCiAgICAgdmlydHVhbCB2b2lkIHByb3RlY3RW
aXNpYmxlVGlsZVRleHR1cmVzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmlu
ZGV4IDQxOGQ1Mjk4ZDEwNmI5ZmVkZTdjYmUxYjRhNGEzMDBhNTBiOWVjY2EuLjliYWRlYjczOGQw
ODE4ZjcxMjNhNWU0MmI5ZGU5NTNiZjI5ZTBkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcApAQCAtMjUyLDYgKzI1MiwxNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9z
aXRlKCkKICAgICBzdGF0aWNfY2FzdDxDQ1NpbmdsZVRocmVhZFByb3h5Kj4obV9wcm94eS5nZXQo
KSktPmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpw
cmVwYXJlVG9VcGRhdGVMYXllcnMoKQoreworICAgIGlmICghcm9vdExheWVyKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh2aWV3cG9ydFNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHByZXBhcmVUb1VwZGF0ZUxheWVycyhyb290TGF5ZXIoKSk7Cit9CisKIHZv
aWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoKQogewogICAgIGlmICghcm9vdExheWVy
KCkpCkBAIC0yNjMsOSArMjc0LDkgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVy
cygpCiAgICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXllcigpKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKiByb290TGF5ZXIpCit2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6cHJlcGFyZVRvVXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXll
cikKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMiLCB0
aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjpwcmVwYXJlVG9VcGRh
dGVMYXllcnMiLCB0aGlzLCAwKTsKIAogICAgIGlmICghcm9vdExheWVyLT5yZW5kZXJTdXJmYWNl
KCkpCiAgICAgICAgIHJvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwpAQCAtMjc1LDcg
KzI4Niw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1
bSogcm9vdExheWVyKQogICAgIHJvb3RMYXllci0+c2V0U2Npc3NvclJlY3Qocm9vdFNjaXNzb3JS
ZWN0KTsKIAogICAgIC8vIFRoaXMgYXNzZXJ0IGZpcmVzIGlmIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMgd2Fzbid0IGNhbGxlZCBhZnRlcgotICAgIC8vIHVwZGF0ZUxheWVycy4gT25seSBvbmUg
dXBkYXRlIGNhbiBiZSBwZW5kaW5nIGF0IGFueSBnaXZlbiB0aW1lLgorICAgIC8vIHByZXBhcmVU
b1VwZGF0ZUxheWVycy4gT25seSBvbmUgdXBkYXRlIGNhbiBiZSBwZW5kaW5nIGF0IGFueSBnaXZl
biB0aW1lLgogICAgIEFTU0VSVCghbV91cGRhdGVMaXN0LnNpemUoKSk7CiAgICAgbV91cGRhdGVM
aXN0LmFwcGVuZChyb290TGF5ZXIpOwogCkBAIC0yODcsMTggKzI5OCwyNSBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKICAgICAg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkocm9vdExheWVyLCByb290TGF5ZXIsIG1fem9vbUFuaW1hdG9yVHJhbnNmb3JtLCBtX3pv
b21BbmltYXRvclRyYW5zZm9ybSwgbV91cGRhdGVMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5
ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAg
ICAgfQogCisgICAgcHJlcGFyZVRvUGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlzdCk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9v
dExheWVyKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVy
cyIsIHRoaXMsIDApOworCiAgICAgcGFpbnRMYXllckNvbnRlbnRzKG1fdXBkYXRlTGlzdCk7CiB9
CiAKLXN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVy
LCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KQorc3RhdGljIHZvaWQgcHJlcGFyZVRv
UGFpbnRDb250ZW50cyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgSW50UmVjdCYgdmlzaWJs
ZUxheWVyUmVjdCkKIHsKICAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAg
IGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwotICAgICAgICBs
YXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsKKyAgICAgICAgbGF5ZXItPnByZXBhcmVUb1Bh
aW50Q29udGVudHMoKTsKICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1h
c2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNl
TGF5ZXIpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZVRvUGFpbnRNYXNrQW5kUmVwbGlj
YUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyKQogewog
ICAgIC8vIE5vdGU6IE1hc2tzIGFuZCByZXBsaWNhcyBvbmx5IGV4aXN0IGZvciBsYXllcnMgdGhh
dCBvd24gcmVuZGVyIHN1cmZhY2VzLiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50CiAgICAgLy8gaW4g
Y29kZSwgd2UgYWxyZWFkeSBrbm93IHRoYXQgYXQgbGVhc3Qgc29tZXRoaW5nIHdpbGwgYmUgZHJh
d24gaW50byB0aGlzIHJlbmRlciBzdXJmYWNlLCBzbyB0aGUKQEAgLTMwNiw3ICszMjQsNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2Uo
TGF5ZXJDaHJvbWl1bSogcmVuZGVyUwogCiAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFz
a0xheWVyKCkpIHsKICAgICAgICAgcmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0
TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkocmVuZGVy
U3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSwgSW50UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJm
YWNlTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOworICAgICAgICBwcmVwYXJlVG9QYWludENvbnRl
bnRzKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIEludFJlY3QoSW50UG9pbnQoKSwg
cmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91bmRzKCkpKTsKICAgICB9CiAKICAgICBMYXll
ckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXll
cigpOwpAQCAtMzE1LDE2ICszMzMsMTYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFz
a0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExheWVyQ2hyb21pdW0qIHJlbmRlclMKICAgICAg
ICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyQ2hyb21pdW0+KHJlbmRlclN1cmZhY2VMYXllcik7
CiAKICAgICAgICAgcmVwbGljYUxheWVyLT5zZXRMYXllclRyZWVIb3N0KHRoaXMpOwotICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXIsIHZpc2libGVMYXllclJlY3QpOwor
ICAgICAgICBwcmVwYXJlVG9QYWludENvbnRlbnRzKHJlcGxpY2FMYXllciwgdmlzaWJsZUxheWVy
UmVjdCk7CiAKICAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpIHsKICAgICAg
ICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7
Ci0gICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXItPm1hc2tMYXll
cigpLCBJbnRSZWN0KEludFBvaW50KCksIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPmNvbnRl
bnRCb3VuZHMoKSkpOworICAgICAgICAgICAgcHJlcGFyZVRvUGFpbnRDb250ZW50cyhyZXBsaWNh
TGF5ZXItPm1hc2tMYXllcigpLCBJbnRSZWN0KEludFBvaW50KCksIHJlcGxpY2FMYXllci0+bWFz
a0xheWVyKCktPmNvbnRlbnRCb3VuZHMoKSkpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lk
IENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwcmVwYXJlVG9QYWlu
dExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQog
ewogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6
ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewogICAgICAgICBM
YXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
W3N1cmZhY2VJbmRleF0uZ2V0KCk7CkBAIC0zNDAsNyArMzU4LDcgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHJlbmRlclN1cmZhY2VM
YXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGlj
YUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKKyAgICAgICAgcHJlcGFyZVRv
UGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsK
IAogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxheWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxh
eWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5ZXJMaXN0LnNpemUoKSk7CkBAIC0zNTksMTEg
KzM3Nyw5OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0
IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVMYXllclJlY3Q8TGF5ZXJDaHJvbWl1bT4obGF5ZXIpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShsYXllciwgdmlzaWJsZUxheWVy
UmVjdCk7CisgICAgICAgICAgICBwcmVwYXJlVG9QYWludENvbnRlbnRzKGxheWVyLCB2aXNpYmxl
TGF5ZXJSZWN0KTsKICAgICAgICAgfQogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgcGFpbnRDb250
ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCit7CisgICAgaWYgKGxheWVyLT5kcmF3
c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5ZXItPnBhaW50Q29udGVudHNJZkRpcnR5KCk7Cit9CisK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFj
ZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit7CisgICAgaWYgKHJlbmRlclN1
cmZhY2VMYXllci0+bWFza0xheWVyKCkpCisgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJl
bmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpOworCisgICAgTGF5ZXJDaHJvbWl1bSogcmVw
bGljYUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKyAgICBpZiAo
cmVwbGljYUxheWVyKSB7CisgICAgICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXll
cik7CisKKyAgICAgICAgaWYgKHJlcGxpY2FMYXllci0+bWFza0xheWVyKCkpCisgICAgICAgICAg
ICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5
ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIGZvciAoaW50IHN1cmZhY2VJ
bmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49
IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJm
YWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7Cisg
ICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZh
Y2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7
CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkgfHwgIXJl
bmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5
ZXIpOworCisgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFj
ZS0+bGF5ZXJMaXN0KCk7CisgICAgICAgIEFTU0VSVChsYXllckxpc3Quc2l6ZSgpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5z
aXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIg
PSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisKKyAgICAgICAgICAgIGlmIChsYXllci0+
cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFj
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgcGFpbnRDb250ZW50
c0lmRGlydHkobGF5ZXIpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6cHJlcGFyZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQsIENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIpCit7CisgICAgZm9yIChpbnQgc3VyZmFjZUlu
ZGV4ID0gbV91cGRhdGVMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJm
YWNlSW5kZXgpIHsKKyAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0g
bV91cGRhdGVMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIFJlbmRlclN1cmZhY2VD
aHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFj
ZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAgaWYgKCFyZW5k
ZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkgfHwgIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFj
aXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVuZGVyU3VyZmFj
ZUxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgIHByZXBhcmVDb21wb3NpdG9yUmVzb3Vy
Y2VzKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCksIGNvbnRleHQsIHVwZGF0ZXIpOwor
CisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAg
ICAgICAgICBwcmVwYXJlQ29tcG9zaXRvclJlc291cmNlcyhyZW5kZXJTdXJmYWNlTGF5ZXItPnJl
cGxpY2FMYXllcigpLCBjb250ZXh0LCB1cGRhdGVyKTsKKworICAgICAgICAgICAgaWYgKHJlbmRl
clN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKQorICAgICAgICAgICAg
ICAgIHByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2VzKHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpLCBjb250ZXh0LCB1cGRhdGVyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJM
aXN0KCk7CisgICAgICAgIEFTU0VSVChsYXllckxpc3Quc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsr
bGF5ZXJJbmRleCkgeworICAgICAgICAgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBsYXllckxp
c3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHByZXBhcmVDb21wb3NpdG9yUmVzb3Vy
Y2VzKGxheWVyLCBjb250ZXh0LCB1cGRhdGVyKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21p
dW0qIGxheWVyLCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYg
dXBkYXRlcikKK3sKKyAgICAvLyBGb3Igbm9ybWFsIGxheWVycywgdGhlc2UgY29uZGl0aW9ucyBz
aG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gY2hlY2tlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmVuZGVy
IHN1cmZhY2UgbGF5ZXIgbGlzdHMuCisgICAgLy8gRm9yIG1hc2tzIGFuZCByZXBsaWNhcyBob3dl
dmVyLCB3ZSBtYXkgc3RpbGwgbmVlZCB0byBjaGVjayB0aGVtIGhlcmUuCisgICAgaWYgKGxheWVy
LT5ib3VuZHMoKS5pc0VtcHR5KCkgfHwgIWxheWVyLT5vcGFjaXR5KCkgfHwgIWxheWVyLT5kcmF3
c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5ZXItPnByZXBhcmVDb21wb3Np
dG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
Q0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXgg
PSBtX3VwZGF0ZUxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJ
bmRleCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCAxYzRkNDMxZDg2MDIzNDhj
ZDdmZWQ4N2U2MGY4OGZmYjU1NDY5MWQwLi45ZjJmNGFhMWUxNmYzMjdkODI0YzFmMzlkZTNjNTEw
YzE5MmJlMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNzAsMTIgKzcwLDE0
IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICAgICAgICAgIDogYWNjZWxlcmF0ZVBhaW50aW5n
KGZhbHNlKQogICAgICAgICAgICAgLCBjb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCiAgICAgICAg
ICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQoZmFsc2UpCisgICAgICAgICAgICAsIHNoYXJl
ZE1lbW9yeVBhaW50aW5nKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93RlBTQ291bnRlcihmYWxz
ZSkKICAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKSB7IH0KIAogICAg
IGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOwogICAgIGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuOwog
ICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKKyAgICBib29sIHNoYXJlZE1lbW9yeVBh
aW50aW5nOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1M
YXllclRyZWU7CiB9OwpAQCAtMTU4LDggKzE2MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNl
dFZpc2libGUoYm9vbCk7CiAKKyAgICB2b2lkIHByZXBhcmVUb1VwZGF0ZUxheWVycygpOwogICAg
IHZvaWQgdXBkYXRlTGF5ZXJzKCk7CiAKKyAgICB2b2lkIHByZXBhcmVDb21wb3NpdG9yUmVzb3Vy
Y2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpOwogICAgIHZvaWQgdXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0
ZXImKTsKICAgICB2b2lkIGFwcGx5U2Nyb2xsRGVsdGFzKGNvbnN0IENDU2Nyb2xsVXBkYXRlU2V0
Jik7CiAgICAgdm9pZCBzdGFydFJhdGVMaW1pdGVyKEdyYXBoaWNzQ29udGV4dDNEKik7CkBAIC0x
NzEsMTEgKzE3NSwxNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKIAorICAgIHZvaWQgcHJlcGFyZVRv
UGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOworICAgIHZvaWQgcHJlcGFyZVRv
UGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSopOwogICAg
IHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOwogICAgIHZvaWQgcGFp
bnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSopOwogCisgICAg
dm9pZCBwcmVwYXJlVG9VcGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgdXBk
YXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKKworICAgIHZvaWQgcHJlcGFyZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSosIEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBk
YXRlciYpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVt
KiwgR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1cmVVcGRhdGVyJik7CisKICAgICB2b2lkIGNs
ZWFyUGVuZGluZ1VwZGF0ZSgpOwogCiAgICAgaW50IG1fY29tcG9zaXRvcklkZW50aWZpZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCmluZGV4IDE0MTgyNjEwNDdmYmIx
NDcxYTgzOTdlMjhlYjJjYjU0ZTNlNGYxMWEuLjkyNTI3ZjE3YWJjYzdjZjQ3OGY4MmRhNWIyNjg2
NmM1ZDNhZTBlNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBA
IC0yNjYsNiArMjY2LDE4IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVk
ZWQoKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAKKyAgICAvLyBQ
cmVwYXJlIHVwZGF0ZQorICAgIG1fbGF5ZXJUcmVlSG9zdC0+cHJlcGFyZVRvVXBkYXRlTGF5ZXJz
KCk7CisKKyAgICAvLyBBbGxvY2F0ZQorICAgIHsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGw7CisKKyAgICAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5wcmVwYXJlQ29tcG9zaXRvclJlc291cmNlcyhtX2xheWVyVHJlZUhvc3RJbXBs
LT5jb250ZXh0KCksIHVwZGF0ZXIpOworICAgIH0KKworICAgIC8vIFVwZGF0ZQogICAgIG1fbGF5
ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CiAKICAgICBkb0NvbW1pdCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcAppbmRleCA3MTc2YzI0MDcwZmNjN2YzYzM4Y2UwMmY5ZDhhMDYwYTgz
NDFlZDg3Li5kN2Y0YTljZmJjYTliNzU4MDk1MTczNGIwNDdiOTMxMTk1YjgyOTA1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMzkxLDYgKzM5MSwxNiBAQCB2b2lkIENDVGhyZWFk
UHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUgZnJh
bWVCZWdpblRpbQogICAgIC8vIHVwZGF0ZUxheWVycy4KICAgICBtX2NvbW1pdFJlcXVlc3RlZCA9
IGZhbHNlOwogCisgICAgbV9sYXllclRyZWVIb3N0LT5wcmVwYXJlVG9VcGRhdGVMYXllcnMoKTsK
KworICAgIHsKKyAgICAgICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ1RocmVhZFByb3h5OjphbGxv
Y2F0ZU9uSW1wbFRocmVhZAorICAgICAgICBUUkFDRV9FVkVOVCgiYWxsb2NhdGUiLCB0aGlzLCAw
KTsKKyAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICAgICAgc19jY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojph
bGxvY2F0ZU9uSW1wbFRocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikp
KTsKKyAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgfQorCiAgICAgbV9sYXllclRyZWVI
b3N0LT51cGRhdGVMYXllcnMoKTsKIAogICAgIHsKQEAgLTQxMCw2ICs0MjAsMjEgQEAgdm9pZCBD
Q1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91
YmxlIGZyYW1lQmVnaW5UaW0KICAgICBBU1NFUlQobV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5k
Q29tbWl0U2VxdWVuY2VOdW1iZXIgPT0gc2VxdWVuY2VOdW1iZXIpOwogfQogCit2b2lkIENDVGhy
ZWFkUHJveHk6OmFsbG9jYXRlT25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0
aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjphbGxvY2F0ZU9uSW1wbFRo
cmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKCFt
X2xheWVyVHJlZUhvc3RJbXBsKSB7CisgICAgICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVyKG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKKyAgICBtX2xheWVy
VHJlZUhvc3QtPnByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2VzKG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmNvbnRleHQoKSwgdXBkYXRlcik7CisKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwog
dm9pZCBDQ1RocmVhZFByb3h5Ojpjb21taXRPbkltcGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQq
IGNvbXBsZXRpb24pCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVBbmRDb21taXRPbkltcGxUaHJlYWQiLCB0aGlzLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHku
aAppbmRleCA3MTEwZjczMjIyNzFkMGY2ZWQ5M2MxZjQ5ZDA5MDA0NWQ1ZTBjZDcyLi5lOTI1ODAz
ZDliYTcwYWE2MjgzOWYyNDgyN2E3NmU0NzU4ZTU3YjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5oCkBAIC04MCw2ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwb3N0QmVnaW5GcmFtZUFu
ZENvbW1pdE9uSW1wbFRocmVhZCgpOwogICAgIFBhc3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNr
PiBjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFza09uSW1wbFRocmVhZCgpOwogICAgIHZvaWQg
b2J0YWluQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tGcm9tQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqLCBDQ01haW5UaHJlYWQ6OlRhc2sqKik7CisgICAgdm9pZCBhbGxvY2F0ZU9uSW1wbFRocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCopOwogICAgIHZvaWQgY29tbWl0T25JbXBsVGhyZWFkKENDQ29t
cGxldGlvbkV2ZW50Kik7CiAgICAgdm9pZCBkcmF3TGF5ZXJzQW5kU3dhcE9uSW1wbFRocmVhZCgp
OwogICAgIHZvaWQgZHJhd0xheWVyc09uSW1wbFRocmVhZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlldy5oCmluZGV4IGFhOGIyMTM5MGUwZTk5
NTNiZTE4NjRkMjAwMjQzYjRiNWIwNDM5NTMuLmVlMDU3OTMxYTBiZWEyOWUyMDljOWZhZGE0NTZi
NGRkYTgyMDA3MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkxheWVyVHJlZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJM
YXllclRyZWVWaWV3LmgKQEAgLTQ1LDExICs0NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIFNldHRp
bmdzKCkKICAgICAgICAgICAgIDogYWNjZWxlcmF0ZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAg
ICAgLCBjb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCi0gICAgICAgICAgICAsIGVuYWJsZUNvbXBv
c2l0b3JUaHJlYWQoZmFsc2UpIHsgfQorICAgICAgICAgICAgLCBlbmFibGVDb21wb3NpdG9yVGhy
ZWFkKGZhbHNlKQorICAgICAgICAgICAgLCBzaGFyZWRNZW1vcnlQYWludGluZyhmYWxzZSkgeyB9
CiAKICAgICAgICAgYm9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAgICAgICAgIGJvb2wgY29tcG9z
aXRlT2Zmc2NyZWVuOwogICAgICAgICBib29sIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQ7CisgICAg
ICAgIGJvb2wgc2hhcmVkTWVtb3J5UGFpbnRpbmc7CiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
CiAgICAgICAgIG9wZXJhdG9yIFdlYkNvcmU6OkNDU2V0dGluZ3MoKSBjb25zdDsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5kZXggNTJlMTI1
MjBkZjM3ZTA4YjViYjRhYjlkYjMwNzFkNDcxYjM5ZWNiNC4uYWQ1YTZlNzk2ZmI4NjhiNzk0N2Fm
NDFhNmE5NTMwNDUwMDYxOWVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJTZXR0aW5ncy5oCkBAIC0xMzEsNiArMTMxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRTaG91bGRQcmludEJhY2tncm91bmRzKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRI
aXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2hhcmVkTWVtb3J5UGFpbnRpbmcoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBz
aGFyZWRNZW1vcnlQYWludGluZygpIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgogICAgIH5XZWJT
ZXR0aW5ncygpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
TGF5ZXJUcmVlVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRy
ZWVWaWV3LmNwcAppbmRleCBhM2ZlMzA3YjFhYmUxYjI1ZTk0NjNiNWZmMmQ0MTE2YmRlYjNhMjQ1
Li4wNzhkMDcyOGRhY2I3ZTJiYTM0YzNmMzFjMmJkYTgwNDRkZWMwZGYxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcApAQCAtMzksNiArMzks
NyBAQCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5nczo6b3BlcmF0b3IgQ0NTZXR0aW5ncygpIGNv
bnN0CiAgICAgc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gYWNjZWxlcmF0ZVBhaW50aW5n
OwogICAgIHNldHRpbmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IGNvbXBvc2l0ZU9mZnNjcmVlbjsK
ICAgICBzZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFkID0gZW5hYmxlQ29tcG9zaXRvclRo
cmVhZDsKKyAgICBzZXR0aW5ncy5zaGFyZWRNZW1vcnlQYWludGluZyA9IHNoYXJlZE1lbW9yeVBh
aW50aW5nOwogCiAgICAgLy8gRklYTUU6IHNob3dGUFNDb3VudGVyIC8gc2hvd1BsYXRmb3JtTGF5
ZXJUcmVlIGFyZW4ndCBzdXBwb3J0ZWQgY3VycmVudGx5LgogICAgIHNldHRpbmdzLnNob3dGUFND
b3VudGVyID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGlu
Z3NJbXBsLmNwcAppbmRleCBlZjNjYjQ2YTQzZWEyZTdkMjhhNTUyMmM1MmMxMWVjZTFhY2FiNDA1
Li5iOGQ0MGY5NWMyZTg5YjFlYTI2NTc0MjJlZDJlYjVkMGJjNzQ4NjM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTQ4LDYgKzQ4LDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBXZWJTZXR0aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbChT
ZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgOiBtX3NldHRpbmdzKHNldHRpbmdzKQogICAgICwgbV9j
b21wb3NpdGVUb1RleHR1cmVFbmFibGVkKGZhbHNlKQorICAgICwgbV9zaGFyZWRNZW1vcnlQYWlu
dGluZyhmYWxzZSkKICAgICAsIG1fc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAgLCBtX3Nob3dQ
bGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKICAgICAsIG1fdXNlVGhyZWFkZWRDb21wb3NpdG9yKGZh
bHNlKQpAQCAtNDYwLDQgKzQ2MSw5IEBAIHZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRIaXhpZTc2
V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkKGJvb2wgZW5hYmxlZCkKICNlbmRpZgogfQogCit2b2lk
IFdlYlNldHRpbmdzSW1wbDo6c2V0U2hhcmVkTWVtb3J5UGFpbnRpbmcoYm9vbCBlbmFibGVkKQor
eworICAgIG1fc2hhcmVkTWVtb3J5UGFpbnRpbmcgPSBlbmFibGVkOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNl
dHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBs
LmgKaW5kZXggNzgyNzk1YjYyM2ZlYjJkNTljYTM0OTAyMGUzYWNmNDQxYTk1OTA5NS4uOTI1MzA0
ZTc3ODlhOWM2ODE0YmIzNWM2ZDBhM2NhNmRmODc5ZTJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKQEAgLTEyMywxMCArMTIzLDEzIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyhib29sKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoYm9vbCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldEhpeGllNzZXZWJTb2NrZXRQcm90b2NvbEVuYWJsZWQoYm9vbCk7CisgICAgdmly
dHVhbCB2b2lkIHNldFNoYXJlZE1lbW9yeVBhaW50aW5nKGJvb2wpOworICAgIHZpcnR1YWwgYm9v
bCBzaGFyZWRNZW1vcnlQYWludGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkTWVtb3J5UGFp
bnRpbmc7IH0KIAogcHJpdmF0ZToKICAgICBXZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsK
ICAgICBib29sIG1fY29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZDsKKyAgICBib29sIG1fc2hhcmVk
TWVtb3J5UGFpbnRpbmc7CiAgICAgYm9vbCBtX3Nob3dGUFNDb3VudGVyOwogICAgIGJvb2wgbV9z
aG93UGxhdGZvcm1MYXllclRyZWU7CiAgICAgYm9vbCBtX3VzZVRocmVhZGVkQ29tcG9zaXRvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA1MDIzNzNi
MTc4M2YyMzYzYjQ1YWJhZmRkNmU0YjQzNDAxN2QzMjQ3Li5hMGEwYzA0ODhjMmExMDZmMDg4ZjRl
MTA1MzExZjE2MDNkMzQ3MWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCkBAIC0yNjc5LDYgKzI2NzksNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIGNjU2V0dGlu
Z3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gcGFnZSgpLT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERy
YXdpbmdFbmFibGVkKCk7CiAgICAgICAgIGNjU2V0dGluZ3MuY29tcG9zaXRlT2Zmc2NyZWVuID0g
c2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpOwogICAgICAgICBjY1NldHRp
bmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBzZXR0aW5ncygpLT51c2VUaHJlYWRlZENvbXBv
c2l0b3IoKTsKKyAgICAgICAgY2NTZXR0aW5ncy5zaGFyZWRNZW1vcnlQYWludGluZyA9IHNldHRp
bmdzKCktPnNoYXJlZE1lbW9yeVBhaW50aW5nKCk7CiAgICAgICAgIGNjU2V0dGluZ3Muc2hvd0ZQ
U0NvdW50ZXIgPSBzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpOwogICAgICAgICBjY1NldHRp
bmdzLnNob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVy
VHJlZSgpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112730</attachid>
            <date>2011-10-27 12:29:02 -0700</date>
            <delta_ts>2011-10-27 13:51:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71023-20111027152901.patch</filename>
            <type>text/plain</type>
            <size>56923</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1ODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMGQyYTI3NTQ4OTQyZWRh
NWM2NzMzZjA2OWEzYzNlOTBhNDkxY2MxLi45M2YyNGMxN2Y1NmNmYjM2OWZmYTc3NWQ5ZjQ1OTk3
NzlkMTcyZGRjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMTAtMjcgIERhdmlk
IFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFBh
aW50IGRpcmVjdGx5IHRvIHNoYXJlZCBtZW1vcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTAyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFBsdW1iaW5nIHRvIGFsbG93IGFsbG9jYXRpb24gb2YgY29t
cG9zaXRvciByZXNvdXJjZXMgYmVmb3JlIHBhaW50aW5nCisgICAgICAgIG9mIGxheWVyIGNvbnRl
bnRzLiBBZGQgbWFwVGV4U3ViSW1hZ2UyRCBpbnRlcmZhY2UgdG8gTWFuYWdlZFRleHR1cmUKKyAg
ICAgICAgY2xhc3MgYW5kIG5ldyBMYXllclRleHR1cmVVcGRhdGVyU2htIGNsYXNzIHRoYXQgcmVu
ZGVyIGRpcmVjdGx5CisgICAgICAgIHRvIG1hcHBlZCBtZW1vcnkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnByZXBhcmVUb1BhaW50Q29udGVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudExheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJl
VXBkYXRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRleHR1cmVV
cGRhdGVyOjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMYXllclRl
eHR1cmVVcGRhdGVyOjpwcmVwYXJlVG9VcGRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnBhaW50VGV4dHVyZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VMYXllckNocm9taXVtOjpwcmVwYXJlVG9QYWludENvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnByZXBhcmVUb1BhaW50Q29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHJlcGFyZUNvbXBvc2l0b3JS
ZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXM6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVw
ZGF0ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRl
eHR1cmVVcGRhdGVyQml0bWFwOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJT
a1BpY3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZTo6cGFpbnRDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVy
U2tQaWN0dXJlOjpkcmF3UGljdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVV
cGRhdGVyU2hhcmVkTWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0
dXJlVXBkYXRlclNoYXJlZE1lbW9yeTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNoYXJlZE1lbW9yeSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyU2hhcmVkTWVtb3J5OjpzYW1w
bGVkVGV4ZWxGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNo
YXJlZE1lbW9yeTo6cHJlcGFyZVRvVXBkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRleHR1cmVVcGRhdGVyU2hhcmVkTWVtb3J5OjpwYWludFRleHR1cmVSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTaGFyZWRNZW1vcnk6OnVwZGF0ZVRleHR1cmVS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZl
cjo6TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6fkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVidWZmZXI6
OnNhbXBsZWRUZXhlbEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRh
dGVyRnJhbWVidWZmZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGVSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnBhaW50VGV4dHVy
ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNoYXJlZE1lbW9y
eTo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNo
YXJlZE1lbW9yeTo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4
dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6cHJlcGFyZVRvVXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6cHJlcGFyZVRvVXBkYXRlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclRleHR1cmVVcGRhdGVyRnJhbWVidWZmZXI6OnBhaW50
VGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFn
ZWRUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpNYW5hZ2Vk
VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6fk1hbmFnZWRUZXh0
dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjptYXBUZXhTdWJJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjp1bm1hcFRleFN1YkltYWdlMkQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmg6
CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVyZTo6bWFwcGVkQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjpwcmVwYXJlQ29tcG9zaXRvclJl
c291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjpwcmVwYXJlVG9VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVt
OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0OjpwcmVwYXJlVG9VcGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0Ojp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZVRvUGFpbnRD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnByZXBhcmVUb1Bh
aW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6cHJlcGFyZVRvUGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OnBhaW50Q29udGVudHNJZkRpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6cGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwYWludExheWVyQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpwcmVwYXJlQ29tcG9zaXRvclJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NTZXR0aW5nczo6Q0NTZXR0aW5ncyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRl
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmFsbG9jYXRlT25JbXBsVGhy
ZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5Lmg6CisKIDIwMTEtMTAtMjcgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgQ2xlYW4gdXAgTWljcm9EYXRhSXRlbVZhbHVlIHRvIHVzZSBjb25zdCBTdHJp
bmcmIGluc3RlYWQgb2YgU3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZhMmQ2
ZjY1YzIxMDA1YmJkNDJkZDJjNWEzYzI2MWMwMDFlNWU4MjAuLmI3Nzk1MWM3MzEyNDhjYjc1OTk4
NTEyNTZlZTA0NjJmYmMxNTkwZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjUgQEAKKzIwMTEtMTAtMjcgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbQ2hyb21pdW1dIFBhaW50IGRpcmVjdGx5IHRvIHNoYXJlZCBtZW1vcnku
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTAyMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzaGFy
ZWRNZW1vcnlQYWludGluZyBzZXR0aW5nLgorCisgICAgICAgICogcHVibGljL1dlYkxheWVyVHJl
ZVZpZXcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3M6OlNl
dHRpbmdzKToKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGluZ3MuaDoKKyAgICAgICAgKiBzcmMv
V2ViTGF5ZXJUcmVlVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVZpZXc6
OlNldHRpbmdzOjpvcGVyYXRvciBDQ1NldHRpbmdzKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGlu
Z3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2V0dGluZ3NJbXBsOjpXZWJTZXR0aW5n
c0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldFNoYXJlZE1lbW9y
eVBhaW50aW5nKToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNldHRpbmdzSW1wbDo6c2hhcmVkTWVtb3J5UGFpbnRpbmcpOgorICAgICAgICAq
IHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJ
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorCiAyMDExLTEwLTI3ICBEYXZlIE1pY2hh
ZWwgIDxkbWljaGFlbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2hyb21pdW0gdWlfdGVzdHMg
V29ya2VyVGVzdC5Xb3JrZXJNZXNzYWdlUG9ydFtHQ10gd2VyZSBicm9rZW4gYnkgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9MTEyMzQyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggY2E4YjNiZDc2MWYwODE1ZTQ3YjZjZmIwNDkxYTFkOTcy
ODc5ZjA0Yy4uYzM1ODI4N2FiYmYyNzIyZWZlMThkZTM1M2Y0MmM2NGVlNDZhNTY4NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExh
eWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIENv
bnRlbnRMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKICAgICBUaWxlZExheWVyQ2hy
b21pdW06OmNsZWFudXBSZXNvdXJjZXMoKTsKIH0KIAotdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQordm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvUGFpbnRDb250ZW50cygpCiB7CiAgICAgQVNTRVJUKGRyYXdzQ29udGVudCgpKTsKIApA
QCAtMTEzLDYgKzExMywxNyBAQCB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpwYWludENvbnRl
bnRzSWZEaXJ0eSgpCiAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAordm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50c0lmRGlydHkoKQoreworICAgIGlmICghZHJhd3ND
b250ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh2aXNpYmxlTGF5ZXJSZWN0KCku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwYWludENvbnRlbnRzKCk7Cit9CisK
IGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fZGVsZWdhdGUgJiYgbV9kZWxlZ2F0ZS0+ZHJhd3NDb250ZW50KCkgJiYgVGlsZWRM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKTsKQEAgLTEyMiw3ICsxMzMsMTEgQEAgdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRy
ZWVIb3N0KiBob3N0KQogewogI2lmIFVTRShTS0lBKQogICAgIGlmIChob3N0LT5zZXR0aW5ncygp
LmFjY2VsZXJhdGVQYWludGluZykgewotICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJU
ZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0
ZShtX2RlbGVnYXRlKSk7CisgICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVV
cGRhdGVyRnJhbWVidWZmZXI6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9k
ZWxlZ2F0ZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChob3N0LT5zZXR0aW5n
cygpLnNoYXJlZE1lbW9yeVBhaW50aW5nICYmIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKS51c2luZ01hcFN1YikgeworICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0
dXJlVXBkYXRlclNoYXJlZE1lbW9yeTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0
ZShtX2RlbGVnYXRlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gVVNFKFNL
SUEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uaAppbmRleCBiODM0ZTY3NmJkNjM0NDVh
YTQ1M2IzNjVlZWUyODAyNDBmMzgwOWMxLi43OWQ4MTZlNDY1Njg0YjNmZDdmYThmYWM5YWY4OTZj
M2ZiNTFhNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmgKQEAgLTQ5LDYgKzQ5
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+Q29udGVudExheWVyQ2hyb21pdW0oKTsKIAor
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9QYWludENvbnRlbnRzKCk7CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCk7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDM2MzM2Mjk2N2FjY2RlYmMyNTU5ZTI5YzI0ZDQzYzFjODg4
ODAzMTcuLjU5M2YxMjc3MGY3ODYxZTAxNzM1ZGI1OWQ4NDI1ZTU2M2JjZjRlZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtNjEsMTEgKzYxLDE3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JB
IDogTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0QkdSQTsKICAgICB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRS
ZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IC8qIGJvcmRlclRleGVscyAqLykKKyAg
ICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCiAg
ICAgewogICAgICAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7CiAg
ICAgfQogCisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZVJlY3QoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBpbnQgYm9yZGVy
VGV4ZWxzKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludFRleHR1cmVSZWN0KE1hbmFnZWRU
ZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KSB7IH0KKwogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
VGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiAgICAgewog
ICAgICAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOwpAQCAtMTQ0
LDcgKzE1MCw3IEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpzZXRDb250ZW50cyhJbWFnZSog
Y29udGVudHMpCiAgICAgc2V0T3BhcXVlKCFtX2NvbnRlbnRzLT5jdXJyZW50RnJhbWVIYXNBbHBo
YSgpKTsKIH0KIAotdm9pZCBJbWFnZUxheWVyQ2hyb21pdW06OnBhaW50Q29udGVudHNJZkRpcnR5
KCkKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwcmVwYXJlVG9QYWludENvbnRlbnRzKCkKIHsK
ICAgICBpZiAoIW1fZGlydHlSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBtX3RleHR1cmVVcGRh
dGVyLT51cGRhdGVGcm9tSW1hZ2UobV9jb250ZW50cy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSk7CkBAIC0xNjIsNiArMTY4LDEyIEBAIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWlu
dENvbnRlbnRzSWZEaXJ0eSgpCiAgICAgcHJlcGFyZVRvVXBkYXRlKHZpc2libGVMYXllclJlY3Qo
KSk7CiB9CiAKK3ZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpwYWludENvbnRlbnRzSWZEaXJ0eSgp
Cit7CisgICAgaWYgKCFtX2RpcnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIG1fdGV4dHVyZVVw
ZGF0ZXItPnVwZGF0ZUZyb21JbWFnZShtX2NvbnRlbnRzLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpKTsKK30KKwogTGF5ZXJUZXh0dXJlVXBkYXRlciogSW1hZ2VMYXllckNocm9taXVtOjp0
ZXh0dXJlVXBkYXRlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdGV4dHVyZVVwZGF0ZXIuZ2V0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUxheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDFhZmNjZmUyZmRjZTY0NDc1YTc0
YWIyYzkyNmQwNDJjYjVmMzc2NzQuLmZiYTc1YWQwZjg1NmU5MjRmNTUzY2ZhNTBiNTgzZDM5NTAx
OWMyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5oCkBAIC01Myw2ICs1Myw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5JbWFnZUxheWVyQ2hyb21pdW0oKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvUGFp
bnRDb250ZW50cygpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzSWZEaXJ0eSgpOwog
CiAgICAgdm9pZCBzZXRDb250ZW50cyhJbWFnZSogaW1hZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IDZmMTZiNDg2M2Q0NGI0NGFlODNhYzJjMjYxZDIzYzY3OGZjMTc2ZTUuLjQ0NTFmOTlkZTlh
MzcwNjhhMjQzM2VhMjFiMzcxMzNhYTc1YjA4NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE1
OSw3ICsxNTksOSBAQCBwdWJsaWM6CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIHR5cGljYWxseSBu
ZWVkIHRvIGJlIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIGJv
b2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgcHJlcGFyZVRvUGFpbnRDb250ZW50cygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzSWZEaXJ0eSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlQ29tcG9zaXRvclJl
c291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCos
IENDVGV4dHVyZVVwZGF0ZXImKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wp
IHsgfQogICAgIHZpcnR1YWwgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAzZDg1OTdlMzllODVkNGNiZjAxNTZkNWNj
MTE3OTQ2Nzk1MzcxMjRmLi44NmZmOTNjMGFmODhmYTcwNTI0MGE2MGNkMWM4ZGNiNmYxZDM1ZGJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oCkBAIC02MSw3ICs2MSwxMCBAQCBwdWJs
aWM6CiAgICAgLy8gVGhpcyBmb3JtYXQgc3BlY2lmaWVzIHRoZSBjb21wb25lbnQgb3JkZXIgaW4g
dGhlIHNhbXBsZWQgdGV4ZWwuCiAgICAgLy8gSWYgdGhlIGZvcm1hdCBpcyBUZXhlbEZvcm1hdEJH
UkEsIHZlYzQueCBpcyBibHVlIGFuZCB2ZWM0LnogaXMgcmVkLgogICAgIHZpcnR1YWwgU2FtcGxl
ZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKEdyYXBoaWNzQ29udGV4dDNEKiwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVj
dCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBpbnQgYm9yZGVyVGV4ZWxzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBhaW50
VGV4dHVyZVJlY3QoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNE
KiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpID0gMDsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKaW5kZXggYWNiMmNkM2U0NmIzMDEzNGVh
Zjg4MDViNDUzZTVjYWI4ZDU0NWMxYi4uYjA2MjQxYzM5NDZhN2E0YjBlODc2MThiZDkyN2UyYzJh
OTBkMGQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAK
QEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5j
bHVkZSAiU2tDYW52YXMuaCIKICNpbmNsdWRlICJTa0dwdURldmljZS5oIgorI2luY2x1ZGUgInNr
aWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgogI2VuZGlmIC8vIFVTRShTS0lBKQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0xMTEsNyArMTEyLDcgQEAgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZh
czo6TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm8K
IHsKIH0KIAotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQ2FudmFzOjpwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCit2b2lk
IExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXM6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7CiAgICAgY29udGV4dC50cmFuc2xhdGUo
LWNvbnRlbnRSZWN0LngoKSwgLWNvbnRlbnRSZWN0LnkoKSk7CiAgICAgewpAQCAtMTM5LDE4ICsx
NDAsMjIgQEAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IExheWVyVGV4
dHVyZVVwZGF0ZXJCaXRtYXA6OnNhbXBsZWRUZXhlbEYKICAgICAgICAgICAgIExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkEgOiBMYXllclRleHR1cmVVcGRhdGVyOjpT
YW1wbGVkVGV4ZWxGb3JtYXRCR1JBOwogfQogCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRt
YXA6OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50
U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCit2b2lkIExheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXA6OnByZXBhcmVUb1VwZGF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKQogewogICAg
IG1fdGV4U3ViSW1hZ2Uuc2V0U3ViSW1hZ2VTaXplKHRpbGVTaXplKTsKIAogICAgIG1fY2FudmFz
LnJlc2l6ZShjb250ZW50UmVjdC5zaXplKCkpOworfQorCit2b2lkIExheWVyVGV4dHVyZVVwZGF0
ZXJCaXRtYXA6OnBhaW50Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGludCBi
b3JkZXJUZXhlbHMpCit7CiAgICAgLy8gQXNzdW1wdGlvbjogaWYgYSB0aWxlciBpcyB1c2luZyBi
b3JkZXIgdGV4ZWxzLCB0aGVuIGl0IGlzIGJlY2F1c2UgdGhlCiAgICAgLy8gbGF5ZXIgaXMgbGlr
ZWx5IHRvIGJlIGZpbHRlcmVkIG9yIHRyYW5zZm9ybWVkLiBCZWNhdXNlIG9mIGl0IG1pZ2h0IGJl
CiAgICAgLy8gdHJhbnNmb3JtZWQsIGRyYXcgdGhlIHRleHQgaW4gZ3JheXNjYWxlIGluc3RlYWQg
b2Ygc3VicGl4ZWwgYW50aWFsaWFzaW5nLgogICAgIFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpU
ZXh0T3B0aW9uIHRleHRPcHRpb24gPQogICAgICAgICBib3JkZXJUZXhlbHMgPyBQbGF0Zm9ybUNh
bnZhczo6UGFpbnRlcjo6R3JheXNjYWxlVGV4dCA6IFBsYXRmb3JtQ2FudmFzOjpQYWludGVyOjpT
dWJwaXhlbFRleHQ7CiAgICAgUGxhdGZvcm1DYW52YXM6OlBhaW50ZXIgY2FudmFzUGFpbnRlcigm
bV9jYW52YXMsIHRleHRPcHRpb24pOwotICAgIHBhaW50Q29udGVudHMoKmNhbnZhc1BhaW50ZXIu
Y29udGV4dCgpLCBjb250ZW50UmVjdCk7CisgICAgcGFpbnQoKmNhbnZhc1BhaW50ZXIuY29udGV4
dCgpLCBjb250ZW50UmVjdCk7CiB9CiAKIHZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6
dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxv
Y2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQpAQCAtMTYyLDM2ICsxNjcsODUg
QEAgdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgVGUKIH0KIAogI2lmIFVTRShTS0lBKQotUGFzc1JlZlB0
cjxMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlPiBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0
dXJlOjpjcmVhdGUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKK0xh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUo
UGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKKyAgICA6IExheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMocGFpbnRlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IExh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUocGFpbnRlcikpOwogfQogCi1MYXllclRleHR1cmVV
cGRhdGVyU2tQaWN0dXJlOjpMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8
TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCi0gICAgOiBMYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzKHBhaW50ZXIpCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnBhaW50
Q29udGVudHMoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGludCBib3JkZXJUZXhlbHMpCiB7
CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IG1fcGljdHVyZS5iZWdpblJlY29yZGluZyhjb250ZW50
UmVjdC53aWR0aCgpLCBjb250ZW50UmVjdC5oZWlnaHQoKSk7CisgICAgUGxhdGZvcm1Db250ZXh0
U2tpYSBwbGF0Zm9ybUNvbnRleHQoY2FudmFzKTsKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhp
Y3NDb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworICAgIHBhaW50KGdyYXBoaWNzQ29udGV4dCwg
Y29udGVudFJlY3QpOworICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmcoKTsKIH0KIAotTGF5ZXJU
ZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6fkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoKQor
dm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpkcmF3UGljdHVyZShTa0NhbnZhcyog
Y2FudmFzKQogeworICAgIFRSQUNFX0VWRU5UKCJMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJl
OjpkcmF3UGljdHVyZSIsIHRoaXMsIDApOworICAgIGNhbnZhcy0+ZHJhd1BpY3R1cmUobV9waWN0
dXJlKTsKIH0KIAotTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0IExheWVy
VGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0
dXJlRm9ybWF0KQorUGFzc1JlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyU2hhcmVkTWVtb3J5PiBM
YXllclRleHR1cmVVcGRhdGVyU2hhcmVkTWVtb3J5OjpjcmVhdGUoUGFzc093blB0cjxMYXllclBh
aW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKIHsKLSAgICAvLyBIZXJlIHdlIGRpcmVjdGx5IHJlbmRl
ciB0byB0aGUgdGV4dHVyZSwgc28gdGhlIGNvbXBvbmVudCBvcmRlciBpcyBhbHdheXMgY29ycmVj
dC4KLSAgICByZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9ybWF0UkdC
QTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJTaGFyZWRNZW1v
cnkocGFpbnRlcikpOwogfQogCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnBy
ZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYg
dGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpCitMYXllclRleHR1cmVVcGRhdGVyU2hhcmVkTWVt
b3J5OjpMYXllclRleHR1cmVVcGRhdGVyU2hhcmVkTWVtb3J5KFBhc3NPd25QdHI8TGF5ZXJQYWlu
dGVyQ2hyb21pdW0+IHBhaW50ZXIpIDogTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShwYWlu
dGVyKQogewotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBtX3BpY3R1cmUuYmVnaW5SZWNvcmRpbmco
Y29udGVudFJlY3Qud2lkdGgoKSwgY29udGVudFJlY3QuaGVpZ2h0KCkpOwotICAgIFBsYXRmb3Jt
Q29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KGNhbnZhcyk7Ci0gICAgR3JhcGhpY3NDb250ZXh0
IGdyYXBoaWNzQ29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKLSAgICBwYWludENvbnRlbnRzKGdy
YXBoaWNzQ29udGV4dCwgY29udGVudFJlY3QpOwotICAgIG1fcGljdHVyZS5lbmRSZWNvcmRpbmco
KTsKIH0KIAotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRhdGVUZXh0dXJl
UmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2Nh
dG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCitMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4
ZWxGb3JtYXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNoYXJlZE1lbW9yeTo6c2FtcGxlZFRleGVsRm9y
bWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCit7CisgICAgLy8gVGhlIGNvbXBvbmVudCBvcmRl
ciBtYXkgYmUgYmdyYSBpZiB3ZSB1cGxvYWRlZCBiZ3JhIHBpeGVscyB0byByZ2JhIHRleHR1cmVz
LgorICAgIHJldHVybiBQbGF0Zm9ybUNvbG9yOjpzYW1lQ29tcG9uZW50T3JkZXIodGV4dHVyZUZv
cm1hdCkgPworICAgICAgICAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxlZFRleGVsRm9y
bWF0UkdCQSA6IExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE7Cit9
CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNoYXJlZE1lbW9yeTo6cHJlcGFyZVRvVXBkYXRl
UmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2Nh
dG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCit7
CisgICAgdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKKyAgICB0ZXh0
dXJlLT5tYXBUZXhTdWJJbWFnZTJEKGNvbnRleHQsIGFsbG9jYXRvciwgZGVzdFJlY3QpOworfQor
Cit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTaGFyZWRNZW1vcnk6OnBhaW50VGV4dHVyZVJlY3Qo
TWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpCit7Cisg
ICAgT3duUHRyPFNrQ2FudmFzPiBjYW52YXMgPSBhZG9wdFB0cihuZXcgc2tpYTo6UGxhdGZvcm1D
YW52YXMoc291cmNlUmVjdC53aWR0aCgpLCBzb3VyY2VSZWN0LmhlaWdodCgpLCBmYWxzZSwgdGV4
dHVyZS0+bWFwcGVkQnVmZmVyKCkpKTsKKworICAgIC8vIFRyYW5zbGF0ZSB0aGUgb3JpZ2luIG9m
IGNvbnRlbnRSZWN0IHRvIHRoYXQgb2Ygc291cmNlUmVjdC4KKyAgICBjYW52YXMtPnRyYW5zbGF0
ZShjb250ZW50UmVjdCgpLngoKSAtIHNvdXJjZVJlY3QueCgpLAorICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRlbnRSZWN0KCkueSgpIC0gc291cmNlUmVjdC55KCkpOworICAgIGRyYXdQaWN0dXJl
KGNhbnZhcy5nZXQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNoYXJlZE1lbW9y
eTo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVB
bGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQoreworICAgIHRleHR1cmUt
PmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CisgICAgdGV4dHVyZS0+dW5tYXBUZXhT
dWJJbWFnZTJEKGNvbnRleHQpOworfQorCitQYXNzUmVmUHRyPExheWVyVGV4dHVyZVVwZGF0ZXJG
cmFtZWJ1ZmZlcj4gTGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lYnVmZmVyOjpjcmVhdGUoUGFzc093
blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4gcGFpbnRlcikKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IExheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcihwYWludGVyKSk7Cit9CisKK0xh
eWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6TGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lYnVm
ZmVyKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+IHBhaW50ZXIpCisgICAgOiBMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKHBhaW50ZXIpCit7Cit9CisKK0xheWVyVGV4dHVyZVVw
ZGF0ZXJGcmFtZWJ1ZmZlcjo6fkxheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcigpCit7Cit9
CisKK0xheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdCBMYXllclRleHR1cmVV
cGRhdGVyRnJhbWVidWZmZXI6OnNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9y
bWF0KQoreworICAgIC8vIEhlcmUgd2UgZGlyZWN0bHkgcmVuZGVyIHRvIHRoZSB0ZXh0dXJlLCBz
byB0aGUgY29tcG9uZW50IG9yZGVyIGlzIGFsd2F5cyBjb3JyZWN0LgorICAgIHJldHVybiBMYXll
clRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4ZWxGb3JtYXRSR0JBOworfQorCit2b2lkIExheWVy
VGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcjo6dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgTWFuYWdlZFRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRl
c3RSZWN0KQogewogICAgIC8vIE1ha2Ugc3VyZSBTS0lBIHVzZXMgdGhlIGNvcnJlY3QgR0wgY29u
dGV4dC4KICAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAppbmRleCBmZmM3MWM2OGZmN2M3ZGM5ODIxY2U5YWM4
YTFiNDA4OGFhNTg4Mzg5Li42ZWNhNzRmOTAwNGQ3MzEwZjlmYzk2YzBjMzE0NTU0Y2I4NzA5MDc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCkBAIC01NCw3ICs1
NCw3IEBAIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgOiBwdWJsaWMgTGF5ZXJUZXh0
dXJlVXBkYXRlciB7CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRl
ckNhbnZhcyhQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9taXVtPik7CiAKLSAgICB2b2lkIHBh
aW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3Qp
OworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50UmVjdDsgfQogCiBwcml2YXRlOgpAQCAtNzAsNyArNzAsMTAgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4
dHVyZVVwZGF0ZXI6OkJvdHRvbVVwT3JpZW50YXRpb247IH0KICAgICB2aXJ0dWFsIFNhbXBsZWRU
ZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMpOworICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpOworICAgIHZpcnR1YWwgdm9p
ZCBwcmVwYXJlVG9VcGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJl
QWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRS
ZWN0JiBkZXN0UmVjdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3Qg
SW50UmVjdCYgY29udGVudFJlY3QsIGludCBib3JkZXJUZXhlbHMpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludFRleHR1cmVSZWN0KE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3Jh
cGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKIHByaXZh
dGU6CkBAIC04MiwxOCArODUsNDQgQEAgcHJpdmF0ZToKICNpZiBVU0UoU0tJQSkKIGNsYXNzIExh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUgOiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlckNh
bnZhcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRl
clNrUGljdHVyZT4gY3JlYXRlKFBhc3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKLSAg
ICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKCk7CisgICAgZXhwbGljaXQg
TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShQYXNzT3duUHRyPExheWVyUGFpbnRlckNocm9t
aXVtPik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBJbnRSZWN0JiBj
b250ZW50UmVjdCwgaW50IGJvcmRlclRleGVscyk7CisgICAgdm9pZCBkcmF3UGljdHVyZShTa0Nh
bnZhcyopOworCitwcm90ZWN0ZWQ6CisgICAgU2tQaWN0dXJlIG1fcGljdHVyZTsgLy8gUmVjb3Jk
aW5nIGNhbnZhcy4KK307CisKK2NsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJTaGFyZWRNZW1vcnkg
OiBwdWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TGF5ZXJUZXh0dXJlVXBkYXRlclNoYXJlZE1lbW9yeT4gY3JlYXRlKFBh
c3NPd25QdHI8TGF5ZXJQYWludGVyQ2hyb21pdW0+KTsKKworICAgIHZpcnR1YWwgT3JpZW50YXRp
b24gb3JpZW50YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9y
aWVudGF0aW9uOyB9CisgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVs
Rm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
VG9VcGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwg
Y29uc3QgSW50U2l6ZSYgdGlsZVNpemUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9V
cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRU
ZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dFRleHR1cmVSZWN0KE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7
CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwg
VGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOworCitwcml2YXRlOgorICAgIExheWVyVGV4
dHVyZVVwZGF0ZXJTaGFyZWRNZW1vcnkoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4p
OworfTsKKworY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlckZyYW1lYnVmZmVyIDogcHVibGljIExh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPExheWVyVGV4dHVyZVVwZGF0ZXJGcmFtZWJ1ZmZlcj4gY3JlYXRlKFBhc3NPd25QdHI8TGF5
ZXJQYWludGVyQ2hyb21pdW0+KTsKKyAgICB2aXJ0dWFsIH5MYXllclRleHR1cmVVcGRhdGVyRnJh
bWVidWZmZXIoKTsKIAogICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSB7IHJl
dHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpUb3BEb3duT3JpZW50YXRpb247IH0KICAgICB2aXJ0
dWFsIFNhbXBsZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVy
ZUZvcm1hdCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUsIGludCBib3JkZXJUZXhlbHMp
OworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBj
b25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0
dXJlLCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50
VGV4dHVyZVJlY3QoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0Nv
bnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKIAogcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlKFBhc3NPd25QdHI8TGF5ZXJQ
YWludGVyQ2hyb21pdW0+KTsKLSAgCi0gICAgU2tQaWN0dXJlIG1fcGljdHVyZTsgLy8gUmVjb3Jk
aW5nIGNhbnZhcy4KKyAgICBleHBsaWNpdCBMYXllclRleHR1cmVVcGRhdGVyRnJhbWVidWZmZXIo
UGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1bT4pOwogfTsKICNlbmRpZiAvLyBVU0UoU0tJ
QSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTWFuYWdlZFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCmluZGV4IDViYmZmNmE0M2U1YjAzOGIzYmYzMzI3
ZmJkM2QxZTUxNDNiN2YxZGUuLjc4NmI5MTkzNjQ5MTRiZTI4ZGY0ODlmZjczZDI3NmU3NzEzYmI2
MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L01hbmFnZWRUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1
ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFn
ZXIuaCIKIApAQCAtMzgsMTEgKzM5LDEzIEBAIE1hbmFnZWRUZXh0dXJlOjpNYW5hZ2VkVGV4dHVy
ZShUZXh0dXJlTWFuYWdlciogbWFuYWdlcikKICAgICAsIG1fdG9rZW4oMCkKICAgICAsIG1fZm9y
bWF0KDApCiAgICAgLCBtX3RleHR1cmVJZCgwKQorICAgICwgbV9tYXBwZWRCdWZmZXIoMCkKIHsK
IH0KIAogTWFuYWdlZFRleHR1cmU6On5NYW5hZ2VkVGV4dHVyZSgpCiB7CisgICAgQVNTRVJUKCFt
X21hcHBlZEJ1ZmZlcik7CiAgICAgaWYgKG1fdG9rZW4pCiAgICAgICAgIG1fdGV4dHVyZU1hbmFn
ZXItPnJlbGVhc2VUb2tlbihtX3Rva2VuKTsKIH0KQEAgLTk2LDYgKzk5LDIzIEBAIHZvaWQgTWFu
YWdlZFRleHR1cmU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsCiAgICAgY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNI
TUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVJZCwgMCk7CiB9
CiAKK3ZvaWQgTWFuYWdlZFRleHR1cmU6Om1hcFRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QpCit7CisgICAgQVNTRVJUKCFtX21hcHBlZEJ1ZmZlcik7CisgICAgaWYgKCFtX3Rl
eHR1cmVJZCkKKyAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0
ZVRleHR1cmUoYWxsb2NhdG9yLCBtX3Rva2VuKTsKKyAgICBFeHRlbnNpb25zM0RDaHJvbWl1bSog
ZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICBtX21hcHBlZEJ1ZmZlciA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihleHRlbnNpb25zLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIDAsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53
aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgbV9mb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6V1JJVEVfT05MWSkpOworfQorCit2
b2lkIE1hbmFnZWRUZXh0dXJlOjp1bm1hcFRleFN1YkltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCit7CisgICAgQVNTRVJUKG1fbWFwcGVkQnVmZmVyKTsKKyAgICBFeHRlbnNpb25z
M0RDaHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVt
Kj4oY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICBleHRlbnNpb25zLT51bm1hcFRleFN1
YkltYWdlMkRDSFJPTUlVTShtX21hcHBlZEJ1ZmZlcik7CisgICAgbV9tYXBwZWRCdWZmZXIgPSAw
OworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2Vk
VGV4dHVyZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFu
YWdlZFRleHR1cmUuaAppbmRleCA0ZDQzODA5NTk1MzQwZjVkNzMzZDU2NzkyOTFhOTIwNjRjN2Ix
YWU1Li42MzNlNWY4ZGJmOWJiOTRmMDA3ZTIzMTY4YjE4NjZjODljNWYwOTgyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVy
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFn
ZWRUZXh0dXJlLmgKQEAgLTU3LDEwICs1NywxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOwogICAgIHZvaWQg
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9y
Kik7CisgICAgdm9pZCBtYXBUZXhTdWJJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVy
ZUFsbG9jYXRvciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHVubWFwVGV4U3ViSW1hZ2Uy
RChHcmFwaGljc0NvbnRleHQzRCopOwogCiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CiAgICAgdW5zaWduZWQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9mb3Jt
YXQ7IH0KICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJ
ZDsgfQorICAgIHVpbnQ4X3QqIG1hcHBlZEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwcGVk
QnVmZmVyOyB9CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTWFuYWdlZFRleHR1cmUoVGV4dHVy
ZU1hbmFnZXIqKTsKQEAgLTcwLDYgKzczLDcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fc2l6
ZTsKICAgICB1bnNpZ25lZCBtX2Zvcm1hdDsKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKKyAg
ICB1aW50OF90KiBtX21hcHBlZEJ1ZmZlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGZjYzQ2ZDk5M2Q1NDBhNDIxOWQ3ZjI3MDEwMDE4NzM4ZWY3YjhmZmUu
LmMwODIwMmNiMzNlMjRiZjM1ZjdhOWUxOGI4MjEzNTdmNmY2ODYwM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcApAQCAtNjAsNiArNjAsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBM
YXllci1zcGFjZSBkaXJ0eSByZWN0YW5nbGUgdGhhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQuCiAg
ICAgSW50UmVjdCBtX2RpcnR5TGF5ZXJSZWN0OworICAgIC8vIFRpbGUtc3BhY2UgcmVjdGFuZ2xl
IHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZC4KKyAgICBJbnRSZWN0IG1fdXBkYXRlUmVjdDsKIHBy
aXZhdGU6CiAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBtX3RleDsKIH07CkBAIC0xNTEsOSAr
MTUzLDEzIEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRMYXllclRyZWVIb3N0KENDTGF5
ZXJUcmVlSG9zdCogaG9zdCkKICAgICAgICAgaXNOb25Db21wb3NpdGVkQ29udGVudCgpID8gQ0NM
YXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzIDogQ0NMYXllclRpbGluZ0RhdGE6Okhhc0Jv
cmRlclRleGVscyk7CiB9CiAKLXZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVy
JiB1cGRhdGVyKQordm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRh
dGVyKQogewotICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRvIGdldCB0
dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBpbnZhbGlkYXRl
ZCBtaWQtdXBkYXRlLgorICAgIGlmIChtX3BhaW50UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHRleHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZShjb250ZXh0LCBt
X3BhaW50UmVjdCwgbV90aWxlci0+dGlsZVNpemUoKSk7CisKICAgICBpZiAobV9za2lwc0RyYXcg
fHwgbV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LmlzRW1wdHkoKSB8fCAhbV90aWxlci0+bnVtVGlsZXMo
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNjIsMTIgKzE2OCwxMCBAQCB2b2lkIFRpbGVkTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgQwogICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKICAg
ICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAg
VXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKLSAgICAgICAgICAgIGlmICghdGls
ZSkKLSAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQorICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxl
LT5kaXJ0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAvLyBD
YWxjdWxhdGUgcGFnZS1zcGFjZSByZWN0YW5nbGUgdG8gY29weSBmcm9tLgorICAgICAgICAgICAg
Ly8gQ2FsY3VsYXRlIHBhZ2Utc3BhY2UgcmVjdGFuZ2xlIHRvIHVwZGF0ZS4KICAgICAgICAgICAg
IEludFJlY3Qgc291cmNlUmVjdCA9IG1fdGlsZXItPnRpbGVDb250ZW50UmVjdCh0aWxlKTsKICAg
ICAgICAgICAgIGNvbnN0IEludFBvaW50IGFuY2hvciA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsK
ICAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1fdGlsZXItPmxheWVyUmVjdFRvQ29u
dGVudFJlY3QodGlsZS0+bV9kaXJ0eUxheWVyUmVjdCkpOwpAQCAtMTc3LDI0ICsxODEsNTIgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJUKHRp
bGUtPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKTsKLQotICAgICAgICAgICAgLy8gQ2FsY3VsYXRl
IHRpbGUtc3BhY2UgcmVjdGFuZ2xlIHRvIHVwbG9hZCBpbnRvLgorICAgICAgICAgICAgLy8gQ2Fs
Y3VsYXRlIHRpbGUtc3BhY2UgcmVjdGFuZ2xlIHRvIHVwZGF0ZS4KICAgICAgICAgICAgIEludFJl
Y3QgZGVzdFJlY3QoSW50UG9pbnQoc291cmNlUmVjdC54KCkgLSBhbmNob3IueCgpLCBzb3VyY2VS
ZWN0LnkoKSAtIGFuY2hvci55KCkpLCBzb3VyY2VSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBp
ZiAoZGVzdFJlY3QueCgpIDwgMCkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwogICAgICAgICAg
ICAgaWYgKGRlc3RSZWN0LnkoKSA8IDApCiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKIAorICAg
ICAgICAgICAgdGlsZS0+bV91cGRhdGVSZWN0ID0gZGVzdFJlY3Q7CisKKyAgICAgICAgICAgIHRl
eHR1cmVVcGRhdGVyKCktPnByZXBhcmVUb1VwZGF0ZVJlY3QoY29udGV4dCwgdXBkYXRlci5hbGxv
Y2F0b3IoKSwgdGlsZS0+dGV4dHVyZSgpLCBkZXN0UmVjdCk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgVGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKQorewor
ICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0aW5nIHRvIGdldCB0dXJuZWQgb2Zm
LCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRvIGJlY29tZSBpbnZhbGlkYXRlZCBtaWQtdXBk
YXRlLgorICAgIGlmIChtX3NraXBzRHJhdyB8fCBtX3JlcXVlc3RlZFVwZGF0ZVJlY3QuaXNFbXB0
eSgpIHx8ICFtX3RpbGVyLT5udW1UaWxlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQg
bGVmdCwgdG9wLCByaWdodCwgYm90dG9tOworICAgIG1fdGlsZXItPmNvbnRlbnRSZWN0VG9UaWxl
SW5kaWNlcyhtX3JlcXVlc3RlZFVwZGF0ZVJlY3QsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7
CisgICAgZm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgeworICAgICAgICBmb3Ig
KGludCBpID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CisgICAgICAgICAgICBVcGRhdGFibGVU
aWxlKiB0aWxlID0gdGlsZUF0KGksIGopOworICAgICAgICAgICAgaWYgKCF0aWxlIHx8ICF0aWxl
LT5kaXJ0eSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBJbnRQ
b2ludCB0aWxlT2Zmc2V0ID0gbV90aWxlci0+dGlsZUNvbnRlbnRSZWN0KHRpbGUpLmxvY2F0aW9u
KCk7CisKKyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBwYWdlLXNwYWNlIHJlY3RhbmdsZSB0byBj
b3B5IGZyb20uCisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoSW50UG9pbnQodGlsZS0+
bV91cGRhdGVSZWN0LngoKSArIHRpbGVPZmZzZXQueCgpLCB0aWxlLT5tX3VwZGF0ZVJlY3QueSgp
ICsgdGlsZU9mZnNldC55KCkpLCB0aWxlLT5tX3VwZGF0ZVJlY3Quc2l6ZSgpKTsKKyAgICAgICAg
ICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgQVNTRVJUKHRpbGUtPnRleHR1cmUoKS0+aXNSZXNlcnZlZCgpKTsKKwog
ICAgICAgICAgICAgLy8gT2Zmc2V0IGZyb20gcGFpbnQgcmVjdGFuZ2xlIHRvIHRoaXMgdGlsZSdz
IGRpcnR5IHJlY3RhbmdsZS4KICAgICAgICAgICAgIEludFBvaW50IHBhaW50T2Zmc2V0KHNvdXJj
ZVJlY3QueCgpIC0gbV9wYWludFJlY3QueCgpLCBzb3VyY2VSZWN0LnkoKSAtIG1fcGFpbnRSZWN0
LnkoKSk7CiAgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQueCgpIDwgMCkKICAgICAgICAgICAg
ICAgICBDUkFTSCgpOwogICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSA8IDApCiAgICAg
ICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWludE9mZnNldC54KCkgKyBk
ZXN0UmVjdC53aWR0aCgpID4gbV9wYWludFJlY3Qud2lkdGgoKSkKKyAgICAgICAgICAgIGlmIChw
YWludE9mZnNldC54KCkgKyB0aWxlLT5tX3VwZGF0ZVJlY3Qud2lkdGgoKSA+IG1fcGFpbnRSZWN0
LndpZHRoKCkpCiAgICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGlmIChwYWlu
dE9mZnNldC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQor
ICAgICAgICAgICAgaWYgKHBhaW50T2Zmc2V0LnkoKSArIHRpbGUtPm1fdXBkYXRlUmVjdC5oZWln
aHQoKSA+IG1fcGFpbnRSZWN0LmhlaWdodCgpKQogICAgICAgICAgICAgICAgIENSQVNIKCk7CiAK
ICAgICAgICAgICAgIHRpbGUtPnRleHR1cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCwgdXBkYXRl
ci5hbGxvY2F0b3IoKSk7CkBAIC0yMDIsNyArMjM0LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IEMKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSLCBmaWx0ZXIpKTsKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsKIAotICAgICAgICAgICAgdXBkYXRlci5h
cHBlbmQodGlsZS0+dGV4dHVyZSgpLCB0ZXh0dXJlVXBkYXRlcigpLCBzb3VyY2VSZWN0LCBkZXN0
UmVjdCk7CisgICAgICAgICAgICB1cGRhdGVyLmFwcGVuZCh0aWxlLT50ZXh0dXJlKCksIHRleHR1
cmVVcGRhdGVyKCksIHNvdXJjZVJlY3QsIHRpbGUtPm1fdXBkYXRlUmVjdCk7CiAgICAgICAgICAg
ICB0aWxlLT5jbGVhckRpcnR5KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNjUsMTUgKzM5Nyw0
OSBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRSZWN0KQogICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IGNvbnRlbnRSZWN0
OwogCiAgICAgbV9wYWludFJlY3QgPSBtX3RpbGVyLT5sYXllclJlY3RUb0NvbnRlbnRSZWN0KGRp
cnR5TGF5ZXJSZWN0KTsKLSAgICBpZiAoZGlydHlMYXllclJlY3QuaXNFbXB0eSgpKQorfQorCit2
b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cGFpbnRDb250ZW50cygpCit7CisgICAgQVNTRVJUKG1f
dGlsZXIpOworCisgICAgaWYgKG1fcmVxdWVzdGVkVXBkYXRlUmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghbV90aWxlci0+bnVtVGlsZXMoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fc2tpcHNEcmF3KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9wYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBDYWxsaW5n
IHByZXBhcmVUb1VwZGF0ZSgpIGNhbGxzIGludG8gV2ViS2l0IHRvIHBhaW50LCB3aGljaCBtYXkg
aGF2ZSB0aGUgc2lkZQorICAgIC8vIENhbGxpbmcgcGFpbnRDb250ZW50cygpIGNhbGxzIGludG8g
V2ViS2l0IHRvIHBhaW50LCB3aGljaCBtYXkgaGF2ZSB0aGUgc2lkZQogICAgIC8vIGVmZmVjdCBv
ZiBkaXNhYmxpbmcgY29tcG9zaXRpbmcsIHdoaWNoIGNhdXNlcyBvdXIgcmVmZXJlbmNlIHRvIHRo
ZSB0ZXh0dXJlIHVwZGF0ZXIgdG8gYmUgZGVsZXRlZC4KICAgICAvLyBIb3dldmVyLCB3ZSBjYW4n
dCBmcmVlIHRoZSBtZW1vcnkgYmFja2luZyB0aGUgR3JhcGhpY3NDb250ZXh0IHVudGlsIHRoZSBw
YWludCBmaW5pc2hlcywKICAgICAvLyBzbyB3ZSBncmFiIGEgbG9jYWwgcmVmZXJlbmNlIGhlcmUg
dG8gaG9sZCB0aGUgdXBkYXRlciBhbGl2ZSB1bnRpbCB0aGUgcGFpbnQgY29tcGxldGVzLgogICAg
IFJlZlB0cjxMYXllclRleHR1cmVVcGRhdGVyPiBwcm90ZWN0b3IodGV4dHVyZVVwZGF0ZXIoKSk7
Ci0gICAgdGV4dHVyZVVwZGF0ZXIoKS0+cHJlcGFyZVRvVXBkYXRlKG1fcGFpbnRSZWN0LCBtX3Rp
bGVyLT50aWxlU2l6ZSgpLCBtX3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSk7CisgICAgdGV4dHVy
ZVVwZGF0ZXIoKS0+cGFpbnRDb250ZW50cyhtX3BhaW50UmVjdCwgbV90aWxlci0+aGFzQm9yZGVy
VGV4ZWxzKCkpOworCisgICAgaW50IGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKKyAgICBtX3Rp
bGVyLT5jb250ZW50UmVjdFRvVGlsZUluZGljZXMobV9yZXF1ZXN0ZWRVcGRhdGVSZWN0LCBsZWZ0
LCB0b3AsIHJpZ2h0LCBib3R0b20pOworICAgIGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9t
OyArK2opIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewor
ICAgICAgICAgICAgVXBkYXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKKyAgICAgICAg
ICAgIGlmICghdGlsZSB8fCAhdGlsZS0+ZGlydHkoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgSW50UG9pbnQgdGlsZU9mZnNldCA9IG1fdGlsZXItPnRpbGVDb250
ZW50UmVjdCh0aWxlKS5sb2NhdGlvbigpOworCisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgcGFn
ZS1zcGFjZSByZWN0YW5nbGUgdG8gcGFpbnQuCisgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QoSW50UG9pbnQodGlsZS0+bV91cGRhdGVSZWN0LngoKSArIHRpbGVPZmZzZXQueCgpLCB0aWxl
LT5tX3VwZGF0ZVJlY3QueSgpICsgdGlsZU9mZnNldC55KCkpLCB0aWxlLT5tX3VwZGF0ZVJlY3Qu
c2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGV4dHVyZVVwZGF0ZXIoKS0+cGFpbnRU
ZXh0dXJlUmVjdCh0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3QpOworICAgICAgICB9CisgICAg
fQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDVkYWYwZjAxOTQ3YTk5
NDdjZDIzNWY1NWZiNzM5NTllNDQ3YjFmNTYuLmMzODZlNzUxYjZlNDViYmMyODI0ZDI0M2Y4Y2Y4
YjFkOTYwZmVmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC00Myw2ICs0Myw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgflRpbGVkTGF5ZXJDaHJvbWl1bSgpOwogCisgICAg
dmlydHVhbCB2b2lkIHByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNE
KiwgQ0NUZXh0dXJlVXBkYXRlciYpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRJc01hc2soYm9vbCk7CiAKQEAgLTY1LDggKzY2LDEyIEBAIHByb3RlY3Rl
ZDoKIAogICAgIC8vIFNldCBpbnZhbGlkYXRpb25zIHRvIGJlIHBvdGVudGlhbGx5IHJlcGFpbnRl
ZCBkdXJpbmcgdXBkYXRlKCkuCiAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0
JiBjb250ZW50UmVjdCk7Ci0gICAgLy8gUHJlcGFyZSBkYXRhIG5lZWRlZCB0byB1cGRhdGUgdGV4
dHVyZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCBjb250ZW50UmVjdC4KKyAgICAvLyBQcmVwYXJlIHRv
IHVwZGF0ZSB0ZXh0dXJlcyB0aGF0IGludGVyc2VjdCB3aXRoIGNvbnRlbnRSZWN0LgogICAgIHZv
aWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KTsKKyAgICAvLyBQ
YWludCBjb250ZW50cyBuZWVkZWQgdG8gdXBkYXRlIHRleHR1cmVzLgorICAgIHZvaWQgcGFpbnRD
b250ZW50cygpOworICAgIC8vIFVwZGF0ZSBpbnZhbGlkIHRleHR1cmVzIHRoYXQgaW50ZXJzZWN0
IHdpdGggY29udGVudFJlY3QgcHJvdmlkZWQgaW4gcHJlcGFyZVRvVXBkYXRlKCkuCisgICAgdm9p
ZCB1cGRhdGVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgTGF5ZXJUZXh0dXJlVXBkYXRlciopOwog
CiAgICAgdmlydHVhbCB2b2lkIHByb3RlY3RWaXNpYmxlVGlsZVRleHR1cmVzKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDQxOGQ1Mjk4ZDEwNmI5ZmVkZTdjYmUxYjRh
NGEzMDBhNTBiOWVjY2EuLjliYWRlYjczOGQwODE4ZjcxMjNhNWU0MmI5ZGU5NTNiZjI5ZTBkYjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcApAQCAtMjUyLDYgKzI1MiwxNyBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKCkKICAgICBzdGF0aWNfY2FzdDxDQ1Npbmds
ZVRocmVhZFByb3h5Kj4obV9wcm94eS5nZXQoKSktPmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CiB9
CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwcmVwYXJlVG9VcGRhdGVMYXllcnMoKQoreworICAg
IGlmICghcm9vdExheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh2aWV3cG9ydFNp
emUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHByZXBhcmVUb1VwZGF0ZUxh
eWVycyhyb290TGF5ZXIoKSk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVMYXll
cnMoKQogewogICAgIGlmICghcm9vdExheWVyKCkpCkBAIC0yNjMsOSArMjc0LDkgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycygpCiAgICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXll
cigpKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyhMYXllckNocm9t
aXVtKiByb290TGF5ZXIpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZVRvVXBkYXRlTGF5
ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllcikKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0OjpwcmVwYXJlVG9VcGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKIAogICAgIGlm
ICghcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkpCiAgICAgICAgIHJvb3RMYXllci0+Y3JlYXRl
UmVuZGVyU3VyZmFjZSgpOwpAQCAtMjc1LDcgKzI4Niw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
Ojp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQogICAgIHJvb3RMYXllci0+
c2V0U2Npc3NvclJlY3Qocm9vdFNjaXNzb3JSZWN0KTsKIAogICAgIC8vIFRoaXMgYXNzZXJ0IGZp
cmVzIGlmIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMgd2Fzbid0IGNhbGxlZCBhZnRlcgotICAg
IC8vIHVwZGF0ZUxheWVycy4gT25seSBvbmUgdXBkYXRlIGNhbiBiZSBwZW5kaW5nIGF0IGFueSBn
aXZlbiB0aW1lLgorICAgIC8vIHByZXBhcmVUb1VwZGF0ZUxheWVycy4gT25seSBvbmUgdXBkYXRl
IGNhbiBiZSBwZW5kaW5nIGF0IGFueSBnaXZlbiB0aW1lLgogICAgIEFTU0VSVCghbV91cGRhdGVM
aXN0LnNpemUoKSk7CiAgICAgbV91cGRhdGVMaXN0LmFwcGVuZChyb290TGF5ZXIpOwogCkBAIC0y
ODcsMTggKzI5OCwyNSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVy
Q2hyb21pdW0qIHJvb3RMYXllcikKICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9vdExheWVyLCByb290TGF5ZXIsIG1f
em9vbUFuaW1hdG9yVHJhbnNmb3JtLCBtX3pvb21BbmltYXRvclRyYW5zZm9ybSwgbV91cGRhdGVM
aXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIGxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKS5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgfQogCisgICAgcHJlcGFyZVRvUGFpbnRMYXll
ckNvbnRlbnRzKG1fdXBkYXRlTGlzdCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRh
dGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQoreworICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOworCiAgICAgcGFpbnRMYXll
ckNvbnRlbnRzKG1fdXBkYXRlTGlzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50Q29udGVudHNJ
ZkRpcnR5KExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJS
ZWN0KQorc3RhdGljIHZvaWQgcHJlcGFyZVRvUGFpbnRDb250ZW50cyhMYXllckNocm9taXVtKiBs
YXllciwgY29uc3QgSW50UmVjdCYgdmlzaWJsZUxheWVyUmVjdCkKIHsKICAgICBpZiAobGF5ZXIt
PmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZp
c2libGVMYXllclJlY3QpOwotICAgICAgICBsYXllci0+cGFpbnRDb250ZW50c0lmRGlydHkoKTsK
KyAgICAgICAgbGF5ZXItPnByZXBhcmVUb1BhaW50Q29udGVudHMoKTsKICAgICB9CiB9CiAKLXZv
aWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShM
YXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
cHJlcGFyZVRvUGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1
bSogcmVuZGVyU3VyZmFjZUxheWVyKQogewogICAgIC8vIE5vdGU6IE1hc2tzIGFuZCByZXBsaWNh
cyBvbmx5IGV4aXN0IGZvciBsYXllcnMgdGhhdCBvd24gcmVuZGVyIHN1cmZhY2VzLiBJZiB3ZSBy
ZWFjaCB0aGlzIHBvaW50CiAgICAgLy8gaW4gY29kZSwgd2UgYWxyZWFkeSBrbm93IHRoYXQgYXQg
bGVhc3Qgc29tZXRoaW5nIHdpbGwgYmUgZHJhd24gaW50byB0aGlzIHJlbmRlciBzdXJmYWNlLCBz
byB0aGUKQEAgLTMwNiw3ICszMjQsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRNYXNr
QW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UoTGF5ZXJDaHJvbWl1bSogcmVuZGVyUwogCiAgICAg
aWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpIHsKICAgICAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsKLSAgICAgICAg
cGFpbnRDb250ZW50c0lmRGlydHkocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSwgSW50
UmVjdChJbnRQb2ludCgpLCByZW5kZXJTdXJmYWNlTGF5ZXItPmNvbnRlbnRCb3VuZHMoKSkpOwor
ICAgICAgICBwcmVwYXJlVG9QYWludENvbnRlbnRzKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xh
eWVyKCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVuZGVyU3VyZmFjZUxheWVyLT5jb250ZW50Qm91
bmRzKCkpKTsKICAgICB9CiAKICAgICBMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSByZW5k
ZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpOwpAQCAtMzE1LDE2ICszMzMsMTYgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TWFza0FuZFJlcGxpY2FGb3JSZW5kZXJTdXJmYWNlKExh
eWVyQ2hyb21pdW0qIHJlbmRlclMKICAgICAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0g
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0PExheWVyQ2hy
b21pdW0+KHJlbmRlclN1cmZhY2VMYXllcik7CiAKICAgICAgICAgcmVwbGljYUxheWVyLT5zZXRM
YXllclRyZWVIb3N0KHRoaXMpOwotICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNh
TGF5ZXIsIHZpc2libGVMYXllclJlY3QpOworICAgICAgICBwcmVwYXJlVG9QYWludENvbnRlbnRz
KHJlcGxpY2FMYXllciwgdmlzaWJsZUxheWVyUmVjdCk7CiAKICAgICAgICAgaWYgKHJlcGxpY2FM
YXllci0+bWFza0xheWVyKCkpIHsKICAgICAgICAgICAgIHJlcGxpY2FMYXllci0+bWFza0xheWVy
KCktPnNldExheWVyVHJlZUhvc3QodGhpcyk7Ci0gICAgICAgICAgICBwYWludENvbnRlbnRzSWZE
aXJ0eShyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBJbnRSZWN0KEludFBvaW50KCksIHJlcGxp
Y2FMYXllci0+bWFza0xheWVyKCktPmNvbnRlbnRCb3VuZHMoKSkpOworICAgICAgICAgICAgcHJl
cGFyZVRvUGFpbnRDb250ZW50cyhyZXBsaWNhTGF5ZXItPm1hc2tMYXllcigpLCBJbnRSZWN0KElu
dFBvaW50KCksIHJlcGxpY2FMYXllci0+bWFza0xheWVyKCktPmNvbnRlbnRCb3VuZHMoKSkpOwog
ICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNv
bnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0OjpwcmVwYXJlVG9QYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9
IHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAt
LXN1cmZhY2VJbmRleCkgewogICAgICAgICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5
ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CkBAIC0zNDAs
NyArMzU4LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBhaW50TGF5ZXJDb250ZW50cyhjb25z
dCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIHJlbmRlclN1cmZhY2VMYXllci0+c2V0TGF5ZXJUcmVlSG9zdCh0aGlzKTsK
LSAgICAgICAgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFj
ZUxheWVyKTsKKyAgICAgICAgcHJlcGFyZVRvUGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1
cmZhY2UocmVuZGVyU3VyZmFjZUxheWVyKTsKIAogICAgICAgICBjb25zdCBMYXllckxpc3QmIGxh
eWVyTGlzdCA9IHJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpOwogICAgICAgICBBU1NFUlQobGF5
ZXJMaXN0LnNpemUoKSk7CkBAIC0zNTksMTEgKzM3Nyw5OCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdAogICAgICAgICAgICAgCiAgICAgICAgICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3Qg
PSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVMYXllclJlY3Q8TGF5ZXJD
aHJvbWl1bT4obGF5ZXIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBwYWludENvbnRlbnRz
SWZEaXJ0eShsYXllciwgdmlzaWJsZUxheWVyUmVjdCk7CisgICAgICAgICAgICBwcmVwYXJlVG9Q
YWludENvbnRlbnRzKGxheWVyLCB2aXNpYmxlTGF5ZXJSZWN0KTsKICAgICAgICAgfQogICAgIH0K
IH0KIAorc3RhdGljIHZvaWQgcGFpbnRDb250ZW50c0lmRGlydHkoTGF5ZXJDaHJvbWl1bSogbGF5
ZXIpCit7CisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5ZXItPnBh
aW50Q29udGVudHNJZkRpcnR5KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwYWludE1h
c2tBbmRSZXBsaWNhRm9yUmVuZGVyU3VyZmFjZShMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNl
TGF5ZXIpCit7CisgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkpCisgICAg
ICAgIHBhaW50Q29udGVudHNJZkRpcnR5KHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xheWVyKCkp
OworCisgICAgTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gcmVuZGVyU3VyZmFjZUxheWVy
LT5yZXBsaWNhTGF5ZXIoKTsKKyAgICBpZiAocmVwbGljYUxheWVyKSB7CisgICAgICAgIHBhaW50
Q29udGVudHNJZkRpcnR5KHJlcGxpY2FMYXllcik7CisKKyAgICAgICAgaWYgKHJlcGxpY2FMYXll
ci0+bWFza0xheWVyKCkpCisgICAgICAgICAgICBwYWludENvbnRlbnRzSWZEaXJ0eShyZXBsaWNh
TGF5ZXItPm1hc2tMYXllcigpKTsKKyAgICB9Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpw
YWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KQoreworICAgIGZvciAoaW50IHN1cmZhY2VJbmRleCA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpIC0gMTsgc3VyZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgeworICAgICAg
ICBMYXllckNocm9taXVtKiByZW5kZXJTdXJmYWNlTGF5ZXIgPSByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0W3N1cmZhY2VJbmRleF0uZ2V0KCk7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSog
cmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAg
ICAgICBBU1NFUlQocmVuZGVyU3VyZmFjZSk7CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNl
LT5sYXllckxpc3QoKS5zaXplKCkgfHwgIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBwYWludE1hc2tBbmRSZXBsaWNhRm9yUmVu
ZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlTGF5ZXIpOworCisgICAgICAgIGNvbnN0IExheWVyTGlz
dCYgbGF5ZXJMaXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CisgICAgICAgIEFTU0VS
VChsYXllckxpc3Quc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0g
MDsgbGF5ZXJJbmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAg
ICAgICAgTGF5ZXJDaHJvbWl1bSogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7
CisKKyAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgcGFpbnRDb250ZW50c0lmRGlydHkobGF5ZXIpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cHJlcGFyZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIENDVGV4dHVyZVVwZGF0ZXImIHVwZGF0ZXIp
Cit7CisgICAgZm9yIChpbnQgc3VyZmFjZUluZGV4ID0gbV91cGRhdGVMaXN0LnNpemUoKSAtIDE7
IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNlSW5kZXgpIHsKKyAgICAgICAgTGF5ZXJDaHJv
bWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gbV91cGRhdGVMaXN0W3N1cmZhY2VJbmRleF0uZ2V0
KCk7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IHJlbmRl
clN1cmZhY2VMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICBBU1NFUlQocmVuZGVyU3Vy
ZmFjZSk7CisKKyAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKS5zaXplKCkg
fHwgIXJlbmRlclN1cmZhY2UtPmRyYXdPcGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAocmVuZGVyU3VyZmFjZUxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAg
ICAgIHByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2VzKHJlbmRlclN1cmZhY2VMYXllci0+bWFza0xh
eWVyKCksIGNvbnRleHQsIHVwZGF0ZXIpOworCisgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlTGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgICAgICBwcmVwYXJlQ29tcG9zaXRvclJlc291
cmNlcyhyZW5kZXJTdXJmYWNlTGF5ZXItPnJlcGxpY2FMYXllcigpLCBjb250ZXh0LCB1cGRhdGVy
KTsKKworICAgICAgICAgICAgaWYgKHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCkt
Pm1hc2tMYXllcigpKQorICAgICAgICAgICAgICAgIHByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2Vz
KHJlbmRlclN1cmZhY2VMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLCBjb250ZXh0
LCB1cGRhdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IExheWVyTGlzdCYgbGF5ZXJM
aXN0ID0gcmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCk7CisgICAgICAgIEFTU0VSVChsYXllckxp
c3Quc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXllckluZGV4ID0gMDsgbGF5ZXJJ
bmRleCA8IGxheWVyTGlzdC5zaXplKCk7ICsrbGF5ZXJJbmRleCkgeworICAgICAgICAgICAgTGF5
ZXJDaHJvbWl1bSogbGF5ZXIgPSBsYXllckxpc3RbbGF5ZXJJbmRleF0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVuZGVyU3VyZmFjZSgp
ICE9IHJlbmRlclN1cmZhY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIHByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLCBjb250ZXh0LCB1cGRhdGVyKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnByZXBhcmVDb21w
b3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qIGxheWVyLCBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKK3sKKyAgICAvLyBGb3Igbm9ybWFs
IGxheWVycywgdGhlc2UgY29uZGl0aW9ucyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gY2hlY2tl
ZCB3aGlsZSBjcmVhdGluZyB0aGUgcmVuZGVyIHN1cmZhY2UgbGF5ZXIgbGlzdHMuCisgICAgLy8g
Rm9yIG1hc2tzIGFuZCByZXBsaWNhcyBob3dldmVyLCB3ZSBtYXkgc3RpbGwgbmVlZCB0byBjaGVj
ayB0aGVtIGhlcmUuCisgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkgfHwgIWxheWVy
LT5vcGFjaXR5KCkgfHwgIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbGF5ZXItPnByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIHVwZGF0ZXIp
OworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgQ0NUZXh0dXJlVXBkYXRlciYgdXBkYXRlcikKIHsK
ICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSBtX3VwZGF0ZUxpc3Quc2l6ZSgpIC0gMTsgc3Vy
ZmFjZUluZGV4ID49IDAgOyAtLXN1cmZhY2VJbmRleCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaAppbmRleCAxYzRkNDMxZDg2MDIzNDhjZDdmZWQ4N2U2MGY4OGZmYjU1NDY5MWQwLi45ZjJm
NGFhMWUxNmYzMjdkODI0YzFmMzlkZTNjNTEwYzE5MmJlMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaApAQCAtNzAsMTIgKzcwLDE0IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICAg
ICAgICAgIDogYWNjZWxlcmF0ZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAgICAgLCBjb21wb3Np
dGVPZmZzY3JlZW4oZmFsc2UpCiAgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQo
ZmFsc2UpCisgICAgICAgICAgICAsIHNoYXJlZE1lbW9yeVBhaW50aW5nKGZhbHNlKQogICAgICAg
ICAgICAgLCBzaG93RlBTQ291bnRlcihmYWxzZSkKICAgICAgICAgICAgICwgc2hvd1BsYXRmb3Jt
TGF5ZXJUcmVlKGZhbHNlKSB7IH0KIAogICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOwogICAg
IGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuOwogICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVh
ZDsKKyAgICBib29sIHNoYXJlZE1lbW9yeVBhaW50aW5nOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50
ZXI7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWU7CiB9OwpAQCAtMTU4LDggKzE2MCwx
MCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAKKyAgICB2b2lkIHBy
ZXBhcmVUb1VwZGF0ZUxheWVycygpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CiAKKyAgICB2
b2lkIHByZXBhcmVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NUZXh0
dXJlVXBkYXRlciYpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGlj
c0NvbnRleHQzRCosIENDVGV4dHVyZVVwZGF0ZXImKTsKICAgICB2b2lkIGFwcGx5U2Nyb2xsRGVs
dGFzKGNvbnN0IENDU2Nyb2xsVXBkYXRlU2V0Jik7CiAgICAgdm9pZCBzdGFydFJhdGVMaW1pdGVy
KEdyYXBoaWNzQ29udGV4dDNEKik7CkBAIC0xNzEsMTEgKzE3NSwxNyBAQCBwcm90ZWN0ZWQ6CiBw
cml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVy
TGlzdDsKIAorICAgIHZvaWQgcHJlcGFyZVRvUGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVy
TGlzdCYpOworICAgIHZvaWQgcHJlcGFyZVRvUGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1
cmZhY2UoTGF5ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0
IExheWVyTGlzdCYpOwogICAgIHZvaWQgcGFpbnRNYXNrQW5kUmVwbGljYUZvclJlbmRlclN1cmZh
Y2UoTGF5ZXJDaHJvbWl1bSopOwogCisgICAgdm9pZCBwcmVwYXJlVG9VcGRhdGVMYXllcnMoTGF5
ZXJDaHJvbWl1bSopOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKKwor
ICAgIHZvaWQgcHJlcGFyZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSosIEdyYXBo
aWNzQ29udGV4dDNEKiwgQ0NUZXh0dXJlVXBkYXRlciYpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiwgR3JhcGhpY3NDb250ZXh0M0QqLCBDQ1RleHR1
cmVVcGRhdGVyJik7CisKICAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwogCiAgICAgaW50
IG1fY29tcG9zaXRvcklkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwCmluZGV4IDE0MTgyNjEwNDdmYmIxNDcxYTgzOTdlMjhlYjJjYjU0ZTNlNGYxMWEuLjky
NTI3ZjE3YWJjYzdjZjQ3OGY4MmRhNWIyNjg2NmM1ZDNhZTBlNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0yNjYsNiArMjY2LDE4IEBAIHZvaWQgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVkZWQoKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c01haW5UaHJlYWQoKSk7CiAKKyAgICAvLyBQcmVwYXJlIHVwZGF0ZQorICAgIG1fbGF5ZXJUcmVl
SG9zdC0+cHJlcGFyZVRvVXBkYXRlTGF5ZXJzKCk7CisKKyAgICAvLyBBbGxvY2F0ZQorICAgIHsK
KyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisKKyAgICAgICAgQ0NUZXh0
dXJlVXBkYXRlciB1cGRhdGVyKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFs
bG9jYXRvcigpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5wcmVwYXJlQ29tcG9zaXRvclJl
c291cmNlcyhtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCksIHVwZGF0ZXIpOworICAgIH0K
KworICAgIC8vIFVwZGF0ZQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCk7CiAK
ICAgICBkb0NvbW1pdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCA3MTc2YzI0
MDcwZmNjN2YzYzM4Y2UwMmY5ZDhhMDYwYTgzNDFlZDg3Li5kN2Y0YTljZmJjYTliNzU4MDk1MTcz
NGIwNDdiOTMxMTk1YjgyOTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMzkx
LDYgKzM5MSwxNiBAQCB2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQoaW50
IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUgZnJhbWVCZWdpblRpbQogICAgIC8vIHVwZGF0ZUxheWVy
cy4KICAgICBtX2NvbW1pdFJlcXVlc3RlZCA9IGZhbHNlOwogCisgICAgbV9sYXllclRyZWVIb3N0
LT5wcmVwYXJlVG9VcGRhdGVMYXllcnMoKTsKKworICAgIHsKKyAgICAgICAgLy8gQmxvY2tpbmcg
Y2FsbCB0byBDQ1RocmVhZFByb3h5OjphbGxvY2F0ZU9uSW1wbFRocmVhZAorICAgICAgICBUUkFD
RV9FVkVOVCgiYWxsb2NhdGUiLCB0aGlzLCAwKTsKKyAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQg
Y29tcGxldGlvbjsKKyAgICAgICAgc19jY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjphbGxvY2F0ZU9uSW1wbFRocmVhZCwgQWxsb3dDcm9z
c1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICAgICAgY29tcGxldGlvbi53YWl0KCk7
CisgICAgfQorCiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnMoKTsKIAogICAgIHsK
QEAgLTQxMCw2ICs0MjAsMjEgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29t
bWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW0KICAgICBBU1NFUlQo
bV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5kQ29tbWl0U2VxdWVuY2VOdW1iZXIgPT0gc2VxdWVu
Y2VOdW1iZXIpOwogfQogCit2b2lkIENDVGhyZWFkUHJveHk6OmFsbG9jYXRlT25JbXBsVGhyZWFk
KENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1Ro
cmVhZFByb3h5OjphbGxvY2F0ZU9uSW1wbFRocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChp
c0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RJbXBsKSB7CisgICAgICAg
IGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0NU
ZXh0dXJlVXBkYXRlciB1cGRhdGVyKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVy
ZUFsbG9jYXRvcigpKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnByZXBhcmVDb21wb3NpdG9yUmVz
b3VyY2VzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSwgdXBkYXRlcik7CisKKyAgICBj
b21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwogdm9pZCBDQ1RocmVhZFByb3h5Ojpjb21taXRPbklt
cGxUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCiB7CiAgICAgVFJBQ0VfRVZF
TlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkltcGxUaHJlYWQiLCB0aGlz
LCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAppbmRleCA3MTEwZjczMjIyNzFkMGY2ZWQ5M2Mx
ZjQ5ZDA5MDA0NWQ1ZTBjZDcyLi5lOTI1ODAzZDliYTcwYWE2MjgzOWYyNDgyN2E3NmU0NzU4ZTU3
YjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBAIC04MCw2ICs4MCw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBwb3N0QmVnaW5GcmFtZUFuZENvbW1pdE9uSW1wbFRocmVhZCgpOwogICAgIFBh
c3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVCZWdpbkZyYW1lQW5kQ29tbWl0VGFz
a09uSW1wbFRocmVhZCgpOwogICAgIHZvaWQgb2J0YWluQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tG
cm9tQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBDQ01haW5UaHJlYWQ6OlRhc2sqKik7Cisg
ICAgdm9pZCBhbGxvY2F0ZU9uSW1wbFRocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwogICAgIHZv
aWQgY29tbWl0T25JbXBsVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CiAgICAgdm9pZCBkcmF3
TGF5ZXJzQW5kU3dhcE9uSW1wbFRocmVhZCgpOwogICAgIHZvaWQgZHJhd0xheWVyc09uSW1wbFRo
cmVhZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5
ZXJUcmVlVmlldy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVl
Vmlldy5oCmluZGV4IGFhOGIyMTM5MGUwZTk5NTNiZTE4NjRkMjAwMjQzYjRiNWIwNDM5NTMuLmVl
MDU3OTMxYTBiZWEyOWUyMDljOWZhZGE0NTZiNGRkYTgyMDA3MzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3LmgKQEAgLTQ1LDExICs0NSwx
MyBAQCBwdWJsaWM6CiAgICAgICAgIFNldHRpbmdzKCkKICAgICAgICAgICAgIDogYWNjZWxlcmF0
ZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAgICAgLCBjb21wb3NpdGVPZmZzY3JlZW4oZmFsc2Up
Ci0gICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQoZmFsc2UpIHsgfQorICAgICAg
ICAgICAgLCBlbmFibGVDb21wb3NpdG9yVGhyZWFkKGZhbHNlKQorICAgICAgICAgICAgLCBzaGFy
ZWRNZW1vcnlQYWludGluZyhmYWxzZSkgeyB9CiAKICAgICAgICAgYm9vbCBhY2NlbGVyYXRlUGFp
bnRpbmc7CiAgICAgICAgIGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuOwogICAgICAgICBib29sIGVu
YWJsZUNvbXBvc2l0b3JUaHJlYWQ7CisgICAgICAgIGJvb2wgc2hhcmVkTWVtb3J5UGFpbnRpbmc7
CiAjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCiAgICAgICAgIG9wZXJhdG9yIFdlYkNvcmU6OkND
U2V0dGluZ3MoKSBjb25zdDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlNldHRpbmdzLmgKaW5kZXggNTJlMTI1MjBkZjM3ZTA4YjViYjRhYjlkYjMwNzFkNDcxYjM5
ZWNiNC4uYWQ1YTZlNzk2ZmI4NjhiNzk0N2FmNDFhNmE5NTMwNDUwMDYxOWVmMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC0xMzEsNiArMTMxLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRQcmludEJhY2tncm91bmRzKGJv
b2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlU2Nyb2xsQW5pbWF0b3IoYm9vbCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVk
KGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hhcmVkTWVtb3J5UGFpbnRpbmcoYm9v
bCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzaGFyZWRNZW1vcnlQYWludGluZygpIGNvbnN0ID0g
MDsKIAogcHJvdGVjdGVkOgogICAgIH5XZWJTZXR0aW5ncygpIHsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcAppbmRleCBhM2ZlMzA3YjFhYmUx
YjI1ZTk0NjNiNWZmMmQ0MTE2YmRlYjNhMjQ1Li4wNzhkMDcyOGRhY2I3ZTJiYTM0YzNmMzFjMmJk
YTgwNDRkZWMwZGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJM
YXllclRyZWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXll
clRyZWVWaWV3LmNwcApAQCAtMzksNiArMzksNyBAQCBXZWJMYXllclRyZWVWaWV3OjpTZXR0aW5n
czo6b3BlcmF0b3IgQ0NTZXR0aW5ncygpIGNvbnN0CiAgICAgc2V0dGluZ3MuYWNjZWxlcmF0ZVBh
aW50aW5nID0gYWNjZWxlcmF0ZVBhaW50aW5nOwogICAgIHNldHRpbmdzLmNvbXBvc2l0ZU9mZnNj
cmVlbiA9IGNvbXBvc2l0ZU9mZnNjcmVlbjsKICAgICBzZXR0aW5ncy5lbmFibGVDb21wb3NpdG9y
VGhyZWFkID0gZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKKyAgICBzZXR0aW5ncy5zaGFyZWRNZW1v
cnlQYWludGluZyA9IHNoYXJlZE1lbW9yeVBhaW50aW5nOwogCiAgICAgLy8gRklYTUU6IHNob3dG
UFNDb3VudGVyIC8gc2hvd1BsYXRmb3JtTGF5ZXJUcmVlIGFyZW4ndCBzdXBwb3J0ZWQgY3VycmVu
dGx5LgogICAgIHNldHRpbmdzLnNob3dGUFNDb3VudGVyID0gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAppbmRleCBlZjNjYjQ2YTQzZWEy
ZTdkMjhhNTUyMmM1MmMxMWVjZTFhY2FiNDA1Li5iOGQ0MGY5NWMyZTg5YjFlYTI2NTc0MjJlZDJl
YjVkMGJjNzQ4NjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJT
ZXR0aW5nc0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRp
bmdzSW1wbC5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBXZWJTZXR0
aW5nc0ltcGw6OldlYlNldHRpbmdzSW1wbChTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgOiBtX3Nl
dHRpbmdzKHNldHRpbmdzKQogICAgICwgbV9jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKGZhbHNl
KQorICAgICwgbV9zaGFyZWRNZW1vcnlQYWludGluZyhmYWxzZSkKICAgICAsIG1fc2hvd0ZQU0Nv
dW50ZXIoZmFsc2UpCiAgICAgLCBtX3Nob3dQbGF0Zm9ybUxheWVyVHJlZShmYWxzZSkKICAgICAs
IG1fdXNlVGhyZWFkZWRDb21wb3NpdG9yKGZhbHNlKQpAQCAtNDYwLDQgKzQ2MSw5IEBAIHZvaWQg
V2ViU2V0dGluZ3NJbXBsOjpzZXRIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkKGJvb2wg
ZW5hYmxlZCkKICNlbmRpZgogfQogCit2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0U2hhcmVkTWVt
b3J5UGFpbnRpbmcoYm9vbCBlbmFibGVkKQoreworICAgIG1fc2hhcmVkTWVtb3J5UGFpbnRpbmcg
PSBlbmFibGVkOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgKaW5kZXggNzgyNzk1YjYyM2ZlYjJkNTljYTM0
OTAyMGUzYWNmNDQxYTk1OTA5NS4uOTI1MzA0ZTc3ODlhOWM2ODE0YmIzNWM2ZDBhM2NhNmRmODc5
ZTJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJ
bXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgK
QEAgLTEyMywxMCArMTIzLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxk
UHJpbnRCYWNrZ3JvdW5kcyhib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlU2Nyb2xs
QW5pbWF0b3IoYm9vbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEhpeGllNzZXZWJTb2NrZXRQcm90
b2NvbEVuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNoYXJlZE1lbW9yeVBhaW50
aW5nKGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBzaGFyZWRNZW1vcnlQYWludGluZygpIGNvbnN0
IHsgcmV0dXJuIG1fc2hhcmVkTWVtb3J5UGFpbnRpbmc7IH0KIAogcHJpdmF0ZToKICAgICBXZWJD
b3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsKICAgICBib29sIG1fY29tcG9zaXRlVG9UZXh0dXJl
RW5hYmxlZDsKKyAgICBib29sIG1fc2hhcmVkTWVtb3J5UGFpbnRpbmc7CiAgICAgYm9vbCBtX3No
b3dGUFNDb3VudGVyOwogICAgIGJvb2wgbV9zaG93UGxhdGZvcm1MYXllclRyZWU7CiAgICAgYm9v
bCBtX3VzZVRocmVhZGVkQ29tcG9zaXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmNwcAppbmRleCA1MDIzNzNiMTc4M2YyMzYzYjQ1YWJhZmRkNmU0YjQzNDAxN2Qz
MjQ3Li5hMGEwYzA0ODhjMmExMDZmMDg4ZjRlMTA1MzExZjE2MDNkMzQ3MWVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0yNjc5LDYgKzI2NzksNyBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9v
bCBhY3RpdmUpCiAgICAgICAgIGNjU2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gcGFnZSgp
LT5zZXR0aW5ncygpLT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCk7CiAgICAgICAgIGNjU2V0
dGluZ3MuY29tcG9zaXRlT2Zmc2NyZWVuID0gc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJl
RW5hYmxlZCgpOwogICAgICAgICBjY1NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBz
ZXR0aW5ncygpLT51c2VUaHJlYWRlZENvbXBvc2l0b3IoKTsKKyAgICAgICAgY2NTZXR0aW5ncy5z
aGFyZWRNZW1vcnlQYWludGluZyA9IHNldHRpbmdzKCktPnNoYXJlZE1lbW9yeVBhaW50aW5nKCk7
CiAgICAgICAgIGNjU2V0dGluZ3Muc2hvd0ZQU0NvdW50ZXIgPSBzZXR0aW5ncygpLT5zaG93RlBT
Q291bnRlcigpOwogICAgICAgICBjY1NldHRpbmdzLnNob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNl
dHRpbmdzKCktPnNob3dQbGF0Zm9ybUxheWVyVHJlZSgpOwogCg==
</data>
<flag name="review"
          id="110867"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>