<?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>127876</bug_id>
          
          <creation_ts>2014-01-29 17:29:13 -0800</creation_ts>
          <short_desc>Extended background should only create margin tiles for pages with background images</short_desc>
          <delta_ts>2014-01-31 13:33:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>973541</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-29 17:29:13 -0800</bug_when>
    <thetext>The new extended background mode doesn&apos;t actually need to create margin tiles for pages with simple background colors. For now, we should only create tiles when there is a background image. We may want to extend this to other types of complicated backgrounds in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973550</commentid>
    <comment_count>1</comment_count>
      <attachid>222614</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-29 17:52:03 -0800</bug_when>
    <thetext>Created attachment 222614
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973553</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-29 17:53:56 -0800</bug_when>
    <thetext>Attachment 222614 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderView.cpp:566:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973571</commentid>
    <comment_count>3</comment_count>
      <attachid>222614</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-01-29 18:05:00 -0800</bug_when>
    <thetext>Comment on attachment 222614
Patch

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

I have a few comments, but didn’t get all the way to review+ or review-

&gt; Source/WebCore/page/FrameView.cpp:2510
&gt; +    Element* htmlElement = frame().document()-&gt;documentElement();
&gt; +    Element* bodyElement = frame().document()-&gt;body();

I would give these two local variables “auto” type rather than dumbing the type down to Element* (I think at least one of those functions returns a more specific type).

Also, I think documentElement is more pleasant than htmlElement, so I suggest using that name for it.

&gt; Source/WebCore/page/FrameView.cpp:2512
&gt; +    RenderObject* htmlRenderer = htmlElement ? htmlElement-&gt;renderer() : 0;
&gt; +    RenderObject* bodyRenderer = bodyElement ? bodyElement-&gt;renderer() : 0;

nullptr

Also, I would use auto here since we possibly having a more specific renderer type than RenderObject.

I guess you probably won’t want to say documentElementRenderer, but that’s the name I would use.

&gt; Source/WebCore/page/FrameView.cpp:2513
&gt; +    bool doucmentHasBackgroundImage = (htmlRenderer &amp;&amp; htmlRenderer-&gt;style().hasBackgroundImage())

Typo here, doucment.

&gt; Source/WebCore/page/FrameView.cpp:2520
&gt; +    RenderLayerBacking* backing = renderView-&gt;layer()-&gt;backing();

What guarantees that renderView-&gt;layer() is non-null? I assume it’s guaranteed, but not sure by what.

&gt; Source/WebCore/page/FrameView.cpp:2522
&gt; +    if (!backing)
&gt; +        return false;

I suggest moving the renderView ad backing parts earlier just so they can exit before we start looking at the document and body elements.

&gt; Source/WebCore/page/FrameView.cpp:2524
&gt; +    backing-&gt;setTiledBackingHasMargins(doucmentHasBackgroundImage);

It‘s strange that this function, which sounds like a getter, has a side effect of setting this flag on the backing.

&gt; Source/WebCore/page/Settings.cpp:610
&gt; +    m_page-&gt;mainFrame().view()-&gt;shouldExtendBackgroundRect();

You are calling this function just for its side effect? If so, then I think we should rename it. It really doesn’t sound like a function with a side effect.

&gt; Source/WebCore/rendering/RenderView.cpp:566
&gt; +    if (frameView().frame().settings().backgroundShouldExtendBeyondPage()) {
&gt; +        compositor().setExtendedBackgroundColor(frameView().documentBackgroundColor());
&gt; +    }

No braces for a one-line if statement like this.

Is there ever a case where we want to clear the extended background color because the setting changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973575</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-29 18:21:01 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 222614 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222614&amp;action=review
&gt; 
&gt; I have a few comments, but didn’t get all the way to review+ or review-
&gt; 

Thank you!

&gt; &gt; Source/WebCore/page/FrameView.cpp:2510
&gt; &gt; +    Element* htmlElement = frame().document()-&gt;documentElement();
&gt; &gt; +    Element* bodyElement = frame().document()-&gt;body();
&gt; 
&gt; I would give these two local variables “auto” type rather than dumbing the type down to Element* (I think at least one of those functions returns a more specific type).
&gt; 

Done.

&gt; Also, I think documentElement is more pleasant than htmlElement, so I suggest using that name for it.
&gt; 

Done.

&gt; &gt; Source/WebCore/page/FrameView.cpp:2512
&gt; &gt; +    RenderObject* htmlRenderer = htmlElement ? htmlElement-&gt;renderer() : 0;
&gt; &gt; +    RenderObject* bodyRenderer = bodyElement ? bodyElement-&gt;renderer() : 0;
&gt; 
&gt; nullptr
&gt; 

Done.

&gt; Also, I would use auto here since we possibly having a more specific renderer type than RenderObject.
&gt; 

Done.

&gt; I guess you probably won’t want to say documentElementRenderer, but that’s the name I would use.
&gt; 

No, I like it too! It&apos;s not terribly long. Changed it.

&gt; &gt; Source/WebCore/page/FrameView.cpp:2513
&gt; &gt; +    bool doucmentHasBackgroundImage = (htmlRenderer &amp;&amp; htmlRenderer-&gt;style().hasBackgroundImage())
&gt; 
&gt; Typo here, doucment.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/page/FrameView.cpp:2520
&gt; &gt; +    RenderLayerBacking* backing = renderView-&gt;layer()-&gt;backing();
&gt; 
&gt; What guarantees that renderView-&gt;layer() is non-null? I assume it’s guaranteed, but not sure by what.
&gt; 

This is inside a #if USE(ACCELERATED_COMPOSITING), and that guarantees that the RenderView has a non-null layer().

&gt; &gt; Source/WebCore/page/FrameView.cpp:2522
&gt; &gt; +    if (!backing)
&gt; &gt; +        return false;
&gt; 
&gt; I suggest moving the renderView ad backing parts earlier just so they can exit before we start looking at the document and body elements.
&gt; 

Done.

&gt; &gt; Source/WebCore/page/FrameView.cpp:2524
&gt; &gt; +    backing-&gt;setTiledBackingHasMargins(doucmentHasBackgroundImage);
&gt; 
&gt; It‘s strange that this function, which sounds like a getter, has a side effect of setting this flag on the backing.
&gt; 

Yeah, I do feel a little dirty about that. More on that in a second.

&gt; &gt; Source/WebCore/page/Settings.cpp:610
&gt; &gt; +    m_page-&gt;mainFrame().view()-&gt;shouldExtendBackgroundRect();
&gt; 
&gt; You are calling this function just for its side effect? If so, then I think we should rename it. It really doesn’t sound like a function with a side effect.
&gt; 

Again, I agree this is a little dirty. It was just a matter convenience for me to turn this into a combination getter and setter. I would be open to a better name OR to figuring out which callers need the setter part and adding a separate function that does only that. I&apos;ll think it over, but input would be valued. I was puzzling this before I posted the patch, and decided just to post it in the meantime.

&gt; &gt; Source/WebCore/rendering/RenderView.cpp:566
&gt; &gt; +    if (frameView().frame().settings().backgroundShouldExtendBeyondPage()) {
&gt; &gt; +        compositor().setExtendedBackgroundColor(frameView().documentBackgroundColor());
&gt; &gt; +    }
&gt; 
&gt; No braces for a one-line if statement like this.
&gt; 

Fixed.

&gt; Is there ever a case where we want to clear the extended background color because the setting changed?

There could be! I will fix this. 

Updated patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973588</commentid>
    <comment_count>5</comment_count>
      <attachid>222623</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-29 20:27:30 -0800</bug_when>
    <thetext>Created attachment 222623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973589</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-29 20:29:01 -0800</bug_when>
    <thetext>Attachment 222623 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderView.cpp:565:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973719</commentid>
    <comment_count>7</comment_count>
      <attachid>222623</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-01-30 07:19:25 -0800</bug_when>
    <thetext>Comment on attachment 222623
Patch

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

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:244
&gt; -    int marginSize = extendBackground ? 512 : 0;
&gt; +    int marginSize = hasExtendedBackgroundRect ? 512 : 0;

What is the magical 512?  Could you make it a constant with informative name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973752</commentid>
    <comment_count>8</comment_count>
      <attachid>222623</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-30 09:26:17 -0800</bug_when>
    <thetext>Comment on attachment 222623
Patch

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

&gt; Source/WebCore/page/FrameView.cpp:2488
&gt; +bool FrameView::shouldExtendBackgroundRect() const

This name doesn&apos;t imply to me that it&apos;s about extending for background image; why would you not extend the background rect to show color?

&gt; Source/WebCore/page/FrameView.cpp:2520
&gt; +    auto documentElement = document-&gt;documentElement();
&gt; +    auto bodyElement = document-&gt;body();
&gt; +    auto documentElementRenderer = documentElement ? documentElement-&gt;renderer() : nullptr;
&gt; +    auto bodyRenderer = bodyElement ? bodyElement-&gt;renderer() : nullptr;
&gt; +    bool documentHasBackgroundImage = (documentElementRenderer &amp;&amp; documentElementRenderer-&gt;style().hasBackgroundImage())
&gt; +        || (bodyRenderer &amp;&amp; bodyRenderer-&gt;style().hasBackgroundImage());

We have similar logic in maybe 3 places; it would be nice to share code.

&gt; Source/WebCore/page/Settings.cpp:610
&gt; +    m_page-&gt;mainFrame().view()-&gt;shouldExtendBackgroundRect();

Is this a setter? It reads like a getter, which makes this line seem like a no-op.

&gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2973
&gt; +void RenderLayerCompositor::setExtendedBackgroundColor(const Color&amp; color)

I feel like this name should have &quot;root&quot; in it somewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973826</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-30 11:00:32 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 222623 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222623&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/FrameView.cpp:2488
&gt; &gt; +bool FrameView::shouldExtendBackgroundRect() const
&gt; 
&gt; This name doesn&apos;t imply to me that it&apos;s about extending for background image; why would you not extend the background rect to show color?
&gt; 

You wouldn&apos;t for color, but in the future we might for a gradient, and if we ever tried to do something crazy like the &quot;cnn.com&quot; problem, then we might do it for other things too. I don&apos;t think we should get overly specific about background images here. My comment in FrameView attempts to explain the differentiation about how some extended backgrounds require extended background RECTs and others do not.

&gt; &gt; Source/WebCore/page/FrameView.cpp:2520
&gt; &gt; +    auto documentElement = document-&gt;documentElement();
&gt; &gt; +    auto bodyElement = document-&gt;body();
&gt; &gt; +    auto documentElementRenderer = documentElement ? documentElement-&gt;renderer() : nullptr;
&gt; &gt; +    auto bodyRenderer = bodyElement ? bodyElement-&gt;renderer() : nullptr;
&gt; &gt; +    bool documentHasBackgroundImage = (documentElementRenderer &amp;&amp; documentElementRenderer-&gt;style().hasBackgroundImage())
&gt; &gt; +        || (bodyRenderer &amp;&amp; bodyRenderer-&gt;style().hasBackgroundImage());
&gt; 
&gt; We have similar logic in maybe 3 places; it would be nice to share code.
&gt; 

I saw similar logic in RenderLayerBacking, but it that logic was incorrect for my purposes, and it failed to catch a number of websites with background images. I don&apos;t know enough about that code to know if it should be fixed or if it&apos;s doing what it should do for its own purposes. 

Can you point to any other similar spots I should look at?

&gt; &gt; Source/WebCore/page/Settings.cpp:610
&gt; &gt; +    m_page-&gt;mainFrame().view()-&gt;shouldExtendBackgroundRect();
&gt; 
&gt; Is this a setter? It reads like a getter, which makes this line seem like a no-op.
&gt; 

Yeah, Darin pointed this out too, and as I told him, I know that was a dirty trick. Working on a new patch now to disambiguate the getting and setter. 

&gt; &gt; Source/WebCore/rendering/RenderLayerCompositor.cpp:2973
&gt; &gt; +void RenderLayerCompositor::setExtendedBackgroundColor(const Color&amp; color)
&gt; 
&gt; I feel like this name should have &quot;root&quot; in it somewhere.

Okay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973828</commentid>
    <comment_count>10</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-30 11:02:23 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 222623 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222623&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerBacking.cpp:244
&gt; &gt; -    int marginSize = extendBackground ? 512 : 0;
&gt; &gt; +    int marginSize = hasExtendedBackgroundRect ? 512 : 0;
&gt; 
&gt; What is the magical 512?  Could you make it a constant with informative name?

Yeah, right now it&apos;s just mimicking the tile size, but those static const ints should probably live somewhere more share-able (they are currently in TileController.mm). Any suggestions for a good spot?

static const int defaultTileWidth = 512;
static const int defaultTileHeight = 512;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973885</commentid>
    <comment_count>11</comment_count>
      <attachid>222623</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-30 11:48:03 -0800</bug_when>
    <thetext>Comment on attachment 222623
Patch

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

&gt;&gt;&gt; Source/WebCore/page/FrameView.cpp:2488
&gt;&gt;&gt; +bool FrameView::shouldExtendBackgroundRect() const
&gt;&gt; 
&gt;&gt; This name doesn&apos;t imply to me that it&apos;s about extending for background image; why would you not extend the background rect to show color?
&gt; 
&gt; You wouldn&apos;t for color, but in the future we might for a gradient, and if we ever tried to do something crazy like the &quot;cnn.com&quot; problem, then we might do it for other things too. I don&apos;t think we should get overly specific about background images here. My comment in FrameView attempts to explain the differentiation about how some extended backgrounds require extended background RECTs and others do not.

How about just shouldExtendBackground() then?

&gt;&gt;&gt; Source/WebCore/page/FrameView.cpp:2520
&gt;&gt;&gt; +        || (bodyRenderer &amp;&amp; bodyRenderer-&gt;style().hasBackgroundImage());
&gt;&gt; 
&gt;&gt; We have similar logic in maybe 3 places; it would be nice to share code.
&gt; 
&gt; I saw similar logic in RenderLayerBacking, but it that logic was incorrect for my purposes, and it failed to catch a number of websites with background images. I don&apos;t know enough about that code to know if it should be fixed or if it&apos;s doing what it should do for its own purposes. 
&gt; 
&gt; Can you point to any other similar spots I should look at?

There is related logic in these places:
RenderLayerBacking::isSimpleContainerCompositingLayer()
skipBodyBackground() in RenderBox.cpp
RenderElement::styleWillChange()
and RenderElement::rendererForRootBackground() is also related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>973891</commentid>
    <comment_count>12</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-30 11:59:47 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 222623 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222623&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/page/FrameView.cpp:2488
&gt; &gt;&gt;&gt; +bool FrameView::shouldExtendBackgroundRect() const
&gt; &gt;&gt; 
&gt; &gt;&gt; This name doesn&apos;t imply to me that it&apos;s about extending for background image; why would you not extend the background rect to show color?
&gt; &gt; 
&gt; &gt; You wouldn&apos;t for color, but in the future we might for a gradient, and if we ever tried to do something crazy like the &quot;cnn.com&quot; problem, then we might do it for other things too. I don&apos;t think we should get overly specific about background images here. My comment in FrameView attempts to explain the differentiation about how some extended backgrounds require extended background RECTs and others do not.
&gt; 
&gt; How about just shouldExtendBackground() then?
&gt; 

Definitely not this!!! Haha, maybe we should talk in person. There are three scenarios here:

1. We&apos;re in the &quot;old mode,&quot; so the new setBackgroundShouldExtendBeyondPage Setting is set to false.
2. We&apos;re in the new mode, but we only have a background color, so we don&apos;t need to extend the background RECT. 
3. We&apos;re in the new mode, and we have a background image, so we DO need to extend the background RECT.

shouldExtendBackground() is a bad name for 3 because given the name of the Setting, it implies 2.

&gt; &gt;&gt;&gt; Source/WebCore/page/FrameView.cpp:2520
&gt; &gt;&gt;&gt; +        || (bodyRenderer &amp;&amp; bodyRenderer-&gt;style().hasBackgroundImage());
&gt; &gt;&gt; 
&gt; &gt;&gt; We have similar logic in maybe 3 places; it would be nice to share code.
&gt; &gt; 
&gt; &gt; I saw similar logic in RenderLayerBacking, but it that logic was incorrect for my purposes, and it failed to catch a number of websites with background images. I don&apos;t know enough about that code to know if it should be fixed or if it&apos;s doing what it should do for its own purposes. 
&gt; &gt; 
&gt; &gt; Can you point to any other similar spots I should look at?
&gt; 
&gt; There is related logic in these places:
&gt; RenderLayerBacking::isSimpleContainerCompositingLayer()
&gt; skipBodyBackground() in RenderBox.cpp
&gt; RenderElement::styleWillChange()
&gt; and RenderElement::rendererForRootBackground() is also related.

Will look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974050</commentid>
    <comment_count>13</comment_count>
      <attachid>222747</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-30 15:11:09 -0800</bug_when>
    <thetext>Created attachment 222747
Patch

Here&apos;s my newest patch. This patch disambiguates my getter/setter into two separate functions. It does not attempt to combine with other similar root node background code…I couldn&apos;t think of any clean way to do that since all of the spots that look at html and body renders are all just slightly different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974055</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-30 15:14:15 -0800</bug_when>
    <thetext>Attachment 222747 did not pass style-queue:


ERROR: Source/WebCore/page/FrameView.cpp:2492:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974083</commentid>
    <comment_count>15</comment_count>
      <attachid>222755</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-30 16:23:50 -0800</bug_when>
    <thetext>Created attachment 222755
Patch

Here&apos;s a patch with better names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974128</commentid>
    <comment_count>16</comment_count>
      <attachid>222755</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-30 17:28:09 -0800</bug_when>
    <thetext>Comment on attachment 222755
Patch

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

Does this handle dynamic changes of root background color (e.g. via CSS animations)? I don&apos;t think it does, which suggests that the way you push the color onto the background is wrong. That should be fixed in a followup.

&gt; Source/WebCore/ChangeLog:18
&gt; +        This patch makes callers that wonder only if the new setting is set always call 

callers that wonder!

&gt; Source/WebCore/page/FrameView.cpp:2444
&gt; +    renderView-&gt;compositor().setRootExtendedBackgroundColor(extendBackground ? documentBackgroundColor() : Color());

I&apos;m not sure this is the right place to grab the color. I&apos;d expect setBackgroundExtendsBeyondPage(true) to just set some state, and for the color to be updated dynamically.

&gt; Source/WebCore/page/FrameView.cpp:2448
&gt; +    RenderLayerBacking* backing = renderView-&gt;layer()-&gt;backing();
&gt; +    if (!backing)
&gt; +        return;

This is a bit odd since backing isn&apos;t used.

&gt; Source/WebCore/page/FrameView.cpp:2487
&gt; +    bool documentHasBackgroundImage = (documentElementRenderer &amp;&amp; documentElementRenderer-&gt;style().hasBackgroundImage())

I think this should be called rootBackgroundHasImage.

&gt; Source/WebCore/rendering/RenderView.cpp:1041
&gt; +        if (frameView().hasExtendedBackgroundRectForPainting() != needsExtendedBackground)
&gt; +            frameView().setHasExtendedBackgroundRectForPainting(needsExtendedBackground);

It&apos;s bad that a getter on RenderView is changing state on FrameView! setHasExtendedBackgroundRectForPainting() needs to be called somewhere else (e.g. after style/layout changes or something).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974397</commentid>
    <comment_count>17</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-31 11:48:23 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 222755 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=222755&amp;action=review
&gt; 
&gt; Does this handle dynamic changes of root background color (e.g. via CSS animations)? I don&apos;t think it does, which suggests that the way you push the color onto the background is wrong. That should be fixed in a followup.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        This patch makes callers that wonder only if the new setting is set always call 
&gt; 
&gt; callers that wonder!
&gt; 

Haha! Okay, fine, will re-phrase. :-P

&gt; &gt; Source/WebCore/page/FrameView.cpp:2444
&gt; &gt; +    renderView-&gt;compositor().setRootExtendedBackgroundColor(extendBackground ? documentBackgroundColor() : Color());
&gt; 
&gt; I&apos;m not sure this is the right place to grab the color. I&apos;d expect setBackgroundExtendsBeyondPage(true) to just set some state, and for the color to be updated dynamically.
&gt; 

Yeah, usually this is a no-op, but if we ever wanted to change the setting dynamically, I feel like this might be nice! I&apos;m tempted to leave it in…but maybe that is silly.

&gt; &gt; Source/WebCore/page/FrameView.cpp:2448
&gt; &gt; +    RenderLayerBacking* backing = renderView-&gt;layer()-&gt;backing();
&gt; &gt; +    if (!backing)
&gt; &gt; +        return;
&gt; 
&gt; This is a bit odd since backing isn&apos;t used.
&gt; 

Oops! Just some cruft. Will remove.

&gt; &gt; Source/WebCore/page/FrameView.cpp:2487
&gt; &gt; +    bool documentHasBackgroundImage = (documentElementRenderer &amp;&amp; documentElementRenderer-&gt;style().hasBackgroundImage())
&gt; 
&gt; I think this should be called rootBackgroundHasImage.
&gt; 

Will change!

&gt; &gt; Source/WebCore/rendering/RenderView.cpp:1041
&gt; &gt; +        if (frameView().hasExtendedBackgroundRectForPainting() != needsExtendedBackground)
&gt; &gt; +            frameView().setHasExtendedBackgroundRectForPainting(needsExtendedBackground);
&gt; 
&gt; It&apos;s bad that a getter on RenderView is changing state on FrameView! setHasExtendedBackgroundRectForPainting() needs to be called somewhere else (e.g. after style/layout changes or something).

Okay, I&apos;ll look for a new spot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974452</commentid>
    <comment_count>18</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-01-31 13:33:48 -0800</bug_when>
    <thetext>Committed http://trac.webkit.org/changeset/163190</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222614</attachid>
            <date>2014-01-29 17:52:03 -0800</date>
            <delta_ts>2014-01-29 20:27:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>extended-background-fr.txt</filename>
            <type>text/plain</type>
            <size>21643</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDE0LTAxLTI5ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBiYWNrZ3JvdW5kIHNo
