<?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>107776</bug_id>
          
          <creation_ts>2013-01-23 19:43:42 -0800</creation_ts>
          <short_desc>[chromium] Allow the compositor&apos;s LayerTreeHostClient API to get the SharedGraphicsContext and bind GrContexts</short_desc>
          <delta_ts>2013-02-05 15:43:59 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>abarth</cc>
    
    <cc>backer</cc>
    
    <cc>ccameron</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>enne</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>814976</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-01-23 19:43:42 -0800</bug_when>
    <thetext>[chromium] Provide compositor offscreen context through the WebLayerTreeViewClient interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814980</commentid>
    <comment_count>1</comment_count>
      <attachid>184385</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-01-23 19:48:28 -0800</bug_when>
    <thetext>Created attachment 184385
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814981</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-23 19:50:51 -0800</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815585</commentid>
    <comment_count>3</comment_count>
      <attachid>184385</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-01-24 10:26:10 -0800</bug_when>
    <thetext>Comment on attachment 184385
Patch

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

I&apos;m probably not the best person to review this, since I get lost in Chromium&apos;s maze of twisty little GraphicsContext3D&apos;s (all different).

&gt; Source/Platform/chromium/public/WebGraphicsContext3D.h:480
&gt; +    WEBKIT_EXPORT GrContext* attachToGrContext();

Why is this now called &quot;attach&quot;?  It seems like it&apos;s still a get-or-create?  or create?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815587</commentid>
    <comment_count>4</comment_count>
      <attachid>184385</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-01-24 10:29:59 -0800</bug_when>
    <thetext>Comment on attachment 184385
Patch

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

&gt;&gt; Source/Platform/chromium/public/WebGraphicsContext3D.h:480
&gt;&gt; +    WEBKIT_EXPORT GrContext* attachToGrContext();
&gt; 
&gt; Why is this now called &quot;attach&quot;?  It seems like it&apos;s still a get-or-create?  or create?

I guess because the GrContext it creates is &quot;attached to&quot; the WGC3D ie draws into it. I&apos;d like something in the function name to denote that, maybe &quot;attach&quot; is a bad word?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816018</commentid>
    <comment_count>5</comment_count>
      <attachid>184385</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-01-24 17:18:54 -0800</bug_when>
    <thetext>Comment on attachment 184385
Patch

I&apos;m not really a fan of keeping the GrContext so tightly associated with the context.  That was a mistake with GraphicsContext3D and it&apos;s not going to get easier to deal with in the future, IMO.  I&apos;d rather do it like this:

1.) Add something like WGC3D::bindGrContext() to associate a GrContext with a WGC3D
2.) Add ownership of the main-thread GrContext somewhere in WebCore (if it&apos;s still off of GraphicsContext3DPrivate that&apos;s OK with me - at least that way it only impacts WebCore)
3.) Figure out who can own and provide a GrContext for the filter context.  I think it should be maintained completely outside of WebKit, even if WebKit still owns+operates the off-thread WGC3D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824984</commentid>
    <comment_count>6</comment_count>
      <attachid>186516</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-02-04 18:07:21 -0800</bug_when>
    <thetext>Created attachment 186516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824985</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-02-04 18:10:07 -0800</bug_when>
    <thetext>Here&apos;s an intermediate CL that:

1) Adds WEBKIT_EXPORT to WGC3D::createGrGLInterface() so we can call that from chromium land to create and bind a GrContext over there.

2) Lets us grab the impl thread context on the compositor&apos;s main thread and pass it over to the impl thread, in order to support the new WebLayerTreeViewClient API.

3) Add the WLTVClient API and have WebViewImpl implement it. The implementation of the methods for the compositor thread will move to RenderWidget later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825140</commentid>
    <comment_count>8</comment_count>
      <attachid>186516</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-02-04 22:10:52 -0800</bug_when>
    <thetext>Comment on attachment 186516
Patch

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

&gt; Source/Platform/chromium/public/WebGraphicsContext3D.h:475
&gt; +    WEBKIT_EXPORT GrGLInterface* createGrGLInterface();

this is weird to me. WebGraphicsContext3D is mostly a pure virtual interface that is implemented by the embedder and provided to WebKit, not the other way around.  For WEBKIT_EXPORT to make sense the definition of this function would have to exist inside WebKit.dll and the caller to this function would have to be outside.  Is that the structure you&apos;re trying to end up with?

&gt; Source/Platform/chromium/public/WebLayerTreeViewClient.h:76
&gt; +    virtual WebKit::WebGraphicsContext3D* createOrGetOffscreenContext3dForMainThread() { return 0; }

Normally &quot;create...&quot; functions return pointers to objects that are then owned by the caller.  That isn&apos;t the case for these, since  it&apos;s owned by the other side of the interface.  I think they should be named something other than &apos;create...&apos; and you should document the ownership rules in the header.

It&apos;s also a bit weird to me that these are on WebLayerTreeViewClient since they don&apos;t have anything to do with the specific WebLayerTreeView instance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825145</commentid>
    <comment_count>9</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-02-04 22:20:35 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 186516 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186516&amp;action=review
&gt; 
&gt; &gt; Source/Platform/chromium/public/WebGraphicsContext3D.h:475
&gt; &gt; +    WEBKIT_EXPORT GrGLInterface* createGrGLInterface();
&gt; 
&gt; this is weird to me. WebGraphicsContext3D is mostly a pure virtual interface that is implemented by the embedder and provided to WebKit, not the other way around.  For WEBKIT_EXPORT to make sense the definition of this function would have to exist inside WebKit.dll and the caller to this function would have to be outside.  Is that the structure you&apos;re trying to end up with?

Well, I was just leaving it as it really, but you make a good point. I can make the pure virtual onCreateGrGLInterface() method public instead, and implement this binding of the GrGLInterface to the WGC3D again in chromium. Code duplication :/ but across the library boundary, so it makes sense I guess.

&gt; &gt; Source/Platform/chromium/public/WebLayerTreeViewClient.h:76
&gt; &gt; +    virtual WebKit::WebGraphicsContext3D* createOrGetOffscreenContext3dForMainThread() { return 0; }
&gt; 
&gt; Normally &quot;create...&quot; functions return pointers to objects that are then owned by the caller.  That isn&apos;t the case for these, since  it&apos;s owned by the other side of the interface.  I think they should be named something other than &apos;create...&apos; and you should document the ownership rules in the header.

Yeh, I agree the naming is awkward. I did &quot;createOrGet...&quot; everywhere to differentiate that it&apos;s not a &quot;create&quot; and it&apos;s not a &quot;get&quot;. It&apos;s the ownership symmantics of a &quot;get&quot; with the side effects of a &quot;create&quot;. I have no idea what other word to use for this though. Is &quot;createAndGet...&quot; any better?

&gt; It&apos;s also a bit weird to me that these are on WebLayerTreeViewClient since they don&apos;t have anything to do with the specific WebLayerTreeView instance

Hmm... well, I thought this was the goal design. ui::Compositor is a LayerTreeHostClient so we want to go through that API. In WebKit land, this translates into the WebLayerTreeViewClient API. It serves the WebLayerTreeView when it asks for the embedder&apos;s offscreen context. I think that this has as much to do with a WebLayerTreeView instance as it does with a LayerTreeHost instance, in that the instance wants the context? Did you picture the compositor bindings WebLayerTreeViewImpl calling the SharedGraphicsContext3D code directly until we have RenderWidget(Compositor?) implementing LayerTreeHostClient instead of WebLayerTreeViewImpl?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825651</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-02-05 11:03:24 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Yeh, I agree the naming is awkward. I did &quot;createOrGet...&quot; everywhere to differentiate that it&apos;s not a &quot;create&quot; and it&apos;s not a &quot;get&quot;. It&apos;s the ownership symmantics of a &quot;get&quot; with the side effects of a &quot;create&quot;. I have no idea what other word to use for this though. Is &quot;createAndGet...&quot; any better?

Since this is a getter that does not transfer ownership, I do not think any prefix is needed.  Document the lazy creation aspect in a comment.

&gt; 
&gt; &gt; It&apos;s also a bit weird to me that these are on WebLayerTreeViewClient since they don&apos;t have anything to do with the specific WebLayerTreeView instance
&gt; 
&gt; Hmm... well, I thought this was the goal design. ui::Compositor is a LayerTreeHostClient so we want to go through that API.

Yes

&gt; In WebKit land, this translates into the WebLayerTreeViewClient API.

I think this is the source of confusion.  The cc:: API and the WebKit API are not the same thing and do not (and in many cases should not) blindly mirror each other.  The way that cc and WebKit interact with their embedders are different in a few ways.

cc needs access to a main and compositor thread context+GrContext.  I think those should be provided via cc::LayerTreeHostClient, since that&apos;s how cc makes requests of its embedder and all of the current cc APIs are done on a per-host basis.

WebKit&apos;s different.  WebKit only ever needs access to a main thread shared context and GrContext for canvas/etc.  WebKit never needs to use a compositor thread context or really do anything at all related to the compositor thread.  Currently, all of the shared contexts are managed in statics inside WebCore::SharedGraphicsContext3D, but that&apos;s in no way set in stone.  WebKit also has this neat WebKit::Platform abstraction by which WebKit can request platform support objects from its embedder.

I think a better factoring of all this would be for WebKit::Platform to provide the shared context/GrContext to WebKit. The compositor thread context pair can be handled purely on the chromium side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825660</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-02-05 11:19:44 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Yeh, I agree the naming is awkward. I did &quot;createOrGet...&quot; everywhere to differentiate that it&apos;s not a &quot;create&quot; and it&apos;s not a &quot;get&quot;. It&apos;s the ownership symmantics of a &quot;get&quot; with the side effects of a &quot;create&quot;. I have no idea what other word to use for this though. Is &quot;createAndGet...&quot; any better?
&gt; 
&gt; Since this is a getter that does not transfer ownership, I do not think any prefix is needed.  Document the lazy creation aspect in a comment.

