<?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>70289</bug_id>
          
          <creation_ts>2011-10-17 17:15:29 -0700</creation_ts>
          <short_desc>Add JSC support for delivering mutations when the outermost script context exits</short_desc>
          <delta_ts>2012-02-07 16:40:42 -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>JavaScriptCore</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>
          
          <blocked>68729</blocked>
    
    <blocked>71865</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>andersca</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>rafaelw</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>485651</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-10-17 17:15:29 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/97659 added support to the V8 bindings to deliver mutations at the end of the outermost script context. This was trivial for V8, since V8Proxy provides a single entrypoint for script execution, and already keeps track of reentrancy.  For JSC, there are many references to JSC::call in bindings/js/, so this will likely require some reorganization, either by adding a hook in JSC or by wrapping all JSC:call&apos;s.

For background, the above is necessary in order to provide delivery at the end of a &quot;microtask&quot;, as discussed http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html (the timing is the first bullet under &quot;Significant aspects of this design&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497623</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-11-07 17:24:33 -0800</bug_when>
    <thetext>We mostly have a bottleneck for call in JSC by way of JSMainThreadExecState::call(), though it is not used everywhere (that we can fix).  I am not clear on how aggressive we have to be however.  For instance, do we need to consider calling a getter while processing an options dictionary passed to an Event constructor a script invocation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497626</commentid>
    <comment_count>2</comment_count>
      <attachid>113965</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-11-07 17:28:28 -0800</bug_when>
    <thetext>Created attachment 113965
Patch in progress.

This patch removes more main thread direct calls to JSC::call.  The remaining uses are:

- JavaJSObject::call()
- _NPN_InvokeDefault
- _NPN_Invoke
Plugins and Java, not sure if these should delineate micro tasks.

- JSInjectedScriptHost::evaluate()
- InjectedScriptManager::createInjectedScript()
Inspector, not sure if these should delineate micro tasks.

- ScriptCallback::call()
This one we should fix by just removing the class an implementing MediaQuery callbacks more idiomatically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497733</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-07 21:52:14 -0800</bug_when>
    <thetext>I&apos;m super excited for this patch :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498160</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-11-08 09:48:48 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; We mostly have a bottleneck for call in JSC by way of JSMainThreadExecState::call(), though it is not used everywhere (that we can fix).  I am not clear on how aggressive we have to be however.  For instance, do we need to consider calling a getter while processing an options dictionary passed to an Event constructor a script invocation?

Ideally I&apos;d think we&apos;d want to deliver mutations if we ever exit JS and find that it was the outermost script invocation.  In your example, the event constructor would actually have been called by script itself, so it wouldn&apos;t be affected. But I can imagine cases where a JS object&apos;s properties are accessed from C++ (maybe structured clone in IndexedDB?). For completeness, I think getters/setters would need to be covered as well, though I am having trouble coming up with a lot of cases where it matters (since most accesses of JS objects are due to calls from script themselves).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522882</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-12-16 11:48:00 -0800</bug_when>
    <thetext>What&apos;s the status of this patch? On the Chromium side, we&apos;re basically feature-complete and enabled in dev channel (blocking on the completed spec before we go to beta). What would need to be done to get ENABLE(MUTATION_OBSERVERS) turned on for the JSC ports? If there&apos;s something Rafael and I can do to polish off the JSC side of things we&apos;d be eager to help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524351</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-12-19 18:22:42 -0800</bug_when>
    <thetext>Can WebKitMutationObserver just schedule a 0-delay delivery timer the first time a mutation record is enqueued? It&apos;s not clear why this code needs to tie into the JS engine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524674</commentid>
    <comment_count>7</comment_count>
    <who name="Rafael Weinstein">rafaelw</who>
    <bug_when>2011-12-20 10:37:28 -0800</bug_when>
    <thetext>The short answer is: that will be too late.

The history and rational for what was finally agreed upon as the solution in the spec starts here:

http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/0780.html

and ends here:

http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541925</commentid>
    <comment_count>8</comment_count>
      <attachid>123864</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-01-24 18:05:31 -0800</bug_when>
    <thetext>Created attachment 123864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541927</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-01-24 18:07:06 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=123864) [details]
&gt; Patch

This patch includes Sam&apos;s changes as well as the rest of the infrastructure necessary to get the tests passing when ENABLE(MUTATION_OBSERVERS) is on for WebKit/Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543261</commentid>
    <comment_count>10</comment_count>
      <attachid>123864</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-01-26 10:44:19 -0800</bug_when>
    <thetext>Comment on attachment 123864
Patch

Sam’s on vacation and he’ll be back Monday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550299</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-02-06 14:41:52 -0800</bug_when>
    <thetext>Sam or Geoff, can you take a look and at least let me know if I&apos;m going down the right path with this approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550359</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-06 15:34:55 -0800</bug_when>
    <thetext>Looks OK to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551431</commentid>
    <comment_count>13</comment_count>
      <attachid>123864</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-07 15:02:01 -0800</bug_when>
    <thetext>Comment on attachment 123864
Patch

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

This looks very reasonable to me.  I suspect the DRT Obj-c code could be slightly nicer.  I&apos;m comfortable r+ing this based on ggaren&apos;s OKing of the patch, and Sam&apos;s original posting of the JSC -&gt;JSMaintThreadExecState change.

I&apos;m assuming here that you audited (or Sam audited?) all callers of JSC::call?  It seems very possible that one got forgotten or that one will be forgotten in the future.

&gt; Tools/DumpRenderTree/mac/EventSendingController.mm:728
&gt; +    [character release];
&gt; +    [modifiers release];

You don&apos;t need these. :)

&gt; Tools/DumpRenderTree/mac/EventSendingController.mm:734
&gt; +    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[EventSendingController instanceMethodSignatureForSelector:@selector(keyDownWrapper:withModifiers:withLocation:)]];
&gt; +    [invocation retainArguments];

I suspect you could also do this with a block in modern Obj-C 2.  I don&apos;t know how much (if any) of Obj-C 2 we use in DRT, but I&quot;m sure it&apos;s supported.

&gt; Tools/DumpRenderTree/mac/EventSendingController.mm:740
&gt; +    [invocation performSelector:@selector(invoke) withObject:nil afterDelay:0];

What about a timer?  Again, possibly using a block?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551462</commentid>
    <comment_count>14</comment_count>
      <attachid>123864</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-02-07 15:24:38 -0800</bug_when>
    <thetext>Comment on attachment 123864
Patch

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

&gt;&gt; Tools/DumpRenderTree/mac/EventSendingController.mm:728
&gt;&gt; +    [modifiers release];
&gt; 
&gt; You don&apos;t need these. :)

Will remove when I land-safely.

&gt;&gt; Tools/DumpRenderTree/mac/EventSendingController.mm:734
&gt;&gt; +    [invocation retainArguments];
&gt; 
&gt; I suspect you could also do this with a block in modern Obj-C 2.  I don&apos;t know how much (if any) of Obj-C 2 we use in DRT, but I&quot;m sure it&apos;s supported.

