<?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>40162</bug_id>
          
          <creation_ts>2010-06-04 05:19:14 -0700</creation_ts>
          <short_desc>Prevent Geolocation making callbacks to a ScriptExecutionContext that no longer exists</short_desc>
          <delta_ts>2010-06-09 08:51:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>39879</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andreip</cc>
    
    <cc>ap</cc>
    
    <cc>dumi</cc>
    
    <cc>hans</cc>
    
    <cc>japhet</cc>
    
    <cc>jorlow</cc>
    
    <cc>sam</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>234166</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-04 05:19:14 -0700</bug_when>
    <thetext>Geolocation callbacks are invoked using the ScriptExecutionContext used to make the corresponding method call. In the case where that context is not the context of the frame that owns the Geolocation object, we can&apos;t rely on disconnectFrame() to tell us when that context has gone away. Instead, we must check at callback time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234168</commentid>
    <comment_count>1</comment_count>
      <attachid>57865</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-04 05:24:20 -0700</bug_when>
    <thetext>Created attachment 57865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234173</commentid>
    <comment_count>2</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-04 05:36:29 -0700</bug_when>
    <thetext>The fix for this proposed in https://bugs.webkit.org/show_bug.cgi?id=39879#c11 was have the callbacks inherit from ActiveDOMObject, so as to provide way to know when the ScriptExecutionContext has gone away.

The problem is that the ScriptExecutionContext is ref&apos;ed from script, so isn&apos;t destroyed until the GC runs. So we may not get the notification that the context is gone until some time after it is disconnected from its frame. But the current code path in JSCallbackData obtains the ScriptExecutionContext through DOMWindow::document() which in turn uses the Frame. So there exists a time between frame detachment and garbage collection when JSCallbackData can&apos;t get to the ScriptExecutionContext, but we haven&apos;t yet been notified through ActiveDOMObject that it&apos;s gone.

The call to DOMWindow::document() fails gracefully if the frame is detached, so we can fix this bug by modifying JSCallbackData without using ActiveDOMObject.

If we want to use ActiveDOMObject, I think more substantial changes will be required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234193</commentid>
    <comment_count>3</comment_count>
      <attachid>57865</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-04 06:41:09 -0700</bug_when>
    <thetext>Comment on attachment 57865
Patch

LayoutTests/ChangeLog:8
 +          * fast/dom/Geolocation/callback-to-deleted-context-expected.txt: Added.
This is the only one that showed up in the diff.

WebCore/ChangeLog:6
 +          https://bugs.webkit.org/show_bug.cgi?id=40162
All the detail in the bug should be here as well.

I&apos;m fine with doing this change then looking at doing ActiveDOMObject, but I still think the latter should be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234197</commentid>
    <comment_count>4</comment_count>
      <attachid>57865</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-04 06:59:27 -0700</bug_when>
    <thetext>Comment on attachment 57865
Patch

nm...see the files now..not sure what happened

As discussed, I think this is a nice, simple fix that&apos;d be good for release branches and such, so we should put it in.  But then you should look closer at the current behavior and why it was done this way.  I&apos;m pretty sure that what it currently does is wrong and should be changed.LayoutTests/fast/dom/Geolocation/script-tests/callback-to-deleted-context.js:12
 +      }, 100);
This seems like a recipe for flake.

LayoutTests/fast/dom/Geolocation/script-tests/callback-to-deleted-context.js:10
 +          testPassed(&apos;No callbacks invoked&apos;);
How do you know that?

LayoutTests/fast/dom/Geolocation/script-tests/callback-to-deleted-context.js:4
 +      iframe.src = &apos;resources/callback-to-deleted-context-inner2.html&apos;;
Isn&apos;t this a race?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234272</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-04 10:35:56 -0700</bug_when>
    <thetext>&gt; The call to DOMWindow::document() fails gracefully if the frame is detached, 

I&apos;m not sure if we should rely on that. Logically, it makes no sense that one cannot easily get a document associated with DOMWindow when there is no frame, and there is a FIXME in DOMWindow::document() saying that we should fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234276</commentid>
    <comment_count>6</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-04 10:38:24 -0700</bug_when>
    <thetext>&gt; I&apos;m not sure if we should rely on that. Logically, it makes no sense that one
&gt; cannot easily get a document associated with DOMWindow when there is no frame,
&gt; and there is a FIXME in DOMWindow::document() saying that we should fix that.
OK, so I think the best solution is to use ActiveDOMObject as well as adding this check. I&apos;ve been looking at the V8 bindings and it looks like an equivalent approach will be required there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234691</commentid>
    <comment_count>7</comment_count>
      <attachid>57984</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-06 15:58:00 -0700</bug_when>
    <thetext>Created attachment 57984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234778</commentid>
    <comment_count>8</comment_count>
      <attachid>57984</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-07 04:20:37 -0700</bug_when>
    <thetext>Comment on attachment 57984
Patch

WebCore/bindings/v8/custom/V8GeolocationCustom.cpp:59
 +      Frame* frame = V8Proxy::retrieveFrameForCurrentContext();
Just get the current context directly.

WebCore/bindings/v8/custom/V8GeolocationCustom.cpp:78
 +      Frame* frame = V8Proxy::retrieveFrameForCurrentContext();
ditto

WebCore/bindings/v8/custom/V8CustomPositionCallback.cpp:72
 +      // Protect the script context until the callback returns.
Are you sure we need one of these?

WebCore/bindings/js/JSCustomPositionErrorCallback.cpp:48
 +      // ActiveDOMObject will null our pointer to the ScriptExecutionContext when
I&apos;d lean towards not wrapping this comment.

WebCore/bindings/js/JSCustomPositionErrorCallback.cpp:50
 +      if (!scriptExecutionContext())
This is a good start, but ideally you&apos;d be handling resume/suspend/stop instead of just detecting when the scriptExecutionContext has been destructed.

WebCore/ChangeLog:16
 +          The ScriptExecutionContext is ref&apos;ed from script, so isn&apos;t destroyed until the
so _it_ isn&apos;t...

WebCore/ChangeLog:19
 +          accessing the Frame, so an additional check for the Frame is required.
Is any of this still relevant?

Overall, I think this change log description could be made more concise and not lose any interesting info.

WebCore/ChangeLog:21
 +          This change also prevents the V8 bindings from incorrectly holding a reference to the Frame.
We need to make sure this gets fixed in the other bindings.  Maybe hans or dumi would be interested in this, if you&apos;re not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234885</commentid>
    <comment_count>9</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-07 09:28:06 -0700</bug_when>
    <thetext>&gt; Just get the current context directly.
Done

&gt; WebCore/bindings/v8/custom/V8CustomPositionCallback.cpp:72
&gt;  +      // Protect the script context until the callback returns.
&gt; Are you sure we need one of these?
I can&apos;t see a need for it, but if the Frame needed protecting, I guess we need to protect the ScriptExecutionContext. This is what was done with a similar change to Database - http://trac.webkit.org/changeset/60330#file6

&gt; I&apos;d lean towards not wrapping this comment.
Done

&gt; This is a good start, but ideally you&apos;d be handling resume/suspend/stop instead of just detecting when the scriptExecutionContext has been destructed.
Yes, the reason I haven&apos;t done this here is that it&apos;s likely that the Geolocation object itself will end up being an ActiveDOMObject as part of Bug 34082. So we may not need the callbacks to also implement this behaviour if the Geolocation object is doing so anyway.

&gt; WebCore/ChangeLog:16
&gt;  +          The ScriptExecutionContext is ref&apos;ed from script, so isn&apos;t
&gt; destroyed until the
&gt; so _it_ isn&apos;t...
Done

&gt; WebCore/ChangeLog:19
&gt;  +          accessing the Frame, so an additional check for the Frame is required.
&gt; Is any of this still relevant?
Yes, I&apos;m not aware of any current way to make the callbacks (for either V8 or JSC) without going through the Frame.

&gt; Overall, I think this change log description could be made more concise and
&gt; not lose any interesting info.
Done

&gt; We need to make sure this gets fixed in the other bindings.  Maybe hans or
&gt; dumi would be interested in this, if you&apos;re not?
I&apos;m not aware of any other bindings that make this mistake. We already have Bug  40112 for the fact that Database holds onto the ScriptExecutionContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234888</commentid>
    <comment_count>10</comment_count>
      <attachid>58038</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-07 09:36:38 -0700</bug_when>
    <thetext>Created attachment 58038
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234900</commentid>
    <comment_count>11</comment_count>
      <attachid>58038</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-07 09:53:18 -0700</bug_when>
    <thetext>Comment on attachment 58038
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235217</commentid>
    <comment_count>12</comment_count>
      <attachid>58038</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-06-08 05:29:43 -0700</bug_when>
    <thetext>Comment on attachment 58038
Patch

Landed manually as r60840 http://trac.webkit.org/changeset/60840 with addition to GTK skipped list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235290</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-08 09:53:26 -0700</bug_when>
    <thetext>Sorry for not commenting earlier, it&apos;s a busy week.

I strongly dislike having bindings object inherit from ActiveDOMObject. These are not DOM objects regardless of how you slice it!

I think that a better way to fix this would be to factor out &quot;request&quot; objects associated with Geolocation object, and make them reference Geolocation. That way, the design would be closer XMLHttpRequest, and being similar to existing active objects can&apos;t do you any harm.

