<?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>8333</bug_id>
          
          <creation_ts>2006-04-11 17:11:08 -0700</creation_ts>
          <short_desc>Blank lines are not properly created when &lt;pre&gt; is used</short_desc>
          <delta_ts>2006-04-14 01:11:25 -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>HTML Editing</component>
          <version>420+</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>38984</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-11 17:11:08 -0700</bug_when>
    <thetext>In our current code, when an empty line is encountered in a &lt;pre&gt; block, we do not actually create a line.  This causes a whole slew of bugs.  Here&apos;s an example:

&lt;div contenteditable style=&quot;white-space:pre&quot;&gt;One


Two
&lt;/div&gt;

Put your caret in the word One.  Start navigating to the word Two using the right arrow.  Instead of having the caret move through each blank line, it just jumps right from the word One to the word Two.

Now try selecting the word Two.  You&apos;ll see that it gets a crazy selection height that extends all the way up to the bottom of the word One.

These problems all occur because newlines on blank lines are completely skipped.  Instead of creating actual lines, we just throw in this &quot;strut space.&quot;  We need to be making lines instead and making blank lines in &lt;pre&gt;s more like blank lines with &lt;br&gt;s on them in the normal case.

In other words the newline is going to need to make a line box.  I think a good way to do this cleanly will be to create a new class of inline box, e.g., a BreakBox and to really refactor &lt;br&gt; and newlines to make this special box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38985</commentid>
    <comment_count>1</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-11 17:12:16 -0700</bug_when>
    <thetext>This problem is quite serious, as it makes even selection in bugzilla (and highlighting of Find results) look awful.  It&apos;s not just an editing issue.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38986</commentid>
    <comment_count>2</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-11 19:31:02 -0700</bug_when>
    <thetext>The newlines must be rendered.  Here&apos;s an example that illustrates how the newline needs to be considered, since it could affect the height of the blank line!

&lt;pre&gt;One&lt;span style=&quot;font-size:72px&quot;&gt;
Two&lt;/span&lt;/pre&gt;

Our code that does the &quot;skip&quot; doesn&apos;t use the style of the newline.  It uses the line-height of the block.  The newline needs to receive a box so that line boxes will be constructed for all the intermediate inline flows that could wrap that newline.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38987</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-11 19:31:54 -0700</bug_when>
    <thetext>I think that as much as possible we need to unify the code for &lt;br&gt; and preserved newlines, giving them the same kind of box.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39020</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2006-04-12 04:04:14 -0700</bug_when>
    <thetext>*** Bug 6432 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39078</commentid>
    <comment_count>5</comment_count>
      <attachid>7664</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-12 16:27:53 -0700</bug_when>
    <thetext>Created attachment 7664
Patch that includes newlines in the text boxes.

So here&apos;s an initial interesting cut.  All I did was made newlines get included as part of the line.  The break will be incremented to move past the newline (similar to what we do with &lt;br&gt;s).

The reason I find this interesting is that if we patch text rendering to know that it should ignore newlines from &quot;preserveNewline&quot; white-space, then I think this may just work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39080</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-12 16:43:53 -0700</bug_when>
    <thetext>I think I want to keep hacks out of the text renderer though, so I&apos;m going to try using the midpoint stuff to separate single newline characters into self-contained runs.  That way I can special case the boxes that they make (like brs do).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39196</commentid>
    <comment_count>7</comment_count>
      <attachid>7683</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-13 15:13:37 -0700</bug_when>
    <thetext>Created attachment 7683
Getting closer.

This patch gets newlines working as separate boxes and adds an isLineBreak function to line boxes that is true for &lt;br&gt; boxes or for newline boxes.  It also gets left/right caret navigation working properly.  Up/down caret navigation is still finding the wrong visible position though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39201</commentid>
    <comment_count>8</comment_count>
      <attachid>7690</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-13 17:29:01 -0700</bug_when>
    <thetext>Created attachment 7690
Almost. Fail one test.

This patch is pretty complete.  I fail only one layout test.  The problem is I don&apos;t really understand the code behind the test (it&apos;s about merging of blocks).

editing/deleting/merge-whitespace-pre.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39214</commentid>
    <comment_count>9</comment_count>
      <attachid>7696</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-13 23:42:22 -0700</bug_when>
    <thetext>Created attachment 7696
Patch for review.

Here is a patch for review.  This patch also turns off all of the layout test hacks (and so it changes every single layout test in the tree).

I should make a general comment about the merge-whitespace-pre.html test.  After spending about 5 hours on the problem, I have decided to go ahead and check in updated results for the test.  The current rendering is already buggy (the layout test is demonstrating an unfixed bug).  My patch does make the rendering worse, but the reason it does is that much of the editing code simply doesn&apos;t know how to deal properly with preserved newlines yet.

The deletion issue has to do with the fact that a placeholder doesn&apos;t get made once newlines are rendered positions and so you hit code that already has a FIXME...

// FIXME: Deletion has bugs and it doesn&apos;t always add a placeholder.  If it fails, still do pruning.
    else
        prune(placeholder);

The layout test in question is already badly broken.  If you hit enter in newline-preserving content (like white-space: pre) we are doubling the spacing between lines.  I think the code is so confused that it is splitting the &lt;pre&gt; block (which has margins on it by default).

Deletion that crosses white-space boundaries also doesn&apos;t handle the fact that line breaks are different (&lt;br&gt;s in some cases and preserved newlines in others).  This has to be dealt with when merging blocks.  Many of the places in the editing code that deal with &lt;br&gt;s simply don&apos;t know what to make of preserved newlines.  This was true both before and after my patch.

The upshot is that editing of preformatted text is in a sorry state. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39220</commentid>
    <comment_count>10</comment_count>
      <attachid>7696</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-04-14 00:16:46 -0700</bug_when>
    <thetext>Comment on attachment 7696
Patch for review.

Made some comments over irc.

I suggest you find a way to turn this into an static inline function:

+                        if (!stoppedIgnoringSpaces &amp;&amp; pos &gt; 0) {
+                            // We need to stop right before the newline and then start up again.
+                            BidiIterator midpoint(0, o, pos);
+                            addMidpoint(BidiIterator(0, o, pos-1)); // Stop
+                            addMidpoint(BidiIterator(0, o, pos)); // Start
+                        }

Also, there is no way for me to address the question of whether your test changes here are sane or not, so I&apos;ll just have to trust you there.

You might still want someone else more familiar with this code to review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>39230</commentid>
    <comment_count>11</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-04-14 01:11:25 -0700</bug_when>
    <thetext>Fixed.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7664</attachid>
            <date>2006-04-12 16:27:53 -0700</date>
            <delta_ts>2006-04-13 15:13:37 -0700</delta_ts>
            <desc>Patch that includes newlines in the text boxes.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>1886</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcmluZy9iaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvYmlkaS5j
cHAJKHJldmlzaW9uIDEzODI0KQorKysgcmVuZGVyaW5nL2JpZGkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OSw3ICs5OSw2IEBACiAKIHN0YXRpYyBib29sIGlzTGluZUVtcHR5ID0gdHJ1ZTsKIHN0
YXRpYyBib29sIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7Ci1zdGF0aWMgYm9vbCBz
a2lwVHJhaWxpbmdOZXdsaW5lID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBlbXB0eVJ1biA9IHRydWU7
CiBzdGF0aWMgaW50IG51bVNwYWNlczsKIApAQCAtMTYyOCw3ICsxNjI3LDcgQEAKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoZW5kID09IHN0YXJ0IHx8IHNraXBUcmFpbGluZ05ld2xpbmUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgIGJp
ZGkuYWRqdXN0RW1iZWRkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgZW5kLmluY3Jl
bWVudChiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSBm
YWxzZTsKQEAgLTE5NzIsNyArMTk3MSw2IEBACiAKICAgICBib29sIHByZXZMaW5lQnJva2VDbGVh
bmx5ID0gcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5OwogICAgIHByZXZpb3VzTGluZUJyb2tlQ2xl
YW5seSA9IGZhbHNlOwotICAgIHNraXBUcmFpbGluZ05ld2xpbmUgPSBmYWxzZTsKICAgICAKICAg
ICB3aGlsZSAobykgewogICAgICAgICBpZiAoby0+aXNCUigpKSB7CkBAIC0yMjQ3LDggKzIyNDUs
OCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsQnJlYWsub2Jq
ICYmIGxCcmVhay5vYmotPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpICYmIGxCcmVhay5vYmot
PmlzVGV4dCgpICYmIHN0YXRpY19jYXN0PFJlbmRlclRleHQqPihsQnJlYWsub2JqKS0+dGV4dCgp
W2xCcmVhay5wb3NdID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bEJyZWFrLmluY3JlbWVudChiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2tpcFRyYWlsaW5nTmV3bGluZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOyAvLyBEaWRu
J3QgZml0LiBKdW1wIHRvIHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewpAQCAtMjI2Myw4ICsyMjYxLDggQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xu
JyAmJiBvLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgbEJyZWFrLm9iaiA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsucG9z
ID0gcG9zOworICAgICAgICAgICAgICAgICAgICAgICAgbEJyZWFrLmluY3JlbWVudChiaWRpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBza2lwVHJhaWxpbmdOZXdsaW5lID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsQnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7683</attachid>
            <date>2006-04-13 15:13:37 -0700</date>
            <delta_ts>2006-04-13 23:42:22 -0700</delta_ts>
            <desc>Getting closer.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>10086</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaAkocmV2aXNpb24gMTM4MjQpCisrKyByZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw4IEBACiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyVHJ1bmNhdGlvbigpIHsgbV90cnVuY2F0aW9uID0gY05vVHJ1bmNhdGlvbjsgfQogICAg
