<?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>103635</bug_id>
          
          <creation_ts>2012-11-29 06:57:02 -0800</creation_ts>
          <short_desc>[chromium] Create GraphicsLayerChromiums using a factory</short_desc>
          <delta_ts>2013-01-15 20:38:01 -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>WebKit Misc.</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>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>778976</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-11-29 06:57:02 -0800</bug_when>
    <thetext>Here&apos;s the context for this change:

With impl thread painting, we&apos;ll have two impl trees, both of which will need to have up-to-date animated values. Things become tricky of both trees have their own copies of the animation controllers. The basic idea is that the impl trees will share a single copy (the layers will have a scoped_refptr to their controller).

To accomplish this, I plan to create an auxiliary list of active animation controllers*. This list will contain raw pointers (no ref) that we guarantee won&apos;t go stale. When the layer tree host impl services its animations, it will simply traverse the auxiliary list rather than one if its two trees. This solves another big problem we currently have with accelerated animations: detached layers cannot start accelerated animations**. Once we&apos;re creating graphics layers with a factory, we can (in a future CL) attempt to register animation controllers with the layer tree hosts, even before the layers are added to the tree. To be more specific, the way I see these future CLs panning out is as follows:

On the webkit side,
 - The factory knows about the root layer (the ChromeClientImpl will keep the factory&apos;s m_rootLayer member updated).
 - GraphicsLayerChromium and Layer will take a (possibly null) pointer to the root layer as a ctor parameter, passing it along as usual.

On the chromium side, 
 - Layer::Layer, when constructing its layer animator will, if things are non-null, pass the root layer&apos;s layer tree host to the layer animation controllers constructor.
 - Layer will communicate to its animation controller whenever its layer tree host changes.
 - LayerTreeHost and LayerTreeHostImpl will both inherit from AnimationRegistrar (which only defines ::Register(controller*) and ::Unregister(controller*))
 - Commit will sync the auxiliary lists as required.
 - Layers will pull animated values from their controllers rather than them being pushed like they used to be.

* Another suggestion, rather than the layer tree hosts maintaining auxiliary lists, is that we create a global list of active controllers.

** This is a VERY common case (most transitions). We had initially assumed that detached layers would always become attached shortly, so we said &apos;yes&apos; when asked to accelerate the animation thinking that we could just start it up shortly when we were added to the layer tree. It turned out that this was not always the case -- sometimes we remained detached until some user interaction happened (hovering over a particular element, say). This causes problems because sometimes webcore blocks main thread animation waiting to hear news of the accelerated animation starting. To get around this correctness issue we decided to reject accelerated animation while detached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778980</commentid>
    <comment_count>1</comment_count>
      <attachid>176721</attachid>
    <who name="">vollick</who>
    <bug_when>2012-11-29 07:02:30 -0800</bug_when>
    <thetext>Created attachment 176721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781097</commentid>
    <comment_count>2</comment_count>
      <attachid>176721</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-12-02 20:37:05 -0800</bug_when>
    <thetext>Comment on attachment 176721
Patch

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

With a few tweaks this looks fine.  I don&apos;t understand what this patch has to do with the rest of the changes.  Is it just a prerequisite to getting a pointer to a tree at layer creation time to bootstrap some of the animation startup?  What happens when a layer moves trees?  I&apos;m pretty sure we can keep a layer always associated with some tree but not the same one for the layer&apos;s lifetime.

&gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:88
&gt;      if (!factory)
&gt; -        return adoptPtr(new GraphicsLayerChromium(client));
&gt; +        ASSERT_NOT_REACHED();
&gt;  
&gt;      return factory-&gt;createGraphicsLayer(client);

Would probably be better as
    ASSERT(factory);
    return factory-&gt;...

or even leave the ASSERT() out since we&apos;ll crash anyway

&gt; Source/WebKit/chromium/src/ChromeClientImpl.h:50
&gt; +class GraphicsLayerClient;

you don&apos;t need this

&gt; Source/WebKit/chromium/src/ChromeClientImpl.h:183
&gt; +    // Allows us to create our graphics layers however we wish, with whatever
&gt; +    // parameters we like.

this comment isn&apos;t  very helpful.

could you keep the overrides in the same order as in ChromeClient.h? graphicsLayerFactory() is above attachRootGraphicsLayer in the base interface definition

&gt; Source/WebKit/chromium/src/ChromeClientImpl.h:255
&gt; +#if USE(ACCELERATED_COMPOSITING)

USE(ACCELERATD_COMPOSITING) is always true for the chromium port so this guard isn&apos;t very useful

&gt; Source/WebKit/chromium/src/NonCompositedContentHost.cpp:51
&gt; +    if (WebCore::Page* page = m_webView-&gt;page())
&gt; +        graphicsLayerFactory = page-&gt;chrome()-&gt;client()-&gt;graphicsLayerFactory();

ChromeClientImpl is a member of WebViewImpl (and can&apos;t be null) so this pointer walk isn&apos;t needed.  Why not pass a GraphicsLayerFactory pointer to this function along with the WebViewImpl* ?

&gt; Source/WebKit/chromium/src/PageOverlay.cpp:133
&gt; +        GraphicsLayerFactory* graphicsLayerFactory = 0;
&gt; +        if (Page* page = m_viewImpl-&gt;page())
&gt; +            graphicsLayerFactory = page-&gt;chrome()-&gt;client()-&gt;graphicsLayerFactory();

same thing here - the GraphicsLayerFactory is owned by WebViewImpl::m_chromeClientImpl, so you should figure out a way to access it directly and make sure it isn&apos;t null here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>800211</commentid>
    <comment_count>3</comment_count>
      <attachid>181304</attachid>
    <who name="">vollick</who>
    <bug_when>2013-01-04 08:20:34 -0800</bug_when>
    <thetext>Created attachment 181304
Patch

