<?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>154538</bug_id>
          
          <creation_ts>2016-02-22 08:34:26 -0800</creation_ts>
          <short_desc>Web Audio becomes distorted after sample rate changes</short_desc>
          <delta_ts>2019-03-02 16:28:22 -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>Web Audio</component>
          <version>Safari 9</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>iOS 9.2</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>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ashley Gullen">ashley</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>ae</cc>
    
    <cc>barthdo93</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jonlee</cc>
    
    <cc>nchase</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1167021</commentid>
    <comment_count>0</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2016-02-22 08:34:26 -0800</bug_when>
    <thetext>Repro URL: https://www.scirra.com/labs/bugs/iosdistort/

Steps to reproduce:
1. Visit the URL.
2. Observe the displayed audioContext.sampleRate. It should be 44100 Hz.
3. Press the button. A sound should play, and a regular sound starts playing.
4. Kill Safari (double press-and-hold home button, swipe away Safari from apps list)
5. Open Safari again
6. Safari restores the previous page
7. Press the button again
8. Observe sample rate and listen to audio quality

Observed result:
The audio quality is severely distorted and sounds terrible. The sample rate has also changed to 48000 Hz, which may be related.

Expected result:
Audio quality same as on first listen, and sample rate should probably stay at 44100 Hz.

This appears to be a device-specific issue. This does not reproduce on an iPad Air 2, but it does reproduce on an iPhone 4S, all running iOS 9.2.1.

This is causing significant problems for all Construct 2 content on iOS. See here: https://www.scirra.com/forum/ios-sound-problems-since-ios-9-2_t167412
According to user reports, it only happens on iPhones and not iPads, the webview is affected, and the problem is new as of iOS 9.2.

After the audio sounds distorted, closing the Safari tab and reopening it seems to restore the audio quality and the 44100 sample rate. However note this is not an option with Cordova apps. We have also found what seems to be a workaround we can apply from our engine: if on startup we create an AudioContext, immediately call close() on it, throw it away, then create a new AudioContext which we use for the rest of the app, it appears to work correctly. We will shortly be shipping this workaround for iOS devices, but this should be fixed as it affects all existing deployed web content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167067</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-02-22 10:14:40 -0800</bug_when>
    <thetext>&lt;rdar://problem/24771292&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167412</commentid>
    <comment_count>2</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-23 09:11:04 -0800</bug_when>
    <thetext>Ashley,

WebKit uses AVAudioSession to determine the hardware sample rate currently supported by the system. See &lt;https://developer.apple.com/library/ios/qa/qa1631/_index.html&gt;:

&quot;Important: Different hardware can have different capabilities. For example, the internal speaker on the iPhone 6S models only support a sample rate of 48kHz while previous iPhone models supported a collection of sample rates. If you assume current values will always be your preferred values and for example fill our your client format using the hardware format expecting 44.1kHz when the actual sample rate is 48kHz, your application can suffer problems like audio distortion with the further possibility of other failures.&quot;

So even if we were able to fix this problem (which we may not, or at least, not at the WebKit level), you will still have to deal with a 48kHz sample rate if your users are playing to an iPhone 6S internal speaker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167416</commentid>
    <comment_count>3</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-23 09:19:36 -0800</bug_when>
    <thetext>That said, I do wonder if the audio hardware&apos;s sample rate is changing out from under us. The distortion might be explained if we believe at AudioContext creation time that the sample rate is 48k, and at render time it switches to 44.1k.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167583</commentid>
    <comment_count>4</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2016-02-23 16:24:44 -0800</bug_when>
    <thetext>Hi Jer, thanks for looking in to this. However I&apos;m a little confused by your response. When you say &quot;you will still have to deal with a 48kHz sample rate&quot;, are you addressing that to web developers? As far as I am aware, there is no other platform that requires us to have to care about the output sample rate, since in general any content at a different sample rate is just automatically resampled to the output sample rate if necessary. In fact the Web Audio API spec states regarding decodeAudioData: &quot;Take the result, representing the decoded linear PCM audio data, and resample it to the sample-rate of the AudioContext if it is different from the sample-rate of audioData.&quot; So this appears to be an explicit requirement that Safari&apos;s implementation should be complying with.

If we have to do anything differently to handle this, firstly I think iOS would be unique in that regard, which creates a web compatibility issue. Secondly I am not even sure what we would do differently in terms of the Web Audio API? Are we supposed to throw away all our buffers and re-decode them or something? The problem happens on startup, so it&apos;s a mystery to me what we would need to do differently and under what circumstances we ought to do it.

If I were to hazard a guess as to what&apos;s really going on, I&apos;d guess Safari mistakes the output sample rate for 48 KHz when it&apos;s really 44.1 KHz, and accordingly decodeAudioData is resampled to the wrong rate, or something like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167825</commentid>
    <comment_count>5</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-24 10:36:06 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Hi Jer, thanks for looking in to this. However I&apos;m a little confused by your
&gt; response. When you say &quot;you will still have to deal with a 48kHz sample
&gt; rate&quot;, are you addressing that to web developers? As far as I am aware,
&gt; there is no other platform that requires us to have to care about the output
&gt; sample rate, since in general any content at a different sample rate is just
&gt; automatically resampled to the output sample rate if necessary. In fact the
&gt; Web Audio API spec states regarding decodeAudioData: &quot;Take the result,
&gt; representing the decoded linear PCM audio data, and resample it to the
&gt; sample-rate of the AudioContext if it is different from the sample-rate of
&gt; audioData.&quot; So this appears to be an explicit requirement that Safari&apos;s
&gt; implementation should be complying with.

All I&apos;m saying is that Web Audio developers can&apos;t assume that the output sample rate will always be 44.1kHz.  If they are manually creating and filling buffers assuming that the sample rate is 44.1kHz (when instead it&apos;s 48kHz), they could playback artifacts.  Say, for example, if they were implementing a grain-based player; they could conceivably have gaps between the grains if their sample-rate assumptions were invalid.

&gt; If we have to do anything differently to handle this, firstly I think iOS
&gt; would be unique in that regard, which creates a web compatibility issue.
&gt; Secondly I am not even sure what we would do differently in terms of the Web
&gt; Audio API? Are we supposed to throw away all our buffers and re-decode them
&gt; or something? The problem happens on startup, so it&apos;s a mystery to me what
&gt; we would need to do differently and under what circumstances we ought to do
&gt; it.

I&apos;m pointing out a situation where the hardware audio sample rate could change dynamically within the lifetime of an AudioContext. A iPhone user could unplug their headphones, the active route would change to the internal speaker, and the audio hardware would switch up from 44.1kHz to 48kHz.  There is API in the spec to signal such a rate change, so WebKit would have to resample the Web Audio output in that case.