Okay.

&gt; &gt; 
&gt; &gt; &gt; It&apos;s also a bit weird to me that these are on WebLayerTreeViewClient since they don&apos;t have anything to do with the specific WebLayerTreeView instance
&gt; &gt; 
&gt; &gt; Hmm... well, I thought this was the goal design. ui::Compositor is a LayerTreeHostClient so we want to go through that API.
&gt; 
&gt; Yes
&gt; 
&gt; &gt; In WebKit land, this translates into the WebLayerTreeViewClient API.
&gt; 
&gt; I think this is the source of confusion.  The cc:: API and the WebKit API are not the same thing and do not (and in many cases should not) blindly mirror each other.  The way that cc and WebKit interact with their embedders are different in a few ways.
&gt; 
&gt; cc needs access to a main and compositor thread context+GrContext.  I think those should be provided via cc::LayerTreeHostClient, since that&apos;s how cc makes requests of its embedder and all of the current cc APIs are done on a per-host basis.
&gt; 
&gt; WebKit&apos;s different.  WebKit only ever needs access to a main thread shared context and GrContext for canvas/etc.  WebKit never needs to use a compositor thread context or really do anything at all related to the compositor thread.  Currently, all of the shared contexts are managed in statics inside WebCore::SharedGraphicsContext3D, but that&apos;s in no way set in stone.  WebKit also has this neat WebKit::Platform abstraction by which WebKit can request platform support objects from its embedder.
&gt; 
&gt; I think a better factoring of all this would be for WebKit::Platform to provide the shared context/GrContext to WebKit. The compositor thread context pair can be handled purely on the chromium side.

Yeh, okay we agree on where this is going I think. But currently the renderer implementation of LTHClient is the WLTVImpl. I know we&apos;re going to change that, but I thought/hoped this might be a reasonable intermediate step until we move the LTHClient implementation. At least it allows cc/ to start using the LTHClient interface, and I can work through all the context creation plumbing stuff for the browser compositor without risking anything for the renderer compositor, until we&apos;ve sorted it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825665</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-02-05 11:25:33 -0800</bug_when>
    <thetext>I think you can implement the parts of cc::LayerTreeHostClient you need without doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825702</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-02-05 12:27:27 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I think you can implement the parts of cc::LayerTreeHostClient you need without doing this.

For instance, as a first step you could move the WebSharedGraphicsContext3D:: calls on the chromium side from being inside cc/ to being in webkit/compositor_bindings. That would move the problem up a layer and allow you to define the interfaces you want in cc::.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825745</commentid>
    <comment_count>14</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-02-05 13:07:48 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; I think you can implement the parts of cc::LayerTreeHostClient you need without doing this.
&gt; 
&gt; For instance, as a first step you could move the WebSharedGraphicsContext3D:: calls on the chromium side from being inside cc/ to being in webkit/compositor_bindings. That would move the problem up a layer and allow you to define the interfaces you want in cc::.

Thanks for the clarification. I was hoping that was what you meant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825796</commentid>
    <comment_count>15</comment_count>
      <attachid>186699</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-02-05 14:09:37 -0800</bug_when>
    <thetext>Created attachment 186699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825807</commentid>
    <comment_count>16</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-02-05 14:14:28 -0800</bug_when>
    <thetext>Ok I hope this seems like a reasonable first step now. The important things in here:

1. Let the compositor context be queried on the main thread after being created.
2. Make a public virtual method on WGC3D to create a GrGLInterface for the context.

I think the next steps are something like, in some order:

- Make compositor use the LTHClient API to get its contexts.
- Make WebKit use the Platform API to get its contexts.
- Make renderer compositor&apos;s implementation of LTHClient skip past webkit.
- Make memory allocation callbacks not route thru WGC3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825848</commentid>
    <comment_count>17</comment_count>
      <attachid>186699</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-02-05 14:58:11 -0800</bug_when>
    <thetext>Comment on attachment 186699
Patch

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

&gt; Source/WebCore/platform/chromium/support/GraphicsContext3DPrivate.cpp:125
&gt; +    if (m_grContext)

is this just a set of style changes or is the behavior different somewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825850</commentid>
    <comment_count>18</comment_count>
      <attachid>186699</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-02-05 15:02:53 -0800</bug_when>
    <thetext>Comment on attachment 186699
Patch

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

&gt;&gt; Source/WebCore/platform/chromium/support/GraphicsContext3DPrivate.cpp:125
&gt;&gt; +    if (m_grContext)
&gt; 
&gt; is this just a set of style changes or is the behavior different somewhere?

This is just less nesting mostly, it shouldn&apos;t behave different.

The non-whitespace changes are:
- moving the interface-&gt;fCallback stuff here
- using SkAutoTUnref for m_grContext instead of manual unref in destructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825865</commentid>
    <comment_count>19</comment_count>
      <attachid>186699</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2013-02-05 15:15:49 -0800</bug_when>
    <thetext>Comment on attachment 186699
Patch

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825866</commentid>
    <comment_count>20</comment_count>
      <attachid>186699</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2013-02-05 15:17:01 -0800</bug_when>
    <thetext>Comment on attachment 186699
Patch

Thanks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825893</commentid>
    <comment_count>21</comment_count>
      <attachid>186699</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 15:43:54 -0800</bug_when>
    <thetext>Comment on attachment 186699
Patch

Clearing flags on attachment: 186699

Committed r141943: &lt;http://trac.webkit.org/changeset/141943&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825894</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 15:43:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184385</attachid>
            <date>2013-01-23 19:48:28 -0800</date>
            <delta_ts>2013-02-04 18:07:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107776-20130123224520.patch</filename>
            <type>text/plain</type>
            <size>17348</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBjNzMyNTg3YmNlNGE5