+    ScriptExecutionContext* context = globalObject()-&gt;scriptExecutionContext();
+    // We will fail to get the context if the frame has been detached.

That&apos;s pretty much the same as relying on DOMWindow::document() returning null. There isn&apos;t any deep reason why it&apos;s currently returning null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235295</commentid>
    <comment_count>14</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-08 10:01:18 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Sorry for not commenting earlier, it&apos;s a busy week.
&gt; 
&gt; I strongly dislike having bindings object inherit from ActiveDOMObject. These are not DOM objects regardless of how you slice it!

Maybe we should change the name then?  ActiveDOMObject seems like the best way to get notifications about a ScriptExecutionContext&apos;s state changing.  (IDBRequest is another example of an object that inherits from ActiveDOMObject for the same reason.)
 
&gt; I think that a better way to fix this would be to factor out &quot;request&quot; objects associated with Geolocation object, and make them reference Geolocation. That way, the design would be closer XMLHttpRequest, and being similar to existing active objects can&apos;t do you any harm.

Could you explain further what you&apos;re proposing?  I don&apos;t really understand (or know much about how XMLHttpRequest works).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235576</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-08 16:42:49 -0700</bug_when>
    <thetext>My idea is:
- Geolocation can be a tiny object that implements the API (similar to Navigator);
- it won&apos;t be &quot;active&quot; in any way;
- whenever a request for position is made (either one shot or repeating), an object to handle this request is created. In fact, it will be similar to DOMTimer even more than to XMLHttpRequest;
- these request objects are ActiveDOMObjects. Like DOMTimers, they are not directly exposed to JS;
- I&apos;m not really sure who should track granted permissions. Logically, it sounds like this is a job for SecurityOrigin.

Does this make sense? I think that the similarity to DOMTimer is very close - even down to watchers being represented as long IDs, like timers created with setInterval() are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235708</commentid>
    <comment_count>16</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-09 02:06:47 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; My idea is:
&gt; - Geolocation can be a tiny object that implements the API (similar to Navigator);
&gt; - it won&apos;t be &quot;active&quot; in any way;
&gt; - whenever a request for position is made (either one shot or repeating), an object to handle this request is created. In fact, it will be similar to DOMTimer even more than to XMLHttpRequest;
&gt; - these request objects are ActiveDOMObjects. Like DOMTimers, they are not directly exposed to JS;
&gt; - I&apos;m not really sure who should track granted permissions. Logically, it sounds like this is a job for SecurityOrigin.
&gt; 
&gt; Does this make sense? I think that the similarity to DOMTimer is very close - even down to watchers being represented as long IDs, like timers created with setInterval() are.

This seems like a very reasonable design, but what are the upsides of adding the extra layer to the design?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235790</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-06-09 08:28:42 -0700</bug_when>
    <thetext>Mostly, ease of understanding and refactoring. Not long ago, DOMTimer code was all in DOMWindow, and we had to factor it out to more easily fix bugs, and to support timers in workers. Geolocation design is pretty much identical, so solving the same problems differently isn&apos;t good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235798</commentid>
    <comment_count>18</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-06-09 08:51:51 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Mostly, ease of understanding and refactoring. Not long ago, DOMTimer code was all in DOMWindow, and we had to factor it out to more easily fix bugs, and to support timers in workers. Geolocation design is pretty much identical, so solving the same problems differently isn&apos;t good.

I agree that solving the problem in two ways is not good, but it seems as though we do it all over the place in WebKit and historically we haven&apos;t put too much emphasis on cleaning up the worse ways of doing things.  When you refactor code, there is the risk of introducing new bugs and there is of course opportunity cost.  That said, I think a strategically placed FIXME (so the next time someone is writing code based on the old code they get a pointer towards the better way of doing something) is the very least you should do in such a case.

Anyway, I was talking to Steve and he was telling me that there is a lot of code in GeoLocation that&apos;s kind of a mess.  For example, there are two interfaces.  And it&apos;s pretty clear now that the second one is far superior and that the first should be merged into it.  He also seemed to think the code would be a bit cleaner if the code was factored as you suggested.  And I think I have him convinced the callbacks should handle suspend/resume more gracefully.  That on top of the fact that Steve&apos;s already waist deep in GeoLocation code, it seems like it might make sense for him to just finish the job.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57865</attachid>
            <date>2010-06-04 05:24:20 -0700</date>
            <delta_ts>2010-06-06 15:57:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40162-20100604132418.patch</filename>
            <type>text/plain</type>
            <size>7075</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDY3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMDQgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFByZXZlbnQgR2VvbG9jYXRpb24gbWFraW5nIGNhbGxiYWNrcyB0byBhIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgdGhhdCBubyBsb25nZXIgZXhpc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE2MgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL0dl
b2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC5odG1sCisKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbGxi
YWNrRGF0YTo6aW52b2tlQ2FsbGJhY2spOgorCiAyMDEwLTA2LTA0ICBNYXR0aGV3IERlbGFuZXkg
IDxtZGVsYW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2aXNpb24gNjA2
NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjAsNyArNjAsMTEgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6aW52b2tlQ2Fs
bGJhY2soTQogICAgIH0KICAgICAKICAgICBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLT50
aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2xvYmFsT2JqZWN0
KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpIAorICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBnbG9iYWxPYmplY3QoKS0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
KworICAgIEpTVmFsdWUgcmVzdWx0ID0gY29udGV4dC0+aXNEb2N1bWVudCgpIAogICAgICAgICA/
IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBjYWxsYmFjaygpLCBhcmdzKQogICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBmdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjYWxsYmFjaygpLCBhcmdzKTsKICAgICBnbG9iYWxP
YmplY3QoKS0+Z2xvYmFsRGF0YSgpLT50aW1lb3V0Q2hlY2tlci5zdG9wKCk7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2MDY3NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDEwLTA2LTA0ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29v
Z2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcmV2ZW50IEdlb2xvY2F0aW9uIG1ha2luZyBjYWxsYmFja3MgdG8gYSBTY3JpcHRFeGVjdXRp
b25Db250ZXh0IHRoYXQgbm8gbG9uZ2VyIGV4aXN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDAxNjIKKworICAgICAgICAqIGZhc3QvZG9tL0dlb2xv
Y2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4
dC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMv
Y2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0LWlubmVyMS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250
ZXh0LWlubmVyMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9z
Y3JpcHQtdGVzdHMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0LmpzOiBBZGRlZC4KKwogMjAx
MC0wNi0wNCAgTWF0dGhldyBEZWxhbmV5ICA8bWRlbGFuZXlAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2Vv
bG9jYXRpb24vY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9jYWxsYmFjay10by1kZWxl
dGVkLWNvbnRleHQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorZnJhbWUgIjwhLS1mcmFtZVBhdGggLy88
IS0tZnJhbWUwLS0+LS0+IiAtIGhhcyAxIG9udW5sb2FkIGhhbmRsZXIocykKK1Rlc3RzIHRoYXQg
d2hlbiBhIEdlb2xvY2F0aW9uIHJlcXVlc3QgaXMgbWFkZSBmcm9tIGEgcmVtb3RlIGZyYW1lLCBh
bmQgdGhhdCBmcmFtZSdzIHNjcmlwdCBjb250ZXh0IGdvZXMgYXdheSBiZWZvcmUgdGhlIEdlb2xv
Y2F0aW9uIGNhbGxiYWNrIGlzIG1hZGUsIHRoZSBjYWxsYmFjayBpcyBub3QgbWFkZS4gSWYgdGhl
IGNhbGxiYWNrIGlzIGF0dGVtcHRlZCwgYSBjcmFzaCB3aWxsIG9jY3VyLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBObyBjYWxsYmFja3MgaW52b2tlZAorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNr
LXRvLWRlbGV0ZWQtY29udGV4dC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0Lmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
ZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQtaW5u
ZXIxLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24v
cmVzb3VyY2VzL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC1pbm5lcjEuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9jYWxs
YmFjay10by1kZWxldGVkLWNvbnRleHQtaW5uZXIxLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjYgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorICA8aGVhZD4KKyAgICA8c2NyaXB0PgorICAgICAgZnVuY3Rpb24gbWFrZUdlb2xv
Y2F0aW9uUmVxdWVzdCgpIHsKKyAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLnNldEdlb2xvY2F0aW9u
UGVybWlzc2lvbih0cnVlKTsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oNTEuNDc4LCAtMC4xNjYsIDEwMCk7CisgICAgICAgICAg
fQorCisgICAgICAgICAgLy8gTWFrZSByZXF1ZXN0IGZyb20gcmVtb3RlIGZyYW1lLCB0aGlzIGZy
YW1lIHdpbGwgYmUgZ29uZSBieSB0aGUgdGltZSB0aGUgR2VvbG9jYXRpb24KKyAgICAgICAgICAv
LyBvYmplY3QgYXR0ZW1wdHMgdG8gaW52b2tlIHRoZSBjYWxsYmFjay4KKyAgICAgICAgICB3aW5k
b3cucGFyZW50Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgIHRlc3RGYWlsZWQoJ1N1Y2Nlc3MgY2FsbGJhY2sgaW52b2tl
ZCB1bmV4cGVjdGVkbHknKTsKKyAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAg
ICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIHRlc3RGYWlsZWQoJ0Vycm9yIGNhbGxi
YWNrIGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgp
OworICAgICAgICAgIH0pOworICAgICAgfQorICAgIDwvc2NyaXB0PgorICA8L2hlYWQ+CisgIDxi
b2R5IG9ubG9hZD0id2luZG93LnBhcmVudC5vbkZpcnN0SWZyYW1lTG9hZGVkKCkiIG9udW5sb2Fk
PSJtYWtlR2VvbG9jYXRpb25SZXF1ZXN0KCkiPgorICAgIDxwPlRoaXMgZnJhbWUgc2hvdWxkIGJl
IHJlcGxhY2VkIGJlZm9yZSB0aGUgdGVzdCBlbmRzPC9wPgorICA8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvY2FsbGJhY2st
dG8tZGVsZXRlZC1jb250ZXh0LWlubmVyMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRl
eHQtaW5uZXIyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9s
b2NhdGlvbi9yZXNvdXJjZXMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0LWlubmVyMi5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgPC9oZWFkPgorICA8Ym9k
eSBvbmxvYWQ9IndpbmRvdy5wYXJlbnQub25TZWNvbmRJZnJhbWVMb2FkZWQoKSI+CisgIDwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Njcmlw
dC10ZXN0cy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2NhbGxiYWNrLXRvLWRl
bGV0ZWQtY29udGV4dC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dl
b2xvY2F0aW9uL3NjcmlwdC10ZXN0cy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHdoZW4g
YSBHZW9sb2NhdGlvbiByZXF1ZXN0IGlzIG1hZGUgZnJvbSBhIHJlbW90ZSBmcmFtZSwgYW5kIHRo
YXQgZnJhbWUncyBzY3JpcHQgY29udGV4dCBnb2VzIGF3YXkgYmVmb3JlIHRoZSBHZW9sb2NhdGlv
biBjYWxsYmFjayBpcyBtYWRlLCB0aGUgY2FsbGJhY2sgaXMgbm90IG1hZGUuIElmIHRoZSBjYWxs
YmFjayBpcyBhdHRlbXB0ZWQsIGEgY3Jhc2ggd2lsbCBvY2N1ci4iKTsKKworZnVuY3Rpb24gb25G
aXJzdElmcmFtZUxvYWRlZCgpIHsKKyAgICBpZnJhbWUuc3JjID0gJ3Jlc291cmNlcy9jYWxsYmFj
ay10by1kZWxldGVkLWNvbnRleHQtaW5uZXIyLmh0bWwnOworfQorCitmdW5jdGlvbiBvblNlY29u
ZElmcmFtZUxvYWRlZCgpIHsKKyAgICAvLyBXYWl0IGZvciB0aGUgY2FsbGJhY2tzIHRvIGJlIGlu
dm9rZWQKKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdFBh
c3NlZCgnTm8gY2FsbGJhY2tzIGludm9rZWQnKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfSwgMTAwKTsKK30KKwordmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lm
cmFtZScpOworaWZyYW1lLnNyYyA9ICdyZXNvdXJjZXMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250
ZXh0LWlubmVyMS5odG1sJzsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsKKwor
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57984</attachid>
            <date>2010-06-06 15:58:00 -0700</date>
            <delta_ts>2010-06-07 09:36:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40162-20100606235757.patch</filename>
            <type>text/plain</type>
            <size>21565</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDY5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMTAtMDYtMDQgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFByZXZlbnQgR2VvbG9jYXRpb24gbWFraW5nIGNhbGxiYWNrcyB0byBhIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgdGhhdCBubyBsb25nZXIgZXhpc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE2MgorCisgICAgICAgIEdlb2xvY2F0aW9uIGNhbGxi
