<?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>122644</bug_id>
          
          <creation_ts>2013-10-11 03:23:26 -0700</creation_ts>
          <short_desc>[ATK] Simplify implementation of atk_text_get_text</short_desc>
          <delta_ts>2013-10-18 03:13:43 -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>Accessibility</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jdiggs</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>938757</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-11 03:23:26 -0700</bug_when>
    <thetext>Currently, the implementation of atk_text_get_text() is definitely not the most efficient in the world (multiple times to textUnderElement, treating ColorWell elements at the end instead of at the beginning...) and that needs to change IMHO, so this bug is just for simplifying that function, while still keep passing the tests.

Actually more things need to change in this file and this bug is probably a first step in that direction, but let&apos;s go step by step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938758</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-10-11 03:23:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/15206444&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938762</commentid>
    <comment_count>2</comment_count>
      <attachid>213978</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-11 03:35:14 -0700</bug_when>
    <thetext>Created attachment 213978
Patch proposal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938843</commentid>
    <comment_count>3</comment_count>
      <attachid>213996</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-11 10:11:59 -0700</bug_when>
    <thetext>Created attachment 213996
New patch proposal

I just realized that the previous patch had an issue: when calling doAXStringForRange() from the AtkText implementation, it&apos;s very common that we pass (0, -1) as start/length offset, which is something doAXStringForRange() won&apos;t handle:

  String AccessibilityRenderObject::doAXStringForRange(const PlainTextRange&amp; range) const
  {
     [...]
     String elementText = isPasswordField() ? passwordFieldValue() : text();
     if (range.start + range.length &gt; elementText.length())
         return String();
    
     return elementText.substring(range.start, range.length);
  }

However, I don&apos;t see any reason why doAXStringForRange() could not handle a (start, -1) range, since String::substring() would gracefully handle that situation in case we passed a too big length as a second parameter, or just -1 (which would be translated to an unsigned). Besides, it seems to me that the check (range.start + range.length &gt; elementText.length()) might be wrong anyway, or at least I don&apos;t understand very well what it&apos;s trying to check.

For all those reasons, the current patch proposes to remove that if and let String::substring() handle the out-of-bounds scenario when passing start/end</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940004</commentid>
    <comment_count>4</comment_count>
      <attachid>213996</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-10-15 09:36:54 -0700</bug_when>
    <thetext>Comment on attachment 213996
New patch proposal

View in context: https://bugs.webkit.org/attachment.cgi?id=213996&amp;action=review

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:-2113
&gt; -    if (range.start + range.length &gt; elementText.length())

why remove this check? it seems like a good safety check to have here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940007</commentid>
    <comment_count>5</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-15 09:41:00 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 213996 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=213996&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:-2113
&gt; &gt; -    if (range.start + range.length &gt; elementText.length())
&gt; 
&gt; why remove this check? it seems like a good safety check to have here

I have three reasons mainly :):

1. Because I think it&apos;s checking the wrong thing, since a proper check to see if the range is out of bounds would be something like this, IMO:

   (range.length - range.start &gt; elementText.length())

2. Because in any case the String::substring() method will check, and adjust if needed, any limit that falls out of bounds for that string.

3. Because that way ranges like (0, -1) will actually work as &quot;request all the test&quot;, and that&apos;s convenient from the ATK perspective (yet I understand it might be not the best reason)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940014</commentid>
    <comment_count>6</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-10-15 09:54:21 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 213996 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=213996&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:-2113
&gt; &gt; &gt; -    if (range.start + range.length &gt; elementText.length())
&gt; &gt; 
&gt; &gt; why remove this check? it seems like a good safety check to have here
&gt; 
&gt; I have three reasons mainly :):
&gt; 
&gt; 1. Because I think it&apos;s checking the wrong thing, since a proper check to see if the range is out of bounds would be something like this, IMO:
&gt; 
&gt;    (range.length - range.start &gt; elementText.length())

I think that&apos;s wrong. I think we still want to check the MAXRange of that range, which would be +.

&gt; 
&gt; 2. Because in any case the String::substring() method will check, and adjust if needed, any limit that falls out of bounds for that string.

If it in fact does do this, then it&apos;s OK to remove. I was assuming that would throw an error

