<?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>50505</bug_id>
          
          <creation_ts>2010-12-03 17:27:54 -0800</creation_ts>
          <short_desc>HTML5 Slider does not work correctly with VoiceOver</short_desc>
          <delta_ts>2010-12-06 13:44:58 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>jamesr</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>317188</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-12-03 17:27:54 -0800</bug_when>
    <thetext>Here are the HTML5 slider problems

1) value indicator is not hit testable
2) value indicator does not return an AXValue
3) slider - min/max values are not correct
4) when you change the value with the KB, it doesn&apos;t send out the right notification


rdar://8724757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317189</commentid>
    <comment_count>1</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-12-03 17:33:57 -0800</bug_when>
    <thetext>5) the slider was returning NSAccessibilityValueAttribute twice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317192</commentid>
    <comment_count>2</comment_count>
      <attachid>75583</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-12-03 17:38:42 -0800</bug_when>
    <thetext>Created attachment 75583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317678</commentid>
    <comment_count>3</comment_count>
      <attachid>75583</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-06 09:43:49 -0800</bug_when>
    <thetext>Comment on attachment 75583
Patch

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

review- because the min/max work should be done differently

&gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2767
&gt; +    if (result-&gt;isInputSlider()) 
&gt; +        return result-&gt;doAccessibilityHitTest(point);

It seems really unfortunate here that we have to call one virtual function just to find out whether to call another. Is there a better way to design this?

&gt; WebCore/accessibility/AccessibilitySlider.cpp:135
&gt; +    const AtomicString&amp; maxValue = getAttribute(maxAttr);
&gt; +    // HTML says default value for max is 100.
&gt; +    if (maxValue.isEmpty())
&gt; +        return 100;
&gt; +    return maxValue.toFloat();

HTMLInputElement has a maximum function, which will give the correct answer. RangInputType.cpp has the default value of 100. It&apos;s not smart to repeat the logic here, because the two can so easily get out of sync.

Also, there are multiple cases where toFloat will return 0, including the null attribute (no max at all), the empty string, and a string that can’t be parsed as a number. This code special cases null and empty attributes, but does it do the right thing for strings like max=&quot;x&quot;? The toFloat function has an out parameter to indicates whether it parsed a number or not, which is better if you want to handle non-empty strings that are not parsed as numbers.

&gt; WebCore/accessibility/AccessibilitySlider.cpp:144
&gt; -    return getAttribute(minAttr).toFloat();
&gt; +    const AtomicString&amp; minValue = getAttribute(minAttr);
&gt; +    // HTML says default value for max is 0.
&gt; +    if (minValue.isEmpty())
&gt; +        return 0;
&gt; +    return minValue.toFloat();

HTMLInputElement&apos;s minimum function is the better way to do this.

Default behavior for toFloat is already to return 0, so no code change is needed. Comment says max, but code is for min. This call site could use fastGetAttribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317704</commentid>
    <comment_count>4</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-12-06 10:29:51 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 75583 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75583&amp;action=review
&gt; 
&gt; review- because the min/max work should be done differently
&gt; 
&gt; &gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2767
&gt; &gt; +    if (result-&gt;isInputSlider()) 
&gt; &gt; +        return result-&gt;doAccessibilityHitTest(point);
&gt; 
&gt; It seems really unfortunate here that we have to call one virtual function just to find out whether to call another. Is there a better way to design this?
&gt; 
&gt; &gt; WebCore/accessibility/AccessibilitySlider.cpp:135
&gt; &gt; +    const AtomicString&amp; maxValue = getAttribute(maxAttr);
&gt; &gt; +    // HTML says default value for max is 100.
&gt; &gt; +    if (maxValue.isEmpty())
&gt; &gt; +        return 100;
&gt; &gt; +    return maxValue.toFloat();
&gt; 
&gt; HTMLInputElement has a maximum function, which will give the correct answer. RangInputType.cpp has the default value of 100. It&apos;s not smart to repeat the logic here, because the two can so easily get out of sync.
&gt; 
&gt; Also, there are multiple cases where toFloat will return 0, including the null attribute (no max at all), the empty string, and a string that can’t be parsed as a number. This code special cases null and empty attributes, but does it do the right thing for strings like max=&quot;x&quot;? The toFloat function has an out parameter to indicates whether it parsed a number or not, which is better if you want to handle non-empty strings that are not parsed as numbers.
&gt; 
&gt; &gt; WebCore/accessibility/AccessibilitySlider.cpp:144
&gt; &gt; -    return getAttribute(minAttr).toFloat();
&gt; &gt; +    const AtomicString&amp; minValue = getAttribute(minAttr);
&gt; &gt; +    // HTML says default value for max is 0.
&gt; &gt; +    if (minValue.isEmpty())
&gt; &gt; +        return 0;
&gt; &gt; +    return minValue.toFloat();
&gt; 
&gt; HTMLInputElement&apos;s minimum function is the better way to do this.
&gt; 
&gt; Default behavior for toFloat is already to return 0, so no code change is needed. Comment says max, but code is for min. This call site could use fastGetAttribute.

Didn&apos;t realize those methods were there. will definitely use them. 

I filed a different bug to handle refactoring the hit test code, rather than muddle this patch with that

https://bugs.webkit.org/show_bug.cgi?id=50574</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317740</commentid>
    <comment_count>5</comment_count>
      <attachid>75715</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-12-06 11:22:28 -0800</bug_when>
    <thetext>Created attachment 75715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317768</commentid>
    <comment_count>6</comment_count>
      <attachid>75715</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-06 12:04:52 -0800</bug_when>
    <thetext>Comment on attachment 75715
Patch

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

&gt; WebCore/accessibility/AccessibilityObject.cpp:850
&gt; +    return element-&gt;fastGetAttribute(attribute);

