<?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>13021</bug_id>
          
          <creation_ts>2007-03-09 00:53:08 -0800</creation_ts>
          <short_desc>XPath can be very slow</short_desc>
          <delta_ts>2007-03-30 13:50:07 -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>XML</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://ejohn.org/apps/classname/xpath.html?r0=1173429259</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Rowe (bdash)">mrowe</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>19790</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-03-09 00:53:08 -0800</bug_when>
    <thetext>After reading &lt;http://ejohn.org/blog/getelementsbyclassname-speed-comparison/&gt; I grabbed a copy of the test pages to see how we compared to Firefox.  Our results on the XPath test (at http://ejohn.org/apps/classname/xpath.html?r0=1173429259) are horrible.  We frequently take 20+ seconds, while Firefox comes in at around 5 seconds.

The document uses prototype.js&apos;s getElementsByClassName implementation, which will use XPath if available.  It constructs a path of the form &quot;.//*[contains(concat(&apos; &apos;, @class, &apos; &apos;), &apos; &quot; + className + &quot; &apos;)]&quot;, where className is the class being searched for.

A quick glance at the process with Shark suggests we&apos;re spending a lot of time dispatching DOM subtree modified events (XPathResult attaches a listener for these) from below Attribute::createAttrIfNeeded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19704</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-09 12:03:55 -0800</bug_when>
    <thetext>I believe the problem is that //* enumerates all element children multiple times, removing the duplicates later. I have noticed this by code inspection before, but didn&apos;t expect //* to be a common idiom.

I&apos;m going to try some possible optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19686</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-03-09 23:56:46 -0800</bug_when>
    <thetext>Alexey, I&apos;d encourage you to use Shark to see exactly where the time is being spent in this case.  As I mentioned I was seeing a large amount of time spent under Attribute::createAttrIfNeeded, specifically related to processing of DOM subtree modified events.  I&apos;m not even sure why enumerating elements would lead to DOM subtrees being modified...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19662</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-10 03:33:02 -0800</bug_when>
    <thetext>I cannot see how the time spent in Attribute::createAttrIfNeeded() is related to processing DOM events - but it&apos;s clearly another factor to the overall slowness, because it&apos;s needlessly called during XPath attribute node enumeration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19665</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-03-10 05:16:19 -0800</bug_when>
    <thetext>Attribute::createAttrIfNeeded creates a DOM text node for the attribute value.  When it adds itself to the Attribute via appendChild this results in a subtree modification event being dispatched.  It seems a bit bizarre that the event is dispatched in this case because it seems that the DOM is not being modified as such, rather it is being lazily created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19624</commentid>
    <comment_count>5</comment_count>
      <attachid>13578</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-10 13:04:32 -0800</bug_when>
    <thetext>Created attachment 13578
partial fix 1

I&apos;m still not sure what the main culprit is (the DOM modification events do not seem to be a huge contributor, according to Shark), but this patch improves the performance a bit. The results are very inconsistent, though - sometimes I measure a 10% improvement, other times, a slowdown :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19525</commentid>
    <comment_count>6</comment_count>
      <attachid>13578</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-10 20:18:22 -0800</bug_when>
    <thetext>Comment on attachment 13578
partial fix 1

r=me

One thing that&apos;s clearly a slow idiom is having functions with a return type that&apos;s a Vector. Vector is not good for these purposes because returning one involves allocating an entire new vector every time. It&apos;s better to pass a Vector by value. Or we can wrap the vector so it works better as a return value type. Or we can carefully code so we get the C++ return value optimization; but that might not help enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19534</commentid>
    <comment_count>7</comment_count>
      <attachid>13578</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-11 00:40:31 -0800</bug_when>
    <thetext>Comment on attachment 13578
partial fix 1

Committed revision 20102, clearing the review flag.

It&apos;s particularly inefficient that NodeVector is a vector of RefPtrs. It has to hold onto its nodes because Attr nodes usually don&apos;t have any other references. Of course, re-creating Attr nodes all the time doesn&apos;t help, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19535</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-11 03:14:51 -0700</bug_when>
    <thetext>See &lt;https://bugzilla.mozilla.org/show_bug.cgi?id=208172&gt; and &lt;http://www.fiveanddime.net/firefox-1.5-source/mozilla/extensions/transformiix/docs/optimized-xpath.html.html&gt; for ideas that were considered for Mozilla optimized XPath implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19498</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-11 13:30:46 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; It seems a bit bizarre that the event is dispatched in this case because 
&gt; it seems that the DOM is not being modified as such, rather it is being
&gt; lazily created.

AFAICT, these mutation events don&apos;t even go anywhere - they appear to be directly dispatched to the attribute&apos;s text node, which cannot have any listeners attached (because it has been just created). I&apos;m going to verify this theory, and possibly add an optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19061</commentid>
    <comment_count>10</comment_count>
      <attachid>13617</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-13 13:35:24 -0700</bug_when>
    <thetext>Created attachment 13617
partial fix 2

This brings us almost on par with Firefox (16ms vs. 17ms on my G4, down from 48ms). But it comes with a number of comments:

1) I do not like short-circuiting appendChild() like this, it would be much better to just make it fast. However, that&apos;s definitely not a stabilization period work (and even changes in Attr.cpp look questionable in this regard).

2) Merging nodesInAxis and nodeMatches saved 24ms, and short-circuiting appendChild saved another 7ms.

3) However, only making the second change (short-circuiting appendChild) actually made the performance worse (by 4ms)! I can only guess why that happened - and my guess is that XPath evaluation creates a lot of memory fragmentation, causing weird effects with fastMalloc.

4) Running the test for the second time gives a noticeably worse result (24ms). Again, I can only blame fastMalloc, but without much evidence.

5) There are still a lot of attack vectors for improving performance in this test. For example, I really want to make NodeVector a Vector&lt;Node*&gt; instead of Vector&lt;RefPtr&lt;Node&gt; &gt;. Also, &quot;@class&quot; really needs to use getAttributeNode() instead of enumerating (and instantiating in DOM) all attributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18910</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-14 13:13:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; This brings us almost on par with Firefox (16ms vs. 17ms on my G4, down from
&gt; 48ms).

Comparing to Firefox 3 beta makes things less rosy (10ms there).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18733</commentid>
    <comment_count>12</comment_count>
      <attachid>13642</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-14 23:37:17 -0700</bug_when>
    <thetext>Created attachment 13642
partial fix 2 v2

Backed out the changes to EvaluationContext - I forgot about custom namespace resolvers that can do anything when called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18060</commentid>
    <comment_count>13</comment_count>
      <attachid>13724</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-20 13:02:46 -0700</bug_when>
    <thetext>Created attachment 13724
partial fix 2 v3

Updated for current TOT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17440</commentid>
    <comment_count>14</comment_count>
      <attachid>13724</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-24 20:18:45 -0700</bug_when>
    <thetext>Comment on attachment 13724
partial fix 2 v3

+        // This does everything appendChild() would do in this situation, but much more efficiently.

Misleading comment because this does what appendChild would do *if* m_ignoreChildrenChanged was set.

+                RefPtr&lt;Node&gt; n = attrs-&gt;item(i);
+                if (nodeMatches(n.get()))
+                    nodes.append(n);

Would be more efficient to append n.release().

+            bool nodeMatches(Node* node) const;

Don&apos;t need the name &quot;node&quot; here.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17417</commentid>
    <comment_count>15</comment_count>
      <attachid>13724</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-25 01:57:00 -0700</bug_when>
    <thetext>Comment on attachment 13724
partial fix 2 v3

Committed revision 20487, clearing review flag from a landed patch.

