<?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>172101</bug_id>
          
          <creation_ts>2017-05-14 23:22:19 -0700</creation_ts>
          <short_desc>Crash under WebCore::AudioSourceProviderAVFObjC::process().</short_desc>
          <delta_ts>2017-05-17 14:53:07 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Per Arne Vollan">pvollan</reporter>
          <assigned_to name="Per Arne Vollan">pvollan</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1308582</commentid>
    <comment_count>0</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-05-14 23:22:19 -0700</bug_when>
    <thetext>WebCore::AudioSourceProviderAVFObjC::process() is calling MTAudioProcessingTapGetSourceAudio() where the value of the parameter MTAudioProcessingTapRef is NULL.

Crashed Thread:        29  AUDeferredRenderer-0x7fe86d4e20

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000010
Exception Note:        EXC_CORPSE_NOTIFY

Thread 29 Crashed:: AUDeferredRenderer-0x7fe86d4e20
0   com.apple.MediaToolbox        	0x7fffa8aabb53 MTAudioProcessingTapGetSourceAudio + 129 (/Library/Caches/com.apple.xbs/Sources/CoreMedia/CoreMedia-1873/Prototypes/MediaConverter/MTAudioProcessingTap.c:869)
1   com.apple.WebCore             	0x00007fffac05b580 WebCore::AudioSourceProviderAVFObjC::process(long, unsigned int, AudioBufferList*, long*, unsigned int*) + 64
2   com.apple.MediaToolbox        	0x7fffa8aacaab aptap_AudioQueueProcessingTapCallback + 158 (/Library/Caches/com.apple.xbs/Sources/CoreMedia/CoreMedia-1873/Prototypes/MediaConverter/MTAudioProcessingTap.c:466)
3   com.apple.audio.toolbox.AudioToolbox	0x00007fffa450c97f AQClientCallProcessingTap(void*, unsigned int, AudioTimeStamp*, unsigned int*, unsigned int*, AudioBufferList*, int, double, unsigned int, double, unsigned int, unsigned char const*, unsigned int) + 93
4   com.apple.audio.toolbox.AudioToolbox	0x00007fffa45934b0 AQProcessingTap::DoCallout(unsigned int&amp;, AudioTimeStamp&amp;, unsigned int&amp;, AudioBufferList&amp;) + 188
5   com.apple.audio.toolbox.AudioToolbox	0x00007fffa45932af AudioQueueObject::PerformTapInternal(AudioTimeStamp&amp;, unsigned int&amp;, unsigned int&amp;) + 133
6   com.apple.audio.toolbox.AudioToolbox	0x00007fffa45931b5 AudioQueueObject::PerformProcessingTap(int (*)(void*, unsigned int&amp;, AudioTimeStamp const&amp;, unsigned int, AudioBufferList&amp;, double&amp;, unsigned int&amp;), void*, AudioTimeStamp&amp;, unsigned int&amp;, AudioBufferList&amp;, unsigned int&amp;) + 197
7   com.apple.audio.toolbox.AudioToolbox	0x00007fffa459ddd9 MEMixerChannel::TapDownstream(void*, unsigned int*, AudioTimeStamp const*, unsigned int, unsigned int, AudioBufferList*) + 129
8   com.apple.audio.units.Components	0x000000011a51c6b5 AUInputElement::PullInput(unsigned int&amp;, AudioTimeStamp const&amp;, unsigned int, unsigned int) + 185
9   com.apple.audio.units.Components	0x000000011a45f374 AUDeferredRenderer::Produce() + 576
10  com.apple.audio.units.Components	0x000000011a45f0ab AUDeferredRenderer::ProducerThreadProc() + 49
11  com.apple.audio.units.Components	0x000000011a45eaab AUDeferredRenderer::ProducerThreadProc(void*) + 31
12  com.apple.audio.units.Components	0x000000011a532737 CAPThread::Entry(CAPThread*) + 85
13  libsystem_pthread.dylib       	0x00007fffb9accc4f _pthread_body + 176
14  libsystem_pthread.dylib       	0x00007fffb9accb9f _pthread_start + 274
15  libsystem_pthread.dylib       	0x00007fffb9acc3d5 thread_start + 13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308584</commentid>
    <comment_count>1</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-05-14 23:23:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/27446589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308598</commentid>
    <comment_count>2</comment_count>
      <attachid>310115</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-05-15 00:24:31 -0700</bug_when>
    <thetext>Created attachment 310115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308697</commentid>
    <comment_count>3</comment_count>
      <attachid>310115</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-05-15 10:18:14 -0700</bug_when>
    <thetext>Comment on attachment 310115
