<?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>30676</bug_id>
          
          <creation_ts>2009-10-22 08:49:09 -0700</creation_ts>
          <short_desc>Geolocation maximumAge property is not applied</short_desc>
          <delta_ts>2011-07-28 07:59:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>34084</dependson>
          <blocked>65289</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bolsinga</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>jorlow</cc>
    
    <cc>sfalken</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>156893</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2009-10-22 08:49:09 -0700</bug_when>
    <thetext>The Geolocation API does not apply the PositionOptions.maximumAge property. See http://www.w3.org/TR/geolocation-API/#max-age.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186985</commentid>
    <comment_count>1</comment_count>
      <attachid>47938</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-02 08:51:15 -0800</bug_when>
    <thetext>Created attachment 47938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186987</commentid>
    <comment_count>2</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-02 08:55:34 -0800</bug_when>
    <thetext>Note that this patch is incomplete, as it requires the Geolocation position cache. It is intended to provide context for Bug 34084, which adds the position cache and which blocks this bug.

The patch also lacks layout tests, which sill be added with the final patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193288</commentid>
    <comment_count>3</comment_count>
      <attachid>49374</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-24 03:27:59 -0800</bug_when>
    <thetext>Created attachment 49374
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193289</commentid>
    <comment_count>4</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-24 03:28:57 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=49374) [details]
&gt; Patch
Now that Bug 34084 is fixed, this patch is complete, including LayoutTests, and ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193292</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-24 03:38:11 -0800</bug_when>
    <thetext>Attachment 49374 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/304352</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193307</commentid>
    <comment_count>6</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-24 05:08:10 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Attachment 49374 [details] did not build on chromium:
&gt; Build output: http://webkit-commit-queue.appspot.com/results/304352
The Chromium build failure is a linker error because GeolocationPositionCache is missing. So either I&apos;ve messed up adding GeolocationPositionCache.cpp to the Chromium build or the build-bot needs to make clean. Either way, I think the code is good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194059</commentid>
    <comment_count>7</comment_count>
      <attachid>49374</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-02-26 04:53:56 -0800</bug_when>
    <thetext>Comment on attachment 49374
Patch


&gt; +void Geolocation::GeoNotifier::makeSuccessCallback(Geoposition* position)
&gt; +{
&gt; +    m_successCallback-&gt;handleEvent(position);
&gt; +}

Why do you call these callbacks, when you are not really using them as callbacks? Because they are called async or so? or because you use them as notifiers?


&gt; +                notifier-&gt;setFatalError(PositionError::create(PositionError::POSITION_UNAVAILABLE, &quot;Failed to start Geolocation service&quot;));

I think WebKit has a class to put strings that are supposed to be translated, though I have never used that.