b3VsZCBvbmx5IGNyZWF0ZSBtYXJnaW4gdGlsZXMgZm9yIHBhZ2VzIHdpdGggYmFja2dyb3VuZCAK
KyAgICAgICAgaW1hZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjc4NzYKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTU4Mjc2MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU2V0dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
KCkgZG9lc27igJl0IG5lZWQgdG8gY3JlYXRlIG1hcmdpbiB0aWxlcyAKKyAgICAgICAgZm9yIHBh
Z2VzIHdpdGggc2ltcGxlIGJhY2tncm91bmQgY29sb3JzLiBJbnN0ZWFkLCB0aG9zZSBwYWdlcyBz
aG91bGQgYWNoaWV2ZSB0aGUgCisgICAgICAgIHNhbWUgZWZmZWN0IGJ5IHNldHRpbmcgYSBiYWNr
Z3JvdW5kIGNvbG9yIG9uIFJlbmRlckxheWVyQ29tcG9zaXRvcuKAmXMgCisgICAgICAgIG1fbGF5
ZXJGb3JPdmVyaGFuZ0FyZWFzLiBGb3Igbm93LCB3ZSBzaG91bGQgb25seSBjcmVhdGUgdGlsZXMg
d2hlbiB0aGVyZSBpcyBhIAorICAgICAgICBiYWNrZ3JvdW5kIGltYWdlLiBXZSBtYXkgd2FudCB0
byBleHRlbmQgdGhpcyB0byBvdGhlciB0eXBlcyBvZiBjb21wbGljYXRlZCAKKyAgICAgICAgYmFj
a2dyb3VuZHMgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGNhbGxl
cnMgdGhhdCB3b25kZXIgb25seSBpZiB0aGUgbmV3IHNldHRpbmcgaXMgc2V0IGFsd2F5cyBjYWxs
IAorICAgICAgICBTZXR0aW5nczo6YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBy
YXRoZXIgdGhhbiBhc2tpbmcgYWJvdXQgbWFyZ2luIAorICAgICAgICB0aWxlcy4gQW5kIGNhbGxl
cnMgdGhhdCB3YW50IHRvIGtub3cgYWJvdXQgbWFyZ2luIHRpbGVzIGNhbiBlaXRoZXIga2VlcCBx
dWVyeWluZyAKKyAgICAgICAgdGhhdCBkaXJlY3RseSBvciB0aGV5IGNhbiBjYWxsIEZyYW1lVmll
dzo6c2hvdWxkRXh0ZW5kQmFja2dyb3VuZFJlY3QoKS4gQW5kIAorICAgICAgICBleHRlbmRlZCBi
YWNrZ3JvdW5kIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcXVpcmUgYW4gZXh0ZW5kZWQgYmFja2dy
b3VuZCBSRUNULCBhbmQgCisgICAgICAgIHRoaXMgbmV3IEZyYW1lVmlldyBmdW5jdGlvbiBjYW4g
bWFrZSB0aGF0IGRpc3RpbmN0aW9uLiAKKworICAgICAgICBXZSBvbmx5IG5lZWQgYW4gZXh0ZW5k
ZWQgYmFja2dyb3VuZCByZWN0IGlmIHdlIHdhbnQgYW4gZXh0ZW5kZWQgYmFja2dyb3VuZCBhbmQg
dGhlIAorICAgICAgICBkb2N1bWVudCBoYXMgYSBiYWNrZ3JvdW5kIGltYWdlLiBJZiB0aGF0IGlz
IHRoZSBjYXNlLCB0aGVuIHRoaXMgZnVuY3Rpb24gYWxzbyAKKyAgICAgICAgbWFrZXMgc3VyZSB0
aGUgUmVuZGVyVmlldydzIFJlbmRlckxheWVyQmFja2luZyBoYXMgYWRkZWQgbWFyZ2lucyB0byB0
aGUgCisgICAgICAgIFRpbGVkQmFja2luZy4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNob3VsZEV4dGVuZEJhY2tncm91bmRSZWN0
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorCisgICAgICAgIENhbGwgbmV3IEZyYW1l
VmlldyBmdW5jdGlvbiBzaG91bGRFeHRlbmRCYWNrZ3JvdW5kUmVjdCgpIGluc3RlYWQgb2YganVz
dCAKKyAgICAgICAgaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kKCkuCisgICAgICAgICogcGFnZS9TZXR0
aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0QmFja2dyb3VuZFNob3Vs
ZEV4dGVuZEJleW9uZFBhZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZXBhaW50TGF5ZXJSZWN0c0ZvckltYWdlKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2tncm91bmRJbWFnZUdl
b21ldHJ5KToKKworICAgICAgICBEb27igJl0IGNhbGwgc2V0VGlsZWRCYWNraW5nSGFzTWFyZ2lu
cygpIHJpZ2h0IGluIHRoZSBjb25zdHJ1Y3RvciBiZWNhdXNlIHdlIG9ubHkgCisgICAgICAgIHdh
bnQgbWFyZ2lucyBpZiB3ZSBoYXZlIGEgYmFja2dyb3VuZCBpbWFnZSwgYW5kIHdlIHdvbuKAmXQg
aGF2ZSB0aGF0IGluZm9ybWF0aW9uIAorICAgICAgICB5ZXQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OlJlbmRlckxheWVyQmFja2luZyk6CisKKyAgICAgICAgQ2xlYW4gdXAgdGhlIHZhcmlh
YmxlIG5hbWUgaGVyZS4gV2UgYXJlIG9ubHkgc2V0dGluZyBtYXJnaW5zIHdoZW4gd2UgbmVlZCB0
byAKKyAgICAgICAgZXh0ZW5kIHRoZSBiYWNrZ3JvdW5kIFJFQ1QuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnNldFRpbGVkQmFja2luZ0hhc01hcmdpbnMpOgorCisgICAg
ICAgIFJlbW92ZSBSZW5kZXJMYXllckJhY2tpbmc6OnRpbGVkQmFja2luZ0hhc01hcmdpbigpIHNp
bmNlIHRoZXJlIGFyZW7igJl0IGFueSBtb3JlIAorICAgICAgICBjYWxsZXJzLgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dXNpbmdUaWxlZEJhY2tpbmcpOgorICAgICAgICAKKyAgICAgICAgc2V0
TWFza3NUb0JvdW5kcyhmYWxzZSkgYmFzZWQgb24gdGhlIFNldHRpbmcsIGFuZCBub3QgYmFzZWQg
b24gd2hldGhlciB0aGVyZSBhcmUgCisgICAgICAgIHRpbGUgbWFyZ2lucy4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyk6CisKKyAgICAgICAgUmV0dXJuIGZh
bHNlIGZyb20gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbnRlbnRTaGFkb3dMYXll
cigpIGlmIHRoZXJlIGlzIAorICAgICAgICBhbiBleHRlbmRlZCBiYWNrZ3JvdW5kLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbnRlbnRTaGFkb3dM
YXllcik6CisKKyAgICAgICAgU2V0dGluZyB0aGUgYmFja2dyb3VuZCBjb2xvciBvbiBtX2xheWVy
Rm9yT3ZlcmhhbmdBcmVhcyBpcyBhbGwgd2UgbmVlZCB0byBkbyB0byAKKyAgICAgICAgY3JlYXRl
IHRoZSBleHRlbmRlZCBiYWNrZ3JvdW5kIGVmZmVjdCBvbiBwYWdlcyB0aGF0IG9ubHkgaGF2ZSBi
YWNrZ3JvdW5kIGNvbG9ycy4gCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnNldEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisKKyAgICAg
ICAgUmVtb3ZlIG1haW5GcmFtZUJhY2tpbmdJc1RpbGVkV2l0aE1hcmdpbigpIHNpbmNlIHRoZXJl
IGFyZW7igJl0IGFueSBtb3JlIGNhbGxlcnMsIAorICAgICAgICBhbmQgYWRkIHNldEV4dGVuZGVk
QmFja2dyb3VuZENvbG9yKCkgc28gdGhhdCB3ZSBjYW4gdXBkYXRlIHRoZSBjb2xvciBmcm9tIAor
ICAgICAgICBSZW5kZXJWaWV3LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuaDoKKworICAgICAgICBSZXZlcnQgdGhlIGNvZGUgdGhhdCB3YXMgYWRkZWQgdG8gcGFp
bnQgYmFja2dyb3VuZCBjb2xvciBoZXJlLCBzaW5jZSB0aGlzIHNob3VsZCAKKyAgICAgICAgYWxs
IGJlIGNvdmVyZWQgYnkgY2FsbGluZyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldEV4dGVuZGVk
QmFja2dyb3VuZENvbG9yKCkuIAorICAgICAgICBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91bmRz
IHdpbGwgcnVuIHRocm91Z2ggdGhlIGZ1bGwgYmFja2dyb3VuZCBwYWludGluZyBjb2RlLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmll
dzo6YmFja2dyb3VuZFJlY3QpOgorCiAyMDE0LTAxLTI5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVA
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgTWFjIEJ1aWxkIGZpeCBhZnRlciByMTYz
MDQ2LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTYzMDI4KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDg1LDE3ICsyNDg1LDQ0IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVCYWNrZ3JvdW5kUmVjdXJz
aXYKICAgICB9CiB9CiAKLWJvb2wgRnJhbWVWaWV3OjpoYXNFeHRlbmRlZEJhY2tncm91bmQoKSBj
b25zdAorYm9vbCBGcmFtZVZpZXc6OnNob3VsZEV4dGVuZEJhY2tncm91bmRSZWN0KCkgY29uc3QK
IHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLy8gSnVzdCBiZWNhdXNl
IFNldHRpbmdzOjpiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGlzIHRydWUgZG9l
cyBub3QgbmVjZXNzYXJpbHkgbWVhbgorICAgIC8vIHRoYXQgdGhlIGJhY2tncm91bmQgcmVjdCBu
ZWVkcyB0byBiZSBleHRlbmRlZC4gU2ltcGxlIGJhY2tncm91bmRzIGNhbiBiZSBleHRlbmRlZCBq
dXN0IHdpdGgKKyAgICAvLyBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldEV4dGVuZGVkQmFja2dy
b3VuZENvbG9yKCkuIE1vcmUgY29tcGxpY2F0ZWQgYmFja2dyb3VuZHMsIHN1Y2ggYXMKKyAgICAv
LyBpbWFnZXMsIHJlcXVpcmUgZXh0ZW5kaW5nIHRoZSBiYWNrZ3JvdW5kIHJlY3QgdG8gY29udGlu
dWUgcGFpbnRpbmcgaW50byB0aGUgZXh0ZW5kZWQgcmVnaW9uLgorCisgICAgLy8gVGhpcyBmdW5j
dGlvbiBmaW5kcyBvdXQgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGV4dGVuZCB0aGUgYmFja2dyb3Vu
ZCByZWN0LCBpZiBpcyBzbywgaXQgbWFrZXMKKyAgICAvLyBzdXJlIHRoZSBSZW5kZXJWaWV3J3Mg
UmVuZGVyTGF5ZXJCYWNraW5nIGhhcyBhZGRlZCBtYXJnaW5zIHRvIHRoZSBUaWxlZEJhY2tpbmcg
YnkgY2FsbGluZworICAgIC8vIFJlbmRlckxheWVyQmFja2luZzo6c2V0VGlsZWRCYWNraW5nSGFz
TWFyZ2lucygpLgorCiAgICAgaWYgKCFmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3Vs
ZEV4dGVuZEJleW9uZFBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVGlsZWRC
YWNraW5nKiB0aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKTsKLSAgICBpZiAoIXRp
bGVkQmFja2luZykKKyAgICBpZiAoIWZyYW1lKCkuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFmcmFtZSgpLmRvY3VtZW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gZnJhbWUoKS5kb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBib2R5RWxlbWVudCA9IGZyYW1lKCku
ZG9jdW1lbnQoKS0+Ym9keSgpOworICAgIFJlbmRlck9iamVjdCogaHRtbFJlbmRlcmVyID0gaHRt
bEVsZW1lbnQgPyBodG1sRWxlbWVudC0+cmVuZGVyZXIoKSA6IDA7CisgICAgUmVuZGVyT2JqZWN0
KiBib2R5UmVuZGVyZXIgPSBib2R5RWxlbWVudCA/IGJvZHlFbGVtZW50LT5yZW5kZXJlcigpIDog
MDsKKyAgICBib29sIGRvdWNtZW50SGFzQmFja2dyb3VuZEltYWdlID0gKGh0bWxSZW5kZXJlciAm
JiBodG1sUmVuZGVyZXItPnN0eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkpCisgICAgICAgIHx8
IChib2R5UmVuZGVyZXIgJiYgYm9keVJlbmRlcmVyLT5zdHlsZSgpLmhhc0JhY2tncm91bmRJbWFn
ZSgpKTsKKworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCk7
CisgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gdGlsZWRCYWNraW5nLT5oYXNNYXJnaW5zKCk7CisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBi
YWNraW5nID0gcmVuZGVyVmlldy0+bGF5ZXIoKS0+YmFja2luZygpOworICAgIGlmICghYmFja2lu
ZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYmFja2luZy0+c2V0VGlsZWRCYWNraW5n
SGFzTWFyZ2lucyhkb3VjbWVudEhhc0JhY2tncm91bmRJbWFnZSk7CisgICAgcmV0dXJuIGRvdWNt
ZW50SGFzQmFja2dyb3VuZEltYWdlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYK
QEAgLTI1MTgsMjEgKzI1NDUsNiBAQCBJbnRSZWN0IEZyYW1lVmlldzo6ZXh0ZW5kZWRCYWNrZ3Jv
dW5kUmVjCiAjZW5kaWYKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLXZv
aWQgRnJhbWVWaWV3OjpzZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoYm9vbCBleHRlbmRC
YWNrZ3JvdW5kKQotewotICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJW
aWV3KCk7Ci0gICAgaWYgKCFyZW5kZXJWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5k
ZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJWaWV3LT5sYXllcigpLT5iYWNraW5nKCk7
Ci0gICAgaWYgKCFiYWNraW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBiYWNraW5nLT5zZXRU
aWxlZEJhY2tpbmdIYXNNYXJnaW5zKGV4dGVuZEJhY2tncm91bmQpOwotfQotI2VuZGlmCi0KIGJv
b2wgRnJhbWVWaWV3OjpzaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgJKHJldmlzaW9uIDE2MzAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxMiArMTk0LDggQEAgcHVibGljOgogICAgIHZv
aWQgdXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGNvbnN0IENvbG9yJiwgYm9vbCk7CiAKICAg
ICAvLyBleHRlbmRlZEJhY2tncm91bmRSZWN0KCkgaXMgaW4gdGhlIHZpZXdwb3J0J3MgY29vcmRp
bmF0ZSBzcGFjZS4gCi0gICAgYm9vbCBoYXNFeHRlbmRlZEJhY2tncm91bmQoKSBjb25zdDsKKyAg
ICBib29sIHNob3VsZEV4dGVuZEJhY2tncm91bmRSZWN0KCkgY29uc3Q7CiAgICAgSW50UmVjdCBl
eHRlbmRlZEJhY2tncm91bmRSZWN0KCkgY29uc3Q7Ci0gICAgCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIHZvaWQgc2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKGJv
b2wpOwotI2VuZGlmCiAKICAgICBib29sIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbihib29sKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAxNjMwMjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA1LDcgKzYwNSw5IEBA
IHZvaWQgU2V0dGluZ3M6OnNldEJhY2tncm91bmRTaG91bGRFeHRlbmQKICAgICBtX2JhY2tncm91
bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlID0gc2hvdWxkRXh0ZW5kOwogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5zZXRC
YWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2Uoc2hvdWxkRXh0ZW5kKTsKKyAgICAvLyBGcmFtZVZp
ZXc6OnNob3VsZEV4dGVuZEJhY2tncm91bmRSZWN0KCkgd2lsbCB1c2UgdGhpcyBTZXR0aW5nIHRv
IGhlbHAgZGV0ZXJtaW5lIGlmIGl0CisgICAgLy8gaXMgbmVjZXNzYXJ5IHRvIGV4dGVuZCB0aGUg
YmFja2dyb3VuZCByZWN0IGluIG9yZGVyIHRvIGFjaGVpZXZlIGFuIGV4dGVuZGVkIGJhY2tncm91
bmQuCisgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNob3VsZEV4dGVuZEJhY2tncm91
bmRSZWN0KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAJKHJldmlzaW9uIDE2MzAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIwLDcgKzE2MjAsNyBAQCBib29sIFJl
bmRlckJveDo6cmVwYWludExheWVyUmVjdHNGb3JJbWFnCiAgICAgICAgICAgICAvLyBJZiB0aGlz
IGlzIHRoZSByb290IGJhY2tncm91bmQgbGF5ZXIsIHdlIG1heSBuZWVkIHRvIGV4dGVuZCB0aGUg
cmVwYWludFJlY3QgaWYgdGhlIEZyYW1lVmlldyBoYXMgYW4KICAgICAgICAgICAgIC8vIGV4dGVu
ZGVkQmFja2dyb3VuZC4gV2Ugc2hvdWxkIG9ubHkgZXh0ZW5kIHRoZSByZWN0IGlmIGl0IGlzIGFs
cmVhZHkgZXh0ZW5kaW5nIHRoZSBmdWxsIHdpZHRoIG9yIGhlaWdodAogICAgICAgICAgICAgLy8g
b2YgdGhlIHJlbmRlcmVyUmVjdC4KLSAgICAgICAgICAgIGlmIChkcmF3aW5nUm9vdEJhY2tncm91
bmQgJiYgdmlldygpLmZyYW1lVmlldygpLmhhc0V4dGVuZGVkQmFja2dyb3VuZCgpKSB7CisgICAg
ICAgICAgICBpZiAoZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kICYmIHZpZXcoKS5mcmFtZVZpZXcoKS5z
aG91bGRFeHRlbmRCYWNrZ3JvdW5kUmVjdCgpKSB7CiAgICAgICAgICAgICAgICAgc2hvdWxkQ2xp
cFRvTGF5ZXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGV4dGVuZGVkQmFja2dy
b3VuZFJlY3QgPSB2aWV3KCkuZnJhbWVWaWV3KCkuZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpOwog
ICAgICAgICAgICAgICAgIGlmIChyZWN0VG9SZXBhaW50LndpZHRoKCkgPT0gcmVuZGVyZXJSZWN0
LndpZHRoKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMTYzMDI4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEw
Myw3ICsxMTAzLDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFjawog
ICAgICAgICAvLyB0aGUgYmFja2dyb3VuZCBwb3NpdGlvbmluZyBhcmVhLgogICAgICAgICBpZiAo
aXNSb290KCkpIHsKICAgICAgICAgICAgIHBvc2l0aW9uaW5nQXJlYVNpemUgPSBwaXhlbFNuYXBw
ZWRJbnRTaXplKHRvUmVuZGVyQm94KHRoaXMpLT5zaXplKCkgLSBMYXlvdXRTaXplKGxlZnQgKyBy
aWdodCwgdG9wICsgYm90dG9tKSwgdG9SZW5kZXJCb3godGhpcyktPmxvY2F0aW9uKCkpOwotICAg
ICAgICAgICAgaWYgKHZpZXcoKS5mcmFtZVZpZXcoKS5oYXNFeHRlbmRlZEJhY2tncm91bmQoKSkg
eworICAgICAgICAgICAgaWYgKHZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRFeHRlbmRCYWNrZ3Jv
dW5kUmVjdCgpKSB7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBleHRlbmRlZEJhY2tncm91bmRS
ZWN0ID0gdmlldygpLmZyYW1lVmlldygpLmV4dGVuZGVkQmFja2dyb3VuZFJlY3QoKTsKICAgICAg
ICAgICAgICAgICBsZWZ0ICs9IChtYXJnaW5MZWZ0KCkgLSBleHRlbmRlZEJhY2tncm91bmRSZWN0
LngoKSk7CiAgICAgICAgICAgICAgICAgdG9wICs9IChtYXJnaW5Ub3AoKSAtIGV4dGVuZGVkQmFj
a2dyb3VuZFJlY3QueSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAxNjMwMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQw
LDcgKzE0MCw2IEBAIFJlbmRlckxheWVyQmFja2luZzo6UmVuZGVyTGF5ZXJCYWNraW5nKFIKICAg
ICAgICAgaWYgKG1faXNNYWluRnJhbWVSZW5kZXJWaWV3TGF5ZXIpIHsKICAgICAgICAgICAgIHRp
bGVkQmFja2luZy0+c2V0RXhwb3NlZFJlY3QocmVuZGVyZXIoKS5mcmFtZSgpLnZpZXcoKS0+ZXhw
b3NlZFJlY3QoKSk7CiAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldFVucGFyZW50c09mZnNj
cmVlblRpbGVzKHRydWUpOwotICAgICAgICAgICAgc2V0VGlsZWRCYWNraW5nSGFzTWFyZ2lucyhw
YWdlLT5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxv
Z2dpbmdFbmFibGVkKHBhZ2UtPnNldHRpbmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5n
RW5hYmxlZCgpKTsKQEAgLTE5NCwxMSArMTkzLDYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6
OnNob3VsZFVzZVRpbGVkQgogICAgIHJldHVybiBtX3VzaW5nVGlsZWRDYWNoZUxheWVyICYmIG1f
Y3JlYXRpbmdQcmltYXJ5R3JhcGhpY3NMYXllcjsKIH0KIAotYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OnRpbGVkQmFja2luZ0hhc01hcmdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdXNpbmdU
aWxlZENhY2hlTGF5ZXIgJiYgdGlsZWRCYWNraW5nKCktPmhhc01hcmdpbnMoKTsKLX0KLQogdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnRpbGVkQmFja2luZ1VzYWdlQ2hhbmdlZChjb25zdCBHcmFw
aGljc0xheWVyKiBsYXllciwgYm9vbCB1c2luZ1RpbGVkQmFja2luZykKIHsKICAgICBjb21wb3Np
dG9yKCkubGF5ZXJUaWxlZEJhY2tpbmdVc2FnZUNoYW5nZWQobGF5ZXIsIHVzaW5nVGlsZWRCYWNr
aW5nKTsKQEAgLTI0MiwxMiArMjM2LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjphZGp1
c3RUaWxlZEJhY2sKICAgICB0aWxlZEJhY2tpbmcoKS0+c2V0VGlsZUNvdmVyYWdlKHRpbGVDb3Zl
cmFnZSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRUaWxlZEJhY2tpbmdIYXNN
YXJnaW5zKGJvb2wgZXh0ZW5kQmFja2dyb3VuZCkKK3ZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpz
ZXRUaWxlZEJhY2tpbmdIYXNNYXJnaW5zKGJvb2wgaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCkK
IHsKICAgICBpZiAoIW1fdXNpbmdUaWxlZENhY2hlTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGludCBtYXJnaW5TaXplID0gZXh0ZW5kQmFja2dyb3VuZCA/IDUxMiA6IDA7CisgICAgaW50
IG1hcmdpblNpemUgPSBoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0ID8gNTEyIDogMDsKICAgICB0
aWxlZEJhY2tpbmcoKS0+c2V0VGlsZU1hcmdpbnMobWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFy
Z2luU2l6ZSwgbWFyZ2luU2l6ZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDE2MzAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MTU0LDcgKzE1NCw2IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1VucG9zaXRpb25lZE92ZXJmbG93
Q29udHJvbHNMYXllcnMoKSBjb25zdDsKIAogICAgIGJvb2wgdXNpbmdUaWxlZEJhY2tpbmcoKSBj
b25zdCB7IHJldHVybiBtX3VzaW5nVGlsZWRDYWNoZUxheWVyOyB9Ci0gICAgYm9vbCB0aWxlZEJh
Y2tpbmdIYXNNYXJnaW4oKSBjb25zdDsKICAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygp
IGNvbnN0OwogICAgIHZvaWQgYWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKICAgICB2b2lk
IHNldFRpbGVkQmFja2luZ0hhc01hcmdpbnMoYm9vbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gMTYz
MDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OSw3ICs3ODksNyBAQCBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlQmFja2luCiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUxheWVyRm9y
Rm9vdGVyKHBhZ2UtPmZvb3RlckhlaWdodCgpKTsKICAgICAgICAgICAgICAgICB9CiAjZW5kaWYK
LSAgICAgICAgICAgICAgICBpZiAobWFpbkZyYW1lQmFja2luZ0lzVGlsZWRXaXRoTWFyZ2luKCkp
CisgICAgICAgICAgICAgICAgaWYgKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpLnNl
dHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKICAgICAgICAgICAg
ICAgICAgICAgbV9yb290Q29udGVudExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKICAg
ICAgICAgICAgIH0KIApAQCAtMjc1MiwxOSArMjc1Miw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjptYWluRnJhbWVCYWMKICAgICByZXR1cm4gYmFja2luZy0+dXNpbmdUaWxlZEJhY2tp
bmcoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6Om1haW5GcmFtZUJhY2tpbmdJ
c1RpbGVkV2l0aE1hcmdpbigpIGNvbnN0Ci17Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9y
ZW5kZXJWaWV3LmxheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gbGF5ZXItPmJhY2tpbmcoKTsK
LSAgICBpZiAoIWJhY2tpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBi
YWNraW5nLT50aWxlZEJhY2tpbmdIYXNNYXJnaW4oKTsKLX0KLQogYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnNob3VsZENvbXBvc2l0ZU92ZXJmbG93Q29udHJvbHMoKSBjb25zdAogewogICAg
IEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwpAQCAtMjgy
Myw2ICsyODEwLDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbnQK
ICAgICBpZiAodmlld0hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICAvLyBJZiB0aGUgYmFja2dyb3VuZCBpcyBnb2luZyB0byBleHRlbmQsIHRo
ZW4gaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGhhdmUgYSBzaGFkb3cgbGF5ZXIuCisgICAgaWYg
KG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNo
b3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgLy8g
T24gTWFjLCB3ZSB3YW50IGEgY29udGVudCBzaGFkb3cgbGF5ZXIgaWYgd2UncmUgdXNpbmcgdGls
ZWQgZHJhd2luZyBhbmQgY2FuIHNjcm9sbC4KICAgICBpZiAobWFpbkZyYW1lQmFja2luZ0lzVGls
ZWQoKSAmJiAhbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnByb2hpYml0c1Njcm9sbGluZygpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI5NzksNiArMjk3MCwxNCBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dmlld0hhc1RyYW5zCiAgICAgcmV0dXJuIGRvY3VtZW50QmFja2dyb3Vu
ZENvbG9yLmhhc0FscGhhKCk7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRF
eHRlbmRlZEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKCFt
X3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbGF5ZXJGb3JP
dmVyaGFuZ0FyZWFzLT5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IpOworfQorCiB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7CiAjaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQpAQCAtMjk5MCw3ICsyOTg5LDExIEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVPdmVyZmwKICNlbmRpZgogICAgICAgICAgICAgbV9sYXll
ckZvck92ZXJoYW5nQXJlYXMtPnNldERyYXdzQ29udGVudChmYWxzZSk7CiAgICAgICAgICAgICBt
X2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+c2V0U2l6ZShtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCku
ZnJhbWVSZWN0KCkuc2l6ZSgpKTsKLSAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVyaGFuZ0FyZWFz
LT5zZXRDdXN0b21BcHBlYXJhbmNlKEdyYXBoaWNzTGF5ZXI6OlNjcm9sbGluZ092ZXJoYW5nKTsK
KworICAgICAgICAgICAgaWYgKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgpLnNldHRp
bmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSkKKyAgICAgICAgICAgICAg
ICBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+c2V0QmFja2dyb3VuZENvbG9yKG1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKS5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+c2V0Q3VzdG9tQXBw
ZWFyYW5jZShHcmFwaGljc0xheWVyOjpTY3JvbGxpbmdPdmVyaGFuZyk7CiAKICAgICAgICAgICAg
IC8vIFdlIHdhbnQgdGhlIG92ZXJoYW5nIGFyZWFzIGxheWVyIHRvIGJlIHBvc2l0aW9uZWQgYmVs
b3cgdGhlIGZyYW1lIGNvbnRlbnRzLAogICAgICAgICAgICAgLy8gc28gaW5zZXJ0IGl0IGJlbG93
IHRoZSBjbGlwIGxheWVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gMTYzMDI4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDEsNyArMzAxLDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZGlkUGFpbnRCYWNraW5nKFJl
bmRlckxheWVyQmFja2luZyopOwogCi0gICAgYm9vbCBtYWluRnJhbWVCYWNraW5nSXNUaWxlZFdp
dGhNYXJnaW4oKSBjb25zdDsKKyAgICB2b2lkIHNldEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKGNv
bnN0IENvbG9yJik7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgT3ZlcmxhcE1hcDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDE2MzAyOCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIK
KyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgog
I2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4K
QEAgLTU1OSwxNiArNTYwLDE3IEBAIHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9u
cyhQYWkKICAgICAgICAgcm9vdE9ic2N1cmVzQmFja2dyb3VuZCA9IHJlbmRlcmVyT2JzY3VyZXNC
YWNrZ3JvdW5kKHJvb3RSZW5kZXJlcik7CiAgICAgfQogCi0gICAgYm9vbCBoYXNUaWxlZE1hcmdp
biA9IGZhbHNlOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBoYXNUaWxl
ZE1hcmdpbiA9IGNvbXBvc2l0b3IoKS5tYWluRnJhbWVCYWNraW5nSXNUaWxlZFdpdGhNYXJnaW4o
KTsKKyAgICBpZiAoZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlKCkpIHsKKyAgICAgICAgY29tcG9zaXRvcigpLnNldEV4dGVuZGVk
QmFja2dyb3VuZENvbG9yKGZyYW1lVmlldygpLmRvY3VtZW50QmFja2dyb3VuZENvbG9yKCkpOwor
ICAgIH0KICNlbmRpZgogCiAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50KCkucGFnZSgpOwogICAg
IGZsb2F0IHBhZ2VTY2FsZUZhY3RvciA9IHBhZ2UgPyBwYWdlLT5wYWdlU2NhbGVGYWN0b3IoKSA6
IDE7CiAKICAgICAvLyBJZiBwYWludGluZyB3aWxsIGVudGlyZWx5IGZpbGwgdGhlIHZpZXcsIG5v
IG5lZWQgdG8gZmlsbCB0aGUgYmFja2dyb3VuZC4KLSAgICBpZiAoIWhhc1RpbGVkTWFyZ2luICYm
IHJvb3RGaWxsc1ZpZXdwb3J0ICYmIHJvb3RPYnNjdXJlc0JhY2tncm91bmQgJiYgcGFnZVNjYWxl
RmFjdG9yID49IDEpCisgICAgaWYgKHJvb3RGaWxsc1ZpZXdwb3J0ICYmIHJvb3RPYnNjdXJlc0Jh
Y2tncm91bmQgJiYgcGFnZVNjYWxlRmFjdG9yID49IDEpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIFRoaXMgY29kZSB0eXBpY2FsbHkgb25seSBleGVjdXRlcyBpZiB0aGUgcm9vdCBlbGVtZW50
J3MgdmlzaWJpbGl0eSBoYXMgYmVlbiBzZXQgdG8gaGlkZGVuLApAQCAtNTc4LDcgKzU4MCw3IEBA
IHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWkKICAgICBpZiAoZnJhbWVW
aWV3KCkuaXNUcmFuc3BhcmVudCgpKSAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBkeW5hbWlj
LiBXZSBzaG91bGQgYmUgYWJsZSB0byBnbyBiYWNrIHRvIGJsaXR0aW5nIGlmIHdlIGV2ZXIgc3Rv
cCBiZWluZyB0cmFuc3BhcmVudC4KICAgICAgICAgZnJhbWVWaWV3KCkuc2V0Q2Fubm90QmxpdFRv
V2luZG93KCk7IC8vIFRoZSBwYXJlbnQgbXVzdCBzaG93IGJlaGluZCB0aGUgY2hpbGQuCiAgICAg
ZWxzZSB7Ci0gICAgICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IGhhc1RpbGVkTWFyZ2luID8g
ZnJhbWVWaWV3KCkuZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKSA6IGZyYW1lVmlldygpLmJhc2VC
YWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gZnJhbWVW
aWV3KCkuYmFzZUJhY2tncm91bmRDb2xvcigpOwogICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9y
LmFscGhhKCkpIHsKICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0
b3IgPSBwYWludEluZm8uY29udGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CiAgICAgICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkp
OwpAQCAtMTA0OSw3ICsxMDUxLDcgQEAgYm9vbCBSZW5kZXJWaWV3Ojpyb290QmFja2dyb3VuZElz
RW50aXJlbAogTGF5b3V0UmVjdCBSZW5kZXJWaWV3OjpiYWNrZ3JvdW5kUmVjdChSZW5kZXJCb3gq
IGJhY2tncm91bmRSZW5kZXJlcikgY29uc3QKIHsKICAgICBpZiAoIWhhc0NvbHVtbnMoKSkKLSAg
ICAgICAgcmV0dXJuIGZyYW1lVmlldygpLmhhc0V4dGVuZGVkQmFja2dyb3VuZCgpID8gZnJhbWVW
aWV3KCkuZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpIDogdW5zY2FsZWREb2N1bWVudFJlY3QoKTsK
KyAgICAgICAgcmV0dXJuIGZyYW1lVmlldygpLnNob3VsZEV4dGVuZEJhY2tncm91bmRSZWN0KCkg
PyBmcmFtZVZpZXcoKS5leHRlbmRlZEJhY2tncm91bmRSZWN0KCkgOiB1bnNjYWxlZERvY3VtZW50
UmVjdCgpOwogCiAgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbyA9IHRoaXMtPmNvbHVtbkluZm8o
KTsKICAgICBMYXlvdXRSZWN0IGJhY2tncm91bmRSZWN0KDAsIDAsIGNvbHVtbkluZm8tPmRlc2ly
ZWRDb2x1bW5XaWR0aCgpLCBjb2x1bW5JbmZvLT5jb2x1bW5IZWlnaHQoKSAqIGNvbHVtbkluZm8t
PmNvbHVtbkNvdW50KCkpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMDU2KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMDEtMjkg
IEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIGJhY2tn
cm91bmQgc2hvdWxkIG9ubHkgY3JlYXRlIG1hcmdpbiB0aWxlcyBmb3IgcGFnZXMgd2l0aCBiYWNr
Z3JvdW5kIAorICAgICAgICBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNzg3NgorICAgICAgICAtYW5kIGNvcnJlc3BvbmRpbmctCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xNTgyNzYzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZSBjYW4gb25seSB0ZXN0IG1hcmdpbiB0aWxlcyBpZiB3
ZSBhbHNvIGdpdmUgdGhlIGRvY3VtZW50IGEgYmFja2dyb3VuZCBpbWFnZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvcmVzb3VyY2VzL2dyZWVuYm94LnBuZzogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL3NpbXBsZS1kb2N1
bWVudC13aXRoLW1hcmdpbi10aWxlcy5odG1sOgorCiAyMDE0LTAxLTI5ICBCZW0gSm9uZXMtQmV5
ICA8YmpvbmVzYmVAYWRvYmUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBjbGlwLXBhdGggdGVzdHMg
dG8gdXNlIG5ldyBzaGFwZSBzeW50YXgKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azIvdGlsZWQtZHJhd2luZy9zaW1wbGUtZG9jdW1lbnQtd2l0aC1tYXJnaW4tdGlsZXMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcv
c2ltcGxlLWRvY3VtZW50LXdpdGgtbWFyZ2luLXRpbGVzLmh0bWwJKHJldmlzaW9uIDE2MzAyOCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9zaW1wbGUtZG9j
dW1lbnQtd2l0aC1tYXJnaW4tdGlsZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUs
OSBAQAogICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGRvVGVzdCwgZmFs
c2UpOwogICAgIDwvc2NyaXB0PgogPC9oZWFkPgotPGJvZHk+CisKKzwhLS0gVGhlIHNldEJhY2tn
cm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlIHNldHRpbmcgd2lsbCBvbmx5IGNyZWF0ZSBtYXJn
aW4gdGlsZXMgZm9yIGRvY3VtZW50cyB0aGF0IGhhdmUgYmFja2dyb3VuZCBpbWFnZXMuIC0tPgor
PGJvZHkgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKHJlc291cmNlcy9ncmVlbmJveC5wbmcp
OyBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQ7Ij4KIDxwcmUgaWQ9ImxheWVycyI+TGF5ZXIgdHJl
ZSBnb2VzIGhlcmU8L3A+CiA8L2JvZHk+CiA8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvcmVzb3VyY2VzL2dyZWVuYm94LnBuZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWlt
ZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvcmVzb3VyY2VzL2dyZWVuYm94LnBuZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvcmVzb3Vy
Y2VzL2dyZWVuYm94LnBuZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy13azIvdGlsZWQtZHJhd2luZy9yZXNvdXJjZXMvZ3JlZW5ib3gucG5nCSh3b3JraW5nIGNvcHkp
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVk
LWRyYXdpbmcvcmVzb3VyY2VzL2dyZWVuYm94LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiMjIC0wLDAgKzEgIyMKK2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmtBQUFBWkNB
SUFBQUJMaXhJMEFBQUFKa2xFUVZSNG5HSmcrTTlBTlRScTFxaFpvMmFOCm1qVnExcWhabzJaaElB
QUFBQUQvL3dNQTFYQnVybzB6c29rQUFBQUFTVVZPUks1Q1lJST0KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222623</attachid>
            <date>2014-01-29 20:27:30 -0800</date>
            <delta_ts>2014-01-30 15:11:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>extended-background-fr-2.txt</filename>
            <type>text/plain</type>
            <size>21960</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDE0LTAxLTI5ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBiYWNrZ3JvdW5kIHNo