If it&apos;s all right with you, I&apos;d rather leave this as an NSInvocation, since it matches up with the rest of the code in this file.

&gt;&gt; Tools/DumpRenderTree/mac/EventSendingController.mm:740
&gt;&gt; +    [invocation performSelector:@selector(invoke) withObject:nil afterDelay:0];
&gt; 
&gt; What about a timer?  Again, possibly using a block?

Not sure if an NSTimer really helps here, I&apos;d still need the NSInvocation to store the arguments as far as I can tell (though I&apos;ll admit that I know very little Obj-C).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551464</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-02-07 15:25:56 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 123864 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123864&amp;action=review
&gt; 
&gt; This looks very reasonable to me.  I suspect the DRT Obj-c code could be slightly nicer.  I&apos;m comfortable r+ing this based on ggaren&apos;s OKing of the patch, and Sam&apos;s original posting of the JSC -&gt;JSMaintThreadExecState change.
&gt; 
&gt; I&apos;m assuming here that you audited (or Sam audited?) all callers of JSC::call?  It seems very possible that one got forgotten or that one will be forgotten in the future.

Yeah, for now I just made sure that all JSC::call invocations under Source/WebCore/ do this appropriately. It definitely seems like something could slip through in the future, though, so it would be ideal if we stopped calling JSC::call altogether in bindings/js/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551465</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-02-07 15:26:30 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 123864 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123864&amp;action=review
&gt; 
&gt; &gt;&gt; Tools/DumpRenderTree/mac/EventSendingController.mm:728
&gt; &gt;&gt; +    [modifiers release];
&gt; &gt; 
&gt; &gt; You don&apos;t need these. :)
&gt; 
&gt; Will remove when I land-safely.

land-safely doesn&apos;t help at all here because commit-queue uses cr-linux. It&apos;ll let JSC build failures slip through.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551468</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-02-07 15:29:56 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 123864 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123864&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; Tools/DumpRenderTree/mac/EventSendingController.mm:728
&gt; &gt; &gt;&gt; +    [modifiers release];
&gt; &gt; &gt; 
&gt; &gt; &gt; You don&apos;t need these. :)
&gt; &gt; 
&gt; &gt; Will remove when I land-safely.
&gt; 
&gt; land-safely doesn&apos;t help at all here because commit-queue uses cr-linux. It&apos;ll let JSC build failures slip through.

Compiling on JSC wouldn&apos;t matter much anyway since all the code is currently behind ENABLE(MUTATION_OBSERVERS). I&apos;ve been compiling locally throughout to test that the new C++ code works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551547</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2012-02-07 16:40:42 -0800</bug_when>
    <thetext>Committed r107008: &lt;http://trac.webkit.org/changeset/107008&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113965</attachid>
            <date>2011-11-07 17:28:28 -0800</date>
            <delta_ts>2012-01-24 18:05:23 -0800</delta_ts>
            <desc>Patch in progress.</desc>
            <filename>patchInProgress.diff</filename>
            <type>text/plain</type>
            <size>3860</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDk5NDUxKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU01haW5UaHJl
YWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNMb2NrLmg+CiAKQEAgLTg5LDcgKzkwLDcgQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyOjpsb29rdXBOYQogICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHByZWZp
eCkpOwogCiAgICAgbV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5z
dGFydCgpOwotICAgIEpTVmFsdWUgcmV0dmFsID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBj
YWxsVHlwZSwgY2FsbERhdGEsIG1fY3VzdG9tUmVzb2x2ZXIsIGFyZ3MpOworICAgIEpTVmFsdWUg
cmV0dmFsID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEsIG1fY3VzdG9tUmVzb2x2ZXIsIGFyZ3MpOwogICAgIG1fZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxEYXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgU3RyaW5nIHJl
c3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxl
ci5jcHAJKHJldmlzaW9uIDk5NDUxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
cnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNFdmVudC5o
IgorI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNMb2NrLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC05NCw3ICs5NSwxMSBAQCB2b2lk
IEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFCiAgICAgICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gZ2xvYmFsT2JqZWN0LT5tZXRob2RUYWJsZSgpLT50b1RoaXNPYmplY3QoZ2xvYmFs
T2JqZWN0LCBleGVjKTsKIAogICAgICAgICBnbG9iYWxEYXRhLnRpbWVvdXRDaGVja2VyLnN0YXJ0
KCk7Ci0gICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWUgPSBKU0M6OmNhbGwoZXhlYywganNGdW5j
dGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpOworCisgICAgICAgIEpT
VmFsdWUgcmV0dXJuVmFsdWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkK
KyAgICAgICAgICAgID8gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGpzRnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgdGhpc1ZhbHVlLCBhcmdzKQorICAgICAgICAgICAgOiBK
U0M6OmNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUs
IGFyZ3MpOworCiAgICAgICAgIGdsb2JhbERhdGEudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAg
ICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KHNhdmVkRXZlbnQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gOTk0NTEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNp
bmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwu
aCIKICNpbmNsdWRlICJKU0hUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAiU2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CkBAIC0xMTQsNyArMTE1
LDcgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1bWVudDo6b3BlbihFeGVjU3RhdGUqIAogICAgICAgICAg
ICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gOjpnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERh
dGEpOwogICAgICAgICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEs
IHdyYXBwZXIsIEFyZ0xpc3QoZXhlYykpOworICAgICAgICAgICAgICAgIHJldHVybiBKU01haW5U
aHJlYWRFeGVjU3RhdGU6OmNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwg
d3JhcHBlciwgQXJnTGlzdChleGVjKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDk5NDUxKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkpTTm9kZUZpbHRlckNvbmRpdGlvbi5oIgogCisjaW5jbHVkZSAiSlNNYWluVGhyZWFk
RXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNOb2RlRmlsdGVy
LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgpAQCAtNzIsNyArNzMsNyBAQCBzaG9ydCBKU05v
ZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKIAotICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIG1fZmlsdGVyLmdldCgpLCBhcmdzKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTTWFpblRo
cmVhZEV4ZWNTdGF0ZTo6Y2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBt
X2ZpbHRlci5nZXQoKSwgYXJncyk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123864</attachid>
            <date>2012-01-24 18:05:31 -0800</date>
            <delta_ts>2012-02-07 15:24:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70289-20120124180529.patch</filename>
            <type>text/plain</type>
            <size>22428</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NjM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDE4ZDJhZGVhOGI4NDgz
