<?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>34716</bug_id>
          
          <creation_ts>2010-02-08 12:37:41 -0800</creation_ts>
          <short_desc>audio engine: audio output classes</short_desc>
          <delta_ts>2010-09-28 10:44:01 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</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>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>188727</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-08 12:37:41 -0800</bug_when>
    <thetext>AudioOutput is an abstract base-class for providing a rendered audio stream to the audio output hardware.
AudioOutputMac is an implementation for the mac port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188730</commentid>
    <comment_count>1</comment_count>
      <attachid>48353</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-08 12:44:24 -0800</bug_when>
    <thetext>Created attachment 48353
patch file for audio output classes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188780</commentid>
    <comment_count>2</comment_count>
      <attachid>48353</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-08 15:11:34 -0800</bug_when>
    <thetext>Comment on attachment 48353
patch file for audio output classes

Not reviewing this all at this time, but a first thought I had is that we don&apos;t normally print errors to stderr, so that does not seem the right thing to do here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188795</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-08 15:22:37 -0800</bug_when>
    <thetext>I understand.  These OS calls rarely fail, the fprintf statements were really there for debugging.  I could just remove them...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197610</commentid>
    <comment_count>4</comment_count>
      <attachid>48353</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-09 09:11:40 -0800</bug_when>
    <thetext>Comment on attachment 48353
patch file for audio output classes

Sorry that this patch has been up for review for so long.  I&apos;m not that familiar with audio, so I&apos;m going to give you a mostly syntactic / cultural review of your patch.  Hopefully you&apos;ll find it helpful nonetheless.

+#define CheckError(error, operation)                \

I don&apos;t think we should have this macro.  If we decide we should have it, then it should be defined somewhere more generic so that i can be used beyond the audio code.

+        fprintf(stderr, &quot;can&apos;t find audio output unit\n&quot;);

This isn&apos;t the way we usually handle errors liek this in WebCore.  If this can&apos;t happen, I&apos;d recommend an ASSERT.  If it can happen, we need to do something more than printing to stderror.

+     AudioOutputMac* This = static_cast&lt;AudioOutputMac*&gt;(inRefCon);

Please use a different variable name than |This|.  The capitalization is a bit too subtle.

