<?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>9853</bug_id>
          
          <creation_ts>2006-07-11 10:41:47 -0700</creation_ts>
          <short_desc>improvements to select element, including some storage leak fixes</short_desc>
          <delta_ts>2006-07-11 19:48:53 -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>Forms</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>9809</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>49313</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-11 10:41:47 -0700</bug_when>
    <thetext>I have some improvements for &lt;select&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49314</commentid>
    <comment_count>1</comment_count>
      <attachid>9371</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-11 10:42:10 -0700</bug_when>
    <thetext>Created attachment 9371
first cut, for Adele to look at</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49334</commentid>
    <comment_count>2</comment_count>
      <attachid>9371</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2006-07-11 12:06:08 -0700</bug_when>
    <thetext>Comment on attachment 9371
first cut, for Adele to look at

I think this looks good.  We need bugs about some of the FIXMEs.  For example, I don&apos;t think we handle the switch from popup to list box.  I&apos;ll work on some test cases, and start filing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>49376</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-11 19:48:53 -0700</bug_when>
    <thetext>I&apos;m going to mark this as a &quot;duplicate&quot; of bug 9809 since a single patch is going to put in the fixes from here and fix that bug.

*** This bug has been marked as a duplicate of 9809 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>9371</attachid>
            <date>2006-07-11 10:42:10 -0700</date>
            <delta_ts>2006-07-11 12:06:08 -0700</delta_ts>
            <desc>first cut, for Adele to look at</desc>
            <filename>SelectPatch.txt</filename>
            <type>text/plain</type>
            <size>35790</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNTMyOSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTkxLDIzICsxNTkxLDYgQEAKIAkJRkFFMDQxOTAwOTc1OTZDOTAw
