<?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>111149</bug_id>
          
          <creation_ts>2013-03-01 00:07:04 -0800</creation_ts>
          <short_desc>Simplify parsed CSS Calc expressions</short_desc>
          <delta_ts>2025-10-24 21:08:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>16662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alan Cutter">alancutter</reporter>
          <assigned_to name="Alan Cutter">alancutter</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>alancutter</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mikelawther</cc>
    
    <cc>ntim</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rniwa</cc>
    
    <cc>syoichi</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>844871</commentid>
    <comment_count>0</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-01 00:07:04 -0800</bug_when>
    <thetext>Simplify parsed CSS Calc expressions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844923</commentid>
    <comment_count>1</comment_count>
      <attachid>190909</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-01 01:40:05 -0800</bug_when>
    <thetext>Created attachment 190909
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844926</commentid>
    <comment_count>2</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-01 01:42:15 -0800</bug_when>
    <thetext>This bug was split from bug 80411.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844943</commentid>
    <comment_count>3</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-01 02:13:41 -0800</bug_when>
    <thetext>From bug 80411:

&gt; In terms of simplification I wonder how worthwhile it is to do. To simplify the expression tree would blow the linear parsing complexity out (please correct me on this if I&apos;m mistaken).
&gt; Example: multiplying ((var(a) * 4px) - (12 * var(b))) by the number 8 would require a traversal of the tree or some other bookkeeping data structure. This would occur for every token in the expression.
&gt; 
&gt; It is possible to reduce the calc expression into a dimension and a multiplier instead of an expression tree to preserve the linear time parsing however that would leave little room for css variables in calc expressions.
&gt; 
&gt; If the calc expression is going to be evaluated hundreds of times perhaps the simplification could be a deferred process that occurs iteratively as the expression is evaluated again and again.
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845334</commentid>
    <comment_count>4</comment_count>
      <attachid>190909</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2013-03-01 11:14:07 -0800</bug_when>
    <thetext>Comment on attachment 190909
Patch

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

I&apos;d like Mike to do the initial pass here since he&apos;s most familiar with the calc code. I just have some high-level style comments.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:91
&gt; -    return result.toString(); 
&gt; +    return result.toString();

Here and elsewhere, please don&apos;t fix up the style/whitespace of blocks/functions where you not actually modifying the code as well. It makes reviews harder as well as doing code archaeology (i.e. it adds another hop you need to jump through in order to figure out why a line of code was added).

&gt; Source/WebCore/css/CSSCalculationValue.cpp:260
&gt; +/* CalcNumber        */ { CalcNumber,        CalcOther,         CalcPercentNumber, CalcPercentNumber, CalcOther },

WebKit style is typically to avoid /* */ comments. You&apos;d usually just put these at the end of the line using a &quot;//&quot; comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845478</commentid>
    <comment_count>5</comment_count>
      <attachid>190909</attachid>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2013-03-01 13:58:45 -0800</bug_when>
    <thetext>Comment on attachment 190909
Patch

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

Looking good Alan!

&gt; Source/WebCore/css/CSSCalculationValue.cpp:313
&gt; +    static PassRefPtr&lt;CSSCalcExpressionNode&gt; createSimplified(PassRefPtr&lt;CSSCalcExpressionNode&gt; leftSide, PassRefPtr&lt;CSSCalcExpressionNode&gt; rightSide, CalcOperator op)

Is there really any time that we *don&apos;t* want to simplify the expression? I can&apos;t think of one off the top of my head. I&apos;d prefer to keep the interface to a single &apos;create&apos; function and just do the simplification in there.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:315
&gt; +        // FIXME: Extend simplification to incorporate other categories.

Nit - please, no FIXMEs without a bug. Please file a new bug for this, and reference it here in this comment.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:318
&gt; +            if (evaluation != evaluation) // Only true for NaN.

You should change the comment to &quot;// Only true for NaN, unless -ffast-math is turned on for GCC&quot; :)

