<?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>114013</bug_id>
          
          <creation_ts>2013-04-05 02:24:12 -0700</creation_ts>
          <short_desc>Remove Chromium code from WebCore/page</short_desc>
          <delta_ts>2013-04-05 08:48:04 -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="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jamesr</cc>
    
    <cc>luiz</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>869656</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-05 02:24:12 -0700</bug_when>
    <thetext>Remove Chromium code from WebCore/page</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869657</commentid>
    <comment_count>1</comment_count>
      <attachid>196602</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-04-05 02:24:48 -0700</bug_when>
    <thetext>Created attachment 196602
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869784</commentid>
    <comment_count>2</comment_count>
      <attachid>196602</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 08:48:02 -0700</bug_when>
    <thetext>Comment on attachment 196602
Cleanup

Clearing flags on attachment: 196602

Committed r147749: &lt;http://trac.webkit.org/changeset/147749&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869785</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-05 08:48:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196602</attachid>
            <date>2013-04-05 02:24:48 -0700</date>
            <delta_ts>2013-04-05 08:48:02 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-114013-20130405022436.patch</filename>
            <type>text/plain</type>
            <size>46336</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzczMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTA0LTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBDaHJvbWl1bSBjb2Rl
IGZyb20gV2ViQ29yZS9wYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTQwMTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZW1vdmVkLgorCisgICAgICAgICogcGFnZS9Db25zb2xlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnNvbGU6OnRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6
dGltZUVuZCk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkR2VzdHVyZXNUcmlnZ2VyQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRTY3JvbGxFdmVudFRvVmlldyk6
CisgICAgICAgICogcGFnZS9GZWF0dXJlT2JzZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RmVhdHVyZU9ic2VydmVyOjp1cGRhdGVNZWFzdXJlbWVudHMpOgorICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXNlU2xvd1JlcGFpbnRzKToKKyAgICAgICAgKiBwYWdl
L1BhZ2VDb25zb2xlLmNwcDoKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UGFnZUdyb3VwOjphZGRWaXNpdGVkTGluayk6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL2FuZHJvaWQ6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9jaHJvbWl1bTogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2Nocm9taXVt
L0Nocm9tZUNsaWVudENocm9taXVtLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9jaHJvbWl1
bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2No
cm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgIChTY3Jv
bGxpbmdDb29yZGluYXRvcik6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlLmg6CisgICAgICAgIChTY3JvbGxpbmdUcmVlKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9jaHJvbWl1bTogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9jaHJv
bWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmg6
IFJlbW92ZWQuCisKIDIwMTMtMDQtMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE0NTI3OSk6IEJ1aWxkIGZhaWxzIHdo
aWxlIGxpbmtpbmcgd2hlbiBNRURJQV9TVFJFQU0gaXMgZW5hYmxlZApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9Db25zb2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnNvbGUuY3BwCShyZXZpc2lvbiAxNDc3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnNvbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsNiBAQAogI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbnNvbGU6OkNvbnNvbGUoRnJhbWUqIGZyYW1lKQpAQCAt
MjMxLDE2ICsyMjcsMTAgQEAgdm9pZCBDb25zb2xlOjpwcm9maWxlRW5kKGNvbnN0IFN0cmluZyYg
dAogdm9pZCBDb25zb2xlOjp0aW1lKGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpzdGFydENvbnNvbGVUaW1pbmcobV9mcmFtZSwgdGl0bGUpOwot
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIFRSQUNFX0VWRU5UX0NPUFlfQVNZTkNfQkVHSU4w
KCJ3ZWJraXQiLCB0aXRsZS51dGY4KCkuZGF0YSgpLCB0aGlzKTsKLSNlbmRpZgogfQogCiB2b2lk
IENvbnNvbGU6OnRpbWVFbmQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQogewotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIFRSQUNFX0VWRU5UX0NPUFlfQVNZTkNf
RU5EMCgid2Via2l0IiwgdGl0bGUudXRmOCgpLmRhdGEoKSwgdGhpcyk7Ci0jZW5kaWYKICAgICBS
ZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9y
Q29uc29sZShzdGF0ZSkpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6c3RvcENvbnNv
bGVUaW1pbmcobV9mcmFtZSwgdGl0bGUsIGNhbGxTdGFjay5yZWxlYXNlKCkpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTQ3NzMwKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMs
MTEgKzI4Myw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRHZXN0dXJlc1RyaWdnZXIKICAg
ICAvLyBJZiB0aGUgcGxhdGZvcm0gd2UncmUgb24gc3VwcG9ydHMgR2VzdHVyZVRhcERvd24gYW5k
IEdlc3R1cmVUYXBDYW5jZWwgdGhlbiB3ZSdsbAogICAgIC8vIHJlbHkgb24gdGhlbSB0byBzZXQg
dGhlIGFjdGl2ZSBzdGF0ZS4gVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vIGdlbmVyaWMgd2F5IHRv
CiAgICAgLy8ga25vdyBpbiBhZHZhbmNlIHdoYXQgZXZlbnQgdHlwZXMgYXJlIHN1cHBvcnRlZC4K
LSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCiAgICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCiB9CiAjZW5kaWYKIApAQCAtMTg4NiwxMSArMTg4Miw2IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmUKICAgICBib29sIHN3YWxsb3dN
b3VzZVVwRXZlbnQgPSAhZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZl
bnQsIG1ldi50YXJnZXROb2RlKCksIHRydWUsIG1fY2xpY2tDb3VudCwgbW91c2VFdmVudCwgZmFs
c2UpOwogCiAgICAgYm9vbCBjb250ZXh0TWVudUV2ZW50ID0gbW91c2VFdmVudC5idXR0b24oKSA9
PSBSaWdodEJ1dHRvbjsKLSNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQotICAg
IC8vIEZJWE1FOiBUaGUgTWFjIHBvcnQgYWNoaWV2ZXMgdGhlIHNhbWUgYmVoYXZpb3IgYnkgY2hl
Y2tpbmcgd2hldGhlciB0aGUgY29udGV4dCBtZW51IGlzIGN1cnJlbnRseSBvcGVuIGluIFdlYlBh
Z2U6Om1vdXNlRXZlbnQoKS4gQ29uc2lkZXIgbWVyZ2luZyB0aGUgaW1wbGVtZW50YXRpb25zLgot
ICAgIGlmIChtb3VzZUV2ZW50LmJ1dHRvbigpID09IExlZnRCdXR0b24gJiYgbW91c2VFdmVudC5t
b2RpZmllcnMoKSAmIFBsYXRmb3JtRXZlbnQ6OkN0cmxLZXkpCi0gICAgICAgIGNvbnRleHRNZW51
RXZlbnQgPSB0cnVlOwotI2VuZGlmCiAKICAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0gbV9j
bGlja0NvdW50ID4gMCAmJiAhY29udGV4dE1lbnVFdmVudCAmJiBtb3VzZUlzUmVsZWFzZWRPblBy
ZXNzZWRFbGVtZW50KG1ldi50YXJnZXROb2RlKCksIG1fY2xpY2tOb2RlLmdldCgpKSAmJiAhZGlz
cGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBtZXYudGFyZ2V0Tm9kZSgp
LCB0cnVlLCBtX2NsaWNrQ291bnQsIG1vdXNlRXZlbnQsIHRydWUpOwogCkBAIC0yMzQ2LDcgKzIz
MzcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aXNJbnNpZGVTY3JvbGxiYXIoY29uCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi0jaWYgIVBMQVRGT1JNKEdUSykgJiYgIShQTEFURk9STShDSFJPTUlV
TSkgJiYgKE9TKFVOSVgpICYmICFPUyhEQVJXSU4pKSkKKyNpZiAhUExBVEZPUk0oR1RLKQogYm9v
bCBFdmVudEhhbmRsZXI6OnNob3VsZFR1cm5WZXJ0aWNhbFRpY2tzSW50b0hvcml6b250YWwoY29u
c3QgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjc2OSw3ICsyNzYwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnNlbmRTY3JvbGxFdmVudFRvVmlldwogICAgICAgICBzY2FsZWREZWx0YS53aWR0aCgpIC8gdGlj
a0Rpdmlzb3IsIHNjYWxlZERlbHRhLmhlaWdodCgpIC8gdGlja0Rpdmlzb3IsCiAgICAgICAgIFNj
cm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LAogICAgICAgICBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwg
Z2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZl
bnQubWV0YUtleSgpKTsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKENIUk9NSVVNKQor
I2lmIFBMQVRGT1JNKE1BQykKICAgICBzeW50aGV0aWNXaGVlbEV2ZW50LnNldEhhc1ByZWNpc2VT
Y3JvbGxpbmdEZWx0YXModHJ1ZSk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9GZWF0dXJlT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RmVhdHVyZU9ic2VydmVyLmNwcAkocmV2aXNpb24gMTQ3NzMwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GZWF0dXJlT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSwyMCArNDksOSBA
QCBGZWF0dXJlT2JzZXJ2ZXI6On5GZWF0dXJlT2JzZXJ2ZXIoKQogCiB2b2lkIEZlYXR1cmVPYnNl
cnZlcjo6dXBkYXRlTWVhc3VyZW1lbnRzKCkKIHsKLSNpZiBQTEFURk9STShDSFJPTVVNKQotICAg
IEhpc3RvZ3JhbVN1cHBvcnQ6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJXZWJDb3JlLkZlYXR1cmVP
YnNlcnZlciIsIFBhZ2VWaXNpdHMsIE51bWJlck9mRmVhdHVyZXMpOwotI2VuZGlmCi0KICAgICBp
ZiAoIW1fZmVhdHVyZUJpdHMpCiAgICAgICAgIHJldHVybjsKIAotI2lmIFBMQVRGT1JNKENIUk9N
VU0pCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bWJlck9mRmVhdHVyZXM7ICsraSkg
ewotICAgICAgICBpZiAobV9mZWF0dXJlQml0cy0+cXVpY2tHZXQoaSkpCi0gICAgICAgICAgICBI
aXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiV2ViQ29yZS5GZWF0dXJlT2Jz
ZXJ2ZXIiLCBpLCBOdW1iZXJPZkZlYXR1cmVzKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIC8vIENs
ZWFyaW5nIGZlYXR1cmUgYml0cyBpcyB0aW1pbmcgc2Vuc2l0aXZlLiBQb3J0cyBvdGhlciB0aGFu
IGNocm9taXVtIGRvIG5vdCB1c2UgSGlzdG9ncmFtU3VwcG9ydCwKICAgICAvLyBhbmQgcHVsbCB0
aGUgcmVzdWx0cyBvbiBjZXJ0YWluIG5hdmlnYXRpb24gZXZlbnRzIGluc3RlYWQuCiAgICAgbV9m
ZWF0dXJlQml0cy0+Y2xlYXJBbGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJ
KHJldmlzaW9uIDE0NzczMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTQsMTAgKzk0LDYgQEAKICNpbmNsdWRlICJUZXh0QXV0b3NpemVy
LmgiCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotI2luY2x1ZGUgIlRyYWNlRXZl
bnQuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CkBAIC0xMTEwLDEwICsxMTA2LDYgQEAgdm9pZCBGcmFtZVZpZXc6OmxheW91dChi
b29sIGFsbG93U3VidHJlZQogICAgIGlmIChtX2luTGF5b3V0KQogICAgICAgICByZXR1cm47CiAK
LSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSAgICBUUkFDRV9FVkVOVDAoIndlYmtpdCIsICJGcmFt
ZVZpZXc6OmxheW91dCIpOwotI2VuZGlmCi0KICAgICAvLyBQcm90ZWN0IHRoZSB2aWV3IGZyb20g
YmVpbmcgZGVsZXRlZCBkdXJpbmcgbGF5b3V0IChpbiByZWNhbGNTdHlsZSkKICAgICBSZWZQdHI8
RnJhbWVWaWV3PiBwcm90ZWN0b3IodGhpcyk7CiAKQEAgLTEzMzUsNyArMTMyNyw3IEBAIHZvaWQg
RnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUKICAgICAKICAgICBtX2xheW91dENv
dW50Kys7CiAKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKENIUk9NSVVNKQorI2lmIFBM
QVRGT1JNKE1BQykKICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSByb290LT5kb2N1bWVu
dCgpLT5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPnBvc3ROb3RpZmlj
YXRpb24ocm9vdCwgQVhPYmplY3RDYWNoZTo6QVhMYXlvdXRDb21wbGV0ZSwgdHJ1ZSk7CiAjZW5k
aWYKQEAgLTE0NzMsMTMgKzE0NjUsNiBAQCBib29sIEZyYW1lVmlldzo6dXNlU2xvd1JlcGFpbnRz
KGJvb2wgY29uCiAgICAgaWYgKGNvbnRlbnRzSW5Db21wb3NpdGVkTGF5ZXIoKSAmJiAhcGxhdGZv
cm1XaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIG11c3RCZVNsb3c7CiAKLSNpZiBQTEFURk9STShD
SFJPTUlVTSkKLSAgICAvLyBUaGUgY2hyb21pdW0gY29tcG9zaXRvciBkb2VzIG5vdCBzdXBwb3J0
IHNjcm9sbGluZyBhIG5vbi1jb21wb3NpdGVkIGZyYW1lIHdpdGhpbiBhIGNvbXBvc2l0ZWQgcGFn
ZSB0aHJvdWdoCi0gICAgLy8gdGhlIGZhc3Qgc2Nyb2xsaW5nIHBhdGgsIHNvIGZvcmNlIHNsb3cg
c2Nyb2xsaW5nIGluIHRoYXQgY2FzZS4KLSAgICBpZiAobV9mcmFtZS0+b3duZXJFbGVtZW50KCkg
JiYgIWhhc0NvbXBvc2l0ZWRDb250ZW50KCkgJiYgbV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUt
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+aGFzQ29tcG9zaXRlZENvbnRlbnQoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLQogICAgIGJvb2wgaXNPdmVybGFwcGVkID0gbV9p
c092ZXJsYXBwZWQgJiYgY29uc2lkZXJPdmVybGFwOwogCiAgICAgaWYgKG11c3RCZVNsb3cgfHwg
bV9jYW5ub3RCbGl0VG9XaW5kb3cgfHwgaXNPdmVybGFwcGVkIHx8ICFtX2NvbnRlbnRJc09wYXF1
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGUuY3BwCShyZXZpc2lvbiAxNDc3MzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksMTAgKzQ5LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSNpbmNs
dWRlICJUcmFjZUV2ZW50LmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1l
c3BhY2UgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkocmV2aXNpb24gMTQ3NzMw
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMCArNDYsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQotI2luY2x1ZGUgIlZpc2l0ZWRMaW5rcy5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RhdGljIHVuc2lnbmVkIGdldFVuaXF1ZUlkZW50aWZpZXIoKQpAQCAtMTk1LDE3ICsx
OTEsMTIgQEAgdm9pZCBQYWdlR3JvdXA6OnJlbW92ZVBhZ2UoUGFnZSogcGFnZSkKIAogYm9vbCBQ
YWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKQogewotI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQotICAgIC8vIFVzZSBDaHJvbWl1bSdzIGJ1aWx0LWluIHZpc2l0
ZWQgbGluayBkYXRhYmFzZS4KLSAgICByZXR1cm4gVmlzaXRlZExpbmtzOjppc0xpbmtWaXNpdGVk
KHZpc2l0ZWRMaW5rSGFzaCk7Ci0jZWxzZQogICAgIGlmICghbV92aXNpdGVkTGlua3NQb3B1bGF0
ZWQpIHsKICAgICAgICAgbV92aXNpdGVkTGlua3NQb3B1bGF0ZWQgPSB0cnVlOwogICAgICAgICBB
U1NFUlQoIW1fcGFnZXMuaXNFbXB0eSgpKTsKICAgICAgICAgKCptX3BhZ2VzLmJlZ2luKCkpLT5j
aHJvbWUoKS0+Y2xpZW50KCktPnBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CiAgICAgfQogICAgIHJl
dHVybiBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmNvbnRhaW5zKHZpc2l0ZWRMaW5rSGFzaCk7Ci0jZW5k
aWYKIH0KIAogdm9pZCBQYWdlR3JvdXA6OmFkZFZpc2l0ZWRMaW5rSGFzaChMaW5rSGFzaCBoYXNo
KQpAQCAtMjE3LDEwICsyMDgsOCBAQCB2b2lkIFBhZ2VHcm91cDo6YWRkVmlzaXRlZExpbmtIYXNo
KExpbmtICiBpbmxpbmUgdm9pZCBQYWdlR3JvdXA6OmFkZFZpc2l0ZWRMaW5rKExpbmtIYXNoIGhh
c2gpCiB7CiAgICAgQVNTRVJUKHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKTsKLSNpZiAhUExBVEZP
Uk0oQ0hST01JVU0pCiAgICAgaWYgKCFtX3Zpc2l0ZWRMaW5rSGFzaGVzLmFkZChoYXNoKS5pc05l
d0VudHJ5KQogICAgICAgICByZXR1cm47Ci0jZW5kaWYKICAgICBQYWdlOjp2aXNpdGVkU3RhdGVD
aGFuZ2VkKHRoaXMsIGhhc2gpOwogICAgIHBhZ2VDYWNoZSgpLT5tYXJrUGFnZXNGb3JWaXN0ZWRM
aW5rU3R5bGVSZWNhbGMoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZp
c2lvbiAxNDc3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEyLDExICsxMTIsMTEgQEAgYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFJlc3Bl
Y3RQcmlvcml0eUluQwogI2VuZGlmCiAKIC8vIE5PVEVzCi0vLyAgMSkgRWRpdGluZ01hY0JlaGF2
aW9yIGNvbXByaXNlcyBUaWdlciwgTGVvcGFyZCwgU25vd0xlb3BhcmQgYW5kIGlPUyBidWlsZHMs
IGFzIHdlbGwgUXRXZWJLaXQgYW5kIENocm9taXVtIHdoZW4gYnVpbHQgb24gTWFjOworLy8gIDEp
IEVkaXRpbmdNYWNCZWhhdmlvciBjb21wcmlzZXMgVGlnZXIsIExlb3BhcmQsIFNub3dMZW9wYXJk
IGFuZCBpT1MgYnVpbGRzLCBhcyB3ZWxsIGFzIFF0V2ViS2l0IHdoZW4gYnVpbHQgb24gTWFjOwog
Ly8gIDIpIEVkaXRpbmdXaW5kb3dzQmVoYXZpb3IgY29tcHJpc2VzIFdpbjMyIGFuZCBXaW5DRSBi
dWlsZHMsIGFzIHdlbGwgYXMgUXRXZWJLaXQgYW5kIENocm9taXVtIHdoZW4gYnVpbHQgb24gV2lu
ZG93czsKIC8vICAzKSBFZGl0aW5nVW5peEJlaGF2aW9yIGNvbXByaXNlcyBhbGwgdW5peC1iYXNl
ZCBzeXN0ZW1zLCBidXQgRGFyd2luL01hY09TL0FuZHJvaWQgKGFuZCB0aGVuIGFidXNpbmcgdGhl
IHRlcm1pbm9sb2d5KTsKIC8vICA0KSBFZGl0aW5nQW5kcm9pZEJlaGF2aW9yIGNvbXByaXNlcyBB
bmRyb2lkIGJ1aWxkcy4KLS8vIDk5KSBNYWNFZGl0aW5nQmVoYXZpb3IgaXMgdXNlZCBhIGZhbGxi
YWNrLgorLy8gOTkpIE1hY0VkaXRpbmdCZWhhdmlvciBpcyB1c2VkIGFzIGEgZmFsbGJhY2suCiBz
dGF0aWMgRWRpdGluZ0JlaGF2aW9yVHlwZSBlZGl0aW5nQmVoYXZpb3JUeXBlRm9yUGxhdGZvcm0o
KQogewogICAgIHJldHVybgpAQCAtMTQxLDIxICsxNDEsOCBAQCBzdGF0aWMgY29uc3QgYm9vbCBk
ZWZhdWx0VW5pZmllZFRleHRDaGVjCiAjZWxzZQogc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQgPSBmYWxzZTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKQotI2lmIE9TKE1BQ19PU19YKQotc3RhdGljIGNvbnN0IGJvb2wgZGVmYXVsdFNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZCA9IHRydWU7Ci0jZWxzZQotc3RhdGljIGNvbnN0IGJvb2wgZGVm
YXVsdFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCA9IGZhbHNlOwotI2VuZGlmCi0jaWYgT1MoV0lO
RE9XUykKLXN0YXRpYyBjb25zdCBib29sIGRlZmF1bHRTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VF
bmFibGVkID0gdHJ1ZTsKLSNlbHNlCi1zdGF0aWMgY29uc3QgYm9vbCBkZWZhdWx0U2VsZWN0VHJh
aWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCA9IGZhbHNlOwotI2VuZGlmCi0jZWxzZQogc3RhdGljIGNv
bnN0IGJvb2wgZGVmYXVsdFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCA9IHRydWU7CiBzdGF0aWMg
Y29uc3QgYm9vbCBkZWZhdWx0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCA9IGZhbHNl
OwotI2VuZGlmCiAKIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgIDogbV9wYWdl
KDApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0Nocm9tZUNsaWVudENocm9t
aXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9DaHJvbWVD
bGllbnRDaHJvbWl1bS5oCShyZXZpc2lvbiAxNDc3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L2Nocm9taXVtL0Nocm9tZUNsaWVudENocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
IAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIENocm9tZUNsaWVudENocm9taXVtX2gKLSNkZWZpbmUgQ2hyb21l
Q2xpZW50Q2hyb21pdW1faAotCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgSW50UmVjdDsKLWNs
YXNzIFBvcHVwQ29udGFpbmVyOwotCi0vLyBDb250YWlucyBDaHJvbWl1bS1zcGVjaWZpYyBleHRl
bnNpb25zIHRvIHRoZSBDaHJvbWVDbGllbnQuICBPbmx5IHB1dAotLy8gdGhpbmdzIGhlcmUgdGhh
dCBkb24ndCBtYWtlIHNlbnNlIGZvciBvdGhlciBwb3J0cy4KLWNsYXNzIENocm9tZUNsaWVudENo
cm9taXVtIDogcHVibGljIENocm9tZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgLy8gTm90aWZpZXMg
dGhlIGNsaWVudCBvZiBhIG5ldyBwb3B1cCB3aWRnZXQuICBUaGUgY2xpZW50IHNob3VsZCBwbGFj
ZQotICAgIC8vIGFuZCBzaXplIHRoZSB3aWRnZXQgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCByZWxh
dGl2ZSB0byB0aGUgc2NyZWVuLgotICAgIC8vIElmIGhhbmRsZUV4dGVybmFsIGlzIHRydWUsIHRo
ZW4gZHJhd2luZyBhbmQgaW5wdXQgaGFuZGxpbmcgZm9yIHRoZQotICAgIC8vIHBvcHVwIHdpbGwg
YmUgaGFuZGxlZCBieSB0aGUgZXh0ZXJuYWwgZW1iZWRkZXIuCi0gICAgdmlydHVhbCB2b2lkIHBv
cHVwT3BlbmVkKFBvcHVwQ29udGFpbmVyKiBwb3B1cENvbnRhaW5lciwgY29uc3QgSW50UmVjdCYg
Ym91bmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhbmRsZUV4dGVybmFs
KSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIC8vIE5vdGlmaWVzIHRo
ZSBjbGllbnQgYSBwb3B1cCB3YXMgY2xvc2VkLgotICAgIHZpcnR1YWwgdm9pZCBwb3B1cENsb3Nl
ZChQb3B1cENvbnRhaW5lciogcG9wdXBDb250YWluZXIpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVt
L0RyYWdDb250cm9sbGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0Nzcz
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEdvb2dsZSBJbmMuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJEcmFnQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRHJhZ0RhdGEuaCIKLSNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIE9TKFdJTkRP
V1MpCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0ID0gMjsKLWNv
bnN0IGludCBEcmFnQ29udHJvbGxlcjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAxNTAwICogMTUw
MDsKLWNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0gNzsKLWNv
bnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b21JbnNldCA9IDM7Ci0KLWNvbnN0
IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwotCi1EcmFnT3Bl
cmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkK
LXsKLSAgICAvLyBGSVhNRTogVG8gbWF0Y2ggdGhlIE1hY09TIGJlaGF2aW91ciB3ZSBzaG91bGQg
cmV0dXJuIERyYWdPcGVyYXRpb25Ob25lCi0gICAgLy8gaWYgd2UgYXJlIGEgbW9kYWwgd2luZG93
LCB3ZSBhcmUgdGhlIGRyYWcgc291cmNlLCBvciB0aGUgd2luZG93IGlzIGFuCi0gICAgLy8gYXR0
YWNoZWQgc2hlZXQgSWYgdGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHdpdGhpbiBXZWJDb3Jl
Ci0gICAgLy8gb3BlcmF0aW9uRm9yRHJhZyBjYW4gYmUgcHVsbGVkIGludG8gV2ViQ29yZSBpdHNl
bGYKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotICAgIHJldHVybiBkcmFnRGF0YS0+Y29udGFpbnNV
UkwoMCkgJiYgIW1fZGlkSW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3Bl
cmF0aW9uTm9uZTsKLX0KLQotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFn
RGF0YSopCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBPUyBzcGVjaWZpYy4g
IERlbGVnYXRlIHRvIHRoZSBlbWJlZGRlciBpbnN0ZWFkLgotI2lmIE9TKFdJTkRPV1MpCi0gICAg
cmV0dXJuIDo6R2V0QXN5bmNLZXlTdGF0ZShWS19DT05UUk9MKTsKLSNlbHNlCi0gICAgcmV0dXJu
IGZhbHNlOwotI2VuZGlmCi19Ci0gICAgCi1jb25zdCBJbnRTaXplJiBEcmFnQ29udHJvbGxlcjo6
bWF4RHJhZ0ltYWdlU2l6ZSgpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIC8vIE1hdGNoIFNhZmFy
aSdzIGRyYWcgaW1hZ2Ugc2l6ZS4KLSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBtYXhEcmFnSW1h
Z2VTaXplKDQwMCwgNDAwKTsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0IEludFNpemUgbWF4RHJh
Z0ltYWdlU2l6ZSgyMDAsIDIwMCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gbWF4RHJhZ0ltYWdlU2l6
ZTsKLX0KLQotdm9pZCBEcmFnQ29udHJvbGxlcjo6Y2xlYW51cEFmdGVyU3lzdGVtRHJhZygpCi17
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Y2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAx
NDc3MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotCi0jaW5jbHVkZSAiQ2hyb21pdW1EYXRh
T2JqZWN0LmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJDdXJz
b3IuaCIKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVkZSAiRm9jdXNDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCi0jaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0jaWYgT1MoREFSV0lOKQotY29uc3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4dERyYWdE
ZWxheSA9IDAuMTU7Ci0jZWxzZQotY29uc3QgZG91YmxlIEV2ZW50SGFuZGxlcjo6VGV4dERyYWdE
ZWxheSA9IDAuMDsKLSNlbmRpZgotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NF
dmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSog
c3ViZnJhbWUpCi17Ci0gICAgLy8gSWYgd2UncmUgY2xpY2tpbmcgaW50byBhIGZyYW1lIHRoYXQg
aXMgc2VsZWN0ZWQsIHRoZSBmcmFtZSB3aWxsIGFwcGVhcgotICAgIC8vIGdyZXllZCBvdXQgZXZl
biB0aG91Z2ggd2UncmUgY2xpY2tpbmcgb24gdGhlIHNlbGVjdGlvbi4gIFRoaXMgbG9va3MKLSAg
ICAvLyByZWFsbHkgc3RyYW5nZSAoaGF2aW5nIHRoZSB3aG9sZSBmcmFtZSBiZSBncmV5ZWQgb3V0
KSwgc28gd2UgZGVzZWxlY3QgdGhlCi0gICAgLy8gc2VsZWN0aW9uLgotICAgIEludFBvaW50IHAg
PSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMobWV2LmV2ZW50KCkucG9zaXRpb24o
KSk7Ci0gICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5jb250YWlucyhwKSkgewotICAgICAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcygKLSAgICAgICAgICAgIG1ldi50YXJnZXROb2Rl
KCktPnJlbmRlcmVyKCktPnBvc2l0aW9uRm9yUG9pbnQobWV2LmxvY2FsUG9pbnQoKSkpOwotICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbih2aXNpYmxlUG9zKTsKLSAgICAgICAg
aWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0
aW9uKSkKLSAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3
U2VsZWN0aW9uKTsKLSAgICB9Ci0KLSAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRs
ZU1vdXNlUHJlc3NFdmVudChtZXYuZXZlbnQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lLCBIaXRUZXN0UmVzdWx0KiBo
b3ZlcmVkTm9kZSkKLXsKLSAgICBpZiAobV9tb3VzZURvd25NYXlTdGFydERyYWcgJiYgIW1fbW91
c2VEb3duV2FzSW5TdWJmcmFtZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHN1YmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VNb3ZlRXZlbnQobWV2LmV2ZW50KCksIGhvdmVy
ZWROb2RlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NN
b3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYg
bWV2LCBGcmFtZSogc3ViZnJhbWUpCi17Ci0gICAgc3ViZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVNb3VzZVJlbGVhc2VFdmVudChtZXYuZXZlbnQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgLy8gV2Ug
Y2FuIHNvbWV0aW1lcyBnZXQgYSBudWxsIHdpZGdldCEgIEV2ZW50SGFuZGxlck1hYyBoYW5kbGVz
IGEgbnVsbAotICAgIC8vIHdpZGdldCBieSByZXR1cm5pbmcgZmFsc2UsIHNvIHdlIGRvIHRoZSBz
YW1lLgotICAgIGlmICghd2lkZ2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBJ
ZiBub3QgYSBGcmFtZVZpZXcsIHRoZW4gcHJvYmFibHkgYSBwbHVnaW4gd2lkZ2V0LiAgVGhvc2Ug
d2lsbCByZWNlaXZlCi0gICAgLy8gdGhlIGV2ZW50IHZpYSBhbiBFdmVudFRhcmdldE5vZGUgZGlz
cGF0Y2ggd2hlbiB0aGlzIHJldHVybnMgZmFsc2UuCi0gICAgaWYgKCF3aWRnZXQtPmlzRnJhbWVW
aWV3KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0b0ZyYW1lVmlldyh3
aWRnZXQpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2
ZW50KTsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRv
V2lkZ2V0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KQotewotICAg
IC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBzZW5kIHRoZSBldmVudCB0by4KLSAgICBpZiAo
IWV2ZW50LnRhcmdldE5vZGUoKSB8fCAhZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIHx8
ICFldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQodG9SZW5k
ZXJXaWRnZXQoZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpKS0+d2lkZ2V0KCkpOwotfQot
Ci1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3
aWRnZXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgRXZlbnRIYW5kbGVyOjp0YWJzVG9BbGxGb3JtQ29udHJvbHMoS2V5Ym9hcmRFdmVudCop
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpldmVu
dEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogRXZlbnRIYW5kbGVyV2luLmNwcCBkb2VzIHRoZSBmb2xsb3dpbmc6Ci0g
ICAgLy8gcmV0dXJuIGV2ZW50LmFjdGl2YXRlZFdlYlZpZXcoKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLVBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5n
Q2xpcGJvYXJkKCkgY29uc3QKLXsKLSAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBkYXRh
T2JqZWN0ID0gQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXR1cm4gQ2xpcGJv
YXJkQ2hyb21pdW06OmNyZWF0ZShDbGlwYm9hcmQ6OkRyYWdBbmREcm9wLCBkYXRhT2JqZWN0Lmdl
dCgpLCBDbGlwYm9hcmRXcml0YWJsZSwgbV9mcmFtZSk7Ci19Ci0KLXZvaWQgRXZlbnRIYW5kbGVy
Ojpmb2N1c0RvY3VtZW50VmlldygpCi17Ci0gICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2Uo
KTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBwYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fZnJhbWUpOwotfQotCi1ib29sIEV2ZW50SGFuZGxl
cjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVyV2lkZ2V0KiByZW5kZXJX
aWRnZXQpCi17Ci0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHJlbmRlcldp
ZGdldC0+d2lkZ2V0KCkpOwotfQotCi11bnNpZ25lZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tleU1v
ZGlmaWVycygpCi17Ci0jaWYgT1MoREFSV0lOKQotICAgIHJldHVybiBQbGF0Zm9ybUV2ZW50OjpD
dHJsS2V5IHwgUGxhdGZvcm1FdmVudDo6QWx0S2V5OwotI2Vsc2UKLSAgICByZXR1cm4gUGxhdGZv
cm1FdmVudDo6QWx0S2V5OwotI2VuZGlmCi19Ci0KLSNpZiBPUyhVTklYKSAmJiAhT1MoREFSV0lO
KQotLy8gR1RLKyBtdXN0IHNjcm9sbCBob3Jpem9udGFsbHkgaWYgdGhlIG1vdXNlIHBvaW50ZXIg
aXMgb24gdG9wIG9mIHRoZQotLy8gaG9yaXpvbnRhbCBzY3JvbGxiYXIgd2hpbGUgc2Nyb2xsaW5n
IHdpdGggdGhlIHdoZWVsLgotLy8gVGhpcyBjb2RlIGNvbWVzIGZyb20gZ3RrL0V2ZW50SGFuZGxl
ckd0ay5jcHAuCi1ib29sIEV2ZW50SGFuZGxlcjo6c2hvdWxkVHVyblZlcnRpY2FsVGlja3NJbnRv
SG9yaXpvbnRhbChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYgZXZlbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFldmVudC5oYXNQcmVjaXNlU2Ny
b2xsaW5nRGVsdGFzKCkgJiYgcmVzdWx0LnNjcm9sbGJhcigpICYmIHJlc3VsdC5zY3JvbGxiYXIo
KS0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwotfQotI2VuZGlmCi0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlzaW9uIDE0NzczMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDYgQEAKICNpbmNsdWRlICJTY3JvbGxpbmdD
b29yZGluYXRvck1hYy5oIgogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLSNpbmNs
dWRlICJTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmgiCi0jZW5kaWYKLQogI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvckNvb3Jk
aW5hdGVkR3JhcGhpY3MuaCIKICNlbmRpZgpAQCAtNjgsMTAgKzY0LDYgQEAgUGFzc1JlZlB0cjxT
Y3JvbGxpbmdDb29yZGluYXRvcj4gU2Nyb2xsaQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNYWMocGFnZSkpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDSFJP
TUlVTSkKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW0ocGFnZSkpOwotI2VuZGlmCi0KICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxpbmdDb29yZGluYXRvckNvb3JkaW5hdGVkR3JhcGhp
Y3MocGFnZSkpOwogI2VuZGlmCkBAIC00MTIsNyArNDA0LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6dXBkYXRlTWFpbkZyYQogI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9STShNQUMpIHx8
IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkKKyNpZiBQTEFURk9STShNQUMpCiB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1X
aGVlbEV2ZW50UGhhc2UgcGhhc2UpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaAkocmV2aXNpb24gMTQ3NzMwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEw
Myw3IEBAIHB1YmxpYzoKICAgICAvLyBjb250YWluZXJzIHdoaWxlIHNjcm9sbGluZy4KICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIAotI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBP
UyhEQVJXSU4pKQorI2lmIFBMQVRGT1JNKE1BQykKICAgICAvLyBEaXNwYXRjaGVkIGJ5IHRoZSBz
Y3JvbGxpbmcgdHJlZSBkdXJpbmcgaGFuZGxlV2hlZWxFdmVudC4gVGhpcyBpcyByZXF1aXJlZCBh
cyBsb25nIGFzIHNjcm9sbGJhcnMgYXJlIHBhaW50ZWQgb24gdGhlIG1haW4gdGhyZWFkLgogICAg
IHZvaWQgaGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlKTsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
VHJlZS5jcHAJKHJldmlzaW9uIDE0NzczMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyArMjU4LDcgQEAg
SW50UG9pbnQgU2Nyb2xsaW5nVHJlZTo6bWFpbkZyYW1lU2Nyb2xsUAogICAgIHJldHVybiBtX21h
aW5GcmFtZVNjcm9sbFBvc2l0aW9uOwogfQogCi0jaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZP
Uk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCisjaWYgUExBVEZPUk0oTUFDKQogdm9pZCBTY3Jv
bGxpbmdUcmVlOjpoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2Ug
cGhhc2UpCiB7CiAgICAgaWYgKCFtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAkocmV2aXNpb24gMTQ3
NzMwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZU1h
aW5GcmFtZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgU2V0
T3JTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbiA9IFN5bmNTY3JvbGxpbmdMYXllclBvc2l0aW9u
KTsKICAgICBJbnRQb2ludCBtYWluRnJhbWVTY3JvbGxQb3NpdGlvbigpOwogCi0jaWYgUExBVEZP
Uk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpCisjaWYgUExBVEZP
Uk0oTUFDKQogICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9j
aHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtLmNwcAkocmV2aXNpb24gMTQ3NzMwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oIgotCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0xheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNjcm9sbGJh
clRoZW1lQ29tcG9zaXRlLmgiCi0jaW5jbHVkZSAiV2ViU2Nyb2xsYmFySW1wbC5oIgotI2luY2x1
ZGUgIldlYlNjcm9sbGJhclRoZW1lR2VvbWV0cnlOYXRpdmUuaCIKLSNpbmNsdWRlIDxwdWJsaWMv
UGxhdGZvcm0uaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ29tcG9zaXRvclN1cHBvcnQuaD4KLSNp
bmNsdWRlIDxwdWJsaWMvV2ViTGF5ZXJQb3NpdGlvbkNvbnN0cmFpbnQuaD4KLSNpbmNsdWRlIDxw
dWJsaWMvV2ViU2Nyb2xsYmFyLmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlNjcm9sbGJhckxheWVy
Lmg+Ci0jaW5jbHVkZSA8cHVibGljL1dlYlNjcm9sbGJhclRoZW1lR2VvbWV0cnkuaD4KLSNpbmNs
dWRlIDxwdWJsaWMvV2ViU2Nyb2xsYmFyVGhlbWVQYWludGVyLmg+Ci0KLXVzaW5nIFdlYktpdDo6
V2ViTGF5ZXI7Ci11c2luZyBXZWJLaXQ6OldlYkxheWVyUG9zaXRpb25Db25zdHJhaW50OwotdXNp
bmcgV2ViS2l0OjpXZWJSZWN0OwotdXNpbmcgV2ViS2l0OjpXZWJTY3JvbGxiYXJMYXllcjsKLXVz
aW5nIFdlYktpdDo6V2ViVmVjdG9yOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBX
ZWJMYXllciogc2Nyb2xsaW5nV2ViTGF5ZXJGb3JHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIq
IGxheWVyKQotewotICAgIHJldHVybiBsYXllci0+cGxhdGZvcm1MYXllcigpOwotfQotCi1XZWJM
YXllciogU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2Nyb2xsaW5nV2ViTGF5ZXJGb3JT
Y3JvbGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAgR3Jh
cGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IHNjcm9sbExheWVyRm9yU2Nyb2xsYWJsZUFyZWEo
c2Nyb2xsYWJsZUFyZWEpOwotICAgIHJldHVybiBncmFwaGljc0xheWVyID8gc2Nyb2xsaW5nV2Vi
TGF5ZXJGb3JHcmFwaGljc0xheWVyKGdyYXBoaWNzTGF5ZXIpIDogMDsKLX0KLQotU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bShQYWdlKiBw
YWdlKQotICAgIDogU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZSkKLXsKLX0KLQotU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bTo6flNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0oKQotewot
ICAgIGZvciAoU2Nyb2xsYmFyTWFwOjppdGVyYXRvciBpdCA9IG1faG9yaXpvbnRhbFNjcm9sbGJh
cnMuYmVnaW4oKTsgaXQgIT0gbV9ob3Jpem9udGFsU2Nyb2xsYmFycy5lbmQoKTsgKytpdCkKLSAg
ICAgICAgR3JhcGhpY3NMYXllckNocm9taXVtOjp1bnJlZ2lzdGVyQ29udGVudHNMYXllcihpdC0+
dmFsdWUtPmxheWVyKCkpOwotICAgIGZvciAoU2Nyb2xsYmFyTWFwOjppdGVyYXRvciBpdCA9IG1f
dmVydGljYWxTY3JvbGxiYXJzLmJlZ2luKCk7IGl0ICE9IG1fdmVydGljYWxTY3JvbGxiYXJzLmVu
ZCgpOyArK2l0KQotICAgICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVucmVnaXN0ZXJDb250
ZW50c0xheWVyKGl0LT52YWx1ZS0+bGF5ZXIoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JDaHJvbWl1bTo6ZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcqIGZyYW1lVmll
dykKLXsKLSAgICBBU1NFUlQobV9wYWdlKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBv
ZiB0aGUgcGFnZSB0aGF0IHdlIGNhbid0IGRvIGZhc3Qgc2Nyb2xsaW5nIGZvci4gVGhpcyBjdXJy
ZW50bHkgaW5jbHVkZXMKLSAgICAvLyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJm
cmFtZXMsIG92ZXJmbG93IGRpdnMgYW5kIGxpc3QgYm94ZXMsIHdob3NlIGNvbXBvc2l0ZWQKLSAg
ICAvLyBzY3JvbGxpbmcgYXJlIG5vdCBlbmFibGVkLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBp
ZiB0aGUgZnJhbWUgdmlldyB3aG9zZSBsYXlvdXQgd2FzIHVwZGF0ZWQKLSAgICAvLyBpcyBub3Qg
dGhlIG1haW4gZnJhbWUuCi0gICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29t
cHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50
KCkpOwotICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKTsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCi0gICAgVmVjdG9yPEludFJl
Y3Q+IHRvdWNoRXZlbnRUYXJnZXRSZWN0czsKLSAgICBjb21wdXRlQWJzb2x1dGVUb3VjaEV2ZW50
VGFyZ2V0UmVjdHMobV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSwgdG91Y2hFdmVudFRh
cmdldFJlY3RzKTsKLSAgICBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVjdHModG91Y2hFdmVudFRhcmdl
dFJlY3RzKTsKLSNlbmRpZgotICAgIGlmIChXZWJMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxp
bmdXZWJMYXllckZvclNjcm9sbGFibGVBcmVhKGZyYW1lVmlldykpCi0gICAgICAgIHNjcm9sbExh
eWVyLT5zZXRCb3VuZHMoZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKSk7Ci19Ci0KLXZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6dG91Y2hFdmVudFRhcmdldFJlY3RzRGlkQ2hhbmdl
KGNvbnN0IERvY3VtZW50KikKLXsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRfVFJBQ0tJTkcpCi0g
ICAgLy8gVGhlIHJlY3RzIGFyZSBhbHdheXMgZXZhbHVhdGVkIGFuZCB1c2VkIGluIHRoZSBtYWlu
IGZyYW1lIGNvb3JkaW5hdGVzLgotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9wYWdlLT5t
YWluRnJhbWUoKS0+dmlldygpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fcGFnZS0+bWFp
bkZyYW1lKCktPmRvY3VtZW50KCk7Ci0KLSAgICAvLyBXYWl0IHVudGlsIGFmdGVyIGxheW91dCB0
byB1cGRhdGUuCi0gICAgaWYgKGZyYW1lVmlldy0+bmVlZHNMYXlvdXQoKSB8fCAhZG9jdW1lbnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxJbnRSZWN0PiB0b3VjaEV2ZW50VGFyZ2V0
UmVjdHM7Ci0gICAgY29tcHV0ZUFic29sdXRlVG91Y2hFdmVudFRhcmdldFJlY3RzKGRvY3VtZW50
LCB0b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOwotICAgIHNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyh0
b3VjaEV2ZW50VGFyZ2V0UmVjdHMpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPFdl
YlNjcm9sbGJhckxheWVyPiBjcmVhdGVTY3JvbGxiYXJMYXllcihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKLXsKLSAgICAvLyBBbGwgQ2hyb21pdW0gc2Nyb2xsYmFyIHRoZW1lcyBkZXJpdmUgZnJvbSBT
Y3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS4KLSAgICBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSogdGhl
bWVDb21wb3NpdGUgPSBzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSo+KHNjcm9s
bGJhci0+dGhlbWUoKSk7Ci0gICAgV2ViS2l0OjpXZWJTY3JvbGxiYXJUaGVtZVBhaW50ZXIgcGFp
bnRlcih0aGVtZUNvbXBvc2l0ZSwgc2Nyb2xsYmFyKTsKLSAgICBPd25QdHI8V2ViS2l0OjpXZWJT
Y3JvbGxiYXJUaGVtZUdlb21ldHJ5PiBnZW9tZXRyeShXZWJLaXQ6OldlYlNjcm9sbGJhclRoZW1l
R2VvbWV0cnlOYXRpdmU6OmNyZWF0ZSh0aGVtZUNvbXBvc2l0ZSkpOwotCi0gICAgT3duUHRyPFdl
YlNjcm9sbGJhckxheWVyPiBzY3JvbGxiYXJMYXllciA9IGFkb3B0UHRyKFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+Y29tcG9zaXRvclN1cHBvcnQoKS0+Y3JlYXRlU2Nyb2xsYmFyTGF5ZXIo
bmV3IFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbChzY3JvbGxiYXIpLCBwYWludGVyLCBnZW9tZXRy
eS5sZWFrUHRyKCkpKTsKLSAgICBHcmFwaGljc0xheWVyQ2hyb21pdW06OnJlZ2lzdGVyQ29udGVu
dHNMYXllcihzY3JvbGxiYXJMYXllci0+bGF5ZXIoKSk7Ci0gICAgcmV0dXJuIHNjcm9sbGJhckxh
eWVyLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIHZvaWQgZGV0YWNoU2Nyb2xsYmFyTGF5ZXIoR3Jh
cGhpY3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllcikKLXsKLSAgICBBU1NFUlQoc2Nyb2xs
YmFyR3JhcGhpY3NMYXllcik7Ci0KLSAgICBzY3JvbGxiYXJHcmFwaGljc0xheWVyLT5zZXRDb250
ZW50c1RvUGxhdGZvcm1MYXllcigwKTsKLSAgICBzY3JvbGxiYXJHcmFwaGljc0xheWVyLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwU2Nyb2xsYmFyTGF5ZXIo
R3JhcGhpY3NMYXllciogc2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgV2ViU2Nyb2xsYmFyTGF5ZXIq
IHNjcm9sbGJhckxheWVyLCBXZWJMYXllciogc2Nyb2xsTGF5ZXIpCi17Ci0gICAgQVNTRVJUKHNj
cm9sbGJhckdyYXBoaWNzTGF5ZXIpOwotICAgIEFTU0VSVChzY3JvbGxiYXJMYXllcik7Ci0KLSAg
ICBpZiAoIXNjcm9sbExheWVyKSB7Ci0gICAgICAgIGRldGFjaFNjcm9sbGJhckxheWVyKHNjcm9s
bGJhckdyYXBoaWNzTGF5ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNjcm9sbGJh
ckxheWVyLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7Ci0gICAgc2Nyb2xsYmFyR3JhcGhp
Y3NMYXllci0+c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoc2Nyb2xsYmFyTGF5ZXItPmxheWVy
KCkpOwotICAgIHNjcm9sbGJhckdyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7
Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6d2lsbERlc3Ryb3lTY3Jv
bGxhYmxlQXJlYShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCi17Ci0gICAgcmVtb3Zl
V2ViU2Nyb2xsYmFyTGF5ZXIoc2Nyb2xsYWJsZUFyZWEsIEhvcml6b250YWxTY3JvbGxiYXIpOwot
ICAgIHJlbW92ZVdlYlNjcm9sbGJhckxheWVyKHNjcm9sbGFibGVBcmVhLCBWZXJ0aWNhbFNjcm9s
bGJhcik7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2Nyb2xsYWJs
ZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotI2lmIE9TKERBUldJTikK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBwbGF0Zm9ybVN1cHBvcnRzQ29vcmRpbmF0ZWRTY3JvbGxi
YXIgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBwbGF0Zm9ybVN1cHBvcnRzTWFpbkZy
YW1lT25seSA9IGZhbHNlOyAvLyBEb24ndCBjYXJlLgotI2VsaWYgT1MoV0lORE9XUykKLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBwbGF0Zm9ybVN1cHBvcnRzQ29vcmRpbmF0ZWRTY3JvbGxiYXIgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdCBib29sIHBsYXRmb3JtU3VwcG9ydHNNYWluRnJhbWVPbmx5
ID0gdHJ1ZTsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgcGxhdGZvcm1TdXBwb3J0c0Nv
b3JkaW5hdGVkU2Nyb2xsYmFyID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBwbGF0Zm9y
bVN1cHBvcnRzTWFpbkZyYW1lT25seSA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKCFwbGF0Zm9y
bVN1cHBvcnRzQ29vcmRpbmF0ZWRTY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJv
b2wgaXNNYWluRnJhbWUgPSAoc2Nyb2xsYWJsZUFyZWEgPT0gc3RhdGljX2Nhc3Q8U2Nyb2xsYWJs
ZUFyZWEqPihtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKTsKLSAgICBpZiAoIWlzTWFpbkZy
YW1lICYmIHBsYXRmb3JtU3VwcG9ydHNNYWluRnJhbWVPbmx5KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxiYXJHcmFwaGljc0xheWVyID0gb3JpZW50YXRpb24g
PT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGhvcml6b250YWxTY3JvbGxiYXJMYXllckZvclNjcm9s
bGFibGVBcmVhKHNjcm9sbGFibGVBcmVhKSA6IHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJGb3JTY3Jv
bGxhYmxlQXJlYShzY3JvbGxhYmxlQXJlYSk7Ci0gICAgaWYgKHNjcm9sbGJhckdyYXBoaWNzTGF5
ZXIpIHsKLSAgICAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyID8gc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKSA6
IHNjcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgICAgICBpZiAoc2Nyb2xs
YmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBkZXRhY2hTY3JvbGxiYXJM
YXllcihzY3JvbGxiYXJHcmFwaGljc0xheWVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIFdlYlNjcm9sbGJhckxheWVyKiBzY3JvbGxiYXJMYXllciA9IGdldFdl
YlNjcm9sbGJhckxheWVyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlm
ICghc2Nyb2xsYmFyTGF5ZXIpCi0gICAgICAgICAgICBzY3JvbGxiYXJMYXllciA9IGFkZFdlYlNj
cm9sbGJhckxheWVyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgY3JlYXRlU2Nyb2xsYmFy
TGF5ZXIoc2Nyb2xsYmFyKSk7Ci0KLSAgICAgICAgLy8gUm9vdCBsYXllciBub24tb3ZlcmxheSBz
Y3JvbGxiYXJzIHNob3VsZCBiZSBtYXJrZWQgb3BhcXVlIHRvIGRpc2FibGUKLSAgICAgICAgLy8g
YmxlbmRpbmcuCi0gICAgICAgIGJvb2wgaXNPcGFxdWVTY3JvbGxiYXIgPSAhc2Nyb2xsYmFyLT5p
c092ZXJsYXlTY3JvbGxiYXIoKTsKLSAgICAgICAgaWYgKCFzY3JvbGxiYXJHcmFwaGljc0xheWVy
LT5jb250ZW50c09wYXF1ZSgpKQotICAgICAgICAgICAgc2Nyb2xsYmFyR3JhcGhpY3NMYXllci0+
c2V0Q29udGVudHNPcGFxdWUoaXNNYWluRnJhbWUgJiYgaXNPcGFxdWVTY3JvbGxiYXIpOwotICAg
ICAgICBzY3JvbGxiYXJMYXllci0+bGF5ZXIoKS0+c2V0T3BhcXVlKHNjcm9sbGJhckdyYXBoaWNz
TGF5ZXItPmNvbnRlbnRzT3BhcXVlKCkpOwotCi0gICAgICAgIHNldHVwU2Nyb2xsYmFyTGF5ZXIo
c2Nyb2xsYmFyR3JhcGhpY3NMYXllciwgc2Nyb2xsYmFyTGF5ZXIsIHNjcm9sbGluZ1dlYkxheWVy
Rm9yU2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEpKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
cmVtb3ZlV2ViU2Nyb2xsYmFyTGF5ZXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uKTsKLX0K
LQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbihjb25zdCBSZWdpb24mIHJlZ2lvbikKLXsKLSAgICBpZiAoV2ViTGF5ZXIqIHNjcm9s
bExheWVyID0gc2Nyb2xsaW5nV2ViTGF5ZXJGb3JTY3JvbGxhYmxlQXJlYShtX3BhZ2UtPm1haW5G
cmFtZSgpLT52aWV3KCkpKSB7Ci0gICAgICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0cyA9IHJlZ2lv
bi5yZWN0cygpOwotICAgICAgICBXZWJWZWN0b3I8V2ViUmVjdD4gd2ViUmVjdHMocmVjdHMuc2l6
ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgIHdlYlJlY3RzW2ldID0gcmVjdHNbaV07Ci0gICAgICAgIHNjcm9sbExheWVy
LT5zZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbih3ZWJSZWN0cyk7Ci0gICAgfQotfQotCi12b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFRvdWNoRXZlbnRUYXJnZXRSZWN0cyhj
b25zdCBWZWN0b3I8SW50UmVjdD4mIGFic29sdXRlSGl0VGVzdFJlY3RzKQotewotICAgIGlmIChX
ZWJMYXllciogc2Nyb2xsTGF5ZXIgPSBzY3JvbGxpbmdXZWJMYXllckZvclNjcm9sbGFibGVBcmVh
KG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSkpIHsKLSAgICAgICAgV2ViVmVjdG9yPFdlYlJl
Y3Q+IHdlYlJlY3RzKGFic29sdXRlSGl0VGVzdFJlY3RzLnNpemUoKSk7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYWJzb2x1dGVIaXRUZXN0UmVjdHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICB3ZWJSZWN0c1tpXSA9IGFic29sdXRlSGl0VGVzdFJlY3RzW2ldOwotICAgICAgICBz
Y3JvbGxMYXllci0+c2V0VG91Y2hFdmVudEhhbmRsZXJSZWdpb24od2ViUmVjdHMpOwotICAgIH0K
LX0KLQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtOjpzZXRXaGVlbEV2ZW50SGFu
ZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCi17Ci0gICAgaWYgKFdl
YkxheWVyKiBzY3JvbGxMYXllciA9IHNjcm9sbGluZ1dlYkxheWVyRm9yU2Nyb2xsYWJsZUFyZWEo
bV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpKSkKLSAgICAgICAgc2Nyb2xsTGF5ZXItPnNldEhh
dmVXaGVlbEV2ZW50SGFuZGxlcnMod2hlZWxFdmVudEhhbmRsZXJDb3VudCA+IDApOwotfQotCi12
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldFNob3VsZFVwZGF0ZVNjcm9sbExh
eWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMgcmVhc29u
cykKLXsKLSAgICBpZiAoV2ViTGF5ZXIqIHNjcm9sbExheWVyID0gc2Nyb2xsaW5nV2ViTGF5ZXJG
b3JTY3JvbGxhYmxlQXJlYShtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpKQotICAgICAgICBz
Y3JvbGxMYXllci0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHJlYXNvbnMpOwotfQotCi12
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW06OnNldExheWVySXNDb250YWluZXJGb3JG
aXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBib29sIGVuYWJsZSkKLXsK
LSAgICBpZiAoV2ViTGF5ZXIqIHNjcm9sbGFibGVMYXllciA9IHNjcm9sbGluZ1dlYkxheWVyRm9y
R3JhcGhpY3NMYXllcihsYXllcikpCi0gICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0SXNDb250
YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKGVuYWJsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNs
ZWFyUG9zaXRpb25Db25zdHJhaW50RXhjZXB0Rm9yTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIs
IEdyYXBoaWNzTGF5ZXIqIGV4Y2VwdCkKLXsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXIgIT0gZXhj
ZXB0ICYmIHNjcm9sbGluZ1dlYkxheWVyRm9yR3JhcGhpY3NMYXllcihsYXllcikpCi0gICAgICAg
IHNjcm9sbGluZ1dlYkxheWVyRm9yR3JhcGhpY3NMYXllcihsYXllciktPnNldFBvc2l0aW9uQ29u
c3RyYWludChXZWJMYXllclBvc2l0aW9uQ29uc3RyYWludCgpKTsKLX0KLQotc3RhdGljIFdlYkxh
eWVyUG9zaXRpb25Db25zdHJhaW50IGNvbXB1dGVQb3NpdGlvbkNvbnN0cmFpbnQoY29uc3QgUmVu
ZGVyTGF5ZXIqIGxheWVyKQotewotICAgIEFTU0VSVChsYXllci0+aXNDb21wb3NpdGVkKCkpOwot
ICAgIGRvIHsKLSAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wb3NpdGlv
bigpID09IEZpeGVkUG9zaXRpb24pIHsKLSAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdCog
Zml4ZWRQb3NpdGlvbk9iamVjdCA9IGxheWVyLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgYm9v
bCBmaXhlZFRvUmlnaHQgPSAhZml4ZWRQb3NpdGlvbk9iamVjdC0+c3R5bGUoKS0+cmlnaHQoKS5p
c0F1dG8oKTsKLSAgICAgICAgICAgIGJvb2wgZml4ZWRUb0JvdHRvbSA9ICFmaXhlZFBvc2l0aW9u
T2JqZWN0LT5zdHlsZSgpLT5ib3R0b20oKS5pc0F1dG8oKTsKLSAgICAgICAgICAgIHJldHVybiBX
ZWJMYXllclBvc2l0aW9uQ29uc3RyYWludDo6Zml4ZWRQb3NpdGlvbihmaXhlZFRvUmlnaHQsIGZp
eGVkVG9Cb3R0b20pOwotICAgICAgICB9Ci0KLSAgICAgICAgbGF5ZXIgPSBsYXllci0+cGFyZW50
KCk7Ci0gICAgfSB3aGlsZSAobGF5ZXIgJiYgIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSk7Ci0gICAg
cmV0dXJuIFdlYkxheWVyUG9zaXRpb25Db25zdHJhaW50KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQb3NpdGlvbkNvbnN0cmFpbnQoUmVuZGVy
TGF5ZXIqIGxheWVyKQotewotICAgIEFTU0VSVChsYXllci0+YmFja2luZygpKTsKLSAgICBSZW5k
ZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllci0+YmFja2luZygpOwotICAgIEdyYXBoaWNz
TGF5ZXIqIG1haW5MYXllciA9IGJhY2tpbmctPmNoaWxkRm9yU3VwZXJsYXllcnMoKTsKLQotICAg
IC8vIEF2b2lkIHVubmVjZXNzYXJ5IGNvbW1pdHMKLSAgICBjbGVhclBvc2l0aW9uQ29uc3RyYWlu
dEV4Y2VwdEZvckxheWVyKGJhY2tpbmctPmFuY2VzdG9yQ2xpcHBpbmdMYXllcigpLCBtYWluTGF5
ZXIpOwotICAgIGNsZWFyUG9zaXRpb25Db25zdHJhaW50RXhjZXB0Rm9yTGF5ZXIoYmFja2luZy0+
Y29udGVudHNDb250YWlubWVudExheWVyKCksIG1haW5MYXllcik7Ci0gICAgY2xlYXJQb3NpdGlv
bkNvbnN0cmFpbnRFeGNlcHRGb3JMYXllcihiYWNraW5nLT5ncmFwaGljc0xheWVyKCksIG1haW5M
YXllcik7Ci0KLSAgICBpZiAoV2ViTGF5ZXIqIHNjcm9sbGFibGVMYXllciA9IHNjcm9sbGluZ1dl
YkxheWVyRm9yR3JhcGhpY3NMYXllcihtYWluTGF5ZXIpKQotICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldFBvc2l0aW9uQ29uc3RyYWludChjb21wdXRlUG9zaXRpb25Db25zdHJhaW50KGxheWVy
KSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bTo6c2Nyb2xsYWJsZUFy
ZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCi17
Ci0gICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBzY3JvbGxMYXllciA9IHN0YXRpY19jYXN0PEdy
YXBoaWNzTGF5ZXJDaHJvbWl1bSo+KHNjcm9sbExheWVyRm9yU2Nyb2xsYWJsZUFyZWEoc2Nyb2xs
YWJsZUFyZWEpKTsKLSAgICBpZiAoc2Nyb2xsTGF5ZXIpCi0gICAgICAgIHNjcm9sbExheWVyLT5z
ZXRTY3JvbGxhYmxlQXJlYShzY3JvbGxhYmxlQXJlYSk7Ci0KLSAgICBXZWJMYXllciogd2ViTGF5
ZXIgPSBzY3JvbGxpbmdXZWJMYXllckZvclNjcm9sbGFibGVBcmVhKHNjcm9sbGFibGVBcmVhKTsK
LSAgICBpZiAod2ViTGF5ZXIpIHsKLSAgICAgICAgd2ViTGF5ZXItPnNldFNjcm9sbGFibGUodHJ1
ZSk7Ci0gICAgICAgIHdlYkxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludChzY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSAtIHNjcm9sbGFibGVBcmVhLT5taW5pbXVtU2Nyb2xs
UG9zaXRpb24oKSkpOwotICAgICAgICB3ZWJMYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50
U2l6ZShzY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShIb3Jpem9udGFsU2Nyb2xsYmFyKSwgc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbFNpemUoVmVydGljYWxTY3JvbGxiYXIpKSk7Ci0gICAgfQotICAg
IGlmIChXZWJTY3JvbGxiYXJMYXllciogc2Nyb2xsYmFyTGF5ZXIgPSBnZXRXZWJTY3JvbGxiYXJM
YXllcihzY3JvbGxhYmxlQXJlYSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAgICAgIHNldHVw
U2Nyb2xsYmFyTGF5ZXIoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyRm9yU2Nyb2xsYWJsZUFyZWEo
c2Nyb2xsYWJsZUFyZWEpLCBzY3JvbGxiYXJMYXllciwgd2ViTGF5ZXIpOwotICAgIGlmIChXZWJT
Y3JvbGxiYXJMYXllciogc2Nyb2xsYmFyTGF5ZXIgPSBnZXRXZWJTY3JvbGxiYXJMYXllcihzY3Jv
bGxhYmxlQXJlYSwgVmVydGljYWxTY3JvbGxiYXIpKQotICAgICAgICBzZXR1cFNjcm9sbGJhckxh
eWVyKHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJGb3JTY3JvbGxhYmxlQXJlYShzY3JvbGxhYmxlQXJl
YSksIHNjcm9sbGJhckxheWVyLCB3ZWJMYXllcik7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3JDaHJvbWl1bTo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmll
dyhGcmFtZVZpZXcqIGZyYW1lVmlldykKLXsKLSAgICBVTlVTRURfUEFSQU0oZnJhbWVWaWV3KTsK
LSAgICBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KGNvbXB1dGVDdXJyZW50V2hlZWxFdmVudEhh
bmRsZXJDb3VudCgpKTsKLX0KLQotV2ViU2Nyb2xsYmFyTGF5ZXIqIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yQ2hyb21pdW06OmFkZFdlYlNjcm9sbGJhckxheWVyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFBhc3NPd25QdHI8V2Vi
S2l0OjpXZWJTY3JvbGxiYXJMYXllcj4gc2Nyb2xsYmFyTGF5ZXIpCi17Ci0gICAgU2Nyb2xsYmFy
TWFwJiBzY3JvbGxiYXJzID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1f
aG9yaXpvbnRhbFNjcm9sbGJhcnMgOiBtX3ZlcnRpY2FsU2Nyb2xsYmFyczsKLSAgICByZXR1cm4g
c2Nyb2xsYmFycy5hZGQoc2Nyb2xsYWJsZUFyZWEsIHNjcm9sbGJhckxheWVyKS5pdGVyYXRvci0+
dmFsdWUuZ2V0KCk7Ci19Ci0KLVdlYlNjcm9sbGJhckxheWVyKiBTY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtOjpnZXRXZWJTY3JvbGxiYXJMYXllcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJs
ZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFNjcm9sbGJh
ck1hcCYgc2Nyb2xsYmFycyA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBt
X2hvcml6b250YWxTY3JvbGxiYXJzIDogbV92ZXJ0aWNhbFNjcm9sbGJhcnM7Ci0gICAgcmV0dXJu
IHNjcm9sbGJhcnMuZ2V0KHNjcm9sbGFibGVBcmVhKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvckNocm9taXVtOjpyZW1vdmVXZWJTY3JvbGxiYXJMYXllcihTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAg
IFNjcm9sbGJhck1hcCYgc2Nyb2xsYmFycyA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXJzIDogbV92ZXJ0aWNhbFNjcm9sbGJhcnM7Ci0g
ICAgaWYgKE93blB0cjxXZWJTY3JvbGxiYXJMYXllcj4gc2Nyb2xsYmFyTGF5ZXIgPSBzY3JvbGxi
YXJzLnRha2Uoc2Nyb2xsYWJsZUFyZWEpKQotICAgICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnVucmVnaXN0ZXJDb250ZW50c0xheWVyKHNjcm9sbGJhckxheWVyLT5sYXllcigpKTsKLX0KLQot
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5n
Q29vcmRpbmF0b3JDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uaAkocmV2aXNp
b24gMTQ3NzMwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvY2hyb21pdW0vU2Ny
b2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW1faAot
I2RlZmluZSBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtX2gKLQotI2luY2x1ZGUgIlNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViU2Nyb2xs
YmFyTGF5ZXI7Ci1jbGFzcyBXZWJMYXllcjsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBTY3JvbGxiYXI7Ci0KLWNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0gOiBw
dWJsaWMgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgewotcHVibGljOgotICAgIGV4cGxpY2l0IFNjcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0oUGFnZSopOwotICAgIHZpcnR1YWwgflNjcm9sbGluZ0Nv
b3JkaW5hdG9yQ2hyb21pdW0oKTsKLQotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIg
dGhlIGdpdmVuIGZyYW1lIHZpZXcgaGFzIGJlZW4gbGFpZCBvdXQuCi0gICAgdmlydHVhbCB2b2lk
IGZyYW1lVmlld0xheW91dFVwZGF0ZWQoRnJhbWVWaWV3Kik7Ci0KLSAgICAvLyBSZXR1cm4gd2hl
dGhlciB0aGlzIHNjcm9sbGluZyBjb29yZGluYXRvciBjYW4ga2VlcCBmaXhlZCBwb3NpdGlvbiBs
YXllcnMgZml4ZWQgdG8gdGhlaXIKLSAgICAvLyBjb250YWluZXJzIHdoaWxlIHNjcm9sbGluZy4K
LSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gTWFyay91bm1hcmsgYSBsYXllciBhcyBhIGNvbnRhaW5l
ciBmb3IgZml4ZWQgcG9zaXRpb24gbGF5ZXJzLgotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllcklz
Q29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCk7Ci0K
LSAgICAvLyBBdHRhY2gvZGV0YWNoIGxheWVyIHBvc2l0aW9uIHRvIGFuY2VzdG9yIGZpeGVkIHBv
c2l0aW9uIGNvbnRhaW5lci4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbkNv
bnN0cmFpbnQoUmVuZGVyTGF5ZXIqKTsKLQotICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbiBh
IFNjcm9sbGFibGVBcmVhIGlzIGdldHRpbmcgZGVzdHJveWVkLgotICAgIHZpcnR1YWwgdm9pZCB3
aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKFNjcm9sbGFibGVBcmVhKik7Ci0KLSAgICAvLyBTaG91
bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzY3JvbGxhYmxlIGxheWVyIGZvciB0aGUgZ2l2ZW4g
c2Nyb2xsIGFyZWEgY2hhbmdlcy4KLSAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsYWJsZUFyZWFTY3Jv
bGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSopOwotCi0gICAgLy8gU2hvdWxkIGJlIGNh
bGxlZCB3aGVuZXZlciB0aGUgc2Nyb2xsYmFyIGxheWVyIGZvciB0aGUgZ2l2ZW4gc2Nyb2xsYWJs
ZSBhcmVhIGNoYW5nZXMuCi0gICAgdmlydHVhbCB2b2lkIHNjcm9sbGFibGVBcmVhU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0K
LSAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRvdWNoIGhhbmRsZXJzIGFyZSByZWdp
c3RlcmVkLCByZW1vdmVkLCBvciBtb3ZlZC4KLSAgICB2aXJ0dWFsIHZvaWQgdG91Y2hFdmVudFRh
cmdldFJlY3RzRGlkQ2hhbmdlKGNvbnN0IERvY3VtZW50KikgT1ZFUlJJREU7Ci0KLXByaXZhdGU6
Ci0gICAgdmlydHVhbCB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFt
ZVZpZXcoRnJhbWVWaWV3Kik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9s
bExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpOwot
Ci0gICAgc3RhdGljIFdlYktpdDo6V2ViTGF5ZXIqIHNjcm9sbGluZ1dlYkxheWVyRm9yU2Nyb2xs
YWJsZUFyZWEoU2Nyb2xsYWJsZUFyZWEqKTsKLQotICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24oY29uc3QgUmVnaW9uJik7Ci0gICAgdm9pZCBzZXRUb3VjaEV2ZW50VGFyZ2V0UmVj
dHMoY29uc3QgVmVjdG9yPEludFJlY3Q+Jik7Ci0gICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxl
ckNvdW50KHVuc2lnbmVkKTsKLQotICAgIFdlYktpdDo6V2ViU2Nyb2xsYmFyTGF5ZXIqIGFkZFdl
YlNjcm9sbGJhckxheWVyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFBh
c3NPd25QdHI8V2ViS2l0OjpXZWJTY3JvbGxiYXJMYXllcj4pOwotICAgIFdlYktpdDo6V2ViU2Ny
b2xsYmFyTGF5ZXIqIGdldFdlYlNjcm9sbGJhckxheWVyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xs
YmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgcmVtb3ZlV2ViU2Nyb2xsYmFyTGF5ZXIoU2Nyb2xs
YWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8
U2Nyb2xsYWJsZUFyZWEqLCBPd25QdHI8V2ViS2l0OjpXZWJTY3JvbGxiYXJMYXllcj4gPiBTY3Jv
bGxiYXJNYXA7Ci0gICAgU2Nyb2xsYmFyTWFwIG1faG9yaXpvbnRhbFNjcm9sbGJhcnM7Ci0gICAg
U2Nyb2xsYmFyTWFwIG1fdmVydGljYWxTY3JvbGxiYXJzOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bV9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>