<?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>31750</bug_id>
          
          <creation_ts>2009-11-20 15:18:10 -0800</creation_ts>
          <short_desc>Can focus but not type into content editable block that contains only non-editable content</short_desc>
          <delta_ts>2010-03-23 17:27:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>abarth</cc>
    
    <cc>adele</cc>
    
    <cc>darin</cc>
    
    <cc>michael.vm</cc>
    
    <cc>rpaplin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>165474</commentid>
    <comment_count>0</comment_count>
      <attachid>43618</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2009-11-20 15:18:10 -0800</bug_when>
    <thetext>Created attachment 43618
Repro test

Can&apos;t type when the content-editable object has focus. This occurs when there is a DIV element with only a non-editable elemnt.
(see attached test case)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165475</commentid>
    <comment_count>1</comment_count>
      <attachid>43619</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2009-11-20 15:20:28 -0800</bug_when>
    <thetext>Created attachment 43619
Proposed patch

Working on the test case. No change log yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166316</commentid>
    <comment_count>2</comment_count>
      <attachid>43818</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2009-11-24 17:55:02 -0800</bug_when>
    <thetext>Created attachment 43818
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167359</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-30 12:39:45 -0800</bug_when>
    <thetext>Attachment 43818 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Done processing WebCore/rendering/RenderText.h
Done processing WebCore/editing/htmlediting.cpp
WebCore/dom/Position.cpp:327:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Done processing WebCore/dom/Position.cpp
Done processing WebCore/dom/PositionIterator.cpp
Done processing WebCore/dom/Position.h
Done processing WebCore/dom/PositionIterator.h
Done processing WebCore/rendering/RenderObject.cpp
Done processing WebCore/rendering/RenderText.cpp
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167399</commentid>
    <comment_count>4</comment_count>
      <attachid>44038</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2009-11-30 13:10:32 -0800</bug_when>
    <thetext>Created attachment 44038
Patch2

Fixed line 327 in Position.cpp to have &amp;&amp; at the beginning of the line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167401</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-30 13:16:23 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44038 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167426</commentid>
    <comment_count>6</comment_count>
      <attachid>44038</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-30 14:19:13 -0800</bug_when>
    <thetext>Comment on attachment 44038
Patch2

It seems unnecessary to make atEditingBoundary be a member function on Position and PositionIterator. Can we instead just make those free functions?

&gt; +// A position is considered at editing boundary if one of the following is true:&quot;

Stray quote mark on the end of the line above.

&gt; +// 1. it is the first position in the node and the next visually equivalent position
&gt; +//    is non editable
&gt; +// 2. it is the last position in the node and the previous visually equivalent position
&gt; +//    is non editable
&gt; +// 3. is is an editable position and both the next and previous visually equivalent
&gt; +//    positions are both non editable

Typo &quot;is is&quot; here. I would put capital letters and periods on these three conditions.

&gt; +    return (nextPosition.isNotNull() &amp;&amp; !nextPosition.node()-&gt;isContentEditable())
&gt; +           &amp;&amp; (prevPosition.isNotNull() &amp;&amp; !prevPosition.node()-&gt;isContentEditable());

I think this would read better without the parentheses. Also, the second line should be indented only 4 spaces, not 7 -- we don&apos;t try to line things up.

&gt; +Position Position::upstream(EditingBoundaryCrossingRule upRule) const

I&apos;d probably call this boundaryRule or crossingRule or even &quot;rule&quot; rather than upRule.

&gt;          return Position();
&gt; -
&gt; +    
&gt;      // iterate forward from there, looking for a qualified position

The patch has a lot of whitespace changes like the above. It would be better to not have these changes.

&gt; +            bool lastPosition = (caretOffset == lastOffsetInNode(node()));
&gt; +            Node* startNode = (lastPosition)? node()-&gt;childNode(caretOffset - 1): node()-&gt;childNode(caretOffset);

It should be formatted as &quot;lastPosition ? a : b&quot; rather than &quot;(lastPosition)? a: b&quot;.

&gt; +bool PositionIterator::atEditingBoundary() const
&gt; +{
&gt; +    if (!m_anchorNode)
&gt; +        return false;
&gt; +        
&gt; +    return Position(*this).atEditingBoundary();
&gt; +}

I don&apos;t think you need a special case for !m_anchorNode here. Do you?

&gt;      // If this is a non-anonymous renderer, then it&apos;s simple.

This comment seems wrong now. It&apos;s not all that simple any more! Maybe we should say something more about it rather than &quot;it&apos;s simple&quot;.