OWQyNmJiMTI3NzkzODAzNjBmMTVkNjhjNjMwLi44ZGFkZmNkMTRkNzVjYTQxYjA3MjdmZmRkM2Nm
NmQxMDQyNWZhN2MxIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMy0wMS0yMyAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFByb3ZpZGUgY29tcG9zaXRvciBvZmZzY3JlZW4gY29udGV4dCB0aHJvdWdoIHRoZSBXZWJMYXll
clRyZWVWaWV3Q2xpZW50IGludGVyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA3Nzc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIG1ldGhvZHMgdG8gdGhlIFdlYkxheWVyVHJlZVZpZXdDbGll
bnQgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBXZWJWaWV3SW1wbCB0bworICAgICAgICBzdXBw
bHkgb2Zmc2NyZWVuIGNvbnRleHRzIGZvciB0aGUgY29tcG9zaXRvciwgYm90aCBmb3IgbWFpbiB0
aHJlYWQgdXNlIGFuZCBmb3IgaW1wbAorICAgICAgICB0aHJlYWQgdXNlLgorCisgICAgICAgIE1v
dmUgb3duZXJzaGlwIG9mIHRoZSBHckNvbnRleHQgdXNlZCBmb3IgZHJhd2luZyBpbnRvIGEgV2Vi
R3JhcGhpY3NDb250ZXh0M0QgaW50byB0aGUKKyAgICAgICAgV0dDM0QgY2xhc3MuIFRoaXMgYWxs
b3dzIHVzIHRvIG1haW50YWluIGEgc2luZ2xlIEdyQ29udGV4dCBwZXIgV0dDM0QgYW5kIGFjY2Vz
cyB0byB0aGUKKyAgICAgICAgR3JDb250ZXh0IHdoZXJldmVyIHdlIGhhdmUgYWNjZXNzIHRvIHRo
ZSBXR0MzRCBvYmplY3QuCisKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3ND
b250ZXh0M0QuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdy
YXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6On5XZWJHcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRleHQpOgorICAg
ICAgICAoR3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJMYXllclRyZWVWaWV3Q2xpZW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6Y3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0M2RG
b3JNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6
Y3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0M2RGb3JJbXBsVGhyZWFkKToKKwogMjAxMy0wMS0y
MiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBB
ZGQgV2ViRGlzY2FyZGFibGVNZW1vcnkgdG8gcGxhdGZvcm0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYmJiM2Ew
MWNlNTNmMTA0MTdhZWYxNjdmYTJmZjliNmQzMjM2NmYwLi40YzA2ZTI3ZDA4NjIxNDRhNzYwZDE2
YjAyODRkYTM3OWNkNWJkYmUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTMtMDEt
MjMgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9t
aXVtXSBQcm92aWRlIGNvbXBvc2l0b3Igb2Zmc2NyZWVuIGNvbnRleHQgdGhyb3VnaCB0aGUgV2Vi
TGF5ZXJUcmVlVmlld0NsaWVudCBpbnRlcmZhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzc3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgb3duZXJzaGlwIG9mIHRoZSBHckNvbnRleHQgaW50
byBXZWJHcmFwaGljc0NvbnRleHQzRC4gUmV0dXJuIHRoZSBHckNvbnRleHQgZnJvbSB0aGUKKyAg
ICAgICAgV0dDM0QgY2xhc3MgZnJvbSBHcmFwaGljc0NvbnRleHQzRDo6Z3JDb250ZXh0KCkuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnckNvbnRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisgICAgICAg
IChHcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorCiAyMDEzLTAxLTIzICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA3NjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGNhMjY2Njhm
MjViNDBiZmEwMTJjYmJlZWJhMDM5NDMzODJiZTk2N2IuLjEzOWEwNWU0NDY3YzljY2Y3OGE2YzUy
ZDkzNTU2MjQ2MzYzMDFiYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzAgQEAKKzIwMTMtMDEtMjMgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW2Nocm9taXVtXSBQcm92aWRlIGNvbXBvc2l0b3Igb2Zmc2NyZWVuIGNvbnRleHQg
dGhyb3VnaCB0aGUgV2ViTGF5ZXJUcmVlVmlld0NsaWVudCBpbnRlcmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzc3NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtZXRob2RzIHRvIHRoZSBX
ZWJMYXllclRyZWVWaWV3Q2xpZW50IGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gV2ViVmlld0lt
cGwgdG8KKyAgICAgICAgc3VwcGx5IG9mZnNjcmVlbiBjb250ZXh0cyBmb3IgdGhlIGNvbXBvc2l0
b3IsIGJvdGggZm9yIG1haW4gdGhyZWFkIHVzZSBhbmQgZm9yIGltcGwKKyAgICAgICAgdGhyZWFk
IHVzZS4KKworICAgICAgICBNb3ZlIG93bmVyc2hpcCBvZiB0aGUgR3JDb250ZXh0IHVzZWQgZm9y
IGRyYXdpbmcgaW50byBhIFdlYkdyYXBoaWNzQ29udGV4dDNEIGludG8gdGhlCisgICAgICAgIFdH
QzNEIGNsYXNzLiBUaGlzIGFsbG93cyB1cyB0byBtYWludGFpbiBhIHNpbmdsZSBHckNvbnRleHQg
cGVyIFdHQzNEIGFuZCBhY2Nlc3MgdG8gdGhlCisgICAgICAgIEdyQ29udGV4dCB3aGVyZXZlciB3
ZSBoYXZlIGFjY2VzcyB0byB0aGUgV0dDM0Qgb2JqZWN0LgorCisgICAgICAgICogc3JjL1dlYkdy
YXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0Q6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0Q6OmF0dGFjaFRvR3JDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0Q6OkdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0
ZXI6OkdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6R3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrQWRhcHRlcjo6b25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZCk6CisgICAgICAgICogc3Jj
L1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZU9y
R2V0T2Zmc2NyZWVuQ29udGV4dDNkRm9yTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6Y3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0
M2RGb3JJbXBsVGhyZWFkKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoKKwogMjAxMy0w
MS0yMyAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0No
cm9taXVtXSBGaXggc29tZSAjaW5jbHVkZXMgZm9yIFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oCmluZGV4IGZjOTY3ZDA1NzhjZDUwOWRlNzU5OWNlOGRlZTI4NWRkYTkyZDE3MGQu
LmRiNGM0MzE0OTIyYTJhZDliM2UzYzhlMjUyODI4YjdmNjgyOGU4OTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgK
QEAgLTM1LDggKzM1LDEwIEBACiAjaW5jbHVkZSAiV2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9u
LmgiCiAjaW5jbHVkZSAiV2ViR3JhcGhpY3NNZW1vcnlTdGF0cy5oIgogI2luY2x1ZGUgIldlYk5v
bkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgogI2luY2x1ZGUgIldl
YlN0cmluZy5oIgogCitjbGFzcyBHckNvbnRleHQ7CiBzdHJ1Y3QgR3JHTEludGVyZmFjZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xNDUsOCArMTQ3LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
dmlydHVhbCB+V2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01J
VU0oKSB7IH0KICAgICB9OwogCisgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QoKSA6IG1fZ3JDb250
ZXh0KDApIHsgfQorCiAgICAgLy8gVGhpcyBkZXN0cnVjdG9yIG5lZWRzIHRvIGJlIHB1YmxpYyBz
byB0aGF0IHVzaW5nIGNsYXNzZXMgY2FuIGRlc3Ryb3kgaW5zdGFuY2VzIGlmIGluaXRpYWxpemF0
aW9uIGZhaWxzLgotICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzQ29udGV4dDNEKCkgeyB9CisgICAg
dmlydHVhbCB+V2ViR3JhcGhpY3NDb250ZXh0M0QoKSB7IGRlc3Ryb3koKTsgfQogCiAgICAgLy8g
TWFrZXMgdGhlIE9wZW5HTCBjb250ZXh0IGN1cnJlbnQgb24gdGhlIGN1cnJlbnQgdGhyZWFkLiBS
ZXR1cm5zIHRydWUgb24KICAgICAvLyBzdWNjZXNzLgpAQCAtNDcyLDExICs0NzYsMjkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBhc3luY1RleEltYWdlMkRDSFJPTUlVTShXR0MzRGVudW0g
dGFyZ2V0LCBXR0MzRGludCBsZXZlbCwgV0dDM0RlbnVtIGludGVybmFsZm9ybWF0LCBXR0MzRHNp
emVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RpbnQgYm9yZGVyLCBXR0MzRGVudW0g
Zm9ybWF0LCBXR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSB7IH0KICAgICB2aXJ0
dWFsIHZvaWQgYXN5bmNUZXhTdWJJbWFnZTJEQ0hST01JVU0oV0dDM0RlbnVtIHRhcmdldCwgV0dD
M0RpbnQgbGV2ZWwsIFdHQzNEaW50IHhvZmZzZXQsIFdHQzNEaW50IHlvZmZzZXQsIFdHQzNEc2l6
ZWkgd2lkdGgsIFdHQzNEc2l6ZWkgaGVpZ2h0LCBXR0MzRGVudW0gZm9ybWF0LCBXR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSB7IH0KIAotICAgIEdyR0xJbnRlcmZhY2UqIGNyZWF0
ZUdyR0xJbnRlcmZhY2UoKTsKKyAgICAvLyBDcmVhdGUgYSBHckNvbnRleHQgYW5kIHVzZSB0aGUg
V2ViR3JhcGhpY3NDb250ZXh0M0QgYXMgaXRzIG91dHB1dC4KKyAgICBXRUJLSVRfRVhQT1JUIEdy
Q29udGV4dCogYXR0YWNoVG9HckNvbnRleHQoKTsKKyAgICAvLyBXaGVuIGEgR3JDb250ZXh0IGlz
IGF0dGFjaGVkIHRvIHRoZSBXZWJHcmFwaGljc0NvbnRleHQzRCwgdGhpcyByZXR1cm5zIHRoYXQg
R3JDb250ZXh0LgorICAgIEdyQ29udGV4dCogZ3JDb250ZXh0KCkgeyByZXR1cm4gbV9nckNvbnRl
eHQ7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgR3JHTEludGVyZmFjZSogb25DcmVhdGVH
ckdMSW50ZXJmYWNlKCkgeyByZXR1cm4gMDsgfQogCitwcml2YXRlOgorICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBkZXN0cm95KCk7CisKKyAgICBjbGFzcyBHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2Vk
Q2FsbGJhY2tBZGFwdGVyIDogcHVibGljIFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbkNoYW5n
ZWRDYWxsYmFja0NIUk9NSVVNIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEdyTWVtb3J5QWxsb2Nh
dGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIoR3JDb250ZXh0Kik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBvbk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlv
bik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgfTsK
KworICAgIEdyR0xJbnRlcmZhY2UqIGNyZWF0ZUdyR0xJbnRlcmZhY2UoKTsKKworICAgIEdyQ29u
dGV4dCogbV9nckNvbnRleHQ7CisgICAgV2ViUHJpdmF0ZU93blB0cjxHck1lbW9yeUFsbG9jYXRp
b25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyPiBtX2dyQ29udGV4dE1lbW9yeUFsbG9jYXRpb25DYWxs
YmFja0FkYXB0ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVudC5oIGIv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgK
aW5kZXggMmNhNmIwYTUxZWRjYjJmZjQ3N2Y4YzkwNGE2NGE1MmY4MDNmZmZlYS4uMjQ1MmZhMTI2
YTJlMWI2MThhNWQ5ZTBkODcyNGJkZTQ0MWY4NDI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKKysrIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xpZW50LmgKQEAgLTMw
LDYgKzMwLDcgQEAgY2xhc3MgU2tCaXRtYXA7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
V2ViQ29tcG9zaXRvck91dHB1dFN1cmZhY2U7CitjbGFzcyBXZWJHcmFwaGljc0NvbnRleHQzRDsK
IGNsYXNzIFdlYklucHV0SGFuZGxlcjsKIGNsYXNzIFdlYlRocmVhZDsKIHN0cnVjdCBXZWJSZWN0
OwpAQCAtNjcsNiArNjgsMTQgQEAgcHVibGljOgogICAgIC8vIDNEIGNvbnRleHQgZXZlbnQpLgog
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZU91dHB1dFN1cmZhY2UoYm9vbCBzdWNjZXNzKSB7
IH0KIAorICAgIC8vIENyZWF0ZXMgYW4gb2Zmc2NyZWVuIGNvbnRleHQgaWYgbmVlZGVkLCBhbmQg
cmV0dXJucyBpdCwgb3IgcmV0dXJucyB0aGUgYWxyZWFkeS1leGlzdGluZyBjb250ZXh0LgorICAg
IC8vIFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb250ZXh0IGNyZWF0ZWQgcGVyIGluc3RhbmNl
IG9mIHRoZSBjbGllbnQuCisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
KiBjcmVhdGVPckdldE9mZnNjcmVlbkNvbnRleHQzZEZvck1haW5UaHJlYWQoKSB7IHJldHVybiAw
OyB9CisKKyAgICAvLyBDcmVhdGVzIGFuIG9mZnNjcmVlbiBjb250ZXh0IGlmIG5lZWRlZCwgYW5k
IHJldHVybnMgaXQsIG9yIHJldHVybnMgdGhlIGFscmVhZHktZXhpc3RpbmcgY29udGV4dC4KKyAg
ICAvLyBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgY29udGV4dCBjcmVhdGVkIHBlciBpbnN0YW5j
ZSBvZiB0aGUgY2xpZW50LgorICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQz
RCogY3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0M2RGb3JJbXBsVGhyZWFkKCkgeyByZXR1cm4g
MDsgfQorCiAgICAgdmlydHVhbCBXZWJJbnB1dEhhbmRsZXIqIGNyZWF0ZUlucHV0SGFuZGxlcigp
IHsgcmV0dXJuIDA7IH0KIAogICAgIC8vIEluZGljYXRlcyB0aGF0IGEgZnJhbWUgd2lsbCBiZSBj
b21taXR0ZWQgdG8gdGhlIGltcGwgc2lkZSBvZiB0aGUgY29tcG9zaXRvcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9H
cmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCmluZGV4IDBkNTcxYjRiYzc4OGUyZGExOWMxNTlj
MjMwZjg0Njc5NDFmMTg3ZmEuLjIwMmY0NjkxNzQwNWI0OWJkOGIwOGUwMzlmMGYyOTBiY2FkNDAx
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKQEAgLTQyLDE1
ICs0Miw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KIAotbmFtZXNwYWNlIHsKLQotLy8gVGhlIGxpbWl0IG9mIHRoZSBu
dW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUgR3JDb250ZXh0J3MgYml0bWFwLT50ZXh0
dXJlIGNhY2hlLgotY29uc3QgaW50IG1heEdhbmVzaFRleHR1cmVDYWNoZUNvdW50ID0gMjA0ODsK
LS8vIFRoZSBsaW1pdCBvZiB0aGUgYnl0ZXMgYWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0
aGUgR3JDb250ZXh0J3MgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgotY29uc3Qgc2l6ZV90IG1heEdh
bmVzaFRleHR1cmVDYWNoZUJ5dGVzID0gOTYgKiAxMDI0ICogMTAyNDsKLQotfQotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjIsMTcgKzUzLDExIEBAIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKFBhc3NPd25QdHI8
V2ViS2l0OjpXZWJHcmFwaGljCiAgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKICAgICAs
IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyKHByZXNlcnZlRHJhd2luZ0J1ZmZlcikKICAgICAsIG1f
cmVzb3VyY2VTYWZldHkoUmVzb3VyY2VTYWZldHlVbmtub3duKQotICAgICwgbV9nckNvbnRleHQo
MCkKIHsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKCkKIHsKLSAgICBpZiAobV9nckNvbnRleHQpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0oMCk7Ci0gICAgICAgIG1fZ3JD
b250ZXh0LT5jb250ZXh0RGVzdHJveWVkKCk7Ci0gICAgICAgIEdyU2FmZVVucmVmKG1fZ3JDb250
ZXh0KTsKLSAgICB9CiB9CiAKIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoUGFz
c093blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiB3ZWJDb250ZXh0LCBib29sIHBy
ZXNlcnZlRHJhd2luZ0J1ZmZlcikKQEAgLTkxLDQxICs3Niw5IEBAIFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNz
Q29udGV4CiAgICAgcmV0dXJuIGNvbnRleHQtPm1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpOwogfQog
Ci1jbGFzcyBHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyIDogcHVibGlj
IFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNIHsKLXB1YmxpYzoKLSAgICBHck1lbW9yeUFsbG9jYXRp
b25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKEdyQ29udGV4dCogY29udGV4dCkKLSAgICAgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIG9uTWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWQoV2ViS2l0OjpXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRpb24g
YWxsb2NhdGlvbikgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0KQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghYWxsb2NhdGlvbi5ncHVSZXNvdXJjZVNp
emVJbkJ5dGVzKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmZyZWVHcHVSZXNvdXJjZXMoKTsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKDAsIDApOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRz
KG1heEdhbmVzaFRleHR1cmVDYWNoZUNvdW50LCBtYXhHYW5lc2hUZXh0dXJlQ2FjaGVCeXRlcyk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEdyQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQogR3JD
b250ZXh0KiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyQ29udGV4dCgpCiB7Ci0gICAgaWYg
KCFtX2dyQ29udGV4dCkgewotICAgICAgICBTa0F1dG9UVW5yZWY8R3JHTEludGVyZmFjZT4gaW50
ZXJmYWNlKG1faW1wbC0+Y3JlYXRlR3JHTEludGVyZmFjZSgpKTsKLSAgICAgICAgbV9nckNvbnRl
eHQgPSBHckNvbnRleHQ6OkNyZWF0ZShrT3BlbkdMX1NoYWRlcnNfR3JFbmdpbmUsIHJlaW50ZXJw
cmV0X2Nhc3Q8R3JQbGF0Zm9ybTNEQ29udGV4dD4oaW50ZXJmYWNlLmdldCgpKSk7Ci0gICAgICAg
IGlmIChtX2dyQ29udGV4dCkgewotICAgICAgICAgICAgbV9nckNvbnRleHQtPnNldFRleHR1cmVD
YWNoZUxpbWl0cyhtYXhHYW5lc2hUZXh0dXJlQ2FjaGVDb3VudCwgbWF4R2FuZXNoVGV4dHVyZUNh
Y2hlQnl0ZXMpOwotICAgICAgICAgICAgbV9nckNvbnRleHRNZW1vcnlBbGxvY2F0aW9uQ2FsbGJh
Y2tBZGFwdGVyID0gYWRvcHRQdHIobmV3IEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
a0FkYXB0ZXIobV9nckNvbnRleHQpKTsKLSAgICAgICAgICAgIG1faW1wbC0+c2V0TWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKG1fZ3JDb250ZXh0TWVtb3J5QWxsb2NhdGlv
bkNhbGxiYWNrQWRhcHRlci5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1f
Z3JDb250ZXh0OworICAgIHJldHVybiBtX2ltcGwtPmF0dGFjaFRvR3JDb250ZXh0KCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJrQ29udGV4dENoYW5nZWQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKaW5kZXggNWJiYjg1YTIyZmNhYjFkNTA1
YzQwY2Y1ZmVmNjllMzc0MDI3ZDZlNC4uNTJmM2FjMjI5MzcyZTFmNWU2ZjNlYjQ3YjdiNjQzMDEx
YjdkMDQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCkBAIC05Myw3
ICs5Myw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtPiBtX2V4
dGVuc2lvbnM7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEQ29udGV4dExvc3RDYWxsYmFj
a0FkYXB0ZXI+IG1fY29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI7CiAgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNERXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyPiBtX2Vycm9yTWVzc2FnZUNh
bGxiYWNrQWRhcHRlcjsKLSAgICBPd25QdHI8R3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxi
YWNrQWRhcHRlcj4gbV9nckNvbnRleHRNZW1vcnlBbGxvY2F0aW9uQ2FsbGJhY2tBZGFwdGVyOwog
ICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CiAgICAgSGFzaFNldDxT
dHJpbmc+IG1fZW5hYmxlZEV4dGVuc2lvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcmVxdWVz
dGFibGVFeHRlbnNpb25zOwpAQCAtMTEzLDggKzExMiw2IEBAIHByaXZhdGU6CiAgICAgLy8gZnJh
bWUgYnVmZmVyIGludG8uIFRoaXMgc2VlbXMgdG8gaGFwcGVuIHdoZW4gQ1NTIHN0eWxlcyBhcmUK
ICAgICAvLyB1c2VkIHRvIHJlc2l6ZSB0aGUgQ2FudmFzLgogICAgIFNrQml0bWFwIG1fcmVzaXpp
bmdCaXRtYXA7Ci0KLSAgICBHckNvbnRleHQqIG1fZ3JDb250ZXh0OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
R3JhcGhpY3NDb250ZXh0M0QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCmluZGV4IDNkNjIxODQ2ZjJiNmZmODQ2MWMzMTZjZmJhYTQ3YTk5
ODM1NzE1NDkuLjRhYjU4OWM1YmE2NGI2NDEzZDI5NWM4YzRjYzQ1N2VmYjgyMWU2ZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5j
cHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlIDxwdWJs
aWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaD4KIAorI2luY2x1ZGUgIkdyQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkdyR0xJbnRlcmZhY2UuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0zNyw2ICsz
OCwzMiBAQCBuYW1lc3BhY2UgewogICAgIH0KIH0KIAordm9pZCBXZWJHcmFwaGljc0NvbnRleHQz
RDo6ZGVzdHJveSgpCit7CisgICAgc2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NI
Uk9NSVVNKDApOworICAgIG1fZ3JDb250ZXh0TWVtb3J5QWxsb2NhdGlvbkNhbGxiYWNrQWRhcHRl
ci5yZXNldCgwKTsKKworICAgIGlmIChtX2dyQ29udGV4dCkgeworICAgICAgICBtX2dyQ29udGV4
dC0+Y29udGV4dERlc3Ryb3llZCgpOworICAgICAgICBHclNhZmVVbnJlZihtX2dyQ29udGV4dCk7
CisgICAgfQorfQorCitHckNvbnRleHQqIFdlYkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hUb0dy
Q29udGV4dCgpCit7CisgICAgaWYgKG1fZ3JDb250ZXh0KQorICAgICAgICByZXR1cm4gbV9nckNv
bnRleHQ7CisKKyAgICBTa0F1dG9UVW5yZWY8R3JHTEludGVyZmFjZT4gaW50ZXJmYWNlKGNyZWF0
ZUdyR0xJbnRlcmZhY2UoKSk7CisgICAgbV9nckNvbnRleHQgPSBHckNvbnRleHQ6OkNyZWF0ZShr
T3BlbkdMX1NoYWRlcnNfR3JFbmdpbmUsIHJlaW50ZXJwcmV0X2Nhc3Q8R3JQbGF0Zm9ybTNEQ29u
dGV4dD4oaW50ZXJmYWNlLmdldCgpKSk7CisgICAgaWYgKG1fZ3JDb250ZXh0KSB7CisgICAgICAg
IG1fZ3JDb250ZXh0TWVtb3J5QWxsb2NhdGlvbkNhbGxiYWNrQWRhcHRlci5yZXNldChuZXcgR3JN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcihtX2dyQ29udGV4dCkpOworICAg
ICAgICBzZXRNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0obV9nckNvbnRl
eHRNZW1vcnlBbGxvY2F0aW9uQ2FsbGJhY2tBZGFwdGVyLmdldCgpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbV9nckNvbnRleHQ7Cit9CisKIEdyR0xJbnRlcmZhY2UqIFdlYkdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVHckdMSW50ZXJmYWNlKCkKIHsKICAgICBHckdMSW50ZXJmYWNlKiBpbnRlcmZh
Y2UgPSBvbkNyZWF0ZUdyR0xJbnRlcmZhY2UoKTsKQEAgLTQ3LDQgKzc0LDI3IEBAIEdyR0xJbnRl
cmZhY2UqIFdlYkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVHckdMSW50ZXJmYWNlKCkKICAgICBy
ZXR1cm4gaW50ZXJmYWNlOwogfQogCisvLyBUaGUgbGltaXQgb2YgdGhlIG51bWJlciBvZiB0ZXh0
dXJlcyB3ZSBob2xkIGluIHRoZSBHckNvbnRleHQncyBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCitj
b25zdCBpbnQgbWF4R2FuZXNoVGV4dHVyZUNhY2hlQ291bnQgPSAyMDQ4OworLy8gVGhlIGxpbWl0
IG9mIHRoZSBieXRlcyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBHckNvbnRleHQn
cyBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCitjb25zdCBzaXplX3QgbWF4R2FuZXNoVGV4dHVyZUNh
Y2hlQnl0ZXMgPSA5NiAqIDEwMjQgKiAxMDI0OworCitXZWJHcmFwaGljc0NvbnRleHQzRDo6R3JN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcjo6R3JNZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlcihHckNvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKK3sKKyAgICBtX2NvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhH
YW5lc2hUZXh0dXJlQ2FjaGVDb3VudCwgbWF4R2FuZXNoVGV4dHVyZUNhY2hlQnl0ZXMpOworfQor
Cit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNEOjpHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2tBZGFwdGVyOjpvbk1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKFdlYktpdDo6V2ViR3JhcGhp
Y3NNZW1vcnlBbGxvY2F0aW9uIGFsbG9jYXRpb24pCit7CisgICAgaWYgKCFtX2NvbnRleHQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghYWxsb2NhdGlvbi5ncHVSZXNvdXJjZVNpemVJbkJ5
dGVzKSB7CisgICAgICAgIG1fY29udGV4dC0+ZnJlZUdwdVJlc291cmNlcygpOworICAgICAgICBt
X2NvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cygwLCAwKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV9jb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1pdHMobWF4R2FuZXNoVGV4dHVyZUNhY2hl
Q291bnQsIG1heEdhbmVzaFRleHR1cmVDYWNoZUJ5dGVzKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXgg
YWQ4Njg4NWI1N2Y1MGNmOTQ5YTU3MzdkNmVkOTI0OWFiMGYyNTk1NC4uMWM1NjkyNzVhNTg3OTNm
OTJkOGUyYjk0ZGEwNmFiYTBjNjdlNGI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcApAQCAtNDExOSw2ICs0MTE5LDE5IEBAIFdlYkNvbXBvc2l0b3JPdXRw
dXRTdXJmYWNlKiBXZWJWaWV3SW1wbDo6Y3JlYXRlT3V0cHV0U3VyZmFjZSgpCiAgICAgcmV0dXJu
IG1fY2xpZW50LT5jcmVhdGVPdXRwdXRTdXJmYWNlKCk7CiB9CiAKK1dlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0QqIFdlYlZpZXdJbXBsOjpjcmVhdGVPckdldE9mZnNjcmVlbkNvbnRleHQzZEZv
ck1haW5UaHJlYWQoKQoreworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4
dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0KCku
Z2V0KCkpOworfQorCitXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBXZWJWaWV3SW1wbDo6
Y3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0M2RGb3JJbXBsVGhyZWFkKCkKK3sKKyAgICBpZiAo
IVNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpoYXZlRm9ySW1wbFRocmVhZCgpICYmICFTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRm9ySW1wbFRocmVhZCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFw
aGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0Rm9ySW1wbFRocmVhZCgp
LmdldCgpKTsKK30KKwogV2ViSW5wdXRIYW5kbGVyKiBXZWJWaWV3SW1wbDo6Y3JlYXRlSW5wdXRI
YW5kbGVyKCkKIHsKICAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCogaGFuZGxlciA9
IG5ldyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggNDAyNzVkNzRhMGI1MmQ3MjkwZmU4ZDAyZGNhOGRh
ZWU3ZDgyZDllOC4uZTQwNDUzODQ1ZWQ2OWIwYzQ1MzRhODUyMTQyYWQ4NzkyODI5NTljZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC0zMjIsNiArMzIyLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IFdl
YlNpemUmLCBmbG9hdCk7CiAgICAgdmlydHVhbCBXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFjZSog
Y3JlYXRlT3V0cHV0U3VyZmFjZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNy
ZWF0ZU91dHB1dFN1cmZhY2UoYm9vbCBzdWNjZXNzKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNyZWF0ZU9yR2V0T2Zmc2NyZWVuQ29udGV4dDNk
Rm9yTWFpblRocmVhZCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRCogY3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0M2RGb3JJbXBsVGhyZWFkKCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJJbnB1dEhhbmRsZXIqIGNyZWF0ZUlucHV0SGFuZGxl
cigpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsQ29tbWl0KCk7CiAgICAgdmlydHVh
bCB2b2lkIGRpZENvbW1pdCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186516</attachid>
            <date>2013-02-04 18:07:21 -0800</date>
            <delta_ts>2013-02-05 14:09:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107776-20130204210400.patch</filename>
            <type>text/plain</type>
            <size>9595</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0OGY4ODE0NTlhOTk4
