<?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>56439</bug_id>
          
          <creation_ts>2011-03-15 18:28:18 -0700</creation_ts>
          <short_desc>Get rid of nearestMailBlockquote</short_desc>
          <delta_ts>2011-03-16 17:03:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>leviw</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>368120</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 18:28:18 -0700</bug_when>
    <thetext>nearestMailBlockquote doesn&apos;t respect editing boundary and takes Node* instead of Position.  Both of these are unconventional and all call sites of nearestMailBlockquote should be calling enclosingNodeOfType or highestEnclosingNodeOfType instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368132</commentid>
    <comment_count>1</comment_count>
      <attachid>85896</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 19:03:44 -0700</bug_when>
    <thetext>Created attachment 85896
cleanup + minor crash fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368133</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 19:05:52 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=85896) [details]
&gt; cleanup + minor crash fix

I included the bug fix because this was a relatively small patch but I&apos;ll split it if other people think it&apos;s better that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368382</commentid>
    <comment_count>3</comment_count>
      <attachid>85896</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-03-16 10:48:06 -0700</bug_when>
    <thetext>Comment on attachment 85896
cleanup + minor crash fix

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

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:626
&gt; +    Node* blockquoteNode = (!context || isMailPasteAsQuotationNode(context)) ? context : enclosingNodeOfType(firstPositionInNode(context), isMailBlockquote, CanCrossEditingBoundary);

Nit: It took me a while to figure out why you added !context (i.e., it&apos;s ok to pass NULL to isMailPasteAsQuotationNode, but it&apos;s not OK to pass NULL to firstPositionInNode).  Maybe pull this out into a helper function (it could also be used in line 559).  Alternately, maybe firstPositionInNode should return a null position when passed in a NULL pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368458</commentid>
    <comment_count>4</comment_count>
      <attachid>85896</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-16 12:38:03 -0700</bug_when>
    <thetext>Comment on attachment 85896
cleanup + minor crash fix

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

&gt;&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:626
&gt;&gt; +    Node* blockquoteNode = (!context || isMailPasteAsQuotationNode(context)) ? context : enclosingNodeOfType(firstPositionInNode(context), isMailBlockquote, CanCrossEditingBoundary);
&gt; 
&gt; Nit: It took me a while to figure out why you added !context (i.e., it&apos;s ok to pass NULL to isMailPasteAsQuotationNode, but it&apos;s not OK to pass NULL to firstPositionInNode).  Maybe pull this out into a helper function (it could also be used in line 559).  Alternately, maybe firstPositionInNode should return a null position when passed in a NULL pointer.

Extracting a helper function sounds good.  isMailPasteAsQuotationOrMailBlockquoteDescendent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368467</commentid>
    <comment_count>5</comment_count>
      <attachid>85896</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-03-16 12:45:59 -0700</bug_when>
    <thetext>Comment on attachment 85896
cleanup + minor crash fix

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

&gt;&gt;&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:626
&gt;&gt;&gt; +    Node* blockquoteNode = (!context || isMailPasteAsQuotationNode(context)) ? context : enclosingNodeOfType(firstPositionInNode(context), isMailBlockquote, CanCrossEditingBoundary);
&gt;&gt; 
&gt;&gt; Nit: It took me a while to figure out why you added !context (i.e., it&apos;s ok to pass NULL to isMailPasteAsQuotationNode, but it&apos;s not OK to pass NULL to firstPositionInNode).  Maybe pull this out into a helper function (it could also be used in line 559).  Alternately, maybe firstPositionInNode should return a null position when passed in a NULL pointer.
&gt; 
&gt; Extracting a helper function sounds good.  isMailPasteAsQuotationOrMailBlockquoteDescendent?

Sure.  I was actually just thinking of pulling out enclosingNodeOfType(firstPositionInNode(context), isMailBlockquote, CanCrossEditingBoundary) with a NULL check (nearestParentMailBlockquote?).  But that works too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368563</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-16 14:53:12 -0700</bug_when>
    <thetext>On my second thought, my initial proposal doesn&apos;t work and adding a null check to firstPositionInNode/lastPositionInNode makes most sense now.  Will be uploading a patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368576</commentid>
    <comment_count>7</comment_count>
      <attachid>85984</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-16 15:16:42 -0700</bug_when>
    <thetext>Created attachment 85984
Added a null pointer check to firstPositionInOrBeforeNode/lastPositionInOrAfterNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368584</commentid>
    <comment_count>8</comment_count>
      <attachid>85984</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-03-16 15:25:34 -0700</bug_when>
    <thetext>Comment on attachment 85984
Added a null pointer check to firstPositionInOrBeforeNode/lastPositionInOrAfterNode

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

&gt; Source/WebCore/editing/htmlediting.h:118
&gt; +    return node &amp;&amp; editingIgnoresContent(node) ? positionBeforeNode(node) : firstPositionInNode(node);

This doesn&apos;t look right.  &amp;&amp; has precedence over ?, so if |node| is NULL, we return firstPositionInNode(NULL).  That seems safe, but in lastPositionInOrAfterNode, we return lastPositionInNode(NULL), which calls lastOffsetInNode(NULL), which will try to dereference NULL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368592</commentid>
    <comment_count>9</comment_count>
      <attachid>85984</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-16 15:33:01 -0700</bug_when>
    <thetext>Comment on attachment 85984
Added a null pointer check to firstPositionInOrBeforeNode/lastPositionInOrAfterNode

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

&gt;&gt; Source/WebCore/editing/htmlediting.h:118
&gt;&gt; +    return node &amp;&amp; editingIgnoresContent(node) ? positionBeforeNode(node) : firstPositionInNode(node);
&gt; 
&gt; This doesn&apos;t look right.  &amp;&amp; has precedence over ?, so if |node| is NULL, we return firstPositionInNode(NULL).  That seems safe, but in lastPositionInOrAfterNode, we return lastPositionInNode(NULL), which calls lastOffsetInNode(NULL), which will try to dereference NULL.

Ah that&apos;s a good point.  I should just do &quot;!node ||&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368610</commentid>
    <comment_count>10</comment_count>
      <attachid>85992</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-16 16:07:44 -0700</bug_when>
    <thetext>Created attachment 85992
Added a null pointer check to firstPositionInOrBeforeNode/lastPositionInOrAfterNode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368641</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-16 16:48:34 -0700</bug_when>
    <thetext>Thanks for the review!  Landing it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368657</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-16 17:03:38 -0700</bug_when>
    <thetext>Committed r81295: &lt;http://trac.webkit.org/changeset/81295&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85896</attachid>
            <date>2011-03-15 19:03:44 -0700</date>
            <delta_ts>2011-03-16 15:16:39 -0700</delta_ts>
            <desc>cleanup + minor crash fix</desc>
            <filename>bug-56439-20110315190342.patch</filename>
            <type>text/plain</type>
            <size>15244</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjA2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDMtMTUgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgR2V0IHJpZCBvZiBuZWFyZXN0TWFpbEJsb2NrcXVvdGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NDM5CisKKyAgICAg
