<?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>31716</bug_id>
          
          <creation_ts>2009-11-20 04:04:50 -0800</creation_ts>
          <short_desc>Fix a bug that changes for some constraint attributes doesn&apos;t update validation CSS selectors.</short_desc>
          <delta_ts>2010-02-25 07:51:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Forms</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>
          
          <blocked>28649</blocked>
    
    <blocked>34924</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>adele</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>michelangelo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>165269</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-11-20 04:04:50 -0800</bug_when>
    <thetext>HTMLFormControlElement::isValidFormControlElement() is called on any style changes.
However isValidFormControlElement() checks all of validity constraints every time.
We can cache the validation result in HTMLFormControlElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165270</commentid>
    <comment_count>1</comment_count>
      <attachid>43571</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-11-20 04:11:39 -0800</bug_when>
    <thetext>Created attachment 43571
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167097</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-29 13:14:54 -0800</bug_when>
    <thetext>I do not understand why all of the setNeedsStyleRecalc() removals are correct.  None of these code paths result in style changes which need style recalc?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167142</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-11-29 17:31:43 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I do not understand why all of the setNeedsStyleRecalc() removals are correct. 
&gt; None of these code paths result in style changes which need style recalc?

They are not removals.  They are replaced with willValidateChagned() or updateValidity().  willValidateChanged() always calls setNeedsStyleRecal(), and updateValidity() calls setNeedsStyleRecal() if it is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167772</commentid>
    <comment_count>4</comment_count>
      <attachid>43571</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-01 16:04:06 -0800</bug_when>
    <thetext>Comment on attachment 43571
Proposed patch

Why is caching this a good idea? It seems like this makes it easier to cause problems in the future by forgetting to call the function that sets m_valid. Is there any benefit to caching this instead of calculating it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167896</commentid>
    <comment_count>5</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-02 00:06:46 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 43571 [details])
&gt; Why is caching this a good idea? It seems like this makes it easier to cause
&gt; problems in the future by forgetting to call the function that sets m_valid. Is
&gt; there any benefit to caching this instead of calculating it?

* validity()-&gt;valid(), which is called in isValidFormControl(), can be slow task.  It may do regular expression matching, parsing double/ISO8601 strings, etc.

* isValidFormControl() can be called multiple times even if the form control state is not changed.  If we define :valid and :invalid CSS selectors, checkOneSelector() in CSSStyleSelector.cpp calls isValidFormControl() two times for a form control.  I&apos;ll add another call of isValidFormControl() to hide a validation message on a value change.

I agree that the caching makes it easier to cause problems.  But I think it&apos;s *slightly* easier.
We need to add a call to setNeedsStyleRecalc() at code which can change validity status even without the caching.  So the current situation is already easy to cause problems.  If the caching was introduced, we would need to add updateValidity() just instead of setNeedsStyleRecalc().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167965</commentid>
    <comment_count>6</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-02 05:15:28 -0800</bug_when>
    <thetext>I&apos;ll replace setNeedsStyleRecalc() with updateValidity() even if we don&apos;t cache the validation result because updateValidity() will manage visibility of a validation error message.  e.g. Hide a validation error message when the value become valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167993</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-02 07:58:43 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I&apos;ll replace setNeedsStyleRecalc() with updateValidity() even if we don&apos;t cache
&gt; the validation result because updateValidity() will manage visibility of a
&gt; validation error message.  e.g. Hide a validation error message when the value
&gt; become valid.

Is updateValidity() the right name for the function? It does that, but it also triggers style recalculation, which is important in some cases even for changes  that have no effect on validity. For example, changing the read-only state seems like it could affect style but not validity.

It also seems that we should only call setNeedsStyleRecalc() if the validity actually changed. One benefit of caching the validity state is we can detect the case where validity did not actually change, and avoid an unnecessary style recalculation in that case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168303</commentid>
    <comment_count>8</comment_count>
      <attachid>44211</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-02 23:06:34 -0800</bug_when>
    <thetext>Created attachment 44211
Proposed patch (rev.2)

&gt; Is updateValidity() the right name for the function? It does that, but it also
&gt; triggers style recalculation, which is important in some cases even for changes
&gt;  that have no effect on validity.

I think so if we introduce the caching.  Style recalculation is a result of validity status change.  The reason why we added setNeedsStyleRecalc() to these code paths was because these paths could change validity status.

&gt; For example, changing the read-only state
&gt; seems like it could affect style but not validity.

Right.  So my patch doesn&apos;t call updateValidity() for the change of readonly attribute.

&gt; It also seems that we should only call setNeedsStyleRecalc() if the validity
&gt; actually changed. One benefit of caching the validity state is we can detect
&gt; the case where validity did not actually change, and avoid an unnecessary style
&gt; recalculation in that case.

It&apos;s a good idea.  The updated patch supports for it, and we need the cahcing to realize it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168304</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-02 23:11:16 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44211 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168504</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-03 12:21:31 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Is updateValidity() the right name for the function? It does that, but it also
&gt; &gt; triggers style recalculation, which is important in some cases even for changes
&gt; &gt;  that have no effect on validity.
&gt; 
&gt; I think so if we introduce the caching.  Style recalculation is a result of
&gt; validity status change.  The reason why we added setNeedsStyleRecalc() to these
&gt; code paths was because these paths could change validity status.

But aren&apos;t you also replacing some setNeedsStyleRecalc calls in code paths that previously had them for other reasons?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168624</commentid>
    <comment_count>11</comment_count>
      <attachid>44282</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-03 19:58:59 -0800</bug_when>
    <thetext>Created attachment 44282
Proposed patch (rev.3)