YjIzNDhhNzEzODE4OTM1MmQ5ZmE0NTRjOS4uOWYxODNlYWIzOTNmNTMwY2QxMzMwMmJjMThjOGFm
ZjY5MTc1MTc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTAxLTI0ICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBKU0Mgc3VwcG9ydCBm
b3IgZGVsaXZlcmluZyBtdXRhdGlvbnMgd2hlbiB0aGUgb3V0ZXJtb3N0IHNjcmlwdCBjb250ZXh0
IGV4aXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MDI4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
ZSBtZWF0IG9mIHRoaXMgY2hhbmdlIGlzIGluIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSwgd2hlcmUg
YSBjb3VudGVyCisgICAgICAgIGlzIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgV2ViQ29yZSBjYWxs
cyBpbnRvIEpTQyBhbmQgZGVjcmVtZW50ZWQgZXZlcnkKKyAgICAgICAgdGltZSBpdCByZXR1cm5z
LiBXaGVuIHRoZSBjb3VudGVyIHJlYWNoZXMgemVybywgYW55IHBlbmRpbmcgbXV0YXRpb25zCisg
ICAgICAgIGFyZSBkZWxpdmVyZWQgKHRoaXMgbWlycm9ycyB2ZXJ5IHNpbWlsYXIgY29kZSBpbiBW
OFByb3h5IGFuZCBWOFJlY3Vyc2lvblNjb3BlKS4KKworICAgICAgICBUaGUgcmVzdCBvZiB0aGUg
Y2hhbmdlcyBhcmUgb2YgdHdvIHNvcnRzOiBjb21waWxhdGlvbi9sb2dpYyBmaXhlcyBmb3IKKyAg
ICAgICAgSlNDIGNvZGUgd2hlbiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKSBpcyB0cnVlLCBh
bmQgYWRkaXRpb25hbAorICAgICAgICB1c2FnZXMgb2YgSlNNYWluVGhyZWFkRXhlY1N0YXRlIHNv
IGFzIHRvIHRyaWdnZXIgdGhlIGFib3ZlCisgICAgICAgIGluY3JlbWVudC9kZWNyZW1lbnRzIGF0
IHRoZSBhcHByb3ByaWF0ZSB0aW1lcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3VzdG9t
WFBhdGhOU1Jlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTQ3VzdG9tWFBhdGhOU1Jl
c29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkpOgorICAgICAgICBVc2UgSlNNYWluVGhyZWFkRXhl
Y1N0YXRlIGluc3RlYWQgb2YgSlNDOjpjYWxsLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGlj
dGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1
ZSk6IEFkZCBzdXBwb3J0CisgICAgICAgIGZvciB0cnlHZXRQcm9wZXJ0eSB3aXRoIGEgSGFzaE1h
cDxBdG9taWNTdHJpbmc+LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIFVzZSBKU01haW5UaHJl
YWRFeGVjU3RhdGUgaW5zdGVhZCBvZiBKU0M6OmNhbGwuCisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRG9jdW1l
bnQ6Om9wZW4pOgorICAgICAgICBVc2UgSlNNYWluVGhyZWFkRXhlY1N0YXRlIGluc3RlYWQgb2Yg
SlNDOjpjYWxsLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVjU3RhdGU6OmRpZExlYXZlU2Ny
aXB0Q29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpKU01haW5UaHJlYWRFeGVjU3RhdGU6OkpTTWFpblRocmVh
ZEV4ZWNTdGF0ZSk6CisgICAgICAgIEluY3JlbWVudCBhIHN0YXRpYyByZWN1cnNpb24gbGV2ZWwg
Y291bnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6fkpTTWFp
blRocmVhZEV4ZWNTdGF0ZSk6CisgICAgICAgIERlY3JlbWVudCBhIHN0YXRpYyByZWN1cnNpb24g
bGV2ZWwgY291bnRlciBhbmQsIGlmIHdlIGFyZQorICAgICAgICBhdCB6ZXJvICh0aGUgb3V0ZXJt
b3N0IHNjcmlwdCBpbnZvY2F0aW9uKSwgZGVsaXZlciBhbnkKKyAgICAgICAgb3V0c3RhbmRpbmcg
bXV0YXRpb24gcmVjb3Jkcy4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25k
aXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2Nl
cHROb2RlKToKKyAgICAgICAgVXNlIEpTTWFpblRocmVhZEV4ZWNTdGF0ZSBpbnN0ZWFkIG9mIEpT
Qzo6Y2FsbC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpv
YnNlcnZlKToKKyAgICAgICAgRml4IEpTRGljdGlvbmFyeSBsb2dpYywgYWRkIHN1cHBvcnQgZm9y
IGF0dHJpYnV0ZUZpbHRlci4KKwogMjAxMi0wMS0yMyAgWGlhbnpodSBXYW5nICA8d2FuZ3hpYW56
aHVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEJhc2ljIGVuaGFuY2VtZW50cyB0byBTdHJpbmdC
dWlsZGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAKaW5kZXggYzhhMDA5NjcwODhkOGFiNTE5MzY2ODNhYjI5NmQ4Yjk2
YmRmOWZhZS4uNzlkOWU4YWI3YjY5MDkyMTI1MDExNWExOWNmMDhiYjZmYzQ4NWZkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29s
dmVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVk
ZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCkBAIC04OSw3ICs5MCw3IEBAIFN0cmluZyBK
U0N1c3RvbVhQYXRoTlNSZXNvbHZlcjo6bG9va3VwTmFtZXNwYWNlVVJJKGNvbnN0IFN0cmluZyYg
cHJlZml4KQogICAgIGFyZ3MuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHByZWZpeCkpOwogCiAgICAg
bV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAg
IEpTVmFsdWUgcmV0dmFsID0gSlNDOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsIG1fY3VzdG9tUmVzb2x2ZXIsIGFyZ3MpOworICAgIEpTVmFsdWUgcmV0dmFsID0gSlNN
YWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERh
dGEsIG1fY3VzdG9tUmVzb2x2ZXIsIGFyZ3MpOwogICAgIG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxE
YXRhKCkudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgU3RyaW5nIHJlc3VsdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCmluZGV4IGQ2MzQwMTgzN2E1
NzVjMjg2MjE2OTdiOTM4ODk5ZWYzY2Q2NzIyOTIuLjdmNDhjYTBlZDI3YzczMmIyMWE5OTViMzc2
NGIxMDQxN2IzZTJmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGljdGlvbmFyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9u
YXJ5LmNwcApAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIkpTVHJhY2tDdXN0b20uaCIKICNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIApAQCAtMTM2LDQgKzEzOCwyNiBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVl
KEV4ZWNTdGF0ZSosIEpTVmFsdWUgdmFsdWUsIFJlZlB0cjxUcmFja0Jhc2U+JiByZQogfQogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQordm9pZCBKU0RpY3Rpb25hcnk6
OmNvbnZlcnRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEhhc2hTZXQ8QXRv
bWljU3RyaW5nPiYgcmVzdWx0KQoreworICAgIHJlc3VsdC5jbGVhcigpOworCisgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVk
IGxlbmd0aDsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKGV4ZWMsIHZhbHVl
LCBsZW5ndGgpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICBKU1ZhbHVlIGl0ZW1WYWx1ZSA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOworICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlc3Vs
dC5hZGQodXN0cmluZ1RvQXRvbWljU3RyaW5nKGl0ZW1WYWx1ZS50b1N0cmluZyhleGVjKSkpOwor
ICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCmluZGV4IGM1YTQ4YTI1OTRhNzdhNjViMDVhMjlj
MzFlZDViMzViZTExOTVmYjMuLmZiOGVhMDAzYWYwNzNjYmVhYjRjYjE5ZDk2NjM0ODJhMDk3YjVi
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCkBAIC04Nyw2
ICs4Nyw5IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIHN0YXRpYyB2
b2lkIGNvbnZlcnRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPFRy
YWNrQmFzZT4mIHJlc3VsdCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJT
KQorICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgSGFzaFNldDxBdG9taWNTdHJpbmc+JiByZXN1bHQpOworI2VuZGlmCiAKICAgICBKU0M6
OkV4ZWNTdGF0ZSogbV9leGVjOwogICAgIEpTQzo6SlNPYmplY3QqIG1faW5pdGlhbGl6ZXJPYmpl
Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKaW5k
ZXggNTliM2ZmMzdjNjdlYzk2NTVhOWQ2NTRjOTBlODQyYjljYzhmN2ZhMy4uZTI5MmQyOTMwNWIz
MmFjZTk4MzBmY2QzMjQ3YTU1ZTkwZGJmN2Y2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkV2
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKKyNp
bmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9j
ay5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtOTQsNyArOTUsOSBAQCB2b2lkIEpTRXJy
b3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LAogICAgICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGdsb2JhbE9iamVjdC0+
bWV0aG9kVGFibGUoKS0+dG9UaGlzT2JqZWN0KGdsb2JhbE9iamVjdCwgZXhlYyk7CiAKICAgICAg
ICAgZ2xvYmFsRGF0YS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgICAgICBKU1ZhbHVlIHJl
dHVyblZhbHVlID0gSlNDOjpjYWxsKGV4ZWMsIGpzRnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0
YSwgdGhpc1ZhbHVlLCBhcmdzKTsKKyAgICAgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSA9IHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKQorICAgICAgICAgICAgPyBKU01haW5UaHJl
YWRFeGVjU3RhdGU6OmNhbGwoZXhlYywganNGdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0
aGlzVmFsdWUsIGFyZ3MpCisgICAgICAgICAgICA6IEpTQzo6Y2FsbChleGVjLCBqc0Z1bmN0aW9u
LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncyk7CiAgICAgICAgIGdsb2JhbERh
dGEudGltZW91dENoZWNrZXIuc3RvcCgpOwogCiAgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3Vy
cmVudEV2ZW50KHNhdmVkRXZlbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IGZkNTE4NDU5YTdhMzAyZjE0YjcyYzE1
MmM0MTBiOGIxOGE3YWIxNmIuLjUxYTc1YmRhY2E5OGZjMzljODI4Y2Y1YWVkYzZkNTczYWFjMTgz
ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTERvY3VtZW50
Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxEb2N1bWVu
dEN1c3RvbS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3Rv
bS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJKU0hUTUxDb2xs
ZWN0aW9uLmgiCisjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAi
U2VnbWVudGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CkBAIC0xMTMsNyArMTE0LDcgQEAgSlNWYWx1ZSBKU0hUTUxEb2N1
bWVudDo6b3BlbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2Fs
bFR5cGUgPSA6OmdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0YSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgICAgIHJldHVybiBKU0M6OmNh
bGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgd3JhcHBlciwgQXJnTGlzdChl
eGVjKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6Y2Fs
bChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCB3cmFwcGVyLCBBcmdMaXN0KGV4
ZWMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRF
eGVjU3RhdGUuY3BwCmluZGV4IGQ2NzlhNTg5OTNiMDIyMDA4N2M5ZmIyZWM1Y2U0NTZmZjg4ZDJl
MTUuLjFlMjFiZmEzMzYxMWZiNzM5OWE1NWJmOGNhMDdhMzJkM2UzNjU5OGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcApA
QCAtMjUsOSArMjUsMTkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oIgorI2luY2x1ZGUgIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBKU0M6OkV4ZWNTdGF0ZSogSlNNYWluVGhyZWFkRXhl
Y1N0YXRlOjpzX21haW5UaHJlYWRTdGF0ZSA9IDA7CiAKKyNpZiBFTkFCTEUoTVVUQVRJT05fT0JT
RVJWRVJTKQoraW50IEpTTWFpblRocmVhZEV4ZWNTdGF0ZTo6c19yZWN1cnNpb25MZXZlbCA9IDA7
CisKK3ZvaWQgSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpkaWRMZWF2ZVNjcmlwdENvbnRleHQoKQor
eworICAgIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OmRlbGl2ZXJBbGxNdXRhdGlvbnMoKTsKK30K
KyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5oCmluZGV4IGE0YzMyMTdkM2E0Y2Zh
MGJjYTc3YWEyOWI0MzVmNDY4MzVlMDg4MjQuLmI4MmVmMDM1N2QyZGY0OGIwYTUyMDJmNjI0ZjFj
ZmM4YzE1NGEwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oCkBAIC02NCwxNyArNjQsMzMgQEAgcHJvdGVjdGVkOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICAgICAgc19tYWluVGhyZWFkU3Rh
dGUgPSBleGVjOworCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKKyAgICAgICAgQVNT
RVJUKHNfcmVjdXJzaW9uTGV2ZWwgPj0gMCk7CisgICAgICAgICsrc19yZWN1cnNpb25MZXZlbDsK
KyNlbmRpZgogICAgIH07Ci0gICAgCisKICAgICB+SlNNYWluVGhyZWFkRXhlY1N0YXRlKCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgICAgIHNfbWFpblRocmVh
ZFN0YXRlID0gbV9wcmV2aW91c1N0YXRlOworCisjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVS
UykKKyAgICAgICAgQVNTRVJUKHNfcmVjdXJzaW9uTGV2ZWwgPiAwKTsKKyAgICAgICAgaWYgKCEt
LXNfcmVjdXJzaW9uTGV2ZWwpCisgICAgICAgICAgICBkaWRMZWF2ZVNjcmlwdENvbnRleHQoKTsK
KyNlbmRpZgogICAgIH0KIAogcHJpdmF0ZToKICAgICBzdGF0aWMgSlNDOjpFeGVjU3RhdGUqIHNf
bWFpblRocmVhZFN0YXRlOwogICAgIEpTQzo6RXhlY1N0YXRlKiBtX3ByZXZpb3VzU3RhdGU7CisK
KyNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQorICAgIHN0YXRpYyB2b2lkIGRpZExlYXZl
U2NyaXB0Q29udGV4dCgpOworICAgIHN0YXRpYyBpbnQgc19yZWN1cnNpb25MZXZlbDsKKyNlbmRp
ZgogfTsKIAogLy8gTnVsbCBzdGF0ZSBwcmV2ZW50cyBvcmlnaW4gc2VjdXJpdHkgY2hlY2tzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlv
bi5jcHAKaW5kZXggOWQ1ZGYwNDIxZTdiNGJhZDcyYjIwZGM2NzJkODlkZWI3Zjk2OTA1OC4uOTFi
OTE1NmE0Y2MzZGFjMDU3OTMyNTBjNzJmYWMzNmM3MzEyOGU4NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uY3BwCkBAIC0yMCw2
ICsyMCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmgiCiAKKyNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRl
ICJKU05vZGUuaCIKICNpbmNsdWRlICJKU05vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJOb2RlRmls
dGVyLmgiCkBAIC03Miw3ICs3Myw3IEBAIHNob3J0IEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNj
ZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9kZSkKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJf
UkVKRUNUOwogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwoZXhlYywgZnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwgbV9maWx0ZXIuZ2V0KCksIGFyZ3MpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0gSlNNYWluVGhyZWFkRXhlY1N0YXRlOjpjYWxsKGV4ZWMsIGZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEsIG1fZmlsdGVyLmdldCgpLCBhcmdzKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJLaXRN
dXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAppbmRleCAzOGMzOWU0MjI0MDdkNWI0YzkyMjYzYTUy
MGIzNDRiMmRmYWQzOGQ0Li40NTVmNGQ0ZTA5YjVkMTljODM4YjI4MjIwZGI4NzMwZjU4ZDFkMjAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYktpdE11dGF0aW9u
T2JzZXJ2ZXJDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
S2l0TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKQEAgLTQxLDYgKzQxLDggQEAKICNpbmNsdWRl
ICJOb2RlLmgiCiAjaW5jbHVkZSAiV2ViS2l0TXV0YXRpb25PYnNlcnZlci5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC02Miw2
ICs2NCwyMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTV2ViS2l0TXV0YXRpb25P
YnNlcnZlckNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RKU1dlYgogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwg
V2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Y3JlYXRlKGNhbGxiYWNrLnJlbGVhc2UoKSkpKSk7CiB9
CiAKK3N0cnVjdCBCb29sZWFuT3B0aW9uIHsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIE11
dGF0aW9uT2JzZXJ2ZXJPcHRpb25zIHZhbHVlOworfTsKKworc3RhdGljIGNvbnN0IEJvb2xlYW5P
cHRpb24gYm9vbGVhbk9wdGlvbnNbXSA9IHsKKyAgICB7ICJjaGlsZExpc3QiLCBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjpDaGlsZExpc3QgfSwKKyAgICB7ICJhdHRyaWJ1dGVzIiwgV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6QXR0cmlidXRlcyB9LAorICAgIHsgImNoYXJhY3RlckRhdGEiLCBXZWJL
aXRNdXRhdGlvbk9ic2VydmVyOjpDaGFyYWN0ZXJEYXRhIH0sCisgICAgeyAic3VidHJlZSIsIFdl
YktpdE11dGF0aW9uT2JzZXJ2ZXI6OlN1YnRyZWUgfSwKKyAgICB7ICJhdHRyaWJ1dGVPbGRWYWx1
ZSIsIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6OkF0dHJpYnV0ZU9sZFZhbHVlIH0sCisgICAgeyAi
Y2hhcmFjdGVyRGF0YU9sZFZhbHVlIiwgV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6Q2hhcmFjdGVy
RGF0YU9sZFZhbHVlIH0KK307CisKK3N0YXRpYyBjb25zdCBzaXplX3QgbnVtQm9vbGVhbk9wdGlv
bnMgPSBzaXplb2YoYm9vbGVhbk9wdGlvbnMpIC8gc2l6ZW9mKEJvb2xlYW5PcHRpb24pOworCiBK
U1ZhbHVlIEpTV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6b2JzZXJ2ZShFeGVjU3RhdGUqIGV4ZWMp
CiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDIpCkBAIC03OCwyNCArOTYsMjIg
QEAgSlNWYWx1ZSBKU1dlYktpdE11dGF0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoRXhlY1N0YXRlKiBl
eGVjKQogCiAgICAgSlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnkoZXhlYywgb3B0aW9uc09iamVjdCk7
CiAgICAgTXV0YXRpb25PYnNlcnZlck9wdGlvbnMgb3B0aW9ucyA9IDA7Ci0gICAgLy8gRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBwYXJzaW5nIG9mIHRoZSBhdHRyaWJ1dGVGaWx0ZXIgb3B0aW9uLgot
ICAgIGJvb2wgb3B0aW9uOwotICAgIGlmIChkaWN0aW9uYXJ5LnRyeUdldFByb3BlcnR5KCJjaGls
ZExpc3QiLCBvcHRpb24pICYmIG9wdGlvbikKLSAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRNdXRh
dGlvbk9ic2VydmVyOjpDaGlsZExpc3Q7Ci0gICAgaWYgKGRpY3Rpb25hcnkudHJ5R2V0UHJvcGVy
dHkoImF0dHJpYnV0ZXMiLCBvcHRpb24pICYmIG9wdGlvbikKLSAgICAgICAgb3B0aW9ucyB8PSBX
ZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVzOwotICAgIGlmIChkaWN0aW9uYXJ5LnRy
eUdldFByb3BlcnR5KCJzdWJ0cmVlIiwgb3B0aW9uKSAmJiBvcHRpb24pCi0gICAgICAgIG9wdGlv
bnMgfD0gV2ViS2l0TXV0YXRpb25PYnNlcnZlcjo6U3VidHJlZTsKLSAgICBpZiAoZGljdGlvbmFy
eS50cnlHZXRQcm9wZXJ0eSgiYXR0cmlidXRlT2xkVmFsdWUiLCBvcHRpb24pICYmIG9wdGlvbikK
LSAgICAgICAgb3B0aW9ucyB8PSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyOjpBdHRyaWJ1dGVPbGRW
YWx1ZTsKLSAgICBpZiAoZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgiY2hhcmFjdGVyRGF0YU9s
ZFZhbHVlIiwgb3B0aW9uKSAmJiBvcHRpb24pCi0gICAgICAgIG9wdGlvbnMgfD0gV2ViS2l0TXV0
YXRpb25PYnNlcnZlcjo6Q2hhcmFjdGVyRGF0YU9sZFZhbHVlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1Cb29sZWFuT3B0aW9uczsgKytpKSB7CisgICAgICAgIGJvb2wgb3B0aW9u
ID0gZmFsc2U7CisgICAgICAgIGlmICghZGljdGlvbmFyeS50cnlHZXRQcm9wZXJ0eShib29sZWFu
T3B0aW9uc1tpXS5uYW1lLCBvcHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgICAgIGlmIChvcHRpb24pCisgICAgICAgICAgICBvcHRpb25zIHw9IGJvb2xlYW5P
cHRpb25zW2ldLnZhbHVlOworICAgIH0KIAotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gYXR0cmlidXRlRmlsdGVyOworICAgIGlmICghZGlj
dGlvbmFyeS50cnlHZXRQcm9wZXJ0eSgiYXR0cmlidXRlRmlsdGVyIiwgYXR0cmlidXRlRmlsdGVy
KSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgaWYgKCFhdHRyaWJ1dGVGaWx0
ZXIuaXNFbXB0eSgpKQorICAgICAgICBvcHRpb25zIHw9IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXI6
OkF0dHJpYnV0ZUZpbHRlcjsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGltcGwo
KS0+b2JzZXJ2ZSh0YXJnZXQsIG9wdGlvbnMsIGVjKTsKKyAgICBpbXBsKCktPm9ic2VydmUodGFy
Z2V0LCBvcHRpb25zLCBhdHRyaWJ1dGVGaWx0ZXIsIGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTI3ZjNj
NjViODY1YzRkY2NmMGY1NDNkNTg5NzY3ODA3ZDdmYmU2Ni4uMGY4MDQyMTdlMWExYjJhN2Y1NWNm
ODFiZDViOGRlYzI4ZjdhODUxYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEyLTAxLTI0ICBBZGFtIEtsZWluICA8
YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBKU0Mgc3VwcG9ydCBmb3IgZGVsaXZl
cmluZyBtdXRhdGlvbnMgd2hlbiB0aGUgb3V0ZXJtb3N0IHNjcmlwdCBjb250ZXh0IGV4aXRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDI4OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvbWFjL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIubW06IEFkZCBzdXBwb3J0IGZvcgorICAg
ICAgICBldmVudFNlbmRlci5zY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24uCisgICAgICAgICgr
W0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIgaXNTZWxlY3RvckV4Y2x1ZGVkRnJvbVdlYlNjcmlwdDpd
KToKKyAgICAgICAgKCtbRXZlbnRTZW5kaW5nQ29udHJvbGxlciB3ZWJTY3JpcHROYW1lRm9yU2Vs
ZWN0b3I6XSk6CisgICAgICAgICgtW0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIga2V5RG93bldyYXBw
ZXI6d2l0aE1vZGlmaWVyczp3aXRoTG9jYXRpb246XSk6CisgICAgICAgICgtW0V2ZW50U2VuZGlu
Z0NvbnRyb2xsZXIgc2NoZWR1bGVBc3luY2hyb25vdXNLZXlEb3duOndpdGhNb2RpZmllcnM6d2l0
aExvY2F0aW9uOl0pOgorICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OiBQcm9wZXJseSBh
bHBoYWJldGl6ZSAtLW11dGF0aW9uLW9ic2VydmVycyBpbiB0aGUgLS1oZWxwIG91dHB1dC4KKwog
MjAxMi0wMS0yMyAgWGlhbnpodSBXYW5nICA8d2FuZ3hpYW56aHVAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIEJhc2ljIGVuaGFuY2VtZW50cyB0byBTdHJpbmdCdWlsZGVyCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5tbSBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9FdmVudFNlbmRpbmdDb250cm9sbGVyLm1tCmluZGV4IGYwN2E0
M2U4N2JlZmZlZmM5ODU4MDhjZjA3N2ZiOWQwZTJlMzdkYmMuLmJkZjc3YTc3Y2UxOTY0OTZjZjU3
NjlhYjI0YTlhMWM0MzkyZjJlZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9FdmVudFNlbmRpbmdDb250cm9sbGVyLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9FdmVudFNlbmRpbmdDb250cm9sbGVyLm1tCkBAIC0xMzEsNiArMTMxLDcgQEAgQk9PTCByZXBs
YXlpbmdTYXZlZEV2ZW50czsKICAgICAgICAgICAgIHx8IGFTZWxlY3RvciA9PSBAc2VsZWN0b3Io
bW91c2VNb3ZlVG9YOlk6KQogICAgICAgICAgICAgfHwgYVNlbGVjdG9yID09IEBzZWxlY3Rvciht
b3VzZVVwOndpdGhNb2RpZmllcnM6KQogICAgICAgICAgICAgfHwgYVNlbGVjdG9yID09IEBzZWxl
Y3RvcihzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNrKQorICAgICAgICAgICAgfHwgYVNlbGVjdG9y
ID09IEBzZWxlY3RvcihzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd246d2l0aE1vZGlmaWVyczp3
aXRoTG9jYXRpb246KQogICAgICAgICAgICAgfHwgYVNlbGVjdG9yID09IEBzZWxlY3Rvcih0ZXh0
Wm9vbUluKQogICAgICAgICAgICAgfHwgYVNlbGVjdG9yID09IEBzZWxlY3Rvcih0ZXh0Wm9vbU91
dCkKICAgICAgICAgICAgIHx8IGFTZWxlY3RvciA9PSBAc2VsZWN0b3Ioem9vbVBhZ2VJbikKQEAg
LTE2MSw2ICsxNjIsOCBAQCBCT09MIHJlcGxheWluZ1NhdmVkRXZlbnRzOwogICAgICAgICByZXR1
cm4gQCJmaXJlS2V5Ym9hcmRFdmVudHNUb0VsZW1lbnQiOwogICAgIGlmIChhU2VsZWN0b3IgPT0g
QHNlbGVjdG9yKGtleURvd246d2l0aE1vZGlmaWVyczp3aXRoTG9jYXRpb246KSkKICAgICAgICAg
cmV0dXJuIEAia2V5RG93biI7CisgICAgaWYgKGFTZWxlY3RvciA9PSBAc2VsZWN0b3Ioc2NoZWR1
bGVBc3luY2hyb25vdXNLZXlEb3duOndpdGhNb2RpZmllcnM6d2l0aExvY2F0aW9uOikpCisgICAg
ICAgIHJldHVybiBAInNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93biI7CiAgICAgaWYgKGFTZWxl
Y3RvciA9PSBAc2VsZWN0b3IobGVhcEZvcndhcmQ6KSkKICAgICAgICAgcmV0dXJuIEAibGVhcEZv
cndhcmQiOwogICAgIGlmIChhU2VsZWN0b3IgPT0gQHNlbGVjdG9yKG1vdXNlRG93bjp3aXRoTW9k
aWZpZXJzOikpCkBAIC03MTgsNiArNzIxLDI1IEBAIHN0YXRpYyBpbnQgYnVpbGRNb2RpZmllckZs
YWdzKGNvbnN0IFdlYlNjcmlwdE9iamVjdCogbW9kaWZpZXJzKQogICAgIFtbW1ttYWluRnJhbWUg
d2ViVmlld10gd2luZG93XSBmaXJzdFJlc3BvbmRlcl0ga2V5VXA6ZXZlbnRdOwogfQogCistICh2
b2lkKWtleURvd25XcmFwcGVyOihOU1N0cmluZyAqKWNoYXJhY3RlciB3aXRoTW9kaWZpZXJzOihX
ZWJTY3JpcHRPYmplY3QgKiltb2RpZmllcnMgd2l0aExvY2F0aW9uOih1bnNpZ25lZCBsb25nKWtl
eUxvY2F0aW9uCit7CisgICAgW3NlbGYga2V5RG93bjpjaGFyYWN0ZXIgd2l0aE1vZGlmaWVyczpt
b2RpZmllcnMgd2l0aExvY2F0aW9uOmtleUxvY2F0aW9uXTsKKyAgICBbY2hhcmFjdGVyIHJlbGVh
c2VdOworICAgIFttb2RpZmllcnMgcmVsZWFzZV07Cit9CisKKy0gKHZvaWQpc2NoZWR1bGVBc3lu
Y2hyb25vdXNLZXlEb3duOihOU1N0cmluZyAqKWNoYXJhY3RlciB3aXRoTW9kaWZpZXJzOihXZWJT
Y3JpcHRPYmplY3QgKiltb2RpZmllcnMgd2l0aExvY2F0aW9uOih1bnNpZ25lZCBsb25nKWtleUxv
Y2F0aW9uCit7CisgICAgTlNJbnZvY2F0aW9uICppbnZvY2F0aW9uID0gW05TSW52b2NhdGlvbiBp
bnZvY2F0aW9uV2l0aE1ldGhvZFNpZ25hdHVyZTpbRXZlbnRTZW5kaW5nQ29udHJvbGxlciBpbnN0
YW5jZU1ldGhvZFNpZ25hdHVyZUZvclNlbGVjdG9yOkBzZWxlY3RvcihrZXlEb3duV3JhcHBlcjp3
aXRoTW9kaWZpZXJzOndpdGhMb2NhdGlvbjopXV07CisgICAgW2ludm9jYXRpb24gcmV0YWluQXJn
dW1lbnRzXTsKKyAgICBbaW52b2NhdGlvbiBzZXRUYXJnZXQ6c2VsZl07CisgICAgW2ludm9jYXRp
b24gc2V0U2VsZWN0b3I6QHNlbGVjdG9yKGtleURvd25XcmFwcGVyOndpdGhNb2RpZmllcnM6d2l0
aExvY2F0aW9uOildOworICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZjaGFyYWN0ZXIgYXRJ
bmRleDoyXTsKKyAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDombW9kaWZpZXJzIGF0SW5kZXg6
M107CisgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JmtleUxvY2F0aW9uIGF0SW5kZXg6NF07
CisgICAgW2ludm9jYXRpb24gcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihpbnZva2UpIHdpdGhP
YmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07Cit9CisKIC0gKHZvaWQpZW5hYmxlRE9NVUlFdmVudExv
Z2dpbmc6KFdlYlNjcmlwdE9iamVjdCAqKW5vZGUKIHsKICAgICBOU0VudW1lcmF0b3IgKmV2ZW50
RW51bWVyYXRvciA9IFt3ZWJraXREb21FdmVudE5hbWVzIG9iamVjdEVudW1lcmF0b3JdOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxk
LXdlYmtpdAppbmRleCAwYzRkOWEzZGE4N2IyNjQ0YmZhZTBhYTZkNGI2YmZhMjAyMGQ3YTA2Li43
OTEzNWFjMzQwNDkxNzAxOWFlZWU5MWM1MGQ1ZWM0NDZlZmI3MGI1IDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL2J1aWxkLXdlYmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApA
QCAtMTk0LDkgKzE5NCw2IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAiZGly
ZWN0b3J5LXVwbG9hZCIsIGRlc2MgPT4gIlRvb2dsZSBEaXJlY3RvcnkgdXBsb2FkIHN1cHBvcnQi
LAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfRElSRUNUT1JZX1VQTE9BRCIsIGRlZmF1bHQgPT4g
MCwgdmFsdWUgPT4gXCRkaXJlY3RvcnlVcGxvYWRTdXBwb3J0IH0sCiAKLSAgICB7IG9wdGlvbiA9
PiAibXV0YXRpb24tb2JzZXJ2ZXJzIiwgZGVzYyA9PiAiVG9nZ2xlIERPTSBtdXRhdGlvbiBvYnNl
cnZlciBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX01VVEFUSU9OX09CU0VSVkVS
UyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRtdXRhdGlvbk9ic2VydmVyc1N1cHBvcnQgfSwK
LQogICAgIHsgb3B0aW9uID0+ICJmaWxlLXN5c3RlbSIsIGRlc2MgPT4gIlRvZ2dsZSBGaWxlU3lz
dGVtIHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfRklMRV9TWVNURU0iLCBkZWZh
dWx0ID0+IDAsIHZhbHVlID0+IFwkZmlsZVN5c3RlbVN1cHBvcnQgfSwKIApAQCAtMjcyLDYgKzI2
OSw5IEBAIG15IEBmZWF0dXJlcyA9ICgKICAgICB7IG9wdGlvbiA9PiAibWljcm9kYXRhIiwgZGVz
YyA9PiAiVG9nZ2xlIE1pY3JvZGF0YSBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X01JQ1JPREFUQSIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRtaWNyb2RhdGFTdXBwb3J0IH0s
CiAKKyAgICB7IG9wdGlvbiA9PiAibXV0YXRpb24tb2JzZXJ2ZXJzIiwgZGVzYyA9PiAiVG9nZ2xl
IERPTSBtdXRhdGlvbiBvYnNlcnZlciBzdXBwb3J0IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxF
X01VVEFUSU9OX09CU0VSVkVSUyIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4gXCRtdXRhdGlvbk9i
c2VydmVyc1N1cHBvcnQgfSwKKwogICAgIHsgb3B0aW9uID0+ICJuZXRzY2FwZS1wbHVnaW4iLCBk
ZXNjID0+ICJOZXRzY2FwZSBQbHVnaW4gc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9ORVRTQ0FQRV9QTFVHSU5fQVBJIiwgZGVmYXVsdCA9PiAhaXNFZmwoKSwgdmFsdWUgPT4gXCRu
ZXRzY2FwZVBsdWdpblN1cHBvcnQgfSwKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDVlOGZiNjg4MTY4NjM4ZGIzYWYyMzJm
ZGVlNGJhZmQxMTY4OTBkOTcuLjJmYzUwNTQ4MTA1ZTFjNjRjYTZmZjEyMmUzYzYxNDQwMTZhODBl
NzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0wMS0yNCAgQWRhbSBLbGVpbiAgPGFkYW1r
QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgSlNDIHN1cHBvcnQgZm9yIGRlbGl2ZXJpbmcg
bXV0YXRpb25zIHdoZW4gdGhlIG91dGVybW9zdCBzY3JpcHQgY29udGV4dCBleGl0cworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyODkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoZSB2YXJpb3Vz
IGZpeGVzIGluIHRoaXMgY2hhbmdlLCA4LzEwIHRlc3RzIGluIGZhc3QvbXV0YXRpb24KKyAgICAg
ICAgcGFzcyB1bmRlciBXZWJLaXQvTWFjLiBPZiB0aGUgZmFpbGluZyB0ZXN0cywgb25seSBvbmUg
aXMgZHVlIHRvCisgICAgICAgIGEgZGVmaWNpZW5jeSBpbiB0aGUgTWFjIHBvcnQncyBjb2RlIChl
bmQtb2YtdGFzay1kZWxpdmVyeS5odG1sKTsKKyAgICAgICAgdGhlIG90aGVyIGlzIGR1ZSB0byBs
YWNrIG9mIHN1cHBvcnQgZm9yIGEgZmVhdHVyZSAoRklMRV9TWVNURU0pCisgICAgICAgIGV4ZXJj
aXNlZCBieSB0aGUgdGVzdCAobm9uLWV2ZW50LWRlbGl2ZXJ5Lmh0bWwpLgorCisgICAgICAgICog
ZmFzdC9tdXRhdGlvbi9ub24tZXZlbnQtZGVsaXZlcnkuaHRtbDogTWFkZSBpdCBmYWlsIGZhc3Qg
aWYgRmlsZVN5c3RlbSBzdXBwb3J0IGlzbid0IGF2YWlsYWJsZS4KKyAgICAgICAgKiBmYXN0L211
dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sOiBGaXhlZCBjYWxscyB0byByZW1vdmVFdmVu
dExpc3RlbmVyLgorICAgICAgICAqIGZhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGFyYWN0ZXJkYXRh
Lmh0bWw6IGRpdHRvLgorCiAyMDEyLTAxLTIzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVXBkYXRlIHRoZSBiYXNlbGluZXMgZm9yIGEgbnVtYmVyIG9mIHRlc3Rz
IHRoYXQgdXNlIGdyYWRpZW50cy4gIFRoZSBuZXcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvbXV0YXRpb24vbm9uLWV2ZW50LWRlbGl2ZXJ5Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L211
dGF0aW9uL25vbi1ldmVudC1kZWxpdmVyeS5odG1sCmluZGV4IDQxNzBkMDJkNDQ3NjM1ZDU2MDdi
MTFlN2QzNWE4MDEwODVjY2QyOGQuLjU1ZjE3OWYwNDI0YzdjNzZmMWM1MTQ1MTc5M2Y4MTJhNzZm
MDdkYjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vbm9uLWV2ZW50LWRl
bGl2ZXJ5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9ub24tZXZlbnQtZGVs
aXZlcnkuaHRtbApAQCAtMTE2LDkgKzExNiwxMyBAQCBmdW5jdGlvbiBydW5OZXh0VGVzdCgpIHsK
IAogZGVzY3JpcHRpb24oJ1Rlc3QgdGhhdCBNdXRhdGlvbiBSZWNvcmRzIGFyZSBkZWxpdmVyZWQg
Zm9sbG93aW5nIG5vbi1ldmVudCBhc3luYyBjYWxsYmFja3MuJyk7CiAKLWlmICghd2luZG93Lldl
YktpdE11dGF0aW9uT2JzZXJ2ZXIpCitpZiAoIXdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVy
KSB7CiAgICAgdGVzdEZhaWxlZCgnVGhpcyB0ZXN0IHJlcXVpcmVzIEVOQUJMRShNVVRBVElPTl9P
QlNFUlZFUlMpJyk7Ci1lbHNlCisgICAgZmluaXNoSlNUZXN0KCk7Cit9IGVsc2UgaWYgKCF3aW5k
b3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0pIHsKKyAgICB0ZXN0RmFpbGVkKCdUaGlzIHRlc3Qg
cmVxdWlyZXMgRU5BQkxFKEZJTEVfU1lTVEVNKScpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSBl
bHNlCiAgICAgcnVuTmV4dFRlc3QoKTsKIAogPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtYXR0cmlidXRlcy5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWF0dHJpYnV0ZXMuaHRtbAppbmRleCBhNDdlZjZhYzczZDcy
NTUzMTk0MDJiM2QxNjM0OGM1ZWVjYzA4YmEyLi44NjdjNGIzNWFjODAzNzA0Mjc4OWQ5N2YyZWM1
ZmM4MGZkNTZiNWJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2Vy
dmUtYXR0cmlidXRlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2
ZS1hdHRyaWJ1dGVzLmh0bWwKQEAgLTI4NSw3ICsyODUsNyBAQCBmdW5jdGlvbiB0ZXN0T3JkZXJp
bmdXcnRET01TdWJ0cmVlTW9kaWZpZWQoKSB7CiAgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MF0uYXR0cmlidXRlTmFtZScsICciZm9vIicpOwogICAgICAgICBzaG91bGRCZSgnbXV0YXRpb25z
WzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7CiAgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnNb
MV0uYXR0cmlidXRlTmFtZScsICciYmF6IicpOwotICAgICAgICBkaXYucmVtb3ZlRXZlbnRMaXN0
ZW5lcihsaXN0ZW5lcik7CisgICAgICAgIGRpdi5yZW1vdmVFdmVudExpc3RlbmVyKCdET01TdWJ0
cmVlTW9kaWZpZWQnLCBsaXN0ZW5lcik7CiAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hp
bGQoZGl2KTsKICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICBkZWJ1Zygn
Jyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hhcmFj
dGVyZGF0YS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tdXRhdGlvbi9vYnNlcnZlLWNoYXJhY3Rl
cmRhdGEuaHRtbAppbmRleCA3MDAxZWFhYjMwOTA2YzdjYTcxMTNhMzU5ZDAwNWMxOGYyZDFlZTkw
Li4wMWNhZWEyMWVhNDMwNmI2ZmNmZjJlNDlmZDBlMzk3MzdhMTI2NDVjIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9mYXN0L211dGF0aW9uL29ic2VydmUtY2hhcmFjdGVyZGF0YS5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvbXV0YXRpb24vb2JzZXJ2ZS1jaGFyYWN0ZXJkYXRhLmh0bWwKQEAg
LTE4Miw3ICsxODIsNyBAQCBmdW5jdGlvbiB0ZXN0T3JkZXJpbmdXcnRET01TdWJ0cmVlTW9kaWZp
ZWQoKSB7CiAgICAgICAgIHNob3VsZEJlKCdtdXRhdGlvbnMubGVuZ3RoJywgJzInKTsKICAgICAg
ICAgc2hvdWxkQmUoJ211dGF0aW9uc1swXS50eXBlJywgJyJjaGFyYWN0ZXJEYXRhIicpOwogICAg
ICAgICBzaG91bGRCZSgnbXV0YXRpb25zWzFdLnR5cGUnLCAnImF0dHJpYnV0ZXMiJyk7Ci0gICAg
ICAgIGRpdi5yZW1vdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICAgICAgZGl2LnJlbW92
ZUV2ZW50TGlzdGVuZXIoJ0RPTVN1YnRyZWVNb2RpZmllZCcsIGxpc3RlbmVyKTsKICAgICAgICAg
ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOwogICAgICAgICBvYnNlcnZlci5kaXNjb25u
ZWN0KCk7CiAgICAgICAgIGRlYnVnKCcnKTsK
</data>
<flag name="review"
          id="124992"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>