<?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>38578</bug_id>
          
          <creation_ts>2010-05-05 05:21:45 -0700</creation_ts>
          <short_desc>Web Inspector: Implement differencing of original CSS vs. modified via Web Inspector</short_desc>
          <delta_ts>2010-12-01 04:23:10 -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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>38906</dependson>
    
    <dependson>39822</dependson>
    
    <dependson>39833</dependson>
    
    <dependson>50088</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>cruxst</cc>
    
    <cc>danny.bloemendaal</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>kim</cc>
    
    <cc>me</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>221063</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-05 05:21:45 -0700</bug_when>
    <thetext>Web developers wish to be able to see a version of their CSS files with style properties modified through the Styles sidebar pane.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247560</commentid>
    <comment_count>1</comment_count>
    <who name="Alexei Masterov">masterov</who>
    <bug_when>2010-07-07 08:08:02 -0700</bug_when>
    <thetext>*** Bug 16528 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247564</commentid>
    <comment_count>2</comment_count>
    <who name="Alexei Masterov">masterov</who>
    <bug_when>2010-07-07 08:17:14 -0700</bug_when>
    <thetext>*** Bug 31068 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256041</commentid>
    <comment_count>3</comment_count>
      <attachid>62573</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-07-26 07:53:52 -0700</bug_when>
    <thetext>Created attachment 62573
[PATCH] A preliminary implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256105</commentid>
    <comment_count>4</comment_count>
      <attachid>62573</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-07-26 10:51:55 -0700</bug_when>
    <thetext>Comment on attachment 62573
[PATCH] A preliminary implementation

Some minor comments. I didn&apos;t look too intently at the parsing this pass.

&gt; +++ b/LayoutTests/inspector/styles-edit-rewrite-expected.txt
&gt; +.foo {
&gt; +    color: green !important;
&gt; +    border: solid rgb(0, 255, 0);
&gt; +border-left-width: 3px !important;
&gt; +border-color: rgb(0, 255, 0);
&gt; +}

I would expect leading whitespace for these last two.


&gt; diff --git a/LayoutTests/inspector/styles-edit-rewrite.html b/LayoutTests/inspector/styles-edit-rewrite.html
&gt; +        if (resource.url.indexOf(&quot;styles-edit-rewrite.css&quot;) != -1) {

Use !== or === wherever possible. In this case, !== is appropriate.



&gt; +++ b/WebCore/inspector/front-end/CSSStyleModel.js
&gt; +    _updateStyles: function(styles)
&gt; +    {
&gt; +        if (styles.inlineStyle &amp;&amp; !this._idToOriginalStyle[styles.inlineStyle.id])
&gt; +            this._idToOriginalStyle[styles.inlineStyle.id] = WebInspector.CSSStyleDeclaration.parseStyle(styles.inlineStyle);
&gt; +
&gt; +        var cssRules = styles.matchedCSSRules;
&gt; +        for (var i = 0; i &lt; cssRules.length; ++i) {
&gt; +            var rule = cssRules[i];
&gt; +            if (rule.style.id &amp;&amp; !this._idToOriginalStyle[rule.style.id])
&gt; +                this._idToOriginalStyle[rule.style.id] = WebInspector.CSSStyleDeclaration.parseStyle(rule.style); // only for bound styles
&gt; +        }

Typically we use the `in` syntax here instead of checking if the
&quot;slot&quot; in the lookup table is undefined. We normally do:

  if (rule.style.id &amp;&amp; !(rule.style.id in this._idToOriginalStyle))

This way, if we ever want to store values like &quot;&quot;, 0, null, undefined,
false, etc it would still be possible to store and retrieve those
values. For example:

  var obj = { x:false };
  obj[&quot;x&quot;];    //=&gt; false
  &quot;x&quot; in obj;  //=&gt; true

I see you use this approach later on. Is there an advantage to not
using this approach here?




&gt; +WebInspector.CSSStyleModel.StyleSheetDelta.prototype = {
&gt; +    update: function(changedProperties, newStyle)
&gt; +    {
&gt; ...
&gt; +        var uniqueProperties = {};
&gt; +        for (var i = 0; i &lt; changedProperties.length; ++i) {
&gt; +            changedPropertiesSet[changedProperties[i]] = true;
&gt; +            uniqueProperties[changedProperties[i]] = true;
&gt; +        }
&gt; +        for (var i = 0; i &lt; newStyle.length; ++i)
&gt; +            uniqueProperties[newStyle[i]] = true;
&gt; +        for (var i = 0; i &lt; originalStyle.length; ++i)
&gt; +            uniqueProperties[originalStyle[i]] = true;
&gt; +        for (var i = 0; i &lt; changedProperties.length; ++i)
&gt; +            uniqueProperties[originalStyle[i]] = true;

I don&apos;t understand this loop here. I think it should be removed. I
think it should be covered by the top loop shown here.


&gt; +    getAssociatedShorthand: function(explicitLonghand)
&gt; +    {
&gt; +        if (explicitLonghand.charAt(0) === &quot;-&quot;)
&gt; +            return &quot;&quot;;
&gt; +        var lastDashIdx = explicitLonghand.lastIndexOf(&quot;-&quot;);
&gt; +        if (lastDashIdx &gt; 0)
&gt; +            return explicitLonghand.substring(0, lastDashIdx);
&gt; +        return &quot;&quot;;
&gt; +    },

We typically do not shorten / abbreviate variable names.
&quot;lastDashIdx&quot; =&gt; &quot;lastDashIndex&quot;.


&gt; +        if (propertyDelta.newValue === propertyDelta.oldValue &amp;&amp; propertyDelta.newPriority === propertyDelta.oldPriority &amp;&amp; !propertyDelta.disabled) {

Might be useful to make this a function.



&gt; +    patchRuleBody: function(originalBody, propertyDiffs, tokenizer)
&gt; +        var currentPropertyType = &quot;&quot;;
&gt; +        var whitespaceHandling = &quot;normal&quot;;

currentPropertyType gets three values: &quot;&quot;, deleted, changed
whitespaceHandling gets three values: normal, copy, and skip.

It might be worth changing these from strings to integer constants.
I don&apos;t know how optimized JavaScript is in these string comparison
cases, but having all caps constants would make this more readable to me.



&gt; +                                console.log(propertyName + &quot;:&quot; + propertyDiffs[propertyName].newValue + newPrioritySuffix(propertyDiffs[propertyName]));&apos;

Is this intended?



&gt; +    getPatchedStyleSheet: function(styleSheetDelta, originalData, tokenizer)
&gt; +    {
&gt; +        function sorter(leftEntry, rightEntry)
&gt; +        {
&gt; +            return leftEntry.originalStyle.bodyStartOffset &lt; rightEntry.originalStyle.bodyStartOffset;
&gt; +        }

In JavaScript, sort functions should return integer values. Typically
-1, 0, and 1. Booleans don&apos;t work so well, for example:

  js&gt; [4, 8, 1, 9].sort(function(a,b) { return a &lt; b; });
  [4, 8, 1, 9]

The common solution is to just change &quot;&lt;&quot; to &quot;-&quot;, like so:

  js&gt; [4, 8, 1, 9].sort(function(a,b) { return a - b; });
  [1, 4, 8, 9]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256149</commentid>
    <comment_count>5</comment_count>
    <who name="Danny Bloemendaal">danny.bloemendaal</who>
    <bug_when>2010-07-26 11:59:00 -0700</bug_when>
    <thetext>The whole point for this feature to me is that I can copy/paste whatever is changed into my CSS editor. So, please... DON&apos;T give me a diff with + and - characters in there. That would not help much. Just give me a summary of the CSS rules that I edited with all its styling. 

So, if I have this originally:

.myclass {
   left: 10;
   width: 5;
}

And I edit it in the browser and add this:

  height: 1px;

Then I want to see this in the diffing overview:

.myclass {
   left: 10;
   width: 5;
   heigt: px;
}

Perhaps you can use a different color for the added line but now I can just copy/paste this rule and replace my older version in one go.  No carefully figuring out what has changed, removing + characters etc. 

THAT would help me a lot.

Cheers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256234</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-07-26 14:25:59 -0700</bug_when>
    <thetext>&gt; 
&gt; THAT would help me a lot.

What you describe is the end goal. This change is just a single step in achieving it. Wait and see what we offer here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256467</commentid>
    <comment_count>7</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-07-27 02:33:03 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 62573 [details])
&gt; Some minor comments. I didn&apos;t look too intently at the parsing this pass.
&gt; 
&gt; &gt; +++ b/LayoutTests/inspector/styles-edit-rewrite-expected.txt
&gt; &gt; +.foo {
&gt; &gt; +    color: green !important;
&gt; &gt; +    border: solid rgb(0, 255, 0);
&gt; &gt; +border-left-width: 3px !important;
&gt; &gt; +border-color: rgb(0, 255, 0);
&gt; &gt; +}
&gt; 
&gt; I would expect leading whitespace for these last two.

This output is generated by the patching algorithm. It has no way to learn how many spaces to prefix user-added properties. Do you have a good way to fix this?

&gt; 
&gt; 
&gt; &gt; diff --git a/LayoutTests/inspector/styles-edit-rewrite.html b/LayoutTests/inspector/styles-edit-rewrite.html
&gt; &gt; +        if (resource.url.indexOf(&quot;styles-edit-rewrite.css&quot;) != -1) {
&gt; 
&gt; Use !== or === wherever possible. In this case, !== is appropriate.

Fixed.

&gt; 
&gt; &gt; +++ b/WebCore/inspector/front-end/CSSStyleModel.js
&gt; &gt; +    _updateStyles: function(styles)
&gt; &gt; +    {
&gt; &gt; +        if (styles.inlineStyle &amp;&amp; !this._idToOriginalStyle[styles.inlineStyle.id])
&gt; &gt; +            this._idToOriginalStyle[styles.inlineStyle.id] = WebInspector.CSSStyleDeclaration.parseStyle(styles.inlineStyle);
&gt; &gt; +
&gt; &gt; +        var cssRules = styles.matchedCSSRules;
&gt; &gt; +        for (var i = 0; i &lt; cssRules.length; ++i) {
&gt; &gt; +            var rule = cssRules[i];
&gt; &gt; +            if (rule.style.id &amp;&amp; !this._idToOriginalStyle[rule.style.id])
&gt; &gt; +                this._idToOriginalStyle[rule.style.id] = WebInspector.CSSStyleDeclaration.parseStyle(rule.style); // only for bound styles
&gt; &gt; +        }
&gt; 
&gt; Typically we use the `in` syntax here instead of checking if the
&gt; &quot;slot&quot; in the lookup table is undefined. We normally do:
&gt; 
&gt;   if (rule.style.id &amp;&amp; !(rule.style.id in this._idToOriginalStyle))
&gt; 
&gt; This way, if we ever want to store values like &quot;&quot;, 0, null, undefined,
&gt; false, etc it would still be possible to store and retrieve those
&gt; values. For example:
&gt; 
&gt;   var obj = { x:false };
&gt;   obj[&quot;x&quot;];    //=&gt; false
&gt;   &quot;x&quot; in obj;  //=&gt; true
&gt; 
&gt; I see you use this approach later on. Is there an advantage to not
&gt; using this approach here?

We explicitly use 0 as an invalid id. That&apos;s why I&apos;m using a simple ! without &quot;in&quot; here. Might as well use &quot;in&quot; for consistency.


&gt; &gt; +WebInspector.CSSStyleModel.StyleSheetDelta.prototype = {
&gt; &gt; +    update: function(changedProperties, newStyle)
&gt; &gt; +    {
&gt; &gt; ...
&gt; &gt; +        var uniqueProperties = {};
&gt; &gt; +        for (var i = 0; i &lt; changedProperties.length; ++i) {
&gt; &gt; +            changedPropertiesSet[changedProperties[i]] = true;
&gt; &gt; +            uniqueProperties[changedProperties[i]] = true;
&gt; &gt; +        }
&gt; &gt; +        for (var i = 0; i &lt; newStyle.length; ++i)
&gt; &gt; +            uniqueProperties[newStyle[i]] = true;
&gt; &gt; +        for (var i = 0; i &lt; originalStyle.length; ++i)
&gt; &gt; +            uniqueProperties[originalStyle[i]] = true;
&gt; &gt; +        for (var i = 0; i &lt; changedProperties.length; ++i)
&gt; &gt; +            uniqueProperties[originalStyle[i]] = true;
&gt; 
&gt; I don&apos;t understand this loop here. I think it should be removed. I
&gt; think it should be covered by the top loop shown here.

Ugh, you&apos;ve found a bug :)

&gt; 
&gt; &gt; +    getAssociatedShorthand: function(explicitLonghand)
&gt; &gt; +    {
&gt; &gt; +        if (explicitLonghand.charAt(0) === &quot;-&quot;)
&gt; &gt; +            return &quot;&quot;;
&gt; &gt; +        var lastDashIdx = explicitLonghand.lastIndexOf(&quot;-&quot;);
&gt; &gt; +        if (lastDashIdx &gt; 0)
&gt; &gt; +            return explicitLonghand.substring(0, lastDashIdx);
&gt; &gt; +        return &quot;&quot;;
&gt; &gt; +    },
&gt; 
&gt; We typically do not shorten / abbreviate variable names.
&gt; &quot;lastDashIdx&quot; =&gt; &quot;lastDashIndex&quot;.

Fixed

&gt; 
&gt; &gt; +        if (propertyDelta.newValue === propertyDelta.oldValue &amp;&amp; propertyDelta.newPriority === propertyDelta.oldPriority &amp;&amp; !propertyDelta.disabled) {
&gt; 
&gt; Might be useful to make this a function.

Done

&gt; &gt; +    patchRuleBody: function(originalBody, propertyDiffs, tokenizer)
&gt; &gt; +        var currentPropertyType = &quot;&quot;;
&gt; &gt; +        var whitespaceHandling = &quot;normal&quot;;
&gt; 
&gt; currentPropertyType gets three values: &quot;&quot;, deleted, changed
&gt; whitespaceHandling gets three values: normal, copy, and skip.
&gt; 
&gt; It might be worth changing these from strings to integer constants.
&gt; I don&apos;t know how optimized JavaScript is in these string comparison
&gt; cases, but having all caps constants would make this more readable to me.

Introduced local enums. Is there anything better we can use here?

&gt; &gt; +                                console.log(propertyName + &quot;:&quot; + propertyDiffs[propertyName].newValue + newPrioritySuffix(propertyDiffs[propertyName]));&apos;
&gt; 
&gt; Is this intended?

No, just logging. This is a preliminary non-r? patch for pfeldman@ to have a look. You appeared to be faster :)

&gt; &gt; +    getPatchedStyleSheet: function(styleSheetDelta, originalData, tokenizer)
&gt; &gt; +    {
&gt; &gt; +        function sorter(leftEntry, rightEntry)
&gt; &gt; +        {
&gt; &gt; +            return leftEntry.originalStyle.bodyStartOffset &lt; rightEntry.originalStyle.bodyStartOffset;
&gt; &gt; +        }
&gt; 
&gt; In JavaScript, sort functions should return integer values. Typically

Oops, thanks for catching this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256468</commentid>
    <comment_count>8</comment_count>
      <attachid>62663</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-07-27 02:34:34 -0700</bug_when>
    <thetext>Created attachment 62663
[PATCH] Preliminary implementation, comments fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257099</commentid>
    <comment_count>9</comment_count>
    <who name="Nikita Vasilyev">me</who>
    <bug_when>2010-07-28 04:18:34 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; The whole point for this feature to me is that I can copy/paste whatever is changed into my CSS editor.

The whole point, as I see it, to save changed CSS. I&apos;m curious, can we skip the copy/paste part? Can we just save changes (at least, in case of CSS file located in file://)?

Does Inspector have write access to local files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258916</commentid>
    <comment_count>10</comment_count>
      <attachid>63225</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-08-02 09:15:46 -0700</bug_when>
    <thetext>Created attachment 63225
[PATCH] Preliminary implementation, factored out EditedStyleSheet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258925</commentid>
    <comment_count>11</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-08-02 09:32:07 -0700</bug_when>
    <thetext>What is the UI for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258942</commentid>
    <comment_count>12</comment_count>
      <attachid>63226</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-08-02 10:06:02 -0700</bug_when>
    <thetext>Created attachment 63226
[IMAGE] Screenshot of original and patched external CSS stylesheet sources

To the right, the original and modified styles in the Styles sidebar pane are shown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261253</commentid>
    <comment_count>13</comment_count>
      <attachid>63722</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-08-06 07:50:30 -0700</bug_when>
    <thetext>Created attachment 63722
[PATCH] Introduced changes made by pfeldman offline</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261701</commentid>
    <comment_count>14</comment_count>
      <attachid>63722</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-08-07 03:34:47 -0700</bug_when>
    <thetext>Comment on attachment 63722
[PATCH] Introduced changes made by pfeldman offline

Review for CSSStyleSheetDelta.js

WebCore/inspector/front-end/CSSStyleSheetDelta.js:33
 +      this._idToStyleEntryMap = idToStyleEntryMap || {};
What is &quot;Entry&quot;? When do you need non-empty idToStyleEntryMap?

WebCore/inspector/front-end/CSSStyleSheetDelta.js:41
 +          result.styleEntryMap[id] = { originalStyle: WebInspector.CSSStyleDeclaration.parseStyle(payloadEntry.originalStylePayload), deltas: payloadEntry.deltas };
What is the structure of a payload? Where is it defined? Are there other entities involved with the &apos;deltas&apos;, etc.?

WebCore/inspector/front-end/CSSStyleSheetDelta.js:47
 +      get styleEntryMap()
There is no benefit in encapsulating the map and providing full access to it. Did you mean getEntryForId? What is this entry, again?

WebCore/inspector/front-end/CSSStyleSheetDelta.js:57
 +          var propertyDeltas = styleData.deltas;
So StyleSheetDelta contains a map of StyleDatas that contain property deltas? Lets come up with good names for the properties. What does styleData mean by the way? Is this CSSStyleDeclration or Payload or anything else? Is the structure for this &apos;data&apos; defined in any class?

WebCore/inspector/front-end/CSSStyleSheetDelta.js:58
 +          var originalStyle = styleData.originalStyle;
&quot;style&quot; is overloaded. Is this declaration? Or a payload?

WebCore/inspector/front-end/CSSStyleSheetDelta.js:82
 +          function setLonghandDeletedDelta(name, disabled)
Now that this code resides in its own class, you can define these as private prototype members.

WebCore/inspector/front-end/CSSStyleSheetDelta.js:151
 +      getAssociatedShorthand: function(explicitLonghand)
Describing what requires this heuristics would be a plus. Which ones do you need to distinguish? Maybe we can fix it in the native code and/or expose additional API.

WebCore/inspector/front-end/CSSStyleSheetDelta.js:164
 +      updateDelta: function(originalStyle, newStyle, propertyName, isShorthand, propertyDeltas)
should be private

WebCore/inspector/front-end/CSSStyleSheetDelta.js:184
 +      _isPropertyChanged: function(propertyDelta)
This should be defined on the property delta class.

WebCore/inspector/front-end/CSSStyleSheetDelta.js:202
 +      maskAbsent: function(value)
private?

WebCore/inspector/front-end/CSSStyleSheetDelta.js:218
 +          styleCopy.__proto__ = WebInspector.CSSStyleDeclaration.prototype;
no proto assignments please

WebCore/inspector/front-end/CSSStyleSheetDelta.js:207
 +      trackStyle: function(style)
What is this used for? Name is confusing.

WebCore/inspector/front-end/CSSStyleSheetDelta.js:222
 +      asPayload: function()
This should be defined next to parse. Maybe we should call them &apos;toPayload&apos; and &apos;fromPayload&apos; ?

WebCore/inspector/front-end/DOMAgent.js:661
 +              width: this.width,
Do you really need to serialize width and height? It used to be a hack for the metrics panel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296503</commentid>
    <comment_count>15</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-10-19 16:12:42 -0700</bug_when>
    <thetext>*** Bug 47908 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315596</commentid>
    <comment_count>16</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-01 04:23:10 -0800</bug_when>
    <thetext>Bug 50088 implements the highlighting of stylesheet revision diffs.
Bug 50107 implements the ability to activate (switch to) specific modified stylesheet revisions.
Any stylesheet revision text contents can be exported by dragging the respective resource tree node into any application that supports DnD of type &quot;text/plain&quot; (e.g., OpenOffice.org Writer).

Hence, closing this bug as FIXED.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62573</attachid>
            <date>2010-07-26 07:53:52 -0700</date>
            <delta_ts>2010-07-27 02:34:34 -0700</delta_ts>
            <desc>[PATCH] A preliminary implementation</desc>
            <filename>cssdiff_prelim.patch</filename>
            <type>text/plain</type>
            <size>38649</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0cy5qcyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0cy5qcwppbmRleCA0ZDcyNzdkLi44ZGY3
YjVlIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtdGVzdHMuanMK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXRlc3RzLmpzCkBAIC03MCwxMSAr
NzAsMTIgQEAgZnVuY3Rpb24gZnJvbnRlbmRfZ2V0U2VsZWN0ZWRFbGVtZW50U3R5bGVzKGV4Y2x1
ZGVDb21wdXRlZCwgZXhjbHVkZU1hdGNoZWQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZnVu
Y3Rpb24gZnJvbnRlbmRfZ2V0RWxlbWVudFN0eWxlUHJvcGVydHlUcmVlSXRlbShwcm9wZXJ0eU5h
bWUpCitmdW5jdGlvbiBmcm9udGVuZF9nZXRFbGVtZW50U3R5bGVQcm9wZXJ0eVRyZWVJdGVtKHBy
b3BlcnR5TmFtZSwgc2VjdGlvbikKIHsKKyAgICBzZWN0aW9uID0gc2VjdGlvbiA9PT0gdW5kZWZp
bmVkID8gMSA6IHNlY3Rpb247CiAgICAgdmFyIHN0eWxlU2VjdGlvbnMgPSBXZWJJbnNwZWN0b3Iu
cGFuZWxzLmVsZW1lbnRzLnNpZGViYXJQYW5lcy5zdHlsZXMuc2VjdGlvbnNbMF07Ci0gICAgdmFy
IGVsZW1lbnRTdHlsZVNlY3Rpb24gPSBzdHlsZVNlY3Rpb25zWzFdOwotICAgIHZhciBvdXRsaW5l
ID0gZWxlbWVudFN0eWxlU2VjdGlvbi5wcm9wZXJ0aWVzVHJlZU91dGxpbmU7CisgICAgdmFyIHJl
cXVpcmVkU2VjdGlvbiA9IHN0eWxlU2VjdGlvbnNbc2VjdGlvbl07CisgICAgdmFyIG91dGxpbmUg
PSByZXF1aXJlZFNlY3Rpb24ucHJvcGVydGllc1RyZWVPdXRsaW5lOwogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgb3V0bGluZS5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgdHJl
ZUl0ZW0gPSBvdXRsaW5lLmNoaWxkcmVuW2ldOwogICAgICAgICBpZiAodHJlZUl0ZW0ubmFtZSA9
PT0gcHJvcGVydHlOYW1lKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291
cmNlcy9zdHlsZXMtZWRpdC1yZXdyaXRlLmNzcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNv
dXJjZXMvc3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uYWZjOWQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9yZXNvdXJjZXMvc3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MKQEAgLTAsMCArMSwxMiBAQAorZGl2
IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKKy5mb28geworICAgIGNvbG9yOiBibGFjazsK
KyAgICBtYXJnaW46IDEwcHggMCAycHg7Cit9CisKKy5mb28sIC5mb286OmJlZm9yZSB7CisgICAg
Y29sb3I6IGJsdWU7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWVkaXQtcmV3cml0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWVkaXQtcmV3cml0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDYyNWFiMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9z
dHlsZXMtZWRpdC1yZXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMzIEBACitUZXN0cyB0
aGF0IHN0eWxlIGVkaXRpbmcgcHJvcGVybHkgdXBkYXRlcyBDU1Mgc291cmNlLgorCitCZWZvcmUg
Y2hhbmdlOgorZGl2IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKKy5mb28geworICAgIGNv
bG9yOiBibGFjazsKKyAgICBtYXJnaW46IDEwcHggMCAycHg7Cit9CisKKy5mb28sIC5mb286OmJl
Zm9yZSB7CisgICAgY29sb3I6IGJsdWU7Cit9CisKK0FmdGVyIGNoYW5nZToKK2RpdiB7CisgICAg
LyogZm9udC1zaXplOiAxMnB4OyAqLworfQorCisuZm9vIHsKKyAgICBjb2xvcjogZ3JlZW4gIWlt
cG9ydGFudDsKKyAgICBib3JkZXI6IHNvbGlkIHJnYigwLCAyNTUsIDApOworYm9yZGVyLWxlZnQt
d2lkdGg6IDNweCAhaW1wb3J0YW50OworYm9yZGVyLWNvbG9yOiByZ2IoMCwgMjU1LCAwKTsKK30K
KworLmZvbywgLmZvbzo6YmVmb3JlIHsKKyAgICBjb2xvcjogYmx1ZTsKK30KKworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLWVkaXQtcmV3cml0ZS5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1lZGl0LXJld3JpdGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmJlNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1lZGl0LXJld3JpdGUuaHRtbApAQCAtMCwwICsxLDE0MiBA
QAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2Vz
L3N0eWxlcy1lZGl0LXJld3JpdGUuY3NzIiAvPgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVt
ZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sK
KyAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCisgICAgeworICAgICAgICBpZiAocmVzdWx0
ID09PSAicmVmcmVzaGluZyIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGR1bXBBcnJh
eShyZXN1bHQpOworICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IoImZyb250ZW5kX3J1blRlc3QiLCBjYWxsYmFjayk7Cit9CisKKy8vIEZyb250
ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxl
cikKK3sKKyAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNlVHJh
Y2tpbmdFbmFibGVkKSB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZW5hYmxlUmVzb3VyY2VU
cmFja2luZyhmYWxzZSk7CisgICAgICAgIHJldHVybiAicmVmcmVzaGluZyI7CisgICAgfQorICAg
IHRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBmcm9udGVuZF9leHBhbmRET01T
dWJ0cmVlQW5kUnVuKHRlc3RDb250cm9sbGVyLCBudWxsLCBmcm9udGVuZF9zZWxlY3RGb29FbGVt
ZW50KTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfc2VsZWN0Rm9vRWxlbWVudCh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICBmcm9udGVuZF9zZWxlY3RFbGVtZW50QW5kUnVuKHRlc3RDb250cm9sbGVy
LCAiZm9vIiwgZnJvbnRlbmRfZHVtcEZvb1N0eWxlKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRf
ZHVtcEZvb1N0eWxlKHRlc3RDb250cm9sbGVyKQoreworICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaCgiQmVmb3JlIGNoYW5nZToiKTsKKyAgICBmcm9udGVuZF9kdW1wQ1NTVGV4dCh0ZXN0
Q29udHJvbGxlciwgZmFsc2UsIGZyb250ZW5kX2FsdGVyRm9vU3R5bGVzLmJpbmQodGhpcywgdGVz
dENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfYWx0ZXJGb29TdHlsZXModGVz
dENvbnRyb2xsZXIpCit7CisgICAgZnJvbnRlbmRfdG9nZ2xlUHJvcGVydHkoNCwgImZvbnQtc2l6
ZSIsIGZhbHNlKTsKKyAgICBmcm9udGVuZF9hcHBseVN0eWxlVGV4dCgzLCAiY29sb3IiLCAiY29s
b3I6IGdyZWVuICFpbXBvcnRhbnQiKTsKKyAgICBmcm9udGVuZF9hcHBseVN0eWxlVGV4dCgzLCAi
bWFyZ2luIiwgImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIik7CisgICAgZnJvbnRlbmRfYWRkUHJv
cGVydHkoMywgImJvcmRlci1sZWZ0LXdpZHRoOiAzcHggIWltcG9ydGFudCIpOworICAgIGZyb250
ZW5kX2FkZFByb3BlcnR5KDMsICJib3JkZXItY29sb3I6ICMwMEZGMDAiKTsKKyAgICB0ZXN0Q29u
dHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZyb250ZW5kX2R1bXBSZXN1bHRzLmJp
bmQodGhpcywgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfYXBwbHlT
dHlsZVRleHQoc2VjdGlvbk9yZGluYWwsIHByb3BlcnR5TmFtZSwgdGV4dCkKK3sKKyAgICB2YXIg
dHJlZUl0ZW0gPSBmcm9udGVuZF9nZXRFbGVtZW50U3R5bGVQcm9wZXJ0eVRyZWVJdGVtKHByb3Bl
cnR5TmFtZSwgc2VjdGlvbk9yZGluYWwpOworICAgIHRyZWVJdGVtLmFwcGx5U3R5bGVUZXh0KHRl
eHQpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF90b2dnbGVQcm9wZXJ0eShzZWN0aW9uT3JkaW5h
bCwgcHJvcGVydHlOYW1lLCBlbmFibGVkKQoreworICAgIHZhciB0cmVlSXRlbSA9IGZyb250ZW5k
X2dldEVsZW1lbnRTdHlsZVByb3BlcnR5VHJlZUl0ZW0ocHJvcGVydHlOYW1lLCBzZWN0aW9uT3Jk
aW5hbCk7CisgICAgdHJlZUl0ZW0udG9nZ2xlRW5hYmxlZCh7IHRhcmdldDogeyBjaGVja2VkOiBl
bmFibGVkIH0gfSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2FkZFByb3BlcnR5KHNlY3Rpb25P
cmRpbmFsLCBwcm9wZXJ0eVRleHQpCit7CisgICAgdmFyIHN0eWxlU2VjdGlvbiA9IFdlYkluc3Bl
Y3Rvci5wYW5lbHMuZWxlbWVudHMuc2lkZWJhclBhbmVzLnN0eWxlcy5zZWN0aW9uc1swXVtzZWN0
aW9uT3JkaW5hbF07CisgICAgdHJlZUl0ZW0gPSBzdHlsZVNlY3Rpb24uYWRkTmV3QmxhbmtQcm9w
ZXJ0eSgpOworICAgIHRyZWVJdGVtLnN0YXJ0RWRpdGluZygpOworICAgIHRyZWVJdGVtLmxpc3RJ
dGVtRWxlbWVudC50ZXh0Q29udGVudCA9IHByb3BlcnR5VGV4dDsKKyAgICB0cmVlSXRlbS5saXN0
SXRlbUVsZW1lbnQuZGlzcGF0Y2hFdmVudChmcm9udGVuZF9rZXlkb3duRXZlbnQoIkVudGVyIikp
OworfQorCitmdW5jdGlvbiBmcm9udGVuZF9rZXlkb3duRXZlbnQoa2V5SWRlbnRpZmllcikKK3sK
KyAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIktleWJvYXJkRXZlbnQiKTsKKyAg
ICBldnQuaW5pdEtleWJvYXJkRXZlbnQoImtleWRvd24iLCB0cnVlIC8qIGNhbiBidWJibGUgKi8s
IHRydWUgLyogY2FuIGNhbmNlbCAqLywgbnVsbCAvKiB2aWV3ICovLCBrZXlJZGVudGlmaWVyLCAi
Iik7CisgICAgcmV0dXJuIGV2dDsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfZHVtcENTU1RleHQo
dGVzdENvbnRyb2xsZXIsIG1vZGlmaWVkLCBjb250aW51YXRpb24pCit7CisgICAgdmFyIHJlc291
cmNlc1BhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXM7CisgICAgdmFyIGZvdW5k
OworICAgIGZvciAodmFyIGlkIGluIFdlYkluc3BlY3Rvci5yZXNvdXJjZXMpIHsKKyAgICAgICAg
dmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlc1tpZF07CisgICAgICAgIGlmIChy
ZXNvdXJjZS51cmwuaW5kZXhPZigic3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MiKSAhPSAtMSkgewor
ICAgICAgICAgICAgcmVzb3VyY2VzUGFuZWwuc2hvd1Jlc291cmNlKHJlc291cmNlKTsKKyAgICAg
ICAgICAgIHZhciB2aWV3ID0gcmVzb3VyY2VzUGFuZWwucmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2Uo
cmVzb3VyY2UpOworICAgICAgICAgICAgaWYgKG1vZGlmaWVkKSB7CisgICAgICAgICAgICAgICAg
dmlldy5zZWxlY3RMb2NhbENvbnRlbnRUYWIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZpZXcu
bG9jYWxTb3VyY2VGcmFtZSkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5y
ZXN1bHRzLnB1c2goIk5PIExPQ0FMIENPTlRFTlQgVEFCIEZPVU5EIik7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgbW9k
ZWwgPSB2aWV3LmxvY2FsU291cmNlRnJhbWUudGV4dE1vZGVsOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB2aWV3LnNlbGVjdENvbnRlbnRUYWIoKTsKKyAgICAgICAgICAg
ICAgICB2YXIgbW9kZWwgPSB2aWV3LnNvdXJjZUZyYW1lLnRleHRNb2RlbDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RlbC5s
aW5lc0NvdW50OyArK2kpCisgICAgICAgICAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaChtb2RlbC5saW5lKGkpKTsKKyAgICAgICAgICAgICAgICBjb250aW51YXRpb24oKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgY29udGlu
dWF0aW9uKCk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBSZXN1bHRzKHRlc3RDb250cm9s
bGVyKQoreworICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiQWZ0ZXIgY2hhbmdlOiIp
OworICAgIGZyb250ZW5kX2R1bXBDU1NUZXh0KHRlc3RDb250cm9sbGVyLCB0cnVlLCBmcm9udGVu
ZF9kaXNhYmxlUmVzb3VyY2VUcmFja2luZy5iaW5kKHRoaXMsIHRlc3RDb250cm9sbGVyKSk7Cit9
CisKK2Z1bmN0aW9uIGZyb250ZW5kX2Rpc2FibGVSZXNvdXJjZVRyYWNraW5nKHRlc3RDb250cm9s
bGVyKQoreworICAgIEluc3BlY3RvckJhY2tlbmQuZGlzYWJsZVJlc291cmNlVHJhY2tpbmcoZmFs
c2UpOworCisgICAgdGVzdENvbnRyb2xsZXIucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmdW5j
dGlvbigpIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSh3aW5kb3cuX19yZXN1
bHQpOworICAgIH0pOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJv
bmxvYWQoKSI+Cis8cD4KK1Rlc3RzIHRoYXQgc3R5bGUgZWRpdGluZyBwcm9wZXJseSB1cGRhdGVz
IENTUyBzb3VyY2UuCis8L3A+CisKKzxkaXYgaWQ9ImNvbnRhaW5lciIgc3R5bGU9ImZvbnQtd2Vp
Z2h0OmJvbGQiPgorICAgIDxkaXYgY2xhc3M9ImZvbyIgaWQ9ImZvbyI+PC9kaXY+Cis8L2Rpdj4K
KworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CmluZGV4IDE3NmRkMTEuLjc2MDE1OWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVk
ZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUg
IlNjcmlwdEFycmF5LmgiCiAjaW5jbHVkZSAiU2NyaXB0QnJlYWtwb2ludC5oIgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDNhMTQ4MzAuLjBlYWQ3ZjMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTEwODAsMTAgKzEwODAsNiBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRSdWxlUmFuZ2VzKGxvbmcgY2FsbElkLCBsb25n
IHN0eWxlU2hlZXRJZCkKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY3NzU3RvcmUo
KS0+c3R5bGVTaGVldEZvcklkKHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKHN0eWxlU2hlZXQgJiYg
c3R5bGVTaGVldC0+ZG9jKCkpIHsKICAgICAgICAgSGFzaE1hcDxsb25nLCBTb3VyY2VSYW5nZT4g
cnVsZVJhbmdlcyA9IGNzc1N0b3JlKCktPmdldFJ1bGVSYW5nZXMoc3R5bGVTaGVldCk7Ci0gICAg
ICAgIGlmICghcnVsZVJhbmdlcy5zaXplKCkpIHsKLSAgICAgICAgICAgIG1fZnJvbnRlbmQtPmRp
ZEdldFN0eWxlU2hlZXQoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKEhhc2hN
YXA8bG9uZywgU291cmNlUmFuZ2U+OjppdGVyYXRvciBpdCA9IHJ1bGVSYW5nZXMuYmVnaW4oKTsg
aXQgIT0gcnVsZVJhbmdlcy5lbmQoKTsgKytpdCkgewogICAgICAgICAgICAgaWYgKGl0LT5zZWNv
bmQuc2Vjb25kKSB7CkBAIC0xMTg2LDEyICsxMTgyLDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmFwcGx5U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmlu
ZyYKICAgICBpZiAoZGlzYWJsZWRTdHlsZSkKICAgICAgICAgZGlzYWJsZWRTdHlsZS0+cmVtb3Zl
KHByb3BlcnR5TmFtZSk7CiAKLSAgICBpbnQgc3R5bGVUZXh0TGVuZ3RoID0gc3R5bGVUZXh0Lmxl
bmd0aCgpOwotCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0ZW1wTXV0
YWJsZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwogICAgIHRl
bXBNdXRhYmxlU3R5bGUtPnBhcnNlRGVjbGFyYXRpb24oc3R5bGVUZXh0KTsKICAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKiB0ZW1wU3R5bGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZURlY2xhcmF0aW9u
Kj4odGVtcE11dGFibGVTdHlsZS5nZXQoKSk7CiAKKyAgICBpbnQgc3R5bGVUZXh0TGVuZ3RoID0g
c3R5bGVUZXh0Lmxlbmd0aCgpOworICAgIFZlY3RvcjxTdHJpbmc+IGNoYW5nZWRQcm9wZXJ0aWVz
OwogICAgIGlmICh0ZW1wU3R5bGUtPmxlbmd0aCgpIHx8ICFzdHlsZVRleHRMZW5ndGgpIHsKICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIC8vIFRoZSBpbnB1dCB3YXMgcGFy
c2FibGUgb3IgdGhlIHVzZXIgZGVsZXRlZCBldmVyeXRoaW5nLCBzbyByZW1vdmUgdGhlCkBAIC0x
MTk5LDM2ICsxMTk1LDM3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFwcGx5U3R5bGVUZXh0
KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYKICAgICAgICAgLy8gYSBz
aG9ydGhhbmQgcmVtb3ZlIGFsbCB0aGUgbG9uZ2hhbmQgcHJvcGVydGllcy4KICAgICAgICAgaWYg
KHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChwcm9wZXJ0eU5hbWUpLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gbG9uZ2hhbmRQcm9wcyA9IGxvbmdoYW5kUHJvcGVy
dGllcyhzdHlsZSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7ICFlYyAmJiBpIDwgbG9uZ2hhbmRQcm9wcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7ICFlYyAmJiBpIDwgbG9uZ2hhbmRQcm9wcy5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShsb25naGFuZFByb3BzW2ld
LCBlYyk7CisgICAgICAgICAgICAgICAgY2hhbmdlZFByb3BlcnRpZXMuYXBwZW5kKGxvbmdoYW5k
UHJvcHNbaV0pOworICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgLy8gRXhwbGlj
aXRseSBkZWxldGUgcHJvcGVydGllcyB3aXRoIG5vIHNob3J0aGFuZHMgYXMgd2VsbCBhcyBzaG9y
dGhhbmRzIHRoZW1zZWx2ZXMuCiAgICAgICAgIGlmICghZWMpCiAgICAgICAgICAgICBzdHlsZS0+
cmVtb3ZlUHJvcGVydHkocHJvcGVydHlOYW1lLCBlYyk7CiAKICAgICAgICAgaWYgKGVjKSB7Ci0g
ICAgICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNlLCBJ
bnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkpOworICAgICAg
ICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwgSW5zcGVj
dG9yVmFsdWU6Om51bGwoKSwgdG9BcnJheShjaGFuZ2VkUHJvcGVydGllcykpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTm90aWZ5IGNhbGxlciB0aGF0
IHRoZSBwcm9wZXJ0eSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuCiAgICAgaWYgKCFzdHlsZVRl
eHRMZW5ndGgpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjaGFuZ2VkUHJvcGVy
dGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICAgICAgY2hhbmdlZFByb3BlcnRp
ZXMtPnB1c2hTdHJpbmcocHJvcGVydHlOYW1lKTsKLSAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBw
bHlTdHlsZVRleHQoY2FsbElkLCB0cnVlLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBjaGFuZ2Vk
UHJvcGVydGllcy5yZWxlYXNlKCkpOworICAgICAgICBjaGFuZ2VkUHJvcGVydGllcy5hcHBlbmQo
cHJvcGVydHlOYW1lKTsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2Fs
bElkLCB0cnVlLCBidWlsZE9iamVjdEZvclN0eWxlKHN0eWxlLCB0cnVlKSwgdG9BcnJheShjaGFu
Z2VkUHJvcGVydGllcykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCF0ZW1w
U3R5bGUtPmxlbmd0aCgpKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0
KGNhbGxJZCwgZmFsc2UsIEluc3BlY3RvclZhbHVlOjpudWxsKCksIEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwg
ZmFsc2UsIEluc3BlY3RvclZhbHVlOjpudWxsKCksIHRvQXJyYXkoY2hhbmdlZFByb3BlcnRpZXMp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIEl0ZXJhdGUgb2YgdGhlIHByb3Bl
cnRpZXMgb24gdGhlIHRlc3QgZWxlbWVudCdzIHN0eWxlIGRlY2xhcmF0aW9uIGFuZAogICAgIC8v
IGFkZCB0aGVtIHRvIHRoZSByZWFsIHN0eWxlIGRlY2xhcmF0aW9uLiBXZSB0YWtlIGNhcmUgdG8g
bW92ZSBzaG9ydGhhbmRzLgogICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gY2hhbmdlZFByb3BlcnRpZXM7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdGVtcFN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIFN0cmluZyBu
YW1lID0gdGVtcFN0eWxlLT5pdGVtKGkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
Q1NTU3R5bGVNb2RlbC5qcwppbmRleCA2NmEyMGNlLi5hMTQ2NzZhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpAQCAtMzAsMTIgKzMwLDYyIEBACiAK
IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsID0gZnVuY3Rpb24oKQogeworICAgIHRoaXMucmVz
ZXQoKTsKKyAgICBXZWJJbnNwZWN0b3Iuc2Vzc2lvblNldHRpbmdzLmFkZEV2ZW50TGlzdGVuZXIo
ImxvYWRlZCIsIHRoaXMuX3Nlc3Npb25Mb2FkZWQsIHRoaXMpOwogfQogCiBXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHRoaXMuX2lkVG9PcmlnaW5hbFN0eWxlID0ge307CisgICAgICAgIHRoaXMuX2Rl
bHRhUHJvY2Vzc29yID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkRlbHRhUHJvY2Vz
c29yKHRoaXMuc2F2ZVN0YXRlLmJpbmQodGhpcykpOworICAgIH0sCisKKyAgICBfc2Vzc2lvbkxv
YWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5faWRUb09yaWdpbmFsU3R5bGUg
PSB7fTsKKyAgICAgICAgdmFyIHN0eWxlU2hlZXREZWx0YXMgPSBXZWJJbnNwZWN0b3Iuc2Vzc2lv
blNldHRpbmdzLnN0eWxlU2hlZXREZWx0YXM7CisgICAgICAgIGlmICghc3R5bGVTaGVldERlbHRh
cykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBTZXQgZGVzZXJpYWxpemVkIG9i
amVjdCBwcm90b3R5cGVzIGFuZCByZW1lbWJlciBzdG9yZWQgb3JpZ2luYWwgc3R5bGVzLgorICAg
ICAgICBmb3IgKHZhciBpZCBpbiBzdHlsZVNoZWV0RGVsdGFzKSB7CisgICAgICAgICAgICB2YXIg
ZGVsdGEgPSBzdHlsZVNoZWV0RGVsdGFzW2lkXTsKKyAgICAgICAgICAgIGRlbHRhLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlU2hlZXREZWx0YS5wcm90b3R5cGU7
CisgICAgICAgICAgICBmb3IgKHZhciBzdHlsZUlkIGluIGRlbHRhLnN0eWxlTWFwKSB7CisgICAg
ICAgICAgICAgICAgdmFyIG9yaWdpbmFsU3R5bGUgPSBkZWx0YS5zdHlsZU1hcFtzdHlsZUlkXS5v
cmlnaW5hbFN0eWxlOworICAgICAgICAgICAgICAgIG9yaWdpbmFsU3R5bGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlOworICAgICAgICAgICAg
ICAgIGlmIChvcmlnaW5hbFN0eWxlLmlkKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9pZFRv
T3JpZ2luYWxTdHlsZVtvcmlnaW5hbFN0eWxlLmlkXSA9IG9yaWdpbmFsU3R5bGU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9kZWx0YVByb2Nlc3Nvci5zdGF0ZU9i
amVjdCA9IHN0eWxlU2hlZXREZWx0YXM7CisgICAgfSwKKwogICAgIGdldFN0eWxlc0FzeW5jOiBm
dW5jdGlvbihub2RlSWQsIGF1dGhPbmx5LCB1c2VyQ2FsbGJhY2spCiAgICAgewotICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcCh1c2Vy
Q2FsbGJhY2spLCBub2RlSWQsIGF1dGhPbmx5KTsKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2so
c3R5bGVzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3R5bGVzKQorICAgICAgICAgICAg
ICAgIHRoaXMuX3VwZGF0ZVN0eWxlcyhzdHlsZXMpOworICAgICAgICAgICAgdXNlckNhbGxiYWNr
KHN0eWxlcyk7CisgICAgICAgIH0KKworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxl
cyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjay5iaW5kKHRoaXMpKSwgbm9kZUlk
LCBhdXRoT25seSk7CisgICAgfSwKKworICAgIF91cGRhdGVTdHlsZXM6IGZ1bmN0aW9uKHN0eWxl
cykKKyAgICB7CisgICAgICAgIGlmIChzdHlsZXMuaW5saW5lU3R5bGUgJiYgIXRoaXMuX2lkVG9P
cmlnaW5hbFN0eWxlW3N0eWxlcy5pbmxpbmVTdHlsZS5pZF0pCisgICAgICAgICAgICB0aGlzLl9p
ZFRvT3JpZ2luYWxTdHlsZVtzdHlsZXMuaW5saW5lU3R5bGUuaWRdID0gV2ViSW5zcGVjdG9yLkNT
U1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShzdHlsZXMuaW5saW5lU3R5bGUpOworCisgICAg
ICAgIHZhciBjc3NSdWxlcyA9IHN0eWxlcy5tYXRjaGVkQ1NTUnVsZXM7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY3NzUnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBy
dWxlID0gY3NzUnVsZXNbaV07CisgICAgICAgICAgICBpZiAocnVsZS5zdHlsZS5pZCAmJiAhdGhp
cy5faWRUb09yaWdpbmFsU3R5bGVbcnVsZS5zdHlsZS5pZF0pCisgICAgICAgICAgICAgICAgdGhp
cy5faWRUb09yaWdpbmFsU3R5bGVbcnVsZS5zdHlsZS5pZF0gPSBXZWJJbnNwZWN0b3IuQ1NTU3R5
bGVEZWNsYXJhdGlvbi5wYXJzZVN0eWxlKHJ1bGUuc3R5bGUpOyAvLyBvbmx5IGZvciBib3VuZCBz
dHlsZXMKKyAgICAgICAgfQogICAgIH0sCiAKICAgICBnZXRDb21wdXRlZFN0eWxlQXN5bmM6IGZ1
bmN0aW9uKG5vZGVJZCwgdXNlckNhbGxiYWNrKQpAQCAtODMsMTAgKzEzMywxNiBAQCBXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIHZhciBuZXdTdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBh
cnNlU3R5bGUobmV3UGF5bG9hZCk7CisgICAgICAgICAgICBpZiAobmV3U3R5bGUucGFyZW50U3R5
bGVTaGVldElkKQorICAgICAgICAgICAgICAgIHRoaXMuX2RlbHRhUHJvY2Vzc29yLnByb2Nlc3NT
dHlsZURlbHRhKHRoaXMuX2lkVG9PcmlnaW5hbFN0eWxlW3N0eWxlSWRdLCBuZXdTdHlsZSwgWyBw
cm9wZXJ0eU5hbWUgXSk7CisKICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhuZXdTdHlsZSk7CisK
KyAgICAgICAgICAgIGlmIChuZXdTdHlsZS5wYXJlbnRTdHlsZVNoZWV0SWQpCisgICAgICAgICAg
ICAgICAgdGhpcy5fZGVsdGFQcm9jZXNzb3IudXBkYXRlU3R5bGVTaGVldENvbnRlbnRzKG5ld1N0
eWxlLnBhcmVudFN0eWxlU2hlZXRJZCwgc3R5bGVJZCk7CiAgICAgICAgIH0KIAotICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVN0eWxlRW5hYmxlZChXZWJJbnNwZWN0b3IuQ2FsbGJhY2su
d3JhcChjYWxsYmFjayksIHN0eWxlSWQsIHByb3BlcnR5TmFtZSwgZGlzYWJsZWQpOworICAgICAg
ICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVN0eWxlRW5hYmxlZChXZWJJbnNwZWN0b3IuQ2FsbGJh
Y2sud3JhcChjYWxsYmFjay5iaW5kKHRoaXMpKSwgc3R5bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNh
YmxlZCk7CiAgICAgfSwKIAogICAgIHNldENTU1RleHQ6IGZ1bmN0aW9uKHN0eWxlSWQsIGNzc1Rl
eHQpCkBAIC0xMDEsMTEgKzE1Nyw0NzQgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJv
dG90eXBlID0gewogICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgICAgIGZh
aWx1cmVDYWxsYmFjaygpOwogICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
IG5ld1N0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShu
ZXdQYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3U3R5bGUucGFyZW50U3R5bGVTaGVl
dElkKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWx0YVByb2Nlc3Nvci5wcm9jZXNzU3R5
bGVEZWx0YSh0aGlzLl9pZFRvT3JpZ2luYWxTdHlsZVtzdHlsZUlkXSwgbmV3U3R5bGUsIGNoYW5n
ZWRQcm9wZXJ0aWVzKTsKKwogICAgICAgICAgICAgICAgIHZhciBuZXdTdHlsZSA9IG5ld1BheWxv
YWQgPyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVN0eWxlKG5ld1BheWxv
YWQpIDogbnVsbDsKICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2sobmV3U3R5bGUsIGNo
YW5nZWRQcm9wZXJ0aWVzKTsKKworICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZS5wYXJlbnRT
dHlsZVNoZWV0SWQpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlbHRhUHJvY2Vzc29yLnVw
ZGF0ZVN0eWxlU2hlZXRDb250ZW50cyhuZXdTdHlsZS5wYXJlbnRTdHlsZVNoZWV0SWQsIHN0eWxl
SWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5hcHBseVN0eWxlVGV4dChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayksIHN0
eWxlSWQsIHN0eWxlVGV4dCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5hcHBseVN0eWxlVGV4dChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjay5iaW5k
KHRoaXMpKSwgc3R5bGVJZCwgc3R5bGVUZXh0LCBwcm9wZXJ0eU5hbWUpOworICAgIH0sCisKKyAg
ICBzYXZlU3RhdGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5zZXNz
aW9uU2V0dGluZ3Muc3R5bGVTaGVldERlbHRhcyA9IHRoaXMuX2RlbHRhUHJvY2Vzc29yLnN0YXRl
T2JqZWN0OwogICAgIH0KIH0KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRGVsdGFQcm9j
ZXNzb3IgPSBmdW5jdGlvbihwZXJzaXN0Q2FsbGJhY2spCit7CisgICAgdGhpcy5fcGVyc2lzdENh
bGxiYWNrID0gcGVyc2lzdENhbGxiYWNrOworICAgIHRoaXMuX3N0eWxlU2hlZXREZWx0YXMgPSB7
fTsKKyAgICB0aGlzLl9wYXRjaGVyID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0
eWxlU2hlZXRQYXRjaGVyKCk7CisgICAgdGhpcy5fcGF0Y2hlci5zZXREZWx0YXModGhpcy5fc3R5
bGVTaGVldERlbHRhcyk7Cit9CisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkRlbHRhUHJv
Y2Vzc29yLnByb3RvdHlwZSA9IHsKKyAgICBzZXQgc3RhdGVPYmplY3QoeCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX3BvcHVsYXRlU3R5bGVTaGVldERlbHRhcyh4KTsKKyAgICB9LAorCisgICAgZ2V0
IHN0YXRlT2JqZWN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdHlsZVNoZWV0RGVs
dGFzOworICAgIH0sCisKKyAgICBwcm9jZXNzU3R5bGVEZWx0YTogZnVuY3Rpb24ob3JpZ2luYWxT
dHlsZSwgbmV3U3R5bGUsIGNoYW5nZWRQcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgY29uc3Qg
c3R5bGVTaGVldERlbHRhTWFwID0gdGhpcy5fc3R5bGVTaGVldERlbHRhczsKKyAgICAgICAgY29u
c3Qgc3R5bGVTaGVldElkID0gbmV3U3R5bGUucGFyZW50U3R5bGVTaGVldElkOworICAgICAgICB2
YXIgc3R5bGVTaGVldERlbHRhID0gc3R5bGVTaGVldERlbHRhTWFwW3N0eWxlU2hlZXRJZF07Cisg
ICAgICAgIGlmICghc3R5bGVTaGVldERlbHRhKSB7CisgICAgICAgICAgICBzdHlsZVNoZWV0RGVs
dGEgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuU3R5bGVTaGVldERlbHRhKCk7Cisg
ICAgICAgICAgICBzdHlsZVNoZWV0RGVsdGFNYXBbc3R5bGVTaGVldElkXSA9IHN0eWxlU2hlZXRE
ZWx0YTsKKyAgICAgICAgfQorICAgICAgICBzdHlsZVNoZWV0RGVsdGEudHJhY2tTdHlsZShvcmln
aW5hbFN0eWxlKTsKKyAgICAgICAgc3R5bGVTaGVldERlbHRhLnVwZGF0ZShjaGFuZ2VkUHJvcGVy
dGllcywgbmV3U3R5bGUpOworCisgICAgICAgIHRoaXMuX3BlcnNpc3RDYWxsYmFjaygpOworICAg
IH0sCisKKyAgICBfcG9wdWxhdGVTdHlsZVNoZWV0RGVsdGFzOiBmdW5jdGlvbihzdHlsZVNoZWV0
RGVsdGFzKQorICAgIHsKKyAgICAgICAgdGhpcy5fc3R5bGVTaGVldERlbHRhcyA9IHN0eWxlU2hl
ZXREZWx0YXM7CisgICAgICAgIHRoaXMuX3BhdGNoZXIuc2V0RGVsdGFzKHN0eWxlU2hlZXREZWx0
YXMpOworICAgIH0sCisKKyAgICB1cGRhdGVTdHlsZVNoZWV0Q29udGVudHM6IGZ1bmN0aW9uKHBh
cmVudFN0eWxlU2hlZXRJZCwgc3R5bGVJZCkKKyAgICB7CisgICAgICAgIHRoaXMuX3BhdGNoZXIu
dXBkYXRlU3R5bGVUZXh0KHBhcmVudFN0eWxlU2hlZXRJZCwgc3R5bGVJZCk7CisgICAgfSwKK30K
KworV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuU3R5bGVTaGVldERlbHRhID0gZnVuY3Rpb24o
KQoreworICAgIHRoaXMuc3R5bGVNYXAgPSB7fTsKKyAgICB0aGlzLmRlbHRhQ291bnQgPSAwOwor
fQorCitXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZVNoZWV0RGVsdGEucHJvdG90eXBl
ID0geworICAgIHVwZGF0ZTogZnVuY3Rpb24oY2hhbmdlZFByb3BlcnRpZXMsIG5ld1N0eWxlKQor
ICAgIHsKKyAgICAgICAgdmFyIHN0eWxlRGF0YSA9IHRoaXMuc3R5bGVNYXBbbmV3U3R5bGUuaWRd
OworICAgICAgICBpZiAoIXN0eWxlRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
dmFyIHByb3BlcnR5RGVsdGFzID0gc3R5bGVEYXRhLmRlbHRhczsKKyAgICAgICAgdmFyIG9yaWdp
bmFsU3R5bGUgPSBzdHlsZURhdGEub3JpZ2luYWxTdHlsZTsKKyAgICAgICAgdmFyIGNoYW5nZWRQ
cm9wZXJ0aWVzU2V0ID0ge307CisKKyAgICAgICAgdmFyIGZvdW5kU2hvcnRoYW5kcyA9IHt9Owor
ICAgICAgICB2YXIgZGlzYWJsZWRQcm9wZXJ0aWVzID0gbmV3U3R5bGUuX19kaXNhYmxlZFByb3Bl
cnR5TmFtZXMgfHwge307CisKKyAgICAgICAgdmFyIHVuaXF1ZVByb3BlcnRpZXMgPSB7fTsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkUHJvcGVydGllcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgY2hhbmdlZFByb3BlcnRpZXNTZXRbY2hhbmdlZFByb3BlcnRpZXNbaV1d
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHVuaXF1ZVByb3BlcnRpZXNbY2hhbmdlZFByb3BlcnRpZXNb
aV1dID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1N0
eWxlLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgdW5pcXVlUHJvcGVydGllc1tuZXdTdHlsZVtp
XV0gPSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yaWdpbmFsU3R5bGUubGVu
Z3RoOyArK2kpCisgICAgICAgICAgICB1bmlxdWVQcm9wZXJ0aWVzW29yaWdpbmFsU3R5bGVbaV1d
ID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkUHJvcGVydGllcy5s
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHVuaXF1ZVByb3BlcnRpZXNbb3JpZ2luYWxTdHlsZVtp
XV0gPSB0cnVlOworICAgICAgICBmb3IgKHZhciBuYW1lIGluIGRpc2FibGVkUHJvcGVydGllcykK
KyAgICAgICAgICAgIHVuaXF1ZVByb3BlcnRpZXNbbmFtZV0gPSB0cnVlOworCisgICAgICAgIHZh
ciBkZWxldGVkTG9uZ2hhbmRzID0ge307CisgICAgICAgIHZhciBpbXBsaWNpdGx5TW9kaWZpZWRT
aG9ydGhhbmRzID0ge307CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgIGZ1
bmN0aW9uIHNldExvbmdoYW5kRGVsZXRlZERlbHRhKG5hbWUsIGRpc2FibGVkKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBDcmVhdGUgZGVsZXRlZC1kZWx0YSBmb3IgYSBsb25naGFuZCBkZWxl
dGVkIGJ5IHNldHRpbmcgYSBjb3JyZXNwb25kaW5nIHNob3J0aGFuZCBwcm9wZXJ0eS4KKyAgICAg
ICAgICAgIHZhciBkZWxldGVkRGVsdGEgPSBwcm9wZXJ0eURlbHRhc1tuYW1lXTsKKyAgICAgICAg
ICAgIGlmIChkZWxldGVkRGVsdGEpIHsKKyAgICAgICAgICAgICAgICBkZWxldGVkRGVsdGEubmV3
VmFsdWUgPSAiIjsKKyAgICAgICAgICAgICAgICBkZWxldGVkRGVsdGEubmV3UHJpb3JpdHkgPSAi
IjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIG9sZFByb3BlcnR5
QXNMb25naGFuZCA9IHNlbGYuZ2V0UHJvcGVydHkob3JpZ2luYWxTdHlsZSwgbmFtZSwgZmFsc2Up
OworICAgICAgICAgICAgICAgIGlmIChvbGRQcm9wZXJ0eUFzTG9uZ2hhbmQudmFsdWUgIT09ICIi
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREZWx0YSA9IG5ldyBXZWJJbnNwZWN0b3Iu
UHJvcGVydHlEZWx0YShvbGRQcm9wZXJ0eUFzTG9uZ2hhbmQsIHt2YWx1ZTogIiIsIHByaW9yaXR5
OiAiIiwgZGlzYWJsZWQ6IGRpc2FibGVkfSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
RGVsdGFzW25hbWVdID0gZGVsZXRlZERlbHRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZpbGxJbXBsaWNpdGx5TW9kaWZp
ZWRTaG9ydGhhbmRzKG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQg
YmUgYW4gZXhwbGljaXRseSBtb2RpZmllZCBsb25naGFuZCwgb3IgYSBzZWNvbmQtbGV2ZWwgc2hv
cnRoYW5kIChlLmcuIGJvcmRlciA8LSBib3JkZXItd2lkdGggPC0gYm9yZGVyLXRvcC13aWR0aCks
CisgICAgICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGdldFByb3BlcnR5U2hvcnRoYW5kIHJldHVy
bnMgIiIuIFVzZSBhIHdvcmthcm91bmQgZm9yIGRldGVjdGluZyB0aGUgYXNzb2NpYXRlZCBzaG9y
dGhhbmRzLgorICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IG5hbWU7CisgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgdmFyIGFzc29jaWF0ZWRTaG9ydGhhbmQgPSBzZWxmLmdldEFz
c29jaWF0ZWRTaG9ydGhhbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoYXNzb2Np
YXRlZFNob3J0aGFuZCAmJiAhY2hhbmdlZFByb3BlcnRpZXNTZXRbYXNzb2NpYXRlZFNob3J0aGFu
ZF0pCisgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0bHlNb2RpZmllZFNob3J0aGFuZHNbYXNz
b2NpYXRlZFNob3J0aGFuZF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGFz
c29jaWF0ZWRTaG9ydGhhbmQ7CisgICAgICAgICAgICB9IHdoaWxlIChjYW5kaWRhdGUpOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1bmlxdWVQcm9wZXJ0aWVzKSB7Cisg
ICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSBuYW1lIGluIGRpc2FibGVkUHJvcGVydGllczsKKyAg
ICAgICAgICAgIHZhciBzaG9ydGhhbmROYW1lID0gIWRpc2FibGVkID8gbmV3U3R5bGUuZ2V0UHJv
cGVydHlTaG9ydGhhbmQobmFtZSkgOiBudWxsOworICAgICAgICAgICAgdmFyIG5ld1Byb3BlcnR5
QXNTaG9ydGhhbmQgPSB0aGlzLmdldFByb3BlcnR5KG5ld1N0eWxlLCBuYW1lLCB0cnVlKTsKKyAg
ICAgICAgICAgIHZhciBuYW1lSXNTaG9ydGhhbmQgPSAhZGlzYWJsZWQgJiYgKG5ld1Byb3BlcnR5
QXNTaG9ydGhhbmQudmFsdWUgIT09ICIiICYmICFuZXdQcm9wZXJ0eUFzU2hvcnRoYW5kLmRpc2Fi
bGVkKSB8fCB0aGlzLmdldFByb3BlcnR5KG9yaWdpbmFsU3R5bGUsIG5hbWUsIHRydWUpLnZhbHVl
ICE9PSAiIjsKKyAgICAgICAgICAgIGlmIChuYW1lSXNTaG9ydGhhbmQpCisgICAgICAgICAgICAg
ICAgc2hvcnRoYW5kTmFtZSA9IG5hbWU7CisKKyAgICAgICAgICAgIGlmIChzaG9ydGhhbmROYW1l
ICYmIHNob3J0aGFuZE5hbWUgaW4gZm91bmRTaG9ydGhhbmRzKSB7CisgICAgICAgICAgICAgICAg
aWYgKGRlbGV0ZWRMb25naGFuZHNbbmFtZV0pCisgICAgICAgICAgICAgICAgICAgIHNldExvbmdo
YW5kRGVsZXRlZERlbHRhKG5hbWUsIGRpc2FibGVkKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmlsbEltcGxpY2l0bHlNb2RpZmllZFNo
b3J0aGFuZHMobmFtZSk7CisKKyAgICAgICAgICAgIGlmIChzaG9ydGhhbmROYW1lKSB7CisgICAg
ICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzW3Nob3J0aGFuZE5hbWVdID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB2YXIgbG9uZ2hhbmQgPSBuYW1lOworICAgICAgICAgICAgICAgIGlmIChuYW1l
SXNTaG9ydGhhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmdoYW5kcyA9IG5ld1N0
eWxlLmdldExvbmdoYW5kUHJvcGVydGllcyhzaG9ydGhhbmROYW1lKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoOyArK2kpCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGVkTG9uZ2hhbmRzW2xvbmdoYW5kc1tpXV0gPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzaG9y
dGhhbmROYW1lOworICAgICAgICAgICAgICAgICAgICBuYW1lSXNTaG9ydGhhbmQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHZh
ciBsb25naGFuZCA9ICIiOworCisgICAgICAgICAgICBpZiAoIWNoYW5nZWRQcm9wZXJ0aWVzU2V0
W25hbWVdICYmICFjaGFuZ2VkUHJvcGVydGllc1NldFtsb25naGFuZF0pCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEob3JpZ2luYWxTdHls
ZSwgbmV3U3R5bGUsIG5hbWUsIG5hbWVJc1Nob3J0aGFuZCwgcHJvcGVydHlEZWx0YXMpOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgc2hvcnRoYW5kIGluIGltcGxpY2l0bHlNb2RpZmll
ZFNob3J0aGFuZHMpCisgICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKG9yaWdpbmFsU3R5bGUs
IG5ld1N0eWxlLCBzaG9ydGhhbmQsIHRydWUsIHByb3BlcnR5RGVsdGFzKTsKKyAgICB9LAorCisg
ICAgZ2V0QXNzb2NpYXRlZFNob3J0aGFuZDogZnVuY3Rpb24oZXhwbGljaXRMb25naGFuZCkKKyAg
ICB7CisgICAgICAgIGlmIChleHBsaWNpdExvbmdoYW5kLmNoYXJBdCgwKSA9PT0gIi0iKQorICAg
ICAgICAgICAgcmV0dXJuICIiOworICAgICAgICB2YXIgbGFzdERhc2hJZHggPSBleHBsaWNpdExv
bmdoYW5kLmxhc3RJbmRleE9mKCItIik7CisgICAgICAgIGlmIChsYXN0RGFzaElkeCA+IDApCisg
ICAgICAgICAgICByZXR1cm4gZXhwbGljaXRMb25naGFuZC5zdWJzdHJpbmcoMCwgbGFzdERhc2hJ
ZHgpOworICAgICAgICByZXR1cm4gIiI7CisgICAgfSwKKworICAgIHVwZGF0ZURlbHRhOiBmdW5j
dGlvbihvcmlnaW5hbFN0eWxlLCBuZXdTdHlsZSwgcHJvcGVydHlOYW1lLCBpc1Nob3J0aGFuZCwg
cHJvcGVydHlEZWx0YXMpCisgICAgeworICAgICAgICB2YXIgbmV3UHJvcGVydHkgPSB0aGlzLmdl
dFByb3BlcnR5KG5ld1N0eWxlLCBwcm9wZXJ0eU5hbWUsIGlzU2hvcnRoYW5kKTsKKyAgICAgICAg
dmFyIHByb3BlcnR5RGVsdGEgPSBwcm9wZXJ0eURlbHRhc1twcm9wZXJ0eU5hbWVdOworICAgICAg
ICBpZiAoIXByb3BlcnR5RGVsdGEpIHsKKyAgICAgICAgICAgIHZhciBvbGRQcm9wZXJ0eSA9IHRo
aXMuZ2V0UHJvcGVydHkob3JpZ2luYWxTdHlsZSwgcHJvcGVydHlOYW1lLCBpc1Nob3J0aGFuZCk7
CisgICAgICAgICAgICBwcm9wZXJ0eURlbHRhID0gbmV3IFdlYkluc3BlY3Rvci5Qcm9wZXJ0eURl
bHRhKG9sZFByb3BlcnR5LCBuZXdQcm9wZXJ0eSk7CisgICAgICAgICAgICBwcm9wZXJ0eURlbHRh
c1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlEZWx0YTsKKyAgICAgICAgICAgICsrdGhpcy5kZWx0
YUNvdW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJvcGVydHlEZWx0YS5uZXdW
YWx1ZSA9IG5ld1Byb3BlcnR5LnZhbHVlOworICAgICAgICAgICAgcHJvcGVydHlEZWx0YS5uZXdQ
cmlvcml0eSA9IG5ld1Byb3BlcnR5LnByaW9yaXR5OworICAgICAgICAgICAgcHJvcGVydHlEZWx0
YS5kaXNhYmxlZCA9IG5ld1Byb3BlcnR5LmRpc2FibGVkOworICAgICAgICB9CisgICAgICAgIGlm
IChvcmlnaW5hbFN0eWxlLmlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0eU5hbWUpKSB7CisgICAg
ICAgICAgICBwcm9wZXJ0eURlbHRhLm9sZFZhbHVlID0gIiI7CisgICAgICAgICAgICBwcm9wZXJ0
eURlbHRhLm9sZFByaW9yaXR5ID0gIiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJvcGVy
dHlEZWx0YS5uZXdWYWx1ZSA9PT0gcHJvcGVydHlEZWx0YS5vbGRWYWx1ZSAmJiBwcm9wZXJ0eURl
bHRhLm5ld1ByaW9yaXR5ID09PSBwcm9wZXJ0eURlbHRhLm9sZFByaW9yaXR5ICYmICFwcm9wZXJ0
eURlbHRhLmRpc2FibGVkKSB7CisgICAgICAgICAgICBkZWxldGUgcHJvcGVydHlEZWx0YXNbcHJv
cGVydHlOYW1lXTsKKyAgICAgICAgICAgIC0tdGhpcy5kZWx0YUNvdW50OworICAgICAgICB9Cisg
ICAgfSwKKworICAgIGdldFByb3BlcnR5OiBmdW5jdGlvbihzdHlsZSwgcHJvcGVydHlOYW1lLCBp
c1Nob3J0aGFuZCkKKyAgICB7CisgICAgICAgIHZhciBkaXNhYmxlZCA9IHByb3BlcnR5TmFtZSBp
biBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydGllczsKKyAgICAgICAgaWYgKGRpc2FibGVkKSB7Cisg
ICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlWYWx1ZXNbcHJv
cGVydHlOYW1lXTsKKyAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IHN0eWxlLl9fZGlzYWJsZWRQ
cm9wZXJ0eVByaW9yaXRpZXNbcHJvcGVydHlOYW1lXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHZhciB2YWx1ZSA9IHRoaXMubWFza0Fic2VudChpc1Nob3J0aGFuZCA/IHN0eWxlLmdl
dFNob3J0aGFuZFZhbHVlKHByb3BlcnR5TmFtZSkgOiBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHBy
b3BlcnR5TmFtZSkpOworICAgICAgICAgICAgdmFyIHByaW9yaXR5ID0gdGhpcy5tYXNrQWJzZW50
KGlzU2hvcnRoYW5kID8gc3R5bGUuZ2V0U2hvcnRoYW5kUHJpb3JpdHkocHJvcGVydHlOYW1lKSA6
IHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkocHJvcGVydHlOYW1lKSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBwcmlvcml0eTogcHJpb3JpdHksIGRpc2FibGVk
OiBkaXNhYmxlZCB9OworICAgIH0sCisKKyAgICBtYXNrQWJzZW50OiBmdW5jdGlvbih2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVm
aW5lZCkgPyAiIiA6IHZhbHVlOworICAgIH0sCisKKyAgICB0cmFja1N0eWxlOiBmdW5jdGlvbihz
dHlsZSkKKyAgICB7CisgICAgICAgIGlmIChzdHlsZS5pZCBpbiB0aGlzLnN0eWxlTWFwKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIENyZWF0ZSBhIGNvcHkgb2Ygc3R5bGUgd2l0
aG91dCAicGFyZW50UnVsZSIgdG8gYXZvaWQgY3ljbGljIHN0cnVjdHVyZS4KKyAgICAgICAgdmFy
IHN0eWxlQ29weSA9IHt9OworICAgICAgICBmb3IgKHZhciBwIGluIHN0eWxlKSB7CisgICAgICAg
ICAgICBpZiAocCAhPT0gInBhcmVudFJ1bGUiKQorICAgICAgICAgICAgICAgIHN0eWxlQ29weVtw
XSA9IHN0eWxlW3BdOworICAgICAgICB9CisgICAgICAgIHN0eWxlQ29weS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGU7CisgICAgICAgIHRoaXMu
c3R5bGVNYXBbc3R5bGUuaWRdID0geyBvcmlnaW5hbFN0eWxlOiBzdHlsZUNvcHksIGRlbHRhczog
e30gfTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5Qcm9wZXJ0eURlbHRhID0gZnVuY3Rpb24o
b2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KQoreworICAgIHRoaXMub2xkVmFsdWUgPSBvbGRQcm9w
ZXJ0eS52YWx1ZTsKKyAgICB0aGlzLm9sZFByaW9yaXR5ID0gb2xkUHJvcGVydHkucHJpb3JpdHk7
CisgICAgdGhpcy5uZXdWYWx1ZSA9IG5ld1Byb3BlcnR5LnZhbHVlOworICAgIHRoaXMubmV3UHJp
b3JpdHkgPSBuZXdQcm9wZXJ0eS5wcmlvcml0eTsKKyAgICB0aGlzLmRpc2FibGVkID0gbmV3UHJv
cGVydHkuZGlzYWJsZWQ7Cit9CisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlU2hl
ZXRQYXRjaGVyID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX3N0eWxlU2hlZXRJZFRvT3JpZ2lu
YWxTb3VyY2UgPSB7fTsKK30KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuU3R5bGVTaGVl
dFBhdGNoZXIucHJvdG90eXBlID0geworICAgIHNldERlbHRhczogZnVuY3Rpb24oZGVsdGFzKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fc3R5bGVTaGVldERlbHRhcyA9IGRlbHRhczsKKyAgICAgICAg
Zm9yICh2YXIgc3R5bGVTaGVldElkIGluIGRlbHRhcykgeworICAgICAgICAgICAgdmFyIHN0eWxl
U2hlZXREZWx0YSA9IGRlbHRhc1tzdHlsZVNoZWV0SWRdOworICAgICAgICAgICAgZm9yICh2YXIg
c3R5bGVJZCBpbiBzdHlsZVNoZWV0RGVsdGEuc3R5bGVNYXApCisgICAgICAgICAgICAgICAgdGhp
cy51cGRhdGVTdHlsZVRleHQoc3R5bGVTaGVldElkLCBzdHlsZUlkKTsKKyAgICAgICAgfQorICAg
IH0sCisKKyAgICB1cGRhdGVTdHlsZVRleHQ6IGZ1bmN0aW9uKHN0eWxlU2hlZXRJZCwgc3R5bGVJ
ZCkKKyAgICB7CisgICAgICAgIGlmICghc3R5bGVTaGVldElkKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoc3R5bGVTaGVldElkIGluIHRoaXMuX3N0eWxlU2hlZXREZWx0YXMpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9zdHlsZVNoZWV0RGVsdGFzW3N0eWxlU2hlZXRJZF0ub3Jp
Z2luYWxTdHlsZVNoZWV0KQorICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3R5bGVTaGVldChz
dHlsZVNoZWV0SWQsIHN0eWxlSWQsIHRoaXMuX3N0eWxlU2hlZXREZWx0YXNbc3R5bGVTaGVldElk
XS5vcmlnaW5hbFN0eWxlU2hlZXQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVTaGVldChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3Jh
cCh0aGlzLmhhbmRsZVN0eWxlU2hlZXQuYmluZCh0aGlzLCBzdHlsZVNoZWV0SWQsIHN0eWxlSWQp
KSwgc3R5bGVTaGVldElkKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBoYW5kbGVTdHlsZVNo
ZWV0OiBmdW5jdGlvbihzdHlsZVNoZWV0SWQsIHN0eWxlSWQsIHN0eWxlU2hlZXQpCisgICAgewor
ICAgICAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRo
aXMuX3N0eWxlU2hlZXREZWx0YXNbc3R5bGVTaGVldElkXS5vcmlnaW5hbFN0eWxlU2hlZXQgPSBz
dHlsZVNoZWV0OworICAgICAgICB2YXIgdXJsID0gc3R5bGVTaGVldC5ocmVmOworICAgICAgICBp
ZiAoIXVybCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIHJlc291cmNlID0gV2Vi
SW5zcGVjdG9yLnJlc291cmNlVVJMTWFwW3VybF07CisgICAgICAgIGlmICghcmVzb3VyY2UpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICh0aGlzLl9zdHlsZVNoZWV0SWRUb09yaWdp
bmFsU291cmNlW3N0eWxlU2hlZXQuaWRdKQorICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHlsZVNo
ZWV0VGV4dChzdHlsZUlkLCBzdHlsZVNoZWV0LCB0aGlzLl9zdHlsZVNoZWV0SWRUb09yaWdpbmFs
U291cmNlW3N0eWxlU2hlZXQuaWRdKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLmdldFJlc291cmNlQ29udGVudChyZXNvdXJjZS5pZGVudGlmaWVyLCB0aGlzLmhhbmRs
ZVN0eWxlU2hlZXRUZXh0LmJpbmQodGhpcywgc3R5bGVJZCwgc3R5bGVTaGVldCkpOworICAgIH0s
CisKKyAgICBoYW5kbGVTdHlsZVNoZWV0VGV4dDogZnVuY3Rpb24oc3R5bGVJZCwgc3R5bGVTaGVl
dCwgc3R5bGVTaGVldFRleHQpCisgICAgeworICAgICAgICB0aGlzLl9zdHlsZVNoZWV0SWRUb09y
aWdpbmFsU291cmNlW3N0eWxlU2hlZXQuaWRdID0gc3R5bGVTaGVldFRleHQ7CisgICAgICAgIHZh
ciBzdHlsZVNoZWV0RGVsdGEgPSB0aGlzLl9zdHlsZVNoZWV0RGVsdGFzW3N0eWxlU2hlZXQuaWRd
OworICAgICAgICBpZiAoIXN0eWxlU2hlZXREZWx0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRSdWxlUmFuZ2VzKFdlYkluc3BlY3Rvci5DYWxsYmFj
ay53cmFwKHRoaXMuaGFuZGxlU3R5bGVTaGVldFJ1bGVSYW5nZXMuYmluZCh0aGlzLCBzdHlsZVNo
ZWV0RGVsdGEsIHN0eWxlU2hlZXQsIHN0eWxlU2hlZXRUZXh0KSksIHN0eWxlU2hlZXQuaWQpOwor
ICAgIH0sCisKKyAgICBoYW5kbGVTdHlsZVNoZWV0UnVsZVJhbmdlczogZnVuY3Rpb24oc3R5bGVT
aGVldERlbHRhLCBzdHlsZVNoZWV0LCBzdHlsZVNoZWV0VGV4dCwgcnVsZVJhbmdlcykKKyAgICB7
CisgICAgICAgIGlmIChydWxlUmFuZ2VzKSB7CisgICAgICAgICAgICBzdHlsZVNoZWV0RGVsdGEu
cnVsZVJhbmdlc1JlY2VpdmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlUnVsZVJh
bmdlcyhzdHlsZVNoZWV0RGVsdGEuc3R5bGVNYXAsIHJ1bGVSYW5nZXMpOworICAgICAgICB9Cisg
ICAgICAgIHZhciB0b2tlbml6ZXIgPSBXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyLlJlZ2lz
dHJ5LmdldEluc3RhbmNlKCkuZ2V0VG9rZW5pemVyKCJ0ZXh0L2NzcyIpOworICAgICAgICB2YXIg
bmV3U3R5bGVTaGVldEJvZHkgPSB0aGlzLmdldFBhdGNoZWRTdHlsZVNoZWV0KHN0eWxlU2hlZXRE
ZWx0YSwgc3R5bGVTaGVldFRleHQsIHRva2VuaXplcik7CisgICAgICAgIGlmIChXZWJJbnNwZWN0
b3IucGFuZWxzLnJlc291cmNlcykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVz
b3VyY2VzLnB1c2hSZXNvdXJjZUxvY2FsQ29udGVudChzdHlsZVNoZWV0LmhyZWYsIG5ld1N0eWxl
U2hlZXRCb2R5KTsKKyAgICB9LAorCisgICAgdXBkYXRlUnVsZVJhbmdlczogZnVuY3Rpb24oc3R5
bGVNYXAsIHJ1bGVSYW5nZXMpCisgICAgeworICAgICAgICBmb3IgKHZhciBpZCBpbiBydWxlUmFu
Z2VzKSB7CisgICAgICAgICAgICB2YXIgc3R5bGVUb1VwZGF0ZSA9IHN0eWxlTWFwW2lkXTsKKyAg
ICAgICAgICAgIGlmICghc3R5bGVUb1VwZGF0ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIHN0eWxlVG9VcGRhdGUub3JpZ2luYWxTdHlsZS5ib2R5U3RhcnRPZmZzZXQg
PSBydWxlUmFuZ2VzW2lkXS5ib2R5UmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICBzdHlsZVRvVXBk
YXRlLm9yaWdpbmFsU3R5bGUuYm9keUVuZE9mZnNldCA9IHJ1bGVSYW5nZXNbaWRdLmJvZHlSYW5n
ZS5lbmQ7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcGF0Y2hSdWxlQm9keTogZnVuY3Rpb24o
b3JpZ2luYWxCb2R5LCBwcm9wZXJ0eURpZmZzLCB0b2tlbml6ZXIpCisgICAgeworICAgICAgICBm
dW5jdGlvbiBuZXdQcmlvcml0eVN1ZmZpeChkaWZmKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKGRpZmYubmV3UHJpb3JpdHkgPT09ICIiKSA/ICIiIDogKCIgISIgKyBkaWZmLm5ld1By
aW9yaXR5KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBuZXdCb2R5ID0gIiI7CisgICAgICAg
IHRva2VuaXplci5saW5lID0gb3JpZ2luYWxCb2R5OworICAgICAgICB0b2tlbml6ZXIuY29uZGl0
aW9uID0geyBsZXhDb25kaXRpb246IHRva2VuaXplci5fbGV4Q29uZGl0aW9ucy5JTklUSUFMLCBw
YXJzZUNvbmRpdGlvbjogdG9rZW5pemVyLl9wYXJzZUNvbmRpdGlvbnMuUFJPUEVSVFkgfTsKKwor
ICAgICAgICB2YXIgb3B0aW9uYWxOTCA9ICIgIjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBvcmlnaW5hbEJvZHkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaCA9IG9yaWdp
bmFsQm9keS5jaGFyQXQoaSk7CisgICAgICAgICAgICBpZiAoY2ggPT09ICJcciIgfHwgY2ggPT09
ICJcbiIpIHsKKyAgICAgICAgICAgICAgICBvcHRpb25hbE5MID0gY2g7CisgICAgICAgICAgICAg
ICAgaWYgKGkgKyAxIDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjaE5leHQg
PSBvcmlnaW5hbEJvZHkuY2hhckF0KGkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
TmV4dCAhPT0gY2ggJiYgKGNoTmV4dCA9PT0gIlxyIiB8fCBjaE5leHQgPT09ICJcbiIpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxOTCArPSBjaE5leHQ7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyc2UgcnVsZSBi
b2R5LgorICAgICAgICB2YXIgbGFzdFBvcyA9IDA7CisgICAgICAgIHZhciBwcm9wZXJ0eU5hbWU7
CisgICAgICAgIHZhciBjdXJyZW50UHJvcGVydHlUeXBlID0gIiI7CisgICAgICAgIHZhciBzZWVu
VmFsdWVTdGFydCA9IGZhbHNlOworICAgICAgICB2YXIgaGFuZGxlZFByb3BlcnRpZXMgPSB7fTsK
KyAgICAgICAgdmFyIHdoaXRlc3BhY2VIYW5kbGluZyA9ICJub3JtYWwiOworICAgICAgICBkbyB7
CisgICAgICAgICAgICB2YXIgbmV3UG9zID0gdG9rZW5pemVyLm5leHRUb2tlbihsYXN0UG9zKTsK
KyAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0b2tlbml6ZXIudG9rZW5UeXBlOworICAgICAg
ICAgICAgdmFyIHRva2VuVGV4dCA9IG9yaWdpbmFsQm9keS5zdWJzdHJpbmcobGFzdFBvcywgbmV3
UG9zKTsKKyAgICAgICAgICAgIGlmICh3aGl0ZXNwYWNlSGFuZGxpbmcgIT09ICJub3JtYWwiKSB7
CisgICAgICAgICAgICAgICAgaWYgKCF0b2tlblR5cGUgJiYgIXRva2VuVGV4dC50cmltKCkubGVu
Z3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3aGl0ZXNwYWNlSGFuZGxpbmcgPT09ICJj
b3B5IikKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0gdG9rZW5UZXh0OworICAg
ICAgICAgICAgICAgICAgICAvLyBlbHNlICJza2lwIgorICAgICAgICAgICAgICAgICAgICBsYXN0
UG9zID0gbmV3UG9zOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgd2hpdGVzcGFjZUhhbmRsaW5nID0gIm5v
cm1hbCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW5UeXBlID09PSAiY3Nz
LXByb3BlcnR5IikgeworICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IHRva2VuVGV4dDsK
KyAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lIGluIHByb3BlcnR5RGlmZnMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5RGlmZnNbcHJvcGVydHlOYW1lXS5uZXdWYWx1
ZSA9PT0gIiIpCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHlUeXBlID0g
ImRlbGV0ZWQiOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRQcm9wZXJ0eVR5cGUgPSAiY2hhbmdlZCI7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdLmRpc2FibGVkKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0gIi8qICI7CisgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdCb2R5ICs9IHRva2VuVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHlUeXBlID0gIiI7
CisgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0gdG9rZW5UZXh0OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQ
cm9wZXJ0eVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuaXplci5jb25kaXRp
b24ucGFyc2VDb25kaXRpb24gIT0gdG9rZW5pemVyLl9wYXJzZUNvbmRpdGlvbnMuUFJPUEVSVFlf
VkFMVUUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuVmFsdWVTdGFydCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UHJvcGVydHlUeXBlID09PSAi
Y2hhbmdlZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2co
cHJvcGVydHlOYW1lICsgIjoiICsgcHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdLm5ld1ZhbHVl
ICsgbmV3UHJpb3JpdHlTdWZmaXgocHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0gcHJvcGVydHlEaWZmc1twcm9w
ZXJ0eU5hbWVdLm5ld1ZhbHVlICsgbmV3UHJpb3JpdHlTdWZmaXgocHJvcGVydHlEaWZmc1twcm9w
ZXJ0eU5hbWVdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Qm9keSArPSB0
b2tlblRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eURp
ZmZzW3Byb3BlcnR5TmFtZV0uZGlzYWJsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXdCb2R5ICs9ICIgKi8iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWVuVmFsdWVTdGFydCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlSGFuZGxpbmcgPSAi
c2tpcCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5VHlwZSA9
ICIiOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UHJvcGVydHlU
eXBlICE9PSAiZGVsZXRlZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Qm9keSAr
PSB0b2tlblRleHQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNlZW5WYWx1ZVN0
YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuVHlwZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UHJvcGVydHlUeXBlICE9PSAiZGVsZXRl
ZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Qm9keSArPSB0b2tlblRl
eHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblRleHQgPT09ICI6
IikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlblZhbHVlU3RhcnQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVzcGFjZUhh
bmRsaW5nID0gImNvcHkiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlblZhbHVlU3RhcnQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG5ld0JvZHkgKz0gdG9rZW5UZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBsYXN0UG9zID0gbmV3UG9zOworICAgICAgICB9IHdoaWxlIChsYXN0UG9zIDwgb3JpZ2luYWxC
b2R5Lmxlbmd0aCk7CisKKyAgICAgICAgZm9yICh2YXIgcHJvcGVydHlOYW1lIGluIHByb3BlcnR5
RGlmZnMpIHsKKyAgICAgICAgICAgIGlmIChoYW5kbGVkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVd
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIGRpZmYgPSBwcm9w
ZXJ0eURpZmZzW3Byb3BlcnR5TmFtZV07CisgICAgICAgICAgICBpZiAoZGlmZi5uZXdWYWx1ZSA9
PT0gIiIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZGlmZi5k
aXNhYmxlZCkKKyAgICAgICAgICAgICAgICBuZXdCb2R5ICs9ICIvKiAiOworICAgICAgICAgICAg
bmV3Qm9keSArPSBwcm9wZXJ0eU5hbWUgKyAiOiAiICsgZGlmZi5uZXdWYWx1ZSArIG5ld1ByaW9y
aXR5U3VmZml4KGRpZmYpICsgIjsiOworICAgICAgICAgICAgaWYgKGRpZmYuZGlzYWJsZWQpCisg
ICAgICAgICAgICAgICAgbmV3Qm9keSArPSAiICovIjsKKyAgICAgICAgICAgIG5ld0JvZHkgKz0g
b3B0aW9uYWxOTDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdCb2R5OworICAgIH0s
CisKKyAgICBnZXRQYXRjaGVkU3R5bGVTaGVldDogZnVuY3Rpb24oc3R5bGVTaGVldERlbHRhLCBv
cmlnaW5hbERhdGEsIHRva2VuaXplcikKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIHNvcnRlcihs
ZWZ0RW50cnksIHJpZ2h0RW50cnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsZWZ0
RW50cnkub3JpZ2luYWxTdHlsZS5ib2R5U3RhcnRPZmZzZXQgPCByaWdodEVudHJ5Lm9yaWdpbmFs
U3R5bGUuYm9keVN0YXJ0T2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgdmFyIHBhdGNoZWRT
dHlsZXNoZWV0ID0gIiI7CisgICAgICAgIHZhciBsYXN0U3R5bGVzaGVldFBvcyA9IDA7CisgICAg
ICAgIHZhciBzb3J0ZWRTdHlsZUVudHJpZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgc3R5bGVJ
ZCBpbiBzdHlsZVNoZWV0RGVsdGEuc3R5bGVNYXApCisgICAgICAgICAgICBzb3J0ZWRTdHlsZUVu
dHJpZXMucHVzaChzdHlsZVNoZWV0RGVsdGEuc3R5bGVNYXBbc3R5bGVJZF0pOworICAgICAgICBz
b3J0ZWRTdHlsZUVudHJpZXMuc29ydChzb3J0ZXIpOworCisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc29ydGVkU3R5bGVFbnRyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIg
c3R5bGVFbnRyeSA9IHNvcnRlZFN0eWxlRW50cmllc1tpXTsKKyAgICAgICAgICAgIHZhciBib2R5
U3RhcnQgPSBzdHlsZUVudHJ5Lm9yaWdpbmFsU3R5bGUuYm9keVN0YXJ0T2Zmc2V0OworICAgICAg
ICAgICAgdmFyIGJvZHlFbmQgPSBzdHlsZUVudHJ5Lm9yaWdpbmFsU3R5bGUuYm9keUVuZE9mZnNl
dDsKKyAgICAgICAgICAgIHBhdGNoZWRTdHlsZXNoZWV0ICs9IG9yaWdpbmFsRGF0YS5zdWJzdHJp
bmcobGFzdFN0eWxlc2hlZXRQb3MsIGJvZHlTdGFydCArIDEpOworICAgICAgICAgICAgdmFyIGJv
ZHlUb1BhdGNoID0gb3JpZ2luYWxEYXRhLnN1YnN0cmluZyhib2R5U3RhcnQgKyAxLCBib2R5RW5k
KTsKKyAgICAgICAgICAgIHBhdGNoZWRTdHlsZXNoZWV0ICs9IHRoaXMucGF0Y2hSdWxlQm9keShi
b2R5VG9QYXRjaCwgc3R5bGVFbnRyeS5kZWx0YXMsIHRva2VuaXplcik7CisgICAgICAgICAgICBs
YXN0U3R5bGVzaGVldFBvcyA9IGJvZHlFbmQ7CisgICAgICAgIH0KKyAgICAgICAgcGF0Y2hlZFN0
eWxlc2hlZXQgKz0gb3JpZ2luYWxEYXRhLnN1YnN0cmluZyhsYXN0U3R5bGVzaGVldFBvcywgb3Jp
Z2luYWxEYXRhLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBwYXRjaGVkU3R5bGVzaGVldDsKKyAg
ICB9Cit9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3Rv
ckJhY2tlbmRTdHViLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJh
Y2tlbmRTdHViLmpzCmluZGV4IDg1N2UwMjYuLmY4YWI0ODQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKQEAgLTI2Myw2ICsy
NjMsMTAgQEAgV2ViSW5zcGVjdG9yLkluc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9IHsK
ICAgICB7CiAgICAgfSwKIAorICAgIHNhdmVTZXNzaW9uU2V0dGluZ3M6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgfSwKKwogICAgIGRpc3BhdGNoT25JbmplY3RlZFNjcmlwdDogZnVuY3Rpb24oKQog
ICAgIHsKICAgICB9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlc1BhbmVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1Bh
bmVsLmpzCmluZGV4IDJhZDYyYTkuLjU4MGQ4ZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKQEAgLTM3NSw2ICszNzUsNyBAQCBXZWJJbnNwZWN0
b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAKICAgICAgICAgdGhpcy5t
YWluUmVzb3VyY2VMb2FkVGltZSA9IC0xOwogICAgICAgICB0aGlzLm1haW5SZXNvdXJjZURPTUNv
bnRlbnRUaW1lID0gLTE7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9ocmVmVG9Mb2NhbENvbnRlbnQ7
CiAgCiAgICAgICAgIHRoaXMudmlld3NDb250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7
CiAKQEAgLTcxMSw3ICs3MTIsMTIgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLnJlc291cmNlQ2F0ZWdvcmll
cy5zdHlsZXNoZWV0czoKICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLnJlc291cmNlQ2F0
ZWdvcmllcy5zY3JpcHRzOgogICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IucmVzb3VyY2VD
YXRlZ29yaWVzLnhocjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5T
b3VyY2VWaWV3KHJlc291cmNlKTsKKyAgICAgICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBXZWJJ
bnNwZWN0b3IuU291cmNlVmlldyhyZXNvdXJjZSk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
X2hyZWZUb0xvY2FsQ29udGVudCAmJiByZXNvdXJjZS51cmwgaW4gdGhpcy5faHJlZlRvTG9jYWxD
b250ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIHZpZXcudXBkYXRlTG9jYWxDb250ZW50KHRo
aXMuX2hyZWZUb0xvY2FsQ29udGVudFtyZXNvdXJjZS51cmxdLCByZXNvdXJjZS5taW1lVHlwZSB8
fCAidGV4dC9jc3MiKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hyZWZUb0xv
Y2FsQ29udGVudFtyZXNvdXJjZS51cmxdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gdmlldzsKICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLnJlc291cmNl
Q2F0ZWdvcmllcy5pbWFnZXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuSW1hZ2VWaWV3KHJlc291cmNlKTsKICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLnJl
c291cmNlQ2F0ZWdvcmllcy5mb250czoKQEAgLTcyMSw2ICs3MjcsMTggQEAgV2ViSW5zcGVjdG9y
LlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgIH0sCiAKKyAgICBw
dXNoUmVzb3VyY2VMb2NhbENvbnRlbnQ6IGZ1bmN0aW9uKHVybCwgbG9jYWxDb250ZW50KQorICAg
IHsKKyAgICAgICAgdmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVVJMTWFwW3Vy
bF07CisgICAgICAgIGlmIChyZXNvdXJjZSAmJiByZXNvdXJjZS5fcmVzb3VyY2VzVmlldykKKyAg
ICAgICAgICAgIHJlc291cmNlLl9yZXNvdXJjZXNWaWV3LnVwZGF0ZUxvY2FsQ29udGVudChsb2Nh
bENvbnRlbnQsIHJlc291cmNlLm1pbWVUeXBlIHx8ICJ0ZXh0L2NzcyIpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGlmICghdGhpcy5faHJlZlRvTG9jYWxDb250ZW50KQorICAgICAgICAg
ICAgICAgIHRoaXMuX2hyZWZUb0xvY2FsQ29udGVudCA9IHt9OworICAgICAgICAgICAgdGhpcy5f
aHJlZlRvTG9jYWxDb250ZW50W3VybF0gPSBsb2NhbENvbnRlbnQ7CisgICAgICAgIH0KKyAgICB9
LAorCiAgICAgc2V0U2lkZWJhcldpZHRoOiBmdW5jdGlvbih3aWR0aCkKICAgICB7CiAgICAgICAg
IGlmICh0aGlzLnZpc2libGVSZXNvdXJjZSkgewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nl
dHRpbmdzLmpzCmluZGV4IDIyZGI0OTEuLmI0OGUwOWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2V0dGluZ3MuanMKQEAgLTY2LDYgKzY2LDcgQEAgV2ViSW5zcGVjdG9yLnBvcHVsYXRl
QXBwbGljYXRpb25TZXR0aW5ncyA9IGZ1bmN0aW9uKHNldHRpbmdzU3RyaW5nKQogV2ViSW5zcGVj
dG9yLnBvcHVsYXRlU2Vzc2lvblNldHRpbmdzID0gZnVuY3Rpb24oc2V0dGluZ3NTdHJpbmcpCiB7
CiAgICAgV2ViSW5zcGVjdG9yLnNlc3Npb25TZXR0aW5ncy5fbG9hZChzZXR0aW5nc1N0cmluZyk7
CisgICAgV2ViSW5zcGVjdG9yLnNlc3Npb25TZXR0aW5ncy5pbnN0YWxsU2V0dGluZygic3R5bGVT
aGVldERlbHRhcyIsICJzdHlsZXNoZWV0LWRlbHRhcyIsIHt9KTsKICAgICBXZWJJbnNwZWN0b3Iu
c2Vzc2lvblNldHRpbmdzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygibG9hZGVkIik7CiB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMKaW5kZXggMWJmODE5NC4u
MDlkNTlkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZp
ZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanMKQEAg
LTIxOCw2ICsyMTgsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUgPSB7CiAK
ICAgICBzZWxlY3RMb2NhbENvbnRlbnRUYWI6IGZ1bmN0aW9uKCkKICAgICB7CisgICAgICAgIGlm
ICghdGhpcy50YWJiZWRQYW5lLnRhYk9iamVjdEZvcklkKCJsb2NhbCIpKQorICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB0aGlzLnRhYmJlZFBhbmUuc2VsZWN0VGFiQnlJZCgibG9jYWwiKTsK
ICAgICAgICAgdGhpcy5sb2NhbFNvdXJjZUZyYW1lLnZpc2libGUgPSB0cnVlOwogICAgICAgICBp
ZiAoInJlc2l6ZSIgaW4gdGhpcykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCmluZGV4IDBhZGYwNTcuLjFhOTRiNWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5qcwpAQCAtMTQxMyw2ICsxNDEzLDcgQEAgV2ViSW5zcGVjdG9yLnJlc2V0ID0g
ZnVuY3Rpb24oKQogCiAgICAgdGhpcy5zZXNzaW9uU2V0dGluZ3MucmVzZXQoKTsKICAgICB0aGlz
LmJyZWFrcG9pbnRNYW5hZ2VyLnJlc2V0KCk7CisgICAgdGhpcy5jc3NNb2RlbC5yZXNldCgpOwog
CiAgICAgZm9yICh2YXIgY2F0ZWdvcnkgaW4gdGhpcy5yZXNvdXJjZUNhdGVnb3JpZXMpCiAgICAg
ICAgIHRoaXMucmVzb3VyY2VDYXRlZ29yaWVzW2NhdGVnb3J5XS5yZW1vdmVBbGxSZXNvdXJjZXMo
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62663</attachid>
            <date>2010-07-27 02:34:34 -0700</date>
            <delta_ts>2010-08-02 09:15:46 -0700</delta_ts>
            <desc>[PATCH] Preliminary implementation, comments fixed</desc>
            <filename>cssdiff_prelim.patch</filename>
            <type>text/plain</type>
            <size>39331</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0cy5qcyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0cy5qcwppbmRleCA0ZDcyNzdkLi44ZGY3
YjVlIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtdGVzdHMuanMK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXRlc3RzLmpzCkBAIC03MCwxMSAr
NzAsMTIgQEAgZnVuY3Rpb24gZnJvbnRlbmRfZ2V0U2VsZWN0ZWRFbGVtZW50U3R5bGVzKGV4Y2x1
ZGVDb21wdXRlZCwgZXhjbHVkZU1hdGNoZWQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZnVu
Y3Rpb24gZnJvbnRlbmRfZ2V0RWxlbWVudFN0eWxlUHJvcGVydHlUcmVlSXRlbShwcm9wZXJ0eU5h
bWUpCitmdW5jdGlvbiBmcm9udGVuZF9nZXRFbGVtZW50U3R5bGVQcm9wZXJ0eVRyZWVJdGVtKHBy
b3BlcnR5TmFtZSwgc2VjdGlvbikKIHsKKyAgICBzZWN0aW9uID0gc2VjdGlvbiA9PT0gdW5kZWZp
bmVkID8gMSA6IHNlY3Rpb247CiAgICAgdmFyIHN0eWxlU2VjdGlvbnMgPSBXZWJJbnNwZWN0b3Iu
cGFuZWxzLmVsZW1lbnRzLnNpZGViYXJQYW5lcy5zdHlsZXMuc2VjdGlvbnNbMF07Ci0gICAgdmFy
IGVsZW1lbnRTdHlsZVNlY3Rpb24gPSBzdHlsZVNlY3Rpb25zWzFdOwotICAgIHZhciBvdXRsaW5l
ID0gZWxlbWVudFN0eWxlU2VjdGlvbi5wcm9wZXJ0aWVzVHJlZU91dGxpbmU7CisgICAgdmFyIHJl
cXVpcmVkU2VjdGlvbiA9IHN0eWxlU2VjdGlvbnNbc2VjdGlvbl07CisgICAgdmFyIG91dGxpbmUg
PSByZXF1aXJlZFNlY3Rpb24ucHJvcGVydGllc1RyZWVPdXRsaW5lOwogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgb3V0bGluZS5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgdHJl
ZUl0ZW0gPSBvdXRsaW5lLmNoaWxkcmVuW2ldOwogICAgICAgICBpZiAodHJlZUl0ZW0ubmFtZSA9
PT0gcHJvcGVydHlOYW1lKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291
cmNlcy9zdHlsZXMtZWRpdC1yZXdyaXRlLmNzcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNv
dXJjZXMvc3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uYWZjOWQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9yZXNvdXJjZXMvc3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MKQEAgLTAsMCArMSwxMiBAQAorZGl2
IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKKy5mb28geworICAgIGNvbG9yOiBibGFjazsK
KyAgICBtYXJnaW46IDEwcHggMCAycHg7Cit9CisKKy5mb28sIC5mb286OmJlZm9yZSB7CisgICAg
Y29sb3I6IGJsdWU7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWVkaXQtcmV3cml0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWVkaXQtcmV3cml0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDYyNWFiMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9z
dHlsZXMtZWRpdC1yZXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMzIEBACitUZXN0cyB0
aGF0IHN0eWxlIGVkaXRpbmcgcHJvcGVybHkgdXBkYXRlcyBDU1Mgc291cmNlLgorCitCZWZvcmUg
Y2hhbmdlOgorZGl2IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKKy5mb28geworICAgIGNv
bG9yOiBibGFjazsKKyAgICBtYXJnaW46IDEwcHggMCAycHg7Cit9CisKKy5mb28sIC5mb286OmJl
Zm9yZSB7CisgICAgY29sb3I6IGJsdWU7Cit9CisKK0FmdGVyIGNoYW5nZToKK2RpdiB7CisgICAg
LyogZm9udC1zaXplOiAxMnB4OyAqLworfQorCisuZm9vIHsKKyAgICBjb2xvcjogZ3JlZW4gIWlt
cG9ydGFudDsKKyAgICBib3JkZXI6IHNvbGlkIHJnYigwLCAyNTUsIDApOworYm9yZGVyLWxlZnQt
d2lkdGg6IDNweCAhaW1wb3J0YW50OworYm9yZGVyLWNvbG9yOiByZ2IoMCwgMjU1LCAwKTsKK30K
KworLmZvbywgLmZvbzo6YmVmb3JlIHsKKyAgICBjb2xvcjogYmx1ZTsKK30KKworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLWVkaXQtcmV3cml0ZS5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1lZGl0LXJld3JpdGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmY5NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1lZGl0LXJld3JpdGUuaHRtbApAQCAtMCwwICsxLDE0MiBA
QAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2Vz
L3N0eWxlcy1lZGl0LXJld3JpdGUuY3NzIiAvPgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVt
ZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sK
KyAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCisgICAgeworICAgICAgICBpZiAocmVzdWx0
ID09PSAicmVmcmVzaGluZyIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGR1bXBBcnJh
eShyZXN1bHQpOworICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IoImZyb250ZW5kX3J1blRlc3QiLCBjYWxsYmFjayk7Cit9CisKKy8vIEZyb250
ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxl
cikKK3sKKyAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNlVHJh
Y2tpbmdFbmFibGVkKSB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZW5hYmxlUmVzb3VyY2VU
cmFja2luZyhmYWxzZSk7CisgICAgICAgIHJldHVybiAicmVmcmVzaGluZyI7CisgICAgfQorICAg
IHRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBmcm9udGVuZF9leHBhbmRET01T
dWJ0cmVlQW5kUnVuKHRlc3RDb250cm9sbGVyLCBudWxsLCBmcm9udGVuZF9zZWxlY3RGb29FbGVt
ZW50KTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfc2VsZWN0Rm9vRWxlbWVudCh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICBmcm9udGVuZF9zZWxlY3RFbGVtZW50QW5kUnVuKHRlc3RDb250cm9sbGVy
LCAiZm9vIiwgZnJvbnRlbmRfZHVtcEZvb1N0eWxlKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRf
ZHVtcEZvb1N0eWxlKHRlc3RDb250cm9sbGVyKQoreworICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaCgiQmVmb3JlIGNoYW5nZToiKTsKKyAgICBmcm9udGVuZF9kdW1wQ1NTVGV4dCh0ZXN0
Q29udHJvbGxlciwgZmFsc2UsIGZyb250ZW5kX2FsdGVyRm9vU3R5bGVzLmJpbmQodGhpcywgdGVz
dENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfYWx0ZXJGb29TdHlsZXModGVz
dENvbnRyb2xsZXIpCit7CisgICAgZnJvbnRlbmRfdG9nZ2xlUHJvcGVydHkoNCwgImZvbnQtc2l6
ZSIsIGZhbHNlKTsKKyAgICBmcm9udGVuZF9hcHBseVN0eWxlVGV4dCgzLCAiY29sb3IiLCAiY29s
b3I6IGdyZWVuICFpbXBvcnRhbnQiKTsKKyAgICBmcm9udGVuZF9hcHBseVN0eWxlVGV4dCgzLCAi
bWFyZ2luIiwgImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIik7CisgICAgZnJvbnRlbmRfYWRkUHJv
cGVydHkoMywgImJvcmRlci1sZWZ0LXdpZHRoOiAzcHggIWltcG9ydGFudCIpOworICAgIGZyb250
ZW5kX2FkZFByb3BlcnR5KDMsICJib3JkZXItY29sb3I6ICMwMEZGMDAiKTsKKyAgICB0ZXN0Q29u
dHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZyb250ZW5kX2R1bXBSZXN1bHRzLmJp
bmQodGhpcywgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfYXBwbHlT
dHlsZVRleHQoc2VjdGlvbk9yZGluYWwsIHByb3BlcnR5TmFtZSwgdGV4dCkKK3sKKyAgICB2YXIg
dHJlZUl0ZW0gPSBmcm9udGVuZF9nZXRFbGVtZW50U3R5bGVQcm9wZXJ0eVRyZWVJdGVtKHByb3Bl
cnR5TmFtZSwgc2VjdGlvbk9yZGluYWwpOworICAgIHRyZWVJdGVtLmFwcGx5U3R5bGVUZXh0KHRl
eHQpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF90b2dnbGVQcm9wZXJ0eShzZWN0aW9uT3JkaW5h
bCwgcHJvcGVydHlOYW1lLCBlbmFibGVkKQoreworICAgIHZhciB0cmVlSXRlbSA9IGZyb250ZW5k
X2dldEVsZW1lbnRTdHlsZVByb3BlcnR5VHJlZUl0ZW0ocHJvcGVydHlOYW1lLCBzZWN0aW9uT3Jk
aW5hbCk7CisgICAgdHJlZUl0ZW0udG9nZ2xlRW5hYmxlZCh7IHRhcmdldDogeyBjaGVja2VkOiBl
bmFibGVkIH0gfSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2FkZFByb3BlcnR5KHNlY3Rpb25P
cmRpbmFsLCBwcm9wZXJ0eVRleHQpCit7CisgICAgdmFyIHN0eWxlU2VjdGlvbiA9IFdlYkluc3Bl
Y3Rvci5wYW5lbHMuZWxlbWVudHMuc2lkZWJhclBhbmVzLnN0eWxlcy5zZWN0aW9uc1swXVtzZWN0
aW9uT3JkaW5hbF07CisgICAgdHJlZUl0ZW0gPSBzdHlsZVNlY3Rpb24uYWRkTmV3QmxhbmtQcm9w
ZXJ0eSgpOworICAgIHRyZWVJdGVtLnN0YXJ0RWRpdGluZygpOworICAgIHRyZWVJdGVtLmxpc3RJ
dGVtRWxlbWVudC50ZXh0Q29udGVudCA9IHByb3BlcnR5VGV4dDsKKyAgICB0cmVlSXRlbS5saXN0
SXRlbUVsZW1lbnQuZGlzcGF0Y2hFdmVudChmcm9udGVuZF9rZXlkb3duRXZlbnQoIkVudGVyIikp
OworfQorCitmdW5jdGlvbiBmcm9udGVuZF9rZXlkb3duRXZlbnQoa2V5SWRlbnRpZmllcikKK3sK
KyAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIktleWJvYXJkRXZlbnQiKTsKKyAg
ICBldnQuaW5pdEtleWJvYXJkRXZlbnQoImtleWRvd24iLCB0cnVlIC8qIGNhbiBidWJibGUgKi8s
IHRydWUgLyogY2FuIGNhbmNlbCAqLywgbnVsbCAvKiB2aWV3ICovLCBrZXlJZGVudGlmaWVyLCAi
Iik7CisgICAgcmV0dXJuIGV2dDsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfZHVtcENTU1RleHQo
dGVzdENvbnRyb2xsZXIsIG1vZGlmaWVkLCBjb250aW51YXRpb24pCit7CisgICAgdmFyIHJlc291
cmNlc1BhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXM7CisgICAgdmFyIGZvdW5k
OworICAgIGZvciAodmFyIGlkIGluIFdlYkluc3BlY3Rvci5yZXNvdXJjZXMpIHsKKyAgICAgICAg
dmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlc1tpZF07CisgICAgICAgIGlmIChy
ZXNvdXJjZS51cmwuaW5kZXhPZigic3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MiKSAhPT0gLTEpIHsK
KyAgICAgICAgICAgIHJlc291cmNlc1BhbmVsLnNob3dSZXNvdXJjZShyZXNvdXJjZSk7CisgICAg
ICAgICAgICB2YXIgdmlldyA9IHJlc291cmNlc1BhbmVsLnJlc291cmNlVmlld0ZvclJlc291cmNl
KHJlc291cmNlKTsKKyAgICAgICAgICAgIGlmIChtb2RpZmllZCkgeworICAgICAgICAgICAgICAg
IHZpZXcuc2VsZWN0TG9jYWxDb250ZW50VGFiKCk7CisgICAgICAgICAgICAgICAgaWYgKCF2aWV3
LmxvY2FsU291cmNlRnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKCJOTyBMT0NBTCBDT05URU5UIFRBQiBGT1VORCIpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG1v
ZGVsID0gdmlldy5sb2NhbFNvdXJjZUZyYW1lLnRleHRNb2RlbDsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdmlldy5zZWxlY3RDb250ZW50VGFiKCk7CisgICAgICAgICAg
ICAgICAgdmFyIG1vZGVsID0gdmlldy5zb3VyY2VGcmFtZS50ZXh0TW9kZWw7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVz
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWwu
bGluZXNDb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2gobW9kZWwubGluZShpKSk7CisgICAgICAgICAgICAgICAgY29udGludWF0aW9uKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICghZm91bmQpCisgICAgICAgIGNvbnRp
bnVhdGlvbigpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9kdW1wUmVzdWx0cyh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIkFmdGVyIGNoYW5nZToi
KTsKKyAgICBmcm9udGVuZF9kdW1wQ1NTVGV4dCh0ZXN0Q29udHJvbGxlciwgdHJ1ZSwgZnJvbnRl
bmRfZGlzYWJsZVJlc291cmNlVHJhY2tpbmcuYmluZCh0aGlzLCB0ZXN0Q29udHJvbGxlcikpOwor
fQorCitmdW5jdGlvbiBmcm9udGVuZF9kaXNhYmxlUmVzb3VyY2VUcmFja2luZyh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGZh
bHNlKTsKKworICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUod2luZG93Ll9fcmVz
dWx0KTsKKyAgICB9KTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0i
b25sb2FkKCkiPgorPHA+CitUZXN0cyB0aGF0IHN0eWxlIGVkaXRpbmcgcHJvcGVybHkgdXBkYXRl
cyBDU1Mgc291cmNlLgorPC9wPgorCis8ZGl2IGlkPSJjb250YWluZXIiIHN0eWxlPSJmb250LXdl
aWdodDpib2xkIj4KKyAgICA8ZGl2IGNsYXNzPSJmb28iIGlkPSJmb28iPjwvZGl2PgorPC9kaXY+
CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aAppbmRleCBiYzk0NzNmLi5lZmIyNDkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJTY3JpcHRBcnJheS5oIgogI2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCAzYTE0ODMwLi4wZWFkN2YzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xMDgwLDEwICsxMDgwLDYg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0UnVsZVJhbmdlcyhsb25nIGNhbGxJZCwgbG9u
ZyBzdHlsZVNoZWV0SWQpCiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3Jl
KCktPnN0eWxlU2hlZXRGb3JJZChzdHlsZVNoZWV0SWQpOwogICAgIGlmIChzdHlsZVNoZWV0ICYm
IHN0eWxlU2hlZXQtPmRvYygpKSB7CiAgICAgICAgIEhhc2hNYXA8bG9uZywgU291cmNlUmFuZ2U+
IHJ1bGVSYW5nZXMgPSBjc3NTdG9yZSgpLT5nZXRSdWxlUmFuZ2VzKHN0eWxlU2hlZXQpOwotICAg
ICAgICBpZiAoIXJ1bGVSYW5nZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kLT5k
aWRHZXRTdHlsZVNoZWV0KGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNo
TWFwPGxvbmcsIFNvdXJjZVJhbmdlPjo6aXRlcmF0b3IgaXQgPSBydWxlUmFuZ2VzLmJlZ2luKCk7
IGl0ICE9IHJ1bGVSYW5nZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIGlmIChpdC0+c2Vj
b25kLnNlY29uZCkgewpAQCAtMTE4NiwxMiArMTE4MiwxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJp
bmcmCiAgICAgaWYgKGRpc2FibGVkU3R5bGUpCiAgICAgICAgIGRpc2FibGVkU3R5bGUtPnJlbW92
ZShwcm9wZXJ0eU5hbWUpOwogCi0gICAgaW50IHN0eWxlVGV4dExlbmd0aCA9IHN0eWxlVGV4dC5s
ZW5ndGgoKTsKLQogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdGVtcE11
dGFibGVTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICB0
ZW1wTXV0YWJsZVN0eWxlLT5wYXJzZURlY2xhcmF0aW9uKHN0eWxlVGV4dCk7CiAgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogdGVtcFN0eWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlv
bio+KHRlbXBNdXRhYmxlU3R5bGUuZ2V0KCkpOwogCisgICAgaW50IHN0eWxlVGV4dExlbmd0aCA9
IHN0eWxlVGV4dC5sZW5ndGgoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjaGFuZ2VkUHJvcGVydGll
czsKICAgICBpZiAodGVtcFN0eWxlLT5sZW5ndGgoKSB8fCAhc3R5bGVUZXh0TGVuZ3RoKSB7CiAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICAvLyBUaGUgaW5wdXQgd2FzIHBh
cnNhYmxlIG9yIHRoZSB1c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZQpAQCAt
MTE5OSwzNiArMTE5NSwzNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4
dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIC8vIGEg
c2hvcnRoYW5kIHJlbW92ZSBhbGwgdGhlIGxvbmdoYW5kIHByb3BlcnRpZXMuCiAgICAgICAgIGlm
IChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcGVydHlOYW1lKS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcHMgPSBsb25naGFuZFByb3Bl
cnRpZXMoc3R5bGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyAhZWMgJiYgaSA8IGxvbmdoYW5kUHJvcHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyAhZWMgJiYgaSA8IGxvbmdoYW5kUHJvcHMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkobG9uZ2hhbmRQcm9wc1tp
XSwgZWMpOworICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmFwcGVuZChsb25naGFu
ZFByb3BzW2ldKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIC8vIEV4cGxp
Y2l0bHkgZGVsZXRlIHByb3BlcnRpZXMgd2l0aCBubyBzaG9ydGhhbmRzIGFzIHdlbGwgYXMgc2hv
cnRoYW5kcyB0aGVtc2VsdmVzLgogICAgICAgICBpZiAoIWVjKQogICAgICAgICAgICAgc3R5bGUt
PnJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgZWMpOwogCiAgICAgICAgIGlmIChlYykgewot
ICAgICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwg
SW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpKTsKKyAgICAg
ICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UsIEluc3Bl
Y3RvclZhbHVlOjpudWxsKCksIHRvQXJyYXkoY2hhbmdlZFByb3BlcnRpZXMpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhh
dCB0aGUgcHJvcGVydHkgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLgogICAgIGlmICghc3R5bGVU
ZXh0TGVuZ3RoKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hhbmdlZFByb3Bl
cnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgIGNoYW5nZWRQcm9wZXJ0
aWVzLT5wdXNoU3RyaW5nKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFw
cGx5U3R5bGVUZXh0KGNhbGxJZCwgdHJ1ZSwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgY2hhbmdl
ZFByb3BlcnRpZXMucmVsZWFzZSgpKTsKKyAgICAgICAgY2hhbmdlZFByb3BlcnRpZXMuYXBwZW5k
KHByb3BlcnR5TmFtZSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNh
bGxJZCwgdHJ1ZSwgYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSksIHRvQXJyYXkoY2hh
bmdlZFByb3BlcnRpZXMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghdGVt
cFN0eWxlLT5sZW5ndGgoKSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4
dChjYWxsSWQsIGZhbHNlLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCkpOworICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQs
IGZhbHNlLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCB0b0FycmF5KGNoYW5nZWRQcm9wZXJ0aWVz
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBJdGVyYXRlIG9mIHRoZSBwcm9w
ZXJ0aWVzIG9uIHRoZSB0ZXN0IGVsZW1lbnQncyBzdHlsZSBkZWNsYXJhdGlvbiBhbmQKICAgICAv
LyBhZGQgdGhlbSB0byB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4gV2UgdGFrZSBjYXJlIHRv
IG1vdmUgc2hvcnRoYW5kcy4KICAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOwot
ICAgIFZlY3RvcjxTdHJpbmc+IGNoYW5nZWRQcm9wZXJ0aWVzOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRlbXBTdHlsZS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBTdHJpbmcg
bmFtZSA9IHRlbXBTdHlsZS0+aXRlbShpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0NTU1N0eWxlTW9kZWwuanMKaW5kZXggNjZhMjBjZS4uNTI3ZTk0NSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKQEAgLTMwLDEyICszMCw2MiBAQAog
CiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbCA9IGZ1bmN0aW9uKCkKIHsKKyAgICB0aGlzLnJl
c2V0KCk7CisgICAgV2ViSW5zcGVjdG9yLnNlc3Npb25TZXR0aW5ncy5hZGRFdmVudExpc3RlbmVy
KCJsb2FkZWQiLCB0aGlzLl9zZXNzaW9uTG9hZGVkLCB0aGlzKTsKIH0KIAogV2ViSW5zcGVjdG9y
LkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0geworICAgIHJlc2V0OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB0aGlzLl9pZFRvT3JpZ2luYWxTdHlsZSA9IHt9OworICAgICAgICB0aGlzLl9k
ZWx0YVByb2Nlc3NvciA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5EZWx0YVByb2Nl
c3Nvcih0aGlzLnNhdmVTdGF0ZS5iaW5kKHRoaXMpKTsKKyAgICB9LAorCisgICAgX3Nlc3Npb25M
b2FkZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2lkVG9PcmlnaW5hbFN0eWxl
ID0ge307CisgICAgICAgIHZhciBzdHlsZVNoZWV0RGVsdGFzID0gV2ViSW5zcGVjdG9yLnNlc3Np
b25TZXR0aW5ncy5zdHlsZVNoZWV0RGVsdGFzOworICAgICAgICBpZiAoIXN0eWxlU2hlZXREZWx0
YXMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gU2V0IGRlc2VyaWFsaXplZCBv
YmplY3QgcHJvdG90eXBlcyBhbmQgcmVtZW1iZXIgc3RvcmVkIG9yaWdpbmFsIHN0eWxlcy4KKyAg
ICAgICAgZm9yICh2YXIgaWQgaW4gc3R5bGVTaGVldERlbHRhcykgeworICAgICAgICAgICAgdmFy
IGRlbHRhID0gc3R5bGVTaGVldERlbHRhc1tpZF07CisgICAgICAgICAgICBkZWx0YS5fX3Byb3Rv
X18gPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZVNoZWV0RGVsdGEucHJvdG90eXBl
OworICAgICAgICAgICAgZm9yICh2YXIgc3R5bGVJZCBpbiBkZWx0YS5zdHlsZU1hcCkgeworICAg
ICAgICAgICAgICAgIHZhciBvcmlnaW5hbFN0eWxlID0gZGVsdGEuc3R5bGVNYXBbc3R5bGVJZF0u
b3JpZ2luYWxTdHlsZTsKKyAgICAgICAgICAgICAgICBvcmlnaW5hbFN0eWxlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZTsKKyAgICAgICAgICAg
ICAgICBpZiAob3JpZ2luYWxTdHlsZS5pZCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faWRU
b09yaWdpbmFsU3R5bGVbb3JpZ2luYWxTdHlsZS5pZF0gPSBvcmlnaW5hbFN0eWxlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fZGVsdGFQcm9jZXNzb3Iuc3RhdGVP
YmplY3QgPSBzdHlsZVNoZWV0RGVsdGFzOworICAgIH0sCisKICAgICBnZXRTdHlsZXNBc3luYzog
ZnVuY3Rpb24obm9kZUlkLCBhdXRoT25seSwgdXNlckNhbGxiYWNrKQogICAgIHsKLSAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5nZXRTdHlsZXMoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAodXNl
ckNhbGxiYWNrKSwgbm9kZUlkLCBhdXRoT25seSk7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNr
KHN0eWxlcykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0eWxlcykKKyAgICAgICAgICAg
ICAgICB0aGlzLl91cGRhdGVTdHlsZXMoc3R5bGVzKTsKKyAgICAgICAgICAgIHVzZXJDYWxsYmFj
ayhzdHlsZXMpOworICAgICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRTdHls
ZXMoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2suYmluZCh0aGlzKSksIG5vZGVJ
ZCwgYXV0aE9ubHkpOworICAgIH0sCisKKyAgICBfdXBkYXRlU3R5bGVzOiBmdW5jdGlvbihzdHls
ZXMpCisgICAgeworICAgICAgICBpZiAoc3R5bGVzLmlubGluZVN0eWxlICYmICF0aGlzLl9pZFRv
T3JpZ2luYWxTdHlsZVtzdHlsZXMuaW5saW5lU3R5bGUuaWRdKQorICAgICAgICAgICAgdGhpcy5f
aWRUb09yaWdpbmFsU3R5bGVbc3R5bGVzLmlubGluZVN0eWxlLmlkXSA9IFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUoc3R5bGVzLmlubGluZVN0eWxlKTsKKworICAg
ICAgICB2YXIgY3NzUnVsZXMgPSBzdHlsZXMubWF0Y2hlZENTU1J1bGVzOworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGNzc1J1bGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIg
cnVsZSA9IGNzc1J1bGVzW2ldOworICAgICAgICAgICAgaWYgKHJ1bGUuc3R5bGUuaWQgJiYgIShy
dWxlLnN0eWxlLmlkIGluIHRoaXMuX2lkVG9PcmlnaW5hbFN0eWxlKSkKKyAgICAgICAgICAgICAg
ICB0aGlzLl9pZFRvT3JpZ2luYWxTdHlsZVtydWxlLnN0eWxlLmlkXSA9IFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUocnVsZS5zdHlsZSk7IC8vIG9ubHkgZm9yIGJv
dW5kIHN0eWxlcworICAgICAgICB9CiAgICAgfSwKIAogICAgIGdldENvbXB1dGVkU3R5bGVBc3lu
YzogZnVuY3Rpb24obm9kZUlkLCB1c2VyQ2FsbGJhY2spCkBAIC04MywxMCArMTMzLDE2IEBAIFdl
Ykluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgdmFyIG5ld1N0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRp
b24ucGFyc2VTdHlsZShuZXdQYXlsb2FkKTsKKyAgICAgICAgICAgIGlmIChuZXdTdHlsZS5wYXJl
bnRTdHlsZVNoZWV0SWQpCisgICAgICAgICAgICAgICAgdGhpcy5fZGVsdGFQcm9jZXNzb3IucHJv
Y2Vzc1N0eWxlRGVsdGEodGhpcy5faWRUb09yaWdpbmFsU3R5bGVbc3R5bGVJZF0sIG5ld1N0eWxl
LCBbIHByb3BlcnR5TmFtZSBdKTsKKwogICAgICAgICAgICAgdXNlckNhbGxiYWNrKG5ld1N0eWxl
KTsKKworICAgICAgICAgICAgaWYgKG5ld1N0eWxlLnBhcmVudFN0eWxlU2hlZXRJZCkKKyAgICAg
ICAgICAgICAgICB0aGlzLl9kZWx0YVByb2Nlc3Nvci51cGRhdGVTdHlsZVNoZWV0Q29udGVudHMo
bmV3U3R5bGUucGFyZW50U3R5bGVTaGVldElkLCBzdHlsZUlkKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEluc3BlY3RvckJhY2tlbmQudG9nZ2xlU3R5bGVFbmFibGVkKFdlYkluc3BlY3Rvci5DYWxs
YmFjay53cmFwKGNhbGxiYWNrKSwgc3R5bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNhYmxlZCk7Cisg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQudG9nZ2xlU3R5bGVFbmFibGVkKFdlYkluc3BlY3Rvci5D
YWxsYmFjay53cmFwKGNhbGxiYWNrLmJpbmQodGhpcykpLCBzdHlsZUlkLCBwcm9wZXJ0eU5hbWUs
IGRpc2FibGVkKTsKICAgICB9LAogCiAgICAgc2V0Q1NTVGV4dDogZnVuY3Rpb24oc3R5bGVJZCwg
Y3NzVGV4dCkKQEAgLTEwMSwxMSArMTU3LDQ5MSBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2Rl
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICAg
ICAgZmFpbHVyZUNhbGxiYWNrKCk7CiAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbmV3U3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVN0
eWxlKG5ld1BheWxvYWQpOworICAgICAgICAgICAgICAgIGlmIChuZXdTdHlsZS5wYXJlbnRTdHls
ZVNoZWV0SWQpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlbHRhUHJvY2Vzc29yLnByb2Nl
c3NTdHlsZURlbHRhKHRoaXMuX2lkVG9PcmlnaW5hbFN0eWxlW3N0eWxlSWRdLCBuZXdTdHlsZSwg
Y2hhbmdlZFByb3BlcnRpZXMpOworCiAgICAgICAgICAgICAgICAgdmFyIG5ld1N0eWxlID0gbmV3
UGF5bG9hZCA/IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlU3R5bGUobmV3
UGF5bG9hZCkgOiBudWxsOwogICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhuZXdTdHls
ZSwgY2hhbmdlZFByb3BlcnRpZXMpOworCisgICAgICAgICAgICAgICAgaWYgKG5ld1N0eWxlLnBh
cmVudFN0eWxlU2hlZXRJZCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVsdGFQcm9jZXNz
b3IudXBkYXRlU3R5bGVTaGVldENvbnRlbnRzKG5ld1N0eWxlLnBhcmVudFN0eWxlU2hlZXRJZCwg
c3R5bGVJZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLmFwcGx5U3R5bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNr
LmJpbmQodGhpcykpLCBzdHlsZUlkLCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSk7CisgICAgfSwK
KworICAgIHNhdmVTdGF0ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LnNlc3Npb25TZXR0aW5ncy5zdHlsZVNoZWV0RGVsdGFzID0gdGhpcy5fZGVsdGFQcm9jZXNzb3Iu
c3RhdGVPYmplY3Q7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5EZWx0
YVByb2Nlc3NvciA9IGZ1bmN0aW9uKHBlcnNpc3RDYWxsYmFjaykKK3sKKyAgICB0aGlzLl9wZXJz
aXN0Q2FsbGJhY2sgPSBwZXJzaXN0Q2FsbGJhY2s7CisgICAgdGhpcy5fc3R5bGVTaGVldERlbHRh
cyA9IHt9OworICAgIHRoaXMuX3BhdGNoZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9k
ZWwuU3R5bGVTaGVldFBhdGNoZXIoKTsKKyAgICB0aGlzLl9wYXRjaGVyLnNldERlbHRhcyh0aGlz
Ll9zdHlsZVNoZWV0RGVsdGFzKTsKK30KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRGVs
dGFQcm9jZXNzb3IucHJvdG90eXBlID0geworICAgIHNldCBzdGF0ZU9iamVjdCh4KQorICAgIHsK
KyAgICAgICAgdGhpcy5fcG9wdWxhdGVTdHlsZVNoZWV0RGVsdGFzKHgpOworICAgIH0sCisKKyAg
ICBnZXQgc3RhdGVPYmplY3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlU2hl
ZXREZWx0YXM7CisgICAgfSwKKworICAgIHByb2Nlc3NTdHlsZURlbHRhOiBmdW5jdGlvbihvcmln
aW5hbFN0eWxlLCBuZXdTdHlsZSwgY2hhbmdlZFByb3BlcnRpZXMpCisgICAgeworICAgICAgICBj
b25zdCBzdHlsZVNoZWV0RGVsdGFNYXAgPSB0aGlzLl9zdHlsZVNoZWV0RGVsdGFzOworICAgICAg
ICBjb25zdCBzdHlsZVNoZWV0SWQgPSBuZXdTdHlsZS5wYXJlbnRTdHlsZVNoZWV0SWQ7CisgICAg
ICAgIHZhciBzdHlsZVNoZWV0RGVsdGEgPSBzdHlsZVNoZWV0RGVsdGFNYXBbc3R5bGVTaGVldElk
XTsKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0RGVsdGEpIHsKKyAgICAgICAgICAgIHN0eWxlU2hl
ZXREZWx0YSA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZVNoZWV0RGVsdGEo
KTsKKyAgICAgICAgICAgIHN0eWxlU2hlZXREZWx0YU1hcFtzdHlsZVNoZWV0SWRdID0gc3R5bGVT
aGVldERlbHRhOworICAgICAgICB9CisgICAgICAgIHN0eWxlU2hlZXREZWx0YS50cmFja1N0eWxl
KG9yaWdpbmFsU3R5bGUpOworICAgICAgICBzdHlsZVNoZWV0RGVsdGEudXBkYXRlKGNoYW5nZWRQ
cm9wZXJ0aWVzLCBuZXdTdHlsZSk7CisKKyAgICAgICAgdGhpcy5fcGVyc2lzdENhbGxiYWNrKCk7
CisgICAgfSwKKworICAgIF9wb3B1bGF0ZVN0eWxlU2hlZXREZWx0YXM6IGZ1bmN0aW9uKHN0eWxl
U2hlZXREZWx0YXMpCisgICAgeworICAgICAgICB0aGlzLl9zdHlsZVNoZWV0RGVsdGFzID0gc3R5
bGVTaGVldERlbHRhczsKKyAgICAgICAgdGhpcy5fcGF0Y2hlci5zZXREZWx0YXMoc3R5bGVTaGVl
dERlbHRhcyk7CisgICAgfSwKKworICAgIHVwZGF0ZVN0eWxlU2hlZXRDb250ZW50czogZnVuY3Rp
b24ocGFyZW50U3R5bGVTaGVldElkLCBzdHlsZUlkKQorICAgIHsKKyAgICAgICAgdGhpcy5fcGF0
Y2hlci51cGRhdGVTdHlsZVRleHQocGFyZW50U3R5bGVTaGVldElkLCBzdHlsZUlkKTsKKyAgICB9
LAorfQorCitXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZVNoZWV0RGVsdGEgPSBmdW5j
dGlvbigpCit7CisgICAgdGhpcy5zdHlsZU1hcCA9IHt9OworICAgIHRoaXMuZGVsdGFDb3VudCA9
IDA7Cit9CisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlU2hlZXREZWx0YS5wcm90
b3R5cGUgPSB7CisgICAgdXBkYXRlOiBmdW5jdGlvbihjaGFuZ2VkUHJvcGVydGllcywgbmV3U3R5
bGUpCisgICAgeworICAgICAgICB2YXIgc3R5bGVEYXRhID0gdGhpcy5zdHlsZU1hcFtuZXdTdHls
ZS5pZF07CisgICAgICAgIGlmICghc3R5bGVEYXRhKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB2YXIgcHJvcGVydHlEZWx0YXMgPSBzdHlsZURhdGEuZGVsdGFzOworICAgICAgICB2YXIg
b3JpZ2luYWxTdHlsZSA9IHN0eWxlRGF0YS5vcmlnaW5hbFN0eWxlOworICAgICAgICB2YXIgY2hh
bmdlZFByb3BlcnRpZXNTZXQgPSB7fTsKKworICAgICAgICB2YXIgZm91bmRTaG9ydGhhbmRzID0g
e307CisgICAgICAgIHZhciBkaXNhYmxlZFByb3BlcnRpZXMgPSBuZXdTdHlsZS5fX2Rpc2FibGVk
UHJvcGVydHlOYW1lcyB8fCB7fTsKKworICAgICAgICB2YXIgdW5pcXVlUHJvcGVydGllcyA9IHt9
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZWRQcm9wZXJ0aWVzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBjaGFuZ2VkUHJvcGVydGllc1NldFtjaGFuZ2VkUHJvcGVydGll
c1tpXV0gPSB0cnVlOworICAgICAgICAgICAgdW5pcXVlUHJvcGVydGllc1tjaGFuZ2VkUHJvcGVy
dGllc1tpXV0gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bmV3U3R5bGUubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB1bmlxdWVQcm9wZXJ0aWVzW25ld1N0
eWxlW2ldXSA9IHRydWU7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3JpZ2luYWxTdHls
ZS5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHVuaXF1ZVByb3BlcnRpZXNbb3JpZ2luYWxTdHls
ZVtpXV0gPSB0cnVlOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZWRQcm9wZXJ0
aWVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgdW5pcXVlUHJvcGVydGllc1tjaGFuZ2VkUHJv
cGVydGllc1tpXV0gPSB0cnVlOworICAgICAgICBmb3IgKHZhciBuYW1lIGluIGRpc2FibGVkUHJv
cGVydGllcykKKyAgICAgICAgICAgIHVuaXF1ZVByb3BlcnRpZXNbbmFtZV0gPSB0cnVlOworCisg
ICAgICAgIHZhciBkZWxldGVkTG9uZ2hhbmRzID0ge307CisgICAgICAgIHZhciBpbXBsaWNpdGx5
TW9kaWZpZWRTaG9ydGhhbmRzID0ge307CisKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisg
ICAgICAgIGZ1bmN0aW9uIHNldExvbmdoYW5kRGVsZXRlZERlbHRhKG5hbWUsIGRpc2FibGVkKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBDcmVhdGUgZGVsZXRlZC1kZWx0YSBmb3IgYSBsb25n
aGFuZCBkZWxldGVkIGJ5IHNldHRpbmcgYSBjb3JyZXNwb25kaW5nIHNob3J0aGFuZCBwcm9wZXJ0
eS4KKyAgICAgICAgICAgIHZhciBkZWxldGVkRGVsdGEgPSBwcm9wZXJ0eURlbHRhc1tuYW1lXTsK
KyAgICAgICAgICAgIGlmIChkZWxldGVkRGVsdGEpIHsKKyAgICAgICAgICAgICAgICBkZWxldGVk
RGVsdGEubmV3VmFsdWUgPSAiIjsKKyAgICAgICAgICAgICAgICBkZWxldGVkRGVsdGEubmV3UHJp
b3JpdHkgPSAiIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIG9s
ZFByb3BlcnR5QXNMb25naGFuZCA9IHNlbGYuZ2V0UHJvcGVydHkob3JpZ2luYWxTdHlsZSwgbmFt
ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIGlmIChvbGRQcm9wZXJ0eUFzTG9uZ2hhbmQudmFs
dWUgIT09ICIiKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREZWx0YSA9IG5ldyBXZWJJ
bnNwZWN0b3IuUHJvcGVydHlEZWx0YShvbGRQcm9wZXJ0eUFzTG9uZ2hhbmQsIHt2YWx1ZTogIiIs
IHByaW9yaXR5OiAiIiwgZGlzYWJsZWQ6IGRpc2FibGVkfSk7CisgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5RGVsdGFzW25hbWVdID0gZGVsZXRlZERlbHRhOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuYXBw
bHlTdHlsZVRleHQoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2spLCBzdHlsZUlk
LCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGZ1bmN0aW9uIGZpbGxJbXBsaWNp
dGx5TW9kaWZpZWRTaG9ydGhhbmRzKG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgbWlnaHQgYmUgYW4gZXhwbGljaXRseSBtb2RpZmllZCBsb25naGFuZCwgb3IgYSBzZWNvbmQt
bGV2ZWwgc2hvcnRoYW5kIChlLmcuIGJvcmRlciA8LSBib3JkZXItd2lkdGggPC0gYm9yZGVyLXRv
cC13aWR0aCksCisgICAgICAgICAgICAvLyBpbiB3aGljaCBjYXNlIGdldFByb3BlcnR5U2hvcnRo
YW5kIHJldHVybnMgIiIuIFVzZSBhIHdvcmthcm91bmQgZm9yIGRldGVjdGluZyB0aGUgYXNzb2Np
YXRlZCBzaG9ydGhhbmRzLgorICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IG5hbWU7CisgICAg
ICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgdmFyIGFzc29jaWF0ZWRTaG9ydGhhbmQgPSBz
ZWxmLmdldEFzc29jaWF0ZWRTaG9ydGhhbmQoY2FuZGlkYXRlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXNzb2NpYXRlZFNob3J0aGFuZCAmJiAhY2hhbmdlZFByb3BlcnRpZXNTZXRbYXNzb2NpYXRl
ZFNob3J0aGFuZF0pCisgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0bHlNb2RpZmllZFNob3J0
aGFuZHNbYXNzb2NpYXRlZFNob3J0aGFuZF0gPSB0cnVlOworICAgICAgICAgICAgICAgIGNhbmRp
ZGF0ZSA9IGFzc29jaWF0ZWRTaG9ydGhhbmQ7CisgICAgICAgICAgICB9IHdoaWxlIChjYW5kaWRh
dGUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB1bmlxdWVQcm9wZXJ0
aWVzKSB7CisgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSBuYW1lIGluIGRpc2FibGVkUHJvcGVy
dGllczsKKyAgICAgICAgICAgIHZhciBzaG9ydGhhbmROYW1lID0gIWRpc2FibGVkID8gbmV3U3R5
bGUuZ2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSkgOiBudWxsOworICAgICAgICAgICAgdmFyIG5l
d1Byb3BlcnR5QXNTaG9ydGhhbmQgPSB0aGlzLmdldFByb3BlcnR5KG5ld1N0eWxlLCBuYW1lLCB0
cnVlKTsKKyAgICAgICAgICAgIHZhciBuYW1lSXNTaG9ydGhhbmQgPSAhZGlzYWJsZWQgJiYgKG5l
d1Byb3BlcnR5QXNTaG9ydGhhbmQudmFsdWUgIT09ICIiICYmICFuZXdQcm9wZXJ0eUFzU2hvcnRo
YW5kLmRpc2FibGVkKSB8fCB0aGlzLmdldFByb3BlcnR5KG9yaWdpbmFsU3R5bGUsIG5hbWUsIHRy
dWUpLnZhbHVlICE9PSAiIjsKKyAgICAgICAgICAgIGlmIChuYW1lSXNTaG9ydGhhbmQpCisgICAg
ICAgICAgICAgICAgc2hvcnRoYW5kTmFtZSA9IG5hbWU7CisKKyAgICAgICAgICAgIGlmIChzaG9y
dGhhbmROYW1lICYmIHNob3J0aGFuZE5hbWUgaW4gZm91bmRTaG9ydGhhbmRzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGRlbGV0ZWRMb25naGFuZHNbbmFtZV0pCisgICAgICAgICAgICAgICAgICAg
IHNldExvbmdoYW5kRGVsZXRlZERlbHRhKG5hbWUsIGRpc2FibGVkKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmlsbEltcGxpY2l0bHlN
b2RpZmllZFNob3J0aGFuZHMobmFtZSk7CisKKyAgICAgICAgICAgIGlmIChzaG9ydGhhbmROYW1l
KSB7CisgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzW3Nob3J0aGFuZE5hbWVdID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB2YXIgbG9uZ2hhbmQgPSBuYW1lOworICAgICAgICAgICAgICAg
IGlmIChuYW1lSXNTaG9ydGhhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGxvbmdoYW5k
cyA9IG5ld1N0eWxlLmdldExvbmdoYW5kUHJvcGVydGllcyhzaG9ydGhhbmROYW1lKTsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoOyArK2kp
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkTG9uZ2hhbmRzW2xvbmdoYW5kc1tpXV0g
PSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5h
bWUgPSBzaG9ydGhhbmROYW1lOworICAgICAgICAgICAgICAgICAgICBuYW1lSXNTaG9ydGhhbmQg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIHZhciBsb25naGFuZCA9ICIiOworCisgICAgICAgICAgICBpZiAoIWNoYW5nZWRQcm9w
ZXJ0aWVzU2V0W25hbWVdICYmICFjaGFuZ2VkUHJvcGVydGllc1NldFtsb25naGFuZF0pCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEob3Jp
Z2luYWxTdHlsZSwgbmV3U3R5bGUsIG5hbWUsIG5hbWVJc1Nob3J0aGFuZCwgcHJvcGVydHlEZWx0
YXMpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh2YXIgc2hvcnRoYW5kIGluIGltcGxpY2l0
bHlNb2RpZmllZFNob3J0aGFuZHMpCisgICAgICAgICAgICB0aGlzLnVwZGF0ZURlbHRhKG9yaWdp
bmFsU3R5bGUsIG5ld1N0eWxlLCBzaG9ydGhhbmQsIHRydWUsIHByb3BlcnR5RGVsdGFzKTsKKyAg
ICB9LAorCisgICAgZ2V0QXNzb2NpYXRlZFNob3J0aGFuZDogZnVuY3Rpb24oZXhwbGljaXRMb25n
aGFuZCkKKyAgICB7CisgICAgICAgIGlmIChleHBsaWNpdExvbmdoYW5kLmNoYXJBdCgwKSA9PT0g
Ii0iKQorICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICB2YXIgbGFzdERhc2hJbmRleCA9
IGV4cGxpY2l0TG9uZ2hhbmQubGFzdEluZGV4T2YoIi0iKTsKKyAgICAgICAgaWYgKGxhc3REYXNo
SW5kZXggPiAwKQorICAgICAgICAgICAgcmV0dXJuIGV4cGxpY2l0TG9uZ2hhbmQuc3Vic3RyaW5n
KDAsIGxhc3REYXNoSW5kZXgpOworICAgICAgICByZXR1cm4gIiI7CisgICAgfSwKKworICAgIHVw
ZGF0ZURlbHRhOiBmdW5jdGlvbihvcmlnaW5hbFN0eWxlLCBuZXdTdHlsZSwgcHJvcGVydHlOYW1l
LCBpc1Nob3J0aGFuZCwgcHJvcGVydHlEZWx0YXMpCisgICAgeworICAgICAgICB2YXIgbmV3UHJv
cGVydHkgPSB0aGlzLmdldFByb3BlcnR5KG5ld1N0eWxlLCBwcm9wZXJ0eU5hbWUsIGlzU2hvcnRo
YW5kKTsKKyAgICAgICAgdmFyIHByb3BlcnR5RGVsdGEgPSBwcm9wZXJ0eURlbHRhc1twcm9wZXJ0
eU5hbWVdOworICAgICAgICBpZiAoIXByb3BlcnR5RGVsdGEpIHsKKyAgICAgICAgICAgIHZhciBv
bGRQcm9wZXJ0eSA9IHRoaXMuZ2V0UHJvcGVydHkob3JpZ2luYWxTdHlsZSwgcHJvcGVydHlOYW1l
LCBpc1Nob3J0aGFuZCk7CisgICAgICAgICAgICBwcm9wZXJ0eURlbHRhID0gbmV3IFdlYkluc3Bl
Y3Rvci5Qcm9wZXJ0eURlbHRhKG9sZFByb3BlcnR5LCBuZXdQcm9wZXJ0eSk7CisgICAgICAgICAg
ICBwcm9wZXJ0eURlbHRhc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlEZWx0YTsKKyAgICAgICAg
ICAgICsrdGhpcy5kZWx0YUNvdW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJv
cGVydHlEZWx0YS5uZXdWYWx1ZSA9IG5ld1Byb3BlcnR5LnZhbHVlOworICAgICAgICAgICAgcHJv
cGVydHlEZWx0YS5uZXdQcmlvcml0eSA9IG5ld1Byb3BlcnR5LnByaW9yaXR5OworICAgICAgICAg
ICAgcHJvcGVydHlEZWx0YS5kaXNhYmxlZCA9IG5ld1Byb3BlcnR5LmRpc2FibGVkOworICAgICAg
ICB9CisgICAgICAgIGlmIChvcmlnaW5hbFN0eWxlLmlzUHJvcGVydHlJbXBsaWNpdChwcm9wZXJ0
eU5hbWUpKSB7CisgICAgICAgICAgICBwcm9wZXJ0eURlbHRhLm9sZFZhbHVlID0gIiI7CisgICAg
ICAgICAgICBwcm9wZXJ0eURlbHRhLm9sZFByaW9yaXR5ID0gIiI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXRoaXMuX2lzUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5RGVsdGEpKSB7CisgICAg
ICAgICAgICBkZWxldGUgcHJvcGVydHlEZWx0YXNbcHJvcGVydHlOYW1lXTsKKyAgICAgICAgICAg
IC0tdGhpcy5kZWx0YUNvdW50OworICAgICAgICB9CisgICAgfSwKKworICAgIF9pc1Byb3BlcnR5
Q2hhbmdlZDogZnVuY3Rpb24ocHJvcGVydHlEZWx0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBw
cm9wZXJ0eURlbHRhLm5ld1ZhbHVlICE9PSBwcm9wZXJ0eURlbHRhLm9sZFZhbHVlIHx8IHByb3Bl
cnR5RGVsdGEubmV3UHJpb3JpdHkgIT09IHByb3BlcnR5RGVsdGEub2xkUHJpb3JpdHkgfHwgcHJv
cGVydHlEZWx0YS5kaXNhYmxlZDsKKyAgICB9LAorCisgICAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9u
KHN0eWxlLCBwcm9wZXJ0eU5hbWUsIGlzU2hvcnRoYW5kKQorICAgIHsKKyAgICAgICAgdmFyIGRp
c2FibGVkID0gcHJvcGVydHlOYW1lIGluIHN0eWxlLl9fZGlzYWJsZWRQcm9wZXJ0aWVzOworICAg
ICAgICBpZiAoZGlzYWJsZWQpIHsKKyAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0eWxlLl9fZGlz
YWJsZWRQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdOworICAgICAgICAgICAgdmFyIHByaW9y
aXR5ID0gc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllc1twcm9wZXJ0eU5hbWVdOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5tYXNrQWJzZW50
KGlzU2hvcnRoYW5kID8gc3R5bGUuZ2V0U2hvcnRoYW5kVmFsdWUocHJvcGVydHlOYW1lKSA6IHN0
eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICB2YXIgcHJp
b3JpdHkgPSB0aGlzLm1hc2tBYnNlbnQoaXNTaG9ydGhhbmQgPyBzdHlsZS5nZXRTaG9ydGhhbmRQ
cmlvcml0eShwcm9wZXJ0eU5hbWUpIDogc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0
eU5hbWUpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIHByaW9y
aXR5OiBwcmlvcml0eSwgZGlzYWJsZWQ6IGRpc2FibGVkIH07CisgICAgfSwKKworICAgIG1hc2tB
YnNlbnQ6IGZ1bmN0aW9uKHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh2YWx1ZSA9PT0g
bnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/ICIiIDogdmFsdWU7CisgICAgfSwKKworICAg
IHRyYWNrU3R5bGU6IGZ1bmN0aW9uKHN0eWxlKQorICAgIHsKKyAgICAgICAgaWYgKHN0eWxlLmlk
IGluIHRoaXMuc3R5bGVNYXApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gQ3Jl
YXRlIGEgY29weSBvZiBzdHlsZSB3aXRob3V0ICJwYXJlbnRSdWxlIiB0byBhdm9pZCBjeWNsaWMg
c3RydWN0dXJlLgorICAgICAgICB2YXIgc3R5bGVDb3B5ID0ge307CisgICAgICAgIGZvciAodmFy
IHAgaW4gc3R5bGUpIHsKKyAgICAgICAgICAgIGlmIChwICE9PSAicGFyZW50UnVsZSIpCisgICAg
ICAgICAgICAgICAgc3R5bGVDb3B5W3BdID0gc3R5bGVbcF07CisgICAgICAgIH0KKyAgICAgICAg
c3R5bGVDb3B5Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBy
b3RvdHlwZTsKKyAgICAgICAgdGhpcy5zdHlsZU1hcFtzdHlsZS5pZF0gPSB7IG9yaWdpbmFsU3R5
bGU6IHN0eWxlQ29weSwgZGVsdGFzOiB7fSB9OwogICAgIH0KIH0KKworV2ViSW5zcGVjdG9yLlBy
b3BlcnR5RGVsdGEgPSBmdW5jdGlvbihvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpCit7CisgICAg
dGhpcy5vbGRWYWx1ZSA9IG9sZFByb3BlcnR5LnZhbHVlOworICAgIHRoaXMub2xkUHJpb3JpdHkg
PSBvbGRQcm9wZXJ0eS5wcmlvcml0eTsKKyAgICB0aGlzLm5ld1ZhbHVlID0gbmV3UHJvcGVydHku
dmFsdWU7CisgICAgdGhpcy5uZXdQcmlvcml0eSA9IG5ld1Byb3BlcnR5LnByaW9yaXR5OworICAg
IHRoaXMuZGlzYWJsZWQgPSBuZXdQcm9wZXJ0eS5kaXNhYmxlZDsKK30KKworV2ViSW5zcGVjdG9y
LkNTU1N0eWxlTW9kZWwuU3R5bGVTaGVldFBhdGNoZXIgPSBmdW5jdGlvbigpCit7CisgICAgdGhp
cy5fc3R5bGVTaGVldElkVG9PcmlnaW5hbFNvdXJjZSA9IHt9OworfQorCitXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVNb2RlbC5TdHlsZVNoZWV0UGF0Y2hlci5wcm90b3R5cGUgPSB7CisgICAgc2V0RGVs
dGFzOiBmdW5jdGlvbihkZWx0YXMpCisgICAgeworICAgICAgICB0aGlzLl9zdHlsZVNoZWV0RGVs
dGFzID0gZGVsdGFzOworICAgICAgICBmb3IgKHZhciBzdHlsZVNoZWV0SWQgaW4gZGVsdGFzKSB7
CisgICAgICAgICAgICB2YXIgc3R5bGVTaGVldERlbHRhID0gZGVsdGFzW3N0eWxlU2hlZXRJZF07
CisgICAgICAgICAgICBmb3IgKHZhciBzdHlsZUlkIGluIHN0eWxlU2hlZXREZWx0YS5zdHlsZU1h
cCkKKyAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0eWxlVGV4dChzdHlsZVNoZWV0SWQsIHN0
eWxlSWQpOworICAgICAgICB9CisgICAgfSwKKworICAgIHVwZGF0ZVN0eWxlVGV4dDogZnVuY3Rp
b24oc3R5bGVTaGVldElkLCBzdHlsZUlkKQorICAgIHsKKyAgICAgICAgaWYgKCFzdHlsZVNoZWV0
SWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChzdHlsZVNoZWV0SWQgaW4gdGhp
cy5fc3R5bGVTaGVldERlbHRhcykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3N0eWxlU2hlZXRE
ZWx0YXNbc3R5bGVTaGVldElkXS5vcmlnaW5hbFN0eWxlU2hlZXQpCisgICAgICAgICAgICAgICAg
dGhpcy5oYW5kbGVTdHlsZVNoZWV0KHN0eWxlU2hlZXRJZCwgc3R5bGVJZCwgdGhpcy5fc3R5bGVT
aGVldERlbHRhc1tzdHlsZVNoZWV0SWRdLm9yaWdpbmFsU3R5bGVTaGVldCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRTdHlsZVNoZWV0KFdl
Ykluc3BlY3Rvci5DYWxsYmFjay53cmFwKHRoaXMuaGFuZGxlU3R5bGVTaGVldC5iaW5kKHRoaXMs
IHN0eWxlU2hlZXRJZCwgc3R5bGVJZCkpLCBzdHlsZVNoZWV0SWQpOworICAgICAgICB9CisgICAg
fSwKKworICAgIGhhbmRsZVN0eWxlU2hlZXQ6IGZ1bmN0aW9uKHN0eWxlU2hlZXRJZCwgc3R5bGVJ
ZCwgc3R5bGVTaGVldCkKKyAgICB7CisgICAgICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fc3R5bGVTaGVldERlbHRhc1tzdHlsZVNoZWV0SWRd
Lm9yaWdpbmFsU3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7CisgICAgICAgIHZhciB1cmwgPSBzdHls
ZVNoZWV0LmhyZWY7CisgICAgICAgIGlmICghdXJsKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB2YXIgcmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VVUkxNYXBbdXJsXTsKKyAg
ICAgICAgaWYgKCFyZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHRo
aXMuX3N0eWxlU2hlZXRJZFRvT3JpZ2luYWxTb3VyY2Vbc3R5bGVTaGVldC5pZF0pCisgICAgICAg
ICAgICB0aGlzLmhhbmRsZVN0eWxlU2hlZXRUZXh0KHN0eWxlSWQsIHN0eWxlU2hlZXQsIHRoaXMu
X3N0eWxlU2hlZXRJZFRvT3JpZ2luYWxTb3VyY2Vbc3R5bGVTaGVldC5pZF0pOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZ2V0UmVzb3VyY2VDb250ZW50KHJlc291cmNl
LmlkZW50aWZpZXIsIHRoaXMuaGFuZGxlU3R5bGVTaGVldFRleHQuYmluZCh0aGlzLCBzdHlsZUlk
LCBzdHlsZVNoZWV0KSk7CisgICAgfSwKKworICAgIGhhbmRsZVN0eWxlU2hlZXRUZXh0OiBmdW5j
dGlvbihzdHlsZUlkLCBzdHlsZVNoZWV0LCBzdHlsZVNoZWV0VGV4dCkKKyAgICB7CisgICAgICAg
IHRoaXMuX3N0eWxlU2hlZXRJZFRvT3JpZ2luYWxTb3VyY2Vbc3R5bGVTaGVldC5pZF0gPSBzdHls
ZVNoZWV0VGV4dDsKKyAgICAgICAgdmFyIHN0eWxlU2hlZXREZWx0YSA9IHRoaXMuX3N0eWxlU2hl
ZXREZWx0YXNbc3R5bGVTaGVldC5pZF07CisgICAgICAgIGlmICghc3R5bGVTaGVldERlbHRhKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFJ1bGVSYW5n
ZXMoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAodGhpcy5oYW5kbGVTdHlsZVNoZWV0UnVsZVJh
bmdlcy5iaW5kKHRoaXMsIHN0eWxlU2hlZXREZWx0YSwgc3R5bGVTaGVldCwgc3R5bGVTaGVldFRl
eHQpKSwgc3R5bGVTaGVldC5pZCk7CisgICAgfSwKKworICAgIGhhbmRsZVN0eWxlU2hlZXRSdWxl
UmFuZ2VzOiBmdW5jdGlvbihzdHlsZVNoZWV0RGVsdGEsIHN0eWxlU2hlZXQsIHN0eWxlU2hlZXRU
ZXh0LCBydWxlUmFuZ2VzKQorICAgIHsKKyAgICAgICAgaWYgKHJ1bGVSYW5nZXMpIHsKKyAgICAg
ICAgICAgIHN0eWxlU2hlZXREZWx0YS5ydWxlUmFuZ2VzUmVjZWl2ZWQgPSB0cnVlOworICAgICAg
ICAgICAgdGhpcy51cGRhdGVSdWxlUmFuZ2VzKHN0eWxlU2hlZXREZWx0YS5zdHlsZU1hcCwgcnVs
ZVJhbmdlcyk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHRva2VuaXplciA9IFdlYkluc3BlY3Rv
ci5Tb3VyY2VUb2tlbml6ZXIuUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5nZXRUb2tlbml6ZXIoInRl
eHQvY3NzIik7CisgICAgICAgIHZhciBuZXdTdHlsZVNoZWV0Qm9keSA9IHRoaXMuZ2V0UGF0Y2hl
ZFN0eWxlU2hlZXQoc3R5bGVTaGVldERlbHRhLCBzdHlsZVNoZWV0VGV4dCwgdG9rZW5pemVyKTsK
KyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzKQorICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMucHVzaFJlc291cmNlTG9jYWxDb250ZW50KHN0
eWxlU2hlZXQuaHJlZiwgbmV3U3R5bGVTaGVldEJvZHkpOworICAgIH0sCisKKyAgICB1cGRhdGVS
dWxlUmFuZ2VzOiBmdW5jdGlvbihzdHlsZU1hcCwgcnVsZVJhbmdlcykKKyAgICB7CisgICAgICAg
IGZvciAodmFyIGlkIGluIHJ1bGVSYW5nZXMpIHsKKyAgICAgICAgICAgIHZhciBzdHlsZVRvVXBk
YXRlID0gc3R5bGVNYXBbaWRdOworICAgICAgICAgICAgaWYgKCFzdHlsZVRvVXBkYXRlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc3R5bGVUb1VwZGF0ZS5vcmlnaW5h
bFN0eWxlLmJvZHlTdGFydE9mZnNldCA9IHJ1bGVSYW5nZXNbaWRdLmJvZHlSYW5nZS5zdGFydDsK
KyAgICAgICAgICAgIHN0eWxlVG9VcGRhdGUub3JpZ2luYWxTdHlsZS5ib2R5RW5kT2Zmc2V0ID0g
cnVsZVJhbmdlc1tpZF0uYm9keVJhbmdlLmVuZDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBw
YXRjaFJ1bGVCb2R5OiBmdW5jdGlvbihvcmlnaW5hbEJvZHksIHByb3BlcnR5RGlmZnMsIHRva2Vu
aXplcikKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIG5ld1ByaW9yaXR5U3VmZml4KGRpZmYpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAoZGlmZi5uZXdQcmlvcml0eSA9PT0gIiIpID8g
IiIgOiAoIiAhIiArIGRpZmYubmV3UHJpb3JpdHkpOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgV2hpdGVzcGFjZU9wZXJhdGlvbiA9IHsKKyAgICAgICAgICAgIE5PUk1BTDogMCwKKyAgICAg
ICAgICAgIENPUFk6IDEsCisgICAgICAgICAgICBTS0lQOiAyCisgICAgICAgIH07CisKKyAgICAg
ICAgY29uc3QgUHJvcGVydHlDaGFuZ2VUeXBlID0geworICAgICAgICAgICAgTk9ORTogMCwKKyAg
ICAgICAgICAgIERFTEVURUQ6IDEsCisgICAgICAgICAgICBDSEFOR0VEOiAyCisgICAgICAgIH07
CisKKyAgICAgICAgdmFyIG5ld0JvZHkgPSAiIjsKKyAgICAgICAgdG9rZW5pemVyLmxpbmUgPSBv
cmlnaW5hbEJvZHk7CisgICAgICAgIHRva2VuaXplci5jb25kaXRpb24gPSB7IGxleENvbmRpdGlv
bjogdG9rZW5pemVyLl9sZXhDb25kaXRpb25zLklOSVRJQUwsIHBhcnNlQ29uZGl0aW9uOiB0b2tl
bml6ZXIuX3BhcnNlQ29uZGl0aW9ucy5QUk9QRVJUWSB9OworCisgICAgICAgIHZhciBvcHRpb25h
bE5MID0gIiAiOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yaWdpbmFsQm9keS5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGNoID0gb3JpZ2luYWxCb2R5LmNoYXJBdChpKTsK
KyAgICAgICAgICAgIGlmIChjaCA9PT0gIlxyIiB8fCBjaCA9PT0gIlxuIikgeworICAgICAgICAg
ICAgICAgIG9wdGlvbmFsTkwgPSBjaDsKKyAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBsZW5n
dGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNoTmV4dCA9IG9yaWdpbmFsQm9keS5jaGFy
QXQoaSArIDEpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hOZXh0ICE9PSBjaCAmJiAoY2hO
ZXh0ID09PSAiXHIiIHx8IGNoTmV4dCA9PT0gIlxuIikpCisgICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25hbE5MICs9IGNoTmV4dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyBQYXJzZSBydWxlIGJvZHkuCisgICAgICAgIHZhciBs
YXN0UG9zID0gMDsKKyAgICAgICAgdmFyIHByb3BlcnR5TmFtZTsKKyAgICAgICAgdmFyIGN1cnJl
bnRQcm9wZXJ0eVR5cGUgPSBQcm9wZXJ0eUNoYW5nZVR5cGUuTk9ORTsKKyAgICAgICAgdmFyIHNl
ZW5WYWx1ZVN0YXJ0ID0gZmFsc2U7CisgICAgICAgIHZhciBoYW5kbGVkUHJvcGVydGllcyA9IHt9
OworICAgICAgICB2YXIgd2hpdGVzcGFjZUhhbmRsaW5nID0gV2hpdGVzcGFjZU9wZXJhdGlvbi5O
T1JNQUw7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHZhciBuZXdQb3MgPSB0b2tlbml6ZXIu
bmV4dFRva2VuKGxhc3RQb3MpOworICAgICAgICAgICAgdmFyIHRva2VuVHlwZSA9IHRva2VuaXpl
ci50b2tlblR5cGU7CisgICAgICAgICAgICB2YXIgdG9rZW5UZXh0ID0gb3JpZ2luYWxCb2R5LnN1
YnN0cmluZyhsYXN0UG9zLCBuZXdQb3MpOworICAgICAgICAgICAgaWYgKHdoaXRlc3BhY2VIYW5k
bGluZyAhPT0gV2hpdGVzcGFjZU9wZXJhdGlvbi5OT1JNQUwpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXRva2VuVHlwZSAmJiAhdG9rZW5UZXh0LnRyaW0oKS5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHdoaXRlc3BhY2VIYW5kbGluZyA9PT0gV2hpdGVzcGFjZU9wZXJhdGlvbi5D
T1BZKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3Qm9keSArPSB0b2tlblRleHQ7CisgICAg
ICAgICAgICAgICAgICAgIC8vIGVsc2UgV2hpdGVzcGFjZU9wZXJhdGlvbi5TS0lQCisgICAgICAg
ICAgICAgICAgICAgIGxhc3RQb3MgPSBuZXdQb3M7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICB3aGl0ZXNw
YWNlSGFuZGxpbmcgPSBXaGl0ZXNwYWNlT3BlcmF0aW9uLk5PUk1BTDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09ICJjc3MtcHJvcGVydHkiKSB7CisgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lID0gdG9rZW5UZXh0OworICAgICAgICAgICAgICAgIGlmIChw
cm9wZXJ0eU5hbWUgaW4gcHJvcGVydHlEaWZmcykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
cHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdLm5ld1ZhbHVlID09PSAiIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eVR5cGUgPSBQcm9wZXJ0eUNoYW5nZVR5cGUuREVM
RVRFRDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50UHJvcGVydHlUeXBlID0gUHJvcGVydHlDaGFuZ2VUeXBlLkNIQU5HRUQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdLmRpc2Fi
bGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0gIi8qICI7CisgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdCb2R5ICs9IHRva2VuVGV4dDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBoYW5kbGVkUHJvcGVydGllc1twcm9wZXJ0eU5h
bWVdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eU5hbWUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVy
dHlUeXBlID0gUHJvcGVydHlDaGFuZ2VUeXBlLk5PTkU7CisgICAgICAgICAgICAgICAgICAgIG5l
d0JvZHkgKz0gdG9rZW5UZXh0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9wZXJ0eVR5cGUgIT09IFByb3BlcnR5
Q2hhbmdlVHlwZS5OT05FKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbml6ZXIuY29u
ZGl0aW9uLnBhcnNlQ29uZGl0aW9uICE9IHRva2VuaXplci5fcGFyc2VDb25kaXRpb25zLlBST1BF
UlRZX1ZBTFVFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VlblZhbHVlU3RhcnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFByb3BlcnR5VHlwZSA9
PT0gUHJvcGVydHlDaGFuZ2VUeXBlLkNIQU5HRUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc29sZS5sb2cocHJvcGVydHlOYW1lICsgIjoiICsgcHJvcGVydHlEaWZmc1tw
cm9wZXJ0eU5hbWVdLm5ld1ZhbHVlICsgbmV3UHJpb3JpdHlTdWZmaXgocHJvcGVydHlEaWZmc1tw
cm9wZXJ0eU5hbWVdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkg
Kz0gcHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdLm5ld1ZhbHVlICsgbmV3UHJpb3JpdHlTdWZm
aXgocHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3Qm9keSArPSB0b2tlblRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eURpZmZzW3Byb3BlcnR5TmFtZV0uZGlzYWJsZWQpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCb2R5ICs9ICIgKi8iOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBudWxsOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWVuVmFsdWVTdGFydCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGl0ZXNwYWNlSGFuZGxpbmcgPSBXaGl0ZXNwYWNlT3BlcmF0aW9uLlNLSVA7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5VHlwZSA9IFByb3BlcnR5Q2hhbmdlVHlw
ZS5OT05FOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UHJvcGVy
dHlUeXBlICE9PSBQcm9wZXJ0eUNoYW5nZVR5cGUuREVMRVRFRCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdCb2R5ICs9IHRva2VuVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICghc2VlblZhbHVlU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dG9rZW5UeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9w
ZXJ0eVR5cGUgIT09IFByb3BlcnR5Q2hhbmdlVHlwZS5ERUxFVEVEKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0gdG9rZW5UZXh0OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodG9rZW5UZXh0ID09PSAiOiIpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlZW5WYWx1ZVN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VIYW5kbGluZyA9IFdoaXRlc3BhY2VP
cGVyYXRpb24uQ09QWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5WYWx1ZVN0YXJ0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBuZXdCb2R5ICs9IHRva2VuVGV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bGFzdFBvcyA9IG5ld1BvczsKKyAgICAgICAgfSB3aGlsZSAobGFzdFBvcyA8IG9yaWdpbmFsQm9k
eS5sZW5ndGgpOworCisgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0eURp
ZmZzKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHZhciBkaWZmID0gcHJvcGVy
dHlEaWZmc1twcm9wZXJ0eU5hbWVdOworICAgICAgICAgICAgaWYgKGRpZmYubmV3VmFsdWUgPT09
ICIiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGRpZmYuZGlz
YWJsZWQpCisgICAgICAgICAgICAgICAgbmV3Qm9keSArPSAiLyogIjsKKyAgICAgICAgICAgIG5l
d0JvZHkgKz0gcHJvcGVydHlOYW1lICsgIjogIiArIGRpZmYubmV3VmFsdWUgKyBuZXdQcmlvcml0
eVN1ZmZpeChkaWZmKSArICI7IjsKKyAgICAgICAgICAgIGlmIChkaWZmLmRpc2FibGVkKQorICAg
ICAgICAgICAgICAgIG5ld0JvZHkgKz0gIiAqLyI7CisgICAgICAgICAgICBuZXdCb2R5ICs9IG9w
dGlvbmFsTkw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3Qm9keTsKKyAgICB9LAor
CisgICAgZ2V0UGF0Y2hlZFN0eWxlU2hlZXQ6IGZ1bmN0aW9uKHN0eWxlU2hlZXREZWx0YSwgb3Jp
Z2luYWxEYXRhLCB0b2tlbml6ZXIpCisgICAgeworICAgICAgICBmdW5jdGlvbiBzb3J0ZXIobGVm
dEVudHJ5LCByaWdodEVudHJ5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGVmdEVu
dHJ5Lm9yaWdpbmFsU3R5bGUuYm9keVN0YXJ0T2Zmc2V0IC0gcmlnaHRFbnRyeS5vcmlnaW5hbFN0
eWxlLmJvZHlTdGFydE9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBwYXRjaGVkU3R5
bGVzaGVldCA9ICIiOworICAgICAgICB2YXIgbGFzdFN0eWxlc2hlZXRQb3MgPSAwOworICAgICAg
ICB2YXIgc29ydGVkU3R5bGVFbnRyaWVzID0gW107CisgICAgICAgIGZvciAodmFyIHN0eWxlSWQg
aW4gc3R5bGVTaGVldERlbHRhLnN0eWxlTWFwKQorICAgICAgICAgICAgc29ydGVkU3R5bGVFbnRy
aWVzLnB1c2goc3R5bGVTaGVldERlbHRhLnN0eWxlTWFwW3N0eWxlSWRdKTsKKyAgICAgICAgc29y
dGVkU3R5bGVFbnRyaWVzLnNvcnQoc29ydGVyKTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHNvcnRlZFN0eWxlRW50cmllcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIHN0
eWxlRW50cnkgPSBzb3J0ZWRTdHlsZUVudHJpZXNbaV07CisgICAgICAgICAgICB2YXIgYm9keVN0
YXJ0ID0gc3R5bGVFbnRyeS5vcmlnaW5hbFN0eWxlLmJvZHlTdGFydE9mZnNldDsKKyAgICAgICAg
ICAgIHZhciBib2R5RW5kID0gc3R5bGVFbnRyeS5vcmlnaW5hbFN0eWxlLmJvZHlFbmRPZmZzZXQ7
CisgICAgICAgICAgICBwYXRjaGVkU3R5bGVzaGVldCArPSBvcmlnaW5hbERhdGEuc3Vic3RyaW5n
KGxhc3RTdHlsZXNoZWV0UG9zLCBib2R5U3RhcnQgKyAxKTsKKyAgICAgICAgICAgIHZhciBib2R5
VG9QYXRjaCA9IG9yaWdpbmFsRGF0YS5zdWJzdHJpbmcoYm9keVN0YXJ0ICsgMSwgYm9keUVuZCk7
CisgICAgICAgICAgICBwYXRjaGVkU3R5bGVzaGVldCArPSB0aGlzLnBhdGNoUnVsZUJvZHkoYm9k
eVRvUGF0Y2gsIHN0eWxlRW50cnkuZGVsdGFzLCB0b2tlbml6ZXIpOworICAgICAgICAgICAgbGFz
dFN0eWxlc2hlZXRQb3MgPSBib2R5RW5kOworICAgICAgICB9CisgICAgICAgIHBhdGNoZWRTdHls
ZXNoZWV0ICs9IG9yaWdpbmFsRGF0YS5zdWJzdHJpbmcobGFzdFN0eWxlc2hlZXRQb3MsIG9yaWdp
bmFsRGF0YS5sZW5ndGgpOworICAgICAgICByZXR1cm4gcGF0Y2hlZFN0eWxlc2hlZXQ7CisgICAg
fQorfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JC
YWNrZW5kU3R1Yi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qcwppbmRleCA4NTdlMDI2Li5mOGFiNDg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCkBAIC0yNjMsNiArMjYz
LDEwIEBAIFdlYkluc3BlY3Rvci5JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CiAg
ICAgewogICAgIH0sCiAKKyAgICBzYXZlU2Vzc2lvblNldHRpbmdzOiBmdW5jdGlvbigpCisgICAg
eworICAgIH0sCisKICAgICBkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQ6IGZ1bmN0aW9uKCkKICAg
ICB7CiAgICAgfSwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNv
dXJjZXNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5l
bC5qcwppbmRleCAyYWQ2MmE5Li41ODBkOGZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC0zNzUsNiArMzc1LDcgQEAgV2ViSW5zcGVjdG9y
LlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgCiAgICAgICAgIHRoaXMubWFp
blJlc291cmNlTG9hZFRpbWUgPSAtMTsKICAgICAgICAgdGhpcy5tYWluUmVzb3VyY2VET01Db250
ZW50VGltZSA9IC0xOworICAgICAgICBkZWxldGUgdGhpcy5faHJlZlRvTG9jYWxDb250ZW50Owog
IAogICAgICAgICB0aGlzLnZpZXdzQ29udGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwog
CkBAIC03MTEsNyArNzEyLDEyIEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5yZXNvdXJjZUNhdGVnb3JpZXMu
c3R5bGVzaGVldHM6CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5yZXNvdXJjZUNhdGVn
b3JpZXMuc2NyaXB0czoKICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLnJlc291cmNlQ2F0
ZWdvcmllcy54aHI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuU291
cmNlVmlldyhyZXNvdXJjZSk7CisgICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBuZXcgV2ViSW5z
cGVjdG9yLlNvdXJjZVZpZXcocmVzb3VyY2UpOworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9o
cmVmVG9Mb2NhbENvbnRlbnQgJiYgcmVzb3VyY2UudXJsIGluIHRoaXMuX2hyZWZUb0xvY2FsQ29u
dGVudCkgeworICAgICAgICAgICAgICAgICAgICB2aWV3LnVwZGF0ZUxvY2FsQ29udGVudCh0aGlz
Ll9ocmVmVG9Mb2NhbENvbnRlbnRbcmVzb3VyY2UudXJsXSwgcmVzb3VyY2UubWltZVR5cGUgfHwg
InRleHQvY3NzIik7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ocmVmVG9Mb2Nh
bENvbnRlbnRbcmVzb3VyY2UudXJsXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHZpZXc7CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5yZXNvdXJjZUNh
dGVnb3JpZXMuaW1hZ2VzOgogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LkltYWdlVmlldyhyZXNvdXJjZSk7CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5yZXNv
dXJjZUNhdGVnb3JpZXMuZm9udHM6CkBAIC03MjEsNiArNzI3LDE4IEBAIFdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCisgICAgcHVz
aFJlc291cmNlTG9jYWxDb250ZW50OiBmdW5jdGlvbih1cmwsIGxvY2FsQ29udGVudCkKKyAgICB7
CisgICAgICAgIHZhciByZXNvdXJjZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVVSTE1hcFt1cmxd
OworICAgICAgICBpZiAocmVzb3VyY2UgJiYgcmVzb3VyY2UuX3Jlc291cmNlc1ZpZXcpCisgICAg
ICAgICAgICByZXNvdXJjZS5fcmVzb3VyY2VzVmlldy51cGRhdGVMb2NhbENvbnRlbnQobG9jYWxD
b250ZW50LCByZXNvdXJjZS5taW1lVHlwZSB8fCAidGV4dC9jc3MiKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpZiAoIXRoaXMuX2hyZWZUb0xvY2FsQ29udGVudCkKKyAgICAgICAgICAg
ICAgICB0aGlzLl9ocmVmVG9Mb2NhbENvbnRlbnQgPSB7fTsKKyAgICAgICAgICAgIHRoaXMuX2hy
ZWZUb0xvY2FsQ29udGVudFt1cmxdID0gbG9jYWxDb250ZW50OworICAgICAgICB9CisgICAgfSwK
KwogICAgIHNldFNpZGViYXJXaWR0aDogZnVuY3Rpb24od2lkdGgpCiAgICAgewogICAgICAgICBp
ZiAodGhpcy52aXNpYmxlUmVzb3VyY2UpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0
aW5ncy5qcwppbmRleCAyMmRiNDkxLi5iNDhlMDlhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NldHRpbmdzLmpzCkBAIC02Niw2ICs2Niw3IEBAIFdlYkluc3BlY3Rvci5wb3B1bGF0ZUFw
cGxpY2F0aW9uU2V0dGluZ3MgPSBmdW5jdGlvbihzZXR0aW5nc1N0cmluZykKIFdlYkluc3BlY3Rv
ci5wb3B1bGF0ZVNlc3Npb25TZXR0aW5ncyA9IGZ1bmN0aW9uKHNldHRpbmdzU3RyaW5nKQogewog
ICAgIFdlYkluc3BlY3Rvci5zZXNzaW9uU2V0dGluZ3MuX2xvYWQoc2V0dGluZ3NTdHJpbmcpOwor
ICAgIFdlYkluc3BlY3Rvci5zZXNzaW9uU2V0dGluZ3MuaW5zdGFsbFNldHRpbmcoInN0eWxlU2hl
ZXREZWx0YXMiLCAic3R5bGVzaGVldC1kZWx0YXMiLCB7fSk7CiAgICAgV2ViSW5zcGVjdG9yLnNl
c3Npb25TZXR0aW5ncy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxvYWRlZCIpOwogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCmluZGV4IDFiZjgxOTQuLjA5
ZDU5ZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCkBAIC0y
MTgsNiArMjE4LDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogCiAg
ICAgc2VsZWN0TG9jYWxDb250ZW50VGFiOiBmdW5jdGlvbigpCiAgICAgeworICAgICAgICBpZiAo
IXRoaXMudGFiYmVkUGFuZS50YWJPYmplY3RGb3JJZCgibG9jYWwiKSkKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgdGhpcy50YWJiZWRQYW5lLnNlbGVjdFRhYkJ5SWQoImxvY2FsIik7CiAg
ICAgICAgIHRoaXMubG9jYWxTb3VyY2VGcmFtZS52aXNpYmxlID0gdHJ1ZTsKICAgICAgICAgaWYg
KCJyZXNpemUiIGluIHRoaXMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cwppbmRleCBmMWY2N2ZhLi4xOWQ1ZDA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMKQEAgLTE0MTgsNiArMTQxOCw3IEBAIFdlYkluc3BlY3Rvci5yZXNldCA9IGZ1
bmN0aW9uKCkKIAogICAgIHRoaXMuc2Vzc2lvblNldHRpbmdzLnJlc2V0KCk7CiAgICAgdGhpcy5i
cmVha3BvaW50TWFuYWdlci5yZXNldCgpOworICAgIHRoaXMuY3NzTW9kZWwucmVzZXQoKTsKIAog
ICAgIGZvciAodmFyIGNhdGVnb3J5IGluIHRoaXMucmVzb3VyY2VDYXRlZ29yaWVzKQogICAgICAg
ICB0aGlzLnJlc291cmNlQ2F0ZWdvcmllc1tjYXRlZ29yeV0ucmVtb3ZlQWxsUmVzb3VyY2VzKCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63225</attachid>
            <date>2010-08-02 09:15:46 -0700</date>
            <delta_ts>2010-08-06 07:50:30 -0700</delta_ts>
            <desc>[PATCH] Preliminary implementation, factored out EditedStyleSheet</desc>
            <filename>cssdiff_prelim.patch</filename>
            <type>text/plain</type>
            <size>39694</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0cy5qcyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0cy5qcwppbmRleCA0ZDcyNzdkLi44ZGY3
YjVlIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtdGVzdHMuanMK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXRlc3RzLmpzCkBAIC03MCwxMSAr
NzAsMTIgQEAgZnVuY3Rpb24gZnJvbnRlbmRfZ2V0U2VsZWN0ZWRFbGVtZW50U3R5bGVzKGV4Y2x1
ZGVDb21wdXRlZCwgZXhjbHVkZU1hdGNoZWQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZnVu
Y3Rpb24gZnJvbnRlbmRfZ2V0RWxlbWVudFN0eWxlUHJvcGVydHlUcmVlSXRlbShwcm9wZXJ0eU5h
bWUpCitmdW5jdGlvbiBmcm9udGVuZF9nZXRFbGVtZW50U3R5bGVQcm9wZXJ0eVRyZWVJdGVtKHBy
b3BlcnR5TmFtZSwgc2VjdGlvbikKIHsKKyAgICBzZWN0aW9uID0gc2VjdGlvbiA9PT0gdW5kZWZp
bmVkID8gMSA6IHNlY3Rpb247CiAgICAgdmFyIHN0eWxlU2VjdGlvbnMgPSBXZWJJbnNwZWN0b3Iu
cGFuZWxzLmVsZW1lbnRzLnNpZGViYXJQYW5lcy5zdHlsZXMuc2VjdGlvbnNbMF07Ci0gICAgdmFy
IGVsZW1lbnRTdHlsZVNlY3Rpb24gPSBzdHlsZVNlY3Rpb25zWzFdOwotICAgIHZhciBvdXRsaW5l
ID0gZWxlbWVudFN0eWxlU2VjdGlvbi5wcm9wZXJ0aWVzVHJlZU91dGxpbmU7CisgICAgdmFyIHJl
cXVpcmVkU2VjdGlvbiA9IHN0eWxlU2VjdGlvbnNbc2VjdGlvbl07CisgICAgdmFyIG91dGxpbmUg
PSByZXF1aXJlZFNlY3Rpb24ucHJvcGVydGllc1RyZWVPdXRsaW5lOwogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgb3V0bGluZS5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgdHJl
ZUl0ZW0gPSBvdXRsaW5lLmNoaWxkcmVuW2ldOwogICAgICAgICBpZiAodHJlZUl0ZW0ubmFtZSA9
PT0gcHJvcGVydHlOYW1lKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291
cmNlcy9zdHlsZXMtZWRpdC1yZXdyaXRlLmNzcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNv
dXJjZXMvc3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uYWZjOWQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9yZXNvdXJjZXMvc3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MKQEAgLTAsMCArMSwxMiBAQAorZGl2
IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKKy5mb28geworICAgIGNvbG9yOiBibGFjazsK
KyAgICBtYXJnaW46IDEwcHggMCAycHg7Cit9CisKKy5mb28sIC5mb286OmJlZm9yZSB7CisgICAg
Y29sb3I6IGJsdWU7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWVkaXQtcmV3cml0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWVkaXQtcmV3cml0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDYyNWFiMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9z
dHlsZXMtZWRpdC1yZXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMzIEBACitUZXN0cyB0
aGF0IHN0eWxlIGVkaXRpbmcgcHJvcGVybHkgdXBkYXRlcyBDU1Mgc291cmNlLgorCitCZWZvcmUg
Y2hhbmdlOgorZGl2IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKKy5mb28geworICAgIGNv
bG9yOiBibGFjazsKKyAgICBtYXJnaW46IDEwcHggMCAycHg7Cit9CisKKy5mb28sIC5mb286OmJl
Zm9yZSB7CisgICAgY29sb3I6IGJsdWU7Cit9CisKK0FmdGVyIGNoYW5nZToKK2RpdiB7CisgICAg
LyogZm9udC1zaXplOiAxMnB4OyAqLworfQorCisuZm9vIHsKKyAgICBjb2xvcjogZ3JlZW4gIWlt
cG9ydGFudDsKKyAgICBib3JkZXI6IHNvbGlkIHJnYigwLCAyNTUsIDApOworYm9yZGVyLWxlZnQt
d2lkdGg6IDNweCAhaW1wb3J0YW50OworYm9yZGVyLWNvbG9yOiByZ2IoMCwgMjU1LCAwKTsKK30K
KworLmZvbywgLmZvbzo6YmVmb3JlIHsKKyAgICBjb2xvcjogYmx1ZTsKK30KKworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLWVkaXQtcmV3cml0ZS5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1lZGl0LXJld3JpdGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmY5NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1lZGl0LXJld3JpdGUuaHRtbApAQCAtMCwwICsxLDE0MiBA
QAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2Vz
L3N0eWxlcy1lZGl0LXJld3JpdGUuY3NzIiAvPgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVt
ZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sK
KyAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCisgICAgeworICAgICAgICBpZiAocmVzdWx0
ID09PSAicmVmcmVzaGluZyIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGR1bXBBcnJh
eShyZXN1bHQpOworICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IoImZyb250ZW5kX3J1blRlc3QiLCBjYWxsYmFjayk7Cit9CisKKy8vIEZyb250
ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxl
cikKK3sKKyAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNlVHJh
Y2tpbmdFbmFibGVkKSB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZW5hYmxlUmVzb3VyY2VU
cmFja2luZyhmYWxzZSk7CisgICAgICAgIHJldHVybiAicmVmcmVzaGluZyI7CisgICAgfQorICAg
IHRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBmcm9udGVuZF9leHBhbmRET01T
dWJ0cmVlQW5kUnVuKHRlc3RDb250cm9sbGVyLCBudWxsLCBmcm9udGVuZF9zZWxlY3RGb29FbGVt
ZW50KTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfc2VsZWN0Rm9vRWxlbWVudCh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICBmcm9udGVuZF9zZWxlY3RFbGVtZW50QW5kUnVuKHRlc3RDb250cm9sbGVy
LCAiZm9vIiwgZnJvbnRlbmRfZHVtcEZvb1N0eWxlKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRf
ZHVtcEZvb1N0eWxlKHRlc3RDb250cm9sbGVyKQoreworICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaCgiQmVmb3JlIGNoYW5nZToiKTsKKyAgICBmcm9udGVuZF9kdW1wQ1NTVGV4dCh0ZXN0
Q29udHJvbGxlciwgZmFsc2UsIGZyb250ZW5kX2FsdGVyRm9vU3R5bGVzLmJpbmQodGhpcywgdGVz
dENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfYWx0ZXJGb29TdHlsZXModGVz
dENvbnRyb2xsZXIpCit7CisgICAgZnJvbnRlbmRfdG9nZ2xlUHJvcGVydHkoNCwgImZvbnQtc2l6
ZSIsIGZhbHNlKTsKKyAgICBmcm9udGVuZF9hcHBseVN0eWxlVGV4dCgzLCAiY29sb3IiLCAiY29s
b3I6IGdyZWVuICFpbXBvcnRhbnQiKTsKKyAgICBmcm9udGVuZF9hcHBseVN0eWxlVGV4dCgzLCAi
bWFyZ2luIiwgImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIik7CisgICAgZnJvbnRlbmRfYWRkUHJv
cGVydHkoMywgImJvcmRlci1sZWZ0LXdpZHRoOiAzcHggIWltcG9ydGFudCIpOworICAgIGZyb250
ZW5kX2FkZFByb3BlcnR5KDMsICJib3JkZXItY29sb3I6ICMwMEZGMDAiKTsKKyAgICB0ZXN0Q29u
dHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZyb250ZW5kX2R1bXBSZXN1bHRzLmJp
bmQodGhpcywgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfYXBwbHlT
dHlsZVRleHQoc2VjdGlvbk9yZGluYWwsIHByb3BlcnR5TmFtZSwgdGV4dCkKK3sKKyAgICB2YXIg
dHJlZUl0ZW0gPSBmcm9udGVuZF9nZXRFbGVtZW50U3R5bGVQcm9wZXJ0eVRyZWVJdGVtKHByb3Bl
cnR5TmFtZSwgc2VjdGlvbk9yZGluYWwpOworICAgIHRyZWVJdGVtLmFwcGx5U3R5bGVUZXh0KHRl
eHQpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF90b2dnbGVQcm9wZXJ0eShzZWN0aW9uT3JkaW5h
bCwgcHJvcGVydHlOYW1lLCBlbmFibGVkKQoreworICAgIHZhciB0cmVlSXRlbSA9IGZyb250ZW5k
X2dldEVsZW1lbnRTdHlsZVByb3BlcnR5VHJlZUl0ZW0ocHJvcGVydHlOYW1lLCBzZWN0aW9uT3Jk
aW5hbCk7CisgICAgdHJlZUl0ZW0udG9nZ2xlRW5hYmxlZCh7IHRhcmdldDogeyBjaGVja2VkOiBl
bmFibGVkIH0gfSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2FkZFByb3BlcnR5KHNlY3Rpb25P
cmRpbmFsLCBwcm9wZXJ0eVRleHQpCit7CisgICAgdmFyIHN0eWxlU2VjdGlvbiA9IFdlYkluc3Bl
Y3Rvci5wYW5lbHMuZWxlbWVudHMuc2lkZWJhclBhbmVzLnN0eWxlcy5zZWN0aW9uc1swXVtzZWN0
aW9uT3JkaW5hbF07CisgICAgdHJlZUl0ZW0gPSBzdHlsZVNlY3Rpb24uYWRkTmV3QmxhbmtQcm9w
ZXJ0eSgpOworICAgIHRyZWVJdGVtLnN0YXJ0RWRpdGluZygpOworICAgIHRyZWVJdGVtLmxpc3RJ
dGVtRWxlbWVudC50ZXh0Q29udGVudCA9IHByb3BlcnR5VGV4dDsKKyAgICB0cmVlSXRlbS5saXN0
SXRlbUVsZW1lbnQuZGlzcGF0Y2hFdmVudChmcm9udGVuZF9rZXlkb3duRXZlbnQoIkVudGVyIikp
OworfQorCitmdW5jdGlvbiBmcm9udGVuZF9rZXlkb3duRXZlbnQoa2V5SWRlbnRpZmllcikKK3sK
KyAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIktleWJvYXJkRXZlbnQiKTsKKyAg
ICBldnQuaW5pdEtleWJvYXJkRXZlbnQoImtleWRvd24iLCB0cnVlIC8qIGNhbiBidWJibGUgKi8s
IHRydWUgLyogY2FuIGNhbmNlbCAqLywgbnVsbCAvKiB2aWV3ICovLCBrZXlJZGVudGlmaWVyLCAi
Iik7CisgICAgcmV0dXJuIGV2dDsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfZHVtcENTU1RleHQo
dGVzdENvbnRyb2xsZXIsIG1vZGlmaWVkLCBjb250aW51YXRpb24pCit7CisgICAgdmFyIHJlc291
cmNlc1BhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXM7CisgICAgdmFyIGZvdW5k
OworICAgIGZvciAodmFyIGlkIGluIFdlYkluc3BlY3Rvci5yZXNvdXJjZXMpIHsKKyAgICAgICAg
dmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlc1tpZF07CisgICAgICAgIGlmIChy
ZXNvdXJjZS51cmwuaW5kZXhPZigic3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MiKSAhPT0gLTEpIHsK
KyAgICAgICAgICAgIHJlc291cmNlc1BhbmVsLnNob3dSZXNvdXJjZShyZXNvdXJjZSk7CisgICAg
ICAgICAgICB2YXIgdmlldyA9IHJlc291cmNlc1BhbmVsLnJlc291cmNlVmlld0ZvclJlc291cmNl
KHJlc291cmNlKTsKKyAgICAgICAgICAgIGlmIChtb2RpZmllZCkgeworICAgICAgICAgICAgICAg
IHZpZXcuc2VsZWN0TG9jYWxDb250ZW50VGFiKCk7CisgICAgICAgICAgICAgICAgaWYgKCF2aWV3
LmxvY2FsU291cmNlRnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKCJOTyBMT0NBTCBDT05URU5UIFRBQiBGT1VORCIpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG1v
ZGVsID0gdmlldy5sb2NhbFNvdXJjZUZyYW1lLnRleHRNb2RlbDsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdmlldy5zZWxlY3RDb250ZW50VGFiKCk7CisgICAgICAgICAg
ICAgICAgdmFyIG1vZGVsID0gdmlldy5zb3VyY2VGcmFtZS50ZXh0TW9kZWw7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVz
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWwu
bGluZXNDb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2gobW9kZWwubGluZShpKSk7CisgICAgICAgICAgICAgICAgY29udGludWF0aW9uKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICghZm91bmQpCisgICAgICAgIGNvbnRp
bnVhdGlvbigpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9kdW1wUmVzdWx0cyh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIkFmdGVyIGNoYW5nZToi
KTsKKyAgICBmcm9udGVuZF9kdW1wQ1NTVGV4dCh0ZXN0Q29udHJvbGxlciwgdHJ1ZSwgZnJvbnRl
bmRfZGlzYWJsZVJlc291cmNlVHJhY2tpbmcuYmluZCh0aGlzLCB0ZXN0Q29udHJvbGxlcikpOwor
fQorCitmdW5jdGlvbiBmcm9udGVuZF9kaXNhYmxlUmVzb3VyY2VUcmFja2luZyh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGZh
bHNlKTsKKworICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUod2luZG93Ll9fcmVz
dWx0KTsKKyAgICB9KTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0i
b25sb2FkKCkiPgorPHA+CitUZXN0cyB0aGF0IHN0eWxlIGVkaXRpbmcgcHJvcGVybHkgdXBkYXRl
cyBDU1Mgc291cmNlLgorPC9wPgorCis8ZGl2IGlkPSJjb250YWluZXIiIHN0eWxlPSJmb250LXdl
aWdodDpib2xkIj4KKyAgICA8ZGl2IGNsYXNzPSJmb28iIGlkPSJmb28iPjwvZGl2PgorPC9kaXY+
CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
aAppbmRleCAxNzZkZDExLi43NjAxNTllIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJTY3JpcHRBcnJheS5oIgogI2luY2x1ZGUgIlNjcmlwdEJyZWFrcG9pbnQuaCIKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCAwNzU5NDRhLi5lZGIxYzYwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xMDgxLDEwICsxMDgxLDYg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0UnVsZVJhbmdlcyhsb25nIGNhbGxJZCwgbG9u
ZyBzdHlsZVNoZWV0SWQpCiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3Jl
KCktPnN0eWxlU2hlZXRGb3JJZChzdHlsZVNoZWV0SWQpOwogICAgIGlmIChzdHlsZVNoZWV0ICYm
IHN0eWxlU2hlZXQtPmRvYygpKSB7CiAgICAgICAgIEhhc2hNYXA8bG9uZywgU291cmNlUmFuZ2U+
IHJ1bGVSYW5nZXMgPSBjc3NTdG9yZSgpLT5nZXRSdWxlUmFuZ2VzKHN0eWxlU2hlZXQpOwotICAg
ICAgICBpZiAoIXJ1bGVSYW5nZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kLT5k
aWRHZXRTdHlsZVNoZWV0KGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNo
TWFwPGxvbmcsIFNvdXJjZVJhbmdlPjo6aXRlcmF0b3IgaXQgPSBydWxlUmFuZ2VzLmJlZ2luKCk7
IGl0ICE9IHJ1bGVSYW5nZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIGlmIChpdC0+c2Vj
b25kLnNlY29uZCkgewpAQCAtMTE4NywxMiArMTE4MywxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJp
bmcmCiAgICAgaWYgKGRpc2FibGVkU3R5bGUpCiAgICAgICAgIGRpc2FibGVkU3R5bGUtPnJlbW92
ZShwcm9wZXJ0eU5hbWUpOwogCi0gICAgaW50IHN0eWxlVGV4dExlbmd0aCA9IHN0eWxlVGV4dC5s
ZW5ndGgoKTsKLQogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdGVtcE11
dGFibGVTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICB0
ZW1wTXV0YWJsZVN0eWxlLT5wYXJzZURlY2xhcmF0aW9uKHN0eWxlVGV4dCk7CiAgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogdGVtcFN0eWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlv
bio+KHRlbXBNdXRhYmxlU3R5bGUuZ2V0KCkpOwogCisgICAgaW50IHN0eWxlVGV4dExlbmd0aCA9
IHN0eWxlVGV4dC5sZW5ndGgoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjaGFuZ2VkUHJvcGVydGll
czsKICAgICBpZiAodGVtcFN0eWxlLT5sZW5ndGgoKSB8fCAhc3R5bGVUZXh0TGVuZ3RoKSB7CiAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICAvLyBUaGUgaW5wdXQgd2FzIHBh
cnNhYmxlIG9yIHRoZSB1c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZQpAQCAt
MTIwMCwzNiArMTE5NiwzNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4
dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgICAgIC8vIGEg
c2hvcnRoYW5kIHJlbW92ZSBhbGwgdGhlIGxvbmdoYW5kIHByb3BlcnRpZXMuCiAgICAgICAgIGlm
IChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQocHJvcGVydHlOYW1lKS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcHMgPSBsb25naGFuZFByb3Bl
cnRpZXMoc3R5bGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyAhZWMgJiYgaSA8IGxvbmdoYW5kUHJvcHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyAhZWMgJiYgaSA8IGxvbmdoYW5kUHJvcHMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkobG9uZ2hhbmRQcm9wc1tp
XSwgZWMpOworICAgICAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLmFwcGVuZChsb25naGFu
ZFByb3BzW2ldKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIC8vIEV4cGxp
Y2l0bHkgZGVsZXRlIHByb3BlcnRpZXMgd2l0aCBubyBzaG9ydGhhbmRzIGFzIHdlbGwgYXMgc2hv
cnRoYW5kcyB0aGVtc2VsdmVzLgogICAgICAgICBpZiAoIWVjKQogICAgICAgICAgICAgc3R5bGUt
PnJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgZWMpOwogCiAgICAgICAgIGlmIChlYykgewot
ICAgICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwg
SW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpKTsKKyAgICAg
ICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UsIEluc3Bl
Y3RvclZhbHVlOjpudWxsKCksIHRvQXJyYXkoY2hhbmdlZFByb3BlcnRpZXMpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhh
dCB0aGUgcHJvcGVydHkgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLgogICAgIGlmICghc3R5bGVU
ZXh0TGVuZ3RoKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2hhbmdlZFByb3Bl
cnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAgICAgIGNoYW5nZWRQcm9wZXJ0
aWVzLT5wdXNoU3RyaW5nKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFw
cGx5U3R5bGVUZXh0KGNhbGxJZCwgdHJ1ZSwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgY2hhbmdl
ZFByb3BlcnRpZXMucmVsZWFzZSgpKTsKKyAgICAgICAgY2hhbmdlZFByb3BlcnRpZXMuYXBwZW5k
KHByb3BlcnR5TmFtZSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNh
bGxJZCwgdHJ1ZSwgYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSksIHRvQXJyYXkoY2hh
bmdlZFByb3BlcnRpZXMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghdGVt
cFN0eWxlLT5sZW5ndGgoKSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4
dChjYWxsSWQsIGZhbHNlLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCkpOworICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQs
IGZhbHNlLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpLCB0b0FycmF5KGNoYW5nZWRQcm9wZXJ0aWVz
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBJdGVyYXRlIG9mIHRoZSBwcm9w
ZXJ0aWVzIG9uIHRoZSB0ZXN0IGVsZW1lbnQncyBzdHlsZSBkZWNsYXJhdGlvbiBhbmQKICAgICAv
LyBhZGQgdGhlbSB0byB0aGUgcmVhbCBzdHlsZSBkZWNsYXJhdGlvbi4gV2UgdGFrZSBjYXJlIHRv
IG1vdmUgc2hvcnRoYW5kcy4KICAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOwot
ICAgIFZlY3RvcjxTdHJpbmc+IGNoYW5nZWRQcm9wZXJ0aWVzOwogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHRlbXBTdHlsZS0+bGVuZ3RoKCk7ICsraSkgewogICAgICAgICBTdHJpbmcg
bmFtZSA9IHRlbXBTdHlsZS0+aXRlbShpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0NTU1N0eWxlTW9kZWwuanMKaW5kZXggNjZhMjBjZS4uMDIwYTkzYSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKQEAgLTMwLDE0ICszMCwxMDYgQEAK
IAogV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwgPSBmdW5jdGlvbigpCiB7CisgICAgdGhpcy5y
ZXNldCgpOworICAgIFdlYkluc3BlY3Rvci5zZXNzaW9uU2V0dGluZ3MuYWRkRXZlbnRMaXN0ZW5l
cigibG9hZGVkIiwgdGhpcy5fc2Vzc2lvbkxvYWRlZCwgdGhpcyk7CiB9CiAKK1dlYkluc3BlY3Rv
ci5DU1NTdHlsZU1vZGVsLk5PX1VOREVSTFlJTkdfU1RZTEVTSEVFVF9JRCA9IC0xOworCiBXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUgPSB7CisgICAgcmVzZXQ6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuX2VkaXRlZFN0eWxlU2hlZXRCeUlkID0ge307CisgICAg
fSwKKworICAgIGVkaXRlZFN0eWxlU2hlZXQ6IGZ1bmN0aW9uKHN0eWxlU2hlZXRJZCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9lZGl0ZWRTdHlsZVNoZWV0TWFwW3N0eWxlU2hlZXRJZF07
CisgICAgfSwKKworICAgIF9zZXNzaW9uTG9hZGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9lZGl0ZWRTdHlsZVNoZWV0QnlJZCA9IHt9OworICAgICAgICB2YXIgc3R5bGVTaGVl
dERlbHRhcyA9IFdlYkluc3BlY3Rvci5zZXNzaW9uU2V0dGluZ3Muc3R5bGVTaGVldERlbHRhczsK
KyAgICAgICAgaWYgKCFzdHlsZVNoZWV0RGVsdGFzKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHZhciBib3VuZFBlcnNpc3RDYWxsYmFjayA9IHRoaXMuX3NhdmVTdGF0ZS5iaW5kKHRo
aXMpOworICAgICAgICAvLyBTZXQgZGVzZXJpYWxpemVkIG9iamVjdCBwcm90b3R5cGVzIGFuZCBy
ZW1lbWJlciBzdG9yZWQgb3JpZ2luYWwgc3R5bGVzLgorICAgICAgICBmb3IgKHZhciBpZCBpbiBz
dHlsZVNoZWV0RGVsdGFzKSB7CisgICAgICAgICAgICB2YXIgZGVsdGEgPSBzdHlsZVNoZWV0RGVs
dGFzW2lkXTsKKyAgICAgICAgICAgIGRlbHRhLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5DU1NT
dHlsZU1vZGVsLlN0eWxlU2hlZXREZWx0YS5wcm90b3R5cGU7CisgICAgICAgICAgICB2YXIgZWRp
dGVkU3R5bGVTaGVldCA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5FZGl0ZWRTdHls
ZVNoZWV0KE51bWJlcihpZCksIGJvdW5kUGVyc2lzdENhbGxiYWNrLCBkZWx0YSk7CisgICAgICAg
ICAgICBmb3IgKHZhciBzdHlsZUlkIGluIGRlbHRhLnN0eWxlTWFwKSB7CisgICAgICAgICAgICAg
ICAgdmFyIG9yaWdpbmFsU3R5bGUgPSBkZWx0YS5zdHlsZU1hcFtzdHlsZUlkXS5vcmlnaW5hbFN0
eWxlOworICAgICAgICAgICAgICAgIG9yaWdpbmFsU3R5bGUuX19wcm90b19fID0gV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlOworICAgICAgICAgICAgICAgIGlmIChv
cmlnaW5hbFN0eWxlLmlkKQorICAgICAgICAgICAgICAgICAgICBlZGl0ZWRTdHlsZVNoZWV0LmRp
ZEdldE9yaWdpbmFsU3R5bGUob3JpZ2luYWxTdHlsZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0aGlzLl9lZGl0ZWRTdHlsZVNoZWV0QnlJZFtpZF0gPSBlZGl0ZWRTdHlsZVNoZWV0Owor
ICAgICAgICB9CisgICAgfSwKKworICAgIF9idWlsZFN0YXRlT2JqZWN0OiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgcmVzdWx0ID0ge307CisgICAgICAgIGZvciAodmFyIGlkIGluIHRo
aXMuX2VkaXRlZFN0eWxlU2hlZXRCeUlkKQorICAgICAgICAgICAgcmVzdWx0W2lkXSA9IHRoaXMu
X2VkaXRlZFN0eWxlU2hlZXRCeUlkW2lkXS5kZWx0YTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9LAorCisgICAgX3NhdmVTdGF0ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLnNlc3Npb25TZXR0aW5ncy5zdHlsZVNoZWV0RGVsdGFzID0gdGhpcy5fYnVpbGRT
dGF0ZU9iamVjdCgpOworICAgIH0sCisKKyAgICBwcm9jZXNzU3R5bGVEZWx0YTogZnVuY3Rpb24o
bmV3U3R5bGUsIGNoYW5nZWRQcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgdmFyIHBhcmVudFN0
eWxlU2hlZXRJZCA9IG5ld1N0eWxlLnBhcmVudFN0eWxlU2hlZXRJZCA/IG5ld1N0eWxlLnBhcmVu
dFN0eWxlU2hlZXRJZCA6IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLk5PX1VOREVSTFlJTkdf
U1RZTEVTSEVFVF9JRDsKKyAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSB0aGlzLl9lZGl0ZWRTdHls
ZVNoZWV0QnlJZFtwYXJlbnRTdHlsZVNoZWV0SWRdOworICAgICAgICBpZiAoc3R5bGVTaGVldCkK
KyAgICAgICAgICAgIHN0eWxlU2hlZXQubWVyZ2VTdHlsZURlbHRhKG5ld1N0eWxlLCBjaGFuZ2Vk
UHJvcGVydGllcyk7CisgICAgfSwKKwogICAgIGdldFN0eWxlc0FzeW5jOiBmdW5jdGlvbihub2Rl
SWQsIGF1dGhPbmx5LCB1c2VyQ2FsbGJhY2spCiAgICAgewotICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcCh1c2VyQ2FsbGJhY2spLCBu
b2RlSWQsIGF1dGhPbmx5KTsKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soc3R5bGVzKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoc3R5bGVzKQorICAgICAgICAgICAgICAgIHRoaXMuX3Vw
ZGF0ZVN0eWxlcyhzdHlsZXMpOworICAgICAgICAgICAgdXNlckNhbGxiYWNrKHN0eWxlcyk7Cisg
ICAgICAgIH0KKworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0
b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjay5iaW5kKHRoaXMpKSwgbm9kZUlkLCBhdXRoT25seSk7
CiAgICAgfSwKIAorICAgIF91cGRhdGVTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcykKKyAgICB7Cisg
ICAgICAgIHZhciBib3VuZFBlcnNpc3RDYWxsYmFjayA9IHRoaXMuX3NhdmVTdGF0ZS5iaW5kKHRo
aXMpOworCisgICAgICAgIGlmIChzdHlsZXMuaW5saW5lU3R5bGUpCisgICAgICAgICAgICB0aGlz
Ll90cmFja1N0eWxlKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLk5PX1VOREVSTFlJTkdfU1RZ
TEVTSEVFVF9JRCwgc3R5bGVzLmlubGluZVN0eWxlLCBib3VuZFBlcnNpc3RDYWxsYmFjayk7CisK
KyAgICAgICAgdmFyIGNzc1J1bGVzID0gc3R5bGVzLm1hdGNoZWRDU1NSdWxlczsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjc3NSdWxlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAg
dmFyIHN0eWxlID0gY3NzUnVsZXNbaV0uc3R5bGU7CisgICAgICAgICAgICB2YXIgcGFyZW50U3R5
bGVTaGVldElkID0gc3R5bGUucGFyZW50U3R5bGVTaGVldElkOworICAgICAgICAgICAgaWYgKCFw
YXJlbnRTdHlsZVNoZWV0SWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB0aGlzLl90cmFja1N0eWxlKHBhcmVudFN0eWxlU2hlZXRJZCwgc3R5bGUsIGJvdW5kUGVyc2lz
dENhbGxiYWNrKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfdHJhY2tTdHlsZTogZnVuY3Rp
b24ocGFyZW50U3R5bGVTaGVldElkLCBzdHlsZSwgcGVyc2lzdENhbGxiYWNrKQorICAgIHsKKyAg
ICAgICAgdmFyIHN0eWxlU2hlZXQgPSB0aGlzLl9lZGl0ZWRTdHlsZVNoZWV0QnlJZFtwYXJlbnRT
dHlsZVNoZWV0SWRdOworICAgICAgICBpZiAoIXN0eWxlU2hlZXQpIHsKKyAgICAgICAgICAgIHN0
eWxlU2hlZXQgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRWRpdGVkU3R5bGVTaGVl
dChwYXJlbnRTdHlsZVNoZWV0SWQsIHBlcnNpc3RDYWxsYmFjayk7CisgICAgICAgICAgICB0aGlz
Ll9lZGl0ZWRTdHlsZVNoZWV0QnlJZFtwYXJlbnRTdHlsZVNoZWV0SWRdID0gc3R5bGVTaGVldDsK
KyAgICAgICAgfQorICAgICAgICBpZiAoc3R5bGUuaWQgJiYgIXN0eWxlU2hlZXQuaGFzU3R5bGVJ
ZChzdHlsZS5pZCkpCisgICAgICAgICAgICBzdHlsZVNoZWV0LmRpZEdldE9yaWdpbmFsU3R5bGUo
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShzdHlsZSkpOyAvLyBv
bmx5IGZvciBib3VuZCBzdHlsZXMKKyAgICB9LAogICAgIGdldENvbXB1dGVkU3R5bGVBc3luYzog
ZnVuY3Rpb24obm9kZUlkLCB1c2VyQ2FsbGJhY2spCiAgICAgewogICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLmdldENvbXB1dGVkU3R5bGUoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAodXNlckNh
bGxiYWNrKSwgbm9kZUlkKTsKQEAgLTgzLDEwICsxNzUsMTIgQEAgV2ViSW5zcGVjdG9yLkNTU1N0
eWxlTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2YXIg
bmV3U3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVN0eWxlKG5l
d1BheWxvYWQpOworICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3R5bGVEZWx0YShuZXdTdHlsZSwg
WyBwcm9wZXJ0eU5hbWUgXSk7CisKICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhuZXdTdHlsZSk7
CiAgICAgICAgIH0KIAotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVN0eWxlRW5hYmxl
ZChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayksIHN0eWxlSWQsIHByb3BlcnR5
TmFtZSwgZGlzYWJsZWQpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2dsZVN0eWxlRW5h
YmxlZChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjay5iaW5kKHRoaXMpKSwgc3R5
bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNhYmxlZCk7CiAgICAgfSwKIAogICAgIHNldENTU1RleHQ6
IGZ1bmN0aW9uKHN0eWxlSWQsIGNzc1RleHQpCkBAIC0xMDEsMTEgKzE5NSw0ODIgQEAgV2ViSW5z
cGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKCFzdWNj
ZXNzKQogICAgICAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjaygpOwogICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld1N0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxl
RGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2FkKTsKKyAgICAgICAgICAgICAgICB0aGlz
LnByb2Nlc3NTdHlsZURlbHRhKG5ld1N0eWxlLCBjaGFuZ2VkUHJvcGVydGllcyk7CisKICAgICAg
ICAgICAgICAgICB2YXIgbmV3U3R5bGUgPSBuZXdQYXlsb2FkID8gV2ViSW5zcGVjdG9yLkNTU1N0
eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2FkKSA6IG51bGw7CiAgICAgICAgICAg
ICAgICAgc3VjY2Vzc0NhbGxiYWNrKG5ld1N0eWxlLCBjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFwcGx5U3R5
bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgc3R5bGVJZCwgc3R5
bGVUZXh0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmFwcGx5U3R5
bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrLmJpbmQodGhpcykpLCBz
dHlsZUlkLCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSk7CisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVNb2RlbC5FZGl0ZWRTdHlsZVNoZWV0ID0gZnVuY3Rpb24oc3R5bGVTaGVldElk
LCBwZXJzaXN0Q2FsbGJhY2ssIGRlbHRhKQoreworICAgIHRoaXMuX2hhc1N0eWxlU2hlZXQgPSAo
c3R5bGVTaGVldElkICE9PSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5OT19VTkRFUkxZSU5H
X1NUWUxFU0hFRVRfSUQpOworICAgIHRoaXMuX3BlcnNpc3RDYWxsYmFjayA9IHBlcnNpc3RDYWxs
YmFjazsKKyAgICB0aGlzLl9pZFRvT3JpZ2luYWxTdHlsZSA9IHt9OworICAgIHRoaXMuZGVsdGEg
PSBkZWx0YSB8fCBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuU3R5bGVTaGVldERlbHRh
KCk7CisgICAgaWYgKHRoaXMuX2hhc1N0eWxlU2hlZXQpIHsKKyAgICAgICAgdGhpcy5fcGF0Y2hl
ciA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZVNoZWV0UGF0Y2hlcihzdHls
ZVNoZWV0SWQsIHRoaXMuX3N0eWxlU2hlZXRUZXh0Q2hhbmdlZC5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgdGhpcy5fcGF0Y2hlci5zZXREZWx0YSh0aGlzLmRlbHRhKTsKKyAgICAgICAgaWYgKGRlbHRh
KQorICAgICAgICAgICAgdGhpcy5fcGF0Y2hlci51cGRhdGVTdHlsZVRleHQoKTsKKyAgICB9Cit9
CisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkVkaXRlZFN0eWxlU2hlZXQucHJvdG90eXBl
ID0geworICAgIGRpZEdldE9yaWdpbmFsU3R5bGU6IGZ1bmN0aW9uKG9yaWdpbmFsU3R5bGUpCisg
ICAgeworICAgICAgICB0aGlzLl9pZFRvT3JpZ2luYWxTdHlsZVtvcmlnaW5hbFN0eWxlLmlkXSA9
IG9yaWdpbmFsU3R5bGU7CisgICAgICAgIHRoaXMuZGVsdGEudHJhY2tTdHlsZShvcmlnaW5hbFN0
eWxlKTsKKyAgICB9LAorCisgICAgbWVyZ2VTdHlsZURlbHRhOiBmdW5jdGlvbihuZXdTdHlsZSwg
Y2hhbmdlZFByb3BlcnRpZXMpCisgICAgeworICAgICAgICB0aGlzLmRlbHRhLnVwZGF0ZShjaGFu
Z2VkUHJvcGVydGllcywgbmV3U3R5bGUpOworICAgICAgICBpZiAodGhpcy5faGFzU3R5bGVTaGVl
dCkKKyAgICAgICAgICAgIHRoaXMuX3BhdGNoZXIudXBkYXRlU3R5bGVUZXh0KCk7CisgICAgICAg
IHRoaXMuX3BlcnNpc3RDYWxsYmFjaygpOworICAgIH0sCisKKyAgICBoYXNTdHlsZUlkOiBmdW5j
dGlvbihzdHlsZUlkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChzdHlsZUlkIGluIHRoaXMuX2lk
VG9PcmlnaW5hbFN0eWxlKTsKKyAgICB9LAorCisgICAgX3N0eWxlU2hlZXRUZXh0Q2hhbmdlZDog
ZnVuY3Rpb24oc3R5bGVTaGVldCwgb3JpZ2luYWxTdHlsZVNoZWV0VGV4dCwgbmV3U3R5bGVTaGVl
dFRleHQpCisgICAgeworICAgICAgICAvLyBNb2RlbCBtb2RpZmljYXRpb24vV0kuQ1NTU00uRWRp
dGVkU3R5bGVTaGVldCBpbnN0YW5jZSBjb25zdHJ1Y3Rpb24gaGFzIHJlc3VsdGVkCisgICAgICAg
IC8vIGludG8gYW4gdXBkYXRlZC9pbml0aWFsaXplZCBzdHlsZXNoZWV0IHRleHQgKHRoZSBsYXR0
ZXIgaXMgYW4gZW1wdHkgZGVsdGEgY2FzZSkuCisgICAgICAgIHRoaXMuX2RpZFN0eWxlU2hlZXRU
ZXh0Q2hhbmdlKHN0eWxlU2hlZXQsIG5ld1N0eWxlU2hlZXRUZXh0KTsKKyAgICB9LAorCisgICAg
X2RpZFN0eWxlU2hlZXRUZXh0Q2hhbmdlOiBmdW5jdGlvbihzdHlsZVNoZWV0LCBuZXdTdHlsZVNo
ZWV0VGV4dCkKKyAgICB7CisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNl
cykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnB1c2hSZXNvdXJj
ZUxvY2FsQ29udGVudChzdHlsZVNoZWV0LmhyZWYsIG5ld1N0eWxlU2hlZXRUZXh0KTsKKyAgICB9
Cit9CisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlU2hlZXREZWx0YSA9IGZ1bmN0
aW9uKCkKK3sKKyAgICB0aGlzLnN0eWxlTWFwID0ge307CisgICAgdGhpcy5kZWx0YUNvdW50ID0g
MDsKK30KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuU3R5bGVTaGVldERlbHRhLnByb3Rv
dHlwZSA9IHsKKyAgICB1cGRhdGU6IGZ1bmN0aW9uKGNoYW5nZWRQcm9wZXJ0aWVzLCBuZXdTdHls
ZSkKKyAgICB7CisgICAgICAgIHZhciBzdHlsZURhdGEgPSB0aGlzLnN0eWxlTWFwW25ld1N0eWxl
LmlkXTsKKyAgICAgICAgaWYgKCFzdHlsZURhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHZhciBwcm9wZXJ0eURlbHRhcyA9IHN0eWxlRGF0YS5kZWx0YXM7CisgICAgICAgIHZhciBv
cmlnaW5hbFN0eWxlID0gc3R5bGVEYXRhLm9yaWdpbmFsU3R5bGU7CisgICAgICAgIHZhciBjaGFu
Z2VkUHJvcGVydGllc1NldCA9IHt9OworCisgICAgICAgIHZhciBmb3VuZFNob3J0aGFuZHMgPSB7
fTsKKyAgICAgICAgdmFyIGRpc2FibGVkUHJvcGVydGllcyA9IG5ld1N0eWxlLl9fZGlzYWJsZWRQ
cm9wZXJ0eU5hbWVzIHx8IHt9OworCisgICAgICAgIHZhciB1bmlxdWVQcm9wZXJ0aWVzID0ge307
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlZFByb3BlcnRpZXMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzU2V0W2NoYW5nZWRQcm9wZXJ0aWVz
W2ldXSA9IHRydWU7CisgICAgICAgICAgICB1bmlxdWVQcm9wZXJ0aWVzW2NoYW5nZWRQcm9wZXJ0
aWVzW2ldXSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
ZXdTdHlsZS5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHVuaXF1ZVByb3BlcnRpZXNbbmV3U3R5
bGVbaV1dID0gdHJ1ZTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmlnaW5hbFN0eWxl
Lmxlbmd0aDsgKytpKQorICAgICAgICAgICAgdW5pcXVlUHJvcGVydGllc1tvcmlnaW5hbFN0eWxl
W2ldXSA9IHRydWU7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlZFByb3BlcnRp
ZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB1bmlxdWVQcm9wZXJ0aWVzW2NoYW5nZWRQcm9w
ZXJ0aWVzW2ldXSA9IHRydWU7CisgICAgICAgIGZvciAodmFyIG5hbWUgaW4gZGlzYWJsZWRQcm9w
ZXJ0aWVzKQorICAgICAgICAgICAgdW5pcXVlUHJvcGVydGllc1tuYW1lXSA9IHRydWU7CisKKyAg
ICAgICAgdmFyIGRlbGV0ZWRMb25naGFuZHMgPSB7fTsKKyAgICAgICAgdmFyIGltcGxpY2l0bHlN
b2RpZmllZFNob3J0aGFuZHMgPSB7fTsKKworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAg
ICAgICAgZnVuY3Rpb24gc2V0TG9uZ2hhbmREZWxldGVkRGVsdGEobmFtZSwgZGlzYWJsZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBkZWxldGVkLWRlbHRhIGZvciBhIGxvbmdo
YW5kIGRlbGV0ZWQgYnkgc2V0dGluZyBhIGNvcnJlc3BvbmRpbmcgc2hvcnRoYW5kIHByb3BlcnR5
LgorICAgICAgICAgICAgdmFyIGRlbGV0ZWREZWx0YSA9IHByb3BlcnR5RGVsdGFzW25hbWVdOwor
ICAgICAgICAgICAgaWYgKGRlbGV0ZWREZWx0YSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZWRE
ZWx0YS5uZXdWYWx1ZSA9ICIiOworICAgICAgICAgICAgICAgIGRlbGV0ZWREZWx0YS5uZXdQcmlv
cml0eSA9ICIiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgb2xk
UHJvcGVydHlBc0xvbmdoYW5kID0gc2VsZi5nZXRQcm9wZXJ0eShvcmlnaW5hbFN0eWxlLCBuYW1l
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKG9sZFByb3BlcnR5QXNMb25naGFuZC52YWx1
ZSAhPT0gIiIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlZERlbHRhID0gbmV3IFdlYklu
c3BlY3Rvci5Qcm9wZXJ0eURlbHRhKG9sZFByb3BlcnR5QXNMb25naGFuZCwge3ZhbHVlOiAiIiwg
cHJpb3JpdHk6ICIiLCBkaXNhYmxlZDogZGlzYWJsZWR9KTsKKyAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlEZWx0YXNbbmFtZV0gPSBkZWxldGVkRGVsdGE7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZmlsbEltcGxpY2l0
bHlNb2RpZmllZFNob3J0aGFuZHMobmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhp
cyBtaWdodCBiZSBhbiBleHBsaWNpdGx5IG1vZGlmaWVkIGxvbmdoYW5kLCBvciBhIHNlY29uZC1s
ZXZlbCBzaG9ydGhhbmQgKGUuZy4gYm9yZGVyIDwtIGJvcmRlci13aWR0aCA8LSBib3JkZXItdG9w
LXdpZHRoKSwKKyAgICAgICAgICAgIC8vIGluIHdoaWNoIGNhc2UgZ2V0UHJvcGVydHlTaG9ydGhh
bmQgcmV0dXJucyAiIi4gVXNlIGEgd29ya2Fyb3VuZCBmb3IgZGV0ZWN0aW5nIHRoZSBhc3NvY2lh
dGVkIHNob3J0aGFuZHMuCisgICAgICAgICAgICB2YXIgY2FuZGlkYXRlID0gbmFtZTsKKyAgICAg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB2YXIgYXNzb2NpYXRlZFNob3J0aGFuZCA9IHNl
bGYuZ2V0QXNzb2NpYXRlZFNob3J0aGFuZChjYW5kaWRhdGUpOworICAgICAgICAgICAgICAgIGlm
IChhc3NvY2lhdGVkU2hvcnRoYW5kICYmICFjaGFuZ2VkUHJvcGVydGllc1NldFthc3NvY2lhdGVk
U2hvcnRoYW5kXSkKKyAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRseU1vZGlmaWVkU2hvcnRo
YW5kc1thc3NvY2lhdGVkU2hvcnRoYW5kXSA9IHRydWU7CisgICAgICAgICAgICAgICAgY2FuZGlk
YXRlID0gYXNzb2NpYXRlZFNob3J0aGFuZDsKKyAgICAgICAgICAgIH0gd2hpbGUgKGNhbmRpZGF0
ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBuYW1lIGluIHVuaXF1ZVByb3BlcnRp
ZXMpIHsKKyAgICAgICAgICAgIHZhciBkaXNhYmxlZCA9IG5hbWUgaW4gZGlzYWJsZWRQcm9wZXJ0
aWVzOworICAgICAgICAgICAgdmFyIHNob3J0aGFuZE5hbWUgPSAhZGlzYWJsZWQgPyBuZXdTdHls
ZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKSA6IG51bGw7CisgICAgICAgICAgICB2YXIgbmV3
UHJvcGVydHlBc1Nob3J0aGFuZCA9IHRoaXMuZ2V0UHJvcGVydHkobmV3U3R5bGUsIG5hbWUsIHRy
dWUpOworICAgICAgICAgICAgdmFyIG5hbWVJc1Nob3J0aGFuZCA9ICFkaXNhYmxlZCAmJiAobmV3
UHJvcGVydHlBc1Nob3J0aGFuZC52YWx1ZSAhPT0gIiIgJiYgIW5ld1Byb3BlcnR5QXNTaG9ydGhh
bmQuZGlzYWJsZWQpIHx8IHRoaXMuZ2V0UHJvcGVydHkob3JpZ2luYWxTdHlsZSwgbmFtZSwgdHJ1
ZSkudmFsdWUgIT09ICIiOworICAgICAgICAgICAgaWYgKG5hbWVJc1Nob3J0aGFuZCkKKyAgICAg
ICAgICAgICAgICBzaG9ydGhhbmROYW1lID0gbmFtZTsKKworICAgICAgICAgICAgaWYgKHNob3J0
aGFuZE5hbWUgJiYgc2hvcnRoYW5kTmFtZSBpbiBmb3VuZFNob3J0aGFuZHMpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZGVsZXRlZExvbmdoYW5kc1tuYW1lXSkKKyAgICAgICAgICAgICAgICAgICAg
c2V0TG9uZ2hhbmREZWxldGVkRGVsdGEobmFtZSwgZGlzYWJsZWQpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaWxsSW1wbGljaXRseU1v
ZGlmaWVkU2hvcnRoYW5kcyhuYW1lKTsKKworICAgICAgICAgICAgaWYgKHNob3J0aGFuZE5hbWUp
IHsKKyAgICAgICAgICAgICAgICBmb3VuZFNob3J0aGFuZHNbc2hvcnRoYW5kTmFtZV0gPSB0cnVl
OworICAgICAgICAgICAgICAgIHZhciBsb25naGFuZCA9IG5hbWU7CisgICAgICAgICAgICAgICAg
aWYgKG5hbWVJc1Nob3J0aGFuZCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgbG9uZ2hhbmRz
ID0gbmV3U3R5bGUuZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVzKHNob3J0aGFuZE5hbWUpOworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kcy5sZW5ndGg7ICsraSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRMb25naGFuZHNbbG9uZ2hhbmRzW2ldXSA9
IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IHNob3J0aGFuZE5hbWU7CisgICAgICAgICAgICAgICAgICAgIG5hbWVJc1Nob3J0aGFuZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgdmFyIGxvbmdoYW5kID0gIiI7CisKKyAgICAgICAgICAgIGlmICghY2hhbmdlZFByb3Bl
cnRpZXNTZXRbbmFtZV0gJiYgIWNoYW5nZWRQcm9wZXJ0aWVzU2V0W2xvbmdoYW5kXSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdGhpcy51cGRhdGVEZWx0YShvcmln
aW5hbFN0eWxlLCBuZXdTdHlsZSwgbmFtZSwgbmFtZUlzU2hvcnRoYW5kLCBwcm9wZXJ0eURlbHRh
cyk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBzaG9ydGhhbmQgaW4gaW1wbGljaXRs
eU1vZGlmaWVkU2hvcnRoYW5kcykKKyAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsdGEob3JpZ2lu
YWxTdHlsZSwgbmV3U3R5bGUsIHNob3J0aGFuZCwgdHJ1ZSwgcHJvcGVydHlEZWx0YXMpOworICAg
IH0sCisKKyAgICBnZXRBc3NvY2lhdGVkU2hvcnRoYW5kOiBmdW5jdGlvbihleHBsaWNpdExvbmdo
YW5kKQorICAgIHsKKyAgICAgICAgaWYgKGV4cGxpY2l0TG9uZ2hhbmQuY2hhckF0KDApID09PSAi
LSIpCisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHZhciBsYXN0RGFzaEluZGV4ID0g
ZXhwbGljaXRMb25naGFuZC5sYXN0SW5kZXhPZigiLSIpOworICAgICAgICBpZiAobGFzdERhc2hJ
bmRleCA+IDApCisgICAgICAgICAgICByZXR1cm4gZXhwbGljaXRMb25naGFuZC5zdWJzdHJpbmco
MCwgbGFzdERhc2hJbmRleCk7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9LAorCisgICAgdXBk
YXRlRGVsdGE6IGZ1bmN0aW9uKG9yaWdpbmFsU3R5bGUsIG5ld1N0eWxlLCBwcm9wZXJ0eU5hbWUs
IGlzU2hvcnRoYW5kLCBwcm9wZXJ0eURlbHRhcykKKyAgICB7CisgICAgICAgIHZhciBuZXdQcm9w
ZXJ0eSA9IHRoaXMuZ2V0UHJvcGVydHkobmV3U3R5bGUsIHByb3BlcnR5TmFtZSwgaXNTaG9ydGhh
bmQpOworICAgICAgICB2YXIgcHJvcGVydHlEZWx0YSA9IHByb3BlcnR5RGVsdGFzW3Byb3BlcnR5
TmFtZV07CisgICAgICAgIGlmICghcHJvcGVydHlEZWx0YSkgeworICAgICAgICAgICAgdmFyIG9s
ZFByb3BlcnR5ID0gdGhpcy5nZXRQcm9wZXJ0eShvcmlnaW5hbFN0eWxlLCBwcm9wZXJ0eU5hbWUs
IGlzU2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHByb3BlcnR5RGVsdGEgPSBuZXcgV2ViSW5zcGVj
dG9yLlByb3BlcnR5RGVsdGEob2xkUHJvcGVydHksIG5ld1Byb3BlcnR5KTsKKyAgICAgICAgICAg
IHByb3BlcnR5RGVsdGFzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eURlbHRhOworICAgICAgICAg
ICAgKyt0aGlzLmRlbHRhQ291bnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcm9w
ZXJ0eURlbHRhLm5ld1ZhbHVlID0gbmV3UHJvcGVydHkudmFsdWU7CisgICAgICAgICAgICBwcm9w
ZXJ0eURlbHRhLm5ld1ByaW9yaXR5ID0gbmV3UHJvcGVydHkucHJpb3JpdHk7CisgICAgICAgICAg
ICBwcm9wZXJ0eURlbHRhLmRpc2FibGVkID0gbmV3UHJvcGVydHkuZGlzYWJsZWQ7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG9yaWdpbmFsU3R5bGUuaXNQcm9wZXJ0eUltcGxpY2l0KHByb3BlcnR5
TmFtZSkpIHsKKyAgICAgICAgICAgIHByb3BlcnR5RGVsdGEub2xkVmFsdWUgPSAiIjsKKyAgICAg
ICAgICAgIHByb3BlcnR5RGVsdGEub2xkUHJpb3JpdHkgPSAiIjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghdGhpcy5faXNQcm9wZXJ0eUNoYW5nZWQocHJvcGVydHlEZWx0YSkpIHsKKyAgICAg
ICAgICAgIGRlbGV0ZSBwcm9wZXJ0eURlbHRhc1twcm9wZXJ0eU5hbWVdOworICAgICAgICAgICAg
LS10aGlzLmRlbHRhQ291bnQ7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2lzUHJvcGVydHlD
aGFuZ2VkOiBmdW5jdGlvbihwcm9wZXJ0eURlbHRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBy
b3BlcnR5RGVsdGEubmV3VmFsdWUgIT09IHByb3BlcnR5RGVsdGEub2xkVmFsdWUgfHwgcHJvcGVy
dHlEZWx0YS5uZXdQcmlvcml0eSAhPT0gcHJvcGVydHlEZWx0YS5vbGRQcmlvcml0eSB8fCBwcm9w
ZXJ0eURlbHRhLmRpc2FibGVkOworICAgIH0sCisKKyAgICBnZXRQcm9wZXJ0eTogZnVuY3Rpb24o
c3R5bGUsIHByb3BlcnR5TmFtZSwgaXNTaG9ydGhhbmQpCisgICAgeworICAgICAgICB2YXIgZGlz
YWJsZWQgPSBwcm9wZXJ0eU5hbWUgaW4gc3R5bGUuX19kaXNhYmxlZFByb3BlcnRpZXM7CisgICAg
ICAgIGlmIChkaXNhYmxlZCkgeworICAgICAgICAgICAgdmFyIHZhbHVlID0gc3R5bGUuX19kaXNh
YmxlZFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV07CisgICAgICAgICAgICB2YXIgcHJpb3Jp
dHkgPSBzdHlsZS5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzW3Byb3BlcnR5TmFtZV07Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLm1hc2tBYnNlbnQo
aXNTaG9ydGhhbmQgPyBzdHlsZS5nZXRTaG9ydGhhbmRWYWx1ZShwcm9wZXJ0eU5hbWUpIDogc3R5
bGUuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIHZhciBwcmlv
cml0eSA9IHRoaXMubWFza0Fic2VudChpc1Nob3J0aGFuZCA/IHN0eWxlLmdldFNob3J0aGFuZFBy
aW9yaXR5KHByb3BlcnR5TmFtZSkgOiBzdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BlcnR5
TmFtZSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgcHJpb3Jp
dHk6IHByaW9yaXR5LCBkaXNhYmxlZDogZGlzYWJsZWQgfTsKKyAgICB9LAorCisgICAgbWFza0Fi
c2VudDogZnVuY3Rpb24odmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gKHZhbHVlID09PSBu
dWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpID8gIiIgOiB2YWx1ZTsKKyAgICB9LAorCisgICAg
dHJhY2tTdHlsZTogZnVuY3Rpb24oc3R5bGUpCisgICAgeworICAgICAgICBpZiAoc3R5bGUuaWQg
aW4gdGhpcy5zdHlsZU1hcCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBDcmVh
dGUgYSBjb3B5IG9mIHN0eWxlIHdpdGhvdXQgInBhcmVudFJ1bGUiIHRvIGF2b2lkIGN5Y2xpYyBz
dHJ1Y3R1cmUuCisgICAgICAgIHZhciBzdHlsZUNvcHkgPSB7fTsKKyAgICAgICAgZm9yICh2YXIg
cCBpbiBzdHlsZSkgeworICAgICAgICAgICAgaWYgKHAgIT09ICJwYXJlbnRSdWxlIikKKyAgICAg
ICAgICAgICAgICBzdHlsZUNvcHlbcF0gPSBzdHlsZVtwXTsKKyAgICAgICAgfQorICAgICAgICBz
dHlsZUNvcHkuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJv
dG90eXBlOworICAgICAgICB0aGlzLnN0eWxlTWFwW3N0eWxlLmlkXSA9IHsgb3JpZ2luYWxTdHls
ZTogc3R5bGVDb3B5LCBkZWx0YXM6IHt9IH07CiAgICAgfQogfQorCitXZWJJbnNwZWN0b3IuUHJv
cGVydHlEZWx0YSA9IGZ1bmN0aW9uKG9sZFByb3BlcnR5LCBuZXdQcm9wZXJ0eSkKK3sKKyAgICB0
aGlzLm9sZFZhbHVlID0gb2xkUHJvcGVydHkudmFsdWU7CisgICAgdGhpcy5vbGRQcmlvcml0eSA9
IG9sZFByb3BlcnR5LnByaW9yaXR5OworICAgIHRoaXMubmV3VmFsdWUgPSBuZXdQcm9wZXJ0eS52
YWx1ZTsKKyAgICB0aGlzLm5ld1ByaW9yaXR5ID0gbmV3UHJvcGVydHkucHJpb3JpdHk7CisgICAg
dGhpcy5kaXNhYmxlZCA9IG5ld1Byb3BlcnR5LmRpc2FibGVkOworfQorCitXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVNb2RlbC5TdHlsZVNoZWV0UGF0Y2hlciA9IGZ1bmN0aW9uKHN0eWxlU2hlZXRJZCwg
c3R5bGVTaGVldFBhdGNoZWRDYWxsYmFjaykKK3sKKyAgICB0aGlzLl9zdHlsZVNoZWV0SWQgPSBz
dHlsZVNoZWV0SWQ7CisgICAgdGhpcy5fc3R5bGVTaGVldFBhdGNoZWRDYWxsYmFjayA9IHN0eWxl
U2hlZXRQYXRjaGVkQ2FsbGJhY2s7CisgICAgdGhpcy5fc3R5bGVTaGVldERlbHRhID0ge307Cit9
CisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlU2hlZXRQYXRjaGVyLnByb3RvdHlw
ZSA9IHsKKyAgICBzZXREZWx0YTogZnVuY3Rpb24oc3R5bGVTaGVldERlbHRhKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fc3R5bGVTaGVldERlbHRhID0gc3R5bGVTaGVldERlbHRhOworICAgICAgICB0
aGlzLnVwZGF0ZVN0eWxlVGV4dCgpOworICAgIH0sCisKKyAgICB1cGRhdGVTdHlsZVRleHQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN0eWxlU2hlZXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuX3N0eWxlU2hlZXREZWx0YS5vcmlnaW5hbFN0eWxl
U2hlZXQgPSBzdHlsZVNoZWV0OworICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHlsZVNoZWV0KCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIm9yaWdpbmFsU3R5bGVTaGVldCIgaW4gdGhpcy5f
c3R5bGVTaGVldERlbHRhKQorICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHlsZVNoZWV0KCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVTaGVldChX
ZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjay5iaW5kKHRoaXMpKSwgdGhpcy5fc3R5
bGVTaGVldElkKTsKKyAgICB9LAorCisgICAgaGFuZGxlU3R5bGVTaGVldDogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSB0aGlzLl9zdHlsZVNoZWV0RGVsdGEub3Jp
Z2luYWxTdHlsZVNoZWV0OworICAgICAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIC8vIEZJWE1FOiBlbmFibGUgaGFuZGxpbmcgb2Ygbm9uLXJlc291cmNl
IHN0eWxlc2hlZXRzLgorICAgICAgICB2YXIgdXJsID0gc3R5bGVTaGVldC5ocmVmOworICAgICAg
ICBpZiAoIXVybCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIHJlc291cmNlID0g
V2ViSW5zcGVjdG9yLnJlc291cmNlVVJMTWFwW3VybF07CisgICAgICAgIGlmICghcmVzb3VyY2Up
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgiX29yaWdpbmFsU291cmNlIiBpbiB0
aGlzKQorICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHlsZVNoZWV0VGV4dChzdHlsZVNoZWV0LCB0
aGlzLl9vcmlnaW5hbFNvdXJjZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5nZXRSZXNvdXJjZUNvbnRlbnQocmVzb3VyY2UuaWRlbnRpZmllciwgdGhpcy5oYW5kbGVT
dHlsZVNoZWV0VGV4dC5iaW5kKHRoaXMsIHN0eWxlU2hlZXQpKTsKKyAgICB9LAorCisgICAgaGFu
ZGxlU3R5bGVTaGVldFRleHQ6IGZ1bmN0aW9uKHN0eWxlU2hlZXQsIHN0eWxlU2hlZXRUZXh0KQor
ICAgIHsKKyAgICAgICAgdGhpcy5fb3JpZ2luYWxTb3VyY2UgPSBzdHlsZVNoZWV0VGV4dDsKKyAg
ICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRSdWxlUmFuZ2VzKFdlYkluc3BlY3Rvci5DYWxsYmFj
ay53cmFwKHRoaXMuaGFuZGxlU3R5bGVTaGVldFJ1bGVSYW5nZXMuYmluZCh0aGlzLCBzdHlsZVNo
ZWV0KSksIHRoaXMuX3N0eWxlU2hlZXRJZCk7CisgICAgfSwKKworICAgIGhhbmRsZVN0eWxlU2hl
ZXRSdWxlUmFuZ2VzOiBmdW5jdGlvbihzdHlsZVNoZWV0LCBydWxlUmFuZ2VzKQorICAgIHsKKyAg
ICAgICAgaWYgKHJ1bGVSYW5nZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0eWxlU2hlZXREZWx0
YS5ydWxlUmFuZ2VzUmVjZWl2ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhpcy51cGRhdGVSdWxl
UmFuZ2VzKHJ1bGVSYW5nZXMpOworICAgICAgICB9CisgICAgICAgIHZhciB0b2tlbml6ZXIgPSBX
ZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyLlJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0VG9r
ZW5pemVyKCJ0ZXh0L2NzcyIpOworICAgICAgICB2YXIgbmV3U3R5bGVTaGVldFRleHQgPSB0aGlz
LmdldFBhdGNoZWRTdHlsZVNoZWV0KHRva2VuaXplcik7CisgICAgICAgIHRoaXMuX3N0eWxlU2hl
ZXRQYXRjaGVkQ2FsbGJhY2soc3R5bGVTaGVldCwgdGhpcy5fb3JpZ2luYWxTb3VyY2UsIG5ld1N0
eWxlU2hlZXRUZXh0KTsKKyAgICB9LAorCisgICAgdXBkYXRlUnVsZVJhbmdlczogZnVuY3Rpb24o
cnVsZVJhbmdlcykKKyAgICB7CisgICAgICAgIHZhciBzdHlsZU1hcCA9IHRoaXMuX3N0eWxlU2hl
ZXREZWx0YS5zdHlsZU1hcDsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gcnVsZVJhbmdlcykgewor
ICAgICAgICAgICAgdmFyIHN0eWxlVG9VcGRhdGUgPSBzdHlsZU1hcFtpZF07CisgICAgICAgICAg
ICBpZiAoIXN0eWxlVG9VcGRhdGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBzdHlsZVRvVXBkYXRlLm9yaWdpbmFsU3R5bGUuYm9keVN0YXJ0T2Zmc2V0ID0gcnVsZVJh
bmdlc1tpZF0uYm9keVJhbmdlLnN0YXJ0OworICAgICAgICAgICAgc3R5bGVUb1VwZGF0ZS5vcmln
aW5hbFN0eWxlLmJvZHlFbmRPZmZzZXQgPSBydWxlUmFuZ2VzW2lkXS5ib2R5UmFuZ2UuZW5kOwor
ICAgICAgICB9CisgICAgfSwKKworICAgIHBhdGNoUnVsZUJvZHk6IGZ1bmN0aW9uKG9yaWdpbmFs
Qm9keSwgcHJvcGVydHlEaWZmcywgdG9rZW5pemVyKQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24g
bmV3UHJpb3JpdHlTdWZmaXgoZGlmZikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChk
aWZmLm5ld1ByaW9yaXR5ID09PSAiIikgPyAiIiA6ICgiICEiICsgZGlmZi5uZXdQcmlvcml0eSk7
CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBXaGl0ZXNwYWNlT3BlcmF0aW9uID0geworICAg
ICAgICAgICAgTk9STUFMOiAwLAorICAgICAgICAgICAgQ09QWTogMSwKKyAgICAgICAgICAgIFNL
SVA6IDIKKyAgICAgICAgfTsKKworICAgICAgICBjb25zdCBQcm9wZXJ0eUNoYW5nZVR5cGUgPSB7
CisgICAgICAgICAgICBOT05FOiAwLAorICAgICAgICAgICAgREVMRVRFRDogMSwKKyAgICAgICAg
ICAgIENIQU5HRUQ6IDIKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgbmV3Qm9keSA9ICIiOwor
ICAgICAgICB0b2tlbml6ZXIubGluZSA9IG9yaWdpbmFsQm9keTsKKyAgICAgICAgdG9rZW5pemVy
LmNvbmRpdGlvbiA9IHsgbGV4Q29uZGl0aW9uOiB0b2tlbml6ZXIuX2xleENvbmRpdGlvbnMuSU5J
VElBTCwgcGFyc2VDb25kaXRpb246IHRva2VuaXplci5fcGFyc2VDb25kaXRpb25zLlBST1BFUlRZ
IH07CisKKyAgICAgICAgdmFyIG9wdGlvbmFsTkwgPSAiICI7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgb3JpZ2luYWxCb2R5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgY2gg
PSBvcmlnaW5hbEJvZHkuY2hhckF0KGkpOworICAgICAgICAgICAgaWYgKGNoID09PSAiXHIiIHx8
IGNoID09PSAiXG4iKSB7CisgICAgICAgICAgICAgICAgb3B0aW9uYWxOTCA9IGNoOworICAgICAg
ICAgICAgICAgIGlmIChpICsgMSA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICB2YXIg
Y2hOZXh0ID0gb3JpZ2luYWxCb2R5LmNoYXJBdChpICsgMSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjaE5leHQgIT09IGNoICYmIChjaE5leHQgPT09ICJcciIgfHwgY2hOZXh0ID09PSAiXG4i
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsTkwgKz0gY2hOZXh0OworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFBhcnNl
IHJ1bGUgYm9keS4KKyAgICAgICAgdmFyIGxhc3RQb3MgPSAwOworICAgICAgICB2YXIgcHJvcGVy
dHlOYW1lOworICAgICAgICB2YXIgY3VycmVudFByb3BlcnR5VHlwZSA9IFByb3BlcnR5Q2hhbmdl
VHlwZS5OT05FOworICAgICAgICB2YXIgc2VlblZhbHVlU3RhcnQgPSBmYWxzZTsKKyAgICAgICAg
dmFyIGhhbmRsZWRQcm9wZXJ0aWVzID0ge307CisgICAgICAgIHZhciB3aGl0ZXNwYWNlSGFuZGxp
bmcgPSBXaGl0ZXNwYWNlT3BlcmF0aW9uLk5PUk1BTDsKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgdmFyIG5ld1BvcyA9IHRva2VuaXplci5uZXh0VG9rZW4obGFzdFBvcyk7CisgICAgICAgICAg
ICB2YXIgdG9rZW5UeXBlID0gdG9rZW5pemVyLnRva2VuVHlwZTsKKyAgICAgICAgICAgIHZhciB0
b2tlblRleHQgPSBvcmlnaW5hbEJvZHkuc3Vic3RyaW5nKGxhc3RQb3MsIG5ld1Bvcyk7CisgICAg
ICAgICAgICBpZiAod2hpdGVzcGFjZUhhbmRsaW5nICE9PSBXaGl0ZXNwYWNlT3BlcmF0aW9uLk5P
Uk1BTCkgeworICAgICAgICAgICAgICAgIGlmICghdG9rZW5UeXBlICYmICF0b2tlblRleHQudHJp
bSgpLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBpZiAod2hpdGVzcGFjZUhhbmRsaW5n
ID09PSBXaGl0ZXNwYWNlT3BlcmF0aW9uLkNPUFkpCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdCb2R5ICs9IHRva2VuVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBXaGl0ZXNw
YWNlT3BlcmF0aW9uLlNLSVAKKyAgICAgICAgICAgICAgICAgICAgbGFzdFBvcyA9IG5ld1BvczsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VIYW5kbGluZyA9IFdoaXRlc3BhY2VPcGVyYXRp
b24uTk9STUFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2VuVHlwZSA9PT0g
ImNzcy1wcm9wZXJ0eSIpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSB0b2tlblRl
eHQ7CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0eURpZmZzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eURpZmZzW3Byb3BlcnR5TmFtZV0ubmV3
VmFsdWUgPT09ICIiKQorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5VHlw
ZSA9IFByb3BlcnR5Q2hhbmdlVHlwZS5ERUxFVEVEOworICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eVR5cGUgPSBQcm9wZXJ0
eUNoYW5nZVR5cGUuQ0hBTkdFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0
eURpZmZzW3Byb3BlcnR5TmFtZV0uZGlzYWJsZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Qm9keSArPSAiLyogIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0g
dG9rZW5UZXh0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGhh
bmRsZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IG51bGw7CisgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eVR5cGUgPSBQcm9wZXJ0eUNoYW5nZVR5cGUuTk9O
RTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keSArPSB0b2tlblRleHQ7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dFByb3BlcnR5VHlwZSAhPT0gUHJvcGVydHlDaGFuZ2VUeXBlLk5PTkUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRva2VuaXplci5jb25kaXRpb24ucGFyc2VDb25kaXRpb24gIT0gdG9rZW5p
emVyLl9wYXJzZUNvbmRpdGlvbnMuUFJPUEVSVFlfVkFMVUUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzZWVuVmFsdWVTdGFydCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50UHJvcGVydHlUeXBlID09PSBQcm9wZXJ0eUNoYW5nZVR5cGUuQ0hBTkdFRCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCb2R5ICs9IHByb3BlcnR5RGlm
ZnNbcHJvcGVydHlOYW1lXS5uZXdWYWx1ZSArIG5ld1ByaW9yaXR5U3VmZml4KHByb3BlcnR5RGlm
ZnNbcHJvcGVydHlOYW1lXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jv
ZHkgKz0gdG9rZW5UZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJv
cGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdLmRpc2FibGVkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3Qm9keSArPSAiICovIjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VlblZhbHVlU3RhcnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVzcGFjZUhhbmRs
aW5nID0gV2hpdGVzcGFjZU9wZXJhdGlvbi5TS0lQOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRQcm9wZXJ0eVR5cGUgPSBQcm9wZXJ0eUNoYW5nZVR5cGUuTk9ORTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFByb3BlcnR5VHlwZSAhPT0gUHJv
cGVydHlDaGFuZ2VUeXBlLkRFTEVURUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3
Qm9keSArPSB0b2tlblRleHQ7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNlZW5W
YWx1ZVN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuVHlwZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UHJvcGVydHlUeXBlICE9PSBQ
cm9wZXJ0eUNoYW5nZVR5cGUuREVMRVRFRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdCb2R5ICs9IHRva2VuVGV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRva2VuVGV4dCA9PT0gIjoiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzZWVuVmFsdWVTdGFydCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aGl0ZXNwYWNlSGFuZGxpbmcgPSBXaGl0ZXNwYWNlT3BlcmF0aW9uLkNPUFk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWVuVmFsdWVTdGFydCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV3Qm9keSAr
PSB0b2tlblRleHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxhc3RQb3MgPSBuZXdQ
b3M7CisgICAgICAgIH0gd2hpbGUgKGxhc3RQb3MgPCBvcmlnaW5hbEJvZHkubGVuZ3RoKTsKKwor
ICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydHlEaWZmcykgeworICAgICAg
ICAgICAgaWYgKGhhbmRsZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0pCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB2YXIgZGlmZiA9IHByb3BlcnR5RGlmZnNbcHJvcGVy
dHlOYW1lXTsKKyAgICAgICAgICAgIGlmIChkaWZmLm5ld1ZhbHVlID09PSAiIikKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChkaWZmLmRpc2FibGVkKQorICAgICAg
ICAgICAgICAgIG5ld0JvZHkgKz0gIi8qICI7CisgICAgICAgICAgICBuZXdCb2R5ICs9IHByb3Bl
cnR5TmFtZSArICI6ICIgKyBkaWZmLm5ld1ZhbHVlICsgbmV3UHJpb3JpdHlTdWZmaXgoZGlmZikg
KyAiOyI7CisgICAgICAgICAgICBpZiAoZGlmZi5kaXNhYmxlZCkKKyAgICAgICAgICAgICAgICBu
ZXdCb2R5ICs9ICIgKi8iOworICAgICAgICAgICAgbmV3Qm9keSArPSBvcHRpb25hbE5MOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld0JvZHk7CisgICAgfSwKKworICAgIGdldFBhdGNo
ZWRTdHlsZVNoZWV0OiBmdW5jdGlvbih0b2tlbml6ZXIpCisgICAgeworICAgICAgICBmdW5jdGlv
biBzb3J0ZXIobGVmdEVudHJ5LCByaWdodEVudHJ5KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbGVmdEVudHJ5Lm9yaWdpbmFsU3R5bGUuYm9keVN0YXJ0T2Zmc2V0IC0gcmlnaHRFbnRy
eS5vcmlnaW5hbFN0eWxlLmJvZHlTdGFydE9mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIHZh
ciBvcmlnaW5hbFNvdXJjZSA9IHRoaXMuX29yaWdpbmFsU291cmNlOworICAgICAgICB2YXIgcGF0
Y2hlZFN0eWxlc2hlZXQgPSAiIjsKKyAgICAgICAgdmFyIGxhc3RTdHlsZXNoZWV0UG9zID0gMDsK
KyAgICAgICAgdmFyIHNvcnRlZFN0eWxlRW50cmllcyA9IFtdOworICAgICAgICBmb3IgKHZhciBz
dHlsZUlkIGluIHRoaXMuX3N0eWxlU2hlZXREZWx0YS5zdHlsZU1hcCkKKyAgICAgICAgICAgIHNv
cnRlZFN0eWxlRW50cmllcy5wdXNoKHRoaXMuX3N0eWxlU2hlZXREZWx0YS5zdHlsZU1hcFtzdHls
ZUlkXSk7CisgICAgICAgIHNvcnRlZFN0eWxlRW50cmllcy5zb3J0KHNvcnRlcik7CisKKyAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3J0ZWRTdHlsZUVudHJpZXMubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgIHZhciBzdHlsZUVudHJ5ID0gc29ydGVkU3R5bGVFbnRyaWVzW2ldOworICAg
ICAgICAgICAgdmFyIGJvZHlTdGFydCA9IHN0eWxlRW50cnkub3JpZ2luYWxTdHlsZS5ib2R5U3Rh
cnRPZmZzZXQ7CisgICAgICAgICAgICB2YXIgYm9keUVuZCA9IHN0eWxlRW50cnkub3JpZ2luYWxT
dHlsZS5ib2R5RW5kT2Zmc2V0OworICAgICAgICAgICAgcGF0Y2hlZFN0eWxlc2hlZXQgKz0gb3Jp
Z2luYWxTb3VyY2Uuc3Vic3RyaW5nKGxhc3RTdHlsZXNoZWV0UG9zLCBib2R5U3RhcnQgKyAxKTsK
KyAgICAgICAgICAgIHZhciBib2R5VG9QYXRjaCA9IG9yaWdpbmFsU291cmNlLnN1YnN0cmluZyhi
b2R5U3RhcnQgKyAxLCBib2R5RW5kKTsKKyAgICAgICAgICAgIHBhdGNoZWRTdHlsZXNoZWV0ICs9
IHRoaXMucGF0Y2hSdWxlQm9keShib2R5VG9QYXRjaCwgc3R5bGVFbnRyeS5kZWx0YXMsIHRva2Vu
aXplcik7CisgICAgICAgICAgICBsYXN0U3R5bGVzaGVldFBvcyA9IGJvZHlFbmQ7CisgICAgICAg
IH0KKyAgICAgICAgcGF0Y2hlZFN0eWxlc2hlZXQgKz0gb3JpZ2luYWxTb3VyY2Uuc3Vic3RyaW5n
KGxhc3RTdHlsZXNoZWV0UG9zLCBvcmlnaW5hbFNvdXJjZS5sZW5ndGgpOworICAgICAgICByZXR1
cm4gcGF0Y2hlZFN0eWxlc2hlZXQ7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcwppbmRleCA0ZmRhMDdiLi5lYzc1Yjc1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCkBAIC0zNzUsNiAr
Mzc1LDcgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgCiAgICAgICAgIHRoaXMubWFpblJlc291cmNlTG9hZFRpbWUgPSAtMTsKICAgICAgICAgdGhp
cy5tYWluUmVzb3VyY2VET01Db250ZW50VGltZSA9IC0xOworICAgICAgICBkZWxldGUgdGhpcy5f
aHJlZlRvTG9jYWxDb250ZW50OwogIAogICAgICAgICB0aGlzLnZpZXdzQ29udGFpbmVyRWxlbWVu
dC5yZW1vdmVDaGlsZHJlbigpOwogCkBAIC03MTEsNyArNzEyLDEyIEBAIFdlYkluc3BlY3Rvci5S
ZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5yZXNvdXJjZUNhdGVnb3JpZXMuc3R5bGVzaGVldHM6CiAgICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5yZXNvdXJjZUNhdGVnb3JpZXMuc2NyaXB0czoKICAgICAgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLnJlc291cmNlQ2F0ZWdvcmllcy54aHI6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlVmlldyhyZXNvdXJjZSk7CisgICAgICAgICAgICAgICAg
dmFyIHZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcocmVzb3VyY2UpOworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9ocmVmVG9Mb2NhbENvbnRlbnQgJiYgcmVzb3VyY2UudXJsIGlu
IHRoaXMuX2hyZWZUb0xvY2FsQ29udGVudCkgeworICAgICAgICAgICAgICAgICAgICB2aWV3LnVw
ZGF0ZUxvY2FsQ29udGVudCh0aGlzLl9ocmVmVG9Mb2NhbENvbnRlbnRbcmVzb3VyY2UudXJsXSwg
cmVzb3VyY2UubWltZVR5cGUgfHwgInRleHQvY3NzIik7CisgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9ocmVmVG9Mb2NhbENvbnRlbnRbcmVzb3VyY2UudXJsXTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZpZXc7CiAgICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5yZXNvdXJjZUNhdGVnb3JpZXMuaW1hZ2VzOgogICAgICAgICAgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkltYWdlVmlldyhyZXNvdXJjZSk7CiAgICAgICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5yZXNvdXJjZUNhdGVnb3JpZXMuZm9udHM6CkBAIC03MjEsNiArNzI3
LDE4IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IH0KICAgICB9LAogCisgICAgcHVzaFJlc291cmNlTG9jYWxDb250ZW50OiBmdW5jdGlvbih1cmws
IGxvY2FsQ29udGVudCkKKyAgICB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IFdlYkluc3BlY3Rv
ci5yZXNvdXJjZVVSTE1hcFt1cmxdOworICAgICAgICBpZiAocmVzb3VyY2UgJiYgcmVzb3VyY2Uu
X3Jlc291cmNlc1ZpZXcpCisgICAgICAgICAgICByZXNvdXJjZS5fcmVzb3VyY2VzVmlldy51cGRh
dGVMb2NhbENvbnRlbnQobG9jYWxDb250ZW50LCByZXNvdXJjZS5taW1lVHlwZSB8fCAidGV4dC9j
c3MiKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX2hyZWZUb0xvY2Fs
Q29udGVudCkKKyAgICAgICAgICAgICAgICB0aGlzLl9ocmVmVG9Mb2NhbENvbnRlbnQgPSB7fTsK
KyAgICAgICAgICAgIHRoaXMuX2hyZWZUb0xvY2FsQ29udGVudFt1cmxdID0gbG9jYWxDb250ZW50
OworICAgICAgICB9CisgICAgfSwKKwogICAgIHNldFNpZGViYXJXaWR0aDogZnVuY3Rpb24od2lk
dGgpCiAgICAgewogICAgICAgICBpZiAodGhpcy52aXNpYmxlUmVzb3VyY2UpIHsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwppbmRleCBlNTRhY2M3Li40NmFkNjQxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCkBAIC02NSw2ICs2NSw3IEBAIFdl
Ykluc3BlY3Rvci5wb3B1bGF0ZUFwcGxpY2F0aW9uU2V0dGluZ3MgPSBmdW5jdGlvbihzZXR0aW5n
c1N0cmluZykKIFdlYkluc3BlY3Rvci5wb3B1bGF0ZVNlc3Npb25TZXR0aW5ncyA9IGZ1bmN0aW9u
KHNldHRpbmdzU3RyaW5nKQogewogICAgIFdlYkluc3BlY3Rvci5zZXNzaW9uU2V0dGluZ3MuX2xv
YWQoc2V0dGluZ3NTdHJpbmcpOworICAgIFdlYkluc3BlY3Rvci5zZXNzaW9uU2V0dGluZ3MuaW5z
dGFsbFNldHRpbmcoInN0eWxlU2hlZXREZWx0YXMiLCAic3R5bGVzaGVldC1kZWx0YXMiLCB7fSk7
CiAgICAgV2ViSW5zcGVjdG9yLnNlc3Npb25TZXR0aW5ncy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoImxvYWRlZCIpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3
LmpzCmluZGV4IDRkMDNlY2QuLjE4NjJkODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Tb3VyY2VWaWV3LmpzCkBAIC0yMjAsNiArMjIwLDggQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZp
ZXcucHJvdG90eXBlID0gewogCiAgICAgc2VsZWN0TG9jYWxDb250ZW50VGFiOiBmdW5jdGlvbigp
CiAgICAgeworICAgICAgICBpZiAoIXRoaXMudGFiYmVkUGFuZS50YWJPYmplY3RGb3JJZCgibG9j
YWwiKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgdGhpcy50YWJiZWRQYW5lLnNlbGVj
dFRhYkJ5SWQoImxvY2FsIik7CiAgICAgICAgIHRoaXMubG9jYWxTb3VyY2VGcmFtZS52aXNpYmxl
ID0gdHJ1ZTsKICAgICAgICAgaWYgKCJyZXNpemUiIGluIHRoaXMpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCAwYWRmMDU3Li4xYTk0YjViIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE0MTMsNiArMTQxMyw3IEBAIFdl
Ykluc3BlY3Rvci5yZXNldCA9IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuc2Vzc2lvblNldHRpbmdz
LnJlc2V0KCk7CiAgICAgdGhpcy5icmVha3BvaW50TWFuYWdlci5yZXNldCgpOworICAgIHRoaXMu
Y3NzTW9kZWwucmVzZXQoKTsKIAogICAgIGZvciAodmFyIGNhdGVnb3J5IGluIHRoaXMucmVzb3Vy
Y2VDYXRlZ29yaWVzKQogICAgICAgICB0aGlzLnJlc291cmNlQ2F0ZWdvcmllc1tjYXRlZ29yeV0u
cmVtb3ZlQWxsUmVzb3VyY2VzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>63226</attachid>
            <date>2010-08-02 10:06:02 -0700</date>
            <delta_ts>2010-08-02 10:06:02 -0700</delta_ts>
            <desc>[IMAGE] Screenshot of original and patched external CSS stylesheet sources</desc>
            <filename>CSSPatching.png</filename>
            <type>image/png</type>
            <size>133616</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">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
SUVORK5CYII=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63722</attachid>
            <date>2010-08-06 07:50:30 -0700</date>
            <delta_ts>2010-08-07 03:34:47 -0700</delta_ts>
            <desc>[PATCH] Introduced changes made by pfeldman offline</desc>
            <filename>cssdiff_prelim.patch</filename>
            <type>text/plain</type>
            <size>46296</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0cy5qcyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9lbGVtZW50cy10ZXN0cy5qcwppbmRleCA0ZDcyNzdkLi44ZGY3
YjVlIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtdGVzdHMuanMK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXRlc3RzLmpzCkBAIC03MCwxMSAr
NzAsMTIgQEAgZnVuY3Rpb24gZnJvbnRlbmRfZ2V0U2VsZWN0ZWRFbGVtZW50U3R5bGVzKGV4Y2x1
ZGVDb21wdXRlZCwgZXhjbHVkZU1hdGNoZWQpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotZnVu
Y3Rpb24gZnJvbnRlbmRfZ2V0RWxlbWVudFN0eWxlUHJvcGVydHlUcmVlSXRlbShwcm9wZXJ0eU5h
bWUpCitmdW5jdGlvbiBmcm9udGVuZF9nZXRFbGVtZW50U3R5bGVQcm9wZXJ0eVRyZWVJdGVtKHBy
b3BlcnR5TmFtZSwgc2VjdGlvbikKIHsKKyAgICBzZWN0aW9uID0gc2VjdGlvbiA9PT0gdW5kZWZp
bmVkID8gMSA6IHNlY3Rpb247CiAgICAgdmFyIHN0eWxlU2VjdGlvbnMgPSBXZWJJbnNwZWN0b3Iu
cGFuZWxzLmVsZW1lbnRzLnNpZGViYXJQYW5lcy5zdHlsZXMuc2VjdGlvbnNbMF07Ci0gICAgdmFy
IGVsZW1lbnRTdHlsZVNlY3Rpb24gPSBzdHlsZVNlY3Rpb25zWzFdOwotICAgIHZhciBvdXRsaW5l
ID0gZWxlbWVudFN0eWxlU2VjdGlvbi5wcm9wZXJ0aWVzVHJlZU91dGxpbmU7CisgICAgdmFyIHJl
cXVpcmVkU2VjdGlvbiA9IHN0eWxlU2VjdGlvbnNbc2VjdGlvbl07CisgICAgdmFyIG91dGxpbmUg
PSByZXF1aXJlZFNlY3Rpb24ucHJvcGVydGllc1RyZWVPdXRsaW5lOwogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgb3V0bGluZS5jaGlsZHJlbi5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgdHJl
ZUl0ZW0gPSBvdXRsaW5lLmNoaWxkcmVuW2ldOwogICAgICAgICBpZiAodHJlZUl0ZW0ubmFtZSA9
PT0gcHJvcGVydHlOYW1lKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291
cmNlcy9zdHlsZXMtZWRpdC1yZXdyaXRlLmNzcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNv
dXJjZXMvc3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uYWZjOWQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9yZXNvdXJjZXMvc3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MKQEAgLTAsMCArMSwxMiBAQAorZGl2
IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKKy5mb28geworICAgIGNvbG9yOiBibGFjazsK
KyAgICBtYXJnaW46IDEwcHggMCAycHg7Cit9CisKKy5mb28sIC5mb286OmJlZm9yZSB7CisgICAg
Y29sb3I6IGJsdWU7Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWVkaXQtcmV3cml0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWVkaXQtcmV3cml0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMDYyNWFiMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9z
dHlsZXMtZWRpdC1yZXdyaXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMzIEBACitUZXN0cyB0
aGF0IHN0eWxlIGVkaXRpbmcgcHJvcGVybHkgdXBkYXRlcyBDU1Mgc291cmNlLgorCitCZWZvcmUg
Y2hhbmdlOgorZGl2IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKKy5mb28geworICAgIGNv
bG9yOiBibGFjazsKKyAgICBtYXJnaW46IDEwcHggMCAycHg7Cit9CisKKy5mb28sIC5mb286OmJl
Zm9yZSB7CisgICAgY29sb3I6IGJsdWU7Cit9CisKK0FmdGVyIGNoYW5nZToKK2RpdiB7CisgICAg
LyogZm9udC1zaXplOiAxMnB4OyAqLworfQorCisuZm9vIHsKKyAgICBjb2xvcjogZ3JlZW4gIWlt
cG9ydGFudDsKKyAgICBib3JkZXI6IHNvbGlkIHJnYigwLCAyNTUsIDApOworYm9yZGVyLWxlZnQt
d2lkdGg6IDNweCAhaW1wb3J0YW50OworYm9yZGVyLWNvbG9yOiByZ2IoMCwgMjU1LCAwKTsKK30K
KworLmZvbywgLmZvbzo6YmVmb3JlIHsKKyAgICBjb2xvcjogYmx1ZTsKK30KKworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLWVkaXQtcmV3cml0ZS5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1lZGl0LXJld3JpdGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmY5NzI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1lZGl0LXJld3JpdGUuaHRtbApAQCAtMCwwICsxLDE0MiBA
QAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2Vz
L3N0eWxlcy1lZGl0LXJld3JpdGUuY3NzIiAvPgorPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVt
ZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sK
KyAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCisgICAgeworICAgICAgICBpZiAocmVzdWx0
ID09PSAicmVmcmVzaGluZyIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGR1bXBBcnJh
eShyZXN1bHQpOworICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IoImZyb250ZW5kX3J1blRlc3QiLCBjYWxsYmFjayk7Cit9CisKKy8vIEZyb250
ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxl
cikKK3sKKyAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNlVHJh
Y2tpbmdFbmFibGVkKSB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZW5hYmxlUmVzb3VyY2VU
cmFja2luZyhmYWxzZSk7CisgICAgICAgIHJldHVybiAicmVmcmVzaGluZyI7CisgICAgfQorICAg
IHRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBmcm9udGVuZF9leHBhbmRET01T
dWJ0cmVlQW5kUnVuKHRlc3RDb250cm9sbGVyLCBudWxsLCBmcm9udGVuZF9zZWxlY3RGb29FbGVt
ZW50KTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfc2VsZWN0Rm9vRWxlbWVudCh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICBmcm9udGVuZF9zZWxlY3RFbGVtZW50QW5kUnVuKHRlc3RDb250cm9sbGVy
LCAiZm9vIiwgZnJvbnRlbmRfZHVtcEZvb1N0eWxlKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRf
ZHVtcEZvb1N0eWxlKHRlc3RDb250cm9sbGVyKQoreworICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaCgiQmVmb3JlIGNoYW5nZToiKTsKKyAgICBmcm9udGVuZF9kdW1wQ1NTVGV4dCh0ZXN0
Q29udHJvbGxlciwgZmFsc2UsIGZyb250ZW5kX2FsdGVyRm9vU3R5bGVzLmJpbmQodGhpcywgdGVz
dENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfYWx0ZXJGb29TdHlsZXModGVz
dENvbnRyb2xsZXIpCit7CisgICAgZnJvbnRlbmRfdG9nZ2xlUHJvcGVydHkoNCwgImZvbnQtc2l6
ZSIsIGZhbHNlKTsKKyAgICBmcm9udGVuZF9hcHBseVN0eWxlVGV4dCgzLCAiY29sb3IiLCAiY29s
b3I6IGdyZWVuICFpbXBvcnRhbnQiKTsKKyAgICBmcm9udGVuZF9hcHBseVN0eWxlVGV4dCgzLCAi
bWFyZ2luIiwgImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrIik7CisgICAgZnJvbnRlbmRfYWRkUHJv
cGVydHkoMywgImJvcmRlci1sZWZ0LXdpZHRoOiAzcHggIWltcG9ydGFudCIpOworICAgIGZyb250
ZW5kX2FkZFByb3BlcnR5KDMsICJib3JkZXItY29sb3I6ICMwMEZGMDAiKTsKKyAgICB0ZXN0Q29u
dHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZyb250ZW5kX2R1bXBSZXN1bHRzLmJp
bmQodGhpcywgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfYXBwbHlT
dHlsZVRleHQoc2VjdGlvbk9yZGluYWwsIHByb3BlcnR5TmFtZSwgdGV4dCkKK3sKKyAgICB2YXIg
dHJlZUl0ZW0gPSBmcm9udGVuZF9nZXRFbGVtZW50U3R5bGVQcm9wZXJ0eVRyZWVJdGVtKHByb3Bl
cnR5TmFtZSwgc2VjdGlvbk9yZGluYWwpOworICAgIHRyZWVJdGVtLmFwcGx5U3R5bGVUZXh0KHRl
eHQpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF90b2dnbGVQcm9wZXJ0eShzZWN0aW9uT3JkaW5h
bCwgcHJvcGVydHlOYW1lLCBlbmFibGVkKQoreworICAgIHZhciB0cmVlSXRlbSA9IGZyb250ZW5k
X2dldEVsZW1lbnRTdHlsZVByb3BlcnR5VHJlZUl0ZW0ocHJvcGVydHlOYW1lLCBzZWN0aW9uT3Jk
aW5hbCk7CisgICAgdHJlZUl0ZW0udG9nZ2xlRW5hYmxlZCh7IHRhcmdldDogeyBjaGVja2VkOiBl
bmFibGVkIH0gfSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2FkZFByb3BlcnR5KHNlY3Rpb25P
cmRpbmFsLCBwcm9wZXJ0eVRleHQpCit7CisgICAgdmFyIHN0eWxlU2VjdGlvbiA9IFdlYkluc3Bl
Y3Rvci5wYW5lbHMuZWxlbWVudHMuc2lkZWJhclBhbmVzLnN0eWxlcy5zZWN0aW9uc1swXVtzZWN0
aW9uT3JkaW5hbF07CisgICAgdHJlZUl0ZW0gPSBzdHlsZVNlY3Rpb24uYWRkTmV3QmxhbmtQcm9w
ZXJ0eSgpOworICAgIHRyZWVJdGVtLnN0YXJ0RWRpdGluZygpOworICAgIHRyZWVJdGVtLmxpc3RJ
dGVtRWxlbWVudC50ZXh0Q29udGVudCA9IHByb3BlcnR5VGV4dDsKKyAgICB0cmVlSXRlbS5saXN0
SXRlbUVsZW1lbnQuZGlzcGF0Y2hFdmVudChmcm9udGVuZF9rZXlkb3duRXZlbnQoIkVudGVyIikp
OworfQorCitmdW5jdGlvbiBmcm9udGVuZF9rZXlkb3duRXZlbnQoa2V5SWRlbnRpZmllcikKK3sK
KyAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIktleWJvYXJkRXZlbnQiKTsKKyAg
ICBldnQuaW5pdEtleWJvYXJkRXZlbnQoImtleWRvd24iLCB0cnVlIC8qIGNhbiBidWJibGUgKi8s
IHRydWUgLyogY2FuIGNhbmNlbCAqLywgbnVsbCAvKiB2aWV3ICovLCBrZXlJZGVudGlmaWVyLCAi
Iik7CisgICAgcmV0dXJuIGV2dDsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfZHVtcENTU1RleHQo
dGVzdENvbnRyb2xsZXIsIG1vZGlmaWVkLCBjb250aW51YXRpb24pCit7CisgICAgdmFyIHJlc291
cmNlc1BhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXM7CisgICAgdmFyIGZvdW5k
OworICAgIGZvciAodmFyIGlkIGluIFdlYkluc3BlY3Rvci5yZXNvdXJjZXMpIHsKKyAgICAgICAg
dmFyIHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlc1tpZF07CisgICAgICAgIGlmIChy
ZXNvdXJjZS51cmwuaW5kZXhPZigic3R5bGVzLWVkaXQtcmV3cml0ZS5jc3MiKSAhPT0gLTEpIHsK
KyAgICAgICAgICAgIHJlc291cmNlc1BhbmVsLnNob3dSZXNvdXJjZShyZXNvdXJjZSk7CisgICAg
ICAgICAgICB2YXIgdmlldyA9IHJlc291cmNlc1BhbmVsLnJlc291cmNlVmlld0ZvclJlc291cmNl
KHJlc291cmNlKTsKKyAgICAgICAgICAgIGlmIChtb2RpZmllZCkgeworICAgICAgICAgICAgICAg
IHZpZXcuc2VsZWN0TG9jYWxDb250ZW50VGFiKCk7CisgICAgICAgICAgICAgICAgaWYgKCF2aWV3
LmxvY2FsU291cmNlRnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKCJOTyBMT0NBTCBDT05URU5UIFRBQiBGT1VORCIpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyIG1v
ZGVsID0gdmlldy5sb2NhbFNvdXJjZUZyYW1lLnRleHRNb2RlbDsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdmlldy5zZWxlY3RDb250ZW50VGFiKCk7CisgICAgICAgICAg
ICAgICAgdmFyIG1vZGVsID0gdmlldy5zb3VyY2VGcmFtZS50ZXh0TW9kZWw7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVz
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWwu
bGluZXNDb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2gobW9kZWwubGluZShpKSk7CisgICAgICAgICAgICAgICAgY29udGludWF0aW9uKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICghZm91bmQpCisgICAgICAgIGNvbnRp
bnVhdGlvbigpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9kdW1wUmVzdWx0cyh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIkFmdGVyIGNoYW5nZToi
KTsKKyAgICBmcm9udGVuZF9kdW1wQ1NTVGV4dCh0ZXN0Q29udHJvbGxlciwgdHJ1ZSwgZnJvbnRl
bmRfZGlzYWJsZVJlc291cmNlVHJhY2tpbmcuYmluZCh0aGlzLCB0ZXN0Q29udHJvbGxlcikpOwor
fQorCitmdW5jdGlvbiBmcm9udGVuZF9kaXNhYmxlUmVzb3VyY2VUcmFja2luZyh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGZh
bHNlKTsKKworICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVu
Y3Rpb24oKSB7CisgICAgICAgIHRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUod2luZG93Ll9fcmVz
dWx0KTsKKyAgICB9KTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0i
b25sb2FkKCkiPgorPHA+CitUZXN0cyB0aGF0IHN0eWxlIGVkaXRpbmcgcHJvcGVybHkgdXBkYXRl
cyBDU1Mgc291cmNlLgorPC9wPgorCis8ZGl2IGlkPSJjb250YWluZXIiIHN0eWxlPSJmb250LXdl
aWdodDpib2xkIj4KKyAgICA8ZGl2IGNsYXNzPSJmb28iIGlkPSJmb28iPjwvZGl2PgorPC9kaXY+
CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZDVlZDNkMi4uMjczYzM3YiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQwNDUs
NiArNDA0NSw3IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Db29raWVJdGVt
c1ZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTQ29tcGxldGlv
bnMuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5q
cycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZVNoZWV0RGVsdGEu
anMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2UuanMnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VRdWVyeVZpZXcuanMnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YWJhc2VUYWJsZVZpZXcuanMnLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYzBkYzNiZS4uMTIxODVhMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01MDkwMCw2ICs1MDkwMCwxMCBA
QAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXGZyb250LWVuZFxDU1NTdHlsZVNoZWV0RGVsdGEuanMiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XGZyb250LWVuZFxEYXRhYmFzZS5qcyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCA2MjY1YWQyLi5hNTUwYzA2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHRBcnJheS5oIgogI2luY2x1ZGUgIlNj
cmlwdEJyZWFrcG9pbnQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApp
bmRleCAwNzU5NDRhLi5lZGIxYzYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCkBAIC0xMDgxLDEwICsxMDgxLDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
UnVsZVJhbmdlcyhsb25nIGNhbGxJZCwgbG9uZyBzdHlsZVNoZWV0SWQpCiAgICAgQ1NTU3R5bGVT
aGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCktPnN0eWxlU2hlZXRGb3JJZChzdHlsZVNoZWV0
SWQpOwogICAgIGlmIChzdHlsZVNoZWV0ICYmIHN0eWxlU2hlZXQtPmRvYygpKSB7CiAgICAgICAg
IEhhc2hNYXA8bG9uZywgU291cmNlUmFuZ2U+IHJ1bGVSYW5nZXMgPSBjc3NTdG9yZSgpLT5nZXRS
dWxlUmFuZ2VzKHN0eWxlU2hlZXQpOwotICAgICAgICBpZiAoIXJ1bGVSYW5nZXMuc2l6ZSgpKSB7
Ci0gICAgICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRTdHlsZVNoZWV0KGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICAgICAgZm9yIChIYXNoTWFwPGxvbmcsIFNvdXJjZVJhbmdlPjo6aXRlcmF0
b3IgaXQgPSBydWxlUmFuZ2VzLmJlZ2luKCk7IGl0ICE9IHJ1bGVSYW5nZXMuZW5kKCk7ICsraXQp
IHsKICAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnNlY29uZCkgewpAQCAtMTE4NywxMiArMTE4
MywxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJ
ZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmCiAgICAgaWYgKGRpc2FibGVkU3R5bGUpCiAg
ICAgICAgIGRpc2FibGVkU3R5bGUtPnJlbW92ZShwcm9wZXJ0eU5hbWUpOwogCi0gICAgaW50IHN0
eWxlVGV4dExlbmd0aCA9IHN0eWxlVGV4dC5sZW5ndGgoKTsKLQogICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gdGVtcE11dGFibGVTdHlsZSA9IENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjcmVhdGUoKTsKICAgICB0ZW1wTXV0YWJsZVN0eWxlLT5wYXJzZURlY2xhcmF0
aW9uKHN0eWxlVGV4dCk7CiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogdGVtcFN0eWxlID0gc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbio+KHRlbXBNdXRhYmxlU3R5bGUuZ2V0KCkpOwog
CisgICAgaW50IHN0eWxlVGV4dExlbmd0aCA9IHN0eWxlVGV4dC5sZW5ndGgoKTsKKyAgICBWZWN0
b3I8U3RyaW5nPiBjaGFuZ2VkUHJvcGVydGllczsKICAgICBpZiAodGVtcFN0eWxlLT5sZW5ndGgo
KSB8fCAhc3R5bGVUZXh0TGVuZ3RoKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgICAgICAvLyBUaGUgaW5wdXQgd2FzIHBhcnNhYmxlIG9yIHRoZSB1c2VyIGRlbGV0ZWQgZXZl
cnl0aGluZywgc28gcmVtb3ZlIHRoZQpAQCAtMTIwMCwzNiArMTE5NiwzNyBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBj
b25zdCBTdHJpbmcmCiAgICAgICAgIC8vIGEgc2hvcnRoYW5kIHJlbW92ZSBhbGwgdGhlIGxvbmdo
YW5kIHByb3BlcnRpZXMuCiAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQo
cHJvcGVydHlOYW1lKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGxv
bmdoYW5kUHJvcHMgPSBsb25naGFuZFByb3BlcnRpZXMoc3R5bGUsIHByb3BlcnR5TmFtZSk7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZWMgJiYgaSA8IGxvbmdoYW5kUHJvcHMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZWMgJiYgaSA8
IGxvbmdoYW5kUHJvcHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBzdHlsZS0+cmVt
b3ZlUHJvcGVydHkobG9uZ2hhbmRQcm9wc1tpXSwgZWMpOworICAgICAgICAgICAgICAgIGNoYW5n
ZWRQcm9wZXJ0aWVzLmFwcGVuZChsb25naGFuZFByb3BzW2ldKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQorCiAgICAgICAgIC8vIEV4cGxpY2l0bHkgZGVsZXRlIHByb3BlcnRpZXMgd2l0aCBu
byBzaG9ydGhhbmRzIGFzIHdlbGwgYXMgc2hvcnRoYW5kcyB0aGVtc2VsdmVzLgogICAgICAgICBp
ZiAoIWVjKQogICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwg
ZWMpOwogCiAgICAgICAgIGlmIChlYykgewotICAgICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBw
bHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSwgSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpKTsKKyAgICAgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5
bGVUZXh0KGNhbGxJZCwgZmFsc2UsIEluc3BlY3RvclZhbHVlOjpudWxsKCksIHRvQXJyYXkoY2hh
bmdlZFByb3BlcnRpZXMpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0K
IAogICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhhdCB0aGUgcHJvcGVydHkgd2FzIHN1Y2Nlc3NmdWxs
eSBkZWxldGVkLgogICAgIGlmICghc3R5bGVUZXh0TGVuZ3RoKSB7Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gY2hhbmdlZFByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7Ci0gICAgICAgIGNoYW5nZWRQcm9wZXJ0aWVzLT5wdXNoU3RyaW5nKHByb3BlcnR5TmFtZSk7
Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgdHJ1ZSwgSW5z
cGVjdG9yVmFsdWU6Om51bGwoKSwgY2hhbmdlZFByb3BlcnRpZXMucmVsZWFzZSgpKTsKKyAgICAg
ICAgY2hhbmdlZFByb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5TmFtZSk7CisgICAgICAgIG1fZnJv
bnRlbmQtPmRpZEFwcGx5U3R5bGVUZXh0KGNhbGxJZCwgdHJ1ZSwgYnVpbGRPYmplY3RGb3JTdHls
ZShzdHlsZSwgdHJ1ZSksIHRvQXJyYXkoY2hhbmdlZFByb3BlcnRpZXMpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmICghdGVtcFN0eWxlLT5sZW5ndGgoKSkgewotICAgICAgICBt
X2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNlLCBJbnNwZWN0b3JWYWx1
ZTo6bnVsbCgpLCBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkpOworICAgICAgICBtX2Zyb250ZW5k
LT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNlLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgp
LCB0b0FycmF5KGNoYW5nZWRQcm9wZXJ0aWVzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICAvLyBJdGVyYXRlIG9mIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXN0IGVsZW1lbnQncyBz
dHlsZSBkZWNsYXJhdGlvbiBhbmQKICAgICAvLyBhZGQgdGhlbSB0byB0aGUgcmVhbCBzdHlsZSBk
ZWNsYXJhdGlvbi4gV2UgdGFrZSBjYXJlIHRvIG1vdmUgc2hvcnRoYW5kcy4KICAgICBIYXNoU2V0
PFN0cmluZz4gZm91bmRTaG9ydGhhbmRzOwotICAgIFZlY3RvcjxTdHJpbmc+IGNoYW5nZWRQcm9w
ZXJ0aWVzOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRlbXBTdHlsZS0+bGVuZ3Ro
KCk7ICsraSkgewogICAgICAgICBTdHJpbmcgbmFtZSA9IHRlbXBTdHlsZS0+aXRlbShpKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMKaW5kZXggNjZhMjBj
ZS4uYjgwMGUzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0
eWxlTW9kZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9k
ZWwuanMKQEAgLTMwLDEyICszMCwxMDQgQEAKIAogV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwg
PSBmdW5jdGlvbigpCiB7CisgICAgdGhpcy5yZXNldCgpOworICAgIFdlYkluc3BlY3Rvci5zZXNz
aW9uU2V0dGluZ3MuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkIiwgdGhpcy5fc2Vzc2lvbkxvYWRl
ZCwgdGhpcyk7CiB9CiAKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLk5PX1VOREVSTFlJTkdf
U1RZTEVTSEVFVF9JRCA9IC0xOworCiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5
cGUgPSB7CisgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2VkaXRl
ZFN0eWxlU2hlZXRCeUlkID0ge307CisgICAgfSwKKworICAgIGdldCBlZGl0ZWRTdHlsZVNoZWV0
TWFwKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9lZGl0ZWRTdHlsZVNoZWV0QnlJZDsK
KyAgICB9LAorCisgICAgZWRpdGVkU3R5bGVTaGVldDogZnVuY3Rpb24oc3R5bGVTaGVldElkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRlZFN0eWxlU2hlZXRNYXBbc3R5bGVTaGVl
dElkXTsKKyAgICB9LAorCisgICAgcGFyc2VQYXlsb2FkOiBmdW5jdGlvbihwYXlsb2FkKQorICAg
IHsKKyAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB2YXIgYm91bmRQZXJzaXN0Q2FsbGJh
Y2sgPSB0aGlzLl9zYXZlU3RhdGUuYmluZCh0aGlzKTsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4g
cGF5bG9hZCkKKyAgICAgICAgICAgIHRoaXMuX2VkaXRlZFN0eWxlU2hlZXRCeUlkW2lkXSA9IFdl
Ykluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLkVkaXRlZFN0eWxlU2hlZXQucGFyc2VQYXlsb2FkKHBh
eWxvYWRbaWRdLCBib3VuZFBlcnNpc3RDYWxsYmFjayk7CisgICAgfSwKKworICAgIF9zZXNzaW9u
TG9hZGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgcGF5bG9hZCA9IFdlYkluc3Bl
Y3Rvci5zZXNzaW9uU2V0dGluZ3Muc3R5bGVTaGVldENoYW5nZXM7CisgICAgICAgIGlmICghcGF5
bG9hZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLnBhcnNlUGF5bG9hZChw
YXlsb2FkKTsKKyAgICB9LAorCisgICAgX2J1aWxkU3RhdGVPYmplY3Q6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHZhciByZXN1bHQgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhp
cy5fZWRpdGVkU3R5bGVTaGVldEJ5SWQpCisgICAgICAgICAgICByZXN1bHRbaWRdID0gdGhpcy5f
ZWRpdGVkU3R5bGVTaGVldEJ5SWRbaWRdLmRlbHRhLnN0eWxlRW50cnlNYXA7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIF9zYXZlU3RhdGU6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIFdlYkluc3BlY3Rvci5zZXNzaW9uU2V0dGluZ3Muc3R5bGVTaGVldENoYW5nZXMg
PSB0aGlzLmFzUGF5bG9hZCgpOworICAgIH0sCisKKyAgICBwcm9jZXNzU3R5bGVEZWx0YTogZnVu
Y3Rpb24obmV3U3R5bGUsIGNoYW5nZWRQcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgdmFyIHBh
cmVudFN0eWxlU2hlZXRJZCA9IG5ld1N0eWxlLnBhcmVudFN0eWxlU2hlZXRJZCA/IG5ld1N0eWxl
LnBhcmVudFN0eWxlU2hlZXRJZCA6IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLk5PX1VOREVS
TFlJTkdfU1RZTEVTSEVFVF9JRDsKKyAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSB0aGlzLl9lZGl0
ZWRTdHlsZVNoZWV0QnlJZFtwYXJlbnRTdHlsZVNoZWV0SWRdOworICAgICAgICBpZiAoc3R5bGVT
aGVldCkKKyAgICAgICAgICAgIHN0eWxlU2hlZXQubWVyZ2VTdHlsZURlbHRhKG5ld1N0eWxlLCBj
aGFuZ2VkUHJvcGVydGllcyk7CisgICAgfSwKKwogICAgIGdldFN0eWxlc0FzeW5jOiBmdW5jdGlv
bihub2RlSWQsIGF1dGhPbmx5LCB1c2VyQ2FsbGJhY2spCiAgICAgewotICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcCh1c2VyQ2FsbGJh
Y2spLCBub2RlSWQsIGF1dGhPbmx5KTsKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soc3R5bGVz
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3R5bGVzKQorICAgICAgICAgICAgICAgIHRo
aXMuX3VwZGF0ZVN0eWxlcyhzdHlsZXMpOworICAgICAgICAgICAgdXNlckNhbGxiYWNrKHN0eWxl
cyk7CisgICAgICAgIH0KKworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlcyhXZWJJ
bnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjay5iaW5kKHRoaXMpKSwgbm9kZUlkLCBhdXRo
T25seSk7CisgICAgfSwKKworICAgIF91cGRhdGVTdHlsZXM6IGZ1bmN0aW9uKHN0eWxlcykKKyAg
ICB7CisgICAgICAgIHZhciBib3VuZFBlcnNpc3RDYWxsYmFjayA9IHRoaXMuX3NhdmVTdGF0ZS5i
aW5kKHRoaXMpOworCisgICAgICAgIGlmIChzdHlsZXMuaW5saW5lU3R5bGUpCisgICAgICAgICAg
ICB0aGlzLl90cmFja1N0eWxlKFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLk5PX1VOREVSTFlJ
TkdfU1RZTEVTSEVFVF9JRCwgc3R5bGVzLmlubGluZVN0eWxlLCBib3VuZFBlcnNpc3RDYWxsYmFj
ayk7CisKKyAgICAgICAgdmFyIGNzc1J1bGVzID0gc3R5bGVzLm1hdGNoZWRDU1NSdWxlczsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjc3NSdWxlcy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgdmFyIHN0eWxlID0gY3NzUnVsZXNbaV0uc3R5bGU7CisgICAgICAgICAgICB2YXIgcGFy
ZW50U3R5bGVTaGVldElkID0gc3R5bGUucGFyZW50U3R5bGVTaGVldElkOworICAgICAgICAgICAg
aWYgKCFwYXJlbnRTdHlsZVNoZWV0SWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB0aGlzLl90cmFja1N0eWxlKHBhcmVudFN0eWxlU2hlZXRJZCwgc3R5bGUsIGJvdW5k
UGVyc2lzdENhbGxiYWNrKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfdHJhY2tTdHlsZTog
ZnVuY3Rpb24ocGFyZW50U3R5bGVTaGVldElkLCBzdHlsZSwgcGVyc2lzdENhbGxiYWNrKQorICAg
IHsKKyAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSB0aGlzLl9lZGl0ZWRTdHlsZVNoZWV0QnlJZFtw
YXJlbnRTdHlsZVNoZWV0SWRdOworICAgICAgICBpZiAoIXN0eWxlU2hlZXQpIHsKKyAgICAgICAg
ICAgIHN0eWxlU2hlZXQgPSBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRWRpdGVkU3R5
bGVTaGVldChwYXJlbnRTdHlsZVNoZWV0SWQsIHBlcnNpc3RDYWxsYmFjayk7CisgICAgICAgICAg
ICB0aGlzLl9lZGl0ZWRTdHlsZVNoZWV0QnlJZFtwYXJlbnRTdHlsZVNoZWV0SWRdID0gc3R5bGVT
aGVldDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3R5bGUuaWQgJiYgIXN0eWxlU2hlZXQuaGFz
U3R5bGVJZChzdHlsZS5pZCkpCisgICAgICAgICAgICBzdHlsZVNoZWV0LmRpZEdldE9yaWdpbmFs
U3R5bGUoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShzdHlsZSkp
OyAvLyBvbmx5IGZvciBib3VuZCBzdHlsZXMKICAgICB9LAogCiAgICAgZ2V0Q29tcHV0ZWRTdHls
ZUFzeW5jOiBmdW5jdGlvbihub2RlSWQsIHVzZXJDYWxsYmFjaykKQEAgLTgzLDEwICsxNzUsMTIg
QEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICB2YXIgbmV3U3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvbi5wYXJzZVN0eWxlKG5ld1BheWxvYWQpOworICAgICAgICAgICAgdGhpcy5wcm9jZXNz
U3R5bGVEZWx0YShuZXdTdHlsZSwgWyBwcm9wZXJ0eU5hbWUgXSk7CisKICAgICAgICAgICAgIHVz
ZXJDYWxsYmFjayhuZXdTdHlsZSk7CiAgICAgICAgIH0KIAotICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLnRvZ2dsZVN0eWxlRW5hYmxlZChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFj
ayksIHN0eWxlSWQsIHByb3BlcnR5TmFtZSwgZGlzYWJsZWQpOworICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnRvZ2dsZVN0eWxlRW5hYmxlZChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxs
YmFjay5iaW5kKHRoaXMpKSwgc3R5bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNhYmxlZCk7CiAgICAg
fSwKIAogICAgIHNldENTU1RleHQ6IGZ1bmN0aW9uKHN0eWxlSWQsIGNzc1RleHQpCkBAIC0xMDEs
MTEgKzE5NSwzMTMgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFj
aygpOwogICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIG5ld1N0eWxlID0g
V2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2FkKTsK
KyAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHlsZURlbHRhKG5ld1N0eWxlLCBjaGFuZ2Vk
UHJvcGVydGllcyk7CisKICAgICAgICAgICAgICAgICB2YXIgbmV3U3R5bGUgPSBuZXdQYXlsb2Fk
ID8gV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucGFyc2VTdHlsZShuZXdQYXlsb2Fk
KSA6IG51bGw7CiAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKG5ld1N0eWxlLCBjaGFu
Z2VkUHJvcGVydGllcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLmFwcGx5U3R5bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNh
bGxiYWNrKSwgc3R5bGVJZCwgc3R5bGVUZXh0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLmFwcGx5U3R5bGVUZXh0KFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNh
bGxiYWNrLmJpbmQodGhpcykpLCBzdHlsZUlkLCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSk7Cisg
ICAgfSwKKworICAgIGFzUGF5bG9hZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IHt9OworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9lZGl0ZWRTdHlsZVNoZWV0
QnlJZCkKKyAgICAgICAgICAgIHJlc3VsdFtpZF0gPSB0aGlzLl9lZGl0ZWRTdHlsZVNoZWV0QnlJ
ZFtpZF0uYXNQYXlsb2FkKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCitX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5FZGl0ZWRTdHlsZVNoZWV0ID0gZnVuY3Rpb24oc3R5
bGVTaGVldElkLCBzdHlsZVNoZWV0Q2hhbmdlZENhbGxiYWNrLCBkZWx0YSkKK3sKKyAgICB0aGlz
Ll9zdHlsZVNoZWV0SWQgPSBzdHlsZVNoZWV0SWQ7CisgICAgdGhpcy5faGFzU3R5bGVTaGVldCA9
IChzdHlsZVNoZWV0SWQgIT09IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLk5PX1VOREVSTFlJ
TkdfU1RZTEVTSEVFVF9JRCk7CisgICAgdGhpcy5fc3R5bGVTaGVldENoYW5nZWRDYWxsYmFjayA9
IHN0eWxlU2hlZXRDaGFuZ2VkQ2FsbGJhY2s7CisgICAgdGhpcy5faWRUb09yaWdpbmFsU3R5bGUg
PSB7fTsKKyAgICB0aGlzLmRlbHRhID0gZGVsdGEgfHwgbmV3IFdlYkluc3BlY3Rvci5DU1NTdHls
ZVNoZWV0RGVsdGEoKTsKKyAgICBpZiAodGhpcy5faGFzU3R5bGVTaGVldCkgeworICAgICAgICB0
aGlzLl9wYXRjaGVyID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlU2hlZXRQ
YXRjaGVyKHN0eWxlU2hlZXRJZCwgdGhpcy5fc3R5bGVTaGVldFRleHRDaGFuZ2VkLmJpbmQodGhp
cykpOworICAgICAgICB0aGlzLl9wYXRjaGVyLnNldERlbHRhKHRoaXMuZGVsdGEpOworICAgICAg
ICBpZiAoZGVsdGEpCisgICAgICAgICAgICB0aGlzLl9wYXRjaGVyLnVwZGF0ZVN0eWxlVGV4dCgp
OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRWRpdGVkU3R5bGVTaGVl
dC5wYXJzZVBheWxvYWQgPSBmdW5jdGlvbihwYXlsb2FkLCBzdHlsZVNoZWV0Q2hhbmdlZENhbGxi
YWNrKQoreworICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRWRpdGVk
U3R5bGVTaGVldChwYXlsb2FkLnN0eWxlU2hlZXRJZCwgc3R5bGVTaGVldENoYW5nZWRDYWxsYmFj
aywgV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXREZWx0YS5wYXJzZVBheWxvYWQocGF5bG9hZC5k
ZWx0YVBheWxvYWQpKTsKK30KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwuRWRpdGVkU3R5
bGVTaGVldC5wcm90b3R5cGUgPSB7CisgICAgZGlkR2V0T3JpZ2luYWxTdHlsZTogZnVuY3Rpb24o
b3JpZ2luYWxTdHlsZSkKKyAgICB7CisgICAgICAgIHRoaXMuX2lkVG9PcmlnaW5hbFN0eWxlW29y
aWdpbmFsU3R5bGUuaWRdID0gb3JpZ2luYWxTdHlsZTsKKyAgICAgICAgdGhpcy5kZWx0YS50cmFj
a1N0eWxlKG9yaWdpbmFsU3R5bGUpOworICAgIH0sCisKKyAgICBtZXJnZVN0eWxlRGVsdGE6IGZ1
bmN0aW9uKG5ld1N0eWxlLCBjaGFuZ2VkUHJvcGVydGllcykKKyAgICB7CisgICAgICAgIHRoaXMu
ZGVsdGEuYWRkU3R5bGVDaGFuZ2VzKGNoYW5nZWRQcm9wZXJ0aWVzLCBuZXdTdHlsZSk7CisgICAg
ICAgIGlmICh0aGlzLl9oYXNTdHlsZVNoZWV0KQorICAgICAgICAgICAgdGhpcy5fcGF0Y2hlci51
cGRhdGVTdHlsZVRleHQoKTsKKyAgICB9LAorCisgICAgaGFzU3R5bGVJZDogZnVuY3Rpb24oc3R5
bGVJZCkKKyAgICB7CisgICAgICAgIHJldHVybiAoc3R5bGVJZCBpbiB0aGlzLl9pZFRvT3JpZ2lu
YWxTdHlsZSk7CisgICAgfSwKKworICAgIF9zdHlsZVNoZWV0VGV4dENoYW5nZWQ6IGZ1bmN0aW9u
KHN0eWxlU2hlZXQsIG9yaWdpbmFsU3R5bGVTaGVldFRleHQsIG5ld1N0eWxlU2hlZXRUZXh0KQor
ICAgIHsKKyAgICAgICAgLy8gTW9kZWwgbW9kaWZpY2F0aW9uL1dJLkNTU1NNLkVkaXRlZFN0eWxl
U2hlZXQgaW5zdGFuY2UgY29uc3RydWN0aW9uIGhhcyByZXN1bHRlZAorICAgICAgICAvLyBpbiBh
biB1cGRhdGVkL2luaXRpYWxpemVkIHN0eWxlc2hlZXQgdGV4dCAodGhlIGxhdHRlciBpcyBhbiBl
bXB0eSBkZWx0YSBjYXNlKS4KKyAgICAgICAgdGhpcy5fZGlkU3R5bGVTaGVldFRleHRDaGFuZ2Uo
c3R5bGVTaGVldCwgbmV3U3R5bGVTaGVldFRleHQpOworICAgICAgICBpZiAodGhpcy5fc3R5bGVT
aGVldENoYW5nZWRDYWxsYmFjaykKKyAgICAgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRDaGFuZ2Vk
Q2FsbGJhY2soKTsKKyAgICB9LAorCisgICAgX2RpZFN0eWxlU2hlZXRUZXh0Q2hhbmdlOiBmdW5j
dGlvbihzdHlsZVNoZWV0LCBuZXdTdHlsZVNoZWV0VGV4dCkKKyAgICB7CisgICAgICAgIGlmIChX
ZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcykKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5w
YW5lbHMucmVzb3VyY2VzLnB1c2hSZXNvdXJjZUxvY2FsQ29udGVudChzdHlsZVNoZWV0LmhyZWYs
IG5ld1N0eWxlU2hlZXRUZXh0KTsKKyAgICB9LAorCisgICAgYXNQYXlsb2FkOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICByZXR1cm4geyBzdHlsZVNoZWV0SWQ6IHRoaXMuX3N0eWxlU2hlZXRJ
ZCwgZGVsdGFQYXlsb2FkOiB0aGlzLmRlbHRhLmFzUGF5bG9hZCgpIH07CisgICAgfQorfQorCitX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5TdHlsZVNoZWV0UGF0Y2hlciA9IGZ1bmN0aW9uKHN0
eWxlU2hlZXRJZCwgc3R5bGVTaGVldFBhdGNoZWRDYWxsYmFjaykKK3sKKyAgICB0aGlzLl9zdHls
ZVNoZWV0SWQgPSBzdHlsZVNoZWV0SWQ7CisgICAgdGhpcy5fc3R5bGVTaGVldFBhdGNoZWRDYWxs
YmFjayA9IHN0eWxlU2hlZXRQYXRjaGVkQ2FsbGJhY2s7CisgICAgdGhpcy5fc3R5bGVTaGVldERl
bHRhID0ge307Cit9CisKK1dlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLlN0eWxlU2hlZXRQYXRj
aGVyLnByb3RvdHlwZSA9IHsKKyAgICBzZXREZWx0YTogZnVuY3Rpb24oc3R5bGVTaGVldERlbHRh
KQorICAgIHsKKyAgICAgICAgdGhpcy5fc3R5bGVTaGVldERlbHRhID0gc3R5bGVTaGVldERlbHRh
OworICAgICAgICB0aGlzLnVwZGF0ZVN0eWxlVGV4dCgpOworICAgIH0sCisKKyAgICB1cGRhdGVT
dHlsZVRleHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN0
eWxlU2hlZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMuX3N0eWxlU2hlZXREZWx0YS5v
cmlnaW5hbFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0OworICAgICAgICAgICAgdGhpcy5oYW5kbGVT
dHlsZVNoZWV0KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIm9yaWdpbmFsU3R5bGVTaGVl
dCIgaW4gdGhpcy5fc3R5bGVTaGVldERlbHRhKQorICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHls
ZVNoZWV0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0
U3R5bGVTaGVldChXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjay5iaW5kKHRoaXMp
KSwgdGhpcy5fc3R5bGVTaGVldElkKTsKKyAgICB9LAorCisgICAgaGFuZGxlU3R5bGVTaGVldDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSB0aGlzLl9zdHlsZVNo
ZWV0RGVsdGEub3JpZ2luYWxTdHlsZVNoZWV0OworICAgICAgICBpZiAoIXN0eWxlU2hlZXQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEZJWE1FOiBlbmFibGUgaGFuZGxpbmcgb2Yg
bm9uLXJlc291cmNlIHN0eWxlc2hlZXRzLgorICAgICAgICB2YXIgdXJsID0gc3R5bGVTaGVldC5o
cmVmOworICAgICAgICBpZiAoIXVybCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFy
IHJlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVVJMTWFwW3VybF07CisgICAgICAgIGlm
ICghcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgiX29yaWdpbmFs
U291cmNlIiBpbiB0aGlzKQorICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHlsZVNoZWV0VGV4dChz
dHlsZVNoZWV0LCB0aGlzLl9vcmlnaW5hbFNvdXJjZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5nZXRSZXNvdXJjZUNvbnRlbnQocmVzb3VyY2UuaWRlbnRpZmllciwg
dGhpcy5oYW5kbGVTdHlsZVNoZWV0VGV4dC5iaW5kKHRoaXMsIHN0eWxlU2hlZXQpKTsKKyAgICB9
LAorCisgICAgaGFuZGxlU3R5bGVTaGVldFRleHQ6IGZ1bmN0aW9uKHN0eWxlU2hlZXQsIHN0eWxl
U2hlZXRUZXh0KQorICAgIHsKKyAgICAgICAgdGhpcy5fb3JpZ2luYWxTb3VyY2UgPSBzdHlsZVNo
ZWV0VGV4dDsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRSdWxlUmFuZ2VzKFdlYkluc3Bl
Y3Rvci5DYWxsYmFjay53cmFwKHRoaXMuaGFuZGxlU3R5bGVTaGVldFJ1bGVSYW5nZXMuYmluZCh0
aGlzLCBzdHlsZVNoZWV0KSksIHRoaXMuX3N0eWxlU2hlZXRJZCk7CisgICAgfSwKKworICAgIGhh
bmRsZVN0eWxlU2hlZXRSdWxlUmFuZ2VzOiBmdW5jdGlvbihzdHlsZVNoZWV0LCBydWxlUmFuZ2Vz
KQorICAgIHsKKyAgICAgICAgaWYgKHJ1bGVSYW5nZXMpIHsKKyAgICAgICAgICAgIHRoaXMuX3N0
eWxlU2hlZXREZWx0YS5ydWxlUmFuZ2VzUmVjZWl2ZWQgPSB0cnVlOworICAgICAgICAgICAgdGhp
cy51cGRhdGVSdWxlUmFuZ2VzKHJ1bGVSYW5nZXMpOworICAgICAgICB9CisgICAgICAgIHZhciB0
b2tlbml6ZXIgPSBXZWJJbnNwZWN0b3IuU291cmNlVG9rZW5pemVyLlJlZ2lzdHJ5LmdldEluc3Rh
bmNlKCkuZ2V0VG9rZW5pemVyKCJ0ZXh0L2NzcyIpOworICAgICAgICB2YXIgbmV3U3R5bGVTaGVl
dFRleHQgPSB0aGlzLmdldFBhdGNoZWRTdHlsZVNoZWV0KHRva2VuaXplcik7CisgICAgICAgIHRo
aXMuX3N0eWxlU2hlZXRQYXRjaGVkQ2FsbGJhY2soc3R5bGVTaGVldCwgdGhpcy5fb3JpZ2luYWxT
b3VyY2UsIG5ld1N0eWxlU2hlZXRUZXh0KTsKKyAgICB9LAorCisgICAgdXBkYXRlUnVsZVJhbmdl
czogZnVuY3Rpb24ocnVsZVJhbmdlcykKKyAgICB7CisgICAgICAgIHZhciBzdHlsZU1hcCA9IHRo
aXMuX3N0eWxlU2hlZXREZWx0YS5zdHlsZUVudHJ5TWFwOworICAgICAgICBmb3IgKHZhciBpZCBp
biBydWxlUmFuZ2VzKSB7CisgICAgICAgICAgICB2YXIgc3R5bGVUb1VwZGF0ZSA9IHN0eWxlTWFw
W2lkXTsKKyAgICAgICAgICAgIGlmICghc3R5bGVUb1VwZGF0ZSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHN0eWxlVG9VcGRhdGUub3JpZ2luYWxTdHlsZS5ib2R5U3Rh
cnRPZmZzZXQgPSBydWxlUmFuZ2VzW2lkXS5ib2R5UmFuZ2Uuc3RhcnQ7CisgICAgICAgICAgICBz
dHlsZVRvVXBkYXRlLm9yaWdpbmFsU3R5bGUuYm9keUVuZE9mZnNldCA9IHJ1bGVSYW5nZXNbaWRd
LmJvZHlSYW5nZS5lbmQ7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcGF0Y2hSdWxlQm9keTog
ZnVuY3Rpb24ob3JpZ2luYWxCb2R5LCBwcm9wZXJ0eURpZmZzLCB0b2tlbml6ZXIpCisgICAgewor
ICAgICAgICBmdW5jdGlvbiBuZXdQcmlvcml0eVN1ZmZpeChkaWZmKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gKGRpZmYubmV3UHJvcGVydHkucHJpb3JpdHkgPT09ICIiKSA/ICIiIDog
KCIgISIgKyBkaWZmLm5ld1Byb3BlcnR5LnByaW9yaXR5KTsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IFdoaXRlc3BhY2VPcGVyYXRpb24gPSB7CisgICAgICAgICAgICBOT1JNQUw6IDAsCisg
ICAgICAgICAgICBDT1BZOiAxLAorICAgICAgICAgICAgU0tJUDogMgorICAgICAgICB9OworCisg
ICAgICAgIGNvbnN0IFByb3BlcnR5Q2hhbmdlVHlwZSA9IHsKKyAgICAgICAgICAgIE5PTkU6IDAs
CisgICAgICAgICAgICBERUxFVEVEOiAxLAorICAgICAgICAgICAgQ0hBTkdFRDogMgorICAgICAg
ICB9OworCisgICAgICAgIHZhciBuZXdCb2R5ID0gIiI7CisgICAgICAgIHRva2VuaXplci5saW5l
ID0gb3JpZ2luYWxCb2R5OworICAgICAgICB0b2tlbml6ZXIuY29uZGl0aW9uID0geyBsZXhDb25k
aXRpb246IHRva2VuaXplci5fbGV4Q29uZGl0aW9ucy5JTklUSUFMLCBwYXJzZUNvbmRpdGlvbjog
dG9rZW5pemVyLl9wYXJzZUNvbmRpdGlvbnMuUFJPUEVSVFkgfTsKKworICAgICAgICB2YXIgb3B0
aW9uYWxOTCA9ICIgIjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmlnaW5hbEJvZHku
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBjaCA9IG9yaWdpbmFsQm9keS5jaGFyQXQo
aSk7CisgICAgICAgICAgICBpZiAoY2ggPT09ICJcciIgfHwgY2ggPT09ICJcbiIpIHsKKyAgICAg
ICAgICAgICAgICBvcHRpb25hbE5MID0gY2g7CisgICAgICAgICAgICAgICAgaWYgKGkgKyAxIDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjaE5leHQgPSBvcmlnaW5hbEJvZHku
Y2hhckF0KGkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoTmV4dCAhPT0gY2ggJiYg
KGNoTmV4dCA9PT0gIlxyIiB8fCBjaE5leHQgPT09ICJcbiIpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uYWxOTCArPSBjaE5leHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyc2UgcnVsZSBib2R5LgorICAgICAgICB2
YXIgbGFzdFBvcyA9IDA7CisgICAgICAgIHZhciBwcm9wZXJ0eU5hbWU7CisgICAgICAgIHZhciBj
dXJyZW50UHJvcGVydHlUeXBlID0gUHJvcGVydHlDaGFuZ2VUeXBlLk5PTkU7CisgICAgICAgIHZh
ciBzZWVuVmFsdWVTdGFydCA9IGZhbHNlOworICAgICAgICB2YXIgaGFuZGxlZFByb3BlcnRpZXMg
PSB7fTsKKyAgICAgICAgdmFyIHdoaXRlc3BhY2VIYW5kbGluZyA9IFdoaXRlc3BhY2VPcGVyYXRp
b24uTk9STUFMOworICAgICAgICBkbyB7CisgICAgICAgICAgICB2YXIgbmV3UG9zID0gdG9rZW5p
emVyLm5leHRUb2tlbihsYXN0UG9zKTsKKyAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0b2tl
bml6ZXIudG9rZW5UeXBlOworICAgICAgICAgICAgdmFyIHRva2VuVGV4dCA9IG9yaWdpbmFsQm9k
eS5zdWJzdHJpbmcobGFzdFBvcywgbmV3UG9zKTsKKyAgICAgICAgICAgIGlmICh3aGl0ZXNwYWNl
SGFuZGxpbmcgIT09IFdoaXRlc3BhY2VPcGVyYXRpb24uTk9STUFMKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCF0b2tlblR5cGUgJiYgIXRva2VuVGV4dC50cmltKCkubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh3aGl0ZXNwYWNlSGFuZGxpbmcgPT09IFdoaXRlc3BhY2VPcGVyYXRp
b24uQ09QWSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0gdG9rZW5UZXh0Owor
ICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIFdoaXRlc3BhY2VPcGVyYXRpb24uU0tJUAorICAg
ICAgICAgICAgICAgICAgICBsYXN0UG9zID0gbmV3UG9zOworICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgd2hp
dGVzcGFjZUhhbmRsaW5nID0gV2hpdGVzcGFjZU9wZXJhdGlvbi5OT1JNQUw7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAodG9rZW5UeXBlID09PSAiY3NzLXByb3BlcnR5IikgeworICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IHRva2VuVGV4dDsKKyAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydHlOYW1lIGluIHByb3BlcnR5RGlmZnMpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHByb3BlcnR5RGlmZnNbcHJvcGVydHlOYW1lXS5uZXdQcm9wZXJ0eS52YWx1ZSA9PT0gIiIp
CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHlUeXBlID0gUHJvcGVydHlD
aGFuZ2VUeXBlLkRFTEVURUQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5VHlwZSA9IFByb3BlcnR5Q2hhbmdlVHlwZS5D
SEFOR0VEOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5RGlmZnNbcHJvcGVy
dHlOYW1lXS5uZXdQcm9wZXJ0eS5kaXNhYmxlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdCb2R5ICs9ICIvKiAiOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Qm9keSArPSB0
b2tlblRleHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFByb3BlcnR5VHlwZSA9IFByb3BlcnR5Q2hhbmdlVHlwZS5OT05F
OworICAgICAgICAgICAgICAgICAgICBuZXdCb2R5ICs9IHRva2VuVGV4dDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
UHJvcGVydHlUeXBlICE9PSBQcm9wZXJ0eUNoYW5nZVR5cGUuTk9ORSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodG9rZW5pemVyLmNvbmRpdGlvbi5wYXJzZUNvbmRpdGlvbiAhPSB0b2tlbml6
ZXIuX3BhcnNlQ29uZGl0aW9ucy5QUk9QRVJUWV9WQUxVRSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHNlZW5WYWx1ZVN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRQcm9wZXJ0eVR5cGUgPT09IFByb3BlcnR5Q2hhbmdlVHlwZS5DSEFOR0VEKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0gcHJvcGVydHlEaWZm
c1twcm9wZXJ0eU5hbWVdLm5ld1Byb3BlcnR5LnZhbHVlICsgbmV3UHJpb3JpdHlTdWZmaXgocHJv
cGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Qm9keSArPSB0b2tlblRleHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwcm9wZXJ0eURpZmZzW3Byb3BlcnR5TmFtZV0ubmV3UHJvcGVydHkuZGlzYWJsZWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCb2R5ICs9ICIgKi8iOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBudWxsOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuVmFsdWVTdGFydCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aGl0ZXNwYWNlSGFuZGxpbmcgPSBXaGl0ZXNwYWNlT3BlcmF0aW9uLlNLSVA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5VHlwZSA9IFByb3BlcnR5Q2hh
bmdlVHlwZS5OT05FOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50
UHJvcGVydHlUeXBlICE9PSBQcm9wZXJ0eUNoYW5nZVR5cGUuREVMRVRFRCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdCb2R5ICs9IHRva2VuVGV4dDsKKyAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICghc2VlblZhbHVlU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghdG9rZW5UeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRQcm9wZXJ0eVR5cGUgIT09IFByb3BlcnR5Q2hhbmdlVHlwZS5ERUxFVEVEKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JvZHkgKz0gdG9rZW5UZXh0OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5UZXh0ID09PSAiOiIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5WYWx1ZVN0YXJ0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VIYW5kbGluZyA9IFdoaXRl
c3BhY2VPcGVyYXRpb24uQ09QWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5WYWx1ZVN0YXJ0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBuZXdCb2R5ICs9IHRva2VuVGV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbGFzdFBvcyA9IG5ld1BvczsKKyAgICAgICAgfSB3aGlsZSAobGFzdFBvcyA8IG9yaWdp
bmFsQm9keS5sZW5ndGgpOworCisgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9w
ZXJ0eURpZmZzKSB7CisgICAgICAgICAgICBpZiAoaGFuZGxlZFByb3BlcnRpZXNbcHJvcGVydHlO
YW1lXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHZhciBkaWZmID0g
cHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdOworICAgICAgICAgICAgaWYgKGRpZmYubmV3UHJv
cGVydHkudmFsdWUgPT09ICIiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKGRpZmYubmV3UHJvcGVydHkuZGlzYWJsZWQpCisgICAgICAgICAgICAgICAgbmV3Qm9k
eSArPSAiLyogIjsKKyAgICAgICAgICAgIG5ld0JvZHkgKz0gcHJvcGVydHlOYW1lICsgIjogIiAr
IGRpZmYubmV3UHJvcGVydHkudmFsdWUgKyBuZXdQcmlvcml0eVN1ZmZpeChkaWZmKSArICI7IjsK
KyAgICAgICAgICAgIGlmIChkaWZmLm5ld1Byb3BlcnR5LmRpc2FibGVkKQorICAgICAgICAgICAg
ICAgIG5ld0JvZHkgKz0gIiAqLyI7CisgICAgICAgICAgICBuZXdCb2R5ICs9IG9wdGlvbmFsTkw7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3Qm9keTsKKyAgICB9LAorCisgICAgZ2V0
UGF0Y2hlZFN0eWxlU2hlZXQ6IGZ1bmN0aW9uKHRva2VuaXplcikKKyAgICB7CisgICAgICAgIGZ1
bmN0aW9uIHNvcnRlcihsZWZ0RW50cnksIHJpZ2h0RW50cnkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBsZWZ0RW50cnkub3JpZ2luYWxTdHlsZS5ib2R5U3RhcnRPZmZzZXQgLSByaWdo
dEVudHJ5Lm9yaWdpbmFsU3R5bGUuYm9keVN0YXJ0T2Zmc2V0OworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIG9yaWdpbmFsU291cmNlID0gdGhpcy5fb3JpZ2luYWxTb3VyY2U7CisgICAgICAgIHZh
ciBwYXRjaGVkU3R5bGVzaGVldCA9ICIiOworICAgICAgICB2YXIgbGFzdFN0eWxlc2hlZXRQb3Mg
PSAwOworICAgICAgICB2YXIgc29ydGVkU3R5bGVFbnRyaWVzID0gW107CisgICAgICAgIHZhciBz
dHlsZUVudHJ5TWFwID0gdGhpcy5fc3R5bGVTaGVldERlbHRhLnN0eWxlRW50cnlNYXA7CisgICAg
ICAgIGZvciAodmFyIHN0eWxlSWQgaW4gc3R5bGVFbnRyeU1hcCkKKyAgICAgICAgICAgIHNvcnRl
ZFN0eWxlRW50cmllcy5wdXNoKHN0eWxlRW50cnlNYXBbc3R5bGVJZF0pOworICAgICAgICBzb3J0
ZWRTdHlsZUVudHJpZXMuc29ydChzb3J0ZXIpOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgc29ydGVkU3R5bGVFbnRyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgc3R5
bGVFbnRyeSA9IHNvcnRlZFN0eWxlRW50cmllc1tpXTsKKyAgICAgICAgICAgIHZhciBib2R5U3Rh
cnQgPSBzdHlsZUVudHJ5Lm9yaWdpbmFsU3R5bGUuYm9keVN0YXJ0T2Zmc2V0OworICAgICAgICAg
ICAgdmFyIGJvZHlFbmQgPSBzdHlsZUVudHJ5Lm9yaWdpbmFsU3R5bGUuYm9keUVuZE9mZnNldDsK
KyAgICAgICAgICAgIHBhdGNoZWRTdHlsZXNoZWV0ICs9IG9yaWdpbmFsU291cmNlLnN1YnN0cmlu
ZyhsYXN0U3R5bGVzaGVldFBvcywgYm9keVN0YXJ0ICsgMSk7CisgICAgICAgICAgICB2YXIgYm9k
eVRvUGF0Y2ggPSBvcmlnaW5hbFNvdXJjZS5zdWJzdHJpbmcoYm9keVN0YXJ0ICsgMSwgYm9keUVu
ZCk7CisgICAgICAgICAgICBwYXRjaGVkU3R5bGVzaGVldCArPSB0aGlzLnBhdGNoUnVsZUJvZHko
Ym9keVRvUGF0Y2gsIHN0eWxlRW50cnkuZGVsdGFzLCB0b2tlbml6ZXIpOworICAgICAgICAgICAg
bGFzdFN0eWxlc2hlZXRQb3MgPSBib2R5RW5kOworICAgICAgICB9CisgICAgICAgIHBhdGNoZWRT
dHlsZXNoZWV0ICs9IG9yaWdpbmFsU291cmNlLnN1YnN0cmluZyhsYXN0U3R5bGVzaGVldFBvcywg
b3JpZ2luYWxTb3VyY2UubGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHBhdGNoZWRTdHlsZXNoZWV0
OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NT
dHlsZVNoZWV0RGVsdGEuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVT
aGVldERlbHRhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBkZjIwNWUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVT
aGVldERlbHRhLmpzCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXRE
ZWx0YSA9IGZ1bmN0aW9uKGlkVG9TdHlsZUVudHJ5TWFwKQoreworICAgIHRoaXMuX2lkVG9TdHls
ZUVudHJ5TWFwID0gaWRUb1N0eWxlRW50cnlNYXAgfHwge307Cit9CisKK1dlYkluc3BlY3Rvci5D
U1NTdHlsZVNoZWV0RGVsdGEucGFyc2VQYXlsb2FkID0gZnVuY3Rpb24ocGF5bG9hZCkKK3sKKyAg
ICB2YXIgcmVzdWx0ID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0RGVsdGEoKTsKKyAg
ICBmb3IgKHZhciBpZCBpbiBwYXlsb2FkKSB7CisgICAgICAgIHZhciBwYXlsb2FkRW50cnkgPSBw
YXlsb2FkW2lkXTsKKyAgICAgICAgcmVzdWx0LnN0eWxlRW50cnlNYXBbaWRdID0geyBvcmlnaW5h
bFN0eWxlOiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVN0eWxlKHBheWxv
YWRFbnRyeS5vcmlnaW5hbFN0eWxlUGF5bG9hZCksIGRlbHRhczogcGF5bG9hZEVudHJ5LmRlbHRh
cyB9OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJJbnNwZWN0b3IuQ1NTU3R5
bGVTaGVldERlbHRhLnByb3RvdHlwZSA9IHsKKyAgICBnZXQgc3R5bGVFbnRyeU1hcCgpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5faWRUb1N0eWxlRW50cnlNYXA7CisgICAgfSwKKworICAg
IGFkZFN0eWxlQ2hhbmdlczogZnVuY3Rpb24oY2hhbmdlZFByb3BlcnRpZXMsIG5ld1N0eWxlKQor
ICAgIHsKKyAgICAgICAgdmFyIHN0eWxlRGF0YSA9IHRoaXMuc3R5bGVFbnRyeU1hcFtuZXdTdHls
ZS5pZF07CisgICAgICAgIGlmICghc3R5bGVEYXRhKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB2YXIgcHJvcGVydHlEZWx0YXMgPSBzdHlsZURhdGEuZGVsdGFzOworICAgICAgICB2YXIg
b3JpZ2luYWxTdHlsZSA9IHN0eWxlRGF0YS5vcmlnaW5hbFN0eWxlOworICAgICAgICB2YXIgY2hh
bmdlZFByb3BlcnRpZXNTZXQgPSB7fTsKKworICAgICAgICB2YXIgZm91bmRTaG9ydGhhbmRzID0g
e307CisgICAgICAgIHZhciBkaXNhYmxlZFByb3BlcnRpZXMgPSBuZXdTdHlsZS5fX2Rpc2FibGVk
UHJvcGVydHlOYW1lcyB8fCB7fTsKKworICAgICAgICB2YXIgdW5pcXVlUHJvcGVydGllcyA9IHt9
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZWRQcm9wZXJ0aWVzLmxlbmd0aDsg
KytpKQorICAgICAgICAgICAgY2hhbmdlZFByb3BlcnRpZXNTZXRbY2hhbmdlZFByb3BlcnRpZXNb
aV1dID0gdHJ1ZTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1N0eWxlLmxlbmd0
aDsgKytpKQorICAgICAgICAgICAgdW5pcXVlUHJvcGVydGllc1tuZXdTdHlsZVtpXV0gPSB0cnVl
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yaWdpbmFsU3R5bGUubGVuZ3RoOyArK2kp
CisgICAgICAgICAgICB1bmlxdWVQcm9wZXJ0aWVzW29yaWdpbmFsU3R5bGVbaV1dID0gdHJ1ZTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkUHJvcGVydGllcy5sZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgIHVuaXF1ZVByb3BlcnRpZXNbY2hhbmdlZFByb3BlcnRpZXNbaV1dID0g
dHJ1ZTsKKyAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBkaXNhYmxlZFByb3BlcnRpZXMpCisgICAg
ICAgICAgICB1bmlxdWVQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTsKKworICAgICAgICB2YXIgZGVs
ZXRlZExvbmdoYW5kcyA9IHt9OworICAgICAgICB2YXIgaW1wbGljaXRseU1vZGlmaWVkU2hvcnRo
YW5kcyA9IHt9OworCisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICBmdW5jdGlv
biBzZXRMb25naGFuZERlbGV0ZWREZWx0YShuYW1lLCBkaXNhYmxlZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gQ3JlYXRlIGRlbGV0ZWQtZGVsdGEgZm9yIGEgbG9uZ2hhbmQgZGVsZXRlZCBi
eSBzZXR0aW5nIGEgY29ycmVzcG9uZGluZyBzaG9ydGhhbmQgcHJvcGVydHkuCisgICAgICAgICAg
ICB2YXIgZGVsZXRlZERlbHRhID0gcHJvcGVydHlEZWx0YXNbbmFtZV07CisgICAgICAgICAgICBp
ZiAoZGVsZXRlZERlbHRhKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlZERlbHRhLm5ld1Byb3Bl
cnR5LnZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgZGVsZXRlZERlbHRhLm5ld1Byb3BlcnR5
LnByaW9yaXR5ID0gIiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZh
ciBvbGRQcm9wZXJ0eUFzTG9uZ2hhbmQgPSBzZWxmLmdldFByb3BlcnR5KG9yaWdpbmFsU3R5bGUs
IG5hbWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkUHJvcGVydHlBc0xvbmdoYW5k
LnZhbHVlICE9PSAiIikgeworICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGVsdGEgPSBuZXcg
V2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXREZWx0YS5Qcm9wZXJ0eURlbHRhKG9sZFByb3BlcnR5
QXNMb25naGFuZCwge3ZhbHVlOiAiIiwgcHJpb3JpdHk6ICIiLCBkaXNhYmxlZDogZGlzYWJsZWR9
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlEZWx0YXNbbmFtZV0gPSBkZWxldGVkRGVs
dGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gZmlsbEltcGxpY2l0bHlNb2RpZmllZFNob3J0aGFuZHMobmFtZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBiZSBhbiBleHBsaWNpdGx5IG1vZGlmaWVk
IGxvbmdoYW5kLCBvciBhIHNlY29uZC1sZXZlbCBzaG9ydGhhbmQgKGUuZy4gYm9yZGVyIDwtIGJv
cmRlci13aWR0aCA8LSBib3JkZXItdG9wLXdpZHRoKSwKKyAgICAgICAgICAgIC8vIGluIHdoaWNo
IGNhc2UgZ2V0UHJvcGVydHlTaG9ydGhhbmQgcmV0dXJucyAiIi4gVXNlIGEgd29ya2Fyb3VuZCBm
b3IgZGV0ZWN0aW5nIHRoZSBhc3NvY2lhdGVkIHNob3J0aGFuZHMuCisgICAgICAgICAgICB2YXIg
Y2FuZGlkYXRlID0gbmFtZTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB2YXIg
YXNzb2NpYXRlZFNob3J0aGFuZCA9IHNlbGYuZ2V0QXNzb2NpYXRlZFNob3J0aGFuZChjYW5kaWRh
dGUpOworICAgICAgICAgICAgICAgIGlmIChhc3NvY2lhdGVkU2hvcnRoYW5kICYmICFjaGFuZ2Vk
UHJvcGVydGllc1NldFthc3NvY2lhdGVkU2hvcnRoYW5kXSkKKyAgICAgICAgICAgICAgICAgICAg
aW1wbGljaXRseU1vZGlmaWVkU2hvcnRoYW5kc1thc3NvY2lhdGVkU2hvcnRoYW5kXSA9IHRydWU7
CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gYXNzb2NpYXRlZFNob3J0aGFuZDsKKyAgICAg
ICAgICAgIH0gd2hpbGUgKGNhbmRpZGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZh
ciBuYW1lIGluIHVuaXF1ZVByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIHZhciBkaXNhYmxlZCA9
IG5hbWUgaW4gZGlzYWJsZWRQcm9wZXJ0aWVzOworICAgICAgICAgICAgdmFyIHNob3J0aGFuZE5h
bWUgPSAhZGlzYWJsZWQgPyBuZXdTdHlsZS5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKSA6IG51
bGw7CisgICAgICAgICAgICB2YXIgbmV3UHJvcGVydHlBc1Nob3J0aGFuZCA9IHRoaXMuZ2V0UHJv
cGVydHkobmV3U3R5bGUsIG5hbWUsIHRydWUpOworICAgICAgICAgICAgdmFyIG5hbWVJc1Nob3J0
aGFuZCA9ICFkaXNhYmxlZCAmJiAobmV3UHJvcGVydHlBc1Nob3J0aGFuZC52YWx1ZSAhPT0gIiIg
JiYgIW5ld1Byb3BlcnR5QXNTaG9ydGhhbmQuZGlzYWJsZWQpIHx8IHRoaXMuZ2V0UHJvcGVydHko
b3JpZ2luYWxTdHlsZSwgbmFtZSwgdHJ1ZSkudmFsdWUgIT09ICIiOworICAgICAgICAgICAgaWYg
KG5hbWVJc1Nob3J0aGFuZCkKKyAgICAgICAgICAgICAgICBzaG9ydGhhbmROYW1lID0gbmFtZTsK
KworICAgICAgICAgICAgaWYgKHNob3J0aGFuZE5hbWUgJiYgc2hvcnRoYW5kTmFtZSBpbiBmb3Vu
ZFNob3J0aGFuZHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVsZXRlZExvbmdoYW5kc1tuYW1l
XSkKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9uZ2hhbmREZWxldGVkRGVsdGEobmFtZSwgZGlz
YWJsZWQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmaWxsSW1wbGljaXRseU1vZGlmaWVkU2hvcnRoYW5kcyhuYW1lKTsKKworICAgICAg
ICAgICAgaWYgKHNob3J0aGFuZE5hbWUpIHsKKyAgICAgICAgICAgICAgICBmb3VuZFNob3J0aGFu
ZHNbc2hvcnRoYW5kTmFtZV0gPSB0cnVlOworICAgICAgICAgICAgICAgIHZhciBsb25naGFuZCA9
IG5hbWU7CisgICAgICAgICAgICAgICAgaWYgKG5hbWVJc1Nob3J0aGFuZCkgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgbG9uZ2hhbmRzID0gbmV3U3R5bGUuZ2V0TG9uZ2hhbmRQcm9wZXJ0aWVz
KHNob3J0aGFuZE5hbWUpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGxvbmdoYW5kcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRM
b25naGFuZHNbbG9uZ2hhbmRzW2ldXSA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNob3J0aGFuZE5hbWU7CisgICAgICAgICAgICAg
ICAgICAgIG5hbWVJc1Nob3J0aGFuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdmFyIGxvbmdoYW5kID0gIiI7CisKKyAgICAg
ICAgICAgIGlmICghY2hhbmdlZFByb3BlcnRpZXNTZXRbbmFtZV0gJiYgIWNoYW5nZWRQcm9wZXJ0
aWVzU2V0W2xvbmdoYW5kXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgdGhpcy51cGRhdGVEZWx0YShvcmlnaW5hbFN0eWxlLCBuZXdTdHlsZSwgbmFtZSwgbmFtZUlz
U2hvcnRoYW5kLCBwcm9wZXJ0eURlbHRhcyk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZh
ciBzaG9ydGhhbmQgaW4gaW1wbGljaXRseU1vZGlmaWVkU2hvcnRoYW5kcykKKyAgICAgICAgICAg
IHRoaXMudXBkYXRlRGVsdGEob3JpZ2luYWxTdHlsZSwgbmV3U3R5bGUsIHNob3J0aGFuZCwgdHJ1
ZSwgcHJvcGVydHlEZWx0YXMpOworICAgIH0sCisKKyAgICBnZXRBc3NvY2lhdGVkU2hvcnRoYW5k
OiBmdW5jdGlvbihleHBsaWNpdExvbmdoYW5kKQorICAgIHsKKyAgICAgICAgLy8gUmV0dXJucyBh
IHBvdGVudGlhbCBzaG9ydGhhbmQgYmFzZWQgb24gdGhlIHByb3BlcnR5IG5hbWUgYnkgc3RyaXBw
aW5nIG9mZiB0aGUgbGFzdCBkYXNoIGFuZCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMKKyAgICAg
ICAgLy8gKGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgdGhpcyBwcm9wZXJ0eSBuYW1lIGlzIG5vdCBj
b25zaWRlcmVkIGEgbG9uZ2hhbmQsIGFuZCBhICIiIGlzIHJldHVybmVkKSwKKyAgICAgICAgLy8g
c2luY2UgV2ViS2l0IGRvZXMgbm90IGhhbmRsZSBtdWx0aS1sZXZlbCBzaG9ydGhhbmRzIChlLmcu
IGJvcmRlciAtPiBib3JkZXItd2lkdGggLT4gYm9yZGVyLXdpZHRoLXRvcCkuCisgICAgICAgIGlm
IChleHBsaWNpdExvbmdoYW5kLmNoYXJBdCgwKSA9PT0gIi0iKQorICAgICAgICAgICAgcmV0dXJu
ICIiOworICAgICAgICB2YXIgbGFzdERhc2hJbmRleCA9IGV4cGxpY2l0TG9uZ2hhbmQubGFzdElu
ZGV4T2YoIi0iKTsKKyAgICAgICAgaWYgKGxhc3REYXNoSW5kZXggPiAwKQorICAgICAgICAgICAg
cmV0dXJuIGV4cGxpY2l0TG9uZ2hhbmQuc3Vic3RyaW5nKDAsIGxhc3REYXNoSW5kZXgpOworICAg
ICAgICByZXR1cm4gIiI7CisgICAgfSwKKworICAgIHVwZGF0ZURlbHRhOiBmdW5jdGlvbihvcmln
aW5hbFN0eWxlLCBuZXdTdHlsZSwgcHJvcGVydHlOYW1lLCBpc1Nob3J0aGFuZCwgcHJvcGVydHlE
ZWx0YXMpCisgICAgeworICAgICAgICB2YXIgbmV3UHJvcGVydHkgPSB0aGlzLmdldFByb3BlcnR5
KG5ld1N0eWxlLCBwcm9wZXJ0eU5hbWUsIGlzU2hvcnRoYW5kKTsKKyAgICAgICAgdmFyIHByb3Bl
cnR5RGVsdGEgPSBwcm9wZXJ0eURlbHRhc1twcm9wZXJ0eU5hbWVdOworICAgICAgICBpZiAoIXBy
b3BlcnR5RGVsdGEpIHsKKyAgICAgICAgICAgIHZhciBvbGRQcm9wZXJ0eSA9IHRoaXMuZ2V0UHJv
cGVydHkob3JpZ2luYWxTdHlsZSwgcHJvcGVydHlOYW1lLCBpc1Nob3J0aGFuZCk7CisgICAgICAg
ICAgICBwcm9wZXJ0eURlbHRhID0gbmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0RGVsdGEu
UHJvcGVydHlEZWx0YShvbGRQcm9wZXJ0eSwgbmV3UHJvcGVydHkpOworICAgICAgICAgICAgcHJv
cGVydHlEZWx0YXNbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5RGVsdGE7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBwcm9wZXJ0eURlbHRhLm5ld1Byb3BlcnR5ID0gbmV3UHJvcGVydHk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9yaWdpbmFsU3R5bGUuaXNQcm9wZXJ0eUltcGxpY2l0
KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgIHByb3BlcnR5RGVsdGEub2xkUHJvcGVydHku
dmFsdWUgPSAiIjsKKyAgICAgICAgICAgIHByb3BlcnR5RGVsdGEub2xkUHJvcGVydHkucHJpb3Jp
dHkgPSAiIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdGhpcy5faXNQcm9wZXJ0eUNoYW5n
ZWQocHJvcGVydHlEZWx0YSkpCisgICAgICAgICAgICBkZWxldGUgcHJvcGVydHlEZWx0YXNbcHJv
cGVydHlOYW1lXTsKKyAgICB9LAorCisgICAgX2lzUHJvcGVydHlDaGFuZ2VkOiBmdW5jdGlvbihw
cm9wZXJ0eURlbHRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5RGVsdGEubmV3UHJv
cGVydHkudmFsdWUgIT09IHByb3BlcnR5RGVsdGEub2xkUHJvcGVydHkudmFsdWUgfHwgcHJvcGVy
dHlEZWx0YS5uZXdQcm9wZXJ0eS5wcmlvcml0eSAhPT0gcHJvcGVydHlEZWx0YS5vbGRQcm9wZXJ0
eS5wcmlvcml0eSB8fCBwcm9wZXJ0eURlbHRhLm5ld1Byb3BlcnR5LmRpc2FibGVkOworICAgIH0s
CisKKyAgICBnZXRQcm9wZXJ0eTogZnVuY3Rpb24oc3R5bGUsIHByb3BlcnR5TmFtZSwgaXNTaG9y
dGhhbmQpCisgICAgeworICAgICAgICB2YXIgZGlzYWJsZWQgPSBwcm9wZXJ0eU5hbWUgaW4gc3R5
bGUuX19kaXNhYmxlZFByb3BlcnRpZXM7CisgICAgICAgIGlmIChkaXNhYmxlZCkgeworICAgICAg
ICAgICAgdmFyIHZhbHVlID0gc3R5bGUuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5
TmFtZV07CisgICAgICAgICAgICB2YXIgcHJpb3JpdHkgPSBzdHlsZS5fX2Rpc2FibGVkUHJvcGVy
dHlQcmlvcml0aWVzW3Byb3BlcnR5TmFtZV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB2YXIgdmFsdWUgPSB0aGlzLm1hc2tBYnNlbnQoaXNTaG9ydGhhbmQgPyBzdHlsZS5nZXRTaG9y
dGhhbmRWYWx1ZShwcm9wZXJ0eU5hbWUpIDogc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0
eU5hbWUpKTsKKyAgICAgICAgICAgIHZhciBwcmlvcml0eSA9IHRoaXMubWFza0Fic2VudChpc1No
b3J0aGFuZCA/IHN0eWxlLmdldFNob3J0aGFuZFByaW9yaXR5KHByb3BlcnR5TmFtZSkgOiBzdHls
ZS5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BlcnR5TmFtZSkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgcHJpb3JpdHk6IHByaW9yaXR5LCBkaXNhYmxlZDogZGlz
YWJsZWQgfTsKKyAgICB9LAorCisgICAgbWFza0Fic2VudDogZnVuY3Rpb24odmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQp
ID8gIiIgOiB2YWx1ZTsKKyAgICB9LAorCisgICAgdHJhY2tTdHlsZTogZnVuY3Rpb24oc3R5bGUp
CisgICAgeworICAgICAgICBpZiAoc3R5bGUuaWQgaW4gdGhpcy5zdHlsZUVudHJ5TWFwKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIENyZWF0ZSBhIGNvcHkgb2Ygc3R5bGUgd2l0
aG91dCAicGFyZW50UnVsZSIgdG8gYXZvaWQgY3ljbGljIHN0cnVjdHVyZS4KKyAgICAgICAgdmFy
IHN0eWxlQ29weSA9IHt9OworICAgICAgICBmb3IgKHZhciBwIGluIHN0eWxlKSB7CisgICAgICAg
ICAgICBpZiAocCAhPT0gInBhcmVudFJ1bGUiKQorICAgICAgICAgICAgICAgIHN0eWxlQ29weVtw
XSA9IHN0eWxlW3BdOworICAgICAgICB9CisgICAgICAgIHN0eWxlQ29weS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGU7CisgICAgICAgIHRoaXMu
c3R5bGVFbnRyeU1hcFtzdHlsZS5pZF0gPSB7IG9yaWdpbmFsU3R5bGU6IHN0eWxlQ29weSwgZGVs
dGFzOiB7fSB9OworICAgIH0sCisgICAgCisgICAgYXNQYXlsb2FkOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgcmVzdWx0ID0ge307CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMu
c3R5bGVFbnRyeU1hcCkgeworICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5zdHlsZUVudHJ5
TWFwW2lkXTsKKyAgICAgICAgICAgIHJlc3VsdFtpZF0gPSB7IG9yaWdpbmFsU3R5bGVQYXlsb2Fk
OiBlbnRyeS5vcmlnaW5hbFN0eWxlLmFzUGF5bG9hZCgpLCBkZWx0YXM6IGVudHJ5LmRlbHRhcyB9
OworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCitXZWJJbnNw
ZWN0b3IuQ1NTU3R5bGVTaGVldERlbHRhLlByb3BlcnR5RGVsdGEgPSBmdW5jdGlvbihvbGRQcm9w
ZXJ0eSwgbmV3UHJvcGVydHkpCit7CisgICAgdGhpcy5vbGRQcm9wZXJ0eSA9IG9sZFByb3BlcnR5
OworICAgIHRoaXMubmV3UHJvcGVydHkgPSBuZXdQcm9wZXJ0eTsKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9ET01BZ2VudC5qcwppbmRleCBiY2JlOTFlLi41ZTgzZWZiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCkBAIC02NDMsNiArNjQzLDMxIEBAIFdlYklu
c3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB2YXIg
bG9uZ2hhbmRzID0gdGhpcy5fbG9uZ2hhbmRQcm9wZXJ0aWVzW3Nob3J0aGFuZFByb3BlcnR5XTsK
ICAgICAgICAgcmV0dXJuIGxvbmdoYW5kcyA/IHRoaXMuZ2V0UHJvcGVydHlQcmlvcml0eShsb25n
aGFuZHNbMF0pIDogbnVsbDsKKyAgICB9LAorCisgICAgYXNQYXlsb2FkOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICB2YXIgZGlzYWJsZWQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgcHJvcGVy
dHlOYW1lIGluIHRoaXMuX19kaXNhYmxlZFByb3BlcnRpZXMpCisgICAgICAgICAgICBkaXNhYmxl
ZC5wdXNoKHsgbmFtZTogcHJvcGVydHlOYW1lLCB2YWx1ZTogdGhpcy5fX2Rpc2FibGVkUHJvcGVy
dHlWYWx1ZXNbcHJvcGVydHlOYW1lXSwgcHJpb3JpdHk6IHRoaXMuX19kaXNhYmxlZFByb3BlcnR5
UHJpb3JpdGllc1twcm9wZXJ0eU5hbWVdIH0pOworCisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0g
W107CisgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiB0aGlzLl9wcm9wZXJ0eU1hcCkK
KyAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh0aGlzLl9wcm9wZXJ0eU1hcFtwcm9wZXJ0eU5h
bWVdKTsKKworICAgICAgICB2YXIgcGF5bG9hZCA9IHsKKyAgICAgICAgICAgIGlkOiB0aGlzLmlk
LAorICAgICAgICAgICAgcGFyZW50U3R5bGVTaGVldElkOiB0aGlzLnBhcmVudFN0eWxlU2hlZXRJ
ZCwKKyAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiB0
aGlzLmhlaWdodCwKKyAgICAgICAgICAgIHNob3J0aGFuZFZhbHVlczogdGhpcy5fc2hvcnRoYW5k
VmFsdWVzLAorICAgICAgICAgICAgcHJvcGVydGllczogcHJvcGVydGllcworICAgICAgICB9Owor
CisgICAgICAgIGlmIChkaXNhYmxlZC5sZW5ndGgpCisgICAgICAgICAgICBwYXlsb2FkLmRpc2Fi
bGVkID0gZGlzYWJsZWQ7CisKKyAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKaW5kZXggNGZk
YTA3Yi4uZWM3NWI3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlc1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZXNQYW5lbC5qcwpAQCAtMzc1LDYgKzM3NSw3IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5l
bC5wcm90b3R5cGUgPSB7CiAgICAgICAgIAogICAgICAgICB0aGlzLm1haW5SZXNvdXJjZUxvYWRU
aW1lID0gLTE7CiAgICAgICAgIHRoaXMubWFpblJlc291cmNlRE9NQ29udGVudFRpbWUgPSAtMTsK
KyAgICAgICAgZGVsZXRlIHRoaXMuX2hyZWZUb0xvY2FsQ29udGVudDsKICAKICAgICAgICAgdGhp
cy52aWV3c0NvbnRhaW5lckVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKIApAQCAtNzExLDcgKzcx
MiwxMiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IucmVzb3VyY2VDYXRlZ29yaWVzLnN0eWxlc2hlZXRzOgog
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IucmVzb3VyY2VDYXRlZ29yaWVzLnNjcmlwdHM6
CiAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5yZXNvdXJjZUNhdGVnb3JpZXMueGhyOgot
ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcocmVzb3Vy
Y2UpOworICAgICAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VW
aWV3KHJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5faHJlZlRvTG9jYWxDb250
ZW50ICYmIHJlc291cmNlLnVybCBpbiB0aGlzLl9ocmVmVG9Mb2NhbENvbnRlbnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmlldy51cGRhdGVMb2NhbENvbnRlbnQodGhpcy5faHJlZlRvTG9jYWxD
b250ZW50W3Jlc291cmNlLnVybF0sIHJlc291cmNlLm1pbWVUeXBlIHx8ICJ0ZXh0L2NzcyIpOwor
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5faHJlZlRvTG9jYWxDb250ZW50W3Jlc291
cmNlLnVybF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB2aWV3
OwogICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IucmVzb3VyY2VDYXRlZ29yaWVzLmltYWdl
czoKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5JbWFnZVZpZXcocmVz
b3VyY2UpOwogICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IucmVzb3VyY2VDYXRlZ29yaWVz
LmZvbnRzOgpAQCAtNzIxLDYgKzcyNywxOCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAorICAgIHB1c2hSZXNvdXJjZUxvY2Fs
Q29udGVudDogZnVuY3Rpb24odXJsLCBsb2NhbENvbnRlbnQpCisgICAgeworICAgICAgICB2YXIg
cmVzb3VyY2UgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VVUkxNYXBbdXJsXTsKKyAgICAgICAgaWYg
KHJlc291cmNlICYmIHJlc291cmNlLl9yZXNvdXJjZXNWaWV3KQorICAgICAgICAgICAgcmVzb3Vy
Y2UuX3Jlc291cmNlc1ZpZXcudXBkYXRlTG9jYWxDb250ZW50KGxvY2FsQ29udGVudCwgcmVzb3Vy
Y2UubWltZVR5cGUgfHwgInRleHQvY3NzIik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aWYgKCF0aGlzLl9ocmVmVG9Mb2NhbENvbnRlbnQpCisgICAgICAgICAgICAgICAgdGhpcy5faHJl
ZlRvTG9jYWxDb250ZW50ID0ge307CisgICAgICAgICAgICB0aGlzLl9ocmVmVG9Mb2NhbENvbnRl
bnRbdXJsXSA9IGxvY2FsQ29udGVudDsKKyAgICAgICAgfQorICAgIH0sCisKICAgICBzZXRTaWRl
YmFyV2lkdGg6IGZ1bmN0aW9uKHdpZHRoKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMudmlzaWJs
ZVJlc291cmNlKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0
dGluZ3MuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKaW5kZXgg
ZTU0YWNjNy4uOTQ5ZTM3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NldHRpbmdzLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5q
cwpAQCAtNjUsNiArNjUsNyBAQCBXZWJJbnNwZWN0b3IucG9wdWxhdGVBcHBsaWNhdGlvblNldHRp
bmdzID0gZnVuY3Rpb24oc2V0dGluZ3NTdHJpbmcpCiBXZWJJbnNwZWN0b3IucG9wdWxhdGVTZXNz
aW9uU2V0dGluZ3MgPSBmdW5jdGlvbihzZXR0aW5nc1N0cmluZykKIHsKICAgICBXZWJJbnNwZWN0
b3Iuc2Vzc2lvblNldHRpbmdzLl9sb2FkKHNldHRpbmdzU3RyaW5nKTsKKyAgICBXZWJJbnNwZWN0
b3Iuc2Vzc2lvblNldHRpbmdzLmluc3RhbGxTZXR0aW5nKCJzdHlsZVNoZWV0Q2hhbmdlcyIsICJz
dHlsZXNoZWV0LWNoYW5nZXMiLCB7fSk7CiAgICAgV2ViSW5zcGVjdG9yLnNlc3Npb25TZXR0aW5n
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImxvYWRlZCIpOwogfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCmluZGV4IDRkMDNlY2QuLjE4NjJkODggMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzCkBAIC0yMjAsNiArMjIwLDgg
QEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogCiAgICAgc2VsZWN0TG9j
YWxDb250ZW50VGFiOiBmdW5jdGlvbigpCiAgICAgeworICAgICAgICBpZiAoIXRoaXMudGFiYmVk
UGFuZS50YWJPYmplY3RGb3JJZCgibG9jYWwiKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgdGhpcy50YWJiZWRQYW5lLnNlbGVjdFRhYkJ5SWQoImxvY2FsIik7CiAgICAgICAgIHRoaXMu
bG9jYWxTb3VyY2VGcmFtZS52aXNpYmxlID0gdHJ1ZTsKICAgICAgICAgaWYgKCJyZXNpemUiIGlu
IHRoaXMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IGE1NDkzNmMu
LjJkZTlmZDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQu
cXJjCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCkBAIC0yMiw2
ICsyMiw3IEBACiAgICAgPGZpbGU+Q29va2llSXRlbXNWaWV3LmpzPC9maWxlPgogICAgIDxmaWxl
PkNTU0NvbXBsZXRpb25zLmpzPC9maWxlPgogICAgIDxmaWxlPkNTU1N0eWxlTW9kZWwuanM8L2Zp
bGU+CisgICAgPGZpbGU+Q1NTU3R5bGVTaGVldERlbHRhLmpzPC9maWxlPgogICAgIDxmaWxlPkRh
dGFiYXNlLmpzPC9maWxlPgogICAgIDxmaWxlPkRhdGFiYXNlUXVlcnlWaWV3LmpzPC9maWxlPgog
ICAgIDxmaWxlPkRhdGFiYXNlVGFibGVWaWV3LmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDQ4ZTk1YmIuLmZhY2JmZDEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTQyLDYgKzQyLDcgQEAg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJFeHRlbnNp
b25SZWdpc3RyeVN0dWIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZh
c2NyaXB0IiBzcmM9Ik9iamVjdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iU2V0dGluZ3MuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNTU1N0eWxlU2hlZXREZWx0YS5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ1NTU3R5bGVNb2RlbC5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQ2hl
Y2tib3guanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IkNvbnRleHRNZW51LmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzCmluZGV4IDlkNDE3NjYuLmUzYmUwNDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMTQxNyw2ICsxNDE3LDcgQEAgV2ViSW5zcGVjdG9y
LnJlc2V0ID0gZnVuY3Rpb24oKQogCiAgICAgdGhpcy5zZXNzaW9uU2V0dGluZ3MucmVzZXQoKTsK
ICAgICB0aGlzLmJyZWFrcG9pbnRNYW5hZ2VyLnJlc2V0KCk7CisgICAgdGhpcy5jc3NNb2RlbC5y
ZXNldCgpOwogCiAgICAgZm9yICh2YXIgY2F0ZWdvcnkgaW4gdGhpcy5yZXNvdXJjZUNhdGVnb3Jp
ZXMpCiAgICAgICAgIHRoaXMucmVzb3VyY2VDYXRlZ29yaWVzW2NhdGVnb3J5XS5yZW1vdmVBbGxS
ZXNvdXJjZXMoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>