ICAgUmVtb3ZlZCBuZWFyZXN0TWFpbEJsb2NrcXVvdGUgYW5kIHJlcGxhY2VkIHRoZSBjYWxscyB0
byB0aGUgZnVuY3Rpb24gYnkgY2FsbHMKKyAgICAgICAgdG8gZW5jbG9zaW5nTm9kZU9mVHlwZSBh
bmQgaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUuCisgICAgICAgIAorICAgICAgICBBbHNvIGZp
eGVkIGEgYnVnIGluIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQgYW5kIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQgbm90IHRvCisgICAgICAgIHJlc3BlY3QgZWRpdGluZyBib3VuZGFyaWVzLiAgQWRkZWQg
YSB0ZXN0IGZvciB0aGUgZm9ybWVyIGNvbW1hbmQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9l
eGVjQ29tbWFuZC9icmVhay1ub24tZWRpdGFibGUtYmxvY2txdW90ZS5odG1sCisKKyAgICAgICAg
KiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSk6IE5vIGxvbmdlciBjcm9zc2VzIGVkaXRp
bmcgYm91bmRhcnkKKyAgICAgICAgd2hlbiBsb29raW5nIGZvciBhIE1haWwgYmxvY2txdW90ZS4K
KyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0
ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTWF0Y2hpbmdRdW90ZUxldmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3Bh
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZW5jbG9zaW5nTm9kZU9mVHlwZSk6IENoZWNrIHJ1bGUgdXBmcm9udCB0byBpbXByb3ZlIHRoZSBw
ZXJmb3JtYW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBl
KTogRGl0dG87IGFsc28gYWRkIHRoZSBtaXNzaW5nIGNoZWNrLgorICAgICAgICAqIGVkaXRpbmcv
aHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpoaWdoZXN0QW5jZXN0b3JUb1dyYXBNYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlTWFya3VwKToKKwogMjAxMS0wMy0xNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAkocmV2
aXNpb24gODEwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMiArNjYsOCBAQCB2b2lkIEJyZWFrQmxv
Y2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIFBvc2l0aW9uIHBvcyA9IGVuZGluZ1NlbGVj
dGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpOwogICAgIAogICAgIC8vIEZpbmQgdGhlIHRvcC1t
b3N0IGJsb2NrcXVvdGUgZnJvbSB0aGUgc3RhcnQuCi0gICAgRWxlbWVudCogdG9wQmxvY2txdW90
ZSA9IDA7Ci0gICAgZm9yIChDb250YWluZXJOb2RlKiBub2RlID0gcG9zLmRlcHJlY2F0ZWROb2Rl
KCktPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAg
ICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShub2RlKSkKLSAgICAgICAgICAgIHRvcEJsb2NrcXVv
dGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Ci0gICAgfQotICAgIGlmICghdG9wQmxv
Y2txdW90ZSB8fCAhdG9wQmxvY2txdW90ZS0+cGFyZW50Tm9kZSgpKQorICAgIE5vZGUqIHRvcEJs
b2NrcXVvdGUgPSBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShwb3MsIGlzTWFpbEJsb2NrcXVv
dGUpOworICAgIGlmICghdG9wQmxvY2txdW90ZSB8fCAhdG9wQmxvY2txdW90ZS0+cGFyZW50Tm9k
ZSgpIHx8ICF0b3BCbG9ja3F1b3RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBSZWZQdHI8RWxlbWVudD4gYnJlYWtOb2RlID0gY3JlYXRlQnJlYWtFbGVtZW50
KGRvY3VtZW50KCkpOwpAQCAtMTAzLDcgKzk5LDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21t
YW5kOjpkb0FwcGx5KCkKICAgICAgICAgcG9zID0gcG9zLm5leHQoKTsKICAgICAgICAgCiAgICAg
Ly8gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB3ZSBkb24ndCBzcGxpdCBhdCB0aGUgYmVnaW5uaW5n
IG9mIGEgcXVvdGUuICAKLSAgICB3aGlsZSAoaXNGaXJzdFZpc2libGVQb3NpdGlvbkluTm9kZShW
aXNpYmxlUG9zaXRpb24ocG9zKSwgbmVhcmVzdE1haWxCbG9ja3F1b3RlKHBvcy5kZXByZWNhdGVk
Tm9kZSgpKSkpCisgICAgd2hpbGUgKGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoVmlzaWJs
ZVBvc2l0aW9uKHBvcyksIGVuY2xvc2luZ05vZGVPZlR5cGUocG9zLCBpc01haWxCbG9ja3F1b3Rl
KSkpCiAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cygpOwogICAgIAogICAgIC8vIHN0YXJ0Tm9k
ZSBpcyB0aGUgZmlyc3Qgbm9kZSB0aGF0IHdlIG5lZWQgdG8gbW92ZSB0byB0aGUgbmV3IGJsb2Nr
cXVvdGUuCkBAIC0xMzUsNyArMTMxLDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpk
b0FwcGx5KCkKICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsKICAgICAKICAgICAvLyBJ
bnNlcnQgYSBjbG9uZSBvZiB0aGUgdG9wIGJsb2NrcXVvdGUgYWZ0ZXIgdGhlIGJyZWFrLgotICAg
IFJlZlB0cjxFbGVtZW50PiBjbG9uZWRCbG9ja3F1b3RlID0gdG9wQmxvY2txdW90ZS0+Y2xvbmVF
bGVtZW50V2l0aG91dENoaWxkcmVuKCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGNsb25lZEJsb2Nr
cXVvdGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4odG9wQmxvY2txdW90ZSktPmNsb25lRWxlbWVu
dFdpdGhvdXRDaGlsZHJlbigpOwogICAgIGluc2VydE5vZGVBZnRlcihjbG9uZWRCbG9ja3F1b3Rl
LmdldCgpLCBicmVha05vZGUuZ2V0KCkpOwogICAgIAogICAgIC8vIENsb25lIHN0YXJ0Tm9kZSdz
IGFuY2VzdG9ycyBpbnRvIHRoZSBjbG9uZWQgYmxvY2txdW90ZS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24g
ODEwOTApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpzYXZlVHlwaW5nUwogCiAgICAgLy8gSWYgd2UncmUgZGVsZXRpbmcgaW50byBh
IE1haWwgYmxvY2txdW90ZSwgc2F2ZSB0aGUgc3R5bGUgYXQgZW5kKCkgaW5zdGVhZCBvZiBzdGFy
dCgpCiAgICAgLy8gV2UnbGwgdXNlIHRoaXMgbGF0ZXIgaW4gY29tcHV0ZVR5cGluZ1N0eWxlQWZ0
ZXJEZWxldGUgaWYgd2UgZW5kIHVwIG91dHNpZGUgb2YgYSBNYWlsIGJsb2NrcXVvdGUKLSAgICBp
ZiAobmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fc2VsZWN0aW9uVG9EZWxldGUuc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpKSkKKyAgICBpZiAoZW5jbG9zaW5nTm9kZU9mVHlwZShtX3NlbGVjdGlvblRv
RGVsZXRlLnN0YXJ0KCksIGlzTWFpbEJsb2NrcXVvdGUpKQogICAgICAgICBtX2RlbGV0ZUludG9C
bG9ja3F1b3RlU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX3NlbGVjdGlvblRvRGVsZXRl
LmVuZCgpKTsKICAgICBlbHNlCiAgICAgICAgIG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSA9
IDA7CkBAIC02ODcsNyArNjg3LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxj
dWxhdGVUeQogICAgIC8vIGhhcyBjb21wbGV0ZWQuCiAgICAgCiAgICAgLy8gSWYgd2UgZGVsZXRl
ZCBpbnRvIGEgYmxvY2txdW90ZSwgYnV0IGFyZSBub3cgbm8gbG9uZ2VyIGluIGEgYmxvY2txdW90
ZSwgdXNlIHRoZSBhbHRlcm5hdGUgdHlwaW5nIHN0eWxlCi0gICAgaWYgKG1fZGVsZXRlSW50b0Js
b2NrcXVvdGVTdHlsZSAmJiAhbmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fZW5kaW5nUG9zaXRpb24u
ZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgaWYgKG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSAm
JiAhZW5jbG9zaW5nTm9kZU9mVHlwZShtX2VuZGluZ1Bvc2l0aW9uLCBpc01haWxCbG9ja3F1b3Rl
LCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpCiAgICAgICAgIG1fdHlwaW5nU3R5bGUgPSBtX2Rl
bGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiAgICAgbV9kZWxldGVJbnRvQmxvY2txdW90ZVN0eWxl
ID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxMDkwKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw3
ICszNTcsNyBAQCBzdGF0aWMgYm9vbCBoYXNNYXRjaGluZ1F1b3RlTGV2ZWwoVmlzaWJsCiB7CiAg
ICAgUG9zaXRpb24gZXhpc3RpbmcgPSBlbmRPZkV4aXN0aW5nQ29udGVudC5kZWVwRXF1aXZhbGVu
dCgpOwogICAgIFBvc2l0aW9uIGluc2VydGVkID0gZW5kT2ZJbnNlcnRlZENvbnRlbnQuZGVlcEVx
dWl2YWxlbnQoKTsKLSAgICBib29sIGlzSW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFp
bEJsb2NrcXVvdGUoaW5zZXJ0ZWQuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgYm9vbCBpc0luc2lk
ZU1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShpbnNlcnRlZCwgaXNNYWlsQmxv
Y2txdW90ZSwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgIHJldHVybiBpc0luc2lkZU1h
aWxCbG9ja3F1b3RlICYmIChudW1FbmNsb3NpbmdNYWlsQmxvY2txdW90ZXMoZXhpc3RpbmcpID09
IG51bUVuY2xvc2luZ01haWxCbG9ja3F1b3RlcyhpbnNlcnRlZCkpOwogfQogCkBAIC01NTYsNyAr
NTU2LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydAogCiAgICAg
Ly8gSGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGRvaW5nIFBhc3RlIGFzIFF1b3RhdGlv
biBvciBwYXN0aW5nIGludG8gcXVvdGVkIGNvbnRlbnQgaXMgbW9yZSBjb21wbGljYXRlZCAoc2Vl
IGhhbmRsZVN0eWxlU3BhbnMpCiAgICAgLy8gYW5kIGRvZXNuJ3QgcmVjZWl2ZSB0aGUgb3B0aW1p
emF0aW9uLgotICAgIGlmIChpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZSh0b3BOb2RlKSB8fCBu
ZWFyZXN0TWFpbEJsb2NrcXVvdGUodG9wTm9kZSkpCisgICAgaWYgKGlzTWFpbFBhc3RlQXNRdW90
YXRpb25Ob2RlKHRvcE5vZGUpIHx8ICh0b3BOb2RlICYmIGVuY2xvc2luZ05vZGVPZlR5cGUoZmly
c3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHRvcE5vZGUpLCBpc01haWxCbG9ja3F1b3RlLCBDYW5D
cm9zc0VkaXRpbmdCb3VuZGFyeSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBF
aXRoZXIgdGhlcmUgYXJlIG5vIHN0eWxlIHNwYW5zIGluIHRoZSBmcmFnbWVudCBvciBhIFdlYktp
dCBjbGllbnQgaGFzIGFkZGVkIGNvbnRlbnQgdG8gdGhlIGZyYWdtZW50CkBAIC02MjMsNyArNjIz
LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bAogCiAgICAgLy8g
SWYgTWFpbCB3cmFwcyB0aGUgZnJhZ21lbnQgd2l0aCBhIFBhc3RlIGFzIFF1b3RhdGlvbiBibG9j
a3F1b3RlLCBvciBpZiB5b3UncmUgcGFzdGluZyBpbnRvIGEgcXVvdGVkIHJlZ2lvbiwKICAgICAv
LyBzdHlsZXMgZnJvbSBibG9ja3F1b3RlTm9kZSBhcmUgYWxsb3dlZCB0byBvdmVycmlkZSB0aG9z
ZSBmcm9tIHRoZSBzb3VyY2UgZG9jdW1lbnQsIHNlZSA8cmRhcjovL3Byb2JsZW0vNDkzMDk4Nj4g
YW5kIDxyZGFyOi8vcHJvYmxlbS81MDg5MzI3Pi4KLSAgICBOb2RlKiBibG9ja3F1b3RlTm9kZSA9
IGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKGNvbnRleHQpID8gY29udGV4dCA6IG5lYXJlc3RN
YWlsQmxvY2txdW90ZShjb250ZXh0KTsKKyAgICBOb2RlKiBibG9ja3F1b3RlTm9kZSA9ICghY29u
dGV4dCB8fCBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb250ZXh0KSkgPyBjb250ZXh0IDog
ZW5jbG9zaW5nTm9kZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRleHQpLCBpc01haWxC
bG9ja3F1b3RlLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgaWYgKGJsb2NrcXVvdGVO
b2RlKSB7CiAgICAgICAgIHNvdXJjZURvY3VtZW50U3R5bGUtPnJlbW92ZVN0eWxlQ29uZmxpY3Rp
bmdXaXRoU3R5bGVPZk5vZGUoYmxvY2txdW90ZU5vZGUpOwogICAgICAgICBjb250ZXh0ID0gYmxv
Y2txdW90ZU5vZGUtPnBhcmVudE5vZGUoKTsKQEAgLTgxMSw4ICs4MTEsOCBAQCB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5j
bG9zaW5nQmxvY2sodmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgCiAgICAgUG9zaXRpb24gaW5zZXJ0aW9uUG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7
Ci0gICAgYm9vbCBzdGFydElzSW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2Nr
cXVvdGUoaW5zZXJ0aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpOwotICAgIAorICAgIGJvb2wgc3Rh
cnRJc0luc2lkZU1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShpbnNlcnRpb25Q
b3MsIGlzTWFpbEJsb2NrcXVvdGUsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKKwogICAgIGlm
ICgoc2VsZWN0aW9uU3RhcnRXYXNTdGFydE9mUGFyYWdyYXBoICYmIHNlbGVjdGlvbkVuZFdhc0Vu
ZE9mUGFyYWdyYXBoICYmICFzdGFydElzSW5zaWRlTWFpbEJsb2NrcXVvdGUpIHx8CiAgICAgICAg
IHN0YXJ0QmxvY2sgPT0gY3VycmVudFJvb3QgfHwgaXNMaXN0SXRlbShzdGFydEJsb2NrKSB8fCBz
ZWxlY3Rpb25Jc1BsYWluVGV4dCkKICAgICAgICAgbV9wcmV2ZW50TmVzdGluZyA9IGZhbHNlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDgxMDkw
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxMCwyNyArNjEwLDI5IEBAIE5vZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3Qg
UG9zaXRpb24KICAgICBpZiAocC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IAotICAgIE5vZGUqIHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOworICAgIE5vZGUqIHJv
b3QgPSBydWxlID09IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxl
Um9vdChwKSA6IDA7CiAgICAgZm9yIChOb2RlKiBuID0gcC5kZXByZWNhdGVkTm9kZSgpOyBuOyBu
ID0gbi0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIC8vIERvbid0IHJldHVybiBhIG5vbi1lZGl0
YWJsZSBub2RlIGlmIHRoZSBpbnB1dCBwb3NpdGlvbiB3YXMgZWRpdGFibGUsIHNpbmNlCiAgICAg
ICAgIC8vIHRoZSBjYWxsZXJzIGZyb20gZWRpdGluZyB3aWxsIG5vIGRvdWJ0IHdhbnQgdG8gcGVy
Zm9ybSBlZGl0aW5nIGluc2lkZSB0aGUgcmV0dXJuZWQgbm9kZS4KLSAgICAgICAgaWYgKHJvb3Qg
JiYgIW4tPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdC
b3VuZGFyeSkKKyAgICAgICAgaWYgKHJvb3QgJiYgIW4tPmlzQ29udGVudEVkaXRhYmxlKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCgqbm9kZUlzT2ZUeXBlKShuKSkKKyAg
ICAgICAgaWYgKG5vZGVJc09mVHlwZShuKSkKICAgICAgICAgICAgIHJldHVybiBuOwotICAgICAg
ICBpZiAobiA9PSByb290ICYmIHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpCisg
ICAgICAgIGlmIChuID09IHJvb3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIDA7CiB9CiAKLU5vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGNv
bnN0IFBvc2l0aW9uJiBwLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKikpCitOb2Rl
KiBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYgcCwgYm9vbCAoKm5v
ZGVJc09mVHlwZSkoY29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVs
ZSkKIHsKICAgICBOb2RlKiBoaWdoZXN0ID0gMDsKLSAgICBOb2RlKiByb290ID0gaGlnaGVzdEVk
aXRhYmxlUm9vdChwKTsKKyAgICBOb2RlKiByb290ID0gcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRp
bmdCb3VuZGFyeSA/IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCkgOiAwOwogICAgIGZvciAoTm9kZSog
biA9IHAuZGVwcmVjYXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAg
ICBpZiAoKCpub2RlSXNPZlR5cGUpKG4pKQorICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250
ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobm9kZUlz
T2ZUeXBlKG4pKQogICAgICAgICAgICAgaGlnaGVzdCA9IG47CiAgICAgICAgIGlmIChuID09IHJv
b3QpCiAgICAgICAgICAgICBicmVhazsKQEAgLTkzNCwxNSArOTM2LDYgQEAgYm9vbCBpc05vZGVS
ZW5kZXJlZChjb25zdCBOb2RlICpub2RlKQogICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS0+
dmlzaWJpbGl0eSgpID09IFZJU0lCTEU7CiB9CiAKLU5vZGUgKm5lYXJlc3RNYWlsQmxvY2txdW90
ZShjb25zdCBOb2RlICpub2RlKQotewotICAgIGZvciAoTm9kZSAqbiA9IGNvbnN0X2Nhc3Q8Tm9k
ZSAqPihub2RlKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXNNYWls
QmxvY2txdW90ZShuKSkKLSAgICAgICAgICAgIHJldHVybiBuOwotICAgIH0KLSAgICByZXR1cm4g
MDsKLX0KLQogdW5zaWduZWQgbnVtRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVzKGNvbnN0IFBvc2l0
aW9uJiBwKQogewogICAgIHVuc2lnbmVkIG51bSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9odG1sZWRpdGluZy5oCShyZXZpc2lvbiA4MTA5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaHRtbGVkaXRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBjbGFzcyBW
aXNpYmxlU2VsZWN0aW9uOwogCiBOb2RlKiBoaWdoZXN0QW5jZXN0b3IoTm9kZSopOwogTm9kZSog
aGlnaGVzdEVkaXRhYmxlUm9vdChjb25zdCBQb3NpdGlvbiYpOwotTm9kZSogaGlnaGVzdEVuY2xv
c2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24mLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25z
dCBOb2RlKikpOworTm9kZSogaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRp
b24mLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKiksIEVkaXRpbmdCb3VuZGFyeUNy
b3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKIE5vZGUqIGxvd2VzdEVk
aXRhYmxlQW5jZXN0b3IoTm9kZSopOyAgIAogCiBOb2RlKiBlbmNsb3NpbmdCbG9jayhOb2RlKiwg
RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkp
OwpAQCAtNjYsNyArNjYsNiBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3Np
dGlvCiBOb2RlKiBlbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uJiwgYm9vbCAoKm5v
ZGVJc09mVHlwZSkoY29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBD
YW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAKIE5vZGUqIHRhYlNwYW5Ob2RlKGNvbnN0IE5v
ZGUqKTsKLU5vZGUqIG5lYXJlc3RNYWlsQmxvY2txdW90ZShjb25zdCBOb2RlKik7CiBOb2RlKiBp
c0xhc3RQb3NpdGlvbkJlZm9yZVRhYmxlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogTm9kZSog
aXNGaXJzdFBvc2l0aW9uQWZ0ZXJUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gODEwOTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw5ICs0ODgs
OSBAQCBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwCiAgICAgICAgIHNw
ZWNpYWxDb21tb25BbmNlc3RvciA9IGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJh
bmNlKGNvbW1vbkFuY2VzdG9yKTsKIAogICAgICAgICAvLyBSZXRhaW4gdGhlIE1haWwgcXVvdGUg
bGV2ZWwgYnkgaW5jbHVkaW5nIGFsbCBhbmNlc3RvciBtYWlsIGJsb2NrIHF1b3Rlcy4KLSAgICAg
ICAgZm9yIChOb2RlKiBhbmNlc3RvciA9IHJhbmdlLT5maXJzdE5vZGUoKTsgYW5jZXN0b3I7IGFu
Y2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKGlzTWFp
bEJsb2NrcXVvdGUoYW5jZXN0b3IpKQotICAgICAgICAgICAgICAgIHNwZWNpYWxDb21tb25BbmNl
c3RvciA9IGFuY2VzdG9yOworICAgICAgICBpZiAocmFuZ2UtPmZpcnN0Tm9kZSgpKSB7CisgICAg
ICAgICAgICBpZiAoTm9kZSogaGlnaGVzdE1haWxCbG9ja3F1b3RlID0gaGlnaGVzdEVuY2xvc2lu
Z05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHJhbmdlLT5maXJzdE5vZGUo
KSksIGlzTWFpbEJsb2NrcXVvdGUsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSkKKyAgICAgICAg
ICAgICAgICBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBoaWdoZXN0TWFpbEJsb2NrcXVvdGU7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTYzNCw3ICs2MzQsNyBAQCBTdHJpbmcgY3JlYXRlTWFya3Vw
KGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgICAgIC8vIFN0eWxlcyB0aGF0IE1haWwgYmxvY2tx
dW90ZXMgY29udHJpYnV0ZSBzaG91bGQgb25seSBiZSBwbGFjZWQgb24gdGhlIE1haWwgYmxvY2tx
dW90ZSwgdG8gaGVscAogICAgICAgICAvLyB1cyBkaWZmZXJlbnRpYXRlIHRob3NlIHN0eWxlcyBm
cm9tIG9uZXMgdGhhdCB0aGUgdXNlciBoYXMgYXBwbGllZC4gIFRoaXMgaGVscHMgdXMKICAgICAg
ICAgLy8gZ2V0IHRoZSBjb2xvciBvZiBjb250ZW50IHBhc3RlZCBpbnRvIGJsb2NrcXVvdGVzIHJp
Z2h0LgotICAgICAgICBzdHlsZS0+cmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kZShuZWFyZXN0TWFpbEJs
b2NrcXVvdGUocGFyZW50T2ZMYXN0Q2xvc2VkKSk7CisgICAgICAgIHN0eWxlLT5yZW1vdmVTdHls
ZUFkZGVkQnlOb2RlKGVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluTm9kZShwYXJl
bnRPZkxhc3RDbG9zZWQpLCBpc01haWxCbG9ja3F1b3RlLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFy
eSkpOwogCiAgICAgICAgIC8vIERvY3VtZW50IGRlZmF1bHQgc3R5bGVzIHdpbGwgYmUgYWRkZWQg
b24gYW5vdGhlciB3cmFwcGVyIHNwYW4uCiAgICAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVu
dC0+ZG9jdW1lbnRFbGVtZW50KCkpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTIwNikKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTAz
LTE1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgbmVhcmVzdE1haWxCbG9j
a3F1b3RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NjQzOQorCisgICAgICAgIEFkZGVkIGEgdGVzdCB0byBlbnN1cmUgV2ViS2kgZG9lc24ndCBjcmFz
aCB3aGVuIGluc2VydGluZyBuZXdsaW5lIGluIHF1b3RlZCBjb250ZW50cywKKyAgICAgICAgd2hp
Y2ggaXMgZW5jbG9zZWQgYnkgYSBub24tZWRpdGFibGUgYmxvY2txdW90ZS4KKworICAgICAgICAq
IGVkaXRpbmcvZXhlY0NvbW1hbmQvYnJlYWstbm9uLWVkaXRhYmxlLWJsb2NrcXVvdGUtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5kL2JyZWFrLW5vbi1l
ZGl0YWJsZS1ibG9ja3F1b3RlLmh0bWw6IEFkZGVkLgorCiAyMDExLTAzLTE1ICBEYXZpZCBMZXZp
biAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVcGRhdGUgbGVvcGFyZCBzcGVjaWZp
YyBiYXNlbGluZXMgZm9yIHRlc3RzIChlZGl0aW5nLCBjc3MpIGNoYW5nZXMgZHVlIHRvIHI4MDc1
NS4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvYnJlYWstbm9uLWVkaXRh
YmxlLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Vk
aXRpbmcvZXhlY0NvbW1hbmQvYnJlYWstbm9uLWVkaXRhYmxlLWJsb2NrcXVvdGUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9icmVh
ay1ub24tZWRpdGFibGUtYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsOCBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgV2ViS2l0IHByb3Blcmx5IGluc2VydHMgbmV3
bGluZSBpbiBxdW90ZWQgY29udGVudHMsIHdoaWNoIGlzIGVuY2xvc2VkIGJ5IGEgbm9uLWVkaXRh
YmxlIGJsb2NrcXVvdGUuCit8IDxibG9ja3F1b3RlPgorfCAgIHR5cGU9ImNpdGUiCit8ICAgImhl
bGxvIgorfCA8YnI+Cit8IDxibG9ja3F1b3RlPgorfCAgIHR5cGU9ImNpdGUiCit8ICAgIiB3b3Js
ZCIKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvYnJlYWstbm9uLWVkaXRh
YmxlLWJsb2NrcXVvdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4
ZWNDb21tYW5kL2JyZWFrLW5vbi1lZGl0YWJsZS1ibG9ja3F1b3RlLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2JyZWFrLW5vbi1lZGl0YWJsZS1i
bG9ja3F1b3RlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8Ym9keT4KKzxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPgorPGRpdiBpZD0i
dGVzdCIgY29udGVudGVkaXRhYmxlPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPmhlbGxvIHdvcmxk
PC9ibG9ja3F1b3RlPjwvZGl2PgorPC9ibG9ja3F1b3RlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9kdW1wLWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit2YXIgdGVz
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7Cit3aW5kb3cuZ2V0U2VsZWN0aW9u
KCkuc2V0UG9zaXRpb24odGVzdC5maXJzdENoaWxkLmZpcnN0Q2hpbGQsIDUpOworZG9jdW1lbnQu
ZXhlY0NvbW1hbmQoJ0luc2VydE5ld2xpbmVJblF1b3RlZENvbnRlbnQnLCBmYWxzZSwgbnVsbCk7
CisKK01hcmt1cC5kZXNjcmlwdGlvbignVGhpcyB0ZXN0IGVuc3VyZXMgV2ViS2l0IHByb3Blcmx5
IGluc2VydHMgbmV3bGluZSBpbiBxdW90ZWQgY29udGVudHMsIHdoaWNoIGlzIGVuY2xvc2VkIGJ5
IGEgbm9uLWVkaXRhYmxlIGJsb2NrcXVvdGUuJyk7CitNYXJrdXAuZHVtcCh0ZXN0KTsKKworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85984</attachid>
            <date>2011-03-16 15:16:42 -0700</date>
            <delta_ts>2011-03-16 16:07:40 -0700</delta_ts>
            <desc>Added a null pointer check to firstPositionInOrBeforeNode/lastPositionInOrAfterNode</desc>
            <filename>bug-56439-20110316151641.patch</filename>
            <type>text/plain</type>
            <size>15973</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDMtMTYgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgR2V0IHJpZCBvZiBuZWFyZXN0TWFpbEJsb2NrcXVvdGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NDM5CisKKyAgICAg
