<?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>26031</bug_id>
          
          <creation_ts>2009-05-26 14:50:11 -0700</creation_ts>
          <short_desc>InputElement still uses more memory than needed</short_desc>
          <delta_ts>2009-05-27 05:25:51 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>staikos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123197</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-26 14:50:11 -0700</bug_when>
    <thetext>Instead of storing Element and InputElement pointers in InputElementData these pointers can just be provided by the callee of the static functions. No need to waste memory for that.

OptionElement/ScriptElement/.. have the same problem. I&apos;m going to fix them all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123200</commentid>
    <comment_count>1</comment_count>
      <attachid>30684</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-26 15:02:28 -0700</bug_when>
    <thetext>Created attachment 30684
Initial patch

No regressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123274</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-05-27 05:25:51 -0700</bug_when>
    <thetext>Landed in r44187.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30684</attachid>
            <date>2009-05-26 15:02:28 -0700</date>
            <delta_ts>2009-05-26 20:07:00 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>SaveMem.diff</filename>
            <type>text/plain</type>
            <size>27662</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MTYw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDktMDUt
MjYgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4
ZXM6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjAzMQorCisgICAg
ICAgIElucHV0RWxlbWVudERhdGEgaXMgdG9vIGhlYXZ5LCBzYXZlIHN0b3JpbmcgdHdvIHBvaW50
ZXJzIGJ5IHBhc3NpbmcgdGhlbQorICAgICAgICBkaXJlY3RseSB0byB0aGUgc3RhdGljIGhlbHBl
ciBmdW5jdGlvbnMgKHRoZSBvbmx5IHBsYWNlIHdoaWNoIG5lZWRzIHRoZW0pLiAgICAKKworICAg
ICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVt
ZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50
OjpkaXNwYXRjaEJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnVw
ZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1l
bnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1l
bnQ6OnVwZGF0ZVNlbGVjdGlvblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVu
dDo6YWJvdXRUb1VubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnNldFZh
bHVlRnJvbVJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6Y29uc3Ry
YWluVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnBhcnNl
U2l6ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnBhcnNlTWF4
TGVuZ3RoQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6dXBkYXRl
VmFsdWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6Om5vdGlmeUZv
cm1TdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50RGF0YTo6SW5w
dXRFbGVtZW50RGF0YSk6CisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpIVE1MSW5wdXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjphYm91dFRvVW5sb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpzZXRJbnB1dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6c2V0U2VsZWN0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
VmFsdWVGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50Ojpjb25zdHJhaW5WYWx1ZSk6CisgICAgICAgICogd21sL1dNTElucHV0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OldNTElucHV0RWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OldNTElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OldNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V01MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V01MSW5wdXRFbGVtZW50Ojpjb25zdHJhaW5WYWx1ZSk6CisKIDIwMDktMDUt
MjYgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogZG9tL0lucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gZG9tL0lucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDQ0MTYwKQorKysgZG9tL0lu
cHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDg3ICs1Miw5NCBAQCB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogY29uc3QgaW50IElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVu
Z3RoID0gNTI0Mjg4OwogY29uc3QgaW50IElucHV0RWxlbWVudDo6c19kZWZhdWx0U2l6ZSA9IDIw
OwogCi12b2lkIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KElucHV0RWxlbWVudERh
dGEmIGRhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgSW5wdXRFbGVtZW50OjpkaXNwYXRj
aEZvY3VzRXZlbnQoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFkYXRhLmlucHV0RWxlbWVudCgp
LT5pc1RleHRGaWVsZCgpKQorICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZGF0YSwg
ZG9jdW1lbnQpOworICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShkYXRhLCBpbnB1dEVs
ZW1lbnQsIGVsZW1lbnQpOwogCi0gICAgaWYgKGRhdGEuaW5wdXRFbGVtZW50KCktPmlzUGFzc3dv
cmRGaWVsZCgpICYmIGRvY3VtZW50LT5mcmFtZSgpKQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgaWYgKGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZp
ZWxkKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIGRvY3VtZW50LT5zZXRVc2VTZWN1
cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZSh0cnVlKTsKIH0KIAotdm9pZCBJbnB1dEVsZW1lbnQ6
OmRpc3BhdGNoQmx1ckV2ZW50KElucHV0RWxlbWVudERhdGEmIGRhdGEsIERvY3VtZW50KiBkb2N1
bWVudCkKK3ZvaWQgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudChJbnB1dEVsZW1lbnRE
YXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCkK
IHsKLSAgICBpZiAoIWRhdGEuaW5wdXRFbGVtZW50KCktPmlzVGV4dEZpZWxkKCkpCisgICAgaWYg
KCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CiAgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGRhdGEsIGRvY3VtZW50KTsKKyAgICB1
cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZGF0YSwgaW5wdXRFbGVtZW50LCBlbGVtZW50KTsK
IAotICAgIGlmIChkYXRhLmlucHV0RWxlbWVudCgpLT5pc1Bhc3N3b3JkRmllbGQoKSkKKyAgICBp
ZiAoaW5wdXRFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgZG9jdW1lbnQtPnNl
dFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKGZhbHNlKTsKIAotICAgIGZyYW1lLT50
ZXh0RmllbGREaWRFbmRFZGl0aW5nKGRhdGEuZWxlbWVudCgpKTsKKyAgICBmcmFtZS0+dGV4dEZp
ZWxkRGlkRW5kRWRpdGluZyhlbGVtZW50KTsKIH0KIAotdm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0
ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgcGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpCit2b2lkIElucHV0RWxlbWVu
dDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KElucHV0RWxlbWVudERhdGEmIGRhdGEsIElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50LCBib29sIHBsYWNlaG9s
ZGVyVmFsdWVDaGFuZ2VkKQogewotICAgIEFTU0VSVChkYXRhLmlucHV0RWxlbWVudCgpLT5pc1Rl
eHRGaWVsZCgpKTsKKyAgICBBU1NFUlQoaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKTsKKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwogCiAgICAgYm9vbCBv
bGRQbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSA9IGRhdGEucGxhY2Vob2xkZXJTaG91bGRCZVZp
c2libGUoKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gZGF0YS5lbGVtZW50KCk7Ci0KLSAgICBk
YXRhLnNldFBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKGRhdGEuaW5wdXRFbGVtZW50KCktPnZh
bHVlKCkuaXNFbXB0eSgpIAorICAgIGRhdGEuc2V0UGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUo
aW5wdXRFbGVtZW50LT52YWx1ZSgpLmlzRW1wdHkoKSAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIGRvY3VtZW50LT5mb2N1c2VkTm9kZSgpICE9IGVsZW1lbnQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFkYXRhLmlucHV0RWxlbWVu
dCgpLT5wbGFjZWhvbGRlcigpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhaW5wdXRFbGVtZW50LT5wbGFjZWhvbGRlcigpLmlzRW1wdHkoKSk7
CiAKICAgICBpZiAoKG9sZFBsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlICE9IGRhdGEucGxhY2Vo
b2xkZXJTaG91bGRCZVZpc2libGUoKSB8fCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdlZCkgJiYgZWxl
bWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lKj4oZWxlbWVudC0+cmVuZGVyZXIoKSktPnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJp
bGl0eSgpOwogfQogCi12b2lkIElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKElu
cHV0RWxlbWVudERhdGEmIGRhdGEsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXN0b3JlUHJl
dmlvdXNTZWxlY3Rpb24pCit2b2lkIElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNl
KElucHV0RWxlbWVudERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVt
ZW50KiBlbGVtZW50LCBib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKIHsKLSAgICBBU1NF
UlQoZGF0YS5pbnB1dEVsZW1lbnQoKS0+aXNUZXh0RmllbGQoKSk7CisgICAgQVNTRVJUKGlucHV0
RWxlbWVudC0+aXNUZXh0RmllbGQoKSk7CiAKICAgICBpZiAoIXJlc3RvcmVQcmV2aW91c1NlbGVj
dGlvbiB8fCBkYXRhLmNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPT0gLTEpCi0gICAgICAgIGRhdGEu
aW5wdXRFbGVtZW50KCktPnNlbGVjdCgpOworICAgICAgICBpbnB1dEVsZW1lbnQtPnNlbGVjdCgp
OwogICAgIGVsc2UKICAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2FjaGVkIHNlbGVjdGlvbi4KLSAg
ICAgICAgdXBkYXRlU2VsZWN0aW9uUmFuZ2UoZGF0YSwgZGF0YS5jYWNoZWRTZWxlY3Rpb25TdGFy
dCgpLCBkYXRhLmNhY2hlZFNlbGVjdGlvbkVuZCgpKTsKKyAgICAgICAgdXBkYXRlU2VsZWN0aW9u
UmFuZ2UoaW5wdXRFbGVtZW50LCBlbGVtZW50LCBkYXRhLmNhY2hlZFNlbGVjdGlvblN0YXJ0KCks
IGRhdGEuY2FjaGVkU2VsZWN0aW9uRW5kKCkpOwogCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZWxlbWVudC0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmZyYW1l
KCkpCiAgICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5yZXZlYWxTZWxlY3Rpb24oKTsKIH0KIAot
dm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGlvblJhbmdlKElucHV0RWxlbWVudERhdGEm
IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCkKK3ZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxl
Y3Rpb25SYW5nZShJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwg
aW50IHN0YXJ0LCBpbnQgZW5kKQogewotICAgIGlmICghZGF0YS5pbnB1dEVsZW1lbnQoKS0+aXNU
ZXh0RmllbGQoKSkKKyAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKFJlbmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRvUmVu
ZGVyVGV4dENvbnRyb2woZGF0YS5lbGVtZW50KCktPnJlbmRlcmVyKCkpKQorICAgIGlmIChSZW5k
ZXJUZXh0Q29udHJvbCogcmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250cm9sKGVsZW1lbnQtPnJl
bmRlcmVyKCkpKQogICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVu
ZCk7CiB9CiAKLXZvaWQgSW5wdXRFbGVtZW50OjphYm91dFRvVW5sb2FkKElucHV0RWxlbWVudERh
dGEmIGRhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgSW5wdXRFbGVtZW50OjphYm91dFRv
VW5sb2FkKElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50KQogewot
ICAgIGlmICghZGF0YS5pbnB1dEVsZW1lbnQoKS0+aXNUZXh0RmllbGQoKSB8fCAhZGF0YS5lbGVt
ZW50KCktPmZvY3VzZWQoKSB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgaWYgKCFpbnB1dEVs
ZW1lbnQtPmlzVGV4dEZpZWxkKCkgfHwgIWVsZW1lbnQtPmZvY3VzZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBkb2N1bWVudC0+ZnJhbWUoKS0+dGV4dEZpZWxkRGlkRW5kRWRp
dGluZyhkYXRhLmVsZW1lbnQoKSk7CisgICAgZnJhbWUtPnRleHRGaWVsZERpZEVuZEVkaXRpbmco
ZWxlbWVudCk7CiB9CiAKLXZvaWQgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihJ
bnB1dEVsZW1lbnREYXRhJiBkYXRhLCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCit2b2lkIElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoSW5wdXRFbGVt
ZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgLy8gUmVuZGVyZXIgYW5kIG91ciBldmVu
dCBoYW5kbGVyIGFyZSByZXNwb25zaWJsZSBmb3IgY29uc3RyYWluaW5nIHZhbHVlcy4KLSAgICBB
U1NFUlQodmFsdWUgPT0gZGF0YS5pbnB1dEVsZW1lbnQoKS0+Y29uc3RyYWluVmFsdWUodmFsdWUp
IHx8IGRhdGEuaW5wdXRFbGVtZW50KCktPmNvbnN0cmFpblZhbHVlKHZhbHVlKS5pc0VtcHR5KCkp
OworICAgIEFTU0VSVCh2YWx1ZSA9PSBpbnB1dEVsZW1lbnQtPmNvbnN0cmFpblZhbHVlKHZhbHVl
KSB8fCBpbnB1dEVsZW1lbnQtPmNvbnN0cmFpblZhbHVlKHZhbHVlKS5pc0VtcHR5KCkpOwogCi0g
ICAgaWYgKGRhdGEuaW5wdXRFbGVtZW50KCktPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgIHVwZGF0
ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShkYXRhLCBkb2N1bWVudCk7CisgICAgaWYgKGlucHV0RWxl
bWVudC0+aXNUZXh0RmllbGQoKSkKKyAgICAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5
KGRhdGEsIGlucHV0RWxlbWVudCwgZWxlbWVudCk7CiAKICAgICAvLyBXb3JrYXJvdW5kIGZvciBi
dWcgd2hlcmUgdHJhaWxpbmcgXG4gaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdCBvZiB0ZXh0Q29u
dGVudC4KICAgICAvLyBUaGUgYXNzZXJ0IG1hY3JvIGFib3ZlIG1heSBhbHNvIGJlIHNpbXBsaWZp
ZWQgdG86ICB2YWx1ZSA9PSBjb25zdHJhaW5WYWx1ZSh2YWx1ZSkKQEAgLTE0MiwxMiArMTQ5LDEx
IEBAIHZvaWQgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcigKICAgICBlbHNlCiAg
ICAgICAgIGRhdGEuc2V0VmFsdWUodmFsdWUpOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IGRh
dGEuZWxlbWVudCgpOwogICAgIGVsZW1lbnQtPnNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIodHJ1ZSk7CiAKICAgICAvLyBGaXJlIHRoZSAiaW5wdXQiIERPTSBldmVudAogICAgIGVs
ZW1lbnQtPmRpc3BhdGNoRXZlbnQoZXZlbnROYW1lcygpLmlucHV0RXZlbnQsIHRydWUsIGZhbHNl
KTsKLSAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKGRhdGEsIGRvY3VtZW50KTsKKyAgICBub3Rp
ZnlGb3JtU3RhdGVDaGFuZ2VkKGVsZW1lbnQpOwogfQogCiBzdGF0aWMgaW50IG51bUNoYXJhY3Rl
cnNJbkdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCogcywgaW50IG51bUdyYXBoZW1lQ2x1c3Rl
cnMpCkBAIC0xNjcsMTIgKzE3MywxMiBAQCBzdGF0aWMgaW50IG51bUNoYXJhY3RlcnNJbkdyYXBo
ZW1lQ2x1c3RlCiAgICAgcmV0dXJuIHRleHRCcmVha0N1cnJlbnQoaXQpOwogfQogCi1TdHJpbmcg
SW5wdXRFbGVtZW50Ojpjb25zdHJhaW5WYWx1ZShjb25zdCBJbnB1dEVsZW1lbnREYXRhJiBkYXRh
LCBjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIGludCBtYXhMZW5ndGgpCitTdHJpbmcgSW5w
dXRFbGVtZW50Ojpjb25zdHJhaW5WYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCwgY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlLCBpbnQgbWF4TGVuZ3RoKQogewogICAgIFN0
cmluZyBzdHJpbmcgPSBwcm9wb3NlZFZhbHVlOwotICAgIGlmICghZGF0YS5pbnB1dEVsZW1lbnQo
KS0+aXNUZXh0RmllbGQoKSkKKyAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSkK
ICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICAgICAgCisKICAgICBzdHJpbmcucmVwbGFjZSgi
XHJcbiIsICIgIik7CiAgICAgc3RyaW5nLnJlcGxhY2UoJ1xyJywgJyAnKTsKICAgICBzdHJpbmcu
cmVwbGFjZSgnXG4nLCAnICcpOwpAQCAtMjA5LDEyICsyMTUsMTIgQEAgc3RhdGljIGludCBudW1H
cmFwaGVtZUNsdXN0ZXJzKFN0cmluZ0ltcAogICAgIHJldHVybiBudW07CiB9CiAKLXZvaWQgSW5w
dXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVsZW1lbnREYXRh
JiBkYXRhLCBEb2N1bWVudCogZG9jdW1lbnQsIEV2ZW50KiBldmVudCkKK3ZvaWQgSW5wdXRFbGVt
ZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVsZW1lbnREYXRhJiBkYXRh
LCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRG9jdW1lbnQqIGRvY3VtZW50LCBFdmVudCog
ZXZlbnQpCiB7CiAgICAgQVNTRVJUKGV2ZW50LT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkp
OwogCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRleHQgdG8gYmUgaW5zZXJ0ZWQgd2lsbCBu
b3QgdmlvbGF0ZSB0aGUgbWF4TGVuZ3RoLgotICAgIGludCBvbGRMZW5ndGggPSBudW1HcmFwaGVt
ZUNsdXN0ZXJzKGRhdGEuaW5wdXRFbGVtZW50KCktPnZhbHVlKCkuaW1wbCgpKTsKKyAgICBpbnQg
b2xkTGVuZ3RoID0gbnVtR3JhcGhlbWVDbHVzdGVycyhpbnB1dEVsZW1lbnQtPnZhbHVlKCkuaW1w
bCgpKTsKICAgICBBU1NFUlQob2xkTGVuZ3RoIDw9IGRhdGEubWF4TGVuZ3RoKCkpOwogICAgIGlu
dCBzZWxlY3Rpb25MZW5ndGggPSBudW1HcmFwaGVtZUNsdXN0ZXJzKHBsYWluVGV4dChkb2N1bWVu
dC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpLmltcGwoKSk7CiAgICAgQVNTRVJUKG9sZExlbmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgp
OwpAQCAtMjIyLDE4ICsyMjgsMTggQEAgdm9pZCBJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRl
eHRJbnNlcgogCiAgICAgLy8gVHJ1bmNhdGUgdGhlIGluc2VydGVkIHRleHQgdG8gYXZvaWQgdmlv
bGF0aW5nIHRoZSBtYXhMZW5ndGggYW5kIG90aGVyIGNvbnN0cmFpbnRzLgogICAgIEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KiB0ZXh0RXZlbnQgPSBzdGF0aWNfY2FzdDxCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCo+KGV2ZW50KTsKLSAgICB0ZXh0RXZlbnQtPnNldFRleHQoY29uc3RyYWluVmFsdWUo
ZGF0YSwgdGV4dEV2ZW50LT50ZXh0KCksIG1heE5ld0xlbmd0aCkpOworICAgIHRleHRFdmVudC0+
c2V0VGV4dChjb25zdHJhaW5WYWx1ZShpbnB1dEVsZW1lbnQsIHRleHRFdmVudC0+dGV4dCgpLCBt
YXhOZXdMZW5ndGgpKTsKIH0KIAotdm9pZCBJbnB1dEVsZW1lbnQ6OnBhcnNlU2l6ZUF0dHJpYnV0
ZShJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBNYXBwZWRBdHRyaWJ1dGUqIGF0dHJpYnV0ZSkKK3Zv
aWQgSW5wdXRFbGVtZW50OjpwYXJzZVNpemVBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYgZGF0
YSwgRWxlbWVudCogZWxlbWVudCwgTWFwcGVkQXR0cmlidXRlKiBhdHRyaWJ1dGUpCiB7CiAgICAg
ZGF0YS5zZXRTaXplKGF0dHJpYnV0ZS0+aXNOdWxsKCkgPyBJbnB1dEVsZW1lbnQ6OnNfZGVmYXVs
dFNpemUgOiBhdHRyaWJ1dGUtPnZhbHVlKCkudG9JbnQoKSk7CiAKLSAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGRhdGEuZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgIGlmIChSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVy
ZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCi12b2lkIElucHV0
RWxlbWVudDo6cGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwg
TWFwcGVkQXR0cmlidXRlKiBhdHRyaWJ1dGUpCit2b2lkIElucHV0RWxlbWVudDo6cGFyc2VNYXhM
ZW5ndGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQsIE1hcHBlZEF0dHJpYnV0ZSogYXR0cmlidXRlKQog
ewogICAgIGludCBtYXhMZW5ndGggPSBhdHRyaWJ1dGUtPmlzTnVsbCgpID8gSW5wdXRFbGVtZW50
OjpzX21heGltdW1MZW5ndGggOiBhdHRyaWJ1dGUtPnZhbHVlKCkudG9JbnQoKTsKICAgICBpZiAo
bWF4TGVuZ3RoIDw9IDAgfHwgbWF4TGVuZ3RoID4gSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5n
dGgpCkBAIC0yNDMsNDEgKzI0OSwzOCBAQCB2b2lkIElucHV0RWxlbWVudDo6cGFyc2VNYXhMZW5n
dGhBdHRyaWJ1CiAgICAgZGF0YS5zZXRNYXhMZW5ndGgobWF4TGVuZ3RoKTsKIAogICAgIGlmIChv
bGRNYXhMZW5ndGggIT0gbWF4TGVuZ3RoKQotICAgICAgICB1cGRhdGVWYWx1ZUlmTmVlZGVkKGRh
dGEpOworICAgICAgICB1cGRhdGVWYWx1ZUlmTmVlZGVkKGRhdGEsIGlucHV0RWxlbWVudCk7CiAK
LSAgICBkYXRhLmVsZW1lbnQoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIGVsZW1lbnQt
PnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIH0KIAotdm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVZh
bHVlSWZOZWVkZWQoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSkKK3ZvaWQgSW5wdXRFbGVtZW50Ojp1
cGRhdGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVudERhdGEmIGRhdGEsIElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50KQogewogICAgIFN0cmluZyBvbGRWYWx1ZSA9IGRhdGEudmFsdWUoKTsKLSAg
ICBTdHJpbmcgbmV3VmFsdWUgPSBkYXRhLmlucHV0RWxlbWVudCgpLT5jb25zdHJhaW5WYWx1ZShv
bGRWYWx1ZSk7CisgICAgU3RyaW5nIG5ld1ZhbHVlID0gaW5wdXRFbGVtZW50LT5jb25zdHJhaW5W
YWx1ZShvbGRWYWx1ZSk7CiAgICAgaWYgKG5ld1ZhbHVlICE9IG9sZFZhbHVlKQotICAgICAgICBk
YXRhLmlucHV0RWxlbWVudCgpLT5zZXRWYWx1ZShuZXdWYWx1ZSk7CisgICAgICAgIGlucHV0RWxl
bWVudC0+c2V0VmFsdWUobmV3VmFsdWUpOwogfQogCi12b2lkIElucHV0RWxlbWVudDo6bm90aWZ5
Rm9ybVN0YXRlQ2hhbmdlZChJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBEb2N1bWVudCogZG9jdW1l
bnQpCit2b2lkIElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChFbGVtZW50KiBl
bGVtZW50KQogeworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7
CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQot
ICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1TdGF0ZURpZENoYW5nZShkYXRh
LmVsZW1lbnQoKSk7CisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybVN0YXRl
RGlkQ2hhbmdlKGVsZW1lbnQpOwogfQogCiAvLyBJbnB1dEVsZW1lbnREYXRhCi1JbnB1dEVsZW1l
bnREYXRhOjpJbnB1dEVsZW1lbnREYXRhKElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVt
ZW50KiBlbGVtZW50KQotICAgIDogbV9pbnB1dEVsZW1lbnQoaW5wdXRFbGVtZW50KQotICAgICwg
bV9lbGVtZW50KGVsZW1lbnQpCi0gICAgLCBtX3BsYWNlaG9sZGVyU2hvdWxkQmVWaXNpYmxlKGZh
bHNlKQorSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRFbGVtZW50RGF0YSgpCisgICAgOiBtX3BsYWNl
aG9sZGVyU2hvdWxkQmVWaXNpYmxlKGZhbHNlKQogICAgICwgbV9zaXplKElucHV0RWxlbWVudDo6
c19kZWZhdWx0U2l6ZSkKICAgICAsIG1fbWF4TGVuZ3RoKElucHV0RWxlbWVudDo6c19tYXhpbXVt
TGVuZ3RoKQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCgtMSkKICAgICAsIG1fY2FjaGVk
U2VsZWN0aW9uRW5kKC0xKQogewotICAgIEFTU0VSVChtX2lucHV0RWxlbWVudCk7Ci0gICAgQVNT
RVJUKG1fZWxlbWVudCk7CiB9CiAKIElucHV0RWxlbWVudERhdGE6On5JbnB1dEVsZW1lbnREYXRh
KCkKSW5kZXg6IGRvbS9JbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vSW5wdXRFbGVt
ZW50LmgJKHJldmlzaW9uIDQ0MTYwKQorKysgZG9tL0lucHV0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02NiwzMSArNjYsMjggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIElucHV0RWxl
bWVudCgpIHsgfQogCi0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KElucHV0RWxl
bWVudERhdGEmLCBEb2N1bWVudCopOwotICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50
KElucHV0RWxlbWVudERhdGEmLCBEb2N1bWVudCopOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVBs
YWNlaG9sZGVyVmlzaWJpbGl0eShJbnB1dEVsZW1lbnREYXRhJiwgRG9jdW1lbnQqLCBib29sIHBs
YWNlaG9sZGVyVmFsdWVDaGFuZ2VkID0gZmFsc2UpOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUZv
Y3VzQXBwZWFyYW5jZShJbnB1dEVsZW1lbnREYXRhJiwgRG9jdW1lbnQqLCBib29sIHJlc3RvcmVQ
cmV2aW91c1NlbGVjdGlvbik7Ci0gICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uUmFuZ2Uo
SW5wdXRFbGVtZW50RGF0YSYsIGludCBzdGFydCwgaW50IGVuZCk7Ci0gICAgc3RhdGljIHZvaWQg
YWJvdXRUb1VubG9hZChJbnB1dEVsZW1lbnREYXRhJiwgRG9jdW1lbnQqKTsKLSAgICBzdGF0aWMg
dm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihJbnB1dEVsZW1lbnREYXRhJiwgRG9jdW1lbnQqLCBj
b25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnN0cmFpblZhbHVlKGNvbnN0IElu
cHV0RWxlbWVudERhdGEmLCBjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIGludCBtYXhMZW5n
dGgpOwotICAgIHN0YXRpYyB2b2lkIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0
RWxlbWVudERhdGEmLCBEb2N1bWVudCosIEV2ZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgcGFyc2VT
aXplQXR0cmlidXRlKElucHV0RWxlbWVudERhdGEmLCBNYXBwZWRBdHRyaWJ1dGUqKTsKLSAgICBz
dGF0aWMgdm9pZCBwYXJzZU1heExlbmd0aEF0dHJpYnV0ZShJbnB1dEVsZW1lbnREYXRhJiwgTWFw
cGVkQXR0cmlidXRlKik7Ci0gICAgc3RhdGljIHZvaWQgdXBkYXRlVmFsdWVJZk5lZWRlZChJbnB1
dEVsZW1lbnREYXRhJik7Ci0gICAgc3RhdGljIHZvaWQgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChJ
bnB1dEVsZW1lbnREYXRhJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEZv
Y3VzRXZlbnQoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKKyAg
ICBzdGF0aWMgdm9pZCBkaXNwYXRjaEJsdXJFdmVudChJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRF
bGVtZW50KiwgRWxlbWVudCopOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlz
aWJpbGl0eShJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50KiwgRWxlbWVudCosIGJvb2wg
cGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQgPSBmYWxzZSk7CisgICAgc3RhdGljIHZvaWQgdXBkYXRl
Rm9jdXNBcHBlYXJhbmNlKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqLCBFbGVtZW50
KiwgYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOworICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZVNlbGVjdGlvblJhbmdlKElucHV0RWxlbWVudCosIEVsZW1lbnQqLCBpbnQgc3RhcnQsIGludCBl
bmQpOworICAgIHN0YXRpYyB2b2lkIGFib3V0VG9VbmxvYWQoSW5wdXRFbGVtZW50KiwgRWxlbWVu
dCopOworICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKElucHV0RWxlbWVudERh
dGEmLCBJbnB1dEVsZW1lbnQqLCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGlj
IFN0cmluZyBjb25zdHJhaW5WYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQqLCBjb25zdCBTdHJpbmcm
IHByb3Bvc2VkVmFsdWUsIGludCBtYXhMZW5ndGgpOworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqLCBE
b2N1bWVudCosIEV2ZW50Kik7CisgICAgc3RhdGljIHZvaWQgcGFyc2VTaXplQXR0cmlidXRlKElu
cHV0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgTWFwcGVkQXR0cmlidXRlKik7CisgICAgc3RhdGlj
IHZvaWQgcGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxl
bWVudCosIEVsZW1lbnQqLCBNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRh
dGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqKTsKKyAgICBz
dGF0aWMgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKEVsZW1lbnQqKTsKIH07CiAKIC8vIEhU
TUwvV01MSW5wdXRFbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZhcmlhYmxlCiAv
LyBhbmQgcGFzcyBpdCB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaW4gSW5wdXRFbGVt
ZW50CiBjbGFzcyBJbnB1dEVsZW1lbnREYXRhIHsKIHB1YmxpYzoKLSAgICBJbnB1dEVsZW1lbnRE
YXRhKElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKKyAgICBJbnB1dEVsZW1lbnREYXRhKCk7CiAg
ICAgfklucHV0RWxlbWVudERhdGEoKTsKIAotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEVsZW1lbnQ7IH0KLSAgICBFbGVtZW50KiBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9Ci0KICAgICBib29sIHBsYWNlaG9sZGVyU2hv
dWxkQmVWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9wbGFjZWhvbGRlclNob3VsZEJlVmlzaWJs
ZTsgfQogICAgIHZvaWQgc2V0UGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUoYm9vbCB2aXNpYmxl
KSB7IG1fcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGUgPSB2aXNpYmxlOyB9CiAKQEAgLTExMyw4
ICsxMTAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYWNoZWRTZWxlY3Rpb25FbmQoaW50IHZh
bHVlKSB7IG1fY2FjaGVkU2VsZWN0aW9uRW5kID0gdmFsdWU7IH0KIAogcHJpdmF0ZToKLSAgICBJ
bnB1dEVsZW1lbnQqIG1faW5wdXRFbGVtZW50OwotICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKICAg
ICBib29sIG1fcGxhY2Vob2xkZXJTaG91bGRCZVZpc2libGU7CiAgICAgQXRvbWljU3RyaW5nIG1f
bmFtZTsKICAgICBTdHJpbmcgbV92YWx1ZTsKSW5kZXg6IGh0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNDQx
NjApCisrKyBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3
ICs2Nyw2IEBAIGNvbnN0IGludCBtYXhTYXZlZFJlc3VsdHMgPSAyNTY7CiAKIEhUTUxJbnB1dEVs
ZW1lbnQ6OkhUTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQogICAgIDogSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZSh0YWdOYW1lLCBkb2MsIGYpCi0gICAgLCBtX2RhdGEodGhpcywgdGhpcykK
ICAgICAsIG1feFBvcygwKQogICAgICwgbV95UG9zKDApCiAgICAgLCBtX21heFJlc3VsdHMoLTEp
CkBAIC0xNjIsMTQgKzE2MSwxNCBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzTW91c2VGb2N1
c2FibGUoCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29s
IHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKIHsgICAgICAgIAogICAgIGlmIChpc1RleHRGaWVs
ZCgpKQotICAgICAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShtX2RhdGEs
IGRvY3VtZW50KCksIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CisgICAgICAgIElucHV0RWxl
bWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKG1fZGF0YSwgdGhpcywgdGhpcywgcmVzdG9yZVBy
ZXZpb3VzU2VsZWN0aW9uKTsKICAgICBlbHNlCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShyZXN0b3JlUHJldmlvdXNTZWxlY3Rp
b24pOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoKQogewotICAg
IElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZChtX2RhdGEsIGRvY3VtZW50KCkpOworICAgIElu
cHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCh0aGlzLCB0aGlzKTsKIH0KIAogYm9vbCBIVE1MSW5w
dXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CkBAIC0xNzksNyArMTc4LDcg
QEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldAogCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCgpCiB7Ci0gICAgSW5wdXRFbGVtZW50Ojpk
aXNwYXRjaEZvY3VzRXZlbnQobV9kYXRhLCBkb2N1bWVudCgpKTsKKyAgICBJbnB1dEVsZW1lbnQ6
OmRpc3BhdGNoRm9jdXNFdmVudChtX2RhdGEsIHRoaXMsIHRoaXMpOwogCiAgICAgaWYgKGlzVGV4
dEZpZWxkKCkpCiAgICAgICAgIG1fYXV0b2ZpbGxlZCA9IGZhbHNlOwpAQCAtMTg5LDcgKzE4OCw3
IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW4KIAogdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpCiB7Ci0gICAgSW5wdXRFbGVtZW50Ojpk
aXNwYXRjaEJsdXJFdmVudChtX2RhdGEsIGRvY3VtZW50KCkpOworICAgIElucHV0RWxlbWVudDo6
ZGlzcGF0Y2hCbHVyRXZlbnQobV9kYXRhLCB0aGlzLCB0aGlzKTsKICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlOjpkaXNwYXRjaEJsdXJFdmVudCgpOwogfQogCkBAIC0yNzQsNyAr
MjczLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRJbnB1dFR5cGUoY29ucwogICAgICAg
ICAgICAgaWYgKCFkaWRTdG9yZVZhbHVlICYmIHdpbGxTdG9yZVZhbHVlKQogICAgICAgICAgICAg
ICAgIG1fZGF0YS5zZXRWYWx1ZShjb25zdHJhaW5WYWx1ZShnZXRBdHRyaWJ1dGUodmFsdWVBdHRy
KSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIElucHV0RWxlbWVudDo6dXBk
YXRlVmFsdWVJZk5lZWRlZChtX2RhdGEpOworICAgICAgICAgICAgICAgIElucHV0RWxlbWVudDo6
dXBkYXRlVmFsdWVJZk5lZWRlZChtX2RhdGEsIHRoaXMpOwogCiAgICAgICAgICAgICBpZiAod2Fz
UGFzc3dvcmRGaWVsZCAmJiAhaXNQYXNzd29yZEZpZWxkKQogICAgICAgICAgICAgICAgIHVucmVn
aXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpOwpAQCAtMzAxLDcgKzMwMCw3IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5wdXRUeXBlKGNvbnMKICAgICAgICAgICAgIGNo
ZWNrZWRSYWRpb0J1dHRvbnModGhpcykuYWRkQnV0dG9uKHRoaXMpOwogICAgICAgICB9CiAKLSAg
ICAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKG1fZGF0YSwgZG9jdW1l
bnQoKSk7CisgICAgICAgIElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlz
KTsKICAgICB9CiAgICAgbV9oYXZlVHlwZSA9IHRydWU7CiAKQEAgLTUwOCw3ICs1MDcsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNlbGVjdCgpCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQogewotICAgIElucHV0RWxlbWVu
dDo6dXBkYXRlU2VsZWN0aW9uUmFuZ2UobV9kYXRhLCBzdGFydCwgZW5kKTsKKyAgICBJbnB1dEVs
ZW1lbnQ6OnVwZGF0ZVNlbGVjdGlvblJhbmdlKHRoaXMsIHRoaXMsIHN0YXJ0LCBlbmQpOwogfQog
CiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0FueUVs
ZW1lbnQpCkBAIC01OTUsOSArNTk0LDkgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYgogICAgICAgICAgICAgbV91c2VEZWZhdWx0Q2hlY2tlZCA9IHRydWU7CiAgICAg
ICAgIH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtYXhsZW5ndGhBdHRyKQotICAg
ICAgICBJbnB1dEVsZW1lbnQ6OnBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKG1fZGF0YSwgYXR0cik7
CisgICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUobV9kYXRhLCB0
aGlzLCB0aGlzLCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2l6ZUF0dHIp
Ci0gICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmlidXRlKG1fZGF0YSwgYXR0cik7
CisgICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmlidXRlKG1fZGF0YSwgdGhpcywg
YXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIpIHsKICAgICAgICAg
aWYgKHJlbmRlcmVyKCkgJiYgaW5wdXRUeXBlKCkgPT0gSU1BR0UpCiAgICAgICAgICAgICB0b1Jl
bmRlckltYWdlKHJlbmRlcmVyKCkpLT51cGRhdGVBbHRUZXh0KCk7CkBAIC02NTIsNyArNjUxLDcg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gcGxhY2Vo
b2xkZXJBdHRyKSB7CiAgICAgICAgIGlmIChpc1RleHRGaWVsZCgpKQotICAgICAgICAgICAgSW5w
dXRFbGVtZW50Ojp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkobV9kYXRhLCBkb2N1bWVudCgp
LCB0cnVlKTsKKyAgICAgICAgICAgIElucHV0RWxlbWVudDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNp
YmlsaXR5KG1fZGF0YSwgdGhpcywgdGhpcywgdHJ1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gYXV0b3NhdmVBdHRyIHx8CiAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IGlu
Y3JlbWVudGFsQXR0ciB8fAogICAgICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSBtaW5BdHRyIHx8
CkBAIC05OTQsNyArOTkzLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25z
dCBTdAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fZGF0YS5zZXRWYWx1ZShjb25zdHJh
aW5WYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICAgaWYgKGlzVGV4dEZpZWxkKCkpIHsKLSAgICAg
ICAgICAgICAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShtX2Rh
dGEsIGRvY3VtZW50KCkpOworICAgICAgICAgICAgICAgIElucHV0RWxlbWVudDo6dXBkYXRlUGxh
Y2Vob2xkZXJWaXNpYmlsaXR5KG1fZGF0YSwgdGhpcywgdGhpcyk7CiAgICAgICAgICAgICAgICAg
aWYgKGluRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRl
U3R5bGVJZk5lZWRlZCgpOwogICAgICAgICAgICAgfQpAQCAtMTAwOCwxMSArMTAwNywxMSBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0CiAgICAgaWYgKGlzVGV4dEZp
ZWxkKCkpIHsKICAgICAgICAgdW5zaWduZWQgbWF4ID0gbV9kYXRhLnZhbHVlKCkubGVuZ3RoKCk7
CiAgICAgICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCi0gICAgICAg
ICAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGlvblJhbmdlKG1fZGF0YSwgbWF4LCBtYXgp
OworICAgICAgICAgICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSh0aGlzLCB0
aGlzLCBtYXgsIG1heCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhY2hlU2VsZWN0aW9u
KG1heCwgbWF4KTsKICAgICB9Ci0gICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFu
Z2VkKG1fZGF0YSwgZG9jdW1lbnQoKSk7CisgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3Rh
dGVDaGFuZ2VkKHRoaXMpOwogfQogCiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6cGxhY2Vob2xk
ZXIoKSBjb25zdApAQCAtMTAzNCw3ICsxMDMzLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRWYWx1ZUZyb21SZW5kZQogewogICAgIC8vIEZpbGUgdXBsb2FkIGNvbnRyb2xzIHdpbGwgYWx3
YXlzIHVzZSBzZXRGaWxlTGlzdEZyb21SZW5kZXJlci4KICAgICBBU1NFUlQoaW5wdXRUeXBlKCkg
IT0gRklMRSk7Ci0gICAgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihtX2RhdGEs
IGRvY3VtZW50KCksIHZhbHVlKTsKKyAgICBJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRl
cmVyKG1fZGF0YSwgdGhpcywgdGhpcywgdmFsdWUpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykK
QEAgLTEwNDUsNyArMTA0NCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RG
cm9tUmUKICAgICAgICAgbV9maWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShwYXRoc1tpXSkp
OwogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKLSAgICBJ
bnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQobV9kYXRhLCBkb2N1bWVudCgpKTsK
KyAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CiB9CiAKIGJv
b2wgSFRNTElucHV0RWxlbWVudDo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKSBj
b25zdApAQCAtMTQwNSw3ICsxNDA0LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0
RXZlbnRIYW5kbAogICAgIH0KIAogICAgIGlmIChldnQtPmlzQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQoKSkKLSAgICAgICAgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dChtX2RhdGEsIGRvY3VtZW50KCksIGV2dCk7CisgICAgICAgIElucHV0RWxlbWVudDo6aGFuZGxl
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQobV9kYXRhLCB0aGlzLCBkb2N1bWVudCgpLCBldnQpOwog
CiAgICAgaWYgKGlzVGV4dEZpZWxkKCkgJiYgcmVuZGVyZXIoKSAmJiAoZXZ0LT5pc01vdXNlRXZl
bnQoKSB8fCBldnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZ0LT5pc1doZWVsRXZlbnQoKSB8fCBldnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2dC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5mb2N1c0V2ZW50KSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lKj4ocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldnQpOwpAQCAtMTU1MCw3
ICsxNTQ5LDcgQEAgRmlsZUxpc3QqIEhUTUxJbnB1dEVsZW1lbnQ6OmZpbGVzKCkKIAogU3RyaW5n
IEhUTUxJbnB1dEVsZW1lbnQ6OmNvbnN0cmFpblZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRW
YWx1ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gSW5wdXRFbGVtZW50Ojpjb25zdHJhaW5WYWx1ZSht
X2RhdGEsIHByb3Bvc2VkVmFsdWUsIG1fZGF0YS5tYXhMZW5ndGgoKSk7CisgICAgcmV0dXJuIElu
cHV0RWxlbWVudDo6Y29uc3RyYWluVmFsdWUodGhpcywgcHJvcG9zZWRWYWx1ZSwgbV9kYXRhLm1h
eExlbmd0aCgpKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpuZWVkc0FjdGl2YXRpb25D
YWxsYmFjaygpCkluZGV4OiB3bWwvV01MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3
bWwvV01MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gNDQxNjApCisrKyB3bWwvV01MSW5wdXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFdNTElucHV0RWxlbWVudDo6V01MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBXTUxGb3JtQ29udHJvbEVsZW1l
bnQodGFnTmFtZSwgZG9jKQotICAgICwgbV9kYXRhKHRoaXMsIHRoaXMpCiAgICAgLCBtX2lzUGFz
c3dvcmRGaWVsZChmYWxzZSkKICAgICAsIG1faXNFbXB0eU9rKGZhbHNlKQogICAgICwgbV9udW1P
ZkNoYXJzQWxsb3dlZEJ5TWFzaygwKQpAQCAtNzAsNyArNjksNyBAQCBib29sIFdNTElucHV0RWxl
bWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpCiAKIHZvaWQgV01MSW5wdXRFbGVtZW50OjpkaXNwYXRj
aEZvY3VzRXZlbnQoKQogewotICAgIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KG1f
ZGF0YSwgZG9jdW1lbnQoKSk7CisgICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQo
bV9kYXRhLCB0aGlzLCB0aGlzKTsKICAgICBXTUxFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQo
KTsKIH0KIApAQCAtODgsMTggKzg3LDE4IEBAIHZvaWQgV01MSW5wdXRFbGVtZW50OjpkaXNwYXRj
aEJsdXJFdmVudCgKICAgICBpZiAoIW5hbWVWYXJpYWJsZS5pc0VtcHR5KCkpCiAgICAgICAgIHdt
bFBhZ2VTdGF0ZUZvckRvY3VtZW50KGRvY3VtZW50KCkpLT5zdG9yZVZhcmlhYmxlKG5hbWVWYXJp
YWJsZSwgdmFsKTsgCiAKLSAgICBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KG1fZGF0
YSwgZG9jdW1lbnQoKSk7CisgICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudChtX2Rh
dGEsIHRoaXMsIHRoaXMpOwogICAgIFdNTEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCk7CiB9
CiAKIHZvaWQgV01MSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0
b3JlUHJldmlvdXNTZWxlY3Rpb24pCiB7Ci0gICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1c0Fw
cGVhcmFuY2UobV9kYXRhLCBkb2N1bWVudCgpLCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwor
ICAgIElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKG1fZGF0YSwgdGhpcywgdGhp
cywgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKIH0KIAogdm9pZCBXTUxJbnB1dEVsZW1lbnQ6
OmFib3V0VG9VbmxvYWQoKQogewotICAgIElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZChtX2Rh
dGEsIGRvY3VtZW50KCkpOworICAgIElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCh0aGlzLCB0
aGlzKTsKIH0KIAogaW50IFdNTElucHV0RWxlbWVudDo6c2l6ZSgpIGNvbnN0CkBAIC0xMzUsNyAr
MTM0LDcgQEAgU3RyaW5nIFdNTElucHV0RWxlbWVudDo6dmFsdWUoKSBjb25zdAogCiB2b2lkIFdN
TElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBJbnB1
dEVsZW1lbnQ6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShtX2RhdGEsIGRvY3VtZW50KCkp
OworICAgIElucHV0RWxlbWVudDo6dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KG1fZGF0YSwg
dGhpcywgdGhpcyk7CiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxz
ZSk7CiAgICAgbV9kYXRhLnNldFZhbHVlKGNvbnN0cmFpblZhbHVlKHZhbHVlKSk7CiAgICAgaWYg
KGluRG9jdW1lbnQoKSkKQEAgLTE0NiwxNiArMTQ1LDE2IEBAIHZvaWQgV01MSW5wdXRFbGVtZW50
OjpzZXRWYWx1ZShjb25zdCBTdHIKIAogICAgIHVuc2lnbmVkIG1heCA9IG1fZGF0YS52YWx1ZSgp
Lmxlbmd0aCgpOwogICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCi0g
ICAgICAgIElucHV0RWxlbWVudDo6dXBkYXRlU2VsZWN0aW9uUmFuZ2UobV9kYXRhLCBtYXgsIG1h
eCk7CisgICAgICAgIElucHV0RWxlbWVudDo6dXBkYXRlU2VsZWN0aW9uUmFuZ2UodGhpcywgdGhp
cywgbWF4LCBtYXgpOwogICAgIGVsc2UKICAgICAgICAgY2FjaGVTZWxlY3Rpb24obWF4LCBtYXgp
OwogCi0gICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKG1fZGF0YSwgZG9j
dW1lbnQoKSk7CisgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMp
OwogfQogCiB2b2lkIFdNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVy
KG1fZGF0YSwgZG9jdW1lbnQoKSwgdmFsdWUpOworICAgIElucHV0RWxlbWVudDo6c2V0VmFsdWVG
cm9tUmVuZGVyZXIobV9kYXRhLCB0aGlzLCB0aGlzLCB2YWx1ZSk7CiB9CiAKIGJvb2wgV01MSW5w
dXRFbGVtZW50OjpzYXZlRm9ybUNvbnRyb2xTdGF0ZShTdHJpbmcmIHJlc3VsdCkgY29uc3QKQEAg
LTE5OCw5ICsxOTcsOSBAQCB2b2lkIFdNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
CiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIHNldEZvcm1Db250
cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IEhUTUxOYW1lczo6bWF4bGVuZ3RoQXR0cikKLSAgICAgICAgSW5wdXRFbGVtZW50Ojpw
YXJzZU1heExlbmd0aEF0dHJpYnV0ZShtX2RhdGEsIGF0dHIpOworICAgICAgICBJbnB1dEVsZW1l
bnQ6OnBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKG1fZGF0YSwgdGhpcywgdGhpcywgYXR0cik7CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6c2l6ZUF0dHIpCi0gICAgICAg
IElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmlidXRlKG1fZGF0YSwgYXR0cik7CisgICAgICAg
IElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmlidXRlKG1fZGF0YSwgdGhpcywgYXR0cik7CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFdNTE5hbWVzOjpmb3JtYXRBdHRyKQogICAgICAg
ICBtX2Zvcm1hdE1hc2sgPSB2YWxpZGF0ZUlucHV0TWFzayhwYXJzZVZhbHVlRm9yYmlkZGluZ1Zh
cmlhYmxlUmVmZXJlbmNlcyhhdHRyLT52YWx1ZSgpKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFdNTE5hbWVzOjplbXB0eW9rQXR0cikKQEAgLTMxNSw3ICszMTQsNyBAQCB2b2lkIFdN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlCiAgICAgfQogCiAgICAgaWYgKGV2dC0+
aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpKQotICAgICAgICBJbnB1dEVsZW1lbnQ6OmhhbmRs
ZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KG1fZGF0YSwgZG9jdW1lbnQoKSwgZXZ0KTsKKyAgICAg
ICAgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChtX2RhdGEsIHRo
aXMsIGRvY3VtZW50KCksIGV2dCk7CiAKICAgICBpZiAocmVuZGVyZXIoKSAmJiAoZXZ0LT5pc01v
dXNlRXZlbnQoKSB8fCBldnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZ0LT5pc1doZWVsRXZlbnQoKSB8
fCBldnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50IHx8IGV2dC0+dHlwZSgpID09
IGV2ZW50TmFtZXMoKS5mb2N1c0V2ZW50KSkKICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKj4ocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldnQpOwpAQCAt
MzI5LDcgKzMyOCw3IEBAIHZvaWQgV01MSW5wdXRFbGVtZW50OjpjYWNoZVNlbGVjdGlvbihpbnQK
IAogU3RyaW5nIFdNTElucHV0RWxlbWVudDo6Y29uc3RyYWluVmFsdWUoY29uc3QgU3RyaW5nJiBw
cm9wb3NlZFZhbHVlKSBjb25zdAogewotICAgIHJldHVybiBJbnB1dEVsZW1lbnQ6OmNvbnN0cmFp
blZhbHVlKG1fZGF0YSwgcHJvcG9zZWRWYWx1ZSwgbV9kYXRhLm1heExlbmd0aCgpKTsKKyAgICBy
ZXR1cm4gSW5wdXRFbGVtZW50Ojpjb25zdHJhaW5WYWx1ZSh0aGlzLCBwcm9wb3NlZFZhbHVlLCBt
X2RhdGEubWF4TGVuZ3RoKCkpOwogfQogCiB2b2lkIFdNTElucHV0RWxlbWVudDo6ZG9jdW1lbnRE
aWRCZWNvbWVBY3RpdmUoKQo=
</data>
<flag name="review"
          id="15543"
          type_id="1"
          status="+"
          setter="staikos"
    />
          </attachment>
      

    </bug>

</bugzilla>