YWNrcyBhcmUgaW52b2tlZCB1c2luZyB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB1c2VkIHRv
IG1ha2UgdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgbWV0aG9kIGNhbGwuIEluIHRoZSBjYXNl
IHdoZXJlIHRoYXQgY29udGV4dCBpcyBub3QgdGhlIGNvbnRleHQgb2YgdGhlCisgICAgICAgIGZy
YW1lIHRoYXQgb3ducyB0aGUgR2VvbG9jYXRpb24gb2JqZWN0LCB3ZSBjYW4ndCByZWx5IG9uIGRp
c2Nvbm5lY3RGcmFtZSgpIHRvIHRlbGwgdXMKKyAgICAgICAgd2hlbiB0aGF0IGNvbnRleHQgaGFz
IGdvbmUgYXdheS4gSW5zdGVhZCwgd2UgbXVzdCBjaGVjayBhdCBjYWxsYmFjayB0aW1lLgorCisg
ICAgICAgIFRvIHRyYWNrIHdoZXRoZXIgdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgc3RpbGwg
ZXhpc3RzLCB3ZSBoYXZlIHRoZSBjYWxsYmFja3MgaW5oZXJpdAorICAgICAgICBmcm9tIEFjdGl2
ZURPTU9iamVjdC4KKworICAgICAgICBUaGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBpcyByZWYn
ZWQgZnJvbSBzY3JpcHQsIHNvIGlzbid0IGRlc3Ryb3llZCB1bnRpbCB0aGUKKyAgICAgICAgR0Mg
cnVucy4gU28gd2UgbWF5IG5vdCBnZXQgdGhlIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBjb250ZXh0
IGlzIGdvbmUgdW50aWwgc29tZSB0aW1lIGFmdGVyCisgICAgICAgIGl0IGlzIGRpc2Nvbm5lY3Rl
ZCBmcm9tIGl0cyBmcmFtZS4gSG93ZXZlciwgbWFraW5nIHRoZSBjYWxsYmFjayBjdXJyZW50bHkg
aW52b2x2ZXMgCisgICAgICAgIGFjY2Vzc2luZyB0aGUgRnJhbWUsIHNvIGFuIGFkZGl0aW9uYWwg
Y2hlY2sgZm9yIHRoZSBGcmFtZSBpcyByZXF1aXJlZC4KKworICAgICAgICBUaGlzIGNoYW5nZSBh
bHNvIHByZXZlbnRzIHRoZSBWOCBiaW5kaW5ncyBmcm9tIGluY29ycmVjdGx5IGhvbGRpbmcgYSBy
ZWZlcmVuY2UgdG8gdGhlIEZyYW1lLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL0dlb2xvY2F0
aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC5odG1sCisKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0NhbGxiYWNrRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbGxiYWNrRGF0
YTo6aW52b2tlQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRp
b25DYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3RvbVBvc2l0aW9uQ2FsbGJh
Y2s6OkpTQ3VzdG9tUG9zaXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpKU0N1c3Rv
bVBvc2l0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0N1
c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6SlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmRs
ZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNh
bGxiYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjazo6
VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tUG9z
aXRpb25DYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9t
UG9zaXRpb25DYWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhD
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpoYW5k
bGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25F
cnJvckNhbGxiYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbVBvc2l0aW9uRXJyb3JD
YWxsYmFjazo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhHZW9sb2Nh
dGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVQb3NpdGlvbkNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvc2l0aW9uRXJyb3JDYWxsYmFjayk6CisgICAg
ICAgICogcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmg6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlv
bkNhbGxiYWNrOjpQb3NpdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiBwYWdlL1Bvc2l0aW9uRXJy
b3JDYWxsYmFjay5oOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25FcnJvckNhbGxiYWNrOjpQ
b3NpdGlvbkVycm9yQ2FsbGJhY2spOgorCiAyMDEwLTA2LTA0ICBEaXJrIFNjaHVsemUgIDxrcml0
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHJldmlzaW9uIDYwNjY2
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDcgKzYwLDEyIEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxi
YWNrKE0KICAgICB9CiAgICAgCiAgICAgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS0+dGlt
ZW91dENoZWNrZXIuc3RhcnQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGdsb2JhbE9iamVjdCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSAKKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2xvYmFsT2JqZWN0KCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICAvLyBXZSB3aWxsIGZhaWwgdG8gZ2V0IHRoZSBjb250ZXh0IGlmIHRoZSBm
cmFtZSBoYXMgYmVlbiBkZXRhY2hlZC4KKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNvbnRleHQtPmlzRG9jdW1lbnQo
KSAKICAgICAgICAgPyBKU01haW5UaHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwgY2FsbGJhY2soKSwgYXJncykKICAgICAgICAgOiBKU0M6OmNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgY2FsbGJhY2soKSwgYXJncyk7
CiAgICAgZ2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS0+dGltZW91dENoZWNrZXIuc3RvcCgp
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkNhbGxi
YWNrLmNwcAkocmV2aXNpb24gNjA2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9t
UG9zaXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEyICszOCwxOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBKU0N1c3RvbVBvc2l0
aW9uQ2FsbGJhY2s6OkpTQ3VzdG9tUG9zaXRpb25DYWxsYmFjayhKU09iamVjdCogY2FsbGJhY2ss
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBtX2RhdGEoY2FsbGJhY2ss
IGdsb2JhbE9iamVjdCkKKyAgICA6IFBvc2l0aW9uQ2FsbGJhY2soZ2xvYmFsT2JqZWN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVj
dCkKIHsKIH0KIAogdm9pZCBKU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KEdl
b3Bvc2l0aW9uKiBnZW9wb3NpdGlvbikKIHsKKyAgICAvLyBBY3RpdmVET01PYmplY3Qgd2lsbCBu
dWxsIG91ciBwb2ludGVyIHRvIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHdoZW4KKyAgICAv
LyBpdCBnb2VzIGF3YXkuCisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxKU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2s+IHByb3Rl
Y3QodGhpcyk7CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRpb25F
cnJvckNhbGxiYWNrLmNwcAkocmV2aXNpb24gNjA2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
MTIgKzM4LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAK
IEpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxs
YmFjayhKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Ci0gICAgOiBtX2RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkKKyAgICA6IFBvc2l0aW9uRXJy
b3JDYWxsYmFjayhnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAs
IG1fZGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KQogewogfQogCiB2b2lkIEpTQ3VzdG9tUG9z
aXRpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChQb3NpdGlvbkVycm9yKiBwb3NpdGlvbkVy
cm9yKQogeworICAgIC8vIEFjdGl2ZURPTU9iamVjdCB3aWxsIG51bGwgb3VyIHBvaW50ZXIgdG8g
dGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgd2hlbgorICAgIC8vIGl0IGdvZXMgYXdheS4KKyAg
ICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
UmVmUHRyPEpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrPiBwcm90ZWN0KHRoaXMpOwogCiAg
ICAgSlNDOjpKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJh
Y2suY3BwCShyZXZpc2lvbiA2MDY2NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE1ICsyNiwx
NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tUG9zaXRpb25DYWxs
YmFjay5oIgogCi0jaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21Wb2lkQ2FsbGJhY2suaCIgIC8vIEZvciBpbnZv
a2VDYWxsYmFjawogI2luY2x1ZGUgIlY4R2VvcG9zaXRpb24uaCIKKyNpbmNsdWRlICJWOFByb3h5
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpW
OEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBG
cmFtZSogZnJhbWUpCi0gICAgOiBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
OjpOZXcoY2FsbGJhY2spKQotICAgICwgbV9mcmFtZShmcmFtZSkKK1Y4Q3VzdG9tUG9zaXRpb25D
YWxsYmFjazo6VjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBj
YWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKKyAgICA6IFBvc2l0aW9u
Q2FsbGJhY2soY29udGV4dCkKKyAgICAsIG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD46Ok5ldyhjYWxsYmFjaykpCiB7CiB9CiAKQEAgLTQ3LDcgKzQ4LDE4IEBAIHZvaWQgVjhD
dXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpoYW5kbGVFdmUKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUg
aGFuZGxlU2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQ
cm94eTo6Y29udGV4dChtX2ZyYW1lLmdldCgpKTsKKyAgICAvLyBBY3RpdmVET01PYmplY3Qgd2ls
bCBudWxsIG91ciBwb2ludGVyIHRvIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHdoZW4KKyAg
ICAvLyBpdCBnb2VzIGF3YXkuCisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIXNjcmlwdENvbnRleHQp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBsb29rdXAgb2YgdGhlIHByb3h5IHdpbGwg
ZmFpbCBpZiB0aGUgRnJhbWUgaGFzIGJlZW4gZGV0YWNoZWQuCisgICAgVjhQcm94eSogcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZShzY3JpcHRDb250ZXh0KTsKKyAgICBpZiAoIXByb3h5KQorICAg
ICAgICByZXR1cm47CisKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcHJv
eHktPmNvbnRleHQoKTsKICAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNTcsMTEgKzY5LDExIEBAIHZvaWQgVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpo
YW5kbGVFdmUKICAgICAgICAgdG9WOChwb3NpdGlvbikKICAgICB9OwogCi0gICAgLy8gUHJvdGVj
dCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCi0gICAgUmVmUHRyPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7CisgICAgLy8gUHJvdGVjdCB0aGUgc2NyaXB0IGNvbnRleHQg
dW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ+IHByb3RlY3RvcihzY3JpcHRDb250ZXh0KTsKIAogICAgIGJvb2wgY2FsbGJhY2tSZXR1
cm5WYWx1ZSA9IGZhbHNlOwotICAgIGludm9rZUNhbGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3Ys
IGNhbGxiYWNrUmV0dXJuVmFsdWUsIG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIGludm9rZUNh
bGxiYWNrKG1fY2FsbGJhY2ssIDEsIGFyZ3YsIGNhbGxiYWNrUmV0dXJuVmFsdWUsIHNjcmlwdENv
bnRleHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2suaAkocmV2
aXNpb24gNjA2NjYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0
aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBW
OEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2tfaAogCiAjaW5jbHVkZSAiUG9zaXRpb25DYWxsYmFjay5o
IgorCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM1LDIzICszNiwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZyYW1lOwogY2xhc3MgR2VvcG9zaXRpb247CitjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogCiBjbGFzcyBWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgUG9z
aXRpb25DYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8VjhDdXN0b21Q
b3NpdGlvbkNhbGxiYWNrPiBjcmVhdGUodjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIEZyYW1l
KiBmcmFtZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s+
IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKHZhbHVl
LT5Ub09iamVjdCgpLCBmcmFtZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFY4Q3Vz
dG9tUG9zaXRpb25DYWxsYmFjayh2YWx1ZS0+VG9PYmplY3QoKSwgY29udGV4dCkpOwogICAgIH0K
ICAgICB2aXJ0dWFsIH5WOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2soKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFdmVudChHZW9wb3NpdGlvbiopOwogCiBwcml2YXRlOgotICAgIFY4Q3VzdG9t
UG9zaXRpb25DYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIEZyYW1lKik7CisgICAgVjhD
dXN0b21Qb3NpdGlvbkNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFj
azsKLSAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJy
b3JDYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA2MDY2NikKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaCIKIAotI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
IlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiICAvLyBGb3IgaW52b2tlQ2FsbGJhY2sKICNpbmNsdWRl
ICJWOFBvc2l0aW9uRXJyb3IuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OlY4Q3VzdG9tUG9zaXRp
b25FcnJvckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgRnJhbWUqIGZy
YW1lKQotICAgIDogbV9jYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGNh
bGxiYWNrKSkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCitWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxs
YmFjazo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIDogUG9zaXRp
b25FcnJvckNhbGxiYWNrKGNvbnRleHQpCisgICAgLCBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQogewogfQogCkBAIC00Nyw3ICs0OCwxOCBAQCB2
b2lkIFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpoYW5kCiB7CiAgICAgdjg6OkhhbmRs
ZVNjb3BlIGhhbmRsZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4
dCA9IFY4UHJveHk6OmNvbnRleHQobV9mcmFtZS5nZXQoKSk7CisgICAgLy8gQWN0aXZlRE9NT2Jq
ZWN0IHdpbGwgbnVsbCBvdXIgcG9pbnRlciB0byB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB3
aGVuCisgICAgLy8gaXQgZ29lcyBhd2F5LgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdENvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRD
b250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgbG9va3VwIG9mIHRoZSBwcm94
eSB3aWxsIGZhaWwgaWYgdGhlIEZyYW1lIGhhcyBiZWVuIGRldGFjaGVkLgorICAgIFY4UHJveHkq
IHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoc2NyaXB0Q29udGV4dCk7CisgICAgaWYgKCFwcm94
eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4
dCA9IHByb3h5LT5jb250ZXh0KCk7CiAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTU3LDExICs2OSwxMSBAQCB2b2lkIFY4Q3VzdG9tUG9zaXRpb25FcnJv
ckNhbGxiYWNrOjpoYW5kCiAgICAgICAgIHRvVjgoZXJyb3IpCiAgICAgfTsKIAotICAgIC8vIFBy
b3RlY3QgdGhlIGZyYW1lIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zLgotICAgIFJlZlB0cjxG
cmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOworICAgIC8vIFByb3RlY3QgdGhlIHNjcmlwdCBjb250
ZXh0IHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zLgorICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0PiBwcm90ZWN0b3Ioc2NyaXB0Q29udGV4dCk7CiAKICAgICBib29sIGNhbGxiYWNr
UmV0dXJuVmFsdWUgPSBmYWxzZTsKLSAgICBpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAxLCBh
cmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBpbnZv
a2VDYWxsYmFjayhtX2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3Jp
cHRDb250ZXh0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JD
YWxsYmFjay5oCShyZXZpc2lvbiA2MDY2NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNkZWZpbmUgVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2tfaAogCiAjaW5j
bHVkZSAiUG9zaXRpb25FcnJvckNhbGxiYWNrLmgiCisKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMzUsMjMg
KzM2LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiBjbGFzcyBQb3Np
dGlvbkVycm9yOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgVjhDdXN0
b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgUG9zaXRpb25FcnJvckNhbGxiYWNrIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxs
YmFjaz4gY3JlYXRlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBGcmFtZSogZnJhbWUpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGNyZWF0
ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKICAgICB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sodmFsdWUt
PlRvT2JqZWN0KCksIGZyYW1lKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhDdXN0
b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCksIGNvbnRleHQpKTsKICAg
ICB9CiAgICAgdmlydHVhbCB+VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2soKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChQb3NpdGlvbkVycm9yKik7CiAKIHByaXZhdGU6Ci0g
ICAgVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBG
cmFtZSopOworICAgIFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4gbV9jYWxsYmFjazsKLSAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEdlb2xvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEdlb2xvY2F0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNjA2NjYpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEdlb2xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlY4R2VvbG9jYXRpb24uaCIKIAorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR2VvbG9j
YXRpb24uaCIKLQogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tUG9z
aXRpb25DYWxsYmFjay5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNr
LmgiCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+
IGNyZWEKICAgICB9CiAKICAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1l
Rm9yQ3VycmVudENvbnRleHQoKTsKLSAgICByZXR1cm4gVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
OjpjcmVhdGUodmFsdWUsIGZyYW1lKTsKKyAgICByZXR1cm4gVjhDdXN0b21Qb3NpdGlvbkNhbGxi
YWNrOjpjcmVhdGUodmFsdWUsIGZyYW1lLT5kb2N1bWVudCgpKTsKIH0KIAogc3RhdGljIFBhc3NS
ZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBjcmVhdGVQb3NpdGlvbkVycm9yQ2FsbGJhY2so
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIHN1Y2NlZWRlZCkKQEAgLTc2LDcgKzc2
LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPgogICAgIH0KIAog
ICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4
dCgpOwotICAgIHJldHVybiBWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKHZh
bHVlLCBmcmFtZSk7CisgICAgcmV0dXJuIFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpj
cmVhdGUodmFsdWUsIGZyYW1lLT5kb2N1bWVudCgpKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8
UG9zaXRpb25PcHRpb25zPiBjcmVhdGVQb3NpdGlvbk9wdGlvbnModjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGJvb2wmIHN1Y2NlZWRlZCkKSW5kZXg6IFdlYkNvcmUvcGFnZS9Qb3NpdGlvbkNh
bGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1Bvc2l0aW9uQ2FsbGJhY2suaAko
cmV2aXNpb24gNjA2NjYpCisrKyBXZWJDb3JlL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTYgQEAKICNpZm5kZWYgUG9zaXRpb25DYWxsYmFja19o
CiAjZGVmaW5lIFBvc2l0aW9uQ2FsbGJhY2tfaAogCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0
LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIAogICAgIGNsYXNzIEdlb3Bvc2l0aW9uOwogICAgIAotICAgIGNsYXNzIFBvc2l0aW9uQ2Fs
bGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxQb3NpdGlvbkNhbGxiYWNrPiB7CisgICAgY2xhc3Mg
UG9zaXRpb25DYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPFBvc2l0aW9uQ2FsbGJhY2s+LCBw
dWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKICAgICBwdWJsaWM6CisgICAgICAgIFBvc2l0aW9uQ2Fs
bGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgOiBBY3RpdmVET01PYmplY3Qo
Y29udGV4dCwgdGhpcykgeyB9CiAgICAgICAgIHZpcnR1YWwgflBvc2l0aW9uQ2FsbGJhY2soKSB7
IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEdlb3Bvc2l0aW9uKikgPSAwOwog
ICAgIH07CkluZGV4OiBXZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA2
MDY2NikKKysrIFdlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTQgKzI2LDE2IEBACiAjaWZuZGVmIFBvc2l0aW9uRXJyb3JDYWxsYmFja19o
CiAjZGVmaW5lIFBvc2l0aW9uRXJyb3JDYWxsYmFja19oCiAKKyNpbmNsdWRlICJBY3RpdmVET01P
YmplY3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBQb3NpdGlvbkVycm9yOwogCi0gICAgY2xhc3MgUG9zaXRpb25FcnJv
ckNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8UG9zaXRpb25FcnJvckNhbGxiYWNrPiB7Cisg
ICAgY2xhc3MgUG9zaXRpb25FcnJvckNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8UG9zaXRp
b25FcnJvckNhbGxiYWNrPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiAgICAgcHVibGljOgor
ICAgICAgICBQb3NpdGlvbkVycm9yQ2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykgeyB9CiAgICAgICAgIHZpcnR1
YWwgflBvc2l0aW9uRXJyb3JDYWxsYmFjaygpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlRXZlbnQoUG9zaXRpb25FcnJvciopID0gMDsKICAgICB9OwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NjA2OTApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNiBAQAorMjAxMC0wNi0wNCAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJldmVu
dCBHZW9sb2NhdGlvbiBtYWtpbmcgY2FsbGJhY2tzIHRvIGEgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCB0aGF0IG5vIGxvbmdlciBleGlzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQwMTYyCisKKyAgICAgICAgKiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9j
YWxsYmFjay10by1kZWxldGVkLWNvbnRleHQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL2NhbGxiYWNr
LXRvLWRlbGV0ZWQtY29udGV4dC1pbm5lcjEuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC1pbm5l
cjIuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRl
c3RzL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC5qczogQWRkZWQuCisKIDIwMTAtMDYtMDQg
IERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
aWtvbGFzIFppbW1lcm1hbm4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29u
dGV4dC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExIEBACitmcmFtZSAiPCEtLWZyYW1lUGF0aCAvLzwhLS1mcmFt
ZTAtLT4tLT4iIC0gaGFzIDEgb251bmxvYWQgaGFuZGxlcihzKQorVGVzdHMgdGhhdCB3aGVuIGEg
R2VvbG9jYXRpb24gcmVxdWVzdCBpcyBtYWRlIGZyb20gYSByZW1vdGUgZnJhbWUsIGFuZCB0aGF0
IGZyYW1lJ3Mgc2NyaXB0IGNvbnRleHQgZ29lcyBhd2F5IGJlZm9yZSB0aGUgR2VvbG9jYXRpb24g
Y2FsbGJhY2sgaXMgbWFkZSwgdGhlIGNhbGxiYWNrIGlzIG5vdCBtYWRlLiBJZiB0aGUgY2FsbGJh
Y2sgaXMgYXR0ZW1wdGVkLCBhIGNyYXNoIHdpbGwgb2NjdXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIE5vIGNhbGxiYWNrcyBpbnZva2VkCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0Lmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tZGVs
ZXRlZC1jb250ZXh0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9H
ZW9sb2NhdGlvbi9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRN
TC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vR2Vv
bG9jYXRpb24vcmVzb3VyY2VzL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC1pbm5lcjEuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJj
ZXMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0LWlubmVyMS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3VyY2VzL2NhbGxiYWNrLXRv
LWRlbGV0ZWQtY29udGV4dC1pbm5lcjEuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
CisgIDxoZWFkPgorICAgIDxzY3JpcHQ+CisgICAgICBmdW5jdGlvbiBtYWtlR2VvbG9jYXRpb25S
ZXF1ZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0R2VvbG9jYXRpb25QZXJtaXNz
aW9uKHRydWUpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbig1MS40NzgsIC0wLjE2NiwgMTAwKTsKKyAgICAgICAgICB9CisKKyAg
ICAgICAgICAvLyBNYWtlIHJlcXVlc3QgZnJvbSByZW1vdGUgZnJhbWUsIHRoaXMgZnJhbWUgd2ls
bCBiZSBnb25lIGJ5IHRoZSB0aW1lIHRoZSBHZW9sb2NhdGlvbgorICAgICAgICAgIC8vIG9iamVj
dCBhdHRlbXB0cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrLgorICAgICAgICAgIHdpbmRvdy5wYXJl
bnQubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgYWxlcnQoJ1N1Y2Nlc3MgY2FsbGJhY2sgaW52b2tlZCB1bmV4cGVjdGVk
bHknKTsKKyAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgYWxlcnQoJ0Vycm9yIGNhbGxiYWNr
IGludm9rZWQgdW5leHBlY3RlZGx5Jyk7CisgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgICAgICAgfSk7CisgICAgICB9CisgICAgPC9zY3JpcHQ+CisgIDwv
aGVhZD4KKyAgPGJvZHkgb25sb2FkPSJ3aW5kb3cucGFyZW50Lm9uRmlyc3RJZnJhbWVMb2FkZWQo
KSIsIG9udW5sb2FkPSJtYWtlR2VvbG9jYXRpb25SZXF1ZXN0KCkiPgorICAgIDxwPlRoaXMgZnJh
bWUgc2hvdWxkIGJlIHJlcGxhY2VkIGJlZm9yZSB0aGUgdGVzdCBlbmRzPC9wPgorICA8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJj
ZXMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0LWlubmVyMi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9jYWxsYmFjay10by1k
ZWxldGVkLWNvbnRleHQtaW5uZXIyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0
LWlubmVyMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgPC9o
ZWFkPgorICA8Ym9keSBvbmxvYWQ9IndpbmRvdy5wYXJlbnQub25TZWNvbmRJZnJhbWVMb2FkZWQo
KSI+CisgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xv
Y2F0aW9uL3NjcmlwdC10ZXN0cy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2Nh
bGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3NjcmlwdC10ZXN0cy9jYWxsYmFjay10by1kZWxldGVkLWNv
bnRleHQuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0
cyB0aGF0IHdoZW4gYSBHZW9sb2NhdGlvbiByZXF1ZXN0IGlzIG1hZGUgZnJvbSBhIHJlbW90ZSBm
cmFtZSwgYW5kIHRoYXQgZnJhbWUncyBzY3JpcHQgY29udGV4dCBnb2VzIGF3YXkgYmVmb3JlIHRo
ZSBHZW9sb2NhdGlvbiBjYWxsYmFjayBpcyBtYWRlLCB0aGUgY2FsbGJhY2sgaXMgbm90IG1hZGUu
IElmIHRoZSBjYWxsYmFjayBpcyBhdHRlbXB0ZWQsIGEgY3Jhc2ggd2lsbCBvY2N1ci4iKTsKKwor
ZnVuY3Rpb24gb25GaXJzdElmcmFtZUxvYWRlZCgpIHsKKyAgICBpZnJhbWUuc3JjID0gJ3Jlc291
cmNlcy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQtaW5uZXIyLmh0bWwnOworfQorCitmdW5j
dGlvbiBvblNlY29uZElmcmFtZUxvYWRlZCgpIHsKKyAgICAvLyBXYWl0IGZvciB0aGUgY2FsbGJh
Y2tzIHRvIGJlIGludm9rZWQKKyAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdGVzdFBhc3NlZCgnTm8gY2FsbGJhY2tzIGludm9rZWQnKTsKKyAgICAgICAgZmluaXNo
SlNUZXN0KCk7CisgICAgfSwgMTAwKTsKK30KKwordmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoJ2lmcmFtZScpOworaWZyYW1lLnNyYyA9ICdyZXNvdXJjZXMvY2FsbGJhY2stdG8t
ZGVsZXRlZC1jb250ZXh0LWlubmVyMS5odG1sJzsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
aWZyYW1lKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOword2luZG93LnN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58038</attachid>
            <date>2010-06-07 09:36:38 -0700</date>
            <delta_ts>2010-06-08 05:29:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-40162-20100607173635.patch</filename>
            <type>text/plain</type>
            <size>21240</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDc4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDYtMDcgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFByZXZlbnQgR2VvbG9jYXRpb24gbWFraW5nIGNhbGxiYWNrcyB0byBhIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgdGhhdCBubyBsb25nZXIgZXhpc3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE2MgorCisgICAgICAgIEJlZm9yZSBtYWtpbmcgY2Fs
