<?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>94996</bug_id>
          
          <creation_ts>2012-08-24 18:46:38 -0700</creation_ts>
          <short_desc>[chromium] Clean up dependencies of WebScrollbar and WebScrollbarLayer</short_desc>
          <delta_ts>2012-08-27 15:05:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>704607</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-24 18:46:38 -0700</bug_when>
    <thetext>[chromium] Clean up dependencies of WebScrollbar and WebScrollbarLayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704608</commentid>
    <comment_count>1</comment_count>
      <attachid>160540</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-24 18:48:29 -0700</bug_when>
    <thetext>Created attachment 160540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704610</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-24 18:48:49 -0700</bug_when>
    <thetext>Enne - I wasn&apos;t sure if this was already on your plate or not, but it wasn&apos;t too hard so I went ahead and did it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704611</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 18:51:17 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705328</commentid>
    <comment_count>4</comment_count>
      <attachid>160540</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-27 09:38:14 -0700</bug_when>
    <thetext>Comment on attachment 160540
Patch

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

R=me.  Thanks for taking care of this.

&gt; Source/Platform/chromium/public/WebScrollbarLayer.h:42
&gt; +    // This takes ownership of the provided WebScrollbar.
&gt; +    WEBKIT_EXPORT static WebScrollbarLayer* create(WebScrollbar*, WebScrollbarThemePainter, PassOwnPtr&lt;WebScrollbarThemeGeometry&gt;);

No need for a comment--make the WebScrollbar a PassOwnPtr too like the geometry.  It&apos;s weird to be inconsistent about ownership transfer.

&gt; Source/WebCore/platform/chromium/support/WebScrollbarImpl.h:38
&gt; +    explicit WebScrollbarImpl(WebCore::Scrollbar*);

Can you add a static create function that returns a PassOwnPtr so you don&apos;t have to adoptPtr it all over the place?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705349</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-27 10:06:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 160540 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160540&amp;action=review
&gt; 
&gt; R=me.  Thanks for taking care of this.
&gt; 
&gt; &gt; Source/Platform/chromium/public/WebScrollbarLayer.h:42
&gt; &gt; +    // This takes ownership of the provided WebScrollbar.
&gt; &gt; +    WEBKIT_EXPORT static WebScrollbarLayer* create(WebScrollbar*, WebScrollbarThemePainter, PassOwnPtr&lt;WebScrollbarThemeGeometry&gt;);
&gt; 
&gt; No need for a comment--make the WebScrollbar a PassOwnPtr too like the geometry.  It&apos;s weird to be inconsistent about ownership transfer.

Can&apos;t do that - you can&apos;t expect users of the WebKit API to have access to PassOwnPtr since it&apos;s in WTF and we have no equivalent concept in the public API.  I have to kill the other PassOwnPtr as well soon.


&gt; 
&gt; &gt; Source/WebCore/platform/chromium/support/WebScrollbarImpl.h:38
&gt; &gt; +    explicit WebScrollbarImpl(WebCore::Scrollbar*);
&gt; 
&gt; Can you add a static create function that returns a PassOwnPtr so you don&apos;t have to adoptPtr it all over the place?

No, you can&apos;t PassOwnPtr&lt;&gt; through the WebKit API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705361</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-27 10:13:04 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 160540 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160540&amp;action=review
&gt; &gt; 
&gt; &gt; R=me.  Thanks for taking care of this.
&gt; &gt; 
&gt; &gt; &gt; Source/Platform/chromium/public/WebScrollbarLayer.h:42
&gt; &gt; &gt; +    // This takes ownership of the provided WebScrollbar.
&gt; &gt; &gt; +    WEBKIT_EXPORT static WebScrollbarLayer* create(WebScrollbar*, WebScrollbarThemePainter, PassOwnPtr&lt;WebScrollbarThemeGeometry&gt;);
&gt; &gt; 
&gt; &gt; No need for a comment--make the WebScrollbar a PassOwnPtr too like the geometry.  It&apos;s weird to be inconsistent about ownership transfer.
&gt; 
&gt; Can&apos;t do that - you can&apos;t expect users of the WebKit API to have access to PassOwnPtr since it&apos;s in WTF and we have no equivalent concept in the public API.  I have to kill the other PassOwnPtr as well soon.

Ok, sure.  I still think you should be consistent here, one way or the other.

&gt; &gt; &gt; Source/WebCore/platform/chromium/support/WebScrollbarImpl.h:38
&gt; &gt; &gt; +    explicit WebScrollbarImpl(WebCore::Scrollbar*);
&gt; &gt; 
&gt; &gt; Can you add a static create function that returns a PassOwnPtr so you don&apos;t have to adoptPtr it all over the place?
&gt; 
&gt; No, you can&apos;t PassOwnPtr&lt;&gt; through the WebKit API

