<?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>178570</bug_id>
          
          <creation_ts>2017-10-20 01:33:54 -0700</creation_ts>
          <short_desc>Use auto for some variables in RenderLayerCompositor/Backing</short_desc>
          <delta_ts>2017-11-15 12:59:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1362616</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-10-20 01:33:54 -0700</bug_when>
    <thetext>Use auto for some variables in RenderLayerCompositor/Backing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362617</commentid>
    <comment_count>1</comment_count>
      <attachid>324374</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-10-20 01:34:56 -0700</bug_when>
    <thetext>Created attachment 324374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1364881</commentid>
    <comment_count>2</comment_count>
      <attachid>324374</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-26 10:03:56 -0700</bug_when>
    <thetext>Comment on attachment 324374
Patch

I like this, but I am not always this bold. Some people like auto less than me so I try not to do any wholesale conversion. However, I do approve of doing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365339</commentid>
    <comment_count>3</comment_count>
      <attachid>325154</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-10-27 06:08:09 -0700</bug_when>
    <thetext>Created attachment 325154
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365351</commentid>
    <comment_count>4</comment_count>
      <attachid>325154</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-10-27 07:37:36 -0700</bug_when>
    <thetext>Comment on attachment 325154
Patch for landing

commit queue seems to be broken</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365353</commentid>
    <comment_count>5</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2017-10-27 07:38:48 -0700</bug_when>
    <thetext>Committed r224110: &lt;https://trac.webkit.org/changeset/224110&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372298</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-15 12:59:36 -0800</bug_when>
    <thetext>&lt;rdar://problem/35568559&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324374</attachid>
            <date>2017-10-20 01:34:56 -0700</date>
            <delta_ts>2017-10-27 06:08:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178570-20171020103454.patch</filename>
            <type>text/plain</type>
            <size>73518</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzNzQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFhY2VlOWZlYTIwY2Rm