&gt; 
&gt; 3. Because that way ranges like (0, -1) will actually work as &quot;request all the test&quot;, and that&apos;s convenient from the ATK perspective (yet I understand it might be not the best reason)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940787</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-17 08:35:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; [...]
&gt; &gt; 1. Because I think it&apos;s checking the wrong thing, since a proper check to see if the range is out of bounds would be something like this, IMO:
&gt; &gt; 
&gt; &gt;    (range.length - range.start &gt; elementText.length())
&gt; 
&gt; I think that&apos;s wrong. I think we still want to check the MAXRange of that 
&gt; range, which would be +.

Stupid me. I wast reading that line as if was using the final position (&quot;range.end&quot;, if it existed) instead of the length.

You are actually checking that the range of text does not fall out of the limits of the text control, hence the original check is semantically right, not mine.

&gt; &gt; 
&gt; &gt; 2. Because in any case the String::substring() method will check, and adjust if needed, any limit that falls out of bounds for that string.
&gt; 
&gt; If it in fact does do this, then it&apos;s OK to remove. I was assuming that
&gt; would throw an error
&gt; 

This is the implementation of substring():

  PassRefPtr&lt;StringImpl&gt; StringImpl::substring(unsigned start, unsigned length)
  {
    if (start &gt;= m_length)
        return empty();
    unsigned maxLength = m_length - start;
    if (length &gt;= maxLength) {
        if (!start)
            return this;
        length = maxLength;
    }
    if (is8Bit())
        return create(m_data8 + start, length);

    return create(m_data16 + start, length);
  }


AS far as I can see, if the length passed is bigger than the String&apos;s upper limit, this implementation will just adjust it to maxLength, so I think it should be fine to remove that check anyway.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>941132</commentid>
    <comment_count>8</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-10-18 03:13:43 -0700</bug_when>
    <thetext>Committed r157628: &lt;http://trac.webkit.org/changeset/157628&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213978</attachid>
            <date>2013-10-11 03:35:14 -0700</date>
            <delta_ts>2013-10-11 10:11:59 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2013-10-11-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>6182</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBlODQyODQ2MmI3ODVjNTJjYWJmMjBjYjIxY2IxMjBjNjk1ZWNiYjViIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxMSBPY3QgMjAxMyAxMToxOTo1NyArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIDIwMTMtMTAtMTEgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgW0FUS10gU2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2YgYXRrX3Rl