IHZpcnR1YWwgaW50IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGlu
dCBlbGxpcHNpc1dpZHRoLCBib29sJiBmb3VuZEJveCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNM
aW5lQnJlYWsoKSBjb25zdDsKKwogICAgIC8vIE92ZXJsb2FkZWQgbmV3IG9wZXJhdG9yLiAgRGVy
aXZlZCBjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgb3BlcmF0b3IgbmV3CiAgICAgLy8gaW4gb3JkZXIg
dG8gYWxsb2NhdGUgb3V0IG9mIHRoZSBSZW5kZXJBcmVuYS4KICAgICB2b2lkKiBvcGVyYXRvciBu
ZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpIHRocm93KCk7ICAgIApJbmRl
eDogcmVuZGVyaW5nL2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9iaWRpLmNwcAko
cmV2aXNpb24gMTM4MjQpCisrKyByZW5kZXJpbmcvYmlkaS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk5LDcgKzk5LDYgQEAKIAogc3RhdGljIGJvb2wgaXNMaW5lRW1wdHkgPSB0cnVlOwogc3RhdGlj
IGJvb2wgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZTsKLXN0YXRpYyBib29sIHNraXBU
cmFpbGluZ05ld2xpbmUgPSBmYWxzZTsKIHN0YXRpYyBib29sIGVtcHR5UnVuID0gdHJ1ZTsKIHN0
YXRpYyBpbnQgbnVtU3BhY2VzOwogCkBAIC04NTIsOSArODUxLDEwIEBACiAgICAgQmlkaVJ1biog
ciA9IDA7CiAgICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5nID0gZmFsc2U7CiAgICAgZm9yIChyID0g
c0ZpcnN0QmlkaVJ1bjsgcjsgciA9IHItPm5leHRSdW4pIHsKLSAgICAgICAgaWYgKCFyLT5ib3gg
fHwgci0+b2JqLT5pc1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgaWYgKCFyLT5ib3ggfHwgci0+b2Jq
LT5pc1Bvc2l0aW9uZWQoKSB8fCByLT5ib3gtPmlzTGluZUJyZWFrKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsgLy8gUG9zaXRpb25lZCBvYmplY3RzIGFyZSBvbmx5IHBhcnRpY2lwYXRpbmcgdG8g
ZmlndXJlIG91dCB0aGVpcgogICAgICAgICAgICAgICAgICAgICAgIC8vIGNvcnJlY3Qgc3RhdGlj
IHggcG9zaXRpb24uICBUaGV5IGhhdmUgbm8gZWZmZWN0IG9uIHRoZSB3aWR0aC4KKyAgICAgICAg
ICAgICAgICAgICAgICAvLyBTaW1pbGFybHksIGxpbmUgYnJlYWsgYm94ZXMgaGF2ZSBubyBlZmZl
Y3Qgb24gdGhlIHdpZHRoLgogICAgICAgICBpZiAoci0+b2JqLT5pc1RleHQoKSkgewogICAgICAg
ICAgICAgUmVuZGVyVGV4dCAqcnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHItPm9iaik7
CiAgICAgICAgICAgICBpbnQgdGV4dFdpZHRoID0gcnQtPndpZHRoKHItPnN0YXJ0LCByLT5zdG9w
LXItPnN0YXJ0LCB0b3RXaWR0aCwgbV9maXJzdExpbmUpOwpAQCAtMTYyOCw3ICsxNjI4LDcgQEAK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoZW5kID09IHN0YXJ0IHx8IHNraXBUcmFpbGluZ05ld2xp
bmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgICAgICAgICAg
ICAgICAgIGJpZGkuYWRqdXN0RW1iZWRkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ZW5kLmluY3JlbWVudChiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgYmlkaS5hZGp1c3RFbWJl
ZGRpbmcgPSBmYWxzZTsKQEAgLTE5NzIsNyArMTk3Miw2IEBACiAKICAgICBib29sIHByZXZMaW5l
QnJva2VDbGVhbmx5ID0gcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5OwogICAgIHByZXZpb3VzTGlu
ZUJyb2tlQ2xlYW5seSA9IGZhbHNlOwotICAgIHNraXBUcmFpbGluZ05ld2xpbmUgPSBmYWxzZTsK
ICAgICAKICAgICB3aGlsZSAobykgewogICAgICAgICBpZiAoby0+aXNCUigpKSB7CkBAIC0yMTg0
LDYgKzIxODMsNyBAQAogICAgICAgICAgICAgICAgIGJvb2wgbWlkV29yZEJyZWFrID0gYnJlYWtX
b3JkcyAmJiAodyArIHdyYXBXID4gd2lkdGgpOwogCiAgICAgICAgICAgICAgICAgaWYgKGMgPT0g
J1xuJyB8fCAoby0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpICE9IFBSRSAmJiBpc0JyZWFrYWJsZShz
dHIsIHBvcywgc3RybGVuLCBuZXh0QnJlYWthYmxlLCBicmVha05CU1ApKSB8fCBtaWRXb3JkQnJl
YWspIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBzdG9wcGVkSWdub3JpbmdTcGFjZXMgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlnbm9yaW5nU3BhY2VzKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCBpZ25vcmluZyBzcGFjZXMgYW5kIGJlZ2luIGF0
IHRoaXMKQEAgLTIxOTMsNiArMjE5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGFzdFNwYWNlID0gcG9zOyAvLyBlLmcuLCAiRm9vICAgIGdvbyIsIGRvbid0IGFkZCBpbiBhbnkg
b2YgdGhlIGlnbm9yZWQgc3BhY2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlJ
dGVyYXRvciBzdGFydE1pZCAoIDAsIG8sIHBvcyApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZE1pZHBvaW50KHN0YXJ0TWlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dG9wcGVkSWdub3JpbmdTcGFjZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKdXN0IGtlZXAgaWdub3Jpbmcg
dGhlc2Ugc3BhY2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcysrOwpAQCAtMjI0
Nyw4ICsyMjQ4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGxCcmVhay5vYmogJiYgbEJyZWFrLm9iai0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYg
bEJyZWFrLm9iai0+aXNUZXh0KCkgJiYgc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCo+KGxCcmVhay5v
YmopLT50ZXh0KClbbEJyZWFrLnBvc10gPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXN0b3BwZWRJZ25vcmluZ1NwYWNlcyAmJiBwb3MgPiAwKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN0b3AgcmlnaHQg
YmVmb3JlIHRoZSBuZXdsaW5lIGFuZCB0aGVuIHN0YXJ0IHVwIGFnYWluLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQmlkaUl0ZXJhdG9yIG1pZHBvaW50KDAsIG8sIHBvcyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChCaWRpSXRl
cmF0b3IoMCwgbywgcG9zLTEpKTsgLy8gU3RvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkTWlkcG9pbnQoQmlkaUl0ZXJhdG9yKDAsIG8sIHBvcykpOyAvLyBTdGFydAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxCcmVhay5pbmNyZW1lbnQoYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNraXBUcmFpbGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVu
ZDsgLy8gRGlkbid0IGZpdC4gSnVtcCB0byB0aGUgZW5kLgogICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKQEAgLTIyNjEsMTAgKzIyNjgsMTYgQEAKICAgICAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdcbicgJiYgby0+c3R5bGUoKS0+cHJl
c2VydmVOZXdsaW5lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RvcHBlZEln
bm9yaW5nU3BhY2VzICYmIHBvcyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRvIHN0b3AgcmlnaHQgYmVmb3JlIHRoZSBuZXdsaW5lIGFuZCB0aGVuIHN0YXJ0
IHVwIGFnYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlJdGVyYXRvciBtaWRw
b2ludCgwLCBvLCBwb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50
KEJpZGlJdGVyYXRvcigwLCBvLCBwb3MtMSkpOyAvLyBTdG9wCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkTWlkcG9pbnQoQmlkaUl0ZXJhdG9yKDAsIG8sIHBvcykpOyAvLyBTdGFydAor
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgbEJyZWFr
Lm9iaiA9IG87CiAgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsucG9zID0gcG9zOworICAg
ICAgICAgICAgICAgICAgICAgICAgbEJyZWFrLmluY3JlbWVudChiaWRpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBza2lwVHJhaWxpbmdOZXdsaW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBsQnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KIApJbmRleDog
cmVuZGVyaW5nL1JlbmRlckJSLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJSLmgJ
KHJldmlzaW9uIDEzODI0KQorKysgcmVuZGVyaW5nL1JlbmRlckJSLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDkgKzUzLDYgQEAKIAogICAgIC8vIG92ZXJyaWRlcwogICAgIHZpcnR1YWwgSW5saW5l
Qm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCwgYm9vbCwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7
Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpIHt9Ci0gICAgdmlydHVhbCBpbnQg
bWluV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCBpbnQgbWF4V2lkdGgo
KSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNCUigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIApAQCAtNjQsNyArNjEsNiBAQAogICAgIHZpcnR1YWwgdW5zaWduZWQg
Y2FyZXRNYXhSZW5kZXJlZE9mZnNldCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uRm9yQ29vcmRpbmF0ZXMoaW50IHgsIGludCB5KTsKLSAgICB2aXJ0
dWFsIEludFJlY3QgY2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSA9IFVQ
U1RSRUFNLCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwogCiAgICAgdmlydHVhbCBJ
bmxpbmVCb3ggKmlubGluZUJveChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkgPSBVUFNU
UkVBTSk7CiAgICAgCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2xpbmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvcmVuZGVyX2xpbmUuaAkocmV2aXNpb24gMTM4MjQpCisrKyByZW5kZXJpbmcv
cmVuZGVyX2xpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQAogICAgIHZpcnR1
YWwgdm9pZCBleHRyYWN0TGluZSgpOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMaW5lKCk7CiAK
KyAgICB2aXJ0dWFsIGJvb2wgaXNMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFBvc2l0aW9uKGludCBkeCwgaW50IGR5KTsKIAogICAg
IHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwg
aW50IF90eSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQlIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJCUi5jcHAJKHJldmlzaW9uIDEzODI0KQorKysgcmVuZGVyaW5nL1JlbmRl
ckJSLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDIyICsxMDcsNiBAQAogICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oZWxlbWVudCgpLCAwLCBET1dOU1RSRUFNKTsKIH0KIAotSW50UmVjdCBS
ZW5kZXJCUjo6Y2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSwgaW50ICpl
eHRyYVdpZHRoVG9FbmRPZkxpbmUpCi17Ci0gICAgLy8gRURJVCBGSVhNRTogVGhpcyBkb2VzIG5v
dCB3b3JrIHlldC4gU29tZSBvdGhlciBjaGFuZ2VzIGFyZSBuZWVkIGJlZm9yZQotICAgIC8vIGFu
IGFjY3VyYXRlIHBvc2l0aW9uIGNhbiBiZSBkZXRlcm1pbmVkLgotCi0gICAgaW50IGFic3gsIGFi
c3k7Ci0gICAgYWJzb2x1dGVQb3NpdGlvbihhYnN4LCBhYnN5KTsKLQotICAgIGlmIChleHRyYVdp
ZHRoVG9FbmRPZkxpbmUpCi0gICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCgpIC0geFBvcygpOwotIAotICAgIC8vIEZJWE1FOiBhbiBvbGRlciB2ZXJz
aW9uIG9mIHRoaXMgY29kZSB3YXNuJ3Qgc2V0dGluZyB3aWR0aCBhdAotICAgIC8vIGFsbCwgdXNp
bmcgdGhlIGRlZmF1bHQgb2YgMS4uLgotICAgIHJldHVybiBJbnRSZWN0KHhQb3MoKSArIGFic3gs
IHlQb3MoKSArIGFic3ksIDEsIGxpbmVIZWlnaHQoZmFsc2UpKTsKLX0KLQogSW5saW5lQm94ICpS
ZW5kZXJCUjo6aW5saW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKICAg
ICByZXR1cm4gZmlyc3RUZXh0Qm94KCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxMzgyNCkK
KysrIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDEwICsz
NDksNyBAQAogYm9vbCBSZW5kZXJUZXh0OjphdExpbmVXcmFwKElubGluZVRleHRCb3ggKmJveCwg
aW50IG9mZnNldCkKIHsKICAgICBpZiAoYm94LT5uZXh0VGV4dEJveCgpICYmICFib3gtPm5leHRP
bkxpbmUoKSAmJiBvZmZzZXQgPT0gYm94LT5tX3N0YXJ0ICsgYm94LT5tX2xlbikgewotICAgICAg
ICAvLyBUYWtlIHNwZWNpYWwgY2FyZSBiZWNhdXNlIGluIHByZWZvcm1hdHRlZCB0ZXh0LCB0aGUg
bmV3bGluZXMKLSAgICAgICAgLy8gYXJlIGluIGJldHdlZW4gdGhlIHRleHQgYm94ZXMgKGkuZS4g
bm90IGluIGFueSBib3gncyBtX3N0YXJ0Ci0gICAgICAgIC8vIHRocnUgbV9zdGFydCttX2xlbi0x
KSwgZXZlbiB0aG91Z2ggdGhleSBhcmUgcmVuZGVyZWQuCi0gICAgICAgIGlmICghc3R5bGUoKS0+
cHJlc2VydmVOZXdsaW5lKCkgfHwgKCpzdHIpW29mZnNldF0gIT0gJ1xuJykKKyAgICAgICAgaWYg
KCFzdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSB8fCBib3gtPmlzTGluZUJyZWFrKCkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC01ODcsNyArNTg0LDcgQEAKICAg
ICBtX21pbldpZHRoID0gbV9iZWdpbk1pbldpZHRoID0gbV9lbmRNaW5XaWR0aCA9IDA7CiAgICAg
bV9tYXhXaWR0aCA9IDA7CiAKLSAgICBpZiAoaXNCUigpKQorICAgIGlmIChpc0JSKCkgfHwgKHN0
eWxlKCktPnByZXNlcnZlTmV3bGluZSgpICYmIGVxdWFsKHN0ci5nZXQoKSwgIlxuIikpKQogICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGludCBjdXJyTWluV2lkdGggPSAwOwpJbmRleDog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTM4MjQpCisrKyByZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw5ICsyMTYsMTQgQEAKICAgICByZXR1cm4gdGV4
dENvbG9yLmxpZ2h0KCk7CiB9CiAKK2Jvb2wgSW5saW5lVGV4dEJveDo6aXNMaW5lQnJlYWsoKSBj
b25zdAoreworICAgIHJldHVybiBvYmplY3QoKS0+aXNCUigpIHx8IChvYmplY3QoKS0+c3R5bGUo
KS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgbGVuKCkgPT0gMSAmJiAoKnRleHRPYmplY3QoKS0+c3Ry
aW5nKCkpW3N0YXJ0KCldID09ICdcbicpOworfQorCiBib29sIElubGluZVRleHRCb3g6Om5vZGVB
dFBvaW50KFJlbmRlck9iamVjdDo6Tm9kZUluZm8mIGksIGludCB4LCBpbnQgeSwgaW50IHR4LCBp
bnQgdHkpCiB7Ci0gICAgaWYgKG9iamVjdCgpLT5pc0JSKCkpCisgICAgaWYgKGlzTGluZUJyZWFr
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwg
dHkgKyBtX3ksIG1fd2lkdGgsIG1faGVpZ2h0KTsKQEAgLTIzMSw3ICsyMzYsNyBAQAogCiB2b2lk
IElubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgdHgs
IGludCB0eSkKIHsKLSAgICBpZiAob2JqZWN0KCktPmlzQlIoKSB8fCAhb2JqZWN0KCktPnNob3Vs
ZFBhaW50V2l0aGluUm9vdChpKSB8fCBvYmplY3QoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUgfHwKKyAgICBpZiAoaXNMaW5lQnJlYWsoKSB8fCAhb2JqZWN0KCktPnNob3VsZFBh
aW50V2l0aGluUm9vdChpKSB8fCBvYmplY3QoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUgfHwKICAgICAgICAgbV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbiB8fCBpLnBo
YXNlID09IFBhaW50UGhhc2VPdXRsaW5lKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC02OTEs
NiArNjk2LDkgQEAKIAogaW50IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBv
ZmZzZXQpIGNvbnN0CiB7CisgICAgaWYgKGlzTGluZUJyZWFrKCkpCisgICAgICAgIHJldHVybiBt
X3g7CisKICAgICBSZW5kZXJUZXh0ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPiht
X29iamVjdCk7CiAgICAgY29uc3QgRm9udCAqZiA9IHRleHQtPmZvbnQobV9maXJzdExpbmUpOwog
ICAgIGludCBmcm9tID0gbV9yZXZlcnNlZCA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwpJbmRleDog
ZG9tL1Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vUG9zaXRpb24uY3BwCShyZXZpc2lv
biAxMzgyNCkKKysrIGRvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMyw3ICs0
MzMsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoYm94ICE9IHRleHRSZW5kZXJlci0+bGFzdFRl
eHRCb3goKSAmJiAKLSAgICAgICAgICAgICAgICAgICAgICFib3gtPm5leHRPbkxpbmUoKSAmJiAK
KyAgICAgICAgICAgICAgICAgICAgICFib3gtPm5leHRPbkxpbmUoKSAmJgogICAgICAgICAgICAg
ICAgICAgICAgdGV4dE9mZnNldCA9PSBib3gtPnN0YXJ0KCkgKyBib3gtPmxlbigpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOwogICAgICAgICAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7690</attachid>
            <date>2006-04-13 17:29:01 -0700</date>
            <delta_ts>2006-04-13 23:42:22 -0700</delta_ts>
            <desc>Almost. Fail one test.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12952</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaAkocmV2aXNpb24gMTM4NjYpCisrKyByZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw4IEBACiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyVHJ1bmNhdGlvbigpIHsgbV90cnVuY2F0aW9uID0gY05vVHJ1bmNhdGlvbjsgfQogICAg