This is OK as long as we never want to get the &quot;style&quot; attribute or an SVG animatable attribute.

&gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2771
&gt; +    if (result-&gt;isInputSlider()) 
&gt; +        return result-&gt;doAccessibilityHitTest(point);

This special cases seems really lame. Is there any way to handle this with a virtual function that works in a more consistent way rather than specifically doing isListBox and then isInputSlider?

&gt; WebCore/accessibility/AccessibilitySlider.h:47
&gt;      virtual bool isSlider() const { return true; }
&gt; -
&gt; +    virtual bool isInputSlider() const { return true; }

These overrides should be private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317774</commentid>
    <comment_count>7</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-12-06 12:08:53 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 75715 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75715&amp;action=review
&gt; 
&gt; &gt; WebCore/accessibility/AccessibilityObject.cpp:850
&gt; &gt; +    return element-&gt;fastGetAttribute(attribute);
&gt; 
&gt; This is OK as long as we never want to get the &quot;style&quot; attribute or an SVG animatable attribute.
&gt; 

So far, we have not needed to do that. if that need arises, we can add a case for it.

&gt; &gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2771
&gt; &gt; +    if (result-&gt;isInputSlider()) 
&gt; &gt; +        return result-&gt;doAccessibilityHitTest(point);
&gt; 
&gt; This special cases seems really lame. Is there any way to handle this with a virtual function that works in a more consistent way rather than specifically doing isListBox and then isInputSlider?
&gt; 

I don&apos;t have a good solution for that right now. The first step is performing a hit test, which gives us the render object we want. Since most elements are render based, we&apos;re done

However, if an element has &quot;fake&quot; children (list box, slider, etc), we still need another step to hit test into those fake children.

My thoughts now are that we could have just one method that by default returns this. then that can be overriden by whomever is interested.

&gt; &gt; WebCore/accessibility/AccessibilitySlider.h:47
&gt; &gt;      virtual bool isSlider() const { return true; }
&gt; &gt; -
&gt; &gt; +    virtual bool isInputSlider() const { return true; }
&gt; 
&gt; These overrides should be private.

aye aye</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317797</commentid>
    <comment_count>8</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-12-06 12:38:14 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/73388</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317814</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-12-06 13:19:38 -0800</bug_when>
    <thetext>It looks like this doesn&apos;t compile on Leopard:

cc1plus: warnings being treated as errors
/Volumes/Big/WebKit-BuildSlave/leopard-intel-debug/build/WebCore/accessibility/AccessibilitySlider.cpp:131: warning: implicit conversion shortens 64-bit value into a 32-bit value
/Volumes/Big/WebKit-BuildSlave/leopard-intel-debug/build/WebCore/accessibility/AccessibilitySlider.cpp:136: warning: implicit conversion shortens 64-bit value into a 32-bit value</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317820</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-06 13:28:03 -0800</bug_when>
    <thetext>Build fix landed in http://trac.webkit.org/changeset/73395.  Please verify the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317831</commentid>
    <comment_count>11</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-12-06 13:44:58 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Build fix landed in http://trac.webkit.org/changeset/73395.  Please verify the change.

thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75583</attachid>
            <date>2010-12-03 17:38:42 -0800</date>
            <delta_ts>2010-12-06 11:22:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50505-20101203173840.patch</filename>
            <type>text/plain</type>
            <size>12416</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzMxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMTItMDMgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBWDogSFRNTDUgU2xpZGVyIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IHdpdGggVm9pY2VPdmVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDUwNQor
CisgICAgICAgIEFkZHJlc3MgYSBmZXcgcHJvYmxlbXMgd2l0aCB0aGUgTWFjIGltcGxlbWVudGF0
aW9uIGZvciB0aGUgYWNjZXNzaWJpbGl0eSBzbGlkZXIuCisgICAgICAgICAgMSkgVGhlIHZhbHVl
IGluZGljYXRvciBpcyBub3QgaGl0IHRlc3RhYmxlLgorICAgICAgICAgIDIpIFRoZSB2YWx1ZSBp
bmRpY2F0b3IgZG9lcyBub3QgcmV0dXJuIGFuIEFYVmFsdWUuCisgICAgICAgICAgMykgSW4gdGhl
IHNsaWRlciwgdGhlIG1pbi9tYXggdmFsdWVzIGFyZSBub3QgY29ycmVjdCB3aGVuIG1pbi9tYXgg
YXR0cmlidXRlcyBhcmUgbm90IHByZXNlbnQuCisgICAgICAgICAgNCkgV2hlbiB5b3UgY2hhbmdl
IHRoZSB2YWx1ZSB3aXRoIHRoZSBrZXlib2FyZCwgaXQgZG9lc24ndCBzZW5kIG91dCB0aGUgcmln
aHQgbm90aWZpY2F0aW9uLgorICAgICAgICAgIDUpIFNsaWRlcnMgd2VyZSByZXR1cm5pbmcgQVhW
YWx1ZSBhbmQgQVhUb3BMZXZlbFVJRWxlbWVudCBhdHRyaWJ1dGVzIHR3aWNlIGluIHRoZWlyIGxp
c3Qgb2YgYXR0cmlidXRlcy4KKworICAgICAgICBUZXN0OiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9odG1sLXNsaWRlci1pbmRpY2F0b3IuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojppc0lucHV0U2xpZGVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6ZG9BY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlTbGlkZXI6OmRvQWNjZXNzaWJpbGl0eUhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVNsaWRlcjo6bWF4VmFsdWVGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5U2xpZGVyOjptaW5WYWx1ZUZvclJhbmdlKToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlTbGlkZXI6OmlzSW5wdXRTbGlkZXIpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
bWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOgorICAgICAgICAoLVtBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAg
KC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVl
Ol0pOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjphcHBseVN0ZXApOgorCiAyMDEwLTEyLTAzICBEaW1pdHJp
IEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmgJKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDYgKzI4NCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzc0luZGljYXRvcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2xpZGVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFNsaWRlcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzTGlzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYy
LDYgKzI3NjIsOSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAg
ICAgICAgIGxpc3RCb3gtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKICAgICAgICAgcmV0
dXJuIGxpc3RCb3gtPmRvQWNjZXNzaWJpbGl0eUhpdFRlc3QocG9pbnQpOwogICAgIH0KKyAgICAK
KyAgICBpZiAocmVzdWx0LT5pc0lucHV0U2xpZGVyKCkpIAorICAgICAgICByZXR1cm4gcmVzdWx0
LT5kb0FjY2Vzc2liaWxpdHlIaXRUZXN0KHBvaW50KTsKIAogICAgIGlmIChyZXN1bHQtPmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSkgewogICAgICAgICAvLyBJZiB0aGlzIGVsZW1lbnQgaXMgdGhl
IGxhYmVsIG9mIGEgY29udHJvbCwgYSBoaXQgdGVzdCBzaG91bGQgcmV0dXJuIHRoZSBjb250cm9s
LgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNw
cAkocmV2aXNpb24gNzMzMTkpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNsaWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDE3IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgQWNjZXNzaWJpbGl0eVNsaWRlcjoKIHsKICAgICByZXR1cm4gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFj
Y2Vzc2liaWxpdHlTbGlkZXI6OmRvQWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdAoreworICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSkgeworICAgICAgICBB
U1NFUlQobV9jaGlsZHJlbi5zaXplKCkgPT0gMSk7CisgICAgICAgIGlmIChtX2NoaWxkcmVuWzBd
LT5lbGVtZW50UmVjdCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBtX2No
aWxkcmVuWzBdLmdldCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgp
LT5nZXRPckNyZWF0ZShtX3JlbmRlcmVyKTsKK30KIAogYm9vbCBBY2Nlc3NpYmlsaXR5U2xpZGVy
OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKIHsKQEAgLTExNywxMiArMTI4LDIwIEBA
IGZsb2F0IEFjY2Vzc2liaWxpdHlTbGlkZXI6OnZhbHVlRm9yUmFuZ2UKIAogZmxvYXQgQWNjZXNz
aWJpbGl0eVNsaWRlcjo6bWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShtYXhBdHRyKS50b0Zsb2F0KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXhWYWx1ZSA9IGdldEF0dHJpYnV0ZShtYXhBdHRyKTsKKyAgICAvLyBIVE1MIHNheXMgZGVmYXVs
dCB2YWx1ZSBmb3IgbWF4IGlzIDEwMC4KKyAgICBpZiAobWF4VmFsdWUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gMTAwOworICAgIHJldHVybiBtYXhWYWx1ZS50b0Zsb2F0KCk7CiB9CiAKIGZs
b2F0IEFjY2Vzc2liaWxpdHlTbGlkZXI6Om1pblZhbHVlRm9yUmFuZ2UoKSBjb25zdAogewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUobWluQXR0cikudG9GbG9hdCgpOworICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWluVmFsdWUgPSBnZXRBdHRyaWJ1dGUobWluQXR0cik7CisgICAgLy8gSFRNTCBz
YXlzIGRlZmF1bHQgdmFsdWUgZm9yIG1heCBpcyAwLgorICAgIGlmIChtaW5WYWx1ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtaW5WYWx1ZS50b0Zsb2F0KCk7CiB9
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVNsaWRlcjo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaAko
cmV2aXNpb24gNzMzMTkpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNs
aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIFNsaWRlclJv
bGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1NsaWRlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQorICAgIHZpcnR1YWwgYm9vbCBpc0lucHV0U2xpZGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIAogICAgIHZpcnR1YWwgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiBjaGlsZHJlbigpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZHJlbigpOwogCkBAIC02Myw2
ICs2NCw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgSFRNTElucHV0RWxlbWVudCogZWxl
bWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBkb0FjY2Vzc2liaWxpdHlI
aXRUZXN0KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiB9OwogCiBjbGFzcyBBY2Nlc3NpYmlsaXR5
U2xpZGVyVGh1bWIgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eU9iamVjdCB7CkluZGV4OiBXZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW0JKHJldmlzaW9uIDczMzE5KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzc5LDggKzc3OSw2
IEBAIC0gKE5TQXJyYXkqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVOYW1lcwogICAgIH0KICAgICBp
ZiAocmFuZ2VBdHRycyA9PSBuaWwpIHsKICAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdFdpdGhBcnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJh
eSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVdOwot
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0
ZV07CiAgICAgICAgIFt0ZW1wQXJyYXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1pblZhbHVl
QXR0cmlidXRlXTsKICAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5
TWF4VmFsdWVBdHRyaWJ1dGVdOwogICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vz
c2liaWxpdHlPcmllbnRhdGlvbkF0dHJpYnV0ZV07CkBAIC04MjYsNyArODI0LDYgQEAgLSAoTlNB
cnJheSopYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzCiAgICAgICAgICAgICBOU0FjY2Vzc2li
aWxpdHlQb3NpdGlvbkF0dHJpYnV0ZSwKICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNpemVB
dHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGUsCi0g
ICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZSwKICAg
ICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eUVuYWJsZWRBdHRyaWJ1dGUsCiAgICAgICAgICAgICBO
U0FjY2Vzc2liaWxpdHlGb2N1c2VkQXR0cmlidXRlLAogICAgICAgICAgICAgTlNBY2Nlc3NpYmls
aXR5VGl0bGVBdHRyaWJ1dGUsCkBAIC0xNTM4LDYgKzE1MzUsOCBAQCAtIChpZClhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc1Byb2dyZXNzSW5kaWNhdG9yKCkgfHwgbV9vYmplY3QtPmlzU2xpZGVyKCkgfHwgbV9vYmpl
Y3QtPmlzU2Nyb2xsYmFyKCkpCiAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhGbG9hdDptX29iamVjdC0+dmFsdWVGb3JSYW5nZSgpXTsKKyAgICAgICAgaWYgKG1fb2JqZWN0
LT5yb2xlVmFsdWUoKSA9PSBTbGlkZXJUaHVtYlJvbGUpCisgICAgICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+cGFyZW50T2JqZWN0KCktPnZhbHVlRm9y
UmFuZ2UoKV07CiAgICAgICAgIGlmIChtX29iamVjdC0+aXNIZWFkaW5nKCkpCiAgICAgICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPmhlYWRpbmdMZXZlbCgp
XTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3
MzMxOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzc2LDYgKzM3Niw5IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YXBwbHlTdGVwKGRv
dWJsZSAKICAgICBpZiAobmV3VmFsdWUgPiBtX2lucHV0VHlwZS0+bWF4aW11bSgpKQogICAgICAg
ICBuZXdWYWx1ZSA9IG1faW5wdXRUeXBlLT5tYXhpbXVtKCk7CiAgICAgc2V0VmFsdWVBc051bWJl
cihuZXdWYWx1ZSwgZWMpOworICAgIAorICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmls
aXR5RW5hYmxlZCgpKQorICAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5wb3N0
Tm90aWZpY2F0aW9uKHJlbmRlcmVyKCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0
cnVlKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwVXAoaW50IG4sIEV4Y2VwdGlv
bkNvZGUmIGVjKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNzMzMTkpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMi0wMyAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEhUTUw1IFNsaWRlciBkb2VzIG5vdCB3b3JrIGNvcnJl
Y3RseSB3aXRoIFZvaWNlT3ZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTA1MDUKKworICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5
L2h0bWwtc2xpZGVyLWluZGljYXRvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2h0bWwtc2xpZGVyLWluZGljYXRvci5odG1sOiBBZGRl
ZC4KKwogMjAxMC0xMi0wMyAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaHRtbC1zbGlkZXItaW5kaWNhdG9yLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0
eS9odG1sLXNsaWRlci1pbmRpY2F0b3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaHRtbC1zbGlkZXItaW5kaWNhdG9y
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorQUxFUlQ6IFN1Y2Nl
c3NmdWxseSByZWNlaXZlZCBBWFZhbHVlQ2hhbmdlZAorQUxFUlQ6IFN1Y2Nlc3NmdWxseSByZWNl
aXZlZCBBWFZhbHVlQ2hhbmdlZAorCitUaGlzIHRlc3RzIHRoYXQgYSBiYXNpYyByYW5nZSByZXR1
cm5zIGFsbCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbiBmb3IgdGhlIG1hYyBwbGF0Zm9ybS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcmFuZ2UubWluVmFsdWUgaXMgMAor
UEFTUyByYW5nZS5tYXhWYWx1ZSBpcyAxMDAKK1BBU1MgcmFuZ2UuaW50VmFsdWUgaXMgNTAKK1BB
U1MgdmFsdWVJbmRpY2F0b3IuaW50VmFsdWUgaXMgNTAKK1BBU1MgcmFuZ2UuaW50VmFsdWUgaXMg
NDkKK1BBU1MgdmFsdWVJbmRpY2F0b3IuaW50VmFsdWUgaXMgNDkKK1BBU1MgcmFuZ2UuaW50VmFs
dWUgaXMgNTAKK1BBU1MgdmFsdWVJbmRpY2F0b3IuaW50VmFsdWUgaXMgNTAKK1BBU1MgdmFsdWVJ
bmRpY2F0b3IuaXNFcXVhbChoaXRUZXN0SW5kaWNhdG9yKSBpcyB0cnVlCitQQVNTIHJhbmdlLmlz
RXF1YWwoaGl0VGVzdFJhbmdlKSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvaHRtbC1zbGlkZXItaW5kaWNhdG9yLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaHRtbC1zbGlkZXItaW5kaWNhdG9y
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9odG1sLXNsaWRlci1pbmRpY2F0b3IuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5IGlkPSJib2R5Ij4KKworPGlucHV0IGlkPSJyYW5nZTEiIHR5cGU9InJhbmdlIj4KKwor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNj
cmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgYSBiYXNpYyByYW5nZSBy
ZXR1cm5zIGFsbCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbiBmb3IgdGhlIG1hYyBwbGF0Zm9ybS4i
KTsKKyAgICAKKyAgICB2YXIgcmFuZ2UgPSAwOworICAgIHZhciB2YWx1ZUNoYW5nZUNvdW50ID0g
MDsKKyAgICBmdW5jdGlvbiBub3RpZmljYXRpb25DYWxsYmFjayhub3RpZmljYXRpb24pIHsKKyAg
ICAgICAgaWYgKG5vdGlmaWNhdGlvbiA9PSAiQVhWYWx1ZUNoYW5nZWQiKSB7CisgICAgICAgICAg
IGFsZXJ0KCJTdWNjZXNzZnVsbHkgcmVjZWl2ZWQgIiArIG5vdGlmaWNhdGlvbik7CisgICAgICAg
ICAgIHZhbHVlQ2hhbmdlQ291bnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZUNo
YW5nZUNvdW50ID09IDIpIHsKKyAgICAgICAgICAgcmFuZ2UucmVtb3ZlTm90aWZpY2F0aW9uTGlz
dGVuZXIoKTsKKyAgICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIpIHsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFuZ2UxIikuZm9j
dXMoKTsKKyAgICAgICAgcmFuZ2UgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxl
bWVudDsKKyAgICAgICAgcmFuZ2UuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIobm90aWZpY2F0aW9u
Q2FsbGJhY2spOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgbWluL21heC92YWx1ZSByZXR1cm4g
Y29ycmVjdCBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgc2hvdWxkQmUoInJhbmdlLm1pblZhbHVl
IiwgIjAiKTsKKyAgICAgICAgc2hvdWxkQmUoInJhbmdlLm1heFZhbHVlIiwgIjEwMCIpOworICAg
ICAgICBzaG91bGRCZSgicmFuZ2UuaW50VmFsdWUiLCAiNTAiKTsKKworICAgICAgICAvLyBDaGVj
ayB0aGUgdmFsdWUgaW5kaWNhdG9yIHJldHVybnMgYSB2YWx1ZS4KKyAgICAgICAgdmFyIHZhbHVl
SW5kaWNhdG9yID0gcmFuZ2UuY2hpbGRBdEluZGV4KDApOworICAgICAgICBzaG91bGRCZSgidmFs
dWVJbmRpY2F0b3IuaW50VmFsdWUiLCAiNTAiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNr
IHRoYXQgaW5jcmVtZW50aW5nL2RlY3JlbWVudGluZyBzZW5kcyBBWFZhbHVlQ2hhbmdlLgorICAg
ICAgICBldmVudFNlbmRlci5rZXlEb3duKCJsZWZ0QXJyb3ciKTsKKyAgICAgICAgc2hvdWxkQmUo
InJhbmdlLmludFZhbHVlIiwgIjQ5Iik7CisgICAgICAgIHNob3VsZEJlKCJ2YWx1ZUluZGljYXRv
ci5pbnRWYWx1ZSIsICI0OSIpOworCisgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oInJpZ2h0
QXJyb3ciKTsKKyAgICAgICAgc2hvdWxkQmUoInJhbmdlLmludFZhbHVlIiwgIjUwIik7CisgICAg
ICAgIHNob3VsZEJlKCJ2YWx1ZUluZGljYXRvci5pbnRWYWx1ZSIsICI1MCIpOworCisgICAgICAg
IC8vIENoZWNrIHRoYXQgYSBoaXQgdGVzdCBvbiB0aGUgdmFsdWUgaW5kaWNhdG9yIHN1Y2NlZWRz
LgorICAgICAgICB2YXIgaGl0VGVzdEluZGljYXRvciA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmVsZW1lbnRBdFBvaW50KHJhbmdlLnggKyByYW5nZS53aWR0aC8yLCByYW5nZS55ICsgcmFuZ2Uu
aGVpZ2h0LzIpOworICAgICAgICBzaG91bGRCZVRydWUoInZhbHVlSW5kaWNhdG9yLmlzRXF1YWwo
aGl0VGVzdEluZGljYXRvcikiKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IG91dHNpZGUgdGhl
IGluZGljYXRvciByZXR1cm5zIHRoZSBzbGlkZXIuCisgICAgICAgIHZhciBoaXRUZXN0UmFuZ2Ug
PSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5lbGVtZW50QXRQb2ludChyYW5nZS54ICsgMSwgcmFu
Z2UueSArIHJhbmdlLmhlaWdodC8yKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJyYW5nZS5pc0Vx
dWFsKGhpdFRlc3RSYW5nZSkiKTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75715</attachid>
            <date>2010-12-06 11:22:28 -0800</date>
            <delta_ts>2010-12-06 12:04:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50505-20101206112227.patch</filename>
            <type>text/plain</type>
            <size>12920</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MzM3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMTItMDYgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBIVE1MNSBTbGlkZXIgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgd2l0aCBWb2ljZU92ZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNTA1CisKKyAg