b3VsZCBvbmx5IGNyZWF0ZSBtYXJnaW4gdGlsZXMgZm9yIHBhZ2VzIHdpdGggYmFja2dyb3VuZCAK
KyAgICAgICAgaW1hZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjc4NzYKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTU4Mjc2MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU2V0dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
KCkgZG9lc24ndCBuZWVkIHRvIGNyZWF0ZSBtYXJnaW4gdGlsZXMKKyAgICAgICAgZm9yIHBhZ2Vz
IHdpdGggc2ltcGxlIGJhY2tncm91bmQgY29sb3JzLiBJbnN0ZWFkLCB0aG9zZSBwYWdlcyBzaG91
bGQgYWNoaWV2ZSB0aGUgCisgICAgICAgIHNhbWUgZWZmZWN0IGJ5IHNldHRpbmcgYSBiYWNrZ3Jv
dW5kIGNvbG9yIG9uIFJlbmRlckxheWVyQ29tcG9zaXRvcidzCisgICAgICAgIG1fbGF5ZXJGb3JP
dmVyaGFuZ0FyZWFzLiBGb3Igbm93LCB3ZSBzaG91bGQgb25seSBjcmVhdGUgdGlsZXMgd2hlbiB0
aGVyZSBpcyBhIAorICAgICAgICBiYWNrZ3JvdW5kIGltYWdlLiBXZSBtYXkgd2FudCB0byBleHRl
bmQgdGhpcyB0byBvdGhlciB0eXBlcyBvZiBjb21wbGljYXRlZCAKKyAgICAgICAgYmFja2dyb3Vu
ZHMgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGNhbGxlcnMgdGhh
dCB3b25kZXIgb25seSBpZiB0aGUgbmV3IHNldHRpbmcgaXMgc2V0IGFsd2F5cyBjYWxsIAorICAg
ICAgICBTZXR0aW5nczo6YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSByYXRoZXIg
dGhhbiBhc2tpbmcgYWJvdXQgbWFyZ2luIAorICAgICAgICB0aWxlcy4gQW5kIGNhbGxlcnMgdGhh
dCB3YW50IHRvIGtub3cgYWJvdXQgbWFyZ2luIHRpbGVzIGNhbiBlaXRoZXIga2VlcCBxdWVyeWlu
ZyAKKyAgICAgICAgdGhhdCBkaXJlY3RseSBvciB0aGV5IGNhbiBjYWxsIEZyYW1lVmlldzo6c2hv
dWxkRXh0ZW5kQmFja2dyb3VuZFJlY3QoKS4gQW4gCisgICAgICAgIGV4dGVuZGVkIGJhY2tncm91
bmQgZG9lcyBub3QgbmVjZXNzYXJpbHkgcmVxdWlyZSBhbiBleHRlbmRlZCBiYWNrZ3JvdW5kIFJF
Q1QsIGFuZCAKKyAgICAgICAgdGhpcyBuZXcgRnJhbWVWaWV3IGZ1bmN0aW9uIGNhbiBtYWtlIHRo
YXQgZGlzdGluY3Rpb24uIAorCisgICAgICAgIFdlIG9ubHkgbmVlZCBhbiBleHRlbmRlZCBiYWNr
Z3JvdW5kIHJlY3QgaWYgd2Ugd2FudCBhbiBleHRlbmRlZCBiYWNrZ3JvdW5kIGFuZCB0aGUgCisg
ICAgICAgIGRvY3VtZW50IGhhcyBhIGJhY2tncm91bmQgaW1hZ2UuIElmIHRoYXQgaXMgdGhlIGNh
c2UsIHRoZW4gdGhpcyBmdW5jdGlvbiBhbHNvIAorICAgICAgICBtYWtlcyBzdXJlIHRoZSBSZW5k
ZXJWaWV3J3MgUmVuZGVyTGF5ZXJCYWNraW5nIGhhcyBhZGRlZCBtYXJnaW5zIHRvIHRoZSAKKyAg
ICAgICAgVGlsZWRCYWNraW5nLgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2hvdWxkRXh0ZW5kQmFja2dyb3VuZFJlY3QpOgorICAg
ICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisKKyAgICAgICAgQ2FsbCBuZXcgRnJhbWVWaWV3IGZ1
bmN0aW9uIHNob3VsZEV4dGVuZEJhY2tncm91bmRSZWN0KCkgaW5zdGVhZCBvZiBqdXN0IAorICAg
ICAgICBoYXNFeHRlbmRlZEJhY2tncm91bmQoKS4KKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5k
QmV5b25kUGFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9ySW1hZ2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkp
OgorCisgICAgICAgIERvbid0IGNhbGwgc2V0VGlsZWRCYWNraW5nSGFzTWFyZ2lucygpIHJpZ2h0
IGluIHRoZSBjb25zdHJ1Y3RvciBiZWNhdXNlIHdlIG9ubHkKKyAgICAgICAgd2FudCBtYXJnaW5z
IGlmIHdlIGhhdmUgYSBiYWNrZ3JvdW5kIGltYWdlLCBhbmQgd2Ugd29uJ3QgaGF2ZSB0aGF0IGlu
Zm9ybWF0aW9uCisgICAgICAgIHlldC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6UmVuZGVy
TGF5ZXJCYWNraW5nKToKKworICAgICAgICBDbGVhbiB1cCB0aGUgdmFyaWFibGUgbmFtZSBoZXJl
LiBXZSBhcmUgb25seSBzZXR0aW5nIG1hcmdpbnMgd2hlbiB3ZSBuZWVkIHRvIAorICAgICAgICBl
eHRlbmQgdGhlIGJhY2tncm91bmQgUkVDVC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6c2V0VGlsZWRCYWNraW5nSGFzTWFyZ2lucyk6CisKKyAgICAgICAgUmVtb3ZlIFJl
bmRlckxheWVyQmFja2luZzo6dGlsZWRCYWNraW5nSGFzTWFyZ2luKCkgc2luY2UgdGhlcmUgYXJl
bid0IGFueSBtb3JlCisgICAgICAgIGNhbGxlcnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1
c2luZ1RpbGVkQmFja2luZyk6CisgICAgICAgIAorICAgICAgICBzZXRNYXNrc1RvQm91bmRzKGZh
bHNlKSBiYXNlZCBvbiB0aGUgU2V0dGluZywgYW5kIG5vdCBiYXNlZCBvbiB3aGV0aGVyIHRoZXJl
IGFyZSAKKyAgICAgICAgdGlsZSBtYXJnaW5zLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVCYWNraW5nKToKKworICAgICAgICBSZXR1cm4gZmFsc2UgZnJvbSBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29udGVudFNoYWRvd0xheWVyKCkgaWYgdGhlcmUgaXMg
CisgICAgICAgIGFuIGV4dGVuZGVkIGJhY2tncm91bmQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29udGVudFNoYWRvd0xheWVyKToKKworICAgICAg
ICBTZXR0aW5nIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9uIG1fbGF5ZXJGb3JPdmVyaGFuZ0FyZWFz
IGlzIGFsbCB3ZSBuZWVkIHRvIGRvIHRvIAorICAgICAgICBjcmVhdGUgdGhlIGV4dGVuZGVkIGJh
Y2tncm91bmQgZWZmZWN0IG9uIHBhZ2VzIHRoYXQgb25seSBoYXZlIGJhY2tncm91bmQgY29sb3Jz
LiAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0RXh0ZW5kZWRC
YWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKToKKworICAgICAgICBSZW1vdmUgbWFpbkZy
YW1lQmFja2luZ0lzVGlsZWRXaXRoTWFyZ2luKCkgc2luY2UgdGhlcmUgYXJlbid0IGFueSBtb3Jl
IGNhbGxlcnMsCisgICAgICAgIGFuZCBhZGQgc2V0RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKSBz
byB0aGF0IHdlIGNhbiB1cGRhdGUgdGhlIGNvbG9yIGZyb20gCisgICAgICAgIFJlbmRlclZpZXcu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorCisgICAgICAg
IFJldmVydCB0aGUgY29kZSB0aGF0IHdhcyBhZGRlZCB0byBwYWludCBiYWNrZ3JvdW5kIGNvbG9y
IGhlcmUsIHNpbmNlIHRoaXMgc2hvdWxkIAorICAgICAgICBhbGwgYmUgY292ZXJlZCBieSBjYWxs
aW5nIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKS4g
CisgICAgICAgIE1vcmUgY29tcGxpY2F0ZWQgYmFja2dyb3VuZHMgd2lsbCBydW4gdGhyb3VnaCB0
aGUgZnVsbCBiYWNrZ3JvdW5kIHBhaW50aW5nIGNvZGUuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFpbnRCb3hEZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpiYWNrZ3JvdW5kUmVjdCk6
CisKIDIwMTQtMDEtMjkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBNYWMgQnVpbGQgZml4IGFmdGVyIHIxNjMwNDYuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAxNjMwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0ODUsMjAgKzI0ODUsNDUgQEAg
dm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdgogICAgIH0KIH0KIAotYm9v
bCBGcmFtZVZpZXc6Omhhc0V4dGVuZGVkQmFja2dyb3VuZCgpIGNvbnN0Citib29sIEZyYW1lVmll
dzo6c2hvdWxkRXh0ZW5kQmFja2dyb3VuZFJlY3QoKSBjb25zdAogewogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5k
U2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKQorICAgIC8vIEp1c3QgYmVjYXVzZSBTZXR0aW5nczo6
YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBpcyB0cnVlIGRvZXMgbm90IG5lY2Vz
c2FyaWx5IG1lYW4KKyAgICAvLyB0aGF0IHRoZSBiYWNrZ3JvdW5kIHJlY3QgbmVlZHMgdG8gYmUg
ZXh0ZW5kZWQuIFNpbXBsZSBiYWNrZ3JvdW5kcyBjYW4gYmUgZXh0ZW5kZWQganVzdCB3aXRoCisg
ICAgLy8gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRFeHRlbmRlZEJhY2tncm91bmRDb2xvcigp
LiBNb3JlIGNvbXBsaWNhdGVkIGJhY2tncm91bmRzLCBzdWNoIGFzCisgICAgLy8gaW1hZ2VzLCBy
ZXF1aXJlIGV4dGVuZGluZyB0aGUgYmFja2dyb3VuZCByZWN0IHRvIGNvbnRpbnVlIHBhaW50aW5n
IGludG8gdGhlIGV4dGVuZGVkIHJlZ2lvbi4KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gZmluZHMg
b3V0IGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBleHRlbmQgdGhlIGJhY2tncm91bmQgcmVjdCwgaWYg
aXMgc28sIGl0IG1ha2VzCisgICAgLy8gc3VyZSB0aGUgUmVuZGVyVmlldydzIFJlbmRlckxheWVy
QmFja2luZyBoYXMgYWRkZWQgbWFyZ2lucyB0byB0aGUgVGlsZWRCYWNraW5nIGJ5IGNhbGxpbmcK
KyAgICAvLyBSZW5kZXJMYXllckJhY2tpbmc6OnNldFRpbGVkQmFja2luZ0hhc01hcmdpbnMoKS4K
KworICAgIGlmICghZnJhbWUoKS5pc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IHRoaXMtPnRpbGVkQmFja2luZygp
OwotICAgIGlmICghdGlsZWRCYWNraW5nKQorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
KCkuZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gdGlsZWRCYWNraW5nLT5oYXNNYXJnaW5zKCk7CisgICAgUmVuZGVyVmll
dyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXJlbmRlclZpZXcp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2lu
ZyA9IHJlbmRlclZpZXctPmxheWVyKCktPmJhY2tpbmcoKTsKKyAgICBpZiAoIWJhY2tpbmcpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1l
bnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8gYm9keUVsZW1lbnQgPSBkb2N1bWVudC0+
Ym9keSgpOworICAgIGF1dG8gZG9jdW1lbnRFbGVtZW50UmVuZGVyZXIgPSBkb2N1bWVudEVsZW1l
bnQgPyBkb2N1bWVudEVsZW1lbnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGF1dG8gYm9k
eVJlbmRlcmVyID0gYm9keUVsZW1lbnQgPyBib2R5RWxlbWVudC0+cmVuZGVyZXIoKSA6IG51bGxw
dHI7CisgICAgYm9vbCBkb2N1bWVudEhhc0JhY2tncm91bmRJbWFnZSA9IChkb2N1bWVudEVsZW1l
bnRSZW5kZXJlciAmJiBkb2N1bWVudEVsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS5oYXNCYWNrZ3Jv
dW5kSW1hZ2UoKSkKKyAgICAgICAgfHwgKGJvZHlSZW5kZXJlciAmJiBib2R5UmVuZGVyZXItPnN0
eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkpOworCisgICAgYmFja2luZy0+c2V0VGlsZWRCYWNr
aW5nSGFzTWFyZ2lucyhmcmFtZSgpLnNldHRpbmdzKCkuYmFja2dyb3VuZFNob3VsZEV4dGVuZEJl
eW9uZFBhZ2UoKSAmJiBkb2N1bWVudEhhc0JhY2tncm91bmRJbWFnZSk7CisgICAgcmV0dXJuIGRv
Y3VtZW50SGFzQmFja2dyb3VuZEltYWdlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7Ci0jZW5k
aWYKKyNlbmRpZiAvLyAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogfQogCiBJbnRS
ZWN0IEZyYW1lVmlldzo6ZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpIGNvbnN0CkBAIC0yNTE4LDIx
ICsyNTQzLDYgQEAgSW50UmVjdCBGcmFtZVZpZXc6OmV4dGVuZGVkQmFja2dyb3VuZFJlYwogI2Vu
ZGlmCiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi12b2lkIEZyYW1lVmll
dzo6c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKGJvb2wgZXh0ZW5kQmFja2dyb3VuZCkK
LXsKLSAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygpOwotICAg
IGlmICghcmVuZGVyVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyTGF5ZXJCYWNr
aW5nKiBiYWNraW5nID0gcmVuZGVyVmlldy0+bGF5ZXIoKS0+YmFja2luZygpOwotICAgIGlmICgh
YmFja2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYmFja2luZy0+c2V0VGlsZWRCYWNraW5n
SGFzTWFyZ2lucyhleHRlbmRCYWNrZ3JvdW5kKTsKLX0KLSNlbmRpZgotCiBib29sIEZyYW1lVmll
dzo6c2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oKSBjb25zdAogewogICAgIHJldHVybiBtX3No
b3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShy
ZXZpc2lvbiAxNjMwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTQsMTIgKzE5NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUJh
Y2tncm91bmRSZWN1cnNpdmVseShjb25zdCBDb2xvciYsIGJvb2wpOwogCiAgICAgLy8gZXh0ZW5k
ZWRCYWNrZ3JvdW5kUmVjdCgpIGlzIGluIHRoZSB2aWV3cG9ydCdzIGNvb3JkaW5hdGUgc3BhY2Uu
IAotICAgIGJvb2wgaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kKCkgY29uc3Q7CisgICAgYm9vbCBzaG91
bGRFeHRlbmRCYWNrZ3JvdW5kUmVjdCgpIGNvbnN0OwogICAgIEludFJlY3QgZXh0ZW5kZWRCYWNr
Z3JvdW5kUmVjdCgpIGNvbnN0OwotICAgIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLSAgICB2b2lkIHNldEJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZShib29sKTsKLSNlbmRp
ZgogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbigpIGNvbnN0OwogICAgIHZv
aWQgc2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oYm9vbCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmNwcAkocmV2aXNpb24gMTYzMDI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNSw3ICs2MDUsOSBAQCB2b2lkIFNldHRp
bmdzOjpzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kCiAgICAgbV9iYWNrZ3JvdW5kU2hvdWxkRXh0
ZW5kQmV5b25kUGFnZSA9IHNob3VsZEV4dGVuZDsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2V0QmFja2dyb3VuZEV4
dGVuZHNCZXlvbmRQYWdlKHNob3VsZEV4dGVuZCk7CisgICAgLy8gRnJhbWVWaWV3OjpzaG91bGRF
eHRlbmRCYWNrZ3JvdW5kUmVjdCgpIHdpbGwgdXNlIHRoaXMgU2V0dGluZyB0byBoZWxwIGRldGVy
bWluZSBpZiBpdAorICAgIC8vIGlzIG5lY2Vzc2FyeSB0byBleHRlbmQgdGhlIGJhY2tncm91bmQg
cmVjdCBpbiBvcmRlciB0byBhY2hlaWV2ZSBhbiBleHRlbmRlZCBiYWNrZ3JvdW5kLgorICAgIG1f
cGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5zaG91bGRFeHRlbmRCYWNrZ3JvdW5kUmVjdCgpOwog
I2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShy
ZXZpc2lvbiAxNjMwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYyMCw3ICsxNjIwLDcgQEAgYm9vbCBSZW5kZXJCb3g6OnJl
cGFpbnRMYXllclJlY3RzRm9ySW1hZwogICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgcm9v
dCBiYWNrZ3JvdW5kIGxheWVyLCB3ZSBtYXkgbmVlZCB0byBleHRlbmQgdGhlIHJlcGFpbnRSZWN0
IGlmIHRoZSBGcmFtZVZpZXcgaGFzIGFuCiAgICAgICAgICAgICAvLyBleHRlbmRlZEJhY2tncm91
bmQuIFdlIHNob3VsZCBvbmx5IGV4dGVuZCB0aGUgcmVjdCBpZiBpdCBpcyBhbHJlYWR5IGV4dGVu
ZGluZyB0aGUgZnVsbCB3aWR0aCBvciBoZWlnaHQKICAgICAgICAgICAgIC8vIG9mIHRoZSByZW5k
ZXJlclJlY3QuCi0gICAgICAgICAgICBpZiAoZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kICYmIHZpZXco
KS5mcmFtZVZpZXcoKS5oYXNFeHRlbmRlZEJhY2tncm91bmQoKSkgeworICAgICAgICAgICAgaWYg
KGRyYXdpbmdSb290QmFja2dyb3VuZCAmJiB2aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkRXh0ZW5k
QmFja2dyb3VuZFJlY3QoKSkgewogICAgICAgICAgICAgICAgIHNob3VsZENsaXBUb0xheWVyID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBleHRlbmRlZEJhY2tncm91bmRSZWN0ID0g
dmlldygpLmZyYW1lVmlldygpLmV4dGVuZGVkQmFja2dyb3VuZFJlY3QoKTsKICAgICAgICAgICAg
ICAgICBpZiAocmVjdFRvUmVwYWludC53aWR0aCgpID09IHJlbmRlcmVyUmVjdC53aWR0aCgpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAJKHJldmlzaW9uIDE2MzAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDMsNyArMTEwMyw3
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2sKICAgICAgICAgLy8g
dGhlIGJhY2tncm91bmQgcG9zaXRpb25pbmcgYXJlYS4KICAgICAgICAgaWYgKGlzUm9vdCgpKSB7
CiAgICAgICAgICAgICBwb3NpdGlvbmluZ0FyZWFTaXplID0gcGl4ZWxTbmFwcGVkSW50U2l6ZSh0
b1JlbmRlckJveCh0aGlzKS0+c2l6ZSgpIC0gTGF5b3V0U2l6ZShsZWZ0ICsgcmlnaHQsIHRvcCAr
IGJvdHRvbSksIHRvUmVuZGVyQm94KHRoaXMpLT5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIGlm
ICh2aWV3KCkuZnJhbWVWaWV3KCkuaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kKCkpIHsKKyAgICAgICAg
ICAgIGlmICh2aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkRXh0ZW5kQmFja2dyb3VuZFJlY3QoKSkg
ewogICAgICAgICAgICAgICAgIEludFJlY3QgZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCA9IHZpZXco
KS5mcmFtZVZpZXcoKS5leHRlbmRlZEJhY2tncm91bmRSZWN0KCk7CiAgICAgICAgICAgICAgICAg
bGVmdCArPSAobWFyZ2luTGVmdCgpIC0gZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdC54KCkpOwogICAg
ICAgICAgICAgICAgIHRvcCArPSAobWFyZ2luVG9wKCkgLSBleHRlbmRlZEJhY2tncm91bmRSZWN0
LnkoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAkocmV2aXNpb24gMTYzMDI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNiBA
QCBSZW5kZXJMYXllckJhY2tpbmc6OlJlbmRlckxheWVyQmFja2luZyhSCiAgICAgICAgIGlmICht
X2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVyKSB7CiAgICAgICAgICAgICB0aWxlZEJhY2tpbmct
PnNldEV4cG9zZWRSZWN0KHJlbmRlcmVyKCkuZnJhbWUoKS52aWV3KCktPmV4cG9zZWRSZWN0KCkp
OwogICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRVbnBhcmVudHNPZmZzY3JlZW5UaWxlcyh0
cnVlKTsKLSAgICAgICAgICAgIHNldFRpbGVkQmFja2luZ0hhc01hcmdpbnMocGFnZS0+c2V0dGlu
Z3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHRpbGVkQmFja2luZy0+c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxl
ZChwYWdlLT5zZXR0aW5ncygpLnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSk7
CkBAIC0xOTQsMTEgKzE5Myw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGRVc2VU
aWxlZEIKICAgICByZXR1cm4gbV91c2luZ1RpbGVkQ2FjaGVMYXllciAmJiBtX2NyZWF0aW5nUHJp
bWFyeUdyYXBoaWNzTGF5ZXI7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp0aWxlZEJh
Y2tpbmdIYXNNYXJnaW4oKSBjb25zdAotewotICAgIHJldHVybiBtX3VzaW5nVGlsZWRDYWNoZUxh
eWVyICYmIHRpbGVkQmFja2luZygpLT5oYXNNYXJnaW5zKCk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjp0aWxlZEJhY2tpbmdVc2FnZUNoYW5nZWQoY29uc3QgR3JhcGhpY3NMYXllciog
bGF5ZXIsIGJvb2wgdXNpbmdUaWxlZEJhY2tpbmcpCiB7CiAgICAgY29tcG9zaXRvcigpLmxheWVy
VGlsZWRCYWNraW5nVXNhZ2VDaGFuZ2VkKGxheWVyLCB1c2luZ1RpbGVkQmFja2luZyk7CkBAIC0y
NDIsMTIgKzIzNiwxMiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6YWRqdXN0VGlsZWRCYWNr
CiAgICAgdGlsZWRCYWNraW5nKCktPnNldFRpbGVDb3ZlcmFnZSh0aWxlQ292ZXJhZ2UpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0VGlsZWRCYWNraW5nSGFzTWFyZ2lucyhib29s
IGV4dGVuZEJhY2tncm91bmQpCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0VGlsZWRCYWNr
aW5nSGFzTWFyZ2lucyhib29sIGhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QpCiB7CiAgICAgaWYg
KCFtX3VzaW5nVGlsZWRDYWNoZUxheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgbWFy
Z2luU2l6ZSA9IGV4dGVuZEJhY2tncm91bmQgPyA1MTIgOiAwOworICAgIGludCBtYXJnaW5TaXpl
ID0gaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCA/IDUxMiA6IDA7CiAgICAgdGlsZWRCYWNraW5n
KCktPnNldFRpbGVNYXJnaW5zKG1hcmdpblNpemUsIG1hcmdpblNpemUsIG1hcmdpblNpemUsIG1h
cmdpblNpemUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5oCShyZXZpc2lvbiAxNjMwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNVbnBvc2l0aW9uZWRPdmVyZmxvd0NvbnRyb2xzTGF5
ZXJzKCkgY29uc3Q7CiAKICAgICBib29sIHVzaW5nVGlsZWRCYWNraW5nKCkgY29uc3QgeyByZXR1
cm4gbV91c2luZ1RpbGVkQ2FjaGVMYXllcjsgfQotICAgIGJvb2wgdGlsZWRCYWNraW5nSGFzTWFy
Z2luKCkgY29uc3Q7CiAgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKSBjb25zdDsKICAg
ICB2b2lkIGFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7CiAgICAgdm9pZCBzZXRUaWxlZEJh
Y2tpbmdIYXNNYXJnaW5zKGJvb2wpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDE2MzAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03ODksNyArNzg5LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZUJhY2tpbgogICAgICAgICAgICAgICAgICAgICB1cGRhdGVMYXllckZvckZvb3RlcihwYWdl
LT5mb290ZXJIZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAg
ICAgICAgaWYgKG1haW5GcmFtZUJhY2tpbmdJc1RpbGVkV2l0aE1hcmdpbigpKQorICAgICAgICAg
ICAgICAgIGlmIChtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpLmJh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1f
cm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CiAgICAgICAgICAgICB9
CiAKQEAgLTI3NTIsMTkgKzI3NTIsNiBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bWFp
bkZyYW1lQmFjCiAgICAgcmV0dXJuIGJhY2tpbmctPnVzaW5nVGlsZWRCYWNraW5nKCk7CiB9CiAK
LWJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjptYWluRnJhbWVCYWNraW5nSXNUaWxlZFdpdGhN
YXJnaW4oKSBjb25zdAotewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fcmVuZGVyVmlldy5s
YXllcigpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJl
bmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLT5iYWNraW5nKCk7Ci0gICAgaWYgKCFi
YWNraW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gYmFja2luZy0+dGls
ZWRCYWNraW5nSGFzTWFyZ2luKCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpz
aG91bGRDb21wb3NpdGVPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcm
IGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKQEAgLTI4MjMsNiArMjgxMCwx
MCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb250CiAgICAgaWYgKHZp
ZXdIYXNUcmFuc3BhcmVudEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgLy8gSWYgdGhlIGJhY2tncm91bmQgaXMgZ29pbmcgdG8gZXh0ZW5kLCB0aGVuIGl0IGRvZXNu
J3QgbWFrZSBzZW5zZSB0byBoYXZlIGEgc2hhZG93IGxheWVyLgorICAgIGlmIChtX3JlbmRlclZp
ZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRC
ZXlvbmRQYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIC8vIE9uIE1hYywgd2Ug
d2FudCBhIGNvbnRlbnQgc2hhZG93IGxheWVyIGlmIHdlJ3JlIHVzaW5nIHRpbGVkIGRyYXdpbmcg
YW5kIGNhbiBzY3JvbGwuCiAgICAgaWYgKG1haW5GcmFtZUJhY2tpbmdJc1RpbGVkKCkgJiYgIW1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS5wcm9oaWJpdHNTY3JvbGxpbmcoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yOTc5LDYgKzI5NzAsMTggQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnZpZXdIYXNUcmFucwogICAgIHJldHVybiBkb2N1bWVudEJhY2tncm91bmRDb2xvci5oYXNB
bHBoYSgpOwogfQogCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0RXh0ZW5kZWRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKKyAgICBBU1NFUlQobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCkuc2V0dGlu
Z3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpID09IGNvbG9yLmlzVmFsaWQo
KSk7CisKKyAgICBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+c2V0QmFja2dyb3VuZENvbG9yKGNv
bG9yKTsKKworICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQorICAgICAgICBtX2xheWVyRm9yT3Zl
cmhhbmdBcmVhcy0+c2V0Q3VzdG9tQXBwZWFyYW5jZShHcmFwaGljc0xheWVyOjpTY3JvbGxpbmdP
dmVyaGFuZyk7CisjZW5kaWYKK30KKwogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0
ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoKQogewogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
QEAgLTI5OTAsNyArMjk5MywxMSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
T3ZlcmZsCiAjZW5kaWYKICAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzLT5zZXRE
cmF3c0NvbnRlbnQoZmFsc2UpOwogICAgICAgICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMt
PnNldFNpemUobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lUmVjdCgpLnNpemUoKSk7Ci0g
ICAgICAgICAgICBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+c2V0Q3VzdG9tQXBwZWFyYW5jZShH
cmFwaGljc0xheWVyOjpTY3JvbGxpbmdPdmVyaGFuZyk7CisKKyAgICAgICAgICAgIGlmIChtX3Jl
bmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRF
eHRlbmRCZXlvbmRQYWdlKCkpCisgICAgICAgICAgICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJl
YXMtPnNldEJhY2tncm91bmRDb2xvcihtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZG9jdW1lbnRC
YWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9s
YXllckZvck92ZXJoYW5nQXJlYXMtPnNldEN1c3RvbUFwcGVhcmFuY2UoR3JhcGhpY3NMYXllcjo6
U2Nyb2xsaW5nT3ZlcmhhbmcpOwogCiAgICAgICAgICAgICAvLyBXZSB3YW50IHRoZSBvdmVyaGFu
ZyBhcmVhcyBsYXllciB0byBiZSBwb3NpdGlvbmVkIGJlbG93IHRoZSBmcmFtZSBjb250ZW50cywK
ICAgICAgICAgICAgIC8vIHNvIGluc2VydCBpdCBiZWxvdyB0aGUgY2xpcCBsYXllci4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJ
KHJldmlzaW9uIDE2MzAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDcgKzMwMSw3IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGRpZFBhaW50QmFja2luZyhSZW5kZXJMYXllckJhY2tpbmcqKTsKIAot
ICAgIGJvb2wgbWFpbkZyYW1lQmFja2luZ0lzVGlsZWRXaXRoTWFyZ2luKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRFeHRlbmRlZEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYpOwogCiBwcml2YXRl
OgogICAgIGNsYXNzIE92ZXJsYXBNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCShyZXZpc2lvbiAxNjMwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJTZWxlY3Rpb25J
bmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0
ZS5oIgogI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CkBAIC01NTksMTYgKzU2MCwxNiBAQCB2
b2lkIFJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpCiAgICAgICAgIHJvb3RPYnNj
dXJlc0JhY2tncm91bmQgPSByZW5kZXJlck9ic2N1cmVzQmFja2dyb3VuZChyb290UmVuZGVyZXIp
OwogICAgIH0KIAotICAgIGJvb2wgaGFzVGlsZWRNYXJnaW4gPSBmYWxzZTsKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaGFzVGlsZWRNYXJnaW4gPSBjb21wb3NpdG9yKCku
bWFpbkZyYW1lQmFja2luZ0lzVGlsZWRXaXRoTWFyZ2luKCk7CisgICAgY29tcG9zaXRvcigpLnNl
dEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKGZyYW1lVmlldygpLmZyYW1lKCkuc2V0dGluZ3MoKS5i
YWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpID8KKyAgICAgICAgZnJhbWVWaWV3KCku
ZG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoKSA6IENvbG9yKCkpOwogI2VuZGlmCiAKICAgICBQYWdl
KiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCk7CiAgICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0g
cGFnZSA/IHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpIDogMTsKIAogICAgIC8vIElmIHBhaW50aW5n
IHdpbGwgZW50aXJlbHkgZmlsbCB0aGUgdmlldywgbm8gbmVlZCB0byBmaWxsIHRoZSBiYWNrZ3Jv
dW5kLgotICAgIGlmICghaGFzVGlsZWRNYXJnaW4gJiYgcm9vdEZpbGxzVmlld3BvcnQgJiYgcm9v
dE9ic2N1cmVzQmFja2dyb3VuZCAmJiBwYWdlU2NhbGVGYWN0b3IgPj0gMSkKKyAgICBpZiAocm9v
dEZpbGxzVmlld3BvcnQgJiYgcm9vdE9ic2N1cmVzQmFja2dyb3VuZCAmJiBwYWdlU2NhbGVGYWN0
b3IgPj0gMSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhpcyBjb2RlIHR5cGljYWxseSBv
bmx5IGV4ZWN1dGVzIGlmIHRoZSByb290IGVsZW1lbnQncyB2aXNpYmlsaXR5IGhhcyBiZWVuIHNl
dCB0byBoaWRkZW4sCkBAIC01NzgsNyArNTc5LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpwYWludEJv
eERlY29yYXRpb25zKFBhaQogICAgIGlmIChmcmFtZVZpZXcoKS5pc1RyYW5zcGFyZW50KCkpIC8v
IEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGR5bmFtaWMuIFdlIHNob3VsZCBiZSBhYmxlIHRvIGdv
IGJhY2sgdG8gYmxpdHRpbmcgaWYgd2UgZXZlciBzdG9wIGJlaW5nIHRyYW5zcGFyZW50LgogICAg
ICAgICBmcmFtZVZpZXcoKS5zZXRDYW5ub3RCbGl0VG9XaW5kb3coKTsgLy8gVGhlIHBhcmVudCBt
dXN0IHNob3cgYmVoaW5kIHRoZSBjaGlsZC4KICAgICBlbHNlIHsKLSAgICAgICAgQ29sb3IgYmFj
a2dyb3VuZENvbG9yID0gaGFzVGlsZWRNYXJnaW4gPyBmcmFtZVZpZXcoKS5kb2N1bWVudEJhY2tn
cm91bmRDb2xvcigpIDogZnJhbWVWaWV3KCkuYmFzZUJhY2tncm91bmRDb2xvcigpOworICAgICAg
ICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBmcmFtZVZpZXcoKS5iYXNlQmFja2dyb3VuZENvbG9y
KCk7CiAgICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSkgewogICAgICAgICAgICAg
Q29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHBhaW50SW5mby5jb250ZXh0LT5j
b21wb3NpdGVPcGVyYXRpb24oKTsKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CkBAIC0xMDQ5LDcgKzEwNTAsNyBAQCBi
b29sIFJlbmRlclZpZXc6OnJvb3RCYWNrZ3JvdW5kSXNFbnRpcmVsCiBMYXlvdXRSZWN0IFJlbmRl
clZpZXc6OmJhY2tncm91bmRSZWN0KFJlbmRlckJveCogYmFja2dyb3VuZFJlbmRlcmVyKSBjb25z
dAogewogICAgIGlmICghaGFzQ29sdW1ucygpKQotICAgICAgICByZXR1cm4gZnJhbWVWaWV3KCku
aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kKCkgPyBmcmFtZVZpZXcoKS5leHRlbmRlZEJhY2tncm91bmRS
ZWN0KCkgOiB1bnNjYWxlZERvY3VtZW50UmVjdCgpOworICAgICAgICByZXR1cm4gZnJhbWVWaWV3
KCkuc2hvdWxkRXh0ZW5kQmFja2dyb3VuZFJlY3QoKSA/IGZyYW1lVmlldygpLmV4dGVuZGVkQmFj
a2dyb3VuZFJlY3QoKSA6IHVuc2NhbGVkRG9jdW1lbnRSZWN0KCk7CiAKICAgICBDb2x1bW5JbmZv
KiBjb2x1bW5JbmZvID0gdGhpcy0+Y29sdW1uSW5mbygpOwogICAgIExheW91dFJlY3QgYmFja2dy
b3VuZFJlY3QoMCwgMCwgY29sdW1uSW5mby0+ZGVzaXJlZENvbHVtbldpZHRoKCksIGNvbHVtbklu
Zm8tPmNvbHVtbkhlaWdodCgpICogY29sdW1uSW5mby0+Y29sdW1uQ291bnQoKSk7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjMwNTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNC0wMS0yOSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgYmFja2dyb3VuZCBzaG91bGQgb25seSBjcmVhdGUg
bWFyZ2luIHRpbGVzIGZvciBwYWdlcyB3aXRoIGJhY2tncm91bmQgCisgICAgICAgIGltYWdlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3ODc2Cisg
ICAgICAgIC1hbmQgY29ycmVzcG9uZGluZy0KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE1ODI3
NjMyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
IGNhbiBvbmx5IHRlc3QgbWFyZ2luIHRpbGVzIGlmIHdlIGFsc28gZ2l2ZSB0aGUgZG9jdW1lbnQg
YSBiYWNrZ3JvdW5kIGltYWdlLgorICAgICAgICAqIHBsYXRmb3JtL21hYy13azIvdGlsZWQtZHJh
d2luZy9yZXNvdXJjZXMvZ3JlZW5ib3gucG5nOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMtd2syL3RpbGVkLWRyYXdpbmcvc2ltcGxlLWRvY3VtZW50LXdpdGgtbWFyZ2luLXRpbGVzLmh0
bWw6CisKIDIwMTQtMDEtMjkgIEJlbSBKb25lcy1CZXkgIDxiam9uZXNiZUBhZG9iZS5jb20+CiAK
ICAgICAgICAgVXBkYXRlIGNsaXAtcGF0aCB0ZXN0cyB0byB1c2UgbmV3IHNoYXBlIHN5bnRheApJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL3NpbXBsZS1k
b2N1bWVudC13aXRoLW1hcmdpbi10aWxlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9zaW1wbGUtZG9jdW1lbnQtd2l0aC1tYXJn
aW4tdGlsZXMuaHRtbAkocmV2aXNpb24gMTYzMDI4KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMi90aWxlZC1kcmF3aW5nL3NpbXBsZS1kb2N1bWVudC13aXRoLW1hcmdpbi10aWxlcy5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw5IEBACiAgICAgICAgIHdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CiAgICAgPC9zY3JpcHQ+CiA8L2hl
YWQ+Ci08Ym9keT4KKworPCEtLSBUaGUgc2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2Ugc2V0dGluZyB3aWxsIG9ubHkgY3JlYXRlIG1hcmdpbiB0aWxlcyBmb3IgZG9jdW1lbnRzIHRo
YXQgaGF2ZSBiYWNrZ3JvdW5kIGltYWdlcy4gLS0+Cis8Ym9keSBzdHlsZT0iYmFja2dyb3VuZC1p
bWFnZTp1cmwocmVzb3VyY2VzL2dyZWVuYm94LnBuZyk7IGJhY2tncm91bmQtcmVwZWF0OnJlcGVh
dDsiPgogPHByZSBpZD0ibGF5ZXJzIj5MYXllciB0cmVlIGdvZXMgaGVyZTwvcD4KIDwvYm9keT4K
IDwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2lu
Zy9yZXNvdXJjZXMvZ3JlZW5ib3gucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUg
bWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2lu
Zy9yZXNvdXJjZXMvZ3JlZW5ib3gucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9yZXNvdXJjZXMvZ3JlZW5ib3gucG5nCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL3Jlc291
cmNlcy9ncmVlbmJveC5wbmcJKHdvcmtpbmcgY29weSkKClByb3BlcnR5IGNoYW5nZXMgb246IExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9yZXNvdXJjZXMvZ3JlZW5i
b3gucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTAsMCArMSAjIworYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKCmlW
Qk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCa0FBQUFaQ0FJQUFBQkxpeEkwQUFBQUprbEVRVlI0bkdK
ZytNOUFOVFJxMXFoWm8yYU4KbWpWcTFxaFpvMlpoSUFBQUFBRC8vd01BMVhCdXJvMHpzb2tBQUFB
QVNVVk9SSzVDWUlJPQoK
</data>
<flag name="review"
          id="246629"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222747</attachid>
            <date>2014-01-30 15:11:09 -0800</date>
            <delta_ts>2014-01-30 16:23:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>25703</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzExNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDE0LTAxLTMwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBiYWNrZ3JvdW5kIHNo