IHZpcnR1YWwgaW50IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGlu
dCBlbGxpcHNpc1dpZHRoLCBib29sJiBmb3VuZEJveCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNM
aW5lQnJlYWsoKSBjb25zdDsKKwogICAgIC8vIE92ZXJsb2FkZWQgbmV3IG9wZXJhdG9yLiAgRGVy
aXZlZCBjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgb3BlcmF0b3IgbmV3CiAgICAgLy8gaW4gb3JkZXIg
dG8gYWxsb2NhdGUgb3V0IG9mIHRoZSBSZW5kZXJBcmVuYS4KICAgICB2b2lkKiBvcGVyYXRvciBu
ZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpIHRocm93KCk7ICAgIApJbmRl
eDogcmVuZGVyaW5nL2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9iaWRpLmNwcAko
cmV2aXNpb24gMTM4NjYpCisrKyByZW5kZXJpbmcvYmlkaS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSw3ICsxMDEsNiBAQAogCiBzdGF0aWMgYm9vbCBpc0xpbmVFbXB0eSA9IHRydWU7CiBzdGF0
aWMgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVlOwotc3RhdGljIGJvb2wgc2tp
cFRyYWlsaW5nTmV3bGluZSA9IGZhbHNlOwogc3RhdGljIGJvb2wgZW1wdHlSdW4gPSB0cnVlOwog
c3RhdGljIGludCBudW1TcGFjZXM7CiAKQEAgLTg1NCw5ICs4NTMsMTAgQEAKICAgICBCaWRpUnVu
KiByID0gMDsKICAgICBib29sIG5lZWRzV29yZFNwYWNpbmcgPSBmYWxzZTsKICAgICBmb3IgKHIg
PSBzRmlyc3RCaWRpUnVuOyByOyByID0gci0+bmV4dFJ1bikgewotICAgICAgICBpZiAoIXItPmJv
eCB8fCByLT5vYmotPmlzUG9zaXRpb25lZCgpKQorICAgICAgICBpZiAoIXItPmJveCB8fCByLT5v
YmotPmlzUG9zaXRpb25lZCgpIHx8IHItPmJveC0+aXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOyAvLyBQb3NpdGlvbmVkIG9iamVjdHMgYXJlIG9ubHkgcGFydGljaXBhdGluZyB0
byBmaWd1cmUgb3V0IHRoZWlyCiAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVjdCBzdGF0
aWMgeCBwb3NpdGlvbi4gIFRoZXkgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHdpZHRoLgorICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSwgbGluZSBicmVhayBib3hlcyBoYXZlIG5vIGVm
ZmVjdCBvbiB0aGUgd2lkdGguCiAgICAgICAgIGlmIChyLT5vYmotPmlzVGV4dCgpKSB7CiAgICAg
ICAgICAgICBSZW5kZXJUZXh0ICpydCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4oci0+b2Jq
KTsKICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBydC0+d2lkdGgoci0+c3RhcnQsIHItPnN0
b3Atci0+c3RhcnQsIHRvdFdpZHRoLCBtX2ZpcnN0TGluZSk7CkBAIC0xNjMwLDcgKzE2MzAsNyBA
QAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChlbmQgPT0gc3RhcnQgfHwgc2tpcFRyYWlsaW5nTmV3
bGluZSkgeworICAgICAgICAgICAgICAgIGlmIChlbmQgPT0gc3RhcnQpIHsKICAgICAgICAgICAg
ICAgICAgICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBlbmQuaW5jcmVtZW50KGJpZGkpOwogICAgICAgICAgICAgICAgICAgICBiaWRpLmFkanVzdEVt
YmVkZGluZyA9IGZhbHNlOwpAQCAtMTk3NCw3ICsxOTc0LDYgQEAKIAogICAgIGJvb2wgcHJldkxp
bmVCcm9rZUNsZWFubHkgPSBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHk7CiAgICAgcHJldmlvdXNM
aW5lQnJva2VDbGVhbmx5ID0gZmFsc2U7Ci0gICAgc2tpcFRyYWlsaW5nTmV3bGluZSA9IGZhbHNl
OwogICAgIAogICAgIHdoaWxlIChvKSB7CiAgICAgICAgIGlmIChvLT5pc0JSKCkpIHsKQEAgLTIx
ODYsNiArMjE4NSw3IEBACiAgICAgICAgICAgICAgICAgYm9vbCBtaWRXb3JkQnJlYWsgPSBicmVh
a1dvcmRzICYmICh3ICsgd3JhcFcgPiB3aWR0aCk7CiAKICAgICAgICAgICAgICAgICBpZiAoYyA9
PSAnXG4nIHx8IChvLT5zdHlsZSgpLT53aGl0ZVNwYWNlKCkgIT0gUFJFICYmIGlzQnJlYWthYmxl
KHN0ciwgcG9zLCBzdHJsZW4sIG5leHRCcmVha2FibGUsIGJyZWFrTkJTUCkpIHx8IG1pZFdvcmRC
cmVhaykgeworICAgICAgICAgICAgICAgICAgICBib29sIHN0b3BwZWRJZ25vcmluZ1NwYWNlcyA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcklzU3BhY2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIGlnbm9yaW5nIHNwYWNlcyBhbmQgYmVnaW4g
YXQgdGhpcwpAQCAtMjE5NSw2ICsyMTk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0U3BhY2UgPSBwb3M7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRkIGluIGFu
eSBvZiB0aGUgaWdub3JlZCBzcGFjZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlk
aUl0ZXJhdG9yIHN0YXJ0TWlkICggMCwgbywgcG9zICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkTWlkcG9pbnQoc3RhcnRNaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3BwZWRJZ25vcmluZ1NwYWNlcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3Qga2VlcCBpZ25vcmlu
ZyB0aGVzZSBzcGFjZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zKys7CkBAIC0y
MjQ5LDggKzIyNTAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobEJyZWFrLm9iaiAmJiBsQnJlYWsub2JqLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAm
JiBsQnJlYWsub2JqLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obEJyZWFr
Lm9iaiktPnRleHQoKVtsQnJlYWsucG9zXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghc3RvcHBlZElnbm9yaW5nU3BhY2VzICYmIHBvcyA+IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3RvcCByaWdo
dCBiZWZvcmUgdGhlIG5ld2xpbmUgYW5kIHRoZW4gc3RhcnQgdXAgYWdhaW4uCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpSXRlcmF0b3IgbWlkcG9pbnQoMCwgbywgcG9z
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KEJpZGlJ
dGVyYXRvcigwLCBvLCBwb3MtMSkpOyAvLyBTdG9wCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRNaWRwb2ludChCaWRpSXRlcmF0b3IoMCwgbywgcG9zKSk7IC8vIFN0YXJ0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbEJyZWFrLmluY3JlbWVudChiaWRpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2tpcFRyYWlsaW5nTmV3bGluZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
ZW5kOyAvLyBEaWRuJ3QgZml0LiBKdW1wIHRvIHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewpAQCAtMjI2MywxMCArMjI3MCwxNiBAQAogICAgICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJyAmJiBvLT5zdHlsZSgpLT5w
cmVzZXJ2ZU5ld2xpbmUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG9wcGVk
SWdub3JpbmdTcGFjZXMgJiYgcG9zID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gc3RvcCByaWdodCBiZWZvcmUgdGhlIG5ld2xpbmUgYW5kIHRoZW4gc3Rh
cnQgdXAgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlkaUl0ZXJhdG9yIG1p
ZHBvaW50KDAsIG8sIHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9p
bnQoQmlkaUl0ZXJhdG9yKDAsIG8sIHBvcy0xKSk7IC8vIFN0b3AKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRNaWRwb2ludChCaWRpSXRlcmF0b3IoMCwgbywgcG9zKSk7IC8vIFN0YXJ0
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBsQnJl
YWsub2JqID0gbzsKICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5wb3MgPSBwb3M7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsuaW5jcmVtZW50KGJpZGkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNraXBUcmFpbGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGxCcmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogCkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyQlIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQlIu
aAkocmV2aXNpb24gMTM4NjYpCisrKyByZW5kZXJpbmcvUmVuZGVyQlIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsOSArNTMsNiBAQAogCiAgICAgLy8gb3ZlcnJpZGVzCiAgICAgdmlydHVhbCBJbmxp
bmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sLCBib29sLCBib29sIGlzT25seVJ1biA9IGZhbHNl
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCkge30KLSAgICB2aXJ0dWFsIGlu
dCBtaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBtYXhXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0JSKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCkBAIC02NCw3ICs2MSw2IEBACiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwotICAgIHZp
cnR1YWwgSW50UmVjdCBjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5ID0g
VVBTVFJFQU0sIGludCAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKICAgICB2aXJ0dWFs
IElubGluZUJveCAqaW5saW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSA9IFVQ
U1RSRUFNKTsKICAgICAKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfbGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9yZW5kZXJfbGluZS5oCShyZXZpc2lvbiAxMzg2NikKKysrIHJlbmRlcmlu
Zy9yZW5kZXJfbGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBACiAgICAgdmly
dHVhbCB2b2lkIGV4dHJhY3RMaW5lKCk7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaExpbmUoKTsK
IAorICAgIHZpcnR1YWwgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UG9zaXRpb24oaW50IGR4LCBpbnQgZHkpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4
LCBpbnQgX3R5KTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCUi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckJSLmNwcAkocmV2aXNpb24gMTM4NjYpCisrKyByZW5kZXJpbmcvUmVu
ZGVyQlIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMjIgKzEwNyw2IEBACiAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIDAsIERPV05TVFJFQU0pOwogfQogCi1JbnRSZWN0
IFJlbmRlckJSOjpjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5LCBpbnQg
KmV4dHJhV2lkdGhUb0VuZE9mTGluZSkKLXsKLSAgICAvLyBFRElUIEZJWE1FOiBUaGlzIGRvZXMg
bm90IHdvcmsgeWV0LiBTb21lIG90aGVyIGNoYW5nZXMgYXJlIG5lZWQgYmVmb3JlCi0gICAgLy8g
YW4gYWNjdXJhdGUgcG9zaXRpb24gY2FuIGJlIGRldGVybWluZWQuCi0KLSAgICBpbnQgYWJzeCwg
YWJzeTsKLSAgICBhYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFic3kpOwotCi0gICAgaWYgKGV4dHJh
V2lkdGhUb0VuZE9mTGluZSkKLSAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoKCkgLSB4UG9zKCk7Ci0gCi0gICAgLy8gRklYTUU6IGFuIG9sZGVyIHZl
cnNpb24gb2YgdGhpcyBjb2RlIHdhc24ndCBzZXR0aW5nIHdpZHRoIGF0Ci0gICAgLy8gYWxsLCB1
c2luZyB0aGUgZGVmYXVsdCBvZiAxLi4uCi0gICAgcmV0dXJuIEludFJlY3QoeFBvcygpICsgYWJz
eCwgeVBvcygpICsgYWJzeSwgMSwgbGluZUhlaWdodChmYWxzZSkpOwotfQotCiBJbmxpbmVCb3gg
KlJlbmRlckJSOjppbmxpbmVCb3goaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5KQogewog
ICAgIHJldHVybiBmaXJzdFRleHRCb3goKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEzODY2
KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsMTAg
KzM1MSw3IEBACiBib29sIFJlbmRlclRleHQ6OmF0TGluZVdyYXAoSW5saW5lVGV4dEJveCAqYm94
LCBpbnQgb2Zmc2V0KQogewogICAgIGlmIChib3gtPm5leHRUZXh0Qm94KCkgJiYgIWJveC0+bmV4
dE9uTGluZSgpICYmIG9mZnNldCA9PSBib3gtPm1fc3RhcnQgKyBib3gtPm1fbGVuKSB7Ci0gICAg
ICAgIC8vIFRha2Ugc3BlY2lhbCBjYXJlIGJlY2F1c2UgaW4gcHJlZm9ybWF0dGVkIHRleHQsIHRo
ZSBuZXdsaW5lcwotICAgICAgICAvLyBhcmUgaW4gYmV0d2VlbiB0aGUgdGV4dCBib3hlcyAoaS5l
LiBub3QgaW4gYW55IGJveCdzIG1fc3RhcnQKLSAgICAgICAgLy8gdGhydSBtX3N0YXJ0K21fbGVu
LTEpLCBldmVuIHRob3VnaCB0aGV5IGFyZSByZW5kZXJlZC4KLSAgICAgICAgaWYgKCFzdHlsZSgp
LT5wcmVzZXJ2ZU5ld2xpbmUoKSB8fCAoKnN0cilbb2Zmc2V0XSAhPSAnXG4nKQorICAgICAgICBp
ZiAoIXN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpIHx8IGJveC0+aXNMaW5lQnJlYWsoKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTM3MSw3ICszNjgsNyBAQAog
ICAgIGZvciAoYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJv
eCgpKSB7CiAgICAgICAgIGlmICgob2Zmc2V0ID49IGJveC0+bV9zdGFydCkgJiYgKG9mZnNldCA8
PSBib3gtPm1fc3RhcnQgKyBib3gtPm1fbGVuKSkgewogICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
ZG93bnN0cmVhbSBhZmZpbml0eSB3b3VsZCBtYWtlIHVzIG1vdmUgdG8gdGhlIG5leHQgbGluZS4K
LSAgICAgICAgICAgIGlmIChhZmZpbml0eSA9PSBET1dOU1RSRUFNICYmIGF0TGluZVdyYXAoYm94
LCBvZmZzZXQpKSB7CisgICAgICAgICAgICBpZiAoYXRMaW5lV3JhcChib3gsIG9mZnNldCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIG5leHQgdGV4dCBib3gKICAgICAgICAgICAgICAg
ICBib3ggPSBib3gtPm5leHRUZXh0Qm94KCk7CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94
LT5tX3N0YXJ0OwpAQCAtNTg5LDcgKzU4Niw3IEBACiAgICAgbV9taW5XaWR0aCA9IG1fYmVnaW5N
aW5XaWR0aCA9IG1fZW5kTWluV2lkdGggPSAwOwogICAgIG1fbWF4V2lkdGggPSAwOwogCi0gICAg
aWYgKGlzQlIoKSkKKyAgICBpZiAoaXNCUigpIHx8IChzdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUo
KSAmJiBlcXVhbChzdHIuZ2V0KCksICJcbiIpKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBpbnQgY3Vyck1pbldpZHRoID0gMDsKQEAgLTExMTEsNyArMTEwOCw3IEBACiB7CiAgICAg
Zm9yIChJbmxpbmVUZXh0Qm94ICpib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gt
Pm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgaWYgKG9mZnNldCA+PSBib3gtPm1fc3RhcnQgJiYg
b2Zmc2V0IDw9IGJveC0+bV9zdGFydCArIGJveC0+bV9sZW4pIHsKLSAgICAgICAgICAgIGlmIChh
ZmZpbml0eSA9PSBET1dOU1RSRUFNICYmIGF0TGluZVdyYXAoYm94LCBvZmZzZXQpKQorICAgICAg
ICAgICAgaWYgKGF0TGluZVdyYXAoYm94LCBvZmZzZXQpKQogICAgICAgICAgICAgICAgIHJldHVy
biBib3gtPm5leHRUZXh0Qm94KCk7CiAgICAgICAgICAgICByZXR1cm4gYm94OwogICAgICAgICB9
CkluZGV4OiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxMzg2NikKKysrIHJlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTEgKzc5LDE1IEBACiBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsK
ICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlID0gb2JqZWN0KCktPnNlbGVj
dGlvblN0YXRlKCk7Ci0gICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
cnQgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQgfHwKLSAgICAgICAgc3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoKSB7CisgICAgaWYgKHN0YXRlID09IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25FbmQgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoKSB7CiAgICAg
ICAgIGludCBzdGFydFBvcywgZW5kUG9zOwogICAgICAgICBvYmplY3QoKS0+c2VsZWN0aW9uU3Rh
cnRFbmQoc3RhcnRQb3MsIGVuZFBvcyk7CiAgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSdyZSBh
dCBhIGxpbmUgd3JhcCwgdGhlbiB0aGUgc2VsZWN0aW9uIGlzIGdvaW5nIHRvIGV4dGVuZCBvbnRv
IHRoZSBuZXh0IGxpbmUgKGFuZCB0aHVzIG5lZWRzIHRvIGJlIHRob3VnaHQgb2YgYXMKKyAgICAg
ICAgLy8gZXh0ZW5kaW5nIGJleW9uZCBvdXIgYm94LgorICAgICAgICBpZiAodGV4dE9iamVjdCgp
LT5hdExpbmVXcmFwKHRoaXMsIGVuZFBvcykpCisgICAgICAgICAgICBlbmRQb3MrKzsKKwogICAg
ICAgICBib29sIHN0YXJ0ID0gKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kICYm
IHN0YXJ0UG9zID49IG1fc3RhcnQgJiYgc3RhcnRQb3MgPCBtX3N0YXJ0ICsgbV9sZW4pOwogICAg
ICAgICBib29sIGVuZCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0ICYm
IGVuZFBvcyA+IG1fc3RhcnQgJiYgZW5kUG9zIDw9IG1fc3RhcnQgKyBtX2xlbik7CiAgICAgICAg
IGlmIChzdGFydCAmJiBlbmQpCkBAIC0yMTgsOSArMjIyLDE0IEBACiAgICAgcmV0dXJuIHRleHRD
b2xvci5saWdodCgpOwogfQogCitib29sIElubGluZVRleHRCb3g6OmlzTGluZUJyZWFrKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gb2JqZWN0KCktPmlzQlIoKSB8fCAob2JqZWN0KCktPnN0eWxlKCkt
PnByZXNlcnZlTmV3bGluZSgpICYmIGxlbigpID09IDEgJiYgKCp0ZXh0T2JqZWN0KCktPnN0cmlu
ZygpKVtzdGFydCgpXSA9PSAnXG4nKTsKK30KKwogYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQ
b2ludChSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiBpLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50
IHR5KQogewotICAgIGlmIChvYmplY3QoKS0+aXNCUigpKQorICAgIGlmIChpc0xpbmVCcmVhaygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBJbnRSZWN0IHJlY3QodHggKyBtX3gsIHR5
ICsgbV95LCBtX3dpZHRoLCBtX2hlaWdodCk7CkBAIC0yMzMsNyArMjQyLDcgQEAKIAogdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IHR4LCBp
bnQgdHkpCiB7Ci0gICAgaWYgKG9iamVjdCgpLT5pc0JSKCkgfHwgIW9iamVjdCgpLT5zaG91bGRQ
YWludFdpdGhpblJvb3QoaSkgfHwgb2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBW
SVNJQkxFIHx8CisgICAgaWYgKGlzTGluZUJyZWFrKCkgfHwgIW9iamVjdCgpLT5zaG91bGRQYWlu
dFdpdGhpblJvb3QoaSkgfHwgb2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJ
QkxFIHx8CiAgICAgICAgIG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRpb24gfHwgaS5waGFz
ZSA9PSBQYWludFBoYXNlT3V0bGluZSkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtNjgzLDYg
KzY5Miw5IEBACiAKIGludCBJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbihpbnQgX3gs
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CisgICAgaWYgKGlzTGluZUJyZWFr
KCkpCisgICAgICAgIHJldHVybiAwOworCiAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHN0YXRpY19j
YXN0PFJlbmRlclRleHQqPihtX29iamVjdCk7CiAgICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gdGV4
dC0+c3R5bGUobV9maXJzdExpbmUpOwogICAgIGNvbnN0IEZvbnQqIGYgPSAmc3R5bGUtPmZvbnQo
KTsKQEAgLTY5Myw2ICs3MDUsOSBAQAogCiBpbnQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JP
ZmZzZXQoaW50IG9mZnNldCkgY29uc3QKIHsKKyAgICBpZiAoaXNMaW5lQnJlYWsoKSkKKyAgICAg
ICAgcmV0dXJuIG1feDsKKwogICAgIFJlbmRlclRleHQgKnRleHQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0ICo+KG1fb2JqZWN0KTsKICAgICBjb25zdCBGb250ICpmID0gdGV4dC0+Zm9udChtX2Zp
cnN0TGluZSk7CiAgICAgaW50IGZyb20gPSBtX3JldmVyc2VkID8gb2Zmc2V0IC0gbV9zdGFydCA6
IDA7CkluZGV4OiBkb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9Qb3NpdGlvbi5j
cHAJKHJldmlzaW9uIDEzODY2KQorKysgZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDMyLDcgKzQzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9z
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChib3ggIT0gdGV4dFJlbmRl
cmVyLT5sYXN0VGV4dEJveCgpICYmIAotICAgICAgICAgICAgICAgICAgICAgIWJveC0+bmV4dE9u
TGluZSgpICYmIAorICAgICAgICAgICAgICAgICAgICAgIWJveC0+bmV4dE9uTGluZSgpICYmCiAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID09IGJveC0+c3RhcnQoKSArIGJveC0+bGVu
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CiAgICAgICAgICAg
ICAgICAgfQpJbmRleDoga3dxL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3
cS9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTM4NjYpCisrKyBrd3EvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw2ICsyNzksMTAgQEAKICAgICBpZiAo
by5pc1RleHQoKSAmJiAhby5pc0JSKCkpIHsKICAgICAgICAgY29uc3QgUmVuZGVyVGV4dCYgdGV4
dCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRleHQmPihvKTsKICAgICAgICAgZm9yIChJbmxp
bmVUZXh0Qm94KiBib3ggPSB0ZXh0LmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4
dFRleHRCb3goKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYW5vdGhlciBjb21w
YXRpYmlsaXR5IGZpeCB0byBwcmVzZXJ2ZSByZXN1bHRzLiAgSXQgd2lsbCBiZSByZW1vdmVkCisg
ICAgICAgICAgICAvLyBldmVudHVhbGx5LgorICAgICAgICAgICAgaWYgKGJveC0+aXNMaW5lQnJl
YWsoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQrMSk7CiAgICAgICAgICAgICB3cml0ZVRleHRSdW4odHMsIHRleHQsICpib3gp
OwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7696</attachid>
            <date>2006-04-13 23:42:22 -0700</date>
            <delta_ts>2006-04-14 00:16:46 -0700</delta_ts>
            <desc>Patch for review.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17513</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaAkocmV2aXNpb24gMTM4NjYpCisrKyByZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw4IEBACiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyVHJ1bmNhdGlvbigpIHsgbV90cnVuY2F0aW9uID0gY05vVHJ1bmNhdGlvbjsgfQogICAg