&gt; +void Geolocation::makeCachedPositionCallbacks()
&gt; +{

I got a bit confused with your make callback terminology. So appearently you have callbacks and you add things for it to handle?

judging from 

void Geolocation::GeoNotifier::makeSuccessCallback(Geoposition* position)
{
    m_successCallback-&gt;handleEvent(position);
}

So is this some kind of &quot;handleEventAsSuccess&quot; ?


&gt; +bool Geolocation::haveSuitableCachedPosition(PositionOptions* options)
&gt; +{
&gt; +    if (!m_positionCache-&gt;cachedPosition())
&gt; +        return false;
&gt; +    if (!options-&gt;hasMaximumAge())
&gt; +        return true;
&gt; +    if (!options-&gt;maximumAge())
&gt; +        return false;

It is a bit confusing that hasMaximumAge is false for 0 (which I assume if this is compliant with the spec), but you still have the 0 in the maximumAge, which you check afterward.

&gt;  void Geolocation::setIsAllowed(bool allowed)

setAllowed should be OK I guess.

&gt;      m_allowGeolocation = allowed ? Yes : No;

Why Yes, No and not true false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194143</commentid>
    <comment_count>8</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-26 09:48:53 -0800</bug_when>
    <thetext>Thanks for the review Kenneth

&gt; &gt; +void Geolocation::GeoNotifier::makeSuccessCallback(Geoposition* position)
&gt; &gt; +{
&gt; &gt; +    m_successCallback-&gt;handleEvent(position);
&gt; &gt; +}
&gt; 
&gt; Why do you call these callbacks, when you are not really using them as
&gt; callbacks? Because they are called async or so? or because you use them as
&gt; notifiers?
m_successCallback is a pre-existing member of GeoNotifier, not added in this patch. It&apos;s the callback to JavaScript.

&gt; &gt; +                notifier-&gt;setFatalError(PositionError::create(PositionError::POSITION_UNAVAILABLE, &quot;Failed to start Geolocation service&quot;));
&gt; 
&gt; I think WebKit has a class to put strings that are supposed to be translated,
&gt; though I have never used that.
OK, good to know, I&apos;ll look into it. But this isn&apos;t introduced by this patch, so probably shouldn&apos;t be fixed here.

&gt; &gt; +void Geolocation::makeCachedPositionCallbacks()
&gt; &gt; +{
&gt; 
&gt; I got a bit confused with your make callback terminology. So appearently you
&gt; have callbacks and you add things for it to handle?
No, this is the method that invokes the success callback to JavaScript for all requests that should use a cached position but have been waiting for permissions to be granted.

&gt; &gt; +bool Geolocation::haveSuitableCachedPosition(PositionOptions* options)
&gt; &gt; +{
&gt; &gt; +    if (!m_positionCache-&gt;cachedPosition())
&gt; &gt; +        return false;
&gt; &gt; +    if (!options-&gt;hasMaximumAge())
&gt; &gt; +        return true;
&gt; &gt; +    if (!options-&gt;maximumAge())
&gt; &gt; +        return false;
&gt; 
&gt; It is a bit confusing that hasMaximumAge is false for 0 (which I assume if this
&gt; is compliant with the spec), but you still have the 0 in the maximumAge, which
&gt; you check afterward.
No, hasMaximumAge() returns a boolean which represents whether a maximum age is set. If it hasn&apos;t been set, we don&apos;t apply a maximum age, in which case any cached position is recent enough and we return true (ie we behave as though the maximum age were infinite). Zero is a valid value for the maximum age to be set to, in which case no cached position is recent enough and we return false. See https://bugs.webkit.org/show_bug.cgi?id=27254#c6 and https://bugs.webkit.org/show_bug.cgi?id=29099

FWIW, I think the third if would read much better as  ...

if (options-&gt;maximumAge() == 0)

to make clear it&apos;s a numerical equivalence, not a logical condition, but this doesn&apos;t meet WebKit style.

&gt; &gt;  void Geolocation::setIsAllowed(bool allowed)
&gt; 
&gt; setAllowed should be OK I guess.
&gt; 
&gt; &gt;      m_allowGeolocation = allowed ? Yes : No;
&gt; 
&gt; Why Yes, No and not true false?
I think this is fine as it is, and it&apos;s not changed by this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194146</commentid>
    <comment_count>9</comment_count>
      <attachid>49595</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-26 10:03:13 -0800</bug_when>
    <thetext>Created attachment 49595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194147</commentid>
    <comment_count>10</comment_count>
      <attachid>49596</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-26 10:05:23 -0800</bug_when>
    <thetext>Created attachment 49596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194148</commentid>
    <comment_count>11</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-26 10:06:53 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=49596) [details]
&gt; Patch
Minor update to use a string constant for a duplicated error message</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194160</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-26 10:22:30 -0800</bug_when>
    <thetext>Attachment 49596 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/313627</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197840</commentid>
    <comment_count>13</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-03-09 16:43:45 -0800</bug_when>
    <thetext>Ping!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198189</commentid>
    <comment_count>14</comment_count>
      <attachid>49596</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-10 10:12:06 -0800</bug_when>
    <thetext>Comment on attachment 49596
Patch


&gt; Index: WebCore/page/Geolocation.cpp
&gt; ===================================================================
&gt; --- WebCore/page/Geolocation.cpp	(revision 55163)
&gt; +++ WebCore/page/Geolocation.cpp	(working copy)

&gt; +void Geolocation::GeoNotifier::makeSuccessCallback(Geoposition* position)

Make seems like a confusing word.  run, exec, execute all seem more clear.

&gt; +{
&gt; +    m_successCallback-&gt;handleEvent(position);
&gt; +}
&gt; +
&gt;  void Geolocation::GeoNotifier::startTimerIfNeeded()
&gt;  {
&gt;      if (m_options-&gt;hasTimeout())
&gt; @@ -122,6 +136,14 @@ void Geolocation::GeoNotifier::timerFire
&gt;          return;
&gt;      }
&gt;  
&gt; +    if (m_useCachedPosition) {
&gt; +        // Clear the cached position flag in case this is a watch request, which
&gt; +        // will continue to run.
&gt; +        m_useCachedPosition = false;
&gt; +        m_geolocation-&gt;requestUsesCachedPosition(this);
&gt; +        return;
&gt; +    }
&gt; +
&gt;      if (m_errorCallback) {
&gt;          RefPtr&lt;PositionError&gt; error = PositionError::create(PositionError::TIMEOUT, &quot;Timeout expired&quot;);
&gt;          m_errorCallback-&gt;handleEvent(error.get());
&gt; @@ -155,6 +177,11 @@ void Geolocation::Watchers::remove(GeoNo
&gt;      m_notifierToIdMap.remove(iter);
&gt;  }
&gt;  
&gt; +bool Geolocation::Watchers::contains(GeoNotifier* notifier) const
&gt; +{
&gt; +    return m_notifierToIdMap.contains(notifier);
&gt; +}
&gt; +
&gt;  void Geolocation::Watchers::clear()
&gt;  {
&gt;      m_idToNotifierMap.clear();
&gt; @@ -178,6 +205,7 @@ Geolocation::Geolocation(Frame* frame)
&gt;  #endif
&gt;      , m_allowGeolocation(Unknown)
&gt;      , m_shouldClearCache(false)
&gt; +    , m_positionCache(new GeolocationPositionCache)
&gt;  {
&gt;      if (!m_frame)
&gt;          return;
&gt; @@ -249,14 +277,18 @@ PassRefPtr&lt;Geolocation::GeoNotifier&gt; Geo
&gt;      if (isDenied())
&gt;          notifier-&gt;setFatalError(PositionError::create(PositionError::PERMISSION_DENIED, permissionDeniedErrorMessage));
&gt;      else {

Why isn&apos;t this just an &quot;else if&quot;.  This seems like needless indentation.


&gt; Index: LayoutTests/fast/dom/Geolocation/resources/maximum-age.js
&gt; ===================================================================
&gt; --- LayoutTests/fast/dom/Geolocation/resources/maximum-age.js	(revision 0)
&gt; +++ LayoutTests/fast/dom/Geolocation/resources/maximum-age.js	(revision 0)
&gt; +function testNonZeroMaximumAge() {
&gt; +    // Update the mock service to report an error.
&gt; +    window.layoutTestController.setMockGeolocationError(mockCode, mockMessage);
&gt; +    // The maximumAge is non-zero, so we expect the cached position, not the error from the service.

How does this work, if you set the error here?  Shouldn&apos;t this happen after you get the zero age?

&gt; +    navigator.geolocation.getCurrentPosition(function(p) {
&gt; +        checkPosition(p);
&gt; +        testZeroMaximumAgeError();
&gt; +    }, function(e) {
&gt; +        testFailed(&apos;Error callback invoked unexpectedly&apos;);
&gt; +        window.layoutTestController.notifyDone();
&gt; +    }, {maximumAge: 1000});
&gt; +}
&gt; +
&gt; +function testZeroMaximumAgeError() {
&gt; +    // The default maximumAge is zero, so we expect the error from the service.
&gt; +    navigator.geolocation.getCurrentPosition(function(p) {
&gt; +        testFailed(&apos;Success callback invoked unexpectedly&apos;);
&gt; +        window.layoutTestController.notifyDone();
&gt; +    }, function(e) {
&gt; +        checkError(e);
&gt; +        debug(&apos;&lt;br /&gt;&lt;span class=&quot;pass&quot;&gt;TEST COMPLETE&lt;/span&gt;&apos;);
&gt; +        window.layoutTestController.notifyDone();
&gt; +    });
&gt; +}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198254</commentid>
    <comment_count>15</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-03-10 12:00:08 -0800</bug_when>
    <thetext>&gt; Make seems like a confusing word.  run, exec, execute all seem more clear.
Updated to use &apos;run&apos;

&gt; Why isn&apos;t this just an &quot;else if&quot;.  This seems like needless indentation.
Good point, fixed.

&gt; How does this work, if you set the error here?  Shouldn&apos;t this happen after you
&gt; get the zero age?
testZeroMaximumAge(), which was called previously, tested that when maximumAge is zero, we go to the GeolocationService for the latest position. Here, we configure  the GeolocationService to report an error when it&apos;s next queried. However, we call getCurrentPosition with a non-zero maximumAge, so we don&apos;t go to the GeolocationService,  but instead return the cached position. The final test calls getCurrentPosition again with a zero maximumAge and expects to get the error from the GeolocationService.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198255</commentid>
    <comment_count>16</comment_count>
      <attachid>50420</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-03-10 12:01:01 -0800</bug_when>
    <thetext>Created attachment 50420
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198536</commentid>
    <comment_count>17</comment_count>
      <attachid>50420</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-11 03:12:35 -0800</bug_when>
    <thetext>Comment on attachment 50420
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198542</commentid>
    <comment_count>18</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-03-11 03:39:21 -0800</bug_when>
    <thetext>Committed r55841: &lt;http://trac.webkit.org/changeset/55841&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47938</attachid>
            <date>2010-02-02 08:51:15 -0800</date>
            <delta_ts>2010-02-24 03:27:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30676-20100202165112.patch</filename>
            <type>text/plain</type>
            <size>11633</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDIzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDItMDIgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudHMgR2VvbG9jYXRpb24gbWF4aW11bUFnZSBwcm9wZXJ0eQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2NzYKKworICAgICAgICBObyBu
ZXcgdGVzdHMuCisKKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uLmNwcDogTW9kaWZpZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnNldFVzZUNhY2hlZFBv
c2l0aW9uKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6R2VvTm90aWZp
ZXI6Om1ha2VTdWNjZXNzQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xv
Y2F0aW9uOjpHZW9Ob3RpZmllcjo6dGltZXJGaXJlZCk6IE1vZGlmaWVkLiBBZGRlZCBsb2dpYyB0
byBoYW5kbGUgdXNpbmcgYSBjYWNoZWQgcG9zaXRpb24KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xv
Y2F0aW9uOjpXYXRjaGVyczo6Y29udGFpbnMpOiBBZGRlZC4gUmVxdWlyZWQgdG8gZGV0ZXJtaW5l
IGlmIGEgbm90aWZpZXIgaXMgYSB3YXRjaCByZXF1ZXN0CisgICAgICAgIChXZWJDb3JlOjpHZW9s
b2NhdGlvbjo6c3RhcnRSZXF1ZXN0KTogTW9kaWZpZWQuIEFkZGVkIGxvZ2ljIHRvIGNoZWNrIGZv
ciBhIGNhY2hlZCBwb3NpdGlvbgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OnJlcXVl
c3RVc2VzQ2FjaGVkUG9zaXRpb24pOiBBZGRlZC4gQ2FsbGJhY2sgdG8gR2VvbG9jYXRpb24gb2Jq
ZWN0IHdoZW4gbm90aWZpZXIgdXNlcyBhIGNhY2hlZCBwb3NpdGlvbgorICAgICAgICAoV2ViQ29y
ZTo6R2VvbG9jYXRpb246Om1ha2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OmhhdmVTdWl0YWJsZUNhY2hlZFBvc2l0aW9uKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6c2V0SXNBbGxvd2VkKTogTW9k
aWZpZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6cG9zaXRpb25DaGFuZ2VkKTog
TW9kaWZpZWQuIE1ha2UgY2FsbGJhY2tzIHVzaW5nIGNhY2hlZCBwb3NpdGlvbiB3aGVyZSBhcHBy
b3ByaWF0ZQorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Omdlb2xvY2F0aW9uU2Vydmlj
ZUVycm9yT2NjdXJyZWQpOiBNb2RpZmllZC4gTWFrZSBjYWxsYmFja3MgdXNpbmcgY2FjaGVkIHBv
c2l0aW9uIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvbi5oOiBN
b2RpZmllZC4KKwogMjAxMC0wMi0wMiAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQXJpeWEgSGlkYXlhdC4KSW5kZXg6IFdlYkNvcmUv
cGFnZS9HZW9sb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0
aW9uLmNwcAkocmV2aXNpb24gNTQyMjIpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQg
T3BlbiBTb3VyY2UgUHJvamVjdAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MSw2ICszMiw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogI2lmIEVO
QUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZXMuaCIK
QEAgLTk1LDExICs5NywyMiBAQCB2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6c2V0RmF0
YWxFCiAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7CiB9CiAKK3ZvaWQgR2VvbG9jYXRpb246
Okdlb05vdGlmaWVyOjpzZXRVc2VDYWNoZWRQb3NpdGlvbigpCit7CisgICAgbV91c2VDYWNoZWRQ
b3NpdGlvbiA9IHRydWU7CisgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKIGJvb2wg
R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpoYXNaZXJvVGltZW91dCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fb3B0aW9ucy0+aGFzVGltZW91dCgpICYmIG1fb3B0aW9ucy0+dGltZW91dCgpID09
IDA7CiB9CiAKK3ZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjptYWtlU3VjY2Vzc0NhbGxi
YWNrKEdlb3Bvc2l0aW9uKiBwb3NpdGlvbikKK3sKKyAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFu
ZGxlRXZlbnQocG9zaXRpb24pOworfQorCiB2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6
c3RhcnRUaW1lcklmTmVlZGVkKCkKIHsKICAgICBpZiAobV9vcHRpb25zLT5oYXNUaW1lb3V0KCkp
CkBAIC0xMjIsNiArMTM1LDE0IEBAIHZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1l
ckZpcmUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmIChtX3VzZUNhY2hlZFBvc2l0
aW9uKSB7CisgICAgICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgcG9zaXRpb24gZmxhZyBpbiBjYXNl
IHRoaXMgaXMgYSB3YXRjaCByZXF1ZXN0LCB3aGljaAorICAgICAgICAvLyB3aWxsIGNvbnRpbnVl
IHRvIHJ1bi4KKyAgICAgICAgbV91c2VDYWNoZWRQb3NpdGlvbiA9IGZhbHNlOworICAgICAgICBt
X2dlb2xvY2F0aW9uLT5yZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKHRoaXMpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgewogICAgICAgICBSZWZQ
dHI8UG9zaXRpb25FcnJvcj4gZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25F
cnJvcjo6VElNRU9VVCwgIlRpbWVvdXQgZXhwaXJlZCIpOwogICAgICAgICBtX2Vycm9yQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KGVycm9yLmdldCgpKTsKQEAgLTE1NSw2ICsxNzYsMTEgQEAgdm9pZCBH
ZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZShHZW9ObwogICAgIG1fbm90aWZpZXJUb0lkTWFw
LnJlbW92ZShpdGVyKTsKIH0KIAorYm9vbCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmNvbnRhaW5z
KEdlb05vdGlmaWVyKiBub3RpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub3RpZmllclRv
SWRNYXAuY29udGFpbnMobm90aWZpZXIpOworfQorCiB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVy
czo6Y2xlYXIoKQogewogICAgIG1faWRUb05vdGlmaWVyTWFwLmNsZWFyKCk7CkBAIC0yNDUsMTQg
KzI3MSwxOCBAQCBQYXNzUmVmUHRyPEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcj4gR2VvCiAgICAg
aWYgKGlzRGVuaWVkKCkpCiAgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9u
RXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lv
bkRlbmllZEVycm9yTWVzc2FnZSkpOwogICAgIGVsc2UgewotICAgICAgICBpZiAobm90aWZpZXIt
Pmhhc1plcm9UaW1lb3V0KCkgfHwgc3RhcnRVcGRhdGluZyhub3RpZmllci5nZXQoKSkpIHsKKyAg
ICAgICAgaWYgKGhhdmVTdWl0YWJsZUNhY2hlZFBvc2l0aW9uKG5vdGlmaWVyLT5tX29wdGlvbnMu
Z2V0KCkpKQorICAgICAgICAgICAgbm90aWZpZXItPnNldFVzZUNhY2hlZFBvc2l0aW9uKCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgp
IHx8IHN0YXJ0VXBkYXRpbmcobm90aWZpZXIuZ2V0KCkpKSB7CiAjaWYgRU5BQkxFKENMSUVOVF9C
QVNFRF9HRU9MT0NBVElPTikKLSAgICAgICAgICAgIC8vIE9ubHkgc3RhcnQgdGltZXIgaWYgd2Un
cmUgbm90IHdhaXRpbmcgZm9yIHVzZXIgcGVybWlzc2lvbi4KLSAgICAgICAgICAgIGlmICghbV9z
dGFydFJlcXVlc3RQZXJtaXNzaW9uTm90aWZpZXIpCisgICAgICAgICAgICAgICAgLy8gT25seSBz
dGFydCB0aW1lciBpZiB3ZSdyZSBub3Qgd2FpdGluZyBmb3IgdXNlciBwZXJtaXNzaW9uLgorICAg
ICAgICAgICAgICAgIGlmICghbV9zdGFydFJlcXVlc3RQZXJtaXNzaW9uTm90aWZpZXIpCiAjZW5k
aWYgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVl
ZGVkKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbm90aWZpZXItPnNldEZhdGFsRXJy
b3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxB
QkxFLCAiRmFpbGVkIHRvIHN0YXJ0IEdlb2xvY2F0aW9uIHNlcnZpY2UiKSk7CisgICAgICAgICAg
ICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVySWZOZWVkZWQoKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJy
b3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRSwgIkZhaWxlZCB0
byBzdGFydCBHZW9sb2NhdGlvbiBzZXJ2aWNlIikpOworICAgICAgICB9CiAgICAgfQogCiAgICAg
cmV0dXJuIG5vdGlmaWVyLnJlbGVhc2UoKTsKQEAgLTI2OCw2ICsyOTgsNTYgQEAgdm9pZCBHZW9s
b2NhdGlvbjo6ZmF0YWxFcnJvck9jY3VycmVkKEdlbwogICAgICAgICBzdG9wVXBkYXRpbmcoKTsK
IH0KIAordm9pZCBHZW9sb2NhdGlvbjo6cmVxdWVzdFVzZXNDYWNoZWRQb3NpdGlvbihHZW9Ob3Rp
Zmllciogbm90aWZpZXIpCit7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgYXN5bmNocm9ub3VzbHks
IHNvIHRoZSBwZXJtaXNzaW9ucyBjb3VsZCBoYXZlIGJlZW4gZGVuaWVkCisgICAgLy8gc2luY2Ug
d2UgbGFzdCBjaGVja2VkIGluIHN0YXJ0UmVxdWVzdC4KKyAgICBpZiAoaXNEZW5pZWQoKSkgewor
ICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9z
aXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsIHBlcm1pc3Npb25EZW5pZWRFcnJvck1lc3Nh
Z2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcmVxdWVzdHNBd2FpdGluZ0Nh
Y2hlZFBvc2l0aW9uLmFkZChub3RpZmllcik7CisKKyAgICAvLyBJZiBwZXJtaXNzaW9ucyBhcmUg
YWxsb3dlZCwgbWFrZSB0aGUgY2FsbGJhY2sKKyAgICBpZiAoaXNBbGxvd2VkKCkpIHsKKyAgICAg
ICAgbWFrZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBSZXF1ZXN0IHBlcm1pc3Npb25zLCB3aGljaCBtYXkgYmUgc3luY2hyb25vdXMg
b3IgYXN5bmNocm9ub3VzLgorICAgIHJlcXVlc3RQZXJtaXNzaW9uKCk7Cit9CisKK3ZvaWQgR2Vv
bG9jYXRpb246Om1ha2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcygpCit7CisgICAgLy8gQWxsIG1v
ZGlmaWNhdGlvbnMgdG8gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24gYXJlIGRvbmUK
KyAgICAvLyBhc3luY2hyb25vdXNseSwgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBp
dCBiZWluZyBtb2RpZmllZCBmcm9tCisgICAgLy8gdGhlIGNhbGxiYWNrcy4KKyAgICBHZW9Ob3Rp
ZmllclNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9z
aXRpb24uZW5kKCk7CisgICAgZm9yIChHZW9Ob3RpZmllclNldDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKKyAgICAgICAgR2VvTm90aWZpZXIqIG5vdGlmaWVyID0gaXRlci0+Z2V0KCk7
CisgICAgICAgIC8vIFRPRE86IFJlcXVpcmVzIHBvc2l0aW9uIGNhY2hlCisgICAgICAgIC8vIG5v
dGlmaWVyLT5tYWtlU3VjY2Vzc0NhbGxiYWNrKG1fcG9zaXRpb25DYWNoZS0+Y2FjaGVkUG9zaXRp
b24oKSk7CisKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS1zaG90IHJlcXVlc3QsIHN0b3Ag
aXQuIE90aGVyd2lzZSwgaWYgdGhlIHdhdGNoIHN0aWxsCisgICAgICAgIC8vIGV4aXN0cywgc3Rh
cnQgdGhlIHNlcnZpY2UgdG8gZ2V0IHVwZGF0ZXMuCisgICAgICAgIGlmIChtX29uZVNob3RzLmNv
bnRhaW5zKG5vdGlmaWVyKSkKKyAgICAgICAgICAgIG1fb25lU2hvdHMucmVtb3ZlKG5vdGlmaWVy
KTsKKyAgICAgICAgZWxzZSBpZiAobV93YXRjaGVycy5jb250YWlucyhub3RpZmllcikpIHsKKyAg
ICAgICAgICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBzdGFydFVwZGF0aW5n
KG5vdGlmaWVyKSkKKyAgICAgICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVk
KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbm90aWZpZXItPnNldEZhdGFs
RXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZB
SUxBQkxFLCAiRmFpbGVkIHRvIHN0YXJ0IEdlb2xvY2F0aW9uIHNlcnZpY2UiKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5jbGVhcigp
OworCisgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKKyAgICAgICAgc3RvcFVwZGF0aW5nKCk7Cit9
CisKIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RUaW1lZE91dChHZW9Ob3RpZmllciogbm90aWZp
ZXIpCiB7CiAgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS1zaG90IHJlcXVlc3QsIHN0b3AgaXQuCkBA
IC0yNzcsNiArMzU3LDIxIEBAIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RUaW1lZE91dChHZW9O
b3QKICAgICAgICAgc3RvcFVwZGF0aW5nKCk7CiB9CiAKK2Jvb2wgR2VvbG9jYXRpb246OmhhdmVT
dWl0YWJsZUNhY2hlZFBvc2l0aW9uKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucykKK3sKKyAgICAv
LyBUT0RPOiBSZXF1aXJlcyBwb3NpdGlvbiBjYWNoZQorICAgIC8vIGlmICghbV9wb3NpdGlvbkNh
Y2hlLT5jYWNoZWRQb3NpdGlvbigpKQorICAgIC8vICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFvcHRpb25zLT5oYXNNYXhpbXVtQWdlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
ICghb3B0aW9ucy0+bWF4aW11bUFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8g
VE9ETzogUmVxdWlyZXMgcG9zaXRpb24gY2FjaGUKKyAgICAvLyBET01UaW1lU3RhbXAgY3VycmVu
dFRpbWVNaWxsaXMgPSBjdXJyZW50VGltZSgpICogMTAwMC4wOworICAgIC8vIHJldHVybiBtX3Bv
c2l0aW9uQ2FjaGUtPmNhY2hlZFBvc2l0aW9uKCktPnRpbWVzdGFtcCgpID4gY3VycmVudFRpbWVN
aWxsaXMgLSBvcHRpb25zLT5tYXhpbXVtQWdlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZv
aWQgR2VvbG9jYXRpb246OmNsZWFyV2F0Y2goaW50IHdhdGNoSWQpCiB7CiAgICAgbV93YXRjaGVy
cy5yZW1vdmUod2F0Y2hJZCk7CkBAIC0zMDMsNiArMzk4LDggQEAgdm9pZCBHZW9sb2NhdGlvbjo6
cmVzdW1lKCkKIAogdm9pZCBHZW9sb2NhdGlvbjo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkK
IHsKKyAgICAvLyBUaGlzIG1heSBiZSBkdWUgdG8gZWl0aGVyIGEgbmV3IHBvc2l0aW9uIGZyb20g
dGhlIHNlcnZpY2UsIG9yIGEgY2FjaGVkCisgICAgLy8gcG9zaXRpb24uCiAgICAgbV9hbGxvd0dl
b2xvY2F0aW9uID0gYWxsb3dlZCA/IFllcyA6IE5vOwogICAgIAogI2lmIEVOQUJMRShDTElFTlRf
QkFTRURfR0VPTE9DQVRJT04pCkBAIC0zMjUsMTQgKzQyMiwyMiBAQCB2b2lkIEdlb2xvY2F0aW9u
OjpzZXRJc0FsbG93ZWQoYm9vbCBhbGxvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
LSAgICAKLSAgICBpZiAoaXNBbGxvd2VkKCkpCi0gICAgICAgIG1ha2VTdWNjZXNzQ2FsbGJhY2tz
KCk7Ci0gICAgZWxzZSB7CisKKyAgICBpZiAoIWlzQWxsb3dlZCgpKSB7CiAgICAgICAgIFJlZlB0
cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVy
cm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2FnZSk7CiAg
ICAgICAgIGVycm9yLT5zZXRJc0ZhdGFsKHRydWUpOwogICAgICAgICBoYW5kbGVFcnJvcihlcnJv
ci5nZXQoKSk7CisgICAgICAgIG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uLmNsZWFy
KCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICAvLyBJZiB0aGUgc2VydmljZSBoYXMg
YSBsYXN0IHBvc2l0aW9uLCB1c2UgaXQgdG8gY2FsbCBiYWNrIGZvciBhbGwgcmVxdWVzdHMuCisg
ICAgLy8gSWYgYW55IG9mIHRoZSByZXF1ZXN0cyBhcmUgd2FpdGluZyBmb3IgcGVybWlzc2lvbiBm
b3IgYSBjYWNoZWQgcG9zaXRpb24sCisgICAgLy8gdGhlIHBvc2l0aW9uIGZyb20gdGhlIHNlcnZp
Y2Ugd2lsbCBiZSBhdCBsZWFzdCBhcyBmcmVzaC4KKyAgICBpZiAobGFzdFBvc2l0aW9uKCkpCisg
ICAgICAgIG1ha2VTdWNjZXNzQ2FsbGJhY2tzKCk7CisgICAgZWxzZQorICAgICAgICBtYWtlQ2Fj
aGVkUG9zaXRpb25DYWxsYmFja3MoKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6c2VuZEVycm9y
KFZlY3RvcjxSZWZQdHI8R2VvTm90aWZpZXI+ID4mIG5vdGlmaWVycywgUG9zaXRpb25FcnJvciog
ZXJyb3IpCkBAIC00MzQsNiArNTM5LDkgQEAgdm9pZCBHZW9sb2NhdGlvbjo6cG9zaXRpb25DaGFu
Z2VkKFBhc3NSZQogewogICAgIG1fY3VycmVudFBvc2l0aW9uID0gbmV3UG9zaXRpb247CiAKKyAg
ICAvLyBUT0RPOiBSZXF1aXJlcyBwb3NpdGlvbiBjYWNoZQorICAgIC8vIG1fcG9zaXRpb25DYWNo
ZS0+c2V0Q2FjaGVkUG9zaXRpb24obV9jdXJyZW50UG9zaXRpb24uZ2V0KCkpOworCiAgICAgLy8g
U3RvcCBhbGwgY3VycmVudGx5IHJ1bm5pbmcgdGltZXJzLgogICAgIHN0b3BUaW1lcnMoKTsKICAg
ICAKQEAgLTQ5OSw2ICs2MDcsOSBAQCB2b2lkIEdlb2xvY2F0aW9uOjpnZW9sb2NhdGlvblNlcnZp
Y2VFcnJvCiB7CiAgICAgQVNTRVJUKHNlcnZpY2UtPmxhc3RFcnJvcigpKTsKIAorICAgIC8vIE5v
dGUgdGhhdCB3ZSBkbyBub3Qgc3RvcCB0aW1lcnMgaGVyZS4gRm9yIG9uZS1zaG90cywgdGhlIHJl
cXVlc3QgaXMKKyAgICAvLyBjbGVhcmVkIGluIGhhbmRsZUVycm9yLiBGb3Igd2F0Y2hlcnMsIHRo
ZSBzcGVjIHJlcXVpcmVzIHRoYXQgdGhlIHRpbWVyIGlzCisgICAgLy8gbm90IGNsZWFyZWQuCiAg
ICAgaGFuZGxlRXJyb3Ioc2VydmljZS0+bGFzdEVycm9yKCkpOwogfQogCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvR2VvbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRp
b24uaAkocmV2aXNpb24gNTQyMjIpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMTAsIFRo
ZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtOTMsNiArOTQsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgdm9pZCBz
ZXRGYXRhbEVycm9yKFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4pOwogICAgICAgICBib29sIGhh
c1plcm9UaW1lb3V0KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0VXNlQ2FjaGVkUG9zaXRpb24o
KTsKKyAgICAgICAgdm9pZCBtYWtlU3VjY2Vzc0NhbGxiYWNrKEdlb3Bvc2l0aW9uKik7CiAgICAg
ICAgIHZvaWQgc3RhcnRUaW1lcklmTmVlZGVkKCk7CiAgICAgICAgIHZvaWQgdGltZXJGaXJlZChU
aW1lcjxHZW9Ob3RpZmllcj4qKTsKICAgICAgICAgCkBAIC0xMDIsNiArMTA1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gbV9vcHRpb25zOwogICAgICAgICBU
aW1lcjxHZW9Ob3RpZmllcj4gbV90aW1lcjsKICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+
IG1fZmF0YWxFcnJvcjsKKyAgICAgICAgYm9vbCBtX3VzZUNhY2hlZFBvc2l0aW9uOwogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgR2VvTm90aWZpZXIoR2VvbG9jYXRpb24qLCBQYXNzUmVmUHRyPFBv
c2l0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NS
ZWZQdHI8UG9zaXRpb25PcHRpb25zPik7CkBAIC0xMTIsNiArMTE2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBzZXQoaW50IGlkLCBQYXNzUmVmUHRyPEdlb05vdGlmaWVyPik7CiAgICAgICAg
IHZvaWQgcmVtb3ZlKGludCBpZCk7CiAgICAgICAgIHZvaWQgcmVtb3ZlKEdlb05vdGlmaWVyKik7
CisgICAgICAgIGJvb2wgY29udGFpbnMoR2VvTm90aWZpZXIqKSBjb25zdDsKICAgICAgICAgdm9p
ZCBjbGVhcigpOwogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICAgICAgdm9pZCBn
ZXROb3RpZmllcnNWZWN0b3IoVmVjdG9yPFJlZlB0cjxHZW9Ob3RpZmllcj4gPiYpIGNvbnN0OwpA
QCAtMTUxLDYgKzE1Niw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZhdGFsRXJyb3JPY2N1cnJl
ZChHZW9Ob3RpZmllciopOwogICAgIHZvaWQgcmVxdWVzdFRpbWVkT3V0KEdlb05vdGlmaWVyKik7
CisgICAgdm9pZCByZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyKik7CisgICAg
Ym9vbCBoYXZlU3VpdGFibGVDYWNoZWRQb3NpdGlvbihQb3NpdGlvbk9wdGlvbnMqKTsKKyAgICB2
b2lkIG1ha2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcygpOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0
PFJlZlB0cjxHZW9Ob3RpZmllcj4gPiBHZW9Ob3RpZmllclNldDsKICAgICAKQEAgLTE3Miw2ICsx
ODAsOCBAQCBwcml2YXRlOgogICAgICAgICBObwogICAgIH0gbV9hbGxvd0dlb2xvY2F0aW9uOwog
ICAgIGJvb2wgbV9zaG91bGRDbGVhckNhY2hlOworCisgICAgR2VvTm90aWZpZXJTZXQgbV9yZXF1
ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb247CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49374</attachid>
            <date>2010-02-24 03:27:59 -0800</date>
            <delta_ts>2010-02-26 10:03:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30676-20100224112756.patch</filename>
            <type>text/plain</type>
            <size>19166</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDItMjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudHMgR2VvbG9jYXRpb24gbWF4aW11bUFnZSBwcm9wZXJ0eQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2NzYKKworICAgICAgICBUZXN0
OiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1vZGlmaWVkLiBBZGRzIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZS5oIHRvIFByaXZhdGUgaGVhZGVycworICAgICAgICAqIHBhZ2UvR2VvbG9j
YXRpb24uY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9O
b3RpZmllcjo6c2V0VXNlQ2FjaGVkUG9zaXRpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6bWFrZVN1Y2Nlc3NDYWxsYmFjayk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1lckZpcmVkKTog
TW9kaWZpZWQuIEFkZGVkIGxvZ2ljIHRvIGhhbmRsZSB1c2luZyBhIGNhY2hlZCBwb3NpdGlvbgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OldhdGNoZXJzOjpjb250YWlucyk6IEFkZGVk
LiBSZXF1aXJlZCB0byBkZXRlcm1pbmUgaWYgYSBub3RpZmllciBpcyBhIHdhdGNoIHJlcXVlc3QK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzdGFydFJlcXVlc3QpOiBNb2RpZmllZC4g
QWRkZWQgbG9naWMgdG8gY2hlY2sgZm9yIGEgY2FjaGVkIHBvc2l0aW9uCisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvbjo6cmVxdWVzdFVzZXNDYWNoZWRQb3NpdGlvbik6IEFkZGVkLiBDYWxs
YmFjayB0byBHZW9sb2NhdGlvbiBvYmplY3Qgd2hlbiBub3RpZmllciB1c2VzIGEgY2FjaGVkIHBv
c2l0aW9uCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9u
Q2FsbGJhY2tzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6aGF2ZVN1
aXRhYmxlQ2FjaGVkUG9zaXRpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjpzZXRJc0FsbG93ZWQpOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjpwb3NpdGlvbkNoYW5nZWQpOiBNb2RpZmllZC4gTWFrZSBjYWxsYmFja3MgdXNpbmcgY2Fj
aGVkIHBvc2l0aW9uIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlRXJyb3JPY2N1cnJlZCk6IE1vZGlmaWVkLiBNYWtlIGNh
bGxiYWNrcyB1c2luZyBjYWNoZWQgcG9zaXRpb24gd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAg
KiBwYWdlL0dlb2xvY2F0aW9uLmg6IE1vZGlmaWVkLgorCiAyMDEwLTAyLTIzICBEbWl0cnkgVGl0
b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExl
dmluLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDU1MTYzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTExMTcsNyArMTExNyw3IEBACiAJCTU5MTM5NTNCMTEwNzU4
NDUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU5MTM5NTNBMTEwNzU4NDUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuaCAq
LzsgfTsKIAkJNTkxMzk1M0QxMTA3NTg0RTAwODNFQzU1IC8qIEpOSUJyaWRnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTEzOTUzQzExMDc1ODRF
MDA4M0VDNTUgLyogSk5JQnJpZGdlLmNwcCAqLzsgfTsKIAkJNTk2MjI5NzgxMTMzRUZENzAwREM0
Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTYyMjk3NzExMzNFRkQ3MDBEQzRDQkIgLyogR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCAqLzsgfTsKLQkJNTk2MjI5N0ExMTMzRUZFMjAwREM0
Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk2MjI5NzkxMTMzRUZFMjAwREM0Q0JCIC8qIEdlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZS5oICovOyB9OworCQk1OTYyMjk3QTExMzNFRkUyMDBEQzRDQkIg
LyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1OTYyMjk3OTExMzNFRkUyMDBEQzRDQkIgLyogR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTk5RTc1OTAxMTA1NUExRjAwRDkwNEZBIC8qIEJyaWRnZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk5RTc1OEYxMTA1NUExRjAw
RDkwNEZBIC8qIEJyaWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTU5QTlFN0IwMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlBOUU3
QUYxMTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAgKi87IH07CiAJCTU5QTlF
N0IyMTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5QTlFN0IxMTEwNDc1OTQwMERGQjRDMSAv
KiBKYXZhSW5zdGFuY2VKU0MuaCAqLzsgfTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkocmV2aXNp
b24gNTUxNjMpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJv
amVjdAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMiw3IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogI2lmIEVOQUJMRShDTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZXMuaCIKQEAgLTk1LDExICs5Nywy
MiBAQCB2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6c2V0RmF0YWxFCiAgICAgbV90aW1l
ci5zdGFydE9uZVNob3QoMCk7CiB9CiAKK3ZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpz
ZXRVc2VDYWNoZWRQb3NpdGlvbigpCit7CisgICAgbV91c2VDYWNoZWRQb3NpdGlvbiA9IHRydWU7
CisgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKIGJvb2wgR2VvbG9jYXRpb246Okdl
b05vdGlmaWVyOjpoYXNaZXJvVGltZW91dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3B0aW9u
cy0+aGFzVGltZW91dCgpICYmIG1fb3B0aW9ucy0+dGltZW91dCgpID09IDA7CiB9CiAKK3ZvaWQg
R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjptYWtlU3VjY2Vzc0NhbGxiYWNrKEdlb3Bvc2l0aW9u
KiBwb3NpdGlvbikKK3sKKyAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQocG9zaXRp
b24pOworfQorCiB2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6c3RhcnRUaW1lcklmTmVl
ZGVkKCkKIHsKICAgICBpZiAobV9vcHRpb25zLT5oYXNUaW1lb3V0KCkpCkBAIC0xMjIsNiArMTM1
LDE0IEBAIHZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1lckZpcmUKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIGlmIChtX3VzZUNhY2hlZFBvc2l0aW9uKSB7CisgICAgICAg
IC8vIENsZWFyIHRoZSBjYWNoZWQgcG9zaXRpb24gZmxhZyBpbiBjYXNlIHRoaXMgaXMgYSB3YXRj
aCByZXF1ZXN0LCB3aGljaAorICAgICAgICAvLyB3aWxsIGNvbnRpbnVlIHRvIHJ1bi4KKyAgICAg
ICAgbV91c2VDYWNoZWRQb3NpdGlvbiA9IGZhbHNlOworICAgICAgICBtX2dlb2xvY2F0aW9uLT5y
ZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgewogICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJv
cj4gZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6VElNRU9VVCwg
IlRpbWVvdXQgZXhwaXJlZCIpOwogICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50
KGVycm9yLmdldCgpKTsKQEAgLTE1NSw2ICsxNzYsMTEgQEAgdm9pZCBHZW9sb2NhdGlvbjo6V2F0
Y2hlcnM6OnJlbW92ZShHZW9ObwogICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyKTsK
IH0KIAorYm9vbCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmNvbnRhaW5zKEdlb05vdGlmaWVyKiBu
b3RpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub3RpZmllclRvSWRNYXAuY29udGFpbnMo
bm90aWZpZXIpOworfQorCiB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6Y2xlYXIoKQogewog
ICAgIG1faWRUb05vdGlmaWVyTWFwLmNsZWFyKCk7CkBAIC0xNzgsNiArMjA0LDcgQEAgR2VvbG9j
YXRpb246Okdlb2xvY2F0aW9uKEZyYW1lKiBmcmFtZSkKICNlbmRpZgogICAgICwgbV9hbGxvd0dl
b2xvY2F0aW9uKFVua25vd24pCiAgICAgLCBtX3Nob3VsZENsZWFyQ2FjaGUoZmFsc2UpCisgICAg
LCBtX3Bvc2l0aW9uQ2FjaGUobmV3IEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSkKIHsKICAgICBp
ZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTI0OSwxNCArMjc2LDE4IEBAIFBhc3NS
ZWZQdHI8R2VvbG9jYXRpb246Okdlb05vdGlmaWVyPiBHZW8KICAgICBpZiAoaXNEZW5pZWQoKSkK
ICAgICAgICAgbm90aWZpZXItPnNldEZhdGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBv
c2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNz
YWdlKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQo
KSB8fCBzdGFydFVwZGF0aW5nKG5vdGlmaWVyLmdldCgpKSkgeworICAgICAgICBpZiAoaGF2ZVN1
aXRhYmxlQ2FjaGVkUG9zaXRpb24obm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpCisgICAgICAg
ICAgICBub3RpZmllci0+c2V0VXNlQ2FjaGVkUG9zaXRpb24oKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBpZiAobm90aWZpZXItPmhhc1plcm9UaW1lb3V0KCkgfHwgc3RhcnRVcGRhdGlu
Zyhub3RpZmllci5nZXQoKSkpIHsKICNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9O
KQotICAgICAgICAgICAgLy8gT25seSBzdGFydCB0aW1lciBpZiB3ZSdyZSBub3Qgd2FpdGluZyBm
b3IgdXNlciBwZXJtaXNzaW9uLgotICAgICAgICAgICAgaWYgKCFtX3N0YXJ0UmVxdWVzdFBlcm1p
c3Npb25Ob3RpZmllcikKKyAgICAgICAgICAgICAgICAvLyBPbmx5IHN0YXJ0IHRpbWVyIGlmIHdl
J3JlIG5vdCB3YWl0aW5nIGZvciB1c2VyIHBlcm1pc3Npb24uCisgICAgICAgICAgICAgICAgaWYg
KCFtX3N0YXJ0UmVxdWVzdFBlcm1pc3Npb25Ob3RpZmllcikKICNlbmRpZiAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVySWZOZWVkZWQoKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9y
OjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsICJGYWlsZWQgdG8g
c3RhcnQgR2VvbG9jYXRpb24gc2VydmljZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZp
ZXItPnN0YXJ0VGltZXJJZk5lZWRlZCgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgbm90aWZpZXItPnNldEZhdGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0
aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFLCAiRmFpbGVkIHRvIHN0YXJ0IEdlb2xvY2F0
aW9uIHNlcnZpY2UiKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbm90aWZpZXIu
cmVsZWFzZSgpOwpAQCAtMjcyLDYgKzMwMyw1NSBAQCB2b2lkIEdlb2xvY2F0aW9uOjpmYXRhbEVy
cm9yT2NjdXJyZWQoR2VvCiAgICAgICAgIHN0b3BVcGRhdGluZygpOwogfQogCit2b2lkIEdlb2xv
Y2F0aW9uOjpyZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyKiBub3RpZmllcikK
K3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCBhc3luY2hyb25vdXNseSwgc28gdGhlIHBlcm1pc3Np
b25zIGNvdWxkIGhhdmUgYmVlbiBkZW5pZWQKKyAgICAvLyBzaW5jZSB3ZSBsYXN0IGNoZWNrZWQg
aW4gc3RhcnRSZXF1ZXN0LgorICAgIGlmIChpc0RlbmllZCgpKSB7CisgICAgICAgIG5vdGlmaWVy
LT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJN
SVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2FnZSkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24uYWRk
KG5vdGlmaWVyKTsKKworICAgIC8vIElmIHBlcm1pc3Npb25zIGFyZSBhbGxvd2VkLCBtYWtlIHRo
ZSBjYWxsYmFjaworICAgIGlmIChpc0FsbG93ZWQoKSkgeworICAgICAgICBtYWtlQ2FjaGVkUG9z
aXRpb25DYWxsYmFja3MoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJlcXVl
c3QgcGVybWlzc2lvbnMsIHdoaWNoIG1heSBiZSBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMu
CisgICAgcmVxdWVzdFBlcm1pc3Npb24oKTsKK30KKwordm9pZCBHZW9sb2NhdGlvbjo6bWFrZUNh
Y2hlZFBvc2l0aW9uQ2FsbGJhY2tzKCkKK3sKKyAgICAvLyBBbGwgbW9kaWZpY2F0aW9ucyB0byBt
X3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbiBhcmUgZG9uZQorICAgIC8vIGFzeW5jaHJv
bm91c2x5LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGJlaW5nIG1vZGlmaWVk
IGZyb20KKyAgICAvLyB0aGUgY2FsbGJhY2tzLgorICAgIEdlb05vdGlmaWVyU2V0Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5lbmQoKTsKKyAg
ICBmb3IgKEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yZXF1ZXN0c0F3
YWl0aW5nQ2FjaGVkUG9zaXRpb24uYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAg
ICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdGVyLT5nZXQoKTsKKyAgICAgICAgbm90aWZp
ZXItPm1ha2VTdWNjZXNzQ2FsbGJhY2sobV9wb3NpdGlvbkNhY2hlLT5jYWNoZWRQb3NpdGlvbigp
KTsKKworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVzdCwgc3RvcCBpdC4g
T3RoZXJ3aXNlLCBpZiB0aGUgd2F0Y2ggc3RpbGwKKyAgICAgICAgLy8gZXhpc3RzLCBzdGFydCB0
aGUgc2VydmljZSB0byBnZXQgdXBkYXRlcy4KKyAgICAgICAgaWYgKG1fb25lU2hvdHMuY29udGFp
bnMobm90aWZpZXIpKQorICAgICAgICAgICAgbV9vbmVTaG90cy5yZW1vdmUobm90aWZpZXIpOwor
ICAgICAgICBlbHNlIGlmIChtX3dhdGNoZXJzLmNvbnRhaW5zKG5vdGlmaWVyKSkgeworICAgICAg
ICAgICAgaWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IHN0YXJ0VXBkYXRpbmcobm90
aWZpZXIpKQorICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVySWZOZWVkZWQoKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJv
cihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFC
TEUsICJGYWlsZWQgdG8gc3RhcnQgR2VvbG9jYXRpb24gc2VydmljZSIpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uLmNsZWFyKCk7CisK
KyAgICBpZiAoIWhhc0xpc3RlbmVycygpKQorICAgICAgICBzdG9wVXBkYXRpbmcoKTsKK30KKwog
dm9pZCBHZW9sb2NhdGlvbjo6cmVxdWVzdFRpbWVkT3V0KEdlb05vdGlmaWVyKiBub3RpZmllcikK
IHsKICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVzdCwgc3RvcCBpdC4KQEAgLTI4
MSw2ICszNjEsMTggQEAgdm9pZCBHZW9sb2NhdGlvbjo6cmVxdWVzdFRpbWVkT3V0KEdlb05vdAog
ICAgICAgICBzdG9wVXBkYXRpbmcoKTsKIH0KIAorYm9vbCBHZW9sb2NhdGlvbjo6aGF2ZVN1aXRh
YmxlQ2FjaGVkUG9zaXRpb24oUG9zaXRpb25PcHRpb25zKiBvcHRpb25zKQoreworICAgIGlmICgh
bV9wb3NpdGlvbkNhY2hlLT5jYWNoZWRQb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFvcHRpb25zLT5oYXNNYXhpbXVtQWdlKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmICghb3B0aW9ucy0+bWF4aW11bUFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgRE9NVGltZVN0YW1wIGN1cnJlbnRUaW1lTWlsbGlzID0gY3VycmVudFRpbWUoKSAqIDEw
MDAuMDsKKyAgICByZXR1cm4gbV9wb3NpdGlvbkNhY2hlLT5jYWNoZWRQb3NpdGlvbigpLT50aW1l
c3RhbXAoKSA+IGN1cnJlbnRUaW1lTWlsbGlzIC0gb3B0aW9ucy0+bWF4aW11bUFnZSgpOworfQor
CiB2b2lkIEdlb2xvY2F0aW9uOjpjbGVhcldhdGNoKGludCB3YXRjaElkKQogewogICAgIG1fd2F0
Y2hlcnMucmVtb3ZlKHdhdGNoSWQpOwpAQCAtMzA3LDYgKzM5OSw4IEBAIHZvaWQgR2VvbG9jYXRp
b246OnJlc3VtZSgpCiAKIHZvaWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dlZChib29sIGFsbG93
ZWQpCiB7CisgICAgLy8gVGhpcyBtYXkgYmUgZHVlIHRvIGVpdGhlciBhIG5ldyBwb3NpdGlvbiBm
cm9tIHRoZSBzZXJ2aWNlLCBvciBhIGNhY2hlZAorICAgIC8vIHBvc2l0aW9uLgogICAgIG1fYWxs
b3dHZW9sb2NhdGlvbiA9IGFsbG93ZWQgPyBZZXMgOiBObzsKICAgICAKICNpZiBFTkFCTEUoQ0xJ
RU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQpAQCAtMzI5LDE0ICs0MjMsMjIgQEAgdm9pZCBHZW9sb2Nh
dGlvbjo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsbwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCi0gICAgCi0gICAgaWYgKGlzQWxsb3dlZCgpKQotICAgICAgICBtYWtlU3VjY2Vzc0NhbGxi
YWNrcygpOwotICAgIGVsc2UgeworCisgICAgaWYgKCFpc0FsbG93ZWQoKSkgewogICAgICAgICBS
ZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRp
b25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsIHBlcm1pc3Npb25EZW5pZWRFcnJvck1lc3NhZ2Up
OwogICAgICAgICBlcnJvci0+c2V0SXNGYXRhbCh0cnVlKTsKICAgICAgICAgaGFuZGxlRXJyb3Io
ZXJyb3IuZ2V0KCkpOworICAgICAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5j
bGVhcigpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgLy8gSWYgdGhlIHNlcnZpY2Ug
aGFzIGEgbGFzdCBwb3NpdGlvbiwgdXNlIGl0IHRvIGNhbGwgYmFjayBmb3IgYWxsIHJlcXVlc3Rz
LgorICAgIC8vIElmIGFueSBvZiB0aGUgcmVxdWVzdHMgYXJlIHdhaXRpbmcgZm9yIHBlcm1pc3Np
b24gZm9yIGEgY2FjaGVkIHBvc2l0aW9uLAorICAgIC8vIHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBz
ZXJ2aWNlIHdpbGwgYmUgYXQgbGVhc3QgYXMgZnJlc2guCisgICAgaWYgKGxhc3RQb3NpdGlvbigp
KQorICAgICAgICBtYWtlU3VjY2Vzc0NhbGxiYWNrcygpOworICAgIGVsc2UKKyAgICAgICAgbWFr
ZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKCk7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OnNlbmRF
cnJvcihWZWN0b3I8UmVmUHRyPEdlb05vdGlmaWVyPiA+JiBub3RpZmllcnMsIFBvc2l0aW9uRXJy
b3IqIGVycm9yKQpAQCAtNDM4LDYgKzU0MCw4IEBAIHZvaWQgR2VvbG9jYXRpb246OnBvc2l0aW9u
Q2hhbmdlZChQYXNzUmUKIHsKICAgICBtX2N1cnJlbnRQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwog
CisgICAgbV9wb3NpdGlvbkNhY2hlLT5zZXRDYWNoZWRQb3NpdGlvbihtX2N1cnJlbnRQb3NpdGlv
bi5nZXQoKSk7CisKICAgICAvLyBTdG9wIGFsbCBjdXJyZW50bHkgcnVubmluZyB0aW1lcnMuCiAg
ICAgc3RvcFRpbWVycygpOwogICAgIApAQCAtNTAzLDYgKzYwNyw5IEBAIHZvaWQgR2VvbG9jYXRp
b246Omdlb2xvY2F0aW9uU2VydmljZUVycm8KIHsKICAgICBBU1NFUlQoc2VydmljZS0+bGFzdEVy
cm9yKCkpOwogCisgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBzdG9wIHRpbWVycyBoZXJlLiBG
b3Igb25lLXNob3RzLCB0aGUgcmVxdWVzdCBpcworICAgIC8vIGNsZWFyZWQgaW4gaGFuZGxlRXJy
b3IuIEZvciB3YXRjaGVycywgdGhlIHNwZWMgcmVxdWlyZXMgdGhhdCB0aGUgdGltZXIgaXMKKyAg
ICAvLyBub3QgY2xlYXJlZC4KICAgICBoYW5kbGVFcnJvcihzZXJ2aWNlLT5sYXN0RXJyb3IoKSk7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCShyZXZpc2lvbiA1NTE2MykKKysrIFdlYkNvcmUvcGFn
ZS9HZW9sb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNyw3IEBACiAjaWZuZGVmIEdlb2xv
Y2F0aW9uX2gKICNkZWZpbmUgR2VvbG9jYXRpb25faAogCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25TZXJ2aWNlLmgiCiAjaW5jbHVk
ZSAiR2VvcG9zaXRpb24uaCIKICNpbmNsdWRlICJQb3NpdGlvbkNhbGxiYWNrLmgiCkBAIC05Niw2
ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldEZhdGFsRXJyb3Io
UGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yPik7CiAgICAgICAgIGJvb2wgaGFzWmVyb1RpbWVvdXQo
KSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRVc2VDYWNoZWRQb3NpdGlvbigpOworICAgICAgICB2
b2lkIG1ha2VTdWNjZXNzQ2FsbGJhY2soR2VvcG9zaXRpb24qKTsKICAgICAgICAgdm9pZCBzdGFy
dFRpbWVySWZOZWVkZWQoKTsKICAgICAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEdlb05vdGlm
aWVyPiopOwogICAgICAgICAKQEAgLTEwNSw2ICsxMDksNyBAQCBwcml2YXRlOgogICAgICAgICBS
ZWZQdHI8UG9zaXRpb25PcHRpb25zPiBtX29wdGlvbnM7CiAgICAgICAgIFRpbWVyPEdlb05vdGlm
aWVyPiBtX3RpbWVyOwogICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gbV9mYXRhbEVycm9y
OworICAgICAgICBib29sIG1fdXNlQ2FjaGVkUG9zaXRpb247CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBHZW9Ob3RpZmllcihHZW9sb2NhdGlvbiosIFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFj
az4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlv
bk9wdGlvbnM+KTsKQEAgLTExNSw2ICsxMjAsNyBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIHNl
dChpbnQgaWQsIFBhc3NSZWZQdHI8R2VvTm90aWZpZXI+KTsKICAgICAgICAgdm9pZCByZW1vdmUo
aW50IGlkKTsKICAgICAgICAgdm9pZCByZW1vdmUoR2VvTm90aWZpZXIqKTsKKyAgICAgICAgYm9v
bCBjb250YWlucyhHZW9Ob3RpZmllciopIGNvbnN0OwogICAgICAgICB2b2lkIGNsZWFyKCk7CiAg
ICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgICAgICB2b2lkIGdldE5vdGlmaWVyc1Zl
Y3RvcihWZWN0b3I8UmVmUHRyPEdlb05vdGlmaWVyPiA+JikgY29uc3Q7CkBAIC0xNTQsNiArMTYw
LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZmF0YWxFcnJvck9jY3VycmVkKEdlb05vdGlmaWVy
Kik7CiAgICAgdm9pZCByZXF1ZXN0VGltZWRPdXQoR2VvTm90aWZpZXIqKTsKKyAgICB2b2lkIHJl
cXVlc3RVc2VzQ2FjaGVkUG9zaXRpb24oR2VvTm90aWZpZXIqKTsKKyAgICBib29sIGhhdmVTdWl0
YWJsZUNhY2hlZFBvc2l0aW9uKFBvc2l0aW9uT3B0aW9ucyopOworICAgIHZvaWQgbWFrZUNhY2hl
ZFBvc2l0aW9uQ2FsbGJhY2tzKCk7CiAKICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPEdlb05v
dGlmaWVyPiA+IEdlb05vdGlmaWVyU2V0OwogICAgIApAQCAtMTc1LDYgKzE4NCw5IEBAIHByaXZh
dGU6CiAgICAgICAgIE5vCiAgICAgfSBtX2FsbG93R2VvbG9jYXRpb247CiAgICAgYm9vbCBtX3No
b3VsZENsZWFyQ2FjaGU7CisKKyAgICBPd25QdHI8R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlPiBt
X3Bvc2l0aW9uQ2FjaGU7CisgICAgR2VvTm90aWZpZXJTZXQgbV9yZXF1ZXN0c0F3YWl0aW5nQ2Fj
aGVkUG9zaXRpb247CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNTUxODApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNCBAQAorMjAxMC0wMi0yMyAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50cyBHZW9sb2NhdGlvbiBtYXhpbXVtQWdlIHByb3BlcnR5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDY3NgorCisgICAgICAgICog
ZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL21heGltdW0tYWdlLmpzOiBBZGRlZC4gQ2hl
Y2tzIHRoYXQgYSBjYWNoZWQgcG9zaXRpb24gaXMgdXNlZCBvbmx5IHdoZW4gaXQgc2hvdWxkIGJl
LgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL21heGltdW0tYWdlLmh0bWw6IEFkZGVk
LiBIVE1MIHdyYXBlciBmb3IgYWJvdmUgdGVzdC4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2Nh
dGlvbi9tYXhpbXVtLWFnZS1leHBlY3RlZC50eHQ6IEFkZGVkLiBFeHBlY3RlZCByZXN1bHQgZm9y
IGFib3ZlIHRlc3QuCisKIDIwMTAtMDItMjMgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vbWF4aW11bS1hZ2UtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRp
b24vbWF4aW11bS1hZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBA
CitUZXN0cyB0aGF0IHRoZSBQb3NpdGlvbk9wdGlvbnMubWF4aW11bUFnZSBwYXJhbWV0ZXIgaXMg
Y29ycmVjdGx5IGFwcGxpZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1BBU1MgcG9zaXRpb24uY29vcmRzLmxhdGl0
dWRlIGlzIG1vY2tMYXRpdHVkZQorUEFTUyBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlIGlzIG1v
Y2tMb25naXR1ZGUKK1BBU1MgcG9zaXRpb24uY29vcmRzLmFjY3VyYWN5IGlzIG1vY2tBY2N1cmFj
eQorCitQQVNTIHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSBpcyBtb2NrTGF0aXR1ZGUKK1BBU1Mg
cG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSBpcyBtb2NrTG9uZ2l0dWRlCitQQVNTIHBvc2l0aW9u
LmNvb3Jkcy5hY2N1cmFjeSBpcyBtb2NrQWNjdXJhY3kKKworUEFTUyBwb3NpdGlvbi5jb29yZHMu
bGF0aXR1ZGUgaXMgbW9ja0xhdGl0dWRlCitQQVNTIHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUg
aXMgbW9ja0xvbmdpdHVkZQorUEFTUyBwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3kgaXMgbW9ja0Fj
Y3VyYWN5CisKK1BBU1MgZXJyb3IuY29kZSBpcyBtb2NrQ29kZQorUEFTUyBlcnJvci5tZXNzYWdl
IGlzIG1vY2tNZXNzYWdlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vbWF4aW11bS1hZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vbWF4aW11bS1hZ2UuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9tYXhpbXVtLWFnZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMv
bWF4aW11bS1hZ2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9j
YXRpb24vcmVzb3VyY2VzL21heGltdW0tYWdlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL21heGltdW0tYWdlLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDgxIEBACitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0aGUgUG9zaXRp
b25PcHRpb25zLm1heGltdW1BZ2UgcGFyYW1ldGVyIGlzIGNvcnJlY3RseSBhcHBsaWVkLiIpOwor
Cit2YXIgbW9ja0xhdGl0dWRlID0gNTEuNDc4OwordmFyIG1vY2tMb25naXR1ZGUgPSAtMC4xNjY7
Cit2YXIgbW9ja0FjY3VyYWN5ID0gMTAwLjA7CisKK3ZhciBtb2NrQ29kZSA9IDE7Cit2YXIgbW9j
a01lc3NhZ2UgPSAndGVzdCc7CisKK3ZhciBwb3NpdGlvbjsKK3ZhciBlcnJvcjsKKworZnVuY3Rp
b24gY2hlY2tQb3NpdGlvbihwKSB7CisgICAgZGVidWcoJycpOworICAgIHBvc2l0aW9uID0gcDsK
KyAgICBzaG91bGRCZSgncG9zaXRpb24uY29vcmRzLmxhdGl0dWRlJywgJ21vY2tMYXRpdHVkZScp
OworICAgIHNob3VsZEJlKCdwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlJywgJ21vY2tMb25naXR1
ZGUnKTsKKyAgICBzaG91bGRCZSgncG9zaXRpb24uY29vcmRzLmFjY3VyYWN5JywgJ21vY2tBY2N1
cmFjeScpOworfQorCitmdW5jdGlvbiBjaGVja0Vycm9yKGUpIHsKKyAgICBkZWJ1ZygnJyk7Cisg
ICAgZXJyb3IgPSBlOworICAgIHNob3VsZEJlKCdlcnJvci5jb2RlJywgJ21vY2tDb2RlJyk7Cisg
ICAgc2hvdWxkQmUoJ2Vycm9yLm1lc3NhZ2UnLCAnbW9ja01lc3NhZ2UnKTsKK30KKword2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbih0cnVlKTsKK3dp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihtb2Nr
TGF0aXR1ZGUsIG1vY2tMb25naXR1ZGUsIG1vY2tBY2N1cmFjeSk7CisKKy8vIEluaXRpYWxpemUg
dGhlIGNhY2hlZCBQb3NpdGlvbgorbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3Np
dGlvbihmdW5jdGlvbihwKSB7CisgICAgY2hlY2tQb3NpdGlvbihwKTsKKyAgICB0ZXN0WmVyb01h
eGltdW1BZ2UoKTsKK30sIGZ1bmN0aW9uKGUpIHsKKyAgICB0ZXN0RmFpbGVkKCdFcnJvciBjYWxs
YmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScpOworICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7Cit9KTsKKworZnVuY3Rpb24gdGVzdFplcm9NYXhpbXVtQWdlKCkg
eworICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb24gcHJvdmlkZWQgYnkgdGhlIG1vY2sgc2Vydmlj
ZS4KKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0TW9ja0dlb2xvY2F0aW9uUG9z
aXRpb24oKyttb2NrTGF0aXR1ZGUsICsrbW9ja0xvbmdpdHVkZSwgKyttb2NrQWNjdXJhY3kpOwor
ICAgIC8vIFRoZSBkZWZhdWx0IG1heGltdW1BZ2UgaXMgemVybywgc28gd2UgZXhwZWN0IHRoZSB1
cGRhdGVkIHBvc2l0aW9uIGZyb20gdGhlIHNlcnZpY2UuCisgICAgbmF2aWdhdG9yLmdlb2xvY2F0
aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbihwKSB7CisgICAgICAgIGNoZWNrUG9zaXRp
b24ocCk7CisgICAgICAgIHRlc3ROb25aZXJvTWF4aW11bUFnZSgpOworICAgIH0sIGZ1bmN0aW9u
KGUpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnRXJyb3IgY2FsbGJhY2sgaW52b2tlZCB1bmV4cGVj
dGVkbHknKTsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gdGVzdE5vblplcm9NYXhpbXVtQWdlKCkgeworICAg
IC8vIFVwZGF0ZSB0aGUgbW9jayBzZXJ2aWNlIHRvIHJlcG9ydCBhbiBlcnJvci4KKyAgICB3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0TW9ja0dlb2xvY2F0aW9uRXJyb3IobW9ja0NvZGUs
IG1vY2tNZXNzYWdlKTsKKyAgICAvLyBUaGUgbWF4aW11bUFnZSBpcyBub24temVybywgc28gd2Ug
ZXhwZWN0IHRoZSBjYWNoZWQgcG9zaXRpb24sIG5vdCB0aGUgZXJyb3IgZnJvbSB0aGUgc2Vydmlj
ZS4KKyAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9u
KHApIHsKKyAgICAgICAgY2hlY2tQb3NpdGlvbihwKTsKKyAgICAgICAgdGVzdFplcm9NYXhpbXVt
QWdlRXJyb3IoKTsKKyAgICB9LCBmdW5jdGlvbihlKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ0Vy
cm9yIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgICAgIHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSwge21heGltdW1BZ2U6IDEwMDB9
KTsKK30KKworZnVuY3Rpb24gdGVzdFplcm9NYXhpbXVtQWdlRXJyb3IoKSB7CisgICAgLy8gVGhl
IGRlZmF1bHQgbWF4aW11bUFnZSBpcyB6ZXJvLCBzbyB3ZSBleHBlY3QgdGhlIGVycm9yIGZyb20g
dGhlIHNlcnZpY2UuCisgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlv
bihmdW5jdGlvbihwKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ1N1Y2Nlc3MgY2FsbGJhY2sgaW52
b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICB9LCBmdW5jdGlvbihlKSB7CisgICAgICAgIGNoZWNrRXJyb3Io
ZSk7CisgICAgICAgIGRlYnVnKCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVU
RTwvc3Bhbj4nKTsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICB9KTsKK30KKword2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKwordmFyIGlzQXN5bmNocm9ub3VzID0gdHJ1ZTsKK3ZhciBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49595</attachid>
            <date>2010-02-26 10:03:13 -0800</date>
            <delta_ts>2010-02-26 10:05:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30676-20100226180311.patch</filename>
            <type>text/plain</type>
            <size>23554</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDItMjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudHMgR2VvbG9jYXRpb24gbWF4aW11bUFnZSBwcm9wZXJ0eQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2NzYKKworICAgICAgICBUZXN0
OiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1vZGlmaWVkLiBBZGRzIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZS5oIHRvIFByaXZhdGUgaGVhZGVycworICAgICAgICAqIHBhZ2UvR2VvbG9j
YXRpb24uY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9O
b3RpZmllcjo6c2V0VXNlQ2FjaGVkUG9zaXRpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6bWFrZVN1Y2Nlc3NDYWxsYmFjayk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1lckZpcmVkKTog
TW9kaWZpZWQuIEFkZGVkIGxvZ2ljIHRvIGhhbmRsZSB1c2luZyBhIGNhY2hlZCBwb3NpdGlvbgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OldhdGNoZXJzOjpjb250YWlucyk6IEFkZGVk
LiBSZXF1aXJlZCB0byBkZXRlcm1pbmUgaWYgYSBub3RpZmllciBpcyBhIHdhdGNoIHJlcXVlc3QK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzdGFydFJlcXVlc3QpOiBNb2RpZmllZC4g
QWRkZWQgbG9naWMgdG8gY2hlY2sgZm9yIGEgY2FjaGVkIHBvc2l0aW9uCisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvbjo6cmVxdWVzdFVzZXNDYWNoZWRQb3NpdGlvbik6IEFkZGVkLiBDYWxs
YmFjayB0byBHZW9sb2NhdGlvbiBvYmplY3Qgd2hlbiBub3RpZmllciB1c2VzIGEgY2FjaGVkIHBv
c2l0aW9uCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9u
Q2FsbGJhY2tzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6aGF2ZVN1
aXRhYmxlQ2FjaGVkUG9zaXRpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjpzZXRJc0FsbG93ZWQpOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjpwb3NpdGlvbkNoYW5nZWQpOiBNb2RpZmllZC4gTWFrZSBjYWxsYmFja3MgdXNpbmcgY2Fj
aGVkIHBvc2l0aW9uIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlRXJyb3JPY2N1cnJlZCk6IE1vZGlmaWVkLiBNYWtlIGNh
bGxiYWNrcyB1c2luZyBjYWNoZWQgcG9zaXRpb24gd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAg
KiBwYWdlL0dlb2xvY2F0aW9uLmg6IE1vZGlmaWVkLgorCiAyMDEwLTAyLTIzICBEbWl0cnkgVGl0
b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExl
dmluLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDU1MTYzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTExMTcsNyArMTExNyw3IEBACiAJCTU5MTM5NTNCMTEwNzU4
NDUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU5MTM5NTNBMTEwNzU4NDUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuaCAq
LzsgfTsKIAkJNTkxMzk1M0QxMTA3NTg0RTAwODNFQzU1IC8qIEpOSUJyaWRnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTEzOTUzQzExMDc1ODRF
MDA4M0VDNTUgLyogSk5JQnJpZGdlLmNwcCAqLzsgfTsKIAkJNTk2MjI5NzgxMTMzRUZENzAwREM0
Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTYyMjk3NzExMzNFRkQ3MDBEQzRDQkIgLyogR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCAqLzsgfTsKLQkJNTk2MjI5N0ExMTMzRUZFMjAwREM0
Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk2MjI5NzkxMTMzRUZFMjAwREM0Q0JCIC8qIEdlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZS5oICovOyB9OworCQk1OTYyMjk3QTExMzNFRkUyMDBEQzRDQkIg
LyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1OTYyMjk3OTExMzNFRkUyMDBEQzRDQkIgLyogR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTk5RTc1OTAxMTA1NUExRjAwRDkwNEZBIC8qIEJyaWRnZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk5RTc1OEYxMTA1NUExRjAw
RDkwNEZBIC8qIEJyaWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTU5QTlFN0IwMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlBOUU3
QUYxMTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAgKi87IH07CiAJCTU5QTlF
N0IyMTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5QTlFN0IxMTEwNDc1OTQwMERGQjRDMSAv
KiBKYXZhSW5zdGFuY2VKU0MuaCAqLzsgfTsKQEAgLTk1MDIsNyArOTUwMiw2IEBACiAJCUJDNTZD
QjFFMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNTZDQjFGMTBENUFDODAwMEE3N0M2
NCAvKiBHZW9sb2NhdGlvbkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdlb2xvY2F0aW9uRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1NkNC
MjAxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uUG9zaXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR2VvbG9jYXRpb25Qb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCQzU2Q0NERjEwRDcyQkQ4MDBBNzdDNjQgLyogV2ViQ29yZS5DbGll
bnRCYXNlZEdlb2xvY2F0aW9uLmV4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuZXhwb3J0czsgcGF0
aCA9IFdlYkNvcmUuQ2xpZW50QmFzZWRHZW9sb2NhdGlvbi5leHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDNTgyM0Y0MEMwQTk4REYwMDUzRjFCNSAvKiBKU0hUTUxFbGVtZW50Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTEVsZW1l
bnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzU4MjVGMjBDMEI4
OTM4MDA1M0YxQjUgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNTg4QUVGMEJGQTZDRjkwMEVFNjc5
RSAvKiBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSFRNTFBhcnNlckVycm9yQ29kZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEwODMxLDcgKzEwODMwLDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGOUM2RjRCMTA3
M0VGMDQwMERFRDlCRiAvKiBXZWJDb3JlLjNEUmVuZGVyaW5nLmV4cCAqLywKIAkJCQlGNThFRjU4
RTAyREZERkI3MDE4NjM1Q0EgLyogV2ViQ29yZS5iYXNlLmV4cCAqLywKLQkJCQlCQzU2Q0NERjEw
RDcyQkQ4MDBBNzdDNjQgLyogV2ViQ29yZS5DbGllbnRCYXNlZEdlb2xvY2F0aW9uLmV4cCAqLywK
IAkJCQlGRUZEMTAyQzEwNUM0MTQ3MDAwMjg1NUUgLyogV2ViQ29yZS5Db250ZXh0TWVudXMuZXhw
ICovLAogCQkJCTQ0OTE5NTlEMEZCRTE3RDcwMEQ5RjgyNCAvKiBXZWJDb3JlLkRhc2hib2FyZFN1
cHBvcnQuZXhwICovLAogCQkJCUZFQTQxMzNGMTA1RDY3QUUwMDA3MjM2RiAvKiBXZWJDb3JlLkRy
YWdTdXBwb3J0LmV4cCAqLywKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkocmV2aXNpb24gNTUxNjMp
CisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMu
CisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMiw3IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9D
QVRJT04pCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZXMuaCIKQEAgLTQzLDYgKzQ1LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGNoYXIgcGVybWlzc2lvbkRlbmllZEVycm9y
TWVzc2FnZVtdID0gIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIjsKK3N0YXRpYyBjb25zdCBjaGFy
IGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlW10gPSAiRmFpbGVkIHRvIHN0YXJ0IEdl
b2xvY2F0aW9uIHNlcnZpY2UiOwogCiAjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElP
TikKIApAQCAtOTUsMTEgKzk4LDIyIEBAIHZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpz
ZXRGYXRhbEUKICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAordm9pZCBHZW9sb2Nh
dGlvbjo6R2VvTm90aWZpZXI6OnNldFVzZUNhY2hlZFBvc2l0aW9uKCkKK3sKKyAgICBtX3VzZUNh
Y2hlZFBvc2l0aW9uID0gdHJ1ZTsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwog
Ym9vbCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6Omhhc1plcm9UaW1lb3V0KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9vcHRpb25zLT5oYXNUaW1lb3V0KCkgJiYgbV9vcHRpb25zLT50aW1lb3V0
KCkgPT0gMDsKIH0KIAordm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6Om1ha2VTdWNjZXNz
Q2FsbGJhY2soR2VvcG9zaXRpb24qIHBvc2l0aW9uKQoreworICAgIG1fc3VjY2Vzc0NhbGxiYWNr
LT5oYW5kbGVFdmVudChwb3NpdGlvbik7Cit9CisKIHZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlm
aWVyOjpzdGFydFRpbWVySWZOZWVkZWQoKQogewogICAgIGlmIChtX29wdGlvbnMtPmhhc1RpbWVv
dXQoKSkKQEAgLTEyMiw2ICsxMzYsMTQgQEAgdm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6
OnRpbWVyRmlyZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKG1fdXNlQ2FjaGVk
UG9zaXRpb24pIHsKKyAgICAgICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBwb3NpdGlvbiBmbGFnIGlu
IGNhc2UgdGhpcyBpcyBhIHdhdGNoIHJlcXVlc3QsIHdoaWNoCisgICAgICAgIC8vIHdpbGwgY29u
dGludWUgdG8gcnVuLgorICAgICAgICBtX3VzZUNhY2hlZFBvc2l0aW9uID0gZmFsc2U7CisgICAg
ICAgIG1fZ2VvbG9jYXRpb24tPnJlcXVlc3RVc2VzQ2FjaGVkUG9zaXRpb24odGhpcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAobV9lcnJvckNhbGxiYWNrKSB7CiAgICAgICAg
IFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3Np
dGlvbkVycm9yOjpUSU1FT1VULCAiVGltZW91dCBleHBpcmVkIik7CiAgICAgICAgIG1fZXJyb3JD
YWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOwpAQCAtMTU1LDYgKzE3NywxMSBAQCB2
b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKEdlb05vCiAgICAgbV9ub3RpZmllclRv
SWRNYXAucmVtb3ZlKGl0ZXIpOwogfQogCitib29sIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6Y29u
dGFpbnMoR2VvTm90aWZpZXIqIG5vdGlmaWVyKSBjb25zdAoreworICAgIHJldHVybiBtX25vdGlm
aWVyVG9JZE1hcC5jb250YWlucyhub3RpZmllcik7Cit9CisKIHZvaWQgR2VvbG9jYXRpb246Oldh
dGNoZXJzOjpjbGVhcigpCiB7CiAgICAgbV9pZFRvTm90aWZpZXJNYXAuY2xlYXIoKTsKQEAgLTE3
OCw2ICsyMDUsNyBAQCBHZW9sb2NhdGlvbjo6R2VvbG9jYXRpb24oRnJhbWUqIGZyYW1lKQogI2Vu
ZGlmCiAgICAgLCBtX2FsbG93R2VvbG9jYXRpb24oVW5rbm93bikKICAgICAsIG1fc2hvdWxkQ2xl
YXJDYWNoZShmYWxzZSkKKyAgICAsIG1fcG9zaXRpb25DYWNoZShuZXcgR2VvbG9jYXRpb25Qb3Np
dGlvbkNhY2hlKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ5
LDE0ICsyNzcsMTggQEAgUGFzc1JlZlB0cjxHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI+IEdlbwog
ICAgIGlmIChpc0RlbmllZCgpKQogICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3Np
dGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsIHBlcm1p
c3Npb25EZW5pZWRFcnJvck1lc3NhZ2UpKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKG5vdGlm
aWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IHN0YXJ0VXBkYXRpbmcobm90aWZpZXIuZ2V0KCkpKSB7
CisgICAgICAgIGlmIChoYXZlU3VpdGFibGVDYWNoZWRQb3NpdGlvbihub3RpZmllci0+bV9vcHRp
b25zLmdldCgpKSkKKyAgICAgICAgICAgIG5vdGlmaWVyLT5zZXRVc2VDYWNoZWRQb3NpdGlvbigp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVv
dXQoKSB8fCBzdGFydFVwZGF0aW5nKG5vdGlmaWVyLmdldCgpKSkgewogI2lmIEVOQUJMRShDTElF
TlRfQkFTRURfR0VPTE9DQVRJT04pCi0gICAgICAgICAgICAvLyBPbmx5IHN0YXJ0IHRpbWVyIGlm
IHdlJ3JlIG5vdCB3YWl0aW5nIGZvciB1c2VyIHBlcm1pc3Npb24uCi0gICAgICAgICAgICBpZiAo
IW1fc3RhcnRSZXF1ZXN0UGVybWlzc2lvbk5vdGlmaWVyKQorICAgICAgICAgICAgICAgIC8vIE9u
bHkgc3RhcnQgdGltZXIgaWYgd2UncmUgbm90IHdhaXRpbmcgZm9yIHVzZXIgcGVybWlzc2lvbi4K
KyAgICAgICAgICAgICAgICBpZiAoIW1fc3RhcnRSZXF1ZXN0UGVybWlzc2lvbk5vdGlmaWVyKQog
I2VuZGlmICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm90aWZpZXItPnN0YXJ0VGltZXJJ
Zk5lZWRlZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRh
bEVycm9yKFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFW
QUlMQUJMRSwgIkZhaWxlZCB0byBzdGFydCBHZW9sb2NhdGlvbiBzZXJ2aWNlIikpOworICAgICAg
ICAgICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3NpdGlv
bkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsIGZhaWxl
ZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBy
ZXR1cm4gbm90aWZpZXIucmVsZWFzZSgpOwpAQCAtMjcyLDYgKzMwNCw1NSBAQCB2b2lkIEdlb2xv
Y2F0aW9uOjpmYXRhbEVycm9yT2NjdXJyZWQoR2VvCiAgICAgICAgIHN0b3BVcGRhdGluZygpOwog
fQogCit2b2lkIEdlb2xvY2F0aW9uOjpyZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKEdlb05vdGlm
aWVyKiBub3RpZmllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCBhc3luY2hyb25vdXNseSwg
c28gdGhlIHBlcm1pc3Npb25zIGNvdWxkIGhhdmUgYmVlbiBkZW5pZWQKKyAgICAvLyBzaW5jZSB3
ZSBsYXN0IGNoZWNrZWQgaW4gc3RhcnRSZXF1ZXN0LgorICAgIGlmIChpc0RlbmllZCgpKSB7Cisg
ICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3Np
dGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2Fn
ZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZXF1ZXN0c0F3YWl0aW5nQ2Fj
aGVkUG9zaXRpb24uYWRkKG5vdGlmaWVyKTsKKworICAgIC8vIElmIHBlcm1pc3Npb25zIGFyZSBh
bGxvd2VkLCBtYWtlIHRoZSBjYWxsYmFjaworICAgIGlmIChpc0FsbG93ZWQoKSkgeworICAgICAg
ICBtYWtlQ2FjaGVkUG9zaXRpb25DYWxsYmFja3MoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIFJlcXVlc3QgcGVybWlzc2lvbnMsIHdoaWNoIG1heSBiZSBzeW5jaHJvbm91cyBv
ciBhc3luY2hyb25vdXMuCisgICAgcmVxdWVzdFBlcm1pc3Npb24oKTsKK30KKwordm9pZCBHZW9s
b2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKCkKK3sKKyAgICAvLyBBbGwgbW9k
aWZpY2F0aW9ucyB0byBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbiBhcmUgZG9uZQor
ICAgIC8vIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0
IGJlaW5nIG1vZGlmaWVkIGZyb20KKyAgICAvLyB0aGUgY2FsbGJhY2tzLgorICAgIEdlb05vdGlm
aWVyU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3Np
dGlvbi5lbmQoKTsKKyAgICBmb3IgKEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24uYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgeworICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdGVyLT5nZXQoKTsK
KyAgICAgICAgbm90aWZpZXItPm1ha2VTdWNjZXNzQ2FsbGJhY2sobV9wb3NpdGlvbkNhY2hlLT5j
YWNoZWRQb3NpdGlvbigpKTsKKworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVx
dWVzdCwgc3RvcCBpdC4gT3RoZXJ3aXNlLCBpZiB0aGUgd2F0Y2ggc3RpbGwKKyAgICAgICAgLy8g
ZXhpc3RzLCBzdGFydCB0aGUgc2VydmljZSB0byBnZXQgdXBkYXRlcy4KKyAgICAgICAgaWYgKG1f
b25lU2hvdHMuY29udGFpbnMobm90aWZpZXIpKQorICAgICAgICAgICAgbV9vbmVTaG90cy5yZW1v
dmUobm90aWZpZXIpOworICAgICAgICBlbHNlIGlmIChtX3dhdGNoZXJzLmNvbnRhaW5zKG5vdGlm
aWVyKSkgeworICAgICAgICAgICAgaWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IHN0
YXJ0VXBkYXRpbmcobm90aWZpZXIpKQorICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRp
bWVySWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub3RpZmll
ci0+c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9T
SVRJT05fVU5BVkFJTEFCTEUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5j
bGVhcigpOworCisgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKKyAgICAgICAgc3RvcFVwZGF0aW5n
KCk7Cit9CisKIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RUaW1lZE91dChHZW9Ob3RpZmllciog
bm90aWZpZXIpCiB7CiAgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS1zaG90IHJlcXVlc3QsIHN0b3Ag
aXQuCkBAIC0yODEsNiArMzYyLDE4IEBAIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RUaW1lZE91
dChHZW9Ob3QKICAgICAgICAgc3RvcFVwZGF0aW5nKCk7CiB9CiAKK2Jvb2wgR2VvbG9jYXRpb246
OmhhdmVTdWl0YWJsZUNhY2hlZFBvc2l0aW9uKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucykKK3sK
KyAgICBpZiAoIW1fcG9zaXRpb25DYWNoZS0+Y2FjaGVkUG9zaXRpb24oKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmICghb3B0aW9ucy0+aGFzTWF4aW11bUFnZSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW9wdGlvbnMtPm1heGltdW1BZ2UoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIERPTVRpbWVTdGFtcCBjdXJyZW50VGltZU1pbGxpcyA9IGN1cnJlbnRU
aW1lKCkgKiAxMDAwLjA7CisgICAgcmV0dXJuIG1fcG9zaXRpb25DYWNoZS0+Y2FjaGVkUG9zaXRp
b24oKS0+dGltZXN0YW1wKCkgPiBjdXJyZW50VGltZU1pbGxpcyAtIG9wdGlvbnMtPm1heGltdW1B
Z2UoKTsKK30KKwogdm9pZCBHZW9sb2NhdGlvbjo6Y2xlYXJXYXRjaChpbnQgd2F0Y2hJZCkKIHsK
ICAgICBtX3dhdGNoZXJzLnJlbW92ZSh3YXRjaElkKTsKQEAgLTMwNyw2ICs0MDAsOCBAQCB2b2lk
IEdlb2xvY2F0aW9uOjpyZXN1bWUoKQogCiB2b2lkIEdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQo
Ym9vbCBhbGxvd2VkKQogeworICAgIC8vIFRoaXMgbWF5IGJlIGR1ZSB0byBlaXRoZXIgYSBuZXcg
cG9zaXRpb24gZnJvbSB0aGUgc2VydmljZSwgb3IgYSBjYWNoZWQKKyAgICAvLyBwb3NpdGlvbi4K
ICAgICBtX2FsbG93R2VvbG9jYXRpb24gPSBhbGxvd2VkID8gWWVzIDogTm87CiAgICAgCiAjaWYg
RU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKQEAgLTMyOSwxNCArNDI0LDIyIEBAIHZv
aWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dlZChib29sIGFsbG8KICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgotICAgIAotICAgIGlmIChpc0FsbG93ZWQoKSkKLSAgICAgICAgbWFrZVN1
Y2Nlc3NDYWxsYmFja3MoKTsKLSAgICBlbHNlIHsKKworICAgIGlmICghaXNBbGxvd2VkKCkpIHsK
ICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yID0gUG9zaXRpb25FcnJvcjo6Y3Jl
YXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCBwZXJtaXNzaW9uRGVuaWVkRXJy
b3JNZXNzYWdlKTsKICAgICAgICAgZXJyb3ItPnNldElzRmF0YWwodHJ1ZSk7CiAgICAgICAgIGhh
bmRsZUVycm9yKGVycm9yLmdldCgpKTsKKyAgICAgICAgbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVk
UG9zaXRpb24uY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8vIElmIHRo
ZSBzZXJ2aWNlIGhhcyBhIGxhc3QgcG9zaXRpb24sIHVzZSBpdCB0byBjYWxsIGJhY2sgZm9yIGFs
bCByZXF1ZXN0cy4KKyAgICAvLyBJZiBhbnkgb2YgdGhlIHJlcXVlc3RzIGFyZSB3YWl0aW5nIGZv
ciBwZXJtaXNzaW9uIGZvciBhIGNhY2hlZCBwb3NpdGlvbiwKKyAgICAvLyB0aGUgcG9zaXRpb24g
ZnJvbSB0aGUgc2VydmljZSB3aWxsIGJlIGF0IGxlYXN0IGFzIGZyZXNoLgorICAgIGlmIChsYXN0
UG9zaXRpb24oKSkKKyAgICAgICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3MoKTsKKyAgICBlbHNlCisg
ICAgICAgIG1ha2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcygpOwogfQogCiB2b2lkIEdlb2xvY2F0
aW9uOjpzZW5kRXJyb3IoVmVjdG9yPFJlZlB0cjxHZW9Ob3RpZmllcj4gPiYgbm90aWZpZXJzLCBQ
b3NpdGlvbkVycm9yKiBlcnJvcikKQEAgLTQzOCw2ICs1NDEsOCBAQCB2b2lkIEdlb2xvY2F0aW9u
Ojpwb3NpdGlvbkNoYW5nZWQoUGFzc1JlCiB7CiAgICAgbV9jdXJyZW50UG9zaXRpb24gPSBuZXdQ
b3NpdGlvbjsKIAorICAgIG1fcG9zaXRpb25DYWNoZS0+c2V0Q2FjaGVkUG9zaXRpb24obV9jdXJy
ZW50UG9zaXRpb24uZ2V0KCkpOworCiAgICAgLy8gU3RvcCBhbGwgY3VycmVudGx5IHJ1bm5pbmcg
dGltZXJzLgogICAgIHN0b3BUaW1lcnMoKTsKICAgICAKQEAgLTUwMyw2ICs2MDgsOSBAQCB2b2lk
IEdlb2xvY2F0aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VFcnJvCiB7CiAgICAgQVNTRVJUKHNlcnZp
Y2UtPmxhc3RFcnJvcigpKTsKIAorICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBub3Qgc3RvcCB0aW1l
cnMgaGVyZS4gRm9yIG9uZS1zaG90cywgdGhlIHJlcXVlc3QgaXMKKyAgICAvLyBjbGVhcmVkIGlu
IGhhbmRsZUVycm9yLiBGb3Igd2F0Y2hlcnMsIHRoZSBzcGVjIHJlcXVpcmVzIHRoYXQgdGhlIHRp
bWVyIGlzCisgICAgLy8gbm90IGNsZWFyZWQuCiAgICAgaGFuZGxlRXJyb3Ioc2VydmljZS0+bGFz
dEVycm9yKCkpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAkocmV2aXNpb24gNTUxNjMpCisrKyBX
ZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjcsNyBAQAogI2lm
bmRlZiBHZW9sb2NhdGlvbl9oCiAjZGVmaW5lIEdlb2xvY2F0aW9uX2gKIAorI2luY2x1ZGUgIkdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5o
IgogI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUG9zaXRpb25DYWxsYmFjay5o
IgpAQCAtOTYsNiArOTgsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgdm9pZCBzZXRG
YXRhbEVycm9yKFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4pOwogICAgICAgICBib29sIGhhc1pl
cm9UaW1lb3V0KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0VXNlQ2FjaGVkUG9zaXRpb24oKTsK
KyAgICAgICAgdm9pZCBtYWtlU3VjY2Vzc0NhbGxiYWNrKEdlb3Bvc2l0aW9uKik7CiAgICAgICAg
IHZvaWQgc3RhcnRUaW1lcklmTmVlZGVkKCk7CiAgICAgICAgIHZvaWQgdGltZXJGaXJlZChUaW1l
cjxHZW9Ob3RpZmllcj4qKTsKICAgICAgICAgCkBAIC0xMDUsNiArMTA5LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gbV9vcHRpb25zOwogICAgICAgICBUaW1l
cjxHZW9Ob3RpZmllcj4gbV90aW1lcjsKICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IG1f
ZmF0YWxFcnJvcjsKKyAgICAgICAgYm9vbCBtX3VzZUNhY2hlZFBvc2l0aW9uOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgR2VvTm90aWZpZXIoR2VvbG9jYXRpb24qLCBQYXNzUmVmUHRyPFBvc2l0
aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8UG9zaXRpb25PcHRpb25zPik7CkBAIC0xMTUsNiArMTIwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBzZXQoaW50IGlkLCBQYXNzUmVmUHRyPEdlb05vdGlmaWVyPik7CiAgICAgICAgIHZv
aWQgcmVtb3ZlKGludCBpZCk7CiAgICAgICAgIHZvaWQgcmVtb3ZlKEdlb05vdGlmaWVyKik7Cisg
ICAgICAgIGJvb2wgY29udGFpbnMoR2VvTm90aWZpZXIqKSBjb25zdDsKICAgICAgICAgdm9pZCBj
bGVhcigpOwogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICAgICAgdm9pZCBnZXRO
b3RpZmllcnNWZWN0b3IoVmVjdG9yPFJlZlB0cjxHZW9Ob3RpZmllcj4gPiYpIGNvbnN0OwpAQCAt
MTU0LDYgKzE2MCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZhdGFsRXJyb3JPY2N1cnJlZChH
ZW9Ob3RpZmllciopOwogICAgIHZvaWQgcmVxdWVzdFRpbWVkT3V0KEdlb05vdGlmaWVyKik7Cisg
ICAgdm9pZCByZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyKik7CisgICAgYm9v
bCBoYXZlU3VpdGFibGVDYWNoZWRQb3NpdGlvbihQb3NpdGlvbk9wdGlvbnMqKTsKKyAgICB2b2lk
IG1ha2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcygpOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJl
ZlB0cjxHZW9Ob3RpZmllcj4gPiBHZW9Ob3RpZmllclNldDsKICAgICAKQEAgLTE3NSw2ICsxODQs
OSBAQCBwcml2YXRlOgogICAgICAgICBObwogICAgIH0gbV9hbGxvd0dlb2xvY2F0aW9uOwogICAg
IGJvb2wgbV9zaG91bGRDbGVhckNhY2hlOworCisgICAgT3duUHRyPEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZT4gbV9wb3NpdGlvbkNhY2hlOworICAgIEdlb05vdGlmaWVyU2V0IG1fcmVxdWVzdHNB
d2FpdGluZ0NhY2hlZFBvc2l0aW9uOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dlb2xvY2F0aW9uU2VydmljZU1hYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dlb2xvY2F0aW9uU2VydmljZU1hYy5oCShy
ZXZpc2lvbiA1NTE2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dlb2xvY2F0aW9uU2Vydmlj
ZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAorLyoKICNpZmRlZiBfX09CSkNf
XwogQGNsYXNzIENMTG9jYXRpb25NYW5hZ2VyOwogQGNsYXNzIFdlYkNvcmVDb3JlTG9jYXRpb25P
YnNlcnZlcjsKQEAgLTcxLDYgKzcyLDcgQEAgcHJpdmF0ZToKIH07CiAgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisqLwogCiAjZW5kaWYgLy8gRU5BQkxFKEdFT0xPQ0FUSU9OKQogCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9HZW9sb2NhdGlvblNlcnZpY2VNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFjLm1tCShyZXZp
c2lvbiA1NTE2MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dlb2xvY2F0aW9uU2VydmljZU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW1wb3J0ICJHZW9sb2Nh
dGlvblNlcnZpY2VNYWMuaCIKIAorLyoKICNpbXBvcnQgIkdlb3Bvc2l0aW9uLmgiCiAjaW1wb3J0
ICJQb3NpdGlvbkVycm9yLmgiCiAjaW1wb3J0ICJQb3NpdGlvbk9wdGlvbnMuaCIKQEAgLTYyLDkg
KzYzLDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogLSAodm9pZClsb2NhdGlvbk1hbmFn
ZXI6KENMTG9jYXRpb25NYW5hZ2VyICopbWFuYWdlciBkaWRGYWlsV2l0aEVycm9yOihOU0Vycm9y
ICopZXJyb3I7CiAKIEBlbmQKKyovCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorR2VvbG9jYXRp
b25TZXJ2aWNlKiBjcmVhdGVOdWxsKEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCopCit7CisgICAg
cmV0dXJuIDA7Cit9CitHZW9sb2NhdGlvblNlcnZpY2U6OkZhY3RvcnlGdW5jdGlvbiogR2VvbG9j
YXRpb25TZXJ2aWNlOjpzX2ZhY3RvcnlGdW5jdGlvbiA9ICZjcmVhdGVOdWxsOworCisvKgogR2Vv
bG9jYXRpb25TZXJ2aWNlKiBHZW9sb2NhdGlvblNlcnZpY2VNYWM6OmNyZWF0ZShHZW9sb2NhdGlv
blNlcnZpY2VDbGllbnQqIGNsaWVudCkKIHsKICAgICByZXR1cm4gbmV3IEdlb2xvY2F0aW9uU2Vy
dmljZU1hYyhjbGllbnQpOwpAQCAtMTM0LDkgKzE0MywxMSBAQCB2b2lkIEdlb2xvY2F0aW9uU2Vy
dmljZU1hYzo6ZXJyb3JPY2N1cnJlCiAgICAgbV9sYXN0RXJyb3IgPSBlcnJvcjsKICAgICBHZW9s
b2NhdGlvblNlcnZpY2U6OmVycm9yT2NjdXJyZWQoKTsKIH0KKyovCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAorLyoKIEBpbXBsZW1lbnRhdGlvbiBXZWJDb3JlQ29yZUxvY2F0aW9uT2JzZXJ2
ZXIKIAogLSAoaWQpaW5pdFdpdGhDYWxsYmFjazooR2VvbG9jYXRpb25TZXJ2aWNlTWFjICopY2Fs
bGJhY2sKQEAgLTIxNyw1ICsyMjgsNiBAQCB2b2lkIEdlb2xvY2F0aW9uU2VydmljZU1hYzo6ZXJy
b3JPY2N1cnJlCiB9CiAKIEBlbmQKKyovCiAKICNlbmRpZiAvLyBFTkFCTEUoR0VPTE9DQVRJT04p
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA1NTE4MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTAyLTIzICBTdGV2ZSBCbG9jayAgPHN0
ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIEdlb2xvY2F0aW9uIG1heGltdW1BZ2UgcHJvcGVydHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNjc2CisK
KyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvbWF4aW11bS1hZ2UuanM6
IEFkZGVkLiBDaGVja3MgdGhhdCBhIGNhY2hlZCBwb3NpdGlvbiBpcyB1c2VkIG9ubHkgd2hlbiBp
dCBzaG91bGQgYmUuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vbWF4aW11bS1hZ2Uu
aHRtbDogQWRkZWQuIEhUTUwgd3JhcGVyIGZvciBhYm92ZSB0ZXN0LgorICAgICAgICAqIGZhc3Qv
ZG9tL0dlb2xvY2F0aW9uL21heGltdW0tYWdlLWV4cGVjdGVkLnR4dDogQWRkZWQuIEV4cGVjdGVk
IHJlc3VsdCBmb3IgYWJvdmUgdGVzdC4KKwogMjAxMC0wMi0yMyAgRW5yaWNhIENhc3VjY2kgIDxl
bnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL21heGltdW0tYWdlLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhp
bXVtLWFnZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjQgQEAKK1Rlc3RzIHRoYXQgdGhlIFBvc2l0aW9uT3B0aW9ucy5tYXhpbXVtQWdlIHBh
cmFtZXRlciBpcyBjb3JyZWN0bHkgYXBwbGllZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworUEFTUyBwb3NpdGlvbi5j
b29yZHMubGF0aXR1ZGUgaXMgbW9ja0xhdGl0dWRlCitQQVNTIHBvc2l0aW9uLmNvb3Jkcy5sb25n
aXR1ZGUgaXMgbW9ja0xvbmdpdHVkZQorUEFTUyBwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3kgaXMg
bW9ja0FjY3VyYWN5CisKK1BBU1MgcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlIGlzIG1vY2tMYXRp
dHVkZQorUEFTUyBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlIGlzIG1vY2tMb25naXR1ZGUKK1BB
U1MgcG9zaXRpb24uY29vcmRzLmFjY3VyYWN5IGlzIG1vY2tBY2N1cmFjeQorCitQQVNTIHBvc2l0
aW9uLmNvb3Jkcy5sYXRpdHVkZSBpcyBtb2NrTGF0aXR1ZGUKK1BBU1MgcG9zaXRpb24uY29vcmRz
LmxvbmdpdHVkZSBpcyBtb2NrTG9uZ2l0dWRlCitQQVNTIHBvc2l0aW9uLmNvb3Jkcy5hY2N1cmFj
eSBpcyBtb2NrQWNjdXJhY3kKKworUEFTUyBlcnJvci5jb2RlIGlzIG1vY2tDb2RlCitQQVNTIGVy
cm9yLm1lc3NhZ2UgaXMgbW9ja01lc3NhZ2UKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL21heGltdW0tYWdlLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFn
ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL21heGltdW0tYWdlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9u
L3Jlc291cmNlcy9tYXhpbXVtLWFnZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvbWF4aW11bS1hZ2UuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvbWF4aW11bS1hZ2Uu
anMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0
IHRoZSBQb3NpdGlvbk9wdGlvbnMubWF4aW11bUFnZSBwYXJhbWV0ZXIgaXMgY29ycmVjdGx5IGFw
cGxpZWQuIik7CisKK3ZhciBtb2NrTGF0aXR1ZGUgPSA1MS40Nzg7Cit2YXIgbW9ja0xvbmdpdHVk
ZSA9IC0wLjE2NjsKK3ZhciBtb2NrQWNjdXJhY3kgPSAxMDAuMDsKKwordmFyIG1vY2tDb2RlID0g
MTsKK3ZhciBtb2NrTWVzc2FnZSA9ICd0ZXN0JzsKKwordmFyIHBvc2l0aW9uOwordmFyIGVycm9y
OworCitmdW5jdGlvbiBjaGVja1Bvc2l0aW9uKHApIHsKKyAgICBkZWJ1ZygnJyk7CisgICAgcG9z
aXRpb24gPSBwOworICAgIHNob3VsZEJlKCdwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUnLCAnbW9j
a0xhdGl0dWRlJyk7CisgICAgc2hvdWxkQmUoJ3Bvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUnLCAn
bW9ja0xvbmdpdHVkZScpOworICAgIHNob3VsZEJlKCdwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3kn
LCAnbW9ja0FjY3VyYWN5Jyk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrRXJyb3IoZSkgeworICAgIGRl
YnVnKCcnKTsKKyAgICBlcnJvciA9IGU7CisgICAgc2hvdWxkQmUoJ2Vycm9yLmNvZGUnLCAnbW9j
a0NvZGUnKTsKKyAgICBzaG91bGRCZSgnZXJyb3IubWVzc2FnZScsICdtb2NrTWVzc2FnZScpOwor
fQorCit3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KHRydWUpOword2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tHZW9sb2NhdGlvblBv
c2l0aW9uKG1vY2tMYXRpdHVkZSwgbW9ja0xvbmdpdHVkZSwgbW9ja0FjY3VyYWN5KTsKKworLy8g
SW5pdGlhbGl6ZSB0aGUgY2FjaGVkIFBvc2l0aW9uCituYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0
Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsKKyAgICBjaGVja1Bvc2l0aW9uKHApOworICAg
IHRlc3RaZXJvTWF4aW11bUFnZSgpOworfSwgZnVuY3Rpb24oZSkgeworICAgIHRlc3RGYWlsZWQo
J0Vycm9yIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgd2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30pOworCitmdW5jdGlvbiB0ZXN0WmVyb01h
eGltdW1BZ2UoKSB7CisgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBwcm92aWRlZCBieSB0aGUg
bW9jayBzZXJ2aWNlLgorICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbigrK21vY2tMYXRpdHVkZSwgKyttb2NrTG9uZ2l0dWRlLCArK21vY2tB
Y2N1cmFjeSk7CisgICAgLy8gVGhlIGRlZmF1bHQgbWF4aW11bUFnZSBpcyB6ZXJvLCBzbyB3ZSBl
eHBlY3QgdGhlIHVwZGF0ZWQgcG9zaXRpb24gZnJvbSB0aGUgc2VydmljZS4KKyAgICBuYXZpZ2F0
b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsKKyAgICAgICAg
Y2hlY2tQb3NpdGlvbihwKTsKKyAgICAgICAgdGVzdE5vblplcm9NYXhpbXVtQWdlKCk7CisgICAg
fSwgZnVuY3Rpb24oZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCdFcnJvciBjYWxsYmFjayBpbnZv
a2VkIHVuZXhwZWN0ZWRseScpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0Tm9uWmVyb01heGltdW1B
Z2UoKSB7CisgICAgLy8gVXBkYXRlIHRoZSBtb2NrIHNlcnZpY2UgdG8gcmVwb3J0IGFuIGVycm9y
LgorICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrR2VvbG9jYXRpb25FcnJv
cihtb2NrQ29kZSwgbW9ja01lc3NhZ2UpOworICAgIC8vIFRoZSBtYXhpbXVtQWdlIGlzIG5vbi16
ZXJvLCBzbyB3ZSBleHBlY3QgdGhlIGNhY2hlZCBwb3NpdGlvbiwgbm90IHRoZSBlcnJvciBmcm9t
IHRoZSBzZXJ2aWNlLgorICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRp
b24oZnVuY3Rpb24ocCkgeworICAgICAgICBjaGVja1Bvc2l0aW9uKHApOworICAgICAgICB0ZXN0
WmVyb01heGltdW1BZ2VFcnJvcigpOworICAgIH0sIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgnRXJyb3IgY2FsbGJhY2sgaW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICAgICAg
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCB7bWF4aW11
bUFnZTogMTAwMH0pOworfQorCitmdW5jdGlvbiB0ZXN0WmVyb01heGltdW1BZ2VFcnJvcigpIHsK
KyAgICAvLyBUaGUgZGVmYXVsdCBtYXhpbXVtQWdlIGlzIHplcm8sIHNvIHdlIGV4cGVjdCB0aGUg
ZXJyb3IgZnJvbSB0aGUgc2VydmljZS4KKyAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3Vy
cmVudFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnU3VjY2VzcyBj
YWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAg
Y2hlY2tFcnJvcihlKTsKKyAgICAgICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5U
RVNUIENPTVBMRVRFPC9zcGFuPicpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworICAgIH0pOworfQorCit3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIgaXNBc3luY2hyb25vdXMgPSB0cnVlOwordmFyIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
U2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAko
cmV2aXNpb24gNTUxNjMpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdmcvaGl4aWUvcGVyZi8wMDIueG1sCiBodHRw
L3Rlc3RzL21lZGlhL3ZpZGVvLWVycm9yLWFib3J0Lmh0bWwKIAogIyBUaGlzIHBvcnQgZG9lc24n
dCBzdXBwb3J0IEdlb2xvY2F0aW9uLgotZmFzdC9kb20vR2VvbG9jYXRpb24KK2Zhc3QvZG9tL0dl
b2xvY2F0aW9uL2FyZ3VtZW50LXR5cGVzLmh0bWwKIAogIyBTa2lwcGVkIHdoaWxlIEVyaWMgQ2Fy
bHNvbiB3b3JrcyBvbiBhIGZpeC4KICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI4MjIxCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49596</attachid>
            <date>2010-02-26 10:05:23 -0800</date>
            <delta_ts>2010-03-10 12:00:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30676-20100226180521.patch</filename>
            <type>text/plain</type>
            <size>19413</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDItMjMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudHMgR2VvbG9jYXRpb24gbWF4aW11bUFnZSBwcm9wZXJ0eQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2NzYKKworICAgICAgICBUZXN0
OiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1vZGlmaWVkLiBBZGRzIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZS5oIHRvIFByaXZhdGUgaGVhZGVycworICAgICAgICAqIHBhZ2UvR2VvbG9j
YXRpb24uY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9O
b3RpZmllcjo6c2V0VXNlQ2FjaGVkUG9zaXRpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6bWFrZVN1Y2Nlc3NDYWxsYmFjayk6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1lckZpcmVkKTog
TW9kaWZpZWQuIEFkZGVkIGxvZ2ljIHRvIGhhbmRsZSB1c2luZyBhIGNhY2hlZCBwb3NpdGlvbgor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OldhdGNoZXJzOjpjb250YWlucyk6IEFkZGVk
LiBSZXF1aXJlZCB0byBkZXRlcm1pbmUgaWYgYSBub3RpZmllciBpcyBhIHdhdGNoIHJlcXVlc3QK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpzdGFydFJlcXVlc3QpOiBNb2RpZmllZC4g
QWRkZWQgbG9naWMgdG8gY2hlY2sgZm9yIGEgY2FjaGVkIHBvc2l0aW9uCisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvbjo6cmVxdWVzdFVzZXNDYWNoZWRQb3NpdGlvbik6IEFkZGVkLiBDYWxs
YmFjayB0byBHZW9sb2NhdGlvbiBvYmplY3Qgd2hlbiBub3RpZmllciB1c2VzIGEgY2FjaGVkIHBv
c2l0aW9uCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9u
Q2FsbGJhY2tzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6aGF2ZVN1
aXRhYmxlQ2FjaGVkUG9zaXRpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjpzZXRJc0FsbG93ZWQpOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjpwb3NpdGlvbkNoYW5nZWQpOiBNb2RpZmllZC4gTWFrZSBjYWxsYmFja3MgdXNpbmcgY2Fj
aGVkIHBvc2l0aW9uIHdoZXJlIGFwcHJvcHJpYXRlCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2Nh
dGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlRXJyb3JPY2N1cnJlZCk6IE1vZGlmaWVkLiBNYWtlIGNh
bGxiYWNrcyB1c2luZyBjYWNoZWQgcG9zaXRpb24gd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAg
KiBwYWdlL0dlb2xvY2F0aW9uLmg6IE1vZGlmaWVkLgorCiAyMDEwLTAyLTIzICBEbWl0cnkgVGl0
b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExl
dmluLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDU1MTYzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTExMTcsNyArMTExNyw3IEBACiAJCTU5MTM5NTNCMTEwNzU4
NDUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU5MTM5NTNBMTEwNzU4NDUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuaCAq
LzsgfTsKIAkJNTkxMzk1M0QxMTA3NTg0RTAwODNFQzU1IC8qIEpOSUJyaWRnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTEzOTUzQzExMDc1ODRF
MDA4M0VDNTUgLyogSk5JQnJpZGdlLmNwcCAqLzsgfTsKIAkJNTk2MjI5NzgxMTMzRUZENzAwREM0
Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTYyMjk3NzExMzNFRkQ3MDBEQzRDQkIgLyogR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCAqLzsgfTsKLQkJNTk2MjI5N0ExMTMzRUZFMjAwREM0
Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk2MjI5NzkxMTMzRUZFMjAwREM0Q0JCIC8qIEdlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZS5oICovOyB9OworCQk1OTYyMjk3QTExMzNFRkUyMDBEQzRDQkIg
LyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1OTYyMjk3OTExMzNFRkUyMDBEQzRDQkIgLyogR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTk5RTc1OTAxMTA1NUExRjAwRDkwNEZBIC8qIEJyaWRnZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk5RTc1OEYxMTA1NUExRjAw
RDkwNEZBIC8qIEJyaWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTU5QTlFN0IwMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlBOUU3
QUYxMTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAgKi87IH07CiAJCTU5QTlF
N0IyMTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5QTlFN0IxMTEwNDc1OTQwMERGQjRDMSAv
KiBKYXZhSW5zdGFuY2VKU0MuaCAqLzsgfTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkocmV2aXNp
b24gNTUxNjMpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9i
aWxlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJv
amVjdAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMiw3IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogI2lmIEVOQUJMRShDTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZXMuaCIKQEAgLTQzLDYgKzQ1LDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGNoYXIgcGVybWlzc2lvbkRl
bmllZEVycm9yTWVzc2FnZVtdID0gIlVzZXIgZGVuaWVkIEdlb2xvY2F0aW9uIjsKK3N0YXRpYyBj
b25zdCBjaGFyIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlW10gPSAiRmFpbGVkIHRv
IHN0YXJ0IEdlb2xvY2F0aW9uIHNlcnZpY2UiOwogCiAjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9H
RU9MT0NBVElPTikKIApAQCAtOTUsMTEgKzk4LDIyIEBAIHZvaWQgR2VvbG9jYXRpb246Okdlb05v
dGlmaWVyOjpzZXRGYXRhbEUKICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAordm9p
ZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnNldFVzZUNhY2hlZFBvc2l0aW9uKCkKK3sKKyAg
ICBtX3VzZUNhY2hlZFBvc2l0aW9uID0gdHJ1ZTsKKyAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKK30KKwogYm9vbCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6Omhhc1plcm9UaW1lb3V0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9vcHRpb25zLT5oYXNUaW1lb3V0KCkgJiYgbV9vcHRpb25z
LT50aW1lb3V0KCkgPT0gMDsKIH0KIAordm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6Om1h
a2VTdWNjZXNzQ2FsbGJhY2soR2VvcG9zaXRpb24qIHBvc2l0aW9uKQoreworICAgIG1fc3VjY2Vz
c0NhbGxiYWNrLT5oYW5kbGVFdmVudChwb3NpdGlvbik7Cit9CisKIHZvaWQgR2VvbG9jYXRpb246
Okdlb05vdGlmaWVyOjpzdGFydFRpbWVySWZOZWVkZWQoKQogewogICAgIGlmIChtX29wdGlvbnMt
Pmhhc1RpbWVvdXQoKSkKQEAgLTEyMiw2ICsxMzYsMTQgQEAgdm9pZCBHZW9sb2NhdGlvbjo6R2Vv
Tm90aWZpZXI6OnRpbWVyRmlyZQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgaWYgKG1f
dXNlQ2FjaGVkUG9zaXRpb24pIHsKKyAgICAgICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBwb3NpdGlv
biBmbGFnIGluIGNhc2UgdGhpcyBpcyBhIHdhdGNoIHJlcXVlc3QsIHdoaWNoCisgICAgICAgIC8v
IHdpbGwgY29udGludWUgdG8gcnVuLgorICAgICAgICBtX3VzZUNhY2hlZFBvc2l0aW9uID0gZmFs
c2U7CisgICAgICAgIG1fZ2VvbG9jYXRpb24tPnJlcXVlc3RVc2VzQ2FjaGVkUG9zaXRpb24odGhp
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAobV9lcnJvckNhbGxiYWNrKSB7
CiAgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNy
ZWF0ZShQb3NpdGlvbkVycm9yOjpUSU1FT1VULCAiVGltZW91dCBleHBpcmVkIik7CiAgICAgICAg
IG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0KCkpOwpAQCAtMTU1LDYgKzE3
NywxMSBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKEdlb05vCiAgICAgbV9u
b3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXIpOwogfQogCitib29sIEdlb2xvY2F0aW9uOjpXYXRj
aGVyczo6Y29udGFpbnMoR2VvTm90aWZpZXIqIG5vdGlmaWVyKSBjb25zdAoreworICAgIHJldHVy
biBtX25vdGlmaWVyVG9JZE1hcC5jb250YWlucyhub3RpZmllcik7Cit9CisKIHZvaWQgR2VvbG9j
YXRpb246OldhdGNoZXJzOjpjbGVhcigpCiB7CiAgICAgbV9pZFRvTm90aWZpZXJNYXAuY2xlYXIo
KTsKQEAgLTE3OCw2ICsyMDUsNyBAQCBHZW9sb2NhdGlvbjo6R2VvbG9jYXRpb24oRnJhbWUqIGZy
YW1lKQogI2VuZGlmCiAgICAgLCBtX2FsbG93R2VvbG9jYXRpb24oVW5rbm93bikKICAgICAsIG1f
c2hvdWxkQ2xlYXJDYWNoZShmYWxzZSkKKyAgICAsIG1fcG9zaXRpb25DYWNoZShuZXcgR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjQ5LDE0ICsyNzcsMTggQEAgUGFzc1JlZlB0cjxHZW9sb2NhdGlvbjo6R2VvTm90aWZp
ZXI+IEdlbwogICAgIGlmIChpc0RlbmllZCgpKQogICAgICAgICBub3RpZmllci0+c2V0RmF0YWxF
cnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5J
RUQsIHBlcm1pc3Npb25EZW5pZWRFcnJvck1lc3NhZ2UpKTsKICAgICBlbHNlIHsKLSAgICAgICAg
aWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IHN0YXJ0VXBkYXRpbmcobm90aWZpZXIu
Z2V0KCkpKSB7CisgICAgICAgIGlmIChoYXZlU3VpdGFibGVDYWNoZWRQb3NpdGlvbihub3RpZmll
ci0+bV9vcHRpb25zLmdldCgpKSkKKyAgICAgICAgICAgIG5vdGlmaWVyLT5zZXRVc2VDYWNoZWRQ
b3NpdGlvbigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChub3RpZmllci0+aGFz
WmVyb1RpbWVvdXQoKSB8fCBzdGFydFVwZGF0aW5nKG5vdGlmaWVyLmdldCgpKSkgewogI2lmIEVO
QUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCi0gICAgICAgICAgICAvLyBPbmx5IHN0YXJ0
IHRpbWVyIGlmIHdlJ3JlIG5vdCB3YWl0aW5nIGZvciB1c2VyIHBlcm1pc3Npb24uCi0gICAgICAg
ICAgICBpZiAoIW1fc3RhcnRSZXF1ZXN0UGVybWlzc2lvbk5vdGlmaWVyKQorICAgICAgICAgICAg
ICAgIC8vIE9ubHkgc3RhcnQgdGltZXIgaWYgd2UncmUgbm90IHdhaXRpbmcgZm9yIHVzZXIgcGVy
bWlzc2lvbi4KKyAgICAgICAgICAgICAgICBpZiAoIW1fc3RhcnRSZXF1ZXN0UGVybWlzc2lvbk5v
dGlmaWVyKQogI2VuZGlmICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm90aWZpZXItPnN0
YXJ0VGltZXJJZk5lZWRlZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vdGlmaWVy
LT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJ
VElPTl9VTkFWQUlMQUJMRSwgIkZhaWxlZCB0byBzdGFydCBHZW9sb2NhdGlvbiBzZXJ2aWNlIikp
OworICAgICAgICAgICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJv
cihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFC
TEUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKSk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICByZXR1cm4gbm90aWZpZXIucmVsZWFzZSgpOwpAQCAtMjcyLDYgKzMwNCw1NSBAQCB2
b2lkIEdlb2xvY2F0aW9uOjpmYXRhbEVycm9yT2NjdXJyZWQoR2VvCiAgICAgICAgIHN0b3BVcGRh
dGluZygpOwogfQogCit2b2lkIEdlb2xvY2F0aW9uOjpyZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9u
KEdlb05vdGlmaWVyKiBub3RpZmllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCBhc3luY2hy
b25vdXNseSwgc28gdGhlIHBlcm1pc3Npb25zIGNvdWxkIGhhdmUgYmVlbiBkZW5pZWQKKyAgICAv
LyBzaW5jZSB3ZSBsYXN0IGNoZWNrZWQgaW4gc3RhcnRSZXF1ZXN0LgorICAgIGlmIChpc0Rlbmll
ZCgpKSB7CisgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNy
ZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVy
cm9yTWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZXF1ZXN0c0F3
YWl0aW5nQ2FjaGVkUG9zaXRpb24uYWRkKG5vdGlmaWVyKTsKKworICAgIC8vIElmIHBlcm1pc3Np
b25zIGFyZSBhbGxvd2VkLCBtYWtlIHRoZSBjYWxsYmFjaworICAgIGlmIChpc0FsbG93ZWQoKSkg
eworICAgICAgICBtYWtlQ2FjaGVkUG9zaXRpb25DYWxsYmFja3MoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFJlcXVlc3QgcGVybWlzc2lvbnMsIHdoaWNoIG1heSBiZSBzeW5j
aHJvbm91cyBvciBhc3luY2hyb25vdXMuCisgICAgcmVxdWVzdFBlcm1pc3Npb24oKTsKK30KKwor
dm9pZCBHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKCkKK3sKKyAgICAv
LyBBbGwgbW9kaWZpY2F0aW9ucyB0byBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbiBh
cmUgZG9uZQorICAgIC8vIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5
IGFib3V0IGl0IGJlaW5nIG1vZGlmaWVkIGZyb20KKyAgICAvLyB0aGUgY2FsbGJhY2tzLgorICAg
IEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzQXdhaXRpbmdD
YWNoZWRQb3NpdGlvbi5lbmQoKTsKKyAgICBmb3IgKEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24uYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdGVy
LT5nZXQoKTsKKyAgICAgICAgbm90aWZpZXItPm1ha2VTdWNjZXNzQ2FsbGJhY2sobV9wb3NpdGlv
bkNhY2hlLT5jYWNoZWRQb3NpdGlvbigpKTsKKworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgb25l
LXNob3QgcmVxdWVzdCwgc3RvcCBpdC4gT3RoZXJ3aXNlLCBpZiB0aGUgd2F0Y2ggc3RpbGwKKyAg
ICAgICAgLy8gZXhpc3RzLCBzdGFydCB0aGUgc2VydmljZSB0byBnZXQgdXBkYXRlcy4KKyAgICAg
ICAgaWYgKG1fb25lU2hvdHMuY29udGFpbnMobm90aWZpZXIpKQorICAgICAgICAgICAgbV9vbmVT
aG90cy5yZW1vdmUobm90aWZpZXIpOworICAgICAgICBlbHNlIGlmIChtX3dhdGNoZXJzLmNvbnRh
aW5zKG5vdGlmaWVyKSkgeworICAgICAgICAgICAgaWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91
dCgpIHx8IHN0YXJ0VXBkYXRpbmcobm90aWZpZXIpKQorICAgICAgICAgICAgICAgIG5vdGlmaWVy
LT5zdGFydFRpbWVySWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25F
cnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNz
YWdlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQ
b3NpdGlvbi5jbGVhcigpOworCisgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKKyAgICAgICAgc3Rv
cFVwZGF0aW5nKCk7Cit9CisKIHZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RUaW1lZE91dChHZW9O
b3RpZmllciogbm90aWZpZXIpCiB7CiAgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS1zaG90IHJlcXVl
c3QsIHN0b3AgaXQuCkBAIC0yODEsNiArMzYyLDE4IEBAIHZvaWQgR2VvbG9jYXRpb246OnJlcXVl
c3RUaW1lZE91dChHZW9Ob3QKICAgICAgICAgc3RvcFVwZGF0aW5nKCk7CiB9CiAKK2Jvb2wgR2Vv
bG9jYXRpb246OmhhdmVTdWl0YWJsZUNhY2hlZFBvc2l0aW9uKFBvc2l0aW9uT3B0aW9ucyogb3B0
aW9ucykKK3sKKyAgICBpZiAoIW1fcG9zaXRpb25DYWNoZS0+Y2FjaGVkUG9zaXRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghb3B0aW9ucy0+aGFzTWF4aW11bUFnZSgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW9wdGlvbnMtPm1heGltdW1BZ2UoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIERPTVRpbWVTdGFtcCBjdXJyZW50VGltZU1pbGxpcyA9
IGN1cnJlbnRUaW1lKCkgKiAxMDAwLjA7CisgICAgcmV0dXJuIG1fcG9zaXRpb25DYWNoZS0+Y2Fj
aGVkUG9zaXRpb24oKS0+dGltZXN0YW1wKCkgPiBjdXJyZW50VGltZU1pbGxpcyAtIG9wdGlvbnMt
Pm1heGltdW1BZ2UoKTsKK30KKwogdm9pZCBHZW9sb2NhdGlvbjo6Y2xlYXJXYXRjaChpbnQgd2F0
Y2hJZCkKIHsKICAgICBtX3dhdGNoZXJzLnJlbW92ZSh3YXRjaElkKTsKQEAgLTMwNyw2ICs0MDAs
OCBAQCB2b2lkIEdlb2xvY2F0aW9uOjpyZXN1bWUoKQogCiB2b2lkIEdlb2xvY2F0aW9uOjpzZXRJ
c0FsbG93ZWQoYm9vbCBhbGxvd2VkKQogeworICAgIC8vIFRoaXMgbWF5IGJlIGR1ZSB0byBlaXRo
ZXIgYSBuZXcgcG9zaXRpb24gZnJvbSB0aGUgc2VydmljZSwgb3IgYSBjYWNoZWQKKyAgICAvLyBw
b3NpdGlvbi4KICAgICBtX2FsbG93R2VvbG9jYXRpb24gPSBhbGxvd2VkID8gWWVzIDogTm87CiAg
ICAgCiAjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKQEAgLTMyOSwxNCArNDI0
LDIyIEBAIHZvaWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dlZChib29sIGFsbG8KICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgotICAgIAotICAgIGlmIChpc0FsbG93ZWQoKSkKLSAgICAg
ICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3MoKTsKLSAgICBlbHNlIHsKKworICAgIGlmICghaXNBbGxv
d2VkKCkpIHsKICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGVycm9yID0gUG9zaXRpb25F
cnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCBwZXJtaXNzaW9u
RGVuaWVkRXJyb3JNZXNzYWdlKTsKICAgICAgICAgZXJyb3ItPnNldElzRmF0YWwodHJ1ZSk7CiAg
ICAgICAgIGhhbmRsZUVycm9yKGVycm9yLmdldCgpKTsKKyAgICAgICAgbV9yZXF1ZXN0c0F3YWl0
aW5nQ2FjaGVkUG9zaXRpb24uY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IC8vIElmIHRoZSBzZXJ2aWNlIGhhcyBhIGxhc3QgcG9zaXRpb24sIHVzZSBpdCB0byBjYWxsIGJh
Y2sgZm9yIGFsbCByZXF1ZXN0cy4KKyAgICAvLyBJZiBhbnkgb2YgdGhlIHJlcXVlc3RzIGFyZSB3
YWl0aW5nIGZvciBwZXJtaXNzaW9uIGZvciBhIGNhY2hlZCBwb3NpdGlvbiwKKyAgICAvLyB0aGUg
cG9zaXRpb24gZnJvbSB0aGUgc2VydmljZSB3aWxsIGJlIGF0IGxlYXN0IGFzIGZyZXNoLgorICAg
IGlmIChsYXN0UG9zaXRpb24oKSkKKyAgICAgICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3MoKTsKKyAg
ICBlbHNlCisgICAgICAgIG1ha2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcygpOwogfQogCiB2b2lk
IEdlb2xvY2F0aW9uOjpzZW5kRXJyb3IoVmVjdG9yPFJlZlB0cjxHZW9Ob3RpZmllcj4gPiYgbm90
aWZpZXJzLCBQb3NpdGlvbkVycm9yKiBlcnJvcikKQEAgLTQzOCw2ICs1NDEsOCBAQCB2b2lkIEdl
b2xvY2F0aW9uOjpwb3NpdGlvbkNoYW5nZWQoUGFzc1JlCiB7CiAgICAgbV9jdXJyZW50UG9zaXRp
b24gPSBuZXdQb3NpdGlvbjsKIAorICAgIG1fcG9zaXRpb25DYWNoZS0+c2V0Q2FjaGVkUG9zaXRp
b24obV9jdXJyZW50UG9zaXRpb24uZ2V0KCkpOworCiAgICAgLy8gU3RvcCBhbGwgY3VycmVudGx5
IHJ1bm5pbmcgdGltZXJzLgogICAgIHN0b3BUaW1lcnMoKTsKICAgICAKQEAgLTUwMyw2ICs2MDgs
OSBAQCB2b2lkIEdlb2xvY2F0aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VFcnJvCiB7CiAgICAgQVNT
RVJUKHNlcnZpY2UtPmxhc3RFcnJvcigpKTsKIAorICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBub3Qg
c3RvcCB0aW1lcnMgaGVyZS4gRm9yIG9uZS1zaG90cywgdGhlIHJlcXVlc3QgaXMKKyAgICAvLyBj
bGVhcmVkIGluIGhhbmRsZUVycm9yLiBGb3Igd2F0Y2hlcnMsIHRoZSBzcGVjIHJlcXVpcmVzIHRo
YXQgdGhlIHRpbWVyIGlzCisgICAgLy8gbm90IGNsZWFyZWQuCiAgICAgaGFuZGxlRXJyb3Ioc2Vy
dmljZS0+bGFzdEVycm9yKCkpOwogfQogCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAkocmV2aXNpb24gNTUx
NjMpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291
cmNlIFByb2plY3QKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjcs
NyBAQAogI2lmbmRlZiBHZW9sb2NhdGlvbl9oCiAjZGVmaW5lIEdlb2xvY2F0aW9uX2gKIAorI2lu
Y2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9u
U2VydmljZS5oIgogI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUG9zaXRpb25D
YWxsYmFjay5oIgpAQCAtOTYsNiArOTgsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
dm9pZCBzZXRGYXRhbEVycm9yKFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4pOwogICAgICAgICBi
b29sIGhhc1plcm9UaW1lb3V0KCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0VXNlQ2FjaGVkUG9z
aXRpb24oKTsKKyAgICAgICAgdm9pZCBtYWtlU3VjY2Vzc0NhbGxiYWNrKEdlb3Bvc2l0aW9uKik7
CiAgICAgICAgIHZvaWQgc3RhcnRUaW1lcklmTmVlZGVkKCk7CiAgICAgICAgIHZvaWQgdGltZXJG
aXJlZChUaW1lcjxHZW9Ob3RpZmllcj4qKTsKICAgICAgICAgCkBAIC0xMDUsNiArMTA5LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gbV9vcHRpb25zOwogICAg
ICAgICBUaW1lcjxHZW9Ob3RpZmllcj4gbV90aW1lcjsKICAgICAgICAgUmVmUHRyPFBvc2l0aW9u
RXJyb3I+IG1fZmF0YWxFcnJvcjsKKyAgICAgICAgYm9vbCBtX3VzZUNhY2hlZFBvc2l0aW9uOwog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgR2VvTm90aWZpZXIoR2VvbG9jYXRpb24qLCBQYXNzUmVm
UHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4s
IFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPik7CkBAIC0xMTUsNiArMTIwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCBzZXQoaW50IGlkLCBQYXNzUmVmUHRyPEdlb05vdGlmaWVyPik7CiAg
ICAgICAgIHZvaWQgcmVtb3ZlKGludCBpZCk7CiAgICAgICAgIHZvaWQgcmVtb3ZlKEdlb05vdGlm
aWVyKik7CisgICAgICAgIGJvb2wgY29udGFpbnMoR2VvTm90aWZpZXIqKSBjb25zdDsKICAgICAg
ICAgdm9pZCBjbGVhcigpOwogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgICAgICAg
dm9pZCBnZXROb3RpZmllcnNWZWN0b3IoVmVjdG9yPFJlZlB0cjxHZW9Ob3RpZmllcj4gPiYpIGNv
bnN0OwpAQCAtMTU0LDYgKzE2MCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGZhdGFsRXJyb3JP
Y2N1cnJlZChHZW9Ob3RpZmllciopOwogICAgIHZvaWQgcmVxdWVzdFRpbWVkT3V0KEdlb05vdGlm
aWVyKik7CisgICAgdm9pZCByZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyKik7
CisgICAgYm9vbCBoYXZlU3VpdGFibGVDYWNoZWRQb3NpdGlvbihQb3NpdGlvbk9wdGlvbnMqKTsK
KyAgICB2b2lkIG1ha2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcygpOwogCiAgICAgdHlwZWRlZiBI
YXNoU2V0PFJlZlB0cjxHZW9Ob3RpZmllcj4gPiBHZW9Ob3RpZmllclNldDsKICAgICAKQEAgLTE3
NSw2ICsxODQsOSBAQCBwcml2YXRlOgogICAgICAgICBObwogICAgIH0gbV9hbGxvd0dlb2xvY2F0
aW9uOwogICAgIGJvb2wgbV9zaG91bGRDbGVhckNhY2hlOworCisgICAgT3duUHRyPEdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZT4gbV9wb3NpdGlvbkNhY2hlOworICAgIEdlb05vdGlmaWVyU2V0IG1f
cmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1MTgwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDItMjMgIFN0ZXZlIEJs
b2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudHMgR2VvbG9jYXRpb24gbWF4aW11bUFnZSBw
cm9wZXJ0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzA2NzYKKworICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9tYXhpbXVt
LWFnZS5qczogQWRkZWQuIENoZWNrcyB0aGF0IGEgY2FjaGVkIHBvc2l0aW9uIGlzIHVzZWQgb25s
eSB3aGVuIGl0IHNob3VsZCBiZS4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhp
bXVtLWFnZS5odG1sOiBBZGRlZC4gSFRNTCB3cmFwZXIgZm9yIGFib3ZlIHRlc3QuCisgICAgICAg
ICogZmFzdC9kb20vR2VvbG9jYXRpb24vbWF4aW11bS1hZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4g
RXhwZWN0ZWQgcmVzdWx0IGZvciBhYm92ZSB0ZXN0LgorCiAyMDEwLTAyLTIzICBFbnJpY2EgQ2Fz
dWNjaSAgPGVucmljYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJh
c2VyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vbWF4aW11bS1hZ2Ut
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0
aW9uL21heGltdW0tYWdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0dlb2xvY2F0aW9uL21heGltdW0tYWdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNCBAQAorVGVzdHMgdGhhdCB0aGUgUG9zaXRpb25PcHRpb25zLm1heGlt
dW1BZ2UgcGFyYW1ldGVyIGlzIGNvcnJlY3RseSBhcHBsaWVkLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitQQVNTIHBv
c2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSBpcyBtb2NrTGF0aXR1ZGUKK1BBU1MgcG9zaXRpb24uY29v
cmRzLmxvbmdpdHVkZSBpcyBtb2NrTG9uZ2l0dWRlCitQQVNTIHBvc2l0aW9uLmNvb3Jkcy5hY2N1
cmFjeSBpcyBtb2NrQWNjdXJhY3kKKworUEFTUyBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUgaXMg
bW9ja0xhdGl0dWRlCitQQVNTIHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUgaXMgbW9ja0xvbmdp
dHVkZQorUEFTUyBwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3kgaXMgbW9ja0FjY3VyYWN5CisKK1BB
U1MgcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlIGlzIG1vY2tMYXRpdHVkZQorUEFTUyBwb3NpdGlv
bi5jb29yZHMubG9uZ2l0dWRlIGlzIG1vY2tMb25naXR1ZGUKK1BBU1MgcG9zaXRpb24uY29vcmRz
LmFjY3VyYWN5IGlzIG1vY2tBY2N1cmFjeQorCitQQVNTIGVycm9yLmNvZGUgaXMgbW9ja0NvZGUK
K1BBU1MgZXJyb3IubWVzc2FnZSBpcyBtb2NrTWVzc2FnZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL21heGltdW0tYWdlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vbWF4aW11bS1hZ2Uu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL21h
eGltdW0tYWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbWF4aW11bS1hZ2Uu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2Vv
bG9jYXRpb24vcmVzb3VyY2VzL21heGltdW0tYWdlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9tYXhpbXVtLWFnZS5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9tYXhp
bXVtLWFnZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorZGVzY3JpcHRpb24oIlRl
c3RzIHRoYXQgdGhlIFBvc2l0aW9uT3B0aW9ucy5tYXhpbXVtQWdlIHBhcmFtZXRlciBpcyBjb3Jy
ZWN0bHkgYXBwbGllZC4iKTsKKwordmFyIG1vY2tMYXRpdHVkZSA9IDUxLjQ3ODsKK3ZhciBtb2Nr
TG9uZ2l0dWRlID0gLTAuMTY2OwordmFyIG1vY2tBY2N1cmFjeSA9IDEwMC4wOworCit2YXIgbW9j
a0NvZGUgPSAxOwordmFyIG1vY2tNZXNzYWdlID0gJ3Rlc3QnOworCit2YXIgcG9zaXRpb247Cit2
YXIgZXJyb3I7CisKK2Z1bmN0aW9uIGNoZWNrUG9zaXRpb24ocCkgeworICAgIGRlYnVnKCcnKTsK
KyAgICBwb3NpdGlvbiA9IHA7CisgICAgc2hvdWxkQmUoJ3Bvc2l0aW9uLmNvb3Jkcy5sYXRpdHVk
ZScsICdtb2NrTGF0aXR1ZGUnKTsKKyAgICBzaG91bGRCZSgncG9zaXRpb24uY29vcmRzLmxvbmdp
dHVkZScsICdtb2NrTG9uZ2l0dWRlJyk7CisgICAgc2hvdWxkQmUoJ3Bvc2l0aW9uLmNvb3Jkcy5h
Y2N1cmFjeScsICdtb2NrQWNjdXJhY3knKTsKK30KKworZnVuY3Rpb24gY2hlY2tFcnJvcihlKSB7
CisgICAgZGVidWcoJycpOworICAgIGVycm9yID0gZTsKKyAgICBzaG91bGRCZSgnZXJyb3IuY29k
ZScsICdtb2NrQ29kZScpOworICAgIHNob3VsZEJlKCdlcnJvci5tZXNzYWdlJywgJ21vY2tNZXNz
YWdlJyk7Cit9CisKK3dpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRHZW9sb2NhdGlvblBl
cm1pc3Npb24odHJ1ZSk7Cit3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0TW9ja0dlb2xv
Y2F0aW9uUG9zaXRpb24obW9ja0xhdGl0dWRlLCBtb2NrTG9uZ2l0dWRlLCBtb2NrQWNjdXJhY3kp
OworCisvLyBJbml0aWFsaXplIHRoZSBjYWNoZWQgUG9zaXRpb24KK25hdmlnYXRvci5nZW9sb2Nh
dGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocCkgeworICAgIGNoZWNrUG9zaXRpb24o
cCk7CisgICAgdGVzdFplcm9NYXhpbXVtQWdlKCk7Cit9LCBmdW5jdGlvbihlKSB7CisgICAgdGVz
dEZhaWxlZCgnRXJyb3IgY2FsbGJhY2sgaW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICB3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfSk7CisKK2Z1bmN0aW9uIHRl
c3RaZXJvTWF4aW11bUFnZSgpIHsKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9uIHByb3ZpZGVk
IGJ5IHRoZSBtb2NrIHNlcnZpY2UuCisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNl
dE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKCsrbW9ja0xhdGl0dWRlLCArK21vY2tMb25naXR1ZGUs
ICsrbW9ja0FjY3VyYWN5KTsKKyAgICAvLyBUaGUgZGVmYXVsdCBtYXhpbXVtQWdlIGlzIHplcm8s
IHNvIHdlIGV4cGVjdCB0aGUgdXBkYXRlZCBwb3NpdGlvbiBmcm9tIHRoZSBzZXJ2aWNlLgorICAg
IG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocCkgewor
ICAgICAgICBjaGVja1Bvc2l0aW9uKHApOworICAgICAgICB0ZXN0Tm9uWmVyb01heGltdW1BZ2Uo
KTsKKyAgICB9LCBmdW5jdGlvbihlKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ0Vycm9yIGNhbGxi
YWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROb25aZXJv
TWF4aW11bUFnZSgpIHsKKyAgICAvLyBVcGRhdGUgdGhlIG1vY2sgc2VydmljZSB0byByZXBvcnQg
YW4gZXJyb3IuCisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tHZW9sb2Nh
dGlvbkVycm9yKG1vY2tDb2RlLCBtb2NrTWVzc2FnZSk7CisgICAgLy8gVGhlIG1heGltdW1BZ2Ug
aXMgbm9uLXplcm8sIHNvIHdlIGV4cGVjdCB0aGUgY2FjaGVkIHBvc2l0aW9uLCBub3QgdGhlIGVy
cm9yIGZyb20gdGhlIHNlcnZpY2UuCisgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJl
bnRQb3NpdGlvbihmdW5jdGlvbihwKSB7CisgICAgICAgIGNoZWNrUG9zaXRpb24ocCk7CisgICAg
ICAgIHRlc3RaZXJvTWF4aW11bUFnZUVycm9yKCk7CisgICAgfSwgZnVuY3Rpb24oZSkgeworICAg
ICAgICB0ZXN0RmFpbGVkKCdFcnJvciBjYWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRseScpOwor
ICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0s
IHttYXhpbXVtQWdlOiAxMDAwfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RaZXJvTWF4aW11bUFnZUVy
cm9yKCkgeworICAgIC8vIFRoZSBkZWZhdWx0IG1heGltdW1BZ2UgaXMgemVybywgc28gd2UgZXhw
ZWN0IHRoZSBlcnJvciBmcm9tIHRoZSBzZXJ2aWNlLgorICAgIG5hdmlnYXRvci5nZW9sb2NhdGlv
bi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocCkgeworICAgICAgICB0ZXN0RmFpbGVkKCdT
dWNjZXNzIGNhbGxiYWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgICAgIHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSwgZnVuY3Rpb24oZSkgewor
ICAgICAgICBjaGVja0Vycm9yKGUpOworICAgICAgICBkZWJ1ZygnPGJyIC8+PHNwYW4gY2xhc3M9
InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7CisgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9CisKK3dpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK3ZhciBpc0FzeW5jaHJvbm91cyA9IHRydWU7
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50420</attachid>
            <date>2010-03-10 12:01:01 -0800</date>
            <delta_ts>2010-03-11 03:12:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30676-20100310200058.patch</filename>
            <type>text/plain</type>
            <size>19732</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTc4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDMtMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudHMgR2VvbG9jYXRpb24gbWF4aW11bUFnZSBwcm9wZXJ0eQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2NzYKKworICAgICAgICBUZXN0
OiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1vZGlmaWVkLiBBZGRzIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZS5oIHRvIFByaXZhdGUgaGVhZGVycworICAgICAgICAqIHBhZ2UvR2VvbG9j
YXRpb24uY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpHZW9O
b3RpZmllcjo6c2V0VXNlQ2FjaGVkUG9zaXRpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Okdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6cnVuU3VjY2Vzc0NhbGxiYWNrKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnRpbWVyRmlyZWQpOiBN
b2RpZmllZC4gQWRkZWQgbG9naWMgdG8gaGFuZGxlIHVzaW5nIGEgY2FjaGVkIHBvc2l0aW9uCisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmNvbnRhaW5zKTogQWRkZWQu
IFJlcXVpcmVkIHRvIGRldGVybWluZSBpZiBhIG5vdGlmaWVyIGlzIGEgd2F0Y2ggcmVxdWVzdAor
ICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OnN0YXJ0UmVxdWVzdCk6IE1vZGlmaWVkLiBB
ZGRlZCBsb2dpYyB0byBjaGVjayBmb3IgYSBjYWNoZWQgcG9zaXRpb24KKyAgICAgICAgKFdlYkNv
cmU6Okdlb2xvY2F0aW9uOjpyZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKTogQWRkZWQuIENhbGxi
YWNrIHRvIEdlb2xvY2F0aW9uIG9iamVjdCB3aGVuIG5vdGlmaWVyIHVzZXMgYSBjYWNoZWQgcG9z
aXRpb24KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjptYWtlQ2FjaGVkUG9zaXRpb25D
YWxsYmFja3MpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpoYXZlU3Vp
dGFibGVDYWNoZWRQb3NpdGlvbik6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b246OnNldElzQWxsb3dlZCk6IE1vZGlmaWVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRp
b246OnBvc2l0aW9uQ2hhbmdlZCk6IE1vZGlmaWVkLiBNYWtlIGNhbGxiYWNrcyB1c2luZyBjYWNo
ZWQgcG9zaXRpb24gd2hlcmUgYXBwcm9wcmlhdGUKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VFcnJvck9jY3VycmVkKTogTW9kaWZpZWQuIE1ha2UgY2Fs
bGJhY2tzIHVzaW5nIGNhY2hlZCBwb3NpdGlvbiB3aGVyZSBhcHByb3ByaWF0ZQorICAgICAgICAq
IHBhZ2UvR2VvbG9jYXRpb24uaDogTW9kaWZpZWQuCisKIDIwMTAtMDMtMTAgIEd1c3Rhdm8gTm9y
b25oYSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAg
UnViYmVyLXN0YW1wZWQgYnkgWGFuIExvcGV6LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDU1Nzg4KQorKysgV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMjEsNyArMTEy
MSw3IEBACiAJCTU5MTM5NTNCMTEwNzU4NDUwMDgzRUM1NSAvKiBKTklCcmlkZ2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5MTM5NTNBMTEwNzU4NDUw
MDgzRUM1NSAvKiBKTklCcmlkZ2UuaCAqLzsgfTsKIAkJNTkxMzk1M0QxMTA3NTg0RTAwODNFQzU1
IC8qIEpOSUJyaWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1OTEzOTUzQzExMDc1ODRFMDA4M0VDNTUgLyogSk5JQnJpZGdlLmNwcCAqLzsgfTsK
IAkJNTk2MjI5NzgxMTMzRUZENzAwREM0Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTYyMjk3
NzExMzNFRkQ3MDBEQzRDQkIgLyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcCAqLzsgfTsK
LQkJNTk2MjI5N0ExMTMzRUZFMjAwREM0Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk2MjI5Nzkx
MTMzRUZFMjAwREM0Q0JCIC8qIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oICovOyB9OworCQk1
OTYyMjk3QTExMzNFRkUyMDBEQzRDQkIgLyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTYyMjk3OTExMzNF
RkUyMDBEQzRDQkIgLyogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTk5RTc1OTAxMTA1NUExRjAwRDkw
NEZBIC8qIEJyaWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTk5RTc1OEYxMTA1NUExRjAwRDkwNEZBIC8qIEJyaWRnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU5QTlFN0IwMTEwNDc1ODgwMERG
QjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTlBOUU3QUYxMTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5j
ZUpTQy5jcHAgKi87IH07CiAJCTU5QTlFN0IyMTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFu
Y2VKU0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5
QTlFN0IxMTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuaCAqLzsgfTsKSW5kZXg6
IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uLmNwcAkocmV2aXNpb24gNTU3ODgpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhl
IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMSw2ICszMiw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
IAogI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCiAjaW5jbHVkZSAiQ29vcmRp
bmF0ZXMuaCIKQEAgLTQzLDYgKzQ1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGlj
IGNvbnN0IGNoYXIgcGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2FnZVtdID0gIlVzZXIgZGVuaWVk
IEdlb2xvY2F0aW9uIjsKK3N0YXRpYyBjb25zdCBjaGFyIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJy
b3JNZXNzYWdlW10gPSAiRmFpbGVkIHRvIHN0YXJ0IEdlb2xvY2F0aW9uIHNlcnZpY2UiOwogCiAj
aWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKIApAQCAtNzksNiArODIsNyBAQCBH
ZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6Okdlb05vdGlmaWVyKEdlCiAgICAgLCBtX2Vycm9yQ2Fs
bGJhY2soZXJyb3JDYWxsYmFjaykKICAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogICAgICwgbV90
aW1lcih0aGlzLCAmR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1lckZpcmVkKQorICAgICwg
bV91c2VDYWNoZWRQb3NpdGlvbihmYWxzZSkKIHsKICAgICBBU1NFUlQobV9nZW9sb2NhdGlvbik7
CiAgICAgQVNTRVJUKG1fc3VjY2Vzc0NhbGxiYWNrKTsKQEAgLTk1LDExICs5OSwyMiBAQCB2b2lk
IEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6c2V0RmF0YWxFCiAgICAgbV90aW1lci5zdGFydE9u
ZVNob3QoMCk7CiB9CiAKK3ZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpzZXRVc2VDYWNo
ZWRQb3NpdGlvbigpCit7CisgICAgbV91c2VDYWNoZWRQb3NpdGlvbiA9IHRydWU7CisgICAgbV90
aW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKIGJvb2wgR2VvbG9jYXRpb246Okdlb05vdGlmaWVy
OjpoYXNaZXJvVGltZW91dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fb3B0aW9ucy0+aGFzVGlt
ZW91dCgpICYmIG1fb3B0aW9ucy0+dGltZW91dCgpID09IDA7CiB9CiAKK3ZvaWQgR2VvbG9jYXRp
b246Okdlb05vdGlmaWVyOjpydW5TdWNjZXNzQ2FsbGJhY2soR2VvcG9zaXRpb24qIHBvc2l0aW9u
KQoreworICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChwb3NpdGlvbik7Cit9CisK
IHZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpzdGFydFRpbWVySWZOZWVkZWQoKQogewog
ICAgIGlmIChtX29wdGlvbnMtPmhhc1RpbWVvdXQoKSkKQEAgLTEyMiw2ICsxMzcsMTQgQEAgdm9p
ZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnRpbWVyRmlyZQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCisgICAgaWYgKG1fdXNlQ2FjaGVkUG9zaXRpb24pIHsKKyAgICAgICAgLy8gQ2xlYXIg
dGhlIGNhY2hlZCBwb3NpdGlvbiBmbGFnIGluIGNhc2UgdGhpcyBpcyBhIHdhdGNoIHJlcXVlc3Qs
IHdoaWNoCisgICAgICAgIC8vIHdpbGwgY29udGludWUgdG8gcnVuLgorICAgICAgICBtX3VzZUNh
Y2hlZFBvc2l0aW9uID0gZmFsc2U7CisgICAgICAgIG1fZ2VvbG9jYXRpb24tPnJlcXVlc3RVc2Vz
Q2FjaGVkUG9zaXRpb24odGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAo
bV9lcnJvckNhbGxiYWNrKSB7CiAgICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvciA9
IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpUSU1FT1VULCAiVGltZW91dCBl
eHBpcmVkIik7CiAgICAgICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQoZXJyb3IuZ2V0
KCkpOwpAQCAtMTU1LDYgKzE3OCwxMSBAQCB2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVt
b3ZlKEdlb05vCiAgICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXIpOwogfQogCitib29s
IEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6Y29udGFpbnMoR2VvTm90aWZpZXIqIG5vdGlmaWVyKSBj
b25zdAoreworICAgIHJldHVybiBtX25vdGlmaWVyVG9JZE1hcC5jb250YWlucyhub3RpZmllcik7
Cit9CisKIHZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpjbGVhcigpCiB7CiAgICAgbV9pZFRv
Tm90aWZpZXJNYXAuY2xlYXIoKTsKQEAgLTE3OCw2ICsyMDYsNyBAQCBHZW9sb2NhdGlvbjo6R2Vv
bG9jYXRpb24oRnJhbWUqIGZyYW1lKQogI2VuZGlmCiAgICAgLCBtX2FsbG93R2VvbG9jYXRpb24o
VW5rbm93bikKICAgICAsIG1fc2hvdWxkQ2xlYXJDYWNoZShmYWxzZSkKKyAgICAsIG1fcG9zaXRp
b25DYWNoZShuZXcgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKQogewogICAgIGlmICghbV9mcmFt
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjQ4LDE2ICsyNzcsMTYgQEAgUGFzc1JlZlB0cjxHZW9s
b2NhdGlvbjo6R2VvTm90aWZpZXI+IEdlbwogICAgIC8vIHRoZSBwZXJtaXNzaW9uIHN0YXRlIGNh
biBub3QgY2hhbmdlIGFnYWluIGluIHRoZSBsaWZldGltZSBvZiB0aGlzIHBhZ2UuCiAgICAgaWYg
KGlzRGVuaWVkKCkpCiAgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJy
b3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRl
bmllZEVycm9yTWVzc2FnZSkpOwotICAgIGVsc2UgewotICAgICAgICBpZiAobm90aWZpZXItPmhh
c1plcm9UaW1lb3V0KCkgfHwgc3RhcnRVcGRhdGluZyhub3RpZmllci5nZXQoKSkpIHsKKyAgICBl
bHNlIGlmIChoYXZlU3VpdGFibGVDYWNoZWRQb3NpdGlvbihub3RpZmllci0+bV9vcHRpb25zLmdl
dCgpKSkKKyAgICAgICAgbm90aWZpZXItPnNldFVzZUNhY2hlZFBvc2l0aW9uKCk7CisgICAgZWxz
ZSBpZiAobm90aWZpZXItPmhhc1plcm9UaW1lb3V0KCkgfHwgc3RhcnRVcGRhdGluZyhub3RpZmll
ci5nZXQoKSkpIHsKICNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotICAgICAg
ICAgICAgLy8gT25seSBzdGFydCB0aW1lciBpZiB3ZSdyZSBub3Qgd2FpdGluZyBmb3IgdXNlciBw
ZXJtaXNzaW9uLgotICAgICAgICAgICAgaWYgKCFtX3N0YXJ0UmVxdWVzdFBlcm1pc3Npb25Ob3Rp
ZmllcikKKyAgICAgICAgLy8gT25seSBzdGFydCB0aW1lciBpZiB3ZSdyZSBub3Qgd2FpdGluZyBm
b3IgdXNlciBwZXJtaXNzaW9uLgorICAgICAgICBpZiAoIW1fc3RhcnRSZXF1ZXN0UGVybWlzc2lv
bk5vdGlmaWVyKQogI2VuZGlmICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbm90aWZpZXIt
PnN0YXJ0VGltZXJJZk5lZWRlZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5vdGlm
aWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQ
T1NJVElPTl9VTkFWQUlMQUJMRSwgIkZhaWxlZCB0byBzdGFydCBHZW9sb2NhdGlvbiBzZXJ2aWNl
IikpOwotICAgIH0KKyAgICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVySWZOZWVkZWQoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9u
RXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRSwgZmFpbGVk
VG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2UpKTsKIAogICAgIHJldHVybiBub3RpZmllci5yZWxl
YXNlKCk7CiB9CkBAIC0yNzIsNiArMzAxLDU1IEBAIHZvaWQgR2VvbG9jYXRpb246OmZhdGFsRXJy
b3JPY2N1cnJlZChHZW8KICAgICAgICAgc3RvcFVwZGF0aW5nKCk7CiB9CiAKK3ZvaWQgR2VvbG9j
YXRpb246OnJlcXVlc3RVc2VzQ2FjaGVkUG9zaXRpb24oR2VvTm90aWZpZXIqIG5vdGlmaWVyKQor
eworICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5LCBzbyB0aGUgcGVybWlzc2lv
bnMgY291bGQgaGF2ZSBiZWVuIGRlbmllZAorICAgIC8vIHNpbmNlIHdlIGxhc3QgY2hlY2tlZCBp
biBzdGFydFJlcXVlc3QuCisgICAgaWYgKGlzRGVuaWVkKCkpIHsKKyAgICAgICAgbm90aWZpZXIt
PnNldEZhdGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1J
U1NJT05fREVOSUVELCBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdlKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5hZGQo
bm90aWZpZXIpOworCisgICAgLy8gSWYgcGVybWlzc2lvbnMgYXJlIGFsbG93ZWQsIG1ha2UgdGhl
IGNhbGxiYWNrCisgICAgaWYgKGlzQWxsb3dlZCgpKSB7CisgICAgICAgIG1ha2VDYWNoZWRQb3Np
dGlvbkNhbGxiYWNrcygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVxdWVz
dCBwZXJtaXNzaW9ucywgd2hpY2ggbWF5IGJlIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cy4K
KyAgICByZXF1ZXN0UGVybWlzc2lvbigpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjptYWtlQ2Fj
aGVkUG9zaXRpb25DYWxsYmFja3MoKQoreworICAgIC8vIEFsbCBtb2RpZmljYXRpb25zIHRvIG1f
cmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uIGFyZSBkb25lCisgICAgLy8gYXN5bmNocm9u
b3VzbHksIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaXQgYmVpbmcgbW9kaWZpZWQg
ZnJvbQorICAgIC8vIHRoZSBjYWxsYmFja3MuCisgICAgR2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uLmVuZCgpOworICAg
IGZvciAoR2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlcXVlc3RzQXdh
aXRpbmdDYWNoZWRQb3NpdGlvbi5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAg
ICAgIEdlb05vdGlmaWVyKiBub3RpZmllciA9IGl0ZXItPmdldCgpOworICAgICAgICBub3RpZmll
ci0+cnVuU3VjY2Vzc0NhbGxiYWNrKG1fcG9zaXRpb25DYWNoZS0+Y2FjaGVkUG9zaXRpb24oKSk7
CisKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS1zaG90IHJlcXVlc3QsIHN0b3AgaXQuIE90
aGVyd2lzZSwgaWYgdGhlIHdhdGNoIHN0aWxsCisgICAgICAgIC8vIGV4aXN0cywgc3RhcnQgdGhl
IHNlcnZpY2UgdG8gZ2V0IHVwZGF0ZXMuCisgICAgICAgIGlmIChtX29uZVNob3RzLmNvbnRhaW5z
KG5vdGlmaWVyKSkKKyAgICAgICAgICAgIG1fb25lU2hvdHMucmVtb3ZlKG5vdGlmaWVyKTsKKyAg
ICAgICAgZWxzZSBpZiAobV93YXRjaGVycy5jb250YWlucyhub3RpZmllcikpIHsKKyAgICAgICAg
ICAgIGlmIChub3RpZmllci0+aGFzWmVyb1RpbWVvdXQoKSB8fCBzdGFydFVwZGF0aW5nKG5vdGlm
aWVyKSkKKyAgICAgICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbm90aWZpZXItPnNldEZhdGFsRXJyb3Io
UG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxF
LCBmYWlsZWRUb1N0YXJ0U2VydmljZUVycm9yTWVzc2FnZSkpOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24uY2xlYXIoKTsKKworICAgIGlm
ICghaGFzTGlzdGVuZXJzKCkpCisgICAgICAgIHN0b3BVcGRhdGluZygpOworfQorCiB2b2lkIEdl
b2xvY2F0aW9uOjpyZXF1ZXN0VGltZWRPdXQoR2VvTm90aWZpZXIqIG5vdGlmaWVyKQogewogICAg
IC8vIElmIHRoaXMgaXMgYSBvbmUtc2hvdCByZXF1ZXN0LCBzdG9wIGl0LgpAQCAtMjgxLDYgKzM1
OSwxOCBAQCB2b2lkIEdlb2xvY2F0aW9uOjpyZXF1ZXN0VGltZWRPdXQoR2VvTm90CiAgICAgICAg
IHN0b3BVcGRhdGluZygpOwogfQogCitib29sIEdlb2xvY2F0aW9uOjpoYXZlU3VpdGFibGVDYWNo
ZWRQb3NpdGlvbihQb3NpdGlvbk9wdGlvbnMqIG9wdGlvbnMpCit7CisgICAgaWYgKCFtX3Bvc2l0
aW9uQ2FjaGUtPmNhY2hlZFBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIW9wdGlvbnMtPmhhc01heGltdW1BZ2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKCFvcHRpb25zLT5tYXhpbXVtQWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBE
T01UaW1lU3RhbXAgY3VycmVudFRpbWVNaWxsaXMgPSBjdXJyZW50VGltZSgpICogMTAwMC4wOwor
ICAgIHJldHVybiBtX3Bvc2l0aW9uQ2FjaGUtPmNhY2hlZFBvc2l0aW9uKCktPnRpbWVzdGFtcCgp
ID4gY3VycmVudFRpbWVNaWxsaXMgLSBvcHRpb25zLT5tYXhpbXVtQWdlKCk7Cit9CisKIHZvaWQg
R2VvbG9jYXRpb246OmNsZWFyV2F0Y2goaW50IHdhdGNoSWQpCiB7CiAgICAgbV93YXRjaGVycy5y
ZW1vdmUod2F0Y2hJZCk7CkBAIC0zMDcsNiArMzk3LDggQEAgdm9pZCBHZW9sb2NhdGlvbjo6cmVz
dW1lKCkKIAogdm9pZCBHZW9sb2NhdGlvbjo6c2V0SXNBbGxvd2VkKGJvb2wgYWxsb3dlZCkKIHsK
KyAgICAvLyBUaGlzIG1heSBiZSBkdWUgdG8gZWl0aGVyIGEgbmV3IHBvc2l0aW9uIGZyb20gdGhl
IHNlcnZpY2UsIG9yIGEgY2FjaGVkCisgICAgLy8gcG9zaXRpb24uCiAgICAgbV9hbGxvd0dlb2xv
Y2F0aW9uID0gYWxsb3dlZCA/IFllcyA6IE5vOwogICAgIAogI2lmIEVOQUJMRShDTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pCkBAIC0zMjksMTQgKzQyMSwyMiBAQCB2b2lkIEdlb2xvY2F0aW9uOjpz
ZXRJc0FsbG93ZWQoYm9vbCBhbGxvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKLSAg
ICAKLSAgICBpZiAoaXNBbGxvd2VkKCkpCi0gICAgICAgIG1ha2VTdWNjZXNzQ2FsbGJhY2tzKCk7
Ci0gICAgZWxzZSB7CisKKyAgICBpZiAoIWlzQWxsb3dlZCgpKSB7CiAgICAgICAgIFJlZlB0cjxQ
b3NpdGlvbkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9y
OjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2FnZSk7CiAgICAg
ICAgIGVycm9yLT5zZXRJc0ZhdGFsKHRydWUpOwogICAgICAgICBoYW5kbGVFcnJvcihlcnJvci5n
ZXQoKSk7CisgICAgICAgIG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uLmNsZWFyKCk7
CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICAvLyBJZiB0aGUgc2VydmljZSBoYXMgYSBs
YXN0IHBvc2l0aW9uLCB1c2UgaXQgdG8gY2FsbCBiYWNrIGZvciBhbGwgcmVxdWVzdHMuCisgICAg
Ly8gSWYgYW55IG9mIHRoZSByZXF1ZXN0cyBhcmUgd2FpdGluZyBmb3IgcGVybWlzc2lvbiBmb3Ig
YSBjYWNoZWQgcG9zaXRpb24sCisgICAgLy8gdGhlIHBvc2l0aW9uIGZyb20gdGhlIHNlcnZpY2Ug
d2lsbCBiZSBhdCBsZWFzdCBhcyBmcmVzaC4KKyAgICBpZiAobGFzdFBvc2l0aW9uKCkpCisgICAg
ICAgIG1ha2VTdWNjZXNzQ2FsbGJhY2tzKCk7CisgICAgZWxzZQorICAgICAgICBtYWtlQ2FjaGVk
UG9zaXRpb25DYWxsYmFja3MoKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvbjo6c2VuZEVycm9yKFZl
Y3RvcjxSZWZQdHI8R2VvTm90aWZpZXI+ID4mIG5vdGlmaWVycywgUG9zaXRpb25FcnJvciogZXJy
b3IpCkBAIC00MzgsNiArNTM4LDggQEAgdm9pZCBHZW9sb2NhdGlvbjo6cG9zaXRpb25DaGFuZ2Vk
KFBhc3NSZQogewogICAgIG1fY3VycmVudFBvc2l0aW9uID0gbmV3UG9zaXRpb247CiAKKyAgICBt
X3Bvc2l0aW9uQ2FjaGUtPnNldENhY2hlZFBvc2l0aW9uKG1fY3VycmVudFBvc2l0aW9uLmdldCgp
KTsKKwogICAgIC8vIFN0b3AgYWxsIGN1cnJlbnRseSBydW5uaW5nIHRpbWVycy4KICAgICBzdG9w
VGltZXJzKCk7CiAgICAgCkBAIC01MDMsNiArNjA1LDkgQEAgdm9pZCBHZW9sb2NhdGlvbjo6Z2Vv
bG9jYXRpb25TZXJ2aWNlRXJybwogewogICAgIEFTU0VSVChzZXJ2aWNlLT5sYXN0RXJyb3IoKSk7
CiAKKyAgICAvLyBOb3RlIHRoYXQgd2UgZG8gbm90IHN0b3AgdGltZXJzIGhlcmUuIEZvciBvbmUt
c2hvdHMsIHRoZSByZXF1ZXN0IGlzCisgICAgLy8gY2xlYXJlZCBpbiBoYW5kbGVFcnJvci4gRm9y
IHdhdGNoZXJzLCB0aGUgc3BlYyByZXF1aXJlcyB0aGF0IHRoZSB0aW1lciBpcworICAgIC8vIG5v
dCBjbGVhcmVkLgogICAgIGhhbmRsZUVycm9yKHNlcnZpY2UtPmxhc3RFcnJvcigpKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0dlb2xvY2F0aW9uLmgJKHJldmlzaW9uIDU1Nzg4KQorKysgV2ViQ29yZS9wYWdlL0dlb2xv
Y2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHly
aWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI3LDcgQEAKICNpZm5kZWYgR2VvbG9jYXRpb25f
aAogI2RlZmluZSBHZW9sb2NhdGlvbl9oCiAKKyNpbmNsdWRlICJHZW9sb2NhdGlvblBvc2l0aW9u
Q2FjaGUuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIKICNpbmNsdWRlICJHZW9w
b3NpdGlvbi5oIgogI2luY2x1ZGUgIlBvc2l0aW9uQ2FsbGJhY2suaCIKQEAgLTk1LDYgKzk3LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0RmF0YWxFcnJvcihQYXNzUmVm
UHRyPFBvc2l0aW9uRXJyb3I+KTsKICAgICAgICAgYm9vbCBoYXNaZXJvVGltZW91dCgpIGNvbnN0
OworICAgICAgICB2b2lkIHNldFVzZUNhY2hlZFBvc2l0aW9uKCk7CisgICAgICAgIHZvaWQgcnVu
U3VjY2Vzc0NhbGxiYWNrKEdlb3Bvc2l0aW9uKik7CiAgICAgICAgIHZvaWQgc3RhcnRUaW1lcklm
TmVlZGVkKCk7CiAgICAgICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxHZW9Ob3RpZmllcj4qKTsK
ICAgICAgICAgCkBAIC0xMDQsNiArMTA4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFBv
c2l0aW9uT3B0aW9ucz4gbV9vcHRpb25zOwogICAgICAgICBUaW1lcjxHZW9Ob3RpZmllcj4gbV90
aW1lcjsKICAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IG1fZmF0YWxFcnJvcjsKKyAgICAg
ICAgYm9vbCBtX3VzZUNhY2hlZFBvc2l0aW9uOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgR2Vv
Tm90aWZpZXIoR2VvbG9jYXRpb24qLCBQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNz
UmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25z
Pik7CkBAIC0xMTQsNiArMTE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzZXQoaW50IGlk
LCBQYXNzUmVmUHRyPEdlb05vdGlmaWVyPik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKGludCBpZCk7
CiAgICAgICAgIHZvaWQgcmVtb3ZlKEdlb05vdGlmaWVyKik7CisgICAgICAgIGJvb2wgY29udGFp
bnMoR2VvTm90aWZpZXIqKSBjb25zdDsKICAgICAgICAgdm9pZCBjbGVhcigpOwogICAgICAgICBi
b29sIGlzRW1wdHkoKSBjb25zdDsKICAgICAgICAgdm9pZCBnZXROb3RpZmllcnNWZWN0b3IoVmVj
dG9yPFJlZlB0cjxHZW9Ob3RpZmllcj4gPiYpIGNvbnN0OwpAQCAtMTUzLDYgKzE1OSw5IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGZhdGFsRXJyb3JPY2N1cnJlZChHZW9Ob3RpZmllciopOwogICAg
IHZvaWQgcmVxdWVzdFRpbWVkT3V0KEdlb05vdGlmaWVyKik7CisgICAgdm9pZCByZXF1ZXN0VXNl
c0NhY2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyKik7CisgICAgYm9vbCBoYXZlU3VpdGFibGVDYWNo
ZWRQb3NpdGlvbihQb3NpdGlvbk9wdGlvbnMqKTsKKyAgICB2b2lkIG1ha2VDYWNoZWRQb3NpdGlv
bkNhbGxiYWNrcygpOwogCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxHZW9Ob3RpZmllcj4g
PiBHZW9Ob3RpZmllclNldDsKICAgICAKQEAgLTE3NCw2ICsxODMsOSBAQCBwcml2YXRlOgogICAg
ICAgICBObwogICAgIH0gbV9hbGxvd0dlb2xvY2F0aW9uOwogICAgIGJvb2wgbV9zaG91bGRDbGVh
ckNhY2hlOworCisgICAgT3duUHRyPEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZT4gbV9wb3NpdGlv
bkNhY2hlOworICAgIEdlb05vdGlmaWVyU2V0IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0
aW9uOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDU1Nzg4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTAtMDMtMTAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudHMgR2VvbG9jYXRpb24gbWF4aW11bUFnZSBwcm9wZXJ0eQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA2NzYKKworICAgICAgICAqIGZhc3QvZG9t
L0dlb2xvY2F0aW9uL3Jlc291cmNlcy9tYXhpbXVtLWFnZS5qczogQWRkZWQuIENoZWNrcyB0aGF0
IGEgY2FjaGVkIHBvc2l0aW9uIGlzIHVzZWQgb25seSB3aGVuIGl0IHNob3VsZCBiZS4KKyAgICAg
ICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sOiBBZGRlZC4gSFRNTCB3
cmFwZXIgZm9yIGFib3ZlIHRlc3QuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vbWF4
aW11bS1hZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4gRXhwZWN0ZWQgcmVzdWx0IGZvciBhYm92ZSB0
ZXN0LgorCiAyMDEwLTAzLTA1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZG9tL0dlb2xvY2F0aW9uL21heGltdW0tYWdlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9t
YXhpbXVtLWFnZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQgQEAKK1Rl
c3RzIHRoYXQgdGhlIFBvc2l0aW9uT3B0aW9ucy5tYXhpbXVtQWdlIHBhcmFtZXRlciBpcyBjb3Jy
ZWN0bHkgYXBwbGllZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworUEFTUyBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUg
aXMgbW9ja0xhdGl0dWRlCitQQVNTIHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUgaXMgbW9ja0xv
bmdpdHVkZQorUEFTUyBwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3kgaXMgbW9ja0FjY3VyYWN5CisK
K1BBU1MgcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlIGlzIG1vY2tMYXRpdHVkZQorUEFTUyBwb3Np
dGlvbi5jb29yZHMubG9uZ2l0dWRlIGlzIG1vY2tMb25naXR1ZGUKK1BBU1MgcG9zaXRpb24uY29v
cmRzLmFjY3VyYWN5IGlzIG1vY2tBY2N1cmFjeQorCitQQVNTIHBvc2l0aW9uLmNvb3Jkcy5sYXRp
dHVkZSBpcyBtb2NrTGF0aXR1ZGUKK1BBU1MgcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSBpcyBt
b2NrTG9uZ2l0dWRlCitQQVNTIHBvc2l0aW9uLmNvb3Jkcy5hY2N1cmFjeSBpcyBtb2NrQWNjdXJh
Y3kKKworUEFTUyBlcnJvci5jb2RlIGlzIG1vY2tDb2RlCitQQVNTIGVycm9yLm1lc3NhZ2UgaXMg
bW9ja01lc3NhZ2UKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0dlb2xvY2F0aW9uL21heGltdW0tYWdlLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9tYXhpbXVtLWFnZS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL21heGltdW0tYWdlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9tYXhp
bXVtLWFnZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9yZXNvdXJjZXMvbWF4aW11bS1hZ2UuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvbWF4aW11bS1hZ2UuanMJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODEgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHRoZSBQb3NpdGlvbk9w
dGlvbnMubWF4aW11bUFnZSBwYXJhbWV0ZXIgaXMgY29ycmVjdGx5IGFwcGxpZWQuIik7CisKK3Zh
ciBtb2NrTGF0aXR1ZGUgPSA1MS40Nzg7Cit2YXIgbW9ja0xvbmdpdHVkZSA9IC0wLjE2NjsKK3Zh
ciBtb2NrQWNjdXJhY3kgPSAxMDAuMDsKKwordmFyIG1vY2tDb2RlID0gMTsKK3ZhciBtb2NrTWVz
c2FnZSA9ICd0ZXN0JzsKKwordmFyIHBvc2l0aW9uOwordmFyIGVycm9yOworCitmdW5jdGlvbiBj
aGVja1Bvc2l0aW9uKHApIHsKKyAgICBkZWJ1ZygnJyk7CisgICAgcG9zaXRpb24gPSBwOworICAg
IHNob3VsZEJlKCdwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUnLCAnbW9ja0xhdGl0dWRlJyk7Cisg
ICAgc2hvdWxkQmUoJ3Bvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUnLCAnbW9ja0xvbmdpdHVkZScp
OworICAgIHNob3VsZEJlKCdwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3knLCAnbW9ja0FjY3VyYWN5
Jyk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrRXJyb3IoZSkgeworICAgIGRlYnVnKCcnKTsKKyAgICBl
cnJvciA9IGU7CisgICAgc2hvdWxkQmUoJ2Vycm9yLmNvZGUnLCAnbW9ja0NvZGUnKTsKKyAgICBz
aG91bGRCZSgnZXJyb3IubWVzc2FnZScsICdtb2NrTWVzc2FnZScpOworfQorCit3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKHRydWUpOword2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKG1vY2tMYXRp
dHVkZSwgbW9ja0xvbmdpdHVkZSwgbW9ja0FjY3VyYWN5KTsKKworLy8gSW5pdGlhbGl6ZSB0aGUg
Y2FjaGVkIFBvc2l0aW9uCituYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9u
KGZ1bmN0aW9uKHApIHsKKyAgICBjaGVja1Bvc2l0aW9uKHApOworICAgIHRlc3RaZXJvTWF4aW11
bUFnZSgpOworfSwgZnVuY3Rpb24oZSkgeworICAgIHRlc3RGYWlsZWQoJ0Vycm9yIGNhbGxiYWNr
IGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKK30pOworCitmdW5jdGlvbiB0ZXN0WmVyb01heGltdW1BZ2UoKSB7Cisg
ICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBwcm92aWRlZCBieSB0aGUgbW9jayBzZXJ2aWNlLgor
ICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
bigrK21vY2tMYXRpdHVkZSwgKyttb2NrTG9uZ2l0dWRlLCArK21vY2tBY2N1cmFjeSk7CisgICAg
Ly8gVGhlIGRlZmF1bHQgbWF4aW11bUFnZSBpcyB6ZXJvLCBzbyB3ZSBleHBlY3QgdGhlIHVwZGF0
ZWQgcG9zaXRpb24gZnJvbSB0aGUgc2VydmljZS4KKyAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24u
Z2V0Q3VycmVudFBvc2l0aW9uKGZ1bmN0aW9uKHApIHsKKyAgICAgICAgY2hlY2tQb3NpdGlvbihw
KTsKKyAgICAgICAgdGVzdE5vblplcm9NYXhpbXVtQWdlKCk7CisgICAgfSwgZnVuY3Rpb24oZSkg
eworICAgICAgICB0ZXN0RmFpbGVkKCdFcnJvciBjYWxsYmFjayBpbnZva2VkIHVuZXhwZWN0ZWRs
eScpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0pOworfQorCitmdW5jdGlvbiB0ZXN0Tm9uWmVyb01heGltdW1BZ2UoKSB7CisgICAgLy8g
VXBkYXRlIHRoZSBtb2NrIHNlcnZpY2UgdG8gcmVwb3J0IGFuIGVycm9yLgorICAgIHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrR2VvbG9jYXRpb25FcnJvcihtb2NrQ29kZSwgbW9j
a01lc3NhZ2UpOworICAgIC8vIFRoZSBtYXhpbXVtQWdlIGlzIG5vbi16ZXJvLCBzbyB3ZSBleHBl
Y3QgdGhlIGNhY2hlZCBwb3NpdGlvbiwgbm90IHRoZSBlcnJvciBmcm9tIHRoZSBzZXJ2aWNlLgor
ICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rpb24ocCkg
eworICAgICAgICBjaGVja1Bvc2l0aW9uKHApOworICAgICAgICB0ZXN0WmVyb01heGltdW1BZ2VF
cnJvcigpOworICAgIH0sIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnRXJyb3Ig
Y2FsbGJhY2sgaW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICAgICAgd2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9LCB7bWF4aW11bUFnZTogMTAwMH0pOwor
fQorCitmdW5jdGlvbiB0ZXN0WmVyb01heGltdW1BZ2VFcnJvcigpIHsKKyAgICAvLyBUaGUgZGVm
YXVsdCBtYXhpbXVtQWdlIGlzIHplcm8sIHNvIHdlIGV4cGVjdCB0aGUgZXJyb3IgZnJvbSB0aGUg
c2VydmljZS4KKyAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKGZ1
bmN0aW9uKHApIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnU3VjY2VzcyBjYWxsYmFjayBpbnZva2Vk
IHVuZXhwZWN0ZWRseScpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgIH0sIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgY2hlY2tFcnJvcihlKTsK
KyAgICAgICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9z
cGFuPicpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0pOworfQorCit3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworCit2YXIgaXNBc3luY2hyb25vdXMgPSB0cnVlOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="33565"
          type_id="1"
          status="+"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>