MDU0MEJFIC8qIFNWR0ltYWdlTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGQUUwNDE4RTA5NzU5NkM5MDAwNTQwQkUgLyogU1ZHSW1hZ2VMb2Fk
ZXIuaCAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCi0vKiBCZWdpbiBQ
QlhCdWlsZFN0eWxlIHNlY3Rpb24gKi8KLQkJRDBEQkNCNzkwQTYzMDNFQzAwN0ZBMzg2IC8qIERl
dmVsb3BtZW50ICovID0gewotCQkJaXNhID0gUEJYQnVpbGRTdHlsZTsKLQkJCWJ1aWxkU2V0dGlu
Z3MgPSB7Ci0JCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POwotCQkJfTsKLQkJCW5hbWUgPSBEZXZl
bG9wbWVudDsKLQkJfTsKLQkJRDBEQkNCN0EwQTYzMDNFQzAwN0ZBMzg2IC8qIERlcGxveW1lbnQg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhCdWlsZFN0eWxlOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJ
CQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOwotCQkJfTsKLQkJCW5hbWUgPSBEZXBsb3ltZW50Owot
CQl9OwotLyogRW5kIFBCWEJ1aWxkU3R5bGUgc2VjdGlvbiAqLwotCiAvKiBCZWdpbiBQQlhDb250
YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwogCQlERDA0MUZGMDA5RDlFMzI1MDAxMEFGMkEgLyog
UEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVBy
b3h5OwpAQCAtNjQyNywxMiArNjQxMCw2IEBACiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAv
KiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENv
bmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87Ci0JCQlidWlsZFNldHRp
bmdzID0gewotCQkJfTsKLQkJCWJ1aWxkU3R5bGVzID0gKAotCQkJCUQwREJDQjc5MEE2MzAzRUMw
MDdGQTM4NiAvKiBEZXZlbG9wbWVudCAqLywKLQkJCQlEMERCQ0I3QTBBNjMwM0VDMDA3RkEzODYg
LyogRGVwbG95bWVudCAqLywKLQkJCSk7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsK
IAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTMyOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9u
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBpbnQgSFRNTE9w
dGlvbkVsZW1lbnQ6OmluZGV4KCkgY29uc3QKICAgICAvLyB3ZSB3b24ndCBmb3JnZXQgdG8gdXBk
YXRlIGEgbWVtYmVyIHZhcmlhYmxlIGluIHNvbWUgY2FzZXMuLi4KICAgICBIVE1MU2VsZWN0RWxl
bWVudCAqc2VsZWN0ID0gZ2V0U2VsZWN0KCk7CiAgICAgaWYgKHNlbGVjdCkgewotICAgICAgICBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CisgICAgICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7
CiAgICAgICAgIGludCBsID0gaXRlbXMuc2l6ZSgpOwogICAgICAgICBpbnQgb3B0aW9uSW5kZXgg
PSAwOwogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbDsgaSsrKSB7CkBAIC0xNjIsMTkgKzE2
MiwxOCBAQCBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKICAgICByZXR1
cm4gdGV4dCgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKTsKIH0KIAotdm9p
ZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKK3ZvaWQg
SFRNTE9wdGlvbkVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAg
c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgdmFsdWUpOwogfQogCi12b2lkIEhUTUxPcHRpb25FbGVt
ZW50OjpzZXRTZWxlY3RlZChib29sIF9zZWxlY3RlZCkKK3ZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6
OnNldFNlbGVjdGVkKGJvb2wgc2VsZWN0ZWQpCiB7Ci0gICAgaWYobV9zZWxlY3RlZCA9PSBfc2Vs
ZWN0ZWQpCisgICAgaWYgKG1fc2VsZWN0ZWQgPT0gc2VsZWN0ZWQpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX3NlbGVjdGVkID0gX3NlbGVjdGVkOwotICAgIEhUTUxTZWxlY3RFbGVtZW50ICpzZWxl
Y3QgPSBnZXRTZWxlY3QoKTsKLSAgICBpZiAoc2VsZWN0KQotICAgICAgICBzZWxlY3QtPm5vdGlm
eU9wdGlvblNlbGVjdGVkKHRoaXMsX3NlbGVjdGVkKTsKKyAgICBtX3NlbGVjdGVkID0gc2VsZWN0
ZWQ7CisgICAgaWYgKEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBnZXRTZWxlY3QoKSkKKyAg
ICAgICAgc2VsZWN0LT5ub3RpZnlPcHRpb25TZWxlY3RlZCh0aGlzLCBzZWxlY3RlZCk7CiB9CiAK
IHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1MzI5KQorKysgV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCBpbnQg
SFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5kZXgoKSBjCiB7CiAgICAgLy8gcmV0dXJuIHRo
ZSBudW1iZXIgb2YgdGhlIGZpcnN0IG9wdGlvbiBzZWxlY3RlZAogICAgIHVuc2lnbmVkIG8gPSAw
OwotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAo
aXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKSB7CiAgICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCkBAIC0x
MDksMTAgKzEwOSwxMCBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdGVkSW5kZXgoKSBj
CiAgICAgcmV0dXJuIC0xOwogfQogCi12b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3Rl
ZEluZGV4KCBpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgKQordm9pZCBIVE1MU2VsZWN0RWxlbWVu
dDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QpCiB7CiAgICAgLy8g
ZGVzZWxlY3QgYWxsIG90aGVyIG9wdGlvbnMgYW5kIHNlbGVjdCBvbmx5IHRoZSBuZXcgb25lCi0g
ICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdElu
ZGV4OwogICAgIGlmIChkZXNlbGVjdCkgewogICAgICAgICBmb3IgKGxpc3RJbmRleCA9IDA7IGxp
c3RJbmRleCA8IGludChpdGVtcy5zaXplKCkpOyBsaXN0SW5kZXgrKykgewpAQCAtMTMxLDcgKzEz
MSw3IEBAIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBpbnQg
bGVuID0gMDsKICAgICB1bnNpZ25lZCBpOwotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1z
ID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0g
bGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CiAg
ICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpCiAgICAgICAgICAg
ICBsZW4rKzsKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZW1v
dmUoaW50IGluZGV4CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaW50IGxpc3RJbmRl
eCA9IG9wdGlvblRvTGlzdEluZGV4KGluZGV4KTsKIAotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaWYgKGxpc3RJbmRleCA8IDAgfHwgaW5kZXggPj0gaW50
KGl0ZW1zLnNpemUoKSkpCiAgICAgICAgIHJldHVybjsgLy8gIyMjIHdoYXQgc2hvdWxkIHdlIGRv
ID8gcmVtb3ZlIHRoZSBsYXN0IGl0ZW0/CiAKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpyZW1vdmUoaW50IGluZGV4CiBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6
OnZhbHVlKCkKIHsKICAgICB1bnNpZ25lZCBpOwotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1z
ID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7
CiAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykgJiYgc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSktPnZh
bHVlKCk7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0VmFs
dWUoY29uc3QgUwogICAgICAgICByZXR1cm47CiAgICAgLy8gZmluZCB0aGUgb3B0aW9uIHdpdGgg
dmFsdWUoKSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGFyYW1ldGVyCiAgICAgLy8gYW5kIG1ha2UgaXQg
dGhlIGN1cnJlbnQgc2VsZWN0aW9uLgotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0g
bGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlz
dEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsr
KQogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpICYmIHN0YXRp
Y19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pLT52YWx1ZSgpID09IHZhbHVlKSB7
CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ldKS0+
c2V0U2VsZWN0ZWQodHJ1ZSk7CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudDo6c2V0VmFsdWUoY29uc3QgUwogCiBTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnQ6OnN0YXRl
VmFsdWUoKSBjb25zdAogewotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0
ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1z
KCk7CiAgICAgaW50IGwgPSBpdGVtcy5zaXplKCk7CiAgICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGNo
YXJhY3RlcnMobCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsOyArK2kpIHsKQEAgLTIwNyw3
ICsyMDcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpyZXN0b3JlU3RhdGUoY29uCiB7CiAg
ICAgcmVjYWxjTGlzdEl0ZW1zKCk7CiAKLSAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9
IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxp
c3RJdGVtcygpOwogICAgIGludCBsID0gaXRlbXMuc2l6ZSgpOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbDsgaSsrKQogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25U
YWcpKQpAQCAtMjk5LDcgKzI5OSw3IEBAIFJlbmRlck9iamVjdCAqSFRNTFNlbGVjdEVsZW1lbnQ6
OmNyZWF0ZVIKIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OmFwcGVuZEZvcm1EYXRhKEZvcm1EYXRh
TGlzdCYgbGlzdCwgYm9vbCkKIHsKICAgICBib29sIHN1Y2Nlc3NmdWwgPSBmYWxzZTsKLSAgICBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwogCiAgICAgdW5zaWduZWQgaTsK
ICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKQEAgLTMzMCw3ICszMzAs
NyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50OjphcHBlbmRGb3JtRGF0YShGCiAKIGludCBIVE1M
U2VsZWN0RWxlbWVudDo6b3B0aW9uVG9MaXN0SW5kZXgoaW50IG9wdGlvbkluZGV4KSBjb25zdAog
ewotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaWYgKG9w
dGlvbkluZGV4IDwgMCB8fCBvcHRpb25JbmRleCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSkKICAgICAg
ICAgcmV0dXJuIC0xOwogCkBAIC0zNDgsMTQgKzM0OCwxMyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1l
bnQ6Om9wdGlvblRvTGlzdEluZGV4CiAKIGludCBIVE1MU2VsZWN0RWxlbWVudDo6bGlzdFRvT3B0
aW9uSW5kZXgoaW50IGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICBWZWN0b3I8SFRNTEVsZW1lbnQq
PiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBp
dGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+
PSBpbnQoaXRlbXMuc2l6ZSgpKSB8fAogICAgICAgICAhaXRlbXNbbGlzdEluZGV4XS0+aGFzTG9j
YWxOYW1lKG9wdGlvblRhZykpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGludCBvcHRpb25J
bmRleCA9IDA7IC8vIGFjdHVhbCBpbmRleCBvZiBvcHRpb24gbm90IGNvdW50aW5nIE9QVEdST1VQ
IGVudHJpZXMgdGhhdCBtYXkgYmUgaW4gbGlzdAotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7
IGkgPCBsaXN0SW5kZXg7IGkrKykKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RJbmRleDsg
aSsrKQogICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKQogICAg
ICAgICAgICAgb3B0aW9uSW5kZXgrKzsKICAgICByZXR1cm4gb3B0aW9uSW5kZXg7CkBAIC0zNjYs
NyArMzY1LDcgQEAgUGFzc1JlZlB0cjxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+IEhUTUxTZQogICAg
IHJldHVybiBuZXcgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKHRoaXMpOwogfQogCi12b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0SXRlbXMoKQordm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6
cmVjYWxjTGlzdEl0ZW1zKCkgY29uc3QKIHsKICAgICBOb2RlKiBjdXJyZW50ID0gZmlyc3RDaGls
ZCgpOwogICAgIG1fbGlzdEl0ZW1zLmNsZWFyKCk7CkBAIC00MjMsNyArNDIyLDcgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudDo6cmVzZXQoKQogewogICAgIGJvb2wgb3B0aW9uU2VsZWN0ZWQgPSBm
YWxzZTsKICAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwotICAgIFZlY3Rv
cjxIVE1MRWxlbWVudCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgY29uc3QgVmVjdG9yPEhU
TUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgdW5zaWduZWQgaTsKICAgICBm
b3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgaWYgKGl0ZW1zW2ld
LT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgewpAQCAtNDQwLDkgKzQzOSw3IEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnJlc2V0KCkKICAgICBpZiAoIW9wdGlvblNlbGVjdGVkICYmIGZpcnN0
T3B0aW9uKQogICAgICAgICBmaXJzdE9wdGlvbi0+c2V0U2VsZWN0ZWQodHJ1ZSk7CiAgICAgaWYg
KHJlbmRlcmVyKCkpIHsKLSAgICAgICAgaWYgKHNob3VsZFVzZU1lbnVMaXN0KHJlbmRlcmVyKCkt
PnN0eWxlKCkpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTWVudUxpc3QqPihyZW5k
ZXJlcigpKS0+c2V0U2VsZWN0aW9uQ2hhbmdlZCh0cnVlKTsKLSAgICAgICAgZWxzZQorICAgICAg
ICBpZiAoIXNob3VsZFVzZU1lbnVMaXN0KHJlbmRlcmVyKCktPnN0eWxlKCkpKQogICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RGVwcmVjYXRlZFJlbmRlclNlbGVjdCo+KHJlbmRlcmVyKCkpLT5zZXRT
ZWxlY3Rpb25DaGFuZ2VkKHRydWUpOwogICAgIH0KICAgICBzZXRDaGFuZ2VkKHRydWUpOwpAQCAt
NDUyLDcgKzQ0OSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6Om5vdGlmeU9wdGlvblNlbGUK
IHsKICAgICBpZiAoc2VsZWN0ZWQgJiYgIW1fbXVsdGlwbGUpIHsKICAgICAgICAgLy8gZGVzZWxl
Y3QgYWxsIG90aGVyIG9wdGlvbnMKLSAgICAgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gaXRlbXMg
PSBsaXN0SXRlbXMoKTsKKyAgICAgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1z
ID0gbGlzdEl0ZW1zKCk7CiAgICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNM
b2NhbE5hbWUob3B0aW9uVGFnKSkKQEAgLTQ2MCw5ICs0NTcsNyBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50Ojpub3RpZnlPcHRpb25TZWxlCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHJlbmRl
cmVyKCkpIHsKLSAgICAgICAgaWYgKHNob3VsZFVzZU1lbnVMaXN0KHJlbmRlcmVyKCktPnN0eWxl
KCkpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTWVudUxpc3QqPihyZW5kZXJlcigp
KS0+c2V0U2VsZWN0aW9uQ2hhbmdlZCh0cnVlKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAo
IXNob3VsZFVzZU1lbnVMaXN0KHJlbmRlcmVyKCktPnN0eWxlKCkpKQogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8RGVwcmVjYXRlZFJlbmRlclNlbGVjdCo+KHJlbmRlcmVyKCkpLT5zZXRTZWxlY3Rp
b25DaGFuZ2VkKHRydWUpOwogICAgIH0KIApAQCAtNDgyLDExICs0NzcsMTMgQEAgdm9pZCBIVE1M
U2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogICAgICAgICAgICAgZXZ0LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoa2V5SWRlbnRpZmllciA9PSAi
RG93biIgfHwga2V5SWRlbnRpZmllciA9PSAiVXAiIHx8IGtleUlkZW50aWZpZXIgPT0gIlUrMDAw
MDIwIikgJiYgcmVuZGVyZXIoKSAmJiBzaG91bGRVc2VNZW51TGlzdChyZW5kZXJlcigpLT5zdHls
ZSgpKSkgeworICAgICAgICAgICAgZm9jdXMoKTsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlck1lbnVMaXN0Kj4ocmVuZGVyZXIoKSktPnNob3dQb3B1cCgpOwogICAgICAgICAgICAgZXZ0
LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChldnQtPnR5
cGUoKSA9PSBtb3VzZWRvd25FdmVudCAmJiByZW5kZXJlcigpICYmIHNob3VsZFVzZU1lbnVMaXN0
KHJlbmRlcmVyKCktPnN0eWxlKCkpKSB7CisgICAgICAgIGZvY3VzKCk7CiAgICAgICAgIHN0YXRp
Y19jYXN0PFJlbmRlck1lbnVMaXN0Kj4ocmVuZGVyZXIoKSktPnNob3dQb3B1cCgpOwogICAgICAg
ICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RF
bGVtZW50LmgJKHJldmlzaW9uIDE1MzI5KQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxMiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIERlcHJlY2F0ZWRSZW5kZXJTZWxlY3Q7CiBjbGFzcyBIVE1MT3B0aW9u
RWxlbWVudDsKIGNsYXNzIEhUTUxPcHRpb25zQ29sbGVjdGlvbjsKLWNsYXNzIERlcHJlY2F0ZWRS
ZW5kZXJTZWxlY3Q7CiAKIGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50IDogcHVibGljIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnQgewogICAgIGZyaWVuZCBjbGFzcyBEZXByZWNhdGVkUmVuZGVyU2VsZWN0
OwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJNZW51TGlzdDsKLQogcHVibGljOgogICAgIEhUTUxT
ZWxlY3RFbGVtZW50KERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwogICAgIEhUTUxT
ZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgSFRN
TEZvcm1FbGVtZW50KiA9IDApOwpAQCAtMTAwLDEwICs5OCwxMCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldFJlY2FsY0xpc3RJdGVtcygpOwogCi0gICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlz
dEl0ZW1zKCkgY29uc3QKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1z
KCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3JlY2FsY0xpc3RJdGVtcykKLSAgICAgICAg
ICAgIGNvbnN0X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPih0aGlzKS0+cmVjYWxjTGlzdEl0ZW1z
KCk7CisgICAgICAgICAgICByZWNhbGNMaXN0SXRlbXMoKTsKICAgICAgICAgcmV0dXJuIG1fbGlz
dEl0ZW1zOwogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKTsKQEAgLTEyNCwxNCArMTIy
LDE0IEBAIHB1YmxpYzoKICAgICBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8qIGNvbGxl
Y3Rpb25JbmZvKCkgeyByZXR1cm4gJm1fY29sbGVjdGlvbkluZm87IH0KIAogcHJpdmF0ZToKLSAg
ICB2b2lkIHJlY2FsY0xpc3RJdGVtcygpOwotICAgIGJvb2wgc2hvdWxkVXNlTWVudUxpc3QoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVybiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0g
MTsgfQorICAgIHZvaWQgcmVjYWxjTGlzdEl0ZW1zKCkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRV
c2VNZW51TGlzdChSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuICFtX211bHRpcGxlICYmIG1f
c2l6ZSA8PSAxOyB9CiAKICAgICBtdXRhYmxlIFZlY3RvcjxIVE1MRWxlbWVudCo+IG1fbGlzdEl0
ZW1zOwogICAgIGludCBtX21pbndpZHRoOwogICAgIGludCBtX3NpemU7CiAgICAgYm9vbCBtX211
bHRpcGxlOwotICAgIGJvb2wgbV9yZWNhbGNMaXN0SXRlbXM7CisgICAgbXV0YWJsZSBib29sIG1f
cmVjYWxjTGlzdEl0ZW1zOwogICAgIAogICAgIEhUTUxDb2xsZWN0aW9uOjpDb2xsZWN0aW9uSW5m
byBtX2NvbGxlY3Rpb25JbmZvOwogfTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0RlcHJlY2F0
ZWRSZW5kZXJTZWxlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0RlcHJl
Y2F0ZWRSZW5kZXJTZWxlY3QuY3BwCShyZXZpc2lvbiAxNTMyOSkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL0RlcHJlY2F0ZWRSZW5kZXJTZWxlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOSAr
MTAyLDggQEAgdm9pZCBEZXByZWNhdGVkUmVuZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRQogCiAgICAg
Ly8gdXBkYXRlIGNvbnRlbnRzIGxpc3Rib3gvY29tYm9ib3ggYmFzZWQgb24gb3B0aW9ucyBpbiBt
X2VsZW1lbnQKICAgICBpZiAobV9vcHRpb25zQ2hhbmdlZCkgewotICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpLT5tX3JlY2FsY0xpc3RJdGVtcykKLSAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+cmVjYWxj
TGlzdEl0ZW1zKCk7Ci0gICAgICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IHN0
YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+bGlzdEl0ZW1zKCk7CisgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+cmVjYWxjTGlzdEl0
ZW1zKCk7CisgICAgICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBz
dGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSktPmxpc3RJdGVtcygpOwogICAg
ICAgICBpbnQgbGlzdEluZGV4OwogCiAgICAgICAgIGlmIChtX3VzZUxpc3RCb3gpCkBAIC0yMzUs
NyArMjM0LDcgQEAgdm9pZCBEZXByZWNhdGVkUmVuZGVyU2VsZWN0OjpsYXlvdXQoKQogICAgIFJl
bmRlckZvcm1FbGVtZW50OjpsYXlvdXQoKTsKIAogICAgIC8vIGFuZCBub3cgZGlzYWJsZSB0aGUg
d2lkZ2V0IGluIGNhc2UgdGhlcmUgaXMgbm8gPG9wdGlvbj4gZ2l2ZW4KLSAgICBWZWN0b3I8SFRN
TEVsZW1lbnQqPiBsaXN0SXRlbXMgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5v
ZGUoKSktPmxpc3RJdGVtcygpOworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0
SXRlbXMgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSktPmxpc3RJdGVt
cygpOwogCiAgICAgYm9vbCBmb3VuZE9wdGlvbiA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6ZSgpICYmICFmb3VuZE9wdGlvbjsgaSsrKQpAQCAtMjUz
LDcgKzI1Miw3IEBAIHZvaWQgRGVwcmVjYXRlZFJlbmRlclNlbGVjdDo6dmFsdWVDaGFuZ2UKIAog
ICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PFBvcFVwQnV0dG9uKj4obV93aWRnZXQpLT5jdXJy
ZW50SXRlbSgpOwogCi0gICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpLT5saXN0SXRlbXMoKTsKKyAgICBjb25z
dCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVj
dEVsZW1lbnQqPihub2RlKCkpLT5saXN0SXRlbXMoKTsKICAgICBpZiAoaW5kZXggPj0gMCAmJiBp
bmRleCA8IChpbnQpbGlzdEl0ZW1zLnNpemUoKSkgewogICAgICAgICBib29sIGZvdW5kID0gbGlz
dEl0ZW1zW2luZGV4XS0+aGFzVGFnTmFtZShvcHRpb25UYWcpOwogICAgICAgICBpZiAoIWZvdW5k
KSB7CkBAIC0yOTksNyArMjk4LDcgQEAgdm9pZCBEZXByZWNhdGVkUmVuZGVyU2VsZWN0OjpzZWxl
Y3Rpb25DaAogCiAgICAgLy8gZG9uJ3QgdXNlIGxpc3RJdGVtcygpIGhlcmUgYXMgd2UgaGF2ZSB0
byBhdm9pZCByZWNhbGN1bGF0aW9ucyAtIGNoYW5naW5nIHRoZQogICAgIC8vIG9wdGlvbiBsaXN0
IHdpbGwgbWFrZSB1c2UgdXBkYXRlIG9wdGlvbnMgbm90IGluIHRoZSB3YXkgdGhlIHVzZXIgZXhw
ZWN0cyB0aGVtCi0gICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gc3RhdGljX2Nh
c3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpLT5tX2xpc3RJdGVtczsKKyAgICBjb25zdCBW
ZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVs
ZW1lbnQqPihub2RlKCkpLT5tX2xpc3RJdGVtczsKICAgICBpbnQgaiA9IDA7CiAgICAgdW5zaWdu
ZWQgc2l6ZSA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7IGkrKykgewpAQCAtMzI5LDcgKzMyOCw3IEBAIExpc3RCb3gqIERlcHJlY2F0ZWRSZW5k
ZXJTZWxlY3Q6OmNyZWF0ZUwKIAogdm9pZCBEZXByZWNhdGVkUmVuZGVyU2VsZWN0Ojp1cGRhdGVT
ZWxlY3Rpb24oKQogewotICAgIFZlY3RvcjxIVE1MRWxlbWVudCo+IGxpc3RJdGVtcyA9IHN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+bGlzdEl0ZW1zKCk7CisgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHN0YXRpY19jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50Kj4obm9kZSgpKS0+bGlzdEl0ZW1zKCk7CiAgICAgaW50IGk7CiAgICAgaWYgKG1f
dXNlTGlzdEJveCkgewogICAgICAgICAvLyBpZiBtdWx0aS1zZWxlY3QsIHdlIHNlbGVjdCBvbmx5
IHRoZSBuZXcgc2VsZWN0ZWQgaW5kZXgKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1l
bnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5jcHAJKHJldmlzaW9uIDE1MzI5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMCArMjQsMTEgQEAKICNpbmNsdWRlICJSZW5k
ZXJNZW51TGlzdC5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFNlbGVjdEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTQyLDQ1ICs0Myw0MCBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogUmVuZGVyTWVudUxpc3Q6OlJlbmRlck1lbnVMaXN0KEhU
TUxTZWxlY3RFbGVtZW50KiBlbGVtZW50KQogICAgIDogUmVuZGVyRmxleGlibGVCb3goZWxlbWVu
dCkKICAgICAsIG1fYnV0dG9uVGV4dCgwKQotICAgICwgbV9pbm5lcigwKQotICAgICwgbV9wb3B1
cE1lbnUoMCkKLSAgICAsIG1fc2l6ZShlbGVtZW50LT5zaXplKCkpCi0gICAgLCBtX3NlbGVjdGlv
bkNoYW5nZWQodHJ1ZSkKKyAgICAsIG1faW5uZXJCbG9jaygwKQogICAgICwgbV9vcHRpb25zQ2hh
bmdlZCh0cnVlKQotICAgICwgbV9sb25nZXN0V2lkdGgoMCkKLSAgICAsIG1fc2VsZWN0ZWRJbmRl
eCgwKQorICAgICwgbV9vcHRpb25zV2lkdGgoMCkKIHsKIH0KIAogdm9pZCBSZW5kZXJNZW51TGlz
dDo6Y3JlYXRlSW5uZXJCbG9jaygpCiB7Ci0gICAgaWYgKG1faW5uZXIpIHsKLSAgICAgICAgQVNT
RVJUKGZpcnN0Q2hpbGQoKSA9PSBtX2lubmVyKTsKLSAgICAgICAgQVNTRVJUKCFtX2lubmVyLT5u
ZXh0U2libGluZygpKTsKKyAgICBpZiAobV9pbm5lckJsb2NrKSB7CisgICAgICAgIEFTU0VSVChm
aXJzdENoaWxkKCkgPT0gbV9pbm5lckJsb2NrKTsKKyAgICAgICAgQVNTRVJUKCFtX2lubmVyQmxv
Y2stPm5leHRTaWJsaW5nKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gQ3Jl
YXRlIGFuIGFub255bW91cyBibG9jay4KICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7Ci0gICAg
bV9pbm5lciA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAgbV9pbm5lci0+c3R5bGUoKS0+
c2V0Qm94RmxleCgxLjBmKTsKLSAgICBSZW5kZXJGbGV4aWJsZUJveDo6YWRkQ2hpbGQobV9pbm5l
cik7CisgICAgbV9pbm5lckJsb2NrID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICBtX2lu
bmVyQmxvY2stPnN0eWxlKCktPnNldEJveEZsZXgoMS4wZik7CisgICAgUmVuZGVyRmxleGlibGVC
b3g6OmFkZENoaWxkKG1faW5uZXJCbG9jayk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFk
ZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQp
CiB7CiAgICAgY3JlYXRlSW5uZXJCbG9jaygpOwotICAgIG1faW5uZXItPmFkZENoaWxkKG5ld0No
aWxkLCBiZWZvcmVDaGlsZCk7CisgICAgbV9pbm5lckJsb2NrLT5hZGRDaGlsZChuZXdDaGlsZCwg
YmVmb3JlQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlck1lbnVMaXN0OjpyZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QqIG9sZENoaWxkKQogewotICAgIGlmIChvbGRDaGlsZCA9PSBtX2lubmVyIHx8ICFt
X2lubmVyKSB7CisgICAgaWYgKG9sZENoaWxkID09IG1faW5uZXJCbG9jayB8fCAhbV9pbm5lckJs
b2NrKSB7CiAgICAgICAgIFJlbmRlckZsZXhpYmxlQm94OjpyZW1vdmVDaGlsZChvbGRDaGlsZCk7
Ci0gICAgICAgIG1faW5uZXIgPSAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIG1faW5uZXIt
PnJlbW92ZUNoaWxkKG9sZENoaWxkKTsKKyAgICAgICAgbV9pbm5lckJsb2NrID0gMDsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9pbm5lckJsb2NrLT5yZW1vdmVDaGlsZChvbGRDaGlsZCk7CiB9CiAK
IHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKQEAgLTg4
LDQ2ICs4NCwzNiBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRTdHlsZShSZW5kZXJTdHlsCiAg
ICAgUmVuZGVyQmxvY2s6OnNldFN0eWxlKHN0eWxlKTsKICAgICBpZiAobV9idXR0b25UZXh0KQog
ICAgICAgICBtX2J1dHRvblRleHQtPnNldFN0eWxlKHN0eWxlKTsKLSAgICBpZiAobV9pbm5lcikK
LSAgICAgICAgbV9pbm5lci0+c3R5bGUoKS0+c2V0Qm94RmxleCgxLjBmKTsKLSAgICBpZiAobV9w
b3B1cE1lbnUpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIG5ld1N0eWxlID0gbmV3IChyZW5kZXJB
cmVuYSgpKSBSZW5kZXJTdHlsZTsKLSAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHN0eWxl
KTsKLSAgICAgICAgbV9wb3B1cE1lbnUtPnNldFN0eWxlKG5ld1N0eWxlKTsKLSAgICB9CisgICAg
aWYgKG1faW5uZXJCbG9jaykKKyAgICAgICAgbV9pbm5lckJsb2NrLT5zdHlsZSgpLT5zZXRCb3hG
bGV4KDEuMGYpOwogICAgIHNldFJlcGxhY2VkKGlzSW5saW5lKCkpOwogfQogCiB2b2lkIFJlbmRl
ck1lbnVMaXN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiB7Ci0gICAgaWYgKG1fb3B0aW9uc0NoYW5n
ZWQpIHsKLSAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKLSAgICAgICAgaWYgKHNlbGVjdC0+bV9yZWNhbGNM
aXN0SXRlbXMpCi0gICAgICAgICAgICBzZWxlY3QtPnJlY2FsY0xpc3RJdGVtcygpOwotICAgICAg
ICAKLSAgICAgICAgVmVjdG9yPEhUTUxFbGVtZW50Kj4gbGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0
SXRlbXMoKTsKLSAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICB1bnNpZ25lZCBm
aXJzdE9wdGlvbiA9IGxpc3RJdGVtcy5zaXplKCk7Ci0gICAgICAgIGludCBpID0gbGlzdEl0ZW1z
LnNpemUoKTsKLSAgICAgICAgbV9sb25nZXN0V2lkdGggPSAwOwotICAgICAgICB3aGlsZSAoaS0t
KQotICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7
Ci0gICAgICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudCo+KGxpc3RJdGVtc1tpXSk7Ci0gICAgICAgICAgICAgICAgU3Ry
aW5nIHRleHQgPSBlbGVtZW50LT5vcHRpb25UZXh0KCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
c3RyaW5nV2lkdGggPSAodGV4dC5pc051bGwoKSB8fCB0ZXh0LmlzRW1wdHkoKSkgPyAwIDogc3R5
bGUoKS0+Zm9udCgpLmZsb2F0V2lkdGgoVGV4dFJ1bih0ZXh0LmltcGwoKSksIFRleHRTdHlsZSgw
LCAwLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIGlm
IChzdHJpbmdXaWR0aCA+IG1fbG9uZ2VzdFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBtX2xv
bmdlc3RXaWR0aCA9IHN0cmluZ1dpZHRoOwotICAgICAgICAgICAgICAgIGlmIChmb3VuZCkKLSAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudC0+bV9zZWxlY3RlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPnNlbGVjdGVkKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0VGV4dCh0ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3RlZEluZGV4ID0g
aTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBmaXJzdE9wdGlvbiA9IGk7CisgICAgLy8gRklYTUU6IFdoYXQgZG8g
d2UgZG8gaGVyZSBpZiB0aGUgPHNlbGVjdD4gcmVuZGVyaW5nIGNoYW5nZXMgZnJvbSBtZW51IGxp
c3QgdG8gbGlzdCBib3g/CisKKyAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOworICAgIGNvbnN0IFZlY3RvcjxIVE1M
RWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygpOworCisgICAgaWYgKG1f
b3B0aW9uc0NoYW5nZWQpIHsgICAgICAgIAorICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CisgICAg
ICAgIFRleHRTdHlsZSB0ZXh0U3R5bGUoMCwgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs
c2UpOworICAgICAgICBpbnQgc2l6ZSA9IGxpc3RJdGVtcy5zaXplKCk7CisgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxl
bWVudCA9IGxpc3RJdGVtc1tpXTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KG9wdGlvblRhZykpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IHN0YXRpY19jYXN0
PEhUTUxPcHRpb25FbGVtZW50Kj4oZWxlbWVudCktPm9wdGlvblRleHQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1h
eCh3aWR0aCwgc3R5bGUoKS0+Zm9udCgpLmZsb2F0V2lkdGgoVGV4dFJ1bih0ZXh0LmltcGwoKSks
IHRleHRTdHlsZSkpOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fb3B0aW9u
c1dpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZih3aWR0aCkpOwogICAgICAgICBtX29wdGlv
bnNDaGFuZ2VkID0gZmFsc2U7CiAgICAgfQorCisgICAgaW50IGkgPSBzZWxlY3QtPnNlbGVjdGVk
SW5kZXgoKTsKKyAgICBzZXRUZXh0KGkgPCAwID8gIiIgOiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudCo+KGxpc3RJdGVtc1tpXSktPm9wdGlvblRleHQoKSk7CiB9CiAKIHZvaWQgUmVuZGVy
TWVudUxpc3Q6OnNldFRleHQoY29uc3QgU3RyaW5nJiBzKQpAQCAtMTQ4LDIzICsxMzQsMjQgQEAg
dm9pZCBSZW5kZXJNZW51TGlzdDo6c2V0VGV4dChjb25zdCBTdHJpbgogICAgIH0KIH0KIAotdm9p
ZCBSZW5kZXJNZW51TGlzdDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQg
X3R5KQordm9pZCBSZW5kZXJNZW51TGlzdDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBpLCBpbnQg
eCwgaW50IHkpCiB7CiAgICAgLy8gUHVzaCBhIGNsaXAuCi0gICAgaWYgKG1faW5uZXIgJiYgaS5w
aGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewotICAgICAgICBJbnRSZWN0IGNsaXBSZWN0
KF90eCArIGJvcmRlckxlZnQoKSwgX3R5ICsgYm9yZGVyVG9wKCksCi0gICAgICAgICAgICB3aWR0
aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgaGVpZ2h0KCkgLSBib3JkZXJCb3R0
b20oKSAtIGJvcmRlclRvcCgpKTsKLSAgICAgICAgaWYgKGNsaXBSZWN0LndpZHRoKCkgPT0gMCB8
fCBjbGlwUmVjdC5oZWlnaHQoKSA9PSAwKQorICAgIGlmIChpLnBoYXNlID09IFBhaW50UGhhc2VG
b3JlZ3JvdW5kKSB7CisgICAgICAgIEludFJlY3QgY2xpcFJlY3QoeCArIGJvcmRlckxlZnQoKSwg
eSArIGJvcmRlclRvcCgpLAorICAgICAgICAgICAgd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAtIGJv
cmRlclJpZ2h0KCksCisgICAgICAgICAgICBoZWlnaHQoKSAtIGJvcmRlckJvdHRvbSgpIC0gYm9y
ZGVyVG9wKCkpOworICAgICAgICBpZiAoY2xpcFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBpLnAtPnNhdmUoKTsKICAgICAgICAgaS5wLT5hZGRDbGlwKGNsaXBS
ZWN0KTsKICAgICB9Ci0gICAgCisKICAgICAvLyBQYWludCB0aGUgY2hpbGRyZW4uCi0gICAgUmVu
ZGVyQmxvY2s6OnBhaW50T2JqZWN0KGksIF90eCwgX3R5KTsKLSAgICAKKyAgICBSZW5kZXJCbG9j
azo6cGFpbnRPYmplY3QoaSwgeCwgeSk7CisKICAgICAvLyBQb3AgdGhlIGNsaXAuCi0gICAgaWYg
KG1faW5uZXIgJiYgaS5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICBpZiAoaS5w
aGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkKICAgICAgICAgaS5wLT5yZXN0b3JlKCk7CiB9
CiAKQEAgLTE3OSw4ICsxNjYsOCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpjYWxjTWluTWF4V2lk
dGgoKQogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0
aCgpLnZhbHVlKCkgPiAwKQogICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IGNhbGND
b250ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlCi0gICAg
ICAgIG1fbWF4V2lkdGggPSBtYXgoKGludCljZWlsZihtX2xvbmdlc3RXaWR0aCksIHRoZW1lKCkt
Pm1pbmltdW1UZXh0U2l6ZShzdHlsZSgpKSk7Ci0gICAgCisgICAgICAgIG1fbWF4V2lkdGggPSBt
YXgobV9vcHRpb25zV2lkdGgsIHRoZW1lKCktPm1pbmltdW1UZXh0U2l6ZShzdHlsZSgpKSk7CisK
ICAgICBpZiAoc3R5bGUoKS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lk
dGgoKS52YWx1ZSgpID4gMCkgewogICAgICAgICBtX21heFdpZHRoID0gbWF4KG1fbWF4V2lkdGgs
IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAg
ICAgIG1fbWluV2lkdGggPSBtYXgobV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHls
ZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKQEAgLTE4OCw3ICsxNzUsNyBAQCB2b2lkIFJlbmRl
ck1lbnVMaXN0OjpjYWxjTWluTWF4V2lkdGgoKQogICAgICAgICBtX21pbldpZHRoID0gMDsKICAg
ICBlbHNlCiAgICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoOwotICAgIAorCiAgICAgaWYg
KHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFs
dWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKICAgICAgICAgbV9tYXhXaWR0aCA9IG1pbihtX21h
eFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkp
OwogICAgICAgICBtX21pbldpZHRoID0gbWluKG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lk
dGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CkBAIC0yMDMsNDYgKzE5MCwyNSBAQCB2
b2lkIFJlbmRlck1lbnVMaXN0OjpjYWxjTWluTWF4V2lkdGgoKQogCiB2b2lkIFJlbmRlck1lbnVM
aXN0OjpzaG93UG9wdXAoKQogewotICAgIGlmICghbV9wb3B1cE1lbnUpIHsKLSAgICAgICAgLy8g
Q3JlYXRlIG1faW5uZXIgaGVyZSBzbyBpdCBlbmRzIHVwIGFzIHRoZSBmaXJzdCBjaGlsZC4KLSAg
ICAgICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBvdGhlcndpc2Ugd2UgbWlnaHQgdHJ5
IHRvIGNyZWF0ZSBtX2lubmVyCi0gICAgICAgIC8vIGluc2lkZSB0aGUgc2hvd1BvcHVwIGNhbGwg
YW5kIGl0IHdvdWxkIGZhaWwuCi0gICAgICAgIGNyZWF0ZUlubmVyQmxvY2soKTsKLSAgICAgICAg
bV9wb3B1cE1lbnUgPSB0aGVtZSgpLT5jcmVhdGVQb3B1cE1lbnUocmVuZGVyQXJlbmEoKSwgZG9j
dW1lbnQoKSk7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBuZXdTdHlsZSA9IG5ldyAocmVuZGVyQXJl
bmEoKSkgUmVuZGVyU3R5bGU7Ci0gICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgp
KTsKLSAgICAgICAgbV9wb3B1cE1lbnUtPnNldFN0eWxlKG5ld1N0eWxlKTsKLSAgICAgICAgUmVu
ZGVyRmxleGlibGVCb3g6OmFkZENoaWxkKG1fcG9wdXBNZW51KTsKLSAgICB9Ci0gICAgbV9wb3B1
cE1lbnUtPnNob3dQb3B1cChhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLCBkb2N1bWVudCgpLT52
aWV3KCksIG1fc2VsZWN0ZWRJbmRleCk7Ci0gICAgbV9wb3B1cE1lbnUtPmRlc3Ryb3koKTsKLSAg
ICBtX3BvcHVwTWVudSA9IDA7Ci19Ci0KLXZvaWQgUmVuZGVyTWVudUxpc3Q6OmxheW91dCgpCi17
Ci0gICAgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dCgpOwotfQotCi12b2lkIFJlbmRlck1lbnVM
aXN0Ojp1cGRhdGVTZWxlY3Rpb24oKQoteworICAgIC8vIENyZWF0ZSBtX2lubmVyQmxvY2sgaGVy
ZSBzbyBpdCBlbmRzIHVwIGFzIHRoZSBmaXJzdCBjaGlsZC4KKyAgICAvLyBUaGlzIGlzIGltcG9y
dGFudCBiZWNhdXNlIG90aGVyd2lzZSB3ZSBtaWdodCB0cnkgdG8gY3JlYXRlIG1faW5uZXJCbG9j
aworICAgIC8vIGluc2lkZSB0aGUgc2hvd1BvcHVwIGNhbGwgYW5kIGl0IHdvdWxkIGZhaWwuCisg
ICAgY3JlYXRlSW5uZXJCbG9jaygpOworICAgIFJlbmRlclBvcHVwTWVudSogbWVudSA9IHRoZW1l
KCktPmNyZWF0ZVBvcHVwTWVudShyZW5kZXJBcmVuYSgpLCBkb2N1bWVudCgpKTsKKyAgICBSZW5k
ZXJTdHlsZSogbmV3U3R5bGUgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlOworICAg
IG5ld1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsKKyAgICBtZW51LT5zZXRTdHlsZShuZXdT
dHlsZSk7CisgICAgUmVuZGVyRmxleGlibGVCb3g6OmFkZENoaWxkKG1lbnUpOworICAgIG1lbnUt
PnNob3dQb3B1cChhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLCBkb2N1bWVudCgpLT52aWV3KCks
CisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4obm9kZSgpKS0+c2VsZWN0
ZWRJbmRleCgpKTsKKyAgICBtZW51LT5kZXN0cm95KCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxp
c3Q6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBtX3NlbGVjdGVkSW5kZXgg
PSBpbmRleDsKLSAgICBWZWN0b3I8SFRNTEVsZW1lbnQqPiBsaXN0SXRlbXMgPSBzdGF0aWNfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSktPmxpc3RJdGVtcygpOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5zaXplKCk7ICsraSkKLSAgICAgICAgaWYgKGxp
c3RJdGVtc1tpXS0+aGFzVGFnTmFtZShvcHRpb25UYWcpICYmIGkgIT0gaW5kZXgpCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGxpc3RJdGVtc1tpXSktPm1fc2Vs
ZWN0ZWQgPSBmYWxzZTsKLQotICAgIEhUTUxPcHRpb25FbGVtZW50KiBlbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihsaXN0SXRlbXNbaW5kZXhdKTsKLSAgICBlbGVtZW50
LT5tX3NlbGVjdGVkID0gdHJ1ZTsKLSAgICAKLSAgICBzZXRUZXh0KGVsZW1lbnQtPm9wdGlvblRl
eHQoKSk7Ci0gICAgCi0gICAgc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkp
LT5vbkNoYW5nZSgpOworICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBzdGF0aWNfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgc2VsZWN0LT5zZXRTZWxlY3RlZElu
ZGV4KGluZGV4KTsKKyAgICBzZWxlY3QtPm9uQ2hhbmdlKCk7CiB9CiAKIH0KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkocmV2aXNpb24gMTUzMjkpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMSArMjMsMTggQEAK
ICNpZm5kZWYgUmVuZGVyTWVudUxpc3RfSAogI2RlZmluZSBSZW5kZXJNZW51TGlzdF9ICiAKLSNp
bmNsdWRlICJSZW5kZXJCdXR0b24uaCIKLSNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgor
I2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgUmVuZGVyUG9wdXBNZW51OworY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnQ7CiAKLWNsYXNz
IFJlbmRlck1lbnVMaXN0IDogcHVibGljIFJlbmRlckZsZXhpYmxlQm94Ci17CitjbGFzcyBSZW5k
ZXJNZW51TGlzdCA6IHB1YmxpYyBSZW5kZXJGbGV4aWJsZUJveCB7CiBwdWJsaWM6CiAgICAgUmVu
ZGVyTWVudUxpc3QoSFRNTFNlbGVjdEVsZW1lbnQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRD
aGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QgKmJlZm9yZUNoaWxkID0g
MCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCogb2xkQ2hpbGQp
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0JveGVzKCkge30KKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCBi
b29sIGNyZWF0ZXNBbm9ueW1vdXNXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
CkBAIC00NywzNCArNDQsMjMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVj
dChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyTWVudUxpc3QiOyB9Ci0gICAgCi0g
ICAgUmVuZGVyU3R5bGUqIGNyZWF0ZUlubmVyU3R5bGUoUmVuZGVyU3R5bGUqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwog
Ci0gICAgdm9pZCBzZXRPcHRpb25zQ2hhbmdlZChib29sIG8pIHsgbV9vcHRpb25zQ2hhbmdlZCA9
IG87IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CiAKLSAgICBib29sIHNl
bGVjdGlvbkNoYW5nZWQoKSB7IHJldHVybiBtX3NlbGVjdGlvbkNoYW5nZWQ7IH0KLSAgICB2b2lk
IHNldFNlbGVjdGlvbkNoYW5nZWQoYm9vbCBzZWxlY3Rpb25DaGFuZ2VkKSB7IG1fc2VsZWN0aW9u
Q2hhbmdlZCA9IHNlbGVjdGlvbkNoYW5nZWQ7IH0KLSAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbigp
OwotICAgIAogICAgIHZvaWQgc2hvd1BvcHVwKCk7CisKKyAgICB2b2lkIHNldE9wdGlvbnNDaGFu
Z2VkKGJvb2wgYykgeyBtX29wdGlvbnNDaGFuZ2VkID0gYzsgfQogICAgIHZvaWQgdmFsdWVDaGFu
Z2VkKHVuc2lnbmVkIGluZGV4KTsKLSAgICBib29sIGhhc1BvcHVwTWVudSgpIHsgcmV0dXJuIG1f
cG9wdXBNZW51OyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVJbm5lckJsb2NrKCk7CiAg
ICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgUmVuZGVyVGV4dCogbV9idXR0
b25UZXh0OwotICAgIFJlbmRlckJsb2NrKiBtX2lubmVyOwotICAgIFJlbmRlclBvcHVwTWVudSog
bV9wb3B1cE1lbnU7CisgICAgUmVuZGVyQmxvY2sqIG1faW5uZXJCbG9jazsKIAotICAgIHVuc2ln
bmVkIG1fc2l6ZTsKLSAgICBib29sIG1fc2VsZWN0aW9uQ2hhbmdlZDsKICAgICBib29sIG1fb3B0
aW9uc0NoYW5nZWQ7Ci0gICAgZmxvYXQgbV9sb25nZXN0V2lkdGg7Ci0gICAgaW50IG1fc2VsZWN0
ZWRJbmRleDsKKyAgICBpbnQgbV9vcHRpb25zV2lkdGg7CiB9OwogCiB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQb3B1cE1lbnUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclBvcHVwTWVudS5jcHAJKHJldmlzaW9uIDE1MzI5KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUG9wdXBNZW51LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUs
NyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTZWxl
Y3RFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMTggKzM4LDIyIEBA
IFJlbmRlclBvcHVwTWVudTo6UmVuZGVyUG9wdXBNZW51KE5vZGUqIGUKIAogdm9pZCBSZW5kZXJQ
b3B1cE1lbnU6OnBvcHVsYXRlKCkKIHsKLSAgICBSZW5kZXJNZW51TGlzdCogc2VsZWN0ID0gZ2V0
UmVuZGVyTWVudUxpc3QoKTsKLSAgICBBU1NFUlQoc2VsZWN0KTsKLSAgICBpZiAoIXNlbGVjdC0+
bm9kZSgpKQorICAgIEFTU0VSVChtZW51TGlzdCgpKTsKKyAgICBIVE1MU2VsZWN0RWxlbWVudCog
c2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihtZW51TGlzdCgpLT5ub2Rl
KCkpOworICAgIGlmICghc2VsZWN0KQogICAgICAgICByZXR1cm47Ci0gICAgLy9GSVhNRTogTWF5
YmUgd2Ugc2hvdWxkIGp1c3QgaXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWxlY3QgZWxlbWVudCdzIGxp
c3QgaXRlbXM/Ci0gICAgZm9yIChOb2RlKiBuID0gc2VsZWN0LT5ub2RlKCktPmZpcnN0Q2hpbGQo
KTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc2VsZWN0LT5ub2RlKCkpKSB7Ci0gICAgICAg
IGlmIChuLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpCi0gICAgICAgICAgICBhZGRPcHRpb24oc3Rh
dGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihuKSk7Ci0gICAgICAgIGVsc2UgaWYgKG4tPmhh
c1RhZ05hbWUob3B0Z3JvdXBUYWcpKQotICAgICAgICAgICAgYWRkR3JvdXBMYWJlbChzdGF0aWNf
Y2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50Kj4obikpOwotICAgICAgICBlbHNlIGlmIChuLT5oYXNU
YWdOYW1lKGhyVGFnKSkKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBz
ZWxlY3QtPmxpc3RJdGVtcygpOworICAgIHNpemVfdCBzaXplID0gaXRlbXMuc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gaXRlbXNbaV07CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9w
dGlvblRhZykpCisgICAgICAgICAgICBhZGRPcHRpb24oc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnQqPihlbGVtZW50KSk7CisgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
b3B0Z3JvdXBUYWcpKQorICAgICAgICAgICAgYWRkR3JvdXBMYWJlbChzdGF0aWNfY2FzdDxIVE1M
T3B0R3JvdXBFbGVtZW50Kj4oZWxlbWVudCkpOworICAgICAgICBlbHNlIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKGhyVGFnKSkKICAgICAgICAgICAgIGFkZFNlcGFyYXRvcigpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBBU1NFUlQoMCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJQb3B1cE1lbnUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJQb3B1cE1lbnUuaAkocmV2aXNpb24gMTUzMjkpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJQb3B1cE1lbnUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQCBjbGFz
cyBIVE1MT3B0R3JvdXBFbGVtZW50OwogY2xhc3MgUmVuZGVyUG9wdXBNZW51IDogcHVibGljIFJl
bmRlckJsb2NrIHsKIHB1YmxpYzoKICAgICBSZW5kZXJQb3B1cE1lbnUoTm9kZSopOwotICAgIHZp
cnR1YWwgflJlbmRlclBvcHVwTWVudSgpIHt9CiAgICAgCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclBvcHVwTWVudSI7IH0KIApAQCAt
NDIsMTMgKzQxLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGUoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2hvd1BvcHVwKGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQg
aW5kZXgpID0gMDsKICAgICAKLSAgICBSZW5kZXJNZW51TGlzdCogZ2V0UmVuZGVyTWVudUxpc3Qo
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZW51TGlzdCo+KHBhcmVudCgpID8gcGFyZW50
KCktPnBhcmVudCgpIDogMCk7IH0KKyAgICBSZW5kZXJNZW51TGlzdCogbWVudUxpc3QoKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJNZW51TGlzdCo+KHBhcmVudCgpID8gcGFyZW50KCktPnBh
cmVudCgpIDogMCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhZGRTZXBhcmF0
b3IoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFkZEdyb3VwTGFiZWwoSFRNTE9wdEdyb3VwRWxl
bWVudCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYWRkT3B0aW9uKEhUTUxPcHRpb25FbGVtZW50
KikgPSAwOwotCiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQb3B1cE1l
bnVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUG9wdXBNZW51
TWFjLm1tCShyZXZpc2lvbiAxNTMyOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBvcHVw
TWVudU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogI2ltcG9ydCAiRnJh
bWVNYWMuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCi0j
aW1wb3J0ICJIVE1MT3B0aW9uRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTE9wdEdyb3VwRWxlbWVu
dC5oIgorI2ltcG9ydCAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbXBvcnQgIlJlbmRlck1lbnVM
aXN0LmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAKQEAgLTQzLDcgKzQz
LDcgQEAgUmVuZGVyUG9wdXBNZW51TWFjOjpSZW5kZXJQb3B1cE1lbnVNYWMoTgogUmVuZGVyUG9w
dXBNZW51TWFjOjp+UmVuZGVyUG9wdXBNZW51TWFjKCkKIHsKICAgICBpZiAocG9wdXApIHsKLSAg
ICAgICAgW3BvcHVwIHNldENvbnRyb2xWaWV3OiBuaWxdOworICAgICAgICBbcG9wdXAgc2V0Q29u
dHJvbFZpZXc6bmlsXTsKICAgICAgICAgW3BvcHVwIHJlbGVhc2VdOwogICAgIH0KIH0KQEAgLTU2
LDk1ICs1Niw3MyBAQCB2b2lkIFJlbmRlclBvcHVwTWVudU1hYzo6Y2xlYXIoKQogCiB2b2lkIFJl
bmRlclBvcHVwTWVudU1hYzo6cG9wdWxhdGUoKQogeworICAgIGlmIChwb3B1cCkKKyAgICAgICAg
W3BvcHVwIHJlbW92ZUFsbEl0ZW1zXTsKKyAgICBlbHNlIHsKKyAgICAgICAgcG9wdXAgPSBbW05T
UG9wVXBCdXR0b25DZWxsIGFsbG9jXSBpbml0VGV4dENlbGw6QCIiIHB1bGxzRG93bjpOT107Cisg
ICAgICAgIFtwb3B1cCBzZXRVc2VzSXRlbUZyb21NZW51Ok5PXTsKKyAgICAgICAgW3BvcHVwIHNl
dEF1dG9lbmFibGVzSXRlbXM6Tk9dOworICAgIH0KICAgICBCT09MIG1lc3NhZ2VzRW5hYmxlZCA9
IFtbcG9wdXAgbWVudV0gbWVudUNoYW5nZWRNZXNzYWdlc0VuYWJsZWRdOwogICAgIFtbcG9wdXAg
bWVudV0gc2V0TWVudUNoYW5nZWRNZXNzYWdlc0VuYWJsZWQ6Tk9dOwogICAgIFJlbmRlclBvcHVw
TWVudTo6cG9wdWxhdGUoKTsKICAgICBbW3BvcHVwIG1lbnVdIHNldE1lbnVDaGFuZ2VkTWVzc2Fn
ZXNFbmFibGVkOm1lc3NhZ2VzRW5hYmxlZF07Ci0KIH0KIAogdm9pZCBSZW5kZXJQb3B1cE1lbnVN
YWM6OnNob3dQb3B1cChjb25zdCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHYsIGludCBpbmRleCkK
IHsKLSAgICBGcmFtZU1hYyogZnJhbWUgPSBNYWModi0+ZnJhbWUoKSk7Ci0gICAgTlNFdmVudCog
ZXZ0ID0gZnJhbWUtPmN1cnJlbnRFdmVudCgpOwotICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgZXZl
bnQgdGhhdCB0cmlnZ2VyZWQgdGhlIHBvcHVwLCBzbyB3ZSBjYW4gY2xlYW4gdXAgb3VyIGV2ZW50
Ci0gICAgLy8gc3RhdGUgYWZ0ZXIgdGhlIE5TTWVudSBnb2VzIGF3YXkuCi0gICAgW2V2dCByZXRh
aW5dOwotICAgIAotICAgIGlmICghcG9wdXApIHsKLSAgICAgICAgcG9wdXAgPSBbW1tOU1BvcFVw
QnV0dG9uQ2VsbCBhbGxvY10gaW5pdFRleHRDZWxsOkAiIiBwdWxsc0Rvd246Tk9dIHJldGFpbl07
Ci0gICAgICAgIFtwb3B1cCBzZXRVc2VzSXRlbUZyb21NZW51Ok5PXTsKLSAgICAgICAgW3BvcHVw
IHNldEF1dG9lbmFibGVzSXRlbXM6Tk9dOwotICAgIH0KLSAgICAvLyBJZiB3ZSBkZWNpZGUgdG8g
Y2FjaGUgdGhlIE5TTWVudUl0ZW1zLCB3ZSBzaG91bGRuJ3QgY2xlYXIgYW5kIHBvcHVsYXRlIGV2
ZXJ5IHRpbWUgd2Ugc2hvdyB0aGUgcG9wdXAgbWVudQotICAgIGNsZWFyKCk7CiAgICAgcG9wdWxh
dGUoKTsKLSAgICAKICAgICBpZiAoW3BvcHVwIG51bWJlck9mSXRlbXNdIDw9IDApCiAgICAgICAg
IHJldHVybjsKLSAgICAKICAgICBBU1NFUlQoW3BvcHVwIG51bWJlck9mSXRlbXNdID4gaW5kZXgp
OwotICAgIAorCiAgICAgTlNWaWV3KiB2aWV3ID0gdi0+Z2V0RG9jdW1lbnRWaWV3KCk7CisKICAg
ICBbcG9wdXAgYXR0YWNoUG9wVXBXaXRoRnJhbWU6ciBpblZpZXc6dmlld107Ci0gICAgCiAgICAg
W3BvcHVwIHNlbGVjdEl0ZW1BdEluZGV4OmluZGV4XTsKICAgICAKLSAgICBOU1BvaW50IGxvY2F0
aW9uID0gTlNNYWtlUG9pbnQoTlNNaW5YKHIpLCBOU01heFkocikpOwotICAgIGZsb2F0IHZlcnRP
ZmZzZXQ7Ci0gICAgCi0gICAgLy9jZW50ZXIgaXQgaW4gb3VyIHRpdGxlIGZyYW1lCisgICAgTlNG
b250KiBmb250ID0gc3R5bGUoKS0+Zm9udCgpLmdldE5TRm9udCgpOworCiAgICAgTlNSZWN0IHRp
dGxlRnJhbWUgPSBbcG9wdXAgdGl0bGVSZWN0Rm9yQm91bmRzOnJdOwogICAgIGlmICh0aXRsZUZy
YW1lLnNpemUud2lkdGggPD0gMCB8fCB0aXRsZUZyYW1lLnNpemUuaGVpZ2h0IDw9IDApCiAgICAg
ICAgIHRpdGxlRnJhbWUgPSByOwotICAgIE5TRm9udCogZm9udCA9IHN0eWxlKCktPmZvbnQoKS5n
ZXROU0ZvbnQoKTsKLSAgICBOU1NpemUgc2l6ZU9mU2VsZWN0ZWRJdGVtID0gdGl0bGVGcmFtZS5z
aXplOwotCi0gICAgdmVydE9mZnNldCA9IHJvdW5kKChOU01heFkocikgLSBOU01heFkodGl0bGVG
cmFtZSkpICsgKE5TSGVpZ2h0KHRpdGxlRnJhbWUpICsgc2l6ZU9mU2VsZWN0ZWRJdGVtLmhlaWdo
dCkvMi5mKTsKLQotICAgIC8vQWxpZ24gdXMgZm9yIGRpZmZlcmVudCBmb250cworICAgIGZsb2F0
IHZlcnRPZmZzZXQgPSByb3VuZGYoKE5TTWF4WShyKSAtIE5TTWF4WSh0aXRsZUZyYW1lKSkgKyBO
U0hlaWdodCh0aXRsZUZyYW1lKSk7CisgICAgLy8gQWRqdXN0IGZvciBmb250cyBvdGhlciB0aGFu
IHRoZSBzeXN0ZW0gZm9udC4KICAgICBOU0ZvbnQqIGRlZmF1bHRGb250ID0gW05TRm9udCBzeXN0
ZW1Gb250T2ZTaXplOltmb250IHBvaW50U2l6ZV1dOwogICAgIHZlcnRPZmZzZXQgKz0gW2ZvbnQg
ZGVzY2VuZGVyXSAtIFtkZWZhdWx0Rm9udCBkZXNjZW5kZXJdOwotCiAgICAgdmVydE9mZnNldCA9
IGZtaW4oTlNIZWlnaHQociksIHZlcnRPZmZzZXQpOwogCi0gICAgbG9jYXRpb24ueCAtPSAxMDsK
LSAgICBsb2NhdGlvbi55IC09IHZlcnRPZmZzZXQ7Ci0KLS8vICBOU0NvbG9yKiBiYWNrZ3JvdW5k
Q29sb3IgPSBuc0NvbG9yKHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpKTsKICAgICBOU01lbnUq
IG1lbnUgPSBbcG9wdXAgbWVudV07Ci0gICAgCi0gICAgd2tQb3B1cE1lbnUobWVudSwgbG9jYXRp
b24sIGZsb29yKE5TV2lkdGgocikgKyAwLjUpLCB2aWV3LCBpbmRleCwgZm9udCk7Ci0gICAgCi0g
ICAgLy8gdXBkYXRlIHRleHQgb24gYnV0dG9uCisgICAgLy8gRklYTUU6IE5lZWQgdG8gZG9jdW1l
bnQgd2hlcmUgdGhpcyBtYWdpYyBudW1iZXIgMTAgY29tZXMgZnJvbS4KKyAgICBOU1BvaW50IGxv
Y2F0aW9uID0gTlNNYWtlUG9pbnQoTlNNaW5YKHIpIC0gMTAsIE5TTWF4WShyKSAtIHZlcnRPZmZz
ZXQpOworCisgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUg
cG9wdXAsIHNvIHdlIGNhbiBjbGVhbiB1cCBvdXIgZXZlbnQKKyAgICAvLyBzdGF0ZSBhZnRlciB0
aGUgTlNNZW51IGdvZXMgYXdheS4KKyAgICBSZWZQdHI8RnJhbWVNYWM+IGZyYW1lID0gTWFjKHYt
PmZyYW1lKCkpOworICAgIE5TRXZlbnQqIGV2ZW50ID0gW2ZyYW1lLT5jdXJyZW50RXZlbnQoKSBy
ZXRhaW5dOworCisgICAgd2tQb3B1cE1lbnUobWVudSwgbG9jYXRpb24sIHJvdW5kZihOU1dpZHRo
KHIpKSwgdmlldywgaW5kZXgsIGZvbnQpOwogICAgIGludCBuZXdJbmRleCA9IFtwb3B1cCBpbmRl
eE9mU2VsZWN0ZWRJdGVtXTsKKyAgICBbcG9wdXAgZGlzbWlzc1BvcFVwXTsKKwogICAgIGlmIChp
bmRleCAhPSBuZXdJbmRleCAmJiBuZXdJbmRleCA+PSAwKQotICAgICAgICBnZXRSZW5kZXJNZW51
TGlzdCgpLT52YWx1ZUNoYW5nZWQobmV3SW5kZXgpOworICAgICAgICBtZW51TGlzdCgpLT52YWx1
ZUNoYW5nZWQobmV3SW5kZXgpOwogCi0gICAgW3BvcHVwIGRpc21pc3NQb3BVcF07Ci0gICAgCi0g
ICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIC8vIEdpdmUgV2ViQ29yZSBhIGNoYW5jZSB0byBmaXgg
dXAgaXRzIGV2ZW50IHN0YXRlLCBzaW5jZSB0aGUgcG9wdXAgZWF0cyBhbGwgdGhlCi0gICAgICAg
IC8vIGV2ZW50cyBkdXJpbmcgdHJhY2tpbmcuCi0gICAgICAgIGZyYW1lLT5zZW5kRmFrZUV2ZW50
c0FmdGVyV2lkZ2V0VHJhY2tpbmcoZXZ0KTsKLSAgICB9Ci0gICAgW2V2dCByZWxlYXNlXTsKKyAg
ICAvLyBHaXZlIHRoZSBmcmFtZSBhIGNoYW5jZSB0byBmaXggdXAgaXRzIGV2ZW50IHN0YXRlLCBz
aW5jZSB0aGUgcG9wdXAgZWF0cyBhbGwgdGhlCisgICAgLy8gZXZlbnRzIGR1cmluZyB0cmFja2lu
Zy4KKyAgICBmcmFtZS0+c2VuZEZha2VFdmVudHNBZnRlcldpZGdldFRyYWNraW5nKGV2ZW50KTsK
KworICAgIFtldmVudCByZWxlYXNlXTsKIH0KIAogdm9pZCBSZW5kZXJQb3B1cE1lbnVNYWM6OmFk
ZFNlcGFyYXRvcigpCiB7Ci0gICAgTlNNZW51SXRlbSAqc2VwYXJhdG9yID0gW05TTWVudUl0ZW0g
c2VwYXJhdG9ySXRlbV07Ci0gICAgW1twb3B1cCBtZW51XSBhZGRJdGVtOnNlcGFyYXRvcl07Cisg
ICAgW1twb3B1cCBtZW51XSBhZGRJdGVtOltOU01lbnVJdGVtIHNlcGFyYXRvckl0ZW1dXTsKIH0K
IAogdm9pZCBSZW5kZXJQb3B1cE1lbnVNYWM6OmFkZEdyb3VwTGFiZWwoSFRNTE9wdEdyb3VwRWxl
bWVudCogZWxlbWVudCkKIHsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKICAg
ICBTdHJpbmcgdGV4dCA9IGVsZW1lbnQtPmdyb3VwTGFiZWxUZXh0KCk7Ci0gICAgCi0gICAgW3Bv
cHVwIGFkZEl0ZW1XaXRoVGl0bGU6QCIiXTsKLSAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IFtw
b3B1cCBsYXN0SXRlbV07CiAKICAgICBSZW5kZXJTdHlsZSogcyA9IGVsZW1lbnQtPnJlbmRlclN0
eWxlKCk7CiAgICAgaWYgKCFzKQpAQCAtMTU1LDI3ICsxMzMsMjUgQEAgdm9pZCBSZW5kZXJQb3B1
cE1lbnVNYWM6OmFkZEdyb3VwTGFiZWwoSAogICAgICAgICBbYXR0cmlidXRlcyBzZXRPYmplY3Q6
cy0+Zm9udCgpLmdldE5TRm9udCgpIGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICBp
ZiAocy0+Y29sb3IoKSAhPSBDb2xvcjo6YmxhY2spCiAgICAgICAgIFthdHRyaWJ1dGVzIHNldE9i
amVjdDpuc0NvbG9yKHMtPmNvbG9yKCkpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWVdOwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQgYXR0cmlidXRlczphdHRyaWJ1dGVzXTsK
KyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzp0ZXh0IGF0dHJpYnV0ZXM6YXR0cmlidXRlc107CisgICAgW2F0
dHJpYnV0ZXMgcmVsZWFzZV07CiAKKyAgICBbcG9wdXAgYWRkSXRlbVdpdGhUaXRsZTpAIiJdOwor
ICAgIE5TTWVudUl0ZW0qIG1lbnVJdGVtID0gW3BvcHVwIGxhc3RJdGVtXTsKICAgICBbbWVudUl0
ZW0gc2V0QXR0cmlidXRlZFRpdGxlOnN0cmluZ107Ci0gICAgW3N0cmluZyByZWxlYXNlXTsKLSAg
ICBbYXR0cmlidXRlcyByZWxlYXNlXTsKICAgICBbbWVudUl0ZW0gc2V0RW5hYmxlZDpOT107CisK
KyAgICBbc3RyaW5nIHJlbGVhc2VdOwogfQogCiB2b2lkIFJlbmRlclBvcHVwTWVudU1hYzo6YWRk
T3B0aW9uKEhUTUxPcHRpb25FbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmICghZWxlbWVudCkK
LSAgICAgICAgcmV0dXJuOwogICAgIFN0cmluZyB0ZXh0ID0gZWxlbWVudC0+b3B0aW9uVGV4dCgp
OwogICAgIAogICAgIGJvb2wgZ3JvdXBFbmFibGVkID0gdHJ1ZTsKICAgICBpZiAoZWxlbWVudC0+
cGFyZW50Tm9kZSgpICYmIGVsZW1lbnQtPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShvcHRncm91
cFRhZykpCiAgICAgICAgIGdyb3VwRW5hYmxlZCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKS0+aXNF
bmFibGVkKCk7CiAKLSAgICBbcG9wdXAgYWRkSXRlbVdpdGhUaXRsZTpAIiJdOwotICAgIE5TTWVu
dUl0ZW0gKm1lbnVJdGVtID0gW3BvcHVwIGxhc3RJdGVtXTsKLSAgICAKICAgICBSZW5kZXJTdHls
ZSogcyA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgaWYgKCFzKQogICAgICAgICBzID0g
c3R5bGUoKTsKQEAgLTE4NiwxMyArMTYyLDE1IEBAIHZvaWQgUmVuZGVyUG9wdXBNZW51TWFjOjph
ZGRPcHRpb24oSFRNTE8KICAgICBpZiAocy0+Y29sb3IoKSAhPSBDb2xvcjo6YmxhY2spCiAgICAg
ICAgIFthdHRyaWJ1dGVzIHNldE9iamVjdDpuc0NvbG9yKHMtPmNvbG9yKCkpIGZvcktleTpOU0Zv
cmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwogICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRv
IGN1c3RvbWl6ZSB0ZXh0IGNvbG9yIHdoZW4gYW4gaXRlbSBpcyBoaWdobGlnaHRlZC4KLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzp0ZXh0IGF0dHJpYnV0ZXM6YXR0cmlidXRlc107CisgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nKiBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6dGV4dCBhdHRyaWJ1dGVzOmF0dHJpYnV0ZXNdOworICAgIFthdHRyaWJ1dGVzIHJlbGVh
c2VdOwogCisgICAgW3BvcHVwIGFkZEl0ZW1XaXRoVGl0bGU6QCIiXTsKKyAgICBOU01lbnVJdGVt
KiBtZW51SXRlbSA9IFtwb3B1cCBsYXN0SXRlbV07CiAgICAgW21lbnVJdGVtIHNldEF0dHJpYnV0
ZWRUaXRsZTpzdHJpbmddOwotICAgIFtzdHJpbmcgcmVsZWFzZV07Ci0gICAgW2F0dHJpYnV0ZXMg
cmVsZWFzZV07CiAgICAgW21lbnVJdGVtIHNldEVuYWJsZWQ6Z3JvdXBFbmFibGVkICYmIGVsZW1l
bnQtPmlzRW5hYmxlZCgpXTsKIAorICAgIFtzdHJpbmcgcmVsZWFzZV07CiB9CiAKIH0K
</data>
<flag name="review"
          id="2840"
          type_id="1"
          status="+"
          setter="adele"
    />
          </attachment>
      

    </bug>

</bugzilla>