+ static OSStatus inputProc(void* inRefCon,

WebCore doesn&apos;t have an 80 character line limit.  Although I think it&apos;s prettier this way, we usually put all this code on the same line.

+ AudioUnitRenderActionFlags* ioActionFlags

We also omit formal parameter names when the names don&apos;t provide any additional information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199240</commentid>
    <comment_count>5</comment_count>
      <attachid>50639</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-03-12 15:35:53 -0800</bug_when>
    <thetext>Created attachment 50639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199241</commentid>
    <comment_count>6</comment_count>
      <attachid>50639</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-03-12 15:37:11 -0800</bug_when>
    <thetext>Comment on attachment 50639
Patch

I believe I&apos;ve addressed Adam&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225177</commentid>
    <comment_count>7</comment_count>
      <attachid>50639</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-05-13 00:15:32 -0700</bug_when>
    <thetext>Comment on attachment 50639
Patch

My understanding is that the audio work will occur on a branch.  Please renominate for review if I&apos;m mistaken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270644</commentid>
    <comment_count>8</comment_count>
      <attachid>65748</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-08-27 12:01:44 -0700</bug_when>
    <thetext>Created attachment 65748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275295</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-07 14:30:19 -0700</bug_when>
    <thetext>Here are some links to the relevant API documentation:

AudioHardware:
http://developer.apple.com/mac/library/documentation/MusicAudio/Reference/CACoreAudioReference/AudioHardware/CompositePage.html

Component Manager:
http://developer.apple.com/mac/library/documentation/Carbon/Reference/Component_Manager/Reference/reference.html

AudioUnits:
http://developer.apple.com/iphone/library/documentation/AudioUnit/Reference/AUComponentServicesReference/Reference/reference.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276810</commentid>
    <comment_count>10</comment_count>
      <attachid>65748</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-09 15:49:06 -0700</bug_when>
    <thetext>Comment on attachment 65748
Patch

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

This generally looks fine overall, but I have a couple of questions before adjusting the r? status.

&gt; WebCore/platform/audio/AudioDestination.h:34
&gt; +#include &lt;wtf/RefCounted.h&gt;
Why are you including RefCounted here if not using the type in this header?

&gt; WebCore/platform/audio/AudioDestination.h:45
&gt; +    static PassOwnPtr&lt;AudioDestination&gt; create(AudioSourceProvider&amp;, double sampleRate);
Should AudioSourceProvider be made RefCounted and this use PassRefPtr&lt;AudioSourceProvider&gt;?

&gt; WebCore/platform/audio/AudioDestination.h:47
&gt; +    virtual ~AudioDestination() { };
No semicolon.

&gt; WebCore/platform/audio/mac/AudioDestinationMac.cpp:56
&gt; +    if (!result) {
Prefer early return; e.g. here, &quot;if (result) return 0.0;&quot;.

&gt; WebCore/platform/audio/mac/AudioDestinationMac.cpp:148
&gt; +    usleep(4000); // Allow device to actually stop.
This looks like a hack. Is it really necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279120</commentid>
    <comment_count>11</comment_count>
      <attachid>67594</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-14 13:11:04 -0700</bug_when>
    <thetext>Created attachment 67594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279127</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-09-14 13:18:08 -0700</bug_when>
    <thetext>&gt; Why are you including RefCounted here if not using the type in this header?

Turns out this wasn&apos;t necessary - I removed this line.


&gt;Should AudioSourceProvider be made RefCounted and this use PassRefPtr&lt;AudioSourceProvider&gt;?

The ownership is in the other direction.  In actual usage, the AudioSourceProvider subclass  creates and owns the AudioDestination.  Also,  AudioSourceProvider is an abstract base class and it adds complications to inherit from RefCounted, since other subclasses define their own versions of ref() / deref()...


&gt;No semicolon.
fixed

&gt; Prefer early return; e.g. here, &quot;if (result) return 0.0;&quot;.
fixed

&gt; This looks like a hack. Is it really necessary?
Yes, you&apos;re right.  It turns out the usleep() is not necessary since AudioOutputUnitStop() waits for the audio thread to complete before returning.  I&apos;ve removed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286310</commentid>
    <comment_count>13</comment_count>
      <attachid>67594</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-28 09:53:54 -0700</bug_when>
    <thetext>Comment on attachment 67594
Patch

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

Looks good.

&gt; WebCore/platform/audio/mac/AudioDestinationMac.cpp:40
&gt; +const int kBufferSize = 128;

FYI, naming convention for these constants is &quot;BufferSize&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286364</commentid>
    <comment_count>14</comment_count>
      <attachid>67594</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-28 10:43:55 -0700</bug_when>
    <thetext>Comment on attachment 67594
Patch

Clearing flags on attachment: 67594

Committed r68539: &lt;http://trac.webkit.org/changeset/68539&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286365</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-09-28 10:44:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48353</attachid>
            <date>2010-02-08 12:44:24 -0800</date>
            <delta_ts>2010-03-12 15:35:50 -0800</delta_ts>
            <desc>patch file for audio output classes</desc>
            <filename>ttt2</filename>
            <type>text/plain</type>
            <size>14485</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDUwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDItMDggIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGF1ZGlvIG91dHB1dCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDcxNgorCisgICAgICAgIE5vIHRlc3RzIHNpbmNl
IG5vIGphdmFzY3JpcHQgQVBJCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpbzogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9PdXRwdXQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb091dHB1dDo6fkF1ZGlvT3V0cHV0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9tYWM6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb091dHB1
dE1hYy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9PdXRwdXQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb091dHB1dDo6aGFyZHdhcmVTYW1wbGVSYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvT3V0cHV0TWFjOjpBdWRpb091dHB1dE1hYyk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb091dHB1dE1hYzo6fkF1ZGlvT3V0cHV0TWFjKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvT3V0cHV0TWFjOjpjb25maWd1cmUpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9PdXRwdXRNYWM6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvT3V0cHV0TWFjOjpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvT3V0cHV0TWFjOjpyZW5kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9PdXRwdXRNYWM6OmlucHV0UHJvYyk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvT3V0cHV0TWFjLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9PdXRwdXRNYWM6OmlzUGxheWluZyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb091dHB1
dE1hYzo6c2FtcGxlUmF0ZSk6CisKIDIwMTAtMDItMDggIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb091dHB1dC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb091dHB1dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBBdWRpb091dHB1dF9oCisjZGVmaW5lIEF1ZGlvT3V0cHV0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVk
aW9Tb3VyY2VQcm92aWRlcjsKKworLy8gQWJzdHJhY3Rpb24gZm9yIGFuIGF1ZGlvIG91dHB1dCB0
byB0aGUgYXVkaW8gaGFyZHdhcmUgLSBhbiBBdWRpb1NvdXJjZVByb3ZpZGVyIGlzIGNhbGxlZCBi
YWNrCisvLyBwZXJpb2RpY2FsbHkgdG8gcHJvdmlkZSB0aGUgcmVuZGVyZWQgYXVkaW8gc3RyZWFt
CisKK2NsYXNzIEF1ZGlvT3V0cHV0IDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9PdXRwdXQ+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb091dHB1dD4gY3JlYXRlKEF1ZGlv
U291cmNlUHJvdmlkZXImLCBkb3VibGUgc2FtcGxlUmF0ZSk7CisgICAgCisgICAgdmlydHVhbCB+
QXVkaW9PdXRwdXQoKSB7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUGxheWluZygpID0g
MDsKKworICAgIC8vIFNhbXBsZS1yYXRlIGNvbnZlcnNpb24gbWF5IGhhcHBlbiBpbiBBdWRpb091
dHB1dCB0byB0aGUgaGFyZHdhcmUgc2FtcGxlLXJhdGUKKyAgICB2aXJ0dWFsIGRvdWJsZSBzYW1w
bGVSYXRlKCkgY29uc3QgPSAwOworICAgIHN0YXRpYyBkb3VibGUgaGFyZHdhcmVTYW1wbGVSYXRl
KCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb091dHB1
dF9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb091dHB1dE1hYy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9PdXRwdXRNYWMu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9PdXRw
dXRNYWMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBdWRpb091dHB1dE1hYy5oIgorCisjaW5jbHVkZSA8Q29yZUF1ZGlv
L0F1ZGlvSGFyZHdhcmUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQga0J1
ZmZlclNpemUgPSAxMjg7CisKKyNkZWZpbmUgQ2hlY2tFcnJvcihlcnJvciwgb3BlcmF0aW9uKSAg
ICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIE9TU3RhdHVzIGVyciA9IGVycm9yOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBpZiAoZXJyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3I6ICVzXG4iLCBvcGVyYXRp
b24pOyAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKK30gd2hpbGUgKDApCisKKworLy8gRmFjdG9yeSBtZXRob2Q6IE1hYy1pbXBsZW1lbnRh
dGlvbgorUGFzc1JlZlB0cjxBdWRpb091dHB1dD4gQXVkaW9PdXRwdXQ6OmNyZWF0ZShBdWRpb1Nv
dXJjZVByb3ZpZGVyJiBwcm92aWRlciwgZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBBdWRpb091dHB1dE1hYyhwcm92aWRlciwgc2FtcGxlUmF0ZSkpOworfQor
Citkb3VibGUgQXVkaW9PdXRwdXQ6OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCit7CisgICAgLy8gRGV0
ZXJtaW5lIHRoZSBkZWZhdWx0IG91dHB1dCBkZXZpY2UncyBzYW1wbGUtcmF0ZQorICAgIEF1ZGlv
RGV2aWNlSUQgZGV2aWNlSUQgPSBrQXVkaW9EZXZpY2VVbmtub3duOworICAgIFVJbnQzMiBpbmZv
U2l6ZSA9IHNpemVvZihkZXZpY2VJRCk7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gOjpBdWRpb0hh
cmR3YXJlR2V0UHJvcGVydHkoa0F1ZGlvSGFyZHdhcmVQcm9wZXJ0eURlZmF1bHRPdXRwdXREZXZp
Y2UsICZpbmZvU2l6ZSwgKHZvaWQqKSZkZXZpY2VJRCk7CisgICAgCisgICAgaWYgKCFyZXN1bHQp
IHsKKyAgICAgICAgRmxvYXQ2NCBub21pbmFsU2FtcGxlUmF0ZTsKKyAgICAgICAgaW5mb1NpemUg
PSBzaXplb2YoRmxvYXQ2NCk7CisgICAgICAgIHJlc3VsdCA9IEF1ZGlvRGV2aWNlR2V0UHJvcGVy
dHkoZGV2aWNlSUQsIDAsIDAsIGtBdWRpb0RldmljZVByb3BlcnR5Tm9taW5hbFNhbXBsZVJhdGUs
ICZpbmZvU2l6ZSwgJm5vbWluYWxTYW1wbGVSYXRlKTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBub21pbmFsU2FtcGxlUmF0ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIDAuMDsgLy8gZXJy
b3IKK30KKworQXVkaW9PdXRwdXRNYWM6OkF1ZGlvT3V0cHV0TWFjKEF1ZGlvU291cmNlUHJvdmlk
ZXImIHByb3ZpZGVyLCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICA6IG1fb3V0cHV0VW5pdCgwKQor
ICAgICwgbV9wcm92aWRlcihwcm92aWRlcikKKyAgICAsIG1fcmVuZGVyQnVzKDIsIGtCdWZmZXJT
aXplLCBmYWxzZSkKKyAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQorICAgICwgbV9pc1Bs
YXlpbmcoZmFsc2UpCit7CisgICAgLy8gT3BlbiBhbmQgaW5pdGlhbGl6ZSBEZWZhdWx0T3V0cHV0
VW5pdAorICAgIENvbXBvbmVudCBjb21wOworICAgIENvbXBvbmVudERlc2NyaXB0aW9uIGRlc2M7
CisKKyAgICBkZXNjLmNvbXBvbmVudFR5cGUgPSBrQXVkaW9Vbml0VHlwZV9PdXRwdXQ7CisgICAg
ZGVzYy5jb21wb25lbnRTdWJUeXBlID0ga0F1ZGlvVW5pdFN1YlR5cGVfRGVmYXVsdE91dHB1dDsK
KyAgICBkZXNjLmNvbXBvbmVudE1hbnVmYWN0dXJlciA9IGtBdWRpb1VuaXRNYW51ZmFjdHVyZXJf
QXBwbGU7CisgICAgZGVzYy5jb21wb25lbnRGbGFncyA9IDA7CisgICAgZGVzYy5jb21wb25lbnRG
bGFnc01hc2sgPSAwOworICAgIGNvbXAgPSBGaW5kTmV4dENvbXBvbmVudCgwLCAmZGVzYyk7CisK
KyAgICBpZiAoIWNvbXApCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2FuJ3QgZmluZCBhdWRp
byBvdXRwdXQgdW5pdFxuIik7CisKKyAgICBDaGVja0Vycm9yKE9wZW5BQ29tcG9uZW50KGNvbXAs
ICZtX291dHB1dFVuaXQpLCAib3BlbiBhdWRpbyBvdXRwdXQgdW5pdCIpOworICAgIENoZWNrRXJy
b3IoQXVkaW9Vbml0SW5pdGlhbGl6ZShtX291dHB1dFVuaXQpLCAiaW5pdGlhbGl6ZSBhdWRpbyBv
dXRwdXQgdW5pdCIpOworCisgICAgY29uZmlndXJlKCk7Cit9CisKK0F1ZGlvT3V0cHV0TWFjOjp+
QXVkaW9PdXRwdXRNYWMoKQoreworICAgIGlmIChtX291dHB1dFVuaXQpCisgICAgICAgIENsb3Nl
Q29tcG9uZW50KG1fb3V0cHV0VW5pdCk7Cit9CisKK3ZvaWQgQXVkaW9PdXRwdXRNYWM6OmNvbmZp
Z3VyZSgpCit7CisgICAgLy8gU2V0IHJlbmRlciBjYWxsYmFjaworICAgIEFVUmVuZGVyQ2FsbGJh
Y2tTdHJ1Y3QgaW5wdXQ7CisgICAgaW5wdXQuaW5wdXRQcm9jID0gaW5wdXRQcm9jOworICAgIGlu
cHV0LmlucHV0UHJvY1JlZkNvbiA9IHRoaXM7CisgICAgQ2hlY2tFcnJvcihBdWRpb1VuaXRTZXRQ
cm9wZXJ0eShtX291dHB1dFVuaXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmlucHV0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVvZihpbnB1dCkpLCAiY29ubmVjdCBpbnB1dCBwcm9jIHRvIG91dHB1dCB1bml0Iik7CisKKyAg
ICAvLyBTZXQgc3RyZWFtIGZvcm1hdAorICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBz
dHJlYW1Gb3JtYXQ7CisgICAgc3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRlID0gbV9zYW1wbGVSYXRl
OyAgICAKKyAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdElEID0ga0F1ZGlvRm9ybWF0TGluZWFyUENN
OworICAgIHN0cmVhbUZvcm1hdC5tRm9ybWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRGbGFnc0Nhbm9u
aWNhbCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOworICAgIHN0cmVhbUZvcm1h
dC5tQml0c1BlckNoYW5uZWwgPSA4ICogc2l6ZW9mKEF1ZGlvU2FtcGxlVHlwZSk7CisgICAgc3Ry
ZWFtRm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lID0gMjsKKyAgICBzdHJlYW1Gb3JtYXQubUZyYW1l
c1BlclBhY2tldCA9IDE7CisgICAgc3RyZWFtRm9ybWF0Lm1CeXRlc1BlclBhY2tldCA9IHNpemVv
ZihBdWRpb1NhbXBsZVR5cGUpOworICAgIHN0cmVhbUZvcm1hdC5tQnl0ZXNQZXJGcmFtZSA9IHNp
emVvZihBdWRpb1NhbXBsZVR5cGUpOworCisgICAgQ2hlY2tFcnJvcihBdWRpb1VuaXRTZXRQcm9w
ZXJ0eShtX291dHB1dFVuaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
QXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga0F1ZGlvVW5pdFNjb3BlX0lucHV0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
b2lkKikmc3RyZWFtRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpLCAic2V0IGF1ZGlvIG91dHB1dCBm
b3JtYXQiKTsKKworICAgIC8vIFNldCB0aGUgYnVmZmVyIGZyYW1lIHNpemUKKyAgICBVSW50MzIg
YnVmZmVyU2l6ZSA9IGtCdWZmZXJTaXplOworICAgIENoZWNrRXJyb3IoQXVkaW9Vbml0U2V0UHJv
cGVydHkobV9vdXRwdXRVbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a0F1ZGlvRGV2aWNlUHJvcGVydHlCdWZmZXJGcmFtZVNpemUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh2b2lkKikmYnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZihidWZmZXJTaXplKSksICJzZXQgYnVmZmVyIGZyYW1lIHNpemUiKTsKK30KKwor
dm9pZCBBdWRpb091dHB1dE1hYzo6c3RhcnQoKQoreworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1
ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fb3V0cHV0VW5pdCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOworfQorCit2b2lkIEF1ZGlvT3V0cHV0TWFjOjpzdG9w
KCkKK3sKKyAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1fb3V0cHV0
VW5pdCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsK
K30KKworLy8gUHVsbHMgb24gb3VyIHByb3ZpZGVyIHRvIGdldCByZW5kZXJlZCBhdWRpbyBzdHJl
YW0KK09TU3RhdHVzIEF1ZGlvT3V0cHV0TWFjOjpyZW5kZXIoVUludDMyIGluTnVtYmVyRnJhbWVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0
YSkKK3sKKyAgICBBdWRpb0J1ZmZlciogYnVmZmVycyA9IGlvRGF0YS0+bUJ1ZmZlcnM7CisgICAg
bV9yZW5kZXJCdXMuc2V0Q2hhbm5lbE1lbW9yeSgwLCAoZmxvYXQqKWJ1ZmZlcnNbMF0ubURhdGEs
IGluTnVtYmVyRnJhbWVzKTsKKyAgICBtX3JlbmRlckJ1cy5zZXRDaGFubmVsTWVtb3J5KDEsIChm
bG9hdCopYnVmZmVyc1sxXS5tRGF0YSwgaW5OdW1iZXJGcmFtZXMpOworCisgICAgbV9wcm92aWRl
ci5wcm92aWRlSW5wdXQoJm1fcmVuZGVyQnVzLCBpbk51bWJlckZyYW1lcyk7CisKKyAgICByZXR1
cm4gbm9FcnI7Cit9CisKKy8vIERlZmF1bHRPdXRwdXRVbml0IGNhbGxiYWNrCitPU1N0YXR1cyBB
dWRpb091dHB1dE1hYzo6aW5wdXRQcm9jKHZvaWQqIGluUmVmQ29uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyogaW9BY3Rpb25G
bGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXVkaW9UaW1l
U3RhbXAqIGluVGltZVN0YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
SW50MzIgaW5CdXNOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJ
bnQzMiBpbk51bWJlckZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7CisgICAgQXVkaW9PdXRwdXRNYWMqIFRoaXMgPSBz
dGF0aWNfY2FzdDxBdWRpb091dHB1dE1hYyo+KGluUmVmQ29uKTsKKyAgICByZXR1cm4gVGhpcy0+
cmVuZGVyKGluTnVtYmVyRnJhbWVzLCBpb0RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb091dHB1dE1hYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvT3V0cHV0TWFjLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb091dHB1dE1h
Yy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb091dHB1dE1h
Y19oCisjZGVmaW5lIEF1ZGlvT3V0cHV0TWFjX2gKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisj
aW5jbHVkZSAiQXVkaW9PdXRwdXQuaCIKKyNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQW4gQXVkaW9PdXRwdXQgdXNpbmcgQ29yZUF1
ZGlvJ3MgZGVmYXVsdCBvdXRwdXQgQVUKKworY2xhc3MgQXVkaW9PdXRwdXRNYWMgOiBwdWJsaWMg
QXVkaW9PdXRwdXQgeworcHVibGljOgorICAgIEF1ZGlvT3V0cHV0TWFjKEF1ZGlvU291cmNlUHJv
dmlkZXImLCBkb3VibGUgc2FtcGxlUmF0ZSk7CisgICAgdmlydHVhbCB+QXVkaW9PdXRwdXRNYWMo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7
CisgICAgYm9vbCBpc1BsYXlpbmcoKSB7IHJldHVybiBtX2lzUGxheWluZzsgfQorCisgICAgZG91
YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGNvbmZpZ3VyZSgpOworCisgICAgLy8gRGVmYXVsdE91dHB1dFVuaXQgY2Fs
bGJhY2sKKyAgICBzdGF0aWMgT1NTdGF0dXMgaW5wdXRQcm9jKHZvaWQqIGluUmVmQ29uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqIGlv
QWN0aW9uRmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdWRpb1Rp
bWVTdGFtcCogaW5UaW1lU3RhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50
MzIgaW5CdXNOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50MzIgaW5O
dW1iZXJGcmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb0J1ZmZlckxp
c3QqIGlvRGF0YSk7CisKKyAgICBPU1N0YXR1cyByZW5kZXIoVUludDMyIGluTnVtYmVyRnJhbWVz
LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7CisKKyAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0
OworICAgIEF1ZGlvU291cmNlUHJvdmlkZXImIG1fcHJvdmlkZXI7CisgICAgQXVkaW9CdXMgbV9y
ZW5kZXJCdXM7CisKKyAgICBkb3VibGUgbV9zYW1wbGVSYXRlOworICAgIGJvb2wgbV9pc1BsYXlp
bmc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb091dHB1
dE1hY19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50639</attachid>
            <date>2010-03-12 15:35:53 -0800</date>
            <delta_ts>2010-08-27 12:01:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34716-20100312153552.patch</filename>
            <type>text/plain</type>
            <size>12960</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWYyZDg3NC4uNzVhNzFiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wMy0xMiAgQ2hyaXMgUm9nZXJz
ICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGF1ZGlvIGVuZ2luZTogYXVkaW8gb3V0cHV0IGNsYXNzZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NzE2CisKKyAgICAg
ICAgbm8gdGVzdHMgc2luY2Ugbm90IHlldCBjb25uZWN0ZWQgdG8gamF2YXNjcmlwdCBBUEkKKwor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvT3V0cHV0Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9PdXRwdXQ6On5BdWRpb091dHB1dCk6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vbWFjL0F1ZGlvT3V0cHV0TWFjLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpB
dWRpb091dHB1dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvT3V0cHV0OjpoYXJk
d2FyZVNhbXBsZVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9PdXRwdXRNYWM6OkF1ZGlv
T3V0cHV0TWFjKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvT3V0cHV0TWFjOjp+QXVkaW9PdXRw
dXRNYWMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9PdXRwdXRNYWM6OmNvbmZpZ3VyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb091dHB1dE1hYzo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9PdXRwdXRNYWM6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9PdXRwdXRN
YWM6OnJlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb091dHB1dE1hYzo6aW5wdXRQcm9j
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9PdXRwdXRNYWMuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb091dHB1dE1hYzo6aXNQbGF5aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvT3V0cHV0TWFjOjpzYW1wbGVSYXRlKToKKwogMjAxMC0wMy0wNSAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
YnVpbGRmaXggYWZ0ZXIgcjU1NTkzLiAoVG8gZml4IFF0IC0tbWluaW1hbCBidWlsZC4pCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvT3V0cHV0LmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL0F1ZGlvT3V0cHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNjI1N2M2NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QXVkaW9PdXRwdXQuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb091dHB1dF9oCisj
ZGVmaW5lIEF1ZGlvT3V0cHV0X2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlcjsKKworLy8gQWJzdHJh
Y3Rpb24gZm9yIGFuIGF1ZGlvIG91dHB1dCB0byB0aGUgYXVkaW8gaGFyZHdhcmUgLSBhbiBBdWRp
b1NvdXJjZVByb3ZpZGVyIGlzIGNhbGxlZCBiYWNrCisvLyBwZXJpb2RpY2FsbHkgdG8gcHJvdmlk
ZSB0aGUgcmVuZGVyZWQgYXVkaW8gc3RyZWFtCisKK2NsYXNzIEF1ZGlvT3V0cHV0IDogcHVibGlj
IFJlZkNvdW50ZWQ8QXVkaW9PdXRwdXQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxBdWRpb091dHB1dD4gY3JlYXRlKEF1ZGlvU291cmNlUHJvdmlkZXImLCBkb3VibGUgc2FtcGxl
UmF0ZSk7CisgICAgCisgICAgdmlydHVhbCB+QXVkaW9PdXRwdXQoKSB7IH07CisKKyAgICB2aXJ0
dWFsIHZvaWQgc3RhcnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzUGxheWluZygpID0gMDsKKworICAgIC8vIFNhbXBsZS1yYXRlIGNvbnZl
cnNpb24gbWF5IGhhcHBlbiBpbiBBdWRpb091dHB1dCB0byB0aGUgaGFyZHdhcmUgc2FtcGxlLXJh
dGUKKyAgICB2aXJ0dWFsIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29uc3QgPSAwOworICAgIHN0YXRp
YyBkb3VibGUgaGFyZHdhcmVTYW1wbGVSYXRlKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBBdWRpb091dHB1dF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9BdWRpb091dHB1dE1hYy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9BdWRpb091dHB1dE1hYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjBlMmU2NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0F1ZGlvT3V0cHV0TWFjLmNwcApAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBdWRpb091dHB1dE1hYy5oIgorCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0F1
ZGlvSGFyZHdhcmUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQga0J1ZmZl
clNpemUgPSAxMjg7CisKKy8vIEZhY3RvcnkgbWV0aG9kOiBNYWMtaW1wbGVtZW50YXRpb24KK1Bh
c3NSZWZQdHI8QXVkaW9PdXRwdXQ+IEF1ZGlvT3V0cHV0OjpjcmVhdGUoQXVkaW9Tb3VyY2VQcm92
aWRlciYgcHJvdmlkZXIsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQXVkaW9PdXRwdXRNYWMocHJvdmlkZXIsIHNhbXBsZVJhdGUpKTsKK30KKworZG91Ymxl
IEF1ZGlvT3V0cHV0OjpoYXJkd2FyZVNhbXBsZVJhdGUoKQoreworICAgIC8vIERldGVybWluZSB0
aGUgZGVmYXVsdCBvdXRwdXQgZGV2aWNlJ3Mgc2FtcGxlLXJhdGUKKyAgICBBdWRpb0RldmljZUlE
IGRldmljZUlEID0ga0F1ZGlvRGV2aWNlVW5rbm93bjsKKyAgICBVSW50MzIgaW5mb1NpemUgPSBz
aXplb2YoZGV2aWNlSUQpOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvSGFyZHdhcmVHZXRQ
cm9wZXJ0eShrQXVkaW9IYXJkd2FyZVByb3BlcnR5RGVmYXVsdE91dHB1dERldmljZSwgJmluZm9T
aXplLCAodm9pZCopJmRldmljZUlEKTsKKyAgICAKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICBGbG9hdDY0IG5vbWluYWxTYW1wbGVSYXRlOworICAgICAgICBpbmZvU2l6ZSA9IHNpemVvZihG
bG9hdDY0KTsKKyAgICAgICAgcmVzdWx0ID0gQXVkaW9EZXZpY2VHZXRQcm9wZXJ0eShkZXZpY2VJ
RCwgMCwgMCwga0F1ZGlvRGV2aWNlUHJvcGVydHlOb21pbmFsU2FtcGxlUmF0ZSwgJmluZm9TaXpl
LCAmbm9taW5hbFNhbXBsZVJhdGUpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5vbWluYWxT
YW1wbGVSYXRlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gMC4wOyAvLyBlcnJvcgorfQorCitB
dWRpb091dHB1dE1hYzo6QXVkaW9PdXRwdXRNYWMoQXVkaW9Tb3VyY2VQcm92aWRlciYgcHJvdmlk
ZXIsIGRvdWJsZSBzYW1wbGVSYXRlKQorICAgIDogbV9vdXRwdXRVbml0KDApCisgICAgLCBtX3By
b3ZpZGVyKHByb3ZpZGVyKQorICAgICwgbV9yZW5kZXJCdXMoMiwga0J1ZmZlclNpemUsIGZhbHNl
KQorICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCisgICAgLCBtX2lzUGxheWluZyhmYWxz
ZSkKK3sKKyAgICAvLyBPcGVuIGFuZCBpbml0aWFsaXplIERlZmF1bHRPdXRwdXRVbml0CisgICAg
Q29tcG9uZW50IGNvbXA7CisgICAgQ29tcG9uZW50RGVzY3JpcHRpb24gZGVzYzsKKworICAgIGRl
c2MuY29tcG9uZW50VHlwZSA9IGtBdWRpb1VuaXRUeXBlX091dHB1dDsKKyAgICBkZXNjLmNvbXBv
bmVudFN1YlR5cGUgPSBrQXVkaW9Vbml0U3ViVHlwZV9EZWZhdWx0T3V0cHV0OworICAgIGRlc2Mu
Y29tcG9uZW50TWFudWZhY3R1cmVyID0ga0F1ZGlvVW5pdE1hbnVmYWN0dXJlcl9BcHBsZTsKKyAg
ICBkZXNjLmNvbXBvbmVudEZsYWdzID0gMDsKKyAgICBkZXNjLmNvbXBvbmVudEZsYWdzTWFzayA9
IDA7CisgICAgY29tcCA9IEZpbmROZXh0Q29tcG9uZW50KDAsICZkZXNjKTsKKworICAgIEFTU0VS
VChjb21wKTsKKworICAgIE9TU3RhdHVzIHJlc3VsdCA9IE9wZW5BQ29tcG9uZW50KGNvbXAsICZt
X291dHB1dFVuaXQpOworICAgIEFTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgCisgICAgcmVzdWx0
ID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShtX291dHB1dFVuaXQpOworICAgIEFTU0VSVCghcmVzdWx0
KTsKKworICAgIGNvbmZpZ3VyZSgpOworfQorCitBdWRpb091dHB1dE1hYzo6fkF1ZGlvT3V0cHV0
TWFjKCkKK3sKKyAgICBpZiAobV9vdXRwdXRVbml0KQorICAgICAgICBDbG9zZUNvbXBvbmVudCht
X291dHB1dFVuaXQpOworfQorCit2b2lkIEF1ZGlvT3V0cHV0TWFjOjpjb25maWd1cmUoKQorewor
ICAgIC8vIFNldCByZW5kZXIgY2FsbGJhY2sKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGlu
cHV0OworICAgIGlucHV0LmlucHV0UHJvYyA9IGlucHV0UHJvYzsKKyAgICBpbnB1dC5pbnB1dFBy
b2NSZWZDb24gPSB0aGlzOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3Bl
cnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBr
QXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOworICAgIEFT
U0VSVCghcmVzdWx0KTsKKyAgICAgICAgCisgICAgLy8gU2V0IHN0cmVhbSBmb3JtYXQKKyAgICBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gc3RyZWFtRm9ybWF0OworICAgIHN0cmVhbUZvcm1h
dC5tU2FtcGxlUmF0ZSA9IG1fc2FtcGxlUmF0ZTsgICAgCisgICAgc3RyZWFtRm9ybWF0Lm1Gb3Jt
YXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKKyAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZs
YWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NDYW5vbmljYWwgfCBrQXVkaW9Gb3JtYXRGbGFnSXNOb25J
bnRlcmxlYXZlZDsKKyAgICBzdHJlYW1Gb3JtYXQubUJpdHNQZXJDaGFubmVsID0gOCAqIHNpemVv
ZihBdWRpb1NhbXBsZVR5cGUpOworICAgIHN0cmVhbUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9
IDI7CisgICAgc3RyZWFtRm9ybWF0Lm1GcmFtZXNQZXJQYWNrZXQgPSAxOworICAgIHN0cmVhbUZv
cm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBzaXplb2YoQXVkaW9TYW1wbGVUeXBlKTsKKyAgICBzdHJl
YW1Gb3JtYXQubUJ5dGVzUGVyRnJhbWUgPSBzaXplb2YoQXVkaW9TYW1wbGVUeXBlKTsKKworICAg
IHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFBy
b3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9pZCopJnN0
cmVhbUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOworICAgIEFT
U0VSVCghcmVzdWx0KTsKKyAgICAgICAgCisgICAgLy8gU2V0IHRoZSBidWZmZXIgZnJhbWUgc2l6
ZQorICAgIFVJbnQzMiBidWZmZXJTaXplID0ga0J1ZmZlclNpemU7CisgICAgcmVzdWx0ID0gQXVk
aW9Vbml0U2V0UHJvcGVydHkobV9vdXRwdXRVbml0LCBrQXVkaW9EZXZpY2VQcm9wZXJ0eUJ1ZmZl
ckZyYW1lU2l6ZSwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgMCwgKHZvaWQqKSZidWZmZXJTaXpl
LCBzaXplb2YoYnVmZmVyU2l6ZSkpOworICAgIEFTU0VSVCghcmVzdWx0KTsKK30KKwordm9pZCBB
dWRpb091dHB1dE1hYzo6c3RhcnQoKQoreworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0
cHV0VW5pdFN0YXJ0KG1fb3V0cHV0VW5pdCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
bV9pc1BsYXlpbmcgPSB0cnVlOworfQorCit2b2lkIEF1ZGlvT3V0cHV0TWFjOjpzdG9wKCkKK3sK
KyAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1fb3V0cHV0VW5pdCk7
CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKK30KKwor
Ly8gUHVsbHMgb24gb3VyIHByb3ZpZGVyIHRvIGdldCByZW5kZXJlZCBhdWRpbyBzdHJlYW0KK09T
U3RhdHVzIEF1ZGlvT3V0cHV0TWFjOjpyZW5kZXIoVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRp
b0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBBdWRpb0J1ZmZlciogYnVmZmVycyA9IGlvRGF0
YS0+bUJ1ZmZlcnM7CisgICAgbV9yZW5kZXJCdXMuc2V0Q2hhbm5lbE1lbW9yeSgwLCAoZmxvYXQq
KWJ1ZmZlcnNbMF0ubURhdGEsIGluTnVtYmVyRnJhbWVzKTsKKyAgICBtX3JlbmRlckJ1cy5zZXRD
aGFubmVsTWVtb3J5KDEsIChmbG9hdCopYnVmZmVyc1sxXS5tRGF0YSwgaW5OdW1iZXJGcmFtZXMp
OworCisgICAgbV9wcm92aWRlci5wcm92aWRlSW5wdXQoJm1fcmVuZGVyQnVzLCBpbk51bWJlckZy
YW1lcyk7CisKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKKy8vIERlZmF1bHRPdXRwdXRVbml0IGNh
bGxiYWNrCitPU1N0YXR1cyBBdWRpb091dHB1dE1hYzo6aW5wdXRQcm9jKHZvaWQqIGluUmVmQ29u
LCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUlu
dDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCog
aW9EYXRhKQoreworICAgIEF1ZGlvT3V0cHV0TWFjKiBhdWRpb091dHB1dCA9IHN0YXRpY19jYXN0
PEF1ZGlvT3V0cHV0TWFjKj4oaW5SZWZDb24pOworICAgIHJldHVybiBhdWRpb091dHB1dC0+cmVu
ZGVyKGluTnVtYmVyRnJhbWVzLCBpb0RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb091dHB1dE1hYy5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9PdXRwdXRNYWMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDAyODA1Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9PdXRwdXRNYWMuaApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBBdWRpb091dHB1dE1hY19oCisjZGVmaW5lIEF1ZGlvT3V0cHV0TWFjX2gKKwor
I2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9PdXRwdXQuaCIKKyNpbmNsdWRl
IDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQW4g
QXVkaW9PdXRwdXQgdXNpbmcgQ29yZUF1ZGlvJ3MgZGVmYXVsdCBvdXRwdXQgQVUKKworY2xhc3Mg
QXVkaW9PdXRwdXRNYWMgOiBwdWJsaWMgQXVkaW9PdXRwdXQgeworcHVibGljOgorICAgIEF1ZGlv
T3V0cHV0TWFjKEF1ZGlvU291cmNlUHJvdmlkZXImLCBkb3VibGUgc2FtcGxlUmF0ZSk7CisgICAg
dmlydHVhbCB+QXVkaW9PdXRwdXRNYWMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisgICAgYm9vbCBpc1BsYXlpbmcoKSB7IHJldHVybiBt
X2lzUGxheWluZzsgfQorCisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBt
X3NhbXBsZVJhdGU7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNvbmZpZ3VyZSgpOworCisgICAg
Ly8gRGVmYXVsdE91dHB1dFVuaXQgY2FsbGJhY2sKKyAgICBzdGF0aWMgT1NTdGF0dXMgaW5wdXRQ
cm9jKHZvaWQqIGluUmVmQ29uLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1
ZGlvVGltZVN0YW1wKiwgVUludDMyIGluQnVzTnVtYmVyLCBVSW50MzIgaW5OdW1iZXJGcmFtZXMs
IEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKTsKKworICAgIE9TU3RhdHVzIHJlbmRlcihVSW50MzIg
aW5OdW1iZXJGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKTsKKworICAgIEF1ZGlvVW5p
dCBtX291dHB1dFVuaXQ7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlciYgbV9wcm92aWRlcjsKKyAg
ICBBdWRpb0J1cyBtX3JlbmRlckJ1czsKKworICAgIGRvdWJsZSBtX3NhbXBsZVJhdGU7CisgICAg
Ym9vbCBtX2lzUGxheWluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEF1ZGlvT3V0cHV0TWFjX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65748</attachid>
            <date>2010-08-27 12:01:44 -0700</date>
            <delta_ts>2010-09-14 13:11:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34716-20100827120143.patch</filename>
            <type>text/plain</type>
            <size>13774</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjI0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMTAtMDgtMjcgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBhdWRpbyBkZXN0aW5hdGlvbiBjbGFzc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDcxNgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBzaW5jZSBhdWRpbyBBUEkgbm90IHlldCBpbXBsZW1lbnRlZC4KKworICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb0Rl
c3RpbmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbjo6
fkF1ZGlvRGVzdGluYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYzogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6QXVkaW9EZXN0aW5hdGlvbk1hYyk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlv
bk1hYyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTWFjOjpjb25maWd1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uTWFjOjpyZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9E
ZXN0aW5hdGlvbk1hYzo6aW5wdXRQcm9jKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9EZXN0aW5hdGlvbk1hYy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVz
dGluYXRpb25NYWM6OmlzUGxheWluZyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uTWFjOjpzYW1wbGVSYXRlKToKKwogMjAxMC0wOC0yNyAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRpb24uaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9EZXN0aW5hdGlvbl9oCisjZGVmaW5l
IEF1ZGlvRGVzdGluYXRpb25faAorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVyOworCisvLyBBYnN0cmFj
dGlvbiBmb3IgYW4gYXVkaW8gb3V0cHV0IHRvIHRoZSBhdWRpbyBoYXJkd2FyZQorLy8gQW4gQXVk
aW9Tb3VyY2VQcm92aWRlciBpcyBjYWxsZWQgYmFjayBwZXJpb2RpY2FsbHkgdG8gcHJvdmlkZSB0
aGUgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLgorCitjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxBdWRpb0Rlc3RpbmF0aW9uPiBjcmVhdGUoQXVk
aW9Tb3VyY2VQcm92aWRlciYsIGRvdWJsZSBzYW1wbGVSYXRlKTsKKworICAgIHZpcnR1YWwgfkF1
ZGlvRGVzdGluYXRpb24oKSB7IH07CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUGxheWluZygp
ID0gMDsKKworICAgIC8vIFNhbXBsZS1yYXRlIGNvbnZlcnNpb24gbWF5IGhhcHBlbiBpbiBBdWRp
b0Rlc3RpbmF0aW9uIHRvIHRoZSBoYXJkd2FyZSBzYW1wbGUtcmF0ZQorICAgIHZpcnR1YWwgZG91
YmxlIHNhbXBsZVJhdGUoKSBjb25zdCA9IDA7CisgICAgc3RhdGljIGRvdWJsZSBoYXJkd2FyZVNh
bXBsZVJhdGUoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEF1
ZGlvRGVzdGluYXRpb25faApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9E
ZXN0aW5hdGlvbk1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk1hYy5oIgorCisjaW5jbHVkZSA8Q29yZUF1
ZGlvL0F1ZGlvSGFyZHdhcmUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQg
a0J1ZmZlclNpemUgPSAxMjg7CisKKy8vIEZhY3RvcnkgbWV0aG9kOiBNYWMtaW1wbGVtZW50YXRp
b24KK1Bhc3NPd25QdHI8QXVkaW9EZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRl
KEF1ZGlvU291cmNlUHJvdmlkZXImIHByb3ZpZGVyLCBkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAg
ICByZXR1cm4gbmV3IEF1ZGlvRGVzdGluYXRpb25NYWMocHJvdmlkZXIsIHNhbXBsZVJhdGUpOwor
fQorCitkb3VibGUgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkKK3sKKyAg
ICAvLyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgb3V0cHV0IGRldmljZSdzIHNhbXBsZS1yYXRlLgor
ICAgIEF1ZGlvRGV2aWNlSUQgZGV2aWNlSUQgPSBrQXVkaW9EZXZpY2VVbmtub3duOworICAgIFVJ
bnQzMiBpbmZvU2l6ZSA9IHNpemVvZihkZXZpY2VJRCk7CisKKyAgICBBdWRpb09iamVjdFByb3Bl
cnR5QWRkcmVzcyB0aGVBZGRyZXNzID0geyBrQXVkaW9IYXJkd2FyZVByb3BlcnR5RGVmYXVsdElu
cHV0RGV2aWNlLCBrQXVkaW9PYmplY3RQcm9wZXJ0eVNjb3BlR2xvYmFsLCBrQXVkaW9PYmplY3RQ
cm9wZXJ0eUVsZW1lbnRNYXN0ZXIgfTsKKyAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb09iamVj
dEdldFByb3BlcnR5RGF0YShrQXVkaW9PYmplY3RTeXN0ZW1PYmplY3QsICZ0aGVBZGRyZXNzLCAw
LCAwLCAmaW5mb1NpemUsICh2b2lkKikmZGV2aWNlSUQpOworCisgICAgaWYgKCFyZXN1bHQpIHsK
KyAgICAgICAgRmxvYXQ2NCBub21pbmFsU2FtcGxlUmF0ZTsKKyAgICAgICAgaW5mb1NpemUgPSBz
aXplb2YoRmxvYXQ2NCk7CisKKyAgICAgICAgQXVkaW9PYmplY3RQcm9wZXJ0eUFkZHJlc3MgdGhl
QWRkcmVzcyA9IHsga0F1ZGlvRGV2aWNlUHJvcGVydHlOb21pbmFsU2FtcGxlUmF0ZSwga0F1ZGlv
T2JqZWN0UHJvcGVydHlTY29wZUdsb2JhbCwga0F1ZGlvT2JqZWN0UHJvcGVydHlFbGVtZW50TWFz
dGVyIH07CisgICAgICAgIHJlc3VsdCA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhKGRldmlj
ZUlELCAmdGhlQWRkcmVzcywgMCwgMCwgJmluZm9TaXplLCAodm9pZCopJm5vbWluYWxTYW1wbGVS
YXRlKTsKKworICAgICAgICByZXR1cm4gbm9taW5hbFNhbXBsZVJhdGU7CisgICAgfQorCisgICAg
cmV0dXJuIDAuMDsgLy8gZXJyb3IKK30KKworQXVkaW9EZXN0aW5hdGlvbk1hYzo6QXVkaW9EZXN0
aW5hdGlvbk1hYyhBdWRpb1NvdXJjZVByb3ZpZGVyJiBwcm92aWRlciwgZG91YmxlIHNhbXBsZVJh
dGUpCisgICAgOiBtX291dHB1dFVuaXQoMCkKKyAgICAsIG1fcHJvdmlkZXIocHJvdmlkZXIpCisg
ICAgLCBtX3JlbmRlckJ1cygyLCBrQnVmZmVyU2l6ZSwgZmFsc2UpCisgICAgLCBtX3NhbXBsZVJh
dGUoc2FtcGxlUmF0ZSkKKyAgICAsIG1faXNQbGF5aW5nKGZhbHNlKQoreworICAgIC8vIE9wZW4g
YW5kIGluaXRpYWxpemUgRGVmYXVsdE91dHB1dFVuaXQKKyAgICBDb21wb25lbnQgY29tcDsKKyAg
ICBDb21wb25lbnREZXNjcmlwdGlvbiBkZXNjOworCisgICAgZGVzYy5jb21wb25lbnRUeXBlID0g
a0F1ZGlvVW5pdFR5cGVfT3V0cHV0OworICAgIGRlc2MuY29tcG9uZW50U3ViVHlwZSA9IGtBdWRp
b1VuaXRTdWJUeXBlX0RlZmF1bHRPdXRwdXQ7CisgICAgZGVzYy5jb21wb25lbnRNYW51ZmFjdHVy
ZXIgPSBrQXVkaW9Vbml0TWFudWZhY3R1cmVyX0FwcGxlOworICAgIGRlc2MuY29tcG9uZW50Rmxh
Z3MgPSAwOworICAgIGRlc2MuY29tcG9uZW50RmxhZ3NNYXNrID0gMDsKKyAgICBjb21wID0gRmlu
ZE5leHRDb21wb25lbnQoMCwgJmRlc2MpOworCisgICAgQVNTRVJUKGNvbXApOworCisgICAgT1NT
dGF0dXMgcmVzdWx0ID0gT3BlbkFDb21wb25lbnQoY29tcCwgJm1fb3V0cHV0VW5pdCk7CisgICAg
QVNTRVJUKCFyZXN1bHQpOworCisgICAgcmVzdWx0ID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShtX291
dHB1dFVuaXQpOworICAgIEFTU0VSVCghcmVzdWx0KTsKKworICAgIGNvbmZpZ3VyZSgpOworfQor
CitBdWRpb0Rlc3RpbmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYygpCit7CisgICAgaWYg
KG1fb3V0cHV0VW5pdCkKKyAgICAgICAgQ2xvc2VDb21wb25lbnQobV9vdXRwdXRVbml0KTsKK30K
Kwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpjb25maWd1cmUoKQoreworICAgIC8vIFNldCBy
ZW5kZXIgY2FsbGJhY2sKKyAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGlucHV0OworICAgIGlu
cHV0LmlucHV0UHJvYyA9IGlucHV0UHJvYzsKKyAgICBpbnB1dC5pbnB1dFByb2NSZWZDb24gPSB0
aGlzOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0
VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2Nv
cGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOworICAgIEFTU0VSVCghcmVzdWx0
KTsKKworICAgIC8vIFNldCBzdHJlYW0gZm9ybWF0CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uIHN0cmVhbUZvcm1hdDsKKyAgICBzdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBtX3Nh
bXBsZVJhdGU7CisgICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVh
clBDTTsKKyAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3ND
YW5vbmljYWwgfCBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKKyAgICBzdHJlYW1G
b3JtYXQubUJpdHNQZXJDaGFubmVsID0gOCAqIHNpemVvZihBdWRpb1NhbXBsZVR5cGUpOworICAg
IHN0cmVhbUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9IDI7CisgICAgc3RyZWFtRm9ybWF0Lm1G
cmFtZXNQZXJQYWNrZXQgPSAxOworICAgIHN0cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBz
aXplb2YoQXVkaW9TYW1wbGVUeXBlKTsKKyAgICBzdHJlYW1Gb3JtYXQubUJ5dGVzUGVyRnJhbWUg
PSBzaXplb2YoQXVkaW9TYW1wbGVUeXBlKTsKKworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFBy
b3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1
ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9pZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9mKEF1ZGlv
U3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOworICAgIEFTU0VSVCghcmVzdWx0KTsKKworICAgIC8v
IFNldCB0aGUgYnVmZmVyIGZyYW1lIHNpemUuCisgICAgVUludDMyIGJ1ZmZlclNpemUgPSBrQnVm
ZmVyU2l6ZTsKKyAgICByZXN1bHQgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX291dHB1dFVuaXQs
IGtBdWRpb0RldmljZVByb3BlcnR5QnVmZmVyRnJhbWVTaXplLCBrQXVkaW9Vbml0U2NvcGVfT3V0
cHV0LCAwLCAodm9pZCopJmJ1ZmZlclNpemUsIHNpemVvZihidWZmZXJTaXplKSk7CisgICAgQVNT
RVJUKCFyZXN1bHQpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25NYWM6OnN0YXJ0KCkKK3sK
KyAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdGFydChtX291dHB1dFVuaXQp
OworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKK30KKwor
dm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpzdG9wKCkKK3sKKyAgICBPU1N0YXR1cyByZXN1bHQg
PSBBdWRpb091dHB1dFVuaXRTdG9wKG1fb3V0cHV0VW5pdCk7CisKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKKworICAgIHVzbGVlcCg0MDAwKTsgLy8gQWxs
b3cgZGV2aWNlIHRvIGFjdHVhbGx5IHN0b3AuCit9CisKKy8vIFB1bGxzIG9uIG91ciBwcm92aWRl
ciB0byBnZXQgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLgorT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlv
bk1hYzo6cmVuZGVyKFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0Rh
dGEpCit7CisgICAgQXVkaW9CdWZmZXIqIGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZmZXJzOworICAg
IG1fcmVuZGVyQnVzLnNldENoYW5uZWxNZW1vcnkoMCwgKGZsb2F0KilidWZmZXJzWzBdLm1EYXRh
LCBpbk51bWJlckZyYW1lcyk7CisgICAgbV9yZW5kZXJCdXMuc2V0Q2hhbm5lbE1lbW9yeSgxLCAo
ZmxvYXQqKWJ1ZmZlcnNbMV0ubURhdGEsIGluTnVtYmVyRnJhbWVzKTsKKworICAgIG1fcHJvdmlk
ZXIucHJvdmlkZUlucHV0KCZtX3JlbmRlckJ1cywgaW5OdW1iZXJGcmFtZXMpOworCisgICAgcmV0
dXJuIG5vRXJyOworfQorCisvLyBEZWZhdWx0T3V0cHV0VW5pdCBjYWxsYmFjaworT1NTdGF0dXMg
QXVkaW9EZXN0aW5hdGlvbk1hYzo6aW5wdXRQcm9jKHZvaWQqIGluUmVmQ29uLCBBdWRpb1VuaXRS
ZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIC8qaW5CdXNO
dW1iZXIqLywgVUludDMyIGluTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkK
K3sKKyAgICBBdWRpb0Rlc3RpbmF0aW9uTWFjKiBhdWRpb091dHB1dCA9IHN0YXRpY19jYXN0PEF1
ZGlvRGVzdGluYXRpb25NYWMqPihpblJlZkNvbik7CisgICAgcmV0dXJuIGF1ZGlvT3V0cHV0LT5y
ZW5kZXIoaW5OdW1iZXJGcmFtZXMsIGlvRGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBdWRpb0Rlc3RpbmF0aW9uTWFjX2gKKyNk
ZWZpbmUgQXVkaW9EZXN0aW5hdGlvbk1hY19oCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2lu
Y2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKKyNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQW4gQXVkaW9EZXN0aW5hdGlvbiB1c2lu
ZyBDb3JlQXVkaW8ncyBkZWZhdWx0IG91dHB1dCBBdWRpb1VuaXQKKworY2xhc3MgQXVkaW9EZXN0
aW5hdGlvbk1hYyA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uIHsKK3B1YmxpYzoKKyAgICBBdWRp
b0Rlc3RpbmF0aW9uTWFjKEF1ZGlvU291cmNlUHJvdmlkZXImLCBkb3VibGUgc2FtcGxlUmF0ZSk7
CisgICAgdmlydHVhbCB+QXVkaW9EZXN0aW5hdGlvbk1hYygpOworCisgICAgdmlydHVhbCB2b2lk
IHN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKyAgICBib29sIGlzUGxheWluZygp
IHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9CisKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgY29uZmlndXJl
KCk7CisKKyAgICAvLyBEZWZhdWx0T3V0cHV0VW5pdCBjYWxsYmFjaworICAgIHN0YXRpYyBPU1N0
YXR1cyBpbnB1dFByb2Modm9pZCogaW5SZWZDb24sIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdz
KiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgaW5CdXNOdW1iZXIsIFVJbnQzMiBpbk51
bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpOworCisgICAgT1NTdGF0dXMgcmVu
ZGVyKFVJbnQzMiBpbk51bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpOworCisg
ICAgQXVkaW9Vbml0IG1fb3V0cHV0VW5pdDsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyJiBtX3By
b3ZpZGVyOworICAgIEF1ZGlvQnVzIG1fcmVuZGVyQnVzOworCisgICAgZG91YmxlIG1fc2FtcGxl
UmF0ZTsKKyAgICBib29sIG1faXNQbGF5aW5nOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQXVkaW9EZXN0aW5hdGlvbk1hY19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67594</attachid>
            <date>2010-09-14 13:11:04 -0700</date>
            <delta_ts>2010-09-28 10:43:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34716-20100914131103.patch</filename>
            <type>text/plain</type>
            <size>13746</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzQ4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDktMTQgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGF1ZGlvIG91dHB1dCBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDcxNgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBz
aW5jZSBhdWRpbyBBUEkgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4KKworICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Rlc3RpbmF0aW9uOjp+QXVkaW9EZXN0aW5hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rl
c3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9E
ZXN0aW5hdGlvbk1hYzo6QXVkaW9EZXN0aW5hdGlvbk1hYyk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb0Rlc3RpbmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYyk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0Rlc3RpbmF0aW9uTWFjOjpjb25maWd1cmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0
aW5hdGlvbk1hYzo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTWFj
OjpyZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk1hYzo6aW5wdXRQ
cm9jKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25NYWM6OmlzUGxheWlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTWFjOjpzYW1wbGVSYXRlKToK
KwogMjAxMC0wOS0xNCAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0Rlc3RpbmF0aW9uLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRGVzdGluYXRpb24uaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXVkaW9EZXN0aW5hdGlvbl9oCisjZGVmaW5lIEF1
ZGlvRGVzdGluYXRpb25faAorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9Tb3Vy
Y2VQcm92aWRlcjsKKworLy8gQWJzdHJhY3Rpb24gZm9yIGFuIGF1ZGlvIG91dHB1dCB0byB0aGUg
YXVkaW8gaGFyZHdhcmUKKy8vIEFuIEF1ZGlvU291cmNlUHJvdmlkZXIgaXMgY2FsbGVkIGJhY2sg
cGVyaW9kaWNhbGx5IHRvIHByb3ZpZGUgdGhlIHJlbmRlcmVkIGF1ZGlvIHN0cmVhbS4KKworY2xh
c3MgQXVkaW9EZXN0aW5hdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8QXVk
aW9EZXN0aW5hdGlvbj4gY3JlYXRlKEF1ZGlvU291cmNlUHJvdmlkZXImLCBkb3VibGUgc2FtcGxl
UmF0ZSk7CisKKyAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uKCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgc3RhcnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzUGxheWluZygpID0gMDsKKworICAgIC8vIFNhbXBsZS1yYXRlIGNvbnZl
cnNpb24gbWF5IGhhcHBlbiBpbiBBdWRpb0Rlc3RpbmF0aW9uIHRvIHRoZSBoYXJkd2FyZSBzYW1w
bGUtcmF0ZQorICAgIHZpcnR1YWwgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCA9IDA7CisgICAg
c3RhdGljIGRvdWJsZSBoYXJkd2FyZVNhbXBsZVJhdGUoKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEF1ZGlvRGVzdGluYXRpb25faApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFj
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk1h
Yy5oIgorCisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgPENvcmVB
dWRpby9BdWRpb0hhcmR3YXJlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50
IGtCdWZmZXJTaXplID0gMTI4OworCisvLyBGYWN0b3J5IG1ldGhvZDogTWFjLWltcGxlbWVudGF0
aW9uCitQYXNzT3duUHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0
ZShBdWRpb1NvdXJjZVByb3ZpZGVyJiBwcm92aWRlciwgZG91YmxlIHNhbXBsZVJhdGUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBdWRpb0Rlc3RpbmF0aW9uTWFjKHByb3ZpZGVyLCBzYW1w
bGVSYXRlKSk7Cit9CisKK2RvdWJsZSBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJh
dGUoKQoreworICAgIC8vIERldGVybWluZSB0aGUgZGVmYXVsdCBvdXRwdXQgZGV2aWNlJ3Mgc2Ft
cGxlLXJhdGUuCisgICAgQXVkaW9EZXZpY2VJRCBkZXZpY2VJRCA9IGtBdWRpb0RldmljZVVua25v
d247CisgICAgVUludDMyIGluZm9TaXplID0gc2l6ZW9mKGRldmljZUlEKTsKKworICAgIEF1ZGlv
T2JqZWN0UHJvcGVydHlBZGRyZXNzIGRlZmF1bHRJbnB1dERldmljZUFkZHJlc3MgPSB7IGtBdWRp
b0hhcmR3YXJlUHJvcGVydHlEZWZhdWx0SW5wdXREZXZpY2UsIGtBdWRpb09iamVjdFByb3BlcnR5
U2NvcGVHbG9iYWwsIGtBdWRpb09iamVjdFByb3BlcnR5RWxlbWVudE1hc3RlciB9OworICAgIE9T
U3RhdHVzIHJlc3VsdCA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlEYXRhKGtBdWRpb09iamVjdFN5
c3RlbU9iamVjdCwgJmRlZmF1bHRJbnB1dERldmljZUFkZHJlc3MsIDAsIDAsICZpbmZvU2l6ZSwg
KHZvaWQqKSZkZXZpY2VJRCk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIDAuMDsg
Ly8gZXJyb3IKKworICAgIEZsb2F0NjQgbm9taW5hbFNhbXBsZVJhdGU7CisgICAgaW5mb1NpemUg
PSBzaXplb2YoRmxvYXQ2NCk7CisKKyAgICBBdWRpb09iamVjdFByb3BlcnR5QWRkcmVzcyBub21p
bmFsU2FtcGxlUmF0ZUFkZHJlc3MgPSB7IGtBdWRpb0RldmljZVByb3BlcnR5Tm9taW5hbFNhbXBs
ZVJhdGUsIGtBdWRpb09iamVjdFByb3BlcnR5U2NvcGVHbG9iYWwsIGtBdWRpb09iamVjdFByb3Bl
cnR5RWxlbWVudE1hc3RlciB9OworICAgIHJlc3VsdCA9IEF1ZGlvT2JqZWN0R2V0UHJvcGVydHlE
YXRhKGRldmljZUlELCAmbm9taW5hbFNhbXBsZVJhdGVBZGRyZXNzLCAwLCAwLCAmaW5mb1NpemUs
ICh2b2lkKikmbm9taW5hbFNhbXBsZVJhdGUpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJl
dHVybiAwLjA7IC8vIGVycm9yCisKKyAgICByZXR1cm4gbm9taW5hbFNhbXBsZVJhdGU7Cit9CisK
K0F1ZGlvRGVzdGluYXRpb25NYWM6OkF1ZGlvRGVzdGluYXRpb25NYWMoQXVkaW9Tb3VyY2VQcm92
aWRlciYgcHJvdmlkZXIsIGRvdWJsZSBzYW1wbGVSYXRlKQorICAgIDogbV9vdXRwdXRVbml0KDAp
CisgICAgLCBtX3Byb3ZpZGVyKHByb3ZpZGVyKQorICAgICwgbV9yZW5kZXJCdXMoMiwga0J1ZmZl
clNpemUsIGZhbHNlKQorICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCisgICAgLCBtX2lz
UGxheWluZyhmYWxzZSkKK3sKKyAgICAvLyBPcGVuIGFuZCBpbml0aWFsaXplIERlZmF1bHRPdXRw
dXRVbml0CisgICAgQ29tcG9uZW50IGNvbXA7CisgICAgQ29tcG9uZW50RGVzY3JpcHRpb24gZGVz
YzsKKworICAgIGRlc2MuY29tcG9uZW50VHlwZSA9IGtBdWRpb1VuaXRUeXBlX091dHB1dDsKKyAg
ICBkZXNjLmNvbXBvbmVudFN1YlR5cGUgPSBrQXVkaW9Vbml0U3ViVHlwZV9EZWZhdWx0T3V0cHV0
OworICAgIGRlc2MuY29tcG9uZW50TWFudWZhY3R1cmVyID0ga0F1ZGlvVW5pdE1hbnVmYWN0dXJl
cl9BcHBsZTsKKyAgICBkZXNjLmNvbXBvbmVudEZsYWdzID0gMDsKKyAgICBkZXNjLmNvbXBvbmVu
dEZsYWdzTWFzayA9IDA7CisgICAgY29tcCA9IEZpbmROZXh0Q29tcG9uZW50KDAsICZkZXNjKTsK
KworICAgIEFTU0VSVChjb21wKTsKKworICAgIE9TU3RhdHVzIHJlc3VsdCA9IE9wZW5BQ29tcG9u
ZW50KGNvbXAsICZtX291dHB1dFVuaXQpOworICAgIEFTU0VSVCghcmVzdWx0KTsKKworICAgIHJl
c3VsdCA9IEF1ZGlvVW5pdEluaXRpYWxpemUobV9vdXRwdXRVbml0KTsKKyAgICBBU1NFUlQoIXJl
c3VsdCk7CisKKyAgICBjb25maWd1cmUoKTsKK30KKworQXVkaW9EZXN0aW5hdGlvbk1hYzo6fkF1
ZGlvRGVzdGluYXRpb25NYWMoKQoreworICAgIGlmIChtX291dHB1dFVuaXQpCisgICAgICAgIENs
b3NlQ29tcG9uZW50KG1fb3V0cHV0VW5pdCk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbk1h
Yzo6Y29uZmlndXJlKCkKK3sKKyAgICAvLyBTZXQgcmVuZGVyIGNhbGxiYWNrCisgICAgQVVSZW5k
ZXJDYWxsYmFja1N0cnVjdCBpbnB1dDsKKyAgICBpbnB1dC5pbnB1dFByb2MgPSBpbnB1dFByb2M7
CisgICAgaW5wdXQuaW5wdXRQcm9jUmVmQ29uID0gdGhpczsKKyAgICBPU1N0YXR1cyByZXN1bHQg
PSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX291dHB1dFVuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9T
ZXRSZW5kZXJDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwgJmlucHV0LCBzaXpl
b2YoaW5wdXQpKTsKKyAgICBBU1NFUlQoIXJlc3VsdCk7CisKKyAgICAvLyBTZXQgc3RyZWFtIGZv
cm1hdAorICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzdHJlYW1Gb3JtYXQ7CisgICAg
c3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRlID0gbV9zYW1wbGVSYXRlOworICAgIHN0cmVhbUZvcm1h
dC5tRm9ybWF0SUQgPSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ007CisgICAgc3RyZWFtRm9ybWF0Lm1G
b3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzQ2Fub25pY2FsIHwga0F1ZGlvRm9ybWF0Rmxh
Z0lzTm9uSW50ZXJsZWF2ZWQ7CisgICAgc3RyZWFtRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IDgg
KiBzaXplb2YoQXVkaW9TYW1wbGVUeXBlKTsKKyAgICBzdHJlYW1Gb3JtYXQubUNoYW5uZWxzUGVy
RnJhbWUgPSAyOworICAgIHN0cmVhbUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBz
dHJlYW1Gb3JtYXQubUJ5dGVzUGVyUGFja2V0ID0gc2l6ZW9mKEF1ZGlvU2FtcGxlVHlwZSk7Cisg
ICAgc3RyZWFtRm9ybWF0Lm1CeXRlc1BlckZyYW1lID0gc2l6ZW9mKEF1ZGlvU2FtcGxlVHlwZSk7
CisKKyAgICByZXN1bHQgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX291dHB1dFVuaXQsIGtBdWRp
b1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgKHZv
aWQqKSZzdHJlYW1Gb3JtYXQsIHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pKTsK
KyAgICBBU1NFUlQoIXJlc3VsdCk7CisKKyAgICAvLyBTZXQgdGhlIGJ1ZmZlciBmcmFtZSBzaXpl
LgorICAgIFVJbnQzMiBidWZmZXJTaXplID0ga0J1ZmZlclNpemU7CisgICAgcmVzdWx0ID0gQXVk
aW9Vbml0U2V0UHJvcGVydHkobV9vdXRwdXRVbml0LCBrQXVkaW9EZXZpY2VQcm9wZXJ0eUJ1ZmZl
ckZyYW1lU2l6ZSwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgMCwgKHZvaWQqKSZidWZmZXJTaXpl
LCBzaXplb2YoYnVmZmVyU2l6ZSkpOworICAgIEFTU0VSVCghcmVzdWx0KTsKK30KKwordm9pZCBB
dWRpb0Rlc3RpbmF0aW9uTWFjOjpzdGFydCgpCit7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVk
aW9PdXRwdXRVbml0U3RhcnQobV9vdXRwdXRVbml0KTsKKworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICBtX2lzUGxheWluZyA9IHRydWU7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6
c3RvcCgpCit7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RvcChtX291
dHB1dFVuaXQpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIG1faXNQbGF5aW5nID0gZmFs
c2U7Cit9CisKKy8vIFB1bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQgcmVuZGVyZWQgYXVkaW8g
c3RyZWFtLgorT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6cmVuZGVyKFVJbnQzMiBudW1i
ZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7CisgICAgQXVkaW9CdWZmZXIq
IGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZmZXJzOworICAgIG1fcmVuZGVyQnVzLnNldENoYW5uZWxN
ZW1vcnkoMCwgKGZsb2F0KilidWZmZXJzWzBdLm1EYXRhLCBudW1iZXJPZkZyYW1lcyk7CisgICAg
bV9yZW5kZXJCdXMuc2V0Q2hhbm5lbE1lbW9yeSgxLCAoZmxvYXQqKWJ1ZmZlcnNbMV0ubURhdGEs
IG51bWJlck9mRnJhbWVzKTsKKworICAgIG1fcHJvdmlkZXIucHJvdmlkZUlucHV0KCZtX3JlbmRl
ckJ1cywgbnVtYmVyT2ZGcmFtZXMpOworCisgICAgcmV0dXJuIG5vRXJyOworfQorCisvLyBEZWZh
dWx0T3V0cHV0VW5pdCBjYWxsYmFjaworT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6aW5w
dXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0
IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIC8qYnVzTnVtYmVyKi8sIFVJbnQzMiBudW1iZXJPZkZy
YW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7CisgICAgQXVkaW9EZXN0aW5hdGlvbk1h
YyogYXVkaW9PdXRwdXQgPSBzdGF0aWNfY2FzdDxBdWRpb0Rlc3RpbmF0aW9uTWFjKj4odXNlckRh
dGEpOworICAgIHJldHVybiBhdWRpb091dHB1dC0+cmVuZGVyKG51bWJlck9mRnJhbWVzLCBpb0Rh
dGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlv
bk1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVz
dGluYXRpb25NYWMuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0F1ZGlvRGVzdGluYXRpb25NYWMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQXVkaW9EZXN0aW5hdGlvbk1hY19oCisjZGVmaW5lIEF1ZGlvRGVzdGluYXRpb25NYWNf
aAorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uLmgi
CisjaW5jbHVkZSA8QXVkaW9Vbml0L0F1ZGlvVW5pdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIEFuIEF1ZGlvRGVzdGluYXRpb24gdXNpbmcgQ29yZUF1ZGlvJ3MgZGVmYXVsdCBvdXRw
dXQgQXVkaW9Vbml0CisKK2NsYXNzIEF1ZGlvRGVzdGluYXRpb25NYWMgOiBwdWJsaWMgQXVkaW9E
ZXN0aW5hdGlvbiB7CitwdWJsaWM6CisgICAgQXVkaW9EZXN0aW5hdGlvbk1hYyhBdWRpb1NvdXJj
ZVByb3ZpZGVyJiwgZG91YmxlIHNhbXBsZVJhdGUpOworICAgIHZpcnR1YWwgfkF1ZGlvRGVzdGlu
YXRpb25NYWMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCk7CisgICAgYm9vbCBpc1BsYXlpbmcoKSB7IHJldHVybiBtX2lzUGxheWluZzsgfQor
CisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0K
KworcHJpdmF0ZToKKyAgICB2b2lkIGNvbmZpZ3VyZSgpOworCisgICAgLy8gRGVmYXVsdE91dHB1
dFVuaXQgY2FsbGJhY2sKKyAgICBzdGF0aWMgT1NTdGF0dXMgaW5wdXRQcm9jKHZvaWQqIHVzZXJE
YXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwg
VUludDMyIGJ1c051bWJlciwgVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qq
IGlvRGF0YSk7CisKKyAgICBPU1N0YXR1cyByZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBB
dWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7CisKKyAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0Owor
ICAgIEF1ZGlvU291cmNlUHJvdmlkZXImIG1fcHJvdmlkZXI7CisgICAgQXVkaW9CdXMgbV9yZW5k
ZXJCdXM7CisKKyAgICBkb3VibGUgbV9zYW1wbGVSYXRlOworICAgIGJvb2wgbV9pc1BsYXlpbmc7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0
aW9uTWFjX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>