<?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>6844</bug_id>
          
          <creation_ts>2006-01-26 10:54:49 -0800</creation_ts>
          <short_desc>elementAtPoint returns the list when the point is over a list marker</short_desc>
          <delta_ts>2006-03-06 13:26:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Justin Garcia">justin.garcia</reporter>
          <assigned_to name="Justin Garcia">justin.garcia</assigned_to>
          <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>30108</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-26 10:54:49 -0800</bug_when>
    <thetext>elementAtPoint returns the list when the point is over a list marker.  It would make more sense if it returned the list item associated with the list marker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30111</commentid>
    <comment_count>1</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-01-26 11:32:18 -0800</bug_when>
    <thetext>Also in radar: &lt;rdar://problem/4391563&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33665</commentid>
    <comment_count>2</comment_count>
      <attachid>6656</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-21 21:29:04 -0800</bug_when>
    <thetext>Created attachment 6656
patch

The position and size of the list marker&apos;s renderer doesn&apos;t correspond to the position and size of the marker that&apos;s painted.  So, I save the rect where the marker is painted, and that&apos;s where I do hit testing.  Want to show this to hyatt while I work on creating layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33717</commentid>
    <comment_count>3</comment_count>
      <attachid>6656</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-02-22 12:12:25 -0800</bug_when>
    <thetext>Comment on attachment 6656
patch

(1) I&apos;d only do this special nodeAtPoint call if your list-style-position is outside and if hittestaction is foreground.

(2) I&apos;d just make setInnerNode public.

Make sure you test both inside and outside markers.  Inside markers should already work, which is why I&apos;d make this patch only for outside markers.

