<?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>72701</bug_id>
          
          <creation_ts>2011-11-18 01:22:14 -0800</creation_ts>
          <short_desc>Web Inspector: [Protocol] Brush up retrieval of CSS styles for elements</short_desc>
          <delta_ts>2011-11-21 04:20:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>505597</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-11-18 01:22:14 -0800</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505601</commentid>
    <comment_count>1</comment_count>
      <attachid>115765</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-11-18 01:41:21 -0800</bug_when>
    <thetext>Created attachment 115765
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505603</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-18 01:43:52 -0800</bug_when>
    <thetext>Attachment 115765 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/insp...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:240:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:67:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505619</commentid>
    <comment_count>3</comment_count>
      <attachid>115765</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-11-18 02:09:02 -0800</bug_when>
    <thetext>Comment on attachment 115765
Patch

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

&gt; Source/WebCore/inspector/Inspector.json:1438
&gt;                  &quot;type&quot;: &quot;object&quot;,

I don&apos;t see why we need this class - you should return these from getStylesFromNode.

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:256
&gt; +        // Early return to avoid unnecessary style recalcs.

This early return confuses me - we should treat all the flags equally.

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:262
&gt;      bool needStyleRecalc = element != m_lastElementWithPseudoState || forcePseudoState != m_lastPseudoState;

I would just add a check here to not recalc in case of inline query.

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:311
&gt; +                    parentStyle-&gt;setObject(&quot;inlineStyle&quot;, styleSheet-&gt;buildObjectForStyle(styleSheet-&gt;styleForId(InspectorCSSId(styleSheet-&gt;id(), 0))));

So asking for inherited styles will return all: inline, matched, etc? This does not sound right.

&gt; Source/WebCore/inspector/front-end/CSSStyleModel.js:88
&gt; +            if (&quot;computedStyle&quot; in payload)

Here and below, use &quot;if (payload.computedStyle)&quot; for compilability.

&gt; Source/WebCore/inspector/front-end/CSSStyleModel.js:150
&gt; +        CSSAgent.getStylesForNode(nodeId, [], WebInspector.CSSStyleModel.StyleFlags.COMPUTED, callback.bind(null, userCallback));

Computed style should take forced pseudo classes into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505773</commentid>
    <comment_count>4</comment_count>
      <attachid>115765</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-11-18 07:30:29 -0800</bug_when>
    <thetext>Comment on attachment 115765
Patch

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

&gt; Source/WebCore/inspector/front-end/CSSStyleModel.js:59
&gt; +    INLINE: 1 &lt;&lt; 0,
&gt; +    COMPUTED: 1 &lt;&lt; 1,
&gt; +    MATCHED: 1 &lt;&lt; 2,
&gt; +    ATTRIBUTES: 1 &lt;&lt; 3,
&gt; +    PSEUDO: 1 &lt;&lt; 4,
&gt; +    INHERITED: 1 &lt;&lt; 5,
&gt; +    ALL: (1 &lt;&lt; 6) - 1

We don&apos;t use ALLCAPS style for enums. You didn&apos;t do it in InspectorCSSAgent.h. There should also be a comment about this needing to match InspectorCSSAgent.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505775</commentid>
    <comment_count>5</comment_count>
      <attachid>115765</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2011-11-18 07:33:01 -0800</bug_when>
    <thetext>Comment on attachment 115765
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        * inspector/Inspector.json:

Do we have any rules about bumping protocol version when removing methods (or any other compatability change)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505803</commentid>
    <comment_count>6</comment_count>
      <attachid>115813</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-11-18 08:17:35 -0800</bug_when>
    <thetext>Created attachment 115813
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505806</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-18 08:21:19 -0800</bug_when>
    <thetext>Attachment 115813 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/insp...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:240:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:240:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:240:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:297:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:297:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:311:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:67:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:68:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:68:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:69:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:69:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:69:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 12 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505808</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-11-18 08:22:30 -0800</bug_when>
    <thetext>&gt; Do we have any rules about bumping protocol version when removing methods (or any other compatability change)?

CSS domain is currently marked as &quot;hidden&quot; as a whole. We don&apos;t generate documentation for it. Breaking backwards compatibility for published domains results in a build error generated by generate-inspector-protocol-version script. See http://code.google.com/chrome/devtools/docs/remote-debugging.html#protocol for public compatibility definition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505817</commentid>
    <comment_count>9</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-11-18 08:33:28 -0800</bug_when>
    <thetext>@Timothy: this is one step toward cleaning up the CSS domain to prepare it for opening to the public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506788</commentid>
    <comment_count>10</comment_count>
      <attachid>115813</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-11-21 01:22:40 -0800</bug_when>
    <thetext>Comment on attachment 115813
Patch

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

&gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:317
&gt; +    unsigned forcePseudoState = computePseudoClassMask(forcedPseudoClasses ? forcedPseudoClasses-&gt;get() : 0);

This logic is not trivial. Please do not copy-paste it.

&gt; Source/WebCore/inspector/front-end/AuditRules.js:746
&gt; +            function inlineCallback(targetResult, inlineStyle, styleAttributes)

You can define targetResult as a variable in the getStyles scope.

&gt; LayoutTests/inspector/styles/styles-new-API.html:53
&gt; +        function computedCallback(error, computedStyle)

Why do we need this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506842</commentid>
    <comment_count>11</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-11-21 03:41:24 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 115813 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115813&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorCSSAgent.cpp:317
&gt; &gt; +    unsigned forcePseudoState = computePseudoClassMask(forcedPseudoClasses ? forcedPseudoClasses-&gt;get() : 0);
&gt; 
&gt; This logic is not trivial. Please do not copy-paste it.

Done.

&gt; &gt; Source/WebCore/inspector/front-end/AuditRules.js:746
&gt; &gt; +            function inlineCallback(targetResult, inlineStyle, styleAttributes)
&gt; 
&gt; You can define targetResult as a variable in the getStyles scope.

Done.

&gt; &gt; LayoutTests/inspector/styles/styles-new-API.html:53
&gt; &gt; +        function computedCallback(error, computedStyle)
&gt; 
&gt; Why do we need this?

Do you mean I can remove the entire test (styles-new-API.html) altogether? It&apos;s a bare API unit test, not an integration test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506846</commentid>
    <comment_count>12</comment_count>
      <attachid>116061</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-11-21 03:57:08 -0800</bug_when>
    <thetext>Created attachment 116061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506849</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-21 03:59:24 -0800</bug_when>
    <thetext>Attachment 116061 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/insp...&quot; exit_code: 1

Source/WebCore/inspector/InspectorCSSAgent.cpp:251:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:251:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:251:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:303:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:303:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.cpp:317:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:67:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:68:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:68:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:69:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:69:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorCSSAgent.h:69:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 12 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506868</commentid>
    <comment_count>14</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-11-21 04:20:12 -0800</bug_when>
    <thetext>Committed r100900: &lt;http://trac.webkit.org/changeset/100900&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115765</attachid>
            <date>2011-11-18 01:41:21 -0800</date>
            <delta_ts>2011-11-18 08:17:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72701-20111118134119.patch</filename>
            <type>text/plain</type>
            <size>31161</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI0NzQyY2YyOTlkMTVl