eHRfZ2V0X3RleHQKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIyNjQ0CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBT
aW1wbGlmaWVkIGNvZGUgc28gd2Ugb25seSBjYWxsIHRleHRVbmRlckVsZW1lbnQoKSBkaXJlY3Rs
eSBvbmNlCiAgICAgICAgYW5kIG9ubHkgd2hlbiBuZWVkZWQuIEFsc28sIG1vdmVkIHRoZSBzcGVj
aWZpYyBjb2RlIGZvciBDb2xvcldlbGwKICAgICAgICBvYmplY3RzIHVwIHRvIHRoZSBiZWdpbm5p
bmcgb2YgdGhhdCBmdW5jdGlvbiwgc28gd2UgZG9uJ3QgZG8gYW55CiAgICAgICAgYWRkaXRpb25h
bCBlZmZvcnRzIGxpa2UgY29tcHV0aW5nIHRleHQgcmFuZ2VzIGluIHRob3NlIGNhc2VzLgoKICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cDoKICAgICAgICAodGV4dEZvck9iamVjdCk6IEZpeGVkIGEgaXNzdWUgdGhhdCBnb3QgZGV0ZWN0
ZWQgd2hpbGUgd29ya2luZyBvbgogICAgICAgIHRoaXMgcGF0Y2gsIHdoaWNoIHdhcyBjYXVzaW5n
IGEgJ1xuJyB0byBiZSBhcnRpZmljaWFsbHkgYXBwZW5kZWQKICAgICAgICBhdCB0aGUgZW5kIG9m
IHRleHQgY29udHJvbHMgYWxsIHRoZSB0aW1lLgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFRleHQpOiBTaW1wbGlmaWVkIGZ1bmN0aW9uLgoKICAgICAgICBObyBuZXcgdGVzdHMgYXJl
IG5lZWRlZCwganVzdCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY3VycmVudCBsYXlvdXQKICAgICAg
ICBhbmQgdW5pdCB0ZXN0cyBhcmUgc3RpbGwgcGFzc2luZywgd2hpY2ggdGhleSBhcmUuCgpjb21t
aXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZwotLS0KIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMSArKysrKysr
KysrKysKIC4uLi9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwICAgICAgICAg
IHwgICAzNiArKysrKysrKy0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRp
b25zKCspLCAyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ZiZWFmMS4uNDA5YTJhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEzLTEwLTExICBNYXJpbyBTYW5jaGV6IFBy
YWRhICA8bWFyaW8ucHJhZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0FUS10gU2ltcGxpZnkg
aW1wbGVtZW50YXRpb24gb2YgYXRrX3RleHRfZ2V0X3RleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjY0NAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBsaWZpZWQgY29kZSBzbyB3ZSBvbmx5IGNh
bGwgdGV4dFVuZGVyRWxlbWVudCgpIGRpcmVjdGx5IG9uY2UKKyAgICAgICAgYW5kIG9ubHkgd2hl
biBuZWVkZWQuIEFsc28sIG1vdmVkIHRoZSBzcGVjaWZpYyBjb2RlIGZvciBDb2xvcldlbGwKKyAg
ICAgICAgb2JqZWN0cyB1cCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgZnVuY3Rpb24sIHNvIHdl
IGRvbid0IGRvIGFueQorICAgICAgICBhZGRpdGlvbmFsIGVmZm9ydHMgbGlrZSBjb21wdXRpbmcg
dGV4dCByYW5nZXMgaW4gdGhvc2UgY2FzZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFyZSBu
ZWVkZWQsIGp1c3QgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGN1cnJlbnQgbGF5b3V0CisgICAgICAg
IGFuZCB1bml0IHRlc3RzIGFyZSBzdGlsbCBwYXNzaW5nLCB3aGljaCB0aGV5IGFyZS4KKworICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cDoKKyAgICAgICAgKHRleHRGb3JPYmplY3QpOiBGaXhlZCBhIGlzc3VlIHRoYXQgZ290IGRldGVj
dGVkIHdoaWxlIHdvcmtpbmcgb24KKyAgICAgICAgdGhpcyBwYXRjaCwgd2hpY2ggd2FzIGNhdXNp
bmcgYSAnXG4nIHRvIGJlIGFydGlmaWNpYWxseSBhcHBlbmRlZAorICAgICAgICBhdCB0aGUgZW5k
IG9mIHRleHQgY29udHJvbHMgYWxsIHRoZSB0aW1lLgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRUZXh0KTogU2ltcGxpZmllZCBmdW5jdGlvbi4KKwogMjAxMy0xMC0xMCAgTWFyaW8g
U2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtBVEtd
IE1pc3NpbmcgY2hlY2tzIGluIHJldHVybklmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCmluZGV4IDZjODU0YzkuLjlhMDc4YjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKQEAgLTE0OCwxMiArMTQ4LDE0IEBA
IHN0YXRpYyBnY2hhciogdGV4dEZvck9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0KQogICAgICAgICBpbnQgbGluZU51bWJlciA9IDA7CiAgICAgICAgIFBsYWluVGV4
dFJhbmdlIHJhbmdlID0gY29yZU9iamVjdC0+ZG9BWFJhbmdlRm9yTGluZShsaW5lTnVtYmVyKTsK
ICAgICAgICAgd2hpbGUgKHJhbmdlLmxlbmd0aCkgewotICAgICAgICAgICAgLy8gV2hlbiBhIGxp
bmUgb2YgdGV4dCB3cmFwcyBpbiBhIHRleHQgYXJlYSwgdGhlIGZpbmFsIHNwYWNlIGlzIHJlbW92
ZWQuCi0gICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPCB0ZXh0TGVu
Z3RoKQotICAgICAgICAgICAgICAgIHJhbmdlLmxlbmd0aCAtPSAxOwogICAgICAgICAgICAgU3Ry
aW5nIGxpbmVUZXh0ID0gY29yZU9iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKICAg
ICAgICAgICAgIGdfc3RyaW5nX2FwcGVuZChzdHIsIGxpbmVUZXh0LnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwgIlxuIik7CisKKyAgICAgICAgICAgIC8v
IFdoZW4gYSBsaW5lIG9mIHRleHQgd3JhcHMgaW4gYSB0ZXh0IGFyZWEsIHRoZSBmaW5hbCBzcGFj
ZQorICAgICAgICAgICAgLy8gYWZ0ZXIgZWFjaCBub24tZmluYWwgbGluZSBtdXN0IGJlIHJlcGxh
Y2VkIHdpdGggYSBsaW5lIGJyZWFrLgorICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFu
Z2UubGVuZ3RoIDwgdGV4dExlbmd0aCkKKyAgICAgICAgICAgICAgICBnX3N0cmluZ19vdmVyd3Jp
dGVfbGVuKHN0ciwgc3RyLT5sZW4gLSAxLCAiXG4iLCAxKTsKKwogICAgICAgICAgICAgcmFuZ2Ug
PSBjb3JlT2JqZWN0LT5kb0FYUmFuZ2VGb3JMaW5lKCsrbGluZU51bWJlcik7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgp
KSB7CkBAIC01NjksMTIgKzU3MSwxMyBAQCBzdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0VGV4dChBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50CiAKICAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKIAotICAgIGludCBl
bmQgPSBlbmRPZmZzZXQ7Ci0gICAgaWYgKGVuZE9mZnNldCA9PSAtMSkgewotICAgICAgICBlbmQg
PSBjb3JlT2JqZWN0LT5zdHJpbmdWYWx1ZSgpLmxlbmd0aCgpOwotICAgICAgICBpZiAoIWVuZCkK
LSAgICAgICAgICAgIGVuZCA9IGNvcmVPYmplY3QtPnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJp
bGl0eVRleHRVbmRlckVsZW1lbnRNb2RlKEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9k
ZTo6VGV4dFVuZGVyRWxlbWVudE1vZGVJbmNsdWRlQWxsQ2hpbGRyZW4pKS5sZW5ndGgoKTsKKyNp
ZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKKyAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVl
KCkgPT0gQ29sb3JXZWxsUm9sZSkgeworICAgICAgICBpbnQgciwgZywgYjsKKyAgICAgICAgY29y
ZU9iamVjdC0+Y29sb3JWYWx1ZShyLCBnLCBiKTsKKyAgICAgICAgcmV0dXJuIGdfc3RyZHVwX3By
aW50ZigicmdiICU3LjVmICU3LjVmICU3LjVmIDEiLCByIC8gMjU1LiwgZyAvIDI1NS4sIGIgLyAy
NTUuKTsKICAgICB9CisjZW5kaWYKIAogICAgIFN0cmluZyByZXQ7CiAgICAgaWYgKGNvcmVPYmpl
Y3QtPmlzVGV4dENvbnRyb2woKSkKQEAgLTU5MSwzMCArNTk0LDIxIEBAIHN0YXRpYyBnY2hhciog
d2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZz
ZXQsIGdpbnQKICAgICAgICAgLy8gaXMgc29tZXRoaW5nIEFUcyB3YW50IGluY2x1ZGVkIGFuZCB3
ZSBoYXZlIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQgaXQgaXMgbXVsdGlieXRlLgogICAg
ICAgICBHT3duUHRyPGNoYXI+IG9iamVjdFRleHQodGV4dEZvck9iamVjdChjb3JlT2JqZWN0KSk7
CiAgICAgICAgIHJldCA9IFN0cmluZzo6ZnJvbVVURjgob2JqZWN0VGV4dC5nZXQoKSk7Ci0gICAg
ICAgIGlmICghZW5kKQotICAgICAgICAgICAgZW5kID0gcmV0Lmxlbmd0aCgpOwogICAgIH0KIAog
ICAgIC8vIFByZWZpeCBhIGl0ZW0gbnVtYmVyL2J1bGxldCBpZiBuZWVkZWQKKyAgICBpbnQgYWN0
dWFsRW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwogICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUo
KSA9PSBMaXN0SXRlbVJvbGUpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvYmpSZW5kZXJlciA9
IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChvYmpSZW5kZXJlciAmJiBvYmpS
ZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWFya2VyVGV4dCA9
IHRvUmVuZGVyTGlzdEl0ZW0ob2JqUmVuZGVyZXIpLT5tYXJrZXJUZXh0V2l0aFN1ZmZpeCgpOwog
ICAgICAgICAgICAgcmV0ID0gb2JqUmVuZGVyZXItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UiA/IG1hcmtlclRleHQgKyByZXQgOiByZXQgKyBtYXJrZXJUZXh0OwogICAgICAgICAgICAgaWYg
KGVuZE9mZnNldCA9PSAtMSkKLSAgICAgICAgICAgICAgICBlbmQgKz0gbWFya2VyVGV4dC5sZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICBhY3R1YWxFbmRPZmZzZXQgPSByZXQubGVuZ3RoKCkgKyBt
YXJrZXJUZXh0Lmxlbmd0aCgpOwogICAgICAgICB9CiAgICAgfQogCi0jaWYgRU5BQkxFKElOUFVU
X1RZUEVfQ09MT1IpCi0gICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IENvbG9yV2Vs
bFJvbGUpIHsKLSAgICAgICAgaW50IHIsIGcsIGI7Ci0gICAgICAgIGNvcmVPYmplY3QtPmNvbG9y
VmFsdWUociwgZywgYik7Ci0gICAgICAgIHJldHVybiBnX3N0cmR1cF9wcmludGYoInJnYiAlNy41
ZiAlNy41ZiAlNy41ZiAxIiwgciAvIDI1NS4sIGcgLyAyNTUuLCBiIC8gMjU1Lik7Ci0gICAgfQot
I2VuZGlmCi0KLSAgICByZXQgPSByZXQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmQgLSBzdGFy
dE9mZnNldCk7CisgICAgcmV0ID0gcmV0LnN1YnN0cmluZyhzdGFydE9mZnNldCwgYWN0dWFsRW5k
T2Zmc2V0IC0gc3RhcnRPZmZzZXQpOwogICAgIHJldHVybiBnX3N0cmR1cChyZXQudXRmOCgpLmRh
dGEoKSk7CiB9CiAKLS0gCjEuNy4xMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213996</attachid>
            <date>2013-10-11 10:11:59 -0700</date>
            <delta_ts>2013-10-17 17:09:17 -0700</delta_ts>
            <desc>New patch proposal</desc>
            <filename>0001-2013-10-11-Mario-Sanchez-Prada-mario.prada-samsung.c.patch</filename>
            <type>text/plain</type>
            <size>7210</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBjYzZjMThmNWIwYTZhMzZhOGZjY2UyMDU3Mjg0MDA2NmQxNzA2YmVlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KRGF0ZTogRnJpLCAxMSBPY3QgMjAxMyAxMToxOTo1NyArMDEwMApTdWJqZWN0OiBb