While I agree with the theory, there are compiler options that will cause this to be optimised away and misbehave. C99 and C++11 provide functions like std::isnan() (http://en.cppreference.com/w/cpp/numeric/math/isnan), and WebKit uses these (see eg https://bugs.webkit.org/show_bug.cgi?id=109325).

&gt; Source/WebCore/css/CSSCalculationValue.cpp:410
&gt; +        : CSSCalcExpressionNode(category, op != CalcDivide &amp;&amp; leftSide-&gt;isInteger() &amp;&amp; rightSide-&gt;isInteger())

Ah - I see why you&apos;re doing this. But it&apos;s still not right, as 10 / 5 is an integer. You need to check leftSide-&gt;isInteger() &amp;&amp; rightSide-&gt;isInteger() &amp;&amp; (op != CalcDivide || (left % right == 0))

Now that I see you have it in two places, it should be split out to a common function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845676</commentid>
    <comment_count>6</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-01 17:46:14 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 190909 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190909&amp;action=review
&gt; 
&gt; I&apos;d like Mike to do the initial pass here since he&apos;s most familiar with the calc code. I just have some high-level style comments.
&gt; 
&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:91
&gt; &gt; -    return result.toString(); 
&gt; &gt; +    return result.toString();
&gt; 
&gt; Here and elsewhere, please don&apos;t fix up the style/whitespace of blocks/functions where you not actually modifying the code as well. It makes reviews harder as well as doing code archaeology (i.e. it adds another hop you need to jump through in order to figure out why a line of code was added).

I understand, will take out style fixes.
It just seems a shame that style problems may never get fixed!

&gt; 
&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:260
&gt; &gt; +/* CalcNumber        */ { CalcNumber,        CalcOther,         CalcPercentNumber, CalcPercentNumber, CalcOther },
&gt; 
&gt; WebKit style is typically to avoid /* */ comments. You&apos;d usually just put these at the end of the line using a &quot;//&quot; comment.

Will put the row headers at end of line.


(In reply to comment #5)
&gt; (From update of attachment 190909 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190909&amp;action=review
&gt; 
&gt; Looking good Alan!

Thanks!

&gt; 
&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:313
&gt; &gt; +    static PassRefPtr&lt;CSSCalcExpressionNode&gt; createSimplified(PassRefPtr&lt;CSSCalcExpressionNode&gt; leftSide, PassRefPtr&lt;CSSCalcExpressionNode&gt; rightSide, CalcOperator op)
&gt; 
&gt; Is there really any time that we *don&apos;t* want to simplify the expression? I can&apos;t think of one off the top of my head. I&apos;d prefer to keep the interface to a single &apos;create&apos; function and just do the simplification in there.

I&apos;m hesitant to have a create function that might not return a ref to an instance of the actual class, it seems to go against the create idiom that WebKit uses and I don&apos;t want readers of the code to be mislead. Perhaps removing create and keeping createSimplified?
 
&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:315
&gt; &gt; +        // FIXME: Extend simplification to incorporate other categories.
&gt; 
&gt; Nit - please, no FIXMEs without a bug. Please file a new bug for this, and reference it here in this comment.

Still not sure if further simplification is desired. Will remove the comment.
(The simplification this patch does appears to be equivalent to the level of simplification that Firefox performs).

&gt; 
&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:318
&gt; &gt; +            if (evaluation != evaluation) // Only true for NaN.
&gt; 
&gt; You should change the comment to &quot;// Only true for NaN, unless -ffast-math is turned on for GCC&quot; :)
&gt; 
&gt; While I agree with the theory, there are compiler options that will cause this to be optimised away and misbehave. C99 and C++11 provide functions like std::isnan() (http://en.cppreference.com/w/cpp/numeric/math/isnan), and WebKit uses these (see eg https://bugs.webkit.org/show_bug.cgi?id=109325).

Thanks for the links, using std::isnan sounds like a much better solution. I&apos;ll make sure I understand all the implications in using it first.

&gt; 
&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:410
&gt; &gt; +        : CSSCalcExpressionNode(category, op != CalcDivide &amp;&amp; leftSide-&gt;isInteger() &amp;&amp; rightSide-&gt;isInteger())
&gt; 
&gt; Ah - I see why you&apos;re doing this. But it&apos;s still not right, as 10 / 5 is an integer. You need to check leftSide-&gt;isInteger() &amp;&amp; rightSide-&gt;isInteger() &amp;&amp; (op != CalcDivide || (left % right == 0))

I did consider this as well however the spec wants us to be sloppy: &quot;At ‘/’, check that the right side is &lt;number&gt;. If the left side is &lt;integer&gt;, resolve to &lt;number&gt;. Otherwise, resolve to the type of the left side.&quot;
http://www.w3.org/TR/css3-values/#calc-type-checking

&gt; 
&gt; Now that I see you have it in two places, it should be split out to a common function.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846109</commentid>
    <comment_count>7</comment_count>
      <attachid>191151</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-03 16:09:27 -0800</bug_when>
    <thetext>Created attachment 191151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846114</commentid>
    <comment_count>8</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-03 16:13:30 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=191151) [details]
&gt; Patch

(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 190909 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=190909&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:260
&gt; &gt; &gt; +/* CalcNumber        */ { CalcNumber,        CalcOther,         CalcPercentNumber, CalcPercentNumber, CalcOther },
&gt; &gt; 
&gt; &gt; WebKit style is typically to avoid /* */ comments. You&apos;d usually just put these at the end of the line using a &quot;//&quot; comment.
&gt; 
&gt; Will put the row headers at end of line.

Putting the row headers at the end of the line made the data harder to read and violated the &quot;only one space before EOL comments&quot; style guide. I did not see any entry in the style guide about block comments either. I have opted to keep the row headers on the left.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848958</commentid>
    <comment_count>9</comment_count>
      <attachid>191151</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-03-06 09:39:48 -0800</bug_when>
    <thetext>Comment on attachment 191151
Patch

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

I don’t know enough about CSS3 calc to be sure this is OK, but I’m assuming it is. Would be nice to know how this is supposed to stay interoperable with other implementations and maybe see tests that are part of the standard.

cq- because of the unneeded static_cast

&gt; Source/WebCore/ChangeLog:13
&gt; +        (WebCore):

Please remove bogus lines like this from the change log before landing, and if possible fix the script that generates these bogus lines.

&gt; Source/WebCore/ChangeLog:15
&gt; +        (CSSCalcBinaryOperation):

Please remove bogus lines like this from the change log before landing, and if possible fix the script that generates these bogus lines.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:308
&gt; +            if (std::isnan(evaluation))
&gt; +                return 0;

Do we also need a check for infinity here? Maybe isfinite is the better test to use.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:312
&gt; +            RefPtr&lt;CSSPrimitiveValue&gt; evaluatedPrimitive = CSSPrimitiveValue::create(evaluation, evaluationType);
&gt; +            return CSSCalcPrimitiveValue::create(static_cast&lt;CSSPrimitiveValue*&gt;(evaluatedPrimitive.get()), isInteger);

Why the typecast here? There should be no need for that. Also, I don’t think we need a local value fro evaluatedPrimitive.

    return CSSCalcPrimitiveValue::create(CSSPrimitiveValue::create(evaluation, evaluationType).get(), isInteger);

&gt; Source/WebCore/css/CSSCalculationValue.cpp:435
&gt; +    static bool evaluateIsInteger(CSSCalcExpressionNode* leftSide, CSSCalcExpressionNode* rightSide, CalcOperator op)
&gt; +    {
&gt; +        return op != CalcDivide &amp;&amp; leftSide-&gt;isInteger() &amp;&amp; rightSide-&gt;isInteger();
&gt; +    }

I think this is an awkward stilted function name. But it seems to be along the lines of the rest of the functions in this class. But this really doesn’t even evaluate a value that determines if a result is an integer. It checks if a value is guaranteed to be integral, but doesn’t take into account issues such as overflow, nor does it detect that 4/2 is an integer. I think a better name could make it clearer that this is a sort of “best try” at proving something could be an integer. And I’d like to see test cases that show the overflow thing is not a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849406</commentid>
    <comment_count>10</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-06 16:06:20 -0800</bug_when>
    <thetext>Thanks for the review Darin.

(In reply to comment #9)
&gt; (From update of attachment 191151 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191151&amp;action=review
&gt; 
&gt; I don’t know enough about CSS3 calc to be sure this is OK, but I’m assuming it is. Would be nice to know how this is supposed to stay interoperable with other implementations and maybe see tests that are part of the standard.
&gt; 
&gt; cq- because of the unneeded static_cast
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +        (WebCore):
&gt; 
&gt; Please remove bogus lines like this from the change log before landing, and if possible fix the script that generates these bogus lines.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        (CSSCalcBinaryOperation):
&gt; 
&gt; Please remove bogus lines like this from the change log before landing, and if possible fix the script that generates these bogus lines.
&gt; 

Will do.

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:308
&gt; &gt; +            if (std::isnan(evaluation))
&gt; &gt; +                return 0;
&gt; 
&gt; Do we also need a check for infinity here? Maybe isfinite is the better test to use.
&gt; 

std::numeric_limits&lt;double&gt;::quiet_NaN() is explicitly returned by the evaluateOperator function so that&apos;s what it&apos;s checking for. You make a good point about checking for infinity as well. I will add that check to the if.
http://www.w3.org/TR/css3-values/#numeric-types
&quot;UAs should support reasonably useful ranges and precisions.&quot;

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:312
&gt; &gt; +            RefPtr&lt;CSSPrimitiveValue&gt; evaluatedPrimitive = CSSPrimitiveValue::create(evaluation, evaluationType);
&gt; &gt; +            return CSSCalcPrimitiveValue::create(static_cast&lt;CSSPrimitiveValue*&gt;(evaluatedPrimitive.get()), isInteger);
&gt; 
&gt; Why the typecast here? There should be no need for that. Also, I don’t think we need a local value fro evaluatedPrimitive.
&gt; 
&gt;     return CSSCalcPrimitiveValue::create(CSSPrimitiveValue::create(evaluation, evaluationType).get(), isInteger);
&gt; 

My mistake, that&apos;s a remnant of what used to be a downcast. Will remove.

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:435
&gt; &gt; +    static bool evaluateIsInteger(CSSCalcExpressionNode* leftSide, CSSCalcExpressionNode* rightSide, CalcOperator op)
&gt; &gt; +    {
&gt; &gt; +        return op != CalcDivide &amp;&amp; leftSide-&gt;isInteger() &amp;&amp; rightSide-&gt;isInteger();
&gt; &gt; +    }
&gt; 
&gt; I think this is an awkward stilted function name. But it seems to be along the lines of the rest of the functions in this class. But this really doesn’t even evaluate a value that determines if a result is an integer. It checks if a value is guaranteed to be integral, but doesn’t take into account issues such as overflow, nor does it detect that 4/2 is an integer. I think a better name could make it clearer that this is a sort of “best try” at proving something could be an integer. And I’d like to see test cases that show the overflow thing is not a problem.

The function name in this case is somewhat misleading. It&apos;s actually checking if the result of the operation is of integer type according to the spec. This classifies all divide operations as non-integers.
http://www.w3.org/TR/css3-values/#calc-type-checking
I don&apos;t like the name &quot;evaluateIsInteger&quot; either, it was chosen so as not to conflict with the existing isInteger. Perhaps it should be called isIntegerOperation and placed outside of the CSSCalcBinaryOperation class to avoid this conflict. I&apos;ll add a comment stating that it is determining the integer type rather than reality with a link to the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849447</commentid>
    <comment_count>11</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2013-03-06 16:34:33 -0800</bug_when>
    <thetext>&gt; &gt; &gt; +    static bool evaluateIsInteger(CSSCalcExpressionNode* leftSide, CSSCalcExpressionNode* &gt; &gt; 

&gt; &gt; I think this is an awkward stilted function name.

&gt; I don&apos;t like the name &quot;evaluateIsInteger&quot; either, it was chosen so as not to conflict with the existing isInteger. Perhaps it should be called isIntegerOperation and placed outside of the CSSCalcBinaryOperation class to avoid this conflict. I&apos;ll add a comment stating that it is determining the integer type rather than reality with a link to the spec.

isIntegerResult()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849572</commentid>
    <comment_count>12</comment_count>
      <attachid>191882</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-06 18:14:33 -0800</bug_when>
    <thetext>Created attachment 191882
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>849594</commentid>
    <comment_count>13</comment_count>
      <attachid>191882</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-06 18:44:21 -0800</bug_when>
    <thetext>Comment on attachment 191882
Patch

Attachment 191882 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17050271</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850345</commentid>
    <comment_count>14</comment_count>
      <attachid>191882</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-07 11:58:33 -0800</bug_when>
    <thetext>Comment on attachment 191882
Patch

Attachment 191882 did not pass mac-ews (mac):
Output: http://webkit-commit-queue.appspot.com/results/17005133</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856849</commentid>
    <comment_count>15</comment_count>
      <attachid>193491</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-17 23:14:07 -0700</bug_when>
    <thetext>Created attachment 193491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856850</commentid>
    <comment_count>16</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-17 23:18:36 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=193491) [details]
&gt; Patch

Extended simplification to CSS unit values as well as numbers.

Example:
calc(((100px + 20 * 5px) * 10 - 5 * (10em * 5 + 10em)) * 2)
becomes
calc((2000px - 300em) * 2)

The previous simplification patch would not have altered the expression at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856852</commentid>
    <comment_count>17</comment_count>
      <attachid>193491</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-17 23:20:29 -0700</bug_when>
    <thetext>Comment on attachment 193491
Patch

Attachment 193491 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-commit-queue.appspot.com/results/17180398</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856872</commentid>
    <comment_count>18</comment_count>
      <attachid>193497</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-18 00:22:49 -0700</bug_when>
    <thetext>Created attachment 193497
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859094</commentid>
    <comment_count>19</comment_count>
      <attachid>193497</attachid>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2013-03-19 23:17:46 -0700</bug_when>
    <thetext>Comment on attachment 193497
Patch

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

&gt; Source/WebCore/css/CSSCalculationValue.cpp:363
&gt; +    case CSSPrimitiveValue::CSS_PARSER_INTEGER:

How come CSS_PARSER_INTEGER is not simplifiable?

&gt; Source/WebCore/css/CSSCalculationValue.cpp:417
&gt; +        // Simplify multiplying or dividing by a number for simplifiable types.

This comment doesn&apos;t match the code below?

&gt; Source/WebCore/css/CSSCalculationValue.cpp:418
&gt; +        if (op != CalcMultiply &amp;&amp; op != CalcDivide)

I&apos;d prefer to see if (op == CalcAdd || op == CalcSubtract) if that&apos;s what you mean. It&apos;s less of a consideration, but &apos;mod&apos; may reappear in the spec at some point.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:419
&gt; +            return create(leftSide, rightSide, op);

tbh, I &apos;d prefer to see lines 410-419 look more like:
if (op == CalcAdd || op == CalcSubtract) {
  if (leftType == rightSide-&gt;primitiveType() &amp;&amp; isSimplifiableType(leftType)) {
     return CSSCalcPrimitiveValue::create(evaluateOperator(leftSide-&gt;doubleValue(), rightSide-&gt;doubleValue(), op), leftType, isInteger);
  return create(leftSide, rightSide, op);
}

Since that&apos;s what these two blocks boil down to? Now the reader is clear that Add and Subtract has been dealt with in this block, and any remaining code must be only Multiply and Divide.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:421
&gt; +        CSSCalcExpressionNode* numberSide = pickByCategory(leftSide.get(), rightSide.get(), CalcNumber);

The purpose of this function wasn&apos;t obvious to me. Unless you can forsee needing this to be general, I&apos;d consider renaming this to &apos;chooseNumberSide&apos;/&apos;findNumberSide&apos;  or something, and remove the category parameter.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:523
&gt; +        case CalcNumber:

If it&apos;s of category calcNumber,  both left and right must be CalcNumber right? So can the contents of the first if block below be moved up to this case?

&gt; Source/WebCore/css/CSSCalculationValue.cpp:556
&gt; +        : CSSCalcExpressionNode(category, isIntegerResult(leftSide.get(), rightSide.get(), op))

Do you need the .get()&apos;s?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860044</commentid>
    <comment_count>20</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-20 22:56:30 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 193497 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193497&amp;action=review
&gt; 

Thanks for the review Mike.

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:363
&gt; &gt; +    case CSSPrimitiveValue::CSS_PARSER_INTEGER:
&gt; 
&gt; How come CSS_PARSER_INTEGER is not simplifiable?
&gt; 

Overlooked that one, will fix.

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:417
&gt; &gt; +        // Simplify multiplying or dividing by a number for simplifiable types.
&gt; 
&gt; This comment doesn&apos;t match the code below?
&gt; 
&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:418
&gt; &gt; +        if (op != CalcMultiply &amp;&amp; op != CalcDivide)
&gt; 
&gt; I&apos;d prefer to see if (op == CalcAdd || op == CalcSubtract) if that&apos;s what you mean. It&apos;s less of a consideration, but &apos;mod&apos; may reappear in the spec at some point.
&gt; 

This comment was really for the entire section below it but I see now that&apos;s not so obvious. Maybe it should be explicitly grouped like:
// Simplify multiplying or dividing by a number for simplifiable types.
if (op == CalcMultiply || op == CalcDivide) {
    Simplify...
}

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:419
&gt; &gt; +            return create(leftSide, rightSide, op);
&gt; 
&gt; tbh, I &apos;d prefer to see lines 410-419 look more like:
&gt; if (op == CalcAdd || op == CalcSubtract) {
&gt;   if (leftType == rightSide-&gt;primitiveType() &amp;&amp; isSimplifiableType(leftType)) {
&gt;      return CSSCalcPrimitiveValue::create(evaluateOperator(leftSide-&gt;doubleValue(), rightSide-&gt;doubleValue(), op), leftType, isInteger);
&gt;   return create(leftSide, rightSide, op);
&gt; }
&gt; 
&gt; Since that&apos;s what these two blocks boil down to? Now the reader is clear that Add and Subtract has been dealt with in this block, and any remaining code must be only Multiply and Divide.
&gt; 

Your rearrangement makes the code clearer and has a more efficient ordering of if conditions. Will adopt.

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:421
&gt; &gt; +        CSSCalcExpressionNode* numberSide = pickByCategory(leftSide.get(), rightSide.get(), CalcNumber);
&gt; 
&gt; The purpose of this function wasn&apos;t obvious to me. Unless you can forsee needing this to be general, I&apos;d consider renaming this to &apos;chooseNumberSide&apos;/&apos;findNumberSide&apos;  or something, and remove the category parameter.
&gt; 

Will rename to getNumberSide (since it&apos;s a member function on CSSCalcBinaryOperation) and remove category parameter.

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:523
&gt; &gt; +        case CalcNumber:
&gt; 
&gt; If it&apos;s of category calcNumber,  both left and right must be CalcNumber right? So can the contents of the first if block below be moved up to this case?
&gt; 

This is a great observation, will rearrange and add an ASSERT that both sides are CalcNumbers so it&apos;s clear to readers this should be the case.

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:556
&gt; &gt; +        : CSSCalcExpressionNode(category, isIntegerResult(leftSide.get(), rightSide.get(), op))
&gt; 
&gt; Do you need the .get()&apos;s?

Yes, PassRefPtrs don&apos;t auto convert to raw pointers, so says the compiler. Most likely a safety decision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860070</commentid>
    <comment_count>21</comment_count>
      <attachid>194192</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-20 23:42:55 -0700</bug_when>
    <thetext>Created attachment 194192
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860072</commentid>
    <comment_count>22</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-20 23:46:18 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created an attachment (id=194192) [details]
&gt; Patch

 - Made modifications as per review.
 - Renamed isSimplifiableType to hasDoubleValue and used it in CSSCalcPrimitiveValue::getDoubleValue().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860101</commentid>
    <comment_count>23</comment_count>
      <attachid>194192</attachid>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2013-03-21 00:26:54 -0700</bug_when>
    <thetext>Comment on attachment 194192
Patch

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

Overall lgtm. Would &apos;r+ with comments&apos; if I was a reviewer :)

&gt; Source/WebCore/css/CSSCalculationValue.cpp:81
&gt; +static bool hasDoubleValue(CSSPrimitiveValue::UnitTypes type)

I like this name better :)

&gt; Source/WebCore/css/CSSCalculationValue.cpp:267
&gt;              return m_value-&gt;getDoubleValue();

I&apos;m wondering if it would be better to just ASSERT(hasDoubleValue(primitiveType()), as I thought that getDoubleValue() would return 0 anyway. However, getDoubleValue() allows a calc values, while hasDoubleValue would reject these. So it&apos;s best to leave it as is.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:407
&gt; +        if (op == CalcMultiply || op == CalcDivide) {

At this point, the op *must* be Multiply or Divide right? If you&apos;re worried about illegal values, ASSERT at the top of this function that op is either add, subtract, divide or multiply.

&gt; LayoutTests/css3/calc/simplification.html:18
&gt; +];

Can you throw in some tests for 
  calc(100px + 1in + 100px) = calc(100px + 1in + 100px)
  calc(100px + 1em + 100px) = calc(100px + 1em + 100px)

 just to clarify that this form of expression won&apos;t simplify?

Then if you want to do further simplification by converting all possible values to px at parse time (ie everything except em,rem,ex and %) you can &apos;fix&apos; that first case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864215</commentid>
    <comment_count>24</comment_count>
      <attachid>195217</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-26 21:18:16 -0700</bug_when>
    <thetext>Created attachment 195217
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864218</commentid>
    <comment_count>25</comment_count>
      <attachid>195219</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-26 21:34:32 -0700</bug_when>
    <thetext>Created attachment 195219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864219</commentid>
    <comment_count>26</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-26 21:36:56 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 194192 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=194192&amp;action=review
&gt; 
&gt; Overall lgtm. Would &apos;r+ with comments&apos; if I was a reviewer :)
&gt; 
&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:81
&gt; &gt; +static bool hasDoubleValue(CSSPrimitiveValue::UnitTypes type)
&gt; 
&gt; I like this name better :)
&gt; 

Thanks. (:

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:407
&gt; &gt; +        if (op == CalcMultiply || op == CalcDivide) {
&gt; 
&gt; At this point, the op *must* be Multiply or Divide right? If you&apos;re worried about illegal values, ASSERT at the top of this function that op is either add, subtract, divide or multiply.
&gt; 

The execution may reach this point if the expression is an add or subtract expression that was not simplified in the earlier if statement.

&gt; &gt; LayoutTests/css3/calc/simplification.html:18
&gt; &gt; +];
&gt; 
&gt; Can you throw in some tests for 
&gt;   calc(100px + 1in + 100px) = calc(100px + 1in + 100px)
&gt;   calc(100px + 1em + 100px) = calc(100px + 1em + 100px)
&gt; 
&gt;  just to clarify that this form of expression won&apos;t simplify?
&gt; 

Added extra tests.

&gt; Then if you want to do further simplification by converting all possible values to px at parse time (ie everything except em,rem,ex and %) you can &apos;fix&apos; that first case.

Added type conversion between compatible types for further simplification.
100px + 1in =&gt; 196px</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864221</commentid>
    <comment_count>27</comment_count>
      <attachid>195219</attachid>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2013-03-26 21:45:30 -0700</bug_when>
    <thetext>Comment on attachment 195219
Patch

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

&gt; Source/WebCore/css/CSSCalculationValue.cpp:414
&gt; +                            return CSSCalcPrimitiveValue::create(evaluateOperator(leftValue, rightValue, op), canonicalType, isInteger);

Nice.

&gt; Source/WebCore/css/CSSCalculationValue.cpp:422
&gt; +        if (op == CalcMultiply || op == CalcDivide) {

This should be an &apos;else if&apos;, as it&apos;s mutually exclusive to the above test for Add or Subtract, and control can pass out of that top block and do a unnecessary test here. I don&apos;t say this for optimisation reasons, but so nobody wonders if it&apos;s possible to enter both of these if statements.

Either that or early return at the end of the if (add || subtract) block as I had suggested in my original suggestion for reworking this code. I didn&apos;t notice this in the previous patch - when you&apos;d said you&apos;d adopt the suggestion I missed that the early return wasn&apos;t used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864239</commentid>
    <comment_count>28</comment_count>
      <attachid>195226</attachid>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-26 22:54:26 -0700</bug_when>
    <thetext>Created attachment 195226
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864241</commentid>
    <comment_count>29</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2013-03-26 23:00:25 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 195219 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195219&amp;action=review
&gt; 

Thanks for the speedy review!

&gt; &gt; Source/WebCore/css/CSSCalculationValue.cpp:422
&gt; &gt; +        if (op == CalcMultiply || op == CalcDivide) {
&gt; 
&gt; This should be an &apos;else if&apos;, as it&apos;s mutually exclusive to the above test for Add or Subtract, and control can pass out of that top block and do a unnecessary test here. I don&apos;t say this for optimisation reasons, but so nobody wonders if it&apos;s possible to enter both of these if statements.
&gt; 
&gt; Either that or early return at the end of the if (add || subtract) block as I had suggested in my original suggestion for reworking this code. I didn&apos;t notice this in the previous patch - when you&apos;d said you&apos;d adopt the suggestion I missed that the early return wasn&apos;t used.

This makes sense, changed into an else and made the if condition an ASSERT for clarity and to catch any unexpected operators.

(In reply to comment #28)
&gt; Created an attachment (id=195226) [details]
&gt; Patch

 - Updated unittest that was failing on Safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>864645</commentid>
    <comment_count>30</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2013-03-27 10:15:06 -0700</bug_when>
    <thetext>lgtm - would r+ :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045328</commentid>
    <comment_count>31</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-10-31 11:40:24 -0700</bug_when>
    <thetext>Ben -- should we take this? It&apos;s been sitting dormant for a long time, but seems like a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045453</commentid>
    <comment_count>32</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-10-31 17:44:07 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; Ben -- should we take this? It&apos;s been sitting dormant for a long time, but
&gt; seems like a good idea.

While simplifying the expressions seems like a good idea, doing it at parse time is dubious.

This is directly observable through CSSOM. Is there anything in CSSOM that allows us to do this kind of resolution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172572</commentid>
    <comment_count>33</comment_count>
      <attachid>195226</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-09 09:35:54 -0800</bug_when>
    <thetext>Comment on attachment 195226
Patch

As Ben said, wrong to do this in a way that is visible to JavaScript through the CSS object model. If we want to optimize we need to do it separately from parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1886882</commentid>
    <comment_count>34</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-07-26 13:50:59 -0700</bug_when>
    <thetext>&gt;&gt;&gt; rniwa@webkit.org - what is difference between this and bug 117782 ?

Link - https://bugs.webkit.org/show_bug.cgi?id=117782</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1887006</commentid>
    <comment_count>35</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2022-07-26 21:49:41 -0700</bug_when>
    <thetext>*** Bug 117782 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1887010</commentid>
    <comment_count>36</comment_count>
    <who name="Alan Cutter">alancutter</who>
    <bug_when>2022-07-26 22:02:22 -0700</bug_when>
    <thetext>It is perhaps dubious but certainly matches precedence. If you set { left: 1e0px; } the CSSOM will read it back as { left: 1px; }. As long as the behaviour is unchanged and it round trips back to the same thing a second time it should be considered okay as a parser transformation. The dubious part comes in whether there&apos;s any behaviour in CSS that relies on the expression shape of a calc() (e.g. interpolation?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1887218</commentid>
    <comment_count>37</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-07-27 17:59:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/97694269&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2154199</commentid>
    <comment_count>38</comment_count>
    <who name="Tim Nguyen (:ntim)">ntim</who>
    <bug_when>2025-10-24 21:08:50 -0700</bug_when>
    <thetext>I think this is probably fixed by now</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190909</attachid>
            <date>2013-03-01 01:40:05 -0800</date>
            <delta_ts>2013-03-03 16:09:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111149-20130301203616.patch</filename>
            <type>text/plain</type>
            <size>20465</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNhYzM0ZjdhMWQ5NTk2
Mjg3YjlkYWE2YTgwMTNiN2M0NDBkYjdmZS4uMzc0NTAwMjFkZWZkODg1YTRjNzc2ODBjMzZlMTI4
YzM4NTBlNzM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDEzLTAzLTAxICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBh
cnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBp
biBDU1MgY2FsYyBleHByZXNzaW9ucyBhdCBwYXJzZSB0aW1lLgorICAgICAgICBSZW1vdmVkIGFs
bCB0cmFpbGluZyB3aGl0ZXNwYWNlLgorCisgICAgICAgIFRlc3Q6IGNzczMvY2FsYy9zaW1wbGlm
aWNhdGlvbi5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpidWlsZENzc1RleHQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmRvdWJsZVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZTo6fkNTU0NhbGNFeHByZXNzaW9uTm9kZSk6CisgICAg
ICAgIChDU1NDYWxjUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlOjpkb3VibGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJp
bWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhQeCk6CisgICAgICAgIChXZWJDb3JlOjpkZXRlcm1p
bmVDYXRlZ29yeSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpj
cmVhdGUpOgorICAgICAgICAoQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGVTaW1wbGlmaWVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OmRvdWJsZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OmJ1aWxkQ3NzVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OmV2YWx1YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OmV2YWx1YXRlT3BlcmF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJz
ZVZhbHVlVGVybSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXI6OnBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUFkZGl0aXZlVmFsdWVFeHByZXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAg
KiBjc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlOjpjYXRlZ29yeSk6CisgICAgICAgIChDU1NDYWxjRXhwcmVzc2lvbk5vZGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6Omlz
SW50KToKKyAgICAgICAgKENTU0NhbGNWYWx1ZSk6CisKIDIwMTMtMDItMjggIEtlaXNoaSBIYXR0
b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGNhbGVuZGFyIHRhYmxlIHZp
ZXcgZm9yIHRoZSBuZXcgY2FsZW5kYXIgcGlja2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2Fs
Y3VsYXRpb25WYWx1ZS5jcHAKaW5kZXggMjM5Yzk5ZDJjNGZmMjM4MTM4NmY1MGVkNTkzMGI3ODg0
MTZhYTQ1NC4uNzRjZjJmOWFhNjZhZjhhYmU2ZDkyMWZlOTU4MmM3NzgwYzA3MDIxNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcApAQCAtODgsNyArODgsNyBA
QCBzdGF0aWMgU3RyaW5nIGJ1aWxkQ3NzVGV4dChjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiAg
ICAgcmVzdWx0LmFwcGVuZChleHByZXNzaW9uKTsKICAgICBpZiAoZXhwcmVzc2lvbkhhc1Npbmds
ZVRlcm0pCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7IAorICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAogU3RyaW5nIENT
U0NhbGNWYWx1ZTo6Y3VzdG9tQ3NzVGV4dCgpIGNvbnN0CkBAIC0xMTcsMTQgKzExNywxNCBAQCB2
b2lkIENTU0NhbGNWYWx1ZTo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZgogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9y
eU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKIH0KLSAgICAKKwog
ZG91YmxlIENTU0NhbGNWYWx1ZTo6Y2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSB2YWx1ZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9ub25OZWdhdGl2ZSAmJiB2YWx1ZSA8IDAgPyAwIDogdmFs
dWU7Ci19ICAgIAotICAgIAotZG91YmxlIENTU0NhbGNWYWx1ZTo6ZG91YmxlVmFsdWUoKSBjb25z
dCAKLXsgCit9CisKK2RvdWJsZSBDU1NDYWxjVmFsdWU6OmRvdWJsZVZhbHVlKCkgY29uc3QKK3sK
ICAgICByZXR1cm4gY2xhbXBUb1Blcm1pdHRlZFJhbmdlKG1fZXhwcmVzc2lvbi0+ZG91YmxlVmFs
dWUoKSk7CiB9CiAKQEAgLTEzMiwxMSArMTMyLDExIEBAIGRvdWJsZSBDU1NDYWxjVmFsdWU6OmNv
bXB1dGVMZW5ndGhQeChSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogcm9v
CiB7CiAgICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJlc3Npb24tPmNvbXB1
dGVMZW5ndGhQeChjdXJyZW50U3R5bGUsIHJvb3RTdHlsZSwgbXVsdGlwbGllciwgY29tcHV0aW5n
Rm9udFNpemUpKTsKIH0KLSAgICAKLUNTU0NhbGNFeHByZXNzaW9uTm9kZTo6fkNTU0NhbGNFeHBy
ZXNzaW9uTm9kZSgpIAorCitDU1NDYWxjRXhwcmVzc2lvbk5vZGU6On5DU1NDYWxjRXhwcmVzc2lv
bk5vZGUoKQogewogfQotICAgIAorCiBjbGFzcyBDU1NDYWxjUHJpbWl0aXZlVmFsdWUgOiBwdWJs
aWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZSh2YWx1ZSwgaXNJbnRlZ2VyKSk7
CiAgICAgfQotICAgIAorCiAgICAgdmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gIW1fdmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CkBAIC0xNjEsNyArMTYx
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmN1c3RvbVNlcmlh
bGl6ZVJlc29sdmluZ1ZhcmlhYmxlcyh2YXJpYWJsZXMpOwogICAgIH0KLSAgICAKKwogICAgIHZp
cnR1YWwgYm9vbCBoYXNWYXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV92YWx1ZS0+aXNWYXJpYWJsZU5hbWUoKTsKQEAgLTE5NCw3ICsxOTQsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fY2F0ZWdvcnkpIHsKICAgICAgICAgY2FzZSBD
YWxjTnVtYmVyOgotICAgICAgICBjYXNlIENhbGNQZXJjZW50OiAgICAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBDYWxjUGVyY2VudDoKICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpOwogICAgICAgICBjYXNlIENhbGNMZW5ndGg6CiAgICAgICAgIGNhc2UgQ2Fs
Y1BlcmNlbnRMZW5ndGg6CkBAIC0yMDgsNyArMjA4LDcgQEAgcHVibGljOgogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKwogICAgIHZpcnR1YWwgZG91YmxlIGNvbXB1
dGVMZW5ndGhQeChSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBkb3VibGUgbXVsdGlwbGllciwgYm9vbCBjb21wdXRpbmdGb250U2l6ZSkgY29uc3QKICAg
ICB7CiAgICAgICAgIHN3aXRjaCAobV9jYXRlZ29yeSkgewpAQCAtMjI2LDcgKzIyNiw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7ICAgICAgICAKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCiAgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUmIG90aGVyKSBjb25zdApAQCAtMjQ0LDcgKzI0NCw3IEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIENzc0NhbGNQcmltaXRp
dmVWYWx1ZTsgfQotICAgIAorCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRp
dmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUsIGJvb2wgaXNJbnRlZ2VyKQogICAgICAg
ICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZSh1bml0Q2F0ZWdvcnkoKENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMpdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSksIGlzSW50ZWdlcikKQEAgLTI1Niwx
MiArMjU2LDEzIEBAIHByaXZhdGU6CiB9OwogCiBzdGF0aWMgY29uc3QgQ2FsY3VsYXRpb25DYXRl
Z29yeSBhZGRTdWJ0cmFjdFJlc3VsdFtDYWxjT3RoZXJdW0NhbGNPdGhlcl0gPSB7Ci0gICAgeyBD
YWxjTnVtYmVyLCAgICAgICAgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBD
YWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCi0gICAgeyBDYWxjT3RoZXIsICAgICAgICAg
Q2FsY0xlbmd0aCwgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAg
Q2FsY1BlcmNlbnRMZW5ndGggfSwKLSAgICB7IENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2Vu
dExlbmd0aCwgQ2FsY1BlcmNlbnQsICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2Vu
dExlbmd0aCB9LAotICAgIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciwgICAgICAgICBD
YWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciB9LAotICAgIHsg
Q2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjUGVyY2VudExlbmd0aCwg
Q2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoIH0sCi19OyAgICAKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgQ2FsY051bWJlciAgICAgICAgIENhbGNMZW5ndGggICAgICAgICBD
YWxjUGVyY2VudCAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIgIENhbGNQZXJjZW50TGVuZ3RoCisv
KiBDYWxjTnVtYmVyICAgICAgICAqLyB7IENhbGNOdW1iZXIsICAgICAgICBDYWxjT3RoZXIsICAg
ICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjT3RoZXIgfSwK
Ky8qIENhbGNMZW5ndGggICAgICAgICovIHsgQ2FsY090aGVyLCAgICAgICAgIENhbGNMZW5ndGgs
ICAgICAgICBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50
TGVuZ3RoIH0sCisvKiBDYWxjUGVyY2VudCAgICAgICAqLyB7IENhbGNQZXJjZW50TnVtYmVyLCBD
YWxjUGVyY2VudExlbmd0aCwgQ2FsY1BlcmNlbnQsICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBD
YWxjUGVyY2VudExlbmd0aCB9LAorLyogQ2FsY1BlcmNlbnROdW1iZXIgKi8geyBDYWxjUGVyY2Vu
dE51bWJlciwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2Vu
dE51bWJlciwgQ2FsY090aGVyIH0sCisvKiBDYWxjUGVyY2VudExlbmd0aCAqLyB7IENhbGNPdGhl
ciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNPdGhl
ciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0aCB9LAorfTsKIAogc3RhdGljIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBs
ZWZ0U2lkZSwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByaWdodFNpZGUsIENhbGNPcGVy
YXRvciBvcCkKIHsKQEAgLTI3OCwxMCArMjc5LDEwIEBAIHN0YXRpYyBDYWxjdWxhdGlvbkNhdGVn
b3J5IGRldGVybWluZUNhdGVnb3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNp
CiAKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBDYWxjQWRkOgotICAgIGNhc2UgQ2FsY1N1
YnRyYWN0OiAgICAgICAgICAgICAKKyAgICBjYXNlIENhbGNTdWJ0cmFjdDoKICAgICAgICAgcmV0
dXJuIGFkZFN1YnRyYWN0UmVzdWx0W2xlZnRDYXRlZ29yeV1bcmlnaHRDYXRlZ29yeV07CiAgICAg
Y2FzZSBDYWxjTXVsdGlwbHk6Ci0gICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgIT0gQ2FsY051bWJl
ciAmJiByaWdodENhdGVnb3J5ICE9IENhbGNOdW1iZXIpIAorICAgICAgICBpZiAobGVmdENhdGVn
b3J5ICE9IENhbGNOdW1iZXIgJiYgcmlnaHRDYXRlZ29yeSAhPSBDYWxjTnVtYmVyKQogICAgICAg
ICAgICAgcmV0dXJuIENhbGNPdGhlcjsKICAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeSA9PSBD
YWxjTnVtYmVyID8gcmlnaHRDYXRlZ29yeSA6IGxlZnRDYXRlZ29yeTsKICAgICBjYXNlIENhbGNE
aXZpZGU6CkBAIC0yODksNyArMjkwLDcgQEAgc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0
ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2kKICAgICAg
ICAgICAgIHJldHVybiBDYWxjT3RoZXI7CiAgICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnk7CiAg
ICAgfQotICAgIAorCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIENhbGNP
dGhlcjsKIH0KQEAgLTMwMCw3ICszMDEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJp
Z2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQogICAgIHsKICAgICAgICAgQVNTRVJUKGxlZnRTaWRl
LT5jYXRlZ29yeSgpICE9IENhbGNPdGhlciAmJiByaWdodFNpZGUtPmNhdGVnb3J5KCkgIT0gQ2Fs
Y090aGVyKTsKLSAgICAgICAgCisKICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBuZXdDYXRl
Z29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSwgb3ApOwogCiAg
ICAgICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjT3RoZXIpCkBAIC0zMDgsNyArMzA5LDIzIEBA
IHB1YmxpYzoKIAogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNCaW5hcnlPcGVy
YXRpb24obGVmdFNpZGUsIHJpZ2h0U2lkZSwgb3AsIG5ld0NhdGVnb3J5KSk7CiAgICAgfQotICAg
IAorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVT
aW1wbGlmaWVkKFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFz
c1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9w
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEV4dGVuZCBzaW1wbGlmaWNhdGlvbiB0byBpbmNv
cnBvcmF0ZSBvdGhlciBjYXRlZ29yaWVzLgorICAgICAgICBpZiAobGVmdFNpZGUtPmNhdGVnb3J5
KCkgPT0gQ2FsY051bWJlciAmJiByaWdodFNpZGUtPmNhdGVnb3J5KCkgPT0gQ2FsY051bWJlcikg
eworICAgICAgICAgICAgZG91YmxlIGV2YWx1YXRpb24gPSBldmFsdWF0ZU9wZXJhdG9yKGxlZnRT
aWRlLT5kb3VibGVWYWx1ZSgpLCByaWdodFNpZGUtPmRvdWJsZVZhbHVlKCksIG9wKTsKKyAgICAg
ICAgICAgIGlmIChldmFsdWF0aW9uICE9IGV2YWx1YXRpb24pIC8vIE9ubHkgdHJ1ZSBmb3IgTmFO
LgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYm9vbCBpc0ludGVnZXIg
PSBvcCAhPSBDYWxjRGl2aWRlICYmIGxlZnRTaWRlLT5pc0ludGVnZXIoKSAmJiByaWdodFNpZGUt
PmlzSW50ZWdlcigpOworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBl
dmFsdWF0aW9uVHlwZSA9IGlzSW50ZWdlciA/IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VS
X0lOVEVHRVIgOiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjsKKyAgICAgICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZXZhbHVhdGVkUHJpbWl0aXZlID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShldmFsdWF0aW9uLCBldmFsdWF0aW9uVHlwZSk7CisgICAgICAgICAgICBy
ZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPihldmFsdWF0ZWRQcmltaXRpdmUuZ2V0KCkpLCBpc0ludGVnZXIpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShsZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCk7Cisg
ICAgfQorCiAgICAgdmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gIWRvdWJsZVZhbHVlKCk7CkBAIC0zMjUsMTEgKzM0MiwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ2FsY0V4cHJlc3Npb25CaW5hcnlPcGVyYXRpb24obGVm
dC5yZWxlYXNlKCksIHJpZ2h0LnJlbGVhc2UoKSwgbV9vcGVyYXRvcikpOwogICAgIH0KIAotICAg
IHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3QgCisgICAgdmlydHVhbCBkb3VibGUg
ZG91YmxlVmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGV2YWx1YXRlKG1fbGVm
dFNpZGUtPmRvdWJsZVZhbHVlKCksIG1fcmlnaHRTaWRlLT5kb3VibGVWYWx1ZSgpKTsKICAgICB9
Ci0gICAgCisKICAgICB2aXJ0dWFsIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIs
IGJvb2wgY29tcHV0aW5nRm9udFNpemUpIGNvbnN0CiAgICAgewogICAgICAgICBjb25zdCBkb3Vi
bGUgbGVmdFZhbHVlID0gbV9sZWZ0U2lkZS0+Y29tcHV0ZUxlbmd0aFB4KGN1cnJlbnRTdHlsZSwg
cm9vdFN0eWxlLCBtdWx0aXBsaWVyLCBjb21wdXRpbmdGb250U2l6ZSk7CkBAIC0zNTQsOCArMzcx
LDggQEAgcHVibGljOgogICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQocmlnaHRFeHByZXNzaW9uKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnKScpOwot
ICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7ICAKKworICAgICAgICByZXR1
cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgICAgfQogCiAgICAgdmlydHVhbCBTdHJpbmcgY3VzdG9t
Q3NzVGV4dCgpIGNvbnN0CkBAIC0zOTAsMTYgKzQwNywyMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbihQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNp
ZGUsIENhbGNPcGVyYXRvciBvcCwgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKLSAgICAg
ICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnksIGxlZnRTaWRlLT5pc0ludGVnZXIo
KSAmJiByaWdodFNpZGUtPmlzSW50ZWdlcigpKQorICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9u
Tm9kZShjYXRlZ29yeSwgb3AgIT0gQ2FsY0RpdmlkZSAmJiBsZWZ0U2lkZS0+aXNJbnRlZ2VyKCkg
JiYgcmlnaHRTaWRlLT5pc0ludGVnZXIoKSkKICAgICAgICAgLCBtX2xlZnRTaWRlKGxlZnRTaWRl
KQogICAgICAgICAsIG1fcmlnaHRTaWRlKHJpZ2h0U2lkZSkKICAgICAgICAgLCBtX29wZXJhdG9y
KG9wKQogICAgIHsKICAgICB9Ci0gICAgCi0gICAgZG91YmxlIGV2YWx1YXRlKGRvdWJsZSBsZWZ0
VmFsdWUsIGRvdWJsZSByaWdodFZhbHVlKSBjb25zdAorCisgICAgZG91YmxlIGV2YWx1YXRlKGRv
dWJsZSBsZWZ0U2lkZSwgZG91YmxlIHJpZ2h0U2lkZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHN3
aXRjaCAobV9vcGVyYXRvcikgeworICAgICAgICByZXR1cm4gZXZhbHVhdGVPcGVyYXRvcihsZWZ0
U2lkZSwgcmlnaHRTaWRlLCBtX29wZXJhdG9yKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91Ymxl
IGV2YWx1YXRlT3BlcmF0b3IoZG91YmxlIGxlZnRWYWx1ZSwgZG91YmxlIHJpZ2h0VmFsdWUsIENh
bGNPcGVyYXRvciBvcCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2Fz
ZSBDYWxjQWRkOgogICAgICAgICAgICAgcmV0dXJuIGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWU7CiAg
ICAgICAgIGNhc2UgQ2FsY1N1YnRyYWN0OgpAQCAtNDEzLDcgKzQzNSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAgICAgY29uc3QgUmVm
UHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9sZWZ0U2lkZTsKICAgICBjb25zdCBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX3JpZ2h0U2lkZTsKICAgICBjb25zdCBDYWxjT3BlcmF0
b3IgbV9vcGVyYXRvcjsKQEAgLTQ3OCw4ICs1MDAsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcGFy
c2VWYWx1ZVRlcm0oQ1NTUGFyc2VyVmFsdWVMaXN0KiB0b2tlbnMsIGludCBkZXB0aCwgdW5zaWdu
ZWQqIGluZGV4LCBWYWx1ZSogcmVzdWx0KQogICAgIHsKICAgICAgICAgaWYgKGNoZWNrRGVwdGhB
bmRJbmRleCgmZGVwdGgsICppbmRleCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsgICAgCi0gICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAg
ICAgIGlmIChvcGVyYXRvclZhbHVlKHRva2VucywgKmluZGV4KSA9PSAnKCcpIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9ICppbmRleCArIDE7CiAgICAgICAgICAgICBpZiAo
IXBhcnNlVmFsdWVFeHByZXNzaW9uKHRva2VucywgZGVwdGgsICZjdXJyZW50SW5kZXgsIHJlc3Vs
dCkpCkBAIC00OTcsNyArNTE5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBhcnNlVmFsdWVNdWx0
aXBsaWNhdGl2ZUV4cHJlc3Npb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB0b2tlbnMsIGludCBkZXB0
aCwgdW5zaWduZWQqIGluZGV4LCBWYWx1ZSogcmVzdWx0KQogICAgIHsKICAgICAgICAgaWYgKGNo
ZWNrRGVwdGhBbmRJbmRleCgmZGVwdGgsICppbmRleCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgICAgCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgaWYgKCFwYXJzZVZhbHVlVGVybSh0b2tlbnMsIGRlcHRoLCBpbmRleCwgcmVzdWx0KSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUxMiw3ICs1MzQsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKCFwYXJzZVZhbHVlVGVybSh0b2tlbnMsIGRlcHRoLCBpbmRleCwgJnJocykp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXN1bHQtPnZh
bHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlKHJlc3VsdC0+dmFsdWUsIHJocy52
YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNoYXJhY3RlcikpOworICAg
ICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZVNp
bXBsaWZpZWQocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBzdGF0aWNfY2FzdDxDYWxjT3BlcmF0
b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC0+dmFsdWUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01MjQsNyArNTQ2
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHBhcnNlQWRkaXRpdmVWYWx1ZUV4cHJlc3Npb24oQ1NT
UGFyc2VyVmFsdWVMaXN0KiB0b2tlbnMsIGludCBkZXB0aCwgdW5zaWduZWQqIGluZGV4LCBWYWx1
ZSogcmVzdWx0KQogICAgIHsKICAgICAgICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleCgmZGVwdGgs
ICppbmRleCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKCFwYXJzZVZhbHVlTXVsdGlw
bGljYXRpdmVFeHByZXNzaW9uKHRva2VucywgZGVwdGgsIGluZGV4LCByZXN1bHQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTM5LDcgKzU2MSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBpZiAoIXBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24odG9rZW5zLCBkZXB0
aCwgaW5kZXgsICZyaHMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZShyZXN1
bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JD
aGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3Bl
cmF0aW9uOjpjcmVhdGVTaW1wbGlmaWVkKHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwgc3RhdGlj
X2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNoYXJhY3RlcikpOwogICAgICAgICAgICAgaWYg
KCFyZXN1bHQtPnZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQpAQCAtNTU1LDEyICs1NzcsMTIgQEAgcHJpdmF0ZToKIH07CiAKIFBhc3NSZWZQdHI8Q1NTQ2Fs
Y1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NQYXJzZXJTdHJpbmcgbmFtZSwgQ1NTUGFy
c2VyVmFsdWVMaXN0KiBwYXJzZXJWYWx1ZUxpc3QsIENhbGN1bGF0aW9uUGVybWl0dGVkVmFsdWVS
YW5nZSByYW5nZSkKLXsgICAgCi0gICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyIHBhcnNl
cjsgICAgCit7CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyIHBhcnNlcjsKICAgICBS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBleHByZXNzaW9uOwotICAgIAorCiAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJjYWxjKCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICItd2Via2l0LWNhbGMoIikpCi0gICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VD
YWxjKHBhcnNlclZhbHVlTGlzdCk7ICAgIAorICAgICAgICBleHByZXNzaW9uID0gcGFyc2VyLnBh
cnNlQ2FsYyhwYXJzZXJWYWx1ZUxpc3QpOwogICAgIC8vIEZJWE1FIGNhbGMgKGh0dHA6Ly93ZWJr
aXQub3JnL2IvMTY2NjIpIEFkZCBwYXJzaW5nIGZvciBtaW4gYW5kIG1heCBoZXJlCiAKICAgICBy
ZXR1cm4gZXhwcmVzc2lvbiA/IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoZXhwcmVzc2lvbiwg
cmFuZ2UpKSA6IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAppbmRl
eCA1NjlkYmRlYTBiMGYyYjNiODk4YWU3YTRjNzIyZjBiNTY0YmFkZjg0Li5lOTM0ZTVjZTZjNTA1
NDIxZGE5ODNiODIzMzJhM2QxM2IzN2RiNThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxj
dWxhdGlvblZhbHVlLmgKQEAgLTU3LDcgKzU3LDcgQEAgZW51bSBDYWxjdWxhdGlvbkNhdGVnb3J5
IHsKICNlbmRpZgogICAgIENhbGNPdGhlcgogfTsKLSAgICAKKwogY2xhc3MgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiB7CiBw
dWJsaWM6CiAgICAgZW51bSBUeXBlIHsKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB+Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBp
c1plcm8oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENhbGNFeHByZXNzaW9u
Tm9kZT4gdG9DYWxjVmFsdWUoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBk
b3VibGUgem9vbSA9IDEuMCkgY29uc3QgPSAwOyAgICAKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
Q2FsY0V4cHJlc3Npb25Ob2RlPiB0b0NhbGNWYWx1ZShSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxl
KiByb290U3R5bGUsIGRvdWJsZSB6b29tID0gMS4wKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBk
b3VibGUgZG91YmxlVmFsdWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBkb3VibGUgY29tcHV0
ZUxlbmd0aFB4KFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5
bGUsIGRvdWJsZSBtdWx0aXBsaWVyID0gMS4wLCBib29sIGNvbXB1dGluZ0ZvbnRTaXplID0gZmFs
c2UpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyBjdXN0b21Dc3NUZXh0KCkgY29uc3Qg
PSAwOwpAQCAtNzksMjAgKzc5LDIwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFR5
cGUgdHlwZSgpIGNvbnN0ID0gMDsKIAotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnko
KSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5OyB9ICAgIAorICAgIENhbGN1bGF0aW9uQ2F0ZWdv
cnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5OyB9CiAgICAgYm9vbCBpc0lu
dGVnZXIoKSBjb25zdCB7IHJldHVybiBtX2lzSW50ZWdlcjsgfQotICAgIAorCiBwcm90ZWN0ZWQ6
CiAgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnks
IGJvb2wgaXNJbnRlZ2VyKQogICAgICAgICA6IG1fY2F0ZWdvcnkoY2F0ZWdvcnkpCiAgICAgICAg
ICwgbV9pc0ludGVnZXIoaXNJbnRlZ2VyKQogICAgIHsKICAgICB9Ci0gICAgCisKICAgICBDYWxj
dWxhdGlvbkNhdGVnb3J5IG1fY2F0ZWdvcnk7CiAgICAgYm9vbCBtX2lzSW50ZWdlcjsKIH07Ci0g
ICAgICAgIAorCiBjbGFzcyBDU1NDYWxjVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKENTU1BhcnNlclN0
cmluZyBuYW1lLCBDU1NQYXJzZXJWYWx1ZUxpc3QqLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVl
UmFuZ2UpOwpAQCAtMTAzLDExICsxMDMsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQ2Fs
Y3VsYXRpb25WYWx1ZTo6Y3JlYXRlKG1fZXhwcmVzc2lvbi0+dG9DYWxjVmFsdWUoc3R5bGUsIHJv
b3RTdHlsZSwgem9vbSksIG1fbm9uTmVnYXRpdmUgPyBDYWxjdWxhdGlvblJhbmdlTm9uTmVnYXRp
dmUgOiBDYWxjdWxhdGlvblJhbmdlQWxsKTsKICAgICB9CiAgICAgQ2FsY3VsYXRpb25DYXRlZ29y
eSBjYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbi0+Y2F0ZWdvcnkoKTsgfQot
ICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb24tPmlzSW50ZWdlcigp
OyB9ICAgIAorICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb24tPmlz
SW50ZWdlcigpOyB9CiAgICAgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3Q7CiAgICAgYm9vbCBp
c05lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uLT5kb3VibGVWYWx1ZSgpIDwg
MDsgfQogICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAxLjAsIGJvb2wg
Y29tcHV0aW5nRm9udFNpemUgPSBmYWxzZSkgY29uc3Q7Ci0gICAgICAgIAorCiAgICAgU3RyaW5n
IGN1c3RvbUNzc1RleHQoKSBjb25zdDsKICAgICBib29sIGVxdWFscyhjb25zdCBDU1NDYWxjVmFs
dWUmKSBjb25zdDsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKQEAgLTExNiwyMSArMTE2LDIx
IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCByZXBvcnREZXNjZW5kYW50TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwotICAgIAotcHJpdmF0ZTogICAgCisKK3ByaXZh
dGU6CiAgICAgQ1NTQ2FsY1ZhbHVlKFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBl
eHByZXNzaW9uLCBDYWxjdWxhdGlvblBlcm1pdHRlZFZhbHVlUmFuZ2UgcmFuZ2UpCiAgICAgICAg
IDogQ1NTVmFsdWUoQ2FsY3VsYXRpb25DbGFzcykKICAgICAgICAgLCBtX2V4cHJlc3Npb24oZXhw
cmVzc2lvbikKICAgICAgICAgLCBtX25vbk5lZ2F0aXZlKHJhbmdlID09IENhbGN1bGF0aW9uUmFu
Z2VOb25OZWdhdGl2ZSkKICAgICB7CiAgICAgfQotICAgIAorCiAgICAgZG91YmxlIGNsYW1wVG9Q
ZXJtaXR0ZWRSYW5nZShkb3VibGUpIGNvbnN0OwogCiAgICAgY29uc3QgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4gbV9leHByZXNzaW9uOwogICAgIGNvbnN0IGJvb2wgbV9ub25OZWdhdGl2
ZTsKIH07Ci0gICAgCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENTU0Nh
bGN1bGF0aW9uVmFsdWVfaApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDhiYTg3ZDBkMTczZmE1OTVhNTJiYzM2MTM1NTAxN2Jm
YjQwOTgwZWYuLjYzMGZjYmVmYWE2YWI5NjYyMmJjYWQ0Nzk4YjU4ZDdhYWM2MGNmYjIgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxMy0wMy0wMSAgQWxhbiBDdXR0ZXIgIDxhbGFuY3V0dGVyQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBTaW1wbGlmeSBwYXJzZWQgQ1NTIENhbGMgZXhwcmVzc2lv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE0
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlYmFz
ZWxpbmVkIGNhbGMgY3Nzb20gdGVzdC4KKyAgICAgICAgQWRkZWQgY3NzIGNhbGMgc2ltcGxpZmlj
YXRpb24gdGVzdHMuCisKKyAgICAgICAgKiBjc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGNzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGNzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMy0w
Mi0yOCAgVGFrYXNoaSBUb3lvc2hpbWEgIDx0b3lvc2hpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBjaHJvbWl1bSBnYXJkZW5pbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2NzczMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nz
b20tZXhwZWN0ZWQudHh0CmluZGV4IGQ1ZjU0M2MyM2EyOTUyZWIxMTMyMTRiYzZhODkyMzM4ZWI0
NmY3ZDUuLmM2NDY1NzlmNTllOWU3ZDcyZWMyMjAzZGJjMTg1NDE0NjBhNWYyM2QgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dApAQCAtOCw3ICs4LDcgQEAgVGhpcyB0
ZXN0cyBjYWxjKCkgYW5kIHRoZSBDU1NPTQogNXB4ICsgMmVtICsgNmluID0+IGNhbGMoKDVweCAr
IDJlbSkgKyA2aW4pCiAxMDAlIC0gMTBweCAvIDIgPT4gY2FsYygxMDAlIC0gKDEwcHggLyAyKSkK
IDFweCArIDJlbSAtIDNyZW0gKyA0aW4gPT4gY2FsYygoKDFweCArIDJlbSkgLSAzcmVtKSArIDRp
bikKLTEwMHB4ICogKDEgKyAyICogMyAtIDQgLyA1KSA9PiBjYWxjKDEwMHB4ICogKCgxICsgKDIg
KiAzKSkgLSAoNCAvIDUpKSkKKzEwMHB4ICogKDEgKyAyICogMyAtIDQgLyA1KSA9PiBjYWxjKDEw
MHB4ICogNi4yKQogKDEwMHB4KSArIDIwMHB4ID0+IGNhbGMoMTAwcHggKyAyMDBweCkKICgoKCgo
KCgoKCgxMDBweCkpKSkpKSkpKSkgPT4gY2FsYygxMDBweCkKIGZsaW1zdGl4ID0+IGNhbGMoMTAw
cHgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24tZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xODliOGIwYWVkZjQ5NDAzYjViNTA4NGIxYzQ1NTRiMDNhYzMwZDg4
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9u
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIHRlc3RzIHBhcnNlIHRpbWUgc2lt
cGxpZmljYXRpb24gaW4gY2FsYygpCisKKzEwMHB4ICogKDI1ICsgNCkgPT4gY2FsYygxMDBweCAq
IDI5KQorMTAwcHggKiAoMjUgLSA0KSA9PiBjYWxjKDEwMHB4ICogMjEpCisxMDBweCAqICgyICog
NSAtIDQpID0+IGNhbGMoMTAwcHggKiA2KQorMTAwcHggKiAoNSAtIDQgLyA1KSA9PiBjYWxjKDEw
MHB4ICogNC4yKQorMTAwcHggKiAoNiAqIDUgLSA4IC8gNSkgPT4gY2FsYygxMDBweCAqIDI4LjQp
CisxMDBweCAqICg2ICogKDUgLSA0KSAvIDgpID0+IGNhbGMoMTAwcHggKiAwLjc1KQorMTAwcHgg
KiAoKDYpICogKDUgLSAoNCkpICsgKDMgKiAoKDQpKSAqICg4IC0gMikpKSA9PiBjYWxjKDEwMHB4
ICogNzgpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlv
bi5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uN2VlZTNhMjNlNmUxNmEyOTlhNjViMGNiOWYyYmQ0MWI2MDExODFlMwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sCkBAIC0w
LDAgKzEsMjUgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGRpdiBpZD0iZHVtbXkiPjwvZGl2PgorPGRp
diBpZD0icmVzdWx0cyI+VGhpcyB0ZXN0cyBwYXJzZSB0aW1lIHNpbXBsaWZpY2F0aW9uIGluIGNh
bGMoKTxicj48YnI+PC9kaXY+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
IHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKwordmFyIHRlc3RzID0gWworICAgICIx
MDBweCAqICgyNSArIDQpIiwKKyAgICAiMTAwcHggKiAoMjUgLSA0KSIsCisgICAgIjEwMHB4ICog
KDIgKiA1IC0gNCkiLAorICAgICIxMDBweCAqICg1IC0gNCAvIDUpIiwKKyAgICAiMTAwcHggKiAo
NiAqIDUgLSA4IC8gNSkiLAorICAgICIxMDBweCAqICg2ICogKDUgLSA0KSAvIDgpIiwKKyAgICAi
MTAwcHggKiAoKDYpICogKDUgLSAoNCkpICsgKDMgKiAoKDQpKSAqICg4IC0gMikpKSIsCitdOwor
Cit2YXIgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIik7Cit2YXIg
ZHVtbXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZHVtbXkiKTsKK2ZvciAodmFyIGkgPSAw
OyBpIDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgZXhwcmVzc2lvbiA9IHRlc3RzW2ld
OworICAgIGR1bW15LnN0eWxlLndpZHRoID0gJ2NhbGMoJyArIGV4cHJlc3Npb24gKyAnKSc7Cisg
ICAgcmVzdWx0cy5pbm5lckhUTUwgKz0gZXhwcmVzc2lvbiArICIgPT4gIiArIGR1bW15LnN0eWxl
LndpZHRoICsgIjxicj4iOworfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191151</attachid>
            <date>2013-03-03 16:09:27 -0800</date>
            <delta_ts>2013-03-06 18:14:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111149-20130304110535.patch</filename>
            <type>text/plain</type>
            <size>10480</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNhYzM0ZjdhMWQ5NTk2
Mjg3YjlkYWE2YTgwMTNiN2M0NDBkYjdmZS4uMTI4MTQ3NjY4YTE4NzRhOWQzNjUxY2M1YWFkOTk3
MzBhMGI1Y2MxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEzLTAzLTAzICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBh
cnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBp
biBDU1MgY2FsYyBleHByZXNzaW9ucyBhdCBwYXJzZSB0aW1lLgorCisgICAgICAgIFRlc3Q6IGNz
czMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZVNpbXBsaWZpZWQpOgorICAgICAgICAoQ1NTQ2FsY0Jp
bmFyeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9u
OjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5h
cnlPcGVyYXRpb246OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlP
cGVyYXRpb246OmV2YWx1YXRlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0Jp
bmFyeU9wZXJhdGlvbjo6ZXZhbHVhdGVJc0ludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlTXVsdGlwbGljYXRpdmVFeHByZXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFy
c2VBZGRpdGl2ZVZhbHVlRXhwcmVzc2lvbik6CisKIDIwMTMtMDItMjggIEtlaXNoaSBIYXR0b3Jp
ICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIGNhbGVuZGFyIHRhYmxlIHZpZXcg
Zm9yIHRoZSBuZXcgY2FsZW5kYXIgcGlja2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3Vs
YXRpb25WYWx1ZS5jcHAKaW5kZXggMjM5Yzk5ZDJjNGZmMjM4MTM4NmY1MGVkNTkzMGI3ODg0MTZh
YTQ1NC4uMDNhNTJiZDUyMjVjMThhN2RhY2EyNzA5MjgzZWViMmU3MmU3MTI0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcApAQCAtMjU2LDEyICsyNTYsMTMg
QEAgcHJpdmF0ZToKIH07CiAKIHN0YXRpYyBjb25zdCBDYWxjdWxhdGlvbkNhdGVnb3J5IGFkZFN1
YnRyYWN0UmVzdWx0W0NhbGNPdGhlcl1bQ2FsY090aGVyXSA9IHsKLSAgICB7IENhbGNOdW1iZXIs
ICAgICAgICBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50
TnVtYmVyLCBDYWxjT3RoZXIgfSwKLSAgICB7IENhbGNPdGhlciwgICAgICAgICBDYWxjTGVuZ3Ro
LCAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2Vu
dExlbmd0aCB9LAotICAgIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3RoLCBD
YWxjUGVyY2VudCwgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3RoIH0s
Ci0gICAgeyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50
TnVtYmVyLCBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCi0gICAgeyBDYWxjT3RoZXIs
ICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIs
ICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGggfSwKLX07ICAgIAorLy8gICAgICAgICAgICAgICAg
ICAgICAgICBDYWxjTnVtYmVyICAgICAgICAgQ2FsY0xlbmd0aCAgICAgICAgIENhbGNQZXJjZW50
ICAgICAgICBDYWxjUGVyY2VudE51bWJlciAgQ2FsY1BlcmNlbnRMZW5ndGgKKy8qIENhbGNOdW1i
ZXIgKi8gICAgICAgIHsgQ2FsY051bWJlciwgICAgICAgIENhbGNPdGhlciwgICAgICAgICBDYWxj
UGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciB9LAorLyogQ2FsY0xl
bmd0aCAqLyAgICAgICAgeyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY0xlbmd0aCwgICAgICAgIENh
bGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGggfSwK
Ky8qIENhbGNQZXJjZW50ICovICAgICAgIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50
TGVuZ3RoLCBDYWxjUGVyY2VudCwgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50
TGVuZ3RoIH0sCisvKiBDYWxjUGVyY2VudE51bWJlciAqLyB7IENhbGNQZXJjZW50TnVtYmVyLCBD
YWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TnVtYmVyLCBD
YWxjT3RoZXIgfSwKKy8qIENhbGNQZXJjZW50TGVuZ3RoICovIHsgQ2FsY090aGVyLCAgICAgICAg
IENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAg
IENhbGNQZXJjZW50TGVuZ3RoIH0sCit9OwogCiBzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBk
ZXRlcm1pbmVDYXRlZ29yeShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQog
ewpAQCAtMjk3LDE4ICsyOTgsMjcgQEAgc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJt
aW5lQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2kKIGNsYXNzIENT
U0NhbGNCaW5hcnlPcGVyYXRpb24gOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKIAog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNCaW5hcnlPcGVyYXRpb24+IGNy
ZWF0ZShQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZVNpbXBsaWZp
ZWQoUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnRTaWRlLCBQYXNzUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCiAgICAg
ewogICAgICAgICBBU1NFUlQobGVmdFNpZGUtPmNhdGVnb3J5KCkgIT0gQ2FsY090aGVyICYmIHJp
Z2h0U2lkZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjT3RoZXIpOwotICAgICAgICAKLSAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lk
ZSwgKnJpZ2h0U2lkZSwgb3ApOwogCisgICAgICAgIGlmIChsZWZ0U2lkZS0+Y2F0ZWdvcnkoKSA9
PSBDYWxjTnVtYmVyICYmIHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjTnVtYmVyKSB7Cisg
ICAgICAgICAgICBkb3VibGUgZXZhbHVhdGlvbiA9IGV2YWx1YXRlT3BlcmF0b3IobGVmdFNpZGUt
PmRvdWJsZVZhbHVlKCksIHJpZ2h0U2lkZS0+ZG91YmxlVmFsdWUoKSwgb3ApOworICAgICAgICAg
ICAgaWYgKHN0ZDo6aXNuYW4oZXZhbHVhdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBib29sIGlzSW50ZWdlciA9IGV2YWx1YXRlSXNJbnRlZ2VyKGxlZnRTaWRl
LmdldCgpLCByaWdodFNpZGUuZ2V0KCksIG9wKTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMgZXZhbHVhdGlvblR5cGUgPSBpc0ludGVnZXIgPyBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSIDogQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7
CisgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGV2YWx1YXRlZFByaW1pdGl2
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoZXZhbHVhdGlvbiwgZXZhbHVhdGlvblR5cGUp
OworICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oZXZhbHVhdGVkUHJpbWl0aXZlLmdldCgpKSwgaXNJ
bnRlZ2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbmV3Q2F0
ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUsIG9wKTsKICAg
ICAgICAgaWYgKG5ld0NhdGVnb3J5ID09IENhbGNPdGhlcikKICAgICAgICAgICAgIHJldHVybiAw
OwogCiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbihs
ZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCwgbmV3Q2F0ZWdvcnkpKTsKICAgICB9Ci0gICAgCisKICAg
ICB2aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhZG91
YmxlVmFsdWUoKTsKQEAgLTM5MCwxNiArNDAwLDIxIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSwg
Q2FsY09wZXJhdG9yIG9wLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotICAgICAgICA6
IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSwgbGVmdFNpZGUtPmlzSW50ZWdlcigpICYm
IHJpZ2h0U2lkZS0+aXNJbnRlZ2VyKCkpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
KGNhdGVnb3J5LCBldmFsdWF0ZUlzSW50ZWdlcihsZWZ0U2lkZS5nZXQoKSwgcmlnaHRTaWRlLmdl
dCgpLCBvcCkpCiAgICAgICAgICwgbV9sZWZ0U2lkZShsZWZ0U2lkZSkKICAgICAgICAgLCBtX3Jp
Z2h0U2lkZShyaWdodFNpZGUpCiAgICAgICAgICwgbV9vcGVyYXRvcihvcCkKICAgICB7CiAgICAg
fQogICAgIAotICAgIGRvdWJsZSBldmFsdWF0ZShkb3VibGUgbGVmdFZhbHVlLCBkb3VibGUgcmln
aHRWYWx1ZSkgY29uc3QKKyAgICBkb3VibGUgZXZhbHVhdGUoZG91YmxlIGxlZnRTaWRlLCBkb3Vi
bGUgcmlnaHRTaWRlKSBjb25zdAogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX29wZXJhdG9yKSB7
CisgICAgICAgIHJldHVybiBldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRlLCByaWdodFNpZGUsIG1f
b3BlcmF0b3IpOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgZXZhbHVhdGVPcGVyYXRvcihk
b3VibGUgbGVmdFZhbHVlLCBkb3VibGUgcmlnaHRWYWx1ZSwgQ2FsY09wZXJhdG9yIG9wKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIENhbGNBZGQ6CiAgICAgICAg
ICAgICByZXR1cm4gbGVmdFZhbHVlICsgcmlnaHRWYWx1ZTsKICAgICAgICAgY2FzZSBDYWxjU3Vi
dHJhY3Q6CkBAIC00MTMsNyArNDI4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQotICAgIAorCisgICAgc3RhdGljIGJvb2wgZXZhbHVhdGVJc0ludGVn
ZXIoQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBsZWZ0U2lkZSwgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
KiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCAh
PSBDYWxjRGl2aWRlICYmIGxlZnRTaWRlLT5pc0ludGVnZXIoKSAmJiByaWdodFNpZGUtPmlzSW50
ZWdlcigpOworICAgIH0KKwogICAgIGNvbnN0IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IG1fbGVmdFNpZGU7CiAgICAgY29uc3QgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9y
aWdodFNpZGU7CiAgICAgY29uc3QgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7CkBAIC01MTIsNyAr
NTMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZVRlcm0odG9rZW5z
LCBkZXB0aCwgaW5kZXgsICZyaHMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0
ZShyZXN1bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3Bl
cmF0b3JDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmlu
YXJ5T3BlcmF0aW9uOjpjcmVhdGVTaW1wbGlmaWVkKHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwg
c3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNoYXJhY3RlcikpOwogICAgICAgICAg
ICAgaWYgKCFyZXN1bHQtPnZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQpAQCAtNTM5LDcgKzU1OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXBh
cnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24odG9rZW5zLCBkZXB0aCwgaW5kZXgsICZy
aHMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmVzdWx0
LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZShyZXN1bHQtPnZhbHVlLCBy
aHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpKTsK
KyAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVh
dGVTaW1wbGlmaWVkKHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09w
ZXJhdG9yPihvcGVyYXRvckNoYXJhY3RlcikpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQtPnZh
bHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDhi
YTg3ZDBkMTczZmE1OTVhNTJiYzM2MTM1NTAxN2JmYjQwOTgwZWYuLjJmOGFkMWIzNTg1NDE0ZmIz
ZDEyZDM4MWRhOWQ1NzYyZmY0MzFkYzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wMy0w
MyAgQWxhbiBDdXR0ZXIgIDxhbGFuY3V0dGVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBTaW1w
bGlmeSBwYXJzZWQgQ1NTIENhbGMgZXhwcmVzc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIENTUyBjYWxjIHNpbXBsaWZpY2F0aW9uIHRl
c3RzLCB1cGRhdGVkIHRlc3QgZXhwZWN0YXRpb25zIGZvciBleGlzdGluZyBDU1MgY2FsYyB0ZXN0
cy4KKworICAgICAgICAqIGNzczMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQ6CisgICAgICAgICog
Y3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
Y3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAyLTI4ICBUYWth
c2hpIFRveW9zaGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkIGNocm9taXVtIGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxj
L2Nzc29tLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS1leHBlY3Rl
ZC50eHQKaW5kZXggZDVmNTQzYzIzYTI5NTJlYjExMzIxNGJjNmE4OTIzMzhlYjQ2ZjdkNS4uYzY0
NjU3OWY1OWU5ZTdkNzJlYzIyMDNkYmMxODU0MTQ2MGE1ZjIzZCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9jc3Mz
L2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0CkBAIC04LDcgKzgsNyBAQCBUaGlzIHRlc3RzIGNhbGMo
KSBhbmQgdGhlIENTU09NCiA1cHggKyAyZW0gKyA2aW4gPT4gY2FsYygoNXB4ICsgMmVtKSArIDZp
bikKIDEwMCUgLSAxMHB4IC8gMiA9PiBjYWxjKDEwMCUgLSAoMTBweCAvIDIpKQogMXB4ICsgMmVt
IC0gM3JlbSArIDRpbiA9PiBjYWxjKCgoMXB4ICsgMmVtKSAtIDNyZW0pICsgNGluKQotMTAwcHgg
KiAoMSArIDIgKiAzIC0gNCAvIDUpID0+IGNhbGMoMTAwcHggKiAoKDEgKyAoMiAqIDMpKSAtICg0
IC8gNSkpKQorMTAwcHggKiAoMSArIDIgKiAzIC0gNCAvIDUpID0+IGNhbGMoMTAwcHggKiA2LjIp
CiAoMTAwcHgpICsgMjAwcHggPT4gY2FsYygxMDBweCArIDIwMHB4KQogKCgoKCgoKCgoKDEwMHB4
KSkpKSkpKSkpKSA9PiBjYWxjKDEwMHB4KQogZmxpbXN0aXggPT4gY2FsYygxMDBweCkKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE4OWI4YjBhZWRmNDk0MDNiNWI1MDg0YjFjNDU1NGIwM2FjMzBkODgKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24tZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMgdGVzdHMgcGFyc2UgdGltZSBzaW1wbGlmaWNhdGlv
biBpbiBjYWxjKCkKKworMTAwcHggKiAoMjUgKyA0KSA9PiBjYWxjKDEwMHB4ICogMjkpCisxMDBw
eCAqICgyNSAtIDQpID0+IGNhbGMoMTAwcHggKiAyMSkKKzEwMHB4ICogKDIgKiA1IC0gNCkgPT4g
Y2FsYygxMDBweCAqIDYpCisxMDBweCAqICg1IC0gNCAvIDUpID0+IGNhbGMoMTAwcHggKiA0LjIp
CisxMDBweCAqICg2ICogNSAtIDggLyA1KSA9PiBjYWxjKDEwMHB4ICogMjguNCkKKzEwMHB4ICog
KDYgKiAoNSAtIDQpIC8gOCkgPT4gY2FsYygxMDBweCAqIDAuNzUpCisxMDBweCAqICgoNikgKiAo
NSAtICg0KSkgKyAoMyAqICgoNCkpICogKDggLSAyKSkpID0+IGNhbGMoMTAwcHggKiA3OCkKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwgYi9M
YXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZWVl
M2EyM2U2ZTE2YTI5OWE2NWIwY2I5ZjJiZDQxYjYwMTE4MWUzCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwKQEAgLTAsMCArMSwyNSBA
QAorPCFET0NUWVBFIEhUTUw+Cis8ZGl2IGlkPSJkdW1teSI+PC9kaXY+Cis8ZGl2IGlkPSJyZXN1
bHRzIj5UaGlzIHRlc3RzIHBhcnNlIHRpbWUgc2ltcGxpZmljYXRpb24gaW4gY2FsYygpPGJyPjxi
cj48L2Rpdj4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgd2luZG93LnRl
c3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCit2YXIgdGVzdHMgPSBbCisgICAgIjEwMHB4ICogKDI1
ICsgNCkiLAorICAgICIxMDBweCAqICgyNSAtIDQpIiwKKyAgICAiMTAwcHggKiAoMiAqIDUgLSA0
KSIsCisgICAgIjEwMHB4ICogKDUgLSA0IC8gNSkiLAorICAgICIxMDBweCAqICg2ICogNSAtIDgg
LyA1KSIsCisgICAgIjEwMHB4ICogKDYgKiAoNSAtIDQpIC8gOCkiLAorICAgICIxMDBweCAqICgo
NikgKiAoNSAtICg0KSkgKyAoMyAqICgoNCkpICogKDggLSAyKSkpIiwKK107CisKK3ZhciByZXN1
bHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdHMiKTsKK3ZhciBkdW1teSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJkdW1teSIpOworZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0
cy5sZW5ndGg7ICsraSkgeworICAgIHZhciBleHByZXNzaW9uID0gdGVzdHNbaV07CisgICAgZHVt
bXkuc3R5bGUud2lkdGggPSAnY2FsYygnICsgZXhwcmVzc2lvbiArICcpJzsKKyAgICByZXN1bHRz
LmlubmVySFRNTCArPSBleHByZXNzaW9uICsgIiA9PiAiICsgZHVtbXkuc3R5bGUud2lkdGggKyAi
PGJyPiI7Cit9Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191882</attachid>
            <date>2013-03-06 18:14:33 -0800</date>
            <delta_ts>2013-03-17 23:14:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111149-20130307131038.patch</filename>
            <type>text/plain</type>
            <size>11034</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0NDI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWNhYzM0ZjdhMWQ5NTk2
Mjg3YjlkYWE2YTgwMTNiN2M0NDBkYjdmZS4uM2NjN2RlMDBjOGZmMDEwMWEyMDc2ODg5MTg0NzY5
YjM5ZjI0MmU5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTAzLTA2ICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBh
cnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBp
biBDU1MgY2FsYyBleHByZXNzaW9ucyBhdCBwYXJzZSB0aW1lLgorCisgICAgICAgIFRlc3Q6IGNz
czMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0ludGVnZXJSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlU2ltcGxpZmllZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpDU1NDYWxjQmluYXJ5T3Bl
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OmV2YWx1
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OmV2YWx1YXRl
T3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
OjpwYXJzZVZhbHVlTXVsdGlwbGljYXRpdmVFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VBZGRpdGl2ZVZhbHVlRXhwcmVzc2lv
bik6CisKIDIwMTMtMDItMjggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQWRkIGNhbGVuZGFyIHRhYmxlIHZpZXcgZm9yIHRoZSBuZXcgY2FsZW5kYXIgcGlj
a2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKaW5kZXggMjM5
Yzk5ZDJjNGZmMjM4MTM4NmY1MGVkNTkzMGI3ODg0MTZhYTQ1NC4uMjUxNjVkZDQyYzg0ZjJjMWFk
ZGNkMWJhNDBkYTMyNzhjNWMzYWE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxh
dGlvblZhbHVlLmNwcApAQCAtMjU2LDEyICsyNTYsMTMgQEAgcHJpdmF0ZToKIH07CiAKIHN0YXRp
YyBjb25zdCBDYWxjdWxhdGlvbkNhdGVnb3J5IGFkZFN1YnRyYWN0UmVzdWx0W0NhbGNPdGhlcl1b
Q2FsY090aGVyXSA9IHsKLSAgICB7IENhbGNOdW1iZXIsICAgICAgICBDYWxjT3RoZXIsICAgICAg
ICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjT3RoZXIgfSwKLSAg
ICB7IENhbGNPdGhlciwgICAgICAgICBDYWxjTGVuZ3RoLCAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0aCB9LAotICAgIHsgQ2FsY1Bl
cmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjUGVyY2VudCwgICAgICAgQ2FsY1Bl
cmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3RoIH0sCi0gICAgeyBDYWxjUGVyY2VudE51bWJl
ciwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjUGVyY2VudE51bWJl
ciwgQ2FsY090aGVyIH0sCi0gICAgeyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGgsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGggfSwKLX07ICAgIAorLy8gICAgICAgICAgICAgICAgICAgICAgICBDYWxjTnVtYmVyICAgICAg
ICAgQ2FsY0xlbmd0aCAgICAgICAgIENhbGNQZXJjZW50ICAgICAgICBDYWxjUGVyY2VudE51bWJl
ciAgQ2FsY1BlcmNlbnRMZW5ndGgKKy8qIENhbGNOdW1iZXIgKi8gICAgICAgIHsgQ2FsY051bWJl
ciwgICAgICAgIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNl
bnROdW1iZXIsIENhbGNPdGhlciB9LAorLyogQ2FsY0xlbmd0aCAqLyAgICAgICAgeyBDYWxjT3Ro
ZXIsICAgICAgICAgQ2FsY0xlbmd0aCwgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3Ro
ZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGggfSwKKy8qIENhbGNQZXJjZW50ICovICAgICAg
IHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjUGVyY2VudCwgICAg
ICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3RoIH0sCisvKiBDYWxjUGVyY2Vu
dE51bWJlciAqLyB7IENhbGNQZXJjZW50TnVtYmVyLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1Bl
cmNlbnROdW1iZXIsIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjT3RoZXIgfSwKKy8qIENhbGNQZXJj
ZW50TGVuZ3RoICovIHsgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxj
UGVyY2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoIH0sCit9
OwogCiBzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUmIHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQogewpAQCAtMjk0LDIxICsyOTUsMzcgQEAg
c3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2kKICAgICByZXR1cm4gQ2FsY090aGVyOwogfQogCitib29s
IGlzSW50ZWdlclJlc3VsdChDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIGxlZnRTaWRlLCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUqIHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQoreworICAgIC8vIE5v
dCB0ZXN0aW5nIGZvciBhY3R1YWwgaW50ZWdlciB2YWx1ZXMuCisgICAgLy8gUGVyZm9ybXMgVzND
IHNwZWMncyB0eXBlIGNoZWNraW5nIGZvciBjYWxjIGludGVnZXJzLgorICAgIC8vIGh0dHA6Ly93
d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNjYWxjLXR5cGUtY2hlY2tpbmcKKyAgICByZXR1cm4g
b3AgIT0gQ2FsY0RpdmlkZSAmJiBsZWZ0U2lkZS0+aXNJbnRlZ2VyKCkgJiYgcmlnaHRTaWRlLT5p
c0ludGVnZXIoKTsKK30KKwogY2xhc3MgQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbiA6IHB1YmxpYyBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUgewogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0
U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4gY3JlYXRlU2ltcGxpZmllZChQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNp
ZGUsIENhbGNPcGVyYXRvciBvcCkKICAgICB7CiAgICAgICAgIEFTU0VSVChsZWZ0U2lkZS0+Y2F0
ZWdvcnkoKSAhPSBDYWxjT3RoZXIgJiYgcmlnaHRTaWRlLT5jYXRlZ29yeSgpICE9IENhbGNPdGhl
cik7Ci0gICAgICAgIAotICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG5ld0NhdGVnb3J5ID0g
ZGV0ZXJtaW5lQ2F0ZWdvcnkoKmxlZnRTaWRlLCAqcmlnaHRTaWRlLCBvcCk7CiAKKyAgICAgICAg
aWYgKGxlZnRTaWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIgJiYgcmlnaHRTaWRlLT5jYXRl
Z29yeSgpID09IENhbGNOdW1iZXIpIHsKKyAgICAgICAgICAgIGRvdWJsZSBldmFsdWF0aW9uID0g
ZXZhbHVhdGVPcGVyYXRvcihsZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSwgcmlnaHRTaWRlLT5kb3Vi
bGVWYWx1ZSgpLCBvcCk7CisgICAgICAgICAgICBpZiAoc3RkOjppc25hbihldmFsdWF0aW9uKSB8
fCBzdGQ6OmlzaW5mKGV2YWx1YXRpb24pKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgYm9vbCBpc0ludGVnZXIgPSBpc0ludGVnZXJSZXN1bHQobGVmdFNpZGUuZ2V0KCks
IHJpZ2h0U2lkZS5nZXQoKSwgb3ApOworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcyBldmFsdWF0aW9uVHlwZSA9IGlzSW50ZWdlciA/IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEFSU0VSX0lOVEVHRVIgOiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjsKKyAgICAg
ICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKGV2YWx1YXRpb24sIGV2YWx1YXRpb25UeXBlKS5nZXQoKSwgaXNJbnRlZ2Vy
KTsKKyAgICAgICAgfQorCisgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbmV3Q2F0ZWdvcnkg
PSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUsIG9wKTsKICAgICAgICAg
aWYgKG5ld0NhdGVnb3J5ID09IENhbGNPdGhlcikKICAgICAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbihsZWZ0U2lk
ZSwgcmlnaHRTaWRlLCBvcCwgbmV3Q2F0ZWdvcnkpKTsKICAgICB9Ci0gICAgCisKICAgICB2aXJ0
dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhZG91YmxlVmFs
dWUoKTsKQEAgLTM5MCwxNiArNDA3LDIxIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBDU1ND
YWxjQmluYXJ5T3BlcmF0aW9uKFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0
U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09w
ZXJhdG9yIG9wLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotICAgICAgICA6IENTU0Nh
bGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSwgbGVmdFNpZGUtPmlzSW50ZWdlcigpICYmIHJpZ2h0
U2lkZS0+aXNJbnRlZ2VyKCkpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVn
b3J5LCBpc0ludGVnZXJSZXN1bHQobGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSwgb3Ap
KQogICAgICAgICAsIG1fbGVmdFNpZGUobGVmdFNpZGUpCiAgICAgICAgICwgbV9yaWdodFNpZGUo
cmlnaHRTaWRlKQogICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCiAgICAgewogICAgIH0KICAgICAK
LSAgICBkb3VibGUgZXZhbHVhdGUoZG91YmxlIGxlZnRWYWx1ZSwgZG91YmxlIHJpZ2h0VmFsdWUp
IGNvbnN0CisgICAgZG91YmxlIGV2YWx1YXRlKGRvdWJsZSBsZWZ0U2lkZSwgZG91YmxlIHJpZ2h0
U2lkZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBldmFsdWF0ZU9wZXJhdG9yKGxlZnRT
aWRlLCByaWdodFNpZGUsIG1fb3BlcmF0b3IpOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUg
ZXZhbHVhdGVPcGVyYXRvcihkb3VibGUgbGVmdFZhbHVlLCBkb3VibGUgcmlnaHRWYWx1ZSwgQ2Fs
Y09wZXJhdG9yIG9wKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX29wZXJhdG9yKSB7CisgICAg
ICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBDYWxjQWRkOgogICAgICAgICAgICAgcmV0
dXJuIGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWU7CiAgICAgICAgIGNhc2UgQ2FsY1N1YnRyYWN0OgpA
QCAtNDEzLDcgKzQzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQotICAgIAorCiAgICAgY29uc3QgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4g
bV9sZWZ0U2lkZTsKICAgICBjb25zdCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX3Jp
Z2h0U2lkZTsKICAgICBjb25zdCBDYWxjT3BlcmF0b3IgbV9vcGVyYXRvcjsKQEAgLTUxMiw3ICs1
MzQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlVGVybSh0b2tlbnMs
IGRlcHRoLCBpbmRleCwgJnJocykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgICAgICByZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRl
KHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVy
YXRvckNoYXJhY3RlcikpOworICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5h
cnlPcGVyYXRpb246OmNyZWF0ZVNpbXBsaWZpZWQocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBz
dGF0aWNfY2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CiAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC0+dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CkBAIC01MzksNyArNTYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghcGFy
c2VWYWx1ZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCBpbmRleCwgJnJo
cykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXN1bHQt
PnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlKHJlc3VsdC0+dmFsdWUsIHJo
cy52YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNoYXJhY3RlcikpOwor
ICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0
ZVNpbXBsaWZpZWQocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBzdGF0aWNfY2FzdDxDYWxjT3Bl
cmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC0+dmFs
dWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOGJh
ODdkMGQxNzNmYTU5NWE1MmJjMzYxMzU1MDE3YmZiNDA5ODBlZi4uMTAyY2Y4ODcyMTJlMTBiNDJj
ODVmYzRhMTU0NzkxNWNjYjJhNDVjZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAzLTA2
ICBBbGFuIEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBs
aWZ5IHBhcnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgQ1NTIGNhbGMgc2ltcGxpZmljYXRpb24gdGVz
dHMsIHVwZGF0ZWQgdGVzdCBleHBlY3RhdGlvbnMgZm9yIGV4aXN0aW5nIENTUyBjYWxjIHRlc3Rz
LgorCisgICAgICAgICogY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBj
c3MzL2NhbGMvc2ltcGxpZmljYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBj
c3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTMtMDItMjggIFRha2Fz
aGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgY2hyb21pdW0gZ2FyZGVuaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMv
Y3Nzb20tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVk
LnR4dAppbmRleCBkNWY1NDNjMjNhMjk1MmViMTEzMjE0YmM2YTg5MjMzOGViNDZmN2Q1Li5jNjQ2
NTc5ZjU5ZTllN2Q3MmVjMjIwM2RiYzE4NTQxNDYwYTVmMjNkIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2NzczMv
Y2FsYy9jc3NvbS1leHBlY3RlZC50eHQKQEAgLTgsNyArOCw3IEBAIFRoaXMgdGVzdHMgY2FsYygp
IGFuZCB0aGUgQ1NTT00KIDVweCArIDJlbSArIDZpbiA9PiBjYWxjKCg1cHggKyAyZW0pICsgNmlu
KQogMTAwJSAtIDEwcHggLyAyID0+IGNhbGMoMTAwJSAtICgxMHB4IC8gMikpCiAxcHggKyAyZW0g
LSAzcmVtICsgNGluID0+IGNhbGMoKCgxcHggKyAyZW0pIC0gM3JlbSkgKyA0aW4pCi0xMDBweCAq
ICgxICsgMiAqIDMgLSA0IC8gNSkgPT4gY2FsYygxMDBweCAqICgoMSArICgyICogMykpIC0gKDQg
LyA1KSkpCisxMDBweCAqICgxICsgMiAqIDMgLSA0IC8gNSkgPT4gY2FsYygxMDBweCAqIDYuMikK
ICgxMDBweCkgKyAyMDBweCA9PiBjYWxjKDEwMHB4ICsgMjAwcHgpCiAoKCgoKCgoKCgoMTAwcHgp
KSkpKSkpKSkpID0+IGNhbGMoMTAwcHgpCiBmbGltc3RpeCA9PiBjYWxjKDEwMHB4KQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzJiNWQwMThkN2M5NzYxZjA4NzBlNzI2OTJjNmVhZTEzYjU4MDk0ZAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxNyBAQAorVGhpcyB0ZXN0cyBwYXJzZSB0aW1lIHNpbXBsaWZpY2F0aW9u
IGluIGNhbGMoKQorCisxMDBweCAqICgyNSArIDQpID0+IGNhbGMoMTAwcHggKiAyOSkKKzEwMHB4
ICogKDI1IC0gNCkgPT4gY2FsYygxMDBweCAqIDIxKQorMTAwcHggKiAoMiAqIDUgLSA0KSA9PiBj
YWxjKDEwMHB4ICogNikKKzEwMHB4ICogKDUgLSA0IC8gNSkgPT4gY2FsYygxMDBweCAqIDQuMikK
KzEwMHB4ICogKDYgKiA1IC0gOCAvIDUpID0+IGNhbGMoMTAwcHggKiAyOC40KQorMTAwcHggKiAo
NiAqICg1IC0gNCkgLyA4KSA9PiBjYWxjKDEwMHB4ICogMC43NSkKKzEwMHB4ICogKCg2KSAqICg1
IC0gKDQpKSArICgzICogKCg0KSkgKiAoOCAtIDIpKSkgPT4gY2FsYygxMDBweCAqIDc4KQorKDI1
ICsgNCkgKiAxMDBweCA9PiBjYWxjKDI5ICogMTAwcHgpCisoMjUgLSA0KSAqIDEwMHB4ID0+IGNh
bGMoMjEgKiAxMDBweCkKKygyICogNSAtIDQpICogMTAwcHggPT4gY2FsYyg2ICogMTAwcHgpCiso
NSAtIDQgLyA1KSAqIDEwMHB4ID0+IGNhbGMoNC4yICogMTAwcHgpCisoNiAqIDUgLSA4IC8gNSkg
KiAxMDBweCA9PiBjYWxjKDI4LjQgKiAxMDBweCkKKyg2ICogKDUgLSA0KSAvIDgpICogMTAwcHgg
PT4gY2FsYygwLjc1ICogMTAwcHgpCisoKDYpICogKDUgLSAoNCkpICsgKDMgKiAoKDQpKSAqICg4
IC0gMikpKSAqIDEwMHB4ID0+IGNhbGMoNzggKiAxMDBweCkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2Nh
bGMvc2ltcGxpZmljYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGUwY2Y5ODNhOTRjNDhjMzRlMDdi
NzgwMzEzMTIzNTEwN2U0ZTVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9j
YWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwKQEAgLTAsMCArMSwzMiBAQAorPCFET0NUWVBFIEhUTUw+
Cis8ZGl2IGlkPSJkdW1teSI+PC9kaXY+Cis8ZGl2IGlkPSJyZXN1bHRzIj5UaGlzIHRlc3RzIHBh
cnNlIHRpbWUgc2ltcGxpZmljYXRpb24gaW4gY2FsYygpPGJyPjxicj48L2Rpdj4KKzxzY3JpcHQ+
CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgd2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpOworCit2YXIgdGVzdHMgPSBbCisgICAgIjEwMHB4ICogKDI1ICsgNCkiLAorICAgICIxMDBw
eCAqICgyNSAtIDQpIiwKKyAgICAiMTAwcHggKiAoMiAqIDUgLSA0KSIsCisgICAgIjEwMHB4ICog
KDUgLSA0IC8gNSkiLAorICAgICIxMDBweCAqICg2ICogNSAtIDggLyA1KSIsCisgICAgIjEwMHB4
ICogKDYgKiAoNSAtIDQpIC8gOCkiLAorICAgICIxMDBweCAqICgoNikgKiAoNSAtICg0KSkgKyAo
MyAqICgoNCkpICogKDggLSAyKSkpIiwKKyAgICAiKDI1ICsgNCkgKiAxMDBweCIsCisgICAgIigy
NSAtIDQpICogMTAwcHgiLAorICAgICIoMiAqIDUgLSA0KSAqIDEwMHB4IiwKKyAgICAiKDUgLSA0
IC8gNSkgKiAxMDBweCIsCisgICAgIig2ICogNSAtIDggLyA1KSAqIDEwMHB4IiwKKyAgICAiKDYg
KiAoNSAtIDQpIC8gOCkgKiAxMDBweCIsCisgICAgIigoNikgKiAoNSAtICg0KSkgKyAoMyAqICgo
NCkpICogKDggLSAyKSkpICogMTAwcHgiLAorXTsKKwordmFyIHJlc3VsdHMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpOwordmFyIGR1bW15ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImR1bW15Iik7Citmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7
CisgICAgdmFyIGV4cHJlc3Npb24gPSB0ZXN0c1tpXTsKKyAgICBkdW1teS5zdHlsZS53aWR0aCA9
ICdjYWxjKCcgKyBleHByZXNzaW9uICsgJyknOworICAgIHJlc3VsdHMuaW5uZXJIVE1MICs9IGV4
cHJlc3Npb24gKyAiID0+ICIgKyBkdW1teS5zdHlsZS53aWR0aCArICI8YnI+IjsKK30KKzwvc2Ny
aXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193491</attachid>
            <date>2013-03-17 23:14:07 -0700</date>
            <delta_ts>2013-03-18 00:22:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111149-20130318170958.patch</filename>
            <type>text/plain</type>
            <size>19882</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1ODY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWQwMDM1NDE2ZjI0Yzkx
NDE5NDdkZGVmZjcxYmI3NGVhN2I4MmY4OC4uYmRjNmE0YTY3NTEzZGY2MTg3YzI4ODNlNTY5ZGI5
ZjdjNjY2YWQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAzLTE3ICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBh
cnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBh
bmQgdW5pdHMgaW4gQ1NTIGNhbGMgZXhwcmVzc2lvbnMgYXQgcGFyc2UgdGltZS4KKworICAgICAg
ICBUZXN0OiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbAorCisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZTo6ZG91YmxlVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpwcmltaXRpdmVUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNJbnRlZ2VyUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzU2ltcGxpZmlhYmxlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
YWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoQ1NTQ2FsY0JpbmFyeU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGVT
aW1wbGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OnBy
aW1pdGl2ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6
Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uOjpwaWNrQnlDYXRlZ29yeSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmlu
YXJ5T3BlcmF0aW9uOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uOjpldmFsdWF0ZU9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZVRlcm0pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlTXVsdGlwbGljYXRpdmVFeHBy
ZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VBZGRpdGl2ZVZhbHVlRXhwcmVzc2lvbik6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuaDoKKyAgICAgICAgKENTU0NhbGNFeHByZXNzaW9uTm9kZSk6CisKIDIwMTMtMDMt
MTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWDog
Q3Jhc2ggd2hlbiByZW1vdmluZyBhcmlhLW1lbnUgaXRlbSBmcm9tIERPTQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCmluZGV4IDIzOWM5OWQyYzRmZjIzODEzODZm
NTBlZDU5MzBiNzg4NDE2YWE0NTQuLjVhNGUyNDZkYTQ4NTg0NDBlMWEyY2NmOTJkMDgyNjNmN2Mx
NGI3M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAg
LTE0NSw3ICsxNDUsMTQgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWUodmFsdWUsIGlzSW50ZWdlcikpOwogICAgIH0KLSAg
ICAKKworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNQcmltaXRpdmVWYWx1ZT4gY3JlYXRl
KGRvdWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlLCBib29sIGlz
SW50ZWdlcikKKyAgICB7CisgICAgICAgIGlmIChzdGQ6OmlzbmFuKHZhbHVlKSB8fCBzdGQ6Omlz
aW5mKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZh
bHVlLCB0eXBlKS5nZXQoKSwgaXNJbnRlZ2VyKSk7CisgICAgfQorCiAgICAgdmlydHVhbCBib29s
IGlzWmVybygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIW1fdmFsdWUtPmdldERvdWJs
ZVZhbHVlKCk7CkBAIC0xOTQsOSArMjAxLDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3dp
dGNoIChtX2NhdGVnb3J5KSB7CiAgICAgICAgIGNhc2UgQ2FsY051bWJlcjoKLSAgICAgICAgY2Fz
ZSBDYWxjUGVyY2VudDogICAgICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbV92YWx1
ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgY2FzZSBDYWxjUGVyY2VudDoKICAgICAgICAg
Y2FzZSBDYWxjTGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmdldERvdWJsZVZh
bHVlKCk7CiAgICAgICAgIGNhc2UgQ2FsY1BlcmNlbnRMZW5ndGg6CiAgICAgICAgIGNhc2UgQ2Fs
Y1BlcmNlbnROdW1iZXI6CiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCkBAIC0yNDUsNiArMjUy
LDExIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
Q3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9CiAgICAgCisgICAgdmlydHVhbCBDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzIHByaW1pdGl2ZVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMobV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgp
KTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
KENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBpc0ludGVnZXIpCiAgICAgICAgIDogQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlKHVuaXRDYXRlZ29yeSgoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcyl2YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKSwgaXNJbnRlZ2VyKQpAQCAtMjU2LDEyICsyNjgs
MTMgQEAgcHJpdmF0ZToKIH07CiAKIHN0YXRpYyBjb25zdCBDYWxjdWxhdGlvbkNhdGVnb3J5IGFk
ZFN1YnRyYWN0UmVzdWx0W0NhbGNPdGhlcl1bQ2FsY090aGVyXSA9IHsKLSAgICB7IENhbGNOdW1i
ZXIsICAgICAgICBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjT3RoZXIgfSwKLSAgICB7IENhbGNPdGhlciwgICAgICAgICBDYWxjTGVu
Z3RoLCAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCB9LAotICAgIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3Ro
LCBDYWxjUGVyY2VudCwgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3Ro
IH0sCi0gICAgeyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCi0gICAgeyBDYWxjT3Ro
ZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3Ro
ZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGggfSwKLX07ICAgIAorLy8gICAgICAgICAgICAg
ICAgICAgICAgICBDYWxjTnVtYmVyICAgICAgICAgQ2FsY0xlbmd0aCAgICAgICAgIENhbGNQZXJj
ZW50ICAgICAgICBDYWxjUGVyY2VudE51bWJlciAgQ2FsY1BlcmNlbnRMZW5ndGgKKy8qIENhbGNO
dW1iZXIgKi8gICAgICAgIHsgQ2FsY051bWJlciwgICAgICAgIENhbGNPdGhlciwgICAgICAgICBD
YWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciB9LAorLyogQ2Fs
Y0xlbmd0aCAqLyAgICAgICAgeyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY0xlbmd0aCwgICAgICAg
IENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgg
fSwKKy8qIENhbGNQZXJjZW50ICovICAgICAgIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJj
ZW50TGVuZ3RoLCBDYWxjUGVyY2VudCwgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJj
ZW50TGVuZ3RoIH0sCisvKiBDYWxjUGVyY2VudE51bWJlciAqLyB7IENhbGNQZXJjZW50TnVtYmVy
LCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TnVtYmVy
LCBDYWxjT3RoZXIgfSwKKy8qIENhbGNQZXJjZW50TGVuZ3RoICovIHsgQ2FsY090aGVyLCAgICAg
ICAgIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAg
ICAgIENhbGNQZXJjZW50TGVuZ3RoIH0sCit9OwogCiBzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29y
eSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRl
LCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9w
KQogewpAQCAtMjk0LDIxICszMDcsMTM3IEBAIHN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRl
dGVybWluZUNhdGVnb3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpCiAgICAg
cmV0dXJuIENhbGNPdGhlcjsKIH0KIAorYm9vbCBpc0ludGVnZXJSZXN1bHQoQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlKiBsZWZ0U2lkZSwgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiByaWdodFNpZGUsIENh
bGNPcGVyYXRvciBvcCkKK3sKKyAgICAvLyBOb3QgdGVzdGluZyBmb3IgYWN0dWFsIGludGVnZXIg
dmFsdWVzLgorICAgIC8vIFBlcmZvcm1zIFczQyBzcGVjJ3MgdHlwZSBjaGVja2luZyBmb3IgY2Fs
YyBpbnRlZ2Vycy4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jY2Fs
Yy10eXBlLWNoZWNraW5nCisgICAgcmV0dXJuIG9wICE9IENhbGNEaXZpZGUgJiYgbGVmdFNpZGUt
PmlzSW50ZWdlcigpICYmIHJpZ2h0U2lkZS0+aXNJbnRlZ2VyKCk7Cit9CisKK2Jvb2wgaXNTaW1w
bGlmaWFibGVUeXBlKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOgor
ICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOgorICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19FTVM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0VYUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTOgorICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19SRU1TOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ006CisgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX01NOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19J
TjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFQ6CisgICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BDOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUc6
CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRDoKKyAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfR1JBRDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVM6
CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1M6CisgICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0haOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFo6Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lPTjoKKyAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVlc6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZI
OgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUlOOgorICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19WTUFYOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
UFBYOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUEk6CisgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0RQQ006CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkc6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSToKKyAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQ6CisgICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0FUVFI6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NPVU5U
RVI6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFQ1Q6CisgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9SOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QQUlSOgorI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfREFTSEJPQVJEX1JFR0lPTjoKKyNlbmRpZgorICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19VTklDT0RFX1JBTkdFOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QQVJTRVJfT1BFUkFUT1I6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1BBUlNFUl9JTlRFR0VSOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJT
RVJfSEVYQ09MT1I6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JREVO
VElGSUVSOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOOgorICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DT1VOVEVSX05BTUU6CisgICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NIQVBFOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19RVUFE
OgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DQUxDOgorICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lUSF9OVU1CRVI6CisgICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NBTENfUEVSQ0VOVEFHRV9XSVRIX0xFTkdUSDoKKyNpZiBF
TkFCTEUoQ1NTX1ZBUklBQkxFUykKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVkFS
SUFCTEVfTkFNRToKKyNlbmRpZgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGNsYXNzIENTU0Nh
bGNCaW5hcnlPcGVyYXRpb24gOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKIAogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNCaW5hcnlPcGVyYXRpb24+IGNyZWF0
ZShQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZShQYXNzUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKICAgICB7CiAgICAgICAgIEFT
U0VSVChsZWZ0U2lkZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjT3RoZXIgJiYgcmlnaHRTaWRlLT5jYXRl
Z29yeSgpICE9IENhbGNPdGhlcik7Ci0gICAgICAgIAotICAgICAgICBDYWxjdWxhdGlvbkNhdGVn
b3J5IG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkoKmxlZnRTaWRlLCAqcmlnaHRTaWRl
LCBvcCk7CiAKKyAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBuZXdDYXRlZ29yeSA9IGRldGVy
bWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSwgb3ApOwogICAgICAgICBpZiAobmV3
Q2F0ZWdvcnkgPT0gQ2FsY090aGVyKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKGxlZnRTaWRlLCByaWdo
dFNpZGUsIG9wLCBuZXdDYXRlZ29yeSkpOwogICAgIH0KLSAgICAKKworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlU2ltcGxpZmllZChQYXNzUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKKyAgICB7CisgICAgICAgIENh
bGN1bGF0aW9uQ2F0ZWdvcnkgbGVmdENhdGVnb3J5ID0gbGVmdFNpZGUtPmNhdGVnb3J5KCk7Cisg
ICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgcmlnaHRDYXRlZ29yeSA9IHJpZ2h0U2lkZS0+Y2F0
ZWdvcnkoKTsKKyAgICAgICAgQVNTRVJUKGxlZnRDYXRlZ29yeSAhPSBDYWxjT3RoZXIgJiYgcmln
aHRDYXRlZ29yeSAhPSBDYWxjT3RoZXIpOworCisgICAgICAgIGJvb2wgaXNJbnRlZ2VyID0gaXNJ
bnRlZ2VyUmVzdWx0KGxlZnRTaWRlLmdldCgpLCByaWdodFNpZGUuZ2V0KCksIG9wKTsKKworICAg
ICAgICAvLyBTaW1wbGlmeSBudW1iZXJzLgorICAgICAgICBpZiAobGVmdENhdGVnb3J5ID09IENh
bGNOdW1iZXIgJiYgcmlnaHRDYXRlZ29yeSA9PSBDYWxjTnVtYmVyKSB7CisgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIGV2YWx1YXRpb25UeXBlID0gaXNJbnRlZ2VyID8g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSU5URUdFUiA6IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSOworICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3IobGVmdFNpZGUtPmRvdWJsZVZhbHVlKCksIHJpZ2h0U2lk
ZS0+ZG91YmxlVmFsdWUoKSwgb3ApLCBldmFsdWF0aW9uVHlwZSwgaXNJbnRlZ2VyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFNpbXBsaWZ5IGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiBiZXR3
ZWVuIHNhbWUgdHlwZXMuCisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgbGVm
dFR5cGUgPSBsZWZ0U2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICBpZiAobGVmdFR5cGUg
PT0gcmlnaHRTaWRlLT5wcmltaXRpdmVUeXBlKCkgJiYgaXNTaW1wbGlmaWFibGVUeXBlKGxlZnRU
eXBlKSkgeworICAgICAgICAgICAgaWYgKG9wID09IENhbGNBZGQgfHwgb3AgPT0gQ2FsY1N1YnRy
YWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRlLT5kb3VibGVWYWx1ZSgpLCByaWdodFNpZGUtPmRv
dWJsZVZhbHVlKCksIG9wKSwgbGVmdFR5cGUsIGlzSW50ZWdlcik7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBTaW1wbGlmeSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBieSBhIG51bWJlciBmb3Ig
c2ltcGxpZmlhYmxlIHR5cGVzLgorICAgICAgICBpZiAob3AgIT0gQ2FsY011bHRpcGx5ICYmIG9w
ICE9IENhbGNEaXZpZGUpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlKGxlZnRTaWRlLCByaWdo
dFNpZGUsIG9wKTsKKworICAgICAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIG51bWJlclNpZGUg
PSBwaWNrQnlDYXRlZ29yeShsZWZ0U2lkZS5nZXQoKSwgcmlnaHRTaWRlLmdldCgpLCBDYWxjTnVt
YmVyKTsKKyAgICAgICAgaWYgKCFudW1iZXJTaWRlKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZShsZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCk7CisgICAgICAgIGlmIChudW1iZXJTaWRlID09IGxl
ZnRTaWRlICYmIG9wID09IENhbGNEaXZpZGUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBvdGhlclNpZGUgPSBsZWZ0U2lkZSA9PSBudW1iZXJT
aWRlID8gcmlnaHRTaWRlLmdldCgpIDogbGVmdFNpZGUuZ2V0KCk7CisKKyAgICAgICAgZG91Ymxl
IG51bWJlciA9IG51bWJlclNpZGUtPmRvdWJsZVZhbHVlKCk7CisgICAgICAgIGlmIChzdGQ6Omlz
bmFuKG51bWJlcikgfHwgc3RkOjppc2luZihudW1iZXIpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGlmIChvcCA9PSBDYWxjRGl2aWRlICYmICFudW1iZXIpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKworICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIG90aGVyVHlw
ZSA9IG90aGVyU2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICBpZiAoaXNTaW1wbGlmaWFi
bGVUeXBlKG90aGVyVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoZXZhbHVhdGVPcGVyYXRvcihvdGhlclNpZGUtPmRvdWJsZVZhbHVlKCksIG51
bWJlciwgb3ApLCBvdGhlclR5cGUsIGlzSW50ZWdlcik7CisKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZShsZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCk7CisgICAgfQorCiAgICAgdmlydHVhbCBib29sIGlz
WmVybygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIWRvdWJsZVZhbHVlKCk7CkBAIC0z
ODgsMTggKzUxNyw2NiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIENzc0NhbGNCaW5hcnlPcGVyYXRpb247IH0KIAorICAgIHZpcnR1YWwgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBwcmltaXRpdmVUeXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAobV9jYXRlZ29yeSkgeworICAgICAgICBjYXNlIENhbGNOdW1iZXI6CisgICAg
ICAgIGNhc2UgQ2FsY0xlbmd0aDoKKyAgICAgICAgY2FzZSBDYWxjUGVyY2VudDogeworICAgICAg
ICAgICAgaWYgKG1fbGVmdFNpZGUtPmNhdGVnb3J5KCkgPT0gQ2FsY051bWJlciAmJiBtX3JpZ2h0
U2lkZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgaWYgKG1f
aXNJbnRlZ2VyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QQVJTRVJfSU5URUdFUjsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9sZWZ0
U2lkZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjTnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBt
X3JpZ2h0U2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgaWYgKG1fcmlnaHRTaWRl
LT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbGVm
dFNpZGUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXMgbGVmdFR5cGUgPSBtX2xlZnRTaWRlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAg
ICAgICBpZiAobGVmdFR5cGUgPT0gbV9yaWdodFNpZGUtPnByaW1pdGl2ZVR5cGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbGVmdFR5cGU7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VTktOT1dOOworICAgICAgICB9CisjaWYgRU5BQkxFKENTU19WQVJJQUJM
RVMpCisgICAgICAgIGNhc2UgQ2FsY1ZhcmlhYmxlOgorICAgICAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVkFSSUFCTEVfTkFNRTsKKyNlbmRpZgorICAgICAgICBjYXNlIENh
bGNQZXJjZW50TGVuZ3RoOgorICAgICAgICBjYXNlIENhbGNQZXJjZW50TnVtYmVyOgorICAgICAg
ICBjYXNlIENhbGNPdGhlcjoKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1VOS05PV047CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047CisgICAgfQorCisK
IHByaXZhdGU6CiAgICAgQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbihQYXNzUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCwgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29y
eSkKLSAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnksIGxlZnRTaWRlLT5p
c0ludGVnZXIoKSAmJiByaWdodFNpZGUtPmlzSW50ZWdlcigpKQorICAgICAgICA6IENTU0NhbGNF
eHByZXNzaW9uTm9kZShjYXRlZ29yeSwgaXNJbnRlZ2VyUmVzdWx0KGxlZnRTaWRlLmdldCgpLCBy
aWdodFNpZGUuZ2V0KCksIG9wKSkKICAgICAgICAgLCBtX2xlZnRTaWRlKGxlZnRTaWRlKQogICAg
ICAgICAsIG1fcmlnaHRTaWRlKHJpZ2h0U2lkZSkKICAgICAgICAgLCBtX29wZXJhdG9yKG9wKQog
ICAgIHsKICAgICB9Ci0gICAgCi0gICAgZG91YmxlIGV2YWx1YXRlKGRvdWJsZSBsZWZ0VmFsdWUs
IGRvdWJsZSByaWdodFZhbHVlKSBjb25zdAorCisgICAgc3RhdGljIENTU0NhbGNFeHByZXNzaW9u
Tm9kZSogcGlja0J5Q2F0ZWdvcnkoQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBmaXJzdE5vZGUsIENT
U0NhbGNFeHByZXNzaW9uTm9kZSogc2Vjb25kTm9kZSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRl
Z29yeSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9vcGVyYXRvcikgeworICAgICAgICBpZiAo
Zmlyc3ROb2RlLT5jYXRlZ29yeSgpID09IGNhdGVnb3J5KQorICAgICAgICAgICAgcmV0dXJuIGZp
cnN0Tm9kZTsKKyAgICAgICAgaWYgKHNlY29uZE5vZGUtPmNhdGVnb3J5KCkgPT0gY2F0ZWdvcnkp
CisgICAgICAgICAgICByZXR1cm4gc2Vjb25kTm9kZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgZG91YmxlIGV2YWx1YXRlKGRvdWJsZSBsZWZ0U2lkZSwgZG91YmxlIHJpZ2h0U2lk
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRl
LCByaWdodFNpZGUsIG1fb3BlcmF0b3IpOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgZXZh
bHVhdGVPcGVyYXRvcihkb3VibGUgbGVmdFZhbHVlLCBkb3VibGUgcmlnaHRWYWx1ZSwgQ2FsY09w
ZXJhdG9yIG9wKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIENh
bGNBZGQ6CiAgICAgICAgICAgICByZXR1cm4gbGVmdFZhbHVlICsgcmlnaHRWYWx1ZTsKICAgICAg
ICAgY2FzZSBDYWxjU3VidHJhY3Q6CkBAIC00MTMsNyArNTkwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICBjb25zdCBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2xlZnRTaWRlOwogICAgIGNvbnN0IFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+IG1fcmlnaHRTaWRlOwogICAgIGNvbnN0IENhbGNPcGVyYXRvciBt
X29wZXJhdG9yOwpAQCAtNDc5LDcgKzY1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBp
ZiAoY2hlY2tEZXB0aEFuZEluZGV4KCZkZXB0aCwgKmluZGV4LCB0b2tlbnMpICE9IE9LKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgICAgICAgCisKICAgICAgICAgaWYgKG9wZXJh
dG9yVmFsdWUodG9rZW5zLCAqaW5kZXgpID09ICcoJykgewogICAgICAgICAgICAgdW5zaWduZWQg
Y3VycmVudEluZGV4ID0gKmluZGV4ICsgMTsKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZUV4
cHJlc3Npb24odG9rZW5zLCBkZXB0aCwgJmN1cnJlbnRJbmRleCwgcmVzdWx0KSkKQEAgLTUxMiw3
ICs2ODksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlVGVybSh0b2tl
bnMsIGRlcHRoLCBpbmRleCwgJnJocykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICByZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3Jl
YXRlKHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihv
cGVyYXRvckNoYXJhY3RlcikpOworICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNC
aW5hcnlPcGVyYXRpb246OmNyZWF0ZVNpbXBsaWZpZWQocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVl
LCBzdGF0aWNfY2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CiAgICAgICAg
ICAgICBpZiAoIXJlc3VsdC0+dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CkBAIC01MzksNyArNzE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICgh
cGFyc2VWYWx1ZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCBpbmRleCwg
JnJocykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICByZXN1
bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlKHJlc3VsdC0+dmFsdWUs
IHJocy52YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNoYXJhY3Rlcikp
OworICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNy
ZWF0ZVNpbXBsaWZpZWQocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBzdGF0aWNfY2FzdDxDYWxj
T3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC0+
dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAppbmRleCA1NjlkYmRlYTBiMGYyYjNiODk4
YWU3YTRjNzIyZjBiNTY0YmFkZjg0Li4zMWRjNjBiNWU5NDAzZTUxMTI1YzZiOTlkOGVjYzBjNmQx
ZDI2MGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNkZWZpbmUgQ1NTQ2FsY3VsYXRpb25WYWx1ZV9oCiAKICNpbmNsdWRlICJD
U1NQYXJzZXJWYWx1ZXMuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1
ZGUgIkNTU1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04MCw2ICs4MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKIAogICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdv
cnkoKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5OyB9ICAgIAorICAgIHZpcnR1YWwgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBwcmltaXRpdmVUeXBlKCkgY29uc3QgPSAwOwogICAgIGJv
b2wgaXNJbnRlZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9pc0ludGVnZXI7IH0KICAgICAKIHByb3Rl
Y3RlZDoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBlNGRjYmFlMDMwZGQ0ODk3MDI3MDcxZDlmNzk4OGQ4ZjVmMjkzNTcwLi4x
Yjc1YmJhYmIzNDdhMTZiMzkzYmUxOGQzYzNiOGYyMTE1NWMzZGNlIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMTMtMDMtMTcgIEFsYW4gQ3V0dGVyICA8YWxhbmN1dHRlckBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgU2ltcGxpZnkgcGFyc2VkIENTUyBDYWxjIGV4cHJlc3Npb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTExNDkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBiYXNpYyBzaW1w
bGlmaWNhdGlvbiBvZiBudW1iZXJzIGFuZCB1bml0cyBpbiBDU1MgY2FsYyBleHByZXNzaW9ucyBh
dCBwYXJzZSB0aW1lLgorCisgICAgICAgICogY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dDoK
KyAgICAgICAgKiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTMt
MDMtMTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBB
WDogQ3Jhc2ggd2hlbiByZW1vdmluZyBhcmlhLW1lbnUgaXRlbSBmcm9tIERPTQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2NzczMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQKaW5kZXggZDVmNTQzYzIzYTI5NTJlYjExMzIx
NGJjNmE4OTIzMzhlYjQ2ZjdkNS4uZTk0ZDI5MzMwNWQ4ODdhMjUwM2VlNjVlYzFkZGJhMDkwNzJi
ZTRkNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0CkBAIC0xLDE1
ICsxLDE1IEBACiBUaGlzIHRlc3RzIGNhbGMoKSBhbmQgdGhlIENTU09NCiAKIDEwcHggPT4gY2Fs
YygxMHB4KQotMTBweCArIDE1cHggPT4gY2FsYygxMHB4ICsgMTVweCkKKzEwcHggKyAxNXB4ID0+
IGNhbGMoMjVweCkKIDEwMCUgPT4gY2FsYygxMDAlKQogMTAwJSAtIDEwcHggPT4gY2FsYygxMDAl
IC0gMTBweCkKLTEwcHggKyAxMHB4ICogNSA9PiBjYWxjKDEwcHggKyAoMTBweCAqIDUpKQorMTBw
eCArIDEwcHggKiA1ID0+IGNhbGMoNjBweCkKIDVweCArIDJlbSArIDZpbiA9PiBjYWxjKCg1cHgg
KyAyZW0pICsgNmluKQotMTAwJSAtIDEwcHggLyAyID0+IGNhbGMoMTAwJSAtICgxMHB4IC8gMikp
CisxMDAlIC0gMTBweCAvIDIgPT4gY2FsYygxMDAlIC0gNXB4KQogMXB4ICsgMmVtIC0gM3JlbSAr
IDRpbiA9PiBjYWxjKCgoMXB4ICsgMmVtKSAtIDNyZW0pICsgNGluKQotMTAwcHggKiAoMSArIDIg
KiAzIC0gNCAvIDUpID0+IGNhbGMoMTAwcHggKiAoKDEgKyAoMiAqIDMpKSAtICg0IC8gNSkpKQot
KDEwMHB4KSArIDIwMHB4ID0+IGNhbGMoMTAwcHggKyAyMDBweCkKKzEwMHB4ICogKDEgKyAyICog
MyAtIDQgLyA1KSA9PiBjYWxjKDYyMHB4KQorKDEwMHB4KSArIDIwMHB4ID0+IGNhbGMoMzAwcHgp
CiAoKCgoKCgoKCgoMTAwcHgpKSkpKSkpKSkpID0+IGNhbGMoMTAwcHgpCiBmbGltc3RpeCA9PiBj
YWxjKDEwMHB4KQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmlj
YXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9u
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTA2NDQ1Zjg4MGU4MjQxOTM2MThjNjEzYzgwNTQw
MmY0ZDQxYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBs
aWZpY2F0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUaGlzIHRlc3RzIHBhcnNl
IHRpbWUgc2ltcGxpZmljYXRpb24gaW4gY2FsYygpCisKKzEwMHB4ICogKDI1ICsgNSkgPT4gY2Fs
YygzMDAwcHgpCisxMDBlbSAqICgyNSAtIDUpID0+IGNhbGMoMjAwMGVtKQorMTAwZXggKiAoMiAq
IDUgLSA1KSA9PiBjYWxjKDUwMGV4KQorMTAwY20gKiAoNSAtIDQgLyA1KSA9PiBjYWxjKDQyMGNt
KQorMTAwbW0gKiAoMi40ICogNSAtIDggLyA1KSA9PiBjYWxjKDEwNDBtbSkKKzEwMGluICogKDYg
KiAoNSAtIDQpIC8gOCkgPT4gY2FsYyg3NWluKQorMXB4ICogKDMgKyAxLyg3ICsgMS8oMTUgKyAx
LygxICsgMS8oMjkyICsgMS8oMSArIDEvKDEgKyAxLygxICsgMSkpKSkpKSkpID0+IGNhbGMoMy4x
NDE1OTI2NTM1NTgzNTc0cHgpCisxMDBwYyAqIDIwICsgMTAwcmVtICogMTAgLSAxMDBjaCAqIDUg
KyAxMDBwYyA9PiBjYWxjKCgoMjAwMHBjICsgMTAwMHJlbSkgLSA1MDBjaCkgKyAxMDBwYykKKygo
MTAwcHggKyAyMCAqIDVweCkgKiAxMCAtIDUgKiAoMTBlbSAqIDUgKyAxMGVtKSkgKiAyID0+IGNh
bGMoKDIwMDBweCAtIDMwMGVtKSAqIDIpCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMv
Y2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZp
Y2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIyYTQ3NzgwMjljZTA5YWIwZWIwZjFmYmIyYzYxNjMy
ZDE5MzBmMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlm
aWNhdGlvbi5odG1sCkBAIC0wLDAgKzEsMjcgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGRpdiBpZD0i
ZHVtbXkiPjwvZGl2PgorPGRpdiBpZD0icmVzdWx0cyI+VGhpcyB0ZXN0cyBwYXJzZSB0aW1lIHNp
bXBsaWZpY2F0aW9uIGluIGNhbGMoKTxicj48YnI+PC9kaXY+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKwordmFy
IHRlc3RzID0gWworICAgICIxMDBweCAqICgyNSArIDUpIiwKKyAgICAiMTAwZW0gKiAoMjUgLSA1
KSIsCisgICAgIjEwMGV4ICogKDIgKiA1IC0gNSkiLAorICAgICIxMDBjbSAqICg1IC0gNCAvIDUp
IiwKKyAgICAiMTAwbW0gKiAoMi40ICogNSAtIDggLyA1KSIsCisgICAgIjEwMGluICogKDYgKiAo
NSAtIDQpIC8gOCkiLAorICAgICIxcHggKiAoMyArIDEvKDcgKyAxLygxNSArIDEvKDEgKyAxLygy
OTIgKyAxLygxICsgMS8oMSArIDEvKDEgKyAxKSkpKSkpKSkiLAorICAgICIxMDBwYyAqIDIwICsg
MTAwcmVtICogMTAgLSAxMDBjaCAqIDUgKyAxMDBwYyIsCisgICAgIigoMTAwcHggKyAyMCAqIDVw
eCkgKiAxMCAtIDUgKiAoMTBlbSAqIDUgKyAxMGVtKSkgKiAyIiwKK107CisKK3ZhciByZXN1bHRz
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdHMiKTsKK3ZhciBkdW1teSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJkdW1teSIpOworZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5s
ZW5ndGg7ICsraSkgeworICAgIHZhciBleHByZXNzaW9uID0gdGVzdHNbaV07CisgICAgZHVtbXku
c3R5bGUud2lkdGggPSAnY2FsYygnICsgZXhwcmVzc2lvbiArICcpJzsKKyAgICByZXN1bHRzLmlu
bmVySFRNTCArPSBleHByZXNzaW9uICsgIiA9PiAiICsgZHVtbXkuc3R5bGUud2lkdGggKyAiPGJy
PiI7Cit9Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193497</attachid>
            <date>2013-03-18 00:22:49 -0700</date>
            <delta_ts>2013-03-20 23:42:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111149-20130318181840.patch</filename>
            <type>text/plain</type>
            <size>19954</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MDM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJjNTRkODNkYzlmYzdj
ZWY1NjkyYmE2YzIwYzE1YWJmZTUzM2RmZC4uM2QwM2E4OTY0NjM0ZWFhZjViZDc1MzgzY2VkOTRj
NTMyM2RmNDA2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAzLTE4ICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBh
cnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBh
bmQgdW5pdHMgaW4gQ1NTIGNhbGMgZXhwcmVzc2lvbnMgYXQgcGFyc2UgdGltZS4KKworICAgICAg
ICBUZXN0OiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbAorCisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZTo6ZG91YmxlVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpwcmltaXRpdmVUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNJbnRlZ2VyUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzU2ltcGxpZmlhYmxlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
YWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoQ1NTQ2FsY0JpbmFyeU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGVT
aW1wbGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OnBy
aW1pdGl2ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6
Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uOjpwaWNrQnlDYXRlZ29yeSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmlu
YXJ5T3BlcmF0aW9uOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uOjpldmFsdWF0ZU9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZVRlcm0pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlTXVsdGlwbGljYXRpdmVFeHBy
ZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VBZGRpdGl2ZVZhbHVlRXhwcmVzc2lvbik6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuaDoKKyAgICAgICAgKENTU0NhbGNFeHByZXNzaW9uTm9kZSk6CisKIDIwMTMtMDMt
MTcgIFJ1c3NlbGwgTWNDbGVsbGFuICA8cnVzc2VsbC5tY2NsZWxsYW5AZ21haWwuY29tPgogCiAg
ICAgICAgIFNjcmlwdFByb2Nlc3Nvck5vZGUgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgd2hpbGUgc3Rp
bGwgYWN0aXZlIGlmIHVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5jcHAKaW5kZXggMjM5Yzk5ZDJjNGZmMjM4MTM4NmY1MGVkNTkzMGI3ODg0MTZhYTQ1
NC4uMGVkY2IxNzk5MjU2NWQ5YjBjMGQ0ZDU3MjBkOTY1ODA3MDkyZjNjMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcApAQCAtMTQ1LDcgKzE0NSwxNCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRp
dmVWYWx1ZSh2YWx1ZSwgaXNJbnRlZ2VyKSk7CiAgICAgfQotICAgIAorCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGUoZG91YmxlIHZhbHVlLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUsIGJvb2wgaXNJbnRlZ2VyKQorICAgIHsKKyAg
ICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpIHx8IHN0ZDo6aXNpbmYodmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIHR5cGUpLmdldCgpLCBp
c0ludGVnZXIpKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiAhbV92YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKQEAgLTE5NCw5
ICsyMDEsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fY2F0ZWdvcnkpIHsK
ICAgICAgICAgY2FzZSBDYWxjTnVtYmVyOgotICAgICAgICBjYXNlIENhbGNQZXJjZW50OiAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
OworICAgICAgICBjYXNlIENhbGNQZXJjZW50OgogICAgICAgICBjYXNlIENhbGNMZW5ndGg6Cisg
ICAgICAgICAgICByZXR1cm4gbV92YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKICAgICAgICAgY2Fz
ZSBDYWxjUGVyY2VudExlbmd0aDoKICAgICAgICAgY2FzZSBDYWxjUGVyY2VudE51bWJlcjoKICNp
ZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKQEAgLTI0NSw2ICsyNTIsMTEgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBDc3NDYWxjUHJpbWl0aXZlVmFs
dWU7IH0KICAgICAKKyAgICB2aXJ0dWFsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgcHJp
bWl0aXZlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcyhtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOworICAgIH0KKwogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUq
IHZhbHVlLCBib29sIGlzSW50ZWdlcikKICAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUo
dW5pdENhdGVnb3J5KChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT5wcmltaXRp
dmVUeXBlKCkpLCBpc0ludGVnZXIpCkBAIC0yNTYsMTIgKzI2OCwxMyBAQCBwcml2YXRlOgogfTsK
IAogc3RhdGljIGNvbnN0IENhbGN1bGF0aW9uQ2F0ZWdvcnkgYWRkU3VidHJhY3RSZXN1bHRbQ2Fs
Y090aGVyXVtDYWxjT3RoZXJdID0gewotICAgIHsgQ2FsY051bWJlciwgICAgICAgIENhbGNPdGhl
ciwgICAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhl
ciB9LAotICAgIHsgQ2FsY090aGVyLCAgICAgICAgIENhbGNMZW5ndGgsICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoIH0sCi0gICAg
eyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJjZW50LCAgICAg
ICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGggfSwKLSAgICB7IENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjT3RoZXIgfSwKLSAgICB7IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCB9LAotfTsgICAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgIENhbGNOdW1i
ZXIgICAgICAgICBDYWxjTGVuZ3RoICAgICAgICAgQ2FsY1BlcmNlbnQgICAgICAgIENhbGNQZXJj
ZW50TnVtYmVyICBDYWxjUGVyY2VudExlbmd0aAorLyogQ2FsY051bWJlciAqLyAgICAgICAgeyBD
YWxjTnVtYmVyLCAgICAgICAgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBD
YWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCisvKiBDYWxjTGVuZ3RoICovICAgICAgICB7
IENhbGNPdGhlciwgICAgICAgICBDYWxjTGVuZ3RoLCAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgs
IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0aCB9LAorLyogQ2FsY1BlcmNlbnQg
Ki8gICAgICAgeyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJj
ZW50LCAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGggfSwKKy8qIENh
bGNQZXJjZW50TnVtYmVyICovIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciwgICAgICAg
ICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciB9LAorLyog
Q2FsY1BlcmNlbnRMZW5ndGggKi8geyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGgsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGggfSwKK307CiAKIHN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5
KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCiB7CkBAIC0yOTQsMjEgKzMw
NywxMzcgQEAgc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29u
c3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2kKICAgICByZXR1cm4gQ2FsY090aGVyOwog
fQogCitzdGF0aWMgYm9vbCBpc0ludGVnZXJSZXN1bHQoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlKiBsZWZ0U2lkZSwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiByaWdodFNpZGUsIENh
bGNPcGVyYXRvciBvcCkKK3sKKyAgICAvLyBOb3QgdGVzdGluZyBmb3IgYWN0dWFsIGludGVnZXIg
dmFsdWVzLgorICAgIC8vIFBlcmZvcm1zIFczQyBzcGVjJ3MgdHlwZSBjaGVja2luZyBmb3IgY2Fs
YyBpbnRlZ2Vycy4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZhbHVlcy8jY2Fs
Yy10eXBlLWNoZWNraW5nCisgICAgcmV0dXJuIG9wICE9IENhbGNEaXZpZGUgJiYgbGVmdFNpZGUt
PmlzSW50ZWdlcigpICYmIHJpZ2h0U2lkZS0+aXNJbnRlZ2VyKCk7Cit9CisKK3N0YXRpYyBib29s
IGlzU2ltcGxpZmlhYmxlVHlwZShDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19FWFM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NIUzoKKyAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkVNUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFg6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgorICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NTToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfSU46CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BUOgorICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfREVHOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQ6CisgICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQ6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX01TOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TOgorICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19IWjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
S0haOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ESU1FTlNJT046CisgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19WSDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1JTjoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVk1BWDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRFBQWDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBJOgorICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUENNOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjoKKyAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19V
Ukk6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UOgorICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19BVFRSOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DT1VOVEVSOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRUNUOgorICAgIGNh
c2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SR0JDT0xPUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEFJUjoKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RBU0hCT0FSRF9SRUdJT046CisjZW5kaWYKKyAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5JQ09ERV9SQU5HRToKKyAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VSX09QRVJBVE9SOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QQVJTRVJfSU5URUdFUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEFSU0VSX0hFWENPTE9SOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJT
RVJfSURFTlRJRklFUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTjoKKyAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ09VTlRFUl9OQU1FOgorICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19TSEFQRToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUVVBRDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0FMQzoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTlVNQkVSOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lUSF9MRU5HVEg6
CisjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1ZBUklBQkxFX05BTUU6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBjbGFz
cyBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7
CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjQmluYXJ5T3BlcmF0aW9u
PiBjcmVhdGUoUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnRTaWRlLCBQYXNz
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3Ap
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGUoUGFz
c1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnRTaWRlLCBQYXNzUmVmUHRyPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4gcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCiAgICAgewogICAg
ICAgICBBU1NFUlQobGVmdFNpZGUtPmNhdGVnb3J5KCkgIT0gQ2FsY090aGVyICYmIHJpZ2h0U2lk
ZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjT3RoZXIpOwotICAgICAgICAKLSAgICAgICAgQ2FsY3VsYXRp
b25DYXRlZ29yeSBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJp
Z2h0U2lkZSwgb3ApOwogCisgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbmV3Q2F0ZWdvcnkg
PSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUsIG9wKTsKICAgICAgICAg
aWYgKG5ld0NhdGVnb3J5ID09IENhbGNPdGhlcikKICAgICAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbihsZWZ0U2lk
ZSwgcmlnaHRTaWRlLCBvcCwgbmV3Q2F0ZWdvcnkpKTsKICAgICB9Ci0gICAgCisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZVNpbXBsaWZpZWQoUGFz
c1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnRTaWRlLCBQYXNzUmVmUHRyPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4gcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCisgICAgeworICAg
ICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGxlZnRDYXRlZ29yeSA9IGxlZnRTaWRlLT5jYXRlZ29y
eSgpOworICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IHJpZ2h0Q2F0ZWdvcnkgPSByaWdodFNp
ZGUtPmNhdGVnb3J5KCk7CisgICAgICAgIEFTU0VSVChsZWZ0Q2F0ZWdvcnkgIT0gQ2FsY090aGVy
ICYmIHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY090aGVyKTsKKworICAgICAgICBib29sIGlzSW50ZWdl
ciA9IGlzSW50ZWdlclJlc3VsdChsZWZ0U2lkZS5nZXQoKSwgcmlnaHRTaWRlLmdldCgpLCBvcCk7
CisKKyAgICAgICAgLy8gU2ltcGxpZnkgbnVtYmVycy4KKyAgICAgICAgaWYgKGxlZnRDYXRlZ29y
eSA9PSBDYWxjTnVtYmVyICYmIHJpZ2h0Q2F0ZWdvcnkgPT0gQ2FsY051bWJlcikgeworICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBldmFsdWF0aW9uVHlwZSA9IGlzSW50
ZWdlciA/IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0lOVEVHRVIgOiBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUjsKKyAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRlLT5kb3VibGVWYWx1ZSgpLCBy
aWdodFNpZGUtPmRvdWJsZVZhbHVlKCksIG9wKSwgZXZhbHVhdGlvblR5cGUsIGlzSW50ZWdlcik7
CisgICAgICAgIH0KKworICAgICAgICAvLyBTaW1wbGlmeSBhZGRpdGlvbiBhbmQgc3VidHJhY3Rp
b24gYmV0d2VlbiBzYW1lIHR5cGVzLgorICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzIGxlZnRUeXBlID0gbGVmdFNpZGUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgaWYgKGxl
ZnRUeXBlID09IHJpZ2h0U2lkZS0+cHJpbWl0aXZlVHlwZSgpICYmIGlzU2ltcGxpZmlhYmxlVHlw
ZShsZWZ0VHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChvcCA9PSBDYWxjQWRkIHx8IG9wID09IENh
bGNTdWJ0cmFjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUoZXZhbHVhdGVPcGVyYXRvcihsZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSwgcmlnaHRT
aWRlLT5kb3VibGVWYWx1ZSgpLCBvcCksIGxlZnRUeXBlLCBpc0ludGVnZXIpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gU2ltcGxpZnkgbXVsdGlwbHlpbmcgb3IgZGl2aWRpbmcgYnkgYSBudW1i
ZXIgZm9yIHNpbXBsaWZpYWJsZSB0eXBlcy4KKyAgICAgICAgaWYgKG9wICE9IENhbGNNdWx0aXBs
eSAmJiBvcCAhPSBDYWxjRGl2aWRlKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShsZWZ0U2lk
ZSwgcmlnaHRTaWRlLCBvcCk7CisKKyAgICAgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBudW1i
ZXJTaWRlID0gcGlja0J5Q2F0ZWdvcnkobGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSwg
Q2FsY051bWJlcik7CisgICAgICAgIGlmICghbnVtYmVyU2lkZSkKKyAgICAgICAgICAgIHJldHVy
biBjcmVhdGUobGVmdFNpZGUsIHJpZ2h0U2lkZSwgb3ApOworICAgICAgICBpZiAobnVtYmVyU2lk
ZSA9PSBsZWZ0U2lkZSAmJiBvcCA9PSBDYWxjRGl2aWRlKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZSogb3RoZXJTaWRlID0gbGVmdFNpZGUgPT0g
bnVtYmVyU2lkZSA/IHJpZ2h0U2lkZS5nZXQoKSA6IGxlZnRTaWRlLmdldCgpOworCisgICAgICAg
IGRvdWJsZSBudW1iZXIgPSBudW1iZXJTaWRlLT5kb3VibGVWYWx1ZSgpOworICAgICAgICBpZiAo
c3RkOjppc25hbihudW1iZXIpIHx8IHN0ZDo6aXNpbmYobnVtYmVyKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICBpZiAob3AgPT0gQ2FsY0RpdmlkZSAmJiAhbnVtYmVyKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBv
dGhlclR5cGUgPSBvdGhlclNpZGUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgaWYgKGlzU2lt
cGxpZmlhYmxlVHlwZShvdGhlclR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3Iob3RoZXJTaWRlLT5kb3VibGVWYWx1
ZSgpLCBudW1iZXIsIG9wKSwgb3RoZXJUeXBlLCBpc0ludGVnZXIpOworCisgICAgICAgIHJldHVy
biBjcmVhdGUobGVmdFNpZGUsIHJpZ2h0U2lkZSwgb3ApOworICAgIH0KKwogICAgIHZpcnR1YWwg
Ym9vbCBpc1plcm8oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFkb3VibGVWYWx1ZSgp
OwpAQCAtMzg4LDE4ICs1MTcsNjYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBDc3NDYWxjQmluYXJ5T3BlcmF0aW9uOyB9CiAKKyAgICB2aXJ0dWFs
IENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgcHJpbWl0aXZlVHlwZSgpIGNvbnN0CisgICAg
eworICAgICAgICBzd2l0Y2ggKG1fY2F0ZWdvcnkpIHsKKyAgICAgICAgY2FzZSBDYWxjTnVtYmVy
OgorICAgICAgICBjYXNlIENhbGNMZW5ndGg6CisgICAgICAgIGNhc2UgQ2FsY1BlcmNlbnQ6IHsK
KyAgICAgICAgICAgIGlmIChtX2xlZnRTaWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIgJiYg
bV9yaWdodFNpZGUtPmNhdGVnb3J5KCkgPT0gQ2FsY051bWJlcikgeworICAgICAgICAgICAgICAg
IGlmIChtX2lzSW50ZWdlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEFSU0VSX0lOVEVHRVI7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KG1fbGVmdFNpZGUtPmNhdGVnb3J5KCkgPT0gQ2FsY051bWJlcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9yaWdodFNpZGUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChtX3Jp
Z2h0U2lkZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjTnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVy
biBtX2xlZnRTaWRlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzIGxlZnRUeXBlID0gbV9sZWZ0U2lkZS0+cHJpbWl0aXZlVHlwZSgpOwor
ICAgICAgICAgICAgaWYgKGxlZnRUeXBlID09IG1fcmlnaHRTaWRlLT5wcmltaXRpdmVUeXBlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnRUeXBlOworICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKKyAgICAgICAgfQorI2lmIEVOQUJMRShDU1Nf
VkFSSUFCTEVTKQorICAgICAgICBjYXNlIENhbGNWYXJpYWJsZToKKyAgICAgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZBUklBQkxFX05BTUU7CisjZW5kaWYKKyAgICAgICAg
Y2FzZSBDYWxjUGVyY2VudExlbmd0aDoKKyAgICAgICAgY2FzZSBDYWxjUGVyY2VudE51bWJlcjoK
KyAgICAgICAgY2FzZSBDYWxjT3RoZXI6CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19VTktOT1dOOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOworICAg
IH0KKworCiBwcml2YXRlOgogICAgIENTU0NhbGNCaW5hcnlPcGVyYXRpb24oUGFzc1JlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IGxlZnRTaWRlLCBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3AsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
Y2F0ZWdvcnkpCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVnb3J5LCBsZWZ0
U2lkZS0+aXNJbnRlZ2VyKCkgJiYgcmlnaHRTaWRlLT5pc0ludGVnZXIoKSkKKyAgICAgICAgOiBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnksIGlzSW50ZWdlclJlc3VsdChsZWZ0U2lkZS5n
ZXQoKSwgcmlnaHRTaWRlLmdldCgpLCBvcCkpCiAgICAgICAgICwgbV9sZWZ0U2lkZShsZWZ0U2lk
ZSkKICAgICAgICAgLCBtX3JpZ2h0U2lkZShyaWdodFNpZGUpCiAgICAgICAgICwgbV9vcGVyYXRv
cihvcCkKICAgICB7CiAgICAgfQotICAgIAotICAgIGRvdWJsZSBldmFsdWF0ZShkb3VibGUgbGVm
dFZhbHVlLCBkb3VibGUgcmlnaHRWYWx1ZSkgY29uc3QKKworICAgIHN0YXRpYyBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUqIHBpY2tCeUNhdGVnb3J5KENTU0NhbGNFeHByZXNzaW9uTm9kZSogZmlyc3RO
b2RlLCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIHNlY29uZE5vZGUsIENhbGN1bGF0aW9uQ2F0ZWdv
cnkgY2F0ZWdvcnkpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG1fb3BlcmF0b3IpIHsKKyAgICAg
ICAgaWYgKGZpcnN0Tm9kZS0+Y2F0ZWdvcnkoKSA9PSBjYXRlZ29yeSkKKyAgICAgICAgICAgIHJl
dHVybiBmaXJzdE5vZGU7CisgICAgICAgIGlmIChzZWNvbmROb2RlLT5jYXRlZ29yeSgpID09IGNh
dGVnb3J5KQorICAgICAgICAgICAgcmV0dXJuIHNlY29uZE5vZGU7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGRvdWJsZSBldmFsdWF0ZShkb3VibGUgbGVmdFNpZGUsIGRvdWJsZSBy
aWdodFNpZGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZXZhbHVhdGVPcGVyYXRvcihs
ZWZ0U2lkZSwgcmlnaHRTaWRlLCBtX29wZXJhdG9yKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91
YmxlIGV2YWx1YXRlT3BlcmF0b3IoZG91YmxlIGxlZnRWYWx1ZSwgZG91YmxlIHJpZ2h0VmFsdWUs
IENhbGNPcGVyYXRvciBvcCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAg
Y2FzZSBDYWxjQWRkOgogICAgICAgICAgICAgcmV0dXJuIGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWU7
CiAgICAgICAgIGNhc2UgQ2FsY1N1YnRyYWN0OgpAQCAtNDEzLDcgKzU5MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAgICAgY29uc3Qg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9sZWZ0U2lkZTsKICAgICBjb25zdCBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX3JpZ2h0U2lkZTsKICAgICBjb25zdCBDYWxjT3Bl
cmF0b3IgbV9vcGVyYXRvcjsKQEAgLTQ3OSw3ICs2NTYsNyBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleCgmZGVwdGgsICppbmRleCwgdG9rZW5zKSAhPSBP
SykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgCi0gICAgICAgIAorCiAgICAgICAgIGlm
IChvcGVyYXRvclZhbHVlKHRva2VucywgKmluZGV4KSA9PSAnKCcpIHsKICAgICAgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRJbmRleCA9ICppbmRleCArIDE7CiAgICAgICAgICAgICBpZiAoIXBhcnNl
VmFsdWVFeHByZXNzaW9uKHRva2VucywgZGVwdGgsICZjdXJyZW50SW5kZXgsIHJlc3VsdCkpCkBA
IC01MTIsNyArNjg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZVRl
cm0odG9rZW5zLCBkZXB0aCwgaW5kZXgsICZyaHMpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRp
b246OmNyZWF0ZShyZXN1bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVy
YXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBD
U1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGVTaW1wbGlmaWVkKHJlc3VsdC0+dmFsdWUsIHJo
cy52YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNoYXJhY3RlcikpOwog
ICAgICAgICAgICAgaWYgKCFyZXN1bHQtPnZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtNTM5LDcgKzcxNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAoIXBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24odG9rZW5zLCBkZXB0aCwg
aW5kZXgsICZyaHMpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAg
ICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZShyZXN1bHQt
PnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFy
YWN0ZXIpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0
aW9uOjpjcmVhdGVTaW1wbGlmaWVkKHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwgc3RhdGljX2Nh
c3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNoYXJhY3RlcikpOwogICAgICAgICAgICAgaWYgKCFy
ZXN1bHQtPnZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKaW5kZXggNTY5ZGJkZWEwYjBm
MmIzYjg5OGFlN2E0YzcyMmYwYjU2NGJhZGY4NC4uMzFkYzYwYjVlOTQwM2U1MTEyNWM2Yjk5ZDhl
Y2MwYzZkMWQyNjBhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5o
CkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIENTU0NhbGN1bGF0aW9uVmFsdWVfaAogCiAjaW5j
bHVkZSAiQ1NTUGFyc2VyVmFsdWVzLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZS5oIgogI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtODAsNiArODEsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CiAKICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9jYXRlZ29yeTsgfSAgICAKKyAgICB2aXJ0dWFs
IENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgcHJpbWl0aXZlVHlwZSgpIGNvbnN0ID0gMDsK
ICAgICBib29sIGlzSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1faXNJbnRlZ2VyOyB9CiAgICAg
CiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzE5ZmU4ZTU1ZWFlNmQwOTY4M2YwNDQwMWI5OTNhMmE1NjZl
NWNmNC4uMmY2YjgxM2U2MTI3N2QwODExZWQ3OWM3MjM5NzI2ZGRhZjcwYmQwYyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE2IEBACisyMDEzLTAzLTE4ICBBbGFuIEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBhcnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFz
aWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBhbmQgdW5pdHMgaW4gQ1NTIGNhbGMgZXhwcmVz
c2lvbnMgYXQgcGFyc2UgdGltZS4KKworICAgICAgICAqIGNzczMvY2FsYy9jc3NvbS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWw6IEFkZGVkLgor
CiAyMDEzLTAzLTE3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIE1hcmsgc29tZSBtb3JlIHRlc3RzIGFzIGZsYWtleSwgb3IgYXNzZXJ0aW5nIGluIGRl
YnVnLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQKaW5kZXggZDVmNTQz
YzIzYTI5NTJlYjExMzIxNGJjNmE4OTIzMzhlYjQ2ZjdkNS4uZTk0ZDI5MzMwNWQ4ODdhMjUwM2Vl
NjVlYzFkZGJhMDkwNzJiZTRkNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nz
c29tLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0
ZWQudHh0CkBAIC0xLDE1ICsxLDE1IEBACiBUaGlzIHRlc3RzIGNhbGMoKSBhbmQgdGhlIENTU09N
CiAKIDEwcHggPT4gY2FsYygxMHB4KQotMTBweCArIDE1cHggPT4gY2FsYygxMHB4ICsgMTVweCkK
KzEwcHggKyAxNXB4ID0+IGNhbGMoMjVweCkKIDEwMCUgPT4gY2FsYygxMDAlKQogMTAwJSAtIDEw
cHggPT4gY2FsYygxMDAlIC0gMTBweCkKLTEwcHggKyAxMHB4ICogNSA9PiBjYWxjKDEwcHggKyAo
MTBweCAqIDUpKQorMTBweCArIDEwcHggKiA1ID0+IGNhbGMoNjBweCkKIDVweCArIDJlbSArIDZp
biA9PiBjYWxjKCg1cHggKyAyZW0pICsgNmluKQotMTAwJSAtIDEwcHggLyAyID0+IGNhbGMoMTAw
JSAtICgxMHB4IC8gMikpCisxMDAlIC0gMTBweCAvIDIgPT4gY2FsYygxMDAlIC0gNXB4KQogMXB4
ICsgMmVtIC0gM3JlbSArIDRpbiA9PiBjYWxjKCgoMXB4ICsgMmVtKSAtIDNyZW0pICsgNGluKQot
MTAwcHggKiAoMSArIDIgKiAzIC0gNCAvIDUpID0+IGNhbGMoMTAwcHggKiAoKDEgKyAoMiAqIDMp
KSAtICg0IC8gNSkpKQotKDEwMHB4KSArIDIwMHB4ID0+IGNhbGMoMTAwcHggKyAyMDBweCkKKzEw
MHB4ICogKDEgKyAyICogMyAtIDQgLyA1KSA9PiBjYWxjKDYyMHB4KQorKDEwMHB4KSArIDIwMHB4
ID0+IGNhbGMoMzAwcHgpCiAoKCgoKCgoKCgoMTAwcHgpKSkpKSkpKSkpID0+IGNhbGMoMTAwcHgp
CiBmbGltc3RpeCA9PiBjYWxjKDEwMHB4KQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3Mz
L2NhbGMvc2ltcGxpZmljYXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxj
L3NpbXBsaWZpY2F0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTA2NDQ1Zjg4MGU4MjQx
OTM2MThjNjEzYzgwNTQwMmY0ZDQxYjE2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
Y3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitU
aGlzIHRlc3RzIHBhcnNlIHRpbWUgc2ltcGxpZmljYXRpb24gaW4gY2FsYygpCisKKzEwMHB4ICog
KDI1ICsgNSkgPT4gY2FsYygzMDAwcHgpCisxMDBlbSAqICgyNSAtIDUpID0+IGNhbGMoMjAwMGVt
KQorMTAwZXggKiAoMiAqIDUgLSA1KSA9PiBjYWxjKDUwMGV4KQorMTAwY20gKiAoNSAtIDQgLyA1
KSA9PiBjYWxjKDQyMGNtKQorMTAwbW0gKiAoMi40ICogNSAtIDggLyA1KSA9PiBjYWxjKDEwNDBt
bSkKKzEwMGluICogKDYgKiAoNSAtIDQpIC8gOCkgPT4gY2FsYyg3NWluKQorMXB4ICogKDMgKyAx
Lyg3ICsgMS8oMTUgKyAxLygxICsgMS8oMjkyICsgMS8oMSArIDEvKDEgKyAxLygxICsgMSkpKSkp
KSkpID0+IGNhbGMoMy4xNDE1OTI2NTM1NTgzNTc0cHgpCisxMDBwYyAqIDIwICsgMTAwcmVtICog
MTAgLSAxMDBjaCAqIDUgKyAxMDBwYyA9PiBjYWxjKCgoMjAwMHBjICsgMTAwMHJlbSkgLSA1MDBj
aCkgKyAxMDBwYykKKygoMTAwcHggKyAyMCAqIDVweCkgKiAxMCAtIDUgKiAoMTBlbSAqIDUgKyAx
MGVtKSkgKiAyID0+IGNhbGMoKDIwMDBweCAtIDMwMGVtKSAqIDIpCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvY3Nz
My9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGIyYTQ3NzgwMjljZTA5YWIw
ZWIwZjFmYmIyYzYxNjMyZDE5MzBmMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Nz
czMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sCkBAIC0wLDAgKzEsMjcgQEAKKzwhRE9DVFlQRSBI
VE1MPgorPGRpdiBpZD0iZHVtbXkiPjwvZGl2PgorPGRpdiBpZD0icmVzdWx0cyI+VGhpcyB0ZXN0
cyBwYXJzZSB0aW1lIHNpbXBsaWZpY2F0aW9uIGluIGNhbGMoKTxicj48YnI+PC9kaXY+Cis8c2Ny
aXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHdpbmRvdy50ZXN0UnVubmVyLmR1bXBB
c1RleHQoKTsKKwordmFyIHRlc3RzID0gWworICAgICIxMDBweCAqICgyNSArIDUpIiwKKyAgICAi
MTAwZW0gKiAoMjUgLSA1KSIsCisgICAgIjEwMGV4ICogKDIgKiA1IC0gNSkiLAorICAgICIxMDBj
bSAqICg1IC0gNCAvIDUpIiwKKyAgICAiMTAwbW0gKiAoMi40ICogNSAtIDggLyA1KSIsCisgICAg
IjEwMGluICogKDYgKiAoNSAtIDQpIC8gOCkiLAorICAgICIxcHggKiAoMyArIDEvKDcgKyAxLygx
NSArIDEvKDEgKyAxLygyOTIgKyAxLygxICsgMS8oMSArIDEvKDEgKyAxKSkpKSkpKSkiLAorICAg
ICIxMDBwYyAqIDIwICsgMTAwcmVtICogMTAgLSAxMDBjaCAqIDUgKyAxMDBwYyIsCisgICAgIigo
MTAwcHggKyAyMCAqIDVweCkgKiAxMCAtIDUgKiAoMTBlbSAqIDUgKyAxMGVtKSkgKiAyIiwKK107
CisKK3ZhciByZXN1bHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdHMiKTsKK3Zh
ciBkdW1teSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkdW1teSIpOworZm9yICh2YXIgaSA9
IDA7IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgeworICAgIHZhciBleHByZXNzaW9uID0gdGVzdHNb
aV07CisgICAgZHVtbXkuc3R5bGUud2lkdGggPSAnY2FsYygnICsgZXhwcmVzc2lvbiArICcpJzsK
KyAgICByZXN1bHRzLmlubmVySFRNTCArPSBleHByZXNzaW9uICsgIiA9PiAiICsgZHVtbXkuc3R5
bGUud2lkdGggKyAiPGJyPiI7Cit9Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>194192</attachid>
            <date>2013-03-20 23:42:55 -0700</date>
            <delta_ts>2013-03-26 21:18:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111149-20130321173843.patch</filename>
            <type>text/plain</type>
            <size>20075</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2NDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmVmMmNlMTA1YWJlMmNl
ZDc2ZTRiYTE1MTBmNGEwZTlmYmEzN2JiNy4uNWM2OWZkMWU0Yzk4OTY3MDIwYWJhOTgzOWI5ZGUx
MDI4MTU3NzFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAzLTIwICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBh
cnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBh
bmQgdW5pdHMgaW4gQ1NTIGNhbGMgZXhwcmVzc2lvbnMgYXQgcGFyc2UgdGltZS4KKworICAgICAg
ICBUZXN0OiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbAorCisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZTo6ZG91YmxlVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpwcmltaXRpdmVUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNJbnRlZ2VyUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmlzU2ltcGxpZmlhYmxlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
YWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoQ1NTQ2FsY0JpbmFyeU9wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGVT
aW1wbGlmaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OnBy
aW1pdGl2ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6
Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5
T3BlcmF0aW9uOjpnZXROdW1iZXJTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5h
cnlPcGVyYXRpb246OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlP
cGVyYXRpb246OmV2YWx1YXRlT3BlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlVGVybSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJl
c3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpw
YXJzZUFkZGl0aXZlVmFsdWVFeHByZXNzaW9uKToKKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oOgorICAgICAgICAoQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKToKKwogMjAxMy0wMy0y
MCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0NjQxOS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcAppbmRleCAyMzljOTlkMmM0ZmYyMzgxMzg2ZjUwZWQ1OTMwYjc4
ODQxNmFhNDU0Li44ZTRiZGMzMTk2MTU2YjFjNjQ5NjkyNjY4MDQ5NzMwOGMwMTUyMWVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCkBAIC03OCw2ICs3OCw3
MCBAQCBzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSB1bml0Q2F0ZWdvcnkoQ1NTUHJpbWl0aXZl
VmFsdWU6OlVuaXRUeXBlcyB0eXBlKQogICAgIH0KIH0KIAorc3RhdGljIGJvb2wgaGFzRG91Ymxl
VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI6CisgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSOgorICAgIGNhc2UgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19FTVM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VYUzoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ0hTOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19SRU1TOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWDoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ006CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX01NOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTjoKKyAgICBjYXNlIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFQ6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BDOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUc6CisgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1JBRDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
R1JBRDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVM6CisgICAgY2FzZSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1M6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0ha
OgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFo6CisgICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0RJTUVOU0lPTjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVlc6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZIOgorICAgIGNhc2UgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19WTUlOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19WTUFYOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYOgorICAgIGNhc2Ug
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUEk6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0RQQ006CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19VTktOT1dOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkc6
CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSToKKyAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSURFTlQ6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0FU
VFI6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NPVU5URVI6CisgICAgY2FzZSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFQ1Q6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JHQkNPTE9SOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQUlSOgorI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfREFTSEJPQVJEX1JFR0lPTjoKKyNlbmRpZgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19VTklDT0RFX1JBTkdFOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJT
RVJfT1BFUkFUT1I6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9IRVhD
T0xPUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0lERU5USUZJRVI6
CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1RVUk46CisgICAgY2FzZSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0NPVU5URVJfTkFNRToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfU0hBUEU6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1FVQUQ6CisgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NBTEM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0NBTENfUEVSQ0VOVEFHRV9XSVRIX05VTUJFUjoKKyAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTEVOR1RIOgorI2lmIEVOQUJMRShD
U1NfVkFSSUFCTEVTKQorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WQVJJQUJMRV9O
QU1FOgorI2VuZGlmCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIFN0cmluZyBidWls
ZENzc1RleHQoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQogewogICAgIFN0cmluZ0J1aWxkZXIg
cmVzdWx0OwpAQCAtMTQ1LDcgKzIwOSwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZSh2YWx1ZSwgaXNJbnRlZ2VyKSk7
CiAgICAgfQotICAgIAorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlPiBjcmVhdGUoZG91YmxlIHZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5
cGUsIGJvb2wgaXNJbnRlZ2VyKQorICAgIHsKKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUp
IHx8IHN0ZDo6aXNpbmYodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUodmFsdWUsIHR5cGUpLmdldCgpLCBpc0ludGVnZXIpKTsKKyAgICB9CisKICAgICB2
aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAhbV92YWx1
ZS0+Z2V0RG91YmxlVmFsdWUoKTsKQEAgLTE5MiwyMCArMjYzLDEwIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHN3aXRj
aCAobV9jYXRlZ29yeSkgewotICAgICAgICBjYXNlIENhbGNOdW1iZXI6Ci0gICAgICAgIGNhc2Ug
Q2FsY1BlcmNlbnQ6ICAgICAgICAgICAgICAgIAorICAgICAgICBpZiAoaGFzRG91YmxlVmFsdWUo
cHJpbWl0aXZlVHlwZSgpKSkKICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpOwotICAgICAgICBjYXNlIENhbGNMZW5ndGg6Ci0gICAgICAgIGNhc2UgQ2FsY1BlcmNl
bnRMZW5ndGg6Ci0gICAgICAgIGNhc2UgQ2FsY1BlcmNlbnROdW1iZXI6Ci0jaWYgRU5BQkxFKENT
U19WQVJJQUJMRVMpCi0gICAgICAgIGNhc2UgQ2FsY1ZhcmlhYmxlOgotI2VuZGlmCi0gICAgICAg
IGNhc2UgQ2FsY090aGVyOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQorCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCkBAIC0yNDUsNiArMzA2LDExIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQ3NzQ2FsY1By
aW1pdGl2ZVZhbHVlOyB9CiAgICAgCisgICAgdmlydHVhbCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzIHByaW1pdGl2ZVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMobV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKTsKKyAgICB9
CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKENTU1ByaW1p
dGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBpc0ludGVnZXIpCiAgICAgICAgIDogQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlKHVuaXRDYXRlZ29yeSgoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1
ZS0+cHJpbWl0aXZlVHlwZSgpKSwgaXNJbnRlZ2VyKQpAQCAtMjU2LDEyICszMjIsMTMgQEAgcHJp
dmF0ZToKIH07CiAKIHN0YXRpYyBjb25zdCBDYWxjdWxhdGlvbkNhdGVnb3J5IGFkZFN1YnRyYWN0
UmVzdWx0W0NhbGNPdGhlcl1bQ2FsY090aGVyXSA9IHsKLSAgICB7IENhbGNOdW1iZXIsICAgICAg
ICBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TnVtYmVy
LCBDYWxjT3RoZXIgfSwKLSAgICB7IENhbGNPdGhlciwgICAgICAgICBDYWxjTGVuZ3RoLCAgICAg
ICAgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0
aCB9LAotICAgIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjUGVy
Y2VudCwgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3RoIH0sCi0gICAg
eyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVy
LCBDYWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCi0gICAgeyBDYWxjT3RoZXIsICAgICAg
ICAgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAg
ICAgQ2FsY1BlcmNlbnRMZW5ndGggfSwKLX07ICAgIAorLy8gICAgICAgICAgICAgICAgICAgICAg
ICBDYWxjTnVtYmVyICAgICAgICAgQ2FsY0xlbmd0aCAgICAgICAgIENhbGNQZXJjZW50ICAgICAg
ICBDYWxjUGVyY2VudE51bWJlciAgQ2FsY1BlcmNlbnRMZW5ndGgKKy8qIENhbGNOdW1iZXIgKi8g
ICAgICAgIHsgQ2FsY051bWJlciwgICAgICAgIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2Vu
dE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciB9LAorLyogQ2FsY0xlbmd0aCAq
LyAgICAgICAgeyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY0xlbmd0aCwgICAgICAgIENhbGNQZXJj
ZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGggfSwKKy8qIENh
bGNQZXJjZW50ICovICAgICAgIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3Ro
LCBDYWxjUGVyY2VudCwgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TGVuZ3Ro
IH0sCisvKiBDYWxjUGVyY2VudE51bWJlciAqLyB7IENhbGNQZXJjZW50TnVtYmVyLCBDYWxjT3Ro
ZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJjZW50TnVtYmVyLCBDYWxjT3Ro
ZXIgfSwKKy8qIENhbGNQZXJjZW50TGVuZ3RoICovIHsgQ2FsY090aGVyLCAgICAgICAgIENhbGNQ
ZXJjZW50TGVuZ3RoLCBDYWxjUGVyY2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQ
ZXJjZW50TGVuZ3RoIH0sCit9OwogCiBzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1p
bmVDYXRlZ29yeShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBjb25zdCBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQogewpAQCAt
Mjk0LDIxICszNjEsNzEgQEAgc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0
ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2kKICAgICByZXR1cm4gQ2Fs
Y090aGVyOwogfQogCitzdGF0aWMgYm9vbCBpc0ludGVnZXJSZXN1bHQoY29uc3QgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlKiBsZWZ0U2lkZSwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiByaWdo
dFNpZGUsIENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICAvLyBOb3QgdGVzdGluZyBmb3IgYWN0dWFs
IGludGVnZXIgdmFsdWVzLgorICAgIC8vIFBlcmZvcm1zIFczQyBzcGVjJ3MgdHlwZSBjaGVja2lu
ZyBmb3IgY2FsYyBpbnRlZ2Vycy4KKyAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXZh
bHVlcy8jY2FsYy10eXBlLWNoZWNraW5nCisgICAgcmV0dXJuIG9wICE9IENhbGNEaXZpZGUgJiYg
bGVmdFNpZGUtPmlzSW50ZWdlcigpICYmIHJpZ2h0U2lkZS0+aXNJbnRlZ2VyKCk7Cit9CisKIGNs
YXNzIENTU0NhbGNCaW5hcnlPcGVyYXRpb24gOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
IHsKIAogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNCaW5hcnlPcGVyYXRp
b24+IGNyZWF0ZShQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBh
c3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBv
cCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZShQ
YXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChsZWZ0U2lkZS0+Y2F0ZWdvcnkoKSAhPSBDYWxjT3RoZXIgJiYgcmlnaHRT
aWRlLT5jYXRlZ29yeSgpICE9IENhbGNPdGhlcik7Ci0gICAgICAgIAotICAgICAgICBDYWxjdWxh
dGlvbkNhdGVnb3J5IG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkoKmxlZnRTaWRlLCAq
cmlnaHRTaWRlLCBvcCk7CiAKKyAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBuZXdDYXRlZ29y
eSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSwgb3ApOwogICAgICAg
ICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY090aGVyKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKGxlZnRT
aWRlLCByaWdodFNpZGUsIG9wLCBuZXdDYXRlZ29yeSkpOwogICAgIH0KLSAgICAKKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlU2ltcGxpZmllZChQ
YXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNpZGUsIFBhc3NSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKKyAgICB7Cisg
ICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbGVmdENhdGVnb3J5ID0gbGVmdFNpZGUtPmNhdGVn
b3J5KCk7CisgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgcmlnaHRDYXRlZ29yeSA9IHJpZ2h0
U2lkZS0+Y2F0ZWdvcnkoKTsKKyAgICAgICAgQVNTRVJUKGxlZnRDYXRlZ29yeSAhPSBDYWxjT3Ro
ZXIgJiYgcmlnaHRDYXRlZ29yeSAhPSBDYWxjT3RoZXIpOworCisgICAgICAgIGJvb2wgaXNJbnRl
Z2VyID0gaXNJbnRlZ2VyUmVzdWx0KGxlZnRTaWRlLmdldCgpLCByaWdodFNpZGUuZ2V0KCksIG9w
KTsKKworICAgICAgICAvLyBTaW1wbGlmeSBudW1iZXJzLgorICAgICAgICBpZiAobGVmdENhdGVn
b3J5ID09IENhbGNOdW1iZXIgJiYgcmlnaHRDYXRlZ29yeSA9PSBDYWxjTnVtYmVyKSB7CisgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIGV2YWx1YXRpb25UeXBlID0gaXNJ
bnRlZ2VyID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSU5URUdFUiA6IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3IobGVmdFNpZGUtPmRvdWJsZVZhbHVlKCks
IHJpZ2h0U2lkZS0+ZG91YmxlVmFsdWUoKSwgb3ApLCBldmFsdWF0aW9uVHlwZSwgaXNJbnRlZ2Vy
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNpbXBsaWZ5IGFkZGl0aW9uIGFuZCBzdWJ0cmFj
dGlvbiBiZXR3ZWVuIHNhbWUgdHlwZXMuCisgICAgICAgIGlmIChvcCA9PSBDYWxjQWRkIHx8IG9w
ID09IENhbGNTdWJ0cmFjdCkgeworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcyBsZWZ0VHlwZSA9IGxlZnRTaWRlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICBp
ZiAobGVmdFR5cGUgPT0gcmlnaHRTaWRlLT5wcmltaXRpdmVUeXBlKCkgJiYgaGFzRG91YmxlVmFs
dWUobGVmdFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRlLT5kb3VibGVWYWx1ZSgpLCByaWdo
dFNpZGUtPmRvdWJsZVZhbHVlKCksIG9wKSwgbGVmdFR5cGUsIGlzSW50ZWdlcik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAob3AgPT0gQ2FsY011bHRpcGx5IHx8IG9wID09IENhbGNEaXZpZGUp
IHsKKyAgICAgICAgICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZSogbnVtYmVyU2lkZSA9IGdldE51
bWJlclNpZGUobGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSk7CisgICAgICAgICAgICBp
ZiAoIW51bWJlclNpZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShsZWZ0U2lkZSwg
cmlnaHRTaWRlLCBvcCk7CisgICAgICAgICAgICBpZiAobnVtYmVyU2lkZSA9PSBsZWZ0U2lkZSAm
JiBvcCA9PSBDYWxjRGl2aWRlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBvdGhlclNpZGUgPSBsZWZ0U2lkZSA9PSBudW1iZXJT
aWRlID8gcmlnaHRTaWRlLmdldCgpIDogbGVmdFNpZGUuZ2V0KCk7CisKKyAgICAgICAgICAgIGRv
dWJsZSBudW1iZXIgPSBudW1iZXJTaWRlLT5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgaWYg
KHN0ZDo6aXNuYW4obnVtYmVyKSB8fCBzdGQ6OmlzaW5mKG51bWJlcikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAob3AgPT0gQ2FsY0RpdmlkZSAmJiAhbnVtYmVy
KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzIG90aGVyVHlwZSA9IG90aGVyU2lkZS0+cHJpbWl0aXZlVHlwZSgpOwor
ICAgICAgICAgICAgaWYgKGhhc0RvdWJsZVZhbHVlKG90aGVyVHlwZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3Io
b3RoZXJTaWRlLT5kb3VibGVWYWx1ZSgpLCBudW1iZXIsIG9wKSwgb3RoZXJUeXBlLCBpc0ludGVn
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShsZWZ0U2lkZSwgcmlnaHRT
aWRlLCBvcCk7CisgICAgfQorCiAgICAgdmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gIWRvdWJsZVZhbHVlKCk7CkBAIC0zODgsMTggKzUwNSw2NSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIENzc0NhbGNC
aW5hcnlPcGVyYXRpb247IH0KIAorICAgIHZpcnR1YWwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlcyBwcmltaXRpdmVUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9jYXRl
Z29yeSkgeworICAgICAgICBjYXNlIENhbGNOdW1iZXI6CisgICAgICAgICAgICBBU1NFUlQobV9s
ZWZ0U2lkZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjTnVtYmVyICYmIG1fcmlnaHRTaWRlLT5jYXRlZ29y
eSgpID09IENhbGNOdW1iZXIpOworICAgICAgICAgICAgaWYgKG1faXNJbnRlZ2VyKQorICAgICAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSOwor
ICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworICAgICAg
ICBjYXNlIENhbGNMZW5ndGg6CisgICAgICAgIGNhc2UgQ2FsY1BlcmNlbnQ6IHsKKyAgICAgICAg
ICAgIGlmIChtX2xlZnRTaWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fcmlnaHRTaWRlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICBp
ZiAobV9yaWdodFNpZGUtPmNhdGVnb3J5KCkgPT0gQ2FsY051bWJlcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9sZWZ0U2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBsZWZ0VHlwZSA9IG1fbGVmdFNpZGUtPnByaW1pdGl2ZVR5
cGUoKTsKKyAgICAgICAgICAgIGlmIChsZWZ0VHlwZSA9PSBtX3JpZ2h0U2lkZS0+cHJpbWl0aXZl
VHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0VHlwZTsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047CisgICAgICAgIH0KKyNpZiBFTkFC
TEUoQ1NTX1ZBUklBQkxFUykKKyAgICAgICAgY2FzZSBDYWxjVmFyaWFibGU6CisgICAgICAgICAg
ICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WQVJJQUJMRV9OQU1FOworI2VuZGlmCisg
ICAgICAgIGNhc2UgQ2FsY1BlcmNlbnRMZW5ndGg6CisgICAgICAgIGNhc2UgQ2FsY1BlcmNlbnRO
dW1iZXI6CisgICAgICAgIGNhc2UgQ2FsY090aGVyOgorICAgICAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9X
TjsKKyAgICB9CisKKwogcHJpdmF0ZToKICAgICBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKFBhc3NS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wLCBDYWxjdWxhdGlvbkNh
dGVnb3J5IGNhdGVnb3J5KQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29y
eSwgbGVmdFNpZGUtPmlzSW50ZWdlcigpICYmIHJpZ2h0U2lkZS0+aXNJbnRlZ2VyKCkpCisgICAg
ICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVnb3J5LCBpc0ludGVnZXJSZXN1bHQobGVm
dFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSwgb3ApKQogICAgICAgICAsIG1fbGVmdFNpZGUo
bGVmdFNpZGUpCiAgICAgICAgICwgbV9yaWdodFNpZGUocmlnaHRTaWRlKQogICAgICAgICAsIG1f
b3BlcmF0b3Iob3ApCiAgICAgewogICAgIH0KLSAgICAKLSAgICBkb3VibGUgZXZhbHVhdGUoZG91
YmxlIGxlZnRWYWx1ZSwgZG91YmxlIHJpZ2h0VmFsdWUpIGNvbnN0CisKKyAgICBzdGF0aWMgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlKiBnZXROdW1iZXJTaWRlKENTU0NhbGNFeHByZXNzaW9uTm9kZSog
bGVmdFNpZGUsIENTU0NhbGNFeHByZXNzaW9uTm9kZSogcmlnaHRTaWRlKQorICAgIHsKKyAgICAg
ICAgaWYgKGxlZnRTaWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIpCisgICAgICAgICAgICBy
ZXR1cm4gbGVmdFNpZGU7CisgICAgICAgIGlmIChyaWdodFNpZGUtPmNhdGVnb3J5KCkgPT0gQ2Fs
Y051bWJlcikKKyAgICAgICAgICAgIHJldHVybiByaWdodFNpZGU7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGRvdWJsZSBldmFsdWF0ZShkb3VibGUgbGVmdFNpZGUsIGRvdWJsZSBy
aWdodFNpZGUpIGNvbnN0CiAgICAgewotICAgICAgICBzd2l0Y2ggKG1fb3BlcmF0b3IpIHsKKyAg
ICAgICAgcmV0dXJuIGV2YWx1YXRlT3BlcmF0b3IobGVmdFNpZGUsIHJpZ2h0U2lkZSwgbV9vcGVy
YXRvcik7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBldmFsdWF0ZU9wZXJhdG9yKGRvdWJs
ZSBsZWZ0VmFsdWUsIGRvdWJsZSByaWdodFZhbHVlLCBDYWxjT3BlcmF0b3Igb3ApCisgICAgewor
ICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgQ2FsY0FkZDoKICAgICAgICAgICAg
IHJldHVybiBsZWZ0VmFsdWUgKyByaWdodFZhbHVlOwogICAgICAgICBjYXNlIENhbGNTdWJ0cmFj
dDoKQEAgLTQxMyw3ICs1NzcsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KLSAgICAKKwogICAgIGNvbnN0IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+IG1fbGVmdFNpZGU7CiAgICAgY29uc3QgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4g
bV9yaWdodFNpZGU7CiAgICAgY29uc3QgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7CkBAIC00Nzks
NyArNjQzLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmIChjaGVja0RlcHRoQW5kSW5k
ZXgoJmRlcHRoLCAqaW5kZXgsIHRva2VucykgIT0gT0spCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7ICAgIAotICAgICAgICAKKwogICAgICAgICBpZiAob3BlcmF0b3JWYWx1ZSh0b2tlbnMsICpp
bmRleCkgPT0gJygnKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSAqaW5k
ZXggKyAxOwogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlRXhwcmVzc2lvbih0b2tlbnMsIGRl
cHRoLCAmY3VycmVudEluZGV4LCByZXN1bHQpKQpAQCAtNTEyLDcgKzY3Niw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVUZXJtKHRva2VucywgZGVwdGgsIGluZGV4LCAm
cmhzKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJlc3Vs
dC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUocmVzdWx0LT52YWx1ZSwg
cmhzLnZhbHVlLCBzdGF0aWNfY2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7
CisgICAgICAgICAgICByZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3Jl
YXRlU2ltcGxpZmllZChyZXN1bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNP
cGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LT52
YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUzOSw3
ICs3MDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlTXVsdGlwbGlj
YXRpdmVFeHByZXNzaW9uKHRva2VucywgZGVwdGgsIGluZGV4LCAmcmhzKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxj
QmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBzdGF0aWNf
Y2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CisgICAgICAgICAgICByZXN1
bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlU2ltcGxpZmllZChyZXN1
bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JD
aGFyYWN0ZXIpKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LT52YWx1ZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3Vs
YXRpb25WYWx1ZS5oCmluZGV4IDU2OWRiZGVhMGIwZjJiM2I4OThhZTdhNGM3MjJmMGI1NjRiYWRm
ODQuLjMxZGM2MGI1ZTk0MDNlNTExMjVjNmI5OWQ4ZWNjMGM2ZDFkMjYwYTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmlu
ZSBDU1NDYWxjdWxhdGlvblZhbHVlX2gKIAogI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgor
I2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNp
bmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
QEAgLTgwLDYgKzgxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qg
PSAwOwogCiAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJu
IG1fY2F0ZWdvcnk7IH0gICAgCisgICAgdmlydHVhbCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzIHByaW1pdGl2ZVR5cGUoKSBjb25zdCA9IDA7CiAgICAgYm9vbCBpc0ludGVnZXIoKSBjb25z
dCB7IHJldHVybiBtX2lzSW50ZWdlcjsgfQogICAgIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFkOTZi
OGMyOWU2OTBhZGNkNmUyZTU3YWUwMjNiMjJhYTc4YTY0ZDkuLmViMGFjYzViOTQ0YjU3YjU3NzA2
ZjU4NjMzZmZjYTNhMzYxYTdmYTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMy0wMy0yMCAg
QWxhbiBDdXR0ZXIgIDxhbGFuY3V0dGVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBTaW1wbGlm
eSBwYXJzZWQgQ1NTIENhbGMgZXhwcmVzc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTE0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTMtMDMt
MjAgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJv
bWl1bV0gVGVzdCBleHBlY3RhdGlvbnMgdXBkYXRlcywgYW5kIHJlYmFzZWxpbmUgdG8gcGFyYWxs
ZWwgcjE0MzM4OS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0CmluZGV4
IGQ1ZjU0M2MyM2EyOTUyZWIxMTMyMTRiYzZhODkyMzM4ZWI0NmY3ZDUuLmU5NGQyOTMzMDVkODg3
YTI1MDNlZTY1ZWMxZGRiYTA5MDcyYmU0ZDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2NzczMv
Y2FsYy9jc3NvbS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nzc29t
LWV4cGVjdGVkLnR4dApAQCAtMSwxNSArMSwxNSBAQAogVGhpcyB0ZXN0cyBjYWxjKCkgYW5kIHRo
ZSBDU1NPTQogCiAxMHB4ID0+IGNhbGMoMTBweCkKLTEwcHggKyAxNXB4ID0+IGNhbGMoMTBweCAr
IDE1cHgpCisxMHB4ICsgMTVweCA9PiBjYWxjKDI1cHgpCiAxMDAlID0+IGNhbGMoMTAwJSkKIDEw
MCUgLSAxMHB4ID0+IGNhbGMoMTAwJSAtIDEwcHgpCi0xMHB4ICsgMTBweCAqIDUgPT4gY2FsYygx
MHB4ICsgKDEwcHggKiA1KSkKKzEwcHggKyAxMHB4ICogNSA9PiBjYWxjKDYwcHgpCiA1cHggKyAy
ZW0gKyA2aW4gPT4gY2FsYygoNXB4ICsgMmVtKSArIDZpbikKLTEwMCUgLSAxMHB4IC8gMiA9PiBj
YWxjKDEwMCUgLSAoMTBweCAvIDIpKQorMTAwJSAtIDEwcHggLyAyID0+IGNhbGMoMTAwJSAtIDVw
eCkKIDFweCArIDJlbSAtIDNyZW0gKyA0aW4gPT4gY2FsYygoKDFweCArIDJlbSkgLSAzcmVtKSAr
IDRpbikKLTEwMHB4ICogKDEgKyAyICogMyAtIDQgLyA1KSA9PiBjYWxjKDEwMHB4ICogKCgxICsg
KDIgKiAzKSkgLSAoNCAvIDUpKSkKLSgxMDBweCkgKyAyMDBweCA9PiBjYWxjKDEwMHB4ICsgMjAw
cHgpCisxMDBweCAqICgxICsgMiAqIDMgLSA0IC8gNSkgPT4gY2FsYyg2MjBweCkKKygxMDBweCkg
KyAyMDBweCA9PiBjYWxjKDMwMHB4KQogKCgoKCgoKCgoKDEwMHB4KSkpKSkpKSkpKSA9PiBjYWxj
KDEwMHB4KQogZmxpbXN0aXggPT4gY2FsYygxMDBweCkKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Nz
czMvY2FsYy9zaW1wbGlmaWNhdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzEwNjQ0NWY4
ODBlODI0MTkzNjE4YzYxM2M4MDU0MDJmNGQ0MWIxNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
MiBAQAorVGhpcyB0ZXN0cyBwYXJzZSB0aW1lIHNpbXBsaWZpY2F0aW9uIGluIGNhbGMoKQorCisx
MDBweCAqICgyNSArIDUpID0+IGNhbGMoMzAwMHB4KQorMTAwZW0gKiAoMjUgLSA1KSA9PiBjYWxj
KDIwMDBlbSkKKzEwMGV4ICogKDIgKiA1IC0gNSkgPT4gY2FsYyg1MDBleCkKKzEwMGNtICogKDUg
LSA0IC8gNSkgPT4gY2FsYyg0MjBjbSkKKzEwMG1tICogKDIuNCAqIDUgLSA4IC8gNSkgPT4gY2Fs
YygxMDQwbW0pCisxMDBpbiAqICg2ICogKDUgLSA0KSAvIDgpID0+IGNhbGMoNzVpbikKKzFweCAq
ICgzICsgMS8oNyArIDEvKDE1ICsgMS8oMSArIDEvKDI5MiArIDEvKDEgKyAxLygxICsgMS8oMSAr
IDEpKSkpKSkpKSA9PiBjYWxjKDMuMTQxNTkyNjUzNTU4MzU3NHB4KQorMTAwcGMgKiAyMCArIDEw
MHJlbSAqIDEwIC0gMTAwY2ggKiA1ICsgMTAwcGMgPT4gY2FsYygoKDIwMDBwYyArIDEwMDByZW0p
IC0gNTAwY2gpICsgMTAwcGMpCisoKDEwMHB4ICsgMjAgKiA1cHgpICogMTAgLSA1ICogKDEwZW0g
KiA1ICsgMTBlbSkpICogMiA9PiBjYWxjKCgyMDAwcHggLSAzMDBlbSkgKiAyKQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbCBiL0xheW91dFRl
c3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiMmE0Nzc4MDI5
Y2UwOWFiMGViMGYxZmJiMmM2MTYzMmQxOTMwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbApAQCAtMCwwICsxLDI3IEBACis8IURP
Q1RZUEUgSFRNTD4KKzxkaXYgaWQ9ImR1bW15Ij48L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdHMiPlRo
aXMgdGVzdHMgcGFyc2UgdGltZSBzaW1wbGlmaWNhdGlvbiBpbiBjYWxjKCk8YnI+PGJyPjwvZGl2
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB3aW5kb3cudGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CisKK3ZhciB0ZXN0cyA9IFsKKyAgICAiMTAwcHggKiAoMjUgKyA1KSIs
CisgICAgIjEwMGVtICogKDI1IC0gNSkiLAorICAgICIxMDBleCAqICgyICogNSAtIDUpIiwKKyAg
ICAiMTAwY20gKiAoNSAtIDQgLyA1KSIsCisgICAgIjEwMG1tICogKDIuNCAqIDUgLSA4IC8gNSki
LAorICAgICIxMDBpbiAqICg2ICogKDUgLSA0KSAvIDgpIiwKKyAgICAiMXB4ICogKDMgKyAxLyg3
ICsgMS8oMTUgKyAxLygxICsgMS8oMjkyICsgMS8oMSArIDEvKDEgKyAxLygxICsgMSkpKSkpKSkp
IiwKKyAgICAiMTAwcGMgKiAyMCArIDEwMHJlbSAqIDEwIC0gMTAwY2ggKiA1ICsgMTAwcGMiLAor
ICAgICIoKDEwMHB4ICsgMjAgKiA1cHgpICogMTAgLSA1ICogKDEwZW0gKiA1ICsgMTBlbSkpICog
MiIsCitdOworCit2YXIgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRz
Iik7Cit2YXIgZHVtbXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZHVtbXkiKTsKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgZXhwcmVzc2lvbiA9
IHRlc3RzW2ldOworICAgIGR1bW15LnN0eWxlLndpZHRoID0gJ2NhbGMoJyArIGV4cHJlc3Npb24g
KyAnKSc7CisgICAgcmVzdWx0cy5pbm5lckhUTUwgKz0gZXhwcmVzc2lvbiArICIgPT4gIiArIGR1
bW15LnN0eWxlLndpZHRoICsgIjxicj4iOworfQorPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195217</attachid>
            <date>2013-03-26 21:18:16 -0700</date>
            <delta_ts>2013-03-26 21:34:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111149-20130327151358.patch</filename>
            <type>text/plain</type>
            <size>24343</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzYxZDdhZWNkNTg1N2Rm
MDNjY2VkYzQ0NDFkZjZhZDMzNDZjMWE2YS4uNDZhOTI1Y2EwMGY4OTk3MDM0ODhkMzljNzllYTlh
ZmFiNTM0ZWNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAzLTI2ICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBh
cnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBh
bmQgdW5pdHMgaW4gQ1NTIGNhbGMgZXhwcmVzc2lvbnMgYXQgcGFyc2UgdGltZS4KKworICAgICAg
ICBUZXN0OiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbAorCisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzRG91YmxlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDU1NDYWxjUHJpbWl0aXZlVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpkb3VibGVWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OnByaW1pdGl2ZVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNJbnRlZ2VyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNC
aW5hcnlPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChDU1NDYWxjQmluYXJ5T3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZVNpbXBs
aWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6cHJpbWl0
aXZlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpDU1ND
YWxjQmluYXJ5T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVy
YXRpb246OmdldE51bWJlclNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9w
ZXJhdGlvbjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJh
dGlvbjo6ZXZhbHVhdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWVUZXJtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNl
QWRkaXRpdmVWYWx1ZUV4cHJlc3Npb24pOgorICAgICAgICAqIGNzcy9DU1NDYWxjdWxhdGlvblZh
bHVlLmg6CisgICAgICAgIChDU1NDYWxjRXhwcmVzc2lvbk5vZGUpOgorICAgICAgICAqIGNzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1
ZTo6dW5pdENhdGVnb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpj
b252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKENTU1ByaW1pdGl2ZVZhbHVlKToKKwogMjAxMy0w
My0yNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBb
Y2FdIFRlbGwgQ0EgdG8gY2xlYW4gdXAgdW51c2VkIHJlc291cmNlcyBpZiBhIGdpdmVuIFdlYlBy
b2Nlc3Mgd29uJ3QgYmUgZHJhd2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9u
VmFsdWUuY3BwCmluZGV4IDIzOWM5OWQyYzRmZjIzODEzODZmNTBlZDU5MzBiNzg4NDE2YWE0NTQu
LjJmMzA1MzZlNjA1MTc5N2Y5Mjk5ZmMzZmI4Njc1NmJmN2M4NTc4ZTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAgLTc4LDYgKzc4LDcwIEBAIHN0YXRp
YyBDYWxjdWxhdGlvbkNhdGVnb3J5IHVuaXRDYXRlZ29yeShDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzIHR5cGUpCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBoYXNEb3VibGVWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjoKKyAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0lOVEVHRVI6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0U6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUzoK
KyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRVhTOgorICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DSFM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVM6
CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOgorICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DTToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU06Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6CisgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUkFEOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSFo6CisgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRElNRU5TSU9OOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVzoKKyAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVkg6CisgICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1ZNSU46CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVg6Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFg6CisgICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RQSToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBDTToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VO
S05PV046CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORzoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JREVOVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQVRUUjoKKyAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ09VTlRFUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUkVDVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09M
T1I6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBSVI6CisjaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EQVNIQk9B
UkRfUkVHSU9OOgorI2VuZGlmCisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOSUNP
REVfUkFOR0U6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9PUEVSQVRP
UjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0hFWENPTE9SOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSURFTlRJRklFUjoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfQ09VTlRFUl9OQU1FOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TSEFQ
RToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUVVBRDoKKyAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfQ0FMQzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
Q0FMQ19QRVJDRU5UQUdFX1dJVEhfTlVNQkVSOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lUSF9MRU5HVEg6CisjaWYgRU5BQkxFKENTU19WQVJJQUJM
RVMpCisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZBUklBQkxFX05BTUU6CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgU3RyaW5nIGJ1aWxkQ3NzVGV4dChj
b25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CkBA
IC0xNDUsNyArMjA5LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCBpc0ludGVnZXIpKTsKICAgICB9Ci0g
ICAgCisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjUHJpbWl0aXZlVmFsdWU+IGNyZWF0
ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSwgYm9vbCBp
c0ludGVnZXIpCisgICAgeworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgc3RkOjpp
c2luZih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWx1ZSwgdHlwZSkuZ2V0KCksIGlzSW50ZWdlcikpOworICAgIH0KKwogICAgIHZpcnR1YWwgYm9v
bCBpc1plcm8oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFtX3ZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpOwpAQCAtMTkyLDIwICsyNjMsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBk
b3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX2NhdGVn
b3J5KSB7Ci0gICAgICAgIGNhc2UgQ2FsY051bWJlcjoKLSAgICAgICAgY2FzZSBDYWxjUGVyY2Vu
dDogICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChoYXNEb3VibGVWYWx1ZShwcmltaXRpdmVU
eXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0g
ICAgICAgIGNhc2UgQ2FsY0xlbmd0aDoKLSAgICAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0aDoK
LSAgICAgICAgY2FzZSBDYWxjUGVyY2VudE51bWJlcjoKLSNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxF
UykKLSAgICAgICAgY2FzZSBDYWxjVmFyaWFibGU6Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBDYWxj
T3RoZXI6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICAKQEAgLTI0NSw2ICszMDYsMTEgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBDc3NDYWxjUHJpbWl0aXZlVmFs
dWU7IH0KICAgICAKKyAgICB2aXJ0dWFsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgcHJp
bWl0aXZlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcyhtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOworICAgIH0KKwogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUq
IHZhbHVlLCBib29sIGlzSW50ZWdlcikKICAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUo
dW5pdENhdGVnb3J5KChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT5wcmltaXRp
dmVUeXBlKCkpLCBpc0ludGVnZXIpCkBAIC0yNTYsMTIgKzMyMiwxMyBAQCBwcml2YXRlOgogfTsK
IAogc3RhdGljIGNvbnN0IENhbGN1bGF0aW9uQ2F0ZWdvcnkgYWRkU3VidHJhY3RSZXN1bHRbQ2Fs
Y090aGVyXVtDYWxjT3RoZXJdID0gewotICAgIHsgQ2FsY051bWJlciwgICAgICAgIENhbGNPdGhl
ciwgICAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhl
ciB9LAotICAgIHsgQ2FsY090aGVyLCAgICAgICAgIENhbGNMZW5ndGgsICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoIH0sCi0gICAg
eyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJjZW50LCAgICAg
ICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGggfSwKLSAgICB7IENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjT3RoZXIgfSwKLSAgICB7IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCB9LAotfTsgICAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgIENhbGNOdW1i
ZXIgICAgICAgICBDYWxjTGVuZ3RoICAgICAgICAgQ2FsY1BlcmNlbnQgICAgICAgIENhbGNQZXJj
ZW50TnVtYmVyICBDYWxjUGVyY2VudExlbmd0aAorLyogQ2FsY051bWJlciAqLyAgICAgICAgeyBD
YWxjTnVtYmVyLCAgICAgICAgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBD
YWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCisvKiBDYWxjTGVuZ3RoICovICAgICAgICB7
IENhbGNPdGhlciwgICAgICAgICBDYWxjTGVuZ3RoLCAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgs
IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0aCB9LAorLyogQ2FsY1BlcmNlbnQg
Ki8gICAgICAgeyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJj
ZW50LCAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGggfSwKKy8qIENh
bGNQZXJjZW50TnVtYmVyICovIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciwgICAgICAg
ICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciB9LAorLyog
Q2FsY1BlcmNlbnRMZW5ndGggKi8geyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGgsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGggfSwKK307CiAKIHN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5
KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCiB7CkBAIC0yOTQsMjEgKzM2
MSw4NCBAQCBzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25z
dCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaQogICAgIHJldHVybiBDYWxjT3RoZXI7CiB9
CiAKK3N0YXRpYyBib29sIGlzSW50ZWdlclJlc3VsdChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUqIGxlZnRTaWRlLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIHJpZ2h0U2lkZSwgQ2Fs
Y09wZXJhdG9yIG9wKQoreworICAgIC8vIE5vdCB0ZXN0aW5nIGZvciBhY3R1YWwgaW50ZWdlciB2
YWx1ZXMuCisgICAgLy8gUGVyZm9ybXMgVzNDIHNwZWMncyB0eXBlIGNoZWNraW5nIGZvciBjYWxj
IGludGVnZXJzLgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNjYWxj
LXR5cGUtY2hlY2tpbmcKKyAgICByZXR1cm4gb3AgIT0gQ2FsY0RpdmlkZSAmJiBsZWZ0U2lkZS0+
aXNJbnRlZ2VyKCkgJiYgcmlnaHRTaWRlLT5pc0ludGVnZXIoKTsKK30KKwogY2xhc3MgQ1NTQ2Fs
Y0JpbmFyeU9wZXJhdGlvbiA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgewogCiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlKFBhc3NSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGxlZnRTaWRlLT5jYXRlZ29yeSgpICE9IENhbGNPdGhlciAmJiByaWdodFNpZGUtPmNhdGVn
b3J5KCkgIT0gQ2FsY090aGVyKTsKLSAgICAgICAgCi0gICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdv
cnkgbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUs
IG9wKTsKIAorICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG5ld0NhdGVnb3J5ID0gZGV0ZXJt
aW5lQ2F0ZWdvcnkoKmxlZnRTaWRlLCAqcmlnaHRTaWRlLCBvcCk7CiAgICAgICAgIGlmIChuZXdD
YXRlZ29yeSA9PSBDYWxjT3RoZXIpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNCaW5hcnlPcGVyYXRpb24obGVmdFNpZGUsIHJpZ2h0
U2lkZSwgb3AsIG5ld0NhdGVnb3J5KSk7CiAgICAgfQotICAgIAorCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVTaW1wbGlmaWVkKFBhc3NSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQorICAgIHsKKyAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBsZWZ0Q2F0ZWdvcnkgPSBsZWZ0U2lkZS0+Y2F0ZWdvcnkoKTsKKyAg
ICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSByaWdodENhdGVnb3J5ID0gcmlnaHRTaWRlLT5jYXRl
Z29yeSgpOworICAgICAgICBBU1NFUlQobGVmdENhdGVnb3J5ICE9IENhbGNPdGhlciAmJiByaWdo
dENhdGVnb3J5ICE9IENhbGNPdGhlcik7CisKKyAgICAgICAgYm9vbCBpc0ludGVnZXIgPSBpc0lu
dGVnZXJSZXN1bHQobGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSwgb3ApOworCisgICAg
ICAgIC8vIFNpbXBsaWZ5IG51bWJlcnMuCisgICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgPT0gQ2Fs
Y051bWJlciAmJiByaWdodENhdGVnb3J5ID09IENhbGNOdW1iZXIpIHsKKyAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgZXZhbHVhdGlvblR5cGUgPSBpc0ludGVnZXIgPyBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSIDogQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVI7CisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoZXZhbHVhdGVPcGVyYXRvcihsZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSwgcmlnaHRTaWRl
LT5kb3VibGVWYWx1ZSgpLCBvcCksIGV2YWx1YXRpb25UeXBlLCBpc0ludGVnZXIpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU2ltcGxpZnkgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIGJldHdl
ZW4gc2FtZSB0eXBlcy4KKyAgICAgICAgaWYgKG9wID09IENhbGNBZGQgfHwgb3AgPT0gQ2FsY1N1
YnRyYWN0KSB7CisgICAgICAgICAgICBpZiAobGVmdENhdGVnb3J5ID09IHJpZ2h0U2lkZS0+Y2F0
ZWdvcnkoKSkgeworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMg
bGVmdFR5cGUgPSBsZWZ0U2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgICAgIGlm
IChoYXNEb3VibGVWYWx1ZShsZWZ0VHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyByaWdodFR5cGUgPSByaWdodFNpZGUtPnByaW1pdGl2ZVR5
cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRUeXBlID09IHJpZ2h0VHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRlLT5kb3VibGVWYWx1ZSgpLCByaWdodFNpZGUtPmRv
dWJsZVZhbHVlKCksIG9wKSwgbGVmdFR5cGUsIGlzSW50ZWdlcik7CisgICAgICAgICAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0Q2F0ZWdvcnkgbGVmdFVuaXRDYXRlZ29yeSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjp1bml0Q2F0ZWdvcnkobGVmdFR5cGUpOworICAgICAgICAgICAgICAg
ICAgICBpZiAobGVmdFVuaXRDYXRlZ29yeSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6VU90aGVyICYm
IGxlZnRVbml0Q2F0ZWdvcnkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRDYXRlZ29yeShyaWdo
dFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbGVmdFZhbHVlID0gbGVm
dFNpZGUtPmRvdWJsZVZhbHVlKCkgKiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29udmVyc2lvblRvQ2Fu
b25pY2FsVW5pdHNTY2FsZUZhY3RvcihsZWZ0VHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgcmlnaHRWYWx1ZSA9IHJpZ2h0U2lkZS0+ZG91YmxlVmFsdWUoKSAqIENTU1ByaW1p
dGl2ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKHJpZ2h0VHlw
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
IGNhbm9uaWNhbFR5cGUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y2Fub25pY2FsVW5pdFR5cGVGb3JD
YXRlZ29yeShsZWZ0VW5pdENhdGVnb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShldmFsdWF0ZU9wZXJhdG9yKGxlZnRWYWx1
ZSwgcmlnaHRWYWx1ZSwgb3ApLCBjYW5vbmljYWxUeXBlLCBpc0ludGVnZXIpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gU2ltcGxpZnkgbXVsdGlwbHlpbmcgb3IgZGl2aWRpbmcgYnkgYSBudW1i
ZXIgZm9yIHNpbXBsaWZpYWJsZSB0eXBlcy4KKyAgICAgICAgaWYgKG9wID09IENhbGNNdWx0aXBs
eSB8fCBvcCA9PSBDYWxjRGl2aWRlKSB7CisgICAgICAgICAgICBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUqIG51bWJlclNpZGUgPSBnZXROdW1iZXJTaWRlKGxlZnRTaWRlLmdldCgpLCByaWdodFNpZGUu
Z2V0KCkpOworICAgICAgICAgICAgaWYgKCFudW1iZXJTaWRlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGUobGVmdFNpZGUsIHJpZ2h0U2lkZSwgb3ApOworICAgICAgICAgICAgaWYgKG51
bWJlclNpZGUgPT0gbGVmdFNpZGUgJiYgb3AgPT0gQ2FsY0RpdmlkZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZSogb3RoZXJTaWRl
ID0gbGVmdFNpZGUgPT0gbnVtYmVyU2lkZSA/IHJpZ2h0U2lkZS5nZXQoKSA6IGxlZnRTaWRlLmdl
dCgpOworCisgICAgICAgICAgICBkb3VibGUgbnVtYmVyID0gbnVtYmVyU2lkZS0+ZG91YmxlVmFs
dWUoKTsKKyAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKG51bWJlcikgfHwgc3RkOjppc2luZihu
dW1iZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKG9wID09
IENhbGNEaXZpZGUgJiYgIW51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBvdGhlclR5cGUgPSBvdGhlclNp
ZGUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChoYXNEb3VibGVWYWx1ZShvdGhl
clR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShldmFsdWF0ZU9wZXJhdG9yKG90aGVyU2lkZS0+ZG91YmxlVmFsdWUoKSwgbnVtYmVyLCBv
cCksIG90aGVyVHlwZSwgaXNJbnRlZ2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBj
cmVhdGUobGVmdFNpZGUsIHJpZ2h0U2lkZSwgb3ApOworICAgIH0KKwogICAgIHZpcnR1YWwgYm9v
bCBpc1plcm8oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFkb3VibGVWYWx1ZSgpOwpA
QCAtMzg4LDE4ICs1MTgsNjUgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBDc3NDYWxjQmluYXJ5T3BlcmF0aW9uOyB9CiAKKyAgICB2aXJ0dWFsIENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgcHJpbWl0aXZlVHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBzd2l0Y2ggKG1fY2F0ZWdvcnkpIHsKKyAgICAgICAgY2FzZSBDYWxjTnVtYmVyOgor
ICAgICAgICAgICAgQVNTRVJUKG1fbGVmdFNpZGUtPmNhdGVnb3J5KCkgPT0gQ2FsY051bWJlciAm
JiBtX3JpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjTnVtYmVyKTsKKyAgICAgICAgICAgIGlm
IChtX2lzSW50ZWdlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QQVJTRVJfSU5URUdFUjsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUjsKKyAgICAgICAgY2FzZSBDYWxjTGVuZ3RoOgorICAgICAgICBjYXNlIENh
bGNQZXJjZW50OiB7CisgICAgICAgICAgICBpZiAobV9sZWZ0U2lkZS0+Y2F0ZWdvcnkoKSA9PSBD
YWxjTnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3JpZ2h0U2lkZS0+cHJpbWl0aXZl
VHlwZSgpOworICAgICAgICAgICAgaWYgKG1fcmlnaHRTaWRlLT5jYXRlZ29yeSgpID09IENhbGNO
dW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fbGVmdFNpZGUtPnByaW1pdGl2ZVR5cGUo
KTsKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgbGVmdFR5cGUgPSBt
X2xlZnRTaWRlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICBpZiAobGVmdFR5cGUgPT0g
bV9yaWdodFNpZGUtPnByaW1pdGl2ZVR5cGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVm
dFR5cGU7CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dO
OworICAgICAgICB9CisjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCisgICAgICAgIGNhc2UgQ2Fs
Y1ZhcmlhYmxlOgorICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVkFS
SUFCTEVfTkFNRTsKKyNlbmRpZgorICAgICAgICBjYXNlIENhbGNQZXJjZW50TGVuZ3RoOgorICAg
ICAgICBjYXNlIENhbGNQZXJjZW50TnVtYmVyOgorICAgICAgICBjYXNlIENhbGNPdGhlcjoKKyAg
ICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047CisgICAgICAg
IH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047CisgICAgfQorCisKIHByaXZhdGU6CiAgICAgQ1NTQ2Fs
Y0JpbmFyeU9wZXJhdGlvbihQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbGVmdFNp
ZGUsIFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByaWdodFNpZGUsIENhbGNPcGVy
YXRvciBvcCwgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKLSAgICAgICAgOiBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnksIGxlZnRTaWRlLT5pc0ludGVnZXIoKSAmJiByaWdodFNp
ZGUtPmlzSW50ZWdlcigpKQorICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29y
eSwgaXNJbnRlZ2VyUmVzdWx0KGxlZnRTaWRlLmdldCgpLCByaWdodFNpZGUuZ2V0KCksIG9wKSkK
ICAgICAgICAgLCBtX2xlZnRTaWRlKGxlZnRTaWRlKQogICAgICAgICAsIG1fcmlnaHRTaWRlKHJp
Z2h0U2lkZSkKICAgICAgICAgLCBtX29wZXJhdG9yKG9wKQogICAgIHsKICAgICB9Ci0gICAgCi0g
ICAgZG91YmxlIGV2YWx1YXRlKGRvdWJsZSBsZWZ0VmFsdWUsIGRvdWJsZSByaWdodFZhbHVlKSBj
b25zdAorCisgICAgc3RhdGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSogZ2V0TnVtYmVyU2lkZShD
U1NDYWxjRXhwcmVzc2lvbk5vZGUqIGxlZnRTaWRlLCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIHJp
Z2h0U2lkZSkKKyAgICB7CisgICAgICAgIGlmIChsZWZ0U2lkZS0+Y2F0ZWdvcnkoKSA9PSBDYWxj
TnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIGxlZnRTaWRlOworICAgICAgICBpZiAocmlnaHRT
aWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gcmlnaHRT
aWRlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBkb3VibGUgZXZhbHVhdGUoZG91
YmxlIGxlZnRTaWRlLCBkb3VibGUgcmlnaHRTaWRlKSBjb25zdAogICAgIHsKLSAgICAgICAgc3dp
dGNoIChtX29wZXJhdG9yKSB7CisgICAgICAgIHJldHVybiBldmFsdWF0ZU9wZXJhdG9yKGxlZnRT
aWRlLCByaWdodFNpZGUsIG1fb3BlcmF0b3IpOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUg
ZXZhbHVhdGVPcGVyYXRvcihkb3VibGUgbGVmdFZhbHVlLCBkb3VibGUgcmlnaHRWYWx1ZSwgQ2Fs
Y09wZXJhdG9yIG9wKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNl
IENhbGNBZGQ6CiAgICAgICAgICAgICByZXR1cm4gbGVmdFZhbHVlICsgcmlnaHRWYWx1ZTsKICAg
ICAgICAgY2FzZSBDYWxjU3VidHJhY3Q6CkBAIC00MTMsNyArNTkwLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgCisKICAgICBjb25zdCBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2xlZnRTaWRlOwogICAgIGNvbnN0IFJlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fcmlnaHRTaWRlOwogICAgIGNvbnN0IENhbGNPcGVyYXRv
ciBtX29wZXJhdG9yOwpAQCAtNDc5LDcgKzY1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KCZkZXB0aCwgKmluZGV4LCB0b2tlbnMpICE9IE9LKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAKLSAgICAgICAgCisKICAgICAgICAgaWYgKG9w
ZXJhdG9yVmFsdWUodG9rZW5zLCAqaW5kZXgpID09ICcoJykgewogICAgICAgICAgICAgdW5zaWdu
ZWQgY3VycmVudEluZGV4ID0gKmluZGV4ICsgMTsKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1
ZUV4cHJlc3Npb24odG9rZW5zLCBkZXB0aCwgJmN1cnJlbnRJbmRleCwgcmVzdWx0KSkKQEAgLTUx
Miw3ICs2ODksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlVGVybSh0
b2tlbnMsIGRlcHRoLCBpbmRleCwgJnJocykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICByZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6
Y3JlYXRlKHJlc3VsdC0+dmFsdWUsIHJocy52YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9y
PihvcGVyYXRvckNoYXJhY3RlcikpOworICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0Nh
bGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZVNpbXBsaWZpZWQocmVzdWx0LT52YWx1ZSwgcmhzLnZh
bHVlLCBzdGF0aWNfY2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CiAgICAg
ICAgICAgICBpZiAoIXJlc3VsdC0+dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CkBAIC01MzksNyArNzE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlm
ICghcGFyc2VWYWx1ZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCBpbmRl
eCwgJnJocykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBy
ZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlKHJlc3VsdC0+dmFs
dWUsIHJocy52YWx1ZSwgc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRvckNoYXJhY3Rl
cikpOworICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNCaW5hcnlPcGVyYXRpb246
OmNyZWF0ZVNpbXBsaWZpZWQocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBzdGF0aWNfY2FzdDxD
YWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CiAgICAgICAgICAgICBpZiAoIXJlc3Vs
dC0+dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAppbmRleCA1NjlkYmRlYTBiMGYyYjNi
ODk4YWU3YTRjNzIyZjBiNTY0YmFkZjg0Li4zMWRjNjBiNWU5NDAzZTUxMTI1YzZiOTlkOGVjYzBj
NmQxZDI2MGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKQEAg
LTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgQ1NTQ2FsY3VsYXRpb25WYWx1ZV9oCiAKICNpbmNsdWRl
ICJDU1NQYXJzZXJWYWx1ZXMuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNTU1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04MCw2ICs4MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKIAogICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0
ZWdvcnkoKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5OyB9ICAgIAorICAgIHZpcnR1YWwgQ1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBwcmltaXRpdmVUeXBlKCkgY29uc3QgPSAwOwogICAg
IGJvb2wgaXNJbnRlZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9pc0ludGVnZXI7IH0KICAgICAKIHBy
b3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCmluZGV4IGFj
ZDc4NzdlN2NlYzAxZmI1MDkwYWVkZDliZDQ4M2ZmNWFlNDU1ODAuLjc4ZmM4MWE3NzU0MzY0OGQ1
ODRlNjMxY2FjYWRjYmMwMDA2ODgyYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlk
Q1NTVW5pdFR5cGVGb3JEb3VibGVDb252ZXJzaW9uKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRDYXRl
Z29yeSB1bml0Q2F0ZWdvcnkoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlKQorQ1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRDYXRlZ29yeSBDU1NQcmltaXRpdmVWYWx1ZTo6dW5pdENhdGVn
b3J5KENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkKIHsKICAgICAvLyBIZXJlIHdl
IHZpb2xhdGUgdGhlIHNwZWMgKGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLVN0eWxl
L2Nzcy5odG1sI0NTUy1DU1NQcmltaXRpdmVWYWx1ZSkgYW5kIGFsbG93IGNvbnZlcnNpb25zCiAg
ICAgLy8gYmV0d2VlbiBDU1NfUFggYW5kIHJlbGF0aXZlIGxlbmd0aHMgKHNlZSBjc3NQaXhlbHNQ
ZXJJbmNoIGNvbW1lbnQgaW4gQ1NTSGVscGVyLmggZm9yIHRoZSB0b3BpYyB0cmVhdG1lbnQpLgpA
QCAtNTk2LDcgKzU5Niw3IEBAIHZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OnNldEZsb2F0VmFsdWUo
dW5zaWduZWQgc2hvcnQsIGRvdWJsZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgZWMgPSBOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiB9CiAKLXN0YXRpYyBkb3VibGUgY29udmVyc2lvblRv
Q2Fub25pY2FsVW5pdHNTY2FsZUZhY3Rvcih1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSkKK2RvdWJs
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29udmVyc2lvblRvQ2Fub25pY2FsVW5pdHNTY2FsZUZhY3Rv
cih1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSkKIHsKICAgICBkb3VibGUgZmFjdG9yID0gMS4wOwog
ICAgIC8vIEZJWE1FOiB0aGUgc3dpdGNoIGNhbiBiZSByZXBsYWNlZCBieSBhbiBhcnJheSBvZiBz
Y2FsZSBmYWN0b3JzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRleCAx
OGQyM2ZhZTdiMDBiMTc1MzRjNzRmYzA3MjdiYTA1N2MwMjBmOWJlLi42NDY2NjFmNzdjYmE2MjNk
OTQ1NzU3ZGY4YmM2YWM1NDk2ZmI2YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZl
VmFsdWUuaApAQCAtMTUwLDYgKzE1MCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICBVT3Ro
ZXIKICAgICB9OworICAgIHN0YXRpYyBVbml0Q2F0ZWdvcnkgdW5pdENhdGVnb3J5KENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpOwogCiAgICAgYm9vbCBpc0FuZ2xlKCkgY29uc3QKICAgICB7
CkBAIC0zMjQsNiArMzI1LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXBvcnREZXNjZW5kYW50
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCisgICAgc3RhdGljIFVuaXRU
eXBlcyBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5KFVuaXRDYXRlZ29yeSk7CisgICAgc3Rh
dGljIGRvdWJsZSBjb252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKHVuc2lnbmVk
IHNob3J0IHVuaXRUeXBlKTsKKwogcHJpdmF0ZToKICAgICAvLyBGSVhNRTogaW50IHZzLiB1bnNp
Z25lZCBvdmVybG9hZGluZyBpcyB0b28gc3VidGxlIHRvIGRpc3Rpbmd1aXNoIHRoZSBjb2xvciBh
bmQgaWRlbnRpZmllciBjYXNlcy4KICAgICBDU1NQcmltaXRpdmVWYWx1ZShpbnQgaWRlbnQpOwpA
QCAtMzQ5LDcgKzM1Myw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlKHVuc2ln
bmVkKTsgLy8gY29tcGlsZS10aW1lIGd1YXJkCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gb3Bl
cmF0b3IgVCooKTsgLy8gY29tcGlsZS10aW1lIGd1YXJkCiAKLSAgICBzdGF0aWMgVW5pdFR5cGVz
IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2F0ZWdvcnkoVW5pdENhdGVnb3J5IGNhdGVnb3J5KTsKIAog
ICAgIHZvaWQgaW5pdChQYXNzUmVmUHRyPENvdW50ZXI+KTsKICAgICB2b2lkIGluaXQoUGFzc1Jl
ZlB0cjxSZWN0Pik7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjY1OTE4NjE4ZDY5MWYyNzliMjQ5NDJlMzZhNDczNzAyNGFj
ZmRiZi4uMmQ3MDhmZTNiNzExYTIwOGZlY2IwYWM1ODNmNTE4ZWJkNjczZjk4ZSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDEzLTAzLTI2ICBBbGFuIEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBhcnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjc3MzL2Nh
bGMvY3Nzb20tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGNzczMvY2FsYy9zaW1wbGlmaWNhdGlv
bi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGNzczMvY2FsYy9zaW1wbGlmaWNhdGlv
bi5odG1sOiBBZGRlZC4KKwogMjAxMy0wMy0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgR3JlZW5pbmcgdGhlIG1hYyBib3RzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NzczMvY2Fs
Yy9jc3NvbS1leHBlY3RlZC50eHQKaW5kZXggZDVmNTQzYzIzYTI5NTJlYjExMzIxNGJjNmE4OTIz
MzhlYjQ2ZjdkNS4uZTk0ZDI5MzMwNWQ4ODdhMjUwM2VlNjVlYzFkZGJhMDkwNzJiZTRkNCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0CkBAIC0xLDE1ICsxLDE1IEBA
CiBUaGlzIHRlc3RzIGNhbGMoKSBhbmQgdGhlIENTU09NCiAKIDEwcHggPT4gY2FsYygxMHB4KQot
MTBweCArIDE1cHggPT4gY2FsYygxMHB4ICsgMTVweCkKKzEwcHggKyAxNXB4ID0+IGNhbGMoMjVw
eCkKIDEwMCUgPT4gY2FsYygxMDAlKQogMTAwJSAtIDEwcHggPT4gY2FsYygxMDAlIC0gMTBweCkK
LTEwcHggKyAxMHB4ICogNSA9PiBjYWxjKDEwcHggKyAoMTBweCAqIDUpKQorMTBweCArIDEwcHgg
KiA1ID0+IGNhbGMoNjBweCkKIDVweCArIDJlbSArIDZpbiA9PiBjYWxjKCg1cHggKyAyZW0pICsg
NmluKQotMTAwJSAtIDEwcHggLyAyID0+IGNhbGMoMTAwJSAtICgxMHB4IC8gMikpCisxMDAlIC0g
MTBweCAvIDIgPT4gY2FsYygxMDAlIC0gNXB4KQogMXB4ICsgMmVtIC0gM3JlbSArIDRpbiA9PiBj
YWxjKCgoMXB4ICsgMmVtKSAtIDNyZW0pICsgNGluKQotMTAwcHggKiAoMSArIDIgKiAzIC0gNCAv
IDUpID0+IGNhbGMoMTAwcHggKiAoKDEgKyAoMiAqIDMpKSAtICg0IC8gNSkpKQotKDEwMHB4KSAr
IDIwMHB4ID0+IGNhbGMoMTAwcHggKyAyMDBweCkKKzEwMHB4ICogKDEgKyAyICogMyAtIDQgLyA1
KSA9PiBjYWxjKDYyMHB4KQorKDEwMHB4KSArIDIwMHB4ID0+IGNhbGMoMzAwcHgpCiAoKCgoKCgo
KCgoMTAwcHgpKSkpKSkpKSkpID0+IGNhbGMoMTAwcHgpCiBmbGltc3RpeCA9PiBjYWxjKDEwMHB4
KQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24tZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xZTI0ODY4ZDM5NWU5NTRiNWJiNDZmMzQ0YThjMWQwMDhmNDNmZDg0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9u
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIxIEBACitUaGlzIHRlc3RzIHBhcnNlIHRpbWUgc2lt
cGxpZmljYXRpb24gaW4gY2FsYygpCisKKzEwMHB4ICogKDI1ICsgNSkgPT4gY2FsYygzMDAwcHgp
CisxMDBlbSAqICgyNSAtIDUpID0+IGNhbGMoMjAwMGVtKQorMTAwZXggKiAoMiAqIDUgLSA1KSA9
PiBjYWxjKDUwMGV4KQorMTAwY20gKiAoNSAtIDQgLyA1KSA9PiBjYWxjKDQyMGNtKQorMTAwbW0g
KiAoMi40ICogNSAtIDggLyA1KSA9PiBjYWxjKDEwNDBtbSkKKzEwMGluICogKDYgKiAoNSAtIDQp
IC8gOCkgPT4gY2FsYyg3NWluKQorMXB4ICogKDMgKyAxLyg3ICsgMS8oMTUgKyAxLygxICsgMS8o
MjkyICsgMS8oMSArIDEvKDEgKyAxLygxICsgMSkpKSkpKSkpID0+IGNhbGMoMy4xNDE1OTI2NTM1
NTgzNTc0cHgpCisxMDBwYyAqIDIwICsgMTAwcmVtICogMTAgLSAxMDBjaCAqIDUgKyAxMDBwYyA9
PiBjYWxjKCgoMjAwMHBjICsgMTAwMHJlbSkgLSA1MDBjaCkgKyAxMDBwYykKKygoMTAwcHggKyAy
MCAqIDVweCkgKiAxMCAtIDUgKiAoMTBlbSAqIDUgKyAxMGVtKSkgKiAyID0+IGNhbGMoKDIwMDBw
eCAtIDMwMGVtKSAqIDIpCisxMDBweCArIDFpbiA9PiBjYWxjKDE5NnB4KQorMTAgKiAxMHB4ICsg
MC41ICogMmluID0+IGNhbGMoMTk2cHgpCisxMDBweCArIDFpbiArIDEwJSA9PiBjYWxjKDE5NnB4
ICsgMTAlKQorMTAwcHggLSAxaW4gPT4gY2FsYyg0cHgpCis1MGNtICsgNTBjbSA9PiBjYWxjKDEw
MGNtKQorNTBjbSArIDEwaW4gKyAxMDBtbSA9PiBjYWxjKDMyMjcuNzE2NTM1NDMzMDcwNXB4KQor
MTAwcHggKyAxZW0gPT4gY2FsYygxMDBweCArIDFlbSkKKzEwMHB4ICsgMWVtICsgMTAwcHggPT4g
Y2FsYygoMTAwcHggKyAxZW0pICsgMTAwcHgpCisxZW0gKyAxZXggPT4gY2FsYygxZW0gKyAxZXgp
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1s
IGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDZkNmZhZWNmNzk4MTdkZWVkZGU0MTM0ODk2OWJjYjNmZjVkYTRlNAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlvbi5odG1sCkBAIC0wLDAgKzEs
MzYgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGRpdiBpZD0iZHVtbXkiPjwvZGl2PgorPGRpdiBpZD0i
cmVzdWx0cyI+VGhpcyB0ZXN0cyBwYXJzZSB0aW1lIHNpbXBsaWZpY2F0aW9uIGluIGNhbGMoKTxi
cj48YnI+PC9kaXY+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHdpbmRv
dy50ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKwordmFyIHRlc3RzID0gWworICAgICIxMDBweCAq
ICgyNSArIDUpIiwKKyAgICAiMTAwZW0gKiAoMjUgLSA1KSIsCisgICAgIjEwMGV4ICogKDIgKiA1
IC0gNSkiLAorICAgICIxMDBjbSAqICg1IC0gNCAvIDUpIiwKKyAgICAiMTAwbW0gKiAoMi40ICog
NSAtIDggLyA1KSIsCisgICAgIjEwMGluICogKDYgKiAoNSAtIDQpIC8gOCkiLAorICAgICIxcHgg
KiAoMyArIDEvKDcgKyAxLygxNSArIDEvKDEgKyAxLygyOTIgKyAxLygxICsgMS8oMSArIDEvKDEg
KyAxKSkpKSkpKSkiLAorICAgICIxMDBwYyAqIDIwICsgMTAwcmVtICogMTAgLSAxMDBjaCAqIDUg
KyAxMDBwYyIsCisgICAgIigoMTAwcHggKyAyMCAqIDVweCkgKiAxMCAtIDUgKiAoMTBlbSAqIDUg
KyAxMGVtKSkgKiAyIiwKKyAgICAiMTAwcHggKyAxaW4iLAorICAgICIxMCAqIDEwcHggKyAwLjUg
KiAyaW4iLAorICAgICIxMDBweCArIDFpbiArIDEwJSIsCisgICAgIjEwMHB4IC0gMWluIiwKKyAg
ICAiNTBjbSArIDUwY20iLAorICAgICI1MGNtICsgMTBpbiArIDEwMG1tIiwKKyAgICAiMTAwcHgg
KyAxZW0iLAorICAgICIxMDBweCArIDFlbSArIDEwMHB4IiwKKyAgICAiMWVtICsgMWV4IiwKK107
CisKK3ZhciByZXN1bHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdHMiKTsKK3Zh
ciBkdW1teSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkdW1teSIpOworZm9yICh2YXIgaSA9
IDA7IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgeworICAgIHZhciBleHByZXNzaW9uID0gdGVzdHNb
aV07CisgICAgZHVtbXkuc3R5bGUud2lkdGggPSAnY2FsYygnICsgZXhwcmVzc2lvbiArICcpJzsK
KyAgICByZXN1bHRzLmlubmVySFRNTCArPSBleHByZXNzaW9uICsgIiA9PiAiICsgZHVtbXkuc3R5
bGUud2lkdGggKyAiPGJyPiI7Cit9Cis8L3NjcmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195219</attachid>
            <date>2013-03-26 21:34:32 -0700</date>
            <delta_ts>2013-03-26 22:54:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111149-20130327153013.patch</filename>
            <type>text/plain</type>
            <size>24462</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzYxZDdhZWNkNTg1N2Rm
MDNjY2VkYzQ0NDFkZjZhZDMzNDZjMWE2YS4uNDZhOTI1Y2EwMGY4OTk3MDM0ODhkMzljNzllYTlh
ZmFiNTM0ZWNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAzLTI2ICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBh
cnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBh
bmQgdW5pdHMgaW4gQ1NTIGNhbGMgZXhwcmVzc2lvbnMgYXQgcGFyc2UgdGltZS4KKworICAgICAg
ICBUZXN0OiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbAorCisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzRG91YmxlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDU1NDYWxjUHJpbWl0aXZlVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpkb3VibGVWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OnByaW1pdGl2ZVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNJbnRlZ2VyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNC
aW5hcnlPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChDU1NDYWxjQmluYXJ5T3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZVNpbXBs
aWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6cHJpbWl0
aXZlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpDU1ND
YWxjQmluYXJ5T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVy
YXRpb246OmdldE51bWJlclNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9w
ZXJhdGlvbjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJh
dGlvbjo6ZXZhbHVhdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWVUZXJtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNl
QWRkaXRpdmVWYWx1ZUV4cHJlc3Npb24pOgorICAgICAgICAqIGNzcy9DU1NDYWxjdWxhdGlvblZh
bHVlLmg6CisgICAgICAgIChDU1NDYWxjRXhwcmVzc2lvbk5vZGUpOgorICAgICAgICAqIGNzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1
ZTo6dW5pdENhdGVnb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpj
b252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKENTU1ByaW1pdGl2ZVZhbHVlKToKKwogMjAxMy0w
My0yNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBb
Y2FdIFRlbGwgQ0EgdG8gY2xlYW4gdXAgdW51c2VkIHJlc291cmNlcyBpZiBhIGdpdmVuIFdlYlBy
b2Nlc3Mgd29uJ3QgYmUgZHJhd2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9u
VmFsdWUuY3BwCmluZGV4IDIzOWM5OWQyYzRmZjIzODEzODZmNTBlZDU5MzBiNzg4NDE2YWE0NTQu
LjMxMmEyM2E1YjRjODM0NmY1MTJiYzU4MWUzM2E0MTExNGE2YWQ4NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAgLTc4LDYgKzc4LDcwIEBAIHN0YXRp
YyBDYWxjdWxhdGlvbkNhdGVnb3J5IHVuaXRDYXRlZ29yeShDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzIHR5cGUpCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBoYXNEb3VibGVWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjoKKyAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0lOVEVHRVI6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0U6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUzoK
KyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRVhTOgorICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DSFM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVM6
CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOgorICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DTToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU06Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6CisgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUkFEOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSFo6CisgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRElNRU5TSU9OOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVzoKKyAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVkg6CisgICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1ZNSU46CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVg6Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFg6CisgICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RQSToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBDTToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VO
S05PV046CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORzoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JREVOVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQVRUUjoKKyAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ09VTlRFUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUkVDVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09M
T1I6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBSVI6CisjaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EQVNIQk9B
UkRfUkVHSU9OOgorI2VuZGlmCisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOSUNP
REVfUkFOR0U6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9PUEVSQVRP
UjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0hFWENPTE9SOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSURFTlRJRklFUjoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfQ09VTlRFUl9OQU1FOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TSEFQ
RToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUVVBRDoKKyAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfQ0FMQzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
Q0FMQ19QRVJDRU5UQUdFX1dJVEhfTlVNQkVSOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lUSF9MRU5HVEg6CisjaWYgRU5BQkxFKENTU19WQVJJQUJM
RVMpCisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZBUklBQkxFX05BTUU6CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgU3RyaW5nIGJ1aWxkQ3NzVGV4dChj
b25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CkBA
IC0xNDUsNyArMjA5LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCBpc0ludGVnZXIpKTsKICAgICB9Ci0g
ICAgCisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjUHJpbWl0aXZlVmFsdWU+IGNyZWF0
ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSwgYm9vbCBp
c0ludGVnZXIpCisgICAgeworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgc3RkOjpp
c2luZih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWx1ZSwgdHlwZSkuZ2V0KCksIGlzSW50ZWdlcikpOworICAgIH0KKwogICAgIHZpcnR1YWwgYm9v
bCBpc1plcm8oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFtX3ZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpOwpAQCAtMTkyLDIwICsyNjMsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBk
b3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX2NhdGVn
b3J5KSB7Ci0gICAgICAgIGNhc2UgQ2FsY051bWJlcjoKLSAgICAgICAgY2FzZSBDYWxjUGVyY2Vu
dDogICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChoYXNEb3VibGVWYWx1ZShwcmltaXRpdmVU
eXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0g
ICAgICAgIGNhc2UgQ2FsY0xlbmd0aDoKLSAgICAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0aDoK
LSAgICAgICAgY2FzZSBDYWxjUGVyY2VudE51bWJlcjoKLSNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxF
UykKLSAgICAgICAgY2FzZSBDYWxjVmFyaWFibGU6Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBDYWxj
T3RoZXI6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICAKQEAgLTI0NSw2ICszMDYsMTEgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBDc3NDYWxjUHJpbWl0aXZlVmFs
dWU7IH0KICAgICAKKyAgICB2aXJ0dWFsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgcHJp
bWl0aXZlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcyhtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOworICAgIH0KKwogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUq
IHZhbHVlLCBib29sIGlzSW50ZWdlcikKICAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUo
dW5pdENhdGVnb3J5KChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT5wcmltaXRp
dmVUeXBlKCkpLCBpc0ludGVnZXIpCkBAIC0yNTYsMTIgKzMyMiwxMyBAQCBwcml2YXRlOgogfTsK
IAogc3RhdGljIGNvbnN0IENhbGN1bGF0aW9uQ2F0ZWdvcnkgYWRkU3VidHJhY3RSZXN1bHRbQ2Fs
Y090aGVyXVtDYWxjT3RoZXJdID0gewotICAgIHsgQ2FsY051bWJlciwgICAgICAgIENhbGNPdGhl
ciwgICAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhl
ciB9LAotICAgIHsgQ2FsY090aGVyLCAgICAgICAgIENhbGNMZW5ndGgsICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoIH0sCi0gICAg
eyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJjZW50LCAgICAg
ICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGggfSwKLSAgICB7IENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjT3RoZXIgfSwKLSAgICB7IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCB9LAotfTsgICAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgIENhbGNOdW1i
ZXIgICAgICAgICBDYWxjTGVuZ3RoICAgICAgICAgQ2FsY1BlcmNlbnQgICAgICAgIENhbGNQZXJj
ZW50TnVtYmVyICBDYWxjUGVyY2VudExlbmd0aAorLyogQ2FsY051bWJlciAqLyAgICAgICAgeyBD
YWxjTnVtYmVyLCAgICAgICAgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBD
YWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCisvKiBDYWxjTGVuZ3RoICovICAgICAgICB7
IENhbGNPdGhlciwgICAgICAgICBDYWxjTGVuZ3RoLCAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgs
IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0aCB9LAorLyogQ2FsY1BlcmNlbnQg
Ki8gICAgICAgeyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJj
ZW50LCAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGggfSwKKy8qIENh
bGNQZXJjZW50TnVtYmVyICovIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciwgICAgICAg
ICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciB9LAorLyog
Q2FsY1BlcmNlbnRMZW5ndGggKi8geyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGgsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGggfSwKK307CiAKIHN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5
KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCiB7CkBAIC0yOTQsMjEgKzM2
MSw4NiBAQCBzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25z
dCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaQogICAgIHJldHVybiBDYWxjT3RoZXI7CiB9
CiAKK3N0YXRpYyBib29sIGlzSW50ZWdlclJlc3VsdChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUqIGxlZnRTaWRlLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIHJpZ2h0U2lkZSwgQ2Fs
Y09wZXJhdG9yIG9wKQoreworICAgIC8vIE5vdCB0ZXN0aW5nIGZvciBhY3R1YWwgaW50ZWdlciB2
YWx1ZXMuCisgICAgLy8gUGVyZm9ybXMgVzNDIHNwZWMncyB0eXBlIGNoZWNraW5nIGZvciBjYWxj
IGludGVnZXJzLgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNjYWxj
LXR5cGUtY2hlY2tpbmcKKyAgICByZXR1cm4gb3AgIT0gQ2FsY0RpdmlkZSAmJiBsZWZ0U2lkZS0+
aXNJbnRlZ2VyKCkgJiYgcmlnaHRTaWRlLT5pc0ludGVnZXIoKTsKK30KKwogY2xhc3MgQ1NTQ2Fs
Y0JpbmFyeU9wZXJhdGlvbiA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgewogCiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlKFBhc3NSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGxlZnRTaWRlLT5jYXRlZ29yeSgpICE9IENhbGNPdGhlciAmJiByaWdodFNpZGUtPmNhdGVn
b3J5KCkgIT0gQ2FsY090aGVyKTsKLSAgICAgICAgCi0gICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdv
cnkgbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUs
IG9wKTsKIAorICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG5ld0NhdGVnb3J5ID0gZGV0ZXJt
aW5lQ2F0ZWdvcnkoKmxlZnRTaWRlLCAqcmlnaHRTaWRlLCBvcCk7CiAgICAgICAgIGlmIChuZXdD
YXRlZ29yeSA9PSBDYWxjT3RoZXIpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNCaW5hcnlPcGVyYXRpb24obGVmdFNpZGUsIHJpZ2h0
U2lkZSwgb3AsIG5ld0NhdGVnb3J5KSk7CiAgICAgfQotICAgIAorCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVTaW1wbGlmaWVkKFBhc3NSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQorICAgIHsKKyAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBsZWZ0Q2F0ZWdvcnkgPSBsZWZ0U2lkZS0+Y2F0ZWdvcnkoKTsKKyAg
ICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSByaWdodENhdGVnb3J5ID0gcmlnaHRTaWRlLT5jYXRl
Z29yeSgpOworICAgICAgICBBU1NFUlQobGVmdENhdGVnb3J5ICE9IENhbGNPdGhlciAmJiByaWdo
dENhdGVnb3J5ICE9IENhbGNPdGhlcik7CisKKyAgICAgICAgYm9vbCBpc0ludGVnZXIgPSBpc0lu
dGVnZXJSZXN1bHQobGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSwgb3ApOworCisgICAg
ICAgIC8vIFNpbXBsaWZ5IG51bWJlcnMuCisgICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgPT0gQ2Fs
Y051bWJlciAmJiByaWdodENhdGVnb3J5ID09IENhbGNOdW1iZXIpIHsKKyAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgZXZhbHVhdGlvblR5cGUgPSBpc0ludGVnZXIgPyBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSIDogQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVI7CisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoZXZhbHVhdGVPcGVyYXRvcihsZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSwgcmlnaHRTaWRl
LT5kb3VibGVWYWx1ZSgpLCBvcCksIGV2YWx1YXRpb25UeXBlLCBpc0ludGVnZXIpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU2ltcGxpZnkgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIGJldHdl
ZW4gc2FtZSB0eXBlcy4KKyAgICAgICAgaWYgKG9wID09IENhbGNBZGQgfHwgb3AgPT0gQ2FsY1N1
YnRyYWN0KSB7CisgICAgICAgICAgICBpZiAobGVmdENhdGVnb3J5ID09IHJpZ2h0U2lkZS0+Y2F0
ZWdvcnkoKSkgeworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMg
bGVmdFR5cGUgPSBsZWZ0U2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgICAgIGlm
IChoYXNEb3VibGVWYWx1ZShsZWZ0VHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyByaWdodFR5cGUgPSByaWdodFNpZGUtPnByaW1pdGl2ZVR5
cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRUeXBlID09IHJpZ2h0VHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRlLT5kb3VibGVWYWx1ZSgpLCByaWdodFNpZGUtPmRv
dWJsZVZhbHVlKCksIG9wKSwgbGVmdFR5cGUsIGlzSW50ZWdlcik7CisgICAgICAgICAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0Q2F0ZWdvcnkgbGVmdFVuaXRDYXRlZ29yeSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjp1bml0Q2F0ZWdvcnkobGVmdFR5cGUpOworICAgICAgICAgICAgICAg
ICAgICBpZiAobGVmdFVuaXRDYXRlZ29yeSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6VU90aGVyICYm
IGxlZnRVbml0Q2F0ZWdvcnkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRDYXRlZ29yeShyaWdo
dFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzIGNhbm9uaWNhbFR5cGUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y2Fub25pY2FsVW5pdFR5
cGVGb3JDYXRlZ29yeShsZWZ0VW5pdENhdGVnb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjYW5vbmljYWxUeXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsZWZ0VmFsdWUgPSBsZWZ0U2lkZS0+
ZG91YmxlVmFsdWUoKSAqIENTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5vbmljYWxV
bml0c1NjYWxlRmFjdG9yKGxlZnRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgcmlnaHRWYWx1ZSA9IHJpZ2h0U2lkZS0+ZG91YmxlVmFsdWUoKSAqIENTU1ByaW1pdGl2
ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKHJpZ2h0VHlwZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3IobGVmdFZhbHVlLCByaWdodFZhbHVlLCBvcCksIGNh
bm9uaWNhbFR5cGUsIGlzSW50ZWdlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBTaW1wbGlmeSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBieSBh
IG51bWJlciBmb3Igc2ltcGxpZmlhYmxlIHR5cGVzLgorICAgICAgICBpZiAob3AgPT0gQ2FsY011
bHRpcGx5IHx8IG9wID09IENhbGNEaXZpZGUpIHsKKyAgICAgICAgICAgIENTU0NhbGNFeHByZXNz
aW9uTm9kZSogbnVtYmVyU2lkZSA9IGdldE51bWJlclNpZGUobGVmdFNpZGUuZ2V0KCksIHJpZ2h0
U2lkZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIW51bWJlclNpZGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZShsZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCk7CisgICAgICAgICAgICBp
ZiAobnVtYmVyU2lkZSA9PSBsZWZ0U2lkZSAmJiBvcCA9PSBDYWxjRGl2aWRlKQorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBvdGhl
clNpZGUgPSBsZWZ0U2lkZSA9PSBudW1iZXJTaWRlID8gcmlnaHRTaWRlLmdldCgpIDogbGVmdFNp
ZGUuZ2V0KCk7CisKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXIgPSBudW1iZXJTaWRlLT5kb3Vi
bGVWYWx1ZSgpOworICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4obnVtYmVyKSB8fCBzdGQ6Omlz
aW5mKG51bWJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAo
b3AgPT0gQ2FsY0RpdmlkZSAmJiAhbnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIG90aGVyVHlwZSA9IG90
aGVyU2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgaWYgKGhhc0RvdWJsZVZhbHVl
KG90aGVyVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3Iob3RoZXJTaWRlLT5kb3VibGVWYWx1ZSgpLCBudW1i
ZXIsIG9wKSwgb3RoZXJUeXBlLCBpc0ludGVnZXIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZShsZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCk7CisgICAgfQorCiAgICAgdmlydHVh
bCBib29sIGlzWmVybygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIWRvdWJsZVZhbHVl
KCk7CkBAIC0zODgsMTggKzUyMCw2NSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIENzc0NhbGNCaW5hcnlPcGVyYXRpb247IH0KIAorICAgIHZpcnR1
YWwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBwcmltaXRpdmVUeXBlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAobV9jYXRlZ29yeSkgeworICAgICAgICBjYXNlIENhbGNOdW1i
ZXI6CisgICAgICAgICAgICBBU1NFUlQobV9sZWZ0U2lkZS0+Y2F0ZWdvcnkoKSA9PSBDYWxjTnVt
YmVyICYmIG1fcmlnaHRTaWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIpOworICAgICAgICAg
ICAgaWYgKG1faXNJbnRlZ2VyKQorICAgICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSOworICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSOworICAgICAgICBjYXNlIENhbGNMZW5ndGg6CisgICAgICAgIGNh
c2UgQ2FsY1BlcmNlbnQ6IHsKKyAgICAgICAgICAgIGlmIChtX2xlZnRTaWRlLT5jYXRlZ29yeSgp
ID09IENhbGNOdW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmlnaHRTaWRlLT5wcmlt
aXRpdmVUeXBlKCk7CisgICAgICAgICAgICBpZiAobV9yaWdodFNpZGUtPmNhdGVnb3J5KCkgPT0g
Q2FsY051bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9sZWZ0U2lkZS0+cHJpbWl0aXZl
VHlwZSgpOworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBsZWZ0VHlw
ZSA9IG1fbGVmdFNpZGUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChsZWZ0VHlw
ZSA9PSBtX3JpZ2h0U2lkZS0+cHJpbWl0aXZlVHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBsZWZ0VHlwZTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VO
S05PV047CisgICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKKyAgICAgICAgY2Fz
ZSBDYWxjVmFyaWFibGU6CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19WQVJJQUJMRV9OQU1FOworI2VuZGlmCisgICAgICAgIGNhc2UgQ2FsY1BlcmNlbnRMZW5ndGg6
CisgICAgICAgIGNhc2UgQ2FsY1BlcmNlbnROdW1iZXI6CisgICAgICAgIGNhc2UgQ2FsY090aGVy
OgorICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKKyAgICB9CisKKwogcHJpdmF0ZToKICAgICBD
U1NDYWxjQmluYXJ5T3BlcmF0aW9uKFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBs
ZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2Fs
Y09wZXJhdG9yIG9wLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotICAgICAgICA6IENT
U0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSwgbGVmdFNpZGUtPmlzSW50ZWdlcigpICYmIHJp
Z2h0U2lkZS0+aXNJbnRlZ2VyKCkpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNh
dGVnb3J5LCBpc0ludGVnZXJSZXN1bHQobGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSwg
b3ApKQogICAgICAgICAsIG1fbGVmdFNpZGUobGVmdFNpZGUpCiAgICAgICAgICwgbV9yaWdodFNp
ZGUocmlnaHRTaWRlKQogICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCiAgICAgewogICAgIH0KLSAg
ICAKLSAgICBkb3VibGUgZXZhbHVhdGUoZG91YmxlIGxlZnRWYWx1ZSwgZG91YmxlIHJpZ2h0VmFs
dWUpIGNvbnN0CisKKyAgICBzdGF0aWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBnZXROdW1iZXJT
aWRlKENTU0NhbGNFeHByZXNzaW9uTm9kZSogbGVmdFNpZGUsIENTU0NhbGNFeHByZXNzaW9uTm9k
ZSogcmlnaHRTaWRlKQorICAgIHsKKyAgICAgICAgaWYgKGxlZnRTaWRlLT5jYXRlZ29yeSgpID09
IENhbGNOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gbGVmdFNpZGU7CisgICAgICAgIGlmIChy
aWdodFNpZGUtPmNhdGVnb3J5KCkgPT0gQ2FsY051bWJlcikKKyAgICAgICAgICAgIHJldHVybiBy
aWdodFNpZGU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGRvdWJsZSBldmFsdWF0
ZShkb3VibGUgbGVmdFNpZGUsIGRvdWJsZSByaWdodFNpZGUpIGNvbnN0CiAgICAgewotICAgICAg
ICBzd2l0Y2ggKG1fb3BlcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIGV2YWx1YXRlT3BlcmF0b3Io
bGVmdFNpZGUsIHJpZ2h0U2lkZSwgbV9vcGVyYXRvcik7CisgICAgfQorCisgICAgc3RhdGljIGRv
dWJsZSBldmFsdWF0ZU9wZXJhdG9yKGRvdWJsZSBsZWZ0VmFsdWUsIGRvdWJsZSByaWdodFZhbHVl
LCBDYWxjT3BlcmF0b3Igb3ApCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAg
IGNhc2UgQ2FsY0FkZDoKICAgICAgICAgICAgIHJldHVybiBsZWZ0VmFsdWUgKyByaWdodFZhbHVl
OwogICAgICAgICBjYXNlIENhbGNTdWJ0cmFjdDoKQEAgLTQxMyw3ICs1OTIsNyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKwogICAgIGNvbnN0
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fbGVmdFNpZGU7CiAgICAgY29uc3QgUmVm
UHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9yaWdodFNpZGU7CiAgICAgY29uc3QgQ2FsY09w
ZXJhdG9yIG1fb3BlcmF0b3I7CkBAIC00NzksNyArNjU4LDcgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoJmRlcHRoLCAqaW5kZXgsIHRva2VucykgIT0g
T0spCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgIAotICAgICAgICAKKwogICAgICAgICBp
ZiAob3BlcmF0b3JWYWx1ZSh0b2tlbnMsICppbmRleCkgPT0gJygnKSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBjdXJyZW50SW5kZXggPSAqaW5kZXggKyAxOwogICAgICAgICAgICAgaWYgKCFwYXJz
ZVZhbHVlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCAmY3VycmVudEluZGV4LCByZXN1bHQpKQpA
QCAtNTEyLDcgKzY5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWVU
ZXJtKHRva2VucywgZGVwdGgsIGluZGV4LCAmcmhzKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0
aW9uOjpjcmVhdGUocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBzdGF0aWNfY2FzdDxDYWxjT3Bl
cmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CisgICAgICAgICAgICByZXN1bHQtPnZhbHVlID0g
Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlU2ltcGxpZmllZChyZXN1bHQtPnZhbHVlLCBy
aHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpKTsK
ICAgICAgICAgICAgIGlmICghcmVzdWx0LT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KQEAgLTUzOSw3ICs3MTgsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKCFwYXJzZVZhbHVlTXVsdGlwbGljYXRpdmVFeHByZXNzaW9uKHRva2VucywgZGVwdGgs
IGluZGV4LCAmcmhzKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
ICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUocmVzdWx0
LT52YWx1ZSwgcmhzLnZhbHVlLCBzdGF0aWNfY2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hh
cmFjdGVyKSk7CisgICAgICAgICAgICByZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJh
dGlvbjo6Y3JlYXRlU2ltcGxpZmllZChyZXN1bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19j
YXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpKTsKICAgICAgICAgICAgIGlmICgh
cmVzdWx0LT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCmluZGV4IDU2OWRiZGVhMGIw
ZjJiM2I4OThhZTdhNGM3MjJmMGI1NjRiYWRmODQuLjMxZGM2MGI1ZTk0MDNlNTExMjVjNmI5OWQ4
ZWNjMGM2ZDFkMjYwYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxh
dGlvblZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUu
aApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBDU1NDYWxjdWxhdGlvblZhbHVlX2gKIAogI2lu
Y2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTgwLDYgKzgxLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwogCiAgICAgQ2FsY3VsYXRpb25DYXRlZ29y
eSBjYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJuIG1fY2F0ZWdvcnk7IH0gICAgCisgICAgdmlydHVh
bCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHByaW1pdGl2ZVR5cGUoKSBjb25zdCA9IDA7
CiAgICAgYm9vbCBpc0ludGVnZXIoKSBjb25zdCB7IHJldHVybiBtX2lzSW50ZWdlcjsgfQogICAg
IAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAKaW5k
ZXggYWNkNzg3N2U3Y2VjMDFmYjUwOTBhZWRkOWJkNDgzZmY1YWU0NTU4MC4uNzhmYzgxYTc3NTQz
NjQ4ZDU4NGU2MzFjYWNhZGNiYzAwMDY4ODJiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlz
VmFsaWRDU1NVbml0VHlwZUZvckRvdWJsZUNvbnZlcnNpb24oQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dENhdGVnb3J5IHVuaXRDYXRlZ29yeShDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUp
CitDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdENhdGVnb3J5IENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0
Q2F0ZWdvcnkoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlKQogewogICAgIC8vIEhl
cmUgd2UgdmlvbGF0ZSB0aGUgc3BlYyAoaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTIt
U3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1ByaW1pdGl2ZVZhbHVlKSBhbmQgYWxsb3cgY29udmVyc2lv
bnMKICAgICAvLyBiZXR3ZWVuIENTU19QWCBhbmQgcmVsYXRpdmUgbGVuZ3RocyAoc2VlIGNzc1Bp
eGVsc1BlckluY2ggY29tbWVudCBpbiBDU1NIZWxwZXIuaCBmb3IgdGhlIHRvcGljIHRyZWF0bWVu
dCkuCkBAIC01OTYsNyArNTk2LDcgQEAgdm9pZCBDU1NQcmltaXRpdmVWYWx1ZTo6c2V0RmxvYXRW
YWx1ZSh1bnNpZ25lZCBzaG9ydCwgZG91YmxlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBlYyA9
IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKIH0KIAotc3RhdGljIGRvdWJsZSBjb252ZXJz
aW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKQor
ZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxl
RmFjdG9yKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKQogewogICAgIGRvdWJsZSBmYWN0b3IgPSAx
LjA7CiAgICAgLy8gRklYTUU6IHRoZSBzd2l0Y2ggY2FuIGJlIHJlcGxhY2VkIGJ5IGFuIGFycmF5
IG9mIHNjYWxlIGZhY3RvcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCmlu
ZGV4IDE4ZDIzZmFlN2IwMGIxNzUzNGM3NGZjMDcyN2JhMDU3YzAyMGY5YmUuLjY0NjY2MWY3N2Ni
YTYyM2Q5NDU3NTdkZjhiYzZhYzU0OTZmYjZhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5oCkBAIC0xNTAsNiArMTUwLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAg
IFVPdGhlcgogICAgIH07CisgICAgc3RhdGljIFVuaXRDYXRlZ29yeSB1bml0Q2F0ZWdvcnkoQ1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyk7CiAKICAgICBib29sIGlzQW5nbGUoKSBjb25zdAog
ICAgIHsKQEAgLTMyNCw2ICszMjUsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlcG9ydERlc2Nl
bmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKKyAgICBzdGF0aWMg
VW5pdFR5cGVzIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2F0ZWdvcnkoVW5pdENhdGVnb3J5KTsKKyAg
ICBzdGF0aWMgZG91YmxlIGNvbnZlcnNpb25Ub0Nhbm9uaWNhbFVuaXRzU2NhbGVGYWN0b3IodW5z
aWduZWQgc2hvcnQgdW5pdFR5cGUpOworCiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBpbnQgdnMu
IHVuc2lnbmVkIG92ZXJsb2FkaW5nIGlzIHRvbyBzdWJ0bGUgdG8gZGlzdGluZ3Vpc2ggdGhlIGNv
bG9yIGFuZCBpZGVudGlmaWVyIGNhc2VzLgogICAgIENTU1ByaW1pdGl2ZVZhbHVlKGludCBpZGVu
dCk7CkBAIC0zNDksNyArMzUzLDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBjcmVhdGUo
dW5zaWduZWQpOyAvLyBjb21waWxlLXRpbWUgZ3VhcmQKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBvcGVyYXRvciBUKigpOyAvLyBjb21waWxlLXRpbWUgZ3VhcmQKIAotICAgIHN0YXRpYyBVbml0
VHlwZXMgY2Fub25pY2FsVW5pdFR5cGVGb3JDYXRlZ29yeShVbml0Q2F0ZWdvcnkgY2F0ZWdvcnkp
OwogCiAgICAgdm9pZCBpbml0KFBhc3NSZWZQdHI8Q291bnRlcj4pOwogICAgIHZvaWQgaW5pdChQ
YXNzUmVmUHRyPFJlY3Q+KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyNjU5MTg2MThkNjkxZjI3OWIyNDk0MmUzNmE0NzM3
MDI0YWNmZGJmLi4yZDcwOGZlM2I3MTFhMjA4ZmVjYjBhYzU4M2Y1MThlYmQ2NzNmOThlIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDMtMjYgIEFsYW4gQ3V0dGVyICA8YWxhbmN1dHRlckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkgcGFyc2VkIENTUyBDYWxjIGV4cHJlc3Np
b25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEx
NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNz
czMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQ6CisgICAgICAgICogY3NzMy9jYWxjL3NpbXBsaWZp
Y2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3NzMy9jYWxjL3NpbXBsaWZp
Y2F0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAzLTI2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KIAogICAgICAgICBHcmVlbmluZyB0aGUgbWFjIGJvdHMuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvY3Nz
My9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dAppbmRleCBkNWY1NDNjMjNhMjk1MmViMTEzMjE0YmM2
YTg5MjMzOGViNDZmN2Q1Li5lOTRkMjkzMzA1ZDg4N2EyNTAzZWU2NWVjMWRkYmEwOTA3MmJlNGQ0
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQKQEAgLTEsMTUgKzEs
MTUgQEAKIFRoaXMgdGVzdHMgY2FsYygpIGFuZCB0aGUgQ1NTT00KIAogMTBweCA9PiBjYWxjKDEw
cHgpCi0xMHB4ICsgMTVweCA9PiBjYWxjKDEwcHggKyAxNXB4KQorMTBweCArIDE1cHggPT4gY2Fs
YygyNXB4KQogMTAwJSA9PiBjYWxjKDEwMCUpCiAxMDAlIC0gMTBweCA9PiBjYWxjKDEwMCUgLSAx
MHB4KQotMTBweCArIDEwcHggKiA1ID0+IGNhbGMoMTBweCArICgxMHB4ICogNSkpCisxMHB4ICsg
MTBweCAqIDUgPT4gY2FsYyg2MHB4KQogNXB4ICsgMmVtICsgNmluID0+IGNhbGMoKDVweCArIDJl
bSkgKyA2aW4pCi0xMDAlIC0gMTBweCAvIDIgPT4gY2FsYygxMDAlIC0gKDEwcHggLyAyKSkKKzEw
MCUgLSAxMHB4IC8gMiA9PiBjYWxjKDEwMCUgLSA1cHgpCiAxcHggKyAyZW0gLSAzcmVtICsgNGlu
ID0+IGNhbGMoKCgxcHggKyAyZW0pIC0gM3JlbSkgKyA0aW4pCi0xMDBweCAqICgxICsgMiAqIDMg
LSA0IC8gNSkgPT4gY2FsYygxMDBweCAqICgoMSArICgyICogMykpIC0gKDQgLyA1KSkpCi0oMTAw
cHgpICsgMjAwcHggPT4gY2FsYygxMDBweCArIDIwMHB4KQorMTAwcHggKiAoMSArIDIgKiAzIC0g
NCAvIDUpID0+IGNhbGMoNjIwcHgpCisoMTAwcHgpICsgMjAwcHggPT4gY2FsYygzMDBweCkKICgo
KCgoKCgoKCgxMDBweCkpKSkpKSkpKSkgPT4gY2FsYygxMDBweCkKIGZsaW1zdGl4ID0+IGNhbGMo
MTAwcHgpCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNhdGlv
bi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24tZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlMjQ4NjhkMzk1ZTk1NGI1YmI0NmYzNDRhOGMxZDAwOGY0
M2ZkODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmlj
YXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgdGVzdHMgcGFyc2UgdGlt
ZSBzaW1wbGlmaWNhdGlvbiBpbiBjYWxjKCkKKworMTAwcHggKiAoMjUgKyA1KSA9PiBjYWxjKDMw
MDBweCkKKzEwMGVtICogKDI1IC0gNSkgPT4gY2FsYygyMDAwZW0pCisxMDBleCAqICgyICogNSAt
IDUpID0+IGNhbGMoNTAwZXgpCisxMDBjbSAqICg1IC0gNCAvIDUpID0+IGNhbGMoNDIwY20pCisx
MDBtbSAqICgyLjQgKiA1IC0gOCAvIDUpID0+IGNhbGMoMTA0MG1tKQorMTAwaW4gKiAoNiAqICg1
IC0gNCkgLyA4KSA9PiBjYWxjKDc1aW4pCisxcHggKiAoMyArIDEvKDcgKyAxLygxNSArIDEvKDEg
KyAxLygyOTIgKyAxLygxICsgMS8oMSArIDEvKDEgKyAxKSkpKSkpKSkgPT4gY2FsYygzLjE0MTU5
MjY1MzU1ODM1NzRweCkKKzEwMHBjICogMjAgKyAxMDByZW0gKiAxMCAtIDEwMGNoICogNSArIDEw
MHBjID0+IGNhbGMoKCgyMDAwcGMgKyAxMDAwcmVtKSAtIDUwMGNoKSArIDEwMHBjKQorKCgxMDBw
eCArIDIwICogNXB4KSAqIDEwIC0gNSAqICgxMGVtICogNSArIDEwZW0pKSAqIDIgPT4gY2FsYygo
MjAwMHB4IC0gMzAwZW0pICogMikKKzEwMHB4ICsgMWluID0+IGNhbGMoMTk2cHgpCisxMCAqIDEw
cHggKyAwLjUgKiAyaW4gPT4gY2FsYygxOTZweCkKKzEwMHB4ICsgMWluICsgMTAlID0+IGNhbGMo
MTk2cHggKyAxMCUpCisxMDBweCAtIDFpbiA9PiBjYWxjKDRweCkKKzUwY20gKyA1MGNtID0+IGNh
bGMoMTAwY20pCis1MGNtICsgMTBpbiArIDEwMG1tID0+IGNhbGMoMzIyNy43MTY1MzU0MzMwNzA1
cHgpCisxMDBweCArIDFlbSA9PiBjYWxjKDEwMHB4ICsgMWVtKQorMTAwcHggKyAxZW0gKyAxMDBw
eCA9PiBjYWxjKCgxMDBweCArIDFlbSkgKyAxMDBweCkKKzFlbSArIDFleCA9PiBjYWxjKDFlbSAr
IDFleCkKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9u
Lmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wNmQ2ZmFlY2Y3OTgxN2RlZWRkZTQxMzQ4OTY5YmNiM2ZmNWRhNGU0Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWwKQEAgLTAs
MCArMSwzNiBAQAorPCFET0NUWVBFIEhUTUw+Cis8ZGl2IGlkPSJkdW1teSI+PC9kaXY+Cis8ZGl2
IGlkPSJyZXN1bHRzIj5UaGlzIHRlc3RzIHBhcnNlIHRpbWUgc2ltcGxpZmljYXRpb24gaW4gY2Fs
YygpPGJyPjxicj48L2Rpdj4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAg
d2luZG93LnRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCit2YXIgdGVzdHMgPSBbCisgICAgIjEw
MHB4ICogKDI1ICsgNSkiLAorICAgICIxMDBlbSAqICgyNSAtIDUpIiwKKyAgICAiMTAwZXggKiAo
MiAqIDUgLSA1KSIsCisgICAgIjEwMGNtICogKDUgLSA0IC8gNSkiLAorICAgICIxMDBtbSAqICgy
LjQgKiA1IC0gOCAvIDUpIiwKKyAgICAiMTAwaW4gKiAoNiAqICg1IC0gNCkgLyA4KSIsCisgICAg
IjFweCAqICgzICsgMS8oNyArIDEvKDE1ICsgMS8oMSArIDEvKDI5MiArIDEvKDEgKyAxLygxICsg
MS8oMSArIDEpKSkpKSkpKSIsCisgICAgIjEwMHBjICogMjAgKyAxMDByZW0gKiAxMCAtIDEwMGNo
ICogNSArIDEwMHBjIiwKKyAgICAiKCgxMDBweCArIDIwICogNXB4KSAqIDEwIC0gNSAqICgxMGVt
ICogNSArIDEwZW0pKSAqIDIiLAorICAgICIxMDBweCArIDFpbiIsCisgICAgIjEwICogMTBweCAr
IDAuNSAqIDJpbiIsCisgICAgIjEwMHB4ICsgMWluICsgMTAlIiwKKyAgICAiMTAwcHggLSAxaW4i
LAorICAgICI1MGNtICsgNTBjbSIsCisgICAgIjUwY20gKyAxMGluICsgMTAwbW0iLAorICAgICIx
MDBweCArIDFlbSIsCisgICAgIjEwMHB4ICsgMWVtICsgMTAwcHgiLAorICAgICIxZW0gKyAxZXgi
LAorXTsKKwordmFyIHJlc3VsdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIp
OwordmFyIGR1bW15ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImR1bW15Iik7Citmb3IgKHZh
ciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CisgICAgdmFyIGV4cHJlc3Npb24gPSB0
ZXN0c1tpXTsKKyAgICBkdW1teS5zdHlsZS53aWR0aCA9ICdjYWxjKCcgKyBleHByZXNzaW9uICsg
JyknOworICAgIHJlc3VsdHMuaW5uZXJIVE1MICs9IGV4cHJlc3Npb24gKyAiID0+ICIgKyBkdW1t
eS5zdHlsZS53aWR0aCArICI8YnI+IjsKK30KKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195226</attachid>
            <date>2013-03-26 22:54:26 -0700</date>
            <delta_ts>2016-03-09 09:35:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-111149-20130327165007.patch</filename>
            <type>text/plain</type>
            <size>24480</size>
            <attacher name="Alan Cutter">alancutter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2OTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzYxZDdhZWNkNTg1N2Rm
MDNjY2VkYzQ0NDFkZjZhZDMzNDZjMWE2YS4uNDZhOTI1Y2EwMGY4OTk3MDM0ODhkMzljNzllYTlh
ZmFiNTM0ZWNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAzLTI2ICBBbGFu
IEN1dHRlciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFNpbXBsaWZ5IHBh
cnNlZCBDU1MgQ2FsYyBleHByZXNzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTExMTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgYmFzaWMgc2ltcGxpZmljYXRpb24gb2YgbnVtYmVycyBh
bmQgdW5pdHMgaW4gQ1NTIGNhbGMgZXhwcmVzc2lvbnMgYXQgcGFyc2UgdGltZS4KKworICAgICAg
ICBUZXN0OiBjc3MzL2NhbGMvc2ltcGxpZmljYXRpb24uaHRtbAorCisgICAgICAgICogY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzRG91YmxlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDU1NDYWxjUHJpbWl0aXZlVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpkb3VibGVWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OnByaW1pdGl2ZVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNJbnRlZ2VyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNC
aW5hcnlPcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChDU1NDYWxjQmluYXJ5T3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVyYXRpb246OmNyZWF0ZVNpbXBs
aWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6cHJpbWl0
aXZlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjQmluYXJ5T3BlcmF0aW9uOjpDU1ND
YWxjQmluYXJ5T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNCaW5hcnlPcGVy
YXRpb246OmdldE51bWJlclNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9w
ZXJhdGlvbjo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0JpbmFyeU9wZXJh
dGlvbjo6ZXZhbHVhdGVPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWVUZXJtKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lv
bik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNl
QWRkaXRpdmVWYWx1ZUV4cHJlc3Npb24pOgorICAgICAgICAqIGNzcy9DU1NDYWxjdWxhdGlvblZh
bHVlLmg6CisgICAgICAgIChDU1NDYWxjRXhwcmVzc2lvbk5vZGUpOgorICAgICAgICAqIGNzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1
ZTo6dW5pdENhdGVnb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ByaW1pdGl2ZVZhbHVlOjpj
b252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKENTU1ByaW1pdGl2ZVZhbHVlKToKKwogMjAxMy0w
My0yNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBb
Y2FdIFRlbGwgQ0EgdG8gY2xlYW4gdXAgdW51c2VkIHJlc291cmNlcyBpZiBhIGdpdmVuIFdlYlBy
b2Nlc3Mgd29uJ3QgYmUgZHJhd2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9u
VmFsdWUuY3BwCmluZGV4IDIzOWM5OWQyYzRmZjIzODEzODZmNTBlZDU5MzBiNzg4NDE2YWE0NTQu
LjE4MGIxODVjN2M2ODg3ODVjOWY3NTZhMDc3OGExNWEyN2M0YWJhN2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAgLTc4LDYgKzc4LDcwIEBAIHN0YXRp
YyBDYWxjdWxhdGlvbkNhdGVnb3J5IHVuaXRDYXRlZ29yeShDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzIHR5cGUpCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBoYXNEb3VibGVWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUjoKKyAgICBjYXNlIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0lOVEVHRVI6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0U6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUzoK
KyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRVhTOgorICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DSFM6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JFTVM6
CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYOgorICAgIGNhc2UgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19DTToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTU06Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lOOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEM6CisgICAg
Y2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUkFEOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSFo6CisgICAgY2Fz
ZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0tIWjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRElNRU5TSU9OOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WVzoKKyAg
ICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVkg6CisgICAgY2FzZSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1ZNSU46CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZNQVg6Cisg
ICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFg6CisgICAgY2FzZSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0RQSToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBDTToK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VO
S05PV046CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORzoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JREVOVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQVRUUjoKKyAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQ09VTlRFUjoKKyAgICBjYXNlIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUkVDVDoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09M
T1I6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBSVI6CisjaWYgRU5BQkxFKERB
U0hCT0FSRF9TVVBQT1JUKQorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EQVNIQk9B
UkRfUkVHSU9OOgorI2VuZGlmCisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOSUNP
REVfUkFOR0U6CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9PUEVSQVRP
UjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEFSU0VSX0hFWENPTE9SOgorICAg
IGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QQVJTRVJfSURFTlRJRklFUjoKKyAgICBjYXNl
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVFVSTjoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfQ09VTlRFUl9OQU1FOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TSEFQ
RToKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUVVBRDoKKyAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfQ0FMQzoKKyAgICBjYXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
Q0FMQ19QRVJDRU5UQUdFX1dJVEhfTlVNQkVSOgorICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lUSF9MRU5HVEg6CisjaWYgRU5BQkxFKENTU19WQVJJQUJM
RVMpCisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZBUklBQkxFX05BTUU6CisjZW5k
aWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgU3RyaW5nIGJ1aWxkQ3NzVGV4dChj
b25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiB7CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CkBA
IC0xNDUsNyArMjA5LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKHZhbHVlLCBpc0ludGVnZXIpKTsKICAgICB9Ci0g
ICAgCisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NDYWxjUHJpbWl0aXZlVmFsdWU+IGNyZWF0
ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSwgYm9vbCBp
c0ludGVnZXIpCisgICAgeworICAgICAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkgfHwgc3RkOjpp
c2luZih2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWx1ZSwgdHlwZSkuZ2V0KCksIGlzSW50ZWdlcikpOworICAgIH0KKwogICAgIHZpcnR1YWwgYm9v
bCBpc1plcm8oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFtX3ZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpOwpAQCAtMTkyLDIwICsyNjMsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBk
b3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAogICAgIHsKLSAgICAgICAgc3dpdGNoIChtX2NhdGVn
b3J5KSB7Ci0gICAgICAgIGNhc2UgQ2FsY051bWJlcjoKLSAgICAgICAgY2FzZSBDYWxjUGVyY2Vu
dDogICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChoYXNEb3VibGVWYWx1ZShwcmltaXRpdmVU
eXBlKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0g
ICAgICAgIGNhc2UgQ2FsY0xlbmd0aDoKLSAgICAgICAgY2FzZSBDYWxjUGVyY2VudExlbmd0aDoK
LSAgICAgICAgY2FzZSBDYWxjUGVyY2VudE51bWJlcjoKLSNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxF
UykKLSAgICAgICAgY2FzZSBDYWxjVmFyaWFibGU6Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBDYWxj
T3RoZXI6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICAKQEAgLTI0NSw2ICszMDYsMTEgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBDc3NDYWxjUHJpbWl0aXZlVmFs
dWU7IH0KICAgICAKKyAgICB2aXJ0dWFsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgcHJp
bWl0aXZlVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcyhtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOworICAgIH0KKwogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWUq
IHZhbHVlLCBib29sIGlzSW50ZWdlcikKICAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUo
dW5pdENhdGVnb3J5KChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT5wcmltaXRp
dmVUeXBlKCkpLCBpc0ludGVnZXIpCkBAIC0yNTYsMTIgKzMyMiwxMyBAQCBwcml2YXRlOgogfTsK
IAogc3RhdGljIGNvbnN0IENhbGN1bGF0aW9uQ2F0ZWdvcnkgYWRkU3VidHJhY3RSZXN1bHRbQ2Fs
Y090aGVyXVtDYWxjT3RoZXJdID0gewotICAgIHsgQ2FsY051bWJlciwgICAgICAgIENhbGNPdGhl
ciwgICAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhl
ciB9LAotICAgIHsgQ2FsY090aGVyLCAgICAgICAgIENhbGNMZW5ndGgsICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCwgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TGVuZ3RoIH0sCi0gICAg
eyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJjZW50LCAgICAg
ICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGggfSwKLSAgICB7IENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNQZXJj
ZW50TnVtYmVyLCBDYWxjT3RoZXIgfSwKLSAgICB7IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNPdGhlciwgICAgICAgICBDYWxjUGVy
Y2VudExlbmd0aCB9LAotfTsgICAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgIENhbGNOdW1i
ZXIgICAgICAgICBDYWxjTGVuZ3RoICAgICAgICAgQ2FsY1BlcmNlbnQgICAgICAgIENhbGNQZXJj
ZW50TnVtYmVyICBDYWxjUGVyY2VudExlbmd0aAorLyogQ2FsY051bWJlciAqLyAgICAgICAgeyBD
YWxjTnVtYmVyLCAgICAgICAgQ2FsY090aGVyLCAgICAgICAgIENhbGNQZXJjZW50TnVtYmVyLCBD
YWxjUGVyY2VudE51bWJlciwgQ2FsY090aGVyIH0sCisvKiBDYWxjTGVuZ3RoICovICAgICAgICB7
IENhbGNPdGhlciwgICAgICAgICBDYWxjTGVuZ3RoLCAgICAgICAgQ2FsY1BlcmNlbnRMZW5ndGgs
IENhbGNPdGhlciwgICAgICAgICBDYWxjUGVyY2VudExlbmd0aCB9LAorLyogQ2FsY1BlcmNlbnQg
Ki8gICAgICAgeyBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGgsIENhbGNQZXJj
ZW50LCAgICAgICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnRMZW5ndGggfSwKKy8qIENh
bGNQZXJjZW50TnVtYmVyICovIHsgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciwgICAgICAg
ICBDYWxjUGVyY2VudE51bWJlciwgQ2FsY1BlcmNlbnROdW1iZXIsIENhbGNPdGhlciB9LAorLyog
Q2FsY1BlcmNlbnRMZW5ndGggKi8geyBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGgsIENhbGNQZXJjZW50TGVuZ3RoLCBDYWxjT3RoZXIsICAgICAgICAgQ2FsY1BlcmNlbnRMZW5n
dGggfSwKK307CiAKIHN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5
KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCiB7CkBAIC0yOTQsMjEgKzM2
MSw4NSBAQCBzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25z
dCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaQogICAgIHJldHVybiBDYWxjT3RoZXI7CiB9
CiAKK3N0YXRpYyBib29sIGlzSW50ZWdlclJlc3VsdChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUqIGxlZnRTaWRlLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIHJpZ2h0U2lkZSwgQ2Fs
Y09wZXJhdG9yIG9wKQoreworICAgIC8vIE5vdCB0ZXN0aW5nIGZvciBhY3R1YWwgaW50ZWdlciB2
YWx1ZXMuCisgICAgLy8gUGVyZm9ybXMgVzNDIHNwZWMncyB0eXBlIGNoZWNraW5nIGZvciBjYWxj
IGludGVnZXJzLgorICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNjYWxj
LXR5cGUtY2hlY2tpbmcKKyAgICByZXR1cm4gb3AgIT0gQ2FsY0RpdmlkZSAmJiBsZWZ0U2lkZS0+
aXNJbnRlZ2VyKCkgJiYgcmlnaHRTaWRlLT5pc0ludGVnZXIoKTsKK30KKwogY2xhc3MgQ1NTQ2Fs
Y0JpbmFyeU9wZXJhdGlvbiA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgewogCiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQ2FsY0JpbmFyeU9wZXJhdGlvbj4gY3JlYXRl
KFBhc3NSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlKFBhc3NSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGxlZnRTaWRlLT5jYXRlZ29yeSgpICE9IENhbGNPdGhlciAmJiByaWdodFNpZGUtPmNhdGVn
b3J5KCkgIT0gQ2FsY090aGVyKTsKLSAgICAgICAgCi0gICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdv
cnkgbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUs
IG9wKTsKIAorICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG5ld0NhdGVnb3J5ID0gZGV0ZXJt
aW5lQ2F0ZWdvcnkoKmxlZnRTaWRlLCAqcmlnaHRTaWRlLCBvcCk7CiAgICAgICAgIGlmIChuZXdD
YXRlZ29yeSA9PSBDYWxjT3RoZXIpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNCaW5hcnlPcGVyYXRpb24obGVmdFNpZGUsIHJpZ2h0
U2lkZSwgb3AsIG5ld0NhdGVnb3J5KSk7CiAgICAgfQotICAgIAorCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVTaW1wbGlmaWVkKFBhc3NSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQorICAgIHsKKyAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBsZWZ0Q2F0ZWdvcnkgPSBsZWZ0U2lkZS0+Y2F0ZWdvcnkoKTsKKyAg
ICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSByaWdodENhdGVnb3J5ID0gcmlnaHRTaWRlLT5jYXRl
Z29yeSgpOworICAgICAgICBBU1NFUlQobGVmdENhdGVnb3J5ICE9IENhbGNPdGhlciAmJiByaWdo
dENhdGVnb3J5ICE9IENhbGNPdGhlcik7CisKKyAgICAgICAgYm9vbCBpc0ludGVnZXIgPSBpc0lu
dGVnZXJSZXN1bHQobGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSwgb3ApOworCisgICAg
ICAgIC8vIFNpbXBsaWZ5IG51bWJlcnMuCisgICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgPT0gQ2Fs
Y051bWJlciAmJiByaWdodENhdGVnb3J5ID09IENhbGNOdW1iZXIpIHsKKyAgICAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgZXZhbHVhdGlvblR5cGUgPSBpc0ludGVnZXIgPyBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSIDogQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVI7CisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoZXZhbHVhdGVPcGVyYXRvcihsZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSwgcmlnaHRTaWRl
LT5kb3VibGVWYWx1ZSgpLCBvcCksIGV2YWx1YXRpb25UeXBlLCBpc0ludGVnZXIpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU2ltcGxpZnkgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIGJldHdl
ZW4gc2FtZSB0eXBlcy4KKyAgICAgICAgaWYgKG9wID09IENhbGNBZGQgfHwgb3AgPT0gQ2FsY1N1
YnRyYWN0KSB7CisgICAgICAgICAgICBpZiAobGVmdENhdGVnb3J5ID09IHJpZ2h0U2lkZS0+Y2F0
ZWdvcnkoKSkgeworICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMg
bGVmdFR5cGUgPSBsZWZ0U2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgICAgIGlm
IChoYXNEb3VibGVWYWx1ZShsZWZ0VHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyByaWdodFR5cGUgPSByaWdodFNpZGUtPnByaW1pdGl2ZVR5
cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRUeXBlID09IHJpZ2h0VHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShldmFsdWF0ZU9wZXJhdG9yKGxlZnRTaWRlLT5kb3VibGVWYWx1ZSgpLCByaWdodFNpZGUtPmRv
dWJsZVZhbHVlKCksIG9wKSwgbGVmdFR5cGUsIGlzSW50ZWdlcik7CisgICAgICAgICAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0Q2F0ZWdvcnkgbGVmdFVuaXRDYXRlZ29yeSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjp1bml0Q2F0ZWdvcnkobGVmdFR5cGUpOworICAgICAgICAgICAgICAg
ICAgICBpZiAobGVmdFVuaXRDYXRlZ29yeSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6VU90aGVyICYm
IGxlZnRVbml0Q2F0ZWdvcnkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRDYXRlZ29yeShyaWdo
dFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzIGNhbm9uaWNhbFR5cGUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y2Fub25pY2FsVW5pdFR5
cGVGb3JDYXRlZ29yeShsZWZ0VW5pdENhdGVnb3J5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjYW5vbmljYWxUeXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBsZWZ0VmFsdWUgPSBsZWZ0U2lkZS0+
ZG91YmxlVmFsdWUoKSAqIENTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5vbmljYWxV
bml0c1NjYWxlRmFjdG9yKGxlZnRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgcmlnaHRWYWx1ZSA9IHJpZ2h0U2lkZS0+ZG91YmxlVmFsdWUoKSAqIENTU1ByaW1pdGl2
ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKHJpZ2h0VHlwZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3IobGVmdFZhbHVlLCByaWdodFZhbHVlLCBvcCksIGNh
bm9uaWNhbFR5cGUsIGlzSW50ZWdlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBTaW1wbGlmeSBtdWx0aXBseWluZyBvciBkaXZp
ZGluZyBieSBhIG51bWJlciBmb3Igc2ltcGxpZmlhYmxlIHR5cGVzLgorICAgICAgICAgICAgQVNT
RVJUKG9wID09IENhbGNNdWx0aXBseSB8fCBvcCA9PSBDYWxjRGl2aWRlKTsKKyAgICAgICAgICAg
IENTU0NhbGNFeHByZXNzaW9uTm9kZSogbnVtYmVyU2lkZSA9IGdldE51bWJlclNpZGUobGVmdFNp
ZGUuZ2V0KCksIHJpZ2h0U2lkZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIW51bWJlclNpZGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZShsZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCk7
CisgICAgICAgICAgICBpZiAobnVtYmVyU2lkZSA9PSBsZWZ0U2lkZSAmJiBvcCA9PSBDYWxjRGl2
aWRlKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlKiBvdGhlclNpZGUgPSBsZWZ0U2lkZSA9PSBudW1iZXJTaWRlID8gcmlnaHRTaWRl
LmdldCgpIDogbGVmdFNpZGUuZ2V0KCk7CisKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXIgPSBu
dW1iZXJTaWRlLT5kb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4obnVt
YmVyKSB8fCBzdGQ6OmlzaW5mKG51bWJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICBpZiAob3AgPT0gQ2FsY0RpdmlkZSAmJiAhbnVtYmVyKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworCisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
IG90aGVyVHlwZSA9IG90aGVyU2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgaWYg
KGhhc0RvdWJsZVZhbHVlKG90aGVyVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIENTU0Nh
bGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3Iob3RoZXJTaWRlLT5kb3Vi
bGVWYWx1ZSgpLCBudW1iZXIsIG9wKSwgb3RoZXJUeXBlLCBpc0ludGVnZXIpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGNyZWF0ZShsZWZ0U2lkZSwgcmlnaHRTaWRlLCBvcCk7CisgICAg
fQorCiAgICAgdmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gIWRvdWJsZVZhbHVlKCk7CkBAIC0zODgsMTggKzUxOSw2NSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIENzc0NhbGNCaW5hcnlPcGVyYXRpb247
IH0KIAorICAgIHZpcnR1YWwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyBwcmltaXRpdmVU
eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9jYXRlZ29yeSkgeworICAgICAg
ICBjYXNlIENhbGNOdW1iZXI6CisgICAgICAgICAgICBBU1NFUlQobV9sZWZ0U2lkZS0+Y2F0ZWdv
cnkoKSA9PSBDYWxjTnVtYmVyICYmIG1fcmlnaHRTaWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1i
ZXIpOworICAgICAgICAgICAgaWYgKG1faXNJbnRlZ2VyKQorICAgICAgICAgICAgICAgIHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BBUlNFUl9JTlRFR0VSOworICAgICAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworICAgICAgICBjYXNlIENhbGNMZW5n
dGg6CisgICAgICAgIGNhc2UgQ2FsY1BlcmNlbnQ6IHsKKyAgICAgICAgICAgIGlmIChtX2xlZnRT
aWRlLT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
cmlnaHRTaWRlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICBpZiAobV9yaWdodFNpZGUt
PmNhdGVnb3J5KCkgPT0gQ2FsY051bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9sZWZ0
U2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcyBsZWZ0VHlwZSA9IG1fbGVmdFNpZGUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAg
ICAgIGlmIChsZWZ0VHlwZSA9PSBtX3JpZ2h0U2lkZS0+cHJpbWl0aXZlVHlwZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBsZWZ0VHlwZTsKKyAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1VOS05PV047CisgICAgICAgIH0KKyNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxF
UykKKyAgICAgICAgY2FzZSBDYWxjVmFyaWFibGU6CisgICAgICAgICAgICByZXR1cm4gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19WQVJJQUJMRV9OQU1FOworI2VuZGlmCisgICAgICAgIGNhc2UgQ2Fs
Y1BlcmNlbnRMZW5ndGg6CisgICAgICAgIGNhc2UgQ2FsY1BlcmNlbnROdW1iZXI6CisgICAgICAg
IGNhc2UgQ2FsY090aGVyOgorICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVU5LTk9XTjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKKyAgICB9CisKKwog
cHJpdmF0ZToKICAgICBDU1NDYWxjQmluYXJ5T3BlcmF0aW9uKFBhc3NSZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBsZWZ0U2lkZSwgUGFzc1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5
KQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSwgbGVmdFNpZGUtPmlz
SW50ZWdlcigpICYmIHJpZ2h0U2lkZS0+aXNJbnRlZ2VyKCkpCisgICAgICAgIDogQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlKGNhdGVnb3J5LCBpc0ludGVnZXJSZXN1bHQobGVmdFNpZGUuZ2V0KCksIHJp
Z2h0U2lkZS5nZXQoKSwgb3ApKQogICAgICAgICAsIG1fbGVmdFNpZGUobGVmdFNpZGUpCiAgICAg
ICAgICwgbV9yaWdodFNpZGUocmlnaHRTaWRlKQogICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCiAg
ICAgewogICAgIH0KLSAgICAKLSAgICBkb3VibGUgZXZhbHVhdGUoZG91YmxlIGxlZnRWYWx1ZSwg
ZG91YmxlIHJpZ2h0VmFsdWUpIGNvbnN0CisKKyAgICBzdGF0aWMgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlKiBnZXROdW1iZXJTaWRlKENTU0NhbGNFeHByZXNzaW9uTm9kZSogbGVmdFNpZGUsIENTU0Nh
bGNFeHByZXNzaW9uTm9kZSogcmlnaHRTaWRlKQorICAgIHsKKyAgICAgICAgaWYgKGxlZnRTaWRl
LT5jYXRlZ29yeSgpID09IENhbGNOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gbGVmdFNpZGU7
CisgICAgICAgIGlmIChyaWdodFNpZGUtPmNhdGVnb3J5KCkgPT0gQ2FsY051bWJlcikKKyAgICAg
ICAgICAgIHJldHVybiByaWdodFNpZGU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IGRvdWJsZSBldmFsdWF0ZShkb3VibGUgbGVmdFNpZGUsIGRvdWJsZSByaWdodFNpZGUpIGNvbnN0
CiAgICAgewotICAgICAgICBzd2l0Y2ggKG1fb3BlcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIGV2
YWx1YXRlT3BlcmF0b3IobGVmdFNpZGUsIHJpZ2h0U2lkZSwgbV9vcGVyYXRvcik7CisgICAgfQor
CisgICAgc3RhdGljIGRvdWJsZSBldmFsdWF0ZU9wZXJhdG9yKGRvdWJsZSBsZWZ0VmFsdWUsIGRv
dWJsZSByaWdodFZhbHVlLCBDYWxjT3BlcmF0b3Igb3ApCisgICAgeworICAgICAgICBzd2l0Y2gg
KG9wKSB7CiAgICAgICAgIGNhc2UgQ2FsY0FkZDoKICAgICAgICAgICAgIHJldHVybiBsZWZ0VmFs
dWUgKyByaWdodFZhbHVlOwogICAgICAgICBjYXNlIENhbGNTdWJ0cmFjdDoKQEAgLTQxMyw3ICs1
OTEsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAg
ICAKKwogICAgIGNvbnN0IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fbGVmdFNpZGU7
CiAgICAgY29uc3QgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9yaWdodFNpZGU7CiAg
ICAgY29uc3QgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7CkBAIC00NzksNyArNjU3LDcgQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoJmRlcHRoLCAqaW5k
ZXgsIHRva2VucykgIT0gT0spCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgIAotICAgICAg
ICAKKwogICAgICAgICBpZiAob3BlcmF0b3JWYWx1ZSh0b2tlbnMsICppbmRleCkgPT0gJygnKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSAqaW5kZXggKyAxOwogICAgICAg
ICAgICAgaWYgKCFwYXJzZVZhbHVlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCAmY3VycmVudElu
ZGV4LCByZXN1bHQpKQpAQCAtNTEyLDcgKzY5MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoIXBhcnNlVmFsdWVUZXJtKHRva2VucywgZGVwdGgsIGluZGV4LCAmcmhzKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1ND
YWxjQmluYXJ5T3BlcmF0aW9uOjpjcmVhdGUocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBzdGF0
aWNfY2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CisgICAgICAgICAgICBy
ZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlU2ltcGxpZmllZChy
ZXN1bHQtPnZhbHVlLCByaHMudmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0
b3JDaGFyYWN0ZXIpKTsKICAgICAgICAgICAgIGlmICghcmVzdWx0LT52YWx1ZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUzOSw3ICs3MTcsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlTXVsdGlwbGljYXRpdmVFeHByZXNzaW9u
KHRva2VucywgZGVwdGgsIGluZGV4LCAmcmhzKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjQmluYXJ5T3BlcmF0aW9u
OjpjcmVhdGUocmVzdWx0LT52YWx1ZSwgcmhzLnZhbHVlLCBzdGF0aWNfY2FzdDxDYWxjT3BlcmF0
b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSk7CisgICAgICAgICAgICByZXN1bHQtPnZhbHVlID0gQ1NT
Q2FsY0JpbmFyeU9wZXJhdGlvbjo6Y3JlYXRlU2ltcGxpZmllZChyZXN1bHQtPnZhbHVlLCByaHMu
dmFsdWUsIHN0YXRpY19jYXN0PENhbGNPcGVyYXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpKTsKICAg
ICAgICAgICAgIGlmICghcmVzdWx0LT52YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxh
dGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCmlu
ZGV4IDU2OWRiZGVhMGIwZjJiM2I4OThhZTdhNGM3MjJmMGI1NjRiYWRmODQuLjMxZGM2MGI1ZTk0
MDNlNTExMjVjNmI5OWQ4ZWNjMGM2ZDFkMjYwYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nh
bGN1bGF0aW9uVmFsdWUuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBDU1NDYWxjdWxhdGlv
blZhbHVlX2gKIAogI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgorI2luY2x1ZGUgIkNTU1By
aW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKICNpbmNsdWRlICJDYWxjdWxh
dGlvblZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTgwLDYgKzgxLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwogCiAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJuIG1fY2F0ZWdvcnk7IH0g
ICAgCisgICAgdmlydHVhbCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzIHByaW1pdGl2ZVR5
cGUoKSBjb25zdCA9IDA7CiAgICAgYm9vbCBpc0ludGVnZXIoKSBjb25zdCB7IHJldHVybiBtX2lz
SW50ZWdlcjsgfQogICAgIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRp
dmVWYWx1ZS5jcHAKaW5kZXggYWNkNzg3N2U3Y2VjMDFmYjUwOTBhZWRkOWJkNDgzZmY1YWU0NTU4
MC4uNzhmYzgxYTc3NTQzNjQ4ZDU4NGU2MzFjYWNhZGNiYzAwMDY4ODJiZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgc3RhdGlj
IGlubGluZSBib29sIGlzVmFsaWRDU1NVbml0VHlwZUZvckRvdWJsZUNvbnZlcnNpb24oQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdENhdGVnb3J5IHVuaXRDYXRlZ29yeShDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzIHR5cGUpCitDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdENhdGVnb3J5IENTU1ByaW1p
dGl2ZVZhbHVlOjp1bml0Q2F0ZWdvcnkoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBl
KQogewogICAgIC8vIEhlcmUgd2UgdmlvbGF0ZSB0aGUgc3BlYyAoaHR0cDovL3d3dy53My5vcmcv
VFIvRE9NLUxldmVsLTItU3R5bGUvY3NzLmh0bWwjQ1NTLUNTU1ByaW1pdGl2ZVZhbHVlKSBhbmQg
YWxsb3cgY29udmVyc2lvbnMKICAgICAvLyBiZXR3ZWVuIENTU19QWCBhbmQgcmVsYXRpdmUgbGVu
Z3RocyAoc2VlIGNzc1BpeGVsc1BlckluY2ggY29tbWVudCBpbiBDU1NIZWxwZXIuaCBmb3IgdGhl
IHRvcGljIHRyZWF0bWVudCkuCkBAIC01OTYsNyArNTk2LDcgQEAgdm9pZCBDU1NQcmltaXRpdmVW
YWx1ZTo6c2V0RmxvYXRWYWx1ZSh1bnNpZ25lZCBzaG9ydCwgZG91YmxlLCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKIH0KIAotc3RhdGlj
IGRvdWJsZSBjb252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKHVuc2lnbmVkIHNo
b3J0IHVuaXRUeXBlKQorZG91YmxlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5v
bmljYWxVbml0c1NjYWxlRmFjdG9yKHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlKQogewogICAgIGRv
dWJsZSBmYWN0b3IgPSAxLjA7CiAgICAgLy8gRklYTUU6IHRoZSBzd2l0Y2ggY2FuIGJlIHJlcGxh
Y2VkIGJ5IGFuIGFycmF5IG9mIHNjYWxlIGZhY3RvcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5oCmluZGV4IDE4ZDIzZmFlN2IwMGIxNzUzNGM3NGZjMDcyN2JhMDU3YzAyMGY5
YmUuLjY0NjY2MWY3N2NiYTYyM2Q5NDU3NTdkZjhiYzZhYzU0OTZmYjZhNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5oCkBAIC0xNTAsNiArMTUwLDcgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgICAgIFVPdGhlcgogICAgIH07CisgICAgc3RhdGljIFVuaXRDYXRlZ29yeSB1
bml0Q2F0ZWdvcnkoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyk7CiAKICAgICBib29sIGlz
QW5nbGUoKSBjb25zdAogICAgIHsKQEAgLTMyNCw2ICszMjUsOSBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7
CiAKKyAgICBzdGF0aWMgVW5pdFR5cGVzIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2F0ZWdvcnkoVW5p
dENhdGVnb3J5KTsKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnNpb25Ub0Nhbm9uaWNhbFVuaXRz
U2NhbGVGYWN0b3IodW5zaWduZWQgc2hvcnQgdW5pdFR5cGUpOworCiBwcml2YXRlOgogICAgIC8v
IEZJWE1FOiBpbnQgdnMuIHVuc2lnbmVkIG92ZXJsb2FkaW5nIGlzIHRvbyBzdWJ0bGUgdG8gZGlz
dGluZ3Vpc2ggdGhlIGNvbG9yIGFuZCBpZGVudGlmaWVyIGNhc2VzLgogICAgIENTU1ByaW1pdGl2
ZVZhbHVlKGludCBpZGVudCk7CkBAIC0zNDksNyArMzUzLDYgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCBjcmVhdGUodW5zaWduZWQpOyAvLyBjb21waWxlLXRpbWUgZ3VhcmQKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBvcGVyYXRvciBUKigpOyAvLyBjb21waWxlLXRpbWUgZ3VhcmQKIAot
ICAgIHN0YXRpYyBVbml0VHlwZXMgY2Fub25pY2FsVW5pdFR5cGVGb3JDYXRlZ29yeShVbml0Q2F0
ZWdvcnkgY2F0ZWdvcnkpOwogCiAgICAgdm9pZCBpbml0KFBhc3NSZWZQdHI8Q291bnRlcj4pOwog
ICAgIHZvaWQgaW5pdChQYXNzUmVmUHRyPFJlY3Q+KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyNjU5MTg2MThkNjkxZjI3
OWIyNDk0MmUzNmE0NzM3MDI0YWNmZGJmLi4yZDcwOGZlM2I3MTFhMjA4ZmVjYjBhYzU4M2Y1MThl
YmQ2NzNmOThlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDMtMjYgIEFsYW4gQ3V0dGVy
ICA8YWxhbmN1dHRlckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgU2ltcGxpZnkgcGFyc2VkIENT
UyBDYWxjIGV4cHJlc3Npb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTExNDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGNzczMvY2FsYy9jc3NvbS1leHBlY3RlZC50eHQ6CisgICAgICAgICogY3Nz
My9jYWxjL3NpbXBsaWZpY2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3Nz
My9jYWxjL3NpbXBsaWZpY2F0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAzLTI2ICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBHcmVlbmluZyB0aGUgbWFjIGJvdHMu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20tZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvY3NzMy9jYWxjL2Nzc29tLWV4cGVjdGVkLnR4dAppbmRleCBkNWY1NDNjMjNh
Mjk1MmViMTEzMjE0YmM2YTg5MjMzOGViNDZmN2Q1Li5lOTRkMjkzMzA1ZDg4N2EyNTAzZWU2NWVj
MWRkYmEwOTA3MmJlNGQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvY3Nzb20t
ZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9jc3NvbS1leHBlY3RlZC50
eHQKQEAgLTEsMTUgKzEsMTUgQEAKIFRoaXMgdGVzdHMgY2FsYygpIGFuZCB0aGUgQ1NTT00KIAog
MTBweCA9PiBjYWxjKDEwcHgpCi0xMHB4ICsgMTVweCA9PiBjYWxjKDEwcHggKyAxNXB4KQorMTBw
eCArIDE1cHggPT4gY2FsYygyNXB4KQogMTAwJSA9PiBjYWxjKDEwMCUpCiAxMDAlIC0gMTBweCA9
PiBjYWxjKDEwMCUgLSAxMHB4KQotMTBweCArIDEwcHggKiA1ID0+IGNhbGMoMTBweCArICgxMHB4
ICogNSkpCisxMHB4ICsgMTBweCAqIDUgPT4gY2FsYyg2MHB4KQogNXB4ICsgMmVtICsgNmluID0+
IGNhbGMoKDVweCArIDJlbSkgKyA2aW4pCi0xMDAlIC0gMTBweCAvIDIgPT4gY2FsYygxMDAlIC0g
KDEwcHggLyAyKSkKKzEwMCUgLSAxMHB4IC8gMiA9PiBjYWxjKDEwMCUgLSA1cHgpCiAxcHggKyAy
ZW0gLSAzcmVtICsgNGluID0+IGNhbGMoKCgxcHggKyAyZW0pIC0gM3JlbSkgKyA0aW4pCi0xMDBw
eCAqICgxICsgMiAqIDMgLSA0IC8gNSkgPT4gY2FsYygxMDBweCAqICgoMSArICgyICogMykpIC0g
KDQgLyA1KSkpCi0oMTAwcHgpICsgMjAwcHggPT4gY2FsYygxMDBweCArIDIwMHB4KQorMTAwcHgg
KiAoMSArIDIgKiAzIC0gNCAvIDUpID0+IGNhbGMoNjIwcHgpCisoMTAwcHgpICsgMjAwcHggPT4g
Y2FsYygzMDBweCkKICgoKCgoKCgoKCgxMDBweCkpKSkpKSkpKSkgPT4gY2FsYygxMDBweCkKIGZs
aW1zdGl4ID0+IGNhbGMoMTAwcHgpCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvY2Fs
Yy9zaW1wbGlmaWNhdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2lt
cGxpZmljYXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2YzQ0ZTIwNDA2MGYzYTMzOTU4
MmJlYjRiMjEzMjk1MzE3MzhhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3Mz
L2NhbGMvc2ltcGxpZmljYXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMg
dGVzdHMgcGFyc2UgdGltZSBzaW1wbGlmaWNhdGlvbiBpbiBjYWxjKCkKKworMTAwcHggKiAoMjUg
KyA1KSA9PiBjYWxjKDMwMDBweCkKKzEwMGVtICogKDI1IC0gNSkgPT4gY2FsYygyMDAwZW0pCisx
MDBleCAqICgyICogNSAtIDUpID0+IGNhbGMoNTAwZXgpCisxMDBjbSAqICg1IC0gNCAvIDUpID0+
IGNhbGMoNDIwY20pCisxMDBtbSAqICgyLjQgKiA1IC0gOCAvIDUpID0+IGNhbGMoMTA0MG1tKQor
MTAwaW4gKiAoNiAqICg1IC0gNCkgLyA4KSA9PiBjYWxjKDc1aW4pCisxcHggKiAoMyArIDEvKDcg
KyAxLygxNSArIDEvKDEgKyAxLygyOTIgKyAxLygxICsgMS8oMSArIDEvKDEgKyAxKSkpKSkpKSkg
PT4gY2FsYygzLjE0MTU5MjY1MzU1ODM1NzRweCkKKzEwMHBjICogMjAgKyAxMDByZW0gKiAxMCAt
IDEwMGNoICogNSArIDEwMHBjID0+IGNhbGMoKCgyMDAwcGMgKyAxMDAwcmVtKSAtIDUwMGNoKSAr
IDEwMHBjKQorKCgxMDBweCArIDIwICogNXB4KSAqIDEwIC0gNSAqICgxMGVtICogNSArIDEwZW0p
KSAqIDIgPT4gY2FsYygoMjAwMHB4IC0gMzAwZW0pICogMikKKzEwMHB4ICsgMWluID0+IGNhbGMo
MTk2cHgpCisxMCAqIDEwcHggKyAwLjUgKiAyaW4gPT4gY2FsYygxOTZweCkKKzEwMHB4ICsgMWlu
ICsgMTAlID0+IGNhbGMoMTk2cHggKyAxMCUpCisxMDBweCAtIDFpbiA9PiBjYWxjKDRweCkKKzUw
Y20gKyA1MGNtID0+IGNhbGMoMTAwY20pCis1MGNtICsgMTBpbiArIDEwMG1tID0+IGNhbGMoMzIy
Ny43MTY1MzU0MzMwNzA1cHgpCisxMDBweCArIDFlbSA9PiBjYWxjKDEwMHB4ICsgMWVtKQorMTAw
cHggKyAxZW0gKyAxMDBweCA9PiBjYWxjKCgxMDBweCArIDFlbSkgKyAxMDBweCkKKzFlbSArIDFy
ZW0gPT4gY2FsYygxZW0gKyAxcmVtKQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2Nh
bGMvc2ltcGxpZmljYXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2NzczMvY2FsYy9zaW1wbGlmaWNh
dGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyZDhkZGI1NmZiY2EzYTNiZDBjYjUzNjI3NGZlZDFmY2Uy
MTg5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9jc3MzL2NhbGMvc2ltcGxpZmlj
YXRpb24uaHRtbApAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgSFRNTD4KKzxkaXYgaWQ9ImR1
bW15Ij48L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdHMiPlRoaXMgdGVzdHMgcGFyc2UgdGltZSBzaW1w
bGlmaWNhdGlvbiBpbiBjYWxjKCk8YnI+PGJyPjwvZGl2PgorPHNjcmlwdD4KK2lmICh3aW5kb3cu
dGVzdFJ1bm5lcikKKyAgICB3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKK3ZhciB0
ZXN0cyA9IFsKKyAgICAiMTAwcHggKiAoMjUgKyA1KSIsCisgICAgIjEwMGVtICogKDI1IC0gNSki
LAorICAgICIxMDBleCAqICgyICogNSAtIDUpIiwKKyAgICAiMTAwY20gKiAoNSAtIDQgLyA1KSIs
CisgICAgIjEwMG1tICogKDIuNCAqIDUgLSA4IC8gNSkiLAorICAgICIxMDBpbiAqICg2ICogKDUg
LSA0KSAvIDgpIiwKKyAgICAiMXB4ICogKDMgKyAxLyg3ICsgMS8oMTUgKyAxLygxICsgMS8oMjky
ICsgMS8oMSArIDEvKDEgKyAxLygxICsgMSkpKSkpKSkpIiwKKyAgICAiMTAwcGMgKiAyMCArIDEw
MHJlbSAqIDEwIC0gMTAwY2ggKiA1ICsgMTAwcGMiLAorICAgICIoKDEwMHB4ICsgMjAgKiA1cHgp
ICogMTAgLSA1ICogKDEwZW0gKiA1ICsgMTBlbSkpICogMiIsCisgICAgIjEwMHB4ICsgMWluIiwK
KyAgICAiMTAgKiAxMHB4ICsgMC41ICogMmluIiwKKyAgICAiMTAwcHggKyAxaW4gKyAxMCUiLAor
ICAgICIxMDBweCAtIDFpbiIsCisgICAgIjUwY20gKyA1MGNtIiwKKyAgICAiNTBjbSArIDEwaW4g
KyAxMDBtbSIsCisgICAgIjEwMHB4ICsgMWVtIiwKKyAgICAiMTAwcHggKyAxZW0gKyAxMDBweCIs
CisgICAgIjFlbSArIDFyZW0iLAorXTsKKwordmFyIHJlc3VsdHMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicmVzdWx0cyIpOwordmFyIGR1bW15ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImR1bW15Iik7Citmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CisgICAg
dmFyIGV4cHJlc3Npb24gPSB0ZXN0c1tpXTsKKyAgICBkdW1teS5zdHlsZS53aWR0aCA9ICdjYWxj
KCcgKyBleHByZXNzaW9uICsgJyknOworICAgIHJlc3VsdHMuaW5uZXJIVE1MICs9IGV4cHJlc3Np
b24gKyAiID0+ICIgKyBkdW1teS5zdHlsZS53aWR0aCArICI8YnI+IjsKK30KKzwvc2NyaXB0Pgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>
<flag name="review"
          id="217071"
          type_id="1"
          status="-"
          setter="darin"
    />
    <flag name="commit-queue"
          id="217080"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>