ICAgUmVtb3ZlZCBuZWFyZXN0TWFpbEJsb2NrcXVvdGUgYW5kIHJlcGxhY2VkIHRoZSBjYWxscyB0
byB0aGUgZnVuY3Rpb24gYnkgY2FsbHMKKyAgICAgICAgdG8gZW5jbG9zaW5nTm9kZU9mVHlwZSBh
bmQgaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUuCisgICAgICAgIAorICAgICAgICBBbHNvIGZp
eGVkIGEgYnVnIGluIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQgYW5kIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQgbm90IHRvCisgICAgICAgIHJlc3BlY3QgZWRpdGluZyBib3VuZGFyaWVzLiAgQWRkZWQg
YSB0ZXN0IGZvciB0aGUgZm9ybWVyIGNvbW1hbmQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9l
eGVjQ29tbWFuZC9icmVhay1ub24tZWRpdGFibGUtYmxvY2txdW90ZS5odG1sCisKKyAgICAgICAg
KiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSk6IE5vIGxvbmdlciBjcm9zc2VzIGVkaXRp
bmcgYm91bmRhcnkKKyAgICAgICAgd2hlbiBsb29raW5nIGZvciBhIE1haWwgYmxvY2txdW90ZS4K
KyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0
ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTWF0Y2hpbmdRdW90ZUxldmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3Bh
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZW5jbG9zaW5nTm9kZU9mVHlwZSk6IENoZWNrIHJ1bGUgdXBmcm9udCB0byBpbXByb3ZlIHRoZSBw
ZXJmb3JtYW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBl
KTogRGl0dG87IGFsc28gYWRkIHRoZSBtaXNzaW5nIGNoZWNrLgorICAgICAgICAqIGVkaXRpbmcv
aHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZSk6IEFkZGVkIGEgbnVsbCBwb2ludGVyIGNoZWNrLgorICAgICAgICAoV2ViQ29yZTo6bGFz
dFBvc2l0aW9uSW5PckFmdGVyTm9kZSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvbWFya3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXApOgorCiAyMDExLTAzLTE2ICBCaWxsIEJ1ZGdl
ICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZp
bi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVD
b21tYW5kLmNwcAkocmV2aXNpb24gODEyNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Jy
ZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMiArNjYsOCBA
QCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIFBvc2l0aW9uIHBv
cyA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpOwogICAgIAogICAgIC8v
IEZpbmQgdGhlIHRvcC1tb3N0IGJsb2NrcXVvdGUgZnJvbSB0aGUgc3RhcnQuCi0gICAgRWxlbWVu
dCogdG9wQmxvY2txdW90ZSA9IDA7Ci0gICAgZm9yIChDb250YWluZXJOb2RlKiBub2RlID0gcG9z
LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVu
dE5vZGUoKSkgewotICAgICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShub2RlKSkKLSAgICAgICAg
ICAgIHRvcEJsb2NrcXVvdGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Ci0gICAgfQot
ICAgIGlmICghdG9wQmxvY2txdW90ZSB8fCAhdG9wQmxvY2txdW90ZS0+cGFyZW50Tm9kZSgpKQor
ICAgIE5vZGUqIHRvcEJsb2NrcXVvdGUgPSBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShwb3Ms
IGlzTWFpbEJsb2NrcXVvdGUpOworICAgIGlmICghdG9wQmxvY2txdW90ZSB8fCAhdG9wQmxvY2tx
dW90ZS0+cGFyZW50Tm9kZSgpIHx8ICF0b3BCbG9ja3F1b3RlLT5pc0VsZW1lbnROb2RlKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBSZWZQdHI8RWxlbWVudD4gYnJlYWtOb2RlID0gY3Jl
YXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwpAQCAtMTAzLDcgKzk5LDcgQEAgdm9pZCBCcmVh
a0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgcG9zID0gcG9zLm5leHQoKTsK
ICAgICAgICAgCiAgICAgLy8gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB3ZSBkb24ndCBzcGxpdCBh
dCB0aGUgYmVnaW5uaW5nIG9mIGEgcXVvdGUuICAKLSAgICB3aGlsZSAoaXNGaXJzdFZpc2libGVQ
b3NpdGlvbkluTm9kZShWaXNpYmxlUG9zaXRpb24ocG9zKSwgbmVhcmVzdE1haWxCbG9ja3F1b3Rl
KHBvcy5kZXByZWNhdGVkTm9kZSgpKSkpCisgICAgd2hpbGUgKGlzRmlyc3RWaXNpYmxlUG9zaXRp
b25Jbk5vZGUoVmlzaWJsZVBvc2l0aW9uKHBvcyksIGVuY2xvc2luZ05vZGVPZlR5cGUocG9zLCBp
c01haWxCbG9ja3F1b3RlKSkpCiAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cygpOwogICAgIAog
ICAgIC8vIHN0YXJ0Tm9kZSBpcyB0aGUgZmlyc3Qgbm9kZSB0aGF0IHdlIG5lZWQgdG8gbW92ZSB0
byB0aGUgbmV3IGJsb2NrcXVvdGUuCkBAIC0xMzUsNyArMTMxLDcgQEAgdm9pZCBCcmVha0Jsb2Nr
cXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsK
ICAgICAKICAgICAvLyBJbnNlcnQgYSBjbG9uZSBvZiB0aGUgdG9wIGJsb2NrcXVvdGUgYWZ0ZXIg
dGhlIGJyZWFrLgotICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZWRCbG9ja3F1b3RlID0gdG9wQmxv
Y2txdW90ZS0+Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuKCk7CisgICAgUmVmUHRyPEVsZW1l
bnQ+IGNsb25lZEJsb2NrcXVvdGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4odG9wQmxvY2txdW90
ZSktPmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOwogICAgIGluc2VydE5vZGVBZnRlcihj
bG9uZWRCbG9ja3F1b3RlLmdldCgpLCBicmVha05vZGUuZ2V0KCkpOwogICAgIAogICAgIC8vIENs
b25lIHN0YXJ0Tm9kZSdzIGFuY2VzdG9ycyBpbnRvIHRoZSBjbG9uZWQgYmxvY2txdW90ZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5k
LmNwcAkocmV2aXNpb24gODEyNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNyArMjg2LDcgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nUwogCiAgICAgLy8gSWYgd2UncmUg
ZGVsZXRpbmcgaW50byBhIE1haWwgYmxvY2txdW90ZSwgc2F2ZSB0aGUgc3R5bGUgYXQgZW5kKCkg
aW5zdGVhZCBvZiBzdGFydCgpCiAgICAgLy8gV2UnbGwgdXNlIHRoaXMgbGF0ZXIgaW4gY29tcHV0
ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUgaWYgd2UgZW5kIHVwIG91dHNpZGUgb2YgYSBNYWlsIGJs
b2NrcXVvdGUKLSAgICBpZiAobmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fc2VsZWN0aW9uVG9EZWxl
dGUuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSkKKyAgICBpZiAoZW5jbG9zaW5nTm9kZU9mVHlw
ZShtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCksIGlzTWFpbEJsb2NrcXVvdGUpKQogICAgICAg
ICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX3Nl
bGVjdGlvblRvRGVsZXRlLmVuZCgpKTsKICAgICBlbHNlCiAgICAgICAgIG1fZGVsZXRlSW50b0Js
b2NrcXVvdGVTdHlsZSA9IDA7CkBAIC02ODksNyArNjg5LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpjYWxjdWxhdGVUeQogICAgIC8vIGhhcyBjb21wbGV0ZWQuCiAgICAgCiAgICAg
Ly8gSWYgd2UgZGVsZXRlZCBpbnRvIGEgYmxvY2txdW90ZSwgYnV0IGFyZSBub3cgbm8gbG9uZ2Vy
IGluIGEgYmxvY2txdW90ZSwgdXNlIHRoZSBhbHRlcm5hdGUgdHlwaW5nIHN0eWxlCi0gICAgaWYg
KG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSAmJiAhbmVhcmVzdE1haWxCbG9ja3F1b3RlKG1f
ZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgaWYgKG1fZGVsZXRlSW50b0Js
b2NrcXVvdGVTdHlsZSAmJiAhZW5jbG9zaW5nTm9kZU9mVHlwZShtX2VuZGluZ1Bvc2l0aW9uLCBp
c01haWxCbG9ja3F1b3RlLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpCiAgICAgICAgIG1fdHlw
aW5nU3R5bGUgPSBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiAgICAgbV9kZWxldGVJbnRv
QmxvY2txdW90ZVN0eWxlID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxMjc5KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgYm9vbCBoYXNNYXRjaGluZ1F1b3RlTGV2
ZWwoVmlzaWJsCiB7CiAgICAgUG9zaXRpb24gZXhpc3RpbmcgPSBlbmRPZkV4aXN0aW5nQ29udGVu
dC5kZWVwRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGluc2VydGVkID0gZW5kT2ZJbnNlcnRl
ZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBib29sIGlzSW5zaWRlTWFpbEJsb2NrcXVv
dGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0ZWQuZGVwcmVjYXRlZE5vZGUoKSk7Cisg
ICAgYm9vbCBpc0luc2lkZU1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShpbnNl
cnRlZCwgaXNNYWlsQmxvY2txdW90ZSwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgIHJl
dHVybiBpc0luc2lkZU1haWxCbG9ja3F1b3RlICYmIChudW1FbmNsb3NpbmdNYWlsQmxvY2txdW90
ZXMoZXhpc3RpbmcpID09IG51bUVuY2xvc2luZ01haWxCbG9ja3F1b3RlcyhpbnNlcnRlZCkpOwog
fQogCkBAIC01NTYsNyArNTU2LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVTcGFuc0JlZm9y
ZUluc2VydAogCiAgICAgLy8gSGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGRvaW5nIFBh
c3RlIGFzIFF1b3RhdGlvbiBvciBwYXN0aW5nIGludG8gcXVvdGVkIGNvbnRlbnQgaXMgbW9yZSBj
b21wbGljYXRlZCAoc2VlIGhhbmRsZVN0eWxlU3BhbnMpCiAgICAgLy8gYW5kIGRvZXNuJ3QgcmVj
ZWl2ZSB0aGUgb3B0aW1pemF0aW9uLgotICAgIGlmIChpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9k
ZSh0b3BOb2RlKSB8fCBuZWFyZXN0TWFpbEJsb2NrcXVvdGUodG9wTm9kZSkpCisgICAgaWYgKGlz
TWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKHRvcE5vZGUpIHx8IGVuY2xvc2luZ05vZGVPZlR5cGUo
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHRvcE5vZGUpLCBpc01haWxCbG9ja3F1b3RlLCBD
YW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IEVpdGhlciB0aGVyZSBhcmUgbm8gc3R5bGUgc3BhbnMgaW4gdGhlIGZyYWdtZW50IG9yIGEgV2Vi
S2l0IGNsaWVudCBoYXMgYWRkZWQgY29udGVudCB0byB0aGUgZnJhZ21lbnQKQEAgLTYyMyw3ICs2
MjMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsCiAKICAgICAv
LyBJZiBNYWlsIHdyYXBzIHRoZSBmcmFnbWVudCB3aXRoIGEgUGFzdGUgYXMgUXVvdGF0aW9uIGJs
b2NrcXVvdGUsIG9yIGlmIHlvdSdyZSBwYXN0aW5nIGludG8gYSBxdW90ZWQgcmVnaW9uLAogICAg
IC8vIHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVOb2RlIGFyZSBhbGxvd2VkIHRvIG92ZXJyaWRlIHRo
b3NlIGZyb20gdGhlIHNvdXJjZSBkb2N1bWVudCwgc2VlIDxyZGFyOi8vcHJvYmxlbS80OTMwOTg2
PiBhbmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkzMjc+LgotICAgIE5vZGUqIGJsb2NrcXVvdGVOb2Rl
ID0gaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dCkgPyBjb250ZXh0IDogbmVhcmVz
dE1haWxCbG9ja3F1b3RlKGNvbnRleHQpOworICAgIE5vZGUqIGJsb2NrcXVvdGVOb2RlID0gaXNN
YWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dCkgPyBjb250ZXh0IDogZW5jbG9zaW5nTm9k
ZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRleHQpLCBpc01haWxCbG9ja3F1b3RlLCBD
YW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgaWYgKGJsb2NrcXVvdGVOb2RlKSB7CiAgICAg
ICAgIHNvdXJjZURvY3VtZW50U3R5bGUtPnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVP
Zk5vZGUoYmxvY2txdW90ZU5vZGUpOwogICAgICAgICBjb250ZXh0ID0gYmxvY2txdW90ZU5vZGUt
PnBhcmVudE5vZGUoKTsKQEAgLTgxMSw4ICs4MTEsOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2so
dmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgCiAg
ICAgUG9zaXRpb24gaW5zZXJ0aW9uUG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgYm9vbCBz
dGFydElzSW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0
aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpOwotICAgIAorICAgIGJvb2wgc3RhcnRJc0luc2lkZU1h
aWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShpbnNlcnRpb25Qb3MsIGlzTWFpbEJs
b2NrcXVvdGUsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKKwogICAgIGlmICgoc2VsZWN0aW9u
U3RhcnRXYXNTdGFydE9mUGFyYWdyYXBoICYmIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBo
ICYmICFzdGFydElzSW5zaWRlTWFpbEJsb2NrcXVvdGUpIHx8CiAgICAgICAgIHN0YXJ0QmxvY2sg
PT0gY3VycmVudFJvb3QgfHwgaXNMaXN0SXRlbShzdGFydEJsb2NrKSB8fCBzZWxlY3Rpb25Jc1Bs
YWluVGV4dCkKICAgICAgICAgbV9wcmV2ZW50TmVzdGluZyA9IGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDgxMjc5KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwOSwy
NyArNjA5LDI5IEBAIE5vZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24KICAg
ICBpZiAocC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgIE5vZGUq
IHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOworICAgIE5vZGUqIHJvb3QgPSBydWxlID09
IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxlUm9vdChwKSA6IDA7
CiAgICAgZm9yIChOb2RlKiBuID0gcC5kZXByZWNhdGVkTm9kZSgpOyBuOyBuID0gbi0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgIC8vIERvbid0IHJldHVybiBhIG5vbi1lZGl0YWJsZSBub2RlIGlm
IHRoZSBpbnB1dCBwb3NpdGlvbiB3YXMgZWRpdGFibGUsIHNpbmNlCiAgICAgICAgIC8vIHRoZSBj
YWxsZXJzIGZyb20gZWRpdGluZyB3aWxsIG5vIGRvdWJ0IHdhbnQgdG8gcGVyZm9ybSBlZGl0aW5n
IGluc2lkZSB0aGUgcmV0dXJuZWQgbm9kZS4KLSAgICAgICAgaWYgKHJvb3QgJiYgIW4tPmlzQ29u
dGVudEVkaXRhYmxlKCkgJiYgcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkKKyAg
ICAgICAgaWYgKHJvb3QgJiYgIW4tPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCgqbm9kZUlzT2ZUeXBlKShuKSkKKyAgICAgICAgaWYgKG5v
ZGVJc09mVHlwZShuKSkKICAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICBpZiAobiA9PSBy
b290ICYmIHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpCisgICAgICAgIGlmIChu
ID09IHJvb3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCiAgICAgcmV0dXJu
IDA7CiB9CiAKLU5vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9u
JiBwLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKikpCitOb2RlKiBoaWdoZXN0RW5j
bG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYgcCwgYm9vbCAoKm5vZGVJc09mVHlwZSko
Y29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkKIHsKICAgICBO
b2RlKiBoaWdoZXN0ID0gMDsKLSAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChw
KTsKKyAgICBOb2RlKiByb290ID0gcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSA/
IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCkgOiAwOwogICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVj
YXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoKCpub2Rl
SXNPZlR5cGUpKG4pKQorICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobm9kZUlzT2ZUeXBlKG4pKQog
ICAgICAgICAgICAgaGlnaGVzdCA9IG47CiAgICAgICAgIGlmIChuID09IHJvb3QpCiAgICAgICAg
ICAgICBicmVhazsKQEAgLTkzMywxNSArOTM1LDYgQEAgYm9vbCBpc05vZGVSZW5kZXJlZChjb25z
dCBOb2RlICpub2RlKQogICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEU7CiB9CiAKLU5vZGUgKm5lYXJlc3RNYWlsQmxvY2txdW90ZShjb25zdCBOb2Rl
ICpub2RlKQotewotICAgIGZvciAoTm9kZSAqbiA9IGNvbnN0X2Nhc3Q8Tm9kZSAqPihub2RlKTsg
bjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShu
KSkKLSAgICAgICAgICAgIHJldHVybiBuOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogdW5z
aWduZWQgbnVtRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVzKGNvbnN0IFBvc2l0aW9uJiBwKQogewog
ICAgIHVuc2lnbmVkIG51bSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5oCShyZXZpc2lvbiA4MTI3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0
aW9uOwogCiBOb2RlKiBoaWdoZXN0QW5jZXN0b3IoTm9kZSopOwogTm9kZSogaGlnaGVzdEVkaXRh
YmxlUm9vdChjb25zdCBQb3NpdGlvbiYpOwotTm9kZSogaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5
cGUoY29uc3QgUG9zaXRpb24mLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKikpOwor
Tm9kZSogaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24mLCBib29sICgq
bm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKiksIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9
IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKIE5vZGUqIGxvd2VzdEVkaXRhYmxlQW5jZXN0
b3IoTm9kZSopOyAgIAogCiBOb2RlKiBlbmNsb3NpbmdCbG9jayhOb2RlKiwgRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwpAQCAtNjYsNyAr
NjYsNiBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3NpdGlvCiBOb2RlKiBl
bmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uJiwgYm9vbCAoKm5vZGVJc09mVHlwZSko
Y29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0Vk
aXRpbmdCb3VuZGFyeSk7CiAKIE5vZGUqIHRhYlNwYW5Ob2RlKGNvbnN0IE5vZGUqKTsKLU5vZGUq
IG5lYXJlc3RNYWlsQmxvY2txdW90ZShjb25zdCBOb2RlKik7CiBOb2RlKiBpc0xhc3RQb3NpdGlv
bkJlZm9yZVRhYmxlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogTm9kZSogaXNGaXJzdFBvc2l0
aW9uQWZ0ZXJUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIApAQCAtMTE2LDEyICsxMTUs
MTIgQEAgUG9zaXRpb24gcG9zaXRpb25PdXRzaWRlQ29udGFpbmluZ1NwZWNpYQogCiBpbmxpbmUg
UG9zaXRpb24gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKE5vZGUqIG5vZGUpCiB7Ci0gICAg
cmV0dXJuIGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSA/IHBvc2l0aW9uQmVmb3JlTm9kZShu
b2RlKSA6IGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZSk7CisgICAgcmV0dXJuIG5vZGUgJiYgZWRp
dGluZ0lnbm9yZXNDb250ZW50KG5vZGUpID8gcG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpIDogZmly
c3RQb3NpdGlvbkluTm9kZShub2RlKTsKIH0KIAogaW5saW5lIFBvc2l0aW9uIGxhc3RQb3NpdGlv
bkluT3JBZnRlck5vZGUoTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4gZWRpdGluZ0lnbm9yZXND
b250ZW50KG5vZGUpID8gcG9zaXRpb25BZnRlck5vZGUobm9kZSkgOiBsYXN0UG9zaXRpb25Jbk5v
ZGUobm9kZSk7CisgICAgcmV0dXJuIG5vZGUgJiYgZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUp
ID8gcG9zaXRpb25BZnRlck5vZGUobm9kZSkgOiBsYXN0UG9zaXRpb25Jbk5vZGUobm9kZSk7CiB9
CiAKIC8vIGNvbXBhcmlzaW9uIGZ1bmN0aW9ucyBvbiBQb3NpdGlvbgpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gODEyNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCwxMCArNDg4LDggQEAgc3RhdGlj
IE5vZGUqIGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cAogICAgICAgICBzcGVjaWFsQ29tbW9u
QW5jZXN0b3IgPSBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBwZWFyYW5jZShjb21tb25B
bmNlc3Rvcik7CiAKICAgICAgICAgLy8gUmV0YWluIHRoZSBNYWlsIHF1b3RlIGxldmVsIGJ5IGlu
Y2x1ZGluZyBhbGwgYW5jZXN0b3IgbWFpbCBibG9jayBxdW90ZXMuCi0gICAgICAgIGZvciAoTm9k
ZSogYW5jZXN0b3IgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFu
Y2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChpc01haWxCbG9ja3F1b3Rl
KGFuY2VzdG9yKSkKLSAgICAgICAgICAgICAgICBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBhbmNl
c3RvcjsKLSAgICAgICAgfQorICAgICAgICBpZiAoTm9kZSogaGlnaGVzdE1haWxCbG9ja3F1b3Rl
ID0gaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KHJhbmdlLT5maXJzdE5vZGUoKSksIGlzTWFpbEJsb2NrcXVvdGUsIENhbkNyb3NzRWRpdGluZ0Jv
dW5kYXJ5KSkKKyAgICAgICAgICAgIHNwZWNpYWxDb21tb25BbmNlc3RvciA9IGhpZ2hlc3RNYWls
QmxvY2txdW90ZTsKICAgICB9CiAKICAgICBOb2RlKiBjaGVja0FuY2VzdG9yID0gc3BlY2lhbENv
bW1vbkFuY2VzdG9yID8gc3BlY2lhbENvbW1vbkFuY2VzdG9yIDogY29tbW9uQW5jZXN0b3I7CkBA
IC02MzQsNyArNjMyLDcgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2Us
IAogICAgICAgICAvLyBTdHlsZXMgdGhhdCBNYWlsIGJsb2NrcXVvdGVzIGNvbnRyaWJ1dGUgc2hv
dWxkIG9ubHkgYmUgcGxhY2VkIG9uIHRoZSBNYWlsIGJsb2NrcXVvdGUsIHRvIGhlbHAKICAgICAg
ICAgLy8gdXMgZGlmZmVyZW50aWF0ZSB0aG9zZSBzdHlsZXMgZnJvbSBvbmVzIHRoYXQgdGhlIHVz
ZXIgaGFzIGFwcGxpZWQuICBUaGlzIGhlbHBzIHVzCiAgICAgICAgIC8vIGdldCB0aGUgY29sb3Ig
b2YgY29udGVudCBwYXN0ZWQgaW50byBibG9ja3F1b3RlcyByaWdodC4KLSAgICAgICAgc3R5bGUt
PnJlbW92ZVN0eWxlQWRkZWRCeU5vZGUobmVhcmVzdE1haWxCbG9ja3F1b3RlKHBhcmVudE9mTGFz
dENsb3NlZCkpOworICAgICAgICBzdHlsZS0+cmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kZShlbmNsb3Np
bmdOb2RlT2ZUeXBlKGZpcnN0UG9zaXRpb25Jbk5vZGUocGFyZW50T2ZMYXN0Q2xvc2VkKSwgaXNN
YWlsQmxvY2txdW90ZSwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpKTsKIAogICAgICAgICAvLyBE
b2N1bWVudCBkZWZhdWx0IHN0eWxlcyB3aWxsIGJlIGFkZGVkIG9uIGFub3RoZXIgd3JhcHBlciBz
cGFuLgogICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
KQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gODEyODIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMy0xNiAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBHZXQgcmlkIG9mIG5lYXJlc3RNYWlsQmxvY2txdW90ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0MzkKKworICAgICAgICBBZGRl
ZCBhIHRlc3QgdG8gZW5zdXJlIFdlYktpIGRvZXNuJ3QgY3Jhc2ggd2hlbiBpbnNlcnRpbmcgbmV3
bGluZSBpbiBxdW90ZWQgY29udGVudHMsCisgICAgICAgIHdoaWNoIGlzIGVuY2xvc2VkIGJ5IGEg
bm9uLWVkaXRhYmxlIGJsb2NrcXVvdGUuCisKKyAgICAgICAgKiBlZGl0aW5nL2V4ZWNDb21tYW5k
L2JyZWFrLW5vbi1lZGl0YWJsZS1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9icmVhay1ub24tZWRpdGFibGUtYmxvY2txdW90ZS5o
dG1sOiBBZGRlZC4KKwogMjAxMS0wMy0xNiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6IExh
eW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvYnJlYWstbm9uLWVkaXRhYmxlLWJsb2NrcXVv
dGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0Nv
bW1hbmQvYnJlYWstbm9uLWVkaXRhYmxlLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9icmVhay1ub24tZWRpdGFi
bGUtYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAor
VGhpcyB0ZXN0IGVuc3VyZXMgV2ViS2l0IHByb3Blcmx5IGluc2VydHMgbmV3bGluZSBpbiBxdW90
ZWQgY29udGVudHMsIHdoaWNoIGlzIGVuY2xvc2VkIGJ5IGEgbm9uLWVkaXRhYmxlIGJsb2NrcXVv
dGUuCit8IDxibG9ja3F1b3RlPgorfCAgIHR5cGU9ImNpdGUiCit8ICAgImhlbGxvIgorfCA8YnI+
Cit8IDxibG9ja3F1b3RlPgorfCAgIHR5cGU9ImNpdGUiCit8ICAgIiB3b3JsZCIKSW5kZXg6IExh
eW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvYnJlYWstbm9uLWVkaXRhYmxlLWJsb2NrcXVv
dGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2Jy
ZWFrLW5vbi1lZGl0YWJsZS1ibG9ja3F1b3RlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2JyZWFrLW5vbi1lZGl0YWJsZS1ibG9ja3F1b3RlLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8Ym9keT4KKzxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPgorPGRpdiBpZD0idGVzdCIgY29udGVu
dGVkaXRhYmxlPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPmhlbGxvIHdvcmxkPC9ibG9ja3F1b3Rl
PjwvZGl2PgorPC9ibG9ja3F1b3RlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9kdW1w
LWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit2YXIgdGVzdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7Cit3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0UG9zaXRp
b24odGVzdC5maXJzdENoaWxkLmZpcnN0Q2hpbGQsIDUpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J0luc2VydE5ld2xpbmVJblF1b3RlZENvbnRlbnQnLCBmYWxzZSwgbnVsbCk7CisKK01hcmt1cC5k
ZXNjcmlwdGlvbignVGhpcyB0ZXN0IGVuc3VyZXMgV2ViS2l0IHByb3Blcmx5IGluc2VydHMgbmV3
bGluZSBpbiBxdW90ZWQgY29udGVudHMsIHdoaWNoIGlzIGVuY2xvc2VkIGJ5IGEgbm9uLWVkaXRh
YmxlIGJsb2NrcXVvdGUuJyk7CitNYXJrdXAuZHVtcCh0ZXN0KTsKKworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85992</attachid>
            <date>2011-03-16 16:07:44 -0700</date>
            <delta_ts>2011-03-16 16:11:41 -0700</delta_ts>
            <desc>Added a null pointer check to firstPositionInOrBeforeNode/lastPositionInOrAfterNode</desc>
            <filename>bug-56439-20110316160743.patch</filename>
            <type>text/plain</type>
            <size>15817</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDMtMTYgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgR2V0IHJpZCBvZiBuZWFyZXN0TWFpbEJsb2NrcXVvdGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2NDM5CisKKyAgICAg
