<?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>26448</bug_id>
          
          <creation_ts>2009-06-16 10:38:17 -0700</creation_ts>
          <short_desc>Need to optimize MessagePort GC for same-thread case</short_desc>
          <delta_ts>2009-06-21 14:33:54 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrew Wilson">atwilson</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>ap</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>126225</commentid>
    <comment_count>0</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-16 10:38:17 -0700</bug_when>
    <thetext>The patch for bug #25043 reflects the latest spec - any entangled MessagePort should be treated as &quot;reachable&quot; regardless of whether its entangled port is reachable or not. This spec change was driven by the need to support ports that are entangled across multiple threads where it is difficult to determine reachability.

In the case where both ends of the MessagePort are run by the same thread, it is possible to determine reachability correctly. This would allow us to GC unreachable ports in case like this:

var channel = new MessageChannel();
channel = 0;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126725</commentid>
    <comment_count>1</comment_count>
      <attachid>31501</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-18 10:28:12 -0700</bug_when>
    <thetext>Created attachment 31501
Proposed patch

I&apos;d like to land this patch along with the patch for 25043, as it makes the merge into Chromium much simpler. So if we could land them together that would be much appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126791</commentid>
    <comment_count>2</comment_count>
      <attachid>31501</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-18 15:38:22 -0700</bug_when>
    <thetext>Comment on attachment 31501
Proposed patch

A few comments to address and then this should be fine (so r- for now).


&gt; diff --git a/LayoutTests/fast/events/message-channel-gc-4.html-disabled b/LayoutTests/fast/events/message-channel-gc-4.html-disabled

