<?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>23465</bug_id>
          
          <creation_ts>2009-01-21 15:58:18 -0800</creation_ts>
          <short_desc>Refactor some more HTMLOptionElement code</short_desc>
          <delta_ts>2009-01-22 12:41:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</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>
          
          <blocked>20393</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>106527</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 15:58:18 -0800</bug_when>
    <thetext>Refactor some more HTMLOptionElement code in the new OptionElement class, so it can be used by WMLOptionElement as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106528</commentid>
    <comment_count>1</comment_count>
      <attachid>26910</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 15:58:57 -0800</bug_when>
    <thetext>Created attachment 26910
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106531</commentid>
    <comment_count>2</comment_count>
      <attachid>26910</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-21 16:04:45 -0800</bug_when>
    <thetext>Comment on attachment 26910
Initial patch

Seems like this one:
 982         if (stripLeadingWhiteSpace(static_cast&lt;HTMLOptionElement*&gt;(items[index])-&gt;textIndentedToRespectGroupLabel()).startsWith(prefix, false)) {


Doesn&apos;t want that call.  Also, that line could be broken into multiple lines to be more readable.

What is &quot;aggregateOptionText&quot;?  Maybe you mean aggregate as a verb?  Still not sure why it&apos;s used that way.

maybe m_optionData?  m_data is so bland, reminds me of the kde &quot;d&quot; pointers which I was never a fan of.

I think &quot;aggregate*&quot; I would just call &quot;optionText&quot; and &quot;optionValue&quot;.  The fact that they have to do work under the covers is OK to hide in this case I think.

Otherwise this looks fine to me.  I&apos;d like to see the final patch though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106535</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 16:16:00 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 26910 [review])
&gt; Seems like this one:
&gt;  982         if
&gt; (stripLeadingWhiteSpace(static_cast&lt;HTMLOptionElement*&gt;(items[index])-&gt;textIndentedToRespectGroupLabel()).startsWith(prefix,
&gt; false)) {
&gt; 
&gt; 
&gt; Doesn&apos;t want that call.  Also, that line could be broken into multiple lines to
&gt; be more readable.
Right, as discussed on IRC, it&apos;s as inefficient as before, so we can just leave it. Otherwhise we&apos;d need to add a new text() method to OptionElement.

&gt; 
&gt; What is &quot;aggregateOptionText&quot;?  Maybe you mean aggregate as a verb?  Still not
&gt; sure why it&apos;s used that way.
Renamed to &quot;collectOption...&quot;.

&gt; 
&gt; maybe m_optionData?  m_data is so bland, reminds me of the kde &quot;d&quot; pointers
&gt; which I was never a fan of.
I&apos;d really like to leave it as m_data, as all other classes use the &quot;XXXElementData&quot; classes in the same way: (HTML/SVG/WML)(Style/Script/Option/...)Element.
 
&gt; I think &quot;aggregate*&quot; I would just call &quot;optionText&quot; and &quot;optionValue&quot;.  The
&gt; fact that they have to do work under the covers is OK to hide in this case I
&gt; think.
&gt; 
&gt; Otherwise this looks fine to me.  I&apos;d like to see the final patch though.
Okay, uploading.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106537</commentid>
    <comment_count>4</comment_count>
      <attachid>26915</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-21 16:17:12 -0800</bug_when>
    <thetext>Created attachment 26915
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106629</commentid>
    <comment_count>5</comment_count>
      <attachid>26915</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-22 11:18:52 -0800</bug_when>
    <thetext>Comment on attachment 26915
Updated patch

Looks fine.  I would change it back to &quot;collect&quot; instead of &quot;collected&quot;, since the whole point is to designate that those methods do work instead of just returning a member variable.  I&apos;m not sure &quot;collectedFoo&quot; is any better than &quot;foo&quot; in this case.  &quot;collectFoo&quot; at least shows that work is being done in the method, if you wanted to express that.    So I suggest either &quot;optionText&quot; or &quot;collectOptionText&quot; when you land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106635</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-01-22 12:41:29 -0800</bug_when>
    <thetext>Thanks Eric! Landed in r40130.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26910</attachid>
            <date>2009-01-21 15:58:57 -0800</date>
            <delta_ts>2009-01-21 16:17:12 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>OptionRefactor.diff</filename>
            <type>text/plain</type>
            <size>16043</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwMTAx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMDktMDEt
MjEgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgRnVydGhl
ciBlbmhhbmNtZW50cyB0byBzaGFyZSBjb2RlIGJldHdlZW4gSFRNTE9wdGlvbkVsZW1lbnQgYW5k
IHRoZSB1cGNvbWluZyBXTUxPcHRpb25FbGVtZW50LgorCisgICAgICAgIFJlbmFtZSBvcHRpb25U
ZXh0KCkgdG8gdGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpIGluIChIVE1MKU9wdGlv
bkVsZW1lbnQsIGFzIGl0IGZpdHMgYmV0dGVyLgorICAgICAgICBvcHRpb25UZXh0KCkgcmV0dXJu
cyB0aGUgb3B0aW9ucyB0ZXh0IHByZWZpeGVkIHdpdGggc29tZSBzcGFjZXMsIGluIGNhc2UgaXQg
Z290IGFuIG9wdGdyb3VwIHBhcmVudC4KKworICAgICAgICBBZGQgdHdvIG1vcmUgcHVyZS12aXJ0
dWFsIGZ1bmN0aW9ucyB0byBPcHRpb25FbGVtZW50OiBzZXRTZWxlY3RlZFN0YXRlKGJvb2wpICYg
dmFsdWUoKS4KKyAgICAgICAgVGhlc2UgYXJlbid0IHVzZWQgb3V0c2lkZSBvZiBodG1sLyBhdCB0
aGUgbW9tZW50ICh1bmxpa2UgdGhlIG90aGVyIHB1cmUtdmlydHVhbCBmdW5jdGlvbnMKKyAgICAg
ICAgdXNlZCBieSBSZW5kZXJNZW51TGlzdC9SZW5kZXJMaXN0Qm94KSAtIGJ1dCB0aGV5IHdpbGwg
YmUgdXNlZCBieSBTZWxlY3RFbGVtZW50LCBvbmNlIGl0IGV4aXN0cy4KKworICAgICAgICAqIGRv
bS9PcHRpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbkVsZW1lbnQ6OnNl
dFNlbGVjdGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uRWxlbWVudDo6YWdncmVn
YXRlT3B0aW9uVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25FbGVtZW50OjphZ2dyZWdh
dGVPcHRpb25UZXh0UmVzcGVjdGluZ0dyb3VwTGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6T3B0
aW9uRWxlbWVudDo6YWdncmVnYXRlT3B0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3B0
aW9uRWxlbWVudERhdGE6Ok9wdGlvbkVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
dGlvbkVsZW1lbnREYXRhOjp+T3B0aW9uRWxlbWVudERhdGEpOgorICAgICAgICAqIGRvbS9PcHRp
b25FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25FbGVtZW50RGF0YTo6ZWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25FbGVtZW50RGF0YTo6dmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6T3B0aW9uRWxlbWVudERhdGE6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9wdGlvbkVsZW1lbnREYXRhOjpsYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25F
bGVtZW50RGF0YTo6c2V0TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uRWxlbWVudERh
dGE6OnNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbkVsZW1lbnREYXRhOjpzZXRT
ZWxlY3RlZCk6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6SFRNTE9wdGlvbkVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxPcHRpb25FbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0
aW9uRWxlbWVudDo6c2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1l
bnQ6OnNldFNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Ojpz
ZXRTZWxlY3RlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Ojps
YWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVk
VG9SZXNwZWN0R3JvdXBMYWJlbCk6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnVw
ZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnBhaW50
SXRlbUZvcmVncm91bmQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQpOgorCiAyMDA5LTAxLTIx
ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBK
dXN0aW4gR2FyY2lhLgpJbmRleDogZG9tL09wdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGRvbS9PcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gNDAxMDEpCisrKyBkb20vT3B0aW9uRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDkgKzIxLDEyIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiT3B0aW9uRWxlbWVudC5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJPcHRpb25Hcm91cEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJTY3JpcHRFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IAogLy8gRklYTUU6IEFjdGl2YXRlIGNvZGUgb25jZSBXTUxPcHRpb25FbGVtZW50IGlzIGF2YWls
YWJsZQpAQCAtMzQsNiArMzcsNzggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIE9w
dGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoT3B0aW9uRWxlbWVudERhdGEmIGRhdGEsIGJv
b2wgc2VsZWN0ZWQpCit7CisgICAgaWYgKGRhdGEuc2VsZWN0ZWQoKSA9PSBzZWxlY3RlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZGF0YS5zZXRTZWxlY3RlZChzZWxlY3RlZCk7CisgICAgZGF0
YS5lbGVtZW50KCktPnNldENoYW5nZWQoKTsKK30KKworU3RyaW5nIE9wdGlvbkVsZW1lbnQ6OmFn
Z3JlZ2F0ZU9wdGlvblRleHQoY29uc3QgT3B0aW9uRWxlbWVudERhdGEmIGRhdGEsIERvY3VtZW50
KiBkb2N1bWVudCkKK3sKKyAgICBTdHJpbmcgdGV4dDsKKworICAgIC8vIFdpbklFIGRvZXMgbm90
IHVzZSB0aGUgbGFiZWwgYXR0cmlidXRlLCBzbyBhcyBhIHF1aXJrLCB3ZSBpZ25vcmUgaXQuCisg
ICAgaWYgKCFkb2N1bWVudC0+aW5Db21wYXRNb2RlKCkpCisgICAgICAgIHRleHQgPSBkYXRhLmxh
YmVsKCk7CisKKyAgICBpZiAodGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgTm9kZSogbiA9IGRh
dGEuZWxlbWVudCgpLT5maXJzdENoaWxkKCk7CisgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAg
ICAgICBpZiAobi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwgbi0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpCisgICAgICAgICAgICAgICAgdGV4dCArPSBu
LT5ub2RlVmFsdWUoKTsKKworICAgICAgICAgICAgLy8gc2tpcCBzY3JpcHQgY29udGVudAorICAg
ICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSAmJiB0b1NjcmlwdEVsZW1lbnQoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG4pKSkKKyAgICAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0
U2libGluZyhkYXRhLmVsZW1lbnQoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoZGF0YS5lbGVtZW50KCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdGV4dCA9IGRvY3VtZW50LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29k
aW5nKHRleHQpOworCisgICAgLy8gSW4gV2luSUUsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRl
c3BhY2UgaXMgaWdub3JlZCBpbiBvcHRpb25zIGFuZCBvcHRncm91cHMuIFdlIG1hdGNoIHRoaXMg
YmVoYXZpb3IuCisgICAgdGV4dCA9IHRleHQuc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICAvLyBX
ZSB3YW50IHRvIGNvbGxhcHNlIG91ciB3aGl0ZXNwYWNlIHRvby4gIFRoaXMgd2lsbCBtYXRjaCBv
dGhlciBicm93c2Vycy4KKyAgICB0ZXh0ID0gdGV4dC5zaW1wbGlmeVdoaXRlU3BhY2UoKTsKKyAg
ICByZXR1cm4gdGV4dDsKK30KKworU3RyaW5nIE9wdGlvbkVsZW1lbnQ6OmFnZ3JlZ2F0ZU9wdGlv
blRleHRSZXNwZWN0aW5nR3JvdXBMYWJlbChjb25zdCBPcHRpb25FbGVtZW50RGF0YSYgZGF0YSwg
RG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4oZGF0YS5lbGVtZW50KCktPnBhcmVudE5vZGUoKSk7CisgICAgaWYg
KHBhcmVudEVsZW1lbnQgJiYgb3B0aW9uR3JvdXBFbGVtZW50Rm9yRWxlbWVudChwYXJlbnRFbGVt
ZW50KSkKKyAgICAgICAgcmV0dXJuICIgICAgIiArIGFnZ3JlZ2F0ZU9wdGlvblRleHQoZGF0YSwg
ZG9jdW1lbnQpOworCisgICAgcmV0dXJuIGFnZ3JlZ2F0ZU9wdGlvblRleHQoZGF0YSwgZG9jdW1l
bnQpOworfQorCitTdHJpbmcgT3B0aW9uRWxlbWVudDo6YWdncmVnYXRlT3B0aW9uVmFsdWUoY29u
c3QgT3B0aW9uRWxlbWVudERhdGEmIGRhdGEsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBT
dHJpbmcgdmFsdWUgPSBkYXRhLnZhbHVlKCk7CisgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgLy8gVXNlIHRoZSB0ZXh0IGlmIHRoZSB2YWx1ZSB3
YXNuJ3Qgc2V0LgorICAgIHJldHVybiBhZ2dyZWdhdGVPcHRpb25UZXh0KGRhdGEsIGRvY3VtZW50
KS5zdHJpcFdoaXRlU3BhY2UoKTsKK30KKworLy8gT3B0aW9uRWxlbWVudERhdGEKK09wdGlvbkVs
ZW1lbnREYXRhOjpPcHRpb25FbGVtZW50RGF0YShFbGVtZW50KiBlbGVtZW50KQorICAgIDogbV9l
bGVtZW50KGVsZW1lbnQpCisgICAgLCBtX3NlbGVjdGVkKGZhbHNlKQoreworICAgIEFTU0VSVCht
X2VsZW1lbnQpOworfQorCitPcHRpb25FbGVtZW50RGF0YTo6fk9wdGlvbkVsZW1lbnREYXRhKCkK
K3sKK30KKwogT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudEZvckVsZW1lbnQoRWxlbWVudCog
ZWxlbWVudCkKIHsKICAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb25UYWcpKQpJbmRleDogZG9tL09wdGlvbkVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBkb20vT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiA0MDEwMSkK
KysrIGRvbS9PcHRpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDIwICsyMSw1NiBA
QAogI2lmbmRlZiBPcHRpb25FbGVtZW50X2gKICNkZWZpbmUgT3B0aW9uRWxlbWVudF9oCiAKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEVsZW1lbnQ7Ci1jbGFzcyBTdHJpbmc7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIE9wdGlvbkVs
ZW1lbnREYXRhOwogCiBjbGFzcyBPcHRpb25FbGVtZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5PcHRpb25FbGVtZW50KCkgeyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2VsZWN0ZWQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgb3B0aW9uVGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShib29sKSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0
cmluZyB0ZXh0SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgT3B0aW9u
RWxlbWVudCgpIHsgfQorCisgICAgc3RhdGljIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShPcHRpb25F
bGVtZW50RGF0YSYsIGJvb2wgc2VsZWN0ZWQpOworICAgIHN0YXRpYyBTdHJpbmcgYWdncmVnYXRl
T3B0aW9uVGV4dChjb25zdCBPcHRpb25FbGVtZW50RGF0YSYsIERvY3VtZW50Kik7CisgICAgc3Rh
dGljIFN0cmluZyBhZ2dyZWdhdGVPcHRpb25UZXh0UmVzcGVjdGluZ0dyb3VwTGFiZWwoY29uc3Qg
T3B0aW9uRWxlbWVudERhdGEmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBTdHJpbmcgYWdncmVn
YXRlT3B0aW9uVmFsdWUoY29uc3QgT3B0aW9uRWxlbWVudERhdGEmLCBEb2N1bWVudCopOworfTsK
KworLy8gSFRNTC9XTUxPcHRpb25FbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZh
cmlhYmxlCisvLyBhbmQgcGFzcyBpdCB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaW4g
T3B0aW9uRWxlbWVudAorY2xhc3MgT3B0aW9uRWxlbWVudERhdGEgeworcHVibGljOgorICAgIE9w
dGlvbkVsZW1lbnREYXRhKEVsZW1lbnQqKTsKKyAgICB+T3B0aW9uRWxlbWVudERhdGEoKTsKKwor
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKworICAg
IFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICB2b2lkIHNldFZh
bHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9CisKKyAgICBTdHJp
bmcgbGFiZWwoKSBjb25zdCB7IHJldHVybiBtX2xhYmVsOyB9CisgICAgdm9pZCBzZXRMYWJlbChj
b25zdCBTdHJpbmcmIGxhYmVsKSB7IG1fbGFiZWwgPSBsYWJlbDsgfQorCisgICAgYm9vbCBzZWxl
Y3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWQ7IH0KKyAgICB2b2lkIHNldFNlbGVjdGVk
KGJvb2wgc2VsZWN0ZWQpIHsgbV9zZWxlY3RlZCA9IHNlbGVjdGVkOyB9CisKK3ByaXZhdGU6Cisg
ICAgRWxlbWVudCogbV9lbGVtZW50OworICAgIFN0cmluZyBtX3ZhbHVlOworICAgIFN0cmluZyBt
X2xhYmVsOworICAgIGJvb2wgbV9zZWxlY3RlZDsKIH07CiAKIE9wdGlvbkVsZW1lbnQqIG9wdGlv
bkVsZW1lbnRGb3JFbGVtZW50KEVsZW1lbnQqKTsKSW5kZXg6IGh0bWwvSFRNTE9wdGlvbkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lv
biA0MDEwMSkKKysrIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxPcHRpb25F
bGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCiAgICAgOiBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KHRhZ05hbWUsIGRvYywgZikKLSAgICAsIG1fc2VsZWN0ZWQoZmFsc2UpCisgICAgLCBt
X2RhdGEodGhpcykKICAgICAsIG1fc3R5bGUoMCkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShv
cHRpb25UYWcpKTsKQEAgLTc5LDMyICs3OSw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTE9w
dGlvbkVsZW1lbnQ6OnQKIAogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50Ojp0ZXh0KCkgY29uc3QK
IHsKLSAgICBTdHJpbmcgdGV4dDsKLQotICAgIC8vIFdpbklFIGRvZXMgbm90IHVzZSB0aGUgbGFi
ZWwgYXR0cmlidXRlLCBzbyBhcyBhIHF1aXJrLCB3ZSBpZ25vcmUgaXQuCi0gICAgaWYgKCFkb2N1
bWVudCgpLT5pbkNvbXBhdE1vZGUoKSkKLSAgICAgICAgdGV4dCA9IGdldEF0dHJpYnV0ZShsYWJl
bEF0dHIpOwotCi0gICAgaWYgKHRleHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IE5vZGUq
IG4gPSBmaXJzdENoaWxkKCk7Ci0gICAgICAgIHdoaWxlIChuKSB7Ci0gICAgICAgICAgICBpZiAo
bi0+bm9kZVR5cGUoKSA9PSBURVhUX05PREUgfHwgbi0+bm9kZVR5cGUoKSA9PSBDREFUQV9TRUNU
SU9OX05PREUpCi0gICAgICAgICAgICAgICAgdGV4dCArPSBuLT5ub2RlVmFsdWUoKTsKLSAgICAg
ICAgICAgIC8vIHNraXAgc2NyaXB0IGNvbnRlbnQKLSAgICAgICAgICAgIGlmIChuLT5pc0VsZW1l
bnROb2RlKCkgJiYgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpCi0gICAgICAg
ICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUodGhpcyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICB0ZXh0ID0gZG9jdW1lbnQoKS0+ZGlzcGxheVN0cmluZ01vZGlm
aWVkQnlFbmNvZGluZyh0ZXh0KTsKLSAgICAvLyBJbiBXaW5JRSwgbGVhZGluZyBhbmQgdHJhaWxp
bmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIGluIG9wdGlvbnMgYW5kIG9wdGdyb3Vwcy4gV2UgbWF0
Y2ggdGhpcyBiZWhhdmlvci4KLSAgICB0ZXh0ID0gdGV4dC5zdHJpcFdoaXRlU3BhY2UoKTsKLSAg
ICAvLyBXZSB3YW50IHRvIGNvbGxhcHNlIG91ciB3aGl0ZXNwYWNlIHRvby4gIFRoaXMgd2lsbCBt
YXRjaCBvdGhlciBicm93c2Vycy4KLSAgICB0ZXh0ID0gdGV4dC5zaW1wbGlmeVdoaXRlU3BhY2Uo
KTsKLQotICAgIHJldHVybiB0ZXh0OworICAgIHJldHVybiBPcHRpb25FbGVtZW50OjphZ2dyZWdh
dGVPcHRpb25UZXh0KG1fZGF0YSwgZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVs
ZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nICZ0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKQEAg
LTE1MCwxOSArMTI1LDE4IEBAIGludCBIVE1MT3B0aW9uRWxlbWVudDo6aW5kZXgoKSBjb25zdAog
dm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gc2VsZWN0ZWRBdHRyKQotICAg
ICAgICBtX3NlbGVjdGVkID0gKCFhdHRyLT5pc051bGwoKSk7CisgICAgICAgIG1fZGF0YS5zZXRT
ZWxlY3RlZCghYXR0ci0+aXNOdWxsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2
YWx1ZUF0dHIpCi0gICAgICAgIG1fdmFsdWUgPSBhdHRyLT52YWx1ZSgpOworICAgICAgICBtX2Rh
dGEuc2V0VmFsdWUoYXR0ci0+dmFsdWUoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGxhYmVsQXR0cikKKyAgICAgICAgbV9kYXRhLnNldExhYmVsKGF0dHItPnZhbHVlKCkpOwogICAg
IGVsc2UKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiB9CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6dmFsdWUoKSBjb25zdAog
ewotICAgIGlmICggIW1fdmFsdWUuaXNOdWxsKCkgKQotICAgICAgICByZXR1cm4gbV92YWx1ZTsK
LSAgICAvLyBVc2UgdGhlIHRleHQgaWYgdGhlIHZhbHVlIHdhc24ndCBzZXQuCi0gICAgcmV0dXJu
IHRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICByZXR1cm4gT3B0aW9uRWxlbWVudDo6YWdn
cmVnYXRlT3B0aW9uVmFsdWUobV9kYXRhLCBkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBIVE1MT3B0
aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTE3MCwyMSArMTQ0
LDI1IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFMKICAgICBzZXRB
dHRyaWJ1dGUodmFsdWVBdHRyLCB2YWx1ZSk7CiB9CiAKK2Jvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6
OnNlbGVjdGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLnNlbGVjdGVkKCk7Cit9CisK
IHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkKGJvb2wgc2VsZWN0ZWQpCiB7Ci0g
ICAgaWYgKG1fc2VsZWN0ZWQgPT0gc2VsZWN0ZWQpCisgICAgaWYgKG1fZGF0YS5zZWxlY3RlZCgp
ID09IHNlbGVjdGVkKQogICAgICAgICByZXR1cm47CisKKyAgICBPcHRpb25FbGVtZW50OjpzZXRT
ZWxlY3RlZFN0YXRlKG1fZGF0YSwgc2VsZWN0ZWQpOworCiAgICAgaWYgKEhUTUxTZWxlY3RFbGVt
ZW50KiBzZWxlY3QgPSBvd25lclNlbGVjdEVsZW1lbnQoKSkKICAgICAgICAgc2VsZWN0LT5zZXRT
ZWxlY3RlZEluZGV4KHNlbGVjdGVkID8gaW5kZXgoKSA6IC0xLCBmYWxzZSk7Ci0gICAgbV9zZWxl
Y3RlZCA9IHNlbGVjdGVkOwogfQogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3Rl
ZFN0YXRlKGJvb2wgc2VsZWN0ZWQpCiB7Ci0gICAgaWYgKG1fc2VsZWN0ZWQgPT0gc2VsZWN0ZWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3NlbGVjdGVkID0gc2VsZWN0ZWQ7Ci0gICAgc2V0Q2hh
bmdlZCgpOworICAgIE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUobV9kYXRhLCBzZWxl
Y3RlZCk7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29s
IGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwg
aW50IGNoaWxkQ291bnREZWx0YSkKQEAgLTIxOSw3ICsxOTcsNyBAQCB2b2lkIEhUTUxPcHRpb25F
bGVtZW50OjpzZXREZWZhdWx0U2VsZWN0CiAKIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6bGFi
ZWwoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKKyAgICBy
ZXR1cm4gbV9kYXRhLmxhYmVsKCk7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNldExh
YmVsKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC0yMzcsMTIgKzIxNSw5IEBAIFJlbmRlclN0eWxl
KiBIVE1MT3B0aW9uRWxlbWVudDo6bm9uUmVuZGUKICAgICByZXR1cm4gbV9zdHlsZS5nZXQoKTsg
CiB9CiAKLVN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6b3B0aW9uVGV4dCgpIGNvbnN0CitTdHJp
bmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKSBj
b25zdAogewotICAgIGlmIChwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1l
KG9wdGdyb3VwVGFnKSkKLSAgICAgICAgcmV0dXJuICIgICAgIiArIHRleHQoKTsKLQotICAgIHJl
dHVybiB0ZXh0KCk7CisgICAgcmV0dXJuIE9wdGlvbkVsZW1lbnQ6OmFnZ3JlZ2F0ZU9wdGlvblRl
eHRSZXNwZWN0aW5nR3JvdXBMYWJlbChtX2RhdGEsIGRvY3VtZW50KCkpOwogfQogCiBib29sIEhU
TUxPcHRpb25FbGVtZW50OjpkaXNhYmxlZCgpIGNvbnN0CkluZGV4OiBodG1sL0hUTUxPcHRpb25F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lv
biA0MDEwMSkKKysrIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsMTIgKzU2LDEyIEBAIHB1YmxpYzoKICAgICBpbnQgaW5kZXgoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKLSAgICBT
dHJpbmcgdmFsdWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2Vs
ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkOyB9CisgICAgdmlydHVhbCBib29sIHNl
bGVjdGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxlY3RlZChib29sKTsKLSAgICB2b2lkIHNl
dFNlbGVjdGVkU3RhdGUoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkU3RhdGUo
Ym9vbCk7CiAKICAgICBIVE1MU2VsZWN0RWxlbWVudCogb3duZXJTZWxlY3RFbGVtZW50KCkgY29u
c3Q7CiAKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0
OwogICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBvcHRpb25UZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdGV4dEluZGVudGVkVG9S
ZXNwZWN0R3JvdXBMYWJlbCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGRpc2FibGVkKCkg
Y29uc3Q7CiAgICAgCkBAIC04Miw5ICs4Miw4IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBSZW5kZXJTdHlsZSogbm9uUmVuZGVyZXJSZW5kZXJTdHlsZSgpIGNvbnN0Owot
ICAgIAotICAgIFN0cmluZyBtX3ZhbHVlOwotICAgIGJvb2wgbV9zZWxlY3RlZDsKKworICAgIE9w
dGlvbkVsZW1lbnREYXRhIG1fZGF0YTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fc3R5bGU7
CiB9OwogCkluZGV4OiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBo
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gNDAxMDEpCisrKyBodG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc5LDcgKzk3OSw3IEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2UKICAgICAgICAgaWYgKCFpdGVtc1tp
bmRleF0tPmhhc1RhZ05hbWUob3B0aW9uVGFnKSB8fCBpdGVtc1tpbmRleF0tPmRpc2FibGVkKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoc3RyaXBMZWFkaW5nV2hpdGVT
cGFjZShzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2luZGV4XSktPm9wdGlv
blRleHQoKSkuc3RhcnRzV2l0aChwcmVmaXgsIGZhbHNlKSkgeworICAgICAgICBpZiAoc3RyaXBM
ZWFkaW5nV2hpdGVTcGFjZShzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2lu
ZGV4XSktPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKSkuc3RhcnRzV2l0aChwcmVm
aXgsIGZhbHNlKSkgewogICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChsaXN0VG9PcHRpb25J
bmRleChpbmRleCkpOwogICAgICAgICAgICAgaWYoIXVzZXNNZW51TGlzdCgpKQogICAgICAgICAg
ICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24g
NDAxMDEpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNSw3ICsxMDUsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkK
ICAgICAgICAgICAgIFN0cmluZyB0ZXh0OwogICAgICAgICAgICAgRm9udCBpdGVtRm9udCA9IHN0
eWxlKCktPmZvbnQoKTsKICAgICAgICAgICAgIGlmIChPcHRpb25FbGVtZW50KiBvcHRpb25FbGVt
ZW50ID0gb3B0aW9uRWxlbWVudEZvckVsZW1lbnQoZWxlbWVudCkpCi0gICAgICAgICAgICAgICAg
dGV4dCA9IG9wdGlvbkVsZW1lbnQtPm9wdGlvblRleHQoKTsKKyAgICAgICAgICAgICAgICB0ZXh0
ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwogICAg
ICAgICAgICAgZWxzZSBpZiAoT3B0aW9uR3JvdXBFbGVtZW50KiBvcHRpb25Hcm91cEVsZW1lbnQg
PSBvcHRpb25Hcm91cEVsZW1lbnRGb3JFbGVtZW50KGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAg
ICAgdGV4dCA9IG9wdGlvbkdyb3VwRWxlbWVudC0+Z3JvdXBMYWJlbFRleHQoKTsKICAgICAgICAg
ICAgICAgICBGb250RGVzY3JpcHRpb24gZCA9IGl0ZW1Gb250LmZvbnREZXNjcmlwdGlvbigpOwpA
QCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZCgKIAogICAgIFN0cmluZyBpdGVtVGV4dDsKICAgICBpZiAob3B0aW9uRWxlbWVudCkKLSAgICAg
ICAgaXRlbVRleHQgPSBvcHRpb25FbGVtZW50LT5vcHRpb25UZXh0KCk7CisgICAgICAgIGl0ZW1U
ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwog
ICAgIGVsc2UgaWYgKE9wdGlvbkdyb3VwRWxlbWVudCogb3B0aW9uR3JvdXBFbGVtZW50ID0gb3B0
aW9uR3JvdXBFbGVtZW50Rm9yRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgaXRlbVRleHQgPSBv
cHRpb25Hcm91cEVsZW1lbnQtPmdyb3VwTGFiZWxUZXh0KCk7ICAgICAgCiAKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck1l
bnVMaXN0LmNwcAkocmV2aXNpb24gNDAxMDEpCisrKyByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBSZW5kZXJNZW51TGlz
dDo6dXBkYXRlT3B0aW9uc1dpZHRoKAogICAgICAgICBpZiAoIW9wdGlvbkVsZW1lbnQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBTdHJpbmcgdGV4dCA9IG9wdGlvbkVsZW1lbnQt
Pm9wdGlvblRleHQoKTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBvcHRpb25FbGVtZW50LT50ZXh0
SW5kZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CiAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBtYXhPcHRpb25XaWR0aCA9IG1heChtYXhPcHRpb25XaWR0aCwgc3R5
bGUoKS0+Zm9udCgpLmZsb2F0V2lkdGgodGV4dCkpOwogICAgIH0KQEAgLTE4Miw3ICsxODIsNyBA
QCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0RnJvbU9wdGlvbihpCiAgICAgU3RyaW5nIHRl
eHQgPSAiIjsKICAgICBpZiAoaSA+PSAwICYmIGkgPCBzaXplKSB7CiAgICAgICAgIGlmIChPcHRp
b25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gb3B0aW9uRWxlbWVudEZvckVsZW1lbnQobGlzdEl0
ZW1zW2ldKSkKLSAgICAgICAgICAgIHRleHQgPSBvcHRpb25FbGVtZW50LT5vcHRpb25UZXh0KCk7
CisgICAgICAgICAgICB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0
R3JvdXBMYWJlbCgpOwogICAgIH0KIAogICAgIHNldFRleHQodGV4dC5zdHJpcFdoaXRlU3BhY2Uo
KSk7CkBAIC0zMDgsNyArMzA4LDcgQEAgU3RyaW5nIFJlbmRlck1lbnVMaXN0OjppdGVtVGV4dCh1
bnNpZ25lZAogICAgIGlmIChPcHRpb25Hcm91cEVsZW1lbnQqIG9wdGlvbkdyb3VwRWxlbWVudCA9
IG9wdGlvbkdyb3VwRWxlbWVudEZvckVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBv
cHRpb25Hcm91cEVsZW1lbnQtPmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgZWxzZSBpZiAoT3B0aW9u
RWxlbWVudCogb3B0aW9uRWxlbWVudCA9IG9wdGlvbkVsZW1lbnRGb3JFbGVtZW50KGVsZW1lbnQp
KQotICAgICAgICByZXR1cm4gb3B0aW9uRWxlbWVudC0+b3B0aW9uVGV4dCgpOworICAgICAgICBy
ZXR1cm4gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBMYWJlbCgpOwog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAo=
</data>
<flag name="review"
          id="12881"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26915</attachid>
            <date>2009-01-21 16:17:12 -0800</date>
            <delta_ts>2009-01-22 11:18:52 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>OptionRefactor.diff</filename>
            <type>text/plain</type>
            <size>16137</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwMTAy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDktMDEt
MjEgIE5pa29sYXMgWmltbWVybWFubiAgPG5pa29sYXMuemltbWVybWFubkB0b3JjaG1vYmlsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCisKKyAgICAgICAgRml4ZXM6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ2NQorCisgICAgICAg
IEZ1cnRoZXIgZW5oYW5jbWVudHMgdG8gc2hhcmUgY29kZSBiZXR3ZWVuIEhUTUxPcHRpb25FbGVt
ZW50IGFuZCB0aGUgdXBjb21pbmcgV01MT3B0aW9uRWxlbWVudC4KKworICAgICAgICBSZW5hbWUg
b3B0aW9uVGV4dCgpIHRvIHRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKSBpbiAoSFRN
TClPcHRpb25FbGVtZW50LCBhcyBpdCBmaXRzIGJldHRlci4KKyAgICAgICAgb3B0aW9uVGV4dCgp
IHJldHVybnMgdGhlIG9wdGlvbnMgdGV4dCBwcmVmaXhlZCB3aXRoIHNvbWUgc3BhY2VzLCBpbiBj
YXNlIGl0IGdvdCBhbiBvcHRncm91cCBwYXJlbnQuCisKKyAgICAgICAgQWRkIHR3byBtb3JlIHB1
cmUtdmlydHVhbCBmdW5jdGlvbnMgdG8gT3B0aW9uRWxlbWVudDogc2V0U2VsZWN0ZWRTdGF0ZShi
b29sKSAmIHZhbHVlKCkuCisgICAgICAgIFRoZXNlIGFyZW4ndCB1c2VkIG91dHNpZGUgb2YgaHRt
bC8gYXQgdGhlIG1vbWVudCAodW5saWtlIHRoZSBvdGhlciBwdXJlLXZpcnR1YWwgZnVuY3Rpb25z
CisgICAgICAgIHVzZWQgYnkgUmVuZGVyTWVudUxpc3QvUmVuZGVyTGlzdEJveCkgLSBidXQgdGhl
eSB3aWxsIGJlIHVzZWQgYnkgU2VsZWN0RWxlbWVudCwgb25jZSBpdCBleGlzdHMuCisKKyAgICAg
ICAgKiBkb20vT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25FbGVt
ZW50OjpzZXRTZWxlY3RlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbkVsZW1lbnQ6
OmNvbGxlY3RlZE9wdGlvblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uRWxlbWVudDo6
Y29sbGVjdGVkT3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RlZE9wdGlvblZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9wdGlvbkVsZW1lbnREYXRhOjpPcHRpb25FbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpPcHRpb25FbGVtZW50RGF0YTo6fk9wdGlvbkVsZW1lbnREYXRhKToKKyAgICAgICAgKiBk
b20vT3B0aW9uRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uRWxlbWVudERhdGE6
OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uRWxlbWVudERhdGE6OnZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbkVsZW1lbnREYXRhOjpzZXRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpPcHRpb25FbGVtZW50RGF0YTo6bGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6
T3B0aW9uRWxlbWVudERhdGE6OnNldExhYmVsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbkVs
ZW1lbnREYXRhOjpzZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25FbGVtZW50RGF0
YTo6c2V0U2VsZWN0ZWQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Ojp0ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ6OnNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRp
b25FbGVtZW50OjpzZXRTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6c2V0U2VsZWN0ZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudDo6bGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OnRleHRJ
bmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVs
ZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50Ojp0eXBlQWhlYWRGaW5kKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94
OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNX
aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6c2V0VGV4dEZyb21PcHRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6Oml0ZW1UZXh0KToKKwogMjAw
OS0wMS0xOSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCkluZGV4OiBkb20vT3B0aW9uRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gZG9tL09wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDEwMSkKKysrIGRvbS9P
cHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsOSArMjEsMTIgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJPcHRpb25FbGVtZW50LmgiCiAKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIk9wdGlvbkdyb3VwRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgogCiAvLyBGSVhNRTogQWN0aXZhdGUgY29kZSBvbmNlIFdNTE9wdGlvbkVsZW1lbnQg
aXMgYXZhaWxhYmxlCkBAIC0zNCw2ICszNyw3OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3ZvaWQgT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0ZShPcHRpb25FbGVtZW50RGF0YSYg
ZGF0YSwgYm9vbCBzZWxlY3RlZCkKK3sKKyAgICBpZiAoZGF0YS5zZWxlY3RlZCgpID09IHNlbGVj
dGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBkYXRhLnNldFNlbGVjdGVkKHNlbGVjdGVkKTsK
KyAgICBkYXRhLmVsZW1lbnQoKS0+c2V0Q2hhbmdlZCgpOworfQorCitTdHJpbmcgT3B0aW9uRWxl
bWVudDo6Y29sbGVjdGVkT3B0aW9uVGV4dChjb25zdCBPcHRpb25FbGVtZW50RGF0YSYgZGF0YSwg
RG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIFN0cmluZyB0ZXh0OworCisgICAgLy8gV2luSUUg
ZG9lcyBub3QgdXNlIHRoZSBsYWJlbCBhdHRyaWJ1dGUsIHNvIGFzIGEgcXVpcmssIHdlIGlnbm9y
ZSBpdC4KKyAgICBpZiAoIWRvY3VtZW50LT5pbkNvbXBhdE1vZGUoKSkKKyAgICAgICAgdGV4dCA9
IGRhdGEubGFiZWwoKTsKKworICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkgeworICAgICAgICBOb2Rl
KiBuID0gZGF0YS5lbGVtZW50KCktPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgd2hpbGUgKG4pIHsK
KyAgICAgICAgICAgIGlmIChuLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fCBuLT5u
b2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSkKKyAgICAgICAgICAgICAgICB0
ZXh0ICs9IG4tPm5vZGVWYWx1ZSgpOworCisgICAgICAgICAgICAvLyBza2lwIHNjcmlwdCBjb250
ZW50CisgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVu
dChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikpKQorICAgICAgICAgICAgICAgIG4gPSBuLT50cmF2
ZXJzZU5leHRTaWJsaW5nKGRhdGEuZWxlbWVudCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShkYXRhLmVsZW1lbnQoKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0ZXh0ID0gZG9jdW1lbnQtPmRpc3BsYXlTdHJpbmdNb2RpZmll
ZEJ5RW5jb2RpbmcodGV4dCk7CisKKyAgICAvLyBJbiBXaW5JRSwgbGVhZGluZyBhbmQgdHJhaWxp
bmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIGluIG9wdGlvbnMgYW5kIG9wdGdyb3Vwcy4gV2UgbWF0
Y2ggdGhpcyBiZWhhdmlvci4KKyAgICB0ZXh0ID0gdGV4dC5zdHJpcFdoaXRlU3BhY2UoKTsKKwor
ICAgIC8vIFdlIHdhbnQgdG8gY29sbGFwc2Ugb3VyIHdoaXRlc3BhY2UgdG9vLiAgVGhpcyB3aWxs
IG1hdGNoIG90aGVyIGJyb3dzZXJzLgorICAgIHRleHQgPSB0ZXh0LnNpbXBsaWZ5V2hpdGVTcGFj
ZSgpOworICAgIHJldHVybiB0ZXh0OworfQorCitTdHJpbmcgT3B0aW9uRWxlbWVudDo6Y29sbGVj
dGVkT3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsKGNvbnN0IE9wdGlvbkVsZW1lbnREYXRh
JiBkYXRhLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgRWxlbWVudCogcGFyZW50RWxlbWVu
dCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihkYXRhLmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsK
KyAgICBpZiAocGFyZW50RWxlbWVudCAmJiBvcHRpb25Hcm91cEVsZW1lbnRGb3JFbGVtZW50KHBh
cmVudEVsZW1lbnQpKQorICAgICAgICByZXR1cm4gIiAgICAiICsgY29sbGVjdGVkT3B0aW9uVGV4
dChkYXRhLCBkb2N1bWVudCk7CisKKyAgICByZXR1cm4gY29sbGVjdGVkT3B0aW9uVGV4dChkYXRh
LCBkb2N1bWVudCk7Cit9CisKK1N0cmluZyBPcHRpb25FbGVtZW50Ojpjb2xsZWN0ZWRPcHRpb25W
YWx1ZShjb25zdCBPcHRpb25FbGVtZW50RGF0YSYgZGF0YSwgRG9jdW1lbnQqIGRvY3VtZW50KQor
eworICAgIFN0cmluZyB2YWx1ZSA9IGRhdGEudmFsdWUoKTsKKyAgICBpZiAoIXZhbHVlLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICAvLyBVc2UgdGhlIHRleHQgaWYgdGhl
IHZhbHVlIHdhc24ndCBzZXQuCisgICAgcmV0dXJuIGNvbGxlY3RlZE9wdGlvblRleHQoZGF0YSwg
ZG9jdW1lbnQpLnN0cmlwV2hpdGVTcGFjZSgpOworfQorCisvLyBPcHRpb25FbGVtZW50RGF0YQor
T3B0aW9uRWxlbWVudERhdGE6Ok9wdGlvbkVsZW1lbnREYXRhKEVsZW1lbnQqIGVsZW1lbnQpCisg
ICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fc2VsZWN0ZWQoZmFsc2UpCit7CisgICAg
QVNTRVJUKG1fZWxlbWVudCk7Cit9CisKK09wdGlvbkVsZW1lbnREYXRhOjp+T3B0aW9uRWxlbWVu
dERhdGEoKQoreworfQorCiBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVtZW50Rm9yRWxlbWVudChF
bGVtZW50KiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYg
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvblRhZykpCkluZGV4OiBkb20vT3B0
aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9PcHRpb25FbGVtZW50LmgJKHJldmlzaW9u
IDQwMTAxKQorKysgZG9tL09wdGlvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMjAg
KzIxLDU2IEBACiAjaWZuZGVmIE9wdGlvbkVsZW1lbnRfaAogI2RlZmluZSBPcHRpb25FbGVtZW50
X2gKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRWxlbWVudDsKLWNsYXNzIFN0cmluZzsKK2NsYXNzIERvY3VtZW50OworY2xhc3Mg
T3B0aW9uRWxlbWVudERhdGE7CiAKIGNsYXNzIE9wdGlvbkVsZW1lbnQgewogcHVibGljOgogICAg
IHZpcnR1YWwgfk9wdGlvbkVsZW1lbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBzZWxlY3Rl
ZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBvcHRpb25UZXh0KCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFN0YXRlKGJvb2wpID0gMDsKKworICAgIHZp
cnR1YWwgU3RyaW5nIHRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCA9IDA7CiAKIHByb3RlY3RlZDoKICAg
ICBPcHRpb25FbGVtZW50KCkgeyB9CisKKyAgICBzdGF0aWMgdm9pZCBzZXRTZWxlY3RlZFN0YXRl
KE9wdGlvbkVsZW1lbnREYXRhJiwgYm9vbCBzZWxlY3RlZCk7CisgICAgc3RhdGljIFN0cmluZyBj
b2xsZWN0ZWRPcHRpb25UZXh0KGNvbnN0IE9wdGlvbkVsZW1lbnREYXRhJiwgRG9jdW1lbnQqKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGNvbGxlY3RlZE9wdGlvblRleHRSZXNwZWN0aW5nR3JvdXBMYWJl
bChjb25zdCBPcHRpb25FbGVtZW50RGF0YSYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFN0cmlu
ZyBjb2xsZWN0ZWRPcHRpb25WYWx1ZShjb25zdCBPcHRpb25FbGVtZW50RGF0YSYsIERvY3VtZW50
Kik7Cit9OworCisvLyBIVE1ML1dNTE9wdGlvbkVsZW1lbnQgaG9sZCB0aGlzIHN0cnVjdCBhcyBt
ZW1iZXIgdmFyaWFibGUKKy8vIGFuZCBwYXNzIGl0IHRvIHRoZSBzdGF0aWMgaGVscGVyIGZ1bmN0
aW9ucyBpbiBPcHRpb25FbGVtZW50CitjbGFzcyBPcHRpb25FbGVtZW50RGF0YSB7CitwdWJsaWM6
CisgICAgT3B0aW9uRWxlbWVudERhdGEoRWxlbWVudCopOworICAgIH5PcHRpb25FbGVtZW50RGF0
YSgpOworCisgICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsg
fQorCisgICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIHZv
aWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KKwor
ICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWw7IH0KKyAgICB2b2lkIHNl
dExhYmVsKGNvbnN0IFN0cmluZyYgbGFiZWwpIHsgbV9sYWJlbCA9IGxhYmVsOyB9CisKKyAgICBi
b29sIHNlbGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZDsgfQorICAgIHZvaWQgc2V0
U2VsZWN0ZWQoYm9vbCBzZWxlY3RlZCkgeyBtX3NlbGVjdGVkID0gc2VsZWN0ZWQ7IH0KKworcHJp
dmF0ZToKKyAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAg
U3RyaW5nIG1fbGFiZWw7CisgICAgYm9vbCBtX3NlbGVjdGVkOwogfTsKIAogT3B0aW9uRWxlbWVu
dCogb3B0aW9uRWxlbWVudEZvckVsZW1lbnQoRWxlbWVudCopOwpJbmRleDogaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDQwMTAxKQorKysgaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRN
TE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKICAgICA6IEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQotICAgICwgbV9zZWxlY3RlZChmYWxzZSkK
KyAgICAsIG1fZGF0YSh0aGlzKQogICAgICwgbV9zdHlsZSgwKQogewogICAgIEFTU0VSVChoYXNU
YWdOYW1lKG9wdGlvblRhZykpOwpAQCAtNzksMzIgKzc5LDcgQEAgY29uc3QgQXRvbWljU3RyaW5n
JiBIVE1MT3B0aW9uRWxlbWVudDo6dAogCiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnRleHQo
KSBjb25zdAogewotICAgIFN0cmluZyB0ZXh0OwotCi0gICAgLy8gV2luSUUgZG9lcyBub3QgdXNl
IHRoZSBsYWJlbCBhdHRyaWJ1dGUsIHNvIGFzIGEgcXVpcmssIHdlIGlnbm9yZSBpdC4KLSAgICBp
ZiAoIWRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKQotICAgICAgICB0ZXh0ID0gZ2V0QXR0cmli
dXRlKGxhYmVsQXR0cik7Ci0KLSAgICBpZiAodGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29u
c3QgTm9kZSogbiA9IGZpcnN0Q2hpbGQoKTsKLSAgICAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAg
ICAgIGlmIChuLT5ub2RlVHlwZSgpID09IFRFWFRfTk9ERSB8fCBuLT5ub2RlVHlwZSgpID09IENE
QVRBX1NFQ1RJT05fTk9ERSkKLSAgICAgICAgICAgICAgICB0ZXh0ICs9IG4tPm5vZGVWYWx1ZSgp
OwotICAgICAgICAgICAgLy8gc2tpcCBzY3JpcHQgY29udGVudAotICAgICAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSAmJiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSkK
LSAgICAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0U2libGluZyh0aGlzKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlz
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRleHQgPSBkb2N1bWVudCgpLT5kaXNwbGF5U3Ry
aW5nTW9kaWZpZWRCeUVuY29kaW5nKHRleHQpOwotICAgIC8vIEluIFdpbklFLCBsZWFkaW5nIGFu
ZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0aW9ucyBhbmQgb3B0Z3JvdXBz
LiBXZSBtYXRjaCB0aGlzIGJlaGF2aW9yLgotICAgIHRleHQgPSB0ZXh0LnN0cmlwV2hpdGVTcGFj
ZSgpOwotICAgIC8vIFdlIHdhbnQgdG8gY29sbGFwc2Ugb3VyIHdoaXRlc3BhY2UgdG9vLiAgVGhp
cyB3aWxsIG1hdGNoIG90aGVyIGJyb3dzZXJzLgotICAgIHRleHQgPSB0ZXh0LnNpbXBsaWZ5V2hp
dGVTcGFjZSgpOwotCi0gICAgcmV0dXJuIHRleHQ7CisgICAgcmV0dXJuIE9wdGlvbkVsZW1lbnQ6
OmNvbGxlY3RlZE9wdGlvblRleHQobV9kYXRhLCBkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBIVE1M
T3B0aW9uRWxlbWVudDo6c2V0VGV4dChjb25zdCBTdHJpbmcgJnRleHQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtMTUwLDE5ICsxMjUsMTggQEAgaW50IEhUTUxPcHRpb25FbGVtZW50OjppbmRleCgp
IGNvbnN0CiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzZWxlY3RlZEF0
dHIpCi0gICAgICAgIG1fc2VsZWN0ZWQgPSAoIWF0dHItPmlzTnVsbCgpKTsKKyAgICAgICAgbV9k
YXRhLnNldFNlbGVjdGVkKCFhdHRyLT5pc051bGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IHZhbHVlQXR0cikKLSAgICAgICAgbV92YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAg
ICAgIG1fZGF0YS5zZXRWYWx1ZShhdHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gbGFiZWxBdHRyKQorICAgICAgICBtX2RhdGEuc2V0TGFiZWwoYXR0ci0+dmFsdWUo
KSk7CiAgICAgZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAogU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50Ojp2YWx1ZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKCAhbV92YWx1ZS5pc051bGwoKSApCi0gICAgICAgIHJldHVybiBt
X3ZhbHVlOwotICAgIC8vIFVzZSB0aGUgdGV4dCBpZiB0aGUgdmFsdWUgd2Fzbid0IHNldC4KLSAg
ICByZXR1cm4gdGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIHJldHVybiBPcHRpb25FbGVt
ZW50Ojpjb2xsZWN0ZWRPcHRpb25WYWx1ZShtX2RhdGEsIGRvY3VtZW50KCkpOwogfQogCiB2b2lk
IEhUTUxPcHRpb25FbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMTcw
LDIxICsxNDQsMjUgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0VmFsdWUoY29uc3QgUwog
ICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHZhbHVlKTsKIH0KIAorYm9vbCBIVE1MT3B0aW9u
RWxlbWVudDo6c2VsZWN0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEuc2VsZWN0ZWQo
KTsKK30KKwogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWQoYm9vbCBzZWxlY3Rl
ZCkKIHsKLSAgICBpZiAobV9zZWxlY3RlZCA9PSBzZWxlY3RlZCkKKyAgICBpZiAobV9kYXRhLnNl
bGVjdGVkKCkgPT0gc2VsZWN0ZWQpCiAgICAgICAgIHJldHVybjsKKworICAgIE9wdGlvbkVsZW1l
bnQ6OnNldFNlbGVjdGVkU3RhdGUobV9kYXRhLCBzZWxlY3RlZCk7CisKICAgICBpZiAoSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCA9IG93bmVyU2VsZWN0RWxlbWVudCgpKQogICAgICAgICBzZWxl
Y3QtPnNldFNlbGVjdGVkSW5kZXgoc2VsZWN0ZWQgPyBpbmRleCgpIDogLTEsIGZhbHNlKTsKLSAg
ICBtX3NlbGVjdGVkID0gc2VsZWN0ZWQ7CiB9CiAKIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnQ6OnNl
dFNlbGVjdGVkU3RhdGUoYm9vbCBzZWxlY3RlZCkKIHsKLSAgICBpZiAobV9zZWxlY3RlZCA9PSBz
ZWxlY3RlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2VsZWN0ZWQgPSBzZWxlY3RlZDsKLSAg
ICBzZXRDaGFuZ2VkKCk7CisgICAgT3B0aW9uRWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0ZShtX2Rh
dGEsIHNlbGVjdGVkKTsKIH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hpbGRyZW5DaGFu
Z2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmdGVy
Q2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQpAQCAtMjE5LDcgKzE5Nyw3IEBAIHZvaWQgSFRN
TE9wdGlvbkVsZW1lbnQ6OnNldERlZmF1bHRTZWxlY3QKIAogU3RyaW5nIEhUTUxPcHRpb25FbGVt
ZW50OjpsYWJlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShsYWJlbEF0dHIp
OworICAgIHJldHVybiBtX2RhdGEubGFiZWwoKTsKIH0KIAogdm9pZCBIVE1MT3B0aW9uRWxlbWVu
dDo6c2V0TGFiZWwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTIzNywxMiArMjE1LDkgQEAgUmVu
ZGVyU3R5bGUqIEhUTUxPcHRpb25FbGVtZW50Ojpub25SZW5kZQogICAgIHJldHVybiBtX3N0eWxl
LmdldCgpOyAKIH0KIAotU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50OjpvcHRpb25UZXh0KCkgY29u
c3QKK1N0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6dGV4dEluZGVudGVkVG9SZXNwZWN0R3JvdXBM
YWJlbCgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPmhh
c1RhZ05hbWUob3B0Z3JvdXBUYWcpKQotICAgICAgICByZXR1cm4gIiAgICAiICsgdGV4dCgpOwot
Ci0gICAgcmV0dXJuIHRleHQoKTsKKyAgICByZXR1cm4gT3B0aW9uRWxlbWVudDo6Y29sbGVjdGVk
T3B0aW9uVGV4dFJlc3BlY3RpbmdHcm91cExhYmVsKG1fZGF0YSwgZG9jdW1lbnQoKSk7CiB9CiAK
IGJvb2wgSFRNTE9wdGlvbkVsZW1lbnQ6OmRpc2FibGVkKCkgY29uc3QKSW5kZXg6IGh0bWwvSFRN
TE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxPcHRpb25FbGVtZW50LmgJ
KHJldmlzaW9uIDQwMTAxKQorKysgaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NiwxMiArNTYsMTIgQEAgcHVibGljOgogICAgIGludCBpbmRleCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsK
IAotICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBzZWxlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWQ7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2VsZWN0ZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFNlbGVjdGVkKGJvb2wpOwotICAg
IHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0
ZWRTdGF0ZShib29sKTsKIAogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBvd25lclNlbGVjdEVsZW1l
bnQoKSBjb25zdDsKIApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGxhYmVs
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKIAotICAgIHZpcnR1
YWwgU3RyaW5nIG9wdGlvblRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0ZXh0SW5k
ZW50ZWRUb1Jlc3BlY3RHcm91cExhYmVsKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgZGlz
YWJsZWQoKSBjb25zdDsKICAgICAKQEAgLTgyLDkgKzgyLDggQEAgcHVibGljOgogICAgIAogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiBub25SZW5kZXJlclJlbmRlclN0eWxlKCkg
Y29uc3Q7Ci0gICAgCi0gICAgU3RyaW5nIG1fdmFsdWU7Ci0gICAgYm9vbCBtX3NlbGVjdGVkOwor
CisgICAgT3B0aW9uRWxlbWVudERhdGEgbV9kYXRhOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
bV9zdHlsZTsKIH07CiAKSW5kZXg6IGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDEwMSkKKysrIGh0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzksNyArOTc5LDgg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6dHlwZUFoZWFkRmluZChLZQogICAgICAgICBpZiAo
IWl0ZW1zW2luZGV4XS0+aGFzVGFnTmFtZShvcHRpb25UYWcpIHx8IGl0ZW1zW2luZGV4XS0+ZGlz
YWJsZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChzdHJpcExlYWRp
bmdXaGl0ZVNwYWNlKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaW5kZXhd
KS0+b3B0aW9uVGV4dCgpKS5zdGFydHNXaXRoKHByZWZpeCwgZmFsc2UpKSB7CisgICAgICAgIFN0
cmluZyB0ZXh0ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpbmRleF0p
LT50ZXh0SW50ZW5kZWRUb1Jlc3BlY3RHcm91cExhYmVsKCk7CisgICAgICAgIGlmIChzdHJpcExl
YWRpbmdXaGl0ZVNwYWNlKHRleHQpLnN0YXJ0c1dpdGgocHJlZml4LCBmYWxzZSkpIHsKICAgICAg
ICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0aW9uSW5kZXgoaW5kZXgpKTsKICAgICAg
ICAgICAgIGlmKCF1c2VzTWVudUxpc3QoKSkKICAgICAgICAgICAgICAgICBsaXN0Qm94T25DaGFu
Z2UoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDQwMTAxKQorKysgcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9p
ZCBSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICBTdHJpbmcg
dGV4dDsKICAgICAgICAgICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAg
ICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxlbWVudCA9IG9wdGlvbkVsZW1lbnRG
b3JFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICAgICAgICAgIHRleHQgPSBvcHRpb25FbGVtZW50
LT5vcHRpb25UZXh0KCk7CisgICAgICAgICAgICAgICAgdGV4dCA9IG9wdGlvbkVsZW1lbnQtPnRl
eHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKE9w
dGlvbkdyb3VwRWxlbWVudCogb3B0aW9uR3JvdXBFbGVtZW50ID0gb3B0aW9uR3JvdXBFbGVtZW50
Rm9yRWxlbWVudChlbGVtZW50KSkgewogICAgICAgICAgICAgICAgIHRleHQgPSBvcHRpb25Hcm91
cEVsZW1lbnQtPmdyb3VwTGFiZWxUZXh0KCk7CiAgICAgICAgICAgICAgICAgRm9udERlc2NyaXB0
aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKQEAgLTMwMCw3ICszMDAsNyBAQCB2
b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoCiAKICAgICBTdHJpbmcgaXRl
bVRleHQ7CiAgICAgaWYgKG9wdGlvbkVsZW1lbnQpCi0gICAgICAgIGl0ZW1UZXh0ID0gb3B0aW9u
RWxlbWVudC0+b3B0aW9uVGV4dCgpOworICAgICAgICBpdGVtVGV4dCA9IG9wdGlvbkVsZW1lbnQt
PnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICBlbHNlIGlmIChPcHRpb25H
cm91cEVsZW1lbnQqIG9wdGlvbkdyb3VwRWxlbWVudCA9IG9wdGlvbkdyb3VwRWxlbWVudEZvckVs
ZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIGl0ZW1UZXh0ID0gb3B0aW9uR3JvdXBFbGVtZW50LT5n
cm91cExhYmVsVGV4dCgpOyAgICAgIAogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9u
IDQwMTAxKQorKysgcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZU9wdGlvbnNXaWR0
aCgKICAgICAgICAgaWYgKCFvcHRpb25FbGVtZW50KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgU3RyaW5nIHRleHQgPSBvcHRpb25FbGVtZW50LT5vcHRpb25UZXh0KCk7CisgICAg
ICAgIFN0cmluZyB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+dGV4dEluZGVudGVkVG9SZXNwZWN0R3Jv
dXBMYWJlbCgpOwogICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQogICAgICAgICAgICAgbWF4
T3B0aW9uV2lkdGggPSBtYXgobWF4T3B0aW9uV2lkdGgsIHN0eWxlKCktPmZvbnQoKS5mbG9hdFdp
ZHRoKHRleHQpKTsKICAgICB9CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBSZW5kZXJNZW51TGlz
dDo6c2V0VGV4dEZyb21PcHRpb24oaQogICAgIFN0cmluZyB0ZXh0ID0gIiI7CiAgICAgaWYgKGkg
Pj0gMCAmJiBpIDwgc2l6ZSkgewogICAgICAgICBpZiAoT3B0aW9uRWxlbWVudCogb3B0aW9uRWxl
bWVudCA9IG9wdGlvbkVsZW1lbnRGb3JFbGVtZW50KGxpc3RJdGVtc1tpXSkpCi0gICAgICAgICAg
ICB0ZXh0ID0gb3B0aW9uRWxlbWVudC0+b3B0aW9uVGV4dCgpOworICAgICAgICAgICAgdGV4dCA9
IG9wdGlvbkVsZW1lbnQtPnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICB9
CiAKICAgICBzZXRUZXh0KHRleHQuc3RyaXBXaGl0ZVNwYWNlKCkpOwpAQCAtMzA4LDcgKzMwOCw3
IEBAIFN0cmluZyBSZW5kZXJNZW51TGlzdDo6aXRlbVRleHQodW5zaWduZWQKICAgICBpZiAoT3B0
aW9uR3JvdXBFbGVtZW50KiBvcHRpb25Hcm91cEVsZW1lbnQgPSBvcHRpb25Hcm91cEVsZW1lbnRG
b3JFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gb3B0aW9uR3JvdXBFbGVtZW50LT5n
cm91cExhYmVsVGV4dCgpOwogICAgIGVsc2UgaWYgKE9wdGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1l
bnQgPSBvcHRpb25FbGVtZW50Rm9yRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIG9w
dGlvbkVsZW1lbnQtPm9wdGlvblRleHQoKTsKKyAgICAgICAgcmV0dXJuIG9wdGlvbkVsZW1lbnQt
PnRleHRJbmRlbnRlZFRvUmVzcGVjdEdyb3VwTGFiZWwoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAK
</data>
<flag name="review"
          id="12884"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>