Patch

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

&gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:364
&gt; +        return;

I wonder how we get into this state? We should probably ASSERT in &quot;initCallback&quot; if the passed &apos;tap&apos; is nullptr, since I don&apos;t think this is supposed to happen.

It seems like this might happen if &apos;destroyMix()&apos; is called, and then something attempts to use the AudioSourceProviderAVFObjC again (some queued &apos;process&apos; callback gets invoked).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309089</commentid>
    <comment_count>4</comment_count>
      <attachid>310250</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-05-16 02:56:24 -0700</bug_when>
    <thetext>Created attachment 310250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309090</commentid>
    <comment_count>5</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-05-16 03:00:12 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #3)
&gt; Comment on attachment 310115 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=310115&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:364
&gt; &gt; +        return;
&gt; 
&gt; I wonder how we get into this state? We should probably ASSERT in
&gt; &quot;initCallback&quot; if the passed &apos;tap&apos; is nullptr, since I don&apos;t think this is
&gt; supposed to happen.
&gt; 
&gt; It seems like this might happen if &apos;destroyMix()&apos; is called, and then
&gt; something attempts to use the AudioSourceProviderAVFObjC again (some queued
&gt; &apos;process&apos; callback gets invoked).

Thanks for reviewing! I have added an ASSERT in initCallback, and included a scenario of how this might happen in the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309091</commentid>
    <comment_count>6</comment_count>
      <attachid>310251</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-05-16 03:03:24 -0700</bug_when>
    <thetext>Created attachment 310251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309140</commentid>
    <comment_count>7</comment_count>
      <attachid>310251</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-05-16 08:48:28 -0700</bug_when>
    <thetext>Comment on attachment 310251
Patch

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

I think this looks fine, but I&apos;d like to hear from Jer or Eric before landing.

&gt; Source/WebCore/ChangeLog:19
&gt; +        will crash.

Should we be asserting that the calls are being made on the main thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309145</commentid>
    <comment_count>8</comment_count>
      <attachid>310251</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-05-16 09:27:19 -0700</bug_when>
    <thetext>Comment on attachment 310251
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:19
&gt;&gt; +        will crash.
&gt; 
&gt; Should we be asserting that the calls are being made on the main thread?

If it&apos;s possible to destroy the tap simultaneous to using it on separate threads, then this code might reduce NULL-deref crashes, but might still lead to calling into destroyed objects.

&gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:366
&gt; +    if (!m_tap)
&gt; +        return;
&gt; +    

However, it should be possible to eliminate that possibility by doing something like:

RetainPtr&lt;MTAudioProcessingTapRef&gt; tap = m_tap;
if (!tap)
    return;

And then:

&gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:369
&gt;      OSStatus status = MTAudioProcessingTapGetSourceAudio(m_tap.get(), numberOfFrames, bufferListInOut, flagsOut, &amp;rangeOut, &amp;itemCount);

Using tap instead of m_tap in this call.