&gt; +    for (var i = 0; i &lt; 10000; i++) { // &gt; force garbage collection (FF requires about 9K allocations before a collect)

The &quot;&gt;&quot; in the comment doesn&apos;t make sense to me.


&gt; +function test1()
&gt; +{
&gt; +    var channel = new MessageChannel;
&gt; +    var channel2 = new MessageChannel;
&gt; +    channel.port1.postMessage(&quot;msg1&quot;);
&gt; +    channel2.port1.postMessage(&quot;&quot;, channel.port1);
&gt; +    channel2.port2.postMessage(&quot;&quot;, channel.port2);
&gt; +    channel2.port2.onmessage = channel2.port1.onmessage = function(event) {
&gt; +       event.messagePort.onmessage = function(event) {

It seems like it would be better if this didn&apos;t use &quot;event&quot; again since this is
already in the outer scope.


&gt; +            } else {
&gt; +                log(&quot;FAIL: Received unknown message: &quot; + event.data);
&gt; +            }
&gt; +        event.messagePort = 0;
Indentation is off or it is in the wrong scope.

&gt; +        }
&gt; +    }

&gt; diff --git a/WebCore/dom/MessagePort.h b/WebCore/dom/MessagePort.h

&gt; +        // Returns null if there is no entangled port, or if the port is entangled remotely.
This function is given a description in 3 places.  I think this one is the least descriptive because
I don&apos;t know what &quot;entangled remotely&quot; means here.

&gt; +        MessagePort* locallyEntangledPort();
&gt; +        bool isEntangled() { return m_entangledChannel; }


&gt; diff --git a/WebCore/dom/MessagePortChannel.h b/WebCore/dom/MessagePortChannel.h


&gt;          // Extracts a message from the message queue for this port.
&gt;          bool tryGetMessageFromRemote(OwnPtr&lt;EventData&gt;&amp;);
&gt;  
&gt; +        // Returns a reference to the entangled port, if it is run by the same thread.
&gt; +        // Returns null if remotely entangled, or if disentangled due to the remote port being cloned and in-transit to a new owner.

How about:
// Returns a reference to the entangled port, if it is run by on same thread as the given ScriptExecutionContext.
// Returns null otherwise.
?


&gt; diff --git a/WebCore/dom/default/PlatformMessagePortChannel.cpp b/WebCore/dom/default/PlatformMessagePortChannel.cpp

&gt; +MessagePort* PlatformMessagePortChannel::locallyEntangledPort(const ScriptExecutionContext&amp; context)
&gt; +{
&gt; +    MutexLocker lock(m_mutex);
&gt; +    // See if both contexts are run by the same thread (are the same context, or are both documents).
&gt; +    if (m_remotePort) {
&gt; +        ScriptExecutionContext* remoteContext = m_remotePort-&gt;scriptExecutionContext();
&gt; +        if (remoteContext == &amp;context || (remoteContext &amp;&amp; remoteContext-&gt;isDocument() &amp;&amp; context.isDocument()))

2 Issues:
1. (Minor) It feels odd to do pointer comparison on an item passed in using a ref.  Maybe we should get rid of the ref here and just assert?  What do you think?
2. (Major) When you call &quot;remoteContext-&gt;isDocument()&quot; if remoteContext is a context in a different thread, how do you know that it hasn&apos;t been deleted yet?

You explained this one to me.  It is because it has the lock... It may be nice to add some small comment here to note that because it looked wrong when reading this code.
 


&gt; diff --git a/WebCore/dom/default/PlatformMessagePortChannel.h b/WebCore/dom/default/PlatformMessagePortChannel.h

&gt; +        // Returns a reference to the entangled port, if it is run by the same thread.
&gt; +        // Returns null if remotely entangled, or if disentangled due to the remote port being cloned and in-transit to a new owner.
I added a comment about this comment below.  It is a shame to have the same comment twice and seems destine to get out of sync.

Can we get rid of this one (You could refer to the other header file if desired, something like // See MessagePortChannel.h for the description.)

Same thing for the duplicate comment in hasPendingActivity().

What do you think?


&gt; +        // Used only to do more optimal GC, so platforms where this is difficult to determine can always just return null.
Are there platforms where it will return NULL even if these items on one the same thread?  If so, then the comment above is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126825</commentid>
    <comment_count>3</comment_count>
      <attachid>31521</attachid>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2009-06-18 17:27:11 -0700</bug_when>
    <thetext>Created attachment 31521
Revised patch per review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126831</commentid>
    <comment_count>4</comment_count>
      <attachid>31521</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-18 17:38:08 -0700</bug_when>
    <thetext>Comment on attachment 31521
Revised patch per review comments

&gt; diff --git a/LayoutTests/fast/events/message-channel-gc-4.html-disabled b/LayoutTests/fast/events/message-channel-gc-4.html-disabled
&gt; +    channel2.port2.postMessage(&quot;&quot;, channel.port2);
&gt; +    channel2.port2.onmessage = channel2.port1.onmessage = function(evt) {
&gt; +       evt.messagePort.onmessage = function(event) {
This should be indented by one more space.  (The alignment of things just looked funny when I was reviewing it.)


I&apos;ll fix this when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126833</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-18 17:38:32 -0700</bug_when>
    <thetext>Assigned to levin for landing.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127246</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-06-21 14:33:54 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/44916</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31501</attachid>
            <date>2009-06-18 10:28:12 -0700</date>
            <delta_ts>2009-06-18 17:27:11 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>14182</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5MjFhOTM5Li4yNzJkM2Y5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDYgKzEsMTggQEAKIDIwMDktMDYt
MTcgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQ0OD4KKworICAgICAgICBOZXcgdGVzdHMgZm9yIE1l
c3NhZ2VQb3J0IEdDIGNhc2VzIHRoYXQgd2VyZW4ndCBwcmV2aW91c2x5IGNvdmVyZWQuCisKKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtNC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICBUZXN0IGZvciBjYXNlIHdoZXJlIGJvdGggTWVzc2FnZVBvcnRzIGFyZSBp
bi10cmFuc2l0IChjbG9uZWQpIHdoZW4gYSBHQyBvY2N1cnMuCisgICAgICAgICogZmFzdC9ldmVu
dHMvbWVzc2FnZS1jaGFubmVsLWdjLTQuaHRtbC1kaXNhYmxlZDogQWRkZWQuCisKKzIwMDktMDYt
MTYgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KIAogICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI1MDQzPgogICAgICAgICBVcGRhdGVkIE1lc3NhZ2VDaGFubmVsL01l
c3NhZ2VQb3J0cyB0ZXN0cyB0byByZWZsZWN0IGxhdGVzdCBzcGVjIChjbG9zZSBldmVudCBoYXMg
YmVlbiByZW1vdmVkKS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3Nh
Z2UtY2hhbm5lbC1nYy00LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21l
c3NhZ2UtY2hhbm5lbC1nYy00LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lNTQxOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAor
VGVzdCB0aGF0IE1lc3NhZ2VQb3J0IG1lc3NhZ2VzIGFyZSBkZWxpdmVyZWQgZXZlbiBpZiBib3Ro
IHBvcnRzIGFyZSBpbiB0cmFuc2l0IChjbG9uZWQpLgorCitTaG91bGQgc2F5IFBBU1MgdHdpY2Uu
CisKK1BBU1M6IFJlY2VpdmVkIG1lc3NhZ2UgdG8gY2xvbmVkIHBvcnQuCitQQVNTOiBSZWNlaXZl
ZCBtZXNzYWdlIGZyb20gY2xvbmVkIHBvcnQuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy00Lmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtNC5odG1sLWRpc2FibGVkCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZGFkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtNC5odG1sLWRpc2FibGVk
CkBAIC0wLDAgKzEsNTggQEAKKzxib2R5PgorPHA+VGVzdCB0aGF0IE1lc3NhZ2VQb3J0IG1lc3Nh
Z2VzIGFyZSBkZWxpdmVyZWQgZXZlbiBpZiBib3RoIHBvcnRzIGFyZSBpbiB0cmFuc2l0IChjbG9u
ZWQpLjwvcD4KKzxwPlNob3VsZCBzYXkgUEFTUyB0d2ljZS48L3A+Cis8cHJlIGlkPWxvZz48L3By
ZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBnYygpCit7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xs
ZXIpCisgICAgICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7IC8vID4gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9u
IChGRiByZXF1aXJlcyBhYm91dCA5SyBhbGxvY2F0aW9ucyBiZWZvcmUgYSBjb2xsZWN0KQorICAg
ICAgICB2YXIgcyA9IG5ldyBTdHJpbmcoImFiYyIpOworICAgIH0KK30KKworZnVuY3Rpb24gbG9n
KG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVySFRN
TCArPSBtZXNzYWdlICsgIjxicj4iOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gdGVzdDEoKQor
eworICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsOworICAgIHZhciBjaGFubmVs
MiA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICBjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKCJt
c2cxIik7CisgICAgY2hhbm5lbDIucG9ydDEucG9zdE1lc3NhZ2UoIiIsIGNoYW5uZWwucG9ydDEp
OworICAgIGNoYW5uZWwyLnBvcnQyLnBvc3RNZXNzYWdlKCIiLCBjaGFubmVsLnBvcnQyKTsKKyAg
ICBjaGFubmVsMi5wb3J0Mi5vbm1lc3NhZ2UgPSBjaGFubmVsMi5wb3J0MS5vbm1lc3NhZ2UgPSBm
dW5jdGlvbihldmVudCkgeworICAgICAgIGV2ZW50Lm1lc3NhZ2VQb3J0Lm9ubWVzc2FnZSA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PSAibXNnMSIpIHsK
KyAgICAgICAgICAgICAgICBsb2coIlBBU1M6IFJlY2VpdmVkIG1lc3NhZ2UgdG8gY2xvbmVkIHBv
cnQuIik7CisgICAgICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSgibXNnMiIpOworICAgICAg
ICAgICAgICAgIGdjKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0gIm1z
ZzIiKSB7CisgICAgICAgICAgICAgICAgbG9nKCJQQVNTOiBSZWNlaXZlZCBtZXNzYWdlIGZyb20g
Y2xvbmVkIHBvcnQuIik7CisgICAgICAgICAgICAgICAgZ2MoKTsKKyAgICAgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGxvZygiRkFJTDogUmVjZWl2ZWQgdW5rbm93biBtZXNzYWdlOiAiICsgZXZl
bnQuZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIGV2ZW50Lm1lc3NhZ2VQb3J0ID0gMDsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjaGFubmVsID0gMDsKKyAgICBjaGFubmVsMiA9IDA7Cisg
ICAgZ2MoKTsKK30KKwordGVzdDEoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+CmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDViZGE5MGUuLmYw
ZmRiNjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0yLDYgKzIsMzggQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KIAorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
NDQ4PgorICAgICAgICAKKyAgICAgICAgQWRkZWQgb3B0aW1pemVkIEdDIGZvciBNZXNzYWdlUG9y
dHMgd2hlbiB0aGUgZW50YW5nbGVkIHBvcnQgaXMgcnVuIGJ5IHRoZSBzYW1lIHRocmVhZC4KKyAg
ICAgICAgRml4ZWQgYnVnIGluIGlzUHJveHlGb3IoKSB0aGF0IHdhcyBub3QgcHJvcGVybHkgdGhy
b3dpbmcgYW4gZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGNsb25lIHRoZSBlbnRhbmdsZWQgcG9y
dC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjptYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQpOgorICAgICAgICBOb3cgbWFya3Mg
cmVtb3RlbHkgZW50YW5nbGVkIHBvcnRzIGFzIGluLXVzZSwgaW4gYWRkaXRpb24gdG8gdGhvc2Ug
d2l0aCBwZW5kaW5nIGFjdGl2aXR5LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBv
cnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6bWFyayk6Cisg
ICAgICAgIE5vdyBjaGVja3MgaWYgdGhlIGVudGFuZ2xlZCBwb3J0IGlzIGxvY2FsIChydW4gYnkg
c2FtZSB0aHJlYWQpIGFuZCBpZiBzbyBtYXJrKClzIGl0LgorICAgICAgICAqIGRvbS9NZXNzYWdl
UG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6cG9zdE1lc3NhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmRpc2VudGFuZ2xlKToKKyAgICAgICAgUmVt
b3ZlcyBjbG9uZWQgcG9ydHMgZnJvbSB0aGUgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCAtIHRoaXMg
YWxsb3dzIGNsb25lZCBwb3J0cyB0byBiZSBHQydkIGFzIG90aGVyd2lzZSB0aGV5IGxvb2sgbGlr
ZSByZW1vdGVseSBlbnRhbmdsZWQgcG9ydHMuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9y
dDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmxvY2FsbHlFbnRhbmds
ZWRQb3J0KToKKyAgICAgICAgQWRkZWQgQVBJIGZvciBmZXRjaGluZyB0aGUgZW50YW5nbGVkIHBv
cnQgaWYgaXQgaXMgcnVuIGJ5IHRoZSBzYW1lIHRocmVhZAorICAgICAgICAqIGRvbS9NZXNzYWdl
UG9ydC5oOgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydFByb3h5V3JhcHBlci5oOgorICAgICAg
ICAqIGRvbS9kZWZhdWx0L01lc3NhZ2VQb3J0UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVzc2FnZVBvcnRQcm94eVdyYXBwZXI6OmxvY2FsbHlFbnRhbmdsZWRQb3J0KToKKyAgICAgICAg
QWRkZWQgQVBJIGZvciBmZXRjaGluZyB0aGUgZW50YW5nbGVkIHBvcnQgaWYgaXQgaXMgcnVuIGJ5
IHRoZSBzYW1lIHRocmVhZCAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFBy
b3h5OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICBDaGFuZ2VkIGRlZmluaXRpb24gb2Yg
aGFzUGVuZGluZ0FjdGl2aXR5KCkgdG8gYmUgc3RyaWN0ZXIgLSBvbmx5IHJldHVybnMgdHJ1ZSBp
ZiB0aGVyZSBhcmUgcGVuZGluZyBtZXNzYWdlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQ
b3J0UHJveHk6OmxvY2FsbHlFbnRhbmdsZWRQb3J0KToKKyAgICAgICAgKiBkb20vZGVmYXVsdC9N
ZXNzYWdlUG9ydFByb3h5Lmg6CisKKzIwMDktMDYtMTYgIERyZXcgV2lsc29uICA8YXR3aWxzb25A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAg
ICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MDQzPgogICAg
ICAgICBSZW1vdmVkIG9ic29sZXRlIE1lc3NhZ2VQb3J0LnN0YXJ0Q29udmVyc2F0aW9uKCksIGFj
dGl2ZSBhbmQgb25jbG9zZSBBUElzLgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
aW5kZXggNGY1ODc5Ny4uN2M3ZjcwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cApAQCAtMzI1LDEwICszMjUsMTAgQEAgdm9pZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTY3JpcHRFeGVjdXRpb25Db250ZXgKICAgICBjb25z
dCBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj4mIG1lc3NhZ2VQb3J0cyA9IHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPm1lc3NhZ2VQb3J0cygpOwogICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQqPjo6Y29uc3Rf
aXRlcmF0b3IgcG9ydHNFbmQgPSBtZXNzYWdlUG9ydHMuZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0
PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtZXNzYWdlUG9ydHMuYmVnaW4o
KTsgaXRlciAhPSBwb3J0c0VuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlmICgoKml0ZXIpLT5oYXNQ
ZW5kaW5nQWN0aXZpdHkoKSkgeworICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBwb3J0IGlzIHJl
bW90ZWx5IGVudGFuZ2xlZCwgdGhlbiBhbHdheXMgbWFyayBpdCBhcyBpbi11c2UgYmVjYXVzZSB3
ZSBjYW4ndCBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5IGFjcm9zcyB0aHJlYWRzLgorICAgICAgICBp
ZiAoISgqaXRlciktPmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkgfHwgKCppdGVyKS0+aGFzUGVuZGlu
Z0FjdGl2aXR5KCkpIHsKICAgICAgICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hl
ZERPTU9iamVjdFdyYXBwZXIoZ2xvYmFsRGF0YSwgKml0ZXIpOwotICAgICAgICAgICAgLy8gQSBw
b3J0IHdpdGggcGVuZGluZyBhY3Rpdml0eSBtdXN0IGhhdmUgYSB3cmFwcGVyIHRvIG1hcmsgaXRz
IGxpc3RlbmVycywgc28gbm8gbnVsbCBjaGVjay4KLSAgICAgICAgICAgIGlmICghd3JhcHBlci0+
bWFya2VkKCkpCisgICAgICAgICAgICBpZiAod3JhcHBlciAmJiAhd3JhcHBlci0+bWFya2VkKCkp
CiAgICAgICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOwogICAgICAgICB9CiAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAKaW5kZXggZTNhY2JlYy4u
YmZhYzM3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3Bw
CkBAIC00NCw2ICs0NCwxMyBAQCB2b2lkIEpTTWVzc2FnZVBvcnQ6Om1hcmsoKQogCiAgICAgbWFy
a0lmTm90TnVsbChtX2ltcGwtPm9ubWVzc2FnZSgpKTsKIAorICAgIC8vIElmIHdlIGhhdmUgYSBs
b2NhbGx5IGVudGFuZ2xlZCBwb3J0LCB3ZSBjYW4gZGlyZWN0bHkgbWFyayBpdCBhcyByZWFjaGFi
bGUuIFBvcnRzIHRoYXQgYXJlIHJlbW90ZWx5IGVudGFuZ2xlZCBhcmUgbWFya2VkIGluLXVzZSBi
eSBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKS4KKyAgICBpZiAoTWVzc2FnZVBvcnQqIGVu
dGFuZ2xlZFBvcnQgPSBtX2ltcGwtPmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkpIHsKKyAgICAgICAg
RE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqSGVhcDo6aGVh
cCh0aGlzKS0+Z2xvYmFsRGF0YSgpLCBlbnRhbmdsZWRQb3J0KTsKKyAgICAgICAgaWYgKHdyYXBw
ZXIgJiYgIXdyYXBwZXItPm1hcmtlZCgpKQorICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOwor
ICAgIH0KKwogICAgIHR5cGVkZWYgTWVzc2FnZVBvcnQ6OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50
TGlzdGVuZXJzTWFwOwogICAgIHR5cGVkZWYgTWVzc2FnZVBvcnQ6Okxpc3RlbmVyVmVjdG9yIExp
c3RlbmVyVmVjdG9yOwogICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVycyA9IG1f
aW1wbC0+ZXZlbnRMaXN0ZW5lcnMoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQ
b3J0LmNwcCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAppbmRleCBkZTdiOTQ4Li4zZDYx
YjY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vTWVzc2FnZVBvcnQuY3BwCkBAIC02Miw5ICs2Miw5IEBAIHZvaWQgTWVzc2FnZVBvcnQ6
OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAK
IHZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVz
c2FnZVBvcnQqIGRhdGFQb3J0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBBU1NFUlQobV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICBpZiAoIW1fZW50YW5nbGVkQ2hhbm5lbCkKICAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogCiAg
ICAgT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gY2hhbm5lbDsKICAgICBpZiAoZGF0YVBvcnQp
IHsKQEAgLTgzLDggKzgzLDE0IEBAIFBhc3NPd25QdHI8TWVzc2FnZVBvcnRDaGFubmVsPiBNZXNz
YWdlUG9ydDo6ZGlzZW50YW5nbGUoRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX2Vu
dGFuZ2xlZENoYW5uZWwpCiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgZWxz
ZQorICAgIGVsc2UgewogICAgICAgICBtX2VudGFuZ2xlZENoYW5uZWwtPmRpc2VudGFuZ2xlKCk7
CisKKyAgICAgICAgLy8gV2UgY2FuJ3QgcmVjZWl2ZSBhbnkgbWVzc2FnZXMgb3IgZ2VuZXJhdGUg
YW55IGV2ZW50cywgc28gcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBsaXN0IG9mIGFjdGl2ZSBw
b3J0cy4KKyAgICAgICAgQVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAg
IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+ZGVzdHJveWVkTWVzc2FnZVBvcnQodGhpcyk7Cisg
ICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7CisgICAgfQogICAgIHJldHVybiBt
X2VudGFuZ2xlZENoYW5uZWwucmVsZWFzZSgpOwogfQogCkBAIC05OCw2ICsxMDQsMTAgQEAgdm9p
ZCBNZXNzYWdlUG9ydDo6bWVzc2FnZUF2YWlsYWJsZSgpCiAKIHZvaWQgTWVzc2FnZVBvcnQ6OnN0
YXJ0KCkKIHsKKyAgICAvLyBEbyBub3RoaW5nIGlmIHdlJ3ZlIGJlZW4gY2xvbmVkCisgICAgaWYg
KCFtX2VudGFuZ2xlZENoYW5uZWwpCisgICAgICAgIHJldHVybjsKKwogICAgIEFTU0VSVChtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGlmIChtX3N0YXJ0ZWQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTIzMCw0ICsyNDAsOSBAQCBib29sIE1lc3NhZ2VQb3J0OjpoYXNQZW5kaW5nQWN0aXZp
dHkoKQogICAgIHJldHVybiBtX3N0YXJ0ZWQgJiYgbV9lbnRhbmdsZWRDaGFubmVsICYmIG1fZW50
YW5nbGVkQ2hhbm5lbC0+aGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9CiAKK01lc3NhZ2VQb3J0KiBN
ZXNzYWdlUG9ydDo6bG9jYWxseUVudGFuZ2xlZFBvcnQoKQoreworICAgIHJldHVybiBtX2VudGFu
Z2xlZENoYW5uZWwgPyBtX2VudGFuZ2xlZENoYW5uZWwtPmxvY2FsbHlFbnRhbmdsZWRQb3J0KCpt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpIDogMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaCBiL1dlYkNvcmUvZG9tL01l
c3NhZ2VQb3J0LmgKaW5kZXggN2NkMWVhNi4uNmQ4MWRkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9k
b20vTWVzc2FnZVBvcnQuaAorKysgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCkBAIC04Nyw2
ICs4NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0T25tZXNzYWdl
KFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1l
c3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CiAKKyAg
ICAgICAgLy8gUmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIGVudGFuZ2xlZCBwb3J0LCBvciBp
ZiB0aGUgcG9ydCBpcyBlbnRhbmdsZWQgcmVtb3RlbHkuCisgICAgICAgIE1lc3NhZ2VQb3J0KiBs
b2NhbGx5RW50YW5nbGVkUG9ydCgpOworICAgICAgICBib29sIGlzRW50YW5nbGVkKCkgeyByZXR1
cm4gbV9lbnRhbmdsZWRDaGFubmVsOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBNZXNzYWdl
UG9ydChTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9t
L01lc3NhZ2VQb3J0Q2hhbm5lbC5oIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmgK
aW5kZXggYWIwYmZkNy4uMmQzNjllNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnRDaGFubmVsLmgKKysrIGIvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmgKQEAgLTQz
LDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgTWVzc2FnZVBvcnQ7
CiAgICAgY2xhc3MgUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw7CisgICAgY2xhc3MgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBTdHJpbmc7CiAKICAgICAvLyBNZXNzYWdlUG9y
dENoYW5uZWwgaXMgYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBpbnRlcmZhY2UgdG8gdGhlIHJlbW90
ZSBzaWRlIG9mIGEgbWVzc2FnZSBjaGFubmVsLgpAQCAtNjUsNyArNjYsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIC8vIFVzZWQgYnkgTWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoKSB0
byBwcmV2ZW50IGNhbGxlcnMgZnJvbSBwYXNzaW5nIGEgcG9ydCdzIG93biBlbnRhbmdsZWQgcG9y
dC4KICAgICAgICAgYm9vbCBpc0Nvbm5lY3RlZFRvKE1lc3NhZ2VQb3J0Kik7CiAKLSAgICAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBjaGFubmVsIGN1cnJlbnRseSBjb250YWlucyBtZXNzYWdl
cyBmb3IgdGhpcyBwb3J0LCBvciBtYXkgcmVjZWl2ZSBtZXNzYWdlcyBpbiB0aGUgZnV0dXJlIChp
cyBvcGVuKS4KKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwcm94eSBjdXJyZW50bHkg
Y29udGFpbnMgbWVzc2FnZXMgZm9yIHRoaXMgcG9ydC4KICAgICAgICAgYm9vbCBoYXNQZW5kaW5n
QWN0aXZpdHkoKTsKIAogICAgICAgICBjbGFzcyBFdmVudERhdGEgewpAQCAtODcsNiArODgsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBFeHRyYWN0cyBhIG1lc3NhZ2UgZnJv
bSB0aGUgbWVzc2FnZSBxdWV1ZSBmb3IgdGhpcyBwb3J0LgogICAgICAgICBib29sIHRyeUdldE1l
c3NhZ2VGcm9tUmVtb3RlKE93blB0cjxFdmVudERhdGE+Jik7CiAKKyAgICAgICAgLy8gUmV0dXJu
cyBhIHJlZmVyZW5jZSB0byB0aGUgZW50YW5nbGVkIHBvcnQsIGlmIGl0IGlzIHJ1biBieSB0aGUg
c2FtZSB0aHJlYWQuCisgICAgICAgIC8vIFJldHVybnMgbnVsbCBpZiByZW1vdGVseSBlbnRhbmds
ZWQsIG9yIGlmIGRpc2VudGFuZ2xlZCBkdWUgdG8gdGhlIHJlbW90ZSBwb3J0IGJlaW5nIGNsb25l
ZCBhbmQgaW4tdHJhbnNpdCB0byBhIG5ldyBvd25lci4KKyAgICAgICAgTWVzc2FnZVBvcnQqIGxv
Y2FsbHlFbnRhbmdsZWRQb3J0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKwogICAg
ICAgICB+TWVzc2FnZVBvcnRDaGFubmVsKCk7CiAKICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgYi9XZWJD
b3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsLmNwcAppbmRleCBmZTkx
ZjgyLi5jMTIyZDdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsLmNwcAorKysgYi9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsLmgiCiAKICNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC03MSw2ICs3MiwxMCBAQCBib29sIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6aGFzUGVuZGluZ0FjdGl2
aXR5KCkKICAgICByZXR1cm4gbV9jaGFubmVsLT5oYXNQZW5kaW5nQWN0aXZpdHkoKTsKIH0KIAor
TWVzc2FnZVBvcnQqIE1lc3NhZ2VQb3J0Q2hhbm5lbDo6bG9jYWxseUVudGFuZ2xlZFBvcnQoY29u
c3QgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gbV9jaGFu
bmVsLT5sb2NhbGx5RW50YW5nbGVkUG9ydChjb250ZXh0KTsKK30KIAogUGFzc1JlZlB0cjxQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbD4gUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmNyZWF0
ZShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0UXVldWU+IGluY29taW5nLCBQYXNzUmVmUHRyPE1lc3Nh
Z2VQb3J0UXVldWU+IG91dGdvaW5nKQogewpAQCAtMTk4LDcgKzIwMywxOSBAQCB2b2lkIFBsYXRm
b3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjbG9zZUludGVybmFsKCkKIGJvb2wgUGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWw6Omhhc1BlbmRpbmdBY3Rpdml0eSgpCiB7CiAgICAgTXV0ZXhMb2NrZXIg
bG9jayhtX211dGV4KTsKLSAgICByZXR1cm4gbV9lbnRhbmdsZWRDaGFubmVsIHx8ICFtX2luY29t
aW5nUXVldWUtPmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIW1faW5jb21pbmdRdWV1ZS0+aXNFbXB0
eSgpOworfQorCitNZXNzYWdlUG9ydCogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWw6OmxvY2Fs
bHlFbnRhbmdsZWRQb3J0KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCit7
CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICAvLyBTZWUgaWYgYm90aCBjb250
ZXh0cyBhcmUgcnVuIGJ5IHRoZSBzYW1lIHRocmVhZCAoYXJlIHRoZSBzYW1lIGNvbnRleHQsIG9y
IGFyZSBib3RoIGRvY3VtZW50cykuCisgICAgaWYgKG1fcmVtb3RlUG9ydCkgeworICAgICAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiByZW1vdGVDb250ZXh0ID0gbV9yZW1vdGVQb3J0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgICAgIGlmIChyZW1vdGVDb250ZXh0ID09ICZjb250
ZXh0IHx8IChyZW1vdGVDb250ZXh0ICYmIHJlbW90ZUNvbnRleHQtPmlzRG9jdW1lbnQoKSAmJiBj
b250ZXh0LmlzRG9jdW1lbnQoKSkpCisgICAgICAgICAgICByZXR1cm4gbV9yZW1vdGVQb3J0Owor
ICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGIv
V2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oCmluZGV4IGU0
ZGM3YTAuLjIzMWVkOTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1N
ZXNzYWdlUG9ydENoYW5uZWwuaAorKysgYi9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVz
c2FnZVBvcnRDaGFubmVsLmgKQEAgLTY4LDkgKzY4LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgLy8gVXNlZCBieSBNZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgpIHRvIHByZXZlbnQg
Y2FsbGVycyBmcm9tIHBhc3NpbmcgYSBwb3J0J3Mgb3duIGVudGFuZ2xlZCBwb3J0LgogICAgICAg
ICBib29sIGlzQ29ubmVjdGVkVG8oTWVzc2FnZVBvcnQqKTsKIAotICAgICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIGNoYW5uZWwgY3VycmVudGx5IGNvbnRhaW5zIG1lc3NhZ2VzIGZvciB0aGlz
IHBvcnQsIG9yIG1heSByZWNlaXZlIG1lc3NhZ2VzIGluIHRoZSBmdXR1cmUgKGlzIG9wZW4pLgor
ICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3h5IGN1cnJlbnRseSBjb250YWlucyBt
ZXNzYWdlcyBmb3IgdGhpcyBwb3J0LgogICAgICAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgp
OwogCisgICAgICAgIC8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGVudGFuZ2xlZCBwb3J0
LCBpZiBpdCBpcyBydW4gYnkgdGhlIHNhbWUgdGhyZWFkLgorICAgICAgICAvLyBSZXR1cm5zIG51
bGwgaWYgcmVtb3RlbHkgZW50YW5nbGVkLCBvciBpZiBkaXNlbnRhbmdsZWQgZHVlIHRvIHRoZSBy
ZW1vdGUgcG9ydCBiZWluZyBjbG9uZWQgYW5kIGluLXRyYW5zaXQgdG8gYSBuZXcgb3duZXIuCisg
ICAgICAgIC8vIFVzZWQgb25seSB0byBkbyBtb3JlIG9wdGltYWwgR0MsIHNvIHBsYXRmb3JtcyB3
aGVyZSB0aGlzIGlzIGRpZmZpY3VsdCB0byBkZXRlcm1pbmUgY2FuIGFsd2F5cyBqdXN0IHJldHVy
biBudWxsLgorICAgICAgICBNZXNzYWdlUG9ydCogbG9jYWxseUVudGFuZ2xlZFBvcnQoY29uc3Qg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworCiAgICAgICAgIC8vIFdyYXBwZXIgZm9yIE1lc3Nh
Z2VRdWV1ZSB0aGF0IGFsbG93cyB1cyB0byBkbyB0aHJlYWQgc2FmZSBzaGFyaW5nIGJ5IHR3byBw
cm94aWVzLgogICAgICAgICBjbGFzcyBNZXNzYWdlUG9ydFF1ZXVlIDogcHVibGljIFRocmVhZFNh
ZmVTaGFyZWQ8TWVzc2FnZVBvcnRRdWV1ZT4gewogICAgICAgICBwdWJsaWM6Cg==
</data>
<flag name="review"
          id="16149"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31521</attachid>
            <date>2009-06-18 17:27:11 -0700</date>
            <delta_ts>2009-06-18 17:38:08 -0700</delta_ts>
            <desc>Revised patch per review comments</desc>
            <filename>patch3.txt</filename>
            <type>text/plain</type>
            <size>15540</size>
            <attacher name="Andrew Wilson">atwilson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5MjFhOTM5Li4yNzJkM2Y5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDYgKzEsMTggQEAKIDIwMDktMDYt
MTcgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQ0OD4KKworICAgICAgICBOZXcgdGVzdHMgZm9yIE1l
c3NhZ2VQb3J0IEdDIGNhc2VzIHRoYXQgd2VyZW4ndCBwcmV2aW91c2x5IGNvdmVyZWQuCisKKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtNC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICBUZXN0IGZvciBjYXNlIHdoZXJlIGJvdGggTWVzc2FnZVBvcnRzIGFyZSBp
bi10cmFuc2l0IChjbG9uZWQpIHdoZW4gYSBHQyBvY2N1cnMuCisgICAgICAgICogZmFzdC9ldmVu
dHMvbWVzc2FnZS1jaGFubmVsLWdjLTQuaHRtbC1kaXNhYmxlZDogQWRkZWQuCisKKzIwMDktMDYt
MTYgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KIAogICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI1MDQzPgogICAgICAgICBVcGRhdGVkIE1lc3NhZ2VDaGFubmVsL01l
c3NhZ2VQb3J0cyB0ZXN0cyB0byByZWZsZWN0IGxhdGVzdCBzcGVjIChjbG9zZSBldmVudCBoYXMg
YmVlbiByZW1vdmVkKS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21lc3Nh
Z2UtY2hhbm5lbC1nYy00LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL21l
c3NhZ2UtY2hhbm5lbC1nYy00LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lNTQxOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvbWVzc2FnZS1jaGFubmVsLWdjLTQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNyBAQAor
VGVzdCB0aGF0IE1lc3NhZ2VQb3J0IG1lc3NhZ2VzIGFyZSBkZWxpdmVyZWQgZXZlbiBpZiBib3Ro
IHBvcnRzIGFyZSBpbiB0cmFuc2l0IChjbG9uZWQpLgorCitTaG91bGQgc2F5IFBBU1MgdHdpY2Uu
CisKK1BBU1M6IFJlY2VpdmVkIG1lc3NhZ2UgdG8gY2xvbmVkIHBvcnQuCitQQVNTOiBSZWNlaXZl
ZCBtZXNzYWdlIGZyb20gY2xvbmVkIHBvcnQuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL21lc3NhZ2UtY2hhbm5lbC1nYy00Lmh0bWwtZGlzYWJsZWQgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtNC5odG1sLWRpc2FibGVkCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZDVhZmMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9tZXNzYWdlLWNoYW5uZWwtZ2MtNC5odG1sLWRpc2FibGVk
CkBAIC0wLDAgKzEsNTggQEAKKzxib2R5PgorPHA+VGVzdCB0aGF0IE1lc3NhZ2VQb3J0IG1lc3Nh
Z2VzIGFyZSBkZWxpdmVyZWQgZXZlbiBpZiBib3RoIHBvcnRzIGFyZSBpbiB0cmFuc2l0IChjbG9u
ZWQpLjwvcD4KKzxwPlNob3VsZCBzYXkgUEFTUyB0d2ljZS48L3A+Cis8cHJlIGlkPWxvZz48L3By
ZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBnYygpCit7CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xs
ZXIpCisgICAgICAgIHJldHVybiBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7IC8vIGZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiAo
RkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlvbnMgYmVmb3JlIGEgY29sbGVjdCkKKyAgICAg
ICAgdmFyIHMgPSBuZXcgU3RyaW5nKCJhYmMiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGxvZyht
ZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lckhUTUwg
Kz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QxKCkKK3sK
KyAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbDsKKyAgICB2YXIgY2hhbm5lbDIg
PSBuZXcgTWVzc2FnZUNoYW5uZWw7CisgICAgY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSgibXNn
MSIpOworICAgIGNoYW5uZWwyLnBvcnQxLnBvc3RNZXNzYWdlKCIiLCBjaGFubmVsLnBvcnQxKTsK
KyAgICBjaGFubmVsMi5wb3J0Mi5wb3N0TWVzc2FnZSgiIiwgY2hhbm5lbC5wb3J0Mik7CisgICAg
Y2hhbm5lbDIucG9ydDIub25tZXNzYWdlID0gY2hhbm5lbDIucG9ydDEub25tZXNzYWdlID0gZnVu
Y3Rpb24oZXZ0KSB7CisgICAgICAgZXZ0Lm1lc3NhZ2VQb3J0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9u
KGV2ZW50KSB7CisgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PSAibXNnMSIpIHsKKyAgICAg
ICAgICAgICAgICBsb2coIlBBU1M6IFJlY2VpdmVkIG1lc3NhZ2UgdG8gY2xvbmVkIHBvcnQuIik7
CisgICAgICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSgibXNnMiIpOworICAgICAgICAgICAg
ICAgIGdjKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0gIm1zZzIiKSB7
CisgICAgICAgICAgICAgICAgbG9nKCJQQVNTOiBSZWNlaXZlZCBtZXNzYWdlIGZyb20gY2xvbmVk
IHBvcnQuIik7CisgICAgICAgICAgICAgICAgZ2MoKTsKKyAgICAgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGxvZygiRkFJTDogUmVjZWl2ZWQgdW5rbm93biBtZXNzYWdlOiAiICsgZXZlbnQuZGF0
YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZXZ0Lm1lc3NhZ2VQb3J0ID0g
MDsKKyAgICB9CisgICAgY2hhbm5lbCA9IDA7CisgICAgY2hhbm5lbDIgPSAwOworICAgIGdjKCk7
Cit9CisKK3Rlc3QxKCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1YmRhOTBlLi5mMGZkYjY4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
Miw2ICsyLDM4IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAg
ICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjQ0OD4KKyAg
ICAgICAgCisgICAgICAgIEFkZGVkIG9wdGltaXplZCBHQyBmb3IgTWVzc2FnZVBvcnRzIHdoZW4g
dGhlIGVudGFuZ2xlZCBwb3J0IGlzIHJ1biBieSB0aGUgc2FtZSB0aHJlYWQuCisgICAgICAgIEZp
eGVkIGJ1ZyBpbiBpc1Byb3h5Rm9yKCkgdGhhdCB3YXMgbm90IHByb3Blcmx5IHRocm93aW5nIGFu
IGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBjbG9uZSB0aGUgZW50YW5nbGVkIHBvcnQuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
bWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KToKKyAgICAgICAgTm93IG1hcmtzIHJlbW90ZWx5
IGVudGFuZ2xlZCBwb3J0cyBhcyBpbi11c2UsIGluIGFkZGl0aW9uIHRvIHRob3NlIHdpdGggcGVu
ZGluZyBhY3Rpdml0eS4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZVBvcnQ6Om1hcmspOgorICAgICAgICBO
b3cgY2hlY2tzIGlmIHRoZSBlbnRhbmdsZWQgcG9ydCBpcyBsb2NhbCAocnVuIGJ5IHNhbWUgdGhy
ZWFkKSBhbmQgaWYgc28gbWFyaygpcyBpdC4KKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpkaXNlbnRhbmdsZSk6CisgICAgICAgIFJlbW92ZXMgY2xv
bmVkIHBvcnRzIGZyb20gdGhlIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgLSB0aGlzIGFsbG93cyBj
bG9uZWQgcG9ydHMgdG8gYmUgR0MnZCBhcyBvdGhlcndpc2UgdGhleSBsb29rIGxpa2UgcmVtb3Rl
bHkgZW50YW5nbGVkIHBvcnRzLgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0Ojpsb2NhbGx5RW50YW5nbGVkUG9ydCk6
CisgICAgICAgIEFkZGVkIEFQSSBmb3IgZmV0Y2hpbmcgdGhlIGVudGFuZ2xlZCBwb3J0IGlmIGl0
IGlzIHJ1biBieSB0aGUgc2FtZSB0aHJlYWQKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQuaDoK
KyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnRQcm94eVdyYXBwZXIuaDoKKyAgICAgICAgKiBkb20v
ZGVmYXVsdC9NZXNzYWdlUG9ydFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQ
b3J0UHJveHlXcmFwcGVyOjpsb2NhbGx5RW50YW5nbGVkUG9ydCk6CisgICAgICAgIEFkZGVkIEFQ
SSBmb3IgZmV0Y2hpbmcgdGhlIGVudGFuZ2xlZCBwb3J0IGlmIGl0IGlzIHJ1biBieSB0aGUgc2Ft
ZSB0aHJlYWQgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnRQcm94eTo6aGFz
UGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgQ2hhbmdlZCBkZWZpbml0aW9uIG9mIGhhc1BlbmRp
bmdBY3Rpdml0eSgpIHRvIGJlIHN0cmljdGVyIC0gb25seSByZXR1cm5zIHRydWUgaWYgdGhlcmUg
YXJlIHBlbmRpbmcgbWVzc2FnZXMuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydFByb3h5
Ojpsb2NhbGx5RW50YW5nbGVkUG9ydCk6CisgICAgICAgICogZG9tL2RlZmF1bHQvTWVzc2FnZVBv
cnRQcm94eS5oOgorCisyMDA5LTA2LTE2ICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTA0Mz4KICAgICAgICAgUmVt
b3ZlZCBvYnNvbGV0ZSBNZXNzYWdlUG9ydC5zdGFydENvbnZlcnNhdGlvbigpLCBhY3RpdmUgYW5k
IG9uY2xvc2UgQVBJcy4KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCmluZGV4IDRm
NTg3OTcuLjdjN2Y3MGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5k
aW5nLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKQEAgLTMy
NSwxMCArMzI1LDEwIEBAIHZvaWQgbWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAgICAgY29uc3QgSGFzaFNl
dDxNZXNzYWdlUG9ydCo+JiBtZXNzYWdlUG9ydHMgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5t
ZXNzYWdlUG9ydHMoKTsKICAgICBIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9y
IHBvcnRzRW5kID0gbWVzc2FnZVBvcnRzLmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxNZXNzYWdl
UG9ydCo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbWVzc2FnZVBvcnRzLmJlZ2luKCk7IGl0ZXIg
IT0gcG9ydHNFbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+aGFzUGVuZGluZ0Fj
dGl2aXR5KCkpIHsKKyAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgcG9ydCBpcyByZW1vdGVseSBl
bnRhbmdsZWQsIHRoZW4gYWx3YXlzIG1hcmsgaXQgYXMgaW4tdXNlIGJlY2F1c2Ugd2UgY2FuJ3Qg
ZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eSBhY3Jvc3MgdGhyZWFkcy4KKyAgICAgICAgaWYgKCEoKml0
ZXIpLT5sb2NhbGx5RW50YW5nbGVkUG9ydCgpIHx8ICgqaXRlciktPmhhc1BlbmRpbmdBY3Rpdml0
eSgpKSB7CiAgICAgICAgICAgICBET01PYmplY3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmpl
Y3RXcmFwcGVyKGdsb2JhbERhdGEsICppdGVyKTsKLSAgICAgICAgICAgIC8vIEEgcG9ydCB3aXRo
IHBlbmRpbmcgYWN0aXZpdHkgbXVzdCBoYXZlIGEgd3JhcHBlciB0byBtYXJrIGl0cyBsaXN0ZW5l
cnMsIHNvIG5vIG51bGwgY2hlY2suCi0gICAgICAgICAgICBpZiAoIXdyYXBwZXItPm1hcmtlZCgp
KQorICAgICAgICAgICAgaWYgKHdyYXBwZXIgJiYgIXdyYXBwZXItPm1hcmtlZCgpKQogICAgICAg
ICAgICAgICAgIHdyYXBwZXItPm1hcmsoKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCmluZGV4IGUzYWNiZWMuLmJmYWMzNzUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcApAQCAtNDQs
NiArNDQsMTMgQEAgdm9pZCBKU01lc3NhZ2VQb3J0OjptYXJrKCkKIAogICAgIG1hcmtJZk5vdE51
bGwobV9pbXBsLT5vbm1lc3NhZ2UoKSk7CiAKKyAgICAvLyBJZiB3ZSBoYXZlIGEgbG9jYWxseSBl
bnRhbmdsZWQgcG9ydCwgd2UgY2FuIGRpcmVjdGx5IG1hcmsgaXQgYXMgcmVhY2hhYmxlLiBQb3J0
cyB0aGF0IGFyZSByZW1vdGVseSBlbnRhbmdsZWQgYXJlIG1hcmtlZCBpbi11c2UgYnkgbWFya0Fj
dGl2ZU9iamVjdHNGb3JDb250ZXh0KCkuCisgICAgaWYgKE1lc3NhZ2VQb3J0KiBlbnRhbmdsZWRQ
b3J0ID0gbV9pbXBsLT5sb2NhbGx5RW50YW5nbGVkUG9ydCgpKSB7CisgICAgICAgIERPTU9iamVj
dCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoKkhlYXA6OmhlYXAodGhpcykt
Pmdsb2JhbERhdGEoKSwgZW50YW5nbGVkUG9ydCk7CisgICAgICAgIGlmICh3cmFwcGVyICYmICF3
cmFwcGVyLT5tYXJrZWQoKSkKKyAgICAgICAgICAgIHdyYXBwZXItPm1hcmsoKTsKKyAgICB9CisK
ICAgICB0eXBlZGVmIE1lc3NhZ2VQb3J0OjpFdmVudExpc3RlbmVyc01hcCBFdmVudExpc3RlbmVy
c01hcDsKICAgICB0eXBlZGVmIE1lc3NhZ2VQb3J0OjpMaXN0ZW5lclZlY3RvciBMaXN0ZW5lclZl
Y3RvcjsKICAgICBFdmVudExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMgPSBtX2ltcGwtPmV2
ZW50TGlzdGVuZXJzKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAg
Yi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAKaW5kZXggZGU3Yjk0OC4uMmE1NzVlNiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuY3BwCisrKyBiL1dlYkNvcmUvZG9tL01l
c3NhZ2VQb3J0LmNwcApAQCAtNjIsOSArNjIsOSBAQCB2b2lkIE1lc3NhZ2VQb3J0Ojpwb3N0TWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIE1l
c3NhZ2VQb3J0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0
KiBkYXRhUG9ydCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk7CiAgICAgaWYgKCFtX2VudGFuZ2xlZENoYW5uZWwpCiAgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKIAogICAgIE93blB0
cjxNZXNzYWdlUG9ydENoYW5uZWw+IGNoYW5uZWw7CiAgICAgaWYgKGRhdGFQb3J0KSB7CkBAIC04
Myw4ICs4MywxNCBAQCBQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbD4gTWVzc2FnZVBvcnQ6
OmRpc2VudGFuZ2xlKEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9lbnRhbmdsZWRD
aGFubmVsKQogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwotICAgIGVsc2UKKyAgICBl
bHNlIHsKICAgICAgICAgbV9lbnRhbmdsZWRDaGFubmVsLT5kaXNlbnRhbmdsZSgpOworCisgICAg
ICAgIC8vIFdlIGNhbid0IHJlY2VpdmUgYW55IG1lc3NhZ2VzIG9yIGdlbmVyYXRlIGFueSBldmVu
dHMsIHNvIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgbGlzdCBvZiBhY3RpdmUgcG9ydHMuCisg
ICAgICAgIEFTU0VSVChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPmRlc3Ryb3llZE1lc3NhZ2VQb3J0KHRoaXMpOworICAgICAgICBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAwOworICAgIH0KICAgICByZXR1cm4gbV9lbnRhbmds
ZWRDaGFubmVsLnJlbGVhc2UoKTsKIH0KIApAQCAtOTgsNiArMTA0LDEwIEBAIHZvaWQgTWVzc2Fn
ZVBvcnQ6Om1lc3NhZ2VBdmFpbGFibGUoKQogCiB2b2lkIE1lc3NhZ2VQb3J0OjpzdGFydCgpCiB7
CisgICAgLy8gRG8gbm90aGluZyBpZiB3ZSd2ZSBiZWVuIGNsb25lZAorICAgIGlmICghbV9lbnRh
bmdsZWRDaGFubmVsKQorICAgICAgICByZXR1cm47CisKICAgICBBU1NFUlQobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0KTsKICAgICBpZiAobV9zdGFydGVkKQogICAgICAgICByZXR1cm47CkBAIC0y
MzAsNCArMjQwLDkgQEAgYm9vbCBNZXNzYWdlUG9ydDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkKICAg
ICByZXR1cm4gbV9zdGFydGVkICYmIG1fZW50YW5nbGVkQ2hhbm5lbCAmJiBtX2VudGFuZ2xlZENo
YW5uZWwtPmhhc1BlbmRpbmdBY3Rpdml0eSgpOwogfQogCitNZXNzYWdlUG9ydCogTWVzc2FnZVBv
cnQ6OmxvY2FsbHlFbnRhbmdsZWRQb3J0KCkKK3sKKyAgICByZXR1cm4gbV9lbnRhbmdsZWRDaGFu
bmVsID8gbV9lbnRhbmdsZWRDaGFubmVsLT5sb2NhbGx5RW50YW5nbGVkUG9ydChtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpIDogMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaCBiL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
LmgKaW5kZXggN2NkMWVhNi4uYmUwYjVmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnQuaAorKysgYi9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCkBAIC04Nyw2ICs4NywxMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NSZWZQ
dHI8RXZlbnRMaXN0ZW5lcj4pOwogICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1lc3NhZ2UoKSBj
b25zdCB7IHJldHVybiBtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CiAKKyAgICAgICAgLy8g
UmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIGVudGFuZ2xlZCBwb3J0LCBvciBpZiB0aGUgZW50
YW5nbGVkIHBvcnQgaXMgcnVuIGJ5IGEgZGlmZmVyZW50IHRocmVhZC4KKyAgICAgICAgLy8gUmV0
dXJucyBudWxsIG90aGVyd2lzZS4gCisgICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgdXNlZCBzb2xl
bHkgdG8gZW5hYmxlIGEgR0Mgb3B0aW1pemF0aW9uLiBTb21lIHBsYXRmb3JtcyBtYXkgbm90IGJl
IGFibGUgdG8gZGV0ZXJtaW5lIG93bmVyc2hpcCBvZiB0aGUgcmVtb3RlIHBvcnQgKHNpbmNlIGl0
IG1heSBsaXZlIGNyb3NzLXByb2Nlc3MpIC0gdGhvc2UgcGxhdGZvcm1zIG1heSBhbHdheXMgcmV0
dXJuIG51bGwuCisgICAgICAgIE1lc3NhZ2VQb3J0KiBsb2NhbGx5RW50YW5nbGVkUG9ydCgpOwor
ICAgICAgICBib29sIGlzRW50YW5nbGVkKCkgeyByZXR1cm4gbV9lbnRhbmdsZWRDaGFubmVsOyB9
CisKICAgICBwcml2YXRlOgogICAgICAgICBNZXNzYWdlUG9ydChTY3JpcHRFeGVjdXRpb25Db250
ZXh0Jik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0Q2hhbm5lbC5oIGIv
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmgKaW5kZXggYWIwYmZkNy4uMTViM2QxNiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmgKKysrIGIvV2ViQ29y
ZS9kb20vTWVzc2FnZVBvcnRDaGFubmVsLmgKQEAgLTQzLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgTWVzc2FnZVBvcnQ7CiAgICAgY2xhc3MgUGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWw7CisgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBj
bGFzcyBTdHJpbmc7CiAKICAgICAvLyBNZXNzYWdlUG9ydENoYW5uZWwgaXMgYSBwbGF0Zm9ybS1p
bmRlcGVuZGVudCBpbnRlcmZhY2UgdG8gdGhlIHJlbW90ZSBzaWRlIG9mIGEgbWVzc2FnZSBjaGFu
bmVsLgpAQCAtNjUsNyArNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIFVz
ZWQgYnkgTWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoKSB0byBwcmV2ZW50IGNhbGxlcnMgZnJvbSBw
YXNzaW5nIGEgcG9ydCdzIG93biBlbnRhbmdsZWQgcG9ydC4KICAgICAgICAgYm9vbCBpc0Nvbm5l
Y3RlZFRvKE1lc3NhZ2VQb3J0Kik7CiAKLSAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBj
aGFubmVsIGN1cnJlbnRseSBjb250YWlucyBtZXNzYWdlcyBmb3IgdGhpcyBwb3J0LCBvciBtYXkg
cmVjZWl2ZSBtZXNzYWdlcyBpbiB0aGUgZnV0dXJlIChpcyBvcGVuKS4KKyAgICAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBwcm94eSBjdXJyZW50bHkgY29udGFpbnMgbWVzc2FnZXMgZm9yIHRo
aXMgcG9ydC4KICAgICAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKTsKIAogICAgICAgICBj
bGFzcyBFdmVudERhdGEgewpAQCAtODcsNiArODgsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIEV4dHJhY3RzIGEgbWVzc2FnZSBmcm9tIHRoZSBtZXNzYWdlIHF1ZXVlIGZvciB0
aGlzIHBvcnQuCiAgICAgICAgIGJvb2wgdHJ5R2V0TWVzc2FnZUZyb21SZW1vdGUoT3duUHRyPEV2
ZW50RGF0YT4mKTsKIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBlbnRhbmdsZWQgcG9ydCBpZiBy
dW4gYnkgdGhlIHNhbWUgdGhyZWFkIChzZWUgTWVzc2FnZVBvcnQ6OmxvY2FsbHlFbnRhbmdsZWRQ
b3J0KCkgZm9yIG1vcmUgZGV0YWlscykuCisgICAgICAgIE1lc3NhZ2VQb3J0KiBsb2NhbGx5RW50
YW5nbGVkUG9ydChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CisKICAgICAgICAgfk1l
c3NhZ2VQb3J0Q2hhbm5lbCgpOwogCiAgICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuY3BwIGIvV2ViQ29yZS9kb20v
ZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAKaW5kZXggZmU5MWY4Mi4uODBh
YjdjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0
Q2hhbm5lbC5jcHAKKysrIGIvV2ViQ29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0
Q2hhbm5lbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybU1lc3NhZ2VQ
b3J0Q2hhbm5lbC5oIgogCiAjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzEsNiAr
NzIsMTAgQEAgYm9vbCBNZXNzYWdlUG9ydENoYW5uZWw6Omhhc1BlbmRpbmdBY3Rpdml0eSgpCiAg
ICAgcmV0dXJuIG1fY2hhbm5lbC0+aGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9CiAKK01lc3NhZ2VQ
b3J0KiBNZXNzYWdlUG9ydENoYW5uZWw6OmxvY2FsbHlFbnRhbmdsZWRQb3J0KGNvbnN0IFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIG1fY2hhbm5lbC0+bG9j
YWxseUVudGFuZ2xlZFBvcnQoY29udGV4dCk7Cit9CiAKIFBhc3NSZWZQdHI8UGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWw+IFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpjcmVhdGUoUGFzc1Jl
ZlB0cjxNZXNzYWdlUG9ydFF1ZXVlPiBpbmNvbWluZywgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydFF1
ZXVlPiBvdXRnb2luZykKIHsKQEAgLTE5OCw3ICsyMDMsMjAgQEAgdm9pZCBQbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbDo6Y2xvc2VJbnRlcm5hbCgpCiBib29sIFBsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsOjpoYXNQZW5kaW5nQWN0aXZpdHkoKQogewogICAgIE11dGV4TG9ja2VyIGxvY2sobV9t
dXRleCk7Ci0gICAgcmV0dXJuIG1fZW50YW5nbGVkQ2hhbm5lbCB8fCAhbV9pbmNvbWluZ1F1ZXVl
LT5pc0VtcHR5KCk7CisgICAgcmV0dXJuICFtX2luY29taW5nUXVldWUtPmlzRW1wdHkoKTsKK30K
KworTWVzc2FnZVBvcnQqIFBsYXRmb3JtTWVzc2FnZVBvcnRDaGFubmVsOjpsb2NhbGx5RW50YW5n
bGVkUG9ydChjb25zdCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQoreworICAgIE11
dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgLy8gU2VlIGlmIGJvdGggY29udGV4dHMgYXJl
IHJ1biBieSB0aGUgc2FtZSB0aHJlYWQgKGFyZSB0aGUgc2FtZSBjb250ZXh0LCBvciBhcmUgYm90
aCBkb2N1bWVudHMpLgorICAgIGlmIChtX3JlbW90ZVBvcnQpIHsKKyAgICAgICAgLy8gVGhlIHJl
bW90ZSBwb3J0J3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBpcyBndWFyYW50ZWVkIG5vdCB0byBj
aGFuZ2UgaGVyZSAtIE1lc3NhZ2VQb3J0Ojpjb250ZXh0RGVzdHJveWVkKCkgd2lsbCBjbG9zZSB0
aGUgcG9ydCBiZWZvcmUgdGhlIGNvbnRleHQgZ29lcyBhd2F5LCBhbmQgY2xvc2UoKSB3aWxsIGJs
b2NrIGJlY2F1c2Ugd2UgYXJlIGhvbGRpbmcgdGhlIG11dGV4LgorICAgICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiByZW1vdGVDb250ZXh0ID0gbV9yZW1vdGVQb3J0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgICAgIGlmIChyZW1vdGVDb250ZXh0ID09IGNvbnRleHQgfHwgKHJl
bW90ZUNvbnRleHQgJiYgcmVtb3RlQ29udGV4dC0+aXNEb2N1bWVudCgpICYmIGNvbnRleHQtPmlz
RG9jdW1lbnQoKSkpCisgICAgICAgICAgICByZXR1cm4gbV9yZW1vdGVQb3J0OworICAgIH0KKyAg
ICByZXR1cm4gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9kb20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oIGIvV2ViQ29yZS9k
b20vZGVmYXVsdC9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5oCmluZGV4IGU0ZGM3YTAuLjI1
NzcxYjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL2RlZmF1bHQvUGxhdGZvcm1NZXNzYWdlUG9y
dENoYW5uZWwuaAorKysgYi9XZWJDb3JlL2RvbS9kZWZhdWx0L1BsYXRmb3JtTWVzc2FnZVBvcnRD
aGFubmVsLmgKQEAgLTQ2LDMwICs0NiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8g
VGhlIGdvYWwgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0byBlbGltaW5hdGUgY29udGVudGlv
biBleGNlcHQgd2hlbiBjbG9uaW5nIG9yIGNsb3NpbmcgdGhlIHBvcnQsIHNvIGVhY2ggc2lkZSBv
ZiB0aGUgY2hhbm5lbCBoYXMgaXRzIG93biBzZXBhcmF0ZSBtdXRleC4KICAgICBjbGFzcyBQbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFBsYXRmb3Jt
TWVzc2FnZVBvcnRDaGFubmVsPiB7CiAgICAgcHVibGljOgotICAgICAgICAvLyBDcmVhdGVzIGEg
Y2hhbm5lbCBlbnRhbmdsaW5nIHR3byBwb3J0cy4KICAgICAgICAgc3RhdGljIHZvaWQgY3JlYXRl
Q2hhbm5lbChQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4p
OwogCi0gICAgICAgIC8vIEVudGFuZ2xlcyB0aGUgY2hhbm5lbCB3aXRoIGEgcG9ydCAoY2FsbGVk
IHdoZW4gYSBwb3J0IGhhcyBiZWVuIGNsb25lZCwgYWZ0ZXIgdGhlIGNsb25lIGhhcyBiZWVuIG1h
cnNoYWxsZWQgdG8gaXRzIG5ldyBvd25pbmcgdGhyZWFkIGFuZCBpcyByZWFkeSB0byByZWNlaXZl
IG1lc3NhZ2VzKS4KLSAgICAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUgZW50YW5nbGVtZW50
IGZhaWxlZCBiZWNhdXNlIHRoZSBwb3J0IHdhcyBjbG9zZWQuCisgICAgICAgIC8vIEFQSXMgZGVs
ZWdhdGVkIGZyb20gTWVzc2FnZVBvcnRDaGFubmVsLmgKICAgICAgICAgYm9vbCBlbnRhbmdsZUlm
T3BlbihNZXNzYWdlUG9ydCopOwotCi0gICAgICAgIC8vIERpc2VudGFuZ2xlcyB0aGUgY2hhbm5l
bCBmcm9tIGEgZ2l2ZW4gcG9ydCBzbyBpdCBubyBsb25nZXIgZm9yd2FyZHMgbWVzc2FnZXMgdG8g
dGhlIHBvcnQuIENhbGxlZCB3aGVuIHRoZSBwb3J0IGlzIGJlaW5nIGNsb25lZCBhbmQgbm8gbmV3
IG93bmluZyB0aHJlYWQgaGFzIHlldCBiZWVuIGVzdGFibGlzaGVkLgogICAgICAgICB2b2lkIGRp
c2VudGFuZ2xlKCk7Ci0KLSAgICAgICAgLy8gU2VuZHMgYSBtZXNzYWdlIGFuZCBvcHRpb25hbCBj
bG9uZWQgcG9ydCB0byB0aGUgcmVtb3RlIHBvcnQuCiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2VU
b1JlbW90ZShQYXNzT3duUHRyPE1lc3NhZ2VQb3J0Q2hhbm5lbDo6RXZlbnREYXRhPik7Ci0KLSAg
ICAgICAgLy8gRXh0cmFjdHMgYSBtZXNzYWdlIGZyb20gdGhlIG1lc3NhZ2UgcXVldWUgZm9yIHRo
aXMgcG9ydC4KICAgICAgICAgYm9vbCB0cnlHZXRNZXNzYWdlRnJvbVJlbW90ZShPd25QdHI8TWVz
c2FnZVBvcnRDaGFubmVsOjpFdmVudERhdGE+Jik7Ci0KLSAgICAgICAgLy8gQ2xvc2VzIHRoZSBw
b3J0IChlbnN1cmVzIHRoYXQgbm8gZnVydGhlciBtZXNzYWdlcyBjYW4gYmUgYWRkZWQgdG8gZWl0
aGVyIHF1ZXVlKS4KICAgICAgICAgdm9pZCBjbG9zZSgpOwotCi0gICAgICAgIC8vIFVzZWQgYnkg
TWVzc2FnZVBvcnQucG9zdE1lc3NhZ2UoKSB0byBwcmV2ZW50IGNhbGxlcnMgZnJvbSBwYXNzaW5n
IGEgcG9ydCdzIG93biBlbnRhbmdsZWQgcG9ydC4KICAgICAgICAgYm9vbCBpc0Nvbm5lY3RlZFRv
KE1lc3NhZ2VQb3J0Kik7Ci0KLSAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjaGFubmVs
IGN1cnJlbnRseSBjb250YWlucyBtZXNzYWdlcyBmb3IgdGhpcyBwb3J0LCBvciBtYXkgcmVjZWl2
ZSBtZXNzYWdlcyBpbiB0aGUgZnV0dXJlIChpcyBvcGVuKS4KICAgICAgICAgYm9vbCBoYXNQZW5k
aW5nQWN0aXZpdHkoKTsKKyAgICAgICAgTWVzc2FnZVBvcnQqIGxvY2FsbHlFbnRhbmdsZWRQb3J0
KGNvbnN0IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgICAgICAvLyBXcmFwcGVyIGZv
ciBNZXNzYWdlUXVldWUgdGhhdCBhbGxvd3MgdXMgdG8gZG8gdGhyZWFkIHNhZmUgc2hhcmluZyBi
eSB0d28gcHJveGllcy4KICAgICAgICAgY2xhc3MgTWVzc2FnZVBvcnRRdWV1ZSA6IHB1YmxpYyBU
aHJlYWRTYWZlU2hhcmVkPE1lc3NhZ2VQb3J0UXVldWU+IHsK
</data>
<flag name="review"
          id="16163"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>