ZWFiOWExMGRkZTFiYmRhMzQyMTAyZDJhYy4uMzU0MmY3YTYyZGYxMjVlYWE5YTA3ZDI3OWNmMzZh
NjE3NWRjMGFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxNy0xMC0yMCAgRnJl
ZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgVXNlIGF1dG8gZm9yIHNv
bWUgdmFyaWFibGVzIGluIFJlbmRlckxheWVyQ29tcG9zaXRvci9CYWNraW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg1NzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlaGF2
aW9yIHVuY2hhbmdlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OlJlbmRlckxheWVyQmFja2luZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlUGFnZVRpbGVkQmFja2luZ0NvdmVyYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bGF5ZXJXaWxsQmVEZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVCYWNrZHJvcEZpbHRl
cnNHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9y
bWVkT3JVc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQWZ0ZXJXaWRnZXRSZXNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVBZnRlckxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRPZmZzZXRzOjpmcm9tQW5jZXN0b3JHcmFwaGljc0xheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbnRlcm5hbEhp
ZXJhcmNoeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6Omhhc1VucG9zaXRpb25lZE92ZXJmbG93Q29udHJvbHNMYXllcnMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wb3NpdGluZ09wYWNpdHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjppc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlSW1hZ2VDb250
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRz
TmVlZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRD
b250ZW50c05lZWREaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6Z2V0Q3VycmVudFRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OmxvZ0ZpbGxlZFZpc2libGVGcmVzaFRpbGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbXBvc2l0ZWRCb3VuZHNJbmNsdWRpbmdNYXJn
aW4gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1
cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyc0FmdGVyRmx1c2hJbmNsdWRpbmdTdWJmcmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJXaXRoQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkRmx1c2hDaGFuZ2VzRm9y
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRQYWlu
dEJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRD
aGFuZ2VWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmVuY2xvc2luZ0NvbXBvc2l0b3JGbHVzaGluZ0xheWVycyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9jdW1lbnRP
dmVybGF5TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
bG9nTGF5ZXJJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrSWZEZXNjZW5kYW50Q2xpcHBp
bmdDb250ZXh0TmVlZHNVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVDaGFuZ2VSZXF1
aXJlc0xheWVyUmVidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNhbkNvbXBvc2l0ZUNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9y
Q29tcG9zaXRpbmdUZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnVwZGF0ZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpyZXBhaW50T25Db21wb3NpdGluZ0NoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlcGFpbnRJbkNvbXBvc2l0ZWRBbmNlc3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ05vblN0YWNraW5nQ2xp
cHBpbmdMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnNldENvbXBvc2l0aW5nUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxM
YXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
cG9zaXRpb25Gb3JDbGlwTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpmcmFtZVZpZXdEaWRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyb290Rml4ZWRCYWNrZ3JvdW5kc0NoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxpbmdMYXllckRpZENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lQ29udGVu
dHNDb21wb3NpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
cGFyZW50RnJhbWVDb250ZW50TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJUcmVlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0Rlc2NlbmRhbnRHZW9tZXRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldElzSW5XaW5k
b3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjbGVhckJhY2tp
bmdGb3JMYXllckluY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Y2xpcHBlZEJ5QW5jZXN0b3IgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmFja2Zh
Y2VWaXNpYmlsaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQbHVnaW4g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJl
c0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckluZGlyZWN0UmVhc29uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNBc3luY1Nj
cm9sbGFibGVTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzU2Ny
b2xsTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpzdXBwb3J0c0ZpeGVkUm9vdEJhY2tncm91bmRDb21wb3NpdGluZyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZpeGVkUm9vdEJhY2tncm91bmRMYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlc2V0
VHJhY2tlZFJlcGFpbnRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmNvbnRlbnRzU2NhbGVNdWx0aXBsaWVyRm9yTmV3VGlsZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkb2N1bWVudFVzZXNUaWxlZEJhY2tp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzaG91
bGRDb21wb3NpdGVPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JIZWFkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckZvckZvb3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbG93Q29udHJv
bHNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1
cmVSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpk
ZXN0cm95Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6YXR0YWNoUm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6ZGV0YWNoUm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cm9vdExheWVyQXR0YWNobWVudENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpub3RpZnlJRnJhbWVzT2ZDb21wb3NpdGluZ0NoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNvbXB1dGVGaXhlZFZpZXdwb3J0Q29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlU3RpY2t5Vmlld3BvcnRDb25zdHJh
aW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdTY3JvbGxpbmdOb2RlSUQp
OgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsQ29vcmRpbmF0ZWRBbmNlc3RvckluUGFyZW50T2ZG
cmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYXR0YWNo
U3ViZnJhbWVTY3JvbGxMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjphdHRhY2hTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGlvbkZv
clRoaXNGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1bnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0
aEJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRB
ZGRTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnVwZGF0ZVNjcm9sbFNuYXBQcm9wZXJ0aWVzV2l0aEZyYW1lVmlldyk6CisKIDIwMTctMTAt
MjAgIEZyZWRlcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjogTW92ZSBpbXBsZW1lbnRhdGlvbiBvZiBzaW1wbGUgbWV0aG9kcyBpbnRv
IHRoZSBoZWFkZXIgZmlsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKaW5kZXggYTU5MGYyMzg2NmE5ODI3YTdlNmM4Y2RiNWRjNGMzMGFjYzJh
MTZlNC4uMzE4YjczMzRhYWQ2NjE0OTkyZmFiZjEyMzlkOWUwZjFjN2Q1ODUxNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTc5LDcg
Kzc5LDcgQEAgQ2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSBjYW52YXNDb21wb3NpdGluZ1N0cmF0
ZWd5KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIKICAgICBBU1NFUlQocmVuZGVyZXIuaXND
YW52YXMoKSk7CiAgICAgCiAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRv
d25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5ub2RlKCkpOwotICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAg
ICBhdXRvKiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFj
b250ZXh0IHx8ICFjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiBVbmFj
Y2VsZXJhdGVkQ2FudmFzOwogICAgIApAQCAtMjE1LDcgKzIxNSw3IEBAIFJlbmRlckxheWVyQmFj
a2luZzo6UmVuZGVyTGF5ZXJCYWNraW5nKFJlbmRlckxheWVyJiBsYXllcikKICAgICAKICAgICBj
cmVhdGVQcmltYXJ5R3JhcGhpY3NMYXllcigpOwogCi0gICAgaWYgKFRpbGVkQmFja2luZyogdGls
ZWRCYWNraW5nID0gdGhpcy0+dGlsZWRCYWNraW5nKCkpIHsKKyAgICBpZiAoYXV0byogdGlsZWRC
YWNraW5nID0gdGhpcy0+dGlsZWRCYWNraW5nKCkpIHsKICAgICAgICAgdGlsZWRCYWNraW5nLT5z
ZXRJc0luV2luZG93KHJlbmRlcmVyKCkucGFnZSgpLmlzSW5XaW5kb3coKSk7CiAKICAgICAgICAg
aWYgKG1faXNGcmFtZUxheWVyV2l0aFRpbGVkQmFja2luZykgewpAQCAtMzAwLDcgKzMwMCw3IEBA
IFRpbGVkQmFja2luZyogUmVuZGVyTGF5ZXJCYWNraW5nOjp0aWxlZEJhY2tpbmcoKSBjb25zdAog
c3RhdGljIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIGNvbXB1dGVQYWdlVGlsZWRCYWNraW5n
Q292ZXJhZ2UoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nKQogewogICAgIC8vIEZJWE1FOiBX
aGVuIHdlIHVzZSBUaWxlZEJhY2tpbmcgZm9yIG92ZXJmbG93LCB0aGlzIHNob3VsZCBsb29rIGF0
IFJlbmRlclZpZXcgc2Nyb2xsYWJpbGl0eS4KLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IGJh
Y2tpbmctPm93bmluZ0xheWVyKCkucmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisgICAg
YXV0byYgZnJhbWVWaWV3ID0gYmFja2luZy0+b3duaW5nTGF5ZXIoKS5yZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKTsKIAogICAgIC8vIElmIHRoZSBwYWdlIGlzIG5vbi12aXNpYmxlLCBkb24n
dCBpbmN1ciB0aGUgY29zdCBvZiBrZWVwaW5nIGV4dHJhIHRpbGVzIGZvciBzY3JvbGxpbmcuCiAg
ICAgaWYgKCFiYWNraW5nLT5vd25pbmdMYXllcigpLnBhZ2UoKS5pc1Zpc2libGUoKSkKQEAgLTQy
Niw5ICs0MjYsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6Y3JlYXRlUHJpbWFyeUdyYXBo
aWNzTGF5ZXIoKQogI2lmIFBMQVRGT1JNKElPUykKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjps
YXllcldpbGxCZURlc3Ryb3llZCgpCiB7Ci0gICAgUmVuZGVyT2JqZWN0JiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCk7CisgICAgYXV0byYgcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOwog
ICAgIGlmIChpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpICYmIGRvd25jYXN0PFJl
bmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcikuYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpKSB7Ci0gICAgICAgIFBsdWdpblZpZXdCYXNlKiBwbHVnaW5WaWV3QmFzZSA9IGRvd25jYXN0
PFBsdWdpblZpZXdCYXNlPihkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKS53aWRnZXQo
KSk7CisgICAgICAgIGF1dG8qIHBsdWdpblZpZXdCYXNlID0gZG93bmNhc3Q8UGx1Z2luVmlld0Jh
c2U+KGRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVuZGVyZXIpLndpZGdldCgpKTsKICAgICAgICAg
aWYgKHBsdWdpblZpZXdCYXNlICYmIG1fZ3JhcGhpY3NMYXllci0+Y29udGVudHNMYXllckZvck1l
ZGlhKCkpCiAgICAgICAgICAgICBwbHVnaW5WaWV3QmFzZS0+ZGV0YWNoUGx1Z2luTGF5ZXIoKTsK
ICAgICB9CkBAIC01MDgsNyArNTA4LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZUJhY2tkcm9wRmlsdGVyc0dlb21ldHJ5KCkKICAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckJveCYgcmVuZGVyZXIgPSBkb3du
Y2FzdDxSZW5kZXJCb3g+KHRoaXMtPnJlbmRlcmVyKCkpOworICAgIGF1dG8mIHJlbmRlcmVyID0g
ZG93bmNhc3Q8UmVuZGVyQm94Pih0aGlzLT5yZW5kZXJlcigpKTsKICAgICBMYXlvdXRSZWN0IGJv
eFJlY3QgPSByZW5kZXJlci5ib3JkZXJCb3hSZWN0KCk7CiAgICAgaWYgKHJlbmRlcmVyLmhhc0Ns
aXAoKSkKICAgICAgICAgYm94UmVjdC5pbnRlcnNlY3QocmVuZGVyZXIuY2xpcFJlY3QoTGF5b3V0
UG9pbnQoKSwgbnVsbHB0cikpOwpAQCAtNTQ5LDcgKzU0OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVDdXN0b21BcHBlYXJhbmNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
IAogc3RhdGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21wb3Np
dGVkU2Nyb2xsaW5nKFJlbmRlckxheWVyJiBsYXllcikKIHsKLSAgICBmb3IgKFJlbmRlckxheWVy
KiBjdXJyID0gJmxheWVyOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKKyAgICBmb3Ig
KGF1dG8qIGN1cnIgPSAmbGF5ZXI7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewogICAg
ICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwgY3Vyci0+dXNlc0FjY2VsZXJhdGVkU2Ny
b2xsaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC01ODgsOCArNTg4
LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKQog
ICAgIC8vIElmIHRoaXMgb3IgYW4gYW5jZXN0b3IgaXMgdHJhbnNmb3JtZWQsIHdlIGNhbid0IGN1
cnJlbnRseSBjb21wdXRlIHRoZSBjb3JyZWN0IHJlY3QgdG8gaW50ZXJzZWN0IHdpdGguCiAgICAg
Ly8gV2UnZCBuZWVkIFJlbmRlck9iamVjdDo6Y29udmVydENvbnRhaW5lclRvTG9jYWxRdWFkKCks
IHdoaWNoIGRvZXNuJ3QgeWV0IGV4aXN0LgogICAgIGlmIChzaG91bGRDbGlwQ29tcG9zaXRlZEJv
dW5kcygpKSB7Ci0gICAgICAgIFJlbmRlclZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsK
LSAgICAgICAgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciA9IHZpZXcubGF5ZXIoKTsKKyAgICAgICAg
YXV0byYgdmlldyA9IHJlbmRlcmVyKCkudmlldygpOworICAgICAgICBhdXRvKiByb290TGF5ZXIg
PSB2aWV3LmxheWVyKCk7CiAKICAgICAgICAgTGF5b3V0UmVjdCBjbGlwcGluZ0JvdW5kczsKICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24g
JiYgcmVuZGVyZXIoKS5jb250YWluZXIoKSA9PSAmdmlldykKQEAgLTYyMyw3ICs2MjMsNyBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQWZ0ZXJXaWRnZXRSZXNpemUoKQogewogICAg
IGlmICghaXM8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGlmIChSZW5kZXJMYXllckNvbXBvc2l0b3IqIGlubmVyQ29tcG9zaXRvciA9IFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZnJhbWVDb250ZW50c0NvbXBvc2l0b3IoJmRvd25jYXN0PFJlbmRlcldpZGdl
dD4ocmVuZGVyZXIoKSkpKSB7CisgICAgaWYgKGF1dG8qIGlubmVyQ29tcG9zaXRvciA9IFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVDb250ZW50c0NvbXBvc2l0b3IoJmRvd25jYXN0PFJlbmRl
cldpZGdldD4ocmVuZGVyZXIoKSkpKSB7CiAgICAgICAgIGlubmVyQ29tcG9zaXRvci0+ZnJhbWVW
aWV3RGlkQ2hhbmdlU2l6ZSgpOwogICAgICAgICBpbm5lckNvbXBvc2l0b3ItPmZyYW1lVmlld0Rp
ZENoYW5nZUxvY2F0aW9uKGZsb29yZWRJbnRQb2ludChjb250ZW50c0JveCgpLmxvY2F0aW9uKCkp
KTsKICAgICB9CkBAIC02NDcsNyArNjQ3LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUFmdGVyTGF5b3V0KFVwZGF0ZUFmdGVyTGF5b3V0RmxhZ3MgZmxhZ3MpCiAgICAgICAgIGlm
IChmbGFncyAmIElzVXBkYXRlUm9vdCkgewogICAgICAgICAgICAgdXBkYXRlR2VvbWV0cnkoKTsK
ICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVSb290TGF5ZXJQb3NpdGlvbigpOwotICAg
ICAgICAgICAgUmVuZGVyTGF5ZXIqIHN0YWNraW5nQ29udGFpbmVyID0gbV9vd25pbmdMYXllci5l
bmNsb3NpbmdTdGFja2luZ0NvbnRhaW5lcigpOworICAgICAgICAgICAgYXV0byogc3RhY2tpbmdD
b250YWluZXIgPSBtX293bmluZ0xheWVyLmVuY2xvc2luZ1N0YWNraW5nQ29udGFpbmVyKCk7CiAg
ICAgICAgICAgICBpZiAoIWNvbXBvc2l0b3IoKS5jb21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxk
KCkgJiYgc3RhY2tpbmdDb250YWluZXIgJiYgKHN0YWNraW5nQ29udGFpbmVyICE9ICZtX293bmlu
Z0xheWVyKSkKICAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdE
ZXNjZW5kYW50R2VvbWV0cnkoKnN0YWNraW5nQ29udGFpbmVyLCAqc3RhY2tpbmdDb250YWluZXIs
IGZsYWdzICYgQ29tcG9zaXRpbmdDaGlsZHJlbk9ubHkpOwogICAgICAgICB9CkBAIC02OTcsNyAr
Njk3LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24oKQog
ICAgIGlmIChsYXllckNvbmZpZ0NoYW5nZWQpCiAgICAgICAgIHVwZGF0ZUludGVybmFsSGllcmFy
Y2h5KCk7CiAKLSAgICBpZiAoR3JhcGhpY3NMYXllciogZmxhdHRlbmluZ0xheWVyID0gdGlsZUNh
Y2hlRmxhdHRlbmluZ0xheWVyKCkpIHsKKyAgICBpZiAoYXV0byogZmxhdHRlbmluZ0xheWVyID0g
dGlsZUNhY2hlRmxhdHRlbmluZ0xheWVyKCkpIHsKICAgICAgICAgaWYgKGxheWVyQ29uZmlnQ2hh
bmdlZCB8fCBmbGF0dGVuaW5nTGF5ZXItPnBhcmVudCgpICE9IG1fZ3JhcGhpY3NMYXllci5nZXQo
KSkKICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+YWRkQ2hpbGQoZmxhdHRlbmluZ0xheWVy
KTsKICAgICB9CkBAIC03MDgsNyArNzA4LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUNvbmZpZ3VyYXRpb24oKQogCiAgICAgaWYgKG1fb3duaW5nTGF5ZXIuaGFzUmVmbGVjdGlv
bigpKSB7CiAgICAgICAgIGlmIChtX293bmluZ0xheWVyLnJlZmxlY3Rpb25MYXllcigpLT5iYWNr
aW5nKCkpIHsKLSAgICAgICAgICAgIEdyYXBoaWNzTGF5ZXIqIHJlZmxlY3Rpb25MYXllciA9IG1f
b3duaW5nTGF5ZXIucmVmbGVjdGlvbkxheWVyKCktPmJhY2tpbmcoKS0+Z3JhcGhpY3NMYXllcigp
OworICAgICAgICAgICAgYXV0byogcmVmbGVjdGlvbkxheWVyID0gbV9vd25pbmdMYXllci5yZWZs
ZWN0aW9uTGF5ZXIoKS0+YmFja2luZygpLT5ncmFwaGljc0xheWVyKCk7CiAgICAgICAgICAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKHJlZmxlY3Rpb25MYXllcik7CiAg
ICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTcyNiw3ICs3MjYsNyBAQCBib29sIFJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbigpCiAgICAgICAgIHVwZGF0ZUltYWdlQ29udGVu
dHMoY29udGVudHNJbmZvKTsKIAogICAgIGlmIChpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVu
ZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKCkpLmFs
bG93c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBQbHVnaW5WaWV3QmFzZSog
cGx1Z2luVmlld0Jhc2UgPSBkb3duY2FzdDxQbHVnaW5WaWV3QmFzZT4oZG93bmNhc3Q8UmVuZGVy
V2lkZ2V0PihyZW5kZXJlcigpKS53aWRnZXQoKSk7CisgICAgICAgIGF1dG8qIHBsdWdpblZpZXdC
YXNlID0gZG93bmNhc3Q8UGx1Z2luVmlld0Jhc2U+KGRvd25jYXN0PFJlbmRlcldpZGdldD4ocmVu
ZGVyZXIoKSkud2lkZ2V0KCkpOwogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgaWYgKHBsdWdp
blZpZXdCYXNlICYmICFtX2dyYXBoaWNzTGF5ZXItPmNvbnRlbnRzTGF5ZXJGb3JNZWRpYSgpKSB7
CiAgICAgICAgICAgICBwbHVnaW5WaWV3QmFzZS0+ZGV0YWNoUGx1Z2luTGF5ZXIoKTsKQEAgLTcz
OSwxNCArNzM5LDE0IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0
aW9uKCkKICAgICB9CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGVsc2UgaWYgKGlzPFJlbmRlclZp
ZGVvPihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJWaWRlbz4ocmVuZGVyZXIoKSkuc2hv
dWxkRGlzcGxheVZpZGVvKCkpIHsKLSAgICAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwor
ICAgICAgICBhdXRvKiBtZWRpYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50Pihy
ZW5kZXJlcigpLmVsZW1lbnQoKSk7CiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVu
dHNUb1BsYXRmb3JtTGF5ZXIobWVkaWFFbGVtZW50LT5wbGF0Zm9ybUxheWVyKCksIEdyYXBoaWNz
TGF5ZXI6OkNvbnRlbnRzTGF5ZXJGb3JNZWRpYSk7CiAgICAgfQogI2VuZGlmCiAjaWYgRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJl
bmRlcmVyKCkuaXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVy
KCkpID09IENhbnZhc0FzTGF5ZXJDb250ZW50cykgewogICAgICAgICBjb25zdCBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCku
ZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQg
PSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAgaWYgKGF1dG8qIGNvbnRleHQg
PSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoY29udGV4dC0+cGxhdGZvcm1MYXllcigpLCBH
cmFwaGljc0xheWVyOjpDb250ZW50c0xheWVyRm9yQ2FudmFzKTsKICAgICAgICAgbGF5ZXJDb25m
aWdDaGFuZ2VkID0gdHJ1ZTsKICAgICB9CkBAIC04NTYsNyArODU2LDcgQEAgcHJpdmF0ZToKICAg
ICBMYXlvdXRTaXplIGZyb21BbmNlc3RvckdyYXBoaWNzTGF5ZXIoKQogICAgIHsKICAgICAgICAg
aWYgKCFtX2Zyb21BbmNlc3RvckdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgICAgIFJlbmRlckxh
eWVyKiBjb21wb3NpdGVkQW5jZXN0b3IgPSBtX3JlbmRlckxheWVyLmFuY2VzdG9yQ29tcG9zaXRp
bmdMYXllcigpOworICAgICAgICAgICAgYXV0byogY29tcG9zaXRlZEFuY2VzdG9yID0gbV9yZW5k
ZXJMYXllci5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIoKTsKICAgICAgICAgICAgIExheW91dFBv
aW50IGxvY2FsUG9pbnRJbkFuY2VzdG9yUmVuZGVyTGF5ZXJDb29yZHMgPSBtX3JlbmRlckxheWVy
LmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbXBvc2l0ZWRBbmNlc3RvciwgbV9sb2NhdGlvbiwgUmVu
ZGVyTGF5ZXI6OkFkanVzdEZvckNvbHVtbnMpOwogICAgICAgICAgICAgbV9mcm9tQW5jZXN0b3JH
cmFwaGljc0xheWVyID0gY29tcHV0ZU9mZnNldEZyb21BbmNlc3RvckdyYXBoaWNzTGF5ZXIoY29t
cG9zaXRlZEFuY2VzdG9yLCBsb2NhbFBvaW50SW5BbmNlc3RvclJlbmRlckxheWVyQ29vcmRzLCBt
X2RldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAgfQpAQCAtOTcyLDcgKzk3Miw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSgpCiAgICAgbV9ncmFwaGljc0xheWVy
LT5zZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCk7CiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRC
YWNrZmFjZVZpc2liaWxpdHkoc3R5bGUuYmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VW
aXNpYmlsaXR5VmlzaWJsZSk7CiAKLSAgICBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9y
ID0gbV9vd25pbmdMYXllci5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIoKTsKKyAgICBhdXRvKiBj
b21wb3NpdGVkQW5jZXN0b3IgPSBtX293bmluZ0xheWVyLmFuY2VzdG9yQ29tcG9zaXRpbmdMYXll
cigpOwogICAgIExheW91dFNpemUgYW5jZXN0b3JDbGlwcGluZ0xheWVyT2Zmc2V0OwogICAgIExh
eW91dFJlY3QgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBjb21wdXRlUGFyZW50R3JhcGhpY3NM
YXllclJlY3QoY29tcG9zaXRlZEFuY2VzdG9yLCBhbmNlc3RvckNsaXBwaW5nTGF5ZXJPZmZzZXQp
OwogICAgIExheW91dFJlY3QgcHJpbWFyeUdyYXBoaWNzTGF5ZXJSZWN0ID0gY29tcHV0ZVByaW1h
cnlHcmFwaGljc0xheWVyUmVjdChwYXJlbnRHcmFwaGljc0xheWVyUmVjdCk7CkBAIC0xMDI4LDcg
KzEwMjgsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoKQogCiAg
ICAgLy8gSWYgd2UgaGF2ZSBhIGxheWVyIHRoYXQgY2xpcHMgY2hpbGRyZW4sIHBvc2l0aW9uIGl0
LgogICAgIExheW91dFJlY3QgY2xpcHBpbmdCb3g7Ci0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGNs
aXBMYXllciA9IGNsaXBwaW5nTGF5ZXIoKSkgeworICAgIGlmIChhdXRvKiBjbGlwTGF5ZXIgPSBj
bGlwcGluZ0xheWVyKCkpIHsKICAgICAgICAgY2xpcHBpbmdCb3ggPSBjbGlwQm94KGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwogICAgICAgICAvLyBDbGlwcGluZyBsYXllciBpcyBw
YXJlbnRlZCBpbiB0aGUgcHJpbWFyeSBncmFwaGljcyBsYXllci4KICAgICAgICAgTGF5b3V0U2l6
ZSBjbGlwQm94T2Zmc2V0RnJvbUdyYXBoaWNzTGF5ZXIgPSB0b0xheW91dFNpemUoY2xpcHBpbmdC
b3gubG9jYXRpb24oKSkgKyByZW5kZXJlck9mZnNldC5mcm9tUHJpbWFyeUdyYXBoaWNzTGF5ZXIo
KTsKQEAgLTEwNjIsNyArMTA2Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVH
ZW9tZXRyeSgpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0
QW5jaG9yUG9pbnQoYW5jaG9yKTsKIAotICAgICAgICBHcmFwaGljc0xheWVyKiBjbGlwTGF5ZXIg
PSBjbGlwcGluZ0xheWVyKCk7CisgICAgICAgIGF1dG8qIGNsaXBMYXllciA9IGNsaXBwaW5nTGF5
ZXIoKTsKICAgICAgICAgaWYgKHN0eWxlLmhhc1BlcnNwZWN0aXZlKCkpIHsKICAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHQgPSBvd25pbmdMYXllcigpLnBlcnNwZWN0aXZlVHJhbnNm
b3JtKCk7CiAgICAgICAgICAgICAKQEAgLTExMTQsNyArMTExNCw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSgpCiAgICAgfQogCiAgICAgaWYgKG1fb3duaW5nTGF5
ZXIucmVmbGVjdGlvbkxheWVyKCkgJiYgbV9vd25pbmdMYXllci5yZWZsZWN0aW9uTGF5ZXIoKS0+
aXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiByZWZsZWN0aW9u
QmFja2luZyA9IG1fb3duaW5nTGF5ZXIucmVmbGVjdGlvbkxheWVyKCktPmJhY2tpbmcoKTsKKyAg
ICAgICAgYXV0byogcmVmbGVjdGlvbkJhY2tpbmcgPSBtX293bmluZ0xheWVyLnJlZmxlY3Rpb25M
YXllcigpLT5iYWNraW5nKCk7CiAgICAgICAgIHJlZmxlY3Rpb25CYWNraW5nLT51cGRhdGVHZW9t
ZXRyeSgpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlIHJlZmxlY3Rpb24gbGF5ZXIgaGFzIHRo
ZSBib3VuZHMgb2YgbV9vd25pbmdMYXllci5yZWZsZWN0aW9uTGF5ZXIoKSwKQEAgLTEyOTcsNyAr
MTI5Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbnRlcm5hbEhpZXJhcmNo
eSgpCiAgICAgfQogCiAgICAgaWYgKG1fc2Nyb2xsaW5nTGF5ZXIpIHsKLSAgICAgICAgR3JhcGhp
Y3NMYXllciogc3VwZXJsYXllciA9IG1fY2hpbGRDb250YWlubWVudExheWVyID8gbV9jaGlsZENv
bnRhaW5tZW50TGF5ZXIuZ2V0KCkgOiBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCk7CisgICAgICAgIGF1
dG8qIHN1cGVybGF5ZXIgPSBtX2NoaWxkQ29udGFpbm1lbnRMYXllciA/IG1fY2hpbGRDb250YWlu
bWVudExheWVyLmdldCgpIDogbV9ncmFwaGljc0xheWVyLmdldCgpOwogICAgICAgICBtX3Njcm9s
bGluZ0xheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgICAgIHN1cGVybGF5ZXItPmFkZENo
aWxkKG1fc2Nyb2xsaW5nTGF5ZXIuZ2V0KCkpOwogICAgIH0KQEAgLTE1MDMsNyArMTUwMyw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMo
KQogICAgIGNvbnN0IEludFJlY3QgYm9yZGVyQm94ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94
KCktPmJvcmRlckJveFJlY3QoKSk7CiAKICAgICBGbG9hdFNpemUgb2Zmc2V0RnJvbVJlbmRlcmVy
ID0gbV9ncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKLSAgICBpZiAoR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgIGlm
IChhdXRvKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAg
IEludFJlY3QgaEJhclJlY3QgPSBtX293bmluZ0xheWVyLnJlY3RGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKGJvcmRlckJveCk7CiAgICAgICAgIGxheWVyLT5zZXRQb3NpdGlvbihoQmFyUmVjdC5sb2Nh
dGlvbigpIC0gb2Zmc2V0RnJvbVJlbmRlcmVyKTsKICAgICAgICAgbGF5ZXItPnNldFNpemUoaEJh
clJlY3Quc2l6ZSgpKTsKQEAgLTE1MTUsNyArMTUxNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMoKQogICAgICAgICBsYXllci0+c2V0
RHJhd3NDb250ZW50KG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXll
ci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogICAgIAotICAgIGlmIChHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgIGlmIChhdXRv
KiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICBJbnRSZWN0
IHZCYXJSZWN0ID0gbV9vd25pbmdMYXllci5yZWN0Rm9yVmVydGljYWxTY3JvbGxiYXIoYm9yZGVy
Qm94KTsKICAgICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKHZCYXJSZWN0LmxvY2F0aW9uKCkgLSBv
ZmZzZXRGcm9tUmVuZGVyZXIpOwogICAgICAgICBsYXllci0+c2V0U2l6ZSh2QmFyUmVjdC5zaXpl
KCkpOwpAQCAtMTUyNyw3ICsxNTI3LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0
aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRl
bnQobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRl
bnRzTGF5ZXIoKSk7CiAgICAgfQogCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJGb3JTY3JvbGxDb3JuZXIoKSkgeworICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yU2Ny
b2xsQ29ybmVyKCkpIHsKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgc2Nyb2xsQ29ybmVyQW5k
UmVzaXplciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsQ29ybmVyQW5kUmVzaXplclJlY3QoKTsKICAg
ICAgICAgbGF5ZXItPnNldFBvc2l0aW9uKHNjcm9sbENvcm5lckFuZFJlc2l6ZXIubG9jYXRpb24o
KSAtIG9mZnNldEZyb21SZW5kZXJlcik7CiAgICAgICAgIGxheWVyLT5zZXRTaXplKHNjcm9sbENv
cm5lckFuZFJlc2l6ZXIuc2l6ZSgpKTsKQEAgLTE1MzcsMTcgKzE1MzcsMjAgQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAKIGJvb2wg
UmVuZGVyTGF5ZXJCYWNraW5nOjpoYXNVbnBvc2l0aW9uZWRPdmVyZmxvd0NvbnRyb2xzTGF5ZXJz
KCkgY29uc3QKIHsKLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSkKKyAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvckhvcml6b250
YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICBpZiAoYXV0byogbGF5ZXIg
PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgaWYgKCFsYXllci0+ZHJh
d3NDb250ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKLSAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKQorICAgIGlmIChh
dXRvKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKICAgICAgICAgaWYgKCFsYXll
ci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNzgxLDcgKzE3ODQsNyBAQCBmbG9hdCBSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXBvc2l0aW5nT3BhY2l0eShmbG9hdCByZW5kZXJlck9wYWNpdHkpIGNvbnN0
CiB7CiAgICAgZmxvYXQgZmluYWxPcGFjaXR5ID0gcmVuZGVyZXJPcGFjaXR5OwogICAgIAotICAg
IGZvciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSBtX293bmluZ0xheWVyLnBhcmVudCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+cGFyZW50KCkpIHsKKyAgICBmb3IgKGF1dG8qIGN1cnIgPSBtX293bmluZ0xh
eWVyLnBhcmVudCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50KCkpIHsKICAgICAgICAgLy8g
V2Ugb25seSBjYXJlIGFib3V0IHBhcmVudHMgdGhhdCBhcmUgc3RhY2tpbmcgY29udGV4dHMuCiAg
ICAgICAgIC8vIFJlY2FsbCB0aGF0IG9wYWNpdHkgY3JlYXRlcyBzdGFja2luZyBjb250ZXh0Lgog
ICAgICAgICBpZiAoIWN1cnItPmlzU3RhY2tpbmdDb250YWluZXIoKSkKQEAgLTE5OTUsNyArMTk5
OCw3IEBAIHN0YXRpYyBib29sIGlzUmVzdGFydGVkUGx1Z2luKFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIpCiAgICAgaWYgKCFpczxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQmIGVsZW1lbnQgPSBk
b3duY2FzdDxSZW5kZXJFbWJlZGRlZE9iamVjdD4ocmVuZGVyZXIpLmZyYW1lT3duZXJFbGVtZW50
KCk7CisgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0Pihy
ZW5kZXJlcikuZnJhbWVPd25lckVsZW1lbnQoKTsKICAgICBpZiAoIWlzPEhUTUxQbHVnSW5FbGVt
ZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMTcwLDExICsyMTcz
LDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjppc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdl
KCkgY29uc3QKICNlbmRpZgogCiAgICAgYXV0byYgaW1hZ2VSZW5kZXJlciA9IGRvd25jYXN0PFJl
bmRlckltYWdlPihyZW5kZXJlcigpKTsKLSAgICBpZiAoQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdl
ID0gaW1hZ2VSZW5kZXJlci5jYWNoZWRJbWFnZSgpKSB7CisgICAgaWYgKGF1dG8qIGNhY2hlZElt
YWdlID0gaW1hZ2VSZW5kZXJlci5jYWNoZWRJbWFnZSgpKSB7CiAgICAgICAgIGlmICghY2FjaGVk
SW1hZ2UtPmhhc0ltYWdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
SW1hZ2UqIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoJmltYWdlUmVuZGVy
ZXIpOworICAgICAgICBhdXRvKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVy
KCZpbWFnZVJlbmRlcmVyKTsKICAgICAgICAgaWYgKCFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMjI0LDExICsyMjI3LDExIEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbWFnZUNvbnRlbnRzKFBhaW50ZWRDb250ZW50c0lu
Zm8mIGNvbnRlbnRzSW5mbykKIHsKICAgICBhdXRvJiBpbWFnZVJlbmRlcmVyID0gZG93bmNhc3Q8
UmVuZGVySW1hZ2U+KHJlbmRlcmVyKCkpOwogCi0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdl
ID0gaW1hZ2VSZW5kZXJlci5jYWNoZWRJbWFnZSgpOworICAgIGF1dG8qIGNhY2hlZEltYWdlID0g
aW1hZ2VSZW5kZXJlci5jYWNoZWRJbWFnZSgpOwogICAgIGlmICghY2FjaGVkSW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJl
bmRlcmVyKCZpbWFnZVJlbmRlcmVyKTsKKyAgICBhdXRvKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5p
bWFnZUZvclJlbmRlcmVyKCZpbWFnZVJlbmRlcmVyKTsKICAgICBpZiAoIWltYWdlKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTIzODEsNyArMjM4NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzZXRDb250ZW50c05lZWREaXNwbGF5KEdyYXBoaWNzTGF5ZXI6OlNob3VsZENsaXBUb0xheWVy
CiB7CiAgICAgQVNTRVJUKCFwYWludHNJbnRvQ29tcG9zaXRlZEFuY2VzdG9yKCkpOwogCi0gICAg
RnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKKyAg
ICBhdXRvJiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICBp
ZiAobV9pc01haW5GcmFtZVJlbmRlclZpZXdMYXllciAmJiBmcmFtZVZpZXcuaXNUcmFja2luZ1Jl
cGFpbnRzKCkpCiAgICAgICAgIGZyYW1lVmlldy5hZGRUcmFja2VkUmVwYWludFJlY3Qob3duaW5n
TGF5ZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94Rm9yUGFpbnRpbmcoKSk7CiAgICAgCkBAIC0yMzg5
LDcgKzIzOTIsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlz
cGxheShHcmFwaGljc0xheWVyOjpTaG91bGRDbGlwVG9MYXllcgogICAgICAgICAvLyBCeSBkZWZh
dWx0LCBzZXROZWVkc0Rpc3BsYXkgd2lsbCBjbGlwIHRvIHRoZSBzaXplIG9mIHRoZSBHcmFwaGlj
c0xheWVyLCB3aGljaCBkb2VzIG5vdCBpbmNsdWRlIG1hcmdpbiB0aWxlcy4KICAgICAgICAgLy8g
U28gaWYgdGhlIFRpbGVkQmFja2luZyBoYXMgYSBtYXJnaW4gdGhhdCBuZWVkcyB0byBiZSBpbnZh
bGlkYXRlZCwgd2UgbmVlZCB0byBzZW5kIGluIGEgcmVjdCB0byBzZXROZWVkc0Rpc3BsYXlJblJl
Y3QKICAgICAgICAgLy8gdGhhdCBpcyBsYXJnZSBlbm91Z2ggdG8gaW5jbHVkZSB0aGUgbWFyZ2lu
LiBUaWxlZEJhY2tpbmc6OmJvdW5kcygpIGluY2x1ZGVzIHRoZSBtYXJnaW4uCi0gICAgICAgIFRp
bGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gdGhpcy0+dGlsZWRCYWNraW5nKCk7CisgICAgICAg
IGF1dG8qIHRpbGVkQmFja2luZyA9IHRoaXMtPnRpbGVkQmFja2luZygpOwogICAgICAgICBGbG9h
dFJlY3QgcmVjdFRvUmVwYWludCA9IHRpbGVkQmFja2luZyA/IHRpbGVkQmFja2luZy0+Ym91bmRz
KCkgOiBGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgbV9ncmFwaGljc0xheWVyLT5zaXplKCkp
OwogICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0VG9S
ZXBhaW50LCBzaG91bGRDbGlwKTsKICAgICB9CkBAIC0yNDE2LDcgKzI0MTksNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBMYXlv
dXRSZWN0JiByLCBHcmFwaAogICAgIEFTU0VSVCghcGFpbnRzSW50b0NvbXBvc2l0ZWRBbmNlc3Rv
cigpKTsKIAogICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRSZWN0Rm9yUGFpbnRpbmcgPSBzbmFw
UmVjdFRvRGV2aWNlUGl4ZWxzKHIsIGRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIEZyYW1lVmll
dyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisgICAgYXV0byYg
ZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CiAgICAgaWYgKG1faXNN
YWluRnJhbWVSZW5kZXJWaWV3TGF5ZXIgJiYgZnJhbWVWaWV3LmlzVHJhY2tpbmdSZXBhaW50cygp
KQogICAgICAgICBmcmFtZVZpZXcuYWRkVHJhY2tlZFJlcGFpbnRSZWN0KHBpeGVsU25hcHBlZFJl
Y3RGb3JQYWludGluZyk7CiAKQEAgLTI2MDksNyArMjYxMiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpkaWRDb21taXRDaGFuZ2VzRm9yTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogbGF5
ZXIpIGNvCiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpnZXRDdXJyZW50VHJhbnNmb3JtKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0pIGNvbnN0CiB7Ci0gICAgR3JhcGhpY3NMYXllciogdHJhbnNmb3JtZWRMYXllciA9
IG1fY29udGVudHNDb250YWlubWVudExheWVyLmdldCgpID8gbV9jb250ZW50c0NvbnRhaW5tZW50
TGF5ZXIuZ2V0KCkgOiBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCk7CisgICAgYXV0byogdHJhbnNmb3Jt
ZWRMYXllciA9IG1fY29udGVudHNDb250YWlubWVudExheWVyLmdldCgpID8gbV9jb250ZW50c0Nv
bnRhaW5tZW50TGF5ZXIuZ2V0KCkgOiBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCk7CiAgICAgaWYgKGdy
YXBoaWNzTGF5ZXIgIT0gdHJhbnNmb3JtZWRMYXllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0yNjc3LDcgKzI2ODAsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXNlR2lhbnRU
aWxlcygpIGNvbnN0CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpsb2dGaWxsZWRWaXNpYmxl
RnJlc2hUaWxlKHVuc2lnbmVkIGJsYW5rUGl4ZWxDb3VudCkKIHsKLSAgICBpZiAoUGVyZm9ybWFu
Y2VMb2dnaW5nQ2xpZW50KiBsb2dnaW5nQ2xpZW50ID0gcmVuZGVyZXIoKS5wYWdlKCkucGVyZm9y
bWFuY2VMb2dnaW5nQ2xpZW50KCkpCisgICAgaWYgKGF1dG8qIGxvZ2dpbmdDbGllbnQgPSByZW5k
ZXJlcigpLnBhZ2UoKS5wZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQoKSkKICAgICAgICAgbG9nZ2lu
Z0NsaWVudC0+bG9nU2Nyb2xsaW5nRXZlbnQoUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50OjpTY3Jv
bGxpbmdFdmVudDo6RmlsbGVkVGlsZSwgTW9ub3RvbmljVGltZTo6bm93KCksIGJsYW5rUGl4ZWxD
b3VudCk7CiB9CiAKQEAgLTI3MTgsNyArMjcyMSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5pbWF0aW9uKiBhbmlt
CiAgICAgICAgIGlmICgha2V5ZnJhbWVTdHlsZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgIFRpbWluZ0Z1bmN0aW9uKiB0ZiA9IGN1cnJlbnRLZXlmcmFtZS50
aW1pbmdGdW5jdGlvbihrZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKKyAgICAgICAgYXV0byog
dGYgPSBjdXJyZW50S2V5ZnJhbWUudGltaW5nRnVuY3Rpb24oa2V5ZnJhbWVzLmFuaW1hdGlvbk5h
bWUoKSk7CiAgICAgICAgIAogICAgICAgICBib29sIGlzRmlyc3RPckxhc3RLZXlmcmFtZSA9IGtl
eSA9PSAwIHx8IGtleSA9PSAxOwogICAgICAgICBpZiAoKGhhc1RyYW5zZm9ybSAmJiBpc0ZpcnN0
T3JMYXN0S2V5ZnJhbWUpIHx8IGN1cnJlbnRLZXlmcmFtZS5jb250YWluc1Byb3BlcnR5KENTU1By
b3BlcnR5VHJhbnNmb3JtKSkKQEAgLTI4OTAsNyArMjg5Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpzZXRDb21wb3NpdGVkQm91bmRzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykKIAog
TGF5b3V0UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXBvc2l0ZWRCb3VuZHNJbmNsdWRpbmdN
YXJnaW4oKSBjb25zdAogewotICAgIFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gdGhpcy0+
dGlsZWRCYWNraW5nKCk7CisgICAgYXV0byogdGlsZWRCYWNraW5nID0gdGhpcy0+dGlsZWRCYWNr
aW5nKCk7CiAgICAgaWYgKCF0aWxlZEJhY2tpbmcgfHwgIXRpbGVkQmFja2luZy0+aGFzTWFyZ2lu
cygpKQogICAgICAgICByZXR1cm4gY29tcG9zaXRlZEJvdW5kcygpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IGJmY2E1
YWI0ZDZhZGE5NThjYTIxZjRmNGU3NTkxY2NiMTRlZWY4NDkuLmQwNGU2NDdmM2RiNWVjMzdjYjI2
ZGQ4NWU0MTE2ZjU3ZmEwNmM0OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC00MjksMTMgKzQyOSwxMyBAQCB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKGJvb2wgaXNGbHVz
aFJvb3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmll
dyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKKyAgICBhdXRvJiBmcmFtZVZpZXcgPSBtX3Jl
bmRlclZpZXcuZnJhbWVWaWV3KCk7CiAgICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9u
VXBkYXRlQmxvY2soJmZyYW1lVmlldy5mcmFtZSgpLmFuaW1hdGlvbigpKTsKIAogICAgIEFTU0VS
VCghbV9mbHVzaGluZ0xheWVycyk7CiAgICAgbV9mbHVzaGluZ0xheWVycyA9IHRydWU7CiAKLSAg
ICBpZiAoR3JhcGhpY3NMYXllciogcm9vdExheWVyID0gcm9vdEdyYXBoaWNzTGF5ZXIoKSkgewor
ICAgIGlmIChhdXRvKiByb290TGF5ZXIgPSByb290R3JhcGhpY3NMYXllcigpKSB7CiAjaWYgUExB
VEZPUk0oSU9TKQogICAgICAgICBGbG9hdFJlY3QgZXhwb3NlZFJlY3QgPSBmcmFtZVZpZXcuZXhw
b3NlZENvbnRlbnRSZWN0KCk7CiAgICAgICAgIExPR19XSVRIX1NUUkVBTShDb21wb3NpdGluZywg
c3RyZWFtIDw8ICJcblJlbmRlckxheWVyQ29tcG9zaXRvciAiIDw8IHRoaXMgPDwgIiBmbHVzaFBl
bmRpbmdMYXllckNoYW5nZXMgKGlzIHJvb3QgIiA8PCBpc0ZsdXNoUm9vdCA8PCAiKSBleHBvc2Vk
UmVjdCAiIDw8IGV4cG9zZWRSZWN0KTsKQEAgLTQ3Myw5ICs0NzMsOSBAQCB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnNBZnRlckZsdXNoSW5j
bHVkaW5nU3ViZgogewogICAgIHVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzQWZ0ZXJGbHVz
aCgpOwogCi0gICAgRnJhbWUmIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1l
KCk7CisgICAgYXV0byYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsK
ICAgICBmb3IgKEZyYW1lKiBzdWJmcmFtZSA9IGZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IHN1
YmZyYW1lOyBzdWJmcmFtZSA9IHN1YmZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCZmcmFtZSkp
IHsKLSAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHN1YmZyYW1lLT5jb250ZW50UmVuZGVyZXIo
KTsKKyAgICAgICAgYXV0byogdmlldyA9IHN1YmZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKCF2aWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTUwOCw3ICs1MDgs
NyBAQCBzdGF0aWMgYm9vbCBzY3JvbGxiYXJIYXNEaXNwbGF5Tm9uZShTY3JvbGxiYXIqIHNjcm9s
bGJhcikKIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB8bGF5ZXJ8IGNvbnN0IFJlbmRlckxheWVyJj8K
IHN0YXRpYyB2b2lkIHVwZGF0ZVNjcm9sbGluZ0xheWVyV2l0aENsaWVudChSZW5kZXJMYXllciYg
bGF5ZXIsIENocm9tZUNsaWVudCYgY2xpZW50KQogewotICAgIFJlbmRlckxheWVyQmFja2luZyog
YmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKKyAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIuYmFj
a2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKIAogICAgIGJvb2wgYWxsb3dIb3Jpem9udGFs
U2Nyb2xsYmFyID0gIXNjcm9sbGJhckhhc0Rpc3BsYXlOb25lKGxheWVyLmhvcml6b250YWxTY3Jv
bGxiYXIoKSk7CkBAIC01NDAsMTQgKzU0MCwxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6ZGlkRmx1c2hDaGFuZ2VzRm9yTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBHcgog
ICAgICAgICBtX3Njcm9sbGluZ0xheWVyc05lZWRpbmdVcGRhdGUuYWRkKCZsYXllcik7CiAjZW5k
aWYKIAotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsK
KyAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIGlmIChiYWNraW5nLT5i
YWNrZ3JvdW5kTGF5ZXJQYWludHNGaXhlZFJvb3RCYWNrZ3JvdW5kKCkgJiYgZ3JhcGhpY3NMYXll
ciA9PSBiYWNraW5nLT5iYWNrZ3JvdW5kTGF5ZXIoKSkKICAgICAgICAgZml4ZWRSb290QmFja2dy
b3VuZExheWVyQ2hhbmdlZCgpOwogfQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlk
UGFpbnRCYWNraW5nKFJlbmRlckxheWVyQmFja2luZyopCiB7Ci0gICAgRnJhbWVWaWV3JiBmcmFt
ZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CisgICAgYXV0byYgZnJhbWVWaWV3ID0g
bV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwogICAgIGZyYW1lVmlldy5zZXRMYXN0UGFpbnRUaW1l
KG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKICAgICBpZiAoZnJhbWVWaWV3Lm1pbGVz
dG9uZXNQZW5kaW5nUGFpbnQoKSkKICAgICAgICAgZnJhbWVWaWV3LmZpcmVQYWludFJlbGF0ZWRN
aWxlc3RvbmVzSWZOZWVkZWQoKTsKQEAgLTU1NSw3ICs1NTUsNyBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZGlkUGFpbnRCYWNraW5nKFJlbmRlckxheWVyQmFja2luZyopCiAKIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRDaGFuZ2VWaXNpYmxlUmVjdCgpCiB7Ci0gICAgR3Jh
cGhpY3NMYXllciogcm9vdExheWVyID0gcm9vdEdyYXBoaWNzTGF5ZXIoKTsKKyAgICBhdXRvKiBy
b290TGF5ZXIgPSByb290R3JhcGhpY3NMYXllcigpOwogICAgIGlmICghcm9vdExheWVyKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTU5OSw4ICs1OTksOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6bGF5ZXJUaWxlZEJhY2tpbmdVc2FnZUNoYW5nZWQoY29uc3QgR3JhcGhpY3NMYXllciog
ZwogCiBSZW5kZXJMYXllckNvbXBvc2l0b3IqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5jbG9z
aW5nQ29tcG9zaXRvckZsdXNoaW5nTGF5ZXJzKCkgY29uc3QKIHsKLSAgICBmb3IgKEZyYW1lKiBm
cmFtZSA9ICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkgewotICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3Iq
IGNvbXBvc2l0b3IgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkgPyAmZnJhbWUtPmNvbnRlbnRS
ZW5kZXJlcigpLT5jb21wb3NpdG9yKCkgOiBudWxscHRyOworICAgIGZvciAoYXV0byogZnJhbWUg
PSAmbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkucGFyZW50KCkpIHsKKyAgICAgICAgYXV0byogY29tcG9zaXRvciA9IGZyYW1lLT5j
b250ZW50UmVuZGVyZXIoKSA/ICZmcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3Io
KSA6IG51bGxwdHI7CiAgICAgICAgIGlmIChjb21wb3NpdG9yLT5pc0ZsdXNoaW5nTGF5ZXJzKCkp
CiAgICAgICAgICAgICByZXR1cm4gY29tcG9zaXRvcjsKICAgICB9CkBAIC03MTgsNyArNzE4LDcg
QEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENv
bXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKICAgICAgICAgbV9vYmxpZ2F0b3J5QmFja2luZ1N0
b3JlQnl0ZXMgPSAwOwogICAgICAgICBtX3NlY29uZGFyeUJhY2tpbmdTdG9yZUJ5dGVzID0gMDsK
IAotICAgICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUo
KTsKKyAgICAgICAgYXV0byYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUo
KTsKICAgICAgICAgYm9vbCBpc01haW5GcmFtZSA9IGlzTWFpbkZyYW1lQ29tcG9zaXRvcigpOwog
ICAgICAgICBMT0coQ29tcG9zaXRpbmcsICJcblVwZGF0ZSAlZCBvZiAlcy5cbiIsIG1fcm9vdExh
eWVyVXBkYXRlQ291bnQsIGlzTWFpbkZyYW1lID8gIm1haW4gZnJhbWUiIDogZnJhbWUudHJlZSgp
LnVuaXF1ZU5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICB9CkBAIC03NzQsNyAr
Nzc0LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFwcGVuZERvY3VtZW50T3Zlcmxh
eUxheWVycyhWZWN0b3I8R3JhcGhpY3NMYXllcio+JgogICAgIGlmICghaXNNYWluRnJhbWVDb21w
b3NpdG9yKCkgfHwgIW1fY29tcG9zaXRpbmcpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZyYW1l
JiBmcmFtZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpOworICAgIGF1dG8mIGZy
YW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7CiAgICAgY2hpbGRMaXN0LmFw
cGVuZCgmZnJhbWUubWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkubGF5ZXJXaXRo
RG9jdW1lbnRPdmVybGF5cygpKTsKIH0KIApAQCAtNzkzLDcgKzc5Myw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpsb2dMYXllckluZm8oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBp
bnQgZGVwdGgpCiAgICAgaWYgKCFjb21wb3NpdGluZ0xvZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygp
OworICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgaWYgKHJlcXVpcmVz
Q29tcG9zaXRpbmdMYXllcihsYXllcikgfHwgbGF5ZXIuaXNSZW5kZXJWaWV3TGF5ZXIoKSkgewog
ICAgICAgICArK21fb2JsaWdhdGVDb21wb3NpdGVkTGF5ZXJDb3VudDsKICAgICAgICAgbV9vYmxp
Z2F0b3J5QmFja2luZ1N0b3JlQnl0ZXMgKz0gYmFja2luZy0+YmFja2luZ1N0b3JlTWVtb3J5RXN0
aW1hdGUoKTsKQEAgLTg2NCw4ICs4NjQsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
bG9nTGF5ZXJJbmZvKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgaW50IGRlcHRoKQogCiBzdGF0
aWMgYm9vbCBjaGVja0lmRGVzY2VuZGFudENsaXBwaW5nQ29udGV4dE5lZWRzVXBkYXRlKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllciwgYm9vbCBpc0NsaXBwaW5nKQogewotICAgIGZvciAoUmVuZGVy
TGF5ZXIqIGNoaWxkID0gbGF5ZXIuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBj
aGlsZC0+YmFja2luZygpOworICAgIGZvciAoYXV0byogY2hpbGQgPSBsYXllci5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGF1dG8q
IGJhY2tpbmcgPSBjaGlsZC0+YmFja2luZygpOwogICAgICAgICBpZiAoYmFja2luZyAmJiAoaXND
bGlwcGluZyB8fCBiYWNraW5nLT5oYXNBbmNlc3RvckNsaXBwaW5nTGF5ZXIoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtODk2LDggKzg5Niw4IEBAIHN0YXRpYyBib29sIHN0eWxl
Q2hhbmdlUmVxdWlyZXNMYXllclJlYnVpbGQoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25z
dCBSZW5kCiAKICAgICAvLyBGSVhNRTogbmVlZCB0byBjaGVjayBldmVyeXRoaW5nIHRoYXQgd2Ug
Y29uc3VsdCB0byBhdm9pZCBiYWNraW5nIHN0b3JlIGhlcmU6IHdlYmtpdC5vcmcvYi8xMzgzODMK
ICAgICBpZiAoIW9sZFN0eWxlLm9wYWNpdHkoKSAhPSAhbmV3U3R5bGUub3BhY2l0eSgpKSB7Ci0g
ICAgICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBsYXllci5y
ZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKTsKLSAgICAgICAgaWYgKFJlbmRlckxheWVy
QmFja2luZyogYW5jZXN0b3JCYWNraW5nID0gcmVwYWludENvbnRhaW5lciA/IHJlcGFpbnRDb250
YWluZXItPmxheWVyKCktPmJhY2tpbmcoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgYXV0byogcmVw
YWludENvbnRhaW5lciA9IGxheWVyLnJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOwor
ICAgICAgICBpZiAoYXV0byogYW5jZXN0b3JCYWNraW5nID0gcmVwYWludENvbnRhaW5lciA/IHJl
cGFpbnRDb250YWluZXItPmxheWVyKCktPmJhY2tpbmcoKSA6IG51bGxwdHIpIHsKICAgICAgICAg
ICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihuZXdTdHlsZS5vcGFjaXR5KCkpICE9IGFuY2VzdG9y
QmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtOTc3LDEzICs5NzcsMTMgQEAgYm9vbCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmNhbkNvbXBvc2l0ZUNsaXBQYXRoKGNvbnN0IFJlbmRlckxheWVy
JiBsYXllcikKICAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNNYXNrKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIENsaXBQYXRoT3BlcmF0aW9uJiBjbGlwUGF0aCA9ICpsYXllci5y
ZW5kZXJlcigpLnN0eWxlKCkuY2xpcFBhdGgoKTsKKyAgICBhdXRvJiBjbGlwUGF0aCA9ICpsYXll
ci5yZW5kZXJlcigpLnN0eWxlKCkuY2xpcFBhdGgoKTsKICAgICByZXR1cm4gKGNsaXBQYXRoLnR5
cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUgfHwgY2xpcFBhdGgudHlwZSgpID09IENs
aXBQYXRoT3BlcmF0aW9uOjpTaGFwZSkgJiYgR3JhcGhpY3NMYXllcjo6c3VwcG9ydHNMYXllclR5
cGUoR3JhcGhpY3NMYXllcjo6VHlwZTo6U2hhcGUpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCYgcmVuZGVyZXJGb3JDb21wb3NpdGluZ1Rlc3RzKGNvbnN0IFJlbmRlckxheWVy
JiBsYXllcikKIHsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZW5kZXJlciA9ICZsYXll
ci5yZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gJmxheWVyLnJlbmRlcmVyKCk7CiAK
ICAgICAvLyBUaGUgY29tcG9zaXRpbmcgc3RhdGUgb2YgYSByZWZsZWN0aW9uIHNob3VsZCBtYXRj
aCB0aGF0IG9mIGl0cyByZWZsZWN0ZWQgbGF5ZXIuCiAgICAgaWYgKGxheWVyLmlzUmVmbGVjdGlv
bigpKQpAQCAtMTAyMSw3ICsxMDIxLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKIAogICAg
ICAgICAgICAgaWYgKGxheWVyLmlzUmVuZGVyVmlld0xheWVyKCkgJiYgdXNlQ29vcmRpbmF0ZWRT
Y3JvbGxpbmdGb3JMYXllcihsYXllcikpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVTY3JvbGxD
b29yZGluYXRlZFN0YXR1cyhsYXllciwgeyBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVy
LCBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgfSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRo
aXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAg
ICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRp
ZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkpOwogI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKICAgICAgICAgICAgICAgICB1cGRhdGVMYXllckZvckhlYWRlcihwYWdlKCkuaGVhZGVy
SGVpZ2h0KCkpOwpAQCAtMTAyOSw3ICsxMDI5LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIK
ICNlbmRpZgogICAgICAgICAgICAgICAgIHVwZGF0ZVJvb3RDb250ZW50TGF5ZXJDbGlwcGluZygp
OwogCi0gICAgICAgICAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0gbGF5
ZXIuYmFja2luZygpLT50aWxlZEJhY2tpbmcoKSkKKyAgICAgICAgICAgICAgICBpZiAoYXV0byog
dGlsZWRCYWNraW5nID0gbGF5ZXIuYmFja2luZygpLT50aWxlZEJhY2tpbmcoKSkKICAgICAgICAg
ICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRUb3BDb250ZW50SW5zZXQobV9yZW5kZXJWaWV3
LmZyYW1lVmlldygpLnRvcENvbnRlbnRJbnNldCgpKTsKICAgICAgICAgICAgIH0KIApAQCAtMTA0
Niw4ICsxMDQ2LDggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmco
UmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKICAgICAgICAgICAgIC8vIGl0
cyByZXBsaWNhIEdyYXBoaWNzTGF5ZXIuIEluIHByYWN0aWNlIHRoaXMgc2hvdWxkIG5ldmVyIGhh
cHBlbiBiZWNhdXNlIHJlZmxlY3RlZSBhbmQgcmVmbGVjdGlvbiAKICAgICAgICAgICAgIC8vIGFy
ZSBib3RoIGVpdGhlciBjb21wb3NpdGVkLCBvciBub3QgY29tcG9zaXRlZC4KICAgICAgICAgICAg
IGlmIChsYXllci5pc1JlZmxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIFJlbmRlckxheWVy
KiBzb3VyY2VMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpsYXllci5y
ZW5kZXJlcigpLnBhcmVudCgpKS5sYXllcigpOwotICAgICAgICAgICAgICAgIGlmIChSZW5kZXJM
YXllckJhY2tpbmcqIGJhY2tpbmcgPSBzb3VyY2VMYXllci0+YmFja2luZygpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byogc291cmNlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0PigqbGF5ZXIucmVuZGVyZXIoKS5wYXJlbnQoKSkubGF5ZXIoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoYXV0byogYmFja2luZyA9IHNvdXJjZUxheWVyLT5iYWNraW5nKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+cmVwbGljYUxheWVy
KCkgPT0gbGF5ZXIuYmFja2luZygpLT5ncmFwaGljc0xheWVyKCkpOwogICAgICAgICAgICAgICAg
ICAgICBiYWNraW5nLT5ncmFwaGljc0xheWVyKCktPnNldFJlcGxpY2F0ZWRCeUxheWVyKG51bGxw
dHIpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEwNzYsNyArMTA3Niw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgQ29tcG9z
aXRpbmdDaGFuZ2VSCiAjZW5kaWYKIAogICAgIGlmIChsYXllckNoYW5nZWQgJiYgaXM8UmVuZGVy
V2lkZ2V0PihsYXllci5yZW5kZXJlcigpKSkgewotICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0
b3IqIGlubmVyQ29tcG9zaXRvciA9IGZyYW1lQ29udGVudHNDb21wb3NpdG9yKCZkb3duY2FzdDxS
ZW5kZXJXaWRnZXQ+KGxheWVyLnJlbmRlcmVyKCkpKTsKKyAgICAgICAgYXV0byogaW5uZXJDb21w
b3NpdG9yID0gZnJhbWVDb250ZW50c0NvbXBvc2l0b3IoJmRvd25jYXN0PFJlbmRlcldpZGdldD4o
bGF5ZXIucmVuZGVyZXIoKSkpOwogICAgICAgICBpZiAoaW5uZXJDb21wb3NpdG9yICYmIGlubmVy
Q29tcG9zaXRvci0+aW5Db21wb3NpdGluZ01vZGUoKSkKICAgICAgICAgICAgIGlubmVyQ29tcG9z
aXRvci0+dXBkYXRlUm9vdExheWVyQXR0YWNobWVudCgpOwogICAgIH0KQEAgLTEwOTIsNyArMTA5
Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKFJlbmRlckxh
eWVyJiBsYXllciwgQ29tcG9zaXRpbmdDaGFuZ2VSCiAgICAgICAgICAgICBsYXllckNoYW5nZWQg
PSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChsYXllckNoYW5nZWQpIHsKLSAgICAgICAg
ICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlz
LT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAgICAgICAg
ICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3Rml4ZWRPYmplY3RzRGlkQ2hhbmdl
KG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTEx
MjIsNyArMTEyMiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXBhaW50T25Db21w
b3NpdGluZ0NoYW5nZShSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKCZsYXllci5yZW5kZXJl
cigpICE9ICZtX3JlbmRlclZpZXcgJiYgIWxheWVyLnJlbmRlcmVyKCkucGFyZW50KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIgPSBsYXllci5yZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICBhdXRvKiBy
ZXBhaW50Q29udGFpbmVyID0gbGF5ZXIucmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7
CiAgICAgaWYgKCFyZXBhaW50Q29udGFpbmVyKQogICAgICAgICByZXBhaW50Q29udGFpbmVyID0g
Jm1fcmVuZGVyVmlldzsKIApAQCAtMTEzOCw3ICsxMTM4LDcgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlcGFpbnRPbkNvbXBvc2l0aW5nQ2hhbmdlKFJlbmRlckxheWVyJiBsYXllcikK
IC8vIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBsYXlvdXQgaXMgdXAtdG8tZGF0ZSwgdW5saWtl
IHJlcGFpbnRPbkNvbXBvc2l0aW5nQ2hhbmdlKCkuCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVwYWludEluQ29tcG9zaXRlZEFuY2VzdG9yKFJlbmRlckxheWVyJiBsYXllciwgY29uc3Qg
TGF5b3V0UmVjdCYgcmVjdCkKIHsKLSAgICBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9y
ID0gbGF5ZXIuZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllckZvclJlcGFpbnQoRXhjbHVkZVNlbGYp
OworICAgIGF1dG8qIGNvbXBvc2l0ZWRBbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0NvbXBvc2l0
aW5nTGF5ZXJGb3JSZXBhaW50KEV4Y2x1ZGVTZWxmKTsKICAgICBpZiAoIWNvbXBvc2l0ZWRBbmNl
c3RvcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMTcyLDcgKzExNzIsNyBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXaWxsQmVSZW1vdmVkKFJlbmRlckxheWVyJiBwYXJlbnQs
IFJlbmRlckxheWVyJgogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbmNs
b3NpbmdOb25TdGFja2luZ0NsaXBwaW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSBj
b25zdAogewotICAgIGZvciAoUmVuZGVyTGF5ZXIqIHBhcmVudCA9IGxheWVyLnBhcmVudCgpOyBw
YXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCkpIHsKKyAgICBmb3IgKGF1dG8qIHBhcmVu
dCA9IGxheWVyLnBhcmVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCkpIHsK
ICAgICAgICAgaWYgKHBhcmVudC0+aXNTdGFja2luZ0NvbnRhaW5lcigpKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGlmIChwYXJlbnQtPnJlbmRlcmVyKCkuaGFzQ2xpcE9y
T3ZlcmZsb3dDbGlwKCkpCkBAIC0xNDg4LDggKzE0ODgsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6c2V0Q29tcG9zaXRpbmdQYXJlbnQoUmVuZGVyTGF5ZXImIGNoaWxkTGF5ZXIsIFJl
bmRlcgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocGFyZW50TGF5ZXIpIHsKLSAgICAgICAg
R3JhcGhpY3NMYXllciogaG9zdGluZ0xheWVyID0gcGFyZW50TGF5ZXItPmJhY2tpbmcoKS0+cGFy
ZW50Rm9yU3VibGF5ZXJzKCk7Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXIqIGhvc3RlZExheWVyID0g
Y2hpbGRMYXllci5iYWNraW5nKCktPmNoaWxkRm9yU3VwZXJsYXllcnMoKTsKKyAgICAgICAgYXV0
byogaG9zdGluZ0xheWVyID0gcGFyZW50TGF5ZXItPmJhY2tpbmcoKS0+cGFyZW50Rm9yU3VibGF5
ZXJzKCk7CisgICAgICAgIGF1dG8qIGhvc3RlZExheWVyID0gY2hpbGRMYXllci5iYWNraW5nKCkt
PmNoaWxkRm9yU3VwZXJsYXllcnMoKTsKICAgICAgICAgCiAgICAgICAgIGhvc3RpbmdMYXllci0+
YWRkQ2hpbGQoaG9zdGVkTGF5ZXIpOwogICAgIH0gZWxzZQpAQCAtMTUxOSwxMyArMTUxOSwxMyBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVl
KFJlbmRlckxheWVyJiBsYXllciwgVmVjdAogICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gb25seSBk
byB3b3JrIGhlcmUgdGhhdCBpcyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBkZXNjZW5kYW50
IGxheWVycwogICAgIC8vIGhhdmUgYmVlbiBwcm9jZXNzZWQuIGNvbXB1dGVDb21wb3NpdGluZ1Jl
cXVpcmVtZW50cygpIHdpbGwgYWxyZWFkeSBoYXZlIGRvbmUgdGhlIHJlcGFpbnQgaWYgbmVjZXNz
YXJ5LgogCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBsYXllckJhY2tpbmcgPSBsYXllci5iYWNr
aW5nKCk7CisgICAgYXV0byogbGF5ZXJCYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIGlm
IChsYXllckJhY2tpbmcpIHsKICAgICAgICAgLy8gVGhlIGNvbXBvc2l0aW5nIHN0YXRlIG9mIGFs
bCBvdXIgY2hpbGRyZW4gaGFzIGJlZW4gdXBkYXRlZCBhbHJlYWR5LCBzbyBub3cKICAgICAgICAg
Ly8gd2UgY2FuIGNvbXB1dGUgYW5kIGNhY2hlIHRoZSBjb21wb3NpdGVkIGJvdW5kcyBmb3IgdGhp
cyBsYXllci4KICAgICAgICAgbGF5ZXJCYWNraW5nLT51cGRhdGVDb21wb3NpdGVkQm91bmRzKCk7
CiAKLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiByZWZsZWN0aW9uID0gbGF5ZXIucmVmbGVjdGlv
bkxheWVyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHJlZmxlY3Rpb24gPSBsYXllci5yZWZsZWN0
aW9uTGF5ZXIoKSkgewogICAgICAgICAgICAgaWYgKHJlZmxlY3Rpb24tPmJhY2tpbmcoKSkKICAg
ICAgICAgICAgICAgICByZWZsZWN0aW9uLT5iYWNraW5nKCktPnVwZGF0ZUNvbXBvc2l0ZWRCb3Vu
ZHMoKTsKICAgICAgICAgfQpAQCAtMTU4NiwxNyArMTU4NiwxNyBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVyJiBsYXll
ciwgVmVjdAogICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgaGFzIGEgY2xpcHBpbmcgbGF5ZXIgdGhl
IG92ZXJmbG93IGNvbnRyb2xzIGxheWVycyB3aWxsIGJlIHNpYmxpbmdzIG9mIHRoZSBjbGlwcGlu
ZyBsYXllci4KICAgICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgb3ZlcmZsb3cgY29udHJvbCBsYXll
cnMgYXJlIG5vcm1hbCBjaGlsZHJlbi4KICAgICAgICAgaWYgKCFsYXllckJhY2tpbmctPmhhc0Ns
aXBwaW5nTGF5ZXIoKSAmJiAhbGF5ZXJCYWNraW5nLT5oYXNTY3JvbGxpbmdMYXllcigpKSB7Ci0g
ICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogb3ZlcmZsb3dDb250cm9sTGF5ZXIgPSBsYXll
ckJhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byogb3ZlcmZsb3dDb250cm9sTGF5ZXIgPSBsYXllckJhY2tpbmctPmxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sTGF5
ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICAgICAgICAgICAgICBsYXllckJhY2tpbmctPnBh
cmVudEZvclN1YmxheWVycygpLT5hZGRDaGlsZChvdmVyZmxvd0NvbnRyb2xMYXllcik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVyZmxvd0NvbnRy
b2xMYXllciA9IGxheWVyQmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byogb3ZlcmZsb3dDb250cm9sTGF5ZXIgPSBsYXllckJhY2tpbmct
PmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICAgICAgICAgIG92ZXJmbG93
Q29udHJvbExheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgICAgICAgICAgICAgbGF5ZXJC
YWNraW5nLT5wYXJlbnRGb3JTdWJsYXllcnMoKS0+YWRkQ2hpbGQob3ZlcmZsb3dDb250cm9sTGF5
ZXIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogb3Zl
cmZsb3dDb250cm9sTGF5ZXIgPSBsYXllckJhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBvdmVyZmxvd0NvbnRyb2xMYXllciA9IGxheWVyQmFj
a2luZy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewogICAgICAgICAgICAgICAgIG92ZXJmbG93
Q29udHJvbExheWVyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgICAgICAgICAgICAgbGF5ZXJC
YWNraW5nLT5wYXJlbnRGb3JTdWJsYXllcnMoKS0+YWRkQ2hpbGQob3ZlcmZsb3dDb250cm9sTGF5
ZXIpOwogICAgICAgICAgICAgfQpAQCAtMTYwNSw3ICsxNjA1LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZShSZW5kZXJMYXllciYgbGF5
ZXIsIFZlY3QKICAgICAgICAgY2hpbGRMYXllcnNPZkVuY2xvc2luZ0xheWVyLmFwcGVuZChsYXll
ckJhY2tpbmctPmNoaWxkRm9yU3VwZXJsYXllcnMoKSk7CiAgICAgfQogICAgIAotICAgIGlmIChS
ZW5kZXJMYXllckJhY2tpbmcqIGxheWVyQmFja2luZyA9IGxheWVyLmJhY2tpbmcoKSkKKyAgICBp
ZiAoYXV0byogbGF5ZXJCYWNraW5nID0gbGF5ZXIuYmFja2luZygpKQogICAgICAgICBsYXllckJh
Y2tpbmctPnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKTsKIH0KIApAQCAtMTYzNiw3ICsxNjM2LDcg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lVmlld0RpZENoYW5nZVNpemUoKQog
CiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcoKSBj
b25zdAogewotICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgYXV0byogc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpOwogICAgIHJldHVybiBzY3JvbGxp
bmdDb29yZGluYXRvciAmJiBzY3JvbGxpbmdDb29yZGluYXRvci0+Y29vcmRpbmF0ZXNTY3JvbGxp
bmdGb3JGcmFtZVZpZXcobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpKTsKIH0KIApAQCAtMTY0NCwx
OCArMTY0NCwxOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsTGF5
ZXJQb3NpdGlvbigpCiB7CiAgICAgQVNTRVJUKG1fc2Nyb2xsTGF5ZXIpOwogCi0gICAgRnJhbWVW
aWV3JiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CisgICAgYXV0byYgZnJh
bWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwogICAgIEludFBvaW50IHNjcm9sbFBv
c2l0aW9uID0gZnJhbWVWaWV3LnNjcm9sbFBvc2l0aW9uKCk7CiAKICAgICBtX3Njcm9sbExheWVy
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KC1zY3JvbGxQb3NpdGlvbi54KCksIC1zY3JvbGxQb3Np
dGlvbi55KCkpKTsKIAotICAgIGlmIChHcmFwaGljc0xheWVyKiBmaXhlZEJhY2tncm91bmRMYXll
ciA9IGZpeGVkUm9vdEJhY2tncm91bmRMYXllcigpKQorICAgIGlmIChhdXRvKiBmaXhlZEJhY2tn
cm91bmRMYXllciA9IGZpeGVkUm9vdEJhY2tncm91bmRMYXllcigpKQogICAgICAgICBmaXhlZEJh
Y2tncm91bmRMYXllci0+c2V0UG9zaXRpb24oZnJhbWVWaWV3LnNjcm9sbFBvc2l0aW9uRm9yRml4
ZWRQb3NpdGlvbigpKTsKIH0KIAogRmxvYXRQb2ludCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBv
c2l0aW9uRm9yQ2xpcExheWVyKCkgY29uc3QKIHsKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9
IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKKyAgICBhdXRvJiBmcmFtZVZpZXcgPSBtX3JlbmRl
clZpZXcuZnJhbWVWaWV3KCk7CiAKICAgICByZXR1cm4gRmxvYXRQb2ludCgKICAgICAgICAgZnJh
bWVWaWV3LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IGZyYW1l
Vmlldy5ob3Jpem9udGFsU2Nyb2xsYmFySW50cnVzaW9uKCkgOiAwLApAQCAtMTY4NSwyMSArMTY4
NSwyMCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVWaWV3RGlkQWRkT3JSZW1v
dmVTY3JvbGxiYXJzKCkKIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lVmlld0Rp
ZExheW91dCgpCiB7Ci0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiByZW5kZXJWaWV3QmFja2luZyA9
IG1fcmVuZGVyVmlldy5sYXllcigpLT5iYWNraW5nKCk7Ci0gICAgaWYgKHJlbmRlclZpZXdCYWNr
aW5nKQorICAgIGlmIChhdXRvKiByZW5kZXJWaWV3QmFja2luZyA9IG1fcmVuZGVyVmlldy5sYXll
cigpLT5iYWNraW5nKCkpCiAgICAgICAgIHJlbmRlclZpZXdCYWNraW5nLT5hZGp1c3RUaWxlZEJh
Y2tpbmdDb3ZlcmFnZSgpOwogfQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdEZp
eGVkQmFja2dyb3VuZHNDaGFuZ2VkKCkKIHsKLSAgICBSZW5kZXJMYXllckJhY2tpbmcqIHJlbmRl
clZpZXdCYWNraW5nID0gbV9yZW5kZXJWaWV3LmxheWVyKCktPmJhY2tpbmcoKTsKKyAgICBhdXRv
KiByZW5kZXJWaWV3QmFja2luZyA9IG1fcmVuZGVyVmlldy5sYXllcigpLT5iYWNraW5nKCk7CiAg
ICAgaWYgKHJlbmRlclZpZXdCYWNraW5nICYmIHJlbmRlclZpZXdCYWNraW5nLT5pc0ZyYW1lTGF5
ZXJXaXRoVGlsZWRCYWNraW5nKCkpCiAgICAgICAgIHNldENvbXBvc2l0aW5nTGF5ZXJzTmVlZFJl
YnVpbGQoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGluZ0xheWVy
RGlkQ2hhbmdlKFJlbmRlckxheWVyJiBsYXllcikKIHsKLSAgICBpZiAoU2Nyb2xsaW5nQ29vcmRp
bmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdD
b29yZGluYXRvcigpKQogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFy
ZWFTY3JvbGxMYXllckRpZENoYW5nZShsYXllcik7CiB9CiAKQEAgLTE3NTgsOCArMTc1Nyw4IEBA
IFN0cmluZyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxheWVyVHJlZUFzVGV4dChMYXllclRyZWVG
bGFncyBmbGFncykKIAogUmVuZGVyTGF5ZXJDb21wb3NpdG9yKiBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmZyYW1lQ29udGVudHNDb21wb3NpdG9yKFJlbmRlcldpZGdldCogcmVuZGVyZXIpCiB7Ci0g
ICAgaWYgKERvY3VtZW50KiBjb250ZW50RG9jdW1lbnQgPSByZW5kZXJlci0+ZnJhbWVPd25lckVs
ZW1lbnQoKS5jb250ZW50RG9jdW1lbnQoKSkgewotICAgICAgICBpZiAoUmVuZGVyVmlldyogdmll
dyA9IGNvbnRlbnREb2N1bWVudC0+cmVuZGVyVmlldygpKQorICAgIGlmIChhdXRvKiBjb250ZW50
RG9jdW1lbnQgPSByZW5kZXJlci0+ZnJhbWVPd25lckVsZW1lbnQoKS5jb250ZW50RG9jdW1lbnQo
KSkgeworICAgICAgICBpZiAoYXV0byogdmlldyA9IGNvbnRlbnREb2N1bWVudC0+cmVuZGVyVmll
dygpKQogICAgICAgICAgICAgcmV0dXJuICZ2aWV3LT5jb21wb3NpdG9yKCk7CiAgICAgfQogICAg
IHJldHVybiBudWxscHRyOwpAQCAtMTc2NywxNyArMTc2NiwxNyBAQCBSZW5kZXJMYXllckNvbXBv
c2l0b3IqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVDb250ZW50c0NvbXBvc2l0b3IoUmVu
ZGVyV2lkZwogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50RnJhbWVDb250ZW50
TGF5ZXJzKFJlbmRlcldpZGdldCogcmVuZGVyZXIpCiB7Ci0gICAgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yKiBpbm5lckNvbXBvc2l0b3IgPSBmcmFtZUNvbnRlbnRzQ29tcG9zaXRvcihyZW5kZXJlcik7
CisgICAgYXV0byogaW5uZXJDb21wb3NpdG9yID0gZnJhbWVDb250ZW50c0NvbXBvc2l0b3IocmVu
ZGVyZXIpOwogICAgIGlmICghaW5uZXJDb21wb3NpdG9yIHx8ICFpbm5lckNvbXBvc2l0b3ItPmlu
Q29tcG9zaXRpbmdNb2RlKCkgfHwgaW5uZXJDb21wb3NpdG9yLT5yb290TGF5ZXJBdHRhY2htZW50
KCkgIT0gUm9vdExheWVyQXR0YWNoZWRWaWFFbmNsb3NpbmdGcmFtZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5sYXllcigp
OworICAgIGF1dG8qIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7CiAgICAgaWYgKCFsYXllci0+
aXNDb21wb3NpdGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlbmRlckxheWVy
QmFja2luZyogYmFja2luZyA9IGxheWVyLT5iYWNraW5nKCk7Ci0gICAgR3JhcGhpY3NMYXllciog
aG9zdGluZ0xheWVyID0gYmFja2luZy0+cGFyZW50Rm9yU3VibGF5ZXJzKCk7Ci0gICAgR3JhcGhp
Y3NMYXllciogcm9vdExheWVyID0gaW5uZXJDb21wb3NpdG9yLT5yb290R3JhcGhpY3NMYXllcigp
OworICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci0+YmFja2luZygpOworICAgIGF1dG8qIGhvc3Rp
bmdMYXllciA9IGJhY2tpbmctPnBhcmVudEZvclN1YmxheWVycygpOworICAgIGF1dG8qIHJvb3RM
YXllciA9IGlubmVyQ29tcG9zaXRvci0+cm9vdEdyYXBoaWNzTGF5ZXIoKTsKICAgICBpZiAoaG9z
dGluZ0xheWVyLT5jaGlsZHJlbigpLnNpemUoKSAhPSAxIHx8IGhvc3RpbmdMYXllci0+Y2hpbGRy
ZW4oKVswXSAhPSByb290TGF5ZXIpIHsKICAgICAgICAgaG9zdGluZ0xheWVyLT5yZW1vdmVBbGxD
aGlsZHJlbigpOwogICAgICAgICBob3N0aW5nTGF5ZXItPmFkZENoaWxkKHJvb3RMYXllcik7CkBA
IC0xNzg4LDEyICsxNzg3LDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRG
cmFtZUNvbnRlbnRMYXllcnMoUmVuZGVyV2lkZ2V0KiByZW5kZXJlcikKIC8vIFRoaXMganVzdCB1
cGRhdGVzIGxheWVyIGdlb21ldHJ5IHdpdGhvdXQgY2hhbmdpbmcgdGhlIGhpZXJhcmNoeS4KIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJM
YXllciYgbGF5ZXIsIGludCBkZXB0aCkKIHsKLSAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBs
YXllckJhY2tpbmcgPSBsYXllci5iYWNraW5nKCkpIHsKKyAgICBpZiAoYXV0byogbGF5ZXJCYWNr
aW5nID0gbGF5ZXIuYmFja2luZygpKSB7CiAgICAgICAgIC8vIFRoZSBjb21wb3NpdGluZyBzdGF0
ZSBvZiBhbGwgb3VyIGNoaWxkcmVuIGhhcyBiZWVuIHVwZGF0ZWQgYWxyZWFkeSwgc28gbm93CiAg
ICAgICAgIC8vIHdlIGNhbiBjb21wdXRlIGFuZCBjYWNoZSB0aGUgY29tcG9zaXRlZCBib3VuZHMg
Zm9yIHRoaXMgbGF5ZXIuCiAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRlQ29tcG9zaXRlZEJv
dW5kcygpOwogCi0gICAgICAgIGlmIChSZW5kZXJMYXllciogcmVmbGVjdGlvbiA9IGxheWVyLnJl
ZmxlY3Rpb25MYXllcigpKSB7CisgICAgICAgIGlmIChhdXRvKiByZWZsZWN0aW9uID0gbGF5ZXIu
cmVmbGVjdGlvbkxheWVyKCkpIHsKICAgICAgICAgICAgIGlmIChyZWZsZWN0aW9uLT5iYWNraW5n
KCkpCiAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+YmFja2luZygpLT51cGRhdGVDb21wb3Np
dGVkQm91bmRzKCk7CiAgICAgICAgIH0KQEAgLTE4MzAsNyArMTgyOSw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJMYXllciYgbGF5
ZXIsIGludCBkZXB0CiAgICAgICAgICAgICB1cGRhdGVMYXllclRyZWVHZW9tZXRyeSgqcmVuZGVy
TGF5ZXIsIGRlcHRoICsgMSk7CiAgICAgfQogCi0gICAgaWYgKFJlbmRlckxheWVyQmFja2luZyog
bGF5ZXJCYWNraW5nID0gbGF5ZXIuYmFja2luZygpKQorICAgIGlmIChhdXRvKiBsYXllckJhY2tp
bmcgPSBsYXllci5iYWNraW5nKCkpCiAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRlQWZ0ZXJE
ZXNjZW5kYW50cygpOwogfQogCkBAIC0xODM4LDEwICsxODM3LDEwIEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJMYXllciYgbGF5ZXIs
IGludCBkZXB0CiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdE
ZXNjZW5kYW50R2VvbWV0cnkoUmVuZGVyTGF5ZXImIGNvbXBvc2l0aW5nQW5jZXN0b3IsIFJlbmRl
ckxheWVyJiBsYXllciwgYm9vbCBjb21wb3NpdGVkQ2hpbGRyZW5Pbmx5KQogewogICAgIGlmICgm
bGF5ZXIgIT0gJmNvbXBvc2l0aW5nQW5jZXN0b3IpIHsKLSAgICAgICAgaWYgKFJlbmRlckxheWVy
QmFja2luZyogbGF5ZXJCYWNraW5nID0gbGF5ZXIuYmFja2luZygpKSB7CisgICAgICAgIGlmIChh
dXRvKiBsYXllckJhY2tpbmcgPSBsYXllci5iYWNraW5nKCkpIHsKICAgICAgICAgICAgIGxheWVy
QmFja2luZy0+dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpOwogCi0gICAgICAgICAgICBpZiAoUmVu
ZGVyTGF5ZXIqIHJlZmxlY3Rpb24gPSBsYXllci5yZWZsZWN0aW9uTGF5ZXIoKSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8qIHJlZmxlY3Rpb24gPSBsYXllci5yZWZsZWN0aW9uTGF5ZXIoKSkgewog
ICAgICAgICAgICAgICAgIGlmIChyZWZsZWN0aW9uLT5iYWNraW5nKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJlZmxlY3Rpb24tPmJhY2tpbmcoKS0+dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpOwog
ICAgICAgICAgICAgfQpAQCAtMTg4MCw3ICsxODc5LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nRGVzY2VuZGFudEdlb21ldHJ5KFJlbmRlckxheWVyJiBj
b20KICAgICB9CiAgICAgCiAgICAgaWYgKCZsYXllciAhPSAmY29tcG9zaXRpbmdBbmNlc3Rvcikg
ewotICAgICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBsYXllckJhY2tpbmcgPSBsYXllci5i
YWNraW5nKCkpCisgICAgICAgIGlmIChhdXRvKiBsYXllckJhY2tpbmcgPSBsYXllci5iYWNraW5n
KCkpCiAgICAgICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKTsK
ICAgICB9CiB9CkBAIC0xOTM2LDcgKzE5MzUsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6c2V0SXNJbldpbmRvdyhib29sIGlzSW5XaW5kb3cpCiAgICAgaWYgKCFpbkNvbXBvc2l0aW5n
TW9kZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoR3JhcGhpY3NMYXllciogcm9vdExh
eWVyID0gcm9vdEdyYXBoaWNzTGF5ZXIoKSkgeworICAgIGlmIChhdXRvKiByb290TGF5ZXIgPSBy
b290R3JhcGhpY3NMYXllcigpKSB7CiAgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnRyYXZlcnNlKCpy
b290TGF5ZXIsIFtpc0luV2luZG93XShHcmFwaGljc0xheWVyJiBsYXllcikgewogICAgICAgICAg
ICAgbGF5ZXIuc2V0SXNJbldpbmRvdyhpc0luV2luZG93KTsKICAgICAgICAgfSk7CkBAIC0xOTcx
LDcgKzE5NzAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xlYXJCYWNraW5nRm9y
TGF5ZXJJbmNsdWRpbmdEZXNjZW5kYW50cyhSZW5kZXJMYXllcgogICAgICAgICBsYXllci5jbGVh
ckJhY2tpbmcoKTsKICAgICB9CiAKLSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZExheWVyID0g
bGF5ZXIuZmlyc3RDaGlsZCgpOyBjaGlsZExheWVyOyBjaGlsZExheWVyID0gY2hpbGRMYXllci0+
bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKGF1dG8qIGNoaWxkTGF5ZXIgPSBsYXllci5maXJzdENo
aWxkKCk7IGNoaWxkTGF5ZXI7IGNoaWxkTGF5ZXIgPSBjaGlsZExheWVyLT5uZXh0U2libGluZygp
KQogICAgICAgICBjbGVhckJhY2tpbmdGb3JMYXllckluY2x1ZGluZ0Rlc2NlbmRhbnRzKCpjaGls
ZExheWVyKTsKIH0KIApAQCAtMjI5OSw3ICsyMjk4LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmNsaXBwZWRCeUFuY2VzdG9yKFJlbmRlckxheWVyJiBsYXllcikgY29uc3QKICAgICBp
ZiAoIWxheWVyLmlzQ29tcG9zaXRlZCgpIHx8ICFsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBsYXll
ci5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIoKTsKKyAgICBhdXRvKiBjb21wb3NpdGluZ0FuY2Vz
dG9yID0gbGF5ZXIuYW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCk7CiAgICAgaWYgKCFjb21wb3Np
dGluZ0FuY2VzdG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIzMDgsMTIgKzIzMDcs
MTIgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNsaXBwZWRCeUFuY2VzdG9yKFJlbmRl
ckxheWVyJiBsYXllcikgY29uc3QKICAgICAvLyBhbmQgbGF5ZXIuIFRoZSBleGNlcHRpb24gaXMg
d2hlbiB0aGUgY29tcG9zaXRpbmdBbmNlc3RvciBpc29sYXRlcyBjb21wb3NpdGVkIGJsZW5kaW5n
IGNoaWxkcmVuLAogICAgIC8vIGluIHRoaXMgY2FzZSBpdCBpcyBub3QgYWxsb3dlZCB0byBjbGlw
c0NvbXBvc2l0aW5nRGVzY2VuZGFudHMoKSBhbmQgZWFjaCBvZiBpdHMgY2hpbGRyZW4KICAgICAv
LyB3aWxsIGJlIGNsaXBwZWRCeUFuY2VzdG9yKClzLCBpbmNsdWRpbmcgdGhlIGNvbXBvc2l0aW5n
QW5jZXN0b3IuCi0gICAgUmVuZGVyTGF5ZXIqIGNvbXB1dGVDbGlwUm9vdCA9IGNvbXBvc2l0aW5n
QW5jZXN0b3I7CisgICAgYXV0byogY29tcHV0ZUNsaXBSb290ID0gY29tcG9zaXRpbmdBbmNlc3Rv
cjsKICAgICBpZiAoIWNvbXBvc2l0aW5nQW5jZXN0b3ItPmlzb2xhdGVzQ29tcG9zaXRlZEJsZW5k
aW5nKCkpIHsKICAgICAgICAgY29tcHV0ZUNsaXBSb290ID0gbnVsbHB0cjsKLSAgICAgICAgUmVu
ZGVyTGF5ZXIqIHBhcmVudCA9ICZsYXllcjsKKyAgICAgICAgYXV0byogcGFyZW50ID0gJmxheWVy
OwogICAgICAgICB3aGlsZSAocGFyZW50KSB7Ci0gICAgICAgICAgICBSZW5kZXJMYXllciogbmV4
dCA9IHBhcmVudC0+cGFyZW50KCk7CisgICAgICAgICAgICBhdXRvKiBuZXh0ID0gcGFyZW50LT5w
YXJlbnQoKTsKICAgICAgICAgICAgIGlmIChuZXh0ID09IGNvbXBvc2l0aW5nQW5jZXN0b3IpIHsK
ICAgICAgICAgICAgICAgICBjb21wdXRlQ2xpcFJvb3QgPSBwYXJlbnQ7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0yMzc2LDcgKzIzNzUsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckJhY2tmYWNlVmlzaWJpbGl0eShSZW5kZXJMYXllcgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICAvLyBGSVhNRTogd29ya2Fyb3VuZCBmb3Ig
d2Via2l0Lm9yZy9iLzEzMjgwMQotICAgIFJlbmRlckxheWVyKiBzdGFja2luZ0NvbnRleHQgPSBy
ZW5kZXJlci5sYXllcigpLT5zdGFja2luZ0NvbnRhaW5lcigpOworICAgIGF1dG8qIHN0YWNraW5n
Q29udGV4dCA9IHJlbmRlcmVyLmxheWVyKCktPnN0YWNraW5nQ29udGFpbmVyKCk7CiAgICAgaWYg
KHN0YWNraW5nQ29udGV4dCAmJiBzdGFja2luZ0NvbnRleHQtPnJlbmRlcmVyKCkuc3R5bGUoKS50
cmFuc2Zvcm1TdHlsZTNEKCkgPT0gVHJhbnNmb3JtU3R5bGUzRFByZXNlcnZlM0QpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCkBAIC0yNDA3LDcgKzI0MDYsNyBAQCBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyhSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JgogI2lmIFVTRShDT01QT1NJVElOR19GT1JfU01BTExfQ0FOVkFTRVMpCiAgICAgICAgIGJv
b2wgaXNDYW52YXNMYXJnZUVub3VnaFRvRm9yY2VDb21wb3NpdGluZyA9IHRydWU7CiAjZWxzZQot
ICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0Vs
ZW1lbnQ+KHJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgICAgIGF1dG8qIGNhbnZhcyA9IGRvd25j
YXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5lbGVtZW50KCkpOwogICAgICAgICBhdXRv
IGNhbnZhc0FyZWEgPSBjYW52YXMtPnNpemUoKS5hcmVhPFJlY29yZE92ZXJmbG93PigpOwogICAg
ICAgICBib29sIGlzQ2FudmFzTGFyZ2VFbm91Z2hUb0ZvcmNlQ29tcG9zaXRpbmcgPSAhY2FudmFz
QXJlYS5oYXNPdmVyZmxvd2VkKCkgJiYgY2FudmFzQXJlYS51bnNhZmVHZXQoKSA+PSBjYW52YXNB
cmVhVGhyZXNob2xkUmVxdWlyaW5nQ29tcG9zaXRpbmc7CiAjZW5kaWYKQEAgLTI0MjksNyArMjQy
OCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9y
UGx1Z2luKFJlbmRlckxheWVyTW9kZWxPYmplY3QmCiAKICAgICBtX3JlZXZhbHVhdGVDb21wb3Np
dGluZ0FmdGVyTGF5b3V0ID0gdHJ1ZTsKICAgICAKLSAgICBSZW5kZXJXaWRnZXQmIHBsdWdpblJl
bmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcik7CisgICAgYXV0byYgcGx1
Z2luUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKTsKICAgICBpZiAo
cGx1Z2luUmVuZGVyZXIuc3R5bGUoKS52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0yNDcwLDcgKzI0NjksNyBAQCBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVs
T2JqZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBBbmltYXRpb25CYXNlOjpS
dW5uaW5nU3RhdGUgYWN0aXZlQW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25CYXNlOjpSdW5uaW5n
IHwgQW5pbWF0aW9uQmFzZTo6UGF1c2VkOwotICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGFu
aW1Db250cm9sbGVyID0gcmVuZGVyZXIuYW5pbWF0aW9uKCk7CisgICAgYXV0byYgYW5pbUNvbnRy
b2xsZXIgPSByZW5kZXJlci5hbmltYXRpb24oKTsKICAgICByZXR1cm4gKGFuaW1Db250cm9sbGVy
LmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5T3BhY2l0
eSwgYWN0aXZlQW5pbWF0aW9uU3RhdGUpCiAgICAgICAgICAgICAmJiAoaW5Db21wb3NpdGluZ01v
ZGUoKSB8fCAobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50OjpBbmltYXRlZE9w
YWNpdHlUcmlnZ2VyKSkpCiAgICAgICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1bm5pbmdB
bmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eUZpbHRlciwgYWN0aXZlQW5p
bWF0aW9uU3RhdGUpCkBAIC0yNDgyLDcgKzI0ODEsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2Jq
ZQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvcklu
ZGlyZWN0UmVhc29uKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyLCBib29sIGhhc0Nv
bXBvc2l0ZWREZXNjZW5kYW50cywgYm9vbCBoYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudHMsIFJl
bmRlckxheWVyOjpJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uJiByZWFzb24pIGNvbnN0CiB7Ci0g
ICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0Pihy
ZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRvJiBsYXllciA9ICpkb3duY2FzdDxSZW5kZXJCb3hN
b2RlbE9iamVjdD4ocmVuZGVyZXIpLmxheWVyKCk7CiAKICAgICAvLyBXaGVuIGEgbGF5ZXIgaGFz
IGNvbXBvc2l0ZWQgZGVzY2VuZGFudHMsIHNvbWUgZWZmZWN0cywgbGlrZSAyZCB0cmFuc2Zvcm1z
LCBmaWx0ZXJzLCBtYXNrcyBldGMgbXVzdCBiZSBpbXBsZW1lbnRlZAogICAgIC8vIHZpYSBjb21w
b3NpdGluZyBzbyB0aGF0IHRoZXkgYWxzbyBhcHBseSB0byB0aG9zZSBjb21wb3NpdGVkIGRlc2Nl
bmRhbnRzLgpAQCAtMjU1Niw3ICsyNTU1LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmlzQXN5bmNTY3JvbGxhYmxlU3RpY2t5TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWUKIHsK
ICAgICBBU1NFUlQobGF5ZXIucmVuZGVyZXIoKS5pc1N0aWNreVBvc2l0aW9uZWQoKSk7CiAKLSAg
ICBSZW5kZXJMYXllciogZW5jbG9zaW5nT3ZlcmZsb3dMYXllciA9IGxheWVyLmVuY2xvc2luZ092
ZXJmbG93Q2xpcExheWVyKEV4Y2x1ZGVTZWxmKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdPdmVyZmxv
d0xheWVyID0gbGF5ZXIuZW5jbG9zaW5nT3ZlcmZsb3dDbGlwTGF5ZXIoRXhjbHVkZVNlbGYpOwog
CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGlmIChlbmNsb3NpbmdPdmVyZmxvd0xheWVyICYmIGVu
Y2xvc2luZ092ZXJmbG93TGF5ZXItPmhhc1RvdWNoU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKQEAg
LTI1OTIsNyArMjU5MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjppc1ZpZXdwb3J0
Q29uc3RyYWluZWRGaXhlZE9yU3RpY2t5TGF5ZXIoY29uc3QgUmVuZGVyCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgZml4ZWQgaW5zaWRlIG9mIGEgdHJhbnNm
b3JtLCB3aGljaCBzaG91bGQgbm90IGJlaGF2ZSBhcyBmaXhlZC4KLSAgICBmb3IgKFJlbmRlckxh
eWVyKiBzdGFja2luZ0NvbnRhaW5lciA9IGxheWVyLnN0YWNraW5nQ29udGFpbmVyKCk7IHN0YWNr
aW5nQ29udGFpbmVyOyBzdGFja2luZ0NvbnRhaW5lciA9IHN0YWNraW5nQ29udGFpbmVyLT5zdGFj
a2luZ0NvbnRhaW5lcigpKSB7CisgICAgZm9yIChhdXRvKiBzdGFja2luZ0NvbnRhaW5lciA9IGxh
eWVyLnN0YWNraW5nQ29udGFpbmVyKCk7IHN0YWNraW5nQ29udGFpbmVyOyBzdGFja2luZ0NvbnRh
aW5lciA9IHN0YWNraW5nQ29udGFpbmVyLT5zdGFja2luZ0NvbnRhaW5lcigpKSB7CiAgICAgICAg
IGlmIChzdGFja2luZ0NvbnRhaW5lci0+aXNDb21wb3NpdGVkKCkgJiYgc3RhY2tpbmdDb250YWlu
ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjcyMCw3ICsyNzE5LDcgQEAgYm9vbCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6Om5lZWRzQ29udGVudHNDb21wb3NpdGluZ0xheWVyKGNvbnN0
IFJlbmRlckxheWVyJiBsYXkKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVz
U2Nyb2xsTGF5ZXIoUm9vdExheWVyQXR0YWNobWVudCBhdHRhY2htZW50KSBjb25zdAogewotICAg
IEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOworICAgIGF1
dG8mIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKIAogICAgIC8vIFRoaXMg
YXBwbGllcyB3aGVuIHRoZSBhcHBsaWNhdGlvbiBVSSBoYW5kbGVzIHNjcm9sbGluZywgaW4gd2hp
Y2ggY2FzZSBSZW5kZXJMYXllckNvbXBvc2l0b3IgZG9lc24ndCBuZWVkIHRvIG1hbmFnZSBpdC4K
ICAgICBpZiAoZnJhbWVWaWV3LmRlbGVnYXRlc1Njcm9sbGluZygpICYmIGlzTWFpbkZyYW1lQ29t
cG9zaXRvcigpKQpAQCAtMjc2NSw3ICsyNzY0LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3IK
IAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnN1cHBvcnRzRml4ZWRSb290QmFja2dyb3Vu
ZENvbXBvc2l0aW5nKCkgY29uc3QKIHsKLSAgICBSZW5kZXJMYXllckJhY2tpbmcqIHJlbmRlclZp
ZXdCYWNraW5nID0gbV9yZW5kZXJWaWV3LmxheWVyKCktPmJhY2tpbmcoKTsKKyAgICBhdXRvKiBy
ZW5kZXJWaWV3QmFja2luZyA9IG1fcmVuZGVyVmlldy5sYXllcigpLT5iYWNraW5nKCk7CiAgICAg
cmV0dXJuIHJlbmRlclZpZXdCYWNraW5nICYmIHJlbmRlclZpZXdCYWNraW5nLT5pc0ZyYW1lTGF5
ZXJXaXRoVGlsZWRCYWNraW5nKCk7CiB9CiAKQEAgLTI3ODUsNyArMjc4NCw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpuZWVkc0ZpeGVkUm9vdEJhY2tncm91bmRMYXllcihjb25zdCBS
ZW5kZXJMYXllciYgbGF5CiBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZp
eGVkUm9vdEJhY2tncm91bmRMYXllcigpIGNvbnN0CiB7CiAgICAgLy8gR2V0IHRoZSBmaXhlZCBy
b290IGJhY2tncm91bmQgZnJvbSB0aGUgUmVuZGVyVmlldyBsYXllcidzIGJhY2tpbmcuCi0gICAg
UmVuZGVyTGF5ZXIqIHZpZXdMYXllciA9IG1fcmVuZGVyVmlldy5sYXllcigpOworICAgIGF1dG8q
IHZpZXdMYXllciA9IG1fcmVuZGVyVmlldy5sYXllcigpOwogICAgIGlmICghdmlld0xheWVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjc5Nyw3ICsyNzk2LDcgQEAgR3JhcGhpY3NM
YXllciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSBj
b25zdAogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVzZXRUcmFja2VkUmVwYWludFJl
Y3RzKCkKIHsKLSAgICBpZiAoR3JhcGhpY3NMYXllciogcm9vdExheWVyID0gcm9vdEdyYXBoaWNz
TGF5ZXIoKSkgeworICAgIGlmIChhdXRvKiByb290TGF5ZXIgPSByb290R3JhcGhpY3NMYXllcigp
KSB7CiAgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnRyYXZlcnNlKCpyb290TGF5ZXIsIFtdKEdyYXBo
aWNzTGF5ZXImIGxheWVyKSB7CiAgICAgICAgICAgICBsYXllci5yZXNldFRyYWNrZWRSZXBhaW50
cygpOwogICAgICAgICB9KTsKQEAgLTI4MjMsNyArMjgyMiw3IEBAIGZsb2F0IFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6Y29udGVudHNTY2FsZU11bHRpcGxpZXJGb3JOZXdUaWxlcyhjb25zdCBHcmFw
aGljc0xhCiB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIExlZ2FjeVRpbGVDYWNoZSogdGlsZUNh
Y2hlID0gbnVsbHB0cjsKLSAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBwYWdlKCkubWFp
bkZyYW1lKCkudmlldygpKQorICAgIGlmIChhdXRvKiBmcmFtZVZpZXcgPSBwYWdlKCkubWFpbkZy
YW1lKCkudmlldygpKQogICAgICAgICB0aWxlQ2FjaGUgPSBmcmFtZVZpZXctPmxlZ2FjeVRpbGVD
YWNoZSgpOwogCiAgICAgaWYgKCF0aWxlQ2FjaGUpCkBAIC0yODQyLDExICsyODQxLDExIEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRDb21taXRDaGFuZ2VzRm9yTGF5ZXIoY29uc3Qg
R3JhcGhpY3NMYXllciopIGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkb2N1
bWVudFVzZXNUaWxlZEJhY2tpbmcoKSBjb25zdAogewotICAgIFJlbmRlckxheWVyKiBsYXllciA9
IG1fcmVuZGVyVmlldy5sYXllcigpOworICAgIGF1dG8qIGxheWVyID0gbV9yZW5kZXJWaWV3Lmxh
eWVyKCk7CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVu
ZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXItPmJhY2tpbmcoKTsKKyAgICBhdXRvKiBi
YWNraW5nID0gbGF5ZXItPmJhY2tpbmcoKTsKICAgICBpZiAoIWJhY2tpbmcpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMjg2MCw3ICsyODU5LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmlzTWFpbkZyYW1lQ29tcG9zaXRvcigpIGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpzaG91bGRDb21wb3NpdGVPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKIHsKLSAg
ICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKKyAgICBh
dXRvJiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CiAKICAgICBpZiAoZnJh
bWVWaWV3LnBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5ODYs
NyArMjk4NSw3IEBAIEdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
TGF5ZXJGb3JIZWFkZXIoYm9vbCB3YW50c0xheWVyKQogCiAgICAgICAgICAgICAvLyBUaGUgU2Ny
b2xsaW5nVHJlZSBrbm93cyBhYm91dCB0aGUgaGVhZGVyIGxheWVyLCBhbmQgdGhlIHBvc2l0aW9u
IG9mIHRoZSByb290IGxheWVyIGlzIGFmZmVjdGVkCiAgICAgICAgICAgICAvLyBieSB0aGUgaGVh
ZGVyIGxheWVyLCBzbyBpZiB3ZSByZW1vdmUgdGhlIGhlYWRlciwgd2UgbmVlZCB0byB0ZWxsIHRo
ZSBzY3JvbGxpbmcgdHJlZS4KLSAgICAgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAg
ICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkKICAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJh
bWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zMDA0LDcgKzMwMDMsNyBAQCBHcmFw
aGljc0xheWVyKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyRm9ySGVhZGVyKGJv
b2wgd2FudHNMYXllcikKICAgICBtX2xheWVyRm9ySGVhZGVyLT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50M0QoKSk7CiAgICAgbV9sYXllckZvckhlYWRlci0+c2V0U2l6ZShGbG9hdFNpemUobV9y
ZW5kZXJWaWV3LmZyYW1lVmlldygpLnZpc2libGVXaWR0aCgpLCBtX3JlbmRlclZpZXcuZnJhbWVW
aWV3KCkuaGVhZGVySGVpZ2h0KCkpKTsKIAotICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAg
IGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpCiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdSb290TGF5ZXJE
aWRDaGFuZ2UobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpKTsKIAogICAgIHBhZ2UoKS5jaHJvbWUo
KS5jbGllbnQoKS5kaWRBZGRIZWFkZXJMYXllcigqbV9sYXllckZvckhlYWRlcik7CkBAIC0zMDI0
LDcgKzMwMjMsNyBAQCBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0
ZUxheWVyRm9yRm9vdGVyKGJvb2wgd2FudHNMYXllcikKIAogICAgICAgICAgICAgLy8gVGhlIFNj
cm9sbGluZ1RyZWUga25vd3MgYWJvdXQgdGhlIGZvb3RlciBsYXllciwgYW5kIHRoZSB0b3RhbCBz
Y3JvbGxhYmxlIHNpemUgaXMgYWZmZWN0ZWQKICAgICAgICAgICAgIC8vIGJ5IHRoZSBmb290ZXIg
bGF5ZXIsIHNvIGlmIHdlIHJlbW92ZSB0aGUgZm9vdGVyLCB3ZSBuZWVkIHRvIHRlbGwgdGhlIHNj
cm9sbGluZyB0cmVlLgotICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29y
ZGluYXRvcigpKQogICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZp
ZXdSb290TGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMwNDIsNyArMzA0MSw3IEBAIEdyYXBoaWNz
TGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JGb290ZXIoYm9vbCB3
YW50c0xheWVyKQogICAgIG1fbGF5ZXJGb3JGb290ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQzRCgpKTsKICAgICBtX2xheWVyRm9yRm9vdGVyLT5zZXRTaXplKEZsb2F0U2l6ZShtX3JlbmRl
clZpZXcuZnJhbWVWaWV3KCkudmlzaWJsZVdpZHRoKCksIG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mb290ZXJIZWlnaHQoKSkpOwogCi0gICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgaWYg
KGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENo
YW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkpOwogCiAgICAgcGFnZSgpLmNocm9tZSgpLmNs
aWVudCgpLmRpZEFkZEZvb3RlckxheWVyKCptX2xheWVyRm9yRm9vdGVyKTsKQEAgLTMxODcsMTQg
KzMxODYsMTQgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbG93Q29u
dHJvbHNMYXllcnMoKQogI2VuZGlmCiAgICAgICAgICAgICBtX292ZXJmbG93Q29udHJvbHNIb3N0
TGF5ZXItPmFkZENoaWxkKG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpKTsKIAot
ICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICBpZiAoYXV0byog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQogICAg
ICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSwgSG9yaXpvbnRhbFNjcm9s
bGJhcik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKSB7CiAgICAgICAgIG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyLT5yZW1vdmVG
cm9tUGFyZW50KCk7CiAgICAgICAgIG1fbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyID0gbnVs
bHB0cjsKIAotICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgaWYgKGF1dG8q
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAg
ICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSwgSG9yaXpvbnRhbFNjcm9sbGJh
cik7CiAgICAgfQogCkBAIC0zMjA5LDE0ICszMjA4LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKICNlbmRpZgogICAgICAgICAg
ICAgbV9vdmVyZmxvd0NvbnRyb2xzSG9zdExheWVyLT5hZGRDaGlsZChtX2xheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXIuZ2V0KCkpOwogCi0gICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0
b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkK
KyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LmZyYW1l
VmlldygpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1f
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcikgewogICAgICAgICBtX2xheWVyRm9yVmVydGljYWxT
Y3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICAgICAgbV9sYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyID0gbnVsbHB0cjsKIAotICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3Iq
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSkKICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxl
QXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSwgVmVy
dGljYWxTY3JvbGxiYXIpOwogICAgIH0KIApAQCAtMzI1NCw3ICszMjUzLDcgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmVuc3VyZVJvb3RMYXllcigpCiAKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgICAgIC8vIFBhZ2Ugc2NhbGUgaXMgYXBwbGllZCBhYm92ZSB0aGlzIG9uIGlPUywgc28g
d2UnbGwganVzdCBzYXkgdGhhdCBvdXIgcm9vdCBsYXllciBhcHBsaWVzIGl0LgotICAgICAgICBG
cmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICAgICAg
YXV0byYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKICAgICAgICAg
aWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCiAgICAgICAgICAgICBtX3Jvb3RDb250ZW50TGF5ZXIt
PnNldEFwcGxpZXNQYWdlU2NhbGUoKTsKICNlbmRpZgpAQCAtMzMyOCwxOCArMzMyNywxOCBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGVzdHJveVJvb3RMYXllcigpCiAgICAgaWYgKG1f
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIG1fbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7CiAgICAgICAgIG1fbGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xs
YWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCks
IEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgICAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFs
U2Nyb2xsYmFyID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnZlcnRpY2FsU2Nyb2xsYmFyKCkp
CisgICAgICAgIGlmIChhdXRvKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gbV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLnZlcnRpY2FsU2Nyb2xsYmFyKCkpCiAgICAgICAgICAgICBtX3JlbmRlclZpZXcu
ZnJhbWVWaWV3KCkuaW52YWxpZGF0ZVNjcm9sbGJhcigqaG9yaXpvbnRhbFNjcm9sbGJhciwgSW50
UmVjdChJbnRQb2ludCgwLCAwKSwgaG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkuc2l6
ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcikgewog
ICAgICAgICBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsK
ICAgICAgICAgbV9sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyID0gbnVsbHB0cjsKLSAgICAgICAg
aWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgICAgICBzY3JvbGxp
bmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX3Jl
bmRlclZpZXcuZnJhbWVWaWV3KCksIFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICAgICAgaWYgKFNj
cm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudmVy
dGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgaWYgKGF1dG8qIHZlcnRpY2FsU2Nyb2xsYmFyID0g
bV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnZlcnRpY2FsU2Nyb2xsYmFyKCkpCiAgICAgICAgICAg
ICBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuaW52YWxpZGF0ZVNjcm9sbGJhcigqdmVydGljYWxT
Y3JvbGxiYXIsIEludFJlY3QoSW50UG9pbnQoMCwgMCksIHZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFt
ZVJlY3QoKS5zaXplKCkpKTsKICAgICB9CiAKQEAgLTMzNzEsNyArMzM3MCw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hSb290TGF5ZXIoUm9vdExheWVyQXR0YWNobWVudCBh
dHRhY2htZW50KQogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBSb290TGF5ZXJBdHRhY2hlZFZpYUNocm9tZUNsaWVudDog
ewotICAgICAgICAgICAgRnJhbWUmIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZy
YW1lKCk7CisgICAgICAgICAgICBhdXRvJiBmcmFtZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpOwogICAgICAgICAgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKGZyYW1lLCByb290R3JhcGhpY3NMYXllcigpKTsKICAgICAgICAgICAg
IGlmIChmcmFtZS5pc01haW5GcmFtZSgpKQogICAgICAgICAgICAgICAgIHBhZ2UoKS5jaHJvbWUo
KS5jbGllbnQoKS5hdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoZnJhbWUsICZmcmFtZS5t
YWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5sYXllcldpdGhWaWV3T3ZlcmxheXMo
KSk7CkBAIC0zNDA5LDEyICszNDA4LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpk
ZXRhY2hSb290TGF5ZXIoKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3Jvb3RDb250ZW50
TGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKIAotICAgICAgICBpZiAoSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBvd25lckVsZW1lbnQgPSBtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5vd25lckVsZW1l
bnQoKSkKKyAgICAgICAgaWYgKGF1dG8qIG93bmVyRWxlbWVudCA9IG1fcmVuZGVyVmlldy5kb2N1
bWVudCgpLm93bmVyRWxlbWVudCgpKQogICAgICAgICAgICAgb3duZXJFbGVtZW50LT5zY2hlZHVs
ZUludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgUm9vdExheWVyQXR0YWNoZWRWaWFDaHJvbWVDbGllbnQ6IHsKLSAgICAg
ICAgRnJhbWUmIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7CisgICAg
ICAgIGF1dG8mIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7CiAgICAg
ICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hSb290R3JhcGhpY3NMYXllcihmcmFt
ZSwgbnVsbHB0cik7CiAgICAgICAgIGlmIChmcmFtZS5pc01haW5GcmFtZSgpKSB7CiAgICAgICAg
ICAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xh
eWVyKGZyYW1lLCBudWxscHRyKTsKQEAgLTM0NDMsMTIgKzM0NDIsMTIgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJvb3RMYXllckF0dGFjaG1lbnRDaGFuZ2VkKCkKICAgICBpZiAobV9y
b290TGF5ZXJBdHRhY2htZW50ID09IFJvb3RMYXllclVuYXR0YWNoZWQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEZyYW1lJiBmcmFtZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgp
OworICAgIGF1dG8mIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7CiAK
ICAgICAvLyBUaGUgYXR0YWNobWVudCBjYW4gYWZmZWN0IHdoZXRoZXIgdGhlIFJlbmRlclZpZXcg
bGF5ZXIncyBwYWludHNJbnRvV2luZG93KCkgYmVoYXZpb3IsCiAgICAgLy8gc28gY2FsbCB1cGRh
dGVEcmF3c0NvbnRlbnQoKSB0byB1cGRhdGUgdGhhdC4KLSAgICBSZW5kZXJMYXllciogbGF5ZXIg
PSBtX3JlbmRlclZpZXcubGF5ZXIoKTsKLSAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNr
aW5nID0gbGF5ZXIgPyBsYXllci0+YmFja2luZygpIDogbnVsbHB0cikKKyAgICBhdXRvKiBsYXll
ciA9IG1fcmVuZGVyVmlldy5sYXllcigpOworICAgIGlmIChhdXRvKiBiYWNraW5nID0gbGF5ZXIg
PyBsYXllci0+YmFja2luZygpIDogbnVsbHB0cikKICAgICAgICAgYmFja2luZy0+dXBkYXRlRHJh
d3NDb250ZW50KCk7CiAKICAgICBpZiAoIWZyYW1lLmlzTWFpbkZyYW1lKCkpCkBAIC0zNDYxLDcg
KzM0NjAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bm90aWZ5SUZyYW1lc09mQ29t
cG9zaXRpbmdDaGFuZ2UoKQogewogICAgIC8vIENvbXBvc2l0aW5nIGFmZmVjdHMgdGhlIGFuc3dl
ciB0byBSZW5kZXJJRnJhbWU6OnJlcXVpcmVzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpLCBzbwog
ICAgIC8vIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBzdHlsZSByZWNhbGMgaW4gb3VyIHBhcmVudCBk
b2N1bWVudC4KLSAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSBt
X3JlbmRlclZpZXcuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKSkKKyAgICBpZiAoYXV0byogb3du
ZXJFbGVtZW50ID0gbV9yZW5kZXJWaWV3LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpCiAgICAg
ICAgIG93bmVyRWxlbWVudC0+c2NoZWR1bGVJbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0
aW9uKCk7CiB9CiAKQEAgLTM1MDYsOCArMzUwNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKQogewogICAgIC8vIFBhZ2Ugc2Nh
bGUgd2lsbCBvbmx5IGJlIGFwcGxpZWQgYXQgdG8gdGhlIFJlbmRlclZpZXcgYW5kIHN1YmxheWVy
cywgYnV0IHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yCiAgICAgLy8gbmVlZHMgdG8gYmUgYXBwbGll
ZCBhdCB0aGUgbGV2ZWwgb2Ygcm9vdEdyYXBoaWNzTGF5ZXIoKS4KLSAgICBHcmFwaGljc0xheWVy
KiByb290TGF5ZXIgPSByb290R3JhcGhpY3NMYXllcigpOwotICAgIGlmIChyb290TGF5ZXIpCisg
ICAgaWYgKGF1dG8qIHJvb3RMYXllciA9IHJvb3RHcmFwaGljc0xheWVyKCkpCiAgICAgICAgIHJv
b3RMYXllci0+bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2Nl
bmRhbnRzKCk7CiB9CiAKQEAgLTM1NDYsNyArMzU0NCw3IEBAIEZpeGVkUG9zaXRpb25WaWV3cG9y
dENvbnN0cmFpbnRzIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUZpeGVkVmlld3BvcnRD
b25zCiB7CiAgICAgQVNTRVJUKGxheWVyLmlzQ29tcG9zaXRlZCgpKTsKIAotICAgIEdyYXBoaWNz
TGF5ZXIqIGdyYXBoaWNzTGF5ZXIgPSBsYXllci5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIoKTsK
KyAgICBhdXRvKiBncmFwaGljc0xheWVyID0gbGF5ZXIuYmFja2luZygpLT5ncmFwaGljc0xheWVy
KCk7CiAKICAgICBGaXhlZFBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBjb25zdHJhaW50czsK
ICAgICBjb25zdHJhaW50cy5zZXRMYXllclBvc2l0aW9uQXRMYXN0TGF5b3V0KGdyYXBoaWNzTGF5
ZXItPnBvc2l0aW9uKCkpOwpAQCAtMzU4NiwxMiArMzU4NCwxMiBAQCBTdGlja3lQb3NpdGlvblZp
ZXdwb3J0Q29uc3RyYWludHMgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlU3RpY2t5Vmll
d3BvcnRDbwogICAgIEFTU0VSVCghbGF5ZXIuZW5jbG9zaW5nT3ZlcmZsb3dDbGlwTGF5ZXIoRXhj
bHVkZVNlbGYpKTsKICNlbmRpZgogCi0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QmIHJlbmRlcmVy
ID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KGxheWVyLnJlbmRlcmVyKCkpOworICAg
IGF1dG8mIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KGxheWVyLnJl
bmRlcmVyKCkpOwogCiAgICAgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIGNvbnN0
cmFpbnRzOwogICAgIHJlbmRlcmVyLmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzKGNv
bnN0cmFpbnRzLCByZW5kZXJlci5jb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24oKSk7
CiAKLSAgICBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyID0gbGF5ZXIuYmFja2luZygpLT5n
cmFwaGljc0xheWVyKCk7CisgICAgYXV0byogZ3JhcGhpY3NMYXllciA9IGxheWVyLmJhY2tpbmco
KS0+Z3JhcGhpY3NMYXllcigpOwogICAgIGNvbnN0cmFpbnRzLnNldExheWVyUG9zaXRpb25BdExh
c3RMYXlvdXQoZ3JhcGhpY3NMYXllci0+cG9zaXRpb24oKSk7CiAgICAgY29uc3RyYWludHMuc2V0
U3RpY2t5T2Zmc2V0QXRMYXN0TGF5b3V0KHJlbmRlcmVyLnN0aWNreVBvc2l0aW9uT2Zmc2V0KCkp
OwogICAgIGNvbnN0cmFpbnRzLnNldEFsaWdubWVudE9mZnNldChncmFwaGljc0xheWVyLT5waXhl
bEFsaWdubWVudE9mZnNldCgpKTsKQEAgLTM2MDEsOSArMzU5OSw5IEBAIFN0aWNreVBvc2l0aW9u
Vmlld3BvcnRDb25zdHJhaW50cyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVTdGlja3lW
aWV3cG9ydENvCiAKIHN0YXRpYyBTY3JvbGxpbmdOb2RlSUQgZW5jbG9zaW5nU2Nyb2xsaW5nTm9k
ZUlEKFJlbmRlckxheWVyJiBsYXllciwgSW5jbHVkZVNlbGZPck5vdCBpbmNsdWRlU2VsZikKIHsK
LSAgICBSZW5kZXJMYXllciogY3VyckxheWVyID0gaW5jbHVkZVNlbGYgPT0gSW5jbHVkZVNlbGYg
PyAmbGF5ZXIgOiBsYXllci5wYXJlbnQoKTsKKyAgICBhdXRvKiBjdXJyTGF5ZXIgPSBpbmNsdWRl
U2VsZiA9PSBJbmNsdWRlU2VsZiA/ICZsYXllciA6IGxheWVyLnBhcmVudCgpOwogICAgIHdoaWxl
IChjdXJyTGF5ZXIpIHsKLSAgICAgICAgaWYgKFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9
IGN1cnJMYXllci0+YmFja2luZygpKSB7CisgICAgICAgIGlmIChhdXRvKiBiYWNraW5nID0gY3Vy
ckxheWVyLT5iYWNraW5nKCkpIHsKICAgICAgICAgICAgIGlmIChTY3JvbGxpbmdOb2RlSUQgbm9k
ZUlEID0gYmFja2luZy0+c2Nyb2xsaW5nTm9kZUlERm9yQ2hpbGRyZW4oKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZUlEOwogICAgICAgICB9CkBAIC0zNjE5LDEyICszNjE3LDEyIEBAIHN0
YXRpYyBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsQ29vcmRpbmF0ZWRBbmNlc3RvckluUGFyZW50T2ZG
cmFtZShGcmFtZSYgZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRmluZCB0aGUg
ZnJhbWUncyBlbmNsb3NpbmcgbGF5ZXIgaW4gb3VyIHJlbmRlciB0cmVlLgotICAgIEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gZnJhbWUuZG9jdW1lbnQoKS0+b3duZXJFbGVt
ZW50KCk7Ci0gICAgUmVuZGVyRWxlbWVudCogZnJhbWVSZW5kZXJlciA9IG93bmVyRWxlbWVudCA/
IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKSA6IG51bGxwdHI7CisgICAgYXV0byogb3duZXJFbGVt
ZW50ID0gZnJhbWUuZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CisgICAgYXV0byogZnJhbWVS
ZW5kZXJlciA9IG93bmVyRWxlbWVudCA/IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKSA6IG51bGxw
dHI7CiAgICAgaWYgKCFmcmFtZVJlbmRlcmVyKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJl
bmRlckxheWVyKiBsYXllckluUGFyZW50RG9jdW1lbnQgPSBmcmFtZVJlbmRlcmVyLT5lbmNsb3Np
bmdMYXllcigpOworICAgIGF1dG8qIGxheWVySW5QYXJlbnREb2N1bWVudCA9IGZyYW1lUmVuZGVy
ZXItPmVuY2xvc2luZ0xheWVyKCk7CiAgICAgaWYgKCFsYXllckluUGFyZW50RG9jdW1lbnQpCiAg
ICAgICAgIHJldHVybiAwOwogCkBAIC0zNjM4LDE0ICszNjM2LDE0IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZWF0dGFjaFN1YmZyYW1lU2Nyb2xsTGF5ZXJzKCkKICAgICAKICAgICBt
X3N1YmZyYW1lU2Nyb2xsTGF5ZXJzTmVlZFJlYXR0YWNoID0gZmFsc2U7CiAKLSAgICBTY3JvbGxp
bmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29y
ZGluYXRvcigpOworICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKTsKIAogICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9yZW5kZXJWaWV3
LmZyYW1lVmlldygpLmZyYW1lKCkudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICghY2hpbGQtPmRvY3Vt
ZW50KCkgfHwgIWNoaWxkLT52aWV3KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICAvLyBJZ25vcmUgZnJhbWVzIHRoYXQgYXJlIG5vdCBzY3JvbGwtY29vcmRpbmF0ZWQuCi0gICAg
ICAgIEZyYW1lVmlldyogY2hpbGRGcmFtZVZpZXcgPSBjaGlsZC0+dmlldygpOworICAgICAgICBh
dXRvKiBjaGlsZEZyYW1lVmlldyA9IGNoaWxkLT52aWV3KCk7CiAgICAgICAgIFNjcm9sbGluZ05v
ZGVJRCBmcmFtZVNjcm9sbGluZ05vZGVJRCA9IGNoaWxkRnJhbWVWaWV3LT5zY3JvbGxMYXllcklE
KCk7CiAgICAgICAgIGlmICghZnJhbWVTY3JvbGxpbmdOb2RlSUQpCiAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTM2NzQsOCArMzY3Miw4IEBAIHN0YXRpYyBpbmxpbmUgTGF5ZXJTY3JvbGxDb29y
ZGluYXRpb25Sb2xlIHNjcm9sbENvb3JkaW5hdGlvblJvbGVGb3JOb2RlVHlwZShTY3JvCiAKIFNj
cm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUo
UmVuZGVyTGF5ZXImIGxheWVyLCBTY3JvbGxpbmdOb2RlVHlwZSBub2RlVHlwZSwgU2Nyb2xsaW5n
Tm9kZUlEIHBhcmVudE5vZGVJRCkKIHsKLSAgICBTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xs
aW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpOwotICAgIFJlbmRl
ckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKKyAgICBhdXRvKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgYXV0
byogYmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKICAgICAvLyBDcmFzaCBsb2dzIHN1Z2dlc3Qg
dGhhdCBiYWNraW5nIGNhbiBiZSBudWxsIGhlcmUsIGJ1dCB3ZSBkb24ndCBrbm93IGhvdzogcmRh
cjovL3Byb2JsZW0vMTg1NDU0NTIuCiAgICAgQVNTRVJUKGJhY2tpbmcpOwogICAgIGlmICghYmFj
a2luZykKQEAgLTM2OTgsNyArMzY5Niw3IEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUoUmVuZGVyTGF5ZXImIGxheWVyLCBTCiAKIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hTY3JvbGxDb29yZGluYXRlZExheWVyKFJl
bmRlckxheWVyJiBsYXllciwgTGF5ZXJTY3JvbGxDb29yZGluYXRpb25Sb2xlcyByb2xlcykKIHsK
LSAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CisgICAg
YXV0byogYmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKICAgICBpZiAoIWJhY2tpbmcpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMzcxNyw3ICszNzE1LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmRldGFjaFNjcm9sbENvb3JkaW5hdGVkTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBM
YXkKIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGlv
bkZvclRoaXNGcmFtZShTY3JvbGxpbmdOb2RlSUQgcGFyZW50Tm9kZUlEKQogewotICAgIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCk7CisgICAgYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3Jv
bGxpbmdDb29yZGluYXRvcigpOwogICAgIEFTU0VSVChzY3JvbGxpbmdDb29yZGluYXRvci0+Y29v
cmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpKSk7
CiAKICAgICBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEID0gYXR0YWNoU2Nyb2xsaW5nTm9kZSgqbV9y
ZW5kZXJWaWV3LmxheWVyKCksIEZyYW1lU2Nyb2xsaW5nTm9kZSwgcGFyZW50Tm9kZUlEKTsKQEAg
LTM3MjYsNyArMzcyNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3Jv
bGxDb29yZGluYXRpb25Gb3JUaGlzRnJhbWUoU2Nyb2xsaW5nTm9kZUlECiAKIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyKFJlbmRlckxheWVy
JiBsYXllciwgTGF5ZXJTY3JvbGxDb29yZGluYXRpb25Sb2xlcyByZWFzb25zLCBPcHRpb25TZXQ8
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzPiBjaGFuZ2VzKQogewotICAgIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCk7CisgICAgYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29y
ZGluYXRvcigpOwogICAgIGlmICghc2Nyb2xsaW5nQ29vcmRpbmF0b3IgfHwgIXNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5jb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhtX3JlbmRlclZpZXcu
ZnJhbWVWaWV3KCkpKQogICAgICAgICByZXR1cm47CiAKQEAgLTM3MzgsNyArMzczNiw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRlZExheWVyKFJl
bmRlckxheWVyJiBsYXllciwgTGF5CiAgICAgQVNTRVJUKG1fc2Nyb2xsQ29vcmRpbmF0ZWRMYXll
cnMuY29udGFpbnMoJmxheWVyKSk7CiAgICAgQVNTRVJUKGxheWVyLmlzQ29tcG9zaXRlZCgpKTsK
IAotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKKyAg
ICBhdXRvKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIGlmICghYmFja2luZykKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zODk5LDcgKzM4OTcsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKQogdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKQogewogICAgIGZvciAoYXV0
byogbGF5ZXIgOiBtX3Njcm9sbGluZ0xheWVycykgewotICAgICAgICBSZW5kZXJMYXllckJhY2tp
bmcqIGJhY2tpbmcgPSBsYXllci0+YmFja2luZygpOworICAgICAgICBhdXRvKiBiYWNraW5nID0g
bGF5ZXItPmJhY2tpbmcoKTsKICAgICAgICAgQVNTRVJUKGJhY2tpbmcpOwogICAgICAgICBwYWdl
KCkuY2hyb21lKCkuY2xpZW50KCkucmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXItPnJlbmRlcmVy
KCkuZWxlbWVudCgpLCBiYWNraW5nLT5zY3JvbGxpbmdMYXllcigpLT5wbGF0Zm9ybUxheWVyKCks
IGJhY2tpbmctPnNjcm9sbGluZ0NvbnRlbnRzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKICAg
ICB9CkBAIC0zOTA4LDcgKzM5MDYsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dW5y
ZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpCiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIs
IFJlbmRlckxheWVyQmFja2luZyYgYmFja2luZykKIHsKLSAgICBpZiAoU2Nyb2xsaW5nQ29vcmRp
bmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkgeworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpIHsKICAgICAgICAgYmFja2luZy5kZXRhY2hGcm9tU2Nyb2xsaW5nQ29v
cmRpbmF0b3IoU2Nyb2xsaW5nKTsKIAogICAgICAgICAvLyBGb3IgQ29vcmRpbmF0ZWQgR3JhcGhp
Y3MuCkBAIC0zOTIzLDggKzM5MjEsOCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6d2ls
bFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheQogICAgIGlm
IChtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5wYWdlQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpO
b3RJblBhZ2VDYWNoZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGxhdGZvcm1MYXllciogc2Ny
b2xsaW5nTGF5ZXIgPSBiYWNraW5nLnNjcm9sbGluZ0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKTsK
LSAgICBQbGF0Zm9ybUxheWVyKiBjb250ZW50c0xheWVyID0gYmFja2luZy5zY3JvbGxpbmdDb250
ZW50c0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICBhdXRvKiBzY3JvbGxpbmdMYXllciA9
IGJhY2tpbmcuc2Nyb2xsaW5nTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpOworICAgIGF1dG8qIGNv
bnRlbnRzTGF5ZXIgPSBiYWNraW5nLnNjcm9sbGluZ0NvbnRlbnRzTGF5ZXIoKS0+cGxhdGZvcm1M
YXllcigpOwogICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5yZW1vdmVTY3JvbGxpbmdMYXll
cihsYXllci5yZW5kZXJlcigpLmVsZW1lbnQoKSwgc2Nyb2xsaW5nTGF5ZXIsIGNvbnRlbnRzTGF5
ZXIpOwogI2VuZGlmCiB9CkBAIC0zOTMzLDcgKzM5MzEsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQogewogICAg
IHVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkU3RhdHVzKGxheWVyLCB7IFNjcm9sbGluZ05vZGVDaGFu
Z2VGbGFnczo6TGF5ZXIsIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSB9
KTsKIAotICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgaWYgKGF1dG8qIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewogICAgICAgICAv
LyBGb3IgQ29vcmRpbmF0ZWQgR3JhcGhpY3MuCiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5zY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKGxheWVyKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNDAyOCw3ICs0MDI2LDcgQEAgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4g
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IKICNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0
ZVNjcm9sbFNuYXBQcm9wZXJ0aWVzV2l0aEZyYW1lVmlldyhjb25zdCBGcmFtZVZpZXcmIGZyYW1l
VmlldykKIHsKLSAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIGNvb3JkaW5hdG9yID0gc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICBpZiAoYXV0byogY29vcmRpbmF0b3IgPSBzY3JvbGxp
bmdDb29yZGluYXRvcigpKQogICAgICAgICBjb29yZGluYXRvci0+dXBkYXRlU2Nyb2xsU25hcFBy
b3BlcnRpZXNXaXRoRnJhbWVWaWV3KGZyYW1lVmlldyk7CiB9CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325154</attachid>
            <date>2017-10-27 06:08:09 -0700</date>
            <delta_ts>2017-10-27 07:37:36 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-178570-20171027150807.patch</filename>
            <type>text/plain</type>
            <size>73481</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0MTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2IwMGYxMDAyMzcwZmFm
