<?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>22399</bug_id>
          
          <creation_ts>2008-11-21 06:01:09 -0800</creation_ts>
          <short_desc>Add WML &lt;anchor&gt; support.</short_desc>
          <delta_ts>2008-11-22 07:51:30 -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>XML</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>99636</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-21 06:01:09 -0800</bug_when>
    <thetext>WML &lt;anchor&gt; support missing at the moment. &lt;anchor&gt; is similar to &lt;a&gt;.

WML anchor element is used like this: &lt;anchor&gt;Foobar&lt;prev/&gt;&lt;/anchor&gt;, similar to &lt;a onclick=&quot;history.back()&quot;&gt;Foobar&lt;/a&gt; in HTML.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99637</commentid>
    <comment_count>1</comment_count>
      <attachid>25349</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-21 06:01:53 -0800</bug_when>
    <thetext>Created attachment 25349
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99641</commentid>
    <comment_count>2</comment_count>
      <attachid>25349</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-21 06:48:59 -0800</bug_when>
    <thetext>Comment on attachment 25349
Initial patch

&gt; +        // &lt;anchor&gt; element don&apos;t have href attributes, but we still want to
&gt; +        // appear as link, so linkAttribute() has to return a non-null value!

Bad grammar here. Also, this hack seems bad for accessibility - but that&apos;s probably not a practical concern for WML.

&gt; +    // TODO: Enable when WMLImageElement exists

We don&apos;t use TODO, please replace with FIXME. Also, it&apos;s not clear from the comment what should be enabled when WMLImageElement exists!

&gt; +    else if (m_innerURLElement-&gt;hasTagName(WMLNames::aTag))
&gt; +        urlString = m_innerURLElement-&gt;getAttribute(hrefAttr);

I don&apos;t see A element mentioned anywhere in ChangeLog, please do add that.

&gt; +       WMLElement::defaultEventHandler(event); // Skip WMLAElement::defaultEventHandler, on purpose

Please explain the purpose.

&gt; +    WMLTaskElement* m_task;

Does this merit an explanation that WML elements are never destroyed while the document exists, so this cannot result in stale pointer? Maybe anyone working on WML knows this though.

&gt; +// #include &quot;WMLSetvarElement.h&quot;

Is there a need to check in commented out code? There is a lot in this file. Not a big deal if you are going to uncomment soon.

