<?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>190572</bug_id>
          
          <creation_ts>2018-10-14 22:25:13 -0700</creation_ts>
          <short_desc>RenderLayer tree-related cleanup</short_desc>
          <delta_ts>2018-10-15 09:13:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1469142</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-10-14 22:25:13 -0700</bug_when>
    <thetext>RenderLayer tree-related cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469143</commentid>
    <comment_count>1</comment_count>
      <attachid>352300</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-10-14 22:27:32 -0700</bug_when>
    <thetext>Created attachment 352300
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469265</commentid>
    <comment_count>2</comment_count>
      <attachid>352300</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-15 09:12:46 -0700</bug_when>
    <thetext>Comment on attachment 352300
Patch

Clearing flags on attachment: 352300

Committed r237117: &lt;https://trac.webkit.org/changeset/237117&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469266</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-15 09:12:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469267</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-15 09:13:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/45272833&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352300</attachid>
            <date>2018-10-14 22:27:32 -0700</date>
            <delta_ts>2018-10-15 09:12:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190572-20181014222730.patch</filename>
            <type>text/plain</type>
            <size>50586</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3MDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjlkY2FiMDkxMzA1OTE1
MDVmYjg5OTEyZmY4ZDE2YTZjMDg5NzZjOS4uMTYxMjA2NGFhNGYyZjcyZDJkNDg1NWI0NmNmMDM0
MTFmYWU1NGU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE4LTEwLTE0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmRlckxheWVy
IHRyZWUtcmVsYXRlZCBjbGVhbnVwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTA1NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNb3ZlIGNvZGUgYXJvdW5kIHNvIHRoYXQgZnVuY3Rpb25zIHJlbGF0ZWQg
dG8gcGFyZW50L2NoaWxkIGFuZCB6LW9yZGVyIHRyZWUgc3RydWN0dXJlCisgICAgICAgIGFyZSBu
ZWFyIHRoZSB0b3Agb2YgUmVuZGVyTGF5ZXIuY3BwLCBzaW5jZSB0aGlzIGlzIG9uZSBvZiB0aGUg
cHJpbWFyeSBmdW5jdGlvbnMgb2YgbGF5ZXJzLgorICAgICAgICAKKyAgICAgICAgQXR0ZW1wdHMg
dG8gdXNlIGluaGVyaXRhbmNlIG9yIGNvbXBvc2l0aW9uIHRvIHNlcGFyYXRlIG91dCB0cmVlIHN0
cnVjdHVyZSByZXN1bHRlZCBpbgorICAgICAgICB1bndpZWxkeSBjb2RlIGFuZC9vciBwZXJmb3Jt
YW5jZSByZWdyZXNzaW9ucy4KKyAgICAgICAgCisgICAgICAgIFRoZSBvbmx5IGJlaGF2aW9yIGNo
YW5nZSBpcyB0byBzdG9yZSBhIGJpdCBmb3IgbV9pc1N0YWNraW5nQ29udGV4dCBzbyB0aGF0IHdl
IGRvbid0IGhhdmUKKyAgICAgICAgdG8gY29uc3VsdCB0aGUgb2xkIHN0eWxlIHRvIGtub3cgaWYg
aXQgY2hhbmdlZC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aW5zZXJ0T25s
eVRoaXNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVtb3ZlT25seVRo
aXNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpjYW5DcmVhdGVTdGFja2luZ0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNob3VsZEJlTm9ybWFsRmxvd09ubHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNob3VsZEJlU3RhY2tpbmdDb250
ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRJc05vcm1hbEZs
b3dPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRJc1N0YWNraW5nQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UGFyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaXJ0eVpPcmRlckxpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpkaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxpc3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaXJ0eU5vcm1hbEZsb3dMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVOb3JtYWxGbG93TGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVidWlsZFpPcmRlckxpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp1cGRhdGVMYXllckxpc3RzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmlzRGVzY2VuZGFudE9mIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcGFy
ZVpJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisK
IDIwMTgtMTAtMTEgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAg
ICAgICBBZGQgSG91ZGluaSBzcGVjcyB0byBmZWF0dXJlcy5qc29uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBjOGU2NzdkN2FhYTk3ZDdkMjhlNDZiOTM4NzQx
NmY1MThiYzMzNDVjLi45MWNmMmJlOWRiODBjNmI1YzMzMjVkYTY0MzIwZjgyMmFiM2RjY2E3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI3MSw5ICsyNzEs
MTAgQEAgdm9pZCBtYWtlTWF0cml4UmVuZGVyYWJsZShUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4LCBib29sIGhhczNEUmVuZGVyaW5nKQogUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRl
ckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICA6IG1faXNS
ZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0LmlzUmVuZGVyVmlldygpKQog
ICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0Lmlz
TWVkaWEoKSkKKyAgICAsIG1fek9yZGVyTGlzdHNEaXJ0eShmYWxzZSkKKyAgICAsIG1fbm9ybWFs
Rmxvd0xpc3REaXJ0eSh0cnVlKQogICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2UpCiAgICAgLCBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQotICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5
KHRydWUpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAg
ICAsIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBt
X3VzZWRUcmFuc3BhcmVuY3koZmFsc2UpCkBAIC0zMTUsMTIgKzMxNiwxMCBAQCBSZW5kZXJMYXll
cjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVs
T2JqZWN0KQogI2VuZGlmCiAgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVj
dCkKIHsKLSAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCk7
Ci0gICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigp
OworICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKKyAg
ICBzZXRJc1N0YWNraW5nQ29udGV4dChzaG91bGRCZVN0YWNraW5nQ29udGV4dCgpKTsKIAotICAg
IC8vIE5vbi1zdGFja2luZyBjb250YWluZXJzIHNob3VsZCBoYXZlIGVtcHR5IHotb3JkZXIgbGlz
dHMuIEFzIHRoaXMgaXMgYWxyZWFkeSB0aGUgY2FzZSwKLSAgICAvLyB0aGVyZSBpcyBubyBuZWVk
IHRvIGRpcnR5IC8gcmVjb21wdXRlIHRoZXNlIGxpc3RzLgotICAgIG1fek9yZGVyTGlzdHNEaXJ0
eSA9IGlzU3RhY2tpbmdDb250ZXh0KCk7CisgICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hv
dWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOwogCiAgICAgaWYgKCFyZW5kZXJlcigpLmZpcnN0Q2hp
bGQoKSkgewogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKQEAg
LTM3Niw2ICszNzUsMzUwIEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocmVuZGVyZXIoKS5yZW5kZXJUcmVl
QmVpbmdEZXN0cm95ZWQoKSB8fCAhbV9maXJzdCk7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OmFk
ZENoaWxkKFJlbmRlckxheWVyKiBjaGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9yZUNoaWxkKQorewor
ICAgIFJlbmRlckxheWVyKiBwcmV2U2libGluZyA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQt
PnByZXZpb3VzU2libGluZygpIDogbGFzdENoaWxkKCk7CisgICAgaWYgKHByZXZTaWJsaW5nKSB7
CisgICAgICAgIGNoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcocHJldlNpYmxpbmcpOworICAgICAg
ICBwcmV2U2libGluZy0+c2V0TmV4dFNpYmxpbmcoY2hpbGQpOworICAgICAgICBBU1NFUlQocHJl
dlNpYmxpbmcgIT0gY2hpbGQpOworICAgIH0gZWxzZQorICAgICAgICBzZXRGaXJzdENoaWxkKGNo
aWxkKTsKKworICAgIGlmIChiZWZvcmVDaGlsZCkgeworICAgICAgICBiZWZvcmVDaGlsZC0+c2V0
UHJldmlvdXNTaWJsaW5nKGNoaWxkKTsKKyAgICAgICAgY2hpbGQtPnNldE5leHRTaWJsaW5nKGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgQVNTRVJUKGJlZm9yZUNoaWxkICE9IGNoaWxkKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgc2V0TGFzdENoaWxkKGNoaWxkKTsKKworICAgIGNoaWxkLT5zZXRQYXJl
bnQodGhpcyk7CisKKyAgICBpZiAoY2hpbGQtPmlzTm9ybWFsRmxvd09ubHkoKSkKKyAgICAgICAg
ZGlydHlOb3JtYWxGbG93TGlzdCgpOworCisgICAgaWYgKCFjaGlsZC0+aXNOb3JtYWxGbG93T25s
eSgpIHx8IGNoaWxkLT5maXJzdENoaWxkKCkpIHsKKyAgICAgICAgLy8gRGlydHkgdGhlIHotb3Jk
ZXIgbGlzdCBpbiB3aGljaCB3ZSBhcmUgY29udGFpbmVkLiBUaGUgc3RhY2tpbmdDb250ZXh0KCkg
Y2FuIGJlIG51bGwgaW4gdGhlCisgICAgICAgIC8vIGNhc2Ugd2hlcmUgd2UncmUgYnVpbGRpbmcg
dXAgZ2VuZXJhdGVkIGNvbnRlbnQgbGF5ZXJzLiBUaGlzIGlzIG9rLCBzaW5jZSB0aGUgbGlzdHMg
d2lsbCBzdGFydAorICAgICAgICAvLyBvZmYgZGlydHkgaW4gdGhhdCBjYXNlIGFueXdheS4KKyAg
ICAgICAgY2hpbGQtPmRpcnR5U3RhY2tpbmdDb250ZXh0Wk9yZGVyTGlzdHMoKTsKKyAgICB9CisK
KyAgICBjaGlsZC0+dXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CisgICAgaWYgKGNo
aWxkLT5tX2hhc1Zpc2libGVDb250ZW50IHx8IGNoaWxkLT5tX2hhc1Zpc2libGVEZXNjZW5kYW50
KQorICAgICAgICBzZXRBbmNlc3RvckNoYWluSGFzVmlzaWJsZURlc2NlbmRhbnQoKTsKKworICAg
IGlmIChjaGlsZC0+aXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGNoaWxkLT5oYXNTZWxmUGFpbnRp
bmdMYXllckRlc2NlbmRhbnQoKSkKKyAgICAgICAgc2V0QW5jZXN0b3JDaGFpbkhhc1NlbGZQYWlu
dGluZ0xheWVyRGVzY2VuZGFudCgpOworCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAg
ICBpZiAoY2hpbGQtPmhhc0JsZW5kTW9kZSgpIHx8IChjaGlsZC0+aGFzTm90SXNvbGF0ZWRCbGVu
ZGluZ0Rlc2NlbmRhbnRzKCkgJiYgIWNoaWxkLT5pc29sYXRlc0JsZW5kaW5nKCkpKQorICAgICAg
ICB1cGRhdGVBbmNlc3RvckNoYWluSGFzQmxlbmRpbmdEZXNjZW5kYW50cygpOworI2VuZGlmCisK
KyAgICBjb21wb3NpdG9yKCkubGF5ZXJXYXNBZGRlZCgqdGhpcywgKmNoaWxkKTsKK30KKworUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZW1vdmVDaGlsZChSZW5kZXJMYXllciogb2xkQ2hpbGQp
Cit7CisgICAgaWYgKCFyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQorICAg
ICAgICBjb21wb3NpdG9yKCkubGF5ZXJXaWxsQmVSZW1vdmVkKCp0aGlzLCAqb2xkQ2hpbGQpOwor
CisgICAgLy8gcmVtb3ZlIHRoZSBjaGlsZAorICAgIGlmIChvbGRDaGlsZC0+cHJldmlvdXNTaWJs
aW5nKCkpCisgICAgICAgIG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKS0+c2V0TmV4dFNpYmxp
bmcob2xkQ2hpbGQtPm5leHRTaWJsaW5nKCkpOworICAgIGlmIChvbGRDaGlsZC0+bmV4dFNpYmxp
bmcoKSkKKyAgICAgICAgb2xkQ2hpbGQtPm5leHRTaWJsaW5nKCktPnNldFByZXZpb3VzU2libGlu
ZyhvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpOworCisgICAgaWYgKG1fZmlyc3QgPT0gb2xk
Q2hpbGQpCisgICAgICAgIG1fZmlyc3QgPSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICBp
ZiAobV9sYXN0ID09IG9sZENoaWxkKQorICAgICAgICBtX2xhc3QgPSBvbGRDaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCk7CisKKyAgICBpZiAob2xkQ2hpbGQtPmlzTm9ybWFsRmxvd09ubHkoKSkKKyAg
ICAgICAgZGlydHlOb3JtYWxGbG93TGlzdCgpOworICAgIGlmICghb2xkQ2hpbGQtPmlzTm9ybWFs
Rmxvd09ubHkoKSB8fCBvbGRDaGlsZC0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgIC8vIERpcnR5
IHRoZSB6LW9yZGVyIGxpc3QgaW4gd2hpY2ggd2UgYXJlIGNvbnRhaW5lZC4gV2hlbiBjYWxsZWQg
dmlhIHRoZQorICAgICAgICAvLyByZWF0dGFjaG1lbnQgcHJvY2VzcyBpbiByZW1vdmVPbmx5VGhp
c0xheWVyLCB0aGUgbGF5ZXIgbWF5IGFscmVhZHkgYmUgZGlzY29ubmVjdGVkCisgICAgICAgIC8v
IGZyb20gdGhlIG1haW4gbGF5ZXIgdHJlZSwgc28gd2UgbmVlZCB0byBudWxsLWNoZWNrIHRoZSB8
c3RhY2tpbmdDb250ZXh0fCB2YWx1ZS4KKyAgICAgICAgb2xkQ2hpbGQtPmRpcnR5U3RhY2tpbmdD
b250ZXh0Wk9yZGVyTGlzdHMoKTsKKyAgICB9CisKKyAgICBvbGRDaGlsZC0+c2V0UHJldmlvdXNT
aWJsaW5nKG51bGxwdHIpOworICAgIG9sZENoaWxkLT5zZXROZXh0U2libGluZyhudWxscHRyKTsK
KyAgICBvbGRDaGlsZC0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIAorICAgIG9sZENoaWxkLT51
cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKKyAgICBpZiAob2xkQ2hpbGQtPm1faGFz
VmlzaWJsZUNvbnRlbnQgfHwgb2xkQ2hpbGQtPm1faGFzVmlzaWJsZURlc2NlbmRhbnQpCisgICAg
ICAgIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVEZXNjZW5kYW50U3RhdHVzKCk7CisKKyAgICBp
ZiAob2xkQ2hpbGQtPmlzU2VsZlBhaW50aW5nTGF5ZXIoKSB8fCBvbGRDaGlsZC0+aGFzU2VsZlBh
aW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCisgICAgICAgIGRpcnR5QW5jZXN0b3JDaGFpbkhhc1Nl
bGZQYWludGluZ0xheWVyRGVzY2VuZGFudFN0YXR1cygpOworCisjaWYgRU5BQkxFKENTU19DT01Q
T1NJVElORykKKyAgICBpZiAob2xkQ2hpbGQtPmhhc0JsZW5kTW9kZSgpIHx8IChvbGRDaGlsZC0+
aGFzTm90SXNvbGF0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzKCkgJiYgIW9sZENoaWxkLT5pc29sYXRl
c0JsZW5kaW5nKCkpKQorICAgICAgICBkaXJ0eUFuY2VzdG9yQ2hhaW5IYXNCbGVuZGluZ0Rlc2Nl
bmRhbnRzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBvbGRDaGlsZDsKK30KKwordm9pZCBSZW5k
ZXJMYXllcjo6aW5zZXJ0T25seVRoaXNMYXllcigpCit7CisgICAgaWYgKCFtX3BhcmVudCAmJiBy
ZW5kZXJlcigpLnBhcmVudCgpKSB7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gY29ubmVjdCBvdXJz
ZWx2ZXMgd2hlbiBvdXIgcmVuZGVyZXIoKSBoYXMgYSBwYXJlbnQuCisgICAgICAgIC8vIEZpbmQg
b3VyIGVuY2xvc2luZ0xheWVyIGFuZCBhZGQgb3Vyc2VsdmVzLgorICAgICAgICBSZW5kZXJMYXll
ciogcGFyZW50TGF5ZXIgPSByZW5kZXJlcigpLnBhcmVudCgpLT5lbmNsb3NpbmdMYXllcigpOwor
ICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXIpOworICAgICAgICBSZW5kZXJMYXllciogYmVmb3Jl
Q2hpbGQgPSBwYXJlbnRMYXllci0+cmVmbGVjdGlvbkxheWVyKCkgIT0gdGhpcyA/IHJlbmRlcmVy
KCkucGFyZW50KCktPmZpbmROZXh0TGF5ZXIocGFyZW50TGF5ZXIsICZyZW5kZXJlcigpKSA6IG51
bGxwdHI7CisgICAgICAgIHBhcmVudExheWVyLT5hZGRDaGlsZCh0aGlzLCBiZWZvcmVDaGlsZCk7
CisgICAgfQorCisgICAgLy8gUmVtb3ZlIGFsbCBkZXNjZW5kYW50IGxheWVycyBmcm9tIHRoZSBo
aWVyYXJjaHkgYW5kIGFkZCB0aGVtIHRvIHRoZSBuZXcgcG9zaXRpb24uCisgICAgZm9yIChhdXRv
JiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkpKQorICAg
ICAgICBjaGlsZC5tb3ZlTGF5ZXJzKG1fcGFyZW50LCB0aGlzKTsKKworICAgIC8vIENsZWFyIG91
dCBhbGwgdGhlIGNsaXAgcmVjdHMuCisgICAgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5k
YW50cygpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpyZW1vdmVPbmx5VGhpc0xheWVyKCkKK3sK
KyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYXJrIHRoYXQg
d2UgYXJlIGFib3V0IHRvIGxvc2Ugb3VyIGxheWVyLiBUaGlzIG1ha2VzIHJlbmRlciB0cmVlCisg
ICAgLy8gd2Fsa3MgaWdub3JlIHRoaXMgbGF5ZXIgd2hpbGUgd2UncmUgcmVtb3ZpbmcgaXQuCisg
ICAgcmVuZGVyZXIoKS5zZXRIYXNMYXllcihmYWxzZSk7CisKKyAgICBjb21wb3NpdG9yKCkubGF5
ZXJXaWxsQmVSZW1vdmVkKCptX3BhcmVudCwgKnRoaXMpOworCisgICAgLy8gRGlydHkgdGhlIGNs
aXAgcmVjdHMuCisgICAgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cygpOworCisg
ICAgUmVuZGVyTGF5ZXIqIG5leHRTaWIgPSBuZXh0U2libGluZygpOworCisgICAgLy8gUmVtb3Zl
IHRoZSBjaGlsZCByZWZsZWN0aW9uIGxheWVyIGJlZm9yZSBtb3Zpbmcgb3RoZXIgY2hpbGQgbGF5
ZXJzLgorICAgIC8vIFRoZSByZWZsZWN0aW9uIGxheWVyIHNob3VsZCBub3QgYmUgbW92ZWQgdG8g
dGhlIHBhcmVudC4KKyAgICBpZiAocmVmbGVjdGlvbigpKQorICAgICAgICByZW1vdmVDaGlsZChy
ZWZsZWN0aW9uTGF5ZXIoKSk7CisKKyAgICAvLyBOb3cgd2FsayBvdXIga2lkcyBhbmQgcmVhdHRh
Y2ggdGhlbSB0byBvdXIgcGFyZW50LgorICAgIFJlbmRlckxheWVyKiBjdXJyZW50ID0gbV9maXJz
dDsKKyAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAgICBSZW5kZXJMYXllciogbmV4dCA9IGN1
cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgICAgIHJlbW92ZUNoaWxkKGN1cnJlbnQpOworICAg
ICAgICBtX3BhcmVudC0+YWRkQ2hpbGQoY3VycmVudCwgbmV4dFNpYik7CisgICAgICAgIGN1cnJl
bnQtPnNldFJlcGFpbnRTdGF0dXMoTmVlZHNGdWxsUmVwYWludCk7CisgICAgICAgIGN1cnJlbnQg
PSBuZXh0OworICAgIH0KKworICAgIC8vIFJlbW92ZSB1cyBmcm9tIHRoZSBwYXJlbnQuCisgICAg
bV9wYXJlbnQtPnJlbW92ZUNoaWxkKHRoaXMpOworICAgIHJlbmRlcmVyKCkuZGVzdHJveUxheWVy
KCk7Cit9CisKK3N0YXRpYyBib29sIGNhbkNyZWF0ZVN0YWNraW5nQ29udGV4dChjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBsYXllci5yZW5kZXJlcigp
OworICAgIHJldHVybiByZW5kZXJlci5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQorICAg
ICAgICB8fCByZW5kZXJlci5oYXNDbGlwUGF0aCgpCisgICAgICAgIHx8IHJlbmRlcmVyLmhhc0Zp
bHRlcigpCisgICAgICAgIHx8IHJlbmRlcmVyLmhhc01hc2soKQorICAgICAgICB8fCByZW5kZXJl
ci5oYXNCYWNrZHJvcEZpbHRlcigpCisjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKKyAgICAg
ICAgfHwgcmVuZGVyZXIuaGFzQmxlbmRNb2RlKCkKKyNlbmRpZgorICAgICAgICB8fCByZW5kZXJl
ci5pc1RyYW5zcGFyZW50KCkKKyAgICAgICAgfHwgcmVuZGVyZXIuaXNQb3NpdGlvbmVkKCkgLy8g
Tm90ZSB0aGF0IHRoaXMgb25seSBjcmVhdGVzIHN0YWNraW5nIGNvbnRleHQgaW4gY29uanVuY3Rp
b24gd2l0aCBleHBsaWNpdCB6LWluZGV4LgorICAgICAgICB8fCByZW5kZXJlci5oYXNSZWZsZWN0
aW9uKCkKKyAgICAgICAgfHwgcmVuZGVyZXIuc3R5bGUoKS5oYXNJc29sYXRpb24oKQorI2lmIFBM
QVRGT1JNKElPUykKKyAgICAgICAgfHwgbGF5ZXIuY2FuVXNlQWNjZWxlcmF0ZWRUb3VjaFNjcm9s
bGluZygpCisjZW5kaWYKKyAgICAgICAgfHwgKHJlbmRlcmVyLnN0eWxlKCkud2lsbENoYW5nZSgp
ICYmIHJlbmRlcmVyLnN0eWxlKCkud2lsbENoYW5nZSgpLT5jYW5DcmVhdGVTdGFja2luZ0NvbnRl
eHQoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBj
b25zdAoreworICAgIGlmIChjYW5DcmVhdGVTdGFja2luZ0NvbnRleHQoKnRoaXMpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KQorICAgICAgICB8fCByZW5kZXJlcigpLmlzQ2FudmFzKCkKKyAgICAgICAgfHwgcmVuZGVyZXIo
KS5pc1ZpZGVvKCkKKyAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0VtYmVkZGVkT2JqZWN0KCkKKyAg
ICAgICAgfHwgcmVuZGVyZXIoKS5pc1JlbmRlcklGcmFtZSgpCisgICAgICAgIHx8IChyZW5kZXJl
cigpLnN0eWxlKCkuc3BlY2lmaWVzQ29sdW1ucygpICYmICFpc1JlbmRlclZpZXdMYXllcigpKQor
ICAgICAgICB8fCByZW5kZXJlcigpLmlzSW5GbG93UmVuZGVyRnJhZ21lbnRlZEZsb3coKTsKK30K
KworYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVTdGFja2luZ0NvbnRleHQoKSBjb25zdAorewor
ICAgIC8vIE5vbi1hdXRvIHotaW5kZXggYWx3YXlzIGltcGxpZXMgc3RhY2tpbmcgY29udGV4dCBo
ZXJlLCBiZWNhdXNlIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlIGFscmVhZHkgYWRq
dXN0cyB6LWluZGV4CisgICAgLy8gYmFzZWQgb24gcG9zaXRpb25pbmcgYW5kIG90aGVyIGNyaXRl
cmlhLgorICAgIHJldHVybiAhcmVuZGVyZXIoKS5zdHlsZSgpLmhhc0F1dG9aSW5kZXgoKSB8fCBp
c1JlbmRlclZpZXdMYXllcigpIHx8IGlzRm9yY2VkU3RhY2tpbmdDb250ZXh0KCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXI6OnNldElzTm9ybWFsRmxvd09ubHkoYm9vbCBpc05vcm1hbEZsb3dPbmx5
KQoreworICAgIGlmIChpc05vcm1hbEZsb3dPbmx5ID09IG1faXNOb3JtYWxGbG93T25seSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIG1faXNOb3JtYWxGbG93T25seSA9IGlzTm9y
bWFsRmxvd09ubHk7CisKKyAgICBpZiAoYXV0byogcCA9IHBhcmVudCgpKQorICAgICAgICBwLT5k
aXJ0eU5vcm1hbEZsb3dMaXN0KCk7CisgICAgZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0
cygpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlckxheWVyOjpzZXRJc1N0YWNr
aW5nQ29udGV4dChib29sIGlzU3RhY2tpbmdDb250ZXh0KQoreworICAgIGlmIChpc1N0YWNraW5n
Q29udGV4dCA9PSBtX2lzU3RhY2tpbmdDb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgbV9pc1N0YWNraW5nQ29udGV4dCA9IGlzU3RhY2tpbmdDb250ZXh0OworCisgICAg
ZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOworICAgIGlmIChpc1N0YWNraW5nQ29u
dGV4dCkKKyAgICAgICAgZGlydHlaT3JkZXJMaXN0cygpOworICAgIGVsc2UKKyAgICAgICAgY2xl
YXJaT3JkZXJMaXN0cygpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXI6OnNldFBhcmVudChSZW5kZXJMYXllciogcGFyZW50KQoreworICAgIGlmIChwYXJlbnQgPT0g
bV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3BhcmVudCAmJiAhcmVuZGVy
ZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKKyAgICAgICAgY29tcG9zaXRvcigpLmxh
eWVyV2lsbEJlUmVtb3ZlZCgqbV9wYXJlbnQsICp0aGlzKTsKKyAgICAKKyAgICBtX3BhcmVudCA9
IHBhcmVudDsKKworICAgIGlmIChtX3BhcmVudCAmJiAhcmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVp
bmdEZXN0cm95ZWQoKSkKKyAgICAgICAgY29tcG9zaXRvcigpLmxheWVyV2FzQWRkZWQoKm1fcGFy
ZW50LCAqdGhpcyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5Wk9yZGVyTGlzdHMoKQor
eworICAgIEFTU0VSVChtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCk7CisgICAgQVNTRVJUKGlz
U3RhY2tpbmdDb250ZXh0KCkpOworCisgICAgaWYgKG1fcG9zWk9yZGVyTGlzdCkKKyAgICAgICAg
bV9wb3NaT3JkZXJMaXN0LT5jbGVhcigpOworICAgIGlmIChtX25lZ1pPcmRlckxpc3QpCisgICAg
ICAgIG1fbmVnWk9yZGVyTGlzdC0+Y2xlYXIoKTsKKyAgICBtX3pPcmRlckxpc3RzRGlydHkgPSB0
cnVlOworCisgICAgaWYgKCFyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQor
ICAgICAgICBjb21wb3NpdG9yKCkuc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOwor
fQorCit2b2lkIFJlbmRlckxheWVyOjpkaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxpc3RzKCkK
K3sKKyAgICBpZiAoYXV0byogc2MgPSBzdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgc2MtPmRp
cnR5Wk9yZGVyTGlzdHMoKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6ZGlydHlOb3JtYWxGbG93
TGlzdCgpCit7CisgICAgQVNTRVJUKG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKTsKKworICAg
IGlmIChtX25vcm1hbEZsb3dMaXN0KQorICAgICAgICBtX25vcm1hbEZsb3dMaXN0LT5jbGVhcigp
OworICAgIG1fbm9ybWFsRmxvd0xpc3REaXJ0eSA9IHRydWU7CisKKyAgICBpZiAoIXJlbmRlcmVy
KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCisgICAgICAgIGNvbXBvc2l0b3IoKS5zZXRD
b21wb3NpdGluZ0xheWVyc05lZWRSZWJ1aWxkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZU5vcm1hbEZsb3dMaXN0KCkKK3sKKyAgICBpZiAoIW1fbm9ybWFsRmxvd0xpc3REaXJ0eSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2Vk
KTsKKworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAvLyBJZ25vcmUgbm9uLW92
ZXJmbG93IGxheWVycyBhbmQgcmVmbGVjdGlvbnMuCisgICAgICAgIGlmIChjaGlsZC0+aXNOb3Jt
YWxGbG93T25seSgpICYmICghbV9yZWZsZWN0aW9uIHx8IHJlZmxlY3Rpb25MYXllcigpICE9IGNo
aWxkKSkgeworICAgICAgICAgICAgaWYgKCFtX25vcm1hbEZsb3dMaXN0KQorICAgICAgICAgICAg
ICAgIG1fbm9ybWFsRmxvd0xpc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxSZW5kZXJMYXll
cio+PigpOworICAgICAgICAgICAgbV9ub3JtYWxGbG93TGlzdC0+YXBwZW5kKGNoaWxkKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX25vcm1hbEZsb3dMaXN0RGlydHkgPSBmYWxzZTsK
K30KKwordm9pZCBSZW5kZXJMYXllcjo6cmVidWlsZFpPcmRlckxpc3RzKCkKK3sKKyAgICBBU1NF
UlQobV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQpOworICAgIEFTU0VSVChpc0RpcnR5U3RhY2tp
bmdDb250ZXh0KCkpOworICAgIHJlYnVpbGRaT3JkZXJMaXN0cyhtX3Bvc1pPcmRlckxpc3QsIG1f
bmVnWk9yZGVyTGlzdCk7CisgICAgbV96T3JkZXJMaXN0c0RpcnR5ID0gZmFsc2U7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXI6OnJlYnVpbGRaT3JkZXJMaXN0cyhzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PFJlbmRlckxheWVyKj4+JiBwb3NaT3JkZXJMaXN0LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJl
bmRlckxheWVyKj4+JiBuZWdaT3JkZXJMaXN0KQoreworICAgIGJvb2wgaW5jbHVkZUhpZGRlbkxh
eWVycyA9IGNvbXBvc2l0b3IoKS5pbkNvbXBvc2l0aW5nTW9kZSgpOworICAgIGZvciAoUmVuZGVy
TGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBpZiAoIW1fcmVmbGVjdGlvbiB8fCByZWZsZWN0aW9uTGF5ZXIo
KSAhPSBjaGlsZCkKKyAgICAgICAgICAgIGNoaWxkLT5jb2xsZWN0TGF5ZXJzKGluY2x1ZGVIaWRk
ZW5MYXllcnMsIHBvc1pPcmRlckxpc3QsIG5lZ1pPcmRlckxpc3QpOworICAgIH0KKworICAgIGF1
dG8gY29tcGFyZVpJbmRleCA9IFtdIChjb25zdCBSZW5kZXJMYXllciogZmlyc3QsIGNvbnN0IFJl
bmRlckxheWVyKiBzZWNvbmQpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gZmlyc3QtPnpJbmRl
eCgpIDwgc2Vjb25kLT56SW5kZXgoKTsKKyAgICB9OworCisgICAgLy8gU29ydCB0aGUgdHdvIGxp
c3RzLgorICAgIGlmIChwb3NaT3JkZXJMaXN0KQorICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KHBv
c1pPcmRlckxpc3QtPmJlZ2luKCksIHBvc1pPcmRlckxpc3QtPmVuZCgpLCBjb21wYXJlWkluZGV4
KTsKKworICAgIGlmIChuZWdaT3JkZXJMaXN0KQorICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG5l
Z1pPcmRlckxpc3QtPmJlZ2luKCksIG5lZ1pPcmRlckxpc3QtPmVuZCgpLCBjb21wYXJlWkluZGV4
KTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdExheWVycyhib29sIGluY2x1ZGVIaWRk
ZW5MYXllcnMsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPj4mIHBvc2l0aXZl
Wk9yZGVyTGlzdCwgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZW5kZXJMYXllcio+PiYgbmVnYXRp
dmVaT3JkZXJMaXN0KQoreworICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwor
CisgICAgYm9vbCBpc1N0YWNraW5nID0gaXNTdGFja2luZ0NvbnRleHQoKTsKKyAgICAvLyBPdmVy
ZmxvdyBsYXllcnMgYXJlIGp1c3QgcGFpbnRlZCBieSB0aGVpciBlbmNsb3NpbmcgbGF5ZXJzLCBz
byB0aGV5IGRvbid0IGdldCBwdXQgaW4gem9yZGVyIGxpc3RzLgorICAgIGJvb2wgaW5jbHVkZUhp
ZGRlbkxheWVyID0gaW5jbHVkZUhpZGRlbkxheWVycyB8fCAobV9oYXNWaXNpYmxlQ29udGVudCB8
fCAobV9oYXNWaXNpYmxlRGVzY2VuZGFudCAmJiBpc1N0YWNraW5nKSk7CisgICAgaWYgKGluY2x1
ZGVIaWRkZW5MYXllciAmJiAhaXNOb3JtYWxGbG93T25seSgpKSB7CisgICAgICAgIGF1dG8mIGxh
eWVyTGlzdCA9ICh6SW5kZXgoKSA+PSAwKSA/IHBvc2l0aXZlWk9yZGVyTGlzdCA6IG5lZ2F0aXZl
Wk9yZGVyTGlzdDsKKyAgICAgICAgaWYgKCFsYXllckxpc3QpCisgICAgICAgICAgICBsYXllckxp
c3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxSZW5kZXJMYXllcio+PigpOworICAgICAgICBs
YXllckxpc3QtPmFwcGVuZCh0aGlzKTsKKyAgICB9CisKKyAgICAvLyBSZWN1ciBpbnRvIG91ciBj
aGlsZHJlbiB0byBjb2xsZWN0IG1vcmUgbGF5ZXJzLCBidXQgb25seSBpZiB3ZSBkb24ndCBlc3Rh
Ymxpc2gKKyAgICAvLyBhIHN0YWNraW5nIGNvbnRleHQvY29udGFpbmVyLgorICAgIGlmICgoaW5j
bHVkZUhpZGRlbkxheWVycyB8fCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KSAmJiAhaXNTdGFja2lu
ZykgeworICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIElnbm9y
ZSByZWZsZWN0aW9ucy4KKyAgICAgICAgICAgIGlmICghbV9yZWZsZWN0aW9uIHx8IHJlZmxlY3Rp
b25MYXllcigpICE9IGNoaWxkKQorICAgICAgICAgICAgICAgIGNoaWxkLT5jb2xsZWN0TGF5ZXJz
KGluY2x1ZGVIaWRkZW5MYXllcnMsIHBvc2l0aXZlWk9yZGVyTGlzdCwgbmVnYXRpdmVaT3JkZXJM
aXN0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJMaXN0c0lmTmVlZGVkKCkKK3sKKyAgICB1cGRhdGVaT3JkZXJMaXN0cygpOworICAgIHVwZGF0
ZU5vcm1hbEZsb3dMaXN0KCk7CisKKyAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlZmxlY3Rpb25MYXll
ciA9IHRoaXMtPnJlZmxlY3Rpb25MYXllcigpKSB7CisgICAgICAgIHJlZmxlY3Rpb25MYXllci0+
dXBkYXRlWk9yZGVyTGlzdHMoKTsKKyAgICAgICAgcmVmbGVjdGlvbkxheWVyLT51cGRhdGVOb3Jt
YWxGbG93TGlzdCgpOworICAgIH0KK30KKwogU3RyaW5nIFJlbmRlckxheWVyOjpuYW1lKCkgY29u
c3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIG5hbWU7CkBAIC0xNTk3LDE4MSArMTk0MCwzOCBAQCB2
b2lkIFJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheWVyUAogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAgICAg
ICAgIGJvb2wgdXNlc0NvbXBvc2l0ZU9wZXJhdGlvbiA9IGhhc0JsZW5kTW9kZSgpICYmICEocmVu
ZGVyZXIoKS5pc1NWR1Jvb3QoKSAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJWaWV3
TGF5ZXIoKSk7CiAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAg
ICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRp
b24oKSwgYmxlbmRNb2RlKCkpOwotI2VuZGlmCi0KLSAgICAgICAgY29udGV4dC5iZWdpblRyYW5z
cGFyZW5jeUxheWVyKHJlbmRlcmVyKCkub3BhY2l0eSgpKTsKLQotI2lmIEVOQUJMRShDU1NfQ09N
UE9TSVRJTkcpCi0gICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQotICAgICAgICAg
ICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3NpdGVPcGVyYXRp
b24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOwotI2VuZGlmCi0KLSNpZmRlZiBSRVZFQUxfVFJBTlNQ
QVJFTkNZX0xBWUVSUwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigwLjBmLCAw
LjBmLCAwLjVmLCAwLjJmKSk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QocGl4ZWxTbmFwcGVk
Q2xpcFJlY3QpOwotI2VuZGlmCi0gICAgfQotfQotCi0jaWYgUExBVEZPUk0oSU9TKQotdm9pZCBS
ZW5kZXJMYXllcjo6d2lsbEJlRGVzdHJveWVkKCkKLXsKLSAgICBpZiAoUmVuZGVyTGF5ZXJCYWNr
aW5nKiBsYXllckJhY2tpbmcgPSBiYWNraW5nKCkpCi0gICAgICAgIGxheWVyQmFja2luZy0+bGF5
ZXJXaWxsQmVEZXN0cm95ZWQoKTsKLX0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVyOjppc0Rl
c2NlbmRhbnRPZihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIGNvbnN0Ci17Ci0gICAgZm9yIChh
dXRvKiBhbmNlc3RvciA9IHRoaXM7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJl
bnQoKSkgewotICAgICAgICBpZiAoJmxheWVyID09IGFuY2VzdG9yKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6YWRkQ2hpbGQoUmVuZGVyTGF5ZXIqIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQp
Ci17Ci0gICAgUmVuZGVyTGF5ZXIqIHByZXZTaWJsaW5nID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKLSAgICBpZiAocHJldlNpYmxp
bmcpIHsKLSAgICAgICAgY2hpbGQtPnNldFByZXZpb3VzU2libGluZyhwcmV2U2libGluZyk7Ci0g
ICAgICAgIHByZXZTaWJsaW5nLT5zZXROZXh0U2libGluZyhjaGlsZCk7Ci0gICAgICAgIEFTU0VS
VChwcmV2U2libGluZyAhPSBjaGlsZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNldEZpcnN0Q2hp
bGQoY2hpbGQpOwotCi0gICAgaWYgKGJlZm9yZUNoaWxkKSB7Ci0gICAgICAgIGJlZm9yZUNoaWxk
LT5zZXRQcmV2aW91c1NpYmxpbmcoY2hpbGQpOwotICAgICAgICBjaGlsZC0+c2V0TmV4dFNpYmxp
bmcoYmVmb3JlQ2hpbGQpOwotICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGQgIT0gY2hpbGQpOwot
ICAgIH0gZWxzZQotICAgICAgICBzZXRMYXN0Q2hpbGQoY2hpbGQpOwotCi0gICAgY2hpbGQtPnNl
dFBhcmVudCh0aGlzKTsKLQotICAgIGlmIChjaGlsZC0+aXNOb3JtYWxGbG93T25seSgpKQotICAg
ICAgICBkaXJ0eU5vcm1hbEZsb3dMaXN0KCk7Ci0KLSAgICBpZiAoIWNoaWxkLT5pc05vcm1hbEZs
b3dPbmx5KCkgfHwgY2hpbGQtPmZpcnN0Q2hpbGQoKSkgewotICAgICAgICAvLyBEaXJ0eSB0aGUg
ei1vcmRlciBsaXN0IGluIHdoaWNoIHdlIGFyZSBjb250YWluZWQuIFRoZSBzdGFja2luZ0NvbnRl
eHQoKSBjYW4gYmUgbnVsbCBpbiB0aGUKLSAgICAgICAgLy8gY2FzZSB3aGVyZSB3ZSdyZSBidWls
ZGluZyB1cCBnZW5lcmF0ZWQgY29udGVudCBsYXllcnMuIFRoaXMgaXMgb2ssIHNpbmNlIHRoZSBs
aXN0cyB3aWxsIHN0YXJ0Ci0gICAgICAgIC8vIG9mZiBkaXJ0eSBpbiB0aGF0IGNhc2UgYW55d2F5
LgotICAgICAgICBjaGlsZC0+ZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOwotICAg
IH0KLQotICAgIGNoaWxkLT51cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKLSAgICBp
ZiAoY2hpbGQtPm1faGFzVmlzaWJsZUNvbnRlbnQgfHwgY2hpbGQtPm1faGFzVmlzaWJsZURlc2Nl
bmRhbnQpCi0gICAgICAgIHNldEFuY2VzdG9yQ2hhaW5IYXNWaXNpYmxlRGVzY2VuZGFudCgpOwot
Ci0gICAgaWYgKGNoaWxkLT5pc1NlbGZQYWludGluZ0xheWVyKCkgfHwgY2hpbGQtPmhhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudCgpKQotICAgICAgICBzZXRBbmNlc3RvckNoYWluSGFzU2Vs
ZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5H
KQotICAgIGlmIChjaGlsZC0+aGFzQmxlbmRNb2RlKCkgfHwgKGNoaWxkLT5oYXNOb3RJc29sYXRl
ZEJsZW5kaW5nRGVzY2VuZGFudHMoKSAmJiAhY2hpbGQtPmlzb2xhdGVzQmxlbmRpbmcoKSkpCi0g
ICAgICAgIHVwZGF0ZUFuY2VzdG9yQ2hhaW5IYXNCbGVuZGluZ0Rlc2NlbmRhbnRzKCk7Ci0jZW5k
aWYKLQotICAgIGNvbXBvc2l0b3IoKS5sYXllcldhc0FkZGVkKCp0aGlzLCAqY2hpbGQpOwotfQot
Ci1SZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OnJlbW92ZUNoaWxkKFJlbmRlckxheWVyKiBvbGRD
aGlsZCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkp
Ci0gICAgICAgIGNvbXBvc2l0b3IoKS5sYXllcldpbGxCZVJlbW92ZWQoKnRoaXMsICpvbGRDaGls
ZCk7Ci0KLSAgICAvLyByZW1vdmUgdGhlIGNoaWxkCi0gICAgaWYgKG9sZENoaWxkLT5wcmV2aW91
c1NpYmxpbmcoKSkKLSAgICAgICAgb2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygpLT5zZXROZXh0
U2libGluZyhvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKSk7Ci0gICAgaWYgKG9sZENoaWxkLT5uZXh0
U2libGluZygpKQotICAgICAgICBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKS0+c2V0UHJldmlvdXNT
aWJsaW5nKG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7Ci0KLSAgICBpZiAobV9maXJzdCA9
PSBvbGRDaGlsZCkKLSAgICAgICAgbV9maXJzdCA9IG9sZENoaWxkLT5uZXh0U2libGluZygpOwot
ICAgIGlmIChtX2xhc3QgPT0gb2xkQ2hpbGQpCi0gICAgICAgIG1fbGFzdCA9IG9sZENoaWxkLT5w
cmV2aW91c1NpYmxpbmcoKTsKLQotICAgIGlmIChvbGRDaGlsZC0+aXNOb3JtYWxGbG93T25seSgp
KQotICAgICAgICBkaXJ0eU5vcm1hbEZsb3dMaXN0KCk7Ci0gICAgaWYgKCFvbGRDaGlsZC0+aXNO
b3JtYWxGbG93T25seSgpIHx8IG9sZENoaWxkLT5maXJzdENoaWxkKCkpIHsgCi0gICAgICAgIC8v
IERpcnR5IHRoZSB6LW9yZGVyIGxpc3QgaW4gd2hpY2ggd2UgYXJlIGNvbnRhaW5lZC4gIFdoZW4g
Y2FsbGVkIHZpYSB0aGUKLSAgICAgICAgLy8gcmVhdHRhY2htZW50IHByb2Nlc3MgaW4gcmVtb3Zl
T25seVRoaXNMYXllciwgdGhlIGxheWVyIG1heSBhbHJlYWR5IGJlIGRpc2Nvbm5lY3RlZAotICAg
ICAgICAvLyBmcm9tIHRoZSBtYWluIGxheWVyIHRyZWUsIHNvIHdlIG5lZWQgdG8gbnVsbC1jaGVj
ayB0aGUgfHN0YWNraW5nQ29udGV4dHwgdmFsdWUuCi0gICAgICAgIG9sZENoaWxkLT5kaXJ0eVN0
YWNraW5nQ29udGV4dFpPcmRlckxpc3RzKCk7Ci0gICAgfQotCi0gICAgb2xkQ2hpbGQtPnNldFBy
ZXZpb3VzU2libGluZyhudWxscHRyKTsKLSAgICBvbGRDaGlsZC0+c2V0TmV4dFNpYmxpbmcobnVs
bHB0cik7Ci0gICAgb2xkQ2hpbGQtPnNldFBhcmVudChudWxscHRyKTsKLSAgICAKLSAgICBvbGRD
aGlsZC0+dXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7Ci0gICAgaWYgKG9sZENoaWxk
LT5tX2hhc1Zpc2libGVDb250ZW50IHx8IG9sZENoaWxkLT5tX2hhc1Zpc2libGVEZXNjZW5kYW50
KQotICAgICAgICBkaXJ0eUFuY2VzdG9yQ2hhaW5WaXNpYmxlRGVzY2VuZGFudFN0YXR1cygpOwot
Ci0gICAgaWYgKG9sZENoaWxkLT5pc1NlbGZQYWludGluZ0xheWVyKCkgfHwgb2xkQ2hpbGQtPmhh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQotICAgICAgICBkaXJ0eUFuY2VzdG9yQ2hh
aW5IYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnRTdGF0dXMoKTsKLQotI2lmIEVOQUJMRShD
U1NfQ09NUE9TSVRJTkcpCi0gICAgaWYgKG9sZENoaWxkLT5oYXNCbGVuZE1vZGUoKSB8fCAob2xk
Q2hpbGQtPmhhc05vdElzb2xhdGVkQmxlbmRpbmdEZXNjZW5kYW50cygpICYmICFvbGRDaGlsZC0+
aXNvbGF0ZXNCbGVuZGluZygpKSkKLSAgICAgICAgZGlydHlBbmNlc3RvckNoYWluSGFzQmxlbmRp
bmdEZXNjZW5kYW50cygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gb2xkQ2hpbGQ7Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OnJlbW92ZU9ubHlUaGlzTGF5ZXIoKQotewotICAgIGlmICghbV9wYXJl
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgdGhhdCB3ZSBhcmUgYWJvdXQgdG8g
bG9zZSBvdXIgbGF5ZXIuIFRoaXMgbWFrZXMgcmVuZGVyIHRyZWUKLSAgICAvLyB3YWxrcyBpZ25v
cmUgdGhpcyBsYXllciB3aGlsZSB3ZSdyZSByZW1vdmluZyBpdC4KLSAgICByZW5kZXJlcigpLnNl
dEhhc0xheWVyKGZhbHNlKTsKLQotICAgIGNvbXBvc2l0b3IoKS5sYXllcldpbGxCZVJlbW92ZWQo
Km1fcGFyZW50LCAqdGhpcyk7Ci0KLSAgICAvLyBEaXJ0eSB0aGUgY2xpcCByZWN0cy4KLSAgICBj
bGVhckNsaXBSZWN0c0luY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CisgICAgICAgICAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVu
ZE1vZGUoKSk7CisjZW5kaWYKIAotICAgIFJlbmRlckxheWVyKiBuZXh0U2liID0gbmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKHJlbmRlcmVyKCku
b3BhY2l0eSgpKTsKIAotICAgIC8vIFJlbW92ZSB0aGUgY2hpbGQgcmVmbGVjdGlvbiBsYXllciBi
ZWZvcmUgbW92aW5nIG90aGVyIGNoaWxkIGxheWVycy4KLSAgICAvLyBUaGUgcmVmbGVjdGlvbiBs
YXllciBzaG91bGQgbm90IGJlIG1vdmVkIHRvIHRoZSBwYXJlbnQuCi0gICAgaWYgKHJlZmxlY3Rp
b24oKSkKLSAgICAgICAgcmVtb3ZlQ2hpbGQocmVmbGVjdGlvbkxheWVyKCkpOworI2lmIEVOQUJM
RShDU1NfQ09NUE9TSVRJTkcpCisgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlT3BlcmF0aW9uKQor
ICAgICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dC5jb21wb3Np
dGVPcGVyYXRpb24oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworI2VuZGlmCiAKLSAgICAvLyBOb3cg
d2FsayBvdXIga2lkcyBhbmQgcmVhdHRhY2ggdGhlbSB0byBvdXIgcGFyZW50LgotICAgIFJlbmRl
ckxheWVyKiBjdXJyZW50ID0gbV9maXJzdDsKLSAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAg
ICBSZW5kZXJMYXllciogbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHJl
bW92ZUNoaWxkKGN1cnJlbnQpOwotICAgICAgICBtX3BhcmVudC0+YWRkQ2hpbGQoY3VycmVudCwg
bmV4dFNpYik7Ci0gICAgICAgIGN1cnJlbnQtPnNldFJlcGFpbnRTdGF0dXMoTmVlZHNGdWxsUmVw
YWludCk7Ci0gICAgICAgIGN1cnJlbnQgPSBuZXh0OworI2lmZGVmIFJFVkVBTF9UUkFOU1BBUkVO
Q1lfTEFZRVJTCisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDAuMGYsIDAuMGYs
IDAuNWYsIDAuMmYpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChwaXhlbFNuYXBwZWRDbGlw
UmVjdCk7CisjZW5kaWYKICAgICB9Cit9CiAKLSAgICAvLyBSZW1vdmUgdXMgZnJvbSB0aGUgcGFy
ZW50LgotICAgIG1fcGFyZW50LT5yZW1vdmVDaGlsZCh0aGlzKTsKLSAgICByZW5kZXJlcigpLmRl
c3Ryb3lMYXllcigpOworI2lmIFBMQVRGT1JNKElPUykKK3ZvaWQgUmVuZGVyTGF5ZXI6OndpbGxC
ZURlc3Ryb3llZCgpCit7CisgICAgaWYgKFJlbmRlckxheWVyQmFja2luZyogbGF5ZXJCYWNraW5n
ID0gYmFja2luZygpKQorICAgICAgICBsYXllckJhY2tpbmctPmxheWVyV2lsbEJlRGVzdHJveWVk
KCk7CiB9CisjZW5kaWYKIAotdm9pZCBSZW5kZXJMYXllcjo6aW5zZXJ0T25seVRoaXNMYXllcigp
Citib29sIFJlbmRlckxheWVyOjppc0Rlc2NlbmRhbnRPZihjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhcmVudCAmJiByZW5kZXJlcigpLnBhcmVudCgpKSB7
Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gY29ubmVjdCBvdXJzZWx2ZXMgd2hlbiBvdXIgcmVuZGVy
ZXIoKSBoYXMgYSBwYXJlbnQuCi0gICAgICAgIC8vIEZpbmQgb3VyIGVuY2xvc2luZ0xheWVyIGFu
ZCBhZGQgb3Vyc2VsdmVzLgotICAgICAgICBSZW5kZXJMYXllciogcGFyZW50TGF5ZXIgPSByZW5k
ZXJlcigpLnBhcmVudCgpLT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBBU1NFUlQocGFyZW50
TGF5ZXIpOwotICAgICAgICBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQgPSBwYXJlbnRMYXllci0+
cmVmbGVjdGlvbkxheWVyKCkgIT0gdGhpcyA/IHJlbmRlcmVyKCkucGFyZW50KCktPmZpbmROZXh0
TGF5ZXIocGFyZW50TGF5ZXIsICZyZW5kZXJlcigpKSA6IG51bGxwdHI7Ci0gICAgICAgIHBhcmVu
dExheWVyLT5hZGRDaGlsZCh0aGlzLCBiZWZvcmVDaGlsZCk7CisgICAgZm9yIChhdXRvKiBhbmNl
c3RvciA9IHRoaXM7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgewor
ICAgICAgICBpZiAoJmxheWVyID09IGFuY2VzdG9yKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQotCi0gICAgLy8gUmVtb3ZlIGFsbCBkZXNjZW5kYW50IGxheWVycyBmcm9tIHRoZSBo
aWVyYXJjaHkgYW5kIGFkZCB0aGVtIHRvIHRoZSBuZXcgcG9zaXRpb24uCi0gICAgZm9yIChhdXRv
JiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKCkpKQotICAg
ICAgICBjaGlsZC5tb3ZlTGF5ZXJzKG1fcGFyZW50LCB0aGlzKTsKLQotICAgIC8vIENsZWFyIG91
dCBhbGwgdGhlIGNsaXAgcmVjdHMuCi0gICAgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5k
YW50cygpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6Y29udmVy
dFRvUGl4ZWxTbmFwcGVkTGF5ZXJDb29yZHMoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5
ZXIsIEludFBvaW50JiByb3VuZGVkTG9jYXRpb24sIENvbHVtbk9mZnNldEFkanVzdG1lbnQgYWRq
dXN0Rm9yQ29sdW1ucykgY29uc3QKQEAgLTM5NzYsMTIgKzQxNzYsNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjphcHBseUZpbHRlcnMoR3JhcGhpY3NDb250ZXh0JiBvcmlnaW5hbENvbnRleHQsIGNvbnN0
IExheWVyUGFpbgogICAgIHJlc3RvcmVDbGlwKG9yaWdpbmFsQ29udGV4dCwgcGFpbnRpbmdJbmZv
LCBiYWNrZ3JvdW5kUmVjdCk7CiB9CiAKLS8vIEhlbHBlciBmb3IgdGhlIHNvcnRpbmcgb2YgbGF5
ZXJzIGJ5IHotaW5kZXguCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVpJbmRleChSZW5kZXJM
YXllciogZmlyc3QsIFJlbmRlckxheWVyKiBzZWNvbmQpCi17Ci0gICAgcmV0dXJuIGZpcnN0LT56
SW5kZXgoKSA8IHNlY29uZC0+ekluZGV4KCk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gcGFpbnRGbGFn
cykKIHsKICAgICBBU1NFUlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc1NlbGZQYWludGlu
Z0xheWVyRGVzY2VuZGFudCgpKTsKQEAgLTU4MTAsMTM3ICs2MDA0LDYgQEAgYm9vbCBSZW5kZXJM
YXllcjo6bGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxp
c3QmIGxpc3QsIGMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNl
dFBhcmVudChSZW5kZXJMYXllciogcGFyZW50KQotewotICAgIGlmIChwYXJlbnQgPT0gbV9wYXJl
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3BhcmVudCAmJiAhcmVuZGVyZXIoKS5y
ZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKLSAgICAgICAgY29tcG9zaXRvcigpLmxheWVyV2ls
bEJlUmVtb3ZlZCgqbV9wYXJlbnQsICp0aGlzKTsKLSAgICAKLSAgICBtX3BhcmVudCA9IHBhcmVu
dDsKLQotICAgIGlmIChtX3BhcmVudCAmJiAhcmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0
cm95ZWQoKSkKLSAgICAgICAgY29tcG9zaXRvcigpLmxheWVyV2FzQWRkZWQoKm1fcGFyZW50LCAq
dGhpcyk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5Wk9yZGVyTGlzdHMoKQotewotICAg
IEFTU0VSVChtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCk7Ci0gICAgQVNTRVJUKGlzU3RhY2tp
bmdDb250ZXh0KCkpOwotCi0gICAgaWYgKG1fcG9zWk9yZGVyTGlzdCkKLSAgICAgICAgbV9wb3Na
T3JkZXJMaXN0LT5jbGVhcigpOwotICAgIGlmIChtX25lZ1pPcmRlckxpc3QpCi0gICAgICAgIG1f
bmVnWk9yZGVyTGlzdC0+Y2xlYXIoKTsKLSAgICBtX3pPcmRlckxpc3RzRGlydHkgPSB0cnVlOwot
Ci0gICAgaWYgKCFyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAg
ICBjb21wb3NpdG9yKCkuc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpkaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxpc3RzKCkKLXsKLSAg
ICBSZW5kZXJMYXllciogc2MgPSBzdGFja2luZ0NvbnRleHQoKTsKLSAgICBpZiAoc2MpCi0gICAg
ICAgIHNjLT5kaXJ0eVpPcmRlckxpc3RzKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRpcnR5
Tm9ybWFsRmxvd0xpc3QoKQotewotICAgIEFTU0VSVChtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dl
ZCk7Ci0KLSAgICBpZiAobV9ub3JtYWxGbG93TGlzdCkKLSAgICAgICAgbV9ub3JtYWxGbG93TGlz
dC0+Y2xlYXIoKTsKLSAgICBtX25vcm1hbEZsb3dMaXN0RGlydHkgPSB0cnVlOwotCi0gICAgaWYg
KCFyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAgICBjb21wb3Np
dG9yKCkuc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOwotfQotCi12b2lkIFJlbmRl
ckxheWVyOjpyZWJ1aWxkWk9yZGVyTGlzdHMoKQotewotICAgIEFTU0VSVChtX2xheWVyTGlzdE11
dGF0aW9uQWxsb3dlZCk7Ci0gICAgQVNTRVJUKGlzRGlydHlTdGFja2luZ0NvbnRleHQoKSk7Ci0g
ICAgcmVidWlsZFpPcmRlckxpc3RzKG1fcG9zWk9yZGVyTGlzdCwgbV9uZWdaT3JkZXJMaXN0KTsK
LSAgICBtX3pPcmRlckxpc3RzRGlydHkgPSBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
cmVidWlsZFpPcmRlckxpc3RzKHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPj4m
IHBvc1pPcmRlckxpc3QsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPj4mIG5l
Z1pPcmRlckxpc3QpCi17Ci0gICAgYm9vbCBpbmNsdWRlSGlkZGVuTGF5ZXJzID0gY29tcG9zaXRv
cigpLmluQ29tcG9zaXRpbmdNb2RlKCk7Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAg
ICBpZiAoIW1fcmVmbGVjdGlvbiB8fCByZWZsZWN0aW9uTGF5ZXIoKSAhPSBjaGlsZCkKLSAgICAg
ICAgICAgIGNoaWxkLT5jb2xsZWN0TGF5ZXJzKGluY2x1ZGVIaWRkZW5MYXllcnMsIHBvc1pPcmRl
ckxpc3QsIG5lZ1pPcmRlckxpc3QpOwotCi0gICAgLy8gU29ydCB0aGUgdHdvIGxpc3RzLgotICAg
IGlmIChwb3NaT3JkZXJMaXN0KQotICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KHBvc1pPcmRlckxp
c3QtPmJlZ2luKCksIHBvc1pPcmRlckxpc3QtPmVuZCgpLCBjb21wYXJlWkluZGV4KTsKLQotICAg
IGlmIChuZWdaT3JkZXJMaXN0KQotICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG5lZ1pPcmRlckxp
c3QtPmJlZ2luKCksIG5lZ1pPcmRlckxpc3QtPmVuZCgpLCBjb21wYXJlWkluZGV4KTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTm9ybWFsRmxvd0xpc3QoKQotewotICAgIGlmICghbV9u
b3JtYWxGbG93TGlzdERpcnR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9sYXll
ckxpc3RNdXRhdGlvbkFsbG93ZWQpOwotCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIC8vIElnbm9yZSBub24tb3ZlcmZsb3cgbGF5ZXJzIGFuZCByZWZsZWN0aW9ucy4KLSAgICAg
ICAgaWYgKGNoaWxkLT5pc05vcm1hbEZsb3dPbmx5KCkgJiYgKCFtX3JlZmxlY3Rpb24gfHwgcmVm
bGVjdGlvbkxheWVyKCkgIT0gY2hpbGQpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fbm9ybWFsRmxv
d0xpc3QpCi0gICAgICAgICAgICAgICAgbV9ub3JtYWxGbG93TGlzdCA9IHN0ZDo6bWFrZV91bmlx
dWU8VmVjdG9yPFJlbmRlckxheWVyKj4+KCk7Ci0gICAgICAgICAgICBtX25vcm1hbEZsb3dMaXN0
LT5hcHBlbmQoY2hpbGQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIG1fbm9ybWFsRmxv
d0xpc3REaXJ0eSA9IGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0TGF5ZXJz
KGJvb2wgaW5jbHVkZUhpZGRlbkxheWVycywgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZW5kZXJM
YXllcio+PiYgcG9zQnVmZmVyLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlbmRlckxheWVyKj4+
JiBuZWdCdWZmZXIpCi17Ci0gICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7Ci0K
LSAgICBib29sIGlzU3RhY2tpbmcgPSBpc1N0YWNraW5nQ29udGV4dCgpOwotICAgIC8vIE92ZXJm
bG93IGxheWVycyBhcmUganVzdCBwYWludGVkIGJ5IHRoZWlyIGVuY2xvc2luZyBsYXllcnMsIHNv
IHRoZXkgZG9uJ3QgZ2V0IHB1dCBpbiB6b3JkZXIgbGlzdHMuCi0gICAgYm9vbCBpbmNsdWRlSGlk
ZGVuTGF5ZXIgPSBpbmNsdWRlSGlkZGVuTGF5ZXJzIHx8IChtX2hhc1Zpc2libGVDb250ZW50IHx8
IChtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmIGlzU3RhY2tpbmcpKTsKLSAgICBpZiAoaW5jbHVk
ZUhpZGRlbkxheWVyICYmICFpc05vcm1hbEZsb3dPbmx5KCkpIHsKLSAgICAgICAgLy8gRGV0ZXJt
aW5lIHdoaWNoIGJ1ZmZlciB0aGUgY2hpbGQgc2hvdWxkIGJlIGluLgotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VmVjdG9yPFJlbmRlckxheWVyKj4+JiBidWZmZXIgPSAoekluZGV4KCkgPj0gMCkg
PyBwb3NCdWZmZXIgOiBuZWdCdWZmZXI7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIHRoZSBidWZmZXIg
aWYgaXQgZG9lc24ndCBleGlzdCB5ZXQuCi0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAgICAg
ICAgYnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8UmVuZGVyTGF5ZXIqPj4oKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEFwcGVuZCBvdXJzZWx2ZXMgYXQgdGhlIGVuZCBvZiB0aGUgYXBw
cm9wcmlhdGUgYnVmZmVyLgotICAgICAgICBidWZmZXItPmFwcGVuZCh0aGlzKTsKLSAgICB9Ci0K
LSAgICAvLyBSZWN1ciBpbnRvIG91ciBjaGlsZHJlbiB0byBjb2xsZWN0IG1vcmUgbGF5ZXJzLCBi
dXQgb25seSBpZiB3ZSBkb24ndCBlc3RhYmxpc2gKLSAgICAvLyBhIHN0YWNraW5nIGNvbnRleHQv
Y29udGFpbmVyLgotICAgIGlmICgoaW5jbHVkZUhpZGRlbkxheWVycyB8fCBtX2hhc1Zpc2libGVE
ZXNjZW5kYW50KSAmJiAhaXNTdGFja2luZykgewotICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKLSAgICAgICAgICAgIC8vIElnbm9yZSByZWZsZWN0aW9ucy4KLSAgICAgICAgICAgIGlmICgh
bV9yZWZsZWN0aW9uIHx8IHJlZmxlY3Rpb25MYXllcigpICE9IGNoaWxkKQotICAgICAgICAgICAg
ICAgIGNoaWxkLT5jb2xsZWN0TGF5ZXJzKGluY2x1ZGVIaWRkZW5MYXllcnMsIHBvc0J1ZmZlciwg
bmVnQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCkKLXsKLSAgICB1cGRhdGVaT3JkZXJMaXN0cygpOwotICAg
IHVwZGF0ZU5vcm1hbEZsb3dMaXN0KCk7Ci0KLSAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlZmxlY3Rp
b25MYXllciA9IHRoaXMtPnJlZmxlY3Rpb25MYXllcigpKSB7Ci0gICAgICAgIHJlZmxlY3Rpb25M
YXllci0+dXBkYXRlWk9yZGVyTGlzdHMoKTsKLSAgICAgICAgcmVmbGVjdGlvbkxheWVyLT51cGRh
dGVOb3JtYWxGbG93TGlzdCgpOwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
Q29tcG9zaXRpbmdBbmRMYXllckxpc3RzSWZOZWVkZWQoKQogewogICAgIGlmIChjb21wb3NpdG9y
KCkuaW5Db21wb3NpdGluZ01vZGUoKSkgewpAQCAtNTk5Nyw0MSArNjA2MCw2IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnJlcGFpbnRJbmNsdWRpbmdOb25Db21wb3NpdGluZ0Rlc2NlbmRhbnRzKFJlbmRl
ckxheWVyTW9kZWxPYmplCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBjcmVhdGVzU3RhY2tpbmdD
b250ZXh0KGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKLXsKLSAgICBhdXRvJiByZW5kZXJlciA9
IGxheWVyLnJlbmRlcmVyKCk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyLmhhc1RyYW5zZm9ybVJlbGF0
ZWRQcm9wZXJ0eSgpCi0gICAgICAgIHx8IHJlbmRlcmVyLmhhc0NsaXBQYXRoKCkKLSAgICAgICAg
fHwgcmVuZGVyZXIuaGFzRmlsdGVyKCkKLSAgICAgICAgfHwgcmVuZGVyZXIuaGFzTWFzaygpCi0g
ICAgICAgIHx8IHJlbmRlcmVyLmhhc0JhY2tkcm9wRmlsdGVyKCkKLSNpZiBFTkFCTEUoQ1NTX0NP
TVBPU0lUSU5HKQotICAgICAgICB8fCByZW5kZXJlci5oYXNCbGVuZE1vZGUoKQotI2VuZGlmCi0g
ICAgICAgIHx8IHJlbmRlcmVyLmlzVHJhbnNwYXJlbnQoKQotICAgICAgICB8fCByZW5kZXJlci5p
c1Bvc2l0aW9uZWQoKQotICAgICAgICB8fCByZW5kZXJlci5oYXNSZWZsZWN0aW9uKCkKLSAgICAg
ICAgfHwgcmVuZGVyZXIuc3R5bGUoKS5oYXNJc29sYXRpb24oKQotI2lmIFBMQVRGT1JNKElPUykK
LSAgICAgICAgfHwgbGF5ZXIuY2FuVXNlQWNjZWxlcmF0ZWRUb3VjaFNjcm9sbGluZygpCi0jZW5k
aWYKLSAgICAgICAgfHwgKHJlbmRlcmVyLnN0eWxlKCkud2lsbENoYW5nZSgpICYmIHJlbmRlcmVy
LnN0eWxlKCkud2lsbENoYW5nZSgpLT5jYW5DcmVhdGVTdGFja2luZ0NvbnRleHQoKSk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25zdAotewotICAg
IGlmIChjcmVhdGVzU3RhY2tpbmdDb250ZXh0KCp0aGlzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkKLSAgICAgICAgfHwg
cmVuZGVyZXIoKS5pc0NhbnZhcygpCi0gICAgICAgIHx8IHJlbmRlcmVyKCkuaXNWaWRlbygpCi0g
ICAgICAgIHx8IHJlbmRlcmVyKCkuaXNFbWJlZGRlZE9iamVjdCgpCi0gICAgICAgIHx8IHJlbmRl
cmVyKCkuaXNSZW5kZXJJRnJhbWUoKQotICAgICAgICB8fCAocmVuZGVyZXIoKS5zdHlsZSgpLnNw
ZWNpZmllc0NvbHVtbnMoKSAmJiAhaXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgfHwgcmVu
ZGVyZXIoKS5pc0luRmxvd1JlbmRlckZyYWdtZW50ZWRGbG93KCk7Ci19Ci0KIGJvb2wgUmVuZGVy
TGF5ZXI6OnNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogewogICAgIGlmICghaXNO
b3JtYWxGbG93T25seSgpKQpAQCAtNjE4NCw0NyArNjIxMiw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0
CiAgICAgUGFpbnRlZENvbnRlbnRSZXF1ZXN0IGxvY2FsUmVxdWVzdDsKICAgICBpZiAoIXJlcXVl
c3QpCiAgICAgICAgIHJlcXVlc3QgPSAmbG9jYWxSZXF1ZXN0OwotICAgIHJldHVybiBoYXNOb25F
bXB0eUNoaWxkUmVuZGVyZXJzKCpyZXF1ZXN0KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlU3RhY2tpbmdDb250ZXh0c0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKQotewotICAgIGlmICghb2xkU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJv
b2wgd2FzU3RhY2tpbmdDb250ZXh0ID0gaXNTdGFja2luZ0NvbnRleHQob2xkU3R5bGUpOwotICAg
IGJvb2wgaXNTdGFja2luZ0NvbnRleHQgPSB0aGlzLT5pc1N0YWNraW5nQ29udGV4dCgpOwotICAg
IGlmIChpc1N0YWNraW5nQ29udGV4dCAhPSB3YXNTdGFja2luZ0NvbnRleHQpIHsKLSAgICAgICAg
ZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOwotICAgICAgICBpZiAoaXNTdGFja2lu
Z0NvbnRleHQpCi0gICAgICAgICAgICBkaXJ0eVpPcmRlckxpc3RzKCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGNsZWFyWk9yZGVyTGlzdHMoKTsKLQotI2lmIEVOQUJMRShDU1NfQ09NUE9T
SVRJTkcpCi0gICAgICAgIGlmIChwYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKGlzU3RhY2tp
bmdDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNOb3RJc29sYXRlZEJsZW5kaW5n
RGVzY2VuZGFudHNTdGF0dXNEaXJ0eSgpICYmIGhhc05vdElzb2xhdGVkQmxlbmRpbmdEZXNjZW5k
YW50cygpKQotICAgICAgICAgICAgICAgICAgICBwYXJlbnQoKS0+ZGlydHlBbmNlc3RvckNoYWlu
SGFzQmxlbmRpbmdEZXNjZW5kYW50cygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoaGFzTm90SXNvbGF0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzU3RhdHVzRGlydHko
KSkKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50KCktPmRpcnR5QW5jZXN0b3JDaGFpbkhhc0Js
ZW5kaW5nRGVzY2VuZGFudHMoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNOb3RJc29s
YXRlZEJsZW5kaW5nRGVzY2VuZGFudHMoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50KCkt
PnVwZGF0ZUFuY2VzdG9yQ2hhaW5IYXNCbGVuZGluZ0Rlc2NlbmRhbnRzKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICAv
LyBGSVhNRTogUmVuZGVyTGF5ZXIgYWxyZWFkeSBoYW5kbGVzIHZpc2liaWxpdHkgY2hhbmdlcyB0
aHJvdWdoIG91ciB2aXNpYmxpdHkgZGlydHkgYml0cy4gVGhpcyBsb2dpYyBjb3VsZAotICAgIC8v
IGxpa2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVzdC4KLSAgICBpZiAob2xkU3R5bGUt
PnpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS56SW5kZXgoKSB8fCBvbGRTdHlsZS0+dmlz
aWJpbGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkpIHsKLSAgICAgICAg
ZGlydHlTdGFja2luZ0NvbnRleHRaT3JkZXJMaXN0cygpOwotICAgICAgICBpZiAoaXNTdGFja2lu
Z0NvbnRleHQpCi0gICAgICAgICAgICBkaXJ0eVpPcmRlckxpc3RzKCk7Ci0gICAgfQorICAgIHJl
dHVybiBoYXNOb25FbXB0eUNoaWxkUmVuZGVyZXJzKCpyZXF1ZXN0KTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQpAQCAtNjI2MSwyNiArNjI1MCw0MiBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewotICAgIGJvb2wgaXNOb3JtYWxGbG93
T25seSA9IHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKTsKLSAgICBpZiAoaXNOb3JtYWxGbG93T25s
eSAhPSBtX2lzTm9ybWFsRmxvd09ubHkpIHsKLSAgICAgICAgbV9pc05vcm1hbEZsb3dPbmx5ID0g
aXNOb3JtYWxGbG93T25seTsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIHAgPSBwYXJlbnQoKTsKLSAg
ICAgICAgaWYgKHApCi0gICAgICAgICAgICBwLT5kaXJ0eU5vcm1hbEZsb3dMaXN0KCk7Ci0gICAg
ICAgIGRpcnR5U3RhY2tpbmdDb250ZXh0Wk9yZGVyTGlzdHMoKTsKKyAgICBzZXRJc05vcm1hbEZs
b3dPbmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CisKKyAgICBpZiAoc2V0SXNTdGFja2lu
Z0NvbnRleHQoc2hvdWxkQmVTdGFja2luZ0NvbnRleHQoKSkpIHsKKyNpZiBFTkFCTEUoQ1NTX0NP
TVBPU0lUSU5HKQorICAgICAgICBpZiAocGFyZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChpc1N0
YWNraW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOb3RJc29sYXRlZEJs
ZW5kaW5nRGVzY2VuZGFudHNTdGF0dXNEaXJ0eSgpICYmIGhhc05vdElzb2xhdGVkQmxlbmRpbmdE
ZXNjZW5kYW50cygpKQorICAgICAgICAgICAgICAgICAgICBwYXJlbnQoKS0+ZGlydHlBbmNlc3Rv
ckNoYWluSGFzQmxlbmRpbmdEZXNjZW5kYW50cygpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaGFzTm90SXNvbGF0ZWRCbGVuZGluZ0Rlc2NlbmRhbnRzU3RhdHVz
RGlydHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50KCktPmRpcnR5QW5jZXN0b3JDaGFp
bkhhc0JsZW5kaW5nRGVzY2VuZGFudHMoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNO
b3RJc29sYXRlZEJsZW5kaW5nRGVzY2VuZGFudHMoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFy
ZW50KCktPnVwZGF0ZUFuY2VzdG9yQ2hhaW5IYXNCbGVuZGluZ0Rlc2NlbmRhbnRzKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIC8vIEZJWE1FOiBSZW5k
ZXJMYXllciBhbHJlYWR5IGhhbmRsZXMgdmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZp
c2libGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCisgICAgLy8gbGlrZWx5IGJlIGZv
bGRlZCBhbG9uZyB3aXRoIHRoZSByZXN0LgorICAgIGlmIChvbGRTdHlsZSkgeworICAgICAgICBp
ZiAob2xkU3R5bGUtPnpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS56SW5kZXgoKSB8fCBv
bGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkp
IHsKKyAgICAgICAgICAgIGRpcnR5U3RhY2tpbmdDb250ZXh0Wk9yZGVyTGlzdHMoKTsKKyAgICAg
ICAgICAgIGlmIChpc1N0YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAgICAgIGRpcnR5Wk9y
ZGVyTGlzdHMoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChyZW5kZXJlcigpLmlzSFRN
TE1hcnF1ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFy
cXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgewogICAgICAgICBpZiAo
IW1fbWFycXVlZSkKICAgICAgICAgICAgIG1fbWFycXVlZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVu
ZGVyTWFycXVlZT4odGhpcyk7CiAgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxl
KCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1fbWFycXVlZSkgeworICAgIH0gZWxzZSBpZiAobV9t
YXJxdWVlKQogICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOwotICAgIH0KIAogICAgIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKLSAgICB1cGRhdGVTdGFja2lu
Z0NvbnRleHRzQWZ0ZXJTdHlsZUNoYW5nZShvbGRTdHlsZSk7CiAgICAgLy8gT3ZlcmxheSBzY3Jv
bGxiYXJzIGNhbiBtYWtlIHRoaXMgbGF5ZXIgc2VsZi1wYWludGluZyBzbyB3ZSBuZWVkCiAgICAg
Ly8gdG8gcmVjb21wdXRlIHRoZSBiaXQgb25jZSBzY3JvbGxiYXJzIGhhdmUgYmVlbiB1cGRhdGVk
LgogICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCmluZGV4IGU2YTk0NGU4NDA2ZjY3OTI4MzljZDIwN2YzNGM1MzY5ZjJhNzA0
MjkuLmIzOTdhZmVkZDMxMWMyOGE0ZTMxN2MwMTUzNGMwODFkN2FlMThkMmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0xNDIsOCArMTQyLDEwIEBAIHB1YmxpYzoK
ICNlbmRpZgogICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CiAKKyAgICBQYWdlJiBwYWdlKCkgY29u
c3QgeyByZXR1cm4gcmVuZGVyZXIoKS5wYWdlKCk7IH0KICAgICBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KICAgICBSZW5kZXJC
b3gqIHJlbmRlckJveCgpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkg
PyAmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSA6IG51bGxwdHI7IH0KKwogICAgIFJl
bmRlckxheWVyKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQogICAgIFJlbmRl
ckxheWVyKiBwcmV2aW91c1NpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByZXZpb3VzOyB9CiAg
ICAgUmVuZGVyTGF5ZXIqIG5leHRTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9CkBA
IC0xNTEsMTMgKzE1Myw5MyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTGF5ZXIqIGxhc3RDaGlsZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdDsgfQogICAgIGJvb2wgaXNEZXNjZW5kYW50T2YoY29uc3Qg
UmVuZGVyTGF5ZXImKSBjb25zdDsKIAorICAgIC8vIFRoaXMgZG9lcyBhbiBhbmNlc3RvciB0cmVl
IHdhbGsuIEF2b2lkIGl0IQorICAgIGNvbnN0IFJlbmRlckxheWVyKiByb290KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGNvbnN0IFJlbmRlckxheWVyKiBjdXJyID0gdGhpczsKKyAgICAgICAgd2hp
bGUgKGN1cnItPnBhcmVudCgpKQorICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwor
ICAgICAgICByZXR1cm4gY3VycjsKKyAgICB9CisKICAgICB2b2lkIGFkZENoaWxkKFJlbmRlckxh
eWVyKiBuZXdDaGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7CiAgICAg
UmVuZGVyTGF5ZXIqIHJlbW92ZUNoaWxkKFJlbmRlckxheWVyKik7CiAKLSAgICBQYWdlJiBwYWdl
KCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5wYWdlKCk7IH0KLQotICAgIHZvaWQgcmVtb3Zl
T25seVRoaXNMYXllcigpOwogICAgIHZvaWQgaW5zZXJ0T25seVRoaXNMYXllcigpOworICAgIHZv
aWQgcmVtb3ZlT25seVRoaXNMYXllcigpOworCisgICAgYm9vbCBpc05vcm1hbEZsb3dPbmx5KCkg
Y29uc3QgeyByZXR1cm4gbV9pc05vcm1hbEZsb3dPbmx5OyB9CisgICAgYm9vbCBpc1N0YWNraW5n
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGFja2luZ0NvbnRleHQ7IH0KKworICAgIC8v
IEdldHMgdGhlIGVuY2xvc2luZyBzdGFja2luZyBjb250ZXh0IGZvciB0aGlzIGxheWVyLCBleGNs
dWRpbmcgdGhpcyBsYXllciBpdHNlbGYuCisgICAgUmVuZGVyTGF5ZXIqIHN0YWNraW5nQ29udGV4
dCgpIGNvbnN0OworCisgICAgLy8gR2V0cyB0aGUgZW5jbG9zaW5nIHN0YWNraW5nIGNvbnRhaW5l
ciBmb3IgdGhpcyBsYXllciwgcG9zc2libHkgdGhlIGxheWVyCisgICAgLy8gaXRzZWxmLCBpZiBp
dCBpcyBhIHN0YWNraW5nIGNvbnRhaW5lci4KKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nU3Rh
Y2tpbmdDb250ZXh0KCkgeyByZXR1cm4gaXNTdGFja2luZ0NvbnRleHQoKSA/IHRoaXMgOiBzdGFj
a2luZ0NvbnRleHQoKTsgfQorCisgICAgdm9pZCBkaXJ0eU5vcm1hbEZsb3dMaXN0KCk7CisgICAg
dm9pZCBkaXJ0eVpPcmRlckxpc3RzKCk7CisgICAgdm9pZCBkaXJ0eVN0YWNraW5nQ29udGV4dFpP
cmRlckxpc3RzKCk7CisKKyAgICBjbGFzcyBMYXllckxpc3QgeworICAgICAgICBmcmllbmQgY2xh
c3MgUmVuZGVyTGF5ZXI7CisgICAgcHVibGljOgorICAgICAgICB1c2luZyBpdGVyYXRvciA9IFJl
bmRlckxheWVyKio7CisgICAgICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gUmVuZGVyTGF5ZXIg
KiBjb25zdCAqOworICAgICAgICB1c2luZyByZXZlcnNlX2l0ZXJhdG9yID0gc3RkOjpyZXZlcnNl
X2l0ZXJhdG9yPGl0ZXJhdG9yPjsKKyAgICAgICAgdXNpbmcgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
ciA9IHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj47CisKKyAgICAgICAgaXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2xheWVyTGlzdCA/IG1fbGF5ZXJMaXN0LT5iZWdpbigp
IDogbnVsbHB0cjsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2xheWVyTGlz
dCA/IG1fbGF5ZXJMaXN0LT5lbmQoKSA6IG51bGxwdHI7IH0KKworICAgICAgICByZXZlcnNlX2l0
ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CisgICAg
ICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVn
aW4oKSk7IH0KKworICAgICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5ZXJMaXN0ID8gbV9sYXllckxpc3QtPmJlZ2luKCkgOiBudWxscHRyOyB9CisgICAgICAg
IGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJMaXN0ID8gbV9sYXll
ckxpc3QtPmVuZCgpIDogbnVsbHB0cjsgfQorCisgICAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7
IH0KKyAgICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQorCisgICAgICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9sYXllckxpc3QgPyBtX2xheWVyTGlzdC0+c2l6ZSgpIDogMDsg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgTGF5ZXJMaXN0KFZlY3RvcjxSZW5kZXJMYXllcio+
KiBsYXllckxpc3QpCisgICAgICAgICAgICA6IG1fbGF5ZXJMaXN0KGxheWVyTGlzdCkKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiog
bV9sYXllckxpc3Q7CisgICAgfTsKKworICAgIExheWVyTGlzdCBub3JtYWxGbG93TGF5ZXJzKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9ub3JtYWxGbG93TGlzdERpcnR5KTsKKyAg
ICAgICAgcmV0dXJuIExheWVyTGlzdChtX25vcm1hbEZsb3dMaXN0LmdldCgpKTsKKyAgICB9CisK
KyAgICBMYXllckxpc3QgcG9zaXRpdmVaT3JkZXJMYXllcnMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtX3pPcmRlckxpc3RzRGlydHkpOworICAgICAgICBBU1NFUlQoaXNTdGFja2lu
Z0NvbnRleHQoKSB8fCAhbV9wb3NaT3JkZXJMaXN0KTsKKyAgICAgICAgcmV0dXJuIExheWVyTGlz
dChtX3Bvc1pPcmRlckxpc3QuZ2V0KCkpOworICAgIH0KKworICAgIGJvb2wgaGFzTmVnYXRpdmVa
T3JkZXJMYXllcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbmVnWk9yZGVyTGlz
dCAmJiBtX25lZ1pPcmRlckxpc3QtPnNpemUoKTsKKyAgICB9CisKKyAgICBMYXllckxpc3QgbmVn
YXRpdmVaT3JkZXJMYXllcnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3pPcmRl
ckxpc3RzRGlydHkpOworICAgICAgICBBU1NFUlQoaXNTdGFja2luZ0NvbnRleHQoKSB8fCAhbV9u
ZWdaT3JkZXJMaXN0KTsKKyAgICAgICAgcmV0dXJuIExheWVyTGlzdChtX25lZ1pPcmRlckxpc3Qu
Z2V0KCkpOworICAgIH0KKworICAgIC8vIFVwZGF0ZSBvdXIgbm9ybWFsIGFuZCB6LWluZGV4IGxp
c3RzLgorICAgIHZvaWQgdXBkYXRlTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CiAKICAgICB2b2lkIHJl
cGFpbnRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogCkBAIC0xNzMsNyArMjU1LDYgQEAgcHVibGlj
OgogCiAgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVl
ZS5nZXQoKTsgfQogCi0gICAgYm9vbCBpc05vcm1hbEZsb3dPbmx5KCkgY29uc3QgeyByZXR1cm4g
bV9pc05vcm1hbEZsb3dPbmx5OyB9CiAgICAgYm9vbCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJs
aXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtMTg1LDE0ICsyNjYsNiBAQCBwdWJsaWM6CiAgICAgUmVu
ZGVyUmVwbGljYSogcmVmbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVmbGVjdGlvbi5nZXQo
KTsgfQogICAgIFJlbmRlckxheWVyKiByZWZsZWN0aW9uTGF5ZXIoKSBjb25zdDsKIAotICAgIGNv
bnN0IFJlbmRlckxheWVyKiByb290KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGNvbnN0IFJlbmRl
ckxheWVyKiBjdXJyID0gdGhpczsKLSAgICAgICAgd2hpbGUgKGN1cnItPnBhcmVudCgpKQotICAg
ICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudCgpOwotICAgICAgICByZXR1cm4gY3VycjsKLSAg
ICB9Ci0gICAgCiAgICAgY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV90b3BMZWZ0OyB9CiAgICAgdm9pZCBzZXRMb2NhdGlvbihjb25zdCBMYXlvdXRQb2ludCYg
cCkgeyBtX3RvcExlZnQgPSBwOyB9CiAKQEAgLTI5NCw2ICszNjcsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNpemVNb2RlID0gYjsgfQogCiAg
ICAgYm9vbCBpc1JlbmRlclZpZXdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNSZW5kZXJWaWV3
TGF5ZXI7IH0KKyAgICBib29sIGlzRm9yY2VkU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9mb3JjZWRTdGFja2luZ0NvbnRleHQ7IH0KIAogICAgIFJlbmRlckxheWVyQ29tcG9zaXRv
ciYgY29tcG9zaXRvcigpIGNvbnN0OwogICAgIApAQCAtMzA0LDEzICszNzgsMTMgQEAgcHVibGlj
OgogICAgIGJvb2wgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkgY29uc3Q7CiAKICAgICBlbnVtIFVw
ZGF0ZUxheWVyUG9zaXRpb25zRmxhZyB7Ci0gICAgICAgIENoZWNrRm9yUmVwYWludCA9IDEgPDwg
MCwKLSAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2luZyA9IDEgPDwgMSwKLSAgICAgICAg
SXNDb21wb3NpdGluZ1VwZGF0ZVJvb3QgPSAxIDw8IDIsCi0gICAgICAgIFVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzID0gMSA8PCAzLAotICAgICAgICBVcGRhdGVQYWdpbmF0aW9uID0gMSA8PCA0LAot
ICAgICAgICBTZWVuVHJhbnNmb3JtZWRMYXllciA9IDEgPDwgNSwKLSAgICAgICAgU2VlbjNEVHJh
bnNmb3JtZWRMYXllciA9IDEgPDwgNgorICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAgICAg
ICAgICAgID0gMSA8PCAwLAorICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAg
ID0gMSA8PCAxLAorICAgICAgICBJc0NvbXBvc2l0aW5nVXBkYXRlUm9vdCAgICAgICAgID0gMSA8
PCAyLAorICAgICAgICBVcGRhdGVDb21wb3NpdGluZ0xheWVycyAgICAgICAgID0gMSA8PCAzLAor
ICAgICAgICBVcGRhdGVQYWdpbmF0aW9uICAgICAgICAgICAgICAgID0gMSA8PCA0LAorICAgICAg
ICBTZWVuVHJhbnNmb3JtZWRMYXllciAgICAgICAgICAgID0gMSA8PCA1LAorICAgICAgICBTZWVu
M0RUcmFuc2Zvcm1lZExheWVyICAgICAgICAgID0gMSA8PCA2LAogICAgIH07CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiB1cGRhdGVMYXll
clBvc2l0aW9uc0RlZmF1bHRGbGFncygpIHsgcmV0dXJuIHsgQ2hlY2tGb3JSZXBhaW50LCBJc0Nv
bXBvc2l0aW5nVXBkYXRlUm9vdCwgVXBkYXRlQ29tcG9zaXRpbmdMYXllcnMgfTsgfQogCkBAIC0z
NDMsODAgKzQxNyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzKCk7CiAgICAgdm9pZCByZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CiAKLSAgICAv
LyBBIHN0YWNraW5nIGNvbnRleHQgaXMgYSBsYXllciB0aGF0IGhhcyBhIG5vbi1hdXRvIHotaW5k
ZXguCi0gICAgYm9vbCBpc1N0YWNraW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGlzU3RhY2tp
bmdDb250ZXh0KCZyZW5kZXJlcigpLnN0eWxlKCkpOyB9Ci0KLSAgICAvLyBHZXRzIHRoZSBlbmNs
b3Npbmcgc3RhY2tpbmcgY29udGV4dCBmb3IgdGhpcyBsYXllciwgZXhjbHVkaW5nIHRoaXMgbGF5
ZXIgaXRzZWxmLgotICAgIFJlbmRlckxheWVyKiBzdGFja2luZ0NvbnRleHQoKSBjb25zdDsKLQot
ICAgIC8vIEdldHMgdGhlIGVuY2xvc2luZyBzdGFja2luZyBjb250YWluZXIgZm9yIHRoaXMgbGF5
ZXIsIHBvc3NpYmx5IHRoZSBsYXllcgotICAgIC8vIGl0c2VsZiwgaWYgaXQgaXMgYSBzdGFja2lu
ZyBjb250YWluZXIuCi0gICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1N0YWNraW5nQ29udGV4dCgp
IHsgcmV0dXJuIGlzU3RhY2tpbmdDb250ZXh0KCkgPyB0aGlzIDogc3RhY2tpbmdDb250ZXh0KCk7
IH0KLQotICAgIHZvaWQgZGlydHlOb3JtYWxGbG93TGlzdCgpOwotCi0gICAgdm9pZCBkaXJ0eVpP
cmRlckxpc3RzKCk7Ci0gICAgdm9pZCBkaXJ0eVN0YWNraW5nQ29udGV4dFpPcmRlckxpc3RzKCk7
Ci0gICAgCi0gICAgY2xhc3MgTGF5ZXJMaXN0IHsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFJlbmRl
ckxheWVyOwotICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgaXRlcmF0b3IgPSBSZW5kZXJMYXll
cioqOwotICAgICAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IFJlbmRlckxheWVyICogY29uc3Qg
KjsKLSAgICAgICAgdXNpbmcgcmV2ZXJzZV9pdGVyYXRvciA9IHN0ZDo6cmV2ZXJzZV9pdGVyYXRv
cjxpdGVyYXRvcj47Ci0gICAgICAgIHVzaW5nIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgPSBzdGQ6
OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+OwotCi0gICAgICAgIGl0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gbV9sYXllckxpc3QgPyBtX2xheWVyTGlzdC0+YmVnaW4oKSA6IG51bGxw
dHI7IH0KLSAgICAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9sYXllckxpc3QgPyBtX2xh
eWVyTGlzdC0+ZW5kKCkgOiBudWxscHRyOyB9Ci0KLSAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBy
YmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQotICAgICAgICByZXZl
cnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9
Ci0KLSAgICAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2xheWVy
TGlzdCA/IG1fbGF5ZXJMaXN0LT5iZWdpbigpIDogbnVsbHB0cjsgfQotICAgICAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyTGlzdCA/IG1fbGF5ZXJMaXN0LT5l
bmQoKSA6IG51bGxwdHI7IH0KLQotICAgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9Ci0gICAg
ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KLQotICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXJMaXN0ID8gbV9sYXllckxpc3QtPnNpemUoKSA6IDA7IH0KLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIExheWVyTGlzdChWZWN0b3I8UmVuZGVyTGF5ZXIqPiogbGF5ZXJM
aXN0KQotICAgICAgICAgICAgOiBtX2xheWVyTGlzdChsYXllckxpc3QpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFJlbmRlckxheWVyKj4qIG1fbGF5ZXJM
aXN0OwotICAgIH07Ci0KLSAgICBMYXllckxpc3Qgbm9ybWFsRmxvd0xheWVycygpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoIW1fbm9ybWFsRmxvd0xpc3REaXJ0eSk7Ci0gICAgICAgIHJl
dHVybiBMYXllckxpc3QobV9ub3JtYWxGbG93TGlzdC5nZXQoKSk7Ci0gICAgfQotCi0gICAgTGF5
ZXJMaXN0IHBvc2l0aXZlWk9yZGVyTGF5ZXJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCghbV96T3JkZXJMaXN0c0RpcnR5KTsKLSAgICAgICAgQVNTRVJUKGlzU3RhY2tpbmdDb250ZXh0
KCkgfHwgIW1fcG9zWk9yZGVyTGlzdCk7Ci0gICAgICAgIHJldHVybiBMYXllckxpc3QobV9wb3Na
T3JkZXJMaXN0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBib29sIGhhc05lZ2F0aXZlWk9yZGVyTGF5
ZXJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX25lZ1pPcmRlckxpc3QgJiYgbV9u
ZWdaT3JkZXJMaXN0LT5zaXplKCk7Ci0gICAgfQotCi0gICAgTGF5ZXJMaXN0IG5lZ2F0aXZlWk9y
ZGVyTGF5ZXJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV96T3JkZXJMaXN0c0Rp
cnR5KTsKLSAgICAgICAgQVNTRVJUKGlzU3RhY2tpbmdDb250ZXh0KCkgfHwgIW1fbmVnWk9yZGVy
TGlzdCk7Ci0gICAgICAgIHJldHVybiBMYXllckxpc3QobV9uZWdaT3JkZXJMaXN0LmdldCgpKTsK
LSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgb3VyIG5vcm1hbCBhbmQgei1pbmRleCBsaXN0cy4KLSAg
ICB2b2lkIHVwZGF0ZUxheWVyTGlzdHNJZk5lZWRlZCgpOwotCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0
byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTI3NwogICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50OyB9CkBAIC03MzgsNiArNzM4LDMwIEBAIHB1
YmxpYzoKICAgICBib29sIHBhaW50aW5nRnJlcXVlbnRseSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFp
bnRGcmVxdWVuY3lUcmFja2VyLnBhaW50aW5nRnJlcXVlbnRseSgpOyB9CiAKIHByaXZhdGU6CisK
KyAgICB2b2lkIHNldE5leHRTaWJsaW5nKFJlbmRlckxheWVyKiBuZXh0KSB7IG1fbmV4dCA9IG5l
eHQ7IH0KKyAgICB2b2lkIHNldFByZXZpb3VzU2libGluZyhSZW5kZXJMYXllciogcHJldikgeyBt
X3ByZXZpb3VzID0gcHJldjsgfQorICAgIHZvaWQgc2V0UGFyZW50KFJlbmRlckxheWVyKik7Cisg
ICAgdm9pZCBzZXRGaXJzdENoaWxkKFJlbmRlckxheWVyKiBmaXJzdCkgeyBtX2ZpcnN0ID0gZmly
c3Q7IH0KKyAgICB2b2lkIHNldExhc3RDaGlsZChSZW5kZXJMYXllciogbGFzdCkgeyBtX2xhc3Qg
PSBsYXN0OyB9CisKKyAgICBib29sIHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25zdDsKKyAg
ICBib29sIHNob3VsZEJlU3RhY2tpbmdDb250ZXh0KCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0
dXJuIHRydWUgaWYgY2hhbmdlZC4KKyAgICBib29sIHNldElzTm9ybWFsRmxvd09ubHkoYm9vbCk7
CisgICAgYm9vbCBzZXRJc1N0YWNraW5nQ29udGV4dChib29sKTsKKworICAgIGJvb2wgaXNEaXJ0
eVN0YWNraW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fek9yZGVyTGlzdHNEaXJ0eSAmJiBp
c1N0YWNraW5nQ29udGV4dCgpOyB9CisKKyAgICB2b2lkIHVwZGF0ZVpPcmRlckxpc3RzKCk7Cisg
ICAgdm9pZCByZWJ1aWxkWk9yZGVyTGlzdHMoKTsKKyAgICB2b2lkIHJlYnVpbGRaT3JkZXJMaXN0
cyhzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlbmRlckxheWVyKj4+Jiwgc3RkOjp1bmlxdWVfcHRy
PFZlY3RvcjxSZW5kZXJMYXllcio+PiYpOworICAgIHZvaWQgY29sbGVjdExheWVycyhib29sIGlu
Y2x1ZGVIaWRkZW5MYXllcnMsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVuZGVyTGF5ZXIqPj4m
LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlbmRlckxheWVyKj4+Jik7CisgICAgdm9pZCBjbGVh
clpPcmRlckxpc3RzKCk7CisKKyAgICB2b2lkIHVwZGF0ZU5vcm1hbEZsb3dMaXN0KCk7CisKICAg
ICBzdHJ1Y3QgTGF5ZXJQYWludGluZ0luZm8gewogICAgICAgICBMYXllclBhaW50aW5nSW5mbyhS
ZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIGluRGlydHlSZWN0LCBP
cHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gaW5QYWludEJlaGF2aW9yLCBjb25zdCBMYXlvdXRTaXpl
JiBpblN1YnBpeGVsT2Zmc2V0LCBSZW5kZXJPYmplY3QqIGluU3VidHJlZVBhaW50Um9vdCA9IG51
bGxwdHIsIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCogaW5PdmVybGFwVGVzdFJlcXVlc3RzID0gbnVs
bHB0ciwgYm9vbCBpblJlcXVpcmVTZWN1cml0eU9yaWdpbkFjY2Vzc0ZvcldpZGdldHMgPSBmYWxz
ZSkKICAgICAgICAgICAgIDogcm9vdExheWVyKGluUm9vdExheWVyKQpAQCAtNzY2LDE5ICs3OTAs
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FsY3VsYXRlQ2xpcFJlY3RzKGNvbnN0IENsaXBSZWN0
c0NvbnRleHQmLCBDbGlwUmVjdHMmKSBjb25zdDsKICAgICBDbGlwUmVjdHMqIGNsaXBSZWN0cyhj
b25zdCBDbGlwUmVjdHNDb250ZXh0JikgY29uc3Q7CiAKLSAgICB2b2lkIHVwZGF0ZVpPcmRlckxp
c3RzKCk7Ci0gICAgdm9pZCByZWJ1aWxkWk9yZGVyTGlzdHMoKTsKLSAgICB2b2lkIHJlYnVpbGRa
T3JkZXJMaXN0cyhzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlbmRlckxheWVyKj4+Jiwgc3RkOjp1
bmlxdWVfcHRyPFZlY3RvcjxSZW5kZXJMYXllcio+PiYpOwotICAgIHZvaWQgY29sbGVjdExheWVy
cyhib29sIGluY2x1ZGVIaWRkZW5MYXllcnMsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVuZGVy
TGF5ZXIqPj4mLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlbmRlckxheWVyKj4+Jik7Ci0gICAg
dm9pZCBjbGVhclpPcmRlckxpc3RzKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZU5vcm1hbEZsb3dMaXN0
KCk7Ci0KLSAgICAvLyBOb24tYXV0byB6LWluZGV4IGFsd2F5cyBpbXBsaWVzIHN0YWNraW5nIGNv
bnRleHQgaGVyZSwgYmVjYXVzZSBTdHlsZVJlc29sdmVyOjphZGp1c3RSZW5kZXJTdHlsZSBhbHJl
YWR5IGFkanVzdHMgei1pbmRleAotICAgIC8vIGJhc2VkIG9uIHBvc2l0aW9uaW5nIGFuZCBvdGhl
ciBjcml0ZXJpYS4KLSAgICBib29sIGlzU3RhY2tpbmdDb250ZXh0KGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QgeyByZXR1cm4gIXN0eWxlLT5oYXNBdXRvWkluZGV4KCkgfHwgaXNSZW5k
ZXJWaWV3TGF5ZXIoKSB8fCBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dDsgfQotCi0gICAgYm9vbCBp
c0RpcnR5U3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV96T3JkZXJMaXN0c0RpcnR5
ICYmIGlzU3RhY2tpbmdDb250ZXh0KCk7IH0KIAogICAgIHZvaWQgc2V0QW5jZXN0b3JDaGFpbkhh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpOwogICAgIHZvaWQgZGlydHlBbmNlc3RvckNo
YWluSGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50U3RhdHVzKCk7CkBAIC03OTUsNyArODA2
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZFJlcGFpbnRBZnRlckxheW91dCgpIGNvbnN0
OwogCiAgICAgdm9pZCB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwotICAgIHZvaWQgdXBkYXRl
U3RhY2tpbmdDb250ZXh0c0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKTsKIAogICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxh
eW91dCgpOwpAQCAtODA2LDEwICs4MTYsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUxh
eWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiA9IG51bGxwdHIsIE9wdGlvblNldDxVcGRh
dGVMYXllclBvc2l0aW9uc0ZsYWc+ID0gdXBkYXRlTGF5ZXJQb3NpdGlvbnNEZWZhdWx0RmxhZ3Mo
KSk7CiAKICAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnIHsKLSAg
ICAgICAgSXNPdmVyZmxvd1Njcm9sbCA9IDEgPDwgMCwKLSAgICAgICAgSGFzU2VlblZpZXdwb3J0
Q29uc3RyYWluZWRBbmNlc3RvciA9IDEgPDwgMSwKLSAgICAgICAgSGFzU2VlbkFuY2VzdG9yV2l0
aE92ZXJmbG93Q2xpcCA9IDEgPDwgMiwKLSAgICAgICAgSGFzQ2hhbmdlZEFuY2VzdG9yID0gMSA8
PCAzCisgICAgICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9IDEg
PDwgMCwKKyAgICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0g
MSA8PCAxLAorICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAg
PSAxIDw8IDIsCisgICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgMywKICAgICB9OwogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwogCkBAIC04MTcsMTIgKzgyNyw2IEBAIHByaXZhdGU6CiAK
ICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVySW5TdWJ0cmVlKGNvbnN0
IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlKSBjb25zdDsK
IAotICAgIHZvaWQgc2V0TmV4dFNpYmxpbmcoUmVuZGVyTGF5ZXIqIG5leHQpIHsgbV9uZXh0ID0g
bmV4dDsgfQotICAgIHZvaWQgc2V0UHJldmlvdXNTaWJsaW5nKFJlbmRlckxheWVyKiBwcmV2KSB7
IG1fcHJldmlvdXMgPSBwcmV2OyB9Ci0gICAgdm9pZCBzZXRQYXJlbnQoUmVuZGVyTGF5ZXIqIHBh
cmVudCk7Ci0gICAgdm9pZCBzZXRGaXJzdENoaWxkKFJlbmRlckxheWVyKiBmaXJzdCkgeyBtX2Zp
cnN0ID0gZmlyc3Q7IH0KLSAgICB2b2lkIHNldExhc3RDaGlsZChSZW5kZXJMYXllciogbGFzdCkg
eyBtX2xhc3QgPSBsYXN0OyB9Ci0KICAgICBMYXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2ludCgpOyB9CiAKICAgICB2
b2lkIHVwZGF0ZUNvbXBvc2l0aW5nQW5kTGF5ZXJMaXN0c0lmTmVlZGVkKCk7CkBAIC04OTMsNyAr
ODk3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29u
c3Q7CiAKLSAgICBib29sIHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25zdDsKICAgICBib29s
IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKIAogICAgIGludCBzY3JvbGxPZmZz
ZXQoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTAzMiwxNCArMTAz
NSwxNiBAQCBwcml2YXRlOgogICAgIGNvbnN0IGJvb2wgbV9pc1JlbmRlclZpZXdMYXllciA6IDE7
CiAgICAgY29uc3QgYm9vbCBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dCA6IDE7CiAKLSAgICAvLyBL
ZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXppbmcsIHNv
IGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCi0gICAgYm9vbCBt
X2luUmVzaXplTW9kZSA6IDE7CisgICAgYm9vbCBtX2lzTm9ybWFsRmxvd09ubHkgOiAxOworICAg
IGJvb2wgbV9pc1N0YWNraW5nQ29udGV4dCA6IDE7CiAKLSAgICBib29sIG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5IDogMTsKICAgICBib29sIG1fek9yZGVyTGlzdHNEaXJ0eSA6IDE7CiAgICAgYm9v
bCBtX25vcm1hbEZsb3dMaXN0RGlydHk6IDE7Ci0gICAgYm9vbCBtX2lzTm9ybWFsRmxvd09ubHkg
OiAxOwogCisgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVu
dGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBz
dG9wLgorICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOworCisgICAgYm9vbCBtX3Njcm9sbERp
bWVuc2lvbnNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwog
CiAgICAgLy8gSWYgaGF2ZSBubyBzZWxmLXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBo
YXZlIHRvIHdhbGsgb3VyIGNoaWxkcmVuIGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0
bwpAQCAtMTEwMiw2ICsxMTA3LDE2IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyTGF5ZXIqIG1fZmly
c3QgeyBudWxscHRyIH07CiAgICAgUmVuZGVyTGF5ZXIqIG1fbGFzdCB7IG51bGxwdHIgfTsKIAor
ICAgIC8vIEZvciBsYXllcnMgdGhhdCBlc3RhYmxpc2ggc3RhY2tpbmcgY29udGV4dHMsIG1fcG9z
Wk9yZGVyTGlzdCBob2xkcyBhIHNvcnRlZCBsaXN0IG9mIGFsbCB0aGUKKyAgICAvLyBkZXNjZW5k
YW50IGxheWVycyB3aXRoaW4gdGhlIHN0YWNraW5nIGNvbnRleHQgdGhhdCBoYXZlIHotaW5kaWNl
cyBvZiAwIG9yIGdyZWF0ZXIKKyAgICAvLyAoYXV0byB3aWxsIGNvdW50IGFzIDApLiBtX25lZ1pP
cmRlckxpc3QgaG9sZHMgZGVzY2VuZGFudHMgd2l0aGluIG91ciBzdGFja2luZyBjb250ZXh0IHdp
dGggbmVnYXRpdmUKKyAgICAvLyB6LWluZGljZXMuCisgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3Rv
cjxSZW5kZXJMYXllcio+PiBtX3Bvc1pPcmRlckxpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZl
Y3RvcjxSZW5kZXJMYXllcio+PiBtX25lZ1pPcmRlckxpc3Q7CisKKyAgICAvLyBUaGlzIGxpc3Qg
Y29udGFpbnMgY2hpbGQgbGF5ZXJzIHRoYXQgY2Fubm90IGNyZWF0ZSBzdGFja2luZyBjb250ZXh0
cyBhbmQgYXBwZWFyIGluIG5vcm1hbCBmbG93IG9yZGVyLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxW
ZWN0b3I8UmVuZGVyTGF5ZXIqPj4gbV9ub3JtYWxGbG93TGlzdDsKKwogICAgIC8vIE91ciBjdXJy
ZW50IHJlbGF0aXZlIHBvc2l0aW9uIG9mZnNldC4KICAgICBMYXlvdXRTaXplIG1fb2Zmc2V0Rm9y
SW5GbG93UG9zaXRpb247CiAKQEAgLTExMjEsMTcgKzExMzYsNiBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CiAK
LSAgICAvLyBGb3IgbGF5ZXJzIHRoYXQgZXN0YWJsaXNoIHN0YWNraW5nIGNvbnRleHRzLCBtX3Bv
c1pPcmRlckxpc3QgaG9sZHMgYSBzb3J0ZWQgbGlzdCBvZiBhbGwgdGhlCi0gICAgLy8gZGVzY2Vu
ZGFudCBsYXllcnMgd2l0aGluIHRoZSBzdGFja2luZyBjb250ZXh0IHRoYXQgaGF2ZSB6LWluZGlj
ZXMgb2YgMCBvciBncmVhdGVyCi0gICAgLy8gKGF1dG8gd2lsbCBjb3VudCBhcyAwKS4gIG1fbmVn
Wk9yZGVyTGlzdCBob2xkcyBkZXNjZW5kYW50cyB3aXRoaW4gb3VyIHN0YWNraW5nIGNvbnRleHQg
d2l0aCBuZWdhdGl2ZQotICAgIC8vIHotaW5kaWNlcy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPFJlbmRlckxheWVyKj4+IG1fcG9zWk9yZGVyTGlzdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
VmVjdG9yPFJlbmRlckxheWVyKj4+IG1fbmVnWk9yZGVyTGlzdDsKLQotICAgIC8vIFRoaXMgbGlz
dCBjb250YWlucyBjaGlsZCBsYXllcnMgdGhhdCBjYW5ub3QgY3JlYXRlIHN0YWNraW5nIGNvbnRl
eHRzLiAgRm9yIG5vdyBpdCBpcyBqdXN0Ci0gICAgLy8gb3ZlcmZsb3cgbGF5ZXJzLCBidXQgdGhh
dCBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxS
ZW5kZXJMYXllcio+PiBtX25vcm1hbEZsb3dMaXN0OwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPENs
aXBSZWN0c0NhY2hlPiBtX2NsaXBSZWN0c0NhY2hlOwogICAgIAogICAgIEludFBvaW50IG1fY2Fj
aGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>