MDkyODY1Nzg0MzM3YmExOTgyNmVkODQ2OGY1Li40OWM5MzhjOGMyODYxZmJhNjRlMzQ0ZjQ2OTk5
Yzg0YTQyODFkNWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMy0wMi0wNCAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFByb3ZpZGUgY29tcG9zaXRvciBvZmZzY3JlZW4gY29udGV4dCB0aHJvdWdoIHRoZSBXZWJMYXll
clRyZWVWaWV3Q2xpZW50IGludGVyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA3Nzc2CisKKyAgICAgICAgQWRkIG1ldGhvZHMgdG8gdGhlIFdl
YkxheWVyVHJlZVZpZXdDbGllbnQgaW50ZXJmYWNlIGZvciB0aGUgY29tcG9zaXRvcgorICAgICAg
ICB0byBnZXQgaXRzIG9mZnNjcmVlbiBjb250ZXh0LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29u
dGV4dDNELmg6CisgICAgICAgIChXZWJHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogY2hy
b21pdW0vcHVibGljL1dlYkxheWVyVHJlZVZpZXdDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJMYXllclRyZWVWaWV3Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlVmlld0NsaWVudDo6Y3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0M2RGb3JNYWlu
VGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6Y3JlYXRl
T3JHZXRPZmZzY3JlZW5Db250ZXh0M2RGb3JDb21wb3NpdG9yVGhyZWFkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViTGF5ZXJUcmVlVmlld0NsaWVudDo6Y3JlYXRlT3JHZXRPZmZzY3JlZW5HckNvbnRl
eHRGb3JNYWluVGhyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlld0NsaWVu
dDo6Y3JlYXRlT3JHZXRPZmZzY3JlZW5HckNvbnRleHRGb3JDb21wb3NpdG9yVGhyZWFkKToKKwog
MjAxMy0wMi0wMiAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBbY2hyb21pdW1dIEZpbGVTeXN0ZW0gbW9kczogQ2hhbmdlcyB0byBzbmFwc2hvdCBmaWxl
IGNyZWF0aW9uIHRvIHJlZHVjZSBkZXBlbmRlbmNpZXMgb24gYmxvYnMuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWZmZDU4NGJjNWY3ODQxYjViMWJmMWJiMmMzNGNiNzQyMWIwMDg3ZC4uNTgwYTBiMWNiNmY0MzFj
ZWYyYTM5ODExMTViZjExMzg4MjM3NTNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDEzLTAyLTA0ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtjaHJvbWl1bV0gUHJvdmlkZSBjb21wb3NpdG9yIG9mZnNjcmVlbiBjb250ZXh0IHRocm91Z2gg
dGhlIFdlYkxheWVyVHJlZVZpZXdDbGllbnQgaW50ZXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc3NzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyB0aGUgY29tcG9zaXRvciB0aHJlYWQn
cyBjb250ZXh0IHRvIGJlIHJldHJpZXZlZCBvbiBlaXRoZXIgdGhyZWFkLAorICAgICAgICBzbyB0
aGUgbWFpbiB0aHJlYWQgY2FuIGNyZWF0ZSBhbmQgcGFzcyB0aGUgY29udGV4dCB0byB0aGUgaW1w
bCB0aHJlYWQKKyAgICAgICAgdmlhIGl0cyBvd24gbWVjaGFuaXNtcy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0Rm9ySW1wbFRocmVhZCk6CisK
IDIwMTMtMDItMDQgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWlpdW0ub3JnPgogCiAgICAgICAg
IFhTUyBBdWRpdG9yIGJ5cGFzcyB2aWEgc3ZnIHRhZ3MgYW5kIHhsaW5rOmhyZWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggMDVkMjg0NmViZGE5OGYzNWI3M2UxYTk0Y2E4NjZjNWQ2MmRk
MzRjYi4uY2U0YWJmNmNhNDg5MThhNzQ3YWU3MGE5ZGZmYTJmMzgzNzQzODZmMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMy0wMi0wNCAgRGFuYSBKYW5z
ZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFByb3ZpZGUg
Y29tcG9zaXRvciBvZmZzY3JlZW4gY29udGV4dCB0aHJvdWdoIHRoZSBXZWJMYXllclRyZWVWaWV3
Q2xpZW50IGludGVyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA3Nzc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW1wbGVtZW50IEFQSSBmb3IgY29tcG9zaXRvciB0byBnZXQgb2Zmc2NyZWVuIGNv
bnRleHRzIGZyb20gdGhlCisgICAgICAgIFdlYkxheWVyVHJlZVZpZXdDbGllbnQuCisKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
Y3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0M2RGb3JNYWluVGhyZWFkKToKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjcmVhdGVPckdldE9mZnNjcmVl
bkNvbnRleHQzZEZvckNvbXBvc2l0b3JUaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
SW1wbDo6Y3JlYXRlT3JHZXRPZmZzY3JlZW5HckNvbnRleHRGb3JNYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNyZWF0ZU9yR2V0T2Zmc2NyZWVuR3JDb250ZXh0Rm9y
Q29tcG9zaXRvclRocmVhZCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIwMTMt
MDItMDQgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtD
aHJvbWl1bV0gTW92ZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSB0byBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4
dDNELmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4
dDNELmgKaW5kZXggZmM5NjdkMDU3OGNkNTA5ZGU3NTk5Y2U4ZGVlMjg1ZGRhOTJkMTcwZC4uMDcz
NWUyNjgwMjIwNTkzYWZlMzkyMzY0ZGM2YmYxMDdjOTYzNWU5MCAxMDA2NDQKLS0tIGEvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaApAQCAt
NDcyLDcgKzQ3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXN5bmNUZXhJbWFnZTJE
Q0hST01JVU0oV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgV0dDM0RzaXplaSB3aWR0aCwgV0dDM0RzaXplaSBoZWlnaHQsIFdHQzNEaW50
IGJvcmRlciwgV0dDM0RlbnVtIGZvcm1hdCwgV0dDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFzeW5jVGV4U3ViSW1hZ2UyRENIUk9NSVVNKFdH
QzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IGxldmVsLCBXR0MzRGludCB4b2Zmc2V0LCBXR0MzRGlu
dCB5b2Zmc2V0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVpIGhlaWdodCwgV0dDM0RlbnVt
IGZvcm1hdCwgV0dDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykgeyB9CiAKLSAgICBH
ckdMSW50ZXJmYWNlKiBjcmVhdGVHckdMSW50ZXJmYWNlKCk7CisgICAgV0VCS0lUX0VYUE9SVCBH
ckdMSW50ZXJmYWNlKiBjcmVhdGVHckdMSW50ZXJmYWNlKCk7CiAKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIEdyR0xJbnRlcmZhY2UqIG9uQ3JlYXRlR3JHTEludGVyZmFjZSgpIHsgcmV0dXJuIDA7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJU
cmVlVmlld0NsaWVudC5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXll
clRyZWVWaWV3Q2xpZW50LmgKaW5kZXggMmNhNmIwYTUxZWRjYjJmZjQ3N2Y4YzkwNGE2NGE1MmY4
MDNmZmZlYS4uN2E3ZWU5YTYzODg1ZDU4MzQ0OGMzYjBiNjZjZGYzZDYwNzRjY2Y3ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVWaWV3Q2xp
ZW50LmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJMYXllclRyZWVW
aWV3Q2xpZW50LmgKQEAgLTI2LDEwICsyNiwxMiBAQAogI2lmbmRlZiBXZWJMYXllclRyZWVWaWV3
Q2xpZW50X2gKICNkZWZpbmUgV2ViTGF5ZXJUcmVlVmlld0NsaWVudF9oCiAKK2NsYXNzIEdyQ29u
dGV4dDsKIGNsYXNzIFNrQml0bWFwOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkNv
bXBvc2l0b3JPdXRwdXRTdXJmYWNlOworY2xhc3MgV2ViR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFz
cyBXZWJJbnB1dEhhbmRsZXI7CiBjbGFzcyBXZWJUaHJlYWQ7CiBzdHJ1Y3QgV2ViUmVjdDsKQEAg
LTY5LDYgKzcxLDIyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgV2ViSW5wdXRIYW5kbGVyKiBj
cmVhdGVJbnB1dEhhbmRsZXIoKSB7IHJldHVybiAwOyB9CiAKKyAgICAvLyBDcmVhdGVzIGFuIG9m
ZnNjcmVlbiBjb250ZXh0IGZvciB0aGUgbWFpbiB0aHJlYWQgaWYgbmVlZGVkLCBhbmQgcmV0dXJu
cyBpdCwgb3IgcmV0dXJucyB0aGUgYWxyZWFkeS1leGlzdGluZyBjb250ZXh0LgorICAgIC8vIFRo
ZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb250ZXh0IGNyZWF0ZWQgcGVyIGluc3RhbmNlIG9mIHRo
ZSBjbGllbnQuCisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVh
dGVPckdldE9mZnNjcmVlbkNvbnRleHQzZEZvck1haW5UaHJlYWQoKSB7IHJldHVybiAwOyB9CisK
KyAgICAvLyBDcmVhdGVzIGFuIG9mZnNjcmVlbiBjb250ZXh0IGZvciB0aGUgY29tcG9zaXRvciB0
aHJlYWQgaWYgbmVlZGVkLCBhbmQgcmV0dXJucyBpdCwgb3IgcmV0dXJucyB0aGUgYWxyZWFkeS1l
eGlzdGluZyBjb250ZXh0LgorICAgIC8vIFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBjb250ZXh0
IGNyZWF0ZWQgcGVyIGluc3RhbmNlIG9mIHRoZSBjbGllbnQuCisgICAgdmlydHVhbCBXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjcmVhdGVPckdldE9mZnNjcmVlbkNvbnRleHQzZEZvckNv
bXBvc2l0b3JUaHJlYWQoKSB7IHJldHVybiAwOyB9CisKKyAgICAvLyBDcmVhdGVzIGEgR3JDb250
ZXh0IHRoYXQgaXMgYm91bmQgdG8gdGhlIG9mZnNjcmVlbiBjb250ZXh0IGZvciB0aGUgbWFpbiB0
aHJlYWQsIG9yIHJldHVybnMgdGhlIGFscmVhZHktZXhpc3RpbmcgR3JDb250ZXh0LgorICAgIC8v
IFRoZXJlIHNob3VsZCBvbmx5IGJlIG9uZSBHckNvbnRleHQgY3JlYXRlZCBwZXIgaW5zdGFuY2Ug
b2YgdGhlIGNsaWVudC4KKyAgICB2aXJ0dWFsIEdyQ29udGV4dCogY3JlYXRlT3JHZXRPZmZzY3Jl
ZW5HckNvbnRleHRGb3JNYWluVGhyZWFkKCkgeyByZXR1cm4gMDsgfQorCisgICAgLy8gQ3JlYXRl
cyBhIEdyQ29udGV4dCB0aGF0IGlzIGJvdW5kIHRvIHRoZSBvZmZzY3JlZW4gY29udGV4dCBmb3Ig
dGhlIGNvbXBvc2l0b3IgdGhyZWFkLCBvciByZXR1cm5zIHRoZSBhbHJlYWR5LWV4aXN0aW5nIEdy
Q29udGV4dC4KKyAgICAvLyBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUgR3JDb250ZXh0IGNyZWF0
ZWQgcGVyIGluc3RhbmNlIG9mIHRoZSBjbGllbnQuCisgICAgdmlydHVhbCBHckNvbnRleHQqIGNy
ZWF0ZU9yR2V0T2Zmc2NyZWVuR3JDb250ZXh0Rm9yQ29tcG9zaXRvclRocmVhZCgpIHsgcmV0dXJu
IDA7IH0KKwogICAgIC8vIEluZGljYXRlcyB0aGF0IGEgZnJhbWUgd2lsbCBiZSBjb21taXR0ZWQg
dG8gdGhlIGltcGwgc2lkZSBvZiB0aGUgY29tcG9zaXRvcgogICAgIC8vIGZvciByZW5kZXJpbmcu
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxDb21taXQoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuY3BwCmluZGV4IGQxZDVjYjExMTdmNTNjNGVlMjdjM2FjYTQyNzZjMjk5NjdmY2U1NzMu
LmE3MDc0YjdlZWZlN2QzMGU5ODMyMjNhMmY5MDQ3YjI1YzUwNTVjNmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmNwcApAQCAtOTUsNyArOTUsNiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gZ2V0T3JDcmVhdGVDb250ZXh0Rm9ySW1wbFRocmVhZChDb250ZXh0
T3BlcgogCiBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0Rm9ySW1wbFRocmVhZCgpCiB7Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CiAgICAgcmV0dXJuIGdldE9yQ3JlYXRlQ29udGV4dEZvckltcGxUaHJlYWQoR2V0KTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDQwZjg4NGU3
YWViOTA2MTdmMzBmYTMyYzEwMDY3OTZlYjk4NDk2YWYuLjhmOTgyYWY4OTYxYTc5OWIwMmEzMDAy
ZGE3NDU4ZDA4MzU3YWFjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3
SW1wbC5jcHAKQEAgLTQxNTgsNiArNDE1OCwzMCBAQCBXZWJDb21wb3NpdG9yT3V0cHV0U3VyZmFj
ZSogV2ViVmlld0ltcGw6OmNyZWF0ZU91dHB1dFN1cmZhY2UoKQogICAgIHJldHVybiBtX2NsaWVu
dC0+Y3JlYXRlT3V0cHV0U3VyZmFjZSgpOwogfQogCitXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNEKiBXZWJWaWV3SW1wbDo6Y3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0M2RGb3JNYWluVGhy
ZWFkKCkKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpleHRyYWN0V2Vi
R3JhcGhpY3NDb250ZXh0M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldCgpLmdldCgpKTsK
K30KKworV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogV2ViVmlld0ltcGw6OmNyZWF0ZU9y
R2V0T2Zmc2NyZWVuQ29udGV4dDNkRm9yQ29tcG9zaXRvclRocmVhZCgpCit7CisgICAgaWYgKCFT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6aGF2ZUZvckltcGxUaHJlYWQoKSAmJiAhU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZvckltcGxUaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZXh0cmFjdFdlYkdyYXBoaWNz
Q29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGb3JJbXBsVGhyZWFkKCkuZ2V0
KCkpOworfQorCitHckNvbnRleHQqIFdlYlZpZXdJbXBsOjpjcmVhdGVPckdldE9mZnNjcmVlbkdy
Q29udGV4dEZvck1haW5UaHJlYWQoKQoreworICAgIHJldHVybiBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0KCktPmdyQ29udGV4dCgpOworfQorCitHckNvbnRleHQqIFdlYlZpZXdJbXBsOjpj
cmVhdGVPckdldE9mZnNjcmVlbkdyQ29udGV4dEZvckNvbXBvc2l0b3JUaHJlYWQoKQoreworICAg
IGlmICghU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmhhdmVGb3JJbXBsVGhyZWFkKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0Rm9y
SW1wbFRocmVhZCgpLT5nckNvbnRleHQoKTsKK30KKwogV2ViSW5wdXRIYW5kbGVyKiBXZWJWaWV3
SW1wbDo6Y3JlYXRlSW5wdXRIYW5kbGVyKCkKIHsKICAgICBXZWJDb21wb3NpdG9ySW5wdXRIYW5k
bGVySW1wbCogaGFuZGxlciA9IG5ldyBXZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggMDIyNjYyOTIxYjIy
NmY3MzAyODkyOGYwZmQzODNlN2E0OWQ3NTdjOS4uMTIxNDBlNTZjZWIwMDY3MDk3MzI0ZjhmZjVh
ZWU2YTJjYzljZmUwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CkBAIC0zMjEsNiArMzIxLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYkNvbXBvc2l0b3JP
dXRwdXRTdXJmYWNlKiBjcmVhdGVPdXRwdXRTdXJmYWNlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY3JlYXRlT3V0cHV0U3VyZmFjZShib29sIHN1Y2Nlc3MpIE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgV2ViSW5wdXRIYW5kbGVyKiBjcmVhdGVJbnB1dEhhbmRsZXIoKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNyZWF0ZU9yR2V0
T2Zmc2NyZWVuQ29udGV4dDNkRm9yTWFpblRocmVhZCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY3JlYXRlT3JHZXRPZmZzY3JlZW5Db250ZXh0
M2RGb3JDb21wb3NpdG9yVGhyZWFkKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBHckNvbnRleHQq
IGNyZWF0ZU9yR2V0T2Zmc2NyZWVuR3JDb250ZXh0Rm9yTWFpblRocmVhZCgpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgR3JDb250ZXh0KiBjcmVhdGVPckdldE9mZnNjcmVlbkdyQ29udGV4dEZvckNv
bXBvc2l0b3JUaHJlYWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbENvbW1pdCgp
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29t
bWl0QW5kRHJhd0ZyYW1lKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186699</attachid>
            <date>2013-02-05 14:09:37 -0800</date>
            <delta_ts>2013-02-05 15:43:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107776-20130205170615.patch</filename>
            <type>text/plain</type>
            <size>10991</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA0OGY4ODE0NTlhOTk4
