<?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>23601</bug_id>
          
          <creation_ts>2009-01-28 13:56:50 -0800</creation_ts>
          <short_desc>DOMSelection.getRangeAt() returns a different range than the selection</short_desc>
          <delta_ts>2009-02-06 17:29:23 -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>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23600</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>jparent</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107393</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-28 13:56:50 -0800</bug_when>
    <thetext>DOMSelection.getRangeAt() returns a different range than the selection

Attached is the same test as bug 23600, except the text node is not empty.  It&apos;s clear that our behavior is wrong here:

comparing point with &lt;text&gt;, offset 0:
FAILED: result = 1 expected 0
range:
startContainer: [object HTMLDivElement]
startOffset: 0
endContainer: [object HTMLDivElement]
endOffset: 0
selection:
anchorNode: [object Text]
anchorOffset: 0
focusNode: [object Text]
focusOffset: 0
asd</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107394</commentid>
    <comment_count>1</comment_count>
      <attachid>27122</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-01-28 13:57:27 -0800</bug_when>
    <thetext>Created attachment 27122
test case (similar to 23600)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107412</commentid>
    <comment_count>2</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-01-28 14:53:07 -0800</bug_when>
    <thetext>I think that this general issue is filed elsewhere let me see if I can find it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107417</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-01-28 15:11:50 -0800</bug_when>
    <thetext>Related but not the same bug:

https://bugs.webkit.org/show_bug.cgi?id=6350</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108502</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 13:58:30 -0800</bug_when>
    <thetext>Sigh.  Well this is part of the problem:
http://trac.webkit.org/browser/trunk/WebCore/editing/Selection.cpp#L141

Why oh why would toRange chose to modify the Selection instead of just returning the range?

It seems like that modification code is just in the wrong place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108504</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 14:00:19 -0800</bug_when>
    <thetext>It seems the proper way to fix this is to write a version of toRange() which just returns the raw range (w/o modification) and then check all the callers to toRange() to see which behavior they want, and then maybe find a better name for the existing toRange logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108509</commentid>
    <comment_count>6</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-05 14:20:04 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; It seems the proper way to fix this is to write a version of toRange() which
&gt; just returns the raw range (w/o modification) and then check all the callers to
&gt; toRange() to see which behavior they want, and then maybe find a better name
&gt; for the existing toRange logic.

Notice also that selection endpoints may change at creation time, inside validate().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108515</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-05 14:30:41 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Why oh why would toRange chose to modify the Selection instead of just
&gt; returning the range?

I think the reason is that Selection positions may be invalid in DOM sense, so calling rangeCompliantEquivalent() is necessary. As Justin says, the validate() call during selection creation is the real culprit.

See also: bug 15256 and the many related ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108518</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 14:36:23 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; Why oh why would toRange chose to modify the Selection instead of just
&gt; &gt; returning the range?
&gt; 
&gt; I think the reason is that Selection positions may be invalid in DOM sense, so
&gt; calling rangeCompliantEquivalent() is necessary. As Justin says, the validate()
&gt; call during selection creation is the real culprit.
&gt; 
&gt; See also: bug 15256 and the many related ones.


The real culprit for this bug is definitely toRange().  Looking at the test output, the selection is as expected, when it&apos;s converted to a range, since it&apos;s a &quot;caret&quot; it&apos;s pushed out of the empty text node by explicit code in toRange().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108527</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-05 15:03:54 -0800</bug_when>
    <thetext>Sorry, I was looking at another bug&apos;s test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108559</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 17:55:00 -0800</bug_when>
    <thetext>I have a local fix, will post shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108560</commentid>
    <comment_count>11</comment_count>
      <attachid>27372</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 18:00:27 -0800</bug_when>
    <thetext>Created attachment 27372
Slightly clearer diff, and added documentation of ASSERTS ojan and I kept hitting in this code.

 WebCore/ChangeLog                     |   36 ++++++++++++++++++++++
 WebCore/editing/Editor.cpp            |   16 +++++-----
 WebCore/editing/Selection.cpp         |   52 +++++++++++++++++++-------------
 WebCore/editing/Selection.h           |   36 ++++++++++++----------
 WebCore/editing/SelectionController.h |    2 +-
 WebCore/editing/TypingCommand.cpp     |   16 +++++-----
 WebCore/page/Frame.cpp                |   16 ++++------
 7 files changed, 110 insertions(+), 64 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108561</commentid>
    <comment_count>12</comment_count>
      <attachid>27373</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 18:00:30 -0800</bug_when>
    <thetext>Created attachment 27373
Rename toRange to toNormalizedRange and add new firstRange which returns an unmodified range

 LayoutTests/ChangeLog                              |   13 ++++
 LayoutTests/fast/dom/Selection/getRangeAt.html     |   13 ++++
 .../fast/dom/Selection/resources/TEMPLATE.html     |   13 ++++
 .../fast/dom/Selection/resources/getRangeAt.js     |   33 +++++++++
 WebCore/ChangeLog                                  |   77 ++++++++++++++++++++
 WebCore/WebCore.base.exp                           |    2 +-
 WebCore/dom/InputElement.cpp                       |    2 +-
 WebCore/editing/DeleteButtonController.cpp         |    2 +-
 WebCore/editing/Editor.cpp                         |   24 +++---
 WebCore/editing/EditorCommand.cpp                  |    8 +-
 WebCore/editing/RemoveFormatCommand.cpp            |    2 +-
 WebCore/editing/ReplaceSelectionCommand.cpp        |    4 +-
 WebCore/editing/Selection.cpp                      |   25 +++----
 WebCore/editing/Selection.h                        |    8 ++-
 WebCore/editing/SelectionController.h              |    2 +-
 WebCore/editing/TypingCommand.cpp                  |    4 +-
 WebCore/editing/markup.cpp                         |    2 +-
 WebCore/loader/archive/cf/LegacyWebArchive.cpp     |    2 +-
 WebCore/page/AccessibilityRenderObject.cpp         |    2 +-
 WebCore/page/ContextMenuController.cpp             |    4 +-
 WebCore/page/DOMSelection.cpp                      |   13 ++--
 WebCore/page/DragController.cpp                    |    8 +-
 WebCore/page/EventHandler.cpp                      |    2 +-
 WebCore/page/Frame.cpp                             |   16 ++--
 WebCore/platform/ContextMenu.cpp                   |    2 +-
 WebKit/mac/ChangeLog                               |   22 ++++++
 WebKit/mac/WebView/WebFrame.mm                     |    8 +-
 WebKit/mac/WebView/WebHTMLView.mm                  |    6 +-
 WebKit/mac/WebView/WebView.mm                      |    4 +-
 29 files changed, 250 insertions(+), 73 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108562</commentid>
    <comment_count>13</comment_count>
      <attachid>27372</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 18:00:58 -0800</bug_when>
    <thetext>Comment on attachment 27372
Slightly clearer diff, and added documentation of ASSERTS ojan and I kept hitting in this code.

Ooops attached the wrong patch. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108564</commentid>
    <comment_count>14</comment_count>
      <attachid>27373</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-05 18:41:37 -0800</bug_when>
    <thetext>Comment on attachment 27373
Rename toRange to toNormalizedRange and add new firstRange which returns an unmodified range

Looks great although simply &quot;normalizedRange&quot; might be better.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108652</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-06 10:27:08 -0800</bug_when>
    <thetext>Ap also reviewed and suggested that I add rangeCompliantEquivalent calls to firstRange().  I&apos;m not sure that adding rangeCompliantEquivalent is correct in all cases (it seems to avoid having positions in tables!?) but it will fix any invalid (img, 1) positions (which I don&apos;t know how to generate), which sounds like a good thing.

I&apos;m going to leave it as toNormalizedRange() because I feel it better implies that the function does work. :)  firstRange doesn&apos;t really need to do work, if we stored start/end as a Range.  I&apos;d like to discourage people from calling toNormalizedRange,cause I don&apos;t think it&apos;s what most callers actually need/want.  I think the logic is misplaced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108654</commentid>
    <comment_count>16</comment_count>
      <attachid>27402</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-06 10:29:26 -0800</bug_when>
    <thetext>Created attachment 27402
With ap&apos;s suggested addition of rangeCompliantEquivalent and some documentation of that function.

 WebCore/editing/Selection.cpp   |    4 +++-
 WebCore/editing/htmlediting.cpp |   15 ++++++++++-----
 2 files changed, 13 insertions(+), 6 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108761</commentid>
    <comment_count>17</comment_count>
      <attachid>27402</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-06 16:21:13 -0800</bug_when>
    <thetext>Comment on attachment 27402
With ap&apos;s suggested addition of rangeCompliantEquivalent and some documentation of that function.

Going to land the reviewed patch and then start removing this code entirely by starting to separate the concepts of Selection and VisibleSelection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108785</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-06 17:29:23 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	A	LayoutTests/fast/dom/Selection/getRangeAt.html
	A	LayoutTests/fast/dom/Selection/resources/TEMPLATE.html
	A	LayoutTests/fast/dom/Selection/resources/getRangeAt.js
	M	WebCore/ChangeLog
	M	WebCore/WebCore.base.exp
	M	WebCore/dom/InputElement.cpp
	M	WebCore/editing/DeleteButtonController.cpp
	M	WebCore/editing/Editor.cpp
	M	WebCore/editing/EditorCommand.cpp
	M	WebCore/editing/RemoveFormatCommand.cpp
	M	WebCore/editing/ReplaceSelectionCommand.cpp
	M	WebCore/editing/Selection.cpp
	M	WebCore/editing/Selection.h
	M	WebCore/editing/SelectionController.h
	M	WebCore/editing/TypingCommand.cpp
	M	WebCore/editing/htmlediting.cpp
	M	WebCore/editing/markup.cpp
	M	WebCore/loader/archive/cf/LegacyWebArchive.cpp
	M	WebCore/page/AccessibilityRenderObject.cpp
	M	WebCore/page/ContextMenuController.cpp
	M	WebCore/page/DOMSelection.cpp
	M	WebCore/page/DragController.cpp
	M	WebCore/page/EventHandler.cpp
	M	WebCore/page/Frame.cpp
	M	WebCore/platform/ContextMenu.cpp
	M	WebKit/mac/ChangeLog
	M	WebKit/mac/WebView/WebFrame.mm
	M	WebKit/mac/WebView/WebHTMLView.mm
	M	WebKit/mac/WebView/WebView.mm
Committed r40746


Yay!  Of course this code is about to get re-written...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>27122</attachid>
            <date>2009-01-28 13:57:27 -0800</date>
            <delta_ts>2009-01-28 13:57:27 -0800</delta_ts>
            <desc>test case (similar to 23600)</desc>
            <filename>testrange.html</filename>
            <type>text/html</type>
            <size>1093</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5PgogICAgPGRpdiBpZD0nbG9nJz48L2Rpdj4KPHNjcmlwdD4KZnVuY3Rpb24g
ZGVidWcoc3RyKSB7CiAgICB2YXIgbG9nZ2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xv
ZycpOwogICAgbG9nZ2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cikp
OwogICAgbG9nZ2VyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOwp9
CnZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChkaXYpOwp2YXIgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
YXNkIik7CmRpdi5hcHBlbmRDaGlsZCh0ZXh0Tm9kZSk7Cgp2YXIgc2VsID0gd2luZG93LmdldFNl
bGVjdGlvbigpOwpzZWwuY29sbGFwc2UodGV4dE5vZGUsIDApOwp2YXIgcmFuZ2UgPSBzZWwuZ2V0
UmFuZ2VBdCgwKTsKCmRlYnVnKCJjb21wYXJpbmcgcG9pbnQgd2l0aCA8dGV4dD4sIG9mZnNldCAw
OiIpOwp2YXIgcmVzdWx0ID0gcmFuZ2UuY29tcGFyZVBvaW50KHRleHROb2RlLCAwKTsKaWYgKHJl
c3VsdCA9PSAwKSB7CiAgICBkZWJ1ZygiUEFTU0VEOiByZXN1bHQgPSAwIik7Cn0gZWxzZSB7CiAg
ICBkZWJ1ZygiRkFJTEVEOiByZXN1bHQgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCAwIik7Cn0K
CmRlYnVnKCJyYW5nZToiKTsKZGVidWcoInN0YXJ0Q29udGFpbmVyOiAiICsgcmFuZ2Uuc3RhcnRD
b250YWluZXIpOwpkZWJ1Zygic3RhcnRPZmZzZXQ6ICIgKyByYW5nZS5zdGFydE9mZnNldCk7CmRl
YnVnKCJlbmRDb250YWluZXI6ICIgKyByYW5nZS5lbmRDb250YWluZXIpOwpkZWJ1ZygiZW5kT2Zm
c2V0OiAiICsgcmFuZ2UuZW5kT2Zmc2V0KTsKCmRlYnVnKCJzZWxlY3Rpb246Iik7CmRlYnVnKCJh
bmNob3JOb2RlOiAiICsgc2VsLmFuY2hvck5vZGUpOwpkZWJ1ZygiYW5jaG9yT2Zmc2V0OiAiICsg
c2VsLmFuY2hvck9mZnNldCk7CmRlYnVnKCJmb2N1c05vZGU6ICIgKyBzZWwuZm9jdXNOb2RlKTsK
ZGVidWcoImZvY3VzT2Zmc2V0OiAiICsgc2VsLmZvY3VzT2Zmc2V0KTsKPC9zY3JpcHQ+CjwvYm9k
eT4KPC9odG1sPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27372</attachid>
            <date>2009-02-05 18:00:27 -0800</date>
            <delta_ts>2009-02-05 18:00:58 -0800</delta_ts>
            <desc>Slightly clearer diff, and added documentation of ASSERTS ojan and I kept hitting in this code.</desc>
            <filename>Slightly-clearer-diff-and-added-documentation-of-ASSERTS-ojan-and-I-kept-hitting-in-this-code..patch</filename>
            <type>text/plain</type>
            <size>15191</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YjEzMTRhODg1M2UyYTMwNDZlYTQzMDJkZWE5YmE0YjNhNjRjYzYxMgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYzA1ZjI2Li43Y2IzZTE0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM5IEBACisyMDA5LTAyLTA1ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNaW5v