ODZmZGY4MjQyZTE0N2Y1OWE4OTdlN2VkOC4uNmZiMWQxZmI3MzBkMjMzZTUyODA4YmIzZWEwYTMy
ODUwZGYwMjI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDExLTExLTE4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1Byb3RvY29sXSBSZXRhaW4gYSBzaW5nbGUgdW5pdmVyc2FsIG1ldGhvZCBmb3IgbG9h
ZGluZyBhIHJlcXVpcmVkIGNvbWJpbmF0aW9uIG9mIGVsZW1lbnQgc3R5bGVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjcwMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVzRm9yTm9kZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUuZG9SdW4uZ2V0U3R5bGVzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuZ2V0U3R5bGVzQXN5bmMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmdldENvbXB1dGVkU3R5bGVB
c3luYyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuZ2V0
SW5saW5lU3R5bGVBc3luYyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNT
aWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5w
cm90b3R5cGUuX2lubmVyVXBkYXRlKToKKwogMjAxMS0xMS0xNyAgUGF2ZWwgRmVsZG1hbiAgPHBm
ZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkOiBmaXggSUUgdXNlciBh
Z2VudHMgc3RyaW5ncyBpbiB0aGUgaW5zcGVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uCmluZGV4IDkyNTQ0ZTMwYjNkNmQ4NmZjMzJiMWJiMzljNjQ3NTc1NjBkZmU1
MDguLjc4YmM3ZWIxNzcyOTE1OWZjOWUxNmFlYjQ0MDRlYWMzNmJhMzRmOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE0MzgsMTEgKzE0MzgsMTEgQEAKICAg
ICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWwogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlubGluZVN0eWxlIiwgIiRy
ZWYiOiAiQ1NTU3R5bGUiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIG5v
ZGUncyBpbmxpbmUgc3R5bGUsIGlmIGFueS4iIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29tcHV0ZWRTdHlsZSIsICIkcmVmIjogIkNTU0NvbXB1dGVkU3R5bGUiLCAiZGVzY3Jp
cHRpb24iOiAiVGhlIG5vZGUncyBjb21wdXRlZCBzdHlsZS4iIH0sCi0gICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibWF0Y2hlZENTU1J1bGVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMi
OiB7ICIkcmVmIjogIkNTU1J1bGUiIH0sICJkZXNjcmlwdGlvbiI6ICJDU1MgcnVsZXMgbWF0Y2hp
bmcgdGhpcyBub2RlLCBmcm9tIGFsbCBhcHBsaWNhYmxlIHN0eWxlc2hlZXRzLiIgfSwKLSAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHlsZUF0dHJpYnV0ZXMiLCAidHlwZSI6ICJhcnJh
eSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiQ1NTU3R5bGVBdHRyaWJ1dGUiIH0sICJkZXNjcmlwdGlv
biI6ICJFbnRyaWVzIGZvciBzdHlsZS1yZWxhdGVkIGVsZW1lbnQgYXR0cmlidXRlcyAoZS5nLiB3
aWR0aD0yMCkuIn0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHNldWRvRWxlbWVu
dHMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiUHNldWRvSWRSdWxlcyIg
fSwgImRlc2NyaXB0aW9uIjogIlBzZXVkbyBzdHlsZSBydWxlcyBmb3IgdGhpcyBub2RlLiIgfSwK
LSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbmhlcml0ZWQiLCAidHlwZSI6ICJhcnJh
eSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiSW5oZXJpdGVkU3R5bGVFbnRyeSIgfSwgImRlc2NyaXB0
aW9uIjogIkEgY2hhaW4gb2YgaW5oZXJpdGVkIHN0eWxlcyAoZnJvbSB0aGUgaW1tZWRpYXRlIG5v
ZGUgcGFyZW50IHVwIHRvIHRoZSBET00gdHJlZSByb290KS4iIH0KKyAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb21wdXRlZFN0eWxlIiwgIiRyZWYiOiAiQ1NTQ29tcHV0ZWRTdHlsZSIs
ICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgbm9kZSdzIGNvbXB1dGVkIHN0
eWxlLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtYXRjaGVkQ1NTUnVsZXMi
LCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiQ1NTUnVsZSIgfSwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkNTUyBydWxlcyBtYXRjaGluZyB0aGlzIG5vZGUs
IGZyb20gYWxsIGFwcGxpY2FibGUgc3R5bGVzaGVldHMuIiB9LAorICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInN0eWxlQXR0cmlidXRlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjog
eyAiJHJlZiI6ICJDU1NTdHlsZUF0dHJpYnV0ZSIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2Ny
aXB0aW9uIjogIkVudHJpZXMgZm9yIHN0eWxlLXJlbGF0ZWQgZWxlbWVudCBhdHRyaWJ1dGVzIChl
LmcuIHdpZHRoPTIwKS4ifSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwc2V1ZG9F
bGVtZW50cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJQc2V1ZG9JZFJ1
bGVzIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiUHNldWRvIHN0eWxlIHJ1
bGVzIGZvciB0aGlzIG5vZGUuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlu
aGVyaXRlZCIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJJbmhlcml0ZWRT
dHlsZUVudHJ5IiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQSBjaGFpbiBv
ZiBpbmhlcml0ZWQgc3R5bGVzIChmcm9tIHRoZSBpbW1lZGlhdGUgbm9kZSBwYXJlbnQgdXAgdG8g
dGhlIERPTSB0cmVlIHJvb3QpLiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkEgaG9sZGVyIGZvciBhbGwgQ1NTIHN0eWxlcyBhcHBsaWNhYmxl
IHRvIGEgcGFydGljdWxhciBET00gbm9kZS4iCiAgICAgICAgICAgICB9LApAQCAtMTU3MiwzMiAr
MTU3MiwxMyBAQAogICAgICAgICAgICAgICAgICJuYW1lIjogImdldFN0eWxlc0Zvck5vZGUiLAog
ICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vZGVJZCIsICIkcmVmIjogIkRPTS5Ob2RlSWQiIH0sCi0gICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZm9yY2VkUHNldWRvQ2xhc3NlcyIsICJ0eXBlIjogImFycmF5IiwgIml0
ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiYWN0aXZlIiwgImZvY3VzIiwgImhv
dmVyIiwgInZpc2l0ZWQiXSB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiRWxl
bWVudCBwc2V1ZG8gY2xhc3NlcyB0byBmb3JjZSB3aGVuIGNvbXB1dGluZyBhcHBsaWNhYmxlIHN0
eWxlIHJ1bGVzLiIgfQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZvcmNlZFBzZXVk
b0NsYXNzZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImFjdGl2ZSIsICJmb2N1cyIsICJob3ZlciIsICJ2aXNpdGVkIl0gfSwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnQgcHNldWRvIGNsYXNzZXMgdG8gZm9y
Y2Ugd2hlbiBjb21wdXRpbmcgYXBwbGljYWJsZSBzdHlsZSBydWxlcy4iIH0sCisgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic3R5bGVGbGFncyIsICJ0eXBlIjogImludGVnZXIiLCAiZGVz
Y3JpcHRpb24iOiAiQSBsb2dpY2FsIE9SIG9mIGZsYWdzIGRlbm90aW5nIHJlcXVpcmVkIHR5cGVz
IG9mIHN0eWxlczogMSAtIGlubGluZSBzdHlsZSwgMiAtIGNvbXB1dGVkIHN0eWxlLCA0IC0gbWF0
Y2hlZCBydWxlcywgOCAtIGF0dHJpYnV0ZSBzdHlsZXMsIDE2IC0gcHNldWRvIHN0eWxlcywgMzIg
LSBpbmhlcml0ZWQgc3R5bGVzLiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAg
ICAgInJldHVybnMiOiBbCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3R5bGVzIiwg
IiRyZWYiOiAiQ1NTTm9kZVN0eWxlcyIsICJkZXNjcmlwdGlvbiI6ICJBbGwgc3R5bGVzIGZvciB0
aGUgc3BlY2lmaWVkIERPTSBub2RlLiIgfQogICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlJldHVybnMgYWxsIHN0eWxlcyBmb3IgYSBET00gbm9kZSBp
ZGVudGlmaWVkIGJ5IDxjb2RlPm5vZGVJZDwvY29kZT4uIgotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAibmFtZSI6ICJnZXRDb21wdXRlZFN0eWxlRm9yTm9k
ZSIsCi0gICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm9kZUlkIiwgIiRyZWYiOiAiRE9NLk5vZGVJZCIgfQotICAgICAgICAgICAg
ICAgIF0sCi0gICAgICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3R5bGUiLCAiJHJlZiI6ICJDU1NTdHlsZSIsICJkZXNjcmlwdGlvbiI6ICJD
b21wdXRlZCBzdHlsZSBmb3IgdGhlIHNwZWNpZmllZCBET00gbm9kZS4iIH0KLSAgICAgICAgICAg
ICAgICBdLAotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1cm5zIHRoZSBjb21w
dXRlZCBzdHlsZSBmb3IgYSBET00gbm9kZSBpZGVudGlmaWVkIGJ5IDxjb2RlPm5vZGVJZDwvY29k
ZT4uIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAibmFt
ZSI6ICJnZXRJbmxpbmVTdHlsZUZvck5vZGUiLAotICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIsICIkcmVmIjogIkRP
TS5Ob2RlSWQiIH0KLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICJyZXR1cm5z
IjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0eWxlIiwgIiRyZWYiOiAiQ1NT
U3R5bGUiLCAiZGVzY3JpcHRpb24iOiAiSW5saW5lIHN0eWxlIGZvciB0aGUgc3BlY2lmaWVkIERP
TSBub2RlLiIgfQotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlJldHVybnMgdGhlIGlubGluZSBzdHlsZSAoaWYgcHJlc2VudCkgZm9yIGEgRE9NIG5v
ZGUgaWRlbnRpZmllZCBieSA8Y29kZT5ub2RlSWQ8L2NvZGU+LiIKKyAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiUmV0dXJucyByZXF1ZXN0ZWQgc3R5bGVzIGZvciBhIERPTSBub2RlIGlk
ZW50aWZpZWQgYnkgPGNvZGU+bm9kZUlkPC9jb2RlPi4iCiAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogImdldEFsbFN0eWxlU2hlZXRzIiwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDg1
ZWZiNDFlM2UwNTM0Y2Q5MmI1MjYzODMyYjlkMTQ0MTQ5MmExMzUuLjU1ZTcyYmE5MzkzOTQ3NjBj
NTA1MDczYWQ5ODk2Y2ZiYzI2NmU0MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtMjM3LDcgKzIzNyw3IEBAIGJvb2wgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoRWxlbWVudCogZWxlbWVudCwgQ1NTU2VsZWN0b3I6
OlBzZXVkb1R5CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZXNG
b3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRy
PEluc3BlY3RvckFycmF5PiogZm9yY2VkUHNldWRvQ2xhc3NlcywgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlc0Zvck5vZGUo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBpbnQgc3R5bGVGbGFncywgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVu
dEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKQEAgLTI0NSwx
MyArMjQ1LDE4IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlc0Zvck5vZGUoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjCiAKICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogCi0g
ICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNw
ZWN0b3JTdHlsZVNoZWV0KGVsZW1lbnQpOwotICAgIGlmIChzdHlsZVNoZWV0KQotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgiaW5saW5lU3R5bGUiLCBzdHlsZVNoZWV0LT5idWlsZE9i
amVjdEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCkpKTsKKyAgICAvLyBJbmxpbmUgc3R5bGUuCisg
ICAgaWYgKHN0eWxlRmxhZ3MgJiBTdHlsZUZsYWdJbmxpbmUpIHsKKyAgICAgICAgSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNo
ZWV0KGVsZW1lbnQpOworICAgICAgICBpZiAoc3R5bGVTaGVldCkKKyAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoZWxlbWVudC0+c3R5bGUoKSkpOworICAgIH0KIAotICAgIFJlZlB0cjxDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVJbmZvID0gY29tcHV0ZWRTdHlsZShl
bGVtZW50LCB0cnVlKTsgLy8gU3VwcG9ydCB0aGUgdmlld2luZyBvZiA6dmlzaXRlZCBpbmZvcm1h
dGlvbiBpbiBjb21wdXRlZCBzdHlsZS4KLSAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGNvbXB1
dGVkSW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lk
KCksIGNvbXB1dGVkU3R5bGVJbmZvLCAwKTsKLSAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
Y29tcHV0ZWRTdHlsZSIsIGNvbXB1dGVkSW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5
bGUoKSk7CisgICAgaWYgKHN0eWxlRmxhZ3MgPT0gU3R5bGVGbGFnSW5saW5lKSB7CisgICAgICAg
IC8vIEVhcmx5IHJldHVybiB0byBhdm9pZCB1bm5lY2Vzc2FyeSBzdHlsZSByZWNhbGNzLgorICAg
ICAgICAqcmVzdWx0ID0gcmVzdWx0T2JqZWN0LnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAogICAgIHVuc2lnbmVkIGZvcmNlUHNldWRvU3RhdGUgPSBjb21wdXRlUHNldWRvQ2xh
c3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMgPyBmb3JjZWRQc2V1ZG9DbGFzc2VzLT5nZXQoKSA6
IDApOwogICAgIGJvb2wgbmVlZFN0eWxlUmVjYWxjID0gZWxlbWVudCAhPSBtX2xhc3RFbGVtZW50
V2l0aFBzZXVkb1N0YXRlIHx8IGZvcmNlUHNldWRvU3RhdGUgIT0gbV9sYXN0UHNldWRvU3RhdGU7
CkBAIC0yNjAsNjkgKzI2NSw2NCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZXNG
b3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgYwogICAgIGlmIChu
ZWVkU3R5bGVSZWNhbGMpCiAgICAgICAgIGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVT
ZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1lZGlhdGVseSk7CiAKKyAgICAvLyBDb21wdXRl
ZCBzdHlsZS4KKyAgICBpZiAoc3R5bGVGbGFncyAmIFN0eWxlRmxhZ0NvbXB1dGVkKSB7CisgICAg
ICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVJbmZv
ID0gY29tcHV0ZWRTdHlsZShlbGVtZW50LCB0cnVlKTsgLy8gU3VwcG9ydCB0aGUgdmlld2luZyBv
ZiA6dmlzaXRlZCBpbmZvcm1hdGlvbiBpbiBjb21wdXRlZCBzdHlsZS4KKyAgICAgICAgUmVmUHRy
PEluc3BlY3RvclN0eWxlPiBjb21wdXRlZEluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6
OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBjb21wdXRlZFN0eWxlSW5mbywgMCk7CisgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJjb21wdXRlZFN0eWxlIiwgY29tcHV0ZWRJbnNwZWN0
b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHlsZSgpKTsKKyAgICB9CisKICAgICBDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rv
cigpOwotICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnN0
eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENTU1J1bGVz
KTsKLSAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWlsZEFy
cmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLmdldCgpKSk7Ci0KLSAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJzdHlsZUF0dHJpYnV0ZXMiLCBidWlsZEFycmF5Rm9yQXR0cmlidXRlU3R5bGVz
KGVsZW1lbnQpKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHNldWRvRWxlbWVudHMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgZm9yIChQc2V1ZG9JZCBwc2V1ZG9JZCA9
IEZJUlNUX1BVQkxJQ19QU0VVRE9JRDsgcHNldWRvSWQgPCBBRlRFUl9MQVNUX0lOVEVSTkFMX1BT
RVVET0lEOyBwc2V1ZG9JZCA9IHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG9JZCArIDEpKSB7
Ci0gICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnBz
ZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIHBzZXVkb0lkLCBDU1NTdHlsZVNlbGVj
dG9yOjpBbGxDU1NSdWxlcyk7Ci0gICAgICAgIGlmIChtYXRjaGVkUnVsZXMgJiYgbWF0Y2hlZFJ1
bGVzLT5sZW5ndGgoKSkgewotICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHNl
dWRvU3R5bGVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHBzZXVk
b1N0eWxlcy0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHN0YXRpY19jYXN0PGludD4ocHNldWRvSWQp
KTsKLSAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0QXJyYXkoInJ1bGVzIiwgYnVpbGRBcnJh
eUZvclJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSkpOwotICAgICAgICAgICAgcHNldWRvRWxl
bWVudHMtPnB1c2hPYmplY3QocHNldWRvU3R5bGVzLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KKwor
ICAgIC8vIE1hdGNoZWQgcnVsZXMuCisgICAgaWYgKHN0eWxlRmxhZ3MgJiBTdHlsZUZsYWdNYXRj
aGVkKSB7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0
b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENT
U1J1bGVzKTsKKyAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgibWF0Y2hlZENTU1J1bGVz
IiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSkpOwogICAgIH0KLSAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJwc2V1ZG9FbGVtZW50cyIsIHBzZXVkb0VsZW1lbnRz
LnJlbGVhc2UoKSk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluaGVyaXRlZFN0eWxl
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBFbGVtZW50KiBwYXJlbnRFbGVtZW50
ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPnN0eWxlKCkgJiYg
cGFyZW50RWxlbWVudC0+c3R5bGUoKS0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIEluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVT
aGVldChwYXJlbnRFbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQotICAgICAg
ICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgc3R5bGVTaGVl
dC0+YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKEluc3BlY3RvckNT
U0lkKHN0eWxlU2hlZXQtPmlkKCksIDApKSkpOworCisgICAgLy8gU3R5bGUgYXR0cmlidXRlcy4K
KyAgICBpZiAoc3R5bGVGbGFncyAmIFN0eWxlRmxhZ0F0dHJpYnV0ZXMpCisgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0QXJyYXkoInN0eWxlQXR0cmlidXRlcyIsIGJ1aWxkQXJyYXlGb3JBdHRyaWJ1
dGVTdHlsZXMoZWxlbWVudCkpOworCisgICAgLy8gUHNldWRvIGVsZW1lbnRzLgorICAgIGlmIChz
dHlsZUZsYWdzICYgU3R5bGVGbGFnUHNldWRvKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHNldWRvRWxlbWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAg
IGZvciAoUHNldWRvSWQgcHNldWRvSWQgPSBGSVJTVF9QVUJMSUNfUFNFVURPSUQ7IHBzZXVkb0lk
IDwgQUZURVJfTEFTVF9JTlRFUk5BTF9QU0VVRE9JRDsgcHNldWRvSWQgPSBzdGF0aWNfY2FzdDxQ
c2V1ZG9JZD4ocHNldWRvSWQgKyAxKSkgeworICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0
PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxl
bWVudCwgcHNldWRvSWQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENTU1J1bGVzKTsKKyAgICAgICAg
ICAgIGlmIChtYXRjaGVkUnVsZXMgJiYgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkgeworICAgICAg
ICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBzZXVkb1N0eWxlcyA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgcHNldWRvU3R5bGVzLT5zZXROdW1i
ZXIoInBzZXVkb0lkIiwgc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpOworICAgICAgICAgICAg
ICAgIHBzZXVkb1N0eWxlcy0+c2V0QXJyYXkoInJ1bGVzIiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0
KG1hdGNoZWRSdWxlcy5nZXQoKSkpOworICAgICAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5w
dXNoT2JqZWN0KHBzZXVkb1N0eWxlcy5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoInBzZXVkb0VsZW1lbnRzIiwgcHNl
dWRvRWxlbWVudHMucmVsZWFzZSgpKTsKKyAgICB9CiAKLSAgICAgICAgQ1NTU3R5bGVTZWxlY3Rv
ciogcGFyZW50U2VsZWN0b3IgPSBwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxl
U2VsZWN0b3IoKTsKLSAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBwYXJlbnRNYXRjaGVkUnVs
ZXMgPSBwYXJlbnRTZWxlY3Rvci0+c3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVudCwg
Q1NTU3R5bGVTZWxlY3Rvcjo6QWxsQ1NTUnVsZXMpOwotICAgICAgICBwYXJlbnRTdHlsZS0+c2V0
QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChwYXJlbnRNYXRj
aGVkUnVsZXMuZ2V0KCkpKTsKLSAgICAgICAgaW5oZXJpdGVkU3R5bGVzLT5wdXNoT2JqZWN0KHBh
cmVudFN0eWxlLnJlbGVhc2UoKSk7Ci0gICAgICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgLy8gSW5oZXJpdGVkIHN0eWxlcy4KKyAgICBpZiAo
c3R5bGVGbGFncyAmIFN0eWxlRmxhZ0luaGVyaXRlZCkgeworICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGluaGVyaXRlZFN0eWxlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAg
ICAgICAgRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsK
KyAgICAgICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0
eWxlKCktPmxlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHBhcmVudEVs
ZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQorICAgICAgICAgICAgICAg
ICAgICBwYXJlbnRTdHlsZS0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC0+c3R5bGVGb3JJZChJbnNwZWN0b3JDU1NJZChz
dHlsZVNoZWV0LT5pZCgpLCAwKSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ1NT
U3R5bGVTZWxlY3RvciogcGFyZW50U2VsZWN0b3IgPSBwYXJlbnRFbGVtZW50LT5vd25lckRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4g
cGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50
KHBhcmVudEVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENTU1J1bGVzKTsKKyAgICAgICAg
ICAgIHBhcmVudFN0eWxlLT5zZXRBcnJheSgibWF0Y2hlZENTU1J1bGVzIiwgYnVpbGRBcnJheUZv
clJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcy5nZXQoKSkpOworICAgICAgICAgICAgaW5oZXJp
dGVkU3R5bGVzLT5wdXNoT2JqZWN0KHBhcmVudFN0eWxlLnJlbGVhc2UoKSk7CisgICAgICAgICAg
ICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAg
ICB9CisgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImluaGVyaXRlZCIsIGluaGVyaXRl
ZFN0eWxlcy5yZWxlYXNlKCkpOwogICAgIH0KLSAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJp
bmhlcml0ZWQiLCBpbmhlcml0ZWRTdHlsZXMucmVsZWFzZSgpKTsKIAogICAgICpyZXN1bHQgPSBy
ZXN1bHRPYmplY3QucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJ
bmxpbmVTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3R5bGUpCi17Ci0gICAgRWxlbWVudCogZWxlbWVudCA9
IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlkKTsKLSAgICBpZiAoIWVsZW1lbnQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSog
c3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChlbGVtZW50KTsKLSAgICBpZiAoIXN0
eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgICpzdHlsZSA9IHN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+c3R5bGUoKSk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0eWxlKQotewotICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7Ci0gICAg
aWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlSW5mbyA9IGNvbXB1dGVkU3R5bGUoZWxlbWVu
dCwgdHJ1ZSk7Ci0gICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IElu
c3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgY29tcHV0ZWRTdHlsZUluZm8s
IDApOwotICAgICpzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7
Ci19Ci0KIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3Ry
aW5nKiwgUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVJbmZvcykKIHsKICAgICBWZWN0b3I8
RG9jdW1lbnQqPiBkb2N1bWVudHMgPSBtX2RvbUFnZW50LT5kb2N1bWVudHMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggNjc3OTVhOTE4MTVm
ZjI3ODA5NjRlZWIwYzhjOGE0ZjI5M2MyM2E0Mi4uNDU5MjY2NGQwMDE4MjRlNmVjYjA4MDg3YjE5
MDNkNmRmODAzMmYwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmgKQEAgLTY0LDkgKzY0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJGcm9udGVu
ZCgpOwogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIHZvaWQgZ2V0U3R5bGVzRm9yTm9kZShFcnJv
clN0cmluZyosIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNl
ZFBzZXVkb0NsYXNzZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQpOwotICAgIHZv
aWQgZ2V0SW5saW5lU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4qIHN0eWxlKTsKLSAgICB2b2lkIGdldENvbXB1dGVkU3R5bGVGb3JO
b2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0
eWxlKTsKKyAgICB2b2lkIGdldFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlk
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBpbnQg
c3R5bGVGbGFncywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7CiAgICAgdm9pZCBn
ZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0
eWxlU2hlZXRJbmZvcyk7CiAgICAgdm9pZCBnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQp
OwogICAgIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
IHN0eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpOwpAQCAtNzgsNiArNzYsMTQgQEAgcHVibGlj
OgogICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyosIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7CiAKIHByaXZhdGU6CisgICAgZW51bSBTdHlsZUZs
YWcgeworICAgICAgICBTdHlsZUZsYWdJbmxpbmUgPSAxIDw8IDAsCisgICAgICAgIFN0eWxlRmxh
Z0NvbXB1dGVkID0gMSA8PCAxLAorICAgICAgICBTdHlsZUZsYWdNYXRjaGVkID0gMSA8PCAyLAor
ICAgICAgICBTdHlsZUZsYWdBdHRyaWJ1dGVzID0gMSA8PCAzLAorICAgICAgICBTdHlsZUZsYWdQ
c2V1ZG8gPSAxIDw8IDQsCisgICAgICAgIFN0eWxlRmxhZ0luaGVyaXRlZCA9IDEgPDwgNQorICAg
IH07CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+ID4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0
eWxlU2hlZXQqLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBDU1NTdHlsZVNoZWV0VG9J
bnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxOb2RlKiwgUmVmUHRyPElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gPiBOb2RlVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0OyAvLyBib2d1cyAic3R5bGVzaGVldHMiIHdpdGggZWxlbWVudHMnIGlubGluZSBzdHlsZXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxl
cy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5qcwpp
bmRleCAwMzUwNDA1OWE4NTFkNjZhYjhkMGUyODliMzBjYzI1OWNhYTc3YTg2Li4zM2FlMjU4MDBm
YzJjYjY3MDRiMGNkOTEyZjY1MGUwMDhhOTgyMDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzCkBAIC03NDYsOCArNzQ2LDkgQEAgV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmICghbm9kZUlkcyB8fCAhbm9kZUlkcy5sZW5ndGgpCiAg
ICAgICAgICAgICAgICAgZG9uZUNhbGxiYWNrKCk7CisgICAgICAgICAgICBjb25zdCBmbGFncyA9
IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlRmxhZ3MuQUxMICYgfihXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZUZsYWdzLklOSEVSSVRFRCB8IFdlYkluc3BlY3Rvci5DU1NT
dHlsZU1vZGVsLlN0eWxlRmxhZ3MuUFNFVURPKTsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBub2RlSWRzICYmIGkgPCBub2RlSWRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5jc3NNb2RlbC5nZXRTdHlsZXNBc3luYyhub2RlSWRzW2ldLCB1bmRlZmluZWQs
IGltYWdlU3R5bGVzUmVhZHkuYmluZCh0aGlzLCBub2RlSWRzW2ldLCBpID09PSBub2RlSWRzLmxl
bmd0aCAtIDEpKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0U3R5
bGVzQXN5bmMobm9kZUlkc1tpXSwgdW5kZWZpbmVkLCBmbGFncywgaW1hZ2VTdHlsZXNSZWFkeS5i
aW5kKHRoaXMsIG5vZGVJZHNbaV0sIGkgPT09IG5vZGVJZHMubGVuZ3RoIC0gMSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgZnVuY3Rpb24gb25Eb2N1bWVudEF2YWlsYWJsZShyb290KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCmlu
ZGV4IDU4ODVkM2Q0MmUzMjA4NDJmNDM4Y2Q3ZjAxYjc5YmIyMDI3OWJiNTkuLmM0MDdmOWI4NmYx
MmNmYTM1NTBiMTQwMjQ0NjNkMGUzMDRiN2RiNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKQEAgLTQ5LDEzICs0OSwyNCBA
QCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5FdmVudHMgPSB7CiAgICAgU3R5bGVTaGVldENo
YW5nZWQ6ICJTdHlsZVNoZWV0Q2hhbmdlZCIKIH0KIAorV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9k
ZWwuU3R5bGVGbGFncyA9IHsKKyAgICBJTkxJTkU6IDEgPDwgMCwKKyAgICBDT01QVVRFRDogMSA8
PCAxLAorICAgIE1BVENIRUQ6IDEgPDwgMiwKKyAgICBBVFRSSUJVVEVTOiAxIDw8IDMsCisgICAg
UFNFVURPOiAxIDw8IDQsCisgICAgSU5IRVJJVEVEOiAxIDw8IDUsCisgICAgQUxMOiAoMSA8PCA2
KSAtIDEKK307CisKIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAg
ICAvKioKICAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9kZUlkCiAgICAgICogQHBh
cmFtIHs/QXJyYXkuPHN0cmluZz58dW5kZWZpbmVkfSBmb3JjZWRQc2V1ZG9DbGFzc2VzCisgICAg
ICogQHBhcmFtIHtudW1iZXJ9IHN0eWxlRmxhZ3MKICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD8q
KX0gdXNlckNhbGxiYWNrCiAgICAgICovCi0gICAgZ2V0U3R5bGVzQXN5bmM6IGZ1bmN0aW9uKG5v
ZGVJZCwgZm9yY2VkUHNldWRvQ2xhc3NlcywgdXNlckNhbGxiYWNrKQorICAgIGdldFN0eWxlc0Fz
eW5jOiBmdW5jdGlvbihub2RlSWQsIGZvcmNlZFBzZXVkb0NsYXNzZXMsIHN0eWxlRmxhZ3MsIHVz
ZXJDYWxsYmFjaykKICAgICB7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0
aW9uKD8qKX0gdXNlckNhbGxiYWNrCkBAIC03NCwzOCArODUsNDcgQEAgV2ViSW5zcGVjdG9yLkNT
U1N0eWxlTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKCJpbmxpbmVTdHlsZSIg
aW4gcGF5bG9hZCkKICAgICAgICAgICAgICAgICByZXN1bHQuaW5saW5lU3R5bGUgPSBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQocGF5bG9hZC5pbmxpbmVTdHls
ZSk7CiAKLSAgICAgICAgICAgIHJlc3VsdC5jb21wdXRlZFN0eWxlID0gV2ViSW5zcGVjdG9yLkNT
U1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHBheWxvYWQuY29tcHV0ZWRTdHlsZSk7Ci0g
ICAgICAgICAgICByZXN1bHQubWF0Y2hlZENTU1J1bGVzID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxl
TW9kZWwucGFyc2VSdWxlQXJyYXlQYXlsb2FkKHBheWxvYWQubWF0Y2hlZENTU1J1bGVzKTsKKyAg
ICAgICAgICAgIGlmICgiY29tcHV0ZWRTdHlsZSIgaW4gcGF5bG9hZCkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuY29tcHV0ZWRTdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9u
LnBhcnNlUGF5bG9hZChwYXlsb2FkLmNvbXB1dGVkU3R5bGUpOworCisgICAgICAgICAgICBpZiAo
Im1hdGNoZWRDU1NSdWxlcyIgaW4gcGF5bG9hZCkKKyAgICAgICAgICAgICAgICByZXN1bHQubWF0
Y2hlZENTU1J1bGVzID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucGFyc2VSdWxlQXJyYXlQ
YXlsb2FkKHBheWxvYWQubWF0Y2hlZENTU1J1bGVzKTsKIAotICAgICAgICAgICAgcmVzdWx0LnN0
eWxlQXR0cmlidXRlcyA9IHt9OwotICAgICAgICAgICAgdmFyIHBheWxvYWRTdHlsZUF0dHJpYnV0
ZXMgPSBwYXlsb2FkLnN0eWxlQXR0cmlidXRlczsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcGF5bG9hZFN0eWxlQXR0cmlidXRlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgIHZhciBuYW1lID0gcGF5bG9hZFN0eWxlQXR0cmlidXRlc1tpXS5uYW1lOwotICAgICAgICAg
ICAgICAgIHJlc3VsdC5zdHlsZUF0dHJpYnV0ZXNbbmFtZV0gPSBXZWJJbnNwZWN0b3IuQ1NTU3R5
bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQocGF5bG9hZFN0eWxlQXR0cmlidXRlc1tpXS5zdHls
ZSk7CisgICAgICAgICAgICBpZiAoInN0eWxlQXR0cmlidXRlcyIgaW4gcGF5bG9hZCkgeworICAg
ICAgICAgICAgICAgIHJlc3VsdC5zdHlsZUF0dHJpYnV0ZXMgPSB7fTsKKyAgICAgICAgICAgICAg
ICB2YXIgcGF5bG9hZFN0eWxlQXR0cmlidXRlcyA9IHBheWxvYWQuc3R5bGVBdHRyaWJ1dGVzOwor
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF5bG9hZFN0eWxlQXR0cmlidXRl
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHBheWxvYWRT
dHlsZUF0dHJpYnV0ZXNbaV0ubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0eWxl
QXR0cmlidXRlc1tuYW1lXSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNl
UGF5bG9hZChwYXlsb2FkU3R5bGVBdHRyaWJ1dGVzW2ldLnN0eWxlKTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJlc3VsdC5wc2V1ZG9FbGVtZW50cyA9
IFtdOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXlsb2FkLnBzZXVkb0VsZW1l
bnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVudHJ5UGF5bG9hZCA9IHBh
eWxvYWQucHNldWRvRWxlbWVudHNbaV07Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBzZXVkb0Vs
ZW1lbnRzLnB1c2goeyBwc2V1ZG9JZDogZW50cnlQYXlsb2FkLnBzZXVkb0lkLCBydWxlczogV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucGFyc2VSdWxlQXJyYXlQYXlsb2FkKGVudHJ5UGF5bG9h
ZC5ydWxlcykgfSk7CisgICAgICAgICAgICBpZiAoInBzZXVkb0VsZW1lbnRzIiBpbiBwYXlsb2Fk
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnBzZXVkb0VsZW1lbnRzID0gW107CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXlsb2FkLnBzZXVkb0VsZW1lbnRzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeVBheWxvYWQgPSBwYXlsb2Fk
LnBzZXVkb0VsZW1lbnRzW2ldOworICAgICAgICAgICAgICAgICAgICByZXN1bHQucHNldWRvRWxl
bWVudHMucHVzaCh7IHBzZXVkb0lkOiBlbnRyeVBheWxvYWQucHNldWRvSWQsIHJ1bGVzOiBXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wYXJzZVJ1bGVBcnJheVBheWxvYWQoZW50cnlQYXlsb2Fk
LnJ1bGVzKSB9KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHJlc3VsdC5pbmhlcml0ZWQgPSBbXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcGF5bG9hZC5pbmhlcml0ZWQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIg
ZW50cnlQYXlsb2FkID0gcGF5bG9hZC5pbmhlcml0ZWRbaV07Ci0gICAgICAgICAgICAgICAgdmFy
IGVudHJ5ID0ge307Ci0gICAgICAgICAgICAgICAgaWYgKCJpbmxpbmVTdHlsZSIgaW4gZW50cnlQ
YXlsb2FkKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS5pbmxpbmVTdHlsZSA9IFdlYkluc3Bl
Y3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChlbnRyeVBheWxvYWQuaW5saW5l
U3R5bGUpOwotICAgICAgICAgICAgICAgIGlmICgibWF0Y2hlZENTU1J1bGVzIiBpbiBlbnRyeVBh
eWxvYWQpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5Lm1hdGNoZWRDU1NSdWxlcyA9IFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnBhcnNlUnVsZUFycmF5UGF5bG9hZChlbnRyeVBheWxvYWQu
bWF0Y2hlZENTU1J1bGVzKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuaW5oZXJpdGVkLnB1c2go
ZW50cnkpOworICAgICAgICAgICAgaWYgKCJpbmhlcml0ZWQiIGluIHBheWxvYWQpIHsKKyAgICAg
ICAgICAgICAgICByZXN1bHQuaW5oZXJpdGVkID0gW107CisgICAgICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBwYXlsb2FkLmluaGVyaXRlZC5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgZW50cnlQYXlsb2FkID0gcGF5bG9hZC5pbmhlcml0ZWRbaV07CisgICAg
ICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHt9OworICAgICAgICAgICAgICAgICAgICBpZiAo
ImlubGluZVN0eWxlIiBpbiBlbnRyeVBheWxvYWQpCisgICAgICAgICAgICAgICAgICAgICAgICBl
bnRyeS5pbmxpbmVTdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNl
UGF5bG9hZChlbnRyeVBheWxvYWQuaW5saW5lU3R5bGUpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIm1hdGNoZWRDU1NSdWxlcyIgaW4gZW50cnlQYXlsb2FkKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZW50cnkubWF0Y2hlZENTU1J1bGVzID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwu
cGFyc2VSdWxlQXJyYXlQYXlsb2FkKGVudHJ5UGF5bG9hZC5tYXRjaGVkQ1NTUnVsZXMpOworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuaW5oZXJpdGVkLnB1c2goZW50cnkpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHVzZXJDYWxsYmFjaykK
ICAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2socmVzdWx0KTsKICAgICAgICAgfQogCi0gICAg
ICAgIENTU0FnZW50LmdldFN0eWxlc0Zvck5vZGUobm9kZUlkLCBmb3JjZWRQc2V1ZG9DbGFzc2Vz
IHx8IFtdLCBjYWxsYmFjay5iaW5kKG51bGwsIHVzZXJDYWxsYmFjaykpOworICAgICAgICBDU1NB
Z2VudC5nZXRTdHlsZXNGb3JOb2RlKG5vZGVJZCwgZm9yY2VkUHNldWRvQ2xhc3NlcyB8fCBbXSwg
c3R5bGVGbGFncywgY2FsbGJhY2suYmluZChudWxsLCB1c2VyQ2FsbGJhY2spKTsKICAgICB9LAog
CiAgICAgLyoqCkBAIC0xMTcsMTcgKzEzNywxNyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2Rl
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9u
KD9XZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbil9IHVzZXJDYWxsYmFjawogICAgICAg
ICAgKiBAcGFyYW0gez9Qcm90b2NvbC5FcnJvcn0gZXJyb3IKLSAgICAgICAgICogQHBhcmFtIHs/
Q1NTQWdlbnQuQ1NTU3R5bGV9IHN0eWxlUGF5bG9hZAorICAgICAgICAgKiBAcGFyYW0gez9DU1NB
Z2VudC5DU1NOb2RlU3R5bGVzfSBwYXlsb2FkCiAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlv
biBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIGVycm9yLCBzdHlsZVBheWxvYWQpCisgICAgICAgIGZ1
bmN0aW9uIGNhbGxiYWNrKHVzZXJDYWxsYmFjaywgZXJyb3IsIHBheWxvYWQpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChlcnJvcikKICAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2sobnVs
bCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKFdlYklu
c3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChzdHlsZVBheWxvYWQpKTsK
KyAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2soV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFy
YXRpb24ucGFyc2VQYXlsb2FkKHBheWxvYWQuY29tcHV0ZWRTdHlsZSkpOwogICAgICAgICB9CiAK
LSAgICAgICAgQ1NTQWdlbnQuZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobm9kZUlkLCBjYWxsYmFj
ay5iaW5kKG51bGwsIHVzZXJDYWxsYmFjaykpOworICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNG
b3JOb2RlKG5vZGVJZCwgW10sIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlRmxhZ3Mu
Q09NUFVURUQsIGNhbGxiYWNrLmJpbmQobnVsbCwgdXNlckNhbGxiYWNrKSk7CiAgICAgfSwKIAog
ICAgIC8qKgpAQCAtMTM5LDE3ICsxNTksMTcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwu
cHJvdG90eXBlID0gewogICAgICAgICAvKioKICAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbig/
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pfSB1c2VyQ2FsbGJhY2sKICAgICAgICAg
ICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7P0NT
U0FnZW50LkNTU1N0eWxlfSBzdHlsZVBheWxvYWQKKyAgICAgICAgICogQHBhcmFtIHs/Q1NTQWdl
bnQuQ1NTTm9kZVN0eWxlc30gcGF5bG9hZAogICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24g
Y2FsbGJhY2sodXNlckNhbGxiYWNrLCBlcnJvciwgc3R5bGVQYXlsb2FkKQorICAgICAgICBmdW5j
dGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIGVycm9yLCBwYXlsb2FkKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBpZiAoZXJyb3IgfHwgIXBheWxvYWQu
aW5saW5lU3R5bGUpCiAgICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKG51bGwpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQoc3R5bGVQYXlsb2FkKSk7CisgICAgICAgICAg
ICAgICAgdXNlckNhbGxiYWNrKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNl
UGF5bG9hZChwYXlsb2FkLmlubGluZVN0eWxlKSk7CiAgICAgICAgIH0KIAotICAgICAgICBDU1NB
Z2VudC5nZXRJbmxpbmVTdHlsZUZvck5vZGUobm9kZUlkLCBjYWxsYmFjay5iaW5kKG51bGwsIHVz
ZXJDYWxsYmFjaykpOworICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JOb2RlKG5vZGVJZCwg
W10sIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlRmxhZ3MuSU5MSU5FLCBjYWxsYmFj
ay5iaW5kKG51bGwsIHVzZXJDYWxsYmFjaykpOwogICAgIH0sCiAKICAgICAvKioKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5l
LmpzCmluZGV4IGM0ZjBlMGRhOWFlODc0MzU0ZGY0ODEzMWZhMzQ2YzRjMTFmM2E1OGMuLmExNTc0
MmNlNTU3ZTVmNzg3YmFiMTE3OTA2ODE2OGIxZjMwM2QxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAt
MjU0LDcgKzI1NCw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGlmIChyZWZyZXNoKQogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01v
ZGVsLmdldENvbXB1dGVkU3R5bGVBc3luYyhub2RlLmlkLCBjb21wdXRlZFN0eWxlQ2FsbGJhY2su
YmluZCh0aGlzKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NN
b2RlbC5nZXRTdHlsZXNBc3luYyhub2RlLmlkLCB0aGlzLl9mb3JjZWRQc2V1ZG9DbGFzc2VzLCBz
dHlsZXNDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NN
b2RlbC5nZXRTdHlsZXNBc3luYyhub2RlLmlkLCB0aGlzLl9mb3JjZWRQc2V1ZG9DbGFzc2VzLCBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZUZsYWdzLkFMTCwgc3R5bGVzQ2FsbGJhY2su
YmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIF9zdHlsZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24o
KQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDM0M2Q2OTY5ZDEzOWJmZTExNjgyNzI4NjU2ODk4NDc3OWIzM2IwMmQuLjRmNTIz
ZWZiNmJmMDkxZDc4NjA1OTYwNTYxMTRmYzc5MGE4MTliOTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAxMS0xMS0xOCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtQcm90b2NvbF0gUmV0YWluIGEgc2luZ2xlIHVuaXZl
cnNhbCBtZXRob2QgZm9yIGxvYWRpbmcgYSByZXF1aXJlZCBjb21iaW5hdGlvbiBvZiBlbGVtZW50
IHN0eWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzI3MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGluc3BlY3Rvci9zdHlsZXMvZ2V0LXNldC1zdHlsZXNoZWV0LXRleHQuaHRtbDoKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1mb3JtYXR0aW5nLmh0bWw6CisgICAgICAgICogaW5z
cGVjdG9yL3N0eWxlcy9zdHlsZXMtbmV3LUFQSS5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9z
dHlsZXMvc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6CisKIDIwMTEtMTEtMTcgIFN0ZXZlIEJs
b2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU3VwcG9y
dCBDb3JlQW5pbWF0aW9uIHBsdWdpbiBtb2RlbCBvbiBNYWMKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9zdHlsZXMvZ2V0LXNldC1zdHlsZXNoZWV0LXRleHQuaHRtbCBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvZ2V0LXNldC1zdHlsZXNoZWV0LXRleHQuaHRtbAppbmRl
eCBkNjNkNzc1MTE1MWZjYjlkMjQ1ZjBiYTEyNDZkNWMzZGZiNjg2ODlkLi4wYjFmYzY2NzY5ZDdj
OTI0NWJmN2ZmOTA2MzdjNzBjOWFkOWQ1YzA4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3Ivc3R5bGVzL2dldC1zZXQtc3R5bGVzaGVldC10ZXh0Lmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy9nZXQtc2V0LXN0eWxlc2hlZXQtdGV4dC5odG1sCkBAIC03MCw3
ICs3MCw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogCiAgICAgICAgIGZ1bmN0aW9uIG5vZGVDYWxsYmFj
ayhub2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JOb2Rl
KG5vZGUuaWQsIHVuZGVmaW5lZCwgY2FsbGJhY2spOworICAgICAgICAgICAgQ1NTQWdlbnQuZ2V0
U3R5bGVzRm9yTm9kZShub2RlLmlkLCB1bmRlZmluZWQsIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1v
ZGVsLlN0eWxlRmxhZ3MuTUFUQ0hFRCwgY2FsbGJhY2spOwogICAgICAgICB9CiAKICAgICAgICAg
SW5zcGVjdG9yVGVzdC5zZWxlY3ROb2RlV2l0aElkKCJpbnNwZWN0ZWQiLCBub2RlQ2FsbGJhY2sp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtZm9ybWF0
dGluZy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtZm9ybWF0dGlu
Zy5odG1sCmluZGV4IDJjYTNhODFmMmVlM2ViZjJmMmFjYmQ0YjJjZWVhOTY0MTY1NzBmYTguLmUw
Nzk3NTY1NTZkNzM2MWM2YTU3ODEyNDIyMzM5NGYzZWEzYTlhOWEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLWZvcm1hdHRpbmcuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1mb3JtYXR0aW5nLmh0bWwKQEAgLTI2LDcg
KzI2LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAKICAgICAgICAgICAgIGZ1bmN0aW9uIG5vZGVDYWxs
YmFjayhub2RlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5j
c3NNb2RlbC5nZXRTdHlsZXNBc3luYyhub2RlLmlkLCB1bmRlZmluZWQsIGNhbGxiYWNrKTsKKyAg
ICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0U3R5bGVzQXN5bmMobm9kZS5p
ZCwgdW5kZWZpbmVkLCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZUZsYWdzLk1BVENI
RUQsIGNhbGxiYWNrKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
c2VsZWN0Tm9kZVdpdGhJZCgiZm9ybWF0dGVkIiwgbm9kZUNhbGxiYWNrKTsKICAgICAgICAgfSwK
QEAgLTEyMSw3ICsxMjEsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKIAogICAgICAgICAgICAgZnVuY3Rp
b24gbm9kZUNhbGxiYWNrKG5vZGUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmNzc01vZGVsLmdldFN0eWxlc0FzeW5jKG5vZGUuaWQsIHVuZGVmaW5lZCwgY2Fs
bGJhY2spOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRTdHlsZXNB
c3luYyhub2RlLmlkLCB1bmRlZmluZWQsIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxl
RmxhZ3MuTUFUQ0hFRCwgY2FsbGJhY2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5zZWxlY3ROb2RlV2l0aElkKCJ1bmZvcm1hdHRlZCIsIG5vZGVDYWxsYmFjayk7
CiAgICAgICAgIH0sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0
eWxlcy1uZXctQVBJLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1u
ZXctQVBJLmh0bWwKaW5kZXggZmY4ODM2YjIzOTVmOWRiMTlhNzQ3YzE1YjM2MDIyYWM2ODk0ZTVm
ZS4uNGM0MTdiZDBhYmZiMTE5YWMwNjM5ZmI4Y2FkZmE4ZWFkOWFhMTNjMSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtbmV3LUFQSS5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLW5ldy1BUEkuaHRtbApAQCAtNTYsNyAr
NTYsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgZnVuY3Rpb24gbm9kZUNhbGxiYWNrKG5v
ZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGJvZHlJZCA9IG5vZGUuaWQ7Ci0gICAgICAgICAg
ICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JOb2RlKGJvZHlJZCwgdW5kZWZpbmVkLCBjYWxsYmFjayk7
CisgICAgICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JOb2RlKGJvZHlJZCwgdW5kZWZpbmVk
LCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZUZsYWdzLkFMTCwgY2FsbGJhY2spOwog
ICAgICAgICB9CiAgICAgICAgIEluc3BlY3RvclRlc3Quc2VsZWN0Tm9kZVdpdGhJZCgibWFpbkJv
ZHkiLCBub2RlQ2FsbGJhY2spOwogICAgIH0KQEAgLTgxLDcgKzgxLDcgQEAgZnVuY3Rpb24gdGVz
dCgpCiAKICAgICAgICAgZnVuY3Rpb24gbm9kZUNhbGxiYWNrKG5vZGUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIENTU0FnZW50LmdldFN0eWxlc0Zvck5vZGUobm9kZS5pZCwgdW5kZWZpbmVkLCBj
YWxsYmFjayk7CisgICAgICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JOb2RlKG5vZGUuaWQs
IHVuZGVmaW5lZCwgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuU3R5bGVGbGFncy5BVFRSSUJV
VEVTLCBjYWxsYmFjayk7CiAgICAgICAgIH0KICAgICAgICAgSW5zcGVjdG9yVGVzdC5ub2RlV2l0
aElkKCJ0aGV0YWJsZSIsIG5vZGVDYWxsYmFjayk7CiAgICAgfQpAQCAtMTc2LDcgKzE3Niw3IEBA
IGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0
KCJlcnJvcjogIiArIGVycm9yKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JOb2RlKGJvZHlJZCwgdW5kZWZp
bmVkLCBkaWRHZXRTdHlsZXMpOworICAgICAgICAgICAgQ1NTQWdlbnQuZ2V0U3R5bGVzRm9yTm9k
ZShib2R5SWQsIHVuZGVmaW5lZCwgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuU3R5bGVGbGFn
cy5NQVRDSEVELCBkaWRHZXRTdHlsZXMpOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24g
cnVsZUFkZGVkKGVycm9yLCBydWxlKQpAQCAtMjQ0LDcgKzI0NCw3IEBAIGZ1bmN0aW9uIHRlc3Qo
KQogCiAgICAgICAgIGZ1bmN0aW9uIG5vZGVDYWxsYmFjayhub2RlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JOb2RlKG5vZGUuaWQsIHVuZGVmaW5lZCwgc3R5
bGVzQ2FsbGJhY2spOworICAgICAgICAgICAgQ1NTQWdlbnQuZ2V0U3R5bGVzRm9yTm9kZShub2Rl
LmlkLCB1bmRlZmluZWQsIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlRmxhZ3MuTUFU
Q0hFRCwgc3R5bGVzQ2FsbGJhY2spOwogICAgICAgICB9CiAgICAgICAgIEluc3BlY3RvclRlc3Qu
bm9kZVdpdGhJZCgidG9nZ2xlIiwgbm9kZUNhbGxiYWNrKTsKICAgICB9CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApp
bmRleCA5MDAzODA5YzMwMjk5OTUwNGY4NTdhMWQxY2FkNDVkNTg5ODQzYjEyLi4xZDdhNDMyODIx
MjE3NjZlOWQ5OTUyNTU1OGE4NmZkNjE3ODdhMWE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCisrKyBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKQEAgLTM3LDcg
KzM3LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAKICAgICBmdW5jdGlvbiBzdGVwMShub2RlKQogICAg
IHsKLSAgICAgICAgQ1NTQWdlbnQuZ2V0U3R5bGVzRm9yTm9kZShub2RlLmlkLCB1bmRlZmluZWQs
IHN0ZXAyKTsKKyAgICAgICAgQ1NTQWdlbnQuZ2V0U3R5bGVzRm9yTm9kZShub2RlLmlkLCB1bmRl
ZmluZWQsIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlRmxhZ3MuSU5MSU5FIHwgV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuU3R5bGVGbGFncy5NQVRDSEVELCBzdGVwMik7CiAgICAg
fQogCiAgICAgZnVuY3Rpb24gc3RlcDIoZXJyb3IsIHN0eWxlcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115813</attachid>
            <date>2011-11-18 08:17:35 -0800</date>
            <delta_ts>2011-11-21 03:56:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72701-20111118201732.patch</filename>
            <type>text/plain</type>
            <size>43822</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI0NzQyY2YyOTlkMTVl