ICAgICAgQWRkcmVzcyBhIGZldyBwcm9ibGVtcyB3aXRoIHRoZSBNYWMgaW1wbGVtZW50YXRpb24g
Zm9yIHRoZSBhY2Nlc3NpYmlsaXR5IHNsaWRlci4KKyAgICAgICAgICAgIDEpIFRoZSB2YWx1ZSBp
bmRpY2F0b3IgaXMgbm90IGhpdCB0ZXN0YWJsZS4KKyAgICAgICAgICAgIDIpIFRoZSB2YWx1ZSBp
bmRpY2F0b3IgZG9lcyBub3QgcmV0dXJuIGFuIEFYVmFsdWUuCisgICAgICAgICAgICAzKSBJbiB0
aGUgc2xpZGVyLCB0aGUgbWluL21heCB2YWx1ZXMgYXJlIG5vdCBjb3JyZWN0IHdoZW4gbWluL21h
eCBhdHRyaWJ1dGVzIGFyZSBub3QgcHJlc2VudC4KKyAgICAgICAgICAgIDQpIFdoZW4geW91IGNo
YW5nZSB0aGUgdmFsdWUgd2l0aCB0aGUga2V5Ym9hcmQsIGl0IGRvZXNuJ3Qgc2VuZCBvdXQgdGhl
IHJpZ2h0IG5vdGlmaWNhdGlvbi4KKyAgICAgICAgICAgIDUpIFNsaWRlcnMgd2VyZSByZXR1cm5p
bmcgQVhWYWx1ZSBhbmQgQVhUb3BMZXZlbFVJRWxlbWVudCBhdHRyaWJ1dGVzIHR3aWNlIGluIHRo
ZWlyIGxpc3Qgb2YgYXR0cmlidXRlcy4KKyAKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvaHRtbC1zbGlkZXItaW5kaWNhdG9yLmh0bWwKKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpnZXRBdHRyaWJ1dGUpOgorICAgICAgICAgICAgVXNlIGZhc3RHZXRB
dHRyaWJ1dGUgb24gRWxlbWVudCwgaW5zdGVhZCBvZiBnZXRBdHRyaWJ1dGUuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0lucHV0U2xpZGVyKToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BY2Nlc3NpYmlsaXR5SGl0VGVzdCk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlTbGlkZXI6OmRvQWNjZXNzaWJpbGl0eUhpdFRlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNsaWRlcjo6bWF4VmFsdWVGb3JSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2xpZGVyOjptaW5WYWx1ZUZvclJhbmdlKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlTbGlkZXI6OmlzSW5wdXRTbGlkZXIpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tOgorICAgICAgICAo
LVtBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXNd
KToKKyAgICAgICAgKC1bQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZVZhbHVlOl0pOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjphcHBseVN0ZXApOgorCiAyMDEwLTEy
LTA2ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiA3MzM3MikKKysrIFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ3LDcg
Kzg0Nyw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQWNjZXNzaWJpbGl0eU9iamVjdDoKICAgICAg
ICAgcmV0dXJuIG51bGxBdG9tOwogICAgIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4oZWxlbWVudE5vZGUpOwotICAgIHJldHVybiBlbGVtZW50LT5nZXRBdHRy
aWJ1dGUoYXR0cmlidXRlKTsKKyAgICByZXR1cm4gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShh
dHRyaWJ1dGUpOwogfQogICAgIAogLy8gTGFja2luZyBjb25jcmV0ZSBldmlkZW5jZSBvZiBvcmll
bnRhdGlvbiwgaG9yaXpvbnRhbCBtZWFucyB3aWR0aCA+IGhlaWdodC4gdmVydGljYWwgaXMgaGVp
Z2h0ID4gd2lkdGg7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmgJKHJldmlzaW9uIDczMzcyKQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDYgKzI4NCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dEltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzc0luZGljYXRvcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2xpZGVyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFNsaWRlcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzTGlzdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KSW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDczMzc0KQorKysgV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzY2
LDYgKzI3NjYsOSBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAg
ICAgICAgIGxpc3RCb3gtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKICAgICAgICAgcmV0
dXJuIGxpc3RCb3gtPmRvQWNjZXNzaWJpbGl0eUhpdFRlc3QocG9pbnQpOwogICAgIH0KKyAgICAK
KyAgICBpZiAocmVzdWx0LT5pc0lucHV0U2xpZGVyKCkpIAorICAgICAgICByZXR1cm4gcmVzdWx0
LT5kb0FjY2Vzc2liaWxpdHlIaXRUZXN0KHBvaW50KTsKIAogICAgIGlmIChyZXN1bHQtPmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSkgewogICAgICAgICAvLyBJZiB0aGlzIGVsZW1lbnQgaXMgdGhl
IGxhYmVsIG9mIGEgY29udHJvbCwgYSBoaXQgdGVzdCBzaG91bGQgcmV0dXJuIHRoZSBjb250cm9s
LgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNw
cAkocmV2aXNpb24gNzMzNzIpCisrKyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNsaWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDE3IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgQWNjZXNzaWJpbGl0eVNsaWRlcjoKIHsKICAgICByZXR1cm4gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFj
Y2Vzc2liaWxpdHlTbGlkZXI6OmRvQWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdAoreworICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSkgeworICAgICAgICBB
U1NFUlQobV9jaGlsZHJlbi5zaXplKCkgPT0gMSk7CisgICAgICAgIGlmIChtX2NoaWxkcmVuWzBd
LT5lbGVtZW50UmVjdCgpLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiBtX2No
aWxkcmVuWzBdLmdldCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgp
LT5nZXRPckNyZWF0ZShtX3JlbmRlcmVyKTsKK30KIAogYm9vbCBBY2Nlc3NpYmlsaXR5U2xpZGVy
OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKIHsKQEAgLTExNywxMiArMTI4LDEyIEBA
IGZsb2F0IEFjY2Vzc2liaWxpdHlTbGlkZXI6OnZhbHVlRm9yUmFuZ2UKIAogZmxvYXQgQWNjZXNz
aWJpbGl0eVNsaWRlcjo6bWF4VmFsdWVGb3JSYW5nZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShtYXhBdHRyKS50b0Zsb2F0KCk7CisgICAgcmV0dXJuIGVsZW1lbnQoKS0+bWF4
aW11bSgpOwogfQogCiBmbG9hdCBBY2Nlc3NpYmlsaXR5U2xpZGVyOjptaW5WYWx1ZUZvclJhbmdl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1pbkF0dHIpLnRvRmxvYXQoKTsK
KyAgICByZXR1cm4gZWxlbWVudCgpLT5taW5pbXVtKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0
eVNsaWRlcjo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IFdlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuaAkocmV2aXNpb24gNzMzNzIpCisrKyBX
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xl
IHJvbGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIFNsaWRlclJvbGU7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBpc1NsaWRlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQorICAgIHZpcnR1YWwgYm9v
bCBpc0lucHV0U2xpZGVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAogICAgIHZpcnR1
YWwgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbigpOwogICAgIHZp
cnR1YWwgdm9pZCBhZGRDaGlsZHJlbigpOwogCkBAIC02Myw2ICs2NCw3IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgSFRNTElucHV0RWxlbWVudCogZWxlbWVudCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBkb0FjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JikgY29uc3Q7CiB9OwogCiBjbGFzcyBBY2Nlc3NpYmlsaXR5U2xpZGVyVGh1bWIgOiBwdWJsaWMg
QWNjZXNzaWJpbGl0eU9iamVjdCB7CkluZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL0Fj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHJldmlzaW9uIDczMzcy
KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzc5LDggKzc3OSw2IEBAIC0gKE5TQXJyYXkqKWFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lcwogICAgIH0KICAgICBpZiAocmFuZ2VBdHRycyA9PSBuaWwp
IHsKICAgICAgICAgdGVtcEFycmF5ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhB
cnJheTphdHRyaWJ1dGVzXTsKLSAgICAgICAgW3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5VG9wTGV2ZWxVSUVsZW1lbnRBdHRyaWJ1dGVdOwotICAgICAgICBbdGVtcEFycmF5IGFk
ZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlWYWx1ZUF0dHJpYnV0ZV07CiAgICAgICAgIFt0ZW1wQXJy
YXkgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eU1pblZhbHVlQXR0cmlidXRlXTsKICAgICAgICAg
W3RlbXBBcnJheSBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5TWF4VmFsdWVBdHRyaWJ1dGVdOwog
ICAgICAgICBbdGVtcEFycmF5IGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlPcmllbnRhdGlvbkF0
dHJpYnV0ZV07CkBAIC04MjYsNyArODI0LDYgQEAgLSAoTlNBcnJheSopYWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZU5hbWVzCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlQb3NpdGlvbkF0dHJpYnV0
ZSwKICAgICAgICAgICAgIE5TQWNjZXNzaWJpbGl0eVNpemVBdHRyaWJ1dGUsCiAgICAgICAgICAg
ICBOU0FjY2Vzc2liaWxpdHlXaW5kb3dBdHRyaWJ1dGUsCi0gICAgICAgICAgICBOU0FjY2Vzc2li
aWxpdHlUb3BMZXZlbFVJRWxlbWVudEF0dHJpYnV0ZSwKICAgICAgICAgICAgIE5TQWNjZXNzaWJp
bGl0eUVuYWJsZWRBdHRyaWJ1dGUsCiAgICAgICAgICAgICBOU0FjY2Vzc2liaWxpdHlGb2N1c2Vk
QXR0cmlidXRlLAogICAgICAgICAgICAgTlNBY2Nlc3NpYmlsaXR5VGl0bGVBdHRyaWJ1dGUsCkBA
IC0xNTM4LDYgKzE1MzUsOCBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5T
U3RyCiAgICAgICAgIH0KICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc1Byb2dyZXNzSW5kaWNhdG9y
KCkgfHwgbV9vYmplY3QtPmlzU2xpZGVyKCkgfHwgbV9vYmplY3QtPmlzU2Nyb2xsYmFyKCkpCiAg
ICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+dmFs
dWVGb3JSYW5nZSgpXTsKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBTbGlk
ZXJUaHVtYlJvbGUpCisgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDptX29iamVjdC0+cGFyZW50T2JqZWN0KCktPnZhbHVlRm9yUmFuZ2UoKV07CiAgICAgICAgIGlm
IChtX29iamVjdC0+aXNIZWFkaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6bV9vYmplY3QtPmhlYWRpbmdMZXZlbCgpXTsKICAgICAgICAgCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA3MzM3MikKKysrIFdlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDYgKzM3Niw5IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6YXBwbHlTdGVwKGRvdWJsZSAKICAgICBpZiAobmV3VmFs
dWUgPiBtX2lucHV0VHlwZS0+bWF4aW11bSgpKQogICAgICAgICBuZXdWYWx1ZSA9IG1faW5wdXRU
eXBlLT5tYXhpbXVtKCk7CiAgICAgc2V0VmFsdWVBc051bWJlcihuZXdWYWx1ZSwgZWMpOworICAg
IAorICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAg
ICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKHJlbmRlcmVy
KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKIH0KIAogdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzdGVwVXAoaW50IG4sIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNzMzNzYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMyBAQAorMjAxMC0xMi0wNiAgQ2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hA
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEhUTUw1IFNsaWRlciBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSB3aXRoIFZvaWNlT3Zlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA1MDUKKwor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmlsaXR5L2h0bWwtc2xpZGVyLWluZGljYXRv
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hY2Nlc3NpYmls
aXR5L2h0bWwtc2xpZGVyLWluZGljYXRvci5odG1sOiBBZGRlZC4KKwogMjAxMC0xMi0wNiAgTWlo
YWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
IG1vdmUgb2YgQ2hyb21pdW0gYmFzZWxpbmVzLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FjY2Vzc2liaWxpdHkvaHRtbC1zbGlkZXItaW5kaWNhdG9yLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9odG1sLXNs
aWRlci1pbmRpY2F0b3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaHRtbC1zbGlkZXItaW5kaWNhdG9yLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorQUxFUlQ6IFN1Y2Nlc3NmdWxseSBy
ZWNlaXZlZCBBWFZhbHVlQ2hhbmdlZAorQUxFUlQ6IFN1Y2Nlc3NmdWxseSByZWNlaXZlZCBBWFZh
bHVlQ2hhbmdlZAorCitUaGlzIHRlc3RzIHRoYXQgYSBiYXNpYyByYW5nZSByZXR1cm5zIGFsbCB0
aGUgY29ycmVjdCBpbmZvcm1hdGlvbiBmb3IgdGhlIG1hYyBwbGF0Zm9ybS4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcmFuZ2UubWluVmFsdWUgaXMgMAorUEFTUyByYW5n
ZS5tYXhWYWx1ZSBpcyAxMDAKK1BBU1MgcmFuZ2UuaW50VmFsdWUgaXMgNTAKK1BBU1MgdmFsdWVJ
bmRpY2F0b3IuaW50VmFsdWUgaXMgNTAKK1BBU1MgcmFuZ2UuaW50VmFsdWUgaXMgNDkKK1BBU1Mg
dmFsdWVJbmRpY2F0b3IuaW50VmFsdWUgaXMgNDkKK1BBU1MgcmFuZ2UuaW50VmFsdWUgaXMgNTAK
K1BBU1MgdmFsdWVJbmRpY2F0b3IuaW50VmFsdWUgaXMgNTAKK1BBU1MgdmFsdWVJbmRpY2F0b3Iu
aXNFcXVhbChoaXRUZXN0SW5kaWNhdG9yKSBpcyB0cnVlCitQQVNTIHJhbmdlLmlzRXF1YWwoaGl0
VGVzdFJhbmdlKSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxp
dHkvaHRtbC1zbGlkZXItaW5kaWNhdG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaHRtbC1zbGlkZXItaW5kaWNhdG9yLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9odG1s
LXNsaWRlci1pbmRpY2F0b3IuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdD4KK3ZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlk
PSJib2R5Ij4KKworPGlucHV0IGlkPSJyYW5nZTEiIHR5cGU9InJhbmdlIj4KKworPHAgaWQ9ImRl
c2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKwor
ICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgYSBiYXNpYyByYW5nZSByZXR1cm5zIGFs
bCB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbiBmb3IgdGhlIG1hYyBwbGF0Zm9ybS4iKTsKKyAgICAK
KyAgICB2YXIgcmFuZ2UgPSAwOworICAgIHZhciB2YWx1ZUNoYW5nZUNvdW50ID0gMDsKKyAgICBm
dW5jdGlvbiBub3RpZmljYXRpb25DYWxsYmFjayhub3RpZmljYXRpb24pIHsKKyAgICAgICAgaWYg
KG5vdGlmaWNhdGlvbiA9PSAiQVhWYWx1ZUNoYW5nZWQiKSB7CisgICAgICAgICAgIGFsZXJ0KCJT
dWNjZXNzZnVsbHkgcmVjZWl2ZWQgIiArIG5vdGlmaWNhdGlvbik7CisgICAgICAgICAgIHZhbHVl
Q2hhbmdlQ291bnQrKzsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZUNoYW5nZUNvdW50
ID09IDIpIHsKKyAgICAgICAgICAgcmFuZ2UucmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKTsK
KyAgICAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIp
IHsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmFuZ2UxIikuZm9jdXMoKTsKKyAg
ICAgICAgcmFuZ2UgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAg
ICAgICAgcmFuZ2UuYWRkTm90aWZpY2F0aW9uTGlzdGVuZXIobm90aWZpY2F0aW9uQ2FsbGJhY2sp
OworCisgICAgICAgIC8vIENoZWNrIHRoYXQgbWluL21heC92YWx1ZSByZXR1cm4gY29ycmVjdCBk
ZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgc2hvdWxkQmUoInJhbmdlLm1pblZhbHVlIiwgIjAiKTsK
KyAgICAgICAgc2hvdWxkQmUoInJhbmdlLm1heFZhbHVlIiwgIjEwMCIpOworICAgICAgICBzaG91
bGRCZSgicmFuZ2UuaW50VmFsdWUiLCAiNTAiKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgdmFs
dWUgaW5kaWNhdG9yIHJldHVybnMgYSB2YWx1ZS4KKyAgICAgICAgdmFyIHZhbHVlSW5kaWNhdG9y
ID0gcmFuZ2UuY2hpbGRBdEluZGV4KDApOworICAgICAgICBzaG91bGRCZSgidmFsdWVJbmRpY2F0
b3IuaW50VmFsdWUiLCAiNTAiKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgaW5j
cmVtZW50aW5nL2RlY3JlbWVudGluZyBzZW5kcyBBWFZhbHVlQ2hhbmdlLgorICAgICAgICBldmVu
dFNlbmRlci5rZXlEb3duKCJsZWZ0QXJyb3ciKTsKKyAgICAgICAgc2hvdWxkQmUoInJhbmdlLmlu
dFZhbHVlIiwgIjQ5Iik7CisgICAgICAgIHNob3VsZEJlKCJ2YWx1ZUluZGljYXRvci5pbnRWYWx1
ZSIsICI0OSIpOworCisgICAgICAgIGV2ZW50U2VuZGVyLmtleURvd24oInJpZ2h0QXJyb3ciKTsK
KyAgICAgICAgc2hvdWxkQmUoInJhbmdlLmludFZhbHVlIiwgIjUwIik7CisgICAgICAgIHNob3Vs
ZEJlKCJ2YWx1ZUluZGljYXRvci5pbnRWYWx1ZSIsICI1MCIpOworCisgICAgICAgIC8vIENoZWNr
IHRoYXQgYSBoaXQgdGVzdCBvbiB0aGUgdmFsdWUgaW5kaWNhdG9yIHN1Y2NlZWRzLgorICAgICAg
ICB2YXIgaGl0VGVzdEluZGljYXRvciA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmVsZW1lbnRB
dFBvaW50KHJhbmdlLnggKyByYW5nZS53aWR0aC8yLCByYW5nZS55ICsgcmFuZ2UuaGVpZ2h0LzIp
OworICAgICAgICBzaG91bGRCZVRydWUoInZhbHVlSW5kaWNhdG9yLmlzRXF1YWwoaGl0VGVzdElu
ZGljYXRvcikiKTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IG91dHNpZGUgdGhlIGluZGljYXRv
ciByZXR1cm5zIHRoZSBzbGlkZXIuCisgICAgICAgIHZhciBoaXRUZXN0UmFuZ2UgPSBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5lbGVtZW50QXRQb2ludChyYW5nZS54ICsgMSwgcmFuZ2UueSArIHJh
bmdlLmhlaWdodC8yKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJyYW5nZS5pc0VxdWFsKGhpdFRl
c3RSYW5nZSkiKTsKKyAgICB9CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9z
Y3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="66545"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>