b3VsZCBvbmx5IGNyZWF0ZSBtYXJnaW4gdGlsZXMgZm9yIHBhZ2VzIHdpdGggYmFja2dyb3VuZCAK
KyAgICAgICAgaW1hZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjc4NzYKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTU4Mjc2MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU2V0dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
KCkgZG9lc24ndCBuZWVkIHRvIGNyZWF0ZSBtYXJnaW4gdGlsZXMKKyAgICAgICAgZm9yIHBhZ2Vz
IHdpdGggc2ltcGxlIGJhY2tncm91bmQgY29sb3JzLiBJbnN0ZWFkLCB0aG9zZSBwYWdlcyBzaG91
bGQgYWNoaWV2ZSB0aGUgCisgICAgICAgIHNhbWUgZWZmZWN0IGJ5IHNldHRpbmcgYSBiYWNrZ3Jv
dW5kIGNvbG9yIG9uIFJlbmRlckxheWVyQ29tcG9zaXRvcidzCisgICAgICAgIG1fbGF5ZXJGb3JP
dmVyaGFuZ0FyZWFzLiBGb3Igbm93LCB3ZSBzaG91bGQgb25seSBjcmVhdGUgdGlsZXMgd2hlbiB0
aGVyZSBpcyBhIAorICAgICAgICBiYWNrZ3JvdW5kIGltYWdlLiBXZSBtYXkgd2FudCB0byBleHRl
bmQgdGhpcyB0byBvdGhlciB0eXBlcyBvZiBjb21wbGljYXRlZCAKKyAgICAgICAgYmFja2dyb3Vu
ZHMgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGNhbGxlcnMgdGhh
dCB3b25kZXIgb25seSBpZiB0aGUgbmV3IHNldHRpbmcgaXMgc2V0IGFsd2F5cyBjYWxsIAorICAg
ICAgICBTZXR0aW5nczo6YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSByYXRoZXIg
dGhhbiBhc2tpbmcgYWJvdXQgbWFyZ2luIAorICAgICAgICB0aWxlcy4gQW5kIGNhbGxlcnMgdGhh
dCB3YW50IHRvIGtub3cgYWJvdXQgbWFyZ2luIHRpbGVzIGNhbiBlaXRoZXIga2VlcCBxdWVyeWlu
ZyAKKyAgICAgICAgdGhhdCBkaXJlY3RseSBvciB0aGV5IGNhbiBjYWxsIEZyYW1lVmlldzo6aGFz
RXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpLiBBbiAKKyAgICAgICAgZXh0ZW5kZWQgYmFja2dyb3Vu
ZCBkb2VzIG5vdCBuZWNlc3NhcmlseSByZXF1aXJlIGFuIGV4dGVuZGVkIGJhY2tncm91bmQgUkVD
VCwgYW5kIAorICAgICAgICB0aGlzIG5ldyBGcmFtZVZpZXcgZnVuY3Rpb24gY2FuIG1ha2UgdGhh
dCBkaXN0aW5jdGlvbi4gCisKKyAgICAgICAgV2hlbiBzZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9u
ZFBhZ2UoKSBpcyBjYWxsZWQsIGNhbGwgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjogCisgICAgICAg
IHNldFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcigpIHdpdGggZWl0aGVyIHRoZSBkb2N1bWVu
dCBiYWNrZ3JvdW5kIGNvbG9yLCBvciBhbiAKKyAgICAgICAgaW52YWxpZCBjb2xvciwgZGVwZW5k
aW5nIG9uIHdoZXRoZXIgeW91IGhhdmUgb3IgZG8gbm90IGhhdmUgYW4gZXh0ZW5kZWQgCisgICAg
ICAgIGJhY2tncm91bmQuIEFsc28gY2FsbCBuZWVkc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QoKSB0
byBkZXRlcm1pbmUgaWYgd2UgYWxzbyBuZWVkIAorICAgICAgICB0byBleHRlbmQgdGhlIGJhY2tn
cm91bmQgcmVjdCwgYW5kIHRoZW4gY2FsbCBzZXRIYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0KCkg
d2l0aCAKKyAgICAgICAgaXRzIHZhbHVlLgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQ
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5k
UmVjdCk6CisKKyAgICAgICAgIFJpZ2h0IG5vdyB3ZSBvbmx5IG5lZWQgdG8gZXh0ZW5kIHRoZSBi
YWNrZ3JvdW5kIHJlY3QgZm9yIGRvY3VtZW50cyB3aXRoIAorICAgICAgICBiYWNrZ3JvdW5kIGlt
YWdlcyBvbiB0aGUgcm9vdC4gVGhpcyBtYXkgYmUgZXh0ZW5kZWQgaW4gdGhlIGZ1dHVyZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6bmVlZHNFeHRlbmRlZEJhY2tncm91bmRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0SGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmV4dGVuZGVkQmFja2dyb3VuZFJlY3Qp
OgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisKKyAgICAgICAgRXhwb3NlIGRlZmF1bHRU
aWxlV2lkdGggYW5kIGRlZmF1bHRUaWxlSGVpZ2h0IGZyb20gVGlsZWRCYWNraW5nLmggc28gdGhh
dCB3ZSBjYW4gCisgICAgICAgIGFjY2VzcyB0aGUgdmFsdWVzIGZyb20gUmVuZGVyTGF5ZXJCYWNr
aW5nLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZy5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbToKKworICAgICAg
ICBoYXNFeHRlbmRlZEJhY2tncm91bmQoKSBpcyBub3cgY2FsbGVkIGhhc0V4dGVuZGVkQmFja2dy
b3VuZFJlY3QoKSB0byBkaXN0aW5ndWlzaCAKKyAgICAgICAgdGhlIGNhc2Ugd2hlcmUgYW4gZXh0
ZW5kZWQgUkVDVCBpcyBuZWVkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9ySW1hZ2Up
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFja2dyb3VuZEltYWdl
R2VvbWV0cnkpOgorCisgICAgICAgIERvbid0IGNhbGwgc2V0VGlsZWRCYWNraW5nSGFzTWFyZ2lu
cygpIHJpZ2h0IGluIHRoZSBjb25zdHJ1Y3RvciBiZWNhdXNlIHdlIG9ubHkKKyAgICAgICAgd2Fu
dCBtYXJnaW5zIGlmIHdlIGhhdmUgYSBiYWNrZ3JvdW5kIGltYWdlLCBhbmQgd2Ugd29uJ3QgaGF2
ZSB0aGF0IGluZm9ybWF0aW9uCisgICAgICAgIHlldC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6UmVuZGVyTGF5ZXJCYWNraW5nKToKKworICAgICAgICBDbGVhbiB1cCB0aGUgdmFyaWFibGUg
bmFtZSBoZXJlLiBXZSBhcmUgb25seSBzZXR0aW5nIG1hcmdpbnMgd2hlbiB3ZSBuZWVkIHRvIAor
ICAgICAgICBleHRlbmQgdGhlIGJhY2tncm91bmQgUkVDVC4gQWxzbyBtYWtlIHVzIG9mIG5ld2x5
LWV4cG9zZWQgZGVmYXVsdFRpbGVXaWR0aCBhbmQgCisgICAgICAgIEhlaWdodC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0VGlsZWRCYWNraW5nSGFzTWFyZ2lucyk6
CisKKyAgICAgICAgUmVtb3ZlIFJlbmRlckxheWVyQmFja2luZzo6dGlsZWRCYWNraW5nSGFzTWFy
Z2luKCkgc2luY2UgdGhlcmUgYXJlbid0IGFueSBtb3JlCisgICAgICAgIGNhbGxlcnMuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjp1c2luZ1RpbGVkQmFja2luZyk6CisKKyAgICAgICAgc2V0TWFz
a3NUb0JvdW5kcyhmYWxzZSkgYmFzZWQgb24gdGhlIFNldHRpbmcsIGFuZCBub3QgYmFzZWQgb24g
d2hldGhlciB0aGVyZSBhcmUgCisgICAgICAgIHRpbGUgbWFyZ2lucy4KKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyk6CisKKyAgICAgICAgUmV0dXJuIGZhbHNl
IGZyb20gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbnRlbnRTaGFkb3dMYXllcigp
IGlmIHRoZXJlIGlzIAorICAgICAgICBhbiBleHRlbmRlZCBiYWNrZ3JvdW5kLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbnRlbnRTaGFkb3dMYXll
cik6CisKKyAgICAgICAgU2V0dGluZyB0aGUgYmFja2dyb3VuZCBjb2xvciBvbiBtX2xheWVyRm9y
T3ZlcmhhbmdBcmVhcyBpcyBhbGwgd2UgbmVlZCB0byBkbyB0byAKKyAgICAgICAgY3JlYXRlIHRo
ZSBleHRlbmRlZCBiYWNrZ3JvdW5kIGVmZmVjdCBvbiBwYWdlcyB0aGF0IG9ubHkgaGF2ZSBiYWNr
Z3JvdW5kIGNvbG9ycy4gCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnNldFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorCisgICAg
ICAgIFJlbW92ZSBtYWluRnJhbWVCYWNraW5nSXNUaWxlZFdpdGhNYXJnaW4oKSBzaW5jZSB0aGVy
ZSBhcmVuJ3QgYW55IG1vcmUgY2FsbGVycywKKyAgICAgICAgYW5kIGFkZCBzZXRSb290RXh0ZW5k
ZWRCYWNrZ3JvdW5kQ29sb3IoKSBzbyB0aGF0IHdlIGNhbiB1cGRhdGUgdGhlIGNvbG9yIGZyb20g
CisgICAgICAgIFJlbmRlclZpZXcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5oOgorCisgICAgICAgIFJldmVydCB0aGUgY29kZSB0aGF0IHdhcyBhZGRlZCB0byBw
YWludCBiYWNrZ3JvdW5kIGNvbG9yIGhlcmUsIHNpbmNlIHRoaXMgc2hvdWxkIAorICAgICAgICBh
bGwgYmUgY292ZXJlZCBieSBjYWxsaW5nIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0RXh0ZW5k
ZWRCYWNrZ3JvdW5kQ29sb3IoKS4gCisgICAgICAgIE1vcmUgY29tcGxpY2F0ZWQgYmFja2dyb3Vu
ZHMgd2lsbCBydW4gdGhyb3VnaCB0aGUgZnVsbCBiYWNrZ3JvdW5kIHBhaW50aW5nIGNvZGUuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpiYWNrZ3JvdW5kUmVjdCk6CisKIDIwMTQtMDEtMzAgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFtDTWFrZV0gQWRkIGEgIm1ha2Ug
ZGlzdCIgdGFyZ2V0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAx
NjMwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0MzUsNyArMjQzNSwyMiBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQmFja2dyb3Vu
ZFJlY3Vyc2l2CiAgICAgfQogfQogCi1ib29sIEZyYW1lVmlldzo6aGFzRXh0ZW5kZWRCYWNrZ3Jv
dW5kKCkgY29uc3QKK3ZvaWQgRnJhbWVWaWV3OjpzZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBh
Z2UoYm9vbCBleHRlbmRCYWNrZ3JvdW5kKQoreworICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcg
PSB0aGlzLT5yZW5kZXJWaWV3KCk7CisgICAgaWYgKCFyZW5kZXJWaWV3KQorICAgICAgICByZXR1
cm47CisKKyAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkuc2V0Um9vdEV4dGVuZGVkQmFja2dy
b3VuZENvbG9yKGV4dGVuZEJhY2tncm91bmQgPyBkb2N1bWVudEJhY2tncm91bmRDb2xvcigpIDog
Q29sb3IoKSk7CisKKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJWaWV3
LT5sYXllcigpLT5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICBzZXRIYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0KG5lZWRzRXh0ZW5kZWRCYWNrZ3Jv
dW5kUmVjdCgpKTsKK30KKworYm9vbCBGcmFtZVZpZXc6Omhhc0V4dGVuZGVkQmFja2dyb3VuZFJl
Y3QoKSBjb25zdAogewogICAgIGlmICghZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI0NDcsMTcg
KzI0NjIsMzkgQEAgYm9vbCBGcmFtZVZpZXc6Omhhc0V4dGVuZGVkQmFja2dyb3VuZCgpIAogICAg
IHJldHVybiB0aWxlZEJhY2tpbmctPmhhc01hcmdpbnMoKTsKIH0KIAotSW50UmVjdCBGcmFtZVZp
ZXc6OmV4dGVuZGVkQmFja2dyb3VuZFJlY3QoKSBjb25zdAorYm9vbCBGcmFtZVZpZXc6Om5lZWRz
RXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpIGNvbnN0CiB7Ci0gICAgVGlsZWRCYWNraW5nKiB0aWxl
ZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKTsKLSAgICBpZiAoIXRpbGVkQmFja2luZykK
LSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAvLyBKdXN0IGJlY2F1c2UgU2V0dGluZ3M6
OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgaXMgdHJ1ZSBkb2VzIG5vdCBuZWNl
c3NhcmlseSBtZWFuCisgICAgLy8gdGhhdCB0aGUgYmFja2dyb3VuZCByZWN0IG5lZWRzIHRvIGJl
IGV4dGVuZGVkLiBTaW1wbGUgYmFja2dyb3VuZHMgY2FuIGJlIGV4dGVuZGVkIGp1c3Qgd2l0aAor
ICAgIC8vIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Um9vdEV4dGVuZGVkQmFja2dyb3VuZENv
bG9yKCkuIE1vcmUgY29tcGxpY2F0ZWQgYmFja2dyb3VuZHMsIHN1Y2ggYXMKKyAgICAvLyBpbWFn
ZXMsIHJlcXVpcmUgZXh0ZW5kaW5nIHRoZSBiYWNrZ3JvdW5kIHJlY3QgdG8gY29udGludWUgcGFp
bnRpbmcgaW50byB0aGUgZXh0ZW5kZWQgcmVnaW9uLgorICAgIC8vIFRoaXMgZnVuY3Rpb24gZmlu
ZHMgb3V0IGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBleHRlbmQgdGhlIGJhY2tncm91bmQgcmVjdC4K
IAotICAgIHJldHVybiB0aWxlZEJhY2tpbmctPmJvdW5kcygpOwotfQorICAgIGlmICghZnJhbWUo
KS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAotdm9pZCBGcmFtZVZpZXc6OnNldEJhY2tncm91bmRFeHRlbmRzQmV5
b25kUGFnZShib29sIGV4dGVuZEJhY2tncm91bmQpCisgICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZy
YW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lKCkuZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBhdXRvIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKTsKKyAgICBhdXRvIGJvZHlFbGVtZW50ID0gZG9jdW1lbnQtPmJvZHkoKTsKKyAgICBh
dXRvIGRvY3VtZW50RWxlbWVudFJlbmRlcmVyID0gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRF
bGVtZW50LT5yZW5kZXJlcigpIDogbnVsbHB0cjsKKyAgICBhdXRvIGJvZHlSZW5kZXJlciA9IGJv
ZHlFbGVtZW50ID8gYm9keUVsZW1lbnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGJvb2wg
ZG9jdW1lbnRIYXNCYWNrZ3JvdW5kSW1hZ2UgPSAoZG9jdW1lbnRFbGVtZW50UmVuZGVyZXIgJiYg
ZG9jdW1lbnRFbGVtZW50UmVuZGVyZXItPnN0eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkpCisg
ICAgICAgIHx8IChib2R5UmVuZGVyZXIgJiYgYm9keVJlbmRlcmVyLT5zdHlsZSgpLmhhc0JhY2tn
cm91bmRJbWFnZSgpKTsKKworICAgIHJldHVybiBkb2N1bWVudEhhc0JhY2tncm91bmRJbWFnZTsK
K30KKyAKK3ZvaWQgRnJhbWVWaWV3OjpzZXRIYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0KGJvb2wg
c2hvdWxkSGF2ZUV4dGVuZGVkQmFja2dyb3VuZFJlY3QpCiB7CisgICAgaWYgKHNob3VsZEhhdmVF
eHRlbmRlZEJhY2tncm91bmRSZWN0ID09IGhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRl
clZpZXcoKTsKICAgICBpZiAoIXJlbmRlclZpZXcpCiAgICAgICAgIHJldHVybjsKQEAgLTI0NjYs
NyArMjUwMywxNiBAQCB2b2lkIEZyYW1lVmlldzo6c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvCiAg
ICAgaWYgKCFiYWNraW5nKQogICAgICAgICByZXR1cm47CiAKLSAgICBiYWNraW5nLT5zZXRUaWxl
ZEJhY2tpbmdIYXNNYXJnaW5zKGV4dGVuZEJhY2tncm91bmQpOworICAgIGJhY2tpbmctPnNldFRp
bGVkQmFja2luZ0hhc01hcmdpbnMoZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRF
eHRlbmRCZXlvbmRQYWdlKCkgJiYgc2hvdWxkSGF2ZUV4dGVuZGVkQmFja2dyb3VuZFJlY3QpOwor
fQorCitJbnRSZWN0IEZyYW1lVmlldzo6ZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpIGNvbnN0Cit7
CisgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tpbmcoKTsK
KyAgICBpZiAoIXRpbGVkQmFja2luZykKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAg
IHJldHVybiB0aWxlZEJhY2tpbmctPmJvdW5kcygpOwogfQogCiBib29sIEZyYW1lVmlldzo6c2hv
dWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCShyZXZpc2lvbiAxNjMwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTEgKzE5MSwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRCYXNlQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgdm9pZCB1cGRhdGVCYWNr
Z3JvdW5kUmVjdXJzaXZlbHkoY29uc3QgQ29sb3ImLCBib29sKTsKIAotICAgIC8vIGV4dGVuZGVk
QmFja2dyb3VuZFJlY3QoKSBpcyBpbiB0aGUgdmlld3BvcnQncyBjb29yZGluYXRlIHNwYWNlLiAK
LSAgICBib29sIGhhc0V4dGVuZGVkQmFja2dyb3VuZCgpIGNvbnN0OwotICAgIEludFJlY3QgZXh0
ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpIGNvbnN0OwotICAgIAorICAgIC8vIHNldEJhY2tncm91bmRF
eHRlbmRzQmV5b25kUGFnZSgpIGlzIGNvbnRyb2xsZWQgYnkgU2V0dGluZ3M6OnNldEJhY2tncm91
bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkuIFNvbWUKKyAgICAvLyBleHRlbmRlZCBiYWNrZ3Jv
dW5kcyByZXF1aXJlIGFuIGV4dGVuZGVkIGJhY2tncm91bmQgUkVDVCwgKGF0IHRoaXMgdGltZSwg
dGhhdCBjb3JyZXNwb25kcyB0byBkb2N1bWVudHMKKyAgICAvLyB3aXRoIGJhY2tncm91bmQgaW1h
Z2VzKSBhbmQgbmVlZHNFeHRlbmRlZEJhY2tncm91bmRSZWN0KCkgZGV0ZXJtaW5lcyBpZiB0aGlz
IEZyYW1lVmlldyBpcyBvbmUgb2YgdGhvc2UKKyAgICAvLyBzcGVjaWFsIEZyYW1lVmlld3MgdGhh
dCBkb2VzIHJlcXVpcmUgYW4gZXh0ZW5kZWQgcmVjdC4gU2luY2UgbmVlZGluZyBhbiBleHRlbmRl
ZCBiYWNrZ3JvdW5kIFJFQ1QgaXMgc29tZXRoaW5nCisgICAgLy8gdGhhdCBjYW4gY2hhbmdlIGlu
IHRoZSBjb3Vyc2Ugb2YgYSBGcmFtZVZpZXcncyBsaWZlLCB0aGUgZXh0ZW5kZWQgcmVjdCBpcyBz
ZXQgYW5kIHVuc2V0IHVzaW5nCisgICAgLy8gc2V0SGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgp
LiBUaGUgZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpIGlzIGluIHRoZSB2aWV3cG9ydCdzIGNvb3Jk
aW5hdGUgc3BhY2UuCiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoYm9v
bCk7CisgICAgYm9vbCBuZWVkc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QoKSBjb25zdDsKKyAgICB2
b2lkIHNldEhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QoYm9vbCBzaG91bGRIYXZlRXh0ZW5kZWRC
YWNrZ3JvdW5kUmVjdCk7CisgICAgYm9vbCBoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0KCkgY29u
c3Q7CisgICAgSW50UmVjdCBleHRlbmRlZEJhY2tncm91bmRSZWN0KCkgY29uc3Q7CiAKICAgICBi
b29sIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTaG91
bGRVcGRhdGVXaGlsZU9mZnNjcmVlbihib29sKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZy5oCShyZXZpc2lvbiAxNjMwOTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBj
b25zdCBpbnQgZGVmYXVsdFRpbGVXaWR0aCA9IDUxMjsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVs
dFRpbGVIZWlnaHQgPSA1MTI7CisKIGNsYXNzIEludFJlY3Q7CiAjaWYgUExBVEZPUk0oTUFDKQog
Y2xhc3MgUGxhdGZvcm1DQUxheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQkocmV2aXNpb24g
MTYzMDkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVD
b250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0Nyw2IEBAIGVudW0gVGlsZVZh
bGlkYXRpb25Qb2xpY3lGbGFnIHsKICAgICBVbnBhcmVudEFsbFRpbGVzID0gMSA8PCAxCiB9Owog
Ci1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlV2lkdGggPSA1MTI7Ci1zdGF0aWMgY29uc3Qg
aW50IGRlZmF1bHRUaWxlSGVpZ2h0ID0gNTEyOwotCiBQYXNzT3duUHRyPFRpbGVDb250cm9sbGVy
PiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllciogcm9vdFBsYXRmb3JtTGF5
ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlQ29udHJvbGxlcihyb290UGxhdGZv
cm1MYXllcikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJl
dmlzaW9uIDE2MzA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjA4LDcgKzE2MDgsNyBAQCBib29sIFJlbmRlckJveDo6cmVw
YWludExheWVyUmVjdHNGb3JJbWFnCiAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSByb290
IGJhY2tncm91bmQgbGF5ZXIsIHdlIG1heSBuZWVkIHRvIGV4dGVuZCB0aGUgcmVwYWludFJlY3Qg
aWYgdGhlIEZyYW1lVmlldyBoYXMgYW4KICAgICAgICAgICAgIC8vIGV4dGVuZGVkQmFja2dyb3Vu
ZC4gV2Ugc2hvdWxkIG9ubHkgZXh0ZW5kIHRoZSByZWN0IGlmIGl0IGlzIGFscmVhZHkgZXh0ZW5k
aW5nIHRoZSBmdWxsIHdpZHRoIG9yIGhlaWdodAogICAgICAgICAgICAgLy8gb2YgdGhlIHJlbmRl
cmVyUmVjdC4KLSAgICAgICAgICAgIGlmIChkcmF3aW5nUm9vdEJhY2tncm91bmQgJiYgdmlldygp
LmZyYW1lVmlldygpLmhhc0V4dGVuZGVkQmFja2dyb3VuZCgpKSB7CisgICAgICAgICAgICBpZiAo
ZHJhd2luZ1Jvb3RCYWNrZ3JvdW5kICYmIHZpZXcoKS5mcmFtZVZpZXcoKS5oYXNFeHRlbmRlZEJh
Y2tncm91bmRSZWN0KCkpIHsKICAgICAgICAgICAgICAgICBzaG91bGRDbGlwVG9MYXllciA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIEludFJlY3QgZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCA9IHZp
ZXcoKS5mcmFtZVZpZXcoKS5leHRlbmRlZEJhY2tncm91bmRSZWN0KCk7CiAgICAgICAgICAgICAg
ICAgaWYgKHJlY3RUb1JlcGFpbnQud2lkdGgoKSA9PSByZW5kZXJlclJlY3Qud2lkdGgoKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxNjMwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk0LDcgKzEwOTQsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrCiAgICAgICAgIC8vIHRo
ZSBiYWNrZ3JvdW5kIHBvc2l0aW9uaW5nIGFyZWEuCiAgICAgICAgIGlmIChpc1Jvb3QoKSkgewog
ICAgICAgICAgICAgcG9zaXRpb25pbmdBcmVhU2l6ZSA9IHBpeGVsU25hcHBlZEludFNpemUodG9S
ZW5kZXJCb3godGhpcyktPnNpemUoKSAtIExheW91dFNpemUobGVmdCArIHJpZ2h0LCB0b3AgKyBi
b3R0b20pLCB0b1JlbmRlckJveCh0aGlzKS0+bG9jYXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAo
dmlldygpLmZyYW1lVmlldygpLmhhc0V4dGVuZGVkQmFja2dyb3VuZCgpKSB7CisgICAgICAgICAg
ICBpZiAodmlldygpLmZyYW1lVmlldygpLmhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QoKSkgewog
ICAgICAgICAgICAgICAgIEludFJlY3QgZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCA9IHZpZXcoKS5m
cmFtZVZpZXcoKS5leHRlbmRlZEJhY2tncm91bmRSZWN0KCk7CiAgICAgICAgICAgICAgICAgbGVm
dCArPSAobWFyZ2luTGVmdCgpIC0gZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdC54KCkpOwogICAgICAg
ICAgICAgICAgIHRvcCArPSAobWFyZ2luVG9wKCkgLSBleHRlbmRlZEJhY2tncm91bmRSZWN0Lnko
KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAkocmV2aXNpb24gMTYzMDkwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNiBAQCBS
ZW5kZXJMYXllckJhY2tpbmc6OlJlbmRlckxheWVyQmFja2luZyhSCiAgICAgICAgIGlmIChtX2lz
TWFpbkZyYW1lUmVuZGVyVmlld0xheWVyKSB7CiAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNl
dEV4cG9zZWRSZWN0KHJlbmRlcmVyKCkuZnJhbWUoKS52aWV3KCktPmV4cG9zZWRSZWN0KCkpOwog
ICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRVbnBhcmVudHNPZmZzY3JlZW5UaWxlcyh0cnVl
KTsKLSAgICAgICAgICAgIHNldFRpbGVkQmFja2luZ0hhc01hcmdpbnMocGFnZS0+c2V0dGluZ3Mo
KS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHRpbGVkQmFja2luZy0+c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChw
YWdlLT5zZXR0aW5ncygpLnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSk7CkBA
IC0xOTIsMTEgKzE5MSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzaG91bGRVc2VUaWxl
ZEIKICAgICByZXR1cm4gbV91c2luZ1RpbGVkQ2FjaGVMYXllciAmJiBtX2NyZWF0aW5nUHJpbWFy
eUdyYXBoaWNzTGF5ZXI7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp0aWxlZEJhY2tp
bmdIYXNNYXJnaW4oKSBjb25zdAotewotICAgIHJldHVybiBtX3VzaW5nVGlsZWRDYWNoZUxheWVy
ICYmIHRpbGVkQmFja2luZygpLT5oYXNNYXJnaW5zKCk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp0aWxlZEJhY2tpbmdVc2FnZUNoYW5nZWQoY29uc3QgR3JhcGhpY3NMYXllciogbGF5
ZXIsIGJvb2wgdXNpbmdUaWxlZEJhY2tpbmcpCiB7CiAgICAgY29tcG9zaXRvcigpLmxheWVyVGls
ZWRCYWNraW5nVXNhZ2VDaGFuZ2VkKGxheWVyLCB1c2luZ1RpbGVkQmFja2luZyk7CkBAIC0yNDAs
MTMgKzIzNCwxNCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6YWRqdXN0VGlsZWRCYWNrCiAg
ICAgdGlsZWRCYWNraW5nKCktPnNldFRpbGVDb3ZlcmFnZSh0aWxlQ292ZXJhZ2UpOwogfQogCi12
b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0VGlsZWRCYWNraW5nSGFzTWFyZ2lucyhib29sIGV4
dGVuZEJhY2tncm91bmQpCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0VGlsZWRCYWNraW5n
SGFzTWFyZ2lucyhib29sIGhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QpCiB7CiAgICAgaWYgKCFt
X3VzaW5nVGlsZWRDYWNoZUxheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgbWFyZ2lu
U2l6ZSA9IGV4dGVuZEJhY2tncm91bmQgPyA1MTIgOiAwOwotICAgIHRpbGVkQmFja2luZygpLT5z
ZXRUaWxlTWFyZ2lucyhtYXJnaW5TaXplLCBtYXJnaW5TaXplLCBtYXJnaW5TaXplLCBtYXJnaW5T
aXplKTsKKyAgICBpbnQgbWFyZ2luTGVmdEFuZFJpZ2h0U2l6ZSA9IGhhc0V4dGVuZGVkQmFja2dy
b3VuZFJlY3QgPyBkZWZhdWx0VGlsZVdpZHRoIDogMDsKKyAgICBpbnQgbWFyZ2luVG9wQW5kQm90
dG9tU2l6ZSA9IGhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QgPyBkZWZhdWx0VGlsZUhlaWdodCA6
IDA7CisgICAgdGlsZWRCYWNraW5nKCktPnNldFRpbGVNYXJnaW5zKG1hcmdpblRvcEFuZEJvdHRv
bVNpemUsIG1hcmdpblRvcEFuZEJvdHRvbVNpemUsIG1hcmdpbkxlZnRBbmRSaWdodFNpemUsIG1h
cmdpbkxlZnRBbmRSaWdodFNpemUpOwogfQogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlRGVidWdJbmRpY2F0b3JzKGJvb2wgc2hvd0JvcmRlciwgYm9vbCBzaG93UmVwYWludENvdW50
ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5oCShyZXZpc2lvbiAxNjMwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNiBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNVbnBvc2l0aW9uZWRPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkgY29uc3Q7
CiAKICAgICBib29sIHVzaW5nVGlsZWRCYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbV91c2luZ1Rp
bGVkQ2FjaGVMYXllcjsgfQotICAgIGJvb2wgdGlsZWRCYWNraW5nSGFzTWFyZ2luKCkgY29uc3Q7
CiAgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKSBjb25zdDsKICAgICB2b2lkIGFkanVz
dFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7CiAgICAgdm9pZCBzZXRUaWxlZEJhY2tpbmdIYXNNYXJn
aW5zKGJvb2wpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDE2MzA5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
ODgsNyArNzg4LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbgog
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVMYXllckZvckZvb3RlcihwYWdlLT5mb290ZXJIZWln
aHQoKSk7CiAgICAgICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICAgICAgaWYgKG1h
aW5GcmFtZUJhY2tpbmdJc1RpbGVkV2l0aE1hcmdpbigpKQorICAgICAgICAgICAgICAgIGlmICht
X3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fcm9vdENvbnRlbnRM
YXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CiAgICAgICAgICAgICB9CiAKQEAgLTI3NTEs
MTkgKzI3NTEsNiBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bWFpbkZyYW1lQmFjCiAg
ICAgcmV0dXJuIGJhY2tpbmctPnVzaW5nVGlsZWRCYWNraW5nKCk7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjptYWluRnJhbWVCYWNraW5nSXNUaWxlZFdpdGhNYXJnaW4oKSBjb25z
dAotewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fcmVuZGVyVmlldy5sYXllcigpOwotICAg
IGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlbmRlckxheWVyQmFj
a2luZyogYmFja2luZyA9IGxheWVyLT5iYWNraW5nKCk7Ci0gICAgaWYgKCFiYWNraW5nKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gYmFja2luZy0+dGlsZWRCYWNraW5nSGFz
TWFyZ2luKCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzaG91bGRDb21wb3Np
dGVPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9
IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKQEAgLTI4MjIsNiArMjgwOSwxMCBAQCBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb250CiAgICAgaWYgKHZpZXdIYXNUcmFuc3Bh
cmVudEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgLy8gSWYgdGhl
IGJhY2tncm91bmQgaXMgZ29pbmcgdG8gZXh0ZW5kLCB0aGVuIGl0IGRvZXNuJ3QgbWFrZSBzZW5z
ZSB0byBoYXZlIGEgc2hhZG93IGxheWVyLgorICAgIGlmIChtX3JlbmRlclZpZXcuZnJhbWVWaWV3
KCkuZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIC8vIE9uIE1hYywgd2Ugd2FudCBhIGNvbnRl
bnQgc2hhZG93IGxheWVyIGlmIHdlJ3JlIHVzaW5nIHRpbGVkIGRyYXdpbmcgYW5kIGNhbiBzY3Jv
bGwuCiAgICAgaWYgKG1haW5GcmFtZUJhY2tpbmdJc1RpbGVkKCkgJiYgIW1fcmVuZGVyVmlldy5m
cmFtZVZpZXcoKS5wcm9oaWJpdHNTY3JvbGxpbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0yOTc4LDYgKzI5NjksMTkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnZpZXdIYXNU
cmFucwogICAgIHJldHVybiBkb2N1bWVudEJhY2tncm91bmRDb2xvci5oYXNBbHBoYSgpOwogfQog
Cit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Um9vdEV4dGVuZGVkQmFja2dyb3VuZENv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisg
ICAgaWYgKCFtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9sYXllckZvck92ZXJoYW5nQXJlYXMtPnNldEJhY2tncm91bmRDb2xvcihjb2xvcik7CisKKyAg
ICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMt
PnNldEN1c3RvbUFwcGVhcmFuY2UoR3JhcGhpY3NMYXllcjo6U2Nyb2xsaW5nT3ZlcmhhbmcpOwor
I2VuZGlmCit9CisKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVPdmVyZmxvd0Nv
bnRyb2xzTGF5ZXJzKCkKIHsKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCkBAIC0yOTg5LDcg
KzI5OTMsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbAogI2Vu
ZGlmCiAgICAgICAgICAgICBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+c2V0RHJhd3NDb250ZW50
KGZhbHNlKTsKICAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzLT5zZXRTaXplKG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZVJlY3QoKS5zaXplKCkpOwotICAgICAgICAgICAg
bV9sYXllckZvck92ZXJoYW5nQXJlYXMtPnNldEN1c3RvbUFwcGVhcmFuY2UoR3JhcGhpY3NMYXll
cjo6U2Nyb2xsaW5nT3ZlcmhhbmcpOworCisgICAgICAgICAgICBpZiAobV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLmZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25k
UGFnZSgpKQorICAgICAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzLT5zZXRCYWNr
Z3JvdW5kQ29sb3IobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmRvY3VtZW50QmFja2dyb3VuZENv
bG9yKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVy
aGFuZ0FyZWFzLT5zZXRDdXN0b21BcHBlYXJhbmNlKEdyYXBoaWNzTGF5ZXI6OlNjcm9sbGluZ092
ZXJoYW5nKTsKIAogICAgICAgICAgICAgLy8gV2Ugd2FudCB0aGUgb3ZlcmhhbmcgYXJlYXMgbGF5
ZXIgdG8gYmUgcG9zaXRpb25lZCBiZWxvdyB0aGUgZnJhbWUgY29udGVudHMsCiAgICAgICAgICAg
ICAvLyBzbyBpbnNlcnQgaXQgYmVsb3cgdGhlIGNsaXAgbGF5ZXIuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCShyZXZpc2lvbiAx
NjMwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBkaWRQYWludEJhY2tpbmcoUmVuZGVyTGF5ZXJCYWNraW5nKik7CiAKLSAgICBib29sIG1h
aW5GcmFtZUJhY2tpbmdJc1RpbGVkV2l0aE1hcmdpbigpIGNvbnN0OworICAgIHZvaWQgc2V0Um9v
dEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAKIHByaXZhdGU6CiAgICAg
Y2xhc3MgT3ZlcmxhcE1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAJKHJldmlzaW9uIDE2MzA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlJl
bmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8uaCIK
ICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1
ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybVN0YXRlLmgiCiAj
aW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KQEAgLTU1NCwxNCArNTU1LDE0IEBAIHZvaWQgUmVu
ZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWkKICAgICAgICAgcm9vdE9ic2N1cmVzQmFj
a2dyb3VuZCA9IHJlbmRlcmVyT2JzY3VyZXNCYWNrZ3JvdW5kKHJvb3RSZW5kZXJlcik7CiAgICAg
fQogCi0gICAgYm9vbCBoYXNUaWxlZE1hcmdpbiA9IGZhbHNlOwotICAgIGhhc1RpbGVkTWFyZ2lu
ID0gY29tcG9zaXRvcigpLm1haW5GcmFtZUJhY2tpbmdJc1RpbGVkV2l0aE1hcmdpbigpOworICAg
IGNvbXBvc2l0b3IoKS5zZXRSb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoZnJhbWVWaWV3KCku
ZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkKKyAg
ICAgICAgPyBmcmFtZVZpZXcoKS5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpIDogQ29sb3IoKSk7
CiAKICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCk7CiAgICAgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yID0gcGFnZSA/IHBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpIDogMTsKIAogICAgIC8v
IElmIHBhaW50aW5nIHdpbGwgZW50aXJlbHkgZmlsbCB0aGUgdmlldywgbm8gbmVlZCB0byBmaWxs
IHRoZSBiYWNrZ3JvdW5kLgotICAgIGlmICghaGFzVGlsZWRNYXJnaW4gJiYgcm9vdEZpbGxzVmll
d3BvcnQgJiYgcm9vdE9ic2N1cmVzQmFja2dyb3VuZCAmJiBwYWdlU2NhbGVGYWN0b3IgPj0gMSkK
KyAgICBpZiAocm9vdEZpbGxzVmlld3BvcnQgJiYgcm9vdE9ic2N1cmVzQmFja2dyb3VuZCAmJiBw
YWdlU2NhbGVGYWN0b3IgPj0gMSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhpcyBjb2Rl
IHR5cGljYWxseSBvbmx5IGV4ZWN1dGVzIGlmIHRoZSByb290IGVsZW1lbnQncyB2aXNpYmlsaXR5
IGhhcyBiZWVuIHNldCB0byBoaWRkZW4sCkBAIC01NzEsNyArNTcyLDcgQEAgdm9pZCBSZW5kZXJW
aWV3OjpwYWludEJveERlY29yYXRpb25zKFBhaQogICAgIGlmIChmcmFtZVZpZXcoKS5pc1RyYW5z
cGFyZW50KCkpIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGR5bmFtaWMuIFdlIHNob3VsZCBi
ZSBhYmxlIHRvIGdvIGJhY2sgdG8gYmxpdHRpbmcgaWYgd2UgZXZlciBzdG9wIGJlaW5nIHRyYW5z
cGFyZW50LgogICAgICAgICBmcmFtZVZpZXcoKS5zZXRDYW5ub3RCbGl0VG9XaW5kb3coKTsgLy8g
VGhlIHBhcmVudCBtdXN0IHNob3cgYmVoaW5kIHRoZSBjaGlsZC4KICAgICBlbHNlIHsKLSAgICAg
ICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gaGFzVGlsZWRNYXJnaW4gPyBmcmFtZVZpZXcoKS5k
b2N1bWVudEJhY2tncm91bmRDb2xvcigpIDogZnJhbWVWaWV3KCkuYmFzZUJhY2tncm91bmRDb2xv
cigpOworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBmcmFtZVZpZXcoKS5iYXNlQmFj
a2dyb3VuZENvbG9yKCk7CiAgICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSkgewog
ICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHBhaW50SW5m
by5jb250ZXh0LT5jb21wb3NpdGVPcGVyYXRpb24oKTsKICAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CkBAIC0xMDM0LDgg
KzEwMzUsMTIgQEAgYm9vbCBSZW5kZXJWaWV3Ojpyb290QmFja2dyb3VuZElzRW50aXJlbAogCiBM
YXlvdXRSZWN0IFJlbmRlclZpZXc6OmJhY2tncm91bmRSZWN0KFJlbmRlckJveCogYmFja2dyb3Vu
ZFJlbmRlcmVyKSBjb25zdAogewotICAgIGlmICghaGFzQ29sdW1ucygpKQotICAgICAgICByZXR1
cm4gZnJhbWVWaWV3KCkuaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kKCkgPyBmcmFtZVZpZXcoKS5leHRl
bmRlZEJhY2tncm91bmRSZWN0KCkgOiB1bnNjYWxlZERvY3VtZW50UmVjdCgpOworICAgIGlmICgh
aGFzQ29sdW1ucygpKSB7CisgICAgICAgIGJvb2wgbmVlZHNFeHRlbmRlZEJhY2tncm91bmQgPSBm
cmFtZVZpZXcoKS5uZWVkc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QoKTsKKyAgICAgICAgaWYgKGZy
YW1lVmlldygpLmhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QoKSAhPSBuZWVkc0V4dGVuZGVkQmFj
a2dyb3VuZCkKKyAgICAgICAgICAgIGZyYW1lVmlldygpLnNldEhhc0V4dGVuZGVkQmFja2dyb3Vu
ZFJlY3QobmVlZHNFeHRlbmRlZEJhY2tncm91bmQpOworICAgICAgICByZXR1cm4gbmVlZHNFeHRl
bmRlZEJhY2tncm91bmQgPyBmcmFtZVZpZXcoKS5leHRlbmRlZEJhY2tncm91bmRSZWN0KCkgOiB1
bnNjYWxlZERvY3VtZW50UmVjdCgpOworICAgIH0KIAogICAgIENvbHVtbkluZm8qIGNvbHVtbklu
Zm8gPSB0aGlzLT5jb2x1bW5JbmZvKCk7CiAgICAgTGF5b3V0UmVjdCBiYWNrZ3JvdW5kUmVjdCgw
LCAwLCBjb2x1bW5JbmZvLT5kZXNpcmVkQ29sdW1uV2lkdGgoKSwgY29sdW1uSW5mby0+Y29sdW1u
SGVpZ2h0KCkgKiBjb2x1bW5JbmZvLT5jb2x1bW5Db3VudCgpKTsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE2MzA5MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE3IEBACisyMDE0LTAxLTMwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KKwor
ICAgICAgICBFeHRlbmRlZCBiYWNrZ3JvdW5kIHNob3VsZCBvbmx5IGNyZWF0ZSBtYXJnaW4gdGls
ZXMgZm9yIHBhZ2VzIHdpdGggYmFja2dyb3VuZCAKKyAgICAgICAgaW1hZ2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4NzYKKyAgICAgICAgLWFu
ZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTU4Mjc2MzI+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgY2FuIG9ubHkg
dGVzdCBtYXJnaW4gdGlsZXMgaWYgd2UgYWxzbyBnaXZlIHRoZSBkb2N1bWVudCBhIGJhY2tncm91
bmQgaW1hZ2UuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL3Jlc291
cmNlcy9ncmVlbmJveC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy13azIvdGls
ZWQtZHJhd2luZy9zaW1wbGUtZG9jdW1lbnQtd2l0aC1tYXJnaW4tdGlsZXMuaHRtbDoKKwogMjAx
NC0wMS0zMCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzM3MQpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL3NpbXBsZS1kb2N1bWVudC13aXRoLW1h
cmdpbi10aWxlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azIvdGlsZWQtZHJhd2luZy9zaW1wbGUtZG9jdW1lbnQtd2l0aC1tYXJnaW4tdGlsZXMuaHRtbAko
cmV2aXNpb24gMTYzMDkwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1k
cmF3aW5nL3NpbXBsZS1kb2N1bWVudC13aXRoLW1hcmdpbi10aWxlcy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC02LDE4ICs2LDIwIEBACiAgICAgICAgIGJvZHkgewogICAgICAgICAgICAgd2lkdGg6
IDEyMDBweDsKICAgICAgICAgICAgIGhlaWdodDogMjAwMHB4OworICAgICAgICAgICAgLyogVGhl
IHNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlIHNldHRpbmcgd2lsbCBvbmx5IGNy
ZWF0ZSBtYXJnaW4gdGlsZXMgZm9yIGRvY3VtZW50cworICAgICAgICAgICAgICAgdGhhdCBoYXZl
IGJhY2tncm91bmQgaW1hZ2VzLiAqLworICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTp1cmwo
cmVzb3VyY2VzL2dyZWVuYm94LnBuZyk7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDpy
ZXBlYXQ7CiAgICAgICAgIH0KICAgICA8L3N0eWxlPgogICAgIDxzY3JpcHQ+CiAgICAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKICAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OwotICAgICAgICAKLSAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCi0gICAgICAgICAgICB3
aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQ
YWdlKHRydWUpOwogCiAgICAgICAgIGZ1bmN0aW9uIGRvVGVzdCgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAgICAgICAgICAgd2luZG93Lmlu
dGVybmFscy5zZXR0aW5ncy5zZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSh0cnVl
KTsKICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGF5ZXJzJykuaW5u
ZXJUZXh0ID0gaW50ZXJuYWxzLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudCwKICAgICAgICAgICAg
ICAgICAgICAgaW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVklTSUJMRV9SRUNUUyB8IGlu
dGVybmFscy5MQVlFUl9UUkVFX0lOQ0xVREVTX1RJTEVfQ0FDSEVTKTsKICAgICAgICAgICAgIH0K
QEAgLTI1LDYgKzI3LDcgQEAKICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQn
LCBkb1Rlc3QsIGZhbHNlKTsKICAgICA8L3NjcmlwdD4KIDwvaGVhZD4KKwogPGJvZHk+CiA8cHJl
IGlkPSJsYXllcnMiPkxheWVyIHRyZWUgZ29lcyBoZXJlPC9wPgogPC9ib2R5PgpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL3Jlc291cmNlcy9ncmVlbmJv
eC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkg
dHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1kcmF3aW5nL3Jlc291cmNlcy9ncmVlbmJv
eC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi90aWxlZC1k
cmF3aW5nL3Jlc291cmNlcy9ncmVlbmJveC5wbmcJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvcmVzb3VyY2VzL2dyZWVuYm94LnBuZwko
d29ya2luZyBjb3B5KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjLXdrMi90aWxlZC1kcmF3aW5nL3Jlc291cmNlcy9ncmVlbmJveC5wbmcKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMCwwICsxICMjCithcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQoKaVZCT1J3MEtHZ29BQUFBTlNVaEVV
Z0FBQUJrQUFBQVpDQUlBQUFCTGl4STBBQUFBSmtsRVFWUjRuR0pnK005QU5UUnExcWhabzJhTgpt
alZxMXFoWm8yWmhJQUFBQUFELy93TUExWEJ1cm8wenNva0FBQUFBU1VWT1JLNUNZSUk9Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222755</attachid>
            <date>2014-01-30 16:23:50 -0800</date>
            <delta_ts>2014-01-30 17:28:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>26503</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzExNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDE0LTAxLTMwICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBiYWNrZ3JvdW5kIHNo