ODZmZGY4MjQyZTE0N2Y1OWE4OTdlN2VkOC4uM2MyZmY0MWFhYWZhM2VkYjM1NjA1NDA4ZjczMDU2
YWM1YTMwM2M0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTExLTE4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1Byb3RvY29sXSBSZXRhaW4gYSBzaW5nbGUgdW5pdmVyc2FsIG1ldGhvZCBmb3IgbG9h
ZGluZyBhIHJlcXVpcmVkIGNvbWJpbmF0aW9uIG9mIGVsZW1lbnQgc3R5bGVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjcwMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zv
ck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVk
U3R5bGVGb3JOb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxl
LnByb3RvdHlwZS5kb1J1bi5nZXRTdHlsZXMuaW5saW5lQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUuZG9SdW4u
Z2V0U3R5bGVzLm1hdGNoZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1bi5nZXRTdHlsZXMpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5nZXRNYXRjaGVkU3R5bGVzQXN5bmMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmdldENvbXB1
dGVkU3R5bGVBc3luYyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90
b3R5cGUuZ2V0SW5saW5lU3R5bGVzQXN5bmMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvTWV0cmljc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk1ldHJpY3NT
aWRlYmFyUGFuZS5wcm90b3R5cGUuX2lubmVyVXBkYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0
eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZS5nZXQgZm9yY2VkUHNldWRvQ2xhc3Nlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLl9leGVjdXRlUmVi
dWlsZFVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJv
dG90eXBlLl9leGVjdXRlUmVidWlsZFVwZGF0ZS5pbmxpbmVDYWxsYmFjayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLl9leGVjdXRlUmVidWlsZFVw
ZGF0ZS5jb21wdXRlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRl
YmFyUGFuZS5wcm90b3R5cGUuX2lubmVyVXBkYXRlKToKKwogMjAxMS0xMS0xNyAgUGF2ZWwgRmVs
ZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgTm90IHJldmlld2VkOiBmaXgg
SUUgdXNlciBhZ2VudHMgc3RyaW5ncyBpbiB0aGUgaW5zcGVjdG9yLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IDkyNTQ0ZTMwYjNkNmQ4NmZjMzJiMWJiMzljNjQ3
NTc1NjBkZmU1MDguLmViZmZkYWYzNzNiNGM1YzFkNDIwMTYxZGFjMDJkMDhjNGJiNDlhMDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE0MzQsMTkgKzE0MzQs
NiBAQAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIG9iamVjdCBpZGVudGlm
aWVzIGEgQ1NTIHJ1bGUgaW4gYSB1bmlxdWUgd2F5LiIKICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgImlkIjogIkNTU05vZGVTdHlsZXMiLAotICAgICAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW5saW5lU3R5bGUiLCAiJHJlZiI6ICJD
U1NTdHlsZSIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgbm9kZSdzIGlu
bGluZSBzdHlsZSwgaWYgYW55LiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b21wdXRlZFN0eWxlIiwgIiRyZWYiOiAiQ1NTQ29tcHV0ZWRTdHlsZSIsICJkZXNjcmlwdGlvbiI6
ICJUaGUgbm9kZSdzIGNvbXB1dGVkIHN0eWxlLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJtYXRjaGVkQ1NTUnVsZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRy
ZWYiOiAiQ1NTUnVsZSIgfSwgImRlc2NyaXB0aW9uIjogIkNTUyBydWxlcyBtYXRjaGluZyB0aGlz
IG5vZGUsIGZyb20gYWxsIGFwcGxpY2FibGUgc3R5bGVzaGVldHMuIiB9LAotICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInN0eWxlQXR0cmlidXRlcyIsICJ0eXBlIjogImFycmF5IiwgIml0
ZW1zIjogeyAiJHJlZiI6ICJDU1NTdHlsZUF0dHJpYnV0ZSIgfSwgImRlc2NyaXB0aW9uIjogIkVu
dHJpZXMgZm9yIHN0eWxlLXJlbGF0ZWQgZWxlbWVudCBhdHRyaWJ1dGVzIChlLmcuIHdpZHRoPTIw
KS4ifSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwc2V1ZG9FbGVtZW50cyIsICJ0
eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJQc2V1ZG9JZFJ1bGVzIiB9LCAiZGVz
Y3JpcHRpb24iOiAiUHNldWRvIHN0eWxlIHJ1bGVzIGZvciB0aGlzIG5vZGUuIiB9LAotICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImluaGVyaXRlZCIsICJ0eXBlIjogImFycmF5IiwgIml0
ZW1zIjogeyAiJHJlZiI6ICJJbmhlcml0ZWRTdHlsZUVudHJ5IiB9LCAiZGVzY3JpcHRpb24iOiAi
QSBjaGFpbiBvZiBpbmhlcml0ZWQgc3R5bGVzIChmcm9tIHRoZSBpbW1lZGlhdGUgbm9kZSBwYXJl
bnQgdXAgdG8gdGhlIERPTSB0cmVlIHJvb3QpLiIgfQotICAgICAgICAgICAgICAgIF0sCi0gICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgaG9sZGVyIGZvciBhbGwgQ1NTIHN0eWxlcyBh
cHBsaWNhYmxlIHRvIGEgcGFydGljdWxhciBET00gbm9kZS4iCi0gICAgICAgICAgICB9LAotICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICJpZCI6ICJQc2V1ZG9JZFJ1bGVzIiwKICAgICAg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwpAQCAtMTU2OSwzNSArMTU1Niw0MSBAQAogICAgICAgICBdLAogICAgICAgICAiY29tbWFu
ZHMiOiBbCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIm5hbWUiOiAiZ2V0U3R5bGVz
Rm9yTm9kZSIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiZ2V0TWF0Y2hlZFN0eWxlc0Zvck5v
ZGUiLAogICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm5vZGVJZCIsICIkcmVmIjogIkRPTS5Ob2RlSWQiIH0sCi0gICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZm9yY2VkUHNldWRvQ2xhc3NlcyIsICJ0eXBlIjogImFycmF5
IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiYWN0aXZlIiwgImZvY3Vz
IiwgImhvdmVyIiwgInZpc2l0ZWQiXSB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24i
OiAiRWxlbWVudCBwc2V1ZG8gY2xhc3NlcyB0byBmb3JjZSB3aGVuIGNvbXB1dGluZyBhcHBsaWNh
YmxlIHN0eWxlIHJ1bGVzLiIgfQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZvcmNl
ZFBzZXVkb0NsYXNzZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbImFjdGl2ZSIsICJmb2N1cyIsICJob3ZlciIsICJ2aXNpdGVkIl0gfSwg
Im9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnQgcHNldWRvIGNsYXNzZXMg
dG8gZm9yY2Ugd2hlbiBjb21wdXRpbmcgYXBwbGljYWJsZSBzdHlsZSBydWxlcy4iIH0sCisgICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW5jbHVkZVBzZXVkbyIsICJ0eXBlIjogImJvb2xl
YW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0byBpbmNsdWRl
IHBzZXVkbyBzdHlsZXMgKGRlZmF1bHQ6IHRydWUpLiIgfSwKKyAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJpbmNsdWRlSW5oZXJpdGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25h
bCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRvIGluY2x1ZGUgaW5oZXJpdGVkIHN0
eWxlcyAoZGVmYXVsdDogdHJ1ZSkuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAg
ICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHlsZXMi
LCAiJHJlZiI6ICJDU1NOb2RlU3R5bGVzIiwgImRlc2NyaXB0aW9uIjogIkFsbCBzdHlsZXMgZm9y
IHRoZSBzcGVjaWZpZWQgRE9NIG5vZGUuIiB9CisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibWF0Y2hlZENTU1J1bGVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjog
IkNTU1J1bGUiIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJDU1MgcnVsZXMg
bWF0Y2hpbmcgdGhpcyBub2RlLCBmcm9tIGFsbCBhcHBsaWNhYmxlIHN0eWxlc2hlZXRzLiIgfSwK
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwc2V1ZG9FbGVtZW50cyIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJQc2V1ZG9JZFJ1bGVzIiB9LCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiUHNldWRvIHN0eWxlIHJ1bGVzIGZvciB0aGlzIG5vZGUu
IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImluaGVyaXRlZCIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJJbmhlcml0ZWRTdHlsZUVudHJ5IiB9LCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQSBjaGFpbiBvZiBpbmhlcml0ZWQgc3R5bGVz
IChmcm9tIHRoZSBpbW1lZGlhdGUgbm9kZSBwYXJlbnQgdXAgdG8gdGhlIERPTSB0cmVlIHJvb3Qp
LiIgfQogICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlJldHVybnMgYWxsIHN0eWxlcyBmb3IgYSBET00gbm9kZSBpZGVudGlmaWVkIGJ5IDxjb2RlPm5v
ZGVJZDwvY29kZT4uIgorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1cm5zIHJl
cXVlc3RlZCBzdHlsZXMgZm9yIGEgRE9NIG5vZGUgaWRlbnRpZmllZCBieSA8Y29kZT5ub2RlSWQ8
L2NvZGU+LiIKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Im5hbWUiOiAiZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUiLAorICAgICAgICAgICAgICAgICJuYW1l
IjogImdldElubGluZVN0eWxlc0Zvck5vZGUiLAogICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWwogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIsICIkcmVmIjogIkRP
TS5Ob2RlSWQiIH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJyZXR1cm5z
IjogWwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0eWxlIiwgIiRyZWYiOiAiQ1NT
U3R5bGUiLCAiZGVzY3JpcHRpb24iOiAiQ29tcHV0ZWQgc3R5bGUgZm9yIHRoZSBzcGVjaWZpZWQg
RE9NIG5vZGUuIiB9CisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW5saW5lU3R5bGUi
LCAiJHJlZiI6ICJDU1NTdHlsZSIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJJ
bmxpbmUgc3R5bGUgZm9yIHRoZSBzcGVjaWZpZWQgRE9NIG5vZGUuIiB9LAorICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInN0eWxlQXR0cmlidXRlcyIsICJ0eXBlIjogImFycmF5IiwgIml0
ZW1zIjogeyAiJHJlZiI6ICJDU1NTdHlsZUF0dHJpYnV0ZSIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIkVudHJpZXMgZm9yIHN0eWxlLXJlbGF0ZWQgZWxlbWVudCBhdHRyaWJ1
dGVzIChlLmcuIHdpZHRoPTIwKS4ifQogICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlJldHVybnMgdGhlIGNvbXB1dGVkIHN0eWxlIGZvciBhIERPTSBu
b2RlIGlkZW50aWZpZWQgYnkgPGNvZGU+bm9kZUlkPC9jb2RlPi4iCisgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlJldHVybnMgdGhlIHN0eWxlcyBkZWZpbmVkIGlubGluZSAoZXhwbGlj
aXRseSBpbiB0aGUgXCJzdHlsZVwiIGF0dHJpYnV0ZSBhbmQgaW1wbGljaXRseSwgdXNpbmcgRE9N
IGF0dHJpYnV0ZXMpIGZvciBhIERPTSBub2RlIGlkZW50aWZpZWQgYnkgPGNvZGU+bm9kZUlkPC9j
b2RlPi4iCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJu
YW1lIjogImdldElubGluZVN0eWxlRm9yTm9kZSIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAi
Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUiLAogICAgICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WwotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vZGVJZCIsICIkcmVmIjogIkRPTS5O
b2RlSWQiIH0KKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6
ICJET00uTm9kZUlkIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZvcmNlZFBz
ZXVkb0NsYXNzZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5n
IiwgImVudW0iOiBbImFjdGl2ZSIsICJmb2N1cyIsICJob3ZlciIsICJ2aXNpdGVkIl0gfSwgIm9w
dGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnQgcHNldWRvIGNsYXNzZXMgdG8g
Zm9yY2Ugd2hlbiBjb21wdXRpbmcgYXBwbGljYWJsZSBzdHlsZSBydWxlcy4iIH0KICAgICAgICAg
ICAgICAgICBdLAogICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInN0eWxlIiwgIiRyZWYiOiAiQ1NTU3R5bGUiLCAiZGVzY3JpcHRpb24i
OiAiSW5saW5lIHN0eWxlIGZvciB0aGUgc3BlY2lmaWVkIERPTSBub2RlLiIgfQorICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInN0eWxlIiwgIiRyZWYiOiAiQ1NTQ29tcHV0ZWRTdHlsZSIs
ICJkZXNjcmlwdGlvbiI6ICJDb21wdXRlZCBzdHlsZSBmb3IgdGhlIHNwZWNpZmllZCBET00gbm9k
ZS4iIH0KICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJSZXR1cm5zIHRoZSBpbmxpbmUgc3R5bGUgKGlmIHByZXNlbnQpIGZvciBhIERPTSBub2RlIGlk
ZW50aWZpZWQgYnkgPGNvZGU+bm9kZUlkPC9jb2RlPi4iCisgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlJldHVybnMgdGhlIGNvbXB1dGVkIHN0eWxlIGZvciBhIERPTSBub2RlIGlkZW50
aWZpZWQgYnkgPGNvZGU+bm9kZUlkPC9jb2RlPi4iCiAgICAgICAgICAgICB9LAogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogImdldEFsbFN0eWxlU2hlZXRzIiwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDg1ZWZi
NDFlM2UwNTM0Y2Q5MmI1MjYzODMyYjlkMTQ0MTQ5MmExMzUuLjViNzVmMmI2NzlkMDM5NmI1NTIx
NThhYTQ3MmJiMzcyMjUzZmIwYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcApAQCAtMjM3LDIyICsyMzcsMTIgQEAgYm9vbCBJbnNwZWN0b3JD
U1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShFbGVtZW50KiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6
UHNldWRvVHkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlc0Zv
ck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zv
ck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBib29sKiBuZWVkUHNldWRvLCBi
b29sKiBuZWVkSW5oZXJpdGVkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBtYXRjaGVkQ1NTUnVs
ZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHBzZXVkb0lkUnVsZXMsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIGluaGVyaXRlZEVudHJpZXMpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdE9iamVjdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0KLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGUqIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQoZWxlbWVudCk7
Ci0gICAgaWYgKHN0eWxlU2hlZXQpCi0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJp
bmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+c3R5
bGUoKSkpOwotCi0gICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0
ZWRTdHlsZUluZm8gPSBjb21wdXRlZFN0eWxlKGVsZW1lbnQsIHRydWUpOyAvLyBTdXBwb3J0IHRo
ZSB2aWV3aW5nIG9mIDp2aXNpdGVkIGluZm9ybWF0aW9uIGluIGNvbXB1dGVkIHN0eWxlLgotICAg
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gY29tcHV0ZWRJbnNwZWN0b3JTdHlsZSA9IEluc3BlY3Rv
clN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgY29tcHV0ZWRTdHlsZUluZm8sIDApOwot
ICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJjb21wdXRlZFN0eWxlIiwgY29tcHV0ZWRJbnNw
ZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHlsZSgpKTsKLQogICAgIHVuc2lnbmVkIGZvcmNl
UHNldWRvU3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMg
PyBmb3JjZWRQc2V1ZG9DbGFzc2VzLT5nZXQoKSA6IDApOwogICAgIGJvb2wgbmVlZFN0eWxlUmVj
YWxjID0gZWxlbWVudCAhPSBtX2xhc3RFbGVtZW50V2l0aFBzZXVkb1N0YXRlIHx8IGZvcmNlUHNl
dWRvU3RhdGUgIT0gbV9sYXN0UHNldWRvU3RhdGU7CiAgICAgbV9sYXN0UHNldWRvU3RhdGUgPSBm
b3JjZVBzZXVkb1N0YXRlOwpAQCAtMjYwLDQ2ICsyNTAsNTEgQEAgdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6Z2V0U3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIGMKICAgICBpZiAobmVlZFN0eWxlUmVjYWxjKQogICAgICAgICBlbGVtZW50LT5vd25lckRv
Y3VtZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwog
CisgICAgLy8gTWF0Y2hlZCBydWxlcy4KICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciA9
IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOwogICAgIFJlZlB0cjxD
U1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50
KGVsZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENTU1J1bGVzKTsKLSAgICByZXN1bHRPYmpl
Y3QtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0
Y2hlZFJ1bGVzLmdldCgpKSk7Ci0KLSAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJzdHlsZUF0
dHJpYnV0ZXMiLCBidWlsZEFycmF5Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1lbnQpKTsKLQotICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHNldWRvRWxlbWVudHMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7Ci0gICAgZm9yIChQc2V1ZG9JZCBwc2V1ZG9JZCA9IEZJUlNUX1BVQkxJQ19QU0VV
RE9JRDsgcHNldWRvSWQgPCBBRlRFUl9MQVNUX0lOVEVSTkFMX1BTRVVET0lEOyBwc2V1ZG9JZCA9
IHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG9JZCArIDEpKSB7Ci0gICAgICAgIFJlZlB0cjxD
U1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnBzZXVkb1N0eWxlUnVsZXNGb3JF
bGVtZW50KGVsZW1lbnQsIHBzZXVkb0lkLCBDU1NTdHlsZVNlbGVjdG9yOjpBbGxDU1NSdWxlcyk7
Ci0gICAgICAgIGlmIChtYXRjaGVkUnVsZXMgJiYgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkgewot
ICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHNldWRvU3R5bGVzID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0TnVtYmVy
KCJwc2V1ZG9JZCIsIHN0YXRpY19jYXN0PGludD4ocHNldWRvSWQpKTsKLSAgICAgICAgICAgIHBz
ZXVkb1N0eWxlcy0+c2V0QXJyYXkoInJ1bGVzIiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0KG1hdGNo
ZWRSdWxlcy5nZXQoKSkpOwotICAgICAgICAgICAgcHNldWRvRWxlbWVudHMtPnB1c2hPYmplY3Qo
cHNldWRvU3R5bGVzLnJlbGVhc2UoKSk7CisgICAgKm1hdGNoZWRDU1NSdWxlcyA9IGJ1aWxkQXJy
YXlGb3JSdWxlTGlzdChtYXRjaGVkUnVsZXMuZ2V0KCkpOworCisgICAgLy8gUHNldWRvIGVsZW1l
bnRzLgorICAgIGlmICghbmVlZFBzZXVkbyB8fCAqbmVlZFBzZXVkbykgeworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHBzZXVkb0VsZW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0
ZSgpOworICAgICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gRklSU1RfUFVCTElDX1BTRVVE
T0lEOyBwc2V1ZG9JZCA8IEFGVEVSX0xBU1RfSU5URVJOQUxfUFNFVURPSUQ7IHBzZXVkb0lkID0g
c3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVkb0lkICsgMSkpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnBzZXVkb1N0eWxlUnVsZXNG
b3JFbGVtZW50KGVsZW1lbnQsIHBzZXVkb0lkLCBDU1NTdHlsZVNlbGVjdG9yOjpBbGxDU1NSdWxl
cyk7CisgICAgICAgICAgICBpZiAobWF0Y2hlZFJ1bGVzICYmIG1hdGNoZWRSdWxlcy0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwc2V1ZG9TdHls
ZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIHBzZXVkb1N0
eWxlcy0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHN0YXRpY19jYXN0PGludD4ocHNldWRvSWQpKTsK
KyAgICAgICAgICAgICAgICBwc2V1ZG9TdHlsZXMtPnNldEFycmF5KCJydWxlcyIsIGJ1aWxkQXJy
YXlGb3JSdWxlTGlzdChtYXRjaGVkUnVsZXMuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBwc2V1
ZG9FbGVtZW50cy0+cHVzaE9iamVjdChwc2V1ZG9TdHlsZXMucmVsZWFzZSgpKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQorCisgICAgICAgICpwc2V1ZG9JZFJ1bGVzID0gcHNldWRvRWxlbWVu
dHMucmVsZWFzZSgpOwogICAgIH0KLSAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJwc2V1ZG9F
bGVtZW50cyIsIHBzZXVkb0VsZW1lbnRzLnJlbGVhc2UoKSk7Ci0KLSAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGluaGVyaXRlZFN0eWxlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAg
ICBFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAg
IHdoaWxlIChwYXJlbnRFbGVtZW50KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmVudFN0eWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgaWYgKHBh
cmVudEVsZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVudC0+c3R5bGUoKS0+bGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVT
aGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChwYXJlbnRFbGVtZW50KTsKLSAgICAgICAgICAg
IGlmIChzdHlsZVNoZWV0KQotICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRPYmplY3Qo
ImlubGluZVN0eWxlIiwgc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZVNoZWV0
LT5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0eWxlU2hlZXQtPmlkKCksIDApKSkpOworCisg
ICAgLy8gSW5oZXJpdGVkIHN0eWxlcy4KKyAgICBpZiAoIW5lZWRJbmhlcml0ZWQgfHwgKm5lZWRJ
bmhlcml0ZWQpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbmhlcml0ZWRTdHls
ZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIEVsZW1lbnQqIHBhcmVudEVs
ZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIHdoaWxlIChwYXJlbnRF
bGVtZW50KSB7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHls
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpZiAocGFyZW50RWxl
bWVudC0+c3R5bGUoKSAmJiBwYXJlbnRFbGVtZW50LT5zdHlsZSgpLT5sZW5ndGgoKSkgeworICAg
ICAgICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVTaGVl
dCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChwYXJlbnRFbGVtZW50KTsKKyAgICAgICAgICAgICAg
ICBpZiAoc3R5bGVTaGVldCkKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldE9i
amVjdCgiaW5saW5lU3R5bGUiLCBzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxl
U2hlZXQtPnN0eWxlRm9ySWQoSW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldC0+aWQoKSwgMCkpKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENTU1N0eWxlU2VsZWN0b3IqIHBhcmVudFNl
bGVjdG9yID0gcGFyZW50RWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7
CisgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHBhcmVudE1hdGNoZWRSdWxlcyA9IHBh
cmVudFNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChwYXJlbnRFbGVtZW50LCBDU1NTdHls
ZVNlbGVjdG9yOjpBbGxDU1NSdWxlcyk7CisgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0QXJy
YXkoIm1hdGNoZWRDU1NSdWxlcyIsIGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChwYXJlbnRNYXRjaGVk
UnVsZXMuZ2V0KCkpKTsKKyAgICAgICAgICAgIGluaGVyaXRlZFN0eWxlcy0+cHVzaE9iamVjdChw
YXJlbnRTdHlsZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVu
dEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAgICAgICAgfQogCi0gICAgICAgIENTU1N0eWxl
U2VsZWN0b3IqIHBhcmVudFNlbGVjdG9yID0gcGFyZW50RWxlbWVudC0+b3duZXJEb2N1bWVudCgp
LT5zdHlsZVNlbGVjdG9yKCk7Ci0gICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcGFyZW50TWF0
Y2hlZFJ1bGVzID0gcGFyZW50U2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KHBhcmVudEVs
ZW1lbnQsIENTU1N0eWxlU2VsZWN0b3I6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgcGFyZW50U3R5
bGUtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QocGFy
ZW50TWF0Y2hlZFJ1bGVzLmdldCgpKSk7Ci0gICAgICAgIGluaGVyaXRlZFN0eWxlcy0+cHVzaE9i
amVjdChwYXJlbnRTdHlsZS5yZWxlYXNlKCkpOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gcGFy
ZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgICAgICAqaW5oZXJpdGVkRW50cmllcyA9
IGluaGVyaXRlZFN0eWxlcy5yZWxlYXNlKCk7CiAgICAgfQotICAgIHJlc3VsdE9iamVjdC0+c2V0
QXJyYXkoImluaGVyaXRlZCIsIGluaGVyaXRlZFN0eWxlcy5yZWxlYXNlKCkpOwotCi0gICAgKnJl
c3VsdCA9IHJlc3VsdE9iamVjdC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmdldElubGluZVN0eWxlRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzdHlsZSkKK3ZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogaW5saW5lU3R5bGUsIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4qIGF0dHJpYnV0ZXMpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCkBAIC0z
MDksMTUgKzMwNCwyMyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZUZv
ck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZQogICAgIGlmICghc3R5bGVT
aGVldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgKnN0eWxlID0gc3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZShlbGVtZW50LT5zdHlsZSgpKTsKKyAgICAqaW5saW5lU3R5bGUgPSBzdHls
ZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCkpOworICAgICphdHRy
aWJ1dGVzID0gYnVpbGRBcnJheUZvckF0dHJpYnV0ZVN0eWxlcyhlbGVtZW50KTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3R5bGUp
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzdHlsZSkK
IHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2Rl
SWQpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgdW5zaWduZWQg
Zm9yY2VQc2V1ZG9TdGF0ZSA9IGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soZm9yY2VkUHNldWRvQ2xh
c3NlcyA/IGZvcmNlZFBzZXVkb0NsYXNzZXMtPmdldCgpIDogMCk7CisgICAgYm9vbCBuZWVkU3R5
bGVSZWNhbGMgPSBlbGVtZW50ICE9IG1fbGFzdEVsZW1lbnRXaXRoUHNldWRvU3RhdGUgfHwgZm9y
Y2VQc2V1ZG9TdGF0ZSAhPSBtX2xhc3RQc2V1ZG9TdGF0ZTsKKyAgICBtX2xhc3RQc2V1ZG9TdGF0
ZSA9IGZvcmNlUHNldWRvU3RhdGU7CisgICAgbV9sYXN0RWxlbWVudFdpdGhQc2V1ZG9TdGF0ZSA9
IGVsZW1lbnQ7CisgICAgaWYgKG5lZWRTdHlsZVJlY2FsYykKKyAgICAgICAgZWxlbWVudC0+b3du
ZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5
KTsKKwogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5
bGVJbmZvID0gY29tcHV0ZWRTdHlsZShlbGVtZW50LCB0cnVlKTsKICAgICBSZWZQdHI8SW5zcGVj
dG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0
b3JDU1NJZCgpLCBjb21wdXRlZFN0eWxlSW5mbywgMCk7CiAgICAgKnN0eWxlID0gaW5zcGVjdG9y
U3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggNjc3OTVhOTE4MTVmZjI3ODA5NjRlZWIwYzhjOGE0
ZjI5M2MyM2E0Mi4uNzcxMjc0YzMyY2M3ZDE3MGI3YTUxZDA3N2QwNTY1YjY5OWJhM2Y0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTY0LDkg
KzY0LDkgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpOwogICAgIHZvaWQgcmVz
ZXQoKTsKIAotICAgIHZvaWQgZ2V0U3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2Rl
SWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQpOwotICAgIHZvaWQgZ2V0SW5saW5lU3R5bGVG
b3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4q
IHN0eWxlKTsKLSAgICB2b2lkIGdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiwg
aW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHN0eWxlKTsKKyAgICB2b2lkIGdl
dENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiwgaW50IG5vZGVJZCwgY29uc3QgUmVm
UHRyPEluc3BlY3RvckFycmF5PiogZm9yY2VkUHNldWRvQ2xhc3NlcywgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4qIHN0eWxlKTsKKyAgICB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JT
dHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogaW5saW5lU3R5bGUs
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGF0dHJpYnV0ZXMpOworICAgIHZvaWQgZ2V0TWF0Y2hl
ZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBjb25zdCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBib29sKiBpbmNsdWRlUHNldWRvLCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBtYXRjaGVkQ1NT
UnVsZXMsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHBzZXVkb0lkUnVsZXMsIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIGluaGVyaXRlZEVudHJpZXMpOwogICAgIHZvaWQgZ2V0QWxsU3R5bGVTaGVl
dHMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZVNoZWV0SW5mb3Mp
OwogICAgIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgc3R5
bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KTsKICAgICB2b2lkIGdl
dFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQs
IFN0cmluZyogcmVzdWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQXVkaXRSdWxlcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQXVkaXRSdWxlcy5qcwppbmRleCAwMzUwNDA1OWE4NTFkNjZhYjhkMGUyODliMzBjYzI1OWNh
YTc3YTg2Li5lMjhlMzllZjVlYmE2MDJjNGMwOWJhZjYwNjgzOWRmNjUyZTQxYmY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzCkBAIC02
OTAsNyArNjkwLDcgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVs
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjYWxsYmFjayhlbnRyeSA/IHJlc3VsdCA6IG51
bGwpOwogICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gaW1hZ2VTdHlsZXNSZWFkeShpbWFn
ZUlkLCBsYXN0Q2FsbCwgc3R5bGVzKQorICAgICAgICBmdW5jdGlvbiBpbWFnZVN0eWxlc1JlYWR5
KGltYWdlSWQsIHN0eWxlcywgaXNMYXN0U3R5bGUsIGNvbXB1dGVkU3R5bGUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9kZUZvcklk
KGltYWdlSWQpOwogICAgICAgICAgICAgdmFyIHNyYyA9IG5vZGUuZ2V0QXR0cmlidXRlKCJzcmMi
KTsKQEAgLTcwNSw5ICs3MDUsOCBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVu
c2lvbnNSdWxlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmIChjb21wbGV0ZVNyYykKICAg
ICAgICAgICAgICAgICBzcmMgPSBjb21wbGV0ZVNyYzsKIAotICAgICAgICAgICAgY29uc3QgY29t
cHV0ZWRTdHlsZSA9IHN0eWxlcy5jb21wdXRlZFN0eWxlOwogICAgICAgICAgICAgaWYgKGNvbXB1
dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKSA9PT0gImFic29sdXRlIikgewot
ICAgICAgICAgICAgICAgIGlmIChsYXN0Q2FsbCkKKyAgICAgICAgICAgICAgICBpZiAoaXNMYXN0
U3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIGRvbmVDYWxsYmFjaygpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTczOCwxNiArNzM3LDMzIEBAIFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLkltYWdlRGltZW5zaW9uc1J1bGUucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgICAgICB1cmxUb05vRGltZW5zaW9uQ291bnRbc3JjXSA9IDE7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmIChsYXN0Q2FsbCkKKyAgICAgICAgICAgIGlmIChpc0xhc3RT
dHlsZSkKICAgICAgICAgICAgICAgICBkb25lQ2FsbGJhY2soKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGZ1bmN0aW9uIGdldFN0eWxlcyhub2RlSWRzKQogICAgICAgICB7CisgICAgICAgICAgICBm
dW5jdGlvbiBpbmxpbmVDYWxsYmFjayh0YXJnZXRSZXN1bHQsIGlubGluZVN0eWxlLCBzdHlsZUF0
dHJpYnV0ZXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGFyZ2V0UmVzdWx0Lmlu
bGluZVN0eWxlID0gaW5saW5lU3R5bGU7CisgICAgICAgICAgICAgICAgdGFyZ2V0UmVzdWx0LnN0
eWxlQXR0cmlidXRlcyA9IHN0eWxlQXR0cmlidXRlczsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZnVuY3Rpb24gbWF0Y2hlZENhbGxiYWNrKHRhcmdldFJlc3VsdCwgcmVzdWx0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAg
ICAgIHRhcmdldFJlc3VsdC5tYXRjaGVkQ1NTUnVsZXMgPSByZXN1bHQubWF0Y2hlZENTU1J1bGVz
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoIW5vZGVJZHMgfHwgIW5vZGVJZHMu
bGVuZ3RoKQogICAgICAgICAgICAgICAgIGRvbmVDYWxsYmFjaygpOwotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IG5vZGVJZHMgJiYgaSA8IG5vZGVJZHMubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldFN0eWxlc0FzeW5jKG5vZGVJZHNbaV0s
IHVuZGVmaW5lZCwgaW1hZ2VTdHlsZXNSZWFkeS5iaW5kKHRoaXMsIG5vZGVJZHNbaV0sIGkgPT09
IG5vZGVJZHMubGVuZ3RoIC0gMSkpOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgbm9k
ZUlkcyAmJiBpIDwgbm9kZUlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciB0
YXJnZXRSZXN1bHQgPSB7fTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwu
Z2V0TWF0Y2hlZFN0eWxlc0FzeW5jKG5vZGVJZHNbaV0sIHVuZGVmaW5lZCwgZmFsc2UsIGZhbHNl
LCBtYXRjaGVkQ2FsbGJhY2suYmluZChudWxsLCB0YXJnZXRSZXN1bHQpKTsKKyAgICAgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0SW5saW5lU3R5bGVzQXN5bmMobm9kZUlkc1tp
XSwgaW5saW5lQ2FsbGJhY2suYmluZChudWxsLCB0YXJnZXRSZXN1bHQpKTsKKyAgICAgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0Q29tcHV0ZWRTdHlsZUFzeW5jKG5vZGVJZHNb
aV0sIHVuZGVmaW5lZCwgaW1hZ2VTdHlsZXNSZWFkeS5iaW5kKG51bGwsIG5vZGVJZHNbaV0sIHRh
cmdldFJlc3VsdCwgaSA9PT0gbm9kZUlkcy5sZW5ndGggLSAxKSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBvbkRvY3VtZW50QXZhaWxhYmxlKHJvb3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9k
ZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwu
anMKaW5kZXggNTg4NWQzZDQyZTMyMDg0MmY0MzhjZDdmMDFiNzliYjIwMjc5YmI1OS4uOGUxYjIz
Nzg4N2NmYjViYTBlYzJkZmQ2MGI4YzA3ZDExYmVmN2I5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpAQCAtNTMsMTYgKzUz
LDIwIEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAvKioK
ICAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9kZUlkCiAgICAgICogQHBhcmFtIHs/
QXJyYXkuPHN0cmluZz58dW5kZWZpbmVkfSBmb3JjZWRQc2V1ZG9DbGFzc2VzCisgICAgICogQHBh
cmFtIHtib29sZWFufSBuZWVkUHNldWRvCisgICAgICogQHBhcmFtIHtib29sZWFufSBuZWVkSW5o
ZXJpdGVkCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbig/Kil9IHVzZXJDYWxsYmFjawogICAgICAq
LwotICAgIGdldFN0eWxlc0FzeW5jOiBmdW5jdGlvbihub2RlSWQsIGZvcmNlZFBzZXVkb0NsYXNz
ZXMsIHVzZXJDYWxsYmFjaykKKyAgICBnZXRNYXRjaGVkU3R5bGVzQXN5bmM6IGZ1bmN0aW9uKG5v
ZGVJZCwgZm9yY2VkUHNldWRvQ2xhc3NlcywgbmVlZFBzZXVkbywgbmVlZEluaGVyaXRlZCwgdXNl
ckNhbGxiYWNrKQogICAgIHsKICAgICAgICAgLyoqCiAgICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oPyopfSB1c2VyQ2FsbGJhY2sKICAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9
IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7P0NTU0FnZW50LkNTU05vZGVTdHlsZXN9IHBheWxv
YWQKKyAgICAgICAgICogQHBhcmFtIHs/QXJyYXkuPENTU0FnZW50LkNTU1J1bGU+fSBtYXRjaGVk
UGF5bG9hZAorICAgICAgICAgKiBAcGFyYW0gez9BcnJheS48Q1NTQWdlbnQuUHNldWRvSWRSdWxl
cz59IHBzZXVkb1BheWxvYWQKKyAgICAgICAgICogQHBhcmFtIHs/QXJyYXkuPENTU0FnZW50Lklu
aGVyaXRlZFN0eWxlRW50cnk+fSBpbmhlcml0ZWRQYXlsb2FkCiAgICAgICAgICAqLwotICAgICAg
ICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIGVycm9yLCBwYXlsb2FkKQorICAgICAg
ICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIGVycm9yLCBtYXRjaGVkUGF5bG9hZCwg
cHNldWRvUGF5bG9hZCwgaW5oZXJpdGVkUGF5bG9hZCkKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgaWYgKHVzZXJDYWxsYmFjaykKQEAgLTcxLDg1
ICs3NSw4NSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7fTsKLSAgICAgICAgICAgIGlm
ICgiaW5saW5lU3R5bGUiIGluIHBheWxvYWQpCi0gICAgICAgICAgICAgICAgcmVzdWx0LmlubGlu
ZVN0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHBh
eWxvYWQuaW5saW5lU3R5bGUpOwotCi0gICAgICAgICAgICByZXN1bHQuY29tcHV0ZWRTdHlsZSA9
IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChwYXlsb2FkLmNv
bXB1dGVkU3R5bGUpOwotICAgICAgICAgICAgcmVzdWx0Lm1hdGNoZWRDU1NSdWxlcyA9IFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnBhcnNlUnVsZUFycmF5UGF5bG9hZChwYXlsb2FkLm1hdGNo
ZWRDU1NSdWxlcyk7Ci0KLSAgICAgICAgICAgIHJlc3VsdC5zdHlsZUF0dHJpYnV0ZXMgPSB7fTsK
LSAgICAgICAgICAgIHZhciBwYXlsb2FkU3R5bGVBdHRyaWJ1dGVzID0gcGF5bG9hZC5zdHlsZUF0
dHJpYnV0ZXM7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBheWxvYWRTdHlsZUF0
dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHBheWxv
YWRTdHlsZUF0dHJpYnV0ZXNbaV0ubmFtZTsKLSAgICAgICAgICAgICAgICByZXN1bHQuc3R5bGVB
dHRyaWJ1dGVzW25hbWVdID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQ
YXlsb2FkKHBheWxvYWRTdHlsZUF0dHJpYnV0ZXNbaV0uc3R5bGUpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXN1bHQucHNldWRvRWxlbWVudHMgPSBbXTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcGF5bG9hZC5wc2V1ZG9FbGVtZW50cy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgICAgIHZhciBlbnRyeVBheWxvYWQgPSBwYXlsb2FkLnBzZXVkb0VsZW1lbnRz
W2ldOwotICAgICAgICAgICAgICAgIHJlc3VsdC5wc2V1ZG9FbGVtZW50cy5wdXNoKHsgcHNldWRv
SWQ6IGVudHJ5UGF5bG9hZC5wc2V1ZG9JZCwgcnVsZXM6IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1v
ZGVsLnBhcnNlUnVsZUFycmF5UGF5bG9hZChlbnRyeVBheWxvYWQucnVsZXMpIH0pOworICAgICAg
ICAgICAgaWYgKG1hdGNoZWRQYXlsb2FkKQorICAgICAgICAgICAgICAgIHJlc3VsdC5tYXRjaGVk
Q1NTUnVsZXMgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wYXJzZVJ1bGVBcnJheVBheWxv
YWQobWF0Y2hlZFBheWxvYWQpOworCisgICAgICAgICAgICBpZiAocHNldWRvUGF5bG9hZCkgewor
ICAgICAgICAgICAgICAgIHJlc3VsdC5wc2V1ZG9FbGVtZW50cyA9IFtdOworICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHNldWRvUGF5bG9hZC5sZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgZW50cnlQYXlsb2FkID0gcHNldWRvUGF5bG9hZFtpXTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnBzZXVkb0VsZW1lbnRzLnB1c2goeyBwc2V1ZG9JZDog
ZW50cnlQYXlsb2FkLnBzZXVkb0lkLCBydWxlczogV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwu
cGFyc2VSdWxlQXJyYXlQYXlsb2FkKGVudHJ5UGF5bG9hZC5ydWxlcykgfSk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXN1bHQuaW5oZXJpdGVkID0g
W107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBheWxvYWQuaW5oZXJpdGVkLmxl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVudHJ5UGF5bG9hZCA9IHBheWxvYWQu
aW5oZXJpdGVkW2ldOwotICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHt9OwotICAgICAgICAg
ICAgICAgIGlmICgiaW5saW5lU3R5bGUiIGluIGVudHJ5UGF5bG9hZCkKLSAgICAgICAgICAgICAg
ICAgICAgZW50cnkuaW5saW5lU3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlv
bi5wYXJzZVBheWxvYWQoZW50cnlQYXlsb2FkLmlubGluZVN0eWxlKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIm1hdGNoZWRDU1NSdWxlcyIgaW4gZW50cnlQYXlsb2FkKQotICAgICAgICAgICAgICAg
ICAgICBlbnRyeS5tYXRjaGVkQ1NTUnVsZXMgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5w
YXJzZVJ1bGVBcnJheVBheWxvYWQoZW50cnlQYXlsb2FkLm1hdGNoZWRDU1NSdWxlcyk7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0LmluaGVyaXRlZC5wdXNoKGVudHJ5KTsKKyAgICAgICAgICAgIGlm
IChpbmhlcml0ZWRQYXlsb2FkKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmluaGVyaXRlZCA9
IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5oZXJpdGVkUGF5bG9h
ZC5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnlQYXlsb2FkID0g
aW5oZXJpdGVkUGF5bG9hZFtpXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0ge307
CisgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeVBheWxvYWQuaW5saW5lU3R5bGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbnRyeS5pbmxpbmVTdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NT
dHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChlbnRyeVBheWxvYWQuaW5saW5lU3R5bGUpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnlQYXlsb2FkLm1hdGNoZWRDU1NSdWxlcykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm1hdGNoZWRDU1NSdWxlcyA9IFdlYkluc3BlY3Rv
ci5DU1NTdHlsZU1vZGVsLnBhcnNlUnVsZUFycmF5UGF5bG9hZChlbnRyeVBheWxvYWQubWF0Y2hl
ZENTU1J1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmluaGVyaXRlZC5wdXNoKGVu
dHJ5KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
ICh1c2VyQ2FsbGJhY2spCiAgICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKHJlc3VsdCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JOb2RlKG5vZGVJZCwgZm9y
Y2VkUHNldWRvQ2xhc3NlcyB8fCBbXSwgY2FsbGJhY2suYmluZChudWxsLCB1c2VyQ2FsbGJhY2sp
KTsKKyAgICAgICAgQ1NTQWdlbnQuZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUobm9kZUlkLCBmb3Jj
ZWRQc2V1ZG9DbGFzc2VzIHx8IFtdLCBuZWVkUHNldWRvLCBuZWVkSW5oZXJpdGVkLCBjYWxsYmFj
ay5iaW5kKG51bGwsIHVzZXJDYWxsYmFjaykpOwogICAgIH0sCiAKICAgICAvKioKICAgICAgKiBA
cGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9kZUlkCisgICAgICogQHBhcmFtIHs/QXJyYXkuPHN0
cmluZz58dW5kZWZpbmVkfSBmb3JjZWRQc2V1ZG9DbGFzc2VzCiAgICAgICogQHBhcmFtIHtmdW5j
dGlvbig/V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pfSB1c2VyQ2FsbGJhY2sKICAg
ICAgKi8KLSAgICBnZXRDb21wdXRlZFN0eWxlQXN5bmM6IGZ1bmN0aW9uKG5vZGVJZCwgdXNlckNh
bGxiYWNrKQorICAgIGdldENvbXB1dGVkU3R5bGVBc3luYzogZnVuY3Rpb24obm9kZUlkLCBmb3Jj
ZWRQc2V1ZG9DbGFzc2VzLCB1c2VyQ2FsbGJhY2spCiAgICAgewogICAgICAgICAvKioKICAgICAg
ICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24p
fSB1c2VyQ2FsbGJhY2sKLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9y
Ci0gICAgICAgICAqIEBwYXJhbSB7P0NTU0FnZW50LkNTU1N0eWxlfSBzdHlsZVBheWxvYWQKICAg
ICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHVzZXJDYWxsYmFjaywgZXJyb3Is
IHN0eWxlUGF5bG9hZCkKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sodXNlckNhbGxiYWNrLCBl
cnJvciwgY29tcHV0ZWRQYXlsb2FkKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3Ip
CisgICAgICAgICAgICBpZiAoZXJyb3IgfHwgIWNvbXB1dGVkUGF5bG9hZCkKICAgICAgICAgICAg
ICAgICB1c2VyQ2FsbGJhY2sobnVsbCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgdXNlckNhbGxiYWNrKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5
bG9hZChzdHlsZVBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2soV2ViSW5z
cGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKGNvbXB1dGVkUGF5bG9hZCkp
OwogICAgICAgICB9CiAKLSAgICAgICAgQ1NTQWdlbnQuZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUo
bm9kZUlkLCBjYWxsYmFjay5iaW5kKG51bGwsIHVzZXJDYWxsYmFjaykpOworICAgICAgICBDU1NB
Z2VudC5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZShub2RlSWQsIGZvcmNlZFBzZXVkb0NsYXNzZXMg
fHwgW10sIGNhbGxiYWNrLmJpbmQobnVsbCwgdXNlckNhbGxiYWNrKSk7CiAgICAgfSwKIAogICAg
IC8qKgogICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9kZUlkfSBub2RlSWQKLSAgICAgKiBAcGFy
YW0ge2Z1bmN0aW9uKD9XZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbil9IHVzZXJDYWxs
YmFjaworICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oP1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uLCA/T2JqZWN0LjxzdHJpbmcsIHN0cmluZz4pfSB1c2VyQ2FsbGJhY2sKICAgICAgKi8K
LSAgICBnZXRJbmxpbmVTdHlsZUFzeW5jOiBmdW5jdGlvbihub2RlSWQsIHVzZXJDYWxsYmFjaykK
KyAgICBnZXRJbmxpbmVTdHlsZXNBc3luYzogZnVuY3Rpb24obm9kZUlkLCB1c2VyQ2FsbGJhY2sp
CiAgICAgewogICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2ViSW5z
cGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pfSB1c2VyQ2FsbGJhY2sKLSAgICAgICAgICogQHBh
cmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7P0NTU0FnZW50
LkNTU1N0eWxlfSBzdHlsZVBheWxvYWQKKyAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24sID9PYmplY3QuPHN0cmluZywgc3RyaW5nPil9
IHVzZXJDYWxsYmFjawogICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sodXNl
ckNhbGxiYWNrLCBlcnJvciwgc3R5bGVQYXlsb2FkKQorICAgICAgICBmdW5jdGlvbiBjYWxsYmFj
ayh1c2VyQ2FsbGJhY2ssIGVycm9yLCBpbmxpbmVQYXlsb2FkLCBhdHRyaWJ1dGVzUGF5bG9hZCkK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgICAgIHVzZXJD
YWxsYmFjayhudWxsKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyQ2Fs
bGJhY2soV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHN0eWxl
UGF5bG9hZCkpOworICAgICAgICAgICAgaWYgKGVycm9yIHx8ICFpbmxpbmVQYXlsb2FkKQorICAg
ICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhudWxsLCBudWxsKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIHZhciBzdHlsZUF0dHJpYnV0ZXM7CisgICAgICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXNQYXlsb2FkKSB7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlQXR0cmli
dXRlcyA9IHt9OworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJp
YnV0ZXNQYXlsb2FkLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
bmFtZSA9IGF0dHJpYnV0ZXNQYXlsb2FkW2ldLm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZUF0dHJpYnV0ZXNbbmFtZV0gPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlv
bi5wYXJzZVBheWxvYWQoYXR0cmlidXRlc1BheWxvYWRbaV0uc3R5bGUpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFj
ayhXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQoaW5saW5lUGF5
bG9hZCksIHN0eWxlQXR0cmlidXRlcyB8fCBudWxsKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIENTU0FnZW50LmdldElubGluZVN0eWxlRm9yTm9kZShub2RlSWQsIGNhbGxi
YWNrLmJpbmQobnVsbCwgdXNlckNhbGxiYWNrKSk7CisgICAgICAgIENTU0FnZW50LmdldElubGlu
ZVN0eWxlc0Zvck5vZGUobm9kZUlkLCBjYWxsYmFjay5iaW5kKG51bGwsIHVzZXJDYWxsYmFjaykp
OwogICAgIH0sCiAKICAgICAvKioKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvTWV0cmljc1NpZGViYXJQYW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUuanMKaW5kZXggZTFjNjRhN2IzNzU1YTNi
NzBlYzM2NzNjMTMwZjY4MmNmNDgyZjJjNC4uZjg5ZmI2ZDU1NDk5M2FkMDhkYzE0YTg2YmU4MWNk
MzdmMTgxNzdkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9NZXRyaWNzU2lkZWJhclBhbmUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUuanMKQEAgLTcxLDcgKzcxLDcgQEAgV2ViSW5zcGVj
dG9yLk1ldHJpY3NTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWV0cmljcyhzdHlsZSk7CiAgICAgICAgIH0K
LSAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldENvbXB1dGVkU3R5bGVBc3luYyhub2Rl
LmlkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVs
LmdldENvbXB1dGVkU3R5bGVBc3luYyhub2RlLmlkLCBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1l
bnRzLnNpZGViYXJQYW5lcy5zdHlsZXMuZm9yY2VkUHNldWRvQ2xhc3NlcywgY2FsbGJhY2suYmlu
ZCh0aGlzKSk7CiAKICAgICAgICAgZnVuY3Rpb24gaW5saW5lU3R5bGVDYWxsYmFjayhzdHlsZSkK
ICAgICAgICAgewpAQCAtNzksNyArNzksNyBAQCBXZWJJbnNwZWN0b3IuTWV0cmljc1NpZGViYXJQ
YW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0
aGlzLmlubGluZVN0eWxlID0gc3R5bGU7CiAgICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9y
LmNzc01vZGVsLmdldElubGluZVN0eWxlQXN5bmMobm9kZS5pZCwgaW5saW5lU3R5bGVDYWxsYmFj
ay5iaW5kKHRoaXMpKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldElubGluZVN0
eWxlc0FzeW5jKG5vZGUuaWQsIGlubGluZVN0eWxlQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAg
fSwKIAogICAgIF9zdHlsZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKaW5k
ZXggYzRmMGUwZGE5YWU4NzQzNTRkZjQ4MTMxZmEzNDZjNGMxMWYzYTU4Yy4uY2YxMTlhOGRiNjRj
OWJhYjk4ZTQyNWZlZjQxMzliZmY2ODIzYWU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCkBAIC0xOTUsNiAr
MTk1LDExIEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICBjb250ZXh0TWVudS5zaG93KGV2ZW50KTsKICAgICB9LAogCisgICAgZ2V0IGZv
cmNlZFBzZXVkb0NsYXNzZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcmNlZFBz
ZXVkb0NsYXNzZXM7CisgICAgfSwKKwogICAgIHVwZGF0ZTogZnVuY3Rpb24obm9kZSwgZm9yY2VV
cGRhdGUpCiAgICAgewogICAgICAgICB2YXIgcmVmcmVzaCA9IGZhbHNlOwpAQCAtMjE5LDYgKzIy
NCwzOCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAg
ICAgICB0aGlzLl9pbm5lclVwZGF0ZShyZWZyZXNoKTsKICAgICB9LAogCisgICAgX2V4ZWN1dGVS
ZWJ1aWxkVXBkYXRlOiBmdW5jdGlvbihub2RlLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZh
ciByZXN1bHRTdHlsZXMgPSB7fTsKKworICAgICAgICBmdW5jdGlvbiBzdHlsZXNDYWxsYmFjayht
YXRjaGVkUmVzdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobWF0Y2hlZFJlc3VsdCkg
eworICAgICAgICAgICAgICAgIHJlc3VsdFN0eWxlcy5tYXRjaGVkQ1NTUnVsZXMgPSBtYXRjaGVk
UmVzdWx0Lm1hdGNoZWRDU1NSdWxlczsKKyAgICAgICAgICAgICAgICByZXN1bHRTdHlsZXMucHNl
dWRvRWxlbWVudHMgPSBtYXRjaGVkUmVzdWx0LnBzZXVkb0VsZW1lbnRzOworICAgICAgICAgICAg
ICAgIHJlc3VsdFN0eWxlcy5pbmhlcml0ZWQgPSBtYXRjaGVkUmVzdWx0LmluaGVyaXRlZDsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9yZWJ1aWxkVXBkYXRlKG5vZGUsIHJlc3VsdFN0eWxlcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spCisgICAgICAgICAgICAgICAg
Y2FsbGJhY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGlubGluZUNhbGxiYWNr
KGlubGluZVN0eWxlLCBzdHlsZUF0dHJpYnV0ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
c3VsdFN0eWxlcy5pbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlOworICAgICAgICAgICAgcmVzdWx0
U3R5bGVzLnN0eWxlQXR0cmlidXRlcyA9IHN0eWxlQXR0cmlidXRlczsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVkQ2FsbGJhY2soY29tcHV0ZWRTdHlsZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmVzdWx0U3R5bGVzLmNvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxl
OworICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldENvbXB1dGVk
U3R5bGVBc3luYyhub2RlLmlkLCB0aGlzLl9mb3JjZWRQc2V1ZG9DbGFzc2VzLCBjb21wdXRlZENh
bGxiYWNrLmJpbmQodGhpcykpOworICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0SW5s
aW5lU3R5bGVzQXN5bmMobm9kZS5pZCwgaW5saW5lQ2FsbGJhY2suYmluZCh0aGlzKSk7CisgICAg
ICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRNYXRjaGVkU3R5bGVzQXN5bmMobm9kZS5pZCwg
dGhpcy5fZm9yY2VkUHNldWRvQ2xhc3NlcywgdHJ1ZSwgdHJ1ZSwgc3R5bGVzQ2FsbGJhY2suYmlu
ZCh0aGlzKSk7CisgICAgfSwKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LlN0eWxlUHJvcGVydGllc1NlY3Rpb249fSBlZGl0ZWRTZWN0aW9uCiAgICAgICogQHBhcmFtIHtm
dW5jdGlvbigpPX0gdXNlckNhbGxiYWNrCkBAIC0yMzUsMTQgKzI3Miw2IEBAIFdlYkluc3BlY3Rv
ci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBzdHlsZXNDYWxsYmFjayhzdHlsZXMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlzLm5vZGUgPT09IG5vZGUgJiYgc3R5bGVzKQotICAg
ICAgICAgICAgICAgIHRoaXMuX3JlYnVpbGRVcGRhdGUobm9kZSwgc3R5bGVzKTsKLSAgICAgICAg
ICAgIGlmICh1c2VyQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKCk7Ci0g
ICAgICAgIH0KLQogICAgICAgICBmdW5jdGlvbiBjb21wdXRlZFN0eWxlQ2FsbGJhY2soY29tcHV0
ZWRTdHlsZSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHRoaXMubm9kZSA9PT0gbm9kZSAm
JiBjb21wdXRlZFN0eWxlKQpAQCAtMjUyLDkgKzI4MSw5IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNT
aWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocmVmcmVz
aCkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRDb21wdXRlZFN0eWxlQXN5
bmMobm9kZS5pZCwgY29tcHV0ZWRTdHlsZUNhbGxiYWNrLmJpbmQodGhpcykpOworICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldENvbXB1dGVkU3R5bGVBc3luYyhub2RlLmlkLCB0
aGlzLl9mb3JjZWRQc2V1ZG9DbGFzc2VzLCBjb21wdXRlZFN0eWxlQ2FsbGJhY2suYmluZCh0aGlz
KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRT
dHlsZXNBc3luYyhub2RlLmlkLCB0aGlzLl9mb3JjZWRQc2V1ZG9DbGFzc2VzLCBzdHlsZXNDYWxs
YmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIHRoaXMuX2V4ZWN1dGVSZWJ1aWxkVXBkYXRl
KG5vZGUsIHVzZXJDYWxsYmFjayk7CiAgICAgfSwKIAogICAgIF9zdHlsZVNoZWV0Q2hhbmdlZDog
ZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDM0M2Q2OTY5ZDEzOWJmZTExNjgyNzI4NjU2ODk4NDc3OWIzM2Iw
MmQuLjRmNTIzZWZiNmJmMDkxZDc4NjA1OTYwNTYxMTRmYzc5MGE4MTliOTcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxMS0xMS0xOCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtQcm90b2NvbF0gUmV0YWluIGEgc2lu
Z2xlIHVuaXZlcnNhbCBtZXRob2QgZm9yIGxvYWRpbmcgYSByZXF1aXJlZCBjb21iaW5hdGlvbiBv
ZiBlbGVtZW50IHN0eWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzI3MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMvZ2V0LXNldC1zdHlsZXNoZWV0LXRleHQuaHRtbDoK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1mb3JtYXR0aW5nLmh0bWw6CisgICAg
ICAgICogaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtbmV3LUFQSS5odG1sOgorICAgICAgICAqIGlu
c3BlY3Rvci9zdHlsZXMvc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6CisKIDIwMTEtMTEtMTcg
IFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gU3VwcG9ydCBDb3JlQW5pbWF0aW9uIHBsdWdpbiBtb2RlbCBvbiBNYWMKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvZ2V0LXNldC1zdHlsZXNoZWV0LXRleHQuaHRt
bCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvZ2V0LXNldC1zdHlsZXNoZWV0LXRleHQu
aHRtbAppbmRleCBkNjNkNzc1MTE1MWZjYjlkMjQ1ZjBiYTEyNDZkNWMzZGZiNjg2ODlkLi4yOWRl
NGUzMGI2OGQ1NzRhN2VmOWRjNmZkN2YwOTRkNGJjOGQ3NTBmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL2dldC1zZXQtc3R5bGVzaGVldC10ZXh0Lmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9nZXQtc2V0LXN0eWxlc2hlZXQtdGV4dC5odG1s
CkBAIC01Niw3ICs1Niw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogCiAgICAgZnVuY3Rpb24gdGVzdE5l
d0VsZW1lbnRTdHlsZXMoKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJyb3Is
IHN0eWxlcykKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIG1hdGNoZWRDU1NSdWxl
cykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImVycm9yOiAiICsgZXJyb3IpOwpAQCAtNjQsMTMgKzY0
LDEzIEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiPT09IE1hdGNoZWQgcnVsZXMgZm9yIGgxIGFmdGVyIHNldFRl
eHQoKSA9PT0iKTsKLSAgICAgICAgICAgIGR1bXBSdWxlc0FycmF5KHN0eWxlcy5tYXRjaGVkQ1NT
UnVsZXMpOworICAgICAgICAgICAgZHVtcFJ1bGVzQXJyYXkobWF0Y2hlZENTU1J1bGVzKTsKICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBmdW5jdGlvbiBub2RlQ2FsbGJhY2sobm9kZSkKICAgICAgICAgewotICAgICAgICAgICAg
Q1NTQWdlbnQuZ2V0U3R5bGVzRm9yTm9kZShub2RlLmlkLCB1bmRlZmluZWQsIGNhbGxiYWNrKTsK
KyAgICAgICAgICAgIENTU0FnZW50LmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKG5vZGUuaWQsIFtd
LCBmYWxzZSwgZmFsc2UsIGNhbGxiYWNrKTsKICAgICAgICAgfQogCiAgICAgICAgIEluc3BlY3Rv
clRlc3Quc2VsZWN0Tm9kZVdpdGhJZCgiaW5zcGVjdGVkIiwgbm9kZUNhbGxiYWNrKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLWZvcm1hdHRpbmcuaHRt
bCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLWZvcm1hdHRpbmcuaHRtbApp
bmRleCAyY2EzYTgxZjJlZTNlYmYyZjJhY2JkNGIyY2VlYTk2NDE2NTcwZmE4Li5iYTQ1NTZjMGFl
MWFkN2Y3MDc0NTc3Nzc0ZTViMWM5NTQ0OGEyZmNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1mb3JtYXR0aW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtZm9ybWF0dGluZy5odG1sCkBAIC0yNiw3ICsyNiw3IEBA
IGZ1bmN0aW9uIHRlc3QoKQogCiAgICAgICAgICAgICBmdW5jdGlvbiBub2RlQ2FsbGJhY2sobm9k
ZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwu
Z2V0U3R5bGVzQXN5bmMobm9kZS5pZCwgdW5kZWZpbmVkLCBjYWxsYmFjayk7CisgICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldE1hdGNoZWRTdHlsZXNBc3luYyhub2RlLmlk
LCB1bmRlZmluZWQsIGZhbHNlLCBmYWxzZSwgY2FsbGJhY2spOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZWxlY3ROb2RlV2l0aElkKCJmb3JtYXR0ZWQiLCBub2Rl
Q2FsbGJhY2spOwogICAgICAgICB9LApAQCAtMTIxLDcgKzEyMSw3IEBAIGZ1bmN0aW9uIHRlc3Qo
KQogCiAgICAgICAgICAgICBmdW5jdGlvbiBub2RlQ2FsbGJhY2sobm9kZSkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0U3R5bGVzQXN5bmMo
bm9kZS5pZCwgdW5kZWZpbmVkLCBjYWxsYmFjayk7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLmNzc01vZGVsLmdldE1hdGNoZWRTdHlsZXNBc3luYyhub2RlLmlkLCB1bmRlZmluZWQsIGZh
bHNlLCBmYWxzZSwgY2FsbGJhY2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5zZWxlY3ROb2RlV2l0aElkKCJ1bmZvcm1hdHRlZCIsIG5vZGVDYWxsYmFjayk7CiAg
ICAgICAgIH0sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxl
cy1uZXctQVBJLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1uZXct
QVBJLmh0bWwKaW5kZXggZmY4ODM2YjIzOTVmOWRiMTlhNzQ3YzE1YjM2MDIyYWM2ODk0ZTVmZS4u
ZjAxZmU0MGE3YzlhYjE2YTgwNzI1ZjhjYzRiOTgyNWY2YWExZDJjZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtbmV3LUFQSS5odG1sCisrKyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLW5ldy1BUEkuaHRtbApAQCAtMTYsMTMgKzE2
LDggQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgdmFyIGJvZHlJZDsKICAgICBmdW5jdGlvbiB0ZXN0
X3N0eWxlcyhub2RlKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soZXJyb3IsIHN0
eWxlcykKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soc3R5bGVzKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJl
c3VsdCgiZXJyb3I6ICIgKyBlcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiIik7CiAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiPT09IENvbXB1dGVkIHN0eWxlIHByb3Bl
cnR5IGNvdW50IGZvciBib2R5ID09PSIpOwogICAgICAgICAgICAgdmFyIHByb3BDb3VudCA9IHN0
eWxlcy5jb21wdXRlZFN0eWxlLmNzc1Byb3BlcnRpZXMubGVuZ3RoOwpAQCAtNTMsMTcgKzQ4LDU1
IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgdGVzdF90YWJsZVN0eWxlcygpOwogICAg
ICAgICB9CiAKKyAgICAgICAgdmFyIHJlc3VsdFN0eWxlcyA9IHt9OworCisgICAgICAgIGZ1bmN0
aW9uIGNvbXB1dGVkQ2FsbGJhY2soZXJyb3IsIGNvbXB1dGVkU3R5bGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRk
UmVzdWx0KCJlcnJvcjogIiArIGVycm9yKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmNvbXBsZXRlVGVzdCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJlc3VsdFN0eWxlcy5jb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGlubGluZUNhbGxiYWNrKGVycm9yLCBpbmxp
bmVTdHlsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImVycm9yOiAiICsgZXJyb3IpOworICAgICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0U3R5bGVzLmlubGluZVN0
eWxlID0gaW5saW5lU3R5bGU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBtYXRjaGVk
Q2FsbGJhY2soZXJyb3IsIG1hdGNoZWRDU1NSdWxlcywgcHNldWRvRWxlbWVudHMsIGluaGVyaXRl
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImVycm9yOiAiICsgZXJyb3IpOworICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHRTdHlsZXMubWF0Y2hlZENTU1J1
bGVzID0gbWF0Y2hlZENTU1J1bGVzOworICAgICAgICAgICAgcmVzdWx0U3R5bGVzLnBzZXVkb0Vs
ZW1lbnRzID0gcHNldWRvRWxlbWVudHM7CisgICAgICAgICAgICByZXN1bHRTdHlsZXMuaW5oZXJp
dGVkID0gaW5oZXJpdGVkOworICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0U3R5bGVzKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIGZ1bmN0aW9uIG5vZGVDYWxsYmFjayhub2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBib2R5SWQgPSBub2RlLmlkOwotICAgICAgICAgICAgQ1NTQWdlbnQuZ2V0
U3R5bGVzRm9yTm9kZShib2R5SWQsIHVuZGVmaW5lZCwgY2FsbGJhY2spOworICAgICAgICAgICAg
Q1NTQWdlbnQuZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobm9kZS5pZCwgW10sIGNvbXB1dGVkQ2Fs
bGJhY2spOworICAgICAgICAgICAgQ1NTQWdlbnQuZ2V0SW5saW5lU3R5bGVzRm9yTm9kZShub2Rl
LmlkLCBpbmxpbmVDYWxsYmFjayk7CisgICAgICAgICAgICBDU1NBZ2VudC5nZXRNYXRjaGVkU3R5
bGVzRm9yTm9kZShub2RlLmlkLCBbXSwgdHJ1ZSwgdHJ1ZSwgbWF0Y2hlZENhbGxiYWNrKTsKICAg
ICAgICAgfQogICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbGVjdE5vZGVXaXRoSWQoIm1haW5Cb2R5
Iiwgbm9kZUNhbGxiYWNrKTsKICAgICB9CiAKICAgICBmdW5jdGlvbiB0ZXN0X3RhYmxlU3R5bGVz
KCkKICAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCBzdHlsZXMpCisgICAg
ICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCBpbmxpbmVTdHlsZSwgc3R5bGVBdHRyaWJ1dGVz
KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiZXJyb3I6ICIgKyBlcnJvcik7CkBAIC03MSw3ICsxMDQs
NiBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuYWRkUmVzdWx0KCIiKTsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0
KCI9PT0gQXR0cmlidXRlIHN0eWxlcyBmb3IgdGFibGUgPT09Iik7Ci0gICAgICAgICAgICB2YXIg
c3R5bGVBdHRyaWJ1dGVzID0gc3R5bGVzLnN0eWxlQXR0cmlidXRlczsKICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3R5bGVBdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkF0dHJpYnV0ZTogIiArIHN0eWxlQXR0
cmlidXRlc1tpXS5uYW1lKTsKICAgICAgICAgICAgICAgICBkdW1wUnVsZU9yU3R5bGUoc3R5bGVB
dHRyaWJ1dGVzW2ldLnN0eWxlKTsKQEAgLTgxLDcgKzExMyw3IEBAIGZ1bmN0aW9uIHRlc3QoKQog
CiAgICAgICAgIGZ1bmN0aW9uIG5vZGVDYWxsYmFjayhub2RlKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JOb2RlKG5vZGUuaWQsIHVuZGVmaW5lZCwgY2FsbGJh
Y2spOworICAgICAgICAgICAgQ1NTQWdlbnQuZ2V0SW5saW5lU3R5bGVzRm9yTm9kZShub2RlLmlk
LCBjYWxsYmFjayk7CiAgICAgICAgIH0KICAgICAgICAgSW5zcGVjdG9yVGVzdC5ub2RlV2l0aElk
KCJ0aGV0YWJsZSIsIG5vZGVDYWxsYmFjayk7CiAgICAgfQpAQCAtMTU4LDcgKzE5MCw3IEBAIGZ1
bmN0aW9uIHRlc3QoKQogCiAgICAgZnVuY3Rpb24gdGVzdF9hZGRSdWxlKCkKICAgICB7Ci0gICAg
ICAgIGZ1bmN0aW9uIGRpZEdldFN0eWxlcyhlcnJvciwgc3R5bGVzKQorICAgICAgICBmdW5jdGlv
biBkaWRHZXRTdHlsZXMoZXJyb3IsIG1hdGNoZWRDU1NSdWxlcykKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoImVycm9yOiAiICsgZXJyb3IpOwpAQCAtMTY2LDcgKzE5OCw3IEBAIGZ1bmN0aW9uIHRlc3Qo
KQogICAgICAgICAgICAgfQogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIiIp
OwogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIj09PSBNYXRjaGVkIHJ1bGVz
IGFmdGVyIHJ1bGUgYWRkZWQgPT09Iik7Ci0gICAgICAgICAgICBkdW1wUnVsZXNBcnJheShzdHls
ZXMubWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgICAgIGR1bXBSdWxlc0FycmF5KG1hdGNoZWRD
U1NSdWxlcyk7CiAgICAgICAgICAgICB0ZXN0X2Rpc2FibGVQcm9wZXJ0eSgpOwogICAgICAgICB9
CiAKQEAgLTE3Niw3ICsyMDgsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiZXJyb3I6ICIgKyBlcnJvcik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQ1NTQWdlbnQuZ2V0U3R5bGVz
Rm9yTm9kZShib2R5SWQsIHVuZGVmaW5lZCwgZGlkR2V0U3R5bGVzKTsKKyAgICAgICAgICAgIENT
U0FnZW50LmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKGJvZHlJZCwgW10sIGZhbHNlLCBmYWxzZSwg
ZGlkR2V0U3R5bGVzKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIHJ1bGVBZGRlZChl
cnJvciwgcnVsZSkKQEAgLTIwNSw3ICsyMzcsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAg
ICAgIHRlc3RfZW5hYmxlUHJvcGVydHkoc3R5bGUuc3R5bGVJZCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBmdW5jdGlvbiBzdHlsZXNDYWxsYmFjayhlcnJvciwgc3R5bGVzKQorICAgICAgICBmdW5j
dGlvbiBzdHlsZXNDYWxsYmFjayhlcnJvciwgbWF0Y2hlZENTU1J1bGVzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFk
ZFJlc3VsdCgiZXJyb3I6ICIgKyBlcnJvcik7CkBAIC0yMjAsNyArMjUyLDcgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgICAgICAgICAvLyAtbW96LWdvb2c6IDEqKio7CiAgICAgICAgICAgICAvLyBi
b3JkZXItd2lkdGg6IDBweDsKIAotICAgICAgICAgICAgdmFyIHN0eWxlSWQgPSBzdHlsZXMubWF0
Y2hlZENTU1J1bGVzWzFdLnN0eWxlLnN0eWxlSWQ7CisgICAgICAgICAgICB2YXIgc3R5bGVJZCA9
IG1hdGNoZWRDU1NSdWxlc1sxXS5zdHlsZS5zdHlsZUlkOwogICAgICAgICAgICAgQ1NTQWdlbnQu
dG9nZ2xlUHJvcGVydHkoc3R5bGVJZCwgMCwgdHJ1ZSk7IC8vIGhlaWdodDogMTAwJQogICAgICAg
ICAgICAgQ1NTQWdlbnQudG9nZ2xlUHJvcGVydHkoc3R5bGVJZCwgNywgdHJ1ZSk7IC8vIGJvcmRl
ci13aWR0aDogMHB4CiAgICAgICAgICAgICBDU1NBZ2VudC5zZXRQcm9wZXJ0eVRleHQoc3R5bGVJ
ZCwgNywgImZvbnQtc2l6ZTogMTJweDsiLCBmYWxzZSk7CkBAIC0yNDQsNyArMjc2LDcgQEAgZnVu
Y3Rpb24gdGVzdCgpCiAKICAgICAgICAgZnVuY3Rpb24gbm9kZUNhbGxiYWNrKG5vZGUpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIENTU0FnZW50LmdldFN0eWxlc0Zvck5vZGUobm9kZS5pZCwgdW5k
ZWZpbmVkLCBzdHlsZXNDYWxsYmFjayk7CisgICAgICAgICAgICBDU1NBZ2VudC5nZXRNYXRjaGVk
U3R5bGVzRm9yTm9kZShub2RlLmlkLCBbXSwgZmFsc2UsIGZhbHNlLCBzdHlsZXNDYWxsYmFjayk7
CiAgICAgICAgIH0KICAgICAgICAgSW5zcGVjdG9yVGVzdC5ub2RlV2l0aElkKCJ0b2dnbGUiLCBu
b2RlQ2FsbGJhY2spOwogICAgIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9z
dHlsZXMvc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCmluZGV4IDkwMDM4MDljMzAyOTk5NTA0
Zjg1N2ExZDFjYWQ0NWQ1ODk4NDNiMTIuLmY4MTU2OTE2ZjQwN2Y4M2Y5NTNhYzhjZjgxOThlZGM3
MjhlZWFmODkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVz
LXNvdXJjZS1vZmZzZXRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9z
dHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApAQCAtMzUsMjEgKzM1LDQyIEBAIGZ1bmN0aW9uIHRl
c3QoKQogICAgIAogICAgIEluc3BlY3RvclRlc3Quc2VsZWN0Tm9kZVdpdGhJZCgibWFpbkJvZHki
LCBzdGVwMSk7CiAKLSAgICBmdW5jdGlvbiBzdGVwMShub2RlKQorICAgIHZhciByZXN1bHRTdHls
ZXMgPSB7fTsKKworICAgIGZ1bmN0aW9uIGlubGluZUNhbGxiYWNrKGVycm9yLCBpbmxpbmVTdHls
ZSkKICAgICB7Ci0gICAgICAgIENTU0FnZW50LmdldFN0eWxlc0Zvck5vZGUobm9kZS5pZCwgdW5k
ZWZpbmVkLCBzdGVwMik7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYWRkUmVzdWx0KCJlcnJvcjogIiArIGVycm9yKTsKKyAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHJlc3VsdFN0eWxlcy5pbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlOwogICAg
IH0KIAotICAgIGZ1bmN0aW9uIHN0ZXAyKGVycm9yLCBzdHlsZXMpCisgICAgZnVuY3Rpb24gbWF0
Y2hlZENhbGxiYWNrKGVycm9yLCBtYXRjaGVkQ1NTUnVsZXMpCiAgICAgewotICAgICAgICBpZiAo
ZXJyb3IpCi0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiZXJyb3I6ICIgKyBl
cnJvcik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdmFyIG1hdGNoZWRDU1NSdWxlcyA9
IHN0eWxlcy5tYXRjaGVkQ1NTUnVsZXM7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IG1hdGNoZWRDU1NSdWxlcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICBkdW1wU3R5bGVE
YXRhKG1hdGNoZWRDU1NSdWxlc1tpXSk7Ci0gICAgICAgICAgICBkdW1wU3R5bGVEYXRhKHN0eWxl
cy5pbmxpbmVTdHlsZSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYWRkUmVzdWx0KCJlcnJvcjogIiArIGVycm9yKTsKKyAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorICAgICAgICByZXN1bHRTdHlsZXMubWF0Y2hlZENTU1J1bGVzID0gbWF0Y2hlZENTU1J1bGVz
OworICAgICAgICBzdGVwMigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0ZXAxKG5vZGUpCisg
ICAgeworICAgICAgICBDU1NBZ2VudC5nZXRJbmxpbmVTdHlsZXNGb3JOb2RlKG5vZGUuaWQsIGlu
bGluZUNhbGxiYWNrKTsKKyAgICAgICAgQ1NTQWdlbnQuZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUo
bm9kZS5pZCwgbWF0Y2hlZENhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGVwMigp
CisgICAgeworICAgICAgICB2YXIgbWF0Y2hlZENTU1J1bGVzID0gcmVzdWx0U3R5bGVzLm1hdGNo
ZWRDU1NSdWxlczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVkQ1NTUnVsZXMu
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkdW1wU3R5bGVEYXRhKG1hdGNoZWRDU1NSdWxlc1tp
XSk7CisgICAgICAgIGR1bXBTdHlsZURhdGEocmVzdWx0U3R5bGVzLmlubGluZVN0eWxlKTsKICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116061</attachid>
            <date>2011-11-21 03:57:08 -0800</date>
            <delta_ts>2011-11-21 03:59:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72701-20111121155705.patch</filename>
            <type>text/plain</type>
            <size>44123</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwODk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjI1YzZiNDQ1ZGQwMTY0