&gt; -    if (Node* node = this-&gt;node())
&gt; +    if (Node* node = this-&gt;node()) {
&gt; +        if (!node-&gt;isContentEditable()) {
&gt; +            // prefer a visually equivalent position that is editable

We use sentence format for this type of comment. Capitals and a period at the end.

&gt; +            Position pos(node, offset);

It would be better to name this &quot;position&quot; rather than &quot;pos&quot;.

&gt; +    int len = textLength();

This should be unsigned rather than int. And should be named a word, like &quot;length&quot; rather than an abbreviation such as &quot;len&quot;.

&gt; +    const UChar* txt = characters();

Instead of &quot;txt&quot; I suggest either &quot;characters&quot; or &quot;text&quot; as the name for this local variable.

&gt; +    for (int i = 0; i &lt; len; i++)
&gt; +        if (!style()-&gt;isCollapsibleWhiteSpace(txt[i]))
&gt; +            return false;

WebKit coding style uses braces around a multi-line for statement like this one.

r=me -- all the comments are optional things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167469</commentid>
    <comment_count>7</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2009-11-30 16:46:24 -0800</bug_when>
    <thetext>Committed revision 51522.
I&apos;ve addressed all comments from Darin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167471</commentid>
    <comment_count>8</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2009-11-30 16:48:23 -0800</bug_when>
    <thetext>*** Bug 20325 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203297</commentid>
    <comment_count>9</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-03-23 17:27:43 -0700</bug_when>
    <thetext>*** Bug 19698 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>43618</attachid>
            <date>2009-11-20 15:18:10 -0800</date>
            <delta_ts>2009-11-20 15:18:10 -0800</delta_ts>
            <desc>Repro test</desc>
            <filename>noneditable.html</filename>
            <type>text/html</type>
            <size>1581</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIGh0bWwgUFVC
TElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0
bWwxMS9EVEQveGh0bWwxMS5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KPGhlYWQ+Cgk8dGl0bGU+Q29udGVudEVkaXRhYmxlIElz
c3VlPC90aXRsZT4KPC9oZWFkPgo8Ym9keSBvbmxvYWQ9ImxvYWQoKTsiPgogIDxwPiMxIEJsYW5r
IERJViBlbGVtZW50IHdpdGggb24gY29udGVudDo8L3A+CiAgPGRpdiBzdHlsZT0id2lkdGg6MTAw
cHg7YmFja2dyb3VuZC1jb2xvcjojY2VlO21pbi1oZWlnaHQ6MWVtOyIgY29udGVudGVkaXRhYmxl
PSJ0cnVlIiBpZD0iZWRpdDEiPjwvZGl2PgogIDxwPiMyIERJViBlbGVtZW50IHdpdGggYSBub24t
ZWRpdGFibGUgZWxlbWVudCBvbmx5IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPihjYW4gTk9UIHR5
cGUgd2hlbiBpbiBmb2N1cyk8L3NwYW4+OjwvcD4KICA8ZGl2IHN0eWxlPSJ3aWR0aDoxMDBweDti
YWNrZ3JvdW5kLWNvbG9yOiNjZWUiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIgaWQ9ImVkaXQyIj4K
ICAgIDxzcGFuIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPk1pa2UxOiA8L3NwYW4+CiAgICA8c3Bh
biBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj5NaWtlMjogPC9zcGFuPgogIDwvZGl2PgogIDxwPiMz
IERJViBlbGVtZW50IHdpdGggYSBub24tZWRpdGFibGUgZWxlbWVudCBhbmQgYSBub24tYnJlYWtp
bmcgc3BhY2Ugb3IgdGV4dDo8L3A+CiAgPGRpdiBzdHlsZT0id2lkdGg6MTAwcHg7YmFja2dyb3Vu
ZC1jb2xvcjojY2VlIiBjb250ZW50ZWRpdGFibGU9InRydWUiIGlkPSJlZGl0MyI+CiAgICA8c3Bh
biBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj5NaWtlOiA8L3NwYW4+Jm5ic3A7CiAgPC9kaXY+CiAg
PHA+IzQgRElWIGVsZW1lbnQgd2l0aCBhbiBlZGl0YWJsZSBlbXB0eSBzcGFuIGVsZW1lbnQgPHNw
YW4gc3R5bGU9ImNvbG9yOnJlZCI+KGNhbiBOT1QgZ2V0IGZvY3VzKTwvc3Bhbj46PC9wPgogIDxk
aXYgc3R5bGU9IndpZHRoOjEwMHB4O2JhY2tncm91bmQtY29sb3I6I2NlZSI+CiAgICBNaWtlOiZu
YnNwOzxzcGFuIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIgaWQ9ImVkaXQ0Ij4gPC9zcGFuPgogIDwv
ZGl2PgogIDxwPiM1IERJViBlbGVtZW50IHdpdGggYW4gZWRpdGFibGUgc3BhbiBlbGVtZW50IHdp
dGggc29tZSB0ZXh0OjwvcD4KICA8ZGl2IHN0eWxlPSJ3aWR0aDoxMDBweDtiYWNrZ3JvdW5kLWNv
bG9yOiNjZWUiPgogICAgTWlrZTombmJzcDs8c3BhbiBjb250ZW50ZWRpdGFibGU9InRydWUiIGlk
PSJlZGl0NSI+Jm5ic3A7PC9zcGFuPgogIDwvZGl2PgogIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+CiAgICBmdW5jdGlvbiBsb2FkKCkKICAgIHsKICAgICAg
dmFyIGVkaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdDQnKTsKICAgICAgZWRpdC5m
b2N1cygpOwogICAgfQogIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43619</attachid>
            <date>2009-11-20 15:20:28 -0800</date>
            <delta_ts>2009-11-24 17:55:02 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug5982901.txt</filename>
            <type>text/plain</type>
            <size>18416</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAJKHJldmlzaW9uIDUxMjI0KQorKysgV2ViQ29yZS9XZWJDb3JlLmJhc2Uu
ZXhwCSh3b3JraW5nIGNvcHkpCkBAIC05NjEsMTAgKzk2MSwxMCBAQCBfX1pOSzdXZWJDb3JlOERv
Y3VtZW50MzFkaXNwbGF5U3RyaW5nTW9kCiBfX1pOSzdXZWJDb3JlOERvY3VtZW50NGJvZHlFdgog
X19aTks3V2ViQ29yZThEb2N1bWVudDZkb21haW5FdgogX19aTks3V2ViQ29yZThJbnRQb2ludGN2
OF9OU1BvaW50RXYKLV9fWk5LN1dlYkNvcmU4UG9zaXRpb24xMGRvd25zdHJlYW1FdgogX19aTks3
V2ViQ29yZThQb3NpdGlvbjI1bGVhZGluZ1doaXRlc3BhY2VQb3NpdGlvbkVOU185RUFmZmluaXR5
RWIKIF9fWk5LN1dlYkNvcmU4UG9zaXRpb24yNnRyYWlsaW5nV2hpdGVzcGFjZVBvc2l0aW9uRU5T
XzlFQWZmaW5pdHlFYgotX19aTks3V2ViQ29yZThQb3NpdGlvbjh1cHN0cmVhbUV2CitfX1pOSzdX
ZWJDb3JlOFBvc2l0aW9uMTBkb3duc3RyZWFtRU5TMF8xN0VkaXRpbmdCb3VuZGFyaWVzRQorX19a
Tks3V2ViQ29yZThQb3NpdGlvbjh1cHN0cmVhbUVOUzBfMTdFZGl0aW5nQm91bmRhcmllc0UKIF9f
Wk5LN1dlYkNvcmU5RE9NV2luZG93MjdwZW5kaW5nVW5sb2FkRXZlbnRMaXN0ZW5lcnNFdgogX19a
Tks3V2ViQ29yZTlGbG9hdFJlY3RjdjdfTlNSZWN0RXYKIF9fWk5LN1dlYkNvcmU5RnJhbWVUcmVl
MTJ0cmF2ZXJzZU5leHRFUEtOU181RnJhbWVFCkluZGV4OiBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCShyZXZpc2lvbiA1MTIy
NCkKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDYg
KzMwNywyMCBAQCBib29sIFBvc2l0aW9uOjphdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOCiAgICAg
cmV0dXJuIG1fb2Zmc2V0ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5nKG5vZGUoKSk7CiB9CiAKK2Jv
b2wgUG9zaXRpb246OmF0RWRpdGluZ0JvdW5kYXJ5KCkgY29uc3QKK3sKKyAgICBQb3NpdGlvbiBu
ZXh0UG9zaXRpb24gPSBkb3duc3RyZWFtKEFsbG93RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmcpOwor
ICAgIGlmIChhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpICYmIG5leHRQb3NpdGlvbi5p
c05vdE51bGwoKSAmJiAhbmV4dFBvc2l0aW9uLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIFBvc2l0aW9uIHByZXZQb3NpdGlv
biA9IHVwc3RyZWFtKEFsbG93RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmcpOworICAgIGlmIChhdExh
c3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgcHJldlBvc2l0aW9uLmlzTm90TnVsbCgpICYm
ICFwcmV2UG9zaXRpb24ubm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgcmV0dXJuIChuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkg
JiYgIW5leHRQb3NpdGlvbi5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpICYmCisgICAgICAg
ICAgIChwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIXByZXZQb3NpdGlvbi5ub2RlKCktPmlz
Q29udGVudEVkaXRhYmxlKCkpOworfQorCiBib29sIFBvc2l0aW9uOjphdFN0YXJ0T2ZUcmVlKCkg
Y29uc3QKIHsKICAgICBpZiAoaXNOdWxsKCkpCkBAIC00NDgsNyArNDYyLDcgQEAgc3RhdGljIGJv
b2wgaXNTdHJlYW1lcihjb25zdCBQb3NpdGlvbkl0ZQogLy8gYW5kIGRvd25zdHJlYW0oKSB3aWxs
IHJldHVybiB0aGUgcmlnaHQgb25lLgogLy8gQWxzbywgdXBzdHJlYW0oKSB3aWxsIHJldHVybiBb
Ym91bmRhcnksIDBdIGZvciBhbnkgb2YgdGhlIHBvc2l0aW9ucyBmcm9tIFtib3VuZGFyeSwgMF0g
dG8gdGhlIGZpcnN0IGNhbmRpZGF0ZQogLy8gaW4gYm91bmRhcnksIHdoZXJlIGVuZHNPZk5vZGVB
cmVWaXN1YWxseURpc3RpbmN0UG9zaXRpb25zKGJvdW5kYXJ5KSBpcyB0cnVlLgotUG9zaXRpb24g
UG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKK1Bvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShF
ZGl0aW5nQm91bmRhcmllcyB1cE1vZGUpIGNvbnN0CiB7CiAgICAgTm9kZSogc3RhcnROb2RlID0g
bm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQpAQCAtNDYwLDYgKzQ3NCw3IEBAIFBvc2l0aW9u
IFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiAgICAgUG9zaXRpb25JdGVyYXRvciBjdXJyZW50
UG9zID0gbGFzdFZpc2libGU7CiAgICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3RhcnROb2RlLT5p
c0NvbnRlbnRFZGl0YWJsZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3RhcnROb2RlOworICAg
IGJvb2wgYm91bmRhcnlDcm9zc2VkID0gZmFsc2U7CiAgICAgZm9yICg7ICFjdXJyZW50UG9zLmF0
U3RhcnQoKTsgY3VycmVudFBvcy5kZWNyZW1lbnQoKSkgewogICAgICAgICBOb2RlKiBjdXJyZW50
Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwogICAgICAgICAKQEAgLTQ2OCw4ICs0ODMsMTEgQEAg
UG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAgICAgICAgaWYgKGN1cnJlbnRO
b2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBjaGFuZ2UgZWRpdGFiaWxp
dHkuCiAgICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJlbnROb2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpOwotICAgICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVu
dEVkaXRhYmxlKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKHN0YXJ0
RWRpdGFibGUgIT0gY3VycmVudEVkaXRhYmxlKSB7CisgICAgICAgICAgICAgICAgaWYgKHVwTW9k
ZSA9PSBEb250QWxsb3dFZGl0aW5nQm91bmRhcnlDcm9zc2luZykKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYm91bmRhcnlDcm9zc2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGxhc3ROb2RlID0gY3VycmVudE5vZGU7CiAgICAgICAgIH0K
IApAQCAtNDgzLDkgKzUwMSwxNCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25z
dAogICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAK
KyAgICAgICAgaWYgKHVwTW9kZSA9PSBBbGxvd0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nICYmIGJv
dW5kYXJ5Q3Jvc3NlZCkgeworICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9zOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIHRyYWNr
IGxhc3QgdmlzaWJsZSBzdHJlYW1lciBwb3NpdGlvbgogICAgICAgICBpZiAoaXNTdHJlYW1lcihj
dXJyZW50UG9zKSkKLSAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVudFBvczsKKyAgICAg
ICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVudFBvczsgICAgICAgICAgICAKICAgICAgICAgCiAg
ICAgICAgIC8vIERvbid0IG1vdmUgcGFzdCBhIHBvc2l0aW9uIHRoYXQgaXMgdmlzdWFsbHkgZGlz
dGluY3QuICBXZSBjb3VsZCByZWx5IG9uIGNvZGUgYWJvdmUgdG8gdGVybWluYXRlIGFuZCAKICAg
ICAgICAgLy8gcmV0dXJuIGxhc3RWaXNpYmxlIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiwgYnV0IHdl
IHRlcm1pbmF0ZSBlYXJseSB0byBhdm9pZCBkb2luZyBhIG5vZGVJbmRleCgpIGNhbGwuCkBAIC01
NjAsMTggKzU4MywxOSBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAogLy8g
YW5kIHVwc3RyZWFtKCkgd2lsbCByZXR1cm4gdGhlIGxlZnQgb25lLgogLy8gQWxzbywgZG93bnN0
cmVhbSgpIHdpbGwgcmV0dXJuIHRoZSBsYXN0IHBvc2l0aW9uIGluIHRoZSBsYXN0IGF0b21pYyBu
b2RlIGluIGJvdW5kYXJ5IGZvciBhbGwgb2YgdGhlIHBvc2l0aW9ucwogLy8gaW4gYm91bmRhcnkg
YWZ0ZXIgdGhlIGxhc3QgY2FuZGlkYXRlLCB3aGVyZSBlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0
aW5jdFBvc2l0aW9ucyhib3VuZGFyeSkuCi1Qb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbSgp
IGNvbnN0CitQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcmllcyBk
b3duTW9kZSkgY29uc3QKIHsKICAgICBOb2RlKiBzdGFydE5vZGUgPSBub2RlKCk7CiAgICAgaWYg
KCFzdGFydE5vZGUpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwotCisgICAgCiAgICAgLy8g
aXRlcmF0ZSBmb3J3YXJkIGZyb20gdGhlcmUsIGxvb2tpbmcgZm9yIGEgcXVhbGlmaWVkIHBvc2l0
aW9uCiAgICAgTm9kZSogYm91bmRhcnkgPSBlbmNsb3NpbmdWaXN1YWxCb3VuZGFyeShzdGFydE5v
ZGUpOwogICAgIFBvc2l0aW9uSXRlcmF0b3IgbGFzdFZpc2libGUgPSAqdGhpczsKICAgICBQb3Np
dGlvbkl0ZXJhdG9yIGN1cnJlbnRQb3MgPSBsYXN0VmlzaWJsZTsKICAgICBib29sIHN0YXJ0RWRp
dGFibGUgPSBzdGFydE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7CiAgICAgTm9kZSogbGFzdE5v
ZGUgPSBzdGFydE5vZGU7CisgICAgYm9vbCBib3VuZGFyeUNyb3NzZWQgPSBmYWxzZTsKICAgICBm
b3IgKDsgIWN1cnJlbnRQb3MuYXRFbmQoKTsgY3VycmVudFBvcy5pbmNyZW1lbnQoKSkgeyAgIAog
ICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwogICAgICAgICAK
QEAgLTU4MCwxNiArNjA0LDIwIEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29u
c3QKICAgICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAv
LyBEb24ndCBjaGFuZ2UgZWRpdGFiaWxpdHkuCiAgICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0
YWJsZSA9IGN1cnJlbnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgICAgICAgICAgaWYg
KHN0YXJ0RWRpdGFibGUgIT0gY3VycmVudEVkaXRhYmxlKQotICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVudEVkaXRhYmxlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGRvd25Nb2RlID09IERvbnRBbGxvd0VkaXRpbmdCb3VuZGFyeUNy
b3NzaW5nKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBib3Vu
ZGFyeUNyb3NzZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbGFzdE5vZGUgPSBjdXJyZW50Tm9kZTsKICAgICAgICAgfQotCisgICAgICAgIAog
ICAgICAgICAvLyBzdG9wIGJlZm9yZSBnb2luZyBhYm92ZSB0aGUgYm9keSwgdXAgaW50byB0aGUg
aGVhZAogICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgdmlzaWJsZSBzdHJlYW1lciBwb3NpdGlv
bgogICAgICAgICBpZiAoY3VycmVudE5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykgJiYgY3VycmVu
dFBvcy5hdEVuZE9mTm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKyAg
ICAgICAgCiAgICAgICAgIC8vIERvIG5vdCBtb3ZlIHRvIGEgdmlzdWFsbHkgZGlzdGluY3QgcG9z
aXRpb24uCiAgICAgICAgIGlmIChlbmRzT2ZOb2RlQXJlVmlzdWFsbHlEaXN0aW5jdFBvc2l0aW9u
cyhjdXJyZW50Tm9kZSkgJiYgY3VycmVudE5vZGUgIT0gYm91bmRhcnkpCiAgICAgICAgICAgICBy
ZXR1cm4gbGFzdFZpc2libGU7CkBAIC01OTgsMzAgKzYyNiwzNSBAQCBQb3NpdGlvbiBQb3NpdGlv
bjo6ZG93bnN0cmVhbSgpIGNvbnN0CiAgICAgICAgIC8vIHBvc2l0aW9ucyB3aWxsIGJlIFtib3Vu
ZGFyeS0+cGFyZW50Tm9kZSgpLCBvcmlnaW5hbEJsb2NrLT5ub2RlSW5kZXgoKSArIDFdLgogICAg
ICAgICBpZiAoYm91bmRhcnkgJiYgYm91bmRhcnktPnBhcmVudE5vZGUoKSA9PSBjdXJyZW50Tm9k
ZSkKICAgICAgICAgICAgIHJldHVybiBsYXN0VmlzaWJsZTsKLQorICAgICAgICAKICAgICAgICAg
Ly8gc2tpcCBwb3NpdGlvbiBpbiB1bnJlbmRlcmVkIG9yIGludmlzaWJsZSBub2RlCiAgICAgICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKTsKICAgICAg
ICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJ
U0lCTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAorICAgICAgICAKKyAg
ICAgICAgaWYgKGRvd25Nb2RlID09IEFsbG93RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmcgJiYgYm91
bmRhcnlDcm9zc2VkKSB7CisgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gdHJhY2sg
bGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0aW9uCiAgICAgICAgIGlmIChpc1N0cmVhbWVyKGN1
cnJlbnRQb3MpKQogICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9zOwotCisgICAg
ICAgIAogICAgICAgICAvLyBSZXR1cm4gcG9zaXRpb24gYmVmb3JlIHRhYmxlcyBhbmQgbm9kZXMg
d2hpY2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJlIGlnbm9yZWQuCiAgICAgICAgIGlmIChlZGl0
aW5nSWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUpIHx8IGlzVGFibGVFbGVtZW50KGN1cnJlbnRO
b2RlKSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9kZSgpIDw9
IHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQb3Np
dGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWluT2Zmc2V0KCkpOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KLQorICAgICAgICAKICAgICAgICAgLy8gcmV0dXJuIGN1
cnJlbnQgcG9zaXRpb24gaWYgaXQgaXMgaW4gcmVuZGVyZWQgdGV4dAogICAgICAgICBpZiAocmVu
ZGVyZXItPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChyZW5kZXJlciktPmZpcnN0VGV4dEJveCgp
KSB7CiAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gc3RhcnROb2RlKSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRlcmVyLT5jYXJldE1pbk9mZnNl
dCgpKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25l
ZCB0ZXh0T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCk7CiAgICAgICAgICAg
ICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOwogICAg
ICAgICAgICAgSW5saW5lVGV4dEJveCogbGFzdFRleHRCb3ggPSB0ZXh0UmVuZGVyZXItPmxhc3RU
ZXh0Qm94KCk7CkBAIC02MzEsMTMgKzY2NCwxMyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0
cmVhbSgpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotCisgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGJveCA9PSBsYXN0VGV4dEJveCB8fCB0
ZXh0T2Zmc2V0ICE9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gVGhl
IHRleHQgY29udGludWVzIG9uIHRoZSBuZXh0IGxpbmUgb25seSBpZiB0aGUgbGFzdCB0ZXh0IGJv
eCBpcyBub3Qgb24gdGhpcyBsaW5lIGFuZAogICAgICAgICAgICAgICAgIC8vIG5vbmUgb2YgdGhl
IGJveGVzIG9uIHRoaXMgbGluZSBoYXZlIGEgbGFyZ2VyIHN0YXJ0IG9mZnNldC4KLQorICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGJvb2wgY29udGludWVzT25OZXh0TGluZSA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgSW5saW5lQm94KiBvdGhlckJveCA9IGJveDsKICAgICAgICAg
ICAgICAgICB3aGlsZSAoY29udGludWVzT25OZXh0TGluZSkgewpAQCAtNjQ3LDcgKzY4MCw3IEBA
IFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG90aGVyQm94ID09IGxhc3RUZXh0Qm94IHx8IChvdGhlckJveC0+cmVuZGVyZXIoKSA9
PSB0ZXh0UmVuZGVyZXIgJiYgc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KG90aGVyQm94KS0+
c3RhcnQoKSA+PSB0ZXh0T2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
c09uTmV4dExpbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBvdGhlckJveCA9IGJveDsKICAgICAgICAgICAgICAgICB3aGls
ZSAoY29udGludWVzT25OZXh0TGluZSkgewogICAgICAgICAgICAgICAgICAgICBvdGhlckJveCA9
IG90aGVyQm94LT5wcmV2TGVhZkNoaWxkKCk7CkBAIC02NTYsNyArNjg5LDcgQEAgUG9zaXRpb24g
UG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25zdAogICAgICAgICAgICAgICAgICAgICBpZiAob3Ro
ZXJCb3ggPT0gbGFzdFRleHRCb3ggfHwgKG90aGVyQm94LT5yZW5kZXJlcigpID09IHRleHRSZW5k
ZXJlciAmJiBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4ob3RoZXJCb3gpLT5zdGFydCgpID49
IHRleHRPZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVzT25OZXh0TGlu
ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChjb250aW51ZXNPbk5leHRMaW5lKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudFBvczsKICAgICAgICAgICAgIH0KQEAgLTY2NSw3ICs2OTgsNyBAQCBQb3Np
dGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiAgICAgCiAgICAgcmV0dXJuIGxhc3RW
aXNpYmxlOwogfQotCisgICAgCiBib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91
c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIFJl
bmRlck9iamVjdCogc3RvcCA9IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4o
KTsKQEAgLTY3Nyw3ICs3MTAsNyBAQCBib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255
bW91c0RlCiAgICAgICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9Ci0KKyAgIAogYm9vbCBQb3Np
dGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUoTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbm9k
ZSAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPnVzZXJT
ZWxlY3QoKSA9PSBTRUxFQ1RfTk9ORTsKQEAgLTcwNCwxMCArNzM3LDE0IEBAIGJvb2wgUG9zaXRp
b246OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAgICBpZiAoaXNUYWJsZUVsZW1lbnQobm9kZSgpKSB8
fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSgpKSkKICAgICAgICAgcmV0dXJuIChhdEZpcnN0
RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpIHx8IGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUo
KSkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFyZW50KCkpOwogCi0gICAgaWYg
KCFub2RlKCktPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkg
JiYgIWhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVy
KSAmJgotICAgICAgICh0b1JlbmRlckJveChyZW5kZXJlciktPmhlaWdodCgpIHx8IG5vZGUoKS0+
aGFzVGFnTmFtZShib2R5VGFnKSkpCi0gICAgICAgIHJldHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0
aW9uRm9yTm9kZSgpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpOwotICAgIAorICAg
IGlmICghbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmIHJlbmRlcmVyLT5pc0Js
b2NrRmxvdygpKSB7CisgICAgICAgIGlmICh0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+aGVpZ2h0
KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CisgICAgICAgICAgICBp
ZiAoIVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdo
dChyZW5kZXJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5nUG9zaXRp
b25Gb3JOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAh
UG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSkgJiYgYXRFZGl0aW5nQm91bmRh
cnkoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTQ5
LDcgKzk4NiwyMiBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmCiB7
CiAgICAgY2FyZXRPZmZzZXQgPSBtX29mZnNldDsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICAgIAogICAgIGlmICghcmVuZGVyZXItPmlz
VGV4dCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiBoYXNSZW5k
ZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJlcikpIHsKKyAgICAg
ICAgICAgIGJvb2wgbGFzdFBvc2l0aW9uID0gKGNhcmV0T2Zmc2V0ID09IGxhc3RPZmZzZXRJbk5v
ZGUobm9kZSgpKSk7CisgICAgICAgICAgICBOb2RlKiBzdGFydE5vZGUgPSAobGFzdFBvc2l0aW9u
KT8gbm9kZSgpLT5jaGlsZE5vZGUoY2FyZXRPZmZzZXQgLSAxKTogbm9kZSgpLT5jaGlsZE5vZGUo
Y2FyZXRPZmZzZXQpOworICAgICAgICAgICAgd2hpbGUgKHN0YXJ0Tm9kZSAmJiAoIXN0YXJ0Tm9k
ZS0+cmVuZGVyZXIoKSB8fCAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkgJiYgdG9SZW5kZXJUZXh0
KHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkpKSkK
KyAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSAobGFzdFBvc2l0aW9uKT8gc3RhcnROb2RlLT5w
cmV2aW91c1NpYmxpbmcoKTogc3RhcnROb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAg
aWYgKHN0YXJ0Tm9kZSkgeworICAgICAgICAgICAgICAgIFBvc2l0aW9uIHBvcyhzdGFydE5vZGUs
IDApOworICAgICAgICAgICAgICAgIHBvcyA9IHBvcy5kb3duc3RyZWFtKEFsbG93RWRpdGluZ0Jv
dW5kYXJ5Q3Jvc3NpbmcpOworICAgICAgICAgICAgICAgIHBvcy5nZXRJbmxpbmVCb3hBbmRPZmZz
ZXQoVVBTVFJFQU0sIHByaW1hcnlEaXJlY3Rpb24sIGlubGluZUJveCwgY2FyZXRPZmZzZXQpOwor
ICAgICAgICAgICAgICAgIGlmIChsYXN0UG9zaXRpb24gJiYgaW5saW5lQm94KQorICAgICAgICAg
ICAgICAgICAgICBjYXJldE9mZnNldCA9IGlubGluZUJveC0+Y2FyZXRNYXhPZmZzZXQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAg
aW5saW5lQm94ID0gcmVuZGVyZXItPmlzQm94KCkgPyB0b1JlbmRlckJveChyZW5kZXJlciktPmlu
bGluZUJveFdyYXBwZXIoKSA6IDA7CiAgICAgICAgIGlmICghaW5saW5lQm94IHx8IChjYXJldE9m
ZnNldCA+IGlubGluZUJveC0+Y2FyZXRNaW5PZmZzZXQoKSAmJiBjYXJldE9mZnNldCA8IGlubGlu
ZUJveC0+Y2FyZXRNYXhPZmZzZXQoKSkpCiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJD
b3JlL2RvbS9Qb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJ
KHJldmlzaW9uIDUxMjI0KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNiArNTYsMTEgQEAgcHVibGljOgogICAgICAgICBQb3NpdGlvbklzQmVmb3JlQW5j
aG9yCiAgICAgfTsKIAorICAgIGVudW0gRWRpdGluZ0JvdW5kYXJpZXMgeworICAgICAgICBBbGxv
d0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nLAorICAgICAgICBEb250QWxsb3dFZGl0aW5nQm91bmRh
cnlDcm9zc2luZworICAgIH07CisgICAgCiAgICAgUG9zaXRpb24oKQogICAgICAgICA6IG1fb2Zm
c2V0KDApCiAgICAgICAgICwgbV9hbmNob3JUeXBlKFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikK
QEAgLTEyOSw3ICsxMzQsOCBAQCBwdWJsaWM6CiAgICAgLy8gaWYgdGhlIG5vZGUgaXMgaWdub3Jl
ZCBieSBlZGl0aW5nIG9yIG5vdC4KICAgICBib29sIGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKCkgY29uc3Q7CiAgICAgYm9vbCBhdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgY29u
c3Q7Ci0KKyAgICBib29sIGF0RWRpdGluZ0JvdW5kYXJ5KCkgY29uc3Q7CisgICAgCiAgICAgYm9v
bCBhdFN0YXJ0T2ZUcmVlKCkgY29uc3Q7CiAgICAgYm9vbCBhdEVuZE9mVHJlZSgpIGNvbnN0Owog
CkBAIC0xMzksOCArMTQ1LDggQEAgcHVibGljOgogICAgIFBvc2l0aW9uIHRyYWlsaW5nV2hpdGVz
cGFjZVBvc2l0aW9uKEVBZmZpbml0eSwgYm9vbCBjb25zaWRlck5vbkNvbGxhcHNpYmxlV2hpdGVz
cGFjZSA9IGZhbHNlKSBjb25zdDsKICAgICAKICAgICAvLyBUaGVzZSByZXR1cm4gdXNlZnVsIHZp
c3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb25zLgotICAgIFBvc2l0aW9uIHVwc3RyZWFtKCkgY29u
c3Q7Ci0gICAgUG9zaXRpb24gZG93bnN0cmVhbSgpIGNvbnN0OworICAgIFBvc2l0aW9uIHVwc3Ry
ZWFtKEVkaXRpbmdCb3VuZGFyaWVzID0gRG9udEFsbG93RWRpdGluZ0JvdW5kYXJ5Q3Jvc3Npbmcp
IGNvbnN0OworICAgIFBvc2l0aW9uIGRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJpZXMgPSBEb250
QWxsb3dFZGl0aW5nQm91bmRhcnlDcm9zc2luZykgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBpc0Nh
bmRpZGF0ZSgpIGNvbnN0OwogICAgIGJvb2wgaW5SZW5kZXJlZFRleHQoKSBjb25zdDsKSW5kZXg6
IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL1Bvc2l0aW9uSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA1MTIyNCkKKysrIFdlYkNvcmUvZG9t
L1Bvc2l0aW9uSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDE1IEBA
IGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6YXRFbmRPZk5vZGUoKSBjb24KICAgICByZXR1cm4gbV9h
bmNob3JOb2RlLT5oYXNDaGlsZE5vZGVzKCkgfHwgbV9vZmZzZXRJbkFuY2hvciA+PSBsYXN0T2Zm
c2V0Rm9yRWRpdGluZyhtX2FuY2hvck5vZGUpOwogfQogCitib29sIFBvc2l0aW9uSXRlcmF0b3I6
OmF0RWRpdGluZ0JvdW5kYXJ5KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYW5jaG9yTm9kZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBQb3NpdGlvbiBwb3MgPSAqdGhpczsK
KyAgICByZXR1cm4gcG9zLmF0RWRpdGluZ0JvdW5kYXJ5KCk7Cit9CisgICAgCiBib29sIFBvc2l0
aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uc3QKIHsKICAgICBpZiAoIW1fYW5jaG9yTm9k
ZSkKQEAgLTE1NiwxMCArMTY1LDE0IEBAIGJvb2wgUG9zaXRpb25JdGVyYXRvcjo6aXNDYW5kaWRh
dGUoKSBjb24KICAgICBpZiAoaXNUYWJsZUVsZW1lbnQobV9hbmNob3JOb2RlKSB8fCBlZGl0aW5n
SWdub3Jlc0NvbnRlbnQobV9hbmNob3JOb2RlKSkKICAgICAgICAgcmV0dXJuIChhdFN0YXJ0T2ZO
b2RlKCkgfHwgYXRFbmRPZk5vZGUoKSkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9u
ZShtX2FuY2hvck5vZGUtPnBhcmVudCgpKTsKIAotICAgIGlmICghbV9hbmNob3JOb2RlLT5oYXNU
YWdOYW1lKGh0bWxUYWcpICYmIHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpICYmICFQb3NpdGlvbjo6
aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhIZWlnaHQocmVuZGVyZXIpICYm
Ci0gICAgICAgKHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5oZWlnaHQoKSB8fCBtX2FuY2hvck5v
ZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpKQotICAgICAgICByZXR1cm4gYXRTdGFydE9mTm9kZSgp
ICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlKTsKLSAgICAK
KyAgICBpZiAoIW1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiByZW5kZXJlci0+
aXNCbG9ja0Zsb3coKSkgeworICAgICAgICBpZiAodG9SZW5kZXJCbG9jayhyZW5kZXJlciktPmhl
aWdodCgpIHx8IG1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSkgeworICAgICAgICAg
ICAgaWYgKCFQb3NpdGlvbjo6aGFzUmVuZGVyZWROb25Bbm9ueW1vdXNEZXNjZW5kYW50c1dpdGhI
ZWlnaHQocmVuZGVyZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBhdFN0YXJ0T2ZOb2RlKCkg
JiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX2FuY2hvck5vZGUpOworICAgICAg
ICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhUG9zaXRp
b246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG1fYW5jaG9yTm9kZSkgJiYgYXRFZGl0aW5nQm91bmRh
cnkoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDog
V2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L1Bvc2l0aW9uSXRlcmF0b3IuaAkocmV2aXNpb24gNTEyMjQpCisrKyBXZWJDb3JlL2RvbS9Qb3Np
dGlvbkl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgcHVibGljOgog
ICAgIGJvb2wgYXRFbmQoKSBjb25zdDsKICAgICBib29sIGF0U3RhcnRPZk5vZGUoKSBjb25zdDsK
ICAgICBib29sIGF0RW5kT2ZOb2RlKCkgY29uc3Q7CisgICAgYm9vbCBhdEVkaXRpbmdCb3VuZGFy
eSgpIGNvbnN0OwogICAgIGJvb2wgaXNDYW5kaWRhdGUoKSBjb25zdDsKIAogcHJpdmF0ZToKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNTEyMjQpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzY3LDgg
KzIzNjcsMTggQEAgUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlck9iamVjdDo6b2ZmcwogVmlz
aWJsZVBvc2l0aW9uIFJlbmRlck9iamVjdDo6Y3JlYXRlVmlzaWJsZVBvc2l0aW9uKGludCBvZmZz
ZXQsIEVBZmZpbml0eSBhZmZpbml0eSkKIHsKICAgICAvLyBJZiB0aGlzIGlzIGEgbm9uLWFub255
bW91cyByZW5kZXJlciwgdGhlbiBpdCdzIHNpbXBsZS4KLSAgICBpZiAoTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKSkKKyAgICBpZiAoTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKSkgeworICAgICAg
ICBpZiAoIW5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgICAgIFBvc2l0aW9u
IHBvcyhub2RlLCBvZmZzZXQpOworICAgICAgICAgICAgUG9zaXRpb24gY2FuZGlkYXRlID0gcG9z
LmRvd25zdHJlYW0oUG9zaXRpb246OkFsbG93RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmcpOworICAg
ICAgICAgICAgaWYgKGNhbmRpZGF0ZS5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihjYW5kaWRhdGUsIGFmZmluaXR5KTsK
KyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHBvcy51cHN0cmVhbShQb3NpdGlvbjo6QWxsb3dFZGl0
aW5nQm91bmRhcnlDcm9zc2luZyk7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLm5vZGUoKS0+
aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBhZmZpbml0eSk7CisgICAgfQogCiAgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBjcm9zcyB0aGUgYm91bmRhcnkgYmV0d2VlbiBlZGl0YWJsZSBhbmQgbm9u
LWVkaXRhYmxlCiAgICAgLy8gcmVnaW9ucyBvZiB0aGUgZG9jdW1lbnQsIGJ1dCB0aGF0IGlzIGVp
dGhlciBpbXBvc3NpYmxlIG9yIGF0IGxlYXN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAkocmV2aXNpb24gNTEyMjQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzU3LDYgKzc1NywxNiBAQCB2b2lkIFJlbmRlclRleHQ6OmNhbGNQ
cmVmV2lkdGhzKGludCBsZWFkCiAgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAor
Ym9vbCBSZW5kZXJUZXh0Ojppc0FsbENvbGxhcHNpYmxlV2hpdGVzcGFjZSgpCit7CisgICAgaW50
IGxlbiA9IHRleHRMZW5ndGgoKTsKKyAgICBjb25zdCBVQ2hhciogdHh0ID0gY2hhcmFjdGVycygp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgIGlmICghc3R5bGUo
KS0+aXNDb2xsYXBzaWJsZVdoaXRlU3BhY2UodHh0W2ldKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKIGJvb2wgUmVuZGVyVGV4dDo6Y29udGFp
bnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0CiB7CiAg
ICAgdW5zaWduZWQgY3VyclBvczsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9u
IDUxMjI0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjEsNyArMTIxLDggQEAgcHVibGljOgogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgp
OwotCisgICAgYm9vbCBpc0FsbENvbGxhcHNpYmxlV2hpdGVzcGFjZSgpOworICAgIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBj
b25zdCBSZW5kZXJTdHlsZSopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CkluZGV4OiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy81MzkwNjgxLTItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2RlbGV0
aW5nLzUzOTA2ODEtMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUxMjI0KQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVsZXRpbmcvNTM5MDY4MS0yLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMTYsMyArMTYsNCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDIweDE4CiAgICAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjB4MTgKICAgICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIwOiAiYmFyIgorY2FyZXQ6IHBvc2l0aW9uIDAgb2Yg
Y2hpbGQgMiB7RElWfSBvZiBjaGlsZCAxIHtCT0RZfSBvZiBjaGlsZCAwIHtIVE1MfSBvZiBkb2N1
bWVudAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43818</attachid>
            <date>2009-11-24 17:55:02 -0800</date>
            <delta_ts>2009-11-30 13:10:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug5982901.txt</filename>
            <type>text/plain</type>
            <size>34362</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTM2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDktMTEtMjQgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YW4gZm9jdXMgYnV0IG5vdCB0eXBlIGludG8gY29udGVudCBlZGl0YWJsZSBibG9jayB0aGF0IGNv
bnRhaW5zIG9ubHkgbm9uLWVkaXRhYmxlIGNvbnRlbnQuCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS81OTgyOTAxPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE3NTAKKyAgICAgICAgCisgICAgICAgIFRoZSBnb2FsIGlzIHRvIGNoYW5nZSB0aGUgd2F5
IHdlIGNob29zZSBhIHZpc2libGUgcG9zaXRpb24KKyAgICAgICAgYWZ0ZXIgaGl0IGRldGVjdGlv
biwgYnkgcHJlZmVycmluZyBhIHZpc3VhbGx5IGVxdWl2YWxlbnQgZWRpdGFibGUKKyAgICAgICAg
cG9zaXRpb24gaWYgYXZhaWxhYmxlLiBCeSBkb2luZyB0aGlzLCBpdCBpcyBwb3NzaWJsZSB0byBh
ZGQgY29udGVudAorICAgICAgICB0byBhbiBlZGl0YWJsZSBibG9jayB0aGF0IGluaXRpYWxseSBj
b250YWlucyBvbmx5IG5vbiBlZGl0YWJsZSBlbGVtZW50cy4KKworICAgICAgICBUZXN0OiBlZGl0
aW5nL3NlbGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0eS0xMC5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLmJhc2UuZXhwOiBDaGFuZ2VkIHRvIG1hdGNoIHRoZSBuZXcgc2lnbmF0dXJlIG9mIGRvd25z
dHJlYW0KKyAgICAgICAgYW5kIHVwc3RyZWFtIGluIHRoZSBQb3NpdGlvbiBjbGFzcy4KKyAgICAg
ICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0RWRp
dGluZ0JvdW5kYXJ5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6dXBzdHJl
YW0pOiBNb2RpZmllZCB0byBhbGxvdyB0byBjcm9zcyB0aGUgYm91bmRhcnkKKyAgICAgICAgYmV0
d2VlbiBlZGl0YWJsZSBhbmQgbm9uIGVkaXRhYmxlIGNvbnRlbnQgaWYgcmVxdWlyZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVhbSk6IE1vZGlmaWVkIHRvIGFsbG93IHRv
IGNyb3NzIHRoZSBib3VuZGFyeQorICAgICAgICBiZXR3ZWVuIGVkaXRhYmxlIGFuZCBub24gZWRp
dGFibGUgY29udGVudCBpZiByZXF1aXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpp
c0NhbmRpZGF0ZSk6IE1vZGlmaWVkIHRvIHF1YWxpZnkgYXMgY2FuZGlkYXRlcyBwb3NpdGlvbnMK
KyAgICAgICAgdGhhdCBhcmUgYXQgdGhlIGVkaXRhYmlsaXR5IGJvdW5kYXJ5LgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldCk6IE1vZGlmaWVkIHRvIHJl
dHJpZXZlIHRoZSBpbmxpbmUgYm94CisgICAgICAgIHRvIGJlIHVzZWQgaW4gY2FsY3VsYXRpbmcg
dGhlIGNhcmV0IHJlY3RhbmdsZS4KKyAgICAgICAgKiBkb20vUG9zaXRpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjopOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmF0RWRpdGluZ0JvdW5kYXJ5
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0
ZSk6IE1vZGlmaWVkIHRvIHF1YWxpZnkgYXMgY2FuZGlkYXRlcyBwb3NpdGlvbnMKKyAgICAgICAg
dGhhdCBhcmUgYXQgdGhlIGVkaXRhYmlsaXR5IGJvdW5kYXJ5LgorICAgICAgICAqIGRvbS9Qb3Np
dGlvbkl0ZXJhdG9yLmg6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KTog
TW9kaWZpZWQgdG8gYWNjZXB0IG5vdCBvbmx5CisgICAgICAgIGRlc2NlbmRhbnRzIG9mIHRoZSBl
ZGl0YWJsZSBjb250YWluZXIsIGJ1dCB0aGUgY29udGFpbmVyIGl0c2VsZi4KKyAgICAgICAgKFdl
YkNvcmU6Omxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QpOiBNb2RpZmll
ZCB0byBhY2NlcHQgbm90IG9ubHkKKyAgICAgICAgZGVzY2VuZGFudHMgb2YgdGhlIGVkaXRhYmxl
IGNvbnRhaW5lciwgYnV0IHRoZSBjb250YWluZXIgaXRzZWxmLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVh
dGVWaXNpYmxlUG9zaXRpb24pOiBBZGRlZCBsb2dpYyB0byBwcmVmZXIgYW4gZWRpdGFibGUgcG9z
aXRpb24sCisgICAgICAgIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojppc0FsbENvbGxhcHNpYmxl
V2hpdGVzcGFjZSk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisK
IDIwMDktMTEtMjQgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgTm8gcmV2aWV3LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNTEzNDcpCisrKyBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTk2NCwxMCArOTY0LDEwIEBA
IF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQzMWRpc3BsYXlTdHJpbmdNb2QKIF9fWk5LN1dlYkNvcmU4
RG9jdW1lbnQ0Ym9keUV2CiBfX1pOSzdXZWJDb3JlOERvY3VtZW50NmRvbWFpbkV2CiBfX1pOSzdX
ZWJDb3JlOEludFBvaW50Y3Y4X05TUG9pbnRFdgotX19aTks3V2ViQ29yZThQb3NpdGlvbjEwZG93
bnN0cmVhbUV2CiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjVsZWFkaW5nV2hpdGVzcGFjZVBvc2l0
aW9uRU5TXzlFQWZmaW5pdHlFYgogX19aTks3V2ViQ29yZThQb3NpdGlvbjI2dHJhaWxpbmdXaGl0
ZXNwYWNlUG9zaXRpb25FTlNfOUVBZmZpbml0eUViCi1fX1pOSzdXZWJDb3JlOFBvc2l0aW9uOHVw
c3RyZWFtRXYKK19fWk5LN1dlYkNvcmU4UG9zaXRpb24xMGRvd25zdHJlYW1FTlMwXzI3RWRpdGlu
Z0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQorX19aTks3V2ViQ29yZThQb3NpdGlvbjh1cHN0cmVhbUVO
UzBfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlOURPTVdpbmRv
dzI3cGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJzRXYKIF9fWk5LN1dlYkNvcmU5RmxvYXRSZWN0
Y3Y3X05TUmVjdEV2CiBfX1pOSzdXZWJDb3JlOUZyYW1lVHJlZTEydHJhdmVyc2VOZXh0RVBLTlNf
NUZyYW1lRQpJbmRleDogV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gNTEzNDcpCisrKyBXZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw2ICszMDcsMjcgQEAgYm9vbCBQb3Np
dGlvbjo6YXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTgogICAgIHJldHVybiBtX29mZnNldCA+PSBs
YXN0T2Zmc2V0Rm9yRWRpdGluZyhub2RlKCkpOwogfQogCisvLyBBIHBvc2l0aW9uIGlzIGNvbnNp
ZGVyZWQgYXQgZWRpdGluZyBib3VuZGFyeSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVl
OiIKKy8vIDEuIGl0IGlzIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgbm9kZSBhbmQgdGhlIG5l
eHQgdmlzdWFsbHkgZXF1aXZhbGVudCBwb3NpdGlvbgorLy8gICAgaXMgbm9uIGVkaXRhYmxlCisv
LyAyLiBpdCBpcyB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbm9kZSBhbmQgdGhlIHByZXZpb3Vz
IHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb24KKy8vICAgIGlzIG5vbiBlZGl0YWJsZQorLy8g
My4gaXMgaXMgYW4gZWRpdGFibGUgcG9zaXRpb24gYW5kIGJvdGggdGhlIG5leHQgYW5kIHByZXZp
b3VzIHZpc3VhbGx5IGVxdWl2YWxlbnQKKy8vICAgIHBvc2l0aW9ucyBhcmUgYm90aCBub24gZWRp
dGFibGUKK2Jvb2wgUG9zaXRpb246OmF0RWRpdGluZ0JvdW5kYXJ5KCkgY29uc3QKK3sKKyAgICBQ
b3NpdGlvbiBuZXh0UG9zaXRpb24gPSBkb3duc3RyZWFtKENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5
KTsKKyAgICBpZiAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBuZXh0UG9zaXRp
b24uaXNOb3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxl
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBQb3NpdGlvbiBwcmV2UG9z
aXRpb24gPSB1cHN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgaWYgKGF0TGFz
dEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYg
IXByZXZQb3NpdGlvbi5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAKKyAgICByZXR1cm4gKG5leHRQb3NpdGlvbi5pc05vdE51bGwoKSAm
JiAhbmV4dFBvc2l0aW9uLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkgJiYKKyAgICAgICAg
ICAgKHByZXZQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0aW9uLm5vZGUoKS0+aXND
b250ZW50RWRpdGFibGUoKSk7Cit9CisKIGJvb2wgUG9zaXRpb246OmF0U3RhcnRPZlRyZWUoKSBj
b25zdAogewogICAgIGlmIChpc051bGwoKSkKQEAgLTQ0OCw3ICs0NjksNyBAQCBzdGF0aWMgYm9v
bCBpc1N0cmVhbWVyKGNvbnN0IFBvc2l0aW9uSXRlCiAvLyBhbmQgZG93bnN0cmVhbSgpIHdpbGwg
cmV0dXJuIHRoZSByaWdodCBvbmUuCiAvLyBBbHNvLCB1cHN0cmVhbSgpIHdpbGwgcmV0dXJuIFti
b3VuZGFyeSwgMF0gZm9yIGFueSBvZiB0aGUgcG9zaXRpb25zIGZyb20gW2JvdW5kYXJ5LCAwXSB0
byB0aGUgZmlyc3QgY2FuZGlkYXRlCiAvLyBpbiBib3VuZGFyeSwgd2hlcmUgZW5kc09mTm9kZUFy
ZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoYm91bmRhcnkpIGlzIHRydWUuCi1Qb3NpdGlvbiBQ
b3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAorUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKEVk
aXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSB1cFJ1bGUpIGNvbnN0CiB7CiAgICAgTm9kZSogc3Rh
cnROb2RlID0gbm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQpAQCAtNDYwLDYgKzQ4MSw3IEBA
IFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiAgICAgUG9zaXRpb25JdGVyYXRv
ciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7CiAgICAgYm9vbCBzdGFydEVkaXRhYmxlID0gc3Rh
cnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogICAgIE5vZGUqIGxhc3ROb2RlID0gc3RhcnRO
b2RlOworICAgIGJvb2wgYm91bmRhcnlDcm9zc2VkID0gZmFsc2U7CiAgICAgZm9yICg7ICFjdXJy
ZW50UG9zLmF0U3RhcnQoKTsgY3VycmVudFBvcy5kZWNyZW1lbnQoKSkgewogICAgICAgICBOb2Rl
KiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwogICAgICAgICAKQEAgLTQ2OCw4ICs0
OTAsMTEgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAgICAgICAgaWYg
KGN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBEb24ndCBjaGFuZ2Ug
ZWRpdGFiaWxpdHkuCiAgICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9IGN1cnJlbnRO
b2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUg
IT0gY3VycmVudEVkaXRhYmxlKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
aWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVudEVkaXRhYmxlKSB7CisgICAgICAgICAgICAgICAg
aWYgKHVwUnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYm91bmRhcnlDcm9zc2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGxhc3ROb2RlID0gY3VycmVudE5vZGU7CiAgICAgICAg
IH0KIApAQCAtNDgzLDkgKzUwOCwxNCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBj
b25zdAogICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgaWYgKHVwUnVsZSA9PSBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSAmJiBib3Vu
ZGFyeUNyb3NzZWQpIHsKKyAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVudFBvczsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICAvLyB0cmFjayBs
YXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KICAgICAgICAgaWYgKGlzU3RyZWFtZXIoY3Vy
cmVudFBvcykpCi0gICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7CisgICAgICAg
ICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7ICAgICAgICAgICAgCiAgICAgICAgIAogICAg
ICAgICAvLyBEb24ndCBtb3ZlIHBhc3QgYSBwb3NpdGlvbiB0aGF0IGlzIHZpc3VhbGx5IGRpc3Rp
bmN0LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3ZlIHRvIHRlcm1pbmF0ZSBhbmQgCiAgICAg
ICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24sIGJ1dCB3ZSB0
ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgZG9pbmcgYSBub2RlSW5kZXgoKSBjYWxsLgpAQCAtNTYw
LDE4ICs1OTAsMTkgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKIC8vIGFu
ZCB1cHN0cmVhbSgpIHdpbGwgcmV0dXJuIHRoZSBsZWZ0IG9uZS4KIC8vIEFsc28sIGRvd25zdHJl
YW0oKSB3aWxsIHJldHVybiB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbGFzdCBhdG9taWMgbm9k
ZSBpbiBib3VuZGFyeSBmb3IgYWxsIG9mIHRoZSBwb3NpdGlvbnMKIC8vIGluIGJvdW5kYXJ5IGFm
dGVyIHRoZSBsYXN0IGNhbmRpZGF0ZSwgd2hlcmUgZW5kc09mTm9kZUFyZVZpc3VhbGx5RGlzdGlu
Y3RQb3NpdGlvbnMoYm91bmRhcnkpLgotUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oKSBj
b25zdAorUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3Np
bmdSdWxlIGRvd25SdWxlKSBjb25zdAogewogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG5vZGUoKTsK
ICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7Ci0KKyAgICAK
ICAgICAvLyBpdGVyYXRlIGZvcndhcmQgZnJvbSB0aGVyZSwgbG9va2luZyBmb3IgYSBxdWFsaWZp
ZWQgcG9zaXRpb24KICAgICBOb2RlKiBib3VuZGFyeSA9IGVuY2xvc2luZ1Zpc3VhbEJvdW5kYXJ5
KHN0YXJ0Tm9kZSk7CiAgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9ICp0aGlzOwog
ICAgIFBvc2l0aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwogICAgIGJvb2wg
c3RhcnRFZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsKICAgICBOb2Rl
KiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICBib29sIGJvdW5kYXJ5Q3Jvc3NlZCA9IGZhbHNl
OwogICAgIGZvciAoOyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zLmluY3JlbWVudCgp
KSB7ICAgCiAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gY3VycmVudFBvcy5ub2RlKCk7CiAg
ICAgICAgIApAQCAtNTgwLDE2ICs2MTEsMjAgQEAgUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJl
YW0oKSBjb25zdAogICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gbGFzdE5vZGUpIHsKICAgICAg
ICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4KICAgICAgICAgICAgIGJvb2wgY3Vy
cmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7Ci0gICAgICAg
ICAgICBpZiAoc3RhcnRFZGl0YWJsZSAhPSBjdXJyZW50RWRpdGFibGUpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RhcnRFZGl0YWJsZSAhPSBjdXJyZW50RWRpdGFi
bGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZG93blJ1bGUgPT0gQ2Fubm90Q3Jvc3NFZGl0aW5n
Qm91bmRhcnkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGJv
dW5kYXJ5Q3Jvc3NlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBsYXN0Tm9kZSA9IGN1cnJlbnROb2RlOwogICAgICAgICB9Ci0KKyAgICAgICAg
CiAgICAgICAgIC8vIHN0b3AgYmVmb3JlIGdvaW5nIGFib3ZlIHRoZSBib2R5LCB1cCBpbnRvIHRo
ZSBoZWFkCiAgICAgICAgIC8vIHJldHVybiB0aGUgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0
aW9uCiAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aGFzVGFnTmFtZShib2R5VGFnKSAmJiBjdXJy
ZW50UG9zLmF0RW5kT2ZOb2RlKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAor
ICAgICAgICAKICAgICAgICAgLy8gRG8gbm90IG1vdmUgdG8gYSB2aXN1YWxseSBkaXN0aW5jdCBw
b3NpdGlvbi4KICAgICAgICAgaWYgKGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3RpbmN0UG9zaXRp
b25zKGN1cnJlbnROb2RlKSAmJiBjdXJyZW50Tm9kZSAhPSBib3VuZGFyeSkKICAgICAgICAgICAg
IHJldHVybiBsYXN0VmlzaWJsZTsKQEAgLTU5OCwzMCArNjMzLDM1IEBAIFBvc2l0aW9uIFBvc2l0
aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKICAgICAgICAgLy8gcG9zaXRpb25zIHdpbGwgYmUgW2Jv
dW5kYXJ5LT5wYXJlbnROb2RlKCksIG9yaWdpbmFsQmxvY2stPm5vZGVJbmRleCgpICsgMV0uCiAg
ICAgICAgIGlmIChib3VuZGFyeSAmJiBib3VuZGFyeS0+cGFyZW50Tm9kZSgpID09IGN1cnJlbnRO
b2RlKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwotCisgICAgICAgIAogICAgICAg
ICAvLyBza2lwIHBvc2l0aW9uIGluIHVucmVuZGVyZWQgb3IgaW52aXNpYmxlIG5vZGUKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGN1cnJlbnROb2RlLT5yZW5kZXJlcigpOwogICAg
ICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCisgICAgICAgIAor
ICAgICAgICBpZiAoZG93blJ1bGUgPT0gQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkgJiYgYm91bmRh
cnlDcm9zc2VkKSB7CisgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gdHJhY2sgbGFz
dCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0aW9uCiAgICAgICAgIGlmIChpc1N0cmVhbWVyKGN1cnJl
bnRQb3MpKQogICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9zOwotCisgICAgICAg
IAogICAgICAgICAvLyBSZXR1cm4gcG9zaXRpb24gYmVmb3JlIHRhYmxlcyBhbmQgbm9kZXMgd2hp
Y2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJlIGlnbm9yZWQuCiAgICAgICAgIGlmIChlZGl0aW5n
SWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUpIHx8IGlzVGFibGVFbGVtZW50KGN1cnJlbnROb2Rl
KSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9kZSgpIDw9IHJl
bmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBQb3NpdGlv
bihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWluT2Zmc2V0KCkpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KLQorICAgICAgICAKICAgICAgICAgLy8gcmV0dXJuIGN1cnJl
bnQgcG9zaXRpb24gaWYgaXQgaXMgaW4gcmVuZGVyZWQgdGV4dAogICAgICAgICBpZiAocmVuZGVy
ZXItPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChyZW5kZXJlciktPmZpcnN0VGV4dEJveCgpKSB7
CiAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gc3RhcnROb2RlKSB7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgp
KTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25lZCB0
ZXh0T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCk7CiAgICAgICAgICAgICBS
ZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQocmVuZGVyZXIpOwogICAgICAg
ICAgICAgSW5saW5lVGV4dEJveCogbGFzdFRleHRCb3ggPSB0ZXh0UmVuZGVyZXItPmxhc3RUZXh0
Qm94KCk7CkBAIC02MzEsMTMgKzY3MSwxMyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVh
bSgpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFBvczsKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQotCisgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGJveCA9PSBsYXN0VGV4dEJveCB8fCB0ZXh0
T2Zmc2V0ICE9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gVGhlIHRl
eHQgY29udGludWVzIG9uIHRoZSBuZXh0IGxpbmUgb25seSBpZiB0aGUgbGFzdCB0ZXh0IGJveCBp
cyBub3Qgb24gdGhpcyBsaW5lIGFuZAogICAgICAgICAgICAgICAgIC8vIG5vbmUgb2YgdGhlIGJv
eGVzIG9uIHRoaXMgbGluZSBoYXZlIGEgbGFyZ2VyIHN0YXJ0IG9mZnNldC4KLQorICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGJvb2wgY29udGludWVzT25OZXh0TGluZSA9IHRydWU7
CiAgICAgICAgICAgICAgICAgSW5saW5lQm94KiBvdGhlckJveCA9IGJveDsKICAgICAgICAgICAg
ICAgICB3aGlsZSAoY29udGludWVzT25OZXh0TGluZSkgewpAQCAtNjQ3LDcgKzY4Nyw3IEBAIFBv
c2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAg
aWYgKG90aGVyQm94ID09IGxhc3RUZXh0Qm94IHx8IChvdGhlckJveC0+cmVuZGVyZXIoKSA9PSB0
ZXh0UmVuZGVyZXIgJiYgc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KG90aGVyQm94KS0+c3Rh
cnQoKSA+PSB0ZXh0T2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlc09u
TmV4dExpbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBvdGhlckJveCA9IGJveDsKICAgICAgICAgICAgICAgICB3aGlsZSAo
Y29udGludWVzT25OZXh0TGluZSkgewogICAgICAgICAgICAgICAgICAgICBvdGhlckJveCA9IG90
aGVyQm94LT5wcmV2TGVhZkNoaWxkKCk7CkBAIC02NTYsNyArNjk2LDcgQEAgUG9zaXRpb24gUG9z
aXRpb246OmRvd25zdHJlYW0oKSBjb25zdAogICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJC
b3ggPT0gbGFzdFRleHRCb3ggfHwgKG90aGVyQm94LT5yZW5kZXJlcigpID09IHRleHRSZW5kZXJl
ciAmJiBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4ob3RoZXJCb3gpLT5zdGFydCgpID49IHRl
eHRPZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVzT25OZXh0TGluZSA9
IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChjb250aW51ZXNPbk5leHRMaW5lKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3VycmVudFBvczsKICAgICAgICAgICAgIH0KQEAgLTY2NSw3ICs3MDUsNyBAQCBQb3NpdGlv
biBQb3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiAgICAgCiAgICAgcmV0dXJuIGxhc3RWaXNp
YmxlOwogfQotCisgICAgCiBib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rl
c2NlbmRhbnRzV2l0aEhlaWdodChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewogICAgIFJlbmRl
ck9iamVjdCogc3RvcCA9IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsK
QEAgLTY3Nyw3ICs3MTcsNyBAQCBib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91
c0RlCiAgICAgICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9Ci0KKyAgIAogYm9vbCBQb3NpdGlv
bjo6bm9kZUlzVXNlclNlbGVjdE5vbmUoTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbm9kZSAm
JiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCktPnVzZXJTZWxl
Y3QoKSA9PSBTRUxFQ1RfTk9ORTsKQEAgLTcwNCwxMCArNzQ0LDE0IEBAIGJvb2wgUG9zaXRpb246
OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAgICBpZiAoaXNUYWJsZUVsZW1lbnQobm9kZSgpKSB8fCBl
ZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSgpKSkKICAgICAgICAgcmV0dXJuIChhdEZpcnN0RWRp
dGluZ1Bvc2l0aW9uRm9yTm9kZSgpIHx8IGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkg
JiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFyZW50KCkpOwogCi0gICAgaWYgKCFu
b2RlKCktPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYg
IWhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSAm
JgotICAgICAgICh0b1JlbmRlckJveChyZW5kZXJlciktPmhlaWdodCgpIHx8IG5vZGUoKS0+aGFz
VGFnTmFtZShib2R5VGFnKSkpCi0gICAgICAgIHJldHVybiBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9u
Rm9yTm9kZSgpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpOwotICAgIAorICAgIGlm
ICghbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmIHJlbmRlcmVyLT5pc0Jsb2Nr
RmxvdygpKSB7CisgICAgICAgIGlmICh0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+aGVpZ2h0KCkg
fHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CisgICAgICAgICAgICBpZiAo
IVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChy
ZW5kZXJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5nUG9zaXRpb25G
b3JOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhUG9z
aXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSkgJiYgYXRFZGl0aW5nQm91bmRhcnko
KTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTQ5LDcg
Kzk5MywyMiBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQoRUFmCiB7CiAg
ICAgY2FyZXRPZmZzZXQgPSBtX29mZnNldDsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICAgIAogICAgIGlmICghcmVuZGVyZXItPmlzVGV4
dCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiBoYXNSZW5kZXJl
ZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJlcikpIHsKKyAgICAgICAg
ICAgIGJvb2wgbGFzdFBvc2l0aW9uID0gKGNhcmV0T2Zmc2V0ID09IGxhc3RPZmZzZXRJbk5vZGUo
bm9kZSgpKSk7CisgICAgICAgICAgICBOb2RlKiBzdGFydE5vZGUgPSAobGFzdFBvc2l0aW9uKT8g
bm9kZSgpLT5jaGlsZE5vZGUoY2FyZXRPZmZzZXQgLSAxKTogbm9kZSgpLT5jaGlsZE5vZGUoY2Fy
ZXRPZmZzZXQpOworICAgICAgICAgICAgd2hpbGUgKHN0YXJ0Tm9kZSAmJiAoIXN0YXJ0Tm9kZS0+
cmVuZGVyZXIoKSB8fCAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkgJiYgdG9SZW5kZXJUZXh0KHN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKSktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNlKCkpKSkKKyAg
ICAgICAgICAgICAgICBzdGFydE5vZGUgPSAobGFzdFBvc2l0aW9uKT8gc3RhcnROb2RlLT5wcmV2
aW91c1NpYmxpbmcoKTogc3RhcnROb2RlLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgaWYg
KHN0YXJ0Tm9kZSkgeworICAgICAgICAgICAgICAgIFBvc2l0aW9uIHBvcyhzdGFydE5vZGUsIDAp
OworICAgICAgICAgICAgICAgIHBvcyA9IHBvcy5kb3duc3RyZWFtKENhbkNyb3NzRWRpdGluZ0Jv
dW5kYXJ5KTsKKyAgICAgICAgICAgICAgICBwb3MuZ2V0SW5saW5lQm94QW5kT2Zmc2V0KFVQU1RS
RUFNLCBwcmltYXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBpZiAobGFzdFBvc2l0aW9uICYmIGlubGluZUJveCkKKyAgICAgICAgICAgICAgICAg
ICAgY2FyZXRPZmZzZXQgPSBpbmxpbmVCb3gtPmNhcmV0TWF4T2Zmc2V0KCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGlubGluZUJv
eCA9IHJlbmRlcmVyLT5pc0JveCgpID8gdG9SZW5kZXJCb3gocmVuZGVyZXIpLT5pbmxpbmVCb3hX
cmFwcGVyKCkgOiAwOwogICAgICAgICBpZiAoIWlubGluZUJveCB8fCAoY2FyZXRPZmZzZXQgPiBp
bmxpbmVCb3gtPmNhcmV0TWluT2Zmc2V0KCkgJiYgY2FyZXRPZmZzZXQgPCBpbmxpbmVCb3gtPmNh
cmV0TWF4T2Zmc2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9kb20v
UG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5oCShyZXZpc2lv
biA1MTM0NykKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDExIEBAIHB1YmxpYzoKICAgICAgICAgUG9zaXRpb25Jc0JlZm9yZUFuY2hvcgogICAg
IH07CiAKKyAgICBlbnVtIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSB7CisgICAgICAgIENh
bkNyb3NzRWRpdGluZ0JvdW5kYXJ5LAorICAgICAgICBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFy
eQorICAgIH07CisgICAgCiAgICAgUG9zaXRpb24oKQogICAgICAgICA6IG1fb2Zmc2V0KDApCiAg
ICAgICAgICwgbV9hbmNob3JUeXBlKFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKQEAgLTEyOSw3
ICsxMzQsMTAgQEAgcHVibGljOgogICAgIC8vIGlmIHRoZSBub2RlIGlzIGlnbm9yZWQgYnkgZWRp
dGluZyBvciBub3QuCiAgICAgYm9vbCBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpIGNv
bnN0OwogICAgIGJvb2wgYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpIGNvbnN0OwotCisg
ICAgCisgICAgLy8gUmV0dW5zIHRydWUgaWYgdGhlIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRp
b25zIGFyb3VuZCBoYXZlIGRpZmZlcmVudCBlZGl0YWJpbGl0eQorICAgIGJvb2wgYXRFZGl0aW5n
Qm91bmRhcnkoKSBjb25zdDsKKyAgICAKICAgICBib29sIGF0U3RhcnRPZlRyZWUoKSBjb25zdDsK
ICAgICBib29sIGF0RW5kT2ZUcmVlKCkgY29uc3Q7CiAKQEAgLTEzOSw4ICsxNDcsOCBAQCBwdWJs
aWM6CiAgICAgUG9zaXRpb24gdHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFmZmluaXR5LCBi
b29sIGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID0gZmFsc2UpIGNvbnN0OwogICAg
IAogICAgIC8vIFRoZXNlIHJldHVybiB1c2VmdWwgdmlzdWFsbHkgZXF1aXZhbGVudCBwb3NpdGlv
bnMuCi0gICAgUG9zaXRpb24gdXBzdHJlYW0oKSBjb25zdDsKLSAgICBQb3NpdGlvbiBkb3duc3Ry
ZWFtKCkgY29uc3Q7CisgICAgUG9zaXRpb24gdXBzdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3Np
bmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpIGNvbnN0OworICAgIFBvc2l0aW9u
IGRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0
aW5nQm91bmRhcnkpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaXNDYW5kaWRhdGUoKSBjb25zdDsK
ICAgICBib29sIGluUmVuZGVyZWRUZXh0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Qb3Np
dGlvbkl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJh
dG9yLmNwcAkocmV2aXNpb24gNTEzNDcpCisrKyBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSwxNCBAQCBib29sIFBvc2l0aW9uSXRl
cmF0b3I6OmF0RW5kT2ZOb2RlKCkgY29uCiAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aGFzQ2hp
bGROb2RlcygpIHx8IG1fb2Zmc2V0SW5BbmNob3IgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcobV9h
bmNob3JOb2RlKTsKIH0KIAorYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjphdEVkaXRpbmdCb3VuZGFy
eSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2FuY2hvck5vZGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgcmV0dXJuIFBvc2l0aW9uKCp0aGlzKS5hdEVkaXRpbmdCb3VuZGFy
eSgpOworfQorICAgIAogYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0ZSgpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2FuY2hvck5vZGUpCkBAIC0xNTYsMTAgKzE2NCwxNCBAQCBib29sIFBv
c2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uCiAgICAgaWYgKGlzVGFibGVFbGVtZW50
KG1fYW5jaG9yTm9kZSkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG1fYW5jaG9yTm9kZSkpCiAg
ICAgICAgIHJldHVybiAoYXRTdGFydE9mTm9kZSgpIHx8IGF0RW5kT2ZOb2RlKCkpICYmICFQb3Np
dGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlLT5wYXJlbnQoKSk7CiAKLSAg
ICBpZiAoIW1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiByZW5kZXJlci0+aXNC
bG9ja0Zsb3coKSAmJiAhUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFu
dHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSAmJgotICAgICAgICh0b1JlbmRlckJsb2NrKHJlbmRlcmVy
KS0+aGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSkKLSAgICAg
ICAgcmV0dXJuIGF0U3RhcnRPZk5vZGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3RO
b25lKG1fYW5jaG9yTm9kZSk7Ci0gICAgCisgICAgaWYgKCFtX2FuY2hvck5vZGUtPmhhc1RhZ05h
bWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkpIHsKKyAgICAgICAgaWYgKHRv
UmVuZGVyQmxvY2socmVuZGVyZXIpLT5oZWlnaHQoKSB8fCBtX2FuY2hvck5vZGUtPmhhc1RhZ05h
bWUoYm9keVRhZykpIHsKKyAgICAgICAgICAgIGlmICghUG9zaXRpb246Omhhc1JlbmRlcmVkTm9u
QW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYXRTdGFydE9mTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5v
bmUobV9hbmNob3JOb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5vZGUtPmlzQ29u
dGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShtX2FuY2hv
ck5vZGUpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRlcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmgJKHJldmlzaW9uIDUx
MzQ3KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGF0RW5kKCkgY29uc3Q7CiAgICAgYm9v
bCBhdFN0YXJ0T2ZOb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBhdEVuZE9mTm9kZSgpIGNvbnN0Owor
ICAgIGJvb2wgYXRFZGl0aW5nQm91bmRhcnkoKSBjb25zdDsKICAgICBib29sIGlzQ2FuZGlkYXRl
KCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlz
aW9uIDUxMzQ3KQorKysgV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIFZpc2libGVQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9z
aXRpb25BZnQKICAgICB3aGlsZSAocC5ub2RlKCkgJiYgIWlzRWRpdGFibGVQb3NpdGlvbihwKSAm
JiBwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICBwID0gaXNB
dG9taWNOb2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUocC5ub2RlKCkp
IDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CiAgICAgCi0gICAgaWYgKHAubm9k
ZSgpICYmICFwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQorICAgIGlmIChw
Lm5vZGUoKSAmJiBwLm5vZGUoKSAhPSBoaWdoZXN0Um9vdCAmJiAhcC5ub2RlKCktPmlzRGVzY2Vu
ZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwog
ICAgIAogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocCk7CkBAIC0zMTAsNyArMzEwLDcgQEAg
VmlzaWJsZVBvc2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmbwogICAgIHdoaWxlIChwLm5v
ZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAubm9kZSgpLT5pc0Rlc2NlbmRhbnRP
ZihoaWdoZXN0Um9vdCkpCiAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5ub2RlKCkpID8gcG9z
aXRpb25JblBhcmVudEJlZm9yZU5vZGUocC5ub2RlKCkpIDogcHJldmlvdXNWaXN1YWxseURpc3Rp
bmN0Q2FuZGlkYXRlKHApOwogICAgIAotICAgIGlmIChwLm5vZGUoKSAmJiAhcC5ub2RlKCktPmlz
RGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKKyAgICBpZiAocC5ub2RlKCkgJiYgcC5ub2RlKCkg
IT0gaGlnaGVzdFJvb3QgJiYgIXAubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkp
CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKHApOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZp
c2lvbiA1MTM0NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNjcsOCArMjM2NywxOSBAQCBSZW5kZXJCb3hNb2RlbE9iamVjdCogUmVu
ZGVyT2JqZWN0OjpvZmZzCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0OjpjcmVhdGVWaXNp
YmxlUG9zaXRpb24oaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5KQogewogICAgIC8vIElm
IHRoaXMgaXMgYSBub24tYW5vbnltb3VzIHJlbmRlcmVyLCB0aGVuIGl0J3Mgc2ltcGxlLgotICAg
IGlmIChOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpKQorICAgIGlmIChOb2RlKiBub2RlID0gdGhp
cy0+bm9kZSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSkgewor
ICAgICAgICAgICAgLy8gcHJlZmVyIGEgdmlzdWFsbHkgZXF1aXZhbGVudCBwb3NpdGlvbiB0aGF0
IGlzIGVkaXRhYmxlCisgICAgICAgICAgICBQb3NpdGlvbiBwb3Mobm9kZSwgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBvcy5kb3duc3RyZWFtKFBvc2l0aW9uOjpD
YW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLm5vZGUo
KS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOworICAgICAgICAgICAgY2FuZGlkYXRlID0gcG9z
LnVwc3RyZWFtKFBvc2l0aW9uOjpDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgICAg
ICBpZiAoY2FuZGlkYXRlLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOworICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0LCBhZmZpbml0
eSk7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcm9zcyB0aGUgYm91bmRhcnkg
YmV0d2VlbiBlZGl0YWJsZSBhbmQgbm9uLWVkaXRhYmxlCiAgICAgLy8gcmVnaW9ucyBvZiB0aGUg
ZG9jdW1lbnQsIGJ1dCB0aGF0IGlzIGVpdGhlciBpbXBvc3NpYmxlIG9yIGF0IGxlYXN0CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gNTEzNDcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDYgKzc1NywxNiBA
QCB2b2lkIFJlbmRlclRleHQ6OmNhbGNQcmVmV2lkdGhzKGludCBsZWFkCiAgICAgc2V0UHJlZldp
ZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAorYm9vbCBSZW5kZXJUZXh0Ojppc0FsbENvbGxhcHNpYmxl
V2hpdGVzcGFjZSgpCit7CisgICAgaW50IGxlbiA9IHRleHRMZW5ndGgoKTsKKyAgICBjb25zdCBV
Q2hhciogdHh0ID0gY2hhcmFjdGVycygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBp
KyspCisgICAgICAgIGlmICghc3R5bGUoKS0+aXNDb2xsYXBzaWJsZVdoaXRlU3BhY2UodHh0W2ld
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAK
IGJvb2wgUmVuZGVyVGV4dDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBsZW4pIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgY3VyclBvczsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDUxMzQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDggQEAgcHVibGljOgogICAg
IHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGNhbGNQ
cmVmV2lkdGhzKGludCBsZWFkV2lkdGgpOwotCisgICAgYm9vbCBpc0FsbENvbGxhcHNpYmxlV2hp
dGVzcGFjZSgpOworICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZVdpbGxD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSopIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTM2NykKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDA5LTExLTI0ICBFbnJp
Y2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ2FuIGZvY3VzIGJ1dCBub3QgdHlwZSBpbnRvIGNvbnRl
bnQgZWRpdGFibGUgYmxvY2sgdGhhdCBjb250YWlucyBvbmx5IG5vbi1lZGl0YWJsZSBjb250ZW50
LgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTk4MjkwMT4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNzUwCisKKyAgICAgICAgKiBlZGl0aW5nL3Nl
bGVjdGlvbi81ODI1MzUwLTEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0
aW9uLzU4MjUzNTAtMS5odG1sOiBNb2RpZmllZCB0byB1c2UgY2FyZXQgcmVjdGFuZ2xlLgorICAg
ICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uLzU4MjUzNTAtMi1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0yLmh0bWw6IE1vZGlmaWVkIHRvIHVzZSBjYXJl
dCByZWN0YW5nbGUuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbWl4ZWQtZWRpdGFiaWxp
dHktMTAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3NlbGVjdGlvbi9t
aXhlZC1lZGl0YWJpbGl0eS0xMC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
ZWRpdGluZy9kZWxldGluZy81MzkwNjgxLTItZXhwZWN0ZWQudHh0OiBSZS1iYXNlbGluZWQKKyAg
ICAgICAgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBwb3NzaWJsZSBjYXJldCBwb3NpdGlvbi4KKwog
MjAwOS0xMS0yNCAgRGFyaW4gRmlzaGVyICA8ZGFyaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVj
dGlvbi81ODI1MzUwLTEtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Vk
aXRpbmcvc2VsZWN0aW9uLzU4MjUzNTAtMS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUxMzQ3KQor
KysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0xLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMgQEAKLVRoaXMgdGVzdHMgZm9yIGEgYnVnIHdoZXJl
IG1vdmluZyB0aGUgY2FyZXQgbGVmdCB0b3dhcmRzIGEgbm9uLWVkaXRhYmxlIHBvY2tldCBvZiBh
biBlZGl0YWJsZSByZWdpb24gd291bGQgbWFrZSB0aGUgY2FyZXQgZGlzYXBwZWFyLiBUaGUgY2Fy
ZXQgc2hvdWxkIGJlIGp1c3QgYWZ0ZXIgdGhlICdiJyBpbiAiQm9iIi4KK1RoaXMgdGVzdHMgZm9y
IGEgYnVnIHdoZXJlIG1vdmluZyB0aGUgY2FyZXQgbGVmdCB0b3dhcmRzIGEgbm9uLWVkaXRhYmxl
IHBvY2tldCBvZiBhbiBlZGl0YWJsZSByZWdpb24gd291bGQgbWFrZSB0aGUgY2FyZXQgZGlzYXBw
ZWFyLiBUaGUgY2FyZXQgc2hvdWxkIGJlIGp1c3QgYmVmb3JlIHRoZSAnQicgaW4gIkJvYiIuCiAK
LUNhcmV0IE9uZTogKCIgOyAiLCAwKQorQ2FyZXQ6ICg4LCA1MzgpCkluZGV4OiBMYXlvdXRUZXN0
cy9lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTEuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTEuaHRtbAkocmV2aXNpb24gNTEzNDcpCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTEuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDQgQEAKLTxkaXYgaWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3RzIGZv
ciBhIGJ1ZyB3aGVyZSBtb3ZpbmcgdGhlIGNhcmV0IGxlZnQgdG93YXJkcyBhIG5vbi1lZGl0YWJs
ZSBwb2NrZXQgb2YgYW4gZWRpdGFibGUgcmVnaW9uIHdvdWxkIG1ha2UgdGhlIGNhcmV0IGRpc2Fw
cGVhci4gVGhlIGNhcmV0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHRoZSAnYicgaW4gIkJvYiIuPC9k
aXY+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+VGhpcyB0ZXN0cyBmb3IgYSBidWcgd2hlcmUgbW92
aW5nIHRoZSBjYXJldCBsZWZ0IHRvd2FyZHMgYSBub24tZWRpdGFibGUgcG9ja2V0IG9mIGFuIGVk
aXRhYmxlIHJlZ2lvbiB3b3VsZCBtYWtlIHRoZSBjYXJldCBkaXNhcHBlYXIuIFRoZSBjYXJldCBz
aG91bGQgYmUganVzdCBiZWZvcmUgdGhlICdCJyBpbiAiQm9iIi48L2Rpdj4KIDxkaXYgaWQ9ImVk
aXQiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+PHNwYW4gY29udGVudGVkaXRhYmxlPSJmYWxzZSI+
Qm9iPC9zcGFuPiA7IDxzcGFuIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPlNhbGx5PC9zcGFuPjwv
ZGl2PgogCiA8c2NyaXB0PgpAQCAtMTAsNiArMTAsOCBAQCB0ZXh0ID0gZWRpdC5jaGlsZE5vZGVz
WzFdOwogcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKIHMuc2V0UG9zaXRpb24odGV4dCwgMCk7
CiBzLm1vZGlmeSgibW92ZSIsICJsZWZ0IiwgImNoYXJhY3RlciIpOwotaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKLSAgICBkb2N1bWVudC5ib2R5LmlubmVyVGV4dCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJkZXNjcmlwdGlvbiIpLmlubmVyVGV4dCArICJcblxuQ2FyZXQgT25l
OiAoXCIiICsgcy5hbmNob3JOb2RlLmRhdGEgKyAiXCIsICIgKyBzLmFuY2hvck9mZnNldCArICIp
IjsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICB2YXIgY2FyZXRSZWN0
ID0gdGV4dElucHV0Q29udHJvbGxlci5maXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh0ZXh0SW5w
dXRDb250cm9sbGVyLnNlbGVjdGVkUmFuZ2UoKVswXSwgMCk7CisgICAgZG9jdW1lbnQuYm9keS5p
bm5lclRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVzY3JpcHRpb24iKS5pbm5lclRl
eHQgKyAiXG5cbkNhcmV0OiAoIiArIGNhcmV0UmVjdFswXSArICIsICIgKyBjYXJldFJlY3RbMV0g
KyAiKSI7Cit9CiA8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9u
LzU4MjUzNTAtMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGlu
Zy9zZWxlY3Rpb24vNTgyNTM1MC0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTEzNDcpCisrKyBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTItZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMyBAQAotVGhpcyB0ZXN0cyBmb3IgYSBidWcgd2hlcmUgbW92
aW5nIHRoZSBjYXJldCByaWdodCB0b3dhcmRzIGEgbm9uLWVkaXRhYmxlIHBvY2tldCBvZiBhbiBl
ZGl0YWJsZSByZWdpb24gd291bGQgbWFrZSB0aGUgY2FyZXQgZGlzYXBwZWFyLiBUaGUgY2FyZXQg
c2hvdWxkIGJlIGp1c3QgYmVmb3JlIHRoZSAnUycgaW4gIlNhbGx5Ii4KK1RoaXMgdGVzdHMgZm9y
IGEgYnVnIHdoZXJlIG1vdmluZyB0aGUgY2FyZXQgcmlnaHQgdG93YXJkcyBhIG5vbi1lZGl0YWJs
ZSBwb2NrZXQgb2YgYW4gZWRpdGFibGUgcmVnaW9uIHdvdWxkIG1ha2UgdGhlIGNhcmV0IGRpc2Fw
cGVhci4gVGhlIGNhcmV0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHRoZSAneScgaW4gIlNhbGx5Ii4K
IAotQ2FyZXQgT25lOiAoIiA7ICIsIDMpCitDYXJldDogKDc5LCA1MzgpCkluZGV4OiBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTIuaHRtbAkocmV2aXNpb24gNTEzNDcp
CisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTIuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLTxkaXYgaWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3Rz
IGZvciBhIGJ1ZyB3aGVyZSBtb3ZpbmcgdGhlIGNhcmV0IHJpZ2h0IHRvd2FyZHMgYSBub24tZWRp
dGFibGUgcG9ja2V0IG9mIGFuIGVkaXRhYmxlIHJlZ2lvbiB3b3VsZCBtYWtlIHRoZSBjYXJldCBk
aXNhcHBlYXIuIFRoZSBjYXJldCBzaG91bGQgYmUganVzdCBiZWZvcmUgdGhlICdTJyBpbiAiU2Fs
bHkiLjwvZGl2PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPlRoaXMgdGVzdHMgZm9yIGEgYnVnIHdo
ZXJlIG1vdmluZyB0aGUgY2FyZXQgcmlnaHQgdG93YXJkcyBhIG5vbi1lZGl0YWJsZSBwb2NrZXQg
b2YgYW4gZWRpdGFibGUgcmVnaW9uIHdvdWxkIG1ha2UgdGhlIGNhcmV0IGRpc2FwcGVhci4gVGhl
IGNhcmV0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHRoZSAneScgaW4gIlNhbGx5Ii48L2Rpdj4KIDxk
aXYgaWQ9ImVkaXQiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+PHNwYW4gY29udGVudGVkaXRhYmxl
PSJmYWxzZSI+Qm9iPC9zcGFuPiA7IDxzcGFuIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiPlNhbGx5
PC9zcGFuPjwvZGl2PgogCiA8c2NyaXB0PgpAQCAtMTAsNiArMTAsOCBAQCB0ZXh0ID0gZWRpdC5j
aGlsZE5vZGVzWzFdOwogcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKIHMuc2V0UG9zaXRpb24o
dGV4dCwgdGV4dC5sZW5ndGgpOwogcy5tb2RpZnkoIm1vdmUiLCAicmlnaHQiLCAiY2hhcmFjdGVy
Iik7Ci1pZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgIGRvY3VtZW50LmJvZHku
aW5uZXJUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc2NyaXB0aW9uIikuaW5uZXJU
ZXh0ICsgIlxuXG5DYXJldCBPbmU6IChcIiIgKyBzLmFuY2hvck5vZGUuZGF0YSArICJcIiwgIiAr
IHMuYW5jaG9yT2Zmc2V0ICsgIikiOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgIHZhciBjYXJldFJlY3QgPSB0ZXh0SW5wdXRDb250cm9sbGVyLmZpcnN0UmVjdEZvckNo
YXJhY3RlclJhbmdlKHRleHRJbnB1dENvbnRyb2xsZXIuc2VsZWN0ZWRSYW5nZSgpWzBdLCAwKTsK
KyAgICBkb2N1bWVudC5ib2R5LmlubmVyVGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJk
ZXNjcmlwdGlvbiIpLmlubmVyVGV4dCArICJcblxuQ2FyZXQ6ICgiICsgY2FyZXRSZWN0WzBdICsg
IiwgIiArIGNhcmV0UmVjdFsxXSArICIpIjsKK30KIDwvc2NyaXB0PgpJbmRleDogTGF5b3V0VGVz
dHMvZWRpdGluZy9zZWxlY3Rpb24vbWl4ZWQtZWRpdGFiaWxpdHktMTAtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21peGVkLWVkaXRhYmls
aXR5LTEwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcv
c2VsZWN0aW9uL21peGVkLWVkaXRhYmlsaXR5LTEwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMSBAQAorIzEgRElWIGVsZW1lbnQgd2l0aCBhIG5vbi1lZGl0YWJsZSBlbGVt
ZW50IG9ubHkgYWxpZ24gY2VudGVyOgorCitIZWxsbworIzIgRElWIGVsZW1lbnQgd2l0aCBhIG5v
bi1lZGl0YWJsZSBlbGVtZW50IG9ubHkgYWxpZ24gbGVmdDoKKworSGVsbG8KKyMzIERJViBlbGVt
ZW50IHdpdGggYSBub24tZWRpdGFibGUgZWxlbWVudCBvbmx5IGFsaWduIHJpZ2h0OgorCitIZWxs
bworIzQgRElWIGVsZW1lbnQgd2l0aCB0d28gbm9uLWVkaXRhYmxlIGVsZW1lbnR3aXRoIHBhZGRp
bmc6CisKK0hlbGxvIFdvcmxkCisjNSBESVYgZWxlbWVudCBlbXB0eQorCitBbmNob3IgKFtvYmpl
Y3QgSFRNTERpdkVsZW1lbnRdLCAwIGNhcmV0WzQwLDU0MF0gcmVmcG9zPTQwKSBpcyBjb3JyZWN0
LgorQW5jaG9yIChbb2JqZWN0IEhUTUxEaXZFbGVtZW50XSwgMyBjYXJldFs3NSw1NDBdIHJlZnBv
cz03NSkgaXMgY29ycmVjdC4KK0FuY2hvciAoW29iamVjdCBIVE1MRGl2RWxlbWVudF0sIDEgY2Fy
ZXRbNDMsNDcyXSByZWZwb3M9NDMpIGlzIGNvcnJlY3QuCitBbmNob3IgKFtvYmplY3QgSFRNTERp
dkVsZW1lbnRdLCAwIGNhcmV0WzgsNDcyXSByZWZwb3M9OCkgaXMgY29ycmVjdC4KK0FuY2hvciAo
W29iamVjdCBIVE1MRGl2RWxlbWVudF0sIDAgY2FyZXRbNzMsNDA0XSByZWZwb3M9NzMpIGlzIGNv
cnJlY3QuCitBbmNob3IgKFtvYmplY3QgSFRNTERpdkVsZW1lbnRdLCAzIGNhcmV0WzQ3LDMzNl0g
cmVmcG9zPTQ3KSBpcyBjb3JyZWN0LgorQW5jaG9yIChbb2JqZWN0IEhUTUxEaXZFbGVtZW50XSwg
MCBjYXJldFs1OCwyNjhdIHJlZnBvcz01OCkgaXMgY29ycmVjdC4KSW5kZXg6IExheW91dFRlc3Rz
L2VkaXRpbmcvc2VsZWN0aW9uL21peGVkLWVkaXRhYmlsaXR5LTEwLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vbWl4ZWQtZWRpdGFiaWxpdHktMTAuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21peGVkLWVk
aXRhYmlsaXR5LTEwLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACis8aHRtbD4K
KzxoZWFkPgorCTx0aXRsZT5UaGlzIHRlc3RzIHRoZSBhYmlsaXR5IHRvIHBsYWNlIHRoZSBjYXJl
dCBpbiBhbiBlZGl0YWJsZSBkaXYgdGhhdCBjb250YWlucyBvbmx5IG5vbiBlZGl0YWJsZSBjb250
ZW50PC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorICA8cD4jMSBESVYgZWxlbWVudCB3aXRoIGEg
bm9uLWVkaXRhYmxlIGVsZW1lbnQgb25seSA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5hbGlnbiBj
ZW50ZXI8L3NwYW4+OjwvcD4KKyAgPGRpdiBzdHlsZT0id2lkdGg6MTAwcHg7YmFja2dyb3VuZC1j
b2xvcjojY2VlO3RleHQtYWxpZ246IGNlbnRlcjsiIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIgaWQ9
ImVkaXQxIj4KKyAgICA8c3BhbiBjb250ZW50ZWRpdGFibGU9ImZhbHNlIiBpZD0ibm9uZWRpdDEi
PkhlbGxvPC9zcGFuPgorICA8L2Rpdj4KKyAgPHA+IzIgRElWIGVsZW1lbnQgd2l0aCBhIG5vbi1l
ZGl0YWJsZSBlbGVtZW50IG9ubHkgPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+YWxpZ24gbGVmdDwv
c3Bhbj46PC9wPgorICA8ZGl2IHN0eWxlPSJ3aWR0aDoxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiNj
ZWU7IiBjb250ZW50ZWRpdGFibGU9InRydWUiIGlkPSJlZGl0MiI+PHNwYW4gY29udGVudGVkaXRh
YmxlPSJmYWxzZSIgaWQ9Im5vbmVkaXQyIj5IZWxsbzwvc3Bhbj48L2Rpdj4KKyAgPHA+IzMgRElW
IGVsZW1lbnQgd2l0aCBhIG5vbi1lZGl0YWJsZSBlbGVtZW50IG9ubHkgPHNwYW4gc3R5bGU9ImNv
bG9yOnJlZCI+YWxpZ24gcmlnaHQ8L3NwYW4+OjwvcD4KKyAgPGRpdiBzdHlsZT0id2lkdGg6MTAw
cHg7YmFja2dyb3VuZC1jb2xvcjojY2VlO3RleHQtYWxpZ246IHJpZ2h0OyIgY29udGVudGVkaXRh
YmxlPSJ0cnVlIiBpZD0iZWRpdDMiPgorICA8c3BhbiBjb250ZW50ZWRpdGFibGU9ImZhbHNlIiBp
ZD0ibm9uZWRpdDMiPkhlbGxvPC9zcGFuPjwvZGl2PgorICA8cD4jNCBESVYgZWxlbWVudCB3aXRo
IHR3byBub24tZWRpdGFibGUgZWxlbWVudDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPndpdGggcGFk
ZGluZzwvc3Bhbj46PC9wPgorICA8ZGl2IHN0eWxlPSJ3aWR0aDoyMDBweDtiYWNrZ3JvdW5kLWNv
bG9yOiNjZWU7IiBjb250ZW50ZWRpdGFibGU9InRydWUiIGlkPSJlZGl0NCI+CisgICAgICA8c3Bh
biBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj5IZWxsbyA8L3NwYW4+CisgICAgICA8c3BhbiBjb250
ZW50ZWRpdGFibGU9ImZhbHNlIiBpZD0ibm9uZWRpdDQiPldvcmxkPC9zcGFuPgorICA8L2Rpdj4K
KyAgPHA+IzUgRElWIGVsZW1lbnQgZW1wdHk8L3A+CisgIDxkaXYgc3R5bGU9IndpZHRoOjEwMHB4
O2JhY2tncm91bmQtY29sb3I6I2NlZTt0ZXh0LWFsaWduOiBjZW50ZXI7IiBjb250ZW50ZWRpdGFi
bGU9InRydWUiIGlkPSJlZGl0NSI+CisgIDwvZGl2PgorICA8dWwgaWQ9ImNvbnNvbGUiPjwvdWw+
Cis8L2JvZHk+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKHN0cikgeworICAgIHZhciBsaSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7CisgICAgbGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQu
Y3JlYXRlVGV4dE5vZGUoc3RyKSk7CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY29uc29sZSIpOworICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQobGkpOworfQorCitm
dW5jdGlvbiBjYXJldENvb3JkaW5hdGVzKCkKK3sKKyAgICBpZiAoIXdpbmRvdy50ZXh0SW5wdXRD
b250cm9sbGVyKQorICAgICAgICByZXR1cm4geyB4OiAwLCB5IDowIH07CisgICAgdmFyIGNhcmV0
UmVjdCA9IHRleHRJbnB1dENvbnRyb2xsZXIuZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UodGV4
dElucHV0Q29udHJvbGxlci5zZWxlY3RlZFJhbmdlKClbMF0sIDApOworICAgIHJldHVybiB7IHg6
IGNhcmV0UmVjdFswXSwgeTogY2FyZXRSZWN0WzFdIH07Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3Qo
eCwgeSwgZWxlbSwgb2Zmc2V0LCByZWZwb3MpIHsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVU
byh4LCB5KTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5t
b3VzZVVwKCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgZXZlbnRTZW5kZXIu
bW91c2VVcCgpOworICAgIAorICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9u
KCk7CisKKyAgICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlOworICAgIHZh
ciBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0OworCisgICAgdmFyIGNvb3Jk
ID0gY2FyZXRDb29yZGluYXRlcygpOworICAgIHZhciBhbmNob3JTdHJpbmcgPSAiQW5jaG9yICgi
ICsgYW5jaG9yTm9kZSArICIsICIgKyBhbmNob3JPZmZzZXQgKyAiIGNhcmV0WyIgKyBjb29yZC54
ICsgIiwiICsgY29vcmQueSArICJdIHJlZnBvcz0iICsgcmVmcG9zICsgIikiOworICAgIHZhciBh
bmNob3JDb3JyZWN0ID0gYW5jaG9yTm9kZSA9PSBlbGVtICYmIGFuY2hvck9mZnNldCA9PSBvZmZz
ZXQgJiYgY29vcmQueCA9PSByZWZwb3M7CisgICAgaWYgKGFuY2hvckNvcnJlY3QpCisgICAgICAg
IGxvZyhhbmNob3JTdHJpbmcgKyAiIGlzIGNvcnJlY3QuIik7CisgICAgZWxzZQorICAgICAgICBs
b2coYW5jaG9yU3RyaW5nICsgIiBpcyBpbmNvcnJlY3QuIik7Cit9CisKK2Z1bmN0aW9uIGF1dG9t
YXRpY1Rlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeyAgIAor
ICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgCisgICAgICAgIHZhciBlbGVtOworICAgICAgICAKKyAgICAgICAgLy8gdGhlIGRpdiBo
YXMgdGV4dC1hbGlnbm1lbnQgY2VudGVyCisgICAgICAgIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZWRpdDEiKTsKKyAgICAgICAgeCA9IGVsZW0ub2Zmc2V0TGVmdCArIDEwOworICAg
ICAgICB5ID0gZWxlbS5vZmZzZXRUb3AgKyBlbGVtLm9mZnNldEhlaWdodCAvIDI7CisgICAgICAg
IHJ1blRlc3QoeCwgeSwgZWxlbSwgMCwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vbmVkaXQx
Iikub2Zmc2V0TGVmdCk7CisgICAgICAgIHggPSBlbGVtLm9mZnNldExlZnQgKyBlbGVtLm9mZnNl
dFdpZHRoIC0gMTA7CisgICAgICAgIHJ1blRlc3QoeCwgeSwgZWxlbSwgMywgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIm5vbmVkaXQxIikub2Zmc2V0TGVmdCArIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJub25lZGl0MSIpLm9mZnNldFdpZHRoKTsgICAgICAgCisKKyAgICAgICAgLy8gdGhlIGRp
diBoYXMgdGV4dC1hbGlnbm1lbnQgbGVmdAorICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImVkaXQyIik7CisgICAgICAgIHggPSBlbGVtLm9mZnNldExlZnQgKyBlbGVtLm9m
ZnNldFdpZHRoIC0gMTA7CisgICAgICAgIHkgPSBlbGVtLm9mZnNldFRvcCArIGVsZW0ub2Zmc2V0
SGVpZ2h0IC8gMjsKKyAgICAgICAgcnVuVGVzdCh4LCB5LCBlbGVtLCAxLCBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgibm9uZWRpdDIiKS5vZmZzZXRMZWZ0ICsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoIm5vbmVkaXQyIikub2Zmc2V0V2lkdGgpOworICAgICAgICB4ID0gZWxlbS5vZmZzZXRMZWZ0
OworICAgICAgICBydW5UZXN0KHgsIHksIGVsZW0sIDAsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJub25lZGl0MiIpLm9mZnNldExlZnQpOworCisgICAgICAgIC8vIHRoZSBkaXYgaGFzIHRleHQt
YWxpZ25tZW50IHJpZ2h0CisgICAgICAgIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
ZWRpdDMiKTsKKyAgICAgICAgeCA9IGVsZW0ub2Zmc2V0TGVmdCArIDEwOworICAgICAgICB5ID0g
ZWxlbS5vZmZzZXRUb3AgKyBlbGVtLm9mZnNldEhlaWdodCAvIDI7CisgICAgICAgIHJ1blRlc3Qo
eCwgeSwgZWxlbSwgMCwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vbmVkaXQzIikub2Zmc2V0
TGVmdCk7CisKKyAgICAgICAgLy8gdGhlIGRpdiBjb250YWlucyAyIG5vbiBlZGl0YWJsZSBzcGFu
CisgICAgICAgIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdDQiKTsKKyAgICAg
ICAgeCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub25lZGl0NCIpLm9mZnNldExlZnQ7Cisg
ICAgICAgIHkgPSBlbGVtLm9mZnNldFRvcCArIGVsZW0ub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICAg
ICAgcnVuVGVzdCh4LCB5LCBlbGVtLCAzLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibm9uZWRp
dDQiKS5vZmZzZXRMZWZ0KTsKKworICAgICAgICAvLyB0aGUgZGl2IGlzIGVtcHR5CisgICAgICAg
IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdDUiKTsKKyAgICAgICAgeCA9IGVs
ZW0ub2Zmc2V0TGVmdDsKKyAgICAgICAgeSA9IGVsZW0ub2Zmc2V0VG9wICsgZWxlbS5vZmZzZXRI
ZWlnaHQgLyAyOworICAgICAgICBydW5UZXN0KHgsIHksIGVsZW0sIDAsIChlbGVtLm9mZnNldExl
ZnQgKyBlbGVtLm9mZnNldFdpZHRoKS8yICsgNCk7CisgICAgfQorfQorCithdXRvbWF0aWNUZXN0
KCk7ICAgICAgICAKKzwvc2NyaXB0PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2VkaXRpbmcvZGVsZXRpbmcvNTM5MDY4MS0yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy81MzkwNjgxLTIt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MTM0NykKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9lZGl0aW5nL2RlbGV0aW5nLzUzOTA2ODEtMi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTE2LDMgKzE2LDQgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAgICAgIFJl
bmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSAyMHgxOAogICAgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDIweDE4CiAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwwKSB3aWR0aCAyMDogImJhciIKK2NhcmV0OiBwb3NpdGlvbiAwIG9mIGNoaWxkIDIge0RJVn0g
b2YgY2hpbGQgMSB7Qk9EWX0gb2YgY2hpbGQgMCB7SFRNTH0gb2YgZG9jdW1lbnQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44038</attachid>
            <date>2009-11-30 13:10:32 -0800</date>
            <delta_ts>2009-11-30 14:19:13 -0800</delta_ts>
            <desc>Patch2</desc>
            <filename>bug5982901.txt</filename>
            <type>text/plain</type>
            <size>34432</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTUwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMDktMTEtMjQgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
YW4gZm9jdXMgYnV0IG5vdCB0eXBlIGludG8gY29udGVudCBlZGl0YWJsZSBibG9jayB0aGF0IGNv
bnRhaW5zIG9ubHkgbm9uLWVkaXRhYmxlIGNvbnRlbnQuCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS81OTgyOTAxPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE3NTAKKyAgICAgICAgCisgICAgICAgIFRoZSBnb2FsIGlzIHRvIGNoYW5nZSB0aGUgd2F5
IHdlIGNob29zZSBhIHZpc2libGUgcG9zaXRpb24KKyAgICAgICAgYWZ0ZXIgaGl0IGRldGVjdGlv
biwgYnkgcHJlZmVycmluZyBhIHZpc3VhbGx5IGVxdWl2YWxlbnQgZWRpdGFibGUKKyAgICAgICAg
cG9zaXRpb24gaWYgYXZhaWxhYmxlLiBCeSBkb2luZyB0aGlzLCBpdCBpcyBwb3NzaWJsZSB0byBh
ZGQgY29udGVudAorICAgICAgICB0byBhbiBlZGl0YWJsZSBibG9jayB0aGF0IGluaXRpYWxseSBj
b250YWlucyBvbmx5IG5vbiBlZGl0YWJsZSBlbGVtZW50cy4KKworICAgICAgICBUZXN0OiBlZGl0
aW5nL3NlbGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0eS0xMC5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLmJhc2UuZXhwOiBDaGFuZ2VkIHRvIG1hdGNoIHRoZSBuZXcgc2lnbmF0dXJlIG9mIGRvd25z
dHJlYW0KKyAgICAgICAgYW5kIHVwc3RyZWFtIGluIHRoZSBQb3NpdGlvbiBjbGFzcy4KKyAgICAg
ICAgKiBkb20vUG9zaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmF0RWRp
dGluZ0JvdW5kYXJ5KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6dXBzdHJl
YW0pOiBNb2RpZmllZCB0byBhbGxvdyB0byBjcm9zcyB0aGUgYm91bmRhcnkKKyAgICAgICAgYmV0
d2VlbiBlZGl0YWJsZSBhbmQgbm9uIGVkaXRhYmxlIGNvbnRlbnQgaWYgcmVxdWlyZWQuCisgICAg
ICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6ZG93bnN0cmVhbSk6IE1vZGlmaWVkIHRvIGFsbG93IHRv
IGNyb3NzIHRoZSBib3VuZGFyeQorICAgICAgICBiZXR3ZWVuIGVkaXRhYmxlIGFuZCBub24gZWRp
dGFibGUgY29udGVudCBpZiByZXF1aXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uOjpp
c0NhbmRpZGF0ZSk6IE1vZGlmaWVkIHRvIHF1YWxpZnkgYXMgY2FuZGlkYXRlcyBwb3NpdGlvbnMK
KyAgICAgICAgdGhhdCBhcmUgYXQgdGhlIGVkaXRhYmlsaXR5IGJvdW5kYXJ5LgorICAgICAgICAo
V2ViQ29yZTo6UG9zaXRpb246OmdldElubGluZUJveEFuZE9mZnNldCk6IE1vZGlmaWVkIHRvIHJl
dHJpZXZlIHRoZSBpbmxpbmUgYm94CisgICAgICAgIHRvIGJlIHVzZWQgaW4gY2FsY3VsYXRpbmcg
dGhlIGNhcmV0IHJlY3RhbmdsZS4KKyAgICAgICAgKiBkb20vUG9zaXRpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6OlBvc2l0aW9uOjopOgorICAgICAgICAqIGRvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBvc2l0aW9uSXRlcmF0b3I6OmF0RWRpdGluZ0JvdW5kYXJ5
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0
ZSk6IE1vZGlmaWVkIHRvIHF1YWxpZnkgYXMgY2FuZGlkYXRlcyBwb3NpdGlvbnMKKyAgICAgICAg
dGhhdCBhcmUgYXQgdGhlIGVkaXRhYmlsaXR5IGJvdW5kYXJ5LgorICAgICAgICAqIGRvbS9Qb3Np
dGlvbkl0ZXJhdG9yLmg6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpmaXJzdEVkaXRhYmxlUG9zaXRpb25BZnRlclBvc2l0aW9uSW5Sb290KTog
TW9kaWZpZWQgdG8gYWNjZXB0IG5vdCBvbmx5CisgICAgICAgIGRlc2NlbmRhbnRzIG9mIHRoZSBl
ZGl0YWJsZSBjb250YWluZXIsIGJ1dCB0aGUgY29udGFpbmVyIGl0c2VsZi4KKyAgICAgICAgKFdl
YkNvcmU6Omxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmb3JlUG9zaXRpb25JblJvb3QpOiBNb2RpZmll
ZCB0byBhY2NlcHQgbm90IG9ubHkKKyAgICAgICAgZGVzY2VuZGFudHMgb2YgdGhlIGVkaXRhYmxl
IGNvbnRhaW5lciwgYnV0IHRoZSBjb250YWluZXIgaXRzZWxmLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjcmVh
dGVWaXNpYmxlUG9zaXRpb24pOiBBZGRlZCBsb2dpYyB0byBwcmVmZXIgYW4gZWRpdGFibGUgcG9z
aXRpb24sCisgICAgICAgIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojppc0FsbENvbGxhcHNpYmxl
V2hpdGVzcGFjZSk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisK
IDIwMDktMTEtMzAgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNTE1MDQp
CisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTk2NCwxMCAr
OTY0LDEwIEBAIF9fWk5LN1dlYkNvcmU4RG9jdW1lbnQzMWRpc3BsYXlTdHJpbmdNb2QKIF9fWk5L
N1dlYkNvcmU4RG9jdW1lbnQ0Ym9keUV2CiBfX1pOSzdXZWJDb3JlOERvY3VtZW50NmRvbWFpbkV2
CiBfX1pOSzdXZWJDb3JlOEludFBvaW50Y3Y4X05TUG9pbnRFdgotX19aTks3V2ViQ29yZThQb3Np
dGlvbjEwZG93bnN0cmVhbUV2CiBfX1pOSzdXZWJDb3JlOFBvc2l0aW9uMjVsZWFkaW5nV2hpdGVz
cGFjZVBvc2l0aW9uRU5TXzlFQWZmaW5pdHlFYgogX19aTks3V2ViQ29yZThQb3NpdGlvbjI2dHJh
aWxpbmdXaGl0ZXNwYWNlUG9zaXRpb25FTlNfOUVBZmZpbml0eUViCi1fX1pOSzdXZWJDb3JlOFBv
c2l0aW9uOHVwc3RyZWFtRXYKK19fWk5LN1dlYkNvcmU4UG9zaXRpb24xMGRvd25zdHJlYW1FTlMw
XzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQorX19aTks3V2ViQ29yZThQb3NpdGlvbjh1
cHN0cmVhbUVOUzBfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3Jl
OURPTVdpbmRvdzI3cGVuZGluZ1VubG9hZEV2ZW50TGlzdGVuZXJzRXYKIF9fWk5LN1dlYkNvcmU5
RmxvYXRSZWN0Y3Y3X05TUmVjdEV2CiBfX1pOSzdXZWJDb3JlOUZyYW1lVHJlZTEydHJhdmVyc2VO
ZXh0RVBLTlNfNUZyYW1lRQpJbmRleDogV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAkocmV2aXNpb24gNTE1MDQpCisrKyBXZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw2ICszMDcsMjcgQEAg
Ym9vbCBQb3NpdGlvbjo6YXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTgogICAgIHJldHVybiBtX29m
ZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhub2RlKCkpOwogfQogCisvLyBBIHBvc2l0aW9u
IGlzIGNvbnNpZGVyZWQgYXQgZWRpdGluZyBib3VuZGFyeSBpZiBvbmUgb2YgdGhlIGZvbGxvd2lu
ZyBpcyB0cnVlOiIKKy8vIDEuIGl0IGlzIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgbm9kZSBh
bmQgdGhlIG5leHQgdmlzdWFsbHkgZXF1aXZhbGVudCBwb3NpdGlvbgorLy8gICAgaXMgbm9uIGVk
aXRhYmxlCisvLyAyLiBpdCBpcyB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbm9kZSBhbmQgdGhl
IHByZXZpb3VzIHZpc3VhbGx5IGVxdWl2YWxlbnQgcG9zaXRpb24KKy8vICAgIGlzIG5vbiBlZGl0
YWJsZQorLy8gMy4gaXMgaXMgYW4gZWRpdGFibGUgcG9zaXRpb24gYW5kIGJvdGggdGhlIG5leHQg
YW5kIHByZXZpb3VzIHZpc3VhbGx5IGVxdWl2YWxlbnQKKy8vICAgIHBvc2l0aW9ucyBhcmUgYm90
aCBub24gZWRpdGFibGUKK2Jvb2wgUG9zaXRpb246OmF0RWRpdGluZ0JvdW5kYXJ5KCkgY29uc3QK
K3sKKyAgICBQb3NpdGlvbiBuZXh0UG9zaXRpb24gPSBkb3duc3RyZWFtKENhbkNyb3NzRWRpdGlu
Z0JvdW5kYXJ5KTsKKyAgICBpZiAoYXRGaXJzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBu
ZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgIW5leHRQb3NpdGlvbi5ub2RlKCktPmlzQ29udGVu
dEVkaXRhYmxlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBQb3NpdGlv
biBwcmV2UG9zaXRpb24gPSB1cHN0cmVhbShDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAg
aWYgKGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSAmJiBwcmV2UG9zaXRpb24uaXNOb3RO
dWxsKCkgJiYgIXByZXZQb3NpdGlvbi5ub2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICByZXR1cm4gKG5leHRQb3NpdGlvbi5pc05v
dE51bGwoKSAmJiAhbmV4dFBvc2l0aW9uLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAg
ICAgICAgICAgJiYgKHByZXZQb3NpdGlvbi5pc05vdE51bGwoKSAmJiAhcHJldlBvc2l0aW9uLm5v
ZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSk7Cit9CisKIGJvb2wgUG9zaXRpb246OmF0U3RhcnRP
ZlRyZWUoKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkKQEAgLTQ0OCw3ICs0NjksNyBAQCBz
dGF0aWMgYm9vbCBpc1N0cmVhbWVyKGNvbnN0IFBvc2l0aW9uSXRlCiAvLyBhbmQgZG93bnN0cmVh
bSgpIHdpbGwgcmV0dXJuIHRoZSByaWdodCBvbmUuCiAvLyBBbHNvLCB1cHN0cmVhbSgpIHdpbGwg
cmV0dXJuIFtib3VuZGFyeSwgMF0gZm9yIGFueSBvZiB0aGUgcG9zaXRpb25zIGZyb20gW2JvdW5k
YXJ5LCAwXSB0byB0aGUgZmlyc3QgY2FuZGlkYXRlCiAvLyBpbiBib3VuZGFyeSwgd2hlcmUgZW5k
c09mTm9kZUFyZVZpc3VhbGx5RGlzdGluY3RQb3NpdGlvbnMoYm91bmRhcnkpIGlzIHRydWUuCi1Q
b3NpdGlvbiBQb3NpdGlvbjo6dXBzdHJlYW0oKSBjb25zdAorUG9zaXRpb24gUG9zaXRpb246OnVw
c3RyZWFtKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSB1cFJ1bGUpIGNvbnN0CiB7CiAgICAg
Tm9kZSogc3RhcnROb2RlID0gbm9kZSgpOwogICAgIGlmICghc3RhcnROb2RlKQpAQCAtNDYwLDYg
KzQ4MSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbSgpIGNvbnN0CiAgICAgUG9zaXRp
b25JdGVyYXRvciBjdXJyZW50UG9zID0gbGFzdFZpc2libGU7CiAgICAgYm9vbCBzdGFydEVkaXRh
YmxlID0gc3RhcnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwogICAgIE5vZGUqIGxhc3ROb2Rl
ID0gc3RhcnROb2RlOworICAgIGJvb2wgYm91bmRhcnlDcm9zc2VkID0gZmFsc2U7CiAgICAgZm9y
ICg7ICFjdXJyZW50UG9zLmF0U3RhcnQoKTsgY3VycmVudFBvcy5kZWNyZW1lbnQoKSkgewogICAg
ICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRQb3Mubm9kZSgpOwogICAgICAgICAKQEAg
LTQ2OCw4ICs0OTAsMTEgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29uc3QKICAg
ICAgICAgaWYgKGN1cnJlbnROb2RlICE9IGxhc3ROb2RlKSB7CiAgICAgICAgICAgICAvLyBEb24n
dCBjaGFuZ2UgZWRpdGFiaWxpdHkuCiAgICAgICAgICAgICBib29sIGN1cnJlbnRFZGl0YWJsZSA9
IGN1cnJlbnROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgICAgICAgICAgaWYgKHN0YXJ0
RWRpdGFibGUgIT0gY3VycmVudEVkaXRhYmxlKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKHN0YXJ0RWRpdGFibGUgIT0gY3VycmVudEVkaXRhYmxlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHVwUnVsZSA9PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYm91bmRhcnlDcm9zc2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxhc3ROb2RlID0gY3VycmVudE5vZGU7
CiAgICAgICAgIH0KIApAQCAtNDgzLDkgKzUwOCwxNCBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6dXBz
dHJlYW0oKSBjb25zdAogICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgp
LT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgaWYgKHVwUnVsZSA9PSBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFy
eSAmJiBib3VuZGFyeUNyb3NzZWQpIHsKKyAgICAgICAgICAgIGxhc3RWaXNpYmxlID0gY3VycmVu
dFBvczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICAv
LyB0cmFjayBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KICAgICAgICAgaWYgKGlzU3Ry
ZWFtZXIoY3VycmVudFBvcykpCi0gICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7
CisgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQb3M7ICAgICAgICAgICAgCiAgICAg
ICAgIAogICAgICAgICAvLyBEb24ndCBtb3ZlIHBhc3QgYSBwb3NpdGlvbiB0aGF0IGlzIHZpc3Vh
bGx5IGRpc3RpbmN0LiAgV2UgY291bGQgcmVseSBvbiBjb2RlIGFib3ZlIHRvIHRlcm1pbmF0ZSBh
bmQgCiAgICAgICAgIC8vIHJldHVybiBsYXN0VmlzaWJsZSBvbiB0aGUgbmV4dCBpdGVyYXRpb24s
IGJ1dCB3ZSB0ZXJtaW5hdGUgZWFybHkgdG8gYXZvaWQgZG9pbmcgYSBub2RlSW5kZXgoKSBjYWxs
LgpAQCAtNTYwLDE4ICs1OTAsMTkgQEAgUG9zaXRpb24gUG9zaXRpb246OnVwc3RyZWFtKCkgY29u
c3QKIC8vIGFuZCB1cHN0cmVhbSgpIHdpbGwgcmV0dXJuIHRoZSBsZWZ0IG9uZS4KIC8vIEFsc28s
IGRvd25zdHJlYW0oKSB3aWxsIHJldHVybiB0aGUgbGFzdCBwb3NpdGlvbiBpbiB0aGUgbGFzdCBh
dG9taWMgbm9kZSBpbiBib3VuZGFyeSBmb3IgYWxsIG9mIHRoZSBwb3NpdGlvbnMKIC8vIGluIGJv
dW5kYXJ5IGFmdGVyIHRoZSBsYXN0IGNhbmRpZGF0ZSwgd2hlcmUgZW5kc09mTm9kZUFyZVZpc3Vh
bGx5RGlzdGluY3RQb3NpdGlvbnMoYm91bmRhcnkpLgotUG9zaXRpb24gUG9zaXRpb246OmRvd25z
dHJlYW0oKSBjb25zdAorUG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlIGRvd25SdWxlKSBjb25zdAogewogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9
IG5vZGUoKTsKICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7
Ci0KKyAgICAKICAgICAvLyBpdGVyYXRlIGZvcndhcmQgZnJvbSB0aGVyZSwgbG9va2luZyBmb3Ig
YSBxdWFsaWZpZWQgcG9zaXRpb24KICAgICBOb2RlKiBib3VuZGFyeSA9IGVuY2xvc2luZ1Zpc3Vh
bEJvdW5kYXJ5KHN0YXJ0Tm9kZSk7CiAgICAgUG9zaXRpb25JdGVyYXRvciBsYXN0VmlzaWJsZSA9
ICp0aGlzOwogICAgIFBvc2l0aW9uSXRlcmF0b3IgY3VycmVudFBvcyA9IGxhc3RWaXNpYmxlOwog
ICAgIGJvb2wgc3RhcnRFZGl0YWJsZSA9IHN0YXJ0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKTsK
ICAgICBOb2RlKiBsYXN0Tm9kZSA9IHN0YXJ0Tm9kZTsKKyAgICBib29sIGJvdW5kYXJ5Q3Jvc3Nl
ZCA9IGZhbHNlOwogICAgIGZvciAoOyAhY3VycmVudFBvcy5hdEVuZCgpOyBjdXJyZW50UG9zLmlu
Y3JlbWVudCgpKSB7ICAgCiAgICAgICAgIE5vZGUqIGN1cnJlbnROb2RlID0gY3VycmVudFBvcy5u
b2RlKCk7CiAgICAgICAgIApAQCAtNTgwLDE2ICs2MTEsMjAgQEAgUG9zaXRpb24gUG9zaXRpb246
OmRvd25zdHJlYW0oKSBjb25zdAogICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gbGFzdE5vZGUp
IHsKICAgICAgICAgICAgIC8vIERvbid0IGNoYW5nZSBlZGl0YWJpbGl0eS4KICAgICAgICAgICAg
IGJvb2wgY3VycmVudEVkaXRhYmxlID0gY3VycmVudE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCk7
Ci0gICAgICAgICAgICBpZiAoc3RhcnRFZGl0YWJsZSAhPSBjdXJyZW50RWRpdGFibGUpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RhcnRFZGl0YWJsZSAhPSBjdXJy
ZW50RWRpdGFibGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZG93blJ1bGUgPT0gQ2Fubm90Q3Jv
c3NFZGl0aW5nQm91bmRhcnkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGJvdW5kYXJ5Q3Jvc3NlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBsYXN0Tm9kZSA9IGN1cnJlbnROb2RlOwogICAgICAgICB9Ci0K
KyAgICAgICAgCiAgICAgICAgIC8vIHN0b3AgYmVmb3JlIGdvaW5nIGFib3ZlIHRoZSBib2R5LCB1
cCBpbnRvIHRoZSBoZWFkCiAgICAgICAgIC8vIHJldHVybiB0aGUgbGFzdCB2aXNpYmxlIHN0cmVh
bWVyIHBvc2l0aW9uCiAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aGFzVGFnTmFtZShib2R5VGFn
KSAmJiBjdXJyZW50UG9zLmF0RW5kT2ZOb2RlKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAorICAgICAgICAKICAgICAgICAgLy8gRG8gbm90IG1vdmUgdG8gYSB2aXN1YWxseSBk
aXN0aW5jdCBwb3NpdGlvbi4KICAgICAgICAgaWYgKGVuZHNPZk5vZGVBcmVWaXN1YWxseURpc3Rp
bmN0UG9zaXRpb25zKGN1cnJlbnROb2RlKSAmJiBjdXJyZW50Tm9kZSAhPSBib3VuZGFyeSkKICAg
ICAgICAgICAgIHJldHVybiBsYXN0VmlzaWJsZTsKQEAgLTU5OCwzMCArNjMzLDM1IEBAIFBvc2l0
aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKICAgICAgICAgLy8gcG9zaXRpb25zIHdp
bGwgYmUgW2JvdW5kYXJ5LT5wYXJlbnROb2RlKCksIG9yaWdpbmFsQmxvY2stPm5vZGVJbmRleCgp
ICsgMV0uCiAgICAgICAgIGlmIChib3VuZGFyeSAmJiBib3VuZGFyeS0+cGFyZW50Tm9kZSgpID09
IGN1cnJlbnROb2RlKQogICAgICAgICAgICAgcmV0dXJuIGxhc3RWaXNpYmxlOwotCisgICAgICAg
IAogICAgICAgICAvLyBza2lwIHBvc2l0aW9uIGluIHVucmVuZGVyZWQgb3IgaW52aXNpYmxlIG5v
ZGUKICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGN1cnJlbnROb2RlLT5yZW5kZXJl
cigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyIHx8IHJlbmRlcmVyLT5zdHlsZSgpLT52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCisg
ICAgICAgIAorICAgICAgICBpZiAoZG93blJ1bGUgPT0gQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkg
JiYgYm91bmRhcnlDcm9zc2VkKSB7CisgICAgICAgICAgICBsYXN0VmlzaWJsZSA9IGN1cnJlbnRQ
b3M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8g
dHJhY2sgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0aW9uCiAgICAgICAgIGlmIChpc1N0cmVh
bWVyKGN1cnJlbnRQb3MpKQogICAgICAgICAgICAgbGFzdFZpc2libGUgPSBjdXJyZW50UG9zOwot
CisgICAgICAgIAogICAgICAgICAvLyBSZXR1cm4gcG9zaXRpb24gYmVmb3JlIHRhYmxlcyBhbmQg
bm9kZXMgd2hpY2ggaGF2ZSBjb250ZW50IHRoYXQgY2FuIGJlIGlnbm9yZWQuCiAgICAgICAgIGlm
IChlZGl0aW5nSWdub3Jlc0NvbnRlbnQoY3VycmVudE5vZGUpIHx8IGlzVGFibGVFbGVtZW50KGN1
cnJlbnROb2RlKSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3Mub2Zmc2V0SW5MZWFmTm9k
ZSgpIDw9IHJlbmRlcmVyLT5jYXJldE1pbk9mZnNldCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVuZGVyZXItPmNhcmV0TWluT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQorICAgICAgICAKICAgICAgICAgLy8gcmV0
dXJuIGN1cnJlbnQgcG9zaXRpb24gaWYgaXQgaXMgaW4gcmVuZGVyZWQgdGV4dAogICAgICAgICBp
ZiAocmVuZGVyZXItPmlzVGV4dCgpICYmIHRvUmVuZGVyVGV4dChyZW5kZXJlciktPmZpcnN0VGV4
dEJveCgpKSB7CiAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgIT0gc3RhcnROb2RlKSB7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRQb3MuYXRTdGFydE9mTm9kZSgpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gUG9zaXRpb24oY3VycmVudE5vZGUsIHJlbmRlcmVyLT5jYXJldE1p
bk9mZnNldCgpKTsKICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCiAgICAgICAgICAgICB1
bnNpZ25lZCB0ZXh0T2Zmc2V0ID0gY3VycmVudFBvcy5vZmZzZXRJbkxlYWZOb2RlKCk7CiAgICAg
ICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclRleHQocmVuZGVyZXIp
OwogICAgICAgICAgICAgSW5saW5lVGV4dEJveCogbGFzdFRleHRCb3ggPSB0ZXh0UmVuZGVyZXIt
Pmxhc3RUZXh0Qm94KCk7CkBAIC02MzEsMTMgKzY3MSwxMyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6
ZG93bnN0cmVhbSgpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVu
dFBvczsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQot
CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGJveCA9PSBsYXN0VGV4dEJv
eCB8fCB0ZXh0T2Zmc2V0ICE9IGJveC0+c3RhcnQoKSArIGJveC0+bGVuKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Ly8gVGhlIHRleHQgY29udGludWVzIG9uIHRoZSBuZXh0IGxpbmUgb25seSBpZiB0aGUgbGFzdCB0
ZXh0IGJveCBpcyBub3Qgb24gdGhpcyBsaW5lIGFuZAogICAgICAgICAgICAgICAgIC8vIG5vbmUg
b2YgdGhlIGJveGVzIG9uIHRoaXMgbGluZSBoYXZlIGEgbGFyZ2VyIHN0YXJ0IG9mZnNldC4KLQor
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGJvb2wgY29udGludWVzT25OZXh0TGlu
ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgSW5saW5lQm94KiBvdGhlckJveCA9IGJveDsKICAg
ICAgICAgICAgICAgICB3aGlsZSAoY29udGludWVzT25OZXh0TGluZSkgewpAQCAtNjQ3LDcgKzY4
Nyw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG90aGVyQm94ID09IGxhc3RUZXh0Qm94IHx8IChvdGhlckJveC0+cmVuZGVy
ZXIoKSA9PSB0ZXh0UmVuZGVyZXIgJiYgc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCo+KG90aGVy
Qm94KS0+c3RhcnQoKSA+PSB0ZXh0T2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlc09uTmV4dExpbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBvdGhlckJveCA9IGJveDsKICAgICAgICAgICAgICAg
ICB3aGlsZSAoY29udGludWVzT25OZXh0TGluZSkgewogICAgICAgICAgICAgICAgICAgICBvdGhl
ckJveCA9IG90aGVyQm94LT5wcmV2TGVhZkNoaWxkKCk7CkBAIC02NTYsNyArNjk2LDcgQEAgUG9z
aXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25zdAogICAgICAgICAgICAgICAgICAgICBp
ZiAob3RoZXJCb3ggPT0gbGFzdFRleHRCb3ggfHwgKG90aGVyQm94LT5yZW5kZXJlcigpID09IHRl
eHRSZW5kZXJlciAmJiBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4ob3RoZXJCb3gpLT5zdGFy
dCgpID49IHRleHRPZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVzT25O
ZXh0TGluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChjb250aW51ZXNPbk5leHRMaW5lKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY3VycmVudFBvczsKICAgICAgICAgICAgIH0KQEAgLTY2NSw3ICs3MDUsNyBA
QCBQb3NpdGlvbiBQb3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiAgICAgCiAgICAgcmV0dXJu
IGxhc3RWaXNpYmxlOwogfQotCisgICAgCiBib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFu
b255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewog
ICAgIFJlbmRlck9iamVjdCogc3RvcCA9IHJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlckFmdGVyQ2hp
bGRyZW4oKTsKQEAgLTY3Nyw3ICs3MTcsNyBAQCBib29sIFBvc2l0aW9uOjpoYXNSZW5kZXJlZE5v
bkFub255bW91c0RlCiAgICAgICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9Ci0KKyAgIAogYm9v
bCBQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUoTm9kZSogbm9kZSkKIHsKICAgICByZXR1
cm4gbm9kZSAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkt
PnVzZXJTZWxlY3QoKSA9PSBTRUxFQ1RfTk9ORTsKQEAgLTcwNCwxMCArNzQ0LDE0IEBAIGJvb2wg
UG9zaXRpb246OmlzQ2FuZGlkYXRlKCkgY29uc3QKICAgICBpZiAoaXNUYWJsZUVsZW1lbnQobm9k
ZSgpKSB8fCBlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZSgpKSkKICAgICAgICAgcmV0dXJuIChh
dEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpIHx8IGF0TGFzdEVkaXRpbmdQb3NpdGlvbkZv
ck5vZGUoKSkgJiYgIW5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKS0+cGFyZW50KCkpOwogCi0g
ICAgaWYgKCFub2RlKCktPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tG
bG93KCkgJiYgIWhhc1JlbmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJl
bmRlcmVyKSAmJgotICAgICAgICh0b1JlbmRlckJveChyZW5kZXJlciktPmhlaWdodCgpIHx8IG5v
ZGUoKS0+aGFzVGFnTmFtZShib2R5VGFnKSkpCi0gICAgICAgIHJldHVybiBhdEZpcnN0RWRpdGlu
Z1Bvc2l0aW9uRm9yTm9kZSgpICYmICFub2RlSXNVc2VyU2VsZWN0Tm9uZShub2RlKCkpOwotICAg
IAorICAgIGlmICghbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmIHJlbmRlcmVy
LT5pc0Jsb2NrRmxvdygpKSB7CisgICAgICAgIGlmICh0b1JlbmRlckJsb2NrKHJlbmRlcmVyKS0+
aGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKSB7CisgICAgICAg
ICAgICBpZiAoIVBvc2l0aW9uOjpoYXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0
aEhlaWdodChyZW5kZXJlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGF0Rmlyc3RFZGl0aW5n
UG9zaXRpb25Gb3JOb2RlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9uZShub2Rl
KCkpOworICAgICAgICAgICAgcmV0dXJuIG1fYW5jaG9yTm9kZS0+aXNDb250ZW50RWRpdGFibGUo
KSAmJiAhUG9zaXRpb246Om5vZGVJc1VzZXJTZWxlY3ROb25lKG5vZGUoKSkgJiYgYXRFZGl0aW5n
Qm91bmRhcnkoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApA
QCAtOTQ5LDcgKzk5MywyMiBAQCB2b2lkIFBvc2l0aW9uOjpnZXRJbmxpbmVCb3hBbmRPZmZzZXQo
RUFmCiB7CiAgICAgY2FyZXRPZmZzZXQgPSBtX29mZnNldDsKICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyID0gbm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICAgIAogICAgIGlmICghcmVuZGVy
ZXItPmlzVGV4dCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiBo
YXNSZW5kZXJlZE5vbkFub255bW91c0Rlc2NlbmRhbnRzV2l0aEhlaWdodChyZW5kZXJlcikpIHsK
KyAgICAgICAgICAgIGJvb2wgbGFzdFBvc2l0aW9uID0gKGNhcmV0T2Zmc2V0ID09IGxhc3RPZmZz
ZXRJbk5vZGUobm9kZSgpKSk7CisgICAgICAgICAgICBOb2RlKiBzdGFydE5vZGUgPSAobGFzdFBv
c2l0aW9uKT8gbm9kZSgpLT5jaGlsZE5vZGUoY2FyZXRPZmZzZXQgLSAxKTogbm9kZSgpLT5jaGls
ZE5vZGUoY2FyZXRPZmZzZXQpOworICAgICAgICAgICAgd2hpbGUgKHN0YXJ0Tm9kZSAmJiAoIXN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKSB8fCAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkgJiYgdG9SZW5k
ZXJUZXh0KHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSktPmlzQWxsQ29sbGFwc2libGVXaGl0ZXNwYWNl
KCkpKSkKKyAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSAobGFzdFBvc2l0aW9uKT8gc3RhcnRO
b2RlLT5wcmV2aW91c1NpYmxpbmcoKTogc3RhcnROb2RlLT5uZXh0U2libGluZygpOworICAgICAg
ICAgICAgaWYgKHN0YXJ0Tm9kZSkgeworICAgICAgICAgICAgICAgIFBvc2l0aW9uIHBvcyhzdGFy
dE5vZGUsIDApOworICAgICAgICAgICAgICAgIHBvcyA9IHBvcy5kb3duc3RyZWFtKENhbkNyb3Nz
RWRpdGluZ0JvdW5kYXJ5KTsKKyAgICAgICAgICAgICAgICBwb3MuZ2V0SW5saW5lQm94QW5kT2Zm
c2V0KFVQU1RSRUFNLCBwcmltYXJ5RGlyZWN0aW9uLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsK
KyAgICAgICAgICAgICAgICBpZiAobGFzdFBvc2l0aW9uICYmIGlubGluZUJveCkKKyAgICAgICAg
ICAgICAgICAgICAgY2FyZXRPZmZzZXQgPSBpbmxpbmVCb3gtPmNhcmV0TWF4T2Zmc2V0KCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAg
IGlubGluZUJveCA9IHJlbmRlcmVyLT5pc0JveCgpID8gdG9SZW5kZXJCb3gocmVuZGVyZXIpLT5p
bmxpbmVCb3hXcmFwcGVyKCkgOiAwOwogICAgICAgICBpZiAoIWlubGluZUJveCB8fCAoY2FyZXRP
ZmZzZXQgPiBpbmxpbmVCb3gtPmNhcmV0TWluT2Zmc2V0KCkgJiYgY2FyZXRPZmZzZXQgPCBpbmxp
bmVCb3gtPmNhcmV0TWF4T2Zmc2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogV2Vi
Q29yZS9kb20vUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbi5o
CShyZXZpc2lvbiA1MTUwNCkKKysrIFdlYkNvcmUvZG9tL1Bvc2l0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDYgKzU2LDExIEBAIHB1YmxpYzoKICAgICAgICAgUG9zaXRpb25Jc0JlZm9yZUFu
Y2hvcgogICAgIH07CiAKKyAgICBlbnVtIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSB7Cisg
ICAgICAgIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5LAorICAgICAgICBDYW5ub3RDcm9zc0VkaXRp
bmdCb3VuZGFyeQorICAgIH07CisgICAgCiAgICAgUG9zaXRpb24oKQogICAgICAgICA6IG1fb2Zm
c2V0KDApCiAgICAgICAgICwgbV9hbmNob3JUeXBlKFBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikK
QEAgLTEyOSw3ICsxMzQsMTAgQEAgcHVibGljOgogICAgIC8vIGlmIHRoZSBub2RlIGlzIGlnbm9y
ZWQgYnkgZWRpdGluZyBvciBub3QuCiAgICAgYm9vbCBhdEZpcnN0RWRpdGluZ1Bvc2l0aW9uRm9y
Tm9kZSgpIGNvbnN0OwogICAgIGJvb2wgYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpIGNv
bnN0OwotCisgICAgCisgICAgLy8gUmV0dW5zIHRydWUgaWYgdGhlIHZpc3VhbGx5IGVxdWl2YWxl
bnQgcG9zaXRpb25zIGFyb3VuZCBoYXZlIGRpZmZlcmVudCBlZGl0YWJpbGl0eQorICAgIGJvb2wg
YXRFZGl0aW5nQm91bmRhcnkoKSBjb25zdDsKKyAgICAKICAgICBib29sIGF0U3RhcnRPZlRyZWUo
KSBjb25zdDsKICAgICBib29sIGF0RW5kT2ZUcmVlKCkgY29uc3Q7CiAKQEAgLTEzOSw4ICsxNDcs
OCBAQCBwdWJsaWM6CiAgICAgUG9zaXRpb24gdHJhaWxpbmdXaGl0ZXNwYWNlUG9zaXRpb24oRUFm
ZmluaXR5LCBib29sIGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID0gZmFsc2UpIGNv
bnN0OwogICAgIAogICAgIC8vIFRoZXNlIHJldHVybiB1c2VmdWwgdmlzdWFsbHkgZXF1aXZhbGVu
dCBwb3NpdGlvbnMuCi0gICAgUG9zaXRpb24gdXBzdHJlYW0oKSBjb25zdDsKLSAgICBQb3NpdGlv
biBkb3duc3RyZWFtKCkgY29uc3Q7CisgICAgUG9zaXRpb24gdXBzdHJlYW0oRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpIGNvbnN0OworICAg
IFBvc2l0aW9uIGRvd25zdHJlYW0oRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90
Q3Jvc3NFZGl0aW5nQm91bmRhcnkpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaXNDYW5kaWRhdGUo
KSBjb25zdDsKICAgICBib29sIGluUmVuZGVyZWRUZXh0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3Jl
L2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3Np
dGlvbkl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNTE1MDQpCisrKyBXZWJDb3JlL2RvbS9Qb3NpdGlv
bkl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSwxNCBAQCBib29sIFBv
c2l0aW9uSXRlcmF0b3I6OmF0RW5kT2ZOb2RlKCkgY29uCiAgICAgcmV0dXJuIG1fYW5jaG9yTm9k
ZS0+aGFzQ2hpbGROb2RlcygpIHx8IG1fb2Zmc2V0SW5BbmNob3IgPj0gbGFzdE9mZnNldEZvckVk
aXRpbmcobV9hbmNob3JOb2RlKTsKIH0KIAorYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjphdEVkaXRp
bmdCb3VuZGFyeSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2FuY2hvck5vZGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgcmV0dXJuIFBvc2l0aW9uKCp0aGlzKS5hdEVkaXRp
bmdCb3VuZGFyeSgpOworfQorICAgIAogYm9vbCBQb3NpdGlvbkl0ZXJhdG9yOjppc0NhbmRpZGF0
ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2FuY2hvck5vZGUpCkBAIC0xNTYsMTAgKzE2NCwxNCBA
QCBib29sIFBvc2l0aW9uSXRlcmF0b3I6OmlzQ2FuZGlkYXRlKCkgY29uCiAgICAgaWYgKGlzVGFi
bGVFbGVtZW50KG1fYW5jaG9yTm9kZSkgfHwgZWRpdGluZ0lnbm9yZXNDb250ZW50KG1fYW5jaG9y
Tm9kZSkpCiAgICAgICAgIHJldHVybiAoYXRTdGFydE9mTm9kZSgpIHx8IGF0RW5kT2ZOb2RlKCkp
ICYmICFQb3NpdGlvbjo6bm9kZUlzVXNlclNlbGVjdE5vbmUobV9hbmNob3JOb2RlLT5wYXJlbnQo
KSk7CiAKLSAgICBpZiAoIW1fYW5jaG9yTm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiByZW5k
ZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAhUG9zaXRpb246Omhhc1JlbmRlcmVkTm9uQW5vbnltb3Vz
RGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSAmJgotICAgICAgICh0b1JlbmRlckJsb2Nr
KHJlbmRlcmVyKS0+aGVpZ2h0KCkgfHwgbV9hbmNob3JOb2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcp
KSkKLSAgICAgICAgcmV0dXJuIGF0U3RhcnRPZk5vZGUoKSAmJiAhUG9zaXRpb246Om5vZGVJc1Vz
ZXJTZWxlY3ROb25lKG1fYW5jaG9yTm9kZSk7Ci0gICAgCisgICAgaWYgKCFtX2FuY2hvck5vZGUt
Pmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgcmVuZGVyZXItPmlzQmxvY2tGbG93KCkpIHsKKyAgICAg
ICAgaWYgKHRvUmVuZGVyQmxvY2socmVuZGVyZXIpLT5oZWlnaHQoKSB8fCBtX2FuY2hvck5vZGUt
Pmhhc1RhZ05hbWUoYm9keVRhZykpIHsKKyAgICAgICAgICAgIGlmICghUG9zaXRpb246Omhhc1Jl
bmRlcmVkTm9uQW5vbnltb3VzRGVzY2VuZGFudHNXaXRoSGVpZ2h0KHJlbmRlcmVyKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gYXRTdGFydE9mTm9kZSgpICYmICFQb3NpdGlvbjo6bm9kZUlzVXNl
clNlbGVjdE5vbmUobV9hbmNob3JOb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2FuY2hvck5v
ZGUtPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIVBvc2l0aW9uOjpub2RlSXNVc2VyU2VsZWN0Tm9u
ZShtX2FuY2hvck5vZGUpICYmIGF0RWRpdGluZ0JvdW5kYXJ5KCk7CisgICAgICAgIH0KKyAgICB9
CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1Bvc2l0aW9uSXRl
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Qb3NpdGlvbkl0ZXJhdG9yLmgJKHJl
dmlzaW9uIDUxNTA0KQorKysgV2ViQ29yZS9kb20vUG9zaXRpb25JdGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw2ICs2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGF0RW5kKCkgY29uc3Q7
CiAgICAgYm9vbCBhdFN0YXJ0T2ZOb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBhdEVuZE9mTm9kZSgp
IGNvbnN0OworICAgIGJvb2wgYXRFZGl0aW5nQm91bmRhcnkoKSBjb25zdDsKICAgICBib29sIGlz
Q2FuZGlkYXRlKCkgY29uc3Q7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5j
cHAJKHJldmlzaW9uIDUxNTA0KQorKysgV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIFZpc2libGVQb3NpdGlvbiBmaXJzdEVk
aXRhYmxlUG9zaXRpb25BZnQKICAgICB3aGlsZSAocC5ub2RlKCkgJiYgIWlzRWRpdGFibGVQb3Np
dGlvbihwKSAmJiBwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAg
ICBwID0gaXNBdG9taWNOb2RlKHAubm9kZSgpKSA/IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUo
cC5ub2RlKCkpIDogbmV4dFZpc3VhbGx5RGlzdGluY3RDYW5kaWRhdGUocCk7CiAgICAgCi0gICAg
aWYgKHAubm9kZSgpICYmICFwLm5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQor
ICAgIGlmIChwLm5vZGUoKSAmJiBwLm5vZGUoKSAhPSBoaWdoZXN0Um9vdCAmJiAhcC5ub2RlKCkt
PmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOwogICAgIAogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24ocCk7CkBAIC0zMTAsNyAr
MzEwLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGxhc3RFZGl0YWJsZVBvc2l0aW9uQmVmbwogICAgIHdo
aWxlIChwLm5vZGUoKSAmJiAhaXNFZGl0YWJsZVBvc2l0aW9uKHApICYmIHAubm9kZSgpLT5pc0Rl
c2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCiAgICAgICAgIHAgPSBpc0F0b21pY05vZGUocC5ub2Rl
KCkpID8gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUocC5ub2RlKCkpIDogcHJldmlvdXNWaXN1
YWxseURpc3RpbmN0Q2FuZGlkYXRlKHApOwogICAgIAotICAgIGlmIChwLm5vZGUoKSAmJiAhcC5u
b2RlKCktPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKKyAgICBpZiAocC5ub2RlKCkgJiYg
cC5ub2RlKCkgIT0gaGlnaGVzdFJvb3QgJiYgIXAubm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihoaWdo
ZXN0Um9vdCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uKHApOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiA1MTUwNCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNjcsOCArMjM2NywxOSBAQCBSZW5kZXJCb3hNb2RlbE9i
amVjdCogUmVuZGVyT2JqZWN0OjpvZmZzCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyT2JqZWN0Ojpj
cmVhdGVWaXNpYmxlUG9zaXRpb24oaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5KQogewog
ICAgIC8vIElmIHRoaXMgaXMgYSBub24tYW5vbnltb3VzIHJlbmRlcmVyLCB0aGVuIGl0J3Mgc2lt
cGxlLgotICAgIGlmIChOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpKQorICAgIGlmIChOb2RlKiBu
b2RlID0gdGhpcy0+bm9kZSgpKSB7CisgICAgICAgIGlmICghbm9kZS0+aXNDb250ZW50RWRpdGFi
bGUoKSkgeworICAgICAgICAgICAgLy8gcHJlZmVyIGEgdmlzdWFsbHkgZXF1aXZhbGVudCBwb3Np
dGlvbiB0aGF0IGlzIGVkaXRhYmxlCisgICAgICAgICAgICBQb3NpdGlvbiBwb3Mobm9kZSwgb2Zm
c2V0KTsKKyAgICAgICAgICAgIFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHBvcy5kb3duc3RyZWFtKFBv
c2l0aW9uOjpDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgICAgICAgICBpZiAoY2FuZGlk
YXRlLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkpOworICAgICAgICAgICAgY2FuZGlk
YXRlID0gcG9zLnVwc3RyZWFtKFBvc2l0aW9uOjpDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSk7Cisg
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlLm5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNhbmRpZGF0ZSwgYWZmaW5pdHkp
OworICAgICAgICB9CiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24obm9kZSwgb2Zmc2V0
LCBhZmZpbml0eSk7CisgICAgfQogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjcm9zcyB0aGUg
Ym91bmRhcnkgYmV0d2VlbiBlZGl0YWJsZSBhbmQgbm9uLWVkaXRhYmxlCiAgICAgLy8gcmVnaW9u
cyBvZiB0aGUgZG9jdW1lbnQsIGJ1dCB0aGF0IGlzIGVpdGhlciBpbXBvc3NpYmxlIG9yIGF0IGxl
YXN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gNTE1MDQpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDYg
Kzc1NywxNiBAQCB2b2lkIFJlbmRlclRleHQ6OmNhbGNQcmVmV2lkdGhzKGludCBsZWFkCiAgICAg
c2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAorYm9vbCBSZW5kZXJUZXh0Ojppc0FsbENv
bGxhcHNpYmxlV2hpdGVzcGFjZSgpCit7CisgICAgaW50IGxlbiA9IHRleHRMZW5ndGgoKTsKKyAg
ICBjb25zdCBVQ2hhciogdHh0ID0gY2hhcmFjdGVycygpOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuOyBpKyspCisgICAgICAgIGlmICghc3R5bGUoKS0+aXNDb2xsYXBzaWJsZVdoaXRlU3Bh
Y2UodHh0W2ldKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKyAgICAKIGJvb2wgUmVuZGVyVGV4dDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgY3VyclBvczsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDUxNTA0KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDggQEAgcHVi
bGljOgogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIGNhbGNQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgpOwotCisgICAgYm9vbCBpc0FsbENvbGxh
cHNpYmxlV2hpdGVzcGFjZSgpOworICAgIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBz
dHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSopIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTUwNCkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDA5LTEx
LTI0ICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2FuIGZvY3VzIGJ1dCBub3QgdHlwZSBp
bnRvIGNvbnRlbnQgZWRpdGFibGUgYmxvY2sgdGhhdCBjb250YWlucyBvbmx5IG5vbi1lZGl0YWJs
ZSBjb250ZW50LgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTk4MjkwMT4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNzUwCisKKyAgICAgICAgKiBl
ZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTEtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGVkaXRp
bmcvc2VsZWN0aW9uLzU4MjUzNTAtMS5odG1sOiBNb2RpZmllZCB0byB1c2UgY2FyZXQgcmVjdGFu
Z2xlLgorICAgICAgICAqIGVkaXRpbmcvc2VsZWN0aW9uLzU4MjUzNTAtMi1leHBlY3RlZC50eHQ6
CisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0yLmh0bWw6IE1vZGlmaWVkIHRv
IHVzZSBjYXJldCByZWN0YW5nbGUuCisgICAgICAgICogZWRpdGluZy9zZWxlY3Rpb24vbWl4ZWQt
ZWRpdGFiaWxpdHktMTAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5nL3Nl
bGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0eS0xMC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy81MzkwNjgxLTItZXhwZWN0ZWQudHh0OiBSZS1iYXNl
bGluZWQKKyAgICAgICAgdG8gYWNjb3VudCBmb3IgdGhlIG5ldyBwb3NzaWJsZSBjYXJldCBwb3Np
dGlvbi4KKwogMjAwOS0xMS0zMCAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3Jv
bmhhQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBTa2lwcGluZyB0ZXN0IHRoYXQgZmFpbHMg
YmVjYXVzZSBvZiBicm9rZW4gRE5ELCBhbmQgc29tZSB0ZXN0cwpJbmRleDogTGF5b3V0VGVzdHMv
ZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0xLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTEtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA1MTUwNCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uLzU4MjUzNTAtMS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzIEBACi1UaGlzIHRlc3RzIGZv
ciBhIGJ1ZyB3aGVyZSBtb3ZpbmcgdGhlIGNhcmV0IGxlZnQgdG93YXJkcyBhIG5vbi1lZGl0YWJs
ZSBwb2NrZXQgb2YgYW4gZWRpdGFibGUgcmVnaW9uIHdvdWxkIG1ha2UgdGhlIGNhcmV0IGRpc2Fw
cGVhci4gVGhlIGNhcmV0IHNob3VsZCBiZSBqdXN0IGFmdGVyIHRoZSAnYicgaW4gIkJvYiIuCitU
aGlzIHRlc3RzIGZvciBhIGJ1ZyB3aGVyZSBtb3ZpbmcgdGhlIGNhcmV0IGxlZnQgdG93YXJkcyBh
IG5vbi1lZGl0YWJsZSBwb2NrZXQgb2YgYW4gZWRpdGFibGUgcmVnaW9uIHdvdWxkIG1ha2UgdGhl
IGNhcmV0IGRpc2FwcGVhci4gVGhlIGNhcmV0IHNob3VsZCBiZSBqdXN0IGJlZm9yZSB0aGUgJ0In
IGluICJCb2IiLgogCi1DYXJldCBPbmU6ICgiIDsgIiwgMCkKK0NhcmV0OiAoOCwgNTM4KQpJbmRl
eDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0xLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0xLmh0bWwJKHJldmlz
aW9uIDUxNTA0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0xLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi08ZGl2IGlkPSJkZXNjcmlwdGlvbiI+
VGhpcyB0ZXN0cyBmb3IgYSBidWcgd2hlcmUgbW92aW5nIHRoZSBjYXJldCBsZWZ0IHRvd2FyZHMg
YSBub24tZWRpdGFibGUgcG9ja2V0IG9mIGFuIGVkaXRhYmxlIHJlZ2lvbiB3b3VsZCBtYWtlIHRo
ZSBjYXJldCBkaXNhcHBlYXIuIFRoZSBjYXJldCBzaG91bGQgYmUganVzdCBhZnRlciB0aGUgJ2In
IGluICJCb2IiLjwvZGl2PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPlRoaXMgdGVzdHMgZm9yIGEg
YnVnIHdoZXJlIG1vdmluZyB0aGUgY2FyZXQgbGVmdCB0b3dhcmRzIGEgbm9uLWVkaXRhYmxlIHBv
Y2tldCBvZiBhbiBlZGl0YWJsZSByZWdpb24gd291bGQgbWFrZSB0aGUgY2FyZXQgZGlzYXBwZWFy
LiBUaGUgY2FyZXQgc2hvdWxkIGJlIGp1c3QgYmVmb3JlIHRoZSAnQicgaW4gIkJvYiIuPC9kaXY+
CiA8ZGl2IGlkPSJlZGl0IiBjb250ZW50ZWRpdGFibGU9InRydWUiPjxzcGFuIGNvbnRlbnRlZGl0
YWJsZT0iZmFsc2UiPkJvYjwvc3Bhbj4gOyA8c3BhbiBjb250ZW50ZWRpdGFibGU9ImZhbHNlIj5T
YWxseTwvc3Bhbj48L2Rpdj4KIAogPHNjcmlwdD4KQEAgLTEwLDYgKzEwLDggQEAgdGV4dCA9IGVk
aXQuY2hpbGROb2Rlc1sxXTsKIHMgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiBzLnNldFBvc2l0
aW9uKHRleHQsIDApOwogcy5tb2RpZnkoIm1vdmUiLCAibGVmdCIsICJjaGFyYWN0ZXIiKTsKLWlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgZG9jdW1lbnQuYm9keS5pbm5lclRl
eHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVzY3JpcHRpb24iKS5pbm5lclRleHQgKyAi
XG5cbkNhcmV0IE9uZTogKFwiIiArIHMuYW5jaG9yTm9kZS5kYXRhICsgIlwiLCAiICsgcy5hbmNo
b3JPZmZzZXQgKyAiKSI7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
dmFyIGNhcmV0UmVjdCA9IHRleHRJbnB1dENvbnRyb2xsZXIuZmlyc3RSZWN0Rm9yQ2hhcmFjdGVy
UmFuZ2UodGV4dElucHV0Q29udHJvbGxlci5zZWxlY3RlZFJhbmdlKClbMF0sIDApOworICAgIGRv
Y3VtZW50LmJvZHkuaW5uZXJUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRlc2NyaXB0
aW9uIikuaW5uZXJUZXh0ICsgIlxuXG5DYXJldDogKCIgKyBjYXJldFJlY3RbMF0gKyAiLCAiICsg
Y2FyZXRSZWN0WzFdICsgIikiOworfQogPC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0
aW5nL3NlbGVjdGlvbi81ODI1MzUwLTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uLzU4MjUzNTAtMi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDUxNTA0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0yLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMgQEAKLVRoaXMgdGVzdHMgZm9yIGEg
YnVnIHdoZXJlIG1vdmluZyB0aGUgY2FyZXQgcmlnaHQgdG93YXJkcyBhIG5vbi1lZGl0YWJsZSBw
b2NrZXQgb2YgYW4gZWRpdGFibGUgcmVnaW9uIHdvdWxkIG1ha2UgdGhlIGNhcmV0IGRpc2FwcGVh
ci4gVGhlIGNhcmV0IHNob3VsZCBiZSBqdXN0IGJlZm9yZSB0aGUgJ1MnIGluICJTYWxseSIuCitU
aGlzIHRlc3RzIGZvciBhIGJ1ZyB3aGVyZSBtb3ZpbmcgdGhlIGNhcmV0IHJpZ2h0IHRvd2FyZHMg
YSBub24tZWRpdGFibGUgcG9ja2V0IG9mIGFuIGVkaXRhYmxlIHJlZ2lvbiB3b3VsZCBtYWtlIHRo
ZSBjYXJldCBkaXNhcHBlYXIuIFRoZSBjYXJldCBzaG91bGQgYmUganVzdCBhZnRlciB0aGUgJ3kn
IGluICJTYWxseSIuCiAKLUNhcmV0IE9uZTogKCIgOyAiLCAzKQorQ2FyZXQ6ICg3OSwgNTM4KQpJ
bmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0yLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0yLmh0bWwJKHJl
dmlzaW9uIDUxNTA0KQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9zZWxlY3Rpb24vNTgyNTM1MC0y
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi08ZGl2IGlkPSJkZXNjcmlwdGlv
biI+VGhpcyB0ZXN0cyBmb3IgYSBidWcgd2hlcmUgbW92aW5nIHRoZSBjYXJldCByaWdodCB0b3dh
cmRzIGEgbm9uLWVkaXRhYmxlIHBvY2tldCBvZiBhbiBlZGl0YWJsZSByZWdpb24gd291bGQgbWFr
ZSB0aGUgY2FyZXQgZGlzYXBwZWFyLiBUaGUgY2FyZXQgc2hvdWxkIGJlIGp1c3QgYmVmb3JlIHRo
ZSAnUycgaW4gIlNhbGx5Ii48L2Rpdj4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj5UaGlzIHRlc3Rz
IGZvciBhIGJ1ZyB3aGVyZSBtb3ZpbmcgdGhlIGNhcmV0IHJpZ2h0IHRvd2FyZHMgYSBub24tZWRp
dGFibGUgcG9ja2V0IG9mIGFuIGVkaXRhYmxlIHJlZ2lvbiB3b3VsZCBtYWtlIHRoZSBjYXJldCBk
aXNhcHBlYXIuIFRoZSBjYXJldCBzaG91bGQgYmUganVzdCBhZnRlciB0aGUgJ3knIGluICJTYWxs
eSIuPC9kaXY+CiA8ZGl2IGlkPSJlZGl0IiBjb250ZW50ZWRpdGFibGU9InRydWUiPjxzcGFuIGNv
bnRlbnRlZGl0YWJsZT0iZmFsc2UiPkJvYjwvc3Bhbj4gOyA8c3BhbiBjb250ZW50ZWRpdGFibGU9
ImZhbHNlIj5TYWxseTwvc3Bhbj48L2Rpdj4KIAogPHNjcmlwdD4KQEAgLTEwLDYgKzEwLDggQEAg
dGV4dCA9IGVkaXQuY2hpbGROb2Rlc1sxXTsKIHMgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiBz
LnNldFBvc2l0aW9uKHRleHQsIHRleHQubGVuZ3RoKTsKIHMubW9kaWZ5KCJtb3ZlIiwgInJpZ2h0
IiwgImNoYXJhY3RlciIpOwotaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICBk
b2N1bWVudC5ib2R5LmlubmVyVGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkZXNjcmlw
dGlvbiIpLmlubmVyVGV4dCArICJcblxuQ2FyZXQgT25lOiAoXCIiICsgcy5hbmNob3JOb2RlLmRh
dGEgKyAiXCIsICIgKyBzLmFuY2hvck9mZnNldCArICIpIjsKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICB2YXIgY2FyZXRSZWN0ID0gdGV4dElucHV0Q29udHJvbGxlci5m
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSh0ZXh0SW5wdXRDb250cm9sbGVyLnNlbGVjdGVkUmFu
Z2UoKVswXSwgMCk7CisgICAgZG9jdW1lbnQuYm9keS5pbm5lclRleHQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZGVzY3JpcHRpb24iKS5pbm5lclRleHQgKyAiXG5cbkNhcmV0OiAoIiArIGNh
cmV0UmVjdFswXSArICIsICIgKyBjYXJldFJlY3RbMV0gKyAiKSI7Cit9CiA8L3NjcmlwdD4KSW5k
ZXg6IExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21peGVkLWVkaXRhYmlsaXR5LTEwLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9t
aXhlZC1lZGl0YWJpbGl0eS0xMC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0eS0xMC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKyMxIERJViBlbGVtZW50IHdpdGggYSBub24t
ZWRpdGFibGUgZWxlbWVudCBvbmx5IGFsaWduIGNlbnRlcjoKKworSGVsbG8KKyMyIERJViBlbGVt
ZW50IHdpdGggYSBub24tZWRpdGFibGUgZWxlbWVudCBvbmx5IGFsaWduIGxlZnQ6CisKK0hlbGxv
CisjMyBESVYgZWxlbWVudCB3aXRoIGEgbm9uLWVkaXRhYmxlIGVsZW1lbnQgb25seSBhbGlnbiBy
aWdodDoKKworSGVsbG8KKyM0IERJViBlbGVtZW50IHdpdGggdHdvIG5vbi1lZGl0YWJsZSBlbGVt
ZW50d2l0aCBwYWRkaW5nOgorCitIZWxsbyBXb3JsZAorIzUgRElWIGVsZW1lbnQgZW1wdHkKKwor
QW5jaG9yIChbb2JqZWN0IEhUTUxEaXZFbGVtZW50XSwgMCBjYXJldFs0MCw1NDBdIHJlZnBvcz00
MCkgaXMgY29ycmVjdC4KK0FuY2hvciAoW29iamVjdCBIVE1MRGl2RWxlbWVudF0sIDMgY2FyZXRb
NzUsNTQwXSByZWZwb3M9NzUpIGlzIGNvcnJlY3QuCitBbmNob3IgKFtvYmplY3QgSFRNTERpdkVs
ZW1lbnRdLCAxIGNhcmV0WzQzLDQ3Ml0gcmVmcG9zPTQzKSBpcyBjb3JyZWN0LgorQW5jaG9yIChb
b2JqZWN0IEhUTUxEaXZFbGVtZW50XSwgMCBjYXJldFs4LDQ3Ml0gcmVmcG9zPTgpIGlzIGNvcnJl
Y3QuCitBbmNob3IgKFtvYmplY3QgSFRNTERpdkVsZW1lbnRdLCAwIGNhcmV0WzczLDQwNF0gcmVm
cG9zPTczKSBpcyBjb3JyZWN0LgorQW5jaG9yIChbb2JqZWN0IEhUTUxEaXZFbGVtZW50XSwgMyBj
YXJldFs0NywzMzZdIHJlZnBvcz00NykgaXMgY29ycmVjdC4KK0FuY2hvciAoW29iamVjdCBIVE1M
RGl2RWxlbWVudF0sIDAgY2FyZXRbNTgsMjY4XSByZWZwb3M9NTgpIGlzIGNvcnJlY3QuCkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0eS0xMC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvc2VsZWN0aW9uL21peGVkLWVkaXRh
YmlsaXR5LTEwLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3NlbGVj
dGlvbi9taXhlZC1lZGl0YWJpbGl0eS0xMC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
NiBAQAorPGh0bWw+Cis8aGVhZD4KKwk8dGl0bGU+VGhpcyB0ZXN0cyB0aGUgYWJpbGl0eSB0byBw
bGFjZSB0aGUgY2FyZXQgaW4gYW4gZWRpdGFibGUgZGl2IHRoYXQgY29udGFpbnMgb25seSBub24g
ZWRpdGFibGUgY29udGVudDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgPHA+IzEgRElWIGVs
ZW1lbnQgd2l0aCBhIG5vbi1lZGl0YWJsZSBlbGVtZW50IG9ubHkgPHNwYW4gc3R5bGU9ImNvbG9y
OnJlZCI+YWxpZ24gY2VudGVyPC9zcGFuPjo8L3A+CisgIDxkaXYgc3R5bGU9IndpZHRoOjEwMHB4
O2JhY2tncm91bmQtY29sb3I6I2NlZTt0ZXh0LWFsaWduOiBjZW50ZXI7IiBjb250ZW50ZWRpdGFi
bGU9InRydWUiIGlkPSJlZGl0MSI+CisgICAgPHNwYW4gY29udGVudGVkaXRhYmxlPSJmYWxzZSIg
aWQ9Im5vbmVkaXQxIj5IZWxsbzwvc3Bhbj4KKyAgPC9kaXY+CisgIDxwPiMyIERJViBlbGVtZW50
IHdpdGggYSBub24tZWRpdGFibGUgZWxlbWVudCBvbmx5IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQi
PmFsaWduIGxlZnQ8L3NwYW4+OjwvcD4KKyAgPGRpdiBzdHlsZT0id2lkdGg6MTAwcHg7YmFja2dy
b3VuZC1jb2xvcjojY2VlOyIgY29udGVudGVkaXRhYmxlPSJ0cnVlIiBpZD0iZWRpdDIiPjxzcGFu
IGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiIGlkPSJub25lZGl0MiI+SGVsbG88L3NwYW4+PC9kaXY+
CisgIDxwPiMzIERJViBlbGVtZW50IHdpdGggYSBub24tZWRpdGFibGUgZWxlbWVudCBvbmx5IDxz
cGFuIHN0eWxlPSJjb2xvcjpyZWQiPmFsaWduIHJpZ2h0PC9zcGFuPjo8L3A+CisgIDxkaXYgc3R5
bGU9IndpZHRoOjEwMHB4O2JhY2tncm91bmQtY29sb3I6I2NlZTt0ZXh0LWFsaWduOiByaWdodDsi
IGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIgaWQ9ImVkaXQzIj4KKyAgPHNwYW4gY29udGVudGVkaXRh
YmxlPSJmYWxzZSIgaWQ9Im5vbmVkaXQzIj5IZWxsbzwvc3Bhbj48L2Rpdj4KKyAgPHA+IzQgRElW
IGVsZW1lbnQgd2l0aCB0d28gbm9uLWVkaXRhYmxlIGVsZW1lbnQ8c3BhbiBzdHlsZT0iY29sb3I6
cmVkIj53aXRoIHBhZGRpbmc8L3NwYW4+OjwvcD4KKyAgPGRpdiBzdHlsZT0id2lkdGg6MjAwcHg7
YmFja2dyb3VuZC1jb2xvcjojY2VlOyIgY29udGVudGVkaXRhYmxlPSJ0cnVlIiBpZD0iZWRpdDQi
PgorICAgICAgPHNwYW4gY29udGVudGVkaXRhYmxlPSJmYWxzZSI+SGVsbG8gPC9zcGFuPgorICAg
ICAgPHNwYW4gY29udGVudGVkaXRhYmxlPSJmYWxzZSIgaWQ9Im5vbmVkaXQ0Ij5Xb3JsZDwvc3Bh
bj4KKyAgPC9kaXY+CisgIDxwPiM1IERJViBlbGVtZW50IGVtcHR5PC9wPgorICA8ZGl2IHN0eWxl
PSJ3aWR0aDoxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiNjZWU7dGV4dC1hbGlnbjogY2VudGVyOyIg
Y29udGVudGVkaXRhYmxlPSJ0cnVlIiBpZD0iZWRpdDUiPgorICA8L2Rpdj4KKyAgPHVsIGlkPSJj
b25zb2xlIj48L3VsPgorPC9ib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhzdHIpIHsKKyAg
ICB2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAgIGxpLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cikpOworICAgIHZhciBjb25zb2xlID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgICBjb25zb2xlLmFwcGVuZENoaWxk
KGxpKTsKK30KKworZnVuY3Rpb24gY2FyZXRDb29yZGluYXRlcygpCit7CisgICAgaWYgKCF3aW5k
b3cudGV4dElucHV0Q29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIHsgeDogMCwgeSA6MCB9Owor
ICAgIHZhciBjYXJldFJlY3QgPSB0ZXh0SW5wdXRDb250cm9sbGVyLmZpcnN0UmVjdEZvckNoYXJh
Y3RlclJhbmdlKHRleHRJbnB1dENvbnRyb2xsZXIuc2VsZWN0ZWRSYW5nZSgpWzBdLCAwKTsKKyAg
ICByZXR1cm4geyB4OiBjYXJldFJlY3RbMF0sIHk6IGNhcmV0UmVjdFsxXSB9OworfQorCitmdW5j
dGlvbiBydW5UZXN0KHgsIHksIGVsZW0sIG9mZnNldCwgcmVmcG9zKSB7CisgICAgZXZlbnRTZW5k
ZXIubW91c2VNb3ZlVG8oeCwgeSk7CisgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAg
ZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAg
IGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICAKKyAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93
LmdldFNlbGVjdGlvbigpOworCisgICAgdmFyIGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9y
Tm9kZTsKKyAgICB2YXIgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldDsKKwor
ICAgIHZhciBjb29yZCA9IGNhcmV0Q29vcmRpbmF0ZXMoKTsKKyAgICB2YXIgYW5jaG9yU3RyaW5n
ID0gIkFuY2hvciAoIiArIGFuY2hvck5vZGUgKyAiLCAiICsgYW5jaG9yT2Zmc2V0ICsgIiBjYXJl
dFsiICsgY29vcmQueCArICIsIiArIGNvb3JkLnkgKyAiXSByZWZwb3M9IiArIHJlZnBvcyArICIp
IjsKKyAgICB2YXIgYW5jaG9yQ29ycmVjdCA9IGFuY2hvck5vZGUgPT0gZWxlbSAmJiBhbmNob3JP
ZmZzZXQgPT0gb2Zmc2V0ICYmIGNvb3JkLnggPT0gcmVmcG9zOworICAgIGlmIChhbmNob3JDb3Jy
ZWN0KQorICAgICAgICBsb2coYW5jaG9yU3RyaW5nICsgIiBpcyBjb3JyZWN0LiIpOworICAgIGVs
c2UKKyAgICAgICAgbG9nKGFuY2hvclN0cmluZyArICIgaXMgaW5jb3JyZWN0LiIpOworfQorCitm
dW5jdGlvbiBhdXRvbWF0aWNUZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsgICAKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgICAgIAorICAgICAgICB2YXIgZWxlbTsKKyAgICAgICAgCisgICAgICAg
IC8vIHRoZSBkaXYgaGFzIHRleHQtYWxpZ25tZW50IGNlbnRlcgorICAgICAgICBlbGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQxIik7CisgICAgICAgIHggPSBlbGVtLm9mZnNldExl
ZnQgKyAxMDsKKyAgICAgICAgeSA9IGVsZW0ub2Zmc2V0VG9wICsgZWxlbS5vZmZzZXRIZWlnaHQg
LyAyOworICAgICAgICBydW5UZXN0KHgsIHksIGVsZW0sIDAsIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJub25lZGl0MSIpLm9mZnNldExlZnQpOworICAgICAgICB4ID0gZWxlbS5vZmZzZXRMZWZ0
ICsgZWxlbS5vZmZzZXRXaWR0aCAtIDEwOworICAgICAgICBydW5UZXN0KHgsIHksIGVsZW0sIDMs
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub25lZGl0MSIpLm9mZnNldExlZnQgKyBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibm9uZWRpdDEiKS5vZmZzZXRXaWR0aCk7ICAgICAgIAorCisgICAg
ICAgIC8vIHRoZSBkaXYgaGFzIHRleHQtYWxpZ25tZW50IGxlZnQKKyAgICAgICAgZWxlbSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJlZGl0MiIpOworICAgICAgICB4ID0gZWxlbS5vZmZzZXRM
ZWZ0ICsgZWxlbS5vZmZzZXRXaWR0aCAtIDEwOworICAgICAgICB5ID0gZWxlbS5vZmZzZXRUb3Ag
KyBlbGVtLm9mZnNldEhlaWdodCAvIDI7CisgICAgICAgIHJ1blRlc3QoeCwgeSwgZWxlbSwgMSwg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5vbmVkaXQyIikub2Zmc2V0TGVmdCArIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJub25lZGl0MiIpLm9mZnNldFdpZHRoKTsKKyAgICAgICAgeCA9IGVs
ZW0ub2Zmc2V0TGVmdDsKKyAgICAgICAgcnVuVGVzdCh4LCB5LCBlbGVtLCAwLCBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibm9uZWRpdDIiKS5vZmZzZXRMZWZ0KTsKKworICAgICAgICAvLyB0aGUg
ZGl2IGhhcyB0ZXh0LWFsaWdubWVudCByaWdodAorICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImVkaXQzIik7CisgICAgICAgIHggPSBlbGVtLm9mZnNldExlZnQgKyAxMDsK
KyAgICAgICAgeSA9IGVsZW0ub2Zmc2V0VG9wICsgZWxlbS5vZmZzZXRIZWlnaHQgLyAyOworICAg
ICAgICBydW5UZXN0KHgsIHksIGVsZW0sIDAsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJub25l
ZGl0MyIpLm9mZnNldExlZnQpOworCisgICAgICAgIC8vIHRoZSBkaXYgY29udGFpbnMgMiBub24g
ZWRpdGFibGUgc3BhbgorICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVk
aXQ0Iik7CisgICAgICAgIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibm9uZWRpdDQiKS5v
ZmZzZXRMZWZ0OworICAgICAgICB5ID0gZWxlbS5vZmZzZXRUb3AgKyBlbGVtLm9mZnNldEhlaWdo
dCAvIDI7CisgICAgICAgIHJ1blRlc3QoeCwgeSwgZWxlbSwgMywgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm5vbmVkaXQ0Iikub2Zmc2V0TGVmdCk7CisKKyAgICAgICAgLy8gdGhlIGRpdiBpcyBl
bXB0eQorICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVkaXQ1Iik7Cisg
ICAgICAgIHggPSBlbGVtLm9mZnNldExlZnQ7CisgICAgICAgIHkgPSBlbGVtLm9mZnNldFRvcCAr
IGVsZW0ub2Zmc2V0SGVpZ2h0IC8gMjsKKyAgICAgICAgcnVuVGVzdCh4LCB5LCBlbGVtLCAwLCAo
ZWxlbS5vZmZzZXRMZWZ0ICsgZWxlbS5vZmZzZXRXaWR0aCkvMiArIDQpOworICAgIH0KK30KKwor
YXV0b21hdGljVGVzdCgpOyAgICAgICAgCis8L3NjcmlwdD4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9lZGl0aW5nL2RlbGV0aW5nLzUzOTA2ODEtMi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2VkaXRpbmcvZGVsZXRp
bmcvNTM5MDY4MS0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTE1MDQpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZWRpdGluZy9kZWxldGluZy81MzkwNjgxLTItZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0xNiwzICsxNiw0IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYw
MAogICAgICAgICBSZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNpemUgMjB4MTgKICAgICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyMHgxOAogICAgICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjA6ICJiYXIiCitjYXJldDogcG9zaXRpb24gMCBvZiBj
aGlsZCAyIHtESVZ9IG9mIGNoaWxkIDEge0JPRFl9IG9mIGNoaWxkIDAge0hUTUx9IG9mIGRvY3Vt
ZW50Cg==
</data>
<flag name="review"
          id="25809"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>