<?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>217113</bug_id>
          
          <creation_ts>2020-09-29 17:53:20 -0700</creation_ts>
          <short_desc>[LFC][IFC] Merge LineBreaker::CandidateContent and ContinuousContent</short_desc>
          <delta_ts>2020-09-30 06:39:19 -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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</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>1693250</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-29 17:53:20 -0700</bug_when>
    <thetext>The candidate content is always continuous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693258</commentid>
    <comment_count>1</comment_count>
      <attachid>410078</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-29 18:08:14 -0700</bug_when>
    <thetext>Created attachment 410078
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693352</commentid>
    <comment_count>2</comment_count>
      <attachid>410078</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-09-30 06:16:23 -0700</bug_when>
    <thetext>Comment on attachment 410078
Patch

Nice simplification</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693358</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-30 06:38:27 -0700</bug_when>
    <thetext>Committed r267786: &lt;https://trac.webkit.org/changeset/267786&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410078.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693359</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-30 06:39:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/69789212&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410078</attachid>
            <date>2020-09-29 18:08:14 -0700</date>
            <delta_ts>2020-09-30 06:38:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217113-20200929180813.patch</filename>
            <type>text/plain</type>
            <size>36669</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzk3NTcxNDcxNGI3YzNm
OWRiOWFmMWYzOWM5ZDM0Zjg4YTZmNmM0Mi4uMzk5NjNmY2JkNmE2NzVhYmExZTU5ZWUwYmYwMzIz
Yjk0YTJkNjVkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIwLTA5LTI5ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNZXJnZSBM
aW5lQnJlYWtlcjo6Q2FuZGlkYXRlQ29udGVudCBhbmQgQ29udGludW91c0NvbnRlbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzExMworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggc2lt
cGxpZmllcyB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBMaW5lQnVpbGRlciBhbmQgdGhlIExp
bmVCcmVha2VyIGJ5IHVzaW5nIHRoZSBzYW1lIHN0cnVjdHVyZSB0byB0cmFjayBjYW5kaWRhdGUg
cnVucy4KKyAgICAgICAgTGluZUJyZWFrZXI6OkNhbmRpZGF0ZUNvbnRlbnQgaXMgYWxzbyBhIGNv
bnRpbnVvdXMgY29udGVudCAoaXQgaGFzIHRvIGJlKSBzbyB3ZSBjYW4ganVzdCB1c2UgdGhpcyBz
dHJ1Y3R1cmUgaW4gTGluZUNhbmRpZGF0ZTo6SW5saW5lQ29udGVudCAobV9jb250aW51b3VzQ29u
dGVudCkKKyAgICAgICAgYW5kIHBhc3MgaXQgaW4gdG8gdGhlIExpbmVCcmVha2VyIHdoZW4gd2Ug
aGl0IGEgd3JhcHBpbmcgb3Bwb3J0dW5pdHkuCisKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OmlzVGV4dENvbnRlbnRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6aXNWaXN1YWxs
eUVtcHR5V2hpdGVzcGFjZUNvbnRlbnRPbmx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
aXNOb25Db250ZW50UnVuc09ubHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpmaXJzdFRl
eHRSdW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Omxhc3RDb250ZW50UnVuSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpsYXN0V3JhcE9wcG9ydHVuaXR5SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6aXNDb250ZW50V3JhcHBp
bmdBbGxvd2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6
OnNob3VsZEtlZXBFbmRPZkxpbmVXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZUJyZWFrZXI6OnByb2Nlc3NJbmxpbmVDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OnByb2Nlc3NPdmVyZmxvd2luZ0NvbnRlbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnJlYWtlcjo6dHJ5QnJlYWtpbmdU
ZXh0UnVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkNv
bnRpbnVvdXNDb250ZW50OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
QnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6Q29udGludW91c0NvbnRlbnQ6OnJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpDb250aW51b3VzQ29udGVudDo6aXNFbXB0eSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbnRpbnVvdXNDb250ZW50Ojpsb2dpY2Fs
V2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW51
b3VzQ29udGVudDo6bG9naWNhbExlZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpDb250aW51b3VzQ29udGVudDo6aGFzVHJhaWxpbmdDb2xsYXBzaWJsZUNvbnRl
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW51b3Vz
Q29udGVudDo6aXNGdWxseUNvbGxhcHNpYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6Q29udGludW91c0NvbnRlbnQ6OkNvbnRpbnVvdXNDb250ZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Q29udGludW91c0NvbnRlbnQ6Om5vbkNv
bGxhcHNpYmxlTG9naWNhbFdpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6Q29udGludW91c0NvbnRlbnQ6Omhhc1RleHRDb250ZW50T25seSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkNvbnRpbnVvdXNDb250ZW50Ojppc1Zp
c3VhbGx5RW1wdHlXaGl0ZXNwYWNlQ29udGVudE9ubHkgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW51b3VzQ29udGVudDo6Zmlyc3RUZXh0UnVuSW5kZXgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpDb250aW51b3VzQ29u
dGVudDo6bGFzdENvbnRlbnRSdW5JbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkNvbnRpbnVvdXNDb250ZW50OjpoYXNOb25Db250ZW50UnVuc09ubHkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCcmVha2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpDb250
aW51b3VzQ29udGVudDo6bG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50Ojpsb2dpY2FsTGVmdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpDb250aW51b3VzQ29udGVu
dDo6Y29sbGFwc2libGVMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lQnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQ6Om5vbkNvbGxhcHNpYmxlTG9naWNh
bFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkNv
bnRpbnVvdXNDb250ZW50OjpoYXNUcmFpbGluZ0NvbGxhcHNpYmxlQ29udGVudCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpDb250aW51b3VzQ29udGVudDo6
aXNGdWxseUNvbGxhcHNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50OjpydW5zIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50OjpSdW46OlJ1bik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCcmVha2VyOjpSdW46OlJ1bik6IERlbGV0ZWQu
CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpJbmxpbmVDb250ZW50
Ojpjb250aW51b3VzQ29udGVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVDYW5kaWRhdGU6OklubGluZUNvbnRlbnQ6OmFwcGVuZElubGluZUl0ZW0pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpJbmxpbmVDb250ZW50OjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDYW5kaWRhdGU6OnJlc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnBsYWNlSW5saW5lQ29udGVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpuZXh0Q29udGVudEZvckxpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6aGFuZGxlRmxvYXRzQW5kSW5s
aW5lQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpjb21t
aXRQYXJ0aWFsQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDYW5kaWRh
dGU6OklubGluZUNvbnRlbnQ6OnJ1bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpJbmxpbmVDb250ZW50Ojpsb2dpY2FsV2lkdGggY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ2FuZGlkYXRlOjpJ
bmxpbmVDb250ZW50Ojpjb2xsYXBzaWJsZVRyYWlsaW5nV2lkdGggY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmg6CisK
IDIwMjAtMDktMjkgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAgICAg
ICAgIFttYWNDYXRhbHlzdF0gRm9jdXMgcmluZ3MgYXJlIG5vdCBwYWludGVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
QnJlYWtlci5jcHAKaW5kZXggYjZmOGRmZTZiYTI5NDdlODBjYTdiZDBiNTk1ZjhiMzE0YjBjOTZi
Ny4uMzAzYzIxYTNlMjdhYjIwYjRjODMyNTYxYTViNWNiNmNkNzUxM2NhNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCcmVha2VyLmNwcApAQCAtMzcsNiArMzcsNjYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBMYXlvdXQgewogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNUZXh0Q29udGVudE9ubHko
Y29uc3QgTGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50JiBjb250aW51b3VzQ29udGVudCkK
K3sKKyAgICAvLyA8c3Bhbj50ZXh0PC9zcGFuPiBpcyBjb25zaWRlcmVkIGEgdGV4dCBydW4gZXZl
biB3aXRoIHRoZSBbY29udGFpbmVyIHN0YXJ0XVtjb250YWluZXIgZW5kXSBpbmxpbmUgaXRlbXMu
CisgICAgLy8gRHVlIHRvIGNvbW1pdCBib3VuZGFyeSBydWxlcywgd2UganVzdCBuZWVkIHRvIGNo
ZWNrIHRoZSBmaXJzdCBub24tdHlwZWxlc3MgaW5saW5lIGl0ZW0gKGNhbid0IGhhdmUgYm90aCBb
aW1nXSBhbmQgW3RleHRdKQorICAgIGZvciAoYXV0byYgcnVuIDogY29udGludW91c0NvbnRlbnQu
cnVucygpKSB7CisgICAgICAgIGF1dG8mIGlubGluZUl0ZW0gPSBydW4uaW5saW5lSXRlbTsKKyAg
ICAgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJTdGFydCgpIHx8IGlubGluZUl0ZW0uaXND
b250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm4gaW5s
aW5lSXRlbS5pc1RleHQoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNWaXN1YWxseUVtcHR5V2hpdGVzcGFjZUNvbnRlbnRPbmx5KGNvbnN0IExp
bmVCcmVha2VyOjpDb250aW51b3VzQ29udGVudCYgY29udGludW91c0NvbnRlbnQpCit7CisgICAg
Ly8gWzxzcGFuPjwvc3Bhbj4gXSBbPHNwYW4+IDwvc3Bhbj5dIFsgPHNwYW4gc3R5bGU9InBhZGRp
bmc6IDBweDsiPjwvc3Bhbj5dIGFyZSBhbGwgY29uc2lkZXJlZCB2aXN1YWxseSBlbXB0eSB3aGl0
ZXNwYWNlIGNvbnRlbnQuCisgICAgLy8gWzxzcGFuIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCBy
ZWQiPjwvc3Bhbj4gXSB3aGlsZSB0aGlzIGlzIHdoaXRlc3BhY2UgY29udGVudCBvbmx5LCBpdCBp
cyBub3QgY29uc2lkZXJlZCB2aXN1YWxseSBlbXB0eS4KKyAgICAvLyBEdWUgdG8gY29tbWl0IGJv
dW5kYXJ5IHJ1bGVzLCB3ZSBqdXN0IG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0IG5vbi10eXBlbGVz
cyBpbmxpbmUgaXRlbSAoY2FuJ3QgaGF2ZSBib3RoIFtpbWddIGFuZCBbdGV4dF0pCisgICAgZm9y
IChhdXRvJiBydW4gOiBjb250aW51b3VzQ29udGVudC5ydW5zKCkpIHsKKyAgICAgICAgYXV0byYg
aW5saW5lSXRlbSA9IHJ1bi5pbmxpbmVJdGVtOworICAgICAgICAvLyBGSVhNRTogY2hlY2sgZm9y
IHBhZGRpbmcgYm9yZGVyIGV0Yy4KKyAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJT
dGFydCgpIHx8IGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICByZXR1cm4gaW5saW5lSXRlbS5pc1RleHQoKSAmJiBkb3duY2FzdDxJbmxp
bmVUZXh0SXRlbT4oaW5saW5lSXRlbSkuaXNXaGl0ZXNwYWNlKCk7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzTm9uQ29udGVudFJ1bnNPbmx5KGNv
bnN0IExpbmVCcmVha2VyOjpDb250aW51b3VzQ29udGVudCYgY29udGludW91c0NvbnRlbnQpCit7
CisgICAgLy8gPHNwYW4+PC9zcGFuPiA8LSBub24gY29udGVudCBydW5zLgorICAgIGZvciAoYXV0
byYgcnVuIDogY29udGludW91c0NvbnRlbnQucnVucygpKSB7CisgICAgICAgIGF1dG8mIGlubGlu
ZUl0ZW0gPSBydW4uaW5saW5lSXRlbTsKKyAgICAgICAgaWYgKGlubGluZUl0ZW0uaXNDb250YWlu
ZXJTdGFydCgpIHx8IGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgaW5saW5lIE9wdGlvbmFsPHNpemVfdD4gZmlyc3RUZXh0UnVuSW5kZXgoY29u
c3QgTGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50JiBjb250aW51b3VzQ29udGVudCkKK3sK
KyAgICBhdXRvJiBydW5zID0gY29udGludW91c0NvbnRlbnQucnVucygpOworICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBydW5zLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBp
ZiAocnVuc1tpbmRleF0uaW5saW5lSXRlbS5pc1RleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBp
bmRleDsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworc3RhdGljIGlubGluZSBPcHRpb25h
bDxzaXplX3Q+IGxhc3RDb250ZW50UnVuSW5kZXgoY29uc3QgTGluZUJyZWFrZXI6OkNvbnRpbnVv
dXNDb250ZW50JiBjb250aW51b3VzQ29udGVudCkKK3sKKyAgICBhdXRvJiBydW5zID0gY29udGlu
dW91c0NvbnRlbnQucnVucygpOworICAgIGZvciAoYXV0byBpbmRleCA9IHJ1bnMuc2l6ZSgpOyBp
bmRleC0tOykgeworICAgICAgICBpZiAocnVuc1tpbmRleF0uaW5saW5lSXRlbS5pc1RleHQoKSB8
fCBydW5zW2luZGV4XS5pbmxpbmVJdGVtLmlzQm94KCkpCisgICAgICAgICAgICByZXR1cm4gaW5k
ZXg7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1dy
YXBwaW5nQWxsb3dlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgLy8gRG8gbm90
IHRyeSB0byBwdXNoIG92ZXJmbG93biAncHJlJyBhbmQgJ25vLXdyYXAnIGNvbnRlbnQgdG8gbmV4
dCBsaW5lLgpAQCAtNDksNyArMTA5LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEtlZXBC
ZWdpbm5pbmdPZkxpbmVXaGl0ZXNwYWNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICBy
ZXR1cm4gd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpQcmUgfHwgd2hpdGVzcGFjZSA9PSBXaGl0
ZVNwYWNlOjpQcmVXcmFwIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6QnJlYWtTcGFjZXM7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8c2l6ZV90PiBsYXN0V3JhcE9wcG9ydHVuaXR5
SW5kZXgoY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmIHJ1bkxpc3QpCitzdGF0aWMgaW5saW5l
IE9wdGlvbmFsPHNpemVfdD4gbGFzdFdyYXBPcHBvcnR1bml0eUluZGV4KGNvbnN0IExpbmVCcmVh
a2VyOjpDb250aW51b3VzQ29udGVudDo6UnVuTGlzdCYgcnVuTGlzdCkKIHsKICAgICAvLyA8c3Bh
biBzdHlsZT0id2hpdGUtc3BhY2U6IHByZSI+bm9fd3JhcDwvc3Bhbj48c3Bhbj55ZXMgd3JhcDwv
c3Bhbj48c3BhbiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZSI+bm9fd3JhcDwvc3Bhbj4uCiAgICAg
Ly8gW2NvbnRhaW5lciBzdGFydF1bbm9fd3JhcF1bY29udGFpbmVyIGVuZF1bY29udGFpbmVyIHN0
YXJ0XVt5ZXNdIDwtIGNvbnRpbnVvdXMgY29udGVudApAQCAtNjEsMzMgKzEyMSwxMSBAQCBzdGF0
aWMgaW5saW5lIE9wdGlvbmFsPHNpemVfdD4gbGFzdFdyYXBPcHBvcnR1bml0eUluZGV4KGNvbnN0
IExpbmVCcmVha2VyOjpSdW5MaQogICAgIHJldHVybiBpc1dyYXBwaW5nQWxsb3dlZChydW5MaXN0
W2xhc3RJdGVtSW5kZXhdLmlubGluZUl0ZW0uc3R5bGUoKSkgPyBtYWtlT3B0aW9uYWwobGFzdEl0
ZW1JbmRleCkgOiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0cnVjdCBDb250aW51b3VzQ29udGVudCB7
Ci0gICAgQ29udGludW91c0NvbnRlbnQoY29uc3QgTGluZUJyZWFrZXI6OkNhbmRpZGF0ZUNvbnRl
bnQmKTsKLQotICAgIGNvbnN0IExpbmVCcmVha2VyOjpSdW5MaXN0JiBydW5zKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYW5kaWRhdGVDb250ZW50LnJ1bnM7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBydW5zKCkuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNUZXh0Q29udGVudE9u
bHkoKSBjb25zdDsKLSAgICBib29sIGlzVmlzdWFsbHlFbXB0eVdoaXRlc3BhY2VDb250ZW50T25s
eSgpIGNvbnN0OwotICAgIGJvb2wgaGFzTm9uQ29udGVudFJ1bnNPbmx5KCkgY29uc3Q7Ci0gICAg
SW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NhbmRpZGF0
ZUNvbnRlbnQubG9naWNhbFdpZHRoOyB9Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuZGlkYXRlQ29udGVudC5sb2dpY2FsTGVmdDsgfQotICAg
IElubGluZUxheW91dFVuaXQgbm9uQ29sbGFwc2libGVMb2dpY2FsV2lkdGgoKSBjb25zdDsKLQot
ICAgIGJvb2wgaGFzVHJhaWxpbmdDb2xsYXBzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiAh
IW1fY2FuZGlkYXRlQ29udGVudC5jb2xsYXBzaWJsZVRyYWlsaW5nV2lkdGg7IH0KLSAgICBib29s
IGlzRnVsbHlDb2xsYXBzaWJsZSgpIGNvbnN0IHsgcmV0dXJuICFub25Db2xsYXBzaWJsZUxvZ2lj
YWxXaWR0aCgpOyB9Ci0KLSAgICBPcHRpb25hbDxzaXplX3Q+IGZpcnN0VGV4dFJ1bkluZGV4KCkg
Y29uc3Q7Ci0gICAgT3B0aW9uYWw8c2l6ZV90PiBsYXN0Q29udGVudFJ1bkluZGV4KCkgY29uc3Q7
Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgTGluZUJyZWFrZXI6OkNhbmRpZGF0ZUNvbnRlbnQmIG1f
Y2FuZGlkYXRlQ29udGVudDsKLX07Ci0KIGJvb2wgTGluZUJyZWFrZXI6OmlzQ29udGVudFdyYXBw
aW5nQWxsb3dlZChjb25zdCBDb250aW51b3VzQ29udGVudCYgY29udGludW91c0NvbnRlbnQpIGNv
bnN0CiB7CiAgICAgLy8gVXNlIHRoZSBsYXN0IGlubGluZSBpdGVtIHdpdGggY29udGVudCAod2hl
cmUgd2Ugd291bGQgYmUgd3JhcHBpbmcpIHRvIGRlY2lkZSBpZiBjb250ZW50IHdyYXBwaW5nIGlz
IGFsbG93ZWQuCiAgICAgYXV0byYgY29udGludW91c1J1bnMgPSBjb250aW51b3VzQ29udGVudC5y
dW5zKCk7Ci0gICAgYXV0byBydW5JbmRleCA9IGNvbnRpbnVvdXNDb250ZW50Lmxhc3RDb250ZW50
UnVuSW5kZXgoKS52YWx1ZU9yKGNvbnRpbnVvdXNSdW5zLnNpemUoKSAtIDEpOworICAgIGF1dG8g
cnVuSW5kZXggPSBsYXN0Q29udGVudFJ1bkluZGV4KGNvbnRpbnVvdXNDb250ZW50KS52YWx1ZU9y
KGNvbnRpbnVvdXNSdW5zLnNpemUoKSAtIDEpOwogICAgIHJldHVybiBpc1dyYXBwaW5nQWxsb3dl
ZChjb250aW51b3VzUnVuc1tydW5JbmRleF0uaW5saW5lSXRlbS5zdHlsZSgpKTsKIH0KIApAQCAt
OTcsMTggKzEzNSwxOCBAQCBib29sIExpbmVCcmVha2VyOjpzaG91bGRLZWVwRW5kT2ZMaW5lV2hp
dGVzcGFjZShjb25zdCBDb250aW51b3VzQ29udGVudCYgY29udGludQogICAgIC8vIE5vdGUgdGhh
dCB0aGUgImtlZXAiIGluIHRoaXMgY29udGV4dCBtZWFucyB3ZSBsZXQgdGhlIHdoaXRlc3BhY2Ug
Y29udGVudCBzaXQgb24gdGhlIGN1cnJlbnQgbGluZS4KICAgICAvLyBJdCBtaWdodCB2ZXJ5IHdl
bGwgZ2V0IGNvbGxhcHNlZCB3aGVuIHdlIGNsb3NlIHRoZSBsaW5lIChub3JtYWwvbm93cmFwL3By
ZS1saW5lKS4KICAgICAvLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy10ZXh0LTMvI3do
aXRlLXNwYWNlLXByb3BlcnR5Ci0gICAgYXV0byB3aGl0ZXNwYWNlID0gY29udGludW91c0NvbnRl
bnQucnVucygpWypjb250aW51b3VzQ29udGVudC5maXJzdFRleHRSdW5JbmRleCgpXS5pbmxpbmVJ
dGVtLnN0eWxlKCkud2hpdGVTcGFjZSgpOworICAgIGF1dG8gd2hpdGVzcGFjZSA9IGNvbnRpbnVv
dXNDb250ZW50LnJ1bnMoKVsqZmlyc3RUZXh0UnVuSW5kZXgoY29udGludW91c0NvbnRlbnQpXS5p
bmxpbmVJdGVtLnN0eWxlKCkud2hpdGVTcGFjZSgpOwogICAgIHJldHVybiB3aGl0ZXNwYWNlID09
IFdoaXRlU3BhY2U6Ok5vcm1hbCB8fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6Ok5vV3JhcCB8
fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZVdyYXAgfHwgd2hpdGVzcGFjZSA9PSBXaGl0
ZVNwYWNlOjpQcmVMaW5lOwogfQogCi1MaW5lQnJlYWtlcjo6UmVzdWx0IExpbmVCcmVha2VyOjpw
cm9jZXNzSW5saW5lQ29udGVudChjb25zdCBDYW5kaWRhdGVDb250ZW50JiBjYW5kaWRhdGVDb250
ZW50LCBjb25zdCBMaW5lU3RhdHVzJiBsaW5lU3RhdHVzKQorTGluZUJyZWFrZXI6OlJlc3VsdCBM
aW5lQnJlYWtlcjo6cHJvY2Vzc0lubGluZUNvbnRlbnQoY29uc3QgQ29udGludW91c0NvbnRlbnQm
IGNhbmRpZGF0ZUNvbnRlbnQsIGNvbnN0IExpbmVTdGF0dXMmIGxpbmVTdGF0dXMpCiB7CiAgICAg
YXV0byBwcm9jZXNzQ2FuZGlkYXRlQ29udGVudCA9IFsmXSB7Ci0gICAgICAgIGlmIChjYW5kaWRh
dGVDb250ZW50LmxvZ2ljYWxXaWR0aCA8PSBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRoKQorICAg
ICAgICBpZiAoY2FuZGlkYXRlQ29udGVudC5sb2dpY2FsV2lkdGgoKSA8PSBsaW5lU3RhdHVzLmF2
YWlsYWJsZVdpZHRoKQogICAgICAgICAgICAgcmV0dXJuIFJlc3VsdCB7IFJlc3VsdDo6QWN0aW9u
OjpLZWVwIH07CiAjaWYgVVNFX0ZMT0FUX0FTX0lOTElORV9MQVlPVVRfVU5JVAogICAgICAgICAv
LyBQcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24gc3VtcyB1cCBmbG9hdHMgd2hpbGUgbGluZSBi
cmVha2VyIHN1YnRyYWN0cyB0aGVtLiBUaGlzIGNhbiBsZWFkIHRvIGVwc2lsb24tc2NhbGUgZGlm
ZmVyZW5jZXMuCi0gICAgICAgIGlmIChXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoY2FuZGlkYXRl
Q29udGVudC5sb2dpY2FsV2lkdGgsIGxpbmVTdGF0dXMuYXZhaWxhYmxlV2lkdGgpKQorICAgICAg
ICBpZiAoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKGNhbmRpZGF0ZUNvbnRlbnQubG9naWNhbFdp
ZHRoKCksIGxpbmVTdGF0dXMuYXZhaWxhYmxlV2lkdGgpKQogICAgICAgICAgICAgcmV0dXJuIFJl
c3VsdCB7IFJlc3VsdDo6QWN0aW9uOjpLZWVwIH07CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIHBy
b2Nlc3NPdmVyZmxvd2luZ0NvbnRlbnQoY2FuZGlkYXRlQ29udGVudCwgbGluZVN0YXR1cyk7CkBA
IC0xMTgsMTQgKzE1NiwxNCBAQCBMaW5lQnJlYWtlcjo6UmVzdWx0IExpbmVCcmVha2VyOjpwcm9j
ZXNzSW5saW5lQ29udGVudChjb25zdCBDYW5kaWRhdGVDb250ZW50JiBjYQogICAgIGlmIChyZXN1
bHQuYWN0aW9uID09IFJlc3VsdDo6QWN0aW9uOjpLZWVwKSB7CiAgICAgICAgIC8vIElmIHRoaXMg
aXMgbm90IHRoZSBlbmQgb2YgdGhlIGxpbmUsIGhvbGQgb24gdG8gdGhlIGxhc3QgZWxpZ2libGUg
bGluZSB3cmFwIG9wcG9ydHVuaXR5IHNvIHRoYXQgd2UgY291bGQgcmV2ZXJ0IGJhY2sKICAgICAg
ICAgLy8gdG8gdGhpcyBwb3NpdGlvbiBpZiBubyBvdGhlciBsaW5lIGJyZWFraW5nIG9wcG9ydHVu
aXR5IGV4aXN0cyBpbiB0aGlzIGNvbnRlbnQuCi0gICAgICAgIGlmIChhdXRvIGxhc3RMaW5lV3Jh
cE9wcG9ydHVuaXR5SW5kZXggPSBsYXN0V3JhcE9wcG9ydHVuaXR5SW5kZXgoY2FuZGlkYXRlQ29u
dGVudC5ydW5zKSkgeworICAgICAgICBpZiAoYXV0byBsYXN0TGluZVdyYXBPcHBvcnR1bml0eUlu
ZGV4ID0gbGFzdFdyYXBPcHBvcnR1bml0eUluZGV4KGNhbmRpZGF0ZUNvbnRlbnQucnVucygpKSkg
ewogICAgICAgICAgICAgYXV0byBpc0VsaWdpYmxlTGluZVdyYXBPcHBvcnR1bml0eSA9IFsmXSAo
YXV0byYgY2FuZGlkYXRlSXRlbSkgewogICAgICAgICAgICAgICAgIC8vIEp1c3QgY2hlY2sgZm9y
IGxlYWRpbmcgY29sbGFwc2libGUgd2hpdGVzcGFjZSBmb3Igbm93LgogICAgICAgICAgICAgICAg
IGlmICghbGluZVN0YXR1cy5saW5lSXNFbXB0eSB8fCAhY2FuZGlkYXRlSXRlbS5pc1RleHQoKSB8
fCAhZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGNhbmRpZGF0ZUl0ZW0pLmlzV2hpdGVzcGFjZSgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1
cm4gc2hvdWxkS2VlcEJlZ2lubmluZ09mTGluZVdoaXRlc3BhY2UoY2FuZGlkYXRlSXRlbS5zdHls
ZSgpKTsKICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBhdXRvJiBsYXN0V3JhcE9wcG9ydHVu
aXR5Q2FuZGlkYXRlSXRlbSA9IGNhbmRpZGF0ZUNvbnRlbnQucnVuc1sqbGFzdExpbmVXcmFwT3Bw
b3J0dW5pdHlJbmRleF0uaW5saW5lSXRlbTsKKyAgICAgICAgICAgIGF1dG8mIGxhc3RXcmFwT3Bw
b3J0dW5pdHlDYW5kaWRhdGVJdGVtID0gY2FuZGlkYXRlQ29udGVudC5ydW5zKClbKmxhc3RMaW5l
V3JhcE9wcG9ydHVuaXR5SW5kZXhdLmlubGluZUl0ZW07CiAgICAgICAgICAgICBpZiAoaXNFbGln
aWJsZUxpbmVXcmFwT3Bwb3J0dW5pdHkobGFzdFdyYXBPcHBvcnR1bml0eUNhbmRpZGF0ZUl0ZW0p
KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lmxhc3RXcmFwT3Bwb3J0dW5pdHlJdGVtID0gJmxh
c3RXcmFwT3Bwb3J0dW5pdHlDYW5kaWRhdGVJdGVtOwogICAgICAgICAgICAgICAgIG1faGFzV3Jh
cE9wcG9ydHVuaXR5QXRQcmV2aW91c1Bvc2l0aW9uID0gdHJ1ZTsKQEAgLTE0MSwxNCArMTc5LDE0
IEBAIHN0cnVjdCBUcmFpbGluZ1RleHRDb250ZW50IHsKICAgICBPcHRpb25hbDxMaW5lQnJlYWtl
cjo6UGFydGlhbFJ1bj4gcGFydGlhbFJ1bjsKIH07CiAKLUxpbmVCcmVha2VyOjpSZXN1bHQgTGlu
ZUJyZWFrZXI6OnByb2Nlc3NPdmVyZmxvd2luZ0NvbnRlbnQoY29uc3QgQ2FuZGlkYXRlQ29udGVu
dCYgb3ZlcmZsb3dDb250ZW50LCBjb25zdCBMaW5lU3RhdHVzJiBsaW5lU3RhdHVzKSBjb25zdAor
TGluZUJyZWFrZXI6OlJlc3VsdCBMaW5lQnJlYWtlcjo6cHJvY2Vzc092ZXJmbG93aW5nQ29udGVu
dChjb25zdCBDb250aW51b3VzQ29udGVudCYgb3ZlcmZsb3dDb250ZW50LCBjb25zdCBMaW5lU3Rh
dHVzJiBsaW5lU3RhdHVzKSBjb25zdAogewogICAgIGF1dG8gY29udGludW91c0NvbnRlbnQgPSBD
b250aW51b3VzQ29udGVudCB7IG92ZXJmbG93Q29udGVudCB9OwotICAgIEFTU0VSVCghY29udGlu
dW91c0NvbnRlbnQuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoIWNvbnRpbnVvdXNDb250ZW50LnJ1
bnMoKS5pc0VtcHR5KCkpOwogCiAgICAgQVNTRVJUKGNvbnRpbnVvdXNDb250ZW50LmxvZ2ljYWxX
aWR0aCgpID4gbGluZVN0YXR1cy5hdmFpbGFibGVXaWR0aCk7CiAgICAgaWYgKGNvbnRpbnVvdXND
b250ZW50Lmhhc1RyYWlsaW5nQ29sbGFwc2libGVDb250ZW50KCkpIHsKLSAgICAgICAgQVNTRVJU
KGNvbnRpbnVvdXNDb250ZW50Lmhhc1RleHRDb250ZW50T25seSgpKTsKKyAgICAgICAgQVNTRVJU
KGlzVGV4dENvbnRlbnRPbmx5KGNvbnRpbnVvdXNDb250ZW50KSk7CiAgICAgICAgIGF1dG8gSXNF
bmRPZkxpbmUgPSBpc0NvbnRlbnRXcmFwcGluZ0FsbG93ZWQoY29udGludW91c0NvbnRlbnQpID8g
SXNFbmRPZkxpbmU6OlllcyA6IElzRW5kT2ZMaW5lOjpObzsKICAgICAgICAgLy8gRmlyc3QgY2hl
Y2sgaWYgdGhlIGNvbnRlbnQgZml0cyB3aXRob3V0IHRoZSB0cmFpbGluZyBjb2xsYXBzaWJsZSBw
YXJ0LgogICAgICAgICBpZiAoY29udGludW91c0NvbnRlbnQubm9uQ29sbGFwc2libGVMb2dpY2Fs
V2lkdGgoKSA8PSBsaW5lU3RhdHVzLmF2YWlsYWJsZVdpZHRoKQpAQCAtMTU4LDE5ICsxOTYsMTkg
QEAgTGluZUJyZWFrZXI6OlJlc3VsdCBMaW5lQnJlYWtlcjo6cHJvY2Vzc092ZXJmbG93aW5nQ29u
dGVudChjb25zdCBDYW5kaWRhdGVDb250ZW4KICAgICAgICAgICAgIC8vIElmIHRoaXMgbmV3IGNv
bnRlbnQgaXMgZnVsbHkgY29sbGFwc2libGUsIGl0IHNob3VsZCBzdXJlbHkgZml0LgogICAgICAg
ICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246OktlZXAsIElzRW5kT2ZMaW5lIH07CiAgICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKGxpbmVTdGF0dXMuY29sbGFwc2libGVXaWR0aCAmJiBjb250
aW51b3VzQ29udGVudC5oYXNOb25Db250ZW50UnVuc09ubHkoKSkgeworICAgIH0gZWxzZSBpZiAo
bGluZVN0YXR1cy5jb2xsYXBzaWJsZVdpZHRoICYmIGlzTm9uQ29udGVudFJ1bnNPbmx5KGNvbnRp
bnVvdXNDb250ZW50KSkgewogICAgICAgICAvLyBMZXQncyBzZWUgaWYgdGhlIG5vbi1jb250ZW50
IHJ1bnMgZml0IHdoZW4gdGhlIGxpbmUgaGFzIHRyYWlsaW5nIGNvbGxhcHNpYmxlIGNvbnRlbnQu
CiAgICAgICAgIC8vICJ0ZXh0IGNvbnRlbnQgPHNwYW4gc3R5bGU9InBhZGRpbmc6IDFweCI+PC9z
cGFuPiIgPC0gdGhlIDxzcGFuPjwvc3Bhbj4gcnVucyBjb3VsZCBmaXQgYWZ0ZXIgY29sbGFwc2lu
ZyB0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZS4KICAgICAgICAgaWYgKGNvbnRpbnVvdXNDb250ZW50
LmxvZ2ljYWxXaWR0aCgpIDw9IGxpbmVTdGF0dXMuYXZhaWxhYmxlV2lkdGggKyBsaW5lU3RhdHVz
LmNvbGxhcHNpYmxlV2lkdGgpCiAgICAgICAgICAgICByZXR1cm4geyBSZXN1bHQ6OkFjdGlvbjo6
S2VlcCB9OwogICAgIH0KLSAgICBpZiAoY29udGludW91c0NvbnRlbnQuaXNWaXN1YWxseUVtcHR5
V2hpdGVzcGFjZUNvbnRlbnRPbmx5KCkgJiYgc2hvdWxkS2VlcEVuZE9mTGluZVdoaXRlc3BhY2Uo
Y29udGludW91c0NvbnRlbnQpKSB7CisgICAgaWYgKGlzVmlzdWFsbHlFbXB0eVdoaXRlc3BhY2VD
b250ZW50T25seShjb250aW51b3VzQ29udGVudCkgJiYgc2hvdWxkS2VlcEVuZE9mTGluZVdoaXRl
c3BhY2UoY29udGludW91c0NvbnRlbnQpKSB7CiAgICAgICAgIC8vIFRoaXMgb3ZlcmZsb3dpbmcg
Y29udGVudCBhcHBhcmVudGx5IGZhbGxzIGludG8gdGhlIHJlbW92ZS9oYW5nIGVuZC1vZi1saW5l
LXNwYWNlcyBjYXRlZ29yeS4KICAgICAgICAgLy8gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9j
c3MtdGV4dC0zLyN3aGl0ZS1zcGFjZS1wcm9wZXJ0eSBtYXRyaXgKICAgICAgICAgcmV0dXJuIHsg
UmVzdWx0OjpBY3Rpb246OktlZXAgfTsKICAgICB9CiAKLSAgICBpZiAoY29udGludW91c0NvbnRl
bnQuaGFzVGV4dENvbnRlbnRPbmx5KCkpIHsKKyAgICBpZiAoaXNUZXh0Q29udGVudE9ubHkoY29u
dGludW91c0NvbnRlbnQpKSB7CiAgICAgICAgIGlmIChhdXRvIHRyYWlsaW5nQ29udGVudCA9IHBy
b2Nlc3NPdmVyZmxvd2luZ1RleHRDb250ZW50KGNvbnRpbnVvdXNDb250ZW50LCBsaW5lU3RhdHVz
KSkgewogICAgICAgICAgICAgaWYgKCF0cmFpbGluZ0NvbnRlbnQtPnJ1bkluZGV4ICYmIHRyYWls
aW5nQ29udGVudC0+aGFzT3ZlcmZsb3cpIHsKICAgICAgICAgICAgICAgICAvLyBXZSB0cmllZCB0
byBicmVhayB0aGUgY29udGVudCBidXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBjYW4ndCBldmVuIGFj
Y29tbW9kYXRlIHRoZSBmaXJzdCBjaGFyYWN0ZXIuCkBAIC0xNzgsMTQgKzIxNiwxNCBAQCBMaW5l
QnJlYWtlcjo6UmVzdWx0IExpbmVCcmVha2VyOjpwcm9jZXNzT3ZlcmZsb3dpbmdDb250ZW50KGNv
bnN0IENhbmRpZGF0ZUNvbnRlbgogICAgICAgICAgICAgICAgIC8vIDIuIEtlZXAgdGhlIGZpcnN0
IGNoYXJhY3RlciBvbiB0aGUgZW1wdHkgbGluZSAob3Iga2VlcCB0aGUgd2hvbGUgcnVuIGlmIGl0
IGhhcyBvbmx5IG9uZSBjaGFyYWN0ZXIpLgogICAgICAgICAgICAgICAgIGlmICghbGluZVN0YXR1
cy5saW5lSXNFbXB0eSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rp
b246OlB1c2gsIElzRW5kT2ZMaW5lOjpZZXMsIHsgfSB9OwotICAgICAgICAgICAgICAgIGF1dG8g
Zmlyc3RUZXh0UnVuSW5kZXggPSAqY29udGludW91c0NvbnRlbnQuZmlyc3RUZXh0UnVuSW5kZXgo
KTsKLSAgICAgICAgICAgICAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGlu
ZVRleHRJdGVtPihjb250aW51b3VzQ29udGVudC5ydW5zKClbZmlyc3RUZXh0UnVuSW5kZXhdLmlu
bGluZUl0ZW0pOworICAgICAgICAgICAgICAgIGF1dG8gbGVhZGluZ1RleHRSdW5JbmRleCA9ICpm
aXJzdFRleHRSdW5JbmRleChjb250aW51b3VzQ29udGVudCk7CisgICAgICAgICAgICAgICAgYXV0
byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oY29udGludW91c0Nv
bnRlbnQucnVucygpW2xlYWRpbmdUZXh0UnVuSW5kZXhdLmlubGluZUl0ZW0pOwogICAgICAgICAg
ICAgICAgIEFTU0VSVChpbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKGlubGluZVRleHRJdGVtLmxlbmd0aCgpID09IDEpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBSZXN1bHQgeyBSZXN1bHQ6OkFjdGlvbjo6S2VlcCwgSXNFbmRPZkxpbmU6OlllcyB9Owog
ICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RDaGFyYWN0ZXJXaWR0aCA9IFRleHRVdGlsOjp3aWR0
aChpbmxpbmVUZXh0SXRlbSwgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgaW5saW5lVGV4dEl0ZW0u
c3RhcnQoKSArIDEpOwogICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RDaGFyYWN0ZXJSdW4gPSBQ
YXJ0aWFsUnVuIHsgMSwgZmlyc3RDaGFyYWN0ZXJXaWR0aCwgZmFsc2UgfTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4geyBSZXN1bHQ6OkFjdGlvbjo6QnJlYWssIElzRW5kT2ZMaW5lOjpZZXMsIFJl
c3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCB7IGZpcnN0VGV4dFJ1bkluZGV4LCBmaXJzdENo
YXJhY3RlclJ1biB9IH07CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgUmVzdWx0OjpBY3Rpb246
OkJyZWFrLCBJc0VuZE9mTGluZTo6WWVzLCBSZXN1bHQ6OlBhcnRpYWxUcmFpbGluZ0NvbnRlbnQg
eyBsZWFkaW5nVGV4dFJ1bkluZGV4LCBmaXJzdENoYXJhY3RlclJ1biB9IH07CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBhdXRvIHRyYWlsaW5nUGFydGlhbENvbnRlbnQgPSBSZXN1bHQ6OlBh
cnRpYWxUcmFpbGluZ0NvbnRlbnQgeyB0cmFpbGluZ0NvbnRlbnQtPnJ1bkluZGV4LCB0cmFpbGlu
Z0NvbnRlbnQtPnBhcnRpYWxSdW4gfTsKICAgICAgICAgICAgIHJldHVybiB7IFJlc3VsdDo6QWN0
aW9uOjpCcmVhaywgSXNFbmRPZkxpbmU6OlllcywgdHJhaWxpbmdQYXJ0aWFsQ29udGVudCB9OwpA
QCAtMjg5LDcgKzMyNyw3IEBAIExpbmVCcmVha2VyOjpXb3JkQnJlYWtSdWxlIExpbmVCcmVha2Vy
Ojp3b3JkQnJlYWtCZWhhdmlvcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5CiAgICAgcmV0dXJuIFdv
cmRCcmVha1J1bGU6Ok5vQnJlYWs7CiB9CiAKLU9wdGlvbmFsPExpbmVCcmVha2VyOjpQYXJ0aWFs
UnVuPiBMaW5lQnJlYWtlcjo6dHJ5QnJlYWtpbmdUZXh0UnVuKGNvbnN0IFJ1biYgb3ZlcmZsb3dp
bmdSdW4sIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgYXZh
aWxhYmxlV2lkdGgpIGNvbnN0CitPcHRpb25hbDxMaW5lQnJlYWtlcjo6UGFydGlhbFJ1bj4gTGlu
ZUJyZWFrZXI6OnRyeUJyZWFraW5nVGV4dFJ1bihjb25zdCBDb250aW51b3VzQ29udGVudDo6UnVu
JiBvdmVyZmxvd2luZ1J1biwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkgY29uc3QKIHsKICAgICBBU1NFUlQob3ZlcmZsb3dpbmdS
dW4uaW5saW5lSXRlbS5pc1RleHQoKSk7CiAgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3du
Y2FzdDxJbmxpbmVUZXh0SXRlbT4ob3ZlcmZsb3dpbmdSdW4uaW5saW5lSXRlbSk7CkBAIC0zNDYs
NzUgKzM4NCwzMSBAQCBPcHRpb25hbDxMaW5lQnJlYWtlcjo6UGFydGlhbFJ1bj4gTGluZUJyZWFr
ZXI6OnRyeUJyZWFraW5nVGV4dFJ1bihjb25zdCBSdW4mIG92ZQogICAgIHJldHVybiB7IH07CiB9
CiAKLUNvbnRpbnVvdXNDb250ZW50OjpDb250aW51b3VzQ29udGVudChjb25zdCBMaW5lQnJlYWtl
cjo6Q2FuZGlkYXRlQ29udGVudCYgY2FuZGlkYXRlQ29udGVudCkKLSAgICA6IG1fY2FuZGlkYXRl
Q29udGVudChjYW5kaWRhdGVDb250ZW50KQotewotfQotCi1JbmxpbmVMYXlvdXRVbml0IENvbnRp
bnVvdXNDb250ZW50Ojpub25Db2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKGxvZ2ljYWxXaWR0aCgpID49IG1fY2FuZGlkYXRlQ29udGVudC5jb2xsYXBzaWJsZVRy
YWlsaW5nV2lkdGgpOwotICAgIHJldHVybiBsb2dpY2FsV2lkdGgoKSAtIG1fY2FuZGlkYXRlQ29u
dGVudC5jb2xsYXBzaWJsZVRyYWlsaW5nV2lkdGg7Ci19Ci0KLWJvb2wgQ29udGludW91c0NvbnRl
bnQ6Omhhc1RleHRDb250ZW50T25seSgpIGNvbnN0Cit2b2lkIExpbmVCcmVha2VyOjpDb250aW51
b3VzQ29udGVudDo6YXBwZW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFdpZHRoLCBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBjb2xsYXBz
aWJsZVdpZHRoKQogewotICAgIC8vIDxzcGFuPnRleHQ8L3NwYW4+IGlzIGNvbnNpZGVyZWQgYSB0
ZXh0IHJ1biBldmVuIHdpdGggdGhlIFtjb250YWluZXIgc3RhcnRdW2NvbnRhaW5lciBlbmRdIGlu
bGluZSBpdGVtcy4KLSAgICAvLyBEdWUgdG8gY29tbWl0IGJvdW5kYXJ5IHJ1bGVzLCB3ZSBqdXN0
IG5lZWQgdG8gY2hlY2sgdGhlIGZpcnN0IG5vbi10eXBlbGVzcyBpbmxpbmUgaXRlbSAoY2FuJ3Qg
aGF2ZSBib3RoIFtpbWddIGFuZCBbdGV4dF0pCi0gICAgZm9yIChhdXRvJiBydW4gOiBydW5zKCkp
IHsKLSAgICAgICAgYXV0byYgaW5saW5lSXRlbSA9IHJ1bi5pbmxpbmVJdGVtOwotICAgICAgICBp
ZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5l
ckVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHVybiBpbmxpbmVJdGVt
LmlzVGV4dCgpOworICAgIG1fcnVucy5hcHBlbmQoeyBpbmxpbmVJdGVtLCBsb2dpY2FsV2lkdGgg
fSk7CisgICAgbV9sb2dpY2FsV2lkdGggKz0gbG9naWNhbFdpZHRoOworICAgIGlmICghY29sbGFw
c2libGVXaWR0aCkgeworICAgICAgICBtX2NvbGxhcHNpYmxlTG9naWNhbFdpZHRoID0geyB9Owor
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDb250
aW51b3VzQ29udGVudDo6aXNWaXN1YWxseUVtcHR5V2hpdGVzcGFjZUNvbnRlbnRPbmx5KCkgY29u
c3QKLXsKLSAgICAvLyBbPHNwYW4+PC9zcGFuPiBdIFs8c3Bhbj4gPC9zcGFuPl0gWyA8c3BhbiBz
dHlsZT0icGFkZGluZzogMHB4OyI+PC9zcGFuPl0gYXJlIGFsbCBjb25zaWRlcmVkIHZpc3VhbGx5
IGVtcHR5IHdoaXRlc3BhY2UgY29udGVudC4KLSAgICAvLyBbPHNwYW4gc3R5bGU9ImJvcmRlcjog
MXB4IHNvbGlkIHJlZCI+PC9zcGFuPiBdIHdoaWxlIHRoaXMgaXMgd2hpdGVzcGFjZSBjb250ZW50
IG9ubHksIGl0IGlzIG5vdCBjb25zaWRlcmVkIHZpc3VhbGx5IGVtcHR5LgotICAgIC8vIER1ZSB0
byBjb21taXQgYm91bmRhcnkgcnVsZXMsIHdlIGp1c3QgbmVlZCB0byBjaGVjayB0aGUgZmlyc3Qg
bm9uLXR5cGVsZXNzIGlubGluZSBpdGVtIChjYW4ndCBoYXZlIGJvdGggW2ltZ10gYW5kIFt0ZXh0
XSkKLSAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1bnMoKSkgewotICAgICAgICBhdXRvJiBpbmxpbmVJ
dGVtID0gcnVuLmlubGluZUl0ZW07Ci0gICAgICAgIC8vIEZJWE1FOiBjaGVjayBmb3IgcGFkZGlu
ZyBib3JkZXIgZXRjLgotICAgICAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkg
fHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHJldHVybiBpbmxpbmVJdGVtLmlzVGV4dCgpICYmIGRvd25jYXN0PElubGluZVRleHRJ
dGVtPihpbmxpbmVJdGVtKS5pc1doaXRlc3BhY2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1PcHRpb25hbDxzaXplX3Q+IENvbnRpbnVvdXNDb250ZW50OjpmaXJzdFRleHRSdW5J
bmRleCgpIGNvbnN0Ci17Ci0gICAgYXV0byYgcnVucyA9IHRoaXMtPnJ1bnMoKTsKLSAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgcnVucy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAg
ICAgaWYgKHJ1bnNbaW5kZXhdLmlubGluZUl0ZW0uaXNUZXh0KCkpCi0gICAgICAgICAgICByZXR1
cm4gaW5kZXg7Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19Ci0KLU9wdGlvbmFsPHNpemVfdD4g
Q29udGludW91c0NvbnRlbnQ6Omxhc3RDb250ZW50UnVuSW5kZXgoKSBjb25zdAotewotICAgIGF1
dG8mIHJ1bnMgPSB0aGlzLT5ydW5zKCk7Ci0gICAgZm9yIChhdXRvIGluZGV4ID0gcnVucy5zaXpl
KCk7IGluZGV4LS07KSB7Ci0gICAgICAgIGlmIChydW5zW2luZGV4XS5pbmxpbmVJdGVtLmlzVGV4
dCgpIHx8IHJ1bnNbaW5kZXhdLmlubGluZUl0ZW0uaXNCb3goKSkKLSAgICAgICAgICAgIHJldHVy
biBpbmRleDsKKyAgICBpZiAoKmNvbGxhcHNpYmxlV2lkdGggPT0gbG9naWNhbFdpZHRoKSB7Cisg
ICAgICAgIC8vIEZ1bGx5IGNvbGxhcHNpYmxlIHJ1bi4KKyAgICAgICAgbV9jb2xsYXBzaWJsZUxv
Z2ljYWxXaWR0aCArPSBsb2dpY2FsV2lkdGg7CisgICAgICAgIEFTU0VSVChtX2NvbGxhcHNpYmxl
TG9naWNhbFdpZHRoIDw9IG1fbG9naWNhbFdpZHRoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICByZXR1cm4geyB9OworICAgIC8vIFBhcnRpYWxseSBjb2xsYXBzaWJsZSBydW4uCisgICAg
bV9jb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCA9ICpjb2xsYXBzaWJsZVdpZHRoOworICAgIEFTU0VS
VChtX2NvbGxhcHNpYmxlTG9naWNhbFdpZHRoIDw9IG1fbG9naWNhbFdpZHRoKTsKIH0KIAotYm9v
bCBDb250aW51b3VzQ29udGVudDo6aGFzTm9uQ29udGVudFJ1bnNPbmx5KCkgY29uc3QKK3ZvaWQg
TGluZUJyZWFrZXI6OkNvbnRpbnVvdXNDb250ZW50OjpyZXNldChJbmxpbmVMYXlvdXRVbml0IGNv
bnRlbnRMb2dpY2FsTGVmdCkKIHsKLSAgICAvLyA8c3Bhbj48L3NwYW4+IDwtIG5vbiBjb250ZW50
IHJ1bnMuCi0gICAgZm9yIChhdXRvJiBydW4gOiBydW5zKCkpIHsKLSAgICAgICAgYXV0byYgaW5s
aW5lSXRlbSA9IHJ1bi5pbmxpbmVJdGVtOwotICAgICAgICBpZiAoaW5saW5lSXRlbS5pc0NvbnRh
aW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgbV9sb2dpY2FsTGVmdCA9IGNvbnRlbnRMb2dpY2FsTGVmdDsKKyAgICBtX2xvZ2ljYWxX
aWR0aCA9IHsgfTsKKyAgICBtX2NvbGxhcHNpYmxlTG9naWNhbFdpZHRoID0geyB9OworICAgIG1f
cnVucy5jbGVhcigpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuaAppbmRleCBiZTVlYTg3N2U1
Njc0NmJmZjM3NGJlNTc2NjFiNzA4MDJkZmJhY2NkLi5iZGY4NzI2OWRlZjlhNjhkOWM0NjAxOTk1
NWRhNDNjY2U4ZDM0NjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmgKQEAgLTY2LDE2ICs2Niw2IEBA
IHB1YmxpYzoKICAgICAgICAgY29uc3QgSW5saW5lSXRlbSogbGFzdFdyYXBPcHBvcnR1bml0eUl0
ZW0geyBudWxscHRyIH07CiAgICAgfTsKIAotICAgIHN0cnVjdCBSdW4gewotICAgICAgICBSdW4o
Y29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQpOwotICAgICAgICBSdW4oY29uc3Qg
UnVuJik7Ci0gICAgICAgIFJ1biYgb3BlcmF0b3I9KGNvbnN0IFJ1biYpOwotCi0gICAgICAgIGNv
bnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFdpZHRoIHsgMCB9OwotICAgIH07Ci0gICAgdXNpbmcgUnVuTGlzdCA9IFZlY3RvcjxSdW4s
IDM+OwotCiAgICAgLy8gVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIGNvbnRp
bnVvdXMgY29udGVudCBjb21taXR0ZWQgdG8gbGluZSBicmVha2luZyBhdCBhIHRpbWUgKG5vIGlu
LWJldHdlZW4gd3JhcCBvcHBvcnR1bml0aWVzKS4KICAgICAvLyBlLmcuCiAgICAgLy8gPGRpdj50
ZXh0IGNvbnRlbnQgPHNwYW4+c3BhbjE8L3NwYW4+YmV0d2VlbjxzcGFuPnNwYW4yPC9zcGFuPjwv
ZGl2PgpAQCAtODcsMjYgKzc3LDQ5IEBAIHB1YmxpYzoKICAgICAvLyA0LiBbIF0KICAgICAvLyA1
LiBbY29udGFpbmVyIHN0YXJ0XVtzcGFuMV1bY29udGFpbmVyIGVuZF1bYmV0d2Vlbl1bY29udGFp
bmVyIHN0YXJ0XVtzcGFuMl1bY29udGFpbmVyIGVuZF0KICAgICAvLyBzZWUgaHR0cHM6Ly9kcmFm
dHMuY3Nzd2cub3JnL2Nzcy10ZXh0LTMvI2xpbmUtYnJlYWstZGV0YWlscwotICAgIHN0cnVjdCBD
YW5kaWRhdGVDb250ZW50IHsKLSAgICAgICAgY29uc3QgUnVuTGlzdCYgcnVuczsKLSAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCB7IDAgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCBsb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgY29sbGFw
c2libGVUcmFpbGluZ1dpZHRoIHsgMCB9OworICAgIHN0cnVjdCBDb250aW51b3VzQ29udGVudCB7
CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9sb2dpY2FsV2lkdGg7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbExlZnQ7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBjb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGFwc2libGVM
b2dpY2FsV2lkdGg7IH0KKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBub25Db2xsYXBzaWJsZUxv
Z2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxXaWR0aCgpIC0gY29sbGFwc2libGVM
b2dpY2FsV2lkdGgoKTsgfQorICAgICAgICBib29sIGhhc1RyYWlsaW5nQ29sbGFwc2libGVDb250
ZW50KCkgY29uc3QgeyByZXR1cm4gISFjb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCgpOyB9CisgICAg
ICAgIGJvb2wgaXNGdWxseUNvbGxhcHNpYmxlKCkgY29uc3QgeyByZXR1cm4gbG9naWNhbFdpZHRo
KCkgPT0gY29sbGFwc2libGVMb2dpY2FsV2lkdGgoKTsgfQorCisgICAgICAgIHZvaWQgYXBwZW5k
KGNvbnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgT3B0aW9u
YWw8SW5saW5lTGF5b3V0VW5pdD4gY29sbGFwc2libGVXaWR0aCk7CisgICAgICAgIHZvaWQgcmVz
ZXQoSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpOworCisgICAgICAgIHN0cnVj
dCBSdW4geworICAgICAgICAgICAgUnVuKGNvbnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICBSdW4oY29uc3QgUnVuJik7CisgICAgICAg
ICAgICBSdW4mIG9wZXJhdG9yPShjb25zdCBSdW4mKTsKKworICAgICAgICAgICAgY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbTsKKyAgICAgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNh
bFdpZHRoIHsgMCB9OworICAgICAgICB9OworICAgICAgICB1c2luZyBSdW5MaXN0ID0gVmVjdG9y
PFJ1biwgMz47CisgICAgICAgIGNvbnN0IFJ1bkxpc3QmIHJ1bnMoKSBjb25zdCB7IHJldHVybiBt
X3J1bnM7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFJ1bkxpc3QgbV9ydW5zOworICAgICAg
ICBJbmxpbmVMYXlvdXRVbml0IG1fbG9naWNhbExlZnQgeyAwIH07CisgICAgICAgIElubGluZUxh
eW91dFVuaXQgbV9sb2dpY2FsV2lkdGggeyAwIH07CisgICAgICAgIElubGluZUxheW91dFVuaXQg
bV9jb2xsYXBzaWJsZUxvZ2ljYWxXaWR0aCB7IDAgfTsKICAgICB9OworCiAgICAgc3RydWN0IExp
bmVTdGF0dXMgewogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoIHsgMCB9
OwogICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGNvbGxhcHNpYmxlV2lkdGggeyAwIH07CiAgICAg
ICAgIGJvb2wgbGluZUhhc0Z1bGx5Q29sbGFwc2libGVUcmFpbGluZ1J1biB7IGZhbHNlIH07CiAg
ICAgICAgIGJvb2wgbGluZUlzRW1wdHkgeyB0cnVlIH07CiAgICAgfTsKLSAgICBSZXN1bHQgcHJv
Y2Vzc0lubGluZUNvbnRlbnQoY29uc3QgQ2FuZGlkYXRlQ29udGVudCYsIGNvbnN0IExpbmVTdGF0
dXMmKTsKKyAgICBSZXN1bHQgcHJvY2Vzc0lubGluZUNvbnRlbnQoY29uc3QgQ29udGludW91c0Nv
bnRlbnQmLCBjb25zdCBMaW5lU3RhdHVzJik7CiAKICAgICB2b2lkIHNldEh5cGhlbmF0aW9uRGlz
YWJsZWQoKSB7IG5faHlwaGVuYXRpb25Jc0Rpc2FibGVkID0gdHJ1ZTsgfQogCiBwcml2YXRlOgot
ICAgIFJlc3VsdCBwcm9jZXNzT3ZlcmZsb3dpbmdDb250ZW50KGNvbnN0IENhbmRpZGF0ZUNvbnRl
bnQmLCBjb25zdCBMaW5lU3RhdHVzJikgY29uc3Q7CisgICAgUmVzdWx0IHByb2Nlc3NPdmVyZmxv
d2luZ0NvbnRlbnQoY29uc3QgQ29udGludW91c0NvbnRlbnQmLCBjb25zdCBMaW5lU3RhdHVzJikg
Y29uc3Q7CiAgICAgT3B0aW9uYWw8VHJhaWxpbmdUZXh0Q29udGVudD4gcHJvY2Vzc092ZXJmbG93
aW5nVGV4dENvbnRlbnQoY29uc3QgQ29udGludW91c0NvbnRlbnQmLCBjb25zdCBMaW5lU3RhdHVz
JikgY29uc3Q7Ci0gICAgT3B0aW9uYWw8UGFydGlhbFJ1bj4gdHJ5QnJlYWtpbmdUZXh0UnVuKGNv
bnN0IFJ1biYgb3ZlcmZsb3dSdW4sIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGlu
ZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpIGNvbnN0OworICAgIE9wdGlvbmFsPFBhcnRpYWxS
dW4+IHRyeUJyZWFraW5nVGV4dFJ1bihjb25zdCBDb250aW51b3VzQ29udGVudDo6UnVuJiBvdmVy
Zmxvd1J1biwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aCkgY29uc3Q7CiAKICAgICBlbnVtIGNsYXNzIFdvcmRCcmVha1J1bGUgewog
ICAgICAgICBOb0JyZWFrLApAQCAtMTIxLDEzICsxMzQsMTMgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faGFzV3JhcE9wcG9ydHVuaXR5QXRQcmV2aW91c1Bvc2l0aW9uIHsgZmFsc2UgfTsKIH07CiAK
LWlubGluZSBMaW5lQnJlYWtlcjo6UnVuOjpSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRl
bSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCitpbmxpbmUgTGluZUJyZWFrZXI6OkNv
bnRpbnVvdXNDb250ZW50OjpSdW46OlJ1bihjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJ
bmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKICAgICA6IGlubGluZUl0ZW0oaW5saW5lSXRl
bSkKICAgICAsIGxvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgpCiB7CiB9CiAKLWlubGluZSBMaW5l
QnJlYWtlcjo6UnVuOjpSdW4oY29uc3QgUnVuJiBvdGhlcikKK2lubGluZSBMaW5lQnJlYWtlcjo6
Q29udGludW91c0NvbnRlbnQ6OlJ1bjo6UnVuKGNvbnN0IFJ1biYgb3RoZXIpCiAgICAgOiBpbmxp
bmVJdGVtKG90aGVyLmlubGluZUl0ZW0pCiAgICAgLCBsb2dpY2FsV2lkdGgob3RoZXIubG9naWNh
bFdpZHRoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IDc3YzJmOWE3NTJhZDg1MmJj
YTU2YmU1YzZmYTMwZDgzZWVjOTEzMTEuLjZkMTExYTQyNjI4NGViYzk1NDY1NjczMzAyOGQ3NjM4
YzAxMDBiMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTE2NCwyNyArMTY0LDI0IEBA
IHN0YXRpYyBpbmxpbmUgc2l6ZV90IG5leHRXcmFwT3Bwb3J0dW5pdHkoY29uc3QgSW5saW5lSXRl
bXMmIGlubGluZUNvbnRlbnQsIHNpemVfCiBzdHJ1Y3QgTGluZUNhbmRpZGF0ZSB7CiAgICAgTGlu
ZUNhbmRpZGF0ZShib29sIGlnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyk7CiAKLSAgICB2b2lk
IHJlc2V0KCk7CisgICAgdm9pZCByZXNldChJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
TGVmdCk7CiAKICAgICBzdHJ1Y3QgSW5saW5lQ29udGVudCB7CiAgICAgICAgIElubGluZUNvbnRl
bnQoYm9vbCBpZ25vcmVUcmFpbGluZ0xldHRlclNwYWNpbmcpOwogCi0gICAgICAgIGNvbnN0IExp
bmVCcmVha2VyOjpSdW5MaXN0JiBydW5zKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVSdW5zOyB9
Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9Mb2dpY2FsV2lkdGg7IH0KLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBjb2xsYXBzaWJsZVRy
YWlsaW5nV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbGxhcHNpYmxlVHJhaWxpbmdXaWR0aDsg
fQorICAgICAgICBjb25zdCBMaW5lQnJlYWtlcjo6Q29udGludW91c0NvbnRlbnQmIGNvbnRpbnVv
dXNDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9jb250aW51b3VzQ29udGVudDsgfQogICAgICAg
ICBjb25zdCBJbmxpbmVJdGVtKiB0cmFpbGluZ0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhaWxpbmdMaW5lQnJlYWs7IH0KICAgICAgICAgY29uc3QgSW5saW5lSXRlbSogdHJhaWxpbmdX
b3JkQnJlYWtPcHBvcnR1bml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXb3JkQnJlYWtP
cHBvcnR1bml0eTsgfQogCiAgICAgICAgIHZvaWQgYXBwZW5kSW5saW5lSXRlbShjb25zdCBJbmxp
bmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwogICAgICAgICB2b2lkIGFw
cGVuZFRyYWlsaW5nTGluZUJyZWFrKGNvbnN0IElubGluZUl0ZW0mIGxpbmVCcmVha0l0ZW0pIHsg
bV90cmFpbGluZ0xpbmVCcmVhayA9ICZsaW5lQnJlYWtJdGVtOyB9CiAgICAgICAgIHZvaWQgYXBw
ZW5kdHJhaWxpbmdXb3JkQnJlYWtPcHBvcnR1bml0eShjb25zdCBJbmxpbmVJdGVtJiB3b3JkQnJl
YWtJdGVtKSB7IG1fdHJhaWxpbmdXb3JkQnJlYWtPcHBvcnR1bml0eSA9ICZ3b3JkQnJlYWtJdGVt
OyB9Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAgICAgdm9pZCByZXNldChJbmxpbmVMYXlv
dXRVbml0IGNvbnRlbnRMb2dpY2FsTGVmdCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBib29s
IG1faWdub3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nIHsgZmFsc2UgfTsKLSAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBtX0xvZ2ljYWxXaWR0aCB7IDAgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5p
dCBtX2NvbGxhcHNpYmxlVHJhaWxpbmdXaWR0aCB7IDAgfTsKLSAgICAgICAgTGluZUJyZWFrZXI6
OlJ1bkxpc3QgbV9pbmxpbmVSdW5zOworCisgICAgICAgIExpbmVCcmVha2VyOjpDb250aW51b3Vz
Q29udGVudCBtX2NvbnRpbnVvdXNDb250ZW50OwogICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBt
X3RyYWlsaW5nTGluZUJyZWFrIHsgbnVsbHB0ciB9OwogICAgICAgICBjb25zdCBJbmxpbmVJdGVt
KiBtX3RyYWlsaW5nV29yZEJyZWFrT3Bwb3J0dW5pdHkgeyBudWxscHRyIH07CiAgICAgfTsKQEAg
LTIyNCw0NyArMjIxLDMwIEBAIExpbmVDYW5kaWRhdGU6OklubGluZUNvbnRlbnQ6OklubGluZUNv
bnRlbnQoYm9vbCBpZ25vcmVUcmFpbGluZ0xldHRlclNwYWNpbmcpCiAKIGlubGluZSB2b2lkIExp
bmVDYW5kaWRhdGU6OklubGluZUNvbnRlbnQ6OmFwcGVuZElubGluZUl0ZW0oY29uc3QgSW5saW5l
SXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCiB7Ci0gICAg
bV9Mb2dpY2FsV2lkdGggKz0gbG9naWNhbFdpZHRoOwotICAgIG1faW5saW5lUnVucy5hcHBlbmQo
eyBpbmxpbmVJdGVtLCBsb2dpY2FsV2lkdGggfSk7Ci0KLSAgICBhdXRvIGlzRnVsbHlDb2xsYXBz
aWJsZSA9IFsmXSB7Ci0gICAgICAgIGlmIChpbmxpbmVJdGVtLmlzQm94KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpbmxpbmVJdGVtLmlzVGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmxpbmVUZXh0SXRlbSA9IGRvd25jYXN0PElubGluZVRleHRJdGVtPihp
bmxpbmVJdGVtKTsKLSAgICAgICAgICAgIHJldHVybiBpbmxpbmVUZXh0SXRlbS5pc1doaXRlc3Bh
Y2UoKSAmJiAhVGV4dFV0aWw6OnNob3VsZFByZXNlcnZlVHJhaWxpbmdXaGl0ZXNwYWNlKGlubGlu
ZVRleHRJdGVtLnN0eWxlKCkpOworICAgIEFTU0VSVChpbmxpbmVJdGVtLmlzVGV4dCgpIHx8IGlu
bGluZUl0ZW0uaXNCb3goKSB8fCBpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxp
bmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpOworICAgIGF1dG8gY29sbGFwc2libGVXaWR0aCA9IFsm
XSgpIC0+IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKKyAgICAgICAgaWYgKCFpbmxpbmVJ
dGVtLmlzVGV4dCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgYXV0byYgaW5s
aW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSk7CisgICAg
ICAgIGlmIChpbmxpbmVUZXh0SXRlbS5pc1doaXRlc3BhY2UoKSAmJiAhVGV4dFV0aWw6OnNob3Vs
ZFByZXNlcnZlVHJhaWxpbmdXaGl0ZXNwYWNlKGlubGluZVRleHRJdGVtLnN0eWxlKCkpKSB7Cisg
ICAgICAgICAgICAvLyBGdWxseSBjb2xsYXBzaWJsZSB0cmFpbGluZyBjb250ZW50LgorICAgICAg
ICAgICAgcmV0dXJuIGxvZ2ljYWxXaWR0aDsKICAgICAgICAgfQotICAgICAgICBpZiAoaW5saW5l
SXRlbS5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgaW5saW5lSXRlbS5pc0NvbnRhaW5lckVuZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfTsKLSAgICBpZiAoaXNGdWxseUNvbGxhcHNpYmxl
KCkpIHsKLSAgICAgICAgbV9jb2xsYXBzaWJsZVRyYWlsaW5nV2lkdGggKz0gbG9naWNhbFdpZHRo
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBwYXJ0aWFsbHlDb2xsYXBzaWJs
ZVRyYWlsaW5nV2lkdGggPSBbJl0oKSAtPiBJbmxpbmVMYXlvdXRVbml0IHsKKyAgICAgICAgLy8g
Q2hlY2sgZm9yIHBhcnRpYWxseSBjb2xsYXBzaWJsZSBjb250ZW50LgogICAgICAgICBpZiAobV9p
Z25vcmVUcmFpbGluZ0xldHRlclNwYWNpbmcpCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICBpZiAoIWlubGluZUl0ZW0uaXNUZXh0KCkpCisgICAgICAgIGF1dG8gbGV0dGVyU3BhY2lu
ZyA9IGlubGluZUl0ZW0uc3R5bGUoKS5sZXR0ZXJTcGFjaW5nKCk7CisgICAgICAgIGlmIChsZXR0
ZXJTcGFjaW5nIDw9IDApCiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBpZiAoYXV0
byBsZXR0ZXJTcGFjaW5nID0gaW5saW5lSXRlbS5zdHlsZSgpLmxldHRlclNwYWNpbmcoKTsgbGV0
dGVyU3BhY2luZyA+IDApCi0gICAgICAgICAgICByZXR1cm4gbGV0dGVyU3BhY2luZzsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgQVNTRVJUKGxvZ2ljYWxXaWR0aCA+IGxldHRlclNwYWNp
bmcpOworICAgICAgICByZXR1cm4gbGV0dGVyU3BhY2luZzsKICAgICB9OwotICAgIGlmIChhdXRv
IGNvbGxhcHNpYmxlVHJhaWxpbmdXaWR0aCA9IHBhcnRpYWxseUNvbGxhcHNpYmxlVHJhaWxpbmdX
aWR0aCgpKSB7Ci0gICAgICAgIG1fY29sbGFwc2libGVUcmFpbGluZ1dpZHRoID0gY29sbGFwc2li
bGVUcmFpbGluZ1dpZHRoOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29sbGFwc2li
bGVUcmFpbGluZ1dpZHRoID0geyB9OworICAgIG1fY29udGludW91c0NvbnRlbnQuYXBwZW5kKGlu
bGluZUl0ZW0sIGxvZ2ljYWxXaWR0aCwgY29sbGFwc2libGVXaWR0aCgpKTsKIH0KIAotaW5saW5l
IHZvaWQgTGluZUNhbmRpZGF0ZTo6SW5saW5lQ29udGVudDo6cmVzZXQoKQoraW5saW5lIHZvaWQg
TGluZUNhbmRpZGF0ZTo6SW5saW5lQ29udGVudDo6cmVzZXQoSW5saW5lTGF5b3V0VW5pdCBjb250
ZW50TG9naWNhbExlZnQpCiB7Ci0gICAgbV9Mb2dpY2FsV2lkdGggPSB7IH07Ci0gICAgbV9jb2xs
YXBzaWJsZVRyYWlsaW5nV2lkdGggPSB7IH07Ci0gICAgbV9pbmxpbmVSdW5zLmNsZWFyKCk7Cisg
ICAgbV9jb250aW51b3VzQ29udGVudC5yZXNldChjb250ZW50TG9naWNhbExlZnQpOwogICAgIG1f
dHJhaWxpbmdMaW5lQnJlYWsgPSB7IH07CiAgICAgbV90cmFpbGluZ1dvcmRCcmVha09wcG9ydHVu
aXR5ID0geyB9OwogfQpAQCAtMjgyLDEwICsyNjIsMTAgQEAgaW5saW5lIHZvaWQgTGluZUNhbmRp
ZGF0ZTo6RmxvYXRDb250ZW50OjpyZXNldCgpCiAgICAgbV9pbnRydXNpdmVXaWR0aCA9IHsgfTsK
IH0KIAotaW5saW5lIHZvaWQgTGluZUNhbmRpZGF0ZTo6cmVzZXQoKQoraW5saW5lIHZvaWQgTGlu
ZUNhbmRpZGF0ZTo6cmVzZXQoSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpCiB7
CiAgICAgZmxvYXRDb250ZW50LnJlc2V0KCk7Ci0gICAgaW5saW5lQ29udGVudC5yZXNldCgpOwor
ICAgIGlubGluZUNvbnRlbnQucmVzZXQoY29udGVudExvZ2ljYWxMZWZ0KTsKIH0KIAogSW5saW5l
TGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6aW5saW5lSXRlbVdpZHRoKGNvbnN0IElubGluZUl0ZW0m
IGlubGluZUl0ZW0sIElubGluZUxheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KSBjb25zdApA
QCAtMzgzLDcgKzM2Myw3IEBAIExpbmVCdWlsZGVyOjpDb21taXR0ZWRDb250ZW50IExpbmVCdWls
ZGVyOjpwbGFjZUlubGluZUNvbnRlbnQoY29uc3QgSW5saW5lSXRlbVJhCiAgICAgICAgIGF1dG8g
cmVzdWx0ID0gaGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChsaW5lQnJlYWtlciwgbmVlZHNM
YXlvdXRSYW5nZSwgbGluZUNhbmRpZGF0ZSk7CiAgICAgICAgIGNvbW1pdHRlZElubGluZUl0ZW1D
b3VudCA9IHJlc3VsdC5jb21taXR0ZWRDb3VudC5pc1JldmVydCA/IHJlc3VsdC5jb21taXR0ZWRD
b3VudC52YWx1ZSA6IGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCArIHJlc3VsdC5jb21taXR0ZWRD
b3VudC52YWx1ZTsKICAgICAgICAgYXV0byYgaW5saW5lQ29udGVudCA9IGxpbmVDYW5kaWRhdGUu
aW5saW5lQ29udGVudDsKLSAgICAgICAgYXV0byBpbmxpbmVDb250ZW50SXNGdWxseUNvbW1pdHRl
ZCA9IGlubGluZUNvbnRlbnQucnVucygpLnNpemUoKSA9PSByZXN1bHQuY29tbWl0dGVkQ291bnQu
dmFsdWUgJiYgIXJlc3VsdC5wYXJ0aWFsQ29udGVudDsKKyAgICAgICAgYXV0byBpbmxpbmVDb250
ZW50SXNGdWxseUNvbW1pdHRlZCA9IGlubGluZUNvbnRlbnQuY29udGludW91c0NvbnRlbnQoKS5y
dW5zKCkuc2l6ZSgpID09IHJlc3VsdC5jb21taXR0ZWRDb3VudC52YWx1ZSAmJiAhcmVzdWx0LnBh
cnRpYWxDb250ZW50OwogICAgICAgICBhdXRvIGlzRW5kT2ZMaW5lID0gcmVzdWx0LmlzRW5kT2ZM
aW5lID09IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6WWVzOwogCiAgICAgICAgIGlmIChhdXRv
KiB3b3JkQnJlYWtPcHBvcnR1bml0eSA9IGlubGluZUNvbnRlbnQudHJhaWxpbmdXb3JkQnJlYWtP
cHBvcnR1bml0eSgpKSB7CkBAIC01MDIsNyArNDgyLDcgQEAgTGluZUJ1aWxkZXI6OlVzZWRDb25z
dHJhaW50cyBMaW5lQnVpbGRlcjo6Y29uc3RyYWludHNGb3JMaW5lKGNvbnN0IEZvcm1hdHRpbmdD
b24KIHZvaWQgTGluZUJ1aWxkZXI6Om5leHRDb250ZW50Rm9yTGluZShMaW5lQ2FuZGlkYXRlJiBs
aW5lQ2FuZGlkYXRlLCBzaXplX3QgY3VycmVudElubGluZUl0ZW1JbmRleCwgY29uc3QgSW5saW5l
SXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgT3B0aW9uYWw8c2l6ZV90PiBwYXJ0aWFsTGVhZGluZ0Nv
bnRlbnRMZW5ndGgsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlTGluZVdpZHRoLCBJbmxpbmVM
YXlvdXRVbml0IGN1cnJlbnRMb2dpY2FsUmlnaHQpCiB7CiAgICAgQVNTRVJUKGN1cnJlbnRJbmxp
bmVJdGVtSW5kZXggPCBsYXlvdXRSYW5nZS5lbmQpOwotICAgIGxpbmVDYW5kaWRhdGUucmVzZXQo
KTsKKyAgICBsaW5lQ2FuZGlkYXRlLnJlc2V0KGN1cnJlbnRMb2dpY2FsUmlnaHQpOwogICAgIC8v
IDEuIFNpbXBseSBhZGQgYW55IG92ZXJmbG93IGNvbnRlbnQgZnJvbSB0aGUgcHJldmlvdXMgbGlu
ZSB0byB0aGUgY2FuZGlkYXRlIGNvbnRlbnQuIEl0J3MgYWx3YXlzIGEgdGV4dCBjb250ZW50Lgog
ICAgIC8vIDIuIEZpbmQgdGhlIG5leHQgc29mdCB3cmFwIHBvc2l0aW9uIG9yIGV4cGxpY2l0IGxp
bmUgYnJlYWsuCiAgICAgLy8gMy4gQ29sbGVjdCBmbG9hdHMgYmV0d2VlbiB0aGUgaW5saW5lIGNv
bnRlbnQuCkBAIC01ODMsOSArNTYzLDggQEAgdm9pZCBMaW5lQnVpbGRlcjo6Y29tbWl0RmxvYXRz
KGNvbnN0IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2kKIAogTGlu
ZUJ1aWxkZXI6OlJlc3VsdCBMaW5lQnVpbGRlcjo6aGFuZGxlRmxvYXRzQW5kSW5saW5lQ29udGVu
dChMaW5lQnJlYWtlciYgbGluZUJyZWFrZXIsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0
UmFuZ2UsIGNvbnN0IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUpCiB7Ci0gICAgYXV0byYg
Y2FuZGlkYXRlSW5saW5lQ29udGVudCA9IGxpbmVDYW5kaWRhdGUuaW5saW5lQ29udGVudDsKLSAg
ICBhdXRvJiBjYW5kaWRhdGVSdW5zID0gY2FuZGlkYXRlSW5saW5lQ29udGVudC5ydW5zKCk7Ci0g
ICAgaWYgKGNhbmRpZGF0ZVJ1bnMuaXNFbXB0eSgpKSB7CisgICAgYXV0byYgY29udGludW91c0lu
bGluZUNvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmlubGluZUNvbnRlbnQuY29udGludW91c0NvbnRl
bnQoKTsKKyAgICBpZiAoY29udGludW91c0lubGluZUNvbnRlbnQucnVucygpLmlzRW1wdHkoKSkg
ewogICAgICAgICBjb21taXRGbG9hdHMobGluZUNhbmRpZGF0ZSk7CiAgICAgICAgIHJldHVybiB7
IExpbmVCcmVha2VyOjpJc0VuZE9mTGluZTo6Tm8gfTsKICAgICB9CkBAIC02MDMsMTAgKzU4Miwx
MCBAQCBMaW5lQnVpbGRlcjo6UmVzdWx0IExpbmVCdWlsZGVyOjpoYW5kbGVGbG9hdHNBbmRJbmxp
bmVDb250ZW50KExpbmVCcmVha2VyJiBsaW5lQgogICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBt
X2xpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGZsb2F0Q29udGVudC5pbnRydXNpdmVXaWR0aCgpOwog
ICAgIGF1dG8gaXNMaW5lQ29uc2lkZXJlZEVtcHR5ID0gbV9saW5lLmlzVmlzdWFsbHlFbXB0eSgp
ICYmICFtX2NvbnRlbnRJc0NvbnN0cmFpbmVkQnlGbG9hdDsKICAgICBhdXRvIGxpbmVTdGF0dXMg
PSBMaW5lQnJlYWtlcjo6TGluZVN0YXR1cyB7IGF2YWlsYWJsZVdpZHRoLCBtX2xpbmUudHJpbW1h
YmxlVHJhaWxpbmdXaWR0aCgpLCBtX2xpbmUuaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCks
IGlzTGluZUNvbnNpZGVyZWRFbXB0eSB9OwotICAgIGF1dG8gY29udGVudExvZ2ljYWxMZWZ0ID0g
bV9saW5lLmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKLSAgICBhdXRvIHJlc3VsdCA9IGxpbmVCcmVh
a2VyLnByb2Nlc3NJbmxpbmVDb250ZW50KHsgY2FuZGlkYXRlUnVucywgY29udGVudExvZ2ljYWxM
ZWZ0LCBjYW5kaWRhdGVJbmxpbmVDb250ZW50LmxvZ2ljYWxXaWR0aCgpLCBjYW5kaWRhdGVJbmxp
bmVDb250ZW50LmNvbGxhcHNpYmxlVHJhaWxpbmdXaWR0aCgpIH0sIGxpbmVTdGF0dXMpOworICAg
IGF1dG8gcmVzdWx0ID0gbGluZUJyZWFrZXIucHJvY2Vzc0lubGluZUNvbnRlbnQoY29udGludW91
c0lubGluZUNvbnRlbnQsIGxpbmVTdGF0dXMpOwogICAgIGlmIChyZXN1bHQubGFzdFdyYXBPcHBv
cnR1bml0eUl0ZW0pCiAgICAgICAgIG1fbGFzdFdyYXBPcHBvcnR1bml0eUl0ZW0gPSByZXN1bHQu
bGFzdFdyYXBPcHBvcnR1bml0eUl0ZW07CisgICAgYXV0byYgY2FuZGlkYXRlUnVucyA9IGNvbnRp
bnVvdXNJbmxpbmVDb250ZW50LnJ1bnMoKTsKICAgICBpZiAocmVzdWx0LmFjdGlvbiA9PSBMaW5l
QnJlYWtlcjo6UmVzdWx0OjpBY3Rpb246OktlZXApIHsKICAgICAgICAgLy8gVGhpcyBjb250aW51
b3VzIGNvbnRlbnQgY2FuIGJlIGZ1bGx5IHBsYWNlZCBvbiB0aGUgY3VycmVudCBsaW5lIGluY2x1
ZGluZyBub24taW50cnVzaXZlIGZsb2F0cy4KICAgICAgICAgZm9yIChhdXRvJiBydW4gOiBjYW5k
aWRhdGVSdW5zKQpAQCAtNjQ4LDcgKzYyNyw3IEBAIExpbmVCdWlsZGVyOjpSZXN1bHQgTGluZUJ1
aWxkZXI6OmhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGluZUJyZWFrZXImIGxpbmVCCiAg
ICAgcmV0dXJuIHsgTGluZUJyZWFrZXI6OklzRW5kT2ZMaW5lOjpObyB9OwogfQogCi12b2lkIExp
bmVCdWlsZGVyOjpjb21taXRQYXJ0aWFsQ29udGVudChjb25zdCBMaW5lQnJlYWtlcjo6UnVuTGlz
dCYgcnVucywgY29uc3QgTGluZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVu
dCYgcGFydGlhbFRyYWlsaW5nQ29udGVudCkKK3ZvaWQgTGluZUJ1aWxkZXI6OmNvbW1pdFBhcnRp
YWxDb250ZW50KGNvbnN0IExpbmVCcmVha2VyOjpDb250aW51b3VzQ29udGVudDo6UnVuTGlzdCYg
cnVucywgY29uc3QgTGluZUJyZWFrZXI6OlJlc3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYg
cGFydGlhbFRyYWlsaW5nQ29udGVudCkKIHsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgcnVucy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAgYXV0byYgcnVuID0gcnVuc1tp
bmRleF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRleCAwNWU5NTQwMDYzYzU0MWY4YTA3MDI4ZGFi
MzNlZmMyNTJhNDQ0ODA4Li4xNzRhNTVmYTY1YTNhNjVkYzU0YWI1NzY1NDQ2NTk4NjEyNDc3Zjc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTk3LDcgKzk3LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNvbW1pdEZsb2F0cyhjb25zdCBMaW5lQ2FuZGlkYXRlJiwgQ29tbWl0SW50cnVzaXZlRmxv
YXRzT25seSA9IENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHk6Ok5vKTsKICAgICBSZXN1bHQgaGFu
ZGxlRmxvYXRzQW5kSW5saW5lQ29udGVudChMaW5lQnJlYWtlciYsIGNvbnN0IElubGluZUl0ZW1S
YW5nZSYgbmVlZHNMYXlvdXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYpOwogICAgIHNpemVf
dCByZWJ1aWxkTGluZShjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIG5lZWRzTGF5b3V0UmFuZ2UpOwot
ICAgIHZvaWQgY29tbWl0UGFydGlhbENvbnRlbnQoY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3Qm
LCBjb25zdCBMaW5lQnJlYWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50Jik7Cisg
ICAgdm9pZCBjb21taXRQYXJ0aWFsQ29udGVudChjb25zdCBMaW5lQnJlYWtlcjo6Q29udGludW91
c0NvbnRlbnQ6OlJ1bkxpc3QmLCBjb25zdCBMaW5lQnJlYWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJh
aWxpbmdDb250ZW50Jik7CiAgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFVzZWRDb25zdHJhaW50
cyYpOwogICAgIHN0cnVjdCBDb21taXR0ZWRDb250ZW50IHsKICAgICAgICAgc2l6ZV90IGlubGlu
ZUl0ZW1Db3VudCB7IDAgfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>