ICAgUmVtb3ZlZCBuZWFyZXN0TWFpbEJsb2NrcXVvdGUgYW5kIHJlcGxhY2VkIHRoZSBjYWxscyB0
byB0aGUgZnVuY3Rpb24gYnkgY2FsbHMKKyAgICAgICAgdG8gZW5jbG9zaW5nTm9kZU9mVHlwZSBh
bmQgaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUuCisgICAgICAgIAorICAgICAgICBBbHNvIGZp
eGVkIGEgYnVnIGluIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQgYW5kIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQgbm90IHRvCisgICAgICAgIHJlc3BlY3QgZWRpdGluZyBib3VuZGFyaWVzLiAgQWRkZWQg
YSB0ZXN0IGZvciB0aGUgZm9ybWVyIGNvbW1hbmQuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9l
eGVjQ29tbWFuZC9icmVhay1ub24tZWRpdGFibGUtYmxvY2txdW90ZS5odG1sCisKKyAgICAgICAg
KiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSk6IE5vIGxvbmdlciBjcm9zc2VzIGVkaXRp
bmcgYm91bmRhcnkKKyAgICAgICAgd2hlbiBsb29raW5nIGZvciBhIE1haWwgYmxvY2txdW90ZS4K
KyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1N0eWxlU3RhdGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmNhbGN1bGF0
ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzTWF0Y2hpbmdRdW90ZUxldmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3Bh
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
ZW5jbG9zaW5nTm9kZU9mVHlwZSk6IENoZWNrIHJ1bGUgdXBmcm9udCB0byBpbXByb3ZlIHRoZSBw
ZXJmb3JtYW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBl
KTogRGl0dG87IGFsc28gYWRkIHRoZSBtaXNzaW5nIGNoZWNrLgorICAgICAgICAqIGVkaXRpbmcv
aHRtbGVkaXRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZSk6IEFkZGVkIGEgbnVsbCBwb2ludGVyIGNoZWNrLgorICAgICAgICAoV2ViQ29yZTo6bGFz
dFBvc2l0aW9uSW5PckFmdGVyTm9kZSk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvbWFya3Vw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXApOgorCiAyMDExLTAzLTE2ICBCaWxsIEJ1ZGdl
ICA8YmJ1ZGdlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZp
bi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVD
b21tYW5kLmNwcAkocmV2aXNpb24gODEyNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Jy
ZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMiArNjYsOCBA
QCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIFBvc2l0aW9uIHBv
cyA9IGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpOwogICAgIAogICAgIC8v
IEZpbmQgdGhlIHRvcC1tb3N0IGJsb2NrcXVvdGUgZnJvbSB0aGUgc3RhcnQuCi0gICAgRWxlbWVu
dCogdG9wQmxvY2txdW90ZSA9IDA7Ci0gICAgZm9yIChDb250YWluZXJOb2RlKiBub2RlID0gcG9z
LmRlcHJlY2F0ZWROb2RlKCktPnBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVu
dE5vZGUoKSkgewotICAgICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShub2RlKSkKLSAgICAgICAg
ICAgIHRvcEJsb2NrcXVvdGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Ci0gICAgfQot
ICAgIGlmICghdG9wQmxvY2txdW90ZSB8fCAhdG9wQmxvY2txdW90ZS0+cGFyZW50Tm9kZSgpKQor
ICAgIE5vZGUqIHRvcEJsb2NrcXVvdGUgPSBoaWdoZXN0RW5jbG9zaW5nTm9kZU9mVHlwZShwb3Ms
IGlzTWFpbEJsb2NrcXVvdGUpOworICAgIGlmICghdG9wQmxvY2txdW90ZSB8fCAhdG9wQmxvY2tx
dW90ZS0+cGFyZW50Tm9kZSgpIHx8ICF0b3BCbG9ja3F1b3RlLT5pc0VsZW1lbnROb2RlKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICBSZWZQdHI8RWxlbWVudD4gYnJlYWtOb2RlID0gY3Jl
YXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOwpAQCAtMTAzLDcgKzk5LDcgQEAgdm9pZCBCcmVh
a0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgcG9zID0gcG9zLm5leHQoKTsK
ICAgICAgICAgCiAgICAgLy8gQWRqdXN0IHRoZSBwb3NpdGlvbiBzbyB3ZSBkb24ndCBzcGxpdCBh
dCB0aGUgYmVnaW5uaW5nIG9mIGEgcXVvdGUuICAKLSAgICB3aGlsZSAoaXNGaXJzdFZpc2libGVQ
b3NpdGlvbkluTm9kZShWaXNpYmxlUG9zaXRpb24ocG9zKSwgbmVhcmVzdE1haWxCbG9ja3F1b3Rl
KHBvcy5kZXByZWNhdGVkTm9kZSgpKSkpCisgICAgd2hpbGUgKGlzRmlyc3RWaXNpYmxlUG9zaXRp
b25Jbk5vZGUoVmlzaWJsZVBvc2l0aW9uKHBvcyksIGVuY2xvc2luZ05vZGVPZlR5cGUocG9zLCBp
c01haWxCbG9ja3F1b3RlKSkpCiAgICAgICAgIHBvcyA9IHBvcy5wcmV2aW91cygpOwogICAgIAog
ICAgIC8vIHN0YXJ0Tm9kZSBpcyB0aGUgZmlyc3Qgbm9kZSB0aGF0IHdlIG5lZWQgdG8gbW92ZSB0
byB0aGUgbmV3IGJsb2NrcXVvdGUuCkBAIC0xMzUsNyArMTMxLDcgQEAgdm9pZCBCcmVha0Jsb2Nr
cXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsK
ICAgICAKICAgICAvLyBJbnNlcnQgYSBjbG9uZSBvZiB0aGUgdG9wIGJsb2NrcXVvdGUgYWZ0ZXIg
dGhlIGJyZWFrLgotICAgIFJlZlB0cjxFbGVtZW50PiBjbG9uZWRCbG9ja3F1b3RlID0gdG9wQmxv
Y2txdW90ZS0+Y2xvbmVFbGVtZW50V2l0aG91dENoaWxkcmVuKCk7CisgICAgUmVmUHRyPEVsZW1l
bnQ+IGNsb25lZEJsb2NrcXVvdGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4odG9wQmxvY2txdW90
ZSktPmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOwogICAgIGluc2VydE5vZGVBZnRlcihj
bG9uZWRCbG9ja3F1b3RlLmdldCgpLCBicmVha05vZGUuZ2V0KCkpOwogICAgIAogICAgIC8vIENs
b25lIHN0YXJ0Tm9kZSdzIGFuY2VzdG9ycyBpbnRvIHRoZSBjbG9uZWQgYmxvY2txdW90ZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5k
LmNwcAkocmV2aXNpb24gODEyNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNyArMjg2LDcgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpzYXZlVHlwaW5nUwogCiAgICAgLy8gSWYgd2UncmUg
ZGVsZXRpbmcgaW50byBhIE1haWwgYmxvY2txdW90ZSwgc2F2ZSB0aGUgc3R5bGUgYXQgZW5kKCkg
aW5zdGVhZCBvZiBzdGFydCgpCiAgICAgLy8gV2UnbGwgdXNlIHRoaXMgbGF0ZXIgaW4gY29tcHV0
ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUgaWYgd2UgZW5kIHVwIG91dHNpZGUgb2YgYSBNYWlsIGJs
b2NrcXVvdGUKLSAgICBpZiAobmVhcmVzdE1haWxCbG9ja3F1b3RlKG1fc2VsZWN0aW9uVG9EZWxl
dGUuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKSkKKyAgICBpZiAoZW5jbG9zaW5nTm9kZU9mVHlw
ZShtX3NlbGVjdGlvblRvRGVsZXRlLnN0YXJ0KCksIGlzTWFpbEJsb2NrcXVvdGUpKQogICAgICAg
ICBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShtX3Nl
bGVjdGlvblRvRGVsZXRlLmVuZCgpKTsKICAgICBlbHNlCiAgICAgICAgIG1fZGVsZXRlSW50b0Js
b2NrcXVvdGVTdHlsZSA9IDA7CkBAIC02ODksNyArNjg5LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpjYWxjdWxhdGVUeQogICAgIC8vIGhhcyBjb21wbGV0ZWQuCiAgICAgCiAgICAg
Ly8gSWYgd2UgZGVsZXRlZCBpbnRvIGEgYmxvY2txdW90ZSwgYnV0IGFyZSBub3cgbm8gbG9uZ2Vy
IGluIGEgYmxvY2txdW90ZSwgdXNlIHRoZSBhbHRlcm5hdGUgdHlwaW5nIHN0eWxlCi0gICAgaWYg
KG1fZGVsZXRlSW50b0Jsb2NrcXVvdGVTdHlsZSAmJiAhbmVhcmVzdE1haWxCbG9ja3F1b3RlKG1f
ZW5kaW5nUG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKSkpCisgICAgaWYgKG1fZGVsZXRlSW50b0Js
b2NrcXVvdGVTdHlsZSAmJiAhZW5jbG9zaW5nTm9kZU9mVHlwZShtX2VuZGluZ1Bvc2l0aW9uLCBp
c01haWxCbG9ja3F1b3RlLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpCiAgICAgICAgIG1fdHlw
aW5nU3R5bGUgPSBtX2RlbGV0ZUludG9CbG9ja3F1b3RlU3R5bGU7CiAgICAgbV9kZWxldGVJbnRv
QmxvY2txdW90ZVN0eWxlID0gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDgxMjc5KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1Nyw3ICszNTcsNyBAQCBzdGF0aWMgYm9vbCBoYXNNYXRjaGluZ1F1b3RlTGV2
ZWwoVmlzaWJsCiB7CiAgICAgUG9zaXRpb24gZXhpc3RpbmcgPSBlbmRPZkV4aXN0aW5nQ29udGVu
dC5kZWVwRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGluc2VydGVkID0gZW5kT2ZJbnNlcnRl
ZENvbnRlbnQuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBib29sIGlzSW5zaWRlTWFpbEJsb2NrcXVv
dGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0ZWQuZGVwcmVjYXRlZE5vZGUoKSk7Cisg
ICAgYm9vbCBpc0luc2lkZU1haWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShpbnNl
cnRlZCwgaXNNYWlsQmxvY2txdW90ZSwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgIHJl
dHVybiBpc0luc2lkZU1haWxCbG9ja3F1b3RlICYmIChudW1FbmNsb3NpbmdNYWlsQmxvY2txdW90
ZXMoZXhpc3RpbmcpID09IG51bUVuY2xvc2luZ01haWxCbG9ja3F1b3RlcyhpbnNlcnRlZCkpOwog
fQogCkBAIC01NTYsNyArNTU2LDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlU3R5bGVTcGFuc0JlZm9y
ZUluc2VydAogCiAgICAgLy8gSGFuZGxpbmcgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGRvaW5nIFBh
c3RlIGFzIFF1b3RhdGlvbiBvciBwYXN0aW5nIGludG8gcXVvdGVkIGNvbnRlbnQgaXMgbW9yZSBj
b21wbGljYXRlZCAoc2VlIGhhbmRsZVN0eWxlU3BhbnMpCiAgICAgLy8gYW5kIGRvZXNuJ3QgcmVj
ZWl2ZSB0aGUgb3B0aW1pemF0aW9uLgotICAgIGlmIChpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9k
ZSh0b3BOb2RlKSB8fCBuZWFyZXN0TWFpbEJsb2NrcXVvdGUodG9wTm9kZSkpCisgICAgaWYgKGlz
TWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKHRvcE5vZGUpIHx8IGVuY2xvc2luZ05vZGVPZlR5cGUo
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHRvcE5vZGUpLCBpc01haWxCbG9ja3F1b3RlLCBD
YW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IEVpdGhlciB0aGVyZSBhcmUgbm8gc3R5bGUgc3BhbnMgaW4gdGhlIGZyYWdtZW50IG9yIGEgV2Vi
S2l0IGNsaWVudCBoYXMgYWRkZWQgY29udGVudCB0byB0aGUgZnJhZ21lbnQKQEAgLTYyMyw3ICs2
MjMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsCiAKICAgICAv
LyBJZiBNYWlsIHdyYXBzIHRoZSBmcmFnbWVudCB3aXRoIGEgUGFzdGUgYXMgUXVvdGF0aW9uIGJs
b2NrcXVvdGUsIG9yIGlmIHlvdSdyZSBwYXN0aW5nIGludG8gYSBxdW90ZWQgcmVnaW9uLAogICAg
IC8vIHN0eWxlcyBmcm9tIGJsb2NrcXVvdGVOb2RlIGFyZSBhbGxvd2VkIHRvIG92ZXJyaWRlIHRo
b3NlIGZyb20gdGhlIHNvdXJjZSBkb2N1bWVudCwgc2VlIDxyZGFyOi8vcHJvYmxlbS80OTMwOTg2
PiBhbmQgPHJkYXI6Ly9wcm9ibGVtLzUwODkzMjc+LgotICAgIE5vZGUqIGJsb2NrcXVvdGVOb2Rl
ID0gaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dCkgPyBjb250ZXh0IDogbmVhcmVz
dE1haWxCbG9ja3F1b3RlKGNvbnRleHQpOworICAgIE5vZGUqIGJsb2NrcXVvdGVOb2RlID0gaXNN
YWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dCkgPyBjb250ZXh0IDogZW5jbG9zaW5nTm9k
ZU9mVHlwZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRleHQpLCBpc01haWxCbG9ja3F1b3RlLCBD
YW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgaWYgKGJsb2NrcXVvdGVOb2RlKSB7CiAgICAg
ICAgIHNvdXJjZURvY3VtZW50U3R5bGUtPnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVP
Zk5vZGUoYmxvY2txdW90ZU5vZGUpOwogICAgICAgICBjb250ZXh0ID0gYmxvY2txdW90ZU5vZGUt
PnBhcmVudE5vZGUoKTsKQEAgLTgxMSw4ICs4MTEsOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpkb0FwcGx5KCkKICAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2so
dmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgCiAg
ICAgUG9zaXRpb24gaW5zZXJ0aW9uUG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgYm9vbCBz
dGFydElzSW5zaWRlTWFpbEJsb2NrcXVvdGUgPSBuZWFyZXN0TWFpbEJsb2NrcXVvdGUoaW5zZXJ0
aW9uUG9zLmRlcHJlY2F0ZWROb2RlKCkpOwotICAgIAorICAgIGJvb2wgc3RhcnRJc0luc2lkZU1h
aWxCbG9ja3F1b3RlID0gZW5jbG9zaW5nTm9kZU9mVHlwZShpbnNlcnRpb25Qb3MsIGlzTWFpbEJs
b2NrcXVvdGUsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKKwogICAgIGlmICgoc2VsZWN0aW9u
U3RhcnRXYXNTdGFydE9mUGFyYWdyYXBoICYmIHNlbGVjdGlvbkVuZFdhc0VuZE9mUGFyYWdyYXBo
ICYmICFzdGFydElzSW5zaWRlTWFpbEJsb2NrcXVvdGUpIHx8CiAgICAgICAgIHN0YXJ0QmxvY2sg
PT0gY3VycmVudFJvb3QgfHwgaXNMaXN0SXRlbShzdGFydEJsb2NrKSB8fCBzZWxlY3Rpb25Jc1Bs
YWluVGV4dCkKICAgICAgICAgbV9wcmV2ZW50TmVzdGluZyA9IGZhbHNlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDgxMjc5KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwOSwy
NyArNjA5LDI5IEBAIE5vZGUqIGVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24KICAg
ICBpZiAocC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgIE5vZGUq
IHJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOworICAgIE5vZGUqIHJvb3QgPSBydWxlID09
IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5ID8gaGlnaGVzdEVkaXRhYmxlUm9vdChwKSA6IDA7
CiAgICAgZm9yIChOb2RlKiBuID0gcC5kZXByZWNhdGVkTm9kZSgpOyBuOyBuID0gbi0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgIC8vIERvbid0IHJldHVybiBhIG5vbi1lZGl0YWJsZSBub2RlIGlm
IHRoZSBpbnB1dCBwb3NpdGlvbiB3YXMgZWRpdGFibGUsIHNpbmNlCiAgICAgICAgIC8vIHRoZSBj
YWxsZXJzIGZyb20gZWRpdGluZyB3aWxsIG5vIGRvdWJ0IHdhbnQgdG8gcGVyZm9ybSBlZGl0aW5n
IGluc2lkZSB0aGUgcmV0dXJuZWQgbm9kZS4KLSAgICAgICAgaWYgKHJvb3QgJiYgIW4tPmlzQ29u
dGVudEVkaXRhYmxlKCkgJiYgcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkKKyAg
ICAgICAgaWYgKHJvb3QgJiYgIW4tPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKCgqbm9kZUlzT2ZUeXBlKShuKSkKKyAgICAgICAgaWYgKG5v
ZGVJc09mVHlwZShuKSkKICAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICBpZiAobiA9PSBy
b290ICYmIHJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpCisgICAgICAgIGlmIChu
ID09IHJvb3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCiAgICAgcmV0dXJu
IDA7CiB9CiAKLU5vZGUqIGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9u
JiBwLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKikpCitOb2RlKiBoaWdoZXN0RW5j
bG9zaW5nTm9kZU9mVHlwZShjb25zdCBQb3NpdGlvbiYgcCwgYm9vbCAoKm5vZGVJc09mVHlwZSko
Y29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkKIHsKICAgICBO
b2RlKiBoaWdoZXN0ID0gMDsKLSAgICBOb2RlKiByb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChw
KTsKKyAgICBOb2RlKiByb290ID0gcnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSA/
IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCkgOiAwOwogICAgIGZvciAoTm9kZSogbiA9IHAuZGVwcmVj
YXRlZE5vZGUoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoKCpub2Rl
SXNPZlR5cGUpKG4pKQorICAgICAgICBpZiAocm9vdCAmJiAhbi0+aXNDb250ZW50RWRpdGFibGUo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobm9kZUlzT2ZUeXBlKG4pKQog
ICAgICAgICAgICAgaGlnaGVzdCA9IG47CiAgICAgICAgIGlmIChuID09IHJvb3QpCiAgICAgICAg
ICAgICBicmVhazsKQEAgLTkzMywxNSArOTM1LDYgQEAgYm9vbCBpc05vZGVSZW5kZXJlZChjb25z
dCBOb2RlICpub2RlKQogICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEU7CiB9CiAKLU5vZGUgKm5lYXJlc3RNYWlsQmxvY2txdW90ZShjb25zdCBOb2Rl
ICpub2RlKQotewotICAgIGZvciAoTm9kZSAqbiA9IGNvbnN0X2Nhc3Q8Tm9kZSAqPihub2RlKTsg
bjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaXNNYWlsQmxvY2txdW90ZShu
KSkKLSAgICAgICAgICAgIHJldHVybiBuOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQogdW5z
aWduZWQgbnVtRW5jbG9zaW5nTWFpbEJsb2NrcXVvdGVzKGNvbnN0IFBvc2l0aW9uJiBwKQogewog
ICAgIHVuc2lnbmVkIG51bSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5oCShyZXZpc2lvbiA4MTI3OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBjbGFzcyBWaXNpYmxlU2VsZWN0
aW9uOwogCiBOb2RlKiBoaWdoZXN0QW5jZXN0b3IoTm9kZSopOwogTm9kZSogaGlnaGVzdEVkaXRh
YmxlUm9vdChjb25zdCBQb3NpdGlvbiYpOwotTm9kZSogaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5
cGUoY29uc3QgUG9zaXRpb24mLCBib29sICgqbm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKikpOwor
Tm9kZSogaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoY29uc3QgUG9zaXRpb24mLCBib29sICgq
bm9kZUlzT2ZUeXBlKShjb25zdCBOb2RlKiksIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9
IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKIE5vZGUqIGxvd2VzdEVkaXRhYmxlQW5jZXN0
b3IoTm9kZSopOyAgIAogCiBOb2RlKiBlbmNsb3NpbmdCbG9jayhOb2RlKiwgRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwpAQCAtNjYsNyAr
NjYsNiBAQCBOb2RlKiBlbmNsb3NpbmdOb2RlV2l0aFRhZyhjb25zdCBQb3NpdGlvCiBOb2RlKiBl
bmNsb3NpbmdOb2RlT2ZUeXBlKGNvbnN0IFBvc2l0aW9uJiwgYm9vbCAoKm5vZGVJc09mVHlwZSko
Y29uc3QgTm9kZSopLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0Vk
aXRpbmdCb3VuZGFyeSk7CiAKIE5vZGUqIHRhYlNwYW5Ob2RlKGNvbnN0IE5vZGUqKTsKLU5vZGUq
IG5lYXJlc3RNYWlsQmxvY2txdW90ZShjb25zdCBOb2RlKik7CiBOb2RlKiBpc0xhc3RQb3NpdGlv
bkJlZm9yZVRhYmxlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogTm9kZSogaXNGaXJzdFBvc2l0
aW9uQWZ0ZXJUYWJsZShjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIApAQCAtMTE2LDExICsxMTUs
MTUgQEAgUG9zaXRpb24gcG9zaXRpb25PdXRzaWRlQ29udGFpbmluZ1NwZWNpYQogCiBpbmxpbmUg
UG9zaXRpb24gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKE5vZGUqIG5vZGUpCiB7CisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKICAgICByZXR1cm4gZWRpdGlu
Z0lnbm9yZXNDb250ZW50KG5vZGUpID8gcG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpIDogZmlyc3RQ
b3NpdGlvbkluTm9kZShub2RlKTsKIH0KIAogaW5saW5lIFBvc2l0aW9uIGxhc3RQb3NpdGlvbklu
T3JBZnRlck5vZGUoTm9kZSogbm9kZSkKIHsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
biBQb3NpdGlvbigpOwogICAgIHJldHVybiBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSkgPyBw
b3NpdGlvbkFmdGVyTm9kZShub2RlKSA6IGxhc3RQb3NpdGlvbkluTm9kZShub2RlKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gODEyNzkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCwxMCAr
NDg4LDggQEAgc3RhdGljIE5vZGUqIGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cAogICAgICAg
ICBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBhbmNlc3RvclRvUmV0YWluU3RydWN0dXJlQW5kQXBw
ZWFyYW5jZShjb21tb25BbmNlc3Rvcik7CiAKICAgICAgICAgLy8gUmV0YWluIHRoZSBNYWlsIHF1
b3RlIGxldmVsIGJ5IGluY2x1ZGluZyBhbGwgYW5jZXN0b3IgbWFpbCBibG9jayBxdW90ZXMuCi0g
ICAgICAgIGZvciAoTm9kZSogYW5jZXN0b3IgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IGFuY2VzdG9y
OyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChp
c01haWxCbG9ja3F1b3RlKGFuY2VzdG9yKSkKLSAgICAgICAgICAgICAgICBzcGVjaWFsQ29tbW9u
QW5jZXN0b3IgPSBhbmNlc3RvcjsKLSAgICAgICAgfQorICAgICAgICBpZiAoTm9kZSogaGlnaGVz
dE1haWxCbG9ja3F1b3RlID0gaGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUoZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKHJhbmdlLT5maXJzdE5vZGUoKSksIGlzTWFpbEJsb2NrcXVvdGUsIENh
bkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSkKKyAgICAgICAgICAgIHNwZWNpYWxDb21tb25BbmNlc3Rv
ciA9IGhpZ2hlc3RNYWlsQmxvY2txdW90ZTsKICAgICB9CiAKICAgICBOb2RlKiBjaGVja0FuY2Vz
dG9yID0gc3BlY2lhbENvbW1vbkFuY2VzdG9yID8gc3BlY2lhbENvbW1vbkFuY2VzdG9yIDogY29t
bW9uQW5jZXN0b3I7CkBAIC02MzQsNyArNjMyLDcgQEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25z
dCBSYW5nZSogcmFuZ2UsIAogICAgICAgICAvLyBTdHlsZXMgdGhhdCBNYWlsIGJsb2NrcXVvdGVz
IGNvbnRyaWJ1dGUgc2hvdWxkIG9ubHkgYmUgcGxhY2VkIG9uIHRoZSBNYWlsIGJsb2NrcXVvdGUs
IHRvIGhlbHAKICAgICAgICAgLy8gdXMgZGlmZmVyZW50aWF0ZSB0aG9zZSBzdHlsZXMgZnJvbSBv
bmVzIHRoYXQgdGhlIHVzZXIgaGFzIGFwcGxpZWQuICBUaGlzIGhlbHBzIHVzCiAgICAgICAgIC8v
IGdldCB0aGUgY29sb3Igb2YgY29udGVudCBwYXN0ZWQgaW50byBibG9ja3F1b3RlcyByaWdodC4K
LSAgICAgICAgc3R5bGUtPnJlbW92ZVN0eWxlQWRkZWRCeU5vZGUobmVhcmVzdE1haWxCbG9ja3F1
b3RlKHBhcmVudE9mTGFzdENsb3NlZCkpOworICAgICAgICBzdHlsZS0+cmVtb3ZlU3R5bGVBZGRl
ZEJ5Tm9kZShlbmNsb3NpbmdOb2RlT2ZUeXBlKGZpcnN0UG9zaXRpb25Jbk5vZGUocGFyZW50T2ZM
YXN0Q2xvc2VkKSwgaXNNYWlsQmxvY2txdW90ZSwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpKTsK
IAogICAgICAgICAvLyBEb2N1bWVudCBkZWZhdWx0IHN0eWxlcyB3aWxsIGJlIGFkZGVkIG9uIGFu
b3RoZXIgd3JhcHBlciBzcGFuLgogICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpKQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gODEyODIpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wMy0xNiAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZXQgcmlkIG9mIG5lYXJlc3RNYWlsQmxvY2txdW90
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY0MzkK
KworICAgICAgICBBZGRlZCBhIHRlc3QgdG8gZW5zdXJlIFdlYktpIGRvZXNuJ3QgY3Jhc2ggd2hl
biBpbnNlcnRpbmcgbmV3bGluZSBpbiBxdW90ZWQgY29udGVudHMsCisgICAgICAgIHdoaWNoIGlz
IGVuY2xvc2VkIGJ5IGEgbm9uLWVkaXRhYmxlIGJsb2NrcXVvdGUuCisKKyAgICAgICAgKiBlZGl0
aW5nL2V4ZWNDb21tYW5kL2JyZWFrLW5vbi1lZGl0YWJsZS1ibG9ja3F1b3RlLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC9icmVhay1ub24tZWRpdGFi
bGUtYmxvY2txdW90ZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0xNiAgRGltaXRyaSBHbGF6a292
ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2Fy
bHNvbi4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvYnJlYWstbm9uLWVk
aXRhYmxlLWJsb2NrcXVvdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvZXhlY0NvbW1hbmQvYnJlYWstbm9uLWVkaXRhYmxlLWJsb2NrcXVvdGUtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC9i
cmVhay1ub24tZWRpdGFibGUtYmxvY2txdW90ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOCBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgV2ViS2l0IHByb3Blcmx5IGluc2VydHMg
bmV3bGluZSBpbiBxdW90ZWQgY29udGVudHMsIHdoaWNoIGlzIGVuY2xvc2VkIGJ5IGEgbm9uLWVk
aXRhYmxlIGJsb2NrcXVvdGUuCit8IDxibG9ja3F1b3RlPgorfCAgIHR5cGU9ImNpdGUiCit8ICAg
ImhlbGxvIgorfCA8YnI+Cit8IDxibG9ja3F1b3RlPgorfCAgIHR5cGU9ImNpdGUiCit8ICAgIiB3
b3JsZCIKSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvYnJlYWstbm9uLWVk
aXRhYmxlLWJsb2NrcXVvdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5n
L2V4ZWNDb21tYW5kL2JyZWFrLW5vbi1lZGl0YWJsZS1ibG9ja3F1b3RlLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL2JyZWFrLW5vbi1lZGl0YWJs
ZS1ibG9ja3F1b3RlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPgorPGRpdiBp
ZD0idGVzdCIgY29udGVudGVkaXRhYmxlPjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiPmhlbGxvIHdv
cmxkPC9ibG9ja3F1b3RlPjwvZGl2PgorPC9ibG9ja3F1b3RlPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9kdW1wLWFzLW1hcmt1cC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCit2YXIg
dGVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0Jyk7Cit3aW5kb3cuZ2V0U2VsZWN0
aW9uKCkuc2V0UG9zaXRpb24odGVzdC5maXJzdENoaWxkLmZpcnN0Q2hpbGQsIDUpOworZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ0luc2VydE5ld2xpbmVJblF1b3RlZENvbnRlbnQnLCBmYWxzZSwgbnVs
bCk7CisKK01hcmt1cC5kZXNjcmlwdGlvbignVGhpcyB0ZXN0IGVuc3VyZXMgV2ViS2l0IHByb3Bl
cmx5IGluc2VydHMgbmV3bGluZSBpbiBxdW90ZWQgY29udGVudHMsIHdoaWNoIGlzIGVuY2xvc2Vk
IGJ5IGEgbm9uLWVkaXRhYmxlIGJsb2NrcXVvdGUuJyk7CitNYXJrdXAuZHVtcCh0ZXN0KTsKKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="78200"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>