UEFUQ0hdIDIwMTMtMTAtMTEgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtYXJpby5wcmFkYUBzYW1z
dW5nLmNvbT4KCiAgICAgICAgW0FUS10gU2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2YgYXRrX3Rl
eHRfZ2V0X3RleHQKICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIyNjQ0CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBT
aW1wbGlmaWVkIGNvZGUgc28gd2Ugb25seSBjYWxsIHRleHRVbmRlckVsZW1lbnQoKSBkaXJlY3Rs
eSBvbmNlCiAgICAgICAgYW5kIG9ubHkgd2hlbiBuZWVkZWQuIEFsc28sIG1vdmVkIHRoZSBzcGVj
aWZpYyBjb2RlIGZvciBDb2xvcldlbGwKICAgICAgICBvYmplY3RzIHVwIHRvIHRoZSBiZWdpbm5p
bmcgb2YgdGhhdCBmdW5jdGlvbiwgc28gd2UgZG9uJ3QgZG8gYW55CiAgICAgICAgYWRkaXRpb25h
bCBlZmZvcnRzIGxpa2UgY29tcHV0aW5nIHRleHQgcmFuZ2VzIGluIHRob3NlIGNhc2VzLgoKICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cDoKICAgICAgICAodGV4dEZvck9iamVjdCk6IEZpeGVkIGEgaXNzdWUgdGhhdCBnb3QgZGV0ZWN0
ZWQgd2hpbGUgd29ya2luZyBvbgogICAgICAgIHRoaXMgcGF0Y2gsIHdoaWNoIHdhcyBjYXVzaW5n
IGEgJ1xuJyB0byBiZSBhcnRpZmljaWFsbHkgYXBwZW5kZWQKICAgICAgICBhdCB0aGUgZW5kIG9m
IHRleHQgY29udHJvbHMgYWxsIHRoZSB0aW1lLgogICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4
dEdldFRleHQpOiBTaW1wbGlmaWVkIGZ1bmN0aW9uLgoKICAgICAgICBObyBuZXcgdGVzdHMgYXJl
IG5lZWRlZCwganVzdCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY3VycmVudCBsYXlvdXQKICAgICAg
ICBhbmQgdW5pdCB0ZXN0cyBhcmUgc3RpbGwgcGFzc2luZywgd2hpY2ggdGhleSBhcmUuCi0tLQog
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI3
ICsrKysrKysrKysrKysrKwogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAgICAgfCAgICAzIC0tCiAuLi4vYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmNwcCAgICAgICAgICB8ICAgMzYgKysrKysrKystLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hh
bmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDNm
YmVhZjEuLjg5NjJiODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMy0xMC0xMSAg
TWFyaW8gU2FuY2hleiBQcmFkYSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgorCisgICAgICAg
IFtBVEtdIFNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIG9mIGF0a190ZXh0X2dldF90ZXh0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI2NDQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmaWVkIGNv
ZGUgc28gd2Ugb25seSBjYWxsIHRleHRVbmRlckVsZW1lbnQoKSBkaXJlY3RseSBvbmNlCisgICAg
ICAgIGFuZCBvbmx5IHdoZW4gbmVlZGVkLiBBbHNvLCBtb3ZlZCB0aGUgc3BlY2lmaWMgY29kZSBm
b3IgQ29sb3JXZWxsCisgICAgICAgIG9iamVjdHMgdXAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGF0
IGZ1bmN0aW9uLCBzbyB3ZSBkb24ndCBkbyBhbnkKKyAgICAgICAgYWRkaXRpb25hbCBlZmZvcnRz
IGxpa2UgY29tcHV0aW5nIHRleHQgcmFuZ2VzIGluIHRob3NlIGNhc2VzLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBhcmUgbmVlZGVkLCBqdXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjdXJyZW50
IGxheW91dAorICAgICAgICBhbmQgdW5pdCB0ZXN0cyBhcmUgc3RpbGwgcGFzc2luZywgd2hpY2gg
dGhleSBhcmUuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHA6CisgICAgICAgICh0ZXh0Rm9yT2JqZWN0KTogRml4ZWQgYSBpc3N1
ZSB0aGF0IGdvdCBkZXRlY3RlZCB3aGlsZSB3b3JraW5nIG9uCisgICAgICAgIHRoaXMgcGF0Y2gs
IHdoaWNoIHdhcyBjYXVzaW5nIGEgJ1xuJyB0byBiZSBhcnRpZmljaWFsbHkgYXBwZW5kZWQKKyAg
ICAgICAgYXQgdGhlIGVuZCBvZiB0ZXh0IGNvbnRyb2xzIGFsbCB0aGUgdGltZS4KKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dCk6IFNpbXBsaWZpZWQgZnVuY3Rpb24uCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWFN0cmluZ0ZvclJh
bmdlKTogUmVtb3ZlZAorICAgICAgICB0aGUgY2hlY2sgdGhhdCBwcmV2ZW50cyBmcm9tIHBhc3Mg
cmFuZ2VzIGV4Y2VlZGluZyB0aGUgbGltaXRzIG9mCisgICAgICAgIHRoZSBlbGVtZW50J3MgdGV4
dCwgc2luY2UgdGhvc2Ugd2lsbCBiZSBjaGVja2VkIGFueXdheSB3aGVuCisgICAgICAgIGNhbGxp
bmcgU3RyaW5nOjpzdWJzdHJpbmcoKS4KKwogMjAxMy0xMC0xMCAgTWFyaW8gU2FuY2hleiBQcmFk
YSAgPG1hcmlvLnByYWRhQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtBVEtdIE1pc3NpbmcgY2hl
Y2tzIGluIHJldHVybklmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKaW5kZXggZTAzZGQ4YjUuLmJlYWFkZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMjEx
MCw5ICsyMTEwLDYgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhTdHJp
bmdGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogICAgIAogICAgIFN0cmluZyBlbGVtZW50VGV4dCA9IGlzUGFzc3dvcmRGaWVsZCgp
ID8gcGFzc3dvcmRGaWVsZFZhbHVlKCkgOiB0ZXh0KCk7Ci0gICAgaWYgKHJhbmdlLnN0YXJ0ICsg
cmFuZ2UubGVuZ3RoID4gZWxlbWVudFRleHQubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICAKICAgICByZXR1cm4gZWxlbWVudFRleHQuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0
LCByYW5nZS5sZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAK
aW5kZXggNmM4NTRjOS4uOTQwOTVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0
LmNwcApAQCAtMTQ4LDEyICsxNDgsMTQgQEAgc3RhdGljIGdjaGFyKiB0ZXh0Rm9yT2JqZWN0KGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCiAgICAgICAgIGludCBsaW5lTnVt
YmVyID0gMDsKICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT5kb0FY
UmFuZ2VGb3JMaW5lKGxpbmVOdW1iZXIpOwogICAgICAgICB3aGlsZSAocmFuZ2UubGVuZ3RoKSB7
Ci0gICAgICAgICAgICAvLyBXaGVuIGEgbGluZSBvZiB0ZXh0IHdyYXBzIGluIGEgdGV4dCBhcmVh
LCB0aGUgZmluYWwgc3BhY2UgaXMgcmVtb3ZlZC4KLSAgICAgICAgICAgIGlmIChyYW5nZS5zdGFy
dCArIHJhbmdlLmxlbmd0aCA8IHRleHRMZW5ndGgpCi0gICAgICAgICAgICAgICAgcmFuZ2UubGVu
Z3RoIC09IDE7CiAgICAgICAgICAgICBTdHJpbmcgbGluZVRleHQgPSBjb3JlT2JqZWN0LT5kb0FY
U3RyaW5nRm9yUmFuZ2UocmFuZ2UpOwogICAgICAgICAgICAgZ19zdHJpbmdfYXBwZW5kKHN0ciwg
bGluZVRleHQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBnX3N0cmluZ19hcHBlbmQoc3Ry
LCAiXG4iKTsKKworICAgICAgICAgICAgLy8gV2hlbiBhIGxpbmUgb2YgdGV4dCB3cmFwcyBpbiBh
IHRleHQgYXJlYSwgdGhlIGZpbmFsIHNwYWNlCisgICAgICAgICAgICAvLyBhZnRlciBlYWNoIG5v
bi1maW5hbCBsaW5lIG11c3QgYmUgcmVwbGFjZWQgd2l0aCBhIGxpbmUgYnJlYWsuCisgICAgICAg
ICAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPCB0ZXh0TGVuZ3RoKQorICAgICAg
ICAgICAgICAgIGdfc3RyaW5nX292ZXJ3cml0ZV9sZW4oc3RyLCBzdHItPmxlbiAtIDEsICJcbiIs
IDEpOworCiAgICAgICAgICAgICByYW5nZSA9IGNvcmVPYmplY3QtPmRvQVhSYW5nZUZvckxpbmUo
KytsaW5lTnVtYmVyKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoY29yZU9iamVjdC0+aXNB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpIHsKQEAgLTU2OSwxMiArNTcxLDEzIEBAIHN0YXRp
YyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqIHRleHQsIGdpbnQg
c3RhcnRPZmZzZXQsIGdpbnQKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qg
PSBjb3JlKHRleHQpOwogCi0gICAgaW50IGVuZCA9IGVuZE9mZnNldDsKLSAgICBpZiAoZW5kT2Zm
c2V0ID09IC0xKSB7Ci0gICAgICAgIGVuZCA9IGNvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCkubGVu
Z3RoKCk7Ci0gICAgICAgIGlmICghZW5kKQotICAgICAgICAgICAgZW5kID0gY29yZU9iamVjdC0+
dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoQWNjZXNz
aWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlOjpUZXh0VW5kZXJFbGVtZW50TW9kZUluY2x1ZGVB
bGxDaGlsZHJlbikpLmxlbmd0aCgpOworI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQorICAg
IGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBDb2xvcldlbGxSb2xlKSB7CisgICAgICAg
IGludCByLCBnLCBiOworICAgICAgICBjb3JlT2JqZWN0LT5jb2xvclZhbHVlKHIsIGcsIGIpOwor
ICAgICAgICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIs
IHIgLyAyNTUuLCBnIC8gMjU1LiwgYiAvIDI1NS4pOwogICAgIH0KKyNlbmRpZgogCiAgICAgU3Ry
aW5nIHJldDsKICAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQpAQCAtNTkxLDMw
ICs1OTQsMjEgQEAgc3RhdGljIGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQoQXRr
VGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludAogICAgICAgICAvLyBpcyBzb21ldGhp
bmcgQVRzIHdhbnQgaW5jbHVkZWQgYW5kIHdlIGhhdmUgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3Qg
dGhhdCBpdCBpcyBtdWx0aWJ5dGUuCiAgICAgICAgIEdPd25QdHI8Y2hhcj4gb2JqZWN0VGV4dCh0
ZXh0Rm9yT2JqZWN0KGNvcmVPYmplY3QpKTsKICAgICAgICAgcmV0ID0gU3RyaW5nOjpmcm9tVVRG
OChvYmplY3RUZXh0LmdldCgpKTsKLSAgICAgICAgaWYgKCFlbmQpCi0gICAgICAgICAgICBlbmQg
PSByZXQubGVuZ3RoKCk7CiAgICAgfQogCiAgICAgLy8gUHJlZml4IGEgaXRlbSBudW1iZXIvYnVs
bGV0IGlmIG5lZWRlZAorICAgIGludCBhY3R1YWxFbmRPZmZzZXQgPSBlbmRPZmZzZXQgPT0gLTEg
PyByZXQubGVuZ3RoKCkgOiBlbmRPZmZzZXQ7CiAgICAgaWYgKGNvcmVPYmplY3QtPnJvbGVWYWx1
ZSgpID09IExpc3RJdGVtUm9sZSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIG9ialJlbmRlcmVy
ID0gY29yZU9iamVjdC0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKG9ialJlbmRlcmVyICYmIG9i
alJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKICAgICAgICAgICAgIFN0cmluZyBtYXJrZXJUZXh0
ID0gdG9SZW5kZXJMaXN0SXRlbShvYmpSZW5kZXJlciktPm1hcmtlclRleHRXaXRoU3VmZml4KCk7
CiAgICAgICAgICAgICByZXQgPSBvYmpSZW5kZXJlci0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0g
TFRSID8gbWFya2VyVGV4dCArIHJldCA6IHJldCArIG1hcmtlclRleHQ7CiAgICAgICAgICAgICBp
ZiAoZW5kT2Zmc2V0ID09IC0xKQotICAgICAgICAgICAgICAgIGVuZCArPSBtYXJrZXJUZXh0Lmxl
bmd0aCgpOworICAgICAgICAgICAgICAgIGFjdHVhbEVuZE9mZnNldCA9IHJldC5sZW5ndGgoKSAr
IG1hcmtlclRleHQubGVuZ3RoKCk7CiAgICAgICAgIH0KICAgICB9CiAKLSNpZiBFTkFCTEUoSU5Q
VVRfVFlQRV9DT0xPUikKLSAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQ29sb3JX
ZWxsUm9sZSkgewotICAgICAgICBpbnQgciwgZywgYjsKLSAgICAgICAgY29yZU9iamVjdC0+Y29s
b3JWYWx1ZShyLCBnLCBiKTsKLSAgICAgICAgcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigicmdiICU3
LjVmICU3LjVmICU3LjVmIDEiLCByIC8gMjU1LiwgZyAvIDI1NS4sIGIgLyAyNTUuKTsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIHJldCA9IHJldC5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZCAtIHN0
YXJ0T2Zmc2V0KTsKKyAgICByZXQgPSByZXQuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBhY3R1YWxF
bmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CiAgICAgcmV0dXJuIGdfc3RyZHVwKHJldC51dGY4KCku
ZGF0YSgpKTsKIH0KIAotLSAKMS43LjEwLjQKCg==
</data>
<flag name="review"
          id="236468"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
      

    </bug>

</bugzilla>