<?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>84275</bug_id>
          
          <creation_ts>2012-04-18 14:01:40 -0700</creation_ts>
          <short_desc>[chromium] Image masks are considered opaque incorrectly</short_desc>
          <delta_ts>2012-04-24 16:58:27 -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>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>82564</dependson>
    
    <dependson>83608</dependson>
    
    <dependson>84703</dependson>
          <blocked>84494</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>reed</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>605067</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 14:01:40 -0700</bug_when>
    <thetext>[chromium] Image masks are considered opaque incorrectly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605075</commentid>
    <comment_count>1</comment_count>
      <attachid>137766</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 14:12:11 -0700</bug_when>
    <thetext>Created attachment 137766
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605079</commentid>
    <comment_count>2</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 14:19:23 -0700</bug_when>
    <thetext>crbug is http://code.google.com/p/chromium/issues/detail?id=123089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605260</commentid>
    <comment_count>3</comment_count>
      <attachid>137766</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-18 17:33:12 -0700</bug_when>
    <thetext>Comment on attachment 137766
Patch

Would like to add one more unit test for the imageMask but pretend that the image was partly opaque (if this were possible in the future) by using fillRect instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605923</commentid>
    <comment_count>4</comment_count>
      <attachid>137766</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-19 14:36:30 -0700</bug_when>
    <thetext>Comment on attachment 137766
Patch

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

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:158
&gt; +    state.opaqueRect = SkRect::MakeEmpty();

Can this go in the constructor?

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:178
&gt; +    // Track the copy of the whole layer we are popping off the stack, which may destroy opaque
&gt; +    // stuff in the layer below. Then add the layer&apos;s opaque area back into the mix.
&gt; +    didDrawUnbounded(context, layerPaint, transform, FillByCopy);
&gt; +    didDraw(context, transform, layerOpaqueRect, layerPaint, 0, fillsBounds, FillOnly);

Doesn&apos;t doing this clear+add depend on the type of composite operation? Do you always need to do the didDrawUnbounded? (Also, it&apos;s kind of weird to say didDrawUnbounded, since it seems like you know what the paint rect is here?)

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:418
&gt; +    SkRect* trackingRect = &amp;m_opaqueRect;
&gt; +    if (!m_canvasLayerStack.isEmpty())
&gt; +        trackingRect = &amp;m_canvasLayerStack.last().opaqueRect;

Helper function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605932</commentid>
    <comment_count>5</comment_count>
      <attachid>137766</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-19 14:40:57 -0700</bug_when>
    <thetext>Comment on attachment 137766
Patch

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

thanks for looking at this.

&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:158
&gt;&gt; +    state.opaqueRect = SkRect::MakeEmpty();
&gt; 
&gt; Can this go in the constructor?

yes. will do.

&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:178
&gt;&gt; +    didDraw(context, transform, layerOpaqueRect, layerPaint, 0, fillsBounds, FillOnly);
&gt; 
&gt; Doesn&apos;t doing this clear+add depend on the type of composite operation? Do you always need to do the didDrawUnbounded? (Also, it&apos;s kind of weird to say didDrawUnbounded, since it seems like you know what the paint rect is here?)

it does depend on the operation, and that is embedded in this whole thing in the layerPaint.

didDrawUnbounded makes sense because we are copying the entire layer being popped off. What are the bounds of the layer? They are not the same as the tracked opaque rect. Perhaps we could know them.. but I don&apos;t know them here as it is now. But this is okay. If the draw operation is non-destructive (SrcOver for instance) then it does not do anything to the opaqueRect in the layer below. If it is destructive (DstIn for masking) then anything not known to be opaque in the layer above will destroy opaque in the layer below. So this gives the right answer given the information we are tracking.

&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:418
&gt;&gt; +        trackingRect = &amp;m_canvasLayerStack.last().opaqueRect;
&gt; 
&gt; Helper function?

I kinda thought about that too.. will do :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605956</commentid>
    <comment_count>6</comment_count>
      <attachid>137984</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-19 15:00:06 -0700</bug_when>
    <thetext>Created attachment 137984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605985</commentid>
    <comment_count>7</comment_count>
      <attachid>137984</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-19 15:13:31 -0700</bug_when>
    <thetext>Comment on attachment 137984
Patch

(In reply to comment #5)
&gt; &gt; Doesn&apos;t doing this clear+add depend on the type of composite operation? Do you always need to do the didDrawUnbounded? (Also, it&apos;s kind of weird to say didDrawUnbounded, since it seems like you know what the paint rect is here?)

Hm, what&apos;s wrong here is that these need to combined into a single operation. What we want is a bounded chance to &quot;preserveOpaque&quot; under the layer&apos;s opaqueRect. Not to clear and then &quot;preserveOpaque&quot; over what we just cleared to be non-opaque.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606251</commentid>
    <comment_count>8</comment_count>
      <attachid>138018</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-19 18:08:52 -0700</bug_when>
    <thetext>Created attachment 138018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606257</commentid>
    <comment_count>9</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-19 18:13:21 -0700</bug_when>
    <thetext>I added a unit test with an opaque area in the image mask, which exposed also the problem you were talking about I believe as well. So the structure of things is now as follows.

- Added a helper bool getTotalClippedBounds() method. Since we were computing the cliprect now in 3 places (didDraw, didDrawUnbounded, and the new applyLayerOpaqueRect).

- Added a helper SkRect&amp; currentTrackingOpaqueRect() which gives the active SkRect that should be modified.

- Added applyLayerOpaqueRegion() which takes the tracked opaque region for a source layer, along with the current clip, and applies it to the current layer.

- Have popCanvasLayer compute the current clip and see if the source layer gets clipped away. Then have it see if it can bound the tracked opaque region in the source layer. If not, we just do an unbounded draw cuz we don&apos;t know what is opaque. Otherwise, use applyLayerOpaqueRegion().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606262</commentid>
    <comment_count>10</comment_count>
      <attachid>138022</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-19 18:18:31 -0700</bug_when>
    <thetext>Created attachment 138022
Patch

Rename applyLayerOpaqueRegion to applyOpaqueRegionFromLayer. And a little change to try keep logic out of popCanvasLayer and inside applyOpaqueRegionFromLayer instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606722</commentid>
    <comment_count>11</comment_count>
      <attachid>138022</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-20 11:07:23 -0700</bug_when>
    <thetext>Comment on attachment 138022
Patch

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

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:162
&gt; +        clippedBounds.setEmpty();

This function is really inconsistent about if and what it sets clippedBounds to when returning false.

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:197
&gt; +    SkRect clippedBounds;

Whoa there, potentially uninitialized SkRect.

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:354
&gt; +    if (clippedBounds.isEmpty())
&gt; +        return;

Should clippedBounds be initialized to layerOpaqueRect in the case not having a clip? I&apos;m guessing here that clipped bounds being empty is trying to imply that the entire layer is clipped away?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606727</commentid>
    <comment_count>12</comment_count>
      <attachid>138022</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-20 11:15:31 -0700</bug_when>
    <thetext>Comment on attachment 138022
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:162
&gt;&gt; +        clippedBounds.setEmpty();
&gt; 
&gt; This function is really inconsistent about if and what it sets clippedBounds to when returning false.

false is meant to mean there is no clippedBounds. If it returns false you cannot use the clippedBounds for anything.

true means that there is a valid rect in clippedBounds so you may use it. I can clarify this in the comment for the function.

&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:197
&gt;&gt; +    SkRect clippedBounds;
&gt; 
&gt; Whoa there, potentially uninitialized SkRect.

Yes, but if getTotalClippedBounds() returns false, then fillsBounds = false and we never use the clippedBounds.

Do you want me to reorder this code to make that more clear?

&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:354
&gt;&gt; +        return;
&gt; 
&gt; Should clippedBounds be initialized to layerOpaqueRect in the case not having a clip? I&apos;m guessing here that clipped bounds being empty is trying to imply that the entire layer is clipped away?

Right it means exactly that.

clippedBounds is set to something valid if getTotalClippedBounds returned true. I think this comment depends on my previous responses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606735</commentid>
    <comment_count>13</comment_count>
      <attachid>138022</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-20 11:26:14 -0700</bug_when>
    <thetext>Comment on attachment 138022
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:197
&gt;&gt;&gt; +    SkRect clippedBounds;
&gt;&gt; 
&gt;&gt; Whoa there, potentially uninitialized SkRect.
&gt; 
&gt; Yes, but if getTotalClippedBounds() returns false, then fillsBounds = false and we never use the clippedBounds.
&gt; 
&gt; Do you want me to reorder this code to make that more clear?

Oops, sorry.  I missed the &apos;return&apos; there when reading the code and misunderstood the intention.  However, in that case, does that mean that you don&apos;t apply an opaque rect from an unclipped layer? (Maybe I just need more context about when layers are not clipped?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606737</commentid>
    <comment_count>14</comment_count>
      <attachid>138022</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-20 11:31:55 -0700</bug_when>
    <thetext>Comment on attachment 138022
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:197
&gt;&gt;&gt;&gt; +    SkRect clippedBounds;
&gt;&gt;&gt; 
&gt;&gt;&gt; Whoa there, potentially uninitialized SkRect.
&gt;&gt; 
&gt;&gt; Yes, but if getTotalClippedBounds() returns false, then fillsBounds = false and we never use the clippedBounds.
&gt;&gt; 
&gt;&gt; Do you want me to reorder this code to make that more clear?
&gt; 
&gt; Oops, sorry.  I missed the &apos;return&apos; there when reading the code and misunderstood the intention.  However, in that case, does that mean that you don&apos;t apply an opaque rect from an unclipped layer? (Maybe I just need more context about when layers are not clipped?)

It&apos;s not that the layer is &apos;unclipped&apos;, it&apos;s more that the current clip is something we can&apos;t represent as a rectangle. For example, it could be a path, or a diamond, or whatever.

In this case, we don&apos;t know what will be clipped from the layerOpaqueRect - essentially we have no layerOpaqueRect anymore, so we just do an &quot;unboundedDraw&quot;. This will act like we drew something completely undefined/unknown and just check if it could possibly destroy already opaque areas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606831</commentid>
    <comment_count>15</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-20 12:58:36 -0700</bug_when>
    <thetext>I think this will be cleaner on top of bug #83608 so rebasing on top of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606864</commentid>
    <comment_count>16</comment_count>
      <attachid>138154</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-20 13:48:00 -0700</bug_when>
    <thetext>Created attachment 138154
Patch

Rebased and I removed the changes to didDrawUnbounded() and made the whole thing a whole lot cleaner!

I&apos;ll followup with a CL to fix up didDrawUnbounded().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607132</commentid>
    <comment_count>17</comment_count>
      <attachid>138214</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-20 19:07:02 -0700</bug_when>
    <thetext>Created attachment 138214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607133</commentid>
    <comment_count>18</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-20 19:07:29 -0700</bug_when>
    <thetext>Rebased for ews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607288</commentid>
    <comment_count>19</comment_count>
      <attachid>138214</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-21 16:30:23 -0700</bug_when>
    <thetext>Comment on attachment 138214
Patch

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

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:334
&gt; +    if (!outsideSourceOpaqueRectPreservesOpaque)
&gt; +        markRectAsNonOpaque(deviceClipRect);

Do you need to check for deviceClipIsARect here before you use deviceClipRect and maybe do a markAllAsNonOpaque if it&apos;s not? Can you add a test for a layer without a clip that destroys opacity?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607290</commentid>
    <comment_count>20</comment_count>
      <attachid>138214</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-21 16:54:05 -0700</bug_when>
    <thetext>Comment on attachment 138214
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:334
&gt;&gt; +        markRectAsNonOpaque(deviceClipRect);
&gt; 
&gt; Do you need to check for deviceClipIsARect here before you use deviceClipRect and maybe do a markAllAsNonOpaque if it&apos;s not? Can you add a test for a layer without a clip that destroys opacity?

oh yes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607975</commentid>
    <comment_count>21</comment_count>
      <attachid>138214</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 13:28:19 -0700</bug_when>
    <thetext>Comment on attachment 138214
Patch

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

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:159
&gt; +    if (context-&gt;canvas()-&gt;getClipDeviceBounds(&amp;deviceClipIRect))

Note this gives the bounds of the clip even if it is not a rect.

&gt;&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:334
&gt;&gt;&gt; +        markRectAsNonOpaque(deviceClipRect);
&gt;&gt; 
&gt;&gt; Do you need to check for deviceClipIsARect here before you use deviceClipRect and maybe do a markAllAsNonOpaque if it&apos;s not? Can you add a test for a layer without a clip that destroys opacity?
&gt; 
&gt; oh yes

I think what we want is to use the bounds always (and have getDeviceClipAsRect always return the actual bounds), but then treat it as a rect inside those bounds only if the clip is itself a rect (equal to the bounds). This is the intent of the didDraw code, with its &quot;fillsBounds&quot; variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607976</commentid>
    <comment_count>22</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 13:33:25 -0700</bug_when>
    <thetext>--- a/Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp
+++ b/Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp
@@ -152,16 +152,14 @@ static inline bool paintIsOpaque(const SkPaint&amp; paint, OpaqueRegionSkia::DrawTyp
 static inline bool getDeviceClipAsRect(const PlatformContextSkia* context, SkRect&amp; deviceClipRect)
 {
     // Get the current clip in device coordinate space.
-    if (context-&gt;canvas()-&gt;getClipType() != SkCanvas::kRect_ClipType)
-        return false;
-
     SkIRect deviceClipIRect;
     if (context-&gt;canvas()-&gt;getClipDeviceBounds(&amp;deviceClipIRect))
         deviceClipRect.set(deviceClipIRect);
     else
         deviceClipRect.setEmpty();
 
-    return true;
+    bool isARect = context-&gt;canvas()-&gt;getClipType() == SkCanvas::kRect_ClipType;
+    return isARect;
 }
 
 static inline SkRect&amp; currentTrackingOpaqueRect(SkRect&amp; rootOpaqueRect, Vector&lt;OpaqueRegionSkia::CanvasLayerState, 3&gt;&amp; canvasLayerStack)
@@ -293,7 +291,7 @@ void OpaqueRegionSkia::didDraw(const PlatformContextSkia* context, const SkRect&amp;
     SkRect deviceClipRect;
     if (!getDeviceClipAsRect(context, deviceClipRect))
         fillsBounds = false;
-    else if (!targetRect.intersect(deviceClipRect))
+    if (!targetRect.intersect(deviceClipRect))
         return;
 
     bool drawsOpaque = paintIsOpaque(paint, drawType, sourceBitmap);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607977</commentid>
    <comment_count>23</comment_count>
      <attachid>138414</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 13:33:35 -0700</bug_when>
    <thetext>Created attachment 138414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607980</commentid>
    <comment_count>24</comment_count>
      <attachid>138415</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 13:35:16 -0700</bug_when>
    <thetext>Created attachment 138415
Patch

Fix comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608337</commentid>
    <comment_count>25</comment_count>
      <attachid>138415</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-23 20:29:49 -0700</bug_when>
    <thetext>Comment on attachment 138415
Patch

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

popCanvasLayer looks good, but I still have some confusion around how the logic works in didDraw.

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:293
&gt; +    if (!getDeviceClipAsRect(context, deviceClipRect))
&gt;          fillsBounds = false;

Setting fillsBounds = false makes sense for kComplex_ClipType, but shouldn&apos;t fillsBounds = true for kEmpty_ClipType (which I&apos;m assuming means no clip)? It seems like you should still be able to apply the opaque region, in that case.

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:295
&gt; +    if (!targetRect.intersect(deviceClipRect))
&gt; +        return;

Along the same lines, for kEmpty_ClipType, deviceClipRect is empty, and this will early out, even though it seems like you should be able to record an opaque rect?

Can you add a test where you draw into a layer with an empty clip rect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608338</commentid>
    <comment_count>26</comment_count>
      <attachid>138415</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-23 20:36:40 -0700</bug_when>
    <thetext>Comment on attachment 138415
Patch

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

&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:323
&gt; +    if (deviceClipIsARect &amp;&amp; deviceClipRect.isEmpty())

Or, if kEmpty_ClipType means &quot;clip everything&quot;, this should maybe be just a check for empty?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608340</commentid>
    <comment_count>27</comment_count>
      <attachid>138415</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 20:39:53 -0700</bug_when>
    <thetext>Comment on attachment 138415
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/skia/OpaqueRegionSkia.cpp:323
&gt;&gt; +    if (deviceClipIsARect &amp;&amp; deviceClipRect.isEmpty())
&gt; 
&gt; Or, if kEmpty_ClipType means &quot;clip everything&quot;, this should maybe be just a check for empty?

this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608342</commentid>
    <comment_count>28</comment_count>
      <attachid>138493</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 20:40:53 -0700</bug_when>
    <thetext>Created attachment 138493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608343</commentid>
    <comment_count>29</comment_count>
      <attachid>138493</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-23 20:43:37 -0700</bug_when>
    <thetext>Comment on attachment 138493
Patch

Thanks for patiently explaining how things work.  R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608346</commentid>
    <comment_count>30</comment_count>
      <attachid>138493</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-23 20:44:08 -0700</bug_when>
    <thetext>Comment on attachment 138493
Patch

Thanks for your thorough review :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608375</commentid>
    <comment_count>31</comment_count>
      <attachid>138493</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 23:12:58 -0700</bug_when>
    <thetext>Comment on attachment 138493
Patch

Clearing flags on attachment: 138493

Committed r115000: &lt;http://trac.webkit.org/changeset/115000&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608376</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 23:13:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608888</commentid>
    <comment_count>33</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-24 11:38:15 -0700</bug_when>
    <thetext>DstIn is not destroying opaque pixels on mac for some reason. Reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609091</commentid>
    <comment_count>34</comment_count>
      <attachid>138651</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-24 14:47:34 -0700</bug_when>
    <thetext>Created attachment 138651
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609094</commentid>
    <comment_count>35</comment_count>
      <attachid>138651</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-24 14:48:11 -0700</bug_when>
    <thetext>Comment on attachment 138651
Patch for landing

Land-safely fail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609095</commentid>
    <comment_count>36</comment_count>
      <attachid>138652</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-24 14:48:35 -0700</bug_when>
    <thetext>Created attachment 138652
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609262</commentid>
    <comment_count>37</comment_count>
      <attachid>138652</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-24 16:58:21 -0700</bug_when>
    <thetext>Comment on attachment 138652
Patch for landing

Clearing flags on attachment: 138652

Committed r115139: &lt;http://trac.webkit.org/changeset/115139&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609263</commentid>
    <comment_count>38</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-24 16:58:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137766</attachid>
            <date>2012-04-18 14:12:11 -0700</date>
            <delta_ts>2012-04-19 15:00:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84275-20120418171209.patch</filename>
            <type>text/plain</type>
            <size>21873</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2U1NjdjNmQ5NTkwNWQx
ZTEyYzc0YmMxZjQ0NDY1ZGEzNjI5NDE0MC4uNTM3ZWEzZjlhYTllYjU5NjIxMzk1ZDVhM2RlMTY2
ODJlZTlmZWFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJl
Z2lvblNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRJc09wYXF1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpwdXNoQ2FudmFzTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2FudmFzTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVl
UmVnaW9uU2tpYTo6ZGlkRHJhd1BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdp
b25Ta2lhOjpkaWREcmF3Qm91bmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25T
a2lhOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERy
YXdVbmJvdW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6bWFya1Jl
Y3RBc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVj
dEFzTm9uT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtB
bGxBc05vbk9wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVS
ZWdpb25Ta2lhLmg6CisgICAgICAgIChPcGFxdWVSZWdpb25Ta2lhKToKKyAgICAgICAgKENhbnZh
c0xheWVyU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpy
ZXN0b3JlTGF5ZXIpOgorCiAyMDEyLTA0LTE3ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBBZGQgVGV4dHVyZVVwbG9hZGVyIHdoaWNo
IGFsbG93cyB1cyB0byB1c2UgcGVyc2lzdGVudCBHQzNEIHN0YXRlIGZvciB0ZXh0dXJlIHVwbG9h
ZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDcwNGJhZDY0YWMyMWEwYjY2YTA0ZjYw
Zjg3YmExNDFmNjc4MzMwODIuLjA1YjI1ODlkOWE1Y2E1NWYxMGM5Nzk0YjEyOTRiOTYxOTQ2NjQ4
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDQt
MTggIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9t
aXVtXSBJbWFnZSBtYXNrcyBhcmUgY29uc2lkZXJlZCBvcGFxdWUgaW5jb3JyZWN0bHkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0Mjc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9y
bUNvbnRleHRTa2lhVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorCiAyMDEyLTA0LTE3ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBBZGQgVGV4dHVyZVVwbG9hZGVyIHdoaWNoIGFs
bG93cyB1cyB0byB1c2UgcGVyc2lzdGVudCBHQzNEIHN0YXRlIGZvciB0ZXh0dXJlIHVwbG9hZHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1
ZVJlZ2lvblNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9P
cGFxdWVSZWdpb25Ta2lhLmNwcAppbmRleCBlNjAyZTYwNzkwNWY3NjQ1MmEyZmRiNmY3ZjRiNWQ3
ZWRlY2ZjZjBjLi4xYzAwMjRlM2E2MjBhYjU1MTgwMWNkZDI2Mzc1Nzg5ODE1ODM3MjQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lv
blNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3Bh
cXVlUmVnaW9uU2tpYS5jcHAKQEAgLTEyNCwxMCArMTI0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBzcmNJ
c09wYXF1CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBhaW50ZWQgd2lsbCBi
ZSBvcGFxdWUuCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50
JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hlY2tGaWxsT25seSA9
IGZhbHNlKQorc3RhdGljIGlubGluZSBib29sIHBhaW50SXNPcGFxdWUoY29uc3QgU2tQYWludCYg
cGFpbnQsIE9wYXF1ZVJlZ2lvblNraWE6OkRyYXdUeXBlIGRyYXdUeXBlLCBjb25zdCBTa0JpdG1h
cCogYml0bWFwKQogeworICAgIGlmIChkcmF3VHlwZSA9PSBPcGFxdWVSZWdpb25Ta2lhOjpGaWxs
QnlDb3B5KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHBhaW50LmdldEFscGhhKCkg
PCAweEZGKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0g
ZHJhd1R5cGUgIT0gT3BhcXVlUmVnaW9uU2tpYTo6RmlsbE9yU3Ryb2tlOwogICAgIGlmICghY2hl
Y2tGaWxsT25seSAmJiBwYWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlICYm
IHBhaW50LmlzQW50aUFsaWFzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTa1NoYWRl
ciogc2hhZGVyID0gcGFpbnQuZ2V0U2hhZGVyKCk7CkBAIC0xNTIsMTIgKzE1NSwyNyBAQCB2b2lk
IE9wYXF1ZVJlZ2lvblNraWE6OnB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50KiBwYWludCkK
ICAgICBDYW52YXNMYXllclN0YXRlIHN0YXRlOwogICAgIGlmIChwYWludCkKICAgICAgICAgc3Rh
dGUucGFpbnQgPSAqcGFpbnQ7CisgICAgc3RhdGUub3BhcXVlUmVjdCA9IFNrUmVjdDo6TWFrZUVt
cHR5KCk7CiAgICAgbV9jYW52YXNMYXllclN0YWNrLmFwcGVuZChzdGF0ZSk7CiB9CiAKLXZvaWQg
T3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2FudmFzTGF5ZXIoKQordm9pZCBPcGFxdWVSZWdpb25Ta2lh
Ojpwb3BDYW52YXNMYXllcihjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKKyAgICBjb25zdCBDYW52YXNMYXllclN0
YXRlJiBjYW52YXNMYXllciA9IG1fY2FudmFzTGF5ZXJTdGFjay5sYXN0KCk7CisKKyAgICBTa1Bh
aW50IGxheWVyUGFpbnQgPSBjYW52YXNMYXllci5wYWludDsKKyAgICBTa1JlY3QgbGF5ZXJPcGFx
dWVSZWN0ID0gY2FudmFzTGF5ZXIub3BhcXVlUmVjdDsKKyAgICBib29sIGZpbGxzQm91bmRzID0g
dHJ1ZTsKKyAgICAvLyBGSVhNRTogV2UgY291bGQgc3RpbGwgdHJhY2sgdGhlIG9wYXF1ZSBwYXJ0
IGJ1dCBpdCdzIGFsd2F5cyBlbXB0eSByaWdodCBub3cgYW55d2F5cy4KKyAgICBpZiAoY2FudmFz
TGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFjYW52YXNMYXllci5pbWFnZU9wYXF1ZVJlY3QuY29udGFp
bnMobGF5ZXJPcGFxdWVSZWN0KSkKKyAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKwogICAg
IG1fY2FudmFzTGF5ZXJTdGFjay5yZW1vdmVMYXN0KCk7CisKKyAgICAvLyBUcmFjayB0aGUgY29w
eSBvZiB0aGUgd2hvbGUgbGF5ZXIgd2UgYXJlIHBvcHBpbmcgb2ZmIHRoZSBzdGFjaywgd2hpY2gg
bWF5IGRlc3Ryb3kgb3BhcXVlCisgICAgLy8gc3R1ZmYgaW4gdGhlIGxheWVyIGJlbG93LiBUaGVu
IGFkZCB0aGUgbGF5ZXIncyBvcGFxdWUgYXJlYSBiYWNrIGludG8gdGhlIG1peC4KKyAgICBkaWRE
cmF3VW5ib3VuZGVkKGNvbnRleHQsIGxheWVyUGFpbnQsIHRyYW5zZm9ybSwgRmlsbEJ5Q29weSk7
CisgICAgZGlkRHJhdyhjb250ZXh0LCB0cmFuc2Zvcm0sIGxheWVyT3BhcXVlUmVjdCwgbGF5ZXJQ
YWludCwgMCwgZmlsbHNCb3VuZHMsIEZpbGxPbmx5KTsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25T
a2lhOjpzZXRJbWFnZU1hc2soY29uc3QgU2tSZWN0JiBpbWFnZU9wYXF1ZVJlY3QpCkBAIC0xNzQs
NyArMTkyLDcgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3UmVjdChjb25zdCBQbGF0
Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBBZmYKICAgICAgICAgYm9vbCBmaWxsc0Jv
dW5kcyA9IGZhbHNlOwogCiAgICAgICAgIGlmICghcGFpbnQuY2FuQ29tcHV0ZUZhc3RCb3VuZHMo
KSkKLSAgICAgICAgICAgIGRpZERyYXdVbmJvdW5kZWQocGFpbnQpOworICAgICAgICAgICAgZGlk
RHJhd1VuYm91bmRlZChjb250ZXh0LCBwYWludCwgdHJhbnNmb3JtLCBGaWxsT3JTdHJva2UpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFNrUmVjdCBzdHJva2VSZWN0OwogICAgICAgICAg
ICAgc3Ryb2tlUmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKGZpbGxSZWN0LCAmc3Ryb2tl
UmVjdCk7CkBAIC0xOTcsNyArMjE1LDcgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3
UGF0aChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBBZmYKICAgICBi
b29sIGZpbGxzQm91bmRzID0gZmFsc2U7CiAKICAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0
Qm91bmRzKCkpCi0gICAgICAgIGRpZERyYXdVbmJvdW5kZWQocGFpbnQpOworICAgICAgICBkaWRE
cmF3VW5ib3VuZGVkKGNvbnRleHQsIHBhaW50LCB0cmFuc2Zvcm0sIEZpbGxPclN0cm9rZSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIHJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5kcyhwYXRoLmdl
dEJvdW5kcygpLCAmcmVjdCk7CiAgICAgICAgIGRpZERyYXcoY29udGV4dCwgdHJhbnNmb3JtLCBy
ZWN0LCBwYWludCwgMCwgZmlsbHNCb3VuZHMsIEZpbGxPclN0cm9rZSk7CkBAIC0yMjUsNyArMjQz
LDcgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3UG9pbnRzKGNvbnN0IFBsYXRmb3Jt
Q29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IEEKICAgICBib29sIGZpbGxzQm91bmRzID0gZmFs
c2U7CiAKICAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCi0gICAgICAgIGRp
ZERyYXdVbmJvdW5kZWQocGFpbnQpOworICAgICAgICBkaWREcmF3VW5ib3VuZGVkKGNvbnRleHQs
IHBhaW50LCB0cmFuc2Zvcm0sIEZpbGxPclN0cm9rZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHJl
Y3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5kcyhyZWN0LCAmcmVjdCk7CiAgICAgICAgIGRpZERy
YXcoY29udGV4dCwgdHJhbnNmb3JtLCByZWN0LCBwYWludCwgMCwgZmlsbHNCb3VuZHMsIEZpbGxP
clN0cm9rZSk7CkBAIC0yMzcsNyArMjU1LDcgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWRE
cmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdAogICAg
IGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKIAogICAgIGlmICghcGFpbnQuY2FuQ29tcHV0ZUZh
c3RCb3VuZHMoKSkKLSAgICAgICAgZGlkRHJhd1VuYm91bmRlZChwYWludCk7CisgICAgICAgIGRp
ZERyYXdVbmJvdW5kZWQoY29udGV4dCwgcGFpbnQsIHRyYW5zZm9ybSwgRmlsbE9yU3Ryb2tlKTsK
ICAgICBlbHNlIHsKICAgICAgICAgU2tSZWN0IHJlY3Q7CiAgICAgICAgIHJlY3QgPSBwYWludC5j
b21wdXRlRmFzdEJvdW5kcyhib3VuZHMsICZyZWN0KTsKQEAgLTI2NSw2NCArMjgzLDUxIEBAIHZv
aWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBj
b250ZXh0LCBjb25zdCBBZmZpbmVUCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
Ym9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5cGUgPT0gRmlsbE9ubHk7Ci0gICAgYm9vbCBsYXN0
TGF5ZXJEcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIHNvdXJjZUJpdG1hcCwgY2hl
Y2tGaWxsT25seSk7Ci0KLSAgICBib29sIHhmZXJzT3BhcXVlID0geGZlcm1vZGVJc09wYXF1ZShw
YWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotCi0gICAgLy8gQXBwbHkgdGhlIFNrQ2FudmFz
IGxheWVycyB3ZSB3aWxsIGJlIGRyYXdpbmcgdGhyb3VnaC4KLSAgICBmb3IgKHNpemVfdCBpID0g
bV9jYW52YXNMYXllclN0YWNrLnNpemUoKTsgaSA+IDA7IC0taSkgewotICAgICAgICBjb25zdCBD
YW52YXNMYXllclN0YXRlJiBjYW52YXNMYXllciA9IG1fY2FudmFzTGF5ZXJTdGFja1tpLTFdOwot
Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBzdGlsbCB0cmFjayB0aGUgb3BhcXVlIHBhcnQg
YnV0IGl0J3MgYWx3YXlzIGVtcHR5IHJpZ2h0IG5vdyBhbnl3YXlzLgotICAgICAgICBpZiAoY2Fu
dmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFjYW52YXNMYXllci5pbWFnZU9wYXF1ZVJlY3QuY29u
dGFpbnModGFyZ2V0UmVjdCkpCi0gICAgICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwotCi0g
ICAgICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGRyYXdUeXBlID09IEZpbGxPbmx5OwotICAgICAg
ICBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUoY2FudmFzTGF5ZXIucGFpbnQs
IDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAgICAvLyBJZiBhbnkgbGF5ZXIgZG9lc24ndCBwYWlu
dCBvcGFxdWUsIHRoZW4gdGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBvcGFxdWUuCi0gICAgICAgIHhm
ZXJzT3BhcXVlICY9IHhmZXJtb2RlSXNPcGFxdWUoY2FudmFzTGF5ZXIucGFpbnQsIGxhc3RMYXll
ckRyYXdzT3BhcXVlKTsKLSAgICB9Ci0KLSAgICAvLyBQcmVzZXJ2aW5nIG9wYXF1ZSBvbmx5IG1h
dHRlcnMgZm9yIHRoZSBib3R0b20tbW9zdCBsYXllci4gSXRzIGNvbnRlbnRzIGFyZSBlaXRoZXIg
b3BhcXVlIG9yIG5vdCwgYW5kIGlmIG5vdAotICAgIC8vIHRoZW4gd2UgY2FyZSBpZiBpdCBwcmVz
ZXJ2ZXMgdGhlIG9wYXF1ZW5lc3Mgb2YgdGhlIHRhcmdldCBkZXZpY2Ugd2hlbiBpdCBpcyBkcmF3
biBpbnRvIHRoZSBkZXZpY2UuCi0gICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWU7Ci0gICAgaWYgKG1f
Y2FudmFzTGF5ZXJTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHByZXNlcnZlc09wYXF1ZSA9IHhm
ZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7Ci0gICAg
ZWxzZQotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZSht
X2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLQotCiAg
ICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybSB0byB0aGUgdHJhY2tpbmcgc3BhY2UuCiAgICAgU2tN
YXRyaXggY2FudmFzVG9UYXJnZXRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07CiAgICAgaWYgKCFjYW52
YXNUb1RhcmdldFRyYW5zZm9ybS5tYXBSZWN0KCZ0YXJnZXRSZWN0KSkKICAgICAgICAgZmlsbHNC
b3VuZHMgPSBmYWxzZTsKIAorICAgIGJvb2wgZHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKHBh
aW50LCBkcmF3VHlwZSwgc291cmNlQml0bWFwKTsKKyAgICBib29sIHhmZXJzT3BhcXVlID0geGZl
cm1vZGVJc09wYXF1ZShwYWludCwgZHJhd3NPcGFxdWUpOworICAgIGJvb2wgcHJlc2VydmVzT3Bh
cXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGRyYXdzT3BhcXVlKTsKKwogICAg
IGlmIChmaWxsc0JvdW5kcyAmJiB4ZmVyc09wYXF1ZSkKICAgICAgICAgbWFya1JlY3RBc09wYXF1
ZSh0YXJnZXRSZWN0KTsKLSAgICBlbHNlIGlmIChTa1JlY3Q6OkludGVyc2VjdHModGFyZ2V0UmVj
dCwgbV9vcGFxdWVSZWN0KSAmJiAhcHJlc2VydmVzT3BhcXVlKQorICAgIGVsc2UgaWYgKCFwcmVz
ZXJ2ZXNPcGFxdWUpCiAgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUodGFyZ2V0UmVjdCk7CiB9
CiAKLXZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1VuYm91bmRlZChjb25zdCBTa1BhaW50
JiBwYWludCkKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1VuYm91bmRlZChjb25zdCBQ
bGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIERyYXdUeXBlIGRyYXdUeXBlKQogewotICAgIC8v
IFByZXNlcnZpbmcgb3BhcXVlIG9ubHkgbWF0dGVycyBmb3IgdGhlIGJvdHRvbS1tb3N0IGxheWVy
LiBJdHMgY29udGVudHMgYXJlIGVpdGhlciBvcGFxdWUgb3Igbm90LCBhbmQgaWYgbm90Ci0gICAg
Ly8gdGhlbiB3ZSBjYXJlIGlmIGl0IHByZXNlcnZlcyB0aGUgb3BhcXVlbmVzcyBvZiB0aGUgdGFy
Z2V0IGRldmljZSB3aGVuIGl0IGlzIGRyYXduIGludG8gdGhlIGRldmljZS4KLSAgICBib29sIHBy
ZXNlcnZlc09wYXF1ZTsKLQotICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlOwotICAgIGlm
IChtX2NhbnZhc0xheWVyU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgbGFzdExheWVy
RHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50LCAwLCBjaGVja0ZpbGxPbmx5KTsKLSAg
ICAgICAgcHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGxh
c3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBib29sIGxhc3RMYXll
ckRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQs
IDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVBy
ZXNlcnZlc09wYXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdz
T3BhcXVlKTsKLSAgICB9CisgICAgYm9vbCBkcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFp
bnQsIGRyYXdUeXBlLCAwKTsKKyAgICBib29sIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJl
c2VydmVzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7CisKKyAgICBpZiAocHJlc2VydmVzT3Bh
cXVlKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0NsaXBwZWRCb3VuZHMgPSB0cnVl
OworICAgIFNrUmVjdCBjbGlwcGVkQm91bmRzOworCisgICAgLy8gQXBwbHkgdGhlIGN1cnJlbnQg
Y2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICBpZiAoY29udGV4dC0+Y2FudmFz
KCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52YXM6OmtSZWN0X0NsaXBUeXBlKQorICAgICAgICBo
YXNDbGlwcGVkQm91bmRzID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIFNrSVJlY3QgZGV2
aWNlQ2xpcDsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xpcERldmljZUJv
dW5kcygmZGV2aWNlQ2xpcCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNsaXBwZWRC
b3VuZHMuc2V0KGRldmljZUNsaXApOwogCi0gICAgaWYgKCFwcmVzZXJ2ZXNPcGFxdWUpIHsKLSAg
ICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0IHdhcyBkcmF3biBvbiBzbyBqdXN0IGRlc3Ryb3kg
dGhlIGtub3duIG9wYXF1ZSBhcmVhLgotICAgICAgICBtX29wYXF1ZVJlY3QgPSBTa1JlY3Q6Ok1h
a2VFbXB0eSgpOworICAgICAgICAvLyBBcHBseSB0aGUgdHJhbnNmb3JtIHRvIHRoZSB0cmFja2lu
ZyBzcGFjZS4KKyAgICAgICAgU2tNYXRyaXggY2FudmFzVG9UYXJnZXRUcmFuc2Zvcm0gPSB0cmFu
c2Zvcm07CisgICAgICAgIGlmICghY2FudmFzVG9UYXJnZXRUcmFuc2Zvcm0ubWFwUmVjdCgmY2xp
cHBlZEJvdW5kcykpCisgICAgICAgICAgICBoYXNDbGlwcGVkQm91bmRzID0gZmFsc2U7CiAgICAg
fQorCisgICAgaWYgKGhhc0NsaXBwZWRCb3VuZHMpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFx
dWUoY2xpcHBlZEJvdW5kcyk7CisgICAgZWxzZQorICAgICAgICBtYXJrQWxsQXNOb25PcGFxdWUo
KTsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNr
UmVjdCYgcmVjdCkKQEAgLTMzMiwzMSArMzM3LDM2IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
bWFya1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCiAgICAgLy8gcmVjdGFuZ2xlIHRo
ZW4gd2UgZG8gdGhhdCwgYXMgdGhhdCBpcyB0aGUgY2hlYXBlc3Qgd2F5IHRvIGluY3JlYXNlIHRo
ZSBhcmVhIHJldHVybmVkCiAgICAgLy8gd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBjb21wbGV4aXR5
LgogCisgICAgLy8gSWYgd2UgYXJlIGRyYXdpbmcgaW50byBhIGNhbnZhcyBsYXllciwgdGhlbiB0
cmFjayB0aGUgb3BhcXVlIHJlY3QgaW4gdGhhdCBsYXllci4KKyAgICBTa1JlY3QqIHRyYWNraW5n
UmVjdCA9ICZtX29wYXF1ZVJlY3Q7CisgICAgaWYgKCFtX2NhbnZhc0xheWVyU3RhY2suaXNFbXB0
eSgpKQorICAgICAgICB0cmFja2luZ1JlY3QgPSAmbV9jYW52YXNMYXllclN0YWNrLmxhc3QoKS5v
cGFxdWVSZWN0OworCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKG1fb3BhcXVlUmVjdC5jb250YWlucyhyZWN0KSkKKyAgICBpZiAodHJhY2tpbmdSZWN0
LT5jb250YWlucyhyZWN0KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChyZWN0LmNvbnRhaW5z
KG1fb3BhcXVlUmVjdCkpIHsKLSAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKKyAgICBpZiAo
cmVjdC5jb250YWlucygqdHJhY2tpbmdSZWN0KSkgeworICAgICAgICAqdHJhY2tpbmdSZWN0ID0g
cmVjdDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZWN0LmZUb3AgPD0gbV9v
cGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID49IG1fb3BhcXVlUmVjdC5mQm90dG9tKSB7
Ci0gICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgbV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJp
Z2h0ID49IG1fb3BhcXVlUmVjdC5mTGVmdCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mTGVm
dCA9IHJlY3QuZkxlZnQ7Ci0gICAgICAgIGlmIChyZWN0LmZSaWdodCA+IG1fb3BhcXVlUmVjdC5m
UmlnaHQgJiYgcmVjdC5mTGVmdCA8PSBtX29wYXF1ZVJlY3QuZlJpZ2h0KQotICAgICAgICAgICAg
bV9vcGFxdWVSZWN0LmZSaWdodCA9IHJlY3QuZlJpZ2h0OwotICAgIH0gZWxzZSBpZiAocmVjdC5m
TGVmdCA8PSBtX29wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gbV9vcGFxdWVSZWN0
LmZSaWdodCkgewotICAgICAgICBpZiAocmVjdC5mVG9wIDwgbV9vcGFxdWVSZWN0LmZUb3AgJiYg
cmVjdC5mQm90dG9tID49IG1fb3BhcXVlUmVjdC5mVG9wKQotICAgICAgICAgICAgbV9vcGFxdWVS
ZWN0LmZUb3AgPSByZWN0LmZUb3A7Ci0gICAgICAgIGlmIChyZWN0LmZCb3R0b20gPiBtX29wYXF1
ZVJlY3QuZkJvdHRvbSAmJiByZWN0LmZUb3AgPD0gbV9vcGFxdWVSZWN0LmZCb3R0b20pCi0gICAg
ICAgICAgICBtX29wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJvdHRvbTsKKyAgICBpZiAocmVj
dC5mVG9wIDw9IHRyYWNraW5nUmVjdC0+ZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gdHJhY2tpbmdS
ZWN0LT5mQm90dG9tKSB7CisgICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgdHJhY2tpbmdSZWN0LT5m
TGVmdCAmJiByZWN0LmZSaWdodCA+PSB0cmFja2luZ1JlY3QtPmZMZWZ0KQorICAgICAgICAgICAg
dHJhY2tpbmdSZWN0LT5mTGVmdCA9IHJlY3QuZkxlZnQ7CisgICAgICAgIGlmIChyZWN0LmZSaWdo
dCA+IHRyYWNraW5nUmVjdC0+ZlJpZ2h0ICYmIHJlY3QuZkxlZnQgPD0gdHJhY2tpbmdSZWN0LT5m
UmlnaHQpCisgICAgICAgICAgICB0cmFja2luZ1JlY3QtPmZSaWdodCA9IHJlY3QuZlJpZ2h0Owor
ICAgIH0gZWxzZSBpZiAocmVjdC5mTGVmdCA8PSB0cmFja2luZ1JlY3QtPmZMZWZ0ICYmIHJlY3Qu
ZlJpZ2h0ID49IHRyYWNraW5nUmVjdC0+ZlJpZ2h0KSB7CisgICAgICAgIGlmIChyZWN0LmZUb3Ag
PCB0cmFja2luZ1JlY3QtPmZUb3AgJiYgcmVjdC5mQm90dG9tID49IHRyYWNraW5nUmVjdC0+ZlRv
cCkKKyAgICAgICAgICAgIHRyYWNraW5nUmVjdC0+ZlRvcCA9IHJlY3QuZlRvcDsKKyAgICAgICAg
aWYgKHJlY3QuZkJvdHRvbSA+IHRyYWNraW5nUmVjdC0+ZkJvdHRvbSAmJiByZWN0LmZUb3AgPD0g
dHJhY2tpbmdSZWN0LT5mQm90dG9tKQorICAgICAgICAgICAgdHJhY2tpbmdSZWN0LT5mQm90dG9t
ID0gcmVjdC5mQm90dG9tOwogICAgIH0KIAotICAgIGxvbmcgb3BhcXVlQXJlYSA9IChsb25nKW1f
b3BhcXVlUmVjdC53aWR0aCgpICogKGxvbmcpbV9vcGFxdWVSZWN0LmhlaWdodCgpOworICAgIGxv
bmcgb3BhcXVlQXJlYSA9IChsb25nKXRyYWNraW5nUmVjdC0+d2lkdGgoKSAqIChsb25nKXRyYWNr
aW5nUmVjdC0+aGVpZ2h0KCk7CiAgICAgbG9uZyBhcmVhID0gKGxvbmcpcmVjdC53aWR0aCgpICog
KGxvbmcpcmVjdC5oZWlnaHQoKTsKICAgICBpZiAoYXJlYSA+IG9wYXF1ZUFyZWEpCi0gICAgICAg
IG1fb3BhcXVlUmVjdCA9IHJlY3Q7CisgICAgICAgICp0cmFja2luZ1JlY3QgPSByZWN0OwogfQog
CiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0
JiByZWN0KQpAQCAtMzY0LDM0ICszNzQsNTAgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJr
UmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKICAgICAvLyBXZSB3YW50IHRvIGtl
ZXAgYXMgbXVjaCBvZiB0aGUgY3VycmVudCBvcGFxdWUgcmVjdGFuZ2xlIGFzIHdlIGNhbiwgc28g
ZmluZCB0aGUgb25lIGxhcmdlc3QKICAgICAvLyByZWN0YW5nbGUgaW5zaWRlIG1fb3BhcXVlUmVj
dCB0aGF0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHxyZWN0fC4KIAotICAgIGlmIChyZWN0LmNv
bnRhaW5zKG1fb3BhcXVlUmVjdCkpIHsKLSAgICAgICAgbV9vcGFxdWVSZWN0LnNldEVtcHR5KCk7
CisgICAgLy8gSWYgd2UgYXJlIGRyYXdpbmcgaW50byBhIGNhbnZhcyBsYXllciwgdGhlbiB0cmFj
ayB0aGUgb3BhcXVlIHJlY3QgaW4gdGhhdCBsYXllci4KKyAgICBTa1JlY3QqIHRyYWNraW5nUmVj
dCA9ICZtX29wYXF1ZVJlY3Q7CisgICAgaWYgKCFtX2NhbnZhc0xheWVyU3RhY2suaXNFbXB0eSgp
KQorICAgICAgICB0cmFja2luZ1JlY3QgPSAmbV9jYW52YXNMYXllclN0YWNrLmxhc3QoKS5vcGFx
dWVSZWN0OworCisgICAgaWYgKCFTa1JlY3Q6OkludGVyc2VjdHMocmVjdCwgKnRyYWNraW5nUmVj
dCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVjdC5jb250YWlucygqdHJhY2tpbmdSZWN0
KSkgeworICAgICAgICBtYXJrQWxsQXNOb25PcGFxdWUoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGludCBkZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0
OwotICAgIGludCBkZWx0YVJpZ2h0ID0gbV9vcGFxdWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0
OwotICAgIGludCBkZWx0YVRvcCA9IHJlY3QuZlRvcCAtIG1fb3BhcXVlUmVjdC5mVG9wOwotICAg
IGludCBkZWx0YUJvdHRvbSA9IG1fb3BhcXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOwor
ICAgIGludCBkZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gdHJhY2tpbmdSZWN0LT5mTGVmdDsKKyAg
ICBpbnQgZGVsdGFSaWdodCA9IHRyYWNraW5nUmVjdC0+ZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7Cisg
ICAgaW50IGRlbHRhVG9wID0gcmVjdC5mVG9wIC0gdHJhY2tpbmdSZWN0LT5mVG9wOworICAgIGlu
dCBkZWx0YUJvdHRvbSA9IHRyYWNraW5nUmVjdC0+ZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsKIAot
ICAgIC8vIGhvcml6b250YWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgdG8g
dGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVj
dC4KLSAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBh
Ym92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBtX29wYXF1ZVJlY3QuCi0gICAgU2tSZWN0
IGhvcml6b250YWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgLy8gaG9yaXpvbnRhbCBpcyB0aGUgbGFy
Z2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2Yg
fHJlY3R8IGFuZCBpbnNpZGUgdHJhY2tpbmdSZWN0LgorICAgIC8vIHZlcnRpY2FsIGlzIHRoZSBs
YXJnZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIGFib3ZlIG9yIGJlbG93IHxyZWN0fCBhbmQgaW5z
aWRlIHRyYWNraW5nUmVjdC4KKyAgICBTa1JlY3QgaG9yaXpvbnRhbCA9ICp0cmFja2luZ1JlY3Q7
CiAgICAgaWYgKGRlbHRhVG9wID4gZGVsdGFCb3R0b20pCiAgICAgICAgIGhvcml6b250YWwuZkJv
dHRvbSA9IHJlY3QuZlRvcDsKICAgICBlbHNlCiAgICAgICAgIGhvcml6b250YWwuZlRvcCA9IHJl
Y3QuZkJvdHRvbTsKLSAgICBTa1JlY3QgdmVydGljYWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgU2tS
ZWN0IHZlcnRpY2FsID0gKnRyYWNraW5nUmVjdDsKICAgICBpZiAoZGVsdGFMZWZ0ID4gZGVsdGFS
aWdodCkKICAgICAgICAgdmVydGljYWwuZlJpZ2h0ID0gcmVjdC5mTGVmdDsKICAgICBlbHNlCiAg
ICAgICAgIHZlcnRpY2FsLmZMZWZ0ID0gcmVjdC5mUmlnaHQ7CiAKICAgICBpZiAoKGxvbmcpaG9y
aXpvbnRhbC53aWR0aCgpICogKGxvbmcpaG9yaXpvbnRhbC5oZWlnaHQoKSA+IChsb25nKXZlcnRp
Y2FsLndpZHRoKCkgKiAobG9uZyl2ZXJ0aWNhbC5oZWlnaHQoKSkKLSAgICAgICAgbV9vcGFxdWVS
ZWN0ID0gaG9yaXpvbnRhbDsKKyAgICAgICAgKnRyYWNraW5nUmVjdCA9IGhvcml6b250YWw7CiAg
ICAgZWxzZQotICAgICAgICBtX29wYXF1ZVJlY3QgPSB2ZXJ0aWNhbDsKKyAgICAgICAgKnRyYWNr
aW5nUmVjdCA9IHZlcnRpY2FsOwogfQogCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtBbGxB
c05vbk9wYXF1ZSgpCit7CisgICAgLy8gSWYgd2UgYXJlIGRyYXdpbmcgaW50byBhIGNhbnZhcyBs
YXllciwgdGhlbiB0cmFjayB0aGUgb3BhcXVlIHJlY3QgaW4gdGhhdCBsYXllci4KKyAgICBTa1Jl
Y3QqIHRyYWNraW5nUmVjdCA9ICZtX29wYXF1ZVJlY3Q7CisgICAgaWYgKCFtX2NhbnZhc0xheWVy
U3RhY2suaXNFbXB0eSgpKQorICAgICAgICB0cmFja2luZ1JlY3QgPSAmbV9jYW52YXNMYXllclN0
YWNrLmxhc3QoKS5vcGFxdWVSZWN0OworCisgICAgdHJhY2tpbmdSZWN0LT5zZXRFbXB0eSgpOwor
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCmluZGV4IGU4OWQ1NTAw
ODM0NjAxYWY2MzRjM2VmNGRkNjVhY2FhYjk2YmNhN2UuLjEwZjRkZTVmMDk1NWVmMmY2NmJhNTA2
M2E1NGRjYjYzNjdmNGJlNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1
YmxpYzoKICAgICBJbnRSZWN0IGFzUmVjdCgpIGNvbnN0OwogCiAgICAgdm9pZCBwdXNoQ2FudmFz
TGF5ZXIoY29uc3QgU2tQYWludCopOwotICAgIHZvaWQgcG9wQ2FudmFzTGF5ZXIoKTsKKyAgICB2
b2lkIHBvcENhbnZhc0xheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKTsKIAogICAgIHZvaWQgc2V0SW1hZ2VNYXNrKGNvbnN0IFNrUmVjdCYgaW1h
Z2VPcGFxdWVSZWN0KTsKIApAQCAtNjMsMTYgKzYzLDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRp
ZERyYXdQb2ludHMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIFNrQ2FudmFzOjpQb2ludE1vZGUsIGludCBudW1Qb2ludHMsIGNvbnN0IFNrUG9pbnRb
XSwgY29uc3QgU2tQYWludCYpOwogICAgIHZvaWQgZGlkRHJhd0JvdW5kZWQoY29uc3QgUGxhdGZv
cm1Db250ZXh0U2tpYSosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IFNrUmVjdCYsIGNv
bnN0IFNrUGFpbnQmKTsKIAotcHJpdmF0ZToKICAgICBlbnVtIERyYXdUeXBlIHsKICAgICAgICAg
RmlsbE9ubHksCi0gICAgICAgIEZpbGxPclN0cm9rZQorICAgICAgICBGaWxsT3JTdHJva2UsCisg
ICAgICAgIEZpbGxCeUNvcHkKICAgICB9OwogCitwcml2YXRlOgogICAgIHZvaWQgZGlkRHJhdyhj
b25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
U2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiBzb3VyY2VCaXRtYXAsIGJv
b2wgZmlsbHNCb3VuZHMsIERyYXdUeXBlKTsKLSAgICB2b2lkIGRpZERyYXdVbmJvdW5kZWQoY29u
c3QgU2tQYWludCYpOworICAgIHZvaWQgZGlkRHJhd1VuYm91bmRlZChjb25zdCBQbGF0Zm9ybUNv
bnRleHRTa2lhKiwgY29uc3QgU2tQYWludCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERyYXdU
eXBlKTsKICAgICB2b2lkIG1hcmtSZWN0QXNPcGFxdWUoY29uc3QgU2tSZWN0Jik7CiAgICAgdm9p
ZCBtYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYpOworICAgIHZvaWQgbWFya0FsbEFz
Tm9uT3BhcXVlKCk7CiAKICAgICBTa1JlY3QgbV9vcGFxdWVSZWN0OwogCkBAIC04NSw2ICs4Nyw4
IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaGFzSW1hZ2VNYXNrOwogICAgICAgICAvLyBUaGUg
b3BhcXVlIGFyZWEgaW4gdGhlIGltYWdlIG1hc2suCiAgICAgICAgIFNrUmVjdCBpbWFnZU9wYXF1
ZVJlY3Q7CisKKyAgICAgICAgU2tSZWN0IG9wYXF1ZVJlY3Q7CiAgICAgfTsKIAogICAgIFZlY3Rv
cjxDYW52YXNMYXllclN0YXRlLCAzPiBtX2NhbnZhc0xheWVyU3RhY2s7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcAppbmRleCAwY2E3MDljZDRkODExMDIwODU5NWQzN2IyMTQ3MjBkMTE3ZTQyMTEz
Li5mYjIyZjQwNWZhNTViYTExMDM5OTUxYWFhOWIxYmQ2YTE1MDdlNzFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OnJlc3RvcmVMYXllcigpCiB7CiAgICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKICAgICBpZiAo
bV90cmFja09wYXF1ZVJlZ2lvbikKLSAgICAgICAgbV9vcGFxdWVSZWdpb24ucG9wQ2FudmFzTGF5
ZXIoKTsKKyAgICAgICAgbV9vcGFxdWVSZWdpb24ucG9wQ2FudmFzTGF5ZXIodGhpcywgbV9vcGFx
dWVSZWdpb25UcmFuc2Zvcm0pOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmJlZ2lu
TGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3Bw
CmluZGV4IDE3OGM2NTY5MDMwMzk2M2UxZTgzNzQ3MGRhYmNlZTE4OTUxOGM4MTYuLjVkZDY3Yzlj
YmQ3YmFmYjI2ZDk2NmQ1NTgxNTM4NTlhYzRjZDU3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCkBAIC0z
OSw5ICszOSw5IEBAIG5hbWVzcGFjZSB7CiAKICNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikg
XAogICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEubWF4WCgp
LCBiLm1heFgoKSk7IFwKICAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAotICAgIEVYUEVD
VF9FUShhLm1heFkoKSwgYi5tYXhZKCkpOworICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lk
dGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CiAKICNkZWZp
bmUgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIG9wYXF1ZVJlY3QpIFwKIHsgXApAQCAtMjI2
LDkgKzIyNiw0NyBAQCBURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUNs
aXBUZXN0KQogICAgIGNvbnRleHQuc2F2ZSgpOwogICAgIGNvbnRleHQuY2xpcFRvSW1hZ2VCdWZm
ZXIoYWxwaGFJbWFnZS5nZXQoKSwgRmxvYXRSZWN0KDMwLCAzMCwgMTAsIDEwKSk7CiAgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQucmVzdG9yZSgp
OwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKICAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZv
cm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKLSAgICBjb250ZXh0LnJlc3RvcmUo
KTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tJbWFnZU1hc2spCit7
CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtB
UkdCXzg4ODhfQ29uZmlnLCA0MDAsIDQwMCk7CisgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7Cisg
ICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBs
YXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFx
dWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29u
dGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAg
Q29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICAvLyBJbWFnZSBtYXNr
cyBhcmUgZG9uZSBieSBkcmF3aW5nIGEgYml0bWFwIGludG8gYSB0cmFuc3BhcmVuY3kgbGF5ZXIg
dGhhdCB1c2VzIERzdEluIHRvIG1hc2sKKyAgICAvLyBvdXQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIg
YmVsb3cgdGhhdCBpcyBmaWxsZWQgd2l0aCB0aGUgbWFzayBjb2xvci4gSW4gdGhlIGVuZCB0aGlz
IHNob3VsZAorICAgIC8vIG5vdCBiZSBtYXJrZWQgb3BhcXVlLgorCisgICAgY29udGV4dC5zZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5iZWdp
blRyYW5zcGFyZW5jeUxheWVyKDEpOworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEw
LCAxMCwgMTAsIDEwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZURl
c3RpbmF0aW9uSW4pOworICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKKwor
ICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYWxwaGFJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
SW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGFscGhhSW1hZ2UtPmNvbnRleHQoKS0+ZmlsbFJlY3Qo
SW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKwor
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOwor
ICAgIGNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIEZsb2F0UmVjdCgxMCwgMTAsIDEwLCAxMCkpOworCisgICAgY29udGV4dC5lbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
KworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIX0VYQUNUKGJpdG1hcCwg
cGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKIH0KIAogVEVTVChQbGF0
Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tPcGFxdWVKb2luVGVzdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137984</attachid>
            <date>2012-04-19 15:00:06 -0700</date>
            <delta_ts>2012-04-19 18:08:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84275-20120419180004.patch</filename>
            <type>text/plain</type>
            <size>22077</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2U1NjdjNmQ5NTkwNWQx
ZTEyYzc0YmMxZjQ0NDY1ZGEzNjI5NDE0MC4uNTM3ZWEzZjlhYTllYjU5NjIxMzk1ZDVhM2RlMTY2
ODJlZTlmZWFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJl
Z2lvblNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRJc09wYXF1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpwdXNoQ2FudmFzTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2FudmFzTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVl
UmVnaW9uU2tpYTo6ZGlkRHJhd1BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdp
b25Ta2lhOjpkaWREcmF3Qm91bmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25T
a2lhOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERy
YXdVbmJvdW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6bWFya1Jl
Y3RBc09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVj
dEFzTm9uT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtB
bGxBc05vbk9wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVS
ZWdpb25Ta2lhLmg6CisgICAgICAgIChPcGFxdWVSZWdpb25Ta2lhKToKKyAgICAgICAgKENhbnZh
c0xheWVyU3RhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpy
ZXN0b3JlTGF5ZXIpOgorCiAyMDEyLTA0LTE3ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBBZGQgVGV4dHVyZVVwbG9hZGVyIHdoaWNo
IGFsbG93cyB1cyB0byB1c2UgcGVyc2lzdGVudCBHQzNEIHN0YXRlIGZvciB0ZXh0dXJlIHVwbG9h
ZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDcwNGJhZDY0YWMyMWEwYjY2YTA0ZjYw
Zjg3YmExNDFmNjc4MzMwODIuLjA1YjI1ODlkOWE1Y2E1NWYxMGM5Nzk0YjEyOTRiOTYxOTQ2NjQ4
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDQt
MTggIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9t
aXVtXSBJbWFnZSBtYXNrcyBhcmUgY29uc2lkZXJlZCBvcGFxdWUgaW5jb3JyZWN0bHkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0Mjc1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9y
bUNvbnRleHRTa2lhVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorCiAyMDEyLTA0LTE3ICBEYXZpZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBBZGQgVGV4dHVyZVVwbG9hZGVyIHdoaWNoIGFs
bG93cyB1cyB0byB1c2UgcGVyc2lzdGVudCBHQzNEIHN0YXRlIGZvciB0ZXh0dXJlIHVwbG9hZHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1
ZVJlZ2lvblNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9P
cGFxdWVSZWdpb25Ta2lhLmNwcAppbmRleCBlNjAyZTYwNzkwNWY3NjQ1MmEyZmRiNmY3ZjRiNWQ3
ZWRlY2ZjZjBjLi4wMDM2ZmMyMGVkOGY5ZjU0ZjcwYWEzYzVlZjRjYTdkYjk4MWZiNDAzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lv
blNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3Bh
cXVlUmVnaW9uU2tpYS5jcHAKQEAgLTEyNCwxMCArMTI0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBzcmNJ
c09wYXF1CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBhaW50ZWQgd2lsbCBi
ZSBvcGFxdWUuCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50
JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hlY2tGaWxsT25seSA9
IGZhbHNlKQorc3RhdGljIGlubGluZSBib29sIHBhaW50SXNPcGFxdWUoY29uc3QgU2tQYWludCYg
cGFpbnQsIE9wYXF1ZVJlZ2lvblNraWE6OkRyYXdUeXBlIGRyYXdUeXBlLCBjb25zdCBTa0JpdG1h
cCogYml0bWFwKQogeworICAgIGlmIChkcmF3VHlwZSA9PSBPcGFxdWVSZWdpb25Ta2lhOjpGaWxs
QnlDb3B5KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHBhaW50LmdldEFscGhhKCkg
PCAweEZGKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0g
ZHJhd1R5cGUgIT0gT3BhcXVlUmVnaW9uU2tpYTo6RmlsbE9yU3Ryb2tlOwogICAgIGlmICghY2hl
Y2tGaWxsT25seSAmJiBwYWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlICYm
IHBhaW50LmlzQW50aUFsaWFzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTa1NoYWRl
ciogc2hhZGVyID0gcGFpbnQuZ2V0U2hhZGVyKCk7CkBAIC0xNTUsOSArMTU4LDIzIEBAIHZvaWQg
T3BhcXVlUmVnaW9uU2tpYTo6cHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqIHBhaW50KQog
ICAgIG1fY2FudmFzTGF5ZXJTdGFjay5hcHBlbmQoc3RhdGUpOwogfQogCi12b2lkIE9wYXF1ZVJl
Z2lvblNraWE6OnBvcENhbnZhc0xheWVyKCkKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2Fu
dmFzTGF5ZXIoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7CisgICAgY29uc3QgQ2FudmFzTGF5ZXJTdGF0ZSYgY2Fu
dmFzTGF5ZXIgPSBtX2NhbnZhc0xheWVyU3RhY2subGFzdCgpOworCisgICAgU2tQYWludCBsYXll
clBhaW50ID0gY2FudmFzTGF5ZXIucGFpbnQ7CisgICAgU2tSZWN0IGxheWVyT3BhcXVlUmVjdCA9
IGNhbnZhc0xheWVyLm9wYXF1ZVJlY3Q7CisgICAgYm9vbCBmaWxsc0JvdW5kcyA9IHRydWU7Cisg
ICAgLy8gRklYTUU6IFdlIGNvdWxkIHN0aWxsIHRyYWNrIHRoZSBvcGFxdWUgcGFydCBidXQgaXQn
cyBhbHdheXMgZW1wdHkgcmlnaHQgbm93IGFueXdheXMuCisgICAgaWYgKGNhbnZhc0xheWVyLmhh
c0ltYWdlTWFzayAmJiAhY2FudmFzTGF5ZXIuaW1hZ2VPcGFxdWVSZWN0LmNvbnRhaW5zKGxheWVy
T3BhcXVlUmVjdCkpCisgICAgICAgIGZpbGxzQm91bmRzID0gZmFsc2U7CisKICAgICBtX2NhbnZh
c0xheWVyU3RhY2sucmVtb3ZlTGFzdCgpOworCisgICAgLy8gVHJhY2sgdGhlIGNvcHkgb2YgdGhl
IHdob2xlIGxheWVyIHdlIGFyZSBwb3BwaW5nIG9mZiB0aGUgc3RhY2ssIHdoaWNoIG1heSBkZXN0
cm95IG9wYXF1ZQorICAgIC8vIHN0dWZmIGluIHRoZSBsYXllciBiZWxvdy4gVGhlbiBhZGQgdGhl
IGxheWVyJ3Mgb3BhcXVlIGFyZWEgYmFjayBpbnRvIHRoZSBtaXguCisgICAgZGlkRHJhd1VuYm91
bmRlZChjb250ZXh0LCBsYXllclBhaW50LCB0cmFuc2Zvcm0sIEZpbGxCeUNvcHkpOworICAgIGRp
ZERyYXcoY29udGV4dCwgdHJhbnNmb3JtLCBsYXllck9wYXF1ZVJlY3QsIGxheWVyUGFpbnQsIDAs
IGZpbGxzQm91bmRzLCBGaWxsT25seSk7CiB9CiAKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6c2V0
SW1hZ2VNYXNrKGNvbnN0IFNrUmVjdCYgaW1hZ2VPcGFxdWVSZWN0KQpAQCAtMTc0LDcgKzE5MSw3
IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1JlY3QoY29uc3QgUGxhdGZvcm1Db250
ZXh0U2tpYSogY29udGV4dCwgY29uc3QgQWZmCiAgICAgICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBm
YWxzZTsKIAogICAgICAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCi0gICAg
ICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBhaW50KTsKKyAgICAgICAgICAgIGRpZERyYXdVbmJv
dW5kZWQoY29udGV4dCwgcGFpbnQsIHRyYW5zZm9ybSwgRmlsbE9yU3Ryb2tlKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBTa1JlY3Qgc3Ryb2tlUmVjdDsKICAgICAgICAgICAgIHN0cm9r
ZVJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5kcyhmaWxsUmVjdCwgJnN0cm9rZVJlY3QpOwpA
QCAtMTk3LDcgKzIxNCw3IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BhdGgoY29u
c3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgQWZmCiAgICAgYm9vbCBmaWxs
c0JvdW5kcyA9IGZhbHNlOwogCiAgICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFzdEJvdW5kcygp
KQotICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBhaW50KTsKKyAgICAgICAgZGlkRHJhd1VuYm91
bmRlZChjb250ZXh0LCBwYWludCwgdHJhbnNmb3JtLCBGaWxsT3JTdHJva2UpOwogICAgIGVsc2Ug
ewogICAgICAgICByZWN0ID0gcGFpbnQuY29tcHV0ZUZhc3RCb3VuZHMocGF0aC5nZXRCb3VuZHMo
KSwgJnJlY3QpOwogICAgICAgICBkaWREcmF3KGNvbnRleHQsIHRyYW5zZm9ybSwgcmVjdCwgcGFp
bnQsIDAsIGZpbGxzQm91bmRzLCBGaWxsT3JTdHJva2UpOwpAQCAtMjI1LDcgKzI0Miw3IEBAIHZv
aWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BvaW50cyhjb25zdCBQbGF0Zm9ybUNvbnRleHRT
a2lhKiBjb250ZXh0LCBjb25zdCBBCiAgICAgYm9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOwogCiAg
ICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFzdEJvdW5kcygpKQotICAgICAgICBkaWREcmF3VW5i
b3VuZGVkKHBhaW50KTsKKyAgICAgICAgZGlkRHJhd1VuYm91bmRlZChjb250ZXh0LCBwYWludCwg
dHJhbnNmb3JtLCBGaWxsT3JTdHJva2UpOwogICAgIGVsc2UgewogICAgICAgICByZWN0ID0gcGFp
bnQuY29tcHV0ZUZhc3RCb3VuZHMocmVjdCwgJnJlY3QpOwogICAgICAgICBkaWREcmF3KGNvbnRl
eHQsIHRyYW5zZm9ybSwgcmVjdCwgcGFpbnQsIDAsIGZpbGxzQm91bmRzLCBGaWxsT3JTdHJva2Up
OwpAQCAtMjM3LDcgKzI1NCw3IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5k
ZWQoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QKICAgICBib29sIGZp
bGxzQm91bmRzID0gZmFsc2U7CiAKICAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRz
KCkpCi0gICAgICAgIGRpZERyYXdVbmJvdW5kZWQocGFpbnQpOworICAgICAgICBkaWREcmF3VW5i
b3VuZGVkKGNvbnRleHQsIHBhaW50LCB0cmFuc2Zvcm0sIEZpbGxPclN0cm9rZSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIFNrUmVjdCByZWN0OwogICAgICAgICByZWN0ID0gcGFpbnQuY29tcHV0ZUZh
c3RCb3VuZHMoYm91bmRzLCAmcmVjdCk7CkBAIC0yNjUsNjQgKzI4Miw1OSBAQCB2b2lkIE9wYXF1
ZVJlZ2lvblNraWE6OmRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwg
Y29uc3QgQWZmaW5lVAogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJvb2wgY2hl
Y2tGaWxsT25seSA9IGRyYXdUeXBlID09IEZpbGxPbmx5OwotICAgIGJvb2wgbGFzdExheWVyRHJh
d3NPcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50LCBzb3VyY2VCaXRtYXAsIGNoZWNrRmlsbE9u
bHkpOwotCi0gICAgYm9vbCB4ZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIGxh
c3RMYXllckRyYXdzT3BhcXVlKTsKLQotICAgIC8vIEFwcGx5IHRoZSBTa0NhbnZhcyBsYXllcnMg
d2Ugd2lsbCBiZSBkcmF3aW5nIHRocm91Z2guCi0gICAgZm9yIChzaXplX3QgaSA9IG1fY2FudmFz
TGF5ZXJTdGFjay5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgQ2FudmFzTGF5
ZXJTdGF0ZSYgY2FudmFzTGF5ZXIgPSBtX2NhbnZhc0xheWVyU3RhY2tbaS0xXTsKLQotICAgICAg
ICAvLyBGSVhNRTogV2UgY291bGQgc3RpbGwgdHJhY2sgdGhlIG9wYXF1ZSBwYXJ0IGJ1dCBpdCdz
IGFsd2F5cyBlbXB0eSByaWdodCBub3cgYW55d2F5cy4KLSAgICAgICAgaWYgKGNhbnZhc0xheWVy
Lmhhc0ltYWdlTWFzayAmJiAhY2FudmFzTGF5ZXIuaW1hZ2VPcGFxdWVSZWN0LmNvbnRhaW5zKHRh
cmdldFJlY3QpKQotICAgICAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKLQotICAgICAgICBi
b29sIGNoZWNrRmlsbE9ubHkgPSBkcmF3VHlwZSA9PSBGaWxsT25seTsKLSAgICAgICAgbGFzdExh
eWVyRHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKGNhbnZhc0xheWVyLnBhaW50LCAwLCBjaGVj
a0ZpbGxPbmx5KTsKLSAgICAgICAgLy8gSWYgYW55IGxheWVyIGRvZXNuJ3QgcGFpbnQgb3BhcXVl
LCB0aGVuIHRoZSByZXN1bHQgd2lsbCBub3QgYmUgb3BhcXVlLgotICAgICAgICB4ZmVyc09wYXF1
ZSAmPSB4ZmVybW9kZUlzT3BhcXVlKGNhbnZhc0xheWVyLnBhaW50LCBsYXN0TGF5ZXJEcmF3c09w
YXF1ZSk7Ci0gICAgfQotCi0gICAgLy8gUHJlc2VydmluZyBvcGFxdWUgb25seSBtYXR0ZXJzIGZv
ciB0aGUgYm90dG9tLW1vc3QgbGF5ZXIuIEl0cyBjb250ZW50cyBhcmUgZWl0aGVyIG9wYXF1ZSBv
ciBub3QsIGFuZCBpZiBub3QKLSAgICAvLyB0aGVuIHdlIGNhcmUgaWYgaXQgcHJlc2VydmVzIHRo
ZSBvcGFxdWVuZXNzIG9mIHRoZSB0YXJnZXQgZGV2aWNlIHdoZW4gaXQgaXMgZHJhd24gaW50byB0
aGUgZGV2aWNlLgotICAgIGJvb2wgcHJlc2VydmVzT3BhcXVlOwotICAgIGlmIChtX2NhbnZhc0xh
eWVyU3RhY2suaXNFbXB0eSgpKQotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVBy
ZXNlcnZlc09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotICAgIGVsc2UKLSAg
ICAgICAgcHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUobV9jYW52YXNM
YXllclN0YWNrWzBdLnBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7Ci0KLQogICAgIC8vIEFw
cGx5IHRoZSB0cmFuc2Zvcm0gdG8gdGhlIHRyYWNraW5nIHNwYWNlLgogICAgIFNrTWF0cml4IGNh
bnZhc1RvVGFyZ2V0VHJhbnNmb3JtID0gdHJhbnNmb3JtOwogICAgIGlmICghY2FudmFzVG9UYXJn
ZXRUcmFuc2Zvcm0ubWFwUmVjdCgmdGFyZ2V0UmVjdCkpCiAgICAgICAgIGZpbGxzQm91bmRzID0g
ZmFsc2U7CiAKKyAgICBib29sIGRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgZHJh
d1R5cGUsIHNvdXJjZUJpdG1hcCk7CisgICAgYm9vbCB4ZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNP
cGFxdWUocGFpbnQsIGRyYXdzT3BhcXVlKTsKKyAgICBib29sIHByZXNlcnZlc09wYXF1ZSA9IHhm
ZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7CisKICAgICBpZiAoZmls
bHNCb3VuZHMgJiYgeGZlcnNPcGFxdWUpCiAgICAgICAgIG1hcmtSZWN0QXNPcGFxdWUodGFyZ2V0
UmVjdCk7Ci0gICAgZWxzZSBpZiAoU2tSZWN0OjpJbnRlcnNlY3RzKHRhcmdldFJlY3QsIG1fb3Bh
cXVlUmVjdCkgJiYgIXByZXNlcnZlc09wYXF1ZSkKKyAgICBlbHNlIGlmICghcHJlc2VydmVzT3Bh
cXVlKQogICAgICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKHRhcmdldFJlY3QpOwogfQogCi12b2lk
IE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdVbmJvdW5kZWQoY29uc3QgU2tQYWludCYgcGFpbnQp
Cit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdVbmJvdW5kZWQoY29uc3QgUGxhdGZvcm1D
b250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgU2tQYWludCYgcGFpbnQsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtLCBEcmF3VHlwZSBkcmF3VHlwZSkKIHsKLSAgICAvLyBQcmVzZXJ2
aW5nIG9wYXF1ZSBvbmx5IG1hdHRlcnMgZm9yIHRoZSBib3R0b20tbW9zdCBsYXllci4gSXRzIGNv
bnRlbnRzIGFyZSBlaXRoZXIgb3BhcXVlIG9yIG5vdCwgYW5kIGlmIG5vdAotICAgIC8vIHRoZW4g
d2UgY2FyZSBpZiBpdCBwcmVzZXJ2ZXMgdGhlIG9wYXF1ZW5lc3Mgb2YgdGhlIHRhcmdldCBkZXZp
Y2Ugd2hlbiBpdCBpcyBkcmF3biBpbnRvIHRoZSBkZXZpY2UuCi0gICAgYm9vbCBwcmVzZXJ2ZXNP
cGFxdWU7Ci0KLSAgICBib29sIGNoZWNrRmlsbE9ubHkgPSBmYWxzZTsKLSAgICBpZiAobV9jYW52
YXNMYXllclN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBib29sIGxhc3RMYXllckRyYXdzT3Bh
cXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgMCwgY2hlY2tGaWxsT25seSk7Ci0gICAgICAgIHBy
ZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50LCBsYXN0TGF5ZXJE
cmF3c09wYXF1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYm9vbCBsYXN0TGF5ZXJEcmF3c09w
YXF1ZSA9IHBhaW50SXNPcGFxdWUobV9jYW52YXNMYXllclN0YWNrWzBdLnBhaW50LCAwLCBjaGVj
a0ZpbGxPbmx5KTsKLSAgICAgICAgcHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNP
cGFxdWUobV9jYW52YXNMYXllclN0YWNrWzBdLnBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7
Ci0gICAgfQorICAgIGJvb2wgZHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50LCBkcmF3
VHlwZSwgMCk7CisgICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09w
YXF1ZShwYWludCwgZHJhd3NPcGFxdWUpOworCisgICAgaWYgKHByZXNlcnZlc09wYXF1ZSkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFwcmVzZXJ2ZXNPcGFxdWUpIHsKLSAgICAgICAgLy8g
V2UgZG9uJ3Qga25vdyB3aGF0IHdhcyBkcmF3biBvbiBzbyBqdXN0IGRlc3Ryb3kgdGhlIGtub3du
IG9wYXF1ZSBhcmVhLgotICAgICAgICBtX29wYXF1ZVJlY3QgPSBTa1JlY3Q6Ok1ha2VFbXB0eSgp
OworICAgIGJvb2wgaGFzQ2xpcHBlZEJvdW5kcyA9IHRydWU7CisgICAgU2tSZWN0IGNsaXBwZWRC
b3VuZHM7CisKKyAgICAvLyBBcHBseSB0aGUgY3VycmVudCBjbGlwIGluIGRldmljZSBjb29yZGlu
YXRlIHNwYWNlLgorICAgIGlmIChjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xpcFR5cGUoKSAhPSBT
a0NhbnZhczo6a1JlY3RfQ2xpcFR5cGUpCisgICAgICAgIGhhc0NsaXBwZWRCb3VuZHMgPSBmYWxz
ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgU2tJUmVjdCBkZXZpY2VDbGlwOworICAgICAgICBpZiAo
IWNvbnRleHQtPmNhbnZhcygpLT5nZXRDbGlwRGV2aWNlQm91bmRzKCZkZXZpY2VDbGlwKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2xpcHBlZEJvdW5kcy5zZXQoZGV2aWNlQ2xpcCk7
CisKKyAgICAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybSB0byB0aGUgdHJhY2tpbmcgc3BhY2Uu
CisgICAgICAgIFNrTWF0cml4IGNhbnZhc1RvVGFyZ2V0VHJhbnNmb3JtID0gdHJhbnNmb3JtOwor
ICAgICAgICBpZiAoIWNhbnZhc1RvVGFyZ2V0VHJhbnNmb3JtLm1hcFJlY3QoJmNsaXBwZWRCb3Vu
ZHMpKQorICAgICAgICAgICAgaGFzQ2xpcHBlZEJvdW5kcyA9IGZhbHNlOwogICAgIH0KKworICAg
IGlmIChoYXNDbGlwcGVkQm91bmRzKQorICAgICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKGNsaXBw
ZWRCb3VuZHMpOworICAgIGVsc2UKKyAgICAgICAgbWFya0FsbEFzTm9uT3BhcXVlKCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgU2tSZWN0JiBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KFNrUmVjdCYg
cm9vdE9wYXF1ZVJlY3QsIFZlY3RvcjxPcGFxdWVSZWdpb25Ta2lhOjpDYW52YXNMYXllclN0YXRl
LCAzPiYgY2FudmFzTGF5ZXJTdGFjaykKK3sKKyAgICAvLyBJZiB3ZSBhcmUgZHJhd2luZyBpbnRv
IGEgY2FudmFzIGxheWVyLCB0aGVuIHRyYWNrIHRoZSBvcGFxdWUgcmVjdCBpbiB0aGF0IGxheWVy
LgorICAgIGlmICghY2FudmFzTGF5ZXJTdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBj
YW52YXNMYXllclN0YWNrLmxhc3QoKS5vcGFxdWVSZWN0OworICAgIHJldHVybiByb290T3BhcXVl
UmVjdDsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0
IFNrUmVjdCYgcmVjdCkKQEAgLTMzMiwzMSArMzQ0LDMzIEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tp
YTo6bWFya1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCiAgICAgLy8gcmVjdGFuZ2xl
IHRoZW4gd2UgZG8gdGhhdCwgYXMgdGhhdCBpcyB0aGUgY2hlYXBlc3Qgd2F5IHRvIGluY3JlYXNl
IHRoZSBhcmVhIHJldHVybmVkCiAgICAgLy8gd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBjb21wbGV4
aXR5LgogCisgICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gY3VycmVudFRyYWNraW5nT3BhcXVlUmVj
dChtX29wYXF1ZVJlY3QsIG1fY2FudmFzTGF5ZXJTdGFjayk7CisKICAgICBpZiAocmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9vcGFxdWVSZWN0LmNvbnRhaW5zKHJl
Y3QpKQorICAgIGlmIChvcGFxdWVSZWN0LmNvbnRhaW5zKHJlY3QpKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKHJlY3QuY29udGFpbnMobV9vcGFxdWVSZWN0KSkgewotICAgICAgICBtX29wYXF1
ZVJlY3QgPSByZWN0OworICAgIGlmIChyZWN0LmNvbnRhaW5zKG9wYXF1ZVJlY3QpKSB7CisgICAg
ICAgIG9wYXF1ZVJlY3QgPSByZWN0OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KHJlY3QuZlRvcCA8PSBtX29wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gbV9vcGFx
dWVSZWN0LmZCb3R0b20pIHsKLSAgICAgICAgaWYgKHJlY3QuZkxlZnQgPCBtX29wYXF1ZVJlY3Qu
ZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gbV9vcGFxdWVSZWN0LmZMZWZ0KQotICAgICAgICAgICAg
bV9vcGFxdWVSZWN0LmZMZWZ0ID0gcmVjdC5mTGVmdDsKLSAgICAgICAgaWYgKHJlY3QuZlJpZ2h0
ID4gbV9vcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0IDw9IG1fb3BhcXVlUmVjdC5mUmln
aHQpCi0gICAgICAgICAgICBtX29wYXF1ZVJlY3QuZlJpZ2h0ID0gcmVjdC5mUmlnaHQ7Ci0gICAg
fSBlbHNlIGlmIChyZWN0LmZMZWZ0IDw9IG1fb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdo
dCA+PSBtX29wYXF1ZVJlY3QuZlJpZ2h0KSB7Ci0gICAgICAgIGlmIChyZWN0LmZUb3AgPCBtX29w
YXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gbV9vcGFxdWVSZWN0LmZUb3ApCi0gICAg
ICAgICAgICBtX29wYXF1ZVJlY3QuZlRvcCA9IHJlY3QuZlRvcDsKLSAgICAgICAgaWYgKHJlY3Qu
ZkJvdHRvbSA+IG1fb3BhcXVlUmVjdC5mQm90dG9tICYmIHJlY3QuZlRvcCA8PSBtX29wYXF1ZVJl
Y3QuZkJvdHRvbSkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mQm90dG9tID0gcmVjdC5mQm90
dG9tOworICAgIGlmIChyZWN0LmZUb3AgPD0gb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRv
bSA+PSBvcGFxdWVSZWN0LmZCb3R0b20pIHsKKyAgICAgICAgaWYgKHJlY3QuZkxlZnQgPCBvcGFx
dWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49IG9wYXF1ZVJlY3QuZkxlZnQpCisgICAgICAg
ICAgICBvcGFxdWVSZWN0LmZMZWZ0ID0gcmVjdC5mTGVmdDsKKyAgICAgICAgaWYgKHJlY3QuZlJp
Z2h0ID4gb3BhcXVlUmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVmdCA8PSBvcGFxdWVSZWN0LmZSaWdo
dCkKKyAgICAgICAgICAgIG9wYXF1ZVJlY3QuZlJpZ2h0ID0gcmVjdC5mUmlnaHQ7CisgICAgfSBl
bHNlIGlmIChyZWN0LmZMZWZ0IDw9IG9wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0g
b3BhcXVlUmVjdC5mUmlnaHQpIHsKKyAgICAgICAgaWYgKHJlY3QuZlRvcCA8IG9wYXF1ZVJlY3Qu
ZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gb3BhcXVlUmVjdC5mVG9wKQorICAgICAgICAgICAgb3Bh
cXVlUmVjdC5mVG9wID0gcmVjdC5mVG9wOworICAgICAgICBpZiAocmVjdC5mQm90dG9tID4gb3Bh
cXVlUmVjdC5mQm90dG9tICYmIHJlY3QuZlRvcCA8PSBvcGFxdWVSZWN0LmZCb3R0b20pCisgICAg
ICAgICAgICBvcGFxdWVSZWN0LmZCb3R0b20gPSByZWN0LmZCb3R0b207CiAgICAgfQogCi0gICAg
bG9uZyBvcGFxdWVBcmVhID0gKGxvbmcpbV9vcGFxdWVSZWN0LndpZHRoKCkgKiAobG9uZyltX29w
YXF1ZVJlY3QuaGVpZ2h0KCk7CisgICAgbG9uZyBvcGFxdWVBcmVhID0gKGxvbmcpb3BhcXVlUmVj
dC53aWR0aCgpICogKGxvbmcpb3BhcXVlUmVjdC5oZWlnaHQoKTsKICAgICBsb25nIGFyZWEgPSAo
bG9uZylyZWN0LndpZHRoKCkgKiAobG9uZylyZWN0LmhlaWdodCgpOwogICAgIGlmIChhcmVhID4g
b3BhcXVlQXJlYSkKLSAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKKyAgICAgICAgb3BhcXVl
UmVjdCA9IHJlY3Q7CiB9CiAKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9w
YXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCkBAIC0zNjQsMzQgKzM3OCw0MyBAQCB2b2lkIE9wYXF1
ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQogICAg
IC8vIFdlIHdhbnQgdG8ga2VlcCBhcyBtdWNoIG9mIHRoZSBjdXJyZW50IG9wYXF1ZSByZWN0YW5n
bGUgYXMgd2UgY2FuLCBzbyBmaW5kIHRoZSBvbmUgbGFyZ2VzdAogICAgIC8vIHJlY3RhbmdsZSBp
bnNpZGUgbV9vcGFxdWVSZWN0IHRoYXQgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggfHJlY3R8Lgog
Ci0gICAgaWYgKHJlY3QuY29udGFpbnMobV9vcGFxdWVSZWN0KSkgewotICAgICAgICBtX29wYXF1
ZVJlY3Quc2V0RW1wdHkoKTsKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tp
bmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKworICAgIGlm
ICghU2tSZWN0OjpJbnRlcnNlY3RzKHJlY3QsIG9wYXF1ZVJlY3QpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKHJlY3QuY29udGFpbnMob3BhcXVlUmVjdCkpIHsKKyAgICAgICAgbWFya0FsbEFz
Tm9uT3BhcXVlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgZGVsdGFMZWZ0
ID0gcmVjdC5mTGVmdCAtIG1fb3BhcXVlUmVjdC5mTGVmdDsKLSAgICBpbnQgZGVsdGFSaWdodCA9
IG1fb3BhcXVlUmVjdC5mUmlnaHQgLSByZWN0LmZSaWdodDsKLSAgICBpbnQgZGVsdGFUb3AgPSBy
ZWN0LmZUb3AgLSBtX29wYXF1ZVJlY3QuZlRvcDsKLSAgICBpbnQgZGVsdGFCb3R0b20gPSBtX29w
YXF1ZVJlY3QuZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsKKyAgICBpbnQgZGVsdGFMZWZ0ID0gcmVj
dC5mTGVmdCAtIG9wYXF1ZVJlY3QuZkxlZnQ7CisgICAgaW50IGRlbHRhUmlnaHQgPSBvcGFxdWVS
ZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0OworICAgIGludCBkZWx0YVRvcCA9IHJlY3QuZlRvcCAt
IG9wYXF1ZVJlY3QuZlRvcDsKKyAgICBpbnQgZGVsdGFCb3R0b20gPSBvcGFxdWVSZWN0LmZCb3R0
b20gLSByZWN0LmZCb3R0b207CiAKLSAgICAvLyBob3Jpem9udGFsIGlzIHRoZSBsYXJnZXIgb2Yg
dGhlIHR3byByZWN0YW5nbGVzIHRvIHRoZSBsZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB8cmVjdHwg
YW5kIGluc2lkZSBtX29wYXF1ZVJlY3QuCi0gICAgLy8gdmVydGljYWwgaXMgdGhlIGxhcmdlciBv
ZiB0aGUgdHdvIHJlY3RhbmdsZXMgYWJvdmUgb3IgYmVsb3cgfHJlY3R8IGFuZCBpbnNpZGUgbV9v
cGFxdWVSZWN0LgotICAgIFNrUmVjdCBob3Jpem9udGFsID0gbV9vcGFxdWVSZWN0OworICAgIC8v
IGhvcml6b250YWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxl
ZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHxyZWN0fCBhbmQgaW5zaWRlIG9wYXF1ZVJlY3QuCisgICAg
Ly8gdmVydGljYWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgYWJvdmUgb3Ig
YmVsb3cgfHJlY3R8IGFuZCBpbnNpZGUgb3BhcXVlUmVjdC4KKyAgICBTa1JlY3QgaG9yaXpvbnRh
bCA9IG9wYXF1ZVJlY3Q7CiAgICAgaWYgKGRlbHRhVG9wID4gZGVsdGFCb3R0b20pCiAgICAgICAg
IGhvcml6b250YWwuZkJvdHRvbSA9IHJlY3QuZlRvcDsKICAgICBlbHNlCiAgICAgICAgIGhvcml6
b250YWwuZlRvcCA9IHJlY3QuZkJvdHRvbTsKLSAgICBTa1JlY3QgdmVydGljYWwgPSBtX29wYXF1
ZVJlY3Q7CisgICAgU2tSZWN0IHZlcnRpY2FsID0gb3BhcXVlUmVjdDsKICAgICBpZiAoZGVsdGFM
ZWZ0ID4gZGVsdGFSaWdodCkKICAgICAgICAgdmVydGljYWwuZlJpZ2h0ID0gcmVjdC5mTGVmdDsK
ICAgICBlbHNlCiAgICAgICAgIHZlcnRpY2FsLmZMZWZ0ID0gcmVjdC5mUmlnaHQ7CiAKICAgICBp
ZiAoKGxvbmcpaG9yaXpvbnRhbC53aWR0aCgpICogKGxvbmcpaG9yaXpvbnRhbC5oZWlnaHQoKSA+
IChsb25nKXZlcnRpY2FsLndpZHRoKCkgKiAobG9uZyl2ZXJ0aWNhbC5oZWlnaHQoKSkKLSAgICAg
ICAgbV9vcGFxdWVSZWN0ID0gaG9yaXpvbnRhbDsKKyAgICAgICAgb3BhcXVlUmVjdCA9IGhvcml6
b250YWw7CiAgICAgZWxzZQotICAgICAgICBtX29wYXF1ZVJlY3QgPSB2ZXJ0aWNhbDsKKyAgICAg
ICAgb3BhcXVlUmVjdCA9IHZlcnRpY2FsOwogfQogCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1h
cmtBbGxBc05vbk9wYXF1ZSgpCit7CisgICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gY3VycmVudFRy
YWNraW5nT3BhcXVlUmVjdChtX29wYXF1ZVJlY3QsIG1fY2FudmFzTGF5ZXJTdGFjayk7CisgICAg
b3BhcXVlUmVjdC5zZXRFbXB0eSgpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lv
blNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVn
aW9uU2tpYS5oCmluZGV4IGU4OWQ1NTAwODM0NjAxYWY2MzRjM2VmNGRkNjVhY2FhYjk2YmNhN2Uu
LjNlM2VkM2QxNmY1NWJlYmFlY2IzNWFjMDhkZDhjMzM3ZmJlOWU2ZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tp
YS5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IGFzUmVjdCgpIGNvbnN0
OwogCiAgICAgdm9pZCBwdXNoQ2FudmFzTGF5ZXIoY29uc3QgU2tQYWludCopOwotICAgIHZvaWQg
cG9wQ2FudmFzTGF5ZXIoKTsKKyAgICB2b2lkIHBvcENhbnZhc0xheWVyKGNvbnN0IFBsYXRmb3Jt
Q29udGV4dFNraWEqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKIAogICAgIHZvaWQgc2V0SW1h
Z2VNYXNrKGNvbnN0IFNrUmVjdCYgaW1hZ2VPcGFxdWVSZWN0KTsKIApAQCAtNjMsMjEgKzYzLDE3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZERyYXdQb2ludHMoY29uc3QgUGxhdGZvcm1Db250ZXh0
U2tpYSosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIFNrQ2FudmFzOjpQb2ludE1vZGUsIGludCBu
dW1Qb2ludHMsIGNvbnN0IFNrUG9pbnRbXSwgY29uc3QgU2tQYWludCYpOwogICAgIHZvaWQgZGlk
RHJhd0JvdW5kZWQoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKIAotcHJpdmF0ZToKICAgICBl
bnVtIERyYXdUeXBlIHsKICAgICAgICAgRmlsbE9ubHksCi0gICAgICAgIEZpbGxPclN0cm9rZQor
ICAgICAgICBGaWxsT3JTdHJva2UsCisgICAgICAgIEZpbGxCeUNvcHkKICAgICB9OwogCi0gICAg
dm9pZCBkaWREcmF3KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3QgU2tCaXRtYXAqIHNv
dXJjZUJpdG1hcCwgYm9vbCBmaWxsc0JvdW5kcywgRHJhd1R5cGUpOwotICAgIHZvaWQgZGlkRHJh
d1VuYm91bmRlZChjb25zdCBTa1BhaW50Jik7Ci0gICAgdm9pZCBtYXJrUmVjdEFzT3BhcXVlKGNv
bnN0IFNrUmVjdCYpOwotICAgIHZvaWQgbWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3Qm
KTsKLQotICAgIFNrUmVjdCBtX29wYXF1ZVJlY3Q7Ci0KICAgICBzdHJ1Y3QgQ2FudmFzTGF5ZXJT
dGF0ZSB7Ci0gICAgICAgIENhbnZhc0xheWVyU3RhdGUoKSA6IGhhc0ltYWdlTWFzayhmYWxzZSkg
eyB9CisgICAgICAgIENhbnZhc0xheWVyU3RhdGUoKQorICAgICAgICAgICAgOiBoYXNJbWFnZU1h
c2soZmFsc2UpCisgICAgICAgICAgICAsIG9wYXF1ZVJlY3QoU2tSZWN0OjpNYWtlRW1wdHkoKSkK
KyAgICAgICAgeyB9CiAKICAgICAgICAgU2tQYWludCBwYWludDsKIApAQCAtODUsOCArODEsMTkg
QEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBoYXNJbWFnZU1hc2s7CiAgICAgICAgIC8vIFRoZSBv
cGFxdWUgYXJlYSBpbiB0aGUgaW1hZ2UgbWFzay4KICAgICAgICAgU2tSZWN0IGltYWdlT3BhcXVl
UmVjdDsKKworICAgICAgICBTa1JlY3Qgb3BhcXVlUmVjdDsKICAgICB9OwogCitwcml2YXRlOgor
ICAgIHZvaWQgZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFw
KiBzb3VyY2VCaXRtYXAsIGJvb2wgZmlsbHNCb3VuZHMsIERyYXdUeXBlKTsKKyAgICB2b2lkIGRp
ZERyYXdVbmJvdW5kZWQoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUGFpbnQm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3VHlwZSk7CisgICAgdm9pZCBtYXJrUmVjdEFz
T3BhcXVlKGNvbnN0IFNrUmVjdCYpOworICAgIHZvaWQgbWFya1JlY3RBc05vbk9wYXF1ZShjb25z
dCBTa1JlY3QmKTsKKyAgICB2b2lkIG1hcmtBbGxBc05vbk9wYXF1ZSgpOworCisgICAgU2tSZWN0
IG1fb3BhcXVlUmVjdDsKKwogICAgIFZlY3RvcjxDYW52YXNMYXllclN0YXRlLCAzPiBtX2NhbnZh
c0xheWVyU3RhY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRleCAwY2E3MDlj
ZDRkODExMDIwODU5NWQzN2IyMTQ3MjBkMTE3ZTQyMTEzLi5mYjIyZjQwNWZhNTViYTExMDM5OTUx
YWFhOWIxYmQ2YTE1MDdlNzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKQEAgLTI0OCw3
ICsyNDgsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlc3RvcmVMYXllcigpCiB7CiAg
ICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKICAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKLSAg
ICAgICAgbV9vcGFxdWVSZWdpb24ucG9wQ2FudmFzTGF5ZXIoKTsKKyAgICAgICAgbV9vcGFxdWVS
ZWdpb24ucG9wQ2FudmFzTGF5ZXIodGhpcywgbV9vcGFxdWVSZWdpb25UcmFuc2Zvcm0pOwogfQog
CiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCmluZGV4IDE3OGM2NTY5MDMwMzk2M2Ux
ZTgzNzQ3MGRhYmNlZTE4OTUxOGM4MTYuLjVkZDY3YzljYmQ3YmFmYjI2ZDk2NmQ1NTgxNTM4NTlh
YzRjZDU3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZv
cm1Db250ZXh0U2tpYVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
UGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSB7
CiAKICNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAogICAgIEVYUEVDVF9FUShhLngoKSwg
Yi54KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEubWF4WCgpLCBiLm1heFgoKSk7IFwKICAgICBFWFBF
Q1RfRVEoYS55KCksIGIueSgpKTsgXAotICAgIEVYUEVDVF9FUShhLm1heFkoKSwgYi5tYXhZKCkp
OworICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEo
YS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7CiAKICNkZWZpbmUgRVhQRUNUX1BJWEVMU19NQVRDSChi
aXRtYXAsIG9wYXF1ZVJlY3QpIFwKIHsgXApAQCAtMjI2LDkgKzIyNiw0NyBAQCBURVNUKFBsYXRm
b3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUNsaXBUZXN0KQogICAgIGNvbnRleHQuc2F2
ZSgpOwogICAgIGNvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgRmxv
YXRSZWN0KDMwLCAzMCwgMTAsIDEwKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3Qo
MTAsIDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNv
dXJjZU92ZXIpOworICAgIGNvbnRleHQucmVzdG9yZSgpOwogICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKICAgICBF
WFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigp
LmFzUmVjdCgpKTsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworVEVTVChQbGF0Zm9ybUNv
bnRleHRTa2lhVGVzdCwgdHJhY2tJbWFnZU1hc2spCit7CisgICAgU2tCaXRtYXAgYml0bWFwOwor
ICAgIGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCA0MDAsIDQw
MCk7CisgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1h
cCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFx
dWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwg
MC4wZiwgMC4wZik7CisKKyAgICAvLyBJbWFnZSBtYXNrcyBhcmUgZG9uZSBieSBkcmF3aW5nIGEg
Yml0bWFwIGludG8gYSB0cmFuc3BhcmVuY3kgbGF5ZXIgdGhhdCB1c2VzIERzdEluIHRvIG1hc2sK
KyAgICAvLyBvdXQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgYmVsb3cgdGhhdCBpcyBmaWxsZWQgd2l0
aCB0aGUgbWFzayBjb2xvci4gSW4gdGhlIGVuZCB0aGlzIHNob3VsZAorICAgIC8vIG5vdCBiZSBt
YXJrZWQgb3BhcXVlLgorCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwor
ICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMTAsIDEwKSwgb3BhcXVlLCBD
b2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRleHQu
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZURlc3RpbmF0aW9uSW4pOworICAgIGNvbnRl
eHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
YWxwaGFJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEwMCkpOworICAg
IGFscGhhSW1hZ2UtPmNvbnRleHQoKS0+ZmlsbFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCks
IGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdCgxMCwg
MTAsIDEwLCAxMCkpOworCisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAg
IGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKElu
dFJlY3QoKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBF
WFBFQ1RfUElYRUxTX01BVENIX0VYQUNUKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJl
Z2lvbigpLmFzUmVjdCgpKTsKIH0KIAogVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJh
Y2tPcGFxdWVKb2luVGVzdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138018</attachid>
            <date>2012-04-19 18:08:52 -0700</date>
            <delta_ts>2012-04-19 18:18:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84275-20120419210851.patch</filename>
            <type>text/plain</type>
            <size>26950</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxYjcwOTdiM2UyMzg0
ZWU1NGJmMmVhNGU4MmRjNzhiZTZjZWZhOS4uZGYwMThkNTEzNTg3OGQ4MGM2NjhjNDkwM2M5N2M4
MTNkZjg2NDI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
dHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVjdAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNP
cGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cHVzaENhbnZhc0xh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnBvcENhbnZhc0xheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQb2ludHMpOgorICAgICAgICAoV2Vi
Q29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVS
ZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJl
Z2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVn
aW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVS
ZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oOgorICAgICAgICAoT3BhcXVlUmVnaW9uU2tpYSk6
CisgICAgICAgIChDYW52YXNMYXllclN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVyKToKKwogMjAxMi0wNC0xOCAgQWRyaWVubmUgV2Fs
a2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ29uc29saWRhdGUg
YWRqdXN0VGV4dFJlbmRlck1vZGUgY29weXBhc3RhIGludG8gU2tpYSBjb250ZXh0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDA0NDA5ZWEyOGVkYzQ2N2E5OTYwN2Q4ODMxODgyNWEyNWMx
NDZmM2UuLjA1NzA0OGU5ZTMzMzdmMzY2ZWRkMGY3NmU5MTEzNWQwYzJmZjk4MjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDQtMTggIERhbmEgSmFu
c2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbWFnZSBt
YXNrcyBhcmUgY29uc2lkZXJlZCBvcGFxdWUgaW5jb3JyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lh
VGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
CiAyMDEyLTA0LTE4ICBOaWNvIFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbY2hyb21pdW0vbWFjXSBGaXggYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcAppbmRleCBlNjAy
ZTYwNzkwNWY3NjQ1MmEyZmRiNmY3ZjRiNWQ3ZWRlY2ZjZjBjLi5iMDJlZjViMGU4ZWFmYmQyNWZl
NTMxMmI4MWViZGE5NjZlNzI1MWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKQEAgLTEyNCwxMCAr
MTI0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShjb25z
dCBTa1BhaW50JiBwYWludCwgYm9vbCBzcmNJc09wYXF1CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhbGwgcGl4ZWxzIHBhaW50ZWQgd2lsbCBiZSBvcGFxdWUuCi1zdGF0aWMgaW5saW5lIGJvb2wg
cGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1h
cCA9IDAsIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlKQorc3RhdGljIGlubGluZSBib29sIHBh
aW50SXNPcGFxdWUoY29uc3QgU2tQYWludCYgcGFpbnQsIE9wYXF1ZVJlZ2lvblNraWE6OkRyYXdU
eXBlIGRyYXdUeXBlLCBjb25zdCBTa0JpdG1hcCogYml0bWFwKQogeworICAgIGlmIChkcmF3VHlw
ZSA9PSBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5KQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKHBhaW50LmdldEFscGhhKCkgPCAweEZGKQogICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5cGUgIT0gT3BhcXVlUmVnaW9uU2tpYTo6
RmlsbE9yU3Ryb2tlOwogICAgIGlmICghY2hlY2tGaWxsT25seSAmJiBwYWludC5nZXRTdHlsZSgp
ICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlICYmIHBhaW50LmlzQW50aUFsaWFzKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBTa1NoYWRlciogc2hhZGVyID0gcGFpbnQuZ2V0U2hhZGVyKCk7
CkBAIC0xNDcsNiArMTUwLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYWludElzT3BhcXVlKGNv
bnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBTa0JpdG1hcCogYml0bWFwID0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgcmVjdGFuZ3VsYXIgY2xp
cCwgd2l0aCB0aGUgcmVzdWx0IGluIHxjbGlwcGVkQm91bmRzfC4KK3N0YXRpYyBpbmxpbmUgYm9v
bCBnZXRUb3RhbENsaXBwZWRCb3VuZHMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIFNrUmVjdCYgY2xpcHBlZEJvdW5k
cykKK3sKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBz
cGFjZS4KKyAgICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52
YXM6OmtSZWN0X0NsaXBUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTa0lSZWN0
IGRldmljZUNsaXA7CisgICAgaWYgKCFjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xpcERldmljZUJv
dW5kcygmZGV2aWNlQ2xpcCkpIHsKKyAgICAgICAgY2xpcHBlZEJvdW5kcy5zZXRFbXB0eSgpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjbGlwcGVkQm91bmRzLnNldChkZXZp
Y2VDbGlwKTsKKworICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0gdG8gdGhlIHRyYWNraW5nIHNw
YWNlLgorICAgIFNrTWF0cml4IGNhbnZhc1RvVGFyZ2V0VHJhbnNmb3JtID0gdHJhbnNmb3JtOwor
ICAgIGlmICghY2FudmFzVG9UYXJnZXRUcmFuc2Zvcm0ubWFwUmVjdCgmY2xpcHBlZEJvdW5kcykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIE9w
YXF1ZVJlZ2lvblNraWE6OnB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50KiBwYWludCkKIHsK
ICAgICBDYW52YXNMYXllclN0YXRlIHN0YXRlOwpAQCAtMTU1LDkgKzE4MSwzMiBAQCB2b2lkIE9w
YXF1ZVJlZ2lvblNraWE6OnB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50KiBwYWludCkKICAg
ICBtX2NhbnZhc0xheWVyU3RhY2suYXBwZW5kKHN0YXRlKTsKIH0KIAotdm9pZCBPcGFxdWVSZWdp
b25Ta2lhOjpwb3BDYW52YXNMYXllcigpCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnBvcENhbnZh
c0xheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogeworICAgIGNvbnN0IENhbnZhc0xheWVyU3RhdGUgY2FudmFz
TGF5ZXIgPSBtX2NhbnZhc0xheWVyU3RhY2subGFzdCgpOwogICAgIG1fY2FudmFzTGF5ZXJTdGFj
ay5yZW1vdmVMYXN0KCk7CisKKyAgICBTa1JlY3QgbGF5ZXJPcGFxdWVSZWN0ID0gY2FudmFzTGF5
ZXIub3BhcXVlUmVjdDsKKyAgICBib29sIGZpbGxzQm91bmRzID0gdHJ1ZTsKKworICAgIC8vIEFw
cGx5IHRoZSBpbWFnZSBtYXNrLgorICAgIGlmIChjYW52YXNMYXllci5oYXNJbWFnZU1hc2sgJiYg
IWxheWVyT3BhcXVlUmVjdC5pbnRlcnNlY3QoY2FudmFzTGF5ZXIuaW1hZ2VPcGFxdWVSZWN0KSkK
KyAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgIC8vIENoZWNrIHRoZSBjdXJyZW50
IGNsaXAgdG8gc2VlIGlmIGl0IGNoYW5nZXMgdGhlIHNoYXBlIG9mIHRoZSBsYXllck9wYXF1ZVJl
Y3Qgb3IgY2xpcHMgYXdheSB0aGUgbGF5ZXIuCisgICAgU2tSZWN0IGNsaXBwZWRCb3VuZHM7Cisg
ICAgaWYgKCFnZXRUb3RhbENsaXBwZWRCb3VuZHMoY29udGV4dCwgdHJhbnNmb3JtLCBjbGlwcGVk
Qm91bmRzKSkKKyAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKyAgICBlbHNlIGlmIChjbGlw
cGVkQm91bmRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFmaWxsc0Jv
dW5kcykgeworICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHdpbGwg
YmUgb3BhcXVlIGluIHRoZSBzb3VyY2UgbGF5ZXIgc28ganVzdCBjb25zaWRlciBpdCBhbiB1bmJv
dW5kZWQgZHJhdy4KKyAgICAgICAgZGlkRHJhd1VuYm91bmRlZChjb250ZXh0LCBjYW52YXNMYXll
ci5wYWludCwgdHJhbnNmb3JtLCBGaWxsQnlDb3B5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGFwcGx5TGF5ZXJPcGFxdWVSZWdpb24obGF5ZXJPcGFxdWVSZWN0LCBjbGlwcGVkQm91
bmRzLCBjYW52YXNMYXllci5wYWludCk7CiB9CiAKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6c2V0
SW1hZ2VNYXNrKGNvbnN0IFNrUmVjdCYgaW1hZ2VPcGFxdWVSZWN0KQpAQCAtMTc0LDcgKzIyMyw3
IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1JlY3QoY29uc3QgUGxhdGZvcm1Db250
ZXh0U2tpYSogY29udGV4dCwgY29uc3QgQWZmCiAgICAgICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBm
YWxzZTsKIAogICAgICAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCi0gICAg
ICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBhaW50KTsKKyAgICAgICAgICAgIGRpZERyYXdVbmJv
dW5kZWQoY29udGV4dCwgcGFpbnQsIHRyYW5zZm9ybSwgRmlsbE9yU3Ryb2tlKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBTa1JlY3Qgc3Ryb2tlUmVjdDsKICAgICAgICAgICAgIHN0cm9r
ZVJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5kcyhmaWxsUmVjdCwgJnN0cm9rZVJlY3QpOwpA
QCAtMTk3LDcgKzI0Niw3IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BhdGgoY29u
c3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgQWZmCiAgICAgYm9vbCBmaWxs
c0JvdW5kcyA9IGZhbHNlOwogCiAgICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFzdEJvdW5kcygp
KQotICAgICAgICBkaWREcmF3VW5ib3VuZGVkKHBhaW50KTsKKyAgICAgICAgZGlkRHJhd1VuYm91
bmRlZChjb250ZXh0LCBwYWludCwgdHJhbnNmb3JtLCBGaWxsT3JTdHJva2UpOwogICAgIGVsc2Ug
ewogICAgICAgICByZWN0ID0gcGFpbnQuY29tcHV0ZUZhc3RCb3VuZHMocGF0aC5nZXRCb3VuZHMo
KSwgJnJlY3QpOwogICAgICAgICBkaWREcmF3KGNvbnRleHQsIHRyYW5zZm9ybSwgcmVjdCwgcGFp
bnQsIDAsIGZpbGxzQm91bmRzLCBGaWxsT3JTdHJva2UpOwpAQCAtMjI1LDcgKzI3NCw3IEBAIHZv
aWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1BvaW50cyhjb25zdCBQbGF0Zm9ybUNvbnRleHRT
a2lhKiBjb250ZXh0LCBjb25zdCBBCiAgICAgYm9vbCBmaWxsc0JvdW5kcyA9IGZhbHNlOwogCiAg
ICAgaWYgKCFwYWludC5jYW5Db21wdXRlRmFzdEJvdW5kcygpKQotICAgICAgICBkaWREcmF3VW5i
b3VuZGVkKHBhaW50KTsKKyAgICAgICAgZGlkRHJhd1VuYm91bmRlZChjb250ZXh0LCBwYWludCwg
dHJhbnNmb3JtLCBGaWxsT3JTdHJva2UpOwogICAgIGVsc2UgewogICAgICAgICByZWN0ID0gcGFp
bnQuY29tcHV0ZUZhc3RCb3VuZHMocmVjdCwgJnJlY3QpOwogICAgICAgICBkaWREcmF3KGNvbnRl
eHQsIHRyYW5zZm9ybSwgcmVjdCwgcGFpbnQsIDAsIGZpbGxzQm91bmRzLCBGaWxsT3JTdHJva2Up
OwpAQCAtMjM3LDcgKzI4Niw3IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5k
ZWQoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QKICAgICBib29sIGZp
bGxzQm91bmRzID0gZmFsc2U7CiAKICAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRz
KCkpCi0gICAgICAgIGRpZERyYXdVbmJvdW5kZWQocGFpbnQpOworICAgICAgICBkaWREcmF3VW5i
b3VuZGVkKGNvbnRleHQsIHBhaW50LCB0cmFuc2Zvcm0sIEZpbGxPclN0cm9rZSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIFNrUmVjdCByZWN0OwogICAgICAgICByZWN0ID0gcGFpbnQuY29tcHV0ZUZh
c3RCb3VuZHMoYm91bmRzLCAmcmVjdCk7CkBAIC0yNTQsNzUgKzMwMyw3NiBAQCB2b2lkIE9wYXF1
ZVJlZ2lvblNraWE6OmRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwg
Y29uc3QgQWZmaW5lVAogICAgIGlmICghY2FudmFzVHJhbnNmb3JtLm1hcFJlY3QoJnRhcmdldFJl
Y3QpKQogICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwogCi0gICAgLy8gQXBwbHkgdGhlIGN1
cnJlbnQgY2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBpZiAoY29udGV4dC0+
Y2FudmFzKCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52YXM6OmtSZWN0X0NsaXBUeXBlKQorICAg
IC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0gdG8gdGhlIHRyYWNraW5nIHNwYWNlLgorICAgIFNrTWF0
cml4IGNhbnZhc1RvVGFyZ2V0VHJhbnNmb3JtID0gdHJhbnNmb3JtOworICAgIGlmICghY2FudmFz
VG9UYXJnZXRUcmFuc2Zvcm0ubWFwUmVjdCgmdGFyZ2V0UmVjdCkpCisgICAgICAgICBmaWxsc0Jv
dW5kcyA9IGZhbHNlOworCisgICAgLy8gQXBwbHkgdGhlIGN1cnJlbnQgY2xpcC4KKyAgICBTa1Jl
Y3QgY2xpcHBlZEJvdW5kczsKKyAgICBpZiAoIWdldFRvdGFsQ2xpcHBlZEJvdW5kcyhjb250ZXh0
LCB0cmFuc2Zvcm0sIGNsaXBwZWRCb3VuZHMpKQogICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNl
OwotICAgIGVsc2UgewotICAgICAgICBTa0lSZWN0IGRldmljZUNsaXA7Ci0gICAgICAgIGlmICgh
Y29udGV4dC0+Y2FudmFzKCktPmdldENsaXBEZXZpY2VCb3VuZHMoJmRldmljZUNsaXApKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KFNrSW50
VG9TY2FsYXIoZGV2aWNlQ2xpcC5mTGVmdCksIFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mVG9w
KSwgU2tJbnRUb1NjYWxhcihkZXZpY2VDbGlwLmZSaWdodCksIFNrSW50VG9TY2FsYXIoZGV2aWNl
Q2xpcC5mQm90dG9tKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGVsc2UgaWYg
KCF0YXJnZXRSZWN0LmludGVyc2VjdChjbGlwcGVkQm91bmRzKSkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5cGUgPT0gRmlsbE9ubHk7Ci0gICAgYm9v
bCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIHNvdXJjZUJpdG1h
cCwgY2hlY2tGaWxsT25seSk7CisgICAgYm9vbCBkcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUo
cGFpbnQsIGRyYXdUeXBlLCBzb3VyY2VCaXRtYXApOworICAgIGJvb2wgeGZlcnNPcGFxdWUgPSB4
ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7CisgICAgYm9vbCBwcmVzZXJ2ZXNP
cGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgZHJhd3NPcGFxdWUpOwogCi0g
ICAgYm9vbCB4ZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIGxhc3RMYXllckRy
YXdzT3BhcXVlKTsKKyAgICBpZiAoZmlsbHNCb3VuZHMgJiYgeGZlcnNPcGFxdWUpCisgICAgICAg
IG1hcmtSZWN0QXNPcGFxdWUodGFyZ2V0UmVjdCk7CisgICAgZWxzZSBpZiAoIXByZXNlcnZlc09w
YXF1ZSkKKyAgICAgICAgbWFya1JlY3RBc05vbk9wYXF1ZSh0YXJnZXRSZWN0KTsKK30KIAotICAg
IC8vIEFwcGx5IHRoZSBTa0NhbnZhcyBsYXllcnMgd2Ugd2lsbCBiZSBkcmF3aW5nIHRocm91Z2gu
Ci0gICAgZm9yIChzaXplX3QgaSA9IG1fY2FudmFzTGF5ZXJTdGFjay5zaXplKCk7IGkgPiAwOyAt
LWkpIHsKLSAgICAgICAgY29uc3QgQ2FudmFzTGF5ZXJTdGF0ZSYgY2FudmFzTGF5ZXIgPSBtX2Nh
bnZhc0xheWVyU3RhY2tbaS0xXTsKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1VuYm91
bmRlZChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1BhaW50JiBw
YWludCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIERyYXdUeXBlIGRyYXdUeXBl
KQoreworICAgIGJvb2wgZHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50LCBkcmF3VHlw
ZSwgMCk7CisgICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1
ZShwYWludCwgZHJhd3NPcGFxdWUpOwogCi0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBzdGls
bCB0cmFjayB0aGUgb3BhcXVlIHBhcnQgYnV0IGl0J3MgYWx3YXlzIGVtcHR5IHJpZ2h0IG5vdyBh
bnl3YXlzLgotICAgICAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFjYW52YXNM
YXllci5pbWFnZU9wYXF1ZVJlY3QuY29udGFpbnModGFyZ2V0UmVjdCkpCi0gICAgICAgICAgICBm
aWxsc0JvdW5kcyA9IGZhbHNlOworICAgIGlmIChwcmVzZXJ2ZXNPcGFxdWUpCisgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBib29sIGNoZWNrRmlsbE9ubHkgPSBkcmF3VHlwZSA9PSBGaWxsT25s
eTsKLSAgICAgICAgbGFzdExheWVyRHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKGNhbnZhc0xh
eWVyLnBhaW50LCAwLCBjaGVja0ZpbGxPbmx5KTsKLSAgICAgICAgLy8gSWYgYW55IGxheWVyIGRv
ZXNuJ3QgcGFpbnQgb3BhcXVlLCB0aGVuIHRoZSByZXN1bHQgd2lsbCBub3QgYmUgb3BhcXVlLgot
ICAgICAgICB4ZmVyc09wYXF1ZSAmPSB4ZmVybW9kZUlzT3BhcXVlKGNhbnZhc0xheWVyLnBhaW50
LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7Ci0gICAgfQorICAgIFNrUmVjdCBjbGlwcGVkQm91bmRz
OwogCi0gICAgLy8gUHJlc2VydmluZyBvcGFxdWUgb25seSBtYXR0ZXJzIGZvciB0aGUgYm90dG9t
LW1vc3QgbGF5ZXIuIEl0cyBjb250ZW50cyBhcmUgZWl0aGVyIG9wYXF1ZSBvciBub3QsIGFuZCBp
ZiBub3QKLSAgICAvLyB0aGVuIHdlIGNhcmUgaWYgaXQgcHJlc2VydmVzIHRoZSBvcGFxdWVuZXNz
IG9mIHRoZSB0YXJnZXQgZGV2aWNlIHdoZW4gaXQgaXMgZHJhd24gaW50byB0aGUgZGV2aWNlLgot
ICAgIGJvb2wgcHJlc2VydmVzT3BhcXVlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3RhY2suaXNF
bXB0eSgpKQotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1
ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOworICAgIC8vIFVzZSB0aGUgY3VycmVudCBj
bGlwIGlmIHRoZXJlIGlzIG9uZS4KKyAgICBpZiAoZ2V0VG90YWxDbGlwcGVkQm91bmRzKGNvbnRl
eHQsIHRyYW5zZm9ybSwgY2xpcHBlZEJvdW5kcykpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFx
dWUoY2xpcHBlZEJvdW5kcyk7CiAgICAgZWxzZQotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4
ZmVybW9kZVByZXNlcnZlc09wYXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIGxhc3RM
YXllckRyYXdzT3BhcXVlKTsKLQotCi0gICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybSB0byB0aGUg
dHJhY2tpbmcgc3BhY2UuCi0gICAgU2tNYXRyaXggY2FudmFzVG9UYXJnZXRUcmFuc2Zvcm0gPSB0
cmFuc2Zvcm07Ci0gICAgaWYgKCFjYW52YXNUb1RhcmdldFRyYW5zZm9ybS5tYXBSZWN0KCZ0YXJn
ZXRSZWN0KSkKLSAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKyAgICAgICAgbWFya0FsbEFz
Tm9uT3BhcXVlKCk7Cit9CiAKLSAgICBpZiAoZmlsbHNCb3VuZHMgJiYgeGZlcnNPcGFxdWUpCi0g
ICAgICAgIG1hcmtSZWN0QXNPcGFxdWUodGFyZ2V0UmVjdCk7Ci0gICAgZWxzZSBpZiAoU2tSZWN0
OjpJbnRlcnNlY3RzKHRhcmdldFJlY3QsIG1fb3BhcXVlUmVjdCkgJiYgIXByZXNlcnZlc09wYXF1
ZSkKLSAgICAgICAgbWFya1JlY3RBc05vbk9wYXF1ZSh0YXJnZXRSZWN0KTsKK3N0YXRpYyBpbmxp
bmUgU2tSZWN0JiBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KFNrUmVjdCYgcm9vdE9wYXF1ZVJl
Y3QsIFZlY3RvcjxPcGFxdWVSZWdpb25Ta2lhOjpDYW52YXNMYXllclN0YXRlLCAzPiYgY2FudmFz
TGF5ZXJTdGFjaykKK3sKKyAgICAvLyBJZiB3ZSBhcmUgZHJhd2luZyBpbnRvIGEgY2FudmFzIGxh
eWVyLCB0aGVuIHRyYWNrIHRoZSBvcGFxdWUgcmVjdCBpbiB0aGF0IGxheWVyLgorICAgIGlmICgh
Y2FudmFzTGF5ZXJTdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBjYW52YXNMYXllclN0
YWNrLmxhc3QoKS5vcGFxdWVSZWN0OworICAgIHJldHVybiByb290T3BhcXVlUmVjdDsKIH0KIAot
dm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKGNvbnN0IFNrUGFpbnQmIHBh
aW50KQordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjphcHBseUxheWVyT3BhcXVlUmVnaW9uKGNvbnN0
IFNrUmVjdCYgbGF5ZXJPcGFxdWVSZWN0LCBjb25zdCBTa1JlY3QmIGNsaXBwZWRCb3VuZHMsIGNv
bnN0IFNrUGFpbnQmIHBhaW50KQogewotICAgIC8vIFByZXNlcnZpbmcgb3BhcXVlIG9ubHkgbWF0
dGVycyBmb3IgdGhlIGJvdHRvbS1tb3N0IGxheWVyLiBJdHMgY29udGVudHMgYXJlIGVpdGhlciBv
cGFxdWUgb3Igbm90LCBhbmQgaWYgbm90Ci0gICAgLy8gdGhlbiB3ZSBjYXJlIGlmIGl0IHByZXNl
cnZlcyB0aGUgb3BhcXVlbmVzcyBvZiB0aGUgdGFyZ2V0IGRldmljZSB3aGVuIGl0IGlzIGRyYXdu
IGludG8gdGhlIGRldmljZS4KLSAgICBib29sIHByZXNlcnZlc09wYXF1ZTsKLQotICAgIGJvb2wg
Y2hlY2tGaWxsT25seSA9IGZhbHNlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3RhY2suaXNFbXB0
eSgpKSB7Ci0gICAgICAgIGJvb2wgbGFzdExheWVyRHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVl
KHBhaW50LCAwLCBjaGVja0ZpbGxPbmx5KTsKLSAgICAgICAgcHJlc2VydmVzT3BhcXVlID0geGZl
cm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBib29sIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1
ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAg
ICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShtX2NhbnZhc0xheWVy
U3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9CisgICAgU2tSZWN0
IHNvdXJjZU9wYXF1ZVJlY3QgPSBsYXllck9wYXF1ZVJlY3Q7CisgICAgLy8gU2F2ZSB0aGUgb3Bh
cXVlIGFyZWEgaW4gdGhlIGRlc3RpbmF0aW9uLCBzbyB3ZSBjYW4gcHJlc2VydmUgdGhlIHBhcnRz
IG9mIGl0IHVuZGVyIHRoZSBzb3VyY2Ugb3BhcXVlIGFyZWEgaWYgcG9zc2libGUuCisgICAgU2tS
ZWN0IGRlc3RpbmF0aW9uT3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QobV9v
cGFxdWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOwogCi0gICAgaWYgKCFwcmVzZXJ2ZXNPcGFx
dWUpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0IHdhcyBkcmF3biBvbiBzbyBqdXN0
IGRlc3Ryb3kgdGhlIGtub3duIG9wYXF1ZSBhcmVhLgotICAgICAgICBtX29wYXF1ZVJlY3QgPSBT
a1JlY3Q6Ok1ha2VFbXB0eSgpOwotICAgIH0KKyAgICBib29sIG91dHNpZGVTb3VyY2VPcGFxdWVS
ZWN0UHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGZhbHNl
KTsKKyAgICBpZiAoIW91dHNpZGVTb3VyY2VPcGFxdWVSZWN0UHJlc2VydmVzT3BhcXVlKQorICAg
ICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKGNsaXBwZWRCb3VuZHMpOworCisgICAgaWYgKCFzb3Vy
Y2VPcGFxdWVSZWN0LmludGVyc2VjdChjbGlwcGVkQm91bmRzKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBzb3VyY2VPcGFxdWVSZWN0RHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKHBh
aW50LCBGaWxsT25seSwgMCk7CisgICAgYm9vbCBzb3VyY2VPcGFxdWVSZWN0WGZlcnNPcGFxdWUg
PSB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBzb3VyY2VPcGFxdWVSZWN0RHJhd3NPcGFxdWUpOwor
ICAgIGJvb2wgc291cmNlT3BhcXVlUmVjdFByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2Vy
dmVzT3BhcXVlKHBhaW50LCBzb3VyY2VPcGFxdWVSZWN0RHJhd3NPcGFxdWUpOworCisgICAgLy8g
SWYgdGhlIGxheWVyJ3Mgb3BhcXVlIGFyZWEgaXMgYmVpbmcgZHJhd24gb3BhcXVlIGluIHRoZSBs
YXllciBiZWxvdywgdGhlbiBtYXJrIGl0IG9wYXF1ZS4gT3RoZXJ3aXNlLAorICAgIC8vIGlmIGl0
IHByZXNlcnZlcyBvcGFxdWUgdGhlbiBrZWVwIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3by4K
KyAgICBpZiAoc291cmNlT3BhcXVlUmVjdFhmZXJzT3BhcXVlKQorICAgICAgICBtYXJrUmVjdEFz
T3BhcXVlKHNvdXJjZU9wYXF1ZVJlY3QpOworICAgIGVsc2UgaWYgKHNvdXJjZU9wYXF1ZVJlY3RQ
cmVzZXJ2ZXNPcGFxdWUgJiYgc291cmNlT3BhcXVlUmVjdC5pbnRlcnNlY3QoZGVzdGluYXRpb25P
cGFxdWVSZWN0KSkKKyAgICAgICAgbWFya1JlY3RBc09wYXF1ZShzb3VyY2VPcGFxdWVSZWN0KTsK
IH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVj
dCYgcmVjdCkKQEAgLTMzMiwzMSArMzgyLDMzIEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFy
a1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCiAgICAgLy8gcmVjdGFuZ2xlIHRoZW4g
d2UgZG8gdGhhdCwgYXMgdGhhdCBpcyB0aGUgY2hlYXBlc3Qgd2F5IHRvIGluY3JlYXNlIHRoZSBh
cmVhIHJldHVybmVkCiAgICAgLy8gd2l0aG91dCBpbmNyZWFzaW5nIHRoZSBjb21wbGV4aXR5Lgog
CisgICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gY3VycmVudFRyYWNraW5nT3BhcXVlUmVjdChtX29w
YXF1ZVJlY3QsIG1fY2FudmFzTGF5ZXJTdGFjayk7CisKICAgICBpZiAocmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBpZiAobV9vcGFxdWVSZWN0LmNvbnRhaW5zKHJlY3QpKQor
ICAgIGlmIChvcGFxdWVSZWN0LmNvbnRhaW5zKHJlY3QpKQogICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHJlY3QuY29udGFpbnMobV9vcGFxdWVSZWN0KSkgewotICAgICAgICBtX29wYXF1ZVJlY3Qg
PSByZWN0OworICAgIGlmIChyZWN0LmNvbnRhaW5zKG9wYXF1ZVJlY3QpKSB7CisgICAgICAgIG9w
YXF1ZVJlY3QgPSByZWN0OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHJlY3Qu
ZlRvcCA8PSBtX29wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gbV9vcGFxdWVSZWN0
LmZCb3R0b20pIHsKLSAgICAgICAgaWYgKHJlY3QuZkxlZnQgPCBtX29wYXF1ZVJlY3QuZkxlZnQg
JiYgcmVjdC5mUmlnaHQgPj0gbV9vcGFxdWVSZWN0LmZMZWZ0KQotICAgICAgICAgICAgbV9vcGFx
dWVSZWN0LmZMZWZ0ID0gcmVjdC5mTGVmdDsKLSAgICAgICAgaWYgKHJlY3QuZlJpZ2h0ID4gbV9v
cGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0IDw9IG1fb3BhcXVlUmVjdC5mUmlnaHQpCi0g
ICAgICAgICAgICBtX29wYXF1ZVJlY3QuZlJpZ2h0ID0gcmVjdC5mUmlnaHQ7Ci0gICAgfSBlbHNl
IGlmIChyZWN0LmZMZWZ0IDw9IG1fb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBt
X29wYXF1ZVJlY3QuZlJpZ2h0KSB7Ci0gICAgICAgIGlmIChyZWN0LmZUb3AgPCBtX29wYXF1ZVJl
Y3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gbV9vcGFxdWVSZWN0LmZUb3ApCi0gICAgICAgICAg
ICBtX29wYXF1ZVJlY3QuZlRvcCA9IHJlY3QuZlRvcDsKLSAgICAgICAgaWYgKHJlY3QuZkJvdHRv
bSA+IG1fb3BhcXVlUmVjdC5mQm90dG9tICYmIHJlY3QuZlRvcCA8PSBtX29wYXF1ZVJlY3QuZkJv
dHRvbSkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mQm90dG9tID0gcmVjdC5mQm90dG9tOwor
ICAgIGlmIChyZWN0LmZUb3AgPD0gb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBv
cGFxdWVSZWN0LmZCb3R0b20pIHsKKyAgICAgICAgaWYgKHJlY3QuZkxlZnQgPCBvcGFxdWVSZWN0
LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49IG9wYXF1ZVJlY3QuZkxlZnQpCisgICAgICAgICAgICBv
cGFxdWVSZWN0LmZMZWZ0ID0gcmVjdC5mTGVmdDsKKyAgICAgICAgaWYgKHJlY3QuZlJpZ2h0ID4g
b3BhcXVlUmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVmdCA8PSBvcGFxdWVSZWN0LmZSaWdodCkKKyAg
ICAgICAgICAgIG9wYXF1ZVJlY3QuZlJpZ2h0ID0gcmVjdC5mUmlnaHQ7CisgICAgfSBlbHNlIGlm
IChyZWN0LmZMZWZ0IDw9IG9wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gb3BhcXVl
UmVjdC5mUmlnaHQpIHsKKyAgICAgICAgaWYgKHJlY3QuZlRvcCA8IG9wYXF1ZVJlY3QuZlRvcCAm
JiByZWN0LmZCb3R0b20gPj0gb3BhcXVlUmVjdC5mVG9wKQorICAgICAgICAgICAgb3BhcXVlUmVj
dC5mVG9wID0gcmVjdC5mVG9wOworICAgICAgICBpZiAocmVjdC5mQm90dG9tID4gb3BhcXVlUmVj
dC5mQm90dG9tICYmIHJlY3QuZlRvcCA8PSBvcGFxdWVSZWN0LmZCb3R0b20pCisgICAgICAgICAg
ICBvcGFxdWVSZWN0LmZCb3R0b20gPSByZWN0LmZCb3R0b207CiAgICAgfQogCi0gICAgbG9uZyBv
cGFxdWVBcmVhID0gKGxvbmcpbV9vcGFxdWVSZWN0LndpZHRoKCkgKiAobG9uZyltX29wYXF1ZVJl
Y3QuaGVpZ2h0KCk7CisgICAgbG9uZyBvcGFxdWVBcmVhID0gKGxvbmcpb3BhcXVlUmVjdC53aWR0
aCgpICogKGxvbmcpb3BhcXVlUmVjdC5oZWlnaHQoKTsKICAgICBsb25nIGFyZWEgPSAobG9uZyly
ZWN0LndpZHRoKCkgKiAobG9uZylyZWN0LmhlaWdodCgpOwogICAgIGlmIChhcmVhID4gb3BhcXVl
QXJlYSkKLSAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKKyAgICAgICAgb3BhcXVlUmVjdCA9
IHJlY3Q7CiB9CiAKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShj
b25zdCBTa1JlY3QmIHJlY3QpCkBAIC0zNjQsMzQgKzQxNiw0MyBAQCB2b2lkIE9wYXF1ZVJlZ2lv
blNraWE6Om1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQogICAgIC8vIFdl
IHdhbnQgdG8ga2VlcCBhcyBtdWNoIG9mIHRoZSBjdXJyZW50IG9wYXF1ZSByZWN0YW5nbGUgYXMg
d2UgY2FuLCBzbyBmaW5kIHRoZSBvbmUgbGFyZ2VzdAogICAgIC8vIHJlY3RhbmdsZSBpbnNpZGUg
bV9vcGFxdWVSZWN0IHRoYXQgZG9lcyBub3QgaW50ZXJzZWN0IHdpdGggfHJlY3R8LgogCi0gICAg
aWYgKHJlY3QuY29udGFpbnMobV9vcGFxdWVSZWN0KSkgewotICAgICAgICBtX29wYXF1ZVJlY3Qu
c2V0RW1wdHkoKTsKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFx
dWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKworICAgIGlmICghU2tS
ZWN0OjpJbnRlcnNlY3RzKHJlY3QsIG9wYXF1ZVJlY3QpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKHJlY3QuY29udGFpbnMob3BhcXVlUmVjdCkpIHsKKyAgICAgICAgbWFya0FsbEFzTm9uT3Bh
cXVlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgZGVsdGFMZWZ0ID0gcmVj
dC5mTGVmdCAtIG1fb3BhcXVlUmVjdC5mTGVmdDsKLSAgICBpbnQgZGVsdGFSaWdodCA9IG1fb3Bh
cXVlUmVjdC5mUmlnaHQgLSByZWN0LmZSaWdodDsKLSAgICBpbnQgZGVsdGFUb3AgPSByZWN0LmZU
b3AgLSBtX29wYXF1ZVJlY3QuZlRvcDsKLSAgICBpbnQgZGVsdGFCb3R0b20gPSBtX29wYXF1ZVJl
Y3QuZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsKKyAgICBpbnQgZGVsdGFMZWZ0ID0gcmVjdC5mTGVm
dCAtIG9wYXF1ZVJlY3QuZkxlZnQ7CisgICAgaW50IGRlbHRhUmlnaHQgPSBvcGFxdWVSZWN0LmZS
aWdodCAtIHJlY3QuZlJpZ2h0OworICAgIGludCBkZWx0YVRvcCA9IHJlY3QuZlRvcCAtIG9wYXF1
ZVJlY3QuZlRvcDsKKyAgICBpbnQgZGVsdGFCb3R0b20gPSBvcGFxdWVSZWN0LmZCb3R0b20gLSBy
ZWN0LmZCb3R0b207CiAKLSAgICAvLyBob3Jpem9udGFsIGlzIHRoZSBsYXJnZXIgb2YgdGhlIHR3
byByZWN0YW5nbGVzIHRvIHRoZSBsZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB8cmVjdHwgYW5kIGlu
c2lkZSBtX29wYXF1ZVJlY3QuCi0gICAgLy8gdmVydGljYWwgaXMgdGhlIGxhcmdlciBvZiB0aGUg
dHdvIHJlY3RhbmdsZXMgYWJvdmUgb3IgYmVsb3cgfHJlY3R8IGFuZCBpbnNpZGUgbV9vcGFxdWVS
ZWN0LgotICAgIFNrUmVjdCBob3Jpem9udGFsID0gbV9vcGFxdWVSZWN0OworICAgIC8vIGhvcml6
b250YWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxlZnQgb3Ig
dG8gdGhlIHJpZ2h0IG9mIHxyZWN0fCBhbmQgaW5zaWRlIG9wYXF1ZVJlY3QuCisgICAgLy8gdmVy
dGljYWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgYWJvdmUgb3IgYmVsb3cg
fHJlY3R8IGFuZCBpbnNpZGUgb3BhcXVlUmVjdC4KKyAgICBTa1JlY3QgaG9yaXpvbnRhbCA9IG9w
YXF1ZVJlY3Q7CiAgICAgaWYgKGRlbHRhVG9wID4gZGVsdGFCb3R0b20pCiAgICAgICAgIGhvcml6
b250YWwuZkJvdHRvbSA9IHJlY3QuZlRvcDsKICAgICBlbHNlCiAgICAgICAgIGhvcml6b250YWwu
ZlRvcCA9IHJlY3QuZkJvdHRvbTsKLSAgICBTa1JlY3QgdmVydGljYWwgPSBtX29wYXF1ZVJlY3Q7
CisgICAgU2tSZWN0IHZlcnRpY2FsID0gb3BhcXVlUmVjdDsKICAgICBpZiAoZGVsdGFMZWZ0ID4g
ZGVsdGFSaWdodCkKICAgICAgICAgdmVydGljYWwuZlJpZ2h0ID0gcmVjdC5mTGVmdDsKICAgICBl
bHNlCiAgICAgICAgIHZlcnRpY2FsLmZMZWZ0ID0gcmVjdC5mUmlnaHQ7CiAKICAgICBpZiAoKGxv
bmcpaG9yaXpvbnRhbC53aWR0aCgpICogKGxvbmcpaG9yaXpvbnRhbC5oZWlnaHQoKSA+IChsb25n
KXZlcnRpY2FsLndpZHRoKCkgKiAobG9uZyl2ZXJ0aWNhbC5oZWlnaHQoKSkKLSAgICAgICAgbV9v
cGFxdWVSZWN0ID0gaG9yaXpvbnRhbDsKKyAgICAgICAgb3BhcXVlUmVjdCA9IGhvcml6b250YWw7
CiAgICAgZWxzZQotICAgICAgICBtX29wYXF1ZVJlY3QgPSB2ZXJ0aWNhbDsKKyAgICAgICAgb3Bh
cXVlUmVjdCA9IHZlcnRpY2FsOwogfQogCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtBbGxB
c05vbk9wYXF1ZSgpCit7CisgICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gY3VycmVudFRyYWNraW5n
T3BhcXVlUmVjdChtX29wYXF1ZVJlY3QsIG1fY2FudmFzTGF5ZXJTdGFjayk7CisgICAgb3BhcXVl
UmVjdC5zZXRFbXB0eSgpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tp
YS5oCmluZGV4IGU4OWQ1NTAwODM0NjAxYWY2MzRjM2VmNGRkNjVhY2FhYjk2YmNhN2UuLjBkMTFj
ZTBkODgyNTdlNzY0YmMyMTU4N2U0YWQ4YTM0ZmYyOGEzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oCkBA
IC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBJbnRSZWN0IGFzUmVjdCgpIGNvbnN0OwogCiAg
ICAgdm9pZCBwdXNoQ2FudmFzTGF5ZXIoY29uc3QgU2tQYWludCopOwotICAgIHZvaWQgcG9wQ2Fu
dmFzTGF5ZXIoKTsKKyAgICB2b2lkIHBvcENhbnZhc0xheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4
dFNraWEqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKIAogICAgIHZvaWQgc2V0SW1hZ2VNYXNr
KGNvbnN0IFNrUmVjdCYgaW1hZ2VPcGFxdWVSZWN0KTsKIApAQCAtNjMsMjEgKzYzLDE3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpZERyYXdQb2ludHMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSos
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIFNrQ2FudmFzOjpQb2ludE1vZGUsIGludCBudW1Qb2lu
dHMsIGNvbnN0IFNrUG9pbnRbXSwgY29uc3QgU2tQYWludCYpOwogICAgIHZvaWQgZGlkRHJhd0Jv
dW5kZWQoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKIAotcHJpdmF0ZToKICAgICBlbnVtIERy
YXdUeXBlIHsKICAgICAgICAgRmlsbE9ubHksCi0gICAgICAgIEZpbGxPclN0cm9rZQorICAgICAg
ICBGaWxsT3JTdHJva2UsCisgICAgICAgIEZpbGxCeUNvcHkKICAgICB9OwogCi0gICAgdm9pZCBk
aWREcmF3KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3QgU2tCaXRtYXAqIHNvdXJjZUJp
dG1hcCwgYm9vbCBmaWxsc0JvdW5kcywgRHJhd1R5cGUpOwotICAgIHZvaWQgZGlkRHJhd1VuYm91
bmRlZChjb25zdCBTa1BhaW50Jik7Ci0gICAgdm9pZCBtYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNr
UmVjdCYpOwotICAgIHZvaWQgbWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmKTsKLQot
ICAgIFNrUmVjdCBtX29wYXF1ZVJlY3Q7Ci0KICAgICBzdHJ1Y3QgQ2FudmFzTGF5ZXJTdGF0ZSB7
Ci0gICAgICAgIENhbnZhc0xheWVyU3RhdGUoKSA6IGhhc0ltYWdlTWFzayhmYWxzZSkgeyB9Cisg
ICAgICAgIENhbnZhc0xheWVyU3RhdGUoKQorICAgICAgICAgICAgOiBoYXNJbWFnZU1hc2soZmFs
c2UpCisgICAgICAgICAgICAsIG9wYXF1ZVJlY3QoU2tSZWN0OjpNYWtlRW1wdHkoKSkKKyAgICAg
ICAgeyB9CiAKICAgICAgICAgU2tQYWludCBwYWludDsKIApAQCAtODUsOCArODEsMjAgQEAgcHJp
dmF0ZToKICAgICAgICAgYm9vbCBoYXNJbWFnZU1hc2s7CiAgICAgICAgIC8vIFRoZSBvcGFxdWUg
YXJlYSBpbiB0aGUgaW1hZ2UgbWFzay4KICAgICAgICAgU2tSZWN0IGltYWdlT3BhcXVlUmVjdDsK
KworICAgICAgICBTa1JlY3Qgb3BhcXVlUmVjdDsKICAgICB9OwogCitwcml2YXRlOgorICAgIHZv
aWQgZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiBzb3Vy
Y2VCaXRtYXAsIGJvb2wgZmlsbHNCb3VuZHMsIERyYXdUeXBlKTsKKyAgICB2b2lkIGRpZERyYXdV
bmJvdW5kZWQoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUGFpbnQmLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBEcmF3VHlwZSk7CisgICAgdm9pZCBhcHBseUxheWVyT3BhcXVl
UmVnaW9uKGNvbnN0IFNrUmVjdCYgbGF5ZXJPcGFxdWVSZWN0LCBjb25zdCBTa1JlY3QmIGNsaXBw
ZWRCb3VuZHMsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIG1hcmtSZWN0QXNPcGFxdWUoY29u
c3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYp
OworICAgIHZvaWQgbWFya0FsbEFzTm9uT3BhcXVlKCk7CisKKyAgICBTa1JlY3QgbV9vcGFxdWVS
ZWN0OworCiAgICAgVmVjdG9yPENhbnZhc0xheWVyU3RhdGUsIDM+IG1fY2FudmFzTGF5ZXJTdGFj
azsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4IGQ4OTY3YzJiNDBmYWFjM2Qz
NDRlODhlMDRiYjZhYTg4NGJjMjg1MGEuLjhjMDAwYmJiN2YwMTBjYzFiMWJhNjUxZWFmNWY1ZGJk
M2Q2MGU4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBA
IHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVyKCkKIHsKICAgICBtX2NhbnZh
cy0+cmVzdG9yZSgpOwogICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQotICAgICAgICBtX29w
YXF1ZVJlZ2lvbi5wb3BDYW52YXNMYXllcigpOworICAgICAgICBtX29wYXF1ZVJlZ2lvbi5wb3BD
YW52YXNMYXllcih0aGlzLCBtX29wYXF1ZVJlZ2lvblRyYW5zZm9ybSk7CiB9CiAKIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZv
cm1Db250ZXh0U2tpYVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0
Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKaW5kZXggMTc4YzY1NjkwMzAzOTYzZTFlODM3NDcwZGFi
Y2VlMTg5NTE4YzgxNi4uZDQ4YjAxNThiOGU2YmRhODg4NjBkMDIzYzRiMDc1MzhlZjMwOGI1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRT
a2lhVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNv
bnRleHRTa2lhVGVzdC5jcHAKQEAgLTM5LDkgKzM5LDkgQEAgbmFtZXNwYWNlIHsKIAogI2RlZmlu
ZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCiAgICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwK
LSAgICBFWFBFQ1RfRVEoYS5tYXhYKCksIGIubWF4WCgpKTsgXAogICAgIEVYUEVDVF9FUShhLnko
KSwgYi55KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEubWF4WSgpLCBiLm1heFkoKSk7CisgICAgRVhQ
RUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsgXAorICAgIEVYUEVDVF9FUShhLmhlaWdodCgp
LCBiLmhlaWdodCgpKTsKIAogI2RlZmluZSBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgb3Bh
cXVlUmVjdCkgXAogeyBcCkBAIC0yMjYsOSArMjI2LDg4IEBAIFRFU1QoUGxhdGZvcm1Db250ZXh0
U2tpYVRlc3QsIHRyYWNrT3BhcXVlQ2xpcFRlc3QpCiAgICAgY29udGV4dC5zYXZlKCk7CiAgICAg
Y29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZlcihhbHBoYUltYWdlLmdldCgpLCBGbG9hdFJlY3QoMzAs
IDMwLCAxMCwgMTApKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDkw
LCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7
CisgICAgY29udGV4dC5yZXN0b3JlKCk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwogICAgIEVYUEVDVF9QSVhF
TFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OwotICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LCB0cmFja0ltYWdlTWFzaykKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFw
LnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDQwMCwgNDAwKTsKKyAgICBi
aXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAg
IFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRm
b3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAw
LjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBm
KTsKKworICAgIC8vIEltYWdlIG1hc2tzIGFyZSBkb25lIGJ5IGRyYXdpbmcgYSBiaXRtYXAgaW50
byBhIHRyYW5zcGFyZW5jeSBsYXllciB0aGF0IHVzZXMgRHN0SW4gdG8gbWFzaworICAgIC8vIG91
dCBhIHRyYW5zcGFyZW5jeSBsYXllciBiZWxvdyB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSBtYXNr
IGNvbG9yLiBJbiB0aGUgZW5kIHRoaXMgc2hvdWxkCisgICAgLy8gbm90IGJlIG1hcmtlZCBvcGFx
dWUuCisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VP
dmVyKTsKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CisgICAgY29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAxMCwgMTApLCBvcGFxdWUsIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworCisgICAgY29udGV4dC5zZXRDb21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7CisgICAgY29udGV4dC5iZWdpblRy
YW5zcGFyZW5jeUxheWVyKDEpOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBhbHBoYUltYWdl
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgYWxwaGFJbWFn
ZS0+Y29udGV4dCgpLT5maWxsUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgYWxwaGEsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24o
Q29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoYWxwaGFJ
bWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxvYXRSZWN0KDEwLCAxMCwgMTAsIDEw
KSk7CisKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgY29udGV4dC5l
bmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBw
bGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhF
TFNfTUFUQ0hfRVhBQ1QoYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja0ltYWdlTWFz
a1dpdGhPcGFxdWVSZWN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICBiaXRtYXAuc2V0
Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgNDAwLCA0MDApOworICAgIGJpdG1h
cC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOworCisgICAgUGxh
dGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAgcGxhdGZvcm1D
b250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEuMGYsIDAuMGYs
IDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwor
CisgICAgLy8gSW1hZ2UgbWFza3MgYXJlIGRvbmUgYnkgZHJhd2luZyBhIGJpdG1hcCBpbnRvIGEg
dHJhbnNwYXJlbmN5IGxheWVyIHRoYXQgdXNlcyBEc3RJbiB0byBtYXNrCisgICAgLy8gb3V0IGEg
dHJhbnNwYXJlbmN5IGxheWVyIGJlbG93IHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIG1hc2sgY29s
b3IuIEluIHRoZSBlbmQgdGhpcyBzaG91bGQKKyAgICAvLyBub3QgYmUgbWFya2VkIG9wYXF1ZS4K
KworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIp
OworICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKKyAgICBjb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDEwLCAxMCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmlj
ZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihDb21wb3NpdGVEZXN0aW5hdGlvbkluKTsKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoMSk7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGFscGhhSW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBhbHBoYUltYWdlLT5j
b250ZXh0KCktPmZpbGxSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBhbHBoYSwgQ29sb3JT
cGFjZURldmljZVJHQik7CisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVTb3VyY2VPdmVyKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihhbHBoYUltYWdl
LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBGbG9hdFJlY3QoMTAsIDEwLCAxMCwgMTApKTsK
KworICAgIC8vIFdlIGNhbid0IGhhdmUgYW4gb3BhcXVlIG1hc2sgYWN0dWFsbHksIGJ1dCB3ZSBj
YW4gcHJldGVuZCBoZXJlIGxpa2UgaXQgd291bGQgbG9vayBpZiB3ZSBkaWQuCisgICAgY29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoMTIsIDEyLCAzLCAzKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRleHQuZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICBF
WFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEyLCAxMiwgMywgMyksIHBsYXRmb3JtQ29udGV4dC5vcGFx
dWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSF9FWEFDVChiaXRt
YXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CiB9CiAKIFRFU1Qo
UGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlSm9pblRlc3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138022</attachid>
            <date>2012-04-19 18:18:31 -0700</date>
            <delta_ts>2012-04-20 13:47:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84275-20120419211830.patch</filename>
            <type>text/plain</type>
            <size>27025</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NjA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTcxYjcwOTdiM2UyMzg0
ZWU1NGJmMmVhNGU4MmRjNzhiZTZjZWZhOS4uZjAxNWQ2YjE4NjE4ODBkYjAzZThhMTkwYmE0OGE3
ZDc2MzQxYTJhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
dHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVjdAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNP
cGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6YXBwbHlPcGFxdWVS
ZWdpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cHVz
aENhbnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnBvcENh
bnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6
T3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oOgorICAgICAgICAoT3BhcXVlUmVn
aW9uU2tpYSk6CisgICAgICAgIChDYW52YXNMYXllclN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVyKToKKwogMjAxMi0wNC0xOCAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ29u
c29saWRhdGUgYWRqdXN0VGV4dFJlbmRlck1vZGUgY29weXBhc3RhIGludG8gU2tpYSBjb250ZXh0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDA0NDA5ZWEyOGVkYzQ2N2E5OTYwN2Q4ODMx
ODgyNWEyNWMxNDZmM2UuLjA1NzA0OGU5ZTMzMzdmMzY2ZWRkMGY3NmU5MTEzNWQwYzJmZjk4MjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDQtMTgg
IERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVt
XSBJbWFnZSBtYXNrcyBhcmUgY29uc2lkZXJlZCBvcGFxdWUgaW5jb3JyZWN0bHkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0Mjc1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9QbGF0Zm9ybUNv
bnRleHRTa2lhVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRFU1QpOgorCiAyMDEyLTA0LTE4ICBOaWNvIFdlYmVyICA8dGhha2lzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW0vbWFjXSBGaXggYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcApp
bmRleCBlNjAyZTYwNzkwNWY3NjQ1MmEyZmRiNmY3ZjRiNWQ3ZWRlY2ZjZjBjLi44MTI1YTQ0N2Uy
NTBjYjIzNDA4ZWZjMzY4OTZlN2YzZmIwODQ3MzJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKQEAg
LTEyNCwxMCArMTI0LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNlcnZlc09w
YXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBzcmNJc09wYXF1CiB9CiAKIC8vIFJldHVy
bnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBhaW50ZWQgd2lsbCBiZSBvcGFxdWUuCi1zdGF0aWMgaW5s
aW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRt
YXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlKQorc3RhdGljIGlubGlu
ZSBib29sIHBhaW50SXNPcGFxdWUoY29uc3QgU2tQYWludCYgcGFpbnQsIE9wYXF1ZVJlZ2lvblNr
aWE6OkRyYXdUeXBlIGRyYXdUeXBlLCBjb25zdCBTa0JpdG1hcCogYml0bWFwKQogeworICAgIGlm
IChkcmF3VHlwZSA9PSBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5KQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKHBhaW50LmdldEFscGhhKCkgPCAweEZGKQogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5cGUgIT0gT3BhcXVlUmVn
aW9uU2tpYTo6RmlsbE9yU3Ryb2tlOwogICAgIGlmICghY2hlY2tGaWxsT25seSAmJiBwYWludC5n
ZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlICYmIHBhaW50LmlzQW50aUFsaWFzKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTa1NoYWRlciogc2hhZGVyID0gcGFpbnQuZ2V0
U2hhZGVyKCk7CkBAIC0xNDcsNiArMTUwLDI5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwYWludElz
T3BhcXVlKGNvbnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBTa0JpdG1hcCogYml0bWFwID0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgcmVjdGFu
Z3VsYXIgY2xpcCwgd2l0aCB0aGUgcmVzdWx0IGluIHxjbGlwcGVkQm91bmRzfC4KK3N0YXRpYyBp
bmxpbmUgYm9vbCBnZXRUb3RhbENsaXBwZWRCb3VuZHMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tp
YSogY29udGV4dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIFNrUmVjdCYgY2xp
cHBlZEJvdW5kcykKK3sKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY2xpcCBpbiBkZXZpY2UgY29v
cmRpbmF0ZSBzcGFjZS4KKyAgICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBUeXBlKCkg
IT0gU2tDYW52YXM6OmtSZWN0X0NsaXBUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBTa0lSZWN0IGRldmljZUNsaXA7CisgICAgaWYgKCFjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xp
cERldmljZUJvdW5kcygmZGV2aWNlQ2xpcCkpIHsKKyAgICAgICAgY2xpcHBlZEJvdW5kcy5zZXRF
bXB0eSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjbGlwcGVkQm91bmRz
LnNldChkZXZpY2VDbGlwKTsKKworICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0gdG8gdGhlIHRy
YWNraW5nIHNwYWNlLgorICAgIFNrTWF0cml4IGNhbnZhc1RvVGFyZ2V0VHJhbnNmb3JtID0gdHJh
bnNmb3JtOworICAgIGlmICghY2FudmFzVG9UYXJnZXRUcmFuc2Zvcm0ubWFwUmVjdCgmY2xpcHBl
ZEJvdW5kcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50KiBw
YWludCkKIHsKICAgICBDYW52YXNMYXllclN0YXRlIHN0YXRlOwpAQCAtMTU1LDkgKzE4MSwzMCBA
QCB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50KiBw
YWludCkKICAgICBtX2NhbnZhc0xheWVyU3RhY2suYXBwZW5kKHN0YXRlKTsKIH0KIAotdm9pZCBP
cGFxdWVSZWdpb25Ta2lhOjpwb3BDYW52YXNMYXllcigpCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6
OnBvcENhbnZhc0xheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogeworICAgIGNvbnN0IENhbnZhc0xheWVyU3Rh
dGUgY2FudmFzTGF5ZXIgPSBtX2NhbnZhc0xheWVyU3RhY2subGFzdCgpOwogICAgIG1fY2FudmFz
TGF5ZXJTdGFjay5yZW1vdmVMYXN0KCk7CisKKyAgICBTa1JlY3QgbGF5ZXJPcGFxdWVSZWN0ID0g
Y2FudmFzTGF5ZXIub3BhcXVlUmVjdDsKKyAgICBib29sIGZpbGxzQm91bmRzID0gdHJ1ZTsKKwor
ICAgIC8vIEFwcGx5IHRoZSBpbWFnZSBtYXNrLgorICAgIGlmIChjYW52YXNMYXllci5oYXNJbWFn
ZU1hc2sgJiYgIWxheWVyT3BhcXVlUmVjdC5pbnRlcnNlY3QoY2FudmFzTGF5ZXIuaW1hZ2VPcGFx
dWVSZWN0KSkKKyAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgIC8vIENoZWNrIHRo
ZSBjdXJyZW50IGNsaXAgdG8gc2VlIGlmIGl0IGNoYW5nZXMgdGhlIHNoYXBlIG9mIHRoZSBsYXll
ck9wYXF1ZVJlY3Qgb3IgY2xpcHMgYXdheSB0aGUgbGF5ZXIuCisgICAgU2tSZWN0IGNsaXBwZWRC
b3VuZHM7CisgICAgaWYgKCFnZXRUb3RhbENsaXBwZWRCb3VuZHMoY29udGV4dCwgdHJhbnNmb3Jt
LCBjbGlwcGVkQm91bmRzKSkKKyAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKKworICAgIGlm
ICghZmlsbHNCb3VuZHMpIHsKKyAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRvbid0IGtub3cg
d2hhdCB3aWxsIGJlIG9wYXF1ZSBpbiB0aGUgc291cmNlIGxheWVyIHNvIGp1c3QgY29uc2lkZXIg
aXQgYW4gdW5ib3VuZGVkIGRyYXcuCisgICAgICAgIGRpZERyYXdVbmJvdW5kZWQoY29udGV4dCwg
Y2FudmFzTGF5ZXIucGFpbnQsIHRyYW5zZm9ybSwgRmlsbEJ5Q29weSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBhcHBseU9wYXF1ZVJlZ2lvbkZyb21MYXllcihsYXllck9wYXF1ZVJl
Y3QsIGNsaXBwZWRCb3VuZHMsIGNhbnZhc0xheWVyLnBhaW50KTsKIH0KIAogdm9pZCBPcGFxdWVS
ZWdpb25Ta2lhOjpzZXRJbWFnZU1hc2soY29uc3QgU2tSZWN0JiBpbWFnZU9wYXF1ZVJlY3QpCkBA
IC0xNzQsNyArMjIxLDcgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3UmVjdChjb25z
dCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBBZmYKICAgICAgICAgYm9vbCBm
aWxsc0JvdW5kcyA9IGZhbHNlOwogCiAgICAgICAgIGlmICghcGFpbnQuY2FuQ29tcHV0ZUZhc3RC
b3VuZHMoKSkKLSAgICAgICAgICAgIGRpZERyYXdVbmJvdW5kZWQocGFpbnQpOworICAgICAgICAg
ICAgZGlkRHJhd1VuYm91bmRlZChjb250ZXh0LCBwYWludCwgdHJhbnNmb3JtLCBGaWxsT3JTdHJv
a2UpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFNrUmVjdCBzdHJva2VSZWN0OwogICAg
ICAgICAgICAgc3Ryb2tlUmVjdCA9IHBhaW50LmNvbXB1dGVGYXN0Qm91bmRzKGZpbGxSZWN0LCAm
c3Ryb2tlUmVjdCk7CkBAIC0xOTcsNyArMjQ0LDcgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpk
aWREcmF3UGF0aChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBBZmYK
ICAgICBib29sIGZpbGxzQm91bmRzID0gZmFsc2U7CiAKICAgICBpZiAoIXBhaW50LmNhbkNvbXB1
dGVGYXN0Qm91bmRzKCkpCi0gICAgICAgIGRpZERyYXdVbmJvdW5kZWQocGFpbnQpOworICAgICAg
ICBkaWREcmF3VW5ib3VuZGVkKGNvbnRleHQsIHBhaW50LCB0cmFuc2Zvcm0sIEZpbGxPclN0cm9r
ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5kcyhw
YXRoLmdldEJvdW5kcygpLCAmcmVjdCk7CiAgICAgICAgIGRpZERyYXcoY29udGV4dCwgdHJhbnNm
b3JtLCByZWN0LCBwYWludCwgMCwgZmlsbHNCb3VuZHMsIEZpbGxPclN0cm9rZSk7CkBAIC0yMjUs
NyArMjcyLDcgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3UG9pbnRzKGNvbnN0IFBs
YXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IEEKICAgICBib29sIGZpbGxzQm91bmRz
ID0gZmFsc2U7CiAKICAgICBpZiAoIXBhaW50LmNhbkNvbXB1dGVGYXN0Qm91bmRzKCkpCi0gICAg
ICAgIGRpZERyYXdVbmJvdW5kZWQocGFpbnQpOworICAgICAgICBkaWREcmF3VW5ib3VuZGVkKGNv
bnRleHQsIHBhaW50LCB0cmFuc2Zvcm0sIEZpbGxPclN0cm9rZSk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIHJlY3QgPSBwYWludC5jb21wdXRlRmFzdEJvdW5kcyhyZWN0LCAmcmVjdCk7CiAgICAgICAg
IGRpZERyYXcoY29udGV4dCwgdHJhbnNmb3JtLCByZWN0LCBwYWludCwgMCwgZmlsbHNCb3VuZHMs
IEZpbGxPclN0cm9rZSk7CkBAIC0yMzcsNyArMjg0LDcgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjpkaWREcmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25z
dAogICAgIGJvb2wgZmlsbHNCb3VuZHMgPSBmYWxzZTsKIAogICAgIGlmICghcGFpbnQuY2FuQ29t
cHV0ZUZhc3RCb3VuZHMoKSkKLSAgICAgICAgZGlkRHJhd1VuYm91bmRlZChwYWludCk7CisgICAg
ICAgIGRpZERyYXdVbmJvdW5kZWQoY29udGV4dCwgcGFpbnQsIHRyYW5zZm9ybSwgRmlsbE9yU3Ry
b2tlKTsKICAgICBlbHNlIHsKICAgICAgICAgU2tSZWN0IHJlY3Q7CiAgICAgICAgIHJlY3QgPSBw
YWludC5jb21wdXRlRmFzdEJvdW5kcyhib3VuZHMsICZyZWN0KTsKQEAgLTI1NCw3NSArMzAxLDc5
IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRT
a2lhKiBjb250ZXh0LCBjb25zdCBBZmZpbmVUCiAgICAgaWYgKCFjYW52YXNUcmFuc2Zvcm0ubWFw
UmVjdCgmdGFyZ2V0UmVjdCkpCiAgICAgICAgIGZpbGxzQm91bmRzID0gZmFsc2U7CiAKLSAgICAv
LyBBcHBseSB0aGUgY3VycmVudCBjbGlwIGluIGRldmljZSBjb29yZGluYXRlIHNwYWNlLgotICAg
IGlmIChjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xpcFR5cGUoKSAhPSBTa0NhbnZhczo6a1JlY3Rf
Q2xpcFR5cGUpCisgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybSB0byB0aGUgdHJhY2tpbmcgc3Bh
Y2UuCisgICAgU2tNYXRyaXggY2FudmFzVG9UYXJnZXRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07Cisg
ICAgaWYgKCFjYW52YXNUb1RhcmdldFRyYW5zZm9ybS5tYXBSZWN0KCZ0YXJnZXRSZWN0KSkKKyAg
ICAgICAgIGZpbGxzQm91bmRzID0gZmFsc2U7CisKKyAgICAvLyBBcHBseSB0aGUgY3VycmVudCBj
bGlwLgorICAgIFNrUmVjdCBjbGlwcGVkQm91bmRzOworICAgIGlmICghZ2V0VG90YWxDbGlwcGVk
Qm91bmRzKGNvbnRleHQsIHRyYW5zZm9ybSwgY2xpcHBlZEJvdW5kcykpCiAgICAgICAgIGZpbGxz
Qm91bmRzID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFNrSVJlY3QgZGV2aWNlQ2xpcDsK
LSAgICAgICAgaWYgKCFjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xpcERldmljZUJvdW5kcygmZGV2
aWNlQ2xpcCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghdGFyZ2V0UmVjdC5p
bnRlcnNlY3QoU2tJbnRUb1NjYWxhcihkZXZpY2VDbGlwLmZMZWZ0KSwgU2tJbnRUb1NjYWxhcihk
ZXZpY2VDbGlwLmZUb3ApLCBTa0ludFRvU2NhbGFyKGRldmljZUNsaXAuZlJpZ2h0KSwgU2tJbnRU
b1NjYWxhcihkZXZpY2VDbGlwLmZCb3R0b20pKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgZWxzZSBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KGNsaXBwZWRCb3VuZHMpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICBib29sIGNoZWNrRmlsbE9ubHkgPSBkcmF3VHlwZSA9PSBGaWxs
T25seTsKLSAgICBib29sIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWlu
dCwgc291cmNlQml0bWFwLCBjaGVja0ZpbGxPbmx5KTsKKyAgICBib29sIGRyYXdzT3BhcXVlID0g
cGFpbnRJc09wYXF1ZShwYWludCwgZHJhd1R5cGUsIHNvdXJjZUJpdG1hcCk7CisgICAgYm9vbCB4
ZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIGRyYXdzT3BhcXVlKTsKKyAgICBi
b29sIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50LCBkcmF3
c09wYXF1ZSk7CiAKLSAgICBib29sIHhmZXJzT3BhcXVlID0geGZlcm1vZGVJc09wYXF1ZShwYWlu
dCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOworICAgIGlmIChmaWxsc0JvdW5kcyAmJiB4ZmVyc09w
YXF1ZSkKKyAgICAgICAgbWFya1JlY3RBc09wYXF1ZSh0YXJnZXRSZWN0KTsKKyAgICBlbHNlIGlm
ICghcHJlc2VydmVzT3BhcXVlKQorICAgICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKHRhcmdldFJl
Y3QpOworfQogCi0gICAgLy8gQXBwbHkgdGhlIFNrQ2FudmFzIGxheWVycyB3ZSB3aWxsIGJlIGRy
YXdpbmcgdGhyb3VnaC4KLSAgICBmb3IgKHNpemVfdCBpID0gbV9jYW52YXNMYXllclN0YWNrLnNp
emUoKTsgaSA+IDA7IC0taSkgewotICAgICAgICBjb25zdCBDYW52YXNMYXllclN0YXRlJiBjYW52
YXNMYXllciA9IG1fY2FudmFzTGF5ZXJTdGFja1tpLTFdOwordm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjpkaWREcmF3VW5ib3VuZGVkKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNv
bnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgRHJh
d1R5cGUgZHJhd1R5cGUpCit7CisgICAgYm9vbCBkcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUo
cGFpbnQsIGRyYXdUeXBlLCAwKTsKKyAgICBib29sIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2Rl
UHJlc2VydmVzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7CiAKLSAgICAgICAgLy8gRklYTUU6
IFdlIGNvdWxkIHN0aWxsIHRyYWNrIHRoZSBvcGFxdWUgcGFydCBidXQgaXQncyBhbHdheXMgZW1w
dHkgcmlnaHQgbm93IGFueXdheXMuCi0gICAgICAgIGlmIChjYW52YXNMYXllci5oYXNJbWFnZU1h
c2sgJiYgIWNhbnZhc0xheWVyLmltYWdlT3BhcXVlUmVjdC5jb250YWlucyh0YXJnZXRSZWN0KSkK
LSAgICAgICAgICAgIGZpbGxzQm91bmRzID0gZmFsc2U7CisgICAgaWYgKHByZXNlcnZlc09wYXF1
ZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGRyYXdU
eXBlID09IEZpbGxPbmx5OwotICAgICAgICBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBhaW50SXNP
cGFxdWUoY2FudmFzTGF5ZXIucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAgICAvLyBJ
ZiBhbnkgbGF5ZXIgZG9lc24ndCBwYWludCBvcGFxdWUsIHRoZW4gdGhlIHJlc3VsdCB3aWxsIG5v
dCBiZSBvcGFxdWUuCi0gICAgICAgIHhmZXJzT3BhcXVlICY9IHhmZXJtb2RlSXNPcGFxdWUoY2Fu
dmFzTGF5ZXIucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9CisgICAgU2tSZWN0
IGNsaXBwZWRCb3VuZHM7CiAKLSAgICAvLyBQcmVzZXJ2aW5nIG9wYXF1ZSBvbmx5IG1hdHRlcnMg
Zm9yIHRoZSBib3R0b20tbW9zdCBsYXllci4gSXRzIGNvbnRlbnRzIGFyZSBlaXRoZXIgb3BhcXVl
IG9yIG5vdCwgYW5kIGlmIG5vdAotICAgIC8vIHRoZW4gd2UgY2FyZSBpZiBpdCBwcmVzZXJ2ZXMg
dGhlIG9wYXF1ZW5lc3Mgb2YgdGhlIHRhcmdldCBkZXZpY2Ugd2hlbiBpdCBpcyBkcmF3biBpbnRv
IHRoZSBkZXZpY2UuCi0gICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWU7Ci0gICAgaWYgKG1fY2FudmFz
TGF5ZXJTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2Rl
UHJlc2VydmVzT3BhcXVlKHBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7CisgICAgLy8gVXNl
IHRoZSBjdXJyZW50IGNsaXAgaWYgdGhlcmUgaXMgb25lLgorICAgIGlmIChnZXRUb3RhbENsaXBw
ZWRCb3VuZHMoY29udGV4dCwgdHJhbnNmb3JtLCBjbGlwcGVkQm91bmRzKSkKKyAgICAgICAgbWFy
a1JlY3RBc05vbk9wYXF1ZShjbGlwcGVkQm91bmRzKTsKICAgICBlbHNlCi0gICAgICAgIHByZXNl
cnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKG1fY2FudmFzTGF5ZXJTdGFja1sw
XS5wYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotCi0KLSAgICAvLyBBcHBseSB0aGUgdHJh
bnNmb3JtIHRvIHRoZSB0cmFja2luZyBzcGFjZS4KLSAgICBTa01hdHJpeCBjYW52YXNUb1Rhcmdl
dFRyYW5zZm9ybSA9IHRyYW5zZm9ybTsKLSAgICBpZiAoIWNhbnZhc1RvVGFyZ2V0VHJhbnNmb3Jt
Lm1hcFJlY3QoJnRhcmdldFJlY3QpKQotICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOworICAg
ICAgICBtYXJrQWxsQXNOb25PcGFxdWUoKTsKK30KIAotICAgIGlmIChmaWxsc0JvdW5kcyAmJiB4
ZmVyc09wYXF1ZSkKLSAgICAgICAgbWFya1JlY3RBc09wYXF1ZSh0YXJnZXRSZWN0KTsKLSAgICBl
bHNlIGlmIChTa1JlY3Q6OkludGVyc2VjdHModGFyZ2V0UmVjdCwgbV9vcGFxdWVSZWN0KSAmJiAh
cHJlc2VydmVzT3BhcXVlKQotICAgICAgICBtYXJrUmVjdEFzTm9uT3BhcXVlKHRhcmdldFJlY3Qp
Oworc3RhdGljIGlubGluZSBTa1JlY3QmIGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QoU2tSZWN0
JiByb290T3BhcXVlUmVjdCwgVmVjdG9yPE9wYXF1ZVJlZ2lvblNraWE6OkNhbnZhc0xheWVyU3Rh
dGUsIDM+JiBjYW52YXNMYXllclN0YWNrKQoreworICAgIC8vIElmIHdlIGFyZSBkcmF3aW5nIGlu
dG8gYSBjYW52YXMgbGF5ZXIsIHRoZW4gdHJhY2sgdGhlIG9wYXF1ZSByZWN0IGluIHRoYXQgbGF5
ZXIuCisgICAgaWYgKCFjYW52YXNMYXllclN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IGNhbnZhc0xheWVyU3RhY2subGFzdCgpLm9wYXF1ZVJlY3Q7CisgICAgcmV0dXJuIHJvb3RPcGFx
dWVSZWN0OwogfQogCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdVbmJvdW5kZWQoY29u
c3QgU2tQYWludCYgcGFpbnQpCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmFwcGx5T3BhcXVlUmVn
aW9uRnJvbUxheWVyKGNvbnN0IFNrUmVjdCYgbGF5ZXJPcGFxdWVSZWN0LCBjb25zdCBTa1JlY3Qm
IGNsaXBwZWRCb3VuZHMsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQogewotICAgIC8vIFByZXNlcnZp
bmcgb3BhcXVlIG9ubHkgbWF0dGVycyBmb3IgdGhlIGJvdHRvbS1tb3N0IGxheWVyLiBJdHMgY29u
dGVudHMgYXJlIGVpdGhlciBvcGFxdWUgb3Igbm90LCBhbmQgaWYgbm90Ci0gICAgLy8gdGhlbiB3
ZSBjYXJlIGlmIGl0IHByZXNlcnZlcyB0aGUgb3BhcXVlbmVzcyBvZiB0aGUgdGFyZ2V0IGRldmlj
ZSB3aGVuIGl0IGlzIGRyYXduIGludG8gdGhlIGRldmljZS4KLSAgICBib29sIHByZXNlcnZlc09w
YXF1ZTsKLQotICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlOwotICAgIGlmIChtX2NhbnZh
c0xheWVyU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgbGFzdExheWVyRHJhd3NPcGFx
dWUgPSBwYWludElzT3BhcXVlKHBhaW50LCAwLCBjaGVja0ZpbGxPbmx5KTsKLSAgICAgICAgcHJl
c2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGxhc3RMYXllckRy
YXdzT3BhcXVlKTsKLSAgICB9IGVsc2UgewotICAgICAgICBib29sIGxhc3RMYXllckRyYXdzT3Bh
cXVlID0gcGFpbnRJc09wYXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIDAsIGNoZWNr
RmlsbE9ubHkpOwotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09w
YXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsK
LSAgICB9CisgICAgaWYgKGNsaXBwZWRCb3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIXByZXNlcnZlc09wYXF1ZSkgewotICAgICAgICAvLyBXZSBkb24ndCBrbm93
IHdoYXQgd2FzIGRyYXduIG9uIHNvIGp1c3QgZGVzdHJveSB0aGUga25vd24gb3BhcXVlIGFyZWEu
Ci0gICAgICAgIG1fb3BhcXVlUmVjdCA9IFNrUmVjdDo6TWFrZUVtcHR5KCk7Ci0gICAgfQorICAg
IFNrUmVjdCBzb3VyY2VPcGFxdWVSZWN0ID0gbGF5ZXJPcGFxdWVSZWN0OworICAgIC8vIFNhdmUg
dGhlIG9wYXF1ZSBhcmVhIGluIHRoZSBkZXN0aW5hdGlvbiwgc28gd2UgY2FuIHByZXNlcnZlIHRo
ZSBwYXJ0cyBvZiBpdCB1bmRlciB0aGUgc291cmNlIG9wYXF1ZSBhcmVhIGlmIHBvc3NpYmxlLgor
ICAgIFNrUmVjdCBkZXN0aW5hdGlvbk9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVS
ZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKworICAgIGJvb2wgb3V0c2lk
ZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1
ZShwYWludCwgZmFsc2UpOworICAgIGlmICghb3V0c2lkZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2
ZXNPcGFxdWUpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUoY2xpcHBlZEJvdW5kcyk7CisK
KyAgICBpZiAoIXNvdXJjZU9wYXF1ZVJlY3QuaW50ZXJzZWN0KGNsaXBwZWRCb3VuZHMpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSA9IHBh
aW50SXNPcGFxdWUocGFpbnQsIEZpbGxPbmx5LCAwKTsKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJl
Y3RYZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3RE
cmF3c09wYXF1ZSk7CisgICAgYm9vbCBzb3VyY2VPcGFxdWVSZWN0UHJlc2VydmVzT3BhcXVlID0g
eGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1
ZSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIncyBvcGFxdWUgYXJlYSBpcyBiZWluZyBkcmF3biBv
cGFxdWUgaW4gdGhlIGxheWVyIGJlbG93LCB0aGVuIG1hcmsgaXQgb3BhcXVlLiBPdGhlcndpc2Us
CisgICAgLy8gaWYgaXQgcHJlc2VydmVzIG9wYXF1ZSB0aGVuIGtlZXAgdGhlIGludGVyc2VjdGlv
biBvZiB0aGUgdHdvLgorICAgIGlmIChzb3VyY2VPcGFxdWVSZWN0WGZlcnNPcGFxdWUpCisgICAg
ICAgIG1hcmtSZWN0QXNPcGFxdWUoc291cmNlT3BhcXVlUmVjdCk7CisgICAgZWxzZSBpZiAoc291
cmNlT3BhcXVlUmVjdFByZXNlcnZlc09wYXF1ZSAmJiBzb3VyY2VPcGFxdWVSZWN0LmludGVyc2Vj
dChkZXN0aW5hdGlvbk9wYXF1ZVJlY3QpKQorICAgICAgICBtYXJrUmVjdEFzT3BhcXVlKHNvdXJj
ZU9wYXF1ZVJlY3QpOwogfQogCiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFx
dWUoY29uc3QgU2tSZWN0JiByZWN0KQpAQCAtMzMyLDMxICszODMsMzMgQEAgdm9pZCBPcGFxdWVS
ZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKICAgICAvLyBy
ZWN0YW5nbGUgdGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkgdG8g
aW5jcmVhc2UgdGhlIGFyZWEgcmV0dXJuZWQKICAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhl
IGNvbXBsZXhpdHkuCiAKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdP
cGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKwogICAgIGlmIChy
ZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX29wYXF1ZVJlY3QuY29u
dGFpbnMocmVjdCkpCisgICAgaWYgKG9wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7Ci0gICAgICAg
IG1fb3BhcXVlUmVjdCA9IHJlY3Q7CisgICAgaWYgKHJlY3QuY29udGFpbnMob3BhcXVlUmVjdCkp
IHsKKyAgICAgICAgb3BhcXVlUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAocmVjdC5mVG9wIDw9IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+
PSBtX29wYXF1ZVJlY3QuZkJvdHRvbSkgewotICAgICAgICBpZiAocmVjdC5mTGVmdCA8IG1fb3Bh
cXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBtX29wYXF1ZVJlY3QuZkxlZnQpCi0gICAg
ICAgICAgICBtX29wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OwotICAgICAgICBpZiAocmVj
dC5mUmlnaHQgPiBtX29wYXF1ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVS
ZWN0LmZSaWdodCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdo
dDsKLSAgICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJl
Y3QuZlJpZ2h0ID49IG1fb3BhcXVlUmVjdC5mUmlnaHQpIHsKLSAgICAgICAgaWYgKHJlY3QuZlRv
cCA8IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29wYXF1ZVJlY3QuZlRv
cCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mVG9wID0gcmVjdC5mVG9wOwotICAgICAgICBp
ZiAocmVjdC5mQm90dG9tID4gbV9vcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG1f
b3BhcXVlUmVjdC5mQm90dG9tKQotICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZCb3R0b20gPSBy
ZWN0LmZCb3R0b207CisgICAgaWYgKHJlY3QuZlRvcCA8PSBvcGFxdWVSZWN0LmZUb3AgJiYgcmVj
dC5mQm90dG9tID49IG9wYXF1ZVJlY3QuZkJvdHRvbSkgeworICAgICAgICBpZiAocmVjdC5mTGVm
dCA8IG9wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gb3BhcXVlUmVjdC5mTGVmdCkK
KyAgICAgICAgICAgIG9wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OworICAgICAgICBpZiAo
cmVjdC5mUmlnaHQgPiBvcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0IDw9IG9wYXF1ZVJl
Y3QuZlJpZ2h0KQorICAgICAgICAgICAgb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsK
KyAgICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZS
aWdodCA+PSBvcGFxdWVSZWN0LmZSaWdodCkgeworICAgICAgICBpZiAocmVjdC5mVG9wIDwgb3Bh
cXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBvcGFxdWVSZWN0LmZUb3ApCisgICAgICAg
ICAgICBvcGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAgIGlmIChyZWN0LmZCb3R0
b20gPiBvcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG9wYXF1ZVJlY3QuZkJvdHRv
bSkKKyAgICAgICAgICAgIG9wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJvdHRvbTsKICAgICB9
CiAKLSAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1ZVJlY3Qud2lkdGgoKSAqIChs
b25nKW1fb3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZylv
cGFxdWVSZWN0LndpZHRoKCkgKiAobG9uZylvcGFxdWVSZWN0LmhlaWdodCgpOwogICAgIGxvbmcg
YXJlYSA9IChsb25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVpZ2h0KCk7CiAgICAgaWYg
KGFyZWEgPiBvcGFxdWVBcmVhKQotICAgICAgICBtX29wYXF1ZVJlY3QgPSByZWN0OworICAgICAg
ICBvcGFxdWVSZWN0ID0gcmVjdDsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVj
dEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKQEAgLTM2NCwzNCArNDE3LDQzIEBAIHZv
aWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmIHJl
Y3QpCiAgICAgLy8gV2Ugd2FudCB0byBrZWVwIGFzIG11Y2ggb2YgdGhlIGN1cnJlbnQgb3BhcXVl
IHJlY3RhbmdsZSBhcyB3ZSBjYW4sIHNvIGZpbmQgdGhlIG9uZSBsYXJnZXN0CiAgICAgLy8gcmVj
dGFuZ2xlIGluc2lkZSBtX29wYXF1ZVJlY3QgdGhhdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB8
cmVjdHwuCiAKLSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7Ci0gICAgICAg
IG1fb3BhcXVlUmVjdC5zZXRFbXB0eSgpOworICAgIFNrUmVjdCYgb3BhcXVlUmVjdCA9IGN1cnJl
bnRUcmFja2luZ09wYXF1ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOwor
CisgICAgaWYgKCFTa1JlY3Q6OkludGVyc2VjdHMocmVjdCwgb3BhcXVlUmVjdCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAocmVjdC5jb250YWlucyhvcGFxdWVSZWN0KSkgeworICAgICAgICBt
YXJrQWxsQXNOb25PcGFxdWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCBk
ZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0OwotICAgIGludCBkZWx0
YVJpZ2h0ID0gbV9vcGFxdWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0OwotICAgIGludCBkZWx0
YVRvcCA9IHJlY3QuZlRvcCAtIG1fb3BhcXVlUmVjdC5mVG9wOwotICAgIGludCBkZWx0YUJvdHRv
bSA9IG1fb3BhcXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOworICAgIGludCBkZWx0YUxl
ZnQgPSByZWN0LmZMZWZ0IC0gb3BhcXVlUmVjdC5mTGVmdDsKKyAgICBpbnQgZGVsdGFSaWdodCA9
IG9wYXF1ZVJlY3QuZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7CisgICAgaW50IGRlbHRhVG9wID0gcmVj
dC5mVG9wIC0gb3BhcXVlUmVjdC5mVG9wOworICAgIGludCBkZWx0YUJvdHRvbSA9IG9wYXF1ZVJl
Y3QuZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsKIAotICAgIC8vIGhvcml6b250YWwgaXMgdGhlIGxh
cmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9m
IHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KLSAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUg
bGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGlu
c2lkZSBtX29wYXF1ZVJlY3QuCi0gICAgU2tSZWN0IGhvcml6b250YWwgPSBtX29wYXF1ZVJlY3Q7
CisgICAgLy8gaG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0
byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBpbnNpZGUgb3BhcXVlUmVj
dC4KKyAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBh
Ym92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBvcGFxdWVSZWN0LgorICAgIFNrUmVjdCBo
b3Jpem9udGFsID0gb3BhcXVlUmVjdDsKICAgICBpZiAoZGVsdGFUb3AgPiBkZWx0YUJvdHRvbSkK
ICAgICAgICAgaG9yaXpvbnRhbC5mQm90dG9tID0gcmVjdC5mVG9wOwogICAgIGVsc2UKICAgICAg
ICAgaG9yaXpvbnRhbC5mVG9wID0gcmVjdC5mQm90dG9tOwotICAgIFNrUmVjdCB2ZXJ0aWNhbCA9
IG1fb3BhcXVlUmVjdDsKKyAgICBTa1JlY3QgdmVydGljYWwgPSBvcGFxdWVSZWN0OwogICAgIGlm
IChkZWx0YUxlZnQgPiBkZWx0YVJpZ2h0KQogICAgICAgICB2ZXJ0aWNhbC5mUmlnaHQgPSByZWN0
LmZMZWZ0OwogICAgIGVsc2UKICAgICAgICAgdmVydGljYWwuZkxlZnQgPSByZWN0LmZSaWdodDsK
IAogICAgIGlmICgobG9uZylob3Jpem9udGFsLndpZHRoKCkgKiAobG9uZylob3Jpem9udGFsLmhl
aWdodCgpID4gKGxvbmcpdmVydGljYWwud2lkdGgoKSAqIChsb25nKXZlcnRpY2FsLmhlaWdodCgp
KQotICAgICAgICBtX29wYXF1ZVJlY3QgPSBob3Jpem9udGFsOworICAgICAgICBvcGFxdWVSZWN0
ID0gaG9yaXpvbnRhbDsKICAgICBlbHNlCi0gICAgICAgIG1fb3BhcXVlUmVjdCA9IHZlcnRpY2Fs
OworICAgICAgICBvcGFxdWVSZWN0ID0gdmVydGljYWw7CiB9CiAKK3ZvaWQgT3BhcXVlUmVnaW9u
U2tpYTo6bWFya0FsbEFzTm9uT3BhcXVlKCkKK3sKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBj
dXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNr
KTsKKyAgICBvcGFxdWVSZWN0LnNldEVtcHR5KCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3Bh
cXVlUmVnaW9uU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9P
cGFxdWVSZWdpb25Ta2lhLmgKaW5kZXggZTg5ZDU1MDA4MzQ2MDFhZjYzNGMzZWY0ZGQ2NWFjYWFi
OTZiY2E3ZS4uNWM3NGFlN2M5YzRlZjQyODUwZGNhMWNmOTMxZWRlOWNlNjk1NTljZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25T
a2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVS
ZWdpb25Ta2lhLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIEludFJlY3QgYXNSZWN0
KCkgY29uc3Q7CiAKICAgICB2b2lkIHB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50Kik7Ci0g
ICAgdm9pZCBwb3BDYW52YXNMYXllcigpOworICAgIHZvaWQgcG9wQ2FudmFzTGF5ZXIoY29uc3Qg
UGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwogCiAgICAgdm9p
ZCBzZXRJbWFnZU1hc2soY29uc3QgU2tSZWN0JiBpbWFnZU9wYXF1ZVJlY3QpOwogCkBAIC02Mywy
MSArNjMsMTcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRHJhd1BvaW50cyhjb25zdCBQbGF0Zm9y
bUNvbnRleHRTa2lhKiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgU2tDYW52YXM6OlBvaW50TW9k
ZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtdLCBjb25zdCBTa1BhaW50Jik7CiAgICAg
dm9pZCBkaWREcmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOwogCi1wcml2YXRl
OgogICAgIGVudW0gRHJhd1R5cGUgewogICAgICAgICBGaWxsT25seSwKLSAgICAgICAgRmlsbE9y
U3Ryb2tlCisgICAgICAgIEZpbGxPclN0cm9rZSwKKyAgICAgICAgRmlsbEJ5Q29weQogICAgIH07
CiAKLSAgICB2b2lkIGRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmLCBjb25zdCBTa0Jp
dG1hcCogc291cmNlQml0bWFwLCBib29sIGZpbGxzQm91bmRzLCBEcmF3VHlwZSk7Ci0gICAgdm9p
ZCBkaWREcmF3VW5ib3VuZGVkKGNvbnN0IFNrUGFpbnQmKTsKLSAgICB2b2lkIG1hcmtSZWN0QXNP
cGFxdWUoY29uc3QgU2tSZWN0Jik7Ci0gICAgdm9pZCBtYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0
IFNrUmVjdCYpOwotCi0gICAgU2tSZWN0IG1fb3BhcXVlUmVjdDsKLQogICAgIHN0cnVjdCBDYW52
YXNMYXllclN0YXRlIHsKLSAgICAgICAgQ2FudmFzTGF5ZXJTdGF0ZSgpIDogaGFzSW1hZ2VNYXNr
KGZhbHNlKSB7IH0KKyAgICAgICAgQ2FudmFzTGF5ZXJTdGF0ZSgpCisgICAgICAgICAgICA6IGhh
c0ltYWdlTWFzayhmYWxzZSkKKyAgICAgICAgICAgICwgb3BhcXVlUmVjdChTa1JlY3Q6Ok1ha2VF
bXB0eSgpKQorICAgICAgICB7IH0KIAogICAgICAgICBTa1BhaW50IHBhaW50OwogCkBAIC04NSw4
ICs4MSwyMCBAQCBwcml2YXRlOgogICAgICAgICBib29sIGhhc0ltYWdlTWFzazsKICAgICAgICAg
Ly8gVGhlIG9wYXF1ZSBhcmVhIGluIHRoZSBpbWFnZSBtYXNrLgogICAgICAgICBTa1JlY3QgaW1h
Z2VPcGFxdWVSZWN0OworCisgICAgICAgIFNrUmVjdCBvcGFxdWVSZWN0OwogICAgIH07CiAKK3By
aXZhdGU6CisgICAgdm9pZCBkaWREcmF3KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3Qg
U2tCaXRtYXAqIHNvdXJjZUJpdG1hcCwgYm9vbCBmaWxsc0JvdW5kcywgRHJhd1R5cGUpOworICAg
IHZvaWQgZGlkRHJhd1VuYm91bmRlZChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3Qg
U2tQYWludCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERyYXdUeXBlKTsKKyAgICB2b2lkIGFw
cGx5T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnN0IFNrUmVjdCYgbGF5ZXJPcGFxdWVSZWN0LCBj
b25zdCBTa1JlY3QmIGNsaXBwZWRCb3VuZHMsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIG1h
cmtSZWN0QXNPcGFxdWUoY29uc3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrUmVjdEFzTm9uT3Bh
cXVlKGNvbnN0IFNrUmVjdCYpOworICAgIHZvaWQgbWFya0FsbEFzTm9uT3BhcXVlKCk7CisKKyAg
ICBTa1JlY3QgbV9vcGFxdWVSZWN0OworCiAgICAgVmVjdG9yPENhbnZhc0xheWVyU3RhdGUsIDM+
IG1fY2FudmFzTGF5ZXJTdGFjazsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCmluZGV4
IGQ4OTY3YzJiNDBmYWFjM2QzNDRlODhlMDRiYjZhYTg4NGJjMjg1MGEuLjhjMDAwYmJiN2YwMTBj
YzFiMWJhNjUxZWFmNWY1ZGJkM2Q2MGU4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcApA
QCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVy
KCkKIHsKICAgICBtX2NhbnZhcy0+cmVzdG9yZSgpOwogICAgIGlmIChtX3RyYWNrT3BhcXVlUmVn
aW9uKQotICAgICAgICBtX29wYXF1ZVJlZ2lvbi5wb3BDYW52YXNMYXllcigpOworICAgICAgICBt
X29wYXF1ZVJlZ2lvbi5wb3BDYW52YXNMYXllcih0aGlzLCBtX29wYXF1ZVJlZ2lvblRyYW5zZm9y
bSk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6YmVnaW5MYXllckNsaXBwZWRUb0lt
YWdlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKaW5kZXggMTc4YzY1Njkw
MzAzOTYzZTFlODM3NDcwZGFiY2VlMTg5NTE4YzgxNi4uZDQ4YjAxNThiOGU2YmRhODg4NjBkMDIz
YzRiMDc1MzhlZjMwOGI1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKQEAgLTM5LDkgKzM5LDkgQEAgbmFt
ZXNwYWNlIHsKIAogI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCiAgICAgRVhQRUNUX0VR
KGEueCgpLCBiLngoKSk7IFwKLSAgICBFWFBFQ1RfRVEoYS5tYXhYKCksIGIubWF4WCgpKTsgXAog
ICAgIEVYUEVDVF9FUShhLnkoKSwgYi55KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEubWF4WSgpLCBi
Lm1heFkoKSk7CisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsgXAorICAgIEVY
UEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKIAogI2RlZmluZSBFWFBFQ1RfUElYRUxT
X01BVENIKGJpdG1hcCwgb3BhcXVlUmVjdCkgXAogeyBcCkBAIC0yMjYsOSArMjI2LDg4IEBAIFRF
U1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlQ2xpcFRlc3QpCiAgICAgY29u
dGV4dC5zYXZlKCk7CiAgICAgY29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZlcihhbHBoYUltYWdlLmdl
dCgpLCBGbG9hdFJlY3QoMzAsIDMwLCAxMCwgMTApKTsKICAgICBjb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29t
cG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CiAgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OwogICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVl
UmVnaW9uKCkuYXNSZWN0KCkpOwotICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitURVNUKFBs
YXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja0ltYWdlTWFzaykKK3sKKyAgICBTa0JpdG1hcCBi
aXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcs
IDQwMCwgNDAwKTsKKyAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBjYW52
YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZj
YW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsK
KyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENv
bG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBm
LCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIC8vIEltYWdlIG1hc2tzIGFyZSBkb25lIGJ5IGRy
YXdpbmcgYSBiaXRtYXAgaW50byBhIHRyYW5zcGFyZW5jeSBsYXllciB0aGF0IHVzZXMgRHN0SW4g
dG8gbWFzaworICAgIC8vIG91dCBhIHRyYW5zcGFyZW5jeSBsYXllciBiZWxvdyB0aGF0IGlzIGZp
bGxlZCB3aXRoIHRoZSBtYXNrIGNvbG9yLiBJbiB0aGUgZW5kIHRoaXMgc2hvdWxkCisgICAgLy8g
bm90IGJlIG1hcmtlZCBvcGFxdWUuCisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoMSk7CisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAxMCwgMTApLCBv
cGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworCisgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7Cisg
ICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOworCisgICAgT3duUHRyPEltYWdl
QnVmZmVyPiBhbHBoYUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDEwMCwgMTAw
KSk7CisgICAgYWxwaGFJbWFnZS0+Y29udGV4dCgpLT5maWxsUmVjdChJbnRSZWN0KDAsIDAsIDEw
MCwgMTAwKSwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgY29udGV4dC5zZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxvYXRS
ZWN0KDEwLCAxMCwgMTAsIDEwKSk7CisKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAgRVhQRUNUX0VR
X1JFQ1QoSW50UmVjdCgpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkp
OworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0hfRVhBQ1QoYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQu
b3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LCB0cmFja0ltYWdlTWFza1dpdGhPcGFxdWVSZWN0KQoreworICAgIFNrQml0bWFwIGJpdG1h
cDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgNDAw
LCA0MDApOworICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNhbnZhcyhi
aXRtYXApOworCisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZh
cyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOworICAg
IEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29sb3Ig
b3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAuMGYsIDAu
MGYsIDAuMGYsIDAuMGYpOworCisgICAgLy8gSW1hZ2UgbWFza3MgYXJlIGRvbmUgYnkgZHJhd2lu
ZyBhIGJpdG1hcCBpbnRvIGEgdHJhbnNwYXJlbmN5IGxheWVyIHRoYXQgdXNlcyBEc3RJbiB0byBt
YXNrCisgICAgLy8gb3V0IGEgdHJhbnNwYXJlbmN5IGxheWVyIGJlbG93IHRoYXQgaXMgZmlsbGVk
IHdpdGggdGhlIG1hc2sgY29sb3IuIEluIHRoZSBlbmQgdGhpcyBzaG91bGQKKyAgICAvLyBub3Qg
YmUgbWFya2VkIG9wYXF1ZS4KKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigx
KTsKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDEwLCAxMCksIG9wYXF1
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBjb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVEZXN0aW5hdGlvbkluKTsKKyAgICBj
b250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CisKKyAgICBPd25QdHI8SW1hZ2VCdWZm
ZXI+IGFscGhhSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApKTsK
KyAgICBhbHBoYUltYWdlLT5jb250ZXh0KCktPmZpbGxSZWN0KEludFJlY3QoMCwgMCwgMTAwLCAx
MDApLCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisKKyAgICBjb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBjb250ZXh0LmRyYXdJbWFn
ZUJ1ZmZlcihhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBGbG9hdFJlY3Qo
MTAsIDEwLCAxMCwgMTApKTsKKworICAgIC8vIFdlIGNhbid0IGhhdmUgYW4gb3BhcXVlIG1hc2sg
YWN0dWFsbHksIGJ1dCB3ZSBjYW4gcHJldGVuZCBoZXJlIGxpa2UgaXQgd291bGQgbG9vayBpZiB3
ZSBkaWQuCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTIsIDEyLCAzLCAzKSwgb3Bh
cXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNv
bnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5j
eUxheWVyKCk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEyLCAxMiwgMywgMyksIHBs
YXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJWEVM
U19NQVRDSF9FWEFDVChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CiB9CiAKIFRFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlSm9p
blRlc3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138154</attachid>
            <date>2012-04-20 13:48:00 -0700</date>
            <delta_ts>2012-04-20 19:06:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84275-20120420164759.patch</filename>
            <type>text/plain</type>
            <size>23708</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0NzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDY4NDJmODNmZDdkNjQ3
OWVjYzA1MTRhMDMwZGNjOTRlOTIxMzlmOC4uYmQ2YWE2NTUwMmZhZmYzOTY2MjIwODI5NjU4OWFk
MWRjMWFlZjIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
dHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVjdAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNP
cGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6YXBwbHlPcGFxdWVS
ZWdpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cHVz
aENhbnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnBvcENh
bnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6
T3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oOgorICAgICAgICAoT3BhcXVlUmVn
aW9uU2tpYSk6CisgICAgICAgIChDYW52YXNMYXllclN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVyKToKKwogMjAxMi0wNC0yMCAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3Igb3BhcXVlIGNvbnRlbnQgdHJhbnNmb3JtIG91dCBvZiBTa2lhIGNvbnRleHQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2UwYTNhYzA2ZGIyYTVjYTIzYjk5NjdmNDQxNzNmZDQ1
Y2M2ZDY2OS4uOTNkM2Y2MmY3N2IwMTJkYTQwN2Y4YTdmYWZjYTcyNDk1ODJmMjY4YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNC0xOCAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltYWdl
IG1hc2tzIGFyZSBjb25zaWRlcmVkIG9wYXF1ZSBpbmNvcnJlY3RseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyNzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL1BsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisKIDIwMTItMDQtMjAgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIG9wYXF1ZSBjb250ZW50IHRyYW5zZm9ybSBvdXQgb2Yg
U2tpYSBjb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcAppbmRleCA2NTkzNmNjM2EzNTA3NjE5OGVl
Yzc1ZGEyZWU2ZWE4MzBlMjcyOWZhLi5kOTc3MmUyNzQ4ZGQ0NTAxNjM1NzNmOTlkZmI2NWRhMzQx
MTFkMzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L09wYXF1ZVJlZ2lvblNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKQEAgLTEyNCwxMCArMTI0LDExIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWlu
dCwgYm9vbCBzcmNJc09wYXF1CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBh
aW50ZWQgd2lsbCBiZSBvcGFxdWUuCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShj
b25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hl
Y2tGaWxsT25seSA9IGZhbHNlKQorc3RhdGljIGlubGluZSBib29sIHBhaW50SXNPcGFxdWUoY29u
c3QgU2tQYWludCYgcGFpbnQsIE9wYXF1ZVJlZ2lvblNraWE6OkRyYXdUeXBlIGRyYXdUeXBlLCBj
b25zdCBTa0JpdG1hcCogYml0bWFwKQogewogICAgIGlmIChwYWludC5nZXRBbHBoYSgpIDwgMHhG
RikKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGRyYXdU
eXBlICE9IE9wYXF1ZVJlZ2lvblNraWE6OkZpbGxPclN0cm9rZTsKICAgICBpZiAoIWNoZWNrRmls
bE9ubHkgJiYgcGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSAmJiBwYWlu
dC5pc0FudGlBbGlhcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU2tTaGFkZXIqIHNo
YWRlciA9IHBhaW50LmdldFNoYWRlcigpOwpAQCAtMTQ3LDYgKzE0OCwzMCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRt
YXAqIGJpdG1hcCA9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFJldHVybnMgdHJ1ZSBpZiB0
aGVyZSBpcyBhIHJlY3Rhbmd1bGFyIGNsaXAsIHdpdGggdGhlIHJlc3VsdCBpbiB8ZGV2aWNlQ2xp
cFJlY3R8Lgorc3RhdGljIGlubGluZSBib29sIGdldERldmljZUNsaXBBc1JlY3QoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tSZWN0JiBkZXZpY2VDbGlwUmVjdCkKK3sKKyAg
ICAvLyBHZXQgdGhlIGN1cnJlbnQgY2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZS4KKyAg
ICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52YXM6OmtSZWN0
X0NsaXBUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTa0lSZWN0IGRldmljZUNs
aXBJUmVjdDsKKyAgICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBEZXZpY2VCb3VuZHMo
JmRldmljZUNsaXBJUmVjdCkpCisgICAgICAgIGRldmljZUNsaXBSZWN0LnNldChkZXZpY2VDbGlw
SVJlY3QpOworICAgIGVsc2UKKyAgICAgICAgZGV2aWNlQ2xpcFJlY3Quc2V0RW1wdHkoKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIFNrUmVjdCYgY3VycmVudFRyYWNr
aW5nT3BhcXVlUmVjdChTa1JlY3QmIHJvb3RPcGFxdWVSZWN0LCBWZWN0b3I8T3BhcXVlUmVnaW9u
U2tpYTo6Q2FudmFzTGF5ZXJTdGF0ZSwgMz4mIGNhbnZhc0xheWVyU3RhY2spCit7CisgICAgLy8g
SWYgd2UgYXJlIGRyYXdpbmcgaW50byBhIGNhbnZhcyBsYXllciwgdGhlbiB0cmFjayB0aGUgb3Bh
cXVlIHJlY3QgaW4gdGhhdCBsYXllci4KKyAgICBpZiAoIWNhbnZhc0xheWVyU3RhY2suaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gY2FudmFzTGF5ZXJTdGFjay5sYXN0KCkub3BhcXVlUmVjdDsK
KyAgICByZXR1cm4gcm9vdE9wYXF1ZVJlY3Q7Cit9CisKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
cHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqIHBhaW50KQogewogICAgIENhbnZhc0xheWVy
U3RhdGUgc3RhdGU7CkBAIC0xNTUsOSArMTgwLDE5IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
cHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgIG1fY2FudmFzTGF5ZXJT
dGFjay5hcHBlbmQoc3RhdGUpOwogfQogCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnBvcENhbnZh
c0xheWVyKCkKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2FudmFzTGF5ZXIoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCkKIHsKKyAgICBjb25zdCBDYW52YXNMYXllclN0YXRl
JiBjYW52YXNMYXllciA9IG1fY2FudmFzTGF5ZXJTdGFjay5sYXN0KCk7CisgICAgU2tSZWN0IGxh
eWVyT3BhcXVlUmVjdCA9IGNhbnZhc0xheWVyLm9wYXF1ZVJlY3Q7CisgICAgU2tQYWludCBsYXll
clBhaW50ID0gY2FudmFzTGF5ZXIucGFpbnQ7CisKKyAgICAvLyBBcHBseSB0aGUgaW1hZ2UgbWFz
ay4KKyAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFsYXllck9wYXF1ZVJlY3Qu
aW50ZXJzZWN0KGNhbnZhc0xheWVyLmltYWdlT3BhcXVlUmVjdCkpCisgICAgICAgIGxheWVyT3Bh
cXVlUmVjdC5zZXRFbXB0eSgpOworCiAgICAgbV9jYW52YXNMYXllclN0YWNrLnJlbW92ZUxhc3Qo
KTsKKworICAgIGFwcGx5T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnRleHQsIGxheWVyT3BhcXVl
UmVjdCwgbGF5ZXJQYWludCk7CiB9CiAKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6c2V0SW1hZ2VN
YXNrKGNvbnN0IFNrUmVjdCYgaW1hZ2VPcGFxdWVSZWN0KQpAQCAtMjU0LDY5ICsyODksNjUgQEAg
dm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEq
IGNvbnRleHQsIGNvbnN0IFNrUmVjdCYKICAgICBpZiAoIWNhbnZhc1RyYW5zZm9ybS5tYXBSZWN0
KCZ0YXJnZXRSZWN0KSkKICAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKIAotICAgIC8vIEFw
cGx5IHRoZSBjdXJyZW50IGNsaXAgaW4gZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYg
KGNvbnRleHQtPmNhbnZhcygpLT5nZXRDbGlwVHlwZSgpICE9IFNrQ2FudmFzOjprUmVjdF9DbGlw
VHlwZSkKKyAgICAvLyBBcHBseSB0aGUgY3VycmVudCBjbGlwLgorICAgIFNrUmVjdCBkZXZpY2VD
bGlwUmVjdDsKKyAgICBpZiAoIWdldERldmljZUNsaXBBc1JlY3QoY29udGV4dCwgZGV2aWNlQ2xp
cFJlY3QpKQogICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAg
ICBTa0lSZWN0IGRldmljZUNsaXA7Ci0gICAgICAgIGlmICghY29udGV4dC0+Y2FudmFzKCktPmdl
dENsaXBEZXZpY2VCb3VuZHMoJmRldmljZUNsaXApKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5m
TGVmdCksIFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mVG9wKSwgU2tJbnRUb1NjYWxhcihkZXZp
Y2VDbGlwLmZSaWdodCksIFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mQm90dG9tKSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5
cGUgPT0gRmlsbE9ubHk7Ci0gICAgYm9vbCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBhaW50SXNP
cGFxdWUocGFpbnQsIHNvdXJjZUJpdG1hcCwgY2hlY2tGaWxsT25seSk7Ci0KLSAgICBib29sIHhm
ZXJzT3BhcXVlID0geGZlcm1vZGVJc09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUp
OwotCi0gICAgLy8gQXBwbHkgdGhlIFNrQ2FudmFzIGxheWVycyB3ZSB3aWxsIGJlIGRyYXdpbmcg
dGhyb3VnaC4KLSAgICBmb3IgKHNpemVfdCBpID0gbV9jYW52YXNMYXllclN0YWNrLnNpemUoKTsg
aSA+IDA7IC0taSkgewotICAgICAgICBjb25zdCBDYW52YXNMYXllclN0YXRlJiBjYW52YXNMYXll
ciA9IG1fY2FudmFzTGF5ZXJTdGFja1tpLTFdOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBzdGlsbCB0cmFjayB0aGUgb3BhcXVlIHBhcnQgYnV0IGl0J3MgYWx3YXlzIGVtcHR5IHJpZ2h0
IG5vdyBhbnl3YXlzLgotICAgICAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFj
YW52YXNMYXllci5pbWFnZU9wYXF1ZVJlY3QuY29udGFpbnModGFyZ2V0UmVjdCkpCi0gICAgICAg
ICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwotCi0gICAgICAgIGJvb2wgY2hlY2tGaWxsT25seSA9
IGRyYXdUeXBlID09IEZpbGxPbmx5OwotICAgICAgICBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBh
aW50SXNPcGFxdWUoY2FudmFzTGF5ZXIucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAg
ICAvLyBJZiBhbnkgbGF5ZXIgZG9lc24ndCBwYWludCBvcGFxdWUsIHRoZW4gdGhlIHJlc3VsdCB3
aWxsIG5vdCBiZSBvcGFxdWUuCi0gICAgICAgIHhmZXJzT3BhcXVlICY9IHhmZXJtb2RlSXNPcGFx
dWUoY2FudmFzTGF5ZXIucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9CisgICAg
ZWxzZSBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KGRldmljZUNsaXBSZWN0KSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gUHJlc2VydmluZyBvcGFxdWUgb25seSBtYXR0ZXJzIGZvciB0aGUg
Ym90dG9tLW1vc3QgbGF5ZXIuIEl0cyBjb250ZW50cyBhcmUgZWl0aGVyIG9wYXF1ZSBvciBub3Qs
IGFuZCBpZiBub3QKLSAgICAvLyB0aGVuIHdlIGNhcmUgaWYgaXQgcHJlc2VydmVzIHRoZSBvcGFx
dWVuZXNzIG9mIHRoZSB0YXJnZXQgZGV2aWNlIHdoZW4gaXQgaXMgZHJhd24gaW50byB0aGUgZGV2
aWNlLgotICAgIGJvb2wgcHJlc2VydmVzT3BhcXVlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3Rh
Y2suaXNFbXB0eSgpKQotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZl
c09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotICAgIGVsc2UKLSAgICAgICAg
cHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUobV9jYW52YXNMYXllclN0
YWNrWzBdLnBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7CisgICAgYm9vbCBkcmF3c09wYXF1
ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIGRyYXdUeXBlLCBzb3VyY2VCaXRtYXApOworICAgIGJv
b2wgeGZlcnNPcGFxdWUgPSB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7Cisg
ICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwg
ZHJhd3NPcGFxdWUpOwogCiAgICAgaWYgKGZpbGxzQm91bmRzICYmIHhmZXJzT3BhcXVlKQogICAg
ICAgICBtYXJrUmVjdEFzT3BhcXVlKHRhcmdldFJlY3QpOwotICAgIGVsc2UgaWYgKFNrUmVjdDo6
SW50ZXJzZWN0cyh0YXJnZXRSZWN0LCBtX29wYXF1ZVJlY3QpICYmICFwcmVzZXJ2ZXNPcGFxdWUp
CisgICAgZWxzZSBpZiAoIXByZXNlcnZlc09wYXF1ZSkKICAgICAgICAgbWFya1JlY3RBc05vbk9w
YXF1ZSh0YXJnZXRSZWN0KTsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5i
b3VuZGVkKGNvbnN0IFNrUGFpbnQmIHBhaW50KQogewotICAgIC8vIFByZXNlcnZpbmcgb3BhcXVl
IG9ubHkgbWF0dGVycyBmb3IgdGhlIGJvdHRvbS1tb3N0IGxheWVyLiBJdHMgY29udGVudHMgYXJl
IGVpdGhlciBvcGFxdWUgb3Igbm90LCBhbmQgaWYgbm90Ci0gICAgLy8gdGhlbiB3ZSBjYXJlIGlm
IGl0IHByZXNlcnZlcyB0aGUgb3BhcXVlbmVzcyBvZiB0aGUgdGFyZ2V0IGRldmljZSB3aGVuIGl0
IGlzIGRyYXduIGludG8gdGhlIGRldmljZS4KLSAgICBib29sIHByZXNlcnZlc09wYXF1ZTsKLQot
ICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3Rh
Y2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgbGFzdExheWVyRHJhd3NPcGFxdWUgPSBwYWlu
dElzT3BhcXVlKHBhaW50LCAwLCBjaGVja0ZpbGxPbmx5KTsKLSAgICAgICAgcHJlc2VydmVzT3Bh
cXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVl
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBib29sIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFp
bnRJc09wYXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkp
OwotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShtX2Nh
bnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9Cisg
ICAgYm9vbCBkcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIEZpbGxPclN0cm9rZSwg
MCk7CisgICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShw
YWludCwgZHJhd3NPcGFxdWUpOwogCi0gICAgaWYgKCFwcmVzZXJ2ZXNPcGFxdWUpIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0IHdhcyBkcmF3biBvbiBzbyBqdXN0IGRlc3Ryb3kgdGhl
IGtub3duIG9wYXF1ZSBhcmVhLgotICAgICAgICBtX29wYXF1ZVJlY3QgPSBTa1JlY3Q6Ok1ha2VF
bXB0eSgpOwotICAgIH0KKyAgICBpZiAocHJlc2VydmVzT3BhcXVlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtYXJrQWxsQXNOb25PcGFxdWUoKTsKK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjphcHBseU9wYXF1ZVJlZ2lvbkZyb21MYXllcihjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBj
b250ZXh0LCBjb25zdCBTa1JlY3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYgcGFp
bnQpCit7CisgICAgU2tSZWN0IGRldmljZUNsaXBSZWN0OworICAgIGJvb2wgZGV2aWNlQ2xpcElz
QVJlY3QgPSBnZXREZXZpY2VDbGlwQXNSZWN0KGNvbnRleHQsIGRldmljZUNsaXBSZWN0KTsKKwor
ICAgIGlmIChkZXZpY2VDbGlwSXNBUmVjdCAmJiBkZXZpY2VDbGlwUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFNrUmVjdCBzb3VyY2VPcGFxdWVSZWN0ID0gbGF5ZXJPcGFx
dWVSZWN0OworICAgIC8vIFNhdmUgdGhlIG9wYXF1ZSBhcmVhIGluIHRoZSBkZXN0aW5hdGlvbiwg
c28gd2UgY2FuIHByZXNlcnZlIHRoZSBwYXJ0cyBvZiBpdCB1bmRlciB0aGUgc291cmNlIG9wYXF1
ZSBhcmVhIGlmIHBvc3NpYmxlLgorICAgIFNrUmVjdCBkZXN0aW5hdGlvbk9wYXF1ZVJlY3QgPSBj
dXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNr
KTsKKworICAgIGJvb2wgb3V0c2lkZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4
ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgZmFsc2UpOworICAgIGlmICghb3V0c2lkZVNv
dXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFx
dWUoZGV2aWNlQ2xpcFJlY3QpOworCisgICAgaWYgKCFkZXZpY2VDbGlwSXNBUmVjdCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghc291cmNlT3BhcXVlUmVjdC5pbnRlcnNlY3QoZGV2aWNlQ2xp
cFJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3REcmF3
c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIEZpbGxPbmx5LCAwKTsKKyAgICBib29sIHNv
dXJjZU9wYXF1ZVJlY3RYZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIHNvdXJj
ZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSk7CisgICAgYm9vbCBzb3VyY2VPcGFxdWVSZWN0UHJlc2Vy
dmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJl
Y3REcmF3c09wYXF1ZSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIncyBvcGFxdWUgYXJlYSBpcyBi
ZWluZyBkcmF3biBvcGFxdWUgaW4gdGhlIGxheWVyIGJlbG93LCB0aGVuIG1hcmsgaXQgb3BhcXVl
LiBPdGhlcndpc2UsCisgICAgLy8gaWYgaXQgcHJlc2VydmVzIG9wYXF1ZSB0aGVuIGtlZXAgdGhl
IGludGVyc2VjdGlvbiBvZiB0aGUgdHdvLgorICAgIGlmIChzb3VyY2VPcGFxdWVSZWN0WGZlcnNP
cGFxdWUpCisgICAgICAgIG1hcmtSZWN0QXNPcGFxdWUoc291cmNlT3BhcXVlUmVjdCk7CisgICAg
ZWxzZSBpZiAoc291cmNlT3BhcXVlUmVjdFByZXNlcnZlc09wYXF1ZSAmJiBzb3VyY2VPcGFxdWVS
ZWN0LmludGVyc2VjdChkZXN0aW5hdGlvbk9wYXF1ZVJlY3QpKQorICAgICAgICBtYXJrUmVjdEFz
T3BhcXVlKHNvdXJjZU9wYXF1ZVJlY3QpOwogfQogCiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1h
cmtSZWN0QXNPcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQpAQCAtMzI2LDMxICszNTcsMzMgQEAg
dm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVj
dCkKICAgICAvLyByZWN0YW5nbGUgdGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVh
cGVzdCB3YXkgdG8gaW5jcmVhc2UgdGhlIGFyZWEgcmV0dXJuZWQKICAgICAvLyB3aXRob3V0IGlu
Y3JlYXNpbmcgdGhlIGNvbXBsZXhpdHkuCiAKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJy
ZW50VHJhY2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsK
KwogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX29w
YXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCisgICAgaWYgKG9wYXF1ZVJlY3QuY29udGFpbnMocmVj
dCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3Qp
KSB7Ci0gICAgICAgIG1fb3BhcXVlUmVjdCA9IHJlY3Q7CisgICAgaWYgKHJlY3QuY29udGFpbnMo
b3BhcXVlUmVjdCkpIHsKKyAgICAgICAgb3BhcXVlUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAocmVjdC5mVG9wIDw9IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJl
Y3QuZkJvdHRvbSA+PSBtX29wYXF1ZVJlY3QuZkJvdHRvbSkgewotICAgICAgICBpZiAocmVjdC5m
TGVmdCA8IG1fb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBtX29wYXF1ZVJlY3Qu
ZkxlZnQpCi0gICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OwotICAg
ICAgICBpZiAocmVjdC5mUmlnaHQgPiBtX29wYXF1ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxlZnQg
PD0gbV9vcGFxdWVSZWN0LmZSaWdodCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmlnaHQg
PSByZWN0LmZSaWdodDsKLSAgICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0
LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49IG1fb3BhcXVlUmVjdC5mUmlnaHQpIHsKLSAgICAgICAg
aWYgKHJlY3QuZlRvcCA8IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29w
YXF1ZVJlY3QuZlRvcCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mVG9wID0gcmVjdC5mVG9w
OwotICAgICAgICBpZiAocmVjdC5mQm90dG9tID4gbV9vcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVj
dC5mVG9wIDw9IG1fb3BhcXVlUmVjdC5mQm90dG9tKQotICAgICAgICAgICAgbV9vcGFxdWVSZWN0
LmZCb3R0b20gPSByZWN0LmZCb3R0b207CisgICAgaWYgKHJlY3QuZlRvcCA8PSBvcGFxdWVSZWN0
LmZUb3AgJiYgcmVjdC5mQm90dG9tID49IG9wYXF1ZVJlY3QuZkJvdHRvbSkgeworICAgICAgICBp
ZiAocmVjdC5mTGVmdCA8IG9wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gb3BhcXVl
UmVjdC5mTGVmdCkKKyAgICAgICAgICAgIG9wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0Owor
ICAgICAgICBpZiAocmVjdC5mUmlnaHQgPiBvcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0
IDw9IG9wYXF1ZVJlY3QuZlJpZ2h0KQorICAgICAgICAgICAgb3BhcXVlUmVjdC5mUmlnaHQgPSBy
ZWN0LmZSaWdodDsKKyAgICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gb3BhcXVlUmVjdC5mTGVm
dCAmJiByZWN0LmZSaWdodCA+PSBvcGFxdWVSZWN0LmZSaWdodCkgeworICAgICAgICBpZiAocmVj
dC5mVG9wIDwgb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBvcGFxdWVSZWN0LmZU
b3ApCisgICAgICAgICAgICBvcGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAgIGlm
IChyZWN0LmZCb3R0b20gPiBvcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG9wYXF1
ZVJlY3QuZkJvdHRvbSkKKyAgICAgICAgICAgIG9wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJv
dHRvbTsKICAgICB9CiAKLSAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1ZVJlY3Qu
d2lkdGgoKSAqIChsb25nKW1fb3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAgICBsb25nIG9wYXF1ZUFy
ZWEgPSAobG9uZylvcGFxdWVSZWN0LndpZHRoKCkgKiAobG9uZylvcGFxdWVSZWN0LmhlaWdodCgp
OwogICAgIGxvbmcgYXJlYSA9IChsb25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVpZ2h0
KCk7CiAgICAgaWYgKGFyZWEgPiBvcGFxdWVBcmVhKQotICAgICAgICBtX29wYXF1ZVJlY3QgPSBy
ZWN0OworICAgICAgICBvcGFxdWVSZWN0ID0gcmVjdDsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25T
a2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKQEAgLTM1OCwzNCAr
MzkxLDQzIEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShjb25z
dCBTa1JlY3QmIHJlY3QpCiAgICAgLy8gV2Ugd2FudCB0byBrZWVwIGFzIG11Y2ggb2YgdGhlIGN1
cnJlbnQgb3BhcXVlIHJlY3RhbmdsZSBhcyB3ZSBjYW4sIHNvIGZpbmQgdGhlIG9uZSBsYXJnZXN0
CiAgICAgLy8gcmVjdGFuZ2xlIGluc2lkZSBtX29wYXF1ZVJlY3QgdGhhdCBkb2VzIG5vdCBpbnRl
cnNlY3Qgd2l0aCB8cmVjdHwuCiAKLSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3Qp
KSB7Ci0gICAgICAgIG1fb3BhcXVlUmVjdC5zZXRFbXB0eSgpOworICAgIFNrUmVjdCYgb3BhcXVl
UmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2NhbnZhc0xh
eWVyU3RhY2spOworCisgICAgaWYgKCFTa1JlY3Q6OkludGVyc2VjdHMocmVjdCwgb3BhcXVlUmVj
dCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVjdC5jb250YWlucyhvcGFxdWVSZWN0KSkg
eworICAgICAgICBtYXJrQWxsQXNOb25PcGFxdWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGludCBkZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0Owot
ICAgIGludCBkZWx0YVJpZ2h0ID0gbV9vcGFxdWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0Owot
ICAgIGludCBkZWx0YVRvcCA9IHJlY3QuZlRvcCAtIG1fb3BhcXVlUmVjdC5mVG9wOwotICAgIGlu
dCBkZWx0YUJvdHRvbSA9IG1fb3BhcXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOworICAg
IGludCBkZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gb3BhcXVlUmVjdC5mTGVmdDsKKyAgICBpbnQg
ZGVsdGFSaWdodCA9IG9wYXF1ZVJlY3QuZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7CisgICAgaW50IGRl
bHRhVG9wID0gcmVjdC5mVG9wIC0gb3BhcXVlUmVjdC5mVG9wOworICAgIGludCBkZWx0YUJvdHRv
bSA9IG9wYXF1ZVJlY3QuZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsKIAotICAgIC8vIGhvcml6b250
YWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxlZnQgb3IgdG8g
dGhlIHJpZ2h0IG9mIHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KLSAgICAvLyB2ZXJ0
aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8
cmVjdHwgYW5kIGluc2lkZSBtX29wYXF1ZVJlY3QuCi0gICAgU2tSZWN0IGhvcml6b250YWwgPSBt
X29wYXF1ZVJlY3Q7CisgICAgLy8gaG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28g
cmVjdGFuZ2xlcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBpbnNp
ZGUgb3BhcXVlUmVjdC4KKyAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28g
cmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBvcGFxdWVSZWN0Lgor
ICAgIFNrUmVjdCBob3Jpem9udGFsID0gb3BhcXVlUmVjdDsKICAgICBpZiAoZGVsdGFUb3AgPiBk
ZWx0YUJvdHRvbSkKICAgICAgICAgaG9yaXpvbnRhbC5mQm90dG9tID0gcmVjdC5mVG9wOwogICAg
IGVsc2UKICAgICAgICAgaG9yaXpvbnRhbC5mVG9wID0gcmVjdC5mQm90dG9tOwotICAgIFNrUmVj
dCB2ZXJ0aWNhbCA9IG1fb3BhcXVlUmVjdDsKKyAgICBTa1JlY3QgdmVydGljYWwgPSBvcGFxdWVS
ZWN0OwogICAgIGlmIChkZWx0YUxlZnQgPiBkZWx0YVJpZ2h0KQogICAgICAgICB2ZXJ0aWNhbC5m
UmlnaHQgPSByZWN0LmZMZWZ0OwogICAgIGVsc2UKICAgICAgICAgdmVydGljYWwuZkxlZnQgPSBy
ZWN0LmZSaWdodDsKIAogICAgIGlmICgobG9uZylob3Jpem9udGFsLndpZHRoKCkgKiAobG9uZylo
b3Jpem9udGFsLmhlaWdodCgpID4gKGxvbmcpdmVydGljYWwud2lkdGgoKSAqIChsb25nKXZlcnRp
Y2FsLmhlaWdodCgpKQotICAgICAgICBtX29wYXF1ZVJlY3QgPSBob3Jpem9udGFsOworICAgICAg
ICBvcGFxdWVSZWN0ID0gaG9yaXpvbnRhbDsKICAgICBlbHNlCi0gICAgICAgIG1fb3BhcXVlUmVj
dCA9IHZlcnRpY2FsOworICAgICAgICBvcGFxdWVSZWN0ID0gdmVydGljYWw7CiB9CiAKK3ZvaWQg
T3BhcXVlUmVnaW9uU2tpYTo6bWFya0FsbEFzTm9uT3BhcXVlKCkKK3sKKyAgICBTa1JlY3QmIG9w
YXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52
YXNMYXllclN0YWNrKTsKKyAgICBvcGFxdWVSZWN0LnNldEVtcHR5KCk7Cit9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgKaW5kZXggODQ0MzZhM2M5YjYxNWIxY2MyZjBj
ZTIwN2I5YmFlNTViM2M3NTE5Yi4uYzU1OWYwMTE2NTNmMWUwYTc1YmViYTk0M2Q3MGUwOTJhMDc4
ZTkwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9P
cGFxdWVSZWdpb25Ta2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIElu
dFJlY3QgYXNSZWN0KCkgY29uc3Q7CiAKICAgICB2b2lkIHB1c2hDYW52YXNMYXllcihjb25zdCBT
a1BhaW50Kik7Ci0gICAgdm9pZCBwb3BDYW52YXNMYXllcigpOworICAgIHZvaWQgcG9wQ2FudmFz
TGF5ZXIoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSopOwogCiAgICAgdm9pZCBzZXRJbWFnZU1h
c2soY29uc3QgU2tSZWN0JiBpbWFnZU9wYXF1ZVJlY3QpOwogCkBAIC02MiwyMSArNjIsMTYgQEAg
cHVibGljOgogICAgIHZvaWQgZGlkRHJhd1BvaW50cyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lh
KiwgU2tDYW52YXM6OlBvaW50TW9kZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtdLCBj
b25zdCBTa1BhaW50Jik7CiAgICAgdm9pZCBkaWREcmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNv
bnRleHRTa2lhKiwgY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOwogCi1wcml2YXRlOgog
ICAgIGVudW0gRHJhd1R5cGUgewogICAgICAgICBGaWxsT25seSwKICAgICAgICAgRmlsbE9yU3Ry
b2tlCiAgICAgfTsKIAotICAgIHZvaWQgZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lh
KiwgY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiBzb3VyY2VC
aXRtYXAsIGJvb2wgZmlsbHNCb3VuZHMsIERyYXdUeXBlKTsKLSAgICB2b2lkIGRpZERyYXdVbmJv
dW5kZWQoY29uc3QgU2tQYWludCYpOwotICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShjb25zdCBT
a1JlY3QmKTsKLSAgICB2b2lkIG1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0Jik7Ci0K
LSAgICBTa1JlY3QgbV9vcGFxdWVSZWN0OwotCiAgICAgc3RydWN0IENhbnZhc0xheWVyU3RhdGUg
ewotICAgICAgICBDYW52YXNMYXllclN0YXRlKCkgOiBoYXNJbWFnZU1hc2soZmFsc2UpIHsgfQor
ICAgICAgICBDYW52YXNMYXllclN0YXRlKCkKKyAgICAgICAgICAgIDogaGFzSW1hZ2VNYXNrKGZh
bHNlKQorICAgICAgICAgICAgLCBvcGFxdWVSZWN0KFNrUmVjdDo6TWFrZUVtcHR5KCkpCisgICAg
ICAgIHsgfQogCiAgICAgICAgIFNrUGFpbnQgcGFpbnQ7CiAKQEAgLTg0LDggKzc5LDIwIEBAIHBy
aXZhdGU6CiAgICAgICAgIGJvb2wgaGFzSW1hZ2VNYXNrOwogICAgICAgICAvLyBUaGUgb3BhcXVl
IGFyZWEgaW4gdGhlIGltYWdlIG1hc2suCiAgICAgICAgIFNrUmVjdCBpbWFnZU9wYXF1ZVJlY3Q7
CisKKyAgICAgICAgU2tSZWN0IG9wYXF1ZVJlY3Q7CiAgICAgfTsKIAorcHJpdmF0ZToKKyAgICB2
b2lkIGRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYsIGNv
bnN0IFNrUGFpbnQmLCBjb25zdCBTa0JpdG1hcCogc291cmNlQml0bWFwLCBib29sIGZpbGxzQm91
bmRzLCBEcmF3VHlwZSk7CisgICAgdm9pZCBkaWREcmF3VW5ib3VuZGVkKGNvbnN0IFNrUGFpbnQm
KTsKKyAgICB2b2lkIGFwcGx5T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnN0IFBsYXRmb3JtQ29u
dGV4dFNraWEqLCBjb25zdCBTa1JlY3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYp
OworICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmKTsKKyAgICB2b2lkIG1h
cmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrQWxsQXNOb25P
cGFxdWUoKTsKKworICAgIFNrUmVjdCBtX29wYXF1ZVJlY3Q7CisKICAgICBWZWN0b3I8Q2FudmFz
TGF5ZXJTdGF0ZSwgMz4gbV9jYW52YXNMYXllclN0YWNrOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5jcHAKaW5kZXggOWMwYWNkN2Y0YzQ3MThkYTI2MjhjNTFkZWQxY2MzM2M0YjA3ZjI2NC4u
YTM3MzA0MGRmNTY4NWM1NWJkM2ZkNzFmMzk1YzNiMjkzZjI5NWI4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpyZXN0b3JlTGF5ZXIoKQogewogICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CiAgICAgaWYgKG1f
dHJhY2tPcGFxdWVSZWdpb24pCi0gICAgICAgIG1fb3BhcXVlUmVnaW9uLnBvcENhbnZhc0xheWVy
KCk7CisgICAgICAgIG1fb3BhcXVlUmVnaW9uLnBvcENhbnZhc0xheWVyKHRoaXMpOwogfQogCiB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCmluZGV4IGRjNWUzMTk5MjE4ZDM4NDg1ZTc1
N2YyOTlmNzk0MDFiN2Y1YTM0YTIuLjM1N2IwN2YzY2VjMzk5N2IwNWIyN2RiOTViMzMxMWNlZGYy
ZTUyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1D
b250ZXh0U2tpYVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxh
dGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSB7CiAK
ICNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAogICAgIEVYUEVDVF9FUShhLngoKSwgYi54
KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEubWF4WCgpLCBiLm1heFgoKSk7IFwKICAgICBFWFBFQ1Rf
RVEoYS55KCksIGIueSgpKTsgXAotICAgIEVYUEVDVF9FUShhLm1heFkoKSwgYi5tYXhZKCkpOwor
ICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5o
ZWlnaHQoKSwgYi5oZWlnaHQoKSk7CiAKICNkZWZpbmUgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRt
YXAsIG9wYXF1ZVJlY3QpIFwKIHsgXApAQCAtMjI2LDkgKzIyNiw4OCBAQCBURVNUKFBsYXRmb3Jt
Q29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUNsaXBUZXN0KQogICAgIGNvbnRleHQuc2F2ZSgp
OwogICAgIGNvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgRmxvYXRS
ZWN0KDMwLCAzMCwgMTAsIDEwKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAs
IDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJj
ZU92ZXIpOworICAgIGNvbnRleHQucmVzdG9yZSgpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKICAgICBFWFBF
Q1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFz
UmVjdCgpKTsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRl
eHRTa2lhVGVzdCwgdHJhY2tJbWFnZU1hc2spCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAg
IGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCA0MDAsIDQwMCk7
CisgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7
CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUo
MS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4w
ZiwgMC4wZik7CisKKyAgICAvLyBJbWFnZSBtYXNrcyBhcmUgZG9uZSBieSBkcmF3aW5nIGEgYml0
bWFwIGludG8gYSB0cmFuc3BhcmVuY3kgbGF5ZXIgdGhhdCB1c2VzIERzdEluIHRvIG1hc2sKKyAg
ICAvLyBvdXQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgYmVsb3cgdGhhdCBpcyBmaWxsZWQgd2l0aCB0
aGUgbWFzayBjb2xvci4gSW4gdGhlIGVuZCB0aGlzIHNob3VsZAorICAgIC8vIG5vdCBiZSBtYXJr
ZWQgb3BhcXVlLgorCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
U291cmNlT3Zlcik7CisgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOworICAg
IGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMTAsIDEwKSwgb3BhcXVlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZURlc3RpbmF0aW9uSW4pOworICAgIGNvbnRleHQu
YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYWxw
aGFJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGFs
cGhhSW1hZ2UtPmNvbnRleHQoKS0+ZmlsbFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGFs
cGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdCgxMCwgMTAs
IDEwLCAxMCkpOworCisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGNv
bnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBF
Q1RfUElYRUxTX01BVENIX0VYQUNUKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tJ
bWFnZU1hc2tXaXRoT3BhcXVlUmVjdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0
bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDQwMCwgNDAwKTsKKyAg
ICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKwor
ICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBm
LCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAw
LjBmKTsKKworICAgIC8vIEltYWdlIG1hc2tzIGFyZSBkb25lIGJ5IGRyYXdpbmcgYSBiaXRtYXAg
aW50byBhIHRyYW5zcGFyZW5jeSBsYXllciB0aGF0IHVzZXMgRHN0SW4gdG8gbWFzaworICAgIC8v
IG91dCBhIHRyYW5zcGFyZW5jeSBsYXllciBiZWxvdyB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSBt
YXNrIGNvbG9yLiBJbiB0aGUgZW5kIHRoaXMgc2hvdWxkCisgICAgLy8gbm90IGJlIG1hcmtlZCBv
cGFxdWUuCisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CisgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAxMCwgMTApLCBvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworCisgICAgY29udGV4dC5zZXRDb21w
b3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7CisgICAgY29udGV4dC5iZWdp
blRyYW5zcGFyZW5jeUxheWVyKDEpOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBhbHBoYUlt
YWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgYWxwaGFJ
bWFnZS0+Y29udGV4dCgpLT5maWxsUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgYWxwaGEs
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoYWxw
aGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxvYXRSZWN0KDEwLCAxMCwgMTAs
IDEwKSk7CisKKyAgICAvLyBXZSBjYW4ndCBoYXZlIGFuIG9wYXF1ZSBtYXNrIGFjdHVhbGx5LCBi
dXQgd2UgY2FuIHByZXRlbmQgaGVyZSBsaWtlIGl0IHdvdWxkIGxvb2sgaWYgd2UgZGlkLgorICAg
IGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEyLCAxMiwgMywgMyksIG9wYXF1ZSwgQ29sb3JT
cGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7CisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwor
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMiwgMTIsIDMsIDMpLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0hfRVhB
Q1QoYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwogfQog
CiBURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUpvaW5UZXN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138214</attachid>
            <date>2012-04-20 19:07:02 -0700</date>
            <delta_ts>2012-04-23 13:33:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84275-20120420220700.patch</filename>
            <type>text/plain</type>
            <size>23708</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0ODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVmYTI3YTNkMzExNDgz
YjcxYmY5Njc0ODk2NDhjOTVkNWFhNWU5My4uOTFlNmZhM2RjMTMwNGVkY2IxOWIwNjdlOWE0NTVj
MTQ5ZDY3ZGY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
dHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVjdAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNP
cGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6YXBwbHlPcGFxdWVS
ZWdpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cHVz
aENhbnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnBvcENh
bnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6
T3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oOgorICAgICAgICAoT3BhcXVlUmVn
aW9uU2tpYSk6CisgICAgICAgIChDYW52YXNMYXllclN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVyKToKKwogMjAxMi0wNC0yMCAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3Igb3BhcXVlIGNvbnRlbnQgdHJhbnNmb3JtIG91dCBvZiBTa2lhIGNvbnRleHQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjYyOWY2ZWQ1YTNkODRhOTY3ZjI1OGNhOTAyMzNiZjk3
OTFiZDE3NC4uNDg0ODU1Y2VlZGQ5NmY5ZWUyNDI4NWE2NjQzMzc4NzcwMWYzNGRhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNC0xOCAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltYWdl
IG1hc2tzIGFyZSBjb25zaWRlcmVkIG9wYXF1ZSBpbmNvcnJlY3RseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyNzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL1BsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisKIDIwMTItMDQtMjAgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIG9wYXF1ZSBjb250ZW50IHRyYW5zZm9ybSBvdXQgb2Yg
U2tpYSBjb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcAppbmRleCA2NTkzNmNjM2EzNTA3NjE5OGVl
Yzc1ZGEyZWU2ZWE4MzBlMjcyOWZhLi5kOTc3MmUyNzQ4ZGQ0NTAxNjM1NzNmOTlkZmI2NWRhMzQx
MTFkMzYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L09wYXF1ZVJlZ2lvblNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKQEAgLTEyNCwxMCArMTI0LDExIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWlu
dCwgYm9vbCBzcmNJc09wYXF1CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBh
aW50ZWQgd2lsbCBiZSBvcGFxdWUuCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShj
b25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hl
Y2tGaWxsT25seSA9IGZhbHNlKQorc3RhdGljIGlubGluZSBib29sIHBhaW50SXNPcGFxdWUoY29u
c3QgU2tQYWludCYgcGFpbnQsIE9wYXF1ZVJlZ2lvblNraWE6OkRyYXdUeXBlIGRyYXdUeXBlLCBj
b25zdCBTa0JpdG1hcCogYml0bWFwKQogewogICAgIGlmIChwYWludC5nZXRBbHBoYSgpIDwgMHhG
RikKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGRyYXdU
eXBlICE9IE9wYXF1ZVJlZ2lvblNraWE6OkZpbGxPclN0cm9rZTsKICAgICBpZiAoIWNoZWNrRmls
bE9ubHkgJiYgcGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSAmJiBwYWlu
dC5pc0FudGlBbGlhcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU2tTaGFkZXIqIHNo
YWRlciA9IHBhaW50LmdldFNoYWRlcigpOwpAQCAtMTQ3LDYgKzE0OCwzMCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRt
YXAqIGJpdG1hcCA9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFJldHVybnMgdHJ1ZSBpZiB0
aGVyZSBpcyBhIHJlY3Rhbmd1bGFyIGNsaXAsIHdpdGggdGhlIHJlc3VsdCBpbiB8ZGV2aWNlQ2xp
cFJlY3R8Lgorc3RhdGljIGlubGluZSBib29sIGdldERldmljZUNsaXBBc1JlY3QoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tSZWN0JiBkZXZpY2VDbGlwUmVjdCkKK3sKKyAg
ICAvLyBHZXQgdGhlIGN1cnJlbnQgY2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZS4KKyAg
ICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52YXM6OmtSZWN0
X0NsaXBUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTa0lSZWN0IGRldmljZUNs
aXBJUmVjdDsKKyAgICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBEZXZpY2VCb3VuZHMo
JmRldmljZUNsaXBJUmVjdCkpCisgICAgICAgIGRldmljZUNsaXBSZWN0LnNldChkZXZpY2VDbGlw
SVJlY3QpOworICAgIGVsc2UKKyAgICAgICAgZGV2aWNlQ2xpcFJlY3Quc2V0RW1wdHkoKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIFNrUmVjdCYgY3VycmVudFRyYWNr
aW5nT3BhcXVlUmVjdChTa1JlY3QmIHJvb3RPcGFxdWVSZWN0LCBWZWN0b3I8T3BhcXVlUmVnaW9u
U2tpYTo6Q2FudmFzTGF5ZXJTdGF0ZSwgMz4mIGNhbnZhc0xheWVyU3RhY2spCit7CisgICAgLy8g
SWYgd2UgYXJlIGRyYXdpbmcgaW50byBhIGNhbnZhcyBsYXllciwgdGhlbiB0cmFjayB0aGUgb3Bh
cXVlIHJlY3QgaW4gdGhhdCBsYXllci4KKyAgICBpZiAoIWNhbnZhc0xheWVyU3RhY2suaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gY2FudmFzTGF5ZXJTdGFjay5sYXN0KCkub3BhcXVlUmVjdDsK
KyAgICByZXR1cm4gcm9vdE9wYXF1ZVJlY3Q7Cit9CisKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
cHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqIHBhaW50KQogewogICAgIENhbnZhc0xheWVy
U3RhdGUgc3RhdGU7CkBAIC0xNTUsOSArMTgwLDE5IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
cHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgIG1fY2FudmFzTGF5ZXJT
dGFjay5hcHBlbmQoc3RhdGUpOwogfQogCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnBvcENhbnZh
c0xheWVyKCkKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2FudmFzTGF5ZXIoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCkKIHsKKyAgICBjb25zdCBDYW52YXNMYXllclN0YXRl
JiBjYW52YXNMYXllciA9IG1fY2FudmFzTGF5ZXJTdGFjay5sYXN0KCk7CisgICAgU2tSZWN0IGxh
eWVyT3BhcXVlUmVjdCA9IGNhbnZhc0xheWVyLm9wYXF1ZVJlY3Q7CisgICAgU2tQYWludCBsYXll
clBhaW50ID0gY2FudmFzTGF5ZXIucGFpbnQ7CisKKyAgICAvLyBBcHBseSB0aGUgaW1hZ2UgbWFz
ay4KKyAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFsYXllck9wYXF1ZVJlY3Qu
aW50ZXJzZWN0KGNhbnZhc0xheWVyLmltYWdlT3BhcXVlUmVjdCkpCisgICAgICAgIGxheWVyT3Bh
cXVlUmVjdC5zZXRFbXB0eSgpOworCiAgICAgbV9jYW52YXNMYXllclN0YWNrLnJlbW92ZUxhc3Qo
KTsKKworICAgIGFwcGx5T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnRleHQsIGxheWVyT3BhcXVl
UmVjdCwgbGF5ZXJQYWludCk7CiB9CiAKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6c2V0SW1hZ2VN
YXNrKGNvbnN0IFNrUmVjdCYgaW1hZ2VPcGFxdWVSZWN0KQpAQCAtMjU0LDY5ICsyODksNjUgQEAg
dm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEq
IGNvbnRleHQsIGNvbnN0IFNrUmVjdCYKICAgICBpZiAoIWNhbnZhc1RyYW5zZm9ybS5tYXBSZWN0
KCZ0YXJnZXRSZWN0KSkKICAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKIAotICAgIC8vIEFw
cGx5IHRoZSBjdXJyZW50IGNsaXAgaW4gZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYg
KGNvbnRleHQtPmNhbnZhcygpLT5nZXRDbGlwVHlwZSgpICE9IFNrQ2FudmFzOjprUmVjdF9DbGlw
VHlwZSkKKyAgICAvLyBBcHBseSB0aGUgY3VycmVudCBjbGlwLgorICAgIFNrUmVjdCBkZXZpY2VD
bGlwUmVjdDsKKyAgICBpZiAoIWdldERldmljZUNsaXBBc1JlY3QoY29udGV4dCwgZGV2aWNlQ2xp
cFJlY3QpKQogICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAg
ICBTa0lSZWN0IGRldmljZUNsaXA7Ci0gICAgICAgIGlmICghY29udGV4dC0+Y2FudmFzKCktPmdl
dENsaXBEZXZpY2VCb3VuZHMoJmRldmljZUNsaXApKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5m
TGVmdCksIFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mVG9wKSwgU2tJbnRUb1NjYWxhcihkZXZp
Y2VDbGlwLmZSaWdodCksIFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mQm90dG9tKSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5
cGUgPT0gRmlsbE9ubHk7Ci0gICAgYm9vbCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBhaW50SXNP
cGFxdWUocGFpbnQsIHNvdXJjZUJpdG1hcCwgY2hlY2tGaWxsT25seSk7Ci0KLSAgICBib29sIHhm
ZXJzT3BhcXVlID0geGZlcm1vZGVJc09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUp
OwotCi0gICAgLy8gQXBwbHkgdGhlIFNrQ2FudmFzIGxheWVycyB3ZSB3aWxsIGJlIGRyYXdpbmcg
dGhyb3VnaC4KLSAgICBmb3IgKHNpemVfdCBpID0gbV9jYW52YXNMYXllclN0YWNrLnNpemUoKTsg
aSA+IDA7IC0taSkgewotICAgICAgICBjb25zdCBDYW52YXNMYXllclN0YXRlJiBjYW52YXNMYXll
ciA9IG1fY2FudmFzTGF5ZXJTdGFja1tpLTFdOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBzdGlsbCB0cmFjayB0aGUgb3BhcXVlIHBhcnQgYnV0IGl0J3MgYWx3YXlzIGVtcHR5IHJpZ2h0
IG5vdyBhbnl3YXlzLgotICAgICAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFj
YW52YXNMYXllci5pbWFnZU9wYXF1ZVJlY3QuY29udGFpbnModGFyZ2V0UmVjdCkpCi0gICAgICAg
ICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwotCi0gICAgICAgIGJvb2wgY2hlY2tGaWxsT25seSA9
IGRyYXdUeXBlID09IEZpbGxPbmx5OwotICAgICAgICBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBh
aW50SXNPcGFxdWUoY2FudmFzTGF5ZXIucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAg
ICAvLyBJZiBhbnkgbGF5ZXIgZG9lc24ndCBwYWludCBvcGFxdWUsIHRoZW4gdGhlIHJlc3VsdCB3
aWxsIG5vdCBiZSBvcGFxdWUuCi0gICAgICAgIHhmZXJzT3BhcXVlICY9IHhmZXJtb2RlSXNPcGFx
dWUoY2FudmFzTGF5ZXIucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9CisgICAg
ZWxzZSBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KGRldmljZUNsaXBSZWN0KSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gUHJlc2VydmluZyBvcGFxdWUgb25seSBtYXR0ZXJzIGZvciB0aGUg
Ym90dG9tLW1vc3QgbGF5ZXIuIEl0cyBjb250ZW50cyBhcmUgZWl0aGVyIG9wYXF1ZSBvciBub3Qs
IGFuZCBpZiBub3QKLSAgICAvLyB0aGVuIHdlIGNhcmUgaWYgaXQgcHJlc2VydmVzIHRoZSBvcGFx
dWVuZXNzIG9mIHRoZSB0YXJnZXQgZGV2aWNlIHdoZW4gaXQgaXMgZHJhd24gaW50byB0aGUgZGV2
aWNlLgotICAgIGJvb2wgcHJlc2VydmVzT3BhcXVlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3Rh
Y2suaXNFbXB0eSgpKQotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZl
c09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotICAgIGVsc2UKLSAgICAgICAg
cHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUobV9jYW52YXNMYXllclN0
YWNrWzBdLnBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7CisgICAgYm9vbCBkcmF3c09wYXF1
ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIGRyYXdUeXBlLCBzb3VyY2VCaXRtYXApOworICAgIGJv
b2wgeGZlcnNPcGFxdWUgPSB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7Cisg
ICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwg
ZHJhd3NPcGFxdWUpOwogCiAgICAgaWYgKGZpbGxzQm91bmRzICYmIHhmZXJzT3BhcXVlKQogICAg
ICAgICBtYXJrUmVjdEFzT3BhcXVlKHRhcmdldFJlY3QpOwotICAgIGVsc2UgaWYgKFNrUmVjdDo6
SW50ZXJzZWN0cyh0YXJnZXRSZWN0LCBtX29wYXF1ZVJlY3QpICYmICFwcmVzZXJ2ZXNPcGFxdWUp
CisgICAgZWxzZSBpZiAoIXByZXNlcnZlc09wYXF1ZSkKICAgICAgICAgbWFya1JlY3RBc05vbk9w
YXF1ZSh0YXJnZXRSZWN0KTsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5i
b3VuZGVkKGNvbnN0IFNrUGFpbnQmIHBhaW50KQogewotICAgIC8vIFByZXNlcnZpbmcgb3BhcXVl
IG9ubHkgbWF0dGVycyBmb3IgdGhlIGJvdHRvbS1tb3N0IGxheWVyLiBJdHMgY29udGVudHMgYXJl
IGVpdGhlciBvcGFxdWUgb3Igbm90LCBhbmQgaWYgbm90Ci0gICAgLy8gdGhlbiB3ZSBjYXJlIGlm
IGl0IHByZXNlcnZlcyB0aGUgb3BhcXVlbmVzcyBvZiB0aGUgdGFyZ2V0IGRldmljZSB3aGVuIGl0
IGlzIGRyYXduIGludG8gdGhlIGRldmljZS4KLSAgICBib29sIHByZXNlcnZlc09wYXF1ZTsKLQot
ICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3Rh
Y2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgbGFzdExheWVyRHJhd3NPcGFxdWUgPSBwYWlu
dElzT3BhcXVlKHBhaW50LCAwLCBjaGVja0ZpbGxPbmx5KTsKLSAgICAgICAgcHJlc2VydmVzT3Bh
cXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVl
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBib29sIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFp
bnRJc09wYXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkp
OwotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShtX2Nh
bnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9Cisg
ICAgYm9vbCBkcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIEZpbGxPclN0cm9rZSwg
MCk7CisgICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShw
YWludCwgZHJhd3NPcGFxdWUpOwogCi0gICAgaWYgKCFwcmVzZXJ2ZXNPcGFxdWUpIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0IHdhcyBkcmF3biBvbiBzbyBqdXN0IGRlc3Ryb3kgdGhl
IGtub3duIG9wYXF1ZSBhcmVhLgotICAgICAgICBtX29wYXF1ZVJlY3QgPSBTa1JlY3Q6Ok1ha2VF
bXB0eSgpOwotICAgIH0KKyAgICBpZiAocHJlc2VydmVzT3BhcXVlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtYXJrQWxsQXNOb25PcGFxdWUoKTsKK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjphcHBseU9wYXF1ZVJlZ2lvbkZyb21MYXllcihjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBj
b250ZXh0LCBjb25zdCBTa1JlY3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYgcGFp
bnQpCit7CisgICAgU2tSZWN0IGRldmljZUNsaXBSZWN0OworICAgIGJvb2wgZGV2aWNlQ2xpcElz
QVJlY3QgPSBnZXREZXZpY2VDbGlwQXNSZWN0KGNvbnRleHQsIGRldmljZUNsaXBSZWN0KTsKKwor
ICAgIGlmIChkZXZpY2VDbGlwSXNBUmVjdCAmJiBkZXZpY2VDbGlwUmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFNrUmVjdCBzb3VyY2VPcGFxdWVSZWN0ID0gbGF5ZXJPcGFx
dWVSZWN0OworICAgIC8vIFNhdmUgdGhlIG9wYXF1ZSBhcmVhIGluIHRoZSBkZXN0aW5hdGlvbiwg
c28gd2UgY2FuIHByZXNlcnZlIHRoZSBwYXJ0cyBvZiBpdCB1bmRlciB0aGUgc291cmNlIG9wYXF1
ZSBhcmVhIGlmIHBvc3NpYmxlLgorICAgIFNrUmVjdCBkZXN0aW5hdGlvbk9wYXF1ZVJlY3QgPSBj
dXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNr
KTsKKworICAgIGJvb2wgb3V0c2lkZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4
ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgZmFsc2UpOworICAgIGlmICghb3V0c2lkZVNv
dXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFx
dWUoZGV2aWNlQ2xpcFJlY3QpOworCisgICAgaWYgKCFkZXZpY2VDbGlwSXNBUmVjdCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghc291cmNlT3BhcXVlUmVjdC5pbnRlcnNlY3QoZGV2aWNlQ2xp
cFJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3REcmF3
c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIEZpbGxPbmx5LCAwKTsKKyAgICBib29sIHNv
dXJjZU9wYXF1ZVJlY3RYZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIHNvdXJj
ZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSk7CisgICAgYm9vbCBzb3VyY2VPcGFxdWVSZWN0UHJlc2Vy
dmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJl
Y3REcmF3c09wYXF1ZSk7CisKKyAgICAvLyBJZiB0aGUgbGF5ZXIncyBvcGFxdWUgYXJlYSBpcyBi
ZWluZyBkcmF3biBvcGFxdWUgaW4gdGhlIGxheWVyIGJlbG93LCB0aGVuIG1hcmsgaXQgb3BhcXVl
LiBPdGhlcndpc2UsCisgICAgLy8gaWYgaXQgcHJlc2VydmVzIG9wYXF1ZSB0aGVuIGtlZXAgdGhl
IGludGVyc2VjdGlvbiBvZiB0aGUgdHdvLgorICAgIGlmIChzb3VyY2VPcGFxdWVSZWN0WGZlcnNP
cGFxdWUpCisgICAgICAgIG1hcmtSZWN0QXNPcGFxdWUoc291cmNlT3BhcXVlUmVjdCk7CisgICAg
ZWxzZSBpZiAoc291cmNlT3BhcXVlUmVjdFByZXNlcnZlc09wYXF1ZSAmJiBzb3VyY2VPcGFxdWVS
ZWN0LmludGVyc2VjdChkZXN0aW5hdGlvbk9wYXF1ZVJlY3QpKQorICAgICAgICBtYXJrUmVjdEFz
T3BhcXVlKHNvdXJjZU9wYXF1ZVJlY3QpOwogfQogCiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1h
cmtSZWN0QXNPcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQpAQCAtMzI2LDMxICszNTcsMzMgQEAg
dm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVj
dCkKICAgICAvLyByZWN0YW5nbGUgdGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVh
cGVzdCB3YXkgdG8gaW5jcmVhc2UgdGhlIGFyZWEgcmV0dXJuZWQKICAgICAvLyB3aXRob3V0IGlu
Y3JlYXNpbmcgdGhlIGNvbXBsZXhpdHkuCiAKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJy
ZW50VHJhY2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsK
KwogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX29w
YXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCisgICAgaWYgKG9wYXF1ZVJlY3QuY29udGFpbnMocmVj
dCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3Qp
KSB7Ci0gICAgICAgIG1fb3BhcXVlUmVjdCA9IHJlY3Q7CisgICAgaWYgKHJlY3QuY29udGFpbnMo
b3BhcXVlUmVjdCkpIHsKKyAgICAgICAgb3BhcXVlUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAocmVjdC5mVG9wIDw9IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJl
Y3QuZkJvdHRvbSA+PSBtX29wYXF1ZVJlY3QuZkJvdHRvbSkgewotICAgICAgICBpZiAocmVjdC5m
TGVmdCA8IG1fb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBtX29wYXF1ZVJlY3Qu
ZkxlZnQpCi0gICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OwotICAg
ICAgICBpZiAocmVjdC5mUmlnaHQgPiBtX29wYXF1ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxlZnQg
PD0gbV9vcGFxdWVSZWN0LmZSaWdodCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmlnaHQg
PSByZWN0LmZSaWdodDsKLSAgICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0
LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49IG1fb3BhcXVlUmVjdC5mUmlnaHQpIHsKLSAgICAgICAg
aWYgKHJlY3QuZlRvcCA8IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29w
YXF1ZVJlY3QuZlRvcCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mVG9wID0gcmVjdC5mVG9w
OwotICAgICAgICBpZiAocmVjdC5mQm90dG9tID4gbV9vcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVj
dC5mVG9wIDw9IG1fb3BhcXVlUmVjdC5mQm90dG9tKQotICAgICAgICAgICAgbV9vcGFxdWVSZWN0
LmZCb3R0b20gPSByZWN0LmZCb3R0b207CisgICAgaWYgKHJlY3QuZlRvcCA8PSBvcGFxdWVSZWN0
LmZUb3AgJiYgcmVjdC5mQm90dG9tID49IG9wYXF1ZVJlY3QuZkJvdHRvbSkgeworICAgICAgICBp
ZiAocmVjdC5mTGVmdCA8IG9wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gb3BhcXVl
UmVjdC5mTGVmdCkKKyAgICAgICAgICAgIG9wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0Owor
ICAgICAgICBpZiAocmVjdC5mUmlnaHQgPiBvcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0
IDw9IG9wYXF1ZVJlY3QuZlJpZ2h0KQorICAgICAgICAgICAgb3BhcXVlUmVjdC5mUmlnaHQgPSBy
ZWN0LmZSaWdodDsKKyAgICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gb3BhcXVlUmVjdC5mTGVm
dCAmJiByZWN0LmZSaWdodCA+PSBvcGFxdWVSZWN0LmZSaWdodCkgeworICAgICAgICBpZiAocmVj
dC5mVG9wIDwgb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBvcGFxdWVSZWN0LmZU
b3ApCisgICAgICAgICAgICBvcGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAgIGlm
IChyZWN0LmZCb3R0b20gPiBvcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG9wYXF1
ZVJlY3QuZkJvdHRvbSkKKyAgICAgICAgICAgIG9wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJv
dHRvbTsKICAgICB9CiAKLSAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1ZVJlY3Qu
d2lkdGgoKSAqIChsb25nKW1fb3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAgICBsb25nIG9wYXF1ZUFy
ZWEgPSAobG9uZylvcGFxdWVSZWN0LndpZHRoKCkgKiAobG9uZylvcGFxdWVSZWN0LmhlaWdodCgp
OwogICAgIGxvbmcgYXJlYSA9IChsb25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVpZ2h0
KCk7CiAgICAgaWYgKGFyZWEgPiBvcGFxdWVBcmVhKQotICAgICAgICBtX29wYXF1ZVJlY3QgPSBy
ZWN0OworICAgICAgICBvcGFxdWVSZWN0ID0gcmVjdDsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25T
a2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKQEAgLTM1OCwzNCAr
MzkxLDQzIEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShjb25z
dCBTa1JlY3QmIHJlY3QpCiAgICAgLy8gV2Ugd2FudCB0byBrZWVwIGFzIG11Y2ggb2YgdGhlIGN1
cnJlbnQgb3BhcXVlIHJlY3RhbmdsZSBhcyB3ZSBjYW4sIHNvIGZpbmQgdGhlIG9uZSBsYXJnZXN0
CiAgICAgLy8gcmVjdGFuZ2xlIGluc2lkZSBtX29wYXF1ZVJlY3QgdGhhdCBkb2VzIG5vdCBpbnRl
cnNlY3Qgd2l0aCB8cmVjdHwuCiAKLSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3Qp
KSB7Ci0gICAgICAgIG1fb3BhcXVlUmVjdC5zZXRFbXB0eSgpOworICAgIFNrUmVjdCYgb3BhcXVl
UmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2NhbnZhc0xh
eWVyU3RhY2spOworCisgICAgaWYgKCFTa1JlY3Q6OkludGVyc2VjdHMocmVjdCwgb3BhcXVlUmVj
dCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVjdC5jb250YWlucyhvcGFxdWVSZWN0KSkg
eworICAgICAgICBtYXJrQWxsQXNOb25PcGFxdWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGludCBkZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0Owot
ICAgIGludCBkZWx0YVJpZ2h0ID0gbV9vcGFxdWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0Owot
ICAgIGludCBkZWx0YVRvcCA9IHJlY3QuZlRvcCAtIG1fb3BhcXVlUmVjdC5mVG9wOwotICAgIGlu
dCBkZWx0YUJvdHRvbSA9IG1fb3BhcXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOworICAg
IGludCBkZWx0YUxlZnQgPSByZWN0LmZMZWZ0IC0gb3BhcXVlUmVjdC5mTGVmdDsKKyAgICBpbnQg
ZGVsdGFSaWdodCA9IG9wYXF1ZVJlY3QuZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7CisgICAgaW50IGRl
bHRhVG9wID0gcmVjdC5mVG9wIC0gb3BhcXVlUmVjdC5mVG9wOworICAgIGludCBkZWx0YUJvdHRv
bSA9IG9wYXF1ZVJlY3QuZkJvdHRvbSAtIHJlY3QuZkJvdHRvbTsKIAotICAgIC8vIGhvcml6b250
YWwgaXMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxlZnQgb3IgdG8g
dGhlIHJpZ2h0IG9mIHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KLSAgICAvLyB2ZXJ0
aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8
cmVjdHwgYW5kIGluc2lkZSBtX29wYXF1ZVJlY3QuCi0gICAgU2tSZWN0IGhvcml6b250YWwgPSBt
X29wYXF1ZVJlY3Q7CisgICAgLy8gaG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28g
cmVjdGFuZ2xlcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBpbnNp
ZGUgb3BhcXVlUmVjdC4KKyAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28g
cmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBvcGFxdWVSZWN0Lgor
ICAgIFNrUmVjdCBob3Jpem9udGFsID0gb3BhcXVlUmVjdDsKICAgICBpZiAoZGVsdGFUb3AgPiBk
ZWx0YUJvdHRvbSkKICAgICAgICAgaG9yaXpvbnRhbC5mQm90dG9tID0gcmVjdC5mVG9wOwogICAg
IGVsc2UKICAgICAgICAgaG9yaXpvbnRhbC5mVG9wID0gcmVjdC5mQm90dG9tOwotICAgIFNrUmVj
dCB2ZXJ0aWNhbCA9IG1fb3BhcXVlUmVjdDsKKyAgICBTa1JlY3QgdmVydGljYWwgPSBvcGFxdWVS
ZWN0OwogICAgIGlmIChkZWx0YUxlZnQgPiBkZWx0YVJpZ2h0KQogICAgICAgICB2ZXJ0aWNhbC5m
UmlnaHQgPSByZWN0LmZMZWZ0OwogICAgIGVsc2UKICAgICAgICAgdmVydGljYWwuZkxlZnQgPSBy
ZWN0LmZSaWdodDsKIAogICAgIGlmICgobG9uZylob3Jpem9udGFsLndpZHRoKCkgKiAobG9uZylo
b3Jpem9udGFsLmhlaWdodCgpID4gKGxvbmcpdmVydGljYWwud2lkdGgoKSAqIChsb25nKXZlcnRp
Y2FsLmhlaWdodCgpKQotICAgICAgICBtX29wYXF1ZVJlY3QgPSBob3Jpem9udGFsOworICAgICAg
ICBvcGFxdWVSZWN0ID0gaG9yaXpvbnRhbDsKICAgICBlbHNlCi0gICAgICAgIG1fb3BhcXVlUmVj
dCA9IHZlcnRpY2FsOworICAgICAgICBvcGFxdWVSZWN0ID0gdmVydGljYWw7CiB9CiAKK3ZvaWQg
T3BhcXVlUmVnaW9uU2tpYTo6bWFya0FsbEFzTm9uT3BhcXVlKCkKK3sKKyAgICBTa1JlY3QmIG9w
YXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52
YXNMYXllclN0YWNrKTsKKyAgICBvcGFxdWVSZWN0LnNldEVtcHR5KCk7Cit9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgKaW5kZXggODQ0MzZhM2M5YjYxNWIxY2MyZjBj
ZTIwN2I5YmFlNTViM2M3NTE5Yi4uYzU1OWYwMTE2NTNmMWUwYTc1YmViYTk0M2Q3MGUwOTJhMDc4
ZTkwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9P
cGFxdWVSZWdpb25Ta2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIElu
dFJlY3QgYXNSZWN0KCkgY29uc3Q7CiAKICAgICB2b2lkIHB1c2hDYW52YXNMYXllcihjb25zdCBT
a1BhaW50Kik7Ci0gICAgdm9pZCBwb3BDYW52YXNMYXllcigpOworICAgIHZvaWQgcG9wQ2FudmFz
TGF5ZXIoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSopOwogCiAgICAgdm9pZCBzZXRJbWFnZU1h
c2soY29uc3QgU2tSZWN0JiBpbWFnZU9wYXF1ZVJlY3QpOwogCkBAIC02MiwyMSArNjIsMTYgQEAg
cHVibGljOgogICAgIHZvaWQgZGlkRHJhd1BvaW50cyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lh
KiwgU2tDYW52YXM6OlBvaW50TW9kZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtdLCBj
b25zdCBTa1BhaW50Jik7CiAgICAgdm9pZCBkaWREcmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNv
bnRleHRTa2lhKiwgY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOwogCi1wcml2YXRlOgog
ICAgIGVudW0gRHJhd1R5cGUgewogICAgICAgICBGaWxsT25seSwKICAgICAgICAgRmlsbE9yU3Ry
b2tlCiAgICAgfTsKIAotICAgIHZvaWQgZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lh
KiwgY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiBzb3VyY2VC
aXRtYXAsIGJvb2wgZmlsbHNCb3VuZHMsIERyYXdUeXBlKTsKLSAgICB2b2lkIGRpZERyYXdVbmJv
dW5kZWQoY29uc3QgU2tQYWludCYpOwotICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShjb25zdCBT
a1JlY3QmKTsKLSAgICB2b2lkIG1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0Jik7Ci0K
LSAgICBTa1JlY3QgbV9vcGFxdWVSZWN0OwotCiAgICAgc3RydWN0IENhbnZhc0xheWVyU3RhdGUg
ewotICAgICAgICBDYW52YXNMYXllclN0YXRlKCkgOiBoYXNJbWFnZU1hc2soZmFsc2UpIHsgfQor
ICAgICAgICBDYW52YXNMYXllclN0YXRlKCkKKyAgICAgICAgICAgIDogaGFzSW1hZ2VNYXNrKGZh
bHNlKQorICAgICAgICAgICAgLCBvcGFxdWVSZWN0KFNrUmVjdDo6TWFrZUVtcHR5KCkpCisgICAg
ICAgIHsgfQogCiAgICAgICAgIFNrUGFpbnQgcGFpbnQ7CiAKQEAgLTg0LDggKzc5LDIwIEBAIHBy
aXZhdGU6CiAgICAgICAgIGJvb2wgaGFzSW1hZ2VNYXNrOwogICAgICAgICAvLyBUaGUgb3BhcXVl
IGFyZWEgaW4gdGhlIGltYWdlIG1hc2suCiAgICAgICAgIFNrUmVjdCBpbWFnZU9wYXF1ZVJlY3Q7
CisKKyAgICAgICAgU2tSZWN0IG9wYXF1ZVJlY3Q7CiAgICAgfTsKIAorcHJpdmF0ZToKKyAgICB2
b2lkIGRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYsIGNv
bnN0IFNrUGFpbnQmLCBjb25zdCBTa0JpdG1hcCogc291cmNlQml0bWFwLCBib29sIGZpbGxzQm91
bmRzLCBEcmF3VHlwZSk7CisgICAgdm9pZCBkaWREcmF3VW5ib3VuZGVkKGNvbnN0IFNrUGFpbnQm
KTsKKyAgICB2b2lkIGFwcGx5T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnN0IFBsYXRmb3JtQ29u
dGV4dFNraWEqLCBjb25zdCBTa1JlY3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYp
OworICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmKTsKKyAgICB2b2lkIG1h
cmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrQWxsQXNOb25P
cGFxdWUoKTsKKworICAgIFNrUmVjdCBtX29wYXF1ZVJlY3Q7CisKICAgICBWZWN0b3I8Q2FudmFz
TGF5ZXJTdGF0ZSwgMz4gbV9jYW52YXNMYXllclN0YWNrOwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5jcHAKaW5kZXggOWMwYWNkN2Y0YzQ3MThkYTI2MjhjNTFkZWQxY2MzM2M0YjA3ZjI2NC4u
YTM3MzA0MGRmNTY4NWM1NWJkM2ZkNzFmMzk1YzNiMjkzZjI5NWI4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpyZXN0b3JlTGF5ZXIoKQogewogICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CiAgICAgaWYgKG1f
dHJhY2tPcGFxdWVSZWdpb24pCi0gICAgICAgIG1fb3BhcXVlUmVnaW9uLnBvcENhbnZhc0xheWVy
KCk7CisgICAgICAgIG1fb3BhcXVlUmVnaW9uLnBvcENhbnZhc0xheWVyKHRoaXMpOwogfQogCiB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCmluZGV4IGRjNWUzMTk5MjE4ZDM4NDg1ZTc1
N2YyOTlmNzk0MDFiN2Y1YTM0YTIuLjM1N2IwN2YzY2VjMzk5N2IwNWIyN2RiOTViMzMxMWNlZGYy
ZTUyOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1D
b250ZXh0U2tpYVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxh
dGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSB7CiAK
ICNkZWZpbmUgRVhQRUNUX0VRX1JFQ1QoYSwgYikgXAogICAgIEVYUEVDVF9FUShhLngoKSwgYi54
KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEubWF4WCgpLCBiLm1heFgoKSk7IFwKICAgICBFWFBFQ1Rf
RVEoYS55KCksIGIueSgpKTsgXAotICAgIEVYUEVDVF9FUShhLm1heFkoKSwgYi5tYXhZKCkpOwor
ICAgIEVYUEVDVF9FUShhLndpZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5o
ZWlnaHQoKSwgYi5oZWlnaHQoKSk7CiAKICNkZWZpbmUgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRt
YXAsIG9wYXF1ZVJlY3QpIFwKIHsgXApAQCAtMjI2LDkgKzIyNiw4OCBAQCBURVNUKFBsYXRmb3Jt
Q29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUNsaXBUZXN0KQogICAgIGNvbnRleHQuc2F2ZSgp
OwogICAgIGNvbnRleHQuY2xpcFRvSW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgRmxvYXRS
ZWN0KDMwLCAzMCwgMTAsIDEwKSk7CiAgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAs
IDEwLCA5MCwgOTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJj
ZU92ZXIpOworICAgIGNvbnRleHQucmVzdG9yZSgpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKICAgICBFWFBF
Q1RfUElYRUxTX01BVENIKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFz
UmVjdCgpKTsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRl
eHRTa2lhVGVzdCwgdHJhY2tJbWFnZU1hc2spCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAg
IGJpdG1hcC5zZXRDb25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCA0MDAsIDQwMCk7
CisgICAgYml0bWFwLmFsbG9jUGl4ZWxzKCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7
CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUo
MS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4w
ZiwgMC4wZik7CisKKyAgICAvLyBJbWFnZSBtYXNrcyBhcmUgZG9uZSBieSBkcmF3aW5nIGEgYml0
bWFwIGludG8gYSB0cmFuc3BhcmVuY3kgbGF5ZXIgdGhhdCB1c2VzIERzdEluIHRvIG1hc2sKKyAg
ICAvLyBvdXQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgYmVsb3cgdGhhdCBpcyBmaWxsZWQgd2l0aCB0
aGUgbWFzayBjb2xvci4gSW4gdGhlIGVuZCB0aGlzIHNob3VsZAorICAgIC8vIG5vdCBiZSBtYXJr
ZWQgb3BhcXVlLgorCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
U291cmNlT3Zlcik7CisgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOworICAg
IGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMTAsIDEwKSwgb3BhcXVlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZURlc3RpbmF0aW9uSW4pOworICAgIGNvbnRleHQu
YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYWxw
aGFJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGFs
cGhhSW1hZ2UtPmNvbnRleHQoKS0+ZmlsbFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGFs
cGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQuZHJhd0ltYWdlQnVmZmVy
KGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdCgxMCwgMTAs
IDEwLCAxMCkpOworCisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGNv
bnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJl
Y3QoKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBF
Q1RfUElYRUxTX01BVENIX0VYQUNUKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lv
bigpLmFzUmVjdCgpKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tJ
bWFnZU1hc2tXaXRoT3BhcXVlUmVjdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0
bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDQwMCwgNDAwKTsKKyAg
ICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKwor
ICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBs
YXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBm
LCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAw
LjBmKTsKKworICAgIC8vIEltYWdlIG1hc2tzIGFyZSBkb25lIGJ5IGRyYXdpbmcgYSBiaXRtYXAg
aW50byBhIHRyYW5zcGFyZW5jeSBsYXllciB0aGF0IHVzZXMgRHN0SW4gdG8gbWFzaworICAgIC8v
IG91dCBhIHRyYW5zcGFyZW5jeSBsYXllciBiZWxvdyB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSBt
YXNrIGNvbG9yLiBJbiB0aGUgZW5kIHRoaXMgc2hvdWxkCisgICAgLy8gbm90IGJlIG1hcmtlZCBv
cGFxdWUuCisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CisgICAgY29u
dGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAxMCwgMTApLCBvcGFxdWUsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworCisgICAgY29udGV4dC5zZXRDb21w
b3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7CisgICAgY29udGV4dC5iZWdp
blRyYW5zcGFyZW5jeUxheWVyKDEpOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBhbHBoYUlt
YWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgYWxwaGFJ
bWFnZS0+Y29udGV4dCgpLT5maWxsUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgYWxwaGEs
IENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoYWxw
aGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxvYXRSZWN0KDEwLCAxMCwgMTAs
IDEwKSk7CisKKyAgICAvLyBXZSBjYW4ndCBoYXZlIGFuIG9wYXF1ZSBtYXNrIGFjdHVhbGx5LCBi
dXQgd2UgY2FuIHByZXRlbmQgaGVyZSBsaWtlIGl0IHdvdWxkIGxvb2sgaWYgd2UgZGlkLgorICAg
IGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEyLCAxMiwgMywgMyksIG9wYXF1ZSwgQ29sb3JT
cGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7CisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwor
CisgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgxMiwgMTIsIDMsIDMpLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0hfRVhB
Q1QoYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwogfQog
CiBURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUpvaW5UZXN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138414</attachid>
            <date>2012-04-23 13:33:35 -0700</date>
            <delta_ts>2012-04-23 13:35:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84275-20120423133334.patch</filename>
            <type>text/plain</type>
            <size>23665</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0OTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTRkMGI5MTc2YTg0YzBl
YzcxYTM0NTgxMGM1MGNhYThiZGQ0NzI2MC4uOTQxOGJkMTY0MWU3NTQwMzQ0MDc2ZDFjN2Y4ZDMz
NmI0YTY2Y2E2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
dHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVjdAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNP
cGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6YXBwbHlPcGFxdWVS
ZWdpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cHVz
aENhbnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnBvcENh
bnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6
T3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oOgorICAgICAgICAoT3BhcXVlUmVn
aW9uU2tpYSk6CisgICAgICAgIChDYW52YXNMYXllclN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVyKToKKwogMjAxMi0wNC0yMyAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjExNDkyOS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
Y2YyNDVkOGZkYWI0ZWEyODRiYzI1NDQ3OGExZjk2MTQ5MWQyYWI2ZC4uMTJkYWU1ZGE2MGM2ZjU1
ZTNmMzFmZDM2MWRjMGI0NjQ4YjUwYWY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMi0wNC0xOCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltYWdlIG1hc2tzIGFyZSBjb25zaWRlcmVkIG9w
YXF1ZSBpbmNvcnJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODQyNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHRlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDQtMjMgIElhbiBWb2xs
aWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBQcm9wZXJs
eSBpZ25vcmUgdW5zdXBwb3J0ZWQgYW5pbWF0aW9uIGRpcmVjdGlvbnMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lh
LmNwcAppbmRleCA2NTkzNmNjM2EzNTA3NjE5OGVlYzc1ZGEyZWU2ZWE4MzBlMjcyOWZhLi43ZTBk
Y2VhMzc2Yjc3MjA1M2MxYTcxNDk1ZjQ1NTM5MTIzYzIzYTkyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5j
cHAKQEAgLTEyNCwxMCArMTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNl
cnZlc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBzcmNJc09wYXF1CiB9CiAKIC8v
IFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBhaW50ZWQgd2lsbCBiZSBvcGFxdWUuCi1zdGF0
aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3Qg
U2tCaXRtYXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlKQorc3RhdGlj
IGlubGluZSBib29sIHBhaW50SXNPcGFxdWUoY29uc3QgU2tQYWludCYgcGFpbnQsIE9wYXF1ZVJl
Z2lvblNraWE6OkRyYXdUeXBlIGRyYXdUeXBlLCBjb25zdCBTa0JpdG1hcCogYml0bWFwKQogewog
ICAgIGlmIChwYWludC5nZXRBbHBoYSgpIDwgMHhGRikKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGRyYXdUeXBlICE9IE9wYXF1ZVJlZ2lvblNraWE6OkZp
bGxPclN0cm9rZTsKICAgICBpZiAoIWNoZWNrRmlsbE9ubHkgJiYgcGFpbnQuZ2V0U3R5bGUoKSAh
PSBTa1BhaW50OjprRmlsbF9TdHlsZSAmJiBwYWludC5pc0FudGlBbGlhcygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgU2tTaGFkZXIqIHNoYWRlciA9IHBhaW50LmdldFNoYWRlcigpOwpA
QCAtMTQ3LDYgKzE0OCwyOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25z
dCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHJlY3Rhbmd1bGFyIGNsaXAs
IHdpdGggdGhlIHJlc3VsdCBpbiB8ZGV2aWNlQ2xpcFJlY3R8Lgorc3RhdGljIGlubGluZSBib29s
IGdldERldmljZUNsaXBBc1JlY3QoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwg
U2tSZWN0JiBkZXZpY2VDbGlwUmVjdCkKK3sKKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgY2xpcCBp
biBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICBTa0lSZWN0IGRldmljZUNsaXBJUmVjdDsK
KyAgICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBEZXZpY2VCb3VuZHMoJmRldmljZUNs
aXBJUmVjdCkpCisgICAgICAgIGRldmljZUNsaXBSZWN0LnNldChkZXZpY2VDbGlwSVJlY3QpOwor
ICAgIGVsc2UKKyAgICAgICAgZGV2aWNlQ2xpcFJlY3Quc2V0RW1wdHkoKTsKKworICAgIGJvb2wg
aXNBUmVjdCA9IGNvbnRleHQtPmNhbnZhcygpLT5nZXRDbGlwVHlwZSgpID09IFNrQ2FudmFzOjpr
UmVjdF9DbGlwVHlwZTsKKyAgICByZXR1cm4gaXNBUmVjdDsKK30KKworc3RhdGljIGlubGluZSBT
a1JlY3QmIGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QoU2tSZWN0JiByb290T3BhcXVlUmVjdCwg
VmVjdG9yPE9wYXF1ZVJlZ2lvblNraWE6OkNhbnZhc0xheWVyU3RhdGUsIDM+JiBjYW52YXNMYXll
clN0YWNrKQoreworICAgIC8vIElmIHdlIGFyZSBkcmF3aW5nIGludG8gYSBjYW52YXMgbGF5ZXIs
IHRoZW4gdHJhY2sgdGhlIG9wYXF1ZSByZWN0IGluIHRoYXQgbGF5ZXIuCisgICAgaWYgKCFjYW52
YXNMYXllclN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGNhbnZhc0xheWVyU3RhY2su
bGFzdCgpLm9wYXF1ZVJlY3Q7CisgICAgcmV0dXJuIHJvb3RPcGFxdWVSZWN0OworfQorCiB2b2lk
IE9wYXF1ZVJlZ2lvblNraWE6OnB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50KiBwYWludCkK
IHsKICAgICBDYW52YXNMYXllclN0YXRlIHN0YXRlOwpAQCAtMTU1LDkgKzE3OCwxOSBAQCB2b2lk
IE9wYXF1ZVJlZ2lvblNraWE6OnB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50KiBwYWludCkK
ICAgICBtX2NhbnZhc0xheWVyU3RhY2suYXBwZW5kKHN0YXRlKTsKIH0KIAotdm9pZCBPcGFxdWVS
ZWdpb25Ta2lhOjpwb3BDYW52YXNMYXllcigpCit2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnBvcENh
bnZhc0xheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQpCiB7CisgICAgY29u
c3QgQ2FudmFzTGF5ZXJTdGF0ZSYgY2FudmFzTGF5ZXIgPSBtX2NhbnZhc0xheWVyU3RhY2subGFz
dCgpOworICAgIFNrUmVjdCBsYXllck9wYXF1ZVJlY3QgPSBjYW52YXNMYXllci5vcGFxdWVSZWN0
OworICAgIFNrUGFpbnQgbGF5ZXJQYWludCA9IGNhbnZhc0xheWVyLnBhaW50OworCisgICAgLy8g
QXBwbHkgdGhlIGltYWdlIG1hc2suCisgICAgaWYgKGNhbnZhc0xheWVyLmhhc0ltYWdlTWFzayAm
JiAhbGF5ZXJPcGFxdWVSZWN0LmludGVyc2VjdChjYW52YXNMYXllci5pbWFnZU9wYXF1ZVJlY3Qp
KQorICAgICAgICBsYXllck9wYXF1ZVJlY3Quc2V0RW1wdHkoKTsKKwogICAgIG1fY2FudmFzTGF5
ZXJTdGFjay5yZW1vdmVMYXN0KCk7CisKKyAgICBhcHBseU9wYXF1ZVJlZ2lvbkZyb21MYXllcihj
b250ZXh0LCBsYXllck9wYXF1ZVJlY3QsIGxheWVyUGFpbnQpOwogfQogCiB2b2lkIE9wYXF1ZVJl
Z2lvblNraWE6OnNldEltYWdlTWFzayhjb25zdCBTa1JlY3QmIGltYWdlT3BhcXVlUmVjdCkKQEAg
LTI1NCw2OSArMjg3LDY1IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyhjb25zdCBQ
bGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1JlY3QmCiAgICAgaWYgKCFjYW52
YXNUcmFuc2Zvcm0ubWFwUmVjdCgmdGFyZ2V0UmVjdCkpCiAgICAgICAgIGZpbGxzQm91bmRzID0g
ZmFsc2U7CiAKLSAgICAvLyBBcHBseSB0aGUgY3VycmVudCBjbGlwIGluIGRldmljZSBjb29yZGlu
YXRlIHNwYWNlLgotICAgIGlmIChjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xpcFR5cGUoKSAhPSBT
a0NhbnZhczo6a1JlY3RfQ2xpcFR5cGUpCisgICAgLy8gQXBwbHkgdGhlIGN1cnJlbnQgY2xpcC4K
KyAgICBTa1JlY3QgZGV2aWNlQ2xpcFJlY3Q7CisgICAgaWYgKCFnZXREZXZpY2VDbGlwQXNSZWN0
KGNvbnRleHQsIGRldmljZUNsaXBSZWN0KSkKICAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsK
LSAgICBlbHNlIHsKLSAgICAgICAgU2tJUmVjdCBkZXZpY2VDbGlwOwotICAgICAgICBpZiAoIWNv
bnRleHQtPmNhbnZhcygpLT5nZXRDbGlwRGV2aWNlQm91bmRzKCZkZXZpY2VDbGlwKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKCF0YXJnZXRSZWN0LmludGVyc2VjdChTa0ludFRv
U2NhbGFyKGRldmljZUNsaXAuZkxlZnQpLCBTa0ludFRvU2NhbGFyKGRldmljZUNsaXAuZlRvcCks
IFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mUmlnaHQpLCBTa0ludFRvU2NhbGFyKGRldmljZUNs
aXAuZkJvdHRvbSkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJvb2wgY2hl
Y2tGaWxsT25seSA9IGRyYXdUeXBlID09IEZpbGxPbmx5OwotICAgIGJvb2wgbGFzdExheWVyRHJh
d3NPcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50LCBzb3VyY2VCaXRtYXAsIGNoZWNrRmlsbE9u
bHkpOwotCi0gICAgYm9vbCB4ZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIGxh
c3RMYXllckRyYXdzT3BhcXVlKTsKLQotICAgIC8vIEFwcGx5IHRoZSBTa0NhbnZhcyBsYXllcnMg
d2Ugd2lsbCBiZSBkcmF3aW5nIHRocm91Z2guCi0gICAgZm9yIChzaXplX3QgaSA9IG1fY2FudmFz
TGF5ZXJTdGFjay5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgQ2FudmFzTGF5
ZXJTdGF0ZSYgY2FudmFzTGF5ZXIgPSBtX2NhbnZhc0xheWVyU3RhY2tbaS0xXTsKLQotICAgICAg
ICAvLyBGSVhNRTogV2UgY291bGQgc3RpbGwgdHJhY2sgdGhlIG9wYXF1ZSBwYXJ0IGJ1dCBpdCdz
IGFsd2F5cyBlbXB0eSByaWdodCBub3cgYW55d2F5cy4KLSAgICAgICAgaWYgKGNhbnZhc0xheWVy
Lmhhc0ltYWdlTWFzayAmJiAhY2FudmFzTGF5ZXIuaW1hZ2VPcGFxdWVSZWN0LmNvbnRhaW5zKHRh
cmdldFJlY3QpKQotICAgICAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKLQotICAgICAgICBi
b29sIGNoZWNrRmlsbE9ubHkgPSBkcmF3VHlwZSA9PSBGaWxsT25seTsKLSAgICAgICAgbGFzdExh
eWVyRHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKGNhbnZhc0xheWVyLnBhaW50LCAwLCBjaGVj
a0ZpbGxPbmx5KTsKLSAgICAgICAgLy8gSWYgYW55IGxheWVyIGRvZXNuJ3QgcGFpbnQgb3BhcXVl
LCB0aGVuIHRoZSByZXN1bHQgd2lsbCBub3QgYmUgb3BhcXVlLgotICAgICAgICB4ZmVyc09wYXF1
ZSAmPSB4ZmVybW9kZUlzT3BhcXVlKGNhbnZhc0xheWVyLnBhaW50LCBsYXN0TGF5ZXJEcmF3c09w
YXF1ZSk7Ci0gICAgfQorICAgIGlmICghdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGV2aWNlQ2xpcFJl
Y3QpKQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyBQcmVzZXJ2aW5nIG9wYXF1ZSBvbmx5IG1h
dHRlcnMgZm9yIHRoZSBib3R0b20tbW9zdCBsYXllci4gSXRzIGNvbnRlbnRzIGFyZSBlaXRoZXIg
b3BhcXVlIG9yIG5vdCwgYW5kIGlmIG5vdAotICAgIC8vIHRoZW4gd2UgY2FyZSBpZiBpdCBwcmVz
ZXJ2ZXMgdGhlIG9wYXF1ZW5lc3Mgb2YgdGhlIHRhcmdldCBkZXZpY2Ugd2hlbiBpdCBpcyBkcmF3
biBpbnRvIHRoZSBkZXZpY2UuCi0gICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWU7Ci0gICAgaWYgKG1f
Y2FudmFzTGF5ZXJTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHByZXNlcnZlc09wYXF1ZSA9IHhm
ZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7Ci0gICAg
ZWxzZQotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZSht
X2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKKyAgICBi
b29sIGRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgZHJhd1R5cGUsIHNvdXJjZUJp
dG1hcCk7CisgICAgYm9vbCB4ZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIGRy
YXdzT3BhcXVlKTsKKyAgICBib29sIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2VydmVz
T3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7CiAKICAgICBpZiAoZmlsbHNCb3VuZHMgJiYgeGZl
cnNPcGFxdWUpCiAgICAgICAgIG1hcmtSZWN0QXNPcGFxdWUodGFyZ2V0UmVjdCk7Ci0gICAgZWxz
ZSBpZiAoU2tSZWN0OjpJbnRlcnNlY3RzKHRhcmdldFJlY3QsIG1fb3BhcXVlUmVjdCkgJiYgIXBy
ZXNlcnZlc09wYXF1ZSkKKyAgICBlbHNlIGlmICghcHJlc2VydmVzT3BhcXVlKQogICAgICAgICBt
YXJrUmVjdEFzTm9uT3BhcXVlKHRhcmdldFJlY3QpOwogfQogCiB2b2lkIE9wYXF1ZVJlZ2lvblNr
aWE6OmRpZERyYXdVbmJvdW5kZWQoY29uc3QgU2tQYWludCYgcGFpbnQpCiB7Ci0gICAgLy8gUHJl
c2VydmluZyBvcGFxdWUgb25seSBtYXR0ZXJzIGZvciB0aGUgYm90dG9tLW1vc3QgbGF5ZXIuIEl0
cyBjb250ZW50cyBhcmUgZWl0aGVyIG9wYXF1ZSBvciBub3QsIGFuZCBpZiBub3QKLSAgICAvLyB0
aGVuIHdlIGNhcmUgaWYgaXQgcHJlc2VydmVzIHRoZSBvcGFxdWVuZXNzIG9mIHRoZSB0YXJnZXQg
ZGV2aWNlIHdoZW4gaXQgaXMgZHJhd24gaW50byB0aGUgZGV2aWNlLgotICAgIGJvb2wgcHJlc2Vy
dmVzT3BhcXVlOwotCi0gICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZmFsc2U7Ci0gICAgaWYgKG1f
Y2FudmFzTGF5ZXJTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgYm9vbCBsYXN0TGF5ZXJEcmF3
c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAg
ICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgbGFzdExh
eWVyRHJhd3NPcGFxdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJvb2wgbGFzdExheWVyRHJh
d3NPcGFxdWUgPSBwYWludElzT3BhcXVlKG1fY2FudmFzTGF5ZXJTdGFja1swXS5wYWludCwgMCwg
Y2hlY2tGaWxsT25seSk7Ci0gICAgICAgIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2Vy
dmVzT3BhcXVlKG1fY2FudmFzTGF5ZXJTdGFja1swXS5wYWludCwgbGFzdExheWVyRHJhd3NPcGFx
dWUpOwotICAgIH0KKyAgICBib29sIGRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwg
RmlsbE9yU3Ryb2tlLCAwKTsKKyAgICBib29sIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJl
c2VydmVzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7CiAKLSAgICBpZiAoIXByZXNlcnZlc09w
YXF1ZSkgewotICAgICAgICAvLyBXZSBkb24ndCBrbm93IHdoYXQgd2FzIGRyYXduIG9uIHNvIGp1
c3QgZGVzdHJveSB0aGUga25vd24gb3BhcXVlIGFyZWEuCi0gICAgICAgIG1fb3BhcXVlUmVjdCA9
IFNrUmVjdDo6TWFrZUVtcHR5KCk7Ci0gICAgfQorICAgIGlmIChwcmVzZXJ2ZXNPcGFxdWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1hcmtBbGxBc05vbk9wYXF1ZSgpOworfQorCit2b2lkIE9w
YXF1ZVJlZ2lvblNraWE6OmFwcGx5T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnN0IFBsYXRmb3Jt
Q29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUmVjdCYgbGF5ZXJPcGFxdWVSZWN0LCBjb25z
dCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBTa1JlY3QgZGV2aWNlQ2xpcFJlY3Q7CisgICAgYm9v
bCBkZXZpY2VDbGlwSXNBUmVjdCA9IGdldERldmljZUNsaXBBc1JlY3QoY29udGV4dCwgZGV2aWNl
Q2xpcFJlY3QpOworCisgICAgaWYgKGRldmljZUNsaXBJc0FSZWN0ICYmIGRldmljZUNsaXBSZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2tSZWN0IHNvdXJjZU9wYXF1ZVJl
Y3QgPSBsYXllck9wYXF1ZVJlY3Q7CisgICAgLy8gU2F2ZSB0aGUgb3BhcXVlIGFyZWEgaW4gdGhl
IGRlc3RpbmF0aW9uLCBzbyB3ZSBjYW4gcHJlc2VydmUgdGhlIHBhcnRzIG9mIGl0IHVuZGVyIHRo
ZSBzb3VyY2Ugb3BhcXVlIGFyZWEgaWYgcG9zc2libGUuCisgICAgU2tSZWN0IGRlc3RpbmF0aW9u
T3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2Nh
bnZhc0xheWVyU3RhY2spOworCisgICAgYm9vbCBvdXRzaWRlU291cmNlT3BhcXVlUmVjdFByZXNl
cnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50LCBmYWxzZSk7CisgICAg
aWYgKCFvdXRzaWRlU291cmNlT3BhcXVlUmVjdFByZXNlcnZlc09wYXF1ZSkKKyAgICAgICAgbWFy
a1JlY3RBc05vbk9wYXF1ZShkZXZpY2VDbGlwUmVjdCk7CisKKyAgICBpZiAoIWRldmljZUNsaXBJ
c0FSZWN0KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFzb3VyY2VPcGFxdWVSZWN0LmludGVy
c2VjdChkZXZpY2VDbGlwUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgc291cmNl
T3BhcXVlUmVjdERyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgRmlsbE9ubHksIDAp
OworICAgIGJvb2wgc291cmNlT3BhcXVlUmVjdFhmZXJzT3BhcXVlID0geGZlcm1vZGVJc09wYXF1
ZShwYWludCwgc291cmNlT3BhcXVlUmVjdERyYXdzT3BhcXVlKTsKKyAgICBib29sIHNvdXJjZU9w
YXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwg
c291cmNlT3BhcXVlUmVjdERyYXdzT3BhcXVlKTsKKworICAgIC8vIElmIHRoZSBsYXllcidzIG9w
YXF1ZSBhcmVhIGlzIGJlaW5nIGRyYXduIG9wYXF1ZSBpbiB0aGUgbGF5ZXIgYmVsb3csIHRoZW4g
bWFyayBpdCBvcGFxdWUuIE90aGVyd2lzZSwKKyAgICAvLyBpZiBpdCBwcmVzZXJ2ZXMgb3BhcXVl
IHRoZW4ga2VlcCB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSB0d28uCisgICAgaWYgKHNvdXJjZU9w
YXF1ZVJlY3RYZmVyc09wYXF1ZSkKKyAgICAgICAgbWFya1JlY3RBc09wYXF1ZShzb3VyY2VPcGFx
dWVSZWN0KTsKKyAgICBlbHNlIGlmIChzb3VyY2VPcGFxdWVSZWN0UHJlc2VydmVzT3BhcXVlICYm
IHNvdXJjZU9wYXF1ZVJlY3QuaW50ZXJzZWN0KGRlc3RpbmF0aW9uT3BhcXVlUmVjdCkpCisgICAg
ICAgIG1hcmtSZWN0QXNPcGFxdWUoc291cmNlT3BhcXVlUmVjdCk7CiB9CiAKIHZvaWQgT3BhcXVl
UmVnaW9uU2tpYTo6bWFya1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCkBAIC0zMjYs
MzEgKzM1NSwzMyBAQCB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUoY29u
c3QgU2tSZWN0JiByZWN0KQogICAgIC8vIHJlY3RhbmdsZSB0aGVuIHdlIGRvIHRoYXQsIGFzIHRo
YXQgaXMgdGhlIGNoZWFwZXN0IHdheSB0byBpbmNyZWFzZSB0aGUgYXJlYSByZXR1cm5lZAogICAg
IC8vIHdpdGhvdXQgaW5jcmVhc2luZyB0aGUgY29tcGxleGl0eS4KIAorICAgIFNrUmVjdCYgb3Bh
cXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2NhbnZh
c0xheWVyU3RhY2spOworCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKG1fb3BhcXVlUmVjdC5jb250YWlucyhyZWN0KSkKKyAgICBpZiAob3BhcXVlUmVj
dC5jb250YWlucyhyZWN0KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChyZWN0LmNvbnRhaW5z
KG1fb3BhcXVlUmVjdCkpIHsKLSAgICAgICAgbV9vcGFxdWVSZWN0ID0gcmVjdDsKKyAgICBpZiAo
cmVjdC5jb250YWlucyhvcGFxdWVSZWN0KSkgeworICAgICAgICBvcGFxdWVSZWN0ID0gcmVjdDsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZWN0LmZUb3AgPD0gbV9vcGFxdWVS
ZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID49IG1fb3BhcXVlUmVjdC5mQm90dG9tKSB7Ci0gICAg
ICAgIGlmIChyZWN0LmZMZWZ0IDwgbV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49
IG1fb3BhcXVlUmVjdC5mTGVmdCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mTGVmdCA9IHJl
Y3QuZkxlZnQ7Ci0gICAgICAgIGlmIChyZWN0LmZSaWdodCA+IG1fb3BhcXVlUmVjdC5mUmlnaHQg
JiYgcmVjdC5mTGVmdCA8PSBtX29wYXF1ZVJlY3QuZlJpZ2h0KQotICAgICAgICAgICAgbV9vcGFx
dWVSZWN0LmZSaWdodCA9IHJlY3QuZlJpZ2h0OwotICAgIH0gZWxzZSBpZiAocmVjdC5mTGVmdCA8
PSBtX29wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gbV9vcGFxdWVSZWN0LmZSaWdo
dCkgewotICAgICAgICBpZiAocmVjdC5mVG9wIDwgbV9vcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5m
Qm90dG9tID49IG1fb3BhcXVlUmVjdC5mVG9wKQotICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZU
b3AgPSByZWN0LmZUb3A7Ci0gICAgICAgIGlmIChyZWN0LmZCb3R0b20gPiBtX29wYXF1ZVJlY3Qu
ZkJvdHRvbSAmJiByZWN0LmZUb3AgPD0gbV9vcGFxdWVSZWN0LmZCb3R0b20pCi0gICAgICAgICAg
ICBtX29wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJvdHRvbTsKKyAgICBpZiAocmVjdC5mVG9w
IDw9IG9wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0b20gPj0gb3BhcXVlUmVjdC5mQm90dG9t
KSB7CisgICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZS
aWdodCA+PSBvcGFxdWVSZWN0LmZMZWZ0KQorICAgICAgICAgICAgb3BhcXVlUmVjdC5mTGVmdCA9
IHJlY3QuZkxlZnQ7CisgICAgICAgIGlmIChyZWN0LmZSaWdodCA+IG9wYXF1ZVJlY3QuZlJpZ2h0
ICYmIHJlY3QuZkxlZnQgPD0gb3BhcXVlUmVjdC5mUmlnaHQpCisgICAgICAgICAgICBvcGFxdWVS
ZWN0LmZSaWdodCA9IHJlY3QuZlJpZ2h0OworICAgIH0gZWxzZSBpZiAocmVjdC5mTGVmdCA8PSBv
cGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49IG9wYXF1ZVJlY3QuZlJpZ2h0KSB7Cisg
ICAgICAgIGlmIChyZWN0LmZUb3AgPCBvcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID49
IG9wYXF1ZVJlY3QuZlRvcCkKKyAgICAgICAgICAgIG9wYXF1ZVJlY3QuZlRvcCA9IHJlY3QuZlRv
cDsKKyAgICAgICAgaWYgKHJlY3QuZkJvdHRvbSA+IG9wYXF1ZVJlY3QuZkJvdHRvbSAmJiByZWN0
LmZUb3AgPD0gb3BhcXVlUmVjdC5mQm90dG9tKQorICAgICAgICAgICAgb3BhcXVlUmVjdC5mQm90
dG9tID0gcmVjdC5mQm90dG9tOwogICAgIH0KIAotICAgIGxvbmcgb3BhcXVlQXJlYSA9IChsb25n
KW1fb3BhcXVlUmVjdC53aWR0aCgpICogKGxvbmcpbV9vcGFxdWVSZWN0LmhlaWdodCgpOworICAg
IGxvbmcgb3BhcXVlQXJlYSA9IChsb25nKW9wYXF1ZVJlY3Qud2lkdGgoKSAqIChsb25nKW9wYXF1
ZVJlY3QuaGVpZ2h0KCk7CiAgICAgbG9uZyBhcmVhID0gKGxvbmcpcmVjdC53aWR0aCgpICogKGxv
bmcpcmVjdC5oZWlnaHQoKTsKICAgICBpZiAoYXJlYSA+IG9wYXF1ZUFyZWEpCi0gICAgICAgIG1f
b3BhcXVlUmVjdCA9IHJlY3Q7CisgICAgICAgIG9wYXF1ZVJlY3QgPSByZWN0OwogfQogCiB2b2lk
IE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0
KQpAQCAtMzU4LDM0ICszODksNDMgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFz
Tm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKICAgICAvLyBXZSB3YW50IHRvIGtlZXAgYXMg
bXVjaCBvZiB0aGUgY3VycmVudCBvcGFxdWUgcmVjdGFuZ2xlIGFzIHdlIGNhbiwgc28gZmluZCB0
aGUgb25lIGxhcmdlc3QKICAgICAvLyByZWN0YW5nbGUgaW5zaWRlIG1fb3BhcXVlUmVjdCB0aGF0
IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHxyZWN0fC4KIAotICAgIGlmIChyZWN0LmNvbnRhaW5z
KG1fb3BhcXVlUmVjdCkpIHsKLSAgICAgICAgbV9vcGFxdWVSZWN0LnNldEVtcHR5KCk7CisgICAg
U2tSZWN0JiBvcGFxdWVSZWN0ID0gY3VycmVudFRyYWNraW5nT3BhcXVlUmVjdChtX29wYXF1ZVJl
Y3QsIG1fY2FudmFzTGF5ZXJTdGFjayk7CisKKyAgICBpZiAoIVNrUmVjdDo6SW50ZXJzZWN0cyhy
ZWN0LCBvcGFxdWVSZWN0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChyZWN0LmNvbnRhaW5z
KG9wYXF1ZVJlY3QpKSB7CisgICAgICAgIG1hcmtBbGxBc05vbk9wYXF1ZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaW50IGRlbHRhTGVmdCA9IHJlY3QuZkxlZnQgLSBtX29wYXF1
ZVJlY3QuZkxlZnQ7Ci0gICAgaW50IGRlbHRhUmlnaHQgPSBtX29wYXF1ZVJlY3QuZlJpZ2h0IC0g
cmVjdC5mUmlnaHQ7Ci0gICAgaW50IGRlbHRhVG9wID0gcmVjdC5mVG9wIC0gbV9vcGFxdWVSZWN0
LmZUb3A7Ci0gICAgaW50IGRlbHRhQm90dG9tID0gbV9vcGFxdWVSZWN0LmZCb3R0b20gLSByZWN0
LmZCb3R0b207CisgICAgaW50IGRlbHRhTGVmdCA9IHJlY3QuZkxlZnQgLSBvcGFxdWVSZWN0LmZM
ZWZ0OworICAgIGludCBkZWx0YVJpZ2h0ID0gb3BhcXVlUmVjdC5mUmlnaHQgLSByZWN0LmZSaWdo
dDsKKyAgICBpbnQgZGVsdGFUb3AgPSByZWN0LmZUb3AgLSBvcGFxdWVSZWN0LmZUb3A7CisgICAg
aW50IGRlbHRhQm90dG9tID0gb3BhcXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOwogCi0g
ICAgLy8gaG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0
aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBpbnNpZGUgbV9vcGFxdWVSZWN0
LgotICAgIC8vIHZlcnRpY2FsIGlzIHRoZSBsYXJnZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIGFi
b3ZlIG9yIGJlbG93IHxyZWN0fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KLSAgICBTa1JlY3Qg
aG9yaXpvbnRhbCA9IG1fb3BhcXVlUmVjdDsKKyAgICAvLyBob3Jpem9udGFsIGlzIHRoZSBsYXJn
ZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIHRvIHRoZSBsZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB8
cmVjdHwgYW5kIGluc2lkZSBvcGFxdWVSZWN0LgorICAgIC8vIHZlcnRpY2FsIGlzIHRoZSBsYXJn
ZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIGFib3ZlIG9yIGJlbG93IHxyZWN0fCBhbmQgaW5zaWRl
IG9wYXF1ZVJlY3QuCisgICAgU2tSZWN0IGhvcml6b250YWwgPSBvcGFxdWVSZWN0OwogICAgIGlm
IChkZWx0YVRvcCA+IGRlbHRhQm90dG9tKQogICAgICAgICBob3Jpem9udGFsLmZCb3R0b20gPSBy
ZWN0LmZUb3A7CiAgICAgZWxzZQogICAgICAgICBob3Jpem9udGFsLmZUb3AgPSByZWN0LmZCb3R0
b207Ci0gICAgU2tSZWN0IHZlcnRpY2FsID0gbV9vcGFxdWVSZWN0OworICAgIFNrUmVjdCB2ZXJ0
aWNhbCA9IG9wYXF1ZVJlY3Q7CiAgICAgaWYgKGRlbHRhTGVmdCA+IGRlbHRhUmlnaHQpCiAgICAg
ICAgIHZlcnRpY2FsLmZSaWdodCA9IHJlY3QuZkxlZnQ7CiAgICAgZWxzZQogICAgICAgICB2ZXJ0
aWNhbC5mTGVmdCA9IHJlY3QuZlJpZ2h0OwogCiAgICAgaWYgKChsb25nKWhvcml6b250YWwud2lk
dGgoKSAqIChsb25nKWhvcml6b250YWwuaGVpZ2h0KCkgPiAobG9uZyl2ZXJ0aWNhbC53aWR0aCgp
ICogKGxvbmcpdmVydGljYWwuaGVpZ2h0KCkpCi0gICAgICAgIG1fb3BhcXVlUmVjdCA9IGhvcml6
b250YWw7CisgICAgICAgIG9wYXF1ZVJlY3QgPSBob3Jpem9udGFsOwogICAgIGVsc2UKLSAgICAg
ICAgbV9vcGFxdWVSZWN0ID0gdmVydGljYWw7CisgICAgICAgIG9wYXF1ZVJlY3QgPSB2ZXJ0aWNh
bDsKIH0KIAordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUoKQorewor
ICAgIFNrUmVjdCYgb3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJlY3QobV9vcGFx
dWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOworICAgIG9wYXF1ZVJlY3Quc2V0RW1wdHkoKTsK
K30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaAppbmRleCA4NDQzNmEz
YzliNjE1YjFjYzJmMGNlMjA3YjliYWU1NWIzYzc1MTliLi5jNTU5ZjAxMTY1M2YxZTBhNzViZWJh
OTQzZDcwZTA5MmEwNzhlOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaApAQCAtNTMsNyArNTMsNyBAQCBw
dWJsaWM6CiAgICAgSW50UmVjdCBhc1JlY3QoKSBjb25zdDsKIAogICAgIHZvaWQgcHVzaENhbnZh
c0xheWVyKGNvbnN0IFNrUGFpbnQqKTsKLSAgICB2b2lkIHBvcENhbnZhc0xheWVyKCk7CisgICAg
dm9pZCBwb3BDYW52YXNMYXllcihjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKik7CiAKICAgICB2
b2lkIHNldEltYWdlTWFzayhjb25zdCBTa1JlY3QmIGltYWdlT3BhcXVlUmVjdCk7CiAKQEAgLTYy
LDIxICs2MiwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREcmF3UG9pbnRzKGNvbnN0IFBsYXRm
b3JtQ29udGV4dFNraWEqLCBTa0NhbnZhczo6UG9pbnRNb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25z
dCBTa1BvaW50W10sIGNvbnN0IFNrUGFpbnQmKTsKICAgICB2b2lkIGRpZERyYXdCb3VuZGVkKGNv
bnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50Jik7
CiAKLXByaXZhdGU6CiAgICAgZW51bSBEcmF3VHlwZSB7CiAgICAgICAgIEZpbGxPbmx5LAogICAg
ICAgICBGaWxsT3JTdHJva2UKICAgICB9OwogCi0gICAgdm9pZCBkaWREcmF3KGNvbnN0IFBsYXRm
b3JtQ29udGV4dFNraWEqLCBjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50JiwgY29uc3QgU2tC
aXRtYXAqIHNvdXJjZUJpdG1hcCwgYm9vbCBmaWxsc0JvdW5kcywgRHJhd1R5cGUpOwotICAgIHZv
aWQgZGlkRHJhd1VuYm91bmRlZChjb25zdCBTa1BhaW50Jik7Ci0gICAgdm9pZCBtYXJrUmVjdEFz
T3BhcXVlKGNvbnN0IFNrUmVjdCYpOwotICAgIHZvaWQgbWFya1JlY3RBc05vbk9wYXF1ZShjb25z
dCBTa1JlY3QmKTsKLQotICAgIFNrUmVjdCBtX29wYXF1ZVJlY3Q7Ci0KICAgICBzdHJ1Y3QgQ2Fu
dmFzTGF5ZXJTdGF0ZSB7Ci0gICAgICAgIENhbnZhc0xheWVyU3RhdGUoKSA6IGhhc0ltYWdlTWFz
ayhmYWxzZSkgeyB9CisgICAgICAgIENhbnZhc0xheWVyU3RhdGUoKQorICAgICAgICAgICAgOiBo
YXNJbWFnZU1hc2soZmFsc2UpCisgICAgICAgICAgICAsIG9wYXF1ZVJlY3QoU2tSZWN0OjpNYWtl
RW1wdHkoKSkKKyAgICAgICAgeyB9CiAKICAgICAgICAgU2tQYWludCBwYWludDsKIApAQCAtODQs
OCArNzksMjAgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBoYXNJbWFnZU1hc2s7CiAgICAgICAg
IC8vIFRoZSBvcGFxdWUgYXJlYSBpbiB0aGUgaW1hZ2UgbWFzay4KICAgICAgICAgU2tSZWN0IGlt
YWdlT3BhcXVlUmVjdDsKKworICAgICAgICBTa1JlY3Qgb3BhcXVlUmVjdDsKICAgICB9OwogCitw
cml2YXRlOgorICAgIHZvaWQgZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29u
c3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiBzb3VyY2VCaXRtYXAs
IGJvb2wgZmlsbHNCb3VuZHMsIERyYXdUeXBlKTsKKyAgICB2b2lkIGRpZERyYXdVbmJvdW5kZWQo
Y29uc3QgU2tQYWludCYpOworICAgIHZvaWQgYXBwbHlPcGFxdWVSZWdpb25Gcm9tTGF5ZXIoY29u
c3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYgbGF5ZXJPcGFxdWVSZWN0LCBj
b25zdCBTa1BhaW50Jik7CisgICAgdm9pZCBtYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYp
OworICAgIHZvaWQgbWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmKTsKKyAgICB2b2lk
IG1hcmtBbGxBc05vbk9wYXF1ZSgpOworCisgICAgU2tSZWN0IG1fb3BhcXVlUmVjdDsKKwogICAg
IFZlY3RvcjxDYW52YXNMYXllclN0YXRlLCAzPiBtX2NhbnZhc0xheWVyU3RhY2s7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
bGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRleCA5YzBhY2Q3ZjRjNDcxOGRhMjYyOGM1MWRlZDFj
YzMzYzRiMDdmMjY0Li5hMzczMDQwZGY1Njg1YzU1YmQzZmQ3MWYzOTVjM2IyOTNmMjk1YjhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OnJlc3RvcmVMYXllcigpCiB7CiAgICAgbV9jYW52YXMtPnJlc3RvcmUo
KTsKICAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKLSAgICAgICAgbV9vcGFxdWVSZWdpb24u
cG9wQ2FudmFzTGF5ZXIoKTsKKyAgICAgICAgbV9vcGFxdWVSZWdpb24ucG9wQ2FudmFzTGF5ZXIo
dGhpcyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6YmVnaW5MYXllckNsaXBwZWRU
b0ltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKaW5kZXggZGM1ZTMx
OTkyMThkMzg0ODVlNzU3ZjI5OWY3OTQwMWI3ZjVhMzRhMi4uMzU3YjA3ZjNjZWMzOTk3YjA1YjI3
ZGI5NWIzMzExY2VkZjJlNTI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAKQEAgLTM5LDkgKzM5LDkgQEAg
bmFtZXNwYWNlIHsKIAogI2RlZmluZSBFWFBFQ1RfRVFfUkVDVChhLCBiKSBcCiAgICAgRVhQRUNU
X0VRKGEueCgpLCBiLngoKSk7IFwKLSAgICBFWFBFQ1RfRVEoYS5tYXhYKCksIGIubWF4WCgpKTsg
XAogICAgIEVYUEVDVF9FUShhLnkoKSwgYi55KCkpOyBcCi0gICAgRVhQRUNUX0VRKGEubWF4WSgp
LCBiLm1heFkoKSk7CisgICAgRVhQRUNUX0VRKGEud2lkdGgoKSwgYi53aWR0aCgpKTsgXAorICAg
IEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgpKTsKIAogI2RlZmluZSBFWFBFQ1RfUElY
RUxTX01BVENIKGJpdG1hcCwgb3BhcXVlUmVjdCkgXAogeyBcCkBAIC0yMjYsOSArMjI2LDg4IEBA
IFRFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVlQ2xpcFRlc3QpCiAgICAg
Y29udGV4dC5zYXZlKCk7CiAgICAgY29udGV4dC5jbGlwVG9JbWFnZUJ1ZmZlcihhbHBoYUltYWdl
LmdldCgpLCBGbG9hdFJlY3QoMzAsIDMwLCAxMCwgMTApKTsKICAgICBjb250ZXh0LmZpbGxSZWN0
KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwg
Q29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5yZXN0b3JlKCk7CiAgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOwogICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOwotICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCitURVNU
KFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja0ltYWdlTWFzaykKK3sKKyAgICBTa0JpdG1h
cCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25m
aWcsIDQwMCwgNDAwKTsKKyAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBTa0NhbnZhcyBj
YW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0
KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVl
KTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAg
IENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgw
LjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIC8vIEltYWdlIG1hc2tzIGFyZSBkb25lIGJ5
IGRyYXdpbmcgYSBiaXRtYXAgaW50byBhIHRyYW5zcGFyZW5jeSBsYXllciB0aGF0IHVzZXMgRHN0
SW4gdG8gbWFzaworICAgIC8vIG91dCBhIHRyYW5zcGFyZW5jeSBsYXllciBiZWxvdyB0aGF0IGlz
IGZpbGxlZCB3aXRoIHRoZSBtYXNrIGNvbG9yLiBJbiB0aGUgZW5kIHRoaXMgc2hvdWxkCisgICAg
Ly8gbm90IGJlIG1hcmtlZCBvcGFxdWUuCisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoMSk7CisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAxMCwgMTAp
LCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworCisg
ICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7
CisgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOworCisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiBhbHBoYUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDEwMCwg
MTAwKSk7CisgICAgYWxwaGFJbWFnZS0+Y29udGV4dCgpLT5maWxsUmVjdChJbnRSZWN0KDAsIDAs
IDEwMCwgMTAwKSwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgY29udGV4dC5z
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxv
YXRSZWN0KDEwLCAxMCwgMTAsIDEwKSk7CisKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxh
eWVyKCk7CisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAgRVhQRUNU
X0VRX1JFQ1QoSW50UmVjdCgpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0hfRVhBQ1QoYml0bWFwLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LCB0cmFja0ltYWdlTWFza1dpdGhPcGFxdWVSZWN0KQoreworICAgIFNrQml0bWFwIGJp
dG1hcDsKKyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywg
NDAwLCA0MDApOworICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIFNrQ2FudmFzIGNhbnZh
cyhiaXRtYXApOworCisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSBwbGF0Zm9ybUNvbnRleHQoJmNh
bnZhcyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRyYWNrT3BhcXVlUmVnaW9uKHRydWUpOwor
ICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQpOworCisgICAgQ29s
b3Igb3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEuMGYpOworICAgIENvbG9yIGFscGhhKDAuMGYs
IDAuMGYsIDAuMGYsIDAuMGYpOworCisgICAgLy8gSW1hZ2UgbWFza3MgYXJlIGRvbmUgYnkgZHJh
d2luZyBhIGJpdG1hcCBpbnRvIGEgdHJhbnNwYXJlbmN5IGxheWVyIHRoYXQgdXNlcyBEc3RJbiB0
byBtYXNrCisgICAgLy8gb3V0IGEgdHJhbnNwYXJlbmN5IGxheWVyIGJlbG93IHRoYXQgaXMgZmls
bGVkIHdpdGggdGhlIG1hc2sgY29sb3IuIEluIHRoZSBlbmQgdGhpcyBzaG91bGQKKyAgICAvLyBu
b3QgYmUgbWFya2VkIG9wYXF1ZS4KKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXll
cigxKTsKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDEwLCAxMCksIG9w
YXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBj
b250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVEZXN0aW5hdGlvbkluKTsKKyAg
ICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CisKKyAgICBPd25QdHI8SW1hZ2VC
dWZmZXI+IGFscGhhSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDAp
KTsKKyAgICBhbHBoYUltYWdlLT5jb250ZXh0KCktPmZpbGxSZWN0KEludFJlY3QoMCwgMCwgMTAw
LCAxMDApLCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7CisKKyAgICBjb250ZXh0LnNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBjb250ZXh0LmRyYXdJ
bWFnZUJ1ZmZlcihhbHBoYUltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBGbG9hdFJl
Y3QoMTAsIDEwLCAxMCwgMTApKTsKKworICAgIC8vIFdlIGNhbid0IGhhdmUgYW4gb3BhcXVlIG1h
c2sgYWN0dWFsbHksIGJ1dCB3ZSBjYW4gcHJldGVuZCBoZXJlIGxpa2UgaXQgd291bGQgbG9vayBp
ZiB3ZSBkaWQuCisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTIsIDEyLCAzLCAzKSwg
b3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAg
IGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJbnRSZWN0KDEyLCAxMiwgMywgMyks
IHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CisgICAgRVhQRUNUX1BJ
WEVMU19NQVRDSF9FWEFDVChiaXRtYXAsIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5h
c1JlY3QoKSk7CiB9CiAKIFRFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRyYWNrT3BhcXVl
Sm9pblRlc3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138415</attachid>
            <date>2012-04-23 13:35:16 -0700</date>
            <delta_ts>2012-04-23 20:40:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84275-20120423133515.patch</filename>
            <type>text/plain</type>
            <size>23690</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0OTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTRkMGI5MTc2YTg0YzBl
YzcxYTM0NTgxMGM1MGNhYThiZGQ0NzI2MC4uOTQxOGJkMTY0MWU3NTQwMzQ0MDc2ZDFjN2Y4ZDMz
NmI0YTY2Y2E2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
dHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVjdAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNP
cGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6YXBwbHlPcGFxdWVS
ZWdpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cHVz
aENhbnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnBvcENh
bnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6
T3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oOgorICAgICAgICAoT3BhcXVlUmVn
aW9uU2tpYSk6CisgICAgICAgIChDYW52YXNMYXllclN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVyKToKKwogMjAxMi0wNC0yMyAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjExNDkyOS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
Y2YyNDVkOGZkYWI0ZWEyODRiYzI1NDQ3OGExZjk2MTQ5MWQyYWI2ZC4uMTJkYWU1ZGE2MGM2ZjU1
ZTNmMzFmZDM2MWRjMGI0NjQ4YjUwYWY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNCBAQAorMjAxMi0wNC0xOCAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltYWdlIG1hc2tzIGFyZSBjb25zaWRlcmVkIG9w
YXF1ZSBpbmNvcnJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODQyNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHRlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFUZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMDQtMjMgIElhbiBWb2xs
aWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBQcm9wZXJs
eSBpZ25vcmUgdW5zdXBwb3J0ZWQgYW5pbWF0aW9uIGRpcmVjdGlvbnMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lh
LmNwcAppbmRleCA2NTkzNmNjM2EzNTA3NjE5OGVlYzc1ZGEyZWU2ZWE4MzBlMjcyOWZhLi5jYWI4
MDFhYTI5MTZhZmY4NTAwODIyZGViNGM3MjJjYzFhODUyY2I1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5j
cHAKQEAgLTEyNCwxMCArMTI0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNl
cnZlc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgYm9vbCBzcmNJc09wYXF1CiB9CiAKIC8v
IFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBhaW50ZWQgd2lsbCBiZSBvcGFxdWUuCi1zdGF0
aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3Qg
U2tCaXRtYXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlKQorc3RhdGlj
IGlubGluZSBib29sIHBhaW50SXNPcGFxdWUoY29uc3QgU2tQYWludCYgcGFpbnQsIE9wYXF1ZVJl
Z2lvblNraWE6OkRyYXdUeXBlIGRyYXdUeXBlLCBjb25zdCBTa0JpdG1hcCogYml0bWFwKQogewog
ICAgIGlmIChwYWludC5nZXRBbHBoYSgpIDwgMHhGRikKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGRyYXdUeXBlICE9IE9wYXF1ZVJlZ2lvblNraWE6OkZp
bGxPclN0cm9rZTsKICAgICBpZiAoIWNoZWNrRmlsbE9ubHkgJiYgcGFpbnQuZ2V0U3R5bGUoKSAh
PSBTa1BhaW50OjprRmlsbF9TdHlsZSAmJiBwYWludC5pc0FudGlBbGlhcygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgU2tTaGFkZXIqIHNoYWRlciA9IHBhaW50LmdldFNoYWRlcigpOwpA
QCAtMTQ3LDYgKzE0OCwyOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25z
dCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHJlY3Rhbmd1bGFyIGNsaXAs
IHdpdGggYSBib3VuZGluZyBib3ggZm9yIHRoZSBjdXJyZW50IGNsaXAgaW4gfGRldmljZUNsaXBS
ZWN0fC4KK3N0YXRpYyBpbmxpbmUgYm9vbCBnZXREZXZpY2VDbGlwQXNSZWN0KGNvbnN0IFBsYXRm
b3JtQ29udGV4dFNraWEqIGNvbnRleHQsIFNrUmVjdCYgZGV2aWNlQ2xpcFJlY3QpCit7CisgICAg
Ly8gR2V0IHRoZSBjdXJyZW50IGNsaXAgaW4gZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UuCisgICAg
U2tJUmVjdCBkZXZpY2VDbGlwSVJlY3Q7CisgICAgaWYgKGNvbnRleHQtPmNhbnZhcygpLT5nZXRD
bGlwRGV2aWNlQm91bmRzKCZkZXZpY2VDbGlwSVJlY3QpKQorICAgICAgICBkZXZpY2VDbGlwUmVj
dC5zZXQoZGV2aWNlQ2xpcElSZWN0KTsKKyAgICBlbHNlCisgICAgICAgIGRldmljZUNsaXBSZWN0
LnNldEVtcHR5KCk7CisKKyAgICBib29sIGlzQVJlY3QgPSBjb250ZXh0LT5jYW52YXMoKS0+Z2V0
Q2xpcFR5cGUoKSA9PSBTa0NhbnZhczo6a1JlY3RfQ2xpcFR5cGU7CisgICAgcmV0dXJuIGlzQVJl
Y3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgU2tSZWN0JiBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0
KFNrUmVjdCYgcm9vdE9wYXF1ZVJlY3QsIFZlY3RvcjxPcGFxdWVSZWdpb25Ta2lhOjpDYW52YXNM
YXllclN0YXRlLCAzPiYgY2FudmFzTGF5ZXJTdGFjaykKK3sKKyAgICAvLyBJZiB3ZSBhcmUgZHJh
d2luZyBpbnRvIGEgY2FudmFzIGxheWVyLCB0aGVuIHRyYWNrIHRoZSBvcGFxdWUgcmVjdCBpbiB0
aGF0IGxheWVyLgorICAgIGlmICghY2FudmFzTGF5ZXJTdGFjay5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBjYW52YXNMYXllclN0YWNrLmxhc3QoKS5vcGFxdWVSZWN0OworICAgIHJldHVybiBy
b290T3BhcXVlUmVjdDsKK30KKwogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpwdXNoQ2FudmFzTGF5
ZXIoY29uc3QgU2tQYWludCogcGFpbnQpCiB7CiAgICAgQ2FudmFzTGF5ZXJTdGF0ZSBzdGF0ZTsK
QEAgLTE1NSw5ICsxNzgsMTkgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpwdXNoQ2FudmFzTGF5
ZXIoY29uc3QgU2tQYWludCogcGFpbnQpCiAgICAgbV9jYW52YXNMYXllclN0YWNrLmFwcGVuZChz
dGF0ZSk7CiB9CiAKLXZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2FudmFzTGF5ZXIoKQordm9p
ZCBPcGFxdWVSZWdpb25Ta2lhOjpwb3BDYW52YXNMYXllcihjb25zdCBQbGF0Zm9ybUNvbnRleHRT
a2lhKiBjb250ZXh0KQogeworICAgIGNvbnN0IENhbnZhc0xheWVyU3RhdGUmIGNhbnZhc0xheWVy
ID0gbV9jYW52YXNMYXllclN0YWNrLmxhc3QoKTsKKyAgICBTa1JlY3QgbGF5ZXJPcGFxdWVSZWN0
ID0gY2FudmFzTGF5ZXIub3BhcXVlUmVjdDsKKyAgICBTa1BhaW50IGxheWVyUGFpbnQgPSBjYW52
YXNMYXllci5wYWludDsKKworICAgIC8vIEFwcGx5IHRoZSBpbWFnZSBtYXNrLgorICAgIGlmIChj
YW52YXNMYXllci5oYXNJbWFnZU1hc2sgJiYgIWxheWVyT3BhcXVlUmVjdC5pbnRlcnNlY3QoY2Fu
dmFzTGF5ZXIuaW1hZ2VPcGFxdWVSZWN0KSkKKyAgICAgICAgbGF5ZXJPcGFxdWVSZWN0LnNldEVt
cHR5KCk7CisKICAgICBtX2NhbnZhc0xheWVyU3RhY2sucmVtb3ZlTGFzdCgpOworCisgICAgYXBw
bHlPcGFxdWVSZWdpb25Gcm9tTGF5ZXIoY29udGV4dCwgbGF5ZXJPcGFxdWVSZWN0LCBsYXllclBh
aW50KTsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpzZXRJbWFnZU1hc2soY29uc3QgU2tS
ZWN0JiBpbWFnZU9wYXF1ZVJlY3QpCkBAIC0yNTQsNjkgKzI4Nyw2NSBAQCB2b2lkIE9wYXF1ZVJl
Z2lvblNraWE6OmRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29u
c3QgU2tSZWN0JgogICAgIGlmICghY2FudmFzVHJhbnNmb3JtLm1hcFJlY3QoJnRhcmdldFJlY3Qp
KQogICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwogCi0gICAgLy8gQXBwbHkgdGhlIGN1cnJl
bnQgY2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBpZiAoY29udGV4dC0+Y2Fu
dmFzKCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52YXM6OmtSZWN0X0NsaXBUeXBlKQorICAgIC8v
IEFwcGx5IHRoZSBjdXJyZW50IGNsaXAuCisgICAgU2tSZWN0IGRldmljZUNsaXBSZWN0OworICAg
IGlmICghZ2V0RGV2aWNlQ2xpcEFzUmVjdChjb250ZXh0LCBkZXZpY2VDbGlwUmVjdCkpCiAgICAg
ICAgIGZpbGxzQm91bmRzID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFNrSVJlY3QgZGV2
aWNlQ2xpcDsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xpcERldmljZUJv
dW5kcygmZGV2aWNlQ2xpcCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghdGFy
Z2V0UmVjdC5pbnRlcnNlY3QoU2tJbnRUb1NjYWxhcihkZXZpY2VDbGlwLmZMZWZ0KSwgU2tJbnRU
b1NjYWxhcihkZXZpY2VDbGlwLmZUb3ApLCBTa0ludFRvU2NhbGFyKGRldmljZUNsaXAuZlJpZ2h0
KSwgU2tJbnRUb1NjYWxhcihkZXZpY2VDbGlwLmZCb3R0b20pKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBib29sIGNoZWNrRmlsbE9ubHkgPSBkcmF3VHlwZSA9PSBGaWxsT25s
eTsKLSAgICBib29sIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwg
c291cmNlQml0bWFwLCBjaGVja0ZpbGxPbmx5KTsKLQotICAgIGJvb2wgeGZlcnNPcGFxdWUgPSB4
ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7Ci0KLSAgICAvLyBB
cHBseSB0aGUgU2tDYW52YXMgbGF5ZXJzIHdlIHdpbGwgYmUgZHJhd2luZyB0aHJvdWdoLgotICAg
IGZvciAoc2l6ZV90IGkgPSBtX2NhbnZhc0xheWVyU3RhY2suc2l6ZSgpOyBpID4gMDsgLS1pKSB7
Ci0gICAgICAgIGNvbnN0IENhbnZhc0xheWVyU3RhdGUmIGNhbnZhc0xheWVyID0gbV9jYW52YXNM
YXllclN0YWNrW2ktMV07Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN0aWxsIHRyYWNr
IHRoZSBvcGFxdWUgcGFydCBidXQgaXQncyBhbHdheXMgZW1wdHkgcmlnaHQgbm93IGFueXdheXMu
Ci0gICAgICAgIGlmIChjYW52YXNMYXllci5oYXNJbWFnZU1hc2sgJiYgIWNhbnZhc0xheWVyLmlt
YWdlT3BhcXVlUmVjdC5jb250YWlucyh0YXJnZXRSZWN0KSkKLSAgICAgICAgICAgIGZpbGxzQm91
bmRzID0gZmFsc2U7Ci0KLSAgICAgICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5cGUgPT0g
RmlsbE9ubHk7Ci0gICAgICAgIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShj
YW52YXNMYXllci5wYWludCwgMCwgY2hlY2tGaWxsT25seSk7Ci0gICAgICAgIC8vIElmIGFueSBs
YXllciBkb2Vzbid0IHBhaW50IG9wYXF1ZSwgdGhlbiB0aGUgcmVzdWx0IHdpbGwgbm90IGJlIG9w
YXF1ZS4KLSAgICAgICAgeGZlcnNPcGFxdWUgJj0geGZlcm1vZGVJc09wYXF1ZShjYW52YXNMYXll
ci5wYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotICAgIH0KKyAgICBpZiAoIXRhcmdldFJl
Y3QuaW50ZXJzZWN0KGRldmljZUNsaXBSZWN0KSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
UHJlc2VydmluZyBvcGFxdWUgb25seSBtYXR0ZXJzIGZvciB0aGUgYm90dG9tLW1vc3QgbGF5ZXIu
IEl0cyBjb250ZW50cyBhcmUgZWl0aGVyIG9wYXF1ZSBvciBub3QsIGFuZCBpZiBub3QKLSAgICAv
LyB0aGVuIHdlIGNhcmUgaWYgaXQgcHJlc2VydmVzIHRoZSBvcGFxdWVuZXNzIG9mIHRoZSB0YXJn
ZXQgZGV2aWNlIHdoZW4gaXQgaXMgZHJhd24gaW50byB0aGUgZGV2aWNlLgotICAgIGJvb2wgcHJl
c2VydmVzT3BhcXVlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3RhY2suaXNFbXB0eSgpKQotICAg
ICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgbGFz
dExheWVyRHJhd3NPcGFxdWUpOwotICAgIGVsc2UKLSAgICAgICAgcHJlc2VydmVzT3BhcXVlID0g
eGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUobV9jYW52YXNMYXllclN0YWNrWzBdLnBhaW50LCBsYXN0
TGF5ZXJEcmF3c09wYXF1ZSk7CisgICAgYm9vbCBkcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUo
cGFpbnQsIGRyYXdUeXBlLCBzb3VyY2VCaXRtYXApOworICAgIGJvb2wgeGZlcnNPcGFxdWUgPSB4
ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7CisgICAgYm9vbCBwcmVzZXJ2ZXNP
cGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgZHJhd3NPcGFxdWUpOwogCiAg
ICAgaWYgKGZpbGxzQm91bmRzICYmIHhmZXJzT3BhcXVlKQogICAgICAgICBtYXJrUmVjdEFzT3Bh
cXVlKHRhcmdldFJlY3QpOwotICAgIGVsc2UgaWYgKFNrUmVjdDo6SW50ZXJzZWN0cyh0YXJnZXRS
ZWN0LCBtX29wYXF1ZVJlY3QpICYmICFwcmVzZXJ2ZXNPcGFxdWUpCisgICAgZWxzZSBpZiAoIXBy
ZXNlcnZlc09wYXF1ZSkKICAgICAgICAgbWFya1JlY3RBc05vbk9wYXF1ZSh0YXJnZXRSZWN0KTsK
IH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKGNvbnN0IFNrUGFp
bnQmIHBhaW50KQogewotICAgIC8vIFByZXNlcnZpbmcgb3BhcXVlIG9ubHkgbWF0dGVycyBmb3Ig
dGhlIGJvdHRvbS1tb3N0IGxheWVyLiBJdHMgY29udGVudHMgYXJlIGVpdGhlciBvcGFxdWUgb3Ig
bm90LCBhbmQgaWYgbm90Ci0gICAgLy8gdGhlbiB3ZSBjYXJlIGlmIGl0IHByZXNlcnZlcyB0aGUg
b3BhcXVlbmVzcyBvZiB0aGUgdGFyZ2V0IGRldmljZSB3aGVuIGl0IGlzIGRyYXduIGludG8gdGhl
IGRldmljZS4KLSAgICBib29sIHByZXNlcnZlc09wYXF1ZTsKLQotICAgIGJvb2wgY2hlY2tGaWxs
T25seSA9IGZhbHNlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3RhY2suaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGJvb2wgbGFzdExheWVyRHJhd3NPcGFxdWUgPSBwYWludElzT3BhcXVlKHBhaW50LCAw
LCBjaGVja0ZpbGxPbmx5KTsKLSAgICAgICAgcHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVz
ZXJ2ZXNPcGFxdWUocGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBib29sIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShtX2NhbnZh
c0xheWVyU3RhY2tbMF0ucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAgICBwcmVzZXJ2
ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0u
cGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9CisgICAgYm9vbCBkcmF3c09wYXF1
ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIEZpbGxPclN0cm9rZSwgMCk7CisgICAgYm9vbCBwcmVz
ZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgZHJhd3NPcGFxdWUp
OwogCi0gICAgaWYgKCFwcmVzZXJ2ZXNPcGFxdWUpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qga25v
dyB3aGF0IHdhcyBkcmF3biBvbiBzbyBqdXN0IGRlc3Ryb3kgdGhlIGtub3duIG9wYXF1ZSBhcmVh
LgotICAgICAgICBtX29wYXF1ZVJlY3QgPSBTa1JlY3Q6Ok1ha2VFbXB0eSgpOwotICAgIH0KKyAg
ICBpZiAocHJlc2VydmVzT3BhcXVlKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXJrQWxsQXNO
b25PcGFxdWUoKTsKK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjphcHBseU9wYXF1ZVJlZ2lv
bkZyb21MYXllcihjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1Jl
Y3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYgcGFpbnQpCit7CisgICAgU2tSZWN0
IGRldmljZUNsaXBSZWN0OworICAgIGJvb2wgZGV2aWNlQ2xpcElzQVJlY3QgPSBnZXREZXZpY2VD
bGlwQXNSZWN0KGNvbnRleHQsIGRldmljZUNsaXBSZWN0KTsKKworICAgIGlmIChkZXZpY2VDbGlw
SXNBUmVjdCAmJiBkZXZpY2VDbGlwUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFNrUmVjdCBzb3VyY2VPcGFxdWVSZWN0ID0gbGF5ZXJPcGFxdWVSZWN0OworICAgIC8vIFNh
dmUgdGhlIG9wYXF1ZSBhcmVhIGluIHRoZSBkZXN0aW5hdGlvbiwgc28gd2UgY2FuIHByZXNlcnZl
IHRoZSBwYXJ0cyBvZiBpdCB1bmRlciB0aGUgc291cmNlIG9wYXF1ZSBhcmVhIGlmIHBvc3NpYmxl
LgorICAgIFNrUmVjdCBkZXN0aW5hdGlvbk9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFx
dWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKworICAgIGJvb2wgb3V0
c2lkZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09w
YXF1ZShwYWludCwgZmFsc2UpOworICAgIGlmICghb3V0c2lkZVNvdXJjZU9wYXF1ZVJlY3RQcmVz
ZXJ2ZXNPcGFxdWUpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUoZGV2aWNlQ2xpcFJlY3Qp
OworCisgICAgaWYgKCFkZXZpY2VDbGlwSXNBUmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghc291cmNlT3BhcXVlUmVjdC5pbnRlcnNlY3QoZGV2aWNlQ2xpcFJlY3QpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSA9IHBhaW50SXNP
cGFxdWUocGFpbnQsIEZpbGxPbmx5LCAwKTsKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3RYZmVy
c09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09w
YXF1ZSk7CisgICAgYm9vbCBzb3VyY2VPcGFxdWVSZWN0UHJlc2VydmVzT3BhcXVlID0geGZlcm1v
ZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSk7CisK
KyAgICAvLyBJZiB0aGUgbGF5ZXIncyBvcGFxdWUgYXJlYSBpcyBiZWluZyBkcmF3biBvcGFxdWUg
aW4gdGhlIGxheWVyIGJlbG93LCB0aGVuIG1hcmsgaXQgb3BhcXVlLiBPdGhlcndpc2UsCisgICAg
Ly8gaWYgaXQgcHJlc2VydmVzIG9wYXF1ZSB0aGVuIGtlZXAgdGhlIGludGVyc2VjdGlvbiBvZiB0
aGUgdHdvLgorICAgIGlmIChzb3VyY2VPcGFxdWVSZWN0WGZlcnNPcGFxdWUpCisgICAgICAgIG1h
cmtSZWN0QXNPcGFxdWUoc291cmNlT3BhcXVlUmVjdCk7CisgICAgZWxzZSBpZiAoc291cmNlT3Bh
cXVlUmVjdFByZXNlcnZlc09wYXF1ZSAmJiBzb3VyY2VPcGFxdWVSZWN0LmludGVyc2VjdChkZXN0
aW5hdGlvbk9wYXF1ZVJlY3QpKQorICAgICAgICBtYXJrUmVjdEFzT3BhcXVlKHNvdXJjZU9wYXF1
ZVJlY3QpOwogfQogCiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUoY29u
c3QgU2tSZWN0JiByZWN0KQpAQCAtMzI2LDMxICszNTUsMzMgQEAgdm9pZCBPcGFxdWVSZWdpb25T
a2lhOjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKICAgICAvLyByZWN0YW5n
bGUgdGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkgdG8gaW5jcmVh
c2UgdGhlIGFyZWEgcmV0dXJuZWQKICAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIGNvbXBs
ZXhpdHkuCiAKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVS
ZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKwogICAgIGlmIChyZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX29wYXF1ZVJlY3QuY29udGFpbnMo
cmVjdCkpCisgICAgaWYgKG9wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7Ci0gICAgICAgIG1fb3Bh
cXVlUmVjdCA9IHJlY3Q7CisgICAgaWYgKHJlY3QuY29udGFpbnMob3BhcXVlUmVjdCkpIHsKKyAg
ICAgICAgb3BhcXVlUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAocmVjdC5mVG9wIDw9IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29w
YXF1ZVJlY3QuZkJvdHRvbSkgewotICAgICAgICBpZiAocmVjdC5mTGVmdCA8IG1fb3BhcXVlUmVj
dC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBtX29wYXF1ZVJlY3QuZkxlZnQpCi0gICAgICAgICAg
ICBtX29wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OwotICAgICAgICBpZiAocmVjdC5mUmln
aHQgPiBtX29wYXF1ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0LmZS
aWdodCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsKLSAg
ICB9IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJp
Z2h0ID49IG1fb3BhcXVlUmVjdC5mUmlnaHQpIHsKLSAgICAgICAgaWYgKHJlY3QuZlRvcCA8IG1f
b3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29wYXF1ZVJlY3QuZlRvcCkKLSAg
ICAgICAgICAgIG1fb3BhcXVlUmVjdC5mVG9wID0gcmVjdC5mVG9wOwotICAgICAgICBpZiAocmVj
dC5mQm90dG9tID4gbV9vcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG1fb3BhcXVl
UmVjdC5mQm90dG9tKQotICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZCb3R0b20gPSByZWN0LmZC
b3R0b207CisgICAgaWYgKHJlY3QuZlRvcCA8PSBvcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90
dG9tID49IG9wYXF1ZVJlY3QuZkJvdHRvbSkgeworICAgICAgICBpZiAocmVjdC5mTGVmdCA8IG9w
YXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gb3BhcXVlUmVjdC5mTGVmdCkKKyAgICAg
ICAgICAgIG9wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OworICAgICAgICBpZiAocmVjdC5m
UmlnaHQgPiBvcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0IDw9IG9wYXF1ZVJlY3QuZlJp
Z2h0KQorICAgICAgICAgICAgb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsKKyAgICB9
IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+
PSBvcGFxdWVSZWN0LmZSaWdodCkgeworICAgICAgICBpZiAocmVjdC5mVG9wIDwgb3BhcXVlUmVj
dC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBvcGFxdWVSZWN0LmZUb3ApCisgICAgICAgICAgICBv
cGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAgIGlmIChyZWN0LmZCb3R0b20gPiBv
cGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG9wYXF1ZVJlY3QuZkJvdHRvbSkKKyAg
ICAgICAgICAgIG9wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJvdHRvbTsKICAgICB9CiAKLSAg
ICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1ZVJlY3Qud2lkdGgoKSAqIChsb25nKW1f
b3BhcXVlUmVjdC5oZWlnaHQoKTsKKyAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZylvcGFxdWVS
ZWN0LndpZHRoKCkgKiAobG9uZylvcGFxdWVSZWN0LmhlaWdodCgpOwogICAgIGxvbmcgYXJlYSA9
IChsb25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVpZ2h0KCk7CiAgICAgaWYgKGFyZWEg
PiBvcGFxdWVBcmVhKQotICAgICAgICBtX29wYXF1ZVJlY3QgPSByZWN0OworICAgICAgICBvcGFx
dWVSZWN0ID0gcmVjdDsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzTm9u
T3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKQEAgLTM1OCwzNCArMzg5LDQzIEBAIHZvaWQgT3Bh
cXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCiAg
ICAgLy8gV2Ugd2FudCB0byBrZWVwIGFzIG11Y2ggb2YgdGhlIGN1cnJlbnQgb3BhcXVlIHJlY3Rh
bmdsZSBhcyB3ZSBjYW4sIHNvIGZpbmQgdGhlIG9uZSBsYXJnZXN0CiAgICAgLy8gcmVjdGFuZ2xl
IGluc2lkZSBtX29wYXF1ZVJlY3QgdGhhdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB8cmVjdHwu
CiAKLSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7Ci0gICAgICAgIG1fb3Bh
cXVlUmVjdC5zZXRFbXB0eSgpOworICAgIFNrUmVjdCYgb3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFj
a2luZ09wYXF1ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOworCisgICAg
aWYgKCFTa1JlY3Q6OkludGVyc2VjdHMocmVjdCwgb3BhcXVlUmVjdCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAocmVjdC5jb250YWlucyhvcGFxdWVSZWN0KSkgeworICAgICAgICBtYXJrQWxs
QXNOb25PcGFxdWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCBkZWx0YUxl
ZnQgPSByZWN0LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0OwotICAgIGludCBkZWx0YVJpZ2h0
ID0gbV9vcGFxdWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0OwotICAgIGludCBkZWx0YVRvcCA9
IHJlY3QuZlRvcCAtIG1fb3BhcXVlUmVjdC5mVG9wOwotICAgIGludCBkZWx0YUJvdHRvbSA9IG1f
b3BhcXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOworICAgIGludCBkZWx0YUxlZnQgPSBy
ZWN0LmZMZWZ0IC0gb3BhcXVlUmVjdC5mTGVmdDsKKyAgICBpbnQgZGVsdGFSaWdodCA9IG9wYXF1
ZVJlY3QuZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7CisgICAgaW50IGRlbHRhVG9wID0gcmVjdC5mVG9w
IC0gb3BhcXVlUmVjdC5mVG9wOworICAgIGludCBkZWx0YUJvdHRvbSA9IG9wYXF1ZVJlY3QuZkJv
dHRvbSAtIHJlY3QuZkJvdHRvbTsKIAotICAgIC8vIGhvcml6b250YWwgaXMgdGhlIGxhcmdlciBv
ZiB0aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHxyZWN0
fCBhbmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KLSAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2Vy
IG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBt
X29wYXF1ZVJlY3QuCi0gICAgU2tSZWN0IGhvcml6b250YWwgPSBtX29wYXF1ZVJlY3Q7CisgICAg
Ly8gaG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0aGUg
bGVmdCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBpbnNpZGUgb3BhcXVlUmVjdC4KKyAg
ICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBv
ciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBvcGFxdWVSZWN0LgorICAgIFNrUmVjdCBob3Jpem9u
dGFsID0gb3BhcXVlUmVjdDsKICAgICBpZiAoZGVsdGFUb3AgPiBkZWx0YUJvdHRvbSkKICAgICAg
ICAgaG9yaXpvbnRhbC5mQm90dG9tID0gcmVjdC5mVG9wOwogICAgIGVsc2UKICAgICAgICAgaG9y
aXpvbnRhbC5mVG9wID0gcmVjdC5mQm90dG9tOwotICAgIFNrUmVjdCB2ZXJ0aWNhbCA9IG1fb3Bh
cXVlUmVjdDsKKyAgICBTa1JlY3QgdmVydGljYWwgPSBvcGFxdWVSZWN0OwogICAgIGlmIChkZWx0
YUxlZnQgPiBkZWx0YVJpZ2h0KQogICAgICAgICB2ZXJ0aWNhbC5mUmlnaHQgPSByZWN0LmZMZWZ0
OwogICAgIGVsc2UKICAgICAgICAgdmVydGljYWwuZkxlZnQgPSByZWN0LmZSaWdodDsKIAogICAg
IGlmICgobG9uZylob3Jpem9udGFsLndpZHRoKCkgKiAobG9uZylob3Jpem9udGFsLmhlaWdodCgp
ID4gKGxvbmcpdmVydGljYWwud2lkdGgoKSAqIChsb25nKXZlcnRpY2FsLmhlaWdodCgpKQotICAg
ICAgICBtX29wYXF1ZVJlY3QgPSBob3Jpem9udGFsOworICAgICAgICBvcGFxdWVSZWN0ID0gaG9y
aXpvbnRhbDsKICAgICBlbHNlCi0gICAgICAgIG1fb3BhcXVlUmVjdCA9IHZlcnRpY2FsOworICAg
ICAgICBvcGFxdWVSZWN0ID0gdmVydGljYWw7CiB9CiAKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
bWFya0FsbEFzTm9uT3BhcXVlKCkKK3sKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50
VHJhY2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKyAg
ICBvcGFxdWVSZWN0LnNldEVtcHR5KCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVn
aW9uU2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVS
ZWdpb25Ta2lhLmgKaW5kZXggODQ0MzZhM2M5YjYxNWIxY2MyZjBjZTIwN2I5YmFlNTViM2M3NTE5
Yi4uYzU1OWYwMTE2NTNmMWUwYTc1YmViYTk0M2Q3MGUwOTJhMDc4ZTkwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25T
a2lhLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIEludFJlY3QgYXNSZWN0KCkgY29u
c3Q7CiAKICAgICB2b2lkIHB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50Kik7Ci0gICAgdm9p
ZCBwb3BDYW52YXNMYXllcigpOworICAgIHZvaWQgcG9wQ2FudmFzTGF5ZXIoY29uc3QgUGxhdGZv
cm1Db250ZXh0U2tpYSopOwogCiAgICAgdm9pZCBzZXRJbWFnZU1hc2soY29uc3QgU2tSZWN0JiBp
bWFnZU9wYXF1ZVJlY3QpOwogCkBAIC02MiwyMSArNjIsMTYgQEAgcHVibGljOgogICAgIHZvaWQg
ZGlkRHJhd1BvaW50cyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgU2tDYW52YXM6OlBvaW50
TW9kZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtdLCBjb25zdCBTa1BhaW50Jik7CiAg
ICAgdm9pZCBkaWREcmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3Qg
U2tSZWN0JiwgY29uc3QgU2tQYWludCYpOwogCi1wcml2YXRlOgogICAgIGVudW0gRHJhd1R5cGUg
ewogICAgICAgICBGaWxsT25seSwKICAgICAgICAgRmlsbE9yU3Ryb2tlCiAgICAgfTsKIAotICAg
IHZvaWQgZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tSZWN0Jiwg
Y29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiBzb3VyY2VCaXRtYXAsIGJvb2wgZmlsbHNC
b3VuZHMsIERyYXdUeXBlKTsKLSAgICB2b2lkIGRpZERyYXdVbmJvdW5kZWQoY29uc3QgU2tQYWlu
dCYpOwotICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmKTsKLSAgICB2b2lk
IG1hcmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0Jik7Ci0KLSAgICBTa1JlY3QgbV9vcGFx
dWVSZWN0OwotCiAgICAgc3RydWN0IENhbnZhc0xheWVyU3RhdGUgewotICAgICAgICBDYW52YXNM
YXllclN0YXRlKCkgOiBoYXNJbWFnZU1hc2soZmFsc2UpIHsgfQorICAgICAgICBDYW52YXNMYXll
clN0YXRlKCkKKyAgICAgICAgICAgIDogaGFzSW1hZ2VNYXNrKGZhbHNlKQorICAgICAgICAgICAg
LCBvcGFxdWVSZWN0KFNrUmVjdDo6TWFrZUVtcHR5KCkpCisgICAgICAgIHsgfQogCiAgICAgICAg
IFNrUGFpbnQgcGFpbnQ7CiAKQEAgLTg0LDggKzc5LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIGJv
b2wgaGFzSW1hZ2VNYXNrOwogICAgICAgICAvLyBUaGUgb3BhcXVlIGFyZWEgaW4gdGhlIGltYWdl
IG1hc2suCiAgICAgICAgIFNrUmVjdCBpbWFnZU9wYXF1ZVJlY3Q7CisKKyAgICAgICAgU2tSZWN0
IG9wYXF1ZVJlY3Q7CiAgICAgfTsKIAorcHJpdmF0ZToKKyAgICB2b2lkIGRpZERyYXcoY29uc3Qg
UGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmLCBjb25z
dCBTa0JpdG1hcCogc291cmNlQml0bWFwLCBib29sIGZpbGxzQm91bmRzLCBEcmF3VHlwZSk7Cisg
ICAgdm9pZCBkaWREcmF3VW5ib3VuZGVkKGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIGFwcGx5
T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBT
a1JlY3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgbWFya1Jl
Y3RBc09wYXF1ZShjb25zdCBTa1JlY3QmKTsKKyAgICB2b2lkIG1hcmtSZWN0QXNOb25PcGFxdWUo
Y29uc3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrQWxsQXNOb25PcGFxdWUoKTsKKworICAgIFNr
UmVjdCBtX29wYXF1ZVJlY3Q7CisKICAgICBWZWN0b3I8Q2FudmFzTGF5ZXJTdGF0ZSwgMz4gbV9j
YW52YXNMYXllclN0YWNrOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggOWMw
YWNkN2Y0YzQ3MThkYTI2MjhjNTFkZWQxY2MzM2M0YjA3ZjI2NC4uYTM3MzA0MGRmNTY4NWM1NWJk
M2ZkNzFmMzk1YzNiMjkzZjI5NWI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0y
NDgsNyArMjQ4LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlTGF5ZXIoKQog
ewogICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CiAgICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24p
Ci0gICAgICAgIG1fb3BhcXVlUmVnaW9uLnBvcENhbnZhc0xheWVyKCk7CisgICAgICAgIG1fb3Bh
cXVlUmVnaW9uLnBvcENhbnZhc0xheWVyKHRoaXMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0
U2tpYVRlc3QuY3BwCmluZGV4IGRjNWUzMTk5MjE4ZDM4NDg1ZTc1N2YyOTlmNzk0MDFiN2Y1YTM0
YTIuLjM1N2IwN2YzY2VjMzk5N2IwNWIyN2RiOTViMzMxMWNlZGYyZTUyOWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRl
c3QuY3BwCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSB7CiAKICNkZWZpbmUgRVhQRUNUX0VR
X1JFQ1QoYSwgYikgXAogICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCi0gICAgRVhQRUNU
X0VRKGEubWF4WCgpLCBiLm1heFgoKSk7IFwKICAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsg
XAotICAgIEVYUEVDVF9FUShhLm1heFkoKSwgYi5tYXhZKCkpOworICAgIEVYUEVDVF9FUShhLndp
ZHRoKCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQo
KSk7CiAKICNkZWZpbmUgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIG9wYXF1ZVJlY3QpIFwK
IHsgXApAQCAtMjI2LDkgKzIyNiw4OCBAQCBURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0
cmFja09wYXF1ZUNsaXBUZXN0KQogICAgIGNvbnRleHQuc2F2ZSgpOwogICAgIGNvbnRleHQuY2xp
cFRvSW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgRmxvYXRSZWN0KDMwLCAzMCwgMTAsIDEw
KSk7CiAgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFx
dWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRl
eHQucmVzdG9yZSgpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgcGxhdGZvcm1Db250
ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKICAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJp
dG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKLSAgICBjb250
ZXh0LnJlc3RvcmUoKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tJ
bWFnZU1hc2spCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWco
U2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCA0MDAsIDQwMCk7CisgICAgYml0bWFwLmFsbG9j
UGl4ZWxzKCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNv
bnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQu
c2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
JnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwg
MS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICAv
LyBJbWFnZSBtYXNrcyBhcmUgZG9uZSBieSBkcmF3aW5nIGEgYml0bWFwIGludG8gYSB0cmFuc3Bh
cmVuY3kgbGF5ZXIgdGhhdCB1c2VzIERzdEluIHRvIG1hc2sKKyAgICAvLyBvdXQgYSB0cmFuc3Bh
cmVuY3kgbGF5ZXIgYmVsb3cgdGhhdCBpcyBmaWxsZWQgd2l0aCB0aGUgbWFzayBjb2xvci4gSW4g
dGhlIGVuZCB0aGlzIHNob3VsZAorICAgIC8vIG5vdCBiZSBtYXJrZWQgb3BhcXVlLgorCisgICAg
Y29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAg
Y29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOworICAgIGNvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KDEwLCAxMCwgMTAsIDEwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBD
b21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZURlc3RpbmF0aW9uSW4pOworICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lM
YXllcigxKTsKKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYWxwaGFJbWFnZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGFscGhhSW1hZ2UtPmNvbnRleHQo
KS0+ZmlsbFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGFscGhhLCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNv
dXJjZU92ZXIpOworICAgIGNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGFscGhhSW1hZ2UuZ2V0KCks
IENvbG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdCgxMCwgMTAsIDEwLCAxMCkpOworCisgICAg
Y29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGNvbnRleHQuZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgcGxhdGZvcm1Db250
ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIX0VY
QUNUKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKK30K
KworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVl
UmVjdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0Jp
dG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDQwMCwgNDAwKTsKKyAgICBiaXRtYXAuYWxsb2NQaXhl
bHMoKTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4
dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRU
cmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxh
dGZvcm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBm
KTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIC8vIElt
YWdlIG1hc2tzIGFyZSBkb25lIGJ5IGRyYXdpbmcgYSBiaXRtYXAgaW50byBhIHRyYW5zcGFyZW5j
eSBsYXllciB0aGF0IHVzZXMgRHN0SW4gdG8gbWFzaworICAgIC8vIG91dCBhIHRyYW5zcGFyZW5j
eSBsYXllciBiZWxvdyB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSBtYXNrIGNvbG9yLiBJbiB0aGUg
ZW5kIHRoaXMgc2hvdWxkCisgICAgLy8gbm90IGJlIG1hcmtlZCBvcGFxdWUuCisKKyAgICBjb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBjb250
ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CisgICAgY29udGV4dC5maWxsUmVjdChGbG9h
dFJlY3QoMTAsIDEwLCAxMCwgMTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBv
c2l0ZVNvdXJjZU92ZXIpOworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlRGVzdGluYXRpb25Jbik7CisgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVy
KDEpOworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBhbHBoYUltYWdlID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgYWxwaGFJbWFnZS0+Y29udGV4dCgpLT5m
aWxsUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNl
T3Zlcik7CisgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgRmxvYXRSZWN0KDEwLCAxMCwgMTAsIDEwKSk7CisKKyAgICAvLyBX
ZSBjYW4ndCBoYXZlIGFuIG9wYXF1ZSBtYXNrIGFjdHVhbGx5LCBidXQgd2UgY2FuIHByZXRlbmQg
aGVyZSBsaWtlIGl0IHdvdWxkIGxvb2sgaWYgd2UgZGlkLgorICAgIGNvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KDEyLCAxMiwgMywgMyksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29t
cG9zaXRlU291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgxMiwgMTIsIDMsIDMpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCku
YXNSZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0hfRVhBQ1QoYml0bWFwLCBwbGF0Zm9y
bUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwogfQogCiBURVNUKFBsYXRmb3JtQ29u
dGV4dFNraWFUZXN0LCB0cmFja09wYXF1ZUpvaW5UZXN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138493</attachid>
            <date>2012-04-23 20:40:53 -0700</date>
            <delta_ts>2012-04-24 14:47:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84275-20120423204052.patch</filename>
            <type>text/plain</type>
            <size>23687</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0ODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVmYTI3YTNkMzExNDgz
YjcxYmY5Njc0ODk2NDhjOTVkNWFhNWU5My4uOTFlNmZhM2RjMTMwNGVkY2IxOWIwNjdlOWE0NTVj
MTQ5ZDY3ZGY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
dHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVjdAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNP
cGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6YXBwbHlPcGFxdWVS
ZWdpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cHVz
aENhbnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnBvcENh
bnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6
T3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oOgorICAgICAgICAoT3BhcXVlUmVn
aW9uU2tpYSk6CisgICAgICAgIChDYW52YXNMYXllclN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVyKToKKwogMjAxMi0wNC0yMCAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3Igb3BhcXVlIGNvbnRlbnQgdHJhbnNmb3JtIG91dCBvZiBTa2lhIGNvbnRleHQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjYyOWY2ZWQ1YTNkODRhOTY3ZjI1OGNhOTAyMzNiZjk3
OTFiZDE3NC4uNDg0ODU1Y2VlZGQ5NmY5ZWUyNDI4NWE2NjQzMzc4NzcwMWYzNGRhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNC0xOCAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltYWdl
IG1hc2tzIGFyZSBjb25zaWRlcmVkIG9wYXF1ZSBpbmNvcnJlY3RseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyNzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL1BsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisKIDIwMTItMDQtMjAgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIG9wYXF1ZSBjb250ZW50IHRyYW5zZm9ybSBvdXQgb2Yg
U2tpYSBjb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcAppbmRleCA2NTkzNmNjM2EzNTA3NjE5OGVl
Yzc1ZGEyZWU2ZWE4MzBlMjcyOWZhLi44ZjZlMzI0ODNlMGNkNmEyZDdjN2ZhMGQ5OTMzNjFkMmY3
ZDdhMDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L09wYXF1ZVJlZ2lvblNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKQEAgLTEyNCwxMCArMTI0LDExIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWlu
dCwgYm9vbCBzcmNJc09wYXF1CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBh
aW50ZWQgd2lsbCBiZSBvcGFxdWUuCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShj
b25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hl
Y2tGaWxsT25seSA9IGZhbHNlKQorc3RhdGljIGlubGluZSBib29sIHBhaW50SXNPcGFxdWUoY29u
c3QgU2tQYWludCYgcGFpbnQsIE9wYXF1ZVJlZ2lvblNraWE6OkRyYXdUeXBlIGRyYXdUeXBlLCBj
b25zdCBTa0JpdG1hcCogYml0bWFwKQogewogICAgIGlmIChwYWludC5nZXRBbHBoYSgpIDwgMHhG
RikKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGRyYXdU
eXBlICE9IE9wYXF1ZVJlZ2lvblNraWE6OkZpbGxPclN0cm9rZTsKICAgICBpZiAoIWNoZWNrRmls
bE9ubHkgJiYgcGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSAmJiBwYWlu
dC5pc0FudGlBbGlhcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU2tTaGFkZXIqIHNo
YWRlciA9IHBhaW50LmdldFNoYWRlcigpOwpAQCAtMTQ3LDYgKzE0OCwzMCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRt
YXAqIGJpdG1hcCA9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFJldHVybnMgdHJ1ZSBpZiB0
aGVyZSBpcyBhIHJlY3Rhbmd1bGFyIGNsaXAsIHdpdGggdGhlIHJlc3VsdCBpbiB8ZGV2aWNlQ2xp
cFJlY3R8Lgorc3RhdGljIGlubGluZSBib29sIGdldERldmljZUNsaXBBc1JlY3QoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tSZWN0JiBkZXZpY2VDbGlwUmVjdCkKK3sKKyAg
ICAvLyBHZXQgdGhlIGN1cnJlbnQgY2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZS4KKyAg
ICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52YXM6OmtSZWN0
X0NsaXBUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTa0lSZWN0IGRldmljZUNs
aXBJUmVjdDsKKyAgICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBEZXZpY2VCb3VuZHMo
JmRldmljZUNsaXBJUmVjdCkpCisgICAgICAgIGRldmljZUNsaXBSZWN0LnNldChkZXZpY2VDbGlw
SVJlY3QpOworICAgIGVsc2UKKyAgICAgICAgZGV2aWNlQ2xpcFJlY3Quc2V0RW1wdHkoKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIFNrUmVjdCYgY3VycmVudFRyYWNr
aW5nT3BhcXVlUmVjdChTa1JlY3QmIHJvb3RPcGFxdWVSZWN0LCBWZWN0b3I8T3BhcXVlUmVnaW9u
U2tpYTo6Q2FudmFzTGF5ZXJTdGF0ZSwgMz4mIGNhbnZhc0xheWVyU3RhY2spCit7CisgICAgLy8g
SWYgd2UgYXJlIGRyYXdpbmcgaW50byBhIGNhbnZhcyBsYXllciwgdGhlbiB0cmFjayB0aGUgb3Bh
cXVlIHJlY3QgaW4gdGhhdCBsYXllci4KKyAgICBpZiAoIWNhbnZhc0xheWVyU3RhY2suaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gY2FudmFzTGF5ZXJTdGFjay5sYXN0KCkub3BhcXVlUmVjdDsK
KyAgICByZXR1cm4gcm9vdE9wYXF1ZVJlY3Q7Cit9CisKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
cHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqIHBhaW50KQogewogICAgIENhbnZhc0xheWVy
U3RhdGUgc3RhdGU7CkBAIC0xNTUsOSArMTgwLDE5IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
cHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgIG1fY2FudmFzTGF5ZXJT
dGFjay5hcHBlbmQoc3RhdGUpOwogfQogCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnBvcENhbnZh
c0xheWVyKCkKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2FudmFzTGF5ZXIoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCkKIHsKKyAgICBjb25zdCBDYW52YXNMYXllclN0YXRl
JiBjYW52YXNMYXllciA9IG1fY2FudmFzTGF5ZXJTdGFjay5sYXN0KCk7CisgICAgU2tSZWN0IGxh
eWVyT3BhcXVlUmVjdCA9IGNhbnZhc0xheWVyLm9wYXF1ZVJlY3Q7CisgICAgU2tQYWludCBsYXll
clBhaW50ID0gY2FudmFzTGF5ZXIucGFpbnQ7CisKKyAgICAvLyBBcHBseSB0aGUgaW1hZ2UgbWFz
ay4KKyAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFsYXllck9wYXF1ZVJlY3Qu
aW50ZXJzZWN0KGNhbnZhc0xheWVyLmltYWdlT3BhcXVlUmVjdCkpCisgICAgICAgIGxheWVyT3Bh
cXVlUmVjdC5zZXRFbXB0eSgpOworCiAgICAgbV9jYW52YXNMYXllclN0YWNrLnJlbW92ZUxhc3Qo
KTsKKworICAgIGFwcGx5T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnRleHQsIGxheWVyT3BhcXVl
UmVjdCwgbGF5ZXJQYWludCk7CiB9CiAKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6c2V0SW1hZ2VN
YXNrKGNvbnN0IFNrUmVjdCYgaW1hZ2VPcGFxdWVSZWN0KQpAQCAtMjU0LDY5ICsyODksNjUgQEAg
dm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEq
IGNvbnRleHQsIGNvbnN0IFNrUmVjdCYKICAgICBpZiAoIWNhbnZhc1RyYW5zZm9ybS5tYXBSZWN0
KCZ0YXJnZXRSZWN0KSkKICAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKIAotICAgIC8vIEFw
cGx5IHRoZSBjdXJyZW50IGNsaXAgaW4gZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYg
KGNvbnRleHQtPmNhbnZhcygpLT5nZXRDbGlwVHlwZSgpICE9IFNrQ2FudmFzOjprUmVjdF9DbGlw
VHlwZSkKKyAgICAvLyBBcHBseSB0aGUgY3VycmVudCBjbGlwLgorICAgIFNrUmVjdCBkZXZpY2VD
bGlwUmVjdDsKKyAgICBpZiAoIWdldERldmljZUNsaXBBc1JlY3QoY29udGV4dCwgZGV2aWNlQ2xp
cFJlY3QpKQogICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAg
ICBTa0lSZWN0IGRldmljZUNsaXA7Ci0gICAgICAgIGlmICghY29udGV4dC0+Y2FudmFzKCktPmdl
dENsaXBEZXZpY2VCb3VuZHMoJmRldmljZUNsaXApKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5m
TGVmdCksIFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mVG9wKSwgU2tJbnRUb1NjYWxhcihkZXZp
Y2VDbGlwLmZSaWdodCksIFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mQm90dG9tKSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5
cGUgPT0gRmlsbE9ubHk7Ci0gICAgYm9vbCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBhaW50SXNP
cGFxdWUocGFpbnQsIHNvdXJjZUJpdG1hcCwgY2hlY2tGaWxsT25seSk7Ci0KLSAgICBib29sIHhm
ZXJzT3BhcXVlID0geGZlcm1vZGVJc09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUp
OwotCi0gICAgLy8gQXBwbHkgdGhlIFNrQ2FudmFzIGxheWVycyB3ZSB3aWxsIGJlIGRyYXdpbmcg
dGhyb3VnaC4KLSAgICBmb3IgKHNpemVfdCBpID0gbV9jYW52YXNMYXllclN0YWNrLnNpemUoKTsg
aSA+IDA7IC0taSkgewotICAgICAgICBjb25zdCBDYW52YXNMYXllclN0YXRlJiBjYW52YXNMYXll
ciA9IG1fY2FudmFzTGF5ZXJTdGFja1tpLTFdOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBzdGlsbCB0cmFjayB0aGUgb3BhcXVlIHBhcnQgYnV0IGl0J3MgYWx3YXlzIGVtcHR5IHJpZ2h0
IG5vdyBhbnl3YXlzLgotICAgICAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFj
YW52YXNMYXllci5pbWFnZU9wYXF1ZVJlY3QuY29udGFpbnModGFyZ2V0UmVjdCkpCi0gICAgICAg
ICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwotCi0gICAgICAgIGJvb2wgY2hlY2tGaWxsT25seSA9
IGRyYXdUeXBlID09IEZpbGxPbmx5OwotICAgICAgICBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBh
aW50SXNPcGFxdWUoY2FudmFzTGF5ZXIucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAg
ICAvLyBJZiBhbnkgbGF5ZXIgZG9lc24ndCBwYWludCBvcGFxdWUsIHRoZW4gdGhlIHJlc3VsdCB3
aWxsIG5vdCBiZSBvcGFxdWUuCi0gICAgICAgIHhmZXJzT3BhcXVlICY9IHhmZXJtb2RlSXNPcGFx
dWUoY2FudmFzTGF5ZXIucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9CisgICAg
ZWxzZSBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KGRldmljZUNsaXBSZWN0KSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gUHJlc2VydmluZyBvcGFxdWUgb25seSBtYXR0ZXJzIGZvciB0aGUg
Ym90dG9tLW1vc3QgbGF5ZXIuIEl0cyBjb250ZW50cyBhcmUgZWl0aGVyIG9wYXF1ZSBvciBub3Qs
IGFuZCBpZiBub3QKLSAgICAvLyB0aGVuIHdlIGNhcmUgaWYgaXQgcHJlc2VydmVzIHRoZSBvcGFx
dWVuZXNzIG9mIHRoZSB0YXJnZXQgZGV2aWNlIHdoZW4gaXQgaXMgZHJhd24gaW50byB0aGUgZGV2
aWNlLgotICAgIGJvb2wgcHJlc2VydmVzT3BhcXVlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3Rh
Y2suaXNFbXB0eSgpKQotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZl
c09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotICAgIGVsc2UKLSAgICAgICAg
cHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUobV9jYW52YXNMYXllclN0
YWNrWzBdLnBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7CisgICAgYm9vbCBkcmF3c09wYXF1
ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIGRyYXdUeXBlLCBzb3VyY2VCaXRtYXApOworICAgIGJv
b2wgeGZlcnNPcGFxdWUgPSB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7Cisg
ICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwg
ZHJhd3NPcGFxdWUpOwogCiAgICAgaWYgKGZpbGxzQm91bmRzICYmIHhmZXJzT3BhcXVlKQogICAg
ICAgICBtYXJrUmVjdEFzT3BhcXVlKHRhcmdldFJlY3QpOwotICAgIGVsc2UgaWYgKFNrUmVjdDo6
SW50ZXJzZWN0cyh0YXJnZXRSZWN0LCBtX29wYXF1ZVJlY3QpICYmICFwcmVzZXJ2ZXNPcGFxdWUp
CisgICAgZWxzZSBpZiAoIXByZXNlcnZlc09wYXF1ZSkKICAgICAgICAgbWFya1JlY3RBc05vbk9w
YXF1ZSh0YXJnZXRSZWN0KTsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5i
b3VuZGVkKGNvbnN0IFNrUGFpbnQmIHBhaW50KQogewotICAgIC8vIFByZXNlcnZpbmcgb3BhcXVl
IG9ubHkgbWF0dGVycyBmb3IgdGhlIGJvdHRvbS1tb3N0IGxheWVyLiBJdHMgY29udGVudHMgYXJl
IGVpdGhlciBvcGFxdWUgb3Igbm90LCBhbmQgaWYgbm90Ci0gICAgLy8gdGhlbiB3ZSBjYXJlIGlm
IGl0IHByZXNlcnZlcyB0aGUgb3BhcXVlbmVzcyBvZiB0aGUgdGFyZ2V0IGRldmljZSB3aGVuIGl0
IGlzIGRyYXduIGludG8gdGhlIGRldmljZS4KLSAgICBib29sIHByZXNlcnZlc09wYXF1ZTsKLQot
ICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3Rh
Y2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgbGFzdExheWVyRHJhd3NPcGFxdWUgPSBwYWlu
dElzT3BhcXVlKHBhaW50LCAwLCBjaGVja0ZpbGxPbmx5KTsKLSAgICAgICAgcHJlc2VydmVzT3Bh
cXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVl
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBib29sIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFp
bnRJc09wYXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkp
OwotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShtX2Nh
bnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9Cisg
ICAgYm9vbCBkcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIEZpbGxPclN0cm9rZSwg
MCk7CisgICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShw
YWludCwgZHJhd3NPcGFxdWUpOwogCi0gICAgaWYgKCFwcmVzZXJ2ZXNPcGFxdWUpIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0IHdhcyBkcmF3biBvbiBzbyBqdXN0IGRlc3Ryb3kgdGhl
IGtub3duIG9wYXF1ZSBhcmVhLgotICAgICAgICBtX29wYXF1ZVJlY3QgPSBTa1JlY3Q6Ok1ha2VF
bXB0eSgpOwotICAgIH0KKyAgICBpZiAocHJlc2VydmVzT3BhcXVlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtYXJrQWxsQXNOb25PcGFxdWUoKTsKK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjphcHBseU9wYXF1ZVJlZ2lvbkZyb21MYXllcihjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBj
b250ZXh0LCBjb25zdCBTa1JlY3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYgcGFp
bnQpCit7CisgICAgU2tSZWN0IGRldmljZUNsaXBSZWN0OworICAgIGJvb2wgZGV2aWNlQ2xpcElz
QVJlY3QgPSBnZXREZXZpY2VDbGlwQXNSZWN0KGNvbnRleHQsIGRldmljZUNsaXBSZWN0KTsKKwor
ICAgIGlmIChkZXZpY2VDbGlwUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFNrUmVjdCBzb3VyY2VPcGFxdWVSZWN0ID0gbGF5ZXJPcGFxdWVSZWN0OworICAgIC8vIFNhdmUg
dGhlIG9wYXF1ZSBhcmVhIGluIHRoZSBkZXN0aW5hdGlvbiwgc28gd2UgY2FuIHByZXNlcnZlIHRo
ZSBwYXJ0cyBvZiBpdCB1bmRlciB0aGUgc291cmNlIG9wYXF1ZSBhcmVhIGlmIHBvc3NpYmxlLgor
ICAgIFNrUmVjdCBkZXN0aW5hdGlvbk9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVS
ZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKworICAgIGJvb2wgb3V0c2lk
ZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1
ZShwYWludCwgZmFsc2UpOworICAgIGlmICghb3V0c2lkZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2
ZXNPcGFxdWUpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUoZGV2aWNlQ2xpcFJlY3QpOwor
CisgICAgaWYgKCFkZXZpY2VDbGlwSXNBUmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
c291cmNlT3BhcXVlUmVjdC5pbnRlcnNlY3QoZGV2aWNlQ2xpcFJlY3QpKQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFx
dWUocGFpbnQsIEZpbGxPbmx5LCAwKTsKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3RYZmVyc09w
YXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1
ZSk7CisgICAgYm9vbCBzb3VyY2VPcGFxdWVSZWN0UHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQ
cmVzZXJ2ZXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSk7CisKKyAg
ICAvLyBJZiB0aGUgbGF5ZXIncyBvcGFxdWUgYXJlYSBpcyBiZWluZyBkcmF3biBvcGFxdWUgaW4g
dGhlIGxheWVyIGJlbG93LCB0aGVuIG1hcmsgaXQgb3BhcXVlLiBPdGhlcndpc2UsCisgICAgLy8g
aWYgaXQgcHJlc2VydmVzIG9wYXF1ZSB0aGVuIGtlZXAgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUg
dHdvLgorICAgIGlmIChzb3VyY2VPcGFxdWVSZWN0WGZlcnNPcGFxdWUpCisgICAgICAgIG1hcmtS
ZWN0QXNPcGFxdWUoc291cmNlT3BhcXVlUmVjdCk7CisgICAgZWxzZSBpZiAoc291cmNlT3BhcXVl
UmVjdFByZXNlcnZlc09wYXF1ZSAmJiBzb3VyY2VPcGFxdWVSZWN0LmludGVyc2VjdChkZXN0aW5h
dGlvbk9wYXF1ZVJlY3QpKQorICAgICAgICBtYXJrUmVjdEFzT3BhcXVlKHNvdXJjZU9wYXF1ZVJl
Y3QpOwogfQogCiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUoY29uc3Qg
U2tSZWN0JiByZWN0KQpAQCAtMzI2LDMxICszNTcsMzMgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKICAgICAvLyByZWN0YW5nbGUg
dGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkgdG8gaW5jcmVhc2Ug
dGhlIGFyZWEgcmV0dXJuZWQKICAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIGNvbXBsZXhp
dHkuCiAKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0
KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKwogICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX29wYXF1ZVJlY3QuY29udGFpbnMocmVj
dCkpCisgICAgaWYgKG9wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7Ci0gICAgICAgIG1fb3BhcXVl
UmVjdCA9IHJlY3Q7CisgICAgaWYgKHJlY3QuY29udGFpbnMob3BhcXVlUmVjdCkpIHsKKyAgICAg
ICAgb3BhcXVlUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
cmVjdC5mVG9wIDw9IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29wYXF1
ZVJlY3QuZkJvdHRvbSkgewotICAgICAgICBpZiAocmVjdC5mTGVmdCA8IG1fb3BhcXVlUmVjdC5m
TGVmdCAmJiByZWN0LmZSaWdodCA+PSBtX29wYXF1ZVJlY3QuZkxlZnQpCi0gICAgICAgICAgICBt
X29wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OwotICAgICAgICBpZiAocmVjdC5mUmlnaHQg
PiBtX29wYXF1ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0LmZSaWdo
dCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsKLSAgICB9
IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0
ID49IG1fb3BhcXVlUmVjdC5mUmlnaHQpIHsKLSAgICAgICAgaWYgKHJlY3QuZlRvcCA8IG1fb3Bh
cXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29wYXF1ZVJlY3QuZlRvcCkKLSAgICAg
ICAgICAgIG1fb3BhcXVlUmVjdC5mVG9wID0gcmVjdC5mVG9wOwotICAgICAgICBpZiAocmVjdC5m
Qm90dG9tID4gbV9vcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG1fb3BhcXVlUmVj
dC5mQm90dG9tKQotICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZCb3R0b20gPSByZWN0LmZCb3R0
b207CisgICAgaWYgKHJlY3QuZlRvcCA8PSBvcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9t
ID49IG9wYXF1ZVJlY3QuZkJvdHRvbSkgeworICAgICAgICBpZiAocmVjdC5mTGVmdCA8IG9wYXF1
ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gb3BhcXVlUmVjdC5mTGVmdCkKKyAgICAgICAg
ICAgIG9wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OworICAgICAgICBpZiAocmVjdC5mUmln
aHQgPiBvcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0IDw9IG9wYXF1ZVJlY3QuZlJpZ2h0
KQorICAgICAgICAgICAgb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsKKyAgICB9IGVs
c2UgaWYgKHJlY3QuZkxlZnQgPD0gb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBv
cGFxdWVSZWN0LmZSaWdodCkgeworICAgICAgICBpZiAocmVjdC5mVG9wIDwgb3BhcXVlUmVjdC5m
VG9wICYmIHJlY3QuZkJvdHRvbSA+PSBvcGFxdWVSZWN0LmZUb3ApCisgICAgICAgICAgICBvcGFx
dWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAgIGlmIChyZWN0LmZCb3R0b20gPiBvcGFx
dWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG9wYXF1ZVJlY3QuZkJvdHRvbSkKKyAgICAg
ICAgICAgIG9wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJvdHRvbTsKICAgICB9CiAKLSAgICBs
b25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1ZVJlY3Qud2lkdGgoKSAqIChsb25nKW1fb3Bh
cXVlUmVjdC5oZWlnaHQoKTsKKyAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZylvcGFxdWVSZWN0
LndpZHRoKCkgKiAobG9uZylvcGFxdWVSZWN0LmhlaWdodCgpOwogICAgIGxvbmcgYXJlYSA9IChs
b25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVpZ2h0KCk7CiAgICAgaWYgKGFyZWEgPiBv
cGFxdWVBcmVhKQotICAgICAgICBtX29wYXF1ZVJlY3QgPSByZWN0OworICAgICAgICBvcGFxdWVS
ZWN0ID0gcmVjdDsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzTm9uT3Bh
cXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKQEAgLTM1OCwzNCArMzkxLDQzIEBAIHZvaWQgT3BhcXVl
UmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCiAgICAg
Ly8gV2Ugd2FudCB0byBrZWVwIGFzIG11Y2ggb2YgdGhlIGN1cnJlbnQgb3BhcXVlIHJlY3Rhbmds
ZSBhcyB3ZSBjYW4sIHNvIGZpbmQgdGhlIG9uZSBsYXJnZXN0CiAgICAgLy8gcmVjdGFuZ2xlIGlu
c2lkZSBtX29wYXF1ZVJlY3QgdGhhdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB8cmVjdHwuCiAK
LSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7Ci0gICAgICAgIG1fb3BhcXVl
UmVjdC5zZXRFbXB0eSgpOworICAgIFNrUmVjdCYgb3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2lu
Z09wYXF1ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOworCisgICAgaWYg
KCFTa1JlY3Q6OkludGVyc2VjdHMocmVjdCwgb3BhcXVlUmVjdCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAocmVjdC5jb250YWlucyhvcGFxdWVSZWN0KSkgeworICAgICAgICBtYXJrQWxsQXNO
b25PcGFxdWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCBkZWx0YUxlZnQg
PSByZWN0LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0OwotICAgIGludCBkZWx0YVJpZ2h0ID0g
bV9vcGFxdWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0OwotICAgIGludCBkZWx0YVRvcCA9IHJl
Y3QuZlRvcCAtIG1fb3BhcXVlUmVjdC5mVG9wOwotICAgIGludCBkZWx0YUJvdHRvbSA9IG1fb3Bh
cXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOworICAgIGludCBkZWx0YUxlZnQgPSByZWN0
LmZMZWZ0IC0gb3BhcXVlUmVjdC5mTGVmdDsKKyAgICBpbnQgZGVsdGFSaWdodCA9IG9wYXF1ZVJl
Y3QuZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7CisgICAgaW50IGRlbHRhVG9wID0gcmVjdC5mVG9wIC0g
b3BhcXVlUmVjdC5mVG9wOworICAgIGludCBkZWx0YUJvdHRvbSA9IG9wYXF1ZVJlY3QuZkJvdHRv
bSAtIHJlY3QuZkJvdHRvbTsKIAotICAgIC8vIGhvcml6b250YWwgaXMgdGhlIGxhcmdlciBvZiB0
aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHxyZWN0fCBh
bmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KLSAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9m
IHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBtX29w
YXF1ZVJlY3QuCi0gICAgU2tSZWN0IGhvcml6b250YWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgLy8g
aG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0aGUgbGVm
dCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBpbnNpZGUgb3BhcXVlUmVjdC4KKyAgICAv
LyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBi
ZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBvcGFxdWVSZWN0LgorICAgIFNrUmVjdCBob3Jpem9udGFs
ID0gb3BhcXVlUmVjdDsKICAgICBpZiAoZGVsdGFUb3AgPiBkZWx0YUJvdHRvbSkKICAgICAgICAg
aG9yaXpvbnRhbC5mQm90dG9tID0gcmVjdC5mVG9wOwogICAgIGVsc2UKICAgICAgICAgaG9yaXpv
bnRhbC5mVG9wID0gcmVjdC5mQm90dG9tOwotICAgIFNrUmVjdCB2ZXJ0aWNhbCA9IG1fb3BhcXVl
UmVjdDsKKyAgICBTa1JlY3QgdmVydGljYWwgPSBvcGFxdWVSZWN0OwogICAgIGlmIChkZWx0YUxl
ZnQgPiBkZWx0YVJpZ2h0KQogICAgICAgICB2ZXJ0aWNhbC5mUmlnaHQgPSByZWN0LmZMZWZ0Owog
ICAgIGVsc2UKICAgICAgICAgdmVydGljYWwuZkxlZnQgPSByZWN0LmZSaWdodDsKIAogICAgIGlm
ICgobG9uZylob3Jpem9udGFsLndpZHRoKCkgKiAobG9uZylob3Jpem9udGFsLmhlaWdodCgpID4g
KGxvbmcpdmVydGljYWwud2lkdGgoKSAqIChsb25nKXZlcnRpY2FsLmhlaWdodCgpKQotICAgICAg
ICBtX29wYXF1ZVJlY3QgPSBob3Jpem9udGFsOworICAgICAgICBvcGFxdWVSZWN0ID0gaG9yaXpv
bnRhbDsKICAgICBlbHNlCi0gICAgICAgIG1fb3BhcXVlUmVjdCA9IHZlcnRpY2FsOworICAgICAg
ICBvcGFxdWVSZWN0ID0gdmVydGljYWw7CiB9CiAKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFy
a0FsbEFzTm9uT3BhcXVlKCkKK3sKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJh
Y2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKyAgICBv
cGFxdWVSZWN0LnNldEVtcHR5KCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9u
U2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdp
b25Ta2lhLmgKaW5kZXggODQ0MzZhM2M5YjYxNWIxY2MyZjBjZTIwN2I5YmFlNTViM2M3NTE5Yi4u
YzU1OWYwMTE2NTNmMWUwYTc1YmViYTk0M2Q3MGUwOTJhMDc4ZTkwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lh
LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIEludFJlY3QgYXNSZWN0KCkgY29uc3Q7
CiAKICAgICB2b2lkIHB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50Kik7Ci0gICAgdm9pZCBw
b3BDYW52YXNMYXllcigpOworICAgIHZvaWQgcG9wQ2FudmFzTGF5ZXIoY29uc3QgUGxhdGZvcm1D
b250ZXh0U2tpYSopOwogCiAgICAgdm9pZCBzZXRJbWFnZU1hc2soY29uc3QgU2tSZWN0JiBpbWFn
ZU9wYXF1ZVJlY3QpOwogCkBAIC02MiwyMSArNjIsMTYgQEAgcHVibGljOgogICAgIHZvaWQgZGlk
RHJhd1BvaW50cyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgU2tDYW52YXM6OlBvaW50TW9k
ZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtdLCBjb25zdCBTa1BhaW50Jik7CiAgICAg
dm9pZCBkaWREcmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tS
ZWN0JiwgY29uc3QgU2tQYWludCYpOwogCi1wcml2YXRlOgogICAgIGVudW0gRHJhd1R5cGUgewog
ICAgICAgICBGaWxsT25seSwKICAgICAgICAgRmlsbE9yU3Ryb2tlCiAgICAgfTsKIAotICAgIHZv
aWQgZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tSZWN0JiwgY29u
c3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiBzb3VyY2VCaXRtYXAsIGJvb2wgZmlsbHNCb3Vu
ZHMsIERyYXdUeXBlKTsKLSAgICB2b2lkIGRpZERyYXdVbmJvdW5kZWQoY29uc3QgU2tQYWludCYp
OwotICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmKTsKLSAgICB2b2lkIG1h
cmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0Jik7Ci0KLSAgICBTa1JlY3QgbV9vcGFxdWVS
ZWN0OwotCiAgICAgc3RydWN0IENhbnZhc0xheWVyU3RhdGUgewotICAgICAgICBDYW52YXNMYXll
clN0YXRlKCkgOiBoYXNJbWFnZU1hc2soZmFsc2UpIHsgfQorICAgICAgICBDYW52YXNMYXllclN0
YXRlKCkKKyAgICAgICAgICAgIDogaGFzSW1hZ2VNYXNrKGZhbHNlKQorICAgICAgICAgICAgLCBv
cGFxdWVSZWN0KFNrUmVjdDo6TWFrZUVtcHR5KCkpCisgICAgICAgIHsgfQogCiAgICAgICAgIFNr
UGFpbnQgcGFpbnQ7CiAKQEAgLTg0LDggKzc5LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wg
aGFzSW1hZ2VNYXNrOwogICAgICAgICAvLyBUaGUgb3BhcXVlIGFyZWEgaW4gdGhlIGltYWdlIG1h
c2suCiAgICAgICAgIFNrUmVjdCBpbWFnZU9wYXF1ZVJlY3Q7CisKKyAgICAgICAgU2tSZWN0IG9w
YXF1ZVJlY3Q7CiAgICAgfTsKIAorcHJpdmF0ZToKKyAgICB2b2lkIGRpZERyYXcoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmLCBjb25zdCBT
a0JpdG1hcCogc291cmNlQml0bWFwLCBib29sIGZpbGxzQm91bmRzLCBEcmF3VHlwZSk7CisgICAg
dm9pZCBkaWREcmF3VW5ib3VuZGVkKGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIGFwcGx5T3Bh
cXVlUmVnaW9uRnJvbUxheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBTa1Jl
Y3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgbWFya1JlY3RB
c09wYXF1ZShjb25zdCBTa1JlY3QmKTsKKyAgICB2b2lkIG1hcmtSZWN0QXNOb25PcGFxdWUoY29u
c3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrQWxsQXNOb25PcGFxdWUoKTsKKworICAgIFNrUmVj
dCBtX29wYXF1ZVJlY3Q7CisKICAgICBWZWN0b3I8Q2FudmFzTGF5ZXJTdGF0ZSwgMz4gbV9jYW52
YXNMYXllclN0YWNrOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggOWMwYWNk
N2Y0YzQ3MThkYTI2MjhjNTFkZWQxY2MzM2M0YjA3ZjI2NC4uYTM3MzA0MGRmNTY4NWM1NWJkM2Zk
NzFmMzk1YzNiMjkzZjI5NWI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0yNDgs
NyArMjQ4LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlTGF5ZXIoKQogewog
ICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CiAgICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCi0g
ICAgICAgIG1fb3BhcXVlUmVnaW9uLnBvcENhbnZhc0xheWVyKCk7CisgICAgICAgIG1fb3BhcXVl
UmVnaW9uLnBvcENhbnZhc0xheWVyKHRoaXMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QuY3BwCmluZGV4IGRjNWUzMTk5MjE4ZDM4NDg1ZTc1N2YyOTlmNzk0MDFiN2Y1YTM0YTIu
LjM1N2IwN2YzY2VjMzk5N2IwNWIyN2RiOTViMzMxMWNlZGYyZTUyOWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
Y3BwCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSB7CiAKICNkZWZpbmUgRVhQRUNUX0VRX1JF
Q1QoYSwgYikgXAogICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCi0gICAgRVhQRUNUX0VR
KGEubWF4WCgpLCBiLm1heFgoKSk7IFwKICAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAot
ICAgIEVYUEVDVF9FUShhLm1heFkoKSwgYi5tYXhZKCkpOworICAgIEVYUEVDVF9FUShhLndpZHRo
KCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7
CiAKICNkZWZpbmUgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIG9wYXF1ZVJlY3QpIFwKIHsg
XApAQCAtMjI2LDkgKzIyNiw4OCBAQCBURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFj
a09wYXF1ZUNsaXBUZXN0KQogICAgIGNvbnRleHQuc2F2ZSgpOwogICAgIGNvbnRleHQuY2xpcFRv
SW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgRmxvYXRSZWN0KDMwLCAzMCwgMTAsIDEwKSk7
CiAgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUs
IENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQu
cmVzdG9yZSgpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKICAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1h
cCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKLSAgICBjb250ZXh0
LnJlc3RvcmUoKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tJbWFn
ZU1hc2spCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCA0MDAsIDQwMCk7CisgICAgYml0bWFwLmFsbG9jUGl4
ZWxzKCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRl
eHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFzKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0
VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBs
YXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBvcGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4w
Zik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CisKKyAgICAvLyBJ
bWFnZSBtYXNrcyBhcmUgZG9uZSBieSBkcmF3aW5nIGEgYml0bWFwIGludG8gYSB0cmFuc3BhcmVu
Y3kgbGF5ZXIgdGhhdCB1c2VzIERzdEluIHRvIG1hc2sKKyAgICAvLyBvdXQgYSB0cmFuc3BhcmVu
Y3kgbGF5ZXIgYmVsb3cgdGhhdCBpcyBmaWxsZWQgd2l0aCB0aGUgbWFzayBjb2xvci4gSW4gdGhl
IGVuZCB0aGlzIHNob3VsZAorICAgIC8vIG5vdCBiZSBtYXJrZWQgb3BhcXVlLgorCisgICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29u
dGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxv
YXRSZWN0KDEwLCAxMCwgMTAsIDEwKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21w
b3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZURlc3RpbmF0aW9uSW4pOworICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXll
cigxKTsKKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYWxwaGFJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEwMCkpOworICAgIGFscGhhSW1hZ2UtPmNvbnRleHQoKS0+
ZmlsbFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEwMCksIGFscGhhLCBDb2xvclNwYWNlRGV2aWNl
UkdCKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJj
ZU92ZXIpOworICAgIGNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKGFscGhhSW1hZ2UuZ2V0KCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdCgxMCwgMTAsIDEwLCAxMCkpOworCisgICAgY29u
dGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKKworICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAgICBFWFBFQ1RfUElYRUxTX01BVENIX0VYQUNU
KGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKK30KKwor
VEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVj
dCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1h
cDo6a0FSR0JfODg4OF9Db25maWcsIDQwMCwgNDAwKTsKKyAgICBiaXRtYXAuYWxsb2NQaXhlbHMo
KTsKKyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNr
aWEgcGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFj
a09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZv
cm1Db250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsK
KyAgICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIC8vIEltYWdl
IG1hc2tzIGFyZSBkb25lIGJ5IGRyYXdpbmcgYSBiaXRtYXAgaW50byBhIHRyYW5zcGFyZW5jeSBs
YXllciB0aGF0IHVzZXMgRHN0SW4gdG8gbWFzaworICAgIC8vIG91dCBhIHRyYW5zcGFyZW5jeSBs
YXllciBiZWxvdyB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSBtYXNrIGNvbG9yLiBJbiB0aGUgZW5k
IHRoaXMgc2hvdWxkCisgICAgLy8gbm90IGJlIG1hcmtlZCBvcGFxdWUuCisKKyAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBjb250ZXh0
LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJl
Y3QoMTAsIDEwLCAxMCwgMTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0
ZVNvdXJjZU92ZXIpOworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlRGVzdGluYXRpb25Jbik7CisgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEp
OworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBhbHBoYUltYWdlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgYWxwaGFJbWFnZS0+Y29udGV4dCgpLT5maWxs
UmVjdChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zl
cik7CisgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JT
cGFjZURldmljZVJHQiwgRmxvYXRSZWN0KDEwLCAxMCwgMTAsIDEwKSk7CisKKyAgICAvLyBXZSBj
YW4ndCBoYXZlIGFuIG9wYXF1ZSBtYXNrIGFjdHVhbGx5LCBidXQgd2UgY2FuIHByZXRlbmQgaGVy
ZSBsaWtlIGl0IHdvdWxkIGxvb2sgaWYgd2UgZGlkLgorICAgIGNvbnRleHQuZmlsbFJlY3QoRmxv
YXRSZWN0KDEyLCAxMiwgMywgMyksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9z
aXRlU291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Cisg
ICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAgRVhQRUNUX0VRX1JFQ1Qo
SW50UmVjdCgxMiwgMTIsIDMsIDMpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNS
ZWN0KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0hfRVhBQ1QoYml0bWFwLCBwbGF0Zm9ybUNv
bnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwogfQogCiBURVNUKFBsYXRmb3JtQ29udGV4
dFNraWFUZXN0LCB0cmFja09wYXF1ZUpvaW5UZXN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138651</attachid>
            <date>2012-04-24 14:47:34 -0700</date>
            <delta_ts>2012-04-24 14:48:28 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-84275-20120424144733.patch</filename>
            <type>text/plain</type>
            <size>23741</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0ODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVmYTI3YTNkMzExNDgz
YjcxYmY5Njc0ODk2NDhjOTVkNWFhNWU5My4uOTFlNmZhM2RjMTMwNGVkY2IxOWIwNjdlOWE0NTVj
MTQ5ZDY3ZGY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1hdGNoIHRoZSBiZWhhdmlvdXIgb2Yg
U2tDYW52YXMgbGF5ZXJzIG1vcmUgY2xvc2VseSB3aGlsZSB0cmFja2luZworICAgICAgICBvcGFx
dWUgcGFpbnRzLiBTa0NhbnZhcyBsYXllcnMgYWN0dWFsbHkgYWN0IGFzIGEgc2VwYXJhdGUgZGV2
aWNlCisgICAgICAgIChpZS4gcGl4ZWxzKSBhbmQgd2hlbiB0aGUgbGF5ZXIgaXMgcG9wcGVkIG9m
ZiwgdGhlIHBpeGVscyBhcmUgY29waWVkCisgICAgICAgIGRvd24gdG8gdGhlIGxheWVyIGJlbG93
LgorCisgICAgICAgIFdoaWxlIHdlIGNhbiB1c2UgdGhlIHRvdGFsIGNsaXAgdG8gZGVjaWRlIHdo
YXQgcGl4ZWxzIHRoZSB0aGUKKyAgICAgICAgZHJhd2luZyBvcGVyYXRpb24gd2lsbCBhZmZlY3Qg
aW4gdGhlIGZpbmFsIGRldmljZSwgdGhlIGJsZW5kaW5nCisgICAgICAgIGRvd24gdGhyb3VnaCBs
YXllcnMgbmVlZHMgdG8gY29uc2lkZXIgZWFjaCBsYXllciBjYXJlZnVsbHkuCisKKyAgICAgICAg
SW4gdGhpcyBjYXNlIHRoZSBpbWFnZSBtYXNrIGlzIGRyYXduIGludG8gYSBsYXllciB3aGljaCBp
cyBjb3BpZWQKKyAgICAgICAgZG93biB1c2luZyB0aGUgRGVzdGluYXRpb25JbiBvcGVyYXRpb24u
IFNpbmNlIHRoZSBsYXllciBjb250YWlucworICAgICAgICBub24tb3BhcXVlIHBpeGVscywgdGhl
IERlc3RpbmF0aW9uSW4gY29weSBjYW4gZGVzdHJveSBvcGFxdWUKKyAgICAgICAgYXJlYXMgaW4g
dGhlIG5leHQgbGF5ZXIuIFdlIGFkZCBPcGFxdWVSZWdpb25Ta2lhOjpGaWxsQnlDb3B5IHRvCisg
ICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBjb3B5aW5nIGEgYmxvY2sg
b2YgcGl4ZWxzLCBhbmQgdGhlCisgICAgICAgIGFscGhhIHZhbHVlcyBhcmUgZXNzZW50aWFsbHkg
dW5rbm93bi4KKworICAgICAgICBVbml0IHRlc3Q6IFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LnRy
YWNrSW1hZ2VNYXNrCisgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
dHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVjdAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SXNP
cGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6YXBwbHlPcGFxdWVS
ZWdpb25Gcm9tTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6cHVz
aENhbnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnBvcENh
bnZhc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd0JvdW5kZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5ib3VuZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6
T3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrQWxsQXNOb25PcGFxdWUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5oOgorICAgICAgICAoT3BhcXVlUmVn
aW9uU2tpYSk6CisgICAgICAgIChDYW52YXNMYXllclN0YXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZUxheWVyKToKKwogMjAxMi0wNC0yMCAgQWRy
aWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVm
YWN0b3Igb3BhcXVlIGNvbnRlbnQgdHJhbnNmb3JtIG91dCBvZiBTa2lhIGNvbnRleHQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjYyOWY2ZWQ1YTNkODRhOTY3ZjI1OGNhOTAyMzNiZjk3
OTFiZDE3NC4uNDg0ODU1Y2VlZGQ5NmY5ZWUyNDI4NWE2NjQzMzc4NzcwMWYzNGRhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNC0xOCAgRGFuYSBK
YW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEltYWdl
IG1hc2tzIGFyZSBjb25zaWRlcmVkIG9wYXF1ZSBpbmNvcnJlY3RseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQyNzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL1BsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6
CisKIDIwMTItMDQtMjAgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJlZmFjdG9yIG9wYXF1ZSBjb250ZW50IHRyYW5zZm9ybSBvdXQgb2Yg
U2tpYSBjb250ZXh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcAppbmRleCA2NTkzNmNjM2EzNTA3NjE5OGVl
Yzc1ZGEyZWU2ZWE4MzBlMjcyOWZhLi44ZjZlMzI0ODNlMGNkNmEyZDdjN2ZhMGQ5OTMzNjFkMmY3
ZDdhMDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L09wYXF1ZVJlZ2lvblNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKQEAgLTEyNCwxMCArMTI0LDExIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWlu
dCwgYm9vbCBzcmNJc09wYXF1CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgcGl4ZWxzIHBh
aW50ZWQgd2lsbCBiZSBvcGFxdWUuCi1zdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShj
b25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCA9IDAsIGJvb2wgY2hl
Y2tGaWxsT25seSA9IGZhbHNlKQorc3RhdGljIGlubGluZSBib29sIHBhaW50SXNPcGFxdWUoY29u
c3QgU2tQYWludCYgcGFpbnQsIE9wYXF1ZVJlZ2lvblNraWE6OkRyYXdUeXBlIGRyYXdUeXBlLCBj
b25zdCBTa0JpdG1hcCogYml0bWFwKQogewogICAgIGlmIChwYWludC5nZXRBbHBoYSgpIDwgMHhG
RikKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGRyYXdU
eXBlICE9IE9wYXF1ZVJlZ2lvblNraWE6OkZpbGxPclN0cm9rZTsKICAgICBpZiAoIWNoZWNrRmls
bE9ubHkgJiYgcGFpbnQuZ2V0U3R5bGUoKSAhPSBTa1BhaW50OjprRmlsbF9TdHlsZSAmJiBwYWlu
dC5pc0FudGlBbGlhcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU2tTaGFkZXIqIHNo
YWRlciA9IHBhaW50LmdldFNoYWRlcigpOwpAQCAtMTQ3LDYgKzE0OCwzMCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgcGFpbnRJc09wYXF1ZShjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tCaXRt
YXAqIGJpdG1hcCA9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFJldHVybnMgdHJ1ZSBpZiB0
aGVyZSBpcyBhIHJlY3Rhbmd1bGFyIGNsaXAsIHdpdGggdGhlIHJlc3VsdCBpbiB8ZGV2aWNlQ2xp
cFJlY3R8Lgorc3RhdGljIGlubGluZSBib29sIGdldERldmljZUNsaXBBc1JlY3QoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tSZWN0JiBkZXZpY2VDbGlwUmVjdCkKK3sKKyAg
ICAvLyBHZXQgdGhlIGN1cnJlbnQgY2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZS4KKyAg
ICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52YXM6OmtSZWN0
X0NsaXBUeXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTa0lSZWN0IGRldmljZUNs
aXBJUmVjdDsKKyAgICBpZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBEZXZpY2VCb3VuZHMo
JmRldmljZUNsaXBJUmVjdCkpCisgICAgICAgIGRldmljZUNsaXBSZWN0LnNldChkZXZpY2VDbGlw
SVJlY3QpOworICAgIGVsc2UKKyAgICAgICAgZGV2aWNlQ2xpcFJlY3Quc2V0RW1wdHkoKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIFNrUmVjdCYgY3VycmVudFRyYWNr
aW5nT3BhcXVlUmVjdChTa1JlY3QmIHJvb3RPcGFxdWVSZWN0LCBWZWN0b3I8T3BhcXVlUmVnaW9u
U2tpYTo6Q2FudmFzTGF5ZXJTdGF0ZSwgMz4mIGNhbnZhc0xheWVyU3RhY2spCit7CisgICAgLy8g
SWYgd2UgYXJlIGRyYXdpbmcgaW50byBhIGNhbnZhcyBsYXllciwgdGhlbiB0cmFjayB0aGUgb3Bh
cXVlIHJlY3QgaW4gdGhhdCBsYXllci4KKyAgICBpZiAoIWNhbnZhc0xheWVyU3RhY2suaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gY2FudmFzTGF5ZXJTdGFjay5sYXN0KCkub3BhcXVlUmVjdDsK
KyAgICByZXR1cm4gcm9vdE9wYXF1ZVJlY3Q7Cit9CisKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
cHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqIHBhaW50KQogewogICAgIENhbnZhc0xheWVy
U3RhdGUgc3RhdGU7CkBAIC0xNTUsOSArMTgwLDE5IEBAIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6
cHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqIHBhaW50KQogICAgIG1fY2FudmFzTGF5ZXJT
dGFjay5hcHBlbmQoc3RhdGUpOwogfQogCi12b2lkIE9wYXF1ZVJlZ2lvblNraWE6OnBvcENhbnZh
c0xheWVyKCkKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2FudmFzTGF5ZXIoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSogY29udGV4dCkKIHsKKyAgICBjb25zdCBDYW52YXNMYXllclN0YXRl
JiBjYW52YXNMYXllciA9IG1fY2FudmFzTGF5ZXJTdGFjay5sYXN0KCk7CisgICAgU2tSZWN0IGxh
eWVyT3BhcXVlUmVjdCA9IGNhbnZhc0xheWVyLm9wYXF1ZVJlY3Q7CisgICAgU2tQYWludCBsYXll
clBhaW50ID0gY2FudmFzTGF5ZXIucGFpbnQ7CisKKyAgICAvLyBBcHBseSB0aGUgaW1hZ2UgbWFz
ay4KKyAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFsYXllck9wYXF1ZVJlY3Qu
aW50ZXJzZWN0KGNhbnZhc0xheWVyLmltYWdlT3BhcXVlUmVjdCkpCisgICAgICAgIGxheWVyT3Bh
cXVlUmVjdC5zZXRFbXB0eSgpOworCiAgICAgbV9jYW52YXNMYXllclN0YWNrLnJlbW92ZUxhc3Qo
KTsKKworICAgIGFwcGx5T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnRleHQsIGxheWVyT3BhcXVl
UmVjdCwgbGF5ZXJQYWludCk7CiB9CiAKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6c2V0SW1hZ2VN
YXNrKGNvbnN0IFNrUmVjdCYgaW1hZ2VPcGFxdWVSZWN0KQpAQCAtMjU0LDY5ICsyODksNjUgQEAg
dm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEq
IGNvbnRleHQsIGNvbnN0IFNrUmVjdCYKICAgICBpZiAoIWNhbnZhc1RyYW5zZm9ybS5tYXBSZWN0
KCZ0YXJnZXRSZWN0KSkKICAgICAgICAgZmlsbHNCb3VuZHMgPSBmYWxzZTsKIAotICAgIC8vIEFw
cGx5IHRoZSBjdXJyZW50IGNsaXAgaW4gZGV2aWNlIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYg
KGNvbnRleHQtPmNhbnZhcygpLT5nZXRDbGlwVHlwZSgpICE9IFNrQ2FudmFzOjprUmVjdF9DbGlw
VHlwZSkKKyAgICAvLyBBcHBseSB0aGUgY3VycmVudCBjbGlwLgorICAgIFNrUmVjdCBkZXZpY2VD
bGlwUmVjdDsKKyAgICBpZiAoIWdldERldmljZUNsaXBBc1JlY3QoY29udGV4dCwgZGV2aWNlQ2xp
cFJlY3QpKQogICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAg
ICBTa0lSZWN0IGRldmljZUNsaXA7Ci0gICAgICAgIGlmICghY29udGV4dC0+Y2FudmFzKCktPmdl
dENsaXBEZXZpY2VCb3VuZHMoJmRldmljZUNsaXApKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5m
TGVmdCksIFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mVG9wKSwgU2tJbnRUb1NjYWxhcihkZXZp
Y2VDbGlwLmZSaWdodCksIFNrSW50VG9TY2FsYXIoZGV2aWNlQ2xpcC5mQm90dG9tKSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJhd1R5
cGUgPT0gRmlsbE9ubHk7Ci0gICAgYm9vbCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBhaW50SXNP
cGFxdWUocGFpbnQsIHNvdXJjZUJpdG1hcCwgY2hlY2tGaWxsT25seSk7Ci0KLSAgICBib29sIHhm
ZXJzT3BhcXVlID0geGZlcm1vZGVJc09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUp
OwotCi0gICAgLy8gQXBwbHkgdGhlIFNrQ2FudmFzIGxheWVycyB3ZSB3aWxsIGJlIGRyYXdpbmcg
dGhyb3VnaC4KLSAgICBmb3IgKHNpemVfdCBpID0gbV9jYW52YXNMYXllclN0YWNrLnNpemUoKTsg
aSA+IDA7IC0taSkgewotICAgICAgICBjb25zdCBDYW52YXNMYXllclN0YXRlJiBjYW52YXNMYXll
ciA9IG1fY2FudmFzTGF5ZXJTdGFja1tpLTFdOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBjb3Vs
ZCBzdGlsbCB0cmFjayB0aGUgb3BhcXVlIHBhcnQgYnV0IGl0J3MgYWx3YXlzIGVtcHR5IHJpZ2h0
IG5vdyBhbnl3YXlzLgotICAgICAgICBpZiAoY2FudmFzTGF5ZXIuaGFzSW1hZ2VNYXNrICYmICFj
YW52YXNMYXllci5pbWFnZU9wYXF1ZVJlY3QuY29udGFpbnModGFyZ2V0UmVjdCkpCi0gICAgICAg
ICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwotCi0gICAgICAgIGJvb2wgY2hlY2tGaWxsT25seSA9
IGRyYXdUeXBlID09IEZpbGxPbmx5OwotICAgICAgICBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBh
aW50SXNPcGFxdWUoY2FudmFzTGF5ZXIucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAg
ICAvLyBJZiBhbnkgbGF5ZXIgZG9lc24ndCBwYWludCBvcGFxdWUsIHRoZW4gdGhlIHJlc3VsdCB3
aWxsIG5vdCBiZSBvcGFxdWUuCi0gICAgICAgIHhmZXJzT3BhcXVlICY9IHhmZXJtb2RlSXNPcGFx
dWUoY2FudmFzTGF5ZXIucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9CisgICAg
ZWxzZSBpZiAoIXRhcmdldFJlY3QuaW50ZXJzZWN0KGRldmljZUNsaXBSZWN0KSkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gUHJlc2VydmluZyBvcGFxdWUgb25seSBtYXR0ZXJzIGZvciB0aGUg
Ym90dG9tLW1vc3QgbGF5ZXIuIEl0cyBjb250ZW50cyBhcmUgZWl0aGVyIG9wYXF1ZSBvciBub3Qs
IGFuZCBpZiBub3QKLSAgICAvLyB0aGVuIHdlIGNhcmUgaWYgaXQgcHJlc2VydmVzIHRoZSBvcGFx
dWVuZXNzIG9mIHRoZSB0YXJnZXQgZGV2aWNlIHdoZW4gaXQgaXMgZHJhd24gaW50byB0aGUgZGV2
aWNlLgotICAgIGJvb2wgcHJlc2VydmVzT3BhcXVlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3Rh
Y2suaXNFbXB0eSgpKQotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZl
c09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotICAgIGVsc2UKLSAgICAgICAg
cHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUobV9jYW52YXNMYXllclN0
YWNrWzBdLnBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7CisgICAgYm9vbCBkcmF3c09wYXF1
ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIGRyYXdUeXBlLCBzb3VyY2VCaXRtYXApOworICAgIGJv
b2wgeGZlcnNPcGFxdWUgPSB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBkcmF3c09wYXF1ZSk7Cisg
ICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwg
ZHJhd3NPcGFxdWUpOwogCiAgICAgaWYgKGZpbGxzQm91bmRzICYmIHhmZXJzT3BhcXVlKQogICAg
ICAgICBtYXJrUmVjdEFzT3BhcXVlKHRhcmdldFJlY3QpOwotICAgIGVsc2UgaWYgKFNrUmVjdDo6
SW50ZXJzZWN0cyh0YXJnZXRSZWN0LCBtX29wYXF1ZVJlY3QpICYmICFwcmVzZXJ2ZXNPcGFxdWUp
CisgICAgZWxzZSBpZiAoIXByZXNlcnZlc09wYXF1ZSkKICAgICAgICAgbWFya1JlY3RBc05vbk9w
YXF1ZSh0YXJnZXRSZWN0KTsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3VW5i
b3VuZGVkKGNvbnN0IFNrUGFpbnQmIHBhaW50KQogewotICAgIC8vIFByZXNlcnZpbmcgb3BhcXVl
IG9ubHkgbWF0dGVycyBmb3IgdGhlIGJvdHRvbS1tb3N0IGxheWVyLiBJdHMgY29udGVudHMgYXJl
IGVpdGhlciBvcGFxdWUgb3Igbm90LCBhbmQgaWYgbm90Ci0gICAgLy8gdGhlbiB3ZSBjYXJlIGlm
IGl0IHByZXNlcnZlcyB0aGUgb3BhcXVlbmVzcyBvZiB0aGUgdGFyZ2V0IGRldmljZSB3aGVuIGl0
IGlzIGRyYXduIGludG8gdGhlIGRldmljZS4KLSAgICBib29sIHByZXNlcnZlc09wYXF1ZTsKLQot
ICAgIGJvb2wgY2hlY2tGaWxsT25seSA9IGZhbHNlOwotICAgIGlmIChtX2NhbnZhc0xheWVyU3Rh
Y2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJvb2wgbGFzdExheWVyRHJhd3NPcGFxdWUgPSBwYWlu
dElzT3BhcXVlKHBhaW50LCAwLCBjaGVja0ZpbGxPbmx5KTsKLSAgICAgICAgcHJlc2VydmVzT3Bh
cXVlID0geGZlcm1vZGVQcmVzZXJ2ZXNPcGFxdWUocGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVl
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBib29sIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFp
bnRJc09wYXF1ZShtX2NhbnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkp
OwotICAgICAgICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShtX2Nh
bnZhc0xheWVyU3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKLSAgICB9Cisg
ICAgYm9vbCBkcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFxdWUocGFpbnQsIEZpbGxPclN0cm9rZSwg
MCk7CisgICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShw
YWludCwgZHJhd3NPcGFxdWUpOwogCi0gICAgaWYgKCFwcmVzZXJ2ZXNPcGFxdWUpIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0IHdhcyBkcmF3biBvbiBzbyBqdXN0IGRlc3Ryb3kgdGhl
IGtub3duIG9wYXF1ZSBhcmVhLgotICAgICAgICBtX29wYXF1ZVJlY3QgPSBTa1JlY3Q6Ok1ha2VF
bXB0eSgpOwotICAgIH0KKyAgICBpZiAocHJlc2VydmVzT3BhcXVlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtYXJrQWxsQXNOb25PcGFxdWUoKTsKK30KKwordm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjphcHBseU9wYXF1ZVJlZ2lvbkZyb21MYXllcihjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBj
b250ZXh0LCBjb25zdCBTa1JlY3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYgcGFp
bnQpCit7CisgICAgU2tSZWN0IGRldmljZUNsaXBSZWN0OworICAgIGJvb2wgZGV2aWNlQ2xpcElz
QVJlY3QgPSBnZXREZXZpY2VDbGlwQXNSZWN0KGNvbnRleHQsIGRldmljZUNsaXBSZWN0KTsKKwor
ICAgIGlmIChkZXZpY2VDbGlwUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFNrUmVjdCBzb3VyY2VPcGFxdWVSZWN0ID0gbGF5ZXJPcGFxdWVSZWN0OworICAgIC8vIFNhdmUg
dGhlIG9wYXF1ZSBhcmVhIGluIHRoZSBkZXN0aW5hdGlvbiwgc28gd2UgY2FuIHByZXNlcnZlIHRo
ZSBwYXJ0cyBvZiBpdCB1bmRlciB0aGUgc291cmNlIG9wYXF1ZSBhcmVhIGlmIHBvc3NpYmxlLgor
ICAgIFNrUmVjdCBkZXN0aW5hdGlvbk9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVS
ZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKworICAgIGJvb2wgb3V0c2lk
ZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1
ZShwYWludCwgZmFsc2UpOworICAgIGlmICghb3V0c2lkZVNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2
ZXNPcGFxdWUpCisgICAgICAgIG1hcmtSZWN0QXNOb25PcGFxdWUoZGV2aWNlQ2xpcFJlY3QpOwor
CisgICAgaWYgKCFkZXZpY2VDbGlwSXNBUmVjdCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
c291cmNlT3BhcXVlUmVjdC5pbnRlcnNlY3QoZGV2aWNlQ2xpcFJlY3QpKQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSA9IHBhaW50SXNPcGFx
dWUocGFpbnQsIEZpbGxPbmx5LCAwKTsKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3RYZmVyc09w
YXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1
ZSk7CisgICAgYm9vbCBzb3VyY2VPcGFxdWVSZWN0UHJlc2VydmVzT3BhcXVlID0geGZlcm1vZGVQ
cmVzZXJ2ZXNPcGFxdWUocGFpbnQsIHNvdXJjZU9wYXF1ZVJlY3REcmF3c09wYXF1ZSk7CisKKyAg
ICAvLyBJZiB0aGUgbGF5ZXIncyBvcGFxdWUgYXJlYSBpcyBiZWluZyBkcmF3biBvcGFxdWUgaW4g
dGhlIGxheWVyIGJlbG93LCB0aGVuIG1hcmsgaXQgb3BhcXVlLiBPdGhlcndpc2UsCisgICAgLy8g
aWYgaXQgcHJlc2VydmVzIG9wYXF1ZSB0aGVuIGtlZXAgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUg
dHdvLgorICAgIGlmIChzb3VyY2VPcGFxdWVSZWN0WGZlcnNPcGFxdWUpCisgICAgICAgIG1hcmtS
ZWN0QXNPcGFxdWUoc291cmNlT3BhcXVlUmVjdCk7CisgICAgZWxzZSBpZiAoc291cmNlT3BhcXVl
UmVjdFByZXNlcnZlc09wYXF1ZSAmJiBzb3VyY2VPcGFxdWVSZWN0LmludGVyc2VjdChkZXN0aW5h
dGlvbk9wYXF1ZVJlY3QpKQorICAgICAgICBtYXJrUmVjdEFzT3BhcXVlKHNvdXJjZU9wYXF1ZVJl
Y3QpOwogfQogCiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNPcGFxdWUoY29uc3Qg
U2tSZWN0JiByZWN0KQpAQCAtMzI2LDMxICszNTcsMzMgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjptYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKICAgICAvLyByZWN0YW5nbGUg
dGhlbiB3ZSBkbyB0aGF0LCBhcyB0aGF0IGlzIHRoZSBjaGVhcGVzdCB3YXkgdG8gaW5jcmVhc2Ug
dGhlIGFyZWEgcmV0dXJuZWQKICAgICAvLyB3aXRob3V0IGluY3JlYXNpbmcgdGhlIGNvbXBsZXhp
dHkuCiAKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJhY2tpbmdPcGFxdWVSZWN0
KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKwogICAgIGlmIChyZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX29wYXF1ZVJlY3QuY29udGFpbnMocmVj
dCkpCisgICAgaWYgKG9wYXF1ZVJlY3QuY29udGFpbnMocmVjdCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7Ci0gICAgICAgIG1fb3BhcXVl
UmVjdCA9IHJlY3Q7CisgICAgaWYgKHJlY3QuY29udGFpbnMob3BhcXVlUmVjdCkpIHsKKyAgICAg
ICAgb3BhcXVlUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
cmVjdC5mVG9wIDw9IG1fb3BhcXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29wYXF1
ZVJlY3QuZkJvdHRvbSkgewotICAgICAgICBpZiAocmVjdC5mTGVmdCA8IG1fb3BhcXVlUmVjdC5m
TGVmdCAmJiByZWN0LmZSaWdodCA+PSBtX29wYXF1ZVJlY3QuZkxlZnQpCi0gICAgICAgICAgICBt
X29wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OwotICAgICAgICBpZiAocmVjdC5mUmlnaHQg
PiBtX29wYXF1ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0LmZSaWdo
dCkKLSAgICAgICAgICAgIG1fb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsKLSAgICB9
IGVsc2UgaWYgKHJlY3QuZkxlZnQgPD0gbV9vcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0
ID49IG1fb3BhcXVlUmVjdC5mUmlnaHQpIHsKLSAgICAgICAgaWYgKHJlY3QuZlRvcCA8IG1fb3Bh
cXVlUmVjdC5mVG9wICYmIHJlY3QuZkJvdHRvbSA+PSBtX29wYXF1ZVJlY3QuZlRvcCkKLSAgICAg
ICAgICAgIG1fb3BhcXVlUmVjdC5mVG9wID0gcmVjdC5mVG9wOwotICAgICAgICBpZiAocmVjdC5m
Qm90dG9tID4gbV9vcGFxdWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG1fb3BhcXVlUmVj
dC5mQm90dG9tKQotICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZCb3R0b20gPSByZWN0LmZCb3R0
b207CisgICAgaWYgKHJlY3QuZlRvcCA8PSBvcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9t
ID49IG9wYXF1ZVJlY3QuZkJvdHRvbSkgeworICAgICAgICBpZiAocmVjdC5mTGVmdCA8IG9wYXF1
ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmlnaHQgPj0gb3BhcXVlUmVjdC5mTGVmdCkKKyAgICAgICAg
ICAgIG9wYXF1ZVJlY3QuZkxlZnQgPSByZWN0LmZMZWZ0OworICAgICAgICBpZiAocmVjdC5mUmln
aHQgPiBvcGFxdWVSZWN0LmZSaWdodCAmJiByZWN0LmZMZWZ0IDw9IG9wYXF1ZVJlY3QuZlJpZ2h0
KQorICAgICAgICAgICAgb3BhcXVlUmVjdC5mUmlnaHQgPSByZWN0LmZSaWdodDsKKyAgICB9IGVs
c2UgaWYgKHJlY3QuZkxlZnQgPD0gb3BhcXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBv
cGFxdWVSZWN0LmZSaWdodCkgeworICAgICAgICBpZiAocmVjdC5mVG9wIDwgb3BhcXVlUmVjdC5m
VG9wICYmIHJlY3QuZkJvdHRvbSA+PSBvcGFxdWVSZWN0LmZUb3ApCisgICAgICAgICAgICBvcGFx
dWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7CisgICAgICAgIGlmIChyZWN0LmZCb3R0b20gPiBvcGFx
dWVSZWN0LmZCb3R0b20gJiYgcmVjdC5mVG9wIDw9IG9wYXF1ZVJlY3QuZkJvdHRvbSkKKyAgICAg
ICAgICAgIG9wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJvdHRvbTsKICAgICB9CiAKLSAgICBs
b25nIG9wYXF1ZUFyZWEgPSAobG9uZyltX29wYXF1ZVJlY3Qud2lkdGgoKSAqIChsb25nKW1fb3Bh
cXVlUmVjdC5oZWlnaHQoKTsKKyAgICBsb25nIG9wYXF1ZUFyZWEgPSAobG9uZylvcGFxdWVSZWN0
LndpZHRoKCkgKiAobG9uZylvcGFxdWVSZWN0LmhlaWdodCgpOwogICAgIGxvbmcgYXJlYSA9IChs
b25nKXJlY3Qud2lkdGgoKSAqIChsb25nKXJlY3QuaGVpZ2h0KCk7CiAgICAgaWYgKGFyZWEgPiBv
cGFxdWVBcmVhKQotICAgICAgICBtX29wYXF1ZVJlY3QgPSByZWN0OworICAgICAgICBvcGFxdWVS
ZWN0ID0gcmVjdDsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzTm9uT3Bh
cXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKQEAgLTM1OCwzNCArMzkxLDQzIEBAIHZvaWQgT3BhcXVl
UmVnaW9uU2tpYTo6bWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmIHJlY3QpCiAgICAg
Ly8gV2Ugd2FudCB0byBrZWVwIGFzIG11Y2ggb2YgdGhlIGN1cnJlbnQgb3BhcXVlIHJlY3Rhbmds
ZSBhcyB3ZSBjYW4sIHNvIGZpbmQgdGhlIG9uZSBsYXJnZXN0CiAgICAgLy8gcmVjdGFuZ2xlIGlu
c2lkZSBtX29wYXF1ZVJlY3QgdGhhdCBkb2VzIG5vdCBpbnRlcnNlY3Qgd2l0aCB8cmVjdHwuCiAK
LSAgICBpZiAocmVjdC5jb250YWlucyhtX29wYXF1ZVJlY3QpKSB7Ci0gICAgICAgIG1fb3BhcXVl
UmVjdC5zZXRFbXB0eSgpOworICAgIFNrUmVjdCYgb3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2lu
Z09wYXF1ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOworCisgICAgaWYg
KCFTa1JlY3Q6OkludGVyc2VjdHMocmVjdCwgb3BhcXVlUmVjdCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAocmVjdC5jb250YWlucyhvcGFxdWVSZWN0KSkgeworICAgICAgICBtYXJrQWxsQXNO
b25PcGFxdWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCBkZWx0YUxlZnQg
PSByZWN0LmZMZWZ0IC0gbV9vcGFxdWVSZWN0LmZMZWZ0OwotICAgIGludCBkZWx0YVJpZ2h0ID0g
bV9vcGFxdWVSZWN0LmZSaWdodCAtIHJlY3QuZlJpZ2h0OwotICAgIGludCBkZWx0YVRvcCA9IHJl
Y3QuZlRvcCAtIG1fb3BhcXVlUmVjdC5mVG9wOwotICAgIGludCBkZWx0YUJvdHRvbSA9IG1fb3Bh
cXVlUmVjdC5mQm90dG9tIC0gcmVjdC5mQm90dG9tOworICAgIGludCBkZWx0YUxlZnQgPSByZWN0
LmZMZWZ0IC0gb3BhcXVlUmVjdC5mTGVmdDsKKyAgICBpbnQgZGVsdGFSaWdodCA9IG9wYXF1ZVJl
Y3QuZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7CisgICAgaW50IGRlbHRhVG9wID0gcmVjdC5mVG9wIC0g
b3BhcXVlUmVjdC5mVG9wOworICAgIGludCBkZWx0YUJvdHRvbSA9IG9wYXF1ZVJlY3QuZkJvdHRv
bSAtIHJlY3QuZkJvdHRvbTsKIAotICAgIC8vIGhvcml6b250YWwgaXMgdGhlIGxhcmdlciBvZiB0
aGUgdHdvIHJlY3RhbmdsZXMgdG8gdGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHxyZWN0fCBh
bmQgaW5zaWRlIG1fb3BhcXVlUmVjdC4KLSAgICAvLyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9m
IHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBiZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBtX29w
YXF1ZVJlY3QuCi0gICAgU2tSZWN0IGhvcml6b250YWwgPSBtX29wYXF1ZVJlY3Q7CisgICAgLy8g
aG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0aGUgbGVm
dCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8IGFuZCBpbnNpZGUgb3BhcXVlUmVjdC4KKyAgICAv
LyB2ZXJ0aWNhbCBpcyB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcmVjdGFuZ2xlcyBhYm92ZSBvciBi
ZWxvdyB8cmVjdHwgYW5kIGluc2lkZSBvcGFxdWVSZWN0LgorICAgIFNrUmVjdCBob3Jpem9udGFs
ID0gb3BhcXVlUmVjdDsKICAgICBpZiAoZGVsdGFUb3AgPiBkZWx0YUJvdHRvbSkKICAgICAgICAg
aG9yaXpvbnRhbC5mQm90dG9tID0gcmVjdC5mVG9wOwogICAgIGVsc2UKICAgICAgICAgaG9yaXpv
bnRhbC5mVG9wID0gcmVjdC5mQm90dG9tOwotICAgIFNrUmVjdCB2ZXJ0aWNhbCA9IG1fb3BhcXVl
UmVjdDsKKyAgICBTa1JlY3QgdmVydGljYWwgPSBvcGFxdWVSZWN0OwogICAgIGlmIChkZWx0YUxl
ZnQgPiBkZWx0YVJpZ2h0KQogICAgICAgICB2ZXJ0aWNhbC5mUmlnaHQgPSByZWN0LmZMZWZ0Owog
ICAgIGVsc2UKICAgICAgICAgdmVydGljYWwuZkxlZnQgPSByZWN0LmZSaWdodDsKIAogICAgIGlm
ICgobG9uZylob3Jpem9udGFsLndpZHRoKCkgKiAobG9uZylob3Jpem9udGFsLmhlaWdodCgpID4g
KGxvbmcpdmVydGljYWwud2lkdGgoKSAqIChsb25nKXZlcnRpY2FsLmhlaWdodCgpKQotICAgICAg
ICBtX29wYXF1ZVJlY3QgPSBob3Jpem9udGFsOworICAgICAgICBvcGFxdWVSZWN0ID0gaG9yaXpv
bnRhbDsKICAgICBlbHNlCi0gICAgICAgIG1fb3BhcXVlUmVjdCA9IHZlcnRpY2FsOworICAgICAg
ICBvcGFxdWVSZWN0ID0gdmVydGljYWw7CiB9CiAKK3ZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFy
a0FsbEFzTm9uT3BhcXVlKCkKK3sKKyAgICBTa1JlY3QmIG9wYXF1ZVJlY3QgPSBjdXJyZW50VHJh
Y2tpbmdPcGFxdWVSZWN0KG1fb3BhcXVlUmVjdCwgbV9jYW52YXNMYXllclN0YWNrKTsKKyAgICBv
cGFxdWVSZWN0LnNldEVtcHR5KCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvT3BhcXVlUmVnaW9u
U2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdp
b25Ta2lhLmgKaW5kZXggODQ0MzZhM2M5YjYxNWIxY2MyZjBjZTIwN2I5YmFlNTViM2M3NTE5Yi4u
YzU1OWYwMTE2NTNmMWUwYTc1YmViYTk0M2Q3MGUwOTJhMDc4ZTkwZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lh
LmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIEludFJlY3QgYXNSZWN0KCkgY29uc3Q7
CiAKICAgICB2b2lkIHB1c2hDYW52YXNMYXllcihjb25zdCBTa1BhaW50Kik7Ci0gICAgdm9pZCBw
b3BDYW52YXNMYXllcigpOworICAgIHZvaWQgcG9wQ2FudmFzTGF5ZXIoY29uc3QgUGxhdGZvcm1D
b250ZXh0U2tpYSopOwogCiAgICAgdm9pZCBzZXRJbWFnZU1hc2soY29uc3QgU2tSZWN0JiBpbWFn
ZU9wYXF1ZVJlY3QpOwogCkBAIC02MiwyMSArNjIsMTYgQEAgcHVibGljOgogICAgIHZvaWQgZGlk
RHJhd1BvaW50cyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgU2tDYW52YXM6OlBvaW50TW9k
ZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtdLCBjb25zdCBTa1BhaW50Jik7CiAgICAg
dm9pZCBkaWREcmF3Qm91bmRlZChjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tS
ZWN0JiwgY29uc3QgU2tQYWludCYpOwogCi1wcml2YXRlOgogICAgIGVudW0gRHJhd1R5cGUgewog
ICAgICAgICBGaWxsT25seSwKICAgICAgICAgRmlsbE9yU3Ryb2tlCiAgICAgfTsKIAotICAgIHZv
aWQgZGlkRHJhdyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tSZWN0JiwgY29u
c3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiBzb3VyY2VCaXRtYXAsIGJvb2wgZmlsbHNCb3Vu
ZHMsIERyYXdUeXBlKTsKLSAgICB2b2lkIGRpZERyYXdVbmJvdW5kZWQoY29uc3QgU2tQYWludCYp
OwotICAgIHZvaWQgbWFya1JlY3RBc09wYXF1ZShjb25zdCBTa1JlY3QmKTsKLSAgICB2b2lkIG1h
cmtSZWN0QXNOb25PcGFxdWUoY29uc3QgU2tSZWN0Jik7Ci0KLSAgICBTa1JlY3QgbV9vcGFxdWVS
ZWN0OwotCiAgICAgc3RydWN0IENhbnZhc0xheWVyU3RhdGUgewotICAgICAgICBDYW52YXNMYXll
clN0YXRlKCkgOiBoYXNJbWFnZU1hc2soZmFsc2UpIHsgfQorICAgICAgICBDYW52YXNMYXllclN0
YXRlKCkKKyAgICAgICAgICAgIDogaGFzSW1hZ2VNYXNrKGZhbHNlKQorICAgICAgICAgICAgLCBv
cGFxdWVSZWN0KFNrUmVjdDo6TWFrZUVtcHR5KCkpCisgICAgICAgIHsgfQogCiAgICAgICAgIFNr
UGFpbnQgcGFpbnQ7CiAKQEAgLTg0LDggKzc5LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wg
aGFzSW1hZ2VNYXNrOwogICAgICAgICAvLyBUaGUgb3BhcXVlIGFyZWEgaW4gdGhlIGltYWdlIG1h
c2suCiAgICAgICAgIFNrUmVjdCBpbWFnZU9wYXF1ZVJlY3Q7CisKKyAgICAgICAgU2tSZWN0IG9w
YXF1ZVJlY3Q7CiAgICAgfTsKIAorcHJpdmF0ZToKKyAgICB2b2lkIGRpZERyYXcoY29uc3QgUGxh
dGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmLCBjb25zdCBT
a0JpdG1hcCogc291cmNlQml0bWFwLCBib29sIGZpbGxzQm91bmRzLCBEcmF3VHlwZSk7CisgICAg
dm9pZCBkaWREcmF3VW5ib3VuZGVkKGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIGFwcGx5T3Bh
cXVlUmVnaW9uRnJvbUxheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBTa1Jl
Y3QmIGxheWVyT3BhcXVlUmVjdCwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgbWFya1JlY3RB
c09wYXF1ZShjb25zdCBTa1JlY3QmKTsKKyAgICB2b2lkIG1hcmtSZWN0QXNOb25PcGFxdWUoY29u
c3QgU2tSZWN0Jik7CisgICAgdm9pZCBtYXJrQWxsQXNOb25PcGFxdWUoKTsKKworICAgIFNrUmVj
dCBtX29wYXF1ZVJlY3Q7CisKICAgICBWZWN0b3I8Q2FudmFzTGF5ZXJTdGF0ZSwgMz4gbV9jYW52
YXNMYXllclN0YWNrOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggOWMwYWNk
N2Y0YzQ3MThkYTI2MjhjNTFkZWQxY2MzM2M0YjA3ZjI2NC4uYTM3MzA0MGRmNTY4NWM1NWJkM2Zk
NzFmMzk1YzNiMjkzZjI5NWI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0yNDgs
NyArMjQ4LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlTGF5ZXIoKQogewog
ICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CiAgICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCi0g
ICAgICAgIG1fb3BhcXVlUmVnaW9uLnBvcENhbnZhc0xheWVyKCk7CisgICAgICAgIG1fb3BhcXVl
UmVnaW9uLnBvcENhbnZhc0xheWVyKHRoaXMpOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BsYXRmb3JtQ29udGV4dFNraWFU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QuY3BwCmluZGV4IGRjNWUzMTk5MjE4ZDM4NDg1ZTc1N2YyOTlmNzk0MDFiN2Y1YTM0YTIu
LjU4N2RlNTVlMGVlOWM3MDZlMDk1YzMyOGUwNjEwNzk5NTI2ZGZhNzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tpYVRlc3Qu
Y3BwCkBAIC0zOSw5ICszOSw5IEBAIG5hbWVzcGFjZSB7CiAKICNkZWZpbmUgRVhQRUNUX0VRX1JF
Q1QoYSwgYikgXAogICAgIEVYUEVDVF9FUShhLngoKSwgYi54KCkpOyBcCi0gICAgRVhQRUNUX0VR
KGEubWF4WCgpLCBiLm1heFgoKSk7IFwKICAgICBFWFBFQ1RfRVEoYS55KCksIGIueSgpKTsgXAot
ICAgIEVYUEVDVF9FUShhLm1heFkoKSwgYi5tYXhZKCkpOworICAgIEVYUEVDVF9FUShhLndpZHRo
KCksIGIud2lkdGgoKSk7IFwKKyAgICBFWFBFQ1RfRVEoYS5oZWlnaHQoKSwgYi5oZWlnaHQoKSk7
CiAKICNkZWZpbmUgRVhQRUNUX1BJWEVMU19NQVRDSChiaXRtYXAsIG9wYXF1ZVJlY3QpIFwKIHsg
XApAQCAtMjI2LDkgKzIyNiw5MCBAQCBURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFj
a09wYXF1ZUNsaXBUZXN0KQogICAgIGNvbnRleHQuc2F2ZSgpOwogICAgIGNvbnRleHQuY2xpcFRv
SW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgRmxvYXRSZWN0KDMwLCAzMCwgMTAsIDEwKSk7
CiAgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCA5MCwgOTApLCBvcGFxdWUs
IENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQu
cmVzdG9yZSgpOwogICAgIEVYUEVDVF9FUV9SRUNUKEludFJlY3QoKSwgcGxhdGZvcm1Db250ZXh0
Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKICAgICBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1h
cCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKLSAgICBjb250ZXh0
LnJlc3RvcmUoKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwgdHJhY2tJbWFn
ZU1hc2spCit7CisgICAgU2tCaXRtYXAgYml0bWFwOworICAgIGJpdG1hcC5zZXRDb25maWcoU2tC
aXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLCA0MDAsIDQwMCk7CisgICAgYml0bWFwLmFsbG9jUGl4
ZWxzKCk7CisgICAgYml0bWFwLmVyYXNlQ29sb3IoMCk7CisgICAgU2tDYW52YXMgY2FudmFzKGJp
dG1hcCk7CisKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIHBsYXRmb3JtQ29udGV4dCgmY2FudmFz
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VHJhY2tPcGFxdWVSZWdpb24odHJ1ZSk7CisgICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisKKyAgICBDb2xvciBv
cGFxdWUoMS4wZiwgMC4wZiwgMC4wZiwgMS4wZik7CisgICAgQ29sb3IgYWxwaGEoMC4wZiwgMC4w
ZiwgMC4wZiwgMC4wZik7CisKKyAgICAvLyBJbWFnZSBtYXNrcyBhcmUgZG9uZSBieSBkcmF3aW5n
IGEgYml0bWFwIGludG8gYSB0cmFuc3BhcmVuY3kgbGF5ZXIgdGhhdCB1c2VzIERzdEluIHRvIG1h
c2sKKyAgICAvLyBvdXQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgYmVsb3cgdGhhdCBpcyBmaWxsZWQg
d2l0aCB0aGUgbWFzayBjb2xvci4gSW4gdGhlIGVuZCB0aGlzIHNob3VsZAorICAgIC8vIG5vdCBi
ZSBtYXJrZWQgb3BhcXVlLgorCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEp
OworICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KDEwLCAxMCwgMTAsIDEwKSwgb3BhcXVl
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZURlc3RpbmF0aW9uSW4pOworICAgIGNv
bnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKKworICAgIE93blB0cjxJbWFnZUJ1ZmZl
cj4gYWxwaGFJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEwMCkpOwor
ICAgIGFscGhhSW1hZ2UtPmNvbnRleHQoKS0+ZmlsbFJlY3QoSW50UmVjdCgwLCAwLCAxMDAsIDEw
MCksIGFscGhhLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKworICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQuZHJhd0ltYWdl
QnVmZmVyKGFscGhhSW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdCgx
MCwgMTAsIDEwLCAxMCkpOworCisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwor
ICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKworICAgIEVYUEVDVF9FUV9SRUNU
KEludFJlY3QoKSwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1ZVJlZ2lvbigpLmFzUmVjdCgpKTsKKyAg
ICBFWFBFQ1RfUElYRUxTX01BVENIX0VYQUNUKGJpdG1hcCwgcGxhdGZvcm1Db250ZXh0Lm9wYXF1
ZVJlZ2lvbigpLmFzUmVjdCgpKTsKK30KKworVEVTVChQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdCwg
dHJhY2tJbWFnZU1hc2tXaXRoT3BhcXVlUmVjdCkKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7Cisg
ICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDQwMCwgNDAw
KTsKKyAgICBiaXRtYXAuYWxsb2NQaXhlbHMoKTsKKyAgICBiaXRtYXAuZXJhc2VDb2xvcigwKTsK
KyAgICBTa0NhbnZhcyBjYW52YXMoYml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEg
cGxhdGZvcm1Db250ZXh0KCZjYW52YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09w
YXF1ZVJlZ2lvbih0cnVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1D
b250ZXh0KTsKKworICAgIENvbG9yIG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAg
ICBDb2xvciBhbHBoYSgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKKworICAgIC8vIEltYWdlIG1h
c2tzIGFyZSBkb25lIGJ5IGRyYXdpbmcgYSBiaXRtYXAgaW50byBhIHRyYW5zcGFyZW5jeSBsYXll
ciB0aGF0IHVzZXMgRHN0SW4gdG8gbWFzaworICAgIC8vIG91dCBhIHRyYW5zcGFyZW5jeSBsYXll
ciBiZWxvdyB0aGF0IGlzIGZpbGxlZCB3aXRoIHRoZSBtYXNrIGNvbG9yLiBJbiB0aGUgZW5kIHRo
aXMgc2hvdWxkCisgICAgLy8gbm90IGJlIG1hcmtlZCBvcGFxdWUuCisKKyAgICBjb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBjb250ZXh0LmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3Qo
MTAsIDEwLCAxMCwgMTApLCBvcGFxdWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNv
dXJjZU92ZXIpOworCisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
RGVzdGluYXRpb25Jbik7CisgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwor
CisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBhbHBoYUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShJbnRTaXplKDEwMCwgMTAwKSk7CisgICAgYWxwaGFJbWFnZS0+Y29udGV4dCgpLT5maWxsUmVj
dChJbnRSZWN0KDAsIDAsIDEwMCwgMTAwKSwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwor
CisgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7
CisgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgRmxvYXRSZWN0KDEwLCAxMCwgMTAsIDEwKSk7CisKKyAgICAvLyBXZSBjYW4n
dCBoYXZlIGFuIG9wYXF1ZSBtYXNrIGFjdHVhbGx5LCBidXQgd2UgY2FuIHByZXRlbmQgaGVyZSBs
aWtlIGl0IHdvdWxkIGxvb2sgaWYgd2UgZGlkLgorICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRS
ZWN0KDEyLCAxMiwgMywgMyksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRl
U291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAg
Y29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAgRVhQRUNUX0VRX1JFQ1QoSW50
UmVjdCgxMiwgMTIsIDMsIDMpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0
KCkpOworICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0hfRVhBQ1QoYml0bWFwLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwogfQogCiBURVNUKFBsYXRmb3JtQ29udGV4dFNr
aWFUZXN0LCB0cmFja09wYXF1ZUpvaW5UZXN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138652</attachid>
            <date>2012-04-24 14:48:35 -0700</date>
            <delta_ts>2012-04-24 16:58:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-84275-20120424144834.patch</filename>
            <type>text/plain</type>
            <size>23743</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0ODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTVmYTI3YTNkMzExNDgz
YjcxYmY5Njc0ODk2NDhjOTVkNWFhNWU5My4uZDYwMDhjYWJiNzZmYWNmZGY4NzFjYmY5OTA1ODk5
YWE4MjA2NTAyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTA0LTE4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1h
Z2UgbWFza3MgYXJlIGNvbnNpZGVyZWQgb3BhcXVlIGluY29ycmVjdGx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDI3NQorCisgICAgICAgIFJldmll
d2VkIGJ5IEFkcmllbm5lIFdhbGtlci4KKworICAgICAgICBNYXRjaCB0aGUgYmVoYXZpb3VyIG9m
IFNrQ2FudmFzIGxheWVycyBtb3JlIGNsb3NlbHkgd2hpbGUgdHJhY2tpbmcKKyAgICAgICAgb3Bh
cXVlIHBhaW50cy4gU2tDYW52YXMgbGF5ZXJzIGFjdHVhbGx5IGFjdCBhcyBhIHNlcGFyYXRlIGRl
dmljZQorICAgICAgICAoaWUuIHBpeGVscykgYW5kIHdoZW4gdGhlIGxheWVyIGlzIHBvcHBlZCBv
ZmYsIHRoZSBwaXhlbHMgYXJlIGNvcGllZAorICAgICAgICBkb3duIHRvIHRoZSBsYXllciBiZWxv
dy4KKworICAgICAgICBXaGlsZSB3ZSBjYW4gdXNlIHRoZSB0b3RhbCBjbGlwIHRvIGRlY2lkZSB3
aGF0IHBpeGVscyB0aGUgdGhlCisgICAgICAgIGRyYXdpbmcgb3BlcmF0aW9uIHdpbGwgYWZmZWN0
IGluIHRoZSBmaW5hbCBkZXZpY2UsIHRoZSBibGVuZGluZworICAgICAgICBkb3duIHRocm91Z2gg
bGF5ZXJzIG5lZWRzIHRvIGNvbnNpZGVyIGVhY2ggbGF5ZXIgY2FyZWZ1bGx5LgorCisgICAgICAg
IEluIHRoaXMgY2FzZSB0aGUgaW1hZ2UgbWFzayBpcyBkcmF3biBpbnRvIGEgbGF5ZXIgd2hpY2gg
aXMgY29waWVkCisgICAgICAgIGRvd24gdXNpbmcgdGhlIERlc3RpbmF0aW9uSW4gb3BlcmF0aW9u
LiBTaW5jZSB0aGUgbGF5ZXIgY29udGFpbnMKKyAgICAgICAgbm9uLW9wYXF1ZSBwaXhlbHMsIHRo
ZSBEZXN0aW5hdGlvbkluIGNvcHkgY2FuIGRlc3Ryb3kgb3BhcXVlCisgICAgICAgIGFyZWFzIGlu
IHRoZSBuZXh0IGxheWVyLiBXZSBhZGQgT3BhcXVlUmVnaW9uU2tpYTo6RmlsbEJ5Q29weSB0bwor
ICAgICAgICBkaXN0aW5ndWlzaCB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgY29weWluZyBhIGJsb2Nr
IG9mIHBpeGVscywgYW5kIHRoZQorICAgICAgICBhbHBoYSB2YWx1ZXMgYXJlIGVzc2VudGlhbGx5
IHVua25vd24uCisKKyAgICAgICAgVW5pdCB0ZXN0OiBQbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC50
cmFja0ltYWdlTWFzaworICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQ29udGV4dFNraWFUZXN0
LnRyYWNrSW1hZ2VNYXNrV2l0aE9wYXF1ZVJlY3QKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYWludElz
T3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmFwcGx5T3BhcXVl
UmVnaW9uRnJvbUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OnB1
c2hDYW52YXNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpwb3BD
YW52YXNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3UGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjpPcGFxdWVSZWdpb25Ta2lhOjpkaWREcmF3UG9pbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdCb3VuZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6T3BhcXVlUmVnaW9uU2tpYTo6ZGlkRHJhd1VuYm91bmRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGFxdWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNOb25PcGFxdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6T3BhcXVlUmVnaW9uU2tpYTo6bWFya0FsbEFzTm9uT3BhcXVlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaDoKKyAgICAgICAgKE9wYXF1ZVJl
Z2lvblNraWEpOgorICAgICAgICAoQ2FudmFzTGF5ZXJTdGF0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnJlc3RvcmVMYXllcik6CisKIDIwMTItMDQtMjAgIEFk
cmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21pdW1dIFJl
ZmFjdG9yIG9wYXF1ZSBjb250ZW50IHRyYW5zZm9ybSBvdXQgb2YgU2tpYSBjb250ZXh0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDY2MjlmNmVkNWEzZDg0YTk2N2YyNThjYTkwMjMzYmY5
NzkxYmQxNzQuLjNmMmU5MjM5MTI1MDQ0OTAyMzkxNzQ5Y2M0YmU0YjBkZWJjODA4NjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDQtMTggIERhbmEg
SmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbWFn
ZSBtYXNrcyBhcmUgY29uc2lkZXJlZCBvcGFxdWUgaW5jb3JyZWN0bHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0Mjc1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQWRyaWVubmUgV2Fsa2VyLgorCisgICAgICAgICogdGVzdHMvUGxhdGZvcm1Db250ZXh0
U2tpYVRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpURVNU
KToKKwogMjAxMi0wNC0yMCAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gUmVmYWN0b3Igb3BhcXVlIGNvbnRlbnQgdHJhbnNmb3JtIG91dCBv
ZiBTa2lhIGNvbnRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuY3BwCmluZGV4IDY1OTM2Y2MzYTM1MDc2MTk4
ZWVjNzVkYTJlZTZlYTgzMGUyNzI5ZmEuLjhmNmUzMjQ4M2UwY2Q2YTJkN2M3ZmEwZDk5MzM2MWQy
ZjdkN2EwMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvT3BhcXVlUmVnaW9uU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9PcGFxdWVSZWdpb25Ta2lhLmNwcApAQCAtMTI0LDEwICsxMjQsMTEgQEAgc3Rh
dGljIGlubGluZSBib29sIHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKGNvbnN0IFNrUGFpbnQmIHBh
aW50LCBib29sIHNyY0lzT3BhcXUKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBwaXhlbHMg
cGFpbnRlZCB3aWxsIGJlIG9wYXF1ZS4KLXN0YXRpYyBpbmxpbmUgYm9vbCBwYWludElzT3BhcXVl
KGNvbnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBTa0JpdG1hcCogYml0bWFwID0gMCwgYm9vbCBj
aGVja0ZpbGxPbmx5ID0gZmFsc2UpCitzdGF0aWMgaW5saW5lIGJvb2wgcGFpbnRJc09wYXF1ZShj
b25zdCBTa1BhaW50JiBwYWludCwgT3BhcXVlUmVnaW9uU2tpYTo6RHJhd1R5cGUgZHJhd1R5cGUs
IGNvbnN0IFNrQml0bWFwKiBiaXRtYXApCiB7CiAgICAgaWYgKHBhaW50LmdldEFscGhhKCkgPCAw
eEZGKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZHJh
d1R5cGUgIT0gT3BhcXVlUmVnaW9uU2tpYTo6RmlsbE9yU3Ryb2tlOwogICAgIGlmICghY2hlY2tG
aWxsT25seSAmJiBwYWludC5nZXRTdHlsZSgpICE9IFNrUGFpbnQ6OmtGaWxsX1N0eWxlICYmIHBh
aW50LmlzQW50aUFsaWFzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTa1NoYWRlciog
c2hhZGVyID0gcGFpbnQuZ2V0U2hhZGVyKCk7CkBAIC0xNDcsNiArMTQ4LDMwIEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBwYWludElzT3BhcXVlKGNvbnN0IFNrUGFpbnQmIHBhaW50LCBjb25zdCBTa0Jp
dG1hcCogYml0bWFwID0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gUmV0dXJucyB0cnVlIGlm
IHRoZXJlIGlzIGEgcmVjdGFuZ3VsYXIgY2xpcCwgd2l0aCB0aGUgcmVzdWx0IGluIHxkZXZpY2VD
bGlwUmVjdHwuCitzdGF0aWMgaW5saW5lIGJvb2wgZ2V0RGV2aWNlQ2xpcEFzUmVjdChjb25zdCBQ
bGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBTa1JlY3QmIGRldmljZUNsaXBSZWN0KQorewor
ICAgIC8vIEdldCB0aGUgY3VycmVudCBjbGlwIGluIGRldmljZSBjb29yZGluYXRlIHNwYWNlLgor
ICAgIGlmIChjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xpcFR5cGUoKSAhPSBTa0NhbnZhczo6a1Jl
Y3RfQ2xpcFR5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNrSVJlY3QgZGV2aWNl
Q2xpcElSZWN0OworICAgIGlmIChjb250ZXh0LT5jYW52YXMoKS0+Z2V0Q2xpcERldmljZUJvdW5k
cygmZGV2aWNlQ2xpcElSZWN0KSkKKyAgICAgICAgZGV2aWNlQ2xpcFJlY3Quc2V0KGRldmljZUNs
aXBJUmVjdCk7CisgICAgZWxzZQorICAgICAgICBkZXZpY2VDbGlwUmVjdC5zZXRFbXB0eSgpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgU2tSZWN0JiBjdXJyZW50VHJh
Y2tpbmdPcGFxdWVSZWN0KFNrUmVjdCYgcm9vdE9wYXF1ZVJlY3QsIFZlY3RvcjxPcGFxdWVSZWdp
b25Ta2lhOjpDYW52YXNMYXllclN0YXRlLCAzPiYgY2FudmFzTGF5ZXJTdGFjaykKK3sKKyAgICAv
LyBJZiB3ZSBhcmUgZHJhd2luZyBpbnRvIGEgY2FudmFzIGxheWVyLCB0aGVuIHRyYWNrIHRoZSBv
cGFxdWUgcmVjdCBpbiB0aGF0IGxheWVyLgorICAgIGlmICghY2FudmFzTGF5ZXJTdGFjay5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBjYW52YXNMYXllclN0YWNrLmxhc3QoKS5vcGFxdWVSZWN0
OworICAgIHJldHVybiByb290T3BhcXVlUmVjdDsKK30KKwogdm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjpwdXNoQ2FudmFzTGF5ZXIoY29uc3QgU2tQYWludCogcGFpbnQpCiB7CiAgICAgQ2FudmFzTGF5
ZXJTdGF0ZSBzdGF0ZTsKQEAgLTE1NSw5ICsxODAsMTkgQEAgdm9pZCBPcGFxdWVSZWdpb25Ta2lh
OjpwdXNoQ2FudmFzTGF5ZXIoY29uc3QgU2tQYWludCogcGFpbnQpCiAgICAgbV9jYW52YXNMYXll
clN0YWNrLmFwcGVuZChzdGF0ZSk7CiB9CiAKLXZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6cG9wQ2Fu
dmFzTGF5ZXIoKQordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpwb3BDYW52YXNMYXllcihjb25zdCBQ
bGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0KQogeworICAgIGNvbnN0IENhbnZhc0xheWVyU3Rh
dGUmIGNhbnZhc0xheWVyID0gbV9jYW52YXNMYXllclN0YWNrLmxhc3QoKTsKKyAgICBTa1JlY3Qg
bGF5ZXJPcGFxdWVSZWN0ID0gY2FudmFzTGF5ZXIub3BhcXVlUmVjdDsKKyAgICBTa1BhaW50IGxh
eWVyUGFpbnQgPSBjYW52YXNMYXllci5wYWludDsKKworICAgIC8vIEFwcGx5IHRoZSBpbWFnZSBt
YXNrLgorICAgIGlmIChjYW52YXNMYXllci5oYXNJbWFnZU1hc2sgJiYgIWxheWVyT3BhcXVlUmVj
dC5pbnRlcnNlY3QoY2FudmFzTGF5ZXIuaW1hZ2VPcGFxdWVSZWN0KSkKKyAgICAgICAgbGF5ZXJP
cGFxdWVSZWN0LnNldEVtcHR5KCk7CisKICAgICBtX2NhbnZhc0xheWVyU3RhY2sucmVtb3ZlTGFz
dCgpOworCisgICAgYXBwbHlPcGFxdWVSZWdpb25Gcm9tTGF5ZXIoY29udGV4dCwgbGF5ZXJPcGFx
dWVSZWN0LCBsYXllclBhaW50KTsKIH0KIAogdm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpzZXRJbWFn
ZU1hc2soY29uc3QgU2tSZWN0JiBpbWFnZU9wYXF1ZVJlY3QpCkBAIC0yNTQsNjkgKzI4OSw2NSBA
QCB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXcoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tp
YSogY29udGV4dCwgY29uc3QgU2tSZWN0JgogICAgIGlmICghY2FudmFzVHJhbnNmb3JtLm1hcFJl
Y3QoJnRhcmdldFJlY3QpKQogICAgICAgICBmaWxsc0JvdW5kcyA9IGZhbHNlOwogCi0gICAgLy8g
QXBwbHkgdGhlIGN1cnJlbnQgY2xpcCBpbiBkZXZpY2UgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBp
ZiAoY29udGV4dC0+Y2FudmFzKCktPmdldENsaXBUeXBlKCkgIT0gU2tDYW52YXM6OmtSZWN0X0Ns
aXBUeXBlKQorICAgIC8vIEFwcGx5IHRoZSBjdXJyZW50IGNsaXAuCisgICAgU2tSZWN0IGRldmlj
ZUNsaXBSZWN0OworICAgIGlmICghZ2V0RGV2aWNlQ2xpcEFzUmVjdChjb250ZXh0LCBkZXZpY2VD
bGlwUmVjdCkpCiAgICAgICAgIGZpbGxzQm91bmRzID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIFNrSVJlY3QgZGV2aWNlQ2xpcDsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5jYW52YXMoKS0+
Z2V0Q2xpcERldmljZUJvdW5kcygmZGV2aWNlQ2xpcCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmICghdGFyZ2V0UmVjdC5pbnRlcnNlY3QoU2tJbnRUb1NjYWxhcihkZXZpY2VDbGlw
LmZMZWZ0KSwgU2tJbnRUb1NjYWxhcihkZXZpY2VDbGlwLmZUb3ApLCBTa0ludFRvU2NhbGFyKGRl
dmljZUNsaXAuZlJpZ2h0KSwgU2tJbnRUb1NjYWxhcihkZXZpY2VDbGlwLmZCb3R0b20pKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIGNoZWNrRmlsbE9ubHkgPSBkcmF3
VHlwZSA9PSBGaWxsT25seTsKLSAgICBib29sIGxhc3RMYXllckRyYXdzT3BhcXVlID0gcGFpbnRJ
c09wYXF1ZShwYWludCwgc291cmNlQml0bWFwLCBjaGVja0ZpbGxPbmx5KTsKLQotICAgIGJvb2wg
eGZlcnNPcGFxdWUgPSB4ZmVybW9kZUlzT3BhcXVlKHBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1
ZSk7Ci0KLSAgICAvLyBBcHBseSB0aGUgU2tDYW52YXMgbGF5ZXJzIHdlIHdpbGwgYmUgZHJhd2lu
ZyB0aHJvdWdoLgotICAgIGZvciAoc2l6ZV90IGkgPSBtX2NhbnZhc0xheWVyU3RhY2suc2l6ZSgp
OyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IENhbnZhc0xheWVyU3RhdGUmIGNhbnZhc0xh
eWVyID0gbV9jYW52YXNMYXllclN0YWNrW2ktMV07Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIGNv
dWxkIHN0aWxsIHRyYWNrIHRoZSBvcGFxdWUgcGFydCBidXQgaXQncyBhbHdheXMgZW1wdHkgcmln
aHQgbm93IGFueXdheXMuCi0gICAgICAgIGlmIChjYW52YXNMYXllci5oYXNJbWFnZU1hc2sgJiYg
IWNhbnZhc0xheWVyLmltYWdlT3BhcXVlUmVjdC5jb250YWlucyh0YXJnZXRSZWN0KSkKLSAgICAg
ICAgICAgIGZpbGxzQm91bmRzID0gZmFsc2U7Ci0KLSAgICAgICAgYm9vbCBjaGVja0ZpbGxPbmx5
ID0gZHJhd1R5cGUgPT0gRmlsbE9ubHk7Ci0gICAgICAgIGxhc3RMYXllckRyYXdzT3BhcXVlID0g
cGFpbnRJc09wYXF1ZShjYW52YXNMYXllci5wYWludCwgMCwgY2hlY2tGaWxsT25seSk7Ci0gICAg
ICAgIC8vIElmIGFueSBsYXllciBkb2Vzbid0IHBhaW50IG9wYXF1ZSwgdGhlbiB0aGUgcmVzdWx0
IHdpbGwgbm90IGJlIG9wYXF1ZS4KLSAgICAgICAgeGZlcnNPcGFxdWUgJj0geGZlcm1vZGVJc09w
YXF1ZShjYW52YXNMYXllci5wYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotICAgIH0KKyAg
ICBlbHNlIGlmICghdGFyZ2V0UmVjdC5pbnRlcnNlY3QoZGV2aWNlQ2xpcFJlY3QpKQorICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBQcmVzZXJ2aW5nIG9wYXF1ZSBvbmx5IG1hdHRlcnMgZm9yIHRo
ZSBib3R0b20tbW9zdCBsYXllci4gSXRzIGNvbnRlbnRzIGFyZSBlaXRoZXIgb3BhcXVlIG9yIG5v
dCwgYW5kIGlmIG5vdAotICAgIC8vIHRoZW4gd2UgY2FyZSBpZiBpdCBwcmVzZXJ2ZXMgdGhlIG9w
YXF1ZW5lc3Mgb2YgdGhlIHRhcmdldCBkZXZpY2Ugd2hlbiBpdCBpcyBkcmF3biBpbnRvIHRoZSBk
ZXZpY2UuCi0gICAgYm9vbCBwcmVzZXJ2ZXNPcGFxdWU7Ci0gICAgaWYgKG1fY2FudmFzTGF5ZXJT
dGFjay5pc0VtcHR5KCkpCi0gICAgICAgIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2Vy
dmVzT3BhcXVlKHBhaW50LCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSk7Ci0gICAgZWxzZQotICAgICAg
ICBwcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShtX2NhbnZhc0xheWVy
U3RhY2tbMF0ucGFpbnQsIGxhc3RMYXllckRyYXdzT3BhcXVlKTsKKyAgICBib29sIGRyYXdzT3Bh
cXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgZHJhd1R5cGUsIHNvdXJjZUJpdG1hcCk7CisgICAg
Ym9vbCB4ZmVyc09wYXF1ZSA9IHhmZXJtb2RlSXNPcGFxdWUocGFpbnQsIGRyYXdzT3BhcXVlKTsK
KyAgICBib29sIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKHBhaW50
LCBkcmF3c09wYXF1ZSk7CiAKICAgICBpZiAoZmlsbHNCb3VuZHMgJiYgeGZlcnNPcGFxdWUpCiAg
ICAgICAgIG1hcmtSZWN0QXNPcGFxdWUodGFyZ2V0UmVjdCk7Ci0gICAgZWxzZSBpZiAoU2tSZWN0
OjpJbnRlcnNlY3RzKHRhcmdldFJlY3QsIG1fb3BhcXVlUmVjdCkgJiYgIXByZXNlcnZlc09wYXF1
ZSkKKyAgICBlbHNlIGlmICghcHJlc2VydmVzT3BhcXVlKQogICAgICAgICBtYXJrUmVjdEFzTm9u
T3BhcXVlKHRhcmdldFJlY3QpOwogfQogCiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6OmRpZERyYXdV
bmJvdW5kZWQoY29uc3QgU2tQYWludCYgcGFpbnQpCiB7Ci0gICAgLy8gUHJlc2VydmluZyBvcGFx
dWUgb25seSBtYXR0ZXJzIGZvciB0aGUgYm90dG9tLW1vc3QgbGF5ZXIuIEl0cyBjb250ZW50cyBh
cmUgZWl0aGVyIG9wYXF1ZSBvciBub3QsIGFuZCBpZiBub3QKLSAgICAvLyB0aGVuIHdlIGNhcmUg
aWYgaXQgcHJlc2VydmVzIHRoZSBvcGFxdWVuZXNzIG9mIHRoZSB0YXJnZXQgZGV2aWNlIHdoZW4g
aXQgaXMgZHJhd24gaW50byB0aGUgZGV2aWNlLgotICAgIGJvb2wgcHJlc2VydmVzT3BhcXVlOwot
Ci0gICAgYm9vbCBjaGVja0ZpbGxPbmx5ID0gZmFsc2U7Ci0gICAgaWYgKG1fY2FudmFzTGF5ZXJT
dGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgYm9vbCBsYXN0TGF5ZXJEcmF3c09wYXF1ZSA9IHBh
aW50SXNPcGFxdWUocGFpbnQsIDAsIGNoZWNrRmlsbE9ubHkpOwotICAgICAgICBwcmVzZXJ2ZXNP
cGFxdWUgPSB4ZmVybW9kZVByZXNlcnZlc09wYXF1ZShwYWludCwgbGFzdExheWVyRHJhd3NPcGFx
dWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJvb2wgbGFzdExheWVyRHJhd3NPcGFxdWUgPSBw
YWludElzT3BhcXVlKG1fY2FudmFzTGF5ZXJTdGFja1swXS5wYWludCwgMCwgY2hlY2tGaWxsT25s
eSk7Ci0gICAgICAgIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2VydmVzT3BhcXVlKG1f
Y2FudmFzTGF5ZXJTdGFja1swXS5wYWludCwgbGFzdExheWVyRHJhd3NPcGFxdWUpOwotICAgIH0K
KyAgICBib29sIGRyYXdzT3BhcXVlID0gcGFpbnRJc09wYXF1ZShwYWludCwgRmlsbE9yU3Ryb2tl
LCAwKTsKKyAgICBib29sIHByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2VydmVzT3BhcXVl
KHBhaW50LCBkcmF3c09wYXF1ZSk7CiAKLSAgICBpZiAoIXByZXNlcnZlc09wYXF1ZSkgewotICAg
ICAgICAvLyBXZSBkb24ndCBrbm93IHdoYXQgd2FzIGRyYXduIG9uIHNvIGp1c3QgZGVzdHJveSB0
aGUga25vd24gb3BhcXVlIGFyZWEuCi0gICAgICAgIG1fb3BhcXVlUmVjdCA9IFNrUmVjdDo6TWFr
ZUVtcHR5KCk7Ci0gICAgfQorICAgIGlmIChwcmVzZXJ2ZXNPcGFxdWUpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1hcmtBbGxBc05vbk9wYXF1ZSgpOworfQorCit2b2lkIE9wYXF1ZVJlZ2lvblNr
aWE6OmFwcGx5T3BhcXVlUmVnaW9uRnJvbUxheWVyKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEq
IGNvbnRleHQsIGNvbnN0IFNrUmVjdCYgbGF5ZXJPcGFxdWVSZWN0LCBjb25zdCBTa1BhaW50JiBw
YWludCkKK3sKKyAgICBTa1JlY3QgZGV2aWNlQ2xpcFJlY3Q7CisgICAgYm9vbCBkZXZpY2VDbGlw
SXNBUmVjdCA9IGdldERldmljZUNsaXBBc1JlY3QoY29udGV4dCwgZGV2aWNlQ2xpcFJlY3QpOwor
CisgICAgaWYgKGRldmljZUNsaXBSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgU2tSZWN0IHNvdXJjZU9wYXF1ZVJlY3QgPSBsYXllck9wYXF1ZVJlY3Q7CisgICAgLy8gU2F2
ZSB0aGUgb3BhcXVlIGFyZWEgaW4gdGhlIGRlc3RpbmF0aW9uLCBzbyB3ZSBjYW4gcHJlc2VydmUg
dGhlIHBhcnRzIG9mIGl0IHVuZGVyIHRoZSBzb3VyY2Ugb3BhcXVlIGFyZWEgaWYgcG9zc2libGUu
CisgICAgU2tSZWN0IGRlc3RpbmF0aW9uT3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1
ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOworCisgICAgYm9vbCBvdXRz
aWRlU291cmNlT3BhcXVlUmVjdFByZXNlcnZlc09wYXF1ZSA9IHhmZXJtb2RlUHJlc2VydmVzT3Bh
cXVlKHBhaW50LCBmYWxzZSk7CisgICAgaWYgKCFvdXRzaWRlU291cmNlT3BhcXVlUmVjdFByZXNl
cnZlc09wYXF1ZSkKKyAgICAgICAgbWFya1JlY3RBc05vbk9wYXF1ZShkZXZpY2VDbGlwUmVjdCk7
CisKKyAgICBpZiAoIWRldmljZUNsaXBJc0FSZWN0KQorICAgICAgICByZXR1cm47CisgICAgaWYg
KCFzb3VyY2VPcGFxdWVSZWN0LmludGVyc2VjdChkZXZpY2VDbGlwUmVjdCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGJvb2wgc291cmNlT3BhcXVlUmVjdERyYXdzT3BhcXVlID0gcGFpbnRJc09w
YXF1ZShwYWludCwgRmlsbE9ubHksIDApOworICAgIGJvb2wgc291cmNlT3BhcXVlUmVjdFhmZXJz
T3BhcXVlID0geGZlcm1vZGVJc09wYXF1ZShwYWludCwgc291cmNlT3BhcXVlUmVjdERyYXdzT3Bh
cXVlKTsKKyAgICBib29sIHNvdXJjZU9wYXF1ZVJlY3RQcmVzZXJ2ZXNPcGFxdWUgPSB4ZmVybW9k
ZVByZXNlcnZlc09wYXF1ZShwYWludCwgc291cmNlT3BhcXVlUmVjdERyYXdzT3BhcXVlKTsKKwor
ICAgIC8vIElmIHRoZSBsYXllcidzIG9wYXF1ZSBhcmVhIGlzIGJlaW5nIGRyYXduIG9wYXF1ZSBp
biB0aGUgbGF5ZXIgYmVsb3csIHRoZW4gbWFyayBpdCBvcGFxdWUuIE90aGVyd2lzZSwKKyAgICAv
LyBpZiBpdCBwcmVzZXJ2ZXMgb3BhcXVlIHRoZW4ga2VlcCB0aGUgaW50ZXJzZWN0aW9uIG9mIHRo
ZSB0d28uCisgICAgaWYgKHNvdXJjZU9wYXF1ZVJlY3RYZmVyc09wYXF1ZSkKKyAgICAgICAgbWFy
a1JlY3RBc09wYXF1ZShzb3VyY2VPcGFxdWVSZWN0KTsKKyAgICBlbHNlIGlmIChzb3VyY2VPcGFx
dWVSZWN0UHJlc2VydmVzT3BhcXVlICYmIHNvdXJjZU9wYXF1ZVJlY3QuaW50ZXJzZWN0KGRlc3Rp
bmF0aW9uT3BhcXVlUmVjdCkpCisgICAgICAgIG1hcmtSZWN0QXNPcGFxdWUoc291cmNlT3BhcXVl
UmVjdCk7CiB9CiAKIHZvaWQgT3BhcXVlUmVnaW9uU2tpYTo6bWFya1JlY3RBc09wYXF1ZShjb25z
dCBTa1JlY3QmIHJlY3QpCkBAIC0zMjYsMzEgKzM1NywzMyBAQCB2b2lkIE9wYXF1ZVJlZ2lvblNr
aWE6Om1hcmtSZWN0QXNPcGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQogICAgIC8vIHJlY3Rhbmds
ZSB0aGVuIHdlIGRvIHRoYXQsIGFzIHRoYXQgaXMgdGhlIGNoZWFwZXN0IHdheSB0byBpbmNyZWFz
ZSB0aGUgYXJlYSByZXR1cm5lZAogICAgIC8vIHdpdGhvdXQgaW5jcmVhc2luZyB0aGUgY29tcGxl
eGl0eS4KIAorICAgIFNrUmVjdCYgb3BhcXVlUmVjdCA9IGN1cnJlbnRUcmFja2luZ09wYXF1ZVJl
Y3QobV9vcGFxdWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOworCiAgICAgaWYgKHJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fb3BhcXVlUmVjdC5jb250YWlucyhy
ZWN0KSkKKyAgICBpZiAob3BhcXVlUmVjdC5jb250YWlucyhyZWN0KSkKICAgICAgICAgcmV0dXJu
OwotICAgIGlmIChyZWN0LmNvbnRhaW5zKG1fb3BhcXVlUmVjdCkpIHsKLSAgICAgICAgbV9vcGFx
dWVSZWN0ID0gcmVjdDsKKyAgICBpZiAocmVjdC5jb250YWlucyhvcGFxdWVSZWN0KSkgeworICAg
ICAgICBvcGFxdWVSZWN0ID0gcmVjdDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChyZWN0LmZUb3AgPD0gbV9vcGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID49IG1fb3Bh
cXVlUmVjdC5mQm90dG9tKSB7Ci0gICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgbV9vcGFxdWVSZWN0
LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49IG1fb3BhcXVlUmVjdC5mTGVmdCkKLSAgICAgICAgICAg
IG1fb3BhcXVlUmVjdC5mTGVmdCA9IHJlY3QuZkxlZnQ7Ci0gICAgICAgIGlmIChyZWN0LmZSaWdo
dCA+IG1fb3BhcXVlUmVjdC5mUmlnaHQgJiYgcmVjdC5mTGVmdCA8PSBtX29wYXF1ZVJlY3QuZlJp
Z2h0KQotICAgICAgICAgICAgbV9vcGFxdWVSZWN0LmZSaWdodCA9IHJlY3QuZlJpZ2h0OwotICAg
IH0gZWxzZSBpZiAocmVjdC5mTGVmdCA8PSBtX29wYXF1ZVJlY3QuZkxlZnQgJiYgcmVjdC5mUmln
aHQgPj0gbV9vcGFxdWVSZWN0LmZSaWdodCkgewotICAgICAgICBpZiAocmVjdC5mVG9wIDwgbV9v
cGFxdWVSZWN0LmZUb3AgJiYgcmVjdC5mQm90dG9tID49IG1fb3BhcXVlUmVjdC5mVG9wKQotICAg
ICAgICAgICAgbV9vcGFxdWVSZWN0LmZUb3AgPSByZWN0LmZUb3A7Ci0gICAgICAgIGlmIChyZWN0
LmZCb3R0b20gPiBtX29wYXF1ZVJlY3QuZkJvdHRvbSAmJiByZWN0LmZUb3AgPD0gbV9vcGFxdWVS
ZWN0LmZCb3R0b20pCi0gICAgICAgICAgICBtX29wYXF1ZVJlY3QuZkJvdHRvbSA9IHJlY3QuZkJv
dHRvbTsKKyAgICBpZiAocmVjdC5mVG9wIDw9IG9wYXF1ZVJlY3QuZlRvcCAmJiByZWN0LmZCb3R0
b20gPj0gb3BhcXVlUmVjdC5mQm90dG9tKSB7CisgICAgICAgIGlmIChyZWN0LmZMZWZ0IDwgb3Bh
cXVlUmVjdC5mTGVmdCAmJiByZWN0LmZSaWdodCA+PSBvcGFxdWVSZWN0LmZMZWZ0KQorICAgICAg
ICAgICAgb3BhcXVlUmVjdC5mTGVmdCA9IHJlY3QuZkxlZnQ7CisgICAgICAgIGlmIChyZWN0LmZS
aWdodCA+IG9wYXF1ZVJlY3QuZlJpZ2h0ICYmIHJlY3QuZkxlZnQgPD0gb3BhcXVlUmVjdC5mUmln
aHQpCisgICAgICAgICAgICBvcGFxdWVSZWN0LmZSaWdodCA9IHJlY3QuZlJpZ2h0OworICAgIH0g
ZWxzZSBpZiAocmVjdC5mTGVmdCA8PSBvcGFxdWVSZWN0LmZMZWZ0ICYmIHJlY3QuZlJpZ2h0ID49
IG9wYXF1ZVJlY3QuZlJpZ2h0KSB7CisgICAgICAgIGlmIChyZWN0LmZUb3AgPCBvcGFxdWVSZWN0
LmZUb3AgJiYgcmVjdC5mQm90dG9tID49IG9wYXF1ZVJlY3QuZlRvcCkKKyAgICAgICAgICAgIG9w
YXF1ZVJlY3QuZlRvcCA9IHJlY3QuZlRvcDsKKyAgICAgICAgaWYgKHJlY3QuZkJvdHRvbSA+IG9w
YXF1ZVJlY3QuZkJvdHRvbSAmJiByZWN0LmZUb3AgPD0gb3BhcXVlUmVjdC5mQm90dG9tKQorICAg
ICAgICAgICAgb3BhcXVlUmVjdC5mQm90dG9tID0gcmVjdC5mQm90dG9tOwogICAgIH0KIAotICAg
IGxvbmcgb3BhcXVlQXJlYSA9IChsb25nKW1fb3BhcXVlUmVjdC53aWR0aCgpICogKGxvbmcpbV9v
cGFxdWVSZWN0LmhlaWdodCgpOworICAgIGxvbmcgb3BhcXVlQXJlYSA9IChsb25nKW9wYXF1ZVJl
Y3Qud2lkdGgoKSAqIChsb25nKW9wYXF1ZVJlY3QuaGVpZ2h0KCk7CiAgICAgbG9uZyBhcmVhID0g
KGxvbmcpcmVjdC53aWR0aCgpICogKGxvbmcpcmVjdC5oZWlnaHQoKTsKICAgICBpZiAoYXJlYSA+
IG9wYXF1ZUFyZWEpCi0gICAgICAgIG1fb3BhcXVlUmVjdCA9IHJlY3Q7CisgICAgICAgIG9wYXF1
ZVJlY3QgPSByZWN0OwogfQogCiB2b2lkIE9wYXF1ZVJlZ2lvblNraWE6Om1hcmtSZWN0QXNOb25P
cGFxdWUoY29uc3QgU2tSZWN0JiByZWN0KQpAQCAtMzU4LDM0ICszOTEsNDMgQEAgdm9pZCBPcGFx
dWVSZWdpb25Ta2lhOjptYXJrUmVjdEFzTm9uT3BhcXVlKGNvbnN0IFNrUmVjdCYgcmVjdCkKICAg
ICAvLyBXZSB3YW50IHRvIGtlZXAgYXMgbXVjaCBvZiB0aGUgY3VycmVudCBvcGFxdWUgcmVjdGFu
Z2xlIGFzIHdlIGNhbiwgc28gZmluZCB0aGUgb25lIGxhcmdlc3QKICAgICAvLyByZWN0YW5nbGUg
aW5zaWRlIG1fb3BhcXVlUmVjdCB0aGF0IGRvZXMgbm90IGludGVyc2VjdCB3aXRoIHxyZWN0fC4K
IAotICAgIGlmIChyZWN0LmNvbnRhaW5zKG1fb3BhcXVlUmVjdCkpIHsKLSAgICAgICAgbV9vcGFx
dWVSZWN0LnNldEVtcHR5KCk7CisgICAgU2tSZWN0JiBvcGFxdWVSZWN0ID0gY3VycmVudFRyYWNr
aW5nT3BhcXVlUmVjdChtX29wYXF1ZVJlY3QsIG1fY2FudmFzTGF5ZXJTdGFjayk7CisKKyAgICBp
ZiAoIVNrUmVjdDo6SW50ZXJzZWN0cyhyZWN0LCBvcGFxdWVSZWN0KSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChyZWN0LmNvbnRhaW5zKG9wYXF1ZVJlY3QpKSB7CisgICAgICAgIG1hcmtBbGxB
c05vbk9wYXF1ZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50IGRlbHRhTGVm
dCA9IHJlY3QuZkxlZnQgLSBtX29wYXF1ZVJlY3QuZkxlZnQ7Ci0gICAgaW50IGRlbHRhUmlnaHQg
PSBtX29wYXF1ZVJlY3QuZlJpZ2h0IC0gcmVjdC5mUmlnaHQ7Ci0gICAgaW50IGRlbHRhVG9wID0g
cmVjdC5mVG9wIC0gbV9vcGFxdWVSZWN0LmZUb3A7Ci0gICAgaW50IGRlbHRhQm90dG9tID0gbV9v
cGFxdWVSZWN0LmZCb3R0b20gLSByZWN0LmZCb3R0b207CisgICAgaW50IGRlbHRhTGVmdCA9IHJl
Y3QuZkxlZnQgLSBvcGFxdWVSZWN0LmZMZWZ0OworICAgIGludCBkZWx0YVJpZ2h0ID0gb3BhcXVl
UmVjdC5mUmlnaHQgLSByZWN0LmZSaWdodDsKKyAgICBpbnQgZGVsdGFUb3AgPSByZWN0LmZUb3Ag
LSBvcGFxdWVSZWN0LmZUb3A7CisgICAgaW50IGRlbHRhQm90dG9tID0gb3BhcXVlUmVjdC5mQm90
dG9tIC0gcmVjdC5mQm90dG9tOwogCi0gICAgLy8gaG9yaXpvbnRhbCBpcyB0aGUgbGFyZ2VyIG9m
IHRoZSB0d28gcmVjdGFuZ2xlcyB0byB0aGUgbGVmdCBvciB0byB0aGUgcmlnaHQgb2YgfHJlY3R8
IGFuZCBpbnNpZGUgbV9vcGFxdWVSZWN0LgotICAgIC8vIHZlcnRpY2FsIGlzIHRoZSBsYXJnZXIg
b2YgdGhlIHR3byByZWN0YW5nbGVzIGFib3ZlIG9yIGJlbG93IHxyZWN0fCBhbmQgaW5zaWRlIG1f
b3BhcXVlUmVjdC4KLSAgICBTa1JlY3QgaG9yaXpvbnRhbCA9IG1fb3BhcXVlUmVjdDsKKyAgICAv
LyBob3Jpem9udGFsIGlzIHRoZSBsYXJnZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIHRvIHRoZSBs
ZWZ0IG9yIHRvIHRoZSByaWdodCBvZiB8cmVjdHwgYW5kIGluc2lkZSBvcGFxdWVSZWN0LgorICAg
IC8vIHZlcnRpY2FsIGlzIHRoZSBsYXJnZXIgb2YgdGhlIHR3byByZWN0YW5nbGVzIGFib3ZlIG9y
IGJlbG93IHxyZWN0fCBhbmQgaW5zaWRlIG9wYXF1ZVJlY3QuCisgICAgU2tSZWN0IGhvcml6b250
YWwgPSBvcGFxdWVSZWN0OwogICAgIGlmIChkZWx0YVRvcCA+IGRlbHRhQm90dG9tKQogICAgICAg
ICBob3Jpem9udGFsLmZCb3R0b20gPSByZWN0LmZUb3A7CiAgICAgZWxzZQogICAgICAgICBob3Jp
em9udGFsLmZUb3AgPSByZWN0LmZCb3R0b207Ci0gICAgU2tSZWN0IHZlcnRpY2FsID0gbV9vcGFx
dWVSZWN0OworICAgIFNrUmVjdCB2ZXJ0aWNhbCA9IG9wYXF1ZVJlY3Q7CiAgICAgaWYgKGRlbHRh
TGVmdCA+IGRlbHRhUmlnaHQpCiAgICAgICAgIHZlcnRpY2FsLmZSaWdodCA9IHJlY3QuZkxlZnQ7
CiAgICAgZWxzZQogICAgICAgICB2ZXJ0aWNhbC5mTGVmdCA9IHJlY3QuZlJpZ2h0OwogCiAgICAg
aWYgKChsb25nKWhvcml6b250YWwud2lkdGgoKSAqIChsb25nKWhvcml6b250YWwuaGVpZ2h0KCkg
PiAobG9uZyl2ZXJ0aWNhbC53aWR0aCgpICogKGxvbmcpdmVydGljYWwuaGVpZ2h0KCkpCi0gICAg
ICAgIG1fb3BhcXVlUmVjdCA9IGhvcml6b250YWw7CisgICAgICAgIG9wYXF1ZVJlY3QgPSBob3Jp
em9udGFsOwogICAgIGVsc2UKLSAgICAgICAgbV9vcGFxdWVSZWN0ID0gdmVydGljYWw7CisgICAg
ICAgIG9wYXF1ZVJlY3QgPSB2ZXJ0aWNhbDsKIH0KIAordm9pZCBPcGFxdWVSZWdpb25Ta2lhOjpt
YXJrQWxsQXNOb25PcGFxdWUoKQoreworICAgIFNrUmVjdCYgb3BhcXVlUmVjdCA9IGN1cnJlbnRU
cmFja2luZ09wYXF1ZVJlY3QobV9vcGFxdWVSZWN0LCBtX2NhbnZhc0xheWVyU3RhY2spOworICAg
IG9wYXF1ZVJlY3Quc2V0RW1wdHkoKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9PcGFxdWVSZWdp
b25Ta2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJl
Z2lvblNraWEuaAppbmRleCA4NDQzNmEzYzliNjE1YjFjYzJmMGNlMjA3YjliYWU1NWIzYzc1MTli
Li5jNTU5ZjAxMTY1M2YxZTBhNzViZWJhOTQzZDcwZTA5MmEwNzhlOTBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNraWEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL09wYXF1ZVJlZ2lvblNr
aWEuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgSW50UmVjdCBhc1JlY3QoKSBjb25z
dDsKIAogICAgIHZvaWQgcHVzaENhbnZhc0xheWVyKGNvbnN0IFNrUGFpbnQqKTsKLSAgICB2b2lk
IHBvcENhbnZhc0xheWVyKCk7CisgICAgdm9pZCBwb3BDYW52YXNMYXllcihjb25zdCBQbGF0Zm9y
bUNvbnRleHRTa2lhKik7CiAKICAgICB2b2lkIHNldEltYWdlTWFzayhjb25zdCBTa1JlY3QmIGlt
YWdlT3BhcXVlUmVjdCk7CiAKQEAgLTYyLDIxICs2MiwxNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aWREcmF3UG9pbnRzKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBTa0NhbnZhczo6UG9pbnRN
b2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50W10sIGNvbnN0IFNrUGFpbnQmKTsKICAg
ICB2b2lkIGRpZERyYXdCb3VuZGVkKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBT
a1JlY3QmLCBjb25zdCBTa1BhaW50Jik7CiAKLXByaXZhdGU6CiAgICAgZW51bSBEcmF3VHlwZSB7
CiAgICAgICAgIEZpbGxPbmx5LAogICAgICAgICBGaWxsT3JTdHJva2UKICAgICB9OwogCi0gICAg
dm9pZCBkaWREcmF3KGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBTa1JlY3QmLCBj
b25zdCBTa1BhaW50JiwgY29uc3QgU2tCaXRtYXAqIHNvdXJjZUJpdG1hcCwgYm9vbCBmaWxsc0Jv
dW5kcywgRHJhd1R5cGUpOwotICAgIHZvaWQgZGlkRHJhd1VuYm91bmRlZChjb25zdCBTa1BhaW50
Jik7Ci0gICAgdm9pZCBtYXJrUmVjdEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYpOwotICAgIHZvaWQg
bWFya1JlY3RBc05vbk9wYXF1ZShjb25zdCBTa1JlY3QmKTsKLQotICAgIFNrUmVjdCBtX29wYXF1
ZVJlY3Q7Ci0KICAgICBzdHJ1Y3QgQ2FudmFzTGF5ZXJTdGF0ZSB7Ci0gICAgICAgIENhbnZhc0xh
eWVyU3RhdGUoKSA6IGhhc0ltYWdlTWFzayhmYWxzZSkgeyB9CisgICAgICAgIENhbnZhc0xheWVy
U3RhdGUoKQorICAgICAgICAgICAgOiBoYXNJbWFnZU1hc2soZmFsc2UpCisgICAgICAgICAgICAs
IG9wYXF1ZVJlY3QoU2tSZWN0OjpNYWtlRW1wdHkoKSkKKyAgICAgICAgeyB9CiAKICAgICAgICAg
U2tQYWludCBwYWludDsKIApAQCAtODQsOCArNzksMjAgQEAgcHJpdmF0ZToKICAgICAgICAgYm9v
bCBoYXNJbWFnZU1hc2s7CiAgICAgICAgIC8vIFRoZSBvcGFxdWUgYXJlYSBpbiB0aGUgaW1hZ2Ug
bWFzay4KICAgICAgICAgU2tSZWN0IGltYWdlT3BhcXVlUmVjdDsKKworICAgICAgICBTa1JlY3Qg
b3BhcXVlUmVjdDsKICAgICB9OwogCitwcml2YXRlOgorICAgIHZvaWQgZGlkRHJhdyhjb25zdCBQ
bGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0
IFNrQml0bWFwKiBzb3VyY2VCaXRtYXAsIGJvb2wgZmlsbHNCb3VuZHMsIERyYXdUeXBlKTsKKyAg
ICB2b2lkIGRpZERyYXdVbmJvdW5kZWQoY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgYXBwbHlP
cGFxdWVSZWdpb25Gcm9tTGF5ZXIoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSosIGNvbnN0IFNr
UmVjdCYgbGF5ZXJPcGFxdWVSZWN0LCBjb25zdCBTa1BhaW50Jik7CisgICAgdm9pZCBtYXJrUmVj
dEFzT3BhcXVlKGNvbnN0IFNrUmVjdCYpOworICAgIHZvaWQgbWFya1JlY3RBc05vbk9wYXF1ZShj
b25zdCBTa1JlY3QmKTsKKyAgICB2b2lkIG1hcmtBbGxBc05vbk9wYXF1ZSgpOworCisgICAgU2tS
ZWN0IG1fb3BhcXVlUmVjdDsKKwogICAgIFZlY3RvcjxDYW52YXNMYXllclN0YXRlLCAzPiBtX2Nh
bnZhc0xheWVyU3RhY2s7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRleCA5YzBh
Y2Q3ZjRjNDcxOGRhMjYyOGM1MWRlZDFjYzMzYzRiMDdmMjY0Li5hMzczMDQwZGY1Njg1YzU1YmQz
ZmQ3MWYzOTVjM2IyOTNmMjk1YjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKQEAgLTI0
OCw3ICsyNDgsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlc3RvcmVMYXllcigpCiB7
CiAgICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKICAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikK
LSAgICAgICAgbV9vcGFxdWVSZWdpb24ucG9wQ2FudmFzTGF5ZXIoKTsKKyAgICAgICAgbV9vcGFx
dWVSZWdpb24ucG9wQ2FudmFzTGF5ZXIodGhpcyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUGxhdGZvcm1Db250ZXh0U2tp
YVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRT
a2lhVGVzdC5jcHAKaW5kZXggZGM1ZTMxOTkyMThkMzg0ODVlNzU3ZjI5OWY3OTQwMWI3ZjVhMzRh
Mi4uNTg3ZGU1NWUwZWU5YzcwNmUwOTVjMzI4ZTA2MTA3OTk1MjZkZmE3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9QbGF0Zm9ybUNvbnRleHRTa2lhVGVz
dC5jcHAKQEAgLTM5LDkgKzM5LDkgQEAgbmFtZXNwYWNlIHsKIAogI2RlZmluZSBFWFBFQ1RfRVFf
UkVDVChhLCBiKSBcCiAgICAgRVhQRUNUX0VRKGEueCgpLCBiLngoKSk7IFwKLSAgICBFWFBFQ1Rf
RVEoYS5tYXhYKCksIGIubWF4WCgpKTsgXAogICAgIEVYUEVDVF9FUShhLnkoKSwgYi55KCkpOyBc
Ci0gICAgRVhQRUNUX0VRKGEubWF4WSgpLCBiLm1heFkoKSk7CisgICAgRVhQRUNUX0VRKGEud2lk
dGgoKSwgYi53aWR0aCgpKTsgXAorICAgIEVYUEVDVF9FUShhLmhlaWdodCgpLCBiLmhlaWdodCgp
KTsKIAogI2RlZmluZSBFWFBFQ1RfUElYRUxTX01BVENIKGJpdG1hcCwgb3BhcXVlUmVjdCkgXAog
eyBcCkBAIC0yMjYsOSArMjI2LDkwIEBAIFRFU1QoUGxhdGZvcm1Db250ZXh0U2tpYVRlc3QsIHRy
YWNrT3BhcXVlQ2xpcFRlc3QpCiAgICAgY29udGV4dC5zYXZlKCk7CiAgICAgY29udGV4dC5jbGlw
VG9JbWFnZUJ1ZmZlcihhbHBoYUltYWdlLmdldCgpLCBGbG9hdFJlY3QoMzAsIDMwLCAxMCwgMTAp
KTsKICAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgxMCwgMTAsIDkwLCA5MCksIG9wYXF1
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4
dC5yZXN0b3JlKCk7CiAgICAgRVhQRUNUX0VRX1JFQ1QoSW50UmVjdCgpLCBwbGF0Zm9ybUNvbnRl
eHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwogICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0goYml0
bWFwLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwotICAgIGNvbnRl
eHQucmVzdG9yZSgpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0LCB0cmFja0lt
YWdlTWFzaykKK3sKKyAgICBTa0JpdG1hcCBiaXRtYXA7CisgICAgYml0bWFwLnNldENvbmZpZyhT
a0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcsIDQwMCwgNDAwKTsKKyAgICBiaXRtYXAuYWxsb2NQ
aXhlbHMoKTsKKyAgICBiaXRtYXAuZXJhc2VDb2xvcigwKTsKKyAgICBTa0NhbnZhcyBjYW52YXMo
Yml0bWFwKTsKKworICAgIFBsYXRmb3JtQ29udGV4dFNraWEgcGxhdGZvcm1Db250ZXh0KCZjYW52
YXMpOworICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUcmFja09wYXF1ZVJlZ2lvbih0cnVlKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKworICAgIENvbG9y
IG9wYXF1ZSgxLjBmLCAwLjBmLCAwLjBmLCAxLjBmKTsKKyAgICBDb2xvciBhbHBoYSgwLjBmLCAw
LjBmLCAwLjBmLCAwLjBmKTsKKworICAgIC8vIEltYWdlIG1hc2tzIGFyZSBkb25lIGJ5IGRyYXdp
bmcgYSBiaXRtYXAgaW50byBhIHRyYW5zcGFyZW5jeSBsYXllciB0aGF0IHVzZXMgRHN0SW4gdG8g
bWFzaworICAgIC8vIG91dCBhIHRyYW5zcGFyZW5jeSBsYXllciBiZWxvdyB0aGF0IGlzIGZpbGxl
ZCB3aXRoIHRoZSBtYXNrIGNvbG9yLiBJbiB0aGUgZW5kIHRoaXMgc2hvdWxkCisgICAgLy8gbm90
IGJlIG1hcmtlZCBvcGFxdWUuCisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
MSk7CisgICAgY29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoMTAsIDEwLCAxMCwgMTApLCBvcGFx
dWUsIENvbG9yU3BhY2VEZXZpY2VSR0IsIENvbXBvc2l0ZVNvdXJjZU92ZXIpOworCisgICAgY29u
dGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlRGVzdGluYXRpb25Jbik7CisgICAg
Y29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOworCisgICAgT3duUHRyPEltYWdlQnVm
ZmVyPiBhbHBoYUltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShJbnRTaXplKDEwMCwgMTAwKSk7
CisgICAgYWxwaGFJbWFnZS0+Y29udGV4dCgpLT5maWxsUmVjdChJbnRSZWN0KDAsIDAsIDEwMCwg
MTAwKSwgYWxwaGEsIENvbG9yU3BhY2VEZXZpY2VSR0IpOworCisgICAgY29udGV4dC5zZXRDb21w
b3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgY29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoYWxwaGFJbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgRmxvYXRSZWN0
KDEwLCAxMCwgMTAsIDEwKSk7CisKKyAgICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CisgICAgY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworCisgICAgRVhQRUNUX0VRX1JF
Q1QoSW50UmVjdCgpLCBwbGF0Zm9ybUNvbnRleHQub3BhcXVlUmVnaW9uKCkuYXNSZWN0KCkpOwor
ICAgIEVYUEVDVF9QSVhFTFNfTUFUQ0hfRVhBQ1QoYml0bWFwLCBwbGF0Zm9ybUNvbnRleHQub3Bh
cXVlUmVnaW9uKCkuYXNSZWN0KCkpOworfQorCitURVNUKFBsYXRmb3JtQ29udGV4dFNraWFUZXN0
LCB0cmFja0ltYWdlTWFza1dpdGhPcGFxdWVSZWN0KQoreworICAgIFNrQml0bWFwIGJpdG1hcDsK
KyAgICBiaXRtYXAuc2V0Q29uZmlnKFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZywgNDAwLCA0
MDApOworICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgIGJpdG1hcC5lcmFzZUNvbG9yKDAp
OworICAgIFNrQ2FudmFzIGNhbnZhcyhiaXRtYXApOworCisgICAgUGxhdGZvcm1Db250ZXh0U2tp
YSBwbGF0Zm9ybUNvbnRleHQoJmNhbnZhcyk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldFRyYWNr
T3BhcXVlUmVnaW9uKHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZwbGF0Zm9y
bUNvbnRleHQpOworCisgICAgQ29sb3Igb3BhcXVlKDEuMGYsIDAuMGYsIDAuMGYsIDEuMGYpOwor
ICAgIENvbG9yIGFscGhhKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOworCisgICAgLy8gSW1hZ2Ug
bWFza3MgYXJlIGRvbmUgYnkgZHJhd2luZyBhIGJpdG1hcCBpbnRvIGEgdHJhbnNwYXJlbmN5IGxh
eWVyIHRoYXQgdXNlcyBEc3RJbiB0byBtYXNrCisgICAgLy8gb3V0IGEgdHJhbnNwYXJlbmN5IGxh
eWVyIGJlbG93IHRoYXQgaXMgZmlsbGVkIHdpdGggdGhlIG1hc2sgY29sb3IuIEluIHRoZSBlbmQg
dGhpcyBzaG91bGQKKyAgICAvLyBub3QgYmUgbWFya2VkIG9wYXF1ZS4KKworICAgIGNvbnRleHQu
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIGNvbnRleHQu
YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKKyAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dCgxMCwgMTAsIDEwLCAxMCksIG9wYXF1ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgQ29tcG9zaXRl
U291cmNlT3Zlcik7CisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVEZXN0aW5hdGlvbkluKTsKKyAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7
CisKKyAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IGFscGhhSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKEludFNpemUoMTAwLCAxMDApKTsKKyAgICBhbHBoYUltYWdlLT5jb250ZXh0KCktPmZpbGxS
ZWN0KEludFJlY3QoMCwgMCwgMTAwLCAxMDApLCBhbHBoYSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisKKyAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVy
KTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcihhbHBoYUltYWdlLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBGbG9hdFJlY3QoMTAsIDEwLCAxMCwgMTApKTsKKworICAgIC8vIFdlIGNh
bid0IGhhdmUgYW4gb3BhcXVlIG1hc2sgYWN0dWFsbHksIGJ1dCB3ZSBjYW4gcHJldGVuZCBoZXJl
IGxpa2UgaXQgd291bGQgbG9vayBpZiB3ZSBkaWQuCisgICAgY29udGV4dC5maWxsUmVjdChGbG9h
dFJlY3QoMTIsIDEyLCAzLCAzKSwgb3BhcXVlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3Np
dGVTb3VyY2VPdmVyKTsKKworICAgIGNvbnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAg
ICBjb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKKyAgICBFWFBFQ1RfRVFfUkVDVChJ
bnRSZWN0KDEyLCAxMiwgMywgMyksIHBsYXRmb3JtQ29udGV4dC5vcGFxdWVSZWdpb24oKS5hc1Jl
Y3QoKSk7CisgICAgRVhQRUNUX1BJWEVMU19NQVRDSF9FWEFDVChiaXRtYXAsIHBsYXRmb3JtQ29u
dGV4dC5vcGFxdWVSZWdpb24oKS5hc1JlY3QoKSk7CiB9CiAKIFRFU1QoUGxhdGZvcm1Db250ZXh0
U2tpYVRlc3QsIHRyYWNrT3BhcXVlSm9pblRlc3QpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>