(I like clearly identifying the &quot;outside&quot; hacks in the code, so that when we ultimately fix them, we&apos;ll know what to patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33771</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-23 08:41:08 -0800</bug_when>
    <thetext>Hyatt told me that while he thinks this is OK as a short-term test, the longer-term fix should be to set the position and size of the marker render object properly, and we should remove this hack we just had to add. I think that someone should look at the longer-term fix soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33795</commentid>
    <comment_count>5</comment_count>
      <attachid>6656</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-23 12:30:25 -0800</bug_when>
    <thetext>Comment on attachment 6656
patch

I&apos;m clearing the review flag for now, since I need to make two changes to this patch.  

First, If text that is inside the list item overlaps the list marker (imagine a &lt;span&gt; with a negative margin inside the list item), I want nodeAtPoint to return the text, not the list marker.  So, in RenderListItem::nodeAtPoint, I should only call RenderListMarker::nodeAtPoint if normal hit testing fails.  

Also, since m_rect is cached at paint time, a normal layout test won&apos;t be able to test these changes.  I&apos;ll have to pull the code that computes the size and position of the list marker out into a separate function and make sure it&apos;s called from nodeAtPoint if the cached rect is empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33804</commentid>
    <comment_count>6</comment_count>
      <attachid>6685</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-23 14:08:31 -0800</bug_when>
    <thetext>Created attachment 6685
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33805</commentid>
    <comment_count>7</comment_count>
      <attachid>6686</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-23 14:09:53 -0800</bug_when>
    <thetext>Created attachment 6686
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33825</commentid>
    <comment_count>8</comment_count>
      <attachid>6689</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-23 16:32:39 -0800</bug_when>
    <thetext>Created attachment 6689
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33826</commentid>
    <comment_count>9</comment_count>
      <attachid>6689</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-23 16:34:08 -0800</bug_when>
    <thetext>Comment on attachment 6689
patch

I made the two changes that I mentioned above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34049</commentid>
    <comment_count>10</comment_count>
      <attachid>6689</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-02-26 08:57:01 -0800</bug_when>
    <thetext>Comment on attachment 6689
patch

+    bool insideMarker = m_marker-&gt;nodeAtPoint(i, x, y, tx + m_x, ty + m_y, hitTestAction);
+    if (insideMarker)
+        setInnerNode(i);
+    return insideMarker;

To match the logic above, I&apos;d do instead:

+    if (!m_marker-&gt;nodeAtPoint(i, x, y, tx + m_x, ty + m_y, hitTestAction)
+        return false;
+
+    setInnerNode(i);
+    return true;

But obviously the code is OK as-is, just a suggestion.

RenderListMarker::nodeAtPoint does not set the innerNode when it returns true. That means that if anyone other than RenderListItem::nodeAtPoint calls it, it won&apos;t work properly. Either it should call setInnerNode or it should not be called nodeAtPoint.

The patch otherwise looks good. I&apos;m going to say r=me, because the nodeAtPoint quibble is a minor one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34221</commentid>
    <comment_count>11</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-02-27 16:39:06 -0800</bug_when>
    <thetext>Landed with the changes darin suggested + some small changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34831</commentid>
    <comment_count>12</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-03-02 10:24:27 -0800</bug_when>
    <thetext>I think the fix caused bug 7542.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34920</commentid>
    <comment_count>13</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-03-02 20:49:20 -0800</bug_when>
    <thetext>elementAtPoint uses NodeInfo&apos;s innerNonSharedNode, which the previous checkin didn&apos;t set.  I&apos;m reopening this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34921</commentid>
    <comment_count>14</comment_count>
      <attachid>6819</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-03-02 21:04:51 -0800</bug_when>
    <thetext>Created attachment 6819
patch

RenderListMarker::nodeAtPoint was only setting NodeInfo&apos;s innerNode.  That was enough to get the list item&apos;s mouse events firing over the list marker, but not enough to fix elementAtPoint, since elementAtPoint uses NodeInfo&apos;s innerNonSharedNode to populate the dictionary that it returns.

This change calls RenderObject::setInnerNode(), which handles setting both the innerNode and the innerNonSharedNode.  Since RenderObject::setInnerNode() assumes that it is being called from the renderer who&apos;s element is the inner node, I needed to call it from inside RenderListItem::nodeAtPoint.

elementAtPoint is used to determine the drag operation that will be performed when something is dropped over a given point.  So, to test my fix, I wrote a test that drags some text and drops it over the list marker.  This required three fixes to DumpRenderTree:
First, when I added DumpRenderTree&apos;s WebView to a window, I didn&apos;t have the eventSender send the window number along with the event.
Second, I always call performDragOperation on the destination in DumpRenderTree.  If the WebView doesn&apos;t want to perform a drag operation, it won&apos;t, but it needs to be asked to try or else it gets into a bad state and asserts fire.
Third, dragging tests in particular, and tests that use the eventSender in general, often need to pause in order for some series of mouse moves and clicks to register as a particular operation.  A drag operation will only kick off for example, if the mouse is held down for a split second on the selected content, otherwise it will turn into a create-selection operation.  I didn&apos;t want to add explicit delays to layout tests (1 full second is needed after a double click to make the next mousedown a drag-start and not a triple-click!).  So, I added a leapForward method to the eventSender, that adds the given offset to the timestamp of each event sent thereafter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34926</commentid>
    <comment_count>15</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-03-02 21:20:14 -0800</bug_when>
    <thetext>The leapForward bit is kind of speculative..I think that timestamps are only ever compared to other timestamps, but if they are ever compared to the current time, sending an event with a timestamp in the future could cause problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34927</commentid>
    <comment_count>16</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2006-03-02 21:21:36 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think that timestamps are only ever compared to other timestamps,

by &apos;other&apos; timestamps I meant timestamps of past events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34948</commentid>
    <comment_count>17</comment_count>
      <attachid>6819</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-03 06:47:04 -0800</bug_when>
    <thetext>Comment on attachment 6819
patch

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6656</attachid>
            <date>2006-02-21 21:29:04 -0800</date>
            <delta_ts>2006-02-23 14:08:31 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6844.txt</filename>
            <type>text/plain</type>
            <size>6228</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IHJlbmRlcl9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJfb2JqZWN0LmgJKHJl
dmlzaW9uIDEyOTI3KQorKysgcmVuZGVyX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODMs
NiArNDgzLDcgQEAKICAgICAgICAgZnJpZW5kIGNsYXNzIFJlbmRlck9iamVjdDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlckZyYW1lU2V0OwogICAgICAgICBmcmllbmQgY2xhc3MgRE9NOjpI
VE1MQXJlYUVsZW1lbnRJbXBsOworICAgICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGlzdEl0ZW07
CiAgICAgcHVibGljOgogICAgICAgICBOb2RlSW5mbyhib29sIHJlYWRvbmx5LCBib29sIGFjdGl2
ZSwgYm9vbCBtb3VzZU1vdmUgPSBmYWxzZSkKICAgICAgICAgICAgIDogbV9pbm5lck5vZGUoMCks
IG1faW5uZXJOb25TaGFyZWROb2RlKDApLCBtX2lubmVyVVJMRWxlbWVudCgwKSwgbV9yZWFkb25s
eShyZWFkb25seSksIG1fYWN0aXZlKGFjdGl2ZSksIG1fbW91c2VNb3ZlKG1vdXNlTW92ZSkKSW5k
ZXg6IHJlbmRlcl9saXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJfbGlzdC5jcHAJKHJldmlz
aW9uIDEyOTI3KQorKysgcmVuZGVyX2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNiAr
Mjg4LDE3IEBACiAgICAgfQogfQogCitib29sIFJlbmRlckxpc3RJdGVtOjpub2RlQXRQb2ludChO
b2RlSW5mbyYgaSwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBo
aXRUZXN0QWN0aW9uKQoreworICAgIGJvb2wgaW5zaWRlTWFya2VyID0gbV9tYXJrZXItPm5vZGVB
dFBvaW50KGksIHgsIHksIHR4ICsgbV94LCB0eSArIG1feSwgaGl0VGVzdEFjdGlvbik7CisgICAg
aWYgKGluc2lkZU1hcmtlcikgeworICAgICAgICBpLnNldElubmVyTm9kZShlbGVtZW50KCkpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIFJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludChpLCB4LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pOworfQorCiB2b2lk
IFJlbmRlckxpc3RJdGVtOjpjYWxjTWluTWF4V2lkdGgoKQogewogICAgIC8vIE1ha2Ugc3VyZSBv
dXIgbWFya2VyIGlzIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLgpAQCAtMzE2LDI4ICszMjcsOSBA
QAogSW50UmVjdCBSZW5kZXJMaXN0SXRlbTo6Z2V0QWJzb2x1dGVSZXBhaW50UmVjdCgpCiB7CiAg
ICAgSW50UmVjdCByZXN1bHQgPSBSZW5kZXJCbG9jazo6Z2V0QWJzb2x1dGVSZXBhaW50UmVjdCgp
OwotICAgIGlmIChtX21hcmtlciAmJiAhbV9tYXJrZXItPmlzSW5zaWRlKCkpIHsKLSAgICAgICAg
Ly8gVGhpcyBjYW4gYmUgYSBzbG9wcHkgYW5kIGltcHJlY2lzZSBvZmZzZXQgYXMgbG9uZyBhcyBp
dCdzIGFsd2F5cyB0b28gYmlnLgotICAgICAgICBpbnQgcGl4SGVpZ2h0ID0gc3R5bGUoKS0+aHRt
bEZvbnQoKS5nZXRGb250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICAgICAgaW50IG9m
ZnNldCA9IHBpeEhlaWdodCoyLzM7Ci0gICAgICAgIGJvb2wgaGF2ZUltYWdlID0gbV9tYXJrZXIt
Pmxpc3RJbWFnZSgpICYmICFtX21hcmtlci0+bGlzdEltYWdlKCktPmlzRXJyb3JJbWFnZSgpOwot
ICAgICAgICBpZiAoaGF2ZUltYWdlKQotICAgICAgICAgICAgb2Zmc2V0ID0gbV9tYXJrZXItPmxp
c3RJbWFnZSgpLT5pbWFnZSgpLT53aWR0aCgpOwotICAgICAgICBpbnQgYnVsbGV0V2lkdGggPSBv
ZmZzZXQvMjsKLSAgICAgICAgaWYgKG9mZnNldCUyKQotICAgICAgICAgICAgYnVsbGV0V2lkdGgr
KzsKLSAgICAgICAgaW50IHhvZmYgPSAwOwotICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9u
KCkgPT0gTFRSKQotICAgICAgICAgICAgeG9mZiA9IC1jTWFya2VyUGFkZGluZyAtIG9mZnNldDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgeG9mZiA9IGNNYXJrZXJQYWRkaW5nICsgKGhhdmVJ
bWFnZSA/IDAgOiAob2Zmc2V0IC0gYnVsbGV0V2lkdGgpKTsKLQotICAgICAgICBpZiAoeG9mZiA8
IDApIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRYKHJlc3VsdC54KCkgKyB4b2ZmKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5zZXRXaWR0aChyZXN1bHQud2lkdGgoKSAtIHhvZmYpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5zZXRXaWR0aChyZXN1bHQud2lkdGgoKSArIHhvZmYp
OwotICAgIH0KKyAgICBpZiAobV9tYXJrZXIgJiYgIW1fbWFya2VyLT5pc0luc2lkZSgpKQorICAg
ICAgICByZXN1bHQudW5pdGUobV9tYXJrZXItPnJlY3QoKSk7CisgICAgICAgIAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTQ2MCw4ICs0NTIsMTAgQEAKICAgICB9IGVsc2UgaWYgKHN0eWxl
KCktPmRpcmVjdGlvbigpID09IFJUTCkKICAgICAgICAgeG9mZiArPSBoYXZlSW1hZ2UgPyBjTWFy
a2VyUGFkZGluZyA6IChtX3dpZHRoIC0gYnVsbGV0V2lkdGgpOwogICAgIAorICAgIG1fcmVjdCA9
IEludFJlY3QoKTsKICAgICBpZiAobV9saXN0SW1hZ2UgJiYgIW1fbGlzdEltYWdlLT5pc0Vycm9y
SW1hZ2UoKSkgewotICAgICAgICBwLT5kcmF3SW1hZ2VBdFBvaW50KG1fbGlzdEltYWdlLT5pbWFn
ZSgpLCBJbnRQb2ludChfdHggKyB4b2ZmLCBfdHkpKTsKKyAgICAgICAgbV9yZWN0ID0gSW50UmVj
dChfdHggKyB4b2ZmLCBfdHksIG1fbGlzdEltYWdlLT5pbWFnZVNpemUoKS53aWR0aCgpLCBtX2xp
c3RJbWFnZS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBwLT5kcmF3SW1hZ2VBdFBv
aW50KG1fbGlzdEltYWdlLT5pbWFnZSgpLCBtX3JlY3QubG9jYXRpb24oKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTQ3NSwxNiArNDY5LDE5IEBACiAKICAgICBzd2l0Y2goc3R5bGUo
KS0+bGlzdFN0eWxlVHlwZSgpKSB7CiAgICAgY2FzZSBESVNDOgorICAgICAgICBtX3JlY3QgPSBJ
bnRSZWN0KF90eCArIHhvZmYsIF90eSArICgzICogeW9mZikvMiwgYnVsbGV0V2lkdGgsIGJ1bGxl
dFdpZHRoKTsKICAgICAgICAgcC0+c2V0QnJ1c2goY29sb3IpOwotICAgICAgICBwLT5kcmF3RWxs
aXBzZShfdHggKyB4b2ZmLCBfdHkgKyAoMyAqIHlvZmYpLzIsIGJ1bGxldFdpZHRoLCBidWxsZXRX
aWR0aCk7CisgICAgICAgIHAtPmRyYXdFbGxpcHNlKG1fcmVjdC54KCksIG1fcmVjdC55KCksIG1f
cmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBDSVJDTEU6CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoX3R4ICsgeG9mZiwgX3R5ICsgKDMg
KiB5b2ZmKS8yLCBidWxsZXRXaWR0aCwgYnVsbGV0V2lkdGgpOwogICAgICAgICBwLT5zZXRCcnVz
aChXZWJDb3JlOjpCcnVzaDo6Tm9CcnVzaCk7Ci0gICAgICAgIHAtPmRyYXdFbGxpcHNlKF90eCAr
IHhvZmYsIF90eSArICgzICogeW9mZikvMiwgYnVsbGV0V2lkdGgsIGJ1bGxldFdpZHRoKTsKKyAg
ICAgICAgcC0+ZHJhd0VsbGlwc2UobV9yZWN0LngoKSwgbV9yZWN0LnkoKSwgbV9yZWN0LndpZHRo
KCksIG1fcmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNRVUFSRToK
KyAgICAgICAgbV9yZWN0ID0gSW50UmVjdChfdHggKyB4b2ZmLCBfdHkgKyAoMyAqIHlvZmYpLzIs
IGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CiAgICAgICAgIHAtPnNldEJydXNoKGNvbG9yKTsK
LSAgICAgICAgcC0+ZHJhd1JlY3QoX3R4ICsgeG9mZiwgX3R5ICsgKDMgKiB5b2ZmKS8yLCBidWxs
ZXRXaWR0aCwgYnVsbGV0V2lkdGgpOworICAgICAgICBwLT5kcmF3UmVjdChtX3JlY3QueCgpLCBt
X3JlY3QueSgpLCBtX3JlY3Qud2lkdGgoKSwgbV9yZWN0LmhlaWdodCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgTE5PTkU6CiAgICAgICAgIHJldHVybjsKQEAgLTUwMCwxMyArNDk3LDE2
IEBACiAgICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KF90eCwgX3R5LCAwLCAwLCAwLCAw
LCBRdDo6QWxpZ25MZWZ0LCAiIC4iKTsKICAgICAgICAgICAgIAkgICAgcC0+ZHJhd1RleHQoX3R4
ICsgZm0ud2lkdGgoIiAuIiwgMCwgMCksIF90eSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwg
bV9pdGVtKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9yZWN0ID0gSW50
UmVjdChfdHgsIF90eSwgZm0ud2lkdGgobV9pdGVtLCAwLCAwKSArIGZtLndpZHRoKCIuICIsIDAs
IDApLCBmbS5oZWlnaHQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgICAgICAgICAgICAg
cC0+ZHJhd1RleHQoX3R4IC0gb2Zmc2V0LzIsIF90eSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduUmln
aHQsICIuICIpOwogICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChfdHggLSBvZmZzZXQv
MiAtIGZtLndpZHRoKCIuICIsIDAsIDApLCBfdHksIDAsIDAsIDAsIDAsIFF0OjpBbGlnblJpZ2h0
LCBtX2l0ZW0pOworICAgICAgICAgICAgICAgICAgICBtX3JlY3QgPSBJbnRSZWN0KF90eCAtIG9m
ZnNldCAvIDIsIF90eSwgZm0ud2lkdGgobV9pdGVtLCAwLCAwKSArIGZtLndpZHRoKCIuICIsIDAs
IDApLCBmbS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IAkgICAgcC0+ZHJhd1RleHQoX3R4ICsgb2Zmc2V0IC8gMiwgX3R5LCAwLCAwLCAwLCAwLCBRdDo6
QWxpZ25MZWZ0LCAiIC4iKTsKICAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoX3R4ICsg
b2Zmc2V0IC8gMiArIGZtLndpZHRoKCIgLiIsIDAsIDApLCBfdHksIDAsIDAsIDAsIDAsIFF0OjpB
bGlnbkxlZnQsIG1faXRlbSk7CisgICAgICAgICAgICAgICAgICAgIG1fcmVjdCA9IEludFJlY3Qo
X3R4ICsgb2Zmc2V0IC8gMiwgX3R5LCBmbS53aWR0aChtX2l0ZW0sIDAsIDApICsgZm0ud2lkdGgo
Ii4gIiwgMCwgMCksIGZtLmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTY0OCw0ICs2NDgsOSBAQAogICAgIHJldHVybiBtX2xpc3RJdGVt
LT5ub3RJbkxpc3QoKSB8fCBzdHlsZSgpLT5saXN0U3R5bGVQb3NpdGlvbigpID09IElOU0lERTsK
IH0KIAorYm9vbCBSZW5kZXJMaXN0TWFya2VyOjpub2RlQXRQb2ludChOb2RlSW5mbyYgaSwgaW50
IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQor
eworICAgIHJldHVybiBoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RGb3JlZ3JvdW5kICYmIG1fcmVj
dC5jb250YWlucyh4LCB5KTsKK30KKwogI3VuZGVmIEJPWF9ERUJVRwpJbmRleDogcmVuZGVyX2xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJfbGlzdC5oCShyZXZpc2lvbiAxMjkyNykKKysrIHJl
bmRlcl9saXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3MCwxNiBAQAogICAgIGNvbnN0
IFFTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX2l0ZW07IH0KIAogICAgIGJvb2wgaXNJ
bnNpZGUoKSBjb25zdDsKLQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2Rl
SW5mbyYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbik7CisgICAgCisgICAgSW50
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CisgICAgCiBwcml2YXRlOgogICAg
IFFTdHJpbmcgbV9pdGVtOwogICAgIENhY2hlZEltYWdlICptX2xpc3RJbWFnZTsKICAgICBSZW5k
ZXJMaXN0SXRlbSogbV9saXN0SXRlbTsKKyAgICBJbnRSZWN0IG1fcmVjdDsKIH07CiAKIGNsYXNz
IExpc3RNYXJrZXJCb3ggOiBwdWJsaWMgSW5saW5lQm94CkBAIC0xMTYsNiArMTIxLDggQEAKICAg
ICBib29sIG5vdEluTGlzdCgpIGNvbnN0IHsgcmV0dXJuIF9ub3RJbkxpc3Q7IH0KIAogICAgIFFT
dHJpbmcgbWFya2VyU3RyaW5nVmFsdWUoKSB7IHJldHVybiBtX21hcmtlciA/IG1fbWFya2VyLT50
ZXh0KCkgOiAiIjsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5m
byYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbik7CiAKIHByaXZhdGU6CiAgICAg
aW50IHByZWRlZlZhbDsK
</data>
<flag name="review"
          id="1672"
          type_id="1"
          status="-"
          setter="justin.garcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6685</attachid>
            <date>2006-02-23 14:08:31 -0800</date>
            <delta_ts>2006-02-23 14:09:53 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6844-2.txt</filename>
            <type>text/plain</type>
            <size>12754</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJKHJldmlzaW9uIDEyOTI3KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNiAr
Mjg4LDIyIEBACiAgICAgfQogfQogCisvLyBXZSBuZWVkIHRvIG92ZXJyaWRlIFJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludCBzbyB0aGF0IGEgcG9pbnQgb3ZlciBhbiBvdXRzaWRlIGxpc3QgbWFya2Vy
IHdpbGwgcmV0dXJuIHRoZSBsaXN0IGl0ZW0uCisvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgd2hl
biB3ZSBpbXByb3ZlIHRoZSB3YXkgbGlzdCBtYXJrZXJzIGFyZSBzdG9yZWQgaW4gdGhlIHJlbmRl
ciB0cmVlLgorYm9vbCBSZW5kZXJMaXN0SXRlbTo6bm9kZUF0UG9pbnQoTm9kZUluZm8mIGksIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
K3sKKyAgICBpZiAoUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGksIHgsIHksIHR4LCB0eSwgaGl0
VGVzdEFjdGlvbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmICghbV9tYXJr
ZXIgfHwgbV9tYXJrZXItPmlzSW5zaWRlKCkgfHwgaGl0VGVzdEFjdGlvbiAhPSBIaXRUZXN0Rm9y
ZWdyb3VuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGJvb2wgaW5zaWRlTWFy
a2VyID0gbV9tYXJrZXItPm5vZGVBdFBvaW50KGksIHgsIHksIHR4ICsgbV94LCB0eSArIG1feSwg
aGl0VGVzdEFjdGlvbik7CisgICAgaWYgKGluc2lkZU1hcmtlcikKKyAgICAgICAgc2V0SW5uZXJO
b2RlKGkpOworICAgIHJldHVybiBpbnNpZGVNYXJrZXI7Cit9CisKIHZvaWQgUmVuZGVyTGlzdEl0
ZW06OmNhbGNNaW5NYXhXaWR0aCgpCiB7CiAgICAgLy8gTWFrZSBzdXJlIG91ciBtYXJrZXIgaXMg
aW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCkBAIC0zMTcsMjcgKzMzMywxNCBAQAogewogICAgIElu
dFJlY3QgcmVzdWx0ID0gUmVuZGVyQmxvY2s6OmdldEFic29sdXRlUmVwYWludFJlY3QoKTsKICAg
ICBpZiAobV9tYXJrZXIgJiYgIW1fbWFya2VyLT5pc0luc2lkZSgpKSB7Ci0gICAgICAgIC8vIFRo
aXMgY2FuIGJlIGEgc2xvcHB5IGFuZCBpbXByZWNpc2Ugb2Zmc2V0IGFzIGxvbmcgYXMgaXQncyBh
bHdheXMgdG9vIGJpZy4KLSAgICAgICAgaW50IHBpeEhlaWdodCA9IHN0eWxlKCktPmh0bWxGb250
KCkuZ2V0Rm9udERlZigpLmNvbXB1dGVkUGl4ZWxTaXplKCk7Ci0gICAgICAgIGludCBvZmZzZXQg
PSBwaXhIZWlnaHQqMi8zOwotICAgICAgICBib29sIGhhdmVJbWFnZSA9IG1fbWFya2VyLT5saXN0
SW1hZ2UoKSAmJiAhbV9tYXJrZXItPmxpc3RJbWFnZSgpLT5pc0Vycm9ySW1hZ2UoKTsKLSAgICAg
ICAgaWYgKGhhdmVJbWFnZSkKLSAgICAgICAgICAgIG9mZnNldCA9IG1fbWFya2VyLT5saXN0SW1h
Z2UoKS0+aW1hZ2UoKS0+d2lkdGgoKTsKLSAgICAgICAgaW50IGJ1bGxldFdpZHRoID0gb2Zmc2V0
LzI7Ci0gICAgICAgIGlmIChvZmZzZXQlMikKLSAgICAgICAgICAgIGJ1bGxldFdpZHRoKys7Ci0g
ICAgICAgIGludCB4b2ZmID0gMDsKLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09
IExUUikKLSAgICAgICAgICAgIHhvZmYgPSAtY01hcmtlclBhZGRpbmcgLSBvZmZzZXQ7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHhvZmYgPSBjTWFya2VyUGFkZGluZyArIChoYXZlSW1hZ2Ug
PyAwIDogKG9mZnNldCAtIGJ1bGxldFdpZHRoKSk7Ci0KLSAgICAgICAgaWYgKHhvZmYgPCAwKSB7
Ci0gICAgICAgICAgICByZXN1bHQuc2V0WChyZXN1bHQueCgpICsgeG9mZik7Ci0gICAgICAgICAg
ICByZXN1bHQuc2V0V2lkdGgocmVzdWx0LndpZHRoKCkgLSB4b2ZmKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICByZXN1bHQuc2V0V2lkdGgocmVzdWx0LndpZHRoKCkgKyB4b2ZmKTsKKyAg
ICAgICAgSW50UmVjdCBtYXJrZXJSZWN0ID0gbV9tYXJrZXItPmdldFJlbGF0aXZlUmVwYWludFJl
Y3QoKTsKKyAgICAgICAgLy8gVGhlIG1hcmtlcnMgcmVwYWludCByZWN0IGlzIHJlbGF0aXZlIHRv
IHRoZSBsaXN0IGl0ZW0ncyByZW5kZXJlcidzIHBvc2l0aW9uCisgICAgICAgIGludCB4LCB5Owor
ICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uKHgsIHkpOworICAgICAgICBtYXJrZXJSZWN0Lm1vdmUo
eCwgeSk7CisgICAgICAgIHJlc3VsdC51bml0ZShtYXJrZXJSZWN0KTsKICAgICB9CisgICAgICAg
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTM4Nyw4NyArMzkwLDQzIEBACiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUp
ICByZXR1cm47CisgICAgCisgICAgSW50UmVjdCByZWN0ID0gZ2V0UmVsYXRpdmVSZXBhaW50UmVj
dCgpOwogCi0gICAgX3R4ICs9IG1feDsKLSAgICBfdHkgKz0gbV95OworICAgIHJlY3QubW92ZShJ
bnRQb2ludChfdHgsIF90eSkpOwogCi0gICAgaWYgKF90eSA+IGkuci5ib3R0b20oKSB8fCBfdHkg
KyBtX2hlaWdodCA8IGkuci55KCkpCisgICAgaWYgKHJlY3QueSgpID4gaS5yLmJvdHRvbSgpIHx8
IHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSA8IGkuci55KCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChzaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigpKSAKLSAgICAgICAgcGFpbnRC
b3hEZWNvcmF0aW9ucyhpLCBfdHgsIF90eSk7CisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMo
aSwgcmVjdC54KCksIHJlY3QueSgpKTsKIAogICAgIFFQYWludGVyKiBwID0gaS5wOwogICAgIHAt
PnNldEZvbnQoc3R5bGUoKS0+Zm9udCgpKTsKICAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0gPSBw
LT5mb250TWV0cmljcygpOwogICAgIAotICAgIC8vIFRoZSBtYXJrZXIgbmVlZHMgdG8gYWRqdXN0
IGl0cyB0eCwgZm9yIHRoZSBjYXNlIHdoZXJlIGl0J3MgYW4gb3V0c2lkZSBtYXJrZXIuCi0gICAg
UmVuZGVyT2JqZWN0KiBsaXN0SXRlbSA9IDA7Ci0gICAgaW50IGxlZnRMaW5lT2Zmc2V0ID0gMDsK
LSAgICBpbnQgcmlnaHRMaW5lT2Zmc2V0ID0gMDsKLSAgICBpZiAoIWlzSW5zaWRlKCkpIHsKLSAg
ICAgICAgbGlzdEl0ZW0gPSB0aGlzOwotICAgICAgICBpbnQgeU9mZnNldCA9IDA7Ci0gICAgICAg
IGludCB4T2Zmc2V0ID0gMDsKLSAgICAgICAgd2hpbGUgKGxpc3RJdGVtICYmIGxpc3RJdGVtICE9
IG1fbGlzdEl0ZW0pIHsKLSAgICAgICAgICAgIHlPZmZzZXQgKz0gbGlzdEl0ZW0tPnlQb3MoKTsK
LSAgICAgICAgICAgIHhPZmZzZXQgKz0gbGlzdEl0ZW0tPnhQb3MoKTsKLSAgICAgICAgICAgIGxp
c3RJdGVtID0gbGlzdEl0ZW0tPnBhcmVudCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyBOb3cgdGhhdCB3ZSBoYXZlIG91ciB4b2Zmc2V0IHdpdGhpbiB0aGUgbGlzdGJveCwgd2Ug
bmVlZCB0byBhZGp1c3Qgb3Vyc2VsdmVzIGJ5IHRoZSBkZWx0YQotICAgICAgICAvLyBiZXR3ZWVu
IG91ciBjdXJyZW50IHhvZmZzZXQgYW5kIG91ciBkZXNpcmVkIHBvc2l0aW9uICh3aGljaCBpcyBq
dXN0IG91dHNpZGUgdGhlIGJvcmRlciBib3gKLSAgICAgICAgLy8gb2YgdGhlIGxpc3QgaXRlbSku
Ci0gICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKLSAgICAgICAgICAg
IGxlZnRMaW5lT2Zmc2V0ID0gbV9saXN0SXRlbS0+bGVmdFJlbE9mZnNldCh5T2Zmc2V0LCBtX2xp
c3RJdGVtLT5sZWZ0T2Zmc2V0KHlPZmZzZXQpKTsKLSAgICAgICAgICAgIF90eCAtPSAoeE9mZnNl
dCAtIGxlZnRMaW5lT2Zmc2V0KSArIG1fbGlzdEl0ZW0tPnBhZGRpbmdMZWZ0KCkgKyBtX2xpc3RJ
dGVtLT5ib3JkZXJMZWZ0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByaWdodExp
bmVPZmZzZXQgPSBtX2xpc3RJdGVtLT5yaWdodFJlbE9mZnNldCh5T2Zmc2V0LCBtX2xpc3RJdGVt
LT5yaWdodE9mZnNldCh5T2Zmc2V0KSk7Ci0gICAgICAgICAgICBfdHggKz0gKHJpZ2h0TGluZU9m
ZnNldC14T2Zmc2V0KSArIG1fbGlzdEl0ZW0tPnBhZGRpbmdSaWdodCgpICsgbV9saXN0SXRlbS0+
Ym9yZGVyUmlnaHQoKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGlmIChwLT5wcmludGluZygp
KSB7Ci0gICAgICAgIGlmIChfdHkgPCBpLnIueSgpKQorICAgICAgICBpZiAocmVjdC55KCkgPCBp
LnIueSgpKQogICAgICAgICAgICAgLy8gVGhpcyBoYXMgYmVlbiBwcmludGVkIGFscmVhZHkgd2Ug
c3VwcG9zZS4KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIFJlbmRlckNh
bnZhcyogYyA9IGNhbnZhcygpOwotICAgICAgICBpZiAoX3R5ICsgbV9oZWlnaHQgKyBwYWRkaW5n
Qm90dG9tKCkgKyBib3JkZXJCb3R0b20oKSA+PSBjLT5wcmludFJlY3QoKS5ib3R0b20oKSkgewot
ICAgICAgICAgICAgaWYgKF90eSA8IGMtPnRydW5jYXRlZEF0KCkpCi0gICAgICAgICAgICAgICAg
Yy0+c2V0QmVzdFRydW5jYXRlZEF0KF90eSwgdGhpcyk7CisgICAgICAgIGlmIChyZWN0LnkoKSAr
IHJlY3QuaGVpZ2h0KCkgPj0gYy0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKKyAgICAgICAgICAg
IGlmIChyZWN0LnkoKSA8IGMtPnRydW5jYXRlZEF0KCkpCisgICAgICAgICAgICAgICAgYy0+c2V0
QmVzdFRydW5jYXRlZEF0KHJlY3QueSgpLCB0aGlzKTsKICAgICAgICAgICAgIC8vIExldCdzIHBy
aW50IHRoaXMgb24gdGhlIG5leHQgcGFnZS4KICAgICAgICAgICAgIHJldHVybjsgCiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgaW50IG9mZnNldCA9IGZtLmFzY2VudCgpKjIvMzsKLSAgICBi
b29sIGhhdmVJbWFnZSA9IG1fbGlzdEltYWdlICYmICFtX2xpc3RJbWFnZS0+aXNFcnJvckltYWdl
KCk7Ci0gICAgaWYgKGhhdmVJbWFnZSkKLSAgICAgICAgb2Zmc2V0ID0gbV9saXN0SW1hZ2UtPmlt
YWdlKCktPndpZHRoKCk7Ci0gICAgCi0gICAgaW50IHhvZmYgPSAwOwotICAgIGludCB5b2ZmID0g
Zm0uYXNjZW50KCkgLSBvZmZzZXQ7Ci0KLSAgICBpbnQgYnVsbGV0V2lkdGggPSBvZmZzZXQvMjsK
LSAgICBpZiAob2Zmc2V0JTIpCi0gICAgICAgIGJ1bGxldFdpZHRoKys7Ci0gICAgaWYgKCFpc0lu
c2lkZSgpKSB7Ci0gICAgICAgIGlmIChsaXN0SXRlbS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0g
TFRSKQotICAgICAgICAgICAgeG9mZiA9IC1jTWFya2VyUGFkZGluZyAtIG9mZnNldDsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgeG9mZiA9IGNNYXJrZXJQYWRkaW5nICsgKGhhdmVJbWFnZSA/
IDAgOiAob2Zmc2V0IC0gYnVsbGV0V2lkdGgpKTsKLSAgICB9IGVsc2UgaWYgKHN0eWxlKCktPmRp
cmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgeG9mZiArPSBoYXZlSW1hZ2UgPyBjTWFya2VyUGFk
ZGluZyA6IChtX3dpZHRoIC0gYnVsbGV0V2lkdGgpOwotICAgIAogICAgIGlmIChtX2xpc3RJbWFn
ZSAmJiAhbV9saXN0SW1hZ2UtPmlzRXJyb3JJbWFnZSgpKSB7Ci0gICAgICAgIHAtPmRyYXdJbWFn
ZUF0UG9pbnQobV9saXN0SW1hZ2UtPmltYWdlKCksIEludFBvaW50KF90eCArIHhvZmYsIF90eSkp
OworICAgICAgICBwLT5kcmF3SW1hZ2VBdFBvaW50KG1fbGlzdEltYWdlLT5pbWFnZSgpLCByZWN0
LmxvY2F0aW9uKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCiAjaWZkZWYgQk9Y
X0RFQlVHCiAgICAgcC0+c2V0UGVuKCBRdDo6cmVkICk7Ci0gICAgcC0+ZHJhd1JlY3QoIF90eCAr
IHhvZmYsIF90eSArIHlvZmYsIG9mZnNldCwgb2Zmc2V0ICk7CisgICAgcC0+ZHJhd1JlY3QocmVj
dC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogI2VuZGlmCiAK
ICAgICBjb25zdCBDb2xvciBjb2xvciggc3R5bGUoKS0+Y29sb3IoKSApOwpAQCAtNDc2LDM3ICs0
MzUsMzUgQEAKICAgICBzd2l0Y2goc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7CiAgICAgY2Fz
ZSBESVNDOgogICAgICAgICBwLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgICAgIHAtPmRyYXdFbGxp
cHNlKF90eCArIHhvZmYsIF90eSArICgzICogeW9mZikvMiwgYnVsbGV0V2lkdGgsIGJ1bGxldFdp
ZHRoKTsKKyAgICAgICAgcC0+ZHJhd0VsbGlwc2UocmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDSVJDTEU6
CiAgICAgICAgIHAtPnNldEJydXNoKFdlYkNvcmU6OkJydXNoOjpOb0JydXNoKTsKLSAgICAgICAg
cC0+ZHJhd0VsbGlwc2UoX3R4ICsgeG9mZiwgX3R5ICsgKDMgKiB5b2ZmKS8yLCBidWxsZXRXaWR0
aCwgYnVsbGV0V2lkdGgpOworICAgICAgICBwLT5kcmF3RWxsaXBzZShyZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFNRVUFSRToKICAgICAgICAgcC0+c2V0QnJ1c2goY29sb3IpOwotICAgICAgICBwLT5kcmF3
UmVjdChfdHggKyB4b2ZmLCBfdHkgKyAoMyAqIHlvZmYpLzIsIGJ1bGxldFdpZHRoLCBidWxsZXRX
aWR0aCk7CisgICAgICAgIHAtPmRyYXdSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgTE5PTkU6CiAg
ICAgICAgIHJldHVybjsKICAgICBkZWZhdWx0OgogICAgICAgICBpZiAoIW1faXRlbS5pc0VtcHR5
KCkpIHsKLSAgICAgICAJICAgIF90eSArPSBmbS5hc2NlbnQoKTsKLQogICAgICAgICAgICAgaWYg
KGlzSW5zaWRlKCkpIHsKICAgICAgICAgICAgIAlpZiggc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0g
TFRSKSB7Ci0gICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KF90eCwgX3R5LCAwLCAwLCAw
LCAwLCBRdDo6QWxpZ25MZWZ0LCBtX2l0ZW0pOwotICAgICAgICAgICAgICAgICAgICBwLT5kcmF3
VGV4dChfdHggKyBmbS53aWR0aChtX2l0ZW0sIDAsIDApLCBfdHksIDAsIDAsIDAsIDAsIFF0OjpB
bGlnbkxlZnQsICIuICIpOworICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChyZWN0Lngo
KSwgcmVjdC55KCksIDAsIDAsIDAsIDAsIFF0OjpBbGlnbkxlZnQsIG1faXRlbSk7CisgICAgICAg
ICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHJlY3QueCgpICsgZm0ud2lkdGgobV9pdGVtLCAwLCAw
KSwgX3R5LCAwLCAwLCAwLCAwLCBRdDo6QWxpZ25MZWZ0LCAiLiAiKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChfdHgsIF90eSwgMCwg
MCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgIiAuIik7Ci0gICAgICAgICAgICAJICAgIHAtPmRyYXdU
ZXh0KF90eCArIGZtLndpZHRoKCIgLiIsIDAsIDApLCBfdHksIDAsIDAsIDAsIDAsIFF0OjpBbGln
bkxlZnQsIG1faXRlbSk7CisgICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHJlY3QueCgp
LCByZWN0LnkoKSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgIiAuIik7CisgICAgICAgICAg
ICAJICAgIHAtPmRyYXdUZXh0KHJlY3QueCgpICsgZm0ud2lkdGgoIiAuIiwgMCwgMCksIF90eSwg
MCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgbV9pdGVtKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIpIHsKLSAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoX3R4IC0gb2Zm
c2V0LzIsIF90eSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduUmlnaHQsICIuICIpOwotICAgICAgICAg
ICAgICAgICAgICBwLT5kcmF3VGV4dChfdHggLSBvZmZzZXQvMiAtIGZtLndpZHRoKCIuICIsIDAs
IDApLCBfdHksIDAsIDAsIDAsIDAsIFF0OjpBbGlnblJpZ2h0LCBtX2l0ZW0pOworICAgICAgICAg
ICAgICAgICAgICBwLT5kcmF3VGV4dChyZWN0LngoKSwgcmVjdC55KCksIDAsIDAsIDAsIDAsIFF0
OjpBbGlnblJpZ2h0LCAiLiAiKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQocmVj
dC54KCkgLSBmbS53aWR0aCgiLiAiLCAwLCAwKSwgcmVjdC55KCksIDAsIDAsIDAsIDAsIFF0OjpB
bGlnblJpZ2h0LCBtX2l0ZW0pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAJICAgIHAtPmRyYXdUZXh0KF90eCArIG9mZnNldCAvIDIsIF90eSwgMCwgMCwgMCwgMCwgUXQ6
OkFsaWduTGVmdCwgIiAuIik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KF90eCAr
IG9mZnNldCAvIDIgKyBmbS53aWR0aCgiIC4iLCAwLCAwKSwgX3R5LCAwLCAwLCAwLCAwLCBRdDo6
QWxpZ25MZWZ0LCBtX2l0ZW0pOworICAgICAgICAgICAgCSAgICBwLT5kcmF3VGV4dChyZWN0Lngo
KSwgcmVjdC55KCksIDAsIDAsIDAsIDAsIFF0OjpBbGlnbkxlZnQsICIgLiIpOworICAgICAgICAg
ICAgICAgICAgICBwLT5kcmF3VGV4dChyZWN0LngoKSArIGZtLndpZHRoKCIgLiIsIDAsIDApLCBy
ZWN0LnkoKSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgbV9pdGVtKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY0OCw0ICs2MDUsODkgQEAKICAg
ICByZXR1cm4gbV9saXN0SXRlbS0+bm90SW5MaXN0KCkgfHwgc3R5bGUoKS0+bGlzdFN0eWxlUG9z
aXRpb24oKSA9PSBJTlNJREU7CiB9CiAKK2Jvb2wgUmVuZGVyTGlzdE1hcmtlcjo6bm9kZUF0UG9p
bnQoTm9kZUluZm8mIGksIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rp
b24gaGl0VGVzdEFjdGlvbikKK3sKKyAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBnZXRSZWxhdGl2
ZVJlcGFpbnRSZWN0KCk7CisgICAgbWFya2VyUmVjdC5tb3ZlKHR4LCB0eSk7CisgICAgcmV0dXJu
IG1hcmtlclJlY3QuY29udGFpbnMoeCwgeSk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGlzdE1hcmtl
cjo6Z2V0UmVsYXRpdmVSZXBhaW50UmVjdCgpCit7CisgICAgaW50IHggPSBtX3g7CisgICAgaW50
IHkgPSBtX3k7CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBsaXN0SXRlbSA9IDA7CisgICAgaW50
IGxlZnRMaW5lT2Zmc2V0ID0gMDsKKyAgICBpbnQgcmlnaHRMaW5lT2Zmc2V0ID0gMDsKKyAgICBp
ZiAoIWlzSW5zaWRlKCkpIHsKKyAgICAgICAgbGlzdEl0ZW0gPSB0aGlzOworICAgICAgICBpbnQg
eU9mZnNldCA9IDA7CisgICAgICAgIGludCB4T2Zmc2V0ID0gMDsKKyAgICAgICAgd2hpbGUgKGxp
c3RJdGVtICYmIGxpc3RJdGVtICE9IG1fbGlzdEl0ZW0pIHsKKyAgICAgICAgICAgIHlPZmZzZXQg
Kz0gbGlzdEl0ZW0tPnlQb3MoKTsKKyAgICAgICAgICAgIHhPZmZzZXQgKz0gbGlzdEl0ZW0tPnhQ
b3MoKTsKKyAgICAgICAgICAgIGxpc3RJdGVtID0gbGlzdEl0ZW0tPnBhcmVudCgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIG91ciB4b2Zmc2V0IHdp
dGhpbiB0aGUgbGlzdGJveCwgd2UgbmVlZCB0byBhZGp1c3Qgb3Vyc2VsdmVzIGJ5IHRoZSBkZWx0
YQorICAgICAgICAvLyBiZXR3ZWVuIG91ciBjdXJyZW50IHhvZmZzZXQgYW5kIG91ciBkZXNpcmVk
IHBvc2l0aW9uICh3aGljaCBpcyBqdXN0IG91dHNpZGUgdGhlIGJvcmRlciBib3gKKyAgICAgICAg
Ly8gb2YgdGhlIGxpc3QgaXRlbSkuCisgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9
PSBMVFIpIHsKKyAgICAgICAgICAgIGxlZnRMaW5lT2Zmc2V0ID0gbV9saXN0SXRlbS0+bGVmdFJl
bE9mZnNldCh5T2Zmc2V0LCBtX2xpc3RJdGVtLT5sZWZ0T2Zmc2V0KHlPZmZzZXQpKTsKKyAgICAg
ICAgICAgIHggLT0gKHhPZmZzZXQgLSBsZWZ0TGluZU9mZnNldCkgKyBtX2xpc3RJdGVtLT5wYWRk
aW5nTGVmdCgpICsgbV9saXN0SXRlbS0+Ym9yZGVyTGVmdCgpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgcmlnaHRMaW5lT2Zmc2V0ID0gbV9saXN0SXRlbS0+cmlnaHRSZWxPZmZzZXQo
eU9mZnNldCwgbV9saXN0SXRlbS0+cmlnaHRPZmZzZXQoeU9mZnNldCkpOworICAgICAgICAgICAg
eCArPSAocmlnaHRMaW5lT2Zmc2V0LXhPZmZzZXQpICsgbV9saXN0SXRlbS0+cGFkZGluZ1JpZ2h0
KCkgKyBtX2xpc3RJdGVtLT5ib3JkZXJSaWdodCgpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIGNvbnN0IFFGb250TWV0cmljcyBmbSA9IHN0eWxlKCktPmZvbnRNZXRyaWNzKCk7CisgICAg
CisgICAgaW50IG9mZnNldCA9IGZtLmFzY2VudCgpKjIvMzsKKyAgICBib29sIGhhdmVJbWFnZSA9
IG1fbGlzdEltYWdlICYmICFtX2xpc3RJbWFnZS0+aXNFcnJvckltYWdlKCk7CisgICAgaWYgKGhh
dmVJbWFnZSkKKyAgICAgICAgb2Zmc2V0ID0gbV9saXN0SW1hZ2UtPmltYWdlKCktPndpZHRoKCk7
CisgICAgCisgICAgaW50IHhvZmYgPSAwOworICAgIGludCB5b2ZmID0gZm0uYXNjZW50KCkgLSBv
ZmZzZXQ7CisKKyAgICBpbnQgYnVsbGV0V2lkdGggPSBvZmZzZXQvMjsKKyAgICBpZiAob2Zmc2V0
JTIpCisgICAgICAgIGJ1bGxldFdpZHRoKys7CisgICAgaWYgKCFpc0luc2lkZSgpKSB7CisgICAg
ICAgIGlmIChsaXN0SXRlbS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICAg
ICAgeG9mZiA9IC1jTWFya2VyUGFkZGluZyAtIG9mZnNldDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeG9mZiA9IGNNYXJrZXJQYWRkaW5nICsgKGhhdmVJbWFnZSA/IDAgOiAob2Zmc2V0IC0g
YnVsbGV0V2lkdGgpKTsKKyAgICB9IGVsc2UgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IFJU
TCkKKyAgICAgICAgeG9mZiArPSBoYXZlSW1hZ2UgPyBjTWFya2VyUGFkZGluZyA6IChtX3dpZHRo
IC0gYnVsbGV0V2lkdGgpOworICAgIAorICAgIGlmIChtX2xpc3RJbWFnZSAmJiAhbV9saXN0SW1h
Z2UtPmlzRXJyb3JJbWFnZSgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCh4ICsgeG9mZiwgeSwg
IG1fbGlzdEltYWdlLT5pbWFnZVNpemUoKS53aWR0aCgpLCBtX2xpc3RJbWFnZS0+aW1hZ2VTaXpl
KCkuaGVpZ2h0KCkpOworICAgIAorICAgIHN3aXRjaChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkp
IHsKKyAgICBjYXNlIERJU0M6CisgICAgY2FzZSBDSVJDTEU6CisgICAgY2FzZSBTUVVBUkU6Cisg
ICAgICAgIHJldHVybiBJbnRSZWN0KHggKyB4b2ZmLCB5ICsgKDMgKiB5b2ZmKS8yLCBidWxsZXRX
aWR0aCwgYnVsbGV0V2lkdGgpOworICAgIGNhc2UgTE5PTkU6CisgICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1faXRlbS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICAgICAgCisgICAgICAgIHkgKz0gZm0u
YXNjZW50KCk7CisKKyAgICAgICAgaWYgKGlzSW5zaWRlKCkpCisgICAgICAgICAgICByZXR1cm4g
SW50UmVjdCh4LCB5LCBmbS53aWR0aChtX2l0ZW0sIDAsIDApICsgZm0ud2lkdGgoIi4gIiwgMCwg
MCksIGZtLmhlaWdodCgpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KHgg
LSBvZmZzZXQgLyAyLCB5LCBmbS53aWR0aChtX2l0ZW0sIDAsIDApICsgZm0ud2lkdGgoIi4gIiwg
MCwgMCksIGZtLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSW50UmVjdCh4ICsgb2Zmc2V0IC8gMiwgeSwgZm0ud2lkdGgobV9pdGVtLCAwLCAwKSAr
IGZtLndpZHRoKCIuICIsIDAsIDApLCBmbS5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKICN1bmRlZiBCT1hfREVCVUcKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9saXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuaAkocmV2aXNp
b24gMTI5MjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCwxMSArNzAsMTYgQEAKICAgICBjb25zdCBRU3RyaW5nJiB0ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVtOyB9CiAKICAgICBib29sIGlzSW5zaWRlKCkgY29uc3Q7Ci0KKyAgICAK
KyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoTm9kZUluZm8mLCBpbnQsIGludCwgaW50LCBp
bnQsIEhpdFRlc3RBY3Rpb24pOworICAgIAorICAgIEludFJlY3QgZ2V0UmVsYXRpdmVSZXBhaW50
UmVjdCgpOworICAgIAogcHJpdmF0ZToKICAgICBRU3RyaW5nIG1faXRlbTsKICAgICBDYWNoZWRJ
bWFnZSAqbV9saXN0SW1hZ2U7CiAgICAgUmVuZGVyTGlzdEl0ZW0qIG1fbGlzdEl0ZW07CisgICAg
SW50UmVjdCBtX3JlY3Q7CiB9OwogCiBjbGFzcyBMaXN0TWFya2VyQm94IDogcHVibGljIElubGlu
ZUJveApAQCAtMTE2LDYgKzEyMSw4IEBACiAgICAgYm9vbCBub3RJbkxpc3QoKSBjb25zdCB7IHJl
dHVybiBfbm90SW5MaXN0OyB9CiAKICAgICBRU3RyaW5nIG1hcmtlclN0cmluZ1ZhbHVlKCkgeyBy
ZXR1cm4gbV9tYXJrZXIgPyBtX21hcmtlci0+dGV4dCgpIDogIiI7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoTm9kZUluZm8mLCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRl
c3RBY3Rpb24pOwogCiBwcml2YXRlOgogICAgIGludCBwcmVkZWZWYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6686</attachid>
            <date>2006-02-23 14:09:53 -0800</date>
            <delta_ts>2006-02-23 16:32:39 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6844-2.txt</filename>
            <type>text/plain</type>
            <size>16545</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2xpc3QtbWFya2VyLTEuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9saXN0LW1hcmtlci0xLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9saXN0LW1hcmtlci0xLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACis8c2NyaXB0PgordmFyIGNsaWNrcyA9IDA7Cit2
YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7Cit2YXIgeCwg
eTsKKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICB2YXIgY29uc29sZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CisgICAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShtZXNzYWdlKTsKKyAgICBjb25zb2xlLmFwcGVuZENoaWxkKHRleHQpOworICAg
IGNvbnNvbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Cit9CisK
K2Z1bmN0aW9uIGNsaWNrSGFuZGxlcihlbGVtZW50KSB7CisgICAgbG9nKCJvbmNsaWNrOiAiICsg
ZWxlbWVudCk7Cit9CisKK2Z1bmN0aW9uIGNsaWNrQ291bnRlcigpIHsKKyAgICBjbGlja3MrKzsK
K30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKworICAgIGlmIChsYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICB2YXIgdWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWwiKTsKKyAg
ICAgICAgdmFyIGxpID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpIik7CisgICAgICAgIHZh
ciBzcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwYW4iKTsKKyAgICAgICAgCisgICAg
ICAgIHkgPSBsaS5vZmZzZXRUb3AgKyBsaS5vZmZzZXRIZWlnaHQgLyAyOworCisgICAgICAgIGxp
LnN0eWxlLmxpc3RTdHlsZVBvc2l0aW9uID0gImluc2lkZSI7CisgICAgICAgIAorICAgICAgICAv
LyBXZWJDb3JlIHJlbmRlcnMgYW4gaW5zaWRlIGxpc3QgbWFya2VyIHJpZ2h0IHVwIGFnYWluc3Qg
dGhlIGxlZnQgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBsaXN0IGl0ZW0uCisgICAg
ICAgIC8vIFRoaXMgeCBwb3NpdGlvbiBzaG91bGQgcHV0IHVzIG92ZXIgdGhlIGxpc3QgbWFya2Vy
IAorICAgICAgICB4ID0gbGkub2Zmc2V0TGVmdCArIDEwOworCisgICAgICAgIC8vIFNldCB0aGUg
bGVmdCBtYXJnaW4gb2YgdGhlIHNwYW4gc28gdGhhdCB0aGUgdGV4dCBpbnNpZGUgaXQgb3Zlcmxh
cHMgdGhlIGxpc3QgbWFya2VyLiAgQ2xpY2tpbmcgb24gYSBzcG90IG92ZXIKKyAgICAgICAgLy8g
dGhlIGxpc3QgbWFya2VyIHNob3VsZCBjYXVzZSB0aGUgZm9sbG93aW5nIG9uY2xpY2sgZmlyZSBv
cmRlcjogc3BhbiwgbGksIHVsCisgICAgICAgIHNwYW4uc3R5bGUubWFyZ2luTGVmdCA9IC0xMDA7
CisgICAgICAgIGxvZygiVGhlIG9uY2xpY2sgZmlyZSBvcmRlciBzaG91bGQgYmU6IHNwYW4sIHVs
LCBsaSIpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICAgICAg
ZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsK
KworICAgICAgICAvLyBTZXQgdGhlIGxlZnQgbWFyZ2luIG9mIHRoZSBzcGFuIHNvIHRoYXQgdGhl
IHRleHQgaW5zaWRlIGl0IG92ZXJsYXBzIHRoZSBsaXN0IG1hcmtlci4gIENsaWNraW5nIG9uIGEg
c3BvdCBvdmVyCisgICAgICAgIC8vIHRoZSBsaXN0IG1hcmtlciBzaG91bGQgY2F1c2UgdGhlIGZv
bGxvd2luZyBvbmNsaWNrIGZpcmUgb3JkZXI6IGxpLCB1bAorICAgICAgICBzcGFuLnN0eWxlLm1h
cmdpbkxlZnQgPSAwOworICAgICAgICBsb2coIlRoZSBvbmNsaWNrIGZpcmUgb3JkZXIgc2hvdWxk
IGJlOiB1bCwgbGkiKTsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oeCwgeSk7Cisg
ICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3Vz
ZVVwKCk7CisKKyAgICAgICAgbGkuc3R5bGUubGlzdFN0eWxlUG9zaXRpb24gPSAib3V0c2lkZSI7
CisgICAgICAgIC8vIFdlYkNvcmUgcmVuZGVycyBhbiBvdXRzaWRlIGxpc3QgbWFya2VyIGF0IG9m
ZnNldExlZnQgbWludXMgYW4gb2Zmc2V0LCB3aGljaCBpcyBlcXVhbCBvbiBhCisgICAgICAgIC8v
IG1hZ2ljIG51bWJlciwgNywgcGx1cyB0aGUgYXNjZW50IG9mIHRoZSBmb250ICogMi8zLiAgU2lu
Y2Ugd2UgY2FuJ3QgZ2V0IHRoZSBhc2NlbnQgZnJvbSBKUywganVzdCBtYWtlIHN1cmUgdGhhdAor
ICAgICAgICAvLyB0aGUgbGlzdCBtYXJrZXIgaXMgaGl0IGF0IHNvbWUgcG9pbnQgYmV0d2VlbiB0
aGUgbGVmdCBlZGdlIG9mIHRoZSBsaXN0IGl0ZW0gYW5kIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGxp
c3QuCisgICAgICAgIAorICAgICAgICBsaS5vbmNsaWNrID0gY2xpY2tDb3VudGVyOworICAgICAg
ICB1bC5vbmNsaWNrID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAoeCA9IHVsLm9mZnNldExl
ZnQ7IHggPCBsaS5vZmZzZXRMZWZ0OyB4ICs9IDUpIHsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVy
Lm1vdXNlTW92ZVRvKHgsIHkpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7
CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7ICAgCisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChjbGlja3MgPT0gMCkKKyAgICAgICAgICAgIGxvZygiRmFpbHVyZSwg
dGhlIGxpc3QgbWFya2VyIHdhc24ndCBoaXQgZHVyaW5nIGFueSBvZiB0aGUgbW91c2UgY2xpY2tz
IGJldHdlZW4gdGhlIGxlZnQgZWRnZSBvZiB0aGUgbGlzdCBpdGVtIGFuZCB0aGUgbGVmdCBlZGdl
IG9mIHRoZSBsaXN0LiIpOworICAgICAgICAKKyAgICB9IGVsc2UKKyAgICAgICAgZG9jdW1lbnQu
d3JpdGUoIkNhbm5vdCBiZSBydW4gaW50ZXJhY3RpdmVseSIpOworfQorCis8L3NjcmlwdD4KKwor
PHN0eWxlPgorbGkgeworICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7CisgICAgbGlzdC1zdHls
ZS10eXBlOiBzcXVhcmU7CisgICAgbGlzdC1zdHlsZS1wb3NpdGlvbjogb3V0c2lkZTsKKyAgICBm
b250LXNpemU6IDcwcHg7CisgICAgY29sb3I6IHdoaXRlOworICAgIHBhZGRpbmc6IDA7CisgICAg
bWFyZ2luOiAwOworfQordWwgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKKyAgICBwYWRk
aW5nOiAwOworICAgIG1hcmdpbjogMDsKKyAgICBwYWRkaW5nLWxlZnQ6IDcwcHg7Cit9Cis8L3N0
eWxlPgorCis8dWwgaWQ9InVsIiBvbmNsaWNrPSJjbGlja0hhbmRsZXIoJ3VsJyk7Ij4KKzxsaSBp
ZD0ibGkiIG9uY2xpY2s9ImNsaWNrSGFuZGxlcignbGknKTsiPjxzcGFuIGlkPSJzcGFuIiBvbmNs
aWNrPSJjbGlja0hhbmRsZXIoJ3NwYW4nKSI+dGV4dDwvc3Bhbj48L2xpPgorPC91bD4KKworPHA+
VGhpcyBpcyBhIHRlc3RjYXNlIGZvciBoaXQgdGVzdGluZyBvdmVyIGxpc3QgbWFya2Vycy4gIEl0
IHVzZXMgdGhlIGV2ZW50U2VuZGVyIHRvIGRvIG1vdXNlIGNsaWNrcyBhbmQgcHJvZ3JhbW1hdGlj
YWxseSBhZGp1c3RzIHRoZSBsZWZ0IG1hcmdpbiBvZiB0aGUgc3BhbiBpbnNpZGUgdGhlIGxpc3Qg
aXRlbSBhbmQgdGhlIGxpc3Qtc3R5bGUtcG9zaXRpb246IG9mIHRoZSBsaXN0IGl0ZW0uPC9wPgor
Cis8cCBpZD0iY29uc29sZSI+PC9wPgorCis8c2NyaXB0PgorcnVuVGVzdCgpOworPC9zY3JpcHQ+
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvcmVu
ZGVyX2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9saXN0
LmNwcAkocmV2aXNpb24gMTI5MjcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCw2ICsyODgsMjIgQEAKICAgICB9CiB9CiAKKy8vIFdl
IG5lZWQgdG8gb3ZlcnJpZGUgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50IHNvIHRoYXQgYSBwb2lu
dCBvdmVyIGFuIG91dHNpZGUgbGlzdCBtYXJrZXIgd2lsbCByZXR1cm4gdGhlIGxpc3QgaXRlbS4K
Ky8vIFdlIHNob3VsZCByZW1vdmUgdGhpcyB3aGVuIHdlIGltcHJvdmUgdGhlIHdheSBsaXN0IG1h
cmtlcnMgYXJlIHN0b3JlZCBpbiB0aGUgcmVuZGVyIHRyZWUuCitib29sIFJlbmRlckxpc3RJdGVt
Ojpub2RlQXRQb2ludChOb2RlSW5mbyYgaSwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwg
SGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIGlmIChSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQoaSwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgaWYgKCFtX21hcmtlciB8fCBtX21hcmtlci0+aXNJbnNpZGUoKSB8
fCBoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgYm9vbCBpbnNpZGVNYXJrZXIgPSBtX21hcmtlci0+bm9kZUF0UG9pbnQo
aSwgeCwgeSwgdHggKyBtX3gsIHR5ICsgbV95LCBoaXRUZXN0QWN0aW9uKTsKKyAgICBpZiAoaW5z
aWRlTWFya2VyKQorICAgICAgICBzZXRJbm5lck5vZGUoaSk7CisgICAgcmV0dXJuIGluc2lkZU1h
cmtlcjsKK30KKwogdm9pZCBSZW5kZXJMaXN0SXRlbTo6Y2FsY01pbk1heFdpZHRoKCkKIHsKICAg
ICAvLyBNYWtlIHN1cmUgb3VyIG1hcmtlciBpcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi4KQEAg
LTMxNywyNyArMzMzLDE0IEBACiB7CiAgICAgSW50UmVjdCByZXN1bHQgPSBSZW5kZXJCbG9jazo6
Z2V0QWJzb2x1dGVSZXBhaW50UmVjdCgpOwogICAgIGlmIChtX21hcmtlciAmJiAhbV9tYXJrZXIt
PmlzSW5zaWRlKCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYW4gYmUgYSBzbG9wcHkgYW5kIGltcHJl
Y2lzZSBvZmZzZXQgYXMgbG9uZyBhcyBpdCdzIGFsd2F5cyB0b28gYmlnLgotICAgICAgICBpbnQg
cGl4SGVpZ2h0ID0gc3R5bGUoKS0+aHRtbEZvbnQoKS5nZXRGb250RGVmKCkuY29tcHV0ZWRQaXhl
bFNpemUoKTsKLSAgICAgICAgaW50IG9mZnNldCA9IHBpeEhlaWdodCoyLzM7Ci0gICAgICAgIGJv
b2wgaGF2ZUltYWdlID0gbV9tYXJrZXItPmxpc3RJbWFnZSgpICYmICFtX21hcmtlci0+bGlzdElt
YWdlKCktPmlzRXJyb3JJbWFnZSgpOwotICAgICAgICBpZiAoaGF2ZUltYWdlKQotICAgICAgICAg
ICAgb2Zmc2V0ID0gbV9tYXJrZXItPmxpc3RJbWFnZSgpLT5pbWFnZSgpLT53aWR0aCgpOwotICAg
ICAgICBpbnQgYnVsbGV0V2lkdGggPSBvZmZzZXQvMjsKLSAgICAgICAgaWYgKG9mZnNldCUyKQot
ICAgICAgICAgICAgYnVsbGV0V2lkdGgrKzsKLSAgICAgICAgaW50IHhvZmYgPSAwOwotICAgICAg
ICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICAgICAgeG9mZiA9IC1j
TWFya2VyUGFkZGluZyAtIG9mZnNldDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeG9mZiA9
IGNNYXJrZXJQYWRkaW5nICsgKGhhdmVJbWFnZSA/IDAgOiAob2Zmc2V0IC0gYnVsbGV0V2lkdGgp
KTsKLQotICAgICAgICBpZiAoeG9mZiA8IDApIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRYKHJl
c3VsdC54KCkgKyB4b2ZmKTsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRXaWR0aChyZXN1bHQud2lk
dGgoKSAtIHhvZmYpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5zZXRXaWR0
aChyZXN1bHQud2lkdGgoKSArIHhvZmYpOworICAgICAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBt
X21hcmtlci0+Z2V0UmVsYXRpdmVSZXBhaW50UmVjdCgpOworICAgICAgICAvLyBUaGUgbWFya2Vy
cyByZXBhaW50IHJlY3QgaXMgcmVsYXRpdmUgdG8gdGhlIGxpc3QgaXRlbSdzIHJlbmRlcmVyJ3Mg
cG9zaXRpb24KKyAgICAgICAgaW50IHgsIHk7CisgICAgICAgIGFic29sdXRlUG9zaXRpb24oeCwg
eSk7CisgICAgICAgIG1hcmtlclJlY3QubW92ZSh4LCB5KTsKKyAgICAgICAgcmVzdWx0LnVuaXRl
KG1hcmtlclJlY3QpOwogICAgIH0KKyAgICAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtMzg3LDg3ICszOTAsNDMgQEAKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChzdHls
ZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkgIHJldHVybjsKKyAgICAKKyAgICBJbnRSZWN0
IHJlY3QgPSBnZXRSZWxhdGl2ZVJlcGFpbnRSZWN0KCk7CiAKLSAgICBfdHggKz0gbV94OwotICAg
IF90eSArPSBtX3k7CisgICAgcmVjdC5tb3ZlKEludFBvaW50KF90eCwgX3R5KSk7CiAKLSAgICBp
ZiAoX3R5ID4gaS5yLmJvdHRvbSgpIHx8IF90eSArIG1faGVpZ2h0IDwgaS5yLnkoKSkKKyAgICBp
ZiAocmVjdC55KCkgPiBpLnIuYm90dG9tKCkgfHwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpIDwg
aS5yLnkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3Vu
ZE9yQm9yZGVyKCkpIAotICAgICAgICBwYWludEJveERlY29yYXRpb25zKGksIF90eCwgX3R5KTsK
KyAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhpLCByZWN0LngoKSwgcmVjdC55KCkpOwogCiAg
ICAgUVBhaW50ZXIqIHAgPSBpLnA7CiAgICAgcC0+c2V0Rm9udChzdHlsZSgpLT5mb250KCkpOwog
ICAgIGNvbnN0IFFGb250TWV0cmljcyBmbSA9IHAtPmZvbnRNZXRyaWNzKCk7CiAgICAgCi0gICAg
Ly8gVGhlIG1hcmtlciBuZWVkcyB0byBhZGp1c3QgaXRzIHR4LCBmb3IgdGhlIGNhc2Ugd2hlcmUg
aXQncyBhbiBvdXRzaWRlIG1hcmtlci4KLSAgICBSZW5kZXJPYmplY3QqIGxpc3RJdGVtID0gMDsK
LSAgICBpbnQgbGVmdExpbmVPZmZzZXQgPSAwOwotICAgIGludCByaWdodExpbmVPZmZzZXQgPSAw
OwotICAgIGlmICghaXNJbnNpZGUoKSkgewotICAgICAgICBsaXN0SXRlbSA9IHRoaXM7Ci0gICAg
ICAgIGludCB5T2Zmc2V0ID0gMDsKLSAgICAgICAgaW50IHhPZmZzZXQgPSAwOwotICAgICAgICB3
aGlsZSAobGlzdEl0ZW0gJiYgbGlzdEl0ZW0gIT0gbV9saXN0SXRlbSkgewotICAgICAgICAgICAg
eU9mZnNldCArPSBsaXN0SXRlbS0+eVBvcygpOwotICAgICAgICAgICAgeE9mZnNldCArPSBsaXN0
SXRlbS0+eFBvcygpOwotICAgICAgICAgICAgbGlzdEl0ZW0gPSBsaXN0SXRlbS0+cGFyZW50KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgb3VyIHhv
ZmZzZXQgd2l0aGluIHRoZSBsaXN0Ym94LCB3ZSBuZWVkIHRvIGFkanVzdCBvdXJzZWx2ZXMgYnkg
dGhlIGRlbHRhCi0gICAgICAgIC8vIGJldHdlZW4gb3VyIGN1cnJlbnQgeG9mZnNldCBhbmQgb3Vy
IGRlc2lyZWQgcG9zaXRpb24gKHdoaWNoIGlzIGp1c3Qgb3V0c2lkZSB0aGUgYm9yZGVyIGJveAot
ICAgICAgICAvLyBvZiB0aGUgbGlzdCBpdGVtKS4KLSAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVj
dGlvbigpID09IExUUikgewotICAgICAgICAgICAgbGVmdExpbmVPZmZzZXQgPSBtX2xpc3RJdGVt
LT5sZWZ0UmVsT2Zmc2V0KHlPZmZzZXQsIG1fbGlzdEl0ZW0tPmxlZnRPZmZzZXQoeU9mZnNldCkp
OwotICAgICAgICAgICAgX3R4IC09ICh4T2Zmc2V0IC0gbGVmdExpbmVPZmZzZXQpICsgbV9saXN0
SXRlbS0+cGFkZGluZ0xlZnQoKSArIG1fbGlzdEl0ZW0tPmJvcmRlckxlZnQoKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHJpZ2h0TGluZU9mZnNldCA9IG1fbGlzdEl0ZW0tPnJpZ2h0
UmVsT2Zmc2V0KHlPZmZzZXQsIG1fbGlzdEl0ZW0tPnJpZ2h0T2Zmc2V0KHlPZmZzZXQpKTsKLSAg
ICAgICAgICAgIF90eCArPSAocmlnaHRMaW5lT2Zmc2V0LXhPZmZzZXQpICsgbV9saXN0SXRlbS0+
cGFkZGluZ1JpZ2h0KCkgKyBtX2xpc3RJdGVtLT5ib3JkZXJSaWdodCgpOwotICAgICAgICB9Ci0g
ICAgfQotCiAgICAgaWYgKHAtPnByaW50aW5nKCkpIHsKLSAgICAgICAgaWYgKF90eSA8IGkuci55
KCkpCisgICAgICAgIGlmIChyZWN0LnkoKSA8IGkuci55KCkpCiAgICAgICAgICAgICAvLyBUaGlz
IGhhcyBiZWVuIHByaW50ZWQgYWxyZWFkeSB3ZSBzdXBwb3NlLgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICAgICAgUmVuZGVyQ2FudmFzKiBjID0gY2FudmFzKCk7Ci0gICAgICAg
IGlmIChfdHkgKyBtX2hlaWdodCArIHBhZGRpbmdCb3R0b20oKSArIGJvcmRlckJvdHRvbSgpID49
IGMtPnByaW50UmVjdCgpLmJvdHRvbSgpKSB7Ci0gICAgICAgICAgICBpZiAoX3R5IDwgYy0+dHJ1
bmNhdGVkQXQoKSkKLSAgICAgICAgICAgICAgICBjLT5zZXRCZXN0VHJ1bmNhdGVkQXQoX3R5LCB0
aGlzKTsKKyAgICAgICAgaWYgKHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSA+PSBjLT5wcmludFJl
Y3QoKS5ib3R0b20oKSkgeworICAgICAgICAgICAgaWYgKHJlY3QueSgpIDwgYy0+dHJ1bmNhdGVk
QXQoKSkKKyAgICAgICAgICAgICAgICBjLT5zZXRCZXN0VHJ1bmNhdGVkQXQocmVjdC55KCksIHRo
aXMpOwogICAgICAgICAgICAgLy8gTGV0J3MgcHJpbnQgdGhpcyBvbiB0aGUgbmV4dCBwYWdlLgog
ICAgICAgICAgICAgcmV0dXJuOyAKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpbnQgb2Zm
c2V0ID0gZm0uYXNjZW50KCkqMi8zOwotICAgIGJvb2wgaGF2ZUltYWdlID0gbV9saXN0SW1hZ2Ug
JiYgIW1fbGlzdEltYWdlLT5pc0Vycm9ySW1hZ2UoKTsKLSAgICBpZiAoaGF2ZUltYWdlKQotICAg
ICAgICBvZmZzZXQgPSBtX2xpc3RJbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKTsKLSAgICAKLSAgICBp
bnQgeG9mZiA9IDA7Ci0gICAgaW50IHlvZmYgPSBmbS5hc2NlbnQoKSAtIG9mZnNldDsKLQotICAg
IGludCBidWxsZXRXaWR0aCA9IG9mZnNldC8yOwotICAgIGlmIChvZmZzZXQlMikKLSAgICAgICAg
YnVsbGV0V2lkdGgrKzsKLSAgICBpZiAoIWlzSW5zaWRlKCkpIHsKLSAgICAgICAgaWYgKGxpc3RJ
dGVtLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICB4b2ZmID0gLWNN
YXJrZXJQYWRkaW5nIC0gb2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB4b2ZmID0g
Y01hcmtlclBhZGRpbmcgKyAoaGF2ZUltYWdlID8gMCA6IChvZmZzZXQgLSBidWxsZXRXaWR0aCkp
OwotICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQotICAgICAgICB4
b2ZmICs9IGhhdmVJbWFnZSA/IGNNYXJrZXJQYWRkaW5nIDogKG1fd2lkdGggLSBidWxsZXRXaWR0
aCk7Ci0gICAgCiAgICAgaWYgKG1fbGlzdEltYWdlICYmICFtX2xpc3RJbWFnZS0+aXNFcnJvcklt
YWdlKCkpIHsKLSAgICAgICAgcC0+ZHJhd0ltYWdlQXRQb2ludChtX2xpc3RJbWFnZS0+aW1hZ2Uo
KSwgSW50UG9pbnQoX3R4ICsgeG9mZiwgX3R5KSk7CisgICAgICAgIHAtPmRyYXdJbWFnZUF0UG9p
bnQobV9saXN0SW1hZ2UtPmltYWdlKCksIHJlY3QubG9jYXRpb24oKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0KKyAgICAKICNpZmRlZiBCT1hfREVCVUcKICAgICBwLT5zZXRQZW4oIFF0Ojpy
ZWQgKTsKLSAgICBwLT5kcmF3UmVjdCggX3R4ICsgeG9mZiwgX3R5ICsgeW9mZiwgb2Zmc2V0LCBv
ZmZzZXQgKTsKKyAgICBwLT5kcmF3UmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7CiAjZW5kaWYKIAogICAgIGNvbnN0IENvbG9yIGNvbG9yKCBzdHls
ZSgpLT5jb2xvcigpICk7CkBAIC00NzYsMzcgKzQzNSwzNSBAQAogICAgIHN3aXRjaChzdHlsZSgp
LT5saXN0U3R5bGVUeXBlKCkpIHsKICAgICBjYXNlIERJU0M6CiAgICAgICAgIHAtPnNldEJydXNo
KGNvbG9yKTsKLSAgICAgICAgcC0+ZHJhd0VsbGlwc2UoX3R4ICsgeG9mZiwgX3R5ICsgKDMgKiB5
b2ZmKS8yLCBidWxsZXRXaWR0aCwgYnVsbGV0V2lkdGgpOworICAgICAgICBwLT5kcmF3RWxsaXBz
ZShyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIENJUkNMRToKICAgICAgICAgcC0+c2V0QnJ1c2goV2ViQ29y
ZTo6QnJ1c2g6Ok5vQnJ1c2gpOwotICAgICAgICBwLT5kcmF3RWxsaXBzZShfdHggKyB4b2ZmLCBf
dHkgKyAoMyAqIHlvZmYpLzIsIGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CisgICAgICAgIHAt
PmRyYXdFbGxpcHNlKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU1FVQVJFOgogICAgICAgICBwLT5zZXRC
cnVzaChjb2xvcik7Ci0gICAgICAgIHAtPmRyYXdSZWN0KF90eCArIHhvZmYsIF90eSArICgzICog
eW9mZikvMiwgYnVsbGV0V2lkdGgsIGJ1bGxldFdpZHRoKTsKKyAgICAgICAgcC0+ZHJhd1JlY3Qo
cmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBMTk9ORToKICAgICAgICAgcmV0dXJuOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIGlmICghbV9pdGVtLmlzRW1wdHkoKSkgewotICAgICAgIAkgICAgX3R5ICs9IGZt
LmFzY2VudCgpOwotCiAgICAgICAgICAgICBpZiAoaXNJbnNpZGUoKSkgewogICAgICAgICAgICAg
CWlmKCBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKLSAgICAgICAgICAgICAgICAgICAg
cC0+ZHJhd1RleHQoX3R4LCBfdHksIDAsIDAsIDAsIDAsIFF0OjpBbGlnbkxlZnQsIG1faXRlbSk7
Ci0gICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KF90eCArIGZtLndpZHRoKG1faXRlbSwg
MCwgMCksIF90eSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgIi4gIik7CisgICAgICAgICAg
ICAgICAgICAgIHAtPmRyYXdUZXh0KHJlY3QueCgpLCByZWN0LnkoKSwgMCwgMCwgMCwgMCwgUXQ6
OkFsaWduTGVmdCwgbV9pdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQocmVj
dC54KCkgKyBmbS53aWR0aChtX2l0ZW0sIDAsIDApLCBfdHksIDAsIDAsIDAsIDAsIFF0OjpBbGln
bkxlZnQsICIuICIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHAtPmRyYXdUZXh0KF90eCwgX3R5LCAwLCAwLCAwLCAwLCBRdDo6QWxpZ25MZWZ0LCAiIC4i
KTsKLSAgICAgICAgICAgIAkgICAgcC0+ZHJhd1RleHQoX3R4ICsgZm0ud2lkdGgoIiAuIiwgMCwg
MCksIF90eSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgbV9pdGVtKTsKKyAgICAgICAgICAg
ICAgICAgICAgcC0+ZHJhd1RleHQocmVjdC54KCksIHJlY3QueSgpLCAwLCAwLCAwLCAwLCBRdDo6
QWxpZ25MZWZ0LCAiIC4iKTsKKyAgICAgICAgICAgIAkgICAgcC0+ZHJhd1RleHQocmVjdC54KCkg
KyBmbS53aWR0aCgiIC4iLCAwLCAwKSwgX3R5LCAwLCAwLCAwLCAwLCBRdDo6QWxpZ25MZWZ0LCBt
X2l0ZW0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICAgICAg
ICAgICAgICBwLT5kcmF3VGV4dChfdHggLSBvZmZzZXQvMiwgX3R5LCAwLCAwLCAwLCAwLCBRdDo6
QWxpZ25SaWdodCwgIi4gIik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KF90eCAt
IG9mZnNldC8yIC0gZm0ud2lkdGgoIi4gIiwgMCwgMCksIF90eSwgMCwgMCwgMCwgMCwgUXQ6OkFs
aWduUmlnaHQsIG1faXRlbSk7CisgICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHJlY3Qu
eCgpLCByZWN0LnkoKSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduUmlnaHQsICIuICIpOworICAgICAg
ICAgICAgICAgICAgICBwLT5kcmF3VGV4dChyZWN0LngoKSAtIGZtLndpZHRoKCIuICIsIDAsIDAp
LCByZWN0LnkoKSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduUmlnaHQsIG1faXRlbSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIAkgICAgcC0+ZHJhd1RleHQoX3R4ICsgb2Zm
c2V0IC8gMiwgX3R5LCAwLCAwLCAwLCAwLCBRdDo6QWxpZ25MZWZ0LCAiIC4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgcC0+ZHJhd1RleHQoX3R4ICsgb2Zmc2V0IC8gMiArIGZtLndpZHRoKCIgLiIs
IDAsIDApLCBfdHksIDAsIDAsIDAsIDAsIFF0OjpBbGlnbkxlZnQsIG1faXRlbSk7CisgICAgICAg
ICAgICAJICAgIHAtPmRyYXdUZXh0KHJlY3QueCgpLCByZWN0LnkoKSwgMCwgMCwgMCwgMCwgUXQ6
OkFsaWduTGVmdCwgIiAuIik7CisgICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHJlY3Qu
eCgpICsgZm0ud2lkdGgoIiAuIiwgMCwgMCksIHJlY3QueSgpLCAwLCAwLCAwLCAwLCBRdDo6QWxp
Z25MZWZ0LCBtX2l0ZW0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtNjQ4LDQgKzYwNSw4OSBAQAogICAgIHJldHVybiBtX2xpc3RJdGVtLT5ub3RJbkxp
c3QoKSB8fCBzdHlsZSgpLT5saXN0U3R5bGVQb3NpdGlvbigpID09IElOU0lERTsKIH0KIAorYm9v
bCBSZW5kZXJMaXN0TWFya2VyOjpub2RlQXRQb2ludChOb2RlSW5mbyYgaSwgaW50IHgsIGludCB5
LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQoreworICAgIElu
dFJlY3QgbWFya2VyUmVjdCA9IGdldFJlbGF0aXZlUmVwYWludFJlY3QoKTsKKyAgICBtYXJrZXJS
ZWN0Lm1vdmUodHgsIHR5KTsKKyAgICByZXR1cm4gbWFya2VyUmVjdC5jb250YWlucyh4LCB5KTsK
K30KKworSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZVJlcGFpbnRSZWN0KCkK
K3sKKyAgICBpbnQgeCA9IG1feDsKKyAgICBpbnQgeSA9IG1feTsKKyAgICAKKyAgICBSZW5kZXJP
YmplY3QqIGxpc3RJdGVtID0gMDsKKyAgICBpbnQgbGVmdExpbmVPZmZzZXQgPSAwOworICAgIGlu
dCByaWdodExpbmVPZmZzZXQgPSAwOworICAgIGlmICghaXNJbnNpZGUoKSkgeworICAgICAgICBs
aXN0SXRlbSA9IHRoaXM7CisgICAgICAgIGludCB5T2Zmc2V0ID0gMDsKKyAgICAgICAgaW50IHhP
ZmZzZXQgPSAwOworICAgICAgICB3aGlsZSAobGlzdEl0ZW0gJiYgbGlzdEl0ZW0gIT0gbV9saXN0
SXRlbSkgeworICAgICAgICAgICAgeU9mZnNldCArPSBsaXN0SXRlbS0+eVBvcygpOworICAgICAg
ICAgICAgeE9mZnNldCArPSBsaXN0SXRlbS0+eFBvcygpOworICAgICAgICAgICAgbGlzdEl0ZW0g
PSBsaXN0SXRlbS0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5v
dyB0aGF0IHdlIGhhdmUgb3VyIHhvZmZzZXQgd2l0aGluIHRoZSBsaXN0Ym94LCB3ZSBuZWVkIHRv
IGFkanVzdCBvdXJzZWx2ZXMgYnkgdGhlIGRlbHRhCisgICAgICAgIC8vIGJldHdlZW4gb3VyIGN1
cnJlbnQgeG9mZnNldCBhbmQgb3VyIGRlc2lyZWQgcG9zaXRpb24gKHdoaWNoIGlzIGp1c3Qgb3V0
c2lkZSB0aGUgYm9yZGVyIGJveAorICAgICAgICAvLyBvZiB0aGUgbGlzdCBpdGVtKS4KKyAgICAg
ICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgeworICAgICAgICAgICAgbGVmdExp
bmVPZmZzZXQgPSBtX2xpc3RJdGVtLT5sZWZ0UmVsT2Zmc2V0KHlPZmZzZXQsIG1fbGlzdEl0ZW0t
PmxlZnRPZmZzZXQoeU9mZnNldCkpOworICAgICAgICAgICAgeCAtPSAoeE9mZnNldCAtIGxlZnRM
aW5lT2Zmc2V0KSArIG1fbGlzdEl0ZW0tPnBhZGRpbmdMZWZ0KCkgKyBtX2xpc3RJdGVtLT5ib3Jk
ZXJMZWZ0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaWdodExpbmVPZmZzZXQg
PSBtX2xpc3RJdGVtLT5yaWdodFJlbE9mZnNldCh5T2Zmc2V0LCBtX2xpc3RJdGVtLT5yaWdodE9m
ZnNldCh5T2Zmc2V0KSk7CisgICAgICAgICAgICB4ICs9IChyaWdodExpbmVPZmZzZXQteE9mZnNl
dCkgKyBtX2xpc3RJdGVtLT5wYWRkaW5nUmlnaHQoKSArIG1fbGlzdEl0ZW0tPmJvcmRlclJpZ2h0
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtID0g
c3R5bGUoKS0+Zm9udE1ldHJpY3MoKTsKKyAgICAKKyAgICBpbnQgb2Zmc2V0ID0gZm0uYXNjZW50
KCkqMi8zOworICAgIGJvb2wgaGF2ZUltYWdlID0gbV9saXN0SW1hZ2UgJiYgIW1fbGlzdEltYWdl
LT5pc0Vycm9ySW1hZ2UoKTsKKyAgICBpZiAoaGF2ZUltYWdlKQorICAgICAgICBvZmZzZXQgPSBt
X2xpc3RJbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKTsKKyAgICAKKyAgICBpbnQgeG9mZiA9IDA7Cisg
ICAgaW50IHlvZmYgPSBmbS5hc2NlbnQoKSAtIG9mZnNldDsKKworICAgIGludCBidWxsZXRXaWR0
aCA9IG9mZnNldC8yOworICAgIGlmIChvZmZzZXQlMikKKyAgICAgICAgYnVsbGV0V2lkdGgrKzsK
KyAgICBpZiAoIWlzSW5zaWRlKCkpIHsKKyAgICAgICAgaWYgKGxpc3RJdGVtLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgICAgICB4b2ZmID0gLWNNYXJrZXJQYWRkaW5nIC0g
b2Zmc2V0OworICAgICAgICBlbHNlCisgICAgICAgICAgICB4b2ZmID0gY01hcmtlclBhZGRpbmcg
KyAoaGF2ZUltYWdlID8gMCA6IChvZmZzZXQgLSBidWxsZXRXaWR0aCkpOworICAgIH0gZWxzZSBp
ZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICB4b2ZmICs9IGhhdmVJbWFn
ZSA/IGNNYXJrZXJQYWRkaW5nIDogKG1fd2lkdGggLSBidWxsZXRXaWR0aCk7CisgICAgCisgICAg
aWYgKG1fbGlzdEltYWdlICYmICFtX2xpc3RJbWFnZS0+aXNFcnJvckltYWdlKCkpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KHggKyB4b2ZmLCB5LCAgbV9saXN0SW1hZ2UtPmltYWdlU2l6ZSgpLndp
ZHRoKCksIG1fbGlzdEltYWdlLT5pbWFnZVNpemUoKS5oZWlnaHQoKSk7CisgICAgCisgICAgc3dp
dGNoKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgeworICAgIGNhc2UgRElTQzoKKyAgICBjYXNl
IENJUkNMRToKKyAgICBjYXNlIFNRVUFSRToKKyAgICAgICAgcmV0dXJuIEludFJlY3QoeCArIHhv
ZmYsIHkgKyAoMyAqIHlvZmYpLzIsIGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CisgICAgY2Fz
ZSBMTk9ORToKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBpZiAobV9pdGVtLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgeSArPSBmbS5hc2NlbnQoKTsKKworICAgICAgICBpZiAoaXNJ
bnNpZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KHgsIHksIGZtLndpZHRoKG1faXRl
bSwgMCwgMCkgKyBmbS53aWR0aCgiLiAiLCAwLCAwKSwgZm0uaGVpZ2h0KCkpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoeCAtIG9mZnNldCAvIDIsIHksIGZtLndpZHRoKG1f
aXRlbSwgMCwgMCkgKyBmbS53aWR0aCgiLiAiLCAwLCAwKSwgZm0uaGVpZ2h0KCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KHggKyBvZmZzZXQgLyAy
LCB5LCBmbS53aWR0aChtX2l0ZW0sIDAsIDApICsgZm0ud2lkdGgoIi4gIiwgMCwgMCksIGZtLmhl
aWdodCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogI3VuZGVmIEJPWF9ERUJVRwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9yZW5kZXJfbGlzdC5oCShyZXZpc2lvbiAxMjkyNykKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL3JlbmRlcl9saXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3MCwxNiBAQAogICAg
IGNvbnN0IFFTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX2l0ZW07IH0KIAogICAgIGJv
b2wgaXNJbnNpZGUoKSBjb25zdDsKLQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChOb2RlSW5mbyYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbik7CisgICAgCisg
ICAgSW50UmVjdCBnZXRSZWxhdGl2ZVJlcGFpbnRSZWN0KCk7CisgICAgCiBwcml2YXRlOgogICAg
IFFTdHJpbmcgbV9pdGVtOwogICAgIENhY2hlZEltYWdlICptX2xpc3RJbWFnZTsKICAgICBSZW5k
ZXJMaXN0SXRlbSogbV9saXN0SXRlbTsKKyAgICBJbnRSZWN0IG1fcmVjdDsKIH07CiAKIGNsYXNz
IExpc3RNYXJrZXJCb3ggOiBwdWJsaWMgSW5saW5lQm94CkBAIC0xMTYsNiArMTIxLDggQEAKICAg
ICBib29sIG5vdEluTGlzdCgpIGNvbnN0IHsgcmV0dXJuIF9ub3RJbkxpc3Q7IH0KIAogICAgIFFT
dHJpbmcgbWFya2VyU3RyaW5nVmFsdWUoKSB7IHJldHVybiBtX21hcmtlciA/IG1fbWFya2VyLT50
ZXh0KCkgOiAiIjsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5m
byYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVzdEFjdGlvbik7CiAKIHByaXZhdGU6CiAgICAg
aW50IHByZWRlZlZhbDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6689</attachid>
            <date>2006-02-23 16:32:39 -0800</date>
            <delta_ts>2006-03-03 00:59:28 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6844-2.txt</filename>
            <type>text/plain</type>
            <size>16345</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2xpc3QtbWFya2VyLTEuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9saXN0LW1hcmtlci0xLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9saXN0LW1hcmtlci0xLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACis8c2NyaXB0PgordmFyIGNsaWNrcyA9IDA7Cit2
YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7Cit2YXIgeCwg
eTsKKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKKyAgICB2YXIgY29uc29sZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyk7CisgICAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShtZXNzYWdlKTsKKyAgICBjb25zb2xlLmFwcGVuZENoaWxkKHRleHQpOworICAg
IGNvbnNvbGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Cit9CisK
K2Z1bmN0aW9uIGNsaWNrSGFuZGxlcihlbGVtZW50KSB7CisgICAgbG9nKCJvbmNsaWNrOiAiICsg
ZWxlbWVudCk7Cit9CisKK2Z1bmN0aW9uIGNsaWNrQ291bnRlcigpIHsKKyAgICBjbGlja3MrKzsK
K30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKworICAgIGlmICghbGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICAgICAgZG9jdW1lbnQud3JpdGUoIkNhbm5vdCBiZSBydW4gaW50ZXJhY3RpdmVs
eSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKworICAgIHZhciB1bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ1bCIpOworICAgIHZhciBsaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaSIpOworICAg
IHZhciBzcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwYW4iKTsKKyAgICAKKyAgICB5
ID0gbGkub2Zmc2V0VG9wICsgbGkub2Zmc2V0SGVpZ2h0IC8gMjsKKworICAgIGxpLnN0eWxlLmxp
c3RTdHlsZVBvc2l0aW9uID0gImluc2lkZSI7CisgICAgCisgICAgLy8gV2ViQ29yZSByZW5kZXJz
IGFuIGluc2lkZSBsaXN0IG1hcmtlciByaWdodCB1cCBhZ2FpbnN0IHRoZSBsZWZ0IGVkZ2Ugb2Yg
dGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgbGlzdCBpdGVtLgorICAgIC8vIFRoaXMgeCBwb3NpdGlv
biBzaG91bGQgcHV0IHVzIG92ZXIgdGhlIGxpc3QgbWFya2VyIAorICAgIHggPSBsaS5vZmZzZXRM
ZWZ0ICsgMTA7CisKKyAgICAvLyBTZXQgdGhlIGxlZnQgbWFyZ2luIG9mIHRoZSBzcGFuIHNvIHRo
YXQgdGhlIHRleHQgaW5zaWRlIGl0IG92ZXJsYXBzIHRoZSBsaXN0IG1hcmtlci4gIENsaWNraW5n
IG9uIGEgc3BvdCBvdmVyCisgICAgLy8gdGhlIGxpc3QgbWFya2VyIHNob3VsZCBjYXVzZSB0aGUg
Zm9sbG93aW5nIG9uY2xpY2sgZmlyZSBvcmRlcjogc3BhbiwgbGksIHVsCisgICAgc3Bhbi5zdHls
ZS5tYXJnaW5MZWZ0ID0gLTEwMDsKKyAgICBsb2coIlRoZSBvbmNsaWNrIGZpcmUgb3JkZXIgc2hv
dWxkIGJlOiBzcGFuLCB1bCwgbGkiKTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5
KTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVw
KCk7CisKKyAgICAvLyBTZXQgdGhlIGxlZnQgbWFyZ2luIG9mIHRoZSBzcGFuIHNvIHRoYXQgdGhl
IHRleHQgaW5zaWRlIGl0IG92ZXJsYXBzIHRoZSBsaXN0IG1hcmtlci4gIENsaWNraW5nIG9uIGEg
c3BvdCBvdmVyCisgICAgLy8gdGhlIGxpc3QgbWFya2VyIHNob3VsZCBjYXVzZSB0aGUgZm9sbG93
aW5nIG9uY2xpY2sgZmlyZSBvcmRlcjogbGksIHVsCisgICAgc3Bhbi5zdHlsZS5tYXJnaW5MZWZ0
ID0gMDsKKyAgICBsb2coIlRoZSBvbmNsaWNrIGZpcmUgb3JkZXIgc2hvdWxkIGJlOiB1bCwgbGki
KTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICBldmVudFNlbmRlci5t
b3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisKKyAgICBsaS5zdHlsZS5s
aXN0U3R5bGVQb3NpdGlvbiA9ICJvdXRzaWRlIjsKKyAgICAvLyBXZWJDb3JlIHJlbmRlcnMgYW4g
b3V0c2lkZSBsaXN0IG1hcmtlciBhdCBvZmZzZXRMZWZ0IG1pbnVzIGFuIG9mZnNldCwgd2hpY2gg
aXMgZXF1YWwgb24gYQorICAgIC8vIG1hZ2ljIG51bWJlciwgNywgcGx1cyB0aGUgYXNjZW50IG9m
IHRoZSBmb250ICogMi8zLiAgU2luY2Ugd2UgY2FuJ3QgZ2V0IHRoZSBhc2NlbnQgZnJvbSBKUywg
anVzdCBtYWtlIHN1cmUgdGhhdAorICAgIC8vIHRoZSBsaXN0IG1hcmtlciBpcyBoaXQgYXQgc29t
ZSBwb2ludCBiZXR3ZWVuIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGxpc3QgaXRlbSBhbmQgdGhlIGxl
ZnQgZWRnZSBvZiB0aGUgbGlzdC4KKyAgICAKKyAgICBsaS5vbmNsaWNrID0gY2xpY2tDb3VudGVy
OworICAgIHVsLm9uY2xpY2sgPSAwOworICAgIAorICAgIGZvciAoeCA9IHVsLm9mZnNldExlZnQ7
IHggPCBsaS5vZmZzZXRMZWZ0OyB4ICs9IDUpIHsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VN
b3ZlVG8oeCwgeSk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBl
dmVudFNlbmRlci5tb3VzZVVwKCk7ICAgCisgICAgfQorICAgIAorICAgIGlmIChjbGlja3MgPT0g
MCkKKyAgICAgICAgbG9nKCJGYWlsdXJlLCB0aGUgbGlzdCBtYXJrZXIgd2Fzbid0IGhpdCBkdXJp
bmcgYW55IG9mIHRoZSBtb3VzZSBjbGlja3MgYmV0d2VlbiB0aGUgbGVmdCBlZGdlIG9mIHRoZSBs
aXN0IGl0ZW0gYW5kIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGxpc3QuIik7Cit9CisKKzwvc2NyaXB0
PgorCis8c3R5bGU+CitsaSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICBsaXN0
LXN0eWxlLXR5cGU6IHNxdWFyZTsKKyAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlOwor
ICAgIGZvbnQtc2l6ZTogNzBweDsKKyAgICBjb2xvcjogd2hpdGU7CisgICAgcGFkZGluZzogMDsK
KyAgICBtYXJnaW46IDA7Cit9Cit1bCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOworICAg
IHBhZGRpbmc6IDA7CisgICAgbWFyZ2luOiAwOworICAgIHBhZGRpbmctbGVmdDogNzBweDsKK30K
Kzwvc3R5bGU+CisKKzx1bCBpZD0idWwiIG9uY2xpY2s9ImNsaWNrSGFuZGxlcigndWwnKTsiPgor
PGxpIGlkPSJsaSIgb25jbGljaz0iY2xpY2tIYW5kbGVyKCdsaScpOyI+PHNwYW4gaWQ9InNwYW4i
IG9uY2xpY2s9ImNsaWNrSGFuZGxlcignc3BhbicpIj50ZXh0PC9zcGFuPjwvbGk+Cis8L3VsPgor
Cis8cD5UaGlzIGlzIGEgdGVzdGNhc2UgZm9yIGhpdCB0ZXN0aW5nIG92ZXIgbGlzdCBtYXJrZXJz
LiAgSXQgdXNlcyB0aGUgZXZlbnRTZW5kZXIgdG8gZG8gbW91c2UgY2xpY2tzIGFuZCBwcm9ncmFt
bWF0aWNhbGx5IGFkanVzdHMgdGhlIGxlZnQgbWFyZ2luIG9mIHRoZSBzcGFuIGluc2lkZSB0aGUg
bGlzdCBpdGVtIGFuZCB0aGUgbGlzdC1zdHlsZS1wb3NpdGlvbjogb2YgdGhlIGxpc3QgaXRlbS48
L3A+CisKKzxwIGlkPSJjb25zb2xlIj48L3A+CisKKzxzY3JpcHQ+CitydW5UZXN0KCk7Cis8L3Nj
cmlwdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9yZW5kZXJfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVy
X2xpc3QuY3BwCShyZXZpc2lvbiAxMjkyNykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9s
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDYgKzI4OCwyMiBAQAogICAgIH0KIH0KIAor
Ly8gV2UgbmVlZCB0byBvdmVycmlkZSBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQgc28gdGhhdCBh
IHBvaW50IG92ZXIgYW4gb3V0c2lkZSBsaXN0IG1hcmtlciB3aWxsIHJldHVybiB0aGUgbGlzdCBp
dGVtLgorLy8gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIHdoZW4gd2UgaW1wcm92ZSB0aGUgd2F5IGxp
c3QgbWFya2VycyBhcmUgc3RvcmVkIGluIHRoZSByZW5kZXIgdHJlZS4KK2Jvb2wgUmVuZGVyTGlz
dEl0ZW06Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCit7CisgICAgaWYgKFJlbmRlckJsb2Nr
Ojpub2RlQXRQb2ludChpLCB4LCB5LCB0eCwgdHksIGhpdFRlc3RBY3Rpb24pKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIW1fbWFya2VyIHx8IG1fbWFya2VyLT5pc0luc2lk
ZSgpIHx8IGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZvcmVncm91bmQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBib29sIGluc2lkZU1hcmtlciA9IG1fbWFya2VyLT5ub2RlQXRQ
b2ludChpLCB4LCB5LCB0eCArIG1feCwgdHkgKyBtX3ksIGhpdFRlc3RBY3Rpb24pOworICAgIGlm
IChpbnNpZGVNYXJrZXIpCisgICAgICAgIHNldElubmVyTm9kZShpKTsKKyAgICByZXR1cm4gaW5z
aWRlTWFya2VyOworfQorCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpjYWxjTWluTWF4V2lkdGgoKQog
ewogICAgIC8vIE1ha2Ugc3VyZSBvdXIgbWFya2VyIGlzIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9u
LgpAQCAtMzE3LDI3ICszMzMsMTQgQEAKIHsKICAgICBJbnRSZWN0IHJlc3VsdCA9IFJlbmRlckJs
b2NrOjpnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCk7CiAgICAgaWYgKG1fbWFya2VyICYmICFtX21h
cmtlci0+aXNJbnNpZGUoKSkgewotICAgICAgICAvLyBUaGlzIGNhbiBiZSBhIHNsb3BweSBhbmQg
aW1wcmVjaXNlIG9mZnNldCBhcyBsb25nIGFzIGl0J3MgYWx3YXlzIHRvbyBiaWcuCi0gICAgICAg
IGludCBwaXhIZWlnaHQgPSBzdHlsZSgpLT5odG1sRm9udCgpLmdldEZvbnREZWYoKS5jb21wdXRl
ZFBpeGVsU2l6ZSgpOwotICAgICAgICBpbnQgb2Zmc2V0ID0gcGl4SGVpZ2h0KjIvMzsKLSAgICAg
ICAgYm9vbCBoYXZlSW1hZ2UgPSBtX21hcmtlci0+bGlzdEltYWdlKCkgJiYgIW1fbWFya2VyLT5s
aXN0SW1hZ2UoKS0+aXNFcnJvckltYWdlKCk7Ci0gICAgICAgIGlmIChoYXZlSW1hZ2UpCi0gICAg
ICAgICAgICBvZmZzZXQgPSBtX21hcmtlci0+bGlzdEltYWdlKCktPmltYWdlKCktPndpZHRoKCk7
Ci0gICAgICAgIGludCBidWxsZXRXaWR0aCA9IG9mZnNldC8yOwotICAgICAgICBpZiAob2Zmc2V0
JTIpCi0gICAgICAgICAgICBidWxsZXRXaWR0aCsrOwotICAgICAgICBpbnQgeG9mZiA9IDA7Ci0g
ICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICB4b2Zm
ID0gLWNNYXJrZXJQYWRkaW5nIC0gb2Zmc2V0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB4
b2ZmID0gY01hcmtlclBhZGRpbmcgKyAoaGF2ZUltYWdlID8gMCA6IChvZmZzZXQgLSBidWxsZXRX
aWR0aCkpOwotCi0gICAgICAgIGlmICh4b2ZmIDwgMCkgewotICAgICAgICAgICAgcmVzdWx0LnNl
dFgocmVzdWx0LngoKSArIHhvZmYpOwotICAgICAgICAgICAgcmVzdWx0LnNldFdpZHRoKHJlc3Vs
dC53aWR0aCgpIC0geG9mZik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0LnNl
dFdpZHRoKHJlc3VsdC53aWR0aCgpICsgeG9mZik7CisgICAgICAgIEludFJlY3QgbWFya2VyUmVj
dCA9IG1fbWFya2VyLT5nZXRSZWxhdGl2ZVJlcGFpbnRSZWN0KCk7CisgICAgICAgIC8vIFRoZSBt
YXJrZXJzIHJlcGFpbnQgcmVjdCBpcyByZWxhdGl2ZSB0byB0aGUgbGlzdCBpdGVtJ3MgcmVuZGVy
ZXIncyBwb3NpdGlvbgorICAgICAgICBpbnQgeCwgeTsKKyAgICAgICAgYWJzb2x1dGVQb3NpdGlv
bih4LCB5KTsKKyAgICAgICAgbWFya2VyUmVjdC5tb3ZlKHgsIHkpOworICAgICAgICByZXN1bHQu
dW5pdGUobWFya2VyUmVjdCk7CiAgICAgfQorICAgICAgICAKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkBAIC0zODcsODcgKzM5MCw0MyBAQAogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYg
KHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSAgcmV0dXJuOworICAgIAorICAgIElu
dFJlY3QgcmVjdCA9IGdldFJlbGF0aXZlUmVwYWludFJlY3QoKTsKIAotICAgIF90eCArPSBtX3g7
Ci0gICAgX3R5ICs9IG1feTsKKyAgICByZWN0Lm1vdmUoSW50UG9pbnQoX3R4LCBfdHkpKTsKIAot
ICAgIGlmIChfdHkgPiBpLnIuYm90dG9tKCkgfHwgX3R5ICsgbV9oZWlnaHQgPCBpLnIueSgpKQor
ICAgIGlmIChyZWN0LnkoKSA+IGkuci5ib3R0b20oKSB8fCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0
KCkgPCBpLnIueSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkUGFpbnRCYWNr
Z3JvdW5kT3JCb3JkZXIoKSkgCi0gICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMoaSwgX3R4LCBf
dHkpOworICAgICAgICBwYWludEJveERlY29yYXRpb25zKGksIHJlY3QueCgpLCByZWN0LnkoKSk7
CiAKICAgICBRUGFpbnRlciogcCA9IGkucDsKICAgICBwLT5zZXRGb250KHN0eWxlKCktPmZvbnQo
KSk7CiAgICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtID0gcC0+Zm9udE1ldHJpY3MoKTsKICAgICAK
LSAgICAvLyBUaGUgbWFya2VyIG5lZWRzIHRvIGFkanVzdCBpdHMgdHgsIGZvciB0aGUgY2FzZSB3
aGVyZSBpdCdzIGFuIG91dHNpZGUgbWFya2VyLgotICAgIFJlbmRlck9iamVjdCogbGlzdEl0ZW0g
PSAwOwotICAgIGludCBsZWZ0TGluZU9mZnNldCA9IDA7Ci0gICAgaW50IHJpZ2h0TGluZU9mZnNl
dCA9IDA7Ci0gICAgaWYgKCFpc0luc2lkZSgpKSB7Ci0gICAgICAgIGxpc3RJdGVtID0gdGhpczsK
LSAgICAgICAgaW50IHlPZmZzZXQgPSAwOwotICAgICAgICBpbnQgeE9mZnNldCA9IDA7Ci0gICAg
ICAgIHdoaWxlIChsaXN0SXRlbSAmJiBsaXN0SXRlbSAhPSBtX2xpc3RJdGVtKSB7Ci0gICAgICAg
ICAgICB5T2Zmc2V0ICs9IGxpc3RJdGVtLT55UG9zKCk7Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9
IGxpc3RJdGVtLT54UG9zKCk7Ci0gICAgICAgICAgICBsaXN0SXRlbSA9IGxpc3RJdGVtLT5wYXJl
bnQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBv
dXIgeG9mZnNldCB3aXRoaW4gdGhlIGxpc3Rib3gsIHdlIG5lZWQgdG8gYWRqdXN0IG91cnNlbHZl
cyBieSB0aGUgZGVsdGEKLSAgICAgICAgLy8gYmV0d2VlbiBvdXIgY3VycmVudCB4b2Zmc2V0IGFu
ZCBvdXIgZGVzaXJlZCBwb3NpdGlvbiAod2hpY2ggaXMganVzdCBvdXRzaWRlIHRoZSBib3JkZXIg
Ym94Ci0gICAgICAgIC8vIG9mIHRoZSBsaXN0IGl0ZW0pLgotICAgICAgICBpZiAoc3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gTFRSKSB7Ci0gICAgICAgICAgICBsZWZ0TGluZU9mZnNldCA9IG1fbGlz
dEl0ZW0tPmxlZnRSZWxPZmZzZXQoeU9mZnNldCwgbV9saXN0SXRlbS0+bGVmdE9mZnNldCh5T2Zm
c2V0KSk7Ci0gICAgICAgICAgICBfdHggLT0gKHhPZmZzZXQgLSBsZWZ0TGluZU9mZnNldCkgKyBt
X2xpc3RJdGVtLT5wYWRkaW5nTGVmdCgpICsgbV9saXN0SXRlbS0+Ym9yZGVyTGVmdCgpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmlnaHRMaW5lT2Zmc2V0ID0gbV9saXN0SXRlbS0+
cmlnaHRSZWxPZmZzZXQoeU9mZnNldCwgbV9saXN0SXRlbS0+cmlnaHRPZmZzZXQoeU9mZnNldCkp
OwotICAgICAgICAgICAgX3R4ICs9IChyaWdodExpbmVPZmZzZXQteE9mZnNldCkgKyBtX2xpc3RJ
dGVtLT5wYWRkaW5nUmlnaHQoKSArIG1fbGlzdEl0ZW0tPmJvcmRlclJpZ2h0KCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KICAgICBpZiAocC0+cHJpbnRpbmcoKSkgewotICAgICAgICBpZiAoX3R5IDwg
aS5yLnkoKSkKKyAgICAgICAgaWYgKHJlY3QueSgpIDwgaS5yLnkoKSkKICAgICAgICAgICAgIC8v
IFRoaXMgaGFzIGJlZW4gcHJpbnRlZCBhbHJlYWR5IHdlIHN1cHBvc2UuCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAogICAgICAgICBSZW5kZXJDYW52YXMqIGMgPSBjYW52YXMoKTsKLSAg
ICAgICAgaWYgKF90eSArIG1faGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSgpICsgYm9yZGVyQm90dG9t
KCkgPj0gYy0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKLSAgICAgICAgICAgIGlmIChfdHkgPCBj
LT50cnVuY2F0ZWRBdCgpKQotICAgICAgICAgICAgICAgIGMtPnNldEJlc3RUcnVuY2F0ZWRBdChf
dHksIHRoaXMpOworICAgICAgICBpZiAocmVjdC55KCkgKyByZWN0LmhlaWdodCgpID49IGMtPnBy
aW50UmVjdCgpLmJvdHRvbSgpKSB7CisgICAgICAgICAgICBpZiAocmVjdC55KCkgPCBjLT50cnVu
Y2F0ZWRBdCgpKQorICAgICAgICAgICAgICAgIGMtPnNldEJlc3RUcnVuY2F0ZWRBdChyZWN0Lnko
KSwgdGhpcyk7CiAgICAgICAgICAgICAvLyBMZXQncyBwcmludCB0aGlzIG9uIHRoZSBuZXh0IHBh
Z2UuCiAgICAgICAgICAgICByZXR1cm47IAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlu
dCBvZmZzZXQgPSBmbS5hc2NlbnQoKSoyLzM7Ci0gICAgYm9vbCBoYXZlSW1hZ2UgPSBtX2xpc3RJ
bWFnZSAmJiAhbV9saXN0SW1hZ2UtPmlzRXJyb3JJbWFnZSgpOwotICAgIGlmIChoYXZlSW1hZ2Up
Ci0gICAgICAgIG9mZnNldCA9IG1fbGlzdEltYWdlLT5pbWFnZSgpLT53aWR0aCgpOwotICAgIAot
ICAgIGludCB4b2ZmID0gMDsKLSAgICBpbnQgeW9mZiA9IGZtLmFzY2VudCgpIC0gb2Zmc2V0Owot
Ci0gICAgaW50IGJ1bGxldFdpZHRoID0gb2Zmc2V0LzI7Ci0gICAgaWYgKG9mZnNldCUyKQotICAg
ICAgICBidWxsZXRXaWR0aCsrOwotICAgIGlmICghaXNJbnNpZGUoKSkgewotICAgICAgICBpZiAo
bGlzdEl0ZW0tPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKLSAgICAgICAgICAgIHhvZmYg
PSAtY01hcmtlclBhZGRpbmcgLSBvZmZzZXQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHhv
ZmYgPSBjTWFya2VyUGFkZGluZyArIChoYXZlSW1hZ2UgPyAwIDogKG9mZnNldCAtIGJ1bGxldFdp
ZHRoKSk7Ci0gICAgfSBlbHNlIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCi0gICAg
ICAgIHhvZmYgKz0gaGF2ZUltYWdlID8gY01hcmtlclBhZGRpbmcgOiAobV93aWR0aCAtIGJ1bGxl
dFdpZHRoKTsKLSAgICAKICAgICBpZiAobV9saXN0SW1hZ2UgJiYgIW1fbGlzdEltYWdlLT5pc0Vy
cm9ySW1hZ2UoKSkgewotICAgICAgICBwLT5kcmF3SW1hZ2VBdFBvaW50KG1fbGlzdEltYWdlLT5p
bWFnZSgpLCBJbnRQb2ludChfdHggKyB4b2ZmLCBfdHkpKTsKKyAgICAgICAgcC0+ZHJhd0ltYWdl
QXRQb2ludChtX2xpc3RJbWFnZS0+aW1hZ2UoKSwgcmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLQorICAgIAogI2lmZGVmIEJPWF9ERUJVRwogICAgIHAtPnNldFBlbigg
UXQ6OnJlZCApOwotICAgIHAtPmRyYXdSZWN0KCBfdHggKyB4b2ZmLCBfdHkgKyB5b2ZmLCBvZmZz
ZXQsIG9mZnNldCApOworICAgIHAtPmRyYXdSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICNlbmRpZgogCiAgICAgY29uc3QgQ29sb3IgY29sb3Io
IHN0eWxlKCktPmNvbG9yKCkgKTsKQEAgLTQ3NiwzNyArNDM1LDM1IEBACiAgICAgc3dpdGNoKHN0
eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewogICAgIGNhc2UgRElTQzoKICAgICAgICAgcC0+c2V0
QnJ1c2goY29sb3IpOwotICAgICAgICBwLT5kcmF3RWxsaXBzZShfdHggKyB4b2ZmLCBfdHkgKyAo
MyAqIHlvZmYpLzIsIGJ1bGxldFdpZHRoLCBidWxsZXRXaWR0aCk7CisgICAgICAgIHAtPmRyYXdF
bGxpcHNlKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ0lSQ0xFOgogICAgICAgICBwLT5zZXRCcnVzaChX
ZWJDb3JlOjpCcnVzaDo6Tm9CcnVzaCk7Ci0gICAgICAgIHAtPmRyYXdFbGxpcHNlKF90eCArIHhv
ZmYsIF90eSArICgzICogeW9mZikvMiwgYnVsbGV0V2lkdGgsIGJ1bGxldFdpZHRoKTsKKyAgICAg
ICAgcC0+ZHJhd0VsbGlwc2UocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTUVVBUkU6CiAgICAgICAgIHAt
PnNldEJydXNoKGNvbG9yKTsKLSAgICAgICAgcC0+ZHJhd1JlY3QoX3R4ICsgeG9mZiwgX3R5ICsg
KDMgKiB5b2ZmKS8yLCBidWxsZXRXaWR0aCwgYnVsbGV0V2lkdGgpOworICAgICAgICBwLT5kcmF3
UmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIExOT05FOgogICAgICAgICByZXR1cm47CiAgICAgZGVm
YXVsdDoKICAgICAgICAgaWYgKCFtX2l0ZW0uaXNFbXB0eSgpKSB7Ci0gICAgICAgCSAgICBfdHkg
Kz0gZm0uYXNjZW50KCk7Ci0KICAgICAgICAgICAgIGlmIChpc0luc2lkZSgpKSB7CiAgICAgICAg
ICAgICAJaWYoIHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICAgICAgICAg
ICAgICBwLT5kcmF3VGV4dChfdHgsIF90eSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgbV9p
dGVtKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoX3R4ICsgZm0ud2lkdGgobV9p
dGVtLCAwLCAwKSwgX3R5LCAwLCAwLCAwLCAwLCBRdDo6QWxpZ25MZWZ0LCAiLiAiKTsKKyAgICAg
ICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQocmVjdC54KCksIHJlY3QueSgpLCAwLCAwLCAwLCAw
LCBRdDo6QWxpZ25MZWZ0LCBtX2l0ZW0pOworICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4
dChyZWN0LngoKSArIGZtLndpZHRoKG1faXRlbSwgMCwgMCksIHJlY3QueSgpLCAwLCAwLCAwLCAw
LCBRdDo6QWxpZ25MZWZ0LCAiLiAiKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBwLT5kcmF3VGV4dChfdHgsIF90eSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWdu
TGVmdCwgIiAuIik7Ci0gICAgICAgICAgICAJICAgIHAtPmRyYXdUZXh0KF90eCArIGZtLndpZHRo
KCIgLiIsIDAsIDApLCBfdHksIDAsIDAsIDAsIDAsIFF0OjpBbGlnbkxlZnQsIG1faXRlbSk7Cisg
ICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHJlY3QueCgpLCByZWN0LnkoKSwgMCwgMCwg
MCwgMCwgUXQ6OkFsaWduTGVmdCwgIiAuIik7CisgICAgICAgICAgICAJICAgIHAtPmRyYXdUZXh0
KHJlY3QueCgpICsgZm0ud2lkdGgoIiAuIiwgMCwgMCksIHJlY3QueSgpLCAwLCAwLCAwLCAwLCBR
dDo6QWxpZ25MZWZ0LCBtX2l0ZW0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikg
ewotICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChfdHggLSBvZmZzZXQvMiwgX3R5LCAw
LCAwLCAwLCAwLCBRdDo6QWxpZ25SaWdodCwgIi4gIik7Ci0gICAgICAgICAgICAgICAgICAgIHAt
PmRyYXdUZXh0KF90eCAtIG9mZnNldC8yIC0gZm0ud2lkdGgoIi4gIiwgMCwgMCksIF90eSwgMCwg
MCwgMCwgMCwgUXQ6OkFsaWduUmlnaHQsIG1faXRlbSk7CisgICAgICAgICAgICAgICAgICAgIHAt
PmRyYXdUZXh0KHJlY3QueCgpLCByZWN0LnkoKSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduUmlnaHQs
ICIuICIpOworICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChyZWN0LngoKSAtIGZtLndp
ZHRoKCIuICIsIDAsIDApLCByZWN0LnkoKSwgMCwgMCwgMCwgMCwgUXQ6OkFsaWduUmlnaHQsIG1f
aXRlbSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIAkgICAgcC0+ZHJh
d1RleHQoX3R4ICsgb2Zmc2V0IC8gMiwgX3R5LCAwLCAwLCAwLCAwLCBRdDo6QWxpZ25MZWZ0LCAi
IC4iKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoX3R4ICsgb2Zmc2V0IC8gMiAr
IGZtLndpZHRoKCIgLiIsIDAsIDApLCBfdHksIDAsIDAsIDAsIDAsIFF0OjpBbGlnbkxlZnQsIG1f
aXRlbSk7CisgICAgICAgICAgICAJICAgIHAtPmRyYXdUZXh0KHJlY3QueCgpLCByZWN0LnkoKSwg
MCwgMCwgMCwgMCwgUXQ6OkFsaWduTGVmdCwgIiAuIik7CisgICAgICAgICAgICAgICAgICAgIHAt
PmRyYXdUZXh0KHJlY3QueCgpICsgZm0ud2lkdGgoIiAuIiwgMCwgMCksIHJlY3QueSgpLCAwLCAw
LCAwLCAwLCBRdDo6QWxpZ25MZWZ0LCBtX2l0ZW0pOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtNjQ4LDQgKzYwNSw4OSBAQAogICAgIHJldHVybiBtX2xp
c3RJdGVtLT5ub3RJbkxpc3QoKSB8fCBzdHlsZSgpLT5saXN0U3R5bGVQb3NpdGlvbigpID09IElO
U0lERTsKIH0KIAorYm9vbCBSZW5kZXJMaXN0TWFya2VyOjpub2RlQXRQb2ludChOb2RlSW5mbyYg
aSwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0
aW9uKQoreworICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGdldFJlbGF0aXZlUmVwYWludFJlY3Qo
KTsKKyAgICBtYXJrZXJSZWN0Lm1vdmUodHgsIHR5KTsKKyAgICByZXR1cm4gbWFya2VyUmVjdC5j
b250YWlucyh4LCB5KTsKK30KKworSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2
ZVJlcGFpbnRSZWN0KCkKK3sKKyAgICBpbnQgeCA9IG1feDsKKyAgICBpbnQgeSA9IG1feTsKKyAg
ICAKKyAgICBSZW5kZXJPYmplY3QqIGxpc3RJdGVtID0gMDsKKyAgICBpbnQgbGVmdExpbmVPZmZz
ZXQgPSAwOworICAgIGludCByaWdodExpbmVPZmZzZXQgPSAwOworICAgIGlmICghaXNJbnNpZGUo
KSkgeworICAgICAgICBsaXN0SXRlbSA9IHRoaXM7CisgICAgICAgIGludCB5T2Zmc2V0ID0gMDsK
KyAgICAgICAgaW50IHhPZmZzZXQgPSAwOworICAgICAgICB3aGlsZSAobGlzdEl0ZW0gJiYgbGlz
dEl0ZW0gIT0gbV9saXN0SXRlbSkgeworICAgICAgICAgICAgeU9mZnNldCArPSBsaXN0SXRlbS0+
eVBvcygpOworICAgICAgICAgICAgeE9mZnNldCArPSBsaXN0SXRlbS0+eFBvcygpOworICAgICAg
ICAgICAgbGlzdEl0ZW0gPSBsaXN0SXRlbS0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgb3VyIHhvZmZzZXQgd2l0aGluIHRoZSBsaXN0
Ym94LCB3ZSBuZWVkIHRvIGFkanVzdCBvdXJzZWx2ZXMgYnkgdGhlIGRlbHRhCisgICAgICAgIC8v
IGJldHdlZW4gb3VyIGN1cnJlbnQgeG9mZnNldCBhbmQgb3VyIGRlc2lyZWQgcG9zaXRpb24gKHdo
aWNoIGlzIGp1c3Qgb3V0c2lkZSB0aGUgYm9yZGVyIGJveAorICAgICAgICAvLyBvZiB0aGUgbGlz
dCBpdGVtKS4KKyAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgeworICAg
ICAgICAgICAgbGVmdExpbmVPZmZzZXQgPSBtX2xpc3RJdGVtLT5sZWZ0UmVsT2Zmc2V0KHlPZmZz
ZXQsIG1fbGlzdEl0ZW0tPmxlZnRPZmZzZXQoeU9mZnNldCkpOworICAgICAgICAgICAgeCAtPSAo
eE9mZnNldCAtIGxlZnRMaW5lT2Zmc2V0KSArIG1fbGlzdEl0ZW0tPnBhZGRpbmdMZWZ0KCkgKyBt
X2xpc3RJdGVtLT5ib3JkZXJMZWZ0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
aWdodExpbmVPZmZzZXQgPSBtX2xpc3RJdGVtLT5yaWdodFJlbE9mZnNldCh5T2Zmc2V0LCBtX2xp
c3RJdGVtLT5yaWdodE9mZnNldCh5T2Zmc2V0KSk7CisgICAgICAgICAgICB4ICs9IChyaWdodExp
bmVPZmZzZXQteE9mZnNldCkgKyBtX2xpc3RJdGVtLT5wYWRkaW5nUmlnaHQoKSArIG1fbGlzdEl0
ZW0tPmJvcmRlclJpZ2h0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgY29uc3QgUUZv
bnRNZXRyaWNzIGZtID0gc3R5bGUoKS0+Zm9udE1ldHJpY3MoKTsKKyAgICAKKyAgICBpbnQgb2Zm
c2V0ID0gZm0uYXNjZW50KCkqMi8zOworICAgIGJvb2wgaGF2ZUltYWdlID0gbV9saXN0SW1hZ2Ug
JiYgIW1fbGlzdEltYWdlLT5pc0Vycm9ySW1hZ2UoKTsKKyAgICBpZiAoaGF2ZUltYWdlKQorICAg
ICAgICBvZmZzZXQgPSBtX2xpc3RJbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKTsKKyAgICAKKyAgICBp
bnQgeG9mZiA9IDA7CisgICAgaW50IHlvZmYgPSBmbS5hc2NlbnQoKSAtIG9mZnNldDsKKworICAg
IGludCBidWxsZXRXaWR0aCA9IG9mZnNldC8yOworICAgIGlmIChvZmZzZXQlMikKKyAgICAgICAg
YnVsbGV0V2lkdGgrKzsKKyAgICBpZiAoIWlzSW5zaWRlKCkpIHsKKyAgICAgICAgaWYgKGxpc3RJ
dGVtLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgICAgICB4b2ZmID0gLWNN
YXJrZXJQYWRkaW5nIC0gb2Zmc2V0OworICAgICAgICBlbHNlCisgICAgICAgICAgICB4b2ZmID0g
Y01hcmtlclBhZGRpbmcgKyAoaGF2ZUltYWdlID8gMCA6IChvZmZzZXQgLSBidWxsZXRXaWR0aCkp
OworICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICB4
b2ZmICs9IGhhdmVJbWFnZSA/IGNNYXJrZXJQYWRkaW5nIDogKG1fd2lkdGggLSBidWxsZXRXaWR0
aCk7CisgICAgCisgICAgaWYgKG1fbGlzdEltYWdlICYmICFtX2xpc3RJbWFnZS0+aXNFcnJvcklt
YWdlKCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KHggKyB4b2ZmLCB5LCAgbV9saXN0SW1hZ2Ut
PmltYWdlU2l6ZSgpLndpZHRoKCksIG1fbGlzdEltYWdlLT5pbWFnZVNpemUoKS5oZWlnaHQoKSk7
CisgICAgCisgICAgc3dpdGNoKHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgeworICAgIGNhc2Ug
RElTQzoKKyAgICBjYXNlIENJUkNMRToKKyAgICBjYXNlIFNRVUFSRToKKyAgICAgICAgcmV0dXJu
IEludFJlY3QoeCArIHhvZmYsIHkgKyAoMyAqIHlvZmYpLzIsIGJ1bGxldFdpZHRoLCBidWxsZXRX
aWR0aCk7CisgICAgY2FzZSBMTk9ORToKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBpZiAobV9pdGVtLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgeSArPSBmbS5hc2NlbnQoKTsKKwor
ICAgICAgICBpZiAoaXNJbnNpZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KHgsIHks
IGZtLndpZHRoKG1faXRlbSwgMCwgMCkgKyBmbS53aWR0aCgiLiAiLCAwLCAwKSwgZm0uaGVpZ2h0
KCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24o
KSA9PSBMVFIpCisgICAgICAgICAgICAgICAgcmV0dXJuIEludFJlY3QoeCAtIG9mZnNldCAvIDIs
IHksIGZtLndpZHRoKG1faXRlbSwgMCwgMCkgKyBmbS53aWR0aCgiLiAiLCAwLCAwKSwgZm0uaGVp
Z2h0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBJbnRSZWN0
KHggKyBvZmZzZXQgLyAyLCB5LCBmbS53aWR0aChtX2l0ZW0sIDAsIDApICsgZm0ud2lkdGgoIi4g
IiwgMCwgMCksIGZtLmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogI3VuZGVmIEJP
WF9ERUJVRwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5oCShyZXZpc2lvbiAxMjkyNykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcg
KzcwLDExIEBACiAgICAgY29uc3QgUVN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXRl
bTsgfQogCiAgICAgYm9vbCBpc0luc2lkZSgpIGNvbnN0OwotCisgICAgCisgICAgdmlydHVhbCBi
b29sIG5vZGVBdFBvaW50KE5vZGVJbmZvJiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0
aW9uKTsKKyAgICAKKyAgICBJbnRSZWN0IGdldFJlbGF0aXZlUmVwYWludFJlY3QoKTsKKyAgICAK
IHByaXZhdGU6CiAgICAgUVN0cmluZyBtX2l0ZW07CiAgICAgQ2FjaGVkSW1hZ2UgKm1fbGlzdElt
YWdlOwpAQCAtMTE2LDYgKzEyMCw4IEBACiAgICAgYm9vbCBub3RJbkxpc3QoKSBjb25zdCB7IHJl
dHVybiBfbm90SW5MaXN0OyB9CiAKICAgICBRU3RyaW5nIG1hcmtlclN0cmluZ1ZhbHVlKCkgeyBy
ZXR1cm4gbV9tYXJrZXIgPyBtX21hcmtlci0+dGV4dCgpIDogIiI7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoTm9kZUluZm8mLCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRl
c3RBY3Rpb24pOwogCiBwcml2YXRlOgogICAgIGludCBwcmVkZWZWYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6819</attachid>
            <date>2006-03-02 21:04:51 -0800</date>
            <delta_ts>2006-03-03 06:47:04 -0800</delta_ts>
            <desc>patch</desc>
            <filename>6844.txt</filename>
            <type>text/plain</type>
            <size>14242</size>
            <attacher name="Justin Garcia">justin.garcia</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvbGlzdHMvZHJhZy1pbnRvLW1hcmtlci1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9saXN0cy9kcmFnLWludG8tbWFya2Vy
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvbGlzdHMvZHJh
Zy1pbnRvLW1hcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAK
K0VESVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6cmFuZ2UgZnJv
bSAwIG9mIExJID4gVUwgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byAyIG9mIExJID4gVUwg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudAorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEJl
Z2luRWRpdGluZzpXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uCitFRElUSU5HIERF
TEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihudWxsKSB0b0RPTVJhbmdlOnJh
bmdlIGZyb20gMiBvZiAjdGV4dCA+IFNQQU4gPiBMSSA+IFVMID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgdG8gMiBvZiAjdGV4dCA+IFNQQU4gPiBMSSA+IFVMID4gQk9EWSA+IEhUTUwgPiAjZG9j
dW1lbnQgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rp
bmc6RkFMU0UKK0VESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2Vi
Vmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTpyYW5nZSBmcm9tIDIgb2YgI3RleHQgPiBTUEFOID4g
TEkgPiBVTCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDIgb2YgI3RleHQgPiBTUEFOID4g
TEkgPiBVTCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvRE9NUmFuZ2U6cmFuZ2UgZnJvbSAw
IG9mICN0ZXh0ID4gU1BBTiA+IExJID4gVUwgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA1
IG9mICN0ZXh0ID4gU1BBTiA+IExJID4gVUwgPiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCBhZmZp
bml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbSBzdGlsbFNlbGVjdGluZzpGQUxTRQor
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjpXZWJWaWV3RGlkQ2hh
bmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uCitFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRO
b2RlOiNkb2N1bWVudC1mcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBmcm9tIDAgb2Yg
TEkgPiBVTCA+IEJPRFkgPiBIVE1MID4gI2RvY3VtZW50IHRvIDAgb2YgTEkgPiBVTCA+IEJPRFkg
PiBIVE1MID4gI2RvY3VtZW50IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVk
CitFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOldlYlZpZXdEaWRD
aGFuZ2VTZWxlY3Rpb25Ob3RpZmljYXRpb24KK0VESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5n
ZVNlbGVjdGVkRE9NUmFuZ2U6cmFuZ2UgZnJvbSA2IG9mICN0ZXh0ID4gU1BBTiA+IExJID4gVUwg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0byA2IG9mICN0ZXh0ID4gU1BBTiA+IExJID4gVUwg
PiBCT0RZID4gSFRNTCA+ICNkb2N1bWVudCB0b0RPTVJhbmdlOnJhbmdlIGZyb20gMCBvZiAjdGV4
dCA+IFNQQU4gPiBMSSA+IFVMID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgdG8gNiBvZiAjdGV4
dCA+IFNQQU4gPiBMSSA+IFVMID4gQk9EWSA+IEhUTUwgPiAjZG9jdW1lbnQgYWZmaW5pdHk6TlNT
ZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0gc3RpbGxTZWxlY3Rpbmc6RkFMU0UKK0VESVRJTkcg
REVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVj
dGlvbk5vdGlmaWNhdGlvbgorRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZTpXZWJW
aWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
UmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4
MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBS
ZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCwxNikgc2l6ZSA3ODR4NTY4CisgICAgICBSZW5kZXJCbG9j
ayB7VUx9IGF0ICgxNiwwKSBzaXplIDc1Mng1NyBbYm9yZGVyOiAoMXB4IHNvbGlkICMwMDAwMDAp
XQorICAgICAgICBSZW5kZXJMaXN0SXRlbSB7TEl9IGF0ICg0MSwxKSBzaXplIDcxMHg1NQorICAg
ICAgICAgIFJlbmRlckxpc3RNYXJrZXIgYXQgKDAsMCkgc2l6ZSAweDQzCisgICAgICAgICAgUmVu
ZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDEyNHg1NQorICAgICAgICAgICAgUmVuZGVy
VGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAxMjR4NTUKKyAgICAgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMCkgd2lkdGggMTI0OiAid29ybGQgIgorICAgICAgICAgIFJlbmRlclRleHQge1RFWFR9
IGF0ICgxMjQsMCkgc2l6ZSAxMDd4NTUKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgxMjQsMCkg
d2lkdGggMTA3OiAiaGVsbG8gIgorICAgICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAs
MCkgc2l6ZSAxMTJ4NTUKKyAgICAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgyMzEsMCkg
c2l6ZSAxMTJ4NTUKKyAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDIzMSwwKSB3aWR0aCAxMTI6
ICJ3b3JsZCIKKyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCw3Mykgc2l6ZSA3ODR4NzIKKyAg
ICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSA3Nzh4NzIKKyAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1MDg6ICJUaGlzIGlzIGFuIGF1dG9tYXRlZCB0ZXN0IGZv
ciBlbGVtZW50QXRQb2ludCBmb3IgcG9pbnRzIG92ZXIgb3V0c2lkZSBsaXN0IG1hcmtlcnMuICIK
KyAgICAgICAgICB0ZXh0IHJ1biBhdCAoNTA4LDApIHdpZHRoIDI3MDogIlRoZSBkaWN0aW9uYXJ5
IHJldHVybmVkIGJ5IGVsZW1lbnRBdFBvaW50IgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4
KSB3aWR0aCA1OTE6ICJzaG91bGQgY29udGFpbiB0aGUgbGlzdCBpdGVtIGFzIHRoZSBET01Ob2Rl
LCBub3QgdGhlIGxpc3QsIGZvciBwb2ludHMgb3ZlciBvdXRzaWRlIGxpc3QgbWFya2Vycy4gIgor
ICAgICAgICAgIHRleHQgcnVuIGF0ICg1OTEsMTgpIHdpZHRoIDE2MTogImVsZW1lbnRBdFBvaW50
IGlzIHVzZWQgdG8iCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdpZHRoIDU3ODogImRl
dGVybWluZSB0aGUgZHJhZyBvcGVyYXRpb24gdGhhdCB3aWxsIG9jY3VyIHdoZW4gc29tZXRoaW5n
IGlzIGRyb3BwZWQgb3ZlciBhIGdpdmVuIHBvaW50LiAiCisgICAgICAgICAgdGV4dCBydW4gYXQg
KDU3OCwzNikgd2lkdGggMTg1OiAiU28sIHRoaXMgdGVzdCBkcmFncyBhIGJpdCBvZiB0ZXh0Igor
ICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDU0KSB3aWR0aCAyMDc6ICJvdmVyIHRoZSBsaXN0IG1h
cmtlciBhbmQgZHJvcHMgaXQuICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMjA3LDU0KSB3aWR0
aCAzODY6ICJJdCBzaG91bGQgYmUgcGFzdGVkIGludG8gdGhlIGxpc3QgaXRlbSwgd2hpY2ggaXMg
Y29udGVudGVkaXRhYmxlLiIKKyAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCwxNjEpIHNpemUg
Nzg0eDM2CisgICAgICAgIFJlbmRlcklubGluZSB7Qn0gYXQgKDAsMCkgc2l6ZSA3NzF4MzYKKyAg
ICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDc3MXgzNgorICAgICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNzEzOiAiVGhpcyB0ZXN0IGNhc2UgZGVtb25zdHJh
dGVzIGEgYnVnIGluIER1bXBSZW5kZXJUcmVlJ3MgZHJhZyBhbmQgZHJvcCBzdXBwb3J0LCB3aGlj
aCBpcyB0aGF0IHRoZSBzb3VyY2UgIgorICAgICAgICAgICAgdGV4dCBydW4gYXQgKDcxMywwKSB3
aWR0aCA1ODogImlzIGNvcGllZCIKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDE4KSB3aWR0
aCAxMTM6ICJvbiBkcm9wLCBub3QgY3V0LiIKKyAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQg
KDExMywxOCkgc2l6ZSAxNzN4MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTEzLDE4KSB3aWR0
aCA0OiAiICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTE3LDE4KSB3aWR0aCAxNjk6ICJTbyB5
b3UnbGwgc2VlICd3b3JsZCcgdHdpY2UuIgorc2VsZWN0aW9uIHN0YXJ0OiBwb3NpdGlvbiAwIG9m
IGNoaWxkIDAge1RFWFR9IG9mIGNoaWxkIDAge1NQQU59IG9mIGNoaWxkIDAge0xJfSBvZiBjaGls
ZCAxIHtVTH0gb2YgY2hpbGQgMCB7Qk9EWX0gb2YgY2hpbGQgMCB7SFRNTH0gb2YgZG9jdW1lbnQK
K3NlbGVjdGlvbiBlbmQ6ICAgcG9zaXRpb24gNiBvZiBjaGlsZCAwIHtURVhUfSBvZiBjaGlsZCAw
IHtTUEFOfSBvZiBjaGlsZCAwIHtMSX0gb2YgY2hpbGQgMSB7VUx9IG9mIGNoaWxkIDAge0JPRFl9
IG9mIGNoaWxkIDAge0hUTUx9IG9mIGRvY3VtZW50CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2xp
c3RzL2RyYWctaW50by1tYXJrZXItZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9saXN0cy9kcmFnLWludG8tbWFya2VyLWV4cGVjdGVkLmNoZWNrc3VtCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9saXN0cy9kcmFnLWludG8tbWFya2VyLWV4
cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACis3MjFmZDI4NzhmOTJh
MmFlNjk2NzEyMGFiNzBkNzMyZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvbGlzdHMvZHJhZy1pbnRvLW1hcmtlci5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvbGlzdHMvZHJhZy1pbnRvLW1hcmtlci5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9saXN0cy9kcmFnLWludG8tbWFya2VyLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKzxib2R5PgorCis8dWwgaWQ9InVsIiBzdHlsZT0ibWFy
Z2luOjFlbTsgYm9yZGVyOjFweCBzb2xpZCBibGFjazsiPjxsaSBpZD0ibGkiIGNvbnRlbnRlZGl0
YWJsZT0idHJ1ZSIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlOyBmb250LXNpemU6IDNl
bTsiPmhlbGxvIDxzcGFuIGlkPSJzcGFuVG9EcmFnIj53b3JsZDwvc3Bhbj48L2E+PC9kaXY+PC9s
aT48L3VsPgorCis8cD5UaGlzIGlzIGFuIGF1dG9tYXRlZCB0ZXN0IGZvciBlbGVtZW50QXRQb2lu
dCBmb3IgcG9pbnRzIG92ZXIgcG9zaXRpb246b3V0c2lkZSBsaXN0IG1hcmtlcnMuICBUaGUgZGlj
dGlvbmFyeSByZXR1cm5lZCBieSBlbGVtZW50QXRQb2ludCBzaG91bGQgY29udGFpbiB0aGUgbGlz
dCBpdGVtIGFzIHRoZSBET01Ob2RlLCBub3QgdGhlIGxpc3QsIGZvciBwb2ludHMgb3ZlciBwb3Np
dGlvbjpvdXRzaWRlIGxpc3QgbWFya2Vycy4gIGVsZW1lbnRBdFBvaW50IGlzIHVzZWQgdG8gZGV0
ZXJtaW5lIHRoZSBkcmFnIG9wZXJhdGlvbiB0aGF0IHdpbGwgb2NjdXIgd2hlbiBzb21ldGhpbmcg
aXMgZHJvcHBlZCBvdmVyIGEgZ2l2ZW4gcG9pbnQuICBTbywgdGhpcyB0ZXN0IGRyYWdzIGEgYml0
IG9mIHRleHQgb3ZlciB0aGUgbGlzdCBtYXJrZXIgYW5kIGRyb3BzIGl0LiAgSXQgc2hvdWxkIGJl
IHBhc3RlZCBpbnRvIHRoZSBsaXN0IGl0ZW0sIHdoaWNoIGlzIGNvbnRlbnRlZGl0YWJsZS48L3A+
CisKKzxwPjxiPlRoaXMgdGVzdCBjYXNlIGRlbW9uc3RyYXRlcyBhIGJ1ZyBpbiBEdW1wUmVuZGVy
VHJlZSdzIGRyYWcgYW5kIGRyb3Agc3VwcG9ydCwgd2hpY2ggaXMgdGhhdCB0aGUgc291cmNlICBp
cyBjb3BpZWQgb24gZHJvcCwgbm90IGN1dC48L2I+ICBTbyB5b3UnbGwgc2VlICd3b3JsZCcgdHdp
Y2UuPC9wPgorCis8c2NyaXB0PgorCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICghd2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIAorICAgIHZhciBzcGFu
VG9EcmFnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNwYW5Ub0RyYWciKTsKKyAgICB2YXIg
eCA9IHNwYW5Ub0RyYWcub2Zmc2V0TGVmdCArIHNwYW5Ub0RyYWcub2Zmc2V0V2lkdGggLyAyOwor
ICAgIHZhciB5ID0gc3BhblRvRHJhZy5vZmZzZXRUb3AgKyBzcGFuVG9EcmFnLm9mZnNldEhlaWdo
dCAvIDI7CisKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh4LCB5KTsKKyAgICBldmVudFNl
bmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgZXZlbnRT
ZW5kZXIubW91c2VEb3duKCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgIAorICAg
IC8vIFdhaXQgYSBtb21lbnQgc28gdGhhdCB0aGUgbmV4dCBtb3VzZURvd24gd2lsbCBraWNrIG9m
ZiBhIGRyYWcsIGluc3RlYWQgb2YgYSB0cmlwbGUtY2xpY2sKKyAgICBldmVudFNlbmRlci5sZWFw
Rm9yd2FyZCgxMDAwKTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICAvLyBXYWl0
IGEgbW9tZW50IHNvIHRoYXQgdGhlIG1vdXNlRG93biB3aWxsIGtpY2sgb2ZmIGEgZHJhZyBpbnN0
ZWFkIG9mIHN0YXJ0aW5nIGEgbmV3IHNlbGVjdGlvbi4KKyAgICBldmVudFNlbmRlci5sZWFwRm9y
d2FyZCgyMDApOworICAgIAorICAgIHZhciBsaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJs
aSIpOworICAgIHZhciB1bCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1bCIpOworICAgIAor
ICAgIC8vIFdlYkNvcmUgcGFpbnRzIGEgcG9zaXRpb246b3V0c2lkZSBsaXN0IG1hcmtlcnMgYXQg
YW4gb2Zmc2V0IGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgCisgICAgLy8gYm91bmRz
IG9mIHRoZSBsaXN0IGl0ZW0uICBUaGUgb2Zmc2V0IGlzIGNvbXB1dGVkIHVzaW5nIGEgbWFnaWMg
bnVtYmVyIGFuZCB0aGUKKyAgICAvLyBmb250cyBhc2NlbnQsIHR3byB2YWx1ZXMgd2UgY2FuJ3Qg
Z2V0IHRvLiAgVGhpcyAoeCwgeSkgKnNob3VsZCogYmUgb3ZlciB0aGUgbGlzdCBtYXJrZXIuCisg
ICAgdmFyIHggPSB1bC5vZmZzZXRMZWZ0ICsgMTg7CisgICAgdmFyIHkgPSBsaS5vZmZzZXRUb3Ag
KyBsaS5vZmZzZXRIZWlnaHQgLyAyICsgMjA7CisKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVU
byh4LCB5KTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisKKyAgICB3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitydW5UZXN0KCk7Cis8L3NjcmlwdD4K
KworPC9ib2R5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvbGlzdHMvZHJhZy1pbnRvLW1hcmtlci1leHBlY3RlZC5wbmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5u
b3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9
IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVz
dHMvZmFzdC9saXN0cy9kcmFnLWludG8tbWFya2VyLWV4cGVjdGVkLnBuZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5h
bWU6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCShyZXZpc2lvbiAxMzEwMCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDEwICsyOTIsMTYg
QEAgYm9vbCBSZW5kZXJMaXN0SXRlbTo6bm9kZUF0UG9pbnQoTm9kZUluZgogICAgIGlmIChSZW5k
ZXJCbG9jazo6bm9kZUF0UG9pbnQoaSwgeCwgeSwgdHgsIHR5LCBoaXRUZXN0QWN0aW9uKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgaWYgKCFtX21hcmtlciB8fCBtX21hcmtlci0+
aXNJbnNpZGUoKSB8fCBoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIHJldHVybiBtX21hcmtlci0+bm9kZUF0UG9p
bnQoaSwgeCwgeSwgdHggKyBtX3gsIHR5ICsgbV95LCBoaXRUZXN0QWN0aW9uKTsKKyAgICBpZiAo
bV9tYXJrZXIgJiYgIW1fbWFya2VyLT5pc0luc2lkZSgpICYmIGhpdFRlc3RBY3Rpb24gPT0gSGl0
VGVzdEZvcmVncm91bmQpIHsKKyAgICAgICAgSW50UmVjdCBtYXJrZXJSZWN0ID0gbV9tYXJrZXIt
PmdldFJlbGF0aXZlTWFya2VyUmVjdCgpOworICAgICAgICBtYXJrZXJSZWN0Lm1vdmUodHggKyBt
X3gsIHR5ICsgbV95KTsKKyAgICAgICAgaWYgKG1hcmtlclJlY3QuY29udGFpbnMoeCwgeSkpIHsK
KyAgICAgICAgICAgIHNldElubmVyTm9kZShpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5k
ZXJMaXN0SXRlbTo6Y2FsY01pbk1heFdpZHRoKCkKQEAgLTU5OCwxNyArNjA0LDYgQEAgYm9vbCBS
ZW5kZXJMaXN0TWFya2VyOjppc0luc2lkZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGlzdEl0ZW0t
Pm5vdEluTGlzdCgpIHx8IHN0eWxlKCktPmxpc3RTdHlsZVBvc2l0aW9uKCkgPT0gSU5TSURFOwog
fQogCi1ib29sIFJlbmRlckxpc3RNYXJrZXI6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiBpLCBpbnQg
eCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCi17
Ci0gICAgSW50UmVjdCBtYXJrZXJSZWN0ID0gZ2V0UmVsYXRpdmVNYXJrZXJSZWN0KCk7Ci0gICAg
bWFya2VyUmVjdC5tb3ZlKHR4LCB0eSk7Ci0gICAgaWYgKCFtYXJrZXJSZWN0LmNvbnRhaW5zKHgs
IHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaS5zZXRJbm5lck5vZGUobV9s
aXN0SXRlbS0+ZWxlbWVudCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogSW50UmVjdCBSZW5k
ZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcmtlclJlY3QoKQogewogICAgIGludCB4ID0gbV94
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5oCShyZXZpc2lvbiAxMzA5OSkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDggKzcxLDYg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc0luc2lkZSgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGludCwgaW50LCBpbnQsIGludCwgSGl0VGVz
dEFjdGlvbik7Ci0gICAgCiAgICAgSW50UmVjdCBnZXRSZWxhdGl2ZU1hcmtlclJlY3QoKTsKICAg
ICAKIHByaXZhdGU6CkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5k
ZXJUcmVlLm0JKHJldmlzaW9uIDEzMDkzKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
RHVtcFJlbmRlclRyZWUubQkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQAogICAgIGlu
dCBjbGlja0NvdW50OwogICAgIE5TVGltZUludGVydmFsIGxhc3RDbGljazsKICAgICBpbnQgZXZl
bnROdW1iZXI7CisgICAgZG91YmxlIHRpbWVPZmZzZXQ7CiB9CiBAZW5kCiAKQEAgLTY1OSw3ICs2
NjAsOCBAQCBzdGF0aWMgdm9pZCBkdW1wKHZvaWQpCiB7CiAgICAgaWYgKGFTZWxlY3RvciA9PSBA
c2VsZWN0b3IobW91c2VEb3duKQogICAgICAgICAgICAgfHwgYVNlbGVjdG9yID09IEBzZWxlY3Rv
cihtb3VzZVVwKQotICAgICAgICAgICAgfHwgYVNlbGVjdG9yID09IEBzZWxlY3Rvcihtb3VzZU1v
dmVUb1g6WTopKQorICAgICAgICAgICAgfHwgYVNlbGVjdG9yID09IEBzZWxlY3Rvcihtb3VzZU1v
dmVUb1g6WTopCisgICAgICAgICAgICB8fCBhU2VsZWN0b3IgPT0gQHNlbGVjdG9yKGxlYXBGb3J3
YXJkOikpCiAgICAgICAgIHJldHVybiBOTzsKICAgICByZXR1cm4gWUVTOwogfQpAQCAtNjY4LDYg
KzY3MCw4IEBAIHN0YXRpYyB2b2lkIGR1bXAodm9pZCkKIHsKICAgICBpZihhU2VsZWN0b3IgPT0g
QHNlbGVjdG9yKG1vdXNlTW92ZVRvWDpZOikpCiAgICAgICAgIHJldHVybiBAIm1vdXNlTW92ZVRv
IjsKKyAgICBpZiAoYVNlbGVjdG9yID09IEBzZWxlY3RvcihsZWFwRm9yd2FyZDopKQorICAgICAg
ICByZXR1cm4gQCJsZWFwRm9yd2FyZCI7CiAgICAgcmV0dXJuIG5pbDsKIH0KIApAQCAtNjgwLDE0
ICs2ODQsMjQgQEAgc3RhdGljIHZvaWQgZHVtcCh2b2lkKQogICAgIHJldHVybiBzZWxmOwogfQog
CistIChkb3VibGUpY3VycmVudEV2ZW50VGltZQoreworICAgIHJldHVybiBHZXRDdXJyZW50RXZl
bnRUaW1lKCkgKyB0aW1lT2Zmc2V0OworfQorCistICh2b2lkKWxlYXBGb3J3YXJkOihpbnQpbWls
bGlzZWNvbmRzCit7CisgICAgdGltZU9mZnNldCArPSBtaWxsaXNlY29uZHMgLyAxMDAwLjA7Cit9
CisKIC0gKHZvaWQpbW91c2VEb3duCiB7CiAgICAgW1tbZnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVu
dFZpZXddIGxheW91dF07Ci0gICAgaWYgKEdldEN1cnJlbnRFdmVudFRpbWUoKSAtIGxhc3RDbGlj
ayA+PSAxKQorICAgIGlmIChbc2VsZiBjdXJyZW50RXZlbnRUaW1lXSAtIGxhc3RDbGljayA+PSAx
KQogICAgICAgICBjbGlja0NvdW50ID0gMTsKICAgICBlbHNlCiAgICAgICAgIGNsaWNrQ291bnQr
KzsKLSAgICBOU0V2ZW50ICpldmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0xl
ZnRNb3VzZURvd24gbG9jYXRpb246bGFzdE1vdXNlUG9zaXRpb24gbW9kaWZpZXJGbGFnczpuaWwg
dGltZXN0YW1wOkdldEN1cnJlbnRFdmVudFRpbWUoKSB3aW5kb3dOdW1iZXI6MCBjb250ZXh0OltO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZXZlbnROdW1iZXI6KytldmVudE51bWJl
ciBjbGlja0NvdW50OmNsaWNrQ291bnQgcHJlc3N1cmU6bmlsXTsKKyAgICBOU0V2ZW50ICpldmVu
dCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0xlZnRNb3VzZURvd24gbG9jYXRpb246
bGFzdE1vdXNlUG9zaXRpb24gbW9kaWZpZXJGbGFnczpuaWwgdGltZXN0YW1wOltzZWxmIGN1cnJl
bnRFdmVudFRpbWVdIHdpbmRvd051bWJlcjpbW1tmcmFtZSB3ZWJWaWV3XSB3aW5kb3ddIHdpbmRv
d051bWJlcl0gY29udGV4dDpbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGV2ZW50
TnVtYmVyOisrZXZlbnROdW1iZXIgY2xpY2tDb3VudDpjbGlja0NvdW50IHByZXNzdXJlOm5pbF07
CiAKICAgICBOU1ZpZXcgKnN1YlZpZXcgPSBbW2ZyYW1lIHdlYlZpZXddIGhpdFRlc3Q6W2V2ZW50
IGxvY2F0aW9uSW5XaW5kb3ddXTsKICAgICBpZiAoc3ViVmlldykgewpAQCAtNjk5LDcgKzcxMyw3
IEBAIHN0YXRpYyB2b2lkIGR1bXAodm9pZCkKIC0gKHZvaWQpbW91c2VVcAogewogICAgIFtbW2Zy
YW1lIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBsYXlvdXRdOwotICAgIE5TRXZlbnQgKmV2ZW50
ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlVXAgbG9jYXRpb246bGFz
dE1vdXNlUG9zaXRpb24gbW9kaWZpZXJGbGFnczpuaWwgdGltZXN0YW1wOkdldEN1cnJlbnRFdmVu
dFRpbWUoKSB3aW5kb3dOdW1iZXI6MCBjb250ZXh0OltOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gZXZlbnROdW1iZXI6KytldmVudE51bWJlciBjbGlja0NvdW50OmNsaWNrQ291bnQg
cHJlc3N1cmU6bmlsXTsKKyAgICBOU0V2ZW50ICpldmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRX
aXRoVHlwZTpOU0xlZnRNb3VzZVVwIGxvY2F0aW9uOmxhc3RNb3VzZVBvc2l0aW9uIG1vZGlmaWVy
RmxhZ3M6bmlsIHRpbWVzdGFtcDpbc2VsZiBjdXJyZW50RXZlbnRUaW1lXSArIHRpbWVPZmZzZXQg
d2luZG93TnVtYmVyOltbW2ZyYW1lIHdlYlZpZXddIHdpbmRvd10gd2luZG93TnVtYmVyXSBjb250
ZXh0OltOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZXZlbnROdW1iZXI6KytldmVu
dE51bWJlciBjbGlja0NvdW50OmNsaWNrQ291bnQgcHJlc3N1cmU6bmlsXTsKIAogICAgIE5TVmll
dyAqc3ViVmlldyA9IFtbZnJhbWUgd2ViVmlld10gaGl0VGVzdDpbZXZlbnQgbG9jYXRpb25Jbldp
bmRvd11dOwogICAgIGlmIChzdWJWaWV3KSB7CkBAIC03MTIsOCArNzI2LDcgQEAgc3RhdGljIHZv
aWQgZHVtcCh2b2lkKQogICAgICAgICAgICAgTlNEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24g
PSBbd2ViVmlldyBkcmFnZ2luZ1VwZGF0ZWQ6ZHJhZ2dpbmdJbmZvXTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VdIGRyYWdnZWRJbWFnZTpb
ZHJhZ2dpbmdJbmZvIGRyYWdnZWRJbWFnZV0gZW5kZWRBdDpsYXN0TW91c2VQb3NpdGlvbiBvcGVy
YXRpb246ZHJhZ09wZXJhdGlvbl07Ci0gICAgICAgICAgICBpZiAoZHJhZ09wZXJhdGlvbiAhPSBO
U0RyYWdPcGVyYXRpb25Ob25lKQotICAgICAgICAgICAgICAgIFt3ZWJWaWV3IHBlcmZvcm1EcmFn
T3BlcmF0aW9uOmRyYWdnaW5nSW5mb107CisgICAgICAgICAgICBbd2ViVmlldyBwZXJmb3JtRHJh
Z09wZXJhdGlvbjpkcmFnZ2luZ0luZm9dOwogICAgICAgICAgICAgW2RyYWdnaW5nSW5mbyByZWxl
YXNlXTsKICAgICAgICAgICAgIGRyYWdnaW5nSW5mbyA9IG5pbDsKICAgICAgICAgfQpAQCAtNzIz
LDcgKzczNiw3IEBAIHN0YXRpYyB2b2lkIGR1bXAodm9pZCkKIC0gKHZvaWQpbW91c2VNb3ZlVG9Y
OihpbnQpeCBZOihpbnQpeQogewogICAgIGxhc3RNb3VzZVBvc2l0aW9uID0gTlNNYWtlUG9pbnQo
eCwgW1tmcmFtZSB3ZWJWaWV3XSBmcmFtZV0uc2l6ZS5oZWlnaHQgLSB5KTsKLSAgICBOU0V2ZW50
ICpldmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTooZG93biA/IE5TTGVmdE1vdXNl
RHJhZ2dlZCA6IE5TTW91c2VNb3ZlZCkgbG9jYXRpb246bGFzdE1vdXNlUG9zaXRpb24gbW9kaWZp
ZXJGbGFnczpuaWwgdGltZXN0YW1wOkdldEN1cnJlbnRFdmVudFRpbWUoKSB3aW5kb3dOdW1iZXI6
MCBjb250ZXh0OltOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZXZlbnROdW1iZXI6
KytldmVudE51bWJlciBjbGlja0NvdW50Oihkb3duID8gY2xpY2tDb3VudCA6IDApIHByZXNzdXJl
Om5pbF07CisgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6
KGRvd24gPyBOU0xlZnRNb3VzZURyYWdnZWQgOiBOU01vdXNlTW92ZWQpIGxvY2F0aW9uOmxhc3RN
b3VzZVBvc2l0aW9uIG1vZGlmaWVyRmxhZ3M6bmlsIHRpbWVzdGFtcDpbc2VsZiBjdXJyZW50RXZl
bnRUaW1lXSB3aW5kb3dOdW1iZXI6W1tbZnJhbWUgd2ViVmlld10gd2luZG93XSB3aW5kb3dOdW1i
ZXJdIGNvbnRleHQ6W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBldmVudE51bWJl
cjorK2V2ZW50TnVtYmVyIGNsaWNrQ291bnQ6KGRvd24gPyBjbGlja0NvdW50IDogMCkgcHJlc3N1
cmU6bmlsXTsKIAogICAgIE5TVmlldyAqc3ViVmlldyA9IFtbZnJhbWUgd2ViVmlld10gaGl0VGVz
dDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd11dOwogICAgIGlmIChzdWJWaWV3KSB7Cg==
</data>
<flag name="review"
          id="1751"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>