<?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>44622</bug_id>
          
          <creation_ts>2010-08-25 10:40:46 -0700</creation_ts>
          <short_desc>implicitlyStyledElementShouldBeRemovedWhenApplyingStyle, removeHTMLFontStyle, and removeHTMLBidiEmbeddingStyle should be merged</short_desc>
          <delta_ts>2010-08-27 00:38:56 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>44560</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>269337</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-25 10:40:46 -0700</bug_when>
    <thetext>implicitlyStyledElementShouldBeRemovedWhenApplyingStyle, removeHTMLFontStyle, and removeHTMLBidiEmbeddingStyle all share the same logic and should be merged int one function.  Also it&apos;s required to fix the bug 44560.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269573</commentid>
    <comment_count>1</comment_count>
      <attachid>65492</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-25 15:58:59 -0700</bug_when>
    <thetext>Created attachment 65492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270051</commentid>
    <comment_count>2</comment_count>
      <attachid>65492</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-26 12:53:44 -0700</bug_when>
    <thetext>Comment on attachment 65492
Patch

Seems OK to merge all of this into a single function.

&gt; +enum EPushDownType {ShouldBePushedDown, ShouldNotBePushedDown };

Missing space after brace here.

&gt; +struct CSSPropertyElementCorrespondance {

The word &quot;correspondance&quot; is spelled &quot;correspondence&quot;.

I&apos;m not sure this is an &quot;element correspondence&quot;. I think it&apos;s information about achieving the same effect as the property with HTML elements and attributes. Maybe given the context of the source file, HTMLEquivalent would be a suitable name for the structure and then HTMLEquivalents could be the name of the array?

&gt; +    {CSSPropertyFontWeight, false, CSSValueBold, &amp;bTag, 0, ShouldBePushedDown},

You should have space before and after these braces.

&gt; +    for (size_t i = 0; i &lt; sizeof(CSSPropertyElementMapping) / sizeof(CSSPropertyElementCorrespondance); i++) {

This code would be easier to read if you stuck CSSPropertyElementMapping[i] into a local variable. I would name the local variable &quot;equivalents&quot;.

&gt; +        ASSERT(CSSPropertyElementMapping[i].element || CSSPropertyElementMapping[i].attribute);
&gt; +        if (CSSPropertyElementMapping[i].element &amp;&amp; !element-&gt;hasTagName(*CSSPropertyElementMapping[i].element))
&gt; +            continue;
&gt; +        if (CSSPropertyElementMapping[i].attribute &amp;&amp; !element-&gt;hasAttribute(*CSSPropertyElementMapping[i].attribute))
&gt; +            continue;

&gt; +        else if (styleValue-&gt;cssText() == mapValue-&gt;cssText())
&gt; +            continue; // If CSS value is primitive, then skip if they are equal.

This seems like an inefficient way to compare. Later we should look into this. Serializing just to check if equal seems wasteful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270142</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-26 15:04:49 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #2)
&gt; (From update of attachment 65492 [details])
&gt; Seems OK to merge all of this into a single function.
&gt; 
&gt; &gt; +enum EPushDownType {ShouldBePushedDown, ShouldNotBePushedDown };
&gt; 
&gt; Missing space after brace here.

Will fix.

&gt; &gt; +struct CSSPropertyElementCorrespondance {
&gt; 
&gt; The word &quot;correspondance&quot; is spelled &quot;correspondence&quot;.

Sorry about the typo.  I badly need a spell checker on XCode.

&gt; I&apos;m not sure this is an &quot;element correspondence&quot;. I think it&apos;s information about achieving the same effect as the property with HTML elements and attributes. Maybe given the context of the source file, HTMLEquivalent would be a suitable name for the structure and then HTMLEquivalents could be the name of the array?

I had an intention in using it in StyleChange as well but I guess we can rename it when I do that.  Will rename to HTMLEquivalents and HTMLEquivalent as you suggested.

&gt; &gt; +    {CSSPropertyFontWeight, false, CSSValueBold, &amp;bTag, 0, ShouldBePushedDown},
&gt; 
&gt; You should have space before and after these braces.

Will fix.

&gt; &gt; +    for (size_t i = 0; i &lt; sizeof(CSSPropertyElementMapping) / sizeof(CSSPropertyElementCorrespondance); i++) {
&gt; 
&gt; This code would be easier to read if you stuck CSSPropertyElementMapping[i] into a local variable. I would name the local variable &quot;equivalents&quot;.

Will fix.

&gt; &gt; +        else if (styleValue-&gt;cssText() == mapValue-&gt;cssText())
&gt; &gt; +            continue; // If CSS value is primitive, then skip if they are equal.
&gt; 
&gt; This seems like an inefficient way to compare. Later we should look into this. Serializing just to check if equal seems wasteful.

Yes, it&apos;s a unnecessary performance degression but because CSSValue doesn&apos;t have operator== or matches, we can do it any other way.  I&apos;m more than happy to add operator== or matches.  It&apos;ll make a lot of things easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270357</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-27 00:38:56 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/66186.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65492</attachid>
            <date>2010-08-25 15:58:59 -0700</date>
            <delta_ts>2010-08-26 12:53:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44622-20100825155857.patch</filename>
            <type>text/plain</type>
            <size>13895</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjA1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMTAtMDgtMjUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaW1w
bGljaXRseVN0eWxlZEVsZW1lbnRTaG91bGRCZVJlbW92ZWRXaGVuQXBwbHlpbmdTdHlsZSwgcmVt
b3ZlSFRNTEZvbnRTdHlsZSwgYW5kIHJlbW92ZUhUTUxCaWRpRW1iZWRkaW5nU3R5bGUgc2hvdWxk
IGJlIG1lcmdlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDQ2MjIKKworICAgICAgICBNZXJnZWQgc2hvdWxkUmVtb3ZlVGV4dERlY29yYXRpb25UYWcs
IGltcGxpY2l0bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5aW5nU3R5bGUs
IHJlbW92ZUhUTUxGb250U3R5bGUsCisgICAgICAgIGFuZCByZW1vdmVIVE1MQmlkaUVtYmVkZGlu
Z1N0eWxlIGludG8gcmVtb3ZlSW1wbGljaXRseVN0eWxlZEVsZW1lbnQuICBOZXcgZnVuY3Rpb24g
dXNlcyBDU1NQcm9wZXJ0eUVsZW1lbnRNYXBwaW5nIHRvCisgICAgICAgIHN1cHBvcnQgYWxsIGRp
ZmZlcmVudCBjYXNlcyBkZWFsdCBzZXBhcmF0ZWx5IGluIGVhY2ggZnVuY3Rpb24uCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGFyZSBhZGRlZCBzaW5jZSB0aGlzIGlzIGEgY2xlYW51cC4KKworICAg
ICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQpOiBDYWxscyBy
ZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW1wbGljaXRseVN0eWxlZEVs
ZW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmg6CisK
IDIwMTAtMDgtMjUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcAkocmV2aXNpb24gNjYwNDkpCisrKyBXZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTM1LDk0ICsxMTM1LDEwMyBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgfQogfQogCi1ib29sIEFw
cGx5U3R5bGVDb21tYW5kOjpzaG91bGRSZW1vdmVUZXh0RGVjb3JhdGlvblRhZyhDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZVRvQXBwbHksIGludCB0ZXh0RGVjb3JhdGlvbkFkZGVkQnlUYWcpIGNv
bnN0Ci17Ci0gICAgLy8gSG9ub3IgdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QKLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uc1RvQXBwbHkgPSBzdHlsZVRvQXBwbHktPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7
Ci0gICAgaWYgKCF0ZXh0RGVjb3JhdGlvbnNUb0FwcGx5IHx8ICF0ZXh0RGVjb3JhdGlvbnNUb0Fw
cGx5LT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICB0ZXh0RGVjb3JhdGlvbnNUb0FwcGx5ID0gc3R5
bGVUb0FwcGx5LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24p
OwotCi0gICAgLy8gV2hlbiB0aGVyZSBpcyBubyB0ZXh0IGRlY29yYXRpb25zIHRvIGFwcGx5LCBy
ZW1vdmUgYW55IG9uZSBvZiB1LCBzLCAmIHN0cmlrZQotICAgIGlmICghdGV4dERlY29yYXRpb25z
VG9BcHBseSB8fCAhdGV4dERlY29yYXRpb25zVG9BcHBseS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBSZW1vdmUgbm9kZSBpZiBpdCBpbXBsaWNpdGx5IGFk
ZHMgc3R5bGUgbm90IHByZXNlbnQgaW4gc3R5bGVUb0FwcGx5Ci0gICAgQ1NTVmFsdWVMaXN0KiB2
YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih0ZXh0RGVjb3JhdGlvbnNUb0Fw
cGx5LmdldCgpKTsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodGV4dERlY29yYXRpb25BZGRlZEJ5VGFnKTsK
LSAgICByZXR1cm4gIXZhbHVlTGlzdC0+aGFzVmFsdWUodmFsdWUuZ2V0KCkpOwotfQotCi0vLyBU
aGlzIGZ1bmN0aW9uIG1hcHMgZnJvbSBzdHlsaW5nIHRhZ3MgdG8gQ1NTIHN0eWxlcy4gIFVzZWQg
Zm9yIGtub3dpbmcgd2hpY2gKLS8vIHN0eWxpbmcgdGFncyBzaG91bGQgYmUgcmVtb3ZlZCB3aGVu
IHRvZ2dsaW5nIHN0eWxlcy4KLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmltcGxpY2l0bHlTdHls
ZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5aW5nU3R5bGUoSFRNTEVsZW1lbnQqIGVs
ZW0sIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKLXsKLSAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwotICAg
IGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5
bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBDU1NQcm9wZXJ0
eSYgcHJvcGVydHkgPSAqaXQ7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJs
eSBiZSByZS13cml0dGVuIHRvIGxvb2t1cCB0aGUgdGFnbmFtZSBpbiBhCi0gICAgICAgIC8vIGhh
c2ggYW5kIG1hdGNoIGFnYWluc3QgYW4gZXhwZWN0ZWQgcHJvcGVydHkvdmFsdWUgcGFpci4KLSAg
ICAgICAgc3dpdGNoIChwcm9wZXJ0eS5pZCgpKSB7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250V2VpZ2h0OgotICAgICAgICAgICAgLy8gSUUgaW5zZXJ0cyAic3Ryb25nIiB0YWdzIGZvciBl
eGVjQ29tbWFuZCgiYm9sZCIpLCBzbyB3ZSByZW1vdmUgdGhlbSwgZXZlbiB0aG91Z2ggdGhleSdy
ZSBub3Qgc3RyaWN0bHkgcHJlc2VudGF0aW9uYWwKLSAgICAgICAgICAgIGlmIChlbGVtLT5oYXNM
b2NhbE5hbWUoYlRhZykgfHwgZWxlbS0+aGFzTG9jYWxOYW1lKHN0cm9uZ1RhZykpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICFlcXVhbElnbm9yaW5nQ2FzZShwcm9wZXJ0eS52YWx1ZSgpLT5jc3NU
ZXh0KCksICJib2xkIikgfHwgIWVsZW0tPmhhc0NoaWxkTm9kZXMoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbjoKLSAgICAgICAgICAg
IGlmIChlbGVtLT5oYXNMb2NhbE5hbWUoc3ViVGFnKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
IWVxdWFsSWdub3JpbmdDYXNlKHByb3BlcnR5LnZhbHVlKCktPmNzc1RleHQoKSwgInN1YiIpIHx8
ICFlbGVtLT5oYXNDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgICBpZiAoZWxlbS0+aGFzTG9jYWxO
YW1lKHN1cFRhZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuICFlcXVhbElnbm9yaW5nQ2FzZShw
cm9wZXJ0eS52YWx1ZSgpLT5jc3NUZXh0KCksICJzdXAiKSB8fCAhZWxlbS0+aGFzQ2hpbGROb2Rl
cygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5
bGU6Ci0gICAgICAgICAgICAvLyBJRSBpbnNlcnRzICJlbSIgdGFncyBmb3IgZXhlY0NvbW1hbmQo
Iml0YWxpYyIpLCBzbyB3ZSByZW1vdmUgdGhlbSwgZXZlbiB0aG91Z2ggdGhleSdyZSBub3Qgc3Ry
aWN0bHkgcHJlc2VudGF0aW9uYWwKLSAgICAgICAgICAgIGlmIChlbGVtLT5oYXNMb2NhbE5hbWUo
aVRhZykgfHwgZWxlbS0+aGFzTG9jYWxOYW1lKGVtVGFnKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gIWVxdWFsSWdub3JpbmdDYXNlKHByb3BlcnR5LnZhbHVlKCktPmNzc1RleHQoKSwgIml0YWxp
YyIpIHx8ICFlbGVtLT5oYXNDaGlsZE5vZGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uOgotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3Q6Ci0gICAgICAgICAgICAgICAgaWYgKGVs
ZW0tPmhhc0xvY2FsTmFtZSh1VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNob3Vs
ZFJlbW92ZVRleHREZWNvcmF0aW9uVGFnKHN0eWxlLCBDU1NWYWx1ZVVuZGVybGluZSkgfHwgIWVs
ZW0tPmhhc0NoaWxkTm9kZXMoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChlbGVtLT5oYXNM
b2NhbE5hbWUoc1RhZykgfHwgZWxlbS0+aGFzVGFnTmFtZShzdHJpa2VUYWcpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc2hvdWxkUmVtb3ZlVGV4dERlY29yYXRpb25UYWcoc3R5bGUsQ1NT
VmFsdWVMaW5lVGhyb3VnaCkgfHwgIWVsZW0tPmhhc0NoaWxkTm9kZXMoKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJl
bW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBIVE1MRWxlbWVudCogZWxlbWVudCwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlKQog
ewogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwogCi0gICAgYm9vbCBy
ZW1vdmVkID0gZmFsc2U7Ci0KICAgICBpZiAobV9zdHlsZWRJbmxpbmVFbGVtZW50ICYmIGVsZW1l
bnQtPmhhc1RhZ05hbWUobV9zdHlsZWRJbmxpbmVFbGVtZW50LT50YWdRTmFtZSgpKSkgewotICAg
ICAgICByZW1vdmVkID0gdHJ1ZTsKICAgICAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlQXR0cmlidXRl
c0FuZEVsZW1lbnRzKQogICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihl
bGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGltcGxpY2l0
bHlTdHlsZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5aW5nU3R5bGUoZWxlbWVudCwg
c3R5bGUpKSB7CisgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7CisgICAgaWYgKHJlbW92ZUltcGxp
Y2l0bHlTdHlsZWRFbGVtZW50KHN0eWxlLCBlbGVtZW50LCBtb2RlKSkKICAgICAgICAgcmVtb3Zl
ZCA9IHRydWU7Ci0gICAgICAgIGlmIChtb2RlID09IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50
cykKLSAgICAgICAgICAgIHJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRl
cyhlbGVtZW50KTsKLSAgICB9CiAKICAgICBpZiAoIWVsZW1lbnQtPmluRG9jdW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAKICAgICAvLyBJZiB0aGUgbm9kZSB3YXMgY29udmVydGVk
IHRvIGEgc3BhbiwgdGhlIHNwYW4gbWF5IHN0aWxsIGNvbnRhaW4gcmVsZXZhbnQKICAgICAvLyBz
dHlsZXMgd2hpY2ggbXVzdCBiZSByZW1vdmVkIChlLmcuIDxiIHN0eWxlPSdmb250LXdlaWdodDog
Ym9sZCc+KQotICAgIGlmIChyZW1vdmVIVE1MRm9udFN0eWxlKHN0eWxlLCBlbGVtZW50LCBtb2Rl
KSkKLSAgICAgICAgcmVtb3ZlZCA9IHRydWU7Ci0gICAgaWYgKHJlbW92ZUhUTUxCaWRpRW1iZWRk
aW5nU3R5bGUoc3R5bGUsIGVsZW1lbnQsIG1vZGUpKQotICAgICAgICByZW1vdmVkID0gdHJ1ZTsK
ICAgICBpZiAocmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIGVsZW1lbnQsIG1vZGUpKQogICAgICAgICBy
ZW1vdmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiByZW1vdmVkOwogfQorICAgIAorZW51bSBFUHVz
aERvd25UeXBlIHtTaG91bGRCZVB1c2hlZERvd24sIFNob3VsZE5vdEJlUHVzaGVkRG93biB9Owor
c3RydWN0IENTU1Byb3BlcnR5RWxlbWVudENvcnJlc3BvbmRhbmNlIHsKKyAgICBpbnQgcHJvcGVy
dHlJRDsKKyAgICBib29sIGlzVmFsdWVMaXN0OworICAgIGludCBwcmltaXRpdmVJZDsKKyAgICBj
b25zdCBRdWFsaWZpZWROYW1lKiBlbGVtZW50OworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0
dHJpYnV0ZTsKKyAgICBFUHVzaERvd25UeXBlIHB1c2hEb3duVHlwZTsKK307CisKK3N0YXRpYyBj
b25zdCBDU1NQcm9wZXJ0eUVsZW1lbnRDb3JyZXNwb25kYW5jZSBDU1NQcm9wZXJ0eUVsZW1lbnRN
YXBwaW5nW10gPSB7CisgICAge0NTU1Byb3BlcnR5Rm9udFdlaWdodCwgZmFsc2UsIENTU1ZhbHVl
Qm9sZCwgJmJUYWcsIDAsIFNob3VsZEJlUHVzaGVkRG93bn0sCisgICAge0NTU1Byb3BlcnR5Rm9u
dFdlaWdodCwgZmFsc2UsIENTU1ZhbHVlQm9sZCwgJnN0cm9uZ1RhZywgMCwgU2hvdWxkQmVQdXNo
ZWREb3dufSwKKyAgICB7Q1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduLCBmYWxzZSwgQ1NTVmFsdWVT
dWIsICZzdWJUYWcsIDAsIFNob3VsZEJlUHVzaGVkRG93bn0sCisgICAge0NTU1Byb3BlcnR5VmVy
dGljYWxBbGlnbiwgZmFsc2UsIENTU1ZhbHVlU3VwZXIsICZzdXBUYWcsIDAsIFNob3VsZEJlUHVz
aGVkRG93bn0sCisgICAge0NTU1Byb3BlcnR5Rm9udFN0eWxlLCBmYWxzZSwgQ1NTVmFsdWVJdGFs
aWMsICZpVGFnLCAwLCBTaG91bGRCZVB1c2hlZERvd259LAorICAgIHtDU1NQcm9wZXJ0eUZvbnRT
dHlsZSwgZmFsc2UsIENTU1ZhbHVlSXRhbGljLCAmZW1UYWcsIDAsIFNob3VsZEJlUHVzaGVkRG93
bn0sCisKKyAgICAvLyB0ZXh0LWRlY29yYXRpb25zIHNob3VsZCBiZSBDU1NWYWx1ZUxpc3QKKyAg
ICB7Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgdHJ1ZSwgQ1NTVmFsdWVVbmRlcmxpbmUsICZ1
VGFnLCAwLCBTaG91bGRCZVB1c2hlZERvd259LAorICAgIHtDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uLCB0cnVlLCBDU1NWYWx1ZUxpbmVUaHJvdWdoLCAmc1RhZywgMCwgU2hvdWxkQmVQdXNoZWRE
b3dufSwKKyAgICB7Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgdHJ1ZSwgQ1NTVmFsdWVMaW5l
VGhyb3VnaCwgJnN0cmlrZVRhZywgMCwgU2hvdWxkQmVQdXNoZWREb3dufSwKKyAgICB7Q1NTUHJv
cGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgdHJ1ZSwgQ1NTVmFsdWVVbmRlcmxp
bmUsICZ1VGFnLCAwLCBTaG91bGRCZVB1c2hlZERvd259LAorICAgIHtDU1NQcm9wZXJ0eVdlYmtp
dFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCB0cnVlLCBDU1NWYWx1ZUxpbmVUaHJvdWdoLCAmc1Rh
ZywgMCwgU2hvdWxkQmVQdXNoZWREb3dufSwKKyAgICB7Q1NTUHJvcGVydHlXZWJraXRUZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdCwgdHJ1ZSwgQ1NTVmFsdWVMaW5lVGhyb3VnaCwgJnN0cmlrZVRhZywg
MCwgU2hvdWxkQmVQdXNoZWREb3dufSwKKworICAgIC8vIEZJWE1FOiBmb250IGF0dHJpYnV0ZXMg
c2hvdWxkIG9ubHkgYmUgcmVtb3ZlZCBpZiB2YWx1ZXMgd2VyZSBkaWZmZXJlbnQKKyAgICB7Q1NT
UHJvcGVydHlDb2xvciwgZmFsc2UsIENTU1ZhbHVlSW52YWxpZCwgJmZvbnRUYWcsICZjb2xvckF0
dHIsIFNob3VsZEJlUHVzaGVkRG93bn0sCisgICAge0NTU1Byb3BlcnR5Rm9udEZhbWlseSwgZmFs
c2UsIENTU1ZhbHVlSW52YWxpZCwgJmZvbnRUYWcsICZmYWNlQXR0ciwgU2hvdWxkQmVQdXNoZWRE
b3dufSwKKyAgICB7Q1NTUHJvcGVydHlGb250U2l6ZSwgZmFsc2UsIENTU1ZhbHVlSW52YWxpZCwg
JmZvbnRUYWcsICZzaXplQXR0ciwgU2hvdWxkQmVQdXNoZWREb3dufSwKKworICAgIC8vIHVuaWNv
ZGUtYmlkaSBhbmQgZGlyZWN0aW9uIGFyZSBwdXNoZWQgZG93biBzZXBhcmF0ZWx5IHNvIGRvbid0
IHB1c2ggZG93biB3aXRoIG90aGVyIHN0eWxlcy4KKyAgICB7Q1NTUHJvcGVydHlVbmljb2RlQmlk
aSwgZmFsc2UsIENTU1ZhbHVlSW52YWxpZCwgMCwgJmRpckF0dHIsIFNob3VsZE5vdEJlUHVzaGVk
RG93bn0sCisgICAge0NTU1Byb3BlcnR5RGlyZWN0aW9uLCBmYWxzZSwgQ1NTVmFsdWVJbnZhbGlk
LCAwLCAmZGlyQXR0ciwgU2hvdWxkTm90QmVQdXNoZWREb3dufSwKK307CisKK2Jvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIElubGluZVN0eWxlUmVt
b3ZhbE1vZGUgbW9kZSkKK3sKKyAgICBib29sIHJlbW92ZWQgPSBmYWxzZTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemVvZihDU1NQcm9wZXJ0eUVsZW1lbnRNYXBwaW5nKSAvIHNpemVv
ZihDU1NQcm9wZXJ0eUVsZW1lbnRDb3JyZXNwb25kYW5jZSk7IGkrKykgeworICAgICAgICBBU1NF
UlQoQ1NTUHJvcGVydHlFbGVtZW50TWFwcGluZ1tpXS5lbGVtZW50IHx8IENTU1Byb3BlcnR5RWxl
bWVudE1hcHBpbmdbaV0uYXR0cmlidXRlKTsKKyAgICAgICAgaWYgKENTU1Byb3BlcnR5RWxlbWVu
dE1hcHBpbmdbaV0uZWxlbWVudCAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZSgqQ1NTUHJvcGVydHlF
bGVtZW50TWFwcGluZ1tpXS5lbGVtZW50KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoQ1NTUHJvcGVydHlFbGVtZW50TWFwcGluZ1tpXS5hdHRyaWJ1dGUgJiYgIWVsZW1lbnQt
Pmhhc0F0dHJpYnV0ZSgqQ1NTUHJvcGVydHlFbGVtZW50TWFwcGluZ1tpXS5hdHRyaWJ1dGUpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBzdHlsZVZh
bHVlID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlFbGVtZW50TWFwcGlu
Z1tpXS5wcm9wZXJ0eUlEKTsKKyAgICAgICAgaWYgKCFzdHlsZVZhbHVlKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbWFwVmFsdWUgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NQcm9wZXJ0eUVsZW1lbnRNYXBw
aW5nW2ldLnByaW1pdGl2ZUlkKTsKKworICAgICAgICBpZiAoQ1NTUHJvcGVydHlFbGVtZW50TWFw
cGluZ1tpXS5pc1ZhbHVlTGlzdCAmJiBzdHlsZVZhbHVlLT5pc1ZhbHVlTGlzdCgpICYmIHN0YXRp
Y19jYXN0PENTU1ZhbHVlTGlzdCo+KHN0eWxlVmFsdWUuZ2V0KCkpLT5oYXNWYWx1ZShtYXBWYWx1
ZS5nZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsgLy8gSWYgQ1NTIHZhbHVlIGFzc3VtZXMg
Q1NTVmFsdWVMaXN0LCB0aGVuIG9ubHkgc2tpcCBpZiB0aGUgdmFsdWUgd2FzIHByZXNlbnQgaW4g
c3R5bGUgdG8gYXBwbHkuCisgICAgICAgIGVsc2UgaWYgKHN0eWxlVmFsdWUtPmNzc1RleHQoKSA9
PSBtYXBWYWx1ZS0+Y3NzVGV4dCgpKQorICAgICAgICAgICAgY29udGludWU7IC8vIElmIENTUyB2
YWx1ZSBpcyBwcmltaXRpdmUsIHRoZW4gc2tpcCBpZiB0aGV5IGFyZSBlcXVhbC4KIAorICAgICAg
ICBpZiAobW9kZSA9PSBSZW1vdmVOb25lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgcmVtb3ZlZCA9IHRydWU7CisgICAgICAgIGlmICghQ1NTUHJvcGVydHlFbGVtZW50TWFw
cGluZ1tpXS5hdHRyaWJ1dGUpIHsKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoU3Bhbk9yUmVtb3Zl
SWZXaXRob3V0QXR0cmlidXRlcyhlbGVtZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgKkNTU1Byb3BlcnR5RWxl
bWVudE1hcHBpbmdbaV0uYXR0cmlidXRlKTsKKyAgICAgICAgaWYgKGlzRW1wdHlGb250VGFnKGVs
ZW1lbnQpIHx8IGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlU3R5bGVTcGFuKGVsZW1l
bnQpKQorICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsK
KyAgICB9CisgICAgcmV0dXJuIHJlbW92ZWQ7Cit9CisgICAgCiB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpyZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoSFRNTEVsZW1l
bnQqJiBlbGVtKQogewogICAgIGJvb2wgcmVtb3ZlTm9kZSA9IGZhbHNlOwpAQCAtMTI0Nyw2NiAr
MTI1Niw2IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlcGxhY2VXaXRoU3Bhbk8KICAgICB9
CiB9CiAKLWJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhUTUxGb250U3R5bGUoQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbSwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSBtb2RlKQotewotICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgQVNTRVJUKGVs
ZW0pOwotCi0gICAgaWYgKCFlbGVtLT5oYXNMb2NhbE5hbWUoZm9udFRhZykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGJvb2wgcmVtb3ZlZCA9IGZhbHNlOwotICAgIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7Ci0gICAg
Zm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHls
ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUqIGF0dHJUb1JlbW92ZSA9IDA7Ci0gICAgICAgIHN3aXRjaCAoKCppdCkuaWQoKSkgewotICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6Ci0gICAgICAgICAgICBhdHRyVG9SZW1vdmUgPSAm
Y29sb3JBdHRyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250RmFtaWx5OgotICAgICAgICAgICAgYXR0clRvUmVtb3ZlID0gJmZhY2VBdHRyOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKLSAgICAgICAg
ICAgIGF0dHJUb1JlbW92ZSA9ICZzaXplQXR0cjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGF0dHJUb1JlbW92ZSkgewotICAgICAgICAgICAgcmVtb3ZlZCA9
IHRydWU7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBSZW1vdmVBdHRyaWJ1dGVzQW5kRWxlbWVu
dHMpCi0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtLCAqYXR0clRvUmVt
b3ZlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc0VtcHR5Rm9udFRhZyhlbGVtKSAm
JiBtb2RlID09IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cykKLSAgICAgICAgcmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtKTsKLQotICAgIHJldHVybiByZW1vdmVkOwotfQotCi1i
b29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MQmlkaUVtYmVkZGluZ1N0eWxlKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgSFRNTEVsZW1lbnQqIGVsZW0sIElubGluZVN0
eWxlUmVtb3ZhbE1vZGUgbW9kZSkKLXsKLSAgICBBU1NFUlQoc3R5bGUpOwotICAgIEFTU0VSVChl
bGVtKTsKLQotICAgIGlmICghZWxlbS0+aGFzQXR0cmlidXRlKGRpckF0dHIpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5VW5pY29kZUJpZGkpICYmICFzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eURpcmVjdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtb2RlID09
IFJlbW92ZU5vbmUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmVtb3ZlTm9kZUF0dHJp
YnV0ZShlbGVtLCBkaXJBdHRyKTsKLQotICAgIC8vIEZJWE1FOiBzaG91bGQgdGhpcyBiZSBpc1Nw
YW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZVN0eWxlU3Bhbj8gIE5lZWQgYSB0ZXN0LgotICAg
IGlmIChpc1Vuc3R5bGVkU3R5bGVTcGFuKGVsZW0pKQotICAgICAgICByZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuKGVsZW0pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgSFRNTEVsZW1lbnQqIGVsZW0sIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgbW9kZSkKIHsK
ICAgICBBU1NFUlQoc3R5bGUpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJ
KHJldmlzaW9uIDY2MDQ5KQorKysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDEzICs3MSwxMCBAQCBwcml2YXRlOgogICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7
IH0KIAogICAgIC8vIHN0eWxlLXJlbW92YWwgaGVscGVycwotICAgIGJvb2wgc2hvdWxkUmVtb3Zl
VGV4dERlY29yYXRpb25UYWcoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVUb0FwcGx5LCBpbnQg
dGV4dERlY29yYXRpb25BZGRlZEJ5VGFnKSBjb25zdDsKLSAgICBib29sIGltcGxpY2l0bHlTdHls
ZWRFbGVtZW50U2hvdWxkQmVSZW1vdmVkV2hlbkFwcGx5aW5nU3R5bGUoSFRNTEVsZW1lbnQqLCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOwogICAgIGJvb2wgcmVtb3ZlSW5saW5lU3R5bGVG
cm9tRWxlbWVudChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5s
aW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CiAgICAg
aW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEhUTUxFbGVtZW50KiBlbGVtZW50KSB7cmV0dXJuIHJl
bW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIGVsZW1lbnQsIFJlbW92ZU5vbmUpO30K
KyAgICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiwgSFRNTEVsZW1lbnQqLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlKTsKICAgICB2
b2lkIHJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxlbWVu
dComKTsKLSAgICBib29sIHJlbW92ZUhUTUxGb250U3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qLCBIVE1MRWxlbWVudCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVBdHRy
aWJ1dGVzQW5kRWxlbWVudHMpOwotICAgIGJvb2wgcmVtb3ZlSFRNTEJpZGlFbWJlZGRpbmdTdHls
ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5saW5lU3R5bGVS
ZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CiAgICAgYm9vbCByZW1v
dmVDU1NTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIEhUTUxFbGVtZW50KiwgSW5s
aW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUF0dHJpYnV0ZXNBbmRFbGVtZW50cyk7CiAgICAg
SFRNTEVsZW1lbnQqIGhpZ2hlc3RBbmNlc3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgTm9kZSopOwogICAgIFBhc3NSZWZQdHI8Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24+IGV4dHJhY3RJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSos
IGJvb2wgaXNTdHlsZWRFbGVtZW50LCBjb25zdCBWZWN0b3I8aW50PiYpOwo=
</data>
<flag name="review"
          id="54274"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>