&gt; +        /* TODO

We don&apos;t use TODO.


&gt; +String substituteVariableReferences(const String&amp; variableReference, Document* document, WMLVariableEscapingMode escapeMode)
&gt; +{
&gt; +    // TODO!
&gt; +    return variableReference;
&gt; +}

You could use notImplemented() here.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99645</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-21 06:56:28 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 25349 [review])
&gt; &gt; +        // &lt;anchor&gt; element don&apos;t have href attributes, but we still want to
&gt; &gt; +        // appear as link, so linkAttribute() has to return a non-null value!
&gt; 
&gt; Bad grammar here. Also, this hack seems bad for accessibility - but that&apos;s
&gt; probably not a practical concern for WML.
Fixed.

&gt; 
&gt; &gt; +    // TODO: Enable when WMLImageElement exists
&gt; 
&gt; We don&apos;t use TODO, please replace with FIXME. Also, it&apos;s not clear from the
&gt; comment what should be enabled when WMLImageElement exists!
Maybe it shouldn&apos;t be available at all, we don&apos;t need image drag support for WML. Removing the whole ENABLE(WML) block.
 
&gt; &gt; +    else if (m_innerURLElement-&gt;hasTagName(WMLNames::aTag))
&gt; &gt; +        urlString = m_innerURLElement-&gt;getAttribute(hrefAttr);
&gt; 
&gt; I don&apos;t see A element mentioned anywhere in ChangeLog, please do add that.
a is already in svn.

&gt; 
&gt; &gt; +       WMLElement::defaultEventHandler(event); // Skip WMLAElement::defaultEventHandler, on purpose
&gt; 
&gt; Please explain the purpose.
Okay.

&gt; 
&gt; &gt; +    WMLTaskElement* m_task;
&gt; 
&gt; Does this merit an explanation that WML elements are never destroyed while the
&gt; document exists, so this cannot result in stale pointer? Maybe anyone working
&gt; on WML knows this though.

Yes that&apos;s the assumption. We could use insertedIntoDocument/removedFromDocument to register/deregister from the parent, but we need at least a working WML prototype usable for testing these issues first.

&gt; 
&gt; &gt; +// #include &quot;WMLSetvarElement.h&quot;
&gt; 
&gt; Is there a need to check in commented out code? There is a lot in this file.
&gt; Not a big deal if you are going to uncomment soon.
In the next patch this is included :-)

&gt; 
&gt; &gt; +        /* TODO
&gt; 
&gt; We don&apos;t use TODO.
&gt; 
&gt; 
&gt; &gt; +String substituteVariableReferences(const String&amp; variableReference, Document* document, WMLVariableEscapingMode escapeMode)
&gt; &gt; +{
&gt; &gt; +    // TODO!
&gt; &gt; +    return variableReference;
&gt; &gt; +}
&gt; 
&gt; You could use notImplemented() here.
It&apos;s already used in code that&apos;s not included in this patch. Just variable substitution has not been ported yet. I&apos;ll replace all instances of TODO to FIXME.

Thanks for the review.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99775</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-22 07:49:28 -0800</bug_when>
    <thetext>Landed in r38658.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25349</attachid>
            <date>2008-11-21 06:01:53 -0800</date>
            <delta_ts>2008-11-21 06:48:59 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>01-anchorPatch.diff</filename>
            <type>text/plain</type>
            <size>18283</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDM4NjAwKQorKysgY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDEwIEBACiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgor
I2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTgwOCwxMiArODEyLDE5IEBACiAKICAgICBBU1NFUlQobm9kZS0+aXNFbGVtZW50Tm9kZSgpKTsK
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwotICAg
IGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkKKyAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpKQorICAgICAgICByZXR1cm4gJmVsZW1lbnQtPmdldEF0dHJpYnV0ZShocmVmQXR0cik7
CisKICNpZiBFTkFCTEUoV01MKQotICAgICAgICB8fCBlbGVtZW50LT5pc1dNTEVsZW1lbnQoKQor
ICAgIGlmIChlbGVtZW50LT5pc1dNTEVsZW1lbnQoKSkgeworICAgICAgICAvLyA8YW5jaG9yPiBl
bGVtZW50IGRvbid0IGhhdmUgaHJlZiBhdHRyaWJ1dGVzLCBidXQgd2Ugc3RpbGwgd2FudCB0bwor
ICAgICAgICAvLyBhcHBlYXIgYXMgbGluaywgc28gbGlua0F0dHJpYnV0ZSgpIGhhcyB0byByZXR1
cm4gYSBub24tbnVsbCB2YWx1ZSEKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoV01M
TmFtZXM6OmFuY2hvclRhZykpCisgICAgICAgICAgICByZXR1cm4gJmVtcHR5QXRvbTsKKworICAg
ICAgICByZXR1cm4gJmVsZW1lbnQtPmdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgfQogI2Vu
ZGlmCi0gICAgICAgKQotICAgICAgICByZXR1cm4gJmVsZW1lbnQtPmdldEF0dHJpYnV0ZShocmVm
QXR0cik7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChlbGVtZW50LT5pc1NWR0VsZW1lbnQo
KSkKSW5kZXg6IHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAJKHJldmlzaW9uIDM4NjAwKQorKysgcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxMCBAQAogI2luY2x1
ZGUgIlhMaW5rTmFtZXMuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJX
TUxOYW1lcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKQEAgLTIzMiw2ICsyMzYsOSBAQAogICAgIGVsc2UgaWYgKG1faW5uZXJO
b25TaGFyZWROb2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRhZykpCiAgICAgICAgIHVy
bFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQo
KSktPmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiAjZW5kaWYKKyNpZiBFTkFC
TEUoV01MKQorICAgIC8vIFRPRE86IEVuYWJsZSB3aGVuIFdNTEltYWdlRWxlbWVudCBleGlzdHMK
KyNlbmRpZgogICAgIGVsc2UgaWYgKG1faW5uZXJOb25TaGFyZWROb2RlLT5oYXNUYWdOYW1lKGVt
YmVkVGFnKSB8fCBtX2lubmVyTm9uU2hhcmVkTm9kZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7
CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9pbm5l
ck5vblNoYXJlZE5vZGUuZ2V0KCkpOwogICAgICAgICB1cmxTdHJpbmcgPSBlbGVtZW50LT5nZXRB
dHRyaWJ1dGUoZWxlbWVudC0+aW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkpOwpAQCAtMjUzLDYg
KzI2MCwxMCBAQAogICAgIGVsc2UgaWYgKG1faW5uZXJVUkxFbGVtZW50LT5oYXNUYWdOYW1lKFNW
R05hbWVzOjphVGFnKSkKICAgICAgICAgdXJsU3RyaW5nID0gbV9pbm5lclVSTEVsZW1lbnQtPmdl
dEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiAjZW5kaWYKKyNpZiBFTkFCTEUoV01M
KQorICAgIGVsc2UgaWYgKG1faW5uZXJVUkxFbGVtZW50LT5oYXNUYWdOYW1lKFdNTE5hbWVzOjph
VGFnKSkKKyAgICAgICAgdXJsU3RyaW5nID0gbV9pbm5lclVSTEVsZW1lbnQtPmdldEF0dHJpYnV0
ZShocmVmQXR0cik7CisjZW5kaWYKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBLVVJMKCk7CiAK
QEAgLTI3MCw3ICsyODEsMTEgQEAKICAgICBpZiAobV9pbm5lclVSTEVsZW1lbnQtPmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OmFUYWcpKQogICAgICAgICByZXR1cm4gbV9pbm5lclVSTEVsZW1lbnQtPmlz
TGluaygpOwogI2VuZGlmCi0gICAgCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAobV9pbm5lclVS
TEVsZW1lbnQtPmhhc1RhZ05hbWUoV01MTmFtZXM6OmFUYWcpKQorICAgICAgICByZXR1cm4gbV9p
bm5lclVSTEVsZW1lbnQtPmlzTGluaygpOworI2VuZGlmCisKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKSW5kZXg6IHdtbC9XTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01M
QW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MQW5jaG9yRWxlbWVudC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJXTUxBbmNob3JFbGVtZW50LmgiCisKKyNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUg
IldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworV01MQW5jaG9yRWxlbWVudDo6V01MQW5jaG9yRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogV01MQUVsZW1lbnQodGFn
TmFtZSwgZG9jKQoreworICAgIC8vIENhbGxpbmcgc2V0SXNMaW5rKHRydWUpLCBhbmQgcmV0dXJu
aW5nIGEgbm9uLW51bGwgdmFsdWUgb24gQ1NTU3R5bGVTZWxlY3RvcnMnIGxpbmtBdHRyaWJ1dGUK
KyAgICAvLyBtZXRob2QsIG1ha2VzIGl0IHBvc3NpYmxlIHRvICdhcHBlYXIgYXMgbGluaycgKGp1
c3QgbGlrZSA8YSBocmVmPSIuLiI+KSB3aXRob3V0IHRoZSBuZWVkIHRvCisgICAgLy8gYWN0dWFs
bHkgc2V0IHRoZSBocmVmIHZhbHVlIHRvIGFuIGVtcHR5IHZhbHVlIGluIHRoZSBET00gdHJlZS4K
KyAgICBzZXRJc0xpbmsodHJ1ZSk7Cit9CisKK1dNTEFuY2hvckVsZW1lbnQ6On5XTUxBbmNob3JF
bGVtZW50KCkKK3sKK30KKwordm9pZCBXTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBldmVudCkKK3sKKyAgICBib29sIHNob3VsZEhhbmRsZSA9IGZhbHNlOworCisg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCisgICAgICAg
IHNob3VsZEhhbmRsZSA9IHRydWU7CisgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50ICYmIGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBmb2N1
c2VkKCkpCisgICAgICAgIHNob3VsZEhhbmRsZSA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQq
PihldmVudCktPmtleUlkZW50aWZpZXIoKSA9PSAiRW50ZXIiOworCisgICAgaWYgKHNob3VsZEhh
bmRsZSAmJiBtX3Rhc2spIHsKKyAgICAgICAgbV90YXNrLT5leGVjdXRlVGFzayhldmVudCk7Cisg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0gZWxzZQorICAgICAgIFdN
TEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOyAvLyBTa2lwIFdNTEFFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyLCBvbiBwdXJwb3NlCit9CisKK30KKworI2VuZGlmCkluZGV4
OiB3bWwvV01MQW5jaG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxBbmNob3JFbGVt
ZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MQW5jaG9yRWxlbWVudC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ5IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MQW5jaG9yRWxlbWVudF9oCisjZGVmaW5l
IFdNTEFuY2hvckVsZW1lbnRfaAorCisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJXTUxBRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50Owor
CitjbGFzcyBXTUxBbmNob3JFbGVtZW50IDogcHVibGljIFdNTEFFbGVtZW50IHsKK3B1YmxpYzoK
KyAgICBXTUxBbmNob3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50Kik7CisgICAgdmlydHVhbCB+V01MQW5jaG9yRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgV01MVGFza0VsZW1lbnQ7CisgICAgdm9pZCByZWdpc3RlclRhc2soV01MVGFza0VsZW1l
bnQqIHRhc2spIHsgbV90YXNrID0gdGFzazsgfQorCisgICAgV01MVGFza0VsZW1lbnQqIG1fdGFz
azsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxUYWdOYW1lcy5pbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSB3bWwvV01MVGFnTmFtZXMuaW4JKHJldmlzaW9uIDM4NjAwKQorKysgd21s
L1dNTFRhZ05hbWVzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogZ3VhcmRGYWN0
b3J5V2l0aD0iRU5BQkxFKFdNTCkiCiAKIGEKK2FuY2hvcgogYnIgaW50ZXJmYWNlTmFtZT1XTUxC
UkVsZW1lbnQKIGNhcmQKIHAKQEAgLTIxLDcgKzIyLDYgQEAKICNpZiAwCiAjIE5vdCB5ZXQgaW1w
bGVtZW50ZWQKIGFjY2VzcwotYW5jaG9yCiBkbwogZmllbGRzZXQKIGdvCkluZGV4OiB3bWwvV01M
VGFza0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxUYXNrRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDApCisrKyB3bWwvV01MVGFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExNyBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV01MKQorI2lu
Y2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
V01MQW5jaG9yRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01M
UGFnZVN0YXRlLmgiCisvLyAjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MVGFza0VsZW1l
bnQ6OldNTFRhc2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKK3sKK30KKworV01MVGFza0Vs
ZW1lbnQ6On5XTUxUYXNrRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgV01MVGFza0VsZW1lbnQ6Omlu
c2VydGVkSW50b0RvY3VtZW50KCkKK3sKKyAgICBXTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1
bWVudCgpOworCisgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7IHBhcmVudDsg
cGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgaWYg
KHBhcmVudC0+aGFzVGFnTmFtZShkb1RhZykpIHsKKyAgICAgICAgICAgIC8vIHN0YXRpY19jYXN0
PFdNTERvRWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyVGFzayh0aGlzKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICovCisKKyAgICAgICAgaWYgKHBhcmVudC0+aGFz
VGFnTmFtZShhbmNob3JUYWcpKSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXTUxBbmNob3JF
bGVtZW50Kj4ocGFyZW50KS0+cmVnaXN0ZXJUYXNrKHRoaXMpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICAvKiBUT0RPCisgICAgICAgIGlmIChwYXJlbnQtPmxvY2Fs
TmFtZSgpID09ICJvbmV2ZW50IikgeworICAgICAgICAgICAgYmluZEludHJpbnNpY0V2ZW50SW5P
bmV2ZW50KHBhcmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAq
LworICAgIH0KK30KKworI2lmIDAKK3ZvaWQgV01MVGFza0VsZW1lbnQ6OmFkZFZhcmlhYmxlU2V0
dGVyKFdNTFNldHZhckVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOwor
ICAgIG1fdmFyaWFibGVTZXR0ZXJFbGVtZW50cy5hZGQoZWxlbWVudCk7Cit9CisKK3ZvaWQgV01M
VGFza0VsZW1lbnQ6OnJlbW92ZVZhcmlhYmxlU2V0dGVyKFdNTFNldHZhckVsZW1lbnQqIGVsZW1l
bnQpCit7CisgICAgQVNTRVJUKGVsZW1lbnQpOworICAgIG1fdmFyaWFibGVTZXR0ZXJFbGVtZW50
cy5yZW1vdmUoZWxlbWVudCk7Cit9CisjZW5kaWYKKwordm9pZCBXTUxUYXNrRWxlbWVudDo6c3Rv
cmVWYXJpYWJsZVN0YXRlKFBhZ2UqIHBhZ2UpCit7CisgICAgQVNTRVJUKHBhZ2UpOworI2lmIDAK
KyAgICBpZiAobV92YXJpYWJsZVNldHRlckVsZW1lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgV01MVmFyaWFibGVNYXAgdmFyaWFibGVzOworICAgIEhhc2hTZXQ8V01MU2V0
dmFyRWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fdmFyaWFibGVTZXR0ZXJFbGVtZW50cy5iZWdp
bigpOworICAgIEhhc2hTZXQ8V01MU2V0dmFyRWxlbWVudCo+OjppdGVyYXRvciBlbmQgPSBtX3Zh
cmlhYmxlU2V0dGVyRWxlbWVudHMuZW5kKCk7CisKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KSB7CisgICAgICAgIFdNTFNldHZhckVsZW1lbnQqIHNldHRlckVsZW1lbnQgPSAoKml0KTsKKyAg
ICAgICAgaWYgKHNldHRlckVsZW1lbnQtPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICB2YXJpYWJsZXMuc2V0KHNldHRlckVsZW1lbnQtPm5hbWUoKSwg
c2V0dGVyRWxlbWVudC0+dmFsdWUoKSk7CisgICAgfQorCisgICAgaWYgKHZhcmlhYmxlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdNTFBhZ2VTdGF0ZSogcGFnZVN0YXRlID0g
cGFnZS0+d21sUGFnZVN0YXRlKCk7CisgICAgQVNTRVJUKHBhZ2VTdGF0ZSk7CisKKyAgICBwYWdl
U3RhdGUtPnN0b3JlVmFyaWFibGVzKHZhcmlhYmxlcyk7CisjZW5kaWYKK30KKworfQorCisjZW5k
aWYKSW5kZXg6IHdtbC9XTUxUYXNrRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxUYXNr
RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFRhc2tFbGVtZW50LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGFza0VsZW1lbnRfaAorI2RlZmlu
ZSBXTUxUYXNrRWxlbWVudF9oCisKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTEVsZW1l
bnQuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUGFnZTsKK2NsYXNzIFdNTFNldHZhckVsZW1lbnQ7CisKK2NsYXNzIFdNTFRhc2tF
bGVtZW50IDogcHVibGljIFdNTEVsZW1lbnQgeworcHVibGljOgorICAgIFdNTFRhc2tFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+
V01MVGFza0VsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVu
dCgpOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVGFzayhFdmVudCopID0gMDsKKworI2lmIDAK
KyAgICB2b2lkIGFkZFZhcmlhYmxlU2V0dGVyKFdNTFNldHZhckVsZW1lbnQqKTsKKyAgICB2b2lk
IHJlbW92ZVZhcmlhYmxlU2V0dGVyKFdNTFNldHZhckVsZW1lbnQqKTsKKyNlbmRpZgorCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBzdG9yZVZhcmlhYmxlU3RhdGUoUGFnZSopOworI2lmIDAKK3ByaXZh
dGU6CisgICAgSGFzaFNldDxXTUxTZXR2YXJFbGVtZW50Kj4gbV92YXJpYWJsZVNldHRlckVsZW1l
bnRzOworI2VuZGlmCit9OworCit9CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiB3bWwvV01MVmFy
aWFibGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MVmFyaWFibGVzLmNwcAkocmV2aXNpb24g
MCkKKysrIHdtbC9XTUxWYXJpYWJsZXMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgzIEBA
CisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXTUwpCisjaW5jbHVkZSAiV01M
VmFyaWFibGVzLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0
Zi9BU0NJSUNUeXBlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNW
YWxpZFZhcmlhYmxlQ2hhcmFjdGVyKGNvbnN0IFVDaGFyJiBjaGFyYWN0ZXIpCit7CisgICAgcmV0
dXJuIFdURjo6aXNBU0NJSUFscGhhKGNoYXJhY3RlcikKKyAgICAgICAgICAgfHwgV1RGOjppc0FT
Q0lJRGlnaXQoY2hhcmFjdGVyKQorICAgICAgICAgICB8fCBjaGFyYWN0ZXIgPT0gJ18nOworfQor
CitzdGF0aWMgYm9vbCBpc1ZhbGlkVmFyaWFibGVSZWZlcmVuY2VDaGFyYWN0ZXIoY29uc3QgVUNo
YXImIGNoYXJhY3RlcikKK3sKKyAgICByZXR1cm4gY2hhcmFjdGVyID09ICcoJworICAgICAgICAg
ICB8fCBjaGFyYWN0ZXIgPT0gJyknCisgICAgICAgICAgIHx8IGNoYXJhY3RlciA9PSAnOicKKyAg
ICAgICAgICAgfHwgY2hhcmFjdGVyID09ICckJzsKK30KKworYm9vbCBpc1ZhbGlkVmFyaWFibGVO
YW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBpc1JlZmVyZW5jZSkKK3sKKyAgICBpZiAobmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CisgICAgYm9vbCBpc1ZhbGlkID0gKGNoYXJh
Y3RlcnNbMF0gPT0gJ18nIHx8IFdURjo6aXNBU0NJSUFscGhhKGNoYXJhY3RlcnNbMF0pKTsKKwor
ICAgIGlmIChpc1JlZmVyZW5jZSAmJiAhaXNWYWxpZCkKKyAgICAgICAgaXNWYWxpZCA9IGlzVmFs
aWRWYXJpYWJsZVJlZmVyZW5jZUNoYXJhY3RlcihjaGFyYWN0ZXJzWzBdKTsKKworICAgIGlmICgh
aXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgbGVuZ3RoID0g
bmFtZS5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgaXNWYWxpZCA9IGlzVmFsaWRWYXJpYWJsZUNoYXJhY3RlcihjaGFyYWN0ZXJz
W2ldKTsKKworICAgICAgICBpZiAoaXNSZWZlcmVuY2UgJiYgIWlzVmFsaWQpCisgICAgICAgICAg
ICBpc1ZhbGlkID0gaXNWYWxpZFZhcmlhYmxlUmVmZXJlbmNlQ2hhcmFjdGVyKGNoYXJhY3RlcnNb
aV0pOworCisgICAgICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3RyaW5nIHN1YnN0aXR1dGVWYXJpYWJs
ZVJlZmVyZW5jZXMoY29uc3QgU3RyaW5nJiB2YXJpYWJsZVJlZmVyZW5jZSwgRG9jdW1lbnQqIGRv
Y3VtZW50LCBXTUxWYXJpYWJsZUVzY2FwaW5nTW9kZSBlc2NhcGVNb2RlKQoreworICAgIC8vIFRP
RE8hCisgICAgcmV0dXJuIHZhcmlhYmxlUmVmZXJlbmNlOworfQorCit9CisKKyNlbmRpZgpJbmRl
eDogd21sL1dNTFZhcmlhYmxlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxWYXJpYWJsZXMuaAko
cmV2aXNpb24gMCkKKysrIHdtbC9XTUxWYXJpYWJsZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NiBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFdNTFZhcmlhYmxlc19oCisjZGVmaW5lIFdNTFZhcmlhYmxlc19o
CisKKyNpZiBFTkFCTEUoV01MKQorbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRG9j
dW1lbnQ7CisgICAgY2xhc3MgU3RyaW5nOworCisgICAgZW51bSBXTUxWYXJpYWJsZUVzY2FwaW5n
TW9kZSB7CisgICAgICAgIFdNTFZhcmlhYmxlRXNjYXBpbmdfTm9uZSA9IDAsCisgICAgICAgIFdN
TFZhcmlhYmxlRXNjYXBpbmdfRXNjYXBlID0gMSwKKyAgICAgICAgV01MVmFyaWFibGVFc2NhcGlu
Z19VbmVzY2FwZSA9IDIKKyAgICB9OworCisgICAgYm9vbCBpc1ZhbGlkVmFyaWFibGVOYW1lKGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCBpc1JlZmVyZW5jZSk7CisKKyAgICBTdHJpbmcgc3Vic3Rp
dHV0ZVZhcmlhYmxlUmVmZXJlbmNlcyhjb25zdCBTdHJpbmcmIHZhcmlhYmxlUmVmZXJlbmNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50KiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTUxWYXJpYWJsZUVzY2FwaW5nTW9k
ZSBtb2RlID0gV01MVmFyaWFibGVFc2NhcGluZ19Ob25lKTsKKworfQorCisjZW5kaWYKKyNlbmRp
ZgpJbmRleDogQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gMzg2
NTYpCisrKyBDaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAwOC0x
MS0yMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bmlrb2xhcy56aW1tZXJtYW5uQHRvcmNobW9iaWxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
aXhlczogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzk5CisKKyAg
ICAgICAgSW1wbGVtZW50IDxhbmNob3I+IHN1cHBvcnQgZm9yIFdNTCwgYWRkIFdNTFZhcmlhYmxl
cyBmaWxlIGNvbnRhaW5pbmcgaGVscGVyIGZ1bmN0aW9ucworICAgICAgICBmb3IgdmFyaWFibGUg
c3VwcG9ydCwgYW5kIGEgV01MVGFza0VsZW1lbnQgYmFzZSBjbGFzcyBmb3IgV01MUHJldi9Hby9S
ZWZyZXNoRWxlbWVudC4KKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmxpbmtBdHRyaWJ1dGUpOgorICAgICAgICAqIHJlbmRlcmluZy9IaXRU
ZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmFic29sdXRl
SW1hZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVMaW5r
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQ6OmlzTGl2ZUxpbmspOgorICAg
ICAgICAqIHdtbC9XTUxBbmNob3JFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXTUxBbmNob3JFbGVtZW50OjpXTUxBbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldNTEFuY2hvckVsZW1lbnQ6On5XTUxBbmNob3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIHdtbC9X
TUxBbmNob3JFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V01MQW5jaG9yRWxl
bWVudDo6cmVnaXN0ZXJUYXNrKToKKyAgICAgICAgKiB3bWwvV01MVGFnTmFtZXMuaW46CisgICAg
ICAgICogd21sL1dNTFRhc2tFbGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpX
TUxUYXNrRWxlbWVudDo6V01MVGFza0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V01MVGFz
a0VsZW1lbnQ6On5XTUxUYXNrRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXTUxUYXNrRWxl
bWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V01MVGFza0Vs
ZW1lbnQ6OmFkZFZhcmlhYmxlU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldNTFRhc2tFbGVt
ZW50OjpyZW1vdmVWYXJpYWJsZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpXTUxUYXNrRWxl
bWVudDo6c3RvcmVWYXJpYWJsZVN0YXRlKToKKyAgICAgICAgKiB3bWwvV01MVGFza0VsZW1lbnQu
aDogQWRkZWQuCisgICAgICAgICogd21sL1dNTFZhcmlhYmxlcy5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6aXNWYWxpZFZhcmlhYmxlQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzVmFsaWRWYXJpYWJsZVJlZmVyZW5jZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpp
c1ZhbGlkVmFyaWFibGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OnN1YnN0aXR1dGVWYXJpYWJs
ZVJlZmVyZW5jZXMpOgorICAgICAgICAqIHdtbC9XTUxWYXJpYWJsZXMuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjopOgorCiAyMDA4LTExLTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCg==
</data>
<flag name="review"
          id="11741"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>