<?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>32930</bug_id>
          
          <creation_ts>2009-12-25 02:02:02 -0800</creation_ts>
          <short_desc>Web Inspector: Add a simplistic audit category</short_desc>
          <delta_ts>2010-02-10 02:06:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>174851</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2009-12-25 02:02:02 -0800</bug_when>
    <thetext>Once the Audits panel is in, we need to see it work with a sample audit category (something like &quot;Page performance&quot; or &quot;Network utilization.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184601</commentid>
    <comment_count>1</comment_count>
      <attachid>47413</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-01-26 08:38:22 -0800</bug_when>
    <thetext>Created attachment 47413
[PATCH] Proposed audit categories</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188007</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-04 16:44:13 -0800</bug_when>
    <thetext>Who should review this alexander?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188086</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-04 23:17:18 -0800</bug_when>
    <thetext>r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188614</commentid>
    <comment_count>4</comment_count>
      <attachid>47413</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-08 05:48:56 -0800</bug_when>
    <thetext>Comment on attachment 47413
[PATCH] Proposed audit categories

Looks good overall. Some nits I&apos;d like to see fixed before you land:

&gt; +WebInspector.AuditCategories.Page = function() {

Page -&gt; PagePerformance
Also I am not sure you need a special namespace (AuditCategories) for that.

&gt; +
&gt; +WebInspector.AuditCategories.Network = function() {

Network -&gt; NetworkUtilization

&gt; +    WebInspector.AuditCategory.call(
&gt; +        this, WebInspector.AuditCategories.Network.AuditCategoryName);
&gt; +
&gt; +    this.addRule(new WebInspector.AuditRules.GzipRule());
&gt; +    this.addRule(new WebInspector.AuditRules.ImageDimensionsRule({ScorePerImageUse: 5}));
&gt; +    this.addRule(new WebInspector.AuditRules.CookieSizeRule({MinBytesThreshold: 400, MaxBytesThreshold: 1000}));
&gt; +    this.addRule(new WebInspector.AuditRules.StaticCookielessRule({MinResources: 5}));
&gt; +    this.addRule(new WebInspector.AuditRules.CombineJsResourcesRule({AllowedPerDomain: 2, ScorePerResource: 11}));
&gt; +    this.addRule(new WebInspector.AuditRules.CombineCssResourcesRule({AllowedPerDomain: 2, ScorePerResource: 11}));
&gt; +    this.addRule(new WebInspector.AuditRules.MinimizeDnsLookupsRule({HostCountThreshold: 4, ViolationDomainScore: 6}));
&gt; +    this.addRule(new WebInspector.AuditRules.ParallelizeDownloadRule({OptimalHostnameCount: 4, MinRequestThreshold: 10, MinBalanceThreshold: 0.5}));
&gt; +    this.addRule(new WebInspector.AuditRules.BrowserCacheControlRule());
&gt; +    this.addRule(new WebInspector.AuditRules.ProxyCacheControlRule());
&gt; +}

When is this instantiated? It would be great if it was happening upon audit start.

&gt; -        this.resize();
&gt; +        setTimeout(this.resize.bind(this), 0);

Looks like a hack.

&gt; +WebInspector.AuditRules.linkifyResource = function(url)
&gt; +{
&gt; +  var element = document.createElement(&quot;a&quot;);
&gt; +  element.className = &quot;webkit-html-resource-link&quot;;
&gt; +  element.href = url;
&gt; +  element.preferredPanel = &quot;resources&quot;;
&gt; +  element.textContent = url;
&gt; +  return element.outerHTML;

Please use WebInspector.displayNameForURL or even better WebInspector.linkifyURLAsNode instead.

&gt; +}
&gt; +
&gt; +/**
&gt; + * @param {Array} array Array of Elements (outerHTML is used) or strings (plain value is used as innerHTML)
&gt; + */
&gt; +WebInspector.AuditRules.arrayAsUL = function(array, shouldLinkify)
&gt; +{
&gt; +    if (!array.length)
&gt; +        return &quot;&quot;;
&gt; +    var result = &quot;&lt;ul&gt;&quot;;
&gt; +    for (var i = 0; i &lt; array.length; ++i) {
&gt; +        result += &quot;&lt;li&gt;&quot;;
&gt; +        result += (array[i] instanceof Element ?
&gt; +            array[i].outerHTML :
&gt; +            (shouldLinkify ? WebInspector.AuditRules.linkifyResource(array[i]) : array[i]));
&gt; +        result += &quot;&lt;/li&gt;&quot;;
&gt; +    }
&gt; +    result += &quot;&lt;/ul&gt;&quot;;
&gt; +    return result;
&gt; +}
&gt; +

I am not a big fan of the string manipulation. Why not to use dom api here? Also, sounds like a utility function (for utilities.js).

&gt; + // Gzip

These comments are not meaningful.

&gt; +    isCompressed: function(resource)
&gt; +    shouldCompress: function(resource)

These should be private

&gt; +            }
&gt; +            result.score = 100 - (penalizedResourceCount * this.getValue(&quot;ScorePerResource&quot;));

Comment on a general engine structure. It would be nice if parameters object was explicitly passed into doRun and the check would be parameters.scorePerResource. I realize that it would not have a nice runtime check for this parameter, but you could add assertions on parameters in the beginning of the rule instead.

&gt; +        } finally {
&gt; +            callback(result);
&gt; +        }

You are using finally a lot. Are you sure that you are able to render incomplete results? I think error message be displayed instead.

&gt; +    getUnusedStylesheetRatioMessage: function(unusedLength, key)
&gt; +    {
&gt; +        var parts = key.split(&quot;-&quot;, 3);
&gt; +    getUnusedTotalRatioMessage: function(unusedLength, totalLength)
&gt; +    {
&gt; +        var pctUnused = Math.round(unusedLength / totalLength * 100);

Here and in other places: should these be private?

&gt; +        function EvalCallback(evalResult, isException)
&gt; +        {

function evalCallback(...)
{

&gt; +
&gt; +        var routine = function() {

function routine()
{

&gt; +            var images = document.getElementsByTagName(&quot;img&quot;);
&gt; +            const widthRegExp = /width[^:;]*:/gim;
&gt; +            const heightRegExp = /height[^:;]*:/gim;
&gt; +
&gt; +            function hasDimension(element, cssText, rules, regexp, attributeName) {
&gt; +                if (element.attributes.getNamedItem(attributeName) != null ||
&gt; +                    (cssText &amp;&amp; cssText.match(regexp)))

Weird wrap. Why wrapping here at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188641</commentid>
    <comment_count>5</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-02-08 09:10:06 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; +WebInspector.AuditCategories.Page = function() {
&gt; 
&gt; Page -&gt; PagePerformance
&gt; Also I am not sure you need a special namespace (AuditCategories) for that.

I like having the AuditCategories namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188647</commentid>
    <comment_count>6</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-02-08 09:19:36 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; &gt; +WebInspector.AuditCategories.Page = function() {
&gt; &gt; 
&gt; &gt; Page -&gt; PagePerformance
&gt; &gt; Also I am not sure you need a special namespace (AuditCategories) for that.
&gt; 
&gt; I like having the AuditCategories namespace.

The categories are retrieved from this namespace during construction:

for (var categoryCtorID in WebInspector.AuditCategories)

Also, the object name (PagePerformance or whatever) becomes the category ID internally, which seems to save space on explicit category IDs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189039</commentid>
    <comment_count>7</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-02-09 08:47:04 -0800</bug_when>
    <thetext>(In reply to comment #4)

The comments inline pertain to the patch following shortly.

&gt; (From update of attachment 47413 [details])
&gt; Looks good overall. Some nits I&apos;d like to see fixed before you land:
&gt; 
&gt; &gt; +WebInspector.AuditCategories.Page = function() {
&gt; 
&gt; Page -&gt; PagePerformance

Done.

&gt; Also I am not sure you need a special namespace (AuditCategories) for that.

The namespace is scanned for audit categories by the engine (see comment #6).

&gt; &gt; +
&gt; &gt; +WebInspector.AuditCategories.Network = function() {
&gt; 
&gt; Network -&gt; NetworkUtilization

Done.

&gt; &gt; +    this.addRule(new WebInspector.AuditRules.ParallelizeDownloadRule({OptimalHostnameCount: 4, MinRequestThreshold: 10, MinBalanceThreshold: 0.5}));
&gt; &gt; +    this.addRule(new WebInspector.AuditRules.BrowserCacheControlRule());
&gt; &gt; +    this.addRule(new WebInspector.AuditRules.ProxyCacheControlRule());
&gt; &gt; +}
&gt; 
&gt; When is this instantiated? It would be great if it was happening upon audit
&gt; start.

Done lazy instantiation.

&gt; &gt; -        this.resize();
&gt; &gt; +        setTimeout(this.resize.bind(this), 0);
&gt; Looks like a hack.

Moved into show().

&gt; &gt; +WebInspector.AuditRules.linkifyResource = function(url)
&gt; &gt; +{
&gt; &gt; +  var element = document.createElement(&quot;a&quot;);
&gt; 
&gt; Please use WebInspector.displayNameForURL or even better
&gt; WebInspector.linkifyURLAsNode instead.

Done.

&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +/**
&gt; &gt; + * @param {Array} array Array of Elements (outerHTML is used) or strings (plain value is used as innerHTML)
&gt; &gt; + */
&gt; &gt; +WebInspector.AuditRules.arrayAsUL = function(array, shouldLinkify)
&gt; &gt; +{
&gt; &gt; +    if (!array.length)
&gt; &gt; +        return &quot;&quot;;
&gt; &gt; +    var result = &quot;&lt;ul&gt;&quot;;
&gt; &gt; +    for (var i = 0; i &lt; array.length; ++i) {
&gt; I am not a big fan of the string manipulation. Why not to use dom api here?

Done.

&gt; Also, sounds like a utility function (for utilities.js).

It doesn&apos;t seem so much useful as to put it into utilities.js. Interested parties (i.e. audit authors) are free to use it from inside the AuditRules namespace.


&gt; &gt; + // Gzip
&gt; 
&gt; These comments are not meaningful.

Done.

&gt; &gt; +    isCompressed: function(resource)
&gt; &gt; +    shouldCompress: function(resource)
&gt; 
&gt; These should be private

Done.

&gt; &gt; +            }
&gt; &gt; +            result.score = 100 - (penalizedResourceCount * this.getValue(&quot;ScorePerResource&quot;));
&gt; 
&gt; Comment on a general engine structure. It would be nice if parameters object
&gt; was explicitly passed into doRun and the check would be
&gt; parameters.scorePerResource. I realize that it would not have a nice runtime
&gt; check for this parameter, but you could add assertions on parameters in the
&gt; beginning of the rule instead.

We can elaborate on this later.

&gt; &gt; +        } finally {
&gt; &gt; +            callback(result);
&gt; &gt; +        }
&gt; 
&gt; You are using finally a lot. Are you sure that you are able to render
&gt; incomplete results? I think error message be displayed instead.

&quot;Incomplete&quot; means &quot;Underreported&quot; in this context. The engine runs rules asynchronously (since they can run asynchronous code) and counts down the number of remaining rules. If a rule fails to report to its callback, the engine will remain in a hung state waiting for more callback invocations. finally&apos;s are there as guards to avoid the Audits panel crash. Should we think of something different?

&gt; &gt; +    getUnusedStylesheetRatioMessage: function(unusedLength, key)
&gt; &gt; +    {
&gt; &gt; +        var parts = key.split(&quot;-&quot;, 3);
&gt; &gt; +    getUnusedTotalRatioMessage: function(unusedLength, totalLength)
&gt; &gt; +    {
&gt; &gt; +        var pctUnused = Math.round(unusedLength / totalLength * 100);
&gt; 
&gt; Here and in other places: should these be private?

Done.

&gt; &gt; +        function EvalCallback(evalResult, isException)
&gt; &gt; +        {
&gt; 
&gt; function evalCallback(...)
&gt; {

Done.

&gt; &gt; +
&gt; &gt; +        var routine = function() {
&gt; 
&gt; function routine()
&gt; {

Done.

&gt; &gt; +            var images = document.getElementsByTagName(&quot;img&quot;);
&gt; &gt; +            const widthRegExp = /width[^:;]*:/gim;
&gt; &gt; +            const heightRegExp = /height[^:;]*:/gim;
&gt; &gt; +
&gt; &gt; +            function hasDimension(element, cssText, rules, regexp, attributeName) {
&gt; &gt; +                if (element.attributes.getNamedItem(attributeName) != null ||
&gt; &gt; +                    (cssText &amp;&amp; cssText.match(regexp)))
&gt; 
&gt; Weird wrap. Why wrapping here at all?

Removed wrapping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189041</commentid>
    <comment_count>8</comment_count>
      <attachid>48421</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-02-09 08:48:02 -0800</bug_when>
    <thetext>Created attachment 48421
[PATCH] Comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189294</commentid>
    <comment_count>9</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-02-10 02:06:39 -0800</bug_when>
    <thetext>A minor fix applied.

Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       WebCore/ChangeLog
        M       WebCore/WebCore.gypi
        M       WebCore/WebCore.vcproj/WebCore.vcproj
        A       WebCore/inspector/front-end/AuditCategories.js
        M       WebCore/inspector/front-end/AuditLauncherView.js
        A       WebCore/inspector/front-end/AuditRules.js
        M       WebCore/inspector/front-end/AuditsPanel.js
        M       WebCore/inspector/front-end/WebKit.qrc
        M       WebCore/inspector/front-end/audits.css
        M       WebCore/inspector/front-end/inspector.html
        M       WebCore/inspector/front-end/inspector.js
Committed r54591</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47413</attachid>
            <date>2010-01-26 08:38:22 -0800</date>
            <delta_ts>2010-02-09 08:48:02 -0800</delta_ts>
            <desc>[PATCH] Proposed audit categories</desc>
            <filename>auditcategories.patch</filename>
            <type>text/plain</type>
            <size>69548</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2ZlMDQxYS4uOWY0MzkwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDQgQEAKKzIwMTAtMDEtMjYgIEFsZXhhbmRlciBQ
YXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdHdvIGJhc2ljIGNhdGVnb3JpZXMgZm9yIHRoZSBB
dWRpdHMgcGFuZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMyOTMwCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRp
dENhdGVnb3JpZXMuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdv
cmllcy5QYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3JpZXMuTmV0d29y
ayk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdExhdW5jaGVyVmlldy5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdExhdW5jaGVyVmlldy5wcm90b3R5cGUuX2NyZWF0
ZUxhdW5jaGVyVUkpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5q
czogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5saW5raWZ5UmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuYXJyYXlBc1VMKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmdldERvbWFpblRvUmVzb3VyY2VzTWFwKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuR3ppcFJ1bGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuR3ppcFJ1bGUucHJvdG90eXBlLmRvUnVuKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkd6aXBSdWxlLnByb3RvdHlwZS5pc0NvbXByZXNzZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuR3ppcFJ1bGUucHJvdG90eXBlLnNo
b3VsZENvbXByZXNzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVF
eHRlcm5hbFJlc291cmNlc1J1bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
Q29tYmluZUV4dGVybmFsUmVzb3VyY2VzUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29tYmluZUpzUmVzb3VyY2VzUnVsZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db21iaW5lQ3NzUmVzb3VyY2VzUnVsZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5NaW5pbWl6ZURuc0xvb2t1cHNSdWxlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLk1pbmltaXplRG5zTG9va3Vwc1J1bGUucHJv
dG90eXBlLmRvUnVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlBhcmFsbGVs
aXplRG93bmxvYWRSdWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlBhcmFs
bGVsaXplRG93bmxvYWRSdWxlLnByb3RvdHlwZS5kb1J1bik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLlVudXNlZENzc1J1bGUucHJvdG90eXBlLmdldFVudXNlZFN0eWxlc2hlZXRSYXRpb01l
c3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5w
cm90b3R5cGUuZ2V0VW51c2VkVG90YWxSYXRpb01lc3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4uRXZhbENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlVudXNlZENzc1J1bGUucHJvdG90
eXBlLmRvUnVuLnJvdXRpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51
c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuQ2FjaGVDb250cm9sUnVsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxl
cy5DYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZS5JbmZvQ2hlY2suMS5GYWlsQ2hlY2suMC5XYXJu
aW5nQ2hlY2suMS5TZXZlcmVDaGVjay4yLmRvUnVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5B
dWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLmhhbmRsZU5vbkNhY2hlYWJsZVJl
c291cmNlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xS
dWxlLnByb3RvdHlwZS5fY2FjaGVhYmxlQW5kTm9uQ2FjaGVhYmxlUmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLmV4
ZWNDaGVjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xS
dWxlLnByb3RvdHlwZS5mcmVzaG5lc3NMaWZldGltZUdyZWF0ZXJUaGFuKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLnJlc3BvbnNl
SGVhZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1
bGUucHJvdG90eXBlLmhhc1Jlc3BvbnNlSGVhZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5B
dWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLmlzQ29tcHJlc3NpYmxlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBl
LmlzUHVibGljbHlDYWNoZWFibGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
Q2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUucmVzcG9uc2VIZWFkZXJNYXRjaCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZS5oYXNF
eHBsaWNpdEV4cGlyYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2Fj
aGVDb250cm9sUnVsZS5wcm90b3R5cGUuaXNFeHBsaWNpdGx5Tm9uQ2FjaGVhYmxlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLmlz
Q2FjaGVhYmxlUmVzb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQnJv
d3NlckNhY2hlQ29udHJvbFJ1bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
QnJvd3NlckNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLmhhbmRsZU5vbkNhY2hlYWJsZVJlc291
cmNlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Ccm93c2VyQ2FjaGVDb250
cm9sUnVsZS5wcm90b3R5cGUucnVuQ2hlY2tzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLkJyb3dzZXJDYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZS5taXNzaW5nRXhwaXJhdGlv
bkNoZWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkJyb3dzZXJDYWNoZUNv
bnRyb2xSdWxlLnByb3RvdHlwZS52YXJ5Q2hlY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuQnJvd3NlckNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLm9uZU1vbnRoRXhwaXJh
dGlvbkNoZWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkJyb3dzZXJDYWNo
ZUNvbnRyb2xSdWxlLnByb3RvdHlwZS5vbmVZZWFyRXhwaXJhdGlvbkNoZWNrKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlByb3h5Q2FjaGVDb250cm9sUnVsZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Qcm94eUNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBl
LnJ1bkNoZWNrcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Qcm94eUNhY2hl
Q29udHJvbFJ1bGUucHJvdG90eXBlLnF1ZXN0aW9uTWFya0NoZWNrKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5BdWRpdFJ1bGVzLlByb3h5Q2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUucHVibGlj
Q2FjaGluZ0NoZWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlByb3h5Q2Fj
aGVDb250cm9sUnVsZS5wcm90b3R5cGUuc2V0Q29va2llQ2FjaGVhYmxlQ2hlY2spOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5k
b1J1bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNS
dWxlLnByb3RvdHlwZS5kb1J1bi5yb3V0aW5lLmhhc0RpbWVuc2lvbik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1bi5y
b3V0aW5lLmhhc1dpZHRoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkltYWdl
RGltZW5zaW9uc1J1bGUucHJvdG90eXBlLmRvUnVuLnJvdXRpbmUuaGFzSGVpZ2h0KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkltYWdlRGltZW5zaW9uc1J1bGUucHJvdG90eXBl
LmRvUnVuLnJvdXRpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ3NzSW5I
ZWFkUnVsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Dc3NJbkhlYWRSdWxl
LnByb3RvdHlwZS5kb1J1bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Dc3NJ
bkhlYWRSdWxlLnByb3RvdHlwZS5kb1J1bi5yb3V0aW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLlN0eWxlc1NjcmlwdHNPcmRlclJ1bGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09yZGVyUnVsZS5wcm90b3R5cGUuZG9SdW4pOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09yZGVyUnVsZS5w
cm90b3R5cGUuZG9SdW4ucm91dGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxl
cy5Db29raWVSdWxlQmFzZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29r
aWVSdWxlQmFzZS5wcm90b3R5cGUuZG9SdW4ucmVzdWx0Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llUnVsZUJhc2UucHJvdG90eXBlLmRvUnVuKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tpZVJ1bGVCYXNlLnByb3RvdHlwZS5t
YXBSZXNvdXJjZUNvb2tpZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29v
a2llUnVsZUJhc2UucHJvdG90eXBlLmNhbGxiYWNrRm9yUmVzb3VyY2VDb29raWVQYWlycyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29raWVTaXplUnVsZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29raWVTaXplUnVsZS5wcm90b3R5cGUuYXZlcmFn
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29raWVTaXplUnVsZS5wcm90
b3R5cGUubWF4KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tpZVNpemVS
dWxlLnByb3RvdHlwZS5wcm9jZXNzQ29va2llcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5Db29raWVTaXplUnVsZS5wcm90b3R5cGUucHJvY2Vzc0Nvb2tpZXMuYXZnU2l6ZVNv
cnRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5TdGF0aWNDb29raWVsZXNz
UnVsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5TdGF0aWNDb29raWVsZXNz
UnVsZS5wcm90b3R5cGUucHJvY2Vzc0Nvb2tpZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuU3RhdGljQ29va2llbGVzc1J1bGUucHJvdG90eXBlLmNvbGxlY3RvckNhbGxiYWNr
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0c1BhbmVsLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkF1ZGl0c1BhbmVsLnByb3RvdHlwZS5fY29uc3RydWN0Q2F0ZWdvcmll
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQXVkaXRDYXRlZ29yeS5wcm90b3R5cGUuZ2V0IGlkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5BdWRpdENhdGVnb3J5UmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9hdWRpdHMuY3Nz
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IubG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5hZGRQYW5lbFRvb2xiYXJJY29uKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5kb2N1bWVudEtleURvd24pOgorCiAyMDEwLTAxLTI2ICBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAgPHplY2tlQHNlbGZpc2gub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxYTFjM2FjLi45ZGY0NGZiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzY3Myw4ICszNjczLDEwIEBACiAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5odG1sJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0Fic3Ry
YWN0VGltZWxpbmVQYW5lbC5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9B
dWRpdENhdGVnb3JpZXMuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQXVk
aXRMYXVuY2hlclZpZXcuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQXVk
aXRSZXN1bHRWaWV3LmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0
UnVsZXMuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRzUGFuZWwu
anMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQm90dG9tVXBQcm9maWxlRGF0
YUdyaWRUcmVlLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9p
bnQuanMnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
aiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMzZjYzViNy4u
ODVjOGI3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00Mjc4NCw2
ICs0Mjc4NCwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxBdWRpdENhdGVnb3JpZXMuanMiDQor
CQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXGZyb250LWVuZFxBdWRpdExhdW5jaGVyVmlldy5qcyINCiAJCQkJCT4NCiAJCQkJ
PC9GaWxlPg0KQEAgLTQyNzkyLDYgKzQyNzk2LDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0K
IAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEF1
ZGl0UnVsZXMuanMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxhdWRpdHMuY3NzIg0KIAkJCQkJPg0K
IAkJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1
ZGl0Q2F0ZWdvcmllcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdENhdGVn
b3JpZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlNTg1ZQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdENhdGVnb3Jp
ZXMuanMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5BdWRpdENhdGVnb3JpZXMuUGFnZSA9
IGZ1bmN0aW9uKCkgeworICAgIFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5LmNhbGwodGhpcywg
V2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5QYWdlLkF1ZGl0Q2F0ZWdvcnlOYW1lKTsKKwor
ICAgIHRoaXMuYWRkUnVsZShuZXcgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVs
ZSgpKTsKKyAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNzc0lu
SGVhZFJ1bGUoe0lubGluZVVSTFNjb3JlOiA2LCBJbmxpbmVTdHlsZXNoZWV0U2NvcmU6IDIxfSkp
OworICAgIHRoaXMuYWRkUnVsZShuZXcgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2Ny
aXB0c09yZGVyUnVsZSh7Q1NTQWZ0ZXJKU1VSTFNjb3JlOiAxMSwgSW5saW5lQmV0d2VlblJlc291
cmNlc1Njb3JlOiAyMX0pKTsKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5QYWdl
LkF1ZGl0Q2F0ZWdvcnlOYW1lID0gIldlYiBQYWdlIFBlcmZvcm1hbmNlIjsKKworV2ViSW5zcGVj
dG9yLkF1ZGl0Q2F0ZWdvcmllcy5QYWdlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuQXVkaXRDYXRlZ29yeS5wcm90b3R5cGU7CisKK1dlYkluc3BlY3Rvci5BdWRpdENhdGVnb3Jp
ZXMuTmV0d29yayA9IGZ1bmN0aW9uKCkgeworICAgIFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5
LmNhbGwoCisgICAgICAgIHRoaXMsIFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3JpZXMuTmV0d29y
ay5BdWRpdENhdGVnb3J5TmFtZSk7CisKKyAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLkd6aXBSdWxlKCkpOworICAgIHRoaXMuYWRkUnVsZShuZXcgV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZSh7U2NvcmVQZXJJbWFnZVVzZTogNX0p
KTsKKyAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tpZVNp
emVSdWxlKHtNaW5CeXRlc1RocmVzaG9sZDogNDAwLCBNYXhCeXRlc1RocmVzaG9sZDogMTAwMH0p
KTsKKyAgICB0aGlzLmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlN0YXRpY0Nv
b2tpZWxlc3NSdWxlKHtNaW5SZXNvdXJjZXM6IDV9KSk7CisgICAgdGhpcy5hZGRSdWxlKG5ldyBX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db21iaW5lSnNSZXNvdXJjZXNSdWxlKHtBbGxvd2VkUGVy
RG9tYWluOiAyLCBTY29yZVBlclJlc291cmNlOiAxMX0pKTsKKyAgICB0aGlzLmFkZFJ1bGUobmV3
IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVDc3NSZXNvdXJjZXNSdWxlKHtBbGxvd2Vk
UGVyRG9tYWluOiAyLCBTY29yZVBlclJlc291cmNlOiAxMX0pKTsKKyAgICB0aGlzLmFkZFJ1bGUo
bmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLk1pbmltaXplRG5zTG9va3Vwc1J1bGUoe0hvc3RD
b3VudFRocmVzaG9sZDogNCwgVmlvbGF0aW9uRG9tYWluU2NvcmU6IDZ9KSk7CisgICAgdGhpcy5h
ZGRSdWxlKG5ldyBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5QYXJhbGxlbGl6ZURvd25sb2FkUnVs
ZSh7T3B0aW1hbEhvc3RuYW1lQ291bnQ6IDQsIE1pblJlcXVlc3RUaHJlc2hvbGQ6IDEwLCBNaW5C
YWxhbmNlVGhyZXNob2xkOiAwLjV9KSk7CisgICAgdGhpcy5hZGRSdWxlKG5ldyBXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5Ccm93c2VyQ2FjaGVDb250cm9sUnVsZSgpKTsKKyAgICB0aGlzLmFkZFJ1
bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlByb3h5Q2FjaGVDb250cm9sUnVsZSgpKTsK
K30KKworV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5OZXR3b3JrLkF1ZGl0Q2F0ZWdvcnlO
YW1lID0gIk5ldHdvcmsgVXRpbGl6YXRpb24iOworCitXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29y
aWVzLk5ldHdvcmsucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdENhdGVn
b3J5LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9B
dWRpdExhdW5jaGVyVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdExh
dW5jaGVyVmlldy5qcwppbmRleCA3OWZiYjkyLi4wNzUxY2EwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRMYXVuY2hlclZpZXcuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0TGF1bmNoZXJWaWV3LmpzCkBAIC0xOTcsNyArMTk3LDcg
QEAgV2ViSW5zcGVjdG9yLkF1ZGl0TGF1bmNoZXJWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAg
dGhpcy5fc2VsZWN0QWxsQ2xpY2tlZCh0aGlzLl9zZWxlY3RBbGxDaGVja2JveEVsZW1lbnQuY2hl
Y2tlZCk7CiAgICAgICAgIHRoaXMudXBkYXRlUmVzb3VyY2VUcmFja2luZ1N0YXRlKCk7CiAgICAg
ICAgIHRoaXMuX3VwZGF0ZUJ1dHRvbigpOwotICAgICAgICB0aGlzLnJlc2l6ZSgpOworICAgICAg
ICBzZXRUaW1lb3V0KHRoaXMucmVzaXplLmJpbmQodGhpcyksIDApOwogICAgIH0sCiAKICAgICBf
dXBkYXRlQnV0dG9uOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQXVkaXRSdWxlcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRp
dFJ1bGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMGQ1OTIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5q
cwpAQCAtMCwwICsxLDEyMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JUEFkZHJlc3NSZWdl
eHAgPSAvXlxkezEsM31cLlxkezEsM31cLlxkezEsM31cLlxkezEsM30kLzsKKworV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuQ2FjaGVhYmxlUmVzcG9uc2VDb2RlcyA9Cit7CisgICAgMjAwOiB0cnVl
LAorICAgIDIwMzogdHJ1ZSwKKyAgICAyMDY6IHRydWUsCisgICAgMzAwOiB0cnVlLAorICAgIDMw
MTogdHJ1ZSwKKyAgICA0MTA6IHRydWUsCisKKyAgICAzMDQ6IHRydWUgLy8gVW5kZXJseWluZyBy
ZXNvdXJjZSBpcyBjYWNoZWFibGUKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMubGlua2lm
eVJlc291cmNlID0gZnVuY3Rpb24odXJsKQoreworICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImEiKTsKKyAgZWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWh0bWwtcmVz
b3VyY2UtbGluayI7CisgIGVsZW1lbnQuaHJlZiA9IHVybDsKKyAgZWxlbWVudC5wcmVmZXJyZWRQ
YW5lbCA9ICJyZXNvdXJjZXMiOworICBlbGVtZW50LnRleHRDb250ZW50ID0gdXJsOworICByZXR1
cm4gZWxlbWVudC5vdXRlckhUTUw7Cit9CisKKy8qKgorICogQHBhcmFtIHtBcnJheX0gYXJyYXkg
QXJyYXkgb2YgRWxlbWVudHMgKG91dGVySFRNTCBpcyB1c2VkKSBvciBzdHJpbmdzIChwbGFpbiB2
YWx1ZSBpcyB1c2VkIGFzIGlubmVySFRNTCkKKyAqLworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
YXJyYXlBc1VMID0gZnVuY3Rpb24oYXJyYXksIHNob3VsZExpbmtpZnkpCit7CisgICAgaWYgKCFh
cnJheS5sZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKyAgICB2YXIgcmVzdWx0ID0gIjx1bD4i
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
cmVzdWx0ICs9ICI8bGk+IjsKKyAgICAgICAgcmVzdWx0ICs9IChhcnJheVtpXSBpbnN0YW5jZW9m
IEVsZW1lbnQgPworICAgICAgICAgICAgYXJyYXlbaV0ub3V0ZXJIVE1MIDoKKyAgICAgICAgICAg
IChzaG91bGRMaW5raWZ5ID8gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMubGlua2lmeVJlc291cmNl
KGFycmF5W2ldKSA6IGFycmF5W2ldKSk7CisgICAgICAgIHJlc3VsdCArPSAiPC9saT4iOworICAg
IH0KKyAgICByZXN1bHQgKz0gIjwvdWw+IjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlcy5nZXREb21haW5Ub1Jlc291cmNlc01hcCA9IGZ1bmN0aW9uKHJl
c291cmNlcywgdHlwZXMsIHJlZ2V4cCwgbmVlZEZ1bGxSZXNvdXJjZXMpCit7CisgICAgdmFyIGRv
bWFpblRvUmVzb3VyY2VzTWFwID0ge307CisgICAgZm9yICh2YXIgaSA9IDAsIHNpemUgPSByZXNv
dXJjZXMubGVuZ3RoOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIHZhciByZXNvdXJjZSA9IHJl
c291cmNlc1tpXTsKKyAgICAgICAgaWYgKHR5cGVzICYmIHR5cGVzLmluZGV4T2YocmVzb3VyY2Uu
dHlwZSkgPT09IC0xKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHZhciBtYXRjaCA9
IHJlc291cmNlLnVybC5tYXRjaChyZWdleHApOworICAgICAgICBpZiAoIW1hdGNoKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIHZhciBkb21haW4gPSBtYXRjaFsyXTsKKyAgICAgICAg
dmFyIGRvbWFpblJlc291cmNlcyA9IGRvbWFpblRvUmVzb3VyY2VzTWFwW2RvbWFpbl07CisgICAg
ICAgIGlmIChkb21haW5SZXNvdXJjZXMgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIGRvbWFp
blJlc291cmNlcyA9IFtdOworICAgICAgICAgIGRvbWFpblRvUmVzb3VyY2VzTWFwW2RvbWFpbl0g
PSBkb21haW5SZXNvdXJjZXM7CisgICAgICAgIH0KKyAgICAgICAgZG9tYWluUmVzb3VyY2VzLnB1
c2gobmVlZEZ1bGxSZXNvdXJjZXMgPyByZXNvdXJjZSA6IHJlc291cmNlLnVybCk7CisgICAgfQor
ICAgIHJldHVybiBkb21haW5Ub1Jlc291cmNlc01hcDsKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyA9IGZ1bmN0aW9uKGZ1bmMsIGNhbGxiYWNrKQor
eworICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5ldmFsdWF0ZU9uU2VsZihm
dW5jLnRvU3RyaW5nKCksIGNhbGxiYWNrKTsKK30KKworCisvLyBHemlwCitXZWJJbnNwZWN0b3Iu
QXVkaXRSdWxlcy5HemlwUnVsZSA9IGZ1bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuQXVk
aXRSdWxlLmNhbGwodGhpcywgIm5ldHdvcmstZ3ppcCIsICJFbmFibGUgZ3ppcCBjb21wcmVzc2lv
biIpOworfQorCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5HemlwUnVsZS5wcm90b3R5cGUgPSB7
CisgICAgZG9SdW46IGZ1bmN0aW9uKHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFjaykKKyAgICB7
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgY29tbW9uTWVzc2FnZSA9IHVuZGVmaW5l
ZDsKKyAgICAgICAgICAgIHZhciB0b3RhbFNhdmluZ3MgPSAwOworICAgICAgICAgICAgdmFyIGNv
bXByZXNzZWRTaXplID0gMAorICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZVNpemUgPSAwCisgICAg
ICAgICAgICB2YXIgb3V0cHV0UmVzb3VyY2VzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMCwgbGVuZ3RoID0gcmVzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHJlc291cmNlID0gcmVzb3VyY2VzW2ldOworICAgICAgICAgICAgICAg
IGlmICh0aGlzLnNob3VsZENvbXByZXNzKHJlc291cmNlKSkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgc2l6ZSA9IHJlc291cmNlLmNvbnRlbnRMZW5ndGg7CisgICAgICAgICAgICAgICAgICAg
IGNhbmRpZGF0ZVNpemUgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXND
b21wcmVzc2VkKHJlc291cmNlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Nl
ZFNpemUgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghY29tbW9uTWVzc2FnZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbk1lc3NhZ2UgPSByZXN1bHQuYXBwZW5kQ2hp
bGQoIiIpOworICAgICAgICAgICAgICAgICAgICB2YXIgc2F2aW5ncyA9IDIgKiBzaXplIC8gMzsK
KyAgICAgICAgICAgICAgICAgICAgdG90YWxTYXZpbmdzICs9IHNhdmluZ3M7CisgICAgICAgICAg
ICAgICAgICAgIG91dHB1dFJlc291cmNlcy5wdXNoKAorICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nLnNwcmludGYoIkNvbXByZXNzaW5nICVzIGNvdWxkIHNhdmUgfiVzIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmxpbmtpZnlSZXNvdXJjZShy
ZXNvdXJjZS51cmwpLCBOdW1iZXIuYnl0ZXNUb1N0cmluZyhzYXZpbmdzKSkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb21tb25NZXNzYWdlKSB7
CisgICAgICAgICAgICAgIGNvbW1vbk1lc3NhZ2UudmFsdWUgPQorICAgICAgICAgICAgICAgICAg
U3RyaW5nLnNwcmludGYoIkNvbXByZXNzaW5nIHRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIHdpdGgg
Z3ppcCBjb3VsZCByZWR1Y2UgdGhlaXIgIiArCisgICAgICAgICAgICAgICAgICAgICAgInRyYW5z
ZmVyIHNpemUgYnkgYWJvdXQgdHdvIHRoaXJkcyAofiVzKToiLCBOdW1iZXIuYnl0ZXNUb1N0cmlu
Zyh0b3RhbFNhdmluZ3MpKTsKKyAgICAgICAgICAgICAgY29tbW9uTWVzc2FnZS5hcHBlbmRDaGls
ZChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5hcnJheUFzVUwob3V0cHV0UmVzb3VyY2VzKSk7Cisg
ICAgICAgICAgICAgIHJlc3VsdC5zY29yZSA9IDEwMCAqIGNvbXByZXNzZWRTaXplIC8gY2FuZGlk
YXRlU2l6ZTsKKyAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlUmVzdWx0LlR5cGUuVmlvbGF0aW9uOworICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFs
bHkgeworICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICBpc0NvbXByZXNzZWQ6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsKKyAgICAgICAgdmFy
IGVuY29kaW5nID0gcmVzb3VyY2UucmVzcG9uc2VIZWFkZXJzWyJDb250ZW50LUVuY29kaW5nIl07
CisgICAgICAgIHJldHVybiBlbmNvZGluZyA9PT0gImd6aXAiIHx8IGVuY29kaW5nID09PSAiZGVm
bGF0ZSI7CisgICAgfSwKKworICAgIHNob3VsZENvbXByZXNzOiBmdW5jdGlvbihyZXNvdXJjZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5pc1RleHRU
eXBlKHJlc291cmNlLnR5cGUpICYmIHJlc291cmNlLmRvbWFpbiAmJiByZXNvdXJjZS5jb250ZW50
TGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgcmVzb3VyY2UuY29udGVudExlbmd0aCA+IDE1MDsKKyAg
ICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkd6aXBSdWxlLnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLnByb3RvdHlwZTsKKworCisvLyBDb21iaW5l
RXh0ZXJuYWxSZXNvdXJjZXMgKGFic3RyYWN0KQorV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29t
YmluZUV4dGVybmFsUmVzb3VyY2VzUnVsZSA9IGZ1bmN0aW9uKGlkLCBuYW1lLCB0eXBlLCByZXNv
dXJjZVR5cGVOYW1lLCBwYXJhbWV0ZXJzT2JqZWN0KQoreworICAgIFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGUuY2FsbCh0aGlzLCBpZCwgbmFtZSwgcGFyYW1ldGVyc09iamVjdCk7CisgICAgdGhpcy5f
dHlwZSA9IHR5cGU7CisgICAgdGhpcy5fcmVzb3VyY2VUeXBlTmFtZSA9IHJlc291cmNlVHlwZU5h
bWU7Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNl
c1J1bGUucHJvdG90eXBlID0geworICAgIGRvUnVuOiBmdW5jdGlvbihyZXNvdXJjZXMsIHJlc3Vs
dCwgY2FsbGJhY2spCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIGRvbWFp
blRvUmVzb3VyY2VzTWFwID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZ2V0RG9tYWluVG9SZXNv
dXJjZXNNYXAocmVzb3VyY2VzLCBbdGhpcy5fdHlwZV0sIFdlYkluc3BlY3Rvci5VUkxSZWdFeHAp
OworICAgICAgICAgICAgdmFyIHBlbmFsaXplZFJlc291cmNlQ291bnQgPSAwOworICAgICAgICAg
ICAgLy8gVE9ETzogcmVmYWN0b3IgYWNjb3JkaW5nIHRvIHRoZSBjaG9zZW4gaTE4biBhcHByb2Fj
aAorICAgICAgICAgICAgZm9yICh2YXIgZG9tYWluIGluIGRvbWFpblRvUmVzb3VyY2VzTWFwKSB7
CisgICAgICAgICAgICAgICAgdmFyIGRvbWFpblJlc291cmNlcyA9IGRvbWFpblRvUmVzb3VyY2Vz
TWFwW2RvbWFpbl07CisgICAgICAgICAgICAgICAgdmFyIGV4dHJhUmVzb3VyY2VDb3VudCA9IGRv
bWFpblJlc291cmNlcy5sZW5ndGggLSB0aGlzLmdldFZhbHVlKCJBbGxvd2VkUGVyRG9tYWluIik7
CisgICAgICAgICAgICAgICAgaWYgKGV4dHJhUmVzb3VyY2VDb3VudCA8PSAwKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBwZW5hbGl6ZWRSZXNvdXJjZUNv
dW50ICs9IGV4dHJhUmVzb3VyY2VDb3VudCAtIDE7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZENoaWxkKAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcuc3ByaW50ZigiVGhlcmUgYXJl
ICVkICVzIGZpbGVzIHNlcnZlZCBmcm9tICVzLiBDb25zaWRlciBjb21iaW5pbmcgdGhlbSBpbnRv
IGFzIGZldyBmaWxlcyBhcyBwb3NzaWJsZS4iLAorICAgICAgICAgICAgICAgICAgICBkb21haW5S
ZXNvdXJjZXMubGVuZ3RoLCB0aGlzLl9yZXNvdXJjZVR5cGVOYW1lLCBkb21haW4pKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdC5zY29yZSA9IDEwMCAtIChwZW5hbGl6ZWRSZXNv
dXJjZUNvdW50ICogdGhpcy5nZXRWYWx1ZSgiU2NvcmVQZXJSZXNvdXJjZSIpKTsKKyAgICAgICAg
ICAgIHJlc3VsdC50eXBlID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5UeXBlLkhpbnQ7
CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAg
ICAgICB9CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29tYmluZUV4dGVy
bmFsUmVzb3VyY2VzUnVsZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZS5wcm90b3R5cGU7CisKKworLy8gQ29tYmluZUpzUmVzb3VyY2VzCitXZWJJbnNwZWN0b3Iu
QXVkaXRSdWxlcy5Db21iaW5lSnNSZXNvdXJjZXNSdWxlID0gZnVuY3Rpb24ocGFyYW1ldGVyc09i
amVjdCkgeworICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291
cmNlc1J1bGUuY2FsbCh0aGlzLCAicGFnZS1leHRlcm5hbGpzIiwgIkNvbWJpbmUgZXh0ZXJuYWwg
SmF2YVNjcmlwdCIsIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCwgIkpTIiwgcGFy
YW1ldGVyc09iamVjdCk7Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVKc1Jl
c291cmNlc1J1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVz
LkNvbWJpbmVFeHRlcm5hbFJlc291cmNlc1J1bGUucHJvdG90eXBlOworCisKKy8vIENvbWJpbmVD
c3NSZXNvdXJjZXMKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVDc3NSZXNvdXJjZXNS
dWxlID0gZnVuY3Rpb24ocGFyYW1ldGVyc09iamVjdCkgeworICAgIFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNlc1J1bGUuY2FsbCh0aGlzLCAicGFnZS1leHRl
cm5hbGNzcyIsICJDb21iaW5lIGV4dGVybmFsIENTUyIsIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5U
eXBlLlN0eWxlc2hlZXQsICJDU1MiLCBwYXJhbWV0ZXJzT2JqZWN0KTsKK30KKworV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuQ29tYmluZUNzc1Jlc291cmNlc1J1bGUucHJvdG90eXBlLl9fcHJvdG9f
XyA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNlc1J1bGUu
cHJvdG90eXBlOworCisKKy8vIE1pbmltaXplRG5zTG9va3VwcworV2ViSW5zcGVjdG9yLkF1ZGl0
UnVsZXMuTWluaW1pemVEbnNMb29rdXBzUnVsZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnNPYmplY3Qp
IHsKKyAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLmNhbGwodGhpcywgIm5ldHdvcmstbWluaW1p
emVsb29rdXBzIiwgIk1pbmltaXplIEROUyBsb29rdXBzIiwgcGFyYW1ldGVyc09iamVjdCk7Cit9
CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLk1pbmltaXplRG5zTG9va3Vwc1J1bGUucHJvdG90
eXBlID0geworICAgIGRvUnVuOiBmdW5jdGlvbihyZXNvdXJjZXMsIHJlc3VsdCwgY2FsbGJhY2sp
CisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIHZpb2xhdGlvbkRvbWFpbnMg
PSBbXTsKKyAgICAgICAgICAgIHZhciBkb21haW5Ub1Jlc291cmNlc01hcCA9IFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLmdldERvbWFpblRvUmVzb3VyY2VzTWFwKHJlc291cmNlcywgdW5kZWZpbmVk
LCBXZWJJbnNwZWN0b3IuVVJMUmVnRXhwKTsKKyAgICAgICAgICAgIGZvciAodmFyIGRvbWFpbiBp
biBkb21haW5Ub1Jlc291cmNlc01hcCkgeworICAgICAgICAgICAgICAgIGlmIChkb21haW5Ub1Jl
c291cmNlc01hcFtkb21haW5dLmxlbmd0aCA+IDEpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGRvbWFpbi5tYXRjaChXZWJJbnNwZWN0
b3IuVVJMUmVnRXhwKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoWzJdLnNlYXJjaChX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JUEFkZHJlc3NSZWdleHApKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsgLy8gYW4gSVAgYWRkcmVzcworICAgICAgICAgICAgICAgIHZpb2xhdGlv
bkRvbWFpbnMucHVzaChtYXRjaFsyXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dmlvbGF0aW9uRG9tYWlucy5sZW5ndGggPD0gdGhpcy5nZXRWYWx1ZSgiSG9zdENvdW50VGhyZXNo
b2xkIikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgdmFyIGNvbW1vbk1l
c3NhZ2UgPSByZXN1bHQuYXBwZW5kQ2hpbGQoCisgICAgICAgICAgICAgICAgIlRoZSBmb2xsb3dp
bmcgZG9tYWlucyBvbmx5IHNlcnZlIG9uZSByZXNvdXJjZSBlYWNoLiBJZiBwb3NzaWJsZSwgYXZv
aWQgdGhlIGV4dHJhIEROUyAiICsKKyAgICAgICAgICAgICAgICAibG9va3VwcyBieSBzZXJ2aW5n
IHRoZXNlIHJlc291cmNlcyBmcm9tIGV4aXN0aW5nIGRvbWFpbnMuIik7CisgICAgICAgICAgICBj
b21tb25NZXNzYWdlLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmFycmF5QXNV
TCh2aW9sYXRpb25Eb21haW5zKSk7CisgICAgICAgICAgICByZXN1bHQuc2NvcmUgPSAxMDAgLSB2
aW9sYXRpb25Eb21haW5zLmxlbmd0aCAqIHRoaXMuZ2V0VmFsdWUoIlZpb2xhdGlvbkRvbWFpblNj
b3JlIik7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQp
OworICAgICAgICB9CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5NaW5pbWl6
ZURuc0xvb2t1cHNSdWxlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlLnByb3RvdHlwZTsKKworCisvLyBQYXJhbGxlbGl6ZURvd25sb2FkCitXZWJJbnNwZWN0b3Iu
QXVkaXRSdWxlcy5QYXJhbGxlbGl6ZURvd25sb2FkUnVsZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnNP
YmplY3QpCit7CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5jYWxsKHRoaXMsICJuZXR3b3Jr
LXBhcmFsbGVsaXplaG9zdHMiLCAiUGFyYWxsZWxpemUgZG93bmxvYWRzIGFjcm9zcyBob3N0bmFt
ZXMiLCBwYXJhbWV0ZXJzT2JqZWN0KTsKK30KKworCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Q
YXJhbGxlbGl6ZURvd25sb2FkUnVsZS5wcm90b3R5cGUgPSB7CisgICAgZG9SdW46IGZ1bmN0aW9u
KHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIEhv
c3RTb3J0ZXIoYSwgYikKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGFDb3VudCA9IGRvbWFp
blRvUmVzb3VyY2VzTWFwW2FdLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBiQ291bnQgPSBkb21h
aW5Ub1Jlc291cmNlc01hcFtiXS5sZW5ndGg7CisgICAgICAgICAgICByZXR1cm4gKGFDb3VudCA8
IGJDb3VudCkgPyAxIDogKGFDb3VudCA9PSBiQ291bnQpID8gMCA6IC0xOworICAgICAgICB9CisK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciBkb21haW5Ub1Jlc291cmNlc01hcCA9IFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLmdldERvbWFpblRvUmVzb3VyY2VzTWFwKAorICAgICAgICAg
ICAgICAgIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICBbV2ViSW5zcGVjdG9yLlJlc291cmNl
LlR5cGUuU3R5bGVzaGVldCwgV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuSW1hZ2VdLAorICAg
ICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5VUkxSZWdFeHAsCisgICAgICAgICAgICAgICAgdHJ1
ZSk7CisKKyAgICAgICAgICAgIHZhciBob3N0cyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIg
dXJsIGluIGRvbWFpblRvUmVzb3VyY2VzTWFwKQorICAgICAgICAgICAgICAgIGhvc3RzLnB1c2go
dXJsKTsKKworICAgICAgICAgICAgaWYgKCFob3N0cy5sZW5ndGgpCisgICAgICAgICAgICAgICAg
cmV0dXJuOyAvLyBubyBob3N0cyAobG9jYWwgZmlsZSBvciBzb21ldGhpbmcpCisKKyAgICAgICAg
ICAgIGhvc3RzLnNvcnQoSG9zdFNvcnRlcik7CisKKyAgICAgICAgICAgIHZhciBvcHRpbWFsSG9z
dG5hbWVDb3VudCA9IHRoaXMuZ2V0VmFsdWUoIk9wdGltYWxIb3N0bmFtZUNvdW50Iik7CisgICAg
ICAgICAgICBpZiAoaG9zdHMubGVuZ3RoID4gb3B0aW1hbEhvc3RuYW1lQ291bnQpCisgICAgICAg
ICAgICAgICAgaG9zdHMuc3BsaWNlKG9wdGltYWxIb3N0bmFtZUNvdW50KTsKKworICAgICAgICAg
ICAgdmFyIGJ1c2llc3RIb3N0UmVzb3VyY2VDb3VudCA9IGRvbWFpblRvUmVzb3VyY2VzTWFwW2hv
c3RzWzBdXS5sZW5ndGg7CisgICAgICAgICAgICB2YXIgcmVzb3VyY2VDb3VudEFib3ZlVGhyZXNo
b2xkID0gYnVzaWVzdEhvc3RSZXNvdXJjZUNvdW50IC0gdGhpcy5nZXRWYWx1ZSgiTWluUmVxdWVz
dFRocmVzaG9sZCIpOworICAgICAgICAgICAgaWYgKHJlc291cmNlQ291bnRBYm92ZVRocmVzaG9s
ZCA8PSAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdmFyIGF2Z1Jl
c291cmNlc1Blckhvc3QgPSAwOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHNpemUgPSBo
b3N0cy5sZW5ndGg7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAgYXZnUmVzb3VyY2Vz
UGVySG9zdCArPSBkb21haW5Ub1Jlc291cmNlc01hcFtob3N0c1tpXV0ubGVuZ3RoOworCisgICAg
ICAgICAgICAvLyBBc3N1bWUgb3B0aW1hbCBwYXJhbGxlbGl6YXRpb24uCisgICAgICAgICAgICBh
dmdSZXNvdXJjZXNQZXJIb3N0IC89IG9wdGltYWxIb3N0bmFtZUNvdW50OworCisgICAgICAgICAg
ICBhdmdSZXNvdXJjZXNQZXJIb3N0ID0gTWF0aC5tYXgoYXZnUmVzb3VyY2VzUGVySG9zdCwgMSk7
CisKKyAgICAgICAgICAgIHZhciBwY3RBYm92ZUF2ZyA9IChyZXNvdXJjZUNvdW50QWJvdmVUaHJl
c2hvbGQgLyBhdmdSZXNvdXJjZXNQZXJIb3N0KSAtIDEuMDsKKworICAgICAgICAgICAgdmFyIG1p
bkJhbGFuY2VUaHJlc2hvbGQgPSB0aGlzLmdldFZhbHVlKCJNaW5CYWxhbmNlVGhyZXNob2xkIik7
CisgICAgICAgICAgICBpZiAocGN0QWJvdmVBdmcgPCBtaW5CYWxhbmNlVGhyZXNob2xkKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LnNjb3JlID0gMTAwOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0LnNjb3JlID0gKDEgLSAocGN0
QWJvdmVBdmcgLSBtaW5CYWxhbmNlVGhyZXNob2xkKSkgKiAxMDA7CisgICAgICAgICAgICByZXN1
bHQudHlwZSA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQuVHlwZS5IaW50OworCisgICAg
ICAgICAgICB2YXIgcmVzb3VyY2VzT25CdXNpZXN0SG9zdCA9IGRvbWFpblRvUmVzb3VyY2VzTWFw
W2hvc3RzWzBdXTsKKyAgICAgICAgICAgIHZhciBjb21tb25NZXNzYWdlID0gcmVzdWx0LmFwcGVu
ZENoaWxkKAorICAgICAgICAgICAgICAgIFN0cmluZy5zcHJpbnRmKCJUaGlzIHBhZ2UgbWFrZXMg
JWQgcGFyYWxsZWxpemFibGUgcmVxdWVzdHMgdG8gJXMiICsKKyAgICAgICAgICAgICAgICAiLiBJ
bmNyZWFzZSBkb3dubG9hZCBwYXJhbGxlbGl6YXRpb24gYnkgZGlzdHJpYnV0aW5nIHRoZSBmb2xs
b3dpbmciICsKKyAgICAgICAgICAgICAgICAiIHJlcXVlc3RzIGFjcm9zcyBtdWx0aXBsZSBob3N0
bmFtZXMuIiwgYnVzaWVzdEhvc3RSZXNvdXJjZUNvdW50LCBob3N0c1swXSkpOworICAgICAgICAg
ICAgdmFyIG91dHB1dFJlc291cmNlcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAs
IHNpemUgPSByZXNvdXJjZXNPbkJ1c2llc3RIb3N0Lmxlbmd0aDsgaSA8IHNpemU7ICsraSkKKyAg
ICAgICAgICAgICAgICBvdXRwdXRSZXNvdXJjZXMucHVzaChyZXNvdXJjZXNPbkJ1c2llc3RIb3N0
W2ldLnVybCk7CisgICAgICAgICAgICBjb21tb25NZXNzYWdlLmFwcGVuZENoaWxkKFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLmFycmF5QXNVTChvdXRwdXRSZXNvdXJjZXMsIHRydWUpKTsKKyAgICAg
ICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlBhcmFsbGVsaXplRG93bmxvYWRS
dWxlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLnByb3RvdHlw
ZTsKKworCisvLyBDaGVja1VudXNlZENzcworLy8gVGhlIHJlcG9ydGVkIENTUyBydWxlIHNpemUg
aXMgaW5jb3JyZWN0IChwYXJzZWQgIT0gb3JpZ2luYWwpCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxl
cy5VbnVzZWRDc3NSdWxlID0gZnVuY3Rpb24ocGFyYW1ldGVyc09iamVjdCkKK3sKKyAgICBXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlLmNhbGwodGhpcywgInBhZ2UtdW51c2VkY3NzIiwgIlJlbW92ZSB1
bnVzZWQgQ1NTIiwgcGFyYW1ldGVyc09iamVjdCk7Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLlVudXNlZENzc1J1bGUucHJvdG90eXBlID0geworICAgIGdldFVudXNlZFN0eWxlc2hlZXRS
YXRpb01lc3NhZ2U6IGZ1bmN0aW9uKHVudXNlZExlbmd0aCwga2V5KQorICAgIHsKKyAgICAgICAg
dmFyIHBhcnRzID0ga2V5LnNwbGl0KCItIiwgMyk7CisgICAgICAgIHZhciB0b3RhbExlbmd0aCA9
IHBhcnRzWzFdOworICAgICAgICB2YXIgdXJsID0gcGFydHNbMF0gPT0gImhyZWYiCisgICAgICAg
ICAgICA/IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmxpbmtpZnlSZXNvdXJjZShwYXJ0c1syXSkK
KyAgICAgICAgICAgIDogU3RyaW5nLnNwcmludGYoIklubGluZSBibG9jayAjJXMiLCBwYXJ0c1sy
XSk7CisgICAgICAgIHZhciBwY3RVbnVzZWQgPSBNYXRoLnJvdW5kKHVudXNlZExlbmd0aCAvIHRv
dGFsTGVuZ3RoICogMTAwKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZy5zcHJpbnRmKCIlczogJWYl
JSAoZXN0aW1hdGVkKSBpcyBub3QgdXNlZCBieSB0aGUgY3VycmVudCBwYWdlLiIsIHVybCwgcGN0
VW51c2VkKTsKKyAgICB9LAorCisgICAgZ2V0VW51c2VkVG90YWxSYXRpb01lc3NhZ2U6IGZ1bmN0
aW9uKHVudXNlZExlbmd0aCwgdG90YWxMZW5ndGgpCisgICAgeworICAgICAgICB2YXIgcGN0VW51
c2VkID0gTWF0aC5yb3VuZCh1bnVzZWRMZW5ndGggLyB0b3RhbExlbmd0aCAqIDEwMCk7CisgICAg
ICAgIHJldHVybiBTdHJpbmcuc3ByaW50ZigiJWQlJSBvZiBDU1MgKGVzdGltYXRlZCkgaXMgbm90
IHVzZWQgYnkgdGhlIGN1cnJlbnQgcGFnZS4iLCBwY3RVbnVzZWQpOworICAgIH0sCisKKyAgICBk
b1J1bjogZnVuY3Rpb24ocmVzb3VyY2VzLCByZXN1bHQsIGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICBmdW5jdGlvbiBFdmFsQ2FsbGJhY2soZXZhbFJl
c3VsdCwgaXNFeGNlcHRpb24pIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIGlm
IChpc0V4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
ICB2YXIgdG90YWxMZW5ndGggPSAwOworICAgICAgICAgICAgICB2YXIgdG90YWxVbnVzZWRMZW5n
dGggPSAwOworICAgICAgICAgICAgICB2YXIgdG9wTWVzc2FnZTsKKyAgICAgICAgICAgICAgdmFy
IHN0eWxlU2hlZXRNZXNzYWdlOworICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZXZhbFJl
c3VsdCkgeworICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gInRvdGFsTGVuZ3RoIikgewor
ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsTGVuZ3RoID0gZXZhbFJlc3VsdFtrZXldOworICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgdmFyIHBhcnRzID0ga2V5LnNwbGl0KCItIiwgMyk7CisgICAgICAgICAgICAg
ICAgICB2YXIgdW51c2VkUnVsZXMgPSBldmFsUmVzdWx0W2tleV07CisgICAgICAgICAgICAgICAg
ICBzdHlsZVNoZWV0TWVzc2FnZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgIGlmICgh
dG9wTWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICB0b3BNZXNzYWdlID0gcmVzdWx0LmFw
cGVuZENoaWxkKCIiKTsKKworICAgICAgICAgICAgICAgICAgdmFyIHRvdGFsVW51c2VkUnVsZUxl
bmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICB2YXIgcnVsZVNlbGVjdG9ycyA9IFtdOworICAg
ICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bnVzZWRSdWxlcy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgICAgICAgICAgIHZhciBydWxlID0gdW51c2VkUnVsZXNbaV07Cisg
ICAgICAgICAgICAgICAgICAgICAgdG90YWxVbnVzZWRSdWxlTGVuZ3RoICs9IHBhcnNlSW50KHJ1
bGVbMV0pOworICAgICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVTaGVldE1lc3NhZ2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRNZXNzYWdlID0gcmVzdWx0LmFwcGVu
ZENoaWxkKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICBydWxlU2VsZWN0b3JzLnB1c2gocnVs
ZVswXSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0
TWVzc2FnZS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5hcnJheUFzVUwocnVs
ZVNlbGVjdG9ycykpOworCisgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0TWVzc2FnZS52YWx1
ZSA9IHNlbGYuZ2V0VW51c2VkU3R5bGVzaGVldFJhdGlvTWVzc2FnZSh0b3RhbFVudXNlZFJ1bGVM
ZW5ndGgsIGtleSk7CisgICAgICAgICAgICAgICAgICB0b3RhbFVudXNlZExlbmd0aCArPSB0b3Rh
bFVudXNlZFJ1bGVMZW5ndGg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHRv
dGFsVW51c2VkTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICB2YXIgdG90YWxVbnVzZWRQZXJj
ZW50ID0gdG90YWxVbnVzZWRMZW5ndGggLyB0b3RhbExlbmd0aDsKKyAgICAgICAgICAgICAgICAg
IHRvcE1lc3NhZ2UudmFsdWUgPSBzZWxmLmdldFVudXNlZFRvdGFsUmF0aW9NZXNzYWdlKHRvdGFs
VW51c2VkTGVuZ3RoLCB0b3RhbExlbmd0aCk7CisgICAgICAgICAgICAgICAgICB2YXIgcGN0TXVs
dGlwbGllciA9IE1hdGgubG9nKE1hdGgubWF4KDIwMCwgdG90YWxVbnVzZWRMZW5ndGggLSA4MDAp
KSAvIDcgLSAwLjY7CisgICAgICAgICAgICAgICAgICByZXN1bHQuc2NvcmUgPSAoMSAtIHRvdGFs
VW51c2VkUGVyY2VudCAqIHBjdE11bHRpcGxpZXIpICogMTAwOworICAgICAgICAgICAgICAgICAg
cmVzdWx0LnR5cGUgPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0LlR5cGUuSGludDsKKyAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICByZXN1bHQuc2NvcmUgPSAxMDA7
CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3Vs
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2YXIgcm91dGluZSA9IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgdmFyIHN0eWxlU2hlZXRzID0gZG9jdW1lbnQuc3R5bGVT
aGVldHM7CisgICAgICAgICAgICBpZiAoIXN0eWxlU2hlZXRzKQorICAgICAgICAgICAgICAgIHJl
dHVybiB7fTsKKyAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0VG9VbnVzZWRSdWxlcyA9IHt9Owor
ICAgICAgICAgICAgdmFyIGlubGluZUJsb2NrT3JkaW5hbCA9IDA7CisgICAgICAgICAgICB2YXIg
dG90YWxDU1NMZW5ndGggPSAwOworICAgICAgICAgICAgdmFyIHBzZXVkb1NlbGVjdG9yUmVnZXhw
ID0gLzpob3Zlcnw6bGlua3w6YWN0aXZlfDp2aXNpdGVkfDpmb2N1cy87CisgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0eWxlU2hlZXRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0c1tpXTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXN0eWxlU2hlZXQuY3NzUnVsZXMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIHZhciBjdXJyZW50U3R5bGVTaGVldFNpemUgPSAwOworICAgICAgICAg
ICAgICAgIHZhciB1bnVzZWRSdWxlcyA9IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGN1
clJ1bGUgPSAwOyBjdXJSdWxlIDwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGg7ICsrY3VyUnVs
ZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IHN0eWxlU2hlZXQuY3NzUnVsZXNb
Y3VyUnVsZV07CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0TGVuZ3RoID0gcnVsZS5jc3NU
ZXh0ID8gcnVsZS5jc3NUZXh0Lmxlbmd0aCA6IDA7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTdHlsZVNoZWV0U2l6ZSArPSB0ZXh0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB0b3Rh
bENTU0xlbmd0aCArPSB0ZXh0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS50
eXBlICE9PSAxIHx8IHJ1bGUuc2VsZWN0b3JUZXh0Lm1hdGNoKHBzZXVkb1NlbGVjdG9yUmVnZXhw
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICB2YXIgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHJ1bGUuc2VsZWN0b3JUZXh0
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB1bnVzZWRS
dWxlcy5wdXNoKFtydWxlLnNlbGVjdG9yVGV4dCwgdGV4dExlbmd0aF0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodW51c2VkUnVsZXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgICB2YXIga2V5ID0gKHN0eWxlU2hlZXQuaHJlZiA/ICJocmVmLSIgOiAiaW5saW5l
LSIpICsKKyAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3R5bGVTaGVldFNpemUgKworICAg
ICAgICAgICAgICAgICAgICAgICItIiArCisgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlU2hl
ZXQuaHJlZiA/IHN0eWxlU2hlZXQuaHJlZiA6ICsraW5saW5lQmxvY2tPcmRpbmFsKTsKKyAgICAg
ICAgICAgICAgICAgIHN0eWxlU2hlZXRUb1VudXNlZFJ1bGVzW2tleV0gPSB1bnVzZWRSdWxlczsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHlsZVNoZWV0
VG9VbnVzZWRSdWxlcy50b3RhbExlbmd0aCA9IHRvdGFsQ1NTTGVuZ3RoOworICAgICAgICAgICAg
cmV0dXJuIHN0eWxlU2hlZXRUb1VudXNlZFJ1bGVzOworICAgICAgICB9CisKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBFdmFs
Q2FsbGJhY2spOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3Nz
UnVsZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5wcm90b3R5
cGU7CisKKworLy8gQ2hlY2tDYWNoZUNvbnRyb2wKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNh
Y2hlQ29udHJvbFJ1bGUgPSBmdW5jdGlvbihpZCwgbmFtZSwgcGFyYW1ldGVyc09iamVjdCkKK3sK
KyAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLmNhbGwodGhpcywgaWQsIG5hbWUsIHBhcmFtZXRl
cnNPYmplY3QpOworfQorCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxl
Lk1pbGxpc1Blck1vbnRoID0gMTAwMCAqIDYwICogNjAgKiAyNCAqIDMwOworCitXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZSA9IHsKKworICAgIEluZm9D
aGVjazogLTEsCisgICAgRmFpbENoZWNrOiAwLAorICAgIFdhcm5pbmdDaGVjazogMSwKKyAgICBT
ZXZlcmVDaGVjazogMiwKKworICAgIGRvUnVuOiBmdW5jdGlvbihyZXNvdXJjZXMsIHJlc3VsdCwg
Y2FsbGJhY2spCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIGNhY2hlYWJs
ZUFuZE5vbkNhY2hlYWJsZVJlc291cmNlcyA9IHRoaXMuX2NhY2hlYWJsZUFuZE5vbkNhY2hlYWJs
ZVJlc291cmNlcyhyZXNvdXJjZXMpOworICAgICAgICAgICAgaWYgKGNhY2hlYWJsZUFuZE5vbkNh
Y2hlYWJsZVJlc291cmNlc1swXS5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2Nv
cmUgPSAxMDA7CisgICAgICAgICAgICAgICAgdGhpcy5ydW5DaGVja3MoY2FjaGVhYmxlQW5kTm9u
Q2FjaGVhYmxlUmVzb3VyY2VzWzBdLCByZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGhpcy5oYW5kbGVOb25DYWNoZWFibGVSZXNvdXJjZXMoY2FjaGVhYmxlQW5kTm9uQ2FjaGVh
YmxlUmVzb3VyY2VzWzFdLCByZXN1bHQpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAg
ICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBoYW5kbGVOb25D
YWNoZWFibGVSZXNvdXJjZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgfSwKKworICAgIF9jYWNo
ZWFibGVBbmROb25DYWNoZWFibGVSZXNvdXJjZXM6IGZ1bmN0aW9uKHJlc291cmNlcykKKyAgICB7
CisgICAgICAgIHZhciBwcm9jZXNzZWRSZXNvdXJjZXMgPSBbW10sIFtdXTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCByZXNvdXJjZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZh
ciByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKKyAgICAgICAgICAgIGlmICghdGhpcy5pc0NhY2hl
YWJsZVJlc291cmNlKHJlc291cmNlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmICh0aGlzLmlzRXhwbGljaXRseU5vbkNhY2hlYWJsZShyZXNvdXJjZSkpCisgICAg
ICAgICAgICAgICAgcHJvY2Vzc2VkUmVzb3VyY2VzWzFdLnB1c2gocmVzb3VyY2UpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHByb2Nlc3NlZFJlc291cmNlc1swXS5wdXNoKHJl
c291cmNlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJvY2Vzc2VkUmVzb3VyY2VzOwor
ICAgIH0sCisKKyAgICBleGVjQ2hlY2s6IGZ1bmN0aW9uKG1lc3NhZ2VUZXh0LCByZXNvdXJjZUNo
ZWNrRnVuY3Rpb24sIHJlc291cmNlcywgc2V2ZXJpdHksIHJlc3VsdCkKKyAgICB7CisgICAgICAg
IHZhciB0b3BNZXNzYWdlOworICAgICAgICB2YXIgZmFpbGluZ1Jlc291cmNlcyA9IDA7CisgICAg
ICAgIHZhciByZXNvdXJjZUNvdW50ID0gcmVzb3VyY2VzLmxlbmd0aDsKKyAgICAgICAgdmFyIG91
dHB1dFJlc291cmNlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc291cmNl
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgaWYgKHJlc291cmNlQ2hlY2tGdW5jdGlvbi5jYWxs
KHRoaXMsIHJlc291cmNlc1tpXSkpIHsKKyAgICAgICAgICAgICAgICArK2ZhaWxpbmdSZXNvdXJj
ZXM7CisgICAgICAgICAgICAgICAgaWYgKCF0b3BNZXNzYWdlKQorICAgICAgICAgICAgICAgICAg
ICB0b3BNZXNzYWdlID0gcmVzdWx0LmFwcGVuZENoaWxkKG1lc3NhZ2VUZXh0KTsKKyAgICAgICAg
ICAgICAgICBvdXRwdXRSZXNvdXJjZXMucHVzaChyZXNvdXJjZXNbaV0udXJsKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodG9wTWVzc2FnZSkKKyAgICAgICAgICAgIHRv
cE1lc3NhZ2UuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuYXJyYXlBc1VMKG91
dHB1dFJlc291cmNlcywgdHJ1ZSkpOworICAgICAgICBpZiAoZmFpbGluZ1Jlc291cmNlcykgewor
ICAgICAgICAgICAgc3dpdGNoIChzZXZlcml0eSkgeworICAgICAgICAgICAgICAgIGNhc2UgdGhp
cy5GYWlsQ2hlY2s6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zY29yZSA9IDA7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3Vs
dC5UeXBlLlZpb2xhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSB0aGlzLlNldmVyZUNoZWNrOgorICAgICAgICAgICAgICAgIGNhc2UgdGhpcy5X
YXJuaW5nQ2hlY2s6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zY29yZSAtPSA1MCAqIHNl
dmVyaXR5ICogZmFpbGluZ1Jlc291cmNlcyAvIHJlc291cmNlQ291bnQ7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5UeXBlLkhp
bnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHJldHVybiB0b3BNZXNzYWdlOworICAgIH0sCisKKyAgICBmcmVzaG5lc3NMaWZl
dGltZUdyZWF0ZXJUaGFuOiBmdW5jdGlvbihyZXNvdXJjZSwgdGltZU1zKQorICAgIHsKKyAgICAg
ICAgdmFyIGRhdGVIZWFkZXIgPSB0aGlzLnJlc3BvbnNlSGVhZGVyKHJlc291cmNlLCAiRGF0ZSIp
OworICAgICAgICBpZiAoIWRhdGVIZWFkZXIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgdmFyIGRhdGVIZWFkZXJNcyA9IERhdGUucGFyc2UoZGF0ZUhlYWRlcik7CisgICAg
ICAgIGlmIChpc05hTihkYXRlSGVhZGVyTXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHZhciBmcmVzaG5lc3NMaWZldGltZU1zOworICAgICAgICB2YXIgbWF4QWdlTWF0
Y2ggPSB0aGlzLnJlc3BvbnNlSGVhZGVyTWF0Y2gocmVzb3VyY2UsICJDYWNoZS1Db250cm9sIiwg
Im1heC1hZ2U9KFxcZCspIik7CisKKyAgICAgICAgaWYgKG1heEFnZU1hdGNoKQorICAgICAgICAg
ICAgZnJlc2huZXNzTGlmZXRpbWVNcyA9IChtYXhBZ2VNYXRjaFsxXSkgPyAxMDAwICogbWF4QWdl
TWF0Y2hbMV0gOiAwOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBleHBpcmVzSGVh
ZGVyID0gdGhpcy5yZXNwb25zZUhlYWRlcihyZXNvdXJjZSwgIkV4cGlyZXMiKTsKKyAgICAgICAg
ICAgIGlmIChleHBpcmVzSGVhZGVyKSB7CisgICAgICAgICAgICAgICAgdmFyIGV4cERhdGUgPSBE
YXRlLnBhcnNlKGV4cGlyZXNIZWFkZXIpOworICAgICAgICAgICAgICAgIGlmICghaXNOYU4oZXhw
RGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIGZyZXNobmVzc0xpZmV0aW1lTXMgPSBleHBEYXRl
IC0gZGF0ZUhlYWRlck1zOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIChpc05hTihmcmVzaG5lc3NMaWZldGltZU1zKSkgPyBmYWxzZSA6IGZyZXNobmVzc0xpZmV0
aW1lTXMgPiB0aW1lTXM7CisgICAgfSwKKworICAgIHJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbihy
ZXNvdXJjZSwgaGVhZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlLnJlc3BvbnNl
SGVhZGVyc1toZWFkZXJdOworICAgIH0sCisKKyAgICBoYXNSZXNwb25zZUhlYWRlcjogZnVuY3Rp
b24ocmVzb3VyY2UsIGhlYWRlcikKKyAgICB7CisgICAgICAgIHJldHVybiByZXNvdXJjZS5yZXNw
b25zZUhlYWRlcnNbaGVhZGVyXSAhPT0gdW5kZWZpbmVkOworICAgIH0sCisKKyAgICBpc0NvbXBy
ZXNzaWJsZTogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLlJlc291cmNlLlR5cGUuaXNUZXh0VHlwZShyZXNvdXJjZS50eXBlKTsKKyAgICB9LAor
CisgICAgaXNQdWJsaWNseUNhY2hlYWJsZTogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5pc0V4cGxpY2l0bHlOb25DYWNoZWFibGUocmVzb3VyY2UpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlSGVhZGVyTWF0
Y2gocmVzb3VyY2UsICJDYWNoZS1Db250cm9sIiwgInB1YmxpYyIpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgcmV0dXJuIHJlc291cmNlLnVybC5pbmRleE9mKCI/IikgPT0g
LTEgJiYgIXRoaXMucmVzcG9uc2VIZWFkZXJNYXRjaChyZXNvdXJjZSwgIkNhY2hlLUNvbnRyb2wi
LCAicHJpdmF0ZSIpOworICAgIH0sCisKKyAgICByZXNwb25zZUhlYWRlck1hdGNoOiBmdW5jdGlv
bihyZXNvdXJjZSwgaGVhZGVyLCByZWdleHApCisgICAgeworICAgICAgICByZXR1cm4gcmVzb3Vy
Y2UucmVzcG9uc2VIZWFkZXJzW2hlYWRlcl0KKyAgICAgICAgICAgID8gcmVzb3VyY2UucmVzcG9u
c2VIZWFkZXJzW2hlYWRlcl0ubWF0Y2gobmV3IFJlZ0V4cChyZWdleHAsICJpbSIpKQorICAgICAg
ICAgICAgOiB1bmRlZmluZWQ7CisgICAgfSwKKworICAgIGhhc0V4cGxpY2l0RXhwaXJhdGlvbjog
ZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5oYXNSZXNwb25z
ZUhlYWRlcihyZXNvdXJjZSwgIkRhdGUiKSAmJgorICAgICAgICAgICAgKHRoaXMuaGFzUmVzcG9u
c2VIZWFkZXIocmVzb3VyY2UsICJFeHBpcmVzIikgfHwgdGhpcy5yZXNwb25zZUhlYWRlck1hdGNo
KHJlc291cmNlLCAiQ2FjaGUtQ29udHJvbCIsICJtYXgtYWdlIikpOworICAgIH0sCisKKyAgICBp
c0V4cGxpY2l0bHlOb25DYWNoZWFibGU6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsKKyAgICAg
ICAgdmFyIGhhc0V4cGxpY2l0RXhwID0gdGhpcy5oYXNFeHBsaWNpdEV4cGlyYXRpb24ocmVzb3Vy
Y2UpOworICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZUhlYWRlck1hdGNoKHJlc291cmNlLCAi
Q2FjaGUtQ29udHJvbCIsICIobm8tY2FjaGV8bm8tc3RvcmV8bXVzdC1yZXZhbGlkYXRlKSIpIHx8
CisgICAgICAgICAgICB0aGlzLnJlc3BvbnNlSGVhZGVyTWF0Y2gocmVzb3VyY2UsICJQcmFnbWEi
LCAibm8tY2FjaGUiKSB8fAorICAgICAgICAgICAgKGhhc0V4cGxpY2l0RXhwICYmICF0aGlzLmZy
ZXNobmVzc0xpZmV0aW1lR3JlYXRlclRoYW4ocmVzb3VyY2UsIDApKSB8fAorICAgICAgICAgICAg
KCFoYXNFeHBsaWNpdEV4cCAmJiByZXNvdXJjZS51cmwgJiYgcmVzb3VyY2UudXJsLmluZGV4T2Yo
Ij8iKSA+PSAwKSB8fAorICAgICAgICAgICAgKCFoYXNFeHBsaWNpdEV4cCAmJiAhdGhpcy5pc0Nh
Y2hlYWJsZVJlc291cmNlKHJlc291cmNlKSk7CisgICAgfSwKKworICAgIGlzQ2FjaGVhYmxlUmVz
b3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc291cmNl
LnN0YXR1c0NvZGUgIT09IHVuZGVmaW5lZCAmJiBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNo
ZWFibGVSZXNwb25zZUNvZGVzW3Jlc291cmNlLnN0YXR1c0NvZGVdOworICAgIH0KK30KKworV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5wcm90b3R5cGU7CisKKworLy8gQnJvd3NlckNhY2hl
Q29udHJvbAorV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQnJvd3NlckNhY2hlQ29udHJvbFJ1bGUg
PSBmdW5jdGlvbihwYXJhbWV0ZXJzT2JqZWN0KQoreworICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLkNhY2hlQ29udHJvbFJ1bGUuY2FsbCh0aGlzLCAiaHR0cC1icm93c2VyY2FjaGUiLCAiTGV2
ZXJhZ2UgYnJvd3NlciBjYWNoaW5nIiwgcGFyYW1ldGVyc09iamVjdCk7Cit9CisKK1dlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLkJyb3dzZXJDYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZSA9IHsKKyAg
ICBoYW5kbGVOb25DYWNoZWFibGVSZXNvdXJjZXM6IGZ1bmN0aW9uKHJlc291cmNlcywgcmVzdWx0
KQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZh
ciBtZXNzYWdlID0gcmVzdWx0LmFwcGVuZENoaWxkKAorICAgICAgICAgICAgICAgICJUaGUgZm9s
bG93aW5nIHJlc291cmNlcyBhcmUgZXhwbGljaXRseSBub24tY2FjaGVhYmxlLiBDb25zaWRlciBt
YWtpbmcgdGhlbSBjYWNoZWFibGUgaWYgcG9zc2libGU6Iik7CisgICAgICAgICAgICB2YXIgcmVz
b3VyY2VPdXRwdXQgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb3Vy
Y2VzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIHJlc291cmNlT3V0cHV0LnB1c2gocmVz
b3VyY2VzW2ldLnVybCk7CisgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZENoaWxkKFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLmFycmF5QXNVTChyZXNvdXJjZU91dHB1dCwgdHJ1ZSkpOworICAgICAg
ICB9CisgICAgfSwKKworICAgIHJ1bkNoZWNrczogZnVuY3Rpb24ocmVzb3VyY2VzLCByZXN1bHQs
IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdGhpcy5leGVjQ2hlY2soCisgICAgICAgICAgICAi
VGhlIGZvbGxvd2luZyByZXNvdXJjZXMgYXJlIG1pc3NpbmcgYSBjYWNoZSBleHBpcmF0aW9uLiIg
KworICAgICAgICAgICAgIiBSZXNvdXJjZXMgdGhhdCBkbyBub3Qgc3BlY2lmeSBhbiBleHBpcmF0
aW9uIG1heSBub3QgYmUiICsKKyAgICAgICAgICAgICIgY2FjaGVkIGJ5IGJyb3dzZXJzOiIsCisg
ICAgICAgICAgICB0aGlzLm1pc3NpbmdFeHBpcmF0aW9uQ2hlY2ssIHJlc291cmNlcywgdGhpcy5T
ZXZlcmVDaGVjaywgcmVzdWx0KTsKKyAgICAgICAgdGhpcy5leGVjQ2hlY2soCisgICAgICAgICAg
ICAiVGhlIGZvbGxvd2luZyByZXNvdXJjZXMgc3BlY2lmeSBhIFwiVmFyeVwiIGhlYWRlciB0aGF0
IiArCisgICAgICAgICAgICAiIGRpc2FibGVzIGNhY2hpbmcgaW4gbW9zdCB2ZXJzaW9ucyBvZiBJ
bnRlcm5ldCBFeHBsb3JlcjoiLAorICAgICAgICAgICAgdGhpcy52YXJ5Q2hlY2ssIHJlc291cmNl
cywgdGhpcy5TZXZlcmVDaGVjaywgcmVzdWx0KTsKKyAgICAgICAgdGhpcy5leGVjQ2hlY2soCisg
ICAgICAgICAgICAiVGhlIGZvbGxvd2luZyBjYWNoZWFibGUgcmVzb3VyY2VzIGhhdmUgYSBzaG9y
dCIgKworICAgICAgICAgICAgIiBmcmVzaG5lc3MgbGlmZXRpbWU6IiwKKyAgICAgICAgICAgIHRo
aXMub25lTW9udGhFeHBpcmF0aW9uQ2hlY2ssIHJlc291cmNlcywgdGhpcy5XYXJuaW5nQ2hlY2ss
IHJlc3VsdCk7CisKKyAgICAgICAgLy8gVW5hYmxlIHRvIGltcGxlbWVudCB0aGUgZmF2aWNvbiBj
aGVjayBkdWUgdG8gdGhlIFdlYktpdCBsaW1pdGF0aW9ucy4KKworICAgICAgICB0aGlzLmV4ZWND
aGVjaygKKyAgICAgICAgICAgICJUbyBmdXJ0aGVyIGltcHJvdmUgY2FjaGUgaGl0IHJhdGUsIHNw
ZWNpZnkgYW4gZXhwaXJhdGlvbiIgKworICAgICAgICAgICAgIiBvbmUgeWVhciBpbiB0aGUgZnV0
dXJlIGZvciB0aGUgZm9sbG93aW5nIGNhY2hlYWJsZSIgKworICAgICAgICAgICAgIiByZXNvdXJj
ZXM6IiwKKyAgICAgICAgICAgIHRoaXMub25lWWVhckV4cGlyYXRpb25DaGVjaywgcmVzb3VyY2Vz
LCB0aGlzLkluZm9DaGVjaywgcmVzdWx0KTsKKyAgICB9LAorCisgICAgbWlzc2luZ0V4cGlyYXRp
b25DaGVjazogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5p
c0NhY2hlYWJsZVJlc291cmNlKHJlc291cmNlKSAmJiAhdGhpcy5oYXNSZXNwb25zZUhlYWRlcihy
ZXNvdXJjZSwgIlNldC1Db29raWUiKSAmJiAhdGhpcy5oYXNFeHBsaWNpdEV4cGlyYXRpb24ocmVz
b3VyY2UpOworICAgIH0sCisKKyAgICB2YXJ5Q2hlY2s6IGZ1bmN0aW9uKHJlc291cmNlKQorICAg
IHsKKyAgICAgICAgdmFyIHZhcnlIZWFkZXIgPSB0aGlzLnJlc3BvbnNlSGVhZGVyKHJlc291cmNl
LCAiVmFyeSIpOworICAgICAgICBpZiAodmFyeUhlYWRlcikgeworICAgICAgICAgICAgdmFyeUhl
YWRlciA9IHZhcnlIZWFkZXIucmVwbGFjZSgvVXNlci1BZ2VudC9naSwgIiIpOworICAgICAgICAg
ICAgdmFyeUhlYWRlciA9IHZhcnlIZWFkZXIucmVwbGFjZSgvQWNjZXB0LUVuY29kaW5nL2dpLCAi
Iik7CisgICAgICAgICAgICB2YXJ5SGVhZGVyID0gdmFyeUhlYWRlci5yZXBsYWNlKC9bLCBdKi9n
LCAiIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhcnlIZWFkZXIgJiYgdmFyeUhlYWRl
ci5sZW5ndGggJiYgdGhpcy5pc0NhY2hlYWJsZVJlc291cmNlKHJlc291cmNlKSAmJiB0aGlzLmZy
ZXNobmVzc0xpZmV0aW1lR3JlYXRlclRoYW4ocmVzb3VyY2UsIDApOworICAgIH0sCisKKyAgICBv
bmVNb250aEV4cGlyYXRpb25DaGVjazogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5pc0NhY2hlYWJsZVJlc291cmNlKHJlc291cmNlKSAmJgorICAgICAgICAg
ICAgIXRoaXMuaGFzUmVzcG9uc2VIZWFkZXIocmVzb3VyY2UsICJTZXQtQ29va2llIikgJiYKKyAg
ICAgICAgICAgICF0aGlzLmZyZXNobmVzc0xpZmV0aW1lR3JlYXRlclRoYW4ocmVzb3VyY2UsIFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUuTWlsbGlzUGVyTW9udGgpICYm
CisgICAgICAgICAgICB0aGlzLmZyZXNobmVzc0xpZmV0aW1lR3JlYXRlclRoYW4ocmVzb3VyY2Us
IDApOworICAgIH0sCisKKyAgICBvbmVZZWFyRXhwaXJhdGlvbkNoZWNrOiBmdW5jdGlvbihyZXNv
dXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmlzQ2FjaGVhYmxlUmVzb3VyY2UocmVz
b3VyY2UpICYmCisgICAgICAgICAgICAhdGhpcy5oYXNSZXNwb25zZUhlYWRlcihyZXNvdXJjZSwg
IlNldC1Db29raWUiKSAmJgorICAgICAgICAgICAgIXRoaXMuZnJlc2huZXNzTGlmZXRpbWVHcmVh
dGVyVGhhbihyZXNvdXJjZSwgMTEgKiBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRy
b2xSdWxlLk1pbGxpc1Blck1vbnRoKSAmJgorICAgICAgICAgICAgdGhpcy5mcmVzaG5lc3NMaWZl
dGltZUdyZWF0ZXJUaGFuKHJlc291cmNlLCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNv
bnRyb2xSdWxlLk1pbGxpc1Blck1vbnRoKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLkJyb3dzZXJDYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZTsKKworCisvLyBQ
cm94eUNhY2hlQ29udHJvbAorV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuUHJveHlDYWNoZUNvbnRy
b2xSdWxlID0gZnVuY3Rpb24ocGFyYW1ldGVyc09iamVjdCkgeworICAgIFdlYkluc3BlY3Rvci5B
dWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUuY2FsbCh0aGlzLCAiaHR0cC1wcm94eWNhY2hlIiwg
IkxldmVyYWdlIHByb3h5IGNhY2hpbmciLCBwYXJhbWV0ZXJzT2JqZWN0KTsKK30KKworV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuUHJveHlDYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZSA9IHsKKyAg
ICBydW5DaGVja3M6IGZ1bmN0aW9uKHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFjaykKKyAgICB7
CisgICAgICAgIHRoaXMuZXhlY0NoZWNrKAorICAgICAgICAgICAgIlJlc291cmNlcyB3aXRoIGEg
XCI/XCIgaW4gdGhlIFVSTCBhcmUgbm90IGNhY2hlZCBieSBtb3N0IiArCisgICAgICAgICAgICAi
IHByb3h5IGNhY2hpbmcgc2VydmVyczoiLAorICAgICAgICAgICAgdGhpcy5xdWVzdGlvbk1hcmtD
aGVjaywgcmVzb3VyY2VzLCB0aGlzLldhcm5pbmdDaGVjaywgcmVzdWx0KTsKKyAgICAgICAgdGhp
cy5leGVjQ2hlY2soCisgICAgICAgICAgICAiQ29uc2lkZXIgYWRkaW5nIGEgXCJDYWNoZS1Db250
cm9sOiBwdWJsaWNcIiBoZWFkZXIgdG8gdGhlIiArCisgICAgICAgICAgICAiIGZvbGxvd2luZyBy
ZXNvdXJjZXM6IiwKKyAgICAgICAgICAgIHRoaXMucHVibGljQ2FjaGluZ0NoZWNrLCByZXNvdXJj
ZXMsIHRoaXMuSW5mb0NoZWNrLCByZXN1bHQpOworICAgICAgICB0aGlzLmV4ZWNDaGVjaygKKyAg
ICAgICAgICAgICJUaGUgZm9sbG93aW5nIHB1YmxpY2x5IGNhY2hlYWJsZSByZXNvdXJjZXMgY29u
dGFpbiIgKworICAgICAgICAgICAgIiBhIFNldC1Db29raWUgaGVhZGVyLiBUaGlzIHNlY3VyaXR5
IHZ1bG5lcmFiaWxpdHkiICsKKyAgICAgICAgICAgICIgY2FuIGNhdXNlIGNvb2tpZXMgdG8gYmUg
c2hhcmVkIGJ5IG11bHRpcGxlIHVzZXJzLiIsCisgICAgICAgICAgICB0aGlzLnNldENvb2tpZUNh
Y2hlYWJsZUNoZWNrLCByZXNvdXJjZXMsIHRoaXMuRmFpbENoZWNrLCByZXN1bHQpOworICAgIH0s
CisKKyAgICBxdWVzdGlvbk1hcmtDaGVjazogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAgeworICAg
ICAgICByZXR1cm4gcmVzb3VyY2UudXJsLmluZGV4T2YoIj8iKSA+PSAwICYmICF0aGlzLmhhc1Jl
c3BvbnNlSGVhZGVyKHJlc291cmNlLCAiU2V0LUNvb2tpZSIpICYmIHRoaXMuaXNQdWJsaWNseUNh
Y2hlYWJsZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIHB1YmxpY0NhY2hpbmdDaGVjazogZnVu
Y3Rpb24ocmVzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5pc0NhY2hlYWJsZVJl
c291cmNlKHJlc291cmNlKSAmJgorICAgICAgICAgICAgIXRoaXMuaXNDb21wcmVzc2libGUocmVz
b3VyY2UpICYmCisgICAgICAgICAgICAhdGhpcy5yZXNwb25zZUhlYWRlck1hdGNoKHJlc291cmNl
LCAiQ2FjaGUtQ29udHJvbCIsICJwdWJsaWMiKSAmJgorICAgICAgICAgICAgIXRoaXMuaGFzUmVz
cG9uc2VIZWFkZXIocmVzb3VyY2UsICJTZXQtQ29va2llIik7CisgICAgfSwKKworICAgIHNldENv
b2tpZUNhY2hlYWJsZUNoZWNrOiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLmhhc1Jlc3BvbnNlSGVhZGVyKHJlc291cmNlLCAiU2V0LUNvb2tpZSIpICYmIHRo
aXMuaXNQdWJsaWNseUNhY2hlYWJsZShyZXNvdXJjZSk7CisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5Qcm94eUNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlOworCisK
Ky8vIEltYWdlRGltZW5zaW9ucworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNp
b25zUnVsZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnNPYmplY3QpCit7CisgICAgV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZS5jYWxsKHRoaXMsICJwYWdlLWltYWdlZGltcyIsICJTcGVjaWZ5IGltYWdlIGRp
bWVuc2lvbnMiLCBwYXJhbWV0ZXJzT2JqZWN0KTsKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUgPSB7CisgICAgZG9SdW46IGZ1bmN0aW9u
KHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIEV2
YWxDYWxsYmFjayhldmFsUmVzdWx0LCBpc0V4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNFeGNlcHRpb24pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIWV2YWxSZXN1bHQgfHwgIWV2YWxS
ZXN1bHQudG90YWxJbWFnZXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICByZXN1bHQuc2NvcmUgPSAxMDA7CisgICAgICAgICAgICAgICAgdmFyIHRvcE1lc3Nh
Z2UgPSByZXN1bHQuYXBwZW5kQ2hpbGQoCisgICAgICAgICAgICAgICAgICAgICJBIHdpZHRoIGFu
ZCBoZWlnaHQgc2hvdWxkIGJlIHNwZWNpZmllZCBmb3IgYWxsIGltYWdlcyBpbiBvcmRlciB0byAi
ICsKKyAgICAgICAgICAgICAgICAgICAgInNwZWVkIHVwIHBhZ2UgZGlzcGxheS4gVGhlIGZvbGxv
d2luZyBpbWFnZShzKSBhcmUgbWlzc2luZyBhIHdpZHRoIGFuZC9vciBoZWlnaHQ6Iik7CisgICAg
ICAgICAgICAgICAgdmFyIG1hcCA9IGV2YWxSZXN1bHQubWFwOworICAgICAgICAgICAgICAgIHZh
ciBvdXRwdXRSZXNvdXJjZXMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciB1cmwgaW4g
bWFwKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLmxpbmtpZnlSZXNvdXJjZSh1cmwpOworICAgICAgICAgICAgICAgICAgICBpZiAobWFw
W3VybF0gPiAxKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIiAoIiArIG1hcFt1
cmxdICsgIiB1c2VzKSI7CisgICAgICAgICAgICAgICAgICAgIG91dHB1dFJlc291cmNlcy5wdXNo
KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNjb3JlIC09IHRoaXMuZ2V0VmFs
dWUoIlNjb3JlUGVySW1hZ2VVc2UiKSAqIG1hcFt1cmxdOworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudHlwZSA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQuVHlwZS5IaW50OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0b3BNZXNzYWdlLmFwcGVuZENoaWxkKFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLmFycmF5QXNVTChvdXRwdXRSZXNvdXJjZXMpKTsKKyAgICAg
ICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciByb3V0aW5lID0gZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICB2YXIgaW1hZ2VzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoImltZyIpOworICAgICAgICAgICAgY29uc3Qgd2lkdGhSZWdFeHAgPSAvd2lkdGhbXjo7XSo6
L2dpbTsKKyAgICAgICAgICAgIGNvbnN0IGhlaWdodFJlZ0V4cCA9IC9oZWlnaHRbXjo7XSo6L2dp
bTsKKworICAgICAgICAgICAgZnVuY3Rpb24gaGFzRGltZW5zaW9uKGVsZW1lbnQsIGNzc1RleHQs
IHJ1bGVzLCByZWdleHAsIGF0dHJpYnV0ZU5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZWxl
bWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShhdHRyaWJ1dGVOYW1lKSAhPSBudWxsIHx8Cisg
ICAgICAgICAgICAgICAgICAgIChjc3NUZXh0ICYmIGNzc1RleHQubWF0Y2gocmVnZXhwKSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFy
dWxlcykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHJ1bGVzLml0ZW0oaSkuc3R5bGUuY3NzVGV4dC5tYXRjaChyZWdleHApKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZnVuY3Rpb24gaGFzV2lkdGgoZWxlbWVudCwgY3NzVGV4dCwgcnVsZXMpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaGFzRGltZW5zaW9uKGVsZW1lbnQsIGNzc1RleHQsIHJ1bGVzLCB3aWR0aFJl
Z0V4cCwgIndpZHRoIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGhh
c0hlaWdodChlbGVtZW50LCBjc3NUZXh0LCBydWxlcykgeworICAgICAgICAgICAgICAgIHJldHVy
biBoYXNEaW1lbnNpb24oZWxlbWVudCwgY3NzVGV4dCwgcnVsZXMsIGhlaWdodFJlZ0V4cCwgImhl
aWdodCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgdXJsVG9Ob0RpbWVuc2lv
bkNvdW50ID0ge307CisgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGltYWdlID0gaW1hZ2VzW2ldOworICAgICAgICAgICAgICAgIGlmICghaW1hZ2Uuc3Jj
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2YXIgcG9z
aXRpb24gPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGltYWdlKS5nZXRQ
cm9wZXJ0eVZhbHVlKCJwb3NpdGlvbiIpOworICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9
PT0gImFic29sdXRlIikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgdmFyIGNzc1RleHQgPSAoaW1hZ2Uuc3R5bGUgJiYgaW1hZ2Uuc3R5bGUuY3NzVGV4dCkg
PyBpbWFnZS5zdHlsZS5jc3NUZXh0IDogIiI7CisgICAgICAgICAgICAgICAgdmFyIHJ1bGVzID0g
ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0TWF0Y2hlZENTU1J1bGVzKGltYWdlLCAiIiwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgaWYgKCFoYXNXaWR0aChpbWFnZSwgY3NzVGV4dCwgcnVsZXMpIHx8
ICFoYXNIZWlnaHQoaW1hZ2UsIGNzc1RleHQsIHJ1bGVzKSkgeworICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGlmICh1cmxUb05vRGltZW5zaW9u
Q291bnQuaGFzT3duUHJvcGVydHkoaW1hZ2Uuc3JjKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICsrdXJsVG9Ob0RpbWVuc2lvbkNvdW50W2ltYWdlLnNyY107CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHVybFRvTm9EaW1lbnNpb25Db3VudFtpbWFn
ZS5zcmNdID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gZm91bmQgPyB7dG90YWxJbWFnZXM6IGltYWdlcy5sZW5ndGgsIG1hcDogdXJsVG9O
b0RpbWVuc2lvbkNvdW50fSA6IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFyZ2V0V2luZG93KHJvdXRpbmUsIEV2YWxDYWxsYmFj
ay5iaW5kKHRoaXMpKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkltYWdl
RGltZW5zaW9uc1J1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGUucHJvdG90eXBlOworCisKKy8vIENzc0luSGVhZAorV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
Q3NzSW5IZWFkUnVsZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnNPYmplY3QpCit7CisgICAgV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZS5jYWxsKHRoaXMsICJwYWdlLWNzc2luaGVhZCIsICJQdXQgQ1NTIGlu
IHRoZSBkb2N1bWVudCBoZWFkIiwgcGFyYW1ldGVyc09iamVjdCk7Cit9CisKK1dlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLkNzc0luSGVhZFJ1bGUucHJvdG90eXBlID0geworICAgIGRvUnVuOiBmdW5j
dGlvbihyZXNvdXJjZXMsIHJlc3VsdCwgY2FsbGJhY2spCisgICAgeworICAgICAgICBmdW5jdGlv
biBFdmFsQ2FsbGJhY2soZXZhbFJlc3VsdCwgaXNFeGNlcHRpb24pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKGlzRXhjZXB0aW9uKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFldmFsUmVzdWx0KQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmVzdWx0LnNjb3JlID0g
MTAwOworICAgICAgICAgICAgICAgIHZhciBvdXRwdXRNZXNzYWdlcyA9IFtdOworICAgICAgICAg
ICAgICAgIGZvciAodmFyIHVybCBpbiBldmFsUmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciB1cmxWaW9sYXRpb25zID0gZXZhbFJlc3VsdFt1cmxdOworICAgICAgICAgICAgICAgICAg
ICB2YXIgdG9wTWVzc2FnZSA9IHJlc3VsdC5hcHBlbmRDaGlsZCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZy5zcHJpbnRmKCJDU1MgaW4gdGhlICVzIGRvY3VtZW50IGJvZHkgYWR2ZXJz
ZWx5IGltcGFjdHMgcmVuZGVyaW5nIHBlcmZvcm1hbmNlLiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5saW5raWZ5UmVzb3VyY2UodXJsKSkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAodXJsVmlvbGF0aW9uc1swXSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0TWVzc2FnZXMucHVzaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcuc3ByaW50ZigiJXMgc3R5bGUgYmxvY2socykgaW4gdGhlIGJvZHkgc2hvdWxkIGJl
IG1vdmVkIHRvIHRoZSBkb2N1bWVudCBoZWFkLiIsIHVybFZpb2xhdGlvbnNbMF0pKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zY29yZSAtPSB0aGlzLmdldFZhbHVlKCJJbmxpbmVV
UkxTY29yZSIpICogdXJsVmlvbGF0aW9uc1swXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVybFZpb2xhdGlvbnNbMV0ubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dE1lc3NhZ2VzLnB1c2go
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnNwcmludGYoIkxpbmsgbm9kZSAl
cyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIGRvY3VtZW50IGhlYWQiLCBXZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5saW5raWZ5UmVzb3VyY2UodXJsVmlvbGF0aW9uc1sxXSkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2NvcmUgLT0gdGhpcy5nZXRW
YWx1ZSgiSW5saW5lU3R5bGVzaGVldFNjb3JlIikgKiB1cmxWaW9sYXRpb25zWzFdOworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQu
VHlwZS5IaW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0b3BNZXNzYWdl
LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmFycmF5QXNVTChvdXRwdXRNZXNz
YWdlcykpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBjYWxsYmFj
ayhyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIHJvdXRp
bmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uIGFsbFZpZXdzKCkgeworICAg
ICAgICAgICAgICAgIHZhciB2aWV3cyA9IFtkb2N1bWVudC5kZWZhdWx0Vmlld107CisgICAgICAg
ICAgICAgICAgdmFyIGN1clZpZXcgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChjdXJWaWV3
IDwgdmlld3MubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB2aWV3ID0gdmlld3Nb
Y3VyVmlld107CisgICAgICAgICAgICAgICAgICAgIHZhciBmcmFtZXMgPSB2aWV3LmZyYW1lczsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZXMubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZXNbaV0gIT09IHZpZXcpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3MucHVzaChmcmFtZXNbaV0pOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICsrY3VyVmlldzsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZpZXdzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB2YXIgdmlld3MgPSBhbGxWaWV3cygpOworICAgICAgICAgICAgdmFyIHVy
bFRvVmlvbGF0aW9uc0FycmF5ID0ge307CisgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlld3MubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgICAgdmFyIHZpZXcgPSB2aWV3c1tpXTsKKyAgICAgICAgICAgICAgaWYgKCF2aWV3
LmRvY3VtZW50KQorICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAg
dmFyIGlubGluZVN0eWxlcyA9IHZpZXcuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiYm9keSBz
dHlsZSIpOworICAgICAgICAgICAgICB2YXIgaW5saW5lU3R5bGVzaGVldHMgPSB2aWV3LmRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoCisgICAgICAgICAgICAgICAgICAiYm9keSBsaW5rW3JlbH49
J3N0eWxlc2hlZXQnXVtocmVmXSIpOworICAgICAgICAgICAgICBpZiAoIWlubGluZVN0eWxlcy5s
ZW5ndGggJiYgIWlubGluZVN0eWxlc2hlZXRzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgdmFy
IGlubGluZVN0eWxlc2hlZXRIcmVmcyA9IFtdOworICAgICAgICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IGlubGluZVN0eWxlc2hlZXRzLmxlbmd0aDsgKytqKQorICAgICAgICAgICAgICAgICAg
aW5saW5lU3R5bGVzaGVldEhyZWZzLnB1c2goaW5saW5lU3R5bGVzaGVldHNbal0uaHJlZik7CisK
KyAgICAgICAgICAgICAgdXJsVG9WaW9sYXRpb25zQXJyYXlbdmlldy5sb2NhdGlvbi5ocmVmXSA9
CisgICAgICAgICAgICAgICAgICBbaW5saW5lU3R5bGVzLmxlbmd0aCwgaW5saW5lU3R5bGVzaGVl
dEhyZWZzXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmb3VuZCA/IHVybFRv
VmlvbGF0aW9uc0FycmF5IDogbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91dGluZSwgRXZhbENhbGxiYWNr
KTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNzc0luSGVhZFJ1bGUucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUucHJvdG90eXBlOworCisv
LyBTdHlsZXNTY3JpcHRzT3JkZXIKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlN0eWxlc1Njcmlw
dHNPcmRlclJ1bGUgPSBmdW5jdGlvbihwYXJhbWV0ZXJzT2JqZWN0KQoreworICAgIFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGUuY2FsbCh0aGlzLCAicGFnZS1zdHlsZXNjcmlwdG9yZGVyIiwgIk9wdGlt
aXplIHRoZSBvcmRlciBvZiBzdHlsZXMgYW5kIHNjcmlwdHMiLCBwYXJhbWV0ZXJzT2JqZWN0KTsK
K30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09yZGVyUnVsZS5wcm90
b3R5cGUgPSB7CisgICAgZG9SdW46IGZ1bmN0aW9uKHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFj
aykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIEV2YWxDYWxsYmFjayhldmFsUmVzdWx0LCBpc0V4
Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNFeGNlcHRpb24pCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICBpZiAoIWV2YWxSZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgICAgIHJlc3VsdC5zY29yZSA9IDEwMDsKKyAgICAgICAgICAgICAgICB2YXIgbGF0
ZUNzc1VybHMgPSBldmFsUmVzdWx0WydsYXRlJ107CisgICAgICAgICAgICAgICAgaWYgKGxhdGVD
c3NVcmxzKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBsYXRlTWVzc2FnZSA9IHJlc3VsdC5h
cHBlbmRDaGlsZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgZm9sbG93aW5nIGV4dGVy
bmFsIENTUyBmaWxlcyB3ZXJlIGluY2x1ZGVkIGFmdGVyICcgKworICAgICAgICAgICAgICAgICAg
ICAgICAgJ2FuIGV4dGVybmFsIEphdmFTY3JpcHQgZmlsZSBpbiB0aGUgZG9jdW1lbnQgaGVhZC4g
VG8gJyArCisgICAgICAgICAgICAgICAgICAgICAgICAnZW5zdXJlIENTUyBmaWxlcyBhcmUgZG93
bmxvYWRlZCBpbiBwYXJhbGxlbCwgYWx3YXlzICcgKworICAgICAgICAgICAgICAgICAgICAgICAg
J2luY2x1ZGUgZXh0ZXJuYWwgQ1NTIGJlZm9yZSBleHRlcm5hbCBKYXZhU2NyaXB0LicpOworICAg
ICAgICAgICAgICAgICAgICBsYXRlTWVzc2FnZS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5hcnJheUFzVUwobGF0ZUNzc1VybHMsIHRydWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnNjb3JlIC09IHRoaXMuZ2V0VmFsdWUoIklubGluZUJldHdlZW5SZXNvdXJjZXNT
Y29yZSIpICogbGF0ZUNzc1VybHMubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dHlwZSA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQuVHlwZS5WaW9sYXRpb247CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChldmFsUmVzdWx0Wydjc3NCZWZvcmVJ
bmxpbmVDb3VudCddKSB7CisgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBldmFsUmVzdWx0
Wydjc3NCZWZvcmVJbmxpbmVDb3VudCddOworICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZENoaWxkKGNvdW50ICsgJyBpbmxpbmUgc2NyaXB0IGJsb2NrJyArCisgICAgICAgICAgICAgICAg
ICAgICAgKGNvdW50ID4gMSA/ICdzIHdlcmUnIDogJyB3YXMnKSArICcgZm91bmQgaW4gdGhlIGhl
YWQgYmV0d2VlbiBhbiAnICsKKyAgICAgICAgICAgICAgICAgICAgICAnZXh0ZXJuYWwgQ1NTIGZp
bGUgYW5kIGFub3RoZXIgcmVzb3VyY2UuIFRvIGFsbG93IHBhcmFsbGVsICcgKworICAgICAgICAg
ICAgICAgICAgICAgICdkb3dubG9hZGluZywgbW92ZSB0aGUgaW5saW5lIHNjcmlwdCBiZWZvcmUg
dGhlIGV4dGVybmFsIENTUyAnICsKKyAgICAgICAgICAgICAgICAgICAgICAnZmlsZSwgb3IgYWZ0
ZXIgdGhlIG5leHQgcmVzb3VyY2UuJyk7CisgICAgICAgICAgICAgICAgICByZXN1bHQuc2NvcmUg
LT0gdGhpcy5nZXRWYWx1ZSgiQ1NTQWZ0ZXJKU1VSTFNjb3JlIikgKiBjb3VudDsKKyAgICAgICAg
ICAgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5UeXBl
LlZpb2xhdGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGZpbmFsbHkgewor
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB2YXIgcm91dGluZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdmFy
IGxhdGVTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKAorICAgICAgICAgICAgICAg
ICJoZWFkIHNjcmlwdFtzcmNdIH4gbGlua1tyZWx+PSdzdHlsZXNoZWV0J11baHJlZl0iKTsKKyAg
ICAgICAgICAgIHZhciBzdHlsZXNCZWZvcmVJbmxpbmVTY3JpcHQgPSBkb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKAorICAgICAgICAgICAgICAgICJoZWFkIGxpbmtbcmVsfj0nc3R5bGVzaGVldCdd
W2hyZWZdIH4gc2NyaXB0Om5vdChbc3JjXSkiKTsKKworICAgICAgICAgICAgdmFyIHJlc3VsdE9i
amVjdDsKKyAgICAgICAgICAgIGlmICghbGF0ZVN0eWxlcy5sZW5ndGggJiYgIXN0eWxlc0JlZm9y
ZUlubGluZVNjcmlwdC5sZW5ndGgpCisgICAgICAgICAgICAgICAgcmVzdWx0T2JqZWN0ID0gbnVs
bDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdE9iamVjdCA9IHt9
OworICAgICAgICAgICAgICAgIGlmIChsYXRlU3R5bGVzLmxlbmd0aCkgeworICAgICAgICAgICAg
ICAgICAgbGF0ZVN0eWxlVXJscyA9IFtdOworICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBsYXRlU3R5bGVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgICAgICAgIGxh
dGVTdHlsZVVybHMucHVzaChsYXRlU3R5bGVzW2ldLmhyZWYpOworICAgICAgICAgICAgICAgICAg
cmVzdWx0T2JqZWN0WyJsYXRlIl0gPSBsYXRlU3R5bGVVcmxzOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXN1bHRPYmplY3RbImNzc0JlZm9yZUlubGluZUNvdW50Il0gPSBz
dHlsZXNCZWZvcmVJbmxpbmVTY3JpcHQubGVuZ3RoOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5kb3cocm91dGluZSwgRXZhbENhbGxiYWNrLmJpbmQo
dGhpcykpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0
c09yZGVyUnVsZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5w
cm90b3R5cGU7CisKKworLy8gQ29va2llUnVsZUJhc2UKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVz
LkNvb2tpZVJ1bGVCYXNlID0gZnVuY3Rpb24oaWQsIG5hbWUsIHBhcmFtZXRlcnNPYmplY3QpCit7
CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5jYWxsKHRoaXMsIGlkLCBuYW1lLCBwYXJhbWV0
ZXJzT2JqZWN0KTsKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llUnVsZUJhc2Uu
cHJvdG90eXBlID0geworICAgIGRvUnVuOiBmdW5jdGlvbihyZXNvdXJjZXMsIHJlc3VsdCwgY2Fs
bGJhY2spCisgICAgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9u
IHJlc3VsdENhbGxiYWNrKHJlY2VpdmVkQ29va2llcywgaXNBZHZhbmNlZCkgeworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NDb29raWVzKGlzQWR2YW5jZWQg
PyByZWNlaXZlZENvb2tpZXMgOiBbXSwgcmVzb3VyY2VzLCByZXN1bHQpOworICAgICAgICAgICAg
fSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIFdlYkluc3BlY3Rvci5Db29raWVzLmdldENvb2tpZXNB
c3luYyhyZXN1bHRDYWxsYmFjayk7CisgICAgfSwKKworICAgIG1hcFJlc291cmNlQ29va2llczog
ZnVuY3Rpb24ocmVzb3VyY2VzQnlEb21haW4sIGFsbENvb2tpZXMsIGNhbGxiYWNrKQorICAgIHsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxDb29raWVzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciByZXNvdXJjZURvbWFpbiBpbiByZXNvdXJjZXNCeURvbWFpbikg
eworICAgICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuQ29va2llcy5jb29raWVEb21haW5N
YXRjaGVzUmVzb3VyY2VEb21haW4oYWxsQ29va2llc1tpXS5kb21haW4sIHJlc291cmNlRG9tYWlu
KSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0ZvclJlc291cmNlQ29va2llUGFp
cnMocmVzb3VyY2VzQnlEb21haW5bcmVzb3VyY2VEb21haW5dLCBhbGxDb29raWVzW2ldLCBjYWxs
YmFjayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgY2FsbGJhY2tG
b3JSZXNvdXJjZUNvb2tpZVBhaXJzOiBmdW5jdGlvbihyZXNvdXJjZXMsIGNvb2tpZSwgY2FsbGJh
Y2spCisgICAgeworICAgICAgICBpZiAoIXJlc291cmNlcykKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNvdXJjZXMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuQ29va2llcy5jb29raWVNYXRjaGVzUmVzb3VyY2VV
UkwoY29va2llLCByZXNvdXJjZXNbaV0udXJsKSkKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhy
ZXNvdXJjZXNbaV0sIGNvb2tpZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLkNvb2tpZVJ1bGVCYXNlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlLnByb3RvdHlwZTsKKworCisvLyBDb29raWVTaXplCitXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5Db29raWVTaXplUnVsZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnNPYmplY3Qp
Cit7CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llUnVsZUJhc2UuY2FsbCh0aGlz
LCAiaHR0cC1jb29raWVzaXplIiwgIk1pbmltaXplIGNvb2tpZSBzaXplIiwgcGFyYW1ldGVyc09i
amVjdCk7Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tpZVNpemVSdWxlLnByb3Rv
dHlwZSA9IHsKKyAgICBhdmVyYWdlOiBmdW5jdGlvbihjb29raWVBcnJheSkKKyAgICB7CisgICAg
ICAgIHZhciB0b3RhbCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29va2llQXJy
YXkubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0b3RhbCArPSBjb29raWVBcnJheVtpXS5zaXpl
OworICAgICAgICByZXR1cm4gY29va2llQXJyYXkubGVuZ3RoID8gTWF0aC5yb3VuZCh0b3RhbCAv
IGNvb2tpZUFycmF5Lmxlbmd0aCkgOiAwOworICAgIH0sCisKKyAgICBtYXg6IGZ1bmN0aW9uKGNv
b2tpZUFycmF5KQorICAgIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY29va2llQXJyYXkubGVuZ3RoOyArK2kpCisgICAgICAgICAgICByZXN1
bHQgPSBNYXRoLm1heChjb29raWVBcnJheVtpXS5zaXplLCByZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBwcm9jZXNzQ29va2llczogZnVuY3Rpb24oYWxsQ29v
a2llcywgcmVzb3VyY2VzLCByZXN1bHQpCisgICAgeworICAgICAgICBmdW5jdGlvbiBtYXhTaXpl
U29ydGVyKGEsIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiLm1heENvb2tpZVNp
emUgLSBhLm1heENvb2tpZVNpemU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBhdmdT
aXplU29ydGVyKGEsIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiLmF2Z0Nvb2tp
ZVNpemUgLSBhLmF2Z0Nvb2tpZVNpemU7CisgICAgICAgIH0KKworICAgICAgICB2YXIgY29va2ll
c1BlclJlc291cmNlRG9tYWluID0ge307CisKKyAgICAgICAgZnVuY3Rpb24gY29sbGVjdG9yQ2Fs
bGJhY2socmVzb3VyY2UsIGNvb2tpZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGNvb2tp
ZXMgPSBjb29raWVzUGVyUmVzb3VyY2VEb21haW5bcmVzb3VyY2UuZG9tYWluXTsKKyAgICAgICAg
ICAgIGlmICghY29va2llcykgeworICAgICAgICAgICAgICAgIGNvb2tpZXMgPSBbXTsKKyAgICAg
ICAgICAgICAgICBjb29raWVzUGVyUmVzb3VyY2VEb21haW5bcmVzb3VyY2UuZG9tYWluXSA9IGNv
b2tpZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb29raWVzLnB1c2goY29va2llKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghYWxsQ29va2llcy5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgdmFyIHNvcnRlZENvb2tpZVNpemVzID0gW107CisKKyAgICAg
ICAgdmFyIGRvbWFpblRvUmVzb3VyY2VzTWFwID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZ2V0
RG9tYWluVG9SZXNvdXJjZXNNYXAocmVzb3VyY2VzLAorICAgICAgICAgICAgICAgIG51bGwsCisg
ICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlVSTFJlZ0V4cCwKKyAgICAgICAgICAgICAgICB0
cnVlKTsKKyAgICAgICAgdmFyIG1hdGNoaW5nUmVzb3VyY2VEYXRhID0ge307CisgICAgICAgIHRo
aXMubWFwUmVzb3VyY2VDb29raWVzKGRvbWFpblRvUmVzb3VyY2VzTWFwLCBhbGxDb29raWVzLCBj
b2xsZWN0b3JDYWxsYmFjay5iaW5kKHRoaXMpKTsKKworICAgICAgICByZXN1bHQuc2NvcmUgPSAx
MDA7CisgICAgICAgIGZvciAodmFyIHJlc291cmNlRG9tYWluIGluIGNvb2tpZXNQZXJSZXNvdXJj
ZURvbWFpbikgeworICAgICAgICAgICAgdmFyIGNvb2tpZXMgPSBjb29raWVzUGVyUmVzb3VyY2VE
b21haW5bcmVzb3VyY2VEb21haW5dOworICAgICAgICAgICAgc29ydGVkQ29va2llU2l6ZXMucHVz
aCh7CisgICAgICAgICAgICAgICAgZG9tYWluOiByZXNvdXJjZURvbWFpbiwKKyAgICAgICAgICAg
ICAgICBhdmdDb29raWVTaXplOiB0aGlzLmF2ZXJhZ2UoY29va2llcyksCisgICAgICAgICAgICAg
ICAgbWF4Q29va2llU2l6ZTogdGhpcy5tYXgoY29va2llcykKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgICAgIHZhciBhdmdBbGxDb29raWVzU2l6ZSA9IHRoaXMuYXZlcmFnZShhbGxD
b29raWVzKTsKKworICAgICAgICB2YXIgaHVnZUNvb2tpZURvbWFpbnMgPSBbXTsKKyAgICAgICAg
c29ydGVkQ29va2llU2l6ZXMuc29ydChtYXhTaXplU29ydGVyKTsKKworICAgICAgICB2YXIgbWF4
Qnl0ZXNUaHJlc2hvbGQgPSB0aGlzLmdldFZhbHVlKCJNYXhCeXRlc1RocmVzaG9sZCIpOworICAg
ICAgICB2YXIgbWluQnl0ZXNUaHJlc2hvbGQgPSB0aGlzLmdldFZhbHVlKCJNaW5CeXRlc1RocmVz
aG9sZCIpOworCisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3J0ZWRDb29raWVTaXpl
cy5sZW5ndGg7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgdmFyIG1heENvb2tpZVNpemUg
PSBzb3J0ZWRDb29raWVTaXplc1tpXS5tYXhDb29raWVTaXplOworICAgICAgICAgICAgaWYgKG1h
eENvb2tpZVNpemUgPiBtYXhCeXRlc1RocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBodWdlQ29v
a2llRG9tYWlucy5wdXNoKHNvcnRlZENvb2tpZVNpemVzW2ldLmRvbWFpbiArICI6ICIgKyBOdW1i
ZXIuYnl0ZXNUb1N0cmluZyhtYXhDb29raWVTaXplKSk7CisgICAgICAgIH0KKworICAgICAgICB2
YXIgYmlnQXZnQ29va2llRG9tYWlucyA9IFtdOworICAgICAgICBzb3J0ZWRDb29raWVTaXplcy5z
b3J0KGF2Z1NpemVTb3J0ZXIpOworICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc29ydGVk
Q29va2llU2l6ZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBkb21h
aW4gPSBzb3J0ZWRDb29raWVTaXplc1tpXS5kb21haW47CisgICAgICAgICAgICB2YXIgYXZnQ29v
a2llU2l6ZSA9IHNvcnRlZENvb2tpZVNpemVzW2ldLmF2Z0Nvb2tpZVNpemU7CisgICAgICAgICAg
ICBpZiAoYXZnQ29va2llU2l6ZSA+IG1pbkJ5dGVzVGhyZXNob2xkICYmIGF2Z0Nvb2tpZVNpemUg
PCBtYXhCeXRlc1RocmVzaG9sZCkKKyAgICAgICAgICAgICAgICBiaWdBdmdDb29raWVEb21haW5z
LnB1c2goZG9tYWluICsgIjogIiArIE51bWJlci5ieXRlc1RvU3RyaW5nKGF2Z0Nvb2tpZVNpemUp
KTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuYXBwZW5kQ2hpbGQoIlRoZSBhdmVyYWdlIGNv
b2tpZSBzaXplIGZvciBhbGwgcmVxdWVzdHMgb24gdGhpcyBwYWdlIGlzICIgKyBOdW1iZXIuYnl0
ZXNUb1N0cmluZyhhdmdBbGxDb29raWVzU2l6ZSkpOworCisgICAgICAgIHZhciBtZXNzYWdlOwor
ICAgICAgICBpZiAoaHVnZUNvb2tpZURvbWFpbnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXN1
bHQuc2NvcmUgPSA3NTsKKyAgICAgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZVJlc3VsdC5UeXBlLlZpb2xhdGlvbjsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSByZXN1
bHQuYXBwZW5kQ2hpbGQoCisgICAgICAgICAgICAgICAgU3RyaW5nLnNwcmludGYoIlRoZSBmb2xs
b3dpbmcgZG9tYWlucyBoYXZlIGEgY29va2llIHNpemUgaW4gZXhjZXNzIG9mICVkICIgKworICAg
ICAgICAgICAgICAgICIgYnl0ZXMuIFRoaXMgaXMgaGFybWZ1bCBiZWNhdXNlIHJlcXVlc3RzIHdp
dGggY29va2llcyBsYXJnZXIgdGhhbiAxS0IiICsKKyAgICAgICAgICAgICAgICAiIHR5cGljYWxs
eSBjYW5ub3QgZml0IGludG8gYSBzaW5nbGUgbmV0d29yayBwYWNrZXQuIiwgbWF4Qnl0ZXNUaHJl
c2hvbGQpKTsKKyAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuYXJyYXlBc1VMKGh1Z2VDb29raWVEb21haW5zKSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYmlnQXZnQ29va2llRG9tYWlucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMu
c2NvcmUgLT0gTWF0aC5tYXgoMCwgYXZnQWxsQ29va2llc1NpemUgLSBtaW5CeXRlc1RocmVzaG9s
ZCkgLworICAgICAgICAgICAgICAgIChtaW5CeXRlc1RocmVzaG9sZCAtIG1pbkJ5dGVzVGhyZXNo
b2xkKSAvIHRoaXMuZ2V0VmFsdWUoIlRvdGFsUG9pbnRzIik7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdC50eXBlKQorICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZVJlc3VsdC5UeXBlLkhpbnQ7CisgICAgICAgICAgICBtZXNzYWdlID0gcmVzdWx0LmFw
cGVuZENoaWxkKAorICAgICAgICAgICAgICAgIFN0cmluZy5zcHJpbnRmKCJUaGUgZm9sbG93aW5n
IGRvbWFpbnMgaGF2ZSBhbiBhdmVyYWdlIGNvb2tpZSBzaXplIGluIGV4Y2VzcyBvZiAlZCIgKwor
ICAgICAgICAgICAgICAgICAiIGJ5dGVzLiBSZWR1Y2luZyB0aGUgc2l6ZSBvZiBjb29raWVzIiAr
CisgICAgICAgICAgICAgICAgICIgZm9yIHRoZXNlIGRvbWFpbnMgY2FuIHJlZHVjZSB0aGUgdGlt
ZSBpdCB0YWtlcyB0byBzZW5kIHJlcXVlc3RzLiIsIG1pbkJ5dGVzVGhyZXNob2xkKSk7CisgICAg
ICAgICAgICBtZXNzYWdlLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmFycmF5
QXNVTChiaWdBdmdDb29raWVEb21haW5zKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWJp
Z0F2Z0Nvb2tpZURvbWFpbnMubGVuZ3RoICYmICFodWdlQ29va2llRG9tYWlucy5sZW5ndGgpCisg
ICAgICAgICAgICByZXN1bHQuc2NvcmUgPSBXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeVJlc3Vs
dC5TY29yZU5BOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llU2l6
ZVJ1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tp
ZVJ1bGVCYXNlLnByb3RvdHlwZTsKKworCisvLyBTdGF0aWNDb29raWVsZXNzCitXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5TdGF0aWNDb29raWVsZXNzUnVsZSA9IGZ1bmN0aW9uKHBhcmFtZXRlcnNP
YmplY3QpCit7CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llUnVsZUJhc2UuY2Fs
bCh0aGlzLCAiaHR0cC1zdGF0aWNjb29raWVsZXNzIiwgIlNlcnZlIHN0YXRpYyBjb250ZW50IGZy
b20gYSBjb29raWVsZXNzIGRvbWFpbiIsIHBhcmFtZXRlcnNPYmplY3QpOworfQorCitXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlcy5TdGF0aWNDb29raWVsZXNzUnVsZS5wcm90b3R5cGUgPSB7CisgICAg
cHJvY2Vzc0Nvb2tpZXM6IGZ1bmN0aW9uKGFsbENvb2tpZXMsIHJlc291cmNlcywgcmVzdWx0KQor
ICAgIHsKKyAgICAgICAgdmFyIGRvbWFpblRvUmVzb3VyY2VzTWFwID0gV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuZ2V0RG9tYWluVG9SZXNvdXJjZXNNYXAocmVzb3VyY2VzLAorICAgICAgICAgICAg
ICAgIFtXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TdHlsZXNoZWV0LAorICAgICAgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5JbWFnZV0sCisgICAgICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLlVSTFJlZ0V4cCwKKyAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAg
dmFyIHRvdGFsU3RhdGljUmVzb3VyY2VzID0gMDsKKyAgICAgICAgdmFyIG1pblJlc291cmNlcyA9
IHRoaXMuZ2V0VmFsdWUoIk1pblJlc291cmNlcyIpOworICAgICAgICBmb3IgKHZhciBkb21haW4g
aW4gZG9tYWluVG9SZXNvdXJjZXNNYXApCisgICAgICAgICAgICB0b3RhbFN0YXRpY1Jlc291cmNl
cyArPSBkb21haW5Ub1Jlc291cmNlc01hcFtkb21haW5dLmxlbmd0aDsKKyAgICAgICAgaWYgKHRv
dGFsU3RhdGljUmVzb3VyY2VzIDwgbWluUmVzb3VyY2VzKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB2YXIgbWF0Y2hpbmdSZXNvdXJjZURhdGEgPSB7fTsKKyAgICAgICAgdGhpcy5tYXBS
ZXNvdXJjZUNvb2tpZXMoZG9tYWluVG9SZXNvdXJjZXNNYXAsIGFsbENvb2tpZXMsIHRoaXMuY29s
bGVjdG9yQ2FsbGJhY2suYmluZCh0aGlzLCBtYXRjaGluZ1Jlc291cmNlRGF0YSkpOworCisgICAg
ICAgIHZhciBiYWRVcmxzID0gW107CisgICAgICAgIHZhciBjb29raWVCeXRlcyA9IDA7CisgICAg
ICAgIGZvciAodmFyIHVybCBpbiBtYXRjaGluZ1Jlc291cmNlRGF0YSkgeworICAgICAgICAgICAg
YmFkVXJscy5wdXNoKHVybCk7CisgICAgICAgICAgICBjb29raWVCeXRlcyArPSBtYXRjaGluZ1Jl
c291cmNlRGF0YVt1cmxdCisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhZFVybHMubGVuZ3RoIDwg
bWluUmVzb3VyY2VzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHJlc3VsdC5zY29y
ZSA9IDEwMDsKKyAgICAgICAgdmFyIGJhZFBvaW50cyA9IGNvb2tpZUJ5dGVzIC8gNzU7CisgICAg
ICAgIHZhciB2aW9sYXRpb25QY3QgPSBNYXRoLm1heChiYWRVcmxzLmxlbmd0aCAvIHRvdGFsU3Rh
dGljUmVzb3VyY2VzLCAwLjYpOworICAgICAgICBiYWRQb2ludHMgKj0gdmlvbGF0aW9uUGN0Owor
ICAgICAgICByZXN1bHQuc2NvcmUgLT0gYmFkUG9pbnRzOworICAgICAgICByZXN1bHQuc2NvcmUg
PSBNYXRoLm1heChyZXN1bHQuc2NvcmUsIDApOworICAgICAgICByZXN1bHQudHlwZSA9IFdlYklu
c3BlY3Rvci5BdWRpdFJ1bGVSZXN1bHQuVHlwZS5WaW9sYXRpb247CisgICAgICAgIHJlc3VsdC5h
cHBlbmRDaGlsZChTdHJpbmcuc3ByaW50ZigiJXMgb2YgY29va2llcyB3ZXJlIHNlbnQgd2l0aCB0
aGUgZm9sbG93aW5nIHN0YXRpYyByZXNvdXJjZXMuIiwgTnVtYmVyLmJ5dGVzVG9TdHJpbmcoY29v
a2llQnl0ZXMpKSk7CisgICAgICAgIHZhciBtZXNzYWdlID0gcmVzdWx0LmFwcGVuZENoaWxkKCJT
ZXJ2ZSB0aGVzZSBzdGF0aWMgcmVzb3VyY2VzIGZyb20gYSBkb21haW4gdGhhdCBkb2VzIG5vdCBz
ZXQgY29va2llczoiKTsKKyAgICAgICAgbWVzc2FnZS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3Iu
QXVkaXRSdWxlcy5hcnJheUFzVUwoYmFkVXJscywgdHJ1ZSkpOworICAgIH0sCisKKyAgICBjb2xs
ZWN0b3JDYWxsYmFjazogZnVuY3Rpb24obWF0Y2hpbmdSZXNvdXJjZURhdGEsIHJlc291cmNlLCBj
b29raWUpCisgICAgeworICAgICAgICBtYXRjaGluZ1Jlc291cmNlRGF0YVtyZXNvdXJjZS51cmxd
ID0gKG1hdGNoaW5nUmVzb3VyY2VEYXRhW3Jlc291cmNlLnVybF0gfHwgMCkgKyBjb29raWUuc2l6
ZTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlN0YXRpY0Nvb2tpZWxlc3NS
dWxlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29raWVS
dWxlQmFzZS5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQXVkaXRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRzUGFu
ZWwuanMKaW5kZXggNjk2ZDEzMi4uYTk2ZmQzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0F1ZGl0c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9BdWRpdHNQYW5lbC5qcwpAQCAtMTA1LDcgKzEwNSw4IEBAIFdlYkluc3BlY3Rvci5BdWRp
dHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2F1ZGl0Q2F0ZWdvcmllc0J5SWQg
PSB7fTsKICAgICAgICAgZm9yICh2YXIgY2F0ZWdvcnlDdG9ySUQgaW4gV2ViSW5zcGVjdG9yLkF1
ZGl0Q2F0ZWdvcmllcykgewogICAgICAgICAgICAgdmFyIGF1ZGl0Q2F0ZWdvcnkgPSBuZXcgV2Vi
SW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllc1tjYXRlZ29yeUN0b3JJRF0oKTsKLSAgICAgICAgICAg
IHRoaXMuY2F0ZWdvcmllc0J5SWRbYXVkaXRDYXRlZ29yeS5pZF0gPSBhdWRpdENhdGVnb3J5Owor
ICAgICAgICAgICAgYXVkaXRDYXRlZ29yeS5faWQgPSBjYXRlZ29yeUN0b3JJRDsKKyAgICAgICAg
ICAgIHRoaXMuY2F0ZWdvcmllc0J5SWRbY2F0ZWdvcnlDdG9ySURdID0gYXVkaXRDYXRlZ29yeTsK
ICAgICAgICAgfQogICAgIH0sCiAKQEAgLTI3OCw5ICsyNzksOCBAQCBXZWJJbnNwZWN0b3IuQXVk
aXRzUGFuZWwucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5
cGU7CiAKIAogCi1XZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeSA9IGZ1bmN0aW9uKGlkLCBkaXNw
bGF5TmFtZSkKK1dlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5ID0gZnVuY3Rpb24oZGlzcGxheU5h
bWUpCiB7Ci0gICAgdGhpcy5faWQgPSBpZDsKICAgICB0aGlzLl9kaXNwbGF5TmFtZSA9IGRpc3Bs
YXlOYW1lOwogICAgIHRoaXMuX3J1bGVzID0gW107CiB9CkBAIC0yODgsNiArMjg4LDcgQEAgV2Vi
SW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnkgPSBmdW5jdGlvbihpZCwgZGlzcGxheU5hbWUpCiBXZWJJ
bnNwZWN0b3IuQXVkaXRDYXRlZ29yeS5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IGlkKCkKICAgICB7
CisgICAgICAgIC8vIHRoaXMuX2lkIHZhbHVlIGlzIGluamVjdGVkIGF0IGNvbnN0cnVjdGlvbiB0
aW1lLgogICAgICAgICByZXR1cm4gdGhpcy5faWQ7CiAgICAgfSwKIApAQCAtMzU0LDcgKzM1NSw2
IEBAIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUucHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0b3Iu
QXVkaXRDYXRlZ29yeVJlc3VsdCA9IGZ1bmN0aW9uKGNhdGVnb3J5KQogewotICAgIHRoaXMuY2F0
ZWdvcnlJZCA9IGNhdGVnb3J5LmlkOwogICAgIHRoaXMudGl0bGUgPSBjYXRlZ29yeS5kaXNwbGF5
TmFtZTsKICAgICB0aGlzLmVudHJpZXMgPSBbXTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmMKaW5kZXggZDZkOWE1ZC4uOGYxODViMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmMKQEAgLTIsOCArMiwxMCBAQAogPHFyZXNvdXJjZSBwcmVmaXg9Ii93
ZWJraXQvaW5zcGVjdG9yIj4KICAgICA8ZmlsZT5pbnNwZWN0b3IuaHRtbDwvZmlsZT4KICAgICA8
ZmlsZT5BYnN0cmFjdFRpbWVsaW5lUGFuZWwuanM8L2ZpbGU+CisgICAgPGZpbGU+QXVkaXRDYXRl
Z29yaWVzLmpzPC9maWxlPgogICAgIDxmaWxlPkF1ZGl0TGF1bmNoZXJWaWV3LmpzPC9maWxlPgog
ICAgIDxmaWxlPkF1ZGl0UmVzdWx0Vmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5BdWRpdFJ1bGVz
LmpzPC9maWxlPgogICAgIDxmaWxlPkF1ZGl0c1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxlPkJv
dHRvbVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qczwvZmlsZT4KICAgICA8ZmlsZT5CcmVha3BvaW50
LmpzPC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2F1ZGl0
cy5jc3MgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYXVkaXRzLmNzcwppbmRleCAzNWRi
NzZiLi5hNDE3MDRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYXVk
aXRzLmNzcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYXVkaXRzLmNzcwpAQCAt
MjYyLDcgKzI2Miw3IEBAIGJvZHkuaW5hY3RpdmUgLmF1ZGl0LWxhdW5jaGVyLXZpZXcgYnV0dG9u
LCAuYXVkaXQtbGF1bmNoZXItdmlldyBidXR0b246ZGlzYWJsZWQKICAgICBtYXJnaW46IDAgNXB4
IDVweCAwOwogfQogCi0uYXVkaXQtbGF1bmNoZXItdmlldyBpbnB1dFt0eXBlPSJyYWRpbyJdOmFj
dGl2ZSB7CisuYXVkaXQtbGF1bmNoZXItdmlldyBpbnB1dFt0eXBlPSJyYWRpbyJdOmFjdGl2ZTpu
b3QoOmRpc2FibGVkKSB7CiAgICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChs
aW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMTk0LCAxOTQsIDE5NCkpLCB0
byhyZ2IoMjM5LCAyMzksIDIzOSkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5odG1sCmluZGV4IGNlMTNjMGEuLmExZWM1OWQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTkxLDYgKzkxLDggQEAgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJBdWRpdHNQYW5lbC5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQXVkaXRS
ZXN1bHRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJBdWRpdExhdW5jaGVyVmlldy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQXVkaXRSdWxlcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iQXVkaXRDYXRlZ29yaWVzLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJSZXNvdXJjZVZp
ZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlNvdXJjZUZyYW1lLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJTb3VyY2VGcmFtZTIuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggOGI4ZTMzZS4uYzljNjg4NCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC00MjMsMTcgKzQyMyw4IEBAIFdlYklu
c3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgdmFyIHByZXZpb3VzVG9vbGJhckl0ZW0g
PSB0b29sYmFyRWxlbWVudC5jaGlsZHJlblswXTsKIAogICAgIHRoaXMucGFuZWxPcmRlciA9IFtd
OwotICAgIGZvciAodmFyIHBhbmVsTmFtZSBpbiB0aGlzLnBhbmVscykgewotICAgICAgICB2YXIg
cGFuZWwgPSB0aGlzLnBhbmVsc1twYW5lbE5hbWVdOwotICAgICAgICB2YXIgcGFuZWxUb29sYmFy
SXRlbSA9IHBhbmVsLnRvb2xiYXJJdGVtOwotICAgICAgICB0aGlzLnBhbmVsT3JkZXIucHVzaChw
YW5lbCk7Ci0gICAgICAgIHBhbmVsVG9vbGJhckl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLl90b29sYmFySXRlbUNsaWNrZWQuYmluZCh0aGlzKSk7Ci0gICAgICAgIGlmIChwcmV2
aW91c1Rvb2xiYXJJdGVtKQotICAgICAgICAgICAgdG9vbGJhckVsZW1lbnQuaW5zZXJ0QmVmb3Jl
KHBhbmVsVG9vbGJhckl0ZW0sIHByZXZpb3VzVG9vbGJhckl0ZW0ubmV4dFNpYmxpbmcpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB0b29sYmFyRWxlbWVudC5pbnNlcnRCZWZvcmUocGFuZWxU
b29sYmFySXRlbSwgdG9vbGJhckVsZW1lbnQuZmlyc3RDaGlsZCk7Ci0gICAgICAgIHByZXZpb3Vz
VG9vbGJhckl0ZW0gPSBwYW5lbFRvb2xiYXJJdGVtOwotICAgIH0KKyAgICBmb3IgKHZhciBwYW5l
bE5hbWUgaW4gdGhpcy5wYW5lbHMpCisgICAgICAgIHByZXZpb3VzVG9vbGJhckl0ZW0gPSBXZWJJ
bnNwZWN0b3IuYWRkUGFuZWxUb29sYmFySWNvbih0b29sYmFyRWxlbWVudCwgdGhpcy5wYW5lbHNb
cGFuZWxOYW1lXSwgcHJldmlvdXNUb29sYmFySXRlbSk7CiAKICAgICB0aGlzLlRpcHMgPSB7CiAg
ICAgICAgIFJlc291cmNlTm90Q29tcHJlc3NlZDoge2lkOiAwLCBtZXNzYWdlOiBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIllvdSBjb3VsZCBzYXZlIGJhbmR3aWR0aCBieSBoYXZpbmcgeW91ciB3ZWIg
c2VydmVyIGNvbXByZXNzIHRoaXMgdHJhbnNmZXIgd2l0aCBnemlwIG9yIHpsaWIuIil9CkBAIC00
ODQsNiArNDc1LDE4IEBAIFdlYkluc3BlY3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgSW5z
cGVjdG9yRnJvbnRlbmRIb3N0LmxvYWRlZCgpOwogfQogCitXZWJJbnNwZWN0b3IuYWRkUGFuZWxU
b29sYmFySWNvbiA9IGZ1bmN0aW9uKHRvb2xiYXJFbGVtZW50LCBwYW5lbCwgcHJldmlvdXNUb29s
YmFySXRlbSkKK3sKKyAgICB2YXIgcGFuZWxUb29sYmFySXRlbSA9IHBhbmVsLnRvb2xiYXJJdGVt
OworICAgIHRoaXMucGFuZWxPcmRlci5wdXNoKHBhbmVsKTsKKyAgICBwYW5lbFRvb2xiYXJJdGVt
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fdG9vbGJhckl0ZW1DbGlja2VkLmJpbmQo
dGhpcykpOworICAgIGlmIChwcmV2aW91c1Rvb2xiYXJJdGVtKQorICAgICAgICB0b29sYmFyRWxl
bWVudC5pbnNlcnRCZWZvcmUocGFuZWxUb29sYmFySXRlbSwgcHJldmlvdXNUb29sYmFySXRlbS5u
ZXh0U2libGluZyk7CisgICAgZWxzZQorICAgICAgICB0b29sYmFyRWxlbWVudC5pbnNlcnRCZWZv
cmUocGFuZWxUb29sYmFySXRlbSwgdG9vbGJhckVsZW1lbnQuZmlyc3RDaGlsZCk7CisgICAgcmV0
dXJuIHBhbmVsVG9vbGJhckl0ZW07Cit9CisKIHZhciB3aW5kb3dMb2FkZWQgPSBmdW5jdGlvbigp
CiB7CiAgICAgdmFyIGxvY2FsaXplZFN0cmluZ3NVUkwgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3Qu
bG9jYWxpemVkU3RyaW5nc1VSTCgpOwpAQCAtNjk2LDYgKzY5OSwyMyBAQCBXZWJJbnNwZWN0b3Iu
ZG9jdW1lbnRLZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgIlUrMDA0MSI6IC8vIEEga2V5CisgICAgICAg
ICAgICBpZiAoaXNNYWMpCisgICAgICAgICAgICAgICAgdmFyIHNob3VsZFNob3dBdWRpdHNQYW5l
bCA9IGV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5jdHJsS2V5ICYm
IGV2ZW50LmFsdEtleTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YXIgc2hv
dWxkU2hvd0F1ZGl0c1BhbmVsID0gZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYg
IWV2ZW50Lm1ldGFLZXkgJiYgZXZlbnQuYWx0S2V5OworCisgICAgICAgICAgICBpZiAoc2hvdWxk
U2hvd0F1ZGl0c1BhbmVsKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhbmVscy5hdWRp
dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lbHMuYXVkaXRzID0gbmV3IFdlYklu
c3BlY3Rvci5BdWRpdHNQYW5lbCgpOworICAgICAgICAgICAgICAgICAgICB2YXIgdG9vbGJhckVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidG9vbGJhciIpOworICAgICAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuYWRkUGFuZWxUb29sYmFySWNvbih0b29sYmFyRWxlbWVudCwg
dGhpcy5wYW5lbHMuYXVkaXRzLCB0aGlzLnBhbmVscy5jb25zb2xlLnRvb2xiYXJJdGVtKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwgPSB0aGlz
LnBhbmVscy5hdWRpdHM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KIH0KIAo=
</data>
<flag name="review"
          id="29844"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48421</attachid>
            <date>2010-02-09 08:48:02 -0800</date>
            <delta_ts>2010-02-09 10:35:46 -0800</delta_ts>
            <desc>[PATCH] Comments addressed</desc>
            <filename>auditcategories.patch</filename>
            <type>text/plain</type>
            <size>74597</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmQ0MzFiZS4uNzJmNGMwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTQgQEAKKzIwMTAtMDItMDkgIEFsZXhhbmRlciBQ
YXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdHdvIGJhc2ljIGNhdGVnb3JpZXMgZm9yIHRoZSBB
dWRpdHMgcGFuZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTMyOTMwCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRp
dENhdGVnb3JpZXMuanM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdv
cmllcy5QYWdlUGVyZm9ybWFuY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdv
cmllcy5QYWdlUGVyZm9ybWFuY2UucHJvdG90eXBlLmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5OZXR3b3JrVXRpbGl6YXRpb24pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5OZXR3b3JrVXRpbGl6YXRpb24ucHJvdG90eXBl
LmluaXRpYWxpemUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRMYXVuY2hl
clZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRMYXVuY2hlclZpZXcucHJvdG90
eXBlLnVwZGF0ZVJlc291cmNlVHJhY2tpbmdTdGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QXVkaXRMYXVuY2hlclZpZXcucHJvdG90eXBlLl9jcmVhdGVMYXVuY2hlclVJKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5BdWRpdExhdW5jaGVyVmlldy5wcm90b3R5cGUuc2hvdyk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1bGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLmFycmF5QXNVTCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QXVkaXRSdWxlcy5nZXREb21haW5Ub1Jlc291cmNlc01hcCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFyZ2V0V2luZG93KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLkd6aXBSdWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLkd6aXBSdWxlLnByb3RvdHlwZS5kb1J1bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5HemlwUnVsZS5wcm90b3R5cGUuX2lzQ29tcHJlc3NlZCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlcy5HemlwUnVsZS5wcm90b3R5cGUuX3Nob3VsZENvbXByZXNzKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNl
c1J1bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29tYmluZUV4dGVybmFs
UmVzb3VyY2VzUnVsZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuQ29tYmluZUpzUmVzb3VyY2VzUnVsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QXVkaXRSdWxlcy5Db21iaW5lQ3NzUmVzb3VyY2VzUnVsZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5NaW5pbWl6ZURuc0xvb2t1cHNSdWxlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLk1pbmltaXplRG5zTG9va3Vwc1J1bGUucHJvdG90eXBlLmRvUnVuKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlBhcmFsbGVsaXplRG93bmxvYWRSdWxl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlBhcmFsbGVsaXplRG93bmxvYWRS
dWxlLnByb3RvdHlwZS5kb1J1bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5V
bnVzZWRDc3NSdWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlVudXNlZENz
c1J1bGUucHJvdG90eXBlLl9nZXRVbnVzZWRTdHlsZXNoZWV0UmF0aW9NZXNzYWdlKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlVudXNlZENzc1J1bGUucHJvdG90eXBlLl9nZXRV
bnVzZWRUb3RhbFJhdGlvTWVzc2FnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxl
cy5VbnVzZWRDc3NSdWxlLnByb3RvdHlwZS5kb1J1bi5ldmFsQ2FsbGJhY2spOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZS5wcm90b3R5cGUuZG9SdW4ucm91
dGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlLnBy
b3RvdHlwZS5kb1J1bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNv
bnRyb2xSdWxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJv
bFJ1bGUucHJvdG90eXBlLkluZm9DaGVjay4xLkZhaWxDaGVjay4wLldhcm5pbmdDaGVjay4xLlNl
dmVyZUNoZWNrLjIuZG9SdW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2Fj
aGVDb250cm9sUnVsZS5wcm90b3R5cGUuaGFuZGxlTm9uQ2FjaGVhYmxlUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBl
Ll9jYWNoZWFibGVBbmROb25DYWNoZWFibGVSZXNvdXJjZXMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUuZXhlY0NoZWNrKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBl
LmZyZXNobmVzc0xpZmV0aW1lR3JlYXRlclRoYW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUucmVzcG9uc2VIZWFkZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUu
aGFzUmVzcG9uc2VIZWFkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2Fj
aGVDb250cm9sUnVsZS5wcm90b3R5cGUuaXNDb21wcmVzc2libGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUuaXNQdWJsaWNseUNh
Y2hlYWJsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xS
dWxlLnByb3RvdHlwZS5yZXNwb25zZUhlYWRlck1hdGNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLmhhc0V4cGxpY2l0RXhwaXJh
dGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxl
LnByb3RvdHlwZS5faXNFeHBsaWNpdGx5Tm9uQ2FjaGVhYmxlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLmlzQ2FjaGVhYmxlUmVz
b3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQnJvd3NlckNhY2hlQ29u
dHJvbFJ1bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQnJvd3NlckNhY2hl
Q29udHJvbFJ1bGUucHJvdG90eXBlLmhhbmRsZU5vbkNhY2hlYWJsZVJlc291cmNlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Ccm93c2VyQ2FjaGVDb250cm9sUnVsZS5wcm90
b3R5cGUucnVuQ2hlY2tzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkJyb3dz
ZXJDYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZS5fbWlzc2luZ0V4cGlyYXRpb25DaGVjayk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Ccm93c2VyQ2FjaGVDb250cm9sUnVsZS5w
cm90b3R5cGUuX3ZhcnlDaGVjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5C
cm93c2VyQ2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUuX29uZU1vbnRoRXhwaXJhdGlvbkNoZWNr
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkJyb3dzZXJDYWNoZUNvbnRyb2xS
dWxlLnByb3RvdHlwZS5fb25lWWVhckV4cGlyYXRpb25DaGVjayk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlcy5Qcm94eUNhY2hlQ29udHJvbFJ1bGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuUHJveHlDYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZS5ydW5DaGVj
a3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuUHJveHlDYWNoZUNvbnRyb2xS
dWxlLnByb3RvdHlwZS5fcXVlc3Rpb25NYXJrQ2hlY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuUHJveHlDYWNoZUNvbnRyb2xSdWxlLnByb3RvdHlwZS5fcHVibGljQ2FjaGlu
Z0NoZWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlByb3h5Q2FjaGVDb250
cm9sUnVsZS5wcm90b3R5cGUuX3NldENvb2tpZUNhY2hlYWJsZUNoZWNrKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLkltYWdlRGltZW5zaW9uc1J1bGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUuZG9SdW4p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5w
cm90b3R5cGUuZG9SdW4ucm91dGluZS5oYXNEaW1lbnNpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZS5wcm90b3R5cGUuZG9SdW4ucm91dGlu
ZS5oYXNXaWR0aCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVu
c2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1bi5yb3V0aW5lLmhhc0hlaWdodCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5JbWFnZURpbWVuc2lvbnNSdWxlLnByb3RvdHlwZS5kb1J1
bi5yb3V0aW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNzc0luSGVhZFJ1
bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ3NzSW5IZWFkUnVsZS5wcm90
b3R5cGUuZG9SdW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ3NzSW5IZWFk
UnVsZS5wcm90b3R5cGUuZG9SdW4ucm91dGluZS5hbGxWaWV3cyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlcy5Dc3NJbkhlYWRSdWxlLnByb3RvdHlwZS5kb1J1bi5yb3V0aW5lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlN0eWxlc1NjcmlwdHNPcmRlclJ1bGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09yZGVyUnVs
ZS5wcm90b3R5cGUuZG9SdW4pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5
bGVzU2NyaXB0c09yZGVyUnVsZS5wcm90b3R5cGUuZG9SdW4ucm91dGluZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29raWVSdWxlQmFzZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlcy5Db29raWVSdWxlQmFzZS5wcm90b3R5cGUuZG9SdW4ucmVzdWx0Q2Fs
bGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llUnVsZUJhc2Uu
cHJvdG90eXBlLmRvUnVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tp
ZVJ1bGVCYXNlLnByb3RvdHlwZS5tYXBSZXNvdXJjZUNvb2tpZXMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llUnVsZUJhc2UucHJvdG90eXBlLl9jYWxsYmFja0ZvclJl
c291cmNlQ29va2llUGFpcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29v
a2llU2l6ZVJ1bGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llU2l6
ZVJ1bGUucHJvdG90eXBlLl9hdmVyYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLkNvb2tpZVNpemVSdWxlLnByb3RvdHlwZS5fbWF4KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLkNvb2tpZVNpemVSdWxlLnByb3RvdHlwZS5wcm9jZXNzQ29va2llcyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29raWVTaXplUnVsZS5wcm90b3R5cGUu
cHJvY2Vzc0Nvb2tpZXMuYXZnU2l6ZVNvcnRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5TdGF0aWNDb29raWVsZXNzUnVsZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5TdGF0aWNDb29raWVsZXNzUnVsZS5wcm90b3R5cGUucHJvY2Vzc0Nvb2tpZXMpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3RhdGljQ29va2llbGVzc1J1bGUucHJv
dG90eXBlLl9jb2xsZWN0b3JDYWxsYmFjayk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9BdWRpdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRpdHNQYW5lbC5wcm90
b3R5cGUuX2NvbnN0cnVjdENhdGVnb3JpZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkF1ZGl0
c1BhbmVsLnByb3RvdHlwZS5fcmVsb2FkUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5BdWRpdHNQYW5lbC5wcm90b3R5cGUuc2hvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVk
aXRzUGFuZWwucHJvdG90eXBlLl91cGRhdGVMYXVuY2hlclZpZXdDb250cm9scyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQXVk
aXRDYXRlZ29yeS5wcm90b3R5cGUuZ2V0IGlkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5BdWRp
dENhdGVnb3J5LnByb3RvdHlwZS5nZXQgcnVsZUNvdW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5BdWRpdENhdGVnb3J5LnByb3RvdHlwZS5ydW5SdWxlcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQXVkaXRDYXRlZ29yeS5wcm90b3R5cGUuX2Vuc3VyZUluaXRpYWxpemVkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5UmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1dlYktpdC5xcmM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9hdWRp
dHMuY3NzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IubG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5hZGRQYW5lbFRvb2xiYXJJ
Y29uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kb2N1bWVudEtleURvd24pOgorCiAyMDEwLTAy
LTA5ICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGI1NDk5ZDQuLjkyZWJmNDkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNzAw
LDggKzM3MDAsMTAgQEAKIAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmh0bWwnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQWJzdHJhY3RUaW1l
bGluZVBhbmVsLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0Q2F0
ZWdvcmllcy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdExhdW5j
aGVyVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJlc3Vs
dFZpZXcuanMnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5q
cycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdHNQYW5lbC5qcycsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9Cb3R0b21VcFByb2ZpbGVEYXRhR3JpZFRy
ZWUuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcycs
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA4YmNjYTgzLi4yYjA0YzBj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQyNzAwLDYgKzQyNzAw
LDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXEF1ZGl0Q2F0ZWdvcmllcy5qcyINCisJCQkJCT4N
CisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0
b3JcZnJvbnQtZW5kXEF1ZGl0TGF1bmNoZXJWaWV3LmpzIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+
DQpAQCAtNDI3MDgsNiArNDI3MTIsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxG
aWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcQXVkaXRSdWxl
cy5qcyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXGF1ZGl0cy5jc3MiDQogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRDYXRl
Z29yaWVzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0Q2F0ZWdvcmllcy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTMxYjVmCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0Q2F0ZWdvcmllcy5qcwpA
QCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5QYWdlUGVyZm9ybWFu
Y2UgPSBmdW5jdGlvbigpIHsKKyAgICBXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeS5jYWxsKHRo
aXMsIFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3JpZXMuUGFnZVBlcmZvcm1hbmNlLkF1ZGl0Q2F0
ZWdvcnlOYW1lKTsKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5QYWdlUGVyZm9y
bWFuY2UuQXVkaXRDYXRlZ29yeU5hbWUgPSAiV2ViIFBhZ2UgUGVyZm9ybWFuY2UiOworCitXZWJJ
bnNwZWN0b3IuQXVkaXRDYXRlZ29yaWVzLlBhZ2VQZXJmb3JtYW5jZS5wcm90b3R5cGUgPSB7Cisg
ICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5hZGRSdWxlKG5l
dyBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlKCkpOworICAgICAgICB0aGlz
LmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNzc0luSGVhZFJ1bGUoe0lubGlu
ZVVSTFNjb3JlOiA2LCBJbmxpbmVTdHlsZXNoZWV0U2NvcmU6IDIxfSkpOworICAgICAgICB0aGlz
LmFkZFJ1bGUobmV3IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlN0eWxlc1NjcmlwdHNPcmRlclJ1
bGUoe0NTU0FmdGVySlNVUkxTY29yZTogMTEsIElubGluZUJldHdlZW5SZXNvdXJjZXNTY29yZTog
MjF9KSk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yaWVzLlBhZ2VQZXJm
b3JtYW5jZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnku
cHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yaWVzLk5ldHdvcmtVdGlsaXph
dGlvbiA9IGZ1bmN0aW9uKCkgeworICAgIFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5LmNhbGwo
dGhpcywgV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5OZXR3b3JrVXRpbGl6YXRpb24uQXVk
aXRDYXRlZ29yeU5hbWUpOworfQorCitXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yaWVzLk5ldHdv
cmtVdGlsaXphdGlvbi5BdWRpdENhdGVnb3J5TmFtZSA9ICJOZXR3b3JrIFV0aWxpemF0aW9uIjsK
KworV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5OZXR3b3JrVXRpbGl6YXRpb24ucHJvdG90
eXBlID0geworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMu
YWRkUnVsZShuZXcgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuR3ppcFJ1bGUoKSk7CisgICAgICAg
IHRoaXMuYWRkUnVsZShuZXcgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25z
UnVsZSh7U2NvcmVQZXJJbWFnZVVzZTogNX0pKTsKKyAgICAgICAgdGhpcy5hZGRSdWxlKG5ldyBX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29raWVTaXplUnVsZSh7TWluQnl0ZXNUaHJlc2hvbGQ6
IDQwMCwgTWF4Qnl0ZXNUaHJlc2hvbGQ6IDEwMDB9KSk7CisgICAgICAgIHRoaXMuYWRkUnVsZShu
ZXcgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3RhdGljQ29va2llbGVzc1J1bGUoe01pblJlc291
cmNlczogNX0pKTsKKyAgICAgICAgdGhpcy5hZGRSdWxlKG5ldyBXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5Db21iaW5lSnNSZXNvdXJjZXNSdWxlKHtBbGxvd2VkUGVyRG9tYWluOiAyLCBTY29yZVBl
clJlc291cmNlOiAxMX0pKTsKKyAgICAgICAgdGhpcy5hZGRSdWxlKG5ldyBXZWJJbnNwZWN0b3Iu
QXVkaXRSdWxlcy5Db21iaW5lQ3NzUmVzb3VyY2VzUnVsZSh7QWxsb3dlZFBlckRvbWFpbjogMiwg
U2NvcmVQZXJSZXNvdXJjZTogMTF9KSk7CisgICAgICAgIHRoaXMuYWRkUnVsZShuZXcgV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuTWluaW1pemVEbnNMb29rdXBzUnVsZSh7SG9zdENvdW50VGhyZXNo
b2xkOiA0LCBWaW9sYXRpb25Eb21haW5TY29yZTogNn0pKTsKKyAgICAgICAgdGhpcy5hZGRSdWxl
KG5ldyBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5QYXJhbGxlbGl6ZURvd25sb2FkUnVsZSh7T3B0
aW1hbEhvc3RuYW1lQ291bnQ6IDQsIE1pblJlcXVlc3RUaHJlc2hvbGQ6IDEwLCBNaW5CYWxhbmNl
VGhyZXNob2xkOiAwLjV9KSk7CisgICAgICAgIHRoaXMuYWRkUnVsZShuZXcgV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZXMuQnJvd3NlckNhY2hlQ29udHJvbFJ1bGUoKSk7CisgICAgICAgIHRoaXMuYWRk
UnVsZShuZXcgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuUHJveHlDYWNoZUNvbnRyb2xSdWxlKCkp
OworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcmllcy5OZXR3b3JrVXRpbGl6
YXRpb24ucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5LnBy
b3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdExh
dW5jaGVyVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdExhdW5jaGVy
Vmlldy5qcwppbmRleCA3OWZiYjkyLi5hOTYxZGJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQXVkaXRMYXVuY2hlclZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0F1ZGl0TGF1bmNoZXJWaWV3LmpzCkBAIC02MywxMSArNjMsMTEgQEAgV2Vi
SW5zcGVjdG9yLkF1ZGl0TGF1bmNoZXJWaWV3ID0gZnVuY3Rpb24oY2F0ZWdvcmllc0J5SWQsIHJ1
bm5lckNhbGxiYWNrKQogfQogCiBXZWJJbnNwZWN0b3IuQXVkaXRMYXVuY2hlclZpZXcucHJvdG90
eXBlID0gewotICAgIHVwZGF0ZVJlc291cmNlVHJhY2tpbmdTdGF0ZTogZnVuY3Rpb24oKQorICAg
IHVwZGF0ZVJlc291cmNlVHJhY2tpbmdTdGF0ZTogZnVuY3Rpb24oaXNUcmFja2luZykKICAgICB7
CiAgICAgICAgIGlmICghdGhpcy5fYXVkaXRQcmVzZW50U3RhdGVMYWJlbEVsZW1lbnQpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChJbnNwZWN0b3JCYWNrZW5kLnJlc291cmNlVHJh
Y2tpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKGlzVHJhY2tpbmcpIHsKICAgICAgICAgICAg
IHRoaXMuX2F1ZGl0UHJlc2VudFN0YXRlTGFiZWxFbGVtZW50Lm5vZGVWYWx1ZSA9IFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiQXVkaXQgUHJlc2VudCBTdGF0ZSIpOwogICAgICAgICAgICAgdGhpcy5f
YXVkaXRQcmVzZW50U3RhdGVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICB0
aGlzLl9hdWRpdFByZXNlbnRTdGF0ZUVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVTdHlsZUNs
YXNzKCJkaXNhYmxlZCIpOwpAQCAtMTk3LDcgKzE5Nyw2IEBAIFdlYkluc3BlY3Rvci5BdWRpdExh
dW5jaGVyVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3NlbGVjdEFsbENsaWNrZWQo
dGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hFbGVtZW50LmNoZWNrZWQpOwogICAgICAgICB0aGlzLnVw
ZGF0ZVJlc291cmNlVHJhY2tpbmdTdGF0ZSgpOwogICAgICAgICB0aGlzLl91cGRhdGVCdXR0b24o
KTsKLSAgICAgICAgdGhpcy5yZXNpemUoKTsKICAgICB9LAogCiAgICAgX3VwZGF0ZUJ1dHRvbjog
ZnVuY3Rpb24oKQpAQCAtMjA5LDYgKzIwOCwxMiBAQCBXZWJJbnNwZWN0b3IuQXVkaXRMYXVuY2hl
clZpZXcucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5fbGF1bmNoQnV0dG9uLnRleHRD
b250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSdW4iKTsKICAgICB9LAogCisgICAgc2hv
dzogZnVuY3Rpb24ocGFyZW50RWxlbWVudCkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5W
aWV3LnByb3RvdHlwZS5zaG93LmNhbGwodGhpcywgcGFyZW50RWxlbWVudCk7CisgICAgICAgIHRo
aXMucmVzaXplKCk7CisgICAgfSwKKwogICAgIHJlc2l6ZTogZnVuY3Rpb24oKQogICAgIHsKICAg
ICAgICAgaWYgKHRoaXMuX2NhdGVnb3JpZXNFbGVtZW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0UnVsZXMuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQXVkaXRSdWxlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
NmZiNDhmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1
ZGl0UnVsZXMuanMKQEAgLTAsMCArMSwxMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
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
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSVBB
ZGRyZXNzUmVnZXhwID0gL15cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9JC87CisK
K1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNhY2hlYWJsZVJlc3BvbnNlQ29kZXMgPQoreworICAg
IDIwMDogdHJ1ZSwKKyAgICAyMDM6IHRydWUsCisgICAgMjA2OiB0cnVlLAorICAgIDMwMDogdHJ1
ZSwKKyAgICAzMDE6IHRydWUsCisgICAgNDEwOiB0cnVlLAorCisgICAgMzA0OiB0cnVlIC8vIFVu
ZGVybHlpbmcgcmVzb3VyY2UgaXMgY2FjaGVhYmxlCit9CisKKy8qKgorICogQHBhcmFtIHtBcnJh
eX0gYXJyYXkgQXJyYXkgb2YgRWxlbWVudHMgKG91dGVySFRNTCBpcyB1c2VkKSBvciBzdHJpbmdz
IChwbGFpbiB2YWx1ZSBpcyB1c2VkIGFzIGlubmVySFRNTCkKKyAqLworV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuYXJyYXlBc1VMID0gZnVuY3Rpb24oYXJyYXksIHNob3VsZExpbmtpZnkpCit7Cisg
ICAgaWYgKCFhcnJheS5sZW5ndGgpCisgICAgICAgIHJldHVybiAiIjsKKyAgICB2YXIgdWxFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidWwiKTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBsaUVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAgICAgICBpZiAoYXJyYXlbaV0gaW5zdGFuY2VvZiBF
bGVtZW50KQorICAgICAgICAgICAgbGlFbGVtZW50LmFwcGVuZENoaWxkKGFycmF5W2ldKTsKKyAg
ICAgICAgZWxzZSBpZiAoc2hvdWxkTGlua2lmeSkKKyAgICAgICAgICAgIGxpRWxlbWVudC5hcHBl
bmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVVSTEFzTm9kZShhcnJheVtpXSkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBsaUVsZW1lbnQuaW5uZXJIVE1MID0gYXJyYXlbaV07CisgICAg
ICAgIHVsRWxlbWVudC5hcHBlbmRDaGlsZChsaUVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4g
dWxFbGVtZW50Lm91dGVySFRNTDsKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZ2V0RG9t
YWluVG9SZXNvdXJjZXNNYXAgPSBmdW5jdGlvbihyZXNvdXJjZXMsIHR5cGVzLCByZWdleHAsIG5l
ZWRGdWxsUmVzb3VyY2VzKQoreworICAgIHZhciBkb21haW5Ub1Jlc291cmNlc01hcCA9IHt9Owor
ICAgIGZvciAodmFyIGkgPSAwLCBzaXplID0gcmVzb3VyY2VzLmxlbmd0aDsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07CisgICAgICAgIGlmICh0
eXBlcyAmJiB0eXBlcy5pbmRleE9mKHJlc291cmNlLnR5cGUpID09PSAtMSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB2YXIgbWF0Y2ggPSByZXNvdXJjZS51cmwubWF0Y2gocmVnZXhw
KTsKKyAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2
YXIgZG9tYWluID0gbWF0Y2hbMl07CisgICAgICAgIHZhciBkb21haW5SZXNvdXJjZXMgPSBkb21h
aW5Ub1Jlc291cmNlc01hcFtkb21haW5dOworICAgICAgICBpZiAoZG9tYWluUmVzb3VyY2VzID09
PSB1bmRlZmluZWQpIHsKKyAgICAgICAgICBkb21haW5SZXNvdXJjZXMgPSBbXTsKKyAgICAgICAg
ICBkb21haW5Ub1Jlc291cmNlc01hcFtkb21haW5dID0gZG9tYWluUmVzb3VyY2VzOworICAgICAg
ICB9CisgICAgICAgIGRvbWFpblJlc291cmNlcy5wdXNoKG5lZWRGdWxsUmVzb3VyY2VzID8gcmVz
b3VyY2UgOiByZXNvdXJjZS51cmwpOworICAgIH0KKyAgICByZXR1cm4gZG9tYWluVG9SZXNvdXJj
ZXNNYXA7Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmV2YWx1YXRlSW5UYXJnZXRXaW5k
b3cgPSBmdW5jdGlvbihmdW5jLCBjYWxsYmFjaykKK3sKKyAgICBJbmplY3RlZFNjcmlwdEFjY2Vz
cy5nZXREZWZhdWx0KCkuZXZhbHVhdGVPblNlbGYoZnVuYy50b1N0cmluZygpLCBjYWxsYmFjayk7
Cit9CisKKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuR3ppcFJ1bGUgPSBmdW5jdGlvbigpCit7
CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5jYWxsKHRoaXMsICJuZXR3b3JrLWd6aXAiLCAi
RW5hYmxlIGd6aXAgY29tcHJlc3Npb24iKTsKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
R3ppcFJ1bGUucHJvdG90eXBlID0geworICAgIGRvUnVuOiBmdW5jdGlvbihyZXNvdXJjZXMsIHJl
c3VsdCwgY2FsbGJhY2spCisgICAgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFyIGNv
bW1vbk1lc3NhZ2UgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICB2YXIgdG90YWxTYXZpbmdzID0g
MDsKKyAgICAgICAgICAgIHZhciBjb21wcmVzc2VkU2l6ZSA9IDAKKyAgICAgICAgICAgIHZhciBj
YW5kaWRhdGVTaXplID0gMAorICAgICAgICAgICAgdmFyIG91dHB1dFJlc291cmNlcyA9IFtdOwor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc291cmNlcy5sZW5ndGg7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IHJlc291cmNl
c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkQ29tcHJlc3MocmVzb3VyY2Up
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gcmVzb3VyY2UuY29udGVudExlbmd0
aDsKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlU2l6ZSArPSBzaXplOworICAgICAgICAg
ICAgICAgICAgICBpZiAodGhpcy5faXNDb21wcmVzc2VkKHJlc291cmNlKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY29tcHJlc3NlZFNpemUgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmICghY29tbW9uTWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbk1l
c3NhZ2UgPSByZXN1bHQuYXBwZW5kQ2hpbGQoIiIpOworICAgICAgICAgICAgICAgICAgICB2YXIg
c2F2aW5ncyA9IDIgKiBzaXplIC8gMzsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxTYXZpbmdz
ICs9IHNhdmluZ3M7CisgICAgICAgICAgICAgICAgICAgIG91dHB1dFJlc291cmNlcy5wdXNoKAor
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnNwcmludGYoIkNvbXByZXNzaW5nICVzIGNv
dWxkIHNhdmUgfiVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLmxpbmtpZnlVUkwocmVzb3VyY2UudXJsKSwgTnVtYmVyLmJ5dGVzVG9TdHJpbmcoc2F2
aW5ncykpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoY29tbW9uTWVzc2FnZSkgeworICAgICAgICAgICAgICBjb21tb25NZXNzYWdlLnZhbHVlID0K
KyAgICAgICAgICAgICAgICAgIFN0cmluZy5zcHJpbnRmKCJDb21wcmVzc2luZyB0aGUgZm9sbG93
aW5nIHJlc291cmNlcyB3aXRoIGd6aXAgY291bGQgcmVkdWNlIHRoZWlyICIgKworICAgICAgICAg
ICAgICAgICAgICAgICJ0cmFuc2ZlciBzaXplIGJ5IGFib3V0IHR3byB0aGlyZHMgKH4lcyk6Iiwg
TnVtYmVyLmJ5dGVzVG9TdHJpbmcodG90YWxTYXZpbmdzKSk7CisgICAgICAgICAgICAgIGNvbW1v
bk1lc3NhZ2UuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuYXJyYXlBc1VMKG91
dHB1dFJlc291cmNlcykpOworICAgICAgICAgICAgICByZXN1bHQuc2NvcmUgPSAxMDAgKiBjb21w
cmVzc2VkU2l6ZSAvIGNhbmRpZGF0ZVNpemU7CisgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0g
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5UeXBlLlZpb2xhdGlvbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKKyAg
ICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAg
IH0KKyAgICB9LAorCisgICAgX2lzQ29tcHJlc3NlZDogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAg
eworICAgICAgICB2YXIgZW5jb2RpbmcgPSByZXNvdXJjZS5yZXNwb25zZUhlYWRlcnNbIkNvbnRl
bnQtRW5jb2RpbmciXTsKKyAgICAgICAgcmV0dXJuIGVuY29kaW5nID09PSAiZ3ppcCIgfHwgZW5j
b2RpbmcgPT09ICJkZWZsYXRlIjsKKyAgICB9LAorCisgICAgX3Nob3VsZENvbXByZXNzOiBmdW5j
dGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2UuVHlwZS5pc1RleHRUeXBlKHJlc291cmNlLnR5cGUpICYmIHJlc291cmNlLmRvbWFpbiAmJiBy
ZXNvdXJjZS5jb250ZW50TGVuZ3RoICE9PSB1bmRlZmluZWQgJiYgcmVzb3VyY2UuY29udGVudExl
bmd0aCA+IDE1MDsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkd6aXBSdWxl
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLnByb3RvdHlwZTsK
KworCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db21iaW5lRXh0ZXJuYWxSZXNvdXJjZXNSdWxl
ID0gZnVuY3Rpb24oaWQsIG5hbWUsIHR5cGUsIHJlc291cmNlVHlwZU5hbWUsIHBhcmFtZXRlcnNP
YmplY3QpCit7CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5jYWxsKHRoaXMsIGlkLCBuYW1l
LCBwYXJhbWV0ZXJzT2JqZWN0KTsKKyAgICB0aGlzLl90eXBlID0gdHlwZTsKKyAgICB0aGlzLl9y
ZXNvdXJjZVR5cGVOYW1lID0gcmVzb3VyY2VUeXBlTmFtZTsKK30KKworV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZXMuQ29tYmluZUV4dGVybmFsUmVzb3VyY2VzUnVsZS5wcm90b3R5cGUgPSB7CisgICAg
ZG9SdW46IGZ1bmN0aW9uKHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFjaykKKyAgICB7CisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICB2YXIgZG9tYWluVG9SZXNvdXJjZXNNYXAgPSBXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlcy5nZXREb21haW5Ub1Jlc291cmNlc01hcChyZXNvdXJjZXMsIFt0aGlz
Ll90eXBlXSwgV2ViSW5zcGVjdG9yLlVSTFJlZ0V4cCk7CisgICAgICAgICAgICB2YXIgcGVuYWxp
emVkUmVzb3VyY2VDb3VudCA9IDA7CisgICAgICAgICAgICAvLyBUT0RPOiByZWZhY3RvciBhY2Nv
cmRpbmcgdG8gdGhlIGNob3NlbiBpMThuIGFwcHJvYWNoCisgICAgICAgICAgICBmb3IgKHZhciBk
b21haW4gaW4gZG9tYWluVG9SZXNvdXJjZXNNYXApIHsKKyAgICAgICAgICAgICAgICB2YXIgZG9t
YWluUmVzb3VyY2VzID0gZG9tYWluVG9SZXNvdXJjZXNNYXBbZG9tYWluXTsKKyAgICAgICAgICAg
ICAgICB2YXIgZXh0cmFSZXNvdXJjZUNvdW50ID0gZG9tYWluUmVzb3VyY2VzLmxlbmd0aCAtIHRo
aXMuZ2V0VmFsdWUoIkFsbG93ZWRQZXJEb21haW4iKTsKKyAgICAgICAgICAgICAgICBpZiAoZXh0
cmFSZXNvdXJjZUNvdW50IDw9IDApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIHBlbmFsaXplZFJlc291cmNlQ291bnQgKz0gZXh0cmFSZXNvdXJjZUNvdW50
IC0gMTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kQ2hpbGQoCisgICAgICAgICAgICAg
ICAgICAgIFN0cmluZy5zcHJpbnRmKCJUaGVyZSBhcmUgJWQgJXMgZmlsZXMgc2VydmVkIGZyb20g
JXMuIENvbnNpZGVyIGNvbWJpbmluZyB0aGVtIGludG8gYXMgZmV3IGZpbGVzIGFzIHBvc3NpYmxl
LiIsCisgICAgICAgICAgICAgICAgICAgIGRvbWFpblJlc291cmNlcy5sZW5ndGgsIHRoaXMuX3Jl
c291cmNlVHlwZU5hbWUsIGRvbWFpbikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVz
dWx0LnNjb3JlID0gMTAwIC0gKHBlbmFsaXplZFJlc291cmNlQ291bnQgKiB0aGlzLmdldFZhbHVl
KCJTY29yZVBlclJlc291cmNlIikpOworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlUmVzdWx0LlR5cGUuSGludDsKKyAgICAgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAg
ICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9Cit9OworCitXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5Db21iaW5lRXh0ZXJuYWxSZXNvdXJjZXNSdWxlLnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlLnByb3RvdHlwZTsKKworCitXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5Db21iaW5lSnNSZXNvdXJjZXNSdWxlID0gZnVuY3Rpb24ocGFyYW1ldGVy
c09iamVjdCkgeworICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVFeHRlcm5hbFJl
c291cmNlc1J1bGUuY2FsbCh0aGlzLCAicGFnZS1leHRlcm5hbGpzIiwgIkNvbWJpbmUgZXh0ZXJu
YWwgSmF2YVNjcmlwdCIsIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCwgIkpTIiwg
cGFyYW1ldGVyc09iamVjdCk7Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVK
c1Jlc291cmNlc1J1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNlc1J1bGUucHJvdG90eXBlOworCisKK1dlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVDc3NSZXNvdXJjZXNSdWxlID0gZnVuY3Rpb24ocGFyYW1l
dGVyc09iamVjdCkgeworICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvbWJpbmVFeHRlcm5h
bFJlc291cmNlc1J1bGUuY2FsbCh0aGlzLCAicGFnZS1leHRlcm5hbGNzcyIsICJDb21iaW5lIGV4
dGVybmFsIENTUyIsIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlN0eWxlc2hlZXQsICJDU1Mi
LCBwYXJhbWV0ZXJzT2JqZWN0KTsKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29tYmlu
ZUNzc1Jlc291cmNlc1J1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLkNvbWJpbmVFeHRlcm5hbFJlc291cmNlc1J1bGUucHJvdG90eXBlOworCisKK1dlYklu
c3BlY3Rvci5BdWRpdFJ1bGVzLk1pbmltaXplRG5zTG9va3Vwc1J1bGUgPSBmdW5jdGlvbihwYXJh
bWV0ZXJzT2JqZWN0KSB7CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5jYWxsKHRoaXMsICJu
ZXR3b3JrLW1pbmltaXplbG9va3VwcyIsICJNaW5pbWl6ZSBETlMgbG9va3VwcyIsIHBhcmFtZXRl
cnNPYmplY3QpOworfQorCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5NaW5pbWl6ZURuc0xvb2t1
cHNSdWxlLnByb3RvdHlwZSA9IHsKKyAgICBkb1J1bjogZnVuY3Rpb24ocmVzb3VyY2VzLCByZXN1
bHQsIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciB2aW9s
YXRpb25Eb21haW5zID0gW107CisgICAgICAgICAgICB2YXIgZG9tYWluVG9SZXNvdXJjZXNNYXAg
PSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5nZXREb21haW5Ub1Jlc291cmNlc01hcChyZXNvdXJj
ZXMsIHVuZGVmaW5lZCwgV2ViSW5zcGVjdG9yLlVSTFJlZ0V4cCk7CisgICAgICAgICAgICBmb3Ig
KHZhciBkb21haW4gaW4gZG9tYWluVG9SZXNvdXJjZXNNYXApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZG9tYWluVG9SZXNvdXJjZXNNYXBbZG9tYWluXS5sZW5ndGggPiAxKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBkb21haW4ubWF0
Y2goV2ViSW5zcGVjdG9yLlVSTFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRj
aFsyXS5zZWFyY2goV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSVBBZGRyZXNzUmVnZXhwKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGFuIElQIGFkZHJlc3MKKyAgICAgICAgICAg
ICAgICB2aW9sYXRpb25Eb21haW5zLnB1c2gobWF0Y2hbMl0pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHZpb2xhdGlvbkRvbWFpbnMubGVuZ3RoIDw9IHRoaXMuZ2V0VmFsdWUoIkhv
c3RDb3VudFRocmVzaG9sZCIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHZhciBjb21tb25NZXNzYWdlID0gcmVzdWx0LmFwcGVuZENoaWxkKAorICAgICAgICAgICAgICAg
ICJUaGUgZm9sbG93aW5nIGRvbWFpbnMgb25seSBzZXJ2ZSBvbmUgcmVzb3VyY2UgZWFjaC4gSWYg
cG9zc2libGUsIGF2b2lkIHRoZSBleHRyYSBETlMgIiArCisgICAgICAgICAgICAgICAgImxvb2t1
cHMgYnkgc2VydmluZyB0aGVzZSByZXNvdXJjZXMgZnJvbSBleGlzdGluZyBkb21haW5zLiIpOwor
ICAgICAgICAgICAgY29tbW9uTWVzc2FnZS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5hcnJheUFzVUwodmlvbGF0aW9uRG9tYWlucykpOworICAgICAgICAgICAgcmVzdWx0LnNj
b3JlID0gMTAwIC0gdmlvbGF0aW9uRG9tYWlucy5sZW5ndGggKiB0aGlzLmdldFZhbHVlKCJWaW9s
YXRpb25Eb21haW5TY29yZSIpOworICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY2FsbGJhY2so
cmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMu
TWluaW1pemVEbnNMb29rdXBzUnVsZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9y
LkF1ZGl0UnVsZS5wcm90b3R5cGU7CisKKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuUGFyYWxs
ZWxpemVEb3dubG9hZFJ1bGUgPSBmdW5jdGlvbihwYXJhbWV0ZXJzT2JqZWN0KQoreworICAgIFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGUuY2FsbCh0aGlzLCAibmV0d29yay1wYXJhbGxlbGl6ZWhvc3Rz
IiwgIlBhcmFsbGVsaXplIGRvd25sb2FkcyBhY3Jvc3MgaG9zdG5hbWVzIiwgcGFyYW1ldGVyc09i
amVjdCk7Cit9CisKKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuUGFyYWxsZWxpemVEb3dubG9h
ZFJ1bGUucHJvdG90eXBlID0geworICAgIGRvUnVuOiBmdW5jdGlvbihyZXNvdXJjZXMsIHJlc3Vs
dCwgY2FsbGJhY2spCisgICAgeworICAgICAgICBmdW5jdGlvbiBob3N0U29ydGVyKGEsIGIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHZhciBhQ291bnQgPSBkb21haW5Ub1Jlc291cmNlc01hcFth
XS5sZW5ndGg7CisgICAgICAgICAgICB2YXIgYkNvdW50ID0gZG9tYWluVG9SZXNvdXJjZXNNYXBb
Yl0ubGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIChhQ291bnQgPCBiQ291bnQpID8gMSA6IChh
Q291bnQgPT0gYkNvdW50KSA/IDAgOiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICB2YXIgZG9tYWluVG9SZXNvdXJjZXNNYXAgPSBXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5nZXREb21haW5Ub1Jlc291cmNlc01hcCgKKyAgICAgICAgICAgICAgICByZXNvdXJjZXMs
CisgICAgICAgICAgICAgICAgW1dlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlN0eWxlc2hlZXQs
IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLkltYWdlXSwKKyAgICAgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuVVJMUmVnRXhwLAorICAgICAgICAgICAgICAgIHRydWUpOworCisgICAgICAgICAg
ICB2YXIgaG9zdHMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIHVybCBpbiBkb21haW5Ub1Jl
c291cmNlc01hcCkKKyAgICAgICAgICAgICAgICBob3N0cy5wdXNoKHVybCk7CisKKyAgICAgICAg
ICAgIGlmICghaG9zdHMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybjsgLy8gbm8gaG9z
dHMgKGxvY2FsIGZpbGUgb3Igc29tZXRoaW5nKQorCisgICAgICAgICAgICBob3N0cy5zb3J0KGhv
c3RTb3J0ZXIpOworCisgICAgICAgICAgICB2YXIgb3B0aW1hbEhvc3RuYW1lQ291bnQgPSB0aGlz
LmdldFZhbHVlKCJPcHRpbWFsSG9zdG5hbWVDb3VudCIpOworICAgICAgICAgICAgaWYgKGhvc3Rz
Lmxlbmd0aCA+IG9wdGltYWxIb3N0bmFtZUNvdW50KQorICAgICAgICAgICAgICAgIGhvc3RzLnNw
bGljZShvcHRpbWFsSG9zdG5hbWVDb3VudCk7CisKKyAgICAgICAgICAgIHZhciBidXNpZXN0SG9z
dFJlc291cmNlQ291bnQgPSBkb21haW5Ub1Jlc291cmNlc01hcFtob3N0c1swXV0ubGVuZ3RoOwor
ICAgICAgICAgICAgdmFyIHJlc291cmNlQ291bnRBYm92ZVRocmVzaG9sZCA9IGJ1c2llc3RIb3N0
UmVzb3VyY2VDb3VudCAtIHRoaXMuZ2V0VmFsdWUoIk1pblJlcXVlc3RUaHJlc2hvbGQiKTsKKyAg
ICAgICAgICAgIGlmIChyZXNvdXJjZUNvdW50QWJvdmVUaHJlc2hvbGQgPD0gMCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHZhciBhdmdSZXNvdXJjZXNQZXJIb3N0ID0g
MDsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBzaXplID0gaG9zdHMubGVuZ3RoOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIGF2Z1Jlc291cmNlc1Blckhvc3QgKz0gZG9tYWlu
VG9SZXNvdXJjZXNNYXBbaG9zdHNbaV1dLmxlbmd0aDsKKworICAgICAgICAgICAgLy8gQXNzdW1l
IG9wdGltYWwgcGFyYWxsZWxpemF0aW9uLgorICAgICAgICAgICAgYXZnUmVzb3VyY2VzUGVySG9z
dCAvPSBvcHRpbWFsSG9zdG5hbWVDb3VudDsKKworICAgICAgICAgICAgYXZnUmVzb3VyY2VzUGVy
SG9zdCA9IE1hdGgubWF4KGF2Z1Jlc291cmNlc1Blckhvc3QsIDEpOworCisgICAgICAgICAgICB2
YXIgcGN0QWJvdmVBdmcgPSAocmVzb3VyY2VDb3VudEFib3ZlVGhyZXNob2xkIC8gYXZnUmVzb3Vy
Y2VzUGVySG9zdCkgLSAxLjA7CisKKyAgICAgICAgICAgIHZhciBtaW5CYWxhbmNlVGhyZXNob2xk
ID0gdGhpcy5nZXRWYWx1ZSgiTWluQmFsYW5jZVRocmVzaG9sZCIpOworICAgICAgICAgICAgaWYg
KHBjdEFib3ZlQXZnIDwgbWluQmFsYW5jZVRocmVzaG9sZCkgeworICAgICAgICAgICAgICAgIHJl
c3VsdC5zY29yZSA9IDEwMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJlc3VsdC5zY29yZSA9ICgxIC0gKHBjdEFib3ZlQXZnIC0gbWluQmFs
YW5jZVRocmVzaG9sZCkpICogMTAwOworICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlUmVzdWx0LlR5cGUuSGludDsKKworICAgICAgICAgICAgdmFyIHJlc291
cmNlc09uQnVzaWVzdEhvc3QgPSBkb21haW5Ub1Jlc291cmNlc01hcFtob3N0c1swXV07CisgICAg
ICAgICAgICB2YXIgY29tbW9uTWVzc2FnZSA9IHJlc3VsdC5hcHBlbmRDaGlsZCgKKyAgICAgICAg
ICAgICAgICBTdHJpbmcuc3ByaW50ZigiVGhpcyBwYWdlIG1ha2VzICVkIHBhcmFsbGVsaXphYmxl
IHJlcXVlc3RzIHRvICVzIiArCisgICAgICAgICAgICAgICAgIi4gSW5jcmVhc2UgZG93bmxvYWQg
cGFyYWxsZWxpemF0aW9uIGJ5IGRpc3RyaWJ1dGluZyB0aGUgZm9sbG93aW5nIiArCisgICAgICAg
ICAgICAgICAgIiByZXF1ZXN0cyBhY3Jvc3MgbXVsdGlwbGUgaG9zdG5hbWVzLiIsIGJ1c2llc3RI
b3N0UmVzb3VyY2VDb3VudCwgaG9zdHNbMF0pKTsKKyAgICAgICAgICAgIHZhciBvdXRwdXRSZXNv
dXJjZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBzaXplID0gcmVzb3VyY2Vz
T25CdXNpZXN0SG9zdC5sZW5ndGg7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAgb3V0
cHV0UmVzb3VyY2VzLnB1c2gocmVzb3VyY2VzT25CdXNpZXN0SG9zdFtpXS51cmwpOworICAgICAg
ICAgICAgY29tbW9uTWVzc2FnZS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5h
cnJheUFzVUwob3V0cHV0UmVzb3VyY2VzLCB0cnVlKSk7CisgICAgICAgIH0gY2F0Y2goZSkgewor
ICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAg
ICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICB9CisgICAgfQorfQorCitXZWJJbnNwZWN0
b3IuQXVkaXRSdWxlcy5QYXJhbGxlbGl6ZURvd25sb2FkUnVsZS5wcm90b3R5cGUuX19wcm90b19f
ID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5wcm90b3R5cGU7CisKKworLy8gVGhlIHJlcG9ydGVk
IENTUyBydWxlIHNpemUgaXMgaW5jb3JyZWN0IChwYXJzZWQgIT0gb3JpZ2luYWwgaW4gV2ViS2l0
KSwKKy8vIHNvIHVzZSBwZXJjZW50YWdlcyBpbnN0ZWFkLCB3aGljaCBnaXZlcyBhIGJldHRlciBh
cHByb3hpbWF0aW9uLgorV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuVW51c2VkQ3NzUnVsZSA9IGZ1
bmN0aW9uKHBhcmFtZXRlcnNPYmplY3QpCit7CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5j
YWxsKHRoaXMsICJwYWdlLXVudXNlZGNzcyIsICJSZW1vdmUgdW51c2VkIENTUyIsIHBhcmFtZXRl
cnNPYmplY3QpOworfQorCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlLnBy
b3RvdHlwZSA9IHsKKyAgICBfZ2V0VW51c2VkU3R5bGVzaGVldFJhdGlvTWVzc2FnZTogZnVuY3Rp
b24odW51c2VkTGVuZ3RoLCB0eXBlLCBsb2NhdGlvbiwgc3R5bGVTaGVldExlbmd0aCkKKyAgICB7
CisgICAgICAgIHZhciB1cmwgPSB0eXBlID09PSAiaHJlZiIKKyAgICAgICAgICAgID8gV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMubGlua2lmeVVSTChsb2NhdGlvbikKKyAgICAgICAgICAgIDogU3Ry
aW5nLnNwcmludGYoIklubGluZSBibG9jayAjJXMiLCBsb2NhdGlvbik7CisgICAgICAgIHZhciBw
Y3RVbnVzZWQgPSBNYXRoLnJvdW5kKHVudXNlZExlbmd0aCAvIHN0eWxlU2hlZXRMZW5ndGggKiAx
MDApOworICAgICAgICByZXR1cm4gU3RyaW5nLnNwcmludGYoIiVzOiAlZiUlIChlc3RpbWF0ZWQp
IGlzIG5vdCB1c2VkIGJ5IHRoZSBjdXJyZW50IHBhZ2UuIiwgdXJsLCBwY3RVbnVzZWQpOworICAg
IH0sCisKKyAgICBfZ2V0VW51c2VkVG90YWxSYXRpb01lc3NhZ2U6IGZ1bmN0aW9uKHVudXNlZExl
bmd0aCwgdG90YWxMZW5ndGgpCisgICAgeworICAgICAgICB2YXIgcGN0VW51c2VkID0gTWF0aC5y
b3VuZCh1bnVzZWRMZW5ndGggLyB0b3RhbExlbmd0aCAqIDEwMCk7CisgICAgICAgIHJldHVybiBT
dHJpbmcuc3ByaW50ZigiJWQlJSBvZiBDU1MgKGVzdGltYXRlZCkgaXMgbm90IHVzZWQgYnkgdGhl
IGN1cnJlbnQgcGFnZS4iLCBwY3RVbnVzZWQpOworICAgIH0sCisKKyAgICBkb1J1bjogZnVuY3Rp
b24ocmVzb3VyY2VzLCByZXN1bHQsIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdmFyIHNlbGYg
PSB0aGlzOworICAgICAgICBmdW5jdGlvbiBldmFsQ2FsbGJhY2soZXZhbFJlc3VsdCwgaXNFeGNl
cHRpb24pIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgIGlmIChpc0V4Y2VwdGlv
bikKKyAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICB2YXIgdG90YWxM
ZW5ndGggPSAwOworICAgICAgICAgICAgICB2YXIgdG90YWxVbnVzZWRMZW5ndGggPSAwOworICAg
ICAgICAgICAgICB2YXIgdG9wTWVzc2FnZTsKKyAgICAgICAgICAgICAgdmFyIHN0eWxlU2hlZXRN
ZXNzYWdlOworICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV2YWxSZXN1bHQubGVu
Z3RoOyApIHsKKyAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gZXZhbFJlc3VsdFtpKytdOwor
ICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICJ0b3RhbExlbmd0aCIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICB0b3RhbExlbmd0aCA9IGV2YWxSZXN1bHRbaSsrXTsKKyAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgdmFyIHN0eWxlU2hlZXRMZW5ndGggPSBldmFsUmVzdWx0W2krK107CisgICAgICAgICAg
ICAgICAgICB2YXIgbG9jYXRpb24gPSBldmFsUmVzdWx0W2krK107CisgICAgICAgICAgICAgICAg
ICB2YXIgdW51c2VkUnVsZXMgPSBldmFsUmVzdWx0W2krK107CisgICAgICAgICAgICAgICAgICBz
dHlsZVNoZWV0TWVzc2FnZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgIGlmICghdG9w
TWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICB0b3BNZXNzYWdlID0gcmVzdWx0LmFwcGVu
ZENoaWxkKCIiKTsKKworICAgICAgICAgICAgICAgICAgdmFyIHRvdGFsVW51c2VkUnVsZUxlbmd0
aCA9IDA7CisgICAgICAgICAgICAgICAgICB2YXIgcnVsZVNlbGVjdG9ycyA9IFtdOworICAgICAg
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB1bnVzZWRSdWxlcy5sZW5ndGg7ICsraikg
eworICAgICAgICAgICAgICAgICAgICAgIHZhciBydWxlID0gdW51c2VkUnVsZXNbal07CisgICAg
ICAgICAgICAgICAgICAgICAgdG90YWxVbnVzZWRSdWxlTGVuZ3RoICs9IHBhcnNlSW50KHJ1bGVb
MV0pOworICAgICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVTaGVldE1lc3NhZ2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRNZXNzYWdlID0gcmVzdWx0LmFwcGVuZENo
aWxkKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgICBydWxlU2VsZWN0b3JzLnB1c2gocnVsZVsw
XSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0TWVz
c2FnZS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5hcnJheUFzVUwocnVsZVNl
bGVjdG9ycykpOworCisgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0TWVzc2FnZS52YWx1ZSA9
IHNlbGYuX2dldFVudXNlZFN0eWxlc2hlZXRSYXRpb01lc3NhZ2UodG90YWxVbnVzZWRSdWxlTGVu
Z3RoLCB0eXBlLCBsb2NhdGlvbiwgc3R5bGVTaGVldExlbmd0aCk7CisgICAgICAgICAgICAgICAg
ICB0b3RhbFVudXNlZExlbmd0aCArPSB0b3RhbFVudXNlZFJ1bGVMZW5ndGg7CisgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgaWYgKHRvdGFsVW51c2VkTGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICB2YXIgdG90YWxVbnVzZWRQZXJjZW50ID0gdG90YWxVbnVzZWRMZW5ndGggLyB0b3Rh
bExlbmd0aDsKKyAgICAgICAgICAgICAgICAgIHRvcE1lc3NhZ2UudmFsdWUgPSBzZWxmLl9nZXRV
bnVzZWRUb3RhbFJhdGlvTWVzc2FnZSh0b3RhbFVudXNlZExlbmd0aCwgdG90YWxMZW5ndGgpOwor
ICAgICAgICAgICAgICAgICAgdmFyIHBjdE11bHRpcGxpZXIgPSBNYXRoLmxvZyhNYXRoLm1heCgy
MDAsIHRvdGFsVW51c2VkTGVuZ3RoIC0gODAwKSkgLyA3IC0gMC42OworICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnNjb3JlID0gKDEgLSB0b3RhbFVudXNlZFBlcmNlbnQgKiBwY3RNdWx0aXBsaWVy
KSAqIDEwMDsKKyAgICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZVJlc3VsdC5UeXBlLkhpbnQ7CisgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnNjb3JlID0gMTAwOworICAgICAgICAgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CisgICAgICAgICAgICB9IGZpbmFsbHkgewor
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiByb3V0aW5lKCkKKyAgICAgICAgeworICAgICAgICAgICAg
dmFyIHN0eWxlU2hlZXRzID0gZG9jdW1lbnQuc3R5bGVTaGVldHM7CisgICAgICAgICAgICBpZiAo
IXN0eWxlU2hlZXRzKQorICAgICAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAgICAgICAgIHZh
ciBzdHlsZVNoZWV0VG9VbnVzZWRSdWxlcyA9IFtdOworICAgICAgICAgICAgdmFyIGlubGluZUJs
b2NrT3JkaW5hbCA9IDA7CisgICAgICAgICAgICB2YXIgdG90YWxDU1NMZW5ndGggPSAwOworICAg
ICAgICAgICAgdmFyIHBzZXVkb1NlbGVjdG9yUmVnZXhwID0gLzpob3Zlcnw6bGlua3w6YWN0aXZl
fDp2aXNpdGVkfDpmb2N1cy87CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxl
U2hlZXRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0eWxlU2hlZXQgPSBz
dHlsZVNoZWV0c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0eWxlU2hlZXQuY3NzUnVsZXMp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHZhciBjdXJy
ZW50U3R5bGVTaGVldFNpemUgPSAwOworICAgICAgICAgICAgICAgIHZhciB1bnVzZWRSdWxlcyA9
IFtdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGN1clJ1bGUgPSAwOyBjdXJSdWxlIDwgc3R5
bGVTaGVldC5jc3NSdWxlcy5sZW5ndGg7ICsrY3VyUnVsZSkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgcnVsZSA9IHN0eWxlU2hlZXQuY3NzUnVsZXNbY3VyUnVsZV07CisgICAgICAgICAgICAg
ICAgICAgIHZhciB0ZXh0TGVuZ3RoID0gcnVsZS5jc3NUZXh0ID8gcnVsZS5jc3NUZXh0Lmxlbmd0
aCA6IDA7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHlsZVNoZWV0U2l6ZSArPSB0ZXh0
TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB0b3RhbENTU0xlbmd0aCArPSB0ZXh0TGVuZ3Ro
OworICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS50eXBlICE9PSAxIHx8IHJ1bGUuc2VsZWN0
b3JUZXh0Lm1hdGNoKHBzZXVkb1NlbGVjdG9yUmVnZXhwKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXMgPSBkb2N1bWVudC5x
dWVyeVNlbGVjdG9yQWxsKHJ1bGUuc2VsZWN0b3JUZXh0KTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICB1bnVzZWRSdWxlcy5wdXNoKFtydWxlLnNlbGVjdG9y
VGV4dCwgdGV4dExlbmd0aF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAodW51c2VkUnVsZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRU
b1VudXNlZFJ1bGVzLnB1c2goc3R5bGVTaGVldC5ocmVmID8gImhyZWYiIDogImlubGluZSIpOwor
ICAgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0VG9VbnVzZWRSdWxlcy5wdXNoKGN1cnJlbnRT
dHlsZVNoZWV0U2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRUb1VudXNlZFJ1
bGVzLnB1c2goc3R5bGVTaGVldC5ocmVmID8gc3R5bGVTaGVldC5ocmVmIDogKytpbmxpbmVCbG9j
a09yZGluYWwpOworICAgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0VG9VbnVzZWRSdWxlcy5w
dXNoKHVudXNlZFJ1bGVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzdHlsZVNoZWV0VG9VbnVzZWRSdWxlcy5wdXNoKCJ0b3RhbExlbmd0aCIpOworICAg
ICAgICAgICAgc3R5bGVTaGVldFRvVW51c2VkUnVsZXMucHVzaCh0b3RhbENTU0xlbmd0aCk7Cisg
ICAgICAgICAgICByZXR1cm4gc3R5bGVTaGVldFRvVW51c2VkUnVsZXM7CisgICAgICAgIH0KKwor
ICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFyZ2V0V2luZG93KHJv
dXRpbmUsIGV2YWxDYWxsYmFjayk7CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxl
cy5VbnVzZWRDc3NSdWxlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlLnByb3RvdHlwZTsKKworCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xS
dWxlID0gZnVuY3Rpb24oaWQsIG5hbWUsIHBhcmFtZXRlcnNPYmplY3QpCit7CisgICAgV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZS5jYWxsKHRoaXMsIGlkLCBuYW1lLCBwYXJhbWV0ZXJzT2JqZWN0KTsK
K30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5NaWxsaXNQZXJN
b250aCA9IDEwMDAgKiA2MCAqIDYwICogMjQgKiAzMDsKKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZXMuQ2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUgPSB7CisKKyAgICBJbmZvQ2hlY2s6IC0xLAor
ICAgIEZhaWxDaGVjazogMCwKKyAgICBXYXJuaW5nQ2hlY2s6IDEsCisgICAgU2V2ZXJlQ2hlY2s6
IDIsCisKKyAgICBkb1J1bjogZnVuY3Rpb24ocmVzb3VyY2VzLCByZXN1bHQsIGNhbGxiYWNrKQor
ICAgIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciBjYWNoZWFibGVBbmROb25DYWNo
ZWFibGVSZXNvdXJjZXMgPSB0aGlzLl9jYWNoZWFibGVBbmROb25DYWNoZWFibGVSZXNvdXJjZXMo
cmVzb3VyY2VzKTsKKyAgICAgICAgICAgIGlmIChjYWNoZWFibGVBbmROb25DYWNoZWFibGVSZXNv
dXJjZXNbMF0ubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnNjb3JlID0gMTAwOwor
ICAgICAgICAgICAgICAgIHRoaXMucnVuQ2hlY2tzKGNhY2hlYWJsZUFuZE5vbkNhY2hlYWJsZVJl
c291cmNlc1swXSwgcmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuaGFu
ZGxlTm9uQ2FjaGVhYmxlUmVzb3VyY2VzKGNhY2hlYWJsZUFuZE5vbkNhY2hlYWJsZVJlc291cmNl
c1sxXSwgcmVzdWx0KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBjb25zb2xl
LmxvZyhlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNhbGxiYWNrKHJlc3Vs
dCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgaGFuZGxlTm9uQ2FjaGVhYmxlUmVzb3VyY2Vz
OiBmdW5jdGlvbigpCisgICAgeworICAgIH0sCisKKyAgICBfY2FjaGVhYmxlQW5kTm9uQ2FjaGVh
YmxlUmVzb3VyY2VzOiBmdW5jdGlvbihyZXNvdXJjZXMpCisgICAgeworICAgICAgICB2YXIgcHJv
Y2Vzc2VkUmVzb3VyY2VzID0gW1tdLCBbXV07CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cmVzb3VyY2VzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXNv
dXJjZXNbaV07CisgICAgICAgICAgICBpZiAoIXRoaXMuaXNDYWNoZWFibGVSZXNvdXJjZShyZXNv
dXJjZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAodGhpcy5f
aXNFeHBsaWNpdGx5Tm9uQ2FjaGVhYmxlKHJlc291cmNlKSkKKyAgICAgICAgICAgICAgICBwcm9j
ZXNzZWRSZXNvdXJjZXNbMV0ucHVzaChyZXNvdXJjZSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcHJvY2Vzc2VkUmVzb3VyY2VzWzBdLnB1c2gocmVzb3VyY2UpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBwcm9jZXNzZWRSZXNvdXJjZXM7CisgICAgfSwKKworICAgIGV4
ZWNDaGVjazogZnVuY3Rpb24obWVzc2FnZVRleHQsIHJlc291cmNlQ2hlY2tGdW5jdGlvbiwgcmVz
b3VyY2VzLCBzZXZlcml0eSwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgdmFyIHRvcE1lc3NhZ2U7
CisgICAgICAgIHZhciBmYWlsaW5nUmVzb3VyY2VzID0gMDsKKyAgICAgICAgdmFyIHJlc291cmNl
Q291bnQgPSByZXNvdXJjZXMubGVuZ3RoOworICAgICAgICB2YXIgb3V0cHV0UmVzb3VyY2VzID0g
W107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb3VyY2VDb3VudDsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAocmVzb3VyY2VDaGVja0Z1bmN0aW9uLmNhbGwodGhpcywgcmVzb3VyY2Vz
W2ldKSkgeworICAgICAgICAgICAgICAgICsrZmFpbGluZ1Jlc291cmNlczsKKyAgICAgICAgICAg
ICAgICBpZiAoIXRvcE1lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgIHRvcE1lc3NhZ2UgPSBy
ZXN1bHQuYXBwZW5kQ2hpbGQobWVzc2FnZVRleHQpOworICAgICAgICAgICAgICAgIG91dHB1dFJl
c291cmNlcy5wdXNoKHJlc291cmNlc1tpXS51cmwpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGlmICh0b3BNZXNzYWdlKQorICAgICAgICAgICAgdG9wTWVzc2FnZS5hcHBlbmRD
aGlsZChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5hcnJheUFzVUwob3V0cHV0UmVzb3VyY2VzLCB0
cnVlKSk7CisgICAgICAgIGlmIChmYWlsaW5nUmVzb3VyY2VzKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKHNldmVyaXR5KSB7CisgICAgICAgICAgICAgICAgY2FzZSB0aGlzLkZhaWxDaGVjazoKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnNjb3JlID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnR5cGUgPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0LlR5cGUuVmlvbGF0aW9u
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIHRoaXMu
U2V2ZXJlQ2hlY2s6CisgICAgICAgICAgICAgICAgY2FzZSB0aGlzLldhcm5pbmdDaGVjazoKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnNjb3JlIC09IDUwICogc2V2ZXJpdHkgKiBmYWlsaW5n
UmVzb3VyY2VzIC8gcmVzb3VyY2VDb3VudDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnR5
cGUgPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0LlR5cGUuSGludDsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRvcE1lc3NhZ2U7CisgICAgfSwKKworICAgIGZyZXNobmVzc0xpZmV0aW1lR3JlYXRlclRoYW46
IGZ1bmN0aW9uKHJlc291cmNlLCB0aW1lTXMpCisgICAgeworICAgICAgICB2YXIgZGF0ZUhlYWRl
ciA9IHRoaXMucmVzcG9uc2VIZWFkZXIocmVzb3VyY2UsICJEYXRlIik7CisgICAgICAgIGlmICgh
ZGF0ZUhlYWRlcikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB2YXIgZGF0
ZUhlYWRlck1zID0gRGF0ZS5wYXJzZShkYXRlSGVhZGVyKTsKKyAgICAgICAgaWYgKGlzTmFOKGRh
dGVIZWFkZXJNcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdmFyIGZy
ZXNobmVzc0xpZmV0aW1lTXM7CisgICAgICAgIHZhciBtYXhBZ2VNYXRjaCA9IHRoaXMucmVzcG9u
c2VIZWFkZXJNYXRjaChyZXNvdXJjZSwgIkNhY2hlLUNvbnRyb2wiLCAibWF4LWFnZT0oXFxkKyki
KTsKKworICAgICAgICBpZiAobWF4QWdlTWF0Y2gpCisgICAgICAgICAgICBmcmVzaG5lc3NMaWZl
dGltZU1zID0gKG1heEFnZU1hdGNoWzFdKSA/IDEwMDAgKiBtYXhBZ2VNYXRjaFsxXSA6IDA7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmFyIGV4cGlyZXNIZWFkZXIgPSB0aGlzLnJlc3Bv
bnNlSGVhZGVyKHJlc291cmNlLCAiRXhwaXJlcyIpOworICAgICAgICAgICAgaWYgKGV4cGlyZXNI
ZWFkZXIpIHsKKyAgICAgICAgICAgICAgICB2YXIgZXhwRGF0ZSA9IERhdGUucGFyc2UoZXhwaXJl
c0hlYWRlcik7CisgICAgICAgICAgICAgICAgaWYgKCFpc05hTihleHBEYXRlKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnJlc2huZXNzTGlmZXRpbWVNcyA9IGV4cERhdGUgLSBkYXRlSGVhZGVyTXM7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKGlzTmFOKGZyZXNo
bmVzc0xpZmV0aW1lTXMpKSA/IGZhbHNlIDogZnJlc2huZXNzTGlmZXRpbWVNcyA+IHRpbWVNczsK
KyAgICB9LAorCisgICAgcmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKHJlc291cmNlLCBoZWFkZXIp
CisgICAgeworICAgICAgICByZXR1cm4gcmVzb3VyY2UucmVzcG9uc2VIZWFkZXJzW2hlYWRlcl07
CisgICAgfSwKKworICAgIGhhc1Jlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbihyZXNvdXJjZSwgaGVh
ZGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlLnJlc3BvbnNlSGVhZGVyc1toZWFk
ZXJdICE9PSB1bmRlZmluZWQ7CisgICAgfSwKKworICAgIGlzQ29tcHJlc3NpYmxlOiBmdW5jdGlv
bihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuUmVzb3VyY2Uu
VHlwZS5pc1RleHRUeXBlKHJlc291cmNlLnR5cGUpOworICAgIH0sCisKKyAgICBpc1B1YmxpY2x5
Q2FjaGVhYmxlOiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9p
c0V4cGxpY2l0bHlOb25DYWNoZWFibGUocmVzb3VyY2UpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGlmICh0aGlzLnJlc3BvbnNlSGVhZGVyTWF0Y2gocmVzb3VyY2UsICJD
YWNoZS1Db250cm9sIiwgInB1YmxpYyIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgcmV0dXJuIHJlc291cmNlLnVybC5pbmRleE9mKCI/IikgPT0gLTEgJiYgIXRoaXMucmVz
cG9uc2VIZWFkZXJNYXRjaChyZXNvdXJjZSwgIkNhY2hlLUNvbnRyb2wiLCAicHJpdmF0ZSIpOwor
ICAgIH0sCisKKyAgICByZXNwb25zZUhlYWRlck1hdGNoOiBmdW5jdGlvbihyZXNvdXJjZSwgaGVh
ZGVyLCByZWdleHApCisgICAgeworICAgICAgICByZXR1cm4gcmVzb3VyY2UucmVzcG9uc2VIZWFk
ZXJzW2hlYWRlcl0KKyAgICAgICAgICAgID8gcmVzb3VyY2UucmVzcG9uc2VIZWFkZXJzW2hlYWRl
cl0ubWF0Y2gobmV3IFJlZ0V4cChyZWdleHAsICJpbSIpKQorICAgICAgICAgICAgOiB1bmRlZmlu
ZWQ7CisgICAgfSwKKworICAgIGhhc0V4cGxpY2l0RXhwaXJhdGlvbjogZnVuY3Rpb24ocmVzb3Vy
Y2UpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5oYXNSZXNwb25zZUhlYWRlcihyZXNvdXJj
ZSwgIkRhdGUiKSAmJgorICAgICAgICAgICAgKHRoaXMuaGFzUmVzcG9uc2VIZWFkZXIocmVzb3Vy
Y2UsICJFeHBpcmVzIikgfHwgdGhpcy5yZXNwb25zZUhlYWRlck1hdGNoKHJlc291cmNlLCAiQ2Fj
aGUtQ29udHJvbCIsICJtYXgtYWdlIikpOworICAgIH0sCisKKyAgICBfaXNFeHBsaWNpdGx5Tm9u
Q2FjaGVhYmxlOiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHZhciBoYXNFeHBs
aWNpdEV4cCA9IHRoaXMuaGFzRXhwbGljaXRFeHBpcmF0aW9uKHJlc291cmNlKTsKKyAgICAgICAg
cmV0dXJuIHRoaXMucmVzcG9uc2VIZWFkZXJNYXRjaChyZXNvdXJjZSwgIkNhY2hlLUNvbnRyb2wi
LCAiKG5vLWNhY2hlfG5vLXN0b3JlfG11c3QtcmV2YWxpZGF0ZSkiKSB8fAorICAgICAgICAgICAg
dGhpcy5yZXNwb25zZUhlYWRlck1hdGNoKHJlc291cmNlLCAiUHJhZ21hIiwgIm5vLWNhY2hlIikg
fHwKKyAgICAgICAgICAgIChoYXNFeHBsaWNpdEV4cCAmJiAhdGhpcy5mcmVzaG5lc3NMaWZldGlt
ZUdyZWF0ZXJUaGFuKHJlc291cmNlLCAwKSkgfHwKKyAgICAgICAgICAgICghaGFzRXhwbGljaXRF
eHAgJiYgcmVzb3VyY2UudXJsICYmIHJlc291cmNlLnVybC5pbmRleE9mKCI/IikgPj0gMCkgfHwK
KyAgICAgICAgICAgICghaGFzRXhwbGljaXRFeHAgJiYgIXRoaXMuaXNDYWNoZWFibGVSZXNvdXJj
ZShyZXNvdXJjZSkpOworICAgIH0sCisKKyAgICBpc0NhY2hlYWJsZVJlc291cmNlOiBmdW5jdGlv
bihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNvdXJjZS5zdGF0dXNDb2RlICE9
PSB1bmRlZmluZWQgJiYgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVhYmxlUmVzcG9uc2VD
b2Rlc1tyZXNvdXJjZS5zdGF0dXNDb2RlXTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRp
dFJ1bGVzLkNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rv
ci5BdWRpdFJ1bGUucHJvdG90eXBlOworCisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkJyb3dz
ZXJDYWNoZUNvbnRyb2xSdWxlID0gZnVuY3Rpb24ocGFyYW1ldGVyc09iamVjdCkKK3sKKyAgICBX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxlLmNhbGwodGhpcywgImh0dHAt
YnJvd3NlcmNhY2hlIiwgIkxldmVyYWdlIGJyb3dzZXIgY2FjaGluZyIsIHBhcmFtZXRlcnNPYmpl
Y3QpOworfQorCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Ccm93c2VyQ2FjaGVDb250cm9sUnVs
ZS5wcm90b3R5cGUgPSB7CisgICAgaGFuZGxlTm9uQ2FjaGVhYmxlUmVzb3VyY2VzOiBmdW5jdGlv
bihyZXNvdXJjZXMsIHJlc3VsdCkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZXMubGVuZ3Ro
KSB7CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IHJlc3VsdC5hcHBlbmRDaGlsZCgKKyAgICAg
ICAgICAgICAgICAiVGhlIGZvbGxvd2luZyByZXNvdXJjZXMgYXJlIGV4cGxpY2l0bHkgbm9uLWNh
Y2hlYWJsZS4gQ29uc2lkZXIgbWFraW5nIHRoZW0gY2FjaGVhYmxlIGlmIHBvc3NpYmxlOiIpOwor
ICAgICAgICAgICAgdmFyIHJlc291cmNlT3V0cHV0ID0gW107CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHJlc291cmNlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICByZXNv
dXJjZU91dHB1dC5wdXNoKHJlc291cmNlc1tpXS51cmwpOworICAgICAgICAgICAgbWVzc2FnZS5h
cHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5hcnJheUFzVUwocmVzb3VyY2VPdXRw
dXQsIHRydWUpKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBydW5DaGVja3M6IGZ1bmN0aW9u
KHJlc291cmNlcywgcmVzdWx0LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHRoaXMuZXhlY0No
ZWNrKAorICAgICAgICAgICAgIlRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBtaXNzaW5nIGEg
Y2FjaGUgZXhwaXJhdGlvbi4iICsKKyAgICAgICAgICAgICIgUmVzb3VyY2VzIHRoYXQgZG8gbm90
IHNwZWNpZnkgYW4gZXhwaXJhdGlvbiBtYXkgbm90IGJlIiArCisgICAgICAgICAgICAiIGNhY2hl
ZCBieSBicm93c2VyczoiLAorICAgICAgICAgICAgdGhpcy5fbWlzc2luZ0V4cGlyYXRpb25DaGVj
aywgcmVzb3VyY2VzLCB0aGlzLlNldmVyZUNoZWNrLCByZXN1bHQpOworICAgICAgICB0aGlzLmV4
ZWNDaGVjaygKKyAgICAgICAgICAgICJUaGUgZm9sbG93aW5nIHJlc291cmNlcyBzcGVjaWZ5IGEg
XCJWYXJ5XCIgaGVhZGVyIHRoYXQiICsKKyAgICAgICAgICAgICIgZGlzYWJsZXMgY2FjaGluZyBp
biBtb3N0IHZlcnNpb25zIG9mIEludGVybmV0IEV4cGxvcmVyOiIsCisgICAgICAgICAgICB0aGlz
Ll92YXJ5Q2hlY2ssIHJlc291cmNlcywgdGhpcy5TZXZlcmVDaGVjaywgcmVzdWx0KTsKKyAgICAg
ICAgdGhpcy5leGVjQ2hlY2soCisgICAgICAgICAgICAiVGhlIGZvbGxvd2luZyBjYWNoZWFibGUg
cmVzb3VyY2VzIGhhdmUgYSBzaG9ydCIgKworICAgICAgICAgICAgIiBmcmVzaG5lc3MgbGlmZXRp
bWU6IiwKKyAgICAgICAgICAgIHRoaXMuX29uZU1vbnRoRXhwaXJhdGlvbkNoZWNrLCByZXNvdXJj
ZXMsIHRoaXMuV2FybmluZ0NoZWNrLCByZXN1bHQpOworCisgICAgICAgIC8vIFVuYWJsZSB0byBp
bXBsZW1lbnQgdGhlIGZhdmljb24gY2hlY2sgZHVlIHRvIHRoZSBXZWJLaXQgbGltaXRhdGlvbnMu
CisKKyAgICAgICAgdGhpcy5leGVjQ2hlY2soCisgICAgICAgICAgICAiVG8gZnVydGhlciBpbXBy
b3ZlIGNhY2hlIGhpdCByYXRlLCBzcGVjaWZ5IGFuIGV4cGlyYXRpb24iICsKKyAgICAgICAgICAg
ICIgb25lIHllYXIgaW4gdGhlIGZ1dHVyZSBmb3IgdGhlIGZvbGxvd2luZyBjYWNoZWFibGUiICsK
KyAgICAgICAgICAgICIgcmVzb3VyY2VzOiIsCisgICAgICAgICAgICB0aGlzLl9vbmVZZWFyRXhw
aXJhdGlvbkNoZWNrLCByZXNvdXJjZXMsIHRoaXMuSW5mb0NoZWNrLCByZXN1bHQpOworICAgIH0s
CisKKyAgICBfbWlzc2luZ0V4cGlyYXRpb25DaGVjazogZnVuY3Rpb24ocmVzb3VyY2UpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5pc0NhY2hlYWJsZVJlc291cmNlKHJlc291cmNlKSAmJiAh
dGhpcy5oYXNSZXNwb25zZUhlYWRlcihyZXNvdXJjZSwgIlNldC1Db29raWUiKSAmJiAhdGhpcy5o
YXNFeHBsaWNpdEV4cGlyYXRpb24ocmVzb3VyY2UpOworICAgIH0sCisKKyAgICBfdmFyeUNoZWNr
OiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHZhciB2YXJ5SGVhZGVyID0gdGhp
cy5yZXNwb25zZUhlYWRlcihyZXNvdXJjZSwgIlZhcnkiKTsKKyAgICAgICAgaWYgKHZhcnlIZWFk
ZXIpIHsKKyAgICAgICAgICAgIHZhcnlIZWFkZXIgPSB2YXJ5SGVhZGVyLnJlcGxhY2UoL1VzZXIt
QWdlbnQvZ2ksICIiKTsKKyAgICAgICAgICAgIHZhcnlIZWFkZXIgPSB2YXJ5SGVhZGVyLnJlcGxh
Y2UoL0FjY2VwdC1FbmNvZGluZy9naSwgIiIpOworICAgICAgICAgICAgdmFyeUhlYWRlciA9IHZh
cnlIZWFkZXIucmVwbGFjZSgvWywgXSovZywgIiIpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2YXJ5SGVhZGVyICYmIHZhcnlIZWFkZXIubGVuZ3RoICYmIHRoaXMuaXNDYWNoZWFibGVSZXNv
dXJjZShyZXNvdXJjZSkgJiYgdGhpcy5mcmVzaG5lc3NMaWZldGltZUdyZWF0ZXJUaGFuKHJlc291
cmNlLCAwKTsKKyAgICB9LAorCisgICAgX29uZU1vbnRoRXhwaXJhdGlvbkNoZWNrOiBmdW5jdGlv
bihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmlzQ2FjaGVhYmxlUmVzb3Vy
Y2UocmVzb3VyY2UpICYmCisgICAgICAgICAgICAhdGhpcy5oYXNSZXNwb25zZUhlYWRlcihyZXNv
dXJjZSwgIlNldC1Db29raWUiKSAmJgorICAgICAgICAgICAgIXRoaXMuZnJlc2huZXNzTGlmZXRp
bWVHcmVhdGVyVGhhbihyZXNvdXJjZSwgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250
cm9sUnVsZS5NaWxsaXNQZXJNb250aCkgJiYKKyAgICAgICAgICAgIHRoaXMuZnJlc2huZXNzTGlm
ZXRpbWVHcmVhdGVyVGhhbihyZXNvdXJjZSwgMCk7CisgICAgfSwKKworICAgIF9vbmVZZWFyRXhw
aXJhdGlvbkNoZWNrOiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLmlzQ2FjaGVhYmxlUmVzb3VyY2UocmVzb3VyY2UpICYmCisgICAgICAgICAgICAhdGhpcy5o
YXNSZXNwb25zZUhlYWRlcihyZXNvdXJjZSwgIlNldC1Db29raWUiKSAmJgorICAgICAgICAgICAg
IXRoaXMuZnJlc2huZXNzTGlmZXRpbWVHcmVhdGVyVGhhbihyZXNvdXJjZSwgMTEgKiBXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxlLk1pbGxpc1Blck1vbnRoKSAmJgorICAg
ICAgICAgICAgdGhpcy5mcmVzaG5lc3NMaWZldGltZUdyZWF0ZXJUaGFuKHJlc291cmNlLCBXZWJJ
bnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRyb2xSdWxlLk1pbGxpc1Blck1vbnRoKTsKKyAg
ICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkJyb3dzZXJDYWNoZUNvbnRyb2xSdWxl
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5DYWNoZUNvbnRy
b2xSdWxlLnByb3RvdHlwZTsKKworCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Qcm94eUNhY2hl
Q29udHJvbFJ1bGUgPSBmdW5jdGlvbihwYXJhbWV0ZXJzT2JqZWN0KSB7CisgICAgV2ViSW5zcGVj
dG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5jYWxsKHRoaXMsICJodHRwLXByb3h5Y2Fj
aGUiLCAiTGV2ZXJhZ2UgcHJveHkgY2FjaGluZyIsIHBhcmFtZXRlcnNPYmplY3QpOworfQorCitX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Qcm94eUNhY2hlQ29udHJvbFJ1bGUucHJvdG90eXBlID0g
eworICAgIHJ1bkNoZWNrczogZnVuY3Rpb24ocmVzb3VyY2VzLCByZXN1bHQsIGNhbGxiYWNrKQor
ICAgIHsKKyAgICAgICAgdGhpcy5leGVjQ2hlY2soCisgICAgICAgICAgICAiUmVzb3VyY2VzIHdp
dGggYSBcIj9cIiBpbiB0aGUgVVJMIGFyZSBub3QgY2FjaGVkIGJ5IG1vc3QiICsKKyAgICAgICAg
ICAgICIgcHJveHkgY2FjaGluZyBzZXJ2ZXJzOiIsCisgICAgICAgICAgICB0aGlzLl9xdWVzdGlv
bk1hcmtDaGVjaywgcmVzb3VyY2VzLCB0aGlzLldhcm5pbmdDaGVjaywgcmVzdWx0KTsKKyAgICAg
ICAgdGhpcy5leGVjQ2hlY2soCisgICAgICAgICAgICAiQ29uc2lkZXIgYWRkaW5nIGEgXCJDYWNo
ZS1Db250cm9sOiBwdWJsaWNcIiBoZWFkZXIgdG8gdGhlIiArCisgICAgICAgICAgICAiIGZvbGxv
d2luZyByZXNvdXJjZXM6IiwKKyAgICAgICAgICAgIHRoaXMuX3B1YmxpY0NhY2hpbmdDaGVjaywg
cmVzb3VyY2VzLCB0aGlzLkluZm9DaGVjaywgcmVzdWx0KTsKKyAgICAgICAgdGhpcy5leGVjQ2hl
Y2soCisgICAgICAgICAgICAiVGhlIGZvbGxvd2luZyBwdWJsaWNseSBjYWNoZWFibGUgcmVzb3Vy
Y2VzIGNvbnRhaW4iICsKKyAgICAgICAgICAgICIgYSBTZXQtQ29va2llIGhlYWRlci4gVGhpcyBz
ZWN1cml0eSB2dWxuZXJhYmlsaXR5IiArCisgICAgICAgICAgICAiIGNhbiBjYXVzZSBjb29raWVz
IHRvIGJlIHNoYXJlZCBieSBtdWx0aXBsZSB1c2Vycy4iLAorICAgICAgICAgICAgdGhpcy5fc2V0
Q29va2llQ2FjaGVhYmxlQ2hlY2ssIHJlc291cmNlcywgdGhpcy5GYWlsQ2hlY2ssIHJlc3VsdCk7
CisgICAgfSwKKworICAgIF9xdWVzdGlvbk1hcmtDaGVjazogZnVuY3Rpb24ocmVzb3VyY2UpCisg
ICAgeworICAgICAgICByZXR1cm4gcmVzb3VyY2UudXJsLmluZGV4T2YoIj8iKSA+PSAwICYmICF0
aGlzLmhhc1Jlc3BvbnNlSGVhZGVyKHJlc291cmNlLCAiU2V0LUNvb2tpZSIpICYmIHRoaXMuaXNQ
dWJsaWNseUNhY2hlYWJsZShyZXNvdXJjZSk7CisgICAgfSwKKworICAgIF9wdWJsaWNDYWNoaW5n
Q2hlY2s6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuaXND
YWNoZWFibGVSZXNvdXJjZShyZXNvdXJjZSkgJiYKKyAgICAgICAgICAgICF0aGlzLmlzQ29tcHJl
c3NpYmxlKHJlc291cmNlKSAmJgorICAgICAgICAgICAgIXRoaXMucmVzcG9uc2VIZWFkZXJNYXRj
aChyZXNvdXJjZSwgIkNhY2hlLUNvbnRyb2wiLCAicHVibGljIikgJiYKKyAgICAgICAgICAgICF0
aGlzLmhhc1Jlc3BvbnNlSGVhZGVyKHJlc291cmNlLCAiU2V0LUNvb2tpZSIpOworICAgIH0sCisK
KyAgICBfc2V0Q29va2llQ2FjaGVhYmxlQ2hlY2s6IGZ1bmN0aW9uKHJlc291cmNlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuaGFzUmVzcG9uc2VIZWFkZXIocmVzb3VyY2UsICJTZXQtQ29v
a2llIikgJiYgdGhpcy5pc1B1YmxpY2x5Q2FjaGVhYmxlKHJlc291cmNlKTsKKyAgICB9Cit9CisK
K1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlByb3h5Q2FjaGVDb250cm9sUnVsZS5wcm90b3R5cGUu
X19wcm90b19fID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ2FjaGVDb250cm9sUnVsZS5wcm90
b3R5cGU7CisKKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VEaW1lbnNpb25zUnVsZSA9
IGZ1bmN0aW9uKHBhcmFtZXRlcnNPYmplY3QpCit7CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZS5jYWxsKHRoaXMsICJwYWdlLWltYWdlZGltcyIsICJTcGVjaWZ5IGltYWdlIGRpbWVuc2lvbnMi
LCBwYXJhbWV0ZXJzT2JqZWN0KTsKK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuSW1hZ2VE
aW1lbnNpb25zUnVsZS5wcm90b3R5cGUgPSB7CisgICAgZG9SdW46IGZ1bmN0aW9uKHJlc291cmNl
cywgcmVzdWx0LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGV2YWxDYWxsYmFj
ayhldmFsUmVzdWx0LCBpc0V4Y2VwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICAgICBpZiAoaXNFeGNlcHRpb24pCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBpZiAoIWV2YWxSZXN1bHQgfHwgIWV2YWxSZXN1bHQudG90
YWxJbWFnZXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuc2NvcmUgPSAxMDA7CisgICAgICAgICAgICAgICAgdmFyIHRvcE1lc3NhZ2UgPSByZXN1
bHQuYXBwZW5kQ2hpbGQoCisgICAgICAgICAgICAgICAgICAgICJBIHdpZHRoIGFuZCBoZWlnaHQg
c2hvdWxkIGJlIHNwZWNpZmllZCBmb3IgYWxsIGltYWdlcyBpbiBvcmRlciB0byAiICsKKyAgICAg
ICAgICAgICAgICAgICAgInNwZWVkIHVwIHBhZ2UgZGlzcGxheS4gVGhlIGZvbGxvd2luZyBpbWFn
ZShzKSBhcmUgbWlzc2luZyBhIHdpZHRoIGFuZC9vciBoZWlnaHQ6Iik7CisgICAgICAgICAgICAg
ICAgdmFyIG1hcCA9IGV2YWxSZXN1bHQubWFwOworICAgICAgICAgICAgICAgIHZhciBvdXRwdXRS
ZXNvdXJjZXMgPSBbXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciB1cmwgaW4gbWFwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmxp
bmtpZnlVUkwodXJsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFt1cmxdID4gMSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9ICIgKCIgKyBtYXBbdXJsXSArICIgdXNlcyki
OworICAgICAgICAgICAgICAgICAgICBvdXRwdXRSZXNvdXJjZXMucHVzaCh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5zY29yZSAtPSB0aGlzLmdldFZhbHVlKCJTY29yZVBlcklt
YWdlVXNlIikgKiBtYXBbdXJsXTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnR5cGUgPSBX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0LlR5cGUuSGludDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgdG9wTWVzc2FnZS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuQXVk
aXRSdWxlcy5hcnJheUFzVUwob3V0cHV0UmVzb3VyY2VzKSk7CisgICAgICAgICAgICB9IGNhdGNo
KGUpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKKyAgICAgICAgICAgIH0gZmlu
YWxseSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJvdXRpbmUoKQorICAgICAgICB7CisgICAg
ICAgICAgICB2YXIgaW1hZ2VzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImltZyIp
OworICAgICAgICAgICAgY29uc3Qgd2lkdGhSZWdFeHAgPSAvd2lkdGhbXjo7XSo6L2dpbTsKKyAg
ICAgICAgICAgIGNvbnN0IGhlaWdodFJlZ0V4cCA9IC9oZWlnaHRbXjo7XSo6L2dpbTsKKworICAg
ICAgICAgICAgZnVuY3Rpb24gaGFzRGltZW5zaW9uKGVsZW1lbnQsIGNzc1RleHQsIHJ1bGVzLCBy
ZWdleHAsIGF0dHJpYnV0ZU5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5hdHRy
aWJ1dGVzLmdldE5hbWVkSXRlbShhdHRyaWJ1dGVOYW1lKSAhPSBudWxsIHx8IChjc3NUZXh0ICYm
IGNzc1RleHQubWF0Y2gocmVnZXhwKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICAgICAgICAgICAgaWYgKCFydWxlcykKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVzLml0ZW0oaSkuc3R5bGUu
Y3NzVGV4dC5tYXRjaChyZWdleHApKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gaGFzV2lkdGgoZWxlbWVudCwgY3Nz
VGV4dCwgcnVsZXMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFzRGltZW5zaW9uKGVsZW1l
bnQsIGNzc1RleHQsIHJ1bGVzLCB3aWR0aFJlZ0V4cCwgIndpZHRoIik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIGhhc0hlaWdodChlbGVtZW50LCBjc3NUZXh0LCBydWxl
cykgeworICAgICAgICAgICAgICAgIHJldHVybiBoYXNEaW1lbnNpb24oZWxlbWVudCwgY3NzVGV4
dCwgcnVsZXMsIGhlaWdodFJlZ0V4cCwgImhlaWdodCIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2YXIgdXJsVG9Ob0RpbWVuc2lvbkNvdW50ID0ge307CisgICAgICAgICAgICB2YXIg
Zm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1hZ2VzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGltYWdlID0gaW1hZ2VzW2ldOworICAg
ICAgICAgICAgICAgIGlmICghaW1hZ2Uuc3JjKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5n
ZXRDb21wdXRlZFN0eWxlKGltYWdlKS5nZXRQcm9wZXJ0eVZhbHVlKCJwb3NpdGlvbiIpOworICAg
ICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PT0gImFic29sdXRlIikKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdmFyIGNzc1RleHQgPSAoaW1hZ2Uuc3R5
bGUgJiYgaW1hZ2Uuc3R5bGUuY3NzVGV4dCkgPyBpbWFnZS5zdHlsZS5jc3NUZXh0IDogIiI7Cisg
ICAgICAgICAgICAgICAgdmFyIHJ1bGVzID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0TWF0Y2hl
ZENTU1J1bGVzKGltYWdlLCAiIiwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNXaWR0
aChpbWFnZSwgY3NzVGV4dCwgcnVsZXMpIHx8ICFoYXNIZWlnaHQoaW1hZ2UsIGNzc1RleHQsIHJ1
bGVzKSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh1cmxUb05vRGltZW5zaW9uQ291bnQuaGFzT3duUHJvcGVydHkoaW1hZ2Uuc3Jj
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICsrdXJsVG9Ob0RpbWVuc2lvbkNvdW50W2ltYWdl
LnNyY107CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVybFRvTm9EaW1lbnNpb25Db3VudFtpbWFnZS5zcmNdID0gMTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZm91bmQgPyB7dG90YWxJbWFnZXM6
IGltYWdlcy5sZW5ndGgsIG1hcDogdXJsVG9Ob0RpbWVuc2lvbkNvdW50fSA6IG51bGw7CisgICAg
ICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5ldmFsdWF0ZUluVGFyZ2V0
V2luZG93KHJvdXRpbmUsIGV2YWxDYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICB9Cit9CisKK1dl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLkltYWdlRGltZW5zaW9uc1J1bGUucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUucHJvdG90eXBlOworCisKK1dlYkluc3BlY3Rv
ci5BdWRpdFJ1bGVzLkNzc0luSGVhZFJ1bGUgPSBmdW5jdGlvbihwYXJhbWV0ZXJzT2JqZWN0KQor
eworICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUuY2FsbCh0aGlzLCAicGFnZS1jc3NpbmhlYWQi
LCAiUHV0IENTUyBpbiB0aGUgZG9jdW1lbnQgaGVhZCIsIHBhcmFtZXRlcnNPYmplY3QpOworfQor
CitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Dc3NJbkhlYWRSdWxlLnByb3RvdHlwZSA9IHsKKyAg
ICBkb1J1bjogZnVuY3Rpb24ocmVzb3VyY2VzLCByZXN1bHQsIGNhbGxiYWNrKQorICAgIHsKKyAg
ICAgICAgZnVuY3Rpb24gZXZhbENhbGxiYWNrKGV2YWxSZXN1bHQsIGlzRXhjZXB0aW9uKQorICAg
ICAgICB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmIChpc0V4Y2VwdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghZXZh
bFJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJl
c3VsdC5zY29yZSA9IDEwMDsKKyAgICAgICAgICAgICAgICB2YXIgb3V0cHV0TWVzc2FnZXMgPSBb
XTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciB1cmwgaW4gZXZhbFJlc3VsdCkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgdXJsVmlvbGF0aW9ucyA9IGV2YWxSZXN1bHRbdXJsXTsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHRvcE1lc3NhZ2UgPSByZXN1bHQuYXBwZW5kQ2hpbGQoCisgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcuc3ByaW50ZigiQ1NTIGluIHRoZSAlcyBkb2N1bWVu
dCBib2R5IGFkdmVyc2VseSBpbXBhY3RzIHJlbmRlcmluZyBwZXJmb3JtYW5jZS4iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMubGlua2lmeVVSTCh1cmwp
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh1cmxWaW9sYXRpb25zWzBdKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRNZXNzYWdlcy5wdXNoKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZy5zcHJpbnRmKCIlcyBzdHlsZSBibG9jayhzKSBpbiB0aGUgYm9keSBz
aG91bGQgYmUgbW92ZWQgdG8gdGhlIGRvY3VtZW50IGhlYWQuIiwgdXJsVmlvbGF0aW9uc1swXSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNjb3JlIC09IHRoaXMuZ2V0VmFsdWUo
IklubGluZVVSTFNjb3JlIikgKiB1cmxWaW9sYXRpb25zWzBdOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXJsVmlvbGF0aW9u
c1sxXS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0TWVzc2Fn
ZXMucHVzaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuc3ByaW50ZigiTGlu
ayBub2RlICVzIHNob3VsZCBiZSBtb3ZlZCB0byB0aGUgZG9jdW1lbnQgaGVhZCIsIFdlYkluc3Bl
Y3Rvci5BdWRpdFJ1bGVzLmxpbmtpZnlVUkwodXJsVmlvbGF0aW9uc1sxXSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2NvcmUgLT0gdGhpcy5n
ZXRWYWx1ZSgiSW5saW5lU3R5bGVzaGVldFNjb3JlIikgKiB1cmxWaW9sYXRpb25zWzFdOworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudHlwZSA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVSZXN1
bHQuVHlwZS5IaW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0b3BNZXNz
YWdlLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmFycmF5QXNVTChvdXRwdXRN
ZXNzYWdlcykpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgY29u
c29sZS5sb2coZSk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGNh
bGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiByb3V0aW5lKCkKKyAgICAgICAgeworICAgICAgICAgICAgZnVuY3Rpb24gYWxsVmlld3Mo
KSB7CisgICAgICAgICAgICAgICAgdmFyIHZpZXdzID0gW2RvY3VtZW50LmRlZmF1bHRWaWV3XTsK
KyAgICAgICAgICAgICAgICB2YXIgY3VyVmlldyA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUg
KGN1clZpZXcgPCB2aWV3cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXcg
PSB2aWV3c1tjdXJWaWV3XTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZyYW1lcyA9IHZpZXcu
ZnJhbWVzOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lcy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lc1tpXSAhPT0g
dmlldykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3cy5wdXNoKGZyYW1lc1tpXSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytjdXJWaWV3Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdmlld3M7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciB2aWV3cyA9IGFsbFZpZXdzKCk7CisgICAgICAgICAg
ICB2YXIgdXJsVG9WaW9sYXRpb25zQXJyYXkgPSB7fTsKKyAgICAgICAgICAgIHZhciBmb3VuZCA9
IGZhbHNlOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3cy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgICB2YXIgdmlldyA9IHZpZXdzW2ldOworICAgICAgICAgICAgICBp
ZiAoIXZpZXcuZG9jdW1lbnQpCisgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgICB2YXIgaW5saW5lU3R5bGVzID0gdmlldy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs
KCJib2R5IHN0eWxlIik7CisgICAgICAgICAgICAgIHZhciBpbmxpbmVTdHlsZXNoZWV0cyA9IHZp
ZXcuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgKKyAgICAgICAgICAgICAgICAgICJib2R5IGxp
bmtbcmVsfj0nc3R5bGVzaGVldCddW2hyZWZdIik7CisgICAgICAgICAgICAgIGlmICghaW5saW5l
U3R5bGVzLmxlbmd0aCAmJiAhaW5saW5lU3R5bGVzaGVldHMubGVuZ3RoKQorICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAg
ICAgICB2YXIgaW5saW5lU3R5bGVzaGVldEhyZWZzID0gW107CisgICAgICAgICAgICAgIGZvciAo
dmFyIGogPSAwOyBqIDwgaW5saW5lU3R5bGVzaGVldHMubGVuZ3RoOyArK2opCisgICAgICAgICAg
ICAgICAgICBpbmxpbmVTdHlsZXNoZWV0SHJlZnMucHVzaChpbmxpbmVTdHlsZXNoZWV0c1tqXS5o
cmVmKTsKKworICAgICAgICAgICAgICB1cmxUb1Zpb2xhdGlvbnNBcnJheVt2aWV3LmxvY2F0aW9u
LmhyZWZdID0KKyAgICAgICAgICAgICAgICAgIFtpbmxpbmVTdHlsZXMubGVuZ3RoLCBpbmxpbmVT
dHlsZXNoZWV0SHJlZnNdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZvdW5k
ID8gdXJsVG9WaW9sYXRpb25zQXJyYXkgOiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuZXZhbHVhdGVJblRhcmdldFdpbmRvdyhyb3V0aW5lLCBldmFs
Q2FsbGJhY2spOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ3NzSW5IZWFk
UnVsZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5wcm90b3R5
cGU7CisKKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3R5bGVzU2NyaXB0c09yZGVyUnVsZSA9
IGZ1bmN0aW9uKHBhcmFtZXRlcnNPYmplY3QpCit7CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVs
ZS5jYWxsKHRoaXMsICJwYWdlLXN0eWxlc2NyaXB0b3JkZXIiLCAiT3B0aW1pemUgdGhlIG9yZGVy
IG9mIHN0eWxlcyBhbmQgc2NyaXB0cyIsIHBhcmFtZXRlcnNPYmplY3QpOworfQorCitXZWJJbnNw
ZWN0b3IuQXVkaXRSdWxlcy5TdHlsZXNTY3JpcHRzT3JkZXJSdWxlLnByb3RvdHlwZSA9IHsKKyAg
ICBkb1J1bjogZnVuY3Rpb24ocmVzb3VyY2VzLCByZXN1bHQsIGNhbGxiYWNrKQorICAgIHsKKyAg
ICAgICAgZnVuY3Rpb24gZXZhbENhbGxiYWNrKGV2YWxSZXN1bHQsIGlzRXhjZXB0aW9uKQorICAg
ICAgICB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmIChpc0V4Y2VwdGlv
bikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghZXZh
bFJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAg
cmVzdWx0LnNjb3JlID0gMTAwOworICAgICAgICAgICAgICAgIHZhciBsYXRlQ3NzVXJscyA9IGV2
YWxSZXN1bHRbJ2xhdGUnXTsKKyAgICAgICAgICAgICAgICBpZiAobGF0ZUNzc1VybHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGxhdGVNZXNzYWdlID0gcmVzdWx0LmFwcGVuZENoaWxkKAor
ICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBmb2xsb3dpbmcgZXh0ZXJuYWwgQ1NTIGZpbGVz
IHdlcmUgaW5jbHVkZWQgYWZ0ZXIgJyArCisgICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXh0
ZXJuYWwgSmF2YVNjcmlwdCBmaWxlIGluIHRoZSBkb2N1bWVudCBoZWFkLiBUbyAnICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICdlbnN1cmUgQ1NTIGZpbGVzIGFyZSBkb3dubG9hZGVkIGluIHBh
cmFsbGVsLCBhbHdheXMgJyArCisgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZSBleHRl
cm5hbCBDU1MgYmVmb3JlIGV4dGVybmFsIEphdmFTY3JpcHQuJyk7CisgICAgICAgICAgICAgICAg
ICAgIGxhdGVNZXNzYWdlLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmFycmF5
QXNVTChsYXRlQ3NzVXJscywgdHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2Nv
cmUgLT0gdGhpcy5nZXRWYWx1ZSgiSW5saW5lQmV0d2VlblJlc291cmNlc1Njb3JlIikgKiBsYXRl
Q3NzVXJscy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5UeXBlLlZpb2xhdGlvbjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKGV2YWxSZXN1bHRbJ2Nzc0JlZm9yZUlubGluZUNvdW50J10p
IHsKKyAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGV2YWxSZXN1bHRbJ2Nzc0JlZm9yZUlu
bGluZUNvdW50J107CisgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kQ2hpbGQoY291bnQg
KyAnIGlubGluZSBzY3JpcHQgYmxvY2snICsKKyAgICAgICAgICAgICAgICAgICAgICAoY291bnQg
PiAxID8gJ3Mgd2VyZScgOiAnIHdhcycpICsgJyBmb3VuZCBpbiB0aGUgaGVhZCBiZXR3ZWVuIGFu
ICcgKworICAgICAgICAgICAgICAgICAgICAgICdleHRlcm5hbCBDU1MgZmlsZSBhbmQgYW5vdGhl
ciByZXNvdXJjZS4gVG8gYWxsb3cgcGFyYWxsZWwgJyArCisgICAgICAgICAgICAgICAgICAgICAg
J2Rvd25sb2FkaW5nLCBtb3ZlIHRoZSBpbmxpbmUgc2NyaXB0IGJlZm9yZSB0aGUgZXh0ZXJuYWwg
Q1NTICcgKworICAgICAgICAgICAgICAgICAgICAgICdmaWxlLCBvciBhZnRlciB0aGUgbmV4dCBy
ZXNvdXJjZS4nKTsKKyAgICAgICAgICAgICAgICAgIHJlc3VsdC5zY29yZSAtPSB0aGlzLmdldFZh
bHVlKCJDU1NBZnRlckpTVVJMU2NvcmUiKSAqIGNvdW50OworICAgICAgICAgICAgICAgICAgcmVz
dWx0LnR5cGUgPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0LlR5cGUuVmlvbGF0aW9uOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAg
ICAgIGNvbnNvbGUubG9nKGUpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAg
ICAgICBjYWxsYmFjayhyZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gcm91dGluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBsYXRlU3R5
bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgKKyAgICAgICAgICAgICAgICAiaGVhZCBz
Y3JpcHRbc3JjXSB+IGxpbmtbcmVsfj0nc3R5bGVzaGVldCddW2hyZWZdIik7CisgICAgICAgICAg
ICB2YXIgc3R5bGVzQmVmb3JlSW5saW5lU2NyaXB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFs
bCgKKyAgICAgICAgICAgICAgICAiaGVhZCBsaW5rW3JlbH49J3N0eWxlc2hlZXQnXVtocmVmXSB+
IHNjcmlwdDpub3QoW3NyY10pIik7CisKKyAgICAgICAgICAgIHZhciByZXN1bHRPYmplY3Q7Cisg
ICAgICAgICAgICBpZiAoIWxhdGVTdHlsZXMubGVuZ3RoICYmICFzdHlsZXNCZWZvcmVJbmxpbmVT
Y3JpcHQubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJlc3VsdE9iamVjdCA9IG51bGw7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHRPYmplY3QgPSB7fTsKKyAgICAg
ICAgICAgICAgICBpZiAobGF0ZVN0eWxlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgIGxh
dGVTdHlsZVVybHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bGF0ZVN0eWxlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICBsYXRlU3R5bGVV
cmxzLnB1c2gobGF0ZVN0eWxlc1tpXS5ocmVmKTsKKyAgICAgICAgICAgICAgICAgIHJlc3VsdE9i
amVjdFsibGF0ZSJdID0gbGF0ZVN0eWxlVXJsczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0WyJjc3NCZWZvcmVJbmxpbmVDb3VudCJdID0gc3R5bGVzQmVm
b3JlSW5saW5lU2NyaXB0Lmxlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biByZXN1bHRPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5ldmFsdWF0ZUluVGFyZ2V0V2luZG93KHJvdXRpbmUsIGV2YWxDYWxsYmFjay5iaW5kKHRo
aXMpKTsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLlN0eWxlc1NjcmlwdHNP
cmRlclJ1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGUucHJv
dG90eXBlOworCisKK1dlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tpZVJ1bGVCYXNlID0gZnVu
Y3Rpb24oaWQsIG5hbWUsIHBhcmFtZXRlcnNPYmplY3QpCit7CisgICAgV2ViSW5zcGVjdG9yLkF1
ZGl0UnVsZS5jYWxsKHRoaXMsIGlkLCBuYW1lLCBwYXJhbWV0ZXJzT2JqZWN0KTsKK30KKworV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llUnVsZUJhc2UucHJvdG90eXBlID0geworICAgIGRv
UnVuOiBmdW5jdGlvbihyZXNvdXJjZXMsIHJlc3VsdCwgY2FsbGJhY2spCisgICAgeworICAgICAg
ICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgIGZ1bmN0aW9uIHJlc3VsdENhbGxiYWNrKHJlY2Vp
dmVkQ29va2llcywgaXNBZHZhbmNlZCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICBzZWxmLnByb2Nlc3NDb29raWVzKGlzQWR2YW5jZWQgPyByZWNlaXZlZENvb2tpZXMgOiBb
XSwgcmVzb3VyY2VzLCByZXN1bHQpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAg
ICAgICAgICAgY29uc29sZS5sb2coZSk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgV2ViSW5zcGVjdG9yLkNvb2tpZXMuZ2V0Q29va2llc0FzeW5jKHJlc3VsdENhbGxiYWNr
KTsKKyAgICB9LAorCisgICAgbWFwUmVzb3VyY2VDb29raWVzOiBmdW5jdGlvbihyZXNvdXJjZXNC
eURvbWFpbiwgYWxsQ29va2llcywgY2FsbGJhY2spCisgICAgeworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFsbENvb2tpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAodmFy
IHJlc291cmNlRG9tYWluIGluIHJlc291cmNlc0J5RG9tYWluKSB7CisgICAgICAgICAgICAgICAg
aWYgKFdlYkluc3BlY3Rvci5Db29raWVzLmNvb2tpZURvbWFpbk1hdGNoZXNSZXNvdXJjZURvbWFp
bihhbGxDb29raWVzW2ldLmRvbWFpbiwgcmVzb3VyY2VEb21haW4pKQorICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9jYWxsYmFja0ZvclJlc291cmNlQ29va2llUGFpcnMocmVzb3VyY2VzQnlEb21h
aW5bcmVzb3VyY2VEb21haW5dLCBhbGxDb29raWVzW2ldLCBjYWxsYmFjayk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgX2NhbGxiYWNrRm9yUmVzb3VyY2VDb29raWVQ
YWlyczogZnVuY3Rpb24ocmVzb3VyY2VzLCBjb29raWUsIGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgaWYgKCFyZXNvdXJjZXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcmVzb3VyY2VzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoV2Vi
SW5zcGVjdG9yLkNvb2tpZXMuY29va2llTWF0Y2hlc1Jlc291cmNlVVJMKGNvb2tpZSwgcmVzb3Vy
Y2VzW2ldLnVybCkpCisgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzb3VyY2VzW2ldLCBjb29r
aWUpOworICAgICAgICB9CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5Db29r
aWVSdWxlQmFzZS5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZS5w
cm90b3R5cGU7CisKKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llU2l6ZVJ1bGUgPSBm
dW5jdGlvbihwYXJhbWV0ZXJzT2JqZWN0KQoreworICAgIFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVz
LkNvb2tpZVJ1bGVCYXNlLmNhbGwodGhpcywgImh0dHAtY29va2llc2l6ZSIsICJNaW5pbWl6ZSBj
b29raWUgc2l6ZSIsIHBhcmFtZXRlcnNPYmplY3QpOworfQorCitXZWJJbnNwZWN0b3IuQXVkaXRS
dWxlcy5Db29raWVTaXplUnVsZS5wcm90b3R5cGUgPSB7CisgICAgX2F2ZXJhZ2U6IGZ1bmN0aW9u
KGNvb2tpZUFycmF5KQorICAgIHsKKyAgICAgICAgdmFyIHRvdGFsID0gMDsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBjb29raWVBcnJheS5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIHRv
dGFsICs9IGNvb2tpZUFycmF5W2ldLnNpemU7CisgICAgICAgIHJldHVybiBjb29raWVBcnJheS5s
ZW5ndGggPyBNYXRoLnJvdW5kKHRvdGFsIC8gY29va2llQXJyYXkubGVuZ3RoKSA6IDA7CisgICAg
fSwKKworICAgIF9tYXg6IGZ1bmN0aW9uKGNvb2tpZUFycmF5KQorICAgIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29va2llQXJyYXkubGVu
Z3RoOyArK2kpCisgICAgICAgICAgICByZXN1bHQgPSBNYXRoLm1heChjb29raWVBcnJheVtpXS5z
aXplLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBwcm9j
ZXNzQ29va2llczogZnVuY3Rpb24oYWxsQ29va2llcywgcmVzb3VyY2VzLCByZXN1bHQpCisgICAg
eworICAgICAgICBmdW5jdGlvbiBtYXhTaXplU29ydGVyKGEsIGIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBiLm1heENvb2tpZVNpemUgLSBhLm1heENvb2tpZVNpemU7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBhdmdTaXplU29ydGVyKGEsIGIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBiLmF2Z0Nvb2tpZVNpemUgLSBhLmF2Z0Nvb2tpZVNpemU7CisgICAg
ICAgIH0KKworICAgICAgICB2YXIgY29va2llc1BlclJlc291cmNlRG9tYWluID0ge307CisKKyAg
ICAgICAgZnVuY3Rpb24gY29sbGVjdG9yQ2FsbGJhY2socmVzb3VyY2UsIGNvb2tpZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIGNvb2tpZXMgPSBjb29raWVzUGVyUmVzb3VyY2VEb21haW5b
cmVzb3VyY2UuZG9tYWluXTsKKyAgICAgICAgICAgIGlmICghY29va2llcykgeworICAgICAgICAg
ICAgICAgIGNvb2tpZXMgPSBbXTsKKyAgICAgICAgICAgICAgICBjb29raWVzUGVyUmVzb3VyY2VE
b21haW5bcmVzb3VyY2UuZG9tYWluXSA9IGNvb2tpZXM7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjb29raWVzLnB1c2goY29va2llKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYWxs
Q29va2llcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNvcnRl
ZENvb2tpZVNpemVzID0gW107CisKKyAgICAgICAgdmFyIGRvbWFpblRvUmVzb3VyY2VzTWFwID0g
V2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuZ2V0RG9tYWluVG9SZXNvdXJjZXNNYXAocmVzb3VyY2Vz
LAorICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlVS
TFJlZ0V4cCwKKyAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgdmFyIG1hdGNoaW5nUmVz
b3VyY2VEYXRhID0ge307CisgICAgICAgIHRoaXMubWFwUmVzb3VyY2VDb29raWVzKGRvbWFpblRv
UmVzb3VyY2VzTWFwLCBhbGxDb29raWVzLCBjb2xsZWN0b3JDYWxsYmFjay5iaW5kKHRoaXMpKTsK
KworICAgICAgICByZXN1bHQuc2NvcmUgPSAxMDA7CisgICAgICAgIGZvciAodmFyIHJlc291cmNl
RG9tYWluIGluIGNvb2tpZXNQZXJSZXNvdXJjZURvbWFpbikgeworICAgICAgICAgICAgdmFyIGNv
b2tpZXMgPSBjb29raWVzUGVyUmVzb3VyY2VEb21haW5bcmVzb3VyY2VEb21haW5dOworICAgICAg
ICAgICAgc29ydGVkQ29va2llU2l6ZXMucHVzaCh7CisgICAgICAgICAgICAgICAgZG9tYWluOiBy
ZXNvdXJjZURvbWFpbiwKKyAgICAgICAgICAgICAgICBhdmdDb29raWVTaXplOiB0aGlzLl9hdmVy
YWdlKGNvb2tpZXMpLAorICAgICAgICAgICAgICAgIG1heENvb2tpZVNpemU6IHRoaXMuX21heChj
b29raWVzKQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGF2Z0FsbENv
b2tpZXNTaXplID0gdGhpcy5fYXZlcmFnZShhbGxDb29raWVzKTsKKworICAgICAgICB2YXIgaHVn
ZUNvb2tpZURvbWFpbnMgPSBbXTsKKyAgICAgICAgc29ydGVkQ29va2llU2l6ZXMuc29ydChtYXhT
aXplU29ydGVyKTsKKworICAgICAgICB2YXIgbWF4Qnl0ZXNUaHJlc2hvbGQgPSB0aGlzLmdldFZh
bHVlKCJNYXhCeXRlc1RocmVzaG9sZCIpOworICAgICAgICB2YXIgbWluQnl0ZXNUaHJlc2hvbGQg
PSB0aGlzLmdldFZhbHVlKCJNaW5CeXRlc1RocmVzaG9sZCIpOworCisgICAgICAgIGZvciAodmFy
IGkgPSAwLCBsZW4gPSBzb3J0ZWRDb29raWVTaXplcy5sZW5ndGg7IGkgPCBsZW47ICsraSkgewor
ICAgICAgICAgICAgdmFyIG1heENvb2tpZVNpemUgPSBzb3J0ZWRDb29raWVTaXplc1tpXS5tYXhD
b29raWVTaXplOworICAgICAgICAgICAgaWYgKG1heENvb2tpZVNpemUgPiBtYXhCeXRlc1RocmVz
aG9sZCkKKyAgICAgICAgICAgICAgICBodWdlQ29va2llRG9tYWlucy5wdXNoKHNvcnRlZENvb2tp
ZVNpemVzW2ldLmRvbWFpbiArICI6ICIgKyBOdW1iZXIuYnl0ZXNUb1N0cmluZyhtYXhDb29raWVT
aXplKSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYmlnQXZnQ29va2llRG9tYWlucyA9IFtd
OworICAgICAgICBzb3J0ZWRDb29raWVTaXplcy5zb3J0KGF2Z1NpemVTb3J0ZXIpOworICAgICAg
ICBmb3IgKHZhciBpID0gMCwgbGVuID0gc29ydGVkQ29va2llU2l6ZXMubGVuZ3RoOyBpIDwgbGVu
OyArK2kpIHsKKyAgICAgICAgICAgIHZhciBkb21haW4gPSBzb3J0ZWRDb29raWVTaXplc1tpXS5k
b21haW47CisgICAgICAgICAgICB2YXIgYXZnQ29va2llU2l6ZSA9IHNvcnRlZENvb2tpZVNpemVz
W2ldLmF2Z0Nvb2tpZVNpemU7CisgICAgICAgICAgICBpZiAoYXZnQ29va2llU2l6ZSA+IG1pbkJ5
dGVzVGhyZXNob2xkICYmIGF2Z0Nvb2tpZVNpemUgPCBtYXhCeXRlc1RocmVzaG9sZCkKKyAgICAg
ICAgICAgICAgICBiaWdBdmdDb29raWVEb21haW5zLnB1c2goZG9tYWluICsgIjogIiArIE51bWJl
ci5ieXRlc1RvU3RyaW5nKGF2Z0Nvb2tpZVNpemUpKTsKKyAgICAgICAgfQorICAgICAgICByZXN1
bHQuYXBwZW5kQ2hpbGQoIlRoZSBhdmVyYWdlIGNvb2tpZSBzaXplIGZvciBhbGwgcmVxdWVzdHMg
b24gdGhpcyBwYWdlIGlzICIgKyBOdW1iZXIuYnl0ZXNUb1N0cmluZyhhdmdBbGxDb29raWVzU2l6
ZSkpOworCisgICAgICAgIHZhciBtZXNzYWdlOworICAgICAgICBpZiAoaHVnZUNvb2tpZURvbWFp
bnMubGVuZ3RoKSB7CisgICAgICAgICAgICByZXN1bHQuc2NvcmUgPSA3NTsKKyAgICAgICAgICAg
IHJlc3VsdC50eXBlID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5UeXBlLlZpb2xhdGlv
bjsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSByZXN1bHQuYXBwZW5kQ2hpbGQoCisgICAgICAgICAg
ICAgICAgU3RyaW5nLnNwcmludGYoIlRoZSBmb2xsb3dpbmcgZG9tYWlucyBoYXZlIGEgY29va2ll
IHNpemUgaW4gZXhjZXNzIG9mICVkICIgKworICAgICAgICAgICAgICAgICIgYnl0ZXMuIFRoaXMg
aXMgaGFybWZ1bCBiZWNhdXNlIHJlcXVlc3RzIHdpdGggY29va2llcyBsYXJnZXIgdGhhbiAxS0Ii
ICsKKyAgICAgICAgICAgICAgICAiIHR5cGljYWxseSBjYW5ub3QgZml0IGludG8gYSBzaW5nbGUg
bmV0d29yayBwYWNrZXQuIiwgbWF4Qnl0ZXNUaHJlc2hvbGQpKTsKKyAgICAgICAgICAgIG1lc3Nh
Z2UuYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuYXJyYXlBc1VMKGh1Z2VDb29r
aWVEb21haW5zKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYmlnQXZnQ29va2llRG9tYWlu
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMuc2NvcmUgLT0gTWF0aC5tYXgoMCwgYXZnQWxs
Q29va2llc1NpemUgLSBtaW5CeXRlc1RocmVzaG9sZCkgLworICAgICAgICAgICAgICAgIChtaW5C
eXRlc1RocmVzaG9sZCAtIG1pbkJ5dGVzVGhyZXNob2xkKSAvIHRoaXMuZ2V0VmFsdWUoIlRvdGFs
UG9pbnRzIik7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50eXBlKQorICAgICAgICAgICAgICAg
IHJlc3VsdC50eXBlID0gV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3VsdC5UeXBlLkhpbnQ7Cisg
ICAgICAgICAgICBtZXNzYWdlID0gcmVzdWx0LmFwcGVuZENoaWxkKAorICAgICAgICAgICAgICAg
IFN0cmluZy5zcHJpbnRmKCJUaGUgZm9sbG93aW5nIGRvbWFpbnMgaGF2ZSBhbiBhdmVyYWdlIGNv
b2tpZSBzaXplIGluIGV4Y2VzcyBvZiAlZCIgKworICAgICAgICAgICAgICAgICAiIGJ5dGVzLiBS
ZWR1Y2luZyB0aGUgc2l6ZSBvZiBjb29raWVzIiArCisgICAgICAgICAgICAgICAgICIgZm9yIHRo
ZXNlIGRvbWFpbnMgY2FuIHJlZHVjZSB0aGUgdGltZSBpdCB0YWtlcyB0byBzZW5kIHJlcXVlc3Rz
LiIsIG1pbkJ5dGVzVGhyZXNob2xkKSk7CisgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZENoaWxk
KFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLmFycmF5QXNVTChiaWdBdmdDb29raWVEb21haW5zKSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWJpZ0F2Z0Nvb2tpZURvbWFpbnMubGVuZ3RoICYm
ICFodWdlQ29va2llRG9tYWlucy5sZW5ndGgpCisgICAgICAgICAgICByZXN1bHQuc2NvcmUgPSBX
ZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeVJlc3VsdC5TY29yZU5BOworICAgIH0KK30KKworV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llU2l6ZVJ1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9
IFdlYkluc3BlY3Rvci5BdWRpdFJ1bGVzLkNvb2tpZVJ1bGVCYXNlLnByb3RvdHlwZTsKKworCitX
ZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5TdGF0aWNDb29raWVsZXNzUnVsZSA9IGZ1bmN0aW9uKHBh
cmFtZXRlcnNPYmplY3QpCit7CisgICAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ29va2llUnVs
ZUJhc2UuY2FsbCh0aGlzLCAiaHR0cC1zdGF0aWNjb29raWVsZXNzIiwgIlNlcnZlIHN0YXRpYyBj
b250ZW50IGZyb20gYSBjb29raWVsZXNzIGRvbWFpbiIsIHBhcmFtZXRlcnNPYmplY3QpOworfQor
CitXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5TdGF0aWNDb29raWVsZXNzUnVsZS5wcm90b3R5cGUg
PSB7CisgICAgcHJvY2Vzc0Nvb2tpZXM6IGZ1bmN0aW9uKGFsbENvb2tpZXMsIHJlc291cmNlcywg
cmVzdWx0KQorICAgIHsKKyAgICAgICAgdmFyIGRvbWFpblRvUmVzb3VyY2VzTWFwID0gV2ViSW5z
cGVjdG9yLkF1ZGl0UnVsZXMuZ2V0RG9tYWluVG9SZXNvdXJjZXNNYXAocmVzb3VyY2VzLAorICAg
ICAgICAgICAgICAgIFtXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TdHlsZXNoZWV0LAorICAg
ICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5JbWFnZV0sCisgICAgICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLlVSTFJlZ0V4cCwKKyAgICAgICAgICAgICAgICB0cnVlKTsK
KyAgICAgICAgdmFyIHRvdGFsU3RhdGljUmVzb3VyY2VzID0gMDsKKyAgICAgICAgdmFyIG1pblJl
c291cmNlcyA9IHRoaXMuZ2V0VmFsdWUoIk1pblJlc291cmNlcyIpOworICAgICAgICBmb3IgKHZh
ciBkb21haW4gaW4gZG9tYWluVG9SZXNvdXJjZXNNYXApCisgICAgICAgICAgICB0b3RhbFN0YXRp
Y1Jlc291cmNlcyArPSBkb21haW5Ub1Jlc291cmNlc01hcFtkb21haW5dLmxlbmd0aDsKKyAgICAg
ICAgaWYgKHRvdGFsU3RhdGljUmVzb3VyY2VzIDwgbWluUmVzb3VyY2VzKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB2YXIgbWF0Y2hpbmdSZXNvdXJjZURhdGEgPSB7fTsKKyAgICAgICAg
dGhpcy5tYXBSZXNvdXJjZUNvb2tpZXMoZG9tYWluVG9SZXNvdXJjZXNNYXAsIGFsbENvb2tpZXMs
IHRoaXMuX2NvbGxlY3RvckNhbGxiYWNrLmJpbmQodGhpcywgbWF0Y2hpbmdSZXNvdXJjZURhdGEp
KTsKKworICAgICAgICB2YXIgYmFkVXJscyA9IFtdOworICAgICAgICB2YXIgY29va2llQnl0ZXMg
PSAwOworICAgICAgICBmb3IgKHZhciB1cmwgaW4gbWF0Y2hpbmdSZXNvdXJjZURhdGEpIHsKKyAg
ICAgICAgICAgIGJhZFVybHMucHVzaCh1cmwpOworICAgICAgICAgICAgY29va2llQnl0ZXMgKz0g
bWF0Y2hpbmdSZXNvdXJjZURhdGFbdXJsXQorICAgICAgICB9CisgICAgICAgIGlmIChiYWRVcmxz
Lmxlbmd0aCA8IG1pblJlc291cmNlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBy
ZXN1bHQuc2NvcmUgPSAxMDA7CisgICAgICAgIHZhciBiYWRQb2ludHMgPSBjb29raWVCeXRlcyAv
IDc1OworICAgICAgICB2YXIgdmlvbGF0aW9uUGN0ID0gTWF0aC5tYXgoYmFkVXJscy5sZW5ndGgg
LyB0b3RhbFN0YXRpY1Jlc291cmNlcywgMC42KTsKKyAgICAgICAgYmFkUG9pbnRzICo9IHZpb2xh
dGlvblBjdDsKKyAgICAgICAgcmVzdWx0LnNjb3JlIC09IGJhZFBvaW50czsKKyAgICAgICAgcmVz
dWx0LnNjb3JlID0gTWF0aC5tYXgocmVzdWx0LnNjb3JlLCAwKTsKKyAgICAgICAgcmVzdWx0LnR5
cGUgPSBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0LlR5cGUuVmlvbGF0aW9uOworICAgICAg
ICByZXN1bHQuYXBwZW5kQ2hpbGQoU3RyaW5nLnNwcmludGYoIiVzIG9mIGNvb2tpZXMgd2VyZSBz
ZW50IHdpdGggdGhlIGZvbGxvd2luZyBzdGF0aWMgcmVzb3VyY2VzLiIsIE51bWJlci5ieXRlc1Rv
U3RyaW5nKGNvb2tpZUJ5dGVzKSkpOworICAgICAgICB2YXIgbWVzc2FnZSA9IHJlc3VsdC5hcHBl
bmRDaGlsZCgiU2VydmUgdGhlc2Ugc3RhdGljIHJlc291cmNlcyBmcm9tIGEgZG9tYWluIHRoYXQg
ZG9lcyBub3Qgc2V0IGNvb2tpZXM6Iik7CisgICAgICAgIG1lc3NhZ2UuYXBwZW5kQ2hpbGQoV2Vi
SW5zcGVjdG9yLkF1ZGl0UnVsZXMuYXJyYXlBc1VMKGJhZFVybHMsIHRydWUpKTsKKyAgICB9LAor
CisgICAgX2NvbGxlY3RvckNhbGxiYWNrOiBmdW5jdGlvbihtYXRjaGluZ1Jlc291cmNlRGF0YSwg
cmVzb3VyY2UsIGNvb2tpZSkKKyAgICB7CisgICAgICAgIG1hdGNoaW5nUmVzb3VyY2VEYXRhW3Jl
c291cmNlLnVybF0gPSAobWF0Y2hpbmdSZXNvdXJjZURhdGFbcmVzb3VyY2UudXJsXSB8fCAwKSAr
IGNvb2tpZS5zaXplOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuU3RhdGlj
Q29va2llbGVzc1J1bGUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGVzLkNvb2tpZVJ1bGVCYXNlLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9BdWRpdHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9BdWRpdHNQYW5lbC5qcwppbmRleCA2OTZkMTMyLi5mY2FkYjgyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0F1ZGl0c1BhbmVsLmpzCkBAIC0xMDUsNyArMTA1LDggQEAgV2ViSW5z
cGVjdG9yLkF1ZGl0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fYXVkaXRDYXRl
Z29yaWVzQnlJZCA9IHt9OwogICAgICAgICBmb3IgKHZhciBjYXRlZ29yeUN0b3JJRCBpbiBXZWJJ
bnNwZWN0b3IuQXVkaXRDYXRlZ29yaWVzKSB7CiAgICAgICAgICAgICB2YXIgYXVkaXRDYXRlZ29y
eSA9IG5ldyBXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yaWVzW2NhdGVnb3J5Q3RvcklEXSgpOwot
ICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZFthdWRpdENhdGVnb3J5LmlkXSA9IGF1ZGl0
Q2F0ZWdvcnk7CisgICAgICAgICAgICBhdWRpdENhdGVnb3J5Ll9pZCA9IGNhdGVnb3J5Q3RvcklE
OworICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzQnlJZFtjYXRlZ29yeUN0b3JJRF0gPSBhdWRp
dENhdGVnb3J5OwogICAgICAgICB9CiAgICAgfSwKIApAQCAtMTg1LDE1ICsxODYsMTMgQEAgV2Vi
SW5zcGVjdG9yLkF1ZGl0c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIF9yZWxvYWRSZXNvdXJj
ZXM6IGZ1bmN0aW9uKGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gbnVsbENhbGxi
YWNrKCkKLSAgICAgICAgewotICAgICAgICB9CiAgICAgICAgIHRoaXMuX3Jlc291cmNlVHJhY2tp
bmdDYWxsYmFjayA9IGNhbGxiYWNrOworCiAgICAgICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5y
ZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LmVuYWJsZVJlc291cmNlVHJhY2tpbmcoZmFsc2UpOwotICAgICAgICAgICAgdGhpcy5fdXBkYXRl
TGF1bmNoZXJWaWV3Q29udHJvbHMoKTsKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUxhdW5jaGVy
Vmlld0NvbnRyb2xzKHRydWUpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEluamVjdGVk
U2NyaXB0QWNjZXNzLmdldERlZmF1bHQoKS5ldmFsdWF0ZSgid2luZG93LmxvY2F0aW9uLnJlbG9h
ZCgpIiwgbnVsbENhbGxiYWNrKTsKKyAgICAgICAgICAgIEluamVjdGVkU2NyaXB0QWNjZXNzLmdl
dERlZmF1bHQoKS5ldmFsdWF0ZSgid2luZG93LmxvY2F0aW9uLnJlbG9hZCgpIiwgc3dpdGNoQ2Fs
bGJhY2spOwogICAgIH0sCiAKICAgICBfZGlkTWFpblJlc291cmNlTG9hZDogZnVuY3Rpb24oKQpA
QCAtMjM5LDcgKzIzOCw3IEBAIFdlYkluc3BlY3Rvci5BdWRpdHNQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5cGUuc2hvdy5jYWxsKHRoaXMpOwog
CiAgICAgICAgIHRoaXMuc2hvd1ZpZXcoKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlTGF1bmNoZXJW
aWV3Q29udHJvbHMoKTsKKyAgICAgICAgdGhpcy5fdXBkYXRlTGF1bmNoZXJWaWV3Q29udHJvbHMo
SW5zcGVjdG9yQmFja2VuZC5yZXNvdXJjZVRyYWNraW5nRW5hYmxlZCgpKTsKICAgICB9LAogCiAg
ICAgYXR0YWNoOiBmdW5jdGlvbigpCkBAIC0yNTQsMTAgKzI1MywxMCBAQCBXZWJJbnNwZWN0b3Iu
QXVkaXRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnZpZXdzQ29udGFpbmVyRWxl
bWVudC5zdHlsZS5sZWZ0ID0gd2lkdGggKyAicHgiOwogICAgIH0sCiAKLSAgICBfdXBkYXRlTGF1
bmNoZXJWaWV3Q29udHJvbHM6IGZ1bmN0aW9uKCkKKyAgICBfdXBkYXRlTGF1bmNoZXJWaWV3Q29u
dHJvbHM6IGZ1bmN0aW9uKGlzVHJhY2tpbmcpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fbGF1
bmNoZXJWaWV3KQotICAgICAgICAgICAgdGhpcy5fbGF1bmNoZXJWaWV3LnVwZGF0ZVJlc291cmNl
VHJhY2tpbmdTdGF0ZSgpOworICAgICAgICAgICAgdGhpcy5fbGF1bmNoZXJWaWV3LnVwZGF0ZVJl
c291cmNlVHJhY2tpbmdTdGF0ZShpc1RyYWNraW5nKTsKICAgICB9LAogCiAgICAgX2NsZWFyQnV0
dG9uQ2xpY2tlZDogZnVuY3Rpb24oKQpAQCAtMjc4LDkgKzI3Nyw4IEBAIFdlYkluc3BlY3Rvci5B
dWRpdHNQYW5lbC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLlBhbmVsLnByb3Rv
dHlwZTsKIAogCiAKLVdlYkluc3BlY3Rvci5BdWRpdENhdGVnb3J5ID0gZnVuY3Rpb24oaWQsIGRp
c3BsYXlOYW1lKQorV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnkgPSBmdW5jdGlvbihkaXNwbGF5
TmFtZSkKIHsKLSAgICB0aGlzLl9pZCA9IGlkOwogICAgIHRoaXMuX2Rpc3BsYXlOYW1lID0gZGlz
cGxheU5hbWU7CiAgICAgdGhpcy5fcnVsZXMgPSBbXTsKIH0KQEAgLTI4OCw2ICsyODYsNyBAQCBX
ZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeSA9IGZ1bmN0aW9uKGlkLCBkaXNwbGF5TmFtZSkKIFdl
Ykluc3BlY3Rvci5BdWRpdENhdGVnb3J5LnByb3RvdHlwZSA9IHsKICAgICBnZXQgaWQoKQogICAg
IHsKKyAgICAgICAgLy8gdGhpcy5faWQgdmFsdWUgaXMgaW5qZWN0ZWQgYXQgY29uc3RydWN0aW9u
IHRpbWUuCiAgICAgICAgIHJldHVybiB0aGlzLl9pZDsKICAgICB9LAogCkBAIC0yOTgsNiArMjk3
LDcgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnkucHJvdG90eXBlID0gewogCiAgICAgZ2V0
IHJ1bGVDb3VudCgpCiAgICAgeworICAgICAgICB0aGlzLl9lbnN1cmVJbml0aWFsaXplZCgpOwog
ICAgICAgICByZXR1cm4gdGhpcy5fcnVsZXMubGVuZ3RoOwogICAgIH0sCiAKQEAgLTMwOCw4ICsz
MDgsMTggQEAgV2ViSW5zcGVjdG9yLkF1ZGl0Q2F0ZWdvcnkucHJvdG90eXBlID0gewogCiAgICAg
cnVuUnVsZXM6IGZ1bmN0aW9uKHJlc291cmNlcywgY2FsbGJhY2spCiAgICAgeworICAgICAgICB0
aGlzLl9lbnN1cmVJbml0aWFsaXplZCgpOwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRo
aXMuX3J1bGVzLmxlbmd0aDsgKytpKQogICAgICAgICAgICAgdGhpcy5fcnVsZXNbaV0ucnVuKHJl
c291cmNlcywgY2FsbGJhY2spOworICAgIH0sCisKKyAgICBfZW5zdXJlSW5pdGlhbGl6ZWQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHsKKyAgICAg
ICAgICAgIGlmICgiaW5pdGlhbGl6ZSIgaW4gdGhpcykKKyAgICAgICAgICAgICAgICB0aGlzLmlu
aXRpYWxpemUoKTsKKyAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAg
ICAgfQogICAgIH0KIH0KIApAQCAtMzU0LDcgKzM2NCw2IEBAIFdlYkluc3BlY3Rvci5BdWRpdFJ1
bGUucHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0b3IuQXVkaXRDYXRlZ29yeVJlc3VsdCA9IGZ1
bmN0aW9uKGNhdGVnb3J5KQogewotICAgIHRoaXMuY2F0ZWdvcnlJZCA9IGNhdGVnb3J5LmlkOwog
ICAgIHRoaXMudGl0bGUgPSBjYXRlZ29yeS5kaXNwbGF5TmFtZTsKICAgICB0aGlzLmVudHJpZXMg
PSBbXTsKIH0KQEAgLTM3OCw4ICszODcsMTMgQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZVJlc3Vs
dCA9IGZ1bmN0aW9uKHZhbHVlKQogfQogCiBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlUmVzdWx0LlR5
cGUgPSB7CisgICAgLy8gRG9lcyBub3QgZGVub3RlIGEgZGlzY292ZXJlZCBmbGF3IGJ1dCByYXRo
ZXIgcmVwcmVzZW50cyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuCiAgICAgTkE6IDAsCisKKyAg
ICAvLyBEZW5vdGVzIGEgbWlub3IgaW1wYWN0IG9uIHRoZSBjaGVja2VkIG1ldHJpYy4KICAgICBI
aW50OiAxLAorCisgICAgLy8gRGVub3RlcyBhIG1ham9yIGltcGFjdCBvbiB0aGUgY2hlY2tlZCBt
ZXRyaWMuCiAgICAgVmlvbGF0aW9uOiAyCiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dl
YktpdC5xcmMKaW5kZXggMjBlOWFhMi4uNzY1ZjliNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1dlYktpdC5xcmMKQEAgLTIsOCArMiwxMCBAQAogPHFyZXNvdXJjZSBwcmVmaXg9Ii93ZWJr
aXQvaW5zcGVjdG9yIj4KICAgICA8ZmlsZT5pbnNwZWN0b3IuaHRtbDwvZmlsZT4KICAgICA8Zmls
ZT5BYnN0cmFjdFRpbWVsaW5lUGFuZWwuanM8L2ZpbGU+CisgICAgPGZpbGU+QXVkaXRDYXRlZ29y
aWVzLmpzPC9maWxlPgogICAgIDxmaWxlPkF1ZGl0TGF1bmNoZXJWaWV3LmpzPC9maWxlPgogICAg
IDxmaWxlPkF1ZGl0UmVzdWx0Vmlldy5qczwvZmlsZT4KKyAgICA8ZmlsZT5BdWRpdFJ1bGVzLmpz
PC9maWxlPgogICAgIDxmaWxlPkF1ZGl0c1BhbmVsLmpzPC9maWxlPgogICAgIDxmaWxlPkJvdHRv
bVVwUHJvZmlsZURhdGFHcmlkVHJlZS5qczwvZmlsZT4KICAgICA8ZmlsZT5CcmVha3BvaW50Lmpz
PC9maWxlPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2F1ZGl0cy5j
c3MgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYXVkaXRzLmNzcwppbmRleCAzNWRiNzZi
Li45ZDAyYzgwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYXVkaXRz
LmNzcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvYXVkaXRzLmNzcwpAQCAtMjYy
LDExICsyNjIsMTEgQEAgYm9keS5pbmFjdGl2ZSAuYXVkaXQtbGF1bmNoZXItdmlldyBidXR0b24s
IC5hdWRpdC1sYXVuY2hlci12aWV3IGJ1dHRvbjpkaXNhYmxlZAogICAgIG1hcmdpbjogMCA1cHgg
NXB4IDA7CiB9CiAKLS5hdWRpdC1sYXVuY2hlci12aWV3IGlucHV0W3R5cGU9InJhZGlvIl06YWN0
aXZlIHsKKy5hdWRpdC1sYXVuY2hlci12aWV3IGlucHV0W3R5cGU9InJhZGlvIl06YWN0aXZlOm5v
dCg6ZGlzYWJsZWQpIHsKICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxp
bmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHJnYigxOTQsIDE5NCwgMTk0KSksIHRv
KHJnYigyMzksIDIzOSwgMjM5KSkpOwogfQogCi0uYXVkaXQtbGF1bmNoZXItdmlldyBpbnB1dFt0
eXBlPSJyYWRpbyJdOmNoZWNrZWQgeworLmF1ZGl0LWxhdW5jaGVyLXZpZXcgaW5wdXRbdHlwZT0i
cmFkaW8iXTpjaGVja2VkOm5vdCg6ZGlzYWJsZWQpLCAuYXVkaXQtbGF1bmNoZXItdmlldyBpbnB1
dFt0eXBlPSJyYWRpbyJdOmNoZWNrZWQ6ZGlzYWJsZWQgewogICAgIGJhY2tncm91bmQ6IHVybChJ
bWFnZXMvcmFkaW9Eb3QucG5nKSBjZW50ZXIgbm8tcmVwZWF0LAogICAgICAgICAgICAgICAgIC13
ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20ocmdiKDI1
MiwgMjUyLCAyNTIpKSwgdG8ocmdiKDIyMywgMjIzLCAyMjMpKSk7CiB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKaW5kZXggMjYyNjRkYy4uMGRlZThmMiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtOTEsNiArOTEs
OCBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkF1
ZGl0c1BhbmVsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJBdWRpdFJlc3VsdFZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0i
dGV4dC9qYXZhc2NyaXB0IiBzcmM9IkF1ZGl0TGF1bmNoZXJWaWV3LmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJBdWRpdFJ1bGVzLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJBdWRpdENhdGVn
b3JpZXMuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
cmM9IlJlc291cmNlVmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIHNyYz0iU291cmNlRnJhbWUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkRPTVN5bnRheEhpZ2hsaWdodGVyLmpzIj48L3Njcmlw
dD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IGU0NGVlM2Mu
Ljc3ZDNmNDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAt
NDY4LDE3ICs0NjgsOCBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIHZh
ciBwcmV2aW91c1Rvb2xiYXJJdGVtID0gdG9vbGJhckVsZW1lbnQuY2hpbGRyZW5bMF07CiAKICAg
ICB0aGlzLnBhbmVsT3JkZXIgPSBbXTsKLSAgICBmb3IgKHZhciBwYW5lbE5hbWUgaW4gdGhpcy5w
YW5lbHMpIHsKLSAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbcGFuZWxOYW1lXTsKLSAg
ICAgICAgdmFyIHBhbmVsVG9vbGJhckl0ZW0gPSBwYW5lbC50b29sYmFySXRlbTsKLSAgICAgICAg
dGhpcy5wYW5lbE9yZGVyLnB1c2gocGFuZWwpOwotICAgICAgICBwYW5lbFRvb2xiYXJJdGVtLmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fdG9vbGJhckl0ZW1DbGlja2VkLmJpbmQodGhp
cykpOwotICAgICAgICBpZiAocHJldmlvdXNUb29sYmFySXRlbSkKLSAgICAgICAgICAgIHRvb2xi
YXJFbGVtZW50Lmluc2VydEJlZm9yZShwYW5lbFRvb2xiYXJJdGVtLCBwcmV2aW91c1Rvb2xiYXJJ
dGVtLm5leHRTaWJsaW5nKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdG9vbGJhckVsZW1l
bnQuaW5zZXJ0QmVmb3JlKHBhbmVsVG9vbGJhckl0ZW0sIHRvb2xiYXJFbGVtZW50LmZpcnN0Q2hp
bGQpOwotICAgICAgICBwcmV2aW91c1Rvb2xiYXJJdGVtID0gcGFuZWxUb29sYmFySXRlbTsKLSAg
ICB9CisgICAgZm9yICh2YXIgcGFuZWxOYW1lIGluIHRoaXMucGFuZWxzKQorICAgICAgICBwcmV2
aW91c1Rvb2xiYXJJdGVtID0gV2ViSW5zcGVjdG9yLmFkZFBhbmVsVG9vbGJhckljb24odG9vbGJh
ckVsZW1lbnQsIHRoaXMucGFuZWxzW3BhbmVsTmFtZV0sIHByZXZpb3VzVG9vbGJhckl0ZW0pOwog
CiAgICAgdGhpcy5UaXBzID0gewogICAgICAgICBSZXNvdXJjZU5vdENvbXByZXNzZWQ6IHtpZDog
MCwgbWVzc2FnZTogV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJZb3UgY291bGQgc2F2ZSBiYW5kd2lk
dGggYnkgaGF2aW5nIHlvdXIgd2ViIHNlcnZlciBjb21wcmVzcyB0aGlzIHRyYW5zZmVyIHdpdGgg
Z3ppcCBvciB6bGliLiIpfQpAQCAtNTI5LDYgKzUyMCwxOCBAQCBXZWJJbnNwZWN0b3IubG9hZGVk
ID0gZnVuY3Rpb24oKQogICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5sb2FkZWQoKTsKIH0KIAor
V2ViSW5zcGVjdG9yLmFkZFBhbmVsVG9vbGJhckljb24gPSBmdW5jdGlvbih0b29sYmFyRWxlbWVu
dCwgcGFuZWwsIHByZXZpb3VzVG9vbGJhckl0ZW0pCit7CisgICAgdmFyIHBhbmVsVG9vbGJhckl0
ZW0gPSBwYW5lbC50b29sYmFySXRlbTsKKyAgICB0aGlzLnBhbmVsT3JkZXIucHVzaChwYW5lbCk7
CisgICAgcGFuZWxUb29sYmFySXRlbS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3Rv
b2xiYXJJdGVtQ2xpY2tlZC5iaW5kKHRoaXMpKTsKKyAgICBpZiAocHJldmlvdXNUb29sYmFySXRl
bSkKKyAgICAgICAgdG9vbGJhckVsZW1lbnQuaW5zZXJ0QmVmb3JlKHBhbmVsVG9vbGJhckl0ZW0s
IHByZXZpb3VzVG9vbGJhckl0ZW0ubmV4dFNpYmxpbmcpOworICAgIGVsc2UKKyAgICAgICAgdG9v
bGJhckVsZW1lbnQuaW5zZXJ0QmVmb3JlKHBhbmVsVG9vbGJhckl0ZW0sIHRvb2xiYXJFbGVtZW50
LmZpcnN0Q2hpbGQpOworICAgIHJldHVybiBwYW5lbFRvb2xiYXJJdGVtOworfQorCiB2YXIgd2lu
ZG93TG9hZGVkID0gZnVuY3Rpb24oKQogewogICAgIHZhciBsb2NhbGl6ZWRTdHJpbmdzVVJMID0g
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmxvY2FsaXplZFN0cmluZ3NVUkwoKTsKQEAgLTc0OSw4ICs3
NTIsMTEgQEAgV2ViSW5zcGVjdG9yLmRvY3VtZW50S2V5RG93biA9IGZ1bmN0aW9uKGV2ZW50KQog
ICAgICAgICAgICAgICAgIHZhciBzaG91bGRTaG93QXVkaXRzUGFuZWwgPSBldmVudC5jdHJsS2V5
ICYmICFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiBldmVudC5hbHRLZXk7CiAK
ICAgICAgICAgICAgIGlmIChzaG91bGRTaG93QXVkaXRzUGFuZWwpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMucGFuZWxzLmF1ZGl0cykKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFu
ZWxzLmF1ZGl0cykgewogICAgICAgICAgICAgICAgICAgICB0aGlzLnBhbmVscy5hdWRpdHMgPSBu
ZXcgV2ViSW5zcGVjdG9yLkF1ZGl0c1BhbmVsKCk7CisgICAgICAgICAgICAgICAgICAgIHZhciB0
b29sYmFyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyIik7CisgICAg
ICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5hZGRQYW5lbFRvb2xiYXJJY29uKHRvb2xiYXJF
bGVtZW50LCB0aGlzLnBhbmVscy5hdWRpdHMsIHRoaXMucGFuZWxzLmNvbnNvbGUudG9vbGJhckl0
ZW0pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5l
bCA9IHRoaXMucGFuZWxzLmF1ZGl0czsKICAgICAgICAgICAgIH0KIAo=
</data>
<flag name="review"
          id="31104"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="31113"
          type_id="3"
          status="-"
          setter="apavlov"
    />
          </attachment>
      

    </bug>

</bugzilla>