ciByZWZhY3RvcmluZyBhbmQgY2xlYW51cCB0byBTZWxlY3Rpb24gY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzQKKworICAgICAgICBObyBm
dW5jdGlvbmFsIGNoYW5nZXMsIHRodXMgbm8gdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OlNlbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvTWF0Y2hH
cmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246Om5vcm1hbGl6ZUJhc2VB
bmRFeHRlbnRBbmRTZXRTdGFydEFuZEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246
OnVwZGF0ZVNlbGVjdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjp2YWxp
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OnNldFdpdGhvdXRWYWxpZGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENy
b3NzaW5nRWRpdGJsZUJvdW5kYXJpZXMpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246Oik6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb246OnNlbGVjdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjpleHRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjppc05vbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uOjppc0NhcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6
aXNSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OmlzQ2FyZXRPclJhbmdlKToK
KyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdGlvblR5cGUpOgorICAgICAgICAqIGVkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZXZlYWxTZWxlY3Rpb24pOgorCiAyMDA5LTAyLTA1ICBBbmRlcnMg
Q2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2V2
aW4gRGVja2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAyYWFiNDU0Li5lMTk1MjhjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcApAQCAtNzEwLDE0ICs3MTAsMTQgQEAgYm9vbCBFZGl0b3I6OmRpc3BhdGNoQ1BQRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIENsaXBib2FyZEFjY2Vzc1BvbGkKIAogdm9p
ZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rp
b24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
dGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOT05FOgorICAgIHN3aXRjaCAobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIFNlbGVj
dGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNBUkVUOgorICAgICAgICBjYXNlIFNl
bGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246CiAgICAgICAgICAgICBtX2ZyYW1lLT5jb21wdXRlQW5k
U2V0VHlwaW5nU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246
OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYg
c3R5bGUpCiAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpj
cmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNzMxLDEyICs3MzEsMTIgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEFw
cGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFJhbmdlKiByYW5nZSkKICAgICAK
IHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgc3dpdGNoIChtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tk9ORToKKyAg
ICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb25UeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICAgICAgLy8gZG8gbm90aGlu
ZwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDoKLSAg
ICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgorICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q2Fy
ZXRTZWxlY3Rpb246CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIHN0eWxlKQogICAgICAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3Vt
ZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0eWxlQ29tbWFuZDo6Rm9yY2VCbG9j
a1Byb3BlcnRpZXMpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmNwcAppbmRl
eCA0ZmIzYTU0Li4xNWZkMWE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
LmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmNwcApAQCAtNDMsNyArNDMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBTZWxlY3Rpb246OlNlbGVjdGlvbigpCiAgICAgOiBtX2Fm
ZmluaXR5KERPV05TVFJFQU0pCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFy
aXR5KQotICAgICwgbV9zdGF0ZShOT05FKQorICAgICwgbV9zZWxlY3Rpb25UeXBlKE5vU2VsZWN0
aW9uKQogICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogewogfQpAQCAtMjM4LDcgKzIzOCw3IEBA
IHZvaWQgU2VsZWN0aW9uOjphcHBlbmRUcmFpbGluZ1doaXRlc3BhY2UoKQogICAgIH0KIH0KIAot
dm9pZCBTZWxlY3Rpb246OnZhbGlkYXRlKCkKK3ZvaWQgU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0
ZW50VG9EZWVwRXF1aXZpbGFudHMoKQogewogICAgIC8vIE1vdmUgdGhlIHNlbGVjdGlvbiB0byBy
ZW5kZXJlZCBwb3NpdGlvbnMsIGlmIHBvc3NpYmxlLgogICAgIGJvb2wgYmFzZUFuZEV4dGVudEVx
dWFsID0gbV9iYXNlID09IG1fZXh0ZW50OwpAQCAtMjU5LDEwICsyNTksMTIgQEAgdm9pZCBTZWxl
Y3Rpb246OnZhbGlkYXRlKCkKICAgICB9IGVsc2UgaWYgKG1fZXh0ZW50LmlzTnVsbCgpKSB7CiAg
ICAgICAgIG1fZXh0ZW50ID0gbV9iYXNlOwogICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsK
LSAgICB9IGVsc2UgeworICAgIH0gZWxzZQogICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gY29tcGFy
ZVBvc2l0aW9ucyhtX2Jhc2UsIG1fZXh0ZW50KSA8PSAwOwotICAgIH0KK30KIAordm9pZCBTZWxl
Y3Rpb246OnNldFN0YXJ0QW5kRW5kRnJvbUJhc2VBbmRFeHRlbnRSZXNwZWN0aW5nR3JhbnVsYXJp
dHkoKQorewogICAgIGlmIChtX2Jhc2VJc0ZpcnN0KSB7CiAgICAgICAgIG1fc3RhcnQgPSBtX2Jh
c2U7CiAgICAgICAgIG1fZW5kID0gbV9leHRlbnQ7CkBAIC0yNzEsNyArMjczLDYgQEAgdm9pZCBT
ZWxlY3Rpb246OnZhbGlkYXRlKCkKICAgICAgICAgbV9lbmQgPSBtX2Jhc2U7CiAgICAgfQogCi0g
ICAgLy8gRXhwYW5kIHRoZSBzZWxlY3Rpb24gaWYgcmVxdWVzdGVkLgogICAgIHN3aXRjaCAobV9n
cmFudWxhcml0eSkgewogICAgICAgICBjYXNlIENoYXJhY3RlckdyYW51bGFyaXR5OgogICAgICAg
ICAgICAgLy8gRG9uJ3QgZG8gYW55IGV4cGFuc2lvbi4KQEAgLTM4NSwyNiArMzg2LDMxIEBAIHZv
aWQgU2VsZWN0aW9uOjp2YWxpZGF0ZSgpCiAgICAgICAgIG1fc3RhcnQgPSBtX2VuZDsKICAgICBp
ZiAobV9lbmQuaXNOdWxsKCkpCiAgICAgICAgIG1fZW5kID0gbV9zdGFydDsKLSAgICAKLSAgICBh
ZGp1c3RGb3JFZGl0YWJsZUNvbnRlbnQoKTsKK30KIAotICAgIC8vIGFkanVzdCB0aGUgc3RhdGUK
K3ZvaWQgU2VsZWN0aW9uOjp1cGRhdGVTZWxlY3Rpb25UeXBlKCkKK3sKICAgICBpZiAobV9zdGFy
dC5pc051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9lbmQuaXNOdWxsKCkpOwotICAgICAgICBt
X3N0YXRlID0gTk9ORTsKLQotICAgICAgICAvLyBlbmZvcmNlIGRvd25zdHJlYW0gYWZmaW5pdHkg
aWYgbm90IGNhcmV0LCBhcyBhZmZpbml0eSBvbmx5Ci0gICAgICAgIC8vIG1ha2VzIHNlbnNlIGZv
ciBjYXJldAotICAgICAgICBtX2FmZmluaXR5ID0gRE9XTlNUUkVBTTsKKyAgICAgICAgbV9zZWxl
Y3Rpb25UeXBlID0gTm9TZWxlY3Rpb247CiAgICAgfSBlbHNlIGlmIChtX3N0YXJ0ID09IG1fZW5k
IHx8IG1fc3RhcnQudXBzdHJlYW0oKSA9PSBtX2VuZC51cHN0cmVhbSgpKSB7Ci0gICAgICAgIG1f
c3RhdGUgPSBDQVJFVDsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3N0YXRlID0gUkFOR0U7Cisg
ICAgICAgIG1fc2VsZWN0aW9uVHlwZSA9IENhcmV0U2VsZWN0aW9uOworICAgIH0gZWxzZQorICAg
ICAgICBtX3NlbGVjdGlvblR5cGUgPSBSYW5nZVNlbGVjdGlvbjsKIAotICAgICAgICAvLyBlbmZv
cmNlIGRvd25zdHJlYW0gYWZmaW5pdHkgaWYgbm90IGNhcmV0LCBhcyBhZmZpbml0eSBvbmx5Ci0g
ICAgICAgIC8vIG1ha2VzIHNlbnNlIGZvciBjYXJldAorICAgIC8vIEFmZmluaXR5IG9ubHkgbWFr
ZXMgc2Vuc2UgZm9yIGEgY2FyZXQKKyAgICBpZiAoIWlzQ2FyZXQoKSkKICAgICAgICAgbV9hZmZp
bml0eSA9IERPV05TVFJFQU07Cit9CisKK3ZvaWQgU2VsZWN0aW9uOjp2YWxpZGF0ZSgpCit7Cisg
ICAgc2V0QmFzZUFuZEV4dGVudFRvRGVlcEVxdWl2aWxhbnRzKCk7CisgICAgc2V0U3RhcnRBbmRF
bmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3RpbmdHcmFudWxhcml0eSgpOworICAgIGFkanVzdFNl
bGVjdGlvblRvQXZvaWRDcm9zc2luZ0VkaXRpbmdCb3VuZGFyaWVzKCk7CisgICAgdXBkYXRlU2Vs
ZWN0aW9uVHlwZSgpOwogCisgICAgaWYgKHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNlbGVjdGlv
bikgewogICAgICAgICAvLyAiQ29uc3RyYWluIiB0aGUgc2VsZWN0aW9uIHRvIGJlIHRoZSBzbWFs
bGVzdCBlcXVpdmFsZW50IHJhbmdlIG9mIG5vZGVzLgogICAgICAgICAvLyBUaGlzIGlzIGEgc29t
ZXdoYXQgYXJiaXRyYXJ5IGNob2ljZSwgYnV0IGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBpdCBpcwog
ICAgICAgICAvLyB1c2VmdWwgdG8gbWFrZSB0byBtYWtlIHRoZSBzZWxlY3Rpb24gImNhbm9uaWNh
bCIgKGlmIG9ubHkgZm9yCkBAIC00NDEsMTAgKzQ0NywxMCBAQCB2b2lkIFNlbGVjdGlvbjo6c2V0
V2l0aG91dFZhbGlkYXRpb24oY29uc3QgUG9zaXRpb24mIGJhc2UsIGNvbnN0IFBvc2l0aW9uJiBl
eHRlbgogICAgICAgICBtX3N0YXJ0ID0gZXh0ZW50OwogICAgICAgICBtX2VuZCA9IGJhc2U7CiAg
ICAgfQotICAgIG1fc3RhdGUgPSBSQU5HRTsKKyAgICBtX3NlbGVjdGlvblR5cGUgPSBSYW5nZVNl
bGVjdGlvbjsKIH0KIAotdm9pZCBTZWxlY3Rpb246OmFkanVzdEZvckVkaXRhYmxlQ29udGVudCgp
Cit2b2lkIFNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENyb3NzaW5nRWRpdGluZ0Jv
dW5kYXJpZXMoKQogewogICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkgfHwgbV9zdGFydC5pc051bGwo
KSB8fCBtX2VuZC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTA1LDggKzUxMSwxMCBA
QCB2b2lkIFNlbGVjdGlvbjo6YWRqdXN0Rm9yRWRpdGFibGVDb250ZW50KCkKICAgICAgICAgICAg
ICAgICAgICAgcCA9IFBvc2l0aW9uKHNoYWRvd0FuY2VzdG9yLCBtYXhEZWVwT2Zmc2V0KHNoYWRv
d0FuY2VzdG9yKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24g
cHJldmlvdXMocCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHByZXZpb3VzLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiBjcm9zc2VzIGFuIEVk
aXRpbmcgYm91bmRhcnkuICBUaGlzIGlzIGEKKyAgICAgICAgICAgICAgICAvLyBwcm9ncmFtbWVy
IGVycm9yIGluIHRoZSBlZGl0aW5nIGNvZGUuICBIYXBweSBkZWJ1Z2dpbmchCiAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgbV9iYXNlID0gUG9z
aXRpb24oKTsKICAgICAgICAgICAgICAgICBtX2V4dGVudCA9IFBvc2l0aW9uKCk7CkBAIC01MzQs
NiArNTQyLDggQEAgdm9pZCBTZWxlY3Rpb246OmFkanVzdEZvckVkaXRhYmxlQ29udGVudCgpCiAg
ICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dChwKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKG5leHQuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgc2VsZWN0
aW9uIGNyb3NzZXMgYW4gRWRpdGluZyBib3VuZGFyeS4gIFRoaXMgaXMgYQorICAgICAgICAgICAg
ICAgIC8vIHByb2dyYW1tZXIgZXJyb3IgaW4gdGhlIGVkaXRpbmcgY29kZS4gIEhhcHB5IGRlYnVn
Z2luZyEKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAg
ICAgICBtX2Jhc2UgPSBQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgIG1fZXh0ZW50ID0gUG9z
aXRpb24oKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb24uaCBiL1dlYkNv
cmUvZWRpdGluZy9TZWxlY3Rpb24uaAppbmRleCA1ZTIxNzAxLi4wODliNjFjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbi5oCkBAIC0zNyw4ICszNyw3IEBAIGNvbnN0IEVBZmZpbml0eSBTRUxfREVGQVVMVF9BRkZJ
TklUWSA9IERPV05TVFJFQU07CiAKIGNsYXNzIFNlbGVjdGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51
bSBFU3RhdGUgeyBOT05FLCBDQVJFVCwgUkFOR0UgfTsKLSAgICBlbnVtIEVEaXJlY3Rpb24geyBG
T1JXQVJELCBCQUNLV0FSRCwgUklHSFQsIExFRlQgfTsKKyAgICBlbnVtIFNlbGVjdGlvblR5cGUg
eyBOb1NlbGVjdGlvbiwgQ2FyZXRTZWxlY3Rpb24sIFJhbmdlU2VsZWN0aW9uIH07CiAKICAgICBT
ZWxlY3Rpb24oKTsKIApAQCAtNTIsNyArNTEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU2Vs
ZWN0aW9uIHNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShOb2RlKik7CiAKLSAgICBFU3RhdGUg
c3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgU2VsZWN0aW9uVHlwZSBzZWxl
Y3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25UeXBlOyB9CiAKICAgICB2b2lk
IHNldEFmZmluaXR5KEVBZmZpbml0eSBhZmZpbml0eSkgeyBtX2FmZmluaXR5ID0gYWZmaW5pdHk7
IH0KICAgICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2FmZmluaXR5OyB9
CkBAIC02MywxNyArNjIsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOwogICAgIAogICAgIFBvc2l0aW9uIGJhc2UoKSBjb25zdCB7IHJldHVy
biBtX2Jhc2U7IH0KLSAgICBQb3NpdGlvbiBleHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2V4dGVu
dDsgfSAgICAKKyAgICBQb3NpdGlvbiBleHRlbnQoKSBjb25zdCB7IHJldHVybiBtX2V4dGVudDsg
fQogICAgIFBvc2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQogICAgIFBv
c2l0aW9uIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CiAgICAgCiAgICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVTdGFydCgpIGNvbnN0IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX3N0
YXJ0LCBpc1JhbmdlKCkgPyBET1dOU1RSRUFNIDogYWZmaW5pdHkoKSk7IH0KICAgICBWaXNpYmxl
UG9zaXRpb24gdmlzaWJsZUVuZCgpIGNvbnN0IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvbihtX2Vu
ZCwgaXNSYW5nZSgpID8gVVBTVFJFQU0gOiBhZmZpbml0eSgpKTsgfQogCi0gICAgYm9vbCBpc05v
bmUoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IE5PTkU7IH0KLSAgICBib29sIGlzQ2FyZXQo
KSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IENBUkVUOyB9Ci0gICAgYm9vbCBpc1JhbmdlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSBSQU5HRTsgfQotICAgIGJvb2wgaXNDYXJldE9yUmFu
Z2UoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpICE9IE5PTkU7IH0KKyAgICBib29sIGlzTm9uZSgp
IGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUoKSA9PSBOb1NlbGVjdGlvbjsgfQorICAgIGJv
b2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUoKSA9PSBDYXJldFNlbGVj
dGlvbjsgfQorICAgIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUo
KSA9PSBSYW5nZVNlbGVjdGlvbjsgfQorICAgIGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7
IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgIT0gTm9TZWxlY3Rpb247IH0KIAogICAgIGJvb2wgaXNC
YXNlRmlyc3QoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VJc0ZpcnN0OyB9CiAKQEAgLTEwMCwxOCAr
OTksMjMgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgdmFsaWRhdGUoKTsKLSAgICB2
b2lkIGFkanVzdEZvckVkaXRhYmxlQ29udGVudCgpOwogCi0gICAgUG9zaXRpb24gbV9iYXNlOyAg
ICAgICAgICAgICAgICAgIC8vIGJhc2UgcG9zaXRpb24gZm9yIHRoZSBzZWxlY3Rpb24KLSAgICBQ
b3NpdGlvbiBtX2V4dGVudDsgICAgICAgICAgICAgICAgLy8gZXh0ZW50IHBvc2l0aW9uIGZvciB0
aGUgc2VsZWN0aW9uCi0gICAgUG9zaXRpb24gbV9zdGFydDsgICAgICAgICAgICAgICAgIC8vIHN0
YXJ0IHBvc2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCi0gICAgUG9zaXRpb24gbV9lbmQ7ICAgICAg
ICAgICAgICAgICAgIC8vIGVuZCBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlvbgorICAgIC8vIFN1
cHBvcnQgbWV0aG9kcyBmb3IgdmFsaWRhdGUoKQorICAgIHZvaWQgc2V0QmFzZUFuZEV4dGVudFRv
RGVlcEVxdWl2aWxhbnRzKCk7CisgICAgdm9pZCBzZXRTdGFydEFuZEVuZEZyb21CYXNlQW5kRXh0
ZW50UmVzcGVjdGluZ0dyYW51bGFyaXR5KCk7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25Ub0F2
b2lkQ3Jvc3NpbmdFZGl0aW5nQm91bmRhcmllcygpOworICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9u
VHlwZSgpOwogCi0gICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7ICAgICAgICAgICAgIC8vIHRoZSB1
cHN0cmVhbS9kb3duc3RyZWFtIGFmZmluaXR5IG9mIHRoZSBjYXJldAotICAgIFRleHRHcmFudWxh
cml0eSBtX2dyYW51bGFyaXR5OyAgIC8vIGdyYW51bGFyaXR5IG9mIHN0YXJ0L2VuZCBzZWxlY3Rp
b24KKyAgICBQb3NpdGlvbiBtX2Jhc2U7ICAgLy8gV2hlcmUgdGhlIGZpcnN0IGNsaWNrIGhhcHBl
bmVkCisgICAgUG9zaXRpb24gbV9leHRlbnQ7IC8vIFdoZXJlIHRoZSBlbmQgY2xpY2sgaGFwcGVu
ZWQKKyAgICBQb3NpdGlvbiBtX3N0YXJ0OyAgLy8gTGVmdG1vc3QgcG9zaXRpb24gd2hlbiBleHBh
bmRlZCB0byByZXNwZWN0IGdyYW51bGFyaXR5CisgICAgUG9zaXRpb24gbV9lbmQ7ICAgIC8vIFJp
Z2h0bW9zdCBwb3NpdGlvbiB3aGVuIGV4cGFuZGVkIHRvIHJlc3BlY3QgZ3JhbnVsYXJpdHkKKwor
ICAgIEVBZmZpbml0eSBtX2FmZmluaXR5OyAgICAgICAgICAgLy8gdGhlIHVwc3RyZWFtL2Rvd25z
dHJlYW0gYWZmaW5pdHkgb2YgdGhlIGNhcmV0CisgICAgVGV4dEdyYW51bGFyaXR5IG1fZ3JhbnVs
YXJpdHk7ICAvLyBncmFudWxhcml0eSBvZiBzdGFydC9lbmQgc2VsZWN0aW9uCiAKICAgICAvLyB0
aGVzZSBhcmUgY2FjaGVkLCBjYW4gYmUgcmVjYWxjdWxhdGVkIGJ5IHZhbGlkYXRlKCkKLSAgICBF
U3RhdGUgbV9zdGF0ZTsgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRlIG9mIHRoZSBzZWxl
Y3Rpb24KKyAgICBTZWxlY3Rpb25UeXBlIG1fc2VsZWN0aW9uVHlwZTsgICAgLy8gTm9uZSwgQ2Fy
ZXQsIFJhbmdlCiAgICAgYm9vbCBtX2Jhc2VJc0ZpcnN0OyAgICAgICAgICAgICAgIC8vIHRydWUg
aWYgYmFzZSBpcyBiZWZvcmUgdGhlIGV4dGVudAogfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmgKaW5kZXggZmU1ZTkwZC4uYTkzZGNlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0
aW9uQ29udHJvbGxlci5oCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgSW50UG9pbnQmKTsKIAotICAgIFNlbGVjdGlvbjo6RVN0YXRlIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWwuc3RhdGUoKTsgfQorICAgIFNlbGVjdGlvbjo6U2VsZWN0aW9u
VHlwZSBzZWxlY3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuc2VsZWN0aW9uVHlwZSgp
OyB9CiAKICAgICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7IHJldHVybiBtX3NlbC5hZmZp
bml0eSgpOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cCBiL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCA0MTQ2ODBmLi43MmVm
ZDg3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIv
V2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0zNzMsMTIgKzM3MywxMiBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LCBib29sIGtpbGxSaW5nKQogICAgIFNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsK
ICAgICBTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwogICAgIAotICAgIHN3aXRjaCAoZW5k
aW5nU2VsZWN0aW9uKCkuc3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UkFOR0U6
CisgICAgc3dpdGNoIChlbmRpbmdTZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICAgICAgc2VsZWN0aW9u
VG9EZWxldGUgPSBlbmRpbmdTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIHNlbGVjdGlvbkFmdGVy
VW5kbyA9IHNlbGVjdGlvblRvRGVsZXRlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgU2VsZWN0aW9uOjpDQVJFVDogeworICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q2FyZXRTZWxl
Y3Rpb246IHsKICAgICAgICAgICAgIGlmIChicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQ
YXJhZ3JhcGgoKSkgewogICAgICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZCgp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQzNyw3ICs0MzcsNyBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBi
b29sIGtpbGxSaW5nKQogICAgICAgICAgICAgICAgIHNlbGVjdGlvbkFmdGVyVW5kby5zZXRXaXRo
b3V0VmFsaWRhdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb25Ub0RlbGV0
ZS5leHRlbnQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IFNlbGVjdGlvbjo6Tk9ORToKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgog
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICB9CkBAIC00NjEsMTIgKzQ2MSwxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxl
dGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraQogICAgIFNl
bGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJV
bmRvOwogCi0gICAgc3dpdGNoIChlbmRpbmdTZWxlY3Rpb24oKS5zdGF0ZSgpKSB7Ci0gICAgICAg
IGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKKyAgICBzd2l0Y2ggKGVuZGluZ1NlbGVjdGlvbigpLnNl
bGVjdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb246
CiAgICAgICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IGVuZGluZ1NlbGVjdGlvbigpOwogICAg
ICAgICAgICAgc2VsZWN0aW9uQWZ0ZXJVbmRvID0gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNBUkVUOiB7CisgICAgICAgIGNh
c2UgU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjogewogICAgICAgICAgICAgbV9zbWFydERlbGV0
ZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAvLyBIYW5kbGUgZGVsZXRlIGF0IGJlZ2lubmluZy1v
Zi1ibG9jayBjYXNlLgpAQCAtNTE1LDcgKzUxNSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtp
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIFNlbGVjdGlvbjo6Tk9ORToKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok5vU2VsZWN0aW9u
OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvV2ViQ29yZS9wYWdl
L0ZyYW1lLmNwcAppbmRleCBmOGU0NDNmLi5jZmI1YjBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTEyNTAsMzIgKzEy
NTAsMjggQEAgSFRNTEZvcm1FbGVtZW50ICpGcmFtZTo6Y3VycmVudEZvcm0oKSBjb25zdAogICAg
IHJldHVybiBzdGFydCA/IHNjYW5Gb3JGb3JtKHN0YXJ0KSA6IDA7CiB9CiAKLS8vIEZJWE1FOiBz
aG91bGQgdGhpcyBnbyBpbiBTZWxlY3Rpb25Db250cm9sbGVyPwogdm9pZCBGcmFtZTo6cmV2ZWFs
U2VsZWN0aW9uKGNvbnN0IFJlbmRlckxheWVyOjpTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCkg
Y29uc3QKIHsKICAgICBJbnRSZWN0IHJlY3Q7Ci0gICAgCi0gICAgc3dpdGNoIChzZWxlY3Rpb24o
KS0+c3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tk9ORToKKworICAgIHN3aXRj
aCAoc2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIFNlbGVjdGlv
bjo6Tm9TZWxlY3Rpb246CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBTZWxlY3Rpb246OkNBUkVUOgorICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q2FyZXRT
ZWxlY3Rpb246CiAgICAgICAgICAgICByZWN0ID0gc2VsZWN0aW9uKCktPmFic29sdXRlQ2FyZXRC
b3VuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
U2VsZWN0aW9uOjpSQU5HRToKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9u
OgogICAgICAgICAgICAgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc2VsZWN0aW9uQm91bmRzKGZh
bHNlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBQb3NpdGlvbiBzdGFydCA9
IHNlbGVjdGlvbigpLT5zdGFydCgpOwotCiAgICAgQVNTRVJUKHN0YXJ0Lm5vZGUoKSk7CiAgICAg
aWYgKHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCkpIHsKICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY29kZSBvbmx5IGhhbmRsZXMgc2Nyb2xsaW5nIHRoZSBzdGFydENvbnRh
aW5lcidzIGxheWVyLCBidXQKICAgICAgICAgLy8gdGhlIHNlbGVjdGlvbiByZWN0IGNvdWxkIGlu
dGVyc2VjdCBtb3JlIHRoYW4ganVzdCB0aGF0LiAKICAgICAgICAgLy8gU2VlIDxyZGFyOi8vcHJv
YmxlbS80Nzk5ODk5Pi4KLSAgICAgICAgaWYgKFJlbmRlckxheWVyICpsYXllciA9IHN0YXJ0Lm5v
ZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkKKyAgICAgICAgaWYgKFJlbmRlckxh
eWVyKiBsYXllciA9IHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkK
ICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGZhbHNlLCBhbGln
bm1lbnQsIGFsaWdubWVudCk7CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27373</attachid>
            <date>2009-02-05 18:00:30 -0800</date>
            <delta_ts>2009-02-05 18:41:37 -0800</delta_ts>
            <desc>Rename toRange to toNormalizedRange and add new firstRange which returns an unmodified range</desc>
            <filename>Rename-toRange-to-toNormalizedRange-and-add-new-firstRange-which-returns-an-unmodified-range.patch</filename>
            <type>text/plain</type>
            <size>41579</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">OGM0NjBkOTI5MjY1OWExMGU5ZDI4YTQxNjBjYjM1MTdkMmRhYTRjYwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDUyMGNlNDgu
LjE4Y2ZjNzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOS0wMi0wNSAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRE9NU2VsZWN0aW9uLmdldFJhbmdlQXQoKSByZXR1cm5zIGEgZGlmZmVyZW50
IHJhbmdlIHRoYW4gdGhlIHNlbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2MDEKKworICAgICAgICBSZW5hbWUgdG9SYW5nZSB0byB0b05v
cm1hbGl6ZWRSYW5nZSBhbmQgYWRkIG5ldyBmaXJzdFJhbmdlIHdoaWNoIHJldHVybnMgYW4gdW5t
b2RpZmllZCByYW5nZQorCisgICAgICAgICogZmFzdC9kb20vU2VsZWN0aW9uL2dldFJhbmdlQXQu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vU2VsZWN0aW9uL3Jlc291cmNlcy9URU1Q
TEFURS5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9DU1NTdHlsZURlY2xh
cmF0aW9uL3Jlc291cmNlcy9URU1QTEFURS5odG1sLgorICAgICAgICAqIGZhc3QvZG9tL1NlbGVj
dGlvbi9yZXNvdXJjZXMvZ2V0UmFuZ2VBdC5qczogQWRkZWQuCisKIDIwMDktMDItMDUgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBMYXll
ci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdGlvbi9nZXRSYW5nZUF0
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3Rpb24vZ2V0UmFuZ2VBdC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YTdlNzMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3Rpb24vZ2V0UmFuZ2VBdC5odG1sCkBAIC0w
LDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZ2V0UmFuZ2VBdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3Rpb24vcmVzb3VyY2VzL1RF
TVBMQVRFLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9TZWxlY3Rpb24vcmVzb3VyY2VzL1RF
TVBMQVRFLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1MWM0Mwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1NlbGVjdGlvbi9yZXNvdXJj
ZXMvVEVNUExBVEUuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iWU9VUl9KU19GSUxFX0hFUkUiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0
aW9uL3Jlc291cmNlcy9nZXRSYW5nZUF0LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vU2VsZWN0
aW9uL3Jlc291cmNlcy9nZXRSYW5nZUF0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmUwMjRhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9T
ZWxlY3Rpb24vcmVzb3VyY2VzL2dldFJhbmdlQXQuanMKQEAgLTAsMCArMSwzMyBAQAorZGVzY3Jp
cHRpb24oIlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgZ2V0UmFuZ2VBdCBkb2VzIG5vdCBtb2RpZnkg
dGhlIHJhbmdlIHdoZW4gcmV0dXJuaW5nIGl0LiIpCisKK3ZhciBkaXYgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdkaXYnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKK3ZhciB0
ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhc2QiKTsKK2Rpdi5hcHBlbmRDaGls
ZCh0ZXh0Tm9kZSk7CisKK3ZhciBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CitzZWwuY29s
bGFwc2UodGV4dE5vZGUsIDApOwordmFyIHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7CisKK3Zh
ciByZXN1bHQgPSByYW5nZS5jb21wYXJlUG9pbnQodGV4dE5vZGUsIDApOworaWYgKHJlc3VsdCA9
PSAwKSB7CisgICAgdGVzdFBhc3NlZCgicmFuZ2UgaXMgY29ycmVjdGx5ICh0ZXh0LCAwKSIpOwor
fSBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKCJyYW5nZSBkaWQgbm90IG1hdGNoICh0ZXh0LCAwKSIp
OworICAgIGRlYnVnKCJ3aW5kb3cuZ2V0U2VsZWN0aW9uKCk6Iik7CisgICAgZGVidWcoImFuY2hv
ck5vZGU6ICIgKyBzZWwuYW5jaG9yTm9kZSk7CisgICAgZGVidWcoImFuY2hvck9mZnNldDogIiAr
IHNlbC5hbmNob3JPZmZzZXQpOworICAgIGRlYnVnKCJmb2N1c05vZGU6ICIgKyBzZWwuZm9jdXNO
b2RlKTsKKyAgICBkZWJ1ZygiZm9jdXNPZmZzZXQ6ICIgKyBzZWwuZm9jdXNPZmZzZXQpOworCisg
ICAgZGVidWcoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS5nZXRSYW5nZUF0KDApOiIpOworICAgIGRl
YnVnKCJzdGFydENvbnRhaW5lcjogIiArIHJhbmdlLnN0YXJ0Q29udGFpbmVyKTsKKyAgICBkZWJ1
Zygic3RhcnRPZmZzZXQ6ICIgKyByYW5nZS5zdGFydE9mZnNldCk7CisgICAgZGVidWcoImVuZENv
bnRhaW5lcjogIiArIHJhbmdlLmVuZENvbnRhaW5lcik7CisgICAgZGVidWcoImVuZE9mZnNldDog
IiArIHJhbmdlLmVuZE9mZnNldCk7Cit9CisKKy8vIENsZWFuIHVwIGFmdGVyIG91cnNlbHZlcwor
ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggN2NiM2UxNC4uNWY1ZDhlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw4MyBAQAogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIERPTVNlbGVjdGlvbi5nZXRSYW5nZUF0
KCkgcmV0dXJucyBhIGRpZmZlcmVudCByYW5nZSB0aGFuIHRoZSBzZWxlY3Rpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjAxCisKKyAgICAgICAg
UmVuYW1lIHRvUmFuZ2UgdG8gdG9Ob3JtYWxpemVkUmFuZ2UgYW5kIGFkZCBuZXcgZmlyc3RSYW5n
ZSB3aGljaCByZXR1cm5zIGFuIHVubW9kaWZpZWQgcmFuZ2UKKworICAgICAgICBUZXN0OiBmYXN0
L2RvbS9TZWxlY3Rpb24vZ2V0UmFuZ2VBdC5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmJhc2Uu
ZXhwOgorICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgICog
ZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVu
Y2xvc2luZ0RlbGV0YWJsZUVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjphcHBseVN0eWxlVG9TZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphcHBs
eVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppbnNlcnRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRQ
YXJhZ3JhcGhTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVs
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNh
bCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyYW5nZUZvclBvaW50KToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kU2VsZWN0
aW9uVG9HcmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRGVsZXRlVG9NYXJr
KToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVTZWxlY3RUb01hcmspOgorICAgICAgICAqIGVk
aXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdmVG
b3JtYXRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJl
cGxhY2VtZW50RnJhZ21lbnQpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6Zmlyc3RSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVj
dGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6dG9Ob3JtYWxpemVkUmFuZ2UpOgorICAg
ICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBp
bmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1
cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYXJrdXApOgorICAgICAgICAqIGxvYWRl
ci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVn
YWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbik6CisgICAgICAgICogcGFnZS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmFyaWFTZWxlY3RlZFRleHRET01SYW5nZSk6CisgICAgICAgICogcGFn
ZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1l
bnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisgICAgICAgICogcGFnZS9E
T01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpnZXRSYW5n
ZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YWRkUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpkZWxldGVGcm9tRG9jdW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NU2VsZWN0aW9uOjpjb250YWluc05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NU2VsZWN0aW9uOjp0b1N0cmluZyk6CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91
c2VFdmVudCk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6c2VsZWN0ZWRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzaG91bGRDaGFu
Z2VTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNob3VsZERlbGV0ZVNlbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VsZWN0aW9uVGV4dFJlY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpmaW5kU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpy
ZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9Db250ZXh0TWVu
dS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZWxlY3Rpb25Db250YWluc1Bvc3NpYmxlV29yZCk6
CisKKzIwMDktMDItMDUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIE1pbm9yIHJlZmFjdG9yaW5n
IGFuZCBjbGVhbnVwIHRvIFNlbGVjdGlvbiBjb2RlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc3NAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKaW5kZXggNzEzMjczNC4uZjZi
YjMyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5iYXNlLmV4cApAQCAtOTAxLDkgKzkwMSw5IEBAIF9fWk5LN1dlYkNvcmU5RnJhbWVU
cmVlNWNoaWxkRVJLTlNfMTJBdG9taWNTdHJpbmdFCiBfX1pOSzdXZWJDb3JlOUZyYW1lVHJlZTZw
YXJlbnRFYgogX19aTks3V2ViQ29yZTlGcmFtZVZpZXcxMW5lZWRzTGF5b3V0RXYKIF9fWk5LN1dl
YkNvcmU5U2VsZWN0aW9uMTdpc0NvbnRlbnRFZGl0YWJsZUV2CitfX1pOSzdXZWJDb3JlOVNlbGVj
dGlvbjE3dG9Ob3JtYWxpemVkUmFuZ2VFdgogX19aTks3V2ViQ29yZTlTZWxlY3Rpb24xOXJvb3RF
ZGl0YWJsZUVsZW1lbnRFdgogX19aTks3V2ViQ29yZTlTZWxlY3Rpb24yM2lzQ29udGVudFJpY2hs
eUVkaXRhYmxlRXYKLV9fWk5LN1dlYkNvcmU5U2VsZWN0aW9uN3RvUmFuZ2VFdgogX19aTks3V2Vi
Q29yZTlUaW1lckJhc2U4aXNBY3RpdmVFdgogX19aVFZON1dlYkNvcmUxMkNocm9tZUNsaWVudEUK
IF9fWlRWTjdXZWJDb3JlMTdGaWxlQ2hvb3NlckNsaWVudEUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL0lucHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCmluZGV4
IDQ3YzFhMjguLmMyOGEzZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcApAQCAtMjE4LDcgKzIxOCw3IEBA
IHZvaWQgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVs
ZW1lbnREYXRhJiBkYXRhLCBEb2N1bWVuCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRleHQg
dG8gYmUgaW5zZXJ0ZWQgd2lsbCBub3QgdmlvbGF0ZSB0aGUgbWF4TGVuZ3RoLgogICAgIGludCBv
bGRMZW5ndGggPSBudW1HcmFwaGVtZUNsdXN0ZXJzKGRhdGEuaW5wdXRFbGVtZW50KCktPnZhbHVl
KCkuaW1wbCgpKTsKICAgICBBU1NFUlQob2xkTGVuZ3RoIDw9IGRhdGEubWF4TGVuZ3RoKCkpOwot
ICAgIGludCBzZWxlY3Rpb25MZW5ndGggPSBudW1HcmFwaGVtZUNsdXN0ZXJzKHBsYWluVGV4dChk
b2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQo
KSkuaW1wbCgpKTsKKyAgICBpbnQgc2VsZWN0aW9uTGVuZ3RoID0gbnVtR3JhcGhlbWVDbHVzdGVy
cyhwbGFpblRleHQoZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKS5pbXBsKCkpOwogICAgIEFTU0VSVChvbGRMZW5ndGgg
Pj0gc2VsZWN0aW9uTGVuZ3RoKTsKICAgICBpbnQgbWF4TmV3TGVuZ3RoID0gZGF0YS5tYXhMZW5n
dGgoKSAtIChvbGRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGgpOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKaW5kZXggZjEwMDhmZi4uNGJlOWZiNyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcApAQCAtMTA2LDcgKzEwNiw3
IEBAIHN0YXRpYyBIVE1MRWxlbWVudCogZW5jbG9zaW5nRGVsZXRhYmxlRWxlbWVudChjb25zdCBT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKICAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxl
Y3Rpb24udG9SYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gMDsKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAppbmRleCBlMTk1MjhjLi44Y2M4YzE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMzE3
LDcgKzMxNyw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCiB7
CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnRvUmFuZ2UoKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVS
YW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CkBAIC00MTksNyArNDE5LDcgQEAgY29uc3QgU2ltcGxl
Rm9udERhdGEqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRz
KSBjb25zdAogCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQgPSAwOwogCi0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b1JhbmdlKCk7CisgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHJhbmdlLT5lZGl0aW5nU3RhcnRQb3NpdGlv
bigpLm5vZGUoKTsKICAgICBpZiAoc3RhcnROb2RlKSB7CiAgICAgICAgIE5vZGUqIHBhc3RFbmQg
PSByYW5nZS0+cGFzdExhc3ROb2RlKCk7CkBAIC03NDgsNyArNzQ4LDcgQEAgdm9pZCBFZGl0b3I6
OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFj
dGlvbiBlZGl0aW4KICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5sZW5ndGgoKSA9PSAwIHx8ICFj
YW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChjbGllbnQoKSAmJiBj
bGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRv
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBs
eVN0eWxlKHN0eWxlLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSkpCiAgICAgICAgIGFwcGx5U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQogCkBA
IC03NTcsNyArNzU3LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVj
dGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRWRpdEFjdGkKICAgICBpZiAoIXN0eWxl
IHx8IHN0eWxlLT5sZW5ndGgoKSA9PSAwIHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5
bGUoc3R5bGUsIG1fZnJhbWUtPnNlbGVjdGlvbigpLT50b1JhbmdlKCkuZ2V0KCkpKQorICAgIGlm
IChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQogICAgICAgICBhcHBseVBh
cmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIApAQCAtOTY1LDcgKzk2NSw3
IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNl
bGVjdGlvbkZvckNvbW1hbmQodHJpZ2dlcmluZ0V2ZW50KTsKICAgICBpZiAoIXNlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b1JhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgaWYgKCFzaG91bGRJbnNl
cnRUZXh0KHRleHQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtOTk2LDcgKzk5Niw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRM
aW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+c2VsZWN0aW9uKCktPnRv
UmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQorICAgIGlmICghc2hvdWxk
SW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhtX2ZyYW1lLT5kb2N1bWVudCgp
KTsKQEAgLTEwMTIsNyArMTAxMiw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBh
cmF0b3IoKQogICAgIGlmICghY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm4gaW5zZXJ0
TGluZUJyZWFrKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS0+
c2VsZWN0aW9uKCktPnRvUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQor
ICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFy
YXRvcihtX2ZyYW1lLT5kb2N1bWVudCgpKTsKQEAgLTEzMzcsNyArMTMzNyw3IEBAIHZvaWQgRWRp
dG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZSgpLT5z
ZWxlY3Rpb24oKS0+dG9SYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9
IGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmIChzZWxl
Y3RlZFJhbmdlKQogICAgICAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHNl
bGVjdGVkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKQEAgLTE3NzMs
NyArMTc3Myw3IEBAIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKQogICAg
IHJldHVybiBmYWxzZTsKICNlbHNlCiAgICAgVmVjdG9yPFN0cmluZz4gaWdub3JlZEd1ZXNzZXM7
Ci0gICAgcmV0dXJuIGlzUmFuZ2VVbmdyYW1tYXRpY2FsKGNsaWVudCgpLCBmcmFtZSgpLT5zZWxl
Y3Rpb24oKS0+dG9SYW5nZSgpLmdldCgpLCBpZ25vcmVkR3Vlc3Nlcyk7CisgICAgcmV0dXJuIGlz
UmFuZ2VVbmdyYW1tYXRpY2FsKGNsaWVudCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgaWdub3JlZEd1ZXNzZXMpOwogI2VuZGlmCiB9CiAKQEAgLTE3
ODQsNyArMTc4NCw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0ZvclVuZ3JhbW1h
dGljYWxTZWxlY3Rpb24oKQogI2Vsc2UKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAg
IC8vIElnbm9yZSB0aGUgcmVzdWx0IG9mIGlzUmFuZ2VVbmdyYW1tYXRpY2FsOyB3ZSBqdXN0IHdh
bnQgdGhlIGd1ZXNzZXMsIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkKLSAgICBpc1Jhbmdl
VW5ncmFtbWF0aWNhbChjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvUmFuZ2UoKS5n
ZXQoKSwgZ3Vlc3Nlcyk7CisgICAgaXNSYW5nZVVuZ3JhbW1hdGljYWwoY2xpZW50KCksIGZyYW1l
KCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBndWVzc2VzKTsKICAg
ICByZXR1cm4gZ3Vlc3NlczsKICNlbmRpZgogfQpAQCAtMTg3MSw3ICsxODcxLDcgQEAgc3RhdGlj
IHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihFZGl0b3IqIGVkaXRvciwgY29uc3Qg
U2VsZWN0aW9uJiBzZWxlY3QKICAgICBpZiAoIWVkaXRvci0+aXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4g
c2VhcmNoUmFuZ2Uoc2VsZWN0aW9uLnRvUmFuZ2UoKSk7CisgICAgUmVmUHRyPFJhbmdlPiBzZWFy
Y2hSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgaWYgKCFzZWFyY2hS
YW5nZSkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtMTkyMyw3ICsxOTIzLDcgQEAgUGFzc1Jl
ZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQ
b2ludCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgSW50UG9pbnQgZnJhbWVQb2ludCA9IGZyYW1l
Vmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7CiAgICAgU2VsZWN0aW9uIHNlbGVj
dGlvbihmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkpOwotICAgIHJl
dHVybiBhdm9pZEludGVyc2VjdGlvbldpdGhOb2RlKHNlbGVjdGlvbi50b1JhbmdlKCkuZ2V0KCks
IGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKSA/IGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKS0+Y29u
dGFpbmVyRWxlbWVudCgpIDogMCk7CisgICAgcmV0dXJuIGF2b2lkSW50ZXJzZWN0aW9uV2l0aE5v
ZGUoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGRlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXIoKSA/IGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKS0+Y29udGFpbmVyRWxlbWVudCgpIDog
MCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRp
b24oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IGMxZGQ0MWUuLjU4MmNhMGEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTE4NiwxMyArMTg2LDEzIEBAIHN0YXRpYyBi
b29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUqIGZyYW1lLCBUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpCiB7CiAgICAgU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2VsZWN0aW9uKCk7CiAgICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJp
dHkoZ3JhbnVsYXJpdHkpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBzZWxlY3Rpb24u
dG9SYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIW5ld1JhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKG5ld1JhbmdlLT5jb2xsYXBzZWQo
ZWMpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPFJhbmdlPiBvbGRSYW5nZSA9
IGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9SYW5nZSgpOworICAgIFJlZlB0cjxS
YW5nZT4gb2xkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAgICAgRUFmZmluaXR5IGFmZmluaXR5ID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5hZmZpbml0eSgpOwogICAgIGlmICghZnJhbWUtPmVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRSYW5nZS5nZXQoKSwgbmV3UmFuZ2UuZ2V0KCksIGFmZmlu
aXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM0Miw3ICszNDIsNyBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9FbmRPZlBhcmFncmFwaChGcmFtZSogZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdQogCiBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJr
KEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcm
KQogewotICAgIFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLT5tYXJrKCkudG9SYW5nZSgpOwor
ICAgIFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLT5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICBpZiAobWFyaykgewogICAgICAgICBTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rp
b24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rp
b24tPnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMobWFyay5nZXQoKSwgZnJhbWUtPmVk
aXRvcigpLT5zZWxlY3RlZFJhbmdlKCkuZ2V0KCkpLmdldCgpLCBET1dOU1RSRUFNLCB0cnVlKTsK
QEAgLTg4OCw3ICs4ODgsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0U2VudGVuY2UoRnJh
bWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbgogCiBzdGF0aWMgYm9v
bCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lKiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1l
LT5tYXJrKCkudG9SYW5nZSgpOworICAgIFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLT5tYXJr
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IGZy
YW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghbWFyayB8fCAhc2VsZWN0
aW9uKSB7CiAgICAgICAgIHN5c3RlbUJlZXAoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGlu
Zy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRD
b21tYW5kLmNwcAppbmRleCA4MGUwZWU3Li5lNjg4OGMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Vk
aXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1JlbW92
ZUZvcm1hdENvbW1hbmQuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQgUmVtb3ZlRm9ybWF0Q29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
ICAgICAKICAgICAvLyBNYWtlIGEgcGxhaW4gdGV4dCBzdHJpbmcgZnJvbSB0aGUgc2VsZWN0aW9u
IHRvIHJlbW92ZSBmb3JtYXR0aW5nIGxpa2UgdGFibGVzIGFuZCBsaXN0cy4KLSAgICBTdHJpbmcg
c3RyaW5nID0gcGxhaW5UZXh0KGZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9SYW5n
ZSgpLmdldCgpKTsKKyAgICBTdHJpbmcgc3RyaW5nID0gcGxhaW5UZXh0KGZyYW1lLT5zZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiAKICAgICAvLyBH
ZXQgdGhlIGRlZmF1bHQgc3R5bGUgZm9yIHRoaXMgZWRpdGFibGUgcm9vdCwgaXQncyB0aGUgc3R5
bGUgdGhhdCB3ZSdsbCBnaXZlIHRoZQogICAgIC8vIGNvbnRlbnQgdGhhdCB3ZSdyZSBvcGVyYXRp
bmcgb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCAxNWZjNzM2Li4yYzRiMDE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKQEAgLTEzNiw3ICsxMzYsNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBs
YWNlbWVudEZyYWdtZW50KERvY3VtZW50KiBkb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCogZgog
ICAgIE5vZGUqIHN0eWxlTm9kZSA9IHNlbGVjdGlvbi5iYXNlKCkubm9kZSgpOwogICAgIFJlZlB0
cjxOb2RlPiBob2xkZXIgPSBpbnNlcnRGcmFnbWVudEZvclRlc3RSZW5kZXJpbmcoc3R5bGVOb2Rl
KTsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gU2VsZWN0aW9uOjpzZWxlY3Rpb25G
cm9tQ29udGVudHNPZk5vZGUoaG9sZGVyLmdldCgpKS50b1JhbmdlKCk7CisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IFNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRl
ci5nZXQoKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4
dChyYW5nZS5nZXQoKSk7CiAgICAgLy8gR2l2ZSB0aGUgcm9vdCBhIGNoYW5jZSB0byBjaGFuZ2Ug
dGhlIHRleHQuCiAgICAgUmVmUHRyPEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50PiBldnQgPSBCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudDo6Y3JlYXRlKHRleHQpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIFJl
cGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnQqIGRvY3VtZW50
LCBEb2N1bWVudEZyYWdtZW50KiBmCiAgICAgICAgIHJlc3RvcmVUZXN0UmVuZGVyaW5nTm9kZXNU
b0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CiAgICAgICAgIHJlbW92ZU5vZGUoaG9sZGVyKTsKIAot
ICAgICAgICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChzZWxlY3Rpb24udG9S
YW5nZSgpLmdldCgpLCBldnQtPnRleHQoKSk7CisgICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21UZXh0KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBldnQt
PnRleHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBob2xkZXIgPSBpbnNlcnRGcmFnbWVudEZvclRlc3RSZW5k
ZXJpbmcoc3R5bGVOb2RlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb24u
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAKaW5kZXggMTVmZDFhNi4uNTk5ZDBj
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAKQEAgLTEyMiw3ICsxMjIsMTQgQEAgdm9pZCBTZWxlY3Rp
b246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKICAg
ICB2YWxpZGF0ZSgpOwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBTZWxlY3Rpb246OnRvUmFuZ2Uo
KSBjb25zdAorUGFzc1JlZlB0cjxSYW5nZT4gU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNOb25lKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBSYW5n
ZTo6Y3JlYXRlKG1fc3RhcnQubm9kZSgpLT5kb2N1bWVudCgpLCBtX3N0YXJ0LCBtX2VuZCk7Cit9
CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IFNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25z
dAogewogICAgIGlmIChpc05vbmUoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzAsMTkgKzE3
Nyw5IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFNlbGVjdGlvbjo6dG9SYW5nZSgpIGNvbnN0CiAgICAg
ICAgIGUgPSByYW5nZUNvbXBsaWFudEVxdWl2YWxlbnQoZSk7CiAgICAgfQogCi0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHQoUmFuZ2U6OmNyZWF0ZShz
Lm5vZGUoKS0+ZG9jdW1lbnQoKSkpOwotICAgIHJlc3VsdC0+c2V0U3RhcnQocy5ub2RlKCksIHMu
b2Zmc2V0KCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRp
b24gc2V0dGluZyBSYW5nZSBzdGFydCBmcm9tIFNlbGVjdGlvbjogJWQiLCBlYyk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICByZXN1bHQtPnNldEVuZChlLm5vZGUoKSwgZS5vZmZzZXQo
KSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBMT0dfRVJST1IoIkV4Y2VwdGlvbiBzZXR0
aW5nIFJhbmdlIGVuZCBmcm9tIFNlbGVjdGlvbjogJWQiLCBlYyk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICAvLyBTZWxlY3Rpb25z
IGFyZSBzdXBwb3NlZCB0byBhbHdheXMgYmUgdmFsaWQuICBUaGlzIGNvbnN0cnVjdG9yIHdpbGwg
QVNTRVJUCisgICAgLy8gaWYgYSB2YWxpZCByYW5nZSBjb3VsZCBub3QgYmUgY3JlYXRlZCwgd2hp
Y2ggaXMgZmluZSBmb3IgdGhpcyBjYWxsc2l0ZS4KKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShz
Lm5vZGUoKS0+ZG9jdW1lbnQoKSwgcywgZSk7CiB9CiAKIGJvb2wgU2VsZWN0aW9uOjpleHBhbmRV
c2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb24uaCBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb24u
aAppbmRleCAwODliNjFjLi5mNWZiNzNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2Vs
ZWN0aW9uLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5oCkBAIC04MSw3ICs4MSwx
MyBAQCBwdWJsaWM6CiAgICAgYm9vbCBleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSk7CiAgICAgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9ncmFudWxhcml0eTsgfQogCi0gICAgUGFzc1JlZlB0cjxSYW5nZT4gdG9S
YW5nZSgpIGNvbnN0OworICAgIC8vIFdlIGRvbid0IHlldCBzdXBwb3J0IG11bHRpLXJhbmdlIHNl
bGVjdGlvbnMsIHNvIHdlIG9ubHkgZXZlciBoYXZlIG9uZSByYW5nZSB0byByZXR1cm4uCisgICAg
UGFzc1JlZlB0cjxSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0OworCisgICAgLy8gRklYTUU6IE1v
c3QgY2FsbGVycyBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMgZnVuY3Rpb24sIGJ1dCBhcmUgdXNp
bmcgaXQKKyAgICAvLyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLiAgdG9Ob3JtYWxpemVkUmFuZ2Ug
Y29udHJhY3RzIHRoZSByYW5nZSBhcm91bmQKKyAgICAvLyB0ZXh0LCBhbmQgbW92ZXMgdGhlIGNh
cmV0IHVwc3RyZWFtIGJlZm9yZSByZXR1cm5pbmcgdGhlIHJhbmdlLgorICAgIFBhc3NSZWZQdHI8
UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3Q7CiAgICAgCiAgICAgRWxlbWVudCogcm9v
dEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0OwogICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgg
Yi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCmluZGV4IGE5M2RjZTQuLmE3
ZjMxMzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaApAQCAtMTAzLDcgKzEw
Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1cm4g
bV9zZWwuaXNDYXJldE9yUmFuZ2UoKTsgfQogICAgIGJvb2wgaXNJblBhc3N3b3JkRmllbGQoKSBj
b25zdDsKICAgICAKLSAgICBQYXNzUmVmUHRyPFJhbmdlPiB0b1JhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9zZWwudG9SYW5nZSgpOyB9CisgICAgUGFzc1JlZlB0cjxSYW5nZT4gdG9Ob3JtYWxpemVk
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbC50b05vcm1hbGl6ZWRSYW5nZSgpOyB9CiAKICAg
ICB2b2lkIGRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxlY3RlZCkgY29uc3Q7
CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggNzJlZmQ4Ny4uNWU0MDVjZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNDQ0LDcgKzQ0NCw3IEBAIHZvaWQgVHlw
aW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGJvb2wga2lsbFJpbmcpCiAgICAgCiAgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXRP
clJhbmdlKCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNl
bGVjdGlvblRvRGVsZXRlKSkgewogICAgICAgICBpZiAoa2lsbFJpbmcpCi0gICAgICAgICAgICBk
b2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+YWRkVG9LaWxsUmluZyhzZWxlY3Rpb25Ub0Rl
bGV0ZS50b1JhbmdlKCkuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZy
YW1lKCktPmVkaXRvcigpLT5hZGRUb0tpbGxSaW5nKHNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIGZhbHNlKTsKICAgICAgICAgLy8gTWFrZSB1bmRvIHNlbGVjdCBl
dmVyeXRoaW5nIHRoYXQgaGFzIGJlZW4gZGVsZXRlZCwgdW5sZXNzIGFuIHVuZG8gd2lsbCB1bmRv
IG1vcmUgdGhhbiBqdXN0IHRoaXMgZGVsZXRpb24uCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGJl
aGF2ZXMgbGlrZSBUZXh0RWRpdCBleGNlcHQgZm9yIHRoZSBjYXNlIHdoZXJlIHlvdSBvcGVuIHdp
dGggdGV4dCBpbnNlcnRpb24gYW5kIHRoZW4gZGVsZXRlCiAgICAgICAgIC8vIG1vcmUgdGV4dCB0
aGFuIHlvdSBpbnNlcnQuICBJbiB0aGF0IGNhc2UgYWxsIG9mIHRoZSB0ZXh0IHRoYXQgd2FzIGFy
b3VuZCBvcmlnaW5hbGx5IHNob3VsZCBiZSBzZWxlY3RlZC4KQEAgLTUyMiw3ICs1MjIsNyBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSwgYm9vbCBraQogICAgIAogICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5p
c0NhcmV0T3JSYW5nZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCktPnNob3VsZERlbGV0ZVNlbGVj
dGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpIHsKICAgICAgICAgaWYgKGtpbGxSaW5nKQotICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmFkZFRvS2lsbFJpbmcoc2VsZWN0
aW9uVG9EZWxldGUudG9SYW5nZSgpLmdldCgpLCBmYWxzZSk7CisgICAgICAgICAgICBkb2N1bWVu
dCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+YWRkVG9LaWxsUmluZyhzZWxlY3Rpb25Ub0RlbGV0ZS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBmYWxzZSk7CiAgICAgICAgIC8vIG1ha2UgdW5kbyBz
ZWxlY3Qgd2hhdCB3YXMgZGVsZXRlZAogICAgICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzZWxl
Y3Rpb25BZnRlclVuZG8pOwogICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2Vs
ZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5k
ZXggNGQ1NjQ4Yy4uMzY2ZjY1YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5j
cHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTg4OCw3ICs4ODgsNyBAQCBT
dHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgVmVjdG9yPE5vZGUqPiogbm9k
ZXMsIEVBbm5vdGF0ZUZvckludGVyYwogICAgIC8vIEZJWE1FOiBPbmx5IGluY2x1ZGUgbWFya3Vw
IGZvciBhIGZ1bGx5IHNlbGVjdGVkIHJvb3QgKGFuZCBhbmNlc3RvcnMgb2YgbGFzdENsb3NlZCB1
cCB0byB0aGF0IHJvb3QpIGlmCiAgICAgLy8gdGhlcmUgYXJlIHN0eWxlcy9hdHRyaWJ1dGVzIG9u
IHRob3NlIG5vZGVzIHRoYXQgbmVlZCB0byBiZSBpbmNsdWRlZCB0byBwcmVzZXJ2ZSB0aGUgYXBw
ZWFyYW5jZSBvZiB0aGUgY29waWVkIG1hcmt1cC4KICAgICAvLyBGSVhNRTogRG8gdGhpcyBmb3Ig
YWxsIGZ1bGx5IHNlbGVjdGVkIGJsb2Nrcywgbm90IGp1c3QgdGhlIGJvZHkuCi0gICAgTm9kZSog
ZnVsbHlTZWxlY3RlZFJvb3QgPSBib2R5ICYmICpTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250
ZW50c09mTm9kZShib2R5KS50b1JhbmdlKCkgPT0gKnVwZGF0ZWRSYW5nZSA/IGJvZHkgOiAwOwor
ICAgIE5vZGUqIGZ1bGx5U2VsZWN0ZWRSb290ID0gYm9keSAmJiAqU2VsZWN0aW9uOjpzZWxlY3Rp
b25Gcm9tQ29udGVudHNPZk5vZGUoYm9keSkudG9Ob3JtYWxpemVkUmFuZ2UoKSA9PSAqdXBkYXRl
ZFJhbmdlID8gYm9keSA6IDA7CiAgICAgaWYgKGFubm90YXRlICYmIGZ1bGx5U2VsZWN0ZWRSb290
KQogICAgICAgICBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBmdWxseVNlbGVjdGVkUm9vdDsKICAg
ICAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFy
Y2hpdmUuY3BwIGIvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNw
cAppbmRleCBjNTM4MjgyLi4wYjYxNmI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9hcmNo
aXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
Y2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAKQEAgLTU2OCw3ICs1NjgsNyBAQCBQYXNzUmVmUHRyPExl
Z2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oRnJh
bWUqIGZyYW1lKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAg
IFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnRvUmFu
Z2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gZnJhbWUtPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7CiAg
ICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGZyYW1lLT5kb2N1bWVudFR5cGVTdHJpbmcoKSArIGNy
ZWF0ZU1hcmt1cChzZWxlY3Rpb25SYW5nZS5nZXQoKSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvcklu
dGVyY2hhbmdlKTsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGFnZS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAppbmRleCAyYzdkZjMxLi5mZjdhODdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xMjcyLDcgKzEyNzIsNyBAQCBQYXNzUmVmUHRyPFJhbmdl
PiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhU2VsZWN0ZWRUZXh0RE9NUmFuZ2UoKSBj
b25zdAogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgUmVmUHRy
PFJhbmdlPiBjdXJyZW50U2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24oKS50b1JhbmdlKCk7Cisg
ICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50U2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghY3VycmVudFNlbGVjdGlvblJhbmdlKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5k
ZXggNDdhMDY2My4uYjAwNmQxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAKQEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQogI2VuZGlmCiAgICAgICAg
IGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczoKICAgICAgICAgICAgIEFTU0VS
VChmcmFtZS0+c2VsZWN0ZWRUZXh0KCkubGVuZ3RoKCkpOwotICAgICAgICAgICAgaWYgKGZyYW1l
LT5lZGl0b3IoKS0+c2hvdWxkSW5zZXJ0VGV4dChpdGVtLT50aXRsZSgpLCBmcmFtZS0+c2VsZWN0
aW9uKCktPnRvUmFuZ2UoKS5nZXQoKSwKKyAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkt
PnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0bGUoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLAogICAgICAgICAgICAgICAgIEVkaXRvckluc2VydEFjdGlv
blBhc3RlZCkpIHsKICAgICAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKTsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ+IGNvbW1hbmQgPQpAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9s
bGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUl0ZW0qIGl0ZW0pCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdGFydFNwZWFr
aW5nOiB7CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgICAgICAgICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLT50b1JhbmdlKCk7Cisg
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2Ug
fHwgc2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKGVjKSkgewogICAgICAgICAgICAgICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsK
ICAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gZG9jdW1lbnQtPmNyZWF0ZVJhbmdlKCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1dlYkNvcmUvcGFn
ZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IDVkYWIzMjUuLjZmMjg0ZTYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rp
b24uY3BwCkBAIC0yOTgsOCArMjk4LDExIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IERPTVNlbGVjdGlv
bjo6Z2V0UmFuZ2VBdChpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKKyAgICAvLyBJZiB5b3UncmUgaGl0dGluZyB0aGlzLCB5b3UndmUgYWRk
ZWQgYnJva2VuIG11bHRpLXJhbmdlIHNlbGVjdGlvbiBzdXBwb3J0CisgICAgQVNTRVJUKHJhbmdl
Q291bnQoKSA9PSAxKTsKKwogICAgIGNvbnN0IFNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFt
ZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpOwotICAgIHJldHVybiBzZWxlY3Rpb24udG9SYW5n
ZSgpOworICAgIHJldHVybiBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOwogfQogCiB2b2lkIERPTVNl
bGVjdGlvbjo6cmVtb3ZlQWxsUmFuZ2VzKCkKQEAgLTMyMyw3ICszMjYsNyBAQCB2b2lkIERPTVNl
bGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UqIHIpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLT5zZWxlY3Rpb24oKS50b1JhbmdlKCk7
CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAoci0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgcmFuZ2UuZ2V0KCksIGVj
KSA9PSAtMSkgewogICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGRpc2NvbnRpZ3VvdXMgc2Vs
ZWN0aW9uLiBXZSBkb24ndCBkbyBhbnl0aGluZyBpZiByIGFuZCByYW5nZSBkb24ndCBpbnRlcnNl
Y3QuCkBAIC0zNjEsNyArMzY0LDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmRlbGV0ZUZyb21Eb2N1
bWVudCgpCiAgICAgaWYgKGlzQ29sbGFwc2VkKCkpCiAgICAgICAgIHNlbGVjdGlvbi0+bW9kaWZ5
KFNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORCwgU2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dB
UkQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRS
YW5nZSA9IHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkudG9SYW5nZSgpOworICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHNlbGVjdGVkUmFuZ2UtPmRl
bGV0ZUNvbnRlbnRzKGVjKTsKQEAgLTM4Myw3ICszODYsNyBAQCBib29sIERPTVNlbGVjdGlvbjo6
Y29udGFpbnNOb2RlKGNvbnN0IE5vZGUqIG4sIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdAogCiAg
ICAgTm9kZSogcGFyZW50Tm9kZSA9IG4tPnBhcmVudE5vZGUoKTsKICAgICB1bnNpZ25lZCBub2Rl
SW5kZXggPSBuLT5ub2RlSW5kZXgoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2Ug
PSBzZWxlY3Rpb24tPnNlbGVjdGlvbigpLnRvUmFuZ2UoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24tPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CiAKICAgICBpZiAoIXBhcmVudE5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQxOCw3
ICs0MjEsNyBAQCBTdHJpbmcgRE9NU2VsZWN0aW9uOjp0b1N0cmluZygpCiAgICAgaWYgKCFtX2Zy
YW1lKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gcGxhaW5UZXh0KG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b1JhbmdlKCkuZ2V0KCkpOworICAgIHJl
dHVybiBwbGFpblRleHQobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAppbmRleCBhMDJmMzI1Li40ODc3OTM0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHAKQEAgLTMxNSw3ICszMTUsNyBAQCBzdGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdD
YXJldChGcmFtZSogZnJhbWUsIFNlbGVjdGlvbiYgZHJhZ0NhcmV0LCBSZWZQdHI8UgogICAgIGlm
IChmcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpKSB7CiAgICAgICAgIGRyYWdDYXJldCA9IGZy
YW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCk7CiAgICAgICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS0+c2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7Ci0gICAgICAgIHJhbmdlID0gZHJhZ0Nh
cmV0LnRvUmFuZ2UoKTsKKyAgICAgICAgcmFuZ2UgPSBkcmFnQ2FyZXQudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICB9CiAgICAgcmV0dXJuICFmcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpICYm
IGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0KQEAgLTM0MCw3ICsz
NDAsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRhKiBk
cmFnRGF0YSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFpbm5lckZy
YW1lKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IGlu
bmVyUmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS0+dG9SYW5nZSgpOworICAgICAgICBS
ZWZQdHI8UmFuZ2U+IGlubmVyUmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxl
ID0gbV9kb2N1bWVudC0+Y3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwogICAgICAgICBFeGNl
cHRpb25Db2RlIGVjOwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoImNvbG9yIiwgY29sb3Iu
bmFtZSgpLCBlYyk7CkBAIC0zODMsNyArMzgzLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29u
Y2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEpCiAKICAgICBTZWxlY3Rpb24gZHJhZ0Nh
cmV0KG1fcGFnZS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpLT5zZWxlY3Rpb24oKSk7CiAgICAgbV9w
YWdlLT5kcmFnQ2FyZXRDb250cm9sbGVyKCktPmNsZWFyKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IGRyYWdDYXJldC50b1JhbmdlKCk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGRy
YWdDYXJldC50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIAogICAgIC8vIEZvciByYW5nZSB0byBi
ZSBudWxsIGEgV2ViS2l0IGNsaWVudCBtdXN0IGhhdmUgZG9uZSBzb21ldGhpbmcgYmFkIHdoaWxl
CiAgICAgLy8gbWFudWFsbHkgY29udHJvbGxpbmcgZHJhZyBiZWhhdmlvdXIKQEAgLTY3Myw3ICs2
NzMsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUqIHNyYywgQ2xpcGJv
YXJkKiBjbGlwYm9hcmQsIERyYWdPcGVyYXRpb24gcwogICAgICAgICB9IAogICAgICAgICBkb1N5
c3RlbURyYWcoZHJhZ0ltYWdlLCBkcmFnTG9jLCBtb3VzZURyYWdnZWRQb2ludCwgY2xpcGJvYXJk
LCBzcmMsIHRydWUpOwogICAgIH0gZWxzZSBpZiAoaXNTZWxlY3RlZCAmJiAobV9kcmFnU291cmNl
QWN0aW9uICYgRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbikpIHsKLSAgICAgICAgUmVmUHRyPFJh
bmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNyYy0+c2VsZWN0aW9uKCktPnRvUmFuZ2UoKTsKKyAgICAg
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNyYy0+c2VsZWN0aW9uKCktPnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgICAgIEFTU0VSVChzZWxlY3Rpb25SYW5nZSk7CiAgICAgICAg
IGlmICghY2xpcGJvYXJkLT5oYXNEYXRhKCkpIAogICAgICAgICAgICAgY2xpcGJvYXJkLT53cml0
ZVJhbmdlKHNlbGVjdGlvblJhbmdlLmdldCgpLCBzcmMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRl
eCBjOTVlYjhiLi5hOTFhOGQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMTU3Miw3ICsxNTcy
LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogdGFyZ2UKICAgICAgICAgICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICAgICAgICAgICAgICBOb2RlKiBuID0gbm9kZS0+aXNTaGFkb3dOb2Rl
KCkgPyBub2RlLT5zaGFkb3dQYXJlbnROb2RlKCkgOiBub2RlOwogICAgICAgICAgICAgICAgIGlm
IChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpICYmIAotICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dG9SYW5nZSgpLT5jb21wYXJlTm9kZShuLCBlYykgPT0g
UmFuZ2U6Ok5PREVfSU5TSURFICYmCisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVj
dGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLT5jb21wYXJlTm9kZShuLCBlYykgPT0gUmFuZ2U6
Ok5PREVfSU5TSURFICYmCiAgICAgICAgICAgICAgICAgICAgIG4tPmlzRGVzY2VuZGFudE9mKG1f
ZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
YWdlL0ZyYW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggY2ZiNWIwYS4uZmQ2
OTM3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC0yNzUsNyArMjc1LDcgQEAgU2V0dGluZ3MqIEZyYW1lOjpzZXR0aW5n
cygpIGNvbnN0CiAKIFN0cmluZyBGcmFtZTo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gcGxhaW5UZXh0KHNlbGVjdGlvbigpLT50b1JhbmdlKCkuZ2V0KCkpOworICAgIHJldHVy
biBwbGFpblRleHQoc2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogfQog
CiBJbnRSZWN0IEZyYW1lOjpmaXJzdFJlY3RGb3JSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CkBA
IC04MzQsMTMgKzgzNCwxMyBAQCBib29sIEZyYW1lOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29u
c3QgU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24pIGNvbnN0CiAKIGJvb2wgRnJhbWU6OnNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgU2VsZWN0
aW9uJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGlu
ZykgY29uc3QKIHsKLSAgICByZXR1cm4gZWRpdG9yKCktPmNsaWVudCgpLT5zaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKG9sZFNlbGVjdGlvbi50b1JhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50
b1JhbmdlKCkuZ2V0KCksCisgICAgcmV0dXJuIGVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwg
bmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpbml0eSwgc3RpbGxT
ZWxlY3RpbmcpOwogfQogCiBib29sIEZyYW1lOjpzaG91bGREZWxldGVTZWxlY3Rpb24oY29uc3Qg
U2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVkaXRvcigpLT5jbGll
bnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvUmFuZ2UoKS5nZXQoKSk7CisgICAg
cmV0dXJuIGVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwogfQogCiBib29sIEZyYW1lOjppc0NvbnRlbnRFZGl0
YWJsZSgpIGNvbnN0IApAQCAtOTUyLDcgKzk1Miw3IEBAIFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uPiBGcmFtZTo6c2VsZWN0aW9uQ29tcHV0ZWRTdHlsZShOb2RlKiYgbm9k
CiAgICAgaWYgKHNlbGVjdGlvbigpLT5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlKHNlbGVjdGlvbigpLT50b1JhbmdlKCkpOworICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2Uoc2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgIFBv
c2l0aW9uIHBvcyA9IHJhbmdlLT5lZGl0aW5nU3RhcnRQb3NpdGlvbigpOwogCiAgICAgRWxlbWVu
dCAqZWxlbSA9IHBvcy5lbGVtZW50KCk7CkBAIC0xMTk2LDcgKzExOTYsNyBAQCB2b2lkIEZyYW1l
OjpzZWxlY3Rpb25UZXh0UmVjdHMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBib29sIGNsaXBU
b1Zpc2libGVDb250ZQogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uKCktPnRvUmFuZ2UoKTsKKyAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFu
Z2UoKTsKIAogICAgIFZlY3RvcjxJbnRSZWN0PiBpbnRSZWN0czsKICAgICBzZWxlY3RlZFJhbmdl
LT5hZGRMaW5lQm94UmVjdHMoaW50UmVjdHMsIHRydWUpOwpAQCAtMTQxNiw3ICsxNDE2LDcgQEAg
Ym9vbCBGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgYm9vbCBmb3J3YXJk
LCBib29sIGNhc2VGbGFnLCBib29sIHcKICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSBzZWxl
Y3Rpb24gYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIGV4aXN0aW5nIHNl
bGVjdGlvbiwgZmluZCBhZ2Fpbi4KICAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBm
b3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29tcGFy
ZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0
aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KLSAgICBpZiAoc3RhcnRJblNlbGVj
dGlvbiAmJiAqU2VsZWN0aW9uKHJlc3VsdFJhbmdlLmdldCgpKS50b1JhbmdlKCkgPT0gKnNlbGVj
dGlvbi50b1JhbmdlKCkpIHsKKyAgICBpZiAoc3RhcnRJblNlbGVjdGlvbiAmJiAqU2VsZWN0aW9u
KHJlc3VsdFJhbmdlLmdldCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpID09ICpzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKSkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50
cyhkb2N1bWVudCgpKTsKICAgICAgICAgaWYgKGZvcndhcmQpCiAgICAgICAgICAgICBzZXRTdGFy
dChzZWFyY2hSYW5nZS5nZXQoKSwgc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CkBAIC0xNzE1LDkg
KzE3MTUsOSBAQCB2b2lkIEZyYW1lOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNl
bGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVAogCiAgICAgICAgICAgICAvLyBUaGlz
IG9ubHkgZXJhc2VzIG1hcmtlcnMgdGhhdCBhcmUgaW4gdGhlIGZpcnN0IHVuaXQgKHdvcmQgb3Ig
c2VudGVuY2UpIG9mIHRoZSBzZWxlY3Rpb24uCiAgICAgICAgICAgICAvLyBQZXJoYXBzIHBlY3Vs
aWFyLCBidXQgaXQgbWF0Y2hlcyBBcHBLaXQuCi0gICAgICAgICAgICBpZiAoUmVmUHRyPFJhbmdl
PiB3b3JkUmFuZ2UgPSBuZXdBZGphY2VudFdvcmRzLnRvUmFuZ2UoKSkKKyAgICAgICAgICAgIGlm
IChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVk
UmFuZ2UoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5yZW1vdmVNYXJrZXJzKHdvcmRS
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgICAgIGlmIChS
ZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvUmFuZ2Uo
KSkKKyAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxl
Y3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1l
bnQoKS0+cmVtb3ZlTWFya2VycyhzZW50ZW5jZVJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6
R3JhbW1hcik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Db250
ZXh0TWVudS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcAppbmRleCBjYzcz
ZGQ1Li5jMDg4MTIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmNwcApAQCAtMTkyLDcgKzE5Miw3
IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUFuZEFwcGVuZFRleHREaXJlY3Rpb25TdWJNZW51KGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgQ29uCiBzdGF0aWMgYm9vbCBzZWxlY3Rpb25Db250YWlu
c1Bvc3NpYmxlV29yZChGcmFtZSogZnJhbWUpCiB7CiAgICAgLy8gQ3VycmVudCBhbGdvcml0aG06
IGxvb2sgZm9yIGEgY2hhcmFjdGVyIHRoYXQncyBub3QganVzdCBhIHNlcGFyYXRvci4KLSAgICBm
b3IgKFRleHRJdGVyYXRvciBpdChmcmFtZS0+c2VsZWN0aW9uKCktPnRvUmFuZ2UoKS5nZXQoKSk7
ICFpdC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdChm
cmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOyAhaXQuYXRFbmQo
KTsgaXQuYWR2YW5jZSgpKSB7CiAgICAgICAgIGludCBsZW5ndGggPSBpdC5sZW5ndGgoKTsKICAg
ICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBpdC5jaGFyYWN0ZXJzKCk7CiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFj
L0NoYW5nZUxvZyBiL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDRhZGRmZGQuLmQ1ZWNkNTQg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDktMDItMDUgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERPTVNlbGVjdGlvbi5nZXRSYW5nZUF0KCkgcmV0dXJucyBhIGRpZmZlcmVudCByYW5nZSB0aGFu
IHRoZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNjAxCisKKyAgICAgICAgUmVuYW1lIHRvUmFuZ2UgdG8gdG9Ob3JtYWxpemVkUmFu
Z2UgYW5kIGFkZCBuZXcgZmlyc3RSYW5nZSB3aGljaCByZXR1cm5zIGFuIHVubW9kaWZpZWQgcmFu
Z2UKKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1l
IF9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOlNlbGVjdGlvbkNvbnRyb2xsZXI6OmRp
cmVjdGlvbjpTZWxlY3Rpb25Db250cm9sbGVyOjpncmFudWxhcml0eTpdKToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX21hcmtET01SYW5nZV0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3NlbGVjdGVkTlNSYW5nZV0pOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
SFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9zZWxlY3RlZFJhbmdlXSk6Cisg
ICAgICAgICgtW1dlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgZG9Db21wbGV0aW9uXSk6CisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ10pOgorICAgICAgICAq
IFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyB0ZXh0SXRlcmF0b3JGb3JS
ZWN0Ol0pOgorICAgICAgICAoLVtXZWJWaWV3IHNlbGVjdGVkRE9NUmFuZ2VdKToKKwogMjAwOS0w
Mi0wNCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1
aWxkIGZpeCBmaXguCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0g
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZDU3OGRlZC4uZTMyZDk0NyAx
MDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtNzE1LDcgKzcxNSw3IEBAIHN0YXRpYyBpbmxpbmUg
V2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIFNl
bGVjdGlvbkNvbnRyb2xsZXIgc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24o
X3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICBzZWxl
Y3Rpb24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJl
dHVybiBbRE9NUmFuZ2UgX3dyYXBSYW5nZTpzZWxlY3Rpb24udG9SYW5nZSgpLmdldCgpXTsKKyAg
ICByZXR1cm4gW0RPTVJhbmdlIF93cmFwUmFuZ2U6c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCldOwogfQogCiAtIChUZXh0R3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdyYW51bGFyaXR5
CkBAIC03OTMsNyArNzkzLDcgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRhU291
cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAKIC0gKERPTVJhbmdlICopX21hcmtET01SYW5n
ZQogewotICAgIHJldHVybiBbRE9NUmFuZ2UgX3dyYXBSYW5nZTpfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5tYXJrKCkudG9SYW5nZSgpLmdldCgpXTsKKyAgICByZXR1cm4gW0RPTVJhbmdlIF93cmFwUmFu
Z2U6X3ByaXZhdGUtPmNvcmVGcmFtZS0+bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCld
OwogfQogCiAvLyBHaXZlbiBwcm9wb3NlZFJhbmdlLCByZXR1cm5zIGFuIGV4dGVuZGVkIHJhbmdl
IHRoYXQgaW5jbHVkZXMgYWRqYWNlbnQgd2hpdGVzcGFjZSB0aGF0IHNob3VsZApAQCAtOTMzLDcg
KzkzMyw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZShEb2N1bWVu
dExvYWRlciogbG9hZGVyKQogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5T
U3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBz
bWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlCiB7Ci0gICAgW3NlbGYgX3JlcGxhY2VTZWxl
Y3Rpb25XaXRoRnJhZ21lbnQ6a2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoX3ByaXZhdGUtPmNv
cmVGcmFtZS0+c2VsZWN0aW9uKCktPnRvUmFuZ2UoKS5nZXQoKSwgdGV4dCkuZ2V0KCkpCisgICAg
W3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6a2l0KGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCksIHRleHQpLmdldCgpKQogICAgICAgICBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RS
ZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6WUVTXTsKIH0K
IApAQCAtMTExMCw3ICsxMTEwLDcgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpkYXRh
U291cmNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAKIC0gKE5TUmFuZ2UpX3NlbGVjdGVkTlNS
YW5nZQogewotICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS0+dG9SYW5nZSgpLmdldCgpXTsKKyAgICByZXR1cm4gW3NlbGYg
X2NvbnZlcnRUb05TUmFuZ2U6X3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCldOwogfQogCiAtICh2b2lkKV9zZWxlY3ROU1JhbmdlOihOU1Jh
bmdlKXJhbmdlCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0g
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggOWRkYTFlMy4uYjYyMGQ4
NSAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQpAQCAtODQ5LDcgKzg0OSw3IEBAIHN0YXRp
YyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0
KQogLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZQogewogICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS0+dG9SYW5nZSgpLmdldCgpKSA6IG5pbDsKKyAgICByZXR1cm4gY29y
ZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpIDogbmlsOwogfQogCiAtIChCT09MKV9zaG91bGREZWxldGVSYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQpAQCAtNTU4Nyw3ICs1NTg3LDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGlu
ZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGUKIAog
ICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3b3JkIHN0ZW0KICAgICAgICAgV2ViRnJhbWUgKmZy
YW1lID0gW192aWV3IF9mcmFtZV07Ci0gICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQo
Y29yZShmcmFtZSktPnNlbGVjdGlvbigpLT50b1JhbmdlKCkuZ2V0KCkpOworICAgICAgICBET01S
YW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSk7CiAgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBbZnJhbWUg
X3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246U2VsZWN0aW9uQ29udHJvbGxlcjo6RVhU
RU5ECiAgICAgICAgICAgICBkaXJlY3Rpb246U2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQg
Z3JhbnVsYXJpdHk6V29yZEdyYW51bGFyaXR5XTsKICAgICAgICAgRE9NUmFuZ2UgKnByZWZpeCA9
IFt3aG9sZVdvcmQgY2xvbmVSYW5nZV07CkBAIC01ODU3LDcgKzU4NTcsNyBAQCBzdGF0aWMgdm9p
ZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPENv
bXBvc2l0aW9uVW5kZQogICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgewogICAgICAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICAgICAgaWYgKGNvcmVGcmFt
ZSkgewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpLnRvUmFuZ2UoKTsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJp
bmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOnJhbmdlLmdldCgpXTsKICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggMWUxZGM3Mi4uY2UxN2UxYyAxMDA2NDQK
LS0tIGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0KQEAgLTIwMjMsNyArMjAyMyw3IEBAIFdlYlNjcmlwdERlYnVnRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBXZWJWaWV3R2V0U2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxl
bWVuCiAgICAgCiAgICAgU2VsZWN0aW9uIHNlbGVjdGlvbkluc2lkZVJlY3QoY29yZUZyYW1lLT52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChyZWN0U3RhcnQpLCBjb3JlRnJhbWUtPnZpc2libGVQb3Np
dGlvbkZvclBvaW50KHJlY3RFbmQpKTsKICAgICAKLSAgICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJh
dG9yIGFsbG9jXSBpbml0V2l0aFJhbmdlOltET01SYW5nZSBfd3JhcFJhbmdlOnNlbGVjdGlvbklu
c2lkZVJlY3QudG9SYW5nZSgpLmdldCgpXV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tX
ZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRXaXRoUmFuZ2U6W0RPTVJhbmdlIF93cmFwUmFuZ2U6
c2VsZWN0aW9uSW5zaWRlUmVjdC50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpXV0gYXV0b3JlbGVh
c2VdOwogfQogCiAtICh2b2lkKWhhbmRsZUF1dGhlbnRpY2F0aW9uRm9yUmVzb3VyY2U6KGlkKWlk
ZW50aWZpZXIgY2hhbGxlbmdlOihOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlICopY2hhbGxl
bmdlIGZyb21EYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZSAKQEAgLTQxMzcs
NyArNDEzNyw3IEBAIHN0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm9tSlNW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWVQdHIganNWCiAgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFt
ZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCktPnRvUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKIH0KIAogLSAoTlNTZWxlY3Rpb25B
ZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQo=
</data>
<flag name="review"
          id="13222"
          type_id="1"
          status="+"
          setter="justin.garcia"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27402</attachid>
            <date>2009-02-06 10:29:26 -0800</date>
            <delta_ts>2009-02-06 16:21:13 -0800</delta_ts>
            <desc>With ap&apos;s suggested addition of rangeCompliantEquivalent and some documentation of that function.</desc>
            <filename>h-ap-s-suggested-addition-of-rangeCompliantEquivalent-and-some-documentation-of-that-function..patch</filename>
            <type>text/plain</type>
            <size>2186</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">OWM2MDdkOGU2YzNlOTkzNWQwNGQ2NDhiZjM2OTNmZTM1MTcxMTU0ZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmNw
cAppbmRleCA1OTlkMGMyLi5jZWYzMWEzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2Vs
ZWN0aW9uLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmNwcApAQCAtMTI2LDcg
KzEyNiw5IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0
CiB7CiAgICAgaWYgKGlzTm9uZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gUmFu
Z2U6OmNyZWF0ZShtX3N0YXJ0Lm5vZGUoKS0+ZG9jdW1lbnQoKSwgbV9zdGFydCwgbV9lbmQpOwor
ICAgIFBvc2l0aW9uIHN0YXJ0ID0gcmFuZ2VDb21wbGlhbnRFcXVpdmFsZW50KG1fc3RhcnQpOwor
ICAgIFBvc2l0aW9uIGVuZCA9IHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChtX2VuZCk7CisgICAg
cmV0dXJuIFJhbmdlOjpjcmVhdGUoc3RhcnQubm9kZSgpLT5kb2N1bWVudCgpLCBzdGFydCwgZW5k
KTsKIH0KIAogUGFzc1JlZlB0cjxSYW5nZT4gU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgp
IGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvV2Vi
Q29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAppbmRleCBlZTQxZTY5Li43MDRmNGM0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCisrKyBiL1dlYkNvcmUvZWRp
dGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTMwOSwyNyArMzA5LDMyIEBAIE5vZGUqIGVuY2xvc2lu
Z0Jsb2NrKE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbmNs
b3NpbmdOb2RlT2ZUeXBlKFBvc2l0aW9uKG5vZGUsIDApLCBpc0Jsb2NrKSk7CiB9CiAKKy8vIElu
dGVybmFsbHkgZWRpdGluZyB1c2VzICJpbnZhbGlkIiBwb3NpdGlvbnMgZm9yIGhpc3RvcmljYWwg
cmVhc29ucy4gIEZvcgorLy8gZXhhbXBsZSwgaW4gPGRpdj48aW1nIC8+PC9kaXY+LCBFZGl0aW5n
IG1pZ2h0IHVzZSAoaW1nLCAxKSBmb3IgdGhlIHBvc2l0aW9uCisvLyBhZnRlciA8aW1nPiwgYnV0
IHdlIGhhdmUgdG8gY29udmVydCB0aGF0IHRvIChkaXYsIDEpIGJlZm9yZSBoYW5kaW5nIHRoZQor
Ly8gcG9zaXRpb24gdG8gYSBSYW5nZSBvYmplY3QuICBJZGVhbGx5IGFsbCBpbnRlcm5hbCBwb3Np
dGlvbnMgc2hvdWxkCisvLyBiZSAicmFuZ2UgY29tcGxpYW50IiBmb3Igc2ltcGxpY2l0eS4KIFBv
c2l0aW9uIHJhbmdlQ29tcGxpYW50RXF1aXZhbGVudChjb25zdCBQb3NpdGlvbiYgcG9zKQogewog
ICAgIGlmIChwb3MuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCi0gICAg
Tm9kZSAqbm9kZSA9IHBvcy5ub2RlKCk7Ci0gICAgCisgICAgTm9kZSogbm9kZSA9IHBvcy5ub2Rl
KCk7CisKICAgICBpZiAocG9zLm9mZnNldCgpIDw9IDApIHsKICAgICAgICAgaWYgKG5vZGUtPnBh
cmVudE5vZGUoKSAmJiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpIHx8IGlzVGFibGVFbGVt
ZW50KG5vZGUpKSkKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZSk7
CiAgICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLCAwKTsKICAgICB9Ci0gICAgCisKICAgICBp
ZiAobm9kZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbihu
b2RlLCBtaW4obm9kZS0+bWF4Q2hhcmFjdGVyT2Zmc2V0KCksIHBvcy5vZmZzZXQoKSkpOwotICAg
IAorCiAgICAgaW50IG1heENvbXBsaWFudE9mZnNldCA9IG5vZGUtPmNoaWxkTm9kZUNvdW50KCk7
CiAgICAgaWYgKHBvcy5vZmZzZXQoKSA+IG1heENvbXBsaWFudE9mZnNldCkgewogICAgICAgICBp
ZiAobm9kZS0+cGFyZW50Tm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uQWZ0ZXJO
b2RlKG5vZGUpOwotICAgICAgICAKKwogICAgICAgICAvLyB0aGVyZSBpcyBubyBvdGhlciBvcHRp
b24gYXQgdGhpcyBwb2ludCB0aGFuIHRvCiAgICAgICAgIC8vIHVzZSB0aGUgaGlnaGVzdCBhbGxv
d2VkIHBvc2l0aW9uIGluIHRoZSBub2RlCiAgICAgICAgIHJldHVybiBQb3NpdGlvbihub2RlLCBt
YXhDb21wbGlhbnRPZmZzZXQpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>