bGJhY2tzLCB3ZSBjaGVjayB0aGF0IHRoZSByZWxldmFudCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
IHN0aWxsIGV4aXN0cy4KKyAgICAgICAgVG8gYWNoaWV2ZSB0aGlzLCB0aGUgY2FsbGJhY2tzIGlu
aGVyaXQgZnJvbSBBY3RpdmVET01PYmplY3QuCisKKyAgICAgICAgVGhlIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgaXMgcmVmJ2VkIGZyb20gc2NyaXB0LCBzbyBtYXkgbm90IGJlIEdDJ2VkIGZvciBz
b21lIHRpbWUgYWZ0ZXIKKyAgICAgICAgaXQgaXMgZGlzY29ubmVjdGVkIGZyb20gaXRzIGZyYW1l
LiBNYWtpbmcgdGhlIGNhbGxiYWNrIGN1cnJlbnRseSBpbnZvbHZlcyBhY2Nlc3NpbmcgdGhlCisg
ICAgICAgIEZyYW1lLCBzbyBhbiBhZGRpdGlvbmFsIGNoZWNrIGZvciB0aGUgRnJhbWUgaXMgcmVx
dWlyZWQuCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWxzbyBwcmV2ZW50cyB0aGUgVjggYmluZGlu
Z3MgZnJvbSBpbmNvcnJlY3RseSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBGcmFtZS4KKwor
ICAgICAgICBUZXN0OiBmYXN0L2RvbS9HZW9sb2NhdGlvbi9jYWxsYmFjay10by1kZWxldGVkLWNv
bnRleHQuaHRtbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYWxsYmFja0RhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpKU0N1c3RvbVBvc2l0aW9uQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrOjpoYW5kbGVF
dmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6
OkpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3Vz
dG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OlY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNr
Lmg6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmNyZWF0ZSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxi
YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNr
OjpWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOEN1
c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5oOgorICAgICAgICAo
V2ViQ29yZTo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4R2VvbG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlUG9zaXRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVQb3NpdGlvbkVycm9yQ2FsbGJhY2spOgorICAgICAgICAqIHBhZ2UvUG9zaXRpb25DYWxsYmFj
ay5oOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb25DYWxsYmFjazo6UG9zaXRpb25DYWxsYmFj
ayk6CisgICAgICAgICogcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaDoKKyAgICAgICAgKFdl
YkNvcmU6OlBvc2l0aW9uRXJyb3JDYWxsYmFjazo6UG9zaXRpb25FcnJvckNhbGxiYWNrKToKKwog
MjAxMC0wNi0wNyAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgbXkgSFRNTCBjb21tZW50IHBhcnNpbmcgY2hh
bmdlIGFzIGl0CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAkocmV2
aXNpb24gNjA3ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsMTIgQEAgSlNWYWx1ZSBKU0NhbGxiYWNrRGF0YTo6
aW52b2tlQ2FsbGJhY2soTQogICAgIH0KICAgICAKICAgICBnbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpLT50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2xv
YmFsT2JqZWN0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpIAorICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBnbG9iYWxPYmplY3QoKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgIC8vIFdlIHdpbGwgZmFpbCB0byBnZXQgdGhlIGNvbnRl
eHQgaWYgdGhlIGZyYW1lIGhhcyBiZWVuIGRldGFjaGVkLgorICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKworICAgIEpTVmFsdWUgcmVzdWx0ID0gY29udGV4dC0+
aXNEb2N1bWVudCgpIAogICAgICAgICA/IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVj
LCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjYWxsYmFjaygpLCBhcmdzKQogICAgICAg
ICA6IEpTQzo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBjYWxsYmFj
aygpLCBhcmdzKTsKICAgICBnbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLT50aW1lb3V0Q2hl
Y2tlci5zdG9wKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRpb25D
YWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVBv
c2l0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA2MDc4NikKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTIg
KzM4LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIEpT
Q3VzdG9tUG9zaXRpb25DYWxsYmFjazo6SlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrKEpTT2JqZWN0
KiBjYWxsYmFjaywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICA6IG1fZGF0
YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KQorICAgIDogUG9zaXRpb25DYWxsYmFjayhnbG9iYWxP
YmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fZGF0YShjYWxsYmFjaywg
Z2xvYmFsT2JqZWN0KQogewogfQogCiB2b2lkIEpTQ3VzdG9tUG9zaXRpb25DYWxsYmFjazo6aGFu
ZGxlRXZlbnQoR2VvcG9zaXRpb24qIGdlb3Bvc2l0aW9uKQogeworICAgIC8vIEFjdGl2ZURPTU9i
amVjdCB3aWxsIG51bGwgb3VyIHBvaW50ZXIgdG8gdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
d2hlbiBpdCBnb2VzIGF3YXkuCisgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIFJlZlB0cjxKU0N1c3RvbVBvc2l0aW9uQ2FsbGJhY2s+IHBy
b3RlY3QodGhpcyk7CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxi
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tUG9zaXRp
b25FcnJvckNhbGxiYWNrLmNwcAkocmV2aXNpb24gNjA3ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsMTIgKzM4LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIEpTQ3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpKU0N1c3RvbVBvc2l0aW9uRXJyb3JD
YWxsYmFjayhKU09iamVjdCogY2FsbGJhY2ssIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCi0gICAgOiBtX2RhdGEoY2FsbGJhY2ssIGdsb2JhbE9iamVjdCkKKyAgICA6IFBvc2l0aW9u
RXJyb3JDYWxsYmFjayhnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAg
ICAsIG1fZGF0YShjYWxsYmFjaywgZ2xvYmFsT2JqZWN0KQogewogfQogCiB2b2lkIEpTQ3VzdG9t
UG9zaXRpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChQb3NpdGlvbkVycm9yKiBwb3NpdGlv
bkVycm9yKQogeworICAgIC8vIEFjdGl2ZURPTU9iamVjdCB3aWxsIG51bGwgb3VyIHBvaW50ZXIg
dG8gdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgd2hlbiBpdCBnb2VzIGF3YXkuCisgICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIFJlZlB0
cjxKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKIAogICAgIEpT
Qzo6SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNw
cAkocmV2aXNpb24gNjA3ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bVBvc2l0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMTYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2su
aCIKIAotI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tVm9pZENhbGxiYWNrLmgiICAvLyBGb3IgaW52b2tlQ2Fs
bGJhY2sKICNpbmNsdWRlICJWOEdlb3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjazo6VjhDdXN0
b21Qb3NpdGlvbkNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjYWxsYmFjaywgRnJhbWUq
IGZyYW1lKQotICAgIDogbV9jYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3
KGNhbGxiYWNrKSkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCitWOEN1c3RvbVBvc2l0aW9uQ2FsbGJh
Y2s6OlY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJh
Y2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBQb3NpdGlvbkNhbGxi
YWNrKGNvbnRleHQpCisgICAgLCBtX2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
OjpOZXcoY2FsbGJhY2spKQogewogfQogCkBAIC00Nyw3ICs0OCwxNyBAQCB2b2lkIFY4Q3VzdG9t
UG9zaXRpb25DYWxsYmFjazo6aGFuZGxlRXZlCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6
OmNvbnRleHQobV9mcmFtZS5nZXQoKSk7CisgICAgLy8gQWN0aXZlRE9NT2JqZWN0IHdpbGwgbnVs
bCBvdXIgcG9pbnRlciB0byB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCB3aGVuIGl0IGdvZXMg
YXdheS4KKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghc2NyaXB0Q29udGV4dCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGhlIGxvb2t1cCBvZiB0aGUgcHJveHkgd2lsbCBmYWlsIGlmIHRoZSBG
cmFtZSBoYXMgYmVlbiBkZXRhY2hlZC4KKyAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJl
dHJpZXZlKHNjcmlwdENvbnRleHQpOworICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVybjsK
KworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBwcm94eS0+Y29udGV4dCgp
OwogICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01Nywx
MSArNjgsMTEgQEAgdm9pZCBWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZQogICAg
ICAgICB0b1Y4KHBvc2l0aW9uKQogICAgIH07CiAKLSAgICAvLyBQcm90ZWN0IHRoZSBmcmFtZSB1
bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucy4KLSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3Rvciht
X2ZyYW1lKTsKKyAgICAvLyBQcm90ZWN0IHRoZSBzY3JpcHQgY29udGV4dCB1bnRpbCB0aGUgY2Fs
bGJhY2sgcmV0dXJucy4KKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gcHJvdGVj
dG9yKHNjcmlwdENvbnRleHQpOwogCiAgICAgYm9vbCBjYWxsYmFja1JldHVyblZhbHVlID0gZmFs
c2U7Ci0gICAgaW52b2tlQ2FsbGJhY2sobV9jYWxsYmFjaywgMSwgYXJndiwgY2FsbGJhY2tSZXR1
cm5WYWx1ZSwgbV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgaW52b2tlQ2FsbGJhY2sobV9jYWxs
YmFjaywgMSwgYXJndiwgY2FsbGJhY2tSZXR1cm5WYWx1ZSwgc2NyaXB0Q29udGV4dCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiA2MDc4NikK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFY4Q3VzdG9tUG9zaXRp
b25DYWxsYmFja19oCiAKICNpbmNsdWRlICJQb3NpdGlvbkNhbGxiYWNrLmgiCisKICNpbmNsdWRl
IDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgpAQCAtMzUsMjMgKzM2LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRnJh
bWU7CiBjbGFzcyBHZW9wb3NpdGlvbjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAK
IGNsYXNzIFY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjayA6IHB1YmxpYyBQb3NpdGlvbkNhbGxiYWNr
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOEN1c3RvbVBvc2l0aW9uQ2FsbGJh
Y2s+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgRnJhbWUqIGZyYW1lKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjaz4gY3JlYXRlKHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQog
ICAgIHsKICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc09iamVjdCgpKTsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBWOEN1c3RvbVBvc2l0aW9uQ2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCks
IGZyYW1lKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhDdXN0b21Qb3NpdGlvbkNh
bGxiYWNrKHZhbHVlLT5Ub09iamVjdCgpLCBjb250ZXh0KSk7CiAgICAgfQogICAgIHZpcnR1YWwg
flY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjaygpOwogCiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2
ZW50KEdlb3Bvc2l0aW9uKik7CiAKIHByaXZhdGU6Ci0gICAgVjhDdXN0b21Qb3NpdGlvbkNhbGxi
YWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgRnJhbWUqKTsKKyAgICBWOEN1c3RvbVBvc2l0aW9u
Q2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7
CiAKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2NhbGxiYWNrOwotICAgIFJlZlB0
cjxGcmFtZT4gbV9mcmFtZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0
aW9uRXJyb3JDYWxsYmFjay5jcHAJKHJldmlzaW9uIDYwNzg2KQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwxNSArMjYsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJW
OEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5oIgogCi0jaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVjhDdXN0b21Wb2lk
Q2FsbGJhY2suaCIgIC8vIEZvciBpbnZva2VDYWxsYmFjawogI2luY2x1ZGUgIlY4UG9zaXRpb25F
cnJvci5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1W
OEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjazo6VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGNhbGxiYWNrLCBGcmFtZSogZnJhbWUpCi0gICAgOiBt
X2NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY2FsbGJhY2spKQotICAg
ICwgbV9mcmFtZShmcmFtZSkKK1Y4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpWOEN1c3Rv
bVBvc2l0aW9uRXJyb3JDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gY2FsbGJhY2ssIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgOiBQb3NpdGlvbkVycm9yQ2FsbGJh
Y2soY29udGV4dCkKKyAgICAsIG1fY2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46
Ok5ldyhjYWxsYmFjaykpCiB7CiB9CiAKQEAgLTQ3LDcgKzQ4LDE3IEBAIHZvaWQgVjhDdXN0b21Q
b3NpdGlvbkVycm9yQ2FsbGJhY2s6OmhhbmQKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6
Y29udGV4dChtX2ZyYW1lLmdldCgpKTsKKyAgICAvLyBBY3RpdmVET01PYmplY3Qgd2lsbCBudWxs
IG91ciBwb2ludGVyIHRvIHRoZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHdoZW4gaXQgZ29lcyBh
d2F5LgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBUaGUgbG9va3VwIG9mIHRoZSBwcm94eSB3aWxsIGZhaWwgaWYgdGhlIEZy
YW1lIGhhcyBiZWVuIGRldGFjaGVkLgorICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0
cmlldmUoc2NyaXB0Q29udGV4dCk7CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHByb3h5LT5jb250ZXh0KCk7
CiAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTU3LDEx
ICs2OCwxMSBAQCB2b2lkIFY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpoYW5kCiAgICAg
ICAgIHRvVjgoZXJyb3IpCiAgICAgfTsKIAotICAgIC8vIFByb3RlY3QgdGhlIGZyYW1lIHVudGls
IHRoZSBjYWxsYmFjayByZXR1cm5zLgotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJh
bWUpOworICAgIC8vIFByb3RlY3QgdGhlIHNjcmlwdCBjb250ZXh0IHVudGlsIHRoZSBjYWxsYmFj
ayByZXR1cm5zLgorICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBwcm90ZWN0b3Io
c2NyaXB0Q29udGV4dCk7CiAKICAgICBib29sIGNhbGxiYWNrUmV0dXJuVmFsdWUgPSBmYWxzZTsK
LSAgICBpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNrLCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZh
bHVlLCBtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBpbnZva2VDYWxsYmFjayhtX2NhbGxiYWNr
LCAxLCBhcmd2LCBjYWxsYmFja1JldHVyblZhbHVlLCBzY3JpcHRDb250ZXh0KTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5oCShyZXZpc2lvbiA2
MDc4NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tUG9zaXRpb25FcnJv
ckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgVjhD
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2tfaAogCiAjaW5jbHVkZSAiUG9zaXRpb25FcnJvckNh
bGxiYWNrLmgiCisKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMzUsMjMgKzM2LDIzIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgRnJhbWU7CiBjbGFzcyBQb3NpdGlvbkVycm9yOworY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2sgOiBwdWJsaWMgUG9zaXRpb25FcnJvckNhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxWOEN1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gY3JlYXRlKHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlLCBGcmFtZSogZnJhbWUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGNyZWF0ZSh2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWx1ZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKICAgICB7CiAgICAgICAg
IEFTU0VSVCh2YWx1ZS0+SXNPYmplY3QoKSk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
VjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2sodmFsdWUtPlRvT2JqZWN0KCksIGZyYW1lKSk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2sodmFsdWUtPlRvT2JqZWN0KCksIGNvbnRleHQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+VjhD
dXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2soKTsKIAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVF
dmVudChQb3NpdGlvbkVycm9yKik7CiAKIHByaXZhdGU6Ci0gICAgVjhDdXN0b21Qb3NpdGlvbkVy
cm9yQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+LCBGcmFtZSopOworICAgIFY4Q3VzdG9t
UG9zaXRpb25FcnJvckNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCopOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9jYWxsYmFj
azsKLSAgICBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEdlb2xvY2F0aW9uQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEdlb2xvY2F0
aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNjA3ODYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEdlb2xvY2F0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYs
OCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4R2VvbG9jYXRpb24uaCIKIAor
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKLQogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIlY4Q3VzdG9tUG9zaXRpb25FcnJvckNhbGxiYWNrLmgiCkBAIC01Niw4ICs1Niw3IEBA
IHN0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IGNyZWEKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogCi0gICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZv
ckN1cnJlbnRDb250ZXh0KCk7Ci0gICAgcmV0dXJuIFY4Q3VzdG9tUG9zaXRpb25DYWxsYmFjazo6
Y3JlYXRlKHZhbHVlLCBmcmFtZSk7CisgICAgcmV0dXJuIFY4Q3VzdG9tUG9zaXRpb25DYWxsYmFj
azo6Y3JlYXRlKHZhbHVlLCBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogfQogCiBzdGF0
aWMgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGNyZWF0ZVBvc2l0aW9uRXJyb3JD
YWxsYmFjayh2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgc3VjY2VlZGVkKQpAQCAt
NzUsOCArNzQsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJl
dHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOwotICAgIHJldHVybiBWOEN1c3RvbVBvc2l0
aW9uRXJyb3JDYWxsYmFjazo6Y3JlYXRlKHZhbHVlLCBmcmFtZSk7CisgICAgcmV0dXJuIFY4Q3Vz
dG9tUG9zaXRpb25FcnJvckNhbGxiYWNrOjpjcmVhdGUodmFsdWUsIGdldFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gY3Jl
YXRlUG9zaXRpb25PcHRpb25zKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBib29sJiBzdWNj
ZWVkZWQpCkluZGV4OiBXZWJDb3JlL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDYwNzg2KQorKysg
V2ViQ29yZS9wYWdlL1Bvc2l0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQg
KzI2LDE2IEBACiAjaWZuZGVmIFBvc2l0aW9uQ2FsbGJhY2tfaAogI2RlZmluZSBQb3NpdGlvbkNh
bGxiYWNrX2gKIAorI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKICAgICBjbGFzcyBHZW9w
b3NpdGlvbjsKICAgICAKLSAgICBjbGFzcyBQb3NpdGlvbkNhbGxiYWNrIDogcHVibGljIFJlZkNv
dW50ZWQ8UG9zaXRpb25DYWxsYmFjaz4geworICAgIGNsYXNzIFBvc2l0aW9uQ2FsbGJhY2sgOiBw
dWJsaWMgUmVmQ291bnRlZDxQb3NpdGlvbkNhbGxiYWNrPiwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CiAgICAgcHVibGljOgorICAgICAgICBQb3NpdGlvbkNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQpIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpIHsgfQog
ICAgICAgICB2aXJ0dWFsIH5Qb3NpdGlvbkNhbGxiYWNrKCkgeyB9CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVFdmVudChHZW9wb3NpdGlvbiopID0gMDsKICAgICB9OwpJbmRleDogV2ViQ29y
ZS9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaAkocmV2aXNpb24gNjA3ODYpCisrKyBXZWJDb3JlL3Bh
Z2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwx
NiBAQAogI2lmbmRlZiBQb3NpdGlvbkVycm9yQ2FsbGJhY2tfaAogI2RlZmluZSBQb3NpdGlvbkVy
cm9yQ2FsbGJhY2tfaAogCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgUG9z
aXRpb25FcnJvcjsKIAotICAgIGNsYXNzIFBvc2l0aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBS
ZWZDb3VudGVkPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4geworICAgIGNsYXNzIFBvc2l0aW9uRXJy
b3JDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIHB1
YmxpYyBBY3RpdmVET01PYmplY3QgewogICAgIHB1YmxpYzoKKyAgICAgICAgUG9zaXRpb25FcnJv
ckNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIDogQWN0aXZlRE9NT2Jq
ZWN0KGNvbnRleHQsIHRoaXMpIHsgfQogICAgICAgICB2aXJ0dWFsIH5Qb3NpdGlvbkVycm9yQ2Fs
bGJhY2soKSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFBvc2l0aW9uRXJy
b3IqKSA9IDA7CiAgICAgfTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNzg2KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDYtMDcg
IFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZlbnQgR2VvbG9jYXRpb24gbWFraW5n
IGNhbGxiYWNrcyB0byBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdGhhdCBubyBsb25nZXIgZXhp
c3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDE2
MgorCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJhY2stdG8tZGVsZXRlZC1j
b250ZXh0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vR2VvbG9jYXRp
b24vY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQt
aW5uZXIxLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291
cmNlcy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQtaW5uZXIyLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL0dlb2xvY2F0aW9uL3NjcmlwdC10ZXN0cy9jYWxsYmFjay10by1kZWxl
dGVkLWNvbnRleHQuanM6IEFkZGVkLgorCiAyMDEwLTA2LTA3ICBKdWxpZW4gQ2hhZmZyYWl4ICA8
amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyBt
eSBIVE1MIGNvbW1lbnQgcGFyc2luZyBjaGFuZ2UgYXMgaXQKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vY2FsbGJh
Y2stdG8tZGVsZXRlZC1jb250ZXh0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK2ZyYW1lICI8IS0tZnJh
bWVQYXRoIC8vPCEtLWZyYW1lMC0tPi0tPiIgLSBoYXMgMSBvbnVubG9hZCBoYW5kbGVyKHMpCitU
ZXN0cyB0aGF0IHdoZW4gYSBHZW9sb2NhdGlvbiByZXF1ZXN0IGlzIG1hZGUgZnJvbSBhIHJlbW90
ZSBmcmFtZSwgYW5kIHRoYXQgZnJhbWUncyBzY3JpcHQgY29udGV4dCBnb2VzIGF3YXkgYmVmb3Jl
IHRoZSBHZW9sb2NhdGlvbiBjYWxsYmFjayBpcyBtYWRlLCB0aGUgY2FsbGJhY2sgaXMgbm90IG1h
ZGUuIElmIHRoZSBjYWxsYmFjayBpcyBhdHRlbXB0ZWQsIGEgY3Jhc2ggd2lsbCBvY2N1ci4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgTm8gY2FsbGJhY2tzIGludm9rZWQK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9jYWxsYmFjay10by1kZWxldGVkLWNv
bnRleHQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NhbGxiYWNrLXRvLWRlbGV0ZWQt
Y29udGV4dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNvdXJjZXMvY2FsbGJhY2stdG8tZGVsZXRlZC1j
b250ZXh0LWlubmVyMS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0dl
b2xvY2F0aW9uL3Jlc291cmNlcy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQtaW5uZXIxLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlvbi9yZXNv
dXJjZXMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0LWlubmVyMS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgIGZ1bmN0aW9u
IG1ha2VHZW9sb2NhdGlvblJlcXVlc3QoKSB7CisgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24odHJ1ZSk7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKDUxLjQ3OCwgLTAuMTY2LCAxMDApOwor
ICAgICAgICAgIH0KKworICAgICAgICAgIC8vIE1ha2UgcmVxdWVzdCBmcm9tIHJlbW90ZSBmcmFt
ZSwgdGhpcyBmcmFtZSB3aWxsIGJlIGdvbmUgYnkgdGhlIHRpbWUgdGhlIEdlb2xvY2F0aW9uCisg
ICAgICAgICAgLy8gb2JqZWN0IGF0dGVtcHRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2suCisgICAg
ICAgICAgd2luZG93LnBhcmVudC5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0
aW9uKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICBhbGVydCgnU3VjY2VzcyBjYWxsYmFjayBp
bnZva2VkIHVuZXhwZWN0ZWRseScpOworICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICBhbGVy
dCgnRXJyb3IgY2FsbGJhY2sgaW52b2tlZCB1bmV4cGVjdGVkbHknKTsKKyAgICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICB9KTsKKyAgICAgIH0KKyAg
ICA8L3NjcmlwdD4KKyAgPC9oZWFkPgorICA8Ym9keSBvbmxvYWQ9IndpbmRvdy5wYXJlbnQub25G
aXJzdElmcmFtZUxvYWRlZCgpIiwgb251bmxvYWQ9Im1ha2VHZW9sb2NhdGlvblJlcXVlc3QoKSI+
CisgICAgPHA+VGhpcyBmcmFtZSBzaG91bGQgYmUgcmVwbGFjZWQgYmVmb3JlIHRoZSB0ZXN0IGVu
ZHM8L3A+CisgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL0dl
b2xvY2F0aW9uL3Jlc291cmNlcy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQtaW5uZXIyLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vcmVzb3Vy
Y2VzL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC1pbm5lcjIuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL0dlb2xvY2F0aW9uL3Jlc291cmNlcy9jYWxsYmFjay10
by1kZWxldGVkLWNvbnRleHQtaW5uZXIyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
CisgIDxoZWFkPgorICA8L2hlYWQ+CisgIDxib2R5IG9ubG9hZD0id2luZG93LnBhcmVudC5vblNl
Y29uZElmcmFtZUxvYWRlZCgpIj4KKyAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2NhbGxiYWNrLXRvLWRlbGV0ZWQt
Y29udGV4dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9HZW9sb2NhdGlv
bi9zY3JpcHQtdGVzdHMvY2FsbGJhY2stdG8tZGVsZXRlZC1jb250ZXh0LmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vR2VvbG9jYXRpb24vc2NyaXB0LXRlc3RzL2NhbGxi
YWNrLXRvLWRlbGV0ZWQtY29udGV4dC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAor
ZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgd2hlbiBhIEdlb2xvY2F0aW9uIHJlcXVlc3QgaXMgbWFk
ZSBmcm9tIGEgcmVtb3RlIGZyYW1lLCBhbmQgdGhhdCBmcmFtZSdzIHNjcmlwdCBjb250ZXh0IGdv
ZXMgYXdheSBiZWZvcmUgdGhlIEdlb2xvY2F0aW9uIGNhbGxiYWNrIGlzIG1hZGUsIHRoZSBjYWxs
YmFjayBpcyBub3QgbWFkZS4gSWYgdGhlIGNhbGxiYWNrIGlzIGF0dGVtcHRlZCwgYSBjcmFzaCB3
aWxsIG9jY3VyLiIpOworCitmdW5jdGlvbiBvbkZpcnN0SWZyYW1lTG9hZGVkKCkgeworICAgIGlm
cmFtZS5zcmMgPSAncmVzb3VyY2VzL2NhbGxiYWNrLXRvLWRlbGV0ZWQtY29udGV4dC1pbm5lcjIu
aHRtbCc7Cit9CisKK2Z1bmN0aW9uIG9uU2Vjb25kSWZyYW1lTG9hZGVkKCkgeworICAgIC8vIFdh
aXQgZm9yIHRoZSBjYWxsYmFja3MgdG8gYmUgaW52b2tlZAorICAgIHdpbmRvdy5zZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0UGFzc2VkKCdObyBjYWxsYmFja3MgaW52b2tlZCcp
OworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCAxMDApOworfQorCit2YXIgaWZyYW1l
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CitpZnJhbWUuc3JjID0gJ3Jlc291
cmNlcy9jYWxsYmFjay10by1kZWxldGVkLWNvbnRleHQtaW5uZXIxLmh0bWwnOworZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChpZnJhbWUpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>