IHZpcnR1YWwgaW50IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGlu
dCBlbGxpcHNpc1dpZHRoLCBib29sJiBmb3VuZEJveCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNM
aW5lQnJlYWsoKSBjb25zdDsKKwogICAgIC8vIE92ZXJsb2FkZWQgbmV3IG9wZXJhdG9yLiAgRGVy
aXZlZCBjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgb3BlcmF0b3IgbmV3CiAgICAgLy8gaW4gb3JkZXIg
dG8gYWxsb2NhdGUgb3V0IG9mIHRoZSBSZW5kZXJBcmVuYS4KICAgICB2b2lkKiBvcGVyYXRvciBu
ZXcoc2l6ZV90IHN6LCBSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEpIHRocm93KCk7ICAgIApJbmRl
eDogcmVuZGVyaW5nL2JpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9iaWRpLmNwcAko
cmV2aXNpb24gMTM4NjYpCisrKyByZW5kZXJpbmcvYmlkaS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSw3ICsxMDEsNiBAQAogCiBzdGF0aWMgYm9vbCBpc0xpbmVFbXB0eSA9IHRydWU7CiBzdGF0
aWMgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgPSB0cnVlOwotc3RhdGljIGJvb2wgc2tp
cFRyYWlsaW5nTmV3bGluZSA9IGZhbHNlOwogc3RhdGljIGJvb2wgZW1wdHlSdW4gPSB0cnVlOwog
c3RhdGljIGludCBudW1TcGFjZXM7CiAKQEAgLTg1NCw5ICs4NTMsMTAgQEAKICAgICBCaWRpUnVu
KiByID0gMDsKICAgICBib29sIG5lZWRzV29yZFNwYWNpbmcgPSBmYWxzZTsKICAgICBmb3IgKHIg
PSBzRmlyc3RCaWRpUnVuOyByOyByID0gci0+bmV4dFJ1bikgewotICAgICAgICBpZiAoIXItPmJv
eCB8fCByLT5vYmotPmlzUG9zaXRpb25lZCgpKQorICAgICAgICBpZiAoIXItPmJveCB8fCByLT5v
YmotPmlzUG9zaXRpb25lZCgpIHx8IHItPmJveC0+aXNMaW5lQnJlYWsoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOyAvLyBQb3NpdGlvbmVkIG9iamVjdHMgYXJlIG9ubHkgcGFydGljaXBhdGluZyB0
byBmaWd1cmUgb3V0IHRoZWlyCiAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ycmVjdCBzdGF0
aWMgeCBwb3NpdGlvbi4gIFRoZXkgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIHdpZHRoLgorICAgICAg
ICAgICAgICAgICAgICAgIC8vIFNpbWlsYXJseSwgbGluZSBicmVhayBib3hlcyBoYXZlIG5vIGVm
ZmVjdCBvbiB0aGUgd2lkdGguCiAgICAgICAgIGlmIChyLT5vYmotPmlzVGV4dCgpKSB7CiAgICAg
ICAgICAgICBSZW5kZXJUZXh0ICpydCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4oci0+b2Jq
KTsKICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBydC0+d2lkdGgoci0+c3RhcnQsIHItPnN0
b3Atci0+c3RhcnQsIHRvdFdpZHRoLCBtX2ZpcnN0TGluZSk7CkBAIC0xNjMwLDcgKzE2MzAsNyBA
QAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChlbmQgPT0gc3RhcnQgfHwgc2tpcFRyYWlsaW5nTmV3
bGluZSkgeworICAgICAgICAgICAgICAgIGlmIChlbmQgPT0gc3RhcnQpIHsKICAgICAgICAgICAg
ICAgICAgICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBlbmQuaW5jcmVtZW50KGJpZGkpOwogICAgICAgICAgICAgICAgICAgICBiaWRpLmFkanVzdEVt
YmVkZGluZyA9IGZhbHNlOwpAQCAtMTk3NCw3ICsxOTc0LDYgQEAKIAogICAgIGJvb2wgcHJldkxp
bmVCcm9rZUNsZWFubHkgPSBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHk7CiAgICAgcHJldmlvdXNM
aW5lQnJva2VDbGVhbmx5ID0gZmFsc2U7Ci0gICAgc2tpcFRyYWlsaW5nTmV3bGluZSA9IGZhbHNl
OwogICAgIAogICAgIHdoaWxlIChvKSB7CiAgICAgICAgIGlmIChvLT5pc0JSKCkpIHsKQEAgLTIx
ODYsNiArMjE4NSw3IEBACiAgICAgICAgICAgICAgICAgYm9vbCBtaWRXb3JkQnJlYWsgPSBicmVh
a1dvcmRzICYmICh3ICsgd3JhcFcgPiB3aWR0aCk7CiAKICAgICAgICAgICAgICAgICBpZiAoYyA9
PSAnXG4nIHx8IChvLT5zdHlsZSgpLT53aGl0ZVNwYWNlKCkgIT0gUFJFICYmIGlzQnJlYWthYmxl
KHN0ciwgcG9zLCBzdHJsZW4sIG5leHRCcmVha2FibGUsIGJyZWFrTkJTUCkpIHx8IG1pZFdvcmRC
cmVhaykgeworICAgICAgICAgICAgICAgICAgICBib29sIHN0b3BwZWRJZ25vcmluZ1NwYWNlcyA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudENoYXJhY3RlcklzU3BhY2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIGlnbm9yaW5nIHNwYWNlcyBhbmQgYmVnaW4g
YXQgdGhpcwpAQCAtMjE5NSw2ICsyMTk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0U3BhY2UgPSBwb3M7IC8vIGUuZy4sICJGb28gICAgZ29vIiwgZG9uJ3QgYWRkIGluIGFu
eSBvZiB0aGUgaWdub3JlZCBzcGFjZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlk
aUl0ZXJhdG9yIHN0YXJ0TWlkICggMCwgbywgcG9zICk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRkTWlkcG9pbnQoc3RhcnRNaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3BwZWRJZ25vcmluZ1NwYWNlcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1c3Qga2VlcCBpZ25vcmlu
ZyB0aGVzZSBzcGFjZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zKys7CkBAIC0y
MjQ5LDggKzIyNTAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobEJyZWFrLm9iaiAmJiBsQnJlYWsub2JqLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAm
JiBsQnJlYWsub2JqLT5pc1RleHQoKSAmJiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Kj4obEJyZWFr
Lm9iaiktPnRleHQoKVtsQnJlYWsucG9zXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghc3RvcHBlZElnbm9yaW5nU3BhY2VzICYmIHBvcyA+IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3RvcCByaWdo
dCBiZWZvcmUgdGhlIG5ld2xpbmUgYW5kIHRoZW4gc3RhcnQgdXAgYWdhaW4uCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpSXRlcmF0b3IgbWlkcG9pbnQoMCwgbywgcG9z
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KEJpZGlJ
dGVyYXRvcigwLCBvLCBwb3MtMSkpOyAvLyBTdG9wCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRNaWRwb2ludChCaWRpSXRlcmF0b3IoMCwgbywgcG9zKSk7IC8vIFN0YXJ0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbEJyZWFrLmluY3JlbWVudChiaWRpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2tpcFRyYWlsaW5nTmV3bGluZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
ZW5kOyAvLyBEaWRuJ3QgZml0LiBKdW1wIHRvIHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewpAQCAtMjI2MywxMCArMjI3MCwxNiBAQAogICAgICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJyAmJiBvLT5zdHlsZSgpLT5w
cmVzZXJ2ZU5ld2xpbmUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdG9wcGVk
SWdub3JpbmdTcGFjZXMgJiYgcG9zID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gc3RvcCByaWdodCBiZWZvcmUgdGhlIG5ld2xpbmUgYW5kIHRoZW4gc3Rh
cnQgdXAgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlkaUl0ZXJhdG9yIG1p
ZHBvaW50KDAsIG8sIHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkTWlkcG9p
bnQoQmlkaUl0ZXJhdG9yKDAsIG8sIHBvcy0xKSk7IC8vIFN0b3AKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRNaWRwb2ludChCaWRpSXRlcmF0b3IoMCwgbywgcG9zKSk7IC8vIFN0YXJ0
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBsQnJl
YWsub2JqID0gbzsKICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5wb3MgPSBwb3M7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsuaW5jcmVtZW50KGJpZGkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgcHJldmlvdXNMaW5lQnJva2VDbGVhbmx5ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNraXBUcmFpbGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGxCcmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogCkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyQlIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQlIu
aAkocmV2aXNpb24gMTM4NjYpCisrKyByZW5kZXJpbmcvUmVuZGVyQlIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsOSArNTMsNiBAQAogCiAgICAgLy8gb3ZlcnJpZGVzCiAgICAgdmlydHVhbCBJbmxp
bmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sLCBib29sLCBib29sIGlzT25seVJ1biA9IGZhbHNl
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCkge30KLSAgICB2aXJ0dWFsIGlu
dCBtaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBtYXhXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0JSKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCkBAIC02NCw3ICs2MSw2IEBACiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBjYXJldE1heFJlbmRlcmVkT2Zmc2V0KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25Gb3JDb29yZGluYXRlcyhpbnQgeCwgaW50IHkpOwotICAgIHZp
cnR1YWwgSW50UmVjdCBjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5ID0g
VVBTVFJFQU0sIGludCAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKICAgICB2aXJ0dWFs
IElubGluZUJveCAqaW5saW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSA9IFVQ
U1RSRUFNKTsKICAgICAKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfbGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9yZW5kZXJfbGluZS5oCShyZXZpc2lvbiAxMzg2NikKKysrIHJlbmRlcmlu
Zy9yZW5kZXJfbGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBACiAgICAgdmly
dHVhbCB2b2lkIGV4dHJhY3RMaW5lKCk7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaExpbmUoKTsK
IAorICAgIHZpcnR1YWwgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UG9zaXRpb24oaW50IGR4LCBpbnQgZHkpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4
LCBpbnQgX3R5KTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCUi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckJSLmNwcAkocmV2aXNpb24gMTM4NjYpCisrKyByZW5kZXJpbmcvUmVu
ZGVyQlIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMjIgKzEwNyw2IEBACiAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihlbGVtZW50KCksIDAsIERPV05TVFJFQU0pOwogfQogCi1JbnRSZWN0
IFJlbmRlckJSOjpjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5LCBpbnQg
KmV4dHJhV2lkdGhUb0VuZE9mTGluZSkKLXsKLSAgICAvLyBFRElUIEZJWE1FOiBUaGlzIGRvZXMg
bm90IHdvcmsgeWV0LiBTb21lIG90aGVyIGNoYW5nZXMgYXJlIG5lZWQgYmVmb3JlCi0gICAgLy8g
YW4gYWNjdXJhdGUgcG9zaXRpb24gY2FuIGJlIGRldGVybWluZWQuCi0KLSAgICBpbnQgYWJzeCwg
YWJzeTsKLSAgICBhYnNvbHV0ZVBvc2l0aW9uKGFic3gsIGFic3kpOwotCi0gICAgaWYgKGV4dHJh
V2lkdGhUb0VuZE9mTGluZSkKLSAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoKCkgLSB4UG9zKCk7Ci0gCi0gICAgLy8gRklYTUU6IGFuIG9sZGVyIHZl
cnNpb24gb2YgdGhpcyBjb2RlIHdhc24ndCBzZXR0aW5nIHdpZHRoIGF0Ci0gICAgLy8gYWxsLCB1
c2luZyB0aGUgZGVmYXVsdCBvZiAxLi4uCi0gICAgcmV0dXJuIEludFJlY3QoeFBvcygpICsgYWJz
eCwgeVBvcygpICsgYWJzeSwgMSwgbGluZUhlaWdodChmYWxzZSkpOwotfQotCiBJbmxpbmVCb3gg
KlJlbmRlckJSOjppbmxpbmVCb3goaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5KQogewog
ICAgIHJldHVybiBmaXJzdFRleHRCb3goKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEzODY2
KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsMTAg
KzM1MSw3IEBACiBib29sIFJlbmRlclRleHQ6OmF0TGluZVdyYXAoSW5saW5lVGV4dEJveCAqYm94
LCBpbnQgb2Zmc2V0KQogewogICAgIGlmIChib3gtPm5leHRUZXh0Qm94KCkgJiYgIWJveC0+bmV4
dE9uTGluZSgpICYmIG9mZnNldCA9PSBib3gtPm1fc3RhcnQgKyBib3gtPm1fbGVuKSB7Ci0gICAg
ICAgIC8vIFRha2Ugc3BlY2lhbCBjYXJlIGJlY2F1c2UgaW4gcHJlZm9ybWF0dGVkIHRleHQsIHRo
ZSBuZXdsaW5lcwotICAgICAgICAvLyBhcmUgaW4gYmV0d2VlbiB0aGUgdGV4dCBib3hlcyAoaS5l
LiBub3QgaW4gYW55IGJveCdzIG1fc3RhcnQKLSAgICAgICAgLy8gdGhydSBtX3N0YXJ0K21fbGVu
LTEpLCBldmVuIHRob3VnaCB0aGV5IGFyZSByZW5kZXJlZC4KLSAgICAgICAgaWYgKCFzdHlsZSgp
LT5wcmVzZXJ2ZU5ld2xpbmUoKSB8fCAoKnN0cilbb2Zmc2V0XSAhPSAnXG4nKQorICAgICAgICBp
ZiAoIXN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpIHx8IGJveC0+aXNMaW5lQnJlYWsoKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTM3MSw3ICszNjgsNyBAQAog
ICAgIGZvciAoYm94ID0gZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJv
eCgpKSB7CiAgICAgICAgIGlmICgob2Zmc2V0ID49IGJveC0+bV9zdGFydCkgJiYgKG9mZnNldCA8
PSBib3gtPm1fc3RhcnQgKyBib3gtPm1fbGVuKSkgewogICAgICAgICAgICAgLy8gQ2hlY2sgaWYg
ZG93bnN0cmVhbSBhZmZpbml0eSB3b3VsZCBtYWtlIHVzIG1vdmUgdG8gdGhlIG5leHQgbGluZS4K
LSAgICAgICAgICAgIGlmIChhZmZpbml0eSA9PSBET1dOU1RSRUFNICYmIGF0TGluZVdyYXAoYm94
LCBvZmZzZXQpKSB7CisgICAgICAgICAgICBpZiAoYXRMaW5lV3JhcChib3gsIG9mZnNldCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIG5leHQgdGV4dCBib3gKICAgICAgICAgICAgICAg
ICBib3ggPSBib3gtPm5leHRUZXh0Qm94KCk7CiAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYm94
LT5tX3N0YXJ0OwpAQCAtNTg5LDcgKzU4Niw3IEBACiAgICAgbV9taW5XaWR0aCA9IG1fYmVnaW5N
aW5XaWR0aCA9IG1fZW5kTWluV2lkdGggPSAwOwogICAgIG1fbWF4V2lkdGggPSAwOwogCi0gICAg
aWYgKGlzQlIoKSkKKyAgICBpZiAoaXNCUigpIHx8IChzdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUo
KSAmJiBlcXVhbChzdHIuZ2V0KCksICJcbiIpKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBpbnQgY3Vyck1pbldpZHRoID0gMDsKQEAgLTkxOSwxMCArOTE2LDkgQEAKIAogaW50IFJl
bmRlclRleHQ6OmhlaWdodCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFdoeSB1c2UgbGluZS1o
ZWlnaHQ/IFNob3VsZG4ndCB3ZSBiZSBhZGRpbmcgaW4gdGhlIGhlaWdodCBvZiB0aGUgbGFzdCB0
ZXh0IGJveD8gLWR3aAogICAgIGludCByZXR2YWwgPSAwOwogICAgIGlmIChmaXJzdFRleHRCb3go
KSkKLSAgICAgICAgcmV0dmFsID0gbGFzdFRleHRCb3goKS0+bV95ICsgbGluZUhlaWdodChmYWxz
ZSkgLSBmaXJzdFRleHRCb3goKS0+bV95OworICAgICAgICByZXR2YWwgPSBsYXN0VGV4dEJveCgp
LT5tX3kgKyBsYXN0VGV4dEJveCgpLT5oZWlnaHQoKSAtIGZpcnN0VGV4dEJveCgpLT5tX3k7CiAg
ICAgcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTExMSw3ICsxMTA3LDcgQEAKIHsKICAgICBmb3Ig
KElubGluZVRleHRCb3ggKmJveCA9IGZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4
dFRleHRCb3goKSkgewogICAgICAgICBpZiAob2Zmc2V0ID49IGJveC0+bV9zdGFydCAmJiBvZmZz
ZXQgPD0gYm94LT5tX3N0YXJ0ICsgYm94LT5tX2xlbikgewotICAgICAgICAgICAgaWYgKGFmZmlu
aXR5ID09IERPV05TVFJFQU0gJiYgYXRMaW5lV3JhcChib3gsIG9mZnNldCkpCisgICAgICAgICAg
ICBpZiAoYXRMaW5lV3JhcChib3gsIG9mZnNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJv
eC0+bmV4dFRleHRCb3goKTsKICAgICAgICAgICAgIHJldHVybiBib3g7CiAgICAgICAgIH0KSW5k
ZXg6IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDEzODY2KQorKysgcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMSArNzksMTUgQEAKIFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUoKQogewogICAg
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc3RhdGUgPSBvYmplY3QoKS0+c2VsZWN0aW9u
U3RhdGUoKTsKLSAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8
fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCB8fAotICAgICAgICBzdGF0ZSA9
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpIHsKKyAgICBpZiAoc3RhdGUgPT0gUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
bkVuZCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpIHsKICAgICAgICAg
aW50IHN0YXJ0UG9zLCBlbmRQb3M7CiAgICAgICAgIG9iamVjdCgpLT5zZWxlY3Rpb25TdGFydEVu
ZChzdGFydFBvcywgZW5kUG9zKTsKICAgICAgICAgCisgICAgICAgIC8vIElmIHdlJ3JlIGF0IGEg
bGluZSB3cmFwLCB0aGVuIHRoZSBzZWxlY3Rpb24gaXMgZ29pbmcgdG8gZXh0ZW5kIG9udG8gdGhl
IG5leHQgbGluZSAoYW5kIHRodXMgbmVlZHMgdG8gYmUgdGhvdWdodCBvZiBhcworICAgICAgICAv
LyBleHRlbmRpbmcgYmV5b25kIG91ciBib3guCisgICAgICAgIGlmICh0ZXh0T2JqZWN0KCktPmF0
TGluZVdyYXAodGhpcywgZW5kUG9zKSkKKyAgICAgICAgICAgIGVuZFBvcysrOworCiAgICAgICAg
IGJvb2wgc3RhcnQgPSAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQgJiYgc3Rh
cnRQb3MgPj0gbV9zdGFydCAmJiBzdGFydFBvcyA8IG1fc3RhcnQgKyBtX2xlbik7CiAgICAgICAg
IGJvb2wgZW5kID0gKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQgJiYgZW5k
UG9zID4gbV9zdGFydCAmJiBlbmRQb3MgPD0gbV9zdGFydCArIG1fbGVuKTsKICAgICAgICAgaWYg
KHN0YXJ0ICYmIGVuZCkKQEAgLTIxOCw5ICsyMjIsMTQgQEAKICAgICByZXR1cm4gdGV4dENvbG9y
LmxpZ2h0KCk7CiB9CiAKK2Jvb2wgSW5saW5lVGV4dEJveDo6aXNMaW5lQnJlYWsoKSBjb25zdAor
eworICAgIHJldHVybiBvYmplY3QoKS0+aXNCUigpIHx8IChvYmplY3QoKS0+c3R5bGUoKS0+cHJl
c2VydmVOZXdsaW5lKCkgJiYgbGVuKCkgPT0gMSAmJiAoKnRleHRPYmplY3QoKS0+c3RyaW5nKCkp
W3N0YXJ0KCldID09ICdcbicpOworfQorCiBib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50
KFJlbmRlck9iamVjdDo6Tm9kZUluZm8mIGksIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkp
CiB7Ci0gICAgaWYgKG9iamVjdCgpLT5pc0JSKCkpCisgICAgaWYgKGlzTGluZUJyZWFrKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwgdHkgKyBt
X3ksIG1fd2lkdGgsIG1faGVpZ2h0KTsKQEAgLTIzMyw3ICsyNDIsNyBAQAogCiB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0
eSkKIHsKLSAgICBpZiAob2JqZWN0KCktPmlzQlIoKSB8fCAhb2JqZWN0KCktPnNob3VsZFBhaW50
V2l0aGluUm9vdChpKSB8fCBvYmplY3QoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lC
TEUgfHwKKyAgICBpZiAoaXNMaW5lQnJlYWsoKSB8fCAhb2JqZWN0KCktPnNob3VsZFBhaW50V2l0
aGluUm9vdChpKSB8fCBvYmplY3QoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUg
fHwKICAgICAgICAgbV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbiB8fCBpLnBoYXNlID09
IFBhaW50UGhhc2VPdXRsaW5lKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC02ODMsNiArNjky
LDkgQEAKIAogaW50IElubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGludCBfeCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKKyAgICBpZiAoaXNMaW5lQnJlYWsoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dCo+KG1fb2JqZWN0KTsKICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSB0ZXh0LT5z
dHlsZShtX2ZpcnN0TGluZSk7CiAgICAgY29uc3QgRm9udCogZiA9ICZzdHlsZS0+Zm9udCgpOwpA
QCAtNjkzLDYgKzcwNSw5IEBACiAKIGludCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNl
dChpbnQgb2Zmc2V0KSBjb25zdAogeworICAgIGlmIChpc0xpbmVCcmVhaygpKQorICAgICAgICBy
ZXR1cm4gbV94OworCiAgICAgUmVuZGVyVGV4dCAqdGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclRl
eHQgKj4obV9vYmplY3QpOwogICAgIGNvbnN0IEZvbnQgKmYgPSB0ZXh0LT5mb250KG1fZmlyc3RM
aW5lKTsKICAgICBpbnQgZnJvbSA9IG1fcmV2ZXJzZWQgPyBvZmZzZXQgLSBtX3N0YXJ0IDogMDsK
SW5kZXg6IGRvbS9Qb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1Bvc2l0aW9uLmNwcAko
cmV2aXNpb24gMTM4NjYpCisrKyBkb20vUG9zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzIsNyArNDMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGJveCAhPSB0ZXh0UmVuZGVyZXIt
Pmxhc3RUZXh0Qm94KCkgJiYgCi0gICAgICAgICAgICAgICAgICAgICAhYm94LT5uZXh0T25MaW5l
KCkgJiYgCisgICAgICAgICAgICAgICAgICAgICAhYm94LT5uZXh0T25MaW5lKCkgJiYKICAgICAg
ICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPT0gYm94LT5zdGFydCgpICsgYm94LT5sZW4oKSkg
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKICAgICAgICAgICAgICAg
ICB9CkluZGV4OiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gMTM4NjYpCisrKyBl
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg5LDcg
KzY4OSw3IEBACiAgICAgQVNTRVJUKGRlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
LT5pbkRvY3VtZW50KCkpOwogICAgIAogICAgIC8vIERlbGV0aW5nIGEgcGFyYWdyYXBoIGxlYXZl
cyBhIHBsYWNlaG9sZGVyIChpdCBhbHdheXMgZG9lcyB3aGVuIGEgd2hvbGUgcGFyYWdyYXBoIGlz
IGRlbGV0ZWQpLgotICAgIC8vIFdlIHJlbW92ZSBpdCBhbmQgcHJ1bmUgaXQncyBwYXJlbnRzIHNp
bmNlIHdlIHdhbnQgdG8gcmVtb3ZlIGFsbCB0cmFjZXMgb2YgdGhlIHBhcmFncmFwaCB3ZSdyZSBt
b3ZpbmcuCisgICAgLy8gV2UgcmVtb3ZlIGl0IGFuZCBwcnVuZSBpdHMgcGFyZW50cyBzaW5jZSB3
ZSB3YW50IHRvIHJlbW92ZSBhbGwgdHJhY2VzIG9mIHRoZSBwYXJhZ3JhcGggd2UncmUgbW92aW5n
LgogICAgIE5vZGUqIHBsYWNlaG9sZGVyID0gZW5kaW5nU2VsZWN0aW9uKCkuZW5kKCkubm9kZSgp
OwogICAgIGlmIChwbGFjZWhvbGRlci0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgIHJlbW92
ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhwbGFjZWhvbGRlcik7CkluZGV4OiBlZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGVkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzODY2KQorKysgZWRpdGluZy9EZWxldGVTZWxlY3Rp
b25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAwLDcgKzYwMCw3IEBACiAgICAgaWYg
KCFtX3NlbGVjdGlvblRvRGVsZXRlLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gSWYgdGhlIGRlbGV0aW9uIGlzIG9jY3VyaW5nIGluIGEgdGV4dCBmaWVsZCwgbGV0IHRoZSBm
cmFtZSBjYWxsIGFjcm9zcyB0aGUgYnJpZGdlIHRvIG5vdGlmeSB0aGUgZm9ybSBkZWxlZ2F0ZS4g
CisgICAgLy8gSWYgdGhlIGRlbGV0aW9uIGlzIG9jY3VycmluZyBpbiBhIHRleHQgZmllbGQsIGxl
dCB0aGUgZnJhbWUgY2FsbCBhY3Jvc3MgdGhlIGJyaWRnZSB0byBub3RpZnkgdGhlIGZvcm0gZGVs
ZWdhdGUuIAogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQo
KS5ub2RlKCk7CiAgICAgTm9kZSogYW5jZXN0b3JOb2RlID0gc3RhcnROb2RlID8gc3RhcnROb2Rl
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgaWYgKGFuY2VzdG9yTm9kZSAmJiBhbmNl
c3Rvck5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihhbmNlc3Rvck5vZGUpLT5pc05vbldpZGdldFRleHRGaWVsZCgpKQpAQCAtNjI2LDcg
KzYyNiw3IEBACiAgICAgYm9vbCBmb3JjZUJsYW5rUGFyYWdyYXBoID0gaXNTdGFydE9mUGFyYWdy
YXBoKFZpc2libGVQb3NpdGlvbihtX3Vwc3RyZWFtU3RhcnQpKSAmJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzRW5kT2ZQYXJhZ3JhcGgoVmlzaWJsZVBvc2l0aW9uKG1fZG93bnN0
cmVhbUVuZCkpOwogCi0gICAgLy8gRGVsZXRlIGFueSB0ZXh0IHRoYXQgbWF5IGhpbmRlciBvdXIg
YWJpbGl0eSB0byBmaXh1cCB3aGl0ZXNwYWNlIGFmdGVyIHRoZSBkZXRlbGUKKyAgICAvLyBEZWxl
dGUgYW55IHRleHQgdGhhdCBtYXkgaGluZGVyIG91ciBhYmlsaXR5IHRvIGZpeHVwIHdoaXRlc3Bh
Y2UgYWZ0ZXIgdGhlIGRlbGV0ZQogICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVh
bShtX3RyYWlsaW5nV2hpdGVzcGFjZSk7ICAgIAogCiAgICAgc2F2ZVR5cGluZ1N0eWxlU3RhdGUo
KTsKSW5kZXg6IGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNpb24gMTM4NjYpCisrKyBlZGl0aW5nL3Zpc2libGVf
dW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsOCArNTYyLDcgQEAKICAgICAgICAgaWYg
KHItPmlzQlIoKSB8fCByLT5pc0Jsb2NrRmxvdygpIHx8IChyLT5pc1RhYmxlKCkgJiYgIXItPmlz
SW5saW5lKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChyLT5pc1RleHQoKSkg
ewotICAgICAgICAgICAgLy8gRklYTUU6IE5vdCBjbGVhciB3aGF0IHRvIGRvIHdpdGggcHJlLXdy
YXAgb3IgcHJlLWxpbmUgaGVyZS4KLSAgICAgICAgICAgIGlmIChzdHlsZS0+d2hpdGVTcGFjZSgp
ID09IFBSRSkgeworICAgICAgICAgICAgaWYgKHN0eWxlLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgewog
ICAgICAgICAgICAgICAgIGNvbnN0IFFDaGFyKiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dCo+KHIpLT50ZXh0KCk7CiAgICAgICAgICAgICAgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0Kj4ociktPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgIGludCBvID0gb2Zmc2V0OwpA
QCAtNjIzLDggKzYyMiw3IEBACiAgICAgICAgIC8vIFdlIHNob3VsZCBwcm9iYWJseSBkbyB0aGlz
IGluIG90aGVyIGNhc2VzIHN1Y2ggYXMgc3RhcnRPZlBhcmFncmFwaC4KICAgICAgICAgaWYgKHIt
PmlzVGV4dCgpICYmIHItPmNhcmV0TWF4UmVuZGVyZWRPZmZzZXQoKSA+IDApIHsKICAgICAgICAg
ICAgIGludCBsZW5ndGggPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHIpLT5sZW5ndGgoKTsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBOb3QgY2xlYXIgd2hhdCB0byBkbyB3aXRoIHByZS13cmFw
IG9yIHByZS1saW5lIGhlcmUuCi0gICAgICAgICAgICBpZiAoc3R5bGUtPndoaXRlU3BhY2UoKSA9
PSBQUkUpIHsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKICAg
ICAgICAgICAgICAgICBjb25zdCBRQ2hhciogdGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQg
Kj4ociktPnRleHQoKTsKICAgICAgICAgICAgICAgICBpbnQgbyA9IG4gPT0gc3RhcnROb2RlID8g
b2Zmc2V0IDogMDsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbzsgaSA8IGxlbmd0aDsg
KytpKQpJbmRleDoga3dxL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt3cS9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gMTM4NjYpCisrKyBrd3EvUmVuZGVyVHJlZUFz
VGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMiArMTAyLDggQEAKIHsKICAgICBpZiAo
bi0+aXNEb2N1bWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuICIiOwotICAgIGlmIChuLT5pc1Rl
eHROb2RlKCkpCi0gICAgICAgIHJldHVybiAiVEVYVCI7IC8vIEZJWE1FOiBSZW1vdmUgb25jZSB0
aGUgbGF5b3V0IHRlc3RzIGFyZSByZWFkeSB0byBjaGFuZ2UuCiAgICAgaWYgKG4tPmlzQ29tbWVu
dE5vZGUoKSkKICAgICAgICAgcmV0dXJuICJDT01NRU5UIjsKLSAgICBpZiAobi0+aXNIVE1MRWxl
bWVudCgpKQotICAgICAgICByZXR1cm4gbi0+bm9kZU5hbWUoKS51cHBlcigpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsgLy8gRklYTUU6IFdlIHdhbnQgdG8gZHVtcCB0aGUgcmVhbCBET00gbmFtZSwgbm90
IGFuIHVwcGVyY2FzZSBuYW1lLgogICAgIHJldHVybiBuLT5ub2RlTmFtZSgpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsgCiB9CiAKQEAgLTEyNiwyMSArMTIyLDcgQEAKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICAvLyBGSVhNRTogV2lsbCByZW1vdmUgdGhpcyA8YnI+IGNvZGUgb25jZSBhbGwgbGF5
b3V0IHRlc3RzIHBhc3MuICBVbnRpbCB0aGVuLCB3ZSBjYW4ndCByZWFsbHkgY2hhbmdlCi0gICAg
Ly8gYWxsIHRoZSByZXN1bHRzIGVhc2lseS4KLSAgICAvLyBGSVhNRTogV2lsbCBhbHNvIHJlbW92
ZSB0aGUgdGFibGUgcm93IGFuZCBzZWN0aW9uIGhhY2tzIG9uY2UgYWxsIGxheW91dCB0ZXN0cyBw
YXNzLgotICAgIGJvb2wgdXNlUG9zaXRpb25zID0gdHJ1ZTsKLSAgICBib29sIHVzZVdpZHRoID0g
dHJ1ZTsKLSAgICBib29sIHVzZUhlaWdodCA9IHRydWU7Ci0gICAgaWYgKG8uaXNCUigpKSB7Ci0g
ICAgICAgIGNvbnN0IFJlbmRlckJSKiBiciA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlckJSKj4o
Jm8pOwotICAgICAgICB1c2VQb3NpdGlvbnMgPSAoYnItPmZpcnN0VGV4dEJveCgpICYmIGJyLT5m
aXJzdFRleHRCb3goKS0+aXNUZXh0KCkpOwotICAgIH0gZWxzZSBpZiAoby5pc1RhYmxlUm93KCkp
Ci0gICAgICAgIHVzZVBvc2l0aW9ucyA9IHVzZVdpZHRoID0gdXNlSGVpZ2h0ID0gZmFsc2U7Ci0g
ICAgZWxzZSBpZiAoby5pc1RhYmxlU2VjdGlvbigpKQotICAgICAgICB1c2VXaWR0aCA9IGZhbHNl
OwotCi0gICAgSW50UmVjdCByKHVzZVBvc2l0aW9ucyA/IG8ueFBvcygpIDogMCwgdXNlUG9zaXRp
b25zID8gby55UG9zKCkgOiAwLCB1c2VXaWR0aCA/IG8ud2lkdGgoKSA6IDAsIHVzZUhlaWdodCA/
IG8uaGVpZ2h0KCkgOiAwKTsKKyAgICBJbnRSZWN0IHIoby54UG9zKCksIG8ueVBvcygpLCBvLndp
ZHRoKCksIG8uaGVpZ2h0KCkpOwogICAgIHRzIDw8ICIgIiA8PCByOwogICAgIAogICAgIGlmICgh
by5pc1RleHQoKSkgewo=
</data>
<flag name="review"
          id="2100"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>