(In reply to comment #10)
&gt; But aren&apos;t you also replacing some setNeedsStyleRecalc calls in code paths that
&gt; previously had them for other reasons?

Ah, yes.  min/max attributes for type=range require setNeedsStyleRecalc() regardless validity status. Thank you for pointing out.

I split and renamed the method:
  updateValidityAndStyle() - should be called when validity status can be changed and the appearance should be changed regardless the validity
  updateValidityAndStyleIfNeeded() - should be called when validity status can be changed.  setNeedsStyleRecalc() is called only if the validity status is changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168625</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-03 20:00:35 -0800</bug_when>
    <thetext>Attachment 44282 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/html/HTMLFormControlElement.cpp:115:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/html/HTMLFormControlElement.cpp:323:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168626</commentid>
    <comment_count>13</comment_count>
      <attachid>44283</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-12-03 20:07:35 -0800</bug_when>
    <thetext>Created attachment 44283
Proposed patch (rev.4)

(In reply to comment #12)
&gt; WebCore/html/HTMLFormControlElement.cpp:115:  One line control clauses should
&gt; not use braces.  [whitespace/braces] [4]
&gt; WebCore/html/HTMLFormControlElement.cpp:323:  One line control clauses should
&gt; not use braces.  [whitespace/braces] [4]

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168627</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-03 20:11:02 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44283 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184721</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-26 14:08:37 -0800</bug_when>
    <thetext>This patch has been up for review for over 6 weeks.  Is there a specific reviewer who has worked in this area before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186794</commentid>
    <comment_count>16</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2010-02-01 21:28:42 -0800</bug_when>
    <thetext>I worked on a similar patch for a while, trying to fix a performance regression (http://trac.webkit.org/changeset/53878).  I eventually gave up on this approach because of the issues Darin mentioned with needing to make sure you&apos;re doing the right kind of update at the right time.

With my change in r53878, we no longer call isValidFormControlElement() on all style changes.  I&apos;m not sure this caching approach saves us much now.

Can you describe of a situation where we&apos;d get some big savings from this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186812</commentid>
    <comment_count>17</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-01 22:38:35 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; With my change in r53878, we no longer call isValidFormControlElement() on all
&gt; style changes.  I&apos;m not sure this caching approach saves us much now.
&gt; 
&gt; Can you describe of a situation where we&apos;d get some big savings from this?

Right.  This change won&apos;t improve much performance anymore.

The goal is to realize:
 - Showing a validation error message to a user when an input element becomes invalid
 - Hiding the validation error message when the element becomes valid or willValidate value becomes false.
 - Showing/hiding a validation error message when willValidate value becomes true.

We need to keep track of validity state changes to implement them. This patch is a preparation for them.
It&apos;s ok to remove the caching from this patch.  It makes the code less complex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186903</commentid>
    <comment_count>18</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-02 04:13:33 -0800</bug_when>
    <thetext>I&apos;m removing the caching part of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186904</commentid>
    <comment_count>19</comment_count>
      <attachid>47920</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-02 04:14:32 -0800</bug_when>
    <thetext>Created attachment 47920
Proposed patch (rev.5)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186989</commentid>
    <comment_count>20</comment_count>
      <attachid>47920</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-02 09:00:09 -0800</bug_when>
    <thetext>Comment on attachment 47920
Proposed patch (rev.5)

First, some comments about the HTMLFormControlElement::willValidate function, not changed in this patch. I notice it calls isReadOnlyFormControl. When we already have an HTMLFormControlElement pointer, this is unnecessarily inefficient because it&apos;s a virtual function call. The efficient way to check is to check m_readOnly directly. The value added by isReadOnlyFormControl is a type check. I think it would also be better to use m_disabled than the disabled function. Perhaps the disabled function should also be made inline.

&gt; -            setNeedsStyleRecalc();
&gt; +            willValidateChanged();

Probably would be better to only do style recalculation if it&apos;s needed.

One way to accomplish that would be to use a different idiom. We could call willValidate both before and after making changes and only call willValidateChanged if the value of willValidate actually changed. I&apos;m assuming that an otherwise-unnecessary style recalculation is expensive and worth avoiding.

The insertedIntoTree function now calls willValidateChanged even if m_form was zero and remains zero, and for disabled or read-only controls. That could all be avoided with the suggestion above.

As far as the task of adding calls to willValidateChanged in HTMLFormControlElement is concerned, I see code that handles changes to &quot;m_disabled&quot; and &quot;m_readOnly&quot; and where &quot;m_form&quot; becomes non-zero, but I do not see code that handles the case where &quot;m_form&quot; becomes zero in removeFromForm or that handles changes to nameAttr in case the name has become empty/non-empty.

It almost seems that despite our bad experiences, caching the old value would be helpful, not for optimizing the result of the functions to fetch the validity state, but for getting the state changes correct. It&apos;s quite fragile to both have functions to answer &quot;is this valid&quot; and then scattered code to invalidate when those constraints change. How would someone changing the functions know to go update the call sites where those states could change.

How would notice if we forgot to call one of these state change functions? Maybe we need to devise a debugging feature to catch mistakes.

If we do cache a value I think it should be a single three-state concept: &quot;will not validate&quot;, &quot;valid&quot;, &quot;invalid&quot;. Treating these as independent makes the code more complicated in places where they overlap. I know the DOM API for this treats them separately, but the style code would be much simpler if it used a single three-state concept.

&gt; +    // This should be called when a validation constraint or control value is
&gt; +    // changed. This requests style reculculation.

Typo here: &quot;reculculation&quot;. I think you could leave out the second sentence. And I would say &quot;must&quot; instead of &quot;should&quot;.

&gt; +    // This should be called if willValidate() result can be changed.
&gt; +    void willValidateChanged();

I think the comment needs to be more specific. The phrase &quot;can be changed&quot; here is unclear. You probably mean something like &quot;may have changed&quot;.

A comment more like this: &quot;This must be called any time the result of willValidate() has changed.&quot;

But that still is not helpful for someone making code changes on this class. Another sentence could explain, &quot;Code that changes values that are inspected in the wilLValidate function has to call this.&quot; I&apos;m not sure my comments are great, but they might be a bit better.

I think the name &quot;validity changed&quot; is not ideal, because the function is currently called in lots of cases when the validity has not changed. The code must call it when something has changed that affects the validity computation, but is allowed to call it extra times. That fuzziness is annoying. Possibly-better name for this type of function are &quot;setNeedsValidityCheck&quot; and &quot;setNeedsWillValidateCheck&quot;.

It&apos;s worth thinking out how to explain the concept in plain language and then converting that to a function name rather than using a function name that comes from other function names.

&gt;          dispatchFormControlChangeEvent();
&gt;  
&gt;      InputElement::notifyFormStateChanged(this);
&gt; -    updateValidity();
&gt; +    validityChanged();

To me it seems this is a little too late to call validityChanged. Some day in the future we might want to make sure this is called before anyone checks validity, so it would be best to call it before dispatching an event. In general, I think these calls should be as close to the change as possible before other sorts of notifications, even though at this time the only thing these functions do is call setNeedsStyleRecalc.

In theory, there should be a willValidateChanged call as well as a validityChanged call in HTMLInputElement::setInputType. If we are really going to call it any time the state of &quot;will validate&quot; may have changed. That&apos;s one of the disadvantages of treating these two concepts separately instead of having a single three-state concept.

r=me, please consider my comments about the completeness and design</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187267</commentid>
    <comment_count>21</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-02 22:22:05 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 47920 [details])
&gt; First, some comments about the HTMLFormControlElement::willValidate function,
&gt; not changed in this patch. I notice it calls isReadOnlyFormControl. When we
&gt; already have an HTMLFormControlElement pointer, this is unnecessarily
&gt; inefficient because it&apos;s a virtual function call. The efficient way to check is
&gt; to check m_readOnly directly. The value added by isReadOnlyFormControl is a
&gt; type check. I think it would also be better to use m_disabled than the disabled
&gt; function. Perhaps the disabled function should also be made inline.

Fixed all of them.

&gt; One way to accomplish that would be to use a different idiom. We could call
&gt; willValidate both before and after making changes and only call
&gt; willValidateChanged if the value of willValidate actually changed. I&apos;m assuming
&gt; that an otherwise-unnecessary style recalculation is expensive and worth
&gt; avoiding.

Applied this to parseMappedAttribute().

&gt; The insertedIntoTree function now calls willValidateChanged even if m_form was
&gt; zero and remains zero, and for disabled or read-only controls. That could all
&gt; be avoided with the suggestion above.

I didn&apos;t apply it to insertedIntoTree() because to move willValidateChanged() to the correct place doesn&apos;t need extra condition checks.

&gt; As far as the task of adding calls to willValidateChanged in
&gt; HTMLFormControlElement is concerned, I see code that handles changes to
&gt; &quot;m_disabled&quot; and &quot;m_readOnly&quot; and where &quot;m_form&quot; becomes non-zero, but I do not
&gt; see code that handles the case where &quot;m_form&quot; becomes zero in removeFromForm or
&gt; that handles changes to nameAttr in case the name has become empty/non-empty.

Fixed for removeFromForm() and nameAttr in parseMappedAttribute(), and formDestroyed().


&gt; It almost seems that despite our bad experiences, caching the old value would
&gt; be helpful, not for optimizing the result of the functions to fetch the
&gt; validity state, but for getting the state changes correct. It&apos;s quite fragile
&gt; to both have functions to answer &quot;is this valid&quot; and then scattered code to
&gt; invalidate when those constraints change. How would someone changing the
&gt; functions know to go update the call sites where those states could change.
&gt; 
&gt; How would notice if we forgot to call one of these state change functions?
&gt; Maybe we need to devise a debugging feature to catch mistakes.
&gt; 
&gt; If we do cache a value I think it should be a single three-state concept: &quot;will
&gt; not validate&quot;, &quot;valid&quot;, &quot;invalid&quot;. Treating these as independent makes the code
&gt; more complicated in places where they overlap. I know the DOM API for this
&gt; treats them separately, but the style code would be much simpler if it used a
&gt; single three-state concept.

I&apos;ll address them later.
Caching the validity state, and adding an assertion in isValidFormControlElment() (like ASSERT(m_valid == validity()-&gt;valid())) would be helpful.

&gt; &gt; +    // This should be called when a validation constraint or control value is
&gt; &gt; +    // changed. This requests style reculculation.
&gt; 
&gt; Typo here: &quot;reculculation&quot;. I think you could leave out the second sentence.
&gt; And I would say &quot;must&quot; instead of &quot;should&quot;.
&gt; 
&gt; &gt; +    // This should be called if willValidate() result can be changed.
&gt; &gt; +    void willValidateChanged();
&gt; 
&gt; I think the comment needs to be more specific. The phrase &quot;can be changed&quot; here
&gt; is unclear. You probably mean something like &quot;may have changed&quot;.
&gt; 
&gt; A comment more like this: &quot;This must be called any time the result of
&gt; willValidate() has changed.&quot;
&gt; 
&gt; But that still is not helpful for someone making code changes on this class.
&gt; Another sentence could explain, &quot;Code that changes values that are inspected in
&gt; the wilLValidate function has to call this.&quot; I&apos;m not sure my comments are
&gt; great, but they might be a bit better.

Updated comments.

&gt; I think the name &quot;validity changed&quot; is not ideal, because the function is
&gt; currently called in lots of cases when the validity has not changed. The code
&gt; must call it when something has changed that affects the validity computation,
&gt; but is allowed to call it extra times. That fuzziness is annoying.
&gt; Possibly-better name for this type of function are &quot;setNeedsValidityCheck&quot; and
&gt; &quot;setNeedsWillValidateCheck&quot;.

Renamed them.

&gt; &gt;      InputElement::notifyFormStateChanged(this);
&gt; &gt; -    updateValidity();
&gt; &gt; +    validityChanged();
&gt; 
&gt; To me it seems this is a little too late to call validityChanged. Some day in
&gt; the future we might want to make sure this is called before anyone checks
&gt; validity, so it would be best to call it before dispatching an event. In
&gt; general, I think these calls should be as close to the change as possible
&gt; before other sorts of notifications, even though at this time the only thing
&gt; these functions do is call setNeedsStyleRecalc.

Fixed.

&gt; In theory, there should be a willValidateChanged call as well as a
&gt; validityChanged call in HTMLInputElement::setInputType. If we are really going
&gt; to call it any time the state of &quot;will validate&quot; may have changed. That&apos;s one
&gt; of the disadvantages of treating these two concepts separately instead of
&gt; having a single three-state concept.

Fixed for setInputType().

&gt; r=me, please consider my comments about the completeness and design</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187273</commentid>
    <comment_count>22</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-02 22:57:27 -0800</bug_when>
    <thetext>Landed as r54274</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43571</attachid>
            <date>2009-11-20 04:11:39 -0800</date>
            <delta_ts>2009-12-02 23:06:34 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-iv1-cache-validity-1.patch</filename>
            <type>text/plain</type>
            <size>8355</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGJmYjkzY2IuLmE2YWY5MDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDktMTEtMjAgIEtlbnQgVGFtdXJh
ICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENhY2hlIHRoZSB2YWxpZGF0aW9uIHJlc3VsdCBhcyBIVE1MRm9ybUNv
bnRvcmxFbGVtZW50OjptX3ZhbGlkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzE3MTYKKyAgICAgICAgCisgICAgICAgIG1fdmFsaWQgaXMgdXBkYXRl
ZCB3aGVuOgorICAgICAgICAgLSB0aGUgdmFsdWUgaXMgY2hhbmdlZCwKKyAgICAgICAgIC0gdmFs
aWRpdHkgY29uc3RyYWludCBpcyBjaGFuZ2VkLCBvcgorICAgICAgICAgLSB3aWxsVmFsaWRhdGUo
KSBzdGF0dXMgaXMgY2hhbmdlZC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgY2hhbmdlIG1ha2Vz
IG5vIGJlaGF2aW9yIGNoYW5nZXMuICBFeGlzdGluZyB0ZXN0cyBzdWNoIGFzCisgICAgICAgIExh
eW91dFRlc3RzL2Zhc3QvZm9ybXMve2lucHV0LHRleHRhcmVhfS1saXZhLXBzZXVkby1zZWxlY3Rv
cnMuaHRtbAorICAgICAgICBjb25maXJtIGFueSBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKwor
ICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVk
SW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2ls
bFZhbGlkYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50OjpjaGVja1ZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnVwZGF0ZVZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKwog
MjAwOS0xMS0xOSAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcAppbmRleCAxNTQ2NTQzLi5hMjE5YzNiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC01NCw2ICs1NCw3IEBAIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jCiAgICAgLCBtX2Rpc2FibGVkKGZhbHNlKQogICAgICwgbV9yZWFkT25seShmYWxzZSkK
ICAgICAsIG1fcmVxdWlyZWQoZmFsc2UpCisgICAgLCBtX3ZhbGlkKHRydWUpCiAgICAgLCBtX3Zh
bHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQogewogICAgIGlmICghbV9mb3JtKQpAQCAtOTQsNyAr
OTUsNyBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKICAgICAgICAgYm9vbCBvbGREaXNhYmxlZCA9IG1fZGlz
YWJsZWQ7CiAgICAgICAgIG1fZGlzYWJsZWQgPSAhYXR0ci0+aXNOdWxsKCk7CiAgICAgICAgIGlm
IChvbGREaXNhYmxlZCAhPSBtX2Rpc2FibGVkKSB7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKCk7CisgICAgICAgICAgICB3aWxsVmFsaWRhdGVDaGFuZ2VkKCk7CiAgICAgICAgICAg
ICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkp
CiAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRl
cmVyKCksIEVuYWJsZWRTdGF0ZSk7CiAgICAgICAgIH0KQEAgLTEwMiw3ICsxMDMsNyBAQCB2b2lk
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cikKICAgICAgICAgYm9vbCBvbGRSZWFkT25seSA9IG1fcmVhZE9ubHk7CiAgICAg
ICAgIG1fcmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7CiAgICAgICAgIGlmIChvbGRSZWFkT25s
eSAhPSBtX3JlYWRPbmx5KSB7Ci0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Cisg
ICAgICAgICAgICB3aWxsVmFsaWRhdGVDaGFuZ2VkKCk7CiAgICAgICAgICAgICBpZiAocmVuZGVy
ZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFuZ2VkKHJlbmRlcmVyKCksIFJlYWRP
bmx5U3RhdGUpOwogICAgICAgICB9CkBAIC0xMTAsNyArMTExLDcgQEAgdm9pZCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
CiAgICAgICAgIGJvb2wgb2xkUmVxdWlyZWQgPSBtX3JlcXVpcmVkOwogICAgICAgICBtX3JlcXVp
cmVkID0gIWF0dHItPmlzTnVsbCgpOwogICAgICAgICBpZiAob2xkUmVxdWlyZWQgIT0gbV9yZXF1
aXJlZCkKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIHVw
ZGF0ZVZhbGlkaXR5KCk7CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTE1Miw2ICsxNTMsNyBAQCB2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQogICAgICAgICAgICAg
bV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwor
ICAgICAgICB3aWxsVmFsaWRhdGVDaGFuZ2VkKCk7CiAgICAgfQogCiAgICAgSFRNTEVsZW1lbnQ6
Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CkBAIC0yOTMsOSArMjk1LDE1IEBAIFN0cmluZyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxpZGF0aW9uTWVzc2FnZSgpCiAgICAgcmV0dXJuIHZhbGlk
aXR5KCktPnZhbGlkYXRpb25NZXNzYWdlKCk7CiB9CiAKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6d2lsbFZhbGlkYXRlQ2hhbmdlZCgpCit7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygp
OworICAgIG1fdmFsaWQgPSB3aWxsVmFsaWRhdGUoKSA/IHZhbGlkaXR5KCktPnZhbGlkKCkgOiB0
cnVlOworfQorCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKQog
ewotICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiAhaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
KSB7CisgICAgaWYgKCFtX3ZhbGlkKSB7CiAgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShFdmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1ZSkpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzA1LDEwICszMTMsMTUgQEAgYm9vbCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojp1cGRhdGVWYWxpZGl0eSgpCiB7Ci0gICAgaWYgKHdpbGxWYWxpZGF0ZSgpKSB7Ci0gICAg
ICAgIC8vIFVwZGF0ZSBzdHlsZSBmb3IgcHNldWRvIGNsYXNzZXMgc3VjaCBhcyA6dmFsaWQgOmlu
dmFsaWQuCi0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICBpZiAoIXdpbGxWYWxp
ZGF0ZSgpKSB7CisgICAgICAgIC8vIElmICF3aWxsVmFsaWRhdGUoKSwgbV92YWxpZCBpcyBhbHdh
eXMgdHJ1ZS4KKyAgICAgICAgQVNTRVJUKG1fdmFsaWQpOworICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIC8vIFVwZGF0ZSB0aGUgdmFsaWRpdHkuCisgICAgbV92YWxpZCA9IHZhbGlkaXR5KCkt
PnZhbGlkKCk7CisgICAgLy8gVXBkYXRlIHN0eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNoIGFz
IDp2YWxpZCA6aW52YWxpZC4KKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJiBl
cnJvcikKQEAgLTM0NCw3ICszNTcsNyBAQCBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omlz
RGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdAogCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKQogewotICAgIHJldHVybiB2YWxpZGl0eSgp
LT52YWxpZCgpOworICAgIHJldHVybiBtX3ZhbGlkOwogfQogCiB2b2lkIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oCmluZGV4IDcxMDUxMTIuLjM1ZmNiMTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgd2ls
bFZhbGlkYXRlKCkgY29uc3Q7CiAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAg
Ym9vbCBjaGVja1ZhbGlkaXR5KCk7CisgICAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4g
YSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgYSBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCiAg
ICAgdm9pZCB1cGRhdGVWYWxpZGl0eSgpOwogICAgIHZvaWQgc2V0Q3VzdG9tVmFsaWRpdHkoY29u
c3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBib29sIHZhbHVlTWlzc2luZygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CkBAIC0xMjcsMTIgKzEyOCwxNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
SFRNTEZvcm1FbGVtZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c0RlZmF1bHRCdXR0b25Gb3JGb3JtKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWRG
b3JtQ29udHJvbEVsZW1lbnQoKTsKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgaWYgd2ls
bFZhbGlkYXRlKCkgcmVzdWx0IGNhbiBiZSBjaGFuZ2VkLgorICAgIHZvaWQgd2lsbFZhbGlkYXRl
Q2hhbmdlZCgpOwogCiAgICAgSFRNTEZvcm1FbGVtZW50KiBtX2Zvcm07CiAgICAgUmVmUHRyPFZh
bGlkaXR5U3RhdGU+IG1fdmFsaWRpdHlTdGF0ZTsKICAgICBib29sIG1fZGlzYWJsZWQgOiAxOwog
ICAgIGJvb2wgbV9yZWFkT25seSA6IDE7CiAgICAgYm9vbCBtX3JlcXVpcmVkIDogMTsKKyAgICAv
LyBDYWNoZSBvZiB2YWxpZGl0eSgpLT52YWxpZCgpLiAgSXQgaXMgYWx3YXlzIHRydWUgaWYgd2ls
bFZhbGlkYXRlKCkgaXMgZmFsc2UuCisgICAgYm9vbCBtX3ZhbGlkIDogMTsKICAgICBib29sIG1f
dmFsdWVNYXRjaGVzUmVuZGVyZXIgOiAxOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CmluZGV4IGJiOGZkMjYuLjdjZDk4MDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAg
LTgxNSw5ICs4MTUsMTAgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiAgICAgICAgICAgICBtX3VzZURlZmF1bHRDaGVj
a2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICB1cGRhdGVWYWxpZGl0eSgpOwotICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1heGxlbmd0aEF0dHIpCisgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gbWF4bGVuZ3RoQXR0cikgewogICAgICAgICBJbnB1dEVsZW1lbnQ6OnBh
cnNlTWF4TGVuZ3RoQXR0cmlidXRlKG1fZGF0YSwgdGhpcywgdGhpcywgYXR0cik7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHNpemVBdHRyKQorICAgICAgICB1cGRhdGVWYWxpZGl0eSgp
OworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNpemVBdHRyKQogICAgICAgICBJbnB1
dEVsZW1lbnQ6OnBhcnNlU2l6ZUF0dHJpYnV0ZShtX2RhdGEsIHRoaXMsIGF0dHIpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhbHRBdHRyKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigp
ICYmIGlucHV0VHlwZSgpID09IElNQUdFKQpAQCAtODYzLDEzICs4NjQsMTUgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
CiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBhdXRvc2F2ZUF0dHIgfHwKICAgICAgICAgICAgICBhdHRyLT5uYW1lKCkgPT0gaW5j
cmVtZW50YWxBdHRyIHx8Ci0gICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IG1pbkF0dHIgfHwK
LSAgICAgICAgICAgICBhdHRyLT5uYW1lKCkgPT0gbWF4QXR0ciB8fAotICAgICAgICAgICAgIGF0
dHItPm5hbWUoKSA9PSBtdWx0aXBsZUF0dHIgfHwKICAgICAgICAgICAgICBhdHRyLT5uYW1lKCkg
PT0gcHJlY2lzaW9uQXR0cikKICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBwYXR0ZXJuQXR0cikKKyAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gbWluQXR0cgorICAgICAgICAgICAgIHx8IGF0dHItPm5hbWUoKSA9PSBtYXhBdHRy
CisgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IG11bHRpcGxlQXR0cgorICAgICAgICAg
ICAgIHx8IGF0dHItPm5hbWUoKSA9PSBwYXR0ZXJuQXR0cgorICAgICAgICAgICAgIHx8IGF0dHIt
Pm5hbWUoKSA9PSBzdGVwQXR0cikgewogICAgICAgICB1cGRhdGVWYWxpZGl0eSgpOworICAgIH0K
ICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGxpc3RB
dHRyKQogICAgICAgICBtX2hhc05vbkVtcHR5TGlzdCA9ICFhdHRyLT5pc0VtcHR5KCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0
bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggMzAzMDAxOC4uMGRhNmJmMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMTQ5LDcgKzE0OSw5IEBAIHZvaWQgSFRN
TFRleHRBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBh
dHRyKQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewogICAgICAg
ICAvLyBEb24ndCBtYXAgJ2FsaWduJyBhdHRyaWJ1dGUuICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJl
Zm94LCBPcGVyYSBhbmQgSUUgZG8uCiAgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03MDc1Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gbWF4bGVuZ3RoQXR0cikKKyAgICAgICAgdXBkYXRlVmFsaWRpdHkoKTsKKyAg
ICBlbHNlCiAgICAgICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKIH0KIAotLSAKMS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44211</attachid>
            <date>2009-12-02 23:06:34 -0800</date>
            <delta_ts>2009-12-03 19:58:59 -0800</delta_ts>
            <desc>Proposed patch (rev.2)</desc>
            <filename>0001-iv1-cache-validity-2.patch</filename>
            <type>text/plain</type>
            <size>9476</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSAzMzQyNDhjOWZjNmUzYzM1MzJmZDM0NzA5MWVjNWM2MTY2YTlmN2YyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBGcmksIDIwIE5vdiAyMDA5IDIwOjI1OjQ3ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gaXYxLWNh
Y2hlLXZhbGlkaXR5LTIKCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAzNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgfCAgIDM0ICsrKysrKysrKysrKysrKysrKysrKyst
LS0tLS0tCiBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oICAgfCAgICA3ICsr
KysrLQogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwICAgICAgIHwgICAxNSArKysr
KysrLS0tLS0KIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCAgICB8ICAgIDQg
KystCiA1IGZpbGVzIGNoYW5nZWQsIDgwIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzA5ZDdjOS4uYzU1NDlhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAwOS0xMS0yMCAgS2VudCBUYW11cmEg
IDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ2FjaGUgdGhlIHZhbGlkYXRpb24gcmVzdWx0IGFzIEhUTUxGb3JtQ29u
dG9ybEVsZW1lbnQ6Om1fdmFsaWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTcxNgorCisgICAgICAgIElmIGEgcGFnZSBhdXRob3Igc3BlY2lmaWVz
IDp2YWxpZCBhbmQgOmludmFsaWQgQ1NTIHNlbGVjdG9ycywKKyAgICAgICAgV2ViQ29yZSBuZWVk
cyB0byBjYWxsIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1l
bnQoKQorICAgICAgICB0d2ljZSBmb3IgdGhlIHNhbWUgc3RhdGUgZWxlbWVudC4gVGhlIGNhY2hp
bmcgYXZvaWRzIGR1cGxpY2F0ZWQKKyAgICAgICAgdmFsaWRhdGlvbiBjaGVja3MsIGFuZCB3ZSBj
YW4gYXZvaWQgdW5uZWNlc3NhcnkKKyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpIGNhbGxz
IGJ5IHRoZSBjYWNoaW5nLgorCisgICAgICAgIG1fdmFsaWQgaXMgdXBkYXRlZCB3aGVuOgorICAg
ICAgICAgLSB0aGUgdmFsdWUgaXMgY2hhbmdlZCwKKyAgICAgICAgIC0gdmFsaWRpdHkgY29uc3Ry
YWludCBpcyBjaGFuZ2VkLCBvcgorICAgICAgICAgLSB3aWxsVmFsaWRhdGUoKSBzdGF0dXMgaXMg
Y2hhbmdlZC4KKworICAgICAgICBUaGlzIGNoYW5nZSBtYWtlcyBubyBiZWhhdmlvciBjaGFuZ2Vz
LiAgRXhpc3RpbmcgdGVzdHMgc3VjaCBhcworICAgICAgICBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L3tpbnB1dCx0ZXh0YXJlYX0tbGl2YS1wc2V1ZG8tc2VsZWN0b3JzLmh0bWwKKyAgICAgICAgY29u
ZmlybSBhbnkgYmVoYXZpb3IgaXMgbm90IGNoYW5nZWQuCisKKyAgICAgICAgKiBodG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWYWxpZGl0
eSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9y
bUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0
bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFy
ZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisKIDIwMDktMTItMDEgIEtlbnQgVGFt
dXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
IGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDI1MzFjNDgu
LmM1ODhlODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTU0
LDYgKzU0LDcgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6SFRNTEZvcm1Db250cm9sRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2MKICAgICAsIG1fZGlzYWJsZWQoZmFs
c2UpCiAgICAgLCBtX3JlYWRPbmx5KGZhbHNlKQogICAgICwgbV9yZXF1aXJlZChmYWxzZSkKKyAg
ICAsIG1fdmFsaWQodHJ1ZSkKICAgICAsIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCiB7
CiAgICAgaWYgKCFtX2Zvcm0pCkBAIC05NCw3ICs5NSw3IEBAIHZvaWQgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogICAg
ICAgICBib29sIG9sZERpc2FibGVkID0gbV9kaXNhYmxlZDsKICAgICAgICAgbV9kaXNhYmxlZCA9
ICFhdHRyLT5pc051bGwoKTsKICAgICAgICAgaWYgKG9sZERpc2FibGVkICE9IG1fZGlzYWJsZWQp
IHsKLSAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIHdpbGxW
YWxpZGF0ZUNoYW5nZWQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPnN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSkKICAgICAgICAgICAgICAgICByZW5kZXJlcigp
LT50aGVtZSgpLT5zdGF0ZUNoYW5nZWQocmVuZGVyZXIoKSwgRW5hYmxlZFN0YXRlKTsKICAgICAg
ICAgfQpAQCAtMTAyLDE1ICsxMDMsMTcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiAgICAgICAgIGJvb2wg
b2xkUmVhZE9ubHkgPSBtX3JlYWRPbmx5OwogICAgICAgICBtX3JlYWRPbmx5ID0gIWF0dHItPmlz
TnVsbCgpOwogICAgICAgICBpZiAob2xkUmVhZE9ubHkgIT0gbV9yZWFkT25seSkgewotICAgICAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgd2lsbFZhbGlkYXRlQ2hh
bmdlZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkt
PnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBSZWFkT25seVN0YXRlKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHJlcXVpcmVkQXR0cikgewogICAgICAgICBib29s
IG9sZFJlcXVpcmVkID0gbV9yZXF1aXJlZDsKICAgICAgICAgbV9yZXF1aXJlZCA9ICFhdHRyLT5p
c051bGwoKTsKLSAgICAgICAgaWYgKG9sZFJlcXVpcmVkICE9IG1fcmVxdWlyZWQpCi0gICAgICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIGlmIChvbGRSZXF1aXJlZCAhPSBt
X3JlcXVpcmVkKSB7CisgICAgICAgICAgICAvLyB1cGRhdGVWYWxpZGl0eSgpIHNob3VsZCBjYWxs
IHNldE5lZWRzU3R5bGVSZWNhbGMoKSBmb3IgOnJlcXVpcmVkIGFuZCA6b3B0aW9uYWwuCisgICAg
ICAgICAgICB1cGRhdGVWYWxpZGl0eSh0cnVlKTsKKyAgICAgICAgfQogICAgIH0gZWxzZQogICAg
ICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0xNTIs
NiArMTU1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNlcnRlZEludG9UcmVl
KGJvb2wgZGVlcCkKICAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3JtRWxlbWVudCh0aGlz
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0
dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICAgICAgd2lsbFZhbGlkYXRlQ2hhbmdlZCgpOwog
ICAgIH0KIAogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRlZXApOwpAQCAtMjkz
LDkgKzI5NywxNSBAQCBTdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlvbk1l
c3NhZ2UoKQogICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9uTWVzc2FnZSgpOwogfQog
Cit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZUNoYW5nZWQoKQorewor
ICAgIG1fdmFsaWQgPSB3aWxsVmFsaWRhdGUoKSA/IHZhbGlkaXR5KCktPnZhbGlkKCkgOiB0cnVl
OworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKK30KKwogYm9vbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKIHsKLSAgICBpZiAod2lsbFZhbGlkYXRlKCkgJiYgIWlz
VmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkgeworICAgIGlmICghbV92YWxpZCkgewogICAgICAg
ICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwg
ZmFsc2UsIHRydWUpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTMwMyw5ICsz
MTMsMTcgQEAgYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVW
YWxpZGl0eSgpCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZhbGlkaXR5KGJv
b2wgbmVlZHNTdHlsZVJlY2FsYykKIHsKLSAgICBpZiAod2lsbFZhbGlkYXRlKCkpIHsKKyAgICBp
ZiAoIXdpbGxWYWxpZGF0ZSgpKSB7CisgICAgICAgIC8vIElmICF3aWxsVmFsaWRhdGUoKSwgbV92
YWxpZCBpcyBhbHdheXMgdHJ1ZS4KKyAgICAgICAgQVNTRVJUKG1fdmFsaWQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIC8vIFVwZGF0ZSB0aGUgdmFsaWRpdHkuCisgICAgYm9vbCBvbGRW
YWxpZCA9IG1fdmFsaWQ7CisgICAgbV92YWxpZCA9IHZhbGlkaXR5KCktPnZhbGlkKCk7CisgICAg
aWYgKG9sZFZhbGlkICE9IG1fdmFsaWQgfHwgbmVlZHNTdHlsZVJlY2FsYykgewogICAgICAgICAv
LyBVcGRhdGUgc3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1Y2ggYXMgOnZhbGlkIDppbnZhbGlk
LgogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQpAQCAtMzQ0LDcgKzM2Miw3
IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgp
IGNvbnN0CiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9s
RWxlbWVudCgpCiB7Ci0gICAgcmV0dXJuIHZhbGlkaXR5KCktPnZhbGlkKCk7CisgICAgcmV0dXJu
IG1fdmFsaWQ7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUZv
cm0oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCBi
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKaW5kZXggNzEwNTExMi4uMTI4
NWMwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC0xMDksNyArMTA5
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdDsKICAg
ICBTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2UoKTsKICAgICBib29sIGNoZWNrVmFsaWRpdHkoKTsK
LSAgICB2b2lkIHVwZGF0ZVZhbGlkaXR5KCk7CisgICAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVk
IHdoZW4gYSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgYSBjb250cm9sIHZhbHVlIGlzIGNoYW5n
ZWQuCisgICAgdm9pZCB1cGRhdGVWYWxpZGl0eShib29sIG5lZWRzU3R5bGVSZWNhbGMgPSBmYWxz
ZSk7CiAgICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0
dWFsIGJvb2wgdmFsdWVNaXNzaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgcGF0dGVybk1pc21hdGNoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEy
NywxMiArMTI4LDE2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBIVE1MRm9ybUVsZW1lbnQqIHZp
cnR1YWxGb3JtKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRGVmYXVsdEJ1dHRvbkZvckZv
cm0oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
OworICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpZiB3aWxsVmFsaWRhdGUoKSByZXN1bHQg
Y2FuIGJlIGNoYW5nZWQuCisgICAgdm9pZCB3aWxsVmFsaWRhdGVDaGFuZ2VkKCk7CiAKICAgICBI
VE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKICAgICBSZWZQdHI8VmFsaWRpdHlTdGF0ZT4gbV92YWxp
ZGl0eVN0YXRlOwogICAgIGJvb2wgbV9kaXNhYmxlZCA6IDE7CiAgICAgYm9vbCBtX3JlYWRPbmx5
IDogMTsKICAgICBib29sIG1fcmVxdWlyZWQgOiAxOworICAgIC8vIENhY2hlIG9mIHZhbGlkaXR5
KCktPnZhbGlkKCkuICBJdCBpcyBhbHdheXMgdHJ1ZSBpZiB3aWxsVmFsaWRhdGUoKSBpcyBmYWxz
ZS4KKyAgICBib29sIG1fdmFsaWQgOiAxOwogICAgIGJvb2wgbV92YWx1ZU1hdGNoZXNSZW5kZXJl
ciA6IDE7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggYmI4ZmQyNi4uN2Nk
OTgwMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBi
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtODE1LDkgKzgxNSwxMCBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKICAgICAgICAgICAgIG1fdXNlRGVmYXVsdENoZWNrZWQgPSB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gbWF4bGVuZ3RoQXR0cikKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtYXhs
ZW5ndGhBdHRyKSB7CiAgICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VNYXhMZW5ndGhBdHRyaWJ1
dGUobV9kYXRhLCB0aGlzLCB0aGlzLCBhdHRyKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gc2l6ZUF0dHIpCisgICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CisgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gc2l6ZUF0dHIpCiAgICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VTaXpl
QXR0cmlidXRlKG1fZGF0YSwgdGhpcywgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGFsdEF0dHIpIHsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgaW5wdXRUeXBlKCkgPT0g
SU1BR0UpCkBAIC04NjMsMTMgKzg2NCwxNSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKICAgICAgICAgc2V0TmVlZHNT
dHlsZVJlY2FsYygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9zYXZlQXR0
ciB8fAogICAgICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSBpbmNyZW1lbnRhbEF0dHIgfHwKLSAg
ICAgICAgICAgICBhdHRyLT5uYW1lKCkgPT0gbWluQXR0ciB8fAotICAgICAgICAgICAgIGF0dHIt
Pm5hbWUoKSA9PSBtYXhBdHRyIHx8Ci0gICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IG11bHRp
cGxlQXR0ciB8fAogICAgICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSBwcmVjaXNpb25BdHRyKQog
ICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IHBhdHRlcm5BdHRyKQorICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtaW5BdHRyCisg
ICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IG1heEF0dHIKKyAgICAgICAgICAgICB8fCBh
dHRyLT5uYW1lKCkgPT0gbXVsdGlwbGVBdHRyCisgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgp
ID09IHBhdHRlcm5BdHRyCisgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IHN0ZXBBdHRy
KSB7CiAgICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CisgICAgfQogI2lmIEVOQUJMRShEQVRBTElT
VCkKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbGlzdEF0dHIpCiAgICAgICAgIG1faGFz
Tm9uRW1wdHlMaXN0ID0gIWF0dHItPmlzRW1wdHkoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcAppbmRleCAzMDMwMDE4Li4wZGE2YmYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCkBAIC0xNDksNyArMTQ5LDkgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7CiAgICAgICAgIC8vIERvbid0IG1hcCAnYWxp
Z24nIGF0dHJpYnV0ZS4gIFRoaXMgbWF0Y2hlcyB3aGF0IEZpcmVmb3gsIE9wZXJhIGFuZCBJRSBk
by4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcwNzUKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtYXhsZW5n
dGhBdHRyKQorICAgICAgICB1cGRhdGVWYWxpZGl0eSgpOworICAgIGVsc2UKICAgICAgICAgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQog
Ci0tIAoxLjYuMy4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44282</attachid>
            <date>2009-12-03 19:58:59 -0800</date>
            <delta_ts>2009-12-03 20:07:35 -0800</delta_ts>
            <desc>Proposed patch (rev.3)</desc>
            <filename>0001-iv1-cache-validity-3.patch</filename>
            <type>text/plain</type>
            <size>12824</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDMwOWQ3YzkuLjYxZjcxNGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMDktMTItMDMgIEtlbnQgVGFtdXJh
ICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENhY2hlIHRoZSB2YWxpZGF0aW9uIHJlc3VsdCBhcyBIVE1MRm9ybUNv
bnRvcmxFbGVtZW50OjptX3ZhbGlkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzE3MTYKKworICAgICAgICBJZiBhIHBhZ2UgYXV0aG9yIHNwZWNpZmll
cyA6dmFsaWQgYW5kIDppbnZhbGlkIENTUyBzZWxlY3RvcnMsCisgICAgICAgIFdlYkNvcmUgbmVl
ZHMgdG8gY2FsbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRyb2xFbGVt
ZW50KCkKKyAgICAgICAgdHdpY2UgZm9yIHRoZSBzYW1lIHN0YXRlIGVsZW1lbnQuIFRoZSBjYWNo
aW5nIGF2b2lkcyBkdXBsaWNhdGVkCisgICAgICAgIHZhbGlkYXRpb24gY2hlY2tzLCBhbmQgd2Ug
Y2FuIGF2b2lkIHVubmVjZXNzYXJ5CisgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKSBjYWxs
cyBieSB0aGUgY2FjaGluZy4KKworICAgICAgICBUaGUgdmFsaWRpdHkgY2FjaGUgc2hvdWxkIGJl
IHVwZGF0ZWQgd2hlbjoKKyAgICAgICAgIC0gdGhlIHZhbHVlIGlzIGNoYW5nZWQsCisgICAgICAg
ICAtIHZhbGlkaXR5IGNvbnN0cmFpbnQgaXMgY2hhbmdlZCwgb3IKKyAgICAgICAgIC0gd2lsbFZh
bGlkYXRlKCkgc3RhdHVzIGlzIGNoYW5nZWQuCisgICAgICAgIFdlIHNob3VsZCBjYWxsIHVwZGF0
ZVZhbGlkaXR5QW5kU3R5bGUoKSBvcgorICAgICAgICB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlSWZO
ZWVkZWQoKSBpbiBzdWNoIGNhc2VzLgorCisgICAgICAgIFRoaXMgY2hhbmdlIG1ha2VzIG5vIGJl
aGF2aW9yIGNoYW5nZXMuICBFeGlzdGluZyB0ZXN0cyBzdWNoIGFzCisgICAgICAgIExheW91dFRl
c3RzL2Zhc3QvZm9ybXMve2lucHV0LHRleHRhcmVhfS1saXZhLXBzZXVkby1zZWxlY3RvcnMuaHRt
bAorICAgICAgICBjb25maXJtIGFueSBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1Ry
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6d2lsbFZhbGlk
YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpj
aGVja1ZhbGlkaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OnVwZGF0ZVZhbGlkaXR5QW5kU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250
cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCk6CisgICAgICAgICogaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Ojp1cGRhdGVWYWxpZGl0eUFuZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZhbGlkaXR5QW5kU3R5bGVJZk5lZWRlZCk6Cisg
ICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OnNldElucHV0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVt
ZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZW5kZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OnNldFZhbHVlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xN
dWx0aUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxp
bmU6OnN1YnRyZWVIYXNDaGFuZ2VkKToKKwogMjAwOS0xMi0wMSAgS2VudCBUYW11cmEgIDx0a2Vu
dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggMjUzMWM0OC4uY2E3MzY4YSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBi
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtNTQsNiArNTQsNyBA
QCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvYwogICAgICwgbV9kaXNhYmxlZChmYWxzZSkKICAgICAs
IG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBtX3JlcXVpcmVkKGZhbHNlKQorICAgICwgbV92YWxp
ZCh0cnVlKQogICAgICwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkKIHsKICAgICBpZiAo
IW1fZm9ybSkKQEAgLTk0LDcgKzk1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiAgICAgICAgIGJvb2wg
b2xkRGlzYWJsZWQgPSBtX2Rpc2FibGVkOwogICAgICAgICBtX2Rpc2FibGVkID0gIWF0dHItPmlz
TnVsbCgpOwogICAgICAgICBpZiAob2xkRGlzYWJsZWQgIT0gbV9kaXNhYmxlZCkgewotICAgICAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgd2lsbFZhbGlkYXRlQ2hh
bmdlZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCkt
PnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBFbmFibGVkU3RhdGUpOwogICAgICAgICB9CkBAIC0x
MDIsMTUgKzEwMywxNiBAQCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKICAgICAgICAgYm9vbCBvbGRSZWFkT25s
eSA9IG1fcmVhZE9ubHk7CiAgICAgICAgIG1fcmVhZE9ubHkgPSAhYXR0ci0+aXNOdWxsKCk7CiAg
ICAgICAgIGlmIChvbGRSZWFkT25seSAhPSBtX3JlYWRPbmx5KSB7Ci0gICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICB3aWxsVmFsaWRhdGVDaGFuZ2VkKCk7CiAg
ICAgICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNBcHBl
YXJhbmNlKCkpCiAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+c3RhdGVDaGFu
Z2VkKHJlbmRlcmVyKCksIFJlYWRPbmx5U3RhdGUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gcmVxdWlyZWRBdHRyKSB7CiAgICAgICAgIGJvb2wgb2xkUmVxdWly
ZWQgPSBtX3JlcXVpcmVkOwogICAgICAgICBtX3JlcXVpcmVkID0gIWF0dHItPmlzTnVsbCgpOwot
ICAgICAgICBpZiAob2xkUmVxdWlyZWQgIT0gbV9yZXF1aXJlZCkKLSAgICAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgaWYgKG9sZFJlcXVpcmVkICE9IG1fcmVxdWlyZWQp
IHsKKyAgICAgICAgICAgIHVwZGF0ZVZhbGlkaXR5QW5kU3R5bGUoKTsKKyAgICAgICAgfQogICAg
IH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CiB9CkBAIC0xNTIsNiArMTU0LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjppbnNl
cnRlZEludG9UcmVlKGJvb2wgZGVlcCkKICAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJGb3Jt
RWxlbWVudCh0aGlzKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZG9jdW1lbnQoKS0+Y2hl
Y2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKKyAgICAgICAgd2lsbFZhbGlkYXRl
Q2hhbmdlZCgpOwogICAgIH0KIAogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGRl
ZXApOwpAQCAtMjkzLDkgKzI5NiwxNSBAQCBTdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6
dmFsaWRhdGlvbk1lc3NhZ2UoKQogICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9uTWVz
c2FnZSgpOwogfQogCit2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZUNo
YW5nZWQoKQoreworICAgIG1fdmFsaWQgPSB3aWxsVmFsaWRhdGUoKSA/IHZhbGlkaXR5KCktPnZh
bGlkKCkgOiB0cnVlOworICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKK30KKwogYm9vbCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKIHsKLSAgICBpZiAod2lsbFZhbGlk
YXRlKCkgJiYgIWlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkgeworICAgIGlmICghbV92YWxp
ZCkgewogICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmlu
dmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
QEAgLTMwMywxMCArMzEyLDE4IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tW
YWxpZGl0eSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6dXBkYXRlVmFsaWRpdHkoKQordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRh
dGVWYWxpZGl0eUFuZFN0eWxlKGJvb2wgYWx3YXlzUmVjYWxjU3R5bGUpCiB7Ci0gICAgaWYgKHdp
bGxWYWxpZGF0ZSgpKSB7Ci0gICAgICAgIC8vIFVwZGF0ZSBzdHlsZSBmb3IgcHNldWRvIGNsYXNz
ZXMgc3VjaCBhcyA6dmFsaWQgOmludmFsaWQuCisgICAgYm9vbCBvbGRWYWxpZCA9IG1fdmFsaWQ7
CisgICAgaWYgKCF3aWxsVmFsaWRhdGUoKSkgeworICAgICAgICAvLyBJZiAhd2lsbFZhbGlkYXRl
KCksIG1fdmFsaWQgaXMgYWx3YXlzIHRydWUuCisgICAgICAgIEFTU0VSVChtX3ZhbGlkKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX3ZhbGlkID0gdmFsaWRpdHkoKS0+dmFsaWQoKTsKKyAgICB9
CisgICAgLy8gVXBkYXRlIHN0eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNoIGFzIDp2YWxpZCA6
aW52YWxpZCBpZiB0aGUKKyAgICAvLyB2YWxpZGl0eSBzdGF0dXMgaGFzIGJlZW4gY2hhbmdlZC4K
KyAgICBpZiAob2xkVmFsaWQgIT0gbV92YWxpZCB8fCBhbHdheXNSZWNhbGNTdHlsZSkgewogICAg
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQogfQpAQCAtMzQ0LDcgKzM2MSw3IEBA
IGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNEZWZhdWx0QnV0dG9uRm9yRm9ybSgpIGNv
bnN0CiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9sRWxl
bWVudCgpCiB7Ci0gICAgcmV0dXJuIHZhbGlkaXR5KCktPnZhbGlkKCk7CisgICAgcmV0dXJuIG1f
dmFsaWQ7CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlRnJvbUZvcm0o
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCBiL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKaW5kZXggNzEwNTExMi4uMWIyMzQx
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC0xMDksNyArMTA5LDE0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7CiAgICAg
U3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7CiAgICAgYm9vbCBjaGVja1ZhbGlkaXR5KCk7Ci0g
ICAgdm9pZCB1cGRhdGVWYWxpZGl0eSgpOworICAgIC8vIFVwZGF0ZSB0aGUgdmFsaWRpdHkgY2Fo
Y2UgYW5kIHRoZSBzdHlsZS4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCisgICAgLy8gd2hlbiBhIHZh
bGlkYXRpb24gY29uc3RyYWludCBpcyBjaGFuZ2VkIGFuZCBpdCBhbHdheXMgYWZmZWN0cworICAg
IC8vIHRoZSBzdHlsZS4KKyAgICBpbmxpbmUgdm9pZCB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlKCkg
eyB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlKHRydWUpOyB9CisgICAgLy8gVXBkYXRlIHRoZSB2YWxp
ZGl0eSBjYWhjZSBhbmQgdXBkYXRlIHRoZSBzdHlsZSBpZiB0aGUgdmFsaWRpdHkKKyAgICAvLyBo
YXMgYmVlbiBjaGFuZ2VkLiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSB2YWxpZGF0aW9u
CisgICAgLy8gY29uc3RyYWludCBvciBhIGNvbnRyb2wgdmFsdWUgaXMgY2hhbmdlZC4KKyAgICBp
bmxpbmUgdm9pZCB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlSWZOZWVkZWQoKSB7IHVwZGF0ZVZhbGlk
aXR5QW5kU3R5bGUoZmFsc2UpOyB9CiAgICAgdm9pZCBzZXRDdXN0b21WYWxpZGl0eShjb25zdCBT
dHJpbmcmKTsKICAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNaXNzaW5nKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGF0dGVybk1pc21hdGNoKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KQEAgLTEyNywxMiArMTM0LDE3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBI
VE1MRm9ybUVsZW1lbnQqIHZpcnR1YWxGb3JtKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
RGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZEZv
cm1Db250cm9sRWxlbWVudCgpOworICAgIC8vIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpZiB3aWxs
VmFsaWRhdGUoKSByZXN1bHQgY2FuIGJlIGNoYW5nZWQuCisgICAgdm9pZCB3aWxsVmFsaWRhdGVD
aGFuZ2VkKCk7CisgICAgdm9pZCB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlKGJvb2wgYWx3YXlzUmVj
YWxjU3R5bGUpOwogCiAgICAgSFRNTEZvcm1FbGVtZW50KiBtX2Zvcm07CiAgICAgUmVmUHRyPFZh
bGlkaXR5U3RhdGU+IG1fdmFsaWRpdHlTdGF0ZTsKICAgICBib29sIG1fZGlzYWJsZWQgOiAxOwog
ICAgIGJvb2wgbV9yZWFkT25seSA6IDE7CiAgICAgYm9vbCBtX3JlcXVpcmVkIDogMTsKKyAgICAv
LyBDYWNoZSBvZiB2YWxpZGl0eSgpLT52YWxpZCgpLiAgSXQgaXMgYWx3YXlzIHRydWUgaWYgd2ls
bFZhbGlkYXRlKCkgaXMgZmFsc2UuCisgICAgYm9vbCBtX3ZhbGlkIDogMTsKICAgICBib29sIG1f
dmFsdWVNYXRjaGVzUmVuZGVyZXIgOiAxOwogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CmluZGV4IGJiOGZkMjYuLmIyZjQwY2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAg
LTU4OCw3ICs1ODgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldElucHV0VHlwZShjb25z
dCBTdHJpbmcmIHQpCiAgICAgICAgIH0KIAogICAgICAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZv
cm1TdGF0ZUNoYW5nZWQodGhpcyk7Ci0gICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CisgICAgICAg
IHVwZGF0ZVZhbGlkaXR5QW5kU3R5bGVJZk5lZWRlZCgpOwogICAgIH0KICAgICBtX2hhdmVUeXBl
ID0gdHJ1ZTsKIApAQCAtODA3LDE3ICs4MDcsMTggQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiAgICAgICAgIGlmICht
X2RhdGEudmFsdWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKICAgICAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7Ci0g
ICAgICAgIHVwZGF0ZVZhbGlkaXR5KCk7CisgICAgICAgIHVwZGF0ZVZhbGlkaXR5QW5kU3R5bGVJ
Zk5lZWRlZCgpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNoZWNrZWRBdHRyKSB7
CiAgICAgICAgIG1fZGVmYXVsdENoZWNrZWQgPSAhYXR0ci0+aXNOdWxsKCk7CiAgICAgICAgIGlm
IChtX3VzZURlZmF1bHRDaGVja2VkKSB7CiAgICAgICAgICAgICBzZXRDaGVja2VkKG1fZGVmYXVs
dENoZWNrZWQpOwogICAgICAgICAgICAgbV91c2VEZWZhdWx0Q2hlY2tlZCA9IHRydWU7CiAgICAg
ICAgIH0KLSAgICAgICAgdXBkYXRlVmFsaWRpdHkoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBtYXhsZW5ndGhBdHRyKQorICAgICAgICB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlSWZO
ZWVkZWQoKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtYXhsZW5ndGhBdHRyKSB7
CiAgICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUobV9kYXRhLCB0
aGlzLCB0aGlzLCBhdHRyKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2l6ZUF0dHIp
CisgICAgICAgIHVwZGF0ZVZhbGlkaXR5QW5kU3R5bGVJZk5lZWRlZCgpOworICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHNpemVBdHRyKQogICAgICAgICBJbnB1dEVsZW1lbnQ6OnBhcnNl
U2l6ZUF0dHJpYnV0ZShtX2RhdGEsIHRoaXMsIGF0dHIpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBhbHRBdHRyKSB7CiAgICAgICAgIGlmIChyZW5kZXJlcigpICYmIGlucHV0VHlwZSgp
ID09IElNQUdFKQpAQCAtODYxLDE1ICs4NjIsMTcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiAgICAgICAgICAgICBh
dHRhY2goKTsKICAgICAgICAgfQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b3NhdmVBdHRyIHx8Ci0gICAgICAgICAgICAg
YXR0ci0+bmFtZSgpID09IGluY3JlbWVudGFsQXR0ciB8fAotICAgICAgICAgICAgIGF0dHItPm5h
bWUoKSA9PSBtaW5BdHRyIHx8Ci0gICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IG1heEF0dHIg
fHwKLSAgICAgICAgICAgICBhdHRyLT5uYW1lKCkgPT0gbXVsdGlwbGVBdHRyIHx8Ci0gICAgICAg
ICAgICAgYXR0ci0+bmFtZSgpID09IHByZWNpc2lvbkF0dHIpCisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gYXV0b3NhdmVBdHRyCisgICAgICAgICAgICAgICB8fCBhdHRyLT5uYW1lKCkg
PT0gaW5jcmVtZW50YWxBdHRyKQogICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHBhdHRlcm5BdHRyKQotICAgICAgICB1cGRhdGVWYWxp
ZGl0eSgpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtaW5BdHRyCisgICAgICAgICAg
ICAgfHwgYXR0ci0+bmFtZSgpID09IG1heEF0dHIKKyAgICAgICAgICAgICB8fCBhdHRyLT5uYW1l
KCkgPT0gc3RlcEF0dHIKKyAgICAgICAgICAgICB8fCBhdHRyLT5uYW1lKCkgPT0gcHJlY2lzaW9u
QXR0cikgeworICAgICAgICB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlKCk7CisgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gbXVsdGlwbGVBdHRyCisgICAgICAgICAgICAgICB8fCBhdHRyLT5u
YW1lKCkgPT0gcGF0dGVybkF0dHIpCisgICAgICAgIHVwZGF0ZVZhbGlkaXR5QW5kU3R5bGVJZk5l
ZWRlZCgpOwogI2lmIEVOQUJMRShEQVRBTElTVCkKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gbGlzdEF0dHIpCiAgICAgICAgIG1faGFzTm9uRW1wdHlMaXN0ID0gIWF0dHItPmlzRW1wdHko
KTsKQEAgLTEyODEsNyArMTI4NCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgIGNhY2hlU2VsZWN0aW9uKG1heCwgbWF4
KTsKICAgICB9CiAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMp
OwotICAgIHVwZGF0ZVZhbGlkaXR5KCk7CisgICAgdXBkYXRlVmFsaWRpdHlBbmRTdHlsZUlmTmVl
ZGVkKCk7CiB9CiAKIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjpwbGFjZWhvbGRlcigpIGNvbnN0
CkBAIC0xMzA1LDcgKzEzMDgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJv
bVJlbmRlcmVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgQVNTRVJUKGlucHV0VHlwZSgpICE9
IEZJTEUpOwogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgSW5w
dXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihtX2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVl
KTsKLSAgICB1cGRhdGVWYWxpZGl0eSgpOworICAgIHVwZGF0ZVZhbGlkaXR5QW5kU3R5bGVJZk5l
ZWRlZCgpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRl
cmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKQEAgLTEzMTcsNyArMTMyMCw3IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhdGhzKQogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJl
cih0cnVlKTsKICAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7
Ci0gICAgdXBkYXRlVmFsaWRpdHkoKTsKKyAgICB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlSWZOZWVk
ZWQoKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzdG9yZXNWYWx1ZVNlcGFyYXRlRnJv
bUF0dHJpYnV0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXgg
MzAzMDAxOC4uYjMwN2QxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAt
MTQ5LDcgKzE0OSw5IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGFsaWduQXR0cikgewogICAgICAgICAvLyBEb24ndCBtYXAgJ2FsaWduJyBhdHRyaWJ1dGUu
ICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJlZm94LCBPcGVyYSBhbmQgSUUgZG8uCiAgICAgICAgIC8v
IFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDc1Ci0gICAgfSBl
bHNlCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWF4bGVuZ3RoQXR0cikKKyAgICAg
ICAgdXBkYXRlVmFsaWRpdHlBbmRTdHlsZUlmTmVlZGVkKCk7CisgICAgZWxzZQogICAgICAgICBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9
CiAKQEAgLTI5OCw3ICszMDAsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAg
bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlzKTsKLSAgICB1cGRhdGVWYWxpZGl0eSgpOworICAg
IHVwZGF0ZVZhbGlkaXR5QW5kU3R5bGVJZk5lZWRlZCgpOwogfQogCiBTdHJpbmcgSFRNTFRleHRB
cmVhRWxlbWVudDo6ZGVmYXVsdFZhbHVlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcAppbmRleCBkZmM5NjZhLi44ODFkNDM4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3Bw
CkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OnN1YnRy
ZWVIYXNDaGFuZ2VkKCkKICAgICBSZW5kZXJUZXh0Q29udHJvbDo6c3VidHJlZUhhc0NoYW5nZWQo
KTsKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxU
ZXh0QXJlYUVsZW1lbnQqPihub2RlKCkpOwogICAgIHRleHRBcmVhLT5zZXRGb3JtQ29udHJvbFZh
bHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKLSAgICB0ZXh0QXJlYS0+dXBkYXRlVmFsaWRpdHko
KTsKKyAgICB0ZXh0QXJlYS0+dXBkYXRlVmFsaWRpdHlBbmRTdHlsZUlmTmVlZGVkKCk7CiAKICAg
ICBpZiAoIW5vZGUoKS0+Zm9jdXNlZCgpKQogICAgICAgICByZXR1cm47Ci0tIAoxLjYuMy4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44283</attachid>
            <date>2009-12-03 20:07:35 -0800</date>
            <delta_ts>2010-02-02 04:14:24 -0800</delta_ts>
            <desc>Proposed patch (rev.4)</desc>
            <filename>0001-iv1-cache-validity-4.patch</filename>
            <type>text/plain</type>
            <size>13554</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSA3ZGNjMjAzYTFkYTIxMzJmMzY2Nzg1N2UxYTFiYWUxNWJlZTE0ZjE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBGcmksIDIwIE5vdiAyMDA5IDIwOjI1OjQ3ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gaXYxLWNh
Y2hlLXZhbGlkaXR5LTQKCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICA0NyArKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgICAgICAgICAgfCAgIDMyICsrKysrKysrKysrLS0t
LQogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCAgICAgICAgICAgIHwgICAx
NCArKysrKystCiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgICAgICAgICAgICAg
ICAgfCAgIDM1ICsrKysrKysrKy0tLS0tLS0KIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcCAgICAgICAgICAgICB8ICAgIDYgKystCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbE11bHRpTGluZS5jcHAgfCAgICAyICstCiA2IGZpbGVzIGNoYW5nZWQsIDEwNyBp
bnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMwOWQ3YzkuLjYxZjcxNGYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTAgQEAKKzIwMDktMTItMDMgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhY2hlIHRoZSB2
YWxpZGF0aW9uIHJlc3VsdCBhcyBIVE1MRm9ybUNvbnRvcmxFbGVtZW50OjptX3ZhbGlkLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE3MTYKKworICAg
ICAgICBJZiBhIHBhZ2UgYXV0aG9yIHNwZWNpZmllcyA6dmFsaWQgYW5kIDppbnZhbGlkIENTUyBz
ZWxlY3RvcnMsCisgICAgICAgIFdlYkNvcmUgbmVlZHMgdG8gY2FsbCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkKKyAgICAgICAgdHdpY2UgZm9yIHRo
ZSBzYW1lIHN0YXRlIGVsZW1lbnQuIFRoZSBjYWNoaW5nIGF2b2lkcyBkdXBsaWNhdGVkCisgICAg
ICAgIHZhbGlkYXRpb24gY2hlY2tzLCBhbmQgd2UgY2FuIGF2b2lkIHVubmVjZXNzYXJ5CisgICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKSBjYWxscyBieSB0aGUgY2FjaGluZy4KKworICAgICAg
ICBUaGUgdmFsaWRpdHkgY2FjaGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2hlbjoKKyAgICAgICAgIC0g
dGhlIHZhbHVlIGlzIGNoYW5nZWQsCisgICAgICAgICAtIHZhbGlkaXR5IGNvbnN0cmFpbnQgaXMg
Y2hhbmdlZCwgb3IKKyAgICAgICAgIC0gd2lsbFZhbGlkYXRlKCkgc3RhdHVzIGlzIGNoYW5nZWQu
CisgICAgICAgIFdlIHNob3VsZCBjYWxsIHVwZGF0ZVZhbGlkaXR5QW5kU3R5bGUoKSBvcgorICAg
ICAgICB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlSWZOZWVkZWQoKSBpbiBzdWNoIGNhc2VzLgorCisg
ICAgICAgIFRoaXMgY2hhbmdlIG1ha2VzIG5vIGJlaGF2aW9yIGNoYW5nZXMuICBFeGlzdGluZyB0
ZXN0cyBzdWNoIGFzCisgICAgICAgIExheW91dFRlc3RzL2Zhc3QvZm9ybXMve2lucHV0LHRleHRh
cmVhfS1saXZhLXBzZXVkby1zZWxlY3RvcnMuaHRtbAorICAgICAgICBjb25maXJtIGFueSBiZWhh
dmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6d2lsbFZhbGlkYXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZhbGlkaXR5QW5kU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250
cm9sRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWYWxpZGl0eUFu
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0
ZVZhbGlkaXR5QW5kU3R5bGVJZk5lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldElucHV0VHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZW5k
ZXJlcik6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OnN1YnRyZWVIYXNDaGFuZ2VkKToKKwog
MjAwOS0xMi0wMSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKaW5kZXggMjUzMWM0OC4uZThiYTVlNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcApAQCAtNTQsNiArNTQsNyBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvYwog
ICAgICwgbV9kaXNhYmxlZChmYWxzZSkKICAgICAsIG1fcmVhZE9ubHkoZmFsc2UpCiAgICAgLCBt
X3JlcXVpcmVkKGZhbHNlKQorICAgICwgbV92YWxpZCh0cnVlKQogICAgICwgbV92YWx1ZU1hdGNo
ZXNSZW5kZXJlcihmYWxzZSkKIHsKICAgICBpZiAoIW1fZm9ybSkKQEAgLTk0LDcgKzk1LDcgQEAg
dm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCiAgICAgICAgIGJvb2wgb2xkRGlzYWJsZWQgPSBtX2Rpc2FibGVkOwog
ICAgICAgICBtX2Rpc2FibGVkID0gIWF0dHItPmlzTnVsbCgpOwogICAgICAgICBpZiAob2xkRGlz
YWJsZWQgIT0gbV9kaXNhYmxlZCkgewotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygp
OworICAgICAgICAgICAgd2lsbFZhbGlkYXRlQ2hhbmdlZCgpOwogICAgICAgICAgICAgaWYgKHJl
bmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCktPnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBF
bmFibGVkU3RhdGUpOwogICAgICAgICB9CkBAIC0xMDIsNyArMTAzLDcgQEAgdm9pZCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpCiAgICAgICAgIGJvb2wgb2xkUmVhZE9ubHkgPSBtX3JlYWRPbmx5OwogICAgICAgICBtX3Jl
YWRPbmx5ID0gIWF0dHItPmlzTnVsbCgpOwogICAgICAgICBpZiAob2xkUmVhZE9ubHkgIT0gbV9y
ZWFkT25seSkgewotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAg
ICAgd2lsbFZhbGlkYXRlQ2hhbmdlZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYg
cmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCktPnRoZW1lKCktPnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBSZWFkT25seVN0YXRl
KTsKICAgICAgICAgfQpAQCAtMTEwLDcgKzExMSw3IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogICAgICAg
ICBib29sIG9sZFJlcXVpcmVkID0gbV9yZXF1aXJlZDsKICAgICAgICAgbV9yZXF1aXJlZCA9ICFh
dHRyLT5pc051bGwoKTsKICAgICAgICAgaWYgKG9sZFJlcXVpcmVkICE9IG1fcmVxdWlyZWQpCi0g
ICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICB1cGRhdGVWYWxp
ZGl0eUFuZFN0eWxlKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTE1Miw2ICsxNTMsNyBAQCB2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQogICAgICAgICAgICAg
bV9mb3JtLT5yZWdpc3RlckZvcm1FbGVtZW50KHRoaXMpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwor
ICAgICAgICB3aWxsVmFsaWRhdGVDaGFuZ2VkKCk7CiAgICAgfQogCiAgICAgSFRNTEVsZW1lbnQ6
Omluc2VydGVkSW50b1RyZWUoZGVlcCk7CkBAIC0yOTMsOSArMjk1LDE1IEBAIFN0cmluZyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxpZGF0aW9uTWVzc2FnZSgpCiAgICAgcmV0dXJuIHZhbGlk
aXR5KCktPnZhbGlkYXRpb25NZXNzYWdlKCk7CiB9CiAKK3ZvaWQgSFRNTEZvcm1Db250cm9sRWxl
bWVudDo6d2lsbFZhbGlkYXRlQ2hhbmdlZCgpCit7CisgICAgbV92YWxpZCA9IHdpbGxWYWxpZGF0
ZSgpID8gdmFsaWRpdHkoKS0+dmFsaWQoKSA6IHRydWU7CisgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOworfQorCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKQog
ewotICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiAhaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
KSB7CisgICAgaWYgKCFtX3ZhbGlkKSB7CiAgICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1ZSkpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzAzLDEyICszMTEsMTggQEAgYm9vbCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWYWxpZGl0eSgpCit2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZhbGlkaXR5QW5kU3R5bGUoYm9vbCBhbHdheXNSZWNhbGNT
dHlsZSkKIHsKLSAgICBpZiAod2lsbFZhbGlkYXRlKCkpIHsKLSAgICAgICAgLy8gVXBkYXRlIHN0
eWxlIGZvciBwc2V1ZG8gY2xhc3NlcyBzdWNoIGFzIDp2YWxpZCA6aW52YWxpZC4KKyAgICBib29s
IG9sZFZhbGlkID0gbV92YWxpZDsKKyAgICBpZiAoIXdpbGxWYWxpZGF0ZSgpKSB7CisgICAgICAg
IC8vIElmICF3aWxsVmFsaWRhdGUoKSwgbV92YWxpZCBpcyBhbHdheXMgdHJ1ZS4KKyAgICAgICAg
QVNTRVJUKG1fdmFsaWQpOworICAgIH0gZWxzZQorICAgICAgICBtX3ZhbGlkID0gdmFsaWRpdHko
KS0+dmFsaWQoKTsKKyAgICAvLyBVcGRhdGUgc3R5bGUgZm9yIHBzZXVkbyBjbGFzc2VzIHN1Y2gg
YXMgOnZhbGlkIDppbnZhbGlkIGlmIHRoZQorICAgIC8vIHZhbGlkaXR5IHN0YXR1cyBoYXMgYmVl
biBjaGFuZ2VkIG9yIHJlcXVlc3RlZCB0byByZWNhbGMuCisgICAgaWYgKG9sZFZhbGlkICE9IG1f
dmFsaWQgfHwgYWx3YXlzUmVjYWxjU3R5bGUpCiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKLSAgICB9CiB9CiAKIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6c2V0Q3VzdG9tVmFs
aWRpdHkoY29uc3QgU3RyaW5nJiBlcnJvcikKQEAgLTM0NCw3ICszNTgsNyBAQCBib29sIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmlzRGVmYXVsdEJ1dHRvbkZvckZvcm0oKSBjb25zdAogCiBib29s
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKQogewot
ICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZCgpOworICAgIHJldHVybiBtX3ZhbGlkOwogfQog
CiB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnJlbW92ZUZyb21Gb3JtKCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IDcxMDUxMTIuLjFiMjM0MWYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaApAQCAtMTA5LDcgKzEwOSwxNCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIHdpbGxWYWxpZGF0ZSgpIGNvbnN0OwogICAgIFN0cmluZyB2YWxp
ZGF0aW9uTWVzc2FnZSgpOwogICAgIGJvb2wgY2hlY2tWYWxpZGl0eSgpOwotICAgIHZvaWQgdXBk
YXRlVmFsaWRpdHkoKTsKKyAgICAvLyBVcGRhdGUgdGhlIHZhbGlkaXR5IGNhaGNlIGFuZCB0aGUg
c3R5bGUuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZAorICAgIC8vIHdoZW4gYSB2YWxpZGF0aW9uIGNv
bnN0cmFpbnQgaXMgY2hhbmdlZCBhbmQgaXQgYWx3YXlzIGFmZmVjdHMKKyAgICAvLyB0aGUgc3R5
bGUuCisgICAgaW5saW5lIHZvaWQgdXBkYXRlVmFsaWRpdHlBbmRTdHlsZSgpIHsgdXBkYXRlVmFs
aWRpdHlBbmRTdHlsZSh0cnVlKTsgfQorICAgIC8vIFVwZGF0ZSB0aGUgdmFsaWRpdHkgY2FoY2Ug
YW5kIHVwZGF0ZSB0aGUgc3R5bGUgaWYgdGhlIHZhbGlkaXR5CisgICAgLy8gaGFzIGJlZW4gY2hh
bmdlZC4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgdmFsaWRhdGlvbgorICAgIC8vIGNv
bnN0cmFpbnQgb3IgYSBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCisgICAgaW5saW5lIHZvaWQg
dXBkYXRlVmFsaWRpdHlBbmRTdHlsZUlmTmVlZGVkKCkgeyB1cGRhdGVWYWxpZGl0eUFuZFN0eWxl
KGZhbHNlKTsgfQogICAgIHZvaWQgc2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJik7CiAg
ICAgdmlydHVhbCBib29sIHZhbHVlTWlzc2luZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIHBhdHRlcm5NaXNtYXRjaCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CkBAIC0xMjcsMTIgKzEzNCwxNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSFRNTEZvcm1FbGVt
ZW50KiB2aXJ0dWFsRm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0RlZmF1bHRCdXR0
b25Gb3JGb3JtKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzVmFsaWRGb3JtQ29udHJvbEVs
ZW1lbnQoKTsKKyAgICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgaWYgd2lsbFZhbGlkYXRlKCkg
cmVzdWx0IGNhbiBiZSBjaGFuZ2VkLgorICAgIHZvaWQgd2lsbFZhbGlkYXRlQ2hhbmdlZCgpOwor
ICAgIHZvaWQgdXBkYXRlVmFsaWRpdHlBbmRTdHlsZShib29sIGFsd2F5c1JlY2FsY1N0eWxlKTsK
IAogICAgIEhUTUxGb3JtRWxlbWVudCogbV9mb3JtOwogICAgIFJlZlB0cjxWYWxpZGl0eVN0YXRl
PiBtX3ZhbGlkaXR5U3RhdGU7CiAgICAgYm9vbCBtX2Rpc2FibGVkIDogMTsKICAgICBib29sIG1f
cmVhZE9ubHkgOiAxOwogICAgIGJvb2wgbV9yZXF1aXJlZCA6IDE7CisgICAgLy8gQ2FjaGUgb2Yg
dmFsaWRpdHkoKS0+dmFsaWQoKS4gIEl0IGlzIGFsd2F5cyB0cnVlIGlmIHdpbGxWYWxpZGF0ZSgp
IGlzIGZhbHNlLgorICAgIGJvb2wgbV92YWxpZCA6IDE7CiAgICAgYm9vbCBtX3ZhbHVlTWF0Y2hl
c1JlbmRlcmVyIDogMTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBiYjhm
ZDI2Li5iMmY0MGNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC01ODgsNyArNTg4
LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRJbnB1dFR5cGUoY29uc3QgU3RyaW5nJiB0
KQogICAgICAgICB9CiAKICAgICAgICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFu
Z2VkKHRoaXMpOwotICAgICAgICB1cGRhdGVWYWxpZGl0eSgpOworICAgICAgICB1cGRhdGVWYWxp
ZGl0eUFuZFN0eWxlSWZOZWVkZWQoKTsKICAgICB9CiAgICAgbV9oYXZlVHlwZSA9IHRydWU7CiAK
QEAgLTgwNywxNyArODA3LDE4IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogICAgICAgICBpZiAobV9kYXRhLnZhbHVl
KCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAg
IHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwotICAgICAgICB1cGRh
dGVWYWxpZGl0eSgpOworICAgICAgICB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlSWZOZWVkZWQoKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBjaGVja2VkQXR0cikgewogICAgICAgICBt
X2RlZmF1bHRDaGVja2VkID0gIWF0dHItPmlzTnVsbCgpOwogICAgICAgICBpZiAobV91c2VEZWZh
dWx0Q2hlY2tlZCkgewogICAgICAgICAgICAgc2V0Q2hlY2tlZChtX2RlZmF1bHRDaGVja2VkKTsK
ICAgICAgICAgICAgIG1fdXNlRGVmYXVsdENoZWNrZWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAg
ICAgIHVwZGF0ZVZhbGlkaXR5KCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWF4
bGVuZ3RoQXR0cikKKyAgICAgICAgdXBkYXRlVmFsaWRpdHlBbmRTdHlsZUlmTmVlZGVkKCk7Cisg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWF4bGVuZ3RoQXR0cikgewogICAgICAgICBJ
bnB1dEVsZW1lbnQ6OnBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKG1fZGF0YSwgdGhpcywgdGhpcywg
YXR0cik7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNpemVBdHRyKQorICAgICAgICB1
cGRhdGVWYWxpZGl0eUFuZFN0eWxlSWZOZWVkZWQoKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBzaXplQXR0cikKICAgICAgICAgSW5wdXRFbGVtZW50OjpwYXJzZVNpemVBdHRyaWJ1
dGUobV9kYXRhLCB0aGlzLCBhdHRyKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0
QXR0cikgewogICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiBpbnB1dFR5cGUoKSA9PSBJTUFHRSkK
QEAgLTg2MSwxNSArODYyLDE3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogICAgICAgICAgICAgYXR0YWNoKCk7CiAg
ICAgICAgIH0KICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGF1dG9zYXZlQXR0ciB8fAotICAgICAgICAgICAgIGF0dHItPm5hbWUo
KSA9PSBpbmNyZW1lbnRhbEF0dHIgfHwKLSAgICAgICAgICAgICBhdHRyLT5uYW1lKCkgPT0gbWlu
QXR0ciB8fAotICAgICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSBtYXhBdHRyIHx8Ci0gICAgICAg
ICAgICAgYXR0ci0+bmFtZSgpID09IG11bHRpcGxlQXR0ciB8fAotICAgICAgICAgICAgIGF0dHIt
Pm5hbWUoKSA9PSBwcmVjaXNpb25BdHRyKQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGF1dG9zYXZlQXR0cgorICAgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IGluY3JlbWVu
dGFsQXR0cikKICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBwYXR0ZXJuQXR0cikKLSAgICAgICAgdXBkYXRlVmFsaWRpdHkoKTsKKyAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWluQXR0cgorICAgICAgICAgICAgIHx8IGF0dHIt
Pm5hbWUoKSA9PSBtYXhBdHRyCisgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IHN0ZXBB
dHRyCisgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IHByZWNpc2lvbkF0dHIpIHsKKyAg
ICAgICAgdXBkYXRlVmFsaWRpdHlBbmRTdHlsZSgpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG11bHRpcGxlQXR0cgorICAgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IHBh
dHRlcm5BdHRyKQorICAgICAgICB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlSWZOZWVkZWQoKTsKICNp
ZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGxpc3RBdHRy
KQogICAgICAgICBtX2hhc05vbkVtcHR5TGlzdCA9ICFhdHRyLT5pc0VtcHR5KCk7CkBAIC0xMjgx
LDcgKzEyODQsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgICAgICBjYWNoZVNlbGVjdGlvbihtYXgsIG1heCk7CiAgICAgfQog
ICAgIElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlzKTsKLSAgICB1cGRh
dGVWYWxpZGl0eSgpOworICAgIHVwZGF0ZVZhbGlkaXR5QW5kU3R5bGVJZk5lZWRlZCgpOwogfQog
CiBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6cGxhY2Vob2xkZXIoKSBjb25zdApAQCAtMTMwNSw3
ICsxMzA4LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgIEFTU0VSVChpbnB1dFR5cGUoKSAhPSBGSUxFKTsKICAg
ICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwogICAgIElucHV0RWxlbWVudDo6
c2V0VmFsdWVGcm9tUmVuZGVyZXIobV9kYXRhLCB0aGlzLCB0aGlzLCB2YWx1ZSk7Ci0gICAgdXBk
YXRlVmFsaWRpdHkoKTsKKyAgICB1cGRhdGVWYWxpZGl0eUFuZFN0eWxlSWZOZWVkZWQoKTsKIH0K
IAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZW5kZXJlcihjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGF0aHMpCkBAIC0xMzE3LDcgKzEzMjAsNyBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocykKIAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CiAg
ICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOwotICAgIHVwZGF0
ZVZhbGlkaXR5KCk7CisgICAgdXBkYXRlVmFsaWRpdHlBbmRTdHlsZUlmTmVlZGVkKCk7CiB9CiAK
IGJvb2wgSFRNTElucHV0RWxlbWVudDo6c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUo
KSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
IGIvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IDMwMzAwMTguLmIz
MDdkMTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAor
KysgYi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTE0OSw3ICsxNDks
OSBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cikKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhbGlnbkF0
dHIpIHsKICAgICAgICAgLy8gRG9uJ3QgbWFwICdhbGlnbicgYXR0cmlidXRlLiAgVGhpcyBtYXRj
aGVzIHdoYXQgRmlyZWZveCwgT3BlcmEgYW5kIElFIGRvLgogICAgICAgICAvLyBTZWUgaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA3NQotICAgIH0gZWxzZQorICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1heGxlbmd0aEF0dHIpCisgICAgICAgIHVwZGF0ZVZh
bGlkaXR5QW5kU3R5bGVJZk5lZWRlZCgpOworICAgIGVsc2UKICAgICAgICAgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCkBAIC0yOTgs
NyArMzAwLDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogCiAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIG5vdGlmeUZvcm1T
dGF0ZUNoYW5nZWQodGhpcyk7Ci0gICAgdXBkYXRlVmFsaWRpdHkoKTsKKyAgICB1cGRhdGVWYWxp
ZGl0eUFuZFN0eWxlSWZOZWVkZWQoKTsKIH0KIAogU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6
OmRlZmF1bHRWYWx1ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbE11bHRpTGluZS5jcHAKaW5kZXggZGZjOTY2YS4uODgxZDQzOCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCisrKyBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sTXVsdGlMaW5lLmNwcApAQCAtNDcsNyAr
NDcsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sTXVsdGlMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdl
ZCgpCiAgICAgUmVuZGVyVGV4dENvbnRyb2w6OnN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAgICAgSFRN
TFRleHRBcmVhRWxlbWVudCogdGV4dEFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVt
ZW50Kj4obm9kZSgpKTsKICAgICB0ZXh0QXJlYS0+c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNS
ZW5kZXJlcihmYWxzZSk7Ci0gICAgdGV4dEFyZWEtPnVwZGF0ZVZhbGlkaXR5KCk7CisgICAgdGV4
dEFyZWEtPnVwZGF0ZVZhbGlkaXR5QW5kU3R5bGVJZk5lZWRlZCgpOwogCiAgICAgaWYgKCFub2Rl
KCktPmZvY3VzZWQoKSkKICAgICAgICAgcmV0dXJuOwotLSAKMS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47920</attachid>
            <date>2010-02-02 04:14:32 -0800</date>
            <delta_ts>2010-02-02 09:00:08 -0800</delta_ts>
            <desc>Proposed patch (rev.5)</desc>
            <filename>bug-31716-20100202211430.patch</filename>
            <type>text/plain</type>
            <size>13924</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0MDlmZjdiLi43ZmFmNmYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDIt
MDIgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBhIGJ1ZyB0aGF0IGNoYW5nZXMgZm9y
IHNvbWUgY29uc3RyYWludCBhdHRyaWJ1dGVzIGRvZXNuJ3QKKyAgICAgICAgdXBkYXRlIHZhbGlk
YXRpb24gQ1NTIHNlbGVjdG9ycy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMxNzE2CisKKyAgICAgICAgQWRkIHRlc3RzIGZvciBtYXhMZW5ndGggY2hh
bmdlcyBhbmQgc3RlcCBjaGFuZ2VzLgorCisgICAgICAgICogZmFzdC9mb3Jtcy9pbnB1dC1saXZl
LXBzZXVkby1zZWxlY3RvcnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZm9ybXMvcmVz
b3VyY2VzL2lucHV0LWxpdmUtcHNldWRvLXNlbGVjdG9ycy5qczoKKyAgICAgICAgKiBmYXN0L2Zv
cm1zL3Jlc291cmNlcy90ZXh0YXJlYS1saXZlLXBzZXVkby1zZWxlY3RvcnMuanM6CisgICAgICAg
ICogZmFzdC9mb3Jtcy90ZXh0YXJlYS1saXZlLXBzZXVkby1zZWxlY3RvcnMtZXhwZWN0ZWQudHh0
OgorCiAyMDEwLTAyLTAxICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9pbnB1dC1saXZlLXBzZXVkby1zZWxlY3RvcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9pbnB1dC1saXZlLXBzZXVkby1zZWxlY3RvcnMtZXhwZWN0ZWQudHh0
CmluZGV4IDAwZjhjMjkuLmNjODdmMjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvaW5wdXQtbGl2ZS1wc2V1ZG8tc2VsZWN0b3JzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2lucHV0LWxpdmUtcHNldWRvLXNlbGVjdG9ycy1leHBlY3RlZC50eHQK
QEAgLTMwLDYgKzMwLDEwIEBAIENoYW5nZSBwYXR0ZXJuOgogUEFTUyBiYWNrZ3JvdW5kT2YoZWwp
IGlzIHZhbGlkQ29sb3IKIFBBU1MgYmFja2dyb3VuZE9mKGVsKSBpcyBpbnZhbGlkQ29sb3IKIFBB
U1MgYmFja2dyb3VuZE9mKGVsKSBpcyB2YWxpZENvbG9yCitDaGFuZ2Ugc3RlcDoKK1BBU1MgYmFj
a2dyb3VuZE9mKGVsKSBpcyB2YWxpZENvbG9yCitQQVNTIGJhY2tncm91bmRPZihlbCkgaXMgaW52
YWxpZENvbG9yCitQQVNTIGJhY2tncm91bmRPZihlbCkgaXMgdmFsaWRDb2xvcgogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL3Jlc291cmNlcy9pbnB1dC1saXZlLXBzZXVkby1zZWxlY3RvcnMu
anMgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Jlc291cmNlcy9pbnB1dC1saXZlLXBzZXVkby1z
ZWxlY3RvcnMuanMKaW5kZXggYTJiOTllZi4uYWMxNjRjNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9yZXNvdXJjZXMvaW5wdXQtbGl2ZS1wc2V1ZG8tc2VsZWN0b3JzLmpzCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmVzb3VyY2VzL2lucHV0LWxpdmUtcHNldWRvLXNl
bGVjdG9ycy5qcwpAQCAtOTgsNSArOTgsMTQgQEAgc2hvdWxkQmUoZWxCYWNrZ3JvdW5kLCAnaW52
YWxpZENvbG9yJyk7CiBlbC5wYXR0ZXJuID0gJ2EuYyc7CiBzaG91bGRCZShlbEJhY2tncm91bmQs
ICd2YWxpZENvbG9yJyk7CiAKK2RlYnVnKCdDaGFuZ2Ugc3RlcDonKTsKK2VsID0gbWFrZUludmFs
aWQoKTsKK2VsLnZhbHVlID0gJzEnOworZWwudHlwZSA9ICdudW1iZXInOworc2hvdWxkQmUoZWxC
YWNrZ3JvdW5kLCAndmFsaWRDb2xvcicpOworZWwuc3RlcCA9ICcyJzsKK3Nob3VsZEJlKGVsQmFj
a2dyb3VuZCwgJ2ludmFsaWRDb2xvcicpOworZWwuc3RlcCA9ICcwLjUnOworc2hvdWxkQmUoZWxC
YWNrZ3JvdW5kLCAndmFsaWRDb2xvcicpOwogCiB2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVh
LWxpdmUtcHNldWRvLXNlbGVjdG9ycy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmVzb3Vy
Y2VzL3RleHRhcmVhLWxpdmUtcHNldWRvLXNlbGVjdG9ycy5qcwppbmRleCA5NDg4MzY3Li43MTE5
Y2M2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Jlc291cmNlcy90ZXh0YXJl
YS1saXZlLXBzZXVkby1zZWxlY3RvcnMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9y
ZXNvdXJjZXMvdGV4dGFyZWEtbGl2ZS1wc2V1ZG8tc2VsZWN0b3JzLmpzCkBAIC04OSw1ICs4OSwx
NyBAQCBzaG91bGRCZShlbEJhY2tncm91bmQsICd2YWxpZENvbG9yJyk7CiBlbC5yZXF1aXJlZCA9
IHRydWU7CiBzaG91bGRCZShlbEJhY2tncm91bmQsICdpbnZhbGlkQ29sb3InKTsKIAorZGVidWco
J0NoYW5nZSBtYXhsZW5ndGg6Jyk7CitlbCA9IG1ha2VJbnZhbGlkKCk7CitlbC52YWx1ZSA9ICcx
MjM0NTY3ODkwJzsKK3Nob3VsZEJlKGVsQmFja2dyb3VuZCwgJ3ZhbGlkQ29sb3InKTsKKy8vIE1h
a2UgdGhlIHZhbHVlIGRpcnR5IGJ5IGRlbGV0aW5nIHRoZSBsYXN0IGNoYXJhY3Rlci4KK2VsLmZv
Y3VzKCk7CitlbC5zZXRTZWxlY3Rpb25SYW5nZSgxMCwgMTApOworZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ2RlbGV0ZScpOworZWwubWF4TGVuZ3RoID0gNTsKK3Nob3VsZEJlKGVsQmFja2dyb3VuZCwg
J2ludmFsaWRDb2xvcicpOworZWwubWF4TGVuZ3RoID0gMTA7CitzaG91bGRCZShlbEJhY2tncm91
bmQsICd2YWxpZENvbG9yJyk7CiAKIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1saXZlLXBzZXVkby1zZWxl
Y3RvcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1saXZl
LXBzZXVkby1zZWxlY3RvcnMtZXhwZWN0ZWQudHh0CmluZGV4IGQ2ZTFiMDAuLjk1MTE5NmIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtbGl2ZS1wc2V1ZG8tc2Vs
ZWN0b3JzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVh
LWxpdmUtcHNldWRvLXNlbGVjdG9ycy1leHBlY3RlZC50eHQKQEAgLTI2LDYgKzI2LDEwIEBAIFBB
U1MgYmFja2dyb3VuZE9mKGVsKSBpcyBpbnZhbGlkQ29sb3IKIENoYW5nZSByZXF1aXJlZDoKIFBB
U1MgYmFja2dyb3VuZE9mKGVsKSBpcyB2YWxpZENvbG9yCiBQQVNTIGJhY2tncm91bmRPZihlbCkg
aXMgaW52YWxpZENvbG9yCitDaGFuZ2UgbWF4bGVuZ3RoOgorUEFTUyBiYWNrZ3JvdW5kT2YoZWwp
IGlzIHZhbGlkQ29sb3IKK1BBU1MgYmFja2dyb3VuZE9mKGVsKSBpcyBpbnZhbGlkQ29sb3IKK1BB
U1MgYmFja2dyb3VuZE9mKGVsKSBpcyB2YWxpZENvbG9yCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc5ZjllNC4uZmNjNDVlZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBA
QAorMjAxMC0wMi0wMiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGEgYnVnIHRoYXQg
Y2hhbmdlcyBmb3Igc29tZSBjb25zdHJhaW50IGF0dHJpYnV0ZXMgZG9lc24ndAorICAgICAgICB1
cGRhdGUgdmFsaWRhdGlvbiBDU1Mgc2VsZWN0b3JzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE3MTYKKworICAgICAgICAtIFJlbmFtZSBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWYWxpZGl0eSgpIHRvIHZhbGlkaXR5Q2hhbmdlZCgpCisg
ICAgICAgIC0gSW50cm9kdWNlIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZUNo
YW5nZWQoKQorICAgICAgICAtIFdlIG5lZWQgdG8gY2FsbCB2YWxpZGl0eUNoYW5nZWQoKSB3aGVu
IEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXAgb3IKKyAgICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50
OjptYXhMZW5ndGggaXMgY2hhbmdlZC4KKworICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjppbnNlcnRlZEludG9UcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ6OndpbGxWYWxpZGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRpdHlDaGFuZ2VkKToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0SW5wdXRUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRlcmVy
KToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0VmFsdWUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZTo6c3VidHJlZUhhc0NoYW5nZWQpOgorCiAyMDEw
LTAyLTAxICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuY3BwCmluZGV4IGViMjVjNDAuLjRhYTRhNzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiAgICAg
ICAgIGJvb2wgb2xkRGlzYWJsZWQgPSBtX2Rpc2FibGVkOwogICAgICAgICBtX2Rpc2FibGVkID0g
IWF0dHItPmlzTnVsbCgpOwogICAgICAgICBpZiAob2xkRGlzYWJsZWQgIT0gbV9kaXNhYmxlZCkg
ewotICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgd2lsbFZh
bGlkYXRlQ2hhbmdlZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIo
KS0+c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkt
PnRoZW1lKCktPnN0YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBFbmFibGVkU3RhdGUpOwogICAgICAg
ICB9CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiAgICAgICAgIGJvb2wgb2xk
UmVhZE9ubHkgPSBtX3JlYWRPbmx5OwogICAgICAgICBtX3JlYWRPbmx5ID0gIWF0dHItPmlzTnVs
bCgpOwogICAgICAgICBpZiAob2xkUmVhZE9ubHkgIT0gbV9yZWFkT25seSkgewotICAgICAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgd2lsbFZhbGlkYXRlQ2hhbmdl
ZCgpOwogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+
aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCktPnRoZW1lKCktPnN0
YXRlQ2hhbmdlZChyZW5kZXJlcigpLCBSZWFkT25seVN0YXRlKTsKICAgICAgICAgfQpAQCAtMTEx
LDcgKzExMSw3IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogICAgICAgICBib29sIG9sZFJlcXVpcmVkID0g
bV9yZXF1aXJlZDsKICAgICAgICAgbV9yZXF1aXJlZCA9ICFhdHRyLT5pc051bGwoKTsKICAgICAg
ICAgaWYgKG9sZFJlcXVpcmVkICE9IG1fcmVxdWlyZWQpCi0gICAgICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKCk7CisgICAgICAgICAgICB2YWxpZGl0eUNoYW5nZWQoKTsKICAgICB9IGVsc2UK
ICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAt
MTUzLDYgKzE1Myw3IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
VHJlZShib29sIGRlZXApCiAgICAgICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVyRm9ybUVsZW1lbnQo
dGhpcyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGRvY3VtZW50KCktPmNoZWNrZWRSYWRp
b0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CisgICAgICAgIHdpbGxWYWxpZGF0ZUNoYW5nZWQo
KTsKICAgICB9CiAKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKQEAg
LTMwNSw2ICszMDYsMTIgQEAgU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRp
b25NZXNzYWdlKCkKICAgICByZXR1cm4gdmFsaWRpdHkoKS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsK
IH0KIAordm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp3aWxsVmFsaWRhdGVDaGFuZ2VkKCkK
K3sKKyAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgLy8gRklYTUU6IFNob3cvaGlkZSBh
IHZhbGlkYXRpb24gbWVzc2FnZS4KK30KKwogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojpj
aGVja1ZhbGlkaXR5KCkKIHsKICAgICBpZiAod2lsbFZhbGlkYXRlKCkgJiYgIWlzVmFsaWRGb3Jt
Q29udHJvbEVsZW1lbnQoKSkgewpAQCAtMzE1LDEyICszMjIsMTMgQEAgYm9vbCBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWYWxpZGl0eSgpCit2b2lkIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnZhbGlkaXR5Q2hhbmdlZCgpCiB7CiAgICAgaWYgKHdpbGxWYWxpZGF0
ZSgpKSB7CiAgICAgICAgIC8vIFVwZGF0ZSBzdHlsZSBmb3IgcHNldWRvIGNsYXNzZXMgc3VjaCBh
cyA6dmFsaWQgOmludmFsaWQuCiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9
CisgICAgLy8gRklYTUU6IHNob3cvaGlkZSBhIHZhbGlkYXRpb24gbWVzc2FnZS4KIH0KIAogdm9p
ZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRDdXN0b21WYWxpZGl0eShjb25zdCBTdHJpbmcm
IGVycm9yKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKaW5kZXggMzU4NTQ2Yi4u
MzVmYjIxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCkBAIC0xMDksNyAr
MTA5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCB3aWxsVmFsaWRhdGUoKSBjb25zdDsK
ICAgICBTdHJpbmcgdmFsaWRhdGlvbk1lc3NhZ2UoKTsKICAgICBib29sIGNoZWNrVmFsaWRpdHko
KTsKLSAgICB2b2lkIHVwZGF0ZVZhbGlkaXR5KCk7CisgICAgLy8gVGhpcyBzaG91bGQgYmUgY2Fs
bGVkIHdoZW4gYSB2YWxpZGF0aW9uIGNvbnN0cmFpbnQgb3IgY29udHJvbCB2YWx1ZSBpcworICAg
IC8vIGNoYW5nZWQuIFRoaXMgcmVxdWVzdHMgc3R5bGUgcmVjdWxjdWxhdGlvbi4KKyAgICB2b2lk
IHZhbGlkaXR5Q2hhbmdlZCgpOwogICAgIHZvaWQgc2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3Ry
aW5nJik7CiAgICAgdmlydHVhbCBib29sIHZhbHVlTWlzc2luZygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIHBhdHRlcm5NaXNtYXRjaCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CkBAIC0xMjcsNiArMTI5LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxG
b3JtRWxlbWVudCogdmlydHVhbEZvcm0oKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNEZWZh
dWx0QnV0dG9uRm9yRm9ybSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkRm9ybUNv
bnRyb2xFbGVtZW50KCk7CisgICAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGlmIHdpbGxWYWxp
ZGF0ZSgpIHJlc3VsdCBjYW4gYmUgY2hhbmdlZC4KKyAgICB2b2lkIHdpbGxWYWxpZGF0ZUNoYW5n
ZWQoKTsKIAogICAgIEhUTUxGb3JtRWxlbWVudCogbV9mb3JtOwogICAgIE93blB0cjxWYWxpZGl0
eVN0YXRlPiBtX3ZhbGlkaXR5U3RhdGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXgg
M2I3ZDNjYy4uN2UyODViZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNzU0LDcg
Kzc1NCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5wdXRUeXBlKGNvbnN0IFN0cmlu
ZyYgdCkKICAgICAgICAgfQogCiAgICAgICAgIElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0YXRl
Q2hhbmdlZCh0aGlzKTsKLSAgICAgICAgdXBkYXRlVmFsaWRpdHkoKTsKKyAgICAgICAgdmFsaWRp
dHlDaGFuZ2VkKCk7CiAgICAgfQogICAgIG1faGF2ZVR5cGUgPSB0cnVlOwogCkBAIC05NzYsMTcg
Kzk3NiwxOCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cikKICAgICAgICAgaWYgKG1fZGF0YS52YWx1ZSgpLmlzTnVsbCgp
KQogICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICBzZXRGb3JtQ29u
dHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKLSAgICAgICAgdXBkYXRlVmFsaWRpdHko
KTsKKyAgICAgICAgdmFsaWRpdHlDaGFuZ2VkKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gY2hlY2tlZEF0dHIpIHsKICAgICAgICAgbV9kZWZhdWx0Q2hlY2tlZCA9ICFhdHRyLT5p
c051bGwoKTsKICAgICAgICAgaWYgKG1fdXNlRGVmYXVsdENoZWNrZWQpIHsKICAgICAgICAgICAg
IHNldENoZWNrZWQobV9kZWZhdWx0Q2hlY2tlZCk7CiAgICAgICAgICAgICBtX3VzZURlZmF1bHRD
aGVja2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICB1cGRhdGVWYWxpZGl0eSgpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1heGxlbmd0aEF0dHIpCisgICAgICAgIHZhbGlk
aXR5Q2hhbmdlZCgpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1heGxlbmd0aEF0
dHIpIHsKICAgICAgICAgSW5wdXRFbGVtZW50OjpwYXJzZU1heExlbmd0aEF0dHJpYnV0ZShtX2Rh
dGEsIHRoaXMsIHRoaXMsIGF0dHIpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXpl
QXR0cikKKyAgICAgICAgdmFsaWRpdHlDaGFuZ2VkKCk7CisgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gc2l6ZUF0dHIpCiAgICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmli
dXRlKG1fZGF0YSwgdGhpcywgYXR0cik7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFs
dEF0dHIpIHsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkgJiYgaW5wdXRUeXBlKCkgPT0gSU1BR0Up
CkBAIC0xMDMwLDE1ICsxMDMxLDE2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogICAgICAgICAgICAgYXR0YWNoKCk7
CiAgICAgICAgIH0KICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IGF1dG9zYXZlQXR0ciB8fAotICAgICAgICAgICAgIGF0dHItPm5h
bWUoKSA9PSBpbmNyZW1lbnRhbEF0dHIgfHwKLSAgICAgICAgICAgICBhdHRyLT5uYW1lKCkgPT0g
bWluQXR0ciB8fAotICAgICAgICAgICAgIGF0dHItPm5hbWUoKSA9PSBtYXhBdHRyIHx8Ci0gICAg
ICAgICAgICAgYXR0ci0+bmFtZSgpID09IG11bHRpcGxlQXR0ciB8fAotICAgICAgICAgICAgIGF0
dHItPm5hbWUoKSA9PSBwcmVjaXNpb25BdHRyKQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IGF1dG9zYXZlQXR0cgorICAgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IGluY3Jl
bWVudGFsQXR0cikKICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBwYXR0ZXJuQXR0cikKLSAgICAgICAgdXBkYXRlVmFsaWRpdHkoKTsK
KyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWluQXR0cgorICAgICAgICAgICAgIHx8IGF0
dHItPm5hbWUoKSA9PSBtYXhBdHRyCisgICAgICAgICAgICAgfHwgYXR0ci0+bmFtZSgpID09IG11
bHRpcGxlQXR0cgorICAgICAgICAgICAgIHx8IGF0dHItPm5hbWUoKSA9PSBwYXR0ZXJuQXR0cgor
ICAgICAgICAgICAgIHx8IGF0dHItPm5hbWUoKSA9PSBwcmVjaXNpb25BdHRyCisgICAgICAgICAg
ICAgfHwgYXR0ci0+bmFtZSgpID09IHN0ZXBBdHRyKQorICAgICAgICB2YWxpZGl0eUNoYW5nZWQo
KTsKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGxp
c3RBdHRyKQogICAgICAgICBtX2hhc05vbkVtcHR5TGlzdCA9ICFhdHRyLT5pc0VtcHR5KCk7CkBA
IC0xNDgwLDcgKzE0ODIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUsIGJvb2wgc2VuZENoYW5nZUV2ZW50KQogICAgICAgICBkaXNwYXRjaEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKIAogICAgIElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0
YXRlQ2hhbmdlZCh0aGlzKTsKLSAgICB1cGRhdGVWYWxpZGl0eSgpOworICAgIHZhbGlkaXR5Q2hh
bmdlZCgpOwogfQogCiBkb3VibGUgSFRNTElucHV0RWxlbWVudDo6cGFyc2VUb0RvdWJsZShjb25z
dCBTdHJpbmcmIHNyYywgZG91YmxlIGRlZmF1bHRWYWx1ZSkgY29uc3QKQEAgLTE3NTQsNyArMTc1
Niw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICBtX2RhdGEuc2V0U3VnZ2VzdGVkVmFsdWUoU3RyaW5nKCkpOwog
ICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgSW5wdXRFbGVtZW50
OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihtX2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVlKTsKLSAgICB1
cGRhdGVWYWxpZGl0eSgpOworICAgIHZhbGlkaXR5Q2hhbmdlZCgpOwogfQogCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXRocykKQEAgLTE3NjYsNyArMTc2OCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0
RmlsZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQogCiAgICAg
c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKICAgICBJbnB1dEVsZW1l
bnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7Ci0gICAgdXBkYXRlVmFsaWRpdHkoKTsK
KyAgICB2YWxpZGl0eUNoYW5nZWQoKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzdG9y
ZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5jcHAKaW5kZXggZTVhMGMxYy4uZjAwODk2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmNwcApAQCAtMTUwLDcgKzE1MCw5IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0cikgewogICAgICAgICAvLyBEb24ndCBtYXAg
J2FsaWduJyBhdHRyaWJ1dGUuICBUaGlzIG1hdGNoZXMgd2hhdCBGaXJlZm94LCBPcGVyYSBhbmQg
SUUgZG8uCiAgICAgICAgIC8vIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MDc1Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWF4
bGVuZ3RoQXR0cikKKyAgICAgICAgdmFsaWRpdHlDaGFuZ2VkKCk7CisgICAgZWxzZQogICAgICAg
ICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CiB9CiAKQEAgLTI5OSw3ICszMDEsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldFZh
bHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAg
ICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlzKTsKLSAgICB1cGRhdGVWYWxpZGl0eSgpOwor
ICAgIHZhbGlkaXR5Q2hhbmdlZCgpOwogfQogCiBTdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudDo6
ZGVmYXVsdFZhbHVlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sTXVsdGlMaW5lLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lLmNwcAppbmRleCBkZmM5NjZhLi44OTVhMjY2IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5jcHAKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuY3BwCkBAIC00Nyw3ICs0
Nyw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmU6OnN1YnRyZWVIYXNDaGFuZ2Vk
KCkKICAgICBSZW5kZXJUZXh0Q29udHJvbDo6c3VidHJlZUhhc0NoYW5nZWQoKTsKICAgICBIVE1M
VGV4dEFyZWFFbGVtZW50KiB0ZXh0QXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1l
bnQqPihub2RlKCkpOwogICAgIHRleHRBcmVhLT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1Jl
bmRlcmVyKGZhbHNlKTsKLSAgICB0ZXh0QXJlYS0+dXBkYXRlVmFsaWRpdHkoKTsKKyAgICB0ZXh0
QXJlYS0+dmFsaWRpdHlDaGFuZ2VkKCk7CiAKICAgICBpZiAoIW5vZGUoKS0+Zm9jdXNlZCgpKQog
ICAgICAgICByZXR1cm47Cg==
</data>
<flag name="review"
          id="30494"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>