(In reply to comment #14)

&gt; Misleading comment because this does what appendChild would do *if*
&gt; m_ignoreChildrenChanged was set.

  Updated the comment.

&gt; Would be more efficient to append n.release().

  Fixed.

&gt; Don&apos;t need the name &quot;node&quot; here.

  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17388</commentid>
    <comment_count>16</comment_count>
      <attachid>13814</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-25 08:41:49 -0700</bug_when>
    <thetext>Created attachment 13814
partial fix 3

This makes us faster than Firefox 2, but still slower than Firefox 3 beta (13.5 ms on my machine vs. 16 ms and 10 ms). Results on other benchmarks (such as &lt;http://www.andrewdupont.net/test/xpath/&gt;) are also decent now, though not always stellar.

I intend to close this bug after this lands, and to pause working on XPath optimization during the stabilization period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16870</commentid>
    <comment_count>17</comment_count>
      <attachid>13814</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-27 22:02:59 -0700</bug_when>
    <thetext>Comment on attachment 13814
partial fix 3

+    Vector&lt;UChar, 1024&gt; result;
+    [...]
+    return String(result.data(), result.size());

I think it might be a slightly better idiom here is to use a plain old Vector&lt;UChar&gt;, then use String::adopt for the return value. Not sure. There will be slightly more allocation while accumulating the vector, but saves one allocation at the resturn site.

-    return nodes;
+    return v;

I don&apos;t understand that change; can&apos;t we still return nodes?

+            // Steals nodes from value.
+            Value(NodeSet&amp; value) : m_type(NodeSetValue), m_data(new ValueData) { value.swap(m_data-&gt;m_nodeSet); }

I think maybe this is a little to dangerous to be a public constructor. Can you instead make it a private constructor and use a named construction function to expose this? Or maybe a clearer way would be to just construct an empty Value and then call a function named &quot;adopt&quot; that takes a NodeSet&amp;. At the very least, I think this should be labeled &quot;explicit&quot;.

Great changes, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16539</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-29 22:22:07 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I think it might be a slightly better idiom here is to use a plain old
&gt; Vector&lt;UChar&gt;, then use String::adopt for the return value. Not sure.

  I&apos;ve just tried using String::adopt, and got a huge drop in performance (~1ms).

&gt; I don&apos;t understand that change; can&apos;t we still return nodes?

  I made this change to save on constructing a new Value, given that we already have a Value containing the node-set to return.

  However, measuring the performance now, I&apos;m surprised to see that constructing a new Value seems to be slightly faster than copying - the function doesn&apos;t look like one where return value optimization could work in. Could be a random fluctuation, going to check the generated code.

&gt; I think maybe this is a little to dangerous to be a public constructor. Can you
&gt; instead make it a private constructor and use a named construction function to
&gt; expose this? Or maybe a clearer way would be to just construct an empty Value
&gt; and then call a function named &quot;adopt&quot; that takes a NodeSet&amp;. At the very
&gt; least, I think this should be labeled &quot;explicit&quot;.

  Yes, I also dislike how it works now. Going to try safer approaches.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16445</commentid>
    <comment_count>19</comment_count>
      <attachid>13890</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-30 12:56:39 -0700</bug_when>
    <thetext>Created attachment 13890
partial fix 3 v2

I have checked the generated code for &quot;return v&quot; vs. &quot;return nodes&quot;, and the former was definitely better (it enabled return value optimization). So, looks like my measurement just showed a random fluctuation, since this code is not particularly hot.

Changed Value to make it nicer and safer to use.

These changes didn&apos;t affect performance, so thanks to the improvements from bug 13190 it&apos;s just under 12 ms on my machine now (vs. 16 ms in Firefox 2 and 10 ms in Firefox 3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16438</commentid>
    <comment_count>20</comment_count>
      <attachid>13890</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-30 13:32:51 -0700</bug_when>
    <thetext>Comment on attachment 13890
partial fix 3 v2

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16440</commentid>
    <comment_count>21</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-03-30 13:50:07 -0700</bug_when>
    <thetext>Committed revision 20620, closing.

Opening a new bug to track optimized XPath implementation.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13578</attachid>
            <date>2007-03-10 13:04:32 -0800</date>
            <delta_ts>2007-03-11 00:40:31 -0800</delta_ts>
            <desc>partial fix 1</desc>
            <filename>13021_1.txt</filename>
            <type>text/plain</type>
            <size>34734</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIwMDk2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDctMDMtMTAgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDIx
CisgICAgICAgIFhQYXRoIGNhbiBiZSB2ZXJ5IHNsb3cKKworICAgICAgICAqIGZhc3QveHBhdGgv
NFhQYXRoL0NvcmUvdGVzdF9sb2NhdGlvbl9wYXRoLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L3hwYXRoLzRYUGF0aC9Db3JlL3Rlc3RfcGFyc2VyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
VGhlc2UgdGVzdHMgbm93IHBhc3MsIGFzICIvLyoiIG5vdyBoYXBwZW5zIHRvIHByb2R1Y2UgY29y
cmVjdCBub2RlIG9yZGVyLgorCiAyMDA3LTAzLTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKdXN0aW4uCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3hwYXRoLzRYUGF0aC9Db3JlL3Rlc3RfbG9jYXRpb25fcGF0aC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC94cGF0aC80WFBhdGgvQ29yZS90ZXN0X2xvY2F0
aW9uX3BhdGgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyMDA5MSkKKysrIExheW91dFRlc3RzL2Zh
c3QveHBhdGgvNFhQYXRoL0NvcmUvdGVzdF9sb2NhdGlvbl9wYXRoLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLUZBSUwgLy8qIGl0ZW0gMiBpbmNvcnJlY3QgKGV4
cGVjdGVkIEdDSElMRCwgYWN0dWFsIENISUxEMikKK1BBU1MgLy8qCiBQQVNTICovKgogUEFTUyAv
CiBQQVNTIC9jaGlsZDo6KgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC94cGF0aC80WFBhdGgvQ29y
ZS90ZXN0X3BhcnNlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC94cGF0aC80WFBhdGgvQ29yZS90ZXN0X3BhcnNlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDIw
MDkxKQorKysgTGF5b3V0VGVzdHMvZmFzdC94cGF0aC80WFBhdGgvQ29yZS90ZXN0X3BhcnNlci1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBAIFBBU1MgY2hpbGQ6OioK
IFBBU1MgL2NoaWxkOjoqCiBQQVNTIC8qLyoKIFBBU1MgL2NoaWxkOjoqLyovY2hpbGQ6OkdDSElM
RAotRkFJTCAvLyogaXRlbSAyIGluY29ycmVjdCAoZXhwZWN0ZWQgR0NISUxELCBhY3R1YWwgQ0hJ
TEQyKQorUEFTUyAvLyoKIFBBU1MgLy9HQ0hJTEQKIFBBU1MgLy9AYXR0cjEKIFBBU1MgeDpHQ0hJ
TEQKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMDA5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNzYgQEAKKzIwMDctMDMtMTAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDIxCisgICAgICAg
IFhQYXRoIGNhbiBiZSB2ZXJ5IHNsb3cKKworICAgICAgICAqIHhtbC9YUGF0aEV4cHJlc3Npb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uOjpldmFsdWF0ZSk6IENhY2hl
IGV2YWx1YXRpb25Db250ZXh0IGluIGEgbG9jYWwgdmFyaWFibGUuCisKKyAgICAgICAgKiB4bWwv
WFBhdGhFeHByZXNzaW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVz
c2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQpOgorICAgICAgICAqIHhtbC9YUGF0aEV4cHJlc3Npb25O
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6YWRkU3ViRXhwcmVz
c2lvbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RXhwcmVzc2lvbjo6c3ViRXhwckNvdW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpFeHByZXNzaW9uOjpzdWJFeHByKToKKyAgICAg
ICAgKiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9u
cy5oOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0aW9uOjpzZXROYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5jdGlvbjo6YXJnKToKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpGdW5jdGlvbjo6YXJnQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bmN0
aW9uOjpuYW1lKToKKyAgICAgICAgTWFkZSBvbmUtbGluZXJzIGNyaXRpY2FsIGZvciBwZXJmb3Jt
YW5jZSBpbmxpbmUuCisKKyAgICAgICAgKiB4bWwvWFBhdGhHcmFtbWFyLnk6IEZ1bGx5IHBhcnNl
IE5vZGVUZXN0cywgc28gdGhhdCBzdHJpbmdzIGFyZSBubyBsb25nZXIgcGFzc2VkIGZvciB3aGF0
IGlzCisgICAgICAgIGVzc2VudGlhbGx5IGFuIGVudW0uIFVzZSBMb2NhdGlvblBhdGggYWNjZXNz
b3JzIHRvIGFkZCBzdGVwcywgaW5zdGVhZCB0aGFuIGRpcmVjdGx5IG1hbmlwdWxhdGluZworICAg
ICAgICBpdHMgaW50ZXJuYWwgZGF0YSBtZW1iZXJzLgorCisgICAgICAgICogeG1sL1hQYXRoUGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OnBhcnNlU3RhdGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXJzZXI6OnJlZ2lzdGVyTm9kZVRlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlBhcnNlcjo6ZGVsZXRlTm9kZVRlc3QpOgorICAgICAg
ICAqIHhtbC9YUGF0aFBhcnNlci5oOgorICAgICAgICBBZGRlZCBzdXBwb3J0IG1ldGhvZHMgZm9y
IGNoYW5nZXMgaW4gWFBhdGhHcmFtbWFyLnkuCisKKyAgICAgICAgKiB4bWwvWFBhdGhQYXRoLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGaWx0ZXI6OmV2YWx1YXRlKTogQ2FjaGUgZXZh
bHVhdGlvbkNvbnRleHQgaW4gYSBsb2NhbCB2YXJpYWJsZS4gVXNlIHN3YXAoKSB0byBhdm9pZAor
ICAgICAgICBwZXJmb3JtaW5nIHZlY3RvciBhc3NpZ25tZW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpMb2NhdGlvblBhdGg6OmV2YWx1YXRlKTogVXNlIHN3YXAoKSB0byBhdm9pZCBwZXJm
b3JtaW5nIHZlY3RvciBhc3NpZ25tZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2Nh
dGlvblBhdGg6Om9wdGltaXplU3RlcFBhaXIpOiBUaGlzIG5ldyBtZXRob2QgaXMgY2FsbGVkIGR1
cmluZyBMb2NhdGlvblBhdGggY29uc3RydWN0aW9uLCAKKyAgICAgICAgdG8gc2ltcGxpZnkgdGhl
IHBhdGggYXMgaXQncyBiZWluZyBidWlsdC4gQ3VycmVudGx5LCB0aGUgb25seSBvcHRpbWl6ZWQg
Y2FzZSBpcyAiLy8qIiAtIGl0IGlzIGEgYmFzaXMgZm9yCisgICAgICAgIGltcG9ydGFudCBvcGVy
YXRpb25zIHRoYXQgY2Fubm90IGJlIGVmZmljaWVudGx5IHdyaXR0ZW4gaW4gWFBhdGggMS4wLCBi
dXQgY2FuIGJlIG9wdGltaXplZCB3aXRoIGEgbGl0dGxlIGJpdAorICAgICAgICBvZiBYUGF0aCAy
LjAuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9jYXRpb25QYXRoOjphcHBlbmRTdGVwKTog
QSBuZXcgYWNjZXNzb3IgdGhhdCBtb2RpZmllcyBtX3N0ZXBzIGFuZCBjYWxscyBvcHRpbWl6ZVN0
ZXBQYWlyKCkuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9jYXRpb25QYXRoOjppbnNlcnRG
aXJzdFN0ZXApOiBEaXR0by4KKyAgICAgICAgKiB4bWwvWFBhdGhQYXRoLmg6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6TG9jYXRpb25QYXRoOjpzZXRBYnNvbHV0ZSk6IEEgbmV3IGFjY2Vzc29y
LgorCisgICAgICAgICogeG1sL1hQYXRoU3RlcC5oOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OlN0ZXA6Ok5vZGVUZXN0OjopOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Ok5vZGVU
ZXN0OjpOb2RlVGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6Tm9kZVRlc3Q6
OmtpbmQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Ok5vZGVUZXN0OjpkYXRhKToK
KyAgICAgICAgU3RlcDo6Tm9kZVRlc3QgaXMgYSBuZXcgc3ViLWNsYXNzIHRoYXQgcmVwcmVzZW50
cyBhIGZ1bGx5IHBhcnNlZCBOb2RlVGVzdC4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVw
OjpheGlzKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2RlVGVzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZVRlc3REYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlhQYXRoOjpTdGVwOjpuYW1lc3BhY2VVUkkpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OlN0ZXA6OnByZWRpY2F0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6OnNldEF4
aXMpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6OnNldE5vZGVUZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpzZXROb2RlVGVzdERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6OlN0ZXA6OnNldE5hbWVzcGFjZVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6U3RlcDo6c2V0UHJlZGljYXRlcyk6CisgICAgICAgIE5ldyBhY2Nlc3NvcnMgdGhhdCBs
ZXQgb3B0aW1pemVTdGVwUGFpcigpIG1hbmlwdWxhdGUgU3RlcCBkYXRhLgorCisgICAgICAgICog
eG1sL1hQYXRoU3RlcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6U3RlcCk6
IFVzZSB0aGUgbmV3IE5vZGVUZXN0IGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0
ZXA6OmV2YWx1YXRlKTogQ2FjaGUgZXZhbHVhdGlvbkNvbnRleHQgaW4gYSBsb2NhbCB2YXJpYWJs
ZS4gVXNlIHN3YXAoKSB0byBhdm9pZAorICAgICAgICBwZXJmb3JtaW5nIHZlY3RvciBhc3NpZ25t
ZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2Rlc0luQXhpcyk6IENvc21l
dGljIGNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZVRlc3RNYXRj
aGVzKTogVXNlIE5vZGVUZXN0IGluc3RlYWQgb2YgcGFyc2luZyB0aGUgdGVzdCBmcm9tIHN0cmlu
ZyBlYWNoIHRpbWUuCisKIDIwMDctMDMtMDkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEp1c3Rpbi4KSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRo
RXhwcmVzc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhFeHByZXNzaW9u
LmNwcAkocmV2aXNpb24gMjAwOTEpCisrKyBXZWJDb3JlL3htbC9YUGF0aEV4cHJlc3Npb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSwxMCBAQCBQYXNzUmVmUHRyPFhQYXRoUmVzdWx0
PiBYUGF0aEV4cHJlc3Npb246CiAgICAgICAgID8gY29udGV4dE5vZGUtPm93bmVyRG9jdW1lbnQo
KQogICAgICAgICA6IHN0YXRpY19jYXN0PEV2ZW50VGFyZ2V0Tm9kZSo+KGNvbnRleHROb2RlKTsK
IAotICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZSA9IGNvbnRleHROb2Rl
OwotICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkuc2l6ZSA9IDE7Ci0gICAgRXhw
cmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5wb3NpdGlvbiA9IDE7CisgICAgRXZhbHVhdGlv
bkNvbnRleHQmIGV2YWx1YXRpb25Db250ZXh0ID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRl
eHQoKTsKKyAgICBldmFsdWF0aW9uQ29udGV4dC5ub2RlID0gY29udGV4dE5vZGU7CisgICAgZXZh
bHVhdGlvbkNvbnRleHQuc2l6ZSA9IDE7CisgICAgZXZhbHVhdGlvbkNvbnRleHQucG9zaXRpb24g
PSAxOwogICAgIFJlZlB0cjxYUGF0aFJlc3VsdD4gcmVzdWx0ID0gbmV3IFhQYXRoUmVzdWx0KGV2
ZW50VGFyZ2V0LCBtX3RvcEV4cHJlc3Npb24tPmV2YWx1YXRlKCkpOwogCiAgICAgaWYgKHR5cGUg
IT0gWFBhdGhSZXN1bHQ6OkFOWV9UWVBFKSB7CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aEV4cHJl
c3Npb25Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aEV4cHJlc3Npb25O
b2RlLmNwcAkocmV2aXNpb24gMjAwOTEpCisrKyBXZWJDb3JlL3htbC9YUGF0aEV4cHJlc3Npb25O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIFhQYXRoIHsKICAgICAKLUV2YWx1YXRpb25Db250ZXh0ICZFeHByZXNz
aW9uOjpldmFsdWF0aW9uQ29udGV4dCgpCitFdmFsdWF0aW9uQ29udGV4dCYgRXhwcmVzc2lvbjo6
ZXZhbHVhdGlvbkNvbnRleHQoKQogewogICAgIHN0YXRpYyBFdmFsdWF0aW9uQ29udGV4dCBldmFs
dWF0aW9uQ29udGV4dDsKICAgICByZXR1cm4gZXZhbHVhdGlvbkNvbnRleHQ7CkBAIC01MCwyOCAr
NTAsNiBAQCBFeHByZXNzaW9uOjp+RXhwcmVzc2lvbigpCiAgICAgZGVsZXRlQWxsVmFsdWVzKG1f
c3ViRXhwcmVzc2lvbnMpOwogfQogCi12b2lkIEV4cHJlc3Npb246OmFkZFN1YkV4cHJlc3Npb24o
RXhwcmVzc2lvbiogZXhwcikKLXsKLSAgICBtX3N1YkV4cHJlc3Npb25zLmFwcGVuZChleHByKTsK
LX0KLQotdW5zaWduZWQgRXhwcmVzc2lvbjo6c3ViRXhwckNvdW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9zdWJFeHByZXNzaW9ucy5zaXplKCk7Ci19Ci0KLUV4cHJlc3Npb24qIEV4cHJlc3Np
b246OnN1YkV4cHIodW5zaWduZWQgaSkKLXsKLSAgICBBU1NFUlQoaSA8IHN1YkV4cHJDb3VudCgp
KTsKLSAgICByZXR1cm4gbV9zdWJFeHByZXNzaW9uc1tpXTsKLX0KLQotY29uc3QgRXhwcmVzc2lv
biogRXhwcmVzc2lvbjo6c3ViRXhwcih1bnNpZ25lZCBpKSBjb25zdAotewotICAgIEFTU0VSVChp
IDwgc3ViRXhwckNvdW50KCkpOwotICAgIHJldHVybiBtX3N1YkV4cHJlc3Npb25zW2ldOwotfQot
CiB9CiB9CiAKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoRXhwcmVzc2lvbk5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aEV4cHJlc3Npb25Ob2RlLmgJKHJldmlzaW9uIDIwMDkx
KQorKysgV2ViQ29yZS94bWwvWFBhdGhFeHByZXNzaW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NSwxMiArNjUsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgICAgICB2aXJ0
dWFsIFZhbHVlIGV2YWx1YXRlKCkgY29uc3QgPSAwOwogCi0gICAgICAgICAgICB2b2lkIGFkZFN1
YkV4cHJlc3Npb24oRXhwcmVzc2lvbiopOworICAgICAgICAgICAgdm9pZCBhZGRTdWJFeHByZXNz
aW9uKEV4cHJlc3Npb24qIGV4cHIpIHsgbV9zdWJFeHByZXNzaW9ucy5hcHBlbmQoZXhwcik7IH0K
IAogICAgICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdWJFeHByQ291bnQo
KSBjb25zdDsKLSAgICAgICAgICAgIEV4cHJlc3Npb24qIHN1YkV4cHIodW5zaWduZWQpOwotICAg
ICAgICAgICAgY29uc3QgRXhwcmVzc2lvbiogc3ViRXhwcih1bnNpZ25lZCkgY29uc3Q7CisgICAg
ICAgICAgICB1bnNpZ25lZCBzdWJFeHByQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3N1YkV4cHJl
c3Npb25zLnNpemUoKTsgfQorICAgICAgICAgICAgRXhwcmVzc2lvbiogc3ViRXhwcih1bnNpZ25l
ZCBpKSB7IHJldHVybiBtX3N1YkV4cHJlc3Npb25zW2ldOyB9CisgICAgICAgICAgICBjb25zdCBF
eHByZXNzaW9uKiBzdWJFeHByKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fc3ViRXhwcmVz
c2lvbnNbaV07IH0KIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgVmVjdG9yPEV4cHJl
c3Npb24qPiBtX3N1YkV4cHJlc3Npb25zOwpJbmRleDogV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkocmV2
aXNpb24gMjAwOTEpCisrKyBXZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1MCwzMSArMjUwLDYgQEAgdm9pZCBGdW5jdGlvbjo6c2V0QXJndW1lbnRzKGNv
bnN0IFZlY3RvcgogICAgICAgICBhZGRTdWJFeHByZXNzaW9uKCppdCk7CiB9CiAKLXZvaWQgRnVu
Y3Rpb246OnNldE5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIG1fbmFtZSA9IG5hbWU7
Ci19Ci0KLUV4cHJlc3Npb24qIEZ1bmN0aW9uOjphcmcoaW50IGkpCi17Ci0gICAgcmV0dXJuIHN1
YkV4cHIoaSk7Ci19Ci0KLWNvbnN0IEV4cHJlc3Npb24qIEZ1bmN0aW9uOjphcmcoaW50IGkpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHN1YkV4cHIoaSk7Ci19Ci0KLXVuc2lnbmVkIGludCBGdW5jdGlv
bjo6YXJnQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBzdWJFeHByQ291bnQoKTsKLX0KLQot
U3RyaW5nIEZ1bmN0aW9uOjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9uYW1lOwotfQot
CiBWYWx1ZSBGdW5MYXN0OjpldmFsdWF0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEV4cHJlc3Np
b246OmV2YWx1YXRpb25Db250ZXh0KCkuc2l6ZTsKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoRnVu
Y3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuaAkocmV2
aXNpb24gMjAwOTEpCisrKyBXZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwxMyArMzgsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBjbGFz
cyBGdW5jdGlvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKICAgICAgICAgcHVibGljOgogICAgICAg
ICAgICAgdm9pZCBzZXRBcmd1bWVudHMoY29uc3QgVmVjdG9yPEV4cHJlc3Npb24qPiYpOwotICAg
ICAgICAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOworICAgICAgICAgICAgdm9pZCBz
ZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX25hbWUgPSBuYW1lOyB9CiAKICAgICAgICAg
cHJvdGVjdGVkOgotICAgICAgICAgICAgRXhwcmVzc2lvbiogYXJnKGludCBwb3MpOwotICAgICAg
ICAgICAgY29uc3QgRXhwcmVzc2lvbiogYXJnKGludCBwb3MpIGNvbnN0OwotICAgICAgICAgICAg
dW5zaWduZWQgaW50IGFyZ0NvdW50KCkgY29uc3Q7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSgp
IGNvbnN0OworICAgICAgICAgICAgRXhwcmVzc2lvbiogYXJnKGludCBwb3MpIHsgcmV0dXJuIHN1
YkV4cHIocG9zKTsgfQorICAgICAgICAgICAgY29uc3QgRXhwcmVzc2lvbiogYXJnKGludCBwb3Mp
IGNvbnN0IHsgcmV0dXJuIHN1YkV4cHIocG9zKTsgfQorICAgICAgICAgICAgdW5zaWduZWQgaW50
IGFyZ0NvdW50KCkgY29uc3QgeyByZXR1cm4gc3ViRXhwckNvdW50KCk7IH0KKyAgICAgICAgICAg
IFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKICAgICAgICAgcHJpdmF0
ZToKICAgICAgICAgICAgIFN0cmluZyBtX25hbWU7CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aEdy
YW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQkocmV2aXNp
b24gMjAwOTEpCisrKyBXZWJDb3JlL3htbC9YUGF0aEdyYW1tYXIueQkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2UgWFBhdGg7CiAldW5pb24KIHsKICAgICBT
dGVwOjpBeGlzIGF4aXM7CisgICAgU3RlcDo6Tm9kZVRlc3QqIG5vZGVUZXN0OwogICAgIE51bWVy
aWNPcDo6T3Bjb2RlIG51bW9wOwogICAgIEVxVGVzdE9wOjpPcGNvZGUgZXFvcDsKICAgICBTdHJp
bmcqIHN0cjsKQEAgLTg5LDcgKzkwLDcgQEAgdm9pZCB4cGF0aHl5ZXJyb3IoY29uc3QgY2hhciAq
c3RyKSB7IH0KICV0eXBlIDxzdGVwPiBTdGVwCiAldHlwZSA8YXhpcz4gQXhpc1NwZWNpZmllcgog
JXR5cGUgPHN0ZXA+IERlc2NlbmRhbnRPclNlbGYKLSV0eXBlIDxzdHI+IE5vZGVUZXN0CisldHlw
ZSA8bm9kZVRlc3Q+IE5vZGVUZXN0CiAldHlwZSA8ZXhwcj4gUHJlZGljYXRlCiAldHlwZSA8cHJl
ZExpc3Q+IE9wdGlvbmFsUHJlZGljYXRlTGlzdAogJXR5cGUgPHByZWRMaXN0PiBQcmVkaWNhdGVM
aXN0CkBAIC0xMjIsMTIgKzEyMywxMiBAQCBFeHByOgogTG9jYXRpb25QYXRoOgogICAgIFJlbGF0
aXZlTG9jYXRpb25QYXRoCiAgICAgewotICAgICAgICAkJC0+bV9hYnNvbHV0ZSA9IGZhbHNlOwor
ICAgICAgICAkJC0+c2V0QWJzb2x1dGUoZmFsc2UpOwogICAgIH0KICAgICB8CiAgICAgQWJzb2x1
dGVMb2NhdGlvblBhdGgKICAgICB7Ci0gICAgICAgICQkLT5tX2Fic29sdXRlID0gdHJ1ZTsKKyAg
ICAgICAgJCQtPnNldEFic29sdXRlKHRydWUpOwogICAgIH0KICAgICA7CiAKQEAgLTE0Niw3ICsx
NDcsNyBAQCBBYnNvbHV0ZUxvY2F0aW9uUGF0aDoKICAgICBEZXNjZW5kYW50T3JTZWxmIFJlbGF0
aXZlTG9jYXRpb25QYXRoCiAgICAgewogICAgICAgICAkJCA9ICQyOwotICAgICAgICAkJC0+bV9z
dGVwcy5pbnNlcnQoMCwgJDEpOworICAgICAgICAkJC0+aW5zZXJ0Rmlyc3RTdGVwKCQxKTsKICAg
ICAgICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQxKTsKICAgICB9CiAgICAgOwpAQCAt
MTU1LDIxICsxNTYsMjEgQEAgUmVsYXRpdmVMb2NhdGlvblBhdGg6CiAgICAgU3RlcAogICAgIHsK
ICAgICAgICAgJCQgPSBuZXcgTG9jYXRpb25QYXRoOwotICAgICAgICAkJC0+bV9zdGVwcy5hcHBl
bmQoJDEpOworICAgICAgICAkJC0+YXBwZW5kU3RlcCgkMSk7CiAgICAgICAgIFBBUlNFUi0+dW5y
ZWdpc3RlclBhcnNlTm9kZSgkMSk7CiAgICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJQYXJzZU5vZGUo
JCQpOwogICAgIH0KICAgICB8CiAgICAgUmVsYXRpdmVMb2NhdGlvblBhdGggJy8nIFN0ZXAKICAg
ICB7Ci0gICAgICAgICQkLT5tX3N0ZXBzLmFwcGVuZCgkMyk7CisgICAgICAgICQkLT5hcHBlbmRT
dGVwKCQzKTsKICAgICAgICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQzKTsKICAgICB9
CiAgICAgfAogICAgIFJlbGF0aXZlTG9jYXRpb25QYXRoIERlc2NlbmRhbnRPclNlbGYgU3RlcAog
ICAgIHsKLSAgICAgICAgJCQtPm1fc3RlcHMuYXBwZW5kKCQyKTsKLSAgICAgICAgJCQtPm1fc3Rl
cHMuYXBwZW5kKCQzKTsKKyAgICAgICAgJCQtPmFwcGVuZFN0ZXAoJDIpOworICAgICAgICAkJC0+
YXBwZW5kU3RlcCgkMyk7CiAgICAgICAgIFBBUlNFUi0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMik7
CiAgICAgICAgIFBBUlNFUi0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMyk7CiAgICAgfQpAQCAtMTgz
LDcgKzE4NCw3IEBAIFN0ZXA6CiAgICAgICAgICAgICBQQVJTRVItPmRlbGV0ZVByZWRpY2F0ZVZl
Y3RvcigkMik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgJCQgPSBuZXcgU3RlcChTdGVw
OjpDaGlsZEF4aXMsICokMSk7Ci0gICAgICAgIFBBUlNFUi0+ZGVsZXRlU3RyaW5nKCQxKTsKKyAg
ICAgICAgUEFSU0VSLT5kZWxldGVOb2RlVGVzdCgkMSk7CiAgICAgICAgIFBBUlNFUi0+cmVnaXN0
ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAgICB8CkBAIC0xOTcsMTAgKzE5OCwxMCBAQCBTdGVw
OgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoJDIpIHsKLSAgICAgICAgICAgICQk
ID0gbmV3IFN0ZXAoU3RlcDo6Q2hpbGRBeGlzLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSwgKiQy
KTsKKyAgICAgICAgICAgICQkID0gbmV3IFN0ZXAoU3RlcDo6Q2hpbGRBeGlzLCBTdGVwOjpOb2Rl
VGVzdChTdGVwOjpOb2RlVGVzdDo6TmFtZVRlc3QsIGxvY2FsTmFtZSksIG5hbWVzcGFjZVVSSSwg
KiQyKTsKICAgICAgICAgICAgIFBBUlNFUi0+ZGVsZXRlUHJlZGljYXRlVmVjdG9yKCQyKTsKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAkJCA9IG5ldyBTdGVwKFN0ZXA6OkNoaWxkQXhpcywg
bG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpOworICAgICAgICAgICAgJCQgPSBuZXcgU3RlcChTdGVw
OjpDaGlsZEF4aXMsIFN0ZXA6Ok5vZGVUZXN0KFN0ZXA6Ok5vZGVUZXN0OjpOYW1lVGVzdCwgbG9j
YWxOYW1lKSwgbmFtZXNwYWNlVVJJKTsKICAgICAgICAgUEFSU0VSLT5kZWxldGVTdHJpbmcoJDEp
OwogICAgICAgICBQQVJTRVItPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKICAgICB9CkBAIC0yMTIs
NyArMjEzLDcgQEAgU3RlcDoKICAgICAgICAgICAgIFBBUlNFUi0+ZGVsZXRlUHJlZGljYXRlVmVj
dG9yKCQzKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAkJCA9IG5ldyBTdGVwKCQxLCAq
JDIpOwotICAgICAgICBQQVJTRVItPmRlbGV0ZVN0cmluZygkMik7CisgICAgICAgIFBBUlNFUi0+
ZGVsZXRlTm9kZVRlc3QoJDIpOwogICAgICAgICBQQVJTRVItPnJlZ2lzdGVyUGFyc2VOb2RlKCQk
KTsKICAgICB9CiAgICAgfApAQCAtMjI2LDEwICsyMjcsMTAgQEAgU3RlcDoKICAgICAgICAgfQog
CiAgICAgICAgIGlmICgkMykgewotICAgICAgICAgICAgJCQgPSBuZXcgU3RlcCgkMSwgbG9jYWxO
YW1lLCBuYW1lc3BhY2VVUkksICokMyk7CisgICAgICAgICAgICAkJCA9IG5ldyBTdGVwKCQxLCBT
dGVwOjpOb2RlVGVzdChTdGVwOjpOb2RlVGVzdDo6TmFtZVRlc3QsIGxvY2FsTmFtZSksIG5hbWVz
cGFjZVVSSSwgKiQzKTsKICAgICAgICAgICAgIFBBUlNFUi0+ZGVsZXRlUHJlZGljYXRlVmVjdG9y
KCQzKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAkJCA9IG5ldyBTdGVwKCQxLCBsb2Nh
bE5hbWUsIG5hbWVzcGFjZVVSSSk7CisgICAgICAgICAgICAkJCA9IG5ldyBTdGVwKCQxLCBTdGVw
OjpOb2RlVGVzdChTdGVwOjpOb2RlVGVzdDo6TmFtZVRlc3QsIGxvY2FsTmFtZSksIG5hbWVzcGFj
ZVVSSSk7CiAgICAgICAgIFBBUlNFUi0+ZGVsZXRlU3RyaW5nKCQyKTsKICAgICAgICAgUEFSU0VS
LT5yZWdpc3RlclBhcnNlTm9kZSgkJCk7CiAgICAgfQpAQCAtMjQ5LDIwICsyNTAsMzAgQEAgQXhp
c1NwZWNpZmllcjoKIE5vZGVUZXN0OgogICAgIE5PREVUWVBFICcoJyAnKScKICAgICB7Ci0gICAg
ICAgICQkID0gbmV3IFN0cmluZygqJDEgKyAiKCkiKTsKKyAgICAgICAgaWYgKCokMSA9PSAibm9k
ZSIpCisgICAgICAgICAgICAkJCA9IG5ldyBTdGVwOjpOb2RlVGVzdChTdGVwOjpOb2RlVGVzdDo6
QW55Tm9kZVRlc3QpOworICAgICAgICBlbHNlIGlmICgqJDEgPT0gInRleHQiKQorICAgICAgICAg
ICAgJCQgPSBuZXcgU3RlcDo6Tm9kZVRlc3QoU3RlcDo6Tm9kZVRlc3Q6OlRleHROb2RlVGVzdCk7
CisgICAgICAgIGVsc2UgaWYgKCokMSA9PSAiY29tbWVudCIpCisgICAgICAgICAgICAkJCA9IG5l
dyBTdGVwOjpOb2RlVGVzdChTdGVwOjpOb2RlVGVzdDo6Q29tbWVudE5vZGVUZXN0KTsKKwogICAg
ICAgICBQQVJTRVItPmRlbGV0ZVN0cmluZygkMSk7Ci0gICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJT
dHJpbmcoJCQpOworICAgICAgICBQQVJTRVItPnJlZ2lzdGVyTm9kZVRlc3QoJCQpOwogICAgIH0K
ICAgICB8CiAgICAgUEkgJygnICcpJworICAgIHsKKyAgICAgICAgJCQgPSBuZXcgU3RlcDo6Tm9k
ZVRlc3QoU3RlcDo6Tm9kZVRlc3Q6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbk5vZGVUZXN0KTsKKyAg
ICAgICAgUEFSU0VSLT5kZWxldGVTdHJpbmcoJDEpOyAgICAgICAgCisgICAgICAgIFBBUlNFUi0+
cmVnaXN0ZXJOb2RlVGVzdCgkJCk7CisgICAgfQogICAgIHwKICAgICBQSSAnKCcgTElURVJBTCAn
KScKICAgICB7Ci0gICAgICAgIFN0cmluZyBzID0gKiQxICsgIiAiICsgKiQzOwotICAgICAgICAk
JCA9IG5ldyBTdHJpbmcocy5zdHJpcFdoaXRlU3BhY2UoKSk7CisgICAgICAgICQkID0gbmV3IFN0
ZXA6Ok5vZGVUZXN0KFN0ZXA6Ok5vZGVUZXN0OjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Ob2RlVGVz
dCwgJDMtPnN0cmlwV2hpdGVTcGFjZSgpKTsKICAgICAgICAgUEFSU0VSLT5kZWxldGVTdHJpbmco
JDEpOyAgICAgICAgCiAgICAgICAgIFBBUlNFUi0+ZGVsZXRlU3RyaW5nKCQzKTsKLSAgICAgICAg
UEFSU0VSLT5yZWdpc3RlclN0cmluZygkJCk7CisgICAgICAgIFBBUlNFUi0+cmVnaXN0ZXJOb2Rl
VGVzdCgkJCk7CiAgICAgfQogICAgIDsKIApAQCAtMzAxLDcgKzMxMiw3IEBAIFByZWRpY2F0ZToK
IERlc2NlbmRhbnRPclNlbGY6CiAgICAgU0xBU0hTTEFTSAogICAgIHsKLSAgICAgICAgJCQgPSBu
ZXcgU3RlcChTdGVwOjpEZXNjZW5kYW50T3JTZWxmQXhpcywgIm5vZGUoKSIpOworICAgICAgICAk
JCA9IG5ldyBTdGVwKFN0ZXA6OkRlc2NlbmRhbnRPclNlbGZBeGlzLCBTdGVwOjpOb2RlVGVzdChT
dGVwOjpOb2RlVGVzdDo6QW55Tm9kZVRlc3QpKTsKICAgICAgICAgUEFSU0VSLT5yZWdpc3RlclBh
cnNlTm9kZSgkJCk7CiAgICAgfQogICAgIDsKQEAgLTMwOSwxMyArMzIwLDEzIEBAIERlc2NlbmRh
bnRPclNlbGY6CiBBYmJyZXZpYXRlZFN0ZXA6CiAgICAgJy4nCiAgICAgewotICAgICAgICAkJCA9
IG5ldyBTdGVwKFN0ZXA6OlNlbGZBeGlzLCAibm9kZSgpIik7CisgICAgICAgICQkID0gbmV3IFN0
ZXAoU3RlcDo6U2VsZkF4aXMsIFN0ZXA6Ok5vZGVUZXN0KFN0ZXA6Ok5vZGVUZXN0OjpBbnlOb2Rl
VGVzdCkpOwogICAgICAgICBQQVJTRVItPnJlZ2lzdGVyUGFyc2VOb2RlKCQkKTsKICAgICB9CiAg
ICAgfAogICAgIERPVERPVAogICAgIHsKLSAgICAgICAgJCQgPSBuZXcgU3RlcChTdGVwOjpQYXJl
bnRBeGlzLCAibm9kZSgpIik7CisgICAgICAgICQkID0gbmV3IFN0ZXAoU3RlcDo6UGFyZW50QXhp
cywgU3RlcDo6Tm9kZVRlc3QoU3RlcDo6Tm9kZVRlc3Q6OkFueU5vZGVUZXN0KSk7CiAgICAgICAg
IFBBUlNFUi0+cmVnaXN0ZXJQYXJzZU5vZGUoJCQpOwogICAgIH0KICAgICA7CkBAIC00MTEsNyAr
NDIyLDcgQEAgUGF0aEV4cHI6CiAgICAgfAogICAgIEZpbHRlckV4cHIgJy8nIFJlbGF0aXZlTG9j
YXRpb25QYXRoCiAgICAgewotICAgICAgICAkMy0+bV9hYnNvbHV0ZSA9IHRydWU7CisgICAgICAg
ICQzLT5zZXRBYnNvbHV0ZSh0cnVlKTsKICAgICAgICAgJCQgPSBuZXcgUGF0aChzdGF0aWNfY2Fz
dDxGaWx0ZXIqPigkMSksICQzKTsKICAgICAgICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2Rl
KCQxKTsKICAgICAgICAgUEFSU0VSLT51bnJlZ2lzdGVyUGFyc2VOb2RlKCQzKTsKQEAgLTQyMCw4
ICs0MzEsOCBAQCBQYXRoRXhwcjoKICAgICB8CiAgICAgRmlsdGVyRXhwciBEZXNjZW5kYW50T3JT
ZWxmIFJlbGF0aXZlTG9jYXRpb25QYXRoCiAgICAgewotICAgICAgICAkMy0+bV9zdGVwcy5pbnNl
cnQoMCwgJDIpOwotICAgICAgICAkMy0+bV9hYnNvbHV0ZSA9IHRydWU7CisgICAgICAgICQzLT5p
bnNlcnRGaXJzdFN0ZXAoJDIpOworICAgICAgICAkMy0+c2V0QWJzb2x1dGUodHJ1ZSk7CiAgICAg
ICAgICQkID0gbmV3IFBhdGgoc3RhdGljX2Nhc3Q8RmlsdGVyKj4oJDEpLCAkMyk7CiAgICAgICAg
IFBBUlNFUi0+dW5yZWdpc3RlclBhcnNlTm9kZSgkMSk7CiAgICAgICAgIFBBUlNFUi0+dW5yZWdp
c3RlclBhcnNlTm9kZSgkMik7CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDA5MSkK
KysrIFdlYkNvcmUveG1sL1hQYXRoUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDYg
KzQ5NCw5IEBAIEV4cHJlc3Npb24qIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoY29uc3QKICAgICAg
ICAgZGVsZXRlQWxsVmFsdWVzKG1fc3RyaW5ncyk7CiAgICAgICAgIG1fc3RyaW5ncy5jbGVhcigp
OwogCisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyhtX25vZGVUZXN0cyk7CisgICAgICAgIG1fbm9k
ZVRlc3RzLmNsZWFyKCk7CisKICAgICAgICAgbV90b3BFeHByID0gMDsKIAogICAgICAgICBpZiAo
bV9nb3ROYW1lc3BhY2VFcnJvcikKQEAgLTUwOCw2ICs1MTEsNyBAQCBFeHByZXNzaW9uKiBQYXJz
ZXI6OnBhcnNlU3RhdGVtZW50KGNvbnN0CiAgICAgQVNTRVJUKG1fZXhwcmVzc2lvblZlY3RvcnMu
c2l6ZSgpID09IDApOwogICAgIEFTU0VSVChtX3ByZWRpY2F0ZVZlY3RvcnMuc2l6ZSgpID09IDAp
OwogICAgIEFTU0VSVChtX3N0cmluZ3Muc2l6ZSgpID09IDApOworICAgIEFTU0VSVChtX25vZGVU
ZXN0cy5zaXplKCkgPT0gMCk7CiAKICAgICBtX3BhcnNlTm9kZXMuY2xlYXIoKTsKICAgICBFeHBy
ZXNzaW9uKiByZXN1bHQgPSBtX3RvcEV4cHI7CkBAIC02MDAsNiArNjA0LDI3IEBAIHZvaWQgUGFy
c2VyOjpkZWxldGVTdHJpbmcoU3RyaW5nKiBzKQogICAgIGRlbGV0ZSBzOwogfQogCit2b2lkIFBh
cnNlcjo6cmVnaXN0ZXJOb2RlVGVzdChTdGVwOjpOb2RlVGVzdCogdCkKK3sKKyAgICBpZiAodCA9
PSAwKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFtX25vZGVUZXN0cy5jb250
YWlucyh0KSk7CisgICAgCisgICAgbV9ub2RlVGVzdHMuYWRkKHQpOyAgICAgICAgCit9CisKK3Zv
aWQgUGFyc2VyOjpkZWxldGVOb2RlVGVzdChTdGVwOjpOb2RlVGVzdCogdCkKK3sKKyAgICBpZiAo
dCA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKG1fbm9kZVRlc3RzLmNv
bnRhaW5zKHQpKTsKKyAgICAKKyAgICBtX25vZGVUZXN0cy5yZW1vdmUodCk7CisgICAgZGVsZXRl
IHQ7Cit9CisKIH0KIH0KIApJbmRleDogV2ViQ29yZS94bWwvWFBhdGhQYXJzZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFBhcnNlci5oCShyZXZpc2lvbiAyMDA5MSkKKysrIFdl
YkNvcmUveG1sL1hQYXRoUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdm9pZCByZWdpc3RlclN0cmluZyhTdHJp
bmcqKTsKICAgICAgICAgICAgIHZvaWQgZGVsZXRlU3RyaW5nKFN0cmluZyopOwogCisgICAgICAg
ICAgICB2b2lkIHJlZ2lzdGVyTm9kZVRlc3QoU3RlcDo6Tm9kZVRlc3QqKTsKKyAgICAgICAgICAg
IHZvaWQgZGVsZXRlTm9kZVRlc3QoU3RlcDo6Tm9kZVRlc3QqKTsKKwogICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICAgYm9vbCBpc09wZXJhdG9yQ29udGV4dCgpIGNvbnN0OwogCkBAIC0xMTcs
NiArMTIwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgSGFzaFNldDxWZWN0
b3I8UHJlZGljYXRlKj4qPiBtX3ByZWRpY2F0ZVZlY3RvcnM7CiAgICAgICAgICAgICBIYXNoU2V0
PFZlY3RvcjxFeHByZXNzaW9uKj4qPiBtX2V4cHJlc3Npb25WZWN0b3JzOwogICAgICAgICAgICAg
SGFzaFNldDxTdHJpbmcqPiBtX3N0cmluZ3M7CisgICAgICAgICAgICBIYXNoU2V0PFN0ZXA6Ok5v
ZGVUZXN0Kj4gbV9ub2RlVGVzdHM7CiAgICAgICAgIH07CiAKICAgICB9CkluZGV4OiBXZWJDb3Jl
L3htbC9YUGF0aFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoUGF0aC5j
cHAJKHJldmlzaW9uIDIwMDkxKQorKysgV2ViQ29yZS94bWwvWFBhdGhQYXRoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsMjUgKzU1LDI3IEBAIFZhbHVlIEZpbHRlcjo6ZXZhbHVhdGUoKSBjb25z
dAogICAgIGlmICghdi5pc05vZGVWZWN0b3IoKSkgCiAgICAgICAgIHJldHVybiB2OwogCi0gICAg
Tm9kZVZlY3RvciBpbk5vZGVzID0gdi50b05vZGVWZWN0b3IoKSwgb3V0Tm9kZXM7CisgICAgTm9k
ZVZlY3RvciBub2RlcyA9IHYudG9Ob2RlVmVjdG9yKCk7CisKKyAgICBFdmFsdWF0aW9uQ29udGV4
dCYgZXZhbHVhdGlvbkNvbnRleHQgPSBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ByZWRpY2F0ZXMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgb3V0Tm9kZXMuY2xlYXIoKTsKLSAgICAgICAgRXhwcmVzc2lvbjo6ZXZhbHVhdGlv
bkNvbnRleHQoKS5zaXplID0gaW5Ob2Rlcy5zaXplKCk7Ci0gICAgICAgIEV4cHJlc3Npb246OmV2
YWx1YXRpb25Db250ZXh0KCkucG9zaXRpb24gPSAwOworICAgICAgICBOb2RlVmVjdG9yIG5ld05v
ZGVzOworICAgICAgICBldmFsdWF0aW9uQ29udGV4dC5zaXplID0gbm9kZXMuc2l6ZSgpOworICAg
ICAgICBldmFsdWF0aW9uQ29udGV4dC5wb3NpdGlvbiA9IDA7CiAgICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5Ob2Rlcy5zaXplKCk7IGorKykgewotICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGluTm9kZXNbal0uZ2V0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBub2Rlcy5zaXplKCk7IGorKykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG5vZGVzW2pdLmdldCgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBFeHByZXNzaW9uOjpl
dmFsdWF0aW9uQ29udGV4dCgpLm5vZGUgPSBub2RlOwotICAgICAgICAgICAgKytFeHByZXNzaW9u
OjpldmFsdWF0aW9uQ29udGV4dCgpLnBvc2l0aW9uOworICAgICAgICAgICAgZXZhbHVhdGlvbkNv
bnRleHQubm9kZSA9IG5vZGU7CisgICAgICAgICAgICArK2V2YWx1YXRpb25Db250ZXh0LnBvc2l0
aW9uOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobV9wcmVkaWNhdGVzW2ldLT5ldmFs
dWF0ZSgpKQotICAgICAgICAgICAgICAgIG91dE5vZGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAg
ICAgICAgICBuZXdOb2Rlcy5hcHBlbmQobm9kZSk7CiAgICAgICAgIH0KLSAgICAgICAgaW5Ob2Rl
cyA9IG91dE5vZGVzOworICAgICAgICBub2Rlcy5zd2FwKG5ld05vZGVzKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gb3V0Tm9kZXM7CisgICAgcmV0dXJuIG5vZGVzOwogfQogCiBMb2NhdGlvblBhdGg6
OkxvY2F0aW9uUGF0aCgpCkBAIC0xMjAsMTIgKzEyMiw1MiBAQCBWYWx1ZSBMb2NhdGlvblBhdGg6
OmV2YWx1YXRlKGNvbnN0IE5vZGVWCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGluRE9NTm9kZXMgPSBvdXRET01Ob2RlczsKKyAgICAgICAgaW5ET01Ob2Rlcy5z
d2FwKG91dERPTU5vZGVzKTsKICAgICB9CiAKICAgICByZXR1cm4gaW5ET01Ob2RlczsKIH0KIAor
dm9pZCBMb2NhdGlvblBhdGg6Om9wdGltaXplU3RlcFBhaXIodW5zaWduZWQgaW5kZXgpCit7Cisg
ICAgU3RlcCogZmlyc3QgPSBtX3N0ZXBzW2luZGV4XTsKKyAgICAKKyAgICBpZiAoZmlyc3QtPmF4
aXMoKSA9PSBTdGVwOjpEZXNjZW5kYW50T3JTZWxmQXhpcworICAgICAgICAmJiBmaXJzdC0+bm9k
ZVRlc3QoKS5raW5kKCkgPT0gU3RlcDo6Tm9kZVRlc3Q6OkFueU5vZGVUZXN0CisgICAgICAgICYm
IGZpcnN0LT5wcmVkaWNhdGVzKCkuc2l6ZSgpID09IDApIHsKKworICAgICAgICBTdGVwKiBzZWNv
bmQgPSBtX3N0ZXBzW2luZGV4ICsgMV07CisgICAgICAgIGlmIChzZWNvbmQtPmF4aXMoKSA9PSBT
dGVwOjpDaGlsZEF4aXMKKyAgICAgICAgICAgICYmIHNlY29uZC0+bmFtZXNwYWNlVVJJKCkuaXNF
bXB0eSgpCisgICAgICAgICAgICAmJiBzZWNvbmQtPm5vZGVUZXN0KCkua2luZCgpID09IFN0ZXA6
Ok5vZGVUZXN0OjpOYW1lVGVzdAorICAgICAgICAgICAgJiYgc2Vjb25kLT5ub2RlVGVzdCgpLmRh
dGEoKSA9PSAiKiIpIHsKKworICAgICAgICAgICAgLy8gT3B0aW1pemUgdGhlIGNvbW1vbiBjYXNl
IG9mICIvLyoiIEFLQSBkZXNjZW5kYW50LW9yLXNlbGY6Om5vZGUoKS9jaGlsZDo6Ki4KKyAgICAg
ICAgICAgIGZpcnN0LT5zZXRBeGlzKFN0ZXA6OkRlc2NlbmRhbnRBeGlzKTsKKyAgICAgICAgICAg
IHNlY29uZC0+c2V0QXhpcyhTdGVwOjpTZWxmQXhpcyk7CisgICAgICAgICAgICBzZWNvbmQtPnNl
dE5vZGVUZXN0KFN0ZXA6Ok5vZGVUZXN0OjpFbGVtZW50Tm9kZVRlc3QpOworICAgICAgICAgICAg
QVNTRVJUKHNlY29uZC0+bm9kZVRlc3QoKS5kYXRhKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBMb2NhdGlvblBhdGg6OmFwcGVuZFN0ZXAoU3RlcCogc3RlcCkKK3sK
KyAgICBtX3N0ZXBzLmFwcGVuZChzdGVwKTsKKyAgICAKKyAgICB1bnNpZ25lZCBzdGVwQ291bnQg
PSBtX3N0ZXBzLnNpemUoKTsKKyAgICBpZiAoc3RlcENvdW50ID4gMSkKKyAgICAgICAgb3B0aW1p
emVTdGVwUGFpcihzdGVwQ291bnQgLSAyKTsKK30KKwordm9pZCBMb2NhdGlvblBhdGg6Omluc2Vy
dEZpcnN0U3RlcChTdGVwKiBzdGVwKQoreworICAgIG1fc3RlcHMuaW5zZXJ0KDAsIHN0ZXApOwor
CisgICAgaWYgKG1fc3RlcHMuc2l6ZSgpID4gMSkKKyAgICAgICAgb3B0aW1pemVTdGVwUGFpcigw
KTsKK30KKwogUGF0aDo6UGF0aChGaWx0ZXIqIGZpbHRlciwgTG9jYXRpb25QYXRoKiBwYXRoKQog
ICAgIDogbV9maWx0ZXIoZmlsdGVyKSwKICAgICBtX3BhdGgocGF0aCkKSW5kZXg6IFdlYkNvcmUv
eG1sL1hQYXRoUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoUGF0aC5oCShy
ZXZpc2lvbiAyMDA5MSkKKysrIFdlYkNvcmUveG1sL1hQYXRoUGF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NywxNSArNTcsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgICBMb2NhdGlvblBhdGgoKTsKICAgICAgICAgICAgIHZpcnR1YWwgfkxvY2F0
aW9uUGF0aCgpOworICAgICAgICAgICAgdm9pZCBzZXRBYnNvbHV0ZShib29sIHZhbHVlKSB7IG1f
YWJzb2x1dGUgPSB2YWx1ZTsgfQogCiAgICAgICAgICAgICB2aXJ0dWFsIFZhbHVlIGV2YWx1YXRl
KCkgY29uc3Q7CiAgICAgICAgICAgICBWYWx1ZSBldmFsdWF0ZShjb25zdCBOb2RlVmVjdG9yJiBz
dGFydE5vZGVzKSBjb25zdDsKIAorICAgICAgICAgICAgdm9pZCBhcHBlbmRTdGVwKFN0ZXAqIHN0
ZXApOworICAgICAgICAgICAgdm9pZCBpbnNlcnRGaXJzdFN0ZXAoU3RlcCogc3RlcCk7CisKICAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZvaWQgb3B0aW1pemVTdGVwUGFpcih1bnNpZ25l
ZCBpbmRleCk7CisKICAgICAgICAgICAgIFZlY3RvcjxTdGVwKj4gbV9zdGVwczsKICAgICAgICAg
ICAgIGJvb2wgbV9hYnNvbHV0ZTsKLQotICAgICAgICAgICAgZnJpZW5kIGludCA6OnhwYXRoeXlw
YXJzZSh2b2lkKik7CiAgICAgICAgIH07CiAKICAgICAgICAgY2xhc3MgUGF0aCA6IHB1YmxpYyBF
eHByZXNzaW9uCkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAJKHJldmlzaW9uIDIwMDkxKQorKysgV2ViQ29yZS94
bWwvWFBhdGhTdGVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTQgKzM4LDE0IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgWFBhdGggewogCi1TdGVwOjpTdGVwKEF4aXMgYXhp
cywgY29uc3QgU3RyaW5nJiBub2RlVGVzdCwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVk
aWNhdGVzKQorU3RlcDo6U3RlcChBeGlzIGF4aXMsIGNvbnN0IE5vZGVUZXN0JiBub2RlVGVzdCwg
Y29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVzKQogICAgIDogbV9heGlzKGF4aXMp
CiAgICAgLCBtX25vZGVUZXN0KG5vZGVUZXN0KQogICAgICwgbV9wcmVkaWNhdGVzKHByZWRpY2F0
ZXMpCiB7CiB9CiAKLVN0ZXA6OlN0ZXAoQXhpcyBheGlzLCBjb25zdCBTdHJpbmcmIG5vZGVUZXN0
LCBjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBw
cmVkaWNhdGVzKQorU3RlcDo6U3RlcChBeGlzIGF4aXMsIGNvbnN0IE5vZGVUZXN0JiBub2RlVGVz
dCwgY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFZlY3RvcjxQcmVkaWNhdGUqPiYg
cHJlZGljYXRlcykKICAgICA6IG1fYXhpcyhheGlzKQogICAgICwgbV9ub2RlVGVzdChub2RlVGVz
dCkKICAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKQEAgLTYwLDMxICs2MCwzMiBA
QCBTdGVwOjp+U3RlcCgpCiAKIE5vZGVWZWN0b3IgU3RlcDo6ZXZhbHVhdGUoTm9kZSogY29udGV4
dCkgY29uc3QKIHsKLSAgICBOb2RlVmVjdG9yIGluTm9kZXMgPSBub2Rlc0luQXhpcyhjb250ZXh0
KSwgb3V0Tm9kZXM7Ci0gICAgaW5Ob2RlcyA9IG5vZGVUZXN0TWF0Y2hlcyhpbk5vZGVzKTsKKyAg
ICBOb2RlVmVjdG9yIG5vZGVzID0gbm9kZXNJbkF4aXMoY29udGV4dCk7CisgICAgbm9kZXMgPSBu
b2RlVGVzdE1hdGNoZXMobm9kZXMpOworICAgIAorICAgIEV2YWx1YXRpb25Db250ZXh0JiBldmFs
dWF0aW9uQ29udGV4dCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCk7CiAgICAgCi0g
ICAgb3V0Tm9kZXMgPSBpbk5vZGVzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3By
ZWRpY2F0ZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgUHJlZGljYXRlKiBwcmVkaWNhdGUgPSBt
X3ByZWRpY2F0ZXNbaV07CiAKLSAgICAgICAgb3V0Tm9kZXMuY2xlYXIoKTsKLSAgICAgICAgRXhw
cmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5zaXplID0gaW5Ob2Rlcy5zaXplKCk7Ci0gICAg
ICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRpb24gPSAxOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaW5Ob2Rlcy5zaXplKCk7IGorKykgewotICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGluTm9kZXNbal0uZ2V0KCk7CisgICAgICAgIE5vZGVWZWN0b3Ig
bmV3Tm9kZXM7CisgICAgICAgIGV2YWx1YXRpb25Db250ZXh0LnNpemUgPSBub2Rlcy5zaXplKCk7
CisgICAgICAgIGV2YWx1YXRpb25Db250ZXh0LnBvc2l0aW9uID0gMTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IG5vZGVzLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbm9kZXNbal0uZ2V0KCk7CiAKICAgICAgICAgICAgIEV4cHJlc3Npb246OmV2YWx1
YXRpb25Db250ZXh0KCkubm9kZSA9IG5vZGU7Ci0gICAgICAgICAgICBFdmFsdWF0aW9uQ29udGV4
dCBiYWNrdXBDdHggPSBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpOworICAgICAgICAg
ICAgRXZhbHVhdGlvbkNvbnRleHQgYmFja3VwQ3R4ID0gZXZhbHVhdGlvbkNvbnRleHQ7CiAgICAg
ICAgICAgICBpZiAocHJlZGljYXRlLT5ldmFsdWF0ZSgpKQotICAgICAgICAgICAgICAgIG91dE5v
ZGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgICAgICBuZXdOb2Rlcy5hcHBlbmQobm9kZSk7
CiAKLSAgICAgICAgICAgIEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkgPSBiYWNrdXBD
dHg7Ci0gICAgICAgICAgICArK0V4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkucG9zaXRp
b247CisgICAgICAgICAgICBldmFsdWF0aW9uQ29udGV4dCA9IGJhY2t1cEN0eDsKKyAgICAgICAg
ICAgICsrZXZhbHVhdGlvbkNvbnRleHQucG9zaXRpb247CiAgICAgICAgIH0KIAotICAgICAgICBp
bk5vZGVzID0gb3V0Tm9kZXM7CisgICAgICAgIG5vZGVzLnN3YXAobmV3Tm9kZXMpOwogICAgIH0K
LSAgICByZXR1cm4gb3V0Tm9kZXM7CisgICAgcmV0dXJuIG5vZGVzOwogfQogCiBOb2RlVmVjdG9y
IFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQpIGNvbnN0CkBAIC0xNTUsMTAgKzE1Niw5
IEBAIE5vZGVWZWN0b3IgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGUKICAgICAgICAgICAg
ICAgICBub2Rlcy5hcHBlbmQgKGF0dHJzLT5pdGVtKGkpKTsKICAgICAgICAgICAgIHJldHVybiBu
b2RlczsKICAgICAgICAgfQotICAgICAgICBjYXNlIE5hbWVzcGFjZUF4aXM6IHsKKyAgICAgICAg
Y2FzZSBOYW1lc3BhY2VBeGlzOgogICAgICAgICAgICAgLy8gWFBhdGggbmFtZXNwYWNlIG5vZGVz
IGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgogICAgICAgICAgICAgcmV0dXJuIE5vZGVWZWN0b3Io
KTsKLSAgICAgICAgfQogICAgICAgICBjYXNlIFNlbGZBeGlzOgogICAgICAgICAgICAgbm9kZXMu
YXBwZW5kKGNvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwpAQCAtMTczLDcgKzE3
Myw3IEBAIE5vZGVWZWN0b3IgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGUKICAgICAgICAg
ICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAg
fQotCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIE5vZGVWZWN0b3IoKTsK
IH0KIApAQCAtMTgyLDg2ICsxODIsOTEgQEAgTm9kZVZlY3RvciBTdGVwOjpub2RlVGVzdE1hdGNo
ZXMoY29uc3QgTgogewogICAgIE5vZGVWZWN0b3IgbWF0Y2hlczsKIAotICAgIGlmIChtX25vZGVU
ZXN0ID09ICIqIikgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IHByaW1hcnlOb2RlVHlwZShtX2F4aXMp
ICYmCi0gICAgICAgICAgICAgICAgKG1fbmFtZXNwYWNlVVJJLmlzRW1wdHkoKSB8fCBtX25hbWVz
cGFjZVVSSSA9PSBub2RlLT5uYW1lc3BhY2VVUkkoKSkpCi0gICAgICAgICAgICAgICAgbWF0Y2hl
cy5hcHBlbmQobm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1hdGNoZXM7Ci0gICAg
fSBlbHNlIGlmIChtX25vZGVUZXN0ID09ICJ0ZXh0KCkiKSB7Ci0gICAgICAgIEhhc2hTZXQ8Tm9k
ZSo+IG5vZGVTZXQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXpl
KCk7IGkrKykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVzW2ldLmdldCgpOwotICAg
ICAgICAgICAgaWYgKChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fCBub2Rl
LT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSkpIHsKLSAgICAgICAgICAg
ICAgICBub2RlU2V0LmFkZChub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGVTZXQuY29u
dGFpbnMobm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpKSAvLyBTZWUgPGh0dHA6Ly93d3cudzMub3Jn
L1RSL0RPTS1MZXZlbC0zLVhQYXRoL3hwYXRoLmh0bWwjVGV4dE5vZGVzPgotICAgICAgICAgICAg
ICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICBzd2l0Y2ggKG1fbm9kZVRlc3Qua2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgTm9kZVRlc3Q6OlRleHROb2RlVGVzdDogeworICAgICAgICAg
ICAgSGFzaFNldDxOb2RlKj4gbm9kZVNldDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBub2Rlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoKG5vZGUtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6VEVYVF9OT0RFIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VD
VElPTl9OT0RFKSkgeworICAgICAgICAgICAgICAgICAgICBub2RlU2V0LmFkZChub2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFub2RlU2V0LmNvbnRhaW5zKG5vZGUtPnByZXZpb3VzU2li
bGluZygpKSkgLy8gU2VlIDxodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1YUGF0aC94
cGF0aC5odG1sI1RleHROb2Rlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBw
ZW5kKG5vZGUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBtYXRjaGVzOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtYXRjaGVzOwotICAg
IH0gZWxzZSBpZiAobV9ub2RlVGVzdCA9PSAiY29tbWVudCgpIikgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgp
ID09IE5vZGU6OkNPTU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChu
b2RlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWF0Y2hlczsKLSAgICB9IGVsc2UgaWYg
KG1fbm9kZVRlc3Quc3RhcnRzV2l0aCgicHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIpKSB7Ci0gICAg
ICAgIFN0cmluZyBwYXJhbTsKLQotICAgICAgICBjb25zdCBpbnQgc3BhY2UgPSBtX25vZGVUZXN0
LmZpbmQoJyAnKTsKLSAgICAgICAgaWYgKHNwYWNlID4gLTEpCi0gICAgICAgICAgICBwYXJhbSA9
IG1fbm9kZVRlc3Quc3Vic3RyaW5nKHNwYWNlICsgMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbm9kZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09
IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSAmJgotICAgICAgICAgICAgICAgIChw
YXJhbS5pc0VtcHR5KCkgfHwgbm9kZS0+bm9kZU5hbWUoKSA9PSBwYXJhbSkpCi0gICAgICAgICAg
ICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUpOwotICAgICAgICB9ICAgIAotICAgICAgICBy
ZXR1cm4gbWF0Y2hlczsKLSAgICB9IGVsc2UgaWYgKG1fbm9kZVRlc3QgPT0gIm5vZGUoKSIpCi0g
ICAgICAgIHJldHVybiBub2RlczsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fYXhpcyA9PSBB
dHRyaWJ1dGVBeGlzKSB7Ci0gICAgICAgICAgICAvLyBJbiBYUGF0aCBsYW5kLCBuYW1lc3BhY2Ug
bm9kZXMgYXJlIG5vdCBhY2Nlc3NpYmxlCi0gICAgICAgICAgICAvLyBvbiB0aGUgYXR0cmlidXRl
IGF4aXMuCi0gICAgICAgICAgICBpZiAobV9ub2RlVGVzdCA9PSAieG1sbnMiKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtYXRjaGVzOwotCisgICAgICAgIGNhc2UgTm9kZVRlc3Q6OkNvbW1lbnRO
b2RlVGVzdDoKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXpl
KCk7IGkrKykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rlc1tpXS5nZXQoKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bm9kZU5hbWUoKSA9
PSBtX25vZGVUZXN0KSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6Q09NTUVOVF9OT0RFKQogICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChu
b2RlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFRoZXJlIGNhbiBvbmx5IGJlIG9u
ZS4KLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzOwotICAgICAgICB9IGVsc2UgaWYgKG1fYXhpcyA9PSBOYW1lc3BhY2VBeGlzKSB7
Ci0gICAgICAgICAgICAvLyBOb2RlIHRlc3Qgb24gdGhlIG5hbWVzcGFjZSBheGlzIGlzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgY2FzZSBOb2RlVGVzdDo6
UHJvY2Vzc2luZ0luc3RydWN0aW9uTm9kZVRlc3Q6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gbm9kZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSB1c2UgdGFnUU5h
bWUgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGVsZW1lbnQgbmFtZSBpbiB1cHBlcmNh
c2UgCi0gICAgICAgICAgICAgICAgLy8gbGlrZSB3ZSBnZXQgd2l0aCBIVE1MIGVsZW1lbnRzLgot
ICAgICAgICAgICAgICAgIC8vIFBhdGhzIHdpdGhvdXQgbmFtZXNwYWNlcyBzaG91bGQgbWF0Y2gg
SFRNTCBlbGVtZW50cyBpbiBIVE1MIGRvY3VtZW50cyBkZXNwaXRlIHRob3NlIGhhdmluZyBhbiBY
SFRNTCBuYW1lc3BhY2UuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RUxFTUVOVF9OT0RFCi0gICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+dGFnUU5hbWUoKS5sb2NhbE5hbWUoKSA9PSBtX25vZGVUZXN0Ci0gICAg
ICAgICAgICAgICAgICAgICYmICgobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIG5vZGUtPmRvY3Vt
ZW50KCktPmlzSFRNTERvY3VtZW50KCkgJiYgbV9uYW1lc3BhY2VVUkkuaXNOdWxsKCkpIHx8IG1f
bmFtZXNwYWNlVVJJID09IG5vZGUtPm5hbWVzcGFjZVVSSSgpKSkKKyAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIG5hbWUgPSBtX25vZGVUZXN0LmRhdGEoKTsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUg
JiYgKG5hbWUuaXNFbXB0eSgpIHx8IG5vZGUtPm5vZGVOYW1lKCkgPT0gbmFtZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIH0gICAg
CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgY2FzZSBOb2RlVGVzdDo6RWxl
bWVudE5vZGVUZXN0OgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVzW2ldLmdl
dCgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUpOwogICAgICAgICAgICAgfQotCiAgICAg
ICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgY2FzZSBOb2RlVGVzdDo6QW55Tm9kZVRl
c3Q6CisgICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgIGNhc2UgTm9kZVRlc3Q6Ok5h
bWVUZXN0OiB7CisgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX25vZGVUZXN0LmRh
dGEoKTsKKyAgICAgICAgICAgIGlmIChuYW1lID09ICIqIikgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5ub2RlVHlwZSgpID09IHByaW1hcnlOb2RlVHlwZShtX2F4aXMpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAobV9uYW1lc3BhY2VVUkkuaXNFbXB0eSgpIHx8IG1fbmFtZXNw
YWNlVVJJID09IG5vZGUtPm5hbWVzcGFjZVVSSSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoZXMuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2F4aXMg
PT0gQXR0cmlidXRlQXhpcykgeworICAgICAgICAgICAgICAgIC8vIEluIFhQYXRoIGxhbmQsIG5h
bWVzcGFjZSBub2RlcyBhcmUgbm90IGFjY2Vzc2libGUKKyAgICAgICAgICAgICAgICAvLyBvbiB0
aGUgYXR0cmlidXRlIGF4aXMuCisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gInhtbG5zIikK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7CisKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVzW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVOYW1lKCkgPT0gbmFtZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lLgorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJu
IG1hdGNoZXM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fYXhpcyA9PSBOYW1lc3BhY2VBeGlz
KSB7CisgICAgICAgICAgICAgICAgLy8gTm9kZSB0ZXN0IG9uIHRoZSBuYW1lc3BhY2UgYXhpcyBp
cyBub3QgaW1wbGVtZW50ZWQgeWV0CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgdXNlIHRhZ1FOYW1lIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRo
ZSBlbGVtZW50IG5hbWUgaW4gdXBwZXJjYXNlIAorICAgICAgICAgICAgICAgICAgICAvLyBsaWtl
IHdlIGdldCB3aXRoIEhUTUwgZWxlbWVudHMuCisgICAgICAgICAgICAgICAgICAgIC8vIFBhdGhz
IHdpdGhvdXQgbmFtZXNwYWNlcyBzaG91bGQgbWF0Y2ggSFRNTCBlbGVtZW50cyBpbiBIVE1MIGRv
Y3VtZW50cyBkZXNwaXRlIHRob3NlIGhhdmluZyBhbiBYSFRNTCBuYW1lc3BhY2UuCisgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERQor
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT50
YWdRTmFtZSgpLmxvY2FsTmFtZSgpID09IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICYm
ICgobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIG5vZGUtPmRvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkgJiYgbV9uYW1lc3BhY2VVUkkuaXNOdWxsKCkpIHx8IG1fbmFtZXNwYWNlVVJJID09IG5v
ZGUtPm5hbWVzcGFjZVVSSSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBw
ZW5kKG5vZGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBt
YXRjaGVzOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIG1h
dGNoZXM7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5vZGVWZWN0b3Io
KTsKIH0KIAogTm9kZTo6Tm9kZVR5cGUgU3RlcDo6cHJpbWFyeU5vZGVUeXBlKEF4aXMgYXhpcykg
Y29uc3QKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoU3RlcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveG1sL1hQYXRoU3RlcC5oCShyZXZpc2lvbiAyMDA5MSkKKysrIFdlYkNvcmUveG1sL1hQYXRo
U3RlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwyMSArNDgsNTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgICAgIFBhcmVudEF4aXMsIFByZWNlZGluZ0F4aXMsIFByZWNlZGlu
Z1NpYmxpbmdBeGlzLAogICAgICAgICAgICAgICAgIFNlbGZBeGlzCiAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICBjbGFzcyBOb2RlVGVzdCB7CisgICAgICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICAgICAgZW51bSBLaW5kIHsKKyAgICAgICAgICAgICAgICAgICAg
VGV4dE5vZGVUZXN0LCBDb21tZW50Tm9kZVRlc3QsIFByb2Nlc3NpbmdJbnN0cnVjdGlvbk5vZGVU
ZXN0LCBBbnlOb2RlVGVzdCwgTmFtZVRlc3QsCisgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRO
b2RlVGVzdCAvLyBYUGF0aCAyLjAKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIE5vZGVUZXN0KEtpbmQga2luZCwgY29uc3QgU3RyaW5nJiBkYXRh
ID0gU3RyaW5nKCkpIDogbV9raW5kKGtpbmQpLCBtX2RhdGEoZGF0YSkge30KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7
IH0KKyAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgICAgICBLaW5kIG1fa2luZDsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbV9kYXRhOworICAg
ICAgICAgICAgfTsKIAotICAgICAgICAgICAgU3RlcChBeGlzLCBjb25zdCBTdHJpbmcmIG5vZGVU
ZXN0LCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGlj
YXRlKj4oKSk7Ci0gICAgICAgICAgICBTdGVwKEF4aXMsIGNvbnN0IFN0cmluZyYgbm9kZVRlc3Qs
IGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4mIHBy
ZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGljYXRlKj4oKSk7CisgICAgICAgICAgICBTdGVwKEF4aXMs
IGNvbnN0IE5vZGVUZXN0JiBub2RlVGVzdCwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVk
aWNhdGVzID0gVmVjdG9yPFByZWRpY2F0ZSo+KCkpOworICAgICAgICAgICAgU3RlcChBeGlzLCBj
b25zdCBOb2RlVGVzdCYgbm9kZVRlc3QsIGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBWZWN0b3I8UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGljYXRlKj4oKSk7
CiAgICAgICAgICAgICB+U3RlcCgpOwogCiAgICAgICAgICAgICBOb2RlVmVjdG9yIGV2YWx1YXRl
KE5vZGUqIGNvbnRleHQpIGNvbnN0OwotCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEF4aXMg
YXhpcygpIGNvbnN0IHsgcmV0dXJuIG1fYXhpczsgfQorICAgICAgICAgICAgTm9kZVRlc3Qgbm9k
ZVRlc3QoKSBjb25zdCB7IHJldHVybiBtX25vZGVUZXN0OyB9CisgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIG5vZGVUZXN0RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZVRlc3REYXRhOyB9Cisg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZXNwYWNlVVJJOyB9CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8UHJlZGljYXRlKj4mIHBy
ZWRpY2F0ZXMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRpY2F0ZXM7IH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgdm9pZCBzZXRBeGlzKEF4aXMgYXhpcykgeyBtX2F4aXMgPSBheGlzOyB9Cisg
ICAgICAgICAgICB2b2lkIHNldE5vZGVUZXN0KE5vZGVUZXN0IG5vZGVUZXN0KSB7IG1fbm9kZVRl
c3QgPSBub2RlVGVzdDsgfQorICAgICAgICAgICAgdm9pZCBzZXROb2RlVGVzdERhdGEoY29uc3Qg
U3RyaW5nJiBub2RlVGVzdERhdGEpIHsgbV9ub2RlVGVzdERhdGEgPSBub2RlVGVzdERhdGE7IH0K
KyAgICAgICAgICAgIHZvaWQgc2V0TmFtZXNwYWNlVVJJKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNl
VVJJKSB7IG1fbmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOyB9CisgICAgICAgICAgICB2b2lk
IHNldFByZWRpY2F0ZXMoY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVzKSB7IG1f
cHJlZGljYXRlcyA9IHByZWRpY2F0ZXM7IH0KKyAgICAgICAgICAgIAogICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgdm9pZCBwYXJzZU5vZGVUZXN0KGNvbnN0IFN0cmluZyYpOwogICAgICAg
ICAgICAgTm9kZVZlY3RvciBub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0KSBjb25zdDsKICAgICAg
ICAgICAgIE5vZGVWZWN0b3Igbm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVWZWN0b3ImIG5vZGVz
KSBjb25zdDsKICAgICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2VGcm9tTm9kZXRlc3QoY29uc3Qg
U3RyaW5nJiBub2RlVGVzdCkgY29uc3Q7CiAgICAgICAgICAgICBOb2RlOjpOb2RlVHlwZSBwcmlt
YXJ5Tm9kZVR5cGUoQXhpcykgY29uc3Q7CiAKICAgICAgICAgICAgIEF4aXMgbV9heGlzOwotICAg
ICAgICAgICAgU3RyaW5nIG1fbm9kZVRlc3Q7CisgICAgICAgICAgICBOb2RlVGVzdCBtX25vZGVU
ZXN0OworICAgICAgICAgICAgU3RyaW5nIG1fbm9kZVRlc3REYXRhOwogICAgICAgICAgICAgU3Ry
aW5nIG1fbmFtZXNwYWNlVVJJOwogICAgICAgICAgICAgVmVjdG9yPFByZWRpY2F0ZSo+IG1fcHJl
ZGljYXRlczsKICAgICAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13617</attachid>
            <date>2007-03-13 13:35:24 -0700</date>
            <delta_ts>2007-03-14 23:37:17 -0700</delta_ts>
            <desc>partial fix 2</desc>
            <filename>13021_2.txt</filename>
            <type>text/plain</type>
            <size>18616</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDE1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDctMDMtMTMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEEgcGFydGlhbCBmaXggZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMDIxCisgICAgICAgIFhQYXRoIGNhbiBiZSB2ZXJ5IHNsb3cKKworICAgICAgICAqIGRvbS9B
dHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OmNyZWF0ZVRleHRDaGlsZCk6IEluc3Rl
YWQgb2YgY2FsbGluZyBhcHBlbmRDaGlsZCgpLCBqdXN0IGRvIHRoZSBmZXcgb3BlcmF0aW9ucyBp
dCByZWFsbHkgbmVlZHMgdG8gcGVyZm9ybS4KKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6ZmFzdFNldEZpcnN0Q2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6ZmFzdFNldExhc3RDaGlsZCk6CisgICAg
ICAgIEFkZGVkIG9wZXJhdGlvbnMgdGhhdCBsZXQgQXR0ciBoYWNrIGludGVybmFsIENvbnRhaW5l
ck5vZGUgZGF0YSAoZXZpbCwgYnV0IGZhc3QhKS4KKworICAgICAgICAqIHhtbC9YUGF0aEV4cHJl
c3Npb25Ob2RlLmg6IEV2YWx1YXRpb25Db250ZXh0IGRvZXNuJ3QgbmVlZCB0byBwcm90ZWN0IGl0
cyBub2RlIC0gaXQgaXMgbm90IGdvaW5nIHRvIGRpc2FwcGVhciBkdXJpbmcKKyAgICAgICAgZXhw
cmVzc2lvbiBldmFsdWF0aW9uLgorICAgICAgICAqIHhtbC9YUGF0aEZ1bmN0aW9ucy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTG9jYWxOYW1lOjpldmFsdWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpYUGF0aDo6RnVuTmFtZXNwYWNlVVJJOjpldmFsdWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpYUGF0aDo6RnVuTmFtZTo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBh
dGg6OkZ1blN0cmluZzo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1blN0
cmluZ0xlbmd0aDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5vcm1h
bGl6ZVNwYWNlOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFuZzo6
ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk51bWJlcjo6ZXZhbHVhdGUp
OgorICAgICAgICAqIHhtbC9YUGF0aFBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6
OkxvY2F0aW9uUGF0aDo6ZXZhbHVhdGUpOgorICAgICAgICBBZGp1c3RlZCBmb3IgdGhlIGFib3Zl
IGNoYW5nZS4KKworICAgICAgICAqIHhtbC9YUGF0aFN0ZXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OlN0ZXA6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVw
Ojpub2Rlc0luQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9kZU1hdGNo
ZXMpOgorICAgICAgICAqIHhtbC9YUGF0aFN0ZXAuaDoKKyAgICAgICAgTWVyZ2VkIG5vZGUgdGVz
dGluZyBpbnRvIGF4aXMgZW51bWVyYXRpb24uIFRoaXMgc2F2ZXMgYSBsb3Qgb2YgVmVjdG9yIHJl
c2l6aW5nIGFuZCBwYXNzaW5nLCBhbmQgaXMgbmVjZXNzYXJ5IGZvciBmdXR1cmUgCisgICAgICAg
IG9wdGltaXphdGlvbnMgKHNvbWV0aW1lcywgd2UgY2FuIGp1c3QgcGljayB0aGUgc2luZ2xlIHJl
c3VsdCBub2RlIGluc3RlYWQgb2YgZW51bWVyYXRpbmcgYW5kIGZpbHRlcmluZyB0aGUgd2hvbGUg
YXhpcykuCisKIDIwMDctMDMtMTMgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyIGFuZCBKb2huIFN1bGxpdmFuLgpJbmRleDog
V2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXR0ci5jcHAJ
KHJldmlzaW9uIDIwMTA5KQorKysgV2ViQ29yZS9kb20vQXR0ci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDEyICs1MSwxNCBAQCBBdHRyOjp+QXR0cigpCiAKIHZvaWQgQXR0cjo6Y3JlYXRlVGV4
dENoaWxkKCkKIHsKLSAgICBhc3NlcnQocmVmQ291bnQoKSk7CisgICAgQVNTRVJUKHJlZkNvdW50
KCkpOwogICAgIGlmICghbV9hdHRyaWJ1dGUtPnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBtX2lnbm9yZUNoaWxkcmVuQ2hhbmdlZCsr
OwotICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShtX2F0dHJp
YnV0ZS0+dmFsdWUoKS5pbXBsKCkpLCBlYyk7Ci0gICAgICAgIG1faWdub3JlQ2hpbGRyZW5DaGFu
Z2VkLS07CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IGRvY3VtZW50KCktPmNyZWF0
ZVRleHROb2RlKG1fYXR0cmlidXRlLT52YWx1ZSgpLmltcGwoKSk7CisKKyAgICAgICAgLy8gVGhp
cyBkb2VzIGV2ZXJ5dGhpbmcgYXBwZW5kQ2hpbGQoKSB3b3VsZCBkbyBpbiB0aGlzIHNpdHVhdGlv
biwgYnV0IG11Y2ggbW9yZSBlZmZpY2llbnRseS4KKyAgICAgICAgdGV4dE5vZGUtPnNldFBhcmVu
dCh0aGlzKTsKKyAgICAgICAgZmFzdFNldEZpcnN0Q2hpbGQodGV4dE5vZGUuZ2V0KCkpOworICAg
ICAgICBmYXN0U2V0TGFzdENoaWxkKHRleHROb2RlLmdldCgpKTsKICAgICB9CiB9CiAKSW5kZXg6
IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmgJKHJldmlzaW9uIDIwMTA5KQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIE5v
ZGUqIGZhc3RGaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CiAgICAg
Tm9kZSogZmFzdExhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9Ci0gICAg
CisKICAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CiAgICAgdm9pZCByZW1vdmVDaGlsZHJl
bigpOwogICAgIHZvaWQgY2xvbmVDaGlsZE5vZGVzKE5vZGUqIGNsb25lKTsKQEAgLTczLDYgKzcz
LDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHF1ZXVlUG9zdEF0dGFj
aENhbGxiYWNrKE5vZGVDYWxsYmFjaywgTm9kZSopOwogCisgICAgdm9pZCBmYXN0U2V0Rmlyc3RD
aGlsZChOb2RlKiBjaGlsZCkgeyBtX2ZpcnN0Q2hpbGQgPSBjaGlsZDsgfQorICAgIHZvaWQgZmFz
dFNldExhc3RDaGlsZChOb2RlKiBjaGlsZCkgeyBtX2xhc3RDaGlsZCA9IGNoaWxkOyB9CisgICAg
CiBwcml2YXRlOgogICAgIE5vZGUqIG1fZmlyc3RDaGlsZDsKICAgICBOb2RlKiBtX2xhc3RDaGls
ZDsKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoRXhwcmVzc2lvbk5vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3htbC9YUGF0aEV4cHJlc3Npb25Ob2RlLmgJKHJldmlzaW9uIDIwMTA5KQorKysg
V2ViQ29yZS94bWwvWFBhdGhFeHByZXNzaW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3
ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RydWN0IEV2YWx1YXRpb25D
b250ZXh0IHsKICAgICAgICAgICAgIEV2YWx1YXRpb25Db250ZXh0KCkgOiBub2RlKDApLCBzaXpl
KDApLCBwb3NpdGlvbigwKSB7IH0KIAotICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5vZGU7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlOwogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplOwog
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwb3NpdGlvbjsKICAgICAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IHZhcmlhYmxlQmluZGluZ3M7CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0
aEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMu
Y3BwCShyZXZpc2lvbiAyMDEwOSkKKysrIFdlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIFZhbHVlIEZ1bkxvY2FsTmFtZTo6ZXZh
bHVhdGUoKSBjb25zdAogICAgIH0KIAogICAgIGlmICghbm9kZSkKLSAgICAgICAgbm9kZSA9IGV2
YWx1YXRpb25Db250ZXh0KCkubm9kZS5nZXQoKTsKKyAgICAgICAgbm9kZSA9IGV2YWx1YXRpb25D
b250ZXh0KCkubm9kZTsKIAogICAgIHJldHVybiBWYWx1ZShub2RlLT5sb2NhbE5hbWUoKSk7CiB9
CkBAIC0zMzcsNyArMzM3LDcgQEAgVmFsdWUgRnVuTmFtZXNwYWNlVVJJOjpldmFsdWF0ZSgpIGNv
bnN0CiAgICAgfQogCiAgICAgaWYgKCFub2RlKQotICAgICAgICBub2RlID0gZXZhbHVhdGlvbkNv
bnRleHQoKS5ub2RlLmdldCgpOworICAgICAgICBub2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5u
b2RlOwogCiAgICAgcmV0dXJuIFZhbHVlKG5vZGUtPm5hbWVzcGFjZVVSSSgpKTsKIH0KQEAgLTM1
NCw3ICszNTQsNyBAQCBWYWx1ZSBGdW5OYW1lOjpldmFsdWF0ZSgpIGNvbnN0CiAgICAgfQogCiAg
ICAgaWYgKCFub2RlKQotICAgICAgICBub2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLmdl
dCgpOworICAgICAgICBub2RlID0gZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOwogCiAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXggPSBub2RlLT5wcmVmaXgoKTsKICAgICByZXR1cm4gcHJl
Zml4LmlzRW1wdHkoKSA/IG5vZGUtPmxvY2FsTmFtZSgpLmRvbVN0cmluZygpIDogbm9kZS0+cHJl
Zml4KCkgKyAiOiIgKyBub2RlLT5sb2NhbE5hbWUoKTsKQEAgLTM3Myw3ICszNzMsNyBAQCBWYWx1
ZSBGdW5Db3VudDo6ZXZhbHVhdGUoKSBjb25zdAogVmFsdWUgRnVuU3RyaW5nOjpldmFsdWF0ZSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFhcmdDb3VudCgpKQotICAgICAgICByZXR1cm4gVmFsdWUoRXhw
cmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLmdldCgpKS50b1N0cmluZygpOworICAg
ICAgICByZXR1cm4gVmFsdWUoRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlKS50
b1N0cmluZygpOwogICAgIHJldHVybiBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKIH0K
IApAQCAtNDY5LDE0ICs0NjksMTQgQEAgVmFsdWUgRnVuU3Vic3RyaW5nOjpldmFsdWF0ZSgpIGNv
bnN0CiBWYWx1ZSBGdW5TdHJpbmdMZW5ndGg6OmV2YWx1YXRlKCkgY29uc3QKIHsKICAgICBpZiAo
IWFyZ0NvdW50KCkpCi0gICAgICAgIHJldHVybiBWYWx1ZShFeHByZXNzaW9uOjpldmFsdWF0aW9u
Q29udGV4dCgpLm5vZGUuZ2V0KCkpLnRvU3RyaW5nKCkubGVuZ3RoKCk7CisgICAgICAgIHJldHVy
biBWYWx1ZShFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUpLnRvU3RyaW5nKCku
bGVuZ3RoKCk7CiAgICAgcmV0dXJuIGFyZygwKS0+ZXZhbHVhdGUoKS50b1N0cmluZygpLmxlbmd0
aCgpOwogfQogCiBWYWx1ZSBGdW5Ob3JtYWxpemVTcGFjZTo6ZXZhbHVhdGUoKSBjb25zdAogewog
ICAgIGlmICghYXJnQ291bnQoKSkgewotICAgICAgICBTdHJpbmcgcyA9IFZhbHVlKEV4cHJlc3Np
b246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZS5nZXQoKSkudG9TdHJpbmcoKTsKKyAgICAgICAg
U3RyaW5nIHMgPSBWYWx1ZShFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUpLnRv
U3RyaW5nKCk7CiAgICAgICAgIHJldHVybiBWYWx1ZShzLnNpbXBsaWZ5V2hpdGVTcGFjZSgpKTsK
ICAgICB9CiAKQEAgLTUyNyw3ICs1MjcsNyBAQCBWYWx1ZSBGdW5MYW5nOjpldmFsdWF0ZSgpIGNv
bnN0CiAgICAgU3RyaW5nIGxhbmcgPSBhcmcoMCktPmV2YWx1YXRlKCkudG9TdHJpbmcoKTsKIAog
ICAgIFJlZlB0cjxOb2RlPiBsYW5nTm9kZSA9IDA7Ci0gICAgTm9kZSogbm9kZSA9IGV2YWx1YXRp
b25Db250ZXh0KCkubm9kZS5nZXQoKTsKKyAgICBOb2RlKiBub2RlID0gZXZhbHVhdGlvbkNvbnRl
eHQoKS5ub2RlOwogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIE5hbWVkQXR0ck1hcCogYXR0
cnMgPSBub2RlLT5hdHRyaWJ1dGVzKCk7CiAgICAgICAgIGlmIChhdHRycykKQEAgLTU2Myw3ICs1
NjMsNyBAQCBWYWx1ZSBGdW5GYWxzZTo6ZXZhbHVhdGUoKSBjb25zdAogVmFsdWUgRnVuTnVtYmVy
OjpldmFsdWF0ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFhcmdDb3VudCgpKQotICAgICAgICByZXR1
cm4gVmFsdWUoRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlLmdldCgpKS50b051
bWJlcigpOworICAgICAgICByZXR1cm4gVmFsdWUoRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRl
eHQoKS5ub2RlKS50b051bWJlcigpOwogICAgIHJldHVybiBhcmcoMCktPmV2YWx1YXRlKCkudG9O
dW1iZXIoKTsKIH0KIApJbmRleDogV2ViQ29yZS94bWwvWFBhdGhQYXRoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFBhdGguY3BwCShyZXZpc2lvbiAyMDEwOSkKKysrIFdlYkNv
cmUveG1sL1hQYXRoUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgVmFs
dWUgTG9jYXRpb25QYXRoOjpldmFsdWF0ZSgpIGNvbnN0CiAgICAgLyogRm9yIGFic29sdXRlIGxv
Y2F0aW9uIHBhdGhzLCB0aGUgY29udGV4dCBub2RlIGlzIGlnbm9yZWQgLSB0aGUKICAgICAgKiBk
b2N1bWVudCdzIHJvb3Qgbm9kZSBpcyB1c2VkIGluc3RlYWQuCiAgICAgICovCi0gICAgTm9kZSog
Y29udGV4dCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCkubm9kZS5nZXQoKTsKKyAg
ICBOb2RlKiBjb250ZXh0ID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlvbkNvbnRleHQoKS5ub2RlOwog
ICAgIGlmIChtX2Fic29sdXRlICYmIGNvbnRleHQtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1F
TlRfTk9ERSkgCiAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0LT5vd25lckRvY3VtZW50KCk7CiAK
SW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
bWwvWFBhdGhTdGVwLmNwcAkocmV2aXNpb24gMjAxMTApCisrKyBXZWJDb3JlL3htbC9YUGF0aFN0
ZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIFN0ZXA6On5TdGVwKCkKIE5v
ZGVWZWN0b3IgU3RlcDo6ZXZhbHVhdGUoTm9kZSogY29udGV4dCkgY29uc3QKIHsKICAgICBOb2Rl
VmVjdG9yIG5vZGVzID0gbm9kZXNJbkF4aXMoY29udGV4dCk7Ci0gICAgbm9kZXMgPSBub2RlVGVz
dE1hdGNoZXMobm9kZXMpOwogICAgIAogICAgIEV2YWx1YXRpb25Db250ZXh0JiBldmFsdWF0aW9u
Q29udGV4dCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCk7CiAgICAgCkBAIC05NCwx
NzQgKzkzLDE0OSBAQCBOb2RlVmVjdG9yIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRlCiAg
ICAgc3dpdGNoIChtX2F4aXMpIHsKICAgICAgICAgY2FzZSBDaGlsZEF4aXM6CiAgICAgICAgICAg
ICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2li
bGluZygpKQotICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChu
KTsKICAgICAgICAgICAgIHJldHVybiBub2RlczsKICAgICAgICAgY2FzZSBEZXNjZW5kYW50QXhp
czogCiAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5maXJzdENoaWxkKCk7IG47
IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGNvbnRleHQpKQotICAgICAgICAgICAgICAgIG5vZGVz
LmFwcGVuZChuKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAg
ICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIHJldHVybiBub2RlczsK
ICAgICAgICAgY2FzZSBQYXJlbnRBeGlzOiB7CiAgICAgICAgICAgICBOb2RlKiBwYXJlbnQgPSBj
b250ZXh0LT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50KQorICAgICAgICAg
ICAgaWYgKHBhcmVudCAmJiBub2RlTWF0Y2hlcyhwYXJlbnQpKQogICAgICAgICAgICAgICAgIG5v
ZGVzLmFwcGVuZChwYXJlbnQpOwogICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgQW5jZXN0b3JBeGlzOgogICAgICAgICAgICAgZm9yIChOb2RlKiBuID0g
Y29udGV4dC0+cGFyZW50Tm9kZSgpOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKQotICAgICAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMo
bikpCisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIHJl
dHVybiBub2RlczsKICAgICAgICAgY2FzZSBGb2xsb3dpbmdTaWJsaW5nQXhpczoKICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8CiAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6WFBBVEhfTkFNRVNQ
QUNFX05PREUpIAotICAgICAgICAgICAgICAgIHJldHVybiBOb2RlVmVjdG9yKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGVzOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKE5v
ZGUqIG4gPSBjb250ZXh0LT5uZXh0U2libGluZygpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkK
LSAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAg
ICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAgICAgIGNhc2UgUHJlY2VkaW5nU2libGluZ0F4aXM6
CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVf
Tk9ERSB8fAogICAgICAgICAgICAgICAgICBjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OlhQ
QVRIX05BTUVTUEFDRV9OT0RFKQotICAgICAgICAgICAgICAgIHJldHVybiBOb2RlVmVjdG9yKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5wcmV2aW91c1NpYmxpbmcoKTsgbjsgbiA9IG4tPnBy
ZXZpb3VzU2libGluZygpKQotICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgICAgIG5vZGVz
LmFwcGVuZChuKTsKICAgICAgICAgICAgIHJldHVybiBub2RlczsKICAgICAgICAgY2FzZSBGb2xs
b3dpbmdBeGlzOiAKICAgICAgICAgICAgIGZvciAoTm9kZSAqcCA9IGNvbnRleHQ7ICFpc1Jvb3RE
b21Ob2RlKHApOyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChO
b2RlKiBuID0gcC0+bmV4dFNpYmxpbmcoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQo
bik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYyA9IG4tPmZpcnN0Q2hpbGQoKTsg
YzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUobikpCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b2Rlcy5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMo
YykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGMpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBub2RlczsKICAg
ICAgICAgY2FzZSBQcmVjZWRpbmdBeGlzOgogICAgICAgICAgICAgZm9yIChOb2RlKiBwID0gY29u
dGV4dDsgIWlzUm9vdERvbU5vZGUocCk7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAg
ICAgICAgICBmb3IgKE5vZGUqIG4gPSBwLT5wcmV2aW91c1NpYmxpbmcoKTsgbiA7IG4gPSBuLT5w
cmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7
CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBjID0gbi0+Zmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+dHJhdmVyc2VOZXh0Tm9kZShuKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlTWF0Y2hlcyhjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2Rlcy5hcHBlbmQoYyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIG5vZGVzOwogICAgICAgICBjYXNlIEF0dHJpYnV0ZUF4aXM6IHsKICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTm9kZVZlY3RvcigpOworICAgICAgICAgICAgICAgIHJldHVy
biBub2RlczsKIAogICAgICAgICAgICAgTmFtZWRBdHRyTWFwKiBhdHRycyA9IGNvbnRleHQtPmF0
dHJpYnV0ZXMoKTsKICAgICAgICAgICAgIGlmICghYXR0cnMpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGVzOwogCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBh
dHRycy0+bGVuZ3RoKCk7ICsraSkgCi0gICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kIChhdHRy
cy0+aXRlbShpKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBh
dHRycy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBhdHRy
ID0gYXR0cnMtPml0ZW0oaSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKGF0dHIu
Z2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoYXR0cik7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBOYW1lc3BhY2VBeGlzOgogICAgICAgICAgICAgLy8gWFBhdGggbmFtZXNwYWNlIG5vZGVzIGFy
ZSBub3QgaW1wbGVtZW50ZWQgeWV0LgotICAgICAgICAgICAgcmV0dXJuIE5vZGVWZWN0b3IoKTsK
KyAgICAgICAgICAgIHJldHVybiBub2RlczsKICAgICAgICAgY2FzZSBTZWxmQXhpczoKLSAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKKyAgICAgICAgICAgIGlmIChub2RlTWF0Y2hl
cyhjb250ZXh0KSkKKyAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoY29udGV4dCk7CiAgICAg
ICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAgICAgIGNhc2UgRGVzY2VuZGFudE9yU2VsZkF4aXM6
Ci0gICAgICAgICAgICBub2Rlcy5hcHBlbmQoY29udGV4dCk7CisgICAgICAgICAgICBpZiAobm9k
ZU1hdGNoZXMoY29udGV4dCkpCisgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQp
OwogICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBu
ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShjb250ZXh0KSkKLSAgICAgICAgICAgICAgICBub2Rlcy5h
cHBlbmQobik7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAg
ICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CiAg
ICAgICAgIGNhc2UgQW5jZXN0b3JPclNlbGZBeGlzOgotICAgICAgICAgICAgbm9kZXMuYXBwZW5k
KGNvbnRleHQpOworICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKGNvbnRleHQpKQorICAgICAg
ICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKICAgICAgICAgICAgIGZvciAoTm9kZSog
biA9IGNvbnRleHQtPnBhcmVudE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkKLSAgICAg
ICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKG4pKQorICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAg
ICByZXR1cm4gbm9kZXM7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBOb2RlVmVjdG9yKCk7CisgICAgcmV0dXJuIG5vZGVzOwogfQogCiAKLU5vZGVWZWN0b3Ig
U3RlcDo6bm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVWZWN0b3ImIG5vZGVzKSBjb25zdAorYm9v
bCBTdGVwOjpub2RlTWF0Y2hlcyhjb25zdCBOb2RlKiBub2RlKSBjb25zdAogewotICAgIE5vZGVW
ZWN0b3IgbWF0Y2hlczsKLQogICAgIHN3aXRjaCAobV9ub2RlVGVzdC5raW5kKCkpIHsKICAgICAg
ICAgY2FzZSBOb2RlVGVzdDo6VGV4dE5vZGVUZXN0OgotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG5vZGVzW2ldLmdldCgpOwotICAgICAgICAgICAgICAgIGlmICgobm9kZS0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFU
QV9TRUNUSU9OX05PREUpKQotICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2Rl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8IG5vZGUtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOwogICAgICAgICBjYXNlIE5vZGVU
ZXN0OjpDb21tZW50Tm9kZVRlc3Q6Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbm9k
ZXNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6Q09NTUVOVF9OT0RFKQotICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2Rl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOwotICAgICAgICBj
YXNlIE5vZGVUZXN0OjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Ob2RlVGVzdDoKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgewotICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIG5hbWUgPSBtX25vZGVUZXN0LmRhdGEoKTsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgJiYg
KG5hbWUuaXNFbXB0eSgpIHx8IG5vZGUtPm5vZGVOYW1lKCkgPT0gbmFtZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKLSAgICAgICAgICAgIH0gICAgCi0g
ICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5ub2Rl
VHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERTsKKyAgICAgICAgY2FzZSBOb2RlVGVzdDo6UHJv
Y2Vzc2luZ0luc3RydWN0aW9uTm9kZVRlc3Q6IHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
bmFtZSA9IG1fbm9kZVRlc3QuZGF0YSgpOworICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm5vZGVU
eXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFICYmIChuYW1lLmlzRW1w
dHkoKSB8fCBub2RlLT5ub2RlTmFtZSgpID09IG5hbWUpOworICAgICAgICB9ICAgIAogICAgICAg
ICBjYXNlIE5vZGVUZXN0OjpFbGVtZW50Tm9kZVRlc3Q6Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzRWxl
bWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgICAgIHJl
dHVybiBub2RlLT5pc0VsZW1lbnROb2RlKCk7CiAgICAgICAgIGNhc2UgTm9kZVRlc3Q6OkFueU5v
ZGVUZXN0OgotICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIGNhc2UgTm9kZVRlc3Q6Ok5hbWVUZXN0OiB7CiAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIG5hbWUgPSBtX25vZGVUZXN0LmRhdGEoKTsKLSAgICAgICAgICAgIGlmIChuYW1l
ID09ICIqIikgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rl
cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbm9kZXNb
aV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IHBy
aW1hcnlOb2RlVHlwZShtX2F4aXMpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAobV9uYW1l
c3BhY2VVUkkuaXNFbXB0eSgpIHx8IG1fbmFtZXNwYWNlVVJJID09IG5vZGUtPm5hbWVzcGFjZVVS
SSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChuYW1lID09ICIqIikKKyAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZS0+bm9kZVR5cGUoKSA9PSBwcmltYXJ5Tm9kZVR5cGUobV9heGlzKSAmJiAobV9uYW1l
c3BhY2VVUkkuaXNFbXB0eSgpIHx8IG1fbmFtZXNwYWNlVVJJID09IG5vZGUtPm5hbWVzcGFjZVVS
SSgpKTsKKwogICAgICAgICAgICAgaWYgKG1fYXhpcyA9PSBBdHRyaWJ1dGVBeGlzKSB7CiAgICAg
ICAgICAgICAgICAgLy8gSW4gWFBhdGggbGFuZCwgbmFtZXNwYWNlIG5vZGVzIGFyZSBub3QgYWNj
ZXNzaWJsZQogICAgICAgICAgICAgICAgIC8vIG9uIHRoZSBhdHRyaWJ1dGUgYXhpcy4KICAgICAg
ICAgICAgICAgICBpZiAobmFtZSA9PSAieG1sbnMiKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2hlczsKLQotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
b2Rlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbm9k
ZXNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+bm9kZU5hbWUoKSA9PSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
YXRjaGVzLmFwcGVuZChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBU
aGVyZSBjYW4gb25seSBiZSBvbmUuCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaGVzOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBjaGVjayB0aGUg
bmFtZXNwYWNlIQorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5ub2RlTmFtZSgpID09IG5h
bWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fYXhpcyA9PSBOYW1lc3BhY2VBeGlzKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gTm9kZSB0ZXN0IG9uIHRoZSBuYW1lc3BhY2UgYXhpcyBpcyBub3Qg
aW1wbGVtZW50ZWQgeWV0CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9k
ZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVz
W2ldLmdldCgpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHVzZSB0YWdRTmFtZSBoZXJl
IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgZWxlbWVudCBuYW1lIGluIHVwcGVyY2FzZSAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gbGlrZSB3ZSBnZXQgd2l0aCBIVE1MIGVsZW1lbnRzLgotICAg
ICAgICAgICAgICAgICAgICAvLyBQYXRocyB3aXRob3V0IG5hbWVzcGFjZXMgc2hvdWxkIG1hdGNo
IEhUTUwgZWxlbWVudHMgaW4gSFRNTCBkb2N1bWVudHMgZGVzcGl0ZSB0aG9zZSBoYXZpbmcgYW4g
WEhUTUwgbmFtZXNwYWNlLgotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpFTEVNRU5UX05PREUKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKS0+dGFnUU5hbWUoKS5sb2NhbE5hbWUoKSA9PSBuYW1lCi0g
ICAgICAgICAgICAgICAgICAgICAgICAmJiAoKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBub2Rl
LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYmIG1fbmFtZXNwYWNlVVJJLmlzTnVsbCgp
KSB8fCBtX25hbWVzcGFjZVVSSSA9PSBub2RlLT5uYW1lc3BhY2VVUkkoKSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgICAgICAgICAvLyBXZSB1
c2UgdGFnUU5hbWUgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGVsZW1lbnQgbmFtZSBp
biB1cHBlcmNhc2UgCisgICAgICAgICAgICAgICAgLy8gbGlrZSB3ZSBnZXQgd2l0aCBIVE1MIGVs
ZW1lbnRzLgorICAgICAgICAgICAgICAgIC8vIFBhdGhzIHdpdGhvdXQgbmFtZXNwYWNlcyBzaG91
bGQgbWF0Y2ggSFRNTCBlbGVtZW50cyBpbiBIVE1MIGRvY3VtZW50cyBkZXNwaXRlIHRob3NlIGhh
dmluZyBhbiBYSFRNTCBuYW1lc3BhY2UuCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFCisgICAgICAgICAgICAgICAgICAgICAgICAm
JiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSktPnRhZ1FOYW1lKCkubG9jYWxOYW1l
KCkgPT0gbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChub2RlLT5pc0hUTUxFbGVt
ZW50KCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSAmJiBtX25hbWVzcGFj
ZVVSSS5pc051bGwoKSkgfHwgbV9uYW1lc3BhY2VVUkkgPT0gbm9kZS0+bmFtZXNwYWNlVVJJKCkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBOb2RlVmVjdG9yKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBO
b2RlOjpOb2RlVHlwZSBTdGVwOjpwcmltYXJ5Tm9kZVR5cGUoQXhpcyBheGlzKSBjb25zdApJbmRl
eDogV2ViQ29yZS94bWwvWFBhdGhTdGVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBh
dGhTdGVwLmgJKHJldmlzaW9uIDIwMTA5KQorKysgV2ViQ29yZS94bWwvWFBhdGhTdGVwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBwcml2YXRlOgogICAgICAgICAgICAgdm9pZCBwYXJzZU5vZGVUZXN0KGNvbnN0IFN0cmluZyYp
OwogICAgICAgICAgICAgTm9kZVZlY3RvciBub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0KSBjb25z
dDsKLSAgICAgICAgICAgIE5vZGVWZWN0b3Igbm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVWZWN0
b3ImIG5vZGVzKSBjb25zdDsKKyAgICAgICAgICAgIGJvb2wgbm9kZU1hdGNoZXMoY29uc3QgTm9k
ZSogbm9kZSkgY29uc3Q7CiAgICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlRnJvbU5vZGV0ZXN0
KGNvbnN0IFN0cmluZyYgbm9kZVRlc3QpIGNvbnN0OwogICAgICAgICAgICAgTm9kZTo6Tm9kZVR5
cGUgcHJpbWFyeU5vZGVUeXBlKEF4aXMpIGNvbnN0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13642</attachid>
            <date>2007-03-14 23:37:17 -0700</date>
            <delta_ts>2007-03-20 13:02:46 -0700</delta_ts>
            <desc>partial fix 2 v2</desc>
            <filename>13021_2v2.txt</filename>
            <type>text/plain</type>
            <size>14194</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDE1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMDctMDMtMTMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEEgcGFydGlhbCBmaXggZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMDIxCisgICAgICAgIFhQYXRoIGNhbiBiZSB2ZXJ5IHNsb3cKKworICAgICAgICAqIGRvbS9B
dHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OmNyZWF0ZVRleHRDaGlsZCk6IEluc3Rl
YWQgb2YgY2FsbGluZyBhcHBlbmRDaGlsZCgpLCBqdXN0IGRvIHRoZSBmZXcgb3BlcmF0aW9ucyBp
dCByZWFsbHkgbmVlZHMgdG8gcGVyZm9ybS4KKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6ZmFzdFNldEZpcnN0Q2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6ZmFzdFNldExhc3RDaGlsZCk6CisgICAg
ICAgIEFkZGVkIG9wZXJhdGlvbnMgdGhhdCBsZXQgQXR0ciBoYWNrIGludGVybmFsIENvbnRhaW5l
ck5vZGUgZGF0YSAoZXZpbCwgYnV0IGZhc3QhKS4KKworICAgICAgICAqIHhtbC9YUGF0aFN0ZXAu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6OmV2YWx1YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2Rlc0luQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6U3RlcDo6bm9kZU1hdGNoZXMpOgorICAgICAgICAqIHhtbC9YUGF0aFN0ZXAuaDoKKyAg
ICAgICAgTWVyZ2VkIG5vZGUgdGVzdGluZyBpbnRvIGF4aXMgZW51bWVyYXRpb24uIFRoaXMgc2F2
ZXMgYSBsb3Qgb2YgVmVjdG9yIHJlc2l6aW5nIGFuZCBwYXNzaW5nLCBhbmQgaXMgbmVjZXNzYXJ5
IGZvciBmdXR1cmUgCisgICAgICAgIG9wdGltaXphdGlvbnMgKHNvbWV0aW1lcywgd2UgY2FuIGp1
c3QgcGljayB0aGUgc2luZ2xlIHJlc3VsdCBub2RlIGluc3RlYWQgb2YgZW51bWVyYXRpbmcgYW5k
IGZpbHRlcmluZyB0aGUgd2hvbGUgYXhpcykuCisKIDIwMDctMDMtMTMgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyIGFuZCBK
b2huIFN1bGxpdmFuLgpJbmRleDogV2ViQ29yZS9kb20vQXR0ci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vQXR0ci5jcHAJKHJldmlzaW9uIDIwMTA5KQorKysgV2ViQ29yZS9kb20vQXR0
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSwxNCBAQCBBdHRyOjp+QXR0cigpCiAK
IHZvaWQgQXR0cjo6Y3JlYXRlVGV4dENoaWxkKCkKIHsKLSAgICBhc3NlcnQocmVmQ291bnQoKSk7
CisgICAgQVNTRVJUKHJlZkNvdW50KCkpOwogICAgIGlmICghbV9hdHRyaWJ1dGUtPnZhbHVlKCku
aXNFbXB0eSgpKSB7Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBtX2ln
bm9yZUNoaWxkcmVuQ2hhbmdlZCsrOwotICAgICAgICBhcHBlbmRDaGlsZChkb2N1bWVudCgpLT5j
cmVhdGVUZXh0Tm9kZShtX2F0dHJpYnV0ZS0+dmFsdWUoKS5pbXBsKCkpLCBlYyk7Ci0gICAgICAg
IG1faWdub3JlQ2hpbGRyZW5DaGFuZ2VkLS07CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9k
ZSA9IGRvY3VtZW50KCktPmNyZWF0ZVRleHROb2RlKG1fYXR0cmlidXRlLT52YWx1ZSgpLmltcGwo
KSk7CisKKyAgICAgICAgLy8gVGhpcyBkb2VzIGV2ZXJ5dGhpbmcgYXBwZW5kQ2hpbGQoKSB3b3Vs
ZCBkbyBpbiB0aGlzIHNpdHVhdGlvbiwgYnV0IG11Y2ggbW9yZSBlZmZpY2llbnRseS4KKyAgICAg
ICAgdGV4dE5vZGUtPnNldFBhcmVudCh0aGlzKTsKKyAgICAgICAgZmFzdFNldEZpcnN0Q2hpbGQo
dGV4dE5vZGUuZ2V0KCkpOworICAgICAgICBmYXN0U2V0TGFzdENoaWxkKHRleHROb2RlLmdldCgp
KTsKICAgICB9CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDIwMTA5KQorKysg
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3
IEBAIHB1YmxpYzoKIAogICAgIE5vZGUqIGZhc3RGaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4g
bV9maXJzdENoaWxkOyB9CiAgICAgTm9kZSogZmFzdExhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGFzdENoaWxkOyB9Ci0gICAgCisKICAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CiAg
ICAgdm9pZCByZW1vdmVDaGlsZHJlbigpOwogICAgIHZvaWQgY2xvbmVDaGlsZE5vZGVzKE5vZGUq
IGNsb25lKTsKQEAgLTczLDYgKzczLDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyB2b2lkIHF1ZXVlUG9zdEF0dGFjaENhbGxiYWNrKE5vZGVDYWxsYmFjaywgTm9kZSopOwogCisg
ICAgdm9pZCBmYXN0U2V0Rmlyc3RDaGlsZChOb2RlKiBjaGlsZCkgeyBtX2ZpcnN0Q2hpbGQgPSBj
aGlsZDsgfQorICAgIHZvaWQgZmFzdFNldExhc3RDaGlsZChOb2RlKiBjaGlsZCkgeyBtX2xhc3RD
aGlsZCA9IGNoaWxkOyB9CisgICAgCiBwcml2YXRlOgogICAgIE5vZGUqIG1fZmlyc3RDaGlsZDsK
ICAgICBOb2RlKiBtX2xhc3RDaGlsZDsKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAkocmV2aXNpb24gMjAxMTAp
CisrKyBXZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2
MSw2IEBAIFN0ZXA6On5TdGVwKCkKIE5vZGVWZWN0b3IgU3RlcDo6ZXZhbHVhdGUoTm9kZSogY29u
dGV4dCkgY29uc3QKIHsKICAgICBOb2RlVmVjdG9yIG5vZGVzID0gbm9kZXNJbkF4aXMoY29udGV4
dCk7Ci0gICAgbm9kZXMgPSBub2RlVGVzdE1hdGNoZXMobm9kZXMpOwogICAgIAogICAgIEV2YWx1
YXRpb25Db250ZXh0JiBldmFsdWF0aW9uQ29udGV4dCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25D
b250ZXh0KCk7CiAgICAgCkBAIC05NCwxNzQgKzkzLDE0OSBAQCBOb2RlVmVjdG9yIFN0ZXA6Om5v
ZGVzSW5BeGlzKE5vZGUqIGNvbnRlCiAgICAgc3dpdGNoIChtX2F4aXMpIHsKICAgICAgICAgY2Fz
ZSBDaGlsZEF4aXM6CiAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5maXJzdENo
aWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgICAgIG5vZGVzLmFw
cGVuZChuKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAg
ICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIHJldHVybiBub2RlczsKICAg
ICAgICAgY2FzZSBEZXNjZW5kYW50QXhpczogCiAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBj
b250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGNvbnRleHQp
KQotICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAg
ICAgICAgICAgIHJldHVybiBub2RlczsKICAgICAgICAgY2FzZSBQYXJlbnRBeGlzOiB7CiAgICAg
ICAgICAgICBOb2RlKiBwYXJlbnQgPSBjb250ZXh0LT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAg
ICBpZiAocGFyZW50KQorICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBub2RlTWF0Y2hlcyhwYXJl
bnQpKQogICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChwYXJlbnQpOwogICAgICAgICAgICAg
cmV0dXJuIG5vZGVzOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQW5jZXN0b3JBeGlzOgogICAg
ICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+cGFyZW50Tm9kZSgpOyBuOyBuID0gbi0+
cGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFw
cGVuZChuKTsKICAgICAgICAgICAgIHJldHVybiBub2RlczsKICAgICAgICAgY2FzZSBGb2xsb3dp
bmdTaWJsaW5nQXhpczoKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpID09IE5v
ZGU6OkFUVFJJQlVURV9OT0RFIHx8CiAgICAgICAgICAgICAgICAgIGNvbnRleHQtPm5vZGVUeXBl
KCkgPT0gTm9kZTo6WFBBVEhfTkFNRVNQQUNFX05PREUpIAotICAgICAgICAgICAgICAgIHJldHVy
biBOb2RlVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5uZXh0U2libGluZygpOyBu
OyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgICAg
ICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAgICAgIGNh
c2UgUHJlY2VkaW5nU2libGluZ0F4aXM6CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9ERSB8fAogICAgICAgICAgICAgICAgICBjb250ZXh0
LT5ub2RlVHlwZSgpID09IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFKQotICAgICAgICAgICAg
ICAgIHJldHVybiBOb2RlVmVjdG9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5wcmV2aW91
c1NpYmxpbmcoKTsgbjsgbiA9IG4tPnByZXZpb3VzU2libGluZygpKQotICAgICAgICAgICAgICAg
IG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisg
ICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIHJldHVybiBu
b2RlczsKICAgICAgICAgY2FzZSBGb2xsb3dpbmdBeGlzOiAKICAgICAgICAgICAgIGZvciAoTm9k
ZSAqcCA9IGNvbnRleHQ7ICFpc1Jvb3REb21Ob2RlKHApOyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7
CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gcC0+bmV4dFNpYmxpbmcoKTsgbjsgbiA9
IG4tPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4p
OworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAg
ICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoTm9k
ZSogYyA9IG4tPmZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUobikpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZU1hdGNoZXMoYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKGMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBub2RlczsKICAgICAgICAgY2FzZSBQcmVjZWRpbmdBeGlzOgogICAgICAg
ICAgICAgZm9yIChOb2RlKiBwID0gY29udGV4dDsgIWlzUm9vdERvbU5vZGUocCk7IHAgPSBwLT5w
YXJlbnROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBwLT5wcmV2aW91
c1NpYmxpbmcoKTsgbiA7IG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICAgICAg
ICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0
Y2hlcyhuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBjID0gbi0+Zmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+
dHJhdmVyc2VOZXh0Tm9kZShuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVu
ZChjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhjKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoYyk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwogICAgICAgICBjYXNl
IEF0dHJpYnV0ZUF4aXM6IHsKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpICE9
IE5vZGU6OkVMRU1FTlRfTk9ERSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9kZVZlY3Rvcigp
OworICAgICAgICAgICAgICAgIHJldHVybiBub2RlczsKIAogICAgICAgICAgICAgTmFtZWRBdHRy
TWFwKiBhdHRycyA9IGNvbnRleHQtPmF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgIGlmICghYXR0
cnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwogCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSkgCi0gICAgICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kIChhdHRycy0+aXRlbShpKSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIFJlZlB0cjxOb2RlPiBhdHRyID0gYXR0cnMtPml0ZW0oaSk7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGVNYXRjaGVzKGF0dHIuZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBub2Rl
cy5hcHBlbmQoYXR0cik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbm9kZXM7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBOYW1lc3BhY2VBeGlzOgogICAgICAgICAgICAgLy8g
WFBhdGggbmFtZXNwYWNlIG5vZGVzIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LgotICAgICAgICAg
ICAgcmV0dXJuIE5vZGVWZWN0b3IoKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlczsKICAgICAg
ICAgY2FzZSBTZWxmQXhpczoKLSAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKKyAg
ICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhjb250ZXh0KSkKKyAgICAgICAgICAgICAgICBub2Rl
cy5hcHBlbmQoY29udGV4dCk7CiAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAgICAgIGNh
c2UgRGVzY2VuZGFudE9yU2VsZkF4aXM6Ci0gICAgICAgICAgICBub2Rlcy5hcHBlbmQoY29udGV4
dCk7CisgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMoY29udGV4dCkpCisgICAgICAgICAgICAg
ICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOwogICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29u
dGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShjb250ZXh0KSkK
LSAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAg
ICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAgICAgIGNhc2UgQW5jZXN0b3JPclNlbGZBeGlzOgot
ICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOworICAgICAgICAgICAgaWYgKG5vZGVN
YXRjaGVzKGNvbnRleHQpKQorICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsK
ICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQtPnBhcmVudE5vZGUoKTsgbjsgbiA9
IG4tPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgICAgICBub2Rl
cy5hcHBlbmQobik7CiAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAgfQogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBOb2RlVmVjdG9yKCk7CisgICAgcmV0dXJuIG5v
ZGVzOwogfQogCiAKLU5vZGVWZWN0b3IgU3RlcDo6bm9kZVRlc3RNYXRjaGVzKGNvbnN0IE5vZGVW
ZWN0b3ImIG5vZGVzKSBjb25zdAorYm9vbCBTdGVwOjpub2RlTWF0Y2hlcyhjb25zdCBOb2RlKiBu
b2RlKSBjb25zdAogewotICAgIE5vZGVWZWN0b3IgbWF0Y2hlczsKLQogICAgIHN3aXRjaCAobV9u
b2RlVGVzdC5raW5kKCkpIHsKICAgICAgICAgY2FzZSBOb2RlVGVzdDo6VGV4dE5vZGVUZXN0Ogot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVzW2ldLmdldCgpOwotICAgICAgICAg
ICAgICAgIGlmICgobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwgbm9kZS0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpKQotICAgICAgICAgICAgICAg
ICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBtYXRjaGVzOworICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6VEVYVF9OT0RFIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9O
T0RFOwogICAgICAgICBjYXNlIE5vZGVUZXN0OjpDb21tZW50Tm9kZVRlc3Q6Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKQotICAgICAgICAgICAgICAg
ICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBtYXRjaGVzOwotICAgICAgICBjYXNlIE5vZGVUZXN0OjpQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b25Ob2RlVGVzdDoKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5z
aXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rlc1tpXS5nZXQo
KTsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX25vZGVUZXN0LmRhdGEo
KTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNT
SU5HX0lOU1RSVUNUSU9OX05PREUgJiYgKG5hbWUuaXNFbXB0eSgpIHx8IG5vZGUtPm5vZGVOYW1l
KCkgPT0gbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2Rl
KTsKLSAgICAgICAgICAgIH0gICAgCi0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAg
ICAgICAgIHJldHVybiBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERTsKKyAg
ICAgICAgY2FzZSBOb2RlVGVzdDo6UHJvY2Vzc2luZ0luc3RydWN0aW9uTm9kZVRlc3Q6IHsKKyAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fbm9kZVRlc3QuZGF0YSgpOworICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVD
VElPTl9OT0RFICYmIChuYW1lLmlzRW1wdHkoKSB8fCBub2RlLT5ub2RlTmFtZSgpID09IG5hbWUp
OworICAgICAgICB9ICAgIAogICAgICAgICBjYXNlIE5vZGVUZXN0OjpFbGVtZW50Tm9kZVRlc3Q6
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAg
bWF0Y2hlcy5hcHBlbmQobm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
bWF0Y2hlczsKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5pc0VsZW1lbnROb2RlKCk7CiAgICAg
ICAgIGNhc2UgTm9kZVRlc3Q6OkFueU5vZGVUZXN0OgotICAgICAgICAgICAgcmV0dXJuIG5vZGVz
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgTm9kZVRlc3Q6Ok5hbWVU
ZXN0OiB7CiAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX25vZGVUZXN0LmRhdGEo
KTsKLSAgICAgICAgICAgIGlmIChuYW1lID09ICIqIikgewotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5ub2RlVHlwZSgpID09IHByaW1hcnlOb2RlVHlwZShtX2F4aXMpICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgICAobV9uYW1lc3BhY2VVUkkuaXNFbXB0eSgpIHx8IG1fbmFtZXNwYWNl
VVJJID09IG5vZGUtPm5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoZXMuYXBwZW5kKG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbWF0Y2hlczsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYW1lID09ICIq
IikKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+bm9kZVR5cGUoKSA9PSBwcmltYXJ5Tm9k
ZVR5cGUobV9heGlzKSAmJiAobV9uYW1lc3BhY2VVUkkuaXNFbXB0eSgpIHx8IG1fbmFtZXNwYWNl
VVJJID09IG5vZGUtPm5hbWVzcGFjZVVSSSgpKTsKKwogICAgICAgICAgICAgaWYgKG1fYXhpcyA9
PSBBdHRyaWJ1dGVBeGlzKSB7CiAgICAgICAgICAgICAgICAgLy8gSW4gWFBhdGggbGFuZCwgbmFt
ZXNwYWNlIG5vZGVzIGFyZSBub3QgYWNjZXNzaWJsZQogICAgICAgICAgICAgICAgIC8vIG9uIHRo
ZSBhdHRyaWJ1dGUgYXhpcy4KICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAieG1sbnMiKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKLQotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+bm9kZU5hbWUoKSA9PSBuYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOyAvLyBUaGVyZSBjYW4gb25seSBiZSBvbmUuCi0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBjaGVjayB0aGUgbmFtZXNwYWNlIQorICAgICAgICAgICAgICAgIHJldHVy
biBub2RlLT5ub2RlTmFtZSgpID09IG5hbWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fYXhp
cyA9PSBOYW1lc3BhY2VBeGlzKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm9kZSB0ZXN0IG9uIHRo
ZSBuYW1lc3BhY2UgYXhpcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG5vZGVzW2ldLmdldCgpOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vIFdlIHVzZSB0YWdRTmFtZSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgZWxlbWVu
dCBuYW1lIGluIHVwcGVyY2FzZSAKLSAgICAgICAgICAgICAgICAgICAgLy8gbGlrZSB3ZSBnZXQg
d2l0aCBIVE1MIGVsZW1lbnRzLgotICAgICAgICAgICAgICAgICAgICAvLyBQYXRocyB3aXRob3V0
IG5hbWVzcGFjZXMgc2hvdWxkIG1hdGNoIEhUTUwgZWxlbWVudHMgaW4gSFRNTCBkb2N1bWVudHMg
ZGVzcGl0ZSB0aG9zZSBoYXZpbmcgYW4gWEhUTUwgbmFtZXNwYWNlLgotICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+dGFnUU5hbWUo
KS5sb2NhbE5hbWUoKSA9PSBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoKG5vZGUt
PmlzSFRNTEVsZW1lbnQoKSAmJiBub2RlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICYm
IG1fbmFtZXNwYWNlVVJJLmlzTnVsbCgpKSB8fCBtX25hbWVzcGFjZVVSSSA9PSBub2RlLT5uYW1l
c3BhY2VVUkkoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2Rl
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsK
KyAgICAgICAgICAgICAgICAvLyBXZSB1c2UgdGFnUU5hbWUgaGVyZSBiZWNhdXNlIHdlIGRvbid0
IHdhbnQgdGhlIGVsZW1lbnQgbmFtZSBpbiB1cHBlcmNhc2UgCisgICAgICAgICAgICAgICAgLy8g
bGlrZSB3ZSBnZXQgd2l0aCBIVE1MIGVsZW1lbnRzLgorICAgICAgICAgICAgICAgIC8vIFBhdGhz
IHdpdGhvdXQgbmFtZXNwYWNlcyBzaG91bGQgbWF0Y2ggSFRNTCBlbGVtZW50cyBpbiBIVE1MIGRv
Y3VtZW50cyBkZXNwaXRlIHRob3NlIGhhdmluZyBhbiBYSFRNTCBuYW1lc3BhY2UuCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFCisg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9k
ZSktPnRhZ1FOYW1lKCkubG9jYWxOYW1lKCkgPT0gbmFtZQorICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgKChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1M
RG9jdW1lbnQoKSAmJiBtX25hbWVzcGFjZVVSSS5pc051bGwoKSkgfHwgbV9uYW1lc3BhY2VVUkkg
PT0gbm9kZS0+bmFtZXNwYWNlVVJJKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBOb2RlVmVjdG9yKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBOb2RlOjpOb2RlVHlwZSBTdGVwOjpwcmltYXJ5Tm9kZVR5
cGUoQXhpcyBheGlzKSBjb25zdApJbmRleDogV2ViQ29yZS94bWwvWFBhdGhTdGVwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhTdGVwLmgJKHJldmlzaW9uIDIwMTA5KQorKysgV2Vi
Q29yZS94bWwvWFBhdGhTdGVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgdm9pZCBwYXJz
ZU5vZGVUZXN0KGNvbnN0IFN0cmluZyYpOwogICAgICAgICAgICAgTm9kZVZlY3RvciBub2Rlc0lu
QXhpcyhOb2RlKiBjb250ZXh0KSBjb25zdDsKLSAgICAgICAgICAgIE5vZGVWZWN0b3Igbm9kZVRl
c3RNYXRjaGVzKGNvbnN0IE5vZGVWZWN0b3ImIG5vZGVzKSBjb25zdDsKKyAgICAgICAgICAgIGJv
b2wgbm9kZU1hdGNoZXMoY29uc3QgTm9kZSogbm9kZSkgY29uc3Q7CiAgICAgICAgICAgICBTdHJp
bmcgbmFtZXNwYWNlRnJvbU5vZGV0ZXN0KGNvbnN0IFN0cmluZyYgbm9kZVRlc3QpIGNvbnN0Owog
ICAgICAgICAgICAgTm9kZTo6Tm9kZVR5cGUgcHJpbWFyeU5vZGVUeXBlKEF4aXMpIGNvbnN0Owog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13724</attachid>
            <date>2007-03-20 13:02:46 -0700</date>
            <delta_ts>2007-03-25 01:57:00 -0700</delta_ts>
            <desc>partial fix 2 v3</desc>
            <filename>13021_2v3.txt</filename>
            <type>text/plain</type>
            <size>16274</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDM0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDctMDMtMjAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEEgcGFydGlhbCBmaXggZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMDIxCisgICAgICAgIFhQYXRoIGNhbiBiZSB2ZXJ5IHNsb3cKKworICAgICAgICAqIHhtbC9Y
UGF0aEV4cHJlc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhFeHByZXNzaW9uOjpl
dmFsdWF0ZSk6IFJlc2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0IG5vZGUsIGFzIHRoaXMg
bWF5IHByZXZlbnQgdGhlIHdob2xlIGRvY3VtZW50CisgICAgICAgIGZyb20gYmVpbmcgZGVzdHJv
eWVkIGluIHRpbWUuCisKKyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdHRyOjpjcmVhdGVUZXh0Q2hpbGQpOiBJbnN0ZWFkIG9mIGNhbGxpbmcgYXBwZW5kQ2hpbGQo
KSwganVzdCBkbyB0aGUgZmV3IG9wZXJhdGlvbnMgaXQgcmVhbGx5IG5lZWRzIHRvIHBlcmZvcm0u
CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6OmZhc3RTZXRGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6OmZhc3RTZXRMYXN0Q2hpbGQpOgorICAgICAgICBBZGRlZCBvcGVyYXRpb25zIHRoYXQg
bGV0IEF0dHIgaGFjayBpbnRlcm5hbCBDb250YWluZXJOb2RlIGRhdGEgKGV2aWwsIGJ1dCBmYXN0
ISkuCisKKyAgICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpTdGVwOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6bm9k
ZXNJbkF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5vZGVNYXRjaGVzKToK
KyAgICAgICAgKiB4bWwvWFBhdGhTdGVwLmg6CisgICAgICAgIE1lcmdlZCBub2RlIHRlc3Rpbmcg
aW50byBheGlzIGVudW1lcmF0aW9uLiBUaGlzIHNhdmVzIGEgbG90IG9mIFZlY3RvciByZXNpemlu
ZyBhbmQgcGFzc2luZywgYW5kIGlzIG5lY2Vzc2FyeSBmb3IgZnV0dXJlIAorICAgICAgICBvcHRp
bWl6YXRpb25zIChzb21ldGltZXMsIHdlIGNhbiBqdXN0IHBpY2sgdGhlIHNpbmdsZSByZXN1bHQg
bm9kZSBpbnN0ZWFkIG9mIGVudW1lcmF0aW5nIGFuZCBmaWx0ZXJpbmcgdGhlIHdob2xlIGF4aXMp
LgorCiAyMDA3LTAzLTIwICBKdXN0aW4gR2FyY2lhICA8anVzdGluLmdhcmNpYUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgZGFyaW4KSW5kZXg6IFdlYkNvcmUvZG9tL0F0dHIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0F0dHIuY3BwCShyZXZpc2lvbiAyMDM0NCkKKysr
IFdlYkNvcmUvZG9tL0F0dHIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMiArNTEsMTQgQEAg
QXR0cjo6fkF0dHIoKQogCiB2b2lkIEF0dHI6OmNyZWF0ZVRleHRDaGlsZCgpCiB7Ci0gICAgYXNz
ZXJ0KHJlZkNvdW50KCkpOworICAgIEFTU0VSVChyZWZDb3VudCgpKTsKICAgICBpZiAoIW1fYXR0
cmlidXRlLT52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICAgICAgbV9pZ25vcmVDaGlsZHJlbkNoYW5nZWQrKzsKLSAgICAgICAgYXBwZW5kQ2hp
bGQoZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUobV9hdHRyaWJ1dGUtPnZhbHVlKCkuaW1wbCgp
KSwgZWMpOwotICAgICAgICBtX2lnbm9yZUNoaWxkcmVuQ2hhbmdlZC0tOworICAgICAgICBSZWZQ
dHI8VGV4dD4gdGV4dE5vZGUgPSBkb2N1bWVudCgpLT5jcmVhdGVUZXh0Tm9kZShtX2F0dHJpYnV0
ZS0+dmFsdWUoKS5pbXBsKCkpOworCisgICAgICAgIC8vIFRoaXMgZG9lcyBldmVyeXRoaW5nIGFw
cGVuZENoaWxkKCkgd291bGQgZG8gaW4gdGhpcyBzaXR1YXRpb24sIGJ1dCBtdWNoIG1vcmUgZWZm
aWNpZW50bHkuCisgICAgICAgIHRleHROb2RlLT5zZXRQYXJlbnQodGhpcyk7CisgICAgICAgIGZh
c3RTZXRGaXJzdENoaWxkKHRleHROb2RlLmdldCgpKTsKKyAgICAgICAgZmFzdFNldExhc3RDaGls
ZCh0ZXh0Tm9kZS5nZXQoKSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCShyZXZp
c2lvbiAyMDM0NCkKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICBOb2RlKiBmYXN0Rmlyc3RDaGlsZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQogICAgIE5vZGUqIGZhc3RMYXN0Q2hpbGQo
KSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQotICAgIAorCiAgICAgdm9pZCByZW1vdmVB
bGxDaGlsZHJlbigpOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW4oKTsKICAgICB2b2lkIGNsb25l
Q2hpbGROb2RlcyhOb2RlKiBjbG9uZSk7CkBAIC03Myw2ICs3Myw5IEBAIHB1YmxpYzoKIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgdm9pZCBxdWV1ZVBvc3RBdHRhY2hDYWxsYmFjayhOb2RlQ2FsbGJh
Y2ssIE5vZGUqKTsKIAorICAgIHZvaWQgZmFzdFNldEZpcnN0Q2hpbGQoTm9kZSogY2hpbGQpIHsg
bV9maXJzdENoaWxkID0gY2hpbGQ7IH0KKyAgICB2b2lkIGZhc3RTZXRMYXN0Q2hpbGQoTm9kZSog
Y2hpbGQpIHsgbV9sYXN0Q2hpbGQgPSBjaGlsZDsgfQorICAgIAogcHJpdmF0ZToKICAgICBOb2Rl
KiBtX2ZpcnN0Q2hpbGQ7CiAgICAgTm9kZSogbV9sYXN0Q2hpbGQ7CkluZGV4OiBXZWJDb3JlL3ht
bC9YUGF0aEV4cHJlc3Npb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoRXhw
cmVzc2lvbi5jcHAJKHJldmlzaW9uIDIwMzQ1KQorKysgV2ViQ29yZS94bWwvWFBhdGhFeHByZXNz
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBQYXNzUmVmUHRyPFhQYXRo
UmVzdWx0PiBYUGF0aEV4cHJlc3Npb246CiAgICAgZXZhbHVhdGlvbkNvbnRleHQuc2l6ZSA9IDE7
CiAgICAgZXZhbHVhdGlvbkNvbnRleHQucG9zaXRpb24gPSAxOwogICAgIFJlZlB0cjxYUGF0aFJl
c3VsdD4gcmVzdWx0ID0gbmV3IFhQYXRoUmVzdWx0KGV2ZW50VGFyZ2V0LCBtX3RvcEV4cHJlc3Np
b24tPmV2YWx1YXRlKCkpOworICAgIGV2YWx1YXRpb25Db250ZXh0Lm5vZGUgPSAwOyAvLyBEbyBu
b3QgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgY29udGV4dCBub2RlLCBhcyB0aGlzIG1heSBwcmV2
ZW50IHRoZSB3aG9sZSBkb2N1bWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZCBpbiB0aW1lLgogCiAg
ICAgaWYgKHR5cGUgIT0gWFBhdGhSZXN1bHQ6OkFOWV9UWVBFKSB7CiAgICAgICAgIGVjID0gMDsK
SW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94
bWwvWFBhdGhTdGVwLmNwcAkocmV2aXNpb24gMjAzNDUpCisrKyBXZWJDb3JlL3htbC9YUGF0aFN0
ZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw2IEBAIFN0ZXA6On5TdGVwKCkKIE5v
ZGVTZXQgU3RlcDo6ZXZhbHVhdGUoTm9kZSogY29udGV4dCkgY29uc3QKIHsKICAgICBOb2RlU2V0
IG5vZGVzID0gbm9kZXNJbkF4aXMoY29udGV4dCk7Ci0gICAgbm9kZXMgPSBub2RlVGVzdE1hdGNo
ZXMobm9kZXMpOwogICAgIAogICAgIEV2YWx1YXRpb25Db250ZXh0JiBldmFsdWF0aW9uQ29udGV4
dCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCk7CiAgICAgCkBAIC0xMDEsMzIgKzEw
MCwzOCBAQCBOb2RlU2V0IFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGVzOwogCiAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250
ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAg
ICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikp
CisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIHJldHVy
biBub2RlczsKICAgICAgICAgY2FzZSBEZXNjZW5kYW50QXhpczoKICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5pc0F0dHJpYnV0ZU5vZGUoKSkgLy8gSW4gWFBhdGggbW9kZWwsIGF0dHJpYnV0ZSBu
b2RlcyBkbyBub3QgaGF2ZSBjaGlsZHJlbi4KICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7
CiAKICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsgbjsg
biA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoY29udGV4dCkpCi0gICAgICAgICAgICAgICAgbm9kZXMu
YXBwZW5kKG4pOworICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwogICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwog
ICAgICAgICBjYXNlIFBhcmVudEF4aXM6Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRy
aWJ1dGVOb2RlKCkpCi0gICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKHN0YXRpY19jYXN0PEF0
dHIqPihjb250ZXh0KS0+b3duZXJFbGVtZW50KCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgTm9kZSogcGFyZW50ID0gY29udGV4dC0+cGFyZW50Tm9kZSgpOwotICAgICAg
ICAgICAgICAgIGlmIChwYXJlbnQpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChw
YXJlbnQpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0cmlidXRlTm9kZSgpKSB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogbiA9IHN0YXRpY19jYXN0PEF0dHIqPihjb250ZXh0KS0+b3du
ZXJFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAg
ICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG4gPSBjb250ZXh0LT5wYXJlbnROb2RlKCk7CisgICAgICAgICAg
ICAgICAgaWYgKG4gJiYgbm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgICAgIG5vZGVz
LmFwcGVuZChuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBub2RlczsKICAg
ICAgICAgY2FzZSBBbmNlc3RvckF4aXM6IHsKICAgICAgICAgICAgIE5vZGUqIG4gPSBjb250ZXh0
OwogICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0cmlidXRlTm9kZSgpKSB7CiAgICAgICAg
ICAgICAgICAgbiA9IHN0YXRpY19jYXN0PEF0dHIqPihjb250ZXh0KS0+b3duZXJFbGVtZW50KCk7
Ci0gICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgIGlmIChu
b2RlTWF0Y2hlcyhuKSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChuID0gbi0+cGFyZW50Tm9kZSgpOyBuOyBuID0g
bi0+cGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgICAgIG5vZGVz
LmFwcGVuZChuKTsKICAgICAgICAgICAgIG5vZGVzLnJldmVyc2UoKTsKICAgICAgICAgICAgIHJl
dHVybiBub2RlczsKICAgICAgICAgfQpAQCAtMTM2LDcgKzE0MSw4IEBAIE5vZGVTZXQgU3RlcDo6
bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQtPm5leHRT
aWJsaW5nKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgICAgIG5vZGVz
LmFwcGVuZChuKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAg
ICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIHJldHVybiBub2RlczsK
ICAgICAgICAgY2FzZSBQcmVjZWRpbmdTaWJsaW5nQXhpczoKICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8CkBAIC0xNDQsNyArMTUw
LDggQEAgTm9kZVNldCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0KQogICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlczsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChOb2Rl
KiBuID0gY29udGV4dC0+cHJldmlvdXNTaWJsaW5nKCk7IG47IG4gPSBuLT5wcmV2aW91c1NpYmxp
bmcoKSkKLSAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7
CiAKICAgICAgICAgICAgIG5vZGVzLnJldmVyc2UoKTsKICAgICAgICAgICAgIHJldHVybiBub2Rl
czsKQEAgLTE1MiwxMyArMTU5LDE2IEBAIE5vZGVTZXQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSog
Y29udGV4dCkKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5pc0F0dHJpYnV0ZU5vZGUoKSkgewog
ICAgICAgICAgICAgICAgIE5vZGUqIHAgPSBzdGF0aWNfY2FzdDxBdHRyKj4oY29udGV4dCktPm93
bmVyRWxlbWVudCgpOwogICAgICAgICAgICAgICAgIHdoaWxlICgocCA9IHAtPnRyYXZlcnNlTmV4
dE5vZGUoKSkpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChwKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKHApKQorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKHApOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBm
b3IgKE5vZGUqIHAgPSBjb250ZXh0OyAhaXNSb290RG9tTm9kZShwKTsgcCA9IHAtPnBhcmVudE5v
ZGUoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBwLT5uZXh0U2libGlu
ZygpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVz
KG4pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYyA9IG4tPmZpcnN0Q2hpbGQoKTsgYzsgYyA9
IGMtPnRyYXZlcnNlTmV4dE5vZGUobikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZXMuYXBwZW5kKGMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hl
cyhjKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGMpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpA
QCAtMTY5LDkgKzE3OSwxMSBAQCBOb2RlU2V0IFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRl
eHQpCiAKICAgICAgICAgICAgIGZvciAoTm9kZSogcCA9IGNvbnRleHQ7ICFpc1Jvb3REb21Ob2Rl
KHApOyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBu
ID0gcC0+cHJldmlvdXNTaWJsaW5nKCk7IG4gOyBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZU1hdGNoZXMobikpCisgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBl
bmQobik7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYyA9IG4tPmZpcnN0Q2hpbGQo
KTsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUobikpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBub2Rlcy5hcHBlbmQoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNo
ZXMoYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGMpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vZGVzLm1hcmtTb3J0
ZWQoZmFsc2UpOwpAQCAtMTg0LDMzICsxOTYsNDIgQEAgTm9kZVNldCBTdGVwOjpub2Rlc0luQXhp
cyhOb2RlKiBjb250ZXh0KQogICAgICAgICAgICAgaWYgKCFhdHRycykKICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZXM7CiAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsg
aSA8IGF0dHJzLT5sZW5ndGgoKTsgKytpKSAKLSAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQo
YXR0cnMtPml0ZW0oaSkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBp
IDwgYXR0cnMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4g
biA9IGF0dHJzLT5pdGVtKGkpOworICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuLmdl
dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTmFt
ZXNwYWNlQXhpczoKICAgICAgICAgICAgIC8vIFhQYXRoIG5hbWVzcGFjZSBub2RlcyBhcmUgbm90
IGltcGxlbWVudGVkIHlldC4KICAgICAgICAgICAgIHJldHVybiBub2RlczsKICAgICAgICAgY2Fz
ZSBTZWxmQXhpczoKLSAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKKyAgICAgICAg
ICAgIGlmIChub2RlTWF0Y2hlcyhjb250ZXh0KSkKKyAgICAgICAgICAgICAgICBub2Rlcy5hcHBl
bmQoY29udGV4dCk7CiAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAgICAgIGNhc2UgRGVz
Y2VuZGFudE9yU2VsZkF4aXM6Ci0gICAgICAgICAgICBub2Rlcy5hcHBlbmQoY29udGV4dCk7Cisg
ICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMoY29udGV4dCkpCisgICAgICAgICAgICAgICAgbm9k
ZXMuYXBwZW5kKGNvbnRleHQpOwogICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0cmlidXRl
Tm9kZSgpKSAvLyBJbiBYUGF0aCBtb2RlbCwgYXR0cmlidXRlIG5vZGVzIGRvIG5vdCBoYXZlIGNo
aWxkcmVuLgogICAgICAgICAgICAgICAgIHJldHVybiBub2RlczsKIAogICAgICAgICAgICAgZm9y
IChOb2RlKiBuID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0
Tm9kZShjb250ZXh0KSkKKyAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkKICAgICAgICAg
ICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICByZXR1cm4gbm9kZXM7CiAgICAg
ICAgIGNhc2UgQW5jZXN0b3JPclNlbGZBeGlzOiB7Ci0gICAgICAgICAgICBub2Rlcy5hcHBlbmQo
Y29udGV4dCk7CisgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMoY29udGV4dCkpCisgICAgICAg
ICAgICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOwogICAgICAgICAgICAgTm9kZSogbiA9IGNv
bnRleHQ7CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICBuID0gc3RhdGljX2Nhc3Q8QXR0cio+KGNvbnRleHQpLT5vd25lckVsZW1l
bnQoKTsKLSAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGVNYXRjaGVzKG4pKQorICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKG4gPSBuLT5wYXJlbnROb2RlKCk7IG47
IG4gPSBuLT5wYXJlbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwor
ICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkKKyAgICAgICAgICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKG4pOwogCiAgICAgICAgICAgICBub2Rlcy5yZXZlcnNlKCk7CiAgICAgICAg
ICAgICByZXR1cm4gbm9kZXM7CkBAIC0yMjEsOTIgKzI0Miw0NyBAQCBOb2RlU2V0IFN0ZXA6Om5v
ZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQpCiB9CiAKIAotTm9kZVNldCBTdGVwOjpub2RlVGVzdE1h
dGNoZXMoY29uc3QgTm9kZVNldCYgbm9kZXMpIGNvbnN0Citib29sIFN0ZXA6Om5vZGVNYXRjaGVz
KE5vZGUqIG5vZGUpIGNvbnN0CiB7Ci0gICAgTm9kZVNldCBtYXRjaGVzOwotICAgIGlmICghbm9k
ZXMuaXNTb3J0ZWQoKSkKLSAgICAgICAgbWF0Y2hlcy5tYXJrU29ydGVkKGZhbHNlKTsKLQogICAg
IHN3aXRjaCAobV9ub2RlVGVzdC5raW5kKCkpIHsKICAgICAgICAgY2FzZSBOb2RlVGVzdDo6VGV4
dE5vZGVUZXN0OgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVzW2ldOwotICAg
ICAgICAgICAgICAgIGlmICgobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwg
bm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpKQotICAgICAgICAg
ICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBtYXRjaGVzOworICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6VEVYVF9OT0RFIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VD
VElPTl9OT0RFOwogICAgICAgICBjYXNlIE5vZGVUZXN0OjpDb21tZW50Tm9kZVRlc3Q6Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbm9kZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKQotICAgICAgICAgICAgICAg
ICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiBtYXRjaGVzOwotICAgICAgICBjYXNlIE5vZGVUZXN0OjpQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b25Ob2RlVGVzdDoKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5z
aXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rlc1tpXTsKLSAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBtX25vZGVUZXN0LmRhdGEoKTsKLSAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lO
U1RSVUNUSU9OX05PREUgJiYgKG5hbWUuaXNFbXB0eSgpIHx8IG5vZGUtPm5vZGVOYW1lKCkgPT0g
bmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChub2RlKTsKLSAg
ICAgICAgICAgIH0gICAgCi0gICAgICAgICAgICByZXR1cm4gbWF0Y2hlczsKKyAgICAgICAgICAg
IHJldHVybiBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERTsKKyAgICAgICAg
Y2FzZSBOb2RlVGVzdDo6UHJvY2Vzc2luZ0luc3RydWN0aW9uTm9kZVRlc3Q6IHsKKyAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fbm9kZVRlc3QuZGF0YSgpOworICAgICAgICAgICAg
cmV0dXJuIG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9O
T0RFICYmIChuYW1lLmlzRW1wdHkoKSB8fCBub2RlLT5ub2RlTmFtZSgpID09IG5hbWUpOworICAg
ICAgICB9CiAgICAgICAgIGNhc2UgTm9kZVRlc3Q6OkVsZW1lbnROb2RlVGVzdDoKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy5zaXplKCk7IGkrKykgewotICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rlc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChu
b2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPmlzRWxlbWVudE5vZGUoKTsKICAgICAgICAgY2FzZSBOb2RlVGVz
dDo6QW55Tm9kZVRlc3Q6Ci0gICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBOb2RlVGVzdDo6TmFtZVRlc3Q6IHsKICAgICAgICAg
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IG1fbm9kZVRlc3QuZGF0YSgpOwotICAgICAgICAgICAg
aWYgKG5hbWUgPT0gIioiKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG5vZGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBub2Rlc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0g
cHJpbWFyeU5vZGVUeXBlKG1fYXhpcykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIChtX25h
bWVzcGFjZVVSSS5pc0VtcHR5KCkgfHwgbV9uYW1lc3BhY2VVUkkgPT0gbm9kZS0+bmFtZXNwYWNl
VVJJKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG5hbWUgPT0gIioiKQorICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlLT5ub2RlVHlwZSgpID09IHByaW1hcnlOb2RlVHlwZShtX2F4aXMpICYmIChtX25h
bWVzcGFjZVVSSS5pc0VtcHR5KCkgfHwgbV9uYW1lc3BhY2VVUkkgPT0gbm9kZS0+bmFtZXNwYWNl
VVJJKCkpOworCiAgICAgICAgICAgICBpZiAobV9heGlzID09IEF0dHJpYnV0ZUF4aXMpIHsKLSAg
ICAgICAgICAgICAgICAvLyBJbiBYUGF0aCBsYW5kLCBuYW1lc3BhY2Ugbm9kZXMgYXJlIG5vdCBh
Y2Nlc3NpYmxlCi0gICAgICAgICAgICAgICAgLy8gb24gdGhlIGF0dHJpYnV0ZSBheGlzLgorICAg
ICAgICAgICAgICAgIC8vIEluIFhQYXRoIGxhbmQsIG5hbWVzcGFjZSBub2RlcyBhcmUgbm90IGFj
Y2Vzc2libGUgb24gdGhlIGF0dHJpYnV0ZSBheGlzLgogICAgICAgICAgICAgICAgIGlmIChuYW1l
ID09ICJ4bWxucyIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbm9kZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG5vZGVzW2ldOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm5vZGVOYW1lKCkgPT0gbmFtZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hlcy5hcHBlbmQobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsgLy8gVGhlcmUgY2FuIG9ubHkgYmUgb25lLgotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IGNoZWNrIHRoZSBuYW1lc3BhY2UhCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUtPm5vZGVOYW1lKCkgPT0gbmFtZTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9heGlzID09IE5hbWVzcGFjZUF4aXMpIHsKICAgICAgICAgICAgICAgICAvLyBOb2RlIHRl
c3Qgb24gdGhlIG5hbWVzcGFjZSBheGlzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5v
ZGVzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rl
c1tpXTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgdGFnUU5hbWUgaGVyZSBiZWNh
dXNlIHdlIGRvbid0IHdhbnQgdGhlIGVsZW1lbnQgbmFtZSBpbiB1cHBlcmNhc2UgCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGxpa2Ugd2UgZ2V0IHdpdGggSFRNTCBlbGVtZW50cy4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gUGF0aHMgd2l0aG91dCBuYW1lc3BhY2VzIHNob3VsZCBtYXRjaCBIVE1M
IGVsZW1lbnRzIGluIEhUTUwgZG9jdW1lbnRzIGRlc3BpdGUgdGhvc2UgaGF2aW5nIGFuIFhIVE1M
IG5hbWVzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RUxFTUVOVF9OT0RFCisgICAgICAgICAgICAgICAgLy8gV2UgdXNlIHRhZ1FOYW1lIGhl
cmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBlbGVtZW50IG5hbWUgaW4gdXBwZXJjYXNlIAor
ICAgICAgICAgICAgICAgIC8vIGxpa2Ugd2UgZ2V0IHdpdGggSFRNTCBlbGVtZW50cy4KKyAgICAg
ICAgICAgICAgICAvLyBQYXRocyB3aXRob3V0IG5hbWVzcGFjZXMgc2hvdWxkIG1hdGNoIEhUTUwg
ZWxlbWVudHMgaW4gSFRNTCBkb2N1bWVudHMgZGVzcGl0ZSB0aG9zZSBoYXZpbmcgYW4gWEhUTUwg
bmFtZXNwYWNlLgorICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5ub2RlVHlwZSgpID09IE5v
ZGU6OkVMRU1FTlRfTk9ERQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpLT50YWdRTmFtZSgpLmxvY2FsTmFtZSgpID09IG5hbWUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICYmICgobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIG5vZGUtPmRvY3Vt
ZW50KCktPmlzSFRNTERvY3VtZW50KCkgJiYgbV9uYW1lc3BhY2VVUkkuaXNOdWxsKCkpIHx8IG1f
bmFtZXNwYWNlVVJJID09IG5vZGUtPm5hbWVzcGFjZVVSSSgpKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoZXMuYXBwZW5kKG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChu
b2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQo
KSAmJiBtX25hbWVzcGFjZVVSSS5pc051bGwoKSkgfHwgbV9uYW1lc3BhY2VVUkkgPT0gbm9kZS0+
bmFtZXNwYWNlVVJJKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBtYXRjaGVzOworICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogTm9kZTo6Tm9kZVR5cGUgU3RlcDo6cHJpbWFyeU5vZGVUeXBlKEF4aXMgYXhpcykg
Y29uc3QKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoU3RlcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveG1sL1hQYXRoU3RlcC5oCShyZXZpc2lvbiAyMDM0NSkKKysrIFdlYkNvcmUveG1sL1hQYXRo
U3RlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIHZvaWQgcGFyc2VOb2RlVGVzdChjb25z
dCBTdHJpbmcmKTsKICAgICAgICAgICAgIE5vZGVTZXQgbm9kZXNJbkF4aXMoTm9kZSogY29udGV4
dCkgY29uc3Q7Ci0gICAgICAgICAgICBOb2RlU2V0IG5vZGVUZXN0TWF0Y2hlcyhjb25zdCBOb2Rl
U2V0JiBub2RlcykgY29uc3Q7CisgICAgICAgICAgICBib29sIG5vZGVNYXRjaGVzKE5vZGUqIG5v
ZGUpIGNvbnN0OwogICAgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZUZyb21Ob2RldGVzdChjb25z
dCBTdHJpbmcmIG5vZGVUZXN0KSBjb25zdDsKICAgICAgICAgICAgIE5vZGU6Ok5vZGVUeXBlIHBy
aW1hcnlOb2RlVHlwZShBeGlzKSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13814</attachid>
            <date>2007-03-25 08:41:49 -0700</date>
            <delta_ts>2007-03-30 12:56:39 -0700</delta_ts>
            <desc>partial fix 3</desc>
            <filename>13021_3.txt</filename>
            <type>text/plain</type>
            <size>18679</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDQ4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDctMDMtMjUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDIxCisgICAgICAgIFhQ
YXRoIGNhbiBiZSB2ZXJ5IHNsb3cKKworICAgICAgICBUaGlzIHBhdGNoIGZpbmFsbHkgbWFrZXMg
dXMgZmFzdGVyIHRoYW4gRmlyZWZveCAyLjAgb24gdGhpcyB0ZXN0IGNhc2UuCisKKyAgICAgICAg
KiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNv
bmNhdDo6ZXZhbHVhdGUpOiBVc2UgYSBWZWN0b3IgYnVmZmVyIGZvciBmYXN0ZXIgYXBwZW5kaW5n
LgorCisgICAgICAgICogeG1sL1hQYXRoVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRo
OjpWYWx1ZURhdGE6OlZhbHVlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6
OlZhbHVlKToKKyAgICAgICAgKiB4bWwvWFBhdGhWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6VmFsdWU6OnRvTm9kZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFs
dWU6Om1vZGlmaWFibGVOb2RlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6
dG9Cb29sZWFuKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6dG9OdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjp0b1N0cmluZyk6CisgICAgICAgIE1hZGUg
VmFsdWUgY29weWluZyBmYXN0ZXIgYnkgcHV0dGluZyBsYXJnZSBkYXRhIG1lbWJlcnMgaW50byBh
IHNlcGFyYXRlIHJlZmNvdW50ZWQgVmFsdWVEYXRhIGNsYXNzLgorICAgICAgICBBZGRlZCBwcm92
aXNpb25zIGZvciBtb3ZpbmcgYSBOb2RlU2V0IGluIGFuZCBvdXQgb2YgVmFsdWUgd2l0aG91dCBj
b3B5aW5nLgorCisgICAgICAgICogeG1sL1hQYXRoUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6RmlsdGVyOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TG9j
YXRpb25QYXRoOjpldmFsdWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6UGF0aDo6ZXZh
bHVhdGUpOgorICAgICAgICAqIHhtbC9YUGF0aFBhdGguaDoKKyAgICAgICAgKiB4bWwvWFBhdGhQ
cmVkaWNhdGUuaDoKKyAgICAgICAgKiB4bWwvWFBhdGhSZXN1bHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGhSZXN1bHQ6OnNuYXBzaG90SXRlbSk6CisgICAgICAgICogeG1sL1hQYXRoU3Rl
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6U3RlcDo6ZXZhbHVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5vZGVzSW5BeGlzKToKKyAgICAgICAgKiB4bWwvWFBh
dGhTdGVwLmg6CisgICAgICAgIEdvdCByaWQgb2YgdW5uZWNlc3NhcnkgTm9kZVNldCBjb3B5aW5n
IGluIG1hbnkgY2FzZXMuCisKIDIwMDctMDMtMjUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogV2ViQ29yZS94
bWwvWFBhdGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoRnVu
Y3Rpb25zLmNwcAkocmV2aXNpb24gMjA0ODYpCisrKyBXZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NiwxMiArMzg2LDE1IEBAIFZhbHVlIEZ1blN0cmlu
Zzo6ZXZhbHVhdGUoKSBjb25zdAogCiBWYWx1ZSBGdW5Db25jYXQ6OmV2YWx1YXRlKCkgY29uc3QK
IHsKLSAgICBTdHJpbmcgc3RyID0gIiI7CisgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiByZXN1bHQ7
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQotICAgICAg
ICBzdHIgKz0gYXJnKGkpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCk7CisgICAgdW5zaWduZWQgY291
bnQgPSBhcmdDb3VudCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgIFN0cmluZyBzdHIoYXJnKGkpLT5ldmFsdWF0ZSgpLnRvU3RyaW5nKCkpOwor
ICAgICAgICByZXN1bHQuYXBwZW5kKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSk7Cisg
ICAgfQogCi0gICAgcmV0dXJuIHN0cjsKKyAgICByZXR1cm4gU3RyaW5nKHJlc3VsdC5kYXRhKCks
IHJlc3VsdC5zaXplKCkpOwogfQogCiBWYWx1ZSBGdW5TdGFydHNXaXRoOjpldmFsdWF0ZSgpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUveG1sL1hQYXRoUGF0aC5jcHAJKHJldmlzaW9uIDIwNDg2KQorKysgV2ViQ29yZS94bWwvWFBh
dGhQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBWYWx1ZSBGaWx0ZXI6
OmV2YWx1YXRlKCkgY29uc3QKICAgICBpZiAoIXYuaXNOb2RlU2V0KCkpIAogICAgICAgICByZXR1
cm4gdjsKIAotICAgIE5vZGVTZXQgbm9kZXMgPSB2LnRvTm9kZVNldCgpOworICAgIE5vZGVTZXQm
IG5vZGVzID0gdi5tb2RpZmlhYmxlTm9kZVNldCgpOwogICAgIG5vZGVzLnNvcnQoKTsKIAogICAg
IEV2YWx1YXRpb25Db250ZXh0JiBldmFsdWF0aW9uQ29udGV4dCA9IEV4cHJlc3Npb246OmV2YWx1
YXRpb25Db250ZXh0KCk7CkBAIC03Nyw3ICs3Nyw3IEBAIFZhbHVlIEZpbHRlcjo6ZXZhbHVhdGUo
KSBjb25zdAogICAgICAgICBub2Rlcy5zd2FwKG5ld05vZGVzKTsKICAgICB9CiAKLSAgICByZXR1
cm4gbm9kZXM7CisgICAgcmV0dXJuIHY7CiB9CiAKIExvY2F0aW9uUGF0aDo6TG9jYXRpb25QYXRo
KCkKQEAgLTk5LDIzICs5OSwyMyBAQCBWYWx1ZSBMb2NhdGlvblBhdGg6OmV2YWx1YXRlKCkgY29u
c3QKICAgICBpZiAobV9hYnNvbHV0ZSAmJiBjb250ZXh0LT5ub2RlVHlwZSgpICE9IE5vZGU6OkRP
Q1VNRU5UX05PREUpIAogICAgICAgICBjb250ZXh0ID0gY29udGV4dC0+b3duZXJEb2N1bWVudCgp
OwogCi0gICAgTm9kZVNldCBzdGFydE5vZGVzOwotICAgIHN0YXJ0Tm9kZXMuYXBwZW5kKGNvbnRl
eHQpOworICAgIE5vZGVTZXQgbm9kZXM7CisgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOworICAg
IGV2YWx1YXRlKG5vZGVzKTsKICAgICAKLSAgICByZXR1cm4gZXZhbHVhdGUoc3RhcnROb2Rlcyk7
CisgICAgcmV0dXJuIG5vZGVzOwogfQogCi1WYWx1ZSBMb2NhdGlvblBhdGg6OmV2YWx1YXRlKGNv
bnN0IE5vZGVTZXQmIHN0YXJ0Tm9kZXMpIGNvbnN0Cit2b2lkIExvY2F0aW9uUGF0aDo6ZXZhbHVh
dGUoTm9kZVNldCYgbm9kZXMpIGNvbnN0CiB7Ci0gICAgTm9kZVNldCBub2RlcyA9IHN0YXJ0Tm9k
ZXM7Ci0gICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RlcHMuc2l6ZSgpOyBp
KyspIHsKICAgICAgICAgU3RlcCogc3RlcCA9IG1fc3RlcHNbaV07CiAgICAgICAgIE5vZGVTZXQg
bmV3Tm9kZXM7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IG5ld05vZGVzU2V0OwogCiAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBub2Rlcy5zaXplKCk7IGorKykgewotICAgICAgICAg
ICAgTm9kZVNldCBtYXRjaGVzID0gc3RlcC0+ZXZhbHVhdGUobm9kZXNbal0pOworICAgICAgICAg
ICAgTm9kZVNldCBtYXRjaGVzOworICAgICAgICAgICAgc3RlcC0+ZXZhbHVhdGUobm9kZXNbal0s
IG1hdGNoZXMpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBub2RlSW5k
ZXggPSAwOyBub2RlSW5kZXggPCBtYXRjaGVzLnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gbWF0Y2hlc1tub2RlSW5kZXhdOwpAQCAtMTI4LDcgKzEy
OCw2IEBAIFZhbHVlIExvY2F0aW9uUGF0aDo6ZXZhbHVhdGUoY29uc3QgTm9kZVMKICAgICB9CiAK
ICAgICBub2Rlcy5tYXJrU29ydGVkKGZhbHNlKTsKLSAgICByZXR1cm4gbm9kZXM7CiB9CiAKIHZv
aWQgTG9jYXRpb25QYXRoOjpvcHRpbWl6ZVN0ZXBQYWlyKHVuc2lnbmVkIGluZGV4KQpAQCAtMTg1
LDcgKzE4NCwxMiBAQCBQYXRoOjp+UGF0aCgpCiAKIFZhbHVlIFBhdGg6OmV2YWx1YXRlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9wYXRoLT5ldmFsdWF0ZShtX2ZpbHRlci0+ZXZhbHVhdGUoKS50
b05vZGVTZXQoKSk7CisgICAgVmFsdWUgdiA9IG1fZmlsdGVyLT5ldmFsdWF0ZSgpOworCisgICAg
Tm9kZVNldCYgbm9kZXMgPSB2Lm1vZGlmaWFibGVOb2RlU2V0KCk7CisgICAgbV9wYXRoLT5ldmFs
dWF0ZShub2Rlcyk7CisgICAgCisgICAgcmV0dXJuIHY7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUv
eG1sL1hQYXRoUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoUGF0aC5oCShy
ZXZpc2lvbiAyMDQ4NikKKysrIFdlYkNvcmUveG1sL1hQYXRoUGF0aC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHZvaWQg
c2V0QWJzb2x1dGUoYm9vbCB2YWx1ZSkgeyBtX2Fic29sdXRlID0gdmFsdWU7IH0KIAogICAgICAg
ICAgICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZSgpIGNvbnN0OwotICAgICAgICAgICAgVmFsdWUg
ZXZhbHVhdGUoY29uc3QgTm9kZVNldCYgc3RhcnROb2RlcykgY29uc3Q7CisgICAgICAgICAgICB2
b2lkIGV2YWx1YXRlKE5vZGVTZXQmIG5vZGVzKSBjb25zdDsgLy8gbm9kZXMgaXMgYW4gaW5wdXQv
b3V0cHV0IHBhcmFtZXRlcgogCiAgICAgICAgICAgICB2b2lkIGFwcGVuZFN0ZXAoU3RlcCogc3Rl
cCk7CiAgICAgICAgICAgICB2b2lkIGluc2VydEZpcnN0U3RlcChTdGVwKiBzdGVwKTsKSW5kZXg6
IFdlYkNvcmUveG1sL1hQYXRoUHJlZGljYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwv
WFBhdGhQcmVkaWNhdGUuaAkocmV2aXNpb24gMjA0ODYpCisrKyBXZWJDb3JlL3htbC9YUGF0aFBy
ZWRpY2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWYgRU5BQkxFKFhQ
QVRIKQogCiAjaW5jbHVkZSAiWFBhdGhFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgIlhQYXRo
VmFsdWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MCw3ICs0MSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIE51bWJlcihkb3VibGUpOwogICAgICAgICBwcml2
YXRlOgogICAgICAgICAgICAgdmlydHVhbCBWYWx1ZSBldmFsdWF0ZSgpIGNvbnN0OwotICAgICAg
ICAgICAgZG91YmxlIG1fdmFsdWU7CisgICAgICAgICAgICBWYWx1ZSBtX3ZhbHVlOwogICAgICAg
ICB9OwogCiAgICAgICAgIGNsYXNzIFN0cmluZ0V4cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lv
biB7CkBAIC00OCw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIFN0
cmluZ0V4cHJlc3Npb24oY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHByaXZhdGU6CiAgICAgICAg
ICAgICB2aXJ0dWFsIFZhbHVlIGV2YWx1YXRlKCkgY29uc3Q7Ci0gICAgICAgICAgICBTdHJpbmcg
bV92YWx1ZTsKKyAgICAgICAgICAgIFZhbHVlIG1fdmFsdWU7CiAgICAgICAgIH07CiAKICAgICAg
ICAgY2xhc3MgTmVnYXRpdmUgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CkluZGV4OiBXZWJDb3JlL3ht
bC9YUGF0aFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhSZXN1bHQu
Y3BwCShyZXZpc2lvbiAyMDQ4NikKKysrIFdlYkNvcmUveG1sL1hQYXRoUmVzdWx0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMwLDcgKzIzMCw3IEBAIE5vZGUqIFhQYXRoUmVzdWx0OjpzbmFwc2hv
dEl0ZW0odW5zaWduZWQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGVT
ZXQgbm9kZXMgPSBtX3ZhbHVlLnRvTm9kZVNldCgpOworICAgIGNvbnN0IE5vZGVTZXQmIG5vZGVz
ID0gbV92YWx1ZS50b05vZGVTZXQoKTsKICAgICBpZiAoaW5kZXggPj0gbm9kZXMuc2l6ZSgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICAKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAkocmV2aXNpb24gMjA0ODcp
CisrKyBXZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1
OSw5IEBAIFN0ZXA6On5TdGVwKCkKICAgICBkZWxldGVBbGxWYWx1ZXMobV9wcmVkaWNhdGVzKTsK
IH0KIAotTm9kZVNldCBTdGVwOjpldmFsdWF0ZShOb2RlKiBjb250ZXh0KSBjb25zdAordm9pZCBT
dGVwOjpldmFsdWF0ZShOb2RlKiBjb250ZXh0LCBOb2RlU2V0JiBub2RlcykgY29uc3QKIHsKLSAg
ICBOb2RlU2V0IG5vZGVzID0gbm9kZXNJbkF4aXMoY29udGV4dCk7CisgICAgbm9kZXNJbkF4aXMo
Y29udGV4dCwgbm9kZXMpOwogICAgIAogICAgIEV2YWx1YXRpb25Db250ZXh0JiBldmFsdWF0aW9u
Q29udGV4dCA9IEV4cHJlc3Npb246OmV2YWx1YXRpb25Db250ZXh0KCk7CiAgICAgCkBAIC04OCwy
OSArODgsMjggQEAgTm9kZVNldCBTdGVwOjpldmFsdWF0ZShOb2RlKiBjb250ZXh0KSBjbwogCiAg
ICAgICAgIG5vZGVzLnN3YXAobmV3Tm9kZXMpOwogICAgIH0KLSAgICByZXR1cm4gbm9kZXM7CiB9
CiAKLU5vZGVTZXQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCkgY29uc3QKK3ZvaWQg
U3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwgTm9kZVNldCYgbm9kZXMpIGNvbnN0CiB7
Ci0gICAgTm9kZVNldCBub2RlczsKKyAgICBBU1NFUlQobm9kZXMuaXNFbXB0eSgpKTsKICAgICBz
d2l0Y2ggKG1fYXhpcykgewogICAgICAgICBjYXNlIENoaWxkQXhpczoKICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5pc0F0dHJpYnV0ZU5vZGUoKSkgLy8gSW4gWFBhdGggbW9kZWwsIGF0dHJpYnV0
ZSBub2RlcyBkbyBub3QgaGF2ZSBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZXM7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBmb3IgKE5vZGUqIG4g
PSBjb250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKQogICAgICAg
ICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkKICAgICAgICAgICAgICAgICAgICAgbm9kZXMu
YXBwZW5kKG4pOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjYXNlIERlc2NlbmRhbnRBeGlzOgogICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmlzQXR0cmlidXRlTm9kZSgpKSAvLyBJbiBYUGF0aCBtb2RlbCwgYXR0cmlidXRlIG5vZGVzIGRv
IG5vdCBoYXZlIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQt
PmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoY29udGV4dCkpCiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQogICAgICAgICAgICAgICAgICAgICBub2Rl
cy5hcHBlbmQobik7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGNhc2UgUGFyZW50QXhpczoKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5p
c0F0dHJpYnV0ZU5vZGUoKSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBzdGF0aWNfY2Fz
dDxBdHRyKj4oY29udGV4dCktPm93bmVyRWxlbWVudCgpOwpAQCAtMTIxLDcgKzEyMCw3IEBAIE5v
ZGVTZXQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCkKICAgICAgICAgICAgICAgICBp
ZiAobiAmJiBub2RlTWF0Y2hlcyhuKSkKICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5k
KG4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBjYXNlIEFuY2VzdG9yQXhpczogewogICAgICAgICAgICAgTm9k
ZSogbiA9IGNvbnRleHQ7CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1dGVOb2Rl
KCkpIHsKQEAgLTEzMywyOCArMTMyLDI4IEBAIE5vZGVTZXQgU3RlcDo6bm9kZXNJbkF4aXMoTm9k
ZSogY29udGV4dCkKICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCiAgICAgICAg
ICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIG5vZGVzLnJldmVyc2Uo
KTsKLSAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEZvbGxvd2luZ1NpYmxpbmdBeGlzOgogICAgICAgICAgICAgaWYg
KGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUgfHwKICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpYUEFUSF9OQU1FU1BBQ0VfTk9E
RSkgCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+bmV4
dFNpYmxpbmcoKTsgbjsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICAgICAgaWYg
KG5vZGVNYXRjaGVzKG4pKQogICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7Ci0g
ICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNh
c2UgUHJlY2VkaW5nU2libGluZ0F4aXM6CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpBVFRSSUJVVEVfTk9ERSB8fAogICAgICAgICAgICAgICAgICBjb250ZXh0
LT5ub2RlVHlwZSgpID09IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFKQotICAgICAgICAgICAg
ICAgIHJldHVybiBub2RlczsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQtPnByZXZpb3VzU2libGluZygpOyBu
OyBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCkpCiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKG4pKQogICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAKICAgICAgICAg
ICAgIG5vZGVzLnJldmVyc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgY2FzZSBGb2xsb3dpbmdBeGlzOgogICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmlzQXR0cmlidXRlTm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogcCA9
IHN0YXRpY19jYXN0PEF0dHIqPihjb250ZXh0KS0+b3duZXJFbGVtZW50KCk7CkBAIC0xNzIsNyAr
MTcxLDcgQEAgTm9kZVNldCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0KQogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIFBy
ZWNlZGluZ0F4aXM6CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkp
CiAgICAgICAgICAgICAgICAgY29udGV4dCA9IHN0YXRpY19jYXN0PEF0dHIqPihjb250ZXh0KS0+
b3duZXJFbGVtZW50KCk7CkBAIC0xODcsMzkgKzE4NiwzOSBAQCBOb2RlU2V0IFN0ZXA6Om5vZGVz
SW5BeGlzKE5vZGUqIGNvbnRleHQpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbm9kZXMubWFya1NvcnRlZChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4g
bm9kZXM7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQXR0cmlidXRlQXhpczog
ewogICAgICAgICAgICAgaWYgKGNvbnRleHQtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9O
T0RFKQotICAgICAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgICAgIE5hbWVkQXR0ck1hcCogYXR0cnMgPSBjb250ZXh0LT5hdHRyaWJ1
dGVzKCk7CiAgICAgICAgICAgICBpZiAoIWF0dHJzKQotICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlczsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbG9uZyBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgUmVmUHRyPE5vZGU+IG4gPSBhdHRycy0+aXRlbShpKTsKICAgICAgICAgICAgICAgICBpZiAo
bm9kZU1hdGNoZXMobi5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChu
LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbm9kZXM7Cisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBOYW1lc3BhY2VBeGlz
OgogICAgICAgICAgICAgLy8gWFBhdGggbmFtZXNwYWNlIG5vZGVzIGFyZSBub3QgaW1wbGVtZW50
ZWQgeWV0LgotICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBjYXNlIFNlbGZBeGlzOgogICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKGNvbnRl
eHQpKQogICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKLSAgICAgICAgICAg
IHJldHVybiBub2RlczsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBEZXNjZW5k
YW50T3JTZWxmQXhpczoKICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhjb250ZXh0KSkKICAg
ICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoY29udGV4dCk7CiAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkpIC8vIEluIFhQYXRoIG1vZGVsLCBhdHRyaWJ1dGUgbm9k
ZXMgZG8gbm90IGhhdmUgY2hpbGRyZW4uCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29u
dGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShjb250ZXh0KSkK
ICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkKICAgICAgICAgICAgICAgICBub2Rlcy5h
cHBlbmQobik7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGNhc2UgQW5jZXN0b3JPclNlbGZBeGlzOiB7CiAgICAgICAgICAgICBpZiAobm9k
ZU1hdGNoZXMoY29udGV4dCkpCiAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQp
OwpAQCAtMjM0LDExICsyMzMsMTAgQEAgTm9kZVNldCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBj
b250ZXh0KQogICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAKICAgICAgICAg
ICAgIG5vZGVzLnJldmVyc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gbm9kZXM7CiB9CiAKIApJbmRleDogV2ViQ29yZS94bWwvWFBhdGhTdGVwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhTdGVwLmgJKHJldmlzaW9uIDIwNDg3KQor
KysgV2ViQ29yZS94bWwvWFBhdGhTdGVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgU3RlcChBeGlzLCBjb25zdCBOb2Rl
VGVzdCYgbm9kZVRlc3QsIGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBWZWN0b3I8
UHJlZGljYXRlKj4mIHByZWRpY2F0ZXMgPSBWZWN0b3I8UHJlZGljYXRlKj4oKSk7CiAgICAgICAg
ICAgICB+U3RlcCgpOwogCi0gICAgICAgICAgICBOb2RlU2V0IGV2YWx1YXRlKE5vZGUqIGNvbnRl
eHQpIGNvbnN0OworICAgICAgICAgICAgdm9pZCBldmFsdWF0ZShOb2RlKiBjb250ZXh0LCBOb2Rl
U2V0JikgY29uc3Q7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEF4aXMgYXhpcygpIGNvbnN0
IHsgcmV0dXJuIG1fYXhpczsgfQogICAgICAgICAgICAgTm9kZVRlc3Qgbm9kZVRlc3QoKSBjb25z
dCB7IHJldHVybiBtX25vZGVUZXN0OyB9CkBAIC04Niw3ICs4Niw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgdm9pZCBw
YXJzZU5vZGVUZXN0KGNvbnN0IFN0cmluZyYpOwotICAgICAgICAgICAgTm9kZVNldCBub2Rlc0lu
QXhpcyhOb2RlKiBjb250ZXh0KSBjb25zdDsKKyAgICAgICAgICAgIHZvaWQgbm9kZXNJbkF4aXMo
Tm9kZSogY29udGV4dCwgTm9kZVNldCYpIGNvbnN0OwogICAgICAgICAgICAgYm9vbCBub2RlTWF0
Y2hlcyhOb2RlKikgY29uc3Q7CiAgICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlRnJvbU5vZGV0
ZXN0KGNvbnN0IFN0cmluZyYgbm9kZVRlc3QpIGNvbnN0OwogICAgICAgICAgICAgTm9kZTo6Tm9k
ZVR5cGUgcHJpbWFyeU5vZGVUeXBlKEF4aXMpIGNvbnN0OwpJbmRleDogV2ViQ29yZS94bWwvWFBh
dGhWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhWYWx1ZS5jcHAJKHJl
dmlzaW9uIDIwNDg2KQorKysgV2ViQ29yZS94bWwvWFBhdGhWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDY4ICszOCwzNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQ
YXRoIHsKIAotVmFsdWU6OlZhbHVlKCkKLSAgICA6IG1fdHlwZShCb29sZWFuVmFsdWUpLCBtX2Jv
b2woZmFsc2UpCi17Ci19Ci0KLVZhbHVlOjpWYWx1ZShOb2RlKiB2YWx1ZSkKLSAgICA6IG1fdHlw
ZShOb2RlU2V0VmFsdWUpCi17Ci0gICAgbV9ub2RlU2V0LmFwcGVuZCh2YWx1ZSk7Ci19Ci0KLVZh
bHVlOjpWYWx1ZShjb25zdCBOb2RlU2V0JiB2YWx1ZSkKLSAgICA6IG1fdHlwZShOb2RlU2V0VmFs
dWUpLCBtX25vZGVTZXQodmFsdWUpCi17Ci19Ci0KLVZhbHVlOjpWYWx1ZShib29sIHZhbHVlKQot
ICAgIDogbV90eXBlKEJvb2xlYW5WYWx1ZSksIG1fYm9vbCh2YWx1ZSkKLXsKLX0KLQotVmFsdWU6
OlZhbHVlKHVuc2lnbmVkIHZhbHVlKQotICAgIDogbV90eXBlKE51bWJlclZhbHVlKSwgbV9udW1i
ZXIodmFsdWUpCi17Ci19Ci0KLVZhbHVlOjpWYWx1ZSh1bnNpZ25lZCBsb25nIHZhbHVlKQotICAg
IDogbV90eXBlKE51bWJlclZhbHVlKSwgbV9udW1iZXIodmFsdWUpCi17Ci19Ci0KLVZhbHVlOjpW
YWx1ZShkb3VibGUgdmFsdWUpCi0gICAgOiBtX3R5cGUoTnVtYmVyVmFsdWUpLCBtX251bWJlcih2
YWx1ZSkKK2NvbnN0IE5vZGVTZXQmIFZhbHVlOjp0b05vZGVTZXQoKSBjb25zdAogewotfQorICAg
IGlmICghbV9kYXRhKSB7CisgICAgICAgIHN0YXRpYyBOb2RlU2V0IGVtcHR5Tm9kZVNldDsKKyAg
ICAgICAgcmV0dXJuIGVtcHR5Tm9kZVNldDsKKyAgICB9CiAKLVZhbHVlOjpWYWx1ZShjb25zdCBj
aGFyKiB2YWx1ZSkKLSAgICA6IG1fdHlwZShTdHJpbmdWYWx1ZSksIG1fc3RyaW5nKHZhbHVlKQot
ewotfQorICAgIHJldHVybiBtX2RhdGEtPm1fbm9kZVNldDsKK30gICAgCiAKLVZhbHVlOjpWYWx1
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIDogbV90eXBlKFN0cmluZ1ZhbHVlKSwgbV9zdHJp
bmcodmFsdWUpCitOb2RlU2V0JiBWYWx1ZTo6bW9kaWZpYWJsZU5vZGVTZXQoKQogeworICAgIGlm
ICghbV9kYXRhKQorICAgICAgICBtX2RhdGEgPSBuZXcgVmFsdWVEYXRhOworICAgIAorICAgIG1f
dHlwZSA9IE5vZGVTZXRWYWx1ZTsKKyAgICByZXR1cm4gbV9kYXRhLT5tX25vZGVTZXQ7CiB9CiAK
LWNvbnN0IE5vZGVTZXQmIFZhbHVlOjp0b05vZGVTZXQoKSBjb25zdAotewotICAgIHJldHVybiBt
X25vZGVTZXQ7Ci19ICAgIAotCiBib29sIFZhbHVlOjp0b0Jvb2xlYW4oKSBjb25zdAogewogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAgIGNhc2UgTm9kZVNldFZhbHVlOgotICAgICAgICAg
ICAgcmV0dXJuICFtX25vZGVTZXQuaXNFbXB0eSgpOworICAgICAgICAgICAgcmV0dXJuICFtX2Rh
dGEtPm1fbm9kZVNldC5pc0VtcHR5KCk7CiAgICAgICAgIGNhc2UgQm9vbGVhblZhbHVlOgogICAg
ICAgICAgICAgcmV0dXJuIG1fYm9vbDsKICAgICAgICAgY2FzZSBOdW1iZXJWYWx1ZToKICAgICAg
ICAgICAgIHJldHVybiBtX251bWJlciAhPSAwICYmICFpc25hbihtX251bWJlcik7CiAgICAgICAg
IGNhc2UgU3RyaW5nVmFsdWU6Ci0gICAgICAgICAgICByZXR1cm4gIW1fc3RyaW5nLmlzRW1wdHko
KTsKKyAgICAgICAgICAgIHJldHVybiAhbV9kYXRhLT5tX3N0cmluZy5pc0VtcHR5KCk7CiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTExNCw3
ICs4Miw3IEBAIGRvdWJsZSBWYWx1ZTo6dG9OdW1iZXIoKSBjb25zdAogICAgICAgICAgICAgcmV0
dXJuIG1fbnVtYmVyOwogICAgICAgICBjYXNlIFN0cmluZ1ZhbHVlOiB7CiAgICAgICAgICAgICBi
b29sIGNhbkNvbnZlcnQ7Ci0gICAgICAgICAgICBkb3VibGUgdmFsdWUgPSBtX3N0cmluZy5zaW1w
bGlmeVdoaXRlU3BhY2UoKS50b0RvdWJsZSgmY2FuQ29udmVydCk7CisgICAgICAgICAgICBkb3Vi
bGUgdmFsdWUgPSBtX2RhdGEtPm1fc3RyaW5nLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLnRvRG91Ymxl
KCZjYW5Db252ZXJ0KTsKICAgICAgICAgICAgIGlmIChjYW5Db252ZXJ0KQogICAgICAgICAgICAg
ICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgICAgIHJldHVybiBOQU47CkBAIC0xMzAsMTEgKzk4
LDExIEBAIFN0cmluZyBWYWx1ZTo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgICAgIGNhc2UgTm9kZVNldFZhbHVlOgotICAgICAgICAgICAgaWYgKG1fbm9k
ZVNldC5pc0VtcHR5KCkpIAorICAgICAgICAgICAgaWYgKG1fZGF0YS0+bV9ub2RlU2V0LmlzRW1w
dHkoKSkgCiAgICAgICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICAgICAgcmV0dXJuIHN0
cmluZ1ZhbHVlKG1fbm9kZVNldC5maXJzdE5vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gc3Ry
aW5nVmFsdWUobV9kYXRhLT5tX25vZGVTZXQuZmlyc3ROb2RlKCkpOwogICAgICAgICBjYXNlIFN0
cmluZ1ZhbHVlOgotICAgICAgICAgICAgcmV0dXJuIG1fc3RyaW5nOworICAgICAgICAgICAgcmV0
dXJuIG1fZGF0YS0+bV9zdHJpbmc7CiAgICAgICAgIGNhc2UgTnVtYmVyVmFsdWU6CiAgICAgICAg
ICAgICBpZiAoaXNuYW4obV9udW1iZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiAiTmFOIjsK
SW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YUGF0aFZhbHVlLmgJKHJldmlzaW9uIDIwNDg2KQorKysgV2ViQ29yZS94bWwvWFBhdGhWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxOSArMzYsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgbmFtZXNwYWNlIFhQYXRoIHsKICAgICAKKyAgICAgICAgY2xhc3MgVmFsdWVEYXRh
IDogcHVibGljIFNoYXJlZDxWYWx1ZURhdGE+IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgVmFsdWVEYXRhKCkge30KKyAgICAgICAgICAgIFZhbHVlRGF0YShjb25zdCBOb2RlU2V0JiBu
b2RlU2V0KSA6IG1fbm9kZVNldChub2RlU2V0KSB7fQorICAgICAgICAgICAgVmFsdWVEYXRhKGNv
bnN0IFN0cmluZyYgc3RyaW5nKSA6IG1fc3RyaW5nKHN0cmluZykge30KKworICAgICAgICAgICAg
Tm9kZVNldCBtX25vZGVTZXQ7CisgICAgICAgICAgICBTdHJpbmcgbV9zdHJpbmc7CisgICAgICAg
IH07CisKKyAgICAgICAgLy8gQ29weWluZyBWYWx1ZSBvYmplY3RzIG1ha2VzIHRoZWlyIGRhdGEg
cGFydGlhbGx5IHNoYXJlZCwgc28gY2FyZSBoYXMgdG8gYmUgdGFrZW4gd2hlbiBkZWFsaW5nIHdp
dGggY29waWVzLgogICAgICAgICBjbGFzcyBWYWx1ZSB7CiAgICAgICAgIHB1YmxpYzoKICAgICAg
ICAgICAgIGVudW0gVHlwZSB7IE5vZGVTZXRWYWx1ZSwgQm9vbGVhblZhbHVlLCBOdW1iZXJWYWx1
ZSwgU3RyaW5nVmFsdWUgfTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWUoKTsKLSAg
ICAgICAgICAgIFZhbHVlKE5vZGUqKTsKLSAgICAgICAgICAgIFZhbHVlKGNvbnN0IE5vZGVTZXQm
KTsKLSAgICAgICAgICAgIFZhbHVlKGJvb2wpOwotICAgICAgICAgICAgVmFsdWUodW5zaWduZWQp
OwotICAgICAgICAgICAgVmFsdWUodW5zaWduZWQgbG9uZyk7Ci0gICAgICAgICAgICBWYWx1ZShk
b3VibGUpOwotICAgICAgICAgICAgVmFsdWUoY29uc3QgY2hhciopOwotICAgICAgICAgICAgVmFs
dWUoY29uc3QgU3RyaW5nJik7CisgICAgICAgICAgICBWYWx1ZSgpIDogbV90eXBlKEJvb2xlYW5W
YWx1ZSksIG1fYm9vbChmYWxzZSkge30KKyAgICAgICAgICAgIFZhbHVlKGJvb2wgdmFsdWUpIDog
bV90eXBlKEJvb2xlYW5WYWx1ZSksIG1fYm9vbCh2YWx1ZSkge30KKworICAgICAgICAgICAgVmFs
dWUodW5zaWduZWQgdmFsdWUpIDogbV90eXBlKE51bWJlclZhbHVlKSwgbV9udW1iZXIodmFsdWUp
IHt9CisgICAgICAgICAgICBWYWx1ZSh1bnNpZ25lZCBsb25nIHZhbHVlKSA6IG1fdHlwZShOdW1i
ZXJWYWx1ZSksIG1fbnVtYmVyKHZhbHVlKSB7fQorICAgICAgICAgICAgVmFsdWUoZG91YmxlIHZh
bHVlKSA6IG1fdHlwZShOdW1iZXJWYWx1ZSksIG1fbnVtYmVyKHZhbHVlKSB7fQorCisgICAgICAg
ICAgICBWYWx1ZShjb25zdCBjaGFyKiB2YWx1ZSkgOiBtX3R5cGUoU3RyaW5nVmFsdWUpLCBtX2Rh
dGEobmV3IFZhbHVlRGF0YSh2YWx1ZSkpIHt9CisgICAgICAgICAgICBWYWx1ZShjb25zdCBTdHJp
bmcmIHZhbHVlKSA6IG1fdHlwZShTdHJpbmdWYWx1ZSksIG1fZGF0YShuZXcgVmFsdWVEYXRhKHZh
bHVlKSkge30KKworICAgICAgICAgICAgVmFsdWUoTm9kZSogdmFsdWUpIDogbV90eXBlKE5vZGVT
ZXRWYWx1ZSksIG1fZGF0YShuZXcgVmFsdWVEYXRhKSB7IG1fZGF0YS0+bV9ub2RlU2V0LmFwcGVu
ZCh2YWx1ZSk7IH0KKyAgICAgICAgICAgIFZhbHVlKGNvbnN0IE5vZGVTZXQmIHZhbHVlKSA6IG1f
dHlwZShOb2RlU2V0VmFsdWUpLCBtX2RhdGEobmV3IFZhbHVlRGF0YSh2YWx1ZSkpIHt9CisgICAg
ICAgICAgICAvLyBTdGVhbHMgbm9kZXMgZnJvbSB2YWx1ZS4KKyAgICAgICAgICAgIFZhbHVlKE5v
ZGVTZXQmIHZhbHVlKSA6IG1fdHlwZShOb2RlU2V0VmFsdWUpLCBtX2RhdGEobmV3IFZhbHVlRGF0
YSkgeyB2YWx1ZS5zd2FwKG1fZGF0YS0+bV9ub2RlU2V0KTsgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIApAQCAtNTcsMTkg
KzczLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIGJvb2wgaXNOdW1iZXIo
KSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gTnVtYmVyVmFsdWU7IH0KICAgICAgICAgICAgIGJv
b2wgaXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gU3RyaW5nVmFsdWU7IH0KIAot
ICAgICAgICAgICAgY29uc3QgTm9kZVNldCYgdG9Ob2RlU2V0KCkgY29uc3Q7ICAgIAorICAgICAg
ICAgICAgY29uc3QgTm9kZVNldCYgdG9Ob2RlU2V0KCkgY29uc3Q7CisgICAgICAgICAgICBOb2Rl
U2V0JiBtb2RpZmlhYmxlTm9kZVNldCgpOwogICAgICAgICAgICAgYm9vbCB0b0Jvb2xlYW4oKSBj
b25zdDsKICAgICAgICAgICAgIGRvdWJsZSB0b051bWJlcigpIGNvbnN0OwogICAgICAgICAgICAg
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7Ci0gICAgICAgICAgICAKKwogICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgICAgICAgICBOb2RlU2V0IG1fbm9kZVNl
dDsKICAgICAgICAgICAgIGJvb2wgbV9ib29sOwogICAgICAgICAgICAgZG91YmxlIG1fbnVtYmVy
OwotICAgICAgICAgICAgU3RyaW5nIG1fc3RyaW5nOworICAgICAgICAgICAgUmVmUHRyPFZhbHVl
RGF0YT4gbV9kYXRhOwogICAgICAgICB9OwotCiAgICAgfQogfQogCg==
</data>
<flag name="review"
          id="5520"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13890</attachid>
            <date>2007-03-30 12:56:39 -0700</date>
            <delta_ts>2007-03-30 13:32:51 -0700</delta_ts>
            <desc>partial fix 3 v2</desc>
            <filename>13021_3v2.txt</filename>
            <type>text/plain</type>
            <size>23515</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDYxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDctMDMtMzAgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDIxCisgICAgICAgIFhQ
YXRoIGNhbiBiZSB2ZXJ5IHNsb3cKKworICAgICAgICBUaGlzIHBhdGNoIGZpbmFsbHkgbWFrZXMg
dXMgZmFzdGVyIHRoYW4gRmlyZWZveCAyLjAgb24gdGhpcyB0ZXN0IGNhc2UuCisKKyAgICAgICAg
KiB4bWwvWFBhdGhGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bkNv
bmNhdDo6ZXZhbHVhdGUpOiBVc2UgYSBWZWN0b3IgYnVmZmVyIGZvciBmYXN0ZXIgYXBwZW5kaW5n
LgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bklkOjpldmFsdWF0ZSk6IE1vdmUgdGhlIHJl
c3VsdCBOb2RlU2V0IGludG8gVmFsdWUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0LgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OkZ1bkxvY2FsTmFtZTo6ZXZhbHVhdGUpOiBDb3NtZXRpYyBjaGFuZ2Vz
LgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5hbWVzcGFjZVVSSTo6ZXZhbHVhdGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpGdW5OYW1lOjpldmFsdWF0ZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OkZ1bk5vcm1hbGl6ZVNwYWNlOjpldmFsdWF0ZSk6
IERpdHRvLgorCisgICAgICAgICogeG1sL1hQYXRoVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6WFBhdGg6OlZhbHVlOjp0b05vZGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZh
bHVlOjptb2RpZmlhYmxlTm9kZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6
OnRvQm9vbGVhbik6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWU6OnRvTnVtYmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpWYWx1ZTo6dG9TdHJpbmcpOgorICAgICAgICAqIHht
bC9YUGF0aFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VmFsdWVEYXRhOjpWYWx1
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlZhbHVlOjpWYWx1ZSk6CisgICAgICAg
IE1hZGUgVmFsdWUgY29weWluZyBmYXN0ZXIgYnkgcHV0dGluZyBsYXJnZSBkYXRhIG1lbWJlcnMg
aW50byBhIHNlcGFyYXRlIHJlZmNvdW50ZWQgVmFsdWVEYXRhIGNsYXNzLgorICAgICAgICBBZGRl
ZCBwcm92aXNpb25zIGZvciBtb3ZpbmcgYSBOb2RlU2V0IGluIGFuZCBvdXQgb2YgVmFsdWUgd2l0
aG91dCBjb3B5aW5nLgorICAgICAgICBNYWRlIGNvbnN0cnVjdGlvbiBzYWZlciBieSBtb3Zpbmcg
Ym9vbCB2ZXJzaW9uIHRvIGEgdGVtcGxhdGUgY29uc3RydWN0b3IuCisgICAgICAgIFJlbW92ZWQg
KGFsbW9zdCkgdW51c2VkIGRlZmF1bHQgY29uc3RydWN0b3IuCisKKyAgICAgICAgKiB4bWwvWFBh
dGhQcmVkaWNhdGUuaDogU3RvcmUgYSBWYWx1ZSBmb3IgbGl0ZXJhbCBzdHJpbmcgYW5kIG51bWJl
ciBleHByZXNzaW9ucyB0byBhdm9pZCAKKyAgICAgICAgY29uc3RydWN0aW5nIG9uZSBlYWNoIHRp
bWUuCisKKyAgICAgICAgKiB4bWwvWFBhdGhQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQ
YXRoOjpGaWx0ZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpMb2NhdGlv
blBhdGg6OmV2YWx1YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpQYXRoOjpldmFsdWF0
ZSk6CisgICAgICAgICogeG1sL1hQYXRoUGF0aC5oOgorICAgICAgICAqIHhtbC9YUGF0aFByZWRp
Y2F0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6TnVtZXJpY09wOjpldmFsdWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6VW5pb246OmV2YWx1YXRlKToKKyAgICAgICAgKiB4
bWwvWFBhdGhSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGhSZXN1bHQ6OnNuYXBz
aG90SXRlbSk6CisgICAgICAgICogeG1sL1hQYXRoU3RlcC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpYUGF0aDo6U3RlcDo6ZXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6
Om5vZGVzSW5BeGlzKToKKyAgICAgICAgKiB4bWwvWFBhdGhTdGVwLmg6CisgICAgICAgIEdvdCBy
aWQgb2YgdW5uZWNlc3NhcnkgTm9kZVNldCBjb3B5aW5nIGluIG1hbnkgY2FzZXMuCisKIDIwMDct
MDMtMzAgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluLgpJbmRleDogV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjA1NTMp
CisrKyBXZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
Niw3ICszMDYsNyBAQCBWYWx1ZSBGdW5JZDo6ZXZhbHVhdGUoKSBjb25zdAogICAgIAogICAgIHJl
c3VsdC5tYXJrU29ydGVkKGZhbHNlKTsKICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBWYWx1ZShyZXN1bHQsIFZhbHVlOjphZG9wdCk7CiB9CiAKIFZhbHVlIEZ1bkxvY2FsTmFt
ZTo6ZXZhbHVhdGUoKSBjb25zdApAQCAtMzI1LDcgKzMyNSw3IEBAIFZhbHVlIEZ1bkxvY2FsTmFt
ZTo6ZXZhbHVhdGUoKSBjb25zdAogICAgIGlmICghbm9kZSkKICAgICAgICAgbm9kZSA9IGV2YWx1
YXRpb25Db250ZXh0KCkubm9kZS5nZXQoKTsKIAotICAgIHJldHVybiBWYWx1ZShub2RlLT5sb2Nh
bE5hbWUoKSk7CisgICAgcmV0dXJuIG5vZGUtPmxvY2FsTmFtZSgpLmRvbVN0cmluZygpOwogfQog
CiBWYWx1ZSBGdW5OYW1lc3BhY2VVUkk6OmV2YWx1YXRlKCkgY29uc3QKQEAgLTM0NCw3ICszNDQs
NyBAQCBWYWx1ZSBGdW5OYW1lc3BhY2VVUkk6OmV2YWx1YXRlKCkgY29uc3QKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIG5vZGUgPSBldmFsdWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCk7CiAKLSAg
ICByZXR1cm4gVmFsdWUobm9kZS0+bmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBub2RlLT5u
YW1lc3BhY2VVUkkoKS5kb21TdHJpbmcoKTsKIH0KIAogVmFsdWUgRnVuTmFtZTo6ZXZhbHVhdGUo
KSBjb25zdApAQCAtMzY0LDcgKzM2NCw3IEBAIFZhbHVlIEZ1bk5hbWU6OmV2YWx1YXRlKCkgY29u
c3QKICAgICAgICAgbm9kZSA9IGV2YWx1YXRpb25Db250ZXh0KCkubm9kZS5nZXQoKTsKIAogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4ID0gbm9kZS0+cHJlZml4KCk7Ci0gICAgcmV0dXJu
IHByZWZpeC5pc0VtcHR5KCkgPyBub2RlLT5sb2NhbE5hbWUoKS5kb21TdHJpbmcoKSA6IG5vZGUt
PnByZWZpeCgpICsgIjoiICsgbm9kZS0+bG9jYWxOYW1lKCk7CisgICAgcmV0dXJuIHByZWZpeC5p
c0VtcHR5KCkgPyBub2RlLT5sb2NhbE5hbWUoKS5kb21TdHJpbmcoKSA6IHByZWZpeCArICI6IiAr
IG5vZGUtPmxvY2FsTmFtZSgpOwogfQogCiBWYWx1ZSBGdW5Db3VudDo6ZXZhbHVhdGUoKSBjb25z
dApAQCAtMzg2LDEyICszODYsMTUgQEAgVmFsdWUgRnVuU3RyaW5nOjpldmFsdWF0ZSgpIGNvbnN0
CiAKIFZhbHVlIEZ1bkNvbmNhdDo6ZXZhbHVhdGUoKSBjb25zdAogewotICAgIFN0cmluZyBzdHIg
PSAiIjsKKyAgICBWZWN0b3I8VUNoYXIsIDEwMjQ+IHJlc3VsdDsKIAotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcmdDb3VudCgpOyArK2kpCi0gICAgICAgIHN0ciArPSBhcmcoaSktPmV2
YWx1YXRlKCkudG9TdHJpbmcoKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IGFyZ0NvdW50KCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgU3RyaW5n
IHN0cihhcmcoaSktPmV2YWx1YXRlKCkudG9TdHJpbmcoKSk7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpKTsKKyAgICB9CiAKLSAgICByZXR1cm4g
c3RyOworICAgIHJldHVybiBTdHJpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7CiB9
CiAKIFZhbHVlIEZ1blN0YXJ0c1dpdGg6OmV2YWx1YXRlKCkgY29uc3QKQEAgLTQ4NCwxMSArNDg3
LDExIEBAIFZhbHVlIEZ1bk5vcm1hbGl6ZVNwYWNlOjpldmFsdWF0ZSgpIGNvbnMKIHsKICAgICBp
ZiAoIWFyZ0NvdW50KCkpIHsKICAgICAgICAgU3RyaW5nIHMgPSBWYWx1ZShFeHByZXNzaW9uOjpl
dmFsdWF0aW9uQ29udGV4dCgpLm5vZGUuZ2V0KCkpLnRvU3RyaW5nKCk7Ci0gICAgICAgIHJldHVy
biBWYWx1ZShzLnNpbXBsaWZ5V2hpdGVTcGFjZSgpKTsKKyAgICAgICAgcmV0dXJuIHMuc2ltcGxp
ZnlXaGl0ZVNwYWNlKCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHMgPSBhcmcoMCktPmV2YWx1YXRl
KCkudG9TdHJpbmcoKTsKLSAgICByZXR1cm4gVmFsdWUocy5zaW1wbGlmeVdoaXRlU3BhY2UoKSk7
CisgICAgcmV0dXJuIHMuc2ltcGxpZnlXaGl0ZVNwYWNlKCk7CiB9CiAKIFZhbHVlIEZ1blRyYW5z
bGF0ZTo6ZXZhbHVhdGUoKSBjb25zdApJbmRleDogV2ViQ29yZS94bWwvWFBhdGhQYXRoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFBhdGguY3BwCShyZXZpc2lvbiAyMDU1NCkK
KysrIFdlYkNvcmUveG1sL1hQYXRoUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2
LDcgQEAgVmFsdWUgRmlsdGVyOjpldmFsdWF0ZSgpIGNvbnN0CiAgICAgaWYgKCF2LmlzTm9kZVNl
dCgpKSAKICAgICAgICAgcmV0dXJuIHY7CiAKLSAgICBOb2RlU2V0IG5vZGVzID0gdi50b05vZGVT
ZXQoKTsKKyAgICBOb2RlU2V0JiBub2RlcyA9IHYubW9kaWZpYWJsZU5vZGVTZXQoKTsKICAgICBu
b2Rlcy5zb3J0KCk7CiAKICAgICBFdmFsdWF0aW9uQ29udGV4dCYgZXZhbHVhdGlvbkNvbnRleHQg
PSBFeHByZXNzaW9uOjpldmFsdWF0aW9uQ29udGV4dCgpOwpAQCAtNzcsNyArNzcsNyBAQCBWYWx1
ZSBGaWx0ZXI6OmV2YWx1YXRlKCkgY29uc3QKICAgICAgICAgbm9kZXMuc3dhcChuZXdOb2Rlcyk7
CiAgICAgfQogCi0gICAgcmV0dXJuIG5vZGVzOworICAgIHJldHVybiB2OwogfQogCiBMb2NhdGlv
blBhdGg6OkxvY2F0aW9uUGF0aCgpCkBAIC05OSwyMyArOTksMjMgQEAgVmFsdWUgTG9jYXRpb25Q
YXRoOjpldmFsdWF0ZSgpIGNvbnN0CiAgICAgaWYgKG1fYWJzb2x1dGUgJiYgY29udGV4dC0+bm9k
ZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVOVF9OT0RFKSAKICAgICAgICAgY29udGV4dCA9IGNvbnRl
eHQtPm93bmVyRG9jdW1lbnQoKTsKIAotICAgIE5vZGVTZXQgc3RhcnROb2RlczsKLSAgICBzdGFy
dE5vZGVzLmFwcGVuZChjb250ZXh0KTsKKyAgICBOb2RlU2V0IG5vZGVzOworICAgIG5vZGVzLmFw
cGVuZChjb250ZXh0KTsKKyAgICBldmFsdWF0ZShub2Rlcyk7CiAgICAgCi0gICAgcmV0dXJuIGV2
YWx1YXRlKHN0YXJ0Tm9kZXMpOworICAgIHJldHVybiBWYWx1ZShub2RlcywgVmFsdWU6OmFkb3B0
KTsKIH0KIAotVmFsdWUgTG9jYXRpb25QYXRoOjpldmFsdWF0ZShjb25zdCBOb2RlU2V0JiBzdGFy
dE5vZGVzKSBjb25zdAordm9pZCBMb2NhdGlvblBhdGg6OmV2YWx1YXRlKE5vZGVTZXQmIG5vZGVz
KSBjb25zdAogewotICAgIE5vZGVTZXQgbm9kZXMgPSBzdGFydE5vZGVzOwotICAgIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0ZXBzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIFN0
ZXAqIHN0ZXAgPSBtX3N0ZXBzW2ldOwogICAgICAgICBOb2RlU2V0IG5ld05vZGVzOwogICAgICAg
ICBIYXNoU2V0PE5vZGUqPiBuZXdOb2Rlc1NldDsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgbm9kZXMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIE5vZGVTZXQgbWF0Y2hl
cyA9IHN0ZXAtPmV2YWx1YXRlKG5vZGVzW2pdKTsKKyAgICAgICAgICAgIE5vZGVTZXQgbWF0Y2hl
czsKKyAgICAgICAgICAgIHN0ZXAtPmV2YWx1YXRlKG5vZGVzW2pdLCBtYXRjaGVzKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3Qgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgbWF0Y2hlcy5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1hdGNoZXNbbm9kZUluZGV4XTsKQEAgLTEyOCw3ICsxMjgsNiBAQCBWYWx1ZSBMb2Nh
dGlvblBhdGg6OmV2YWx1YXRlKGNvbnN0IE5vZGVTCiAgICAgfQogCiAgICAgbm9kZXMubWFya1Nv
cnRlZChmYWxzZSk7Ci0gICAgcmV0dXJuIG5vZGVzOwogfQogCiB2b2lkIExvY2F0aW9uUGF0aDo6
b3B0aW1pemVTdGVwUGFpcih1bnNpZ25lZCBpbmRleCkKQEAgLTE4NSw3ICsxODQsMTIgQEAgUGF0
aDo6flBhdGgoKQogCiBWYWx1ZSBQYXRoOjpldmFsdWF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fcGF0aC0+ZXZhbHVhdGUobV9maWx0ZXItPmV2YWx1YXRlKCkudG9Ob2RlU2V0KCkpOworICAg
IFZhbHVlIHYgPSBtX2ZpbHRlci0+ZXZhbHVhdGUoKTsKKworICAgIE5vZGVTZXQmIG5vZGVzID0g
di5tb2RpZmlhYmxlTm9kZVNldCgpOworICAgIG1fcGF0aC0+ZXZhbHVhdGUobm9kZXMpOworICAg
IAorICAgIHJldHVybiB2OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFBhdGguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFBhdGguaAkocmV2aXNpb24gMjA1NTMpCisr
KyBXZWJDb3JlL3htbC9YUGF0aFBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICB2b2lkIHNldEFic29sdXRlKGJvb2wg
dmFsdWUpIHsgbV9hYnNvbHV0ZSA9IHZhbHVlOyB9CiAKICAgICAgICAgICAgIHZpcnR1YWwgVmFs
dWUgZXZhbHVhdGUoKSBjb25zdDsKLSAgICAgICAgICAgIFZhbHVlIGV2YWx1YXRlKGNvbnN0IE5v
ZGVTZXQmIHN0YXJ0Tm9kZXMpIGNvbnN0OworICAgICAgICAgICAgdm9pZCBldmFsdWF0ZShOb2Rl
U2V0JiBub2RlcykgY29uc3Q7IC8vIG5vZGVzIGlzIGFuIGlucHV0L291dHB1dCBwYXJhbWV0ZXIK
IAogICAgICAgICAgICAgdm9pZCBhcHBlbmRTdGVwKFN0ZXAqIHN0ZXApOwogICAgICAgICAgICAg
dm9pZCBpbnNlcnRGaXJzdFN0ZXAoU3RlcCogc3RlcCk7CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0
aFByZWRpY2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhQcmVkaWNhdGUu
Y3BwCShyZXZpc2lvbiAyMDU1MykKKysrIFdlYkNvcmUveG1sL1hQYXRoUHJlZGljYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTcsOCArOTcsOCBAQCBWYWx1ZSBOdW1lcmljT3A6OmV2YWx1YXRl
KCkgY29uc3QKICAgICAgICAgY2FzZSBPUF9Nb2Q6CiAgICAgICAgICAgICByZXR1cm4gZm1vZChs
ZWZ0VmFsLCByaWdodFZhbCk7CiAgICAgfQotICAgIAotICAgIHJldHVybiBWYWx1ZSgpOworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwLjA7CiB9CiAKIEVxVGVzdE9wOjpF
cVRlc3RPcChPcGNvZGUgb3Bjb2RlLCBFeHByZXNzaW9uKiBsaHMsIEV4cHJlc3Npb24qIHJocykK
QEAgLTIzNCwyOCArMjM0LDI4IEBAIFZhbHVlIExvZ2ljYWxPcDo6ZXZhbHVhdGUoKSBjb25zdAog
CiBWYWx1ZSBVbmlvbjo6ZXZhbHVhdGUoKSBjb25zdAogewotICAgIFZhbHVlIGxocyA9IHN1YkV4
cHIoMCktPmV2YWx1YXRlKCk7CisgICAgVmFsdWUgbGhzUmVzdWx0ID0gc3ViRXhwcigwKS0+ZXZh
bHVhdGUoKTsKICAgICBWYWx1ZSByaHMgPSBzdWJFeHByKDEpLT5ldmFsdWF0ZSgpOwotICAgIGlm
ICghbGhzLmlzTm9kZVNldCgpIHx8ICFyaHMuaXNOb2RlU2V0KCkpCisgICAgaWYgKCFsaHNSZXN1
bHQuaXNOb2RlU2V0KCkgfHwgIXJocy5pc05vZGVTZXQoKSkKICAgICAgICAgcmV0dXJuIE5vZGVT
ZXQoKTsKICAgICAKLSAgICBOb2RlU2V0IHJlc3VsdCA9IGxocy50b05vZGVTZXQoKTsKKyAgICBO
b2RlU2V0JiByZXN1bHRTZXQgPSBsaHNSZXN1bHQubW9kaWZpYWJsZU5vZGVTZXQoKTsKICAgICBj
b25zdCBOb2RlU2V0JiByaHNOb2RlcyA9IHJocy50b05vZGVTZXQoKTsKICAgICAKICAgICBIYXNo
U2V0PE5vZGUqPiBub2RlczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXpl
KCk7ICsraSkKLSAgICAgICAgbm9kZXMuYWRkKHJlc3VsdFtpXSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZXN1bHRTZXQuc2l6ZSgpOyArK2kpCisgICAgICAgIG5vZGVzLmFkZChyZXN1
bHRTZXRbaV0pOwogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmhzTm9kZXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IHJoc05vZGVzW2ldOwogICAgICAgICBp
ZiAobm9kZXMuYWRkKG5vZGUpLnNlY29uZCkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobm9k
ZSk7CisgICAgICAgICAgICByZXN1bHRTZXQuYXBwZW5kKG5vZGUpOwogICAgIH0KIAogICAgIC8v
IEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIG1lcmdlIHNvcnQgdG8gYXZvaWQgbWFraW5nIHRo
ZSByZXN1bHQgdW5zb3J0ZWQ7CiAgICAgLy8gYnV0IHRoaXMgd291bGQgd2FzdGUgdGhlIHRpbWUg
aW4gY2FzZXMgd2hlbiBvcmRlciBpcyBub3QgaW1wb3J0YW50LgotICAgIHJlc3VsdC5tYXJrU29y
dGVkKGZhbHNlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJlc3VsdFNldC5tYXJrU29ydGVk
KGZhbHNlKTsKKyAgICByZXR1cm4gbGhzUmVzdWx0OwogfQogCiBQcmVkaWNhdGU6OlByZWRpY2F0
ZShFeHByZXNzaW9uKiBleHByKQpJbmRleDogV2ViQ29yZS94bWwvWFBhdGhQcmVkaWNhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFByZWRpY2F0ZS5oCShyZXZpc2lvbiAyMDU1
MykKKysrIFdlYkNvcmUveG1sL1hQYXRoUHJlZGljYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDYgKzMwLDcgQEAKICNpZiBFTkFCTEUoWFBBVEgpCiAKICNpbmNsdWRlICJYUGF0aEV4cHJlc3Np
b25Ob2RlLmgiCisjaW5jbHVkZSAiWFBhdGhWYWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQwLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgTnVt
YmVyKGRvdWJsZSk7CiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICB2aXJ0dWFsIFZhbHVl
IGV2YWx1YXRlKCkgY29uc3Q7Ci0gICAgICAgICAgICBkb3VibGUgbV92YWx1ZTsKKyAgICAgICAg
ICAgIFZhbHVlIG1fdmFsdWU7CiAgICAgICAgIH07CiAKICAgICAgICAgY2xhc3MgU3RyaW5nRXhw
cmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKQEAgLTQ4LDcgKzQ5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgU3RyaW5nRXhwcmVzc2lvbihjb25zdCBTdHJpbmcmKTsK
ICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIHZpcnR1YWwgVmFsdWUgZXZhbHVhdGUoKSBj
b25zdDsKLSAgICAgICAgICAgIFN0cmluZyBtX3ZhbHVlOworICAgICAgICAgICAgVmFsdWUgbV92
YWx1ZTsKICAgICAgICAgfTsKIAogICAgICAgICBjbGFzcyBOZWdhdGl2ZSA6IHB1YmxpYyBFeHBy
ZXNzaW9uIHsKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoUmVzdWx0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3htbC9YUGF0aFJlc3VsdC5jcHAJKHJldmlzaW9uIDIwNTUzKQorKysgV2ViQ29y
ZS94bWwvWFBhdGhSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNyArMjMwLDcgQEAg
Tm9kZSogWFBhdGhSZXN1bHQ6OnNuYXBzaG90SXRlbSh1bnNpZ25lZAogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgCi0gICAgTm9kZVNldCBub2RlcyA9IG1fdmFsdWUudG9Ob2RlU2V0KCk7
CisgICAgY29uc3QgTm9kZVNldCYgbm9kZXMgPSBtX3ZhbHVlLnRvTm9kZVNldCgpOwogICAgIGlm
IChpbmRleCA+PSBub2Rlcy5zaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIApJbmRleDog
V2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0
aFN0ZXAuY3BwCShyZXZpc2lvbiAyMDU1NCkKKysrIFdlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDkgQEAgU3RlcDo6flN0ZXAoKQogICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX3ByZWRpY2F0ZXMpOwogfQogCi1Ob2RlU2V0IFN0ZXA6OmV2YWx1YXRlKE5v
ZGUqIGNvbnRleHQpIGNvbnN0Cit2b2lkIFN0ZXA6OmV2YWx1YXRlKE5vZGUqIGNvbnRleHQsIE5v
ZGVTZXQmIG5vZGVzKSBjb25zdAogewotICAgIE5vZGVTZXQgbm9kZXMgPSBub2Rlc0luQXhpcyhj
b250ZXh0KTsKKyAgICBub2Rlc0luQXhpcyhjb250ZXh0LCBub2Rlcyk7CiAgICAgCiAgICAgRXZh
bHVhdGlvbkNvbnRleHQmIGV2YWx1YXRpb25Db250ZXh0ID0gRXhwcmVzc2lvbjo6ZXZhbHVhdGlv
bkNvbnRleHQoKTsKICAgICAKQEAgLTgwLDI5ICs4MCwyOCBAQCBOb2RlU2V0IFN0ZXA6OmV2YWx1
YXRlKE5vZGUqIGNvbnRleHQpIGNvCiAKICAgICAgICAgbm9kZXMuc3dhcChuZXdOb2Rlcyk7CiAg
ICAgfQotICAgIHJldHVybiBub2RlczsKIH0KIAotTm9kZVNldCBTdGVwOjpub2Rlc0luQXhpcyhO
b2RlKiBjb250ZXh0KSBjb25zdAordm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0
LCBOb2RlU2V0JiBub2RlcykgY29uc3QKIHsKLSAgICBOb2RlU2V0IG5vZGVzOworICAgIEFTU0VS
VChub2Rlcy5pc0VtcHR5KCkpOwogICAgIHN3aXRjaCAobV9heGlzKSB7CiAgICAgICAgIGNhc2Ug
Q2hpbGRBeGlzOgogICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0cmlidXRlTm9kZSgpKSAv
LyBJbiBYUGF0aCBtb2RlbCwgYXR0cmlidXRlIG5vZGVzIGRvIG5vdCBoYXZlIGNoaWxkcmVuLgot
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAK
ICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9
IG4tPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQog
ICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7Ci0gICAgICAgICAgICByZXR1cm4g
bm9kZXM7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgRGVzY2VuZGFudEF4aXM6
CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkpIC8vIEluIFhQYXRo
IG1vZGVsLCBhdHRyaWJ1dGUgbm9kZXMgZG8gbm90IGhhdmUgY2hpbGRyZW4uCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAg
ICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVy
c2VOZXh0Tm9kZShjb250ZXh0KSkKICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikp
CiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKLSAgICAgICAgICAgIHJldHVy
biBub2RlczsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBQYXJlbnRBeGlzOgog
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0cmlidXRlTm9kZSgpKSB7CiAgICAgICAgICAg
ICAgICAgTm9kZSogbiA9IHN0YXRpY19jYXN0PEF0dHIqPihjb250ZXh0KS0+b3duZXJFbGVtZW50
KCk7CkBAIC0xMTMsNyArMTEyLDcgQEAgTm9kZVNldCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBj
b250ZXh0KQogICAgICAgICAgICAgICAgIGlmIChuICYmIG5vZGVNYXRjaGVzKG4pKQogICAgICAg
ICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbm9kZXM7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQW5jZXN0
b3JBeGlzOiB7CiAgICAgICAgICAgICBOb2RlKiBuID0gY29udGV4dDsKICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5pc0F0dHJpYnV0ZU5vZGUoKSkgewpAQCAtMTI1LDI4ICsxMjQsMjggQEAgTm9k
ZVNldCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0KQogICAgICAgICAgICAgICAgIGlm
IChub2RlTWF0Y2hlcyhuKSkKICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwog
ICAgICAgICAgICAgbm9kZXMucmV2ZXJzZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwor
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRm9sbG93aW5nU2li
bGluZ0F4aXM6CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpB
VFRSSUJVVEVfTk9ERSB8fAogICAgICAgICAgICAgICAgICBjb250ZXh0LT5ub2RlVHlwZSgpID09
IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFKSAKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZXM7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBm
b3IgKE5vZGUqIG4gPSBjb250ZXh0LT5uZXh0U2libGluZygpOyBuOyBuID0gbi0+bmV4dFNpYmxp
bmcoKSkKICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCiAgICAgICAgICAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChuKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBQcmVjZWRpbmdTaWJsaW5nQXhpczoKICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5ub2RlVHlwZSgpID09IE5vZGU6OkFUVFJJQlVURV9OT0RFIHx8
CiAgICAgICAgICAgICAgICAgIGNvbnRleHQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6WFBBVEhfTkFN
RVNQQUNFX05PREUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29u
dGV4dC0+cHJldmlvdXNTaWJsaW5nKCk7IG47IG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKSkKICAg
ICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpCiAgICAgICAgICAgICAgICAgICAgIG5v
ZGVzLmFwcGVuZChuKTsKIAogICAgICAgICAgICAgbm9kZXMucmV2ZXJzZSgpOwotICAgICAgICAg
ICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIEZvbGxv
d2luZ0F4aXM6CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkpIHsK
ICAgICAgICAgICAgICAgICBOb2RlKiBwID0gc3RhdGljX2Nhc3Q8QXR0cio+KGNvbnRleHQpLT5v
d25lckVsZW1lbnQoKTsKQEAgLTE2NCw3ICsxNjMsNyBAQCBOb2RlU2V0IFN0ZXA6Om5vZGVzSW5B
eGlzKE5vZGUqIGNvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGNhc2UgUHJlY2VkaW5nQXhpczoKICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5pc0F0dHJpYnV0ZU5vZGUoKSkKICAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8QXR0cio+KGNvbnRleHQpLT5vd25lckVsZW1lbnQoKTsKQEAgLTE3OSw0NyArMTc4
LDQ3IEBAIE5vZGVTZXQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCkKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBub2Rlcy5tYXJrU29ydGVkKGZh
bHNlKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgY2FzZSBBdHRyaWJ1dGVBeGlzOiB7CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+bm9k
ZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGVzOworICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgLy8gQXZvaWQgbGF6
aWx5IGNyZWF0aW5nIGF0dHJpYnV0ZSBub2RlcyBmb3IgYXR0cmlidXRlcyB0aGF0IHdlIGRvIG5v
dCBuZWVkIGFueXdheS4KICAgICAgICAgICAgIGlmIChtX25vZGVUZXN0LmtpbmQoKSA9PSBOb2Rl
VGVzdDo6TmFtZVRlc3QgJiYgbV9ub2RlVGVzdC5kYXRhKCkgIT0gIioiKSB7CiAgICAgICAgICAg
ICAgICAgUmVmUHRyPE5vZGU+IG4gPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oY29udGV4dCktPmdl
dEF0dHJpYnV0ZU5vZGVOUyhtX25vZGVUZXN0Lm5hbWVzcGFjZVVSSSgpLCBtX25vZGVUZXN0LmRh
dGEoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG4gJiYgbi0+bmFtZXNwYWNlVVJJKCkgIT0gImh0
dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIikgLy8gSW4gWFBhdGggbGFuZCwgbmFtZXNwYWNl
IG5vZGVzIGFyZSBub3QgYWNjZXNzaWJsZSBvbiB0aGUgYXR0cmlidXRlIGF4aXMuCiAgICAgICAg
ICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGVzOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgTmFtZWRBdHRyTWFwKiBhdHRycyA9IGNvbnRleHQtPmF0
dHJpYnV0ZXMoKTsKICAgICAgICAgICAgIGlmICghYXR0cnMpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGVzOworICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gbiA9IGF0dHJzLT5pdGVtKGkpOwogICAgICAgICAgICAgICAg
IGlmIChub2RlTWF0Y2hlcyhuLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBw
ZW5kKG4ucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBub2Rl
czsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBjYXNlIE5hbWVzcGFj
ZUF4aXM6CiAgICAgICAgICAgICAvLyBYUGF0aCBuYW1lc3BhY2Ugbm9kZXMgYXJlIG5vdCBpbXBs
ZW1lbnRlZCB5ZXQuCi0gICAgICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGNhc2UgU2VsZkF4aXM6CiAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMo
Y29udGV4dCkpCiAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGNvbnRleHQpOwotICAgICAg
ICAgICAgcmV0dXJuIG5vZGVzOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjYXNlIERl
c2NlbmRhbnRPclNlbGZBeGlzOgogICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKGNvbnRleHQp
KQogICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjb250ZXh0KTsKICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5pc0F0dHJpYnV0ZU5vZGUoKSkgLy8gSW4gWFBhdGggbW9kZWwsIGF0dHJpYnV0
ZSBub2RlcyBkbyBub3QgaGF2ZSBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICByZXR1cm4gbm9k
ZXM7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBmb3IgKE5vZGUqIG4g
PSBjb250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGNvbnRl
eHQpKQogICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKQogICAgICAgICAgICAgICAgIG5v
ZGVzLmFwcGVuZChuKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlczsKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2FzZSBBbmNlc3Rvck9yU2VsZkF4aXM6IHsKICAgICAgICAgICAgIGlm
IChub2RlTWF0Y2hlcyhjb250ZXh0KSkKICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoY29u
dGV4dCk7CkBAIC0yMzQsMTEgKzIzMywxMCBAQCBOb2RlU2V0IFN0ZXA6Om5vZGVzSW5BeGlzKE5v
ZGUqIGNvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKIAogICAg
ICAgICAgICAgbm9kZXMucmV2ZXJzZSgpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGVzOworICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBub2RlczsKIH0KIAogCkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFN0
ZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFN0ZXAuaAkocmV2aXNpb24gMjA1
NTQpCisrKyBXZWJDb3JlL3htbC9YUGF0aFN0ZXAuaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyAr
NzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBTdGVwKEF4aXMsIGNvbnN0
IE5vZGVUZXN0JiBub2RlVGVzdCwgY29uc3QgVmVjdG9yPFByZWRpY2F0ZSo+JiBwcmVkaWNhdGVz
ID0gVmVjdG9yPFByZWRpY2F0ZSo+KCkpOwogICAgICAgICAgICAgflN0ZXAoKTsKIAotICAgICAg
ICAgICAgTm9kZVNldCBldmFsdWF0ZShOb2RlKiBjb250ZXh0KSBjb25zdDsKKyAgICAgICAgICAg
IHZvaWQgZXZhbHVhdGUoTm9kZSogY29udGV4dCwgTm9kZVNldCYpIGNvbnN0OwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBBeGlzIGF4aXMoKSBjb25zdCB7IHJldHVybiBtX2F4aXM7IH0KICAg
ICAgICAgICAgIE5vZGVUZXN0IG5vZGVUZXN0KCkgY29uc3QgeyByZXR1cm4gbV9ub2RlVGVzdDsg
fQpAQCAtODUsNyArODUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAKICAg
ICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIHZvaWQgcGFyc2VOb2RlVGVzdChjb25zdCBTdHJp
bmcmKTsKLSAgICAgICAgICAgIE5vZGVTZXQgbm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCkgY29u
c3Q7CisgICAgICAgICAgICB2b2lkIG5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vZGVTZXQm
KSBjb25zdDsKICAgICAgICAgICAgIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSopIGNvbnN0OwogICAg
ICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZUZyb21Ob2RldGVzdChjb25zdCBTdHJpbmcmIG5vZGVU
ZXN0KSBjb25zdDsKICAgICAgICAgICAgIE5vZGU6Ok5vZGVUeXBlIHByaW1hcnlOb2RlVHlwZShB
eGlzKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUveG1sL1hQYXRoVmFsdWUuY3BwCShyZXZpc2lvbiAyMDU1MykKKysrIFdlYkNv
cmUveG1sL1hQYXRoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2OCArMzgsMzYgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBYUGF0aCB7CiAKLVZhbHVlOjpWYWx1ZSgp
Ci0gICAgOiBtX3R5cGUoQm9vbGVhblZhbHVlKSwgbV9ib29sKGZhbHNlKQotewotfQotCi1WYWx1
ZTo6VmFsdWUoTm9kZSogdmFsdWUpCi0gICAgOiBtX3R5cGUoTm9kZVNldFZhbHVlKQotewotICAg
IG1fbm9kZVNldC5hcHBlbmQodmFsdWUpOwotfQotCi1WYWx1ZTo6VmFsdWUoY29uc3QgTm9kZVNl
dCYgdmFsdWUpCi0gICAgOiBtX3R5cGUoTm9kZVNldFZhbHVlKSwgbV9ub2RlU2V0KHZhbHVlKQot
ewotfQotCi1WYWx1ZTo6VmFsdWUoYm9vbCB2YWx1ZSkKLSAgICA6IG1fdHlwZShCb29sZWFuVmFs
dWUpLCBtX2Jvb2wodmFsdWUpCi17Ci19Ci0KLVZhbHVlOjpWYWx1ZSh1bnNpZ25lZCB2YWx1ZSkK
LSAgICA6IG1fdHlwZShOdW1iZXJWYWx1ZSksIG1fbnVtYmVyKHZhbHVlKQotewotfQotCi1WYWx1
ZTo6VmFsdWUodW5zaWduZWQgbG9uZyB2YWx1ZSkKLSAgICA6IG1fdHlwZShOdW1iZXJWYWx1ZSks
IG1fbnVtYmVyKHZhbHVlKQotewotfQotCi1WYWx1ZTo6VmFsdWUoZG91YmxlIHZhbHVlKQotICAg
IDogbV90eXBlKE51bWJlclZhbHVlKSwgbV9udW1iZXIodmFsdWUpCitjb25zdCBOb2RlU2V0JiBW
YWx1ZTo6dG9Ob2RlU2V0KCkgY29uc3QKIHsKLX0KKyAgICBpZiAoIW1fZGF0YSkgeworICAgICAg
ICBzdGF0aWMgTm9kZVNldCBlbXB0eU5vZGVTZXQ7CisgICAgICAgIHJldHVybiBlbXB0eU5vZGVT
ZXQ7CisgICAgfQogCi1WYWx1ZTo6VmFsdWUoY29uc3QgY2hhciogdmFsdWUpCi0gICAgOiBtX3R5
cGUoU3RyaW5nVmFsdWUpLCBtX3N0cmluZyh2YWx1ZSkKLXsKLX0KKyAgICByZXR1cm4gbV9kYXRh
LT5tX25vZGVTZXQ7Cit9ICAgIAogCi1WYWx1ZTo6VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICA6IG1fdHlwZShTdHJpbmdWYWx1ZSksIG1fc3RyaW5nKHZhbHVlKQorTm9kZVNldCYgVmFs
dWU6Om1vZGlmaWFibGVOb2RlU2V0KCkKIHsKKyAgICBpZiAoIW1fZGF0YSkKKyAgICAgICAgbV9k
YXRhID0gbmV3IFZhbHVlRGF0YTsKKyAgICAKKyAgICBtX3R5cGUgPSBOb2RlU2V0VmFsdWU7Cisg
ICAgcmV0dXJuIG1fZGF0YS0+bV9ub2RlU2V0OwogfQogCi1jb25zdCBOb2RlU2V0JiBWYWx1ZTo6
dG9Ob2RlU2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ub2RlU2V0OwotfSAgICAKLQogYm9v
bCBWYWx1ZTo6dG9Cb29sZWFuKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAg
ICAgICBjYXNlIE5vZGVTZXRWYWx1ZToKLSAgICAgICAgICAgIHJldHVybiAhbV9ub2RlU2V0Lmlz
RW1wdHkoKTsKKyAgICAgICAgICAgIHJldHVybiAhbV9kYXRhLT5tX25vZGVTZXQuaXNFbXB0eSgp
OwogICAgICAgICBjYXNlIEJvb2xlYW5WYWx1ZToKICAgICAgICAgICAgIHJldHVybiBtX2Jvb2w7
CiAgICAgICAgIGNhc2UgTnVtYmVyVmFsdWU6CiAgICAgICAgICAgICByZXR1cm4gbV9udW1iZXIg
IT0gMCAmJiAhaXNuYW4obV9udW1iZXIpOwogICAgICAgICBjYXNlIFN0cmluZ1ZhbHVlOgotICAg
ICAgICAgICAgcmV0dXJuICFtX3N0cmluZy5pc0VtcHR5KCk7CisgICAgICAgICAgICByZXR1cm4g
IW1fZGF0YS0+bV9zdHJpbmcuaXNFbXB0eSgpOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMTQsNyArODIsNyBAQCBkb3VibGUgVmFsdWU6
OnRvTnVtYmVyKCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiBtX251bWJlcjsKICAgICAgICAg
Y2FzZSBTdHJpbmdWYWx1ZTogewogICAgICAgICAgICAgYm9vbCBjYW5Db252ZXJ0OwotICAgICAg
ICAgICAgZG91YmxlIHZhbHVlID0gbV9zdHJpbmcuc2ltcGxpZnlXaGl0ZVNwYWNlKCkudG9Eb3Vi
bGUoJmNhbkNvbnZlcnQpOworICAgICAgICAgICAgZG91YmxlIHZhbHVlID0gbV9kYXRhLT5tX3N0
cmluZy5zaW1wbGlmeVdoaXRlU3BhY2UoKS50b0RvdWJsZSgmY2FuQ29udmVydCk7CiAgICAgICAg
ICAgICBpZiAoY2FuQ29udmVydCkKICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAg
ICAgICAgICByZXR1cm4gTkFOOwpAQCAtMTMwLDExICs5OCwxMSBAQCBTdHJpbmcgVmFsdWU6OnRv
U3RyaW5nKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgICAgICBjYXNlIE5v
ZGVTZXRWYWx1ZToKLSAgICAgICAgICAgIGlmIChtX25vZGVTZXQuaXNFbXB0eSgpKSAKKyAgICAg
ICAgICAgIGlmIChtX2RhdGEtPm1fbm9kZVNldC5pc0VtcHR5KCkpIAogICAgICAgICAgICAgICAg
IHJldHVybiAiIjsKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShtX25vZGVTZXQuZmly
c3ROb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlKG1fZGF0YS0+bV9ub2Rl
U2V0LmZpcnN0Tm9kZSgpKTsKICAgICAgICAgY2FzZSBTdHJpbmdWYWx1ZToKLSAgICAgICAgICAg
IHJldHVybiBtX3N0cmluZzsKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPm1fc3RyaW5nOwog
ICAgICAgICBjYXNlIE51bWJlclZhbHVlOgogICAgICAgICAgICAgaWYgKGlzbmFuKG1fbnVtYmVy
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gIk5hTiI7CkluZGV4OiBXZWJDb3JlL3htbC9YUGF0
aFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhWYWx1ZS5oCShyZXZpc2lv
biAyMDU1MykKKysrIFdlYkNvcmUveG1sL1hQYXRoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsMjAgKzM2LDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIG5hbWVzcGFjZSBYUGF0
aCB7CiAgICAgCisgICAgICAgIGNsYXNzIFZhbHVlRGF0YSA6IHB1YmxpYyBTaGFyZWQ8VmFsdWVE
YXRhPiB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFZhbHVlRGF0YSgpIHt9CisgICAg
ICAgICAgICBWYWx1ZURhdGEoY29uc3QgTm9kZVNldCYgbm9kZVNldCkgOiBtX25vZGVTZXQobm9k
ZVNldCkge30KKyAgICAgICAgICAgIFZhbHVlRGF0YShjb25zdCBTdHJpbmcmIHN0cmluZykgOiBt
X3N0cmluZyhzdHJpbmcpIHt9CisKKyAgICAgICAgICAgIE5vZGVTZXQgbV9ub2RlU2V0OworICAg
ICAgICAgICAgU3RyaW5nIG1fc3RyaW5nOworICAgICAgICB9OworCisgICAgICAgIC8vIENvcHlp
bmcgVmFsdWUgb2JqZWN0cyBtYWtlcyB0aGVpciBkYXRhIHBhcnRpYWxseSBzaGFyZWQsIHNvIGNh
cmUgaGFzIHRvIGJlIHRha2VuIHdoZW4gZGVhbGluZyB3aXRoIGNvcGllcy4KICAgICAgICAgY2xh
c3MgVmFsdWUgewogICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICBlbnVtIFR5cGUgeyBOb2Rl
U2V0VmFsdWUsIEJvb2xlYW5WYWx1ZSwgTnVtYmVyVmFsdWUsIFN0cmluZ1ZhbHVlIH07CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIFZhbHVlKCk7Ci0gICAgICAgICAgICBWYWx1ZShOb2RlKik7
Ci0gICAgICAgICAgICBWYWx1ZShjb25zdCBOb2RlU2V0Jik7Ci0gICAgICAgICAgICBWYWx1ZShi
b29sKTsKLSAgICAgICAgICAgIFZhbHVlKHVuc2lnbmVkKTsKLSAgICAgICAgICAgIFZhbHVlKHVu
c2lnbmVkIGxvbmcpOwotICAgICAgICAgICAgVmFsdWUoZG91YmxlKTsKLSAgICAgICAgICAgIFZh
bHVlKGNvbnN0IGNoYXIqKTsKLSAgICAgICAgICAgIFZhbHVlKGNvbnN0IFN0cmluZyYpOwotICAg
ICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZSh1bnNpZ25lZCB2YWx1ZSkgOiBtX3R5cGUoTnVt
YmVyVmFsdWUpLCBtX251bWJlcih2YWx1ZSkge30KKyAgICAgICAgICAgIFZhbHVlKHVuc2lnbmVk
IGxvbmcgdmFsdWUpIDogbV90eXBlKE51bWJlclZhbHVlKSwgbV9udW1iZXIodmFsdWUpIHt9Cisg
ICAgICAgICAgICBWYWx1ZShkb3VibGUgdmFsdWUpIDogbV90eXBlKE51bWJlclZhbHVlKSwgbV9u
dW1iZXIodmFsdWUpIHt9CisKKyAgICAgICAgICAgIFZhbHVlKGNvbnN0IGNoYXIqIHZhbHVlKSA6
IG1fdHlwZShTdHJpbmdWYWx1ZSksIG1fZGF0YShuZXcgVmFsdWVEYXRhKHZhbHVlKSkge30KKyAg
ICAgICAgICAgIFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpIDogbV90eXBlKFN0cmluZ1ZhbHVl
KSwgbV9kYXRhKG5ldyBWYWx1ZURhdGEodmFsdWUpKSB7fQorICAgICAgICAgICAgVmFsdWUoY29u
c3QgTm9kZVNldCYgdmFsdWUpIDogbV90eXBlKE5vZGVTZXRWYWx1ZSksIG1fZGF0YShuZXcgVmFs
dWVEYXRhKHZhbHVlKSkge30KKyAgICAgICAgICAgIFZhbHVlKE5vZGUqIHZhbHVlKSA6IG1fdHlw
ZShOb2RlU2V0VmFsdWUpLCBtX2RhdGEobmV3IFZhbHVlRGF0YSkgeyBtX2RhdGEtPm1fbm9kZVNl
dC5hcHBlbmQodmFsdWUpOyB9CisKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIHNh
ZmVseSBpbXBsZW1lbnQgY29uc3RydWN0aW5nIGZyb20gYm9vbCAtIHdpdGggbm9ybWFsIGZ1bmN0
aW9uIG92ZXJsb2FkaW5nLCBhbnkgcG9pbnRlciB0eXBlIHdvdWxkIG1hdGNoLgorICAgICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVmFsdWUoVCk7CisKKyAgICAgICAgICAgIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgQWRvcHRUYWcge30gYWRvcHQ7CisgICAgICAgICAgICBWYWx1ZShOb2RlU2V0
JiB2YWx1ZSwgY29uc3QgQWRvcHRUYWcmKSA6IG1fdHlwZShOb2RlU2V0VmFsdWUpLCBtX2RhdGEo
bmV3IFZhbHVlRGF0YSkgeyB2YWx1ZS5zd2FwKG1fZGF0YS0+bV9ub2RlU2V0KTsgfQorCiAgICAg
ICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAogICAgICAgICAg
ICAgYm9vbCBpc05vZGVTZXQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gTm9kZVNldFZhbHVl
OyB9CkBAIC01NywxOSArNzMsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAg
Ym9vbCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBOdW1iZXJWYWx1ZTsgfQog
ICAgICAgICAgICAgYm9vbCBpc1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBTdHJp
bmdWYWx1ZTsgfQogCi0gICAgICAgICAgICBjb25zdCBOb2RlU2V0JiB0b05vZGVTZXQoKSBjb25z
dDsgICAgCisgICAgICAgICAgICBjb25zdCBOb2RlU2V0JiB0b05vZGVTZXQoKSBjb25zdDsKKyAg
ICAgICAgICAgIE5vZGVTZXQmIG1vZGlmaWFibGVOb2RlU2V0KCk7CiAgICAgICAgICAgICBib29s
IHRvQm9vbGVhbigpIGNvbnN0OwogICAgICAgICAgICAgZG91YmxlIHRvTnVtYmVyKCkgY29uc3Q7
CiAgICAgICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKLSAgICAgICAgICAgIAorCiAg
ICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBUeXBlIG1fdHlwZTsKLSAgICAgICAgICAgIE5v
ZGVTZXQgbV9ub2RlU2V0OwogICAgICAgICAgICAgYm9vbCBtX2Jvb2w7CiAgICAgICAgICAgICBk
b3VibGUgbV9udW1iZXI7Ci0gICAgICAgICAgICBTdHJpbmcgbV9zdHJpbmc7CisgICAgICAgICAg
ICBSZWZQdHI8VmFsdWVEYXRhPiBtX2RhdGE7CiAgICAgICAgIH07CiAKKyAgICAgICAgdGVtcGxh
dGU8PgorICAgICAgICBpbmxpbmUgVmFsdWU6OlZhbHVlKGJvb2wgdmFsdWUpCisgICAgICAgICAg
ICA6IG1fdHlwZShCb29sZWFuVmFsdWUpCisgICAgICAgICAgICAsIG1fYm9vbCh2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICB9CiAgICAgfQogfQogCg==
</data>
<flag name="review"
          id="5575"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>