This is an unfortunate amount of ref-count churn, but the only other solution here would be to add a bunch of locks, which have their own performance problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309150</commentid>
    <comment_count>9</comment_count>
      <attachid>310267</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-05-16 09:47:55 -0700</bug_when>
    <thetext>Created attachment 310267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309151</commentid>
    <comment_count>10</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-05-16 09:50:53 -0700</bug_when>
    <thetext>(In reply to Jer Noble from comment #8)
&gt; Comment on attachment 310251 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=310251&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:19
&gt; &gt;&gt; +        will crash.
&gt; &gt; 
&gt; &gt; Should we be asserting that the calls are being made on the main thread?
&gt; 
&gt; If it&apos;s possible to destroy the tap simultaneous to using it on separate
&gt; threads, then this code might reduce NULL-deref crashes, but might still
&gt; lead to calling into destroyed objects.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:366
&gt; &gt; +    if (!m_tap)
&gt; &gt; +        return;
&gt; &gt; +    
&gt; 
&gt; However, it should be possible to eliminate that possibility by doing
&gt; something like:
&gt; 
&gt; RetainPtr&lt;MTAudioProcessingTapRef&gt; tap = m_tap;

Do we still need locking to make sure this assignment is thread safe?

&gt; if (!tap)
&gt;     return;
&gt; 
&gt; And then:
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:369
&gt; &gt;      OSStatus status = MTAudioProcessingTapGetSourceAudio(m_tap.get(), numberOfFrames, bufferListInOut, flagsOut, &amp;rangeOut, &amp;itemCount);
&gt; 
&gt; Using tap instead of m_tap in this call.
&gt; 
&gt; This is an unfortunate amount of ref-count churn, but the only other
&gt; solution here would be to add a bunch of locks, which have their own
&gt; performance problems.

Thanks for reviewing! I updated the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309318</commentid>
    <comment_count>11</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-05-16 14:54:34 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=310251&amp;action=review

&gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:19
&gt;&gt;&gt;&gt; +        will crash.
&gt;&gt;&gt; 
&gt;&gt;&gt; Should we be asserting that the calls are being made on the main thread?
&gt;&gt; 
&gt;&gt; If it&apos;s possible to destroy the tap simultaneous to using it on separate threads, then this code might reduce NULL-deref crashes, but might still lead to calling into destroyed objects.
&gt; 
&gt; Do we still need locking to make sure this assignment is thread safe?

I would file a follow-up bug to see if we need a blocking mechanism to ensure that the tap isn&apos;t freed while in the middle of a process(). We may need to add something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309494</commentid>
    <comment_count>12</comment_count>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2017-05-17 00:32:41 -0700</bug_when>
    <thetext>(In reply to Jer Noble from comment #11)
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=310251&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/ChangeLog:19
&gt; &gt;&gt;&gt;&gt; +        will crash.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Should we be asserting that the calls are being made on the main thread?
&gt; &gt;&gt; 
&gt; &gt;&gt; If it&apos;s possible to destroy the tap simultaneous to using it on separate threads, then this code might reduce NULL-deref crashes, but might still lead to calling into destroyed objects.
&gt; &gt; 
&gt; &gt; Do we still need locking to make sure this assignment is thread safe?
&gt; 
&gt; I would file a follow-up bug to see if we need a blocking mechanism to
&gt; ensure that the tap isn&apos;t freed while in the middle of a process(). We may
&gt; need to add something.

I see that the MTAudioProcessingTapRef is passed in the processCallback() function. What do you think about just passing this on to the process() method, and use it there instead of using m_tap? This parameter will not be null even if the main thread sets m_tap to null, and I assume it is retained by MediaToolbox, so it can be used safely?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309836</commentid>
    <comment_count>13</comment_count>
      <attachid>310267</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-17 14:53:05 -0700</bug_when>
    <thetext>Comment on attachment 310267
Patch

Clearing flags on attachment: 310267

Committed r217005: &lt;http://trac.webkit.org/changeset/217005&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309837</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-17 14:53:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310115</attachid>
            <date>2017-05-15 00:24:31 -0700</date>
            <delta_ts>2017-05-16 02:56:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172101-20170515002439.patch</filename>
            <type>text/plain</type>
            <size>1815</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjg1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3LTA1LTE1ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBDcmFzaCB1bmRlciBXZWJD
b3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2VzcygpLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTAxCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzI3NDQ2NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2FsbGluZyB0aGUgZnVuY3Rpb24gTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRT
b3VyY2VBdWRpbyB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgTVRBdWRpb1Byb2Nlc3Np
bmdUYXBSZWYgcGFyYW1ldGVyIGlzIG51bGwsIHdpbGwgbGVhZCB0byBhIG51bGwgZGVyZWZlcmVu
Y2UuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIEkgYW0gbm90IGFibGUgdG8gcmVwcm9k
dWNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakM6OnByb2Nlc3MpOgorCiAyMDE3LTA1LTE0ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCB3aXRoIG5l
d2VyIFBlcmwgdmVyc2lvbnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDLm1tCShyZXZpc2lvbiAyMTY4NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1OSw3ICszNTksMTAgQEAgdm9pZCBBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQzo6dW5wcmVwYQogdm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qzo6cHJvY2VzcyhDTUl0ZW1Db3VudCBudW1iZXJPZkZyYW1lcywgTVRBdWRpb1Byb2Nlc3NpbmdU
YXBGbGFncyBmbGFncywgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0SW5PdXQsIENNSXRlbUNv
dW50KiBudW1iZXJGcmFtZXNPdXQsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MqIGZsYWdzT3V0
KQogewogICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0KKyAgICAKKyAgICBpZiAoIW1fdGFwKQor
ICAgICAgICByZXR1cm47CisgICAgCiAgICAgQ01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKICAg
ICBDTVRpbWVSYW5nZSByYW5nZU91dDsKICAgICBPU1N0YXR1cyBzdGF0dXMgPSBNVEF1ZGlvUHJv
Y2Vzc2luZ1RhcEdldFNvdXJjZUF1ZGlvKG1fdGFwLmdldCgpLCBudW1iZXJPZkZyYW1lcywgYnVm
ZmVyTGlzdEluT3V0LCBmbGFnc091dCwgJnJhbmdlT3V0LCAmaXRlbUNvdW50KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310250</attachid>
            <date>2017-05-16 02:56:24 -0700</date>
            <delta_ts>2017-05-16 03:03:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172101-20170516025638.patch</filename>
            <type>text/plain</type>
            <size>2725</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjkxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA1LTE2ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBDcmFzaCB1bmRlciBXZWJD
b3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2VzcygpLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTAxCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzI3NDQ2NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2FsbGluZyB0aGUgZnVuY3Rpb24gTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRT
b3VyY2VBdWRpbyB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgTVRBdWRpb1Byb2Nlc3Np
bmdUYXBSZWYgcGFyYW1ldGVyIGlzIG51bGwsIHdpbGwgbGVhZCB0byBhIG51bGwgZGVyZWZlcmVu
Y2UuCisgICAgICAgIFRoaXMgY2FuIGZvciBleGFtcGxlIGhhcHBlbiBpZiBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjYW5jZWxMb2FkKCkKKyAgICAgICAgaXMgY2FsbGVkIG9u
IHRoZSBtYWluIHRocmVhZCB3aGlsZSBNZWRpYVRvb2xib3ggaXMgY2FsbGluZyB0aGUKKyAgICAg
ICAgV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3NDYWxsYmFjayBm
dW5jdGlvbiBvbiBhIHNlY29uZGFyeQorICAgICAgICB0aHJlYWQuIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQoKSB3aWxsIHRoZW4gY2FsbAorICAgICAgICBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6c2V0Q2xpZW50KG51bGxwdHIpLCB3aGljaCB3aWxs
IGNhbGwKKyAgICAgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmRlc3Ryb3lNaXgoKSwg
d2hpY2ggd2lsbCBzZXQgbV90YXAgdG8gbnVsbC4gV2hlbgorICAgICAgICBBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQzo6cHJvY2VzcyBpcyBjYWxsZWQgb24gdGhlIHNlY29uZGFyeSB0aHJlYWQs
IHVzaW5nCisgICAgICAgIHRoZSBtX3RhcCBtZW1iZXIgaW4gdGhlIGNhbGwgdG8gTVRBdWRpb1By
b2Nlc3NpbmdUYXBHZXRTb3VyY2VBdWRpbywgdGhlIHByb2Nlc3MKKyAgICAgICAgd2lsbCBjcmFz
aC4KKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgSSBhbSBub3QgYWJsZSB0byByZXByb2R1
Y2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6aW5pdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDOjpwcm9jZXNzKToKKwogMjAxNy0wNS0xNiAgQW5keSBFc3RlcyAgPGFl
c3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBUZWxsIE5FRmlsdGVyU291cmNlIGFi
b3V0IHRoZSBwcmVzZW50aW5nIGFwcCdzIFBJRApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQkocmV2aXNpb24gMjE2OTEyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNiArMjM3LDcgQEAgdm9pZCBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6Y3JlYXRlTQogCiB2b2lkIEF1ZGlvU291cmNlUHJv
dmlkZXJBVkZPYmpDOjppbml0Q2FsbGJhY2soTVRBdWRpb1Byb2Nlc3NpbmdUYXBSZWYgdGFwLCB2
b2lkKiBjbGllbnRJbmZvLCB2b2lkKiogdGFwU3RvcmFnZU91dCkKIHsKKyAgICBBU1NFUlQodGFw
KTsKICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyogX3RoaXMgPSBzdGF0aWNfY2FzdDxB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQyo+KGNsaWVudEluZm8pOwogICAgIF90aGlzLT5tX3Rh
cCA9IHRhcDsKICAgICBfdGhpcy0+bV90YXBTdG9yYWdlID0gbmV3IFRhcFN0b3JhZ2UoX3RoaXMp
OwpAQCAtMzYwLDYgKzM2MSw5IEBAIHZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnBy
b2Nlc3MKIHsKICAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOwogCisgICAgaWYgKCFtX3RhcCkKKyAg
ICAgICAgcmV0dXJuOworICAgIAogICAgIENNSXRlbUNvdW50IGl0ZW1Db3VudCA9IDA7CiAgICAg
Q01UaW1lUmFuZ2UgcmFuZ2VPdXQ7CiAgICAgT1NTdGF0dXMgc3RhdHVzID0gTVRBdWRpb1Byb2Nl
c3NpbmdUYXBHZXRTb3VyY2VBdWRpbyhtX3RhcC5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMsIGJ1ZmZl
ckxpc3RJbk91dCwgZmxhZ3NPdXQsICZyYW5nZU91dCwgJml0ZW1Db3VudCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310251</attachid>
            <date>2017-05-16 03:03:24 -0700</date>
            <delta_ts>2017-05-16 09:47:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172101-20170516030337.patch</filename>
            <type>text/plain</type>
            <size>2729</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjkxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA1LTE2ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBDcmFzaCB1bmRlciBXZWJD
b3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2VzcygpLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTAxCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzI3NDQ2NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2FsbGluZyB0aGUgZnVuY3Rpb24gTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRT
b3VyY2VBdWRpbyB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgTVRBdWRpb1Byb2Nlc3Np
bmdUYXBSZWYgcGFyYW1ldGVyIGlzIG51bGwsIHdpbGwgbGVhZCB0byBhIG51bGwgZGVyZWZlcmVu
Y2UuCisgICAgICAgIFRoaXMgY2FuIGZvciBleGFtcGxlIGhhcHBlbiBpZiBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjYW5jZWxMb2FkKCkKKyAgICAgICAgaXMgY2FsbGVkIG9u
IHRoZSBtYWluIHRocmVhZCB3aGlsZSBNZWRpYVRvb2xib3ggaXMgY2FsbGluZyB0aGUKKyAgICAg
ICAgV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3NDYWxsYmFjayBm
dW5jdGlvbiBvbiBhIHNlY29uZGFyeQorICAgICAgICB0aHJlYWQuIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQoKSB3aWxsIHRoZW4gY2FsbAorICAgICAgICBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6c2V0UGxheWVySXRlbShudWxscHRyKSwgd2hpY2gg
d2lsbCBjYWxsCisgICAgICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpkZXN0cm95TWl4
KCksIHdoaWNoIHdpbGwgc2V0IG1fdGFwIHRvIG51bGwuIFdoZW4KKyAgICAgICAgQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3MgaXMgY2FsbGVkIG9uIHRoZSBzZWNvbmRhcnkgdGhy
ZWFkLCB1c2luZworICAgICAgICB0aGUgbV90YXAgbWVtYmVyIGluIHRoZSBjYWxsIHRvIE1UQXVk
aW9Qcm9jZXNzaW5nVGFwR2V0U291cmNlQXVkaW8sIHRoZSBwcm9jZXNzCisgICAgICAgIHdpbGwg
Y3Jhc2guCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIEkgYW0gbm90IGFibGUgdG8gcmVw
cm9kdWNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM6OmluaXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2Vzcyk6CisKIDIwMTctMDUtMTYgIEFuZHkgRXN0ZXMg
IDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gVGVsbCBORUZpbHRlclNvdXJj
ZSBhYm91dCB0aGUgcHJlc2VudGluZyBhcHAncyBQSUQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0JKHJldmlzaW9uIDIxNjkxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM3LDYgKzIzNyw3IEBAIHZv
aWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNyZWF0ZU0KIAogdm9pZCBBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQzo6aW5pdENhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRh
cCwgdm9pZCogY2xpZW50SW5mbywgdm9pZCoqIHRhcFN0b3JhZ2VPdXQpCiB7CisgICAgQVNTRVJU
KHRhcCk7CiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90aGlzID0gc3RhdGljX2Nh
c3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihjbGllbnRJbmZvKTsKICAgICBfdGhpcy0+
bV90YXAgPSB0YXA7CiAgICAgX3RoaXMtPm1fdGFwU3RvcmFnZSA9IG5ldyBUYXBTdG9yYWdlKF90
aGlzKTsKQEAgLTM2MCw2ICszNjEsOSBAQCB2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpD
Ojpwcm9jZXNzCiB7CiAgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKIAorICAgIGlmICghbV90YXAp
CisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQgPSAwOwog
ICAgIENNVGltZVJhbmdlIHJhbmdlT3V0OwogICAgIE9TU3RhdHVzIHN0YXR1cyA9IE1UQXVkaW9Q
cm9jZXNzaW5nVGFwR2V0U291cmNlQXVkaW8obV90YXAuZ2V0KCksIG51bWJlck9mRnJhbWVzLCBi
dWZmZXJMaXN0SW5PdXQsIGZsYWdzT3V0LCAmcmFuZ2VPdXQsICZpdGVtQ291bnQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310267</attachid>
            <date>2017-05-16 09:47:55 -0700</date>
            <delta_ts>2017-05-17 14:53:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172101-20170516094809.patch</filename>
            <type>text/plain</type>
            <size>3181</size>
            <attacher name="Per Arne Vollan">pvollan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjkxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE3LTA1LTE2ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBDcmFzaCB1bmRlciBXZWJD
b3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2VzcygpLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTAxCisgICAgICAgIHJkYXI6
Ly9wcm9ibGVtLzI3NDQ2NTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2FsbGluZyB0aGUgZnVuY3Rpb24gTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRT
b3VyY2VBdWRpbyB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgTVRBdWRpb1Byb2Nlc3Np
bmdUYXBSZWYgcGFyYW1ldGVyIGlzIG51bGwsIHdpbGwgbGVhZCB0byBhIG51bGwgZGVyZWZlcmVu
Y2UuCisgICAgICAgIFRoaXMgY2FuIGZvciBleGFtcGxlIGhhcHBlbiBpZiBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjYW5jZWxMb2FkKCkKKyAgICAgICAgaXMgY2FsbGVkIG9u
IHRoZSBtYWluIHRocmVhZCB3aGlsZSBNZWRpYVRvb2xib3ggaXMgY2FsbGluZyB0aGUKKyAgICAg
ICAgV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3NDYWxsYmFjayBm
dW5jdGlvbiBvbiBhIHNlY29uZGFyeQorICAgICAgICB0aHJlYWQuIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbk9iakM6OmNhbmNlbExvYWQoKSB3aWxsIHRoZW4gY2FsbAorICAgICAgICBB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6c2V0UGxheWVySXRlbShudWxscHRyKSwgd2hpY2gg
d2lsbCBjYWxsCisgICAgICAgIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjpkZXN0cm95TWl4
KCksIHdoaWNoIHdpbGwgc2V0IG1fdGFwIHRvIG51bGwuIFdoZW4KKyAgICAgICAgQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3MgaXMgY2FsbGVkIG9uIHRoZSBzZWNvbmRhcnkgdGhy
ZWFkLCB1c2luZworICAgICAgICB0aGUgbV90YXAgbWVtYmVyIGluIHRoZSBjYWxsIHRvIE1UQXVk
aW9Qcm9jZXNzaW5nVGFwR2V0U291cmNlQXVkaW8sIHRoZSBwcm9jZXNzCisgICAgICAgIHdpbGwg
Y3Jhc2guCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIEkgYW0gbm90IGFibGUgdG8gcmVw
cm9kdWNlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0F1ZGlv
U291cmNlUHJvdmlkZXJBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQ
cm92aWRlckFWRk9iakM6OmluaXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQzo6cHJvY2Vzcyk6CisKIDIwMTctMDUtMTYgIEFuZHkgRXN0ZXMg
IDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gVGVsbCBORUZpbHRlclNvdXJj
ZSBhYm91dCB0aGUgcHJlc2VudGluZyBhcHAncyBQSUQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0JKHJldmlzaW9uIDIxNjkxMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9BdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM3LDYgKzIzNyw3IEBAIHZv
aWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmNyZWF0ZU0KIAogdm9pZCBBdWRpb1NvdXJj
ZVByb3ZpZGVyQVZGT2JqQzo6aW5pdENhbGxiYWNrKE1UQXVkaW9Qcm9jZXNzaW5nVGFwUmVmIHRh
cCwgdm9pZCogY2xpZW50SW5mbywgdm9pZCoqIHRhcFN0b3JhZ2VPdXQpCiB7CisgICAgQVNTRVJU
KHRhcCk7CiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqIF90aGlzID0gc3RhdGljX2Nh
c3Q8QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMqPihjbGllbnRJbmZvKTsKICAgICBfdGhpcy0+
bV90YXAgPSB0YXA7CiAgICAgX3RoaXMtPm1fdGFwU3RvcmFnZSA9IG5ldyBUYXBTdG9yYWdlKF90
aGlzKTsKQEAgLTM1OSwxMCArMzYwLDE0IEBAIHZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM6OnVucHJlcGEKIHZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnByb2Nlc3MoQ01J
dGVtQ291bnQgbnVtYmVyT2ZGcmFtZXMsIE1UQXVkaW9Qcm9jZXNzaW5nVGFwRmxhZ3MgZmxhZ3Ms
IEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdEluT3V0LCBDTUl0ZW1Db3VudCogbnVtYmVyRnJh
bWVzT3V0LCBNVEF1ZGlvUHJvY2Vzc2luZ1RhcEZsYWdzKiBmbGFnc091dCkKIHsKICAgICBVTlVT
RURfUEFSQU0oZmxhZ3MpOworICAgIAorICAgIFJldGFpblB0cjxNVEF1ZGlvUHJvY2Vzc2luZ1Rh
cFJlZj4gdGFwID0gbV90YXA7CisgICAgaWYgKCF0YXApCisgICAgICAgIHJldHVybjsKIAogICAg
IENNSXRlbUNvdW50IGl0ZW1Db3VudCA9IDA7CiAgICAgQ01UaW1lUmFuZ2UgcmFuZ2VPdXQ7Ci0g
ICAgT1NTdGF0dXMgc3RhdHVzID0gTVRBdWRpb1Byb2Nlc3NpbmdUYXBHZXRTb3VyY2VBdWRpbyht
X3RhcC5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMsIGJ1ZmZlckxpc3RJbk91dCwgZmxhZ3NPdXQsICZy
YW5nZU91dCwgJml0ZW1Db3VudCk7CisgICAgT1NTdGF0dXMgc3RhdHVzID0gTVRBdWRpb1Byb2Nl
c3NpbmdUYXBHZXRTb3VyY2VBdWRpbyh0YXAuZ2V0KCksIG51bWJlck9mRnJhbWVzLCBidWZmZXJM
aXN0SW5PdXQsIGZsYWdzT3V0LCAmcmFuZ2VPdXQsICZpdGVtQ291bnQpOwogICAgIGlmIChzdGF0
dXMgIT0gbm9FcnIgfHwgIWl0ZW1Db3VudCkKICAgICAgICAgcmV0dXJuOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>