&gt; If I were to hazard a guess as to what&apos;s really going on, I&apos;d guess Safari
&gt; mistakes the output sample rate for 48 KHz when it&apos;s really 44.1 KHz, and
&gt; accordingly decodeAudioData is resampled to the wrong rate, or something
&gt; like that.

It very well may be, though I think it&apos;s more likely that, at the time the AudioContext was created, the hardware sample rate really was 48k, but that the hardware sample rate changed sometime after playback began.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167830</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-24 10:46:54 -0800</bug_when>
    <thetext>I ran your test case against an iPhone 6S running iOS 9.2, and observed the following behavior:

Playing to the internal speaker.
1. Load page, hit OK.
2. Sample rate is 48kHz, no distortion.
3. Plug in headphones.
4. Distortion observed over headphones.
5. Unplugged headphones (restoring playback to the internal speaker).
6. Distortion disappeared.

However:

Playing over headphones.
1. Load page, hit OK.
2. Sample rate is 44kHz, no distortion.
3. Unplug headphones.
4. Distortion observed over internal speaker.
5. Plug in headphones.
6. Distortion disappeared.

So this appears to validate the theory that the audio hardware sample rate is changing dynamically between 44.1kHz and 48kHz and causing the distortion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167835</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-24 10:57:40 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; There is API in the spec to signal such a rate change

(Sorry, this should read &quot;there is _not_ API in the spec to signal such a rate change&quot;.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167852</commentid>
    <comment_count>8</comment_count>
    <who name="Ashley Gullen">ashley</who>
    <bug_when>2016-02-24 11:36:45 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; All I&apos;m saying is that Web Audio developers can&apos;t assume that the output
&gt; sample rate will always be 44.1kHz.  If they are manually creating and
&gt; filling buffers assuming that the sample rate is 44.1kHz (when instead it&apos;s
&gt; 48kHz), they could playback artifacts.
I should point out Web Audio developers make no such assumptions - we don&apos;t choose the sample rate of decoded buffers, the AudioContext does. I suppose if anything, the spec itself is making the assumption the AudioContext keeps running at the same sample rate.

I think the spec requires that anything played at a different sample rate to the AudioContext be resampled, since you can call createBuffer() to create a buffer at a given sample rate (e.g. 22050) and play it, and it presumably is resampled to the AudioContext rate. If the AudioContext sample rate changes after creation, shouldn&apos;t this kick in for existing buffers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167869</commentid>
    <comment_count>9</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-24 12:20:20 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #5)
&gt; &gt; All I&apos;m saying is that Web Audio developers can&apos;t assume that the output
&gt; &gt; sample rate will always be 44.1kHz.  If they are manually creating and
&gt; &gt; filling buffers assuming that the sample rate is 44.1kHz (when instead it&apos;s
&gt; &gt; 48kHz), they could playback artifacts.
&gt; I should point out Web Audio developers make no such assumptions - we don&apos;t
&gt; choose the sample rate of decoded buffers, the AudioContext does. I suppose
&gt; if anything, the spec itself is making the assumption the AudioContext keeps
&gt; running at the same sample rate.

For decoded buffers yes. But some Web Audio authors do crazy stuff with custom decoders and generators; for them, they must pay attention to the output sample rate.

&gt; I think the spec requires that anything played at a different sample rate to
&gt; the AudioContext be resampled, since you can call createBuffer() to create a
&gt; buffer at a given sample rate (e.g. 22050) and play it, and it presumably is
&gt; resampled to the AudioContext rate. If the AudioContext sample rate changes
&gt; after creation, shouldn&apos;t this kick in for existing buffers?

Yes, it should, and now I need to figure out why it&apos;s not. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167961</commentid>
    <comment_count>10</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-24 15:54:24 -0800</bug_when>
    <thetext>Aha! The sample rate change was a red herring. CoreAudio&apos;s output audio node includes a format converter that should handle resampling the output node&apos;s input from one sample rate to another. The real reason for the crazy distortion is because, when the output route changes from the internal speaker to headphones, not only does the sample rate change, but the output channel count changes as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168330</commentid>
    <comment_count>11</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-25 17:49:09 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Aha! The sample rate change was a red herring. 

And that itself was a red herring. Turns out, the output unit will request fewer samples when moving from a higher sample rate to a lower one, and the Web Audio engine chokes in that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168331</commentid>
    <comment_count>12</comment_count>
      <attachid>272270</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-25 17:50:37 -0800</bug_when>
    <thetext>Created attachment 272270
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168334</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-25 17:52:36 -0800</bug_when>
    <thetext>Attachment 272270 did not pass style-queue:


ERROR: Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:241:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168355</commentid>
    <comment_count>14</comment_count>
      <attachid>272280</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-02-25 19:32:29 -0800</bug_when>
    <thetext>Created attachment 272280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172552</commentid>
    <comment_count>15</comment_count>
      <attachid>272280</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-09 09:10:24 -0800</bug_when>
    <thetext>Comment on attachment 272280
Patch

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

Why no regression test?

&gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:203
&gt; +static void assignAudioBuffersToBus(AudioBuffer* buffers, AudioBus* bus, UInt32 numberOfBuffers, UInt32 numberOfFrames, UInt32 frameOffset, UInt32 framesThisTime)

Bus here should be a reference rather than a pointer.

&gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:208
&gt; +        float* memory = (float*)((char*)buffers[i].mData + byteOffset);

We normally prefer C++ casts to C style.

&gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:228
&gt; +            m_firstSpareFrame = m_lastSpareFrame = 0;

Two separate lines please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172560</commentid>
    <comment_count>16</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-03-09 09:14:39 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 272280 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272280&amp;action=review
&gt; 
&gt; Why no regression test?

Two reasons: 1) we have no way to directly control the platform behavior (of requesting fewer or more samples per callback) and 2) the path we use for Web Audio regression tests does its rendering offline, so doesn&apos;t actually touch this code.

&gt; &gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:203
&gt; &gt; +static void assignAudioBuffersToBus(AudioBuffer* buffers, AudioBus* bus, UInt32 numberOfBuffers, UInt32 numberOfFrames, UInt32 frameOffset, UInt32 framesThisTime)
&gt; 
&gt; Bus here should be a reference rather than a pointer.

Ok.

&gt; &gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:208
&gt; &gt; +        float* memory = (float*)((char*)buffers[i].mData + byteOffset);
&gt; 
&gt; We normally prefer C++ casts to C style.

Ok.