MzU1YTJjMDZjNTY0NzkzNjIwZjlmNTU3Zi4uNTg2MWY5MTE0MzI2YmRkMTIwZmMwMjJiYmUwZGFk
Zjk1MDFmZDg5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTExLTE4ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogW1Byb3RvY29sXSBSZXRhaW4gYSBzaW5nbGUgdW5pdmVyc2FsIG1ldGhvZCBmb3IgbG9h
ZGluZyBhIHJlcXVpcmVkIGNvbWJpbmF0aW9uIG9mIGVsZW1lbnQgc3R5bGVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MjcwMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zv
ck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVk
U3R5bGVGb3JOb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxl
LnByb3RvdHlwZS5kb1J1bi5nZXRTdHlsZXMuaW5saW5lQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUuZG9SdW4u
Z2V0U3R5bGVzLm1hdGNoZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1bi5nZXRTdHlsZXMpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5nZXRNYXRjaGVkU3R5bGVzQXN5bmMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlLmdldENvbXB1
dGVkU3R5bGVBc3luYyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90
b3R5cGUuZ2V0SW5saW5lU3R5bGVzQXN5bmMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvTWV0cmljc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk1ldHJpY3NT
aWRlYmFyUGFuZS5wcm90b3R5cGUuX2lubmVyVXBkYXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0
eWxlc1NpZGViYXJQYW5lLnByb3RvdHlwZS5nZXQgZm9yY2VkUHNldWRvQ2xhc3Nlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLl9leGVjdXRlUmVi
dWlsZFVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJv
dG90eXBlLl9leGVjdXRlUmVidWlsZFVwZGF0ZS5pbmxpbmVDYWxsYmFjayk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLl9leGVjdXRlUmVidWlsZFVw
ZGF0ZS5jb21wdXRlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZXNTaWRl
YmFyUGFuZS5wcm90b3R5cGUuX2lubmVyVXBkYXRlKToKKwogMjAxMS0xMS0yMSAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjEwMDg1Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgppbmRleCA2YzhmODZiZjU0ODdlMmYyMzNmMDBmOTcwNDg1ODIyZmM5MjNlY2E1Li5hNDNmNmMz
YTEwZmE3NmJiZWUwYjI0MDlhNjA1YmJmNWRmMDQwN2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5qc29uCkBAIC0xNDM0LDE5ICsxNDM0LDYgQEAKICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVGhpcyBvYmplY3QgaWRlbnRpZmllcyBhIENTUyBydWxlIGluIGEg
dW5pcXVlIHdheS4iCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICJpZCI6ICJDU1NOb2RlU3R5bGVzIiwKLSAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmpl
Y3QiLAotICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImlubGluZVN0eWxlIiwgIiRyZWYiOiAiQ1NTU3R5bGUiLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIG5vZGUncyBpbmxpbmUgc3R5bGUsIGlmIGFueS4i
IH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29tcHV0ZWRTdHlsZSIsICIkcmVm
IjogIkNTU0NvbXB1dGVkU3R5bGUiLCAiZGVzY3JpcHRpb24iOiAiVGhlIG5vZGUncyBjb21wdXRl
ZCBzdHlsZS4iIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWF0Y2hlZENTU1J1
bGVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIkNTU1J1bGUiIH0sICJk
ZXNjcmlwdGlvbiI6ICJDU1MgcnVsZXMgbWF0Y2hpbmcgdGhpcyBub2RlLCBmcm9tIGFsbCBhcHBs
aWNhYmxlIHN0eWxlc2hlZXRzLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
dHlsZUF0dHJpYnV0ZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiQ1NT
U3R5bGVBdHRyaWJ1dGUiIH0sICJkZXNjcmlwdGlvbiI6ICJFbnRyaWVzIGZvciBzdHlsZS1yZWxh
dGVkIGVsZW1lbnQgYXR0cmlidXRlcyAoZS5nLiB3aWR0aD0yMCkuIn0sCi0gICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHNldWRvRWxlbWVudHMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgIiRyZWYiOiAiUHNldWRvSWRSdWxlcyIgfSwgImRlc2NyaXB0aW9uIjogIlBzZXVkbyBz
dHlsZSBydWxlcyBmb3IgdGhpcyBub2RlLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJpbmhlcml0ZWQiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiSW5o
ZXJpdGVkU3R5bGVFbnRyeSIgfSwgImRlc2NyaXB0aW9uIjogIkEgY2hhaW4gb2YgaW5oZXJpdGVk
IHN0eWxlcyAoZnJvbSB0aGUgaW1tZWRpYXRlIG5vZGUgcGFyZW50IHVwIHRvIHRoZSBET00gdHJl
ZSByb290KS4iIH0KLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJBIGhvbGRlciBmb3IgYWxsIENTUyBzdHlsZXMgYXBwbGljYWJsZSB0byBhIHBhcnRp
Y3VsYXIgRE9NIG5vZGUuIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAiaWQiOiAiUHNldWRvSWRSdWxlcyIsCiAgICAgICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKQEAgLTE1NjksMzUgKzE1
NTYsNDEgQEAKICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRzIjogWwogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICJuYW1lIjogImdldFN0eWxlc0Zvck5vZGUiLAorICAgICAgICAg
ICAgICAgICJuYW1lIjogImdldE1hdGNoZWRTdHlsZXNGb3JOb2RlIiwKICAgICAgICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub2RlSWQi
LCAiJHJlZiI6ICJET00uTm9kZUlkIiB9LAotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImZvcmNlZFBzZXVkb0NsYXNzZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiwgImVudW0iOiBbImFjdGl2ZSIsICJmb2N1cyIsICJob3ZlciIsICJ2aXNpdGVk
Il0gfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkVsZW1lbnQgcHNldWRvIGNs
YXNzZXMgdG8gZm9yY2Ugd2hlbiBjb21wdXRpbmcgYXBwbGljYWJsZSBzdHlsZSBydWxlcy4iIH0K
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmb3JjZWRQc2V1ZG9DbGFzc2VzIiwgInR5
cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJhY3Rp
dmUiLCAiZm9jdXMiLCAiaG92ZXIiLCAidmlzaXRlZCJdIH0sICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJFbGVtZW50IHBzZXVkbyBjbGFzc2VzIHRvIGZvcmNlIHdoZW4gY29tcHV0
aW5nIGFwcGxpY2FibGUgc3R5bGUgcnVsZXMuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImluY2x1ZGVQc2V1ZG8iLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1
ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdG8gaW5jbHVkZSBwc2V1ZG8gc3R5bGVzIChkZWZh
dWx0OiB0cnVlKS4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW5jbHVkZUlu
aGVyaXRlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiV2hldGhlciB0byBpbmNsdWRlIGluaGVyaXRlZCBzdHlsZXMgKGRlZmF1bHQ6IHRydWUp
LiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgInJldHVybnMiOiBbCi0g
ICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3R5bGVzIiwgIiRyZWYiOiAiQ1NTTm9kZVN0
eWxlcyIsICJkZXNjcmlwdGlvbiI6ICJBbGwgc3R5bGVzIGZvciB0aGUgc3BlY2lmaWVkIERPTSBu
b2RlLiIgfQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1hdGNoZWRDU1NSdWxlcyIs
ICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJDU1NSdWxlIiB9LCAib3B0aW9u
YWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQ1NTIHJ1bGVzIG1hdGNoaW5nIHRoaXMgbm9kZSwg
ZnJvbSBhbGwgYXBwbGljYWJsZSBzdHlsZXNoZWV0cy4iIH0sCisgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicHNldWRvRWxlbWVudHMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
IiRyZWYiOiAiUHNldWRvSWRSdWxlcyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIlBzZXVkbyBzdHlsZSBydWxlcyBmb3IgdGhpcyBub2RlLiIgfSwKKyAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJpbmhlcml0ZWQiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
IiRyZWYiOiAiSW5oZXJpdGVkU3R5bGVFbnRyeSIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2Ny
aXB0aW9uIjogIkEgY2hhaW4gb2YgaW5oZXJpdGVkIHN0eWxlcyAoZnJvbSB0aGUgaW1tZWRpYXRl
IG5vZGUgcGFyZW50IHVwIHRvIHRoZSBET00gdHJlZSByb290KS4iIH0KICAgICAgICAgICAgICAg
ICBdLAotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1cm5zIGFsbCBzdHlsZXMg
Zm9yIGEgRE9NIG5vZGUgaWRlbnRpZmllZCBieSA8Y29kZT5ub2RlSWQ8L2NvZGU+LiIKKyAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyByZXF1ZXN0ZWQgc3R5bGVzIGZvciBh
IERPTSBub2RlIGlkZW50aWZpZWQgYnkgPGNvZGU+bm9kZUlkPC9jb2RlPi4iCiAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICJuYW1lIjogImdldENvbXB1dGVk
U3R5bGVGb3JOb2RlIiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJnZXRJbmxpbmVTdHlsZXNG
b3JOb2RlIiwKICAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJET00uTm9kZUlkIiB9CiAgICAgICAg
ICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzdHlsZSIsICIkcmVmIjogIkNTU1N0eWxlIiwgImRlc2NyaXB0aW9u
IjogIkNvbXB1dGVkIHN0eWxlIGZvciB0aGUgc3BlY2lmaWVkIERPTSBub2RlLiIgfQorICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImlubGluZVN0eWxlIiwgIiRyZWYiOiAiQ1NTU3R5bGUi
LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiSW5saW5lIHN0eWxlIGZvciB0aGUg
c3BlY2lmaWVkIERPTSBub2RlLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
dHlsZUF0dHJpYnV0ZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiQ1NT
U3R5bGVBdHRyaWJ1dGUiIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJFbnRy
aWVzIGZvciBzdHlsZS1yZWxhdGVkIGVsZW1lbnQgYXR0cmlidXRlcyAoZS5nLiB3aWR0aD0yMCku
In0KICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJS
ZXR1cm5zIHRoZSBjb21wdXRlZCBzdHlsZSBmb3IgYSBET00gbm9kZSBpZGVudGlmaWVkIGJ5IDxj
b2RlPm5vZGVJZDwvY29kZT4uIgorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1
cm5zIHRoZSBzdHlsZXMgZGVmaW5lZCBpbmxpbmUgKGV4cGxpY2l0bHkgaW4gdGhlIFwic3R5bGVc
IiBhdHRyaWJ1dGUgYW5kIGltcGxpY2l0bHksIHVzaW5nIERPTSBhdHRyaWJ1dGVzKSBmb3IgYSBE
T00gbm9kZSBpZGVudGlmaWVkIGJ5IDxjb2RlPm5vZGVJZDwvY29kZT4uIgogICAgICAgICAgICAg
fSwKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAibmFtZSI6ICJnZXRJbmxpbmVTdHls
ZUZvck5vZGUiLAorICAgICAgICAgICAgICAgICJuYW1lIjogImdldENvbXB1dGVkU3R5bGVGb3JO
b2RlIiwKICAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub2RlSWQiLCAiJHJlZiI6ICJET00uTm9kZUlkIiB9CisgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibm9kZUlkIiwgIiRyZWYiOiAiRE9NLk5vZGVJZCIgfSwKKyAg
ICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmb3JjZWRQc2V1ZG9DbGFzc2VzIiwgInR5cGUi
OiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJhY3RpdmUi
LCAiZm9jdXMiLCAiaG92ZXIiLCAidmlzaXRlZCJdIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNj
cmlwdGlvbiI6ICJFbGVtZW50IHBzZXVkbyBjbGFzc2VzIHRvIGZvcmNlIHdoZW4gY29tcHV0aW5n
IGFwcGxpY2FibGUgc3R5bGUgcnVsZXMuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHls
ZSIsICIkcmVmIjogIkNTU1N0eWxlIiwgImRlc2NyaXB0aW9uIjogIklubGluZSBzdHlsZSBmb3Ig
dGhlIHNwZWNpZmllZCBET00gbm9kZS4iIH0KKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzdHlsZSIsICIkcmVmIjogIkNTU0NvbXB1dGVkU3R5bGUiLCAiZGVzY3JpcHRpb24iOiAiQ29t
cHV0ZWQgc3R5bGUgZm9yIHRoZSBzcGVjaWZpZWQgRE9NIG5vZGUuIiB9CiAgICAgICAgICAgICAg
ICAgXSwKLSAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0dXJucyB0aGUgaW5saW5l
IHN0eWxlIChpZiBwcmVzZW50KSBmb3IgYSBET00gbm9kZSBpZGVudGlmaWVkIGJ5IDxjb2RlPm5v
ZGVJZDwvY29kZT4uIgorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1cm5zIHRo
ZSBjb21wdXRlZCBzdHlsZSBmb3IgYSBET00gbm9kZSBpZGVudGlmaWVkIGJ5IDxjb2RlPm5vZGVJ
ZDwvY29kZT4uIgogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAibmFtZSI6ICJnZXRBbGxTdHlsZVNoZWV0cyIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA4NWVmYjQxZTNlMDUzNGNkOTJiNTI2Mzgz
MmI5ZDE0NDE0OTJhMTM1Li5jNWY0NWEzOTIwODMwMTUyY2Y4OGFlNjMzOTMyNzI3OGRiZTNkZmVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAK
QEAgLTIzNyw2OSArMjM3LDcwIEBAIGJvb2wgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRv
U3RhdGUoRWxlbWVudCogZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5CiAgICAgfQogfQog
Ci12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZm9y
Y2VkUHNldWRvQ2xhc3NlcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKK3ZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnJlY2FsY1N0eWxlRm9yUHNldWRvU3RhdGVJZk5lZWRlZChFbGVt
ZW50KiBlbGVtZW50LCBJbnNwZWN0b3JBcnJheSogZm9yY2VkUHNldWRvQ2xhc3NlcykKIHsKLSAg
ICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwot
ICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLQotICAg
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVj
dG9yU3R5bGVTaGVldChlbGVtZW50KTsKLSAgICBpZiAoc3R5bGVTaGVldCkKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgc3R5bGVTaGVldC0+YnVpbGRPYmpl
Y3RGb3JTdHlsZShlbGVtZW50LT5zdHlsZSgpKSk7Ci0KLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlSW5mbyA9IGNvbXB1dGVkU3R5bGUoZWxlbWVu
dCwgdHJ1ZSk7IC8vIFN1cHBvcnQgdGhlIHZpZXdpbmcgb2YgOnZpc2l0ZWQgaW5mb3JtYXRpb24g
aW4gY29tcHV0ZWQgc3R5bGUuCi0gICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBjb21wdXRlZElu
c3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBj
b21wdXRlZFN0eWxlSW5mbywgMCk7Ci0gICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoImNvbXB1
dGVkU3R5bGUiLCBjb21wdXRlZEluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCkp
OwotCi0gICAgdW5zaWduZWQgZm9yY2VQc2V1ZG9TdGF0ZSA9IGNvbXB1dGVQc2V1ZG9DbGFzc01h
c2soZm9yY2VkUHNldWRvQ2xhc3NlcyA/IGZvcmNlZFBzZXVkb0NsYXNzZXMtPmdldCgpIDogMCk7
CisgICAgdW5zaWduZWQgZm9yY2VQc2V1ZG9TdGF0ZSA9IGNvbXB1dGVQc2V1ZG9DbGFzc01hc2so
Zm9yY2VkUHNldWRvQ2xhc3Nlcyk7CiAgICAgYm9vbCBuZWVkU3R5bGVSZWNhbGMgPSBlbGVtZW50
ICE9IG1fbGFzdEVsZW1lbnRXaXRoUHNldWRvU3RhdGUgfHwgZm9yY2VQc2V1ZG9TdGF0ZSAhPSBt
X2xhc3RQc2V1ZG9TdGF0ZTsKICAgICBtX2xhc3RQc2V1ZG9TdGF0ZSA9IGZvcmNlUHNldWRvU3Rh
dGU7CiAgICAgbV9sYXN0RWxlbWVudFdpdGhQc2V1ZG9TdGF0ZSA9IGVsZW1lbnQ7CiAgICAgaWYg
KG5lZWRTdHlsZVJlY2FsYykKICAgICAgICAgZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHls
ZVNlbGVjdG9yQ2hhbmdlZChSZWNhbGNTdHlsZUltbWVkaWF0ZWx5KTsKK30KKwogCit2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNl
ZFBzZXVkb0NsYXNzZXMsIGJvb2wqIG5lZWRQc2V1ZG8sIGJvb2wqIG5lZWRJbmhlcml0ZWQsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogcHNldWRvSWRSdWxlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogaW5oZXJpdGVkRW50
cmllcykKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5n
LCBub2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVj
YWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVkKGVsZW1lbnQsIGZvcmNlZFBzZXVkb0NsYXNz
ZXMgPyBmb3JjZWRQc2V1ZG9DbGFzc2VzLT5nZXQoKSA6IDApOworCisgICAgLy8gTWF0Y2hlZCBy
dWxlcy4KICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9j
dW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOwogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hl
ZFJ1bGVzID0gc2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIENTU1N0eWxl
U2VsZWN0b3I6OkFsbENTU1J1bGVzKTsKLSAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJtYXRj
aGVkQ1NTUnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLmdldCgpKSk7
Ci0KLSAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJzdHlsZUF0dHJpYnV0ZXMiLCBidWlsZEFy
cmF5Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1lbnQpKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHNldWRvRWxlbWVudHMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgZm9y
IChQc2V1ZG9JZCBwc2V1ZG9JZCA9IEZJUlNUX1BVQkxJQ19QU0VVRE9JRDsgcHNldWRvSWQgPCBB
RlRFUl9MQVNUX0lOVEVSTkFMX1BTRVVET0lEOyBwc2V1ZG9JZCA9IHN0YXRpY19jYXN0PFBzZXVk
b0lkPihwc2V1ZG9JZCArIDEpKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hl
ZFJ1bGVzID0gc2VsZWN0b3ItPnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIHBz
ZXVkb0lkLCBDU1NTdHlsZVNlbGVjdG9yOjpBbGxDU1NSdWxlcyk7Ci0gICAgICAgIGlmIChtYXRj
aGVkUnVsZXMgJiYgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkgewotICAgICAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcHNldWRvU3R5bGVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKLSAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHN0YXRp
Y19jYXN0PGludD4ocHNldWRvSWQpKTsKLSAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0QXJy
YXkoInJ1bGVzIiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSkpOwot
ICAgICAgICAgICAgcHNldWRvRWxlbWVudHMtPnB1c2hPYmplY3QocHNldWRvU3R5bGVzLnJlbGVh
c2UoKSk7CisgICAgKm1hdGNoZWRDU1NSdWxlcyA9IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChtYXRj
aGVkUnVsZXMuZ2V0KCkpOworCisgICAgLy8gUHNldWRvIGVsZW1lbnRzLgorICAgIGlmICghbmVl
ZFBzZXVkbyB8fCAqbmVlZFBzZXVkbykgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHBzZXVkb0VsZW1lbnRzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBmb3Ig
KFBzZXVkb0lkIHBzZXVkb0lkID0gRklSU1RfUFVCTElDX1BTRVVET0lEOyBwc2V1ZG9JZCA8IEFG
VEVSX0xBU1RfSU5URVJOQUxfUFNFVURPSUQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRv
SWQ+KHBzZXVkb0lkICsgMSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0
Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQs
IHBzZXVkb0lkLCBDU1NTdHlsZVNlbGVjdG9yOjpBbGxDU1NSdWxlcyk7CisgICAgICAgICAgICBp
ZiAobWF0Y2hlZFJ1bGVzICYmIG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwc2V1ZG9TdHlsZXMgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0TnVtYmVyKCJw
c2V1ZG9JZCIsIHN0YXRpY19jYXN0PGludD4ocHNldWRvSWQpKTsKKyAgICAgICAgICAgICAgICBw
c2V1ZG9TdHlsZXMtPnNldEFycmF5KCJydWxlcyIsIGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChtYXRj
aGVkUnVsZXMuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBwc2V1ZG9FbGVtZW50cy0+cHVzaE9i
amVjdChwc2V1ZG9TdHlsZXMucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQor
CisgICAgICAgICpwc2V1ZG9JZFJ1bGVzID0gcHNldWRvRWxlbWVudHMucmVsZWFzZSgpOwogICAg
IH0KLSAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJwc2V1ZG9FbGVtZW50cyIsIHBzZXVkb0Vs
ZW1lbnRzLnJlbGVhc2UoKSk7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluaGVyaXRl
ZFN0eWxlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBFbGVtZW50KiBwYXJlbnRF
bGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwotICAgIHdoaWxlIChwYXJlbnRFbGVt
ZW50KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPnN0eWxl
KCkgJiYgcGFyZW50RWxlbWVudC0+c3R5bGUoKS0+bGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9y
U3R5bGVTaGVldChwYXJlbnRFbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQot
ICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgc3R5
bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKEluc3Bl
Y3RvckNTU0lkKHN0eWxlU2hlZXQtPmlkKCksIDApKSkpOworCisgICAgLy8gSW5oZXJpdGVkIHN0
eWxlcy4KKyAgICBpZiAoIW5lZWRJbmhlcml0ZWQgfHwgKm5lZWRJbmhlcml0ZWQpIHsKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbmhlcml0ZWRTdHlsZXMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CisgICAgICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5w
YXJlbnRFbGVtZW50KCk7CisgICAgICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7CisgICAgICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHlsZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+c3R5bGUoKSAmJiBw
YXJlbnRFbGVtZW50LT5zdHlsZSgpLT5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5
bGVTaGVldChwYXJlbnRFbGVtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGVTaGVldCkK
KyAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldE9iamVjdCgiaW5saW5lU3R5bGUi
LCBzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQtPnN0eWxlRm9ySWQo
SW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldC0+aWQoKSwgMCkpKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIENTU1N0eWxlU2VsZWN0b3IqIHBhcmVudFNlbGVjdG9yID0gcGFyZW50RWxl
bWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAgICAgICAgICBSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IHBhcmVudE1hdGNoZWRSdWxlcyA9IHBhcmVudFNlbGVjdG9yLT5zdHls
ZVJ1bGVzRm9yRWxlbWVudChwYXJlbnRFbGVtZW50LCBDU1NTdHlsZVNlbGVjdG9yOjpBbGxDU1NS
dWxlcyk7CisgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxl
cyIsIGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGluaGVyaXRlZFN0eWxlcy0+cHVzaE9iamVjdChwYXJlbnRTdHlsZS5yZWxlYXNl
KCkpOworICAgICAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQtPnBhcmVudEVs
ZW1lbnQoKTsKICAgICAgICAgfQogCi0gICAgICAgIENTU1N0eWxlU2VsZWN0b3IqIHBhcmVudFNl
bGVjdG9yID0gcGFyZW50RWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7
Ci0gICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50
U2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIENTU1N0eWxlU2Vs
ZWN0b3I6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgcGFyZW50U3R5bGUtPnNldEFycmF5KCJtYXRj
aGVkQ1NTUnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVzLmdl
dCgpKSk7Ci0gICAgICAgIGluaGVyaXRlZFN0eWxlcy0+cHVzaE9iamVjdChwYXJlbnRTdHlsZS5y
ZWxlYXNlKCkpOwotICAgICAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+cGFyZW50
RWxlbWVudCgpOworICAgICAgICAqaW5oZXJpdGVkRW50cmllcyA9IGluaGVyaXRlZFN0eWxlcy5y
ZWxlYXNlKCk7CiAgICAgfQotICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImluaGVyaXRlZCIs
IGluaGVyaXRlZFN0eWxlcy5yZWxlYXNlKCkpOwotCi0gICAgKnJlc3VsdCA9IHJlc3VsdE9iamVj
dC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxl
Rm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KiBzdHlsZSkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0
eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiogaW5saW5lU3R5bGUsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGF0
dHJpYnV0ZXMpCiB7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0
cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCkBAIC0zMDksMTUgKzMxMCwxOCBAQCB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBpbnQgbm9kZQogICAgIGlmICghc3R5bGVTaGVldCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgKnN0eWxlID0gc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShlbGVt
ZW50LT5zdHlsZSgpKTsKKyAgICAqaW5saW5lU3R5bGUgPSBzdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCkpOworICAgICphdHRyaWJ1dGVzID0gYnVpbGRBcnJh
eUZvckF0dHJpYnV0ZVN0eWxlcyhlbGVtZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3R5bGUpCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0Ns
YXNzZXMsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBzdHlsZSkKIHsKICAgICBFbGVtZW50KiBl
bGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgcmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlm
TmVlZGVkKGVsZW1lbnQsIGZvcmNlZFBzZXVkb0NsYXNzZXMgPyBmb3JjZWRQc2V1ZG9DbGFzc2Vz
LT5nZXQoKSA6IDApOworCiAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4g
Y29tcHV0ZWRTdHlsZUluZm8gPSBjb21wdXRlZFN0eWxlKGVsZW1lbnQsIHRydWUpOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3Jl
YXRlKEluc3BlY3RvckNTU0lkKCksIGNvbXB1dGVkU3R5bGVJbmZvLCAwKTsKICAgICAqc3R5bGUg
PSBpbnNwZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHlsZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCA2Nzc5NWE5MTgxNWZmMjc4MDk2
NGVlYjBjOGM4YTRmMjkzYzIzYTQyLi42YzY3YWYwM2VlZWVhMGFmYTNjOTU4NGVjODNmOTEwMzA3
ZjkzMTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
aApAQCAtNjQsOSArNjQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckZyb250ZW5kKCk7CiAg
ICAgdm9pZCByZXNldCgpOwogCi0gICAgdm9pZCBnZXRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5n
KiwgaW50IG5vZGVJZCwgY29uc3QgUmVmUHRyPEluc3BlY3RvckFycmF5PiogZm9yY2VkUHNldWRv
Q2xhc3NlcywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRJ
bmxpbmVTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0Piogc3R5bGUpOwotICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJy
b3JTdHJpbmcqLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogc3R5bGUpOwor
ICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcqLCBpbnQgbm9kZUlk
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBmb3JjZWRQc2V1ZG9DbGFzc2VzLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0Piogc3R5bGUpOworICAgIHZvaWQgZ2V0SW5saW5lU3R5bGVzRm9y
Tm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBp
bmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogYXR0cmlidXRlcyk7CisgICAgdm9p
ZCBnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyosIGludCBub2RlSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGZvcmNlZFBzZXVkb0NsYXNzZXMsIGJvb2wqIGluY2x1
ZGVQc2V1ZG8sIGJvb2wqIGluY2x1ZGVJbmhlcml0ZWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4q
IG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcHNldWRvSWRSdWxlcywg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogaW5oZXJpdGVkRW50cmllcyk7CiAgICAgdm9pZCBnZXRB
bGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxl
U2hlZXRJbmZvcyk7CiAgICAgdm9pZCBnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQpOwog
ICAgIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpOwpAQCAtODUsNiArODUsNyBAQCBwcml2YXRlOgog
CiAgICAgc3RhdGljIEVsZW1lbnQqIGlubGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0
aW9uKik7CiAKKyAgICB2b2lkIHJlY2FsY1N0eWxlRm9yUHNldWRvU3RhdGVJZk5lZWRlZChFbGVt
ZW50KiwgSW5zcGVjdG9yQXJyYXkqIGZvcmNlZFBzZXVkb0NsYXNzZXMpOwogICAgIEluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogYXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW1lbnQq
IGVsZW1lbnQpOwogICAgIEVsZW1lbnQqIGVsZW1lbnRGb3JJZChFcnJvclN0cmluZyosIGludCBu
b2RlSWQpOwogICAgIHZvaWQgY29sbGVjdFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqLCBJbnNw
ZWN0b3JBcnJheSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9BdWRpdFJ1bGVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9B
dWRpdFJ1bGVzLmpzCmluZGV4IDAzNTA0MDU5YTg1MWQ2NmFiOGQwZTI4OWIzMGNjMjU5Y2FhNzdh
ODYuLjY5ZGIzMTQxOWI3YTYzNTZlOGExNzhlM2Q3NjYyYThjOTM0Y2EwMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMKQEAgLTY5MCw3
ICs2OTAsNyBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNhbGxiYWNrKGVudHJ5ID8gcmVzdWx0IDogbnVsbCk7
CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlvbiBpbWFnZVN0eWxlc1JlYWR5KGltYWdlSWQs
IGxhc3RDYWxsLCBzdHlsZXMpCisgICAgICAgIGZ1bmN0aW9uIGltYWdlU3R5bGVzUmVhZHkoaW1h
Z2VJZCwgc3R5bGVzLCBpc0xhc3RTdHlsZSwgY29tcHV0ZWRTdHlsZSkKICAgICAgICAgewogICAg
ICAgICAgICAgY29uc3Qgbm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQoaW1h
Z2VJZCk7CiAgICAgICAgICAgICB2YXIgc3JjID0gbm9kZS5nZXRBdHRyaWJ1dGUoInNyYyIpOwpA
QCAtNzA1LDkgKzcwNSw4IEBAIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkltYWdlRGltZW5zaW9u
c1J1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKGNvbXBsZXRlU3JjKQogICAgICAg
ICAgICAgICAgIHNyYyA9IGNvbXBsZXRlU3JjOwogCi0gICAgICAgICAgICBjb25zdCBjb21wdXRl
ZFN0eWxlID0gc3R5bGVzLmNvbXB1dGVkU3R5bGU7CiAgICAgICAgICAgICBpZiAoY29tcHV0ZWRT
dHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCJwb3NpdGlvbiIpID09PSAiYWJzb2x1dGUiKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGxhc3RDYWxsKQorICAgICAgICAgICAgICAgIGlmIChpc0xhc3RTdHls
ZSkKICAgICAgICAgICAgICAgICAgICAgZG9uZUNhbGxiYWNrKCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtNzM4LDE2ICs3MzcsMzQgQEAgV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICAgICAgICAgIHVybFRvTm9EaW1lbnNpb25Db3VudFtzcmNdID0gMTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgaWYgKGxhc3RDYWxsKQorICAgICAgICAgICAgaWYgKGlzTGFzdFN0eWxl
KQogICAgICAgICAgICAgICAgIGRvbmVDYWxsYmFjaygpOwogICAgICAgICB9CiAKICAgICAgICAg
ZnVuY3Rpb24gZ2V0U3R5bGVzKG5vZGVJZHMpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB0
YXJnZXRSZXN1bHQgPSB7fTsKKworICAgICAgICAgICAgZnVuY3Rpb24gaW5saW5lQ2FsbGJhY2so
aW5saW5lU3R5bGUsIHN0eWxlQXR0cmlidXRlcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB0YXJnZXRSZXN1bHQuaW5saW5lU3R5bGUgPSBpbmxpbmVTdHlsZTsKKyAgICAgICAgICAg
ICAgICB0YXJnZXRSZXN1bHQuc3R5bGVBdHRyaWJ1dGVzID0gc3R5bGVBdHRyaWJ1dGVzOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBtYXRjaGVkQ2FsbGJhY2socmVzdWx0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAg
ICAgICAgICAgIHRhcmdldFJlc3VsdC5tYXRjaGVkQ1NTUnVsZXMgPSByZXN1bHQubWF0Y2hlZENT
U1J1bGVzOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoIW5vZGVJZHMgfHwgIW5v
ZGVJZHMubGVuZ3RoKQogICAgICAgICAgICAgICAgIGRvbmVDYWxsYmFjaygpOwotICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IG5vZGVJZHMgJiYgaSA8IG5vZGVJZHMubGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldFN0eWxlc0FzeW5jKG5vZGVJ
ZHNbaV0sIHVuZGVmaW5lZCwgaW1hZ2VTdHlsZXNSZWFkeS5iaW5kKHRoaXMsIG5vZGVJZHNbaV0s
IGkgPT09IG5vZGVJZHMubGVuZ3RoIC0gMSkpOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgbm9kZUlkcyAmJiBpIDwgbm9kZUlkcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRNYXRjaGVkU3R5bGVzQXN5bmMobm9kZUlkc1tpXSwg
dW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIG1hdGNoZWRDYWxsYmFjayk7CisgICAgICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldElubGluZVN0eWxlc0FzeW5jKG5vZGVJZHNbaV0s
IGlubGluZUNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwu
Z2V0Q29tcHV0ZWRTdHlsZUFzeW5jKG5vZGVJZHNbaV0sIHVuZGVmaW5lZCwgaW1hZ2VTdHlsZXNS
ZWFkeS5iaW5kKG51bGwsIG5vZGVJZHNbaV0sIHRhcmdldFJlc3VsdCwgaSA9PT0gbm9kZUlkcy5s
ZW5ndGggLSAxKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlv
biBvbkRvY3VtZW50QXZhaWxhYmxlKHJvb3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKaW5kZXggNTg4NWQzZDQyZTMyMDg0MmY0
MzhjZDdmMDFiNzliYjIwMjc5YmI1OS4uOGUxYjIzNzg4N2NmYjViYTBlYzJkZmQ2MGI4YzA3ZDEx
YmVmN2I5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
U1NTdHlsZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q1NTU3R5bGVNb2RlbC5qcwpAQCAtNTMsMTYgKzUzLDIwIEBAIFdlYkluc3BlY3Rvci5DU1NTdHls
ZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAvKioKICAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5v
ZGVJZH0gbm9kZUlkCiAgICAgICogQHBhcmFtIHs/QXJyYXkuPHN0cmluZz58dW5kZWZpbmVkfSBm
b3JjZWRQc2V1ZG9DbGFzc2VzCisgICAgICogQHBhcmFtIHtib29sZWFufSBuZWVkUHNldWRvCisg
ICAgICogQHBhcmFtIHtib29sZWFufSBuZWVkSW5oZXJpdGVkCiAgICAgICogQHBhcmFtIHtmdW5j
dGlvbig/Kil9IHVzZXJDYWxsYmFjawogICAgICAqLwotICAgIGdldFN0eWxlc0FzeW5jOiBmdW5j
dGlvbihub2RlSWQsIGZvcmNlZFBzZXVkb0NsYXNzZXMsIHVzZXJDYWxsYmFjaykKKyAgICBnZXRN
YXRjaGVkU3R5bGVzQXN5bmM6IGZ1bmN0aW9uKG5vZGVJZCwgZm9yY2VkUHNldWRvQ2xhc3Nlcywg
bmVlZFBzZXVkbywgbmVlZEluaGVyaXRlZCwgdXNlckNhbGxiYWNrKQogICAgIHsKICAgICAgICAg
LyoqCiAgICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oPyopfSB1c2VyQ2FsbGJhY2sKICAgICAg
ICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7
P0NTU0FnZW50LkNTU05vZGVTdHlsZXN9IHBheWxvYWQKKyAgICAgICAgICogQHBhcmFtIHs/QXJy
YXkuPENTU0FnZW50LkNTU1J1bGU+fSBtYXRjaGVkUGF5bG9hZAorICAgICAgICAgKiBAcGFyYW0g
ez9BcnJheS48Q1NTQWdlbnQuUHNldWRvSWRSdWxlcz59IHBzZXVkb1BheWxvYWQKKyAgICAgICAg
ICogQHBhcmFtIHs/QXJyYXkuPENTU0FnZW50LkluaGVyaXRlZFN0eWxlRW50cnk+fSBpbmhlcml0
ZWRQYXlsb2FkCiAgICAgICAgICAqLwotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2Fs
bGJhY2ssIGVycm9yLCBwYXlsb2FkKQorICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2Fs
bGJhY2ssIGVycm9yLCBtYXRjaGVkUGF5bG9hZCwgcHNldWRvUGF5bG9hZCwgaW5oZXJpdGVkUGF5
bG9hZCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHVzZXJDYWxsYmFjaykKQEAgLTcxLDg1ICs3NSw4NSBAQCBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHZh
ciByZXN1bHQgPSB7fTsKLSAgICAgICAgICAgIGlmICgiaW5saW5lU3R5bGUiIGluIHBheWxvYWQp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmlubGluZVN0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0
eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHBheWxvYWQuaW5saW5lU3R5bGUpOwotCi0gICAg
ICAgICAgICByZXN1bHQuY29tcHV0ZWRTdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uLnBhcnNlUGF5bG9hZChwYXlsb2FkLmNvbXB1dGVkU3R5bGUpOwotICAgICAgICAgICAg
cmVzdWx0Lm1hdGNoZWRDU1NSdWxlcyA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnBhcnNl
UnVsZUFycmF5UGF5bG9hZChwYXlsb2FkLm1hdGNoZWRDU1NSdWxlcyk7Ci0KLSAgICAgICAgICAg
IHJlc3VsdC5zdHlsZUF0dHJpYnV0ZXMgPSB7fTsKLSAgICAgICAgICAgIHZhciBwYXlsb2FkU3R5
bGVBdHRyaWJ1dGVzID0gcGF5bG9hZC5zdHlsZUF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHBheWxvYWRTdHlsZUF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgbmFtZSA9IHBheWxvYWRTdHlsZUF0dHJpYnV0ZXNbaV0ubmFtZTsK
LSAgICAgICAgICAgICAgICByZXN1bHQuc3R5bGVBdHRyaWJ1dGVzW25hbWVdID0gV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHBheWxvYWRTdHlsZUF0dHJpYnV0
ZXNbaV0uc3R5bGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXN1bHQucHNldWRv
RWxlbWVudHMgPSBbXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF5bG9hZC5w
c2V1ZG9FbGVtZW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBlbnRyeVBh
eWxvYWQgPSBwYXlsb2FkLnBzZXVkb0VsZW1lbnRzW2ldOwotICAgICAgICAgICAgICAgIHJlc3Vs
dC5wc2V1ZG9FbGVtZW50cy5wdXNoKHsgcHNldWRvSWQ6IGVudHJ5UGF5bG9hZC5wc2V1ZG9JZCwg
cnVsZXM6IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnBhcnNlUnVsZUFycmF5UGF5bG9hZChl
bnRyeVBheWxvYWQucnVsZXMpIH0pOworICAgICAgICAgICAgaWYgKG1hdGNoZWRQYXlsb2FkKQor
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYXRjaGVkQ1NTUnVsZXMgPSBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVNb2RlbC5wYXJzZVJ1bGVBcnJheVBheWxvYWQobWF0Y2hlZFBheWxvYWQpOworCisgICAg
ICAgICAgICBpZiAocHNldWRvUGF5bG9hZCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5wc2V1
ZG9FbGVtZW50cyA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHNl
dWRvUGF5bG9hZC5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnlQ
YXlsb2FkID0gcHNldWRvUGF5bG9hZFtpXTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnBz
ZXVkb0VsZW1lbnRzLnB1c2goeyBwc2V1ZG9JZDogZW50cnlQYXlsb2FkLnBzZXVkb0lkLCBydWxl
czogV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucGFyc2VSdWxlQXJyYXlQYXlsb2FkKGVudHJ5
UGF5bG9hZC5ydWxlcykgfSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICByZXN1bHQuaW5oZXJpdGVkID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHBheWxvYWQuaW5oZXJpdGVkLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgdmFyIGVudHJ5UGF5bG9hZCA9IHBheWxvYWQuaW5oZXJpdGVkW2ldOwotICAgICAgICAgICAg
ICAgIHZhciBlbnRyeSA9IHt9OwotICAgICAgICAgICAgICAgIGlmICgiaW5saW5lU3R5bGUiIGlu
IGVudHJ5UGF5bG9hZCkKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuaW5saW5lU3R5bGUgPSBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQoZW50cnlQYXlsb2Fk
LmlubGluZVN0eWxlKTsKLSAgICAgICAgICAgICAgICBpZiAoIm1hdGNoZWRDU1NSdWxlcyIgaW4g
ZW50cnlQYXlsb2FkKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS5tYXRjaGVkQ1NTUnVsZXMg
PSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wYXJzZVJ1bGVBcnJheVBheWxvYWQoZW50cnlQ
YXlsb2FkLm1hdGNoZWRDU1NSdWxlcyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmluaGVyaXRl
ZC5wdXNoKGVudHJ5KTsKKyAgICAgICAgICAgIGlmIChpbmhlcml0ZWRQYXlsb2FkKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0LmluaGVyaXRlZCA9IFtdOworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgaW5oZXJpdGVkUGF5bG9hZC5sZW5ndGg7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgZW50cnlQYXlsb2FkID0gaW5oZXJpdGVkUGF5bG9hZFtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0ge307CisgICAgICAgICAgICAgICAgICAgIGlmIChl
bnRyeVBheWxvYWQuaW5saW5lU3R5bGUpCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5p
bmxpbmVTdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9h
ZChlbnRyeVBheWxvYWQuaW5saW5lU3R5bGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZW50
cnlQYXlsb2FkLm1hdGNoZWRDU1NSdWxlcykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5
Lm1hdGNoZWRDU1NSdWxlcyA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnBhcnNlUnVsZUFy
cmF5UGF5bG9hZChlbnRyeVBheWxvYWQubWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmluaGVyaXRlZC5wdXNoKGVudHJ5KTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh1c2VyQ2FsbGJhY2spCiAgICAgICAgICAg
ICAgICAgdXNlckNhbGxiYWNrKHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICBDU1NBZ2Vu
dC5nZXRTdHlsZXNGb3JOb2RlKG5vZGVJZCwgZm9yY2VkUHNldWRvQ2xhc3NlcyB8fCBbXSwgY2Fs
bGJhY2suYmluZChudWxsLCB1c2VyQ2FsbGJhY2spKTsKKyAgICAgICAgQ1NTQWdlbnQuZ2V0TWF0
Y2hlZFN0eWxlc0Zvck5vZGUobm9kZUlkLCBmb3JjZWRQc2V1ZG9DbGFzc2VzIHx8IFtdLCBuZWVk
UHNldWRvLCBuZWVkSW5oZXJpdGVkLCBjYWxsYmFjay5iaW5kKG51bGwsIHVzZXJDYWxsYmFjaykp
OwogICAgIH0sCiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge0RPTUFnZW50Lk5vZGVJZH0gbm9k
ZUlkCisgICAgICogQHBhcmFtIHs/QXJyYXkuPHN0cmluZz58dW5kZWZpbmVkfSBmb3JjZWRQc2V1
ZG9DbGFzc2VzCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2ViSW5zcGVjdG9yLkNTU1N0eWxl
RGVjbGFyYXRpb24pfSB1c2VyQ2FsbGJhY2sKICAgICAgKi8KLSAgICBnZXRDb21wdXRlZFN0eWxl
QXN5bmM6IGZ1bmN0aW9uKG5vZGVJZCwgdXNlckNhbGxiYWNrKQorICAgIGdldENvbXB1dGVkU3R5
bGVBc3luYzogZnVuY3Rpb24obm9kZUlkLCBmb3JjZWRQc2V1ZG9DbGFzc2VzLCB1c2VyQ2FsbGJh
Y2spCiAgICAgewogICAgICAgICAvKioKICAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pfSB1c2VyQ2FsbGJhY2sKLSAgICAgICAgICog
QHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAgICAqIEBwYXJhbSB7P0NTU0Fn
ZW50LkNTU1N0eWxlfSBzdHlsZVBheWxvYWQKICAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKHVzZXJDYWxsYmFjaywgZXJyb3IsIHN0eWxlUGF5bG9hZCkKKyAgICAgICAgZnVu
Y3Rpb24gY2FsbGJhY2sodXNlckNhbGxiYWNrLCBlcnJvciwgY29tcHV0ZWRQYXlsb2FkKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICBpZiAoZXJyb3IgfHwg
IWNvbXB1dGVkUGF5bG9hZCkKICAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2sobnVsbCk7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKFdlYkluc3BlY3Rv
ci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChzdHlsZVBheWxvYWQpKTsKKyAgICAg
ICAgICAgICAgICB1c2VyQ2FsbGJhY2soV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24u
cGFyc2VQYXlsb2FkKGNvbXB1dGVkUGF5bG9hZCkpOwogICAgICAgICB9CiAKLSAgICAgICAgQ1NT
QWdlbnQuZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUobm9kZUlkLCBjYWxsYmFjay5iaW5kKG51bGws
IHVzZXJDYWxsYmFjaykpOworICAgICAgICBDU1NBZ2VudC5nZXRDb21wdXRlZFN0eWxlRm9yTm9k
ZShub2RlSWQsIGZvcmNlZFBzZXVkb0NsYXNzZXMgfHwgW10sIGNhbGxiYWNrLmJpbmQobnVsbCwg
dXNlckNhbGxiYWNrKSk7CiAgICAgfSwKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7RE9NQWdl
bnQuTm9kZUlkfSBub2RlSWQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKD9XZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVEZWNsYXJhdGlvbil9IHVzZXJDYWxsYmFjaworICAgICAqIEBwYXJhbSB7ZnVuY3Rp
b24oP1dlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLCA/T2JqZWN0LjxzdHJpbmcsIHN0
cmluZz4pfSB1c2VyQ2FsbGJhY2sKICAgICAgKi8KLSAgICBnZXRJbmxpbmVTdHlsZUFzeW5jOiBm
dW5jdGlvbihub2RlSWQsIHVzZXJDYWxsYmFjaykKKyAgICBnZXRJbmxpbmVTdHlsZXNBc3luYzog
ZnVuY3Rpb24obm9kZUlkLCB1c2VyQ2FsbGJhY2spCiAgICAgewogICAgICAgICAvKioKLSAgICAg
ICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24p
fSB1c2VyQ2FsbGJhY2sKLSAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9y
Ci0gICAgICAgICAqIEBwYXJhbSB7P0NTU0FnZW50LkNTU1N0eWxlfSBzdHlsZVBheWxvYWQKKyAg
ICAgICAgICogQHBhcmFtIHtmdW5jdGlvbig/V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRp
b24sID9PYmplY3QuPHN0cmluZywgc3RyaW5nPil9IHVzZXJDYWxsYmFjawogICAgICAgICAgKi8K
LSAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sodXNlckNhbGxiYWNrLCBlcnJvciwgc3R5bGVQYXls
b2FkKQorICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIGVycm9yLCBpbmxp
bmVQYXlsb2FkLCBhdHRyaWJ1dGVzUGF5bG9hZCkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KGVycm9yKQotICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhudWxsKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyQ2FsbGJhY2soV2ViSW5zcGVjdG9yLkNTU1N0eWxl
RGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHN0eWxlUGF5bG9hZCkpOworICAgICAgICAgICAgaWYg
KGVycm9yIHx8ICFpbmxpbmVQYXlsb2FkKQorICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhu
dWxsLCBudWxsKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBzdHls
ZUF0dHJpYnV0ZXM7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNQYXlsb2FkKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0eWxlQXR0cmlidXRlcyA9IHt9OworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXNQYXlsb2FkLmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZXNQYXlsb2FkW2ld
Lm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUF0dHJpYnV0ZXNbbmFtZV0gPSBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQoYXR0cmlidXRlc1Bh
eWxvYWRbaV0uc3R5bGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvbi5wYXJzZVBheWxvYWQoaW5saW5lUGF5bG9hZCksIHN0eWxlQXR0cmlidXRlcyB8fCBu
dWxsKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIENTU0FnZW50LmdldElu
bGluZVN0eWxlRm9yTm9kZShub2RlSWQsIGNhbGxiYWNrLmJpbmQobnVsbCwgdXNlckNhbGxiYWNr
KSk7CisgICAgICAgIENTU0FnZW50LmdldElubGluZVN0eWxlc0Zvck5vZGUobm9kZUlkLCBjYWxs
YmFjay5iaW5kKG51bGwsIHVzZXJDYWxsYmFjaykpOwogICAgIH0sCiAKICAgICAvKioKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTWV0cmljc1NpZGViYXJQ
YW5lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNzU2lkZWJh
clBhbmUuanMKaW5kZXggZTFjNjRhN2IzNzU1YTNiNzBlYzM2NzNjMTMwZjY4MmNmNDgyZjJjNC4u
Zjg5ZmI2ZDU1NDk5M2FkMDhkYzE0YTg2YmU4MWNkMzdmMTgxNzdkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUu
anMKQEAgLTcxLDcgKzcxLDcgQEAgV2ViSW5zcGVjdG9yLk1ldHJpY3NTaWRlYmFyUGFuZS5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgdGhpcy5fdXBk
YXRlTWV0cmljcyhzdHlsZSk7CiAgICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01v
ZGVsLmdldENvbXB1dGVkU3R5bGVBc3luYyhub2RlLmlkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldENvbXB1dGVkU3R5bGVBc3luYyhub2Rl
LmlkLCBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzLnNpZGViYXJQYW5lcy5zdHlsZXMuZm9y
Y2VkUHNldWRvQ2xhc3NlcywgY2FsbGJhY2suYmluZCh0aGlzKSk7CiAKICAgICAgICAgZnVuY3Rp
b24gaW5saW5lU3R5bGVDYWxsYmFjayhzdHlsZSkKICAgICAgICAgewpAQCAtNzksNyArNzksNyBA
QCBXZWJJbnNwZWN0b3IuTWV0cmljc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB0aGlzLmlubGluZVN0eWxlID0gc3R5bGU7CiAg
ICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdldElubGluZVN0eWxlQXN5
bmMobm9kZS5pZCwgaW5saW5lU3R5bGVDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmNzc01vZGVsLmdldElubGluZVN0eWxlc0FzeW5jKG5vZGUuaWQsIGlubGluZVN0
eWxlQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIF9zdHlsZVNoZWV0Q2hhbmdl
ZDogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKaW5kZXggYzRmMGUwZGE5YWU4NzQzNTRkZjQ4MTMx
ZmEzNDZjNGMxMWYzYTU4Yy4uY2YxMTlhOGRiNjRjOWJhYjk4ZTQyNWZlZjQxMzliZmY2ODIzYWU2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNT
aWRlYmFyUGFuZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0
eWxlc1NpZGViYXJQYW5lLmpzCkBAIC0xOTUsNiArMTk1LDExIEBAIFdlYkluc3BlY3Rvci5TdHls
ZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjb250ZXh0TWVudS5zaG93
KGV2ZW50KTsKICAgICB9LAogCisgICAgZ2V0IGZvcmNlZFBzZXVkb0NsYXNzZXMoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcmNlZFBzZXVkb0NsYXNzZXM7CisgICAgfSwKKwogICAg
IHVwZGF0ZTogZnVuY3Rpb24obm9kZSwgZm9yY2VVcGRhdGUpCiAgICAgewogICAgICAgICB2YXIg
cmVmcmVzaCA9IGZhbHNlOwpAQCAtMjE5LDYgKzIyNCwzOCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVz
U2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9pbm5lclVwZGF0ZShyZWZy
ZXNoKTsKICAgICB9LAogCisgICAgX2V4ZWN1dGVSZWJ1aWxkVXBkYXRlOiBmdW5jdGlvbihub2Rl
LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciByZXN1bHRTdHlsZXMgPSB7fTsKKworICAg
ICAgICBmdW5jdGlvbiBzdHlsZXNDYWxsYmFjayhtYXRjaGVkUmVzdWx0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobWF0Y2hlZFJlc3VsdCkgeworICAgICAgICAgICAgICAgIHJlc3VsdFN0
eWxlcy5tYXRjaGVkQ1NTUnVsZXMgPSBtYXRjaGVkUmVzdWx0Lm1hdGNoZWRDU1NSdWxlczsKKyAg
ICAgICAgICAgICAgICByZXN1bHRTdHlsZXMucHNldWRvRWxlbWVudHMgPSBtYXRjaGVkUmVzdWx0
LnBzZXVkb0VsZW1lbnRzOworICAgICAgICAgICAgICAgIHJlc3VsdFN0eWxlcy5pbmhlcml0ZWQg
PSBtYXRjaGVkUmVzdWx0LmluaGVyaXRlZDsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZWJ1aWxk
VXBkYXRlKG5vZGUsIHJlc3VsdFN0eWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoY2FsbGJhY2spCisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGlubGluZUNhbGxiYWNrKGlubGluZVN0eWxlLCBzdHlsZUF0dHJpYnV0
ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdFN0eWxlcy5pbmxpbmVTdHlsZSA9IGlu
bGluZVN0eWxlOworICAgICAgICAgICAgcmVzdWx0U3R5bGVzLnN0eWxlQXR0cmlidXRlcyA9IHN0
eWxlQXR0cmlidXRlczsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVkQ2Fs
bGJhY2soY29tcHV0ZWRTdHlsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0U3R5bGVz
LmNvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlOworICAgICAgICB9CisKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmNzc01vZGVsLmdldENvbXB1dGVkU3R5bGVBc3luYyhub2RlLmlkLCB0aGlzLl9m
b3JjZWRQc2V1ZG9DbGFzc2VzLCBjb21wdXRlZENhbGxiYWNrLmJpbmQodGhpcykpOworICAgICAg
ICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuZ2V0SW5saW5lU3R5bGVzQXN5bmMobm9kZS5pZCwgaW5s
aW5lQ2FsbGJhY2suYmluZCh0aGlzKSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5n
ZXRNYXRjaGVkU3R5bGVzQXN5bmMobm9kZS5pZCwgdGhpcy5fZm9yY2VkUHNldWRvQ2xhc3Nlcywg
dHJ1ZSwgdHJ1ZSwgc3R5bGVzQ2FsbGJhY2suYmluZCh0aGlzKSk7CisgICAgfSwKKwogICAgIC8q
KgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb249fSBl
ZGl0ZWRTZWN0aW9uCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbigpPX0gdXNlckNhbGxiYWNrCkBA
IC0yMzUsMTQgKzI3Miw2IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBmdW5jdGlv
biBzdHlsZXNDYWxsYmFjayhzdHlsZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlz
Lm5vZGUgPT09IG5vZGUgJiYgc3R5bGVzKQotICAgICAgICAgICAgICAgIHRoaXMuX3JlYnVpbGRV
cGRhdGUobm9kZSwgc3R5bGVzKTsKLSAgICAgICAgICAgIGlmICh1c2VyQ2FsbGJhY2spCi0gICAg
ICAgICAgICAgICAgdXNlckNhbGxiYWNrKCk7Ci0gICAgICAgIH0KLQogICAgICAgICBmdW5jdGlv
biBjb21wdXRlZFN0eWxlQ2FsbGJhY2soY29tcHV0ZWRTdHlsZSkKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKHRoaXMubm9kZSA9PT0gbm9kZSAmJiBjb21wdXRlZFN0eWxlKQpAQCAtMjUyLDkg
KzI4MSw5IEBAIFdlYkluc3BlY3Rvci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAocmVmcmVzaCkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5jc3NNb2RlbC5nZXRDb21wdXRlZFN0eWxlQXN5bmMobm9kZS5pZCwgY29tcHV0ZWRTdHlsZUNh
bGxiYWNrLmJpbmQodGhpcykpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVsLmdl
dENvbXB1dGVkU3R5bGVBc3luYyhub2RlLmlkLCB0aGlzLl9mb3JjZWRQc2V1ZG9DbGFzc2VzLCBj
b21wdXRlZFN0eWxlQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRTdHlsZXNBc3luYyhub2RlLmlkLCB0aGlzLl9m
b3JjZWRQc2V1ZG9DbGFzc2VzLCBzdHlsZXNDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAg
ICAgIHRoaXMuX2V4ZWN1dGVSZWJ1aWxkVXBkYXRlKG5vZGUsIHVzZXJDYWxsYmFjayk7CiAgICAg
fSwKIAogICAgIF9zdHlsZVNoZWV0Q2hhbmdlZDogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDEzNWE5ZTQ5
NzllZTBlMDhmZjIwMGJhNGFjMDhiOTNiODYxOGUxNTEuLmYzODdkNmYzMDkyMzYzMzkzYjdiOWMz
MDYyYzI1OTY0ODBjYTgxNTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMS0xOCAgQWxl
eGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IFtQcm90b2NvbF0gUmV0YWluIGEgc2luZ2xlIHVuaXZlcnNhbCBtZXRob2QgZm9yIGxv
YWRpbmcgYSByZXF1aXJlZCBjb21iaW5hdGlvbiBvZiBlbGVtZW50IHN0eWxlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMv
Z2V0LXNldC1zdHlsZXNoZWV0LXRleHQuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVz
L3N0eWxlcy1mb3JtYXR0aW5nLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy9zdHls
ZXMtbmV3LUFQSS5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMvc3R5bGVzLXNvdXJj
ZS1vZmZzZXRzLmh0bWw6CisKIDIwMTEtMTEtMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDA4
NTYuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL2dldC1zZXQtc3R5
bGVzaGVldC10ZXh0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL2dldC1zZXQt
c3R5bGVzaGVldC10ZXh0Lmh0bWwKaW5kZXggZDYzZDc3NTExNTFmY2I5ZDI0NWYwYmExMjQ2ZDVj
M2RmYjY4Njg5ZC4uMjlkZTRlMzBiNjhkNTc0YTdlZjlkYzZmZDdmMDk0ZDRiYzhkNzUwZiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9nZXQtc2V0LXN0eWxlc2hlZXQt
dGV4dC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvZ2V0LXNldC1zdHls
ZXNoZWV0LXRleHQuaHRtbApAQCAtNTYsNyArNTYsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKIAogICAg
IGZ1bmN0aW9uIHRlc3ROZXdFbGVtZW50U3R5bGVzKCkKICAgICB7Ci0gICAgICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKGVycm9yLCBzdHlsZXMpCisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9y
LCBtYXRjaGVkQ1NTUnVsZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChlcnJvcikgewog
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJlcnJvcjogIiArIGVycm9y
KTsKQEAgLTY0LDEzICs2NCwxMyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIj09PSBNYXRjaGVkIHJ1bGVzIGZv
ciBoMSBhZnRlciBzZXRUZXh0KCkgPT09Iik7Ci0gICAgICAgICAgICBkdW1wUnVsZXNBcnJheShz
dHlsZXMubWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgICAgIGR1bXBSdWxlc0FycmF5KG1hdGNo
ZWRDU1NSdWxlcyk7CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOwog
ICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gbm9kZUNhbGxiYWNrKG5vZGUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIENTU0FnZW50LmdldFN0eWxlc0Zvck5vZGUobm9kZS5pZCwgdW5kZWZp
bmVkLCBjYWxsYmFjayk7CisgICAgICAgICAgICBDU1NBZ2VudC5nZXRNYXRjaGVkU3R5bGVzRm9y
Tm9kZShub2RlLmlkLCBbXSwgZmFsc2UsIGZhbHNlLCBjYWxsYmFjayk7CiAgICAgICAgIH0KIAog
ICAgICAgICBJbnNwZWN0b3JUZXN0LnNlbGVjdE5vZGVXaXRoSWQoImluc3BlY3RlZCIsIG5vZGVD
YWxsYmFjayk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxl
cy1mb3JtYXR0aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1m
b3JtYXR0aW5nLmh0bWwKaW5kZXggMmNhM2E4MWYyZWUzZWJmMmYyYWNiZDRiMmNlZWE5NjQxNjU3
MGZhOC4uYmE0NTU2YzBhZTFhZDdmNzA3NDU3Nzc3NGU1YjFjOTU0NDhhMmZjYSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtZm9ybWF0dGluZy5odG1sCisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLWZvcm1hdHRpbmcuaHRtbApA
QCAtMjYsNyArMjYsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKIAogICAgICAgICAgICAgZnVuY3Rpb24g
bm9kZUNhbGxiYWNrKG5vZGUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLmNzc01vZGVsLmdldFN0eWxlc0FzeW5jKG5vZGUuaWQsIHVuZGVmaW5lZCwgY2FsbGJh
Y2spOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRNYXRjaGVkU3R5
bGVzQXN5bmMobm9kZS5pZCwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIGNhbGxiYWNrKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VsZWN0Tm9kZVdpdGhJZCgi
Zm9ybWF0dGVkIiwgbm9kZUNhbGxiYWNrKTsKICAgICAgICAgfSwKQEAgLTEyMSw3ICsxMjEsNyBA
QCBmdW5jdGlvbiB0ZXN0KCkKIAogICAgICAgICAgICAgZnVuY3Rpb24gbm9kZUNhbGxiYWNrKG5v
ZGUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01vZGVs
LmdldFN0eWxlc0FzeW5jKG5vZGUuaWQsIHVuZGVmaW5lZCwgY2FsbGJhY2spOworICAgICAgICAg
ICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5nZXRNYXRjaGVkU3R5bGVzQXN5bmMobm9kZS5p
ZCwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIGNhbGxiYWNrKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VsZWN0Tm9kZVdpdGhJZCgidW5mb3JtYXR0ZWQiLCBu
b2RlQ2FsbGJhY2spOwogICAgICAgICB9LApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy9zdHlsZXMtbmV3LUFQSS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0
eWxlcy9zdHlsZXMtbmV3LUFQSS5odG1sCmluZGV4IGZmODgzNmIyMzk1ZjlkYjE5YTc0N2MxNWIz
NjAyMmFjNjg5NGU1ZmUuLmYwMWZlNDBhN2M5YWIxNmE4MDcyNWY4Y2M0Yjk4MjVmNmFhMWQyY2Yg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLW5ldy1BUEku
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1uZXctQVBJLmh0
bWwKQEAgLTE2LDEzICsxNiw4IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHZhciBib2R5SWQ7CiAg
ICAgZnVuY3Rpb24gdGVzdF9zdHlsZXMobm9kZSkKICAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNh
bGxiYWNrKGVycm9yLCBzdHlsZXMpCisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN0eWxlcykK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRSZXN1bHQoImVycm9yOiAiICsgZXJyb3IpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRS
ZXN1bHQoIiIpOwogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIj09PSBDb21w
dXRlZCBzdHlsZSBwcm9wZXJ0eSBjb3VudCBmb3IgYm9keSA9PT0iKTsKICAgICAgICAgICAgIHZh
ciBwcm9wQ291bnQgPSBzdHlsZXMuY29tcHV0ZWRTdHlsZS5jc3NQcm9wZXJ0aWVzLmxlbmd0aDsK
QEAgLTUzLDE3ICs0OCw1NSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgIHRlc3RfdGFi
bGVTdHlsZXMoKTsKICAgICAgICAgfQogCisgICAgICAgIHZhciByZXN1bHRTdHlsZXMgPSB7fTsK
KworICAgICAgICBmdW5jdGlvbiBjb21wdXRlZENhbGxiYWNrKGVycm9yLCBjb21wdXRlZFN0eWxl
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiZXJyb3I6ICIgKyBlcnJvcik7CisgICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHRTdHlsZXMuY29tcHV0ZWRTdHlsZSA9
IGNvbXB1dGVkU3R5bGU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBpbmxpbmVDYWxs
YmFjayhlcnJvciwgaW5saW5lU3R5bGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJv
cikgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJlcnJvcjogIiAr
IGVycm9yKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3Vs
dFN0eWxlcy5pbmxpbmVTdHlsZSA9IGlubGluZVN0eWxlOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gbWF0Y2hlZENhbGxiYWNrKGVycm9yLCBtYXRjaGVkQ1NTUnVsZXMsIHBzZXVkb0Vs
ZW1lbnRzLCBpbmhlcml0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikgewor
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJlcnJvcjogIiArIGVycm9y
KTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlVGVzdCgpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0U3R5
bGVzLm1hdGNoZWRDU1NSdWxlcyA9IG1hdGNoZWRDU1NSdWxlczsKKyAgICAgICAgICAgIHJlc3Vs
dFN0eWxlcy5wc2V1ZG9FbGVtZW50cyA9IHBzZXVkb0VsZW1lbnRzOworICAgICAgICAgICAgcmVz
dWx0U3R5bGVzLmluaGVyaXRlZCA9IGluaGVyaXRlZDsKKyAgICAgICAgICAgIGNhbGxiYWNrKHJl
c3VsdFN0eWxlcyk7CisgICAgICAgIH0KKwogICAgICAgICBmdW5jdGlvbiBub2RlQ2FsbGJhY2so
bm9kZSkKICAgICAgICAgewogICAgICAgICAgICAgYm9keUlkID0gbm9kZS5pZDsKLSAgICAgICAg
ICAgIENTU0FnZW50LmdldFN0eWxlc0Zvck5vZGUoYm9keUlkLCB1bmRlZmluZWQsIGNhbGxiYWNr
KTsKKyAgICAgICAgICAgIENTU0FnZW50LmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKG5vZGUuaWQs
IFtdLCBjb21wdXRlZENhbGxiYWNrKTsKKyAgICAgICAgICAgIENTU0FnZW50LmdldElubGluZVN0
eWxlc0Zvck5vZGUobm9kZS5pZCwgaW5saW5lQ2FsbGJhY2spOworICAgICAgICAgICAgQ1NTQWdl
bnQuZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUobm9kZS5pZCwgW10sIHRydWUsIHRydWUsIG1hdGNo
ZWRDYWxsYmFjayk7CiAgICAgICAgIH0KICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZWxlY3ROb2Rl
V2l0aElkKCJtYWluQm9keSIsIG5vZGVDYWxsYmFjayk7CiAgICAgfQogCiAgICAgZnVuY3Rpb24g
dGVzdF90YWJsZVN0eWxlcygpCiAgICAgewotICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJv
ciwgc3R5bGVzKQorICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJvciwgaW5saW5lU3R5bGUs
IHN0eWxlQXR0cmlidXRlcykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGVycm9yKSB7CiAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImVycm9yOiAiICsgZXJyb3Ip
OwpAQCAtNzEsNyArMTA0LDYgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiIik7CiAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdCgiPT09IEF0dHJpYnV0ZSBzdHlsZXMgZm9yIHRhYmxlID09PSIpOwot
ICAgICAgICAgICAgdmFyIHN0eWxlQXR0cmlidXRlcyA9IHN0eWxlcy5zdHlsZUF0dHJpYnV0ZXM7
CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlQXR0cmlidXRlcy5sZW5ndGg7
ICsraSkgewogICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJBdHRyaWJ1
dGU6ICIgKyBzdHlsZUF0dHJpYnV0ZXNbaV0ubmFtZSk7CiAgICAgICAgICAgICAgICAgZHVtcFJ1
bGVPclN0eWxlKHN0eWxlQXR0cmlidXRlc1tpXS5zdHlsZSk7CkBAIC04MSw3ICsxMTMsNyBAQCBm
dW5jdGlvbiB0ZXN0KCkKIAogICAgICAgICBmdW5jdGlvbiBub2RlQ2FsbGJhY2sobm9kZSkKICAg
ICAgICAgewotICAgICAgICAgICAgQ1NTQWdlbnQuZ2V0U3R5bGVzRm9yTm9kZShub2RlLmlkLCB1
bmRlZmluZWQsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIENTU0FnZW50LmdldElubGluZVN0eWxl
c0Zvck5vZGUobm9kZS5pZCwgY2FsbGJhY2spOwogICAgICAgICB9CiAgICAgICAgIEluc3BlY3Rv
clRlc3Qubm9kZVdpdGhJZCgidGhldGFibGUiLCBub2RlQ2FsbGJhY2spOwogICAgIH0KQEAgLTE1
OCw3ICsxOTAsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKIAogICAgIGZ1bmN0aW9uIHRlc3RfYWRkUnVs
ZSgpCiAgICAgewotICAgICAgICBmdW5jdGlvbiBkaWRHZXRTdHlsZXMoZXJyb3IsIHN0eWxlcykK
KyAgICAgICAgZnVuY3Rpb24gZGlkR2V0U3R5bGVzKGVycm9yLCBtYXRjaGVkQ1NTUnVsZXMpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYWRkUmVzdWx0KCJlcnJvcjogIiArIGVycm9yKTsKQEAgLTE2Niw3ICsxOTgsNyBA
QCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEluc3BlY3RvclRl
c3QuYWRkUmVzdWx0KCIiKTsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCI9
PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxlIGFkZGVkID09PSIpOwotICAgICAgICAgICAgZHVt
cFJ1bGVzQXJyYXkoc3R5bGVzLm1hdGNoZWRDU1NSdWxlcyk7CisgICAgICAgICAgICBkdW1wUnVs
ZXNBcnJheShtYXRjaGVkQ1NTUnVsZXMpOwogICAgICAgICAgICAgdGVzdF9kaXNhYmxlUHJvcGVy
dHkoKTsKICAgICAgICAgfQogCkBAIC0xNzYsNyArMjA4LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImVycm9yOiAiICsgZXJyb3Ip
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENT
U0FnZW50LmdldFN0eWxlc0Zvck5vZGUoYm9keUlkLCB1bmRlZmluZWQsIGRpZEdldFN0eWxlcyk7
CisgICAgICAgICAgICBDU1NBZ2VudC5nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShib2R5SWQsIFtd
LCBmYWxzZSwgZmFsc2UsIGRpZEdldFN0eWxlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5j
dGlvbiBydWxlQWRkZWQoZXJyb3IsIHJ1bGUpCkBAIC0yMDUsNyArMjM3LDcgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgICAgICAgICB0ZXN0X2VuYWJsZVByb3BlcnR5KHN0eWxlLnN0eWxlSWQpOwog
ICAgICAgICB9CiAKLSAgICAgICAgZnVuY3Rpb24gc3R5bGVzQ2FsbGJhY2soZXJyb3IsIHN0eWxl
cykKKyAgICAgICAgZnVuY3Rpb24gc3R5bGVzQ2FsbGJhY2soZXJyb3IsIG1hdGNoZWRDU1NSdWxl
cykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoImVycm9yOiAiICsgZXJyb3IpOwpAQCAtMjIwLDcgKzI1
Miw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgLy8gLW1vei1nb29nOiAxKioqOwog
ICAgICAgICAgICAgLy8gYm9yZGVyLXdpZHRoOiAwcHg7CiAKLSAgICAgICAgICAgIHZhciBzdHls
ZUlkID0gc3R5bGVzLm1hdGNoZWRDU1NSdWxlc1sxXS5zdHlsZS5zdHlsZUlkOworICAgICAgICAg
ICAgdmFyIHN0eWxlSWQgPSBtYXRjaGVkQ1NTUnVsZXNbMV0uc3R5bGUuc3R5bGVJZDsKICAgICAg
ICAgICAgIENTU0FnZW50LnRvZ2dsZVByb3BlcnR5KHN0eWxlSWQsIDAsIHRydWUpOyAvLyBoZWln
aHQ6IDEwMCUKICAgICAgICAgICAgIENTU0FnZW50LnRvZ2dsZVByb3BlcnR5KHN0eWxlSWQsIDcs
IHRydWUpOyAvLyBib3JkZXItd2lkdGg6IDBweAogICAgICAgICAgICAgQ1NTQWdlbnQuc2V0UHJv
cGVydHlUZXh0KHN0eWxlSWQsIDcsICJmb250LXNpemU6IDEycHg7IiwgZmFsc2UpOwpAQCAtMjQ0
LDcgKzI3Niw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogCiAgICAgICAgIGZ1bmN0aW9uIG5vZGVDYWxs
YmFjayhub2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JO
b2RlKG5vZGUuaWQsIHVuZGVmaW5lZCwgc3R5bGVzQ2FsbGJhY2spOworICAgICAgICAgICAgQ1NT
QWdlbnQuZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUobm9kZS5pZCwgW10sIGZhbHNlLCBmYWxzZSwg
c3R5bGVzQ2FsbGJhY2spOwogICAgICAgICB9CiAgICAgICAgIEluc3BlY3RvclRlc3Qubm9kZVdp
dGhJZCgidG9nZ2xlIiwgbm9kZUNhbGxiYWNrKTsKICAgICB9CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbAppbmRleCA5
MDAzODA5YzMwMjk5OTUwNGY4NTdhMWQxY2FkNDVkNTg5ODQzYjEyLi5mODE1NjkxNmY0MDdmODNm
OTUzYWM4Y2Y4MTk4ZWRjNzI4ZWVhZjg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3Ivc3R5bGVzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMvc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKQEAgLTM1LDIxICszNSw0
MiBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAKICAgICBJbnNwZWN0b3JUZXN0LnNlbGVjdE5vZGVX
aXRoSWQoIm1haW5Cb2R5Iiwgc3RlcDEpOwogCi0gICAgZnVuY3Rpb24gc3RlcDEobm9kZSkKKyAg
ICB2YXIgcmVzdWx0U3R5bGVzID0ge307CisKKyAgICBmdW5jdGlvbiBpbmxpbmVDYWxsYmFjayhl
cnJvciwgaW5saW5lU3R5bGUpCiAgICAgewotICAgICAgICBDU1NBZ2VudC5nZXRTdHlsZXNGb3JO
b2RlKG5vZGUuaWQsIHVuZGVmaW5lZCwgc3RlcDIpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiZXJyb3I6ICIgKyBlcnJvcik7Cisg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICByZXN1bHRTdHlsZXMuaW5saW5lU3R5bGUgPSBp
bmxpbmVTdHlsZTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBzdGVwMihlcnJvciwgc3R5bGVzKQor
ICAgIGZ1bmN0aW9uIG1hdGNoZWRDYWxsYmFjayhlcnJvciwgbWF0Y2hlZENTU1J1bGVzKQogICAg
IHsKLSAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1
bHQoImVycm9yOiAiICsgZXJyb3IpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHZhciBt
YXRjaGVkQ1NTUnVsZXMgPSBzdHlsZXMubWF0Y2hlZENTU1J1bGVzOwotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVkQ1NTUnVsZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgZHVtcFN0eWxlRGF0YShtYXRjaGVkQ1NTUnVsZXNbaV0pOwotICAgICAgICAgICAgZHVt
cFN0eWxlRGF0YShzdHlsZXMuaW5saW5lU3R5bGUpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiZXJyb3I6ICIgKyBlcnJvcik7Cisg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgcmVzdWx0U3R5bGVzLm1hdGNoZWRDU1NSdWxlcyA9
IG1hdGNoZWRDU1NSdWxlczsKKyAgICAgICAgc3RlcDIoKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBzdGVwMShub2RlKQorICAgIHsKKyAgICAgICAgQ1NTQWdlbnQuZ2V0SW5saW5lU3R5bGVzRm9y
Tm9kZShub2RlLmlkLCBpbmxpbmVDYWxsYmFjayk7CisgICAgICAgIENTU0FnZW50LmdldE1hdGNo
ZWRTdHlsZXNGb3JOb2RlKG5vZGUuaWQsIG1hdGNoZWRDYWxsYmFjayk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gc3RlcDIoKQorICAgIHsKKyAgICAgICAgdmFyIG1hdGNoZWRDU1NSdWxlcyA9IHJl
c3VsdFN0eWxlcy5tYXRjaGVkQ1NTUnVsZXM7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bWF0Y2hlZENTU1J1bGVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZHVtcFN0eWxlRGF0YSht
YXRjaGVkQ1NTUnVsZXNbaV0pOworICAgICAgICBkdW1wU3R5bGVEYXRhKHJlc3VsdFN0eWxlcy5p
bmxpbmVTdHlsZSk7CiAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7CiAgICAg
fQogfQo=
</data>
<flag name="review"
          id="115122"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>