b3VsZCBvbmx5IGNyZWF0ZSBtYXJnaW4gdGlsZXMgZm9yIHBhZ2VzIHdpdGggYmFja2dyb3VuZCAK
KyAgICAgICAgaW1hZ2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjc4NzYKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTU4Mjc2MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU2V0dGluZ3M6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
KCkgZG9lc24ndCBuZWVkIHRvIGNyZWF0ZSBtYXJnaW4gdGlsZXMKKyAgICAgICAgZm9yIHBhZ2Vz
IHdpdGggc2ltcGxlIGJhY2tncm91bmQgY29sb3JzLiBJbnN0ZWFkLCB0aG9zZSBwYWdlcyBzaG91
bGQgYWNoaWV2ZSB0aGUgCisgICAgICAgIHNhbWUgZWZmZWN0IGJ5IHNldHRpbmcgYSBiYWNrZ3Jv
dW5kIGNvbG9yIG9uIFJlbmRlckxheWVyQ29tcG9zaXRvcidzCisgICAgICAgIG1fbGF5ZXJGb3JP
dmVyaGFuZ0FyZWFzLiBGb3Igbm93LCB3ZSBzaG91bGQgb25seSBjcmVhdGUgdGlsZXMgd2hlbiB0
aGVyZSBpcyBhIAorICAgICAgICBiYWNrZ3JvdW5kIGltYWdlLiBXZSBtYXkgd2FudCB0byBleHRl
bmQgdGhpcyB0byBvdGhlciB0eXBlcyBvZiBjb21wbGljYXRlZCAKKyAgICAgICAgYmFja2dyb3Vu
ZHMgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGNhbGxlcnMgdGhh
dCB3b25kZXIgb25seSBpZiB0aGUgbmV3IHNldHRpbmcgaXMgc2V0IGFsd2F5cyBjYWxsIAorICAg
ICAgICBTZXR0aW5nczo6YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSByYXRoZXIg
dGhhbiBhc2tpbmcgYWJvdXQgbWFyZ2luIAorICAgICAgICB0aWxlcy4gQW5kIGNhbGxlcnMgdGhh
dCB3YW50IHRvIGtub3cgYWJvdXQgbWFyZ2luIHRpbGVzIGNhbiBlaXRoZXIga2VlcCBxdWVyeWlu
ZyAKKyAgICAgICAgdGhhdCBkaXJlY3RseSBvciB0aGV5IGNhbiBjYWxsIEZyYW1lVmlldzo6aGFz
RXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkuIAorICAgICAgICBBbiBleHRlbmRl
ZCBiYWNrZ3JvdW5kIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlcXVpcmUgYW4gZXh0ZW5kZWQgYmFj
a2dyb3VuZCByZWN0IAorICAgICAgICBmb3IgcGFpbnRpbmcsIGFuZCB0aGlzIG5ldyBGcmFtZVZp
ZXcgZnVuY3Rpb24gY2FuIG1ha2UgdGhhdCBkaXN0aW5jdGlvbi4gCisKKyAgICAgICAgV2hlbiBz
ZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoKSBpcyBjYWxsZWQsIGNhbGwgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjogCisgICAgICAgIHNldFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcigp
IHdpdGggZWl0aGVyIHRoZSBkb2N1bWVudCBiYWNrZ3JvdW5kIGNvbG9yLCBvciBhbiAKKyAgICAg
ICAgaW52YWxpZCBjb2xvciwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IGhhdmUgb3IgZG8gbm90
IGhhdmUgYW4gZXh0ZW5kZWQgCisgICAgICAgIGJhY2tncm91bmQuIEFsc28gY2FsbCBuZWVkc0V4
dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIHRvIGRldGVybWluZSBpZiB3ZSAKKyAg
ICAgICAgYWxzbyBuZWVkIHRvIGV4dGVuZCB0aGUgYmFja2dyb3VuZCByZWN0LCBhbmQgdGhlbiBj
YWxsIAorICAgICAgICBzZXRIYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoKSB3
aXRoIGl0cyB2YWx1ZS4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6OnNldEJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6Omhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWlu
dGluZyk6CisKKyAgICAgICAgIFJpZ2h0IG5vdyB3ZSBvbmx5IG5lZWQgdG8gZXh0ZW5kIHRoZSBi
YWNrZ3JvdW5kIHJlY3QgZm9yIGRvY3VtZW50cyB3aXRoIAorICAgICAgICBiYWNrZ3JvdW5kIGlt
YWdlcyBvbiB0aGUgcm9vdC4gVGhpcyBtYXkgYmUgZXh0ZW5kZWQgaW4gdGhlIGZ1dHVyZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6bmVlZHNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9y
UGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRIYXNFeHRlbmRlZEJh
Y2tncm91bmRSZWN0Rm9yUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpl
eHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcpOgorICAgICAgICAqIHBhZ2UvRnJhbWVW
aWV3Lmg6CisKKyAgICAgICAgRXhwb3NlIGRlZmF1bHRUaWxlV2lkdGggYW5kIGRlZmF1bHRUaWxl
SGVpZ2h0IGZyb20gVGlsZWRCYWNraW5nLmggc28gdGhhdCB3ZSBjYW4gCisgICAgICAgIGFjY2Vz
cyB0aGUgdmFsdWVzIGZyb20gUmVuZGVyTGF5ZXJCYWNraW5nLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1RpbGVkQmFja2luZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9UaWxlQ29udHJvbGxlci5tbToKKworICAgICAgICBoYXNFeHRlbmRlZEJhY2tncm91bmRG
b3JQYWludGluZygpIGlzIG5vdyBjYWxsZWQgCisgICAgICAgIGhhc0V4dGVuZGVkQmFja2dyb3Vu
ZFJlY3RGb3JQYWludGluZygpIHRvIGRpc3Rpbmd1aXNoIAorICAgICAgICB0aGUgY2FzZSB3aGVy
ZSBhbiBleHRlbmRlZCBSRUNUIGlzIG5lZWRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVwYWludExheWVyUmVjdHNG
b3JJbWFnZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrZ3Jv
dW5kSW1hZ2VHZW9tZXRyeSk6CisKKyAgICAgICAgRG9uJ3QgY2FsbCBzZXRUaWxlZEJhY2tpbmdI
YXNNYXJnaW5zKCkgcmlnaHQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2Ugd2Ugb25seQorICAg
ICAgICB3YW50IG1hcmdpbnMgaWYgd2UgaGF2ZSBhIGJhY2tncm91bmQgaW1hZ2UsIGFuZCB3ZSB3
b24ndCBoYXZlIHRoYXQgaW5mb3JtYXRpb24KKyAgICAgICAgeWV0LgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmcpOgorCisgICAgICAgIENsZWFuIHVwIHRoZSB2
YXJpYWJsZSBuYW1lIGhlcmUuIFdlIGFyZSBvbmx5IHNldHRpbmcgbWFyZ2lucyB3aGVuIHdlIG5l
ZWQgdG8gCisgICAgICAgIGV4dGVuZCB0aGUgYmFja2dyb3VuZCByZWN0IGZvciBwYWludGluZy4g
QWxzbyBtYWtlIHVzIG9mIG5ld2x5LWV4cG9zZWQgCisgICAgICAgIGRlZmF1bHRUaWxlV2lkdGgg
YW5kIEhlaWdodC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0VGls
ZWRCYWNraW5nSGFzTWFyZ2lucyk6CisKKyAgICAgICAgUmVtb3ZlIFJlbmRlckxheWVyQmFja2lu
Zzo6dGlsZWRCYWNraW5nSGFzTWFyZ2luKCkgc2luY2UgdGhlcmUgYXJlbid0IGFueSBtb3JlCisg
ICAgICAgIGNhbGxlcnMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1c2luZ1RpbGVkQmFja2lu
Zyk6CisKKyAgICAgICAgc2V0TWFza3NUb0JvdW5kcyhmYWxzZSkgYmFzZWQgb24gdGhlIFNldHRp
bmcsIGFuZCBub3QgYmFzZWQgb24gd2hldGhlciB0aGVyZSBhcmUgCisgICAgICAgIHRpbGUgbWFy
Z2lucy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZyk6CisK
KyAgICAgICAgUmV0dXJuIGZhbHNlIGZyb20gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJl
c0NvbnRlbnRTaGFkb3dMYXllcigpIGlmIHRoZXJlIGlzIAorICAgICAgICBhbiBleHRlbmRlZCBi
YWNrZ3JvdW5kLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbnRlbnRTaGFkb3dMYXllcik6CisKKyAgICAgICAgU2V0dGluZyB0aGUgYmFja2dyb3Vu
ZCBjb2xvciBvbiBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcyBpcyBhbGwgd2UgbmVlZCB0byBkbyB0
byAKKyAgICAgICAgY3JlYXRlIHRoZSBleHRlbmRlZCBiYWNrZ3JvdW5kIGVmZmVjdCBvbiBwYWdl
cyB0aGF0IG9ubHkgaGF2ZSBiYWNrZ3JvdW5kIGNvbG9ycy4gCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnNldFJvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZU92ZXJmbG93Q29u
dHJvbHNMYXllcnMpOgorCisgICAgICAgIFJlbW92ZSBtYWluRnJhbWVCYWNraW5nSXNUaWxlZFdp
dGhNYXJnaW4oKSBzaW5jZSB0aGVyZSBhcmVuJ3QgYW55IG1vcmUgY2FsbGVycywKKyAgICAgICAg
YW5kIGFkZCBzZXRSb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKSBzbyB0aGF0IHdlIGNhbiB1
cGRhdGUgdGhlIGNvbG9yIGZyb20gCisgICAgICAgIFJlbmRlclZpZXcuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgorCisgICAgICAgIFJldmVydCB0aGUgY29k
ZSB0aGF0IHdhcyBhZGRlZCB0byBwYWludCBiYWNrZ3JvdW5kIGNvbG9yIGhlcmUsIHNpbmNlIHRo
aXMgc2hvdWxkIAorICAgICAgICBhbGwgYmUgY292ZXJlZCBieSBjYWxsaW5nIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6c2V0RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKS4gCisgICAgICAgIE1vcmUg
Y29tcGxpY2F0ZWQgYmFja2dyb3VuZHMgd2lsbCBydW4gdGhyb3VnaCB0aGUgZnVsbCBiYWNrZ3Jv
dW5kIHBhaW50aW5nIGNvZGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpiYWNrZ3JvdW5kUmVjdCk6CisKIDIwMTQtMDEtMzAg
IE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IFtDTWFrZV0gQWRkIGEgIm1ha2UgZGlzdCIgdGFyZ2V0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCShyZXZpc2lvbiAxNjMwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MzUsNyArMjQzNSwyMiBAQCB2b2lkIEZyYW1l
Vmlldzo6dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2CiAgICAgfQogfQogCi1ib29sIEZyYW1lVmll
dzo6aGFzRXh0ZW5kZWRCYWNrZ3JvdW5kKCkgY29uc3QKK3ZvaWQgRnJhbWVWaWV3OjpzZXRCYWNr
Z3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoYm9vbCBleHRlbmRCYWNrZ3JvdW5kKQoreworICAgIFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCk7CisgICAgaWYgKCFyZW5k
ZXJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCku
c2V0Um9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKGV4dGVuZEJhY2tncm91bmQgPyBkb2N1bWVu
dEJhY2tncm91bmRDb2xvcigpIDogQ29sb3IoKSk7CisKKyAgICBSZW5kZXJMYXllckJhY2tpbmcq
IGJhY2tpbmcgPSByZW5kZXJWaWV3LT5sYXllcigpLT5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNr
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXRIYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0
Rm9yUGFpbnRpbmcobmVlZHNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoKSk7Cit9
CisKK2Jvb2wgRnJhbWVWaWV3OjpoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmco
KSBjb25zdAogewogICAgIGlmICghZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRF
eHRlbmRCZXlvbmRQYWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI0NDcsMTcgKzI0
NjIsMzkgQEAgYm9vbCBGcmFtZVZpZXc6Omhhc0V4dGVuZGVkQmFja2dyb3VuZCgpIAogICAgIHJl
dHVybiB0aWxlZEJhY2tpbmctPmhhc01hcmdpbnMoKTsKIH0KIAotSW50UmVjdCBGcmFtZVZpZXc6
OmV4dGVuZGVkQmFja2dyb3VuZFJlY3QoKSBjb25zdAorYm9vbCBGcmFtZVZpZXc6Om5lZWRzRXh0
ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3QKIHsKLSAgICBUaWxlZEJhY2tp
bmcqIHRpbGVkQmFja2luZyA9IHRoaXMtPnRpbGVkQmFja2luZygpOwotICAgIGlmICghdGlsZWRC
YWNraW5nKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIC8vIEp1c3QgYmVjYXVzZSBT
ZXR0aW5nczo6YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBpcyB0cnVlIGRvZXMg
bm90IG5lY2Vzc2FyaWx5IG1lYW4KKyAgICAvLyB0aGF0IHRoZSBiYWNrZ3JvdW5kIHJlY3QgbmVl
ZHMgdG8gYmUgZXh0ZW5kZWQgZm9yIHBhaW50aW5nLiBTaW1wbGUgYmFja2dyb3VuZHMgY2FuIGJl
IGV4dGVuZGVkCisgICAgLy8ganVzdCB3aXRoIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Um9v
dEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKCkuIE1vcmUgY29tcGxpY2F0ZWQgYmFja2dyb3VuZHMs
CisgICAgLy8gc3VjaCBhcyBpbWFnZXMsIHJlcXVpcmUgZXh0ZW5kaW5nIHRoZSBiYWNrZ3JvdW5k
IHJlY3QgdG8gY29udGludWUgcGFpbnRpbmcgaW50byB0aGUgZXh0ZW5kZWQKKyAgICAvLyByZWdp
b24uIFRoaXMgZnVuY3Rpb24gZmluZHMgb3V0IGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBleHRlbmQg
dGhlIGJhY2tncm91bmQgcmVjdCBmb3IgcGFpbnRpbmcuCiAKLSAgICByZXR1cm4gdGlsZWRCYWNr
aW5nLT5ib3VuZHMoKTsKKyAgICBpZiAoIWZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kQmV5b25kUGFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWZyYW1lKCkuaXNNYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gZnJhbWUoKS5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZG9jdW1lbnRFbGVtZW50ID0gZG9j
dW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOworICAgIGF1dG8gYm9keUVsZW1lbnQgPSBkb2N1bWVu
dC0+Ym9keSgpOworICAgIGF1dG8gZG9jdW1lbnRFbGVtZW50UmVuZGVyZXIgPSBkb2N1bWVudEVs
ZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOworICAgIGF1dG8g
Ym9keVJlbmRlcmVyID0gYm9keUVsZW1lbnQgPyBib2R5RWxlbWVudC0+cmVuZGVyZXIoKSA6IG51
bGxwdHI7CisgICAgYm9vbCBkb2N1bWVudEhhc0JhY2tncm91bmRJbWFnZSA9IChkb2N1bWVudEVs
ZW1lbnRSZW5kZXJlciAmJiBkb2N1bWVudEVsZW1lbnRSZW5kZXJlci0+c3R5bGUoKS5oYXNCYWNr
Z3JvdW5kSW1hZ2UoKSkKKyAgICAgICAgfHwgKGJvZHlSZW5kZXJlciAmJiBib2R5UmVuZGVyZXIt
PnN0eWxlKCkuaGFzQmFja2dyb3VuZEltYWdlKCkpOworCisgICAgcmV0dXJuIGRvY3VtZW50SGFz
QmFja2dyb3VuZEltYWdlOwogfQogCi12b2lkIEZyYW1lVmlldzo6c2V0QmFja2dyb3VuZEV4dGVu
ZHNCZXlvbmRQYWdlKGJvb2wgZXh0ZW5kQmFja2dyb3VuZCkKK3ZvaWQgRnJhbWVWaWV3OjpzZXRI
YXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoYm9vbCBzaG91bGRIYXZlRXh0ZW5k
ZWRCYWNrZ3JvdW5kUmVjdCkKIHsKKyAgICBpZiAoc2hvdWxkSGF2ZUV4dGVuZGVkQmFja2dyb3Vu
ZFJlY3QgPT0gaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3
KCk7CiAgICAgaWYgKCFyZW5kZXJWaWV3KQogICAgICAgICByZXR1cm47CkBAIC0yNDY2LDcgKzI1
MDMsMTYgQEAgdm9pZCBGcmFtZVZpZXc6OnNldEJhY2tncm91bmRFeHRlbmRzQmV5bwogICAgIGlm
ICghYmFja2luZykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmFja2luZy0+c2V0VGlsZWRCYWNr
aW5nSGFzTWFyZ2lucyhleHRlbmRCYWNrZ3JvdW5kKTsKKyAgICBiYWNraW5nLT5zZXRUaWxlZEJh
Y2tpbmdIYXNNYXJnaW5zKGZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5k
QmV5b25kUGFnZSgpICYmIHNob3VsZEhhdmVFeHRlbmRlZEJhY2tncm91bmRSZWN0KTsKK30KKwor
SW50UmVjdCBGcmFtZVZpZXc6OmV4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygpIGNv
bnN0Cit7CisgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcgPSB0aGlzLT50aWxlZEJhY2tp
bmcoKTsKKyAgICBpZiAoIXRpbGVkQmFja2luZykKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
KworICAgIHJldHVybiB0aWxlZEJhY2tpbmctPmJvdW5kcygpOwogfQogCiBib29sIEZyYW1lVmll
dzo6c2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCShyZXZpc2lvbiAxNjMwOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTEgKzE5MSwxOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRCYXNlQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgdm9pZCB1cGRh
dGVCYWNrZ3JvdW5kUmVjdXJzaXZlbHkoY29uc3QgQ29sb3ImLCBib29sKTsKIAotICAgIC8vIGV4
dGVuZGVkQmFja2dyb3VuZFJlY3QoKSBpcyBpbiB0aGUgdmlld3BvcnQncyBjb29yZGluYXRlIHNw
YWNlLiAKLSAgICBib29sIGhhc0V4dGVuZGVkQmFja2dyb3VuZCgpIGNvbnN0OwotICAgIEludFJl
Y3QgZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCgpIGNvbnN0OwotICAgIAorICAgIC8vIHNldEJhY2tn
cm91bmRFeHRlbmRzQmV5b25kUGFnZSgpIGlzIGNvbnRyb2xsZWQgYnkgU2V0dGluZ3M6OnNldEJh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkuIFNvbWUKKyAgICAvLyBleHRlbmRlZCBi
YWNrZ3JvdW5kcyByZXF1aXJlIGFuIGV4dGVuZGVkIGJhY2tncm91bmQgcmVjdCBmb3IgcGFpbnRp
bmcsIChhdCB0aGlzIHRpbWUsIHRoYXQgY29ycmVzcG9uZHMKKyAgICAvLyB0byBkb2N1bWVudHMg
d2l0aCBiYWNrZ3JvdW5kIGltYWdlcykgYW5kIG5lZWRzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZv
clBhaW50aW5nKCkgZGV0ZXJtaW5lcyBpZiB0aGlzCisgICAgLy8gRnJhbWVWaWV3IGlzIG9uZSBv
ZiB0aG9zZSBzcGVjaWFsIEZyYW1lVmlld3MgdGhhdCBkb2VzIHJlcXVpcmUgYW4gZXh0ZW5kZWQg
cmVjdCBmb3IgcGFpbnRpbmcuIFNpbmNlCisgICAgLy8gbmVlZGluZyBhbiBleHRlbmRlZCBiYWNr
Z3JvdW5kIHJlY3QgZm9yIHBhaW50aW5nIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBjaGFuZ2UgaW4g
dGhlIGNvdXJzZSBvZiBhIEZyYW1lVmlldydzCisgICAgLy8gbGlmZSwgdGhlIGV4dGVuZGVkIHJl
Y3QgaXMgc2V0IGFuZCB1bnNldCB1c2luZyBzZXRIYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9y
UGFpbnRpbmcoKS4gVGhlCisgICAgLy8gZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5n
KCkgaXMgaW4gdGhlIHZpZXdwb3J0J3MgY29vcmRpbmF0ZSBzcGFjZS4KICAgICB2b2lkIHNldEJh
Y2tncm91bmRFeHRlbmRzQmV5b25kUGFnZShib29sKTsKKyAgICBib29sIG5lZWRzRXh0ZW5kZWRC
YWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIYXNFeHRlbmRl
ZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoYm9vbCBzaG91bGRIYXZlRXh0ZW5kZWRCYWNrZ3Jv
dW5kUmVjdCk7CisgICAgYm9vbCBoYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmco
KSBjb25zdDsKKyAgICBJbnRSZWN0IGV4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGluZygp
IGNvbnN0OwogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbigpIGNvbnN0Owog
ICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4oYm9vbCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaAkocmV2aXNp
b24gMTYzMDkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNr
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlV2lkdGggPSA1MTI7CitzdGF0aWMg
Y29uc3QgaW50IGRlZmF1bHRUaWxlSGVpZ2h0ID0gNTEyOworCiBjbGFzcyBJbnRSZWN0OwogI2lm
IFBMQVRGT1JNKE1BQykKIGNsYXNzIFBsYXRmb3JtQ0FMYXllcjsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xs
ZXIubW0JKHJldmlzaW9uIDE2MzA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsOSArNDcs
NiBAQCBlbnVtIFRpbGVWYWxpZGF0aW9uUG9saWN5RmxhZyB7CiAgICAgVW5wYXJlbnRBbGxUaWxl
cyA9IDEgPDwgMQogfTsKIAotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0VGlsZVdpZHRoID0gNTEy
Owotc3RhdGljIGNvbnN0IGludCBkZWZhdWx0VGlsZUhlaWdodCA9IDUxMjsKLQogUGFzc093blB0
cjxUaWxlQ29udHJvbGxlcj4gVGlsZUNvbnRyb2xsZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXIq
IHJvb3RQbGF0Zm9ybUxheWVyKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGlsZUNvbnRy
b2xsZXIocm9vdFBsYXRmb3JtTGF5ZXIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCShyZXZpc2lvbiAxNjMwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwOCw5ICsxNjA4LDkgQEAgYm9v
bCBSZW5kZXJCb3g6OnJlcGFpbnRMYXllclJlY3RzRm9ySW1hZwogICAgICAgICAgICAgLy8gSWYg
dGhpcyBpcyB0aGUgcm9vdCBiYWNrZ3JvdW5kIGxheWVyLCB3ZSBtYXkgbmVlZCB0byBleHRlbmQg
dGhlIHJlcGFpbnRSZWN0IGlmIHRoZSBGcmFtZVZpZXcgaGFzIGFuCiAgICAgICAgICAgICAvLyBl
eHRlbmRlZEJhY2tncm91bmQuIFdlIHNob3VsZCBvbmx5IGV4dGVuZCB0aGUgcmVjdCBpZiBpdCBp
cyBhbHJlYWR5IGV4dGVuZGluZyB0aGUgZnVsbCB3aWR0aCBvciBoZWlnaHQKICAgICAgICAgICAg
IC8vIG9mIHRoZSByZW5kZXJlclJlY3QuCi0gICAgICAgICAgICBpZiAoZHJhd2luZ1Jvb3RCYWNr
Z3JvdW5kICYmIHZpZXcoKS5mcmFtZVZpZXcoKS5oYXNFeHRlbmRlZEJhY2tncm91bmQoKSkgewor
ICAgICAgICAgICAgaWYgKGRyYXdpbmdSb290QmFja2dyb3VuZCAmJiB2aWV3KCkuZnJhbWVWaWV3
KCkuaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkpIHsKICAgICAgICAgICAg
ICAgICBzaG91bGRDbGlwVG9MYXllciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIEludFJlY3Qg
ZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdCA9IHZpZXcoKS5mcmFtZVZpZXcoKS5leHRlbmRlZEJhY2tn
cm91bmRSZWN0KCk7CisgICAgICAgICAgICAgICAgSW50UmVjdCBleHRlbmRlZEJhY2tncm91bmRS
ZWN0ID0gdmlldygpLmZyYW1lVmlldygpLmV4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQYWludGlu
ZygpOwogICAgICAgICAgICAgICAgIGlmIChyZWN0VG9SZXBhaW50LndpZHRoKCkgPT0gcmVuZGVy
ZXJSZWN0LndpZHRoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmVjdFRvUmVwYWludC5tb3Zl
KGV4dGVuZGVkQmFja2dyb3VuZFJlY3QueCgpLCAwKTsKICAgICAgICAgICAgICAgICAgICAgcmVj
dFRvUmVwYWludC5zZXRXaWR0aChleHRlbmRlZEJhY2tncm91bmRSZWN0LndpZHRoKCkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNjMwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk0LDggKzEwOTQsOCBAQCB2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpjYWxjdWxhdGVCYWNrCiAgICAgICAgIC8vIHRoZSBi
YWNrZ3JvdW5kIHBvc2l0aW9uaW5nIGFyZWEuCiAgICAgICAgIGlmIChpc1Jvb3QoKSkgewogICAg
ICAgICAgICAgcG9zaXRpb25pbmdBcmVhU2l6ZSA9IHBpeGVsU25hcHBlZEludFNpemUodG9SZW5k
ZXJCb3godGhpcyktPnNpemUoKSAtIExheW91dFNpemUobGVmdCArIHJpZ2h0LCB0b3AgKyBib3R0
b20pLCB0b1JlbmRlckJveCh0aGlzKS0+bG9jYXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAodmll
dygpLmZyYW1lVmlldygpLmhhc0V4dGVuZGVkQmFja2dyb3VuZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgSW50UmVjdCBleHRlbmRlZEJhY2tncm91bmRSZWN0ID0gdmlldygpLmZyYW1lVmlldygpLmV4
dGVuZGVkQmFja2dyb3VuZFJlY3QoKTsKKyAgICAgICAgICAgIGlmICh2aWV3KCkuZnJhbWVWaWV3
KCkuaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICBJbnRSZWN0IGV4dGVuZGVkQmFja2dyb3VuZFJlY3QgPSB2aWV3KCkuZnJhbWVWaWV3KCku
ZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdEZvclBhaW50aW5nKCk7CiAgICAgICAgICAgICAgICAgbGVm
dCArPSAobWFyZ2luTGVmdCgpIC0gZXh0ZW5kZWRCYWNrZ3JvdW5kUmVjdC54KCkpOwogICAgICAg
ICAgICAgICAgIHRvcCArPSAobWFyZ2luVG9wKCkgLSBleHRlbmRlZEJhY2tncm91bmRSZWN0Lnko
KSk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMTYzMDkwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
OCw3ICsxMzgsNiBAQCBSZW5kZXJMYXllckJhY2tpbmc6OlJlbmRlckxheWVyQmFja2luZyhSCiAg
ICAgICAgIGlmIChtX2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVyKSB7CiAgICAgICAgICAgICB0
aWxlZEJhY2tpbmctPnNldEV4cG9zZWRSZWN0KHJlbmRlcmVyKCkuZnJhbWUoKS52aWV3KCktPmV4
cG9zZWRSZWN0KCkpOwogICAgICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRVbnBhcmVudHNPZmZz
Y3JlZW5UaWxlcyh0cnVlKTsKLSAgICAgICAgICAgIHNldFRpbGVkQmFja2luZ0hhc01hcmdpbnMo
cGFnZS0+c2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZChwYWdlLT5zZXR0aW5ncygpLnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2lu
Z0VuYWJsZWQoKSk7CkBAIC0xOTIsMTEgKzE5MSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzaG91bGRVc2VUaWxlZEIKICAgICByZXR1cm4gbV91c2luZ1RpbGVkQ2FjaGVMYXllciAmJiBt
X2NyZWF0aW5nUHJpbWFyeUdyYXBoaWNzTGF5ZXI7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp0aWxlZEJhY2tpbmdIYXNNYXJnaW4oKSBjb25zdAotewotICAgIHJldHVybiBtX3VzaW5n
VGlsZWRDYWNoZUxheWVyICYmIHRpbGVkQmFja2luZygpLT5oYXNNYXJnaW5zKCk7Ci19Ci0KIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp0aWxlZEJhY2tpbmdVc2FnZUNoYW5nZWQoY29uc3QgR3Jh
cGhpY3NMYXllciogbGF5ZXIsIGJvb2wgdXNpbmdUaWxlZEJhY2tpbmcpCiB7CiAgICAgY29tcG9z
aXRvcigpLmxheWVyVGlsZWRCYWNraW5nVXNhZ2VDaGFuZ2VkKGxheWVyLCB1c2luZ1RpbGVkQmFj
a2luZyk7CkBAIC0yNDAsMTMgKzIzNCwxNCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6YWRq
dXN0VGlsZWRCYWNrCiAgICAgdGlsZWRCYWNraW5nKCktPnNldFRpbGVDb3ZlcmFnZSh0aWxlQ292
ZXJhZ2UpOwogfQogCi12b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0VGlsZWRCYWNraW5nSGFz
TWFyZ2lucyhib29sIGV4dGVuZEJhY2tncm91bmQpCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
c2V0VGlsZWRCYWNraW5nSGFzTWFyZ2lucyhib29sIGhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3Qp
CiB7CiAgICAgaWYgKCFtX3VzaW5nVGlsZWRDYWNoZUxheWVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpbnQgbWFyZ2luU2l6ZSA9IGV4dGVuZEJhY2tncm91bmQgPyA1MTIgOiAwOwotICAgIHRp
bGVkQmFja2luZygpLT5zZXRUaWxlTWFyZ2lucyhtYXJnaW5TaXplLCBtYXJnaW5TaXplLCBtYXJn
aW5TaXplLCBtYXJnaW5TaXplKTsKKyAgICBpbnQgbWFyZ2luTGVmdEFuZFJpZ2h0U2l6ZSA9IGhh
c0V4dGVuZGVkQmFja2dyb3VuZFJlY3QgPyBkZWZhdWx0VGlsZVdpZHRoIDogMDsKKyAgICBpbnQg
bWFyZ2luVG9wQW5kQm90dG9tU2l6ZSA9IGhhc0V4dGVuZGVkQmFja2dyb3VuZFJlY3QgPyBkZWZh
dWx0VGlsZUhlaWdodCA6IDA7CisgICAgdGlsZWRCYWNraW5nKCktPnNldFRpbGVNYXJnaW5zKG1h
cmdpblRvcEFuZEJvdHRvbVNpemUsIG1hcmdpblRvcEFuZEJvdHRvbVNpemUsIG1hcmdpbkxlZnRB
bmRSaWdodFNpemUsIG1hcmdpbkxlZnRBbmRSaWdodFNpemUpOwogfQogCiB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlRGVidWdJbmRpY2F0b3JzKGJvb2wgc2hvd0JvcmRlciwgYm9vbCBz
aG93UmVwYWludENvdW50ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCShyZXZpc2lvbiAxNjMwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsx
NTIsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNVbnBvc2l0aW9uZWRPdmVyZmxvd0NvbnRyb2xz
TGF5ZXJzKCkgY29uc3Q7CiAKICAgICBib29sIHVzaW5nVGlsZWRCYWNraW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2luZ1RpbGVkQ2FjaGVMYXllcjsgfQotICAgIGJvb2wgdGlsZWRCYWNraW5nSGFz
TWFyZ2luKCkgY29uc3Q7CiAgICAgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKSBjb25zdDsK
ICAgICB2b2lkIGFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7CiAgICAgdm9pZCBzZXRUaWxl
ZEJhY2tpbmdIYXNNYXJnaW5zKGJvb2wpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDE2MzA5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03ODgsNyArNzg4LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZUJhY2tpbgogICAgICAgICAgICAgICAgICAgICB1cGRhdGVMYXllckZvckZvb3Rlcihw
YWdlLT5mb290ZXJIZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAg
ICAgICAgICAgaWYgKG1haW5GcmFtZUJhY2tpbmdJc1RpbGVkV2l0aE1hcmdpbigpKQorICAgICAg
ICAgICAgICAgIGlmIChtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygp
LmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkpCiAgICAgICAgICAgICAgICAgICAg
IG1fcm9vdENvbnRlbnRMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CiAgICAgICAgICAg
ICB9CiAKQEAgLTI3NTEsMTkgKzI3NTEsNiBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
bWFpbkZyYW1lQmFjCiAgICAgcmV0dXJuIGJhY2tpbmctPnVzaW5nVGlsZWRCYWNraW5nKCk7CiB9
CiAKLWJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjptYWluRnJhbWVCYWNraW5nSXNUaWxlZFdp
dGhNYXJnaW4oKSBjb25zdAotewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fcmVuZGVyVmll
dy5sYXllcigpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IGxheWVyLT5iYWNraW5nKCk7Ci0gICAgaWYg
KCFiYWNraW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gYmFja2luZy0+
dGlsZWRCYWNraW5nSGFzTWFyZ2luKCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpzaG91bGRDb21wb3NpdGVPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKIHsKICAgICBGcmFtZVZp
ZXcmIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKQEAgLTI4MjIsNiArMjgw
OSwxMCBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb250CiAgICAgaWYg
KHZpZXdIYXNUcmFuc3BhcmVudEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CisgICAgLy8gSWYgdGhlIGJhY2tncm91bmQgaXMgZ29pbmcgdG8gZXh0ZW5kLCB0aGVuIGl0IGRv
ZXNuJ3QgbWFrZSBzZW5zZSB0byBoYXZlIGEgc2hhZG93IGxheWVyLgorICAgIGlmIChtX3JlbmRl
clZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRl
bmRCZXlvbmRQYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIC8vIE9uIE1hYywg
d2Ugd2FudCBhIGNvbnRlbnQgc2hhZG93IGxheWVyIGlmIHdlJ3JlIHVzaW5nIHRpbGVkIGRyYXdp
bmcgYW5kIGNhbiBzY3JvbGwuCiAgICAgaWYgKG1haW5GcmFtZUJhY2tpbmdJc1RpbGVkKCkgJiYg
IW1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5wcm9oaWJpdHNTY3JvbGxpbmcoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yOTc4LDYgKzI5NjksMTkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnZpZXdIYXNUcmFucwogICAgIHJldHVybiBkb2N1bWVudEJhY2tncm91bmRDb2xvci5o
YXNBbHBoYSgpOwogfQogCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0Um9vdEV4dGVu
ZGVkQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisgICAgaWYgKCFtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcykKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMtPnNldEJhY2tncm91bmRDb2xv
cihjb2xvcik7CisKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgbV9sYXllckZv
ck92ZXJoYW5nQXJlYXMtPnNldEN1c3RvbUFwcGVhcmFuY2UoR3JhcGhpY3NMYXllcjo6U2Nyb2xs
aW5nT3ZlcmhhbmcpOworI2VuZGlmCit9CisKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1
cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCkBAIC0yOTg5LDcgKzI5OTMsMTEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZU92ZXJmbAogI2VuZGlmCiAgICAgICAgICAgICBtX2xheWVyRm9yT3ZlcmhhbmdBcmVhcy0+
c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKICAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVyaGFuZ0Fy
ZWFzLT5zZXRTaXplKG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZVJlY3QoKS5zaXplKCkp
OwotICAgICAgICAgICAgbV9sYXllckZvck92ZXJoYW5nQXJlYXMtPnNldEN1c3RvbUFwcGVhcmFu
Y2UoR3JhcGhpY3NMYXllcjo6U2Nyb2xsaW5nT3ZlcmhhbmcpOworCisgICAgICAgICAgICBpZiAo
bV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCkuc2V0dGluZ3MoKS5iYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kQmV5b25kUGFnZSgpKQorICAgICAgICAgICAgICAgIG1fbGF5ZXJGb3JPdmVyaGFu
Z0FyZWFzLT5zZXRCYWNrZ3JvdW5kQ29sb3IobV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmRvY3Vt
ZW50QmFja2dyb3VuZENvbG9yKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1fbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzLT5zZXRDdXN0b21BcHBlYXJhbmNlKEdyYXBoaWNzTGF5
ZXI6OlNjcm9sbGluZ092ZXJoYW5nKTsKIAogICAgICAgICAgICAgLy8gV2Ugd2FudCB0aGUgb3Zl
cmhhbmcgYXJlYXMgbGF5ZXIgdG8gYmUgcG9zaXRpb25lZCBiZWxvdyB0aGUgZnJhbWUgY29udGVu
dHMsCiAgICAgICAgICAgICAvLyBzbyBpbnNlcnQgaXQgYmVsb3cgdGhlIGNsaXAgbGF5ZXIuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCShyZXZpc2lvbiAxNjMwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksNyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCBkaWRQYWludEJhY2tpbmcoUmVuZGVyTGF5ZXJCYWNraW5nKik7
CiAKLSAgICBib29sIG1haW5GcmFtZUJhY2tpbmdJc1RpbGVkV2l0aE1hcmdpbigpIGNvbnN0Owor
ICAgIHZvaWQgc2V0Um9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJik7CiAK
IHByaXZhdGU6CiAgICAgY2xhc3MgT3ZlcmxhcE1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDE2MzA5MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBA
QAogI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclNl
bGVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybVN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KQEAgLTU1NCwxNCArNTU1
LDE0IEBAIHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWkKICAgICAgICAg
cm9vdE9ic2N1cmVzQmFja2dyb3VuZCA9IHJlbmRlcmVyT2JzY3VyZXNCYWNrZ3JvdW5kKHJvb3RS
ZW5kZXJlcik7CiAgICAgfQogCi0gICAgYm9vbCBoYXNUaWxlZE1hcmdpbiA9IGZhbHNlOwotICAg
IGhhc1RpbGVkTWFyZ2luID0gY29tcG9zaXRvcigpLm1haW5GcmFtZUJhY2tpbmdJc1RpbGVkV2l0
aE1hcmdpbigpOworICAgIGNvbXBvc2l0b3IoKS5zZXRSb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29s
b3IoZnJhbWVWaWV3KCkuZnJhbWUoKS5zZXR0aW5ncygpLmJhY2tncm91bmRTaG91bGRFeHRlbmRC
ZXlvbmRQYWdlKCkKKyAgICAgICAgPyBmcmFtZVZpZXcoKS5kb2N1bWVudEJhY2tncm91bmRDb2xv
cigpIDogQ29sb3IoKSk7CiAKICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS5wYWdlKCk7CiAg
ICAgZmxvYXQgcGFnZVNjYWxlRmFjdG9yID0gcGFnZSA/IHBhZ2UtPnBhZ2VTY2FsZUZhY3Rvcigp
IDogMTsKIAogICAgIC8vIElmIHBhaW50aW5nIHdpbGwgZW50aXJlbHkgZmlsbCB0aGUgdmlldywg
bm8gbmVlZCB0byBmaWxsIHRoZSBiYWNrZ3JvdW5kLgotICAgIGlmICghaGFzVGlsZWRNYXJnaW4g
JiYgcm9vdEZpbGxzVmlld3BvcnQgJiYgcm9vdE9ic2N1cmVzQmFja2dyb3VuZCAmJiBwYWdlU2Nh
bGVGYWN0b3IgPj0gMSkKKyAgICBpZiAocm9vdEZpbGxzVmlld3BvcnQgJiYgcm9vdE9ic2N1cmVz
QmFja2dyb3VuZCAmJiBwYWdlU2NhbGVGYWN0b3IgPj0gMSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gVGhpcyBjb2RlIHR5cGljYWxseSBvbmx5IGV4ZWN1dGVzIGlmIHRoZSByb290IGVsZW1l
bnQncyB2aXNpYmlsaXR5IGhhcyBiZWVuIHNldCB0byBoaWRkZW4sCkBAIC01NzEsNyArNTcyLDcg
QEAgdm9pZCBSZW5kZXJWaWV3OjpwYWludEJveERlY29yYXRpb25zKFBhaQogICAgIGlmIChmcmFt
ZVZpZXcoKS5pc1RyYW5zcGFyZW50KCkpIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGR5bmFt
aWMuIFdlIHNob3VsZCBiZSBhYmxlIHRvIGdvIGJhY2sgdG8gYmxpdHRpbmcgaWYgd2UgZXZlciBz
dG9wIGJlaW5nIHRyYW5zcGFyZW50LgogICAgICAgICBmcmFtZVZpZXcoKS5zZXRDYW5ub3RCbGl0
VG9XaW5kb3coKTsgLy8gVGhlIHBhcmVudCBtdXN0IHNob3cgYmVoaW5kIHRoZSBjaGlsZC4KICAg
ICBlbHNlIHsKLSAgICAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gaGFzVGlsZWRNYXJnaW4g
PyBmcmFtZVZpZXcoKS5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpIDogZnJhbWVWaWV3KCkuYmFz
ZUJhY2tncm91bmRDb2xvcigpOworICAgICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBmcmFt
ZVZpZXcoKS5iYXNlQmFja2dyb3VuZENvbG9yKCk7CiAgICAgICAgIGlmIChiYWNrZ3JvdW5kQ29s
b3IuYWxwaGEoKSkgewogICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVy
YXRvciA9IHBhaW50SW5mby5jb250ZXh0LT5jb21wb3NpdGVPcGVyYXRpb24oKTsKICAgICAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29w
eSk7CkBAIC0xMDM0LDggKzEwMzUsMTIgQEAgYm9vbCBSZW5kZXJWaWV3Ojpyb290QmFja2dyb3Vu
ZElzRW50aXJlbAogCiBMYXlvdXRSZWN0IFJlbmRlclZpZXc6OmJhY2tncm91bmRSZWN0KFJlbmRl
ckJveCogYmFja2dyb3VuZFJlbmRlcmVyKSBjb25zdAogewotICAgIGlmICghaGFzQ29sdW1ucygp
KQotICAgICAgICByZXR1cm4gZnJhbWVWaWV3KCkuaGFzRXh0ZW5kZWRCYWNrZ3JvdW5kKCkgPyBm
cmFtZVZpZXcoKS5leHRlbmRlZEJhY2tncm91bmRSZWN0KCkgOiB1bnNjYWxlZERvY3VtZW50UmVj
dCgpOworICAgIGlmICghaGFzQ29sdW1ucygpKSB7CisgICAgICAgIGJvb2wgbmVlZHNFeHRlbmRl
ZEJhY2tncm91bmQgPSBmcmFtZVZpZXcoKS5uZWVkc0V4dGVuZGVkQmFja2dyb3VuZFJlY3RGb3JQ
YWludGluZygpOworICAgICAgICBpZiAoZnJhbWVWaWV3KCkuaGFzRXh0ZW5kZWRCYWNrZ3JvdW5k
UmVjdEZvclBhaW50aW5nKCkgIT0gbmVlZHNFeHRlbmRlZEJhY2tncm91bmQpCisgICAgICAgICAg
ICBmcmFtZVZpZXcoKS5zZXRIYXNFeHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcobmVl
ZHNFeHRlbmRlZEJhY2tncm91bmQpOworICAgICAgICByZXR1cm4gbmVlZHNFeHRlbmRlZEJhY2tn
cm91bmQgPyBmcmFtZVZpZXcoKS5leHRlbmRlZEJhY2tncm91bmRSZWN0Rm9yUGFpbnRpbmcoKSA6
IHVuc2NhbGVkRG9jdW1lbnRSZWN0KCk7CisgICAgfQogCiAgICAgQ29sdW1uSW5mbyogY29sdW1u
SW5mbyA9IHRoaXMtPmNvbHVtbkluZm8oKTsKICAgICBMYXlvdXRSZWN0IGJhY2tncm91bmRSZWN0
KDAsIDAsIGNvbHVtbkluZm8tPmRlc2lyZWRDb2x1bW5XaWR0aCgpLCBjb2x1bW5JbmZvLT5jb2x1
bW5IZWlnaHQoKSAqIGNvbHVtbkluZm8tPmNvbHVtbkNvdW50KCkpOwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gMTYzMDkyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTQtMDEtMzAgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgor
CisgICAgICAgIEV4dGVuZGVkIGJhY2tncm91bmQgc2hvdWxkIG9ubHkgY3JlYXRlIG1hcmdpbiB0
aWxlcyBmb3IgcGFnZXMgd2l0aCBiYWNrZ3JvdW5kIAorICAgICAgICBpbWFnZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzg3NgorICAgICAgICAt
YW5kIGNvcnJlc3BvbmRpbmctCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNTgyNzYzMj4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBjYW4gb25s
eSB0ZXN0IG1hcmdpbiB0aWxlcyBpZiB3ZSBhbHNvIGdpdmUgdGhlIGRvY3VtZW50IGEgYmFja2dy
b3VuZCBpbWFnZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvcmVz
b3VyY2VzL2dyZWVuYm94LnBuZzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMi90
aWxlZC1kcmF3aW5nL3NpbXBsZS1kb2N1bWVudC13aXRoLW1hcmdpbi10aWxlcy5odG1sOgorCiAy
MDE0LTAxLTMwICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MzcxCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvc2ltcGxlLWRvY3VtZW50LXdpdGgt
bWFyZ2luLXRpbGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
LXdrMi90aWxlZC1kcmF3aW5nL3NpbXBsZS1kb2N1bWVudC13aXRoLW1hcmdpbi10aWxlcy5odG1s
CShyZXZpc2lvbiAxNjMwOTApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVk
LWRyYXdpbmcvc2ltcGxlLWRvY3VtZW50LXdpdGgtbWFyZ2luLXRpbGVzLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTYsMTggKzYsMjAgQEAKICAgICAgICAgYm9keSB7CiAgICAgICAgICAgICB3aWR0
aDogMTIwMHB4OwogICAgICAgICAgICAgaGVpZ2h0OiAyMDAwcHg7CisgICAgICAgICAgICAvKiBU
aGUgc2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2Ugc2V0dGluZyB3aWxsIG9ubHkg
Y3JlYXRlIG1hcmdpbiB0aWxlcyBmb3IgZG9jdW1lbnRzCisgICAgICAgICAgICAgICB0aGF0IGhh
dmUgYmFja2dyb3VuZCBpbWFnZXMuICovCisgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOnVy
bChyZXNvdXJjZXMvZ3JlZW5ib3gucG5nKTsKKyAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0
OnJlcGVhdDsKICAgICAgICAgfQogICAgIDwvc3R5bGU+CiAgICAgPHNjcmlwdD4KICAgICAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyKQogICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0
KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAod2luZG93LmludGVybmFscykKLSAgICAgICAgICAg
IHdpbmRvdy5pbnRlcm5hbHMuc2V0dGluZ3Muc2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9u
ZFBhZ2UodHJ1ZSk7CiAKICAgICAgICAgZnVuY3Rpb24gZG9UZXN0KCkKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cu
aW50ZXJuYWxzLnNldHRpbmdzLnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKHRy
dWUpOwogICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsYXllcnMnKS5p
bm5lclRleHQgPSBpbnRlcm5hbHMubGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50LAogICAgICAgICAg
ICAgICAgICAgICBpbnRlcm5hbHMuTEFZRVJfVFJFRV9JTkNMVURFU19WSVNJQkxFX1JFQ1RTIHwg
aW50ZXJuYWxzLkxBWUVSX1RSRUVfSU5DTFVERVNfVElMRV9DQUNIRVMpOwogICAgICAgICAgICAg
fQpAQCAtMjUsNiArMjcsNyBAQAogICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9h
ZCcsIGRvVGVzdCwgZmFsc2UpOwogICAgIDwvc2NyaXB0PgogPC9oZWFkPgorCiA8Ym9keT4KIDxw
cmUgaWQ9ImxheWVycyI+TGF5ZXIgdHJlZSBnb2VzIGhlcmU8L3A+CiA8L2JvZHk+CkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvcmVzb3VyY2VzL2dyZWVu
Ym94LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFy
eSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvcmVzb3VyY2VzL2dyZWVu
Ym94LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL3RpbGVk
LWRyYXdpbmcvcmVzb3VyY2VzL2dyZWVuYm94LnBuZwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azIvdGlsZWQtZHJhd2luZy9yZXNvdXJjZXMvZ3JlZW5ib3gucG5n
CSh3b3JraW5nIGNvcHkpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMtd2syL3RpbGVkLWRyYXdpbmcvcmVzb3VyY2VzL2dyZWVuYm94LnBuZwpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46bWltZS10eXBlCiMjIC0wLDAgKzEgIyMKK2FwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CgppVkJPUncwS0dnb0FBQUFOU1Vo
RVVnQUFBQmtBQUFBWkNBSUFBQUJMaXhJMEFBQUFKa2xFUVZSNG5HSmcrTTlBTlRScTFxaFpvMmFO
Cm1qVnExcWhabzJaaElBQUFBQUQvL3dNQTFYQnVybzB6c29rQUFBQUFTVVZPUks1Q1lJST0KCg==
</data>
<flag name="review"
          id="246770"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>