MDkyODY1Nzg0MzM3YmExOTgyNmVkODQ2OGY1Li42MDM4ZGJhOTFhY2IyMjM5OTAwODdjYTMyZTdh
ZTgxOTc1YzdmYmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wMi0wNSAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IFByb3ZpZGUgY29tcG9zaXRvciBvZmZzY3JlZW4gY29udGV4dCB0aHJvdWdoIHRoZSBXZWJMYXll
clRyZWVWaWV3Q2xpZW50IGludGVyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA3Nzc2CisKKyAgICAgICAgTWFrZSAiY3JlYXRlR3JHTEludGVy
ZmFjZSIgdGhlIHByZWZlcnJlZCB2aXJ0dWFsIG1ldGhvZCBmb3IKKyAgICAgICAgV2ViR3JhcGhp
Y3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25zIHRvIG92ZXJyaWRlLiBGb3Igbm93IGl0CisgICAg
ICAgIGp1c3QgY2FsbHMgdGhlIG9sZCBtZXRob2QgaW4gaXRzIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBj
aHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkdyYXBo
aWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZUdyR0xJbnRlcmZhY2UpOgorCiAyMDEzLTAyLTAyICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNo
YWVsbkBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRmlsZVN5c3RlbSBtb2RzOiBD
aGFuZ2VzIHRvIHNuYXBzaG90IGZpbGUgY3JlYXRpb24gdG8gcmVkdWNlIGRlcGVuZGVuY2llcyBv
biBibG9icy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlZmZkNTg0YmM1Zjc4NDFiNWIxYmYxYmIyYzM0Y2I3NDIx
YjAwODdkLi4yYzQ1MTkyMTU2YTJlMGFhMTViNThiNTg2YThkYzcyYzIwMmQ2OGE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTMtMDItMDUgIERhbmEgSmFuc2VucyAgPGRhbmFrakBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBQcm92aWRlIGNvbXBvc2l0b3Igb2Zm
c2NyZWVuIGNvbnRleHQgdGhyb3VnaCB0aGUgV2ViTGF5ZXJUcmVlVmlld0NsaWVudCBpbnRlcmZh
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzc3
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93
IHRoZSBjb21wb3NpdG9yIHRocmVhZCdzIGNvbnRleHQgdG8gYmUgcmV0cmlldmVkIG9uIGVpdGhl
ciB0aHJlYWQsCisgICAgICAgIHNvIHRoZSBtYWluIHRocmVhZCBjYW4gY3JlYXRlIGFuZCBwYXNz
IHRoZSBjb250ZXh0IHRvIHRoZSBpbXBsIHRocmVhZAorICAgICAgICB2aWEgaXRzIG93biBtZWNo
YW5pc21zLgorCisgICAgICAgIE1vdmUgdGhlIGNvZGUgdG8gYmluZCB0aGUgR3JHTEludGVyZmFj
ZSB0byBhIFdlYkdyYXBoaWNzQ29udGV4dDNEIGludG8KKyAgICAgICAgY2hyb21pdW0ncyBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuIFRoZSBjaHJvbWl1bS1zaWRlIGNvZGUgd2lsbCBuZWVkCisg
ICAgICAgIHRvIGltcGxlbWVudCB0aGlzIGNvZGUgaXRzZWxmLgorCisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpnckNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGb3JJbXBsVGhyZWFkKToKKwogMjAxMy0w
Mi0wNCAgVG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taWl1bS5vcmc+CiAKICAgICAgICAgWFNTIEF1
ZGl0b3IgYnlwYXNzIHZpYSBzdmcgdGFncyBhbmQgeGxpbms6aHJlZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCAwNWQyODQ2ZWJkYTk4ZjM1YjczZTFhOTRjYTg2NmM1ZDYyZGQzNGNiLi40
N2VlOTVkMjc1YjhhZThjYWUyNzFlNmM0YjNkMGExOGE1ZGY2MmZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTAyLTA1ICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gUHJvdmlkZSBjb21wb3Np
dG9yIG9mZnNjcmVlbiBjb250ZXh0IHRocm91Z2ggdGhlIFdlYkxheWVyVHJlZVZpZXdDbGllbnQg
aW50ZXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDc3NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYktpdC5neXA6CisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcDog
UmVtb3ZlZC4KKwogMjAxMy0wMi0wNCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBNb3ZlIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
IHRvIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMv
V2ViR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCBmYzk2N2QwNTc4Y2Q1MDlkZTc1OTljZThkZWUy
ODVkZGE5MmQxNzBkLi5hZTE5ZjRmZmM3YWM4ZTIxODNkNGEyYjY3NDQ2Y2M5MmZiMDNkNDkyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29u
dGV4dDNELmgKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGlj
c0NvbnRleHQzRC5oCkBAIC00NzIsNyArNDcyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBhc3luY1RleEltYWdlMkRDSFJPTUlVTShXR0MzRGVudW0gdGFyZ2V0LCBXR0MzRGludCBsZXZl
bCwgV0dDM0RlbnVtIGludGVybmFsZm9ybWF0LCBXR0MzRHNpemVpIHdpZHRoLCBXR0MzRHNpemVp
IGhlaWdodCwgV0dDM0RpbnQgYm9yZGVyLCBXR0MzRGVudW0gZm9ybWF0LCBXR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXN5bmNUZXhTdWJJ
bWFnZTJEQ0hST01JVU0oV0dDM0RlbnVtIHRhcmdldCwgV0dDM0RpbnQgbGV2ZWwsIFdHQzNEaW50
IHhvZmZzZXQsIFdHQzNEaW50IHlvZmZzZXQsIFdHQzNEc2l6ZWkgd2lkdGgsIFdHQzNEc2l6ZWkg
aGVpZ2h0LCBXR0MzRGVudW0gZm9ybWF0LCBXR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzKSB7IH0KIAotICAgIEdyR0xJbnRlcmZhY2UqIGNyZWF0ZUdyR0xJbnRlcmZhY2UoKTsKKyAg
ICAvLyBGSVhNRTogTWFrZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBjbGFzcyBvdmVycmlkZSB0
aGlzIG1ldGhvZCBpbnN0ZWFkIGFuZCB0aGVuIHJlbW92ZSBvbkNyZWF0ZUdyR0xJbnRlcmZhY2Uo
KS4KKyAgICB2aXJ0dWFsIEdyR0xJbnRlcmZhY2UqIGNyZWF0ZUdyR0xJbnRlcmZhY2UoKSB7IHJl
dHVybiBvbkNyZWF0ZUdyR0xJbnRlcmZhY2UoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCBHckdMSW50ZXJmYWNlKiBvbkNyZWF0ZUdyR0xJbnRlcmZhY2UoKSB7IHJldHVybiAwOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKaW5kZXggMGQ1NzFiNGJjNzg4
ZTJkYTE5YzE1OWMyMzBmODQ2Nzk0MWYxODdmYS4uZWJjZGNhODYyMjE0MDk3YTA0Njk1MjExYTAz
OTY3MmE0YWM1OTE5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNw
cApAQCAtNzEsNyArNzEsNiBAQCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoKQogICAgIGlmIChtX2dyQ29udGV4dCkgewogICAgICAgICBtX2ltcGwt
PnNldE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTSgwKTsKICAgICAgICAg
bV9nckNvbnRleHQtPmNvbnRleHREZXN0cm95ZWQoKTsKLSAgICAgICAgR3JTYWZlVW5yZWYobV9n
ckNvbnRleHQpOwogICAgIH0KIH0KIApAQCAtMTE0LDE3ICsxMTMsMzMgQEAgcHJpdmF0ZToKICAg
ICBHckNvbnRleHQqIG1fY29udGV4dDsKIH07CiAKK25hbWVzcGFjZSB7Cit2b2lkIGJpbmRXZWJH
cmFwaGljc0NvbnRleHQzREdMQ29udGV4dENhbGxiYWNrKGNvbnN0IEdyR0xJbnRlcmZhY2UqIGlu
dGVyZmFjZSkKK3sKKyAgICByZWludGVycHJldF9jYXN0PFdlYktpdDo6V2ViR3JhcGhpY3NDb250
ZXh0M0QqPihpbnRlcmZhY2UtPmZDYWxsYmFja0RhdGEpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
K30KK30KKwogR3JDb250ZXh0KiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdyQ29udGV4dCgp
CiB7Ci0gICAgaWYgKCFtX2dyQ29udGV4dCkgewotICAgICAgICBTa0F1dG9UVW5yZWY8R3JHTElu
dGVyZmFjZT4gaW50ZXJmYWNlKG1faW1wbC0+Y3JlYXRlR3JHTEludGVyZmFjZSgpKTsKLSAgICAg
ICAgbV9nckNvbnRleHQgPSBHckNvbnRleHQ6OkNyZWF0ZShrT3BlbkdMX1NoYWRlcnNfR3JFbmdp
bmUsIHJlaW50ZXJwcmV0X2Nhc3Q8R3JQbGF0Zm9ybTNEQ29udGV4dD4oaW50ZXJmYWNlLmdldCgp
KSk7Ci0gICAgICAgIGlmIChtX2dyQ29udGV4dCkgewotICAgICAgICAgICAgbV9nckNvbnRleHQt
PnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhHYW5lc2hUZXh0dXJlQ2FjaGVDb3VudCwgbWF4R2Fu
ZXNoVGV4dHVyZUNhY2hlQnl0ZXMpOwotICAgICAgICAgICAgbV9nckNvbnRleHRNZW1vcnlBbGxv
Y2F0aW9uQ2FsbGJhY2tBZGFwdGVyID0gYWRvcHRQdHIobmV3IEdyTWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0FkYXB0ZXIobV9nckNvbnRleHQpKTsKLSAgICAgICAgICAgIG1faW1wbC0+
c2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKG1fZ3JDb250ZXh0TWVt
b3J5QWxsb2NhdGlvbkNhbGxiYWNrQWRhcHRlci5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgaWYgKG1fZ3JDb250ZXh0KQorICAgICAgICByZXR1cm4gbV9nckNvbnRleHQ7CisKKyAgICBT
a0F1dG9UVW5yZWY8R3JHTEludGVyZmFjZT4gaW50ZXJmYWNlKG1faW1wbC0+Y3JlYXRlR3JHTElu
dGVyZmFjZSgpKTsKKyAgICBpZiAoIWludGVyZmFjZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpbnRlcmZhY2UtPmZDYWxsYmFjayA9IGJpbmRXZWJHcmFwaGljc0NvbnRleHQzREdMQ29udGV4
dENhbGxiYWNrOworICAgIGludGVyZmFjZS0+ZkNhbGxiYWNrRGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8R3JHTEludGVyZmFjZUNhbGxiYWNrRGF0YT4obV9pbXBsLmdldCgpKTsKKworICAgIG1fZ3JD
b250ZXh0LnJlc2V0KEdyQ29udGV4dDo6Q3JlYXRlKGtPcGVuR0xfU2hhZGVyc19HckVuZ2luZSwg
cmVpbnRlcnByZXRfY2FzdDxHclBsYXRmb3JtM0RDb250ZXh0PihpbnRlcmZhY2UuZ2V0KCkpKSk7
CisgICAgaWYgKCFtX2dyQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2dyQ29u
dGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heEdhbmVzaFRleHR1cmVDYWNoZUNvdW50LCBt
YXhHYW5lc2hUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgbV9nckNvbnRleHRNZW1vcnlBbGxvY2F0
aW9uQ2FsbGJhY2tBZGFwdGVyID0gYWRvcHRQdHIobmV3IEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5n
ZWRDYWxsYmFja0FkYXB0ZXIobV9nckNvbnRleHQpKTsKKyAgICBtX2ltcGwtPnNldE1lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTShtX2dyQ29udGV4dE1lbW9yeUFsbG9jYXRp
b25DYWxsYmFja0FkYXB0ZXIuZ2V0KCkpOworCiAgICAgcmV0dXJuIG1fZ3JDb250ZXh0OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vc3VwcG9ydC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAppbmRleCA1YmJiODVhMjJmY2Fi
MWQ1MDVjNDBjZjVmZWY2OWUzNzQwMjdkNmU0Li5kMTkzYTZjODMyZTNiNGZhY2VmMWUzNWM5MGNj
M2Y4NzBlMjJmMWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9zdXBwb3J0L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKQEAg
LTExNCw3ICsxMTQsNyBAQCBwcml2YXRlOgogICAgIC8vIHVzZWQgdG8gcmVzaXplIHRoZSBDYW52
YXMuCiAgICAgU2tCaXRtYXAgbV9yZXNpemluZ0JpdG1hcDsKIAotICAgIEdyQ29udGV4dCogbV9n
ckNvbnRleHQ7CisgICAgU2tBdXRvVFVucmVmPEdyQ29udGV4dD4gbV9nckNvbnRleHQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcApp
bmRleCBkMWQ1Y2IxMTE3ZjUzYzRlZTI3YzNhY2E0Mjc2YzI5OTY3ZmNlNTczLi5hNzA3NGI3ZWVm
ZTdkMzBlOTgzMjIzYTJmOTA0N2IyNWM1MDU1YzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5jcHAKQEAgLTk1LDcgKzk1LDYgQEAgc3RhdGljIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGdldE9yQ3JlYXRlQ29udGV4dEZvckltcGxUaHJlYWQoQ29udGV4dE9wZXIKIAogUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZv
ckltcGxUaHJlYWQoKQogewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVy
biBnZXRPckNyZWF0ZUNvbnRleHRGb3JJbXBsVGhyZWFkKEdldCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAppbmRleCA0MTc2YWY4MjMxMTI0MWRhYmI3MTkwZWFmZGNkMDllMGZiNDJl
ZGZlLi5lMzZkMzRmYmM1ODQ0ZTRiZTE1MDEyY2ZhZjBkYjc5NmZkY2QwMmM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC00ODgsNyArNDg4LDYgQEAKICAgICAgICAgICAgICAgICAn
c3JjL1dlYkdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJHZW9sb2NhdGlvblBvc2l0aW9uLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJHbHlwaENhY2hlLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9XZWJHcmFw
aGljc0NvbnRleHQzRC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSGlzdG9yeUl0ZW0u
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhpdFRlc3RSZXN1bHQuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkljb25Mb2FkaW5nQ29tcGxldGlvbkltcGwuY3BwJywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q2MjE4NDZmMmI2ZmY4NDYxYzMxNmNmYmFh
NDdhOTk4MzU3MTU0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgPHB1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oPgotCi0jaW5jbHVkZSAi
R3JHTEludGVyZmFjZS5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotbmFtZXNwYWNlIHsKLSAg
ICB2b2lkIGJpbmRXZWJHcmFwaGljc0NvbnRleHQzREdMQ29udGV4dENhbGxiYWNrKGNvbnN0IEdy
R0xJbnRlcmZhY2UqIGludGVyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR3JhcGhpY3NDb250ZXh0M0QqPihpbnRlcmZhY2UtPmZDYWxsYmFja0RhdGEpLT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICB9Ci19Ci0KLUdyR0xJbnRlcmZhY2UqIFdlYkdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVHckdMSW50ZXJmYWNlKCkKLXsKLSAgICBHckdMSW50ZXJmYWNlKiBpbnRl
cmZhY2UgPSBvbkNyZWF0ZUdyR0xJbnRlcmZhY2UoKTsKLSAgICBpZiAoaW50ZXJmYWNlKSB7Ci0g
ICAgICAgIGludGVyZmFjZS0+ZkNhbGxiYWNrID0gYmluZFdlYkdyYXBoaWNzQ29udGV4dDNER0xD
b250ZXh0Q2FsbGJhY2s7Ci0gICAgICAgIGludGVyZmFjZS0+ZkNhbGxiYWNrRGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8R3JHTEludGVyZmFjZUNhbGxiYWNrRGF0YT4odGhpcyk7Ci0gICAgfQotICAg
IHJldHVybiBpbnRlcmZhY2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>