(In reply to comment #2)
&gt; (From update of attachment 176721 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176721&amp;action=review
&gt; 
&gt; With a few tweaks this looks fine.  I don&apos;t understand what this patch has to do with the rest of the changes.  Is it just a prerequisite to getting a pointer to a tree at layer creation time to bootstrap some of the animation startup?  What happens when a layer moves trees?  I&apos;m pretty sure we can keep a layer always associated with some tree but not the same one for the layer&apos;s lifetime.

Yes, this is to give a layer access to the tree so that the layer can get its animation controller registered. This will allow us to operate on the controllers even when the layer hasn&apos;t yet been added to the tree. When the layer moves trees, we update its registration, so that shouldn&apos;t be a problem.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:88
&gt; &gt;      if (!factory)
&gt; &gt; -        return adoptPtr(new GraphicsLayerChromium(client));
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt;  
&gt; &gt;      return factory-&gt;createGraphicsLayer(client);
&gt; 
&gt; Would probably be better as
&gt;     ASSERT(factory);
&gt;     return factory-&gt;...
&gt; 
&gt; or even leave the ASSERT() out since we&apos;ll crash anyway
Done.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/ChromeClientImpl.h:50
&gt; &gt; +class GraphicsLayerClient;
&gt; 
&gt; you don&apos;t need this
Removed.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/ChromeClientImpl.h:183
&gt; &gt; +    // Allows us to create our graphics layers however we wish, with whatever
&gt; &gt; +    // parameters we like.
&gt; 
&gt; this comment isn&apos;t  very helpful.
Removed.
&gt; 
&gt; could you keep the overrides in the same order as in ChromeClient.h? graphicsLayerFactory() is above attachRootGraphicsLayer in the base interface definition
&gt; 
&gt; &gt; Source/WebKit/chromium/src/ChromeClientImpl.h:255
&gt; &gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; 
&gt; USE(ACCELERATD_COMPOSITING) is always true for the chromium port so this guard isn&apos;t very useful
Should we remove these guards elsewhere in the file?
&gt; 
&gt; &gt; Source/WebKit/chromium/src/NonCompositedContentHost.cpp:51
&gt; &gt; +    if (WebCore::Page* page = m_webView-&gt;page())
&gt; &gt; +        graphicsLayerFactory = page-&gt;chrome()-&gt;client()-&gt;graphicsLayerFactory();
&gt; 
&gt; ChromeClientImpl is a member of WebViewImpl (and can&apos;t be null) so this pointer walk isn&apos;t needed.  Why not pass a GraphicsLayerFactory pointer to this function along with the WebViewImpl* ?
Done.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/PageOverlay.cpp:133
&gt; &gt; +        GraphicsLayerFactory* graphicsLayerFactory = 0;
&gt; &gt; +        if (Page* page = m_viewImpl-&gt;page())
&gt; &gt; +            graphicsLayerFactory = page-&gt;chrome()-&gt;client()-&gt;graphicsLayerFactory();
&gt; 
&gt; same thing here - the GraphicsLayerFactory is owned by WebViewImpl::m_chromeClientImpl, so you should figure out a way to access it directly and make sure it isn&apos;t null here
Done -- I&apos;ve made a graphicsLayerFactory accessor on WebViewImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807254</commentid>
    <comment_count>4</comment_count>
    <who name="">vollick</who>
    <bug_when>2013-01-15 06:58:43 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=181304) [details]
&gt; Patch
&gt; 
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 176721 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176721&amp;action=review
&gt; &gt; 
&gt; &gt; With a few tweaks this looks fine.  I don&apos;t understand what this patch has to do with the rest of the changes.  Is it just a prerequisite to getting a pointer to a tree at layer creation time to bootstrap some of the animation startup?  What happens when a layer moves trees?  I&apos;m pretty sure we can keep a layer always associated with some tree but not the same one for the layer&apos;s lifetime.
&gt; 
&gt; Yes, this is to give a layer access to the tree so that the layer can get its animation controller registered. This will allow us to operate on the controllers even when the layer hasn&apos;t yet been added to the tree. When the layer moves trees, we update its registration, so that shouldn&apos;t be a problem.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp:88
&gt; &gt; &gt;      if (!factory)
&gt; &gt; &gt; -        return adoptPtr(new GraphicsLayerChromium(client));
&gt; &gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt; &gt;  
&gt; &gt; &gt;      return factory-&gt;createGraphicsLayer(client);
&gt; &gt; 
&gt; &gt; Would probably be better as
&gt; &gt;     ASSERT(factory);
&gt; &gt;     return factory-&gt;...
&gt; &gt; 
&gt; &gt; or even leave the ASSERT() out since we&apos;ll crash anyway
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/chromium/src/ChromeClientImpl.h:50
&gt; &gt; &gt; +class GraphicsLayerClient;
&gt; &gt; 
&gt; &gt; you don&apos;t need this
&gt; Removed.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/chromium/src/ChromeClientImpl.h:183
&gt; &gt; &gt; +    // Allows us to create our graphics layers however we wish, with whatever
&gt; &gt; &gt; +    // parameters we like.
&gt; &gt; 
&gt; &gt; this comment isn&apos;t  very helpful.
&gt; Removed.
&gt; &gt; 
&gt; &gt; could you keep the overrides in the same order as in ChromeClient.h? graphicsLayerFactory() is above attachRootGraphicsLayer in the base interface definition
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/chromium/src/ChromeClientImpl.h:255
&gt; &gt; &gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; &gt; 
&gt; &gt; USE(ACCELERATD_COMPOSITING) is always true for the chromium port so this guard isn&apos;t very useful
&gt; Should we remove these guards elsewhere in the file?
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/chromium/src/NonCompositedContentHost.cpp:51
&gt; &gt; &gt; +    if (WebCore::Page* page = m_webView-&gt;page())
&gt; &gt; &gt; +        graphicsLayerFactory = page-&gt;chrome()-&gt;client()-&gt;graphicsLayerFactory();
&gt; &gt; 
&gt; &gt; ChromeClientImpl is a member of WebViewImpl (and can&apos;t be null) so this pointer walk isn&apos;t needed.  Why not pass a GraphicsLayerFactory pointer to this function along with the WebViewImpl* ?
&gt; Done.
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/chromium/src/PageOverlay.cpp:133
&gt; &gt; &gt; +        GraphicsLayerFactory* graphicsLayerFactory = 0;
&gt; &gt; &gt; +        if (Page* page = m_viewImpl-&gt;page())
&gt; &gt; &gt; +            graphicsLayerFactory = page-&gt;chrome()-&gt;client()-&gt;graphicsLayerFactory();
&gt; &gt; 
&gt; &gt; same thing here - the GraphicsLayerFactory is owned by WebViewImpl::m_chromeClientImpl, so you should figure out a way to access it directly and make sure it isn&apos;t null here
&gt; Done -- I&apos;ve made a graphicsLayerFactory accessor on WebViewImpl.

The changes I made in the latest patch seemed non-trivial enough to warrant another r?.  Could you please take another look when you have a chance, James?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807893</commentid>
    <comment_count>5</comment_count>
      <attachid>181304</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-15 18:22:42 -0800</bug_when>
    <thetext>Comment on attachment 181304
Patch

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

Still r=me but still needs some cleanup

&gt; Source/WebKit/chromium/src/NonCompositedContentHost.cpp:36
&gt; +#include &quot;Chrome.h&quot;
&gt;  #include &quot;FloatPoint.h&quot;
&gt;  #include &quot;FloatRect.h&quot;
&gt;  #include &quot;GraphicsLayer.h&quot;
&gt;  #include &quot;GraphicsLayerChromium.h&quot;
&gt; +#include &quot;GraphicsLayerFactory.h&quot;
&gt; +#include &quot;Page.h&quot;

please trim includes - i don&apos;t think you need any of these new includes, just a forward declaration of WebCore::GraphicsLayerFactory somewhere

&gt; Source/WebKit/chromium/src/NonCompositedContentHost.h:68
&gt; +    explicit NonCompositedContentHost(WebViewImpl*, WebCore::GraphicsLayerFactory*);

no explicit for 2-argument constructors

&gt; Source/WebKit/chromium/src/PageOverlay.cpp:32
&gt; +#include &quot;Chrome.h&quot;

trim unnecessary include

&gt; Source/WebKit/chromium/src/WebViewImpl.cpp:4035
&gt; +        m_nonCompositedContentHost = NonCompositedContentHost::create(this, m_chromeClientImpl.graphicsLayerFactory());

since you&apos;ve added the WebViewImpl::graphicsLayerFactory() getter, i&apos;d use that here as well</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807992</commentid>
    <comment_count>6</comment_count>
      <attachid>182912</attachid>
    <who name="">vollick</who>
    <bug_when>2013-01-15 20:04:28 -0800</bug_when>
    <thetext>Created attachment 182912
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808008</commentid>
    <comment_count>7</comment_count>
      <attachid>182912</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-15 20:37:58 -0800</bug_when>
    <thetext>Comment on attachment 182912
Patch for landing

Clearing flags on attachment: 182912

Committed r139829: &lt;http://trac.webkit.org/changeset/139829&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808009</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-15 20:38:01 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176721</attachid>
            <date>2012-11-29 07:02:30 -0800</date>
            <delta_ts>2013-01-04 08:20:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103635-20121129100003.patch</filename>
            <type>text/plain</type>
            <size>10666</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1ODkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmVkNjI5MTNlMWMxOGI0
ZmI2OWEzNjk2NDM5ODYxNDEzMWRjZmMwOS4uODkxMTc3YTNjNGZmOTk1NTI5YTQ0NGYxZDJiYjBi
MGExMjExODhlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTExLTI5ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bXMgdXNpbmcgYSBmYWN0b3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2MzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBncmFwaGljcyBsYXll
ciBjcmVhdGlvbiBmb3IgY2hyb21pdW0gdG8gZ28gdGhyb3VnaCBhIGZhY3RvcnkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpjcmVhdGUpOgorCiAyMDEyLTExLTI3ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEhUTUxDb2xsZWN0aW9u
IG9uIERvY3VtZW50IHNob3VsZCBiZSBzdG9yZWQgb24gTm9kZUxpc3RzTm9kZURhdGEgbGlrZSBv
dGhlciBIVE1MQ29sbGVjdGlvbnMgYW5kIExpdmVOb2RlTGlzdHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggYWVjYjEyODU5NmRlZWM4NWRhODYzY2Q1MDI2YjFiZTVhY2RlYzMxNy4uOTI0
MTIwN2ZjYzgxOWE2YjEyMjk1ZDhjZGJhZDg0MmZhOTU4MzA0ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0xMS0yOSAgSWFuIFZvbGxpY2sgIDx2b2xs
aWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBHcmFwaGljc0xh
eWVyQ2hyb21pdW1zIHVzaW5nIGEgZmFjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgZ3JhcGhpY3MgbGF5ZXIgY3JlYXRpb24gZm9y
IGNocm9taXVtIHRvIGdvIHRocm91Z2ggYSBmYWN0b3J5LgorCisgICAgICAgICogc3JjL0Nocm9t
ZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChHcmFwaGljc0xh
eWVyRmFjdG9yeUNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0
b3J5Q2hyb21pdW06On5HcmFwaGljc0xheWVyRmFjdG9yeUNocm9taXVtKToKKyAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6Q2hyb21lQ2xpZW50SW1wbCk6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpncmFwaGljc0xheWVyRmFj
dG9yeSk6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoQ2hyb21lQ2xpZW50SW1wbCk6CisgICAgICAgICogc3JjL05vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KToKKyAgICAgICAgKiBzcmMvUGFnZU92
ZXJsYXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6dXBkYXRlKToKKyAgICAg
ICAgKiB0ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6R3JhcGhpY3NMYXllckNocm9taXVtVGVzdDo6R3JhcGhpY3NMYXllckNocm9taXVtVGVzdCk6
CisgICAgICAgICogdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpURVNUKToKKwogMjAxMi0xMS0yNyAgRWJlcmhhcmQgR3JhZXRoZXIgIDxlZ3JhZXRo
ZXJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBQbHVtYmluZyBzaG93UGFpbnRSZWN0cyBvdXQgb2Yg
SW5zcGVjdG9yUGFnZUFnZW50IHRvIHVzZSBhIGRpZmZlcmVudCBkcmF3aW5nIGltcGxlbWVudGF0
aW9uIGlmIGF2YWlsYWJsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDhhMGFmMTUzMDc0ZTY3Mjk2MzYyMWE0MDA5ODIwY2ZmYzNhZjU2YmEuLjdmYmFiNTM3MDUw
OWM0M2JjNjVkOTI1N2IzOTZmMzM4YzUyOGYyODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXll
ckNocm9taXVtLmNwcApAQCAtODMsMTQgKzgzLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFBh
c3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5
ZXJGYWN0b3J5KiBmYWN0b3J5LCBHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiB7CiAgICAg
aWYgKCFmYWN0b3J5KQotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bShjbGllbnQpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICBy
ZXR1cm4gZmFjdG9yeS0+Y3JlYXRlR3JhcGhpY3NMYXllcihjbGllbnQpOwogfQogCiBQYXNzT3du
UHRyPEdyYXBoaWNzTGF5ZXI+IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShHcmFwaGljc0xheWVyQ2xp
ZW50KiBjbGllbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHcmFwaGljc0xheWVyQ2hy
b21pdW0oY2xpZW50KSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6R3JhcGhpY3NMYXllckNocm9taXVt
KEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAKaW5kZXggZTYxN2U4ZjVhYzE5MmY4NmQzZGYxYzI0
MmU4NmQwZGRhNGMyODBmZS4uNDNhYTU5N2Y4MGYyOGE5NWM0NGFmNWQ0NDE5MTk1NDgyNjkwMTNm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5j
cHAKQEAgLTU4LDcgKzU4LDggQEAKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKLSNpbmNsdWRlICJH
cmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNocm9taXVtLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NMYXllckZhY3RvcnkuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgpA
QCAtMTEyLDYgKzExMywyMCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorbmFtZXNw
YWNlIHsKKworY2xhc3MgR3JhcGhpY3NMYXllckZhY3RvcnlDaHJvbWl1bSA6IHB1YmxpYyBHcmFw
aGljc0xheWVyRmFjdG9yeSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+R3JhcGhpY3NMYXllckZh
Y3RvcnlDaHJvbWl1bSgpIHsgfQorCisgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzTGF5
ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KSBPVkVS
UklERQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBHcmFwaGljc0xheWVyQ2hy
b21pdW0oY2xpZW50KSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIC8vIENvbnZlcnRzIGEgV2ViQ29yZTo6UG9wdXBDb250YWluZXJUeXBlIHRv
IGEgV2ViS2l0OjpXZWJQb3B1cFR5cGUuCkBAIC0xNDYsNiArMTYxLDkgQEAgQ2hyb21lQ2xpZW50
SW1wbDo6Q2hyb21lQ2xpZW50SW1wbChXZWJWaWV3SW1wbCogd2ViVmlldykKICNpZiBFTkFCTEUo
UEFHRV9QT1BVUCkKICAgICAsIG1fcGFnZVBvcHVwRHJpdmVyKHdlYlZpZXcpCiAjZW5kaWYKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLCBtX2dyYXBoaWNzTGF5ZXJGYWN0
b3J5KGFkb3B0UHRyKG5ldyBHcmFwaGljc0xheWVyRmFjdG9yeUNocm9taXVtKSkKKyNlbmRpZgog
ewogfQogCkBAIC05NDQsNiArOTYyLDEyIEBAIENocm9tZUNsaWVudDo6Q29tcG9zaXRpbmdUcmln
Z2VyRmxhZ3MgQ2hyb21lQ2xpZW50SW1wbDo6YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlCiAKICAg
ICByZXR1cm4gZmxhZ3M7CiB9CisKK0dyYXBoaWNzTGF5ZXJGYWN0b3J5KiBDaHJvbWVDbGllbnRJ
bXBsOjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ3JhcGhp
Y3NMYXllckZhY3RvcnkuZ2V0KCk7Cit9CisKICNlbmRpZgogCiBib29sIENocm9tZUNsaWVudElt
cGw6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaAppbmRleCA3NzA4NGY4MDEw
MmY2MjM3YjY3ODJkYzhiNjBmY2MyY2UyNjY5NTIwLi5mOTE3M2MzM2VkMDljY2Q2NzFkNWNkMTcy
YTA4YWVmMDI5YTg4YWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9D
aHJvbWVDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21l
Q2xpZW50SW1wbC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51
LmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlvblBvbGljeS5oIgogI2luY2x1ZGUgPHB1YmxpYy9X
ZWJDb2xvci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw2ICs0Nyw4IEBAIGNsYXNzIENv
bG9yQ2hvb3NlcjsKIGNsYXNzIENvbG9yQ2hvb3NlckNsaWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBj
bGFzcyBGaWxlQ2hvb3NlcjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJDbGllbnQ7CitjbGFzcyBHcmFw
aGljc0xheWVyRmFjdG9yeTsKIGNsYXNzIFBvcHVwQ29udGFpbmVyOwogY2xhc3MgUG9wdXBNZW51
Q2xpZW50OwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMTc1LDYgKzE3OCwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoKCk7CiAKICAgICB2
aXJ0dWFsIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJz
KCkgY29uc3Q7CisKKyAgICAvLyBBbGxvd3MgdXMgdG8gY3JlYXRlIG91ciBncmFwaGljcyBsYXll
cnMgaG93ZXZlciB3ZSB3aXNoLCB3aXRoIHdoYXRldmVyCisgICAgLy8gcGFyYW1ldGVycyB3ZSBs
aWtlLgorICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNz
TGF5ZXJGYWN0b3J5KCkgY29uc3QgT1ZFUlJJREU7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0Z1bGxzY3JlZW5Gb3JOb2RlKGNvbnN0IFdlYkNvcmU6Ok5vZGUqKTsKQEAgLTI0
NCw2ICsyNTEsMTAgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoUEFHRV9QT1BVUCkKICAgICBXZWJD
b3JlOjpQYWdlUG9wdXBEcml2ZXIqIG1fcGFnZVBvcHVwRHJpdmVyOwogI2VuZGlmCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJGYWN0b3J5PiBtX2dyYXBoaWNzTGF5ZXJGYWN0b3J5OworI2VuZGlmCiB9OwogCiBjbGFz
cyBOYXZpZ2F0b3JDb250ZW50VXRpbHNDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6Ok5hdmln
YXRvckNvbnRlbnRVdGlsc0NsaWVudCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcAppbmRleCAwNWE0YzE1ZDk2YjU4
MDRhZGQ1NzBlZTFhMjZiOGFmOGRlNDNlN2UzLi5mNGU3NzI2ZmFiN2UxZDkzOTRhNzk0NjNlZWI4
YjA3NGZlNmYwMGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25D
b21wb3NpdGVkQ29udGVudEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAKQEAgLTI3LDEwICsyNywxMyBAQAogCiAjaW5j
bHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCiAKKyNpbmNsdWRlICJDaHJvbWUuaCIK
ICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIldlYlZpZXdJbXBsLmgiCkBAIC00Myw3ICs0NiwxMCBAQCBOb25Db21wb3NpdGVkQ29u
dGVudEhvc3Q6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChXZWJWaWV3SW1wbCogd2ViVmlldykK
ICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQogICAgICwgbV9zaG93RGVidWdCb3JkZXJzKGZhbHNl
KQogewotICAgIG1fZ3JhcGhpY3NMYXllciA9IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZSgwLCB0aGlzKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NM
YXllckZhY3RvcnkgPSAwOworICAgIGlmIChXZWJDb3JlOjpQYWdlKiBwYWdlID0gbV93ZWJWaWV3
LT5wYWdlKCkpCisgICAgICAgIGdyYXBoaWNzTGF5ZXJGYWN0b3J5ID0gcGFnZS0+Y2hyb21lKCkt
PmNsaWVudCgpLT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOworICAgIG1fZ3JhcGhpY3NMYXllciA9
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSwgdGhp
cyk7CiAjaWZuZGVmIE5ERUJVRwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmFtZSgibm9uLWNv
bXBvc2l0ZWQgY29udGVudCIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Q
YWdlT3ZlcmxheS5jcHAKaW5kZXggYzk1Njg3YWY2M2Q1ZGNiODA3ZDJmN2Y1ZmMwNDdiZTQ3NDM5
MmY3OC4uOTQxMzAwOGIzOTQ4N2MzMDk3NTViYmMzNDYxOWE0NDg4YmFlZTQ4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcApAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAKKyNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNsaWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTEyNiw3ICsxMjcsMTIgQEAg
dm9pZCBQYWdlT3ZlcmxheTo6dXBkYXRlKCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgaWYgKCFtX2xheWVyKSB7CiAgICAgICAgIG1fbGF5ZXJDbGllbnQgPSBPdmVybGF5
R3JhcGhpY3NMYXllckNsaWVudEltcGw6OmNyZWF0ZShtX3ZpZXdJbXBsLCBtX292ZXJsYXkpOwot
ICAgICAgICBtX2xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG1fbGF5ZXJDbGllbnQuZ2V0
KCkpOworCisgICAgICAgIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9y
eSA9IDA7CisgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV92aWV3SW1wbC0+cGFnZSgpKQorICAg
ICAgICAgICAgZ3JhcGhpY3NMYXllckZhY3RvcnkgPSBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCk7CisKKyAgICAgICAgbV9sYXllciA9IEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZShncmFwaGljc0xheWVyRmFjdG9yeSwgbV9sYXllckNsaWVudC5nZXQoKSk7CiAg
ICAgICAgIG1fbGF5ZXItPnNldE5hbWUoIldlYlZpZXdJbXBsIHBhZ2Ugb3ZlcmxheSBjb250ZW50
Iik7CiAgICAgICAgIG1fbGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1
bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hy
b21pdW1UZXN0LmNwcAppbmRleCA3ZDljMmVjOGNhY2UwNTMxOThhMjk5YjU0ODBlMWVkNzdjMzE5
YTEyLi40NGFmNWY1ZmQzNzMzY2EzOGU1YTZiOTFlMWMwMDlmYzkwODFjZjYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9t
aXVtVGVzdC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bVRlc3QoKQogICAgIHsKICAgICAgICAgUGxhdGZvcm06OmN1cnJlbnQoKS0+Y29tcG9z
aXRvclN1cHBvcnQoKS0+aW5pdGlhbGl6ZSgwKTsKLSAgICAgICAgbV9ncmFwaGljc0xheWVyID0g
c3RhdGljX3BvaW50ZXJfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6
OmNyZWF0ZSgmbV9jbGllbnQpKTsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyID0gYWRvcHRQdHIo
bmV3IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSgmbV9jbGllbnQpKTsKICAgICAgICAgbV9wbGF0Zm9y
bUxheWVyID0gbV9ncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgICAgIG1fbGF5
ZXJUcmVlVmlldyA9IGFkb3B0UHRyKFBsYXRmb3JtOjpjdXJyZW50KCktPmNvbXBvc2l0b3JTdXBw
b3J0KCktPmNyZWF0ZUxheWVyVHJlZVZpZXcoJm1fbGF5ZXJUcmVlVmlld0NsaWVudCwgKm1fcGxh
dGZvcm1MYXllciwgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MoKSkpOwogICAgICAgICBtX2xh
eWVyVHJlZVZpZXctPnNldFZpZXdwb3J0U2l6ZShXZWJTaXplKDEsIDEpLCBXZWJTaXplKDEsIDEp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNo
cm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCmluZGV4IDc0YzJmMTY2OWE0NTQzMjRiNWUzNGY5ZmYwNTMxZDgzNDBh
NDhjODYuLjBmYTE3MmQ5MDRhMTNiYzkxZWI3YTUzMDU0OTZiZDdmZGI3MjRkYzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1U
ZXN0LmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHByaXZhdGU6CiBURVNUKEltYWdlTGF5ZXJDaHJv
bWl1bVRlc3QsIG9wYXF1ZUltYWdlcykKIHsKICAgICBNb2NrR3JhcGhpY3NMYXllckNsaWVudCBj
bGllbnQ7Ci0gICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4gZ3JhcGhpY3NMYXllciA9
IHN0YXRpY19wb2ludGVyX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtPihHcmFwaGljc0xheWVy
OjpjcmVhdGUoJmNsaWVudCkpOworICAgIE93blB0cjxHcmFwaGljc0xheWVyQ2hyb21pdW0+IGdy
YXBoaWNzTGF5ZXIgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NMYXllckNocm9taXVtKCZjbGllbnQp
KTsKICAgICBBU1NFUlRfVFJVRShncmFwaGljc0xheWVyLmdldCgpKTsKIAogICAgIFJlZlB0cjxJ
bWFnZT4gb3BhcXVlSW1hZ2UgPSBUZXN0SW1hZ2U6OmNyZWF0ZShJbnRTaXplKDEwMCwgMTAwKSwg
dHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181304</attachid>
            <date>2013-01-04 08:20:34 -0800</date>
            <delta_ts>2013-01-15 20:04:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103635-20130104111740.patch</filename>
            <type>text/plain</type>
            <size>14182</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWQyNDA1ZjY5YjQ1ZmJm
MzQwOGY4YmU0ZWZjYmM3MzViMjJiMTI4NS4uYWRlYmE0ZjU1ZDAwMTEwYmY5MTkxNDFhMjJjYjY1
Njc2YTRlYjcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEzLTAxLTA0ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bXMgdXNpbmcgYSBmYWN0b3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2MzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBncmFwaGljcyBsYXll
ciBjcmVhdGlvbiBmb3IgY2hyb21pdW0gdG8gZ28gdGhyb3VnaCBhIGZhY3RvcnkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpjcmVhdGUpOgorCiAyMDEzLTAxLTAzICBN
aWtlIFdlc3QgIDxta3dzdEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVGhlICdib2R5JyBvZiBz
ZWFtbGVzcyBJRnJhbWVzIHNob3VsZCBkZWZhdWx0IHRvICdtYXJnaW46IDAnCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IGJhMzJiYjA4MzhkNWI2ZDJmMjFkNzA3Yjc0NTAxMDkzNDI3MGIz
YjMuLjQ1M2E5YWE0NTM3ZDg0OTQyMDMzMDdjMmE4MzM0NjRkMzA4YWNmZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTMtMDEtMDQgIElhbiBWb2xsaWNr
ICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDcmVhdGUgR3Jh
cGhpY3NMYXllckNocm9taXVtcyB1c2luZyBhIGZhY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzYzNQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIGdyYXBoaWNzIGxheWVyIGNyZWF0
aW9uIGZvciBjaHJvbWl1bSB0byBnbyB0aHJvdWdoIGEgZmFjdG9yeS4KKworICAgICAgICAqIHNy
Yy9DaHJvbWVDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR3Jh
cGhpY3NMYXllckZhY3RvcnlDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyRmFjdG9yeUNocm9taXVtOjp+R3JhcGhpY3NMYXllckZhY3RvcnlDaHJvbWl1bSk6CisgICAg
ICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OkNocm9tZUNsaWVudEltcGwpOgorICAgICAg
ICAoV2ViS2l0OjpDaHJvbWVDbGllbnRJbXBsOjpncmFwaGljc0xheWVyRmFjdG9yeSk6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9DaHJvbWVDbGllbnRJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENocm9tZUNsaWVudEltcGwpOgorICAgICAgICAqIHNyYy9O
b25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpOb25Db21wb3Np
dGVkQ29udGVudEhvc3Q6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCk6CisgICAgICAgICogc3Jj
L05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKE5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCk6CisgICAgICAgICogc3JjL1BhZ2VPdmVybGF5LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UGFnZU92ZXJsYXk6OnVwZGF0ZSk6CisgICAgICAgICogc3JjL1dl
YlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmdyYXBoaWNzTGF5
ZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJWaWV3SW1wbCk6
CisgICAgICAgICogdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3Q6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1
bVRlc3QpOgorICAgICAgICAqIHRlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTMtMDEtMDIgIEtlbm5ldGggUnVzc2VsbCAgPGti
ckBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRpb24gb2YgZGVkaWNhdGVk
IHdvcmtlcnMgKGlzb2xhdGVzKSBsZWFrcyByZWZlcmVuY2UgdG8gSFRNTERvY3VtZW50CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGlj
c0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcAppbmRleCA1NDlhZmI1NzYzZTYxYWI3NjA0
MTc5Y2IzYzA1NjcxNGI2YzI5ZWU0Li4yNTM4N2EyMjBlZGZiZTVmMGFmMmJhYWU0M2IwMDgyZjk3
ZTdjMmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTg0LDE1
ICs4NCwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NPd25QdHI8R3JhcGhpY3NMYXll
cj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBmYWN0b3J5LCBH
cmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgaWYgKCFmYWN0b3J5KQotICAgICAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bShjbGllbnQpKTsKLQog
ICAgIHJldHVybiBmYWN0b3J5LT5jcmVhdGVHcmFwaGljc0xheWVyKGNsaWVudCk7CiB9CiAKIFBh
c3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKEdyYXBoaWNzTGF5
ZXJDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bShjbGllbnQpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogR3JhcGhpY3NMYXllckNocm9taXVtOjpHcmFwaGljc0xheWVyQ2hy
b21pdW0oR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcAppbmRleCAyMWRiZjQwMzlhZWI1NmU5N2Qy
NzRjMjNhYjQ0N2UxZjkxNmU1YjIyLi5lOWNlZjQ2N2ZhMDYwNjQ5MDA5OTNiZWY4YjY4NTQ1ZTg1
MGRkM2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGll
bnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJ
bXBsLmNwcApAQCAtNTcsNyArNTcsOCBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJHcmFwaGljc0xheWVyRmFjdG9yeS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCkBAIC0xMTEsNiArMTEyLDIwIEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitu
YW1lc3BhY2UgeworCitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeUNocm9taXVtIDogcHVibGlj
IEdyYXBoaWNzTGF5ZXJGYWN0b3J5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0xh
eWVyRmFjdG9yeUNocm9taXVtKCkgeyB9CisKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhp
Y3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQp
IE9WRVJSSURFCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bShjbGllbnQpKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZQorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogLy8gQ29udmVydHMgYSBXZWJDb3JlOjpQb3B1cENvbnRhaW5lclR5
cGUgdG8gYSBXZWJLaXQ6OldlYlBvcHVwVHlwZS4KQEAgLTE0NSw2ICsxNjAsOSBAQCBDaHJvbWVD
bGllbnRJbXBsOjpDaHJvbWVDbGllbnRJbXBsKFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQogI2lmIEVO
QUJMRShQQUdFX1BPUFVQKQogICAgICwgbV9wYWdlUG9wdXBEcml2ZXIod2ViVmlldykKICNlbmRp
ZgorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAsIG1fZ3JhcGhpY3NMYXll
ckZhY3RvcnkoYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5ZXJGYWN0b3J5Q2hyb21pdW0pKQorI2Vu
ZGlmCiB7CiB9CiAKQEAgLTkxOCw2ICs5MzYsMTEgQEAgYm9vbCBDaHJvbWVDbGllbnRJbXBsOjpw
YWludEN1c3RvbU92ZXJoYW5nQXJlYShHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEkK
IH0KIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK0dyYXBoaWNzTGF5ZXJGYWN0
b3J5KiBDaHJvbWVDbGllbnRJbXBsOjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZ3JhcGhpY3NMYXllckZhY3RvcnkuZ2V0KCk7Cit9CisKIHZvaWQgQ2hyb21l
Q2xpZW50SW1wbDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1lLCBHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyKQogewogICAgIG1fd2ViVmlldy0+c2V0Um9vdEdyYXBoaWNz
TGF5ZXIoZ3JhcGhpY3NMYXllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWVDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWVDbGllbnRJbXBsLmgKaW5kZXggMDU1OWZkMzc3YzRhYzhjODY2NmE5OTA4ODczNDkxZDE5Y2M3
MmI2MS4uY2Q3MDg1OWQ2NjAxN2I3ODY5YTU0YTEyZTU0MzYxNjc5Y2EzMTQ3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApAQCAtMzgsNiArMzgs
NyBAQAogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogI2luY2x1ZGUgIldlYk5hdmlnYXRp
b25Qb2xpY3kuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViQ29sb3IuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDYsNiArNDcsNyBAQCBjbGFzcyBDb2xvckNob29zZXI7CiBjbGFzcyBDb2xvckNo
b29zZXJDbGllbnQ7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRmlsZUNob29zZXI7CitjbGFzcyBH
cmFwaGljc0xheWVyRmFjdG9yeTsKIGNsYXNzIFBvcHVwQ29udGFpbmVyOwogY2xhc3MgUG9wdXBN
ZW51Q2xpZW50OwogY2xhc3MgUmVuZGVyQm94OwpAQCAtMTYzLDYgKzE2NSw4IEBAIHB1YmxpYzoK
ICNlbmRpZgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29u
c3QgT1ZFUlJJREU7CisKICAgICAvLyBQYXNzIDAgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0
YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAKQEAgLTI0
NCw2ICsyNDgsMTAgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoUEFHRV9QT1BVUCkKICAgICBXZWJD
b3JlOjpQYWdlUG9wdXBEcml2ZXIqIG1fcGFnZVBvcHVwRHJpdmVyOwogI2VuZGlmCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJGYWN0b3J5PiBtX2dyYXBoaWNzTGF5ZXJGYWN0b3J5OworI2VuZGlmCiB9OwogCiBjbGFz
cyBOYXZpZ2F0b3JDb250ZW50VXRpbHNDbGllbnRJbXBsIDogcHVibGljIFdlYkNvcmU6Ok5hdmln
YXRvckNvbnRlbnRVdGlsc0NsaWVudCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcAppbmRleCAwNWE0YzE1ZDk2YjU4
MDRhZGQ1NzBlZTFhMjZiOGFmOGRlNDNlN2UzLi45ODQ1YmQ2MTJlNzEwZWNiZmQ3NTI2NzJhNDVm
NDhiY2ZmN2M4YjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25D
b21wb3NpdGVkQ29udGVudEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAKQEAgLTI3LDEwICsyNywxMyBAQAogCiAjaW5j
bHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCiAKKyNpbmNsdWRlICJDaHJvbWUuaCIK
ICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJGYWN0b3J5LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIldlYlZpZXdJbXBsLmgiCkBAIC0zOSwxMSArNDIsMTEgQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLU5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3KQorTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpOb25D
b21wb3NpdGVkQ29udGVudEhvc3QoV2ViVmlld0ltcGwqIHdlYlZpZXcsIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSkKICAgICA6IG1fd2ViVmlldyh3
ZWJWaWV3KQogICAgICwgbV9zaG93RGVidWdCb3JkZXJzKGZhbHNlKQogewotICAgIG1fZ3JhcGhp
Y3NMYXllciA9IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwLCB0aGlzKTsKKyAgICBt
X2dyYXBoaWNzTGF5ZXIgPSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpjcmVhdGUoZ3JhcGhpY3NM
YXllckZhY3RvcnksIHRoaXMpOwogI2lmbmRlZiBOREVCVUcKICAgICBtX2dyYXBoaWNzTGF5ZXIt
PnNldE5hbWUoIm5vbi1jb21wb3NpdGVkIGNvbnRlbnQiKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaAppbmRl
eCA2MDk1MzhhNmYzNDc4MjIzZjA4NmNmYmUxOGI0Zjk2MzU2MjMxZmFjLi42OTFmMDJmZmNjOWE2
M2RkOWYzN2E5MzZiMTYyMzNmM2RmZTQzNzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuaApAQCAtMzcsNiArMzcsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29sb3I7CiBjbGFzcyBHcmFwaGljc0xheWVy
OworY2xhc3MgR3JhcGhpY3NMYXllckZhY3Rvcnk7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBj
bGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFJlY3Q7CkBAIC00OCw5ICs0OSw5IEBAIGNsYXNzIFdl
YlZpZXdJbXBsOwogY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0IDogcHVibGljIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgewogV1RGX01BS0VfTk9OQ09QWUFCTEUoTm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxOb25Db21w
b3NpdGVkQ29udGVudEhvc3Q+IGNyZWF0ZShXZWJWaWV3SW1wbCogd2ViVmlldykKKyAgICBzdGF0
aWMgUGFzc093blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IGNyZWF0ZShXZWJWaWV3SW1w
bCogd2ViVmlldywgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJG
YWN0b3J5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb25Db21wb3NpdGVk
Q29udGVudEhvc3Qod2ViVmlldykpOworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE5vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdCh3ZWJWaWV3LCBncmFwaGljc0xheWVyRmFjdG9yeSkpOwogICAg
IH0KICAgICB2aXJ0dWFsIH5Ob25Db21wb3NpdGVkQ29udGVudEhvc3QoKTsKIApAQCAtNjQsNyAr
NjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaG93RGVidWdCb3JkZXJzKGJvb2wpOwogCiBw
cm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KFdlYlZpZXdJ
bXBsKik7CisgICAgZXhwbGljaXQgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KFdlYlZpZXdJbXBs
KiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqKTsKIAogcHJpdmF0ZToKICAgICAvLyBH
cmFwaGljc0xheWVyQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9QYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdlT3Zlcmxh
eS5jcHAKaW5kZXggYzk1Njg3YWY2M2Q1ZGNiODA3ZDJmN2Y1ZmMwNDdiZTQ3NDM5MmY3OC4uMjlj
NTIwMDE1YzRlYmVjNzBiODhjNzMxMmE3M2Y2NjMzNjQyNGVlMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1BhZ2VPdmVybGF5LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAKKyNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNs
aWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTEyNiw3ICsxMjcsNyBAQCB2b2lkIFBhZ2VP
dmVybGF5Ojp1cGRhdGUoKQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBp
ZiAoIW1fbGF5ZXIpIHsKICAgICAgICAgbV9sYXllckNsaWVudCA9IE92ZXJsYXlHcmFwaGljc0xh
eWVyQ2xpZW50SW1wbDo6Y3JlYXRlKG1fdmlld0ltcGwsIG1fb3ZlcmxheSk7Ci0gICAgICAgIG1f
bGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV9sYXllckNsaWVudC5nZXQoKSk7CisgICAg
ICAgIG1fbGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUobV92aWV3SW1wbC0+Z3JhcGhpY3NM
YXllckZhY3RvcnkoKSwgbV9sYXllckNsaWVudC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXItPnNl
dE5hbWUoIldlYlZpZXdJbXBsIHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CiAgICAgICAgIG1fbGF5
ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggYTA1YzJmMDI0ZjQ1Nzk3YzZhN2EwNmY5OTVjZWY1
OWI2NTRlOWI2My4uMDQ5ZmRiNmEzNGM4MDgzNWM2MjdhMWEwZmUyZjUxYTIwZjdlMjUyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzk0NCw2ICsz
OTQ0LDExIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJD
b3JlOjpDb2xvciYgY29sb3IpCiAgICAgbV9sYXllclRyZWVWaWV3LT5zZXRCYWNrZ3JvdW5kQ29s
b3Iod2ViRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IpOwogfQogCitXZWJDb3JlOjpHcmFwaGljc0xh
eWVyRmFjdG9yeSogV2ViVmlld0ltcGw6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jaHJvbWVDbGllbnRJbXBsLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCk7Cit9
CisKIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIFdlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXll
cigpCiB7CiAgICAgcmV0dXJuIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CkBAIC00MDI3LDcgKzQwMzIs
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUo
Ym9vbCBhY3RpdmUpCiAgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5kZWZhdWx0VGlsZVNp
emUgPSBzZXR0aW5nc0ltcGwoKS0+ZGVmYXVsdFRpbGVTaXplKCk7CiAgICAgICAgIGxheWVyVHJl
ZVZpZXdTZXR0aW5ncy5tYXhVbnRpbGVkTGF5ZXJTaXplID0gc2V0dGluZ3NJbXBsKCktPm1heFVu
dGlsZWRMYXllclNpemUoKTsKIAotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA9
IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKHRo
aXMsIG1fY2hyb21lQ2xpZW50SW1wbC5ncmFwaGljc0xheWVyRmFjdG9yeSgpKTsKICAgICAgICAg
bV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnNldFNob3dEZWJ1Z0JvcmRlcnMocGFnZSgpLT5z
ZXR0aW5ncygpLT5zaG93RGVidWdCb3JkZXJzKCkpOwogICAgICAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdC0+c2V0T3BhcXVlKCFpc1RyYW5zcGFyZW50KCkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA0MjU5NTljMTg1YWMyYjY4M2UyMjZiZDRi
YzUyZDYyODI5MmFjODA4Li4yNWFkYzI0ODU3NzIxMWQxN2RiZGE4NTQ0Y2JlNjk3NzIwNmFlMjFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTY2LDYgKzY2
LDcgQEAgY2xhc3MgQ29sb3I7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEZyYW1lOwog
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBHcmFwaGljc0xheWVyRmFjdG9yeTsKIGNs
YXNzIEhpc3RvcnlJdGVtOwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNzIEtleWJvYXJkRXZl
bnQ7CkBAIC01NDAsNiArNTQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRSb290TGF5ZXIo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY29udGVu
dFJlY3QpOwogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0KCk7CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29s
b3ImKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZh
Y3RvcnkoKSBjb25zdDsKICNlbmRpZgogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRl
eCA3ZDljMmVjOGNhY2UwNTMxOThhMjk5YjU0ODBlMWVkNzdjMzE5YTEyLi40NGFmNWY1ZmQzNzMz
Y2EzOGU1YTZiOTFlMWMwMDlmYzkwODFjZjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTYw
LDcgKzYwLDcgQEAgcHVibGljOgogICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bVRlc3QoKQogICAg
IHsKICAgICAgICAgUGxhdGZvcm06OmN1cnJlbnQoKS0+Y29tcG9zaXRvclN1cHBvcnQoKS0+aW5p
dGlhbGl6ZSgwKTsKLSAgICAgICAgbV9ncmFwaGljc0xheWVyID0gc3RhdGljX3BvaW50ZXJfY2Fz
dDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgmbV9jbGllbnQp
KTsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bSgmbV9jbGllbnQpKTsKICAgICAgICAgbV9wbGF0Zm9ybUxheWVyID0gbV9ncmFwaGlj
c0xheWVyLT5wbGF0Zm9ybUxheWVyKCk7CiAgICAgICAgIG1fbGF5ZXJUcmVlVmlldyA9IGFkb3B0
UHRyKFBsYXRmb3JtOjpjdXJyZW50KCktPmNvbXBvc2l0b3JTdXBwb3J0KCktPmNyZWF0ZUxheWVy
VHJlZVZpZXcoJm1fbGF5ZXJUcmVlVmlld0NsaWVudCwgKm1fcGxhdGZvcm1MYXllciwgV2ViTGF5
ZXJUcmVlVmlldzo6U2V0dGluZ3MoKSkpOwogICAgICAgICBtX2xheWVyVHJlZVZpZXctPnNldFZp
ZXdwb3J0U2l6ZShXZWJTaXplKDEsIDEpLCBXZWJTaXplKDEsIDEpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmlu
ZGV4IDFhNmY5MDllYWJlYjk4NDk2N2IzMGE4YzNmMmI1NmQ3ZDBmZjQ2OWUuLmM4N2I3YWNmNjNl
NGM2NjkxNDZhMDcyNGJjOTgxYmQ1ZGYwM2I2ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtMTEwLDcg
KzExMCw3IEBAIHByaXZhdGU6CiBURVNUKEltYWdlTGF5ZXJDaHJvbWl1bVRlc3QsIG9wYXF1ZUlt
YWdlcykKIHsKICAgICBNb2NrR3JhcGhpY3NMYXllckNsaWVudCBjbGllbnQ7Ci0gICAgT3duUHRy
PEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4gZ3JhcGhpY3NMYXllciA9IHN0YXRpY19wb2ludGVyX2Nh
c3Q8R3JhcGhpY3NMYXllckNocm9taXVtPihHcmFwaGljc0xheWVyOjpjcmVhdGUoJmNsaWVudCkp
OworICAgIE93blB0cjxHcmFwaGljc0xheWVyQ2hyb21pdW0+IGdyYXBoaWNzTGF5ZXIgPSBhZG9w
dFB0cihuZXcgR3JhcGhpY3NMYXllckNocm9taXVtKCZjbGllbnQpKTsKICAgICBBU1NFUlRfVFJV
RShncmFwaGljc0xheWVyLmdldCgpKTsKIAogICAgIFJlZlB0cjxJbWFnZT4gb3BhcXVlSW1hZ2Ug
PSBUZXN0SW1hZ2U6OmNyZWF0ZShJbnRTaXplKDEwMCwgMTAwKSwgdHJ1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182912</attachid>
            <date>2013-01-15 20:04:28 -0800</date>
            <delta_ts>2013-01-15 20:37:57 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-103635-20130115230130.patch</filename>
            <type>text/plain</type>
            <size>13696</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGNjYjhhYTdkZmFlNDc3
MGJmNWFjOWNhYThkZDhhZDA5NDVmNDRiMy4uOWM5YjNiY2JlY2E5YTg4OTJmZmQ0ZmE5YmVhNTI3
MGU1MmU5Y2Q1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEzLTAxLTA0ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3Jl
YXRlIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bXMgdXNpbmcgYSBmYWN0b3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDM2MzUKKworICAgICAgICBSZXZp
ZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKworICAgICAgICBSZWZhY3RvciBncmFwaGljcyBsYXll
ciBjcmVhdGlvbiBmb3IgY2hyb21pdW0gdG8gZ28gdGhyb3VnaCBhIGZhY3RvcnkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBubyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpjcmVhdGUpOgorCiAyMDEzLTAxLTE1ICBB
bmRyZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiByZWZhY3RvciBEZWZhdWx0VGV4dEVkaXRvcidzIHBhaW50TGluZSBtZXRob2QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMGIzYzI3MGVhMDc0N2U1YjRmMDFhMjNkY2M0
MTgyMTgwMjBlYTRhNy4uZjNjZmFiZWY3ZTQwZjFhNDZlOWU0OWRkMWMyM2E3NWMxYjU4ZmY1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMy0wMS0wNCAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENyZWF0ZSBHcmFwaGljc0xheWVyQ2hyb21pdW1zIHVzaW5nIGEgZmFjdG9yeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNjM1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgUmVmYWN0b3IgZ3JhcGhpY3Mg
bGF5ZXIgY3JlYXRpb24gZm9yIGNocm9taXVtIHRvIGdvIHRocm91Z2ggYSBmYWN0b3J5LgorCisg
ICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChHcmFwaGljc0xheWVyRmFjdG9yeUNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJGYWN0b3J5Q2hyb21pdW06On5HcmFwaGljc0xheWVyRmFjdG9yeUNocm9t
aXVtKToKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50SW1wbDo6Q2hyb21lQ2xpZW50SW1w
bCk6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudEltcGw6OmdyYXBoaWNzTGF5ZXJGYWN0
b3J5KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL0Nocm9tZUNsaWVudEltcGwu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ2hyb21lQ2xpZW50SW1wbCk6CisgICAg
ICAgICogc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KToKKyAg
ICAgICAgKiBzcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0Lmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYktpdDo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpjcmVhdGUpOgor
ICAgICAgICAoTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KToKKyAgICAgICAgKiBzcmMvUGFnZU92
ZXJsYXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlT3ZlcmxheTo6dXBkYXRlKToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
Z3JhcGhpY3NMYXllckZhY3RvcnkpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAg
ICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YlZpZXdJbXBsKToKKyAgICAgICAgKiB0ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6R3JhcGhpY3NMYXllckNocm9taXVtVGVzdDo6R3JhcGhpY3NM
YXllckNocm9taXVtVGVzdCk6CisgICAgICAgICogdGVzdHMvSW1hZ2VMYXllckNocm9taXVtVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0xMi0yOCAgVnNldm9sb2Qg
Vmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBT
dXBwb3J0IGluc3BlY3RvciBmaWxlIHN5c3RlbSBhY2Nlc3Mgd2l0aCBpc29sYXRlZCBmaWxlIHN5
c3RlbSB0aHJvdWdoIEluc3BlY3RvckZyb250ZW5kSG9zdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDU0OWFmYjU3NjNlNjFhYjc2MDQxNzljYjNjMDU2NzE0YjZj
MjllZTQuLjI1Mzg3YTIyMGVkZmJlNWYwYWYyYmFhZTQzYjAwODJmOTdlN2MyZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR3JhcGhpY3NMYXllckNocm9taXVtLmNwcApAQCAtODQsMTUgKzg0LDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVy
OjpjcmVhdGUoR3JhcGhpY3NMYXllckZhY3RvcnkqIGZhY3RvcnksIEdyYXBoaWNzTGF5ZXJDbGll
bnQqIGNsaWVudCkKIHsKLSAgICBpZiAoIWZhY3RvcnkpCi0gICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgR3JhcGhpY3NMYXllckNocm9taXVtKGNsaWVudCkpOwotCiAgICAgcmV0dXJuIGZhY3Rv
cnktPmNyZWF0ZUdyYXBoaWNzTGF5ZXIoY2xpZW50KTsKIH0KIAogUGFzc093blB0cjxHcmFwaGlj
c0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVhdGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50
KQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgR3JhcGhpY3NMYXllckNocm9taXVtKGNsaWVu
dCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiBHcmFwaGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2xpZW50KiBjbGllbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9t
ZUNsaWVudEltcGwuY3BwCmluZGV4IGY0YzhmNTIwODU2YWE5M2NiYjcxM2QyNTEyMGNjMWVhNWRm
NTk1MzEuLjIyN2ZlZTc3NWU5MzM1ODI3YzlhYTY0YTgxMWUxYTFkMDk3ZjQwNjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC01Nyw3
ICs1Nyw4IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTExMSw2ICsx
MTIsMjAgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK25hbWVzcGFjZSB7CisKK2Ns
YXNzIEdyYXBoaWNzTGF5ZXJGYWN0b3J5Q2hyb21pdW0gOiBwdWJsaWMgR3JhcGhpY3NMYXllckZh
Y3RvcnkgeworcHVibGljOgorICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJGYWN0b3J5Q2hyb21p
dW0oKSB7IH0KKworICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBjcmVhdGVH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkgT1ZFUlJJREUKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgR3JhcGhpY3NMYXllckNocm9taXVtKGNsaWVu
dCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlCisKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiAvLyBDb252ZXJ0cyBhIFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyVHlwZSB0byBhIFdlYktpdDo6
V2ViUG9wdXBUeXBlLgpAQCAtMTQ1LDYgKzE2MCw5IEBAIENocm9tZUNsaWVudEltcGw6OkNocm9t
ZUNsaWVudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXcpCiAjaWYgRU5BQkxFKFBBR0VfUE9QVVAp
CiAgICAgLCBtX3BhZ2VQb3B1cERyaXZlcih3ZWJWaWV3KQogI2VuZGlmCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorICAgICwgbV9ncmFwaGljc0xheWVyRmFjdG9yeShhZG9wdFB0
cihuZXcgR3JhcGhpY3NMYXllckZhY3RvcnlDaHJvbWl1bSkpCisjZW5kaWYKIHsKIH0KIApAQCAt
OTMyLDYgKzk1MCwxMSBAQCBib29sIENocm9tZUNsaWVudEltcGw6OnBhaW50Q3VzdG9tT3Zlcmhh
bmdBcmVhKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSQogfQogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorR3JhcGhpY3NMYXllckZhY3RvcnkqIENocm9tZUNsaWVu
dEltcGw6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ncmFw
aGljc0xheWVyRmFjdG9yeS5nZXQoKTsKK30KKwogdm9pZCBDaHJvbWVDbGllbnRJbXBsOjphdHRh
Y2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNz
TGF5ZXIpCiB7CiAgICAgbV93ZWJWaWV3LT5zZXRSb290R3JhcGhpY3NMYXllcihncmFwaGljc0xh
eWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVu
dEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuaApp
bmRleCBhNjk3ZDRjNjU4MDAzNjZlNzhlNzhiNzg3ZTFkNmY1NTBmY2EzMTllLi5kMmFkMTExN2Vj
YmE2MTU0NzA0OTExZDAxYzc5OTNmNmUyOWY5OWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ2hyb21lQ2xpZW50SW1wbC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
U2VhcmNoUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiV2ViTmF2aWdhdGlvblBvbGljeS5oIgogI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJDb2xvci5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw2ICs0
Nyw3IEBAIGNsYXNzIENvbG9yQ2hvb3NlcjsKIGNsYXNzIENvbG9yQ2hvb3NlckNsaWVudDsKIGNs
YXNzIEVsZW1lbnQ7CiBjbGFzcyBGaWxlQ2hvb3NlcjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJGYWN0
b3J5OwogY2xhc3MgUG9wdXBDb250YWluZXI7CiBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiBjbGFz
cyBSZW5kZXJCb3g7CkBAIC0xNjMsNiArMTY1LDggQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25zdCBPVkVSUklERTsKKwog
ICAgIC8vIFBhc3MgMCBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxh
eWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpG
cmFtZSosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKIApAQCAtMjQ0LDYgKzI0OCwxMCBAQCBw
cml2YXRlOgogI2lmIEVOQUJMRShQQUdFX1BPUFVQKQogICAgIFdlYkNvcmU6OlBhZ2VQb3B1cERy
aXZlciogbV9wYWdlUG9wdXBEcml2ZXI7CiAjZW5kaWYKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnk+IG1f
Z3JhcGhpY3NMYXllckZhY3Rvcnk7CisjZW5kaWYKIH07CiAKIGNsYXNzIE5hdmlnYXRvckNvbnRl
bnRVdGlsc0NsaWVudEltcGwgOiBwdWJsaWMgV2ViQ29yZTo6TmF2aWdhdG9yQ29udGVudFV0aWxz
Q2xpZW50IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Ob25Db21w
b3NpdGVkQ29udGVudEhvc3QuY3BwCmluZGV4IDQ4ZTJmYzEwZmI4Y2Q0YWEzMWQ1ZDM3MWFjZjI5
ZjI0NjBkZWZhNzIuLjlkMDdiNDQyNzhhYzU4NDVhMjU4ZDk2Yjk4YjMwYTI2N2IzMmNmNDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LmNwcApAQCAtMzksMTEgKzM5LDExIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1Ob25Db21wb3NpdGVkQ29udGVudEhvc3Q6Ok5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChXZWJW
aWV3SW1wbCogd2ViVmlldykKK05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Tm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0KFdlYlZpZXdJbXBsKiB3ZWJWaWV3LCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
RmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkpCiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykK
ICAgICAsIG1fc2hvd0RlYnVnQm9yZGVycyhmYWxzZSkKIHsKLSAgICBtX2dyYXBoaWNzTGF5ZXIg
PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpjcmVhdGUoMCwgdGhpcyk7CisgICAgbV9ncmFwaGlj
c0xheWVyID0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Y3JlYXRlKGdyYXBoaWNzTGF5ZXJGYWN0
b3J5LCB0aGlzKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgbV9ncmFwaGljc0xheWVyLT5zZXROYW1l
KCJub24tY29tcG9zaXRlZCBjb250ZW50Iik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgKaW5kZXggNjA5NTM4
YTZmMzQ3ODIyM2YwODZjZmJlMThiNGY5NjM1NjIzMWZhYy4uNjQ2N2NjNGJhNDI4OGFhYjYyZDQ1
MTQ0NGY1NzA0M2M0YmVlMGQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgKQEAgLTM3LDYgKzM3LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbG9yOwogY2xhc3MgR3JhcGhpY3NMYXllcjsKK2NsYXNz
IEdyYXBoaWNzTGF5ZXJGYWN0b3J5OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW50
UG9pbnQ7CiBjbGFzcyBJbnRSZWN0OwpAQCAtNDgsOSArNDksOSBAQCBjbGFzcyBXZWJWaWV3SW1w
bDsKIGNsYXNzIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2xpZW50IHsKIFdURl9NQUtFX05PTkNPUFlBQkxFKE5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Tm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0PiBjcmVhdGUoV2ViVmlld0ltcGwqIHdlYlZpZXcpCisgICAgc3RhdGljIFBhc3NP
d25QdHI8Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBjcmVhdGUoV2ViVmlld0ltcGwqIHdlYlZp
ZXcsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0KHdlYlZpZXcpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOb25Db21wb3NpdGVk
Q29udGVudEhvc3Qod2ViVmlldywgZ3JhcGhpY3NMYXllckZhY3RvcnkpKTsKICAgICB9CiAgICAg
dmlydHVhbCB+Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCk7CiAKQEAgLTY0LDcgKzY1LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0U2hvd0RlYnVnQm9yZGVycyhib29sKTsKIAogcHJvdGVjdGVk
OgotICAgIGV4cGxpY2l0IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChXZWJWaWV3SW1wbCopOwor
ICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChXZWJWaWV3SW1wbCosIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJGYWN0b3J5Kik7CiAKIHByaXZhdGU6CiAgICAgLy8gR3JhcGhpY3NMYXllckNsaWVu
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGFnZU92ZXJsYXkuY3BwCmluZGV4IGM5NTY4
N2FmNjNkNWRjYjgwN2QyZjdmNWZjMDQ3YmU0NzQzOTJmNzguLjk4MjNhYmJhOGNjYTQxNDUwZDkx
ZGNjYzc2N2YyNmYxY2Q1ZmY3MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1BhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QYWdl
T3ZlcmxheS5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFBhZ2VPdmVybGF5Ojp1cGRhdGUo
KQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAoIW1fbGF5ZXIpIHsK
ICAgICAgICAgbV9sYXllckNsaWVudCA9IE92ZXJsYXlHcmFwaGljc0xheWVyQ2xpZW50SW1wbDo6
Y3JlYXRlKG1fdmlld0ltcGwsIG1fb3ZlcmxheSk7Ci0gICAgICAgIG1fbGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUobV9sYXllckNsaWVudC5nZXQoKSk7CisgICAgICAgIG1fbGF5ZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUobV92aWV3SW1wbC0+Z3JhcGhpY3NMYXllckZhY3RvcnkoKSwg
bV9sYXllckNsaWVudC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXItPnNldE5hbWUoIldlYlZpZXdJ
bXBsIHBhZ2Ugb3ZlcmxheSBjb250ZW50Iik7CiAgICAgICAgIG1fbGF5ZXItPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAKaW5kZXggZGJiOGM4MTI0ZWY0OGU5MzBjYWNhYjdkNDI5MThkZGViOWY3OTc5Ny4uYjZj
NGQ4ZDMwZjVjZjYwNjI5Yjg3Yzg5YThmN2EzNzQ4MmRkNGU3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzk0Nyw2ICszOTQ3LDExIEBAIHZvaWQg
V2ViVmlld0ltcGw6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29s
b3IpCiAgICAgbV9sYXllclRyZWVWaWV3LT5zZXRCYWNrZ3JvdW5kQ29sb3Iod2ViRG9jdW1lbnRC
YWNrZ3JvdW5kQ29sb3IpOwogfQogCitXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSogV2Vi
Vmlld0ltcGw6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
aHJvbWVDbGllbnRJbXBsLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCk7Cit9CisKIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIFdlYlZpZXdJbXBsOjpyb290R3JhcGhpY3NMYXllcigpCiB7CiAgICAgcmV0
dXJuIG1fcm9vdEdyYXBoaWNzTGF5ZXI7CkBAIC00MDMwLDcgKzQwMzUsNyBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAg
ICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5kZWZhdWx0VGlsZVNpemUgPSBzZXR0aW5nc0lt
cGwoKS0+ZGVmYXVsdFRpbGVTaXplKCk7CiAgICAgICAgIGxheWVyVHJlZVZpZXdTZXR0aW5ncy5t
YXhVbnRpbGVkTGF5ZXJTaXplID0gc2V0dGluZ3NJbXBsKCktPm1heFVudGlsZWRMYXllclNpemUo
KTsKIAotICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCA9IE5vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdDo6Y3JlYXRlKHRoaXMpOworICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdCA9IE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKHRoaXMsIGdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCkpOwogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0U2hv
d0RlYnVnQm9yZGVycyhwYWdlKCktPnNldHRpbmdzKCktPnNob3dEZWJ1Z0JvcmRlcnMoKSk7CiAg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRPcGFxdWUoIWlzVHJhbnNwYXJl
bnQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGNl
YTU3NDhjNWE4ODdhMWY1NjhiM2VkNWVkMThhYTI3MDA2OTU1ZjEuLjQxNTQ5YThjNWYyNjlkNjgx
ZDVhN2Q4NjcwMTFhN2QwMGM2MDNlZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaApAQCAtNjgsNiArNjgsNyBAQCBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNz
IEZsb2F0U2l6ZTsKIGNsYXNzIEZyYW1lOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFz
cyBHcmFwaGljc0xheWVyRmFjdG9yeTsKIGNsYXNzIEhpc3RvcnlJdGVtOwogY2xhc3MgSGl0VGVz
dFJlc3VsdDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CkBAIC01NDMsNiArNTQ0LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgcGFpbnRSb290TGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgY29udGVudFJlY3QpOwogICAgIE5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCk7CiAgICAgdm9pZCBzZXRCYWNrZ3Jv
dW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyRmFjdG9yeSogZ3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25zdDsKICNlbmRpZgogI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9u
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5
ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HcmFwaGlj
c0xheWVyQ2hyb21pdW1UZXN0LmNwcAppbmRleCA3ZDljMmVjOGNhY2UwNTMxOThhMjk5YjU0ODBl
MWVkNzdjMzE5YTEyLi40NGFmNWY1ZmQzNzMzY2EzOGU1YTZiOTFlMWMwMDlmYzkwODFjZjYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dyYXBoaWNzTGF5ZXJDaHJv
bWl1bVRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR3JhcGhpY3NM
YXllckNocm9taXVtVGVzdC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bVRlc3QoKQogICAgIHsKICAgICAgICAgUGxhdGZvcm06OmN1cnJlbnQo
KS0+Y29tcG9zaXRvclN1cHBvcnQoKS0+aW5pdGlhbGl6ZSgwKTsKLSAgICAgICAgbV9ncmFwaGlj
c0xheWVyID0gc3RhdGljX3BvaW50ZXJfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0+KEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZSgmbV9jbGllbnQpKTsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyID0g
YWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSgmbV9jbGllbnQpKTsKICAgICAgICAg
bV9wbGF0Zm9ybUxheWVyID0gbV9ncmFwaGljc0xheWVyLT5wbGF0Zm9ybUxheWVyKCk7CiAgICAg
ICAgIG1fbGF5ZXJUcmVlVmlldyA9IGFkb3B0UHRyKFBsYXRmb3JtOjpjdXJyZW50KCktPmNvbXBv
c2l0b3JTdXBwb3J0KCktPmNyZWF0ZUxheWVyVHJlZVZpZXcoJm1fbGF5ZXJUcmVlVmlld0NsaWVu
dCwgKm1fcGxhdGZvcm1MYXllciwgV2ViTGF5ZXJUcmVlVmlldzo6U2V0dGluZ3MoKSkpOwogICAg
ICAgICBtX2xheWVyVHJlZVZpZXctPnNldFZpZXdwb3J0U2l6ZShXZWJTaXplKDEsIDEpLCBXZWJT
aXplKDEsIDEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1h
Z2VMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lt
YWdlTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IDFhNmY5MDllYWJlYjk4NDk2N2IzMGE4YzNm
MmI1NmQ3ZDBmZjQ2OWUuLmM4N2I3YWNmNjNlNGM2NjkxNDZhMDcyNGJjOTgxYmQ1ZGYwM2I2ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VMYXllckNocm9t
aXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUxheWVy
Q2hyb21pdW1UZXN0LmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHByaXZhdGU6CiBURVNUKEltYWdl
TGF5ZXJDaHJvbWl1bVRlc3QsIG9wYXF1ZUltYWdlcykKIHsKICAgICBNb2NrR3JhcGhpY3NMYXll
ckNsaWVudCBjbGllbnQ7Ci0gICAgT3duUHRyPEdyYXBoaWNzTGF5ZXJDaHJvbWl1bT4gZ3JhcGhp
Y3NMYXllciA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8R3JhcGhpY3NMYXllckNocm9taXVtPihHcmFw
aGljc0xheWVyOjpjcmVhdGUoJmNsaWVudCkpOworICAgIE93blB0cjxHcmFwaGljc0xheWVyQ2hy
b21pdW0+IGdyYXBoaWNzTGF5ZXIgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NMYXllckNocm9taXVt
KCZjbGllbnQpKTsKICAgICBBU1NFUlRfVFJVRShncmFwaGljc0xheWVyLmdldCgpKTsKIAogICAg
IFJlZlB0cjxJbWFnZT4gb3BhcXVlSW1hZ2UgPSBUZXN0SW1hZ2U6OmNyZWF0ZShJbnRTaXplKDEw
MCwgMTAwKSwgdHJ1ZSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>