ZmRlZmIzNGVlOWRhNDg3YWM3M2Q2ZTUyMi4uZGYwMzFmYzBmM2RlNWU1MTg0YjA4MTFmYzA5MTcw
ZjhjMDRmYTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMCBAQAorMjAxNy0xMC0yNyAgRnJl
ZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgVXNlIGF1dG8gZm9yIHNv
bWUgdmFyaWFibGVzIGluIFJlbmRlckxheWVyQ29tcG9zaXRvci9CYWNraW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg1NzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGJlaGF2aW9y
IHVuY2hhbmdlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OlJlbmRlckxheWVyQmFja2luZyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlUGFnZVRpbGVkQmFja2luZ0NvdmVyYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bGF5ZXJXaWxsQmVEZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVCYWNrZHJvcEZpbHRlcnNH
ZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9ybWVk
T3JVc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjp1cGRhdGVDb21wb3NpdGVkQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlQWZ0ZXJXaWRnZXRSZXNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVBZnRlckxheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcHV0ZWRPZmZzZXRzOjpmcm9tQW5jZXN0b3JHcmFwaGljc0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVJbnRlcm5hbEhpZXJh
cmNoeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3Zl
cmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6Omhhc1VucG9zaXRpb25lZE92ZXJmbG93Q29udHJvbHNMYXllcnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wb3NpdGluZ09wYWNpdHkgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6aXNSZXN0YXJ0ZWRQbHVnaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjppc0RpcmVjdGx5Q29tcG9zaXRlZEltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlSW1hZ2VDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVl
ZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250
ZW50c05lZWREaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6Z2V0Q3VycmVudFRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OmxvZ0ZpbGxlZFZpc2libGVGcmVzaFRpbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydEFuaW1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbXBvc2l0ZWRCb3VuZHNJbmNsdWRpbmdNYXJnaW4g
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRh
dGVTY3JvbGxDb29yZGluYXRlZExheWVyc0FmdGVyRmx1c2hJbmNsdWRpbmdTdWJmcmFtZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJXaXRoQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkRmx1c2hDaGFuZ2VzRm9yTGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRQYWludEJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRDaGFu
Z2VWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmVuY2xvc2luZ0NvbXBvc2l0b3JGbHVzaGluZ0xheWVycyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXBwZW5kRG9jdW1lbnRPdmVy
bGF5TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6bG9n
TGF5ZXJJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrSWZEZXNjZW5kYW50Q2xpcHBpbmdD
b250ZXh0TmVlZHNVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVDaGFuZ2VSZXF1aXJl
c0xheWVyUmVidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmNhbkNvbXBvc2l0ZUNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9yQ29t
cG9zaXRpbmdUZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXBhaW50T25Db21wb3NpdGluZ0NoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcGFpbnRJbkNvbXBvc2l0ZWRBbmNlc3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ05vblN0YWNraW5nQ2xpcHBp
bmdMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnNldENvbXBvc2l0aW5nUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aGFzQ29vcmRpbmF0ZWRTY3JvbGxpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxMYXll
clBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cG9z
aXRpb25Gb3JDbGlwTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpmcmFtZVZpZXdEaWRMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyb290Rml4ZWRCYWNrZ3JvdW5kc0NoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxpbmdMYXllckRpZENoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZyYW1lQ29udGVudHND
b21wb3NpdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFy
ZW50RnJhbWVDb250ZW50TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlTGF5ZXJUcmVlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0Rlc2NlbmRhbnRHZW9tZXRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldElzSW5XaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjbGVhckJhY2tpbmdG
b3JMYXllckluY2x1ZGluZ0Rlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Y2xpcHBlZEJ5QW5jZXN0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmFja2ZhY2VW
aXNpYmlsaXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckNhbnZhcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQbHVnaW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yQW5pbWF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckluZGlyZWN0UmVhc29uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNBc3luY1Njcm9s
bGFibGVTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzU2Nyb2xs
TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpz
dXBwb3J0c0ZpeGVkUm9vdEJhY2tncm91bmRDb21wb3NpdGluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZpeGVkUm9vdEJhY2tncm91bmRMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlc2V0VHJh
Y2tlZFJlcGFpbnRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNvbnRlbnRzU2NhbGVNdWx0aXBsaWVyRm9yTmV3VGlsZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkb2N1bWVudFVzZXNUaWxlZEJhY2tpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzaG91bGRD
b21wb3NpdGVPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JIZWFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckZvckZvb3Rlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNM
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjplbnN1cmVS
b290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXN0
cm95Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
YXR0YWNoUm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRv
cjo6ZGV0YWNoUm9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cm9vdExheWVyQXR0YWNobWVudENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpub3RpZnlJRnJhbWVzT2ZDb21wb3NpdGluZ0NoYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldmljZU9yUGFnZVNjYWxl
RmFjdG9yQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmNvbXB1dGVGaXhlZFZpZXdwb3J0Q29uc3RyYWludHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlU3RpY2t5Vmlld3BvcnRDb25zdHJhaW50
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdTY3JvbGxpbmdOb2RlSUQpOgor
ICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsQ29vcmRpbmF0ZWRBbmNlc3RvckluUGFyZW50T2ZGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYXR0YWNoU3Vi
ZnJhbWVTY3JvbGxMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjphdHRhY2hTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGlvbkZvclRo
aXNGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0
ZVNjcm9sbENvb3JkaW5hdGVkTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1bnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRBZGRT
Y3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZVNjcm9sbFNuYXBQcm9wZXJ0aWVzV2l0aEZyYW1lVmlldyk6CisKIDIwMTctMTAtMjcg
IEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3Ry
ZWFtZXJdW01TRV0gVHJpbSBzcGFjZSBiZXR3ZWVuIGNvZGVjcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBhNTkwZjIzODY2YTk4Mjdh
N2U2YzhjZGI1ZGM0YzMwYWNjMmExNmU0Li4zMThiNzMzNGFhZDY2MTQ5OTJmYWJmMTIzOWQ5ZTBm
MWM3ZDU4NTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcApAQCAtNzksNyArNzksNyBAQCBDYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5IGNh
bnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3koY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcgogICAg
IEFTU0VSVChyZW5kZXJlci5pc0NhbnZhcygpKTsKICAgICAKICAgICBjb25zdCBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyLm5v
ZGUoKSk7Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhcy0+cmVu
ZGVyaW5nQ29udGV4dCgpOworICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0Nv
bnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkK
ICAgICAgICAgcmV0dXJuIFVuYWNjZWxlcmF0ZWRDYW52YXM7CiAgICAgCkBAIC0yMTUsNyArMjE1
LDcgQEAgUmVuZGVyTGF5ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmcoUmVuZGVyTGF5ZXIm
IGxheWVyKQogICAgIAogICAgIGNyZWF0ZVByaW1hcnlHcmFwaGljc0xheWVyKCk7CiAKLSAgICBp
ZiAoVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKSkgewor
ICAgIGlmIChhdXRvKiB0aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKSkgewogICAg
ICAgICB0aWxlZEJhY2tpbmctPnNldElzSW5XaW5kb3cocmVuZGVyZXIoKS5wYWdlKCkuaXNJbldp
bmRvdygpKTsKIAogICAgICAgICBpZiAobV9pc0ZyYW1lTGF5ZXJXaXRoVGlsZWRCYWNraW5nKSB7
CkBAIC0zMDAsNyArMzAwLDcgQEAgVGlsZWRCYWNraW5nKiBSZW5kZXJMYXllckJhY2tpbmc6OnRp
bGVkQmFja2luZygpIGNvbnN0CiBzdGF0aWMgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29t
cHV0ZVBhZ2VUaWxlZEJhY2tpbmdDb3ZlcmFnZShSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcp
CiB7CiAgICAgLy8gRklYTUU6IFdoZW4gd2UgdXNlIFRpbGVkQmFja2luZyBmb3Igb3ZlcmZsb3cs
IHRoaXMgc2hvdWxkIGxvb2sgYXQgUmVuZGVyVmlldyBzY3JvbGxhYmlsaXR5LgotICAgIEZyYW1l
VmlldyYgZnJhbWVWaWV3ID0gYmFja2luZy0+b3duaW5nTGF5ZXIoKS5yZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKTsKKyAgICBhdXRvJiBmcmFtZVZpZXcgPSBiYWNraW5nLT5vd25pbmdMYXll
cigpLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwogCiAgICAgLy8gSWYgdGhlIHBhZ2Ug
aXMgbm9uLXZpc2libGUsIGRvbid0IGluY3VyIHRoZSBjb3N0IG9mIGtlZXBpbmcgZXh0cmEgdGls
ZXMgZm9yIHNjcm9sbGluZy4KICAgICBpZiAoIWJhY2tpbmctPm93bmluZ0xheWVyKCkucGFnZSgp
LmlzVmlzaWJsZSgpKQpAQCAtNDI2LDkgKzQyNiw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpjcmVhdGVQcmltYXJ5R3JhcGhpY3NMYXllcigpCiAjaWYgUExBVEZPUk0oSU9TKQogdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OmxheWVyV2lsbEJlRGVzdHJveWVkKCkKIHsKLSAgICBSZW5kZXJP
YmplY3QmIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKKyAgICBhdXRvJiByZW5kZXJlciA9
IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKGlzPFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5k
ZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKS5hbGxvd3NB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAgUGx1Z2luVmlld0Jhc2UqIHBsdWdp
blZpZXdCYXNlID0gZG93bmNhc3Q8UGx1Z2luVmlld0Jhc2U+KGRvd25jYXN0PFJlbmRlcldpZGdl
dD4ocmVuZGVyZXIpLndpZGdldCgpKTsKKyAgICAgICAgYXV0byogcGx1Z2luVmlld0Jhc2UgPSBk
b3duY2FzdDxQbHVnaW5WaWV3QmFzZT4oZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlciku
d2lkZ2V0KCkpOwogICAgICAgICBpZiAocGx1Z2luVmlld0Jhc2UgJiYgbV9ncmFwaGljc0xheWVy
LT5jb250ZW50c0xheWVyRm9yTWVkaWEoKSkKICAgICAgICAgICAgIHBsdWdpblZpZXdCYXNlLT5k
ZXRhY2hQbHVnaW5MYXllcigpOwogICAgIH0KQEAgLTUwOCw3ICs1MDgsNyBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlQmFja2Ryb3BGaWx0ZXJzR2VvbWV0cnkoKQogICAgIGlmICgh
aXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVy
Qm94JiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4odGhpcy0+cmVuZGVyZXIoKSk7Cisg
ICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KHRoaXMtPnJlbmRlcmVyKCkp
OwogICAgIExheW91dFJlY3QgYm94UmVjdCA9IHJlbmRlcmVyLmJvcmRlckJveFJlY3QoKTsKICAg
ICBpZiAocmVuZGVyZXIuaGFzQ2xpcCgpKQogICAgICAgICBib3hSZWN0LmludGVyc2VjdChyZW5k
ZXJlci5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7CkBAIC01NDksNyArNTQ5LDcg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUN1c3RvbUFwcGVhcmFuY2UoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQogCiBzdGF0aWMgYm9vbCBsYXllck9yQW5jZXN0b3JJc1RyYW5z
Zm9ybWVkT3JVc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmcoUmVuZGVyTGF5ZXImIGxheWVyKQogewot
ICAgIGZvciAoUmVuZGVyTGF5ZXIqIGN1cnIgPSAmbGF5ZXI7IGN1cnI7IGN1cnIgPSBjdXJyLT5w
YXJlbnQoKSkgeworICAgIGZvciAoYXV0byogY3VyciA9ICZsYXllcjsgY3VycjsgY3VyciA9IGN1
cnItPnBhcmVudCgpKSB7CiAgICAgICAgIGlmIChjdXJyLT5oYXNUcmFuc2Zvcm0oKSB8fCBjdXJy
LT51c2VzQWNjZWxlcmF0ZWRTY3JvbGxpbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KQEAgLTU4OCw4ICs1ODgsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
Q29tcG9zaXRlZEJvdW5kcygpCiAgICAgLy8gSWYgdGhpcyBvciBhbiBhbmNlc3RvciBpcyB0cmFu
c2Zvcm1lZCwgd2UgY2FuJ3QgY3VycmVudGx5IGNvbXB1dGUgdGhlIGNvcnJlY3QgcmVjdCB0byBp
bnRlcnNlY3Qgd2l0aC4KICAgICAvLyBXZSdkIG5lZWQgUmVuZGVyT2JqZWN0Ojpjb252ZXJ0Q29u
dGFpbmVyVG9Mb2NhbFF1YWQoKSwgd2hpY2ggZG9lc24ndCB5ZXQgZXhpc3QuCiAgICAgaWYgKHNo
b3VsZENsaXBDb21wb3NpdGVkQm91bmRzKCkpIHsKLSAgICAgICAgUmVuZGVyVmlldyYgdmlldyA9
IHJlbmRlcmVyKCkudmlldygpOwotICAgICAgICBSZW5kZXJMYXllciogcm9vdExheWVyID0gdmll
dy5sYXllcigpOworICAgICAgICBhdXRvJiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7CisgICAg
ICAgIGF1dG8qIHJvb3RMYXllciA9IHZpZXcubGF5ZXIoKTsKIAogICAgICAgICBMYXlvdXRSZWN0
IGNsaXBwaW5nQm91bmRzOwogICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9u
KCkgPT0gRml4ZWRQb3NpdGlvbiAmJiByZW5kZXJlcigpLmNvbnRhaW5lcigpID09ICZ2aWV3KQpA
QCAtNjIzLDcgKzYyMyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVBZnRlcldp
ZGdldFJlc2l6ZSgpCiB7CiAgICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKCkpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKFJlbmRlckxheWVyQ29tcG9zaXRvciogaW5uZXJDb21w
b3NpdG9yID0gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZUNvbnRlbnRzQ29tcG9zaXRvcigm
ZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigpKSkpIHsKKyAgICBpZiAoYXV0byogaW5u
ZXJDb21wb3NpdG9yID0gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZUNvbnRlbnRzQ29tcG9z
aXRvcigmZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigpKSkpIHsKICAgICAgICAgaW5u
ZXJDb21wb3NpdG9yLT5mcmFtZVZpZXdEaWRDaGFuZ2VTaXplKCk7CiAgICAgICAgIGlubmVyQ29t
cG9zaXRvci0+ZnJhbWVWaWV3RGlkQ2hhbmdlTG9jYXRpb24oZmxvb3JlZEludFBvaW50KGNvbnRl
bnRzQm94KCkubG9jYXRpb24oKSkpOwogICAgIH0KQEAgLTY0Nyw3ICs2NDcsNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlQWZ0ZXJMYXlvdXQoVXBkYXRlQWZ0ZXJMYXlvdXRGbGFn
cyBmbGFncykKICAgICAgICAgaWYgKGZsYWdzICYgSXNVcGRhdGVSb290KSB7CiAgICAgICAgICAg
ICB1cGRhdGVHZW9tZXRyeSgpOwogICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZVJvb3RM
YXllclBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBSZW5kZXJMYXllciogc3RhY2tpbmdDb250YWlu
ZXIgPSBtX293bmluZ0xheWVyLmVuY2xvc2luZ1N0YWNraW5nQ29udGFpbmVyKCk7CisgICAgICAg
ICAgICBhdXRvKiBzdGFja2luZ0NvbnRhaW5lciA9IG1fb3duaW5nTGF5ZXIuZW5jbG9zaW5nU3Rh
Y2tpbmdDb250YWluZXIoKTsKICAgICAgICAgICAgIGlmICghY29tcG9zaXRvcigpLmNvbXBvc2l0
aW5nTGF5ZXJzTmVlZFJlYnVpbGQoKSAmJiBzdGFja2luZ0NvbnRhaW5lciAmJiAoc3RhY2tpbmdD
b250YWluZXIgIT0gJm1fb3duaW5nTGF5ZXIpKQogICAgICAgICAgICAgICAgIGNvbXBvc2l0b3Io
KS51cGRhdGVDb21wb3NpdGluZ0Rlc2NlbmRhbnRHZW9tZXRyeSgqc3RhY2tpbmdDb250YWluZXIs
ICpzdGFja2luZ0NvbnRhaW5lciwgZmxhZ3MgJiBDb21wb3NpdGluZ0NoaWxkcmVuT25seSk7CiAg
ICAgICAgIH0KQEAgLTY5Nyw3ICs2OTcsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlQ29uZmlndXJhdGlvbigpCiAgICAgaWYgKGxheWVyQ29uZmlnQ2hhbmdlZCkKICAgICAgICAg
dXBkYXRlSW50ZXJuYWxIaWVyYXJjaHkoKTsKIAotICAgIGlmIChHcmFwaGljc0xheWVyKiBmbGF0
dGVuaW5nTGF5ZXIgPSB0aWxlQ2FjaGVGbGF0dGVuaW5nTGF5ZXIoKSkgeworICAgIGlmIChhdXRv
KiBmbGF0dGVuaW5nTGF5ZXIgPSB0aWxlQ2FjaGVGbGF0dGVuaW5nTGF5ZXIoKSkgewogICAgICAg
ICBpZiAobGF5ZXJDb25maWdDaGFuZ2VkIHx8IGZsYXR0ZW5pbmdMYXllci0+cGFyZW50KCkgIT0g
bV9ncmFwaGljc0xheWVyLmdldCgpKQogICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5hZGRD
aGlsZChmbGF0dGVuaW5nTGF5ZXIpOwogICAgIH0KQEAgLTcwOCw3ICs3MDgsNyBAQCBib29sIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbigpCiAKICAgICBpZiAobV9vd25p
bmdMYXllci5oYXNSZWZsZWN0aW9uKCkpIHsKICAgICAgICAgaWYgKG1fb3duaW5nTGF5ZXIucmVm
bGVjdGlvbkxheWVyKCktPmJhY2tpbmcoKSkgewotICAgICAgICAgICAgR3JhcGhpY3NMYXllciog
cmVmbGVjdGlvbkxheWVyID0gbV9vd25pbmdMYXllci5yZWZsZWN0aW9uTGF5ZXIoKS0+YmFja2lu
ZygpLT5ncmFwaGljc0xheWVyKCk7CisgICAgICAgICAgICBhdXRvKiByZWZsZWN0aW9uTGF5ZXIg
PSBtX293bmluZ0xheWVyLnJlZmxlY3Rpb25MYXllcigpLT5iYWNraW5nKCktPmdyYXBoaWNzTGF5
ZXIoKTsKICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIo
cmVmbGVjdGlvbkxheWVyKTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtNzI2LDcgKzcyNiw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKCkKICAgICAg
ICAgdXBkYXRlSW1hZ2VDb250ZW50cyhjb250ZW50c0luZm8pOwogCiAgICAgaWYgKGlzPFJlbmRl
ckVtYmVkZGVkT2JqZWN0PihyZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJFbWJlZGRlZE9i
amVjdD4ocmVuZGVyZXIoKSkuYWxsb3dzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7Ci0gICAg
ICAgIFBsdWdpblZpZXdCYXNlKiBwbHVnaW5WaWV3QmFzZSA9IGRvd25jYXN0PFBsdWdpblZpZXdC
YXNlPihkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRlcmVyKCkpLndpZGdldCgpKTsKKyAgICAg
ICAgYXV0byogcGx1Z2luVmlld0Jhc2UgPSBkb3duY2FzdDxQbHVnaW5WaWV3QmFzZT4oZG93bmNh
c3Q8UmVuZGVyV2lkZ2V0PihyZW5kZXJlcigpKS53aWRnZXQoKSk7CiAjaWYgUExBVEZPUk0oSU9T
KQogICAgICAgICBpZiAocGx1Z2luVmlld0Jhc2UgJiYgIW1fZ3JhcGhpY3NMYXllci0+Y29udGVu
dHNMYXllckZvck1lZGlhKCkpIHsKICAgICAgICAgICAgIHBsdWdpblZpZXdCYXNlLT5kZXRhY2hQ
bHVnaW5MYXllcigpOwpAQCAtNzM5LDE0ICs3MzksMTQgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24oKQogICAgIH0KICNpZiBFTkFCTEUoVklERU8pCiAgICAg
ZWxzZSBpZiAoaXM8UmVuZGVyVmlkZW8+KHJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRlclZp
ZGVvPihyZW5kZXJlcigpKS5zaG91bGREaXNwbGF5VmlkZW8oKSkgewotICAgICAgICBIVE1MTWVk
aWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBkb3duY2FzdDxIVE1MTWVkaWFFbGVtZW50PihyZW5k
ZXJlcigpLmVsZW1lbnQoKSk7CisgICAgICAgIGF1dG8qIG1lZGlhRWxlbWVudCA9IGRvd25jYXN0
PEhUTUxNZWRpYUVsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKICAgICAgICAgbV9ncmFw
aGljc0xheWVyLT5zZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihtZWRpYUVsZW1lbnQtPnBsYXRm
b3JtTGF5ZXIoKSwgR3JhcGhpY3NMYXllcjo6Q29udGVudHNMYXllckZvck1lZGlhKTsKICAgICB9
CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCiAgICAgZWxzZSBpZiAocmVuZGVyZXIoKS5pc0NhbnZhcygpICYmIGNhbnZhc0NvbXBvc2l0
aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNMYXllckNvbnRlbnRzKSB7CiAgICAg
ICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFz
RWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwotICAgICAgICBpZiAoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAg
ICBpZiAoYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQogICAgICAg
ICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihjb250ZXh0
LT5wbGF0Zm9ybUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJGb3JDYW52YXMp
OwogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwogICAgIH0KQEAgLTg1Niw3ICs4
NTYsNyBAQCBwcml2YXRlOgogICAgIExheW91dFNpemUgZnJvbUFuY2VzdG9yR3JhcGhpY3NMYXll
cigpCiAgICAgewogICAgICAgICBpZiAoIW1fZnJvbUFuY2VzdG9yR3JhcGhpY3NMYXllcikgewot
ICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvciA9IG1fcmVuZGVyTGF5
ZXIuYW5jZXN0b3JDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgICAgICBhdXRvKiBjb21wb3Np
dGVkQW5jZXN0b3IgPSBtX3JlbmRlckxheWVyLmFuY2VzdG9yQ29tcG9zaXRpbmdMYXllcigpOwog
ICAgICAgICAgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludEluQW5jZXN0b3JSZW5kZXJMYXllckNv
b3JkcyA9IG1fcmVuZGVyTGF5ZXIuY29udmVydFRvTGF5ZXJDb29yZHMoY29tcG9zaXRlZEFuY2Vz
dG9yLCBtX2xvY2F0aW9uLCBSZW5kZXJMYXllcjo6QWRqdXN0Rm9yQ29sdW1ucyk7CiAgICAgICAg
ICAgICBtX2Zyb21BbmNlc3RvckdyYXBoaWNzTGF5ZXIgPSBjb21wdXRlT2Zmc2V0RnJvbUFuY2Vz
dG9yR3JhcGhpY3NMYXllcihjb21wb3NpdGVkQW5jZXN0b3IsIGxvY2FsUG9pbnRJbkFuY2VzdG9y
UmVuZGVyTGF5ZXJDb29yZHMsIG1fZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICB9CkBAIC05
NzIsNyArOTcyLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KCkK
ICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFByZXNlcnZlczNEKHByZXNlcnZlczNEKTsKICAgICBt
X2dyYXBoaWNzTGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShzdHlsZS5iYWNrZmFjZVZpc2li
aWxpdHkoKSA9PSBCYWNrZmFjZVZpc2liaWxpdHlWaXNpYmxlKTsKIAotICAgIFJlbmRlckxheWVy
KiBjb21wb3NpdGVkQW5jZXN0b3IgPSBtX293bmluZ0xheWVyLmFuY2VzdG9yQ29tcG9zaXRpbmdM
YXllcigpOworICAgIGF1dG8qIGNvbXBvc2l0ZWRBbmNlc3RvciA9IG1fb3duaW5nTGF5ZXIuYW5j
ZXN0b3JDb21wb3NpdGluZ0xheWVyKCk7CiAgICAgTGF5b3V0U2l6ZSBhbmNlc3RvckNsaXBwaW5n
TGF5ZXJPZmZzZXQ7CiAgICAgTGF5b3V0UmVjdCBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9IGNv
bXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdChjb21wb3NpdGVkQW5jZXN0b3IsIGFuY2VzdG9y
Q2xpcHBpbmdMYXllck9mZnNldCk7CiAgICAgTGF5b3V0UmVjdCBwcmltYXJ5R3JhcGhpY3NMYXll
clJlY3QgPSBjb21wdXRlUHJpbWFyeUdyYXBoaWNzTGF5ZXJSZWN0KHBhcmVudEdyYXBoaWNzTGF5
ZXJSZWN0KTsKQEAgLTEwMjgsNyArMTAyOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVHZW9tZXRyeSgpCiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbGF5ZXIgdGhhdCBjbGlwcyBj
aGlsZHJlbiwgcG9zaXRpb24gaXQuCiAgICAgTGF5b3V0UmVjdCBjbGlwcGluZ0JveDsKLSAgICBp
ZiAoR3JhcGhpY3NMYXllciogY2xpcExheWVyID0gY2xpcHBpbmdMYXllcigpKSB7CisgICAgaWYg
KGF1dG8qIGNsaXBMYXllciA9IGNsaXBwaW5nTGF5ZXIoKSkgewogICAgICAgICBjbGlwcGluZ0Jv
eCA9IGNsaXBCb3goZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CiAgICAgICAgIC8v
IENsaXBwaW5nIGxheWVyIGlzIHBhcmVudGVkIGluIHRoZSBwcmltYXJ5IGdyYXBoaWNzIGxheWVy
LgogICAgICAgICBMYXlvdXRTaXplIGNsaXBCb3hPZmZzZXRGcm9tR3JhcGhpY3NMYXllciA9IHRv
TGF5b3V0U2l6ZShjbGlwcGluZ0JveC5sb2NhdGlvbigpKSArIHJlbmRlcmVyT2Zmc2V0LmZyb21Q
cmltYXJ5R3JhcGhpY3NMYXllcigpOwpAQCAtMTA2Miw3ICsxMDYyLDcgQEAgdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KCkKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bV9ncmFwaGljc0xheWVyLT5zZXRBbmNob3JQb2ludChhbmNob3IpOwogCi0gICAgICAgIEdyYXBo
aWNzTGF5ZXIqIGNsaXBMYXllciA9IGNsaXBwaW5nTGF5ZXIoKTsKKyAgICAgICAgYXV0byogY2xp
cExheWVyID0gY2xpcHBpbmdMYXllcigpOwogICAgICAgICBpZiAoc3R5bGUuaGFzUGVyc3BlY3Rp
dmUoKSkgewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdCA9IG93bmluZ0xheWVy
KCkucGVyc3BlY3RpdmVUcmFuc2Zvcm0oKTsKICAgICAgICAgICAgIApAQCAtMTExNCw3ICsxMTE0
LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KCkKICAgICB9CiAK
ICAgICBpZiAobV9vd25pbmdMYXllci5yZWZsZWN0aW9uTGF5ZXIoKSAmJiBtX293bmluZ0xheWVy
LnJlZmxlY3Rpb25MYXllcigpLT5pc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICBSZW5kZXJMYXll
ckJhY2tpbmcqIHJlZmxlY3Rpb25CYWNraW5nID0gbV9vd25pbmdMYXllci5yZWZsZWN0aW9uTGF5
ZXIoKS0+YmFja2luZygpOworICAgICAgICBhdXRvKiByZWZsZWN0aW9uQmFja2luZyA9IG1fb3du
aW5nTGF5ZXIucmVmbGVjdGlvbkxheWVyKCktPmJhY2tpbmcoKTsKICAgICAgICAgcmVmbGVjdGlv
bkJhY2tpbmctPnVwZGF0ZUdlb21ldHJ5KCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgcmVm
bGVjdGlvbiBsYXllciBoYXMgdGhlIGJvdW5kcyBvZiBtX293bmluZ0xheWVyLnJlZmxlY3Rpb25M
YXllcigpLApAQCAtMTI5Nyw3ICsxMjk3LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUludGVybmFsSGllcmFyY2h5KCkKICAgICB9CiAKICAgICBpZiAobV9zY3JvbGxpbmdMYXll
cikgewotICAgICAgICBHcmFwaGljc0xheWVyKiBzdXBlcmxheWVyID0gbV9jaGlsZENvbnRhaW5t
ZW50TGF5ZXIgPyBtX2NoaWxkQ29udGFpbm1lbnRMYXllci5nZXQoKSA6IG1fZ3JhcGhpY3NMYXll
ci5nZXQoKTsKKyAgICAgICAgYXV0byogc3VwZXJsYXllciA9IG1fY2hpbGRDb250YWlubWVudExh
eWVyID8gbV9jaGlsZENvbnRhaW5tZW50TGF5ZXIuZ2V0KCkgOiBtX2dyYXBoaWNzTGF5ZXIuZ2V0
KCk7CiAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICAg
ICAgc3VwZXJsYXllci0+YWRkQ2hpbGQobV9zY3JvbGxpbmdMYXllci5nZXQoKSk7CiAgICAgfQpA
QCAtMTUwMyw3ICsxNTAzLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3Zl
cmZsb3dDb250cm9sc0xheWVycygpCiAgICAgY29uc3QgSW50UmVjdCBib3JkZXJCb3ggPSBzbmFw
cGVkSW50UmVjdChyZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKTsKIAogICAgIEZsb2F0U2l6
ZSBvZmZzZXRGcm9tUmVuZGVyZXIgPSBtX2dyYXBoaWNzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJl
cigpOwotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpKSB7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpIHsKICAgICAgICAgSW50UmVjdCBoQmFyUmVjdCA9IG1fb3duaW5nTGF5ZXIucmVj
dEZvckhvcml6b250YWxTY3JvbGxiYXIoYm9yZGVyQm94KTsKICAgICAgICAgbGF5ZXItPnNldFBv
c2l0aW9uKGhCYXJSZWN0LmxvY2F0aW9uKCkgLSBvZmZzZXRGcm9tUmVuZGVyZXIpOwogICAgICAg
ICBsYXllci0+c2V0U2l6ZShoQmFyUmVjdC5zaXplKCkpOwpAQCAtMTUxNSw3ICsxNTE1LDcgQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygp
CiAgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAgICAg
Ci0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpKSB7CisgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
KSB7CiAgICAgICAgIEludFJlY3QgdkJhclJlY3QgPSBtX293bmluZ0xheWVyLnJlY3RGb3JWZXJ0
aWNhbFNjcm9sbGJhcihib3JkZXJCb3gpOwogICAgICAgICBsYXllci0+c2V0UG9zaXRpb24odkJh
clJlY3QubG9jYXRpb24oKSAtIG9mZnNldEZyb21SZW5kZXJlcik7CiAgICAgICAgIGxheWVyLT5z
ZXRTaXplKHZCYXJSZWN0LnNpemUoKSk7CkBAIC0xNTI3LDcgKzE1MjcsNyBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKICAgICAgICAg
bGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkg
JiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKLSAgICBpZiAoR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CisgICAgaWYgKGF1dG8q
IGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewogICAgICAgICBjb25zdCBMYXlvdXRS
ZWN0JiBzY3JvbGxDb3JuZXJBbmRSZXNpemVyID0gbV9vd25pbmdMYXllci5zY3JvbGxDb3JuZXJB
bmRSZXNpemVyUmVjdCgpOwogICAgICAgICBsYXllci0+c2V0UG9zaXRpb24oc2Nyb2xsQ29ybmVy
QW5kUmVzaXplci5sb2NhdGlvbigpIC0gb2Zmc2V0RnJvbVJlbmRlcmVyKTsKICAgICAgICAgbGF5
ZXItPnNldFNpemUoc2Nyb2xsQ29ybmVyQW5kUmVzaXplci5zaXplKCkpOwpAQCAtMTUzNywxNyAr
MTUzNywyMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRy
b2xzTGF5ZXJzKCkKIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6Omhhc1VucG9zaXRpb25lZE92
ZXJmbG93Q29udHJvbHNMYXllcnMoKSBjb25zdAogewotICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgIGlmIChhdXRvKiBsYXll
ciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIGlmICghbGF5ZXIt
PmRyYXdzQ29udGVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAg
aWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQor
ICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAg
ICAgICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KIAotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xs
Q29ybmVyKCkpCisgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkg
ewogICAgICAgICBpZiAoIWxheWVyLT5kcmF3c0NvbnRlbnQoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE3ODEsNyArMTc4NCw3
IEBAIGZsb2F0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcG9zaXRpbmdPcGFjaXR5KGZsb2F0IHJl
bmRlcmVyT3BhY2l0eSkgY29uc3QKIHsKICAgICBmbG9hdCBmaW5hbE9wYWNpdHkgPSByZW5kZXJl
ck9wYWNpdHk7CiAgICAgCi0gICAgZm9yIChSZW5kZXJMYXllciogY3VyciA9IG1fb3duaW5nTGF5
ZXIucGFyZW50KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgeworICAgIGZvciAoYXV0
byogY3VyciA9IG1fb3duaW5nTGF5ZXIucGFyZW50KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJl
bnQoKSkgewogICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgcGFyZW50cyB0aGF0IGFyZSBz
dGFja2luZyBjb250ZXh0cy4KICAgICAgICAgLy8gUmVjYWxsIHRoYXQgb3BhY2l0eSBjcmVhdGVz
IHN0YWNraW5nIGNvbnRleHQuCiAgICAgICAgIGlmICghY3Vyci0+aXNTdGFja2luZ0NvbnRhaW5l
cigpKQpAQCAtMTk5NSw3ICsxOTk4LDcgQEAgc3RhdGljIGJvb2wgaXNSZXN0YXJ0ZWRQbHVnaW4o
UmVuZGVyT2JqZWN0JiByZW5kZXJlcikKICAgICBpZiAoIWlzPFJlbmRlckVtYmVkZGVkT2JqZWN0
PihyZW5kZXJlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PFJlbmRlckVtYmVkZGVkT2JqZWN0PihyZW5kZXJl
cikuZnJhbWVPd25lckVsZW1lbnQoKTsKKyAgICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8UmVu
ZGVyRW1iZWRkZWRPYmplY3Q+KHJlbmRlcmVyKS5mcmFtZU93bmVyRWxlbWVudCgpOwogICAgIGlm
ICghaXM8SFRNTFBsdWdJbkVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTIxNzAsMTEgKzIxNzMsMTEgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OmlzRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2UoKSBjb25zdAogI2VuZGlmCiAKICAgICBhdXRvJiBpbWFnZVJl
bmRlcmVyID0gZG93bmNhc3Q8UmVuZGVySW1hZ2U+KHJlbmRlcmVyKCkpOwotICAgIGlmIChDYWNo
ZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZVJlbmRlcmVyLmNhY2hlZEltYWdlKCkpIHsKKyAg
ICBpZiAoYXV0byogY2FjaGVkSW1hZ2UgPSBpbWFnZVJlbmRlcmVyLmNhY2hlZEltYWdlKCkpIHsK
ICAgICAgICAgaWYgKCFjYWNoZWRJbWFnZS0+aGFzSW1hZ2UoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JS
ZW5kZXJlcigmaW1hZ2VSZW5kZXJlcik7CisgICAgICAgIGF1dG8qIGltYWdlID0gY2FjaGVkSW1h
Z2UtPmltYWdlRm9yUmVuZGVyZXIoJmltYWdlUmVuZGVyZXIpOwogICAgICAgICBpZiAoIWltYWdl
LT5pc0JpdG1hcEltYWdlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIyMjQs
MTEgKzIyMjcsMTEgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUltYWdlQ29udGVu
dHMoUGFpbnRlZENvbnRlbnRzSW5mbyYgY29udGVudHNJbmZvKQogewogICAgIGF1dG8mIGltYWdl
UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJJbWFnZT4ocmVuZGVyZXIoKSk7CiAKLSAgICBDYWNo
ZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZVJlbmRlcmVyLmNhY2hlZEltYWdlKCk7CisgICAg
YXV0byogY2FjaGVkSW1hZ2UgPSBpbWFnZVJlbmRlcmVyLmNhY2hlZEltYWdlKCk7CiAgICAgaWYg
KCFjYWNoZWRJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW1hZ2UqIGltYWdlID0gY2Fj
aGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoJmltYWdlUmVuZGVyZXIpOworICAgIGF1dG8qIGlt
YWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoJmltYWdlUmVuZGVyZXIpOwogICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjM4MSw3ICsyMzg0LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXkoR3JhcGhpY3NMYXll
cjo6U2hvdWxkQ2xpcFRvTGF5ZXIKIHsKICAgICBBU1NFUlQoIXBhaW50c0ludG9Db21wb3NpdGVk
QW5jZXN0b3IoKSk7CiAKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpOworICAgIGF1dG8mIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpOwogICAgIGlmIChtX2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVyICYmIGZy
YW1lVmlldy5pc1RyYWNraW5nUmVwYWludHMoKSkKICAgICAgICAgZnJhbWVWaWV3LmFkZFRyYWNr
ZWRSZXBhaW50UmVjdChvd25pbmdMYXllcigpLmFic29sdXRlQm91bmRpbmdCb3hGb3JQYWludGlu
ZygpKTsKICAgICAKQEAgLTIzODksNyArMjM5Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzZXRDb250ZW50c05lZWREaXNwbGF5KEdyYXBoaWNzTGF5ZXI6OlNob3VsZENsaXBUb0xheWVy
CiAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIHNldE5lZWRzRGlzcGxheSB3aWxsIGNsaXAgdG8gdGhl
IHNpemUgb2YgdGhlIEdyYXBoaWNzTGF5ZXIsIHdoaWNoIGRvZXMgbm90IGluY2x1ZGUgbWFyZ2lu
IHRpbGVzLgogICAgICAgICAvLyBTbyBpZiB0aGUgVGlsZWRCYWNraW5nIGhhcyBhIG1hcmdpbiB0
aGF0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkLCB3ZSBuZWVkIHRvIHNlbmQgaW4gYSByZWN0IHRv
IHNldE5lZWRzRGlzcGxheUluUmVjdAogICAgICAgICAvLyB0aGF0IGlzIGxhcmdlIGVub3VnaCB0
byBpbmNsdWRlIHRoZSBtYXJnaW4uIFRpbGVkQmFja2luZzo6Ym91bmRzKCkgaW5jbHVkZXMgdGhl
IG1hcmdpbi4KLSAgICAgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxl
ZEJhY2tpbmcoKTsKKyAgICAgICAgYXV0byogdGlsZWRCYWNraW5nID0gdGhpcy0+dGlsZWRCYWNr
aW5nKCk7CiAgICAgICAgIEZsb2F0UmVjdCByZWN0VG9SZXBhaW50ID0gdGlsZWRCYWNraW5nID8g
dGlsZWRCYWNraW5nLT5ib3VuZHMoKSA6IEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBtX2dy
YXBoaWNzTGF5ZXItPnNpemUoKSk7CiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3RUb1JlcGFpbnQsIHNob3VsZENsaXApOwogICAgIH0KQEAgLTI0MTYs
NyArMjQxOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNw
bGF5SW5SZWN0KGNvbnN0IExheW91dFJlY3QmIHIsIEdyYXBoCiAgICAgQVNTRVJUKCFwYWludHNJ
bnRvQ29tcG9zaXRlZEFuY2VzdG9yKCkpOwogCiAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZFJl
Y3RGb3JQYWludGluZyA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMociwgZGV2aWNlU2NhbGVGYWN0
b3IoKSk7Ci0gICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKTsKKyAgICBhdXRvJiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKTsKICAgICBpZiAobV9pc01haW5GcmFtZVJlbmRlclZpZXdMYXllciAmJiBmcmFtZVZpZXcu
aXNUcmFja2luZ1JlcGFpbnRzKCkpCiAgICAgICAgIGZyYW1lVmlldy5hZGRUcmFja2VkUmVwYWlu
dFJlY3QocGl4ZWxTbmFwcGVkUmVjdEZvclBhaW50aW5nKTsKIApAQCAtMjYwOSw3ICsyNjEyLDcg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmRpZENvbW1pdENoYW5nZXNGb3JMYXllcihjb25z
dCBHcmFwaGljc0xheWVyKiBsYXllcikgY28KIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6Omdl
dEN1cnJlbnRUcmFuc2Zvcm0oY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgY29uc3QKIHsKLSAgICBHcmFwaGljc0xheWVy
KiB0cmFuc2Zvcm1lZExheWVyID0gbV9jb250ZW50c0NvbnRhaW5tZW50TGF5ZXIuZ2V0KCkgPyBt
X2NvbnRlbnRzQ29udGFpbm1lbnRMYXllci5nZXQoKSA6IG1fZ3JhcGhpY3NMYXllci5nZXQoKTsK
KyAgICBhdXRvKiB0cmFuc2Zvcm1lZExheWVyID0gbV9jb250ZW50c0NvbnRhaW5tZW50TGF5ZXIu
Z2V0KCkgPyBtX2NvbnRlbnRzQ29udGFpbm1lbnRMYXllci5nZXQoKSA6IG1fZ3JhcGhpY3NMYXll
ci5nZXQoKTsKICAgICBpZiAoZ3JhcGhpY3NMYXllciAhPSB0cmFuc2Zvcm1lZExheWVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI2NzcsNyArMjY4MCw3IEBAIGJvb2wgUmVuZGVyTGF5
ZXJCYWNraW5nOjp1c2VHaWFudFRpbGVzKCkgY29uc3QKIAogdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OmxvZ0ZpbGxlZFZpc2libGVGcmVzaFRpbGUodW5zaWduZWQgYmxhbmtQaXhlbENvdW50KQog
ewotICAgIGlmIChQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQqIGxvZ2dpbmdDbGllbnQgPSByZW5k
ZXJlcigpLnBhZ2UoKS5wZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQoKSkKKyAgICBpZiAoYXV0byog
bG9nZ2luZ0NsaWVudCA9IHJlbmRlcmVyKCkucGFnZSgpLnBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVu
dCgpKQogICAgICAgICBsb2dnaW5nQ2xpZW50LT5sb2dTY3JvbGxpbmdFdmVudChQZXJmb3JtYW5j
ZUxvZ2dpbmdDbGllbnQ6OlNjcm9sbGluZ0V2ZW50OjpGaWxsZWRUaWxlLCBNb25vdG9uaWNUaW1l
Ojpub3coKSwgYmxhbmtQaXhlbENvdW50KTsKIH0KIApAQCAtMjcxOCw3ICsyNzIxLDcgQEAgYm9v
bCBSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBj
b25zdCBBbmltYXRpb24qIGFuaW0KICAgICAgICAgaWYgKCFrZXlmcmFtZVN0eWxlKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgVGltaW5nRnVuY3Rpb24qIHRm
ID0gY3VycmVudEtleWZyYW1lLnRpbWluZ0Z1bmN0aW9uKGtleWZyYW1lcy5hbmltYXRpb25OYW1l
KCkpOworICAgICAgICBhdXRvKiB0ZiA9IGN1cnJlbnRLZXlmcmFtZS50aW1pbmdGdW5jdGlvbihr
ZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKICAgICAgICAgCiAgICAgICAgIGJvb2wgaXNGaXJz
dE9yTGFzdEtleWZyYW1lID0ga2V5ID09IDAgfHwga2V5ID09IDE7CiAgICAgICAgIGlmICgoaGFz
VHJhbnNmb3JtICYmIGlzRmlyc3RPckxhc3RLZXlmcmFtZSkgfHwgY3VycmVudEtleWZyYW1lLmNv
bnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKQpAQCAtMjg5MCw3ICsyODkzLDcg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbXBvc2l0ZWRCb3VuZHMoY29uc3QgTGF5
b3V0UmVjdCYgYm91bmRzKQogCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcG9z
aXRlZEJvdW5kc0luY2x1ZGluZ01hcmdpbigpIGNvbnN0CiB7Ci0gICAgVGlsZWRCYWNraW5nKiB0
aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKTsKKyAgICBhdXRvKiB0aWxlZEJhY2tp
bmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKTsKICAgICBpZiAoIXRpbGVkQmFja2luZyB8fCAhdGls
ZWRCYWNraW5nLT5oYXNNYXJnaW5zKCkpCiAgICAgICAgIHJldHVybiBjb21wb3NpdGVkQm91bmRz
KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNv
bXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKaW5kZXggZjQ0MzFhZWEzYjc3Yzc4ZWVlNDdjMjIyZTMxNmQ3NDBhY2RlNjAxYS4u
N2JkMWYwMTM5OWQ1N2VkY2QxNTE1NGQzMWUxNzZjMDFlOWI4ZjVhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTQzMCwx
MyArNDMwLDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXll
ckNoYW5nZXMoYm9vbCBpc0ZsdXNoUm9vdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOworICAgIGF1
dG8mIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKICAgICBBbmltYXRpb25V
cGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmZnJhbWVWaWV3LmZyYW1lKCkuYW5pbWF0
aW9uKCkpOwogCiAgICAgQVNTRVJUKCFtX2ZsdXNoaW5nTGF5ZXJzKTsKICAgICBtX2ZsdXNoaW5n
TGF5ZXJzID0gdHJ1ZTsKIAotICAgIGlmIChHcmFwaGljc0xheWVyKiByb290TGF5ZXIgPSByb290
R3JhcGhpY3NMYXllcigpKSB7CisgICAgaWYgKGF1dG8qIHJvb3RMYXllciA9IHJvb3RHcmFwaGlj
c0xheWVyKCkpIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgIEZsb2F0UmVjdCBleHBvc2Vk
UmVjdCA9IGZyYW1lVmlldy5leHBvc2VkQ29udGVudFJlY3QoKTsKICAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKENvbXBvc2l0aW5nLCBzdHJlYW0gPDwgIlxuUmVuZGVyTGF5ZXJDb21wb3NpdG9yICIg
PDwgdGhpcyA8PCAiIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyAoaXMgcm9vdCAiIDw8IGlzRmx1
c2hSb290IDw8ICIpIGV4cG9zZWRSZWN0ICIgPDwgZXhwb3NlZFJlY3QpOwpAQCAtNDc0LDkgKzQ3
NCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxDb29yZGluYXRl
ZExheWVyc0FmdGVyRmx1c2hJbmNsdWRpbmdTdWJmCiB7CiAgICAgdXBkYXRlU2Nyb2xsQ29vcmRp
bmF0ZWRMYXllcnNBZnRlckZsdXNoKCk7CiAKLSAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZp
ZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICBhdXRvJiBmcmFtZSA9IG1fcmVuZGVyVmlldy5m
cmFtZVZpZXcoKS5mcmFtZSgpOwogICAgIGZvciAoRnJhbWUqIHN1YmZyYW1lID0gZnJhbWUudHJl
ZSgpLmZpcnN0Q2hpbGQoKTsgc3ViZnJhbWU7IHN1YmZyYW1lID0gc3ViZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoJmZyYW1lKSkgewotICAgICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gc3ViZnJh
bWUtPmNvbnRlbnRSZW5kZXJlcigpOworICAgICAgICBhdXRvKiB2aWV3ID0gc3ViZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpOwogICAgICAgICBpZiAoIXZpZXcpCiAgICAgICAgICAgICBjb250aW51
ZTsKIApAQCAtNTA5LDcgKzUwOSw3IEBAIHN0YXRpYyBib29sIHNjcm9sbGJhckhhc0Rpc3BsYXlO
b25lKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogLy8gRklYTUU6IENhbiB3ZSBtYWtlIHxsYXllcnwg
Y29uc3QgUmVuZGVyTGF5ZXImPwogc3RhdGljIHZvaWQgdXBkYXRlU2Nyb2xsaW5nTGF5ZXJXaXRo
Q2xpZW50KFJlbmRlckxheWVyJiBsYXllciwgQ2hyb21lQ2xpZW50JiBjbGllbnQpCiB7Ci0gICAg
UmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOworICAgIGF1dG8q
IGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwogCiAgICAg
Ym9vbCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIgPSAhc2Nyb2xsYmFySGFzRGlzcGxheU5vbmUo
bGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKQEAgLTU0MSwxNCArNTQxLDE0IEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRGbHVzaENoYW5nZXNGb3JMYXllcihSZW5kZXJMYXll
ciYgbGF5ZXIsIGNvbnN0IEdyCiAgICAgICAgIG1fc2Nyb2xsaW5nTGF5ZXJzTmVlZGluZ1VwZGF0
ZS5hZGQoJmxheWVyKTsKICNlbmRpZgogCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5n
ID0gbGF5ZXIuYmFja2luZygpOworICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7
CiAgICAgaWYgKGJhY2tpbmctPmJhY2tncm91bmRMYXllclBhaW50c0ZpeGVkUm9vdEJhY2tncm91
bmQoKSAmJiBncmFwaGljc0xheWVyID09IGJhY2tpbmctPmJhY2tncm91bmRMYXllcigpKQogICAg
ICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXJDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpkaWRQYWludEJhY2tpbmcoUmVuZGVyTGF5ZXJCYWNraW5nKikKIHsK
LSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKKyAg
ICBhdXRvJiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CiAgICAgZnJhbWVW
aWV3LnNldExhc3RQYWludFRpbWUobW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogICAg
IGlmIChmcmFtZVZpZXcubWlsZXN0b25lc1BlbmRpbmdQYWludCgpKQogICAgICAgICBmcmFtZVZp
ZXcuZmlyZVBhaW50UmVsYXRlZE1pbGVzdG9uZXNJZk5lZWRlZCgpOwpAQCAtNTU2LDcgKzU1Niw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRQYWludEJhY2tpbmcoUmVuZGVyTGF5
ZXJCYWNraW5nKikKIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZENoYW5nZVZpc2li
bGVSZWN0KCkKIHsKLSAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIgPSByb290R3JhcGhpY3NM
YXllcigpOworICAgIGF1dG8qIHJvb3RMYXllciA9IHJvb3RHcmFwaGljc0xheWVyKCk7CiAgICAg
aWYgKCFyb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjAwLDggKzYwMCw4IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllclRpbGVkQmFja2luZ1VzYWdlQ2hhbmdlZChj
b25zdCBHcmFwaGljc0xheWVyKiBnCiAKIFJlbmRlckxheWVyQ29tcG9zaXRvciogUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjplbmNsb3NpbmdDb21wb3NpdG9yRmx1c2hpbmdMYXllcnMoKSBjb25zdAog
ewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnBhcmVudCgpKSB7Ci0gICAgICAgIFJl
bmRlckxheWVyQ29tcG9zaXRvciogY29tcG9zaXRvciA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIo
KSA/ICZmcmFtZS0+Y29udGVudFJlbmRlcmVyKCktPmNvbXBvc2l0b3IoKSA6IG51bGxwdHI7Cisg
ICAgZm9yIChhdXRvKiBmcmFtZSA9ICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS5wYXJlbnQoKSkgeworICAgICAgICBhdXRvKiBj
b21wb3NpdG9yID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpID8gJmZyYW1lLT5jb250ZW50UmVu
ZGVyZXIoKS0+Y29tcG9zaXRvcigpIDogbnVsbHB0cjsKICAgICAgICAgaWYgKGNvbXBvc2l0b3It
PmlzRmx1c2hpbmdMYXllcnMoKSkKICAgICAgICAgICAgIHJldHVybiBjb21wb3NpdG9yOwogICAg
IH0KQEAgLTcyMiw3ICs3MjIsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVwZGF0ZQogICAgICAgICBt
X29ibGlnYXRvcnlCYWNraW5nU3RvcmVCeXRlcyA9IDA7CiAgICAgICAgIG1fc2Vjb25kYXJ5QmFj
a2luZ1N0b3JlQnl0ZXMgPSAwOwogCi0gICAgICAgIEZyYW1lJiBmcmFtZSA9IG1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKS5mcmFtZSgpOworICAgICAgICBhdXRvJiBmcmFtZSA9IG1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKS5mcmFtZSgpOwogICAgICAgICBib29sIGlzTWFpbkZyYW1lID0gaXNNYWlu
RnJhbWVDb21wb3NpdG9yKCk7CiAgICAgICAgIExPRyhDb21wb3NpdGluZywgIlxuVXBkYXRlICVk
IG9mICVzLlxuIiwgbV9yb290TGF5ZXJVcGRhdGVDb3VudCwgaXNNYWluRnJhbWUgPyAibWFpbiBm
cmFtZSIgOiBmcmFtZS50cmVlKCkudW5pcXVlTmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwogICAgIH0KQEAgLTc3OCw3ICs3NzgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
YXBwZW5kRG9jdW1lbnRPdmVybGF5TGF5ZXJzKFZlY3RvcjxHcmFwaGljc0xheWVyKj4mCiAgICAg
aWYgKCFpc01haW5GcmFtZUNvbXBvc2l0b3IoKSB8fCAhbV9jb21wb3NpdGluZykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgRnJhbWUmIGZyYW1lID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZy
YW1lKCk7CisgICAgYXV0byYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUo
KTsKICAgICBjaGlsZExpc3QuYXBwZW5kKCZmcmFtZS5tYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNv
bnRyb2xsZXIoKS5sYXllcldpdGhEb2N1bWVudE92ZXJsYXlzKCkpOwogfQogCkBAIC03OTcsNyAr
Nzk3LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmxvZ0xheWVySW5mbyhjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZXIsIGludCBkZXB0aCkKICAgICBpZiAoIWNvbXBvc2l0aW5nTG9nRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tp
bmcgPSBsYXllci5iYWNraW5nKCk7CisgICAgYXV0byogYmFja2luZyA9IGxheWVyLmJhY2tpbmco
KTsKICAgICBpZiAocmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGxheWVyKSB8fCBsYXllci5pc1Jl
bmRlclZpZXdMYXllcigpKSB7CiAgICAgICAgICsrbV9vYmxpZ2F0ZUNvbXBvc2l0ZWRMYXllckNv
dW50OwogICAgICAgICBtX29ibGlnYXRvcnlCYWNraW5nU3RvcmVCeXRlcyArPSBiYWNraW5nLT5i
YWNraW5nU3RvcmVNZW1vcnlFc3RpbWF0ZSgpOwpAQCAtODY4LDggKzg2OCw4IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpsb2dMYXllckluZm8oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
LCBpbnQgZGVwdGgpCiAKIHN0YXRpYyBib29sIGNoZWNrSWZEZXNjZW5kYW50Q2xpcHBpbmdDb250
ZXh0TmVlZHNVcGRhdGUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBib29sIGlzQ2xpcHBpbmcp
CiB7Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBsYXllci5maXJzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIFJlbmRlckxheWVy
QmFja2luZyogYmFja2luZyA9IGNoaWxkLT5iYWNraW5nKCk7CisgICAgZm9yIChhdXRvKiBjaGls
ZCA9IGxheWVyLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgYXV0byogYmFja2luZyA9IGNoaWxkLT5iYWNraW5nKCk7CiAgICAgICAg
IGlmIChiYWNraW5nICYmIChpc0NsaXBwaW5nIHx8IGJhY2tpbmctPmhhc0FuY2VzdG9yQ2xpcHBp
bmdMYXllcigpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC05MDAsOCArOTAwLDgg
QEAgc3RhdGljIGJvb2wgc3R5bGVDaGFuZ2VSZXF1aXJlc0xheWVyUmVidWlsZChjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmQKIAogICAgIC8vIEZJWE1FOiBuZWVkIHRvIGNoZWNr
IGV2ZXJ5dGhpbmcgdGhhdCB3ZSBjb25zdWx0IHRvIGF2b2lkIGJhY2tpbmcgc3RvcmUgaGVyZTog
d2Via2l0Lm9yZy9iLzEzODM4MwogICAgIGlmICghb2xkU3R5bGUub3BhY2l0eSgpICE9ICFuZXdT
dHlsZS5vcGFjaXR5KCkpIHsKLSAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciA9IGxheWVyLnJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOwotICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBhbmNlc3RvckJhY2tpbmcgPSByZXBhaW50Q29u
dGFpbmVyID8gcmVwYWludENvbnRhaW5lci0+bGF5ZXIoKS0+YmFja2luZygpIDogbnVsbHB0cikg
eworICAgICAgICBhdXRvKiByZXBhaW50Q29udGFpbmVyID0gbGF5ZXIucmVuZGVyZXIoKS5jb250
YWluZXJGb3JSZXBhaW50KCk7CisgICAgICAgIGlmIChhdXRvKiBhbmNlc3RvckJhY2tpbmcgPSBy
ZXBhaW50Q29udGFpbmVyID8gcmVwYWludENvbnRhaW5lci0+bGF5ZXIoKS0+YmFja2luZygpIDog
bnVsbHB0cikgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGJvb2w+KG5ld1N0eWxlLm9w
YWNpdHkoKSkgIT0gYW5jZXN0b3JCYWNraW5nLT5ncmFwaGljc0xheWVyKCktPmRyYXdzQ29udGVu
dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05ODEsMTMg
Kzk4MSwxMyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQ29tcG9zaXRlQ2xpcFBh
dGgoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhh
c01hc2soKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ2xpcFBhdGhPcGVyYXRpb24m
IGNsaXBQYXRoID0gKmxheWVyLnJlbmRlcmVyKCkuc3R5bGUoKS5jbGlwUGF0aCgpOworICAgIGF1
dG8mIGNsaXBQYXRoID0gKmxheWVyLnJlbmRlcmVyKCkuc3R5bGUoKS5jbGlwUGF0aCgpOwogICAg
IHJldHVybiAoY2xpcFBhdGgudHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9uOjpTaGFwZSB8fCBj
bGlwUGF0aC50eXBlKCkgPT0gQ2xpcFBhdGhPcGVyYXRpb246OlNoYXBlKSAmJiBHcmFwaGljc0xh
eWVyOjpzdXBwb3J0c0xheWVyVHlwZShHcmFwaGljc0xheWVyOjpUeXBlOjpTaGFwZSk7CiB9CiAK
IHN0YXRpYyBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckZvckNvbXBvc2l0aW5nVGVz
dHMoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogewotICAgIFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QqIHJlbmRlcmVyID0gJmxheWVyLnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSAm
bGF5ZXIucmVuZGVyZXIoKTsKIAogICAgIC8vIFRoZSBjb21wb3NpdGluZyBzdGF0ZSBvZiBhIHJl
ZmxlY3Rpb24gc2hvdWxkIG1hdGNoIHRoYXQgb2YgaXRzIHJlZmxlY3RlZCBsYXllci4KICAgICBp
ZiAobGF5ZXIuaXNSZWZsZWN0aW9uKCkpCkBAIC0xMDI1LDcgKzEwMjUsNyBAQCBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBv
c2l0aW5nQ2hhbmdlUgogCiAgICAgICAgICAgICBpZiAobGF5ZXIuaXNSZW5kZXJWaWV3TGF5ZXIo
KSAmJiB1c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKGxheWVyKSkgewogICAgICAgICAg
ICAgICAgIHVwZGF0ZVNjcm9sbENvb3JkaW5hdGVkU3RhdHVzKGxheWVyLCB7IFNjcm9sbGluZ05v
ZGVDaGFuZ2VGbGFnczo6TGF5ZXIsIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9t
ZXRyeSB9KTsKLSAgICAgICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdD
b29yZGluYXRvcigpKQogICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSk7CiAj
aWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyRm9y
SGVhZGVyKHBhZ2UoKS5oZWFkZXJIZWlnaHQoKSk7CkBAIC0xMDMzLDcgKzEwMzMsNyBAQCBib29s
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIs
IENvbXBvc2l0aW5nQ2hhbmdlUgogI2VuZGlmCiAgICAgICAgICAgICAgICAgdXBkYXRlUm9vdENv
bnRlbnRMYXllckNsaXBwaW5nKCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoVGlsZWRCYWNraW5n
KiB0aWxlZEJhY2tpbmcgPSBsYXllci5iYWNraW5nKCktPnRpbGVkQmFja2luZygpKQorICAgICAg
ICAgICAgICAgIGlmIChhdXRvKiB0aWxlZEJhY2tpbmcgPSBsYXllci5iYWNraW5nKCktPnRpbGVk
QmFja2luZygpKQogICAgICAgICAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldFRvcENvbnRl
bnRJbnNldChtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudG9wQ29udGVudEluc2V0KCkpOwogICAg
ICAgICAgICAgfQogCkBAIC0xMDUwLDggKzEwNTAsOCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dXBkYXRlQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIENvbXBvc2l0aW5nQ2hhbmdl
UgogICAgICAgICAgICAgLy8gaXRzIHJlcGxpY2EgR3JhcGhpY3NMYXllci4gSW4gcHJhY3RpY2Ug
dGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGJlY2F1c2UgcmVmbGVjdGVlIGFuZCByZWZsZWN0aW9u
IAogICAgICAgICAgICAgLy8gYXJlIGJvdGggZWl0aGVyIGNvbXBvc2l0ZWQsIG9yIG5vdCBjb21w
b3NpdGVkLgogICAgICAgICAgICAgaWYgKGxheWVyLmlzUmVmbGVjdGlvbigpKSB7Ci0gICAgICAg
ICAgICAgICAgUmVuZGVyTGF5ZXIqIHNvdXJjZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdD4oKmxheWVyLnJlbmRlcmVyKCkucGFyZW50KCkpLmxheWVyKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHNvdXJjZUxheWVyLT5i
YWNraW5nKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBzb3VyY2VMYXllciA9IGRvd25jYXN0
PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpsYXllci5yZW5kZXJlcigpLnBhcmVudCgpKS5sYXll
cigpOworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBiYWNraW5nID0gc291cmNlTGF5ZXItPmJh
Y2tpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmFja2luZy0+Z3JhcGhpY3NM
YXllcigpLT5yZXBsaWNhTGF5ZXIoKSA9PSBsYXllci5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmctPmdyYXBoaWNzTGF5ZXIoKS0+c2V0UmVw
bGljYXRlZEJ5TGF5ZXIobnVsbHB0cik7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTA4MCw3ICsx
MDgwLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmcoUmVuZGVy
TGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKICNlbmRpZgogCiAgICAgaWYgKGxheWVy
Q2hhbmdlZCAmJiBpczxSZW5kZXJXaWRnZXQ+KGxheWVyLnJlbmRlcmVyKCkpKSB7Ci0gICAgICAg
IFJlbmRlckxheWVyQ29tcG9zaXRvciogaW5uZXJDb21wb3NpdG9yID0gZnJhbWVDb250ZW50c0Nv
bXBvc2l0b3IoJmRvd25jYXN0PFJlbmRlcldpZGdldD4obGF5ZXIucmVuZGVyZXIoKSkpOworICAg
ICAgICBhdXRvKiBpbm5lckNvbXBvc2l0b3IgPSBmcmFtZUNvbnRlbnRzQ29tcG9zaXRvcigmZG93
bmNhc3Q8UmVuZGVyV2lkZ2V0PihsYXllci5yZW5kZXJlcigpKSk7CiAgICAgICAgIGlmIChpbm5l
ckNvbXBvc2l0b3IgJiYgaW5uZXJDb21wb3NpdG9yLT5pbkNvbXBvc2l0aW5nTW9kZSgpKQogICAg
ICAgICAgICAgaW5uZXJDb21wb3NpdG9yLT51cGRhdGVSb290TGF5ZXJBdHRhY2htZW50KCk7CiAg
ICAgfQpAQCAtMTA5Niw3ICsxMDk2LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZUJhY2tpbmcoUmVuZGVyTGF5ZXImIGxheWVyLCBDb21wb3NpdGluZ0NoYW5nZVIKICAgICAg
ICAgICAgIGxheWVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxheWVy
Q2hhbmdlZCkgewotICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGlu
YXRvcigpKQogICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdG
aXhlZE9iamVjdHNEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpKTsKICAgICAgICAg
fQogICAgIH0gZWxzZQpAQCAtMTEyNiw3ICsxMTI2LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcGFpbnRPbkNvbXBvc2l0aW5nQ2hhbmdlKFJlbmRlckxheWVyJiBsYXllcikKICAg
ICBpZiAoJmxheWVyLnJlbmRlcmVyKCkgIT0gJm1fcmVuZGVyVmlldyAmJiAhbGF5ZXIucmVuZGVy
ZXIoKS5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciA9IGxheWVyLnJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVw
YWludCgpOworICAgIGF1dG8qIHJlcGFpbnRDb250YWluZXIgPSBsYXllci5yZW5kZXJlcigpLmNv
bnRhaW5lckZvclJlcGFpbnQoKTsKICAgICBpZiAoIXJlcGFpbnRDb250YWluZXIpCiAgICAgICAg
IHJlcGFpbnRDb250YWluZXIgPSAmbV9yZW5kZXJWaWV3OwogCkBAIC0xMTQyLDcgKzExNDIsNyBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2Uo
UmVuZGVyTGF5ZXImIGxheWVyKQogLy8gVGhpcyBtZXRob2QgYXNzdW1lcyB0aGF0IGxheW91dCBp
cyB1cC10by1kYXRlLCB1bmxpa2UgcmVwYWludE9uQ29tcG9zaXRpbmdDaGFuZ2UoKS4KIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXBhaW50SW5Db21wb3NpdGVkQW5jZXN0b3IoUmVuZGVy
TGF5ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewotICAgIFJlbmRlckxheWVy
KiBjb21wb3NpdGVkQW5jZXN0b3IgPSBsYXllci5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyRm9y
UmVwYWludChFeGNsdWRlU2VsZik7CisgICAgYXV0byogY29tcG9zaXRlZEFuY2VzdG9yID0gbGF5
ZXIuZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllckZvclJlcGFpbnQoRXhjbHVkZVNlbGYpOwogICAg
IGlmICghY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICByZXR1cm47CiAKQEAgLTExNzYsNyAr
MTE3Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVJlbW92ZWQo
UmVuZGVyTGF5ZXImIHBhcmVudCwgUmVuZGVyTGF5ZXImCiAKIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmVuY2xvc2luZ05vblN0YWNraW5nQ2xpcHBpbmdMYXllcihjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZXIpIGNvbnN0CiB7Ci0gICAgZm9yIChSZW5kZXJMYXllciogcGFyZW50
ID0gbGF5ZXIucGFyZW50KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnQoKSkgewor
ICAgIGZvciAoYXV0byogcGFyZW50ID0gbGF5ZXIucGFyZW50KCk7IHBhcmVudDsgcGFyZW50ID0g
cGFyZW50LT5wYXJlbnQoKSkgewogICAgICAgICBpZiAocGFyZW50LT5pc1N0YWNraW5nQ29udGFp
bmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgaWYgKHBhcmVudC0+
cmVuZGVyZXIoKS5oYXNDbGlwT3JPdmVyZmxvd0NsaXAoKSkKQEAgLTE0OTIsOCArMTQ5Miw4IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRDb21wb3NpdGluZ1BhcmVudChSZW5kZXJM
YXllciYgY2hpbGRMYXllciwgUmVuZGVyCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChwYXJl
bnRMYXllcikgewotICAgICAgICBHcmFwaGljc0xheWVyKiBob3N0aW5nTGF5ZXIgPSBwYXJlbnRM
YXllci0+YmFja2luZygpLT5wYXJlbnRGb3JTdWJsYXllcnMoKTsKLSAgICAgICAgR3JhcGhpY3NM
YXllciogaG9zdGVkTGF5ZXIgPSBjaGlsZExheWVyLmJhY2tpbmcoKS0+Y2hpbGRGb3JTdXBlcmxh
eWVycygpOworICAgICAgICBhdXRvKiBob3N0aW5nTGF5ZXIgPSBwYXJlbnRMYXllci0+YmFja2lu
ZygpLT5wYXJlbnRGb3JTdWJsYXllcnMoKTsKKyAgICAgICAgYXV0byogaG9zdGVkTGF5ZXIgPSBj
aGlsZExheWVyLmJhY2tpbmcoKS0+Y2hpbGRGb3JTdXBlcmxheWVycygpOwogICAgICAgICAKICAg
ICAgICAgaG9zdGluZ0xheWVyLT5hZGRDaGlsZChob3N0ZWRMYXllcik7CiAgICAgfSBlbHNlCkBA
IC0xNTIzLDEzICsxNTIzLDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxk
Q29tcG9zaXRpbmdMYXllclRyZWUoUmVuZGVyTGF5ZXImIGxheWVyLCBWZWN0CiAgICAgLy8gTm90
ZSB0aGF0IHdlIGNhbiBvbmx5IGRvIHdvcmsgaGVyZSB0aGF0IGlzIGluZGVwZW5kZW50IG9mIHdo
ZXRoZXIgdGhlIGRlc2NlbmRhbnQgbGF5ZXJzCiAgICAgLy8gaGF2ZSBiZWVuIHByb2Nlc3NlZC4g
Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKCkgd2lsbCBhbHJlYWR5IGhhdmUgZG9uZSB0
aGUgcmVwYWludCBpZiBuZWNlc3NhcnkuCiAKLSAgICBSZW5kZXJMYXllckJhY2tpbmcqIGxheWVy
QmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKKyAgICBhdXRvKiBsYXllckJhY2tpbmcgPSBsYXll
ci5iYWNraW5nKCk7CiAgICAgaWYgKGxheWVyQmFja2luZykgewogICAgICAgICAvLyBUaGUgY29t
cG9zaXRpbmcgc3RhdGUgb2YgYWxsIG91ciBjaGlsZHJlbiBoYXMgYmVlbiB1cGRhdGVkIGFscmVh
ZHksIHNvIG5vdwogICAgICAgICAvLyB3ZSBjYW4gY29tcHV0ZSBhbmQgY2FjaGUgdGhlIGNvbXBv
c2l0ZWQgYm91bmRzIGZvciB0aGlzIGxheWVyLgogICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0
ZUNvbXBvc2l0ZWRCb3VuZHMoKTsKIAotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlZmxlY3Rp
b24gPSBsYXllci5yZWZsZWN0aW9uTGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0byogcmVmbGVj
dGlvbiA9IGxheWVyLnJlZmxlY3Rpb25MYXllcigpKSB7CiAgICAgICAgICAgICBpZiAocmVmbGVj
dGlvbi0+YmFja2luZygpKQogICAgICAgICAgICAgICAgIHJlZmxlY3Rpb24tPmJhY2tpbmcoKS0+
dXBkYXRlQ29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICB9CkBAIC0xNTkwLDE3ICsxNTkwLDE3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRy
ZWUoUmVuZGVyTGF5ZXImIGxheWVyLCBWZWN0CiAgICAgICAgIC8vIElmIHRoZSBsYXllciBoYXMg
YSBjbGlwcGluZyBsYXllciB0aGUgb3ZlcmZsb3cgY29udHJvbHMgbGF5ZXJzIHdpbGwgYmUgc2li
bGluZ3Mgb2YgdGhlIGNsaXBwaW5nIGxheWVyLgogICAgICAgICAvLyBPdGhlcndpc2UsIHRoZSBv
dmVyZmxvdyBjb250cm9sIGxheWVycyBhcmUgbm9ybWFsIGNoaWxkcmVuLgogICAgICAgICBpZiAo
IWxheWVyQmFja2luZy0+aGFzQ2xpcHBpbmdMYXllcigpICYmICFsYXllckJhY2tpbmctPmhhc1Nj
cm9sbGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBvdmVyZmxv
d0NvbnRyb2xMYXllciA9IGxheWVyQmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBvdmVyZmxvd0NvbnRyb2xMYXllciA9IGxheWVy
QmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgICAgICAg
ICBvdmVyZmxvd0NvbnRyb2xMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwogICAgICAgICAgICAg
ICAgIGxheWVyQmFja2luZy0+cGFyZW50Rm9yU3VibGF5ZXJzKCktPmFkZENoaWxkKG92ZXJmbG93
Q29udHJvbExheWVyKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKEdyYXBoaWNz
TGF5ZXIqIG92ZXJmbG93Q29udHJvbExheWVyID0gbGF5ZXJCYWNraW5nLT5sYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBvdmVyZmxvd0NvbnRyb2xM
YXllciA9IGxheWVyQmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAg
ICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sTGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAg
ICAgICAgICAgICAgICBsYXllckJhY2tpbmctPnBhcmVudEZvclN1YmxheWVycygpLT5hZGRDaGls
ZChvdmVyZmxvd0NvbnRyb2xMYXllcik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
IChHcmFwaGljc0xheWVyKiBvdmVyZmxvd0NvbnRyb2xMYXllciA9IGxheWVyQmFja2luZy0+bGF5
ZXJGb3JTY3JvbGxDb3JuZXIoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIG92ZXJmbG93Q29u
dHJvbExheWVyID0gbGF5ZXJCYWNraW5nLT5sYXllckZvclNjcm9sbENvcm5lcigpKSB7CiAgICAg
ICAgICAgICAgICAgb3ZlcmZsb3dDb250cm9sTGF5ZXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAg
ICAgICAgICAgICAgICBsYXllckJhY2tpbmctPnBhcmVudEZvclN1YmxheWVycygpLT5hZGRDaGls
ZChvdmVyZmxvd0NvbnRyb2xMYXllcik7CiAgICAgICAgICAgICB9CkBAIC0xNjA5LDcgKzE2MDks
NyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJU
cmVlKFJlbmRlckxheWVyJiBsYXllciwgVmVjdAogICAgICAgICBjaGlsZExheWVyc09mRW5jbG9z
aW5nTGF5ZXIuYXBwZW5kKGxheWVyQmFja2luZy0+Y2hpbGRGb3JTdXBlcmxheWVycygpKTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKFJlbmRlckxheWVyQmFja2luZyogbGF5ZXJCYWNraW5nID0gbGF5
ZXIuYmFja2luZygpKQorICAgIGlmIChhdXRvKiBsYXllckJhY2tpbmcgPSBsYXllci5iYWNraW5n
KCkpCiAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRlQWZ0ZXJEZXNjZW5kYW50cygpOwogfQog
CkBAIC0xNjQwLDcgKzE2NDAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVW
aWV3RGlkQ2hhbmdlU2l6ZSgpCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpoYXNDb29y
ZGluYXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0gICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICBh
dXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7
CiAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yICYmIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5jb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhtX3JlbmRlclZpZXcuZnJhbWVWaWV3
KCkpOwogfQogCkBAIC0xNjQ4LDE4ICsxNjQ4LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVTY3JvbGxMYXllclBvc2l0aW9uKCkKIHsKICAgICBBU1NFUlQobV9zY3JvbGxM
YXllcik7CiAKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZp
ZXcoKTsKKyAgICBhdXRvJiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CiAg
ICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZpZXcuc2Nyb2xsUG9zaXRpb24oKTsK
IAogICAgIG1fc2Nyb2xsTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoLXNjcm9sbFBvc2l0
aW9uLngoKSwgLXNjcm9sbFBvc2l0aW9uLnkoKSkpOwogCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIq
IGZpeGVkQmFja2dyb3VuZExheWVyID0gZml4ZWRSb290QmFja2dyb3VuZExheWVyKCkpCisgICAg
aWYgKGF1dG8qIGZpeGVkQmFja2dyb3VuZExheWVyID0gZml4ZWRSb290QmFja2dyb3VuZExheWVy
KCkpCiAgICAgICAgIGZpeGVkQmFja2dyb3VuZExheWVyLT5zZXRQb3NpdGlvbihmcmFtZVZpZXcu
c2Nyb2xsUG9zaXRpb25Gb3JGaXhlZFBvc2l0aW9uKCkpOwogfQogCiBGbG9hdFBvaW50IFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cG9zaXRpb25Gb3JDbGlwTGF5ZXIoKSBjb25zdAogewotICAgIEZy
YW1lVmlldyYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOworICAgIGF1dG8m
IGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKIAogICAgIHJldHVybiBGbG9h
dFBvaW50KAogICAgICAgICBmcmFtZVZpZXcuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpID8gZnJhbWVWaWV3Lmhvcml6b250YWxTY3JvbGxiYXJJbnRydXNpb24oKSA6
IDAsCkBAIC0xNjg5LDIxICsxNjg5LDIwIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpm
cmFtZVZpZXdEaWRBZGRPclJlbW92ZVNjcm9sbGJhcnMoKQogCiB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6ZnJhbWVWaWV3RGlkTGF5b3V0KCkKIHsKLSAgICBSZW5kZXJMYXllckJhY2tpbmcq
IHJlbmRlclZpZXdCYWNraW5nID0gbV9yZW5kZXJWaWV3LmxheWVyKCktPmJhY2tpbmcoKTsKLSAg
ICBpZiAocmVuZGVyVmlld0JhY2tpbmcpCisgICAgaWYgKGF1dG8qIHJlbmRlclZpZXdCYWNraW5n
ID0gbV9yZW5kZXJWaWV3LmxheWVyKCktPmJhY2tpbmcoKSkKICAgICAgICAgcmVuZGVyVmlld0Jh
Y2tpbmctPmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyb290Rml4ZWRCYWNrZ3JvdW5kc0NoYW5nZWQoKQogewotICAgIFJlbmRl
ckxheWVyQmFja2luZyogcmVuZGVyVmlld0JhY2tpbmcgPSBtX3JlbmRlclZpZXcubGF5ZXIoKS0+
YmFja2luZygpOworICAgIGF1dG8qIHJlbmRlclZpZXdCYWNraW5nID0gbV9yZW5kZXJWaWV3Lmxh
eWVyKCktPmJhY2tpbmcoKTsKICAgICBpZiAocmVuZGVyVmlld0JhY2tpbmcgJiYgcmVuZGVyVmll
d0JhY2tpbmctPmlzRnJhbWVMYXllcldpdGhUaWxlZEJhY2tpbmcoKSkKICAgICAgICAgc2V0Q29t
cG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOwogfQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6c2Nyb2xsaW5nTGF5ZXJEaWRDaGFuZ2UoUmVuZGVyTGF5ZXImIGxheWVyKQogewotICAg
IGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKGxheWVyKTsKIH0KIApA
QCAtMTc2Miw4ICsxNzYxLDggQEAgU3RyaW5nIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJU
cmVlQXNUZXh0KExheWVyVHJlZUZsYWdzIGZsYWdzKQogCiBSZW5kZXJMYXllckNvbXBvc2l0b3Iq
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZnJhbWVDb250ZW50c0NvbXBvc2l0b3IoUmVuZGVyV2lk
Z2V0KiByZW5kZXJlcikKIHsKLSAgICBpZiAoRG9jdW1lbnQqIGNvbnRlbnREb2N1bWVudCA9IHJl
bmRlcmVyLT5mcmFtZU93bmVyRWxlbWVudCgpLmNvbnRlbnREb2N1bWVudCgpKSB7Ci0gICAgICAg
IGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gY29udGVudERvY3VtZW50LT5yZW5kZXJWaWV3KCkpCisg
ICAgaWYgKGF1dG8qIGNvbnRlbnREb2N1bWVudCA9IHJlbmRlcmVyLT5mcmFtZU93bmVyRWxlbWVu
dCgpLmNvbnRlbnREb2N1bWVudCgpKSB7CisgICAgICAgIGlmIChhdXRvKiB2aWV3ID0gY29udGVu
dERvY3VtZW50LT5yZW5kZXJWaWV3KCkpCiAgICAgICAgICAgICByZXR1cm4gJnZpZXctPmNvbXBv
c2l0b3IoKTsKICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNzcxLDE3ICsxNzcwLDE3
IEBAIFJlbmRlckxheWVyQ29tcG9zaXRvciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmcmFtZUNv
bnRlbnRzQ29tcG9zaXRvcihSZW5kZXJXaWRnCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpwYXJlbnRGcmFtZUNvbnRlbnRMYXllcnMoUmVuZGVyV2lkZ2V0KiByZW5kZXJlcikKIHsKLSAg
ICBSZW5kZXJMYXllckNvbXBvc2l0b3IqIGlubmVyQ29tcG9zaXRvciA9IGZyYW1lQ29udGVudHND
b21wb3NpdG9yKHJlbmRlcmVyKTsKKyAgICBhdXRvKiBpbm5lckNvbXBvc2l0b3IgPSBmcmFtZUNv
bnRlbnRzQ29tcG9zaXRvcihyZW5kZXJlcik7CiAgICAgaWYgKCFpbm5lckNvbXBvc2l0b3IgfHwg
IWlubmVyQ29tcG9zaXRvci0+aW5Db21wb3NpdGluZ01vZGUoKSB8fCBpbm5lckNvbXBvc2l0b3It
PnJvb3RMYXllckF0dGFjaG1lbnQoKSAhPSBSb290TGF5ZXJBdHRhY2hlZFZpYUVuY2xvc2luZ0Zy
YW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gcmVuZGVyZXItPmxheWVyKCk7CisgICAgYXV0byogbGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIo
KTsKICAgICBpZiAoIWxheWVyLT5pc0NvbXBvc2l0ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXItPmJhY2tpbmcoKTsK
LSAgICBHcmFwaGljc0xheWVyKiBob3N0aW5nTGF5ZXIgPSBiYWNraW5nLT5wYXJlbnRGb3JTdWJs
YXllcnMoKTsKLSAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIgPSBpbm5lckNvbXBvc2l0b3It
PnJvb3RHcmFwaGljc0xheWVyKCk7CisgICAgYXV0byogYmFja2luZyA9IGxheWVyLT5iYWNraW5n
KCk7CisgICAgYXV0byogaG9zdGluZ0xheWVyID0gYmFja2luZy0+cGFyZW50Rm9yU3VibGF5ZXJz
KCk7CisgICAgYXV0byogcm9vdExheWVyID0gaW5uZXJDb21wb3NpdG9yLT5yb290R3JhcGhpY3NM
YXllcigpOwogICAgIGlmIChob3N0aW5nTGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpICE9IDEgfHwg
aG9zdGluZ0xheWVyLT5jaGlsZHJlbigpWzBdICE9IHJvb3RMYXllcikgewogICAgICAgICBob3N0
aW5nTGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CiAgICAgICAgIGhvc3RpbmdMYXllci0+YWRk
Q2hpbGQocm9vdExheWVyKTsKQEAgLTE3OTIsMTIgKzE3OTEsMTIgQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnBhcmVudEZyYW1lQ29udGVudExheWVycyhSZW5kZXJXaWRnZXQqIHJlbmRl
cmVyKQogLy8gVGhpcyBqdXN0IHVwZGF0ZXMgbGF5ZXIgZ2VvbWV0cnkgd2l0aG91dCBjaGFuZ2lu
ZyB0aGUgaGllcmFyY2h5Lgogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVy
VHJlZUdlb21ldHJ5KFJlbmRlckxheWVyJiBsYXllciwgaW50IGRlcHRoKQogewotICAgIGlmIChS
ZW5kZXJMYXllckJhY2tpbmcqIGxheWVyQmFja2luZyA9IGxheWVyLmJhY2tpbmcoKSkgeworICAg
IGlmIChhdXRvKiBsYXllckJhY2tpbmcgPSBsYXllci5iYWNraW5nKCkpIHsKICAgICAgICAgLy8g
VGhlIGNvbXBvc2l0aW5nIHN0YXRlIG9mIGFsbCBvdXIgY2hpbGRyZW4gaGFzIGJlZW4gdXBkYXRl
ZCBhbHJlYWR5LCBzbyBub3cKICAgICAgICAgLy8gd2UgY2FuIGNvbXB1dGUgYW5kIGNhY2hlIHRo
ZSBjb21wb3NpdGVkIGJvdW5kcyBmb3IgdGhpcyBsYXllci4KICAgICAgICAgbGF5ZXJCYWNraW5n
LT51cGRhdGVDb21wb3NpdGVkQm91bmRzKCk7CiAKLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBy
ZWZsZWN0aW9uID0gbGF5ZXIucmVmbGVjdGlvbkxheWVyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8q
IHJlZmxlY3Rpb24gPSBsYXllci5yZWZsZWN0aW9uTGF5ZXIoKSkgewogICAgICAgICAgICAgaWYg
KHJlZmxlY3Rpb24tPmJhY2tpbmcoKSkKICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5iYWNr
aW5nKCktPnVwZGF0ZUNvbXBvc2l0ZWRCb3VuZHMoKTsKICAgICAgICAgfQpAQCAtMTgzNCw3ICsx
ODMzLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyVHJlZUdlb21l
dHJ5KFJlbmRlckxheWVyJiBsYXllciwgaW50IGRlcHQKICAgICAgICAgICAgIHVwZGF0ZUxheWVy
VHJlZUdlb21ldHJ5KCpyZW5kZXJMYXllciwgZGVwdGggKyAxKTsKICAgICB9CiAKLSAgICBpZiAo
UmVuZGVyTGF5ZXJCYWNraW5nKiBsYXllckJhY2tpbmcgPSBsYXllci5iYWNraW5nKCkpCisgICAg
aWYgKGF1dG8qIGxheWVyQmFja2luZyA9IGxheWVyLmJhY2tpbmcoKSkKICAgICAgICAgbGF5ZXJC
YWNraW5nLT51cGRhdGVBZnRlckRlc2NlbmRhbnRzKCk7CiB9CiAKQEAgLTE4NDIsMTAgKzE4NDEs
MTAgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUxheWVyVHJlZUdlb21ldHJ5
KFJlbmRlckxheWVyJiBsYXllciwgaW50IGRlcHQKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVDb21wb3NpdGluZ0Rlc2NlbmRhbnRHZW9tZXRyeShSZW5kZXJMYXllciYgY29tcG9z
aXRpbmdBbmNlc3RvciwgUmVuZGVyTGF5ZXImIGxheWVyLCBib29sIGNvbXBvc2l0ZWRDaGlsZHJl
bk9ubHkpCiB7CiAgICAgaWYgKCZsYXllciAhPSAmY29tcG9zaXRpbmdBbmNlc3RvcikgewotICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXJCYWNraW5nKiBsYXllckJhY2tpbmcgPSBsYXllci5iYWNraW5n
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGxheWVyQmFja2luZyA9IGxheWVyLmJhY2tpbmcoKSkg
ewogICAgICAgICAgICAgbGF5ZXJCYWNraW5nLT51cGRhdGVDb21wb3NpdGVkQm91bmRzKCk7CiAK
LSAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogcmVmbGVjdGlvbiA9IGxheWVyLnJlZmxlY3Rp
b25MYXllcigpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcmVmbGVjdGlvbiA9IGxheWVyLnJl
ZmxlY3Rpb25MYXllcigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJlZmxlY3Rpb24tPmJhY2tp
bmcoKSkKICAgICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbi0+YmFja2luZygpLT51cGRhdGVD
b21wb3NpdGVkQm91bmRzKCk7CiAgICAgICAgICAgICB9CkBAIC0xODg0LDcgKzE4ODMsNyBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdEZXNjZW5kYW50R2Vv
bWV0cnkoUmVuZGVyTGF5ZXImIGNvbQogICAgIH0KICAgICAKICAgICBpZiAoJmxheWVyICE9ICZj
b21wb3NpdGluZ0FuY2VzdG9yKSB7Ci0gICAgICAgIGlmIChSZW5kZXJMYXllckJhY2tpbmcqIGxh
eWVyQmFja2luZyA9IGxheWVyLmJhY2tpbmcoKSkKKyAgICAgICAgaWYgKGF1dG8qIGxheWVyQmFj
a2luZyA9IGxheWVyLmJhY2tpbmcoKSkKICAgICAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRl
QWZ0ZXJEZXNjZW5kYW50cygpOwogICAgIH0KIH0KQEAgLTE5NDAsNyArMTkzOSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRJc0luV2luZG93KGJvb2wgaXNJbldpbmRvdykKICAg
ICBpZiAoIWluQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChH
cmFwaGljc0xheWVyKiByb290TGF5ZXIgPSByb290R3JhcGhpY3NMYXllcigpKSB7CisgICAgaWYg
KGF1dG8qIHJvb3RMYXllciA9IHJvb3RHcmFwaGljc0xheWVyKCkpIHsKICAgICAgICAgR3JhcGhp
Y3NMYXllcjo6dHJhdmVyc2UoKnJvb3RMYXllciwgW2lzSW5XaW5kb3ddKEdyYXBoaWNzTGF5ZXIm
IGxheWVyKSB7CiAgICAgICAgICAgICBsYXllci5zZXRJc0luV2luZG93KGlzSW5XaW5kb3cpOwog
ICAgICAgICB9KTsKQEAgLTE5NzUsNyArMTk3NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpjbGVhckJhY2tpbmdGb3JMYXllckluY2x1ZGluZ0Rlc2NlbmRhbnRzKFJlbmRlckxheWVy
CiAgICAgICAgIGxheWVyLmNsZWFyQmFja2luZygpOwogICAgIH0KIAotICAgIGZvciAoUmVuZGVy
TGF5ZXIqIGNoaWxkTGF5ZXIgPSBsYXllci5maXJzdENoaWxkKCk7IGNoaWxkTGF5ZXI7IGNoaWxk
TGF5ZXIgPSBjaGlsZExheWVyLT5uZXh0U2libGluZygpKQorICAgIGZvciAoYXV0byogY2hpbGRM
YXllciA9IGxheWVyLmZpcnN0Q2hpbGQoKTsgY2hpbGRMYXllcjsgY2hpbGRMYXllciA9IGNoaWxk
TGF5ZXItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNsZWFyQmFja2luZ0ZvckxheWVySW5jbHVk
aW5nRGVzY2VuZGFudHMoKmNoaWxkTGF5ZXIpOwogfQogCkBAIC0yMzAzLDcgKzIzMDIsNyBAQCBi
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xpcHBlZEJ5QW5jZXN0b3IoUmVuZGVyTGF5ZXIm
IGxheWVyKSBjb25zdAogICAgIGlmICghbGF5ZXIuaXNDb21wb3NpdGVkKCkgfHwgIWxheWVyLnBh
cmVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJMYXllciogY29tcG9z
aXRpbmdBbmNlc3RvciA9IGxheWVyLmFuY2VzdG9yQ29tcG9zaXRpbmdMYXllcigpOworICAgIGF1
dG8qIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBsYXllci5hbmNlc3RvckNvbXBvc2l0aW5nTGF5ZXIo
KTsKICAgICBpZiAoIWNvbXBvc2l0aW5nQW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMjMxMiwxMiArMjMxMSwxMiBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y2xp
cHBlZEJ5QW5jZXN0b3IoUmVuZGVyTGF5ZXImIGxheWVyKSBjb25zdAogICAgIC8vIGFuZCBsYXll
ci4gVGhlIGV4Y2VwdGlvbiBpcyB3aGVuIHRoZSBjb21wb3NpdGluZ0FuY2VzdG9yIGlzb2xhdGVz
IGNvbXBvc2l0ZWQgYmxlbmRpbmcgY2hpbGRyZW4sCiAgICAgLy8gaW4gdGhpcyBjYXNlIGl0IGlz
IG5vdCBhbGxvd2VkIHRvIGNsaXBzQ29tcG9zaXRpbmdEZXNjZW5kYW50cygpIGFuZCBlYWNoIG9m
IGl0cyBjaGlsZHJlbgogICAgIC8vIHdpbGwgYmUgY2xpcHBlZEJ5QW5jZXN0b3IoKXMsIGluY2x1
ZGluZyB0aGUgY29tcG9zaXRpbmdBbmNlc3Rvci4KLSAgICBSZW5kZXJMYXllciogY29tcHV0ZUNs
aXBSb290ID0gY29tcG9zaXRpbmdBbmNlc3RvcjsKKyAgICBhdXRvKiBjb21wdXRlQ2xpcFJvb3Qg
PSBjb21wb3NpdGluZ0FuY2VzdG9yOwogICAgIGlmICghY29tcG9zaXRpbmdBbmNlc3Rvci0+aXNv
bGF0ZXNDb21wb3NpdGVkQmxlbmRpbmcoKSkgewogICAgICAgICBjb21wdXRlQ2xpcFJvb3QgPSBu
dWxscHRyOwotICAgICAgICBSZW5kZXJMYXllciogcGFyZW50ID0gJmxheWVyOworICAgICAgICBh
dXRvKiBwYXJlbnQgPSAmbGF5ZXI7CiAgICAgICAgIHdoaWxlIChwYXJlbnQpIHsKLSAgICAgICAg
ICAgIFJlbmRlckxheWVyKiBuZXh0ID0gcGFyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGF1
dG8qIG5leHQgPSBwYXJlbnQtPnBhcmVudCgpOwogICAgICAgICAgICAgaWYgKG5leHQgPT0gY29t
cG9zaXRpbmdBbmNlc3RvcikgewogICAgICAgICAgICAgICAgIGNvbXB1dGVDbGlwUm9vdCA9IHBh
cmVudDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzODAsNyArMjM3OSw3IEBAIGJvb2wg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQmFja2ZhY2VWaXNp
YmlsaXR5KFJlbmRlckxheWVyCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIC8vIEZJ
WE1FOiB3b3JrYXJvdW5kIGZvciB3ZWJraXQub3JnL2IvMTMyODAxCi0gICAgUmVuZGVyTGF5ZXIq
IHN0YWNraW5nQ29udGV4dCA9IHJlbmRlcmVyLmxheWVyKCktPnN0YWNraW5nQ29udGFpbmVyKCk7
CisgICAgYXV0byogc3RhY2tpbmdDb250ZXh0ID0gcmVuZGVyZXIubGF5ZXIoKS0+c3RhY2tpbmdD
b250YWluZXIoKTsKICAgICBpZiAoc3RhY2tpbmdDb250ZXh0ICYmIHN0YWNraW5nQ29udGV4dC0+
cmVuZGVyZXIoKS5zdHlsZSgpLnRyYW5zZm9ybVN0eWxlM0QoKSA9PSBUcmFuc2Zvcm1TdHlsZTNE
UHJlc2VydmUzRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTI0MTEsNyArMjQxMCw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQ2FudmFz
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmCiAjaWYgVVNFKENPTVBPU0lUSU5HX0ZPUl9TTUFMTF9D
QU5WQVNFUykKICAgICAgICAgYm9vbCBpc0NhbnZhc0xhcmdlRW5vdWdoVG9Gb3JjZUNvbXBvc2l0
aW5nID0gdHJ1ZTsKICNlbHNlCi0gICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBk
b3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICAgICAg
YXV0byogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyLmVsZW1l
bnQoKSk7CiAgICAgICAgIGF1dG8gY2FudmFzQXJlYSA9IGNhbnZhcy0+c2l6ZSgpLmFyZWE8UmVj
b3JkT3ZlcmZsb3c+KCk7CiAgICAgICAgIGJvb2wgaXNDYW52YXNMYXJnZUVub3VnaFRvRm9yY2VD
b21wb3NpdGluZyA9ICFjYW52YXNBcmVhLmhhc092ZXJmbG93ZWQoKSAmJiBjYW52YXNBcmVhLnVu
c2FmZUdldCgpID49IGNhbnZhc0FyZWFUaHJlc2hvbGRSZXF1aXJpbmdDb21wb3NpdGluZzsKICNl
bmRpZgpAQCAtMjQzMyw3ICsyNDMyLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JQbHVnaW4oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKIAogICAg
IG1fcmVldmFsdWF0ZUNvbXBvc2l0aW5nQWZ0ZXJMYXlvdXQgPSB0cnVlOwogICAgIAotICAgIFJl
bmRlcldpZGdldCYgcGx1Z2luUmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KHJlbmRl
cmVyKTsKKyAgICBhdXRvJiBwbHVnaW5SZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlcldpZGdldD4o
cmVuZGVyZXIpOwogICAgIGlmIChwbHVnaW5SZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSAh
PSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI0NzQsNyArMjQ3Myw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0
aW9uKFJlbmRlckxheWVyTW9kZWxPYmplCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNv
bnN0IEFuaW1hdGlvbkJhc2U6OlJ1bm5pbmdTdGF0ZSBhY3RpdmVBbmltYXRpb25TdGF0ZSA9IEFu
aW1hdGlvbkJhc2U6OlJ1bm5pbmcgfCBBbmltYXRpb25CYXNlOjpQYXVzZWQ7Ci0gICAgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlciYgYW5pbUNvbnRyb2xsZXIgPSByZW5kZXJlci5hbmltYXRpb24oKTsK
KyAgICBhdXRvJiBhbmltQ29udHJvbGxlciA9IHJlbmRlcmVyLmFuaW1hdGlvbigpOwogICAgIHJl
dHVybiAoYW5pbUNvbnRyb2xsZXIuaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJl
ciwgQ1NTUHJvcGVydHlPcGFjaXR5LCBhY3RpdmVBbmltYXRpb25TdGF0ZSkKICAgICAgICAgICAg
ICYmIChpbkNvbXBvc2l0aW5nTW9kZSgpIHx8IChtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJv
bWVDbGllbnQ6OkFuaW1hdGVkT3BhY2l0eVRyaWdnZXIpKSkKICAgICAgICAgICAgIHx8IGFuaW1D
b250cm9sbGVyLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3Bl
cnR5RmlsdGVyLCBhY3RpdmVBbmltYXRpb25TdGF0ZSkKQEAgLTI0ODYsNyArMjQ4NSw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9u
KFJlbmRlckxheWVyTW9kZWxPYmplCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXBvc2l0aW5nRm9ySW5kaXJlY3RSZWFzb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXIsIGJvb2wgaGFzQ29tcG9zaXRlZERlc2NlbmRhbnRzLCBib29sIGhhczNEVHJhbnNm
b3JtZWREZXNjZW5kYW50cywgUmVuZGVyTGF5ZXI6OkluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24m
IHJlYXNvbikgY29uc3QKIHsKLSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqZG93bmNhc3Q8UmVu
ZGVyQm94TW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpOworICAgIGF1dG8mIGxheWVyID0g
KmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihyZW5kZXJlcikubGF5ZXIoKTsKIAogICAg
IC8vIFdoZW4gYSBsYXllciBoYXMgY29tcG9zaXRlZCBkZXNjZW5kYW50cywgc29tZSBlZmZlY3Rz
LCBsaWtlIDJkIHRyYW5zZm9ybXMsIGZpbHRlcnMsIG1hc2tzIGV0YyBtdXN0IGJlIGltcGxlbWVu
dGVkCiAgICAgLy8gdmlhIGNvbXBvc2l0aW5nIHNvIHRoYXQgdGhleSBhbHNvIGFwcGx5IHRvIHRo
b3NlIGNvbXBvc2l0ZWQgZGVzY2VuZGFudHMuCkBAIC0yNTYwLDcgKzI1NTksNyBAQCBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlja3lMYXllcihjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZQogewogICAgIEFTU0VSVChsYXllci5yZW5kZXJlcigpLmlzU3RpY2t5
UG9zaXRpb25lZCgpKTsKIAotICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdPdmVyZmxvd0xheWVy
ID0gbGF5ZXIuZW5jbG9zaW5nT3ZlcmZsb3dDbGlwTGF5ZXIoRXhjbHVkZVNlbGYpOworICAgIGF1
dG8qIGVuY2xvc2luZ092ZXJmbG93TGF5ZXIgPSBsYXllci5lbmNsb3NpbmdPdmVyZmxvd0NsaXBM
YXllcihFeGNsdWRlU2VsZik7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgaWYgKGVuY2xvc2lu
Z092ZXJmbG93TGF5ZXIgJiYgZW5jbG9zaW5nT3ZlcmZsb3dMYXllci0+aGFzVG91Y2hTY3JvbGxh
YmxlT3ZlcmZsb3coKSkgewpAQCAtMjU5Niw3ICsyNTk1LDcgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllcihjb25zdCBS
ZW5kZXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklYTUU6IEhhbmRsZSBmaXhl
ZCBpbnNpZGUgb2YgYSB0cmFuc2Zvcm0sIHdoaWNoIHNob3VsZCBub3QgYmVoYXZlIGFzIGZpeGVk
LgotICAgIGZvciAoUmVuZGVyTGF5ZXIqIHN0YWNraW5nQ29udGFpbmVyID0gbGF5ZXIuc3RhY2tp
bmdDb250YWluZXIoKTsgc3RhY2tpbmdDb250YWluZXI7IHN0YWNraW5nQ29udGFpbmVyID0gc3Rh
Y2tpbmdDb250YWluZXItPnN0YWNraW5nQ29udGFpbmVyKCkpIHsKKyAgICBmb3IgKGF1dG8qIHN0
YWNraW5nQ29udGFpbmVyID0gbGF5ZXIuc3RhY2tpbmdDb250YWluZXIoKTsgc3RhY2tpbmdDb250
YWluZXI7IHN0YWNraW5nQ29udGFpbmVyID0gc3RhY2tpbmdDb250YWluZXItPnN0YWNraW5nQ29u
dGFpbmVyKCkpIHsKICAgICAgICAgaWYgKHN0YWNraW5nQ29udGFpbmVyLT5pc0NvbXBvc2l0ZWQo
KSAmJiBzdGFja2luZ0NvbnRhaW5lci0+cmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9uKCkgPT0g
Rml4ZWRQb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yNzI0
LDcgKzI3MjMsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bmVlZHNDb250ZW50c0Nv
bXBvc2l0aW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheQogCiBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNTY3JvbGxMYXllcihSb290TGF5ZXJBdHRhY2htZW50IGF0dGFj
aG1lbnQpIGNvbnN0CiB7Ci0gICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcu
ZnJhbWVWaWV3KCk7CisgICAgYXV0byYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmll
dygpOwogCiAgICAgLy8gVGhpcyBhcHBsaWVzIHdoZW4gdGhlIGFwcGxpY2F0aW9uIFVJIGhhbmRs
ZXMgc2Nyb2xsaW5nLCBpbiB3aGljaCBjYXNlIFJlbmRlckxheWVyQ29tcG9zaXRvciBkb2Vzbid0
IG5lZWQgdG8gbWFuYWdlIGl0LgogICAgIGlmIChmcmFtZVZpZXcuZGVsZWdhdGVzU2Nyb2xsaW5n
KCkgJiYgaXNNYWluRnJhbWVDb21wb3NpdG9yKCkpCkBAIC0yNzY5LDcgKzI3NjgsNyBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyLCBHcgogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c3VwcG9y
dHNGaXhlZFJvb3RCYWNrZ3JvdW5kQ29tcG9zaXRpbmcoKSBjb25zdAogewotICAgIFJlbmRlckxh
eWVyQmFja2luZyogcmVuZGVyVmlld0JhY2tpbmcgPSBtX3JlbmRlclZpZXcubGF5ZXIoKS0+YmFj
a2luZygpOworICAgIGF1dG8qIHJlbmRlclZpZXdCYWNraW5nID0gbV9yZW5kZXJWaWV3LmxheWVy
KCktPmJhY2tpbmcoKTsKICAgICByZXR1cm4gcmVuZGVyVmlld0JhY2tpbmcgJiYgcmVuZGVyVmll
d0JhY2tpbmctPmlzRnJhbWVMYXllcldpdGhUaWxlZEJhY2tpbmcoKTsKIH0KIApAQCAtMjc4OSw3
ICsyNzg4LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Om5lZWRzRml4ZWRSb290QmFj
a2dyb3VuZExheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXkKIEdyYXBoaWNzTGF5ZXIqIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Zml4ZWRSb290QmFja2dyb3VuZExheWVyKCkgY29uc3QKIHsKICAg
ICAvLyBHZXQgdGhlIGZpeGVkIHJvb3QgYmFja2dyb3VuZCBmcm9tIHRoZSBSZW5kZXJWaWV3IGxh
eWVyJ3MgYmFja2luZy4KLSAgICBSZW5kZXJMYXllciogdmlld0xheWVyID0gbV9yZW5kZXJWaWV3
LmxheWVyKCk7CisgICAgYXV0byogdmlld0xheWVyID0gbV9yZW5kZXJWaWV3LmxheWVyKCk7CiAg
ICAgaWYgKCF2aWV3TGF5ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yODAxLDcg
KzI4MDAsNyBAQCBHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZpeGVkUm9v
dEJhY2tncm91bmRMYXllcigpIGNvbnN0CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXNldFRyYWNrZWRSZXBhaW50UmVjdHMoKQogewotICAgIGlmIChHcmFwaGljc0xheWVyKiByb290
TGF5ZXIgPSByb290R3JhcGhpY3NMYXllcigpKSB7CisgICAgaWYgKGF1dG8qIHJvb3RMYXllciA9
IHJvb3RHcmFwaGljc0xheWVyKCkpIHsKICAgICAgICAgR3JhcGhpY3NMYXllcjo6dHJhdmVyc2Uo
KnJvb3RMYXllciwgW10oR3JhcGhpY3NMYXllciYgbGF5ZXIpIHsKICAgICAgICAgICAgIGxheWVy
LnJlc2V0VHJhY2tlZFJlcGFpbnRzKCk7CiAgICAgICAgIH0pOwpAQCAtMjgyNyw3ICsyODI2LDcg
QEAgZmxvYXQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb250ZW50c1NjYWxlTXVsdGlwbGllckZv
ck5ld1RpbGVzKGNvbnN0IEdyYXBoaWNzTGEKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgTGVn
YWN5VGlsZUNhY2hlKiB0aWxlQ2FjaGUgPSBudWxscHRyOwotICAgIGlmIChGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IHBhZ2UoKS5tYWluRnJhbWUoKS52aWV3KCkpCisgICAgaWYgKGF1dG8qIGZyYW1l
VmlldyA9IHBhZ2UoKS5tYWluRnJhbWUoKS52aWV3KCkpCiAgICAgICAgIHRpbGVDYWNoZSA9IGZy
YW1lVmlldy0+bGVnYWN5VGlsZUNhY2hlKCk7CiAKICAgICBpZiAoIXRpbGVDYWNoZSkKQEAgLTI4
NDYsMTEgKzI4NDUsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZENvbW1pdENo
YW5nZXNGb3JMYXllcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKIAogYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmRvY3VtZW50VXNlc1RpbGVkQmFja2luZygpIGNvbnN0CiB7Ci0gICAg
UmVuZGVyTGF5ZXIqIGxheWVyID0gbV9yZW5kZXJWaWV3LmxheWVyKCk7CisgICAgYXV0byogbGF5
ZXIgPSBtX3JlbmRlclZpZXcubGF5ZXIoKTsKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllci0+YmFj
a2luZygpOworICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci0+YmFja2luZygpOwogICAgIGlmICgh
YmFja2luZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yODY0LDcgKzI4NjMsNyBAQCBi
b29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNNYWluRnJhbWVDb21wb3NpdG9yKCkgY29uc3QK
IAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNob3VsZENvbXBvc2l0ZU92ZXJmbG93Q29u
dHJvbHMoKSBjb25zdAogewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3
LmZyYW1lVmlldygpOworICAgIGF1dG8mIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZp
ZXcoKTsKIAogICAgIGlmIChmcmFtZVZpZXcucGxhdGZvcm1XaWRnZXQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMjk5MCw3ICsyOTg5LDcgQEAgR3JhcGhpY3NMYXllciogUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVMYXllckZvckhlYWRlcihib29sIHdhbnRzTGF5ZXIpCiAKICAg
ICAgICAgICAgIC8vIFRoZSBTY3JvbGxpbmdUcmVlIGtub3dzIGFib3V0IHRoZSBoZWFkZXIgbGF5
ZXIsIGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIHJvb3QgbGF5ZXIgaXMgYWZmZWN0ZWQKICAgICAg
ICAgICAgIC8vIGJ5IHRoZSBoZWFkZXIgbGF5ZXIsIHNvIGlmIHdlIHJlbW92ZSB0aGUgaGVhZGVy
LCB3ZSBuZWVkIHRvIHRlbGwgdGhlIHNjcm9sbGluZyB0cmVlLgotICAgICAgICAgICAgaWYgKFNj
cm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQogICAgICAgICAgICAgICAgIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3
LmZyYW1lVmlldygpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMw
MDgsNyArMzAwNyw3IEBAIEdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBk
YXRlTGF5ZXJGb3JIZWFkZXIoYm9vbCB3YW50c0xheWVyKQogICAgIG1fbGF5ZXJGb3JIZWFkZXIt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKICAgICBtX2xheWVyRm9ySGVhZGVyLT5z
ZXRTaXplKEZsb2F0U2l6ZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudmlzaWJsZVdpZHRoKCks
IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5oZWFkZXJIZWlnaHQoKSkpOwogCi0gICAgaWYgKFNj
cm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhp
cy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkpOwog
CiAgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEFkZEhlYWRlckxheWVyKCptX2xheWVy
Rm9ySGVhZGVyKTsKQEAgLTMwMjgsNyArMzAyNyw3IEBAIEdyYXBoaWNzTGF5ZXIqIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlTGF5ZXJGb3JGb290ZXIoYm9vbCB3YW50c0xheWVyKQogCiAg
ICAgICAgICAgICAvLyBUaGUgU2Nyb2xsaW5nVHJlZSBrbm93cyBhYm91dCB0aGUgZm9vdGVyIGxh
eWVyLCBhbmQgdGhlIHRvdGFsIHNjcm9sbGFibGUgc2l6ZSBpcyBhZmZlY3RlZAogICAgICAgICAg
ICAgLy8gYnkgdGhlIGZvb3RlciBsYXllciwgc28gaWYgd2UgcmVtb3ZlIHRoZSBmb290ZXIsIHdl
IG5lZWQgdG8gdGVsbCB0aGUgc2Nyb2xsaW5nIHRyZWUuCi0gICAgICAgICAgICBpZiAoU2Nyb2xs
aW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSkKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgICAgICAgICAgc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXcuZnJh
bWVWaWV3KCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzA0Niw3
ICszMDQ1LDcgQEAgR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVM
YXllckZvckZvb3Rlcihib29sIHdhbnRzTGF5ZXIpCiAgICAgbV9sYXllckZvckZvb3Rlci0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwogICAgIG1fbGF5ZXJGb3JGb290ZXItPnNldFNp
emUoRmxvYXRTaXplKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS52aXNpYmxlV2lkdGgoKSwgbV9y
ZW5kZXJWaWV3LmZyYW1lVmlldygpLmZvb3RlckhlaWdodCgpKSk7CiAKLSAgICBpZiAoU2Nyb2xs
aW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSkKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKQogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJh
bWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSk7CiAKICAg
ICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkQWRkRm9vdGVyTGF5ZXIoKm1fbGF5ZXJGb3JG
b290ZXIpOwpAQCAtMzE5MSwxNCArMzE5MCwxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAjZW5kaWYKICAgICAgICAgICAgIG1f
b3ZlcmZsb3dDb250cm9sc0hvc3RMYXllci0+YWRkQ2hpbGQobV9sYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIuZ2V0KCkpOwogCi0gICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3Iq
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNj
cm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LmZyYW1lVmll
dygpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobV9s
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgbV9sYXllckZvckhvcml6b250
YWxTY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAgICAgICAgbV9sYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIgPSBudWxscHRyOwogCi0gICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGlu
YXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigp
KQorICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxp
bmdDb29yZGluYXRvcigpKQogICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9s
bGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LmZyYW1lVmlldygp
LCBIb3Jpem9udGFsU2Nyb2xsYmFyKTsKICAgICB9CiAKQEAgLTMyMTMsMTQgKzMyMTIsMTQgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMo
KQogI2VuZGlmCiAgICAgICAgICAgICBtX292ZXJmbG93Q29udHJvbHNIb3N0TGF5ZXItPmFkZENo
aWxkKG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci5nZXQoKSk7CiAKLSAgICAgICAgICAgIGlm
IChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAgICAgICAgICAgICBz
Y3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5n
ZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCksIFZlcnRpY2FsU2Nyb2xsYmFyKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAobV9sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAg
IG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwogICAgICAg
ICBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIgPSBudWxscHRyOwogCi0gICAgICAgIGlmIChT
Y3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxp
bmdDb29yZGluYXRvcigpKQorICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQogICAgICAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJW
aWV3LmZyYW1lVmlldygpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgfQogCkBAIC0zMjU4LDcg
KzMyNTcsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZW5zdXJlUm9vdExheWVyKCkK
IAogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgLy8gUGFnZSBzY2FsZSBpcyBhcHBsaWVkIGFi
b3ZlIHRoaXMgb24gaU9TLCBzbyB3ZSdsbCBqdXN0IHNheSB0aGF0IG91ciByb290IGxheWVyIGFw
cGxpZXMgaXQuCi0gICAgICAgIEZyYW1lJiBmcmFtZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpOworICAgICAgICBhdXRvJiBmcmFtZSA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpOwogICAgICAgICBpZiAoZnJhbWUuaXNNYWluRnJhbWUoKSkKICAgICAgICAgICAg
IG1fcm9vdENvbnRlbnRMYXllci0+c2V0QXBwbGllc1BhZ2VTY2FsZSgpOwogI2VuZGlmCkBAIC0z
MzMyLDE4ICszMzMxLDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXN0cm95Um9v
dExheWVyKCkKICAgICBpZiAobV9sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAg
ICAgbV9sYXllckZvckhvcml6b250YWxTY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKICAg
ICAgICAgbV9sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgPSBudWxscHRyOwotICAgICAgICBp
ZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fcmVu
ZGVyVmlldy5mcmFtZVZpZXcoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgICAgIGlmIChT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCku
dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgaWYgKGF1dG8qIGhvcml6b250YWxTY3JvbGxi
YXIgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudmVydGljYWxTY3JvbGxiYXIoKSkKICAgICAg
ICAgICAgIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5pbnZhbGlkYXRlU2Nyb2xsYmFyKCpob3Jp
em9udGFsU2Nyb2xsYmFyLCBJbnRSZWN0KEludFBvaW50KDAsIDApLCBob3Jpem9udGFsU2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKS5zaXplKCkpKTsKICAgICB9CiAKICAgICBpZiAobV9sYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKSB7CiAgICAgICAgIG1fbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhci0+
cmVtb3ZlRnJvbVBhcmVudCgpOwogICAgICAgICBtX2xheWVyRm9yVmVydGljYWxTY3JvbGxiYXIg
PSBudWxscHRyOwotICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkK
ICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSwgVmVydGljYWxTY3JvbGxi
YXIpOwotICAgICAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fcmVuZGVy
Vmlldy5mcmFtZVZpZXcoKS52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBpZiAoYXV0byog
dmVydGljYWxTY3JvbGxiYXIgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkudmVydGljYWxTY3Jv
bGxiYXIoKSkKICAgICAgICAgICAgIG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5pbnZhbGlkYXRl
U2Nyb2xsYmFyKCp2ZXJ0aWNhbFNjcm9sbGJhciwgSW50UmVjdChJbnRQb2ludCgwLCAwKSwgdmVy
dGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLnNpemUoKSkpOwogICAgIH0KIApAQCAtMzM3NSw3
ICszMzc0LDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYXllcihS
b290TGF5ZXJBdHRhY2htZW50IGF0dGFjaG1lbnQpCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJvb3RMYXllckF0dGFj
aGVkVmlhQ2hyb21lQ2xpZW50OiB7Ci0gICAgICAgICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRl
clZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKTsKKyAgICAgICAgICAgIGF1dG8mIGZyYW1lID0gbV9y
ZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCk7CiAgICAgICAgICAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoZnJhbWUsIHJvb3RHcmFwaGljc0xh
eWVyKCkpOwogICAgICAgICAgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkpCiAgICAgICAgICAg
ICAgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NM
YXllcihmcmFtZSwgJmZyYW1lLm1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmxh
eWVyV2l0aFZpZXdPdmVybGF5cygpKTsKQEAgLTM0MTMsMTIgKzM0MTIsMTIgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFJvb3RMYXllcigpCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG1fcm9vdENvbnRlbnRMYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwogCi0gICAgICAg
IGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IG1fcmVuZGVyVmlldy5k
b2N1bWVudCgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBpZiAoYXV0byogb3duZXJFbGVtZW50
ID0gbV9yZW5kZXJWaWV3LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCkpCiAgICAgICAgICAgICBv
d25lckVsZW1lbnQtPnNjaGVkdWxlSW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBSb290TGF5ZXJBdHRhY2hlZFZpYUNo
cm9tZUNsaWVudDogewotICAgICAgICBGcmFtZSYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVW
aWV3KCkuZnJhbWUoKTsKKyAgICAgICAgYXV0byYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJhbWVW
aWV3KCkuZnJhbWUoKTsKICAgICAgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKGZyYW1lLCBudWxscHRyKTsKICAgICAgICAgaWYgKGZyYW1lLmlzTWFp
bkZyYW1lKCkpIHsKICAgICAgICAgICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5hdHRhY2hW
aWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoZnJhbWUsIG51bGxwdHIpOwpAQCAtMzQ0NywxMiArMzQ0
NiwxMiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cm9vdExheWVyQXR0YWNobWVudENo
YW5nZWQoKQogICAgIGlmIChtX3Jvb3RMYXllckF0dGFjaG1lbnQgPT0gUm9vdExheWVyVW5hdHRh
Y2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRnJhbWUmIGZyYW1lID0gbV9yZW5kZXJWaWV3
LmZyYW1lVmlldygpLmZyYW1lKCk7CisgICAgYXV0byYgZnJhbWUgPSBtX3JlbmRlclZpZXcuZnJh
bWVWaWV3KCkuZnJhbWUoKTsKIAogICAgIC8vIFRoZSBhdHRhY2htZW50IGNhbiBhZmZlY3Qgd2hl
dGhlciB0aGUgUmVuZGVyVmlldyBsYXllcidzIHBhaW50c0ludG9XaW5kb3coKSBiZWhhdmlvciwK
ICAgICAvLyBzbyBjYWxsIHVwZGF0ZURyYXdzQ29udGVudCgpIHRvIHVwZGF0ZSB0aGF0LgotICAg
IFJlbmRlckxheWVyKiBsYXllciA9IG1fcmVuZGVyVmlldy5sYXllcigpOwotICAgIGlmIChSZW5k
ZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBsYXllciA/IGxheWVyLT5iYWNraW5nKCkgOiBudWxs
cHRyKQorICAgIGF1dG8qIGxheWVyID0gbV9yZW5kZXJWaWV3LmxheWVyKCk7CisgICAgaWYgKGF1
dG8qIGJhY2tpbmcgPSBsYXllciA/IGxheWVyLT5iYWNraW5nKCkgOiBudWxscHRyKQogICAgICAg
ICBiYWNraW5nLT51cGRhdGVEcmF3c0NvbnRlbnQoKTsKIAogICAgIGlmICghZnJhbWUuaXNNYWlu
RnJhbWUoKSkKQEAgLTM0NjUsNyArMzQ2NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojpub3RpZnlJRnJhbWVzT2ZDb21wb3NpdGluZ0NoYW5nZSgpCiB7CiAgICAgLy8gQ29tcG9zaXRp
bmcgYWZmZWN0cyB0aGUgYW5zd2VyIHRvIFJlbmRlcklGcmFtZTo6cmVxdWlyZXNBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nKCksIHNvCiAgICAgLy8gd2UgbmVlZCB0byBzY2hlZHVsZSBhIHN0eWxlIHJl
Y2FsYyBpbiBvdXIgcGFyZW50IGRvY3VtZW50LgotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyRWxlbWVudCA9IG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgp
KQorICAgIGlmIChhdXRvKiBvd25lckVsZW1lbnQgPSBtX3JlbmRlclZpZXcuZG9jdW1lbnQoKS5v
d25lckVsZW1lbnQoKSkKICAgICAgICAgb3duZXJFbGVtZW50LT5zY2hlZHVsZUludmFsaWRhdGVT
dHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIH0KIApAQCAtMzUxMCw4ICszNTA5LDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgp
CiB7CiAgICAgLy8gUGFnZSBzY2FsZSB3aWxsIG9ubHkgYmUgYXBwbGllZCBhdCB0byB0aGUgUmVu
ZGVyVmlldyBhbmQgc3VibGF5ZXJzLCBidXQgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IKICAgICAv
LyBuZWVkcyB0byBiZSBhcHBsaWVkIGF0IHRoZSBsZXZlbCBvZiByb290R3JhcGhpY3NMYXllcigp
LgotICAgIEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllciA9IHJvb3RHcmFwaGljc0xheWVyKCk7Ci0g
ICAgaWYgKHJvb3RMYXllcikKKyAgICBpZiAoYXV0byogcm9vdExheWVyID0gcm9vdEdyYXBoaWNz
TGF5ZXIoKSkKICAgICAgICAgcm9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKIH0KIApAQCAtMzU1MCw3ICszNTQ4LDcgQEAg
Rml4ZWRQb3NpdGlvblZpZXdwb3J0Q29uc3RyYWludHMgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
b21wdXRlRml4ZWRWaWV3cG9ydENvbnMKIHsKICAgICBBU1NFUlQobGF5ZXIuaXNDb21wb3NpdGVk
KCkpOwogCi0gICAgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciA9IGxheWVyLmJhY2tpbmco
KS0+Z3JhcGhpY3NMYXllcigpOworICAgIGF1dG8qIGdyYXBoaWNzTGF5ZXIgPSBsYXllci5iYWNr
aW5nKCktPmdyYXBoaWNzTGF5ZXIoKTsKIAogICAgIEZpeGVkUG9zaXRpb25WaWV3cG9ydENvbnN0
cmFpbnRzIGNvbnN0cmFpbnRzOwogICAgIGNvbnN0cmFpbnRzLnNldExheWVyUG9zaXRpb25BdExh
c3RMYXlvdXQoZ3JhcGhpY3NMYXllci0+cG9zaXRpb24oKSk7CkBAIC0zNTkwLDEyICszNTg4LDEy
IEBAIFN0aWNreVBvc2l0aW9uVmlld3BvcnRDb25zdHJhaW50cyBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNvbXB1dGVTdGlja3lWaWV3cG9ydENvCiAgICAgQVNTRVJUKCFsYXllci5lbmNsb3NpbmdP
dmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZikpOwogI2VuZGlmCiAKLSAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4obGF5
ZXIucmVuZGVyZXIoKSk7CisgICAgYXV0byYgcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hN
b2RlbE9iamVjdD4obGF5ZXIucmVuZGVyZXIoKSk7CiAKICAgICBTdGlja3lQb3NpdGlvblZpZXdw
b3J0Q29uc3RyYWludHMgY29uc3RyYWludHM7CiAgICAgcmVuZGVyZXIuY29tcHV0ZVN0aWNreVBv
c2l0aW9uQ29uc3RyYWludHMoY29uc3RyYWludHMsIHJlbmRlcmVyLmNvbnN0cmFpbmluZ1JlY3RG
b3JTdGlja3lQb3NpdGlvbigpKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIg
PSBsYXllci5iYWNraW5nKCktPmdyYXBoaWNzTGF5ZXIoKTsKKyAgICBhdXRvKiBncmFwaGljc0xh
eWVyID0gbGF5ZXIuYmFja2luZygpLT5ncmFwaGljc0xheWVyKCk7CiAgICAgY29uc3RyYWludHMu
c2V0TGF5ZXJQb3NpdGlvbkF0TGFzdExheW91dChncmFwaGljc0xheWVyLT5wb3NpdGlvbigpKTsK
ICAgICBjb25zdHJhaW50cy5zZXRTdGlja3lPZmZzZXRBdExhc3RMYXlvdXQocmVuZGVyZXIuc3Rp
Y2t5UG9zaXRpb25PZmZzZXQoKSk7CiAgICAgY29uc3RyYWludHMuc2V0QWxpZ25tZW50T2Zmc2V0
KGdyYXBoaWNzTGF5ZXItPnBpeGVsQWxpZ25tZW50T2Zmc2V0KCkpOwpAQCAtMzYwNSw5ICszNjAz
LDkgQEAgU3RpY2t5UG9zaXRpb25WaWV3cG9ydENvbnN0cmFpbnRzIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6Y29tcHV0ZVN0aWNreVZpZXdwb3J0Q28KIAogc3RhdGljIFNjcm9sbGluZ05vZGVJRCBl
bmNsb3NpbmdTY3JvbGxpbmdOb2RlSUQoUmVuZGVyTGF5ZXImIGxheWVyLCBJbmNsdWRlU2VsZk9y
Tm90IGluY2x1ZGVTZWxmKQogewotICAgIFJlbmRlckxheWVyKiBjdXJyTGF5ZXIgPSBpbmNsdWRl
U2VsZiA9PSBJbmNsdWRlU2VsZiA/ICZsYXllciA6IGxheWVyLnBhcmVudCgpOworICAgIGF1dG8q
IGN1cnJMYXllciA9IGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmID8gJmxheWVyIDogbGF5ZXIu
cGFyZW50KCk7CiAgICAgd2hpbGUgKGN1cnJMYXllcikgewotICAgICAgICBpZiAoUmVuZGVyTGF5
ZXJCYWNraW5nKiBiYWNraW5nID0gY3VyckxheWVyLT5iYWNraW5nKCkpIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tpbmcgPSBjdXJyTGF5ZXItPmJhY2tpbmcoKSkgewogICAgICAgICAgICAgaWYg
KFNjcm9sbGluZ05vZGVJRCBub2RlSUQgPSBiYWNraW5nLT5zY3JvbGxpbmdOb2RlSURGb3JDaGls
ZHJlbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBub2RlSUQ7CiAgICAgICAgIH0KQEAgLTM2
MjMsMTIgKzM2MjEsMTIgQEAgc3RhdGljIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxDb29yZGluYXRl
ZEFuY2VzdG9ySW5QYXJlbnRPZkZyYW1lKEZyYW1lJiBmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICAvLyBGaW5kIHRoZSBmcmFtZSdzIGVuY2xvc2luZyBsYXllciBpbiBvdXIgcmVuZGVy
IHRyZWUuCi0gICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSBmcmFtZS5k
b2N1bWVudCgpLT5vd25lckVsZW1lbnQoKTsKLSAgICBSZW5kZXJFbGVtZW50KiBmcmFtZVJlbmRl
cmVyID0gb3duZXJFbGVtZW50ID8gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpIDogbnVsbHB0cjsK
KyAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBmcmFtZS5kb2N1bWVudCgpLT5vd25lckVsZW1lbnQo
KTsKKyAgICBhdXRvKiBmcmFtZVJlbmRlcmVyID0gb3duZXJFbGVtZW50ID8gb3duZXJFbGVtZW50
LT5yZW5kZXJlcigpIDogbnVsbHB0cjsKICAgICBpZiAoIWZyYW1lUmVuZGVyZXIpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVySW5QYXJlbnREb2N1bWVudCA9IGZy
YW1lUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CisgICAgYXV0byogbGF5ZXJJblBhcmVudERv
Y3VtZW50ID0gZnJhbWVSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICBpZiAoIWxheWVy
SW5QYXJlbnREb2N1bWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTM2NDIsMTQgKzM2NDAs
MTQgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYXR0YWNoU3ViZnJhbWVTY3JvbGxM
YXllcnMoKQogICAgIAogICAgIG1fc3ViZnJhbWVTY3JvbGxMYXllcnNOZWVkUmVhdHRhY2ggPSBm
YWxzZTsKIAotICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgYXV0byogc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpOwogCiAgICAgZm9yIChGcmFtZSog
Y2hpbGQgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS50cmVlKCkuZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpIHsKICAgICAg
ICAgaWYgKCFjaGlsZC0+ZG9jdW1lbnQoKSB8fCAhY2hpbGQtPnZpZXcoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIC8vIElnbm9yZSBmcmFtZXMgdGhhdCBhcmUgbm90IHNjcm9s
bC1jb29yZGluYXRlZC4KLSAgICAgICAgRnJhbWVWaWV3KiBjaGlsZEZyYW1lVmlldyA9IGNoaWxk
LT52aWV3KCk7CisgICAgICAgIGF1dG8qIGNoaWxkRnJhbWVWaWV3ID0gY2hpbGQtPnZpZXcoKTsK
ICAgICAgICAgU2Nyb2xsaW5nTm9kZUlEIGZyYW1lU2Nyb2xsaW5nTm9kZUlEID0gY2hpbGRGcmFt
ZVZpZXctPnNjcm9sbExheWVySUQoKTsKICAgICAgICAgaWYgKCFmcmFtZVNjcm9sbGluZ05vZGVJ
RCkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzY3OCw4ICszNjc2LDggQEAgc3RhdGljIGlu
bGluZSBMYXllclNjcm9sbENvb3JkaW5hdGlvblJvbGUgc2Nyb2xsQ29vcmRpbmF0aW9uUm9sZUZv
ck5vZGVUeXBlKFNjcm8KIAogU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
YXR0YWNoU2Nyb2xsaW5nTm9kZShSZW5kZXJMYXllciYgbGF5ZXIsIFNjcm9sbGluZ05vZGVUeXBl
IG5vZGVUeXBlLCBTY3JvbGxpbmdOb2RlSUQgcGFyZW50Tm9kZUlEKQogewotICAgIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCk7Ci0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXIuYmFja2lu
ZygpOworICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKTsKKyAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIC8v
IENyYXNoIGxvZ3Mgc3VnZ2VzdCB0aGF0IGJhY2tpbmcgY2FuIGJlIG51bGwgaGVyZSwgYnV0IHdl
IGRvbid0IGtub3cgaG93OiByZGFyOi8vcHJvYmxlbS8xODU0NTQ1Mi4KICAgICBBU1NFUlQoYmFj
a2luZyk7CiAgICAgaWYgKCFiYWNraW5nKQpAQCAtMzcwMiw3ICszNzAwLDcgQEAgU2Nyb2xsaW5n
Tm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoU2Nyb2xsaW5nTm9kZShSZW5kZXJM
YXllciYgbGF5ZXIsIFMKIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFNjcm9s
bENvb3JkaW5hdGVkTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBMYXllclNjcm9sbENvb3JkaW5h
dGlvblJvbGVzIHJvbGVzKQogewotICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxh
eWVyLmJhY2tpbmcoKTsKKyAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAg
IGlmICghYmFja2luZykKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNzIxLDcgKzM3MTksNyBAQCB2
b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcihS
ZW5kZXJMYXllciYgbGF5ZXIsIExheQogCiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBk
YXRlU2Nyb2xsQ29vcmRpbmF0aW9uRm9yVGhpc0ZyYW1lKFNjcm9sbGluZ05vZGVJRCBwYXJlbnRO
b2RlSUQpCiB7Ci0gICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICBhdXRvKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CiAgICAgQVNTRVJUKHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5jb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhtX3JlbmRl
clZpZXcuZnJhbWVWaWV3KCkpKTsKIAogICAgIFNjcm9sbGluZ05vZGVJRCBub2RlSUQgPSBhdHRh
Y2hTY3JvbGxpbmdOb2RlKCptX3JlbmRlclZpZXcubGF5ZXIoKSwgRnJhbWVTY3JvbGxpbmdOb2Rl
LCBwYXJlbnROb2RlSUQpOwpAQCAtMzczMCw3ICszNzI4LDcgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5hdGlvbkZvclRoaXNGcmFtZShTY3JvbGxpbmdO
b2RlSUQKIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbENvb3JkaW5h
dGVkTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBMYXllclNjcm9sbENvb3JkaW5hdGlvblJvbGVz
IHJlYXNvbnMsIE9wdGlvblNldDxTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M+IGNoYW5nZXMpCiB7
Ci0gICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICBhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CiAgICAgaWYgKCFzY3JvbGxpbmdDb29yZGlu
YXRvciB8fCAhc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJh
bWVWaWV3KG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKSkpCiAgICAgICAgIHJldHVybjsKIApAQCAt
Mzc0Miw3ICszNzQwLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9s
bENvb3JkaW5hdGVkTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBMYXkKICAgICBBU1NFUlQobV9z
Y3JvbGxDb29yZGluYXRlZExheWVycy5jb250YWlucygmbGF5ZXIpKTsKICAgICBBU1NFUlQobGF5
ZXIuaXNDb21wb3NpdGVkKCkpOwogCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0g
bGF5ZXIuYmFja2luZygpOworICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAg
ICAgaWYgKCFiYWNraW5nKQogICAgICAgICByZXR1cm47CiAKQEAgLTM5MDMsNyArMzkwMSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygp
CiB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVy
cygpCiB7CiAgICAgZm9yIChhdXRvKiBsYXllciA6IG1fc2Nyb2xsaW5nTGF5ZXJzKSB7Ci0gICAg
ICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLT5iYWNraW5nKCk7CisgICAg
ICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci0+YmFja2luZygpOwogICAgICAgICBBU1NFUlQoYmFj
a2luZyk7CiAgICAgICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5yZW1vdmVTY3JvbGxpbmdM
YXllcihsYXllci0+cmVuZGVyZXIoKS5lbGVtZW50KCksIGJhY2tpbmctPnNjcm9sbGluZ0xheWVy
KCktPnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+c2Nyb2xsaW5nQ29udGVudHNMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCkpOwogICAgIH0KQEAgLTM5MTIsNyArMzkxMCw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1bnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkKIAogdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5n
KFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNraW5nKQogewotICAg
IGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewogICAgICAgICBiYWNraW5nLmRl
dGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcihTY3JvbGxpbmcpOwogCiAgICAgICAgIC8vIEZv
ciBDb29yZGluYXRlZCBHcmFwaGljcy4KQEAgLTM5MjcsOCArMzkyNSw4IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5k
ZXJMYXllciYgbGF5CiAgICAgaWYgKG1fcmVuZGVyVmlldy5kb2N1bWVudCgpLnBhZ2VDYWNoZVN0
YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdEluUGFnZUNhY2hlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBQbGF0Zm9ybUxheWVyKiBzY3JvbGxpbmdMYXllciA9IGJhY2tpbmcuc2Nyb2xsaW5nTGF5ZXIo
KS0+cGxhdGZvcm1MYXllcigpOwotICAgIFBsYXRmb3JtTGF5ZXIqIGNvbnRlbnRzTGF5ZXIgPSBi
YWNraW5nLnNjcm9sbGluZ0NvbnRlbnRzTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpOworICAgIGF1
dG8qIHNjcm9sbGluZ0xheWVyID0gYmFja2luZy5zY3JvbGxpbmdMYXllcigpLT5wbGF0Zm9ybUxh
eWVyKCk7CisgICAgYXV0byogY29udGVudHNMYXllciA9IGJhY2tpbmcuc2Nyb2xsaW5nQ29udGVu
dHNMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgp
LnJlbW92ZVNjcm9sbGluZ0xheWVyKGxheWVyLnJlbmRlcmVyKCkuZWxlbWVudCgpLCBzY3JvbGxp
bmdMYXllciwgY29udGVudHNMYXllcik7CiAjZW5kaWYKIH0KQEAgLTM5MzcsNyArMzkzNSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJM
YXllciYgbGF5ZXIpCiB7CiAgICAgdXBkYXRlU2Nyb2xsQ29vcmRpbmF0ZWRTdGF0dXMobGF5ZXIs
IHsgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllciwgU2Nyb2xsaW5nTm9kZUNoYW5nZUZs
YWdzOjpMYXllckdlb21ldHJ5IH0pOwogCi0gICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGlu
YXRvcigpKSB7CiAgICAgICAgIC8vIEZvciBDb29yZGluYXRlZCBHcmFwaGljcy4KICAgICAgICAg
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2Uo
bGF5ZXIpOwogICAgICAgICByZXR1cm47CkBAIC00MDMyLDcgKzQwMzAsNyBAQCBSZWZQdHI8RGlz
cGxheVJlZnJlc2hNb25pdG9yPiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNyZWF0ZURpc3BsYXlS
ZWZyZXNoTW9uaXRvcgogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsU25hcFByb3BlcnRpZXNXaXRoRnJhbWVWaWV3KGNv
bnN0IEZyYW1lVmlldyYgZnJhbWVWaWV3KQogewotICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRv
ciogY29vcmRpbmF0b3IgPSBzY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgIGlmIChhdXRvKiBj
b29yZGluYXRvciA9IHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgIGNvb3JkaW5hdG9y
LT51cGRhdGVTY3JvbGxTbmFwUHJvcGVydGllc1dpdGhGcmFtZVZpZXcoZnJhbWVWaWV3KTsKIH0K
ICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>