What&apos;s wrong with PassOwnPtr here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705384</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-27 10:43:32 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (From update of attachment 160540 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=160540&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; R=me.  Thanks for taking care of this.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/Platform/chromium/public/WebScrollbarLayer.h:42
&gt; &gt; &gt; &gt; +    // This takes ownership of the provided WebScrollbar.
&gt; &gt; &gt; &gt; +    WEBKIT_EXPORT static WebScrollbarLayer* create(WebScrollbar*, WebScrollbarThemePainter, PassOwnPtr&lt;WebScrollbarThemeGeometry&gt;);
&gt; &gt; &gt; 
&gt; &gt; &gt; No need for a comment--make the WebScrollbar a PassOwnPtr too like the geometry.  It&apos;s weird to be inconsistent about ownership transfer.
&gt; &gt; 
&gt; &gt; Can&apos;t do that - you can&apos;t expect users of the WebKit API to have access to PassOwnPtr since it&apos;s in WTF and we have no equivalent concept in the public API.  I have to kill the other PassOwnPtr as well soon.
&gt; 
&gt; Ok, sure.  I still think you should be consistent here, one way or the other.

Actually, this is in WebScrollbarLayerImpl, so why not use PassOwnPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705404</commentid>
    <comment_count>8</comment_count>
      <attachid>160540</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-27 11:02:47 -0700</bug_when>
    <thetext>Comment on attachment 160540
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/Platform/chromium/public/WebScrollbarLayer.h:42
&gt;&gt;&gt;&gt;&gt; +    WEBKIT_EXPORT static WebScrollbarLayer* create(WebScrollbar*, WebScrollbarThemePainter, PassOwnPtr&lt;WebScrollbarThemeGeometry&gt;);
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; No need for a comment--make the WebScrollbar a PassOwnPtr too like the geometry.  It&apos;s weird to be inconsistent about ownership transfer.
&gt;&gt;&gt; 
&gt;&gt;&gt; Can&apos;t do that - you can&apos;t expect users of the WebKit API to have access to PassOwnPtr since it&apos;s in WTF and we have no equivalent concept in the public API.  I have to kill the other PassOwnPtr as well soon.
&gt;&gt; 
&gt;&gt; Ok, sure.  I still think you should be consistent here, one way or the other.
&gt; 
&gt; Actually, this is in WebScrollbarLayerImpl, so why not use PassOwnPtr?

Not sure what you mean.  This header is public/WebScrollbarLayer.h, so I can&apos;t use PassOwnPtr&lt;&gt; here.

&gt;&gt;&gt;&gt; Source/WebCore/platform/chromium/support/WebScrollbarImpl.h:38
&gt;&gt;&gt;&gt; +    explicit WebScrollbarImpl(WebCore::Scrollbar*);
&gt;&gt;&gt; 
&gt;&gt;&gt; Can you add a static create function that returns a PassOwnPtr so you don&apos;t have to adoptPtr it all over the place?
&gt;&gt; 
&gt;&gt; No, you can&apos;t PassOwnPtr&lt;&gt; through the WebKit API
&gt; 
&gt; What&apos;s wrong with PassOwnPtr here?

This constructor is only called by the implementation of WebScrollbarLayer::create(). I could make this PassOwnPtr&lt;&gt; and implement WebScrollbarLayer::create() thusly:

    return WebScrollbarLayerImpl::create(...).leakPtr();

but that doesn&apos;t seem worth it.

The adoptPtr()s are all around the return value of WebScrollbarLayer::create(), not around this constructor, so I couldn&apos;t remove any</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705575</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-08-27 13:18:21 -0700</bug_when>
    <thetext>Ah, you&apos;re right on both counts.  Sorry, I was thinking about this backwards.    Having OwnPtr stuff (for now) on both sides of the Platform API but not crossing it is super confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705581</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-27 13:20:27 -0700</bug_when>
    <thetext>No kidding! I think I can write a PassOwnPtr&lt;&gt; equiv that crosses the API boundary, will mess around with that a bit.  It&apos;d be great to get type safety for these functions that transfer ownership.  Probably not worth holding the rest of this up, however.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705638</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-27 13:54:47 -0700</bug_when>
    <thetext>WebPassOwnPtr&lt;&gt; in https://bugs.webkit.org/show_bug.cgi?id=95040 should help on both counts. I&apos;ll land this as-is and convert to smart API types once we get those sorted out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705719</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-27 15:01:18 -0700</bug_when>
    <thetext>Committed r126803: &lt;http://trac.webkit.org/changeset/126803&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>705724</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-27 15:05:15 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Committed r126803: &lt;http://trac.webkit.org/changeset/126803&gt;

Landed with raw pointers everywhere.  I&apos;ll convert over the WebPassOwnPtr&lt;&gt; where possible when bug 95040 lands - still figuring out some type details on that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160540</attachid>
            <date>2012-08-24 18:48:29 -0700</date>
            <delta_ts>2012-08-27 11:02:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94996-20120824184824.patch</filename>
            <type>text/plain</type>
            <size>26439</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NjUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAxMzViMTUyNzI4NTcz
M2FjZTg3MmNjNThiMjBmMjk4MTlkYmJiMmIyLi4wMGQyMzM5NTkyMDhiZDhjMWMwMDhhOTkwZmI1
YWU2NmYyMjMxMzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wOC0yNCAg
SmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1
bV0gQ2xlYW4gdXAgZGVwZW5kZW5jaWVzIG9mIFdlYlNjcm9sbGJhciBhbmQgV2ViU2Nyb2xsYmFy
TGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0
OTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBtb3ZlcyB0aGUgV2ViU2Nyb2xsYmFyTGF5ZXI6OmNyZWF0ZSBmYWN0b3J5IG91dCBvZiAjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OIGFuZCBleHByZXNzZXMgaXQgaW4gQVBJIHRlcm1zCisgICAg
ICAgIG9ubHkgc28gYW55b25lIHdobyBjYW4gZ2V0IGEgaGFuZGxlIG9uIGEgV2ViU2Nyb2xsYmFy
IGNhbiBjb25zdHJ1Y3QgdGhlIGxheWVyLiBBbHNvIHJlbW92ZXMgdGhlIDo6Y3JlYXRlKCkgZnJv
bQorICAgICAgICBXZWJTY3JvbGxiYXIsIGFueW9uZSB3aG8gY3VycmVudGx5IGhhcyBhY2Nlc3Mg
dG8gYSBXZWJDb3JlOjpTY3JvbGxiYXIgYWxzbyBoYXMgYWNjZXNzIHRvIFdlYlNjcm9sbGJhcklt
cGwuCisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmg6CisgICAgICAg
IChXZWJTY3JvbGxiYXIpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXJM
YXllci5oOgorICAgICAgICAoV2ViU2Nyb2xsYmFyTGF5ZXIpOgorCiAyMDEyLTA4LTIzICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBD
b252ZXJ0IFdlYkxheWVyVHJlZVZpZXcgaW50ZXJmYWNlIGludG8gcHVyZSB2aXJ0dWFsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZDIyMjAyNjY4MzFhYjk4ZTVmYzQzNjMyN2M1MTQ4MWE2MDAxZDI2YS4uODgwYTk1
MGU1YTgzNTUyNTEzN2I3ZWI2ODVmYWJiZDNkMzM0MmFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDQwIEBACisyMDEyLTA4LTI0ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW2Nocm9taXVtXSBDbGVhbiB1cCBkZXBlbmRlbmNpZXMgb2YgV2ViU2Nyb2xs
YmFyIGFuZCBXZWJTY3JvbGxiYXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTQ5OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNb3ZlcyBXZWJTY3JvbGxiYXJJbXBsIGludG8gV2ViQ29yZS9wbGF0
Zm9ybS9zdXBwb3J0IHRvIG1ha2UgaXQgYWNjZXNzaWJsZSB0byBjaHJvbWl1bS1zcGVjaWZpYyBX
ZWJDb3JlIGNvZGUgYW5kCisgICAgICAgIHVzZXMgaXQgdG8gY29uc3RydWN0IFdlYlNjcm9sbGJh
ciBpbnN0YW5jZXMgYXJvdW5kIFdlYkNvcmU6OlNjcm9sbGJhcnMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29v
cmRpbmF0b3JDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTY3JvbGxiYXJM
YXllcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJTY3JvbGxiYXJJ
bXBsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9s
bGJhckltcGwuY3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Ny
b2xsYmFySW1wbDo6V2ViU2Nyb2xsYmFySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9s
bGJhckltcGw6OmlzT3ZlcmxheSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6
OnZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6bG9jYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzaXplKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2Nyb2xsYmFySW1wbDo6ZW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9s
bGJhckltcGw6Om1heGltdW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjp0
b3RhbFNpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjppc1Njcm9sbFZp
ZXdTY3JvbGxiYXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjppc1Njcm9s
bGFibGVBcmVhQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6Z2V0
VGlja21hcmtzKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6Y29udHJvbFNp
emUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpwcmVzc2VkUGFydCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OmhvdmVyZWRQYXJ0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTY3JvbGxiYXJJbXBsOjppc0N1c3RvbVNjcm9sbGJhcik6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJTY3JvbGxiYXJJbXBsLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJTY3JvbGxiYXJJbXBsKToK
KwogMjAxMi0wOC0yMyAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gQ29udmVydCBXZWJMYXllclRyZWVWaWV3IGludGVyZmFjZSBpbnRv
IHB1cmUgdmlydHVhbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhMWM0N2JiODgwZTRi
ODdkZjFkMWZkZTZkMzY3MWRjZDY3OTEwYjdiLi5lY2ZmOWE0YzhjYjYwZTkzZTA2MjdkNjAzMTQw
MjA2NWE4Yjk2YjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDEyLTA4LTI0ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW2Nocm9taXVtXSBDbGVhbiB1cCBkZXBlbmRlbmNpZXMgb2YgV2ViU2Nyb2xsYmFyIGFu
ZCBXZWJTY3JvbGxiYXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTQ5OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBGaXggdXAgdGVzdHMgZm9yIEFQSSBjaGFuZ2VzLgorCisgICAgICAgICogV2Vi
S2l0Lmd5cDoKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFyTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgICogdGVzdHMv
U2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisKIDIwMTItMDgtMjMgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbY2hyb21pdW1dIENvbnZlcnQgV2ViTGF5ZXJUcmVlVmlldyBpbnRlcmZhY2UgaW50
byBwdXJlIHZpcnR1YWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViU2Nyb2xsYmFyLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNj
cm9sbGJhci5oCmluZGV4IDhiYWYzNGI3NjQyMjcwZjUwOGJmN2RhMGI2M2QwZjQ2ZTk4ZWVmZDQu
LjA0NjJiNjQ4OTBmZDY1ZWI0YTAxNDY1N2I4N2YyNzIyZDM3YTJiYjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyLmgKKysrIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJTY3JvbGxiYXIuaApAQCAtMTA2LDEwICsxMDYs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTY3JvbGxiYXJPdmVybGF5U3R5bGUgc2Nyb2xsYmFy
T3ZlcmxheVN0eWxlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0N1c3RvbVNjcm9s
bGJhcigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkg
Y29uc3QgPSAwOwotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi0gICAgV0VCS0lUX0VYUE9S
VCBzdGF0aWMgUGFzc093blB0cjxXZWJTY3JvbGxiYXI+IGNyZWF0ZShXZWJDb3JlOjpTY3JvbGxi
YXIqKTsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhckxheWVyLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlNjcm9sbGJhckxheWVyLmgKaW5kZXggNDUx
YTBiOWMxMzRiNmM0NDQ5NTBlMWEyYjYyM2YzYmUxZjAyMTEwNi4uNzg1NTQzMTQxMDBmN2Y3MDYw
MGIyNWUxYWRmMGU4NmQyOTNkODRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJTY3JvbGxiYXJMYXllci5oCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViU2Nyb2xsYmFyTGF5ZXIuaApAQCAtMzgsMTUgKzM4LDE0IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJTY3JvbGxiYXJMYXllciB7CiBwdWJsaWM6CisgICAg
Ly8gVGhpcyB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHByb3ZpZGVkIFdlYlNjcm9sbGJhci4KKyAg
ICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTY3JvbGxiYXJMYXllciogY3JlYXRlKFdlYlNjcm9s
bGJhciosIFdlYlNjcm9sbGJhclRoZW1lUGFpbnRlciwgUGFzc093blB0cjxXZWJTY3JvbGxiYXJU
aGVtZUdlb21ldHJ5Pik7CisKICAgICB2aXJ0dWFsIH5XZWJTY3JvbGxiYXJMYXllcigpIHsgfQog
CiAgICAgdmlydHVhbCBXZWJMYXllciogbGF5ZXIoKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2V0U2Nyb2xsTGF5ZXIoV2ViTGF5ZXIqKSA9IDA7Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KLSAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyBXZWJTY3JvbGxiYXJMYXllciogY3JlYXRlKFdl
YkNvcmU6OlNjcm9sbGJhciosIFdlYlNjcm9sbGJhclRoZW1lUGFpbnRlciwgUGFzc093blB0cjxX
ZWJTY3JvbGxiYXJUaGVtZUdlb21ldHJ5Pik7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDAyMmFhODE1NzQzZTFhMTEzNzkyNzhhNDNhNDYz
YWNmYzlmNTA2YmUuLmQ5ZWZkMGIyOWMwNzg5YmNmZGM3ZDgwYzE4Mzc3ODhhODc3ODRkODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKQEAgLTgzMjIsNiArODMyMiw4IEBACiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9XZWJSVENDb25maWd1cmF0aW9uLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJTY3JvbGxiYXJUaGVtZUdlb21ldHJ5TmF0
aXZlLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJTY3Jv
bGxiYXJUaGVtZUdlb21ldHJ5TmF0aXZlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViU2Nyb2xsYmFySW1wbC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViU2Nyb2xsYmFySW1wbC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUaHJlYWRTYWZlRGF0YS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVt
LmNwcAppbmRleCBlMjU2YmRlMWE1YTRhZTg3YTY2MDgxOThjNzNkZmFmOGUxOTgxM2Y2Li43Mjg2
ZTM0NWY0ZmUzMzc4YTQyMTNjOTg0NWQ1ZDY0MWRhODQ4OTk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIgorI2luY2x1ZGUgIldlYlNjcm9sbGJhcklt
cGwuaCIKICNpbmNsdWRlICJXZWJTY3JvbGxiYXJUaGVtZUdlb21ldHJ5TmF0aXZlLmgiCiAjaW5j
bHVkZSA8cHVibGljL1dlYlNjcm9sbGJhci5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJTY3JvbGxi
YXJMYXllci5oPgpAQCAtMTUzLDcgKzE1NCw3IEBAIHN0YXRpYyBQYXNzT3duUHRyPFdlYlNjcm9s
bGJhckxheWVyPiBjcmVhdGVTY3JvbGxiYXJMYXllcihTY3JvbGxiYXIqIHNjcm9sbGJhciwKICAg
ICBXZWJLaXQ6OldlYlNjcm9sbGJhclRoZW1lUGFpbnRlciBwYWludGVyKHRoZW1lQ29tcG9zaXRl
LCBzY3JvbGxiYXIpOwogICAgIE93blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhclRoZW1lR2VvbWV0
cnk+IGdlb21ldHJ5KFdlYktpdDo6V2ViU2Nyb2xsYmFyVGhlbWVHZW9tZXRyeU5hdGl2ZTo6Y3Jl
YXRlKHRoZW1lQ29tcG9zaXRlKSk7CiAKLSAgICBPd25QdHI8V2ViU2Nyb2xsYmFyTGF5ZXI+IHNj
cm9sbGJhckxheWVyID0gYWRvcHRQdHIoV2ViU2Nyb2xsYmFyTGF5ZXI6OmNyZWF0ZShzY3JvbGxi
YXIsIHBhaW50ZXIsIGdlb21ldHJ5LnJlbGVhc2UoKSkpOworICAgIE93blB0cjxXZWJTY3JvbGxi
YXJMYXllcj4gc2Nyb2xsYmFyTGF5ZXIgPSBhZG9wdFB0cihXZWJTY3JvbGxiYXJMYXllcjo6Y3Jl
YXRlKG5ldyBXZWJLaXQ6OldlYlNjcm9sbGJhckltcGwoc2Nyb2xsYmFyKSwgcGFpbnRlciwgZ2Vv
bWV0cnkucmVsZWFzZSgpKSk7CiAgICAgc2Nyb2xsYmFyTGF5ZXItPnNldFNjcm9sbExheWVyKHNj
cm9sbExheWVyKTsKIAogICAgIHNjcm9sbGJhckdyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9N
ZWRpYShzY3JvbGxiYXJMYXllci0+bGF5ZXIoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlNjcm9sbGJhckltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJTY3JvbGxiYXJJbXBsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lYzZkNTdiYmNhYjliZWY1MjU0NjNhN2IxOTlmZjQzODJjNGQ1MzczCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9X
ZWJTY3JvbGxiYXJJbXBsLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViU2Nyb2xsYmFySW1wbC5oIgorCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworV2ViU2Nyb2xsYmFySW1wbDo6V2ViU2Nyb2xsYmFySW1wbChXZWJDb3JlOjpTY3Jv
bGxiYXIqIHNjcm9sbGJhcikKKyAgICA6IG1fc2Nyb2xsYmFyKHNjcm9sbGJhcikKK3sKK30KKwor
Ym9vbCBXZWJTY3JvbGxiYXJJbXBsOjppc092ZXJsYXkoKSBjb25zdAoreworICAgIHJldHVybiBt
X3Njcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Cit9CisKK2ludCBXZWJTY3JvbGxiYXJJ
bXBsOjp2YWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT52YWx1ZSgpOwor
fQorCitXZWJQb2ludCBXZWJTY3JvbGxiYXJJbXBsOjpsb2NhdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYmFyLT5sb2NhdGlvbigpOworfQorCitXZWJTaXplIFdlYlNjcm9sbGJh
ckltcGw6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGJhci0+c2l6ZSgpOwor
fQorCitib29sIFdlYlNjcm9sbGJhckltcGw6OmVuYWJsZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3Njcm9sbGJhci0+ZW5hYmxlZCgpOworfQorCitpbnQgV2ViU2Nyb2xsYmFySW1wbDo6bWF4
aW11bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5tYXhpbXVtKCk7Cit9CisK
K2ludCBXZWJTY3JvbGxiYXJJbXBsOjp0b3RhbFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBt
X3Njcm9sbGJhci0+dG90YWxTaXplKCk7Cit9CisKK2Jvb2wgV2ViU2Nyb2xsYmFySW1wbDo6aXNT
Y3JvbGxWaWV3U2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxiYXItPmlz
U2Nyb2xsVmlld1Njcm9sbGJhcigpOworfQorCitib29sIFdlYlNjcm9sbGJhckltcGw6OmlzU2Ny
b2xsYWJsZUFyZWFBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGJhci0+aXNT
Y3JvbGxhYmxlQXJlYUFjdGl2ZSgpOworfQorCit2b2lkIFdlYlNjcm9sbGJhckltcGw6OmdldFRp
Y2ttYXJrcyhXZWJWZWN0b3I8V2ViUmVjdD4mIHdlYlRpY2ttYXJrcykgY29uc3QKK3sKKyAgICBW
ZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gdGlja21hcmtzOworICAgIG1fc2Nyb2xsYmFyLT5nZXRU
aWNrbWFya3ModGlja21hcmtzKTsKKworICAgIFdlYlZlY3RvcjxXZWJSZWN0PiByZXN1bHQodGlj
a21hcmtzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWNrbWFya3Muc2l6
ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdFtpXSA9IHRpY2ttYXJrc1tpXTsKKworICAgIHdlYlRp
Y2ttYXJrcy5zd2FwKHJlc3VsdCk7Cit9CisKK1dlYlNjcm9sbGJhcjo6U2Nyb2xsYmFyQ29udHJv
bFNpemUgV2ViU2Nyb2xsYmFySW1wbDo6Y29udHJvbFNpemUoKSBjb25zdAoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXZWJTY3JvbGxiYXI6OlNjcm9sbGJhckNvbnRyb2xTaXplPihtX3Njcm9s
bGJhci0+Y29udHJvbFNpemUoKSk7Cit9CisKK1dlYlNjcm9sbGJhcjo6U2Nyb2xsYmFyUGFydCBX
ZWJTY3JvbGxiYXJJbXBsOjpwcmVzc2VkUGFydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYlNjcm9sbGJhcjo6U2Nyb2xsYmFyUGFydD4obV9zY3JvbGxiYXItPnByZXNzZWRQ
YXJ0KCkpOworfQorCitXZWJTY3JvbGxiYXI6OlNjcm9sbGJhclBhcnQgV2ViU2Nyb2xsYmFySW1w
bDo6aG92ZXJlZFBhcnQoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJTY3Jv
bGxiYXI6OlNjcm9sbGJhclBhcnQ+KG1fc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpKTsKK30KKwor
V2ViU2Nyb2xsYmFyOjpTY3JvbGxiYXJPdmVybGF5U3R5bGUgV2ViU2Nyb2xsYmFySW1wbDo6c2Ny
b2xsYmFyT3ZlcmxheVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
U2Nyb2xsYmFyOjpTY3JvbGxiYXJPdmVybGF5U3R5bGU+KG1fc2Nyb2xsYmFyLT5zY3JvbGxiYXJP
dmVybGF5U3R5bGUoKSk7Cit9CisKK1dlYlNjcm9sbGJhcjo6T3JpZW50YXRpb24gV2ViU2Nyb2xs
YmFySW1wbDo6b3JpZW50YXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJTY3JvbGxiYXI6Ok9yaWVudGF0aW9uPihtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSk7Cit9
CisKK2Jvb2wgV2ViU2Nyb2xsYmFySW1wbDo6aXNDdXN0b21TY3JvbGxiYXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3Njcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9zdXBwb3J0L1dlYlNjcm9sbGJhckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL3N1cHBvcnQvV2ViU2Nyb2xsYmFySW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliNmI3NzQ3
NmUzNDIzNmExMDkyMjk0MWM0MDdlMTRkOTFjMWQ2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlNjcm9sbGJhckltcGwuaApA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlNjcm9sbGJhckltcGxf
aAorI2RlZmluZSBXZWJTY3JvbGxiYXJJbXBsX2gKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJTY3Jv
bGxiYXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU2Nyb2xsYmFyOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU2Nyb2xsYmFySW1wbCA6IHB1YmxpYyBXZWJT
Y3JvbGxiYXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYlNjcm9sbGJhckltcGwoV2ViQ29y
ZTo6U2Nyb2xsYmFyKik7CisKKyAgICAvLyBJbXBsZW1lbnQgV2ViS2l0OjpXZWJTY3JvbGxiYXIg
bWV0aG9kcworICAgIHZpcnR1YWwgYm9vbCBpc092ZXJsYXkoKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGludCB2YWx1ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViUG9p
bnQgbG9jYXRpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgp
IGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBlbmFibGVkKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBpbnQgbWF4aW11bSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgaW50IHRvdGFsU2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBpc1Nj
cm9sbFZpZXdTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNT
Y3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBn
ZXRUaWNrbWFya3MoV2ViVmVjdG9yPFdlYlJlY3Q+JiB0aWNrbWFya3MpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaG92ZXJlZFBhcnQoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhck92ZXJsYXlTdHlsZSBzY3JvbGxiYXJPdmVy
bGF5U3R5bGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlzQ3VzdG9tU2Nyb2xs
YmFyKCkgY29uc3QgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPFdlYkNvcmU6OlNj
cm9sbGJhcj4gbV9zY3JvbGxiYXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggMWZkMjE2NGJjMmMwZDNlYjgyYWMz
OTZjYmM4Y2RkMDgzNGQzNWFhMy4uMmI2NGJlY2Y4NDdlN2EzMzZmYzhiZjg4YzdiODJkYzY1NzU5
NThmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNjA1LDggKzYwNSw2IEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJTY29wZWRNaWNyb3Rhc2tTdXBwcmVzc2lvbi5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViU2NvcGVkVXNlckdlc3R1cmUuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYlNjcmlwdENvbnRyb2xsZXIuY3BwJywKLSAgICAgICAgICAgICAgICAn
c3JjL1dlYlNjcm9sbGJhckltcGwuY3BwJywKLSAgICAgICAgICAgICAgICAnc3JjL1dlYlNjcm9s
bGJhckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTY3JvbGxiYXJUaGVtZUNsaWVu
dEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjcm9sbGJhclRoZW1lQ2xpZW50
SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjcm9sbGJhclRoZW1lUGFpbnRlci5j
cHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNiOTI2OTdlNTIyNGI2YTBlMDY4YzFi
YTM1MDNkYjlkMzhhODQ2Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJXZWJTY3JvbGxiYXJJbXBsLmgiCi0KLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1QYXNzT3duUHRyPFdlYlNjcm9sbGJhcj4gV2ViU2Nyb2xsYmFyOjpjcmVhdGUoV2ViQ29yZTo6
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJTY3Jv
bGxiYXJJbXBsKHNjcm9sbGJhcikpOwotfQotCi1XZWJTY3JvbGxiYXJJbXBsOjpXZWJTY3JvbGxi
YXJJbXBsKFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyKQotICAgIDogbV9zY3JvbGxiYXIo
c2Nyb2xsYmFyKQotewotfQotCi1ib29sIFdlYlNjcm9sbGJhckltcGw6OmlzT3ZlcmxheSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKLX0K
LQotaW50IFdlYlNjcm9sbGJhckltcGw6OnZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9z
Y3JvbGxiYXItPnZhbHVlKCk7Ci19Ci0KLVdlYlBvaW50IFdlYlNjcm9sbGJhckltcGw6OmxvY2F0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JvbGxiYXItPmxvY2F0aW9uKCk7Ci19Ci0K
LVdlYlNpemUgV2ViU2Nyb2xsYmFySW1wbDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
c2Nyb2xsYmFyLT5zaXplKCk7Ci19Ci0KLWJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6ZW5hYmxlZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5lbmFibGVkKCk7Ci19Ci0KLWludCBX
ZWJTY3JvbGxiYXJJbXBsOjptYXhpbXVtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY3JvbGxi
YXItPm1heGltdW0oKTsKLX0KLQotaW50IFdlYlNjcm9sbGJhckltcGw6OnRvdGFsU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKTsKLX0KLQotYm9vbCBX
ZWJTY3JvbGxiYXJJbXBsOjppc1Njcm9sbFZpZXdTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3Njcm9sbGJhci0+aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKCk7Ci19Ci0KLWJvb2wgV2Vi
U2Nyb2xsYmFySW1wbDo6aXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fc2Nyb2xsYmFyLT5pc1Njcm9sbGFibGVBcmVhQWN0aXZlKCk7Ci19Ci0KLXZvaWQgV2Vi
U2Nyb2xsYmFySW1wbDo6Z2V0VGlja21hcmtzKFdlYlZlY3RvcjxXZWJSZWN0PiYgd2ViVGlja21h
cmtzKSBjb25zdAotewotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiB0aWNrbWFya3M7Ci0g
ICAgbV9zY3JvbGxiYXItPmdldFRpY2ttYXJrcyh0aWNrbWFya3MpOwotCi0gICAgV2ViVmVjdG9y
PFdlYlJlY3Q+IHJlc3VsdCh0aWNrbWFya3Muc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHRpY2ttYXJrcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0W2ldID0gdGlja21h
cmtzW2ldOwotCi0gICAgd2ViVGlja21hcmtzLnN3YXAocmVzdWx0KTsKLX0KLQotV2ViU2Nyb2xs
YmFyOjpTY3JvbGxiYXJDb250cm9sU2l6ZSBXZWJTY3JvbGxiYXJJbXBsOjpjb250cm9sU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlNjcm9sbGJhcjo6U2Nyb2xsYmFy
Q29udHJvbFNpemU+KG1fc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKLX0KLQotV2ViU2Nyb2xs
YmFyOjpTY3JvbGxiYXJQYXJ0IFdlYlNjcm9sbGJhckltcGw6OnByZXNzZWRQYXJ0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViU2Nyb2xsYmFyOjpTY3JvbGxiYXJQYXJ0Piht
X3Njcm9sbGJhci0+cHJlc3NlZFBhcnQoKSk7Ci19Ci0KLVdlYlNjcm9sbGJhcjo6U2Nyb2xsYmFy
UGFydCBXZWJTY3JvbGxiYXJJbXBsOjpob3ZlcmVkUGFydCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdlYlNjcm9sbGJhcjo6U2Nyb2xsYmFyUGFydD4obV9zY3JvbGxiYXItPmhv
dmVyZWRQYXJ0KCkpOwotfQotCi1XZWJTY3JvbGxiYXI6OlNjcm9sbGJhck92ZXJsYXlTdHlsZSBX
ZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxiYXJPdmVybGF5U3R5bGUoKSBjb25zdAotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJTY3JvbGxiYXI6OlNjcm9sbGJhck92ZXJsYXlTdHlsZT4obV9z
Y3JvbGxiYXItPnNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKTsKLX0KLQotV2ViU2Nyb2xsYmFyOjpP
cmllbnRhdGlvbiBXZWJTY3JvbGxiYXJJbXBsOjpvcmllbnRhdGlvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYlNjcm9sbGJhcjo6T3JpZW50YXRpb24+KG1fc2Nyb2xsYmFy
LT5vcmllbnRhdGlvbigpKTsKLX0KLQotYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjppc0N1c3RvbVNj
cm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9s
bGJhcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWM5MjMxYWFhNWQ4YzlkN2VkOTkyYjJmMTkzMTM3YTc4ZDVhZDAxNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlNjcm9sbGJhckltcGxfaAotI2RlZmluZSBXZWJTY3Jv
bGxiYXJJbXBsX2gKLQotI2luY2x1ZGUgPHB1YmxpYy9XZWJTY3JvbGxiYXIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgU2Nyb2xsYmFyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotY2xhc3MgV2ViU2Nyb2xsYmFySW1wbCA6IHB1YmxpYyBXZWJTY3JvbGxiYXIgewotcHVibGlj
OgotICAgIFdlYlNjcm9sbGJhckltcGwoV2ViQ29yZTo6U2Nyb2xsYmFyKik7Ci0KLSAgICAvLyBJ
bXBsZW1lbnQgV2ViS2l0OjpXZWJTY3JvbGxiYXIgbWV0aG9kcwotICAgIHZpcnR1YWwgYm9vbCBp
c092ZXJsYXkoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCB2YWx1ZSgpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViUG9pbnQgbG9jYXRpb24oKSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIFdlYlNpemUgc2l6ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgYm9vbCBlbmFibGVkKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgbWF4aW11
bSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHRvdGFsU2l6ZSgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbFZpZXdTY3JvbGxiYXIoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxhYmxlQXJlYUFjdGl2ZSgpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoV2ViVmVjdG9yPFdlYlJl
Y3Q+JiB0aWNrbWFya3MpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU2Nyb2xsYmFyQ29u
dHJvbFNpemUgY29udHJvbFNpemUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFNjcm9s
bGJhclBhcnQgcHJlc3NlZFBhcnQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFNjcm9s
bGJhclBhcnQgaG92ZXJlZFBhcnQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFNjcm9s
bGJhck92ZXJsYXlTdHlsZSBzY3JvbGxiYXJPdmVybGF5U3R5bGUoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29uc3QgT1ZFUlJJREU7Ci0KLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJMYXllckltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFyTGF5ZXJJbXBsLmNwcAppbmRleCBlYzZlOTg5NWRk
YmQ1OTE5NTdlMWFkMGU0ODVjMWIwMTBmYmZmODIyLi41NWY1NDgzM2IxYjBmYzE1NjcyOTU4ODk1
NjBkNWJmNTQ5MDQ5OTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTY3JvbGxiYXJMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNjcm9sbGJhckxheWVySW1wbC5jcHAKQEAgLTI5LDE0ICsyOSwxMyBAQAogI2luY2x1ZGUg
IlNjcm9sbGJhckxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJXZWJMYXllckltcGwuaCIKIAot
dXNpbmcgV2ViQ29yZTo6U2Nyb2xsYmFyOwogdXNpbmcgV2ViQ29yZTo6U2Nyb2xsYmFyTGF5ZXJD
aHJvbWl1bTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYlNjcm9sbGJhckxheWVyKiBXZWJT
Y3JvbGxiYXJMYXllcjo6Y3JlYXRlKFdlYkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyLCBXZWJT
Y3JvbGxiYXJUaGVtZVBhaW50ZXIgcGFpbnRlciwgUGFzc093blB0cjxXZWJTY3JvbGxiYXJUaGVt
ZUdlb21ldHJ5PiBnZW9tZXRyeSkKK1dlYlNjcm9sbGJhckxheWVyKiBXZWJTY3JvbGxiYXJMYXll
cjo6Y3JlYXRlKFdlYlNjcm9sbGJhciogc2Nyb2xsYmFyLCBXZWJTY3JvbGxiYXJUaGVtZVBhaW50
ZXIgcGFpbnRlciwgUGFzc093blB0cjxXZWJTY3JvbGxiYXJUaGVtZUdlb21ldHJ5PiBnZW9tZXRy
eSkKIHsKLSAgICByZXR1cm4gbmV3IFdlYlNjcm9sbGJhckxheWVySW1wbChTY3JvbGxiYXJMYXll
ckNocm9taXVtOjpjcmVhdGUoV2ViU2Nyb2xsYmFyOjpjcmVhdGUoc2Nyb2xsYmFyKSwgcGFpbnRl
ciwgZ2VvbWV0cnksIDApKTsKKyAgICByZXR1cm4gbmV3IFdlYlNjcm9sbGJhckxheWVySW1wbChT
Y3JvbGxiYXJMYXllckNocm9taXVtOjpjcmVhdGUoYWRvcHRQdHIoc2Nyb2xsYmFyKSwgcGFpbnRl
ciwgZ2VvbWV0cnksIDApKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1Njcm9sbGJhckxheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDYyNDIw
NDNiMzIxZDgwMDFhZjhhYjhiOTBkZGRjOWNjZTBlZWRhNmEuLjY1OTYwM2ExOTAzZTI5YjRmNmZl
YmVlZWU3NTM0NWJmOTQyYzQzMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisjaW5jbHVkZSAiV2ViU2Nyb2xsYmFySW1wbC5o
IgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlNjcm9sbGJh
ci5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJTY3JvbGxiYXJUaGVtZUdlb21ldHJ5Lmg+CkBAIC0x
MDMsNyArMTA0LDcgQEAgVEVTVChTY3JvbGxiYXJMYXllckNocm9taXVtVGVzdCwgcmVzb2x2ZVNj
cm9sbExheWVyUG9pbnRlcikKIAogICAgIFNldHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJs
ZWQodHJ1ZSk7CiAgICAgewotICAgICAgICBPd25QdHI8V2ViS2l0OjpXZWJTY3JvbGxiYXI+IHNj
cm9sbGJhciA9IFdlYktpdDo6V2ViU2Nyb2xsYmFyOjpjcmVhdGUobW9ja1Njcm9sbGJhci5nZXQo
KSk7CisgICAgICAgIE93blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhcj4gc2Nyb2xsYmFyID0gYWRv
cHRQdHIobmV3IFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbChtb2NrU2Nyb2xsYmFyLmdldCgpKSk7
CiAgICAgICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCk7CiAgICAgICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZDEgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNo
aWxkMiA9IFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZShzY3JvbGxiYXIucmVsZWFzZSgp
LCBwYWludGVyLCBXZWJLaXQ6OkZha2VXZWJTY3JvbGxiYXJUaGVtZUdlb21ldHJ5OjpjcmVhdGUo
KSwgY2hpbGQxLT5pZCgpKTsKQEAgLTEyMCw3ICsxMjEsNyBAQCBURVNUKFNjcm9sbGJhckxheWVy
Q2hyb21pdW1UZXN0LCByZXNvbHZlU2Nyb2xsTGF5ZXJQb2ludGVyKQogICAgIH0KIAogICAgIHsg
Ly8gYW5vdGhlciB0cmF2ZXJzZSBvcmRlcgotICAgICAgICBPd25QdHI8V2ViS2l0OjpXZWJTY3Jv
bGxiYXI+IHNjcm9sbGJhciA9IFdlYktpdDo6V2ViU2Nyb2xsYmFyOjpjcmVhdGUobW9ja1Njcm9s
bGJhci5nZXQoKSk7CisgICAgICAgIE93blB0cjxXZWJLaXQ6OldlYlNjcm9sbGJhcj4gc2Nyb2xs
YmFyID0gYWRvcHRQdHIobmV3IFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbChtb2NrU2Nyb2xsYmFy
LmdldCgpKSk7CiAgICAgICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBj
aGlsZDIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICAgICAgUmVmUHRyPExheWVyQ2hy
b21pdW0+IGNoaWxkMSA9IFNjcm9sbGJhckxheWVyQ2hyb21pdW06OmNyZWF0ZShzY3JvbGxiYXIu
cmVsZWFzZSgpLCBwYWludGVyLCBXZWJLaXQ6OkZha2VXZWJTY3JvbGxiYXJUaGVtZUdlb21ldHJ5
OjpjcmVhdGUoKSwgY2hpbGQyLT5pZCgpKTsKQEAgLTE0Niw3ICsxNDcsNyBAQCBURVNUKFNjcm9s
bGJhckxheWVyQ2hyb21pdW1UZXN0LCBzY3JvbGxPZmZzZXRTeW5jaHJvbml6YXRpb24pCiAKICAg
ICBTZXR0aW5nczo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHRydWUpOwogCi0gICAgT3duUHRy
PFdlYktpdDo6V2ViU2Nyb2xsYmFyPiBzY3JvbGxiYXIgPSBXZWJLaXQ6OldlYlNjcm9sbGJhcjo6
Y3JlYXRlKG1vY2tTY3JvbGxiYXIuZ2V0KCkpOworICAgIE93blB0cjxXZWJLaXQ6OldlYlNjcm9s
bGJhcj4gc2Nyb2xsYmFyID0gYWRvcHRQdHIobmV3IFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbCht
b2NrU2Nyb2xsYmFyLmdldCgpKSk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJl
ZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY29udGVudExheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHNjcm9sbGJhckxheWVyID0gU2Nyb2xsYmFyTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKHNjcm9sbGJhci5yZWxlYXNlKCksIHBhaW50ZXIsIFdlYktpdDo6RmFrZVdlYlNjcm9sbGJh
clRoZW1lR2VvbWV0cnk6OmNyZWF0ZSgpLCBsYXllclRyZWVSb290LT5pZCgpKTsK
</data>
<flag name="review"
          id="171128"
          type_id="1"
          status="+"
          setter="enne"
    />
    <flag name="commit-queue"
          id="171349"
          type_id="3"
          status="-"
          setter="enne"
    />
          </attachment>
      

    </bug>

</bugzilla>