&gt; &gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:228
&gt; &gt; +            m_firstSpareFrame = m_lastSpareFrame = 0;
&gt; 
&gt; Two separate lines please.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173808</commentid>
    <comment_count>17</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-03-11 11:35:36 -0800</bug_when>
    <thetext>Committed r198035 &lt;http://trac.webkit.org/changeset/198035&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189826</commentid>
    <comment_count>18</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2016-05-03 13:27:38 -0700</bug_when>
    <thetext>Same issue?  &lt;http://stackoverflow.com/questions/17892345/webkit-audio-distorts-on-ios-6-iphone-5-first-time-after-power-cycling&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189886</commentid>
    <comment_count>19</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2016-05-03 15:54:16 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Same issue? 
&gt; &lt;http://stackoverflow.com/questions/17892345/webkit-audio-distorts-on-ios-6-
&gt; iphone-5-first-time-after-power-cycling&gt;

Yes, very likely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273672</commentid>
    <comment_count>20</comment_count>
    <who name="">ae</who>
    <bug_when>2017-02-06 12:05:37 -0800</bug_when>
    <thetext>This problem is still occuring in iOS 10.2.1 if there&apos;s an active WebAudio context, and then a &lt;video&gt; element with a video with 48 kHz sampling rate starts playing.

The WebAudio output is either distorted afterwards, or plays too fast (44.1 -&gt; 48).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273692</commentid>
    <comment_count>21</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-02-06 13:22:17 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; This problem is still occuring in iOS 10.2.1 if there&apos;s an active WebAudio
&gt; context, and then a &lt;video&gt; element with a video with 48 kHz sampling rate
&gt; starts playing.
&gt; 
&gt; The WebAudio output is either distorted afterwards, or plays too fast (44.1
&gt; -&gt; 48).

Could you attach or link to a reproduction case? Then I&apos;ll take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273911</commentid>
    <comment_count>22</comment_count>
    <who name="">ae</who>
    <bug_when>2017-02-07 03:14:03 -0800</bug_when>
    <thetext>Sorry this is happening in a hybrid app, so no simple way to make a testcase. But basically it&apos;s really simple:

- Initialize Web Audio API, play a sound from a buffer source
- Create a &lt;video&gt; element via JS with an MPEG4 file that has a 48 kHz audio stream, and play it
- Play the buffer source again. It&apos;s either distorted, plays too fast by 48/44.1, or not at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273912</commentid>
    <comment_count>23</comment_count>
    <who name="">ae</who>
    <bug_when>2017-02-07 03:20:46 -0800</bug_when>
    <thetext>What I can provide is the video file that causes the issue:

http://instinctive.de/prolevel/calibration-tutorial.mp4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274058</commentid>
    <comment_count>24</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2017-02-07 10:41:21 -0800</bug_when>
    <thetext>Jer, or ae@, can we file a new bug to track the issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275067</commentid>
    <comment_count>25</comment_count>
    <who name="">ae</who>
    <bug_when>2017-02-09 15:02:45 -0800</bug_when>
    <thetext>Should I do that, or someone else? By the way, I just noticed that closing the Web Audio context and re-opening it (after playing the &lt;video&gt; element) fixes the issue...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275555</commentid>
    <comment_count>26</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-02-10 15:02:26 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Should I do that, or someone else?

If you are willing, yes, you should do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275780</commentid>
    <comment_count>27</comment_count>
    <who name="">ae</who>
    <bug_when>2017-02-11 03:54:49 -0800</bug_when>
    <thetext>I&apos;ve constructed a minimal testcase for the video problem and submitted a new report:

https://bugs.webkit.org/show_bug.cgi?id=168165</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272270</attachid>
            <date>2016-02-25 17:50:37 -0800</date>
            <delta_ts>2016-02-25 19:32:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154538-20160225175020.patch</filename>
            <type>text/plain</type>
            <size>8064</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2OTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE4YjNlNmU1MGI3MDYw
OTIyYzg2MDcyNTI2NjJjMjBiNmU4MjY4OS4uYjk5ZWY4ZDIyMmViODlmZWM0NGU3MzhiZDkwYThm
YWRiYjk3NGE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE2LTAyLTI1ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBBdWRpbyBiZWNvbWVz
IGRpc3RvcnRlZCBhZnRlciBzYW1wbGUgcmF0ZSBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ1MzgKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzI0NzcxMjkyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdoZW4gdGhlIHVuZGVybHlpbmcgYXVkaW8gaGFyZHdhcmUgc2FtcGxlIHJhdGUgY2hh
bmdlcywgdGhlIEF1ZGlvVW5pdCByZW5kZXIgY2FsbGJhY2sgd2lsbCBiZWdpbiBhc2tpbmcKKyAg
ICAgICAgZm9yIGZld2VyIG9yIG1vcmUgZnJhbWVzLiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgc2Ft
cGxlIHJhdGUgZ29lcyBmcm9tIDQ0LjFrSHogdG8gNDhrSHosIGl0IHdpbGwgYXNrIGZvcgorICAg
ICAgICAxMTggc2FtcGxlcyBpbnN0ZWFkIG9mIDEyOC4gKEFuZCB2aWNlLXZlcnNhLCAxNDAgc2Ft
cGxlcyBpbnN0ZWFkIG9mIDEyOC4pIEJ1dCB0aGUgV2ViIEF1ZGlvIGVuZ2luZSBjYW4gb25seQor
ICAgICAgICByZWFsbHkgaGFuZGxlIHJlcXVlc3RzIGluIG11bHRpcGxlcyBvZiAxMjggc2FtcGxl
cy4gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIHJlcXVlc3RzIGZvciA8IDEyOCBzYW1wbGVz
LAorICAgICAgICBhY3R1YWxseSByZW5kZXIgMTI4LCBidXQgc2F2ZSBvZmYgdGhlIHVucmVxdWVz
dGVkIHNhbXBsZXMgaW4gYSBzZXBhcmF0ZSBidXMuIFRoZW4gZmlsbCB0aGF0IGJ1cyBkdXJpbmcg
dGhlCisgICAgICAgIG5leHQgcmVxdWVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpjb3B5RnJvbVJhbmdlKTog
QWRkZWQgdXRpbGl0eSBtZXRob2QuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uSU9TOjpBdWRpb0Rlc3RpbmF0aW9u
SU9TKTogQ3JlYXRlIGEgInNwYXJlIiBidXMuCisgICAgICAgIChXZWJDb3JlOjphc3NpZ25BdWRp
b0J1ZmZlcnNUb0J1cyk6IE1vdmVkIGZyb20gaW5zaWRlIHJlbmRlci4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvRGVzdGluYXRpb25JT1M6OnJlbmRlcik6IFNhdmUgb2ZmIGV4dHJhIHNhbXBsZXMg
dG8gdGhlICJzcGFyZSIgYnVzLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rl
c3RpbmF0aW9uSU9TLmg6CisKIDIwMTYtMDItMTkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRvcHQgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ6OnNob3VsZENh
Y2hlUmVzcG9uc2UoKSBpbiBNZWRpYVJlc291cmNlTG9hZGVyIGFuZCBXZWJDb3JlTlNVUkxTZXNz
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKaW5kZXggZmFh
OTYxNzBhOGM0MTBkZjhmMmRjOGU4Y2FmNDgzNTQ3NjBmM2I0Yy4uZWMwMmFjNDg3NzFmODYwMzg0
NTEyZTZlNzgyZmMyOTQwYjlhZDZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9CdXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvQnVzLmNwcApAQCAtMjEzLDYgKzIxMywzMyBAQCB2b2lkIEF1ZGlvQnVzOjpzY2FsZShm
bG9hdCBzY2FsZSkKICAgICAgICAgY2hhbm5lbChpKS0+c2NhbGUoc2NhbGUpOwogfQogCit2b2lk
IEF1ZGlvQnVzOjpjb3B5RnJvbVJhbmdlKGNvbnN0IEF1ZGlvQnVzJiBzb3VyY2VCdXMsIHVuc2ln
bmVkIHN0YXJ0RnJhbWUsIHVuc2lnbmVkIGVuZEZyYW1lKQoreworICAgIGlmICghdG9wb2xvZ3lN
YXRjaGVzKHNvdXJjZUJ1cykpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBudW1iZXJP
ZlNvdXJjZUZyYW1lcyA9IHNvdXJjZUJ1cy5sZW5ndGgoKTsKKyAgICBib29sIGlzUmFuZ2VTYWZl
ID0gc3RhcnRGcmFtZSA8IGVuZEZyYW1lICYmIGVuZEZyYW1lIDw9IG51bWJlck9mU291cmNlRnJh
bWVzOworICAgIEFTU0VSVChpc1JhbmdlU2FmZSk7CisgICAgaWYgKCFpc1JhbmdlU2FmZSkgewor
ICAgICAgICB6ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzID0gdGhpcy0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIEFTU0VSVChu
dW1iZXJPZkNoYW5uZWxzIDw9IE1heEJ1c0NoYW5uZWxzKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFu
bmVscyA+IE1heEJ1c0NoYW5uZWxzKSB7CisgICAgICAgIHplcm8oKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxz
OyArK2kpCisgICAgICAgIGNoYW5uZWwoaSktPmNvcHlGcm9tUmFuZ2Uoc291cmNlQnVzLmNoYW5u
ZWwoaSksIHN0YXJ0RnJhbWUsIGVuZEZyYW1lKTsKK30KKwogdm9pZCBBdWRpb0J1czo6Y29weUZy
b20oY29uc3QgQXVkaW9CdXMmIHNvdXJjZUJ1cywgQ2hhbm5lbEludGVycHJldGF0aW9uIGNoYW5u
ZWxJbnRlcnByZXRhdGlvbikKIHsKICAgICBpZiAoJnNvdXJjZUJ1cyA9PSB0aGlzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgKaW5kZXggOGQ2ODM5ZjAxMjExMGRiZmQ3
YzBmNTAxYjdkMDQzM2U0MzQwNjQwZS4uNGY5YjVmNTVjYzg0M2Y0YWI4N2RlMzU1NDM5Zjg2ZDk3
ODZkMTZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9C
dXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oCkBAIC0x
MjIsNiArMTIyLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKSB7IG1faXNGaXJzdFRpbWUg
PSB0cnVlOyB9IC8vIGZvciBkZS16aXBwZXJpbmcKIAogICAgIC8vIENvcGllcyB0aGUgc2FtcGxl
cyBmcm9tIHRoZSBzb3VyY2UgYnVzIHRvIHRoaXMgb25lLgorICAgIHZvaWQgY29weUZyb21SYW5n
ZShjb25zdCBBdWRpb0J1cyYgc291cmNlQnVzLCB1bnNpZ25lZCBzdGFydEZyYW1lLCB1bnNpZ25l
ZCBlbmRGcmFtZSk7CisKKyAgICAvLyBDb3BpZXMgdGhlIHNhbXBsZXMgZnJvbSB0aGUgc291cmNl
IGJ1cyB0byB0aGlzIG9uZS4KICAgICAvLyBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgcGVyLWNoYW5u
ZWwgY29weSBpZiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIG1hdGNoLCBvdGhlcndpc2UgYW4gdXAt
bWl4IG9yIGRvd24tbWl4IGlzIGRvbmUuCiAgICAgdm9pZCBjb3B5RnJvbShjb25zdCBBdWRpb0J1
cyYgc291cmNlQnVzLCBDaGFubmVsSW50ZXJwcmV0YXRpb24gPSBTcGVha2Vycyk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9u
SU9TLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0
aW9uSU9TLmNwcAppbmRleCBhZGRiNTI0ZjAxN2ExN2VhOTEyMTEyMzU5OTMyMjBkOGM5YjE0MTlj
Li45NmUxYmI2M2VkMmJmN2U2ZjAyNzc1NGMyNjNkNjJjNGQ0NjNiN2I1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25J
T1MuY3BwCkBAIC0xMDEsNiArMTAxLDcgQEAgQXVkaW9EZXN0aW5hdGlvbklPUzo6QXVkaW9EZXN0
aW5hdGlvbklPUyhBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBkb3VibGUgc2FtcGwKICAgICA6
IG1fb3V0cHV0VW5pdCgwKQogICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKICAgICAsIG1fcmVu
ZGVyQnVzKEF1ZGlvQnVzOjpjcmVhdGUoMiwga1JlbmRlckJ1ZmZlclNpemUsIGZhbHNlKSkKKyAg
ICAsIG1fc3BhcmVCdXMoQXVkaW9CdXM6OmNyZWF0ZSgyLCBrUmVuZGVyQnVmZmVyU2l6ZSwgdHJ1
ZSkpCiAgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKICAgICAsIG1faXNQbGF5aW5nKGZh
bHNlKQogewpAQCAtMTk5LDE5ICsyMDAsNDYgQEAgdm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpz
dG9wKCkKICAgICAgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsKIH0KIAorc3RhdGljIHZvaWQgYXNz
aWduQXVkaW9CdWZmZXJzVG9CdXMoQXVkaW9CdWZmZXIqIGJ1ZmZlcnMsIEF1ZGlvQnVzKiBidXMs
IFVJbnQzMiBudW1iZXJPZkJ1ZmZlcnMsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgVUludDMyIGZy
YW1lT2Zmc2V0LCBVSW50MzIgZnJhbWVzVGhpc1RpbWUpCit7CisgICAgZm9yIChVSW50MzIgaSA9
IDA7IGkgPCBudW1iZXJPZkJ1ZmZlcnM7ICsraSkgeworICAgICAgICBVSW50MzIgYnl0ZXNQZXJG
cmFtZSA9IGJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIG51bWJlck9mRnJhbWVzOworICAgICAg
ICBVSW50MzIgYnl0ZU9mZnNldCA9IGZyYW1lT2Zmc2V0ICogYnl0ZXNQZXJGcmFtZTsKKyAgICAg
ICAgZmxvYXQqIG1lbW9yeSA9IChmbG9hdCopKChjaGFyKilidWZmZXJzW2ldLm1EYXRhICsgYnl0
ZU9mZnNldCk7CisgICAgICAgIGJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCBtZW1vcnksIGZyYW1l
c1RoaXNUaW1lKTsKKyAgICB9Cit9CisKIC8vIFB1bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQg
cmVuZGVyZWQgYXVkaW8gc3RyZWFtLgogT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbklPUzo6cmVu
ZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCiB7CiAg
ICAgQXVkaW9CdWZmZXIqIGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZmZXJzOwotICAgIGZvciAoVUlu
dDMyIGZyYW1lT2Zmc2V0ID0gMDsgZnJhbWVPZmZzZXQgKyBrUmVuZGVyQnVmZmVyU2l6ZSA8PSBu
dW1iZXJPZkZyYW1lczsgZnJhbWVPZmZzZXQgKz0ga1JlbmRlckJ1ZmZlclNpemUpIHsKLSAgICAg
ICAgVUludDMyIHJlbWFpbmluZ0ZyYW1lcyA9IHN0ZDo6bWluPFVJbnQzMj4oa1JlbmRlckJ1ZmZl
clNpemUsIG51bWJlck9mRnJhbWVzIC0gZnJhbWVPZmZzZXQpOwotICAgICAgICBmb3IgKFVJbnQz
MiBpID0gMDsgaSA8IGlvRGF0YS0+bU51bWJlckJ1ZmZlcnM7ICsraSkgewotICAgICAgICAgICAg
VUludDMyIGJ5dGVzUGVyRnJhbWUgPSBidWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyBudW1iZXJP
ZkZyYW1lczsKLSAgICAgICAgICAgIFVJbnQzMiBieXRlT2Zmc2V0ID0gZnJhbWVPZmZzZXQgKiBi
eXRlc1BlckZyYW1lOwotICAgICAgICAgICAgZmxvYXQqIG1lbW9yeSA9IChmbG9hdCopKChjaGFy
KilidWZmZXJzW2ldLm1EYXRhICsgYnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBtX3JlbmRlckJ1
cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCBtZW1vcnksIHJlbWFpbmluZ0ZyYW1lcyk7CisgICAgVUlu
dDMyIG51bWJlck9mQnVmZmVycyA9IGlvRGF0YS0+bU51bWJlckJ1ZmZlcnM7CisgICAgVUludDMy
IGZyYW1lc1JlbWFpbmluZyA9IG51bWJlck9mRnJhbWVzOworICAgIFVJbnQzMiBmcmFtZU9mZnNl
dCA9IDA7CisgICAgd2hpbGUgKGZyYW1lc1JlbWFpbmluZyA+IDApIHsKKyAgICAgICAgaWYgKG1f
Zmlyc3RTcGFyZUZyYW1lICYmIG1fbGFzdFNwYXJlRnJhbWUpIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX2ZpcnN0U3BhcmVGcmFtZSA8IG1fbGFzdFNwYXJlRnJhbWUpOworICAgICAgICAgICAgVUlu
dDMyIGZyYW1lc1RoaXNUaW1lID0gbV9sYXN0U3BhcmVGcmFtZSAtIG1fZmlyc3RTcGFyZUZyYW1l
OworICAgICAgICAgICAgYXNzaWduQXVkaW9CdWZmZXJzVG9CdXMoYnVmZmVycywgbV9yZW5kZXJC
dXMuZ2V0KCksIG51bWJlck9mQnVmZmVycywgbnVtYmVyT2ZGcmFtZXMsIGZyYW1lT2Zmc2V0LCBm
cmFtZXNUaGlzVGltZSk7CisgICAgICAgICAgICBtX3JlbmRlckJ1cy0+Y29weUZyb21SYW5nZSgq
bV9zcGFyZUJ1cywgbV9maXJzdFNwYXJlRnJhbWUsIG1fbGFzdFNwYXJlRnJhbWUpOworICAgICAg
ICAgICAgZnJhbWVPZmZzZXQgKz0gZnJhbWVzVGhpc1RpbWU7CisgICAgICAgICAgICBmcmFtZXNS
ZW1haW5pbmcgLT0gZnJhbWVzVGhpc1RpbWU7CisgICAgICAgICAgICBtX2ZpcnN0U3BhcmVGcmFt
ZSA9IG1fbGFzdFNwYXJlRnJhbWUgPSAwOwogICAgICAgICB9Ci0gICAgICAgIG1fY2FsbGJhY2su
cmVuZGVyKDAsIG1fcmVuZGVyQnVzLmdldCgpLCByZW1haW5pbmdGcmFtZXMpOworCisgICAgICAg
IFVJbnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQzMj4oa1JlbmRlckJ1ZmZlclNp
emUsIGZyYW1lc1JlbWFpbmluZyk7CisgICAgICAgIGFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKGJ1
ZmZlcnMsIG1fcmVuZGVyQnVzLmdldCgpLCBudW1iZXJPZkJ1ZmZlcnMsIG51bWJlck9mRnJhbWVz
LCBmcmFtZU9mZnNldCwgZnJhbWVzVGhpc1RpbWUpOworCisgICAgICAgIGlmIChmcmFtZXNUaGlz
VGltZSA8IGtSZW5kZXJCdWZmZXJTaXplKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrLnJlbmRl
cigwLCBtX3NwYXJlQnVzLmdldCgpLCBrUmVuZGVyQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBt
X3JlbmRlckJ1cy0+Y29weUZyb21SYW5nZSgqbV9zcGFyZUJ1cywgMCwgZnJhbWVzVGhpc1RpbWUp
OworICAgICAgICAgICAgbV9maXJzdFNwYXJlRnJhbWUgPSBmcmFtZXNUaGlzVGltZTsKKyAgICAg
ICAgICAgIG1fbGFzdFNwYXJlRnJhbWUgPSBrUmVuZGVyQnVmZmVyU2l6ZSAtIDE7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbV9jYWxsYmFjay5yZW5kZXIoMCwgbV9yZW5kZXJCdXMuZ2V0
KCksIGZyYW1lc1RoaXNUaW1lKTsKKyAgICAgICAgZnJhbWVPZmZzZXQgKz0gZnJhbWVzVGhpc1Rp
bWU7OworICAgICAgICBmcmFtZXNSZW1haW5pbmcgLT0gZnJhbWVzVGhpc1RpbWU7CiAgICAgfQog
CiAgICAgcmV0dXJuIG5vRXJyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKaW5kZXggODEyNDg3YTMzZmYwYThjNjNh
ZWE0YTBjYzdkNDc4OTY3NmNmZTNhMy4uMWE0NTk4ZWNiMzc1YjExYmEyZWUxMWNiNmE1ZmZhNThj
NzNiYTcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1
ZGlvRGVzdGluYXRpb25JT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9p
b3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oCkBAIC02NSw2ICs2NSw5IEBAIHByaXZhdGU6CiAgICAg
QXVkaW9Vbml0IG1fb3V0cHV0VW5pdDsKICAgICBBdWRpb0lPQ2FsbGJhY2smIG1fY2FsbGJhY2s7
CiAgICAgUmVmUHRyPEF1ZGlvQnVzPiBtX3JlbmRlckJ1czsKKyAgICBSZWZQdHI8QXVkaW9CdXM+
IG1fc3BhcmVCdXM7CisgICAgdW5zaWduZWQgbV9maXJzdFNwYXJlRnJhbWUgeyAwIH07CisgICAg
dW5zaWduZWQgbV9sYXN0U3BhcmVGcmFtZSB7IDAgfTsKIAogICAgIGRvdWJsZSBtX3NhbXBsZVJh
dGU7CiAgICAgYm9vbCBtX2lzUGxheWluZzsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272280</attachid>
            <date>2016-02-25 19:32:29 -0800</date>
            <delta_ts>2016-03-09 09:10:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154538-20160225193212.patch</filename>
            <type>text/plain</type>
            <size>8063</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2OTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE4YjNlNmU1MGI3MDYw
OTIyYzg2MDcyNTI2NjJjMjBiNmU4MjY4OS4uYjk5ZWY4ZDIyMmViODlmZWM0NGU3MzhiZDkwYThm
YWRiYjk3NGE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE2LTAyLTI1ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBBdWRpbyBiZWNvbWVz
IGRpc3RvcnRlZCBhZnRlciBzYW1wbGUgcmF0ZSBjaGFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ1MzgKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzI0NzcxMjkyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdoZW4gdGhlIHVuZGVybHlpbmcgYXVkaW8gaGFyZHdhcmUgc2FtcGxlIHJhdGUgY2hh
bmdlcywgdGhlIEF1ZGlvVW5pdCByZW5kZXIgY2FsbGJhY2sgd2lsbCBiZWdpbiBhc2tpbmcKKyAg
ICAgICAgZm9yIGZld2VyIG9yIG1vcmUgZnJhbWVzLiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgc2Ft
cGxlIHJhdGUgZ29lcyBmcm9tIDQ0LjFrSHogdG8gNDhrSHosIGl0IHdpbGwgYXNrIGZvcgorICAg
ICAgICAxMTggc2FtcGxlcyBpbnN0ZWFkIG9mIDEyOC4gKEFuZCB2aWNlLXZlcnNhLCAxNDAgc2Ft
cGxlcyBpbnN0ZWFkIG9mIDEyOC4pIEJ1dCB0aGUgV2ViIEF1ZGlvIGVuZ2luZSBjYW4gb25seQor
ICAgICAgICByZWFsbHkgaGFuZGxlIHJlcXVlc3RzIGluIG11bHRpcGxlcyBvZiAxMjggc2FtcGxl
cy4gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIHJlcXVlc3RzIGZvciA8IDEyOCBzYW1wbGVz
LAorICAgICAgICBhY3R1YWxseSByZW5kZXIgMTI4LCBidXQgc2F2ZSBvZmYgdGhlIHVucmVxdWVz
dGVkIHNhbXBsZXMgaW4gYSBzZXBhcmF0ZSBidXMuIFRoZW4gZmlsbCB0aGF0IGJ1cyBkdXJpbmcg
dGhlCisgICAgICAgIG5leHQgcmVxdWVzdC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQnVzOjpjb3B5RnJvbVJhbmdlKTog
QWRkZWQgdXRpbGl0eSBtZXRob2QuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uSU9TOjpBdWRpb0Rlc3RpbmF0aW9u
SU9TKTogQ3JlYXRlIGEgInNwYXJlIiBidXMuCisgICAgICAgIChXZWJDb3JlOjphc3NpZ25BdWRp
b0J1ZmZlcnNUb0J1cyk6IE1vdmVkIGZyb20gaW5zaWRlIHJlbmRlci4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvRGVzdGluYXRpb25JT1M6OnJlbmRlcik6IFNhdmUgb2ZmIGV4dHJhIHNhbXBsZXMg
dG8gdGhlICJzcGFyZSIgYnVzLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rl
c3RpbmF0aW9uSU9TLmg6CisKIDIwMTYtMDItMTkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRvcHQgQ2FjaGVkUmF3UmVzb3VyY2VDbGllbnQ6OnNob3VsZENh
Y2hlUmVzcG9uc2UoKSBpbiBNZWRpYVJlc291cmNlTG9hZGVyIGFuZCBXZWJDb3JlTlNVUkxTZXNz
aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKaW5kZXggZmFh
OTYxNzBhOGM0MTBkZjhmMmRjOGU4Y2FmNDgzNTQ3NjBmM2I0Yy4uZWMwMmFjNDg3NzFmODYwMzg0
NTEyZTZlNzgyZmMyOTQwYjlhZDZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9CdXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0F1ZGlvQnVzLmNwcApAQCAtMjEzLDYgKzIxMywzMyBAQCB2b2lkIEF1ZGlvQnVzOjpzY2FsZShm
bG9hdCBzY2FsZSkKICAgICAgICAgY2hhbm5lbChpKS0+c2NhbGUoc2NhbGUpOwogfQogCit2b2lk
IEF1ZGlvQnVzOjpjb3B5RnJvbVJhbmdlKGNvbnN0IEF1ZGlvQnVzJiBzb3VyY2VCdXMsIHVuc2ln
bmVkIHN0YXJ0RnJhbWUsIHVuc2lnbmVkIGVuZEZyYW1lKQoreworICAgIGlmICghdG9wb2xvZ3lN
YXRjaGVzKHNvdXJjZUJ1cykpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBudW1iZXJP
ZlNvdXJjZUZyYW1lcyA9IHNvdXJjZUJ1cy5sZW5ndGgoKTsKKyAgICBib29sIGlzUmFuZ2VTYWZl
ID0gc3RhcnRGcmFtZSA8IGVuZEZyYW1lICYmIGVuZEZyYW1lIDw9IG51bWJlck9mU291cmNlRnJh
bWVzOworICAgIEFTU0VSVChpc1JhbmdlU2FmZSk7CisgICAgaWYgKCFpc1JhbmdlU2FmZSkgewor
ICAgICAgICB6ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBu
dW1iZXJPZkNoYW5uZWxzID0gdGhpcy0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIEFTU0VSVChu
dW1iZXJPZkNoYW5uZWxzIDw9IE1heEJ1c0NoYW5uZWxzKTsKKyAgICBpZiAobnVtYmVyT2ZDaGFu
bmVscyA+IE1heEJ1c0NoYW5uZWxzKSB7CisgICAgICAgIHplcm8oKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkNoYW5uZWxz
OyArK2kpCisgICAgICAgIGNoYW5uZWwoaSktPmNvcHlGcm9tUmFuZ2Uoc291cmNlQnVzLmNoYW5u
ZWwoaSksIHN0YXJ0RnJhbWUsIGVuZEZyYW1lKTsKK30KKwogdm9pZCBBdWRpb0J1czo6Y29weUZy
b20oY29uc3QgQXVkaW9CdXMmIHNvdXJjZUJ1cywgQ2hhbm5lbEludGVycHJldGF0aW9uIGNoYW5u
ZWxJbnRlcnByZXRhdGlvbikKIHsKICAgICBpZiAoJnNvdXJjZUJ1cyA9PSB0aGlzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmgKaW5kZXggOGQ2ODM5ZjAxMjExMGRiZmQ3
YzBmNTAxYjdkMDQzM2U0MzQwNjQwZS4uNGY5YjVmNTVjYzg0M2Y0YWI4N2RlMzU1NDM5Zjg2ZDk3
ODZkMTZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9C
dXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5oCkBAIC0x
MjIsNiArMTIyLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKSB7IG1faXNGaXJzdFRpbWUg
PSB0cnVlOyB9IC8vIGZvciBkZS16aXBwZXJpbmcKIAogICAgIC8vIENvcGllcyB0aGUgc2FtcGxl
cyBmcm9tIHRoZSBzb3VyY2UgYnVzIHRvIHRoaXMgb25lLgorICAgIHZvaWQgY29weUZyb21SYW5n
ZShjb25zdCBBdWRpb0J1cyYgc291cmNlQnVzLCB1bnNpZ25lZCBzdGFydEZyYW1lLCB1bnNpZ25l
ZCBlbmRGcmFtZSk7CisKKyAgICAvLyBDb3BpZXMgdGhlIHNhbXBsZXMgZnJvbSB0aGUgc291cmNl
IGJ1cyB0byB0aGlzIG9uZS4KICAgICAvLyBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgcGVyLWNoYW5u
ZWwgY29weSBpZiB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIG1hdGNoLCBvdGhlcndpc2UgYW4gdXAt
bWl4IG9yIGRvd24tbWl4IGlzIGRvbmUuCiAgICAgdm9pZCBjb3B5RnJvbShjb25zdCBBdWRpb0J1
cyYgc291cmNlQnVzLCBDaGFubmVsSW50ZXJwcmV0YXRpb24gPSBTcGVha2Vycyk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9u
SU9TLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0
aW9uSU9TLmNwcAppbmRleCBhZGRiNTI0ZjAxN2ExN2VhOTEyMTEyMzU5OTMyMjBkOGM5YjE0MTlj
Li43NmNlOTQyZjFjYTYzMmQ0ZTlhNjEyMzkwNDc3OGExZWJlNTg1NTUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25J
T1MuY3BwCkBAIC0xMDEsNiArMTAxLDcgQEAgQXVkaW9EZXN0aW5hdGlvbklPUzo6QXVkaW9EZXN0
aW5hdGlvbklPUyhBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBkb3VibGUgc2FtcGwKICAgICA6
IG1fb3V0cHV0VW5pdCgwKQogICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKICAgICAsIG1fcmVu
ZGVyQnVzKEF1ZGlvQnVzOjpjcmVhdGUoMiwga1JlbmRlckJ1ZmZlclNpemUsIGZhbHNlKSkKKyAg
ICAsIG1fc3BhcmVCdXMoQXVkaW9CdXM6OmNyZWF0ZSgyLCBrUmVuZGVyQnVmZmVyU2l6ZSwgdHJ1
ZSkpCiAgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKICAgICAsIG1faXNQbGF5aW5nKGZh
bHNlKQogewpAQCAtMTk5LDE5ICsyMDAsNDYgQEAgdm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpz
dG9wKCkKICAgICAgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsKIH0KIAorc3RhdGljIHZvaWQgYXNz
aWduQXVkaW9CdWZmZXJzVG9CdXMoQXVkaW9CdWZmZXIqIGJ1ZmZlcnMsIEF1ZGlvQnVzKiBidXMs
IFVJbnQzMiBudW1iZXJPZkJ1ZmZlcnMsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgVUludDMyIGZy
YW1lT2Zmc2V0LCBVSW50MzIgZnJhbWVzVGhpc1RpbWUpCit7CisgICAgZm9yIChVSW50MzIgaSA9
IDA7IGkgPCBudW1iZXJPZkJ1ZmZlcnM7ICsraSkgeworICAgICAgICBVSW50MzIgYnl0ZXNQZXJG
cmFtZSA9IGJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIG51bWJlck9mRnJhbWVzOworICAgICAg
ICBVSW50MzIgYnl0ZU9mZnNldCA9IGZyYW1lT2Zmc2V0ICogYnl0ZXNQZXJGcmFtZTsKKyAgICAg
ICAgZmxvYXQqIG1lbW9yeSA9IChmbG9hdCopKChjaGFyKilidWZmZXJzW2ldLm1EYXRhICsgYnl0
ZU9mZnNldCk7CisgICAgICAgIGJ1cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCBtZW1vcnksIGZyYW1l
c1RoaXNUaW1lKTsKKyAgICB9Cit9CisKIC8vIFB1bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQg
cmVuZGVyZWQgYXVkaW8gc3RyZWFtLgogT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbklPUzo6cmVu
ZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCiB7CiAg
ICAgQXVkaW9CdWZmZXIqIGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZmZXJzOwotICAgIGZvciAoVUlu
dDMyIGZyYW1lT2Zmc2V0ID0gMDsgZnJhbWVPZmZzZXQgKyBrUmVuZGVyQnVmZmVyU2l6ZSA8PSBu
dW1iZXJPZkZyYW1lczsgZnJhbWVPZmZzZXQgKz0ga1JlbmRlckJ1ZmZlclNpemUpIHsKLSAgICAg
ICAgVUludDMyIHJlbWFpbmluZ0ZyYW1lcyA9IHN0ZDo6bWluPFVJbnQzMj4oa1JlbmRlckJ1ZmZl
clNpemUsIG51bWJlck9mRnJhbWVzIC0gZnJhbWVPZmZzZXQpOwotICAgICAgICBmb3IgKFVJbnQz
MiBpID0gMDsgaSA8IGlvRGF0YS0+bU51bWJlckJ1ZmZlcnM7ICsraSkgewotICAgICAgICAgICAg
VUludDMyIGJ5dGVzUGVyRnJhbWUgPSBidWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyBudW1iZXJP
ZkZyYW1lczsKLSAgICAgICAgICAgIFVJbnQzMiBieXRlT2Zmc2V0ID0gZnJhbWVPZmZzZXQgKiBi
eXRlc1BlckZyYW1lOwotICAgICAgICAgICAgZmxvYXQqIG1lbW9yeSA9IChmbG9hdCopKChjaGFy
KilidWZmZXJzW2ldLm1EYXRhICsgYnl0ZU9mZnNldCk7Ci0gICAgICAgICAgICBtX3JlbmRlckJ1
cy0+c2V0Q2hhbm5lbE1lbW9yeShpLCBtZW1vcnksIHJlbWFpbmluZ0ZyYW1lcyk7CisgICAgVUlu
dDMyIG51bWJlck9mQnVmZmVycyA9IGlvRGF0YS0+bU51bWJlckJ1ZmZlcnM7CisgICAgVUludDMy
IGZyYW1lc1JlbWFpbmluZyA9IG51bWJlck9mRnJhbWVzOworICAgIFVJbnQzMiBmcmFtZU9mZnNl
dCA9IDA7CisgICAgd2hpbGUgKGZyYW1lc1JlbWFpbmluZyA+IDApIHsKKyAgICAgICAgaWYgKG1f
Zmlyc3RTcGFyZUZyYW1lICYmIG1fbGFzdFNwYXJlRnJhbWUpIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX2ZpcnN0U3BhcmVGcmFtZSA8IG1fbGFzdFNwYXJlRnJhbWUpOworICAgICAgICAgICAgVUlu
dDMyIGZyYW1lc1RoaXNUaW1lID0gbV9sYXN0U3BhcmVGcmFtZSAtIG1fZmlyc3RTcGFyZUZyYW1l
OworICAgICAgICAgICAgYXNzaWduQXVkaW9CdWZmZXJzVG9CdXMoYnVmZmVycywgbV9yZW5kZXJC
dXMuZ2V0KCksIG51bWJlck9mQnVmZmVycywgbnVtYmVyT2ZGcmFtZXMsIGZyYW1lT2Zmc2V0LCBm
cmFtZXNUaGlzVGltZSk7CisgICAgICAgICAgICBtX3JlbmRlckJ1cy0+Y29weUZyb21SYW5nZSgq
bV9zcGFyZUJ1cywgbV9maXJzdFNwYXJlRnJhbWUsIG1fbGFzdFNwYXJlRnJhbWUpOworICAgICAg
ICAgICAgZnJhbWVPZmZzZXQgKz0gZnJhbWVzVGhpc1RpbWU7CisgICAgICAgICAgICBmcmFtZXNS
ZW1haW5pbmcgLT0gZnJhbWVzVGhpc1RpbWU7CisgICAgICAgICAgICBtX2ZpcnN0U3BhcmVGcmFt
ZSA9IG1fbGFzdFNwYXJlRnJhbWUgPSAwOwogICAgICAgICB9Ci0gICAgICAgIG1fY2FsbGJhY2su
cmVuZGVyKDAsIG1fcmVuZGVyQnVzLmdldCgpLCByZW1haW5pbmdGcmFtZXMpOworCisgICAgICAg
IFVJbnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQzMj4oa1JlbmRlckJ1ZmZlclNp
emUsIGZyYW1lc1JlbWFpbmluZyk7CisgICAgICAgIGFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKGJ1
ZmZlcnMsIG1fcmVuZGVyQnVzLmdldCgpLCBudW1iZXJPZkJ1ZmZlcnMsIG51bWJlck9mRnJhbWVz
LCBmcmFtZU9mZnNldCwgZnJhbWVzVGhpc1RpbWUpOworCisgICAgICAgIGlmIChmcmFtZXNUaGlz
VGltZSA8IGtSZW5kZXJCdWZmZXJTaXplKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrLnJlbmRl
cigwLCBtX3NwYXJlQnVzLmdldCgpLCBrUmVuZGVyQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBt
X3JlbmRlckJ1cy0+Y29weUZyb21SYW5nZSgqbV9zcGFyZUJ1cywgMCwgZnJhbWVzVGhpc1RpbWUp
OworICAgICAgICAgICAgbV9maXJzdFNwYXJlRnJhbWUgPSBmcmFtZXNUaGlzVGltZTsKKyAgICAg
ICAgICAgIG1fbGFzdFNwYXJlRnJhbWUgPSBrUmVuZGVyQnVmZmVyU2l6ZSAtIDE7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbV9jYWxsYmFjay5yZW5kZXIoMCwgbV9yZW5kZXJCdXMuZ2V0
KCksIGZyYW1lc1RoaXNUaW1lKTsKKyAgICAgICAgZnJhbWVPZmZzZXQgKz0gZnJhbWVzVGhpc1Rp
bWU7CisgICAgICAgIGZyYW1lc1JlbWFpbmluZyAtPSBmcmFtZXNUaGlzVGltZTsKICAgICB9CiAK
ICAgICByZXR1cm4gbm9FcnI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaAppbmRleCA4MTI0ODdhMzNmZjBhOGM2M2Fl
YTRhMGNjN2Q0Nzg5Njc2Y2ZlM2EzLi4xYTQ1OThlY2IzNzViMTFiYTJlZTExY2I2YTVmZmE1OGM3
M2JhNzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVk
aW9EZXN0aW5hdGlvbklPUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKQEAgLTY1LDYgKzY1LDkgQEAgcHJpdmF0ZToKICAgICBB
dWRpb1VuaXQgbV9vdXRwdXRVbml0OwogICAgIEF1ZGlvSU9DYWxsYmFjayYgbV9jYWxsYmFjazsK
ICAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOworICAgIFJlZlB0cjxBdWRpb0J1cz4g
bV9zcGFyZUJ1czsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0U3BhcmVGcmFtZSB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX2xhc3RTcGFyZUZyYW1lIHsgMCB9OwogCiAgICAgZG91YmxlIG1fc2FtcGxlUmF0
ZTsKICAgICBib29sIG1faXNQbGF5aW5nOwo=
</data>
<flag name="review"
          id="297049"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>