<?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>136515</bug_id>
          
          <creation_ts>2014-09-03 16:32:41 -0700</creation_ts>
          <short_desc>Web Inspector: JavaScript source text editor should have a linter</short_desc>
          <delta_ts>2026-01-12 09:09:54 -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</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Wells">jonowells</reporter>
          <assigned_to name="Jonathan Wells">jonowells</assigned_to>
          <cc>bburg</cc>
    
    <cc>graouts</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1033089</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-09-03 16:32:41 -0700</bug_when>
    <thetext>ESLint or similar should be used to provide feedback to user for serious issues and warnings. Feedback should be provided inline and update as the user adds to the source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033090</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-09-03 16:33:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/18222691&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039335</commentid>
    <comment_count>2</comment_count>
      <attachid>239233</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-03 14:06:03 -0700</bug_when>
    <thetext>Created attachment 239233
[PATCH] Work in progress.

I&apos;m posting this just for feedback. I&apos;m working on the UI elements and proper coalescing of the edits to refresh the analyzer, but herein you will see the basic architecture and naming conventions, etc. Please leave feedback!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039411</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-03 16:37:29 -0700</bug_when>
    <thetext>Could you include some screenshots from this patch? Given that this introduces UI. It also makes it easier for reviewers to reason about things =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039413</commentid>
    <comment_count>4</comment_count>
      <attachid>239233</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-10-03 16:42:23 -0700</bug_when>
    <thetext>Comment on attachment 239233
[PATCH] Work in progress.

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

This looks pretty good to me. I&apos;m excited to start using it with a UI, I think it&apos;s going to be really nice.

I have one question about the general design:
Why did you choose the singleton model for AnalyzerManager and IssueManager? It
seems a bit weird that there are all these different views and other classes that listen 
on Issue events and they all end up doing some boilerplate managing to make sure 
the URL associated w/ the issue matches some internal data structure.

It seems like these things might map pretty nicely to being 1:1 w/ a SourceCode. Maybe
I&apos;m missing something?

Some specific comments below:

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:64
&gt; +    AnalyzerMessagesWereAdded: &quot;analyzer-manager-analyzerMessages-were-added&quot;

Nit: It seems that most enums use all hyphenated words, instead of camel case, so:
analyzer-manager-analyzer-messages-were-added

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:73
&gt; +    initialize: function()

Seems like this method might not be needed, why not just put this in the constructor?
If you do keep it, it seems like it should be private, it seems like the constructor is the only place it&apos;s called.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:85
&gt; +            sourceCode.requestContent(this.analyzerMessagesForSourceCode);

I think you probably need to bind the function to &apos;this&apos; here.
Nit: No need for braces.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:88
&gt; +        var analyzerMessages;

I think the inspector style for this type of thing, where you predeclare a variable that is guaranteed to be assigned to in the future, is to assign, at the point of declaration, to null.

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:115
&gt; +        if (numberOfMessages === undefined || isNaN(numberOfMessages))

Why would this ever be undefined or NaN?

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:120
&gt; +        this._previousResultButton.disabled = this._nextResultButton.disabled = (numberOfMessages &lt;= 0);

It also seems slightly awkward to compare null with a number, even though the comparisons work out as expected.

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:156
&gt; +            setTimeout(delayedWork.bind(this), 0);

Does this prevent or enable a transition? 
If it enables a transition, maybe it&apos;s better to use requestAnimationFrame?

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:191
&gt; +        setTimeout(delayedWork.bind(this), 0);

Maybe requestAnimationFrame here too?

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:193
&gt; +        this.dispatchEventToListeners(WebInspector.AnalyzerBanner.Event.DidShow);

Should this go inside delatedWork, since that is when it will actually show?

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:212
&gt; +        if (this._delegate &amp;&amp; typeof this._delegate.AnalyzerBannerRevealPreviousResult === &quot;function&quot;)

Nit: It seems a bit weird that the names of these functions are capitalized.

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:218
&gt; +        if (this._delegate &amp;&amp; typeof this._delegate.AnalyzerBannerRevealNextResult === &quot;function&quot;)

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:255
&gt; +WebInspector.AnalyzerBanner.prototype.__proto__ = WebInspector.Object.prototype;

This can go above in the prototype object.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:421
&gt; +        for (var i = 0; i &lt; issues.length; ++i) {

You can use (for of ...) here

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:432
&gt; +        WebInspector.analyzerManager.analyzerMessagesForSourceCode(this._sourceCode, this);

I don&apos;t think you nee the second argument here.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:466
&gt; +        return !!this._analyzerIsActive;

I think it&apos;s nice to set these these fields like this in the constructor to their starting values. It&apos;s nice when reading the constructor to know that SourceCodeTextEditor has this field. 
This would also allow you to drop the !! here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039428</commentid>
    <comment_count>5</comment_count>
      <attachid>239233</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-10-03 18:58:59 -0700</bug_when>
    <thetext>Comment on attachment 239233
[PATCH] Work in progress.

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

Its tough to see what is implemented and what isn&apos;t implemented in this patch. You can use a ChangeLog, even for a Work in progress patch, to describe your design.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:31
&gt; +WebInspector.AnalyzerManager = function()
&gt; +{
&gt; +    WebInspector.Object.call(this);
&gt; +
&gt; +    this._analyzer = eslint;
&gt; +    this._config = {

AnalyzerManager sounds generic, but this seems very specific to JavaScript. We could potentially have CSS analyzers. So perhaps things can be broken out somewhere.

I&apos;d expect a different kind of analyzer for different Resource types.

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:75
&gt; +        this._analyzerSourceCodeMap = new WeakMap();

Style: new WeakMap;

&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:78
&gt; +    analyzerMessagesForSourceCode: function(sourceCode)

I think we can do slightly better. Currently:

    analyzerMessagesForSourceCode on a source code
      - without content - requests content, analyzes, and triggers Event
      - already analyzed - triggers an Event (even if nothing was added/changed)
      - not analyzed - analyzes and triggers an Event

I think a better contract is decoupling the analysis from this method. This method just returns the current list of warnings.

   analyzeMessagesForSourceCode on a source code
      - always returns the current list of analyzer warnings for the source code

Analysis should happen elsewhere. For example:

  SourceCode.prototype.analyze([callback])
      - creates specific analyzer for the Resource type
      - runs analyzer if needed
      - if new warnings, fire Events so AnalyzerManager can collect all AnalyzerMessages and UIs can update
      - calls the optional callback when done analyzing. Useful if analysis produces no warnings.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:85
&gt;&gt; +            sourceCode.requestContent(this.analyzerMessagesForSourceCode);
&gt; 
&gt; I think you probably need to bind the function to &apos;this&apos; here.
&gt; Nit: No need for braces.

Also, this should return! Otherwise you do unnecessary work and potentially cause an exception.

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:88
&gt;&gt; +        var analyzerMessages;
&gt; 
&gt; I think the inspector style for this type of thing, where you predeclare a variable that is guaranteed to be assigned to in the future, is to assign, at the point of declaration, to null.

Better yet, don&apos;t define the variable here. Just put the var inside the if and later on for the other variable.

&gt; Source/WebInspectorUI/UserInterface/Models/AnalyzerMessage.js:34
&gt; +    this._sourceCode = sourceCode;
&gt; +    this._text = text;
&gt; +    this._line = line;
&gt; +    this._column = column;
&gt; +    this._ruleId = ruleId;

For those that are expected, lets do some asserts so nobody accidentally creates an object incorrectly.

    console.assert(sourceCode instanceof WebInspector.SourceCode);
    console.assert(typeof text === &quot;string&quot;);
    console.assert(typeof line === &quot;number&quot;);

Also, what is &quot;ruleId&quot;? Maybe it should be a &quot;category&quot; string or something?

Style: we tend to prefer &quot;lineNumber&quot; and &quot;columnNumber&quot; over &quot;line&quot;/&quot;column&quot;.

&gt; Source/WebInspectorUI/UserInterface/Models/AnalyzerMessage.js:38
&gt; +    constructor: WebInspector.AnalyzerMessage,

Style: __proto__ here instead of below.

&gt; Source/WebInspectorUI/UserInterface/Models/AnalyzerMessage.js:39
&gt; +

Nit: getter for this._sourceCode.

&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:439
&gt; +    get canBeAnalyzed() {

Style: Opening brace should be on a newline.
Style: I don&apos;t think this needs to be a getter. For example, for pretty printing &quot;canBeFormatted&quot; is a function.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCode.js:137
&gt; +        this._needsAnalysis = !!value;

Nit: Lets assume proper use and value is a boolean and just assign to value.

&gt; Source/WebInspectorUI/UserInterface/Models/SourceCodeRevision.js:91
&gt; +        console.log(&apos;changed&apos;);

Nit: debug

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.css:2
&gt; + * Copyright (C) 2013 Apple Inc. All rights reserved.

Nit: 2014.

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:26
&gt; +WebInspector.AnalyzerBanner = function(delegate, element) {

A lot of this code is very similar to FindBanner. I wonder what can be shared.

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:29
&gt; +    this._delegate = delegate || null; // For instance a content view.

I don&apos;t understand the comment. In this case, the delegate is a ContentBrowser, not a ContentView. Just out of date? I&apos;d say you can remove the comment.

&gt; Source/WebInspectorUI/UserInterface/Views/AnalyzerBanner.js:64
&gt; +    this._numberOfResultsMessages;

Nit: seems this should be: (note the name change)

    this._numberOfResults = null;

&gt; Source/WebInspectorUI/UserInterface/Views/ContentBrowser.js:473
&gt; +            this._analyzerBanner.numberOfMessages = null;

I think I might prefer a clear() / reset() method instead of setting these properties to null.

&gt; Source/WebInspectorUI/UserInterface/Views/LineMarker.js:24
&gt; + */

Empty files? More to come later?

&gt; Source/WebInspectorUI/UserInterface/Views/LineMessage.js:26
&gt; +WebInspector.LineMessage = function(message, type)

It would be real nice if this type was an enum somewhere instead of raw strings.

&gt; Source/WebInspectorUI/UserInterface/Views/LineMessage.js:44
&gt; +WebInspector.LineMessage.ColorClassForType = {
&gt; +    &quot;warning&quot;: &quot;line-message-warning&quot;,
&gt; +    &quot;error&quot;: &quot;line-message-error&quot;
&gt; +};

Nit: StyleClassForType?

&gt; Source/WebInspectorUI/UserInterface/Views/ScriptContentView.js:73
&gt; +    // this._toggleAnalyzerButtonNavigationItem.addEventListener(WebInspector.ButtonNavigationItem.Event.Clicked, this._toggleAnalyzer, this);

You will want this. You can test scripts by doing a named eval.

    js&gt; eval(&apos;//# sourceURL=test.js\n...&apos;);

Will create a &quot;test.js&quot; Script resource in the sidebar. Opening that is a ScriptContentView.

&gt; Source/WebInspectorUI/UserInterface/Views/ScriptContentView.js:240
&gt; +        console.log(&quot;ScriptContentView sez: about to toggle the analyzer&quot;);

Debug.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:285
&gt; +            return this._analyzerIsActive = true;

Style: Split into two lines.

    this_analyzerIsActive = true;
    return;

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:289
&gt; +        return this._analyzerIsActive = false;

Ditto. No return needed in this case then.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:815
&gt; +        WebInspector.analyzerManager.removeEventListener(WebInspector.AnalyzerManager.Event.AnalyzerMessagesWereAdded, this._analyzerMessagesWereAdded, this);

Hmm, this sounds hacky to be adding and removing ourselves as an event listener based on operations. We should always be registered, always update model objects, and only update UI if needed.

&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1150
&gt; +        // Ok no here&apos;s the deal: this is going to happen here. This is the text editor,
&gt; +        // so it will know if it is actively doing stuff or not. Since the
&gt; +        // text resource content view pretty much has access to this, WE
&gt; +        // are going to add a few more events for the TextResourceContentView to handle.
&gt; +        // OR we are going to have the TextResourceContentView just poll this source document for state
&gt; +        // as necessary.
&gt; +
&gt; +        // So for instance this will know if we are currently in an analyzing state.
&gt; +        // The sourceCode doesn&apos;t really need to know that about itself. Source just knows if its
&gt; +        // current analysis data, should it exist on WebInspector.AnalyzerManager, is dirty or not.

I didn&apos;t quite follow these comments. Polling sounds bad, we should be able to use events.

There is an interesting discussion that can happen about analyzer messages. You can contrast AnalyzerMessages to &quot;Issues&quot; and &quot;Formatting / Pretty Printing&quot;.

  - Issues
    - currently these are any errors the engine tells us about
    - these can be associated with a SourceCode, and if they are, they correspond to (typically) the original content of the SourceCode, as that is what the engine saw
    - how does this handle user editing the content?
      - I am not sure. I would expect issues disappear once you edit the document, as any line number may be broken.

  - Formatting (Pretty Printing)
    - this is just a re-skin of the current document&apos;s contents
    - this is implemented at the TextEditor level, because it is just a transformation of the current text
    - a mapping between the SourceCode&apos;s original text and the transformed text is kept on the SourceCode and TextEditor so anyone can map original -&gt; display positions
    - how does this handle user editing the content?
      - the mapping goes away, and the pretty print button goes back to deactivated, because you can then format again if you want.

--

Now, how would you describe Analyzing/AnalyzerMessages?

Analyzing could purely be a pass over the contents of a TextEditor. It is just like Formatting in that sense, so if you make edits all warnings are void until you analyze again.

However, if we want to have the ability to run a report analyzing all Resources, then we can&apos;t rely on TextEditor. We don&apos;t want to have to open a TextEditor for every resource to get analyzer information.

I imagine it like this. If we run a global analyzer report, I think it should be over the content the engine saw. In this scenario, the SourceCode/AnalyzerManager stores the analyzer warnings for its original contents. If an unedited SourceCode is loaded in a TextEditor, the TextEditor can get this list of analyzer warnings or if no analysis has happened, then the first analyze pass can set the list of warnings on the SourceCode/AnalyzerManager. As soon as the user makes edits, they are out of luck. The TextEditor must ignore this special set of warnings against the original content. If we want, the TextEditor should offer a way to re-analyze the new contents (just like the pretty print button offers to re-pretty-print contents after edits). But that new list of warnings will only be tied to this new content.

Our editing story in general is not the strongest. Some support is there (Branches) but there are kinks. So I totally think nailing the un-edited story would be best for this first patch. When we focus on our editing story, we can improve all of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039613</commentid>
    <comment_count>6</comment_count>
      <attachid>239233</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-05 16:25:37 -0700</bug_when>
    <thetext>Comment on attachment 239233
[PATCH] Work in progress.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:78
&gt;&gt; +    analyzerMessagesForSourceCode: function(sourceCode)
&gt; 
&gt; I think we can do slightly better. Currently:
&gt; 
&gt;     analyzerMessagesForSourceCode on a source code
&gt;       - without content - requests content, analyzes, and triggers Event
&gt;       - already analyzed - triggers an Event (even if nothing was added/changed)
&gt;       - not analyzed - analyzes and triggers an Event
&gt; 
&gt; I think a better contract is decoupling the analysis from this method. This method just returns the current list of warnings.
&gt; 
&gt;    analyzeMessagesForSourceCode on a source code
&gt;       - always returns the current list of analyzer warnings for the source code
&gt; 
&gt; Analysis should happen elsewhere. For example:
&gt; 
&gt;   SourceCode.prototype.analyze([callback])
&gt;       - creates specific analyzer for the Resource type
&gt;       - runs analyzer if needed
&gt;       - if new warnings, fire Events so AnalyzerManager can collect all AnalyzerMessages and UIs can update
&gt;       - calls the optional callback when done analyzing. Useful if analysis produces no warnings.

This makes sense.

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/AnalyzerManager.js:85
&gt;&gt;&gt; +            sourceCode.requestContent(this.analyzerMessagesForSourceCode);
&gt;&gt; 
&gt;&gt; I think you probably need to bind the function to &apos;this&apos; here.
&gt;&gt; Nit: No need for braces.
&gt; 
&gt; Also, this should return! Otherwise you do unnecessary work and potentially cause an exception.

So I just realized I somehow posted an older diff! The actual function here looks like: 

    analyzerMessagesForSourceCode: function(sourceCode, callback)
    {
        function retrieveAnalyzerMessages()
        {
            var analyzerMessages;

            if (!sourceCode.needsAnalysis &amp;&amp; this._analyzerSourceCodeMap.has(sourceCode)) {
                analyzerMessages = this._analyzerSourceCodeMap.get(sourceCode);
                callback(analyzerMessages);
                return;
            }

            analyzerMessages = [];
            var rawAnalyzerMessages = this._analyze(sourceCode.content);

            for (rawAnalyzerMessage of rawAnalyzerMessages) {
                analyzerMessages.push(new WebInspector.AnalyzerMessage(sourceCode, rawAnalyzerMessage.message, rawAnalyzerMessage.line, rawAnalyzerMessage.column, rawAnalyzerMessage.ruleId));
            }

            this._analyzerSourceCodeMap.set(sourceCode, analyzerMessages);
            sourceCode.needsAnalysis = false;

            callback(analyzerMessages);
        }

        if (!sourceCode.contentReceived) {
            sourceCode.requestContent(retrieveAnalyzerMessages.bind(this));
            return;
        }

        retrieveAnalyzerMessages.call(this);
    },

However, I&apos;m going to take Joe&apos;s note above and decouple the manager and analysis work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039624</commentid>
    <comment_count>7</comment_count>
      <attachid>239233</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-05 17:00:18 -0700</bug_when>
    <thetext>Comment on attachment 239233
[PATCH] Work in progress.

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/Resource.js:439
&gt;&gt; +    get canBeAnalyzed() {
&gt; 
&gt; Style: Opening brace should be on a newline.
&gt; Style: I don&apos;t think this needs to be a getter. For example, for pretty printing &quot;canBeFormatted&quot; is a function.

What is the rule for this? (getter vs function with return value)

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/SourceCodeRevision.js:91
&gt;&gt; +        console.log(&apos;changed&apos;);
&gt; 
&gt; Nit: debug

Yeah I had removed this, but then posted the older diff.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/LineMarker.js:24
&gt;&gt; + */
&gt; 
&gt; Empty files? More to come later?

More to come.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:421
&gt;&gt; +        for (var i = 0; i &lt; issues.length; ++i) {
&gt; 
&gt; You can use (for of ...) here

True, though this isn&apos;t part of my patch technically. I just moved some code around, though I could update that.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:432
&gt;&gt; +        WebInspector.analyzerManager.analyzerMessagesForSourceCode(this._sourceCode, this);
&gt; 
&gt; I don&apos;t think you nee the second argument here.

So had I posted the correct diff (see above) this line would look like:

        WebInspector.analyzerManager.analyzerMessagesForSourceCode(this._sourceCode, this._analyzerMessagesWereAdded.bind(this));

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:815
&gt;&gt; +        WebInspector.analyzerManager.removeEventListener(WebInspector.AnalyzerManager.Event.AnalyzerMessagesWereAdded, this._analyzerMessagesWereAdded, this);
&gt; 
&gt; Hmm, this sounds hacky to be adding and removing ourselves as an event listener based on operations. We should always be registered, always update model objects, and only update UI if needed.

I actually changed this in favor of a callback model, then submitted the wrong diff here. Correct code is:

    _analyzerMessagesWereAdded: function(analyzerMessages)
    {
        for (analyzerMessage in analyzerMessages) {
            // TODO: Need to update the UI with widgets, etc.
        }
    },

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js:1150
&gt;&gt; +        // current analysis data, should it exist on WebInspector.AnalyzerManager, is dirty or not.
&gt; 
&gt; I didn&apos;t quite follow these comments. Polling sounds bad, we should be able to use events.
&gt; 
&gt; There is an interesting discussion that can happen about analyzer messages. You can contrast AnalyzerMessages to &quot;Issues&quot; and &quot;Formatting / Pretty Printing&quot;.
&gt; 
&gt;   - Issues
&gt;     - currently these are any errors the engine tells us about
&gt;     - these can be associated with a SourceCode, and if they are, they correspond to (typically) the original content of the SourceCode, as that is what the engine saw
&gt;     - how does this handle user editing the content?
&gt;       - I am not sure. I would expect issues disappear once you edit the document, as any line number may be broken.
&gt; 
&gt;   - Formatting (Pretty Printing)
&gt;     - this is just a re-skin of the current document&apos;s contents
&gt;     - this is implemented at the TextEditor level, because it is just a transformation of the current text
&gt;     - a mapping between the SourceCode&apos;s original text and the transformed text is kept on the SourceCode and TextEditor so anyone can map original -&gt; display positions
&gt;     - how does this handle user editing the content?
&gt;       - the mapping goes away, and the pretty print button goes back to deactivated, because you can then format again if you want.
&gt; 
&gt; --
&gt; 
&gt; Now, how would you describe Analyzing/AnalyzerMessages?
&gt; 
&gt; Analyzing could purely be a pass over the contents of a TextEditor. It is just like Formatting in that sense, so if you make edits all warnings are void until you analyze again.
&gt; 
&gt; However, if we want to have the ability to run a report analyzing all Resources, then we can&apos;t rely on TextEditor. We don&apos;t want to have to open a TextEditor for every resource to get analyzer information.
&gt; 
&gt; I imagine it like this. If we run a global analyzer report, I think it should be over the content the engine saw. In this scenario, the SourceCode/AnalyzerManager stores the analyzer warnings for its original contents. If an unedited SourceCode is loaded in a TextEditor, the TextEditor can get this list of analyzer warnings or if no analysis has happened, then the first analyze pass can set the list of warnings on the SourceCode/AnalyzerManager. As soon as the user makes edits, they are out of luck. The TextEditor must ignore this special set of warnings against the original content. If we want, the TextEditor should offer a way to re-analyze the new contents (just like the pretty print button offers to re-pretty-print contents after edits). But that new list of warnings will only be tied to this new content.
&gt; 
&gt; Our editing story in general is not the strongest. Some support is there (Branches) but there are kinks. So I totally think nailing the un-edited story would be best for this first patch. When we focus on our editing story, we can improve all of this.

Definitely. Also that bit of rambling was left in by me and should have been replace with this:

    _sourceCodeContentDidChange: function(event)
    {
        // TODO: Coalesce changes and set a timer such that after a couple seconds if editing inactivity we will call the AnalyzerManager again.
    },

Based on your previous comment typing some changes then pausing for two seconds or so would rerun sourceCode.analyze which would then notify/update the AnalyzerManager and any other interested UI would update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039626</commentid>
    <comment_count>8</comment_count>
      <attachid>239305</attachid>
    <who name="Jonathan Wells">jonowells</who>
    <bug_when>2014-10-05 17:05:45 -0700</bug_when>
    <thetext>Created attachment 239305
[PATCH] Work in progress, corrected patch.

This is what I should have posted, plus just the changes from the comments thus far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312014</commentid>
    <comment_count>9</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-05-23 13:27:55 -0700</bug_when>
    <thetext>&lt;rdar://problem/19524548&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239233</attachid>
            <date>2014-10-03 14:06:03 -0700</date>
            <delta_ts>2014-10-05 17:05:45 -0700</delta_ts>
            <desc>[PATCH] Work in progress.</desc>
            <filename>eslint.diff</filename>
            <type>text/plain</type>
            <size>662963</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFp
bi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpp
bmRleCBlYjhmNTUxLi5lY2VmOTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9CYXNlL01haW4uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC0xMDMsNiArMTAzLDcgQEAgV2ViSW5zcGVjdG9y
LmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmNzc1N0eWxlTWFuYWdlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyOwogICAgIHRoaXMubG9nTWFuYWdlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuTG9nTWFuYWdlcjsKICAgICB0aGlzLmlzc3VlTWFuYWdlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuSXNzdWVNYW5hZ2VyOworICAgIHRoaXMuYW5hbHl6ZXJNYW5hZ2VyID0gbmV3IFdlYklu
c3BlY3Rvci5BbmFseXplck1hbmFnZXI7CiAgICAgdGhpcy5ydW50aW1lTWFuYWdlciA9IG5ldyBX
ZWJJbnNwZWN0b3IuUnVudGltZU1hbmFnZXI7CiAgICAgdGhpcy5hcHBsaWNhdGlvbkNhY2hlTWFu
YWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXI7CiAgICAgdGhp
cy50aW1lbGluZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0FuYWx5emVyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42YmQ0MDhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCkBAIC0wLDAg
KzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlciA9IGZ1
bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICB0
aGlzLl9hbmFseXplciA9IGVzbGludDsKKyAgICB0aGlzLl9jb25maWcgPSB7CisgICAgICAgICJl
bnYiOiB7CisgICAgICAgICAgICAiYnJvd3NlciI6IHRydWUsCisgICAgICAgICAgICAibm9kZSI6
IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJydWxlcyI6IHsKKyAgICAgICAgICAgICJjb25z
aXN0ZW50LXJldHVybiI6IDIsCisgICAgICAgICAgICAiY3VybHkiOiAwLAorICAgICAgICAgICAg
ImVxZXFlcSI6IDIsCisgICAgICAgICAgICAibmV3LXBhcmVucyI6IDAsCisgICAgICAgICAgICAi
bm8tY29tbWEtZGFuZ2xlIjogMCwKKyAgICAgICAgICAgICJuby1jb25zb2xlIjogMCwKKyAgICAg
ICAgICAgICJuby1jb25zdGFudC1jb25kaXRpb24iOiAwLAorICAgICAgICAgICAgIm5vLWV4dHJh
LWJpbmQiOiAyLAorICAgICAgICAgICAgIm5vLWV4dHJhLXNlbWkiOiAyLAorICAgICAgICAgICAg
Im5vLXByb3RvIjogMCwKKyAgICAgICAgICAgICJuby1yZXR1cm4tYXNzaWduIjogMiwKKyAgICAg
ICAgICAgICJuby10cmFpbGluZy1zcGFjZXMiOiAyLAorICAgICAgICAgICAgIm5vLXVuZGVyc2Nv
cmUtZGFuZ2xlIjogMCwKKyAgICAgICAgICAgICJuby11bnVzZWQtZXhwcmVzc2lvbnMiOiAyLAor
ICAgICAgICAgICAgIm5vLXdyYXAtZnVuYyI6IDIsCisgICAgICAgICAgICAic2VtaSI6IDIsCisg
ICAgICAgICAgICAic3BhY2UtaW5maXgtb3BzIjogMiwKKyAgICAgICAgICAgICJzcGFjZS1yZXR1
cm4tdGhyb3ctY2FzZSI6IDIsCisgICAgICAgICAgICAic3RyaWN0IjogMCwKKyAgICAgICAgICAg
ICJ2YWxpZC10eXBlb2YiOiAyCisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5pbml0aWFs
aXplKCk7Cit9OworCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLkV2ZW50ID0geworICAg
IEFuYWx5emVyTWVzc2FnZXNXZXJlQWRkZWQ6ICJhbmFseXplci1tYW5hZ2VyLWFuYWx5emVyTWVz
c2FnZXMtd2VyZS1hZGRlZCIKK307CisKK1dlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIucHJv
dG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2Vy
LAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICAv
LyBQdWJsaWMKKworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRo
aXMuX2FuYWx5emVyU291cmNlQ29kZU1hcCA9IG5ldyBXZWFrTWFwKCk7CisgICAgfSwKKworICAg
IGFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlOiBmdW5jdGlvbihzb3VyY2VDb2RlKQorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gY2hlY2sgZm9yIHNvdXJjZUNvZGUuY29udGVu
dFJlY2VpdmVkLiBJZiBmYWxzZSwgd2Ugd291bGQgbmVlZCB0byByZXF1ZXN0CisgICAgICAgIC8v
IHRoZSBjb250ZW50IGZyb20gdGhlIGJhY2sgZW5kIGZpcnN0LiBUaGlzIHdvdWxkIHJlcXVpcmUg
dGhpcyBmdW5jdGlvbiBmaXJpbmcgYW4gZXZlbnQgcmF0aGVyCisgICAgICAgIC8vIHRoYW4gcmV0
dXJuaW5nIGEgdmFsdWUgc2luY2UgdGhpcyBwYXJ0aWN1bGFyIGJhY2sgZW5kIGNhbGwgaXMgYXN5
bmNocm9ub3VzLgorCisgICAgICAgIGlmICghc291cmNlQ29kZS5jb250ZW50UmVjZWl2ZWQpIHsK
KyAgICAgICAgICAgIHNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQodGhpcy5hbmFseXplck1lc3Nh
Z2VzRm9yU291cmNlQ29kZSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYW5hbHl6ZXJNZXNz
YWdlczsKKworICAgICAgICBpZiAoIXNvdXJjZUNvZGUubmVlZHNBbmFseXNpcyAmJiB0aGlzLl9h
bmFseXplclNvdXJjZUNvZGVNYXAuaGFzKHNvdXJjZUNvZGUpKSB7CisgICAgICAgICAgICBhbmFs
eXplck1lc3NhZ2VzID0gdGhpcy5fYW5hbHl6ZXJTb3VyY2VDb2RlTWFwLmdldChzb3VyY2VDb2Rl
KTsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rv
ci5BbmFseXplck1hbmFnZXIuRXZlbnQuQW5hbHl6ZXJNZXNzYWdlc1dlcmVBZGRlZCwge2FuYWx5
emVyTWVzc2FnZXM6IGFuYWx5emVyTWVzc2FnZXN9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGFuYWx5emVyTWVzc2FnZXMgPSBbXTsKKyAgICAgICAgdmFyIHJh
d0FuYWx5emVyTWVzc2FnZXMgPSB0aGlzLl9hbmFseXplKHNvdXJjZUNvZGUuY29udGVudCk7CisK
KyAgICAgICAgZm9yIChyYXdBbmFseXplck1lc3NhZ2Ugb2YgcmF3QW5hbHl6ZXJNZXNzYWdlcykg
eworICAgICAgICAgICAgY29uc29sZS5sb2cocmF3QW5hbHl6ZXJNZXNzYWdlKTsKKyAgICAgICAg
ICAgIGFuYWx5emVyTWVzc2FnZXMucHVzaChuZXcgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2Fn
ZShzb3VyY2VDb2RlLCByYXdBbmFseXplck1lc3NhZ2UubWVzc2FnZSwgcmF3QW5hbHl6ZXJNZXNz
YWdlLmxpbmUsIHJhd0FuYWx5emVyTWVzc2FnZS5jb2x1bW4sIHJhd0FuYWx5emVyTWVzc2FnZS5y
dWxlSWQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2FuYWx5emVyU291cmNlQ29kZU1h
cC5zZXQoc291cmNlQ29kZSwgYW5hbHl6ZXJNZXNzYWdlcyk7CisgICAgICAgIHNvdXJjZUNvZGUu
bmVlZHNBbmFseXNpcyA9IGZhbHNlOworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlz
dGVuZXJzKFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuRXZlbnQuQW5hbHl6ZXJNZXNzYWdl
c1dlcmVBZGRlZCwge2FuYWx5emVyTWVzc2FnZXM6IGFuYWx5emVyTWVzc2FnZXMsIHNvdXJjZUNv
ZGU6IHNvdXJjZUNvZGV9KTsKKyAgICB9LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX2FuYWx5
emU6IGZ1bmN0aW9uKHRleHQpCisgICAgeworICAgICAgICB2YXIgcmF3QW5hbHl6ZXJNZXNzYWdl
cyA9IHRoaXMuX2FuYWx5emVyLnZlcmlmeSh0ZXh0LCB0aGlzLl9jb25maWcpOworCisgICAgICAg
IHJldHVybiByYXdBbmFseXplck1lc3NhZ2VzOworICAgIH0KK307CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQvZXNsaW50Lmpz
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRVNMaW50L2Vz
bGludC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTgwY2I1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJu
YWwvRVNMaW50L2VzbGludC5qcwpAQCAtMCwwICsxLDE3NTA2IEBACishZnVuY3Rpb24oZSl7aWYo
Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1
bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUu
YW1kKWRlZmluZShbXSxlKTtlbHNle3ZhciBmOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P2Y9
d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2Y9Z2xvYmFsOiJ1bmRlZmluZWQiIT10
eXBlb2Ygc2VsZiYmKGY9c2VsZiksZi5lc2xpbnQ9ZSgpfX0oZnVuY3Rpb24oKXt2YXIgZGVmaW5l
LG1vZHVsZSxleHBvcnRzO3JldHVybiAoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUp
e2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiImJnJl
cXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1u
ZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitvKyInIik7dGhyb3cgZi5jb2RlPSJNT0RV
TEVfTk9UX0ZPVU5EIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4
cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5l
eHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9
PSJmdW5jdGlvbiImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTty
ZXR1cm4gc30pKHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKK21vZHVsZS5l
eHBvcnRzPXsKKyAgICAiYnVpbHRpbiI6IHsKKyAgICAgICAgIk5hTiI6IGZhbHNlLAorICAgICAg
ICAiSW5maW5pdHkiOiBmYWxzZSwKKyAgICAgICAgInVuZGVmaW5lZCI6IGZhbHNlLAorICAgICAg
ICAiZXZhbCI6IGZhbHNlLAorCisgICAgICAgICJwYXJzZUZsb2F0IjogZmFsc2UsCisgICAgICAg
ICJwYXJzZUludCI6IGZhbHNlLAorICAgICAgICAiaXNOYU4iOiBmYWxzZSwKKyAgICAgICAgImlz
RmluaXRlIjogZmFsc2UsCisKKyAgICAgICAgImRlY29kZVVSSSI6IGZhbHNlLAorICAgICAgICAi
ZGVjb2RlVVJJQ29tcG9uZW50IjogZmFsc2UsCisgICAgICAgICJlbmNvZGVVUkkiOiBmYWxzZSwK
KyAgICAgICAgImVuY29kZVVSSUNvbXBvbmVudCI6IGZhbHNlLAorCisgICAgICAgICJPYmplY3Qi
OiBmYWxzZSwKKyAgICAgICAgIkZ1bmN0aW9uIjogZmFsc2UsCisgICAgICAgICJBcnJheSI6IGZh
bHNlLAorICAgICAgICAiU3RyaW5nIjogZmFsc2UsCisgICAgICAgICJCb29sZWFuIjogZmFsc2Us
CisgICAgICAgICJNYXAiOiBmYWxzZSwKKyAgICAgICAgIk51bWJlciI6IGZhbHNlLAorICAgICAg
ICAiRGF0ZSI6IGZhbHNlLAorICAgICAgICAiUmVnRXhwIjogZmFsc2UsCisgICAgICAgICJFcnJv
ciI6IGZhbHNlLAorICAgICAgICAiRXZhbEVycm9yIjogZmFsc2UsCisgICAgICAgICJSYW5nZUVy
cm9yIjogZmFsc2UsCisgICAgICAgICJSZWZlcmVuY2VFcnJvciI6IGZhbHNlLAorICAgICAgICAi
U2V0IjogZmFsc2UsCisgICAgICAgICJTeW50YXhFcnJvciI6IGZhbHNlLAorICAgICAgICAiVHlw
ZUVycm9yIjogZmFsc2UsCisgICAgICAgICJVUklFcnJvciI6IGZhbHNlLAorICAgICAgICAiV2Vh
a01hcCI6IGZhbHNlLAorICAgICAgICAiV2Vha1NldCI6IGZhbHNlLAorCisgICAgICAgICJBcnJh
eUJ1ZmZlciI6IGZhbHNlLAorICAgICAgICAiRmxvYXQzMkFycmF5IjogZmFsc2UsCisgICAgICAg
ICJGbG9hdDY0QXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIkludDE2QXJyYXkiOiBmYWxzZSwKKyAg
ICAgICAgIkludDMyQXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIkludDhBcnJheSI6IGZhbHNlLAor
ICAgICAgICAiVWludDE2QXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIlVpbnQzMkFycmF5IjogZmFs
c2UsCisgICAgICAgICJVaW50OEFycmF5IjogZmFsc2UsCisgICAgICAgICJVaW50OENsYW1wZWRB
cnJheSI6IGZhbHNlLAorCisgICAgICAgICJNYXRoIjogZmFsc2UsCisgICAgICAgICJKU09OIjog
ZmFsc2UsCisKKyAgICAgICAgInRvU3RyaW5nIjogZmFsc2UsCisgICAgICAgICJoYXNPd25Qcm9w
ZXJ0eSI6IGZhbHNlLAorICAgICAgICAidmFsdWVPZiI6IGZhbHNlLAorICAgICAgICAicHJvcGVy
dHlJc0VudW1lcmFibGUiOiBmYWxzZSwKKyAgICAgICAgImNvbnN0cnVjdG9yIjogZmFsc2UsCisg
ICAgICAgICJpc1Byb3RvdHlwZU9mIjogZmFsc2UsCisgICAgICAgICJ0b0xvY2FsZVN0cmluZyI6
IGZhbHNlCisgICAgfSwKKworICAgICJicm93c2VyIjogeworICAgICAgICAiZ2xvYmFscyI6IHsK
KyAgICAgICAgICAgICJhZGRFdmVudExpc3RlbmVyIjogZmFsc2UsCisgICAgICAgICAgICAiYXBw
bGljYXRpb25DYWNoZSI6IGZhbHNlLAorICAgICAgICAgICAgImF0b2IiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJBdWRpbyI6IGZhbHNlLAorICAgICAgICAgICAgIkJsb2IiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJibHVyIjogZmFsc2UsCisgICAgICAgICAgICAiYnRvYSI6IGZhbHNlLAorICAgICAg
ICAgICAgImNhbmNlbEFuaW1hdGlvbkZyYW1lIjogZmFsc2UsCisgICAgICAgICAgICAiY2xlYXJJ
bnRlcnZhbCI6IGZhbHNlLAorICAgICAgICAgICAgImNsZWFyVGltZW91dCI6IGZhbHNlLAorICAg
ICAgICAgICAgImNsb3NlIjogZmFsc2UsCisgICAgICAgICAgICAiY2xvc2VkIjogZmFsc2UsCisg
ICAgICAgICAgICAiY3J5cHRvIjogZmFsc2UsCisgICAgICAgICAgICAiRGF0YVZpZXciOiBmYWxz
ZSwKKyAgICAgICAgICAgICJkZWZhdWx0U3RhdHVzIjogZmFsc2UsCisgICAgICAgICAgICAiZGV2
aWNlUGl4ZWxSYXRpbyI6IGZhbHNlLAorICAgICAgICAgICAgImRpc3BhdGNoRXZlbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJkb2N1bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkRPTVBhcnNl
ciI6IGZhbHNlLAorICAgICAgICAgICAgIkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJG
aWxlUmVhZGVyIjogZmFsc2UsCisgICAgICAgICAgICAiZmluZCI6IGZhbHNlLAorICAgICAgICAg
ICAgImZvY3VzIjogZmFsc2UsCisgICAgICAgICAgICAiRm9ybURhdGEiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJmcmFtZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJmcmFtZXMiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJnZXRDb21wdXRlZFN0eWxlIjogZmFsc2UsCisgICAgICAgICAgICAi
Z2V0U2VsZWN0aW9uIjogZmFsc2UsCisgICAgICAgICAgICAiaGlzdG9yeSI6IGZhbHNlLAorICAg
ICAgICAgICAgIkhUTUxBbmNob3JFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEJh
c2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEJvZHlFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiSFRNTEJSRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxC
dXR0b25FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTENhbnZhc0VsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJIVE1MRGlyZWN0b3J5RWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIkhUTUxEaXZFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTERMaXN0RWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiSFRNTEZpZWxkU2V0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxGb250
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxGb3JtRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIkhUTUxGcmFtZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1M
RnJhbWVTZXRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEhlYWRFbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiSFRNTEhlYWRpbmdFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiSFRNTEhSRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxIdG1sRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxJRnJhbWVFbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiSFRNTEltYWdlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxJbnB1
dEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MTGFiZWxFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiSFRNTExlZ2VuZEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MTElFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTExpbmtFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiSFRNTE1hcEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MTWVudUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MTWV0YUVsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJIVE1MTW9kRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IkhUTUxPYmplY3RFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTE9MaXN0RWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxPcHRHcm91cEVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJIVE1MT3B0aW9uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxQ
YXJhZ3JhcGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFBhcmFtRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxQcmVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiSFRNTFF1b3RlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxTY3JpcHRFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFNlbGVjdEVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJIVE1MU3R5bGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVGFibGVDZWxsRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNvbEVsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJIVE1MVGFibGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRN
TFRhYmxlUm93RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFRleHRBcmVhRWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIkhUTUxUaXRsZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MVUxpc3RFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFZpZGVvRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIkltYWdlIjogZmFsc2UsCisgICAgICAgICAgICAiaW5kZXhl
ZERCIjogZmFsc2UsCisgICAgICAgICAgICAiaW5uZXJIZWlnaHQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJpbm5lcldpZHRoIjogZmFsc2UsCisgICAgICAgICAgICAiSW50bCI6IGZhbHNlLAorICAg
ICAgICAgICAgImxlbmd0aCI6IGZhbHNlLAorICAgICAgICAgICAgImxvY2FsU3RvcmFnZSI6IGZh
bHNlLAorICAgICAgICAgICAgImxvY2F0aW9uIjogZmFsc2UsCisgICAgICAgICAgICAibWF0Y2hN
ZWRpYSI6IGZhbHNlLAorICAgICAgICAgICAgIk1lc3NhZ2VDaGFubmVsIjogZmFsc2UsCisgICAg
ICAgICAgICAiTWVzc2FnZUV2ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiTWVzc2FnZVBvcnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJtb3ZlQnkiOiBmYWxzZSwKKyAgICAgICAgICAgICJtb3Zl
VG8iOiBmYWxzZSwKKyAgICAgICAgICAgICJNdXRhdGlvbk9ic2VydmVyIjogZmFsc2UsCisgICAg
ICAgICAgICAibmFtZSI6IGZhbHNlLAorICAgICAgICAgICAgIm5hdmlnYXRvciI6IGZhbHNlLAor
ICAgICAgICAgICAgIk5vZGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJOb2RlRmlsdGVyIjogZmFs
c2UsCisgICAgICAgICAgICAib25iZWZvcmV1bmxvYWQiOiB0cnVlLAorICAgICAgICAgICAgIm9u
Ymx1ciI6IHRydWUsCisgICAgICAgICAgICAib25lcnJvciI6IHRydWUsCisgICAgICAgICAgICAi
b25mb2N1cyI6IHRydWUsCisgICAgICAgICAgICAib25sb2FkIjogdHJ1ZSwKKyAgICAgICAgICAg
ICJvbnJlc2l6ZSI6IHRydWUsCisgICAgICAgICAgICAib251bmxvYWQiOiB0cnVlLAorICAgICAg
ICAgICAgIm9wZW4iOiBmYWxzZSwKKyAgICAgICAgICAgICJvcGVuRGF0YWJhc2UiOiBmYWxzZSwK
KyAgICAgICAgICAgICJvcGVuZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJPcHRpb24iOiBmYWxz
ZSwKKyAgICAgICAgICAgICJvdXRlckhlaWdodCI6IGZhbHNlLAorICAgICAgICAgICAgIm91dGVy
V2lkdGgiOiBmYWxzZSwKKyAgICAgICAgICAgICJwYWdlWE9mZnNldCI6IGZhbHNlLAorICAgICAg
ICAgICAgInBhZ2VZT2Zmc2V0IjogZmFsc2UsCisgICAgICAgICAgICAicGFyZW50IjogZmFsc2Us
CisgICAgICAgICAgICAicG9zdE1lc3NhZ2UiOiBmYWxzZSwKKyAgICAgICAgICAgICJwcmludCI6
IGZhbHNlLAorICAgICAgICAgICAgInJlbW92ZUV2ZW50TGlzdGVuZXIiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiOiBmYWxzZSwKKyAgICAgICAgICAgICJyZXNp
emVCeSI6IGZhbHNlLAorICAgICAgICAgICAgInJlc2l6ZVRvIjogZmFsc2UsCisgICAgICAgICAg
ICAic2NyZWVuIjogZmFsc2UsCisgICAgICAgICAgICAic2NyZWVuWCI6IGZhbHNlLAorICAgICAg
ICAgICAgInNjcmVlblkiOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JvbGwiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJzY3JvbGxiYXJzIjogZmFsc2UsCisgICAgICAgICAgICAic2Nyb2xsQnkiOiBm
YWxzZSwKKyAgICAgICAgICAgICJzY3JvbGxUbyI6IGZhbHNlLAorICAgICAgICAgICAgInNjcm9s
bFgiOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JvbGxZIjogZmFsc2UsCisgICAgICAgICAgICAi
c2VsZiI6IGZhbHNlLAorICAgICAgICAgICAgInNlc3Npb25TdG9yYWdlIjogZmFsc2UsCisgICAg
ICAgICAgICAic2V0SW50ZXJ2YWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJzZXRUaW1lb3V0Ijog
ZmFsc2UsCisgICAgICAgICAgICAiU2hhcmVkV29ya2VyIjogZmFsc2UsCisgICAgICAgICAgICAi
c2hvd01vZGFsRGlhbG9nIjogZmFsc2UsCisgICAgICAgICAgICAic3RvcCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR0FFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQWx0R2x5cGhE
ZWZFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQWx0R2x5cGhFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHQWx0R2x5cGhJdGVtRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0FuZ2xlIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZUNvbG9yRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkQW5nbGUiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdBbmltYXRlZEJvb2xlYW4iOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdB
bmltYXRlZEVudW1lcmF0aW9uIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRJbnRl
Z2VyIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRMZW5ndGgiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdBbmltYXRlZExlbmd0aExpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdBbmltYXRlZE51bWJlciI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkTnVtYmVy
TGlzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
byI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVkUmVjdCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0FuaW1hdGVkU3RyaW5nIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZUVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlTW90aW9uRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHQW5pbWF0aW9uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0NpcmNs
ZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdDbGlwUGF0aEVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdDb2xvciI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0NvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQ3Vy
c29yRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0RlZnNFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHRGVzY0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdE
b2N1bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0VsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdFbGVtZW50SW5zdGFuY2UiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdFbGVt
ZW50SW5zdGFuY2VMaXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRWxsaXBzZUVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUJsZW5kRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUNvbnZvbHZlTWF0cml4
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR0ZFRmxvb2RFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVG
dW5jQUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUZ1bmNCRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0ZFRnVuY0dFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHRkVGdW5jUkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUltYWdlRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0ZFTWVyZ2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVNb3Jw
aG9sb2d5RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFT2Zmc2V0RWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHRkVTcG90TGlnaHRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVU
aWxlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGaWx0ZXJFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHRm9udEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGb250RmFjZUVs
ZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGb250RmFjZUZvcm1hdEVsZW1lbnQiOiBm
YWxzZSwKKyAgICAgICAgICAgICJTVkdGb250RmFjZU5hbWVFbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHRm9udEZhY2VTcmNFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
Rm9udEZhY2VVcmlFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdHRWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR0dseXBoRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0dseXBo
UmVmRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0dyYWRpZW50RWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0hLZXJuRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR0ltYWdlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0xlbmd0aCI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR0xlbmd0aExpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdMaW5lRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR01hcmtlckVsZW1lbnQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJTVkdNYXNrRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR01hdHJpeCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR01ldGFkYXRhRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdN
UGF0aEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdOdW1iZXIiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdOdW1iZXJMaXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGFpbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR1BhdGhTZWciOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQXJjQWJzIjog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0FyY1JlbCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR1BhdGhTZWdDbG9zZVBhdGgiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2Vn
Q3VydmV0b0N1YmljQWJzIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1JlbCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9v
dGhBYnMiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3Ro
UmVsIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoQWJzIjog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhSZWwi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRvQWJzIjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxBYnMiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1BhdGhTZWdMaW5ldG9SZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGlu
ZXRvVmVydGljYWxBYnMiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGluZXRvVmVy
dGljYWxSZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnTGlzdCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR1BhdGhTZWdNb3ZldG9BYnMiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdQYXRoU2VnTW92ZXRvUmVsIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0dGVybkVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQb2ludCI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1BvaW50TGlzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BvbHlnb25FbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHUG9seWxpbmVFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1JlY3QiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdSZWN0RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNW
R1JlbmRlcmluZ0ludGVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1NjcmlwdEVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdTZXRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHU3RvcEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdTdHJpbmdMaXN0Ijog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHU3R5bGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHU1ZHRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1N3aXRjaEVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdTeW1ib2xFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHVGV4dENvbnRlbnRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVGV4
dEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdUZXh0UGF0aEVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHVGl0bGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVHJhbnNm
b3JtIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVHJhbnNmb3JtTGlzdCI6IGZhbHNlLAorICAg
ICAgICAgICAgIlNWR1RSZWZFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVFNwYW5F
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVW5pdFR5cGVzIjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHVXNlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1ZpZXdFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVmlld1NwZWMiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdWS2VybkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJ0b3AiOiBmYWxzZSwK
KyAgICAgICAgICAgICJXZWJTb2NrZXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJ3aW5kb3ciOiBm
YWxzZSwKKyAgICAgICAgICAgICJXb3JrZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJYTUxIdHRw
UmVxdWVzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlhNTFNlcmlhbGl6ZXIiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJYUGF0aEV2YWx1YXRvciI6IGZhbHNlLAorICAgICAgICAgICAgIlhQYXRoRXhw
cmVzc2lvbiI6IGZhbHNlLAorICAgICAgICAgICAgIlhQYXRoUmVzdWx0IjogZmFsc2UKKyAgICAg
ICAgfQorICAgIH0sCisKKyAgICAibm9kZSI6IHsKKyAgICAgICAgImdsb2JhbHMiOiB7CisgICAg
ICAgICAgICAiX19maWxlbmFtZSI6IGZhbHNlLAorICAgICAgICAgICAgIl9fZGlybmFtZSI6IGZh
bHNlLAorICAgICAgICAgICAgIkJ1ZmZlciI6IGZhbHNlLAorICAgICAgICAgICAgIkRhdGFWaWV3
IjogZmFsc2UsCisgICAgICAgICAgICAiY29uc29sZSI6IGZhbHNlLAorICAgICAgICAgICAgImV4
cG9ydHMiOiB0cnVlLAorICAgICAgICAgICAgIkdMT0JBTCI6IGZhbHNlLAorICAgICAgICAgICAg
Imdsb2JhbCI6IGZhbHNlLAorICAgICAgICAgICAgIm1vZHVsZSI6IGZhbHNlLAorICAgICAgICAg
ICAgInByb2Nlc3MiOiBmYWxzZSwKKyAgICAgICAgICAgICJyZXF1aXJlIjogZmFsc2UsCisgICAg
ICAgICAgICAic2V0VGltZW91dCI6IGZhbHNlLAorICAgICAgICAgICAgImNsZWFyVGltZW91dCI6
IGZhbHNlLAorICAgICAgICAgICAgInNldEludGVydmFsIjogZmFsc2UsCisgICAgICAgICAgICAi
Y2xlYXJJbnRlcnZhbCI6IGZhbHNlLAorICAgICAgICAgICAgInNldEltbWVkaWF0ZSI6IGZhbHNl
LAorICAgICAgICAgICAgImNsZWFySW1tZWRpYXRlIjogZmFsc2UKKyAgICAgICAgfSwKKworICAg
ICAgICAicnVsZXMiOiB7CisgICAgICAgICAgICAibm8tY2F0Y2gtc2hhZG93IjogMCwKKyAgICAg
ICAgICAgICJuby1jb25zb2xlIjogMCwKKyAgICAgICAgICAgICJuby1taXhlZC1yZXF1aXJlcyI6
IDIsCisgICAgICAgICAgICAibm8tbmV3LXJlcXVpcmUiOiAyLAorICAgICAgICAgICAgIm5vLXBh
dGgtY29uY2F0IjogMiwKKyAgICAgICAgICAgICJuby1wcm9jZXNzLWV4aXQiOiAyLAorICAgICAg
ICAgICAgImdsb2JhbC1zdHJpY3QiOiBbMCwgImFsd2F5cyJdLAorICAgICAgICAgICAgImhhbmRs
ZS1jYWxsYmFjay1lcnIiOiBbMiwgImVyciJdCisgICAgICAgIH0KKyAgICB9LAorCisgICAgImFt
ZCI6IHsKKyAgICAgICAgImdsb2JhbHMiOiB7CisgICAgICAgICAgICAicmVxdWlyZSI6IGZhbHNl
LAorICAgICAgICAgICAgImRlZmluZSI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9LAorCisgICAg
Im1vY2hhIjogeworICAgICAgICAiZ2xvYmFscyI6IHsKKyAgICAgICAgICAgICJkZXNjcmliZSI6
IGZhbHNlLAorICAgICAgICAgICAgIml0IjogZmFsc2UsCisgICAgICAgICAgICAiYmVmb3JlIjog
ZmFsc2UsCisgICAgICAgICAgICAiYWZ0ZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJiZWZvcmVF
YWNoIjogZmFsc2UsCisgICAgICAgICAgICAiYWZ0ZXJFYWNoIjogZmFsc2UsCisKKyAgICAgICAg
ICAgICJzdWl0ZSI6IGZhbHNlLAorICAgICAgICAgICAgInRlc3QiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJzZXR1cCI6IGZhbHNlLAorICAgICAgICAgICAgInRlYXJkb3duIjogZmFsc2UsCisgICAg
ICAgICAgICAic3VpdGVTZXR1cCI6IGZhbHNlLAorICAgICAgICAgICAgInN1aXRlVGVhcmRvd24i
OiBmYWxzZQorICAgICAgICB9CisgICAgfSwKKworICAgICJqYXNtaW5lIjogeworICAgICAgICAi
Z2xvYmFscyI6IHsKKyAgICAgICAgICAgICJhZnRlckVhY2giOiBmYWxzZSwKKyAgICAgICAgICAg
ICJiZWZvcmVFYWNoIjogZmFsc2UsCisgICAgICAgICAgICAiZGVzY3JpYmUiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJleHBlY3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJpdCI6IGZhbHNlLAorICAg
ICAgICAgICAgImphc21pbmUiOiBmYWxzZSwKKyAgICAgICAgICAgICJwZW5kaW5nIjogZmFsc2Us
CisgICAgICAgICAgICAic3B5T24iOiBmYWxzZSwKKyAgICAgICAgICAgICJ3YWl0cyI6IGZhbHNl
LAorICAgICAgICAgICAgIndhaXRzRm9yIjogZmFsc2UsCisgICAgICAgICAgICAieGRlc2NyaWJl
IjogZmFsc2UsCisgICAgICAgICAgICAieGl0IjogZmFsc2UsCisKKyAgICAgICAgICAgICJiZWZv
cmVBbGwiOiBmYWxzZSwKKyAgICAgICAgICAgICJhZnRlckFsbCI6IGZhbHNlLAorICAgICAgICAg
ICAgInJ1bnMiOiBmYWxzZQorICAgICAgICB9CisgICAgfQorfQorCit9LHt9XSwyOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKK21vZHVsZS5leHBvcnRzPXsKKyAgICAiZW52Ijog
eworICAgICAgICAiYnJvd3NlciI6IGZhbHNlLAorICAgICAgICAibm9kZSI6IGZhbHNlLAorICAg
ICAgICAiYW1kIjogZmFsc2UsCisgICAgICAgICJtb2NoYSI6IGZhbHNlLAorICAgICAgICAiamFz
bWluZSI6IGZhbHNlCisgICAgfSwKKworICAgICJydWxlcyI6IHsKKyAgICAgICAgIm5vLWFsZXJ0
IjogMiwKKyAgICAgICAgIm5vLWFycmF5LWNvbnN0cnVjdG9yIjogMiwKKyAgICAgICAgIm5vLWJp
dHdpc2UiOiAwLAorICAgICAgICAibm8tY2FsbGVyIjogMiwKKyAgICAgICAgIm5vLWNhdGNoLXNo
YWRvdyI6IDIsCisgICAgICAgICJuby1jb21tYS1kYW5nbGUiOiAyLAorICAgICAgICAibm8tY29u
ZC1hc3NpZ24iOiAyLAorICAgICAgICAibm8tY29uc29sZSI6IDIsCisgICAgICAgICJuby1jb25z
dGFudC1jb25kaXRpb24iOiAyLAorICAgICAgICAibm8tY29udHJvbC1yZWdleCI6IDIsCisgICAg
ICAgICJuby1kZWJ1Z2dlciI6IDIsCisgICAgICAgICJuby1kZWxldGUtdmFyIjogMiwKKyAgICAg
ICAgIm5vLWRpdi1yZWdleCI6IDAsCisgICAgICAgICJuby1kdXBlLWtleXMiOiAyLAorICAgICAg
ICAibm8tZWxzZS1yZXR1cm4iOiAwLAorICAgICAgICAibm8tZW1wdHkiOiAyLAorICAgICAgICAi
bm8tZW1wdHktY2xhc3MiOiAyLAorICAgICAgICAibm8tZW1wdHktbGFiZWwiOiAyLAorICAgICAg
ICAibm8tZXEtbnVsbCI6IDAsCisgICAgICAgICJuby1ldmFsIjogMiwKKyAgICAgICAgIm5vLWV4
LWFzc2lnbiI6IDIsCisgICAgICAgICJuby1leHRlbmQtbmF0aXZlIjogMiwKKyAgICAgICAgIm5v
LWV4dHJhLWJpbmQiOiAyLAorICAgICAgICAibm8tZXh0cmEtYm9vbGVhbi1jYXN0IjogMiwKKyAg
ICAgICAgIm5vLWV4dHJhLXBhcmVucyI6IDAsCisgICAgICAgICJuby1leHRyYS1zZW1pIjogMiwK
KyAgICAgICAgIm5vLWV4dHJhLXN0cmljdCI6IDIsCisgICAgICAgICJuby1mYWxsdGhyb3VnaCI6
IDIsCisgICAgICAgICJuby1mbG9hdGluZy1kZWNpbWFsIjogMCwKKyAgICAgICAgIm5vLWZ1bmMt
YXNzaWduIjogMiwKKyAgICAgICAgIm5vLWltcGxpZWQtZXZhbCI6IDIsCisgICAgICAgICJuby1p
bm5lci1kZWNsYXJhdGlvbnMiOiBbMiwgImZ1bmN0aW9ucyJdLAorICAgICAgICAibm8taW52YWxp
ZC1yZWdleHAiOiAyLAorICAgICAgICAibm8taXRlcmF0b3IiOiAyLAorICAgICAgICAibm8tbGFi
ZWwtdmFyIjogMiwKKyAgICAgICAgIm5vLWxhYmVscyI6IDIsCisgICAgICAgICJuby1sb25lLWJs
b2NrcyI6IDIsCisgICAgICAgICJuby1sb25lbHktaWYiOiAwLAorICAgICAgICAibm8tbG9vcC1m
dW5jIjogMiwKKyAgICAgICAgIm5vLW1peGVkLXJlcXVpcmVzIjogWzAsIGZhbHNlXSwKKyAgICAg
ICAgIm5vLW1peGVkLXNwYWNlcy1hbmQtdGFicyI6IFsyLCBmYWxzZV0sCisgICAgICAgICJuby1t
dWx0aS1zdHIiOiAyLAorICAgICAgICAibm8tbmF0aXZlLXJlYXNzaWduIjogMiwKKyAgICAgICAg
Im5vLW5lZ2F0ZWQtaW4tbGhzIjogMiwKKyAgICAgICAgIm5vLW5lc3RlZC10ZXJuYXJ5IjogMCwK
KyAgICAgICAgIm5vLW5ldyI6IDIsCisgICAgICAgICJuby1uZXctZnVuYyI6IDIsCisgICAgICAg
ICJuby1uZXctb2JqZWN0IjogMiwKKyAgICAgICAgIm5vLW5ldy1yZXF1aXJlIjogMCwKKyAgICAg
ICAgIm5vLW5ldy13cmFwcGVycyI6IDIsCisgICAgICAgICJuby1vYmotY2FsbHMiOiAyLAorICAg
ICAgICAibm8tb2N0YWwiOiAyLAorICAgICAgICAibm8tb2N0YWwtZXNjYXBlIjogMiwKKyAgICAg
ICAgIm5vLXBhdGgtY29uY2F0IjogMCwKKyAgICAgICAgIm5vLXBsdXNwbHVzIjogMCwKKyAgICAg
ICAgIm5vLXByb2Nlc3MtZW52IjogMCwKKyAgICAgICAgIm5vLXByb2Nlc3MtZXhpdCI6IDIsCisg
ICAgICAgICJuby1wcm90byI6IDIsCisgICAgICAgICJuby1yZWRlY2xhcmUiOiAyLAorICAgICAg
ICAibm8tcmVnZXgtc3BhY2VzIjogMiwKKyAgICAgICAgIm5vLXJlc2VydmVkLWtleXMiOiAwLAor
ICAgICAgICAibm8tcmVzdHJpY3RlZC1tb2R1bGVzIjogMCwKKyAgICAgICAgIm5vLXJldHVybi1h
c3NpZ24iOiAyLAorICAgICAgICAibm8tc2NyaXB0LXVybCI6IDIsCisgICAgICAgICJuby1zZWxm
LWNvbXBhcmUiOiAwLAorICAgICAgICAibm8tc2VxdWVuY2VzIjogMiwKKyAgICAgICAgIm5vLXNo
YWRvdyI6IDIsCisgICAgICAgICJuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lcyI6IDIsCisgICAg
ICAgICJuby1zcGFjZS1iZWZvcmUtc2VtaSI6IDIsCisgICAgICAgICJuby1zcGFjZWQtZnVuYyI6
IDIsCisgICAgICAgICJuby1zcGFyc2UtYXJyYXlzIjogMiwKKyAgICAgICAgIm5vLXN5bmMiOiAw
LAorICAgICAgICAibm8tdGVybmFyeSI6IDAsCisgICAgICAgICJuby10cmFpbGluZy1zcGFjZXMi
OiAyLAorICAgICAgICAibm8tdW5kZWYiOiAyLAorICAgICAgICAibm8tdW5kZWYtaW5pdCI6IDIs
CisgICAgICAgICJuby11bmRlZmluZWQiOiAwLAorICAgICAgICAibm8tdW5kZXJzY29yZS1kYW5n
bGUiOiAyLAorICAgICAgICAibm8tdW5yZWFjaGFibGUiOiAyLAorICAgICAgICAibm8tdW51c2Vk
LWV4cHJlc3Npb25zIjogMiwKKyAgICAgICAgIm5vLXVudXNlZC12YXJzIjogWzIsIHsidmFycyI6
ICJhbGwiLCAiYXJncyI6ICJhZnRlci11c2VkIn1dLAorICAgICAgICAibm8tdXNlLWJlZm9yZS1k
ZWZpbmUiOiAyLAorICAgICAgICAibm8tdm9pZCI6IDAsCisgICAgICAgICJuby13YXJuaW5nLWNv
bW1lbnRzIjogWzAsIHsgInRlcm1zIjogWyJ0b2RvIiwgImZpeG1lIiwgInh4eCJdLCAibG9jYXRp
b24iOiAic3RhcnQiIH1dLAorICAgICAgICAibm8td2l0aCI6IDIsCisgICAgICAgICJuby13cmFw
LWZ1bmMiOiAyLAorCisgICAgICAgICJibG9jay1zY29wZWQtdmFyIjogMCwKKyAgICAgICAgImJy
YWNlLXN0eWxlIjogWzAsICIxdGJzIl0sCisgICAgICAgICJjYW1lbGNhc2UiOiAyLAorICAgICAg
ICAiY29tbWEtc3R5bGUiOiAwLAorICAgICAgICAiY29tcGxleGl0eSI6IFswLCAxMV0sCisgICAg
ICAgICJjb25zaXN0ZW50LXJldHVybiI6IDIsCisgICAgICAgICJjb25zaXN0ZW50LXRoaXMiOiBb
MCwgInRoYXQiXSwKKyAgICAgICAgImN1cmx5IjogWzIsICJhbGwiXSwKKyAgICAgICAgImRlZmF1
bHQtY2FzZSI6IDAsCisgICAgICAgICJkb3Qtbm90YXRpb24iOiAyLAorICAgICAgICAiZW9sLWxh
c3QiOiAyLAorICAgICAgICAiZXFlcWVxIjogMiwKKyAgICAgICAgImZ1bmMtbmFtZXMiOiAwLAor
ICAgICAgICAiZnVuYy1zdHlsZSI6IFswLCAiZGVjbGFyYXRpb24iXSwKKyAgICAgICAgImdsb2Jh
bC1zdHJpY3QiOiBbMiwgIm5ldmVyIl0sCisgICAgICAgICJndWFyZC1mb3ItaW4iOiAwLAorICAg
ICAgICAiaGFuZGxlLWNhbGxiYWNrLWVyciI6IDAsCisgICAgICAgICJtYXgtZGVwdGgiOiBbMCwg
NF0sCisgICAgICAgICJtYXgtbGVuIjogWzAsIDgwLCA0XSwKKyAgICAgICAgIm1heC1uZXN0ZWQt
Y2FsbGJhY2tzIjogWzAsIDJdLAorICAgICAgICAibWF4LXBhcmFtcyI6IFswLCAzXSwKKyAgICAg
ICAgIm1heC1zdGF0ZW1lbnRzIjogWzAsIDEwXSwKKyAgICAgICAgIm5ldy1jYXAiOiAyLAorICAg
ICAgICAibmV3LXBhcmVucyI6IDIsCisgICAgICAgICJvbmUtdmFyIjogMCwKKyAgICAgICAgInBh
ZGRlZC1ibG9ja3MiOiAwLAorICAgICAgICAicXVvdGUtcHJvcHMiOiAwLAorICAgICAgICAicXVv
dGVzIjogWzIsICJkb3VibGUiXSwKKyAgICAgICAgInJhZGl4IjogMCwKKyAgICAgICAgInNlbWki
OiAyLAorICAgICAgICAic29ydC12YXJzIjogMCwKKyAgICAgICAgInNwYWNlLWFmdGVyLWtleXdv
cmRzIjogWzAsICJhbHdheXMiXSwKKyAgICAgICAgInNwYWNlLWluLWJyYWNrZXRzIjogWzAsICJu
ZXZlciJdLAorICAgICAgICAic3BhY2UtaW4tcGFyZW5zIjogWzAsICJuZXZlciJdLAorICAgICAg
ICAic3BhY2UtaW5maXgtb3BzIjogMiwKKyAgICAgICAgInNwYWNlLXJldHVybi10aHJvdy1jYXNl
IjogMiwKKyAgICAgICAgInNwYWNlLXVuYXJ5LXdvcmQtb3BzIjogMCwKKyAgICAgICAgInN0cmlj
dCI6IDIsCisgICAgICAgICJ1c2UtaXNuYW4iOiAyLAorICAgICAgICAidmFsaWQtanNkb2MiOiAw
LAorICAgICAgICAidmFsaWQtdHlwZW9mIjogMiwKKyAgICAgICAgInZhcnMtb24tdG9wIjogMCwK
KyAgICAgICAgIndyYXAtaWlmZSI6IDAsCisgICAgICAgICJ3cmFwLXJlZ2V4IjogMCwKKyAgICAg
ICAgInlvZGEiOiBbMiwgIm5ldmVyIl0KKyAgICB9Cit9CisKK30se31dLDM6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3Ro
ZXIgTm9kZSBjb250cmlidXRvcnMuCisvLworLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl
ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKy8vIGNvcHkgb2Yg
dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKy8v
ICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u
LCBpbmNsdWRpbmcKKy8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w
eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKy8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu
ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQKKy8vIHBlcnNv
bnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv
IHRoZQorLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6CisvLworLy8gVGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKy8v
IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgor
Ly8KKy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ
IE9GIEFOWSBLSU5ELCBFWFBSRVNTCisvLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM
SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisvLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOCisvLyBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S
IEFOWSBDTEFJTSwKKy8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO
IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00s
IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorLy8gVVNF
IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworZnVuY3Rpb24gRXZlbnRFbWl0
dGVyKCkgeworICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307CisgIHRoaXMuX21h
eExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7Cit9Cittb2R1bGUu
ZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjsKKworLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUg
MC4xMC54CitFdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOworCitFdmVu
dEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7CitFdmVudEVtaXR0ZXIucHJv
dG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7CisKKy8vIEJ5IGRlZmF1bHQgRXZlbnRF
bWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFy
ZQorLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBm
aW5kaW5nIG1lbW9yeSBsZWFrcy4KK0V2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0g
MTA7CisKKy8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRv
IDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93cworLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0
byB6ZXJvIGZvciB1bmxpbWl0ZWQuCitFdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3Rl
bmVycyA9IGZ1bmN0aW9uKG4pIHsKKyAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05h
TihuKSkKKyAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicp
OworICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuOworICByZXR1cm4gdGhpczsKK307CisKK0V2ZW50
RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHsKKyAgdmFyIGVyLCBoYW5k
bGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVyczsKKworICBpZiAoIXRoaXMuX2V2ZW50cykKKyAg
ICB0aGlzLl9ldmVudHMgPSB7fTsKKworICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50
IGxpc3RlbmVyIHRoZW4gdGhyb3cuCisgIGlmICh0eXBlID09PSAnZXJyb3InKSB7CisgICAgaWYg
KCF0aGlzLl9ldmVudHMuZXJyb3IgfHwKKyAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5l
cnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7CisgICAgICBlciA9IGFyZ3Vt
ZW50c1sxXTsKKyAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7CisgICAgICAgIHRocm93
IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudAorICAgICAgfQorICAgICAgdGhyb3cgVHlw
ZUVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgImVycm9yIiBldmVudC4nKTsKKyAgICB9Cisg
IH0KKworICBoYW5kbGVyID0gdGhpcy5fZXZlbnRzW3R5cGVdOworCisgIGlmIChpc1VuZGVmaW5l
ZChoYW5kbGVyKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKGlzRnVuY3Rpb24oaGFuZGxl
cikpIHsKKyAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgIC8vIGZhc3QgY2Fz
ZXMKKyAgICAgIGNhc2UgMToKKyAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50
c1sxXSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAzOgorICAgICAgICBoYW5kbGVyLmNh
bGwodGhpcywgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pOworICAgICAgICBicmVhazsKKyAg
ICAgIC8vIHNsb3dlcgorICAgICAgZGVmYXVsdDoKKyAgICAgICAgbGVuID0gYXJndW1lbnRzLmxl
bmd0aDsKKyAgICAgICAgYXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTsKKyAgICAgICAgZm9yIChp
ID0gMTsgaSA8IGxlbjsgaSsrKQorICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ld
OworICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpOworICAgIH0KKyAgfSBlbHNlIGlm
IChpc09iamVjdChoYW5kbGVyKSkgeworICAgIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7CisgICAg
YXJncyA9IG5ldyBBcnJheShsZW4gLSAxKTsKKyAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKysp
CisgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTsKKworICAgIGxpc3RlbmVycyA9IGhh
bmRsZXIuc2xpY2UoKTsKKyAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoOworICAgIGZvciAoaSA9
IDA7IGkgPCBsZW47IGkrKykKKyAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTsK
KyAgfQorCisgIHJldHVybiB0cnVlOworfTsKKworRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRM
aXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7CisgIHZhciBtOworCisgIGlmICgh
aXNGdW5jdGlvbihsaXN0ZW5lcikpCisgICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0
IGJlIGEgZnVuY3Rpb24nKTsKKworICBpZiAoIXRoaXMuX2V2ZW50cykKKyAgICB0aGlzLl9ldmVu
dHMgPSB7fTsKKworICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBl
ID09PSAibmV3TGlzdGVuZXIiISBCZWZvcmUKKyAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5l
cnMsIGZpcnN0IGVtaXQgIm5ld0xpc3RlbmVyIi4KKyAgaWYgKHRoaXMuX2V2ZW50cy5uZXdMaXN0
ZW5lcikKKyAgICB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSwKKyAgICAgICAgICAgICAg
aXNGdW5jdGlvbihsaXN0ZW5lci5saXN0ZW5lcikgPworICAgICAgICAgICAgICBsaXN0ZW5lci5s
aXN0ZW5lciA6IGxpc3RlbmVyKTsKKworICBpZiAoIXRoaXMuX2V2ZW50c1t0eXBlXSkKKyAgICAv
LyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJh
IGFycmF5IG9iamVjdC4KKyAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjsKKyAgZWxz
ZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSkKKyAgICAvLyBJZiB3ZSd2ZSBhbHJl
YWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuCisgICAgdGhpcy5fZXZlbnRzW3R5cGVdLnB1
c2gobGlzdGVuZXIpOworICBlbHNlCisgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwg
bmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuCisgICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gW3RoaXMu
X2V2ZW50c1t0eXBlXSwgbGlzdGVuZXJdOworCisgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFr
CisgIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pICYmICF0aGlzLl9ldmVudHNbdHlw
ZV0ud2FybmVkKSB7CisgICAgdmFyIG07CisgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhM
aXN0ZW5lcnMpKSB7CisgICAgICBtID0gdGhpcy5fbWF4TGlzdGVuZXJzOworICAgIH0gZWxzZSB7
CisgICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7CisgICAgfQorCisg
ICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCA+IG0pIHsKKyAg
ICAgIHRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQgPSB0cnVlOworICAgICAgY29uc29sZS5lcnJv
cignKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgJyArCisgICAg
ICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgKwor
ICAgICAgICAgICAgICAgICAgICAnVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5j
cmVhc2UgbGltaXQuJywKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLmxl
bmd0aCk7CisgICAgICBpZiAodHlwZW9mIGNvbnNvbGUudHJhY2UgPT09ICdmdW5jdGlvbicpIHsK
KyAgICAgICAgLy8gbm90IHN1cHBvcnRlZCBpbiBJRSAxMAorICAgICAgICBjb25zb2xlLnRyYWNl
KCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIHRoaXM7Cit9OworCitFdmVudEVt
aXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjsK
KworRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIp
IHsKKyAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSkKKyAgICB0aHJvdyBUeXBlRXJyb3IoJ2xp
c3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpOworCisgIHZhciBmaXJlZCA9IGZhbHNlOworCisg
IGZ1bmN0aW9uIGcoKSB7CisgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBnKTsKKworICAg
IGlmICghZmlyZWQpIHsKKyAgICAgIGZpcmVkID0gdHJ1ZTsKKyAgICAgIGxpc3RlbmVyLmFwcGx5
KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgfQorICB9CisKKyAgZy5saXN0ZW5lciA9IGxpc3RlbmVy
OworICB0aGlzLm9uKHR5cGUsIGcpOworCisgIHJldHVybiB0aGlzOworfTsKKworLy8gZW1pdHMg
YSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQKK0V2
ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0
ZW5lcikgeworICB2YXIgbGlzdCwgcG9zaXRpb24sIGxlbmd0aCwgaTsKKworICBpZiAoIWlzRnVu
Y3Rpb24obGlzdGVuZXIpKQorICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBh
IGZ1bmN0aW9uJyk7CisKKyAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBl
XSkKKyAgICByZXR1cm4gdGhpczsKKworICBsaXN0ID0gdGhpcy5fZXZlbnRzW3R5cGVdOworICBs
ZW5ndGggPSBsaXN0Lmxlbmd0aDsKKyAgcG9zaXRpb24gPSAtMTsKKworICBpZiAobGlzdCA9PT0g
bGlzdGVuZXIgfHwKKyAgICAgIChpc0Z1bmN0aW9uKGxpc3QubGlzdGVuZXIpICYmIGxpc3QubGlz
dGVuZXIgPT09IGxpc3RlbmVyKSkgeworICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07Cisg
ICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikKKyAgICAgIHRoaXMuZW1pdCgncmVt
b3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7CisKKyAgfSBlbHNlIGlmIChpc09iamVjdChs
aXN0KSkgeworICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tID4gMDspIHsKKyAgICAgIGlmIChsaXN0
W2ldID09PSBsaXN0ZW5lciB8fAorICAgICAgICAgIChsaXN0W2ldLmxpc3RlbmVyICYmIGxpc3Rb
aV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkgeworICAgICAgICBwb3NpdGlvbiA9IGk7CisgICAg
ICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICAgIGlmIChwb3NpdGlvbiA8IDApCisgICAg
ICByZXR1cm4gdGhpczsKKworICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkgeworICAgICAgbGlz
dC5sZW5ndGggPSAwOworICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKyAgICB9IGVs
c2UgeworICAgICAgbGlzdC5zcGxpY2UocG9zaXRpb24sIDEpOworICAgIH0KKworICAgIGlmICh0
aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpCisgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3Rl
bmVyJywgdHlwZSwgbGlzdGVuZXIpOworICB9CisKKyAgcmV0dXJuIHRoaXM7Cit9OworCitFdmVu
dEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHsK
KyAgdmFyIGtleSwgbGlzdGVuZXJzOworCisgIGlmICghdGhpcy5fZXZlbnRzKQorICAgIHJldHVy
biB0aGlzOworCisgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVk
IHRvIGVtaXQKKyAgaWYgKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHsKKyAgICBpZiAo
YXJndW1lbnRzLmxlbmd0aCA9PT0gMCkKKyAgICAgIHRoaXMuX2V2ZW50cyA9IHt9OworICAgIGVs
c2UgaWYgKHRoaXMuX2V2ZW50c1t0eXBlXSkKKyAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlw
ZV07CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZv
ciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHMKKyAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09
IDApIHsKKyAgICBmb3IgKGtleSBpbiB0aGlzLl9ldmVudHMpIHsKKyAgICAgIGlmIChrZXkgPT09
ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlOworICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5l
cnMoa2V5KTsKKyAgICB9CisgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3Rl
bmVyJyk7CisgICAgdGhpcy5fZXZlbnRzID0ge307CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKwor
ICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07CisKKyAgaWYgKGlzRnVuY3Rpb24obGlz
dGVuZXJzKSkgeworICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTsKKyAg
fSBlbHNlIHsKKyAgICAvLyBMSUZPIG9yZGVyCisgICAgd2hpbGUgKGxpc3RlbmVycy5sZW5ndGgp
CisgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tsaXN0ZW5lcnMubGVu
Z3RoIC0gMV0pOworICB9CisgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07CisKKyAgcmV0dXJu
IHRoaXM7Cit9OworCitFdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9u
KHR5cGUpIHsKKyAgdmFyIHJldDsKKyAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50
c1t0eXBlXSkKKyAgICByZXQgPSBbXTsKKyAgZWxzZSBpZiAoaXNGdW5jdGlvbih0aGlzLl9ldmVu
dHNbdHlwZV0pKQorICAgIHJldCA9IFt0aGlzLl9ldmVudHNbdHlwZV1dOworICBlbHNlCisgICAg
cmV0ID0gdGhpcy5fZXZlbnRzW3R5cGVdLnNsaWNlKCk7CisgIHJldHVybiByZXQ7Cit9OworCitF
dmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHsKKyAg
dmFyIHJldDsKKyAgaWYgKCFlbWl0dGVyLl9ldmVudHMgfHwgIWVtaXR0ZXIuX2V2ZW50c1t0eXBl
XSkKKyAgICByZXQgPSAwOworICBlbHNlIGlmIChpc0Z1bmN0aW9uKGVtaXR0ZXIuX2V2ZW50c1t0
eXBlXSkpCisgICAgcmV0ID0gMTsKKyAgZWxzZQorICAgIHJldCA9IGVtaXR0ZXIuX2V2ZW50c1t0
eXBlXS5sZW5ndGg7CisgIHJldHVybiByZXQ7Cit9OworCitmdW5jdGlvbiBpc0Z1bmN0aW9uKGFy
ZykgeworICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJzsKK30KKworZnVuY3Rpb24g
aXNOdW1iZXIoYXJnKSB7CisgIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJzsKK30KKwor
ZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7CisgIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0
JyAmJiBhcmcgIT09IG51bGw7Cit9CisKK2Z1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykgeworICBy
ZXR1cm4gYXJnID09PSB2b2lkIDA7Cit9CisKK30se31dLDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoKKyAgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgWXVzdWtlIFN1enVr
aSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTQgRGFuIFRhbyA8
ZGFuaWVsLnRhb0BnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMyBBbmRyZXcgRWlzZW5i
ZXJnIDxhbmRyZXdAZWlzZW5iZXJnLmFzPgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
IG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKKyAg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisqLworCisvKmpzbGludCBiaXR3aXNlOnRydWUgcGx1c3BsdXM6dHJ1ZSBlcWVxOnRydWUgbm9t
ZW46dHJ1ZSovCisvKmdsb2JhbCBkb2N0cmluZTp0cnVlLCBleHBvcnRzOnRydWUsIHBhcnNlVHlw
ZUV4cHJlc3Npb246dHJ1ZSwgcGFyc2VUb3A6dHJ1ZSovCisKKyhmdW5jdGlvbiAoZXhwb3J0cykg
eworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBWRVJTSU9OLAorICAgICAgICBSZWdleCwK
KyAgICAgICAgQ2FuQWNjZXNzU3RyaW5nQnlJbmRleCwKKyAgICAgICAgdHlwZWQsCisgICAgICAg
IGpzZG9jLAorICAgICAgICBpc0FycmF5LAorICAgICAgICBoYXNPd25Qcm9wZXJ0eTsKKworICAg
IC8vIFN5bmMgd2l0aCBwYWNrYWdlLmpzb24uCisgICAgVkVSU0lPTiA9ICcwLjUuMi1kZXYnOwor
CisgICAgLy8gU2VlIGFsc28gdG9vbHMvZ2VuZXJhdGUtdW5pY29kZS1yZWdleC5weS4KKyAgICBS
ZWdleCA9IHsKKyAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAoJ1tc
eGFhXHhiNVx4YmFceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx1MDJjMVx1MDJjNi1cdTAyZDFcdTAy
ZTAtXHUwMmU0XHUwMmVjXHUwMmVlXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3YS1cdTAz
N2RcdTAzODZcdTAzODgtXHUwMzhhXHUwMzhjXHUwMzhlLVx1MDNhMVx1MDNhMy1cdTAzZjVcdTAz
ZjctXHUwNDgxXHUwNDhhLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUw
NWQwLVx1MDVlYVx1MDVmMC1cdTA1ZjJcdTA2MjAtXHUwNjRhXHUwNjZlXHUwNjZmXHUwNjcxLVx1
MDZkM1x1MDZkNVx1MDZlNVx1MDZlNlx1MDZlZVx1MDZlZlx1MDZmYS1cdTA2ZmNcdTA2ZmZcdTA3
MTBcdTA3MTItXHUwNzJmXHUwNzRkLVx1MDdhNVx1MDdiMVx1MDdjYS1cdTA3ZWFcdTA3ZjRcdTA3
ZjVcdTA3ZmFcdTA4MDAtXHUwODE1XHUwODFhXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhh
MFx1MDhhMi1cdTA4YWNcdTA5MDQtXHUwOTM5XHUwOTNkXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3
MS1cdTA5NzdcdTA5NzktXHUwOTdmXHUwOTg1LVx1MDk4Y1x1MDk4Zlx1MDk5MFx1MDk5My1cdTA5
YThcdTA5YWEtXHUwOWIwXHUwOWIyXHUwOWI2LVx1MDliOVx1MDliZFx1MDljZVx1MDlkY1x1MDlk
ZFx1MDlkZi1cdTA5ZTFcdTA5ZjBcdTA5ZjFcdTBhMDUtXHUwYTBhXHUwYTBmXHUwYTEwXHUwYTEz
LVx1MGEyOFx1MGEyYS1cdTBhMzBcdTBhMzJcdTBhMzNcdTBhMzVcdTBhMzZcdTBhMzhcdTBhMzlc
dTBhNTktXHUwYTVjXHUwYTVlXHUwYTcyLVx1MGE3NFx1MGE4NS1cdTBhOGRcdTBhOGYtXHUwYTkx
XHUwYTkzLVx1MGFhOFx1MGFhYS1cdTBhYjBcdTBhYjJcdTBhYjNcdTBhYjUtXHUwYWI5XHUwYWJk
XHUwYWQwXHUwYWUwXHUwYWUxXHUwYjA1LVx1MGIwY1x1MGIwZlx1MGIxMFx1MGIxMy1cdTBiMjhc
dTBiMmEtXHUwYjMwXHUwYjMyXHUwYjMzXHUwYjM1LVx1MGIzOVx1MGIzZFx1MGI1Y1x1MGI1ZFx1
MGI1Zi1cdTBiNjFcdTBiNzFcdTBiODNcdTBiODUtXHUwYjhhXHUwYjhlLVx1MGI5MFx1MGI5Mi1c
dTBiOTVcdTBiOTlcdTBiOWFcdTBiOWNcdTBiOWVcdTBiOWZcdTBiYTNcdTBiYTRcdTBiYTgtXHUw
YmFhXHUwYmFlLVx1MGJiOVx1MGJkMFx1MGMwNS1cdTBjMGNcdTBjMGUtXHUwYzEwXHUwYzEyLVx1
MGMyOFx1MGMyYS1cdTBjMzNcdTBjMzUtXHUwYzM5XHUwYzNkXHUwYzU4XHUwYzU5XHUwYzYwXHUw
YzYxXHUwYzg1LVx1MGM4Y1x1MGM4ZS1cdTBjOTBcdTBjOTItXHUwY2E4XHUwY2FhLVx1MGNiM1x1
MGNiNS1cdTBjYjlcdTBjYmRcdTBjZGVcdTBjZTBcdTBjZTFcdTBjZjFcdTBjZjJcdTBkMDUtXHUw
ZDBjXHUwZDBlLVx1MGQxMFx1MGQxMi1cdTBkM2FcdTBkM2RcdTBkNGVcdTBkNjBcdTBkNjFcdTBk
N2EtXHUwZDdmXHUwZDg1LVx1MGQ5Nlx1MGQ5YS1cdTBkYjFcdTBkYjMtXHUwZGJiXHUwZGJkXHUw
ZGMwLVx1MGRjNlx1MGUwMS1cdTBlMzBcdTBlMzJcdTBlMzNcdTBlNDAtXHUwZTQ2XHUwZTgxXHUw
ZTgyXHUwZTg0XHUwZTg3XHUwZTg4XHUwZThhXHUwZThkXHUwZTk0LVx1MGU5N1x1MGU5OS1cdTBl
OWZcdTBlYTEtXHUwZWEzXHUwZWE1XHUwZWE3XHUwZWFhXHUwZWFiXHUwZWFkLVx1MGViMFx1MGVi
Mlx1MGViM1x1MGViZFx1MGVjMC1cdTBlYzRcdTBlYzZcdTBlZGMtXHUwZWRmXHUwZjAwXHUwZjQw
LVx1MGY0N1x1MGY0OS1cdTBmNmNcdTBmODgtXHUwZjhjXHUxMDAwLVx1MTAyYVx1MTAzZlx1MTA1
MC1cdTEwNTVcdTEwNWEtXHUxMDVkXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZlLVx1MTA3MFx1MTA3
NS1cdTEwODFcdTEwOGVcdTEwYTAtXHUxMGM1XHUxMGM3XHUxMGNkXHUxMGQwLVx1MTBmYVx1MTBm
Yy1cdTEyNDhcdTEyNGEtXHUxMjRkXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1YS1cdTEyNWRcdTEy
NjAtXHUxMjg4XHUxMjhhLVx1MTI4ZFx1MTI5MC1cdTEyYjBcdTEyYjItXHUxMmI1XHUxMmI4LVx1
MTJiZVx1MTJjMFx1MTJjMi1cdTEyYzVcdTEyYzgtXHUxMmQ2XHUxMmQ4LVx1MTMxMFx1MTMxMi1c
dTEzMTVcdTEzMTgtXHUxMzVhXHUxMzgwLVx1MTM4Zlx1MTNhMC1cdTEzZjRcdTE0MDEtXHUxNjZj
XHUxNjZmLVx1MTY3Zlx1MTY4MS1cdTE2OWFcdTE2YTAtXHUxNmVhXHUxNmVlLVx1MTZmMFx1MTcw
MC1cdTE3MGNcdTE3MGUtXHUxNzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAtXHUx
NzZjXHUxNzZlLVx1MTc3MFx1MTc4MC1cdTE3YjNcdTE3ZDdcdTE3ZGNcdTE4MjAtXHUxODc3XHUx
ODgwLVx1MThhOFx1MThhYVx1MThiMC1cdTE4ZjVcdTE5MDAtXHUxOTFjXHUxOTUwLVx1MTk2ZFx1
MTk3MC1cdTE5NzRcdTE5ODAtXHUxOWFiXHUxOWMxLVx1MTljN1x1MWEwMC1cdTFhMTZcdTFhMjAt
XHUxYTU0XHUxYWE3XHUxYjA1LVx1MWIzM1x1MWI0NS1cdTFiNGJcdTFiODMtXHUxYmEwXHUxYmFl
XHUxYmFmXHUxYmJhLVx1MWJlNVx1MWMwMC1cdTFjMjNcdTFjNGQtXHUxYzRmXHUxYzVhLVx1MWM3
ZFx1MWNlOS1cdTFjZWNcdTFjZWUtXHUxY2YxXHUxY2Y1XHUxY2Y2XHUxZDAwLVx1MWRiZlx1MWUw
MC1cdTFmMTVcdTFmMTgtXHUxZjFkXHUxZjIwLVx1MWY0NVx1MWY0OC1cdTFmNGRcdTFmNTAtXHUx
ZjU3XHUxZjU5XHUxZjViXHUxZjVkXHUxZjVmLVx1MWY3ZFx1MWY4MC1cdTFmYjRcdTFmYjYtXHUx
ZmJjXHUxZmJlXHUxZmMyLVx1MWZjNFx1MWZjNi1cdTFmY2NcdTFmZDAtXHUxZmQzXHUxZmQ2LVx1
MWZkYlx1MWZlMC1cdTFmZWNcdTFmZjItXHUxZmY0XHUxZmY2LVx1MWZmY1x1MjA3MVx1MjA3Zlx1
MjA5MC1cdTIwOWNcdTIxMDJcdTIxMDdcdTIxMGEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExZFx1
MjEyNFx1MjEyNlx1MjEyOFx1MjEyYS1cdTIxMmRcdTIxMmYtXHUyMTM5XHUyMTNjLVx1MjEzZlx1
MjE0NS1cdTIxNDlcdTIxNGVcdTIxNjAtXHUyMTg4XHUyYzAwLVx1MmMyZVx1MmMzMC1cdTJjNWVc
dTJjNjAtXHUyY2U0XHUyY2ViLVx1MmNlZVx1MmNmMlx1MmNmM1x1MmQwMC1cdTJkMjVcdTJkMjdc
dTJkMmRcdTJkMzAtXHUyZDY3XHUyZDZmXHUyZDgwLVx1MmQ5Nlx1MmRhMC1cdTJkYTZcdTJkYTgt
XHUyZGFlXHUyZGIwLVx1MmRiNlx1MmRiOC1cdTJkYmVcdTJkYzAtXHUyZGM2XHUyZGM4LVx1MmRj
ZVx1MmRkMC1cdTJkZDZcdTJkZDgtXHUyZGRlXHUyZTJmXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMw
MjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzY1x1MzA0MS1cdTMwOTZcdTMwOWQtXHUzMDlmXHUz
MGExLVx1MzBmYVx1MzBmYy1cdTMwZmZcdTMxMDUtXHUzMTJkXHUzMTMxLVx1MzE4ZVx1MzFhMC1c
dTMxYmFcdTMxZjAtXHUzMWZmXHUzNDAwLVx1NGRiNVx1NGUwMC1cdTlmY2NcdWEwMDAtXHVhNDhj
XHVhNGQwLVx1YTRmZFx1YTUwMC1cdWE2MGNcdWE2MTAtXHVhNjFmXHVhNjJhXHVhNjJiXHVhNjQw
LVx1YTY2ZVx1YTY3Zi1cdWE2OTdcdWE2YTAtXHVhNmVmXHVhNzE3LVx1YTcxZlx1YTcyMi1cdWE3
ODhcdWE3OGItXHVhNzhlXHVhNzkwLVx1YTc5M1x1YTdhMC1cdWE3YWFcdWE3ZjgtXHVhODAxXHVh
ODAzLVx1YTgwNVx1YTgwNy1cdWE4MGFcdWE4MGMtXHVhODIyXHVhODQwLVx1YTg3M1x1YTg4Mi1c
dWE4YjNcdWE4ZjItXHVhOGY3XHVhOGZiXHVhOTBhLVx1YTkyNVx1YTkzMC1cdWE5NDZcdWE5NjAt
XHVhOTdjXHVhOTg0LVx1YTliMlx1YTljZlx1YWEwMC1cdWFhMjhcdWFhNDAtXHVhYTQyXHVhYTQ0
LVx1YWE0Ylx1YWE2MC1cdWFhNzZcdWFhN2FcdWFhODAtXHVhYWFmXHVhYWIxXHVhYWI1XHVhYWI2
XHVhYWI5LVx1YWFiZFx1YWFjMFx1YWFjMlx1YWFkYi1cdWFhZGRcdWFhZTAtXHVhYWVhXHVhYWYy
LVx1YWFmNFx1YWIwMS1cdWFiMDZcdWFiMDktXHVhYjBlXHVhYjExLVx1YWIxNlx1YWIyMC1cdWFi
MjZcdWFiMjgtXHVhYjJlXHVhYmMwLVx1YWJlMlx1YWMwMC1cdWQ3YTNcdWQ3YjAtXHVkN2M2XHVk
N2NiLVx1ZDdmYlx1ZjkwMC1cdWZhNmRcdWZhNzAtXHVmYWQ5XHVmYjAwLVx1ZmIwNlx1ZmIxMy1c
dWZiMTdcdWZiMWRcdWZiMWYtXHVmYjI4XHVmYjJhLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2Vc
dWZiNDBcdWZiNDFcdWZiNDNcdWZiNDRcdWZiNDYtXHVmYmIxXHVmYmQzLVx1ZmQzZFx1ZmQ1MC1c
dWZkOGZcdWZkOTItXHVmZGM3XHVmZGYwLVx1ZmRmYlx1ZmU3MC1cdWZlNzRcdWZlNzYtXHVmZWZj
XHVmZjIxLVx1ZmYzYVx1ZmY0MS1cdWZmNWFcdWZmNjYtXHVmZmJlXHVmZmMyLVx1ZmZjN1x1ZmZj
YS1cdWZmY2ZcdWZmZDItXHVmZmQ3XHVmZmRhLVx1ZmZkY10nKSwKKyAgICAgICAgTm9uQXNjaWlJ
ZGVudGlmaWVyUGFydDogbmV3IFJlZ0V4cCgnW1x4YWFceGI1XHhiYVx4YzAtXHhkNlx4ZDgtXHhm
Nlx4ZjgtXHUwMmMxXHUwMmM2LVx1MDJkMVx1MDJlMC1cdTAyZTRcdTAyZWNcdTAyZWVcdTAzMDAt
XHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdhLVx1MDM3ZFx1MDM4Nlx1MDM4OC1cdTAzOGFcdTAzOGNc
dTAzOGUtXHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNmNy1cdTA0ODFcdTA0ODMtXHUwNDg3XHUwNDhh
LVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNTkxLVx1MDViZFx1MDVi
Zlx1MDVjMVx1MDVjMlx1MDVjNFx1MDVjNVx1MDVjN1x1MDVkMC1cdTA1ZWFcdTA1ZjAtXHUwNWYy
XHUwNjEwLVx1MDYxYVx1MDYyMC1cdTA2NjlcdTA2NmUtXHUwNmQzXHUwNmQ1LVx1MDZkY1x1MDZk
Zi1cdTA2ZThcdTA2ZWEtXHUwNmZjXHUwNmZmXHUwNzEwLVx1MDc0YVx1MDc0ZC1cdTA3YjFcdTA3
YzAtXHUwN2Y1XHUwN2ZhXHUwODAwLVx1MDgyZFx1MDg0MC1cdTA4NWJcdTA4YTBcdTA4YTItXHUw
OGFjXHUwOGU0LVx1MDhmZVx1MDkwMC1cdTA5NjNcdTA5NjYtXHUwOTZmXHUwOTcxLVx1MDk3N1x1
MDk3OS1cdTA5N2ZcdTA5ODEtXHUwOTgzXHUwOTg1LVx1MDk4Y1x1MDk4Zlx1MDk5MFx1MDk5My1c
dTA5YThcdTA5YWEtXHUwOWIwXHUwOWIyXHUwOWI2LVx1MDliOVx1MDliYy1cdTA5YzRcdTA5Yzdc
dTA5YzhcdTA5Y2ItXHUwOWNlXHUwOWQ3XHUwOWRjXHUwOWRkXHUwOWRmLVx1MDllM1x1MDllNi1c
dTA5ZjFcdTBhMDEtXHUwYTAzXHUwYTA1LVx1MGEwYVx1MGEwZlx1MGExMFx1MGExMy1cdTBhMjhc
dTBhMmEtXHUwYTMwXHUwYTMyXHUwYTMzXHUwYTM1XHUwYTM2XHUwYTM4XHUwYTM5XHUwYTNjXHUw
YTNlLVx1MGE0Mlx1MGE0N1x1MGE0OFx1MGE0Yi1cdTBhNGRcdTBhNTFcdTBhNTktXHUwYTVjXHUw
YTVlXHUwYTY2LVx1MGE3NVx1MGE4MS1cdTBhODNcdTBhODUtXHUwYThkXHUwYThmLVx1MGE5MVx1
MGE5My1cdTBhYThcdTBhYWEtXHUwYWIwXHUwYWIyXHUwYWIzXHUwYWI1LVx1MGFiOVx1MGFiYy1c
dTBhYzVcdTBhYzctXHUwYWM5XHUwYWNiLVx1MGFjZFx1MGFkMFx1MGFlMC1cdTBhZTNcdTBhZTYt
XHUwYWVmXHUwYjAxLVx1MGIwM1x1MGIwNS1cdTBiMGNcdTBiMGZcdTBiMTBcdTBiMTMtXHUwYjI4
XHUwYjJhLVx1MGIzMFx1MGIzMlx1MGIzM1x1MGIzNS1cdTBiMzlcdTBiM2MtXHUwYjQ0XHUwYjQ3
XHUwYjQ4XHUwYjRiLVx1MGI0ZFx1MGI1Nlx1MGI1N1x1MGI1Y1x1MGI1ZFx1MGI1Zi1cdTBiNjNc
dTBiNjYtXHUwYjZmXHUwYjcxXHUwYjgyXHUwYjgzXHUwYjg1LVx1MGI4YVx1MGI4ZS1cdTBiOTBc
dTBiOTItXHUwYjk1XHUwYjk5XHUwYjlhXHUwYjljXHUwYjllXHUwYjlmXHUwYmEzXHUwYmE0XHUw
YmE4LVx1MGJhYVx1MGJhZS1cdTBiYjlcdTBiYmUtXHUwYmMyXHUwYmM2LVx1MGJjOFx1MGJjYS1c
dTBiY2RcdTBiZDBcdTBiZDdcdTBiZTYtXHUwYmVmXHUwYzAxLVx1MGMwM1x1MGMwNS1cdTBjMGNc
dTBjMGUtXHUwYzEwXHUwYzEyLVx1MGMyOFx1MGMyYS1cdTBjMzNcdTBjMzUtXHUwYzM5XHUwYzNk
LVx1MGM0NFx1MGM0Ni1cdTBjNDhcdTBjNGEtXHUwYzRkXHUwYzU1XHUwYzU2XHUwYzU4XHUwYzU5
XHUwYzYwLVx1MGM2M1x1MGM2Ni1cdTBjNmZcdTBjODJcdTBjODNcdTBjODUtXHUwYzhjXHUwYzhl
LVx1MGM5MFx1MGM5Mi1cdTBjYThcdTBjYWEtXHUwY2IzXHUwY2I1LVx1MGNiOVx1MGNiYy1cdTBj
YzRcdTBjYzYtXHUwY2M4XHUwY2NhLVx1MGNjZFx1MGNkNVx1MGNkNlx1MGNkZVx1MGNlMC1cdTBj
ZTNcdTBjZTYtXHUwY2VmXHUwY2YxXHUwY2YyXHUwZDAyXHUwZDAzXHUwZDA1LVx1MGQwY1x1MGQw
ZS1cdTBkMTBcdTBkMTItXHUwZDNhXHUwZDNkLVx1MGQ0NFx1MGQ0Ni1cdTBkNDhcdTBkNGEtXHUw
ZDRlXHUwZDU3XHUwZDYwLVx1MGQ2M1x1MGQ2Ni1cdTBkNmZcdTBkN2EtXHUwZDdmXHUwZDgyXHUw
ZDgzXHUwZDg1LVx1MGQ5Nlx1MGQ5YS1cdTBkYjFcdTBkYjMtXHUwZGJiXHUwZGJkXHUwZGMwLVx1
MGRjNlx1MGRjYVx1MGRjZi1cdTBkZDRcdTBkZDZcdTBkZDgtXHUwZGRmXHUwZGYyXHUwZGYzXHUw
ZTAxLVx1MGUzYVx1MGU0MC1cdTBlNGVcdTBlNTAtXHUwZTU5XHUwZTgxXHUwZTgyXHUwZTg0XHUw
ZTg3XHUwZTg4XHUwZThhXHUwZThkXHUwZTk0LVx1MGU5N1x1MGU5OS1cdTBlOWZcdTBlYTEtXHUw
ZWEzXHUwZWE1XHUwZWE3XHUwZWFhXHUwZWFiXHUwZWFkLVx1MGViOVx1MGViYi1cdTBlYmRcdTBl
YzAtXHUwZWM0XHUwZWM2XHUwZWM4LVx1MGVjZFx1MGVkMC1cdTBlZDlcdTBlZGMtXHUwZWRmXHUw
ZjAwXHUwZjE4XHUwZjE5XHUwZjIwLVx1MGYyOVx1MGYzNVx1MGYzN1x1MGYzOVx1MGYzZS1cdTBm
NDdcdTBmNDktXHUwZjZjXHUwZjcxLVx1MGY4NFx1MGY4Ni1cdTBmOTdcdTBmOTktXHUwZmJjXHUw
ZmM2XHUxMDAwLVx1MTA0OVx1MTA1MC1cdTEwOWRcdTEwYTAtXHUxMGM1XHUxMGM3XHUxMGNkXHUx
MGQwLVx1MTBmYVx1MTBmYy1cdTEyNDhcdTEyNGEtXHUxMjRkXHUxMjUwLVx1MTI1Nlx1MTI1OFx1
MTI1YS1cdTEyNWRcdTEyNjAtXHUxMjg4XHUxMjhhLVx1MTI4ZFx1MTI5MC1cdTEyYjBcdTEyYjIt
XHUxMmI1XHUxMmI4LVx1MTJiZVx1MTJjMFx1MTJjMi1cdTEyYzVcdTEyYzgtXHUxMmQ2XHUxMmQ4
LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVhXHUxMzVkLVx1MTM1Zlx1MTM4MC1cdTEz
OGZcdTEzYTAtXHUxM2Y0XHUxNDAxLVx1MTY2Y1x1MTY2Zi1cdTE2N2ZcdTE2ODEtXHUxNjlhXHUx
NmEwLVx1MTZlYVx1MTZlZS1cdTE2ZjBcdTE3MDAtXHUxNzBjXHUxNzBlLVx1MTcxNFx1MTcyMC1c
dTE3MzRcdTE3NDAtXHUxNzUzXHUxNzYwLVx1MTc2Y1x1MTc2ZS1cdTE3NzBcdTE3NzJcdTE3NzNc
dTE3ODAtXHUxN2QzXHUxN2Q3XHUxN2RjXHUxN2RkXHUxN2UwLVx1MTdlOVx1MTgwYi1cdTE4MGRc
dTE4MTAtXHUxODE5XHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4YWFcdTE4YjAtXHUxOGY1XHUxOTAw
LVx1MTkxY1x1MTkyMC1cdTE5MmJcdTE5MzAtXHUxOTNiXHUxOTQ2LVx1MTk2ZFx1MTk3MC1cdTE5
NzRcdTE5ODAtXHUxOWFiXHUxOWIwLVx1MTljOVx1MTlkMC1cdTE5ZDlcdTFhMDAtXHUxYTFiXHUx
YTIwLVx1MWE1ZVx1MWE2MC1cdTFhN2NcdTFhN2YtXHUxYTg5XHUxYTkwLVx1MWE5OVx1MWFhN1x1
MWIwMC1cdTFiNGJcdTFiNTAtXHUxYjU5XHUxYjZiLVx1MWI3M1x1MWI4MC1cdTFiZjNcdTFjMDAt
XHUxYzM3XHUxYzQwLVx1MWM0OVx1MWM0ZC1cdTFjN2RcdTFjZDAtXHUxY2QyXHUxY2Q0LVx1MWNm
Nlx1MWQwMC1cdTFkZTZcdTFkZmMtXHUxZjE1XHUxZjE4LVx1MWYxZFx1MWYyMC1cdTFmNDVcdTFm
NDgtXHUxZjRkXHUxZjUwLVx1MWY1N1x1MWY1OVx1MWY1Ylx1MWY1ZFx1MWY1Zi1cdTFmN2RcdTFm
ODAtXHUxZmI0XHUxZmI2LVx1MWZiY1x1MWZiZVx1MWZjMi1cdTFmYzRcdTFmYzYtXHUxZmNjXHUx
ZmQwLVx1MWZkM1x1MWZkNi1cdTFmZGJcdTFmZTAtXHUxZmVjXHUxZmYyLVx1MWZmNFx1MWZmNi1c
dTFmZmNcdTIwMGNcdTIwMGRcdTIwM2ZcdTIwNDBcdTIwNTRcdTIwNzFcdTIwN2ZcdTIwOTAtXHUy
MDljXHUyMGQwLVx1MjBkY1x1MjBlMVx1MjBlNS1cdTIwZjBcdTIxMDJcdTIxMDdcdTIxMGEtXHUy
MTEzXHUyMTE1XHUyMTE5LVx1MjExZFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyYS1cdTIxMmRcdTIx
MmYtXHUyMTM5XHUyMTNjLVx1MjEzZlx1MjE0NS1cdTIxNDlcdTIxNGVcdTIxNjAtXHUyMTg4XHUy
YzAwLVx1MmMyZVx1MmMzMC1cdTJjNWVcdTJjNjAtXHUyY2U0XHUyY2ViLVx1MmNmM1x1MmQwMC1c
dTJkMjVcdTJkMjdcdTJkMmRcdTJkMzAtXHUyZDY3XHUyZDZmXHUyZDdmLVx1MmQ5Nlx1MmRhMC1c
dTJkYTZcdTJkYTgtXHUyZGFlXHUyZGIwLVx1MmRiNlx1MmRiOC1cdTJkYmVcdTJkYzAtXHUyZGM2
XHUyZGM4LVx1MmRjZVx1MmRkMC1cdTJkZDZcdTJkZDgtXHUyZGRlXHUyZGUwLVx1MmRmZlx1MmUy
Zlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDJmXHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM2NcdTMw
NDEtXHUzMDk2XHUzMDk5XHUzMDlhXHUzMDlkLVx1MzA5Zlx1MzBhMS1cdTMwZmFcdTMwZmMtXHUz
MGZmXHUzMTA1LVx1MzEyZFx1MzEzMS1cdTMxOGVcdTMxYTAtXHUzMWJhXHUzMWYwLVx1MzFmZlx1
MzQwMC1cdTRkYjVcdTRlMDAtXHU5ZmNjXHVhMDAwLVx1YTQ4Y1x1YTRkMC1cdWE0ZmRcdWE1MDAt
XHVhNjBjXHVhNjEwLVx1YTYyYlx1YTY0MC1cdWE2NmZcdWE2NzQtXHVhNjdkXHVhNjdmLVx1YTY5
N1x1YTY5Zi1cdWE2ZjFcdWE3MTctXHVhNzFmXHVhNzIyLVx1YTc4OFx1YTc4Yi1cdWE3OGVcdWE3
OTAtXHVhNzkzXHVhN2EwLVx1YTdhYVx1YTdmOC1cdWE4MjdcdWE4NDAtXHVhODczXHVhODgwLVx1
YThjNFx1YThkMC1cdWE4ZDlcdWE4ZTAtXHVhOGY3XHVhOGZiXHVhOTAwLVx1YTkyZFx1YTkzMC1c
dWE5NTNcdWE5NjAtXHVhOTdjXHVhOTgwLVx1YTljMFx1YTljZi1cdWE5ZDlcdWFhMDAtXHVhYTM2
XHVhYTQwLVx1YWE0ZFx1YWE1MC1cdWFhNTlcdWFhNjAtXHVhYTc2XHVhYTdhXHVhYTdiXHVhYTgw
LVx1YWFjMlx1YWFkYi1cdWFhZGRcdWFhZTAtXHVhYWVmXHVhYWYyLVx1YWFmNlx1YWIwMS1cdWFi
MDZcdWFiMDktXHVhYjBlXHVhYjExLVx1YWIxNlx1YWIyMC1cdWFiMjZcdWFiMjgtXHVhYjJlXHVh
YmMwLVx1YWJlYVx1YWJlY1x1YWJlZFx1YWJmMC1cdWFiZjlcdWFjMDAtXHVkN2EzXHVkN2IwLVx1
ZDdjNlx1ZDdjYi1cdWQ3ZmJcdWY5MDAtXHVmYTZkXHVmYTcwLVx1ZmFkOVx1ZmIwMC1cdWZiMDZc
dWZiMTMtXHVmYjE3XHVmYjFkLVx1ZmIyOFx1ZmIyYS1cdWZiMzZcdWZiMzgtXHVmYjNjXHVmYjNl
XHVmYjQwXHVmYjQxXHVmYjQzXHVmYjQ0XHVmYjQ2LVx1ZmJiMVx1ZmJkMy1cdWZkM2RcdWZkNTAt
XHVmZDhmXHVmZDkyLVx1ZmRjN1x1ZmRmMC1cdWZkZmJcdWZlMDAtXHVmZTBmXHVmZTIwLVx1ZmUy
Nlx1ZmUzM1x1ZmUzNFx1ZmU0ZC1cdWZlNGZcdWZlNzAtXHVmZTc0XHVmZTc2LVx1ZmVmY1x1ZmYx
MC1cdWZmMTlcdWZmMjEtXHVmZjNhXHVmZjNmXHVmZjQxLVx1ZmY1YVx1ZmY2Ni1cdWZmYmVcdWZm
YzItXHVmZmM3XHVmZmNhLVx1ZmZjZlx1ZmZkMi1cdWZmZDdcdWZmZGEtXHVmZmRjXScpCisgICAg
fTsKKworICAgIENhbkFjY2Vzc1N0cmluZ0J5SW5kZXggPSB0eXBlb2YgJ2RvY3RyaW5lJ1swXSAh
PT0gdW5kZWZpbmVkOworCisgICAgZnVuY3Rpb24gc2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwg
bGFzdCkgeworICAgICAgICB2YXIgb3V0cHV0OworICAgICAgICBpZiAoIUNhbkFjY2Vzc1N0cmlu
Z0J5SW5kZXgpIHsKKyAgICAgICAgICAgIG91dHB1dCA9IHNvdXJjZS5zbGljZShpbmRleCwgbGFz
dCkuam9pbignJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXRwdXQgPSBzb3Vy
Y2Uuc2xpY2UoaW5kZXgsIGxhc3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvdXRwdXQ7
CisgICAgfQorCisgICAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisgICAgaWYgKCFpc0FycmF5
KSB7CisgICAgICAgIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFyeSkgeworICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnkpID09PSAnW29iamVj
dCBBcnJheV0nOworICAgICAgICB9OworICAgIH0KKworICAgIGhhc093blByb3BlcnR5ID0gKGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGZ1bmMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5OworICAgICAgICByZXR1cm4gZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBuYW1l
KSB7CisgICAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKG9iaiwgbmFtZSk7CisgICAgICAgIH07
CisgICAgfSgpKTsKKworICAgIGZ1bmN0aW9uIHNoYWxsb3dDb3B5KG9iaikgeworICAgICAgICB2
YXIgcmV0ID0ge30sIGtleTsKKyAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7CisgICAgICAgICAg
ICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICByZXRba2V5
XSA9IG9ialtrZXldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBy
ZXQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkgeworICAgICAg
ICByZXR1cm4gY2ggPT09ICdcbicgfHwgY2ggPT09ICdccicgfHwgY2ggPT09ICdcdTIwMjgnIHx8
IGNoID09PSAnXHUyMDI5JzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1doaXRlU3BhY2UoY2gp
IHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gJyAnKSB8fCAoY2ggPT09ICdcdTAwMDknKSB8fCAo
Y2ggPT09ICdcdTAwMEInKSB8fAorICAgICAgICAgICAgKGNoID09PSAnXHUwMDBDJykgfHwgKGNo
ID09PSAnXHUwMEEwJykgfHwKKyAgICAgICAgICAgIChjaC5jaGFyQ29kZUF0KDApID49IDB4MTY4
MCAmJgorICAgICAgICAgICAgICdcdTE2ODBcdTE4MEVcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDNc
dTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMw
MDBcdUZFRkYnLmluZGV4T2YoY2gpID49IDApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzRGVj
aW1hbERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAnMDEyMzQ1Njc4OScuaW5kZXhPZihjaCkg
Pj0gMDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7CisgICAgICAgIHJl
dHVybiAnMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2
NycuaW5kZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0FTQ0lJQWxwaGFu
dW1lcmljKGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwg
KGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8IChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkgeworICAgICAgICByZXR1
cm4gKGNoID09PSAnJCcpIHx8IChjaCA9PT0gJ18nKSB8fCAoY2ggPT09ICdcXCcpIHx8CisgICAg
ICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAn
WicpIHx8CisgICAgICAgICAgICAoKGNoLmNoYXJDb2RlQXQoMCkgPj0gMHg4MCkgJiYgUmVnZXgu
Tm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChjaCkpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGlzSWRlbnRpZmllclBhcnQoY2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gJyQnKSB8fCAo
Y2ggPT09ICdfJykgfHwgKGNoID09PSAnXFwnKSB8fAorICAgICAgICAgICAgKGNoID49ICdhJyAm
JiBjaCA8PSAneicpIHx8IChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fAorICAgICAgICAgICAg
KChjaCA+PSAnMCcpICYmIChjaCA8PSAnOScpKSB8fAorICAgICAgICAgICAgKChjaC5jaGFyQ29k
ZUF0KDApID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVzdChjaCkp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzVHlwZU5hbWUoY2gpIHsKKyAgICAgICAgcmV0dXJu
ICc+PCgpe31bXSw6Knw/IT0nLmluZGV4T2YoY2gpID09PSAtMSAmJiAhaXNXaGl0ZVNwYWNlKGNo
KSAmJiAhaXNMaW5lVGVybWluYXRvcihjaCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNQYXJh
bVRpdGxlKHRpdGxlKSB7CisgICAgICAgIHJldHVybiB0aXRsZSA9PT0gJ3BhcmFtJyB8fCB0aXRs
ZSA9PT0gJ2FyZ3VtZW50JyB8fCB0aXRsZSA9PT0gJ2FyZyc7CisgICAgfQorCisgICAgZnVuY3Rp
b24gaXNQcm9wZXJ0eSh0aXRsZSkgeworICAgICAgICByZXR1cm4gdGl0bGUgPT09ICdwcm9wZXJ0
eScgfHwgdGl0bGUgPT09ICdwcm9wJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc05hbWVQYXJh
bWV0ZXJSZXF1aXJlZCh0aXRsZSkgeworICAgICAgICByZXR1cm4gaXNQYXJhbVRpdGxlKHRpdGxl
KSB8fCBpc1Byb3BlcnR5KHRpdGxlKSB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICdhbGlhcycg
fHwgdGl0bGUgPT09ICd0aGlzJyB8fCB0aXRsZSA9PT0gJ21peGVzJyB8fCB0aXRsZSA9PT0gJ3Jl
cXVpcmVzJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0FsbG93ZWROYW1lKHRpdGxlKSB7Cisg
ICAgICAgIHJldHVybiBpc05hbWVQYXJhbWV0ZXJSZXF1aXJlZCh0aXRsZSkgfHwgdGl0bGUgPT09
ICdjb25zdCcgfHwgdGl0bGUgPT09ICdjb25zdGFudCc7CisgICAgfQorCisgICAgZnVuY3Rpb24g
aXNBbGxvd2VkTmVzdGVkKHRpdGxlKSB7CisgICAgICAgIHJldHVybiBpc1Byb3BlcnR5KHRpdGxl
KSB8fCBpc1BhcmFtVGl0bGUodGl0bGUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzVHlwZVBh
cmFtZXRlclJlcXVpcmVkKHRpdGxlKSB7CisgICAgICAgIHJldHVybiBpc1BhcmFtVGl0bGUodGl0
bGUpIHx8IHRpdGxlID09PSAnZGVmaW5lJyB8fCB0aXRsZSA9PT0gJ2VudW0nIHx8CisgICAgICAg
ICAgICB0aXRsZSA9PT0gJ2ltcGxlbWVudHMnIHx8IHRpdGxlID09PSAncmV0dXJuJyB8fAorICAg
ICAgICAgICAgdGl0bGUgPT09ICd0aGlzJyB8fCB0aXRsZSA9PT0gJ3R5cGUnIHx8IHRpdGxlID09
PSAndHlwZWRlZicgfHwKKyAgICAgICAgICAgIHRpdGxlID09PSAncmV0dXJucycgfHwgaXNQcm9w
ZXJ0eSh0aXRsZSk7CisgICAgfQorCisgICAgLy8gQ29uc2lkZXIgZGVwcmVjYXRpb24gaW5zdGVh
ZCB1c2luZyAnaXNUeXBlUGFyYW1ldGVyUmVxdWlyZWQnIGFuZCAnUnVsZXMnIGRlY2xhcmF0aW9u
IHRvIHBpY2sgd2hlbiBhIHR5cGUgaXMgb3B0aW9uYWwvcmVxdWlyZWQKKyAgICAvLyBUaGlzIHdv
dWxkIHJlcXVpcmUgY2hhbmdlcyB0byAncGFyc2VUeXBlJworICAgIGZ1bmN0aW9uIGlzQWxsb3dl
ZFR5cGUodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzVHlwZVBhcmFtZXRlclJlcXVpcmVkKHRp
dGxlKSB8fCB0aXRsZSA9PT0gJ3Rocm93cycgfHwgdGl0bGUgPT09ICdjb25zdCcgfHwgdGl0bGUg
PT09ICdjb25zdGFudCcgfHwKKyAgICAgICAgICAgIHRpdGxlID09PSAnbmFtZXNwYWNlJyB8fCB0
aXRsZSA9PT0gJ21lbWJlcicgfHwgdGl0bGUgPT09ICd2YXInIHx8IHRpdGxlID09PSAnbW9kdWxl
JyB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICdjb25zdHJ1Y3RvcicgfHwgdGl0bGUgPT09ICdj
bGFzcycgfHwgdGl0bGUgPT09ICdleHRlbmRzJyB8fCB0aXRsZSA9PT0gJ2F1Z21lbnRzJyB8fAor
ICAgICAgICAgICAgdGl0bGUgPT09ICdwdWJsaWMnIHx8IHRpdGxlID09PSAncHJpdmF0ZScgfHwg
dGl0bGUgPT09ICdwcm90ZWN0ZWQnOworICAgIH0KKworICAgIGZ1bmN0aW9uIERvY3RyaW5lRXJy
b3IobWVzc2FnZSkgeworICAgICAgICB0aGlzLm5hbWUgPSAnRG9jdHJpbmVFcnJvcic7CisgICAg
ICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgfQorICAgIERvY3RyaW5lRXJyb3IucHJv
dG90eXBlID0gbmV3IEVycm9yKCk7CisgICAgRG9jdHJpbmVFcnJvci5wcm90b3R5cGUuY29uc3Ry
dWN0b3IgPSBEb2N0cmluZUVycm9yOworCisgICAgZnVuY3Rpb24gdGhyb3dFcnJvcihtZXNzYWdl
KSB7CisgICAgICAgIHRocm93IG5ldyBEb2N0cmluZUVycm9yKG1lc3NhZ2UpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGFzc2VydChjb25kLCB0ZXh0KSB7CisgICAgICAgIGlmIChWRVJTSU9OLnNs
aWNlKC0zKSA9PT0gJ2RldicpIHsKKyAgICAgICAgICAgIGlmICghY29uZCkgeworICAgICAgICAg
ICAgICAgIHRocm93RXJyb3IodGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiB0cmltKHN0cikgeworICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2Uo
L15ccysvLCAnJykucmVwbGFjZSgvXHMrJC8sICcnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB1
bndyYXBDb21tZW50KGRvYykgeworICAgICAgICAvLyBKU0RvYyBjb21tZW50IGlzIGZvbGxvd2lu
ZyBmb3JtCisgICAgICAgIC8vICAgLyoqCisgICAgICAgIC8vICAgICogLi4uLi4uLgorICAgICAg
ICAvLyAgICAqLworICAgICAgICAvLyByZW1vdmUgLyoqLCAqLyBhbmQgKgorICAgICAgICB2YXIg
QkVGT1JFX1NUQVIgPSAwLAorICAgICAgICAgICAgU1RBUiA9IDEsCisgICAgICAgICAgICBBRlRF
Ul9TVEFSID0gMiwKKyAgICAgICAgICAgIGluZGV4LAorICAgICAgICAgICAgbGVuLAorICAgICAg
ICAgICAgbW9kZSwKKyAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIGNoOworCisgICAg
ICAgIGRvYyA9IGRvYy5yZXBsYWNlKC9eXC9cKlwqPy8sICcnKS5yZXBsYWNlKC9cKlwvJC8sICcn
KTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBsZW4gPSBkb2MubGVuZ3RoOworICAgICAg
ICBtb2RlID0gQkVGT1JFX1NUQVI7CisgICAgICAgIHJlc3VsdCA9ICcnOworCisgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbikgeworICAgICAgICAgICAgY2ggPSBkb2NbaW5kZXhdOworICAgICAg
ICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgICBjYXNlIEJFRk9SRV9TVEFSOgorICAg
ICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gY2g7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJyon
KSB7CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBTVEFSOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWlzV2hpdGVTcGFjZShjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9IGNoOworICAgICAgICAgICAgICAgICAgICBtb2RlID0gQUZURVJfU1RBUjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU1RB
UjoKKyAgICAgICAgICAgICAgICBpZiAoIWlzV2hpdGVTcGFjZShjaCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBtb2RlID0gaXNMaW5lVGVybWluYXRvcihjaCkgPyBCRUZPUkVfU1RBUiA6IEFGVEVSX1NUQVI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQUZURVJfU1RBUjoK
KyAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2g7CisgICAgICAgICAgICAgICAgaWYgKGlzTGlu
ZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBCRUZPUkVfU1RB
UjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpbmRleCArPSAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBUeXBlIEV4cHJlc3Npb24gUGFyc2VyCisKKyAgICAo
ZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgICAgICAgdmFyIFN5bnRheCwKKyAgICAgICAgICAgIFRv
a2VuLAorICAgICAgICAgICAgc291cmNlLAorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAg
ICAgaW5kZXgsCisgICAgICAgICAgICBwcmV2aW91cywKKyAgICAgICAgICAgIHRva2VuLAorICAg
ICAgICAgICAgdmFsdWU7CisKKyAgICAgICAgU3ludGF4ID0geworICAgICAgICAgICAgTnVsbGFi
bGVMaXRlcmFsOiAnTnVsbGFibGVMaXRlcmFsJywKKyAgICAgICAgICAgIEFsbExpdGVyYWw6ICdB
bGxMaXRlcmFsJywKKyAgICAgICAgICAgIE51bGxMaXRlcmFsOiAnTnVsbExpdGVyYWwnLAorICAg
ICAgICAgICAgVW5kZWZpbmVkTGl0ZXJhbDogJ1VuZGVmaW5lZExpdGVyYWwnLAorICAgICAgICAg
ICAgVm9pZExpdGVyYWw6ICdWb2lkTGl0ZXJhbCcsCisgICAgICAgICAgICBVbmlvblR5cGU6ICdV
bmlvblR5cGUnLAorICAgICAgICAgICAgQXJyYXlUeXBlOiAnQXJyYXlUeXBlJywKKyAgICAgICAg
ICAgIFJlY29yZFR5cGU6ICdSZWNvcmRUeXBlJywKKyAgICAgICAgICAgIEZpZWxkVHlwZTogJ0Zp
ZWxkVHlwZScsCisgICAgICAgICAgICBGdW5jdGlvblR5cGU6ICdGdW5jdGlvblR5cGUnLAorICAg
ICAgICAgICAgUGFyYW1ldGVyVHlwZTogJ1BhcmFtZXRlclR5cGUnLAorICAgICAgICAgICAgUmVz
dFR5cGU6ICdSZXN0VHlwZScsCisgICAgICAgICAgICBOb25OdWxsYWJsZVR5cGU6ICdOb25OdWxs
YWJsZVR5cGUnLAorICAgICAgICAgICAgT3B0aW9uYWxUeXBlOiAnT3B0aW9uYWxUeXBlJywKKyAg
ICAgICAgICAgIE51bGxhYmxlVHlwZTogJ051bGxhYmxlVHlwZScsCisgICAgICAgICAgICBOYW1l
RXhwcmVzc2lvbjogJ05hbWVFeHByZXNzaW9uJywKKyAgICAgICAgICAgIFR5cGVBcHBsaWNhdGlv
bjogJ1R5cGVBcHBsaWNhdGlvbicKKyAgICAgICAgfTsKKworICAgICAgICBUb2tlbiA9IHsKKyAg
ICAgICAgICAgIElMTEVHQUw6IDAsICAgIC8vIElMTEVHQUwKKyAgICAgICAgICAgIERPVDogMSwg
ICAgICAgIC8vIC4KKyAgICAgICAgICAgIERPVF9MVDogMiwgICAgIC8vIC48CisgICAgICAgICAg
ICBSRVNUOiAzLCAgICAgICAvLyAuLi4KKyAgICAgICAgICAgIExUOiA0LCAgICAgICAgIC8vIDwK
KyAgICAgICAgICAgIEdUOiA1LCAgICAgICAgIC8vID4KKyAgICAgICAgICAgIExQQVJFTjogNiwg
ICAgIC8vICgKKyAgICAgICAgICAgIFJQQVJFTjogNywgICAgIC8vICkKKyAgICAgICAgICAgIExC
UkFDRTogOCwgICAgIC8vIHsKKyAgICAgICAgICAgIFJCUkFDRTogOSwgICAgIC8vIH0KKyAgICAg
ICAgICAgIExCUkFDSzogMTAsICAgIC8vIFsKKyAgICAgICAgICAgIFJCUkFDSzogMTEsICAgIC8v
IF0KKyAgICAgICAgICAgIENPTU1BOiAxMiwgICAgIC8vICwKKyAgICAgICAgICAgIENPTE9OOiAx
MywgICAgIC8vIDoKKyAgICAgICAgICAgIFNUQVI6IDE0LCAgICAgIC8vICoKKyAgICAgICAgICAg
IFBJUEU6IDE1LCAgICAgIC8vIHwKKyAgICAgICAgICAgIFFVRVNUSU9OOiAxNiwgIC8vID8KKyAg
ICAgICAgICAgIEJBTkc6IDE3LCAgICAgIC8vICEKKyAgICAgICAgICAgIEVRVUFMOiAxOCwgICAg
IC8vID0KKyAgICAgICAgICAgIE5BTUU6IDE5LCAgICAgIC8vIG5hbWUgdG9rZW4KKyAgICAgICAg
ICAgIFNUUklORzogMjAsICAgIC8vIHN0cmluZworICAgICAgICAgICAgTlVNQkVSOiAyMSwgICAg
Ly8gbnVtYmVyCisgICAgICAgICAgICBFT0Y6IDIyCisgICAgICAgIH07CisKKyAgICAgICAgZnVu
Y3Rpb24gQ29udGV4dChwcmV2aW91cywgaW5kZXgsIHRva2VuLCB2YWx1ZSkgeworICAgICAgICAg
ICAgdGhpcy5fcHJldmlvdXMgPSBwcmV2aW91czsKKyAgICAgICAgICAgIHRoaXMuX2luZGV4ID0g
aW5kZXg7CisgICAgICAgICAgICB0aGlzLl90b2tlbiA9IHRva2VuOworICAgICAgICAgICAgdGhp
cy5fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIENvbnRleHQucHJvdG90eXBl
LnJlc3RvcmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBwcmV2aW91cyA9IHRoaXMuX3By
ZXZpb3VzOworICAgICAgICAgICAgaW5kZXggPSB0aGlzLl9pbmRleDsKKyAgICAgICAgICAgIHRv
a2VuID0gdGhpcy5fdG9rZW47CisgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX3ZhbHVlOworICAg
ICAgICB9OworCisgICAgICAgIENvbnRleHQuc2F2ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgQ29udGV4dChwcmV2aW91cywgaW5kZXgsIHRva2VuLCB2YWx1ZSk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgZnVuY3Rpb24gYWR2YW5jZSgpIHsKKyAgICAgICAgICAgIHZh
ciBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICBpbmRleCArPSAxOworICAgICAgICAg
ICAgcmV0dXJuIGNoOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2NhbkhleEVzY2Fw
ZShwcmVmaXgpIHsKKyAgICAgICAgICAgIHZhciBpLCBsZW4sIGNoLCBjb2RlID0gMDsKKworICAg
ICAgICAgICAgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQgOiAyOworICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVu
Z3RoICYmIGlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2ggPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTYgKyAn
MDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hh
ckNvZGUoY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuU3RyaW5nKCkg
eworICAgICAgICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgY2gsIGNvZGUsIHVuZXNjYXBlZCwg
cmVzdG9yZTsgLy9UT0RPIHJldmlldyByZW1vdmFsIG9jdGFsID0gZmFsc2UKKyAgICAgICAgICAg
IHF1b3RlID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICsraW5kZXg7CisKKyAgICAgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGNoID0gYWR2YW5j
ZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkgeworICAgICAgICAgICAg
ICAgICAgICBxdW90ZSA9ICcnOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAgIGNo
ID0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTGluZVRlcm1pbmF0b3Io
Y2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
Kz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXHInOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9
ICdcdCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodW5lc2NhcGVkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSB1bmVzY2FwZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0
b3JlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyICs9ICdcYic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gJ1xmJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ciArPSAnXHYnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGUgPSAnMDEyMzQ1NjcnLmluZGV4T2YoY2gpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVwcmVjYXRpbmcgdW51c2VkIGNvZGUuIFRP
RE8gcmV2aWV3IHJlbW92YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAo
Y29kZSAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBvY3Rh
bCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc09jdGFsRGln
aXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vVE9ETyBSZXZpZXcgUmVtb3ZhbCBvY3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2YoYWR2
YW5jZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBkaWdp
dHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmluZyBzdGFydHMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwgMiwgMworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCcwMTIzJy5pbmRleE9mKGNoKSA+PSAwICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgbGVuZ3RoICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT2N0YWxEaWdpdChz
b3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihhZHZhbmNlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKGNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICAnXHInICYmIHNvdXJjZVtpbmRleF0g
PT09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gY2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAocXVvdGUgIT09ICcnKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBl
Y3RlZCBxdW90ZScpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YWx1ZSA9IHN0cjsK
KyAgICAgICAgICAgIHJldHVybiBUb2tlbi5TVFJJTkc7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiBzY2FuTnVtYmVyKCkgeworICAgICAgICAgICAgdmFyIG51bWJlciwgY2g7CisKKyAg
ICAgICAgICAgIG51bWJlciA9ICcnOworICAgICAgICAgICAgaWYgKGNoICE9PSAnLicpIHsKKyAg
ICAgICAgICAgICAgICBudW1iZXIgPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgY2ggPSBz
b3VyY2VbaW5kZXhdOworCisgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJzAnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3gnIHx8IGNoID09PSAnWCcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc0hleERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlci5sZW5ndGggPD0gMikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgMHgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRva2VuJyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KG51bWJlciwgMTYpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJFUjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNPY3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkgfHwgaXNEZWNpbWFs
RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
J3VuZXhwZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBh
cnNlSW50KG51bWJlciwgOCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4u
TlVNQkVSOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzRGVjaW1hbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
cigndW5leHBlY3RlZCB0b2tlbicpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc0RlY2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoY2ggPT09ICcuJykgeworICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7
CisgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Rl
Y2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2gg
PT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFu
Y2UoKTsKKworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAg
ICAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0gJy0nKSB7CisgICAgICAgICAgICAgICAgICAg
IG51bWJlciArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdp
dChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzRGVjaW1hbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9r
ZW4nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChudW1i
ZXIpOworICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5VTUJFUjsKKyAgICAgICAgfQorCisKKyAg
ICAgICAgZnVuY3Rpb24gc2NhblR5cGVOYW1lKCkgeworICAgICAgICAgICAgdmFyIGNoLCBjaDI7
CisKKyAgICAgICAgICAgIHZhbHVlID0gYWR2YW5jZSgpOworICAgICAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGVuZ3RoICYmIGlzVHlwZU5hbWUoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnLicp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChpbmRleCArIDEpIDwgbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjaDIgPSBzb3VyY2VbaW5kZXggKyAxXTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjaDIgPT09ICc8JykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbHVlICs9IGFkdmFuY2Uo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBUb2tlbi5OQU1FOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHsKKyAgICAgICAgICAgIHZhciBjaDsKKwor
ICAgICAgICAgICAgcHJldmlvdXMgPSBpbmRleDsKKworICAgICAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoICYmIGlzV2hpdGVTcGFjZShzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAg
ICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBs
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkVPRjsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNoID0gc291
cmNlW2luZGV4XTsKKyAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAgIGNhc2Ug
JyInOgorICAgICAgICAgICAgICAgIHRva2VuID0gc2NhblN0cmluZygpOworICAgICAgICAgICAg
ICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnOic6CisgICAgICAgICAgICAg
ICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uQ09MT047CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICcsJzoKKyAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5DT01N
QTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJygn
OgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRv
a2VuLkxQQVJFTjsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAg
IGNhc2UgJyknOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0
b2tlbiA9IFRva2VuLlJQQVJFTjsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAg
ICAgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICB0b2tlbiA9IFRva2VuLkxCUkFDSzsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9r
ZW47CisKKyAgICAgICAgICAgIGNhc2UgJ10nOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJCUkFDSzsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxCUkFDRTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJ30nOgorICAgICAgICAg
ICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJCUkFDRTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJy4nOgor
ICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBs
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICBpZiAoY2ggPT09ICc8JykgeworICAgICAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5ET1RfTFQ7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcuJyAmJiBpbmRleCArIDEg
PCBsZW5ndGggJiYgc291cmNlW2luZGV4ICsgMV0gPT09ICcuJykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5SRVNUOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRva2VuOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4gPSBzY2FuTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5ET1Q7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRva2VuOworCisgICAgICAgICAgICBjYXNlICc8JzoKKyAgICAgICAgICAgICAgICBhZHZhbmNl
KCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5MVDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJz4nOgorICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkdUOworICAgICAgICAgICAg
ICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnKic6CisgICAgICAgICAgICAg
ICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uU1RBUjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJ3wnOgorICAgICAg
ICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlBJUEU7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICc/JzoK
KyAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tl
bi5RVUVTVElPTjsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAg
IGNhc2UgJyEnOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0
b2tlbiA9IFRva2VuLkJBTkc7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworCisgICAg
ICAgICAgICBjYXNlICc9JzoKKyAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAg
ICAgICAgdG9rZW4gPSBUb2tlbi5FUVVBTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47
CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERp
Z2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHNjYW5OdW1iZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIHR5cGUgc3RyaW5nIHBlcm1pdHMgZm9sbG93aW5nIGNhc2UsCisgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBuYW1lc3BhY2UubW9kdWxlLk15Q2xh
c3MKKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIHRoaXMgcmVkdWNlZCAx
IHRva2VuIFRLX05BTUUKKyAgICAgICAgICAgICAgICBpZiAoaXNUeXBlTmFtZShjaCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuVHlwZU5hbWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRva2VuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IHRva2VuID0gVG9rZW4uSUxMRUdBTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjb25zdW1lKHRhcmdl
dCwgdGV4dCkgeworICAgICAgICAgICAgYXNzZXJ0KHRva2VuID09PSB0YXJnZXQsIHRleHQgfHwg
J2NvbnN1bWVkIHRva2VuIG5vdCBtYXRjaGVkJyk7CisgICAgICAgICAgICBuZXh0KCk7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBleHBlY3QodGFyZ2V0KSB7CisgICAgICAgICAgICBp
ZiAodG9rZW4gIT09IHRhcmdldCkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhw
ZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFVuaW9uVHlwZSA6PSAnKCcgVHlwZVVuaW9uTGlzdCAnKScKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVHlwZVVuaW9uTGlzdCA6PQorICAgICAgICAvLyAgICAgPDxl
bXB0eT4+CisgICAgICAgIC8vICAgfCBOb25lbXB0eVR5cGVVbmlvbkxpc3QKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gTm9uZW1wdHlUeXBlVW5pb25MaXN0IDo9CisgICAgICAgIC8vICAgICBUeXBl
RXhwcmVzc2lvbgorICAgICAgICAvLyAgIHwgVHlwZUV4cHJlc3Npb24gJ3wnIE5vbmVtcHR5VHlw
ZVVuaW9uTGlzdAorICAgICAgICBmdW5jdGlvbiBwYXJzZVVuaW9uVHlwZSgpIHsKKyAgICAgICAg
ICAgIHZhciBlbGVtZW50czsKKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTFBBUkVOLCAnVW5p
b25UeXBlIHNob3VsZCBzdGFydCB3aXRoICgnKTsKKyAgICAgICAgICAgIGVsZW1lbnRzID0gW107
CisgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikgeworICAgICAgICAgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFy
c2VUeXBlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBU
b2tlbi5SUEFSRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5QSVBFKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdW1lKFRva2Vu
LlJQQVJFTiwgJ1VuaW9uVHlwZSBzaG91bGQgZW5kIHdpdGggKScpOworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVW5pb25UeXBlLAorICAgICAgICAg
ICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEFycmF5VHlwZSA6PSAnWycgRWxlbWVudFR5cGVMaXN0ICddJworICAgICAgICAv
LworICAgICAgICAvLyBFbGVtZW50VHlwZUxpc3QgOj0KKyAgICAgICAgLy8gICAgIDw8ZW1wdHk+
PgorICAgICAgICAvLyAgfCBUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgfCAnLi4uJyBUeXBl
RXhwcmVzc2lvbgorICAgICAgICAvLyAgfCBUeXBlRXhwcmVzc2lvbiAnLCcgRWxlbWVudFR5cGVM
aXN0CisgICAgICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlUeXBlKCkgeworICAgICAgICAgICAgdmFy
IGVsZW1lbnRzOworICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MQlJBQ0ssICdBcnJheVR5cGUg
c2hvdWxkIHN0YXJ0IHdpdGggWycpOworICAgICAgICAgICAgZWxlbWVudHMgPSBbXTsKKyAgICAg
ICAgICAgIHdoaWxlICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNLKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRva2VuID09PSBUb2tlbi5SRVNUKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUo
VG9rZW4uUkVTVCk7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goeworICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwcmVzc2lvbjogcGFyc2VUeXBlRXhwcmVzc2lvbigpCisgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVHlwZUV4cHJl
c3Npb24oKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh0b2tlbiAh
PT0gVG9rZW4uUkJSQUNLKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdChUb2tlbi5DT01N
QSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0
KFRva2VuLlJCUkFDSyk7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5BcnJheVR5cGUsCisgICAgICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRz
CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VGaWVs
ZE5hbWUoKSB7CisgICAgICAgICAgICB2YXIgdiA9IHZhbHVlOworICAgICAgICAgICAgaWYgKHRv
a2VuID09PSBUb2tlbi5OQU1FIHx8IHRva2VuID09PSBUb2tlbi5TVFJJTkcpIHsKKyAgICAgICAg
ICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHY7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uTlVNQkVSKSB7CisgICAgICAgICAg
ICAgICAgY29uc3VtZShUb2tlbi5OVU1CRVIpOworICAgICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcodik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0
ZWQgdG9rZW4nKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpZWxkVHlwZSA6PQorICAgICAg
ICAvLyAgICAgRmllbGROYW1lCisgICAgICAgIC8vICAgfCBGaWVsZE5hbWUgJzonIFR5cGVFeHBy
ZXNzaW9uCisgICAgICAgIC8vCisgICAgICAgIC8vIEZpZWxkTmFtZSA6PQorICAgICAgICAvLyAg
ICAgTmFtZUV4cHJlc3Npb24KKyAgICAgICAgLy8gICB8IFN0cmluZ0xpdGVyYWwKKyAgICAgICAg
Ly8gICB8IE51bWJlckxpdGVyYWwKKyAgICAgICAgLy8gICB8IFJlc2VydmVkSWRlbnRpZmllcgor
ICAgICAgICBmdW5jdGlvbiBwYXJzZUZpZWxkVHlwZSgpIHsKKyAgICAgICAgICAgIHZhciBrZXk7
CisKKyAgICAgICAgICAgIGtleSA9IHBhcnNlRmllbGROYW1lKCk7CisgICAgICAgICAgICBpZiAo
dG9rZW4gPT09IFRva2VuLkNPTE9OKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5D
T0xPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LkZpZWxkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksCisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJzZVR5cGVFeHByZXNzaW9uKCkKKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguRmllbGRUeXBlLAorICAgICAgICAgICAgICAgIGtleToga2V5LAor
ICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsCisgICAgICAgICAgICB9OworICAgICAgICB9CisK
KyAgICAgICAgLy8gUmVjb3JkVHlwZSA6PSAneycgRmllbGRUeXBlTGlzdCAnfScKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gRmllbGRUeXBlTGlzdCA6PQorICAgICAgICAvLyAgICAgPDxlbXB0eT4+
CisgICAgICAgIC8vICAgfCBGaWVsZFR5cGUKKyAgICAgICAgLy8gICB8IEZpZWxkVHlwZSAnLCcg
RmllbGRUeXBlTGlzdAorICAgICAgICBmdW5jdGlvbiBwYXJzZVJlY29yZFR5cGUoKSB7CisgICAg
ICAgICAgICB2YXIgZmllbGRzOworCisgICAgICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDRSwg
J1JlY29yZFR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggeycpOworICAgICAgICAgICAgZmllbGRzID0g
W107CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkNPTU1BKSB7CisgICAgICAgICAg
ICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHdoaWxlICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNFKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZpZWxkcy5wdXNoKHBhcnNlRmllbGRUeXBlKCkpOworICAgICAgICAgICAgICAgICAg
ICBpZiAodG9rZW4gIT09IFRva2VuLlJCUkFDRSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZXhwZWN0KFRva2VuLkNPTU1BKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4cGVjdChUb2tlbi5SQlJBQ0UpOwor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmVjb3Jk
VHlwZSwKKyAgICAgICAgICAgICAgICBmaWVsZHM6IGZpZWxkcworICAgICAgICAgICAgfTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlTmFtZUV4cHJlc3Npb24oKSB7CisgICAg
ICAgICAgICB2YXIgbmFtZSA9IHZhbHVlOworICAgICAgICAgICAgZXhwZWN0KFRva2VuLk5BTUUp
OworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTmFt
ZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgbmFtZTogbmFtZQorICAgICAgICAgICAgfTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFR5cGVFeHByZXNzaW9uTGlzdCA6PQorICAgICAgICAv
LyAgICAgVG9wTGV2ZWxUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgIHwgVG9wTGV2ZWxUeXBl
RXhwcmVzc2lvbiAnLCcgVHlwZUV4cHJlc3Npb25MaXN0CisgICAgICAgIGZ1bmN0aW9uIHBhcnNl
VHlwZUV4cHJlc3Npb25MaXN0KCkgeworICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gW107CisK
KyAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUb3AoKSk7CisgICAgICAgICAgICB3aGls
ZSAodG9rZW4gPT09IFRva2VuLkNPTU1BKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tl
bi5DT01NQSk7CisgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVRvcCgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50czsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFR5cGVOYW1lIDo9CisgICAgICAgIC8vICAgICBOYW1lRXhwcmVzc2lvbgorICAg
ICAgICAvLyAgIHwgTmFtZUV4cHJlc3Npb24gVHlwZUFwcGxpY2F0aW9uCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFR5cGVBcHBsaWNhdGlvbiA6PQorICAgICAgICAvLyAgICAgJy48JyBUeXBlRXhw
cmVzc2lvbkxpc3QgJz4nCisgICAgICAgIC8vICAgfCAnPCcgVHlwZUV4cHJlc3Npb25MaXN0ICc+
JyAgIC8vIHRoaXMgaXMgZXh0ZW5zaW9uIG9mIGRvY3RyaW5lCisgICAgICAgIGZ1bmN0aW9uIHBh
cnNlVHlwZU5hbWUoKSB7CisgICAgICAgICAgICB2YXIgZXhwciwgYXBwbGljYXRpb25zOworCisg
ICAgICAgICAgICBleHByID0gcGFyc2VOYW1lRXhwcmVzc2lvbigpOworICAgICAgICAgICAgaWYg
KHRva2VuID09PSBUb2tlbi5ET1RfTFQgfHwgdG9rZW4gPT09IFRva2VuLkxUKSB7CisgICAgICAg
ICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyA9IHBhcnNlVHlw
ZUV4cHJlc3Npb25MaXN0KCk7CisgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkdUKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
VHlwZUFwcGxpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLAor
ICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnM6IGFwcGxpY2F0aW9ucworICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFJlc3VsdFR5cGUgOj0KKyAgICAgICAgLy8gICAgIDw8ZW1wdHk+
PgorICAgICAgICAvLyAgIHwgJzonIHZvaWQKKyAgICAgICAgLy8gICB8ICc6JyBUeXBlRXhwcmVz
c2lvbgorICAgICAgICAvLworICAgICAgICAvLyBCTkYgaXMgYWJvdmUKKyAgICAgICAgLy8gYnV0
LCB3ZSByZW1vdmUgPDxlbXB0eT4+IHBhdHRlcm4sIHNvIHRva2VuIGlzIGFsd2F5cyBUeXBlVG9r
ZW46OkNPTE9OCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlUmVzdWx0VHlwZSgpIHsKKyAgICAgICAg
ICAgIGNvbnN1bWUoVG9rZW4uQ09MT04sICdSZXN1bHRUeXBlIHNob3VsZCBzdGFydCB3aXRoIDon
KTsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uTkFNRSAmJiB2YWx1ZSA9PT0gJ3Zv
aWQnKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVm9pZExpdGVy
YWwKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHBhcnNlVHlwZUV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBhcmFtZXRl
cnNUeXBlIDo9CisgICAgICAgIC8vICAgICBSZXN0UGFyYW1ldGVyVHlwZQorICAgICAgICAvLyAg
IHwgTm9uUmVzdFBhcmFtZXRlcnNUeXBlCisgICAgICAgIC8vICAgfCBOb25SZXN0UGFyYW1ldGVy
c1R5cGUgJywnIFJlc3RQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlc3RQ
YXJhbWV0ZXJUeXBlIDo9CisgICAgICAgIC8vICAgICAnLi4uJworICAgICAgICAvLyAgICAgJy4u
LicgSWRlbnRpZmllcgorICAgICAgICAvLworICAgICAgICAvLyBOb25SZXN0UGFyYW1ldGVyc1R5
cGUgOj0KKyAgICAgICAgLy8gICAgIFBhcmFtZXRlclR5cGUgJywnIE5vblJlc3RQYXJhbWV0ZXJz
VHlwZQorICAgICAgICAvLyAgIHwgUGFyYW1ldGVyVHlwZQorICAgICAgICAvLyAgIHwgT3B0aW9u
YWxQYXJhbWV0ZXJzVHlwZQorICAgICAgICAvLworICAgICAgICAvLyBPcHRpb25hbFBhcmFtZXRl
cnNUeXBlIDo9CisgICAgICAgIC8vICAgICBPcHRpb25hbFBhcmFtZXRlclR5cGUKKyAgICAgICAg
Ly8gICB8IE9wdGlvbmFsUGFyYW1ldGVyVHlwZSwgT3B0aW9uYWxQYXJhbWV0ZXJzVHlwZQorICAg
ICAgICAvLworICAgICAgICAvLyBPcHRpb25hbFBhcmFtZXRlclR5cGUgOj0gUGFyYW1ldGVyVHlw
ZT0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUGFyYW1ldGVyVHlwZSA6PSBUeXBlRXhwcmVzc2lv
biB8IElkZW50aWZpZXIgJzonIFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vCisgICAgICAgIC8v
IElkZW50aWZpZXIgaXMgIm5ldyIgb3IgInRoaXMiCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlUGFy
YW1ldGVyc1R5cGUoKSB7CisgICAgICAgICAgICB2YXIgcGFyYW1zID0gW10sIG5vcm1hbCA9IHRy
dWUsIGV4cHIsIHJlc3QgPSBmYWxzZTsKKworICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9PSBU
b2tlbi5SUEFSRU4pIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlJFU1Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVzdFBhcmFtZXRlclR5cGUKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3VtZShUb2tlbi5SRVNUKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdCA9
IHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZXhwciA9IHBhcnNl
VHlwZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlID09PSBTeW50
YXguTmFtZUV4cHJlc3Npb24gJiYgdG9rZW4gPT09IFRva2VuLkNPTE9OKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIElkZW50aWZpZXIgJzonIFR5cGVFeHByZXNzaW9uCisgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoVG9rZW4uQ09MT04pOworICAgICAgICAgICAgICAgICAgICBleHByID0g
eworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlBhcmFtZXRlclR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBleHByLm5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBleHByZXNzaW9uOiBwYXJzZVR5cGVFeHByZXNzaW9uKCkKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09
PSBUb2tlbi5FUVVBTCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkVRVUFM
KTsKKyAgICAgICAgICAgICAgICAgICAgZXhwciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5PcHRpb25hbFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBleHBy
ZXNzaW9uOiBleHByCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAg
IG5vcm1hbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghbm9ybWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KCd1bmV4cGVjdGVkIHRva2VuJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZXhwciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXN0VHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIKKyAgICAgICAgICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2go
ZXhwcik7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTU1BKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGFyYW1zOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRnVuY3Rpb25UeXBlIDo9ICdmdW5jdGlvbicgRnVuY3Rpb25TaWduYXR1cmVU
eXBlCisgICAgICAgIC8vCisgICAgICAgIC8vIEZ1bmN0aW9uU2lnbmF0dXJlVHlwZSA6PQorICAg
ICAgICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygnICcpJyBSZXN1bHRUeXBlCisgICAgICAgIC8v
ICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgUGFyYW1ldGVyc1R5cGUgJyknIFJlc3VsdFR5cGUKKyAg
ICAgICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVOYW1lICcpJyBS
ZXN1bHRUeXBlCisgICAgICAgIC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgJ3RoaXMnICc6JyBU
eXBlTmFtZSAnLCcgUGFyYW1ldGVyc1R5cGUgJyknIFJlc3VsdFR5cGUKKyAgICAgICAgZnVuY3Rp
b24gcGFyc2VGdW5jdGlvblR5cGUoKSB7CisgICAgICAgICAgICB2YXIgaXNOZXcsIHRoaXNCaW5k
aW5nLCBwYXJhbXMsIHJlc3VsdCwgZm5UeXBlOworICAgICAgICAgICAgYXNzZXJ0KHRva2VuID09
PSBUb2tlbi5OQU1FICYmIHZhbHVlID09PSAnZnVuY3Rpb24nLCAnRnVuY3Rpb25UeXBlIHNob3Vs
ZCBzdGFydCB3aXRoIFwnZnVuY3Rpb25cJycpOworICAgICAgICAgICAgY29uc3VtZShUb2tlbi5O
QU1FKTsKKworICAgICAgICAgICAgLy8gR29vZ2xlIENsb3N1cmUgQ29tcGlsZXIgaXMgbm90IGlt
cGxlbWVudGluZyBUeXBlUGFyYW1ldGVycy4KKyAgICAgICAgICAgIC8vIFNvIHdlIGRvIG5vdC4g
aWYgd2UgZG9uJ3QgZ2V0ICcoJywgd2Ugc2VlIGl0IGFzIGVycm9yLgorICAgICAgICAgICAgZXhw
ZWN0KFRva2VuLkxQQVJFTik7CisKKyAgICAgICAgICAgIGlzTmV3ID0gZmFsc2U7CisgICAgICAg
ICAgICBwYXJhbXMgPSBbXTsKKyAgICAgICAgICAgIHRoaXNCaW5kaW5nID0gbnVsbDsKKyAgICAg
ICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUlBBUkVOKSB7CisgICAgICAgICAgICAgICAgLy8g
UGFyYW1ldGVyc1R5cGUgb3IgJ3RoaXMnCisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBU
b2tlbi5OQU1FICYmCisgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPT09ICd0aGlzJyB8
fCB2YWx1ZSA9PT0gJ25ldycpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vICd0aGlzJyBvciAn
bmV3JworICAgICAgICAgICAgICAgICAgICAvLyAnbmV3JyBpcyBDbG9zdXJlIENvbXBpbGVyIGV4
dGVuc2lvbgorICAgICAgICAgICAgICAgICAgICBpc05ldyA9IHZhbHVlID09PSAnbmV3JzsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTsKKyAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0KFRva2VuLkNPTE9OKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpc0JpbmRpbmcg
PSBwYXJzZVR5cGVOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9r
ZW4uQ09NTUEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uQ09NTUEp
OworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyc2VQYXJhbWV0ZXJzVHlwZSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyc2VQYXJhbWV0ZXJzVHlwZSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXhwZWN0KFRva2VuLlJQQVJF
Tik7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7CisgICAgICAgICAgICBpZiAodG9rZW4g
PT09IFRva2VuLkNPTE9OKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VSZXN1bHRU
eXBlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZuVHlwZSA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguRnVuY3Rpb25UeXBlLAorICAgICAgICAgICAgICAgIHBhcmFt
czogcGFyYW1zLAorICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgaWYgKHRoaXNCaW5kaW5nKSB7CisgICAgICAgICAgICAgICAgLy8gYXZv
aWQgYWRkaW5nIG51bGwgJ25ldycgYW5kICd0aGlzJyBwcm9wZXJ0aWVzCisgICAgICAgICAgICAg
ICAgZm5UeXBlWyd0aGlzJ10gPSB0aGlzQmluZGluZzsKKyAgICAgICAgICAgICAgICBpZiAoaXNO
ZXcpIHsKKyAgICAgICAgICAgICAgICAgICAgZm5UeXBlWyduZXcnXSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZuVHlwZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEJhc2ljVHlwZUV4cHJlc3Npb24gOj0KKyAgICAgICAgLy8g
ICAgICcqJworICAgICAgICAvLyAgIHwgJ251bGwnCisgICAgICAgIC8vICAgfCAndW5kZWZpbmVk
JworICAgICAgICAvLyAgIHwgVHlwZU5hbWUKKyAgICAgICAgLy8gICB8IEZ1bmN0aW9uVHlwZQor
ICAgICAgICAvLyAgIHwgVW5pb25UeXBlCisgICAgICAgIC8vICAgfCBSZWNvcmRUeXBlCisgICAg
ICAgIC8vICAgfCBBcnJheVR5cGUKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VCYXNpY1R5cGVFeHBy
ZXNzaW9uKCkgeworICAgICAgICAgICAgdmFyIGNvbnRleHQ7CisgICAgICAgICAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgICAgICBjYXNlIFRva2VuLlNUQVI6CisgICAgICAgICAgICAgICAg
Y29uc3VtZShUb2tlbi5TVEFSKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguQWxsTGl0ZXJhbAorICAgICAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIGNhc2UgVG9rZW4uTFBBUkVOOgorICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZVVuaW9uVHlwZSgpOworCisgICAgICAgICAgICBjYXNlIFRva2VuLkxCUkFDSzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJheVR5cGUoKTsKKworICAgICAgICAgICAgY2FzZSBU
b2tlbi5MQlJBQ0U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVjb3JkVHlwZSgpOwor
CisgICAgICAgICAgICBjYXNlIFRva2VuLk5BTUU6CisgICAgICAgICAgICAgICAgaWYgKHZhbHVl
ID09PSAnbnVsbCcpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU6IFN5bnRheC5OdWxsTGl0ZXJhbAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5OQU1FKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmRl
ZmluZWRMaXRlcmFsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgY29udGV4dCA9IENvbnRleHQuc2F2ZSgpOworICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25UeXBlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZU5hbWUoKTsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVkIHRv
a2VuJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBUeXBlRXhwcmVz
c2lvbiA6PQorICAgICAgICAvLyAgICAgQmFzaWNUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAg
IHwgJz8nIEJhc2ljVHlwZUV4cHJlc3Npb24KKyAgICAgICAgLy8gICB8ICchJyBCYXNpY1R5cGVF
eHByZXNzaW9uCisgICAgICAgIC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICc/JworICAgICAg
ICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAnIScKKyAgICAgICAgLy8gICB8ICc/JworICAg
ICAgICAvLyAgIHwgQmFzaWNUeXBlRXhwcmVzc2lvbiAnW10nCisgICAgICAgIGZ1bmN0aW9uIHBh
cnNlVHlwZUV4cHJlc3Npb24oKSB7CisgICAgICAgICAgICB2YXIgZXhwcjsKKworICAgICAgICAg
ICAgaWYgKHRva2VuID09PSBUb2tlbi5RVUVTVElPTikgeworICAgICAgICAgICAgICAgIGNvbnN1
bWUoVG9rZW4uUVVFU1RJT04pOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4u
Q09NTUEgfHwgdG9rZW4gPT09IFRva2VuLkVRVUFMIHx8IHRva2VuID09PSBUb2tlbi5SQlJBQ0Ug
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID09PSBUb2tlbi5SUEFSRU4gfHwgdG9r
ZW4gPT09IFRva2VuLlBJUEUgfHwgdG9rZW4gPT09IFRva2VuLkVPRiB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4gPT09IFRva2VuLlJCUkFDSykgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxl
TGl0ZXJhbAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVs
bGFibGVUeXBlLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZUJhc2ljVHlw
ZUV4cHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlCisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRva2VuID09PSBU
b2tlbi5CQU5HKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5CQU5HKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTm9u
TnVsbGFibGVUeXBlLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBwYXJzZUJhc2lj
VHlwZUV4cHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlCisgICAg
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXhwciA9IHBhcnNl
QmFzaWNUeXBlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5C
QU5HKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5CQU5HKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTm9uTnVsbGFi
bGVUeXBlLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLAorICAgICAgICAg
ICAgICAgICAgICBwcmVmaXg6IGZhbHNlCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5RVUVTVElPTikgeworICAgICAg
ICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUVVFU1RJT04pOworICAgICAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJsZVR5cGUsCisgICAg
ICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAgICAgICAgICAgICAgIHBy
ZWZpeDogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAodG9rZW4gPT09IFRva2VuLkxCUkFDSykgeworICAgICAgICAgICAgICAgIGNvbnN1
bWUoVG9rZW4uTEJSQUNLKTsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLlJCUkFDSywg
J2V4cGVjdGVkIGFuIGFycmF5LXN0eWxlIHR5cGUgZGVjbGFyYXRpb24gKCcgKyB2YWx1ZSArICdb
XSknKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguVHlwZUFwcGxpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9u
OiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTmFtZUV4cHJlc3Npb24s
CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQXJyYXknCisgICAgICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uczogW2V4cHJdCisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cHI7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBUb3BMZXZlbFR5cGVFeHByZXNzaW9uIDo9CisgICAgICAg
IC8vICAgICAgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgLy8gICAgfCBUeXBlVW5pb25MaXN0Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgcnVsZSBpcyBHb29nbGUgQ2xvc3VyZSBDb21waWxl
ciBleHRlbnNpb24sIG5vdCBFUzQKKyAgICAgICAgLy8gbGlrZSwKKyAgICAgICAgLy8gICB7IG51
bWJlciB8IHN0cmluZyB9CisgICAgICAgIC8vIElmIHN0cmljdCB0byBFUzQsIHdlIHNob3VsZCB3
cml0ZSBpdCBhcworICAgICAgICAvLyAgIHsgKG51bWJlcnxzdHJpbmcpIH0KKyAgICAgICAgZnVu
Y3Rpb24gcGFyc2VUb3AoKSB7CisgICAgICAgICAgICB2YXIgZXhwciwgZWxlbWVudHM7CisKKyAg
ICAgICAgICAgIGV4cHIgPSBwYXJzZVR5cGVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAo
dG9rZW4gIT09IFRva2VuLlBJUEUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZWxlbWVudHMgPSBbIGV4cHIgXTsKKyAgICAgICAg
ICAgIGNvbnN1bWUoVG9rZW4uUElQRSk7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlBJUEUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9r
ZW4uUElQRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LlVuaW9uVHlwZSwKKyAgICAgICAgICAgICAgICBlbGVtZW50
czogZWxlbWVudHMKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBwYXJzZVRvcFBhcmFtVHlwZSgpIHsKKyAgICAgICAgICAgIHZhciBleHByOworCisgICAgICAg
ICAgICBpZiAodG9rZW4gPT09IFRva2VuLlJFU1QpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1l
KFRva2VuLlJFU1QpOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5SZXN0VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lv
bjogcGFyc2VUb3AoKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGV4cHIgPSBwYXJzZVRvcCgpOworICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tl
bi5FUVVBTCkgeworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uRVFVQUwpOworICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5PcHRp
b25hbFR5cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlVHlwZShzcmMsIG9wdCkgeworICAgICAg
ICAgICAgdmFyIGV4cHI7CisKKyAgICAgICAgICAgIHNvdXJjZSA9IHNyYzsKKyAgICAgICAgICAg
IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAg
ICAgICBwcmV2aW91cyA9IDA7CisKKyAgICAgICAgICAgIGlmICghQ2FuQWNjZXNzU3RyaW5nQnlJ
bmRleCkgeworICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zcGxpdCgnJyk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJz
ZVRvcCgpOworCisgICAgICAgICAgICBpZiAob3B0ICYmIG9wdC5taWRzdHJlYW0pIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHBy
LAorICAgICAgICAgICAgICAgICAgICBpbmRleDogcHJldmlvdXMKKyAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLkVPRikg
eworICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ25vdCByZWFjaCB0byBFT0YnKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBwYXJzZVBhcmFtVHlwZShzcmMsIG9wdCkgeworICAgICAgICAgICAgdmFyIGV4
cHI7CisKKyAgICAgICAgICAgIHNvdXJjZSA9IHNyYzsKKyAgICAgICAgICAgIGxlbmd0aCA9IHNv
dXJjZS5sZW5ndGg7CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgICAgICBwcmV2aW91
cyA9IDA7CisKKyAgICAgICAgICAgIGlmICghQ2FuQWNjZXNzU3RyaW5nQnlJbmRleCkgeworICAg
ICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zcGxpdCgnJyk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVRvcFBhcmFtVHlw
ZSgpOworCisgICAgICAgICAgICBpZiAob3B0ICYmIG9wdC5taWRzdHJlYW0pIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByLAor
ICAgICAgICAgICAgICAgICAgICBpbmRleDogcHJldmlvdXMKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLkVPRikgewor
ICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ25vdCByZWFjaCB0byBFT0YnKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiBzdHJpbmdpZnlJbXBsKG5vZGUsIGNvbXBhY3QsIHRvcExldmVsKSB7CisgICAgICAg
ICAgICB2YXIgcmVzdWx0LCBpLCBpejsKKworICAgICAgICAgICAgc3dpdGNoIChub2RlLnR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgU3ludGF4Lk51bGxhYmxlTGl0ZXJhbDoKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSAnPyc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGNhc2UgU3ludGF4LkFsbExpdGVyYWw6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJyonOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5OdWxsTGl0
ZXJhbDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnbnVsbCc7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4LlVuZGVmaW5lZExpdGVyYWw6CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gJ3VuZGVmaW5lZCc7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4LlZvaWRMaXRlcmFsOgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9ICd2b2lkJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Y2FzZSBTeW50YXguVW5pb25UeXBlOgorICAgICAgICAgICAgICAgIGlmICghdG9wTGV2ZWwpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJygnOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICcnOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5lbGVtZW50cy5sZW5ndGg7
IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJ
bXBsKG5vZGUuZWxlbWVudHNbaV0sIGNvbXBhY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAo
KGkgKyAxKSAhPT0gaXopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnfCc7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoIXRvcExldmVsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnKSc7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBjYXNlIFN5bnRheC5BcnJheVR5cGU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1snOwor
ICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5lbGVtZW50cy5sZW5ndGg7IGkg
PCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBs
KG5vZGUuZWxlbWVudHNbaV0sIGNvbXBhY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoKGkg
KyAxKSAhPT0gaXopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0
ID8gJywnIDogJywgJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ10nOworICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICBjYXNlIFN5bnRheC5SZWNvcmRUeXBlOgorICAgICAgICAgICAgICAgIHJl
c3VsdCA9ICd7JzsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuZmllbGRz
Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0
cmluZ2lmeUltcGwobm9kZS5maWVsZHNbaV0sIGNvbXBhY3QpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoKGkgKyAxKSAhPT0gaXopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSBjb21wYWN0ID8gJywnIDogJywgJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ30nOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5GaWVsZFR5cGU6CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUudmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9k
ZS5rZXkgKyAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3RyaW5naWZ5SW1wbChub2RlLnZhbHVl
LCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBub2RlLmtleTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4LkZ1bmN0aW9uVHlwZToKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBjb21wYWN0ID8gJ2Z1bmN0aW9uKCcgOiAnZnVuY3Rpb24gKCc7CisK
KyAgICAgICAgICAgICAgICBpZiAobm9kZVsndGhpcyddKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlWyduZXcnXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IChj
b21wYWN0ID8gJ25ldzonIDogJ25ldzogJyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gKGNvbXBhY3QgPyAndGhpczonIDog
J3RoaXM6ICcpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZVsndGhpcyddLCBjb21wYWN0KTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS5wYXJhbXMubGVuZ3RoICE9PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gY29tcGFjdCA/ICcsJyA6ICcsICc7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9kZS5wYXJhbXNbaV0sIGNvbXBhY3Qp
OworICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAhPT0gaXopIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJzsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSAnKSc7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yZXN1bHQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IChjb21wYWN0ID8gJzonIDogJzogJykgKyBzdHJpbmdpZnlJbXBs
KG5vZGUucmVzdWx0LCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4LlBhcmFtZXRlclR5cGU6CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS5uYW1lICsgKGNvbXBhY3QgPyAnOicgOiAnOiAnKSAr
IHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguUmVzdFR5cGU6CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gJy4uLic7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lv
bikgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLmV4
cHJlc3Npb24sIGNvbXBhY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguTm9uTnVsbGFibGVUeXBlOgorICAgICAg
ICAgICAgICAgIGlmIChub2RlLnByZWZpeCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSAnIScgKyBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5
SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJyEnOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguT3B0aW9u
YWxUeXBlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmluZ2lmeUltcGwobm9kZS5leHBy
ZXNzaW9uLCBjb21wYWN0KSArICc9JzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVUeXBlOgorICAgICAgICAgICAgICAgIGlmIChub2Rl
LnByZWZpeCkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAnPycgKyBzdHJpbmdpZnlJ
bXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Np
b24sIGNvbXBhY3QpICsgJz8nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguTmFtZUV4cHJlc3Npb246CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbm9kZS5uYW1lOworICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIFN5bnRheC5UeXBlQXBwbGljYXRpb246CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpICsgJy48JzsK
KyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGUuYXBwbGljYXRpb25zLmxlbmd0
aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lm
eUltcGwobm9kZS5hcHBsaWNhdGlvbnNbaV0sIGNvbXBhY3QpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoKGkgKyAxKSAhPT0gaXopIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSBjb21wYWN0ID8gJywnIDogJywgJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJz4nOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93RXJy
b3IoJ1Vua25vd24gdHlwZSAnICsgbm9kZS50eXBlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHN0cmlu
Z2lmeShub2RlLCBvcHRpb25zKSB7CisgICAgICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7
CisgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHN0cmluZ2lmeUltcGwobm9kZSwgb3B0aW9ucy5jb21wYWN0LCBvcHRpb25zLnRv
cExldmVsKTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cG9ydHMucGFyc2VUeXBlID0gcGFyc2VU
eXBlOworICAgICAgICBleHBvcnRzLnBhcnNlUGFyYW1UeXBlID0gcGFyc2VQYXJhbVR5cGU7Cisg
ICAgICAgIGV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5OworICAgICAgICBleHBvcnRzLlN5
bnRheCA9IFN5bnRheDsKKyAgICB9KHR5cGVkID0ge30pKTsKKworICAgIC8vIEpTRG9jIFRhZyBQ
YXJzZXIKKworICAgIChmdW5jdGlvbiAoZXhwb3J0cykgeworICAgICAgICB2YXIgUnVsZXMsCisg
ICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgIGxpbmVOdW1iZXIsCisgICAgICAgICAgICBs
ZW5ndGgsCisgICAgICAgICAgICBzb3VyY2UsCisgICAgICAgICAgICByZWNvdmVyYWJsZSwKKyAg
ICAgICAgICAgIHNsb3BweSwKKyAgICAgICAgICAgIHN0cmljdDsKKworICAgICAgICBmdW5jdGlv
biBhZHZhbmNlKCkgeworICAgICAgICAgICAgdmFyIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAg
ICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkp
IHsKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDE7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gY2g7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuVGl0
bGUoKSB7CisgICAgICAgICAgICB2YXIgdGl0bGUgPSAnJzsKKyAgICAgICAgICAgIC8vIHdhc3Rl
ICdAJworICAgICAgICAgICAgYWR2YW5jZSgpOworCisgICAgICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsZW5ndGggJiYgaXNBU0NJSUFscGhhbnVtZXJpYyhzb3VyY2VbaW5kZXhdKSkgeworICAgICAg
ICAgICAgICAgIHRpdGxlICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIHRpdGxlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2Vla0NvbnRl
bnQoKSB7CisgICAgICAgICAgICB2YXIgY2gsIHdhaXRpbmcsIGxhc3QgPSBpbmRleDsKKworICAg
ICAgICAgICAgd2FpdGluZyA9IGZhbHNlOworICAgICAgICAgICAgd2hpbGUgKGxhc3QgPCBsZW5n
dGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtsYXN0XTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZU51
bWJlciArPSAxOworICAgICAgICAgICAgICAgICAgICB3YWl0aW5nID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHdhaXRpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo
ID09PSAnQCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNXaGl0ZVNwYWNlKGNoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGluZyA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxhc3QgKz0gMTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsYXN0OworICAgICAgICB9CisKKyAgICAg
ICAgLy8gdHlwZSBleHByZXNzaW9uIG1heSBoYXZlIG5lc3QgYnJhY2UsIHN1Y2ggYXMsCisgICAg
ICAgIC8vIHsgeyBvazogc3RyaW5nIH0gfQorICAgICAgICAvLworICAgICAgICAvLyB0aGVyZWZv
cmUsIHNjYW5uaW5nIHR5cGUgZXhwcmVzc2lvbiB3aXRoIGJhbGFuY2luZyBicmFjZXMuCisgICAg
ICAgIGZ1bmN0aW9uIHBhcnNlVHlwZSh0aXRsZSwgbGFzdCkgeworICAgICAgICAgICAgdmFyIGNo
LCBicmFjZSwgdHlwZSwgZGlyZWN0ID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIHNlYXJjaCAn
eycKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxhc3QpIHsKKyAgICAgICAgICAgICAgICBj
aCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVTcGFjZShjaCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2ggPT09ICd7JykgeworICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoaXMgaXMgZGlyZWN0IHBhdHRlcm4KKyAgICAgICAgICAgICAgICAg
ICAgZGlyZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWRpcmVjdCkgeworICAg
ICAgICAgICAgICAgIC8vIHR5cGUgZXhwcmVzc2lvbiB7IGlzIGZvdW5kCisgICAgICAgICAgICAg
ICAgYnJhY2UgPSAxOworICAgICAgICAgICAgICAgIHR5cGUgPSAnJzsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAoaW5kZXggPCBsYXN0KSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gc291cmNl
W2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd9JykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyYWNlIC09IDE7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGJyYWNlID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChjaCA9PT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2Ug
Kz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGJyYWNlICE9PSAwKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIGJyYWNlcyBpcyBub3QgYmFsYW5jZWQKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoJ0JyYWNlcyBhcmUgbm90IGJhbGFuY2VkJyk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
UGFyYW1UaXRsZSh0aXRsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBl
ZC5wYXJzZVBhcmFtVHlwZSh0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHlwZWQucGFyc2VUeXBlKHR5cGUpOworICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKGUxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIGZhaWxlZAorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc2NhbklkZW50aWZpZXIobGFzdCkgewor
ICAgICAgICAgICAgdmFyIGlkZW50aWZpZXI7CisgICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmll
clN0YXJ0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZGVudGlmaWVyID0gYWR2YW5jZSgpOworICAgICAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCAmJiBpc0lkZW50aWZpZXJQYXJ0KHNvdXJjZVtpbmRl
eF0pKSB7CisgICAgICAgICAgICAgICAgaWRlbnRpZmllciArPSBhZHZhbmNlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHNraXBXaGl0ZVNwYWNlKGxhc3QpIHsKKyAgICAgICAgICAgIHdoaWxlIChp
bmRleCA8IGxhc3QgJiYgKGlzV2hpdGVTcGFjZShzb3VyY2VbaW5kZXhdKSB8fCBpc0xpbmVUZXJt
aW5hdG9yKHNvdXJjZVtpbmRleF0pKSkgeworICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlTmFtZShsYXN0
LCBhbGxvd0JyYWNrZXRzLCBhbGxvd05lc3RlZFBhcmFtcykgeworICAgICAgICAgICAgdmFyIG5h
bWUgPSAnJywgdXNlQnJhY2tldHM7CisKKyAgICAgICAgICAgIHNraXBXaGl0ZVNwYWNlKGxhc3Qp
OworCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGFzdCkgeworICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYWxsb3dCcmFja2V0
cyAmJiBzb3VyY2VbaW5kZXhdID09PSAnWycpIHsKKyAgICAgICAgICAgICAgICB1c2VCcmFja2V0
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgbmFtZSA9IGFkdmFuY2UoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJTdGFydChzb3VyY2VbaW5kZXhdKSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBuYW1lICs9IHNjYW5JZGVudGlmaWVyKGxhc3QpOworCisgICAgICAgICAgICBpZiAoYWxs
b3dOZXN0ZWRQYXJhbXMpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoc291cmNlW2luZGV4XSA9
PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gJy4nOworICAgICAgICAgICAg
ICAgICAgICBpbmRleCArPSAxOworICAgICAgICAgICAgICAgICAgICBuYW1lICs9IHNjYW5JZGVu
dGlmaWVyKGxhc3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKHVzZUJyYWNrZXRzKSB7CisgICAgICAgICAgICAgICAgLy8gZG8gd2UgaGF2ZSBh
IGRlZmF1bHQgdmFsdWUgZm9yIHRoaXM/CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVtpbmRl
eF0gPT09ICc9JykgeworCisgICAgICAgICAgICAgICAgICAgIC8vIGNvbnN1bWUgdGhlICc9Jycg
c3ltYm9sCisgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpOworICAgICAgICAg
ICAgICAgICAgICAvLyBzY2FuIGluIHRoZSBkZWZhdWx0IHZhbHVlCisgICAgICAgICAgICAgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxhc3QgJiYgc291cmNlW2luZGV4XSAhPT0gJ10nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBs
YXN0ICB8fCBzb3VyY2VbaW5kZXhdICE9PSAnXScpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
d2UgbmV2ZXIgZm91bmQgYSBjbG9zaW5nICddJworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IHRo
ZSBsYXN0ICddJworICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gbmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHNraXBUb1RhZygpIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAm
JiBzb3VyY2VbaW5kZXhdICE9PSAnQCcpIHsKKyAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0
KHNvdXJjZVtpbmRleF0gPT09ICdAJyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIFRhZ1BhcnNlcihvcHRpb25zLCB0aXRsZSkgeworICAg
ICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CisgICAgICAgICAgICB0aGlzLl90aXRs
ZSA9IHRpdGxlOworICAgICAgICAgICAgdGhpcy5fdGFnID0geworICAgICAgICAgICAgICAgIHRp
dGxlOiB0aXRsZSwKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbnVsbAorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmxpbmVOdW1iZXJzKSB7CisgICAg
ICAgICAgICAgICAgdGhpcy5fdGFnLmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdGhpcy5fbGFzdCA9IDA7CisgICAgICAgICAgICAvLyBzcGFjZSB0
byBzYXZlIHNwZWNpYWwgaW5mb3JtYXRpb24gZm9yIHRpdGxlIHBhcnNlcnMuCisgICAgICAgICAg
ICB0aGlzLl9leHRyYSA9IHsgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGFkZEVycm9yKGVy
ciwgLi4uKQorICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmFkZEVycm9yID0gZnVuY3Rpb24g
YWRkRXJyb3IoZXJyb3JUZXh0KSB7CisgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSksCisgICAgICAgICAgICAgICAgbXNnID0gZXJy
b3JUZXh0LnJlcGxhY2UoCisgICAgICAgICAgICAgICAgICAgIC8lKFxkKS9nLAorICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQoaW5kZXggPCBhcmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3Qg
YmUgaW4gcmFuZ2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4
XTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAg
ICAgIGlmICghdGhpcy5fdGFnLmVycm9ycykgeworICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5l
cnJvcnMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yKG1zZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0aGlzLl90YWcuZXJyb3JzLnB1c2gobXNnKTsKKyAgICAgICAgICAgIHJldHVybiByZWNvdmVy
YWJsZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlVHlw
ZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIC8vIHR5cGUgcmVxdWlyZWQgdGl0bGVzCisg
ICAgICAgICAgICBpZiAoaXNUeXBlUGFyYW1ldGVyUmVxdWlyZWQodGhpcy5fdGl0bGUpKSB7Cisg
ICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUg
PSBwYXJzZVR5cGUodGhpcy5fdGl0bGUsIHRoaXMuX2xhc3QpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMuX3RhZy50eXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
UGFyYW1UaXRsZSh0aGlzLl90aXRsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0YWcgdHlwZScpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICAgICAg
ICAgICAgICB0aGlzLl90YWcudHlwZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc0FsbG93ZWRUeXBlKHRoaXMuX3RpdGxlKSkgeworICAg
ICAgICAgICAgICAgIC8vIG9wdGlvbmFsIHR5cGVzCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSBwYXJzZVR5cGUodGhpcy5fdGl0bGUs
IHRoaXMuX2xhc3QpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy9Gb3Igb3B0aW9uYWwgdHlwZXMsIGxldHMgZHJvcCB0aGUgdGhyb3duIGVycm9y
IHdoZW4gd2UgaGl0IHRoZSBlbmQgb2YgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAg
ICBUYWdQYXJzZXIucHJvdG90eXBlLl9wYXJzZU5hbWVQYXRoID0gZnVuY3Rpb24gKG9wdGlvbmFs
KSB7CisgICAgICAgICAgICB2YXIgbmFtZTsKKyAgICAgICAgICAgIG5hbWUgPSBwYXJzZU5hbWUo
dGhpcy5fbGFzdCwgc2xvcHB5ICYmIGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSksIHRydWUpOwor
ICAgICAgICAgICAgaWYgKCFuYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25hbCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52
YWxpZCB0YWcgbmFtZScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLl90YWcubmFtZSA9IG5hbWU7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlTmFt
ZVBhdGggPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VOYW1l
UGF0aChmYWxzZSk7CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5w
YXJzZU5hbWVQYXRoT3B0aW9uYWwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4g
dGhpcy5fcGFyc2VOYW1lUGF0aCh0cnVlKTsKKyAgICAgICAgfTsKKworCisgICAgICAgIFRhZ1Bh
cnNlci5wcm90b3R5cGUucGFyc2VOYW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFy
IGFzc2lnbiwgbmFtZTsKKworICAgICAgICAgICAgLy8gcGFyYW0sIHByb3BlcnR5IHJlcXVpcmVz
IG5hbWUKKyAgICAgICAgICAgIGlmIChpc0FsbG93ZWROYW1lKHRoaXMuX3RpdGxlKSkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0gcGFyc2VOYW1lKHRoaXMuX2xhc3QsIHNsb3Bw
eSAmJiBpc1BhcmFtVGl0bGUodGhpcy5fdGl0bGUpLCBpc0FsbG93ZWROZXN0ZWQodGhpcy5fdGl0
bGUpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RhZy5uYW1lKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNOYW1lUGFyYW1ldGVyUmVxdWlyZWQodGhpcy5fdGl0bGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhlIG5hbWUgaGFzIGFs
cmVhZHkgYmVlbiBwYXJzZWQgYnV0IGludGVycHJldGVkIGFzIGEgdHlwZQorICAgICAgICAgICAg
ICAgICAgICAvLyBpdCdzIGFsc28gcG9zc2libGUgdGhpcyBpcyBhIHNsb3BweSBkZWNsYXJhdGlv
biwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgIC8vIGZpeGVk
IGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90
aXRsZSkgJiYgdGhpcy5fdGFnLnR5cGUubmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fZXh0cmEubmFtZSA9IHRoaXMuX3RhZy50eXBlOworICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcy5fdGFnLm5hbWUgPSB0aGlzLl90YWcudHlwZS5uYW1lOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5n
IG9yIGludmFsaWQgdGFnIG5hbWUnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWUg
PSB0aGlzLl90YWcubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDAp
ID09PSAnWycgJiYgbmFtZS5jaGFyQXQobmFtZS5sZW5ndGggLSAxKSA9PT0gJ10nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBleHRyYWN0IHRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZXJl
IGlzIG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZTogQHBhcmFtIHtzdHJp
bmd9IFtzb21lYm9keT1Kb2huIERvZV0gZGVzY3JpcHRpb24KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFzc2lnbiA9IG5hbWUuc3Vic3RyaW5nKDEsIG5hbWUubGVuZ3RoIC0gMSkuc3BsaXQoJz0n
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhc3NpZ25bMV0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzLl90YWdbJ2RlZmF1bHQnXSA9IGFzc2lnblsxXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhZy5u
YW1lID0gYXNzaWduWzBdOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRv
IGFuIG9wdGlvbmFsIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90YWcu
dHlwZS50eXBlICE9PSAnT3B0aW9uYWxUeXBlJykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3RhZy50eXBlID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlOiAnT3B0aW9uYWxUeXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
cmVzc2lvbjogdGhpcy5fdGFnLnR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlRGVzY3JpcHRpb24g
PSBmdW5jdGlvbiBwYXJzZURlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgdmFyIGRlc2NyaXB0
aW9uID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7CisgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoKC9eLVxzKy8p
LnRlc3QoZGVzY3JpcHRpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0g
ZGVzY3JpcHRpb24uc3Vic3RyaW5nKDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB0aGlzLl90YWcuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNl
ci5wcm90b3R5cGUucGFyc2VLaW5kID0gZnVuY3Rpb24gcGFyc2VLaW5kKCkgeworICAgICAgICAg
ICAgdmFyIGtpbmQsIGtpbmRzOworICAgICAgICAgICAga2luZHMgPSB7CisgICAgICAgICAgICAg
ICAgJ2NsYXNzJzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnY29uc3RhbnQnOiB0cnVlLAorICAg
ICAgICAgICAgICAgICdldmVudCc6IHRydWUsCisgICAgICAgICAgICAgICAgJ2V4dGVybmFsJzog
dHJ1ZSwKKyAgICAgICAgICAgICAgICAnZmlsZSc6IHRydWUsCisgICAgICAgICAgICAgICAgJ2Z1
bmN0aW9uJzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnbWVtYmVyJzogdHJ1ZSwKKyAgICAgICAg
ICAgICAgICAnbWl4aW4nOiB0cnVlLAorICAgICAgICAgICAgICAgICdtb2R1bGUnOiB0cnVlLAor
ICAgICAgICAgICAgICAgICduYW1lc3BhY2UnOiB0cnVlLAorICAgICAgICAgICAgICAgICd0eXBl
ZGVmJzogdHJ1ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGtpbmQgPSB0cmltKHNsaWNl
U291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTsKKyAgICAgICAgICAgIHRoaXMuX3Rh
Zy5raW5kID0ga2luZDsKKyAgICAgICAgICAgIGlmICghaGFzT3duUHJvcGVydHkoa2luZHMsIGtp
bmQpKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdJbnZhbGlkIGtpbmQg
bmFtZSBcJyUwXCcnLCBraW5kKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZUFjY2Vz
cyA9IGZ1bmN0aW9uIHBhcnNlQWNjZXNzKCkgeworICAgICAgICAgICAgdmFyIGFjY2VzczsKKyAg
ICAgICAgICAgIGFjY2VzcyA9IHRyaW0oc2xpY2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5f
bGFzdCkpOworICAgICAgICAgICAgdGhpcy5fdGFnLmFjY2VzcyA9IGFjY2VzczsKKyAgICAgICAg
ICAgIGlmIChhY2Nlc3MgIT09ICdwcml2YXRlJyAmJiBhY2Nlc3MgIT09ICdwcm90ZWN0ZWQnICYm
IGFjY2VzcyAhPT0gJ3B1YmxpYycpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJy
b3IoJ0ludmFsaWQgYWNjZXNzIG5hbWUgXCclMFwnJywgYWNjZXNzKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZVZhcmlhdGlvbiA9IGZ1bmN0aW9uIHBhcnNlVmFyaWF0aW9uKCkgewor
ICAgICAgICAgICAgdmFyIHZhcmlhdGlvbiwgdGV4dDsKKyAgICAgICAgICAgIHRleHQgPSB0cmlt
KHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTsKKyAgICAgICAgICAgIHZh
cmlhdGlvbiA9IHBhcnNlRmxvYXQodGV4dCwgMTApOworICAgICAgICAgICAgdGhpcy5fdGFnLnZh
cmlhdGlvbiA9IHZhcmlhdGlvbjsKKyAgICAgICAgICAgIGlmIChpc05hTih2YXJpYXRpb24pKSB7
CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdJbnZhbGlkIHZhcmlhdGlvbiBc
JyUwXCcnLCB0ZXh0KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5lbnN1cmVFbmQgPSBmdW5j
dGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgc2hvdWxkQmVFbXB0eSA9IHRyaW0oc2xpY2VTb3Vy
Y2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAgICAgaWYgKHNob3VsZEJl
RW1wdHkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ1Vua25vd24gY29u
dGVudCBcJyUwXCcnLCBzaG91bGRCZUVtcHR5KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2VyLnByb3RvdHlwZS5l
cGlsb2d1ZSA9IGZ1bmN0aW9uIGVwaWxvZ3VlKCkgeworICAgICAgICAgICAgdmFyIGRlc2NyaXB0
aW9uOworCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHRoaXMuX3RhZy5kZXNjcmlwdGlvbjsK
KyAgICAgICAgICAgIC8vIHVuLWZpeCBwb3RlbnRpYWxseSBzbG9wcHkgZGVjbGFyYXRpb24KKyAg
ICAgICAgICAgIGlmIChpc1BhcmFtVGl0bGUodGhpcy5fdGl0bGUpICYmICF0aGlzLl90YWcudHlw
ZSAmJiBkZXNjcmlwdGlvbiAmJiBkZXNjcmlwdGlvbi5jaGFyQXQoMCkgPT09ICdbJykgeworICAg
ICAgICAgICAgICAgIHRoaXMuX3RhZy50eXBlID0gdGhpcy5fZXh0cmEubmFtZTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl90YWcubmFtZSA9IHVuZGVmaW5lZDsKKworICAgICAgICAgICAgICAgIGlm
ICghc2xvcHB5KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlz
c2luZyBvciBpbnZhbGlkIHRhZyBuYW1lJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAg
ICAgICAgUnVsZXMgPSB7CisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3Mt
YWNjZXNzLmh0bWwKKyAgICAgICAgICAgICdhY2Nlc3MnOiBbJ3BhcnNlQWNjZXNzJ10sCisgICAg
ICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtYWxpYXMuaHRtbAorICAgICAgICAg
ICAgJ2FsaWFzJzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAg
Ly8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWF1Z21lbnRzLmh0bWwKKyAgICAgICAgICAgICdh
dWdtZW50cyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVF
bmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rv
ci5odG1sCisgICAgICAgICAgICAnY29uc3RydWN0b3InOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5h
bWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBTeW5vbnltOiBo
dHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtY29uc3RydWN0b3IuaHRtbAorICAgICAgICAgICAgJ2Ns
YXNzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCdd
LAorICAgICAgICAgICAgLy8gU3lub255bTogaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWV4dGVu
ZHMuaHRtbAorICAgICAgICAgICAgJ2V4dGVuZHMnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQ
YXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNk
b2Mub3JnL3RhZ3MtZGVwcmVjYXRlZC5odG1sCisgICAgICAgICAgICAnZGVwcmVjYXRlZCc6IFsn
cGFyc2VEZXNjcmlwdGlvbiddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90
YWdzLWdsb2JhbC5odG1sCisgICAgICAgICAgICAnZ2xvYmFsJzogWydlbnN1cmVFbmQnXSwKKyAg
ICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1pbm5lci5odG1sCisgICAgICAg
ICAgICAnaW5uZXInOiBbJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpz
ZG9jLm9yZy90YWdzLWluc3RhbmNlLmh0bWwKKyAgICAgICAgICAgICdpbnN0YW5jZSc6IFsnZW5z
dXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3Mta2luZC5o
dG1sCisgICAgICAgICAgICAna2luZCc6IFsncGFyc2VLaW5kJ10sCisgICAgICAgICAgICAvLyBo
dHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWl4ZXMuaHRtbAorICAgICAgICAgICAgJ21peGVzJzog
WydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0cDovL3Vz
ZWpzZG9jLm9yZy90YWdzLW1peGluLmh0bWwKKyAgICAgICAgICAgICdtaXhpbic6IFsncGFyc2VO
YW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0cDovL3Vz
ZWpzZG9jLm9yZy90YWdzLW1lbWJlci5odG1sCisgICAgICAgICAgICAnbWVtYmVyJzogWydwYXJz
ZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAg
ICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW1ldGhvZC5odG1sCisgICAgICAgICAgICAn
bWV0aG9kJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAg
ICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbW9kdWxlLmh0bWwKKyAgICAgICAgICAg
ICdtb2R1bGUnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJl
RW5kJ10sCisgICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3Mt
bWV0aG9kLmh0bWwKKyAgICAgICAgICAgICdmdW5jJzogWydwYXJzZU5hbWVQYXRoT3B0aW9uYWwn
LCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mu
b3JnL3RhZ3MtbWV0aG9kLmh0bWwKKyAgICAgICAgICAgICdmdW5jdGlvbic6IFsncGFyc2VOYW1l
UGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gU3lub255bTogaHR0
cDovL3VzZWpzZG9jLm9yZy90YWdzLW1lbWJlci5odG1sCisgICAgICAgICAgICAndmFyJzogWydw
YXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCddLAorICAgICAg
ICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLW5hbWUuaHRtbAorICAgICAgICAgICAg
J25hbWUnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBo
dHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZXNwYWNlLmh0bWwKKyAgICAgICAgICAgICduYW1l
c3BhY2UnOiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5k
J10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtcHJpdmF0ZS5odG1s
CisgICAgICAgICAgICAncHJpdmF0ZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlRGVzY3JpcHRpb24n
XSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wcm90ZWN0ZWQuaHRt
bAorICAgICAgICAgICAgJ3Byb3RlY3RlZCc6IFsncGFyc2VUeXBlJywgJ3BhcnNlRGVzY3JpcHRp
b24nXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wdWJsaWMuaHRt
bAorICAgICAgICAgICAgJ3B1YmxpYyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlRGVzY3JpcHRpb24n
XSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1yZWFkb25seS5odG1s
CisgICAgICAgICAgICAncmVhZG9ubHknOiBbJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8g
aHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlcXVpcmVzLmh0bWwKKyAgICAgICAgICAgICdyZXF1
aXJlcyc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0
dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zaW5jZS5odG1sCisgICAgICAgICAgICAnc2luY2UnOiBb
J3BhcnNlRGVzY3JpcHRpb24nXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcv
dGFncy1zdGF0aWMuaHRtbAorICAgICAgICAgICAgJ3N0YXRpYyc6IFsnZW5zdXJlRW5kJ10sCisg
ICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3Mtc3VtbWFyeS5odG1sCisgICAg
ICAgICAgICAnc3VtbWFyeSc6IFsncGFyc2VEZXNjcmlwdGlvbiddLAorICAgICAgICAgICAgLy8g
aHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXRoaXMuaHRtbAorICAgICAgICAgICAgJ3RoaXMnOiBb
J3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNl
anNkb2Mub3JnL3RhZ3MtdG9kby5odG1sCisgICAgICAgICAgICAndG9kbyc6IFsncGFyc2VEZXNj
cmlwdGlvbiddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXZhcmlh
dGlvbi5odG1sCisgICAgICAgICAgICAndmFyaWF0aW9uJzogWydwYXJzZVZhcmlhdGlvbiddLAor
ICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXZlcnNpb24uaHRtbAorICAg
ICAgICAgICAgJ3ZlcnNpb24nOiBbJ3BhcnNlRGVzY3JpcHRpb24nXQorICAgICAgICB9OworCisg
ICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSgpIHsKKyAg
ICAgICAgICAgIHZhciBpLCBpeiwgc2VxdWVuY2VzLCBtZXRob2Q7CisKKyAgICAgICAgICAgIC8v
IGVtcHR5IHRpdGxlCisgICAgICAgICAgICBpZiAoIXRoaXMuX3RpdGxlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgdGl0bGUnKSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNlZWsgdG8gY29udGVudCBsYXN0IGluZGV4Lgor
ICAgICAgICAgICAgdGhpcy5fbGFzdCA9IHNlZWtDb250ZW50KHRoaXMuX3RpdGxlKTsKKworICAg
ICAgICAgICAgaWYgKGhhc093blByb3BlcnR5KFJ1bGVzLCB0aGlzLl90aXRsZSkpIHsKKyAgICAg
ICAgICAgICAgICBzZXF1ZW5jZXMgPSBSdWxlc1t0aGlzLl90aXRsZV07CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgc2VxdWVuY2VzCisgICAgICAgICAg
ICAgICAgc2VxdWVuY2VzID0gWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lJywgJ3BhcnNlRGVzY3Jp
cHRpb24nLCAnZXBpbG9ndWUnXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChp
ID0gMCwgaXogPSBzZXF1ZW5jZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAg
ICAgIG1ldGhvZCA9IHNlcXVlbmNlc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXNbbWV0
aG9kXSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2VlayBnbG9iYWwgaW5kZXgg
dG8gZW5kIG9mIHRoaXMgdGFnLgorICAgICAgICAgICAgaW5kZXggPSB0aGlzLl9sYXN0OworICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3RhZzsKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlv
biBwYXJzZVRhZyhvcHRpb25zKSB7CisgICAgICAgICAgICB2YXIgdGl0bGUsIHBhcnNlcjsKKwor
ICAgICAgICAgICAgLy8gc2tpcCB0byB0YWcKKyAgICAgICAgICAgIGlmICghc2tpcFRvVGFnKCkp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gc2NhbiB0aXRsZQorICAgICAgICAgICAgdGl0bGUgPSBzY2FuVGl0bGUoKTsKKwor
ICAgICAgICAgICAgLy8gY29uc3RydWN0IHRhZyBwYXJzZXIKKyAgICAgICAgICAgIHBhcnNlciA9
IG5ldyBUYWdQYXJzZXIob3B0aW9ucywgdGl0bGUpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNl
ci5wYXJzZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUGFyc2UgSlNE
b2MKKyAgICAgICAgLy8KKworICAgICAgICBmdW5jdGlvbiBzY2FuSlNEb2NEZXNjcmlwdGlvbigp
IHsKKyAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9ICcnLCBjaCwgYXRBbGxvd2VkOworCisg
ICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVlOworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworCisgICAgICAg
ICAgICAgICAgaWYgKGF0QWxsb3dlZCAmJiBjaCA9PT0gJ0AnKSB7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChpc0xp
bmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBhdEFsbG93ZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXRBbGxvd2VkICYmICFpc1doaXRlU3BhY2Uo
Y2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGF0QWxsb3dlZCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICs9IGFkdmFuY2UoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cmltKGRlc2NyaXB0aW9uKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBhcnNlKGNvbW1lbnQsIG9wdGlvbnMpIHsKKyAgICAg
ICAgICAgIHZhciB0YWdzID0gW10sIHRhZywgZGVzY3JpcHRpb24sIGludGVyZXN0aW5nVGFncywg
aSwgaXo7CisKKyAgICAgICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHsKKyAgICAg
ICAgICAgICAgICBvcHRpb25zID0ge307CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICh0eXBlb2Ygb3B0aW9ucy51bndyYXAgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnVud3JhcCkg
eworICAgICAgICAgICAgICAgIHNvdXJjZSA9IHVud3JhcENvbW1lbnQoY29tbWVudCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbW1lbnQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGFycmF5IG9mIHJlbGV2YW50IHRhZ3MKKyAgICAg
ICAgICAgIGlmIChvcHRpb25zLnRhZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShv
cHRpb25zLnRhZ3MpKSB7CisgICAgICAgICAgICAgICAgICAgIGludGVyZXN0aW5nVGFncyA9IHsg
fTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBvcHRpb25zLnRhZ3MubGVu
Z3RoOyBpIDwgaXo7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBv
cHRpb25zLnRhZ3NbaV0gPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ZXJlc3RpbmdUYWdzW29wdGlvbnMudGFnc1tpXV0gPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yKCdJbnZhbGlkICJ0YWdzIiBwYXJhbWV0ZXI6ICcgKyBvcHRpb25zLnRhZ3MpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcignSW52YWxpZCAidGFn
cyIgcGFyYW1ldGVyOiAnICsgb3B0aW9ucy50YWdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghQ2FuQWNjZXNzU3RyaW5nQnlJbmRleCkgewor
ICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zcGxpdCgnJyk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7CisgICAgICAgICAgICBpbmRl
eCA9IDA7CisgICAgICAgICAgICBsaW5lTnVtYmVyID0gMDsKKyAgICAgICAgICAgIHJlY292ZXJh
YmxlID0gb3B0aW9ucy5yZWNvdmVyYWJsZTsKKyAgICAgICAgICAgIHNsb3BweSA9IG9wdGlvbnMu
c2xvcHB5OworICAgICAgICAgICAgc3RyaWN0ID0gb3B0aW9ucy5zdHJpY3Q7CisKKyAgICAgICAg
ICAgIGRlc2NyaXB0aW9uID0gc2NhbkpTRG9jRGVzY3JpcHRpb24oKTsKKworICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICB0YWcgPSBwYXJzZVRhZyhvcHRpb25zKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXRhZykgeworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpbnRlcmVzdGluZ1RhZ3Mg
fHwgaW50ZXJlc3RpbmdUYWdzLmhhc093blByb3BlcnR5KHRhZy50aXRsZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGFncy5wdXNoKHRhZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
OiBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICB0YWdzOiB0YWdzCisgICAgICAgICAgICB9
OworICAgICAgICB9CisgICAgICAgIGV4cG9ydHMucGFyc2UgPSBwYXJzZTsKKyAgICB9KGpzZG9j
ID0ge30pKTsKKworICAgIGV4cG9ydHMudmVyc2lvbiA9IFZFUlNJT047CisgICAgZXhwb3J0cy5w
YXJzZSA9IGpzZG9jLnBhcnNlOworICAgIGV4cG9ydHMucGFyc2VUeXBlID0gdHlwZWQucGFyc2VU
eXBlOworICAgIGV4cG9ydHMucGFyc2VQYXJhbVR5cGUgPSB0eXBlZC5wYXJzZVBhcmFtVHlwZTsK
KyAgICBleHBvcnRzLnVud3JhcENvbW1lbnQgPSB1bndyYXBDb21tZW50OworICAgIGV4cG9ydHMu
U3ludGF4ID0gc2hhbGxvd0NvcHkodHlwZWQuU3ludGF4KTsKKyAgICBleHBvcnRzLkVycm9yID0g
RG9jdHJpbmVFcnJvcjsKKyAgICBleHBvcnRzLnR5cGUgPSB7CisgICAgICAgIFN5bnRheDogZXhw
b3J0cy5TeW50YXgsCisgICAgICAgIHBhcnNlVHlwZTogdHlwZWQucGFyc2VUeXBlLAorICAgICAg
ICBwYXJzZVBhcmFtVHlwZTogdHlwZWQucGFyc2VQYXJhbVR5cGUsCisgICAgICAgIHN0cmluZ2lm
eTogdHlwZWQuc3RyaW5naWZ5CisgICAgfTsKK30odHlwZW9mIGV4cG9ydHMgPT09ICd1bmRlZmlu
ZWQnID8gKGRvY3RyaW5lID0ge30pIDogZXhwb3J0cykpOworLyogdmltOiBzZXQgc3c9NCB0cz00
IGV0IHR3PTgwIDogKi8KKworfSx7fV0sNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBZdXN1a2UgU3V6dWtpIDx1dGF0YW5l
LnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMyBBbGV4IFNldmlsbGUgPGhpQGFs
ZXhhbmRlcnNldmlsbGUuY29tPgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoK
KworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKKyAgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLwor
CisvKioKKyAqIEVzY29wZSAoPGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlv
bi9lc2NvcGUiPmVzY29wZTwvYT4pIGlzIGFuIDxhCisgKiBocmVmPSJodHRwOi8vd3d3LmVjbWEt
aW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL3N0YW5kYXJkcy9FY21hLTI2Mi5odG0iPkVD
TUFTY3JpcHQ8L2E+CisgKiBzY29wZSBhbmFseXplciBleHRyYWN0ZWQgZnJvbSB0aGUgPGEKKyAq
IGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL0NvbnN0ZWxsYXRpb24vZXNtYW5nbGUiPmVzbWFuZ2xl
IHByb2plY3Q8L2EvPi4KKyAqIDxwPgorICogPGVtPmVzY29wZTwvZW0+IGZpbmRzIGxleGljYWwg
c2NvcGVzIGluIGEgc291cmNlIHByb2dyYW0sIGkuZS4gYXJlYXMgb2YgdGhhdAorICogcHJvZ3Jh
bSB3aGVyZSBkaWZmZXJlbnQgb2NjdXJyZW5jZXMgb2YgdGhlIHNhbWUgaWRlbnRpZmllciByZWZl
ciB0byB0aGUgc2FtZQorICogdmFyaWFibGUuIFdpdGggZWFjaCBzY29wZSB0aGUgY29udGFpbmVk
IHZhcmlhYmxlcyBhcmUgY29sbGVjdGVkLCBhbmQgZWFjaAorICogaWRlbnRpZmllciByZWZlcmVu
Y2UgaW4gY29kZSBpcyBsaW5rZWQgdG8gaXRzIGNvcnJlc3BvbmRpbmcgdmFyaWFibGUgKGlmCisg
KiBwb3NzaWJsZSkuCisgKiA8cD4KKyAqIDxlbT5lc2NvcGU8L2VtPiB3b3JrcyBvbiBhIHN5bnRh
eCB0cmVlIG9mIHRoZSBwYXJzZWQgc291cmNlIGNvZGUgd2hpY2ggaGFzCisgKiB0byBhZGhlcmUg
dG8gdGhlIDxhCisgKiBocmVmPSJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9k
b2NzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJIj4KKyAqIE1vemlsbGEgUGFyc2VyIEFQSTwvYT4u
IEUuZy4gPGEgaHJlZj0iaHR0cDovL2VzcHJpbWEub3JnIj5lc3ByaW1hPC9hPiBpcyBhIHBhcnNl
cgorICogdGhhdCBwcm9kdWNlcyBzdWNoIHN5bnRheCB0cmVlcy4KKyAqIDxwPgorICogVGhlIG1h
aW4gaW50ZXJmYWNlIGlzIHRoZSB7QGxpbmsgYW5hbHl6ZX0gZnVuY3Rpb24uCisgKiBAbW9kdWxl
CisgKi8KKworLypqc2xpbnQgYml0d2lzZTp0cnVlICovCisvKmdsb2JhbCBleHBvcnRzOnRydWUs
IGRlZmluZTp0cnVlLCByZXF1aXJlOnRydWUqLworKGZ1bmN0aW9uIChmYWN0b3J5LCBnbG9iYWwp
IHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICBmdW5jdGlvbiBuYW1lc3BhY2Uoc3RyLCBvYmop
IHsKKyAgICAgICAgdmFyIGksIGl6LCBuYW1lcywgbmFtZTsKKyAgICAgICAgbmFtZXMgPSBzdHIu
c3BsaXQoJy4nKTsKKyAgICAgICAgZm9yIChpID0gMCwgaXogPSBuYW1lcy5sZW5ndGg7IGkgPCBp
ejsgKytpKSB7CisgICAgICAgICAgICBuYW1lID0gbmFtZXNbaV07CisgICAgICAgICAgICBpZiAo
b2JqLmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICAgICAgICAgICAgb2JqID0gb2JqW25h
bWVdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvYmogPSAob2JqW25h
bWVdID0ge30pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBvYmo7
CisgICAgfQorCisgICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1
cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLAorICAgIC8vIGFuZCBwbGFpbiBicm93c2VyIGxv
YWRpbmcsCisgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFt
ZCkgeworICAgICAgICBkZWZpbmUoJ2VzY29wZScsIFsnZXhwb3J0cycsICdlc3RyYXZlcnNlJ10s
IGZ1bmN0aW9uIChleHBvcnRzLCBlc3RyYXZlcnNlKSB7CisgICAgICAgICAgICBmYWN0b3J5KGV4
cG9ydHMsIGdsb2JhbCwgZXN0cmF2ZXJzZSk7CisgICAgICAgIH0pOworICAgIH0gZWxzZSBpZiAo
dHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGZhY3RvcnkoZXhwb3J0
cywgZ2xvYmFsLCByZXF1aXJlKCdlc3RyYXZlcnNlJykpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGZhY3RvcnkobmFtZXNwYWNlKCdlc2NvcGUnLCBnbG9iYWwpLCBnbG9iYWwsIGdsb2JhbC5lc3Ry
YXZlcnNlKTsKKyAgICB9Cit9KGZ1bmN0aW9uIChleHBvcnRzLCBnbG9iYWwsIGVzdHJhdmVyc2Up
IHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIgU3ludGF4LAorICAgICAgICBNYXAsCisg
ICAgICAgIGN1cnJlbnRTY29wZSwKKyAgICAgICAgZ2xvYmFsU2NvcGUsCisgICAgICAgIHNjb3Bl
cywKKyAgICAgICAgb3B0aW9uczsKKworICAgIFN5bnRheCA9IGVzdHJhdmVyc2UuU3ludGF4Owor
CisgICAgaWYgKHR5cGVvZiBnbG9iYWwuTWFwICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAv
LyBFUzYgTWFwCisgICAgICAgIE1hcCA9IGdsb2JhbC5NYXA7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgTWFwID0gZnVuY3Rpb24gTWFwKCkgeworICAgICAgICAgICAgdGhpcy5fX2RhdGEgPSB7fTsK
KyAgICAgICAgfTsKKworICAgICAgICBNYXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIE1hcEdl
dChrZXkpIHsKKyAgICAgICAgICAgIGtleSA9ICckJyArIGtleTsKKyAgICAgICAgICAgIGlmICh0
aGlzLl9fZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX19kYXRhW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdW5k
ZWZpbmVkOworICAgICAgICB9OworCisgICAgICAgIE1hcC5wcm90b3R5cGUuaGFzID0gZnVuY3Rp
b24gTWFwSGFzKGtleSkgeworICAgICAgICAgICAga2V5ID0gJyQnICsga2V5OworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX19kYXRhLmhhc093blByb3BlcnR5KGtleSk7CisgICAgICAgIH07CisK
KyAgICAgICAgTWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBNYXBTZXQoa2V5LCB2YWwpIHsK
KyAgICAgICAgICAgIGtleSA9ICckJyArIGtleTsKKyAgICAgICAgICAgIHRoaXMuX19kYXRhW2tl
eV0gPSB2YWw7CisgICAgICAgIH07CisKKyAgICAgICAgTWFwLnByb3RvdHlwZVsnZGVsZXRlJ10g
PSBmdW5jdGlvbiBNYXBEZWxldGUoa2V5KSB7CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBrZXk7
CisgICAgICAgICAgICByZXR1cm4gZGVsZXRlIHRoaXMuX19kYXRhW2tleV07CisgICAgICAgIH07
CisgICAgfQorCisgICAgZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIHRleHQpIHsKKyAgICAgICAgaWYg
KCFjb25kKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGV4dCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBkZWZhdWx0T3B0aW9ucygpIHsKKyAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgIG9wdGltaXN0aWM6IGZhbHNlLAorICAgICAgICAgICAgZGlyZWN0aXZl
OiBmYWxzZQorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHVwZGF0ZURlZXBseSh0
YXJnZXQsIG92ZXJyaWRlKSB7CisgICAgICAgIHZhciBrZXksIHZhbDsKKworICAgICAgICBmdW5j
dGlvbiBpc0hhc2hPYmplY3QodGFyZ2V0KSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRh
cmdldCA9PT0gJ29iamVjdCcgJiYgdGFyZ2V0IGluc3RhbmNlb2YgT2JqZWN0ICYmICEodGFyZ2V0
IGluc3RhbmNlb2YgUmVnRXhwKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoa2V5IGluIG92
ZXJyaWRlKSB7CisgICAgICAgICAgICBpZiAob3ZlcnJpZGUuaGFzT3duUHJvcGVydHkoa2V5KSkg
eworICAgICAgICAgICAgICAgIHZhbCA9IG92ZXJyaWRlW2tleV07CisgICAgICAgICAgICAgICAg
aWYgKGlzSGFzaE9iamVjdCh2YWwpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0hhc2hP
YmplY3QodGFyZ2V0W2tleV0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVEZWVw
bHkodGFyZ2V0W2tleV0sIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHVwZGF0ZURlZXBseSh7fSwgdmFsKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgIH0KKworICAg
IC8qKgorICAgICAqIEEgUmVmZXJlbmNlIHJlcHJlc2VudHMgYSBzaW5nbGUgb2NjdXJyZW5jZSBv
ZiBhbiBpZGVudGlmaWVyIGluIGNvZGUuCisgICAgICogQGNsYXNzIFJlZmVyZW5jZQorICAgICAq
LworICAgIGZ1bmN0aW9uIFJlZmVyZW5jZShpZGVudCwgc2NvcGUsIGZsYWcsIHdyaXRlRXhwciwg
bWF5YmVJbXBsaWNpdEdsb2JhbCkgeworICAgICAgICAvKiogCisgICAgICAgICAqIElkZW50aWZp
ZXIgc3ludGF4IG5vZGUuCisgICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEjSWRlbnRpZmllcn0g
UmVmZXJlbmNlI2lkZW50aWZpZXIgCisgICAgICAgICAqLworICAgICAgICB0aGlzLmlkZW50aWZp
ZXIgPSBpZGVudDsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVu
Y2xvc2luZyBTY29wZS4KKyAgICAgICAgICogQG1lbWJlciB7U2NvcGV9IFJlZmVyZW5jZSNmcm9t
IAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5mcm9tID0gc2NvcGU7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBXaGV0aGVyIHRoZSByZWZlcmVuY2UgY29tZXMgZnJvbSBhIGR5bmFtaWMgc2Nv
cGUgKHN1Y2ggYXMgJ2V2YWwnLAorICAgICAgICAgKiAnd2l0aCcsIGV0Yy4pLCBhbmQgbWF5IGJl
IHRyYXBwZWQgYnkgZHluYW1pYyBzY29wZXMuCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59
IFJlZmVyZW5jZSN0YWludGVkCisgICAgICAgICAqLworICAgICAgICB0aGlzLnRhaW50ZWQgPSBm
YWxzZTsKKyAgICAgICAgLyoqIAorICAgICAgICAgKiBUaGUgdmFyaWFibGUgdGhpcyByZWZlcmVu
Y2UgaXMgcmVzb2x2ZWQgd2l0aC4KKyAgICAgICAgICogQG1lbWJlciB7VmFyaWFibGV9IFJlZmVy
ZW5jZSNyZXNvbHZlZCAKKyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVzb2x2ZWQgPSBudWxs
OworICAgICAgICAvKiogCisgICAgICAgICAqIFRoZSByZWFkLXdyaXRlIG1vZGUgb2YgdGhlIHJl
ZmVyZW5jZS4gKFZhbHVlIGlzIG9uZSBvZiB7QGxpbmsKKyAgICAgICAgICogUmVmZXJlbmNlLlJF
QUR9LCB7QGxpbmsgUmVmZXJlbmNlLlJXfSwge0BsaW5rIFJlZmVyZW5jZS5XUklURX0pLgorICAg
ICAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IFJlZmVyZW5jZSNmbGFnIAorICAgICAgICAgKiBAcHJp
dmF0ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5mbGFnID0gZmxhZzsKKyAgICAgICAgaWYg
KHRoaXMuaXNXcml0ZSgpKSB7CisgICAgICAgICAgICAvKiogCisgICAgICAgICAgICAgKiBJZiBy
ZWZlcmVuY2UgaXMgd3JpdGVhYmxlLCB0aGlzIGlzIHRoZSB0cmVlIGJlaW5nIHdyaXR0ZW4gdG8g
aXQuCisgICAgICAgICAgICAgKiBAbWVtYmVyIHtlc3ByaW1hI05vZGV9IFJlZmVyZW5jZSN3cml0
ZUV4cHIgCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHRoaXMud3JpdGVFeHByID0gd3Jp
dGVFeHByOworICAgICAgICB9CisgICAgICAgIC8qKiAKKyAgICAgICAgICogV2hldGhlciB0aGUg
UmVmZXJlbmNlIG1pZ2h0IHJlZmVyIHRvIGEgZ2xvYmFsIHZhcmlhYmxlLgorICAgICAgICAgKiBA
bWVtYmVyIHtib29sZWFufSBSZWZlcmVuY2UjX19tYXliZUltcGxpY2l0R2xvYmFsIAorICAgICAg
ICAgKiBAcHJpdmF0ZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5fX21heWJlSW1wbGljaXRH
bG9iYWwgPSBtYXliZUltcGxpY2l0R2xvYmFsOworICAgIH0KKworICAgIC8qKiAKKyAgICAgKiBA
Y29uc3RhbnQgUmVmZXJlbmNlLlJFQUQgCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBS
ZWZlcmVuY2UuUkVBRCA9IDB4MTsKKyAgICAvKiogCisgICAgICogQGNvbnN0YW50IFJlZmVyZW5j
ZS5XUklURSAKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIFJlZmVyZW5jZS5XUklURSA9
IDB4MjsKKyAgICAvKiogCisgICAgICogQGNvbnN0YW50IFJlZmVyZW5jZS5SVyAKKyAgICAgKiBA
cHJpdmF0ZQorICAgICAqLworICAgIFJlZmVyZW5jZS5SVyA9IDB4MzsKKworICAgIC8qKgorICAg
ICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBzdGF0aWMuCisgICAgICogQG1ldGhvZCBSZWZl
cmVuY2UjaXNTdGF0aWMKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIFJl
ZmVyZW5jZS5wcm90b3R5cGUuaXNTdGF0aWMgPSBmdW5jdGlvbiBpc1N0YXRpYygpIHsKKyAgICAg
ICAgcmV0dXJuICF0aGlzLnRhaW50ZWQgJiYgdGhpcy5yZXNvbHZlZCAmJiB0aGlzLnJlc29sdmVk
LnNjb3BlLmlzU3RhdGljKCk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdGhl
IHJlZmVyZW5jZSBpcyB3cml0ZWFibGUuCisgICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNXcml0
ZQorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgUmVmZXJlbmNlLnByb3Rv
dHlwZS5pc1dyaXRlID0gZnVuY3Rpb24gaXNXcml0ZSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
ZmxhZyAmIFJlZmVyZW5jZS5XUklURTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogV2hldGhl
ciB0aGUgcmVmZXJlbmNlIGlzIHJlYWRhYmxlLgorICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lz
UmVhZAorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgUmVmZXJlbmNlLnBy
b3RvdHlwZS5pc1JlYWQgPSBmdW5jdGlvbiBpc1JlYWQoKSB7CisgICAgICAgIHJldHVybiB0aGlz
LmZsYWcgJiBSZWZlcmVuY2UuUkVBRDsKKyAgICB9OworCisgICAgLyoqCisgICAgICogV2hldGhl
ciB0aGUgcmVmZXJlbmNlIGlzIHJlYWQtb25seS4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNp
c1JlYWRPbmx5CisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVu
Y2UucHJvdG90eXBlLmlzUmVhZE9ubHkgPSBmdW5jdGlvbiBpc1JlYWRPbmx5KCkgeworICAgICAg
ICByZXR1cm4gdGhpcy5mbGFnID09PSBSZWZlcmVuY2UuUkVBRDsKKyAgICB9OworCisgICAgLyoq
CisgICAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHdyaXRlLW9ubHkuCisgICAgICogQG1l
dGhvZCBSZWZlcmVuY2UjaXNXcml0ZU9ubHkKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAg
ICAqLworICAgIFJlZmVyZW5jZS5wcm90b3R5cGUuaXNXcml0ZU9ubHkgPSBmdW5jdGlvbiBpc1dy
aXRlT25seSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmxhZyA9PT0gUmVmZXJlbmNlLldSSVRF
OworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgcmVh
ZC13cml0ZS4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1JlYWRXcml0ZQorICAgICAqIEBy
ZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgUmVmZXJlbmNlLnByb3RvdHlwZS5pc1JlYWRX
cml0ZSA9IGZ1bmN0aW9uIGlzUmVhZFdyaXRlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5mbGFn
ID09PSBSZWZlcmVuY2UuUlc7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEEgVmFyaWFibGUg
cmVwcmVzZW50cyBhIGxvY2FsbHkgc2NvcGVkIGlkZW50aWZpZXIuIFRoZXNlIGluY2x1ZGUgYXJn
dW1lbnRzIHRvCisgICAgICogZnVuY3Rpb25zLgorICAgICAqIEBjbGFzcyBWYXJpYWJsZQorICAg
ICAqLworICAgIGZ1bmN0aW9uIFZhcmlhYmxlKG5hbWUsIHNjb3BlKSB7CisgICAgICAgIC8qKiAg
CisgICAgICAgICAqIFRoZSB2YXJpYWJsZSBuYW1lLCBhcyBnaXZlbiBpbiB0aGUgc291cmNlIGNv
ZGUuCisgICAgICAgICAqIEBtZW1iZXIge1N0cmluZ30gVmFyaWFibGUjbmFtZSAKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIC8qKgorICAgICAgICAgKiBM
aXN0IG9mIGRlZmluaW5nIG9jY3VycmVuY2VzIG9mIHRoaXMgdmFyaWFibGUgKGxpa2UgaW4gJ3Zh
ciAuLi4nCisgICAgICAgICAqIHN0YXRlbWVudHMgb3IgYXMgcGFyYW1ldGVyKSwgYXMgQVNUIG5v
ZGVzLgorICAgICAgICAgKiBAbWVtYmVyIHtlc3ByaW1hLklkZW50aWZpZXJbXX0gVmFyaWFibGUj
aWRlbnRpZmllcnMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaWRlbnRpZmllcnMgPSBbXTsK
KyAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2Yge0BsaW5rIFJlZmVyZW5jZXxyZWZlcmVu
Y2VzfSBvZiB0aGlzIHZhcmlhYmxlIChleGNsdWRpbmcgcGFyYW1ldGVyIGVudHJpZXMpCisgICAg
ICAgICAqIGluIGl0cyBkZWZpbmluZyBzY29wZSBhbmQgYWxsIG5lc3RlZCBzY29wZXMuIEZvciBk
ZWZpbmluZworICAgICAgICAgKiBvY2N1cnJlbmNlcyBvbmx5IHNlZSB7QGxpbmsgVmFyaWFibGUj
ZGVmc30uCisgICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtdfSBWYXJpYWJsZSNyZWZlcmVu
Y2VzCisgICAgICAgICAqLworICAgICAgICB0aGlzLnJlZmVyZW5jZXMgPSBbXTsKKworICAgICAg
ICAvKioKKyAgICAgICAgICogTGlzdCBvZiBkZWZpbmluZyBvY2N1cnJlbmNlcyBvZiB0aGlzIHZh
cmlhYmxlIChsaWtlIGluICd2YXIgLi4uJworICAgICAgICAgKiBzdGF0ZW1lbnRzIG9yIGFzIHBh
cmFtZXRlciksIGFzIGN1c3RvbSBvYmplY3RzLgorICAgICAgICAgKiBAdHlwZWRlZiB7T2JqZWN0
fSBEZWZFbnRyeQorICAgICAgICAgKiBAcHJvcGVydHkge1N0cmluZ30gRGVmRW50cnkudHlwZSAt
IHRoZSB0eXBlIG9mIHRoZSBvY2N1cnJlbmNlIChlLmcuCisgICAgICAgICAqICAgICAgIlBhcmFt
ZXRlciIsICJWYXJpYWJsZSIsIC4uLikKKyAgICAgICAgICogQHByb3BlcnR5IHtlc3ByaW1hLklk
ZW50aWZpZXJ9IERlZkVudHJ5Lm5hbWUgLSB0aGUgaWRlbnRpZmllciBBU1Qgbm9kZSBvZiB0aGUg
b2NjdXJyZW5jZQorICAgICAgICAgKiBAcHJvcGVydHkge2VzcHJpbWEuTm9kZX0gRGVmRW50cnku
bm9kZSAtIHRoZSBlbmNsb3Npbmcgbm9kZSBvZiB0aGUKKyAgICAgICAgICogICAgICBpZGVudGlm
aWVyCisgICAgICAgICAqIEBwcm9wZXJ0eSB7ZXNwcmltYS5Ob2RlfSBbRGVmRW50cnkucGFyZW50
XSAtIHRoZSBlbmNsb3Npbmcgc3RhdGVtZW50CisgICAgICAgICAqICAgICAgbm9kZSBvZiB0aGUg
aWRlbnRpZmllcgorICAgICAgICAgKiBAbWVtYmVyIHtEZWZFbnRyeVtdfSBWYXJpYWJsZSNkZWZz
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmRlZnMgPSBbXTsKKworICAgICAgICB0aGlzLnRh
aW50ZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdoZXRoZXIgdGhpcyBpcyBh
IHN0YWNrIHZhcmlhYmxlLgorICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBWYXJpYWJsZSNz
dGFjaworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5zdGFjayA9IHRydWU7CisgICAgICAgIC8q
KiAKKyAgICAgICAgICogUmVmZXJlbmNlIHRvIHRoZSBlbmNsb3NpbmcgU2NvcGUuCisgICAgICAg
ICAqIEBtZW1iZXIge1Njb3BlfSBWYXJpYWJsZSNzY29wZSAKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMuc2NvcGUgPSBzY29wZTsKKyAgICB9CisKKyAgICBWYXJpYWJsZS5DYXRjaENsYXVzZSA9
ICdDYXRjaENsYXVzZSc7CisgICAgVmFyaWFibGUuUGFyYW1ldGVyID0gJ1BhcmFtZXRlcic7Cisg
ICAgVmFyaWFibGUuRnVuY3Rpb25OYW1lID0gJ0Z1bmN0aW9uTmFtZSc7CisgICAgVmFyaWFibGUu
VmFyaWFibGUgPSAnVmFyaWFibGUnOworICAgIFZhcmlhYmxlLkltcGxpY2l0R2xvYmFsVmFyaWFi
bGUgPSAnSW1wbGljaXRHbG9iYWxWYXJpYWJsZSc7CisKKyAgICBmdW5jdGlvbiBpc1N0cmljdFNj
b3BlKHNjb3BlLCBibG9jaykgeworICAgICAgICB2YXIgYm9keSwgaSwgaXosIHN0bXQsIGV4cHI7
CisKKyAgICAgICAgLy8gV2hlbiB1cHBlciBzY29wZSBpcyBleGlzdHMgYW5kIHN0cmljdCwgaW5u
ZXIgc2NvcGUgaXMgYWxzbyBzdHJpY3QuCisgICAgICAgIGlmIChzY29wZS51cHBlciAmJiBzY29w
ZS51cHBlci5pc1N0cmljdCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc2NvcGUudHlwZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAg
Ym9keSA9IGJsb2NrLmJvZHk7CisgICAgICAgIH0gZWxzZSBpZiAoc2NvcGUudHlwZSA9PT0gJ2ds
b2JhbCcpIHsKKyAgICAgICAgICAgIGJvZHkgPSBibG9jazsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvcHRpb25z
LmRpcmVjdGl2ZSkgeworICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBib2R5LmJvZHkubGVu
Z3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgIHN0bXQgPSBib2R5LmJvZHlbaV07
CisgICAgICAgICAgICAgICAgaWYgKHN0bXQudHlwZSAhPT0gJ0RpcmVjdGl2ZVN0YXRlbWVudCcp
IHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChzdG10LnJhdyA9PT0gJyJ1c2Ugc3RyaWN0IicgfHwgc3RtdC5yYXcgPT09
ICdcJ3VzZSBzdHJpY3RcJycpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZm9yIChpID0gMCwgaXogPSBib2R5LmJvZHkubGVuZ3RoOyBpIDwgaXo7ICsraSkgewor
ICAgICAgICAgICAgICAgIHN0bXQgPSBib2R5LmJvZHlbaV07CisgICAgICAgICAgICAgICAgaWYg
KHN0bXQudHlwZSAhPT0gU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1lbnQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGV4cHIg
PSBzdG10LmV4cHJlc3Npb247CisgICAgICAgICAgICAgICAgaWYgKGV4cHIudHlwZSAhPT0gU3lu
dGF4LkxpdGVyYWwgfHwgdHlwZW9mIGV4cHIudmFsdWUgIT09ICdzdHJpbmcnKSB7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoZXhwci5yYXcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXhwci5yYXcg
PT09ICcidXNlIHN0cmljdCInIHx8IGV4cHIucmF3ID09PSAnXCd1c2Ugc3RyaWN0XCcnKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHBy
LnZhbHVlID09PSAndXNlIHN0cmljdCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBAY2xhc3MgU2NvcGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBTY29wZShibG9j
aywgb3B0KSB7CisgICAgICAgIHZhciB2YXJpYWJsZSwgYm9keTsKKworICAgICAgICAvKioKKyAg
ICAgICAgICogT25lIG9mICdjYXRjaCcsICd3aXRoJywgJ2Z1bmN0aW9uJyBvciAnZ2xvYmFsJy4K
KyAgICAgICAgICogQG1lbWJlciB7U3RyaW5nfSBTY29wZSN0eXBlCisgICAgICAgICAqLworICAg
ICAgICB0aGlzLnR5cGUgPQorICAgICAgICAgICAgKGJsb2NrLnR5cGUgPT09IFN5bnRheC5DYXRj
aENsYXVzZSkgPyAnY2F0Y2gnIDoKKyAgICAgICAgICAgIChibG9jay50eXBlID09PSBTeW50YXgu
V2l0aFN0YXRlbWVudCkgPyAnd2l0aCcgOgorICAgICAgICAgICAgKGJsb2NrLnR5cGUgPT09IFN5
bnRheC5Qcm9ncmFtKSA/ICdnbG9iYWwnIDogJ2Z1bmN0aW9uJzsKKyAgICAgICAgIC8qKgorICAg
ICAgICAgKiBUaGUgc2NvcGVkIHtAbGluayBWYXJpYWJsZX1zIG9mIHRoaXMgc2NvcGUsIGFzIDxj
b2RlPnsgVmFyaWFibGUubmFtZQorICAgICAgICAgKiA6IFZhcmlhYmxlIH08L2NvZGU+LgorICAg
ICAgICAgKiBAbWVtYmVyIHtNYXB9IFNjb3BlI3NldAorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5zZXQgPSBuZXcgTWFwKCk7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdGFpbnRlZCB2
YXJpYWJsZXMgb2YgdGhpcyBzY29wZSwgYXMgPGNvZGU+eyBWYXJpYWJsZS5uYW1lIDoKKyAgICAg
ICAgICogYm9vbGVhbiB9PC9jb2RlPi4KKyAgICAgICAgICogQG1lbWJlciB7TWFwfSBTY29wZSN0
YWludHMgKi8KKyAgICAgICAgdGhpcy50YWludHMgPSBuZXcgTWFwKCk7CisgICAgICAgIC8qKgor
ICAgICAgICAgKiBHZW5lcmFsbHksIHRocm91Z2ggdGhlIGxleGljYWwgc2NvcGluZyBvZiBKUyB5
b3UgY2FuIGFsd2F5cyBrbm93CisgICAgICAgICAqIHdoaWNoIHZhcmlhYmxlIGFuIGlkZW50aWZp
ZXIgaW4gdGhlIHNvdXJjZSBjb2RlIHJlZmVycyB0by4gVGhlcmUgYXJlCisgICAgICAgICAqIGEg
ZmV3IGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlLiBXaXRoICdnbG9iYWwnIGFuZCAnd2l0aCcgc2Nv
cGVzIHlvdQorICAgICAgICAgKiBjYW4gb25seSBkZWNpZGUgYXQgcnVudGltZSB3aGljaCB2YXJp
YWJsZSBhIHJlZmVyZW5jZSByZWZlcnMgdG8uCisgICAgICAgICAqIE1vcmVvdmVyLCBpZiAnZXZh
bCgpJyBpcyB1c2VkIGluIGEgc2NvcGUsIGl0IG1pZ2h0IGludHJvZHVjZSBuZXcKKyAgICAgICAg
ICogYmluZGluZ3MgaW4gdGhpcyBvciBpdHMgcHJhcmVudCBzY29wZXMuCisgICAgICAgICAqIEFs
bCB0aG9zZSBzY29wZXMgYXJlIGNvbnNpZGVyZWQgJ2R5bmFtaWMnLgorICAgICAgICAgKiBAbWVt
YmVyIHtib29sZWFufSBTY29wZSNkeW5hbWljCisgICAgICAgICAqLworICAgICAgICB0aGlzLmR5
bmFtaWMgPSB0aGlzLnR5cGUgPT09ICdnbG9iYWwnIHx8IHRoaXMudHlwZSA9PT0gJ3dpdGgnOwor
ICAgICAgICAvKioKKyAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIHNjb3BlLWRlZmluaW5n
IHN5bnRheCBub2RlLgorICAgICAgICAgKiBAbWVtYmVyIHtlc3ByaW1hLk5vZGV9IFNjb3BlI2Js
b2NrCisgICAgICAgICAqLworICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7CisgICAgICAgICAv
KioKKyAgICAgICAgICogVGhlIHtAbGluayBSZWZlcmVuY2V8cmVmZXJlbmNlc30gdGhhdCBhcmUg
bm90IHJlc29sdmVkIHdpdGggdGhpcyBzY29wZS4KKyAgICAgICAgICogQG1lbWJlciB7UmVmZXJl
bmNlW119IFNjb3BlI3Rocm91Z2gKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGhyb3VnaCA9
IFtdOworICAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBzY29wZWQge0BsaW5rIFZhcmlhYmxl
fXMgb2YgdGhpcyBzY29wZS4gSW4gdGhlIGNhc2Ugb2YgYQorICAgICAgICAgKiAnZnVuY3Rpb24n
IHNjb3BlIHRoaXMgaW5jbHVkZXMgdGhlIGF1dG9tYXRpYyBhcmd1bWVudCA8ZW0+YXJndW1lbnRz
PC9lbT4gYXMKKyAgICAgICAgICogaXRzIGZpcnN0IGVsZW1lbnQsIGFzIHdlbGwgYXMgYWxsIGZ1
cnRoZXIgZm9ybWFsIGFyZ3VtZW50cy4KKyAgICAgICAgICogQG1lbWJlciB7VmFyaWFibGVbXX0g
U2NvcGUjdmFyaWFibGVzCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZhcmlhYmxlcyA9IFtd
OworICAgICAgICAgLyoqCisgICAgICAgICAqIEFueSB2YXJpYWJsZSB7QGxpbmsgUmVmZXJlbmNl
fHJlZmVyZW5jZX0gZm91bmQgaW4gdGhpcyBzY29wZS4gVGhpcworICAgICAgICAgKiBpbmNsdWRl
cyBvY2N1cnJlbmNlcyBvZiBsb2NhbCB2YXJpYWJsZXMgYXMgd2VsbCBhcyB2YXJpYWJsZXMgZnJv
bQorICAgICAgICAgKiBwYXJlbnQgc2NvcGVzIChpbmNsdWRpbmcgdGhlIGdsb2JhbCBzY29wZSku
IEZvciBsb2NhbCB2YXJpYWJsZXMKKyAgICAgICAgICogdGhpcyBhbHNvIGluY2x1ZGVzIGRlZmlu
aW5nIG9jY3VycmVuY2VzIChsaWtlIGluIGEgJ3Zhcicgc3RhdGVtZW50KS4KKyAgICAgICAgICog
SW4gYSAnZnVuY3Rpb24nIHNjb3BlIHRoaXMgZG9lcyBub3QgaW5jbHVkZSB0aGUgb2NjdXJyZW5j
ZXMgb2YgdGhlCisgICAgICAgICAqIGZvcm1hbCBwYXJhbWV0ZXIgaW4gdGhlIHBhcmFtZXRlciBs
aXN0LgorICAgICAgICAgKiBAbWVtYmVyIHtSZWZlcmVuY2VbXX0gU2NvcGUjcmVmZXJlbmNlcwor
ICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gW107CisgICAgICAgICAvKioK
KyAgICAgICAgICogTGlzdCBvZiB7QGxpbmsgUmVmZXJlbmNlfXMgdGhhdCBhcmUgbGVmdCB0byBi
ZSByZXNvbHZlZCAoaS5lLiB3aGljaAorICAgICAgICAgKiBuZWVkIHRvIGJlIGxpbmtlZCB0byB0
aGUgdmFyaWFibGUgdGhleSByZWZlciB0bykuIFVzZWQgaW50ZXJuYWxseSB0bworICAgICAgICAg
KiByZXNvbHZlIGJpbmRpbmdzIGR1cmluZyBzY29wZSBhbmFseXNpcy4gT24gYSBmaW5hbGl6ZWQg
c2NvcGUKKyAgICAgICAgICogYW5hbHlzaXMsIGFsbCBzb3BlcyBoYXZlIDxlbT5sZWZ0PC9lbT4g
dmFsdWUgPHN0cm9uZz5udWxsPC9zdHJvbmc+LgorICAgICAgICAgKiBAbWVtYmVyIHtSZWZlcmVu
Y2VbXX0gU2NvcGUjbGVmdAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5sZWZ0ID0gW107Cisg
ICAgICAgICAvKioKKyAgICAgICAgICogRm9yICdnbG9iYWwnIGFuZCAnZnVuY3Rpb24nIHNjb3Bl
cywgdGhpcyBpcyBhIHNlbGYtcmVmZXJlbmNlLiBGb3IKKyAgICAgICAgICogb3RoZXIgc2NvcGUg
dHlwZXMgdGhpcyBpcyB0aGUgPGVtPnZhcmlhYmxlU2NvcGU8L2VtPiB2YWx1ZSBvZiB0aGUKKyAg
ICAgICAgICogcGFyZW50IHNjb3BlLgorICAgICAgICAgKiBAbWVtYmVyIHtTY29wZX0gU2NvcGUj
dmFyaWFibGVTY29wZQorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy52YXJpYWJsZVNjb3BlID0K
KyAgICAgICAgICAgICh0aGlzLnR5cGUgPT09ICdnbG9iYWwnIHx8IHRoaXMudHlwZSA9PT0gJ2Z1
bmN0aW9uJykgPyB0aGlzIDogY3VycmVudFNjb3BlLnZhcmlhYmxlU2NvcGU7CisgICAgICAgICAv
KioKKyAgICAgICAgICogV2hldGhlciB0aGlzIHNjb3BlIGlzIGNyZWF0ZWQgYnkgYSBGdW5jdGlv
bkV4cHJlc3Npb24uCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFNjb3BlI2Z1bmN0aW9u
RXhwcmVzc2lvblNjb3BlCisgICAgICAgICAqLworICAgICAgICB0aGlzLmZ1bmN0aW9uRXhwcmVz
c2lvblNjb3BlID0gZmFsc2U7CisgICAgICAgICAvKioKKyAgICAgICAgICogV2hldGhlciB0aGlz
IGlzIGEgc2NvcGUgdGhhdCBjb250YWlucyBhbiAnZXZhbCgpJyBpbnZvY2F0aW9uLgorICAgICAg
ICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSNkaXJlY3RDYWxsVG9FdmFsU2NvcGUKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMuZGlyZWN0Q2FsbFRvRXZhbFNjb3BlID0gZmFsc2U7CisgICAg
ICAgICAvKioKKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjdGhpc0ZvdW5kCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLnRoaXNGb3VuZCA9IGZhbHNlOworICAgICAgICBib2R5
ID0gdGhpcy50eXBlID09PSAnZnVuY3Rpb24nID8gYmxvY2suYm9keSA6IGJsb2NrOworICAgICAg
ICBpZiAob3B0Lm5hbWluZykgeworICAgICAgICAgICAgdGhpcy5fX2RlZmluZShibG9jay5pZCwg
eworICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLkZ1bmN0aW9uTmFtZSwKKyAgICAgICAg
ICAgICAgICBuYW1lOiBibG9jay5pZCwKKyAgICAgICAgICAgICAgICBub2RlOiBibG9jaworICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdm
dW5jdGlvbicpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZSgnYXJn
dW1lbnRzJywgdGhpcyk7CisgICAgICAgICAgICAgICAgdGhpcy50YWludHMuc2V0KCdhcmd1bWVu
dHMnLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNldC5zZXQoJ2FyZ3VtZW50cycsIHZh
cmlhYmxlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09IFN5bnRheC5G
dW5jdGlvbkV4cHJlc3Npb24gJiYgYmxvY2suaWQpIHsKKyAgICAgICAgICAgICAgICBuZXcgU2Nv
cGUoYmxvY2ssIHsgbmFtaW5nOiB0cnVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgIC8qKgorICAgICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIHBhcmVudCB7QGxpbmsg
U2NvcGV8c2NvcGV9LgorICAgICAgICAgKiBAbWVtYmVyIHtTY29wZX0gU2NvcGUjdXBwZXIKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMudXBwZXIgPSBjdXJyZW50U2NvcGU7CisgICAgICAgICAv
KioKKyAgICAgICAgICogV2hldGhlciAndXNlIHN0cmljdCcgaXMgaW4gZWZmZWN0IGluIHRoaXMg
c2NvcGUuCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFNjb3BlI2lzU3RyaWN0CisgICAg
ICAgICAqLworICAgICAgICB0aGlzLmlzU3RyaWN0ID0gaXNTdHJpY3RTY29wZSh0aGlzLCBibG9j
ayk7CisKKyAgICAgICAgIC8qKgorICAgICAgICAgKiBMaXN0IG9mIG5lc3RlZCB7QGxpbmsgU2Nv
cGV9cy4KKyAgICAgICAgICogQG1lbWJlciB7U2NvcGVbXX0gU2NvcGUjY2hpbGRTY29wZXMKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuY2hpbGRTY29wZXMgPSBbXTsKKyAgICAgICAgaWYgKGN1
cnJlbnRTY29wZSkgeworICAgICAgICAgICAgY3VycmVudFNjb3BlLmNoaWxkU2NvcGVzLnB1c2go
dGhpcyk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIFJBSUkKKyAgICAgICAgY3VycmVudFNj
b3BlID0gdGhpczsKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcpIHsKKyAgICAg
ICAgICAgIGdsb2JhbFNjb3BlID0gdGhpczsKKyAgICAgICAgICAgIGdsb2JhbFNjb3BlLmltcGxp
Y2l0ID0geworICAgICAgICAgICAgICAgIHNldDogbmV3IE1hcCgpLAorICAgICAgICAgICAgICAg
IHZhcmlhYmxlczogW10KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgc2NvcGVz
LnB1c2godGhpcyk7CisgICAgfQorCisgICAgU2NvcGUucHJvdG90eXBlLl9fY2xvc2UgPSBmdW5j
dGlvbiBfX2Nsb3NlKCkgeworICAgICAgICB2YXIgaSwgaXosIHJlZiwgY3VycmVudCwgbm9kZSwg
aW1wbGljaXQ7CisKKyAgICAgICAgLy8gQmVjYXVzZSBpZiB0aGlzIGlzIGdsb2JhbCBlbnZpcm9u
bWVudCwgdXBwZXIgaXMgbnVsbAorICAgICAgICBpZiAoIXRoaXMuZHluYW1pYyB8fCBvcHRpb25z
Lm9wdGltaXN0aWMpIHsKKyAgICAgICAgICAgIC8vIHN0YXRpYyByZXNvbHZlCisgICAgICAgICAg
ICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMubGVmdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAg
ICAgICAgICAgICAgcmVmID0gdGhpcy5sZWZ0W2ldOworICAgICAgICAgICAgICAgIGlmICghdGhp
cy5fX3Jlc29sdmUocmVmKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl9fZGVsZWdhdGVU
b1VwcGVyU2NvcGUocmVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyB0aGlzIGlzICJnbG9iYWwiIC8gIndpdGgiIC8g
ImZ1bmN0aW9uIHdpdGggZXZhbCIgZW52aXJvbm1lbnQKKyAgICAgICAgICAgIGlmICh0aGlzLnR5
cGUgPT09ICd3aXRoJykgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5s
ZWZ0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVmID0gdGhp
cy5sZWZ0W2ldOworICAgICAgICAgICAgICAgICAgICByZWYudGFpbnRlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX19kZWxlZ2F0ZVRvVXBwZXJTY29wZShyZWYpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChp
ID0gMCwgaXogPSB0aGlzLmxlZnQubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBub3RpZnkgYWxsIG5hbWVzIGFyZSB0aHJvdWdoIHRvIGdsb2JhbAorICAgICAg
ICAgICAgICAgICAgICByZWYgPSB0aGlzLmxlZnRbaV07CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnQgPSB0aGlzOworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50LnRocm91Z2gucHVzaChyZWYpOworICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudCA9IGN1cnJlbnQudXBwZXI7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUg
KGN1cnJlbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdnbG9iYWwnKSB7CisgICAgICAgICAgICBpbXBs
aWNpdCA9IFtdOworICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSB0aGlzLmxlZnQubGVuZ3Ro
OyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgIHJlZiA9IHRoaXMubGVmdFtpXTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVmLl9fbWF5YmVJbXBsaWNpdEdsb2JhbCAmJiAhdGhpcy5zZXQu
aGFzKHJlZi5pZGVudGlmaWVyLm5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGltcGxpY2l0
LnB1c2gocmVmLl9fbWF5YmVJbXBsaWNpdEdsb2JhbCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjcmVhdGUgYW4gaW1wbGljaXQgZ2xvYmFsIHZh
cmlhYmxlIGZyb20gYXNzaWdubWVudCBleHByZXNzaW9uCisgICAgICAgICAgICBmb3IgKGkgPSAw
LCBpeiA9IGltcGxpY2l0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICBu
b2RlID0gaW1wbGljaXRbaV07CisgICAgICAgICAgICAgICAgdGhpcy5fX2RlZmluZUltcGxpY2l0
KG5vZGUubGVmdCwgeworICAgICAgICAgICAgICAgICAgICB0eXBlOiBWYXJpYWJsZS5JbXBsaWNp
dEdsb2JhbFZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLmxlZnQsCisg
ICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRoaXMubGVmdCA9IG51bGw7CisgICAgICAg
IGN1cnJlbnRTY29wZSA9IHRoaXMudXBwZXI7CisgICAgfTsKKworICAgIFNjb3BlLnByb3RvdHlw
ZS5fX3Jlc29sdmUgPSBmdW5jdGlvbiBfX3Jlc29sdmUocmVmKSB7CisgICAgICAgIHZhciB2YXJp
YWJsZSwgbmFtZTsKKyAgICAgICAgbmFtZSA9IHJlZi5pZGVudGlmaWVyLm5hbWU7CisgICAgICAg
IGlmICh0aGlzLnNldC5oYXMobmFtZSkpIHsKKyAgICAgICAgICAgIHZhcmlhYmxlID0gdGhpcy5z
ZXQuZ2V0KG5hbWUpOworICAgICAgICAgICAgdmFyaWFibGUucmVmZXJlbmNlcy5wdXNoKHJlZik7
CisgICAgICAgICAgICB2YXJpYWJsZS5zdGFjayA9IHZhcmlhYmxlLnN0YWNrICYmIHJlZi5mcm9t
LnZhcmlhYmxlU2NvcGUgPT09IHRoaXMudmFyaWFibGVTY29wZTsKKyAgICAgICAgICAgIGlmIChy
ZWYudGFpbnRlZCkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLnRhaW50ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHRoaXMudGFpbnRzLnNldCh2YXJpYWJsZS5uYW1lLCB0cnVlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlZi5yZXNvbHZlZCA9IHZhcmlhYmxlOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH07CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZWxlZ2F0ZVRvVXBwZXJTY29wZSA9IGZ1bmN0
aW9uIF9fZGVsZWdhdGVUb1VwcGVyU2NvcGUocmVmKSB7CisgICAgICAgIGlmICh0aGlzLnVwcGVy
KSB7CisgICAgICAgICAgICB0aGlzLnVwcGVyLmxlZnQucHVzaChyZWYpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMudGhyb3VnaC5wdXNoKHJlZik7CisgICAgfTsKKworICAgIFNjb3BlLnByb3Rv
dHlwZS5fX2RlZmluZUltcGxpY2l0ID0gZnVuY3Rpb24gX19kZWZpbmVJbXBsaWNpdChub2RlLCBp
bmZvKSB7CisgICAgICAgIHZhciBuYW1lLCB2YXJpYWJsZTsKKyAgICAgICAgaWYgKG5vZGUgJiYg
bm9kZS50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgbmFtZSA9IG5v
ZGUubmFtZTsKKyAgICAgICAgICAgIGlmICghdGhpcy5pbXBsaWNpdC5zZXQuaGFzKG5hbWUpKSB7
CisgICAgICAgICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUobmFtZSwgdGhpcyk7Cisg
ICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmllcnMucHVzaChub2RlKTsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2goaW5mbyk7CisgICAgICAgICAgICAgICAgdGhpcy5p
bXBsaWNpdC5zZXQuc2V0KG5hbWUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICB0aGlzLmlt
cGxpY2l0LnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFyaWFibGUgPSB0aGlzLmltcGxpY2l0LnNldC5nZXQobmFtZSk7Cisg
ICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmllcnMucHVzaChub2RlKTsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2goaW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLl9fZGVmaW5lID0gZnVuY3Rpb24gX19k
ZWZpbmUobm9kZSwgaW5mbykgeworICAgICAgICB2YXIgbmFtZSwgdmFyaWFibGU7CisgICAgICAg
IGlmIChub2RlICYmIG5vZGUudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpIHsKKyAgICAgICAg
ICAgIG5hbWUgPSBub2RlLm5hbWU7CisgICAgICAgICAgICBpZiAoIXRoaXMuc2V0LmhhcyhuYW1l
KSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKG5hbWUsIHRoaXMp
OworICAgICAgICAgICAgICAgIHZhcmlhYmxlLmlkZW50aWZpZXJzLnB1c2gobm9kZSk7CisgICAg
ICAgICAgICAgICAgdmFyaWFibGUuZGVmcy5wdXNoKGluZm8pOworICAgICAgICAgICAgICAgIHRo
aXMuc2V0LnNldChuYW1lLCB2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJs
ZXMucHVzaCh2YXJpYWJsZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHZhcmlhYmxlID0gdGhpcy5zZXQuZ2V0KG5hbWUpOworICAgICAgICAgICAgICAgIHZhcmlhYmxl
LmlkZW50aWZpZXJzLnB1c2gobm9kZSk7CisgICAgICAgICAgICAgICAgdmFyaWFibGUuZGVmcy5w
dXNoKGluZm8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIFNjb3Bl
LnByb3RvdHlwZS5fX3JlZmVyZW5jaW5nID0gZnVuY3Rpb24gX19yZWZlcmVuY2luZyhub2RlLCBh
c3NpZ24sIHdyaXRlRXhwciwgbWF5YmVJbXBsaWNpdEdsb2JhbCkgeworICAgICAgICB2YXIgcmVm
OworICAgICAgICAvLyBiZWNhdXNlIEFycmF5IGVsZW1lbnQgbWF5IGJlIG51bGwKKyAgICAgICAg
aWYgKG5vZGUgJiYgbm9kZS50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAg
ICAgcmVmID0gbmV3IFJlZmVyZW5jZShub2RlLCB0aGlzLCBhc3NpZ24gfHwgUmVmZXJlbmNlLlJF
QUQsIHdyaXRlRXhwciwgbWF5YmVJbXBsaWNpdEdsb2JhbCk7CisgICAgICAgICAgICB0aGlzLnJl
ZmVyZW5jZXMucHVzaChyZWYpOworICAgICAgICAgICAgdGhpcy5sZWZ0LnB1c2gocmVmKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZXRlY3RFdmFsID0gZnVu
Y3Rpb24gX19kZXRlY3RFdmFsKCkgeworICAgICAgICB2YXIgY3VycmVudDsKKyAgICAgICAgY3Vy
cmVudCA9IHRoaXM7CisgICAgICAgIHRoaXMuZGlyZWN0Q2FsbFRvRXZhbFNjb3BlID0gdHJ1ZTsK
KyAgICAgICAgZG8geworICAgICAgICAgICAgY3VycmVudC5keW5hbWljID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnVwcGVyOworICAgICAgICB9IHdoaWxlIChjdXJyZW50
KTsKKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLl9fZGV0ZWN0VGhpcyA9IGZ1bmN0aW9u
IF9fZGV0ZWN0VGhpcygpIHsKKyAgICAgICAgdGhpcy50aGlzRm91bmQgPSB0cnVlOworICAgIH07
CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19pc0Nsb3NlZCA9IGZ1bmN0aW9uIGlzQ2xvc2VkKCkg
eworICAgICAgICByZXR1cm4gdGhpcy5sZWZ0ID09PSBudWxsOworICAgIH07CisKKyAgICAvLyBB
UEkgU2NvcGUjcmVzb2x2ZShuYW1lKQorICAgIC8vIHJldHVybnMgcmVzb2x2ZWQgcmVmZXJlbmNl
CisgICAgU2NvcGUucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKGlkZW50KSB7
CisgICAgICAgIHZhciByZWYsIGksIGl6OworICAgICAgICBhc3NlcnQodGhpcy5fX2lzQ2xvc2Vk
KCksICdzY29wZSBzaG91bGQgYmUgY2xvc2VkJyk7CisgICAgICAgIGFzc2VydChpZGVudC50eXBl
ID09PSBTeW50YXguSWRlbnRpZmllciwgJ3RhcmdldCBzaG91bGQgYmUgaWRlbnRpZmllcicpOwor
ICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMucmVmZXJlbmNlcy5sZW5ndGg7IGkgPCBpejsg
KytpKSB7CisgICAgICAgICAgICByZWYgPSB0aGlzLnJlZmVyZW5jZXNbaV07CisgICAgICAgICAg
ICBpZiAocmVmLmlkZW50aWZpZXIgPT09IGlkZW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICB9OworCisgICAgLy8gQVBJIFNjb3BlI2lzU3RhdGljCisgICAgLy8gcmV0dXJucyB0aGlzIHNj
b3BlIGlzIHN0YXRpYworICAgIFNjb3BlLnByb3RvdHlwZS5pc1N0YXRpYyA9IGZ1bmN0aW9uIGlz
U3RhdGljKCkgeworICAgICAgICByZXR1cm4gIXRoaXMuZHluYW1pYzsKKyAgICB9OworCisgICAg
Ly8gQVBJIFNjb3BlI2lzQXJndW1lbnRzTWF0ZXJpYWxpemVkCisgICAgLy8gcmV0dXJuIHRoaXMg
c2NvcGUgaGFzIG1hdGVyaWFsaXplZCBhcmd1bWVudHMKKyAgICBTY29wZS5wcm90b3R5cGUuaXNB
cmd1bWVudHNNYXRlcmlhbGl6ZWQgPSBmdW5jdGlvbiBpc0FyZ3VtZW50c01hdGVyaWFsaXplZCgp
IHsKKyAgICAgICAgLy8gVE9ETyhDb25zdGVsbGF0aW9uKQorICAgICAgICAvLyBXZSBjYW4gbW9y
ZSBhZ2dyZXNzaXZlIG9uIHRoaXMgY29uZGl0aW9uIGxpa2UgdGhpcy4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gZnVuY3Rpb24gdCgpIHsKKyAgICAgICAgLy8gICAgIC8vIGFyZ3VtZW50cyBvZiB0
IGlzIGFsd2F5cyBoaWRkZW4uCisgICAgICAgIC8vICAgICBmdW5jdGlvbiBhcmd1bWVudHMoKSB7
CisgICAgICAgIC8vICAgICB9CisgICAgICAgIC8vIH0KKyAgICAgICAgdmFyIHZhcmlhYmxlOwor
CisgICAgICAgIC8vIFRoaXMgaXMgbm90IGZ1bmN0aW9uIHNjb3BlCisgICAgICAgIGlmICh0aGlz
LnR5cGUgIT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCF0aGlzLmlzU3RhdGljKCkpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdmFyaWFibGUgPSB0aGlzLnNldC5nZXQoJ2Fy
Z3VtZW50cycpOworICAgICAgICBhc3NlcnQodmFyaWFibGUsICdhbHdheXMgaGF2ZSBhcmd1bWVu
dHMgdmFyaWFibGUnKTsKKyAgICAgICAgcmV0dXJuIHZhcmlhYmxlLnRhaW50ZWQgfHwgdmFyaWFi
bGUucmVmZXJlbmNlcy5sZW5ndGggICE9PSAwOworICAgIH07CisKKyAgICAvLyBBUEkgU2NvcGUj
aXNUaGlzTWF0ZXJpYWxpemVkCisgICAgLy8gcmV0dXJuIHRoaXMgc2NvcGUgaGFzIG1hdGVyaWFs
aXplZCBgdGhpc2AgcmVmZXJlbmNlCisgICAgU2NvcGUucHJvdG90eXBlLmlzVGhpc01hdGVyaWFs
aXplZCA9IGZ1bmN0aW9uIGlzVGhpc01hdGVyaWFsaXplZCgpIHsKKyAgICAgICAgLy8gVGhpcyBp
cyBub3QgZnVuY3Rpb24gc2NvcGUKKyAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ2Z1bmN0aW9u
JykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0
aGlzLmlzU3RhdGljKCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0aGlzLnRoaXNGb3VuZDsKKyAgICB9OworCisgICAgU2NvcGUubWFuZ2xl
ZE5hbWUgPSAnX18kZXNjb3BlJF9fJzsKKworICAgIFNjb3BlLnByb3RvdHlwZS5hdHRhY2ggPSBm
dW5jdGlvbiBhdHRhY2goKSB7CisgICAgICAgIGlmICghdGhpcy5mdW5jdGlvbkV4cHJlc3Npb25T
Y29wZSkgeworICAgICAgICAgICAgdGhpcy5ibG9ja1tTY29wZS5tYW5nbGVkTmFtZV0gPSB0aGlz
OworICAgICAgICB9CisgICAgfTsKKworICAgIFNjb3BlLnByb3RvdHlwZS5kZXRhY2ggPSBmdW5j
dGlvbiBkZXRhY2goKSB7CisgICAgICAgIGlmICghdGhpcy5mdW5jdGlvbkV4cHJlc3Npb25TY29w
ZSkgeworICAgICAgICAgICAgZGVsZXRlIHRoaXMuYmxvY2tbU2NvcGUubWFuZ2xlZE5hbWVdOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIFNjb3BlLnByb3RvdHlwZS5pc1VzZWROYW1lID0gZnVu
Y3Rpb24gKG5hbWUpIHsKKyAgICAgICAgaWYgKHRoaXMuc2V0LmhhcyhuYW1lKSkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGl6
ID0gdGhpcy50aHJvdWdoLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0
aGlzLnRocm91Z2hbaV0uaWRlbnRpZmllci5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBAY2xhc3MgU2NvcGVNYW5hZ2VyCisg
ICAgICovCisgICAgZnVuY3Rpb24gU2NvcGVNYW5hZ2VyKHNjb3BlcykgeworICAgICAgICB0aGlz
LnNjb3BlcyA9IHNjb3BlczsKKyAgICAgICAgdGhpcy5hdHRhY2hlZCA9IGZhbHNlOworICAgIH0K
KworICAgIC8vIFJldHVybnMgYXBwcm9wbGlhdGUgc2NvcGUgZm9yIHRoaXMgbm9kZQorICAgIFNj
b3BlTWFuYWdlci5wcm90b3R5cGUuX19nZXQgPSBmdW5jdGlvbiBfX2dldChub2RlKSB7CisgICAg
ICAgIHZhciBpLCBpeiwgc2NvcGU7CisgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkKSB7CisgICAg
ICAgICAgICByZXR1cm4gbm9kZVtTY29wZS5tYW5nbGVkTmFtZV0gfHwgbnVsbDsKKyAgICAgICAg
fQorICAgICAgICBpZiAoU2NvcGUuaXNTY29wZVJlcXVpcmVkKG5vZGUpKSB7CisgICAgICAgICAg
ICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMuc2NvcGVzLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBzY29wZSA9IHRoaXMuc2NvcGVzW2ldOworICAgICAgICAgICAgICAgIGlm
ICghc2NvcGUuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHNjb3BlLmJsb2NrID09PSBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc2NvcGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAg
IFNjb3BlTWFuYWdlci5wcm90b3R5cGUuYWNxdWlyZSA9IGZ1bmN0aW9uIGFjcXVpcmUobm9kZSkg
eworICAgICAgICByZXR1cm4gdGhpcy5fX2dldChub2RlKTsKKyAgICB9OworCisgICAgU2NvcGVN
YW5hZ2VyLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24gcmVsZWFzZShub2RlKSB7CisgICAg
ICAgIHZhciBzY29wZSA9IHRoaXMuX19nZXQobm9kZSk7CisgICAgICAgIGlmIChzY29wZSkgewor
ICAgICAgICAgICAgc2NvcGUgPSBzY29wZS51cHBlcjsKKyAgICAgICAgICAgIHdoaWxlIChzY29w
ZSkgeworICAgICAgICAgICAgICAgIGlmICghc2NvcGUuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBzY29wZSA9IHNjb3BlLnVwcGVyOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07CisKKyAgICBTY29wZU1hbmFnZXIu
cHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uIGF0dGFjaCgpIHsKKyAgICAgICAgdmFyIGksIGl6
OworICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMuc2NvcGVzLmxlbmd0aDsgaSA8IGl6OyAr
K2kpIHsKKyAgICAgICAgICAgIHRoaXMuc2NvcGVzW2ldLmF0dGFjaCgpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuYXR0YWNoZWQgPSB0cnVlOworICAgIH07CisKKyAgICBTY29wZU1hbmFnZXIu
cHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9uIGRldGFjaCgpIHsKKyAgICAgICAgdmFyIGksIGl6
OworICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMuc2NvcGVzLmxlbmd0aDsgaSA8IGl6OyAr
K2kpIHsKKyAgICAgICAgICAgIHRoaXMuc2NvcGVzW2ldLmRldGFjaCgpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuYXR0YWNoZWQgPSBmYWxzZTsKKyAgICB9OworCisgICAgU2NvcGUuaXNTY29w
ZVJlcXVpcmVkID0gZnVuY3Rpb24gaXNTY29wZVJlcXVpcmVkKG5vZGUpIHsKKyAgICAgICAgcmV0
dXJuIFNjb3BlLmlzVmFyaWFibGVTY29wZVJlcXVpcmVkKG5vZGUpIHx8IG5vZGUudHlwZSA9PT0g
U3ludGF4LldpdGhTdGF0ZW1lbnQgfHwgbm9kZS50eXBlID09PSBTeW50YXguQ2F0Y2hDbGF1c2U7
CisgICAgfTsKKworICAgIFNjb3BlLmlzVmFyaWFibGVTY29wZVJlcXVpcmVkID0gZnVuY3Rpb24g
aXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQobm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS50eXBl
ID09PSBTeW50YXguUHJvZ3JhbSB8fCBub2RlLnR5cGUgPT09IFN5bnRheC5GdW5jdGlvbkV4cHJl
c3Npb24gfHwgbm9kZS50eXBlID09PSBTeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICB9
OworCisgICAgLyoqCisgICAgICogTWFpbiBpbnRlcmZhY2UgZnVuY3Rpb24uIFRha2VzIGFuIEVz
cHJpbWEgc3ludGF4IHRyZWUgYW5kIHJldHVybnMgdGhlCisgICAgICogYW5hbHl6ZWQgc2NvcGVz
LgorICAgICAqIEBmdW5jdGlvbiBhbmFseXplCisgICAgICogQHBhcmFtIHtlc3ByaW1hLlRyZWV9
IHRyZWUKKyAgICAgKiBAcGFyYW0ge09iamVjdH0gcHJvdmlkZWRPcHRpb25zIC0gT3B0aW9ucyB0
aGF0IHRhaWxvciB0aGUgc2NvcGUgYW5hbHlzaXMKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtw
cm92aWRlZE9wdGlvbnMub3B0aW1pc3RpYz1mYWxzZV0gLSB0aGUgb3B0aW1pc3RpYyBmbGFnCisg
ICAgICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlkZWRPcHRpb25zLmRpcmVjdGl2ZT1mYWxzZV0t
IHRoZSBkaXJlY3RpdmUgZmxhZworICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3ZpZGVkT3B0
aW9ucy5pZ25vcmVFdmFsPWZhbHNlXS0gd2hldGhlciB0byBjaGVjayAnZXZhbCgpJyBjYWxscwor
ICAgICAqIEByZXR1cm4ge1Njb3BlTWFuYWdlcn0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBhbmFs
eXplKHRyZWUsIHByb3ZpZGVkT3B0aW9ucykgeworICAgICAgICB2YXIgcmVzdWx0U2NvcGVzOwor
CisgICAgICAgIG9wdGlvbnMgPSB1cGRhdGVEZWVwbHkoZGVmYXVsdE9wdGlvbnMoKSwgcHJvdmlk
ZWRPcHRpb25zKTsKKyAgICAgICAgcmVzdWx0U2NvcGVzID0gc2NvcGVzID0gW107CisgICAgICAg
IGN1cnJlbnRTY29wZSA9IG51bGw7CisgICAgICAgIGdsb2JhbFNjb3BlID0gbnVsbDsKKworICAg
ICAgICAvLyBhdHRhY2ggc2NvcGUgYW5kIGNvbGxlY3QgLyByZXNvbHZlIG5hbWVzCisgICAgICAg
IGVzdHJhdmVyc2UudHJhdmVyc2UodHJlZSwgeworICAgICAgICAgICAgZW50ZXI6IGZ1bmN0aW9u
IGVudGVyKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgaSwgaXosIGRlY2w7CisgICAgICAg
ICAgICAgICAgaWYgKFNjb3BlLmlzU2NvcGVSZXF1aXJlZChub2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICBuZXcgU2NvcGUobm9kZSwge30pOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTeW50
YXguQXNzaWdubWVudEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm9w
ZXJhdG9yID09PSAnPScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5f
X3JlZmVyZW5jaW5nKG5vZGUubGVmdCwgUmVmZXJlbmNlLldSSVRFLCBub2RlLnJpZ2h0LCAoIWN1
cnJlbnRTY29wZS5pc1N0cmljdCAmJiBub2RlLmxlZnQubmFtZSAhPSBudWxsKSAmJiBub2RlKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUubGVmdCwgUmVmZXJlbmNlLlJXLCBub2RlLnJp
Z2h0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5BcnJheUV4cHJlc3Npb246CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5lbGVtZW50cy5sZW5ndGg7IGkg
PCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlLmVsZW1lbnRzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkJsb2Nr
U3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgU3ludGF4LkJpbmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUubGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucmlnaHQpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkJyZWFrU3RhdGVtZW50Ogor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4
LkNhbGxFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlLmNhbGxlZSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6
ID0gbm9kZVsnYXJndW1lbnRzJ10ubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZVsnYXJndW1lbnRzJ11b
aV0pOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hl
Y2sgdGhpcyBpcyBkaXJlY3QgY2FsbCB0byBldmFsCisgICAgICAgICAgICAgICAgICAgIGlmICgh
b3B0aW9ucy5pZ25vcmVFdmFsICYmIG5vZGUuY2FsbGVlLnR5cGUgPT09IFN5bnRheC5JZGVudGlm
aWVyICYmIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdldmFsJykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlLnZhcmlhYmxlU2NvcGUuX19kZXRlY3RFdmFsKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICBjYXNlIFN5bnRheC5DYXRjaENsYXVzZToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGU6IFZhcmlhYmxlLkNhdGNoQ2xhdXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTog
bm9kZS5wYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUKKyAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgY2FzZSBTeW50YXguQ29uZGl0aW9uYWxFeHByZXNzaW9uOgorICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnRlc3QpOworICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmNvbnNlcXVlbnQpOworICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmFsdGVybmF0
ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBT
eW50YXguQ29udGludWVTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRGlyZWN0aXZlU3RhdGVtZW50OgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkRvV2hpbGVT
dGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5n
KG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgY2FzZSBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRW1wdHlTdGF0ZW1lbnQ6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRXhw
cmVzc2lvblN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVm
ZXJlbmNpbmcobm9kZS5leHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Gb3JTdGF0ZW1lbnQ6CisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuaW5pdCk7CisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUudXBkYXRlKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5G
b3JJblN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubGVmdC50eXBlID09
PSBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5sZWZ0LmRlY2xhcmF0aW9uc1swXS5pZCwg
UmVmZXJlbmNlLldSSVRFLCBudWxsLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhu
b2RlLmxlZnQsIFJlZmVyZW5jZS5XUklURSwgbnVsbCwgKCFjdXJyZW50U2NvcGUuaXNTdHJpY3Qg
JiYgbm9kZS5sZWZ0Lm5hbWUgIT0gbnVsbCkgJiYgbm9kZSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5y
aWdodCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYW1lIGlzIGRlZmluZWQgaW4gdXBwZXIgc2NvcGUKKyAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNjb3BlLnVwcGVyLl9fZGVmaW5lKG5vZGUuaWQsIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLkZ1bmN0aW9uTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlOiBub2RlCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX2RlZmluZShub2RlLnBhcmFtc1tpXSwg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLlBhcmFtZXRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLnBhcmFtc1tpXSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4OiBpCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgLy8g
aWQgaXMgZGVmaW5lZCBpbiB1cHBlciBzY29wZQorICAgICAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwLCBpeiA9IG5vZGUucGFyYW1zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX2RlZmluZShub2RlLnBhcmFtc1tpXSwgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLlBhcmFtZXRlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2RlLnBhcmFtc1tpXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlOiBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4OiBpCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2Ug
U3ludGF4LklkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgY2FzZSBTeW50YXguSWZTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguTGl0ZXJhbDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5MYWJlbGVk
U3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmxlZnQpOworICAgICAgICAgICAgICAgICAgICBj
dXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnJpZ2h0KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5NZW1iZXJFeHByZXNzaW9u
OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLm9i
amVjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvbXB1dGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnByb3BlcnR5
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk5ld0V4cHJlc3Npb246CisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuY2FsbGVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlWydhcmd1bWVudHMnXS5sZW5ndGg7IGkg
PCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZl
cmVuY2luZyhub2RlWydhcmd1bWVudHMnXVtpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5P
YmplY3RFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgIGNhc2UgU3ludGF4LlByb2dyYW06CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguUHJvcGVydHk6CisgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUudmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlJldHVyblN0YXRl
bWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9k
ZS5hcmd1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgY2FzZSBTeW50YXguU2VxdWVuY2VFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBm
b3IgKGkgPSAwLCBpeiA9IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoOyBpIDwgaXo7ICsraSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5l
eHByZXNzaW9uc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQ6
CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuZGlz
Y3JpbWluYW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFN5bnRheC5Td2l0Y2hDYXNlOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuX19yZWZlcmVuY2luZyhub2RlLnRlc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlRoaXNFeHByZXNzaW9uOgorICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U2NvcGUudmFyaWFibGVTY29wZS5fX2RldGVjdFRoaXMoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5U
aHJvd1N0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJl
bmNpbmcobm9kZS5hcmd1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgY2FzZSBTeW50YXguVHJ5U3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlVuYXJ5RXhwcmVzc2lvbjoK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5hcmd1
bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguVXBkYXRlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNj
b3BlLl9fcmVmZXJlbmNpbmcobm9kZS5hcmd1bWVudCwgUmVmZXJlbmNlLlJXLCBudWxsKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5W
YXJpYWJsZURlY2xhcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9
IG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlY2wgPSBub2RlLmRlY2xhcmF0aW9uc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS52YXJpYWJsZVNjb3BlLl9fZGVmaW5lKGRlY2wuaWQsIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBWYXJpYWJsZS5WYXJpYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBkZWNsLmlkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGU6IGRlY2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6
IGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBub2RlCisgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNsLmluaXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplciBpcyBmb3VuZAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKGRl
Y2wuaWQsIFJlZmVyZW5jZS5XUklURSwgZGVjbC5pbml0LCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcoZGVjbC5pbml0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlZhcmlhYmxl
RGVjbGFyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFN5bnRheC5XaGlsZVN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5XaXRoU3RhdGVtZW50OgorICAgICAg
ICAgICAgICAgICAgICAvLyBXaXRoU3RhdGVtZW50IG9iamVjdCBpcyByZWZlcmVuY2VkIGF0IHVw
cGVyIHNjb3BlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS51cHBlci5fX3JlZmVy
ZW5jaW5nKG5vZGUub2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgbGVhdmU6IGZ1bmN0aW9u
IGxlYXZlKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudFNjb3BlICYmIG5v
ZGUgPT09IGN1cnJlbnRTY29wZS5ibG9jaykgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50
U2NvcGUuX19jbG9zZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisKKyAgICAgICAgYXNzZXJ0KGN1cnJlbnRTY29wZSA9PT0gbnVsbCk7CisgICAgICAg
IGdsb2JhbFNjb3BlID0gbnVsbDsKKyAgICAgICAgc2NvcGVzID0gbnVsbDsKKyAgICAgICAgb3B0
aW9ucyA9IG51bGw7CisKKyAgICAgICAgcmV0dXJuIG5ldyBTY29wZU1hbmFnZXIocmVzdWx0U2Nv
cGVzKTsKKyAgICB9CisKKyAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29wZS52ZXJzaW9uICovCisg
ICAgZXhwb3J0cy52ZXJzaW9uID0gJzEuMC4xJzsKKyAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29w
ZS5SZWZlcmVuY2UgKi8KKyAgICBleHBvcnRzLlJlZmVyZW5jZSA9IFJlZmVyZW5jZTsKKyAgICAv
KiogQG5hbWUgbW9kdWxlOmVzY29wZS5WYXJpYWJsZSAqLworICAgIGV4cG9ydHMuVmFyaWFibGUg
PSBWYXJpYWJsZTsKKyAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29wZS5TY29wZSAqLworICAgIGV4
cG9ydHMuU2NvcGUgPSBTY29wZTsKKyAgICAvKiogQG5hbWUgbW9kdWxlOmVzY29wZS5TY29wZU1h
bmFnZXIgKi8KKyAgICBleHBvcnRzLlNjb3BlTWFuYWdlciA9IFNjb3BlTWFuYWdlcjsKKyAgICAv
KiogQG5hbWUgbW9kdWxlOmVzY29wZS5hbmFseXplICovCisgICAgZXhwb3J0cy5hbmFseXplID0g
YW5hbHl6ZTsKK30sIHRoaXMpKTsKKy8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICov
CisKK30seyJlc3RyYXZlcnNlIjo3fV0sNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlh
dEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50
eWxAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTMgTWF0aGlhcyBCeW5lbnMgPG1hdGhp
YXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhp
ZGF5YXRAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgPG1h
dGhpYXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlq
biA8am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgS3JpcyBL
b3dhbCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBBcnBh
ZCBCb3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAy
MDExIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorCisgIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUg
TElBQkxFIEZPUiBBTlkKKyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisvKmpzbGludCBiaXR3aXNlOnRydWUgcGx1c3BsdXM6
dHJ1ZSAqLworLypnbG9iYWwgZXNwcmltYTp0cnVlLCBkZWZpbmU6dHJ1ZSwgZXhwb3J0czp0cnVl
LCB3aW5kb3c6IHRydWUsCit0aHJvd0Vycm9yVG9sZXJhbnQ6IHRydWUsCit0aHJvd0Vycm9yOiB0
cnVlLCBnZW5lcmF0ZVN0YXRlbWVudDogdHJ1ZSwgcGVlazogdHJ1ZSwKK3BhcnNlQXNzaWdubWVu
dEV4cHJlc3Npb246IHRydWUsIHBhcnNlQmxvY2s6IHRydWUsIHBhcnNlRXhwcmVzc2lvbjogdHJ1
ZSwKK3BhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbjogdHJ1ZSwgcGFyc2VGdW5jdGlvbkV4cHJlc3Np
b246IHRydWUsCitwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHM6IHRydWUsIHBhcnNlVmFyaWFi
bGVJZGVudGlmaWVyOiB0cnVlLAorcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uOiB0cnVlLAor
cGFyc2VVbmFyeUV4cHJlc3Npb246IHRydWUsCitwYXJzZVN0YXRlbWVudDogdHJ1ZSwgcGFyc2VT
b3VyY2VFbGVtZW50OiB0cnVlICovCisKKyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkgeworICAg
ICd1c2Ugc3RyaWN0JzsKKworICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1E
KSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywKKyAgICAvLyBSaGlubywgYW5kIHBs
YWluIGJyb3dzZXIgbG9hZGluZy4KKworICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisg
ICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeworICAg
ICAgICBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpOworICAgIH0gZWxzZSBpZiAodHlwZW9m
IGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIGZhY3RvcnkoZXhwb3J0cyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZmFjdG9yeSgocm9vdC5lc3ByaW1hID0ge30pKTsKKyAgICB9
Cit9KHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAg
dmFyIFRva2VuLAorICAgICAgICBUb2tlbk5hbWUsCisgICAgICAgIEZuRXhwclRva2VucywKKyAg
ICAgICAgU3ludGF4LAorICAgICAgICBQcm9wZXJ0eUtpbmQsCisgICAgICAgIE1lc3NhZ2VzLAor
ICAgICAgICBSZWdleCwKKyAgICAgICAgU3ludGF4VHJlZURlbGVnYXRlLAorICAgICAgICBzb3Vy
Y2UsCisgICAgICAgIHN0cmljdCwKKyAgICAgICAgaW5kZXgsCisgICAgICAgIGxpbmVOdW1iZXIs
CisgICAgICAgIGxpbmVTdGFydCwKKyAgICAgICAgbGVuZ3RoLAorICAgICAgICBkZWxlZ2F0ZSwK
KyAgICAgICAgbG9va2FoZWFkLAorICAgICAgICBzdGF0ZSwKKyAgICAgICAgZXh0cmE7CisKKyAg
ICBUb2tlbiA9IHsKKyAgICAgICAgQm9vbGVhbkxpdGVyYWw6IDEsCisgICAgICAgIEVPRjogMiwK
KyAgICAgICAgSWRlbnRpZmllcjogMywKKyAgICAgICAgS2V5d29yZDogNCwKKyAgICAgICAgTnVs
bExpdGVyYWw6IDUsCisgICAgICAgIE51bWVyaWNMaXRlcmFsOiA2LAorICAgICAgICBQdW5jdHVh
dG9yOiA3LAorICAgICAgICBTdHJpbmdMaXRlcmFsOiA4LAorICAgICAgICBSZWd1bGFyRXhwcmVz
c2lvbjogOQorICAgIH07CisKKyAgICBUb2tlbk5hbWUgPSB7fTsKKyAgICBUb2tlbk5hbWVbVG9r
ZW4uQm9vbGVhbkxpdGVyYWxdID0gJ0Jvb2xlYW4nOworICAgIFRva2VuTmFtZVtUb2tlbi5FT0Zd
ID0gJzxlbmQ+JzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uSWRlbnRpZmllcl0gPSAnSWRlbnRpZmll
cic7CisgICAgVG9rZW5OYW1lW1Rva2VuLktleXdvcmRdID0gJ0tleXdvcmQnOworICAgIFRva2Vu
TmFtZVtUb2tlbi5OdWxsTGl0ZXJhbF0gPSAnTnVsbCc7CisgICAgVG9rZW5OYW1lW1Rva2VuLk51
bWVyaWNMaXRlcmFsXSA9ICdOdW1lcmljJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uUHVuY3R1YXRv
cl0gPSAnUHVuY3R1YXRvcic7CisgICAgVG9rZW5OYW1lW1Rva2VuLlN0cmluZ0xpdGVyYWxdID0g
J1N0cmluZyc7CisgICAgVG9rZW5OYW1lW1Rva2VuLlJlZ3VsYXJFeHByZXNzaW9uXSA9ICdSZWd1
bGFyRXhwcmVzc2lvbic7CisKKyAgICAvLyBBIGZ1bmN0aW9uIGZvbGxvd2luZyBvbmUgb2YgdGhv
c2UgdG9rZW5zIGlzIGFuIGV4cHJlc3Npb24uCisgICAgRm5FeHByVG9rZW5zID0gWycoJywgJ3sn
LCAnWycsICdpbicsICd0eXBlb2YnLCAnaW5zdGFuY2VvZicsICduZXcnLAorICAgICAgICAgICAg
ICAgICAgICAncmV0dXJuJywgJ2Nhc2UnLCAnZGVsZXRlJywgJ3Rocm93JywgJ3ZvaWQnLAorICAg
ICAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IG9wZXJhdG9ycworICAgICAgICAgICAgICAg
ICAgICAnPScsICcrPScsICctPScsICcqPScsICcvPScsICclPScsICc8PD0nLCAnPj49JywgJz4+
Pj0nLAorICAgICAgICAgICAgICAgICAgICAnJj0nLCAnfD0nLCAnXj0nLCAnLCcsCisgICAgICAg
ICAgICAgICAgICAgIC8vIGJpbmFyeS91bmFyeSBvcGVyYXRvcnMKKyAgICAgICAgICAgICAgICAg
ICAgJysnLCAnLScsICcqJywgJy8nLCAnJScsICcrKycsICctLScsICc8PCcsICc+PicsICc+Pj4n
LCAnJicsCisgICAgICAgICAgICAgICAgICAgICd8JywgJ14nLCAnIScsICd+JywgJyYmJywgJ3x8
JywgJz8nLCAnOicsICc9PT0nLCAnPT0nLCAnPj0nLAorICAgICAgICAgICAgICAgICAgICAnPD0n
LCAnPCcsICc+JywgJyE9JywgJyE9PSddOworCisgICAgU3ludGF4ID0geworICAgICAgICBBc3Np
Z25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJywKKyAgICAgICAgQXJyYXlF
eHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywKKyAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6ICdC
bG9ja1N0YXRlbWVudCcsCisgICAgICAgIEJpbmFyeUV4cHJlc3Npb246ICdCaW5hcnlFeHByZXNz
aW9uJywKKyAgICAgICAgQnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsCisgICAgICAg
IENhbGxFeHByZXNzaW9uOiAnQ2FsbEV4cHJlc3Npb24nLAorICAgICAgICBDYXRjaENsYXVzZTog
J0NhdGNoQ2xhdXNlJywKKyAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAnQ29uZGl0aW9u
YWxFeHByZXNzaW9uJywKKyAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0YXRl
bWVudCcsCisgICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JywKKyAg
ICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICdEZWJ1Z2dlclN0YXRlbWVudCcsCisgICAgICAgIEVt
cHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLAorICAgICAgICBFeHByZXNzaW9uU3RhdGVt
ZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgICAgIEZvclN0YXRlbWVudDogJ0ZvclN0
YXRlbWVudCcsCisgICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0ZW1lbnQnLAorICAg
ICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbicsCisgICAgICAg
IEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAgIElkZW50
aWZpZXI6ICdJZGVudGlmaWVyJywKKyAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVudCcs
CisgICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJywKKyAgICAgICAgTGFiZWxlZFN0YXRlbWVudDog
J0xhYmVsZWRTdGF0ZW1lbnQnLAorICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2ljYWxF
eHByZXNzaW9uJywKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24n
LAorICAgICAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsCisgICAgICAgIE9iamVj
dEV4cHJlc3Npb246ICdPYmplY3RFeHByZXNzaW9uJywKKyAgICAgICAgUHJvZ3JhbTogJ1Byb2dy
YW0nLAorICAgICAgICBQcm9wZXJ0eTogJ1Byb3BlcnR5JywKKyAgICAgICAgUmV0dXJuU3RhdGVt
ZW50OiAnUmV0dXJuU3RhdGVtZW50JywKKyAgICAgICAgU2VxdWVuY2VFeHByZXNzaW9uOiAnU2Vx
dWVuY2VFeHByZXNzaW9uJywKKyAgICAgICAgU3dpdGNoU3RhdGVtZW50OiAnU3dpdGNoU3RhdGVt
ZW50JywKKyAgICAgICAgU3dpdGNoQ2FzZTogJ1N3aXRjaENhc2UnLAorICAgICAgICBUaGlzRXhw
cmVzc2lvbjogJ1RoaXNFeHByZXNzaW9uJywKKyAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6ICdUaHJv
d1N0YXRlbWVudCcsCisgICAgICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsCisgICAg
ICAgIFVuYXJ5RXhwcmVzc2lvbjogJ1VuYXJ5RXhwcmVzc2lvbicsCisgICAgICAgIFVwZGF0ZUV4
cHJlc3Npb246ICdVcGRhdGVFeHByZXNzaW9uJywKKyAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlv
bjogJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6ICdW
YXJpYWJsZURlY2xhcmF0b3InLAorICAgICAgICBXaGlsZVN0YXRlbWVudDogJ1doaWxlU3RhdGVt
ZW50JywKKyAgICAgICAgV2l0aFN0YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnCisgICAgfTsKKwor
ICAgIFByb3BlcnR5S2luZCA9IHsKKyAgICAgICAgRGF0YTogMSwKKyAgICAgICAgR2V0OiAyLAor
ICAgICAgICBTZXQ6IDQKKyAgICB9OworCisgICAgLy8gRXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJl
IGlkZW50aWNhbCB0byBWOC4KKyAgICBNZXNzYWdlcyA9IHsKKyAgICAgICAgVW5leHBlY3RlZFRv
a2VuOiAgJ1VuZXhwZWN0ZWQgdG9rZW4gJTAnLAorICAgICAgICBVbmV4cGVjdGVkTnVtYmVyOiAg
J1VuZXhwZWN0ZWQgbnVtYmVyJywKKyAgICAgICAgVW5leHBlY3RlZFN0cmluZzogICdVbmV4cGVj
dGVkIHN0cmluZycsCisgICAgICAgIFVuZXhwZWN0ZWRJZGVudGlmaWVyOiAgJ1VuZXhwZWN0ZWQg
aWRlbnRpZmllcicsCisgICAgICAgIFVuZXhwZWN0ZWRSZXNlcnZlZDogICdVbmV4cGVjdGVkIHJl
c2VydmVkIHdvcmQnLAorICAgICAgICBVbmV4cGVjdGVkRU9TOiAgJ1VuZXhwZWN0ZWQgZW5kIG9m
IGlucHV0JywKKyAgICAgICAgTmV3bGluZUFmdGVyVGhyb3c6ICAnSWxsZWdhbCBuZXdsaW5lIGFm
dGVyIHRocm93JywKKyAgICAgICAgSW52YWxpZFJlZ0V4cDogJ0ludmFsaWQgcmVndWxhciBleHBy
ZXNzaW9uJywKKyAgICAgICAgVW50ZXJtaW5hdGVkUmVnRXhwOiAgJ0ludmFsaWQgcmVndWxhciBl
eHByZXNzaW9uOiBtaXNzaW5nIC8nLAorICAgICAgICBJbnZhbGlkTEhTSW5Bc3NpZ25tZW50OiAg
J0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gYXNzaWdubWVudCcsCisgICAgICAgIEludmFsaWRM
SFNJbkZvckluOiAgJ0ludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWluJywKKyAgICAgICAg
TXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoOiAnTW9yZSB0aGFuIG9uZSBkZWZhdWx0IGNsYXVzZSBp
biBzd2l0Y2ggc3RhdGVtZW50JywKKyAgICAgICAgTm9DYXRjaE9yRmluYWxseTogICdNaXNzaW5n
IGNhdGNoIG9yIGZpbmFsbHkgYWZ0ZXIgdHJ5JywKKyAgICAgICAgVW5rbm93bkxhYmVsOiAnVW5k
ZWZpbmVkIGxhYmVsIFwnJTBcJycsCisgICAgICAgIFJlZGVjbGFyYXRpb246ICclMCBcJyUxXCcg
aGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZCcsCisgICAgICAgIElsbGVnYWxDb250aW51ZTogJ0ls
bGVnYWwgY29udGludWUgc3RhdGVtZW50JywKKyAgICAgICAgSWxsZWdhbEJyZWFrOiAnSWxsZWdh
bCBicmVhayBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2FsUmV0dXJuOiAnSWxsZWdhbCByZXR1
cm4gc3RhdGVtZW50JywKKyAgICAgICAgU3RyaWN0TW9kZVdpdGg6ICAnU3RyaWN0IG1vZGUgY29k
ZSBtYXkgbm90IGluY2x1ZGUgYSB3aXRoIHN0YXRlbWVudCcsCisgICAgICAgIFN0cmljdENhdGNo
VmFyaWFibGU6ICAnQ2F0Y2ggdmFyaWFibGUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50cyBp
biBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdFZhck5hbWU6ICAnVmFyaWFibGUgbmFtZSBt
YXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3Ry
aWN0UGFyYW1OYW1lOiAgJ1BhcmFtZXRlciBuYW1lIGV2YWwgb3IgYXJndW1lbnRzIGlzIG5vdCBh
bGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0UGFyYW1EdXBlOiAnU3RyaWN0
IG1vZGUgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGR1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZXMnLAor
ICAgICAgICBTdHJpY3RGdW5jdGlvbk5hbWU6ICAnRnVuY3Rpb24gbmFtZSBtYXkgbm90IGJlIGV2
YWwgb3IgYXJndW1lbnRzIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0T2N0YWxMaXRl
cmFsOiAgJ09jdGFsIGxpdGVyYWxzIGFyZSBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZS4nLAor
ICAgICAgICBTdHJpY3REZWxldGU6ICAnRGVsZXRlIG9mIGFuIHVucXVhbGlmaWVkIGlkZW50aWZp
ZXIgaW4gc3RyaWN0IG1vZGUuJywKKyAgICAgICAgU3RyaWN0RHVwbGljYXRlUHJvcGVydHk6ICAn
RHVwbGljYXRlIGRhdGEgcHJvcGVydHkgaW4gb2JqZWN0IGxpdGVyYWwgbm90IGFsbG93ZWQgaW4g
c3RyaWN0IG1vZGUnLAorICAgICAgICBBY2Nlc3NvckRhdGFQcm9wZXJ0eTogICdPYmplY3QgbGl0
ZXJhbCBtYXkgbm90IGhhdmUgZGF0YSBhbmQgYWNjZXNzb3IgcHJvcGVydHkgd2l0aCB0aGUgc2Ft
ZSBuYW1lJywKKyAgICAgICAgQWNjZXNzb3JHZXRTZXQ6ICAnT2JqZWN0IGxpdGVyYWwgbWF5IG5v
dCBoYXZlIG11bHRpcGxlIGdldC9zZXQgYWNjZXNzb3JzIHdpdGggdGhlIHNhbWUgbmFtZScsCisg
ICAgICAgIFN0cmljdExIU0Fzc2lnbm1lbnQ6ICAnQXNzaWdubWVudCB0byBldmFsIG9yIGFyZ3Vt
ZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdExIU1Bv
c3RmaXg6ICAnUG9zdGZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9y
IGFyZ3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0TEhTUHJl
Zml4OiAgJ1ByZWZpeCBpbmNyZW1lbnQvZGVjcmVtZW50IG1heSBub3QgaGF2ZSBldmFsIG9yIGFy
Z3VtZW50cyBvcGVyYW5kIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0UmVzZXJ2ZWRX
b3JkOiAgJ1VzZSBvZiBmdXR1cmUgcmVzZXJ2ZWQgd29yZCBpbiBzdHJpY3QgbW9kZScKKyAgICB9
OworCisgICAgLy8gU2VlIGFsc28gdG9vbHMvZ2VuZXJhdGUtdW5pY29kZS1yZWdleC5weS4KKyAg
ICBSZWdleCA9IHsKKyAgICAgICAgTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQ6IG5ldyBSZWdFeHAo
J1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFc
dTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1c
dTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVc
dTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3
XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcx
LVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRVx1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZc
dTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFcdTA3RjRc
dTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1
MDhBMFx1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1
MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1c
dTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1
MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUw
QTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBB
MzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUw
QTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUw
QUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBC
MjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q1x1MEI1
RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5
Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgt
XHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEy
LVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXHUwQzU4XHUwQzU5XHUwQzYw
XHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENC
M1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUt
XHUwRDBDXHUwRDBFLVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFc
dTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUwREJE
XHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgx
XHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1c
dTBFOUZcdTBFQTEtXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1
MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFREMtXHUwRURGXHUwRjAwXHUw
RjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQVx1MTAzRlx1
MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1
MTA3NS1cdTEwODFcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1
MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURc
dTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4
LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMx
Mi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUx
NjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGMFx1
MTcwMC1cdTE3MENcdTE3MEUtXHUxNzExXHUxNzIwLVx1MTczMVx1MTc0MC1cdTE3NTFcdTE3NjAt
XHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc4MC1cdTE3QjNcdTE3RDdcdTE3RENcdTE4MjAtXHUxODc3
XHUxODgwLVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFDXHUxOTUwLVx1MTk2
RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUMxLVx1MTlDN1x1MUEwMC1cdTFBMTZcdTFB
MjAtXHUxQTU0XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNEJcdTFCODMtXHUxQkEwXHUx
QkFFXHUxQkFGXHUxQkJBLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNEQtXHUxQzRGXHUxQzVBLVx1
MUM3RFx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YxXHUxQ0Y1XHUxQ0Y2XHUxRDAwLVx1MURCRlx1
MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAt
XHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYt
XHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2
LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MVx1MjA3
Rlx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjEx
RFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEz
Rlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4XHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJD
NUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1MkQwMC1cdTJEMjVcdTJE
MjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZcdTJE
QTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1
MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1c
dTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlG
XHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFB
MC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVB
NDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXHVB
NjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkVGXHVBNzE3LVx1QTcxRlx1QTcyMi1c
dUE3ODhcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAx
XHVBODAzLVx1QTgwNVx1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4
Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5
NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVB
QTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XHVB
QUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVB
QUYyLVx1QUFGNFx1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1c
dUFCMjZcdUFCMjgtXHVBQjJFXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2
XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIx
My1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZC
M0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1
MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVG
RUZDXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1
RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10nKSwKKyAgICAgICAgTm9uQXNj
aWlJZGVudGlmaWVyUGFydDogbmV3IFJlZ0V4cCgnW1x4QUFceEI1XHhCQVx4QzAtXHhENlx4RDgt
XHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAz
MDAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAz
OENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0ODMtXHUwNDg3XHUw
NDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNTkxLVx1MDVCRFx1
MDVCRlx1MDVDMVx1MDVDMlx1MDVDNFx1MDVDNVx1MDVDN1x1MDVEMC1cdTA1RUFcdTA1RjAtXHUw
NUYyXHUwNjEwLVx1MDYxQVx1MDYyMC1cdTA2NjlcdTA2NkUtXHUwNkQzXHUwNkQ1LVx1MDZEQ1x1
MDZERi1cdTA2RThcdTA2RUEtXHUwNkZDXHUwNkZGXHUwNzEwLVx1MDc0QVx1MDc0RC1cdTA3QjFc
dTA3QzAtXHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgyRFx1MDg0MC1cdTA4NUJcdTA4QTBcdTA4QTIt
XHUwOEFDXHUwOEU0LVx1MDhGRVx1MDkwMC1cdTA5NjNcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk3
N1x1MDk3OS1cdTA5N0ZcdTA5ODEtXHUwOTgzXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5
My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCQy1cdTA5QzRcdTA5
QzdcdTA5QzhcdTA5Q0ItXHUwOUNFXHUwOUQ3XHUwOURDXHUwOUREXHUwOURGLVx1MDlFM1x1MDlF
Ni1cdTA5RjFcdTBBMDEtXHUwQTAzXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBB
MjhcdTBBMkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTND
XHUwQTNFLVx1MEE0Mlx1MEE0N1x1MEE0OFx1MEE0Qi1cdTBBNERcdTBBNTFcdTBBNTktXHUwQTVD
XHUwQTVFXHUwQTY2LVx1MEE3NVx1MEE4MS1cdTBBODNcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5
MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFC
Qy1cdTBBQzVcdTBBQzctXHUwQUM5XHUwQUNCLVx1MEFDRFx1MEFEMFx1MEFFMC1cdTBBRTNcdTBB
RTYtXHUwQUVGXHUwQjAxLVx1MEIwM1x1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUw
QjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0MtXHUwQjQ0XHUw
QjQ3XHUwQjQ4XHUwQjRCLVx1MEI0RFx1MEI1Nlx1MEI1N1x1MEI1Q1x1MEI1RFx1MEI1Ri1cdTBC
NjNcdTBCNjYtXHUwQjZGXHUwQjcxXHUwQjgyXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBC
OTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0
XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCQkUtXHUwQkMyXHUwQkM2LVx1MEJDOFx1MEJD
QS1cdTBCQ0RcdTBCRDBcdTBCRDdcdTBCRTYtXHUwQkVGXHUwQzAxLVx1MEMwM1x1MEMwNS1cdTBD
MENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUw
QzNELVx1MEM0NFx1MEM0Ni1cdTBDNDhcdTBDNEEtXHUwQzREXHUwQzU1XHUwQzU2XHUwQzU4XHUw
QzU5XHUwQzYwLVx1MEM2M1x1MEM2Ni1cdTBDNkZcdTBDODJcdTBDODNcdTBDODUtXHUwQzhDXHUw
QzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUwQ0I1LVx1MENCOVx1MENCQy1c
dTBDQzRcdTBDQzYtXHUwQ0M4XHUwQ0NBLVx1MENDRFx1MENENVx1MENENlx1MENERVx1MENFMC1c
dTBDRTNcdTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDAyXHUwRDAzXHUwRDA1LVx1MEQwQ1x1
MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNELVx1MEQ0NFx1MEQ0Ni1cdTBENDhcdTBENEEt
XHUwRDRFXHUwRDU3XHUwRDYwLVx1MEQ2M1x1MEQ2Ni1cdTBENkZcdTBEN0EtXHUwRDdGXHUwRDgy
XHUwRDgzXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFcdTBEQjMtXHUwREJCXHUwREJEXHUwREMw
LVx1MERDNlx1MERDQVx1MERDRi1cdTBERDRcdTBERDZcdTBERDgtXHUwRERGXHUwREYyXHUwREYz
XHUwRTAxLVx1MEUzQVx1MEU0MC1cdTBFNEVcdTBFNTAtXHUwRTU5XHUwRTgxXHUwRTgyXHUwRTg0
XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEt
XHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCOVx1MEVCQi1cdTBFQkRc
dTBFQzAtXHUwRUM0XHUwRUM2XHUwRUM4LVx1MEVDRFx1MEVEMC1cdTBFRDlcdTBFREMtXHUwRURG
XHUwRjAwXHUwRjE4XHUwRjE5XHUwRjIwLVx1MEYyOVx1MEYzNVx1MEYzN1x1MEYzOVx1MEYzRS1c
dTBGNDdcdTBGNDktXHUwRjZDXHUwRjcxLVx1MEY4NFx1MEY4Ni1cdTBGOTdcdTBGOTktXHUwRkJD
XHUwRkM2XHUxMDAwLVx1MTA0OVx1MTA1MC1cdTEwOURcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENE
XHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1
OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEy
QjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUx
MkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzVELVx1MTM1Rlx1MTM4MC1c
dTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2N0ZcdTE2ODEtXHUxNjlB
XHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjBcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxNFx1MTcy
MC1cdTE3MzRcdTE3NDAtXHUxNzUzXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3NzJcdTE3
NzNcdTE3ODAtXHUxN0QzXHUxN0Q3XHUxN0RDXHUxN0REXHUxN0UwLVx1MTdFOVx1MTgwQi1cdTE4
MERcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QUFcdTE4QjAtXHUxOEY1XHUx
OTAwLVx1MTkxQ1x1MTkyMC1cdTE5MkJcdTE5MzAtXHUxOTNCXHUxOTQ2LVx1MTk2RFx1MTk3MC1c
dTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1MTlEMC1cdTE5RDlcdTFBMDAtXHUxQTFC
XHUxQTIwLVx1MUE1RVx1MUE2MC1cdTFBN0NcdTFBN0YtXHUxQTg5XHUxQTkwLVx1MUE5OVx1MUFB
N1x1MUIwMC1cdTFCNEJcdTFCNTAtXHUxQjU5XHUxQjZCLVx1MUI3M1x1MUI4MC1cdTFCRjNcdTFD
MDAtXHUxQzM3XHUxQzQwLVx1MUM0OVx1MUM0RC1cdTFDN0RcdTFDRDAtXHUxQ0QyXHUxQ0Q0LVx1
MUNGNlx1MUQwMC1cdTFERTZcdTFERkMtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVc
dTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0Rc
dTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkND
XHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZG
Ni1cdTFGRkNcdTIwMENcdTIwMERcdTIwM0ZcdTIwNDBcdTIwNTRcdTIwNzFcdTIwN0ZcdTIwOTAt
XHUyMDlDXHUyMEQwLVx1MjBEQ1x1MjBFMVx1MjBFNS1cdTIwRjBcdTIxMDJcdTIxMDdcdTIxMEEt
XHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRc
dTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVcdTIxNjAtXHUyMTg4
XHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNGM1x1MkQw
MC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDdGLVx1MkQ5Nlx1MkRB
MC1cdTJEQTZcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUy
REM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyREUwLVx1MkRGRlx1
MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDJGXHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0Nc
dTMwNDEtXHUzMDk2XHUzMDk5XHUzMDlBXHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMt
XHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFG
Rlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1
MDAtXHVBNjBDXHVBNjEwLVx1QTYyQlx1QTY0MC1cdUE2NkZcdUE2NzQtXHVBNjdEXHVBNjdGLVx1
QTY5N1x1QTY5Ri1cdUE2RjFcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3OEVc
dUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MjdcdUE4NDAtXHVBODczXHVBODgw
LVx1QThDNFx1QThEMC1cdUE4RDlcdUE4RTAtXHVBOEY3XHVBOEZCXHVBOTAwLVx1QTkyRFx1QTkz
MC1cdUE5NTNcdUE5NjAtXHVBOTdDXHVBOTgwLVx1QTlDMFx1QTlDRi1cdUE5RDlcdUFBMDAtXHVB
QTM2XHVBQTQwLVx1QUE0RFx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdCXHVB
QTgwLVx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVGXHVBQUYyLVx1QUFGNlx1QUIwMS1c
dUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJF
XHVBQkMwLVx1QUJFQVx1QUJFQ1x1QUJFRFx1QUJGMC1cdUFCRjlcdUFDMDAtXHVEN0EzXHVEN0Iw
LVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZC
MDZcdUZCMTMtXHVGQjE3XHVGQjFELVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVG
QjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZE
NTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFMDAtXHVGRTBGXHVGRTIwLVx1
RkUyNlx1RkUzM1x1RkUzNFx1RkU0RC1cdUZFNEZcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1
RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjNGXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVc
dUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXScpCisg
ICAgfTsKKworICAgIC8vIEVuc3VyZSB0aGUgY29uZGl0aW9uIGlzIHRydWUsIG90aGVyd2lzZSB0
aHJvdyBhbiBlcnJvci4KKyAgICAvLyBUaGlzIGlzIG9ubHkgdG8gaGF2ZSBhIGJldHRlciBjb250
cmFjdCBzZW1hbnRpYywgaS5lLiBhbm90aGVyIHNhZmV0eSBuZXQKKyAgICAvLyB0byBjYXRjaCBh
IGxvZ2ljIGVycm9yLiBUaGUgY29uZGl0aW9uIHNoYWxsIGJlIGZ1bGZpbGxlZCBpbiBub3JtYWwg
Y2FzZS4KKyAgICAvLyBEbyBOT1QgdXNlIHRoaXMgdG8gZW5mb3JjZSBhIGNlcnRhaW4gY29uZGl0
aW9uIG9uIGFueSB1c2VyIGlucHV0LgorCisgICAgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwg
bWVzc2FnZSkgeworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8KKyAgICAgICAgaWYg
KCFjb25kaXRpb24pIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQVNTRVJUOiAnICsg
bWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdp
dChjaCkgeworICAgICAgICByZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgICAvLyAwLi45
CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkgeworICAgICAgICByZXR1cm4g
JzAxMjM0NTY3ODlhYmNkZWZBQkNERUYnLmluZGV4T2YoY2gpID49IDA7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gaXNPY3RhbERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAnMDEyMzQ1NjcnLmlu
ZGV4T2YoY2gpID49IDA7CisgICAgfQorCisKKyAgICAvLyA3LjIgV2hpdGUgU3BhY2UKKworICAg
IGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAweDIw
KSB8fCAoY2ggPT09IDB4MDkpIHx8IChjaCA9PT0gMHgwQikgfHwgKGNoID09PSAweDBDKSB8fCAo
Y2ggPT09IDB4QTApIHx8CisgICAgICAgICAgICAoY2ggPj0gMHgxNjgwICYmIFsweDE2ODAsIDB4
MTgwRSwgMHgyMDAwLCAweDIwMDEsIDB4MjAwMiwgMHgyMDAzLCAweDIwMDQsIDB4MjAwNSwgMHgy
MDA2LCAweDIwMDcsIDB4MjAwOCwgMHgyMDA5LCAweDIwMEEsIDB4MjAyRiwgMHgyMDVGLCAweDMw
MDAsIDB4RkVGRl0uaW5kZXhPZihjaCkgPj0gMCk7CisgICAgfQorCisgICAgLy8gNy4zIExpbmUg
VGVybWluYXRvcnMKKworICAgIGZ1bmN0aW9uIGlzTGluZVRlcm1pbmF0b3IoY2gpIHsKKyAgICAg
ICAgcmV0dXJuIChjaCA9PT0gMHgwQSkgfHwgKGNoID09PSAweDBEKSB8fCAoY2ggPT09IDB4MjAy
OCkgfHwgKGNoID09PSAweDIwMjkpOworICAgIH0KKworICAgIC8vIDcuNiBJZGVudGlmaWVyIE5h
bWVzIGFuZCBJZGVudGlmaWVycworCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY2gp
IHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVGKSB8fCAgLy8g
JCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkKKyAgICAgICAgICAgIChjaCA+PSAweDQxICYm
IGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWgorICAgICAgICAgICAgKGNoID49IDB4NjEg
JiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56CisgICAgICAgICAgICAoY2ggPT09IDB4
NUMpIHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFwgKGJhY2tzbGFzaCkKKyAgICAgICAgICAg
ICgoY2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyU3RhcnQudGVzdChTdHJp
bmcuZnJvbUNoYXJDb2RlKGNoKSkpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmll
clBhcnQoY2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyNCkgfHwgKGNoID09PSAweDVG
KSB8fCAgLy8gJCAoZG9sbGFyKSBhbmQgXyAodW5kZXJzY29yZSkKKyAgICAgICAgICAgIChjaCA+
PSAweDQxICYmIGNoIDw9IDB4NUEpIHx8ICAgICAgICAgLy8gQS4uWgorICAgICAgICAgICAgKGNo
ID49IDB4NjEgJiYgY2ggPD0gMHg3QSkgfHwgICAgICAgICAvLyBhLi56CisgICAgICAgICAgICAo
Y2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB8fCAgICAgICAgIC8vIDAuLjkKKyAgICAgICAgICAg
IChjaCA9PT0gMHg1QykgfHwgICAgICAgICAgICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNoKQor
ICAgICAgICAgICAgKChjaCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJQYXJ0
LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsKKyAgICB9CisKKyAgICAvLyA3LjYuMS4y
IEZ1dHVyZSBSZXNlcnZlZCBXb3JkcworCisgICAgZnVuY3Rpb24gaXNGdXR1cmVSZXNlcnZlZFdv
cmQoaWQpIHsKKyAgICAgICAgc3dpdGNoIChpZCkgeworICAgICAgICBjYXNlICdjbGFzcyc6Cisg
ICAgICAgIGNhc2UgJ2VudW0nOgorICAgICAgICBjYXNlICdleHBvcnQnOgorICAgICAgICBjYXNl
ICdleHRlbmRzJzoKKyAgICAgICAgY2FzZSAnaW1wb3J0JzoKKyAgICAgICAgY2FzZSAnc3VwZXIn
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1N0cmlj
dE1vZGVSZXNlcnZlZFdvcmQoaWQpIHsKKyAgICAgICAgc3dpdGNoIChpZCkgeworICAgICAgICBj
YXNlICdpbXBsZW1lbnRzJzoKKyAgICAgICAgY2FzZSAnaW50ZXJmYWNlJzoKKyAgICAgICAgY2Fz
ZSAncGFja2FnZSc6CisgICAgICAgIGNhc2UgJ3ByaXZhdGUnOgorICAgICAgICBjYXNlICdwcm90
ZWN0ZWQnOgorICAgICAgICBjYXNlICdwdWJsaWMnOgorICAgICAgICBjYXNlICdzdGF0aWMnOgor
ICAgICAgICBjYXNlICd5aWVsZCc6CisgICAgICAgIGNhc2UgJ2xldCc6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzUmVzdHJpY3RlZFdvcmQoaWQpIHsK
KyAgICAgICAgcmV0dXJuIGlkID09PSAnZXZhbCcgfHwgaWQgPT09ICdhcmd1bWVudHMnOworICAg
IH0KKworICAgIC8vIDcuNi4xLjEgS2V5d29yZHMKKworICAgIGZ1bmN0aW9uIGlzS2V5d29yZChp
ZCkgeworICAgICAgICBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZChpZCkp
IHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gJ2Nv
bnN0JyBpcyBzcGVjaWFsaXplZCBhcyBLZXl3b3JkIGluIFY4LgorICAgICAgICAvLyAneWllbGQn
IGFuZCAnbGV0JyBhcmUgZm9yIGNvbXBhdGlibGl0eSB3aXRoIFNwaWRlck1vbmtleSBhbmQgRVMu
bmV4dC4KKyAgICAgICAgLy8gU29tZSBvdGhlcnMgYXJlIGZyb20gZnV0dXJlIHJlc2VydmVkIHdv
cmRzLgorCisgICAgICAgIHN3aXRjaCAoaWQubGVuZ3RoKSB7CisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpZicpIHx8IChpZCA9PT0gJ2luJykgfHwgKGlkID09
PSAnZG8nKTsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ3Zh
cicpIHx8IChpZCA9PT0gJ2ZvcicpIHx8IChpZCA9PT0gJ25ldycpIHx8CisgICAgICAgICAgICAg
ICAgKGlkID09PSAndHJ5JykgfHwgKGlkID09PSAnbGV0Jyk7CisgICAgICAgIGNhc2UgNDoKKyAg
ICAgICAgICAgIHJldHVybiAoaWQgPT09ICd0aGlzJykgfHwgKGlkID09PSAnZWxzZScpIHx8IChp
ZCA9PT0gJ2Nhc2UnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3ZvaWQnKSB8fCAoaWQg
PT09ICd3aXRoJykgfHwgKGlkID09PSAnZW51bScpOworICAgICAgICBjYXNlIDU6CisgICAgICAg
ICAgICByZXR1cm4gKGlkID09PSAnd2hpbGUnKSB8fCAoaWQgPT09ICdicmVhaycpIHx8IChpZCA9
PT0gJ2NhdGNoJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICd0aHJvdycpIHx8IChpZCA9
PT0gJ2NvbnN0JykgfHwgKGlkID09PSAneWllbGQnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9
PT0gJ2NsYXNzJykgfHwgKGlkID09PSAnc3VwZXInKTsKKyAgICAgICAgY2FzZSA2OgorICAgICAg
ICAgICAgcmV0dXJuIChpZCA9PT0gJ3JldHVybicpIHx8IChpZCA9PT0gJ3R5cGVvZicpIHx8IChp
ZCA9PT0gJ2RlbGV0ZScpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAnc3dpdGNoJykgfHwg
KGlkID09PSAnZXhwb3J0JykgfHwgKGlkID09PSAnaW1wb3J0Jyk7CisgICAgICAgIGNhc2UgNzoK
KyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdkZWZhdWx0JykgfHwgKGlkID09PSAnZmluYWxs
eScpIHx8IChpZCA9PT0gJ2V4dGVuZHMnKTsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAg
cmV0dXJuIChpZCA9PT0gJ2Z1bmN0aW9uJykgfHwgKGlkID09PSAnY29udGludWUnKSB8fCAoaWQg
PT09ICdkZWJ1Z2dlcicpOworICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgcmV0dXJuIChp
ZCA9PT0gJ2luc3RhbmNlb2YnKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDcuNCBDb21tZW50cworCisgICAg
ZnVuY3Rpb24gYWRkQ29tbWVudCh0eXBlLCB2YWx1ZSwgc3RhcnQsIGVuZCwgbG9jKSB7CisgICAg
ICAgIHZhciBjb21tZW50LCBhdHRhY2hlcjsKKworICAgICAgICBhc3NlcnQodHlwZW9mIHN0YXJ0
ID09PSAnbnVtYmVyJywgJ0NvbW1lbnQgbXVzdCBoYXZlIHZhbGlkIHBvc2l0aW9uJyk7CisKKyAg
ICAgICAgLy8gQmVjYXVzZSB0aGUgd2F5IHRoZSBhY3R1YWwgdG9rZW4gaXMgc2Nhbm5lZCwgb2Z0
ZW4gdGhlIGNvbW1lbnRzCisgICAgICAgIC8vIChpZiBhbnkpIGFyZSBza2lwcGVkIHR3aWNlIGR1
cmluZyB0aGUgbGV4aWNhbCBhbmFseXNpcy4KKyAgICAgICAgLy8gVGh1cywgd2UgbmVlZCB0byBz
a2lwIGFkZGluZyBhIGNvbW1lbnQgaWYgdGhlIGNvbW1lbnQgYXJyYXkgYWxyZWFkeQorICAgICAg
ICAvLyBoYW5kbGVkIGl0LgorICAgICAgICBpZiAoc3RhdGUubGFzdENvbW1lbnRTdGFydCA+PSBz
dGFydCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN0YXRlLmxh
c3RDb21tZW50U3RhcnQgPSBzdGFydDsKKworICAgICAgICBjb21tZW50ID0geworICAgICAgICAg
ICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQorICAgICAgICB9OworICAg
ICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKKyAgICAgICAgICAgIGNvbW1lbnQucmFuZ2UgPSBbc3Rh
cnQsIGVuZF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV4dHJhLmxvYykgeworICAgICAgICAg
ICAgY29tbWVudC5sb2MgPSBsb2M7CisgICAgICAgIH0KKyAgICAgICAgZXh0cmEuY29tbWVudHMu
cHVzaChjb21tZW50KTsKKyAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHsKKyAgICAg
ICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpOworICAgICAgICAgICAg
ZXh0cmEudHJhaWxpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpOworICAgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gc2tpcFNpbmdsZUxpbmVDb21tZW50KG9mZnNldCkgeworICAgICAgICB2
YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleCAtIG9m
ZnNldDsKKyAgICAgICAgbG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAg
ICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBs
aW5lU3RhcnQgLSBvZmZzZXQKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2Rl
QXQoaW5kZXgpOworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGlmIChpc0xpbmVU
ZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgIGlmIChleHRyYS5jb21tZW50cykgewor
ICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsgb2Zmc2V0
LCBpbmRleCAtIDEpOworICAgICAgICAgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAxCisgICAgICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBjb21tZW50LCBzdGFydCwgaW5k
ZXggLSAxLCBsb2MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2gg
PT09IDEzICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMTApIHsKKyAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKyts
aW5lTnVtYmVyOworICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChl
eHRyYS5jb21tZW50cykgeworICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFy
dCArIG9mZnNldCwgaW5kZXgpOworICAgICAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAg
ICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBs
aW5lU3RhcnQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBhZGRDb21tZW50KCdMaW5lJywg
Y29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gc2tpcE11bHRpTGluZUNvbW1lbnQoKSB7CisgICAgICAgIHZhciBzdGFydCwgbG9jLCBj
aCwgY29tbWVudDsKKworICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKKyAgICAgICAgICAg
IHN0YXJ0ID0gaW5kZXggLSAyOworICAgICAgICAgICAgbG9jID0geworICAgICAgICAgICAgICAg
IHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAg
ICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQgLSAyCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8
IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7Cisg
ICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY2ggPT09IDB4MEQgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgwQSkg
eworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAg
ICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
Pj0gbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7CisgICAgICAgICAgICAgICAgLy8gQmxvY2sg
Y29tbWVudCBlbmRzIHdpdGggJyovJy4KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJD
b2RlQXQoaW5kZXggKyAxKSA9PT0gMHgyRikgeworICAgICAgICAgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICBpZiAo
ZXh0cmEuY29tbWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3Vy
Y2Uuc2xpY2Uoc3RhcnQgKyAyLCBpbmRleCAtIDIpOworICAgICAgICAgICAgICAgICAgICAgICAg
bG9jLmVuZCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQK
KyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRD
b21tZW50KCdCbG9jaycsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCwgbG9jKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gc2tpcENvbW1lbnQoKSB7CisgICAgICAgIHZhciBjaCwgc3RhcnQ7
CisKKyAgICAgICAgc3RhcnQgPSAoaW5kZXggPT09IDApOworICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOwor
CisgICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAgICsr
aW5kZXg7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7Cisg
ICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQg
JiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDBBKSB7CisgICAgICAgICAgICAgICAg
ICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbGluZU51
bWJlcjsKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAgICAgICAgICAg
ICBzdGFydCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJGKSB7IC8v
IFUrMDAyRiBpcyAnLycKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGlu
ZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJGKSB7CisgICAgICAgICAg
ICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgIHNraXBTaW5nbGVMaW5lQ29tbWVudCgyKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhcnQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkEp
IHsgIC8vIFUrMDAyQSBpcyAnKicKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgc2tpcE11bHRpTGlu
ZUNvbW1lbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0
ICYmIGNoID09PSAweDJEKSB7IC8vIFUrMDAyRCBpcyAnLScKKyAgICAgICAgICAgICAgICAvLyBV
KzAwM0UgaXMgJz4nCisgICAgICAgICAgICAgICAgaWYgKChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCArIDEpID09PSAweDJEKSAmJiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAyKSA9PT0gMHgz
RSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicgaXMgYSBzaW5nbGUtbGluZSBjb21t
ZW50CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgICAgICAgICAgICAgICAg
IHNraXBTaW5nbGVMaW5lQ29tbWVudCgzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGNoID09PSAweDNDKSB7IC8vIFUrMDAzQyBpcyAnPCcKKyAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLnNsaWNlKGluZGV4ICsgMSwgaW5kZXggKyA0KSA9PT0gJyEtLScpIHsKKyAg
ICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYDxgCisgICAgICAgICAgICAgICAgICAgICsr
aW5kZXg7IC8vIGAhYAorICAgICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgLWAKKyAgICAg
ICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gCisgICAgICAgICAgICAgICAgICAgIHNraXBT
aW5nbGVMaW5lQ29tbWVudCg0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgZnVuY3Rpb24gc2NhbkhleEVzY2FwZShwcmVmaXgpIHsKKyAgICAgICAgdmFyIGks
IGxlbiwgY2gsIGNvZGUgPSAwOworCisgICAgICAgIGxlbiA9IChwcmVmaXggPT09ICd1JykgPyA0
IDogMjsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoaW5kZXggPCBsZW5ndGggJiYgaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAg
ICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgICAgIGNvZGUgPSBj
b2RlICogMTYgKyAnMDEyMzQ1Njc4OWFiY2RlZicuaW5kZXhPZihjaC50b0xvd2VyQ2FzZSgpKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICcnOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNv
ZGUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldEVzY2FwZWRJZGVudGlmaWVyKCkgeworICAg
ICAgICB2YXIgY2gsIGlkOworCisgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgr
Kyk7CisgICAgICAgIGlkID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7CisKKyAgICAgICAgLy8g
J1x1JyAoVSswMDVDLCBVKzAwNzUpIGRlbm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAg
ICAgIGlmIChjaCA9PT0gMHg1QykgeworICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KSAhPT0gMHg3NSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICsraW5kZXg7CisgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAg
ICAgICAgIGlmICghY2ggfHwgY2ggPT09ICdcXCcgfHwgIWlzSWRlbnRpZmllclN0YXJ0KGNoLmNo
YXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWQgPSBjaDsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisgICAgICAgICAgICBp
ZiAoIWlzSWRlbnRpZmllclBhcnQoY2gpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWQgKz0gU3RyaW5n
LmZyb21DaGFyQ29kZShjaCk7CisKKyAgICAgICAgICAgIC8vICdcdScgKFUrMDA1QywgVSswMDc1
KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorICAgICAgICAgICAgaWYgKGNoID09PSAw
eDVDKSB7CisgICAgICAgICAgICAgICAgaWQgPSBpZC5zdWJzdHIoMCwgaWQubGVuZ3RoIC0gMSk7
CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSAhPT0gMHg3NSkg
eworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsr
aW5kZXg7CisgICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVyUGFydChjaC5j
aGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlkICs9IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGlkOworICAgIH0KKworICAgIGZ1bmN0aW9uIGdldElkZW50aWZpZXIoKSB7Cisg
ICAgICAgIHZhciBzdGFydCwgY2g7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleCsrOworICAgICAg
ICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJD
b2RlQXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKGNoID09PSAweDVDKSB7CisgICAgICAgICAg
ICAgICAgLy8gQmxhY2tzbGFzaCAoVSswMDVDKSBtYXJrcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5j
ZS4KKyAgICAgICAgICAgICAgICBpbmRleCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIHJldHVy
biBnZXRFc2NhcGVkSWRlbnRpZmllcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KGlzSWRlbnRpZmllclBhcnQoY2gpKSB7CisgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBpbmRleCk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc2NhbklkZW50aWZpZXIoKSB7CisgICAgICAgIHZhciBzdGFy
dCwgaWQsIHR5cGU7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleDsKKworICAgICAgICAvLyBCYWNr
c2xhc2ggKFUrMDA1Qykgc3RhcnRzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorICAgICAgICBpZCA9
IChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4NUMpID8gZ2V0RXNjYXBlZElkZW50aWZp
ZXIoKSA6IGdldElkZW50aWZpZXIoKTsKKworICAgICAgICAvLyBUaGVyZSBpcyBubyBrZXl3b3Jk
IG9yIGxpdGVyYWwgd2l0aCBvbmx5IG9uZSBjaGFyYWN0ZXIuCisgICAgICAgIC8vIFRodXMsIGl0
IG11c3QgYmUgYW4gaWRlbnRpZmllci4KKyAgICAgICAgaWYgKGlkLmxlbmd0aCA9PT0gMSkgewor
ICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7CisgICAgICAgIH0gZWxzZSBpZiAo
aXNLZXl3b3JkKGlkKSkgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLktleXdvcmQ7CisgICAg
ICAgIH0gZWxzZSBpZiAoaWQgPT09ICdudWxsJykgeworICAgICAgICAgICAgdHlwZSA9IFRva2Vu
Lk51bGxMaXRlcmFsOworICAgICAgICB9IGVsc2UgaWYgKGlkID09PSAndHJ1ZScgfHwgaWQgPT09
ICdmYWxzZScpIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5Cb29sZWFuTGl0ZXJhbDsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5JZGVudGlmaWVyOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAg
ICAgICAgICB2YWx1ZTogaWQsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAor
ICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBzdGFydDogc3Rh
cnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisKKyAgICAv
LyA3LjcgUHVuY3R1YXRvcnMKKworICAgIGZ1bmN0aW9uIHNjYW5QdW5jdHVhdG9yKCkgeworICAg
ICAgICB2YXIgc3RhcnQgPSBpbmRleCwKKyAgICAgICAgICAgIGNvZGUgPSBzb3VyY2UuY2hhckNv
ZGVBdChpbmRleCksCisgICAgICAgICAgICBjb2RlMiwKKyAgICAgICAgICAgIGNoMSA9IHNvdXJj
ZVtpbmRleF0sCisgICAgICAgICAgICBjaDIsCisgICAgICAgICAgICBjaDMsCisgICAgICAgICAg
ICBjaDQ7CisKKyAgICAgICAgc3dpdGNoIChjb2RlKSB7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9y
IG1vc3QgY29tbW9uIHNpbmdsZS1jaGFyYWN0ZXIgcHVuY3R1YXRvcnMuCisgICAgICAgIGNhc2Ug
MHgyRTogIC8vIC4gZG90CisgICAgICAgIGNhc2UgMHgyODogIC8vICggb3BlbiBicmFja2V0Cisg
ICAgICAgIGNhc2UgMHgyOTogIC8vICkgY2xvc2UgYnJhY2tldAorICAgICAgICBjYXNlIDB4M0I6
ICAvLyA7IHNlbWljb2xvbgorICAgICAgICBjYXNlIDB4MkM6ICAvLyAsIGNvbW1hCisgICAgICAg
IGNhc2UgMHg3QjogIC8vIHsgb3BlbiBjdXJseSBicmFjZQorICAgICAgICBjYXNlIDB4N0Q6ICAv
LyB9IGNsb3NlIGN1cmx5IGJyYWNlCisgICAgICAgIGNhc2UgMHg1QjogIC8vIFsKKyAgICAgICAg
Y2FzZSAweDVEOiAgLy8gXQorICAgICAgICBjYXNlIDB4M0E6ICAvLyA6CisgICAgICAgIGNhc2Ug
MHgzRjogIC8vID8KKyAgICAgICAgY2FzZSAweDdFOiAgLy8gfgorICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSkgeworICAgICAgICAgICAgICAgIGlm
IChjb2RlID09PSAweDI4KSB7CisgICAgICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5QYXJlblRv
a2VuID0gZXh0cmEudG9rZW5zLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNv
ZGUgPT09IDB4N0IpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEub3BlbkN1cmx5VG9rZW4g
PSBleHRyYS50b2tlbnMubGVuZ3RoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1
YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSwK
KyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAg
IGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAg
ICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICB9OworCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBjb2RlMiA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSk7CisK
KyAgICAgICAgICAgIC8vICc9JyAoVSswMDNEKSBtYXJrcyBhbiBhc3NpZ25tZW50IG9yIGNvbXBh
cmlzb24gb3BlcmF0b3IuCisgICAgICAgICAgICBpZiAoY29kZTIgPT09IDB4M0QpIHsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDB4MkI6ICAv
LyArCisgICAgICAgICAgICAgICAgY2FzZSAweDJEOiAgLy8gLQorICAgICAgICAgICAgICAgIGNh
c2UgMHgyRjogIC8vIC8KKyAgICAgICAgICAgICAgICBjYXNlIDB4M0M6ICAvLyA8CisgICAgICAg
ICAgICAgICAgY2FzZSAweDNFOiAgLy8gPgorICAgICAgICAgICAgICAgIGNhc2UgMHg1RTogIC8v
IF4KKyAgICAgICAgICAgICAgICBjYXNlIDB4N0M6ICAvLyB8CisgICAgICAgICAgICAgICAgY2Fz
ZSAweDI1OiAgLy8gJQorICAgICAgICAgICAgICAgIGNhc2UgMHgyNjogIC8vICYKKyAgICAgICAg
ICAgICAgICBjYXNlIDB4MkE6ICAvLyAqCisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDI7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFN0
cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUyKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAg
ICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGNhc2UgMHgyMTogLy8gIQor
ICAgICAgICAgICAgICAgIGNhc2UgMHgzRDogLy8gPQorICAgICAgICAgICAgICAgICAgICBpbmRl
eCArPSAyOworCisgICAgICAgICAgICAgICAgICAgIC8vICE9PSBhbmQgPT09CisgICAgICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFRv
a2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc291cmNlLnNs
aWNlKHN0YXJ0LCBpbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBs
aW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQs
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC1jaGFyYWN0ZXIg
cHVuY3R1YXRvcjogPj4+PQorCisgICAgICAgIGNoNCA9IHNvdXJjZS5zdWJzdHIoaW5kZXgsIDQp
OworCisgICAgICAgIGlmIChjaDQgPT09ICc+Pj49JykgeworICAgICAgICAgICAgaW5kZXggKz0g
NDsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVu
Y3R1YXRvciwKKyAgICAgICAgICAgICAgICB2YWx1ZTogY2g0LAorICAgICAgICAgICAgICAgIGxp
bmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3Rh
cnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDog
aW5kZXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLyAzLWNoYXJhY3Rl
ciBwdW5jdHVhdG9yczogPT09ICE9PSA+Pj4gPDw9ID4+PQorCisgICAgICAgIGNoMyA9IGNoNC5z
dWJzdHIoMCwgMyk7CisKKyAgICAgICAgaWYgKGNoMyA9PT0gJz4+PicgfHwgY2gzID09PSAnPDw9
JyB8fCBjaDMgPT09ICc+Pj0nKSB7CisgICAgICAgICAgICBpbmRleCArPSAzOworICAgICAgICAg
ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAg
ICAgICAgICAgICAgIHZhbHVlOiBjaDMsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAg
ICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE90aGVyIDItY2hhcmFjdGVyIHB1bmN0
dWF0b3JzOiArKyAtLSA8PCA+PiAmJiB8fAorICAgICAgICBjaDIgPSBjaDMuc3Vic3RyKDAsIDIp
OworCisgICAgICAgIGlmICgoY2gxID09PSBjaDJbMV0gJiYgKCcrLTw+JnwnLmluZGV4T2YoY2gx
KSA+PSAwKSkgfHwgY2gyID09PSAnPT4nKSB7CisgICAgICAgICAgICBpbmRleCArPSAyOworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9y
LAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDIsCisgICAgICAgICAgICAgICAgbGluZU51bWJl
cjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAg
ICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDEtY2hhcmFjdGVyIHB1bmN0
dWF0b3JzOiA8ID4gPSAhICsgLSAqICUgJiB8IF4gLworICAgICAgICBpZiAoJzw+PSErLSolJnxe
LycuaW5kZXhPZihjaDEpID49IDApIHsKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAg
ICAgICAgICAgICAgdmFsdWU6IGNoMSwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAg
ICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAg
ICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5l
eHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgIH0KKworICAgIC8vIDcuOC4zIE51bWVyaWMg
TGl0ZXJhbHMKKworICAgIGZ1bmN0aW9uIHNjYW5IZXhMaXRlcmFsKHN0YXJ0KSB7CisgICAgICAg
IHZhciBudW1iZXIgPSAnJzsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAg
ICAgICAgICAgIGlmICghaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtp
bmRleCsrXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChudW1iZXIubGVuZ3RoID09PSAwKSB7
CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJ
TExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291
cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAorICAgICAg
ICAgICAgdmFsdWU6IHBhcnNlSW50KCcweCcgKyBudW1iZXIsIDE2KSwKKyAgICAgICAgICAgIGxp
bmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwK
KyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAg
ICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuT2N0YWxMaXRlcmFsKHN0YXJ0KSB7Cisg
ICAgICAgIHZhciBudW1iZXIgPSAnMCcgKyBzb3VyY2VbaW5kZXgrK107CisgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKCFpc09jdGFsRGlnaXQoc291cmNl
W2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSB8fCBpc0RlY2lt
YWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0aHJvd0Vy
cm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVy
YWwsCisgICAgICAgICAgICB2YWx1ZTogcGFyc2VJbnQobnVtYmVyLCA4KSwKKyAgICAgICAgICAg
IG9jdGFsOiB0cnVlLAorICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAg
ICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAor
ICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9u
IHNjYW5OdW1lcmljTGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIG51bWJlciwgc3RhcnQsIGNoOwor
CisgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KGlzRGVjaW1hbERp
Z2l0KGNoLmNoYXJDb2RlQXQoMCkpIHx8IChjaCA9PT0gJy4nKSwKKyAgICAgICAgICAgICdOdW1l
cmljIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgZGVjaW1hbCBkaWdpdCBvciBhIGRlY2ltYWwg
cG9pbnQnKTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICBudW1iZXIgPSAnJzsK
KyAgICAgICAgaWYgKGNoICE9PSAnLicpIHsKKyAgICAgICAgICAgIG51bWJlciA9IHNvdXJjZVtp
bmRleCsrXTsKKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKworICAgICAgICAgICAg
Ly8gSGV4IG51bWJlciBzdGFydHMgd2l0aCAnMHgnLgorICAgICAgICAgICAgLy8gT2N0YWwgbnVt
YmVyIHN0YXJ0cyB3aXRoICcwJy4KKyAgICAgICAgICAgIGlmIChudW1iZXIgPT09ICcwJykgewor
ICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3gnIHx8IGNoID09PSAnWCcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5IZXhM
aXRlcmFsKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlz
T2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5PY3RhbExp
dGVyYWwoc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGRl
Y2ltYWwgbnVtYmVyIHN0YXJ0cyB3aXRoICcwJyBzdWNoIGFzICcwOScgaXMgaWxsZWdhbC4KKyAg
ICAgICAgICAgICAgICBpZiAoY2ggJiYgaXNEZWNpbWFsRGlnaXQoY2guY2hhckNvZGVBdCgwKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
KSkpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGNoID09PSAnLicpIHsKKyAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5k
ZXgrK107CisgICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2Rl
QXQoaW5kZXgpKSkgeworICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7CisgICAgICAgICAg
ICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworCisgICAgICAgICAgICBjaCA9IHNvdXJjZVtp
bmRleF07CisgICAgICAgICAgICBpZiAoY2ggPT09ICcrJyB8fCBjaCA9PT0gJy0nKSB7CisgICAg
ICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7
CisgICAgICAgICAgICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsr
XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFy
dChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCisg
ICAgICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChudW1iZXIpLAorICAgICAgICAgICAgbGluZU51
bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAg
ICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9
OworICAgIH0KKworICAgIC8vIDcuOC40IFN0cmluZyBMaXRlcmFscworCisgICAgZnVuY3Rpb24g
c2NhblN0cmluZ0xpdGVyYWwoKSB7CisgICAgICAgIHZhciBzdHIgPSAnJywgcXVvdGUsIHN0YXJ0
LCBjaCwgY29kZSwgdW5lc2NhcGVkLCByZXN0b3JlLCBvY3RhbCA9IGZhbHNlLCBzdGFydExpbmVO
dW1iZXIsIHN0YXJ0TGluZVN0YXJ0OworICAgICAgICBzdGFydExpbmVOdW1iZXIgPSBsaW5lTnVt
YmVyOworICAgICAgICBzdGFydExpbmVTdGFydCA9IGxpbmVTdGFydDsKKworICAgICAgICBxdW90
ZSA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIGFzc2VydCgocXVvdGUgPT09ICdcJycgfHwgcXVv
dGUgPT09ICciJyksCisgICAgICAgICAgICAnU3RyaW5nIGxpdGVyYWwgbXVzdCBzdGFydHMgd2l0
aCBhIHF1b3RlJyk7CisKKyAgICAgICAgc3RhcnQgPSBpbmRleDsKKyAgICAgICAgKytpbmRleDsK
KworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291
cmNlW2luZGV4KytdOworCisgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7CisgICAgICAg
ICAgICAgICAgcXVvdGUgPSAnJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtp
bmRleCsrXTsKKyAgICAgICAgICAgICAgICBpZiAoIWNoIHx8ICFpc0xpbmVUZXJtaW5hdG9yKGNo
LmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gn
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5lc2NhcGVkID0gc2NhbkhleEVzY2FwZShjaCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodW5lc2NhcGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RyICs9IHVuZXNjYXBlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICduJzoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXG4nOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyICs9ICdccic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gJ1x0JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXGInOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J2YnOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcZic7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x4MEInOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBcMCBpcyBub3Qgb2N0YWwgZXNjYXBlIHNlcXVlbmNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBpc09jdGFs
RGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2N0YWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29k
ZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2luZGV4KytdKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0cyBhcmUgb25seSBhbGxvd2VkIHdoZW4g
c3RyaW5nIHN0YXJ0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIDAs
IDEsIDIsIDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCcwMTIzJy5pbmRl
eE9mKGNoKSA+PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXggPCBsZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc09jdGFsRGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2Vb
aW5kZXgrK10pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBT
dHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAgJ1xyJyAmJiBz
b3VyY2VbaW5kZXhdID09PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK2luZGV4
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9
IGluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5l
VGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHIgKz0gY2g7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocXVvdGUgIT09ICcnKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4u
U3RyaW5nTGl0ZXJhbCwKKyAgICAgICAgICAgIHZhbHVlOiBzdHIsCisgICAgICAgICAgICBvY3Rh
bDogb2N0YWwsCisgICAgICAgICAgICBzdGFydExpbmVOdW1iZXI6IHN0YXJ0TGluZU51bWJlciwK
KyAgICAgICAgICAgIHN0YXJ0TGluZVN0YXJ0OiBzdGFydExpbmVTdGFydCwKKyAgICAgICAgICAg
IGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFy
dCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAg
ICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0UmVnRXhwKHBhdHRlcm4sIGZsYWdz
KSB7CisgICAgICAgIHZhciB2YWx1ZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhbHVl
ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkludmFsaWRSZWdFeHApOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuUmVn
RXhwQm9keSgpIHsKKyAgICAgICAgdmFyIGNoLCBzdHIsIGNsYXNzTWFya2VyLCB0ZXJtaW5hdGVk
LCBib2R5OworCisgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KGNo
ID09PSAnLycsICdSZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBz
bGFzaCcpOworICAgICAgICBzdHIgPSBzb3VyY2VbaW5kZXgrK107CisKKyAgICAgICAgY2xhc3NN
YXJrZXIgPSBmYWxzZTsKKyAgICAgICAgdGVybWluYXRlZCA9IGZhbHNlOworICAgICAgICB3aGls
ZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4KytdOwor
ICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgaWYgKGNoID09PSAnXFwnKSB7Cisg
ICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAgICAgLy8g
RUNNQS0yNjIgNy44LjUKKyAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5j
aGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3Io
Y2guY2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc01h
cmtlcikgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ10nKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcvJykgeworICAgICAgICAg
ICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1snKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNsYXNzTWFya2VyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRlcm1pbmF0ZWQpIHsKKyAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBFeGNsdWRlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoLgorICAgICAg
ICBib2R5ID0gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICB2YWx1ZTogYm9keSwKKyAgICAgICAgICAgIGxpdGVyYWw6IHN0cgorICAg
ICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHBGbGFncygpIHsKKyAgICAg
ICAgdmFyIGNoLCBzdHIsIGZsYWdzLCByZXN0b3JlOworCisgICAgICAgIHN0ciA9ICcnOworICAg
ICAgICBmbGFncyA9ICcnOworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVy
UGFydChjaC5jaGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWYgKGNoID09PSAn
XFwnICYmIGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5k
ZXhdOworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ3UnKSB7CisgICAgICAgICAgICAgICAg
ICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHN0ciArPSAnXFx1JzsgcmVzdG9yZSA8IGluZGV4OyAr
K3Jlc3RvcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gc291cmNlW3Jl
c3RvcmVdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSByZXN0b3JlOworICAgICAg
ICAgICAgICAgICAgICAgICAgZmxhZ3MgKz0gJ3UnOworICAgICAgICAgICAgICAgICAgICAgICAg
c3RyICs9ICdcXHUnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdB
TCcpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXFwnOworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3Nh
Z2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoOworICAgICAgICAg
ICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICB2YWx1ZTogZmxhZ3MsCisgICAgICAgICAgICBsaXRlcmFsOiBz
dHIKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuUmVnRXhwKCkgeworICAg
ICAgICB2YXIgc3RhcnQsIGJvZHksIGZsYWdzLCBwYXR0ZXJuLCB2YWx1ZTsKKworICAgICAgICBs
b29rYWhlYWQgPSBudWxsOworICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAgICBzdGFydCA9
IGluZGV4OworCisgICAgICAgIGJvZHkgPSBzY2FuUmVnRXhwQm9keSgpOworICAgICAgICBmbGFn
cyA9IHNjYW5SZWdFeHBGbGFncygpOworICAgICAgICB2YWx1ZSA9IHRlc3RSZWdFeHAoYm9keS52
YWx1ZSwgZmxhZ3MudmFsdWUpOworCisgICAgICAgIGlmIChleHRyYS50b2tlbml6ZSkgeworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5SZWd1bGFyRXhw
cmVzc2lvbiwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAg
bGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVT
dGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5k
OiBpbmRleAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICBsaXRlcmFsOiBib2R5LmxpdGVyYWwgKyBmbGFncy5saXRlcmFsLAorICAgICAg
ICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAg
ICAgZW5kOiBpbmRleAorICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbGxlY3RS
ZWdleCgpIHsKKyAgICAgICAgdmFyIHBvcywgbG9jLCByZWdleCwgdG9rZW47CisKKyAgICAgICAg
c2tpcENvbW1lbnQoKTsKKworICAgICAgICBwb3MgPSBpbmRleDsKKyAgICAgICAgbG9jID0gewor
ICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAor
ICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICByZWdleCA9IHNjYW5SZWdFeHAoKTsKKyAgICAgICAgbG9j
LmVuZCA9IHsKKyAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBjb2x1
bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgIH07CisKKyAgICAgICAgLyogaXN0YW5idWwg
aWdub3JlIG5leHQgKi8KKyAgICAgICAgaWYgKCFleHRyYS50b2tlbml6ZSkgeworICAgICAgICAg
ICAgLy8gUG9wIHRoZSBwcmV2aW91cyB0b2tlbiwgd2hpY2ggaXMgbGlrZWx5ICcvJyBvciAnLz0n
CisgICAgICAgICAgICBpZiAoZXh0cmEudG9rZW5zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
ICAgICB0b2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07CisgICAg
ICAgICAgICAgICAgaWYgKHRva2VuLnJhbmdlWzBdID09PSBwb3MgJiYgdG9rZW4udHlwZSA9PT0g
J1B1bmN0dWF0b3InKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0g
Jy8nIHx8IHRva2VuLnZhbHVlID09PSAnLz0nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
eHRyYS50b2tlbnMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4dHJhLnRva2Vucy5wdXNoKHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiAnUmVndWxhckV4cHJlc3Npb24nLAorICAgICAgICAgICAgICAg
IHZhbHVlOiByZWdleC5saXRlcmFsLAorICAgICAgICAgICAgICAgIHJhbmdlOiBbcG9zLCBpbmRl
eF0sCisgICAgICAgICAgICAgICAgbG9jOiBsb2MKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHJlZ2V4OworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzSWRlbnRp
Zmllck5hbWUodG9rZW4pIHsKKyAgICAgICAgcmV0dXJuIHRva2VuLnR5cGUgPT09IFRva2VuLklk
ZW50aWZpZXIgfHwKKyAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQgfHwK
KyAgICAgICAgICAgIHRva2VuLnR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsIHx8CisgICAg
ICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbDsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBhZHZhbmNlU2xhc2goKSB7CisgICAgICAgIHZhciBwcmV2VG9rZW4sCisgICAgICAg
ICAgICBjaGVja1Rva2VuOworICAgICAgICAvLyBVc2luZyB0aGUgZm9sbG93aW5nIGFsZ29yaXRo
bToKKyAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc3dlZXQuanMvd2lraS9k
ZXNpZ24KKyAgICAgICAgcHJldlRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5n
dGggLSAxXTsKKyAgICAgICAgaWYgKCFwcmV2VG9rZW4pIHsKKyAgICAgICAgICAgIC8vIE5vdGhp
bmcgYmVmb3JlIHRoYXQ6IGl0IGNhbm5vdCBiZSBhIGRpdmlzaW9uLgorICAgICAgICAgICAgcmV0
dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2VG9rZW4udHlw
ZSA9PT0gJ1B1bmN0dWF0b3InKSB7CisgICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09
PSAnXScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICcpJykgeworICAg
ICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3BlblBhcmVuVG9r
ZW4gLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tUb2tlbiAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tUb2tlbi50eXBlID09PSAnS2V5d29yZCcgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIChjaGVja1Rva2VuLnZhbHVlID09PSAnaWYnIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ3doaWxlJyB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoZWNrVG9rZW4udmFsdWUgPT09ICdmb3InIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ3dpdGgnKSkgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJ30nKSB7CisgICAgICAgICAgICAgICAgLy8g
RGl2aWRpbmcgYSBmdW5jdGlvbiBieSBhbnl0aGluZyBtYWtlcyBsaXR0bGUgc2Vuc2UsCisgICAg
ICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgdG8gY2hlY2sgZm9yIHRoYXQuCisgICAgICAgICAg
ICAgICAgaWYgKGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNdICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSAz
XS50eXBlID09PSAnS2V5d29yZCcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQW5vbnltb3Vz
IGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAgICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5z
W2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF07CisgICAgICAgICAgICAgICAgICAgIGlmICghY2hl
Y2tUb2tlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9y
KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4
dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSA0XS50eXBlID09PSAn
S2V5d29yZCcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTmFtZWQgZnVuY3Rpb24uCisgICAg
ICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEub3BlbkN1cmx5
VG9rZW4gLSA1XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rva2VuKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgLy8gY2hlY2tUb2tlbiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzCisgICAg
ICAgICAgICAgICAgLy8gYSBkZWNsYXJhdGlvbiBvciBhbiBleHByZXNzaW9uLgorICAgICAgICAg
ICAgICAgIGlmIChGbkV4cHJUb2tlbnMuaW5kZXhPZihjaGVja1Rva2VuLnZhbHVlKSA+PSAwKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGV4cHJlc3Npb24uCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBJdCBpcyBhIGRlY2xhcmF0aW9uLgorICAgICAgICAgICAgICAgIHJl
dHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBj
b2xsZWN0UmVnZXgoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJldlRva2VuLnR5cGUgPT09
ICdLZXl3b3JkJykgeworICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGFkdmFuY2UoKSB7CisgICAgICAgIHZhciBjaDsKKworICAgICAgICBza2lwQ29tbWVudCgp
OworCisgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uRU9GLAorICAgICAgICAgICAgICAgIGxpbmVO
dW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQs
CisgICAgICAgICAgICAgICAgc3RhcnQ6IGluZGV4LAorICAgICAgICAgICAgICAgIGVuZDogaW5k
ZXgKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBjaCA9IHNvdXJjZS5jaGFy
Q29kZUF0KGluZGV4KTsKKworICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gc2NhbklkZW50aWZpZXIoKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFZlcnkgY29tbW9uOiAoIGFuZCApIGFuZCA7CisgICAgICAgIGlmIChjaCA9PT0gMHgyOCB8
fCBjaCA9PT0gMHgyOSB8fCBjaCA9PT0gMHgzQikgeworICAgICAgICAgICAgcmV0dXJuIHNjYW5Q
dW5jdHVhdG9yKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdHJpbmcgbGl0ZXJhbCBzdGFy
dHMgd2l0aCBzaW5nbGUgcXVvdGUgKFUrMDAyNykgb3IgZG91YmxlIHF1b3RlIChVKzAwMjIpLgor
ICAgICAgICBpZiAoY2ggPT09IDB4MjcgfHwgY2ggPT09IDB4MjIpIHsKKyAgICAgICAgICAgIHJl
dHVybiBzY2FuU3RyaW5nTGl0ZXJhbCgpOworICAgICAgICB9CisKKworICAgICAgICAvLyBEb3Qg
KC4pIFUrMDAyRSBjYW4gYWxzbyBzdGFydCBhIGZsb2F0aW5nLXBvaW50IG51bWJlciwgaGVuY2Ug
dGhlIG5lZWQKKyAgICAgICAgLy8gdG8gY2hlY2sgdGhlIG5leHQgY2hhcmFjdGVyLgorICAgICAg
ICBpZiAoY2ggPT09IDB4MkUpIHsKKyAgICAgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCArIDEpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzY2Fu
TnVtZXJpY0xpdGVyYWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzY2Fu
UHVuY3R1YXRvcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNo
KSkgeworICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gU2xhc2ggKC8pIFUrMDAyRiBjYW4gYWxzbyBzdGFydCBhIHJlZ2V4Lgor
ICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUgJiYgY2ggPT09IDB4MkYpIHsKKyAgICAgICAgICAg
IHJldHVybiBhZHZhbmNlU2xhc2goKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzY2Fu
UHVuY3R1YXRvcigpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNvbGxlY3RUb2tlbigpIHsKKyAg
ICAgICAgdmFyIGxvYywgdG9rZW4sIHJhbmdlLCB2YWx1ZTsKKworICAgICAgICBza2lwQ29tbWVu
dCgpOworICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAg
ICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxp
bmVTdGFydAorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHRva2VuID0gYWR2
YW5jZSgpOworICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgbGluZTogbGluZU51bWJl
ciwKKyAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICB2YWx1
ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kKTsKKyAgICAgICAgICAgIGV4
dHJhLnRva2Vucy5wdXNoKHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbk5hbWVbdG9rZW4u
dHlwZV0sCisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgICAgIHJh
bmdlOiBbdG9rZW4uc3RhcnQsIHRva2VuLmVuZF0sCisgICAgICAgICAgICAgICAgbG9jOiBsb2MK
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRva2VuOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGxleCgpIHsKKyAgICAgICAgdmFyIHRva2VuOworCisgICAgICAg
IHRva2VuID0gbG9va2FoZWFkOworICAgICAgICBpbmRleCA9IHRva2VuLmVuZDsKKyAgICAgICAg
bGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7CisgICAgICAgIGxpbmVTdGFydCA9IHRva2Vu
LmxpbmVTdGFydDsKKworICAgICAgICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJhLnRva2VucyAh
PT0gJ3VuZGVmaW5lZCcpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7CisKKyAgICAgICAg
aW5kZXggPSB0b2tlbi5lbmQ7CisgICAgICAgIGxpbmVOdW1iZXIgPSB0b2tlbi5saW5lTnVtYmVy
OworICAgICAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7CisKKyAgICAgICAgcmV0dXJu
IHRva2VuOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBlZWsoKSB7CisgICAgICAgIHZhciBwb3Ms
IGxpbmUsIHN0YXJ0OworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsaW5lID0gbGlu
ZU51bWJlcjsKKyAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7CisgICAgICAgIGxvb2thaGVhZCA9
ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6
IGFkdmFuY2UoKTsKKyAgICAgICAgaW5kZXggPSBwb3M7CisgICAgICAgIGxpbmVOdW1iZXIgPSBs
aW5lOworICAgICAgICBsaW5lU3RhcnQgPSBzdGFydDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBQ
b3NpdGlvbihsaW5lLCBjb2x1bW4pIHsKKyAgICAgICAgdGhpcy5saW5lID0gbGluZTsKKyAgICAg
ICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CisgICAgfQorCisgICAgZnVuY3Rpb24gU291cmNlTG9j
YXRpb24oc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgbGluZSwgY29sdW1uKSB7CisgICAgICAgIHRo
aXMuc3RhcnQgPSBuZXcgUG9zaXRpb24oc3RhcnRMaW5lLCBzdGFydENvbHVtbik7CisgICAgICAg
IHRoaXMuZW5kID0gbmV3IFBvc2l0aW9uKGxpbmUsIGNvbHVtbik7CisgICAgfQorCisgICAgU3lu
dGF4VHJlZURlbGVnYXRlID0geworCisgICAgICAgIG5hbWU6ICdTeW50YXhUcmVlJywKKworICAg
ICAgICBwcm9jZXNzQ29tbWVudDogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBs
YXN0Q2hpbGQsIHRyYWlsaW5nQ29tbWVudHM7CisKKyAgICAgICAgICAgIGlmIChub2RlLnR5cGUg
PT09IFN5bnRheC5Qcm9ncmFtKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuYm9keS5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRz
Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50
c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIHRy
YWlsaW5nQ29tbWVudHMgPSBleHRyYS50cmFpbGluZ0NvbW1lbnRzOworICAgICAgICAgICAgICAg
ICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggPSAw
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoID4gMCAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNr
Lmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHMgJiYKKyAgICAgICAgICAgICAgICAgICAgICAg
IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAx
XS50cmFpbGluZ0NvbW1lbnRzWzBdLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAg
ICAgICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tb
ZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzOworICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0
b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBFYXRpbmcgdGhlIHN0YWNrLgor
ICAgICAgICAgICAgd2hpbGUgKGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoID4gMCAmJiBl
eHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0u
cmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVswXSkgeworICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9
IGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucG9wKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChsYXN0Q2hpbGQpIHsKKyAgICAgICAgICAgICAgICBpZiAobGFzdENoaWxkLmxlYWRp
bmdDb21tZW50cyAmJiBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzW2xhc3RDaGlsZC5sZWFkaW5n
Q29tbWVudHMubGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkgeworICAgICAg
ICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGxhc3RDaGlsZC5sZWFkaW5nQ29t
bWVudHM7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1l
bnRzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmEubGVh
ZGluZ0NvbW1lbnRzLmxlbmd0aCA+IDAgJiYgZXh0cmEubGVhZGluZ0NvbW1lbnRzW2V4dHJhLmxl
YWRpbmdDb21tZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7Cisg
ICAgICAgICAgICAgICAgbm9kZS5sZWFkaW5nQ29tbWVudHMgPSBleHRyYS5sZWFkaW5nQ29tbWVu
dHM7CisgICAgICAgICAgICAgICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzID0gW107CisgICAgICAg
ICAgICB9CisKKworICAgICAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMpIHsKKyAgICAgICAg
ICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSB0cmFpbGluZ0NvbW1lbnRzOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrLnB1c2gobm9kZSk7
CisgICAgICAgIH0sCisKKyAgICAgICAgbWFya0VuZDogZnVuY3Rpb24gKG5vZGUsIHN0YXJ0VG9r
ZW4pIHsKKyAgICAgICAgICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgICAgIG5v
ZGUucmFuZ2UgPSBbc3RhcnRUb2tlbi5zdGFydCwgaW5kZXhdOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGV4dHJhLmxvYykgeworICAgICAgICAgICAgICAgIG5vZGUubG9jID0gbmV3
IFNvdXJjZUxvY2F0aW9uKAorICAgICAgICAgICAgICAgICAgICBzdGFydFRva2VuLnN0YXJ0TGlu
ZU51bWJlciA9PT0gdW5kZWZpbmVkID8gIHN0YXJ0VG9rZW4ubGluZU51bWJlciA6IHN0YXJ0VG9r
ZW4uc3RhcnRMaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBzdGFydFRva2VuLnN0YXJ0
IC0gKHN0YXJ0VG9rZW4uc3RhcnRMaW5lU3RhcnQgPT09IHVuZGVmaW5lZCA/ICBzdGFydFRva2Vu
LmxpbmVTdGFydCA6IHN0YXJ0VG9rZW4uc3RhcnRMaW5lU3RhcnQpLAorICAgICAgICAgICAgICAg
ICAgICBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBpbmRleCAtIGxpbmVTdGFydAor
ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgdGhpcy5wb3N0UHJvY2Vzcyhub2Rl
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NDb21tZW50KG5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0sCisKKyAgICAgICAgcG9z
dFByb2Nlc3M6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBpZiAoZXh0cmEuc291cmNl
KSB7CisgICAgICAgICAgICAgICAgbm9kZS5sb2Muc291cmNlID0gZXh0cmEuc291cmNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbiAoZWxlbWVudHMpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkFycmF5RXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQXNzaWdubWVudEV4cHJlc3Npb246IGZ1bmN0aW9u
IChvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LkFzc2lnbm1lbnRFeHByZXNzaW9uLAorICAgICAgICAgICAg
ICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAorICAg
ICAgICAgICAgICAgIHJpZ2h0OiByaWdodAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKwor
ICAgICAgICBjcmVhdGVCaW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQs
IHJpZ2h0KSB7CisgICAgICAgICAgICB2YXIgdHlwZSA9IChvcGVyYXRvciA9PT0gJ3x8JyB8fCBv
cGVyYXRvciA9PT0gJyYmJykgPyBTeW50YXguTG9naWNhbEV4cHJlc3Npb24gOgorICAgICAgICAg
ICAgICAgICAgICAgICAgU3ludGF4LkJpbmFyeUV4cHJlc3Npb247CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICAgICAgb3BlcmF0
b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAgICAgICAgICAg
ICAgcmlnaHQ6IHJpZ2h0CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZUJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbiAoYm9keSkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQmxvY2tTdGF0ZW1lbnQsCisgICAgICAg
ICAgICAgICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVCcmVha1N0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5CcmVha1N0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBsYWJlbDogbGFiZWwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNhbGxF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLAorICAgICAgICAgICAg
ICAgICdhcmd1bWVudHMnOiBhcmdzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIGNyZWF0ZUNhdGNoQ2xhdXNlOiBmdW5jdGlvbiAocGFyYW0sIGJvZHkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNhdGNoQ2xhdXNlLAor
ICAgICAgICAgICAgICAgIHBhcmFtOiBwYXJhbSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5
CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNvbmRpdGlvbmFs
RXhwcmVzc2lvbjogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSkgeworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ29uZGl0aW9u
YWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAg
ICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGU6IGFs
dGVybmF0ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVDb250
aW51ZVN0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsKSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db250aW51ZVN0YXRlbWVudCwKKyAgICAgICAg
ICAgICAgICBsYWJlbDogbGFiZWwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlRGVidWdnZXJTdGF0ZW1lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkRlYnVnZ2VyU3RhdGVtZW50Cisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZURvV2hpbGVTdGF0ZW1l
bnQ6IGZ1bmN0aW9uIChib2R5LCB0ZXN0KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5Eb1doaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAg
IGJvZHk6IGJvZHksCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdAorICAgICAgICAgICAgfTsK
KyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVFbXB0eVN0YXRlbWVudDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRW1w
dHlTdGF0ZW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
RXhwcmVzc2lvblN0YXRlbWVudDogZnVuY3Rpb24gKGV4cHJlc3Npb24pIHsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkV4cHJlc3Npb25TdGF0ZW1l
bnQsCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcmVzc2lvbgorICAgICAgICAgICAg
fTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVGb3JTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChp
bml0LCB0ZXN0LCB1cGRhdGUsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LkZvclN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBpbml0
OiBpbml0LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgdXBk
YXRlOiB1cGRhdGUsCisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAgICAgICAgICAgfTsK
KyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVGb3JJblN0YXRlbWVudDogZnVuY3Rpb24gKGxl
ZnQsIHJpZ2h0LCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5Gb3JJblN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0
LAorICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdodCwKKyAgICAgICAgICAgICAgICBib2R5OiBi
b2R5LAorICAgICAgICAgICAgICAgIGVhY2g6IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb246IGZ1bmN0aW9uIChpZCwg
cGFyYW1zLCBkZWZhdWx0cywgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguRnVuY3Rpb25EZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAg
ICBpZDogaWQsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAgICAgICAgICAg
ICAgZGVmYXVsdHM6IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAg
ICAgICAgICAgICAgcmVzdDogbnVsbCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNl
LAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGZhbHNlCisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbjogZnVuY3Rpb24gKGlk
LCBwYXJhbXMsIGRlZmF1bHRzLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvbkV4cHJlc3Npb24sCisgICAgICAgICAgICAg
ICAgaWQ6IGlkLAorICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAorICAgICAgICAgICAg
ICAgIGRlZmF1bHRzOiBkZWZhdWx0cywKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5LAorICAg
ICAgICAgICAgICAgIHJlc3Q6IG51bGwsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBmYWxz
ZSwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBmYWxzZQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICBjcmVhdGVJZGVudGlmaWVyOiBmdW5jdGlvbiAobmFtZSkgewor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguSWRlbnRp
ZmllciwKKyAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUlmU3RhdGVtZW50OiBmdW5jdGlvbiAodGVzdCwgY29uc2Vx
dWVudCwgYWx0ZXJuYXRlKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5JZlN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAor
ICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQsCisgICAgICAgICAgICAgICAg
YWx0ZXJuYXRlOiBhbHRlcm5hdGUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAg
ICAgY3JlYXRlTGFiZWxlZFN0YXRlbWVudDogZnVuY3Rpb24gKGxhYmVsLCBib2R5KSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5MYWJlbGVkU3Rh
dGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCwKKyAgICAgICAgICAgICAgICBi
b2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUxp
dGVyYWw6IGZ1bmN0aW9uICh0b2tlbikgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguTGl0ZXJhbCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdG9r
ZW4udmFsdWUsCisgICAgICAgICAgICAgICAgcmF3OiBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQs
IHRva2VuLmVuZCkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
TWVtYmVyRXhwcmVzc2lvbjogZnVuY3Rpb24gKGFjY2Vzc29yLCBvYmplY3QsIHByb3BlcnR5KSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5NZW1i
ZXJFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNvbXB1dGVkOiBhY2Nlc3NvciA9PT0gJ1sn
LAorICAgICAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LAorICAgICAgICAgICAgICAgIHByb3Bl
cnR5OiBwcm9wZXJ0eQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVOZXdFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2FsbGVlLCBhcmdzKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OZXdFeHByZXNzaW9uLAorICAg
ICAgICAgICAgICAgIGNhbGxlZTogY2FsbGVlLAorICAgICAgICAgICAgICAgICdhcmd1bWVudHMn
OiBhcmdzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZU9iamVj
dEV4cHJlc3Npb246IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5PYmplY3RFeHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlUG9zdGZpeEV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRv
ciwgYXJndW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LlVwZGF0ZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9w
ZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudCwKKyAgICAgICAgICAg
ICAgICBwcmVmaXg6IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
IGNyZWF0ZVByb2dyYW06IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Qcm9ncmFtLAorICAgICAgICAgICAgICAgIGJv
ZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlUHJv
cGVydHk6IGZ1bmN0aW9uIChraW5kLCBrZXksIHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAg
ICBrZXk6IGtleSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAg
ICAga2luZDoga2luZAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVh
dGVSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChhcmd1bWVudCkgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmV0dXJuU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAg
fSwKKworICAgICAgICBjcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb246IGZ1bmN0aW9uIChleHByZXNz
aW9ucykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguU2VxdWVuY2VFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiBleHBy
ZXNzaW9ucworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVTd2l0
Y2hDYXNlOiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguU3dpdGNoQ2FzZSwKKyAgICAgICAgICAg
ICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IGNvbnNlcXVlbnQK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlU3dpdGNoU3RhdGVt
ZW50OiBmdW5jdGlvbiAoZGlzY3JpbWluYW50LCBjYXNlcykgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguU3dpdGNoU3RhdGVtZW50LAorICAgICAg
ICAgICAgICAgIGRpc2NyaW1pbmFudDogZGlzY3JpbWluYW50LAorICAgICAgICAgICAgICAgIGNh
c2VzOiBjYXNlcworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVU
aGlzRXhwcmVzc2lvbjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguVGhpc0V4cHJlc3Npb24KKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVGhyb3dTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChhcmd1
bWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguVGhyb3dTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50Cisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVRyeVN0YXRlbWVudDog
ZnVuY3Rpb24gKGJsb2NrLCBndWFyZGVkSGFuZGxlcnMsIGhhbmRsZXJzLCBmaW5hbGl6ZXIpIHsK
KyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlRyeVN0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBibG9jazogYmxvY2ssCisgICAgICAgICAgICAgICAg
Z3VhcmRlZEhhbmRsZXJzOiBndWFyZGVkSGFuZGxlcnMsCisgICAgICAgICAgICAgICAgaGFuZGxl
cnM6IGhhbmRsZXJzLAorICAgICAgICAgICAgICAgIGZpbmFsaXplcjogZmluYWxpemVyCisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVVuYXJ5RXhwcmVzc2lvbjog
ZnVuY3Rpb24gKG9wZXJhdG9yLCBhcmd1bWVudCkgeworICAgICAgICAgICAgaWYgKG9wZXJhdG9y
ID09PSAnKysnIHx8IG9wZXJhdG9yID09PSAnLS0nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVwZGF0ZUV4cHJlc3Npb24sCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAgICAgICAgICAgICAg
ICAgYXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVW5hcnlFeHByZXNzaW9uLAorICAgICAgICAg
ICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJn
dW1lbnQsCisgICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlCisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb246IGZ1bmN0aW9uIChk
ZWNsYXJhdGlvbnMsIGtpbmQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlZhcmlhYmxlRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgZGVj
bGFyYXRpb25zOiBkZWNsYXJhdGlvbnMsCisgICAgICAgICAgICAgICAga2luZDoga2luZAorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0
b3I6IGZ1bmN0aW9uIChpZCwgaW5pdCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBTeW50YXguVmFyaWFibGVEZWNsYXJhdG9yLAorICAgICAgICAgICAgICAg
IGlkOiBpZCwKKyAgICAgICAgICAgICAgICBpbml0OiBpbml0CisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZVdoaWxlU3RhdGVtZW50OiBmdW5jdGlvbiAodGVzdCwg
Ym9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50
YXguV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAg
ICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
IGNyZWF0ZVdpdGhTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChvYmplY3QsIGJvZHkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LldpdGhTdGF0ZW1lbnQs
CisgICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsCisgICAgICAgICAgICAgICAgYm9keTog
Ym9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBSZXR1cm4g
dHJ1ZSBpZiB0aGVyZSBpcyBhIGxpbmUgdGVybWluYXRvciBiZWZvcmUgdGhlIG5leHQgdG9rZW4u
CisKKyAgICBmdW5jdGlvbiBwZWVrTGluZVRlcm1pbmF0b3IoKSB7CisgICAgICAgIHZhciBwb3Ms
IGxpbmUsIHN0YXJ0LCBmb3VuZDsKKworICAgICAgICBwb3MgPSBpbmRleDsKKyAgICAgICAgbGlu
ZSA9IGxpbmVOdW1iZXI7CisgICAgICAgIHN0YXJ0ID0gbGluZVN0YXJ0OworICAgICAgICBza2lw
Q29tbWVudCgpOworICAgICAgICBmb3VuZCA9IGxpbmVOdW1iZXIgIT09IGxpbmU7CisgICAgICAg
IGluZGV4ID0gcG9zOworICAgICAgICBsaW5lTnVtYmVyID0gbGluZTsKKyAgICAgICAgbGluZVN0
YXJ0ID0gc3RhcnQ7CisKKyAgICAgICAgcmV0dXJuIGZvdW5kOworICAgIH0KKworICAgIC8vIFRo
cm93IGFuIGV4Y2VwdGlvbgorCisgICAgZnVuY3Rpb24gdGhyb3dFcnJvcih0b2tlbiwgbWVzc2Fn
ZUZvcm1hdCkgeworICAgICAgICB2YXIgZXJyb3IsCisgICAgICAgICAgICBhcmdzID0gQXJyYXku
cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSwKKyAgICAgICAgICAgIG1zZyA9IG1l
c3NhZ2VGb3JtYXQucmVwbGFjZSgKKyAgICAgICAgICAgICAgICAvJShcZCkvZywKKyAgICAgICAg
ICAgICAgICBmdW5jdGlvbiAod2hvbGUsIGluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIGFz
c2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBpbiBy
YW5nZScpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJnc1tpbmRleF07CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgKTsKKworICAgICAgICBpZiAodHlwZW9mIHRva2VuLmxp
bmVOdW1iZXIgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcign
TGluZSAnICsgdG9rZW4ubGluZU51bWJlciArICc6ICcgKyBtc2cpOworICAgICAgICAgICAgZXJy
b3IuaW5kZXggPSB0b2tlbi5zdGFydDsKKyAgICAgICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSB0
b2tlbi5saW5lTnVtYmVyOworICAgICAgICAgICAgZXJyb3IuY29sdW1uID0gdG9rZW4uc3RhcnQg
LSBsaW5lU3RhcnQgKyAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJyb3IgPSBu
ZXcgRXJyb3IoJ0xpbmUgJyArIGxpbmVOdW1iZXIgKyAnOiAnICsgbXNnKTsKKyAgICAgICAgICAg
IGVycm9yLmluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gbGlu
ZU51bWJlcjsKKyAgICAgICAgICAgIGVycm9yLmNvbHVtbiA9IGluZGV4IC0gbGluZVN0YXJ0ICsg
MTsKKyAgICAgICAgfQorCisgICAgICAgIGVycm9yLmRlc2NyaXB0aW9uID0gbXNnOworICAgICAg
ICB0aHJvdyBlcnJvcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yVG9sZXJhbnQo
KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChleHRyYS5l
cnJvcnMpIHsKKyAgICAgICAgICAgICAgICBleHRyYS5lcnJvcnMucHVzaChlKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworCisgICAgLy8gVGhyb3cgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2Yg
dGhlIHRva2VuLgorCisgICAgZnVuY3Rpb24gdGhyb3dVbmV4cGVjdGVkKHRva2VuKSB7CisgICAg
ICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHRocm93RXJy
b3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRFT1MpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFsKSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkTnVtYmVyKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAg
ICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkU3RyaW5nKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7
CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkSWRlbnRp
Zmllcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5
d29yZCkgeworICAgICAgICAgICAgaWYgKGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVl
KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0
ZWRSZXNlcnZlZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmljdCAmJiBpc1N0cmljdE1v
ZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93RXJyb3IodG9r
ZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQm9vbGVhbkxpdGVyYWwsIE51bGxMaXRlcmFsLCBvciBQdW5jdHVhdG9yLgor
ICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2Vu
LnZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBFeHBlY3QgdGhlIG5leHQgdG9rZW4gdG8gbWF0Y2gg
dGhlIHNwZWNpZmllZCBwdW5jdHVhdG9yLgorICAgIC8vIElmIG5vdCwgYW4gZXhjZXB0aW9uIHdp
bGwgYmUgdGhyb3duLgorCisgICAgZnVuY3Rpb24gZXhwZWN0KHZhbHVlKSB7CisgICAgICAgIHZh
ciB0b2tlbiA9IGxleCgpOworICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uUHVuY3R1
YXRvciB8fCB0b2tlbi52YWx1ZSAhPT0gdmFsdWUpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBl
Y3RlZCh0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBFeHBlY3QgdGhlIG5leHQg
dG9rZW4gdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBrZXl3b3JkLgorICAgIC8vIElmIG5vdCwgYW4g
ZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorCisgICAgZnVuY3Rpb24gZXhwZWN0S2V5d29yZChr
ZXl3b3JkKSB7CisgICAgICAgIHZhciB0b2tlbiA9IGxleCgpOworICAgICAgICBpZiAodG9rZW4u
dHlwZSAhPT0gVG9rZW4uS2V5d29yZCB8fCB0b2tlbi52YWx1ZSAhPT0ga2V5d29yZCkgeworICAg
ICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNwZWNpZmllZCBw
dW5jdHVhdG9yLgorCisgICAgZnVuY3Rpb24gbWF0Y2godmFsdWUpIHsKKyAgICAgICAgcmV0dXJu
IGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC52YWx1ZSA9
PT0gdmFsdWU7CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4g
bWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGtleXdvcmQKKworICAgIGZ1bmN0aW9uIG1hdGNoS2V5d29y
ZChrZXl3b3JkKSB7CisgICAgICAgIHJldHVybiBsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5
d29yZCAmJiBsb29rYWhlYWQudmFsdWUgPT09IGtleXdvcmQ7CisgICAgfQorCisgICAgLy8gUmV0
dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gaXMgYW4gYXNzaWdubWVudCBvcGVyYXRvcgorCisg
ICAgZnVuY3Rpb24gbWF0Y2hBc3NpZ24oKSB7CisgICAgICAgIHZhciBvcDsKKworICAgICAgICBp
ZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBvcCA9IGxvb2thaGVhZC52YWx1ZTsKKyAg
ICAgICAgcmV0dXJuIG9wID09PSAnPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnKj0nIHx8Cisg
ICAgICAgICAgICBvcCA9PT0gJy89JyB8fAorICAgICAgICAgICAgb3AgPT09ICclPScgfHwKKyAg
ICAgICAgICAgIG9wID09PSAnKz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJy09JyB8fAorICAg
ICAgICAgICAgb3AgPT09ICc8PD0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJz4+PScgfHwKKyAg
ICAgICAgICAgIG9wID09PSAnPj4+PScgfHwKKyAgICAgICAgICAgIG9wID09PSAnJj0nIHx8Cisg
ICAgICAgICAgICBvcCA9PT0gJ149JyB8fAorICAgICAgICAgICAgb3AgPT09ICd8PSc7CisgICAg
fQorCisgICAgZnVuY3Rpb24gY29uc3VtZVNlbWljb2xvbigpIHsKKyAgICAgICAgdmFyIGxpbmU7
CisKKyAgICAgICAgLy8gQ2F0Y2ggdGhlIHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0
ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0IpLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXgpID09PSAweDNCIHx8IG1hdGNoKCc7JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7
CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIGlmIChsaW5lTnVtYmVyICE9PSBsaW5l
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9va2Fo
ZWFkLnR5cGUgIT09IFRva2VuLkVPRiAmJiAhbWF0Y2goJ30nKSkgeworICAgICAgICAgICAgdGhy
b3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiBwcm92aWRlZCBleHByZXNzaW9uIGlzIExlZnRIYW5kU2lkZUV4cHJlc3Npb24K
KworICAgIGZ1bmN0aW9uIGlzTGVmdEhhbmRTaWRlKGV4cHIpIHsKKyAgICAgICAgcmV0dXJuIGV4
cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgfHwgZXhwci50eXBlID09PSBTeW50YXguTWVt
YmVyRXhwcmVzc2lvbjsKKyAgICB9CisKKyAgICAvLyAxMS4xLjQgQXJyYXkgSW5pdGlhbGlzZXIK
KworICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXlJbml0aWFsaXNlcigpIHsKKyAgICAgICAgdmFyIGVs
ZW1lbnRzID0gW10sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVh
ZDsKKyAgICAgICAgZXhwZWN0KCdbJyk7CisKKyAgICAgICAgd2hpbGUgKCFtYXRjaCgnXScpKSB7
CisgICAgICAgICAgICBpZiAobWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAgIGxleCgpOwor
ICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bigpKTsKKworICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJ10nKSkgeworICAgICAgICAgICAg
ICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBsZXgoKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChkZWxlZ2F0ZS5jcmVhdGVBcnJheUV4cHJlc3Npb24oZWxlbWVudHMpLCBzdGFydFRva2Vu
KTsKKyAgICB9CisKKyAgICAvLyAxMS4xLjUgT2JqZWN0IEluaXRpYWxpc2VyCisKKyAgICBmdW5j
dGlvbiBwYXJzZVByb3BlcnR5RnVuY3Rpb24ocGFyYW0sIGZpcnN0KSB7CisgICAgICAgIHZhciBw
cmV2aW91c1N0cmljdCwgYm9keSwgc3RhcnRUb2tlbjsKKworICAgICAgICBwcmV2aW91c1N0cmlj
dCA9IHN0cmljdDsKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgYm9k
eSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygpOworICAgICAgICBpZiAoZmlyc3QgJiYg
c3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQocGFyYW1bMF0ubmFtZSkpIHsKKyAgICAgICAgICAg
IHRocm93RXJyb3JUb2xlcmFudChmaXJzdCwgTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lKTsKKyAg
ICAgICAgfQorICAgICAgICBzdHJpY3QgPSBwcmV2aW91c1N0cmljdDsKKyAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKG51bGws
IHBhcmFtLCBbXSwgYm9keSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBh
cnNlT2JqZWN0UHJvcGVydHlLZXkoKSB7CisgICAgICAgIHZhciB0b2tlbiwgc3RhcnRUb2tlbjsK
KworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICB0b2tlbiA9IGxleCgp
OworCisgICAgICAgIC8vIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgZnJvbSBw
YXJzZU9iamVjdFByb3BlcnR5KCksIHdoZXJlCisgICAgICAgIC8vIEVPRiBhbmQgUHVuY3R1YXRv
ciB0b2tlbnMgYXJlIGFscmVhZHkgZmlsdGVyZWQgb3V0LgorCisgICAgICAgIGlmICh0b2tlbi50
eXBlID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHRva2VuLnR5cGUgPT09IFRva2VuLk51bWVy
aWNMaXRlcmFsKSB7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIHRva2VuLm9jdGFsKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RP
Y3RhbExpdGVyYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRl
Lm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbiksIHN0YXJ0VG9rZW4pOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRl
SWRlbnRpZmllcih0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHBhcnNlT2JqZWN0UHJvcGVydHkoKSB7CisgICAgICAgIHZhciB0b2tlbiwga2V5LCBpZCwg
dmFsdWUsIHBhcmFtLCBzdGFydFRva2VuOworCisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOwor
ICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisKKyAgICAgICAgICAgIGlkID0gcGFyc2VPYmplY3RQ
cm9wZXJ0eUtleSgpOworCisgICAgICAgICAgICAvLyBQcm9wZXJ0eSBBc3NpZ25tZW50OiBHZXR0
ZXIgYW5kIFNldHRlci4KKworICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnZ2V0JyAm
JiAhbWF0Y2goJzonKSkgeworICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVy
dHlLZXkoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgICAgICAgICBl
eHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlv
bihbXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUu
Y3JlYXRlUHJvcGVydHkoJ2dldCcsIGtleSwgdmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3NldCcgJiYgIW1hdGNoKCc6
JykpIHsKKyAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7Cisg
ICAgICAgICAgICAgICAgZXhwZWN0KCcoJyk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBsb29r
YWhlYWQ7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklkZW50aWZp
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0
b2tlbi52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1
bmN0aW9uKFtdKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBwYXJhbSA9IFsgcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSBdOworICAgICAgICAgICAgICAg
ICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3Bl
cnR5RnVuY3Rpb24ocGFyYW0sIHRva2VuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ3Nl
dCcsIGtleSwgdmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGV4cGVjdCgnOicpOworICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNz
aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVh
dGVQcm9wZXJ0eSgnaW5pdCcsIGlkLCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICB9Cisg
ICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YgfHwgdG9rZW4udHlwZSA9PT0gVG9r
ZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXko
KTsKKyAgICAgICAgICAgIGV4cGVjdCgnOicpOworICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnaW5pdCcsIGtleSwgdmFsdWUpLCBzdGFydFRva2Vu
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0SW5pdGlhbGlz
ZXIoKSB7CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gW10sIHByb3BlcnR5LCBuYW1lLCBrZXks
IGtpbmQsIG1hcCA9IHt9LCB0b1N0cmluZyA9IFN0cmluZywgc3RhcnRUb2tlbjsKKworICAgICAg
ICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4cGVjdCgneycpOworCisgICAg
ICAgIHdoaWxlICghbWF0Y2goJ30nKSkgeworICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZU9i
amVjdFByb3BlcnR5KCk7CisKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5rZXkudHlwZSA9PT0g
U3ludGF4LklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBuYW1lID0gcHJvcGVydHkua2V5
Lm5hbWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5hbWUgPSB0b1N0
cmluZyhwcm9wZXJ0eS5rZXkudmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAga2lu
ZCA9IChwcm9wZXJ0eS5raW5kID09PSAnaW5pdCcpID8gUHJvcGVydHlLaW5kLkRhdGEgOiAocHJv
cGVydHkua2luZCA9PT0gJ2dldCcpID8gUHJvcGVydHlLaW5kLkdldCA6IFByb3BlcnR5S2luZC5T
ZXQ7CisKKyAgICAgICAgICAgIGtleSA9ICckJyArIG5hbWU7CisgICAgICAgICAgICBpZiAoT2Jq
ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwga2V5KSkgeworICAgICAgICAg
ICAgICAgIGlmIChtYXBba2V5XSA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0cmljdCAmJiBraW5kID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJp
Y3REdXBsaWNhdGVQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2lu
ZCAhPT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3Bl
cnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXBba2V5XSAmIGtpbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMu
QWNjZXNzb3JHZXRTZXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG1hcFtrZXldIHw9IGtpbmQ7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIG1hcFtrZXldID0ga2luZDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKKworICAgICAgICAgICAgaWYgKCFt
YXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1cm4gZGVs
ZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMp
LCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMS4xLjYgVGhlIEdyb3VwaW5nIE9wZXJh
dG9yCisKKyAgICBmdW5jdGlvbiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFy
IGV4cHI7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgZXhwciA9IHBhcnNlRXhw
cmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIHJldHVybiBleHBy
OworICAgIH0KKworCisgICAgLy8gMTEuMSBQcmltYXJ5IEV4cHJlc3Npb25zCisKKyAgICBmdW5j
dGlvbiBwYXJzZVByaW1hcnlFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgdHlwZSwgdG9rZW4s
IGV4cHIsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYgKG1hdGNoKCcoJykpIHsKKyAgICAgICAg
ICAgIHJldHVybiBwYXJzZUdyb3VwRXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1hdGNoKCdbJykpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUFycmF5SW5pdGlhbGlz
ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaCgneycpKSB7CisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VPYmplY3RJbml0aWFsaXNlcigpOworICAgICAgICB9CisKKyAgICAgICAg
dHlwZSA9IGxvb2thaGVhZC50eXBlOworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwor
CisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBl
eHByID0gIGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIobGV4KCkudmFsdWUpOworICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdHlwZSA9PT0gVG9rZW4u
TnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgbG9va2FoZWFkLm9j
dGFsKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KGxvb2thaGVhZCwgTWVz
c2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4
cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKGxleCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0
eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdm
dW5jdGlvbicpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25FeHByZXNz
aW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCd0aGlz
JykpIHsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVs
ZWdhdGUuY3JlYXRlVGhpc0V4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCkgeworICAgICAgICAg
ICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHRva2VuLnZhbHVlID0gKHRva2VuLnZhbHVl
ID09PSAndHJ1ZScpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwo
dG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsKSB7
CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgdG9rZW4udmFsdWUgPSBu
dWxsOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwodG9rZW4pOwor
ICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcvJykgfHwgbWF0Y2goJy89JykpIHsKKyAgICAgICAg
ICAgIGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKGNvbGxlY3RSZWdleCgpKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0
ZUxpdGVyYWwoc2NhblJlZ0V4cCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBlZWso
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChsZXgoKSk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFy
dFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMS4yIExlZnQtSGFuZC1TaWRlIEV4cHJlc3Npb25z
CisKKyAgICBmdW5jdGlvbiBwYXJzZUFyZ3VtZW50cygpIHsKKyAgICAgICAgdmFyIGFyZ3MgPSBb
XTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHsK
KyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGFy
Z3MucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOworICAgICAgICAgICAgICAgIGlm
IChtYXRjaCgnKScpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIHJldHVybiBhcmdzOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHBhcnNlTm9uQ29tcHV0ZWRQcm9wZXJ0eSgpIHsKKyAgICAgICAg
dmFyIHRva2VuLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisgICAgICAgIHRva2VuID0gbGV4KCk7CisKKyAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJOYW1l
KHRva2VuKSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUlkZW50
aWZpZXIodG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
YXJzZU5vbkNvbXB1dGVkTWVtYmVyKCkgeworICAgICAgICBleHBlY3QoJy4nKTsKKworICAgICAg
ICByZXR1cm4gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2VDb21wdXRlZE1lbWJlcigpIHsKKyAgICAgICAgdmFyIGV4cHI7CisKKyAgICAgICAg
ZXhwZWN0KCdbJyk7CisKKyAgICAgICAgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAg
ICAgIGV4cGVjdCgnXScpOworCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHBhcnNlTmV3RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGNhbGxlZSwgYXJncywg
c3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBl
eHBlY3RLZXl3b3JkKCduZXcnKTsKKyAgICAgICAgY2FsbGVlID0gcGFyc2VMZWZ0SGFuZFNpZGVF
eHByZXNzaW9uKCk7CisgICAgICAgIGFyZ3MgPSBtYXRjaCgnKCcpID8gcGFyc2VBcmd1bWVudHMo
KSA6IFtdOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZU5ld0V4cHJlc3Npb24oY2FsbGVlLCBhcmdzKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2VMZWZ0SGFuZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCkgeworICAgICAg
ICB2YXIgcHJldmlvdXNBbGxvd0luLCBleHByLCBhcmdzLCBwcm9wZXJ0eSwgc3RhcnRUb2tlbjsK
KworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIHByZXZpb3VzQWxs
b3dJbiA9IHN0YXRlLmFsbG93SW47CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworICAg
ICAgICBleHByID0gbWF0Y2hLZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDog
cGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOworICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlv
dXNBbGxvd0luOworCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgn
LicpKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZU5vbkNvbXB1dGVkTWVtYmVy
KCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Np
b24oJy4nLCBleHByLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCco
JykpIHsKKyAgICAgICAgICAgICAgICBhcmdzID0gcGFyc2VBcmd1bWVudHMoKTsKKyAgICAgICAg
ICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlQ2FsbEV4cHJlc3Npb24oZXhwciwgYXJncyk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCdbJykpIHsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eSA9IHBhcnNlQ29tcHV0ZWRNZW1iZXIoKTsKKyAgICAgICAgICAgICAgICBleHByID0g
ZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIsIHByb3BlcnR5KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VM
ZWZ0SGFuZFNpZGVFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgcHJldmlvdXNBbGxvd0luLCBl
eHByLCBwcm9wZXJ0eSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2Fo
ZWFkOworCisgICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFsbG93SW47CisgICAgICAg
IGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uKCkgOiBwYXJz
ZVByaW1hcnlFeHByZXNzaW9uKCk7CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0Fs
bG93SW47CisKKyAgICAgICAgd2hpbGUgKG1hdGNoKCcuJykgfHwgbWF0Y2goJ1snKSkgeworICAg
ICAgICAgICAgaWYgKG1hdGNoKCdbJykpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBh
cnNlQ29tcHV0ZWRNZW1iZXIoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3Jl
YXRlTWVtYmVyRXhwcmVzc2lvbignWycsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZU5vbkNvbXB1dGVkTWVtYmVy
KCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJlc3Np
b24oJy4nLCBleHByLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxl
Z2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTEuMyBQb3N0Zml4IEV4cHJlc3Npb25zCisKKyAg
ICBmdW5jdGlvbiBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgZXhwciwg
dG9rZW4sIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwciA9IHBhcnNlTGVm
dEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpOworCisgICAgICAgIGlmIChsb29rYWhlYWQu
dHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgaWYgKChtYXRjaCgnKysn
KSB8fCBtYXRjaCgnLS0nKSkgJiYgIXBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAg
ICAgICAgLy8gMTEuMy4xLCAxMS4zLjIKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4
cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChleHByLm5h
bWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2Fn
ZXMuU3RyaWN0TEhTUG9zdGZpeCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAg
ICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlUG9zdGZpeEV4
cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAgIC8vIDExLjQg
VW5hcnkgT3BlcmF0b3JzCisKKyAgICBmdW5jdGlvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpIHsK
KyAgICAgICAgdmFyIHRva2VuLCBleHByLCBzdGFydFRva2VuOworCisgICAgICAgIGlmIChsb29r
YWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9r
ZW4uS2V5d29yZCkgeworICAgICAgICAgICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24o
KTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKysnKSB8fCBtYXRjaCgnLS0nKSkgeworICAg
ICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIHRva2VuID0gbGV4
KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAg
ICAgIC8vIDExLjQuNCwgMTEuNC41CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIudHlw
ZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChleHByLm5hbWUpKSB7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RM
SFNQcmVmaXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWlzTGVmdEhhbmRT
aWRlKGV4cHIpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNz
YWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhw
cik7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2Vu
KTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKycpIHx8IG1hdGNoKCctJykgfHwgbWF0Y2go
J34nKSB8fCBtYXRjaCgnIScpKSB7CisgICAgICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFk
OworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVu
YXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVuYXJ5
RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgZXhwcik7CisgICAgICAgICAgICBleHByID0gZGVsZWdh
dGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfSBlbHNlIGlmIChtYXRjaEtl
eXdvcmQoJ2RlbGV0ZScpIHx8IG1hdGNoS2V5d29yZCgndm9pZCcpIHx8IG1hdGNoS2V5d29yZCgn
dHlwZW9mJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAg
ICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNz
aW9uKCk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9u
KHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5k
KGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLm9wZXJh
dG9yID09PSAnZGVsZXRlJyAmJiBleHByLmFyZ3VtZW50LnR5cGUgPT09IFN5bnRheC5JZGVudGlm
aWVyKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5T
dHJpY3REZWxldGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgZXhwciA9IHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBleHByOworICAgIH0KKworICAgIGZ1bmN0aW9uIGJpbmFyeVByZWNlZGVuY2UodG9r
ZW4sIGFsbG93SW4pIHsKKyAgICAgICAgdmFyIHByZWMgPSAwOworCisgICAgICAgIGlmICh0b2tl
bi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIHRva2VuLnR5cGUgIT09IFRva2VuLktleXdv
cmQpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNo
ICh0b2tlbi52YWx1ZSkgeworICAgICAgICBjYXNlICd8fCc6CisgICAgICAgICAgICBwcmVjID0g
MTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJyYmJzoKKyAgICAgICAgICAg
IHByZWMgPSAyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnfCc6CisgICAg
ICAgICAgICBwcmVjID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ14n
OgorICAgICAgICAgICAgcHJlYyA9IDQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlICcmJzoKKyAgICAgICAgICAgIHByZWMgPSA1OworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSAnPT0nOgorICAgICAgICBjYXNlICchPSc6CisgICAgICAgIGNhc2UgJz09PSc6
CisgICAgICAgIGNhc2UgJyE9PSc6CisgICAgICAgICAgICBwcmVjID0gNjsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgJzwnOgorICAgICAgICBjYXNlICc+JzoKKyAgICAgICAg
Y2FzZSAnPD0nOgorICAgICAgICBjYXNlICc+PSc6CisgICAgICAgIGNhc2UgJ2luc3RhbmNlb2Yn
OgorICAgICAgICAgICAgcHJlYyA9IDc7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlICdpbic6CisgICAgICAgICAgICBwcmVjID0gYWxsb3dJbiA/IDcgOiAwOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnPDwnOgorICAgICAgICBjYXNlICc+Pic6CisgICAg
ICAgIGNhc2UgJz4+Pic6CisgICAgICAgICAgICBwcmVjID0gODsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgJysnOgorICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgIHBy
ZWMgPSA5OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnKic6CisgICAgICAg
IGNhc2UgJy8nOgorICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgIHByZWMgPSAxMTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwcmVjOworICAgIH0KKworICAgIC8vIDExLjUg
TXVsdGlwbGljYXRpdmUgT3BlcmF0b3JzCisgICAgLy8gMTEuNiBBZGRpdGl2ZSBPcGVyYXRvcnMK
KyAgICAvLyAxMS43IEJpdHdpc2UgU2hpZnQgT3BlcmF0b3JzCisgICAgLy8gMTEuOCBSZWxhdGlv
bmFsIE9wZXJhdG9ycworICAgIC8vIDExLjkgRXF1YWxpdHkgT3BlcmF0b3JzCisgICAgLy8gMTEu
MTAgQmluYXJ5IEJpdHdpc2UgT3BlcmF0b3JzCisgICAgLy8gMTEuMTEgQmluYXJ5IExvZ2ljYWwg
T3BlcmF0b3JzCisKKyAgICBmdW5jdGlvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKSB7CisgICAg
ICAgIHZhciBtYXJrZXIsIG1hcmtlcnMsIGV4cHIsIHRva2VuLCBwcmVjLCBzdGFjaywgcmlnaHQs
IG9wZXJhdG9yLCBsZWZ0LCBpOworCisgICAgICAgIG1hcmtlciA9IGxvb2thaGVhZDsKKyAgICAg
ICAgbGVmdCA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgdG9rZW4gPSBsb29r
YWhlYWQ7CisgICAgICAgIHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBzdGF0ZS5hbGxv
d0luKTsKKyAgICAgICAgaWYgKHByZWMgPT09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBsZWZ0
OworICAgICAgICB9CisgICAgICAgIHRva2VuLnByZWMgPSBwcmVjOworICAgICAgICBsZXgoKTsK
KworICAgICAgICBtYXJrZXJzID0gW21hcmtlciwgbG9va2FoZWFkXTsKKyAgICAgICAgcmlnaHQg
PSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIHN0YWNrID0gW2xlZnQsIHRva2Vu
LCByaWdodF07CisKKyAgICAgICAgd2hpbGUgKChwcmVjID0gYmluYXJ5UHJlY2VkZW5jZShsb29r
YWhlYWQsIHN0YXRlLmFsbG93SW4pKSA+IDApIHsKKworICAgICAgICAgICAgLy8gUmVkdWNlOiBt
YWtlIGEgYmluYXJ5IGV4cHJlc3Npb24gZnJvbSB0aGUgdGhyZWUgdG9wbW9zdCBlbnRyaWVzLgor
ICAgICAgICAgICAgd2hpbGUgKChzdGFjay5sZW5ndGggPiAyKSAmJiAocHJlYyA8PSBzdGFja1tz
dGFjay5sZW5ndGggLSAyXS5wcmVjKSkgeworICAgICAgICAgICAgICAgIHJpZ2h0ID0gc3RhY2su
cG9wKCk7CisgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBzdGFjay5wb3AoKS52YWx1ZTsKKyAg
ICAgICAgICAgICAgICBsZWZ0ID0gc3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgZXhwciA9
IGRlbGVnYXRlLmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgICAgICBtYXJrZXJzLnBvcCgpOworICAgICAgICAgICAgICAgIG1hcmtlciA9
IG1hcmtlcnNbbWFya2Vycy5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5t
YXJrRW5kKGV4cHIsIG1hcmtlcik7CisgICAgICAgICAgICAgICAgc3RhY2sucHVzaChleHByKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU2hpZnQuCisgICAgICAgICAgICB0b2tl
biA9IGxleCgpOworICAgICAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CisgICAgICAgICAgICBz
dGFjay5wdXNoKHRva2VuKTsKKyAgICAgICAgICAgIG1hcmtlcnMucHVzaChsb29rYWhlYWQpOwor
ICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBz
dGFjay5wdXNoKGV4cHIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluYWwgcmVkdWNlIHRv
IGNsZWFuLXVwIHRoZSBzdGFjay4KKyAgICAgICAgaSA9IHN0YWNrLmxlbmd0aCAtIDE7CisgICAg
ICAgIGV4cHIgPSBzdGFja1tpXTsKKyAgICAgICAgbWFya2Vycy5wb3AoKTsKKyAgICAgICAgd2hp
bGUgKGkgPiAxKSB7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlQmluYXJ5RXhw
cmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kgLSAyXSwgZXhwcik7CisgICAgICAg
ICAgICBpIC09IDI7CisgICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJzLnBvcCgpOworICAgICAg
ICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBtYXJrZXIpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisKKyAgICAvLyAxMS4xMiBDb25kaXRpb25hbCBPcGVy
YXRvcgorCisgICAgZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb24oKSB7CisgICAg
ICAgIHZhciBleHByLCBwcmV2aW91c0FsbG93SW4sIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4
cHIgPSBwYXJzZUJpbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICBpZiAobWF0Y2goJz8nKSkg
eworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0
ZS5hbGxvd0luOworICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisgICAgICAgICAg
ICBjb25zZXF1ZW50ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAgICAgICAg
c3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKyAgICAgICAgICAgIGV4cGVjdCgnOicp
OworICAgICAgICAgICAgYWx0ZXJuYXRlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOwor
CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlQ29uZGl0aW9uYWxFeHByZXNzaW9u
KGV4cHIsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7CisgICAgICAgICAgICBkZWxlZ2F0ZS5tYXJr
RW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7
CisgICAgfQorCisgICAgLy8gMTEuMTMgQXNzaWdubWVudCBPcGVyYXRvcnMKKworICAgIGZ1bmN0
aW9uIHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0b2tlbiwgbGVm
dCwgcmlnaHQsIG5vZGUsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7
CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgbm9kZSA9IGxlZnQg
PSBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaEFzc2ln
bigpKSB7CisgICAgICAgICAgICAvLyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisgICAgICAgICAg
ICBpZiAoIWlzTGVmdEhhbmRTaWRlKGxlZnQpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gMTEuMTMuMQorICAgICAgICAgICAgaWYgKHN0cmljdCAm
JiBsZWZ0LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQobGVm
dC5uYW1lKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVz
c2FnZXMuU3RyaWN0TEhTQXNzaWdubWVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICByaWdodCA9IHBhcnNlQXNzaWdubWVudEV4cHJl
c3Npb24oKTsKKyAgICAgICAgICAgIG5vZGUgPSBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNy
ZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBsZWZ0LCByaWdodCksIHN0YXJ0
VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAg
Ly8gMTEuMTQgQ29tbWEgT3BlcmF0b3IKKworICAgIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbigp
IHsKKyAgICAgICAgdmFyIGV4cHIsIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAg
ZXhwciA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKworICAgICAgICBpZiAobWF0Y2go
JywnKSkgeworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVNlcXVlbmNlRXhwcmVz
c2lvbihbIGV4cHIgXSk7CisKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkgeworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAg
ICAgICAgICAgZXhwci5leHByZXNzaW9ucy5wdXNoKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwg
c3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisK
KyAgICAvLyAxMi4xIEJsb2NrCisKKyAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudExpc3QoKSB7
CisgICAgICAgIHZhciBsaXN0ID0gW10sCisgICAgICAgICAgICBzdGF0ZW1lbnQ7CisKKyAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkg
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3Rh
dGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAodHlwZW9mIHN0
YXRlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGxpc3QucHVzaChzdGF0ZW1lbnQpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VCbG9jaygp
IHsKKyAgICAgICAgdmFyIGJsb2NrLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4g
PSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdCgneycpOworCisgICAgICAgIGJsb2NrID0gcGFy
c2VTdGF0ZW1lbnRMaXN0KCk7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlQmxvY2tTdGF0ZW1lbnQoYmxvY2sp
LCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMi4yIFZhcmlhYmxlIFN0YXRlbWVudAor
CisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKSB7CisgICAgICAgIHZhciB0
b2tlbiwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAg
ICAgICB0b2tlbiA9IGxleCgpOworCisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5J
ZGVudGlmaWVyKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlSWRl
bnRpZmllcih0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihraW5kKSB7CisgICAgICAgIHZhciBpbml0ID0gbnVs
bCwgaWQsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgaWQgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAgIC8vIDEyLjIu
MQorICAgICAgICBpZiAoc3RyaWN0ICYmIGlzUmVzdHJpY3RlZFdvcmQoaWQubmFtZSkpIHsKKyAg
ICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0VmFyTmFtZSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2luZCA9PT0gJ2NvbnN0JykgeworICAgICAgICAg
ICAgZXhwZWN0KCc9Jyk7CisgICAgICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCc9JykpIHsKKyAgICAgICAgICAgIGxl
eCgpOworICAgICAgICAgICAgaW5pdCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0
ZVZhcmlhYmxlRGVjbGFyYXRvcihpZCwgaW5pdCksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoa2luZCkgeworICAgICAgICB2
YXIgbGlzdCA9IFtdOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGxpc3QucHVzaChwYXJz
ZVZhcmlhYmxlRGVjbGFyYXRpb24oa2luZCkpOworICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcp
KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBs
ZXgoKTsKKyAgICAgICAgfSB3aGlsZSAoaW5kZXggPCBsZW5ndGgpOworCisgICAgICAgIHJldHVy
biBsaXN0OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSB7
CisgICAgICAgIHZhciBkZWNsYXJhdGlvbnM7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgndmFy
Jyk7CisKKyAgICAgICAgZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlz
dCgpOworCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVs
ZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsICd2YXInKTsKKyAg
ICB9CisKKyAgICAvLyBraW5kIG1heSBiZSBgY29uc3RgIG9yIGBsZXRgCisgICAgLy8gQm90aCBh
cmUgZXhwZXJpbWVudGFsIGFuZCBub3QgaW4gdGhlIHNwZWNpZmljYXRpb24geWV0LgorICAgIC8v
IHNlZSBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmNvbnN0
CisgICAgLy8gYW5kIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1v
bnk6bGV0CisgICAgZnVuY3Rpb24gcGFyc2VDb25zdExldERlY2xhcmF0aW9uKGtpbmQpIHsKKyAg
ICAgICAgdmFyIGRlY2xhcmF0aW9ucywgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2Vu
ID0gbG9va2FoZWFkOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoa2luZCk7CisKKyAgICAgICAg
ZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5kKTsKKworICAg
ICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtF
bmQoZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbnMsIGtpbmQp
LCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMi4zIEVtcHR5IFN0YXRlbWVudAorCisg
ICAgZnVuY3Rpb24gcGFyc2VFbXB0eVN0YXRlbWVudCgpIHsKKyAgICAgICAgZXhwZWN0KCc7Jyk7
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVFbXB0eVN0YXRlbWVudCgpOworICAgIH0K
KworICAgIC8vIDEyLjQgRXhwcmVzc2lvbiBTdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNl
RXhwcmVzc2lvblN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGV4cHIgPSBwYXJzZUV4cHJlc3Np
b24oKTsKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworICAgICAgICByZXR1cm4gZGVsZWdh
dGUuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChleHByKTsKKyAgICB9CisKKyAgICAvLyAxMi41
IElmIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VJZlN0YXRlbWVudCgpIHsKKyAgICAg
ICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZTsKKworICAgICAgICBleHBlY3RLZXl3
b3JkKCdpZicpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIHRlc3QgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKKworICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICBjb25zZXF1
ZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdlbHNl
JykpIHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgYWx0ZXJuYXRlID0gcGFyc2VT
dGF0ZW1lbnQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFsdGVybmF0ZSA9IG51
bGw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlSWZTdGF0ZW1l
bnQodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAgICB9CisKKyAgICAvLyAxMi42IEl0
ZXJhdGlvbiBTdGF0ZW1lbnRzCisKKyAgICBmdW5jdGlvbiBwYXJzZURvV2hpbGVTdGF0ZW1lbnQo
KSB7CisgICAgICAgIHZhciBib2R5LCB0ZXN0LCBvbGRJbkl0ZXJhdGlvbjsKKworICAgICAgICBl
eHBlY3RLZXl3b3JkKCdkbycpOworCisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5J
dGVyYXRpb247CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICBi
b2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9s
ZEluSXRlcmF0aW9uOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisKKyAgICAg
ICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworCisg
ICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGlmIChtYXRjaCgnOycpKSB7CisgICAgICAg
ICAgICBsZXgoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVE
b1doaWxlU3RhdGVtZW50KGJvZHksIHRlc3QpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
V2hpbGVTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciB0ZXN0LCBib2R5LCBvbGRJbkl0ZXJhdGlv
bjsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpOworCisgICAgICAgIGV4cGVjdCgn
KCcpOworCisgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBleHBl
Y3QoJyknKTsKKworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uOwor
ICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7CisKKyAgICAgICAgYm9keSA9IHBhcnNl
U3RhdGVtZW50KCk7CisKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlv
bjsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlV2hpbGVTdGF0ZW1lbnQodGVzdCwg
Ym9keSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGb3JWYXJpYWJsZURlY2xhcmF0aW9u
KCkgeworICAgICAgICB2YXIgdG9rZW4sIGRlY2xhcmF0aW9ucywgc3RhcnRUb2tlbjsKKworICAg
ICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICB0b2tlbiA9IGxleCgpOworICAg
ICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CisKKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlVmFyaWFibGVEZWNs
YXJhdGlvbihkZWNsYXJhdGlvbnMsIHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcGFyc2VGb3JTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBpbml0LCB0
ZXN0LCB1cGRhdGUsIGxlZnQsIHJpZ2h0LCBib2R5LCBvbGRJbkl0ZXJhdGlvbjsKKworICAgICAg
ICBpbml0ID0gdGVzdCA9IHVwZGF0ZSA9IG51bGw7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgn
Zm9yJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc7Jykp
IHsKKyAgICAgICAgICAgIGxleCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KG1hdGNoS2V5d29yZCgndmFyJykgfHwgbWF0Y2hLZXl3b3JkKCdsZXQnKSkgeworICAgICAgICAg
ICAgICAgIHN0YXRlLmFsbG93SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbml0ID0gcGFy
c2VGb3JWYXJpYWJsZURlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJ
biA9IHRydWU7CisKKyAgICAgICAgICAgICAgICBpZiAoaW5pdC5kZWNsYXJhdGlvbnMubGVuZ3Ro
ID09PSAxICYmIG1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAgICAgICAgICAgICBsZXgo
KTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGluaXQ7CisgICAgICAgICAgICAgICAgICAg
IHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGluaXQgPSBu
dWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGluaXQgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKwor
ICAgICAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2luJykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzTGVmdEhhbmRTaWRlKGluaXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vy
cm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkZvckluKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAg
ICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUV4cHJl
c3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1
bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgZXhwZWN0KCc7Jyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmluZWQnKSB7
CisKKyAgICAgICAgICAgIGlmICghbWF0Y2goJzsnKSkgeworICAgICAgICAgICAgICAgIHRlc3Qg
PSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGV4cGVjdCgn
OycpOworCisgICAgICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHsKKyAgICAgICAgICAgICAgICB1
cGRhdGUgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5J
dGVyYXRpb247CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICBi
b2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9s
ZEluSXRlcmF0aW9uOworCisgICAgICAgIHJldHVybiAodHlwZW9mIGxlZnQgPT09ICd1bmRlZmlu
ZWQnKSA/CisgICAgICAgICAgICAgICAgZGVsZWdhdGUuY3JlYXRlRm9yU3RhdGVtZW50KGluaXQs
IHRlc3QsIHVwZGF0ZSwgYm9keSkgOgorICAgICAgICAgICAgICAgIGRlbGVnYXRlLmNyZWF0ZUZv
ckluU3RhdGVtZW50KGxlZnQsIHJpZ2h0LCBib2R5KTsKKyAgICB9CisKKyAgICAvLyAxMi43IFRo
ZSBjb250aW51ZSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlQ29udGludWVTdGF0ZW1l
bnQoKSB7CisgICAgICAgIHZhciBsYWJlbCA9IG51bGwsIGtleTsKKworICAgICAgICBleHBlY3RL
ZXl3b3JkKCdjb250aW51ZScpOworCisgICAgICAgIC8vIE9wdGltaXplIHRoZSBtb3N0IGNvbW1v
biBmb3JtOiAnY29udGludWU7Jy4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4
KSA9PT0gMHgzQikgeworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgIGlmICghc3Rh
dGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdl
cy5JbGxlZ2FsQ29udGludWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
ZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAocGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIGlmICghc3RhdGUu
aW5JdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5J
bGxlZ2FsQ29udGludWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZGVs
ZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAg
IGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAgICAgICAga2V5ID0g
JyQnICsgbGFiZWwubmFtZTsKKyAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNP
d25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1lKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAg
ICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIXN0YXRlLmluSXRlcmF0aW9uKSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2FsQ29udGludWUpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUNvbnRpbnVlU3RhdGVtZW50KGxhYmVs
KTsKKyAgICB9CisKKyAgICAvLyAxMi44IFRoZSBicmVhayBzdGF0ZW1lbnQKKworICAgIGZ1bmN0
aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBsYWJlbCA9IG51bGwsIGtl
eTsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdicmVhaycpOworCisgICAgICAgIC8vIENhdGNo
IHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xvbiAoVSsw
MDNCKS4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzQikgewor
ICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9u
IHx8IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgaWYgKCEoc3RhdGUu
aW5JdGVyYXRpb24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7
CisgICAgICAgICAgICBsYWJlbCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAg
ICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5hbWU7CisgICAgICAgICAgICBpZiAoIU9iamVjdC5w
cm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0ZS5sYWJlbFNldCwga2V5KSkgeworICAg
ICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwu
bmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNv
bG9uKCk7CisKKyAgICAgICAgaWYgKGxhYmVsID09PSBudWxsICYmICEoc3RhdGUuaW5JdGVyYXRp
b24gfHwgc3RhdGUuaW5Td2l0Y2gpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNz
YWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRl
LmNyZWF0ZUJyZWFrU3RhdGVtZW50KGxhYmVsKTsKKyAgICB9CisKKyAgICAvLyAxMi45IFRoZSBy
ZXR1cm4gc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVJldHVyblN0YXRlbWVudCgpIHsK
KyAgICAgICAgdmFyIGFyZ3VtZW50ID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdy
ZXR1cm4nKTsKKworICAgICAgICBpZiAoIXN0YXRlLmluRnVuY3Rpb25Cb2R5KSB7CisgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLklsbGVnYWxSZXR1cm4pOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gJ3JldHVybicgZm9sbG93ZWQgYnkgYSBzcGFjZSBhbmQgYW4g
aWRlbnRpZmllciBpcyB2ZXJ5IGNvbW1vbi4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KSA9PT0gMHgyMCkgeworICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7CisgICAgICAgICAgICAgICAgYXJndW1lbnQg
PSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0YXRlbWVudChh
cmd1bWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGVla0xp
bmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1
cm5TdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1hdGNoKCc7Jykp
IHsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSAmJiBsb29rYWhlYWQudHlwZSAhPT0gVG9r
ZW4uRU9GKSB7CisgICAgICAgICAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsK
KworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3VtZW50
KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMCBUaGUgd2l0aCBzdGF0ZW1lbnQKKworICAgIGZ1bmN0
aW9uIHBhcnNlV2l0aFN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIG9iamVjdCwgYm9keTsKKwor
ICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAvLyBUT0RPKGlrYXJpZW5hdG9yKTog
U2hvdWxkIHdlIHVwZGF0ZSB0aGUgdGVzdCBjYXNlcyBpbnN0ZWFkPworICAgICAgICAgICAgc2tp
cENvbW1lbnQoKTsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMu
U3RyaWN0TW9kZVdpdGgpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2l0
aCcpOworCisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIG9iamVjdCA9IHBhcnNlRXhw
cmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGJvZHkgPSBwYXJz
ZVN0YXRlbWVudCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVXaXRoU3RhdGVt
ZW50KG9iamVjdCwgYm9keSk7CisgICAgfQorCisgICAgLy8gMTIuMTAgVGhlIHN3aXRoIHN0YXRl
bWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hDYXNlKCkgeworICAgICAgICB2YXIgdGVz
dCwgY29uc2VxdWVudCA9IFtdLCBzdGF0ZW1lbnQsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3Rh
cnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZGVmYXVsdCcp
KSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHRlc3QgPSBudWxsOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZXhwZWN0S2V5d29yZCgnY2FzZScpOworICAgICAgICAg
ICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICB9CisgICAgICAgIGV4cGVjdCgn
OicpOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYg
KG1hdGNoKCd9JykgfHwgbWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykgfHwgbWF0Y2hLZXl3b3JkKCdj
YXNlJykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHN0YXRlbWVudCA9IHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBjb25zZXF1ZW50
LnB1c2goc3RhdGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5t
YXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVN3aXRjaENhc2UodGVzdCwgY29uc2VxdWVudCksIHN0YXJ0
VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlU3dpdGNoU3RhdGVtZW50KCkgewor
ICAgICAgICB2YXIgZGlzY3JpbWluYW50LCBjYXNlcywgY2xhdXNlLCBvbGRJblN3aXRjaCwgZGVm
YXVsdEZvdW5kOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3N3aXRjaCcpOworCisgICAgICAg
IGV4cGVjdCgnKCcpOworCisgICAgICAgIGRpc2NyaW1pbmFudCA9IHBhcnNlRXhwcmVzc2lvbigp
OworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGV4cGVjdCgneycpOworCisgICAg
ICAgIGNhc2VzID0gW107CisKKyAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAg
IGxleCgpOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVu
dChkaXNjcmltaW5hbnQsIGNhc2VzKTsKKyAgICAgICAgfQorCisgICAgICAgIG9sZEluU3dpdGNo
ID0gc3RhdGUuaW5Td2l0Y2g7CisgICAgICAgIHN0YXRlLmluU3dpdGNoID0gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdEZvdW5kID0gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3Ro
KSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xhdXNlID0gcGFyc2VTd2l0Y2hDYXNlKCk7
CisgICAgICAgICAgICBpZiAoY2xhdXNlLnRlc3QgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZGVmYXVsdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLk11bHRpcGxlRGVmYXVsdHNJblN3aXRjaCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGRlZmF1bHRGb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlcy5wdXNoKGNsYXVzZSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZS5p
blN3aXRjaCA9IG9sZEluU3dpdGNoOworCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50LCBjYXNl
cyk7CisgICAgfQorCisgICAgLy8gMTIuMTMgVGhlIHRocm93IHN0YXRlbWVudAorCisgICAgZnVu
Y3Rpb24gcGFyc2VUaHJvd1N0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGFyZ3VtZW50OworCisg
ICAgICAgIGV4cGVjdEtleXdvcmQoJ3Rocm93Jyk7CisKKyAgICAgICAgaWYgKHBlZWtMaW5lVGVy
bWluYXRvcigpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5OZXdsaW5l
QWZ0ZXJUaHJvdyk7CisgICAgICAgIH0KKworICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVz
c2lvbigpOworCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4g
ZGVsZWdhdGUuY3JlYXRlVGhyb3dTdGF0ZW1lbnQoYXJndW1lbnQpOworICAgIH0KKworICAgIC8v
IDEyLjE0IFRoZSB0cnkgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUNhdGNoQ2xhdXNl
KCkgeworICAgICAgICB2YXIgcGFyYW0sIGJvZHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3Rh
cnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnY2F0Y2gnKTsKKwor
ICAgICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgaWYgKG1hdGNoKCcpJykpIHsKKyAgICAgICAg
ICAgIHRocm93VW5leHBlY3RlZChsb29rYWhlYWQpOworICAgICAgICB9CisKKyAgICAgICAgcGFy
YW0gPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAvLyAxMi4xNC4xCisgICAg
ICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbS5uYW1lKSkgeworICAgICAg
ICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RDYXRjaFZhcmlhYmxl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnKScpOworICAgICAgICBib2R5ID0gcGFy
c2VCbG9jaygpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVh
dGVDYXRjaENsYXVzZShwYXJhbSwgYm9keSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHBhcnNlVHJ5U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYmxvY2ssIGhhbmRsZXJz
ID0gW10sIGZpbmFsaXplciA9IG51bGw7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgndHJ5Jyk7
CisKKyAgICAgICAgYmxvY2sgPSBwYXJzZUJsb2NrKCk7CisKKyAgICAgICAgaWYgKG1hdGNoS2V5
d29yZCgnY2F0Y2gnKSkgeworICAgICAgICAgICAgaGFuZGxlcnMucHVzaChwYXJzZUNhdGNoQ2xh
dXNlKCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZmluYWxseScp
KSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIGZpbmFsaXplciA9IHBhcnNlQmxv
Y2soKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYW5kbGVycy5sZW5ndGggPT09IDAgJiYg
IWZpbmFsaXplcikgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTm9DYXRj
aE9yRmluYWxseSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRl
VHJ5U3RhdGVtZW50KGJsb2NrLCBbXSwgaGFuZGxlcnMsIGZpbmFsaXplcik7CisgICAgfQorCisg
ICAgLy8gMTIuMTUgVGhlIGRlYnVnZ2VyIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VE
ZWJ1Z2dlclN0YXRlbWVudCgpIHsKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnZGVidWdnZXInKTsK
KworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRl
LmNyZWF0ZURlYnVnZ2VyU3RhdGVtZW50KCk7CisgICAgfQorCisgICAgLy8gMTIgU3RhdGVtZW50
cworCisgICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciB0eXBlID0g
bG9va2FoZWFkLnR5cGUsCisgICAgICAgICAgICBleHByLAorICAgICAgICAgICAgbGFiZWxlZEJv
ZHksCisgICAgICAgICAgICBrZXksCisgICAgICAgICAgICBzdGFydFRva2VuOworCisgICAgICAg
IGlmICh0eXBlID09PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChs
b29rYWhlYWQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0
dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSAneycpIHsKKyAgICAgICAgICAgIHJldHVybiBw
YXJzZUJsb2NrKCk7CisgICAgICAgIH0KKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFk
OworCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgY2FzZSAnOyc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VFbXB0eVN0YXRlbWVudCgp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudCgpLCBzdGFydFRv
a2VuKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uS2V5d29y
ZCkgeworICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAg
IGNhc2UgJ2JyZWFrJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChw
YXJzZUJyZWFrU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnY29u
dGludWUnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlQ29u
dGludWVTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdkZWJ1Z2dl
cic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VEZWJ1Z2dl
clN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2RvJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZURvV2hpbGVTdGF0ZW1lbnQo
KSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdmb3InOgorICAgICAgICAgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRm9yU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4p
OworICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpLCBzdGFydFRva2VuKTsK
KyAgICAgICAgICAgIGNhc2UgJ2lmJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUu
bWFya0VuZChwYXJzZUlmU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2Fz
ZSAncmV0dXJuJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJz
ZVJldHVyblN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3N3aXRj
aCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VTd2l0Y2hT
dGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICd0aHJvdyc6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VUaHJvd1N0YXRlbWVudCgp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3RyeSc6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VUcnlTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7
CisgICAgICAgICAgICBjYXNlICd2YXInOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5tYXJrRW5kKHBhcnNlVmFyaWFibGVTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAg
ICAgICBjYXNlICd3aGlsZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtF
bmQocGFyc2VXaGlsZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2Ug
J3dpdGgnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlV2l0
aFN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBleHBy
ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgLy8gMTIuMTIgTGFiZWxsZWQgU3RhdGVt
ZW50cworICAgICAgICBpZiAoKGV4cHIudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIpICYmIG1h
dGNoKCc6JykpIHsKKyAgICAgICAgICAgIGxleCgpOworCisgICAgICAgICAgICBrZXkgPSAnJCcg
KyBleHByLm5hbWU7CisgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w
ZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dF
cnJvcih7fSwgTWVzc2FnZXMuUmVkZWNsYXJhdGlvbiwgJ0xhYmVsJywgZXhwci5uYW1lKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGUubGFiZWxTZXRba2V5XSA9IHRydWU7Cisg
ICAgICAgICAgICBsYWJlbGVkQm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICBk
ZWxldGUgc3RhdGUubGFiZWxTZXRba2V5XTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5t
YXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUxhYmVsZWRTdGF0ZW1lbnQoZXhwciwgbGFiZWxlZEJvZHkp
LCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsK
KworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVFeHByZXNz
aW9uU3RhdGVtZW50KGV4cHIpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICAvLyAxMyBGdW5j
dGlvbiBEZWZpbml0aW9uCisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVu
dHMoKSB7CisgICAgICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtdLCB0
b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQsCisgICAgICAgICAgICBvbGRMYWJlbFNl
dCwgb2xkSW5JdGVyYXRpb24sIG9sZEluU3dpdGNoLCBvbGRJbkZ1bmN0aW9uQm9keSwgc3RhcnRU
b2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBleHBlY3Qo
J3snKTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlm
IChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgeworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7
CisKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAg
ICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7CisgICAgICAgICAg
ICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9uLnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7
CisgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgZGlyZWN0aXZlCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uu
c2xpY2UodG9rZW4uc3RhcnQgKyAxLCB0b2tlbi5lbmQgLSAxKTsKKyAgICAgICAgICAgIGlmIChk
aXJlY3RpdmUgPT09ICd1c2Ugc3RyaWN0JykgeworICAgICAgICAgICAgICAgIHN0cmljdCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmlyc3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJp
Y3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJlc3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsK
KyAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb2xkTGFiZWxTZXQg
PSBzdGF0ZS5sYWJlbFNldDsKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJh
dGlvbjsKKyAgICAgICAgb2xkSW5Td2l0Y2ggPSBzdGF0ZS5pblN3aXRjaDsKKyAgICAgICAgb2xk
SW5GdW5jdGlvbkJvZHkgPSBzdGF0ZS5pbkZ1bmN0aW9uQm9keTsKKworICAgICAgICBzdGF0ZS5s
YWJlbFNldCA9IHt9OworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IGZhbHNlOworICAgICAg
ICBzdGF0ZS5pblN3aXRjaCA9IGZhbHNlOworICAgICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9
IHRydWU7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBp
ZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAg
ICAgICAgaWYgKHR5cGVvZiBzb3VyY2VFbGVtZW50ID09PSAndW5kZWZpbmVkJykgeworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlRWxlbWVu
dHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnfScp
OworCisgICAgICAgIHN0YXRlLmxhYmVsU2V0ID0gb2xkTGFiZWxTZXQ7CisgICAgICAgIHN0YXRl
LmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247CisgICAgICAgIHN0YXRlLmluU3dpdGNoID0g
b2xkSW5Td2l0Y2g7CisgICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gb2xkSW5GdW5jdGlv
bkJvZHk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRl
QmxvY2tTdGF0ZW1lbnQoc291cmNlRWxlbWVudHMpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBwYXJzZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgdmFyIHBh
cmFtLCBwYXJhbXMgPSBbXSwgdG9rZW4sIHN0cmljdGVkLCBwYXJhbVNldCwga2V5LCBtZXNzYWdl
OworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAoIW1hdGNoKCcpJykpIHsKKyAg
ICAgICAgICAgIHBhcmFtU2V0ID0ge307CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGgpIHsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAg
ICBwYXJhbSA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgICAgICAgICAga2V5
ID0gJyQnICsgdG9rZW4udmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwocGFyYW1TZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVz
c2FnZXMuU3RyaWN0UGFyYW1EdXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICghZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UGFyYW1OYW1lOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzU3RyaWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LmNhbGwocGFyYW1TZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVz
dHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3Nh
Z2VzLlN0cmljdFBhcmFtRHVwZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChwYXJhbSk7CisgICAgICAgICAgICAg
ICAgcGFyYW1TZXRba2V5XSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoKCcpJykp
IHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHBhcmFtczog
cGFyYW1zLAorICAgICAgICAgICAgc3RyaWN0ZWQ6IHN0cmljdGVkLAorICAgICAgICAgICAgZmly
c3RSZXN0cmljdGVkOiBmaXJzdFJlc3RyaWN0ZWQsCisgICAgICAgICAgICBtZXNzYWdlOiBtZXNz
YWdlCisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkRlY2xh
cmF0aW9uKCkgeworICAgICAgICB2YXIgaWQsIHBhcmFtcyA9IFtdLCBib2R5LCB0b2tlbiwgc3Ry
aWN0ZWQsIHRtcCwgZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlLCBwcmV2aW91c1N0cmljdCwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4
cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7CisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAg
ICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIGlmIChzdHJpY3Qp
IHsKKyAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAg
ICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVu
Y3Rpb25OYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIGZp
cnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdl
cy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaWN0TW9k
ZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmaXJzdFJlc3Ry
aWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0
UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdG1wID0g
cGFyc2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKTsKKyAgICAgICAgcGFyYW1zID0gdG1wLnBhcmFt
czsKKyAgICAgICAgc3RyaWN0ZWQgPSB0bXAuc3RyaWN0ZWQ7CisgICAgICAgIGZpcnN0UmVzdHJp
Y3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0ZWQ7CisgICAgICAgIGlmICh0bXAubWVzc2FnZSkgewor
ICAgICAgICAgICAgbWVzc2FnZSA9IHRtcC5tZXNzYWdlOworICAgICAgICB9CisKKyAgICAgICAg
cHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7CisgICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291
cmNlRWxlbWVudHMoKTsKKyAgICAgICAgaWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsK
KyAgICAgICAgICAgIHRocm93RXJyb3IoZmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3RyaWN0ICYmIHN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yVG9sZXJhbnQoc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIHN0
cmljdCA9IHByZXZpb3VzU3RyaWN0OworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oaWQsIHBhcmFtcywgW10sIGJvZHkp
LCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRXhwcmVz
c2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBpZCA9IG51bGwsIHN0cmljdGVkLCBmaXJzdFJl
c3RyaWN0ZWQsIG1lc3NhZ2UsIHRtcCwgcGFyYW1zID0gW10sIGJvZHksIHByZXZpb3VzU3RyaWN0
LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAg
IGV4cGVjdEtleXdvcmQoJ2Z1bmN0aW9uJyk7CisKKyAgICAgICAgaWYgKCFtYXRjaCgnKCcpKSB7
CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgIGlkID0gcGFyc2VW
YXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlv
bk5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lOworICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0bXAgPSBwYXJzZVBhcmFt
cyhmaXJzdFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJhbXMgPSB0bXAucGFyYW1zOworICAgICAg
ICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKKyAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG1w
LmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7CisgICAgICAgICAg
ICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CisgICAgICAgIH0KKworICAgICAgICBwcmV2aW91c1N0
cmljdCA9IHN0cmljdDsKKyAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50
cygpOworICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAg
ICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9CisgICAg
ICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3JUb2xl
cmFudChzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaWN0ID0gcHJl
dmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUu
Y3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uKGlkLCBwYXJhbXMsIFtdLCBib2R5KSwgc3RhcnRUb2tl
bik7CisgICAgfQorCisgICAgLy8gMTQgUHJvZ3JhbQorCisgICAgZnVuY3Rpb24gcGFyc2VTb3Vy
Y2VFbGVtZW50KCkgeworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdv
cmQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAg
ICBjYXNlICdjb25zdCc6CisgICAgICAgICAgICBjYXNlICdsZXQnOgorICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24obG9va2FoZWFkLnZhbHVlKTsKKyAgICAg
ICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5j
dGlvbkRlY2xhcmF0aW9uKCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHJl
dHVybiBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
cGFyc2VTb3VyY2VFbGVtZW50cygpIHsKKyAgICAgICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJj
ZUVsZW1lbnRzID0gW10sIHRva2VuLCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZDsKKworICAg
ICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIHRva2VuID0gbG9va2Fo
ZWFkOworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwp
IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAgICAgc291cmNl
RWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VFbGVt
ZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsKKyAgICAgICAgICAgICAg
ICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFy
dCArIDEsIHRva2VuLmVuZCAtIDEpOworICAgICAgICAgICAgaWYgKGRpcmVjdGl2ZSA9PT0gJ3Vz
ZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9jdGFsTGl0ZXJhbCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkgeworICAgICAgICAgICAgICAg
ICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAg
ICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAg
ICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3Vy
Y2VFbGVtZW50ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc291cmNlRWxlbWVudHM7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcGFyc2VQcm9ncmFtKCkgeworICAgICAgICB2YXIgYm9keSwgc3RhcnRUb2tl
bjsKKworICAgICAgICBza2lwQ29tbWVudCgpOworICAgICAgICBwZWVrKCk7CisgICAgICAgIHN0
YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHN0cmljdCA9IGZhbHNlOworCisgICAgICAg
IGJvZHkgPSBwYXJzZVNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5t
YXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb2dyYW0oYm9keSksIHN0YXJ0VG9rZW4pOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGZpbHRlclRva2VuTG9jYXRpb24oKSB7CisgICAgICAgIHZhciBpLCBl
bnRyeSwgdG9rZW4sIHRva2VucyA9IFtdOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHRy
YS50b2tlbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGVudHJ5ID0gZXh0cmEudG9rZW5z
W2ldOworICAgICAgICAgICAgdG9rZW4gPSB7CisgICAgICAgICAgICAgICAgdHlwZTogZW50cnku
dHlwZSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogZW50cnkudmFsdWUKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKKyAgICAgICAgICAgICAgICB0b2tlbi5y
YW5nZSA9IGVudHJ5LnJhbmdlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV4dHJh
LmxvYykgeworICAgICAgICAgICAgICAgIHRva2VuLmxvYyA9IGVudHJ5LmxvYzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGV4dHJhLnRva2VucyA9IHRva2VuczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0b2tlbml6
ZShjb2RlLCBvcHRpb25zKSB7CisgICAgICAgIHZhciB0b1N0cmluZywKKyAgICAgICAgICAgIHRv
a2VuLAorICAgICAgICAgICAgdG9rZW5zOworCisgICAgICAgIHRvU3RyaW5nID0gU3RyaW5nOwor
ICAgICAgICBpZiAodHlwZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEoY29kZSBpbnN0YW5jZW9m
IFN0cmluZykpIHsKKyAgICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTsKKyAgICAgICAg
fQorCisgICAgICAgIGRlbGVnYXRlID0gU3ludGF4VHJlZURlbGVnYXRlOworICAgICAgICBzb3Vy
Y2UgPSBjb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIGxpbmVOdW1iZXIgPSAoc291
cmNlLmxlbmd0aCA+IDApID8gMSA6IDA7CisgICAgICAgIGxpbmVTdGFydCA9IDA7CisgICAgICAg
IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7CisgICAgICAgIGxvb2thaGVhZCA9IG51bGw7CisgICAg
ICAgIHN0YXRlID0geworICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwKKyAgICAgICAgICAgIGxh
YmVsU2V0OiB7fSwKKyAgICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSwKKyAgICAgICAg
ICAgIGluSXRlcmF0aW9uOiBmYWxzZSwKKyAgICAgICAgICAgIGluU3dpdGNoOiBmYWxzZSwKKyAg
ICAgICAgICAgIGxhc3RDb21tZW50U3RhcnQ6IC0xCisgICAgICAgIH07CisKKyAgICAgICAgZXh0
cmEgPSB7fTsKKworICAgICAgICAvLyBPcHRpb25zIG1hdGNoaW5nLgorICAgICAgICBvcHRpb25z
ID0gb3B0aW9ucyB8fCB7fTsKKworICAgICAgICAvLyBPZiBjb3Vyc2Ugd2UgY29sbGVjdCB0b2tl
bnMgaGVyZS4KKyAgICAgICAgb3B0aW9ucy50b2tlbnMgPSB0cnVlOworICAgICAgICBleHRyYS50
b2tlbnMgPSBbXTsKKyAgICAgICAgZXh0cmEudG9rZW5pemUgPSB0cnVlOworICAgICAgICAvLyBU
aGUgZm9sbG93aW5nIHR3byBmaWVsZHMgYXJlIG5lY2Vzc2FyeSB0byBjb21wdXRlIHRoZSBSZWdl
eCB0b2tlbnMuCisgICAgICAgIGV4dHJhLm9wZW5QYXJlblRva2VuID0gLTE7CisgICAgICAgIGV4
dHJhLm9wZW5DdXJseVRva2VuID0gLTE7CisKKyAgICAgICAgZXh0cmEucmFuZ2UgPSAodHlwZW9m
IG9wdGlvbnMucmFuZ2UgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5yYW5nZTsKKyAgICAgICAg
ZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25z
LmxvYzsKKworICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29tbWVudCA9PT0gJ2Jvb2xlYW4n
ICYmIG9wdGlvbnMuY29tbWVudCkgeworICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTsK
KyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09ICdib29s
ZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7CisgICAgICAgICAgICBleHRyYS5lcnJvcnMgPSBb
XTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwZWVrKCk7CisgICAg
ICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAg
ICAgIHJldHVybiBleHRyYS50b2tlbnM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRv
a2VuID0gbGV4KCk7CisgICAgICAgICAgICB3aGlsZSAobG9va2FoZWFkLnR5cGUgIT09IFRva2Vu
LkVPRikgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRva2Vu
ID0gbGV4KCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAobGV4RXJyb3IpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChl
eHRyYS5lcnJvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNo
KGxleEVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYnJlYWsg
b24gdGhlIGZpcnN0IGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBp
bmZpbml0ZSBsb29wcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbGV4RXJy
b3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHRv
a2VucyA9IGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVu
dHMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgdG9rZW5zLmNvbW1lbnRzID0g
ZXh0cmEuY29tbWVudHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4
dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMuZXJy
b3JzID0gZXh0cmEuZXJyb3JzOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAg
ZXh0cmEgPSB7fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9rZW5zOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHBhcnNlKGNvZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHByb2dyYW0s
IHRvU3RyaW5nOworCisgICAgICAgIHRvU3RyaW5nID0gU3RyaW5nOworICAgICAgICBpZiAodHlw
ZW9mIGNvZGUgIT09ICdzdHJpbmcnICYmICEoY29kZSBpbnN0YW5jZW9mIFN0cmluZykpIHsKKyAg
ICAgICAgICAgIGNvZGUgPSB0b1N0cmluZyhjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGRl
bGVnYXRlID0gU3ludGF4VHJlZURlbGVnYXRlOworICAgICAgICBzb3VyY2UgPSBjb2RlOworICAg
ICAgICBpbmRleCA9IDA7CisgICAgICAgIGxpbmVOdW1iZXIgPSAoc291cmNlLmxlbmd0aCA+IDAp
ID8gMSA6IDA7CisgICAgICAgIGxpbmVTdGFydCA9IDA7CisgICAgICAgIGxlbmd0aCA9IHNvdXJj
ZS5sZW5ndGg7CisgICAgICAgIGxvb2thaGVhZCA9IG51bGw7CisgICAgICAgIHN0YXRlID0gewor
ICAgICAgICAgICAgYWxsb3dJbjogdHJ1ZSwKKyAgICAgICAgICAgIGxhYmVsU2V0OiB7fSwKKyAg
ICAgICAgICAgIGluRnVuY3Rpb25Cb2R5OiBmYWxzZSwKKyAgICAgICAgICAgIGluSXRlcmF0aW9u
OiBmYWxzZSwKKyAgICAgICAgICAgIGluU3dpdGNoOiBmYWxzZSwKKyAgICAgICAgICAgIGxhc3RD
b21tZW50U3RhcnQ6IC0xCisgICAgICAgIH07CisKKyAgICAgICAgZXh0cmEgPSB7fTsKKyAgICAg
ICAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgZXh0
cmEucmFuZ2UgPSAodHlwZW9mIG9wdGlvbnMucmFuZ2UgPT09ICdib29sZWFuJykgJiYgb3B0aW9u
cy5yYW5nZTsKKyAgICAgICAgICAgIGV4dHJhLmxvYyA9ICh0eXBlb2Ygb3B0aW9ucy5sb2MgPT09
ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7CisgICAgICAgICAgICBleHRyYS5hdHRhY2hDb21t
ZW50ID0gKHR5cGVvZiBvcHRpb25zLmF0dGFjaENvbW1lbnQgPT09ICdib29sZWFuJykgJiYgb3B0
aW9ucy5hdHRhY2hDb21tZW50OworCisgICAgICAgICAgICBpZiAoZXh0cmEubG9jICYmIG9wdGlv
bnMuc291cmNlICE9PSBudWxsICYmIG9wdGlvbnMuc291cmNlICE9PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICAgICAgICBleHRyYS5zb3VyY2UgPSB0b1N0cmluZyhvcHRpb25zLnNvdXJjZSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2tlbnMgPT09
ICdib29sZWFuJyAmJiBvcHRpb25zLnRva2VucykgeworICAgICAgICAgICAgICAgIGV4dHJhLnRv
a2VucyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25z
LmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLmNvbW1lbnQpIHsKKyAgICAgICAgICAg
ICAgICBleHRyYS5jb21tZW50cyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9ucy50b2xlcmFu
dCkgeworICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGV4dHJhLmF0dGFjaENvbW1lbnQpIHsKKyAgICAgICAgICAgICAgICBl
eHRyYS5yYW5nZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZXh0cmEuY29tbWVudHMgPSBbXTsK
KyAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrID0gW107CisgICAgICAgICAg
ICAgICAgZXh0cmEudHJhaWxpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgICAgIGV4dHJh
LmxlYWRpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIHByb2dyYW0gPSBwYXJzZVByb2dyYW0oKTsKKyAgICAgICAg
ICAgIGlmICh0eXBlb2YgZXh0cmEuY29tbWVudHMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAg
ICAgICAgICAgcHJvZ3JhbS5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRzOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7
CisgICAgICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOworICAgICAgICAgICAgICAg
IHByb2dyYW0udG9rZW5zID0gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAg
ICAgICAgcHJvZ3JhbS5lcnJvcnMgPSBleHRyYS5lcnJvcnM7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxs
eSB7CisgICAgICAgICAgICBleHRyYSA9IHt9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHByb2dyYW07CisgICAgfQorCisgICAgLy8gU3luYyB3aXRoICouanNvbiBtYW5pZmVzdHMuCisg
ICAgZXhwb3J0cy52ZXJzaW9uID0gJzEuMi4yJzsKKworICAgIGV4cG9ydHMudG9rZW5pemUgPSB0
b2tlbml6ZTsKKworICAgIGV4cG9ydHMucGFyc2UgPSBwYXJzZTsKKworICAgIC8vIERlZXAgY29w
eS4KKyAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovCisgICAgZXhwb3J0cy5TeW50YXggPSAo
ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbmFtZSwgdHlwZXMgPSB7fTsKKworICAgICAgICBp
ZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgIHR5
cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAobmFt
ZSBpbiBTeW50YXgpIHsKKyAgICAgICAgICAgIGlmIChTeW50YXguaGFzT3duUHJvcGVydHkobmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICB0eXBlc1tuYW1lXSA9IFN5bnRheFtuYW1lXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9
PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZSh0eXBlcyk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gdHlwZXM7CisgICAgfSgpKTsKKworfSkpOworLyogdmlt
OiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi8KKworfSx7fV0sNzpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBZdXN1a2Ug
U3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBBcml5
YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdtYWlsLmNvbT4KKworICBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UyBJUyIKKyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBG
T1IgQU5ZCisgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorKi8KKy8qanNsaW50IHZhcnM6ZmFsc2UsIGJpdHdpc2U6dHJ1ZSovCisvKmpz
aGludCBpbmRlbnQ6NCovCisvKmdsb2JhbCBleHBvcnRzOnRydWUsIGRlZmluZTp0cnVlKi8KKyhm
dW5jdGlvbiAocm9vdCwgZmFjdG9yeSkgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIC8vIFVu
aXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMv
Tm9kZS5qcywKKyAgICAvLyBhbmQgcGxhaW4gYnJvd3NlciBsb2FkaW5nLAorICAgIGlmICh0eXBl
b2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsKKyAgICAgICAgZGVmaW5l
KFsnZXhwb3J0cyddLCBmYWN0b3J5KTsKKyAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9
PSAndW5kZWZpbmVkJykgeworICAgICAgICBmYWN0b3J5KGV4cG9ydHMpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGZhY3RvcnkoKHJvb3QuZXN0cmF2ZXJzZSA9IHt9KSk7CisgICAgfQorfSh0aGlz
LCBmdW5jdGlvbiAoZXhwb3J0cykgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBTeW50
YXgsCisgICAgICAgIGlzQXJyYXksCisgICAgICAgIFZpc2l0b3JPcHRpb24sCisgICAgICAgIFZp
c2l0b3JLZXlzLAorICAgICAgICBCUkVBSywKKyAgICAgICAgU0tJUDsKKworICAgIFN5bnRheCA9
IHsKKyAgICAgICAgQXNzaWdubWVudEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbics
CisgICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lvbicsCisgICAgICAgIEFy
cmF5UGF0dGVybjogJ0FycmF5UGF0dGVybicsCisgICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNz
aW9uOiAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24nLAorICAgICAgICBCbG9ja1N0YXRlbWVudDog
J0Jsb2NrU3RhdGVtZW50JywKKyAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJl
c3Npb24nLAorICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JywKKyAgICAg
ICAgQ2FsbEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsCisgICAgICAgIENhdGNoQ2xhdXNl
OiAnQ2F0Y2hDbGF1c2UnLAorICAgICAgICBDbGFzc0JvZHk6ICdDbGFzc0JvZHknLAorICAgICAg
ICBDbGFzc0RlY2xhcmF0aW9uOiAnQ2xhc3NEZWNsYXJhdGlvbicsCisgICAgICAgIENsYXNzRXhw
cmVzc2lvbjogJ0NsYXNzRXhwcmVzc2lvbicsCisgICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lv
bjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsCisgICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAn
Q29udGludWVTdGF0ZW1lbnQnLAorICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2Vy
U3RhdGVtZW50JywKKyAgICAgICAgRGlyZWN0aXZlU3RhdGVtZW50OiAnRGlyZWN0aXZlU3RhdGVt
ZW50JywKKyAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAorICAg
ICAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JywKKyAgICAgICAgRXhwcmVzc2lv
blN0YXRlbWVudDogJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLAorICAgICAgICBGb3JTdGF0ZW1lbnQ6
ICdGb3JTdGF0ZW1lbnQnLAorICAgICAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50
JywKKyAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAor
ICAgICAgICBGdW5jdGlvbkV4cHJlc3Npb246ICdGdW5jdGlvbkV4cHJlc3Npb24nLAorICAgICAg
ICBJZGVudGlmaWVyOiAnSWRlbnRpZmllcicsCisgICAgICAgIElmU3RhdGVtZW50OiAnSWZTdGF0
ZW1lbnQnLAorICAgICAgICBMaXRlcmFsOiAnTGl0ZXJhbCcsCisgICAgICAgIExhYmVsZWRTdGF0
ZW1lbnQ6ICdMYWJlbGVkU3RhdGVtZW50JywKKyAgICAgICAgTG9naWNhbEV4cHJlc3Npb246ICdM
b2dpY2FsRXhwcmVzc2lvbicsCisgICAgICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHBy
ZXNzaW9uJywKKyAgICAgICAgTWV0aG9kRGVmaW5pdGlvbjogJ01ldGhvZERlZmluaXRpb24nLAor
ICAgICAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsCisgICAgICAgIE9iamVjdEV4
cHJlc3Npb246ICdPYmplY3RFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0UGF0dGVybjogJ09i
amVjdFBhdHRlcm4nLAorICAgICAgICBQcm9ncmFtOiAnUHJvZ3JhbScsCisgICAgICAgIFByb3Bl
cnR5OiAnUHJvcGVydHknLAorICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6ICdSZXR1cm5TdGF0ZW1l
bnQnLAorICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLAor
ICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLAorICAgICAgICBTd2l0
Y2hDYXNlOiAnU3dpdGNoQ2FzZScsCisgICAgICAgIFRoaXNFeHByZXNzaW9uOiAnVGhpc0V4cHJl
c3Npb24nLAorICAgICAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3RhdGVtZW50JywKKyAgICAg
ICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50JywKKyAgICAgICAgVW5hcnlFeHByZXNzaW9u
OiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogJ1VwZGF0ZUV4
cHJlc3Npb24nLAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiAnVmFyaWFibGVEZWNsYXJh
dGlvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1ZhcmlhYmxlRGVjbGFyYXRvcics
CisgICAgICAgIFdoaWxlU3RhdGVtZW50OiAnV2hpbGVTdGF0ZW1lbnQnLAorICAgICAgICBXaXRo
U3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcsCisgICAgICAgIFlpZWxkRXhwcmVzc2lvbjogJ1lp
ZWxkRXhwcmVzc2lvbicKKyAgICB9OworCisgICAgZnVuY3Rpb24gaWdub3JlSlNIaW50RXJyb3Io
KSB7IH0KKworICAgIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5OworICAgIGlmICghaXNBcnJheSkg
eworICAgICAgICBpc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShhcnJheSkgeworICAgICAgICAg
ICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcnJheSkgPT09ICdbb2Jq
ZWN0IEFycmF5XSc7CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gZGVlcENvcHko
b2JqKSB7CisgICAgICAgIHZhciByZXQgPSB7fSwga2V5LCB2YWw7CisgICAgICAgIGZvciAoa2V5
IGluIG9iaikgeworICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Cisg
ICAgICAgICAgICAgICAgdmFsID0gb2JqW2tleV07CisgICAgICAgICAgICAgICAgaWYgKHR5cGVv
ZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAg
ICByZXRba2V5XSA9IGRlZXBDb3B5KHZhbCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0W2tleV0gPSB2YWw7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7CisgICAgICAgIHZhciByZXQgPSB7fSwga2V5Owor
ICAgICAgICBmb3IgKGtleSBpbiBvYmopIHsKKyAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJv
cGVydHkoa2V5KSkgeworICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgaWdu
b3JlSlNIaW50RXJyb3Ioc2hhbGxvd0NvcHkpOworCisgICAgLy8gYmFzZWQgb24gTExWTSBsaWJj
KysgdXBwZXJfYm91bmQgLyBsb3dlcl9ib3VuZAorICAgIC8vIE1JVCBMaWNlbnNlCisKKyAgICBm
dW5jdGlvbiB1cHBlckJvdW5kKGFycmF5LCBmdW5jKSB7CisgICAgICAgIHZhciBkaWZmLCBsZW4s
IGksIGN1cnJlbnQ7CisKKyAgICAgICAgbGVuID0gYXJyYXkubGVuZ3RoOworICAgICAgICBpID0g
MDsKKworICAgICAgICB3aGlsZSAobGVuKSB7CisgICAgICAgICAgICBkaWZmID0gbGVuID4+PiAx
OworICAgICAgICAgICAgY3VycmVudCA9IGkgKyBkaWZmOworICAgICAgICAgICAgaWYgKGZ1bmMo
YXJyYXlbY3VycmVudF0pKSB7CisgICAgICAgICAgICAgICAgbGVuID0gZGlmZjsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaSA9IGN1cnJlbnQgKyAxOworICAgICAgICAg
ICAgICAgIGxlbiAtPSBkaWZmICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBsb3dlckJvdW5kKGFycmF5LCBmdW5j
KSB7CisgICAgICAgIHZhciBkaWZmLCBsZW4sIGksIGN1cnJlbnQ7CisKKyAgICAgICAgbGVuID0g
YXJyYXkubGVuZ3RoOworICAgICAgICBpID0gMDsKKworICAgICAgICB3aGlsZSAobGVuKSB7Cisg
ICAgICAgICAgICBkaWZmID0gbGVuID4+PiAxOworICAgICAgICAgICAgY3VycmVudCA9IGkgKyBk
aWZmOworICAgICAgICAgICAgaWYgKGZ1bmMoYXJyYXlbY3VycmVudF0pKSB7CisgICAgICAgICAg
ICAgICAgaSA9IGN1cnJlbnQgKyAxOworICAgICAgICAgICAgICAgIGxlbiAtPSBkaWZmICsgMTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGVuID0gZGlmZjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgaWdub3Jl
SlNIaW50RXJyb3IobG93ZXJCb3VuZCk7CisKKyAgICBWaXNpdG9yS2V5cyA9IHsKKyAgICAgICAg
QXNzaWdubWVudEV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLAorICAgICAgICBBcnJheUV4
cHJlc3Npb246IFsnZWxlbWVudHMnXSwKKyAgICAgICAgQXJyYXlQYXR0ZXJuOiBbJ2VsZW1lbnRz
J10sCisgICAgICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiBbJ3BhcmFtcycsICdkZWZhdWx0
cycsICdyZXN0JywgJ2JvZHknXSwKKyAgICAgICAgQmxvY2tTdGF0ZW1lbnQ6IFsnYm9keSddLAor
ICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiBbJ2xlZnQnLCAncmlnaHQnXSwKKyAgICAgICAgQnJl
YWtTdGF0ZW1lbnQ6IFsnbGFiZWwnXSwKKyAgICAgICAgQ2FsbEV4cHJlc3Npb246IFsnY2FsbGVl
JywgJ2FyZ3VtZW50cyddLAorICAgICAgICBDYXRjaENsYXVzZTogWydwYXJhbScsICdib2R5J10s
CisgICAgICAgIENsYXNzQm9keTogWydib2R5J10sCisgICAgICAgIENsYXNzRGVjbGFyYXRpb246
IFsnaWQnLCAnYm9keScsICdzdXBlckNsYXNzJ10sCisgICAgICAgIENsYXNzRXhwcmVzc2lvbjog
WydpZCcsICdib2R5JywgJ3N1cGVyQ2xhc3MnXSwKKyAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNz
aW9uOiBbJ3Rlc3QnLCAnY29uc2VxdWVudCcsICdhbHRlcm5hdGUnXSwKKyAgICAgICAgQ29udGlu
dWVTdGF0ZW1lbnQ6IFsnbGFiZWwnXSwKKyAgICAgICAgRGVidWdnZXJTdGF0ZW1lbnQ6IFtdLAor
ICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6IFtdLAorICAgICAgICBEb1doaWxlU3RhdGVtZW50
OiBbJ2JvZHknLCAndGVzdCddLAorICAgICAgICBFbXB0eVN0YXRlbWVudDogW10sCisgICAgICAg
IEV4cHJlc3Npb25TdGF0ZW1lbnQ6IFsnZXhwcmVzc2lvbiddLAorICAgICAgICBGb3JTdGF0ZW1l
bnQ6IFsnaW5pdCcsICd0ZXN0JywgJ3VwZGF0ZScsICdib2R5J10sCisgICAgICAgIEZvckluU3Rh
dGVtZW50OiBbJ2xlZnQnLCAncmlnaHQnLCAnYm9keSddLAorICAgICAgICBGb3JPZlN0YXRlbWVu
dDogWydsZWZ0JywgJ3JpZ2h0JywgJ2JvZHknXSwKKyAgICAgICAgRnVuY3Rpb25EZWNsYXJhdGlv
bjogWydpZCcsICdwYXJhbXMnLCAnZGVmYXVsdHMnLCAncmVzdCcsICdib2R5J10sCisgICAgICAg
IEZ1bmN0aW9uRXhwcmVzc2lvbjogWydpZCcsICdwYXJhbXMnLCAnZGVmYXVsdHMnLCAncmVzdCcs
ICdib2R5J10sCisgICAgICAgIElkZW50aWZpZXI6IFtdLAorICAgICAgICBJZlN0YXRlbWVudDog
Wyd0ZXN0JywgJ2NvbnNlcXVlbnQnLCAnYWx0ZXJuYXRlJ10sCisgICAgICAgIExpdGVyYWw6IFtd
LAorICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiBbJ2xhYmVsJywgJ2JvZHknXSwKKyAgICAgICAg
TG9naWNhbEV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLAorICAgICAgICBNZW1iZXJFeHBy
ZXNzaW9uOiBbJ29iamVjdCcsICdwcm9wZXJ0eSddLAorICAgICAgICBNZXRob2REZWZpbml0aW9u
OiBbJ2tleScsICd2YWx1ZSddLAorICAgICAgICBOZXdFeHByZXNzaW9uOiBbJ2NhbGxlZScsICdh
cmd1bWVudHMnXSwKKyAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogWydwcm9wZXJ0aWVzJ10sCisg
ICAgICAgIE9iamVjdFBhdHRlcm46IFsncHJvcGVydGllcyddLAorICAgICAgICBQcm9ncmFtOiBb
J2JvZHknXSwKKyAgICAgICAgUHJvcGVydHk6IFsna2V5JywgJ3ZhbHVlJ10sCisgICAgICAgIFJl
dHVyblN0YXRlbWVudDogWydhcmd1bWVudCddLAorICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246
IFsnZXhwcmVzc2lvbnMnXSwKKyAgICAgICAgU3dpdGNoU3RhdGVtZW50OiBbJ2Rpc2NyaW1pbmFu
dCcsICdjYXNlcyddLAorICAgICAgICBTd2l0Y2hDYXNlOiBbJ3Rlc3QnLCAnY29uc2VxdWVudCdd
LAorICAgICAgICBUaGlzRXhwcmVzc2lvbjogW10sCisgICAgICAgIFRocm93U3RhdGVtZW50OiBb
J2FyZ3VtZW50J10sCisgICAgICAgIFRyeVN0YXRlbWVudDogWydibG9jaycsICdoYW5kbGVycycs
ICdoYW5kbGVyJywgJ2d1YXJkZWRIYW5kbGVycycsICdmaW5hbGl6ZXInXSwKKyAgICAgICAgVW5h
cnlFeHByZXNzaW9uOiBbJ2FyZ3VtZW50J10sCisgICAgICAgIFVwZGF0ZUV4cHJlc3Npb246IFsn
YXJndW1lbnQnXSwKKyAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogWydkZWNsYXJhdGlvbnMn
XSwKKyAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiBbJ2lkJywgJ2luaXQnXSwKKyAgICAgICAg
V2hpbGVTdGF0ZW1lbnQ6IFsndGVzdCcsICdib2R5J10sCisgICAgICAgIFdpdGhTdGF0ZW1lbnQ6
IFsnb2JqZWN0JywgJ2JvZHknXSwKKyAgICAgICAgWWllbGRFeHByZXNzaW9uOiBbJ2FyZ3VtZW50
J10KKyAgICB9OworCisgICAgLy8gdW5pcXVlIGlkCisgICAgQlJFQUsgPSB7fTsKKyAgICBTS0lQ
ID0ge307CisKKyAgICBWaXNpdG9yT3B0aW9uID0geworICAgICAgICBCcmVhazogQlJFQUssCisg
ICAgICAgIFNraXA6IFNLSVAKKyAgICB9OworCisgICAgZnVuY3Rpb24gUmVmZXJlbmNlKHBhcmVu
dCwga2V5KSB7CisgICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50OworICAgICAgICB0aGlzLmtl
eSA9IGtleTsKKyAgICB9CisKKyAgICBSZWZlcmVuY2UucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5j
dGlvbiByZXBsYWNlKG5vZGUpIHsKKyAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5rZXldID0gbm9k
ZTsKKyAgICB9OworCisgICAgZnVuY3Rpb24gRWxlbWVudChub2RlLCBwYXRoLCB3cmFwLCByZWYp
IHsKKyAgICAgICAgdGhpcy5ub2RlID0gbm9kZTsKKyAgICAgICAgdGhpcy5wYXRoID0gcGF0aDsK
KyAgICAgICAgdGhpcy53cmFwID0gd3JhcDsKKyAgICAgICAgdGhpcy5yZWYgPSByZWY7CisgICAg
fQorCisgICAgZnVuY3Rpb24gQ29udHJvbGxlcigpIHsgfQorCisgICAgLy8gQVBJOgorICAgIC8v
IHJldHVybiBwcm9wZXJ0eSBwYXRoIGFycmF5IGZyb20gcm9vdCB0byBjdXJyZW50IG5vZGUKKyAg
ICBDb250cm9sbGVyLnByb3RvdHlwZS5wYXRoID0gZnVuY3Rpb24gcGF0aCgpIHsKKyAgICAgICAg
dmFyIGksIGl6LCBqLCBqeiwgcmVzdWx0LCBlbGVtZW50OworCisgICAgICAgIGZ1bmN0aW9uIGFk
ZFRvUGF0aChyZXN1bHQsIHBhdGgpIHsKKyAgICAgICAgICAgIGlmIChpc0FycmF5KHBhdGgpKSB7
CisgICAgICAgICAgICAgICAgZm9yIChqID0gMCwganogPSBwYXRoLmxlbmd0aDsgaiA8IGp6OyAr
K2opIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aFtqXSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQu
cHVzaChwYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIHJvb3Qg
bm9kZQorICAgICAgICBpZiAoIXRoaXMuX19jdXJyZW50LnBhdGgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gZmlyc3Qgbm9kZSBpcyBzZW50aW5l
bCwgc2Vjb25kIG5vZGUgaXMgcm9vdCBlbGVtZW50CisgICAgICAgIHJlc3VsdCA9IFtdOworICAg
ICAgICBmb3IgKGkgPSAyLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsr
aSkgeworICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuX19sZWF2ZWxpc3RbaV07CisgICAgICAg
ICAgICBhZGRUb1BhdGgocmVzdWx0LCBlbGVtZW50LnBhdGgpOworICAgICAgICB9CisgICAgICAg
IGFkZFRvUGF0aChyZXN1bHQsIHRoaXMuX19jdXJyZW50LnBhdGgpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH07CisKKyAgICAvLyBBUEk6CisgICAgLy8gcmV0dXJuIGFycmF5IG9mIHBh
cmVudCBlbGVtZW50cworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnBhcmVudHMgPSBmdW5jdGlv
biBwYXJlbnRzKCkgeworICAgICAgICB2YXIgaSwgaXosIHJlc3VsdDsKKworICAgICAgICAvLyBm
aXJzdCBub2RlIGlzIHNlbnRpbmVsCisgICAgICAgIHJlc3VsdCA9IFtdOworICAgICAgICBmb3Ig
KGkgPSAxLCBpeiA9IHRoaXMuX19sZWF2ZWxpc3QubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAg
ICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5fX2xlYXZlbGlzdFtpXS5ub2RlKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAgIC8vIEFQSToKKyAgICAv
LyByZXR1cm4gY3VycmVudCBub2RlCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUuY3VycmVudCA9
IGZ1bmN0aW9uIGN1cnJlbnQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLl9fY3VycmVudC5ub2Rl
OworICAgIH07CisKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5fX2V4ZWN1dGUgPSBmdW5jdGlv
biBfX2V4ZWN1dGUoY2FsbGJhY2ssIGVsZW1lbnQpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzLCBy
ZXN1bHQ7CisKKyAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkOworCisgICAgICAgIHByZXZpb3Vz
ICA9IHRoaXMuX19jdXJyZW50OworICAgICAgICB0aGlzLl9fY3VycmVudCA9IGVsZW1lbnQ7Cisg
ICAgICAgIHRoaXMuX19zdGF0ZSA9IG51bGw7CisgICAgICAgIGlmIChjYWxsYmFjaykgeworICAg
ICAgICAgICAgcmVzdWx0ID0gY2FsbGJhY2suY2FsbCh0aGlzLCBlbGVtZW50Lm5vZGUsIHRoaXMu
X19sZWF2ZWxpc3RbdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGggLSAxXS5ub2RlKTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9fY3VycmVudCA9IHByZXZpb3VzOworCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfTsKKworICAgIC8vIEFQSToKKyAgICAvLyBub3RpZnkgY29udHJvbCBza2lw
IC8gYnJlYWsKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3Rp
ZnkoZmxhZykgeworICAgICAgICB0aGlzLl9fc3RhdGUgPSBmbGFnOworICAgIH07CisKKyAgICAv
LyBBUEk6CisgICAgLy8gc2tpcCBjaGlsZCBub2RlcyBvZiBjdXJyZW50IG5vZGUKKyAgICBDb250
cm9sbGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLm5vdGlm
eShTS0lQKTsKKyAgICB9OworCisgICAgLy8gQVBJOgorICAgIC8vIGJyZWFrIHRyYXZlcnNhbHMK
KyAgICBDb250cm9sbGVyLnByb3RvdHlwZVsnYnJlYWsnXSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgdGhpcy5ub3RpZnkoQlJFQUspOworICAgIH07CisKKyAgICBDb250cm9sbGVyLnByb3RvdHlw
ZS5fX2luaXRpYWxpemUgPSBmdW5jdGlvbihyb290LCB2aXNpdG9yKSB7CisgICAgICAgIHRoaXMu
dmlzaXRvciA9IHZpc2l0b3I7CisgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7CisgICAgICAgIHRo
aXMuX193b3JrbGlzdCA9IFtdOworICAgICAgICB0aGlzLl9fbGVhdmVsaXN0ID0gW107CisgICAg
ICAgIHRoaXMuX19jdXJyZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5fX3N0YXRlID0gbnVsbDsK
KyAgICB9OworCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUudHJhdmVyc2UgPSBmdW5jdGlvbiB0
cmF2ZXJzZShyb290LCB2aXNpdG9yKSB7CisgICAgICAgIHZhciB3b3JrbGlzdCwKKyAgICAgICAg
ICAgIGxlYXZlbGlzdCwKKyAgICAgICAgICAgIGVsZW1lbnQsCisgICAgICAgICAgICBub2RlLAor
ICAgICAgICAgICAgbm9kZVR5cGUsCisgICAgICAgICAgICByZXQsCisgICAgICAgICAgICBrZXks
CisgICAgICAgICAgICBjdXJyZW50LAorICAgICAgICAgICAgY3VycmVudDIsCisgICAgICAgICAg
ICBjYW5kaWRhdGVzLAorICAgICAgICAgICAgY2FuZGlkYXRlLAorICAgICAgICAgICAgc2VudGlu
ZWw7CisKKyAgICAgICAgdGhpcy5fX2luaXRpYWxpemUocm9vdCwgdmlzaXRvcik7CisKKyAgICAg
ICAgc2VudGluZWwgPSB7fTsKKworICAgICAgICAvLyByZWZlcmVuY2UKKyAgICAgICAgd29ya2xp
c3QgPSB0aGlzLl9fd29ya2xpc3Q7CisgICAgICAgIGxlYXZlbGlzdCA9IHRoaXMuX19sZWF2ZWxp
c3Q7CisKKyAgICAgICAgLy8gaW5pdGlhbGl6ZQorICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBF
bGVtZW50KHJvb3QsIG51bGwsIG51bGwsIG51bGwpKTsKKyAgICAgICAgbGVhdmVsaXN0LnB1c2go
bmV3IEVsZW1lbnQobnVsbCwgbnVsbCwgbnVsbCwgbnVsbCkpOworCisgICAgICAgIHdoaWxlICh3
b3JrbGlzdC5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVsZW1lbnQgPSB3b3JrbGlzdC5wb3AoKTsK
KworICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHNlbnRpbmVsKSB7CisgICAgICAgICAgICAg
ICAgZWxlbWVudCA9IGxlYXZlbGlzdC5wb3AoKTsKKworICAgICAgICAgICAgICAgIHJldCA9IHRo
aXMuX19leGVjdXRlKHZpc2l0b3IubGVhdmUsIGVsZW1lbnQpOworCisgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0ID09PSBCUkVBSykgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZWxlbWVudC5ub2RlKSB7
CisKKyAgICAgICAgICAgICAgICByZXQgPSB0aGlzLl9fZXhlY3V0ZSh2aXNpdG9yLmVudGVyLCBl
bGVtZW50KTsKKworICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fc3RhdGUgPT09IEJSRUFLIHx8
IHJldCA9PT0gQlJFQUspIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc2VudGluZWwpOworICAg
ICAgICAgICAgICAgIGxlYXZlbGlzdC5wdXNoKGVsZW1lbnQpOworCisgICAgICAgICAgICAgICAg
aWYgKHRoaXMuX19zdGF0ZSA9PT0gU0tJUCB8fCByZXQgPT09IFNLSVApIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
bm9kZSA9IGVsZW1lbnQubm9kZTsKKyAgICAgICAgICAgICAgICBub2RlVHlwZSA9IGVsZW1lbnQu
d3JhcCB8fCBub2RlLnR5cGU7CisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFZpc2l0b3JL
ZXlzW25vZGVUeXBlXTsKKworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQgLT0gMSkgPj0gMCkgeworICAg
ICAgICAgICAgICAgICAgICBrZXkgPSBjYW5kaWRhdGVzW2N1cnJlbnRdOworICAgICAgICAgICAg
ICAgICAgICBjYW5kaWRhdGUgPSBub2RlW2tleV07CisgICAgICAgICAgICAgICAgICAgIGlmICgh
Y2FuZGlkYXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNBcnJheShjYW5kaWRh
dGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKG5ldyBFbGVtZW50
KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBudWxsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnQyID0gY2FuZGlkYXRlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChj
dXJyZW50MiAtPSAxKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRp
ZGF0ZVtjdXJyZW50Ml0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
bm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RFeHByZXNzaW9uIHx8IG5vZGVUeXBlID09PSBTeW50
YXguT2JqZWN0UGF0dGVybikgJiYgJ3Byb3BlcnRpZXMnID09PSBjYW5kaWRhdGVzW2N1cnJlbnRd
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IG5ldyBFbGVtZW50KGNh
bmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwgJ1Byb3BlcnR5JywgbnVsbCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnQgPSBuZXcgRWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJy
ZW50Ml0sIG51bGwsIG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShy
b290LCB2aXNpdG9yKSB7CisgICAgICAgIHZhciB3b3JrbGlzdCwKKyAgICAgICAgICAgIGxlYXZl
bGlzdCwKKyAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICBub2RlVHlwZSwKKyAgICAgICAg
ICAgIHRhcmdldCwKKyAgICAgICAgICAgIGVsZW1lbnQsCisgICAgICAgICAgICBjdXJyZW50LAor
ICAgICAgICAgICAgY3VycmVudDIsCisgICAgICAgICAgICBjYW5kaWRhdGVzLAorICAgICAgICAg
ICAgY2FuZGlkYXRlLAorICAgICAgICAgICAgc2VudGluZWwsCisgICAgICAgICAgICBvdXRlciwK
KyAgICAgICAgICAgIGtleTsKKworICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNp
dG9yKTsKKworICAgICAgICBzZW50aW5lbCA9IHt9OworCisgICAgICAgIC8vIHJlZmVyZW5jZQor
ICAgICAgICB3b3JrbGlzdCA9IHRoaXMuX193b3JrbGlzdDsKKyAgICAgICAgbGVhdmVsaXN0ID0g
dGhpcy5fX2xlYXZlbGlzdDsKKworICAgICAgICAvLyBpbml0aWFsaXplCisgICAgICAgIG91dGVy
ID0geworICAgICAgICAgICAgcm9vdDogcm9vdAorICAgICAgICB9OworICAgICAgICBlbGVtZW50
ID0gbmV3IEVsZW1lbnQocm9vdCwgbnVsbCwgbnVsbCwgbmV3IFJlZmVyZW5jZShvdXRlciwgJ3Jv
b3QnKSk7CisgICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7CisgICAgICAgIGxlYXZlbGlz
dC5wdXNoKGVsZW1lbnQpOworCisgICAgICAgIHdoaWxlICh3b3JrbGlzdC5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIGVsZW1lbnQgPSB3b3JrbGlzdC5wb3AoKTsKKworICAgICAgICAgICAgaWYgKGVs
ZW1lbnQgPT09IHNlbnRpbmVsKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGxlYXZlbGlz
dC5wb3AoKTsKKworICAgICAgICAgICAgICAgIHRhcmdldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0
b3IubGVhdmUsIGVsZW1lbnQpOworCisgICAgICAgICAgICAgICAgLy8gbm9kZSBtYXkgYmUgcmVw
bGFjZWQgd2l0aCBudWxsLAorICAgICAgICAgICAgICAgIC8vIHNvIGRpc3Rpbmd1aXNoIGJldHdl
ZW4gdW5kZWZpbmVkIGFuZCBudWxsIGluIHRoaXMgcGxhY2UKKyAgICAgICAgICAgICAgICBpZiAo
dGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0ICE9PSBCUkVBSyAmJiB0YXJnZXQgIT09IFNL
SVApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZQorICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50LnJlZi5yZXBsYWNlKHRhcmdldCk7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgdGFyZ2V0ID09PSBCUkVB
SykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0ZXIucm9vdDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHRhcmdldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1lbnQpOwor
CisgICAgICAgICAgICAvLyBub2RlIG1heSBiZSByZXBsYWNlZCB3aXRoIG51bGwsCisgICAgICAg
ICAgICAvLyBzbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVuZGVmaW5lZCBhbmQgbnVsbCBpbiB0aGlz
IHBsYWNlCisgICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0ICE9
PSBCUkVBSyAmJiB0YXJnZXQgIT09IFNLSVApIHsKKyAgICAgICAgICAgICAgICAvLyByZXBsYWNl
CisgICAgICAgICAgICAgICAgZWxlbWVudC5yZWYucmVwbGFjZSh0YXJnZXQpOworICAgICAgICAg
ICAgICAgIGVsZW1lbnQubm9kZSA9IHRhcmdldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgdGFyZ2V0ID09PSBCUkVBSykgeworICAg
ICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBub2RlIG1heSBiZSBudWxsCisgICAgICAgICAgICBub2RlID0gZWxlbWVudC5ub2Rl
OworICAgICAgICAgICAgaWYgKCFub2RlKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc2VudGluZWwpOworICAg
ICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7CisKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9fc3RhdGUgPT09IFNLSVAgfHwgdGFyZ2V0ID09PSBTS0lQKSB7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVu
dC53cmFwIHx8IG5vZGUudHlwZTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMgPSBWaXNpdG9yS2V5
c1tub2RlVHlwZV07CisKKyAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGVzLmxlbmd0aDsK
KyAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7CisgICAgICAgICAgICAg
ICAga2V5ID0gY2FuZGlkYXRlc1tjdXJyZW50XTsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGUg
PSBub2RlW2tleV07CisgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKCFpc0FycmF5KGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd29ya2xp
c3QucHVzaChuZXcgRWxlbWVudChjYW5kaWRhdGUsIGtleSwgbnVsbCwgbmV3IFJlZmVyZW5jZShu
b2RlLCBrZXkpKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGN1cnJlbnQyID0gY2FuZGlkYXRlLmxlbmd0aDsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJlbnQyIC09IDEpID49IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjYW5kaWRhdGVbY3VycmVudDJdKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZVR5cGUgPT09IFN5bnRheC5PYmplY3RFeHByZXNzaW9uICYmICdwcm9wZXJ0aWVz
JyA9PT0gY2FuZGlkYXRlc1tjdXJyZW50XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZWxl
bWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQyXSwg
J1Byb3BlcnR5JywgbmV3IFJlZmVyZW5jZShjYW5kaWRhdGUsIGN1cnJlbnQyKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0g
bmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCBudWxsLCBu
ZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBvdXRl
ci5yb290OworICAgIH07CisKKyAgICBmdW5jdGlvbiB0cmF2ZXJzZShyb290LCB2aXNpdG9yKSB7
CisgICAgICAgIHZhciBjb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTsKKyAgICAgICAgcmV0
dXJuIGNvbnRyb2xsZXIudHJhdmVyc2Uocm9vdCwgdmlzaXRvcik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcmVwbGFjZShyb290LCB2aXNpdG9yKSB7CisgICAgICAgIHZhciBjb250cm9sbGVyID0g
bmV3IENvbnRyb2xsZXIoKTsKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucmVwbGFjZShyb290
LCB2aXNpdG9yKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBleHRlbmRDb21tZW50UmFuZ2UoY29t
bWVudCwgdG9rZW5zKSB7CisgICAgICAgIHZhciB0YXJnZXQ7CisKKyAgICAgICAgdGFyZ2V0ID0g
dXBwZXJCb3VuZCh0b2tlbnMsIGZ1bmN0aW9uIHNlYXJjaCh0b2tlbikgeworICAgICAgICAgICAg
cmV0dXJuIHRva2VuLnJhbmdlWzBdID4gY29tbWVudC5yYW5nZVswXTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlID0gW2NvbW1lbnQucmFuZ2VbMF0sIGNvbW1l
bnQucmFuZ2VbMV1dOworCisgICAgICAgIGlmICh0YXJnZXQgIT09IHRva2Vucy5sZW5ndGgpIHsK
KyAgICAgICAgICAgIGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9IHRva2Vuc1t0YXJnZXRdLnJh
bmdlWzBdOworICAgICAgICB9CisKKyAgICAgICAgdGFyZ2V0IC09IDE7CisgICAgICAgIGlmICh0
YXJnZXQgPj0gMCkgeworICAgICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzBdID0gdG9r
ZW5zW3RhcmdldF0ucmFuZ2VbMV07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY29tbWVu
dDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhdHRhY2hDb21tZW50cyh0cmVlLCBwcm92aWRlZENv
bW1lbnRzLCB0b2tlbnMpIHsKKyAgICAgICAgLy8gQXQgZmlyc3QsIHdlIHNob3VsZCBjYWxjdWxh
dGUgZXh0ZW5kZWQgY29tbWVudCByYW5nZXMuCisgICAgICAgIHZhciBjb21tZW50cyA9IFtdLCBj
b21tZW50LCBsZW4sIGksIGN1cnNvcjsKKworICAgICAgICBpZiAoIXRyZWUucmFuZ2UpIHsKKyAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXR0YWNoQ29tbWVudHMgbmVlZHMgcmFuZ2UgaW5m
b3JtYXRpb24nKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHRva2VucyBhcnJheSBpcyBlbXB0
eSwgd2UgYXR0YWNoIGNvbW1lbnRzIHRvIHRyZWUgYXMgJ2xlYWRpbmdDb21tZW50cycKKyAgICAg
ICAgaWYgKCF0b2tlbnMubGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAocHJvdmlkZWRDb21tZW50
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwcm92aWRlZENv
bW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bW1lbnQgPSBkZWVwQ29weShwcm92aWRlZENvbW1lbnRzW2ldKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29tbWVudC5leHRlbmRlZFJhbmdlID0gWzAsIHRyZWUucmFuZ2VbMF1dOworICAgICAgICAg
ICAgICAgICAgICBjb21tZW50cy5wdXNoKGNvbW1lbnQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB0cmVlLmxlYWRpbmdDb21tZW50cyA9IGNvbW1lbnRzOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRyZWU7CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KGkgPSAwLCBsZW4gPSBwcm92aWRlZENvbW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7
CisgICAgICAgICAgICBjb21tZW50cy5wdXNoKGV4dGVuZENvbW1lbnRSYW5nZShkZWVwQ29weShw
cm92aWRlZENvbW1lbnRzW2ldKSwgdG9rZW5zKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBU
aGlzIGlzIGJhc2VkIG9uIEpvaG4gRnJlZW1hbidzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBj
dXJzb3IgPSAwOworICAgICAgICB0cmF2ZXJzZSh0cmVlLCB7CisgICAgICAgICAgICBlbnRlcjog
ZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29tbWVudDsKKworICAgICAg
ICAgICAgICAgIHdoaWxlIChjdXJzb3IgPCBjb21tZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29tbWVudCA9IGNvbW1lbnRzW2N1cnNvcl07CisgICAgICAgICAgICAgICAgICAg
IGlmIChjb21tZW50LmV4dGVuZGVkUmFuZ2VbMV0gPiBub2RlLnJhbmdlWzBdKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChjb21tZW50LmV4dGVuZGVkUmFuZ2VbMV0gPT09IG5vZGUucmFuZ2Vb
MF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5sZWFkaW5nQ29tbWVudHMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IFtd
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS5sZWFkaW5nQ29tbWVudHMucHVzaChjb21tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbW1lbnRzLnNwbGljZShjdXJzb3IsIDEpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yICs9IDE7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IG91
dCBvZiBvd25lZCBub2RlCisgICAgICAgICAgICAgICAgaWYgKGN1cnNvciA9PT0gY29tbWVudHMu
bGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLkJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjb21tZW50c1tjdXJz
b3JdLmV4dGVuZGVkUmFuZ2VbMF0gPiBub2RlLnJhbmdlWzFdKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLlNraXA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBjdXJzb3IgPSAwOworICAgICAgICB0cmF2
ZXJzZSh0cmVlLCB7CisgICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICB2YXIgY29tbWVudDsKKworICAgICAgICAgICAgICAgIHdoaWxlIChjdXJzb3Ig
PCBjb21tZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGNvbW1l
bnRzW2N1cnNvcl07CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnJhbmdlWzFdIDwgY29t
bWVudC5leHRlbmRlZFJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnJh
bmdlWzFdID09PSBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghbm9kZS50cmFpbGluZ0NvbW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS50cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMucHVz
aChjb21tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLnNwbGljZShjdXJz
b3IsIDEpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY3Vyc29yICs9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IG91dCBvZiBvd25lZCBub2RlCisgICAg
ICAgICAgICAgICAgaWYgKGN1cnNvciA9PT0gY29tbWVudHMubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0aW9uLkJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmIChjb21tZW50c1tjdXJzb3JdLmV4dGVuZGVkUmFuZ2VbMF0g
PiBub2RlLnJhbmdlWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBWaXNpdG9yT3B0
aW9uLlNraXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KworICAgICAgICByZXR1cm4gdHJlZTsKKyAgICB9CisKKyAgICBleHBvcnRzLnZlcnNpb24gPSAn
MS41LjEtZGV2JzsKKyAgICBleHBvcnRzLlN5bnRheCA9IFN5bnRheDsKKyAgICBleHBvcnRzLnRy
YXZlcnNlID0gdHJhdmVyc2U7CisgICAgZXhwb3J0cy5yZXBsYWNlID0gcmVwbGFjZTsKKyAgICBl
eHBvcnRzLmF0dGFjaENvbW1lbnRzID0gYXR0YWNoQ29tbWVudHM7CisgICAgZXhwb3J0cy5WaXNp
dG9yS2V5cyA9IFZpc2l0b3JLZXlzOworICAgIGV4cG9ydHMuVmlzaXRvck9wdGlvbiA9IFZpc2l0
b3JPcHRpb247CisgICAgZXhwb3J0cy5Db250cm9sbGVyID0gQ29udHJvbGxlcjsKK30pKTsKKy8q
IHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovCisKK30se31dLDg6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworJ3VzZSBzdHJpY3QnOworCitmdW5jdGlvbiBUb09iamVj
dCh2YWwpIHsKKwlpZiAodmFsID09IG51bGwpIHsKKwkJdGhyb3cgbmV3IFR5cGVFcnJvcignT2Jq
ZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTsKKwl9
CisKKwlyZXR1cm4gT2JqZWN0KHZhbCk7Cit9CisKK21vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFz
c2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHsKKwl2YXIgcGVuZGluZ0V4Y2VwdGlv
bjsKKwl2YXIgZnJvbTsKKwl2YXIga2V5czsKKwl2YXIgdG8gPSBUb09iamVjdCh0YXJnZXQpOwor
CisJZm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHsKKwkJZnJvbSA9
IGFyZ3VtZW50c1tzXTsKKwkJa2V5cyA9IE9iamVjdC5rZXlzKE9iamVjdChmcm9tKSk7CisKKwkJ
Zm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CisJCQl0cnkgeworCQkJCXRv
W2tleXNbaV1dID0gZnJvbVtrZXlzW2ldXTsKKwkJCX0gY2F0Y2ggKGVycikgeworCQkJCWlmIChw
ZW5kaW5nRXhjZXB0aW9uID09PSB1bmRlZmluZWQpIHsKKwkJCQkJcGVuZGluZ0V4Y2VwdGlvbiA9
IGVycjsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAocGVuZGluZ0V4Y2VwdGlvbikgewor
CQl0aHJvdyBwZW5kaW5nRXhjZXB0aW9uOworCX0KKworCXJldHVybiB0bzsKK307CisKK30se31d
LDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IE1haW4gRVNMaW50IG9iamVjdC4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAq
LworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVxdWlyZW1l
bnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgZXNwcmltYSA9IHJlcXVpcmUoImVz
cHJpbWEiKSwKKyAgICBlc3RyYXZlcnNlID0gcmVxdWlyZSgiZXN0cmF2ZXJzZSIpLAorICAgIGVz
Y29wZSA9IHJlcXVpcmUoImVzY29wZSIpLAorICAgIGVudmlyb25tZW50cyA9IHJlcXVpcmUoIi4u
L2NvbmYvZW52aXJvbm1lbnRzLmpzb24iKSwKKyAgICBhc3NpZ24gPSByZXF1aXJlKCJvYmplY3Qt
YXNzaWduIiksCisgICAgcnVsZXMgPSByZXF1aXJlKCIuL3J1bGVzIiksCisgICAgdXRpbCA9IHJl
cXVpcmUoIi4vdXRpbCIpLAorICAgIFJ1bGVDb250ZXh0ID0gcmVxdWlyZSgiLi9ydWxlLWNvbnRl
eHQiKSwKKyAgICBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCJldmVudHMiKS5FdmVudEVtaXR0ZXI7
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIZWxwZXJzCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitmdW5jdGlvbiBlc2NhcGVSZWdFeHAocngpIHsKKyAgICByZXR1cm4gcngucmVw
bGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOworfQor
CisvKioKKyAqIFBhcnNlcyBhIGxpc3Qgb2YgIm5hbWU6Ym9vbGVhbl92YWx1ZSIgb3IvYW5kICJu
YW1lIiBvcHRpb25zIGRpdmlkZWQgYnkgY29tbWEgb3IKKyAqIHdoaXRlc3BhY2UuCisgKiBAcGFy
YW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFyc2UuCisgKiBAcmV0dXJucyB7T2Jq
ZWN0fSBSZXN1bHQgbWFwIG9iamVjdCBvZiBuYW1lcyBhbmQgYm9vbGVhbiB2YWx1ZXMKKyAqLwor
ZnVuY3Rpb24gcGFyc2VCb29sZWFuQ29uZmlnKHN0cmluZykgeworICAgIHZhciBpdGVtcyA9IHt9
OworICAgIC8vIENvbGxhcHNlIHdoaXRlc3BhY2UgYXJvdW5kIDogdG8gbWFrZSBwYXJzaW5nIGVh
c2llcgorICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9ccyo6XHMqL2csICI6Iik7CisgICAg
Ly8gQ29sbGFwc2Ugd2hpdGVzcGFjZSBhcm91bmQgLAorICAgIHN0cmluZyA9IHN0cmluZy5yZXBs
YWNlKC9ccyosXHMqL2csICIsIik7CisgICAgc3RyaW5nLnNwbGl0KC9cc3wsKy8pLmZvckVhY2go
ZnVuY3Rpb24obmFtZSkgeworICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICB2YXIgcG9zID0gbmFtZS5pbmRleE9mKCI6IiksCisgICAg
ICAgICAgICB2YWx1ZTsKKyAgICAgICAgaWYgKHBvcyAhPT0gLTEpIHsKKyAgICAgICAgICAgIHZh
bHVlID0gbmFtZS5zdWJzdHJpbmcocG9zICsgMSwgbmFtZS5sZW5ndGgpOworICAgICAgICAgICAg
bmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIHBvcyk7CisgICAgICAgIH0KKworICAgICAgICBpdGVt
c1tuYW1lXSA9ICh2YWx1ZSA9PT0gInRydWUiKTsKKworICAgIH0pOworICAgIHJldHVybiBpdGVt
czsKK30KKworLyoqCisgKiBQYXJzZXMgYSBKU09OLWxpa2UgY29uZmlnLgorICogQHBhcmFtIHtz
dHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHBhcnNlLgorICogQHJldHVybnMge09iamVjdH0g
UmVzdWx0IG1hcCBvYmplY3QKKyAqLworZnVuY3Rpb24gcGFyc2VKc29uQ29uZmlnKHN0cmluZykg
eworICAgIHZhciBpdGVtcyA9IHt9OworICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC8oW2Et
ejAtOVwtXC9dKyk6L2csICJcIiQxXCI6IikucmVwbGFjZSgvKFxdfFswLTldKVxzKyg/PSIpLywg
IiQxLCIpOworICAgIHRyeSB7CisgICAgICAgIGl0ZW1zID0gSlNPTi5wYXJzZSgieyIgKyBzdHJp
bmcgKyAifSIpOworICAgIH0gY2F0Y2goZSkgeyB9CisKKyAgICByZXR1cm4gaXRlbXM7Cit9CisK
Ky8qKgorICogUGFyc2VzIGEgY29uZmlnIG9mIHZhbHVlcyBzZXBhcmF0ZWQgYnkgY29tbWEuCisg
KiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFyc2UuCisgKiBAcmV0dXJu
cyB7T2JqZWN0fSBSZXN1bHQgbWFwIG9mIHZhbHVlcyBhbmQgdHJ1ZSB2YWx1ZXMKKyAqLworZnVu
Y3Rpb24gcGFyc2VMaXN0Q29uZmlnKHN0cmluZykgeworICAgIHZhciBpdGVtcyA9IHt9OworICAg
IC8vIENvbGxhcHNlIHdoaXRlc3BhY2UgYXJvdW5kICwKKyAgICBzdHJpbmcgPSBzdHJpbmcucmVw
bGFjZSgvXHMqLFxzKi9nLCAiLCIpOworICAgIHN0cmluZy5zcGxpdCgvLCsvKS5mb3JFYWNoKGZ1
bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgbmFtZSA9IG5hbWUudHJpbSgpOworICAgICAgICBpZiAo
IW5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpdGVtc1tu
YW1lXSA9IHRydWU7CisgICAgfSk7CisgICAgcmV0dXJuIGl0ZW1zOworfQorCisvKioKKyAqIEBw
YXJhbSB7U2NvcGV9IHNjb3BlIFRoZSBzY29wZSBvYmplY3QgdG8gY2hlY2suCisgKiBAcGFyYW0g
e3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gbG9vayB1cC4KKyAqIEBy
ZXR1cm5zIHtWYXJpYWJsZX0gVGhlIHZhcmlhYmxlIG9iamVjdCBpZiBmb3VuZCBvciBudWxsIGlm
IG5vdC4KKyAqLworZnVuY3Rpb24gZ2V0VmFyaWFibGUoc2NvcGUsIG5hbWUpIHsKKyAgICB2YXIg
dmFyaWFibGUgPSBudWxsOworICAgIHNjb3BlLnZhcmlhYmxlcy5zb21lKGZ1bmN0aW9uKHYpIHsK
KyAgICAgICAgaWYgKHYubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgdmFyaWFibGUgPSB2
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgIH0pOworICAgIHJldHVybiB2YXJpYWJs
ZTsKK30KKworLyoqCisgKiBFbnN1cmVzIHRoYXQgdmFyaWFibGVzIHJlcHJlc2VudGluZyBidWls
dC1pbiBwcm9wZXJ0aWVzIG9mIHRoZSBHbG9iYWwgT2JqZWN0LAorICogYW5kIGFueSBnbG9iYWxz
IGRlY2xhcmVkIGJ5IHNwZWNpYWwgYmxvY2sgY29tbWVudHMsIGFyZSBwcmVzZW50IGluIHRoZSBn
bG9iYWwKKyAqIHNjb3BlLgorICogQHBhcmFtIHtBU1ROb2RlfSBwcm9ncmFtIFRoZSB0b3Agbm9k
ZSBvZiB0aGUgQVNULgorICogQHBhcmFtIHtTY29wZX0gZ2xvYmFsU2NvcGUgVGhlIGdsb2JhbCBz
Y29wZS4KKyAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRp
b24gZGF0YS4KKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBhZGREZWNsYXJlZEds
b2JhbHMocHJvZ3JhbSwgZ2xvYmFsU2NvcGUsIGNvbmZpZykgeworICAgIHZhciBkZWNsYXJlZEds
b2JhbHMgPSB7fSwKKyAgICAgICAgZXhwbGljaXRHbG9iYWxzID0ge30sCisgICAgICAgIGJ1aWx0
aW4gPSBlbnZpcm9ubWVudHMuYnVpbHRpbjsKKworICAgIGFzc2lnbihkZWNsYXJlZEdsb2JhbHMs
IGJ1aWx0aW4pOworCisgICAgT2JqZWN0LmtleXMoY29uZmlnLmVudikuZm9yRWFjaChmdW5jdGlv
biAobmFtZSkgeworICAgICAgICBpZiAoY29uZmlnLmVudltuYW1lXSkgeworICAgICAgICAgICAg
dmFyIGVudmlyb25tZW50R2xvYmFscyA9IGVudmlyb25tZW50c1tuYW1lXSAmJiBlbnZpcm9ubWVu
dHNbbmFtZV0uZ2xvYmFsczsKKyAgICAgICAgICAgIGlmIChlbnZpcm9ubWVudEdsb2JhbHMpIHsK
KyAgICAgICAgICAgICAgICBhc3NpZ24oZGVjbGFyZWRHbG9iYWxzLCBlbnZpcm9ubWVudEdsb2Jh
bHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSk7CisKKyAgICBhc3NpZ24oZGVj
bGFyZWRHbG9iYWxzLCBjb25maWcuZ2xvYmFscyk7CisgICAgYXNzaWduKGV4cGxpY2l0R2xvYmFs
cywgY29uZmlnLmFzdEdsb2JhbHMpOworCisgICAgT2JqZWN0LmtleXMoZGVjbGFyZWRHbG9iYWxz
KS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgdmFyIHZhcmlhYmxlID0gZ2V0VmFy
aWFibGUoZ2xvYmFsU2NvcGUsIG5hbWUpOworICAgICAgICBpZiAoIXZhcmlhYmxlKSB7CisgICAg
ICAgICAgICB2YXJpYWJsZSA9IG5ldyBlc2NvcGUuVmFyaWFibGUobmFtZSwgZ2xvYmFsU2NvcGUp
OworICAgICAgICAgICAgdmFyaWFibGUuZXNsaW50RXhwbGljaXRHbG9iYWwgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGdsb2JhbFNjb3BlLnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTsKKyAgICAgICAg
fQorICAgICAgICB2YXJpYWJsZS53cml0ZWFibGUgPSBkZWNsYXJlZEdsb2JhbHNbbmFtZV07Cisg
ICAgfSk7CisKKyAgICBPYmplY3Qua2V5cyhleHBsaWNpdEdsb2JhbHMpLmZvckVhY2goZnVuY3Rp
b24obmFtZSkgeworICAgICAgICB2YXIgdmFyaWFibGUgPSBnZXRWYXJpYWJsZShnbG9iYWxTY29w
ZSwgbmFtZSk7CisgICAgICAgIGlmICghdmFyaWFibGUpIHsKKyAgICAgICAgICAgIHZhcmlhYmxl
ID0gbmV3IGVzY29wZS5WYXJpYWJsZShuYW1lLCBnbG9iYWxTY29wZSk7CisgICAgICAgICAgICB2
YXJpYWJsZS5lc2xpbnRFeHBsaWNpdEdsb2JhbCA9IHRydWU7CisgICAgICAgICAgICBnbG9iYWxT
Y29wZS52YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyaWFi
bGUud3JpdGVhYmxlID0gZXhwbGljaXRHbG9iYWxzW25hbWVdOworICAgIH0pOworfQorCisvKioK
KyAqIEFkZCBkYXRhIHRvIHJlcG9ydGluZyBjb25maWd1cmF0aW9uIHRvIGRpc2FibGUgcmVwb3J0
aW5nIGZvciBsaXN0IG9mIHJ1bGVzCisgKiBzdGFydGluZyBmcm9tIHN0YXJ0IGxvY2F0aW9uCisg
KiBAcGFyYW0gIHtPYmplY3RbXX0gcmVwb3J0aW5nQ29uZmlnIEN1cnJlbnQgcmVwb3J0aW5nIGNv
bmZpZ3VyYXRpb24KKyAqIEBwYXJhbSAge09iamVjdH0gc3RhcnQgUG9zaXRpb24gdG8gc3RhcnQK
KyAqIEBwYXJhbSAge3N0cmluZ1tdfSBydWxlcyBMaXN0IG9mIHJ1bGVzCisgKiBAcmV0dXJucyB7
dm9pZH0KKyAqLworZnVuY3Rpb24gZGlzYWJsZVJlcG9ydGluZyhyZXBvcnRpbmdDb25maWcsIHN0
YXJ0LCBydWxlcykgeworCisgICAgaWYgKHJ1bGVzLmxlbmd0aCkgeworICAgICAgICBydWxlcy5m
b3JFYWNoKGZ1bmN0aW9uKHJ1bGUpeworICAgICAgICAgICAgcmVwb3J0aW5nQ29uZmlnLnB1c2go
eworICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IG51
bGwsCisgICAgICAgICAgICAgICAgcnVsZTogcnVsZQorICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcG9ydGluZ0NvbmZpZy5wdXNoKHsKKyAgICAg
ICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogbnVsbCwKKyAgICAgICAgICAg
IHJ1bGU6IG51bGwKKyAgICAgICAgfSk7CisgICAgfQorfQorCisvKioKKyAqIEFkZCBkYXRhIHRv
IHJlcG9ydGluZyBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSByZXBvcnRpbmcgZm9yIGxpc3Qgb2Yg
cnVsZXMKKyAqIHN0YXJ0aW5nIGZyb20gc3RhcnQgbG9jYXRpb24KKyAqIEBwYXJhbSAge09iamVj
dFtdfSByZXBvcnRpbmdDb25maWcgQ3VycmVudCByZXBvcnRpbmcgY29uZmlndXJhdGlvbgorICog
QHBhcmFtICB7T2JqZWN0fSBzdGFydCBQb3NpdGlvbiB0byBzdGFydAorICogQHBhcmFtICB7c3Ry
aW5nW119IHJ1bGVzIExpc3Qgb2YgcnVsZXMKKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5j
dGlvbiBlbmFibGVSZXBvcnRpbmcocmVwb3J0aW5nQ29uZmlnLCBzdGFydCwgcnVsZXMpIHsKKyAg
ICBpZiAocnVsZXMubGVuZ3RoKSB7CisgICAgICAgIHJ1bGVzLmZvckVhY2goZnVuY3Rpb24ocnVs
ZSl7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gcmVwb3J0aW5nQ29uZmlnLmxlbmd0aCAtIDE7
IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgaWYgKCFyZXBvcnRpbmdDb25maWdbaV0u
ZW5kICYmIHJlcG9ydGluZ0NvbmZpZ1tpXS5ydWxlID09PSBydWxlICkgeworICAgICAgICAgICAg
ICAgICAgICByZXBvcnRpbmdDb25maWdbaV0uZW5kID0gc3RhcnQ7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gZmluZCBhbGwgcHJldmlvdXMgZGlzYWJsZWQgbG9j
YXRpb25zIGlmIHRoZXkgd2FzIHN0YXJ0ZWQgYXMgbGlzdCBvZiBydWxlcworICAgICAgICB2YXIg
cHJldlN0YXJ0OworICAgICAgICBmb3IgKHZhciBpID0gcmVwb3J0aW5nQ29uZmlnLmxlbmd0aCAt
IDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAocHJldlN0YXJ0ICYmIHByZXZTdGFy
dCAhPT0gcmVwb3J0aW5nQ29uZmlnW2ldLnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcmVwb3J0aW5nQ29uZmlnW2ldLmVu
ZCkgeworICAgICAgICAgICAgICAgIHJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQgPSBzdGFydDsKKyAg
ICAgICAgICAgICAgICBwcmV2U3RhcnQgPSByZXBvcnRpbmdDb25maWdbaV0uc3RhcnQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKworLyoqCisgKiBQYXJzZXMgY29tbWVu
dHMgaW4gZmlsZSB0byBleHRyYWN0IGZpbGUtc3BlY2lmaWMgY29uZmlnIG9mIHJ1bGVzLCBnbG9i
YWxzCisgKiBhbmQgZW52aXJvbm1lbnRzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGdsb2JhbCBjb25m
aWc7IGFsc28gY29kZSBibG9ja3MKKyAqIHdoZXJlIHJlcG9ydGluZyBpcyBkaXNhYmxlZCBvciBl
bmFibGVkIGFuZCBtZXJnZXMgdGhlbSB3aXRoIHJlcG9ydGluZyBjb25maWcuCisgKiBAcGFyYW0g
e0FTVE5vZGV9IGFzdCBUaGUgdG9wIG5vZGUgb2YgdGhlIEFTVC4KKyAqIEBwYXJhbSB7T2JqZWN0
fSBjb25maWcgVGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZGF0YS4KKyAqIEBwYXJhbSB7T2Jq
ZWN0W119IHJlcG9ydGluZ0NvbmZpZyBUaGUgZXhpc3RpbmcgcmVwb3J0aW5nIGNvbmZpZ3VyYXRp
b24gZGF0YS4KKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBtb2RpZnlDb25maWdz
RnJvbUNvbW1lbnRzKGFzdCwgY29uZmlnLCByZXBvcnRpbmdDb25maWcpIHsKKworICAgIHZhciBj
b21tZW50Q29uZmlnID0geworICAgICAgICBhc3RHbG9iYWxzOiB7fSwKKyAgICAgICAgcnVsZXM6
IHt9LAorICAgICAgICBlbnY6IHt9CisgICAgfTsKKyAgICB2YXIgY29tbWVudFJ1bGVzID0ge307
CisKKyAgICBhc3QuY29tbWVudHMuZm9yRWFjaChmdW5jdGlvbihjb21tZW50KSB7CisgICAgICAg
IGlmIChjb21tZW50LnR5cGUgPT09ICJCbG9jayIpIHsKKworICAgICAgICAgICAgdmFyIHZhbHVl
ID0gY29tbWVudC52YWx1ZS50cmltKCk7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXihlc2xp
bnQtXHcrfGVzbGludHxnbG9iYWxzPykoXHN8JCkvLmV4ZWModmFsdWUpOworCisgICAgICAgICAg
ICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyht
YXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG1hdGNoWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgImdsb2JhbHMiOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlICJnbG9iYWwiOgorICAgICAgICAgICAgICAgICAgICAgICAgdXRp
bC5taXhpbihjb21tZW50Q29uZmlnLmFzdEdsb2JhbHMsIHBhcnNlQm9vbGVhbkNvbmZpZyh2YWx1
ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAiZXNsaW50LWVudiI6CisgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLm1peGlu
KGNvbW1lbnRDb25maWcuZW52LCBwYXJzZUxpc3RDb25maWcodmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgImVzbGludC1k
aXNhYmxlIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSZXBvcnRpbmcocmVwb3J0
aW5nQ29uZmlnLCBjb21tZW50LmxvYy5zdGFydCwgT2JqZWN0LmtleXMocGFyc2VMaXN0Q29uZmln
KHZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAiZXNsaW50LWVuYWJsZSI6CisgICAgICAgICAgICAgICAgICAgICAgICBl
bmFibGVSZXBvcnRpbmcocmVwb3J0aW5nQ29uZmlnLCBjb21tZW50LmxvYy5zdGFydCwgT2JqZWN0
LmtleXMocGFyc2VMaXN0Q29uZmlnKHZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXNsaW50IjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciBpdGVtcyA9IHBhcnNlSnNvbkNvbmZpZyh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtcykuZm9yRWFjaChmdW5jdGlvbihuYW1l
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGVWYWx1ZSA9IGl0ZW1zW25h
bWVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZVZhbHVlID09
PSAibnVtYmVyIiB8fCAoQXJyYXkuaXNBcnJheShydWxlVmFsdWUpICYmIHR5cGVvZiBydWxlVmFs
dWVbMF0gPT09ICJudW1iZXIiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b21tZW50UnVsZXNbbmFtZV0gPSBydWxlVmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvL25vIGRlZmF1bHQKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIC8vIGFwcGx5
IGVudmlyb25tZW50IHJ1bGVzIGJlZm9yZSB1c2VyIHJ1bGVzCisgICAgT2JqZWN0LmtleXMoY29t
bWVudENvbmZpZy5lbnYpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgdmFyIGVu
dmlyb25tZW50UnVsZXMgPSBlbnZpcm9ubWVudHNbbmFtZV0gJiYgZW52aXJvbm1lbnRzW25hbWVd
LnJ1bGVzOworICAgICAgICBpZiAoY29tbWVudENvbmZpZy5lbnZbbmFtZV0gJiYgZW52aXJvbm1l
bnRSdWxlcykgeworICAgICAgICAgICAgdXRpbC5taXhpbihjb21tZW50Q29uZmlnLnJ1bGVzLCBl
bnZpcm9ubWVudFJ1bGVzKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIHV0aWwubWl4aW4oY29t
bWVudENvbmZpZy5ydWxlcywgY29tbWVudFJ1bGVzKTsKKworICAgIHV0aWwubWVyZ2VDb25maWdz
KGNvbmZpZywgY29tbWVudENvbmZpZyk7Cit9CisKKy8qKgorICogQ2hlY2sgaWYgbWVzc2FnZSBv
ZiBydWxlIHdpdGggcnVsZUlkIHNob3VsZCBiZSBpZ25vcmVkIGluIGxvY2F0aW9uCisgKiBAcGFy
YW0gIHtPYmplY3RbXX0gcmVwb3J0aW5nQ29uZmlnICBDb2xsZWN0aW9uIG9mIGlnbm9yZSByZWNv
cmRzCisgKiBAcGFyYW0gIHtzdHJpbmd9IHJ1bGVJZCAgIElkIG9mIHJ1bGUKKyAqIEBwYXJhbSAg
e09iamVjdH0gbG9jYXRpb24gTG9jYXRpb24gb2YgbWVzc2FnZQorICogQHJldHVybnMge2Jvb2xl
YW59ICAgICAgICAgIFRydWUgaWYgbWVzc2FnZSBzaG91bGQgYmUgaWdub3JlZCwgZmFsc2Ugb3Ro
ZXJ3aXNlCisgKi8KK2Z1bmN0aW9uIGlzRGlzYWJsZWRCeVJlcG9ydGluZ0NvbmZpZyhyZXBvcnRp
bmdDb25maWcsIHJ1bGVJZCwgbG9jYXRpb24pIHsKKworICAgIGZvciAodmFyIGkgPSAwLCBjID0g
cmVwb3J0aW5nQ29uZmlnLmxlbmd0aDsgaSA8IGM7IGkrKykgeworCisgICAgICAgIHZhciBpZ25v
cmUgPSByZXBvcnRpbmdDb25maWdbaV07CisgICAgICAgIGlmICgoIWlnbm9yZS5ydWxlIHx8IGln
bm9yZS5ydWxlID09PSBydWxlSWQpICYmCisgICAgICAgICAgICAobG9jYXRpb24ubGluZSA+IGln
bm9yZS5zdGFydC5saW5lIHx8IChsb2NhdGlvbi5saW5lID09PSBpZ25vcmUuc3RhcnQubGluZSAm
JiBsb2NhdGlvbi5jb2x1bW4gPj0gaWdub3JlLnN0YXJ0LmNvbHVtbikpICYmCisgICAgICAgICAg
ICAoIWlnbm9yZS5lbmQgfHwgKGxvY2F0aW9uLmxpbmUgPCBpZ25vcmUuZW5kLmxpbmUgfHwgKGxv
Y2F0aW9uLmxpbmUgPT09IGlnbm9yZS5lbmQubGluZSAmJiBsb2NhdGlvbi5jb2x1bW4gPD0gaWdu
b3JlLmVuZC5jb2x1bW4pKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBQcm9jZXNzIGlu
aXRpYWwgY29uZmlnIHRvIG1ha2UgaXQgc2FmZSB0byBleHRlbmQgYnkgZmlsZSBjb21tZW50IGNv
bmZpZworICogQHBhcmFtICB7T2JqZWN0fSBjb25maWcgSW5pdGlhbCBjb25maWcKKyAqIEByZXR1
cm5zIHtPYmplY3R9ICAgICAgICBQcm9jZXNzZWQgY29uZmlnCisgKi8KK2Z1bmN0aW9uIHByZXBh
cmVDb25maWcoY29uZmlnKSB7CisKKyAgICBjb25maWcuZ2xvYmFscyA9IGNvbmZpZy5nbG9iYWxz
IHx8IGNvbmZpZy5nbG9iYWwgfHwge307CisgICAgZGVsZXRlIGNvbmZpZy5nbG9iYWw7CisKKyAg
ICB2YXIgY29waWVkUnVsZXMgPSB7fTsKKyAgICBpZiAodHlwZW9mIGNvbmZpZy5ydWxlcyA9PT0g
Im9iamVjdCIpIHsKKyAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnLnJ1bGVzKS5mb3JFYWNoKGZ1
bmN0aW9uKGspeworICAgICAgICAgICAgdmFyIHJ1bGUgPSBjb25maWcucnVsZXNba107CisgICAg
ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShydWxlKSkgeworICAgICAgICAgICAgICAgIGNvcGll
ZFJ1bGVzW2tdID0gcnVsZS5zbGljZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBjb3BpZWRSdWxlc1trXSA9IHJ1bGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0p
OworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgIHJ1bGVzOiBjb3BpZWRSdWxlcywKKyAg
ICAgICAgZ2xvYmFsczogdXRpbC5tZXJnZUNvbmZpZ3Moe30sIGNvbmZpZy5nbG9iYWxzKSwKKyAg
ICAgICAgZW52OiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLmVudiB8fCB7fSksCisgICAg
ICAgIHNldHRpbmdzOiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLnNldHRpbmdzIHx8IHt9
KQorICAgIH07Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQdWJsaWMgSW50ZXJm
YWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIE9iamVjdCB0aGF0IGlzIHJl
c3BvbnNpYmxlIGZvciB2ZXJpZnlpbmcgSmF2YVNjcmlwdCB0ZXh0CisgKiBAbmFtZSBlc2xpbnQK
KyAqLworbW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7CisKKyAgICB2YXIgYXBpID0gT2Jq
ZWN0LmNyZWF0ZShuZXcgRXZlbnRFbWl0dGVyKCkpLAorICAgICAgICBtZXNzYWdlcyA9IFtdLAor
ICAgICAgICBjdXJyZW50VGV4dCA9IG51bGwsCisgICAgICAgIGN1cnJlbnRUZXh0TGluZXMgPSBb
XSwKKyAgICAgICAgY3VycmVudENvbmZpZyA9IG51bGwsCisgICAgICAgIGN1cnJlbnRUb2tlbnMg
PSBudWxsLAorICAgICAgICBjdXJyZW50U2NvcGVzID0gbnVsbCwKKyAgICAgICAgc2NvcGVNYXAg
PSBudWxsLAorICAgICAgICBjdXJyZW50RmlsZW5hbWUgPSBudWxsLAorICAgICAgICBjb250cm9s
bGVyID0gbnVsbCwKKyAgICAgICAgcmVwb3J0aW5nQ29uZmlnID0gW10sCisgICAgICAgIGNvbW1l
bnRMb2NzRW50ZXIgPSBbXSwKKyAgICAgICAgY29tbWVudExvY3NFeGl0ID0gW107CisKKyAgICAv
KioKKyAgICAgKiBQYXJzZXMgdGV4dCBpbnRvIGFuIEFTVC4gTW92ZWQgb3V0IGhlcmUgYmVjYXVz
ZSB0aGUgdHJ5LWNhdGNoIHByZXZlbnRzCisgICAgICogb3B0aW1pemF0aW9uIG9mIGZ1bmN0aW9u
cywgc28gaXQncyBiZXN0IHRvIGtlZXAgdGhlIHRyeS1jYXRjaCBhcyBpc29sYXRlZAorICAgICAq
IGFzIHBvc3NpYmxlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHRleHQgdG8gcGFy
c2UuCisgICAgICogQHJldHVybnMge0FTVE5vZGV9IFRoZSBBU1QgaWYgc3VjY2Vzc2Z1bCBvciBu
dWxsIGlmIG5vdC4KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHBhcnNl
KHRleHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgZm9yIHBhcnNpbmcgZXJyb3Jz
IGZpcnN0LiBJZiB0aGVyZSdzIGEgcGFyc2luZyBlcnJvciwgbm90aGluZworICAgICAgICAgKiBl
bHNlIGNhbiBoYXBwZW4uIEhvd2V2ZXIsIGEgcGFyc2luZyBlcnJvciBkb2VzIG5vdCB0aHJvdyBh
biBlcnJvcgorICAgICAgICAgKiBmcm9tIHRoaXMgbWV0aG9kIC0gaXQncyBqdXN0IGNvbnNpZGVy
ZWQgYSBmYXRhbCBlcnJvciBtZXNzYWdlLCBhCisgICAgICAgICAqIHByb2JsZW0gdGhhdCBFU0xp
bnQgaWRlbnRpZmllZCBqdXN0IGxpa2UgYW55IG90aGVyLgorICAgICAgICAgKi8KKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBlc3ByaW1hLnBhcnNlKHRleHQsIHsKKyAgICAgICAg
ICAgICAgICBsb2M6IHRydWUsCisgICAgICAgICAgICAgICAgcmFuZ2U6IHRydWUsCisgICAgICAg
ICAgICAgICAgcmF3OiB0cnVlLAorICAgICAgICAgICAgICAgIHRva2VuczogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICBjb21tZW50OiB0cnVlLAorICAgICAgICAgICAgICAgIGF0dGFjaENvbW1lbnQ6
IHRydWUKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGNhdGNoIChleCkgeworCisgICAgICAg
ICAgICBtZXNzYWdlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBmYXRhbDogdHJ1ZSwKKyAgICAg
ICAgICAgICAgICBzZXZlcml0eTogMiwKKworICAgICAgICAgICAgICAgIC8vIG1lc3NhZ2VzIGNv
bWUgYXMgIkxpbmUgWDogVW5leHBlY3RlZCB0b2tlbiBmb28iLCBzbyBzdHJpcCBvZmYgbGVhZGlu
ZyBwYXJ0CisgICAgICAgICAgICAgICAgbWVzc2FnZTogZXgubWVzc2FnZS5zdWJzdHJpbmcoZXgu
bWVzc2FnZS5pbmRleE9mKCI6IikgKyAxKS50cmltKCksCisKKyAgICAgICAgICAgICAgICBsaW5l
OiBleC5saW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogZXguY29sdW1uCisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBjb2xsZWN0aW9uIG9mIGNvbW1lbnRzIHRvIHByZXZl
bnQgZG91YmxlIGV2ZW50IGZvciBjb21tZW50IGFzCisgICAgICogbGVhZGluZyBhbmQgdHJhaWxp
bmcsIHRoZW4gZW1pdCBldmVudCBpZiBwYXNzaW5nCisgICAgICogQHBhcmFtIHtBU1ROb2RlW119
IGNvbW1lbnRzIENvbGxlY3Rpb24gb2YgY29tbWVudCBub2RlcworICAgICAqIEBwYXJhbSB7T2Jq
ZWN0W119IGxvY3MgTGlzdCBvZiBsb2NhdGlvbnMgb2YgcHJldmlvdXMgY29tbWVudCBub2Rlcwor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgRXZlbnQgbmFtZSBwb3N0Zml4CisgICAg
ICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gZW1pdENvbW1lbnRzKGNv
bW1lbnRzLCBsb2NzLCBldmVudE5hbWUpIHsKKworICAgICAgICBpZiAoY29tbWVudHMubGVuZ3Ro
KSB7CisgICAgICAgICAgICBjb21tZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobG9jcy5pbmRleE9mKG5vZGUubG9jKSA+PSAwKSB7CisgICAgICAgICAg
ICAgICAgICAgIGxvY3Muc3BsaWNlKGxvY3MuaW5kZXhPZihub2RlLmxvYyksIDEpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvY3MucHVzaChub2RlLmxv
Yyk7CisgICAgICAgICAgICAgICAgICAgIGFwaS5lbWl0KG5vZGUudHlwZSArIGV2ZW50TmFtZSwg
bm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBTaG9ydGN1dCB0byBjaGVjayBhbmQgZW1pdCBlbnRlciBv
ZiBjb21tZW50IG5vZGVzCisgICAgICogQHBhcmFtIHtBU1ROb2RlW119IGNvbW1lbnRzIENvbGxl
Y3Rpb24gb2YgY29tbWVudCBub2RlcworICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGVtaXRDb21tZW50c0VudGVyKGNvbW1lbnRzKSB7CisgICAgICAgIGVtaXRD
b21tZW50cyhjb21tZW50cywgY29tbWVudExvY3NFbnRlciwgIkNvbW1lbnQiKTsKKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBTaG9ydGN1dCB0byBjaGVjayBhbmQgZW1pdCBleGl0IG9mIGNvbW1l
bnQgbm9kZXMKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVudHMgQ29sbGVjdGlvbiBv
ZiBjb21tZW50IG5vZGVzCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVu
Y3Rpb24gZW1pdENvbW1lbnRzRXhpdChjb21tZW50cykgeworICAgICAgICBlbWl0Q29tbWVudHMo
Y29tbWVudHMsIGNvbW1lbnRMb2NzRXhpdCwgIkNvbW1lbnQ6ZXhpdCIpOworICAgIH0KKworICAg
IC8qKgorICAgICAqIEdldCB0aGUgc2V2ZXJpdHkgbGV2ZWwgb2YgYSBydWxlICgwIC0gbm9uZSwg
MSAtIHdhcm5pbmcsIDIgLSBlcnJvcikKKyAgICAgKiBSZXR1cm5zIDAgaWYgdGhlIHJ1bGUgY29u
ZmlnIGlzIG5vdCB2YWxpZCAoYW4gQXJyYXkgb3IgYSBudW1iZXIpCisgICAgICogQHBhcmFtIHtB
cnJheXxudW1iZXJ9IHJ1bGVDb25maWcgcnVsZSBjb25maWd1cmF0aW9uCisgICAgICogQHJldHVy
bnMge251bWJlcn0gMCwgMSwgb3IgMiwgaW5kaWNhdGluZyBydWxlIHNldmVyaXR5CisgICAgICov
CisgICAgZnVuY3Rpb24gZ2V0UnVsZVNldmVyaXR5KHJ1bGVDb25maWcpIHsKKyAgICAgICAgaWYg
KHR5cGVvZiBydWxlQ29uZmlnID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgcmV0dXJuIHJ1
bGVDb25maWc7CisgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShydWxlQ29uZmlnKSkg
eworICAgICAgICAgICAgcmV0dXJuIHJ1bGVDb25maWdbMF07CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAq
IEdldCB0aGUgb3B0aW9ucyBmb3IgYSBydWxlIChub3QgaW5jbHVkaW5nIHNldmVyaXR5KSwgaWYg
YW55CisgICAgICogQHBhcmFtIHtBcnJheXxudW1iZXJ9IHJ1bGVDb25maWcgcnVsZSBjb25maWd1
cmF0aW9uCisgICAgICogQHJldHVybnMge0FycmF5fSBvZiBydWxlIG9wdGlvbnMsIGVtcHR5IEFy
cmF5IGlmIG5vbmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRSdWxlT3B0aW9ucyhydWxlQ29u
ZmlnKSB7CisgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGVDb25maWcpKSB7CisgICAgICAg
ICAgICByZXR1cm4gcnVsZUNvbmZpZy5zbGljZSgxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybiBbXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHNldCB1bmxpbWl0
ZWQgbGlzdGVuZXJzIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVz
LzUyNCkKKyAgICBhcGkuc2V0TWF4TGlzdGVuZXJzKDApOworCisgICAgLyoqCisgICAgICogUmVz
ZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgb2JqZWN0LgorICAgICAqIEByZXR1cm5zIHt2
b2lkfQorICAgICAqLworICAgIGFwaS5yZXNldCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlz
LnJlbW92ZUFsbExpc3RlbmVycygpOworICAgICAgICBtZXNzYWdlcyA9IFtdOworICAgICAgICBj
dXJyZW50Q29uZmlnID0gbnVsbDsKKyAgICAgICAgY3VycmVudFRleHQgPSBudWxsOworICAgICAg
ICBjdXJyZW50VGV4dExpbmVzID0gW107CisgICAgICAgIGN1cnJlbnRUb2tlbnMgPSBudWxsOwor
ICAgICAgICBjdXJyZW50U2NvcGVzID0gbnVsbDsKKyAgICAgICAgc2NvcGVNYXAgPSBudWxsOwor
ICAgICAgICBjb250cm9sbGVyID0gbnVsbDsKKyAgICAgICAgcmVwb3J0aW5nQ29uZmlnID0gW107
CisgICAgICAgIGNvbW1lbnRMb2NzRW50ZXIgPSBbXTsKKyAgICAgICAgY29tbWVudExvY3NFeGl0
ID0gW107CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFZlcmlmaWVzIHRoZSB0ZXh0IGFnYWlu
c3QgdGhlIHJ1bGVzIHNwZWNpZmllZCBieSB0aGUgc2Vjb25kIGFyZ3VtZW50LgorICAgICAqIEBw
YXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBKYXZhU2NyaXB0IHRleHQgdG8gdmVyaWZ5LgorICAgICAq
IEBwYXJhbSB7T2JqZWN0fSBjb25maWcgQW4gb2JqZWN0IHdob3NlIGtleXMgc3BlY2lmeSB0aGUg
cnVsZXMgdG8gdXNlLgorICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gZmlsZW5hbWUgVGhlIG9wdGlv
bmFsIGZpbGVuYW1lIG9mIHRoZSBmaWxlIGJlaW5nIGNoZWNrZWQuCisgICAgICogICAgICBJZiB0
aGlzIGlzIG5vdCBzZXQsIHRoZSBmaWxlbmFtZSB3aWxsIGRlZmF1bHQgdG8gJzxpbnB1dD4nIGlu
IHRoZSBydWxlIGNvbnRleHQuCisgICAgICogQHBhcmFtIHtib29sZWFuPX0gc2F2ZVN0YXRlIElu
ZGljYXRlcyBpZiB0aGUgc3RhdGUgZnJvbSB0aGUgbGFzdCBydW4gc2hvdWxkIGJlIHNhdmVkLgor
ICAgICAqICAgICAgTW9zdGx5IHVzZWZ1bCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICAgKiBA
cmV0dXJucyB7T2JqZWN0W119IFRoZSByZXN1bHRzIGFzIGFuIGFycmF5IG9mIG1lc3NhZ2VzIG9y
IG51bGwgaWYgbm8gbWVzc2FnZXMuCisgICAgICovCisgICAgYXBpLnZlcmlmeSA9IGZ1bmN0aW9u
KHRleHQsIGNvbmZpZywgZmlsZW5hbWUsIHNhdmVTdGF0ZSkgeworCisgICAgICAgIHZhciBhc3Q7
CisKKyAgICAgICAgLy8gc2V0IHRoZSBjdXJyZW50IHBhcnNlZCBmaWxlbmFtZQorICAgICAgICBj
dXJyZW50RmlsZW5hbWUgPSBmaWxlbmFtZTsKKworICAgICAgICBpZiAoIXNhdmVTdGF0ZSkgewor
ICAgICAgICAgICAgdGhpcy5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgYXN0ID0gcGFy
c2UodGV4dC5yZXBsYWNlKC9eIyEoW15cclxuXStbXHJcbl0rKS8sICIvLyQxIikpOworCisgICAg
ICAgIC8vaWYgRXNwcmltYSBmYWlsZWQgdG8gcGFyc2UgdGhlIGZpbGUsIHRoZXJlJ3Mgbm8gc2Vu
c2UgaW4gc2V0dGluZyB1cCBydWxlcworICAgICAgICBpZiAoYXN0KSB7CisgICAgICAgICAgICAv
LyBwcm9jZXNzIGluaXRpYWwgY29uZmlnIHRvIG1ha2UgaXQgc2FmZSB0byBleHRlbmQKKyAgICAg
ICAgICAgIGNvbmZpZyA9IHByZXBhcmVDb25maWcoY29uZmlnKTsKKworICAgICAgICAgICAgLy8g
cGFyc2UgZ2xvYmFsIGNvbW1lbnRzIGFuZCBtb2RpZnkgY29uZmlnCisgICAgICAgICAgICBtb2Rp
ZnlDb25maWdzRnJvbUNvbW1lbnRzKGFzdCwgY29uZmlnLCByZXBvcnRpbmdDb25maWcpOworCisg
ICAgICAgICAgICAvLyBlbmFibGUgYXBwcm9wcmlhdGUgcnVsZXMKKyAgICAgICAgICAgIE9iamVj
dC5rZXlzKGNvbmZpZy5ydWxlcykuZmlsdGVyKGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnZXRSdWxlU2V2ZXJpdHkoY29uZmlnLnJ1bGVzW2tleV0pID4gMDsKKyAgICAg
ICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7CisKKyAgICAgICAgICAgICAgICB2YXIg
cnVsZUNyZWF0b3IgPSBydWxlcy5nZXQoa2V5KSwKKyAgICAgICAgICAgICAgICAgICAgc2V2ZXJp
dHkgPSBnZXRSdWxlU2V2ZXJpdHkoY29uZmlnLnJ1bGVzW2tleV0pLAorICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zID0gZ2V0UnVsZU9wdGlvbnMoY29uZmlnLnJ1bGVzW2tleV0pLAorICAgICAg
ICAgICAgICAgICAgICBydWxlOworCisgICAgICAgICAgICAgICAgaWYgKHJ1bGVDcmVhdG9yKSB7
CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBydWxl
ID0gcnVsZUNyZWF0b3IobmV3IFJ1bGVDb250ZXh0KGtleSwgYXBpLCBzZXZlcml0eSwgb3B0aW9u
cywgY29uZmlnLnNldHRpbmdzKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBh
bGwgdGhlIG5vZGUgdHlwZXMgYXMgbGlzdGVuZXJzCisgICAgICAgICAgICAgICAgICAgICAgICBP
YmplY3Qua2V5cyhydWxlKS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGVUeXBlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBpLm9uKG5vZGVUeXBlLCBydWxlW25vZGVUeXBlXSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChleCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZXgubWVzc2FnZSA9ICJFcnJvciB3aGlsZSBsb2Fk
aW5nIHJ1bGUgJyIgKyBrZXkgKyAiJzogIiArIGV4Lm1lc3NhZ2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBleDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEZWZpbml0
aW9uIGZvciBydWxlICciICsga2V5ICsgIicgd2FzIG5vdCBmb3VuZC4iKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgc28g
cnVsZXMgY2FuIGFjY2VzcyBhcyBuZWNlc3NhcnkKKyAgICAgICAgICAgIGN1cnJlbnRDb25maWcg
PSBjb25maWc7CisgICAgICAgICAgICBjdXJyZW50VGV4dCA9IHRleHQ7CisgICAgICAgICAgICBj
b250cm9sbGVyID0gbmV3IGVzdHJhdmVyc2UuQ29udHJvbGxlcigpOworCisgICAgICAgICAgICAv
LyBnYXRoZXIgZGF0YSB0aGF0IG1heSBiZSBuZWVkZWQgYnkgdGhlIHJ1bGVzCisgICAgICAgICAg
ICBjdXJyZW50U2NvcGVzID0gZXNjb3BlLmFuYWx5emUoYXN0LCB7IGlnbm9yZUV2YWw6IHRydWUg
fSkuc2NvcGVzOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSW5kZXggdGhlIHNj
b3BlcyBieSB0aGUgc3RhcnQgcmFuZ2Ugb2YgdGhlaXIgYmxvY2sgZm9yIGVmZmljaWVudAorICAg
ICAgICAgICAgICogbG9va3VwIGluIGdldFNjb3BlLgorICAgICAgICAgICAgICovCisgICAgICAg
ICAgICBzY29wZU1hcCA9IFtdOworICAgICAgICAgICAgY3VycmVudFNjb3Blcy5mb3JFYWNoKGZ1
bmN0aW9uIChzY29wZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzY29w
ZS5ibG9jay5yYW5nZVswXTsKKworICAgICAgICAgICAgICAgIC8vIFNvbWV0aW1lcyB0d28gc2Nv
cGVzIGFyZSByZXR1cm5lZCBmb3IgYSBnaXZlbiBub2RlLiBUaGlzIGlzCisgICAgICAgICAgICAg
ICAgLy8gaGFuZGxlZCBsYXRlciBpbiBhIGtub3duIHdheSwgc28ganVzdCBkb24ndCBvdmVyd3Jp
dGUgaGVyZS4KKyAgICAgICAgICAgICAgICBpZiAoIXNjb3BlTWFwW3JhbmdlXSkgeworICAgICAg
ICAgICAgICAgICAgICBzY29wZU1hcFtyYW5nZV0gPSBpbmRleDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFNwbGl0
IHRleHQgaGVyZSBpbnRvIGFycmF5IG9mIGxpbmVzIHNvCisgICAgICAgICAgICAgKiBpdCdzIG5v
dCBiZWluZyBkb25lIHJlcGVhdGVkbHkKKyAgICAgICAgICAgICAqIGJ5IGluZGl2aWR1YWwgcnVs
ZXMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGN1cnJlbnRUZXh0TGluZXMgPSBjdXJy
ZW50VGV4dC5zcGxpdCgvXHI/XG4vZyk7CisKKyAgICAgICAgICAgIC8vIEZyZWV6aW5nIHNvIGFy
cmF5IGlzbid0IGFjY2lkZW50YWxseSBjaGFuZ2VkIGJ5IGEgcnVsZS4KKyAgICAgICAgICAgIE9i
amVjdC5mcmVlemUoY3VycmVudFRleHRMaW5lcyk7CisKKyAgICAgICAgICAgIC8qIGdldCBhbGwg
dG9rZW5zIGZyb20gdGhlIGFzdCBhbmQgc3RvcmUgdGhlbSBhcyBhIGhhc2h0YWJsZSB0bworICAg
ICAgICAgICAgICogaW1wcm92ZSB0cmF2ZXJzYWwgc3BlZWQgd2hlbiB3YW50aW5nIHRvIGZpbmQg
dG9rZW5zIGZvciBhIGdpdmVuCisgICAgICAgICAgICAgKiBub2RlCisgICAgICAgICAgICAgKi8K
KyAgICAgICAgICAgIGN1cnJlbnRUb2tlbnMgPSBbXTsKKyAgICAgICAgICAgIGFzdC50b2tlbnMu
Zm9yRWFjaChmdW5jdGlvbih0b2tlbikgeworICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbnNb
dG9rZW4ucmFuZ2VbMF1dID0gdG9rZW47CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
Ly8gYXVnbWVudCBnbG9iYWwgc2NvcGUgd2l0aCBkZWNsYXJlZCBnbG9iYWwgdmFyaWFibGVzCisg
ICAgICAgICAgICBhZGREZWNsYXJlZEdsb2JhbHMoYXN0LCBjdXJyZW50U2NvcGVzWzBdLCBjdXJy
ZW50Q29uZmlnKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEVhY2ggbm9kZSBo
YXMgYSB0eXBlIHByb3BlcnR5LiBXaGVuZXZlciBhIHBhcnRpY3VsYXIgdHlwZSBvZiBub2RlIGlz
IGZvdW5kLAorICAgICAgICAgICAgICogYW4gZXZlbnQgaXMgZmlyZWQuIFRoaXMgYWxsb3dzIGFu
eSBsaXN0ZW5lcnMgdG8gYXV0b21hdGljYWxseSBiZSBpbmZvcm1lZAorICAgICAgICAgICAgICog
dGhhdCB0aGlzIHR5cGUgb2Ygbm9kZSBoYXMgYmVlbiBmb3VuZCBhbmQgcmVhY3QgYWNjb3JkaW5n
bHkuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGNvbnRyb2xsZXIudHJhdmVyc2UoYXN0
LCB7CisgICAgICAgICAgICAgICAgZW50ZXI6IGZ1bmN0aW9uKG5vZGUsIHBhcmVudCkgeworCisg
ICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50cyA9IGFwaS5nZXRDb21tZW50cyhub2RlKTsK
KworICAgICAgICAgICAgICAgICAgICBlbWl0Q29tbWVudHNFbnRlcihjb21tZW50cy5sZWFkaW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgICAg
ICAgICAgICAgIGFwaS5lbWl0KG5vZGUudHlwZSwgbm9kZSk7CisgICAgICAgICAgICAgICAgICAg
IGVtaXRDb21tZW50c0VudGVyKGNvbW1lbnRzLnRyYWlsaW5nKTsKKyAgICAgICAgICAgICAgICB9
LAorICAgICAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGNvbW1lbnRzID0gYXBpLmdldENvbW1lbnRzKG5vZGUpOworCisgICAgICAg
ICAgICAgICAgICAgIGVtaXRDb21tZW50c0V4aXQoY29tbWVudHMudHJhaWxpbmcpOworICAgICAg
ICAgICAgICAgICAgICBhcGkuZW1pdChub2RlLnR5cGUgKyAiOmV4aXQiLCBub2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdENvbW1lbnRzRXhpdChjb21tZW50cy5sZWFkaW5nKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIG1lc3NhZ2VzOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnRzIGEgbWVzc2Fn
ZSBmcm9tIG9uZSBvZiB0aGUgcnVsZXMuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJ1bGVJZCBU
aGUgSUQgb2YgdGhlIHJ1bGUgY2F1c2luZyB0aGUgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW0ge251
bWJlcn0gc2V2ZXJpdHkgVGhlIHNldmVyaXR5IGxldmVsIG9mIHRoZSBydWxlIGFzIGNvbmZpZ3Vy
ZWQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0aGF0IHRoZSBt
ZXNzYWdlIHJlbGF0ZXMgdG8uCisgICAgICogQHBhcmFtIHtPYmplY3Q9fSBsb2NhdGlvbiBBbiBv
YmplY3QgY29udGFpbmluZyB0aGUgZXJyb3IgbGluZSBhbmQgY29sdW1uCisgICAgICogICAgICBu
dW1iZXJzLiBJZiBsb2NhdGlvbiBpcyBub3QgcHJvdmlkZWQgdGhlIG5vZGUncyBzdGFydCBsb2Nh
dGlvbiB3aWxsCisgICAgICogICAgICBiZSB1c2VkLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBt
ZXNzYWdlIFRoZSBhY3R1YWwgbWVzc2FnZS4KKyAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyBP
cHRpb25hbCB0ZW1wbGF0ZSBkYXRhIHdoaWNoIHByb2R1Y2VzIGEgZm9ybWF0dGVkIG1lc3NhZ2UK
KyAgICAgKiAgICAgd2l0aCBzeW1ib2xzIGJlaW5nIHJlcGxhY2VkIGJ5IHRoaXMgb2JqZWN0J3Mg
dmFsdWVzLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGFwaS5yZXBvcnQg
PSBmdW5jdGlvbihydWxlSWQsIHNldmVyaXR5LCBub2RlLCBsb2NhdGlvbiwgbWVzc2FnZSwgb3B0
cykgeworCisgICAgICAgIGlmICh0eXBlb2YgbG9jYXRpb24gPT09ICJzdHJpbmciKSB7CisgICAg
ICAgICAgICBvcHRzID0gbWVzc2FnZTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBsb2NhdGlvbjsK
KyAgICAgICAgICAgIGxvY2F0aW9uID0gbm9kZS5sb2Muc3RhcnQ7CisgICAgICAgIH0KKworICAg
ICAgICBPYmplY3Qua2V5cyhvcHRzIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKKyAg
ICAgICAgICAgIHZhciByeCA9IG5ldyBSZWdFeHAoInt7IiArIGVzY2FwZVJlZ0V4cChrZXkpICsg
In19IiwgImciKTsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UocngsIG9w
dHNba2V5XSk7CisgICAgICAgIH0pOworCisgICAgICAgIGlmIChpc0Rpc2FibGVkQnlSZXBvcnRp
bmdDb25maWcocmVwb3J0aW5nQ29uZmlnLCBydWxlSWQsIGxvY2F0aW9uKSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbWVzc2FnZXMucHVzaCh7CisgICAgICAg
ICAgICBydWxlSWQ6IHJ1bGVJZCwKKyAgICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eSwKKyAg
ICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLAorICAg
ICAgICAgICAgbGluZTogbG9jYXRpb24ubGluZSwKKyAgICAgICAgICAgIGNvbHVtbjogbG9jYXRp
b24uY29sdW1uLAorICAgICAgICAgICAgc291cmNlOiBhcGkuZ2V0U291cmNlKG5vZGUpCisgICAg
ICAgIH0pOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzb3VyY2UgY29kZSBm
b3IgdGhlIGdpdmVuIG5vZGUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlPX0gbm9kZSBUaGUgQVNU
IG5vZGUgdG8gZ2V0IHRoZSB0ZXh0IGZvci4KKyAgICAgKiBAcGFyYW0ge2ludD19IGJlZm9yZUNv
dW50IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZWZvcmUgdGhlIG5vZGUgdG8gcmV0cmlldmUu
CisgICAgICogQHBhcmFtIHtpbnQ9fSBhZnRlckNvdW50IFRoZSBudW1iZXIgb2YgY2hhcmFjdGVy
cyBhZnRlciB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBU
aGUgdGV4dCByZXByZXNlbnRpbmcgdGhlIEFTVCBub2RlLgorICAgICAqLworICAgIGFwaS5nZXRT
b3VyY2UgPSBmdW5jdGlvbihub2RlLCBiZWZvcmVDb3VudCwgYWZ0ZXJDb3VudCkgeworICAgICAg
ICBpZiAobm9kZSkgeworICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50VGV4dCAhPT0gbnVsbCkg
PyBjdXJyZW50VGV4dC5zbGljZShub2RlLnJhbmdlWzBdIC0gKGJlZm9yZUNvdW50IHx8IDApLAor
ICAgICAgICAgICAgICAgIG5vZGUucmFuZ2VbMV0gKyAoYWZ0ZXJDb3VudCB8fCAwKSkgOiBudWxs
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0OworICAg
ICAgICB9CisKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZW50aXJlIHNvdXJj
ZSB0ZXh0IHNwbGl0IGludG8gYW4gYXJyYXkgb2YgbGluZXMuCisgICAgICogQHJldHVybnMge0Fy
cmF5fSBUaGUgc291cmNlIHRleHQgYXMgYW4gYXJyYXkgb2YgbGluZXMuCisgICAgICovCisgICAg
YXBpLmdldFNvdXJjZUxpbmVzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBjdXJyZW50
VGV4dExpbmVzOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGFsbCBjb21tZW50cyBm
b3IgdGhlIGdpdmVuIG5vZGUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qg
bm9kZSB0byBnZXQgdGhlIGNvbW1lbnRzIGZvci4KKyAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBU
aGUgbGlzdCBvZiBjb21tZW50cyBpbmRleGVkIGJ5IHRoZWlyIHBvc2l0aW9uLgorICAgICAqLwor
ICAgIGFwaS5nZXRDb21tZW50cyA9IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICB2YXIgbGVh
ZGluZ0NvbW1lbnRzID0gbm9kZS5sZWFkaW5nQ29tbWVudHMgfHwgW10sCisgICAgICAgICAgICB0
cmFpbGluZ0NvbW1lbnRzID0gbm9kZS50cmFpbGluZ0NvbW1lbnRzIHx8IFtdOworCisgICAgICAg
IC8qCisgICAgICAgICAqIEVzcHJpbWEgYWRkcyBhICJjb21tZW50cyIgYXJyYXkgb24gUHJvZ3Jh
bSBub2RlcyByYXRoZXIgdGhhbgorICAgICAgICAgKiBsZWFkaW5nQ29tbWVudHMvdHJhaWxpbmdD
b21tZW50cy4gQ29tbWVudHMgYXJlIG9ubHkgbGVmdCBpbiB0aGUKKyAgICAgICAgICogUHJvZ3Jh
bSBub2RlIGNvbW1lbnRzIGFycmF5IGlmIHRoZXJlIGlzIG5vIGV4ZWN1dGFibGUgY29kZS4KKyAg
ICAgICAgICovCisgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICJQcm9ncmFtIikgeworICAgICAg
ICAgICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICBsZWFk
aW5nQ29tbWVudHMgPSBub2RlLmNvbW1lbnRzOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGxlYWRpbmc6IGxlYWRpbmdDb21tZW50cywK
KyAgICAgICAgICAgIHRyYWlsaW5nOiB0cmFpbGluZ0NvbW1lbnRzCisgICAgICAgIH07CisgICAg
fTsKKworICAgIC8qKgorICAgICAqIFJldHJpZXZlcyB0aGUgSlNEb2MgY29tbWVudCBmb3IgYSBn
aXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8g
Z2V0IHRoZSBjb21tZW50IGZvci4KKyAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIEJsb2Nr
Q29tbWVudCBub2RlIGNvbnRhaW5pbmcgdGhlIEpTRG9jIGZvciB0aGUKKyAgICAgKiAgICAgIGdp
dmVuIG5vZGUgb3IgbnVsbCBpZiBub3QgZm91bmQuCisgICAgICovCisgICAgYXBpLmdldEpTRG9j
Q29tbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5w
YXJlbnQsCisgICAgICAgICAgICBsaW5lID0gbm9kZS5sb2Muc3RhcnQubGluZTsKKworICAgICAg
ICAvKioKKyAgICAgICAgICogRmluZHMgYSBKU0RvYyBjb21tZW50IG5vZGUgaW4gYW4gYXJyYXkg
b2YgY29tbWVudCBub2Rlcy4KKyAgICAgICAgICogQHBhcmFtIHtBU1ROb2RlW119IGNvbW1lbnRz
IFRoZSBhcnJheSBvZiBjb21tZW50IG5vZGVzIHRvIHNlYXJjaC4KKyAgICAgICAgICogQHJldHVy
bnMge0FTVE5vZGV9IFRoZSBub2RlIGlmIGZvdW5kLCBudWxsIGlmIG5vdC4KKyAgICAgICAgICog
QHByaXZhdGUKKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIGZpbmRKU0RvY0NvbW1lbnQo
Y29tbWVudHMpIHsKKworICAgICAgICAgICAgaWYgKGNvbW1lbnRzKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IGNvbW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb21tZW50c1tpXS50eXBlID09PSAiQmxvY2siICYmIGNvbW1l
bnRzW2ldLnZhbHVlLmNoYXJBdCgwKSA9PT0gIioiKSB7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChsaW5lIC0gY29tbWVudHNbaV0ubG9jLmVuZC5saW5lIDw9IDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbWVudHNbaV07CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlICJG
dW5jdGlvbkRlY2xhcmF0aW9uIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmluZEpTRG9jQ29t
bWVudChub2RlLmxlYWRpbmdDb21tZW50cyk7CisKKyAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9u
RXhwcmVzc2lvbiI6CisKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgIT09ICJDYWxs
RXhwcmVzc2lvbiIgfHwgcGFyZW50LmNhbGxlZSAhPT0gbm9kZSkgeworICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAocGFyZW50ICYmICFwYXJlbnQubGVhZGluZ0NvbW1lbnRzICYmIHBhcmVudC50
eXBlICE9PSAiRnVuY3Rpb25FeHByZXNzaW9uIiAmJiBwYXJlbnQudHlwZSAhPT0gIkZ1bmN0aW9u
RGVjbGFyYXRpb24iKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQu
cGFyZW50OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcmVudCAmJiAocGFyZW50LnR5cGUgIT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIikgPyBm
aW5kSlNEb2NDb21tZW50KHBhcmVudC5sZWFkaW5nQ29tbWVudHMpIDogbnVsbDsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoCisKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgLyoqCisgICAgICogR2V0cyBhIG51bWJlciBvZiB0b2tlbnMgdGhhdCBwcmVj
ZWRlIGEgZ2l2ZW4gbm9kZSdzIHRva2VucyBpbiB0aGUgdG9rZW4gc3RyZWFtLgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFti
ZWZvcmVDb3VudD0wXSBUaGUgbnVtYmVyIG9mIHRva2VucyBiZWZvcmUgdGhlIG5vZGUgdG8gcmV0
cmlldmUuCisgICAgICogQHJldHVybnMge1tUb2tlbl19IEFycmF5IG9mIG9iamVjdHMgcmVwcmVz
ZW50aW5nIHRva2Vucy4KKyAgICAgKi8KKyAgICBhcGkuZ2V0VG9rZW5zQmVmb3JlID0gZnVuY3Rp
b24obm9kZSwgYmVmb3JlQ291bnQpIHsKKyAgICAgICAgdmFyIGJlZm9yZVRva2VucyA9IFtdLCBj
dXJzb3IgPSBub2RlLnJhbmdlWzBdIC0gMTsKKyAgICAgICAgd2hpbGUgKGJlZm9yZUNvdW50ID4g
MCAmJiBjdXJzb3IgPj0gMCkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29y
XSkgeworICAgICAgICAgICAgICAgIGJlZm9yZVRva2Vucy51bnNoaWZ0KGN1cnJlbnRUb2tlbnNb
Y3Vyc29yXSk7CisgICAgICAgICAgICAgICAgLS1iZWZvcmVDb3VudDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIC0tY3Vyc29yOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiZWZvcmVU
b2tlbnM7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRva2VuIHRoYXQgcHJl
Y2VkZXMgYSBnaXZlbiBub2RlJ3MgdG9rZW5zIGluIHRoZSB0b2tlbiBzdHJlYW0uCisgICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0g
W3NraXA9MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAgYmVmb3JlIHRoZSBnaXZlbiBub2Rl
LgorICAgICAqIEByZXR1cm5zIHtUb2tlbn0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdG9r
ZW4uCisgICAgICovCisgICAgYXBpLmdldFRva2VuQmVmb3JlID0gZnVuY3Rpb24obm9kZSwgc2tp
cCkgeworICAgICAgICBmb3IgKHZhciBjdXJzb3IgPSBub2RlLnJhbmdlWzBdIC0gMTsgY3Vyc29y
ID49IDA7IC0tY3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3Jd
KSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgICAgICAgICAgICAg
IC0tc2tpcDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudFRva2Vuc1tjdXJzb3JdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbnVtYmVy
IG9mIHRva2VucyB0aGF0IHByZWNlZGUgYSBnaXZlbiBub2RlJ3MgdG9rZW5zIGluIHRoZSB0b2tl
biBzdHJlYW0uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAg
ICAgKiBAcGFyYW0ge2ludH0gW2FmdGVyQ291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgYWZ0
ZXIgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMge1tUb2tlbl19IEFycmF5
IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4KKyAgICAgKi8KKyAgICBhcGkuZ2V0VG9r
ZW5zQWZ0ZXIgPSBmdW5jdGlvbihub2RlLCBhZnRlckNvdW50KSB7CisgICAgICAgIHZhciBhZnRl
clRva2VucyA9IFtdLCBjdXJzb3IgPSBub2RlLnJhbmdlWzFdOworICAgICAgICB3aGlsZSAoYWZ0
ZXJDb3VudCA+IDAgJiYgY3Vyc29yIDwgY3VycmVudFRva2Vucy5sZW5ndGgpIHsKKyAgICAgICAg
ICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKKyAgICAgICAgICAgICAgICBhZnRlclRv
a2Vucy5wdXNoKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAgICAgLS1hZnRl
ckNvdW50OworICAgICAgICAgICAgICAgIGN1cnNvciA9IGN1cnJlbnRUb2tlbnNbY3Vyc29yXS5y
YW5nZVsxXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKytjdXJzb3I7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFmdGVyVG9rZW5zOwor
ICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB0b2tlbiB0aGF0IGZvbGxvd3MgYSBn
aXZlbiBub2RlJ3MgdG9rZW5zIGluIHRoZSB0b2tlbiBzdHJlYW0uCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW3NraXA9MF0g
QSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAgYWZ0ZXIgdGhlIGdpdmVuIG5vZGUuCisgICAgICog
QHJldHVybnMge1Rva2VufSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4KKyAgICAg
Ki8KKyAgICBhcGkuZ2V0VG9rZW5BZnRlciA9IGZ1bmN0aW9uKG5vZGUsIHNraXApIHsKKyAgICAg
ICAgZm9yICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVsxXTsgY3Vyc29yIDwgY3VycmVudFRva2Vu
cy5sZW5ndGg7ICsrY3Vyc29yKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJz
b3JdKSB7CisgICAgICAgICAgICAgICAgaWYgKHNraXAgPiAwKSB7CisgICAgICAgICAgICAgICAg
ICAgIC0tc2tpcDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3VycmVudFRva2Vuc1tjdXJzb3JdOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGFsbCB0
b2tlbnMgdGhhdCBhcmUgcmVsYXRlZCB0byB0aGUgZ2l2ZW4gbm9kZS4KKyAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBbYmVmb3Jl
Q291bnQ9MF0gVGhlIG51bWJlciBvZiB0b2tlbnMgYmVmb3JlIHRoZSBub2RlIHRvIHJldHJpZXZl
LgorICAgICAqIEBwYXJhbSB7aW50fSBbYWZ0ZXJDb3VudD0wXSBUaGUgbnVtYmVyIG9mIHRva2Vu
cyBhZnRlciB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAgICAgKiBAcmV0dXJucyB7W1Rva2VuXX0g
QXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9rZW5zLgorICAgICAqLworICAgIGFwaS5n
ZXRUb2tlbnMgPSBmdW5jdGlvbihub2RlLCBiZWZvcmVDb3VudCwgYWZ0ZXJDb3VudCkgeworICAg
ICAgICB2YXIgYmVmb3JlVG9rZW5zID0gYXBpLmdldFRva2Vuc0JlZm9yZShub2RlLCBiZWZvcmVD
b3VudCksCisgICAgICAgICAgICBhZnRlclRva2VucyA9IGFwaS5nZXRUb2tlbnNBZnRlcihub2Rl
LCBhZnRlckNvdW50KSwKKyAgICAgICAgICAgIHRva2VucyA9IFtdLAorICAgICAgICAgICAgY3Vy
c29yID0gbm9kZS5yYW5nZVswXTsKKyAgICAgICAgd2hpbGUgKGN1cnNvciA8IG5vZGUucmFuZ2Vb
MV0pIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKKyAgICAgICAg
ICAgICAgICB0b2tlbnMucHVzaChjdXJyZW50VG9rZW5zW2N1cnNvcl0pOworICAgICAgICAgICAg
ICAgIGN1cnNvciA9IGN1cnJlbnRUb2tlbnNbY3Vyc29yXS5yYW5nZVsxXTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKytjdXJzb3I7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGJlZm9yZVRva2Vucy5jb25jYXQodG9rZW5zLCBhZnRlclRv
a2Vucyk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZpcnN0IGBjb3VudGAg
dG9rZW5zIG9mIHRoZSBnaXZlbiBub2RlJ3MgdG9rZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtjb3VudD0w
XSBUaGUgbnVtYmVyIG9mIHRva2VucyBvZiB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAgICAgKiBA
cmV0dXJucyB7W1Rva2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdG9rZW5zLgor
ICAgICAqLworICAgIGFwaS5nZXRGaXJzdFRva2VucyA9IGZ1bmN0aW9uKG5vZGUsIGNvdW50KSB7
CisgICAgICAgIHZhciB0b2tlbnMgPSBbXSwgY3Vyc29yID0gbm9kZS5yYW5nZVswXTsKKyAgICAg
ICAgd2hpbGUgKGNvdW50ID4gMCAmJiBjdXJzb3IgPCBub2RlLnJhbmdlWzFdKSB7CisgICAgICAg
ICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAgICAgdG9rZW5z
LnB1c2goY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKKyAgICAgICAgICAgICAgICAtLWNvdW50Owor
ICAgICAgICAgICAgICAgIGN1cnNvciA9IGN1cnJlbnRUb2tlbnNbY3Vyc29yXS5yYW5nZVsxXTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKytjdXJzb3I7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRva2VuczsKKyAgICB9OworCisgICAg
LyoqCisgICAgICogR2V0cyB0aGUgZmlyc3QgdG9rZW4gb2YgdGhlIGdpdmVuIG5vZGUncyB0b2tl
biBzdHJlYW0uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAg
ICAgKiBAcGFyYW0ge2ludH0gW3NraXA9MF0gQSBudW1iZXIgb2YgdG9rZW5zIHRvIHNraXAuCisg
ICAgICogQHJldHVybnMge1Rva2VufSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4K
KyAgICAgKi8KKyAgICBhcGkuZ2V0Rmlyc3RUb2tlbiA9IGZ1bmN0aW9uKG5vZGUsIHNraXApIHsK
KyAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gbm9kZS5yYW5nZVswXTsgY3Vyc29yIDwgbm9kZS5y
YW5nZVsxXTsgKytjdXJzb3IpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNv
cl0pIHsKKyAgICAgICAgICAgICAgICBpZiAoc2tpcCA+IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgLS1za2lwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjdXJyZW50VG9rZW5zW2N1cnNvcl07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxh
c3QgYGNvdW50YCB0b2tlbnMgb2YgdGhlIGdpdmVuIG5vZGUuCisgICAgICogQHBhcmFtIHtBU1RO
b2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2NvdW50PTBdIFRo
ZSBudW1iZXIgb2YgdG9rZW5zIG9mIHRoZSBub2RlIHRvIHJldHJpZXZlLgorICAgICAqIEByZXR1
cm5zIHtbVG9rZW5dfSBBcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0b2tlbnMuCisgICAg
ICovCisgICAgYXBpLmdldExhc3RUb2tlbnMgPSBmdW5jdGlvbihub2RlLCBjb3VudCkgeworICAg
ICAgICB2YXIgdG9rZW5zID0gW10sIGN1cnNvciA9IG5vZGUucmFuZ2VbMV0gLSAxOworICAgICAg
ICB3aGlsZSAoY291bnQgPiAwICYmIGN1cnNvciA+PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAg
ICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7CisgICAgICAgICAgICAgICAgdG9rZW5z
LnVuc2hpZnQoY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKKyAgICAgICAgICAgICAgICAtLWNvdW50
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgLS1jdXJzb3I7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRva2VuczsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGFz
dCB0b2tlbiBvZiB0aGUgZ2l2ZW4gbm9kZSdzIHRva2VuIHN0cmVhbS4KKyAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBbc2tpcD0w
XSBBIG51bWJlciBvZiB0b2tlbnMgdG8gc2tpcC4KKyAgICAgKiBAcmV0dXJucyB7VG9rZW59IEFu
IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHRva2VuLgorICAgICAqLworICAgIGFwaS5nZXRMYXN0
VG9rZW4gPSBmdW5jdGlvbihub2RlLCBza2lwKSB7CisgICAgICAgIGZvciAodmFyIGN1cnNvciA9
IG5vZGUucmFuZ2VbMV0gLSAxOyBjdXJzb3IgPj0gbm9kZS5yYW5nZVswXTsgLS1jdXJzb3IpIHsK
KyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKKyAgICAgICAgICAgICAg
ICBpZiAoc2tpcCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLS1za2lwOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VG9rZW5z
W2N1cnNvcl07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgbm9kZXMgdGhhdCBhcmUgYW5jZXN0b3JzIG9m
IGN1cnJlbnQgbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7QVNUTm9kZVtdfSBBcnJheSBvZiBvYmpl
Y3RzIHJlcHJlc2VudGluZyBhbmNlc3RvcnMuCisgICAgICovCisgICAgYXBpLmdldEFuY2VzdG9y
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gY29udHJvbGxlci5wYXJlbnRzKCk7Cisg
ICAgfTsKKworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc2NvcGUgZm9yIHRoZSBjdXJyZW50
IG5vZGUuCisgICAgICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0
aGUgY3VycmVudCBub2RlJ3Mgc2NvcGUuCisgICAgICovCisgICAgYXBpLmdldFNjb3BlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHZhciBwYXJlbnRzID0gY29udHJvbGxlci5wYXJlbnRzKCksCisg
ICAgICAgICAgICBpbm5lckJsb2NrID0gbnVsbCwKKyAgICAgICAgICAgIHNlbGVjdGVkU2NvcGVJ
bmRleDsKKworICAgICAgICAvLyBEb24ndCBkbyB0aGlzIGZvciBQcm9ncmFtIG5vZGVzIC0gdGhl
eSBoYXZlIG5vIHBhcmVudHMKKyAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoKSB7CisKKyAgICAg
ICAgICAgIC8vIGlmIGN1cnJlbnQgbm9kZSBpcyBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgYWRkIGl0
IHRvIHRoZSBsaXN0CisgICAgICAgICAgICB2YXIgY3VycmVudCA9IGNvbnRyb2xsZXIuY3VycmVu
dCgpOworICAgICAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRp
b24iIHx8IGN1cnJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsKKyAgICAgICAg
ICAgICAgICBwYXJlbnRzLnB1c2goY3VycmVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEFzY2VuZCB0aGUgY3VycmVudCBub2RlJ3MgcGFyZW50cworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IHBhcmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKworICAgICAgICAg
ICAgICAgIC8vIFRoZSBmaXJzdCBub2RlIHRoYXQgcmVxdWlyZXMgYSBzY29wZSBpcyB0aGUgbm9k
ZSB0aGF0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAvLyBvdXIgY3VycmVudCBub2RlJ3MgaW5u
ZXJtb3N0IHNjb3BlLgorICAgICAgICAgICAgICAgIGlmIChlc2NvcGUuU2NvcGUuaXNTY29wZVJl
cXVpcmVkKHBhcmVudHNbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIGlubmVyQmxvY2sgPSBw
YXJlbnRzW2ldOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZpbmQgYW5kIHJldHVybiB0aGUgaW5u
ZXJtb3N0IHNjb3BlCisgICAgICAgICAgICBzZWxlY3RlZFNjb3BlSW5kZXggPSBzY29wZU1hcFtp
bm5lckJsb2NrLnJhbmdlWzBdXTsKKworICAgICAgICAgICAgLy8gTmFtZWQgZnVuY3Rpb24gZXhw
cmVzc2lvbnMgY3JlYXRlIHR3byBuZXN0ZWQgc2NvcGUgb2JqZWN0cy4gVGhlCisgICAgICAgICAg
ICAvLyBvdXRlciBzY29wZSBjb250YWlucyBvbmx5IHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIG5h
bWUuIFdlIHJldHVybgorICAgICAgICAgICAgLy8gdGhlIGlubmVyIHNjb3BlLgorICAgICAgICAg
ICAgaWYgKGlubmVyQmxvY2sudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIgJiYgaW5uZXJC
bG9jay5pZCAmJiBpbm5lckJsb2NrLmlkLm5hbWUpIHsKKyAgICAgICAgICAgICAgICArK3NlbGVj
dGVkU2NvcGVJbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRTY29wZXNbc2VsZWN0ZWRTY29wZUluZGV4XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50U2NvcGVzWzBdOyAgICAvLyBnbG9iYWwgc2NvcGUKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBmaWxlbmFtZSBmb3IgdGhlIGN1
cnJlbnRseSBwYXJzZWQgc291cmNlLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmaWxl
bmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNvdXJjZSBiZWluZyBwYXJzZWQuCisgICAgICogICAg
IERlZmF1bHRzIHRvICI8aW5wdXQ+IiBpZiBubyBmaWxlbmFtZSBpbmZvIGlzIHByZXNlbnQuCisg
ICAgICovCisgICAgYXBpLmdldEZpbGVuYW1lID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0
eXBlb2YgY3VycmVudEZpbGVuYW1lID09PSAic3RyaW5nIikgeworICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnRGaWxlbmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAi
PGlucHV0PiI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogRGVmaW5lcyBh
IG5ldyBsaW50aW5nIHJ1bGUuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHJ1bGVJZCBBIHVuaXF1
ZSBydWxlIGlkZW50aWZpZXIKKyAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBydWxlTW9kdWxlIEZ1
bmN0aW9uIGZyb20gY29udGV4dCB0byBvYmplY3QgbWFwcGluZyBBU1Qgbm9kZSB0eXBlcyB0byBl
dmVudCBoYW5kbGVycworICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIHZhciBk
ZWZpbmVSdWxlID0gYXBpLmRlZmluZVJ1bGUgPSBmdW5jdGlvbihydWxlSWQsIHJ1bGVNb2R1bGUp
IHsKKyAgICAgICAgcnVsZXMuZGVmaW5lKHJ1bGVJZCwgcnVsZU1vZHVsZSk7CisgICAgfTsKKwor
ICAgIC8qKgorICAgICAqIERlZmluZXMgbWFueSBuZXcgbGludGluZyBydWxlcy4KKyAgICAgKiBA
cGFyYW0ge29iamVjdH0gcnVsZXMgbWFwIGZyb20gdW5pcXVlIHJ1bGUgaWRlbnRpZmllciB0byBy
dWxlCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgYXBpLmRlZmluZVJ1bGVz
ID0gZnVuY3Rpb24ocnVsZXMpIHsKKyAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMo
cnVsZXMpLmZvckVhY2goZnVuY3Rpb24ocnVsZUlkKXsKKyAgICAgICAgICAgIGRlZmluZVJ1bGUo
cnVsZUlkLCBydWxlc1tydWxlSWRdKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIC8qKgor
ICAgICAqIEdldHMgdGhlIGRlZmF1bHQgZXNsaW50IGNvbmZpZ3VyYXRpb24uCisgICAgICogQHJl
dHVybnMge09iamVjdH0gT2JqZWN0IG1hcHBpbmcgcnVsZSBJRHMgdG8gdGhlaXIgZGVmYXVsdCBj
b25maWd1cmF0aW9ucworICAgICAqLworICAgIGFwaS5kZWZhdWx0cyA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICByZXR1cm4gcmVxdWlyZSgiLi4vY29uZi9lc2xpbnQuanNvbiIpOworICAgIH07CisK
KyAgICByZXR1cm4gYXBpOworCit9KCkpOworCit9LHsiLi4vY29uZi9lbnZpcm9ubWVudHMuanNv
biI6MSwiLi4vY29uZi9lc2xpbnQuanNvbiI6MiwiLi9ydWxlLWNvbnRleHQiOjExLCIuL3J1bGVz
IjoxMiwiLi91dGlsIjoxNDQsImVzY29wZSI6NSwiZXNwcmltYSI6NiwiZXN0cmF2ZXJzZSI6Nywi
ZXZlbnRzIjozLCJvYmplY3QtYXNzaWduIjo4fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgcnVsZXMg
PSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgIHJ1bGVzWyJibG9jay1zY29wZWQtdmFyIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL2Jsb2NrLXNjb3BlZC12YXIiKTsKKyAgICBydWxlc1siYnJhY2Utc3R5
bGUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvYnJhY2Utc3R5bGUiKTsKKyAgICBydWxlc1siY2FtZWxj
YXNlIl0gPSByZXF1aXJlKCIuL3J1bGVzL2NhbWVsY2FzZSIpOworICAgIHJ1bGVzWyJjb21tYS1z
dHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb21tYS1zdHlsZSIpOworICAgIHJ1bGVzWyJjb21w
bGV4aXR5Il0gPSByZXF1aXJlKCIuL3J1bGVzL2NvbXBsZXhpdHkiKTsKKyAgICBydWxlc1siY29u
c2lzdGVudC1yZXR1cm4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29uc2lzdGVudC1yZXR1cm4iKTsK
KyAgICBydWxlc1siY29uc2lzdGVudC10aGlzIl0gPSByZXF1aXJlKCIuL3J1bGVzL2NvbnNpc3Rl
bnQtdGhpcyIpOworICAgIHJ1bGVzWyJjdXJseSJdID0gcmVxdWlyZSgiLi9ydWxlcy9jdXJseSIp
OworICAgIHJ1bGVzWyJkZWZhdWx0LWNhc2UiXSA9IHJlcXVpcmUoIi4vcnVsZXMvZGVmYXVsdC1j
YXNlIik7CisgICAgcnVsZXNbImRvdC1ub3RhdGlvbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9kb3Qt
bm90YXRpb24iKTsKKyAgICBydWxlc1siZW9sLWxhc3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvZW9s
LWxhc3QiKTsKKyAgICBydWxlc1siZXFlcWVxIl0gPSByZXF1aXJlKCIuL3J1bGVzL2VxZXFlcSIp
OworICAgIHJ1bGVzWyJmdW5jLW5hbWVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL2Z1bmMtbmFtZXMi
KTsKKyAgICBydWxlc1siZnVuYy1zdHlsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9mdW5jLXN0eWxl
Iik7CisgICAgcnVsZXNbImdsb2JhbC1zdHJpY3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvZ2xvYmFs
LXN0cmljdCIpOworICAgIHJ1bGVzWyJndWFyZC1mb3ItaW4iXSA9IHJlcXVpcmUoIi4vcnVsZXMv
Z3VhcmQtZm9yLWluIik7CisgICAgcnVsZXNbImhhbmRsZS1jYWxsYmFjay1lcnIiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvaGFuZGxlLWNhbGxiYWNrLWVyciIpOworICAgIHJ1bGVzWyJtYXgtZGVwdGgi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LWRlcHRoIik7CisgICAgcnVsZXNbIm1heC1sZW4iXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbWF4LWxlbiIpOworICAgIHJ1bGVzWyJtYXgtbmVzdGVkLWNhbGxi
YWNrcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtbmVzdGVkLWNhbGxiYWNrcyIpOworICAgIHJ1
bGVzWyJtYXgtcGFyYW1zIl0gPSByZXF1aXJlKCIuL3J1bGVzL21heC1wYXJhbXMiKTsKKyAgICBy
dWxlc1sibWF4LXN0YXRlbWVudHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LXN0YXRlbWVudHMi
KTsKKyAgICBydWxlc1sibmV3LWNhcCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uZXctY2FwIik7Cisg
ICAgcnVsZXNbIm5ldy1wYXJlbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbmV3LXBhcmVucyIpOwor
ICAgIHJ1bGVzWyJuby1hbGVydCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1hbGVydCIpOworICAg
IHJ1bGVzWyJuby1hcnJheS1jb25zdHJ1Y3RvciJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1hcnJh
eS1jb25zdHJ1Y3RvciIpOworICAgIHJ1bGVzWyJuby1iaXR3aXNlIl0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLWJpdHdpc2UiKTsKKyAgICBydWxlc1sibm8tY2FsbGVyIl0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLWNhbGxlciIpOworICAgIHJ1bGVzWyJuby1jYXRjaC1zaGFkb3ciXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tY2F0Y2gtc2hhZG93Iik7CisgICAgcnVsZXNbIm5vLWNvbW1hLWRhbmdsZSJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb21tYS1kYW5nbGUiKTsKKyAgICBydWxlc1sibm8tY29u
ZC1hc3NpZ24iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tY29uZC1hc3NpZ24iKTsKKyAgICBydWxl
c1sibm8tY29uc29sZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb25zb2xlIik7CisgICAgcnVs
ZXNbIm5vLWNvbnN0YW50LWNvbmRpdGlvbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb25zdGFu
dC1jb25kaXRpb24iKTsKKyAgICBydWxlc1sibm8tY29udHJvbC1yZWdleCJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1jb250cm9sLXJlZ2V4Iik7CisgICAgcnVsZXNbIm5vLWRlYnVnZ2VyIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLWRlYnVnZ2VyIik7CisgICAgcnVsZXNbIm5vLWRlbGV0ZS12YXIi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGVsZXRlLXZhciIpOworICAgIHJ1bGVzWyJuby1kaXYt
cmVnZXgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZGl2LXJlZ2V4Iik7CisgICAgcnVsZXNbIm5v
LWR1cGUta2V5cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1kdXBlLWtleXMiKTsKKyAgICBydWxl
c1sibm8tZWxzZS1yZXR1cm4iXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZWxzZS1yZXR1cm4iKTsK
KyAgICBydWxlc1sibm8tZW1wdHktY2xhc3MiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZW1wdHkt
Y2xhc3MiKTsKKyAgICBydWxlc1sibm8tZW1wdHktbGFiZWwiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tZW1wdHktbGFiZWwiKTsKKyAgICBydWxlc1sibm8tZW1wdHkiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tZW1wdHkiKTsKKyAgICBydWxlc1sibm8tZXEtbnVsbCJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby1lcS1udWxsIik7CisgICAgcnVsZXNbIm5vLWV2YWwiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tZXZhbCIpOworICAgIHJ1bGVzWyJuby1leC1hc3NpZ24iXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tZXgtYXNzaWduIik7CisgICAgcnVsZXNbIm5vLWV4dGVuZC1uYXRpdmUiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tZXh0ZW5kLW5hdGl2ZSIpOworICAgIHJ1bGVzWyJuby1leHRyYS1iaW5kIl0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLWV4dHJhLWJpbmQiKTsKKyAgICBydWxlc1sibm8tZXh0cmEt
Ym9vbGVhbi1jYXN0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWV4dHJhLWJvb2xlYW4tY2FzdCIp
OworICAgIHJ1bGVzWyJuby1leHRyYS1wYXJlbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0
cmEtcGFyZW5zIik7CisgICAgcnVsZXNbIm5vLWV4dHJhLXNlbWkiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tZXh0cmEtc2VtaSIpOworICAgIHJ1bGVzWyJuby1leHRyYS1zdHJpY3QiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tZXh0cmEtc3RyaWN0Iik7CisgICAgcnVsZXNbIm5vLWZhbGx0aHJvdWdo
Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWZhbGx0aHJvdWdoIik7CisgICAgcnVsZXNbIm5vLWZs
b2F0aW5nLWRlY2ltYWwiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZmxvYXRpbmctZGVjaW1hbCIp
OworICAgIHJ1bGVzWyJuby1mdW5jLWFzc2lnbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1mdW5j
LWFzc2lnbiIpOworICAgIHJ1bGVzWyJuby1pbXBsaWVkLWV2YWwiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8taW1wbGllZC1ldmFsIik7CisgICAgcnVsZXNbIm5vLWlubmVyLWRlY2xhcmF0aW9ucyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1pbm5lci1kZWNsYXJhdGlvbnMiKTsKKyAgICBydWxlc1si
bm8taW52YWxpZC1yZWdleHAiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8taW52YWxpZC1yZWdleHAi
KTsKKyAgICBydWxlc1sibm8taXRlcmF0b3IiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8taXRlcmF0
b3IiKTsKKyAgICBydWxlc1sibm8tbGFiZWwtdmFyIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWxh
YmVsLXZhciIpOworICAgIHJ1bGVzWyJuby1sYWJlbHMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8t
bGFiZWxzIik7CisgICAgcnVsZXNbIm5vLWxvbmUtYmxvY2tzIl0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLWxvbmUtYmxvY2tzIik7CisgICAgcnVsZXNbIm5vLWxvbmVseS1pZiJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1sb25lbHktaWYiKTsKKyAgICBydWxlc1sibm8tbG9vcC1mdW5jIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLWxvb3AtZnVuYyIpOworICAgIHJ1bGVzWyJuby1taXhlZC1yZXF1aXJl
cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1taXhlZC1yZXF1aXJlcyIpOworICAgIHJ1bGVzWyJu
by1taXhlZC1zcGFjZXMtYW5kLXRhYnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbWl4ZWQtc3Bh
Y2VzLWFuZC10YWJzIik7CisgICAgcnVsZXNbIm5vLW11bHRpLXN0ciJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1tdWx0aS1zdHIiKTsKKyAgICBydWxlc1sibm8tbmF0aXZlLXJlYXNzaWduIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLW5hdGl2ZS1yZWFzc2lnbiIpOworICAgIHJ1bGVzWyJuby1uZWdh
dGVkLWluLWxocyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1uZWdhdGVkLWluLWxocyIpOworICAg
IHJ1bGVzWyJuby1uZXN0ZWQtdGVybmFyeSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1uZXN0ZWQt
dGVybmFyeSIpOworICAgIHJ1bGVzWyJuby1uZXctZnVuYyJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1uZXctZnVuYyIpOworICAgIHJ1bGVzWyJuby1uZXctb2JqZWN0Il0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLW5ldy1vYmplY3QiKTsKKyAgICBydWxlc1sibm8tbmV3LXJlcXVpcmUiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tbmV3LXJlcXVpcmUiKTsKKyAgICBydWxlc1sibm8tbmV3LXdyYXBwZXJz
Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5ldy13cmFwcGVycyIpOworICAgIHJ1bGVzWyJuby1u
ZXciXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmV3Iik7CisgICAgcnVsZXNbIm5vLW9iai1jYWxs
cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1vYmotY2FsbHMiKTsKKyAgICBydWxlc1sibm8tb2N0
YWwtZXNjYXBlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW9jdGFsLWVzY2FwZSIpOworICAgIHJ1
bGVzWyJuby1vY3RhbCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1vY3RhbCIpOworICAgIHJ1bGVz
WyJuby1wYXRoLWNvbmNhdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1wYXRoLWNvbmNhdCIpOwor
ICAgIHJ1bGVzWyJuby1wbHVzcGx1cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1wbHVzcGx1cyIp
OworICAgIHJ1bGVzWyJuby1wcm9jZXNzLWVudiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1wcm9j
ZXNzLWVudiIpOworICAgIHJ1bGVzWyJuby1wcm9jZXNzLWV4aXQiXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tcHJvY2Vzcy1leGl0Iik7CisgICAgcnVsZXNbIm5vLXByb3RvIl0gPSByZXF1aXJlKCIu
L3J1bGVzL25vLXByb3RvIik7CisgICAgcnVsZXNbIm5vLXJlZGVjbGFyZSJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1yZWRlY2xhcmUiKTsKKyAgICBydWxlc1sibm8tcmVnZXgtc3BhY2VzIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLXJlZ2V4LXNwYWNlcyIpOworICAgIHJ1bGVzWyJuby1yZXNlcnZl
ZC1rZXlzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXJlc2VydmVkLWtleXMiKTsKKyAgICBydWxl
c1sibm8tcmVzdHJpY3RlZC1tb2R1bGVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXJlc3RyaWN0
ZWQtbW9kdWxlcyIpOworICAgIHJ1bGVzWyJuby1yZXR1cm4tYXNzaWduIl0gPSByZXF1aXJlKCIu
L3J1bGVzL25vLXJldHVybi1hc3NpZ24iKTsKKyAgICBydWxlc1sibm8tc2NyaXB0LXVybCJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1zY3JpcHQtdXJsIik7CisgICAgcnVsZXNbIm5vLXNlbGYtY29t
cGFyZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zZWxmLWNvbXBhcmUiKTsKKyAgICBydWxlc1si
bm8tc2VxdWVuY2VzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNlcXVlbmNlcyIpOworICAgIHJ1
bGVzWyJuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1z
aGFkb3ctcmVzdHJpY3RlZC1uYW1lcyIpOworICAgIHJ1bGVzWyJuby1zaGFkb3ciXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tc2hhZG93Iik7CisgICAgcnVsZXNbIm5vLXNwYWNlLWJlZm9yZS1zZW1p
Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNwYWNlLWJlZm9yZS1zZW1pIik7CisgICAgcnVsZXNb
Im5vLXNwYWNlZC1mdW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNwYWNlZC1mdW5jIik7Cisg
ICAgcnVsZXNbIm5vLXNwYXJzZS1hcnJheXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3BhcnNl
LWFycmF5cyIpOworICAgIHJ1bGVzWyJuby1zeW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXN5
bmMiKTsKKyAgICBydWxlc1sibm8tdGVybmFyeSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby10ZXJu
YXJ5Iik7CisgICAgcnVsZXNbIm5vLXRyYWlsaW5nLXNwYWNlcyJdID0gcmVxdWlyZSgiLi9ydWxl
cy9uby10cmFpbGluZy1zcGFjZXMiKTsKKyAgICBydWxlc1sibm8tdW5kZWYtaW5pdCJdID0gcmVx
dWlyZSgiLi9ydWxlcy9uby11bmRlZi1pbml0Iik7CisgICAgcnVsZXNbIm5vLXVuZGVmIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLXVuZGVmIik7CisgICAgcnVsZXNbIm5vLXVuZGVmaW5lZCJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby11bmRlZmluZWQiKTsKKyAgICBydWxlc1sibm8tdW5kZXJzY29y
ZS1kYW5nbGUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdW5kZXJzY29yZS1kYW5nbGUiKTsKKyAg
ICBydWxlc1sibm8tdW5yZWFjaGFibGUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdW5yZWFjaGFi
bGUiKTsKKyAgICBydWxlc1sibm8tdW51c2VkLWV4cHJlc3Npb25zIl0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLXVudXNlZC1leHByZXNzaW9ucyIpOworICAgIHJ1bGVzWyJuby11bnVzZWQtdmFycyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bnVzZWQtdmFycyIpOworICAgIHJ1bGVzWyJuby11c2Ut
YmVmb3JlLWRlZmluZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11c2UtYmVmb3JlLWRlZmluZSIp
OworICAgIHJ1bGVzWyJuby12b2lkIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXZvaWQiKTsKKyAg
ICBydWxlc1sibm8td2FybmluZy1jb21tZW50cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby13YXJu
aW5nLWNvbW1lbnRzIik7CisgICAgcnVsZXNbIm5vLXdpdGgiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8td2l0aCIpOworICAgIHJ1bGVzWyJuby13cmFwLWZ1bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8td3JhcC1mdW5jIik7CisgICAgcnVsZXNbIm9uZS12YXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
b25lLXZhciIpOworICAgIHJ1bGVzWyJwYWRkZWQtYmxvY2tzIl0gPSByZXF1aXJlKCIuL3J1bGVz
L3BhZGRlZC1ibG9ja3MiKTsKKyAgICBydWxlc1sicXVvdGUtcHJvcHMiXSA9IHJlcXVpcmUoIi4v
cnVsZXMvcXVvdGUtcHJvcHMiKTsKKyAgICBydWxlc1sicXVvdGVzIl0gPSByZXF1aXJlKCIuL3J1
bGVzL3F1b3RlcyIpOworICAgIHJ1bGVzWyJyYWRpeCJdID0gcmVxdWlyZSgiLi9ydWxlcy9yYWRp
eCIpOworICAgIHJ1bGVzWyJzZW1pIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NlbWkiKTsKKyAgICBy
dWxlc1sic29ydC12YXJzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NvcnQtdmFycyIpOworICAgIHJ1
bGVzWyJzcGFjZS1hZnRlci1rZXl3b3JkcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1hZnRl
ci1rZXl3b3JkcyIpOworICAgIHJ1bGVzWyJzcGFjZS1pbi1icmFja2V0cyJdID0gcmVxdWlyZSgi
Li9ydWxlcy9zcGFjZS1pbi1icmFja2V0cyIpOworICAgIHJ1bGVzWyJzcGFjZS1pbi1wYXJlbnMi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtaW4tcGFyZW5zIik7CisgICAgcnVsZXNbInNwYWNl
LWluZml4LW9wcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1pbmZpeC1vcHMiKTsKKyAgICBy
dWxlc1sic3BhY2UtcmV0dXJuLXRocm93LWNhc2UiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2Ut
cmV0dXJuLXRocm93LWNhc2UiKTsKKyAgICBydWxlc1sic3BhY2UtdW5hcnktd29yZC1vcHMiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvc3BhY2UtdW5hcnktd29yZC1vcHMiKTsKKyAgICBydWxlc1sic3Ry
aWN0Il0gPSByZXF1aXJlKCIuL3J1bGVzL3N0cmljdCIpOworICAgIHJ1bGVzWyJ1c2UtaXNuYW4i
XSA9IHJlcXVpcmUoIi4vcnVsZXMvdXNlLWlzbmFuIik7CisgICAgcnVsZXNbInZhbGlkLWpzZG9j
Il0gPSByZXF1aXJlKCIuL3J1bGVzL3ZhbGlkLWpzZG9jIik7CisgICAgcnVsZXNbInZhbGlkLXR5
cGVvZiJdID0gcmVxdWlyZSgiLi9ydWxlcy92YWxpZC10eXBlb2YiKTsKKyAgICBydWxlc1sidmFy
cy1vbi10b3AiXSA9IHJlcXVpcmUoIi4vcnVsZXMvdmFycy1vbi10b3AiKTsKKyAgICBydWxlc1si
d3JhcC1paWZlIl0gPSByZXF1aXJlKCIuL3J1bGVzL3dyYXAtaWlmZSIpOworICAgIHJ1bGVzWyJ3
cmFwLXJlZ2V4Il0gPSByZXF1aXJlKCIuL3J1bGVzL3dyYXAtcmVnZXgiKTsKKyAgICBydWxlc1si
eW9kYSJdID0gcmVxdWlyZSgiLi9ydWxlcy95b2RhIik7CisKKyAgICByZXR1cm4gcnVsZXM7Cit9
OworfSx7Ii4vcnVsZXMvYmxvY2stc2NvcGVkLXZhciI6MTMsIi4vcnVsZXMvYnJhY2Utc3R5bGUi
OjE0LCIuL3J1bGVzL2NhbWVsY2FzZSI6MTUsIi4vcnVsZXMvY29tbWEtc3R5bGUiOjE2LCIuL3J1
bGVzL2NvbXBsZXhpdHkiOjE3LCIuL3J1bGVzL2NvbnNpc3RlbnQtcmV0dXJuIjoxOCwiLi9ydWxl
cy9jb25zaXN0ZW50LXRoaXMiOjE5LCIuL3J1bGVzL2N1cmx5IjoyMCwiLi9ydWxlcy9kZWZhdWx0
LWNhc2UiOjIxLCIuL3J1bGVzL2RvdC1ub3RhdGlvbiI6MjIsIi4vcnVsZXMvZW9sLWxhc3QiOjIz
LCIuL3J1bGVzL2VxZXFlcSI6MjQsIi4vcnVsZXMvZnVuYy1uYW1lcyI6MjUsIi4vcnVsZXMvZnVu
Yy1zdHlsZSI6MjYsIi4vcnVsZXMvZ2xvYmFsLXN0cmljdCI6MjcsIi4vcnVsZXMvZ3VhcmQtZm9y
LWluIjoyOCwiLi9ydWxlcy9oYW5kbGUtY2FsbGJhY2stZXJyIjoyOSwiLi9ydWxlcy9tYXgtZGVw
dGgiOjMwLCIuL3J1bGVzL21heC1sZW4iOjMxLCIuL3J1bGVzL21heC1uZXN0ZWQtY2FsbGJhY2tz
IjozMiwiLi9ydWxlcy9tYXgtcGFyYW1zIjozMywiLi9ydWxlcy9tYXgtc3RhdGVtZW50cyI6MzQs
Ii4vcnVsZXMvbmV3LWNhcCI6MzUsIi4vcnVsZXMvbmV3LXBhcmVucyI6MzYsIi4vcnVsZXMvbm8t
YWxlcnQiOjM3LCIuL3J1bGVzL25vLWFycmF5LWNvbnN0cnVjdG9yIjozOCwiLi9ydWxlcy9uby1i
aXR3aXNlIjozOSwiLi9ydWxlcy9uby1jYWxsZXIiOjQwLCIuL3J1bGVzL25vLWNhdGNoLXNoYWRv
dyI6NDEsIi4vcnVsZXMvbm8tY29tbWEtZGFuZ2xlIjo0MiwiLi9ydWxlcy9uby1jb25kLWFzc2ln
biI6NDMsIi4vcnVsZXMvbm8tY29uc29sZSI6NDQsIi4vcnVsZXMvbm8tY29uc3RhbnQtY29uZGl0
aW9uIjo0NSwiLi9ydWxlcy9uby1jb250cm9sLXJlZ2V4Ijo0NiwiLi9ydWxlcy9uby1kZWJ1Z2dl
ciI6NDcsIi4vcnVsZXMvbm8tZGVsZXRlLXZhciI6NDgsIi4vcnVsZXMvbm8tZGl2LXJlZ2V4Ijo0
OSwiLi9ydWxlcy9uby1kdXBlLWtleXMiOjUwLCIuL3J1bGVzL25vLWVsc2UtcmV0dXJuIjo1MSwi
Li9ydWxlcy9uby1lbXB0eSI6NTQsIi4vcnVsZXMvbm8tZW1wdHktY2xhc3MiOjUyLCIuL3J1bGVz
L25vLWVtcHR5LWxhYmVsIjo1MywiLi9ydWxlcy9uby1lcS1udWxsIjo1NSwiLi9ydWxlcy9uby1l
dmFsIjo1NiwiLi9ydWxlcy9uby1leC1hc3NpZ24iOjU3LCIuL3J1bGVzL25vLWV4dGVuZC1uYXRp
dmUiOjU4LCIuL3J1bGVzL25vLWV4dHJhLWJpbmQiOjU5LCIuL3J1bGVzL25vLWV4dHJhLWJvb2xl
YW4tY2FzdCI6NjAsIi4vcnVsZXMvbm8tZXh0cmEtcGFyZW5zIjo2MSwiLi9ydWxlcy9uby1leHRy
YS1zZW1pIjo2MiwiLi9ydWxlcy9uby1leHRyYS1zdHJpY3QiOjYzLCIuL3J1bGVzL25vLWZhbGx0
aHJvdWdoIjo2NCwiLi9ydWxlcy9uby1mbG9hdGluZy1kZWNpbWFsIjo2NSwiLi9ydWxlcy9uby1m
dW5jLWFzc2lnbiI6NjYsIi4vcnVsZXMvbm8taW1wbGllZC1ldmFsIjo2NywiLi9ydWxlcy9uby1p
bm5lci1kZWNsYXJhdGlvbnMiOjY4LCIuL3J1bGVzL25vLWludmFsaWQtcmVnZXhwIjo2OSwiLi9y
dWxlcy9uby1pdGVyYXRvciI6NzAsIi4vcnVsZXMvbm8tbGFiZWwtdmFyIjo3MSwiLi9ydWxlcy9u
by1sYWJlbHMiOjcyLCIuL3J1bGVzL25vLWxvbmUtYmxvY2tzIjo3MywiLi9ydWxlcy9uby1sb25l
bHktaWYiOjc0LCIuL3J1bGVzL25vLWxvb3AtZnVuYyI6NzUsIi4vcnVsZXMvbm8tbWl4ZWQtcmVx
dWlyZXMiOjc2LCIuL3J1bGVzL25vLW1peGVkLXNwYWNlcy1hbmQtdGFicyI6NzcsIi4vcnVsZXMv
bm8tbXVsdGktc3RyIjo3OCwiLi9ydWxlcy9uby1uYXRpdmUtcmVhc3NpZ24iOjc5LCIuL3J1bGVz
L25vLW5lZ2F0ZWQtaW4tbGhzIjo4MCwiLi9ydWxlcy9uby1uZXN0ZWQtdGVybmFyeSI6ODEsIi4v
cnVsZXMvbm8tbmV3Ijo4NiwiLi9ydWxlcy9uby1uZXctZnVuYyI6ODIsIi4vcnVsZXMvbm8tbmV3
LW9iamVjdCI6ODMsIi4vcnVsZXMvbm8tbmV3LXJlcXVpcmUiOjg0LCIuL3J1bGVzL25vLW5ldy13
cmFwcGVycyI6ODUsIi4vcnVsZXMvbm8tb2JqLWNhbGxzIjo4NywiLi9ydWxlcy9uby1vY3RhbCI6
ODksIi4vcnVsZXMvbm8tb2N0YWwtZXNjYXBlIjo4OCwiLi9ydWxlcy9uby1wYXRoLWNvbmNhdCI6
OTAsIi4vcnVsZXMvbm8tcGx1c3BsdXMiOjkxLCIuL3J1bGVzL25vLXByb2Nlc3MtZW52Ijo5Miwi
Li9ydWxlcy9uby1wcm9jZXNzLWV4aXQiOjkzLCIuL3J1bGVzL25vLXByb3RvIjo5NCwiLi9ydWxl
cy9uby1yZWRlY2xhcmUiOjk1LCIuL3J1bGVzL25vLXJlZ2V4LXNwYWNlcyI6OTYsIi4vcnVsZXMv
bm8tcmVzZXJ2ZWQta2V5cyI6OTcsIi4vcnVsZXMvbm8tcmVzdHJpY3RlZC1tb2R1bGVzIjo5OCwi
Li9ydWxlcy9uby1yZXR1cm4tYXNzaWduIjo5OSwiLi9ydWxlcy9uby1zY3JpcHQtdXJsIjoxMDAs
Ii4vcnVsZXMvbm8tc2VsZi1jb21wYXJlIjoxMDEsIi4vcnVsZXMvbm8tc2VxdWVuY2VzIjoxMDIs
Ii4vcnVsZXMvbm8tc2hhZG93IjoxMDQsIi4vcnVsZXMvbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFt
ZXMiOjEwMywiLi9ydWxlcy9uby1zcGFjZS1iZWZvcmUtc2VtaSI6MTA1LCIuL3J1bGVzL25vLXNw
YWNlZC1mdW5jIjoxMDYsIi4vcnVsZXMvbm8tc3BhcnNlLWFycmF5cyI6MTA3LCIuL3J1bGVzL25v
LXN5bmMiOjEwOCwiLi9ydWxlcy9uby10ZXJuYXJ5IjoxMDksIi4vcnVsZXMvbm8tdHJhaWxpbmct
c3BhY2VzIjoxMTAsIi4vcnVsZXMvbm8tdW5kZWYiOjExMiwiLi9ydWxlcy9uby11bmRlZi1pbml0
IjoxMTEsIi4vcnVsZXMvbm8tdW5kZWZpbmVkIjoxMTMsIi4vcnVsZXMvbm8tdW5kZXJzY29yZS1k
YW5nbGUiOjExNCwiLi9ydWxlcy9uby11bnJlYWNoYWJsZSI6MTE1LCIuL3J1bGVzL25vLXVudXNl
ZC1leHByZXNzaW9ucyI6MTE2LCIuL3J1bGVzL25vLXVudXNlZC12YXJzIjoxMTcsIi4vcnVsZXMv
bm8tdXNlLWJlZm9yZS1kZWZpbmUiOjExOCwiLi9ydWxlcy9uby12b2lkIjoxMTksIi4vcnVsZXMv
bm8td2FybmluZy1jb21tZW50cyI6MTIwLCIuL3J1bGVzL25vLXdpdGgiOjEyMSwiLi9ydWxlcy9u
by13cmFwLWZ1bmMiOjEyMiwiLi9ydWxlcy9vbmUtdmFyIjoxMjMsIi4vcnVsZXMvcGFkZGVkLWJs
b2NrcyI6MTI0LCIuL3J1bGVzL3F1b3RlLXByb3BzIjoxMjUsIi4vcnVsZXMvcXVvdGVzIjoxMjYs
Ii4vcnVsZXMvcmFkaXgiOjEyNywiLi9ydWxlcy9zZW1pIjoxMjgsIi4vcnVsZXMvc29ydC12YXJz
IjoxMjksIi4vcnVsZXMvc3BhY2UtYWZ0ZXIta2V5d29yZHMiOjEzMCwiLi9ydWxlcy9zcGFjZS1p
bi1icmFja2V0cyI6MTMxLCIuL3J1bGVzL3NwYWNlLWluLXBhcmVucyI6MTMyLCIuL3J1bGVzL3Nw
YWNlLWluZml4LW9wcyI6MTMzLCIuL3J1bGVzL3NwYWNlLXJldHVybi10aHJvdy1jYXNlIjoxMzQs
Ii4vcnVsZXMvc3BhY2UtdW5hcnktd29yZC1vcHMiOjEzNSwiLi9ydWxlcy9zdHJpY3QiOjEzNiwi
Li9ydWxlcy91c2UtaXNuYW4iOjEzNywiLi9ydWxlcy92YWxpZC1qc2RvYyI6MTM4LCIuL3J1bGVz
L3ZhbGlkLXR5cGVvZiI6MTM5LCIuL3J1bGVzL3ZhcnMtb24tdG9wIjoxNDAsIi4vcnVsZXMvd3Jh
cC1paWZlIjoxNDEsIi4vcnVsZXMvd3JhcC1yZWdleCI6MTQyLCIuL3J1bGVzL3lvZGEiOjE0M31d
LDExOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBSdWxlQ29udGV4dCB1dGlsaXR5IGZvciBydWxlcworICogQGF1dGhvciBOaWNob2xhcyBD
LiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBDb25zdGFudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBQQVNTVEhST1VHSFMg
PSBbCisgICAgICAgICJnZXRTb3VyY2UiLAorICAgICAgICAiZ2V0U291cmNlTGluZXMiLAorICAg
ICAgICAiZ2V0VG9rZW5zIiwKKyAgICAgICAgImdldFRva2Vuc0JlZm9yZSIsCisgICAgICAgICJn
ZXRUb2tlbkJlZm9yZSIsCisgICAgICAgICJnZXRUb2tlbnNBZnRlciIsCisgICAgICAgICJnZXRU
b2tlbkFmdGVyIiwKKyAgICAgICAgImdldEZpcnN0VG9rZW5zIiwKKyAgICAgICAgImdldEZpcnN0
VG9rZW4iLAorICAgICAgICAiZ2V0TGFzdFRva2VucyIsCisgICAgICAgICJnZXRMYXN0VG9rZW4i
LAorICAgICAgICAiZ2V0Q29tbWVudHMiLAorICAgICAgICAiZ2V0QW5jZXN0b3JzIiwKKyAgICAg
ICAgImdldFNjb3BlIiwKKyAgICAgICAgImdldEpTRG9jQ29tbWVudCIsCisgICAgICAgICJnZXRG
aWxlbmFtZSIKKyAgICBdOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIEFjdHMgYXMgYW4gYWJz
dHJhY3Rpb24gbGF5ZXIgYmV0d2VlbiBydWxlcyBhbmQgdGhlIG1haW4gZXNsaW50IG9iamVjdC4K
KyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtzdHJpbmd9IHJ1bGVJZCBUaGUgSUQgb2YgdGhl
IHJ1bGUgdXNpbmcgdGhpcyBvYmplY3QuCisgKiBAcGFyYW0ge2VzbGludH0gZXNsaW50IFRoZSBl
c2xpbnQgb2JqZWN0LgorICogQHBhcmFtIHtudW1iZXJ9IHNldmVyaXR5IFRoZSBjb25maWd1cmVk
IHNldmVyaXR5IGxldmVsIG9mIHRoZSBydWxlLgorICogQHBhcmFtIHthcnJheX0gb3B0aW9ucyBU
aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0byBiZSBhZGRlZCB0byB0aGUgcnVsZS4KKyAq
IEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBUaGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBwYXNz
ZWQgZnJvbSB0aGUgY29uZmlnIGZpbGUuCisgKi8KK2Z1bmN0aW9uIFJ1bGVDb250ZXh0KHJ1bGVJ
ZCwgZXNsaW50LCBzZXZlcml0eSwgb3B0aW9ucywgc2V0dGluZ3MpIHsKKworICAgIC8qKgorICAg
ICAqIFRoZSByZWFkLW9ubHkgSUQgb2YgdGhlIHJ1bGUuCisgICAgICovCisgICAgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KHRoaXMsICJpZCIsIHsKKyAgICAgICAgdmFsdWU6IHJ1bGVJZAorICAgIH0p
OworCisgICAgLyoqCisgICAgICogVGhlIHJlYWQtb25seSBvcHRpb25zIG9mIHRoZSBydWxlCisg
ICAgICovCisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICJvcHRpb25zIiwgeworICAg
ICAgICB2YWx1ZTogb3B0aW9ucworICAgIH0pOworCisgICAgLyoqCisgICAgICogVGhlIHJlYWQt
b25seSBzZXR0aW5ncyBzaGFyZWQgYmV0d2VlbiBhbGwgcnVsZXMKKyAgICAgKi8KKyAgICBPYmpl
Y3QuZGVmaW5lUHJvcGVydHkodGhpcywgInNldHRpbmdzIiwgeworICAgICAgICB2YWx1ZTogc2V0
dGluZ3MKKyAgICB9KTsKKworICAgIC8vIGNvcHkgb3ZlciBwYXNzdGhyb3VnaCBtZXRob2RzCisg
ICAgUEFTU1RIUk9VR0hTLmZvckVhY2goZnVuY3Rpb24obmFtZSkgeworICAgICAgICB0aGlzW25h
bWVdID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gZXNsaW50W25hbWVdLmFwcGx5
KGVzbGludCwgYXJndW1lbnRzKTsKKyAgICAgICAgfTsKKyAgICB9LCB0aGlzKTsKKworICAgIC8q
KgorICAgICAqIFBhc3N0aHJvdWdoIHRvIGVzbGludC5yZXBvcnQoKSB0aGF0IGF1dG9tYXRpY2Fs
bHkgYXNzaWducyB0aGUgcnVsZSBJRCBhbmQgc2V2ZXJpdHkuCisgICAgICogQHBhcmFtIHtBU1RO
b2RlfSBub2RlIFRoZSBBU1Qgbm9kZSByZWxhdGVkIHRvIHRoZSBtZXNzYWdlLgorICAgICAqIEBw
YXJhbSB7T2JqZWN0PX0gbG9jYXRpb24gVGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvci4KKyAgICAg
KiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IHRvIHRoZSB1
c2VyLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIHRlbXBsYXRlIGRhdGEg
d2hpY2ggcHJvZHVjZXMgYSBmb3JtYXR0ZWQgbWVzc2FnZQorICAgICAqICAgICB3aXRoIHN5bWJv
bHMgYmVpbmcgcmVwbGFjZWQgYnkgdGhpcyBvYmplY3QncyB2YWx1ZXMuCisgICAgICogQHJldHVy
bnMge3ZvaWR9CisgICAgICovCisgICAgdGhpcy5yZXBvcnQgPSBmdW5jdGlvbihub2RlLCBsb2Nh
dGlvbiwgbWVzc2FnZSwgb3B0cykgeworICAgICAgICBlc2xpbnQucmVwb3J0KHJ1bGVJZCwgc2V2
ZXJpdHksIG5vZGUsIGxvY2F0aW9uLCBtZXNzYWdlLCBvcHRzKTsKKyAgICB9OworCit9CisKK1J1
bGVDb250ZXh0LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogUnVsZUNvbnRleHQKK307
CisKK21vZHVsZS5leHBvcnRzID0gUnVsZUNvbnRleHQ7CisKK30se31dLDEyOltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEZWZpbmVzIGEg
c3RvcmFnZSBmb3IgcnVsZXMuCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKwor
InVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVxdWlyZW1lbnRz
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgbG9hZFJ1bGVzID0gcmVxdWlyZSgiLi9s
b2FkLXJ1bGVzIik7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcml2YXRlcworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIHJ1bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFB1YmxpYyBJbnRlcmZhY2UKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogUmVnaXN0ZXJzIGEgcnVsZSBtb2R1bGUgZm9yIHJ1
bGUgaWQgaW4gc3RvcmFnZS4KKyAqIEBwYXJhbSB7U3RyaW5nfSBydWxlSWQgUnVsZSBpZCAoZmls
ZSBuYW1lKS4KKyAqIEBwYXJhbSB7RnVuY3Rpb259IHJ1bGVNb2R1bGUgUnVsZSBoYW5kbGVyLgor
ICogQHJldHVybnMge3ZvaWR9CisgKi8KK2Z1bmN0aW9uIGRlZmluZShydWxlSWQsIHJ1bGVNb2R1
bGUpIHsKKyAgICBydWxlc1tydWxlSWRdID0gcnVsZU1vZHVsZTsKK30KKworZXhwb3J0cy5kZWZp
bmUgPSBkZWZpbmU7CisKKy8qKgorICogTG9hZHMgYW5kIHJlZ2lzdGVycyBhbGwgcnVsZXMgZnJv
bSBwYXNzZWQgcnVsZXMgZGlyZWN0b3J5LgorICogQHBhcmFtIHtTdHJpbmd9IFtydWxlc0Rpcl0g
UGF0aCB0byBydWxlcyBkaXJlY3RvcnksIG1heSBiZSByZWxhdGl2ZS4gRGVmYXVsdHMgdG8gYGxp
Yi9ydWxlc2AuCisgKiBAcmV0dXJucyB7dm9pZH0KKyAqLworZnVuY3Rpb24gbG9hZChydWxlc0Rp
cikgeworICAgIHZhciBuZXdSdWxlcyA9IGxvYWRSdWxlcyhydWxlc0Rpcik7CisgICAgT2JqZWN0
LmtleXMobmV3UnVsZXMpLmZvckVhY2goZnVuY3Rpb24ocnVsZUlkKSB7CisgICAgICAgIGRlZmlu
ZShydWxlSWQsIG5ld1J1bGVzW3J1bGVJZF0pOworICAgIH0pOworfQorCitleHBvcnRzLmxvYWQg
PSBsb2FkOworCisvKioKKyAqIFJlZ2lzdGVycyBhbGwgZ2l2ZW4gcnVsZXMgb2YgYSBwbHVnaW4u
CisgKiBAcGFyYW0ge09iamVjdH0gcGx1Z2luUnVsZXMgQSBrZXkvdmFsdWUgbWFwIG9mIHJ1bGUg
ZGVmaW5pdGlvbnMuCisgKiBAcGFyYW0ge1N0cmluZ30gcGx1Z2luTmFtZSBUaGUgbmFtZSBvZiB0
aGUgcGx1Z2luIHdpdGhvdXQgcHJlZml4IChgZXNsaW50LXBsdWdpbi1gKS4KKyAqIEByZXR1cm5z
IHt2b2lkfQorICovCitleHBvcnRzLmltcG9ydCA9IGZ1bmN0aW9uIChwbHVnaW5SdWxlcywgcGx1
Z2luTmFtZSkgeworICAgIE9iamVjdC5rZXlzKHBsdWdpblJ1bGVzKS5mb3JFYWNoKGZ1bmN0aW9u
IChydWxlSWQpIHsKKyAgICAgICAgdmFyIHF1YWxpZmllZFJ1bGVJZCA9IHBsdWdpbk5hbWUgKyAi
LyIgKyBydWxlSWQsCisgICAgICAgICAgICBydWxlID0gcGx1Z2luUnVsZXNbcnVsZUlkXTsKKwor
ICAgICAgICBkZWZpbmUocXVhbGlmaWVkUnVsZUlkLCBydWxlKTsKKyAgICB9KTsKK307CisKKy8q
KgorICogQWNjZXNzIHJ1bGUgaGFuZGxlciBieSBpZCAoZmlsZSBuYW1lKS4KKyAqIEBwYXJhbSB7
U3RyaW5nfSBydWxlSWQgUnVsZSBpZCAoZmlsZSBuYW1lKS4KKyAqIEByZXR1cm5zIHtGdW5jdGlv
bn0gUnVsZSBoYW5kbGVyLgorICovCitleHBvcnRzLmdldCA9IGZ1bmN0aW9uKHJ1bGVJZCkgewor
ICAgIHJldHVybiBydWxlc1tydWxlSWRdOworfTsKKworLyoqCisgKiBSZXNldCBydWxlcyBzdG9y
YWdlLgorICogU2hvdWxkIGJlIHVzZWQgb25seSBpbiB0ZXN0cy4KKyAqIEByZXR1cm5zIHt2b2lk
fQorICovCitleHBvcnRzLnRlc3RDbGVhciA9IGZ1bmN0aW9uKCkgeworICAgIHJ1bGVzID0gT2Jq
ZWN0LmNyZWF0ZShudWxsKTsKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbml0
aWFsaXphdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gbG9hZHMgYnVpbHQtaW4g
cnVsZXMKK2xvYWQoKTsKKworfSx7Ii4vbG9hZC1ydWxlcyI6MTB9XSwxMzpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjaGVj
ayBmb3IgImJsb2NrIHNjb3BlZCIgdmFyaWFibGVzIGJ5IGJpbmRpbmcgY29udGV4dAorICogQGF1
dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4KKyAqLworInVzZSBz
dHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgIHZhciBzY29wZVN0YWNrID0gW107CisKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgor
ICAgICAqIERldGVybWluZXMgd2hldGhlciBhbiBpZGVudGlmaWVyIGlzIGluIGRlY2xhcmF0aW9u
IHBvc2l0aW9uIG9yIGlzIGEgbm9uLWRlY2xhcmF0aW9uIHJlZmVyZW5jZS4KKyAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IGlkIFRoZSBpZGVudGlmaWVyLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0g
cGFyZW50IFRoZSBpZGVudGlmaWVyJ3MgcGFyZW50IEFTVCBub2RlLgorICAgICAqIEByZXR1cm5z
IHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIGlkZW50aWZpZXIgaXMgaW4gZGVjbGFyYXRpb24gcG9z
aXRpb24uCisgICAgICovCisgICAgZnVuY3Rpb24gaXNEZWNsYXJhdGlvbihpZCwgcGFyZW50KSB7
CisgICAgICAgIHN3aXRjaCAocGFyZW50LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgIkZ1bmN0
aW9uRGVjbGFyYXRpb24iOgorICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb25FeHByZXNzaW9uIjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50LnBhcmFtcy5pbmRleE9mKGlkKSA+IC0xIHx8
IGlkID09PSBwYXJlbnQuaWQ7CisKKyAgICAgICAgICAgIGNhc2UgIlZhcmlhYmxlRGVjbGFyYXRv
ciI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlkID09PSBwYXJlbnQuaWQ7CisKKyAgICAgICAg
ICAgIGNhc2UgIkNhdGNoQ2xhdXNlIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IHBh
cmVudC5wYXJhbTsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVz
IHdoZXRoZXIgYW4gaWRlbnRpZmllciBpcyBpbiBwcm9wZXJ0eSBwb3NpdGlvbi4KKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IGlkIFRoZSBpZGVudGlmaWVyLgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gcGFyZW50IFRoZSBpZGVudGlmaWVyJ3MgcGFyZW50IEFTVCBub2RlLgorICAgICAqIEByZXR1
cm5zIHtCb29sZWFufSB0cnVlIHdoZW4gdGhlIGlkZW50aWZpZXIgaXMgaW4gcHJvcGVydHkgcG9z
aXRpb24uCisgICAgICovCisgICAgZnVuY3Rpb24gaXNQcm9wZXJ0eShpZCwgcGFyZW50KSB7Cisg
ICAgICAgIHN3aXRjaCAocGFyZW50LnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgIk1lbWJlckV4
cHJlc3Npb24iOgorICAgICAgICAgICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50LnByb3BlcnR5
ICYmICFwYXJlbnQuY29tcHV0ZWQ7CisKKyAgICAgICAgICAgIGNhc2UgIlByb3BlcnR5IjoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IHBhcmVudC5rZXk7CisKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgLyoqCisgICAgICogUHVzaGVzIGEgbmV3IHNjb3BlIG9iamVjdCBvbiB0aGUgc2NvcGUg
c3RhY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gcHVz
aFNjb3BlKCkgeworICAgICAgICBzY29wZVN0YWNrLnB1c2goW10pOworICAgIH0KKworICAgIC8q
KgorICAgICAqIFJlbW92ZXMgdGhlIHRvcG1vc3Qgc2NvcGUgb2JqZWN0IGZyb20gdGhlIHNjb3Bl
IHN0YWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIHBv
cFNjb3BlKCkgeworICAgICAgICBzY29wZVN0YWNrLnBvcCgpOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIERlY2xhcmVzIHRoZSBnaXZlbiBuYW1lcyBpbiB0aGUgdG9wbW9zdCBzY29wZSBvYmpl
Y3QuCisgICAgICogQHBhcmFtIHtbU3RyaW5nXX0gbmFtZXMgQSBsaXN0IG9mIG5hbWVzIHRvIGRl
Y2xhcmUuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gZGVj
bGFyZShuYW1lcykgeworICAgICAgICBbXS5wdXNoLmFwcGx5KHNjb3BlU3RhY2tbc2NvcGVTdGFj
ay5sZW5ndGggLSAxXSwgbmFtZXMpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZnVuY3Rp
b24gZnVuY3Rpb25IYW5kbGVyKG5vZGUpIHsKKyAgICAgICAgcHVzaFNjb3BlKCk7CisgICAgICAg
IGRlY2xhcmUobm9kZS5wYXJhbXMubWFwKGZ1bmN0aW9uKGlkKSB7CisgICAgICAgICAgICByZXR1
cm4gaWQubmFtZTsKKyAgICAgICAgfSkpOworICAgICAgICBkZWNsYXJlKG5vZGUuaWQgPyBbbm9k
ZS5pZC5uYW1lXSA6IFtdKTsKKyAgICAgICAgZGVjbGFyZShbImFyZ3VtZW50cyJdKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihub2RlKSB7CisgICAg
ICAgIGRlY2xhcmUobm9kZS5kZWNsYXJhdGlvbnMubWFwKGZ1bmN0aW9uKGRlY2wpIHsKKyAgICAg
ICAgICAgIHJldHVybiBkZWNsLmlkLm5hbWU7CisgICAgICAgIH0pKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc2Nv
cGVTdGFjayA9IFtjb250ZXh0LmdldFNjb3BlKCkudmFyaWFibGVzLm1hcChmdW5jdGlvbih2KSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHYubmFtZTsKKyAgICAgICAgICAgIH0pXTsKKyAgICAg
ICAgfSwKKworICAgICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgICB2YXIgc3RhdGVtZW50cyA9IG5vZGUuYm9keTsKKyAgICAgICAgICAgIHB1c2hTY29w
ZSgpOworICAgICAgICAgICAgc3RhdGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHN0bXQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc3RtdC50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbkhhbmRsZXIoc3RtdCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdG10LnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0
aW9uIikgeworICAgICAgICAgICAgICAgICAgICBkZWNsYXJlKFtzdG10LmlkLm5hbWVdKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICAi
QmxvY2tTdGF0ZW1lbnQ6ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAgICJDYXRjaENsYXVzZSI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHB1c2hTY29wZSgpOworICAgICAgICAgICAg
ZGVjbGFyZShbbm9kZS5wYXJhbS5uYW1lXSk7CisgICAgICAgIH0sCisgICAgICAgICJDYXRjaENs
YXVzZTpleGl0IjogcG9wU2NvcGUsCisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBm
dW5jdGlvbkhhbmRsZXIsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBwb3BT
Y29wZSwKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb25IYW5kbGVyLAor
ICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBwb3BTY29wZSwKKworICAgICAgICAi
Rm9yU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgcHVzaFNjb3BlKCk7
CisgICAgICAgICAgICBpZiAobm9kZS5pbml0ICYmIG5vZGUuaW5pdC50eXBlID09PSAiVmFyaWFi
bGVEZWNsYXJhdGlvbiIpIHsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uSGFu
ZGxlcihub2RlLmluaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiRm9y
U3RhdGVtZW50OmV4aXQiOiBwb3BTY29wZSwKKworICAgICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBwdXNoU2NvcGUoKTsKKyAgICAgICAgICAgIGlm
IChub2RlLmxlZnQudHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRpb24iKSB7CisgICAgICAgICAg
ICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbkhhbmRsZXIobm9kZS5sZWZ0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgIkZvckluU3RhdGVtZW50OmV4aXQiOiBwb3BTY29wZSwK
KworICAgICAgICAiSWRlbnRpZmllciI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZh
ciBhbmNlc3RvciA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisgICAgICAgICAgICBp
ZiAoaXNEZWNsYXJhdGlvbihub2RlLCBhbmNlc3RvcikgfHwgaXNQcm9wZXJ0eShub2RlLCBhbmNl
c3RvcikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHNjb3BlU3RhY2subGVuZ3RoOyBpIDwgbDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgaWYgKHNjb3BlU3RhY2tbaV0uaW5kZXhPZihub2RlLm5hbWUpID4g
LTEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlwiIiArIG5v
ZGUubmFtZSArICJcIiB1c2VkIG91dHNpZGUgb2YgYmluZGluZyBjb250ZXh0LiIpOworICAgICAg
ICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBibG9jayBzdGF0ZW1l
bnRzIHRoYXQgZG8gbm90IHVzZSB0aGUgb25lIHRydWUgYnJhY2Ugc3R5bGUKKyAqIEBhdXRob3Ig
SWFuIENocmlzdGlhbiBNeWVycworICovCisKKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgdmFyIHN0eWxlID0g
Y29udGV4dC5vcHRpb25zWzBdIHx8ICIxdGJzIjsKKyAgICB2YXIgcGFyYW1zID0gY29udGV4dC5v
cHRpb25zWzFdIHx8IHt9OworCisgICAgdmFyIE9QRU5fTUVTU0FHRSA9ICJPcGVuaW5nIGN1cmx5
IGJyYWNlIGRvZXMgbm90IGFwcGVhciBvbiB0aGUgc2FtZSBsaW5lIGFzIGNvbnRyb2xsaW5nIHN0
YXRlbWVudC4iLAorICAgICAgICBCT0RZX01FU1NBR0UgPSAiU3RhdGVtZW50IGluc2lkZSBvZiBj
dXJseSBicmFjZXMgc2hvdWxkIGJlIG9uIG5leHQgbGluZS4iLAorICAgICAgICBDTE9TRV9NRVNT
QUdFID0gIkNsb3NpbmcgY3VybHkgYnJhY2UgZG9lcyBub3QgYXBwZWFyIG9uIHRoZSBzYW1lIGxp
bmUgYXMgdGhlIHN1YnNlcXVlbnQgYmxvY2suIiwKKyAgICAgICAgQ0xPU0VfTUVTU0FHRV9TSU5H
TEUgPSAiQ2xvc2luZyBjdXJseSBicmFjZSBzaG91bGQgYmUgb24gdGhlIHNhbWUgbGluZSBhcyBv
cGVuaW5nIGN1cmx5IGJyYWNlIG9yIG9uIHRoZSBsaW5lIGFmdGVyIHRoZSBwcmV2aW91cyBibG9j
ay4iLAorICAgICAgICBDTE9TRV9NRVNTQUdFX1NUUk9VU1RSVVAgPSAiQ2xvc2luZyBjdXJseSBi
cmFjZSBhcHBlYXJzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIHN1YnNlcXVlbnQgYmxvY2suIjsK
KworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQmluZHMgYSBsaXN0IG9mIHByb3BlcnRpZXMg
dG8gYSBmdW5jdGlvbiB0aGF0IHZlcmlmaWVzIHRoYXQgdGhlIG9wZW5pbmcKKyAgICAgKiBjdXJs
eSBicmFjZSBpcyBvbiB0aGUgc2FtZSBsaW5lIGFzIGl0cyBjb250cm9sbGluZyBzdGF0ZW1lbnQg
b2YgYSBnaXZlbgorICAgICAqIG5vZGUuCisgICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IFRoZSBw
cm9wZXJ0aWVzIHRvIGNoZWNrIG9uIHRoZSBub2RlLgorICAgICAqIEByZXR1cm5zIHtGdW5jdGlv
bn0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgcGVyZm9ybSB0aGUgY2hlY2sgb24gYSBub2RlCisgICAg
ICovCisgICAgZnVuY3Rpb24gY2hlY2tCbG9jaygpIHsKKyAgICAgICAgdmFyIGJsb2NrUHJvcGVy
dGllcyA9IGFyZ3VtZW50czsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgIFtdLmZvckVhY2guY2FsbChibG9ja1Byb3BlcnRpZXMsIGZ1bmN0aW9uKGJsb2NrUHJv
cCkgeworICAgICAgICAgICAgICAgIHZhciBibG9jayA9IG5vZGVbYmxvY2tQcm9wXSwgcHJldmlv
dXNUb2tlbiwgY3VybHlUb2tlbiwgY3VybHlUb2tlbkVuZCwgY3VybHlUb2tlbnNPblNhbWVMaW5l
OworICAgICAgICAgICAgICAgIGJsb2NrID0gbm9kZVtibG9ja1Byb3BdOworICAgICAgICAgICAg
ICAgIGlmIChibG9jayAmJiBibG9jay50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKSB7CisgICAg
ICAgICAgICAgICAgICAgIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKGJs
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY3VybHlUb2tlbiA9IGNvbnRleHQuZ2V0Rmlyc3RU
b2tlbihibG9jayk7CisgICAgICAgICAgICAgICAgICAgIGN1cmx5VG9rZW5FbmQgPSBjb250ZXh0
LmdldExhc3RUb2tlbihibG9jayk7CisgICAgICAgICAgICAgICAgICAgIGN1cmx5VG9rZW5zT25T
YW1lTGluZSA9IGN1cmx5VG9rZW4ubG9jLnN0YXJ0LmxpbmUgPT09IGN1cmx5VG9rZW5FbmQubG9j
LnN0YXJ0LmxpbmU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4ubG9j
LnN0YXJ0LmxpbmUgIT09IGN1cmx5VG9rZW4ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIE9QRU5fTUVTU0FHRSk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmxvY2suYm9keS5sZW5ndGggJiYgcGFyYW1zLmFsbG93
U2luZ2xlTGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cmx5VG9rZW4ubG9j
LnN0YXJ0LmxpbmUgPT09IGJsb2NrLmJvZHlbMF0ubG9jLnN0YXJ0LmxpbmUgJiYgIWN1cmx5VG9r
ZW5zT25TYW1lTGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KGJsb2NrLmJvZHlbMF0sIEJPRFlfTUVTU0FHRSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGN1cmx5VG9rZW5FbmQubG9jLnN0YXJ0LmxpbmUgPT09IGJsb2NrLmJvZHlb
YmxvY2suYm9keS5sZW5ndGggLSAxXS5sb2Muc3RhcnQubGluZSAmJiAhY3VybHlUb2tlbnNPblNh
bWVMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoYmxv
Y2suYm9keVtibG9jay5ib2R5Lmxlbmd0aCAtIDFdLCBDTE9TRV9NRVNTQUdFX1NJTkdMRSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
YmxvY2suYm9keS5sZW5ndGggJiYgY3VybHlUb2tlbi5sb2Muc3RhcnQubGluZSA9PT0gYmxvY2su
Ym9keVswXS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQoYmxvY2suYm9keVswXSwgQk9EWV9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9OworICAg
IH0KKworICAgIC8qKgorICAgICAqIEVuZm9yY2VzIHRoZSBjb25maWd1cmVkIGJyYWNlIHN0eWxl
IG9uIElmU3RhdGVtZW50cworICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBBbiBJZlN0YXRl
bWVudCBub2RlLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9u
IGNoZWNrSWZTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgdG9rZW5zOworCisgICAgICAg
IGNoZWNrQmxvY2soImNvbnNlcXVlbnQiLCAiYWx0ZXJuYXRlIikobm9kZSk7CisKKyAgICAgICAg
aWYgKG5vZGUuYWx0ZXJuYXRlICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgPT09ICJCbG9ja1N0YXRl
bWVudCIpIHsKKyAgICAgICAgICAgIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zQmVmb3JlKG5v
ZGUuYWx0ZXJuYXRlLCAyKTsKKyAgICAgICAgICAgIGlmIChzdHlsZSA9PT0gIjF0YnMiKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGluZSAhPT0gdG9rZW5zWzFd
LmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUuYWx0ZXJuYXRlLCBDTE9TRV9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSAic3Ryb3VzdHJ1cCIpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5lID09PSB0b2tlbnNbMV0ubG9jLnN0YXJ0Lmxp
bmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZS5hbHRlcm5hdGUs
IENMT1NFX01FU1NBR0VfU1RST1VTVFJVUCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRW5mb3JjZXMgdGhlIGNv
bmZpZ3VyZWQgYnJhY2Ugc3R5bGUgb24gVHJ5U3RhdGVtZW50cworICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gbm9kZSBBIFRyeVN0YXRlbWVudCBub2RlLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQor
ICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrVHJ5U3RhdGVtZW50KG5vZGUpIHsKKyAgICAgICAg
dmFyIHRva2VuczsKKworICAgICAgICBjaGVja0Jsb2NrKCJibG9jayIsICJmaW5hbGl6ZXIiKShu
b2RlKTsKKworICAgICAgICBpZiAobm9kZS5maW5hbGl6ZXIgJiYgbm9kZS5maW5hbGl6ZXIudHlw
ZSA9PT0gIkJsb2NrU3RhdGVtZW50IikgeworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5n
ZXRUb2tlbnNCZWZvcmUobm9kZS5maW5hbGl6ZXIsIDIpOworICAgICAgICAgICAgaWYgKHN0eWxl
ID09PSAiMXRicyIpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5s
aW5lICE9PSB0b2tlbnNbMV0ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZS5maW5hbGl6ZXIsIENMT1NFX01FU1NBR0UpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT09ICJzdHJvdXN0cnVwIikg
eworICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2Vu
c1sxXS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLmZpbmFsaXplciwgQ0xPU0VfTUVTU0FHRV9TVFJPVVNUUlVQKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBFbmZvcmNlcyB0aGUgY29uZmlndXJlZCBicmFjZSBzdHlsZSBvbiBDYXRjaENsYXVzZXMKKyAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQSBDYXRjaENsYXVzZSBub2RlLgorICAgICAqIEBy
ZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrQ2F0Y2hDbGF1c2Uobm9k
ZSkgeworICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUo
bm9kZSksCisgICAgICAgICAgICBmaXJzdFRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2VuKG5v
ZGUpOworCisgICAgICAgIGNoZWNrQmxvY2soImJvZHkiKShub2RlKTsKKworICAgICAgICBpZiAo
bm9kZS5ib2R5ICYmIG5vZGUuYm9keS50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKSB7CisgICAg
ICAgICAgICBpZiAoc3R5bGUgPT09ICIxdGJzIikgeworICAgICAgICAgICAgICAgIGlmIChwcmV2
aW91c1Rva2VuLmxvYy5zdGFydC5saW5lICE9PSBmaXJzdFRva2VuLmxvYy5zdGFydC5saW5lKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIENMT1NFX01FU1NBR0Up
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT09ICJz
dHJvdXN0cnVwIikgeworICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1Rva2VuLmxvYy5zdGFy
dC5saW5lID09PSBmaXJzdFRva2VuLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIENMT1NFX01FU1NBR0VfU1RST1VTVFJVUCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoq
CisgICAgICogRW5mb3JjZXMgdGhlIGNvbmZpZ3VyZWQgYnJhY2Ugc3R5bGUgb24gU3dpdGNoU3Rh
dGVtZW50cworICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBBIFN3aXRjaFN0YXRlbWVudCBu
b2RlLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNr
U3dpdGNoU3RhdGVtZW50KG5vZGUpIHsKKyAgICAgICAgdmFyIHRva2VuczsKKyAgICAgICAgaWYg
KG5vZGUuY2FzZXMgJiYgbm9kZS5jYXNlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRva2VucyA9
IGNvbnRleHQuZ2V0VG9rZW5zQmVmb3JlKG5vZGUuY2FzZXNbMF0sIDIpOworICAgICAgICAgICAg
aWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGluZSAhPT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5l
KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRva2VucyA9IGNv
bnRleHQuZ2V0TGFzdFRva2Vucyhub2RlLCAzKTsKKyAgICAgICAgICAgIGlmICh0b2tlbnNbMF0u
bG9jLnN0YXJ0LmxpbmUgIT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIE9QRU5fTUVTU0FHRSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVi
bGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAg
ICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogY2hlY2tCbG9jaygiYm9keSIpLAorICAgICAgICAiRnVu
Y3Rpb25FeHByZXNzaW9uIjogY2hlY2tCbG9jaygiYm9keSIpLAorICAgICAgICAiSWZTdGF0ZW1l
bnQiOiBjaGVja0lmU3RhdGVtZW50LAorICAgICAgICAiVHJ5U3RhdGVtZW50IjogY2hlY2tUcnlT
dGF0ZW1lbnQsCisgICAgICAgICJDYXRjaENsYXVzZSI6IGNoZWNrQ2F0Y2hDbGF1c2UsCisgICAg
ICAgICJEb1doaWxlU3RhdGVtZW50IjogY2hlY2tCbG9jaygiYm9keSIpLAorICAgICAgICAiV2hp
bGVTdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJXaXRoU3RhdGVtZW50
IjogY2hlY2tCbG9jaygiYm9keSIpLAorICAgICAgICAiRm9yU3RhdGVtZW50IjogY2hlY2tCbG9j
aygiYm9keSIpLAorICAgICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJib2R5Iiks
CisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBjaGVja1N3aXRjaFN0YXRlbWVudAorICAgIH07
CisKK307CisKK30se31dLDE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgbm9uLWNhbWVsY2FzZWQgaWRlbnRpZmll
cnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGEgc3RyaW5nIGNvbnRhaW5z
IGFuIHVuZGVyc2NvcmUgYW5kIGlzbid0IGFsbCB1cHBlci1jYXNlCisgICAgICogQHBhcmFtIHtT
dHJpbmd9IG5hbWUgVGhlIHN0cmluZyB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVh
bn0gaWYgdGhlIHN0cmluZyBpcyB1bmRlcnNjb3JlZAorICAgICAqIEBwcml2YXRlCisgICAgICov
CisgICAgZnVuY3Rpb24gaXNVbmRlcnNjb3JlZChuYW1lKSB7CisKKyAgICAgICAgLy8gaWYgdGhl
cmUncyBhbiB1bmRlcnNjb3JlLCBpdCBtaWdodCBiZSBBX0NPTlNUQU5ULCB3aGljaCBpcyBva2F5
CisgICAgICAgIHJldHVybiBuYW1lLmluZGV4T2YoIl8iKSA+IC0xICYmIG5hbWUgIT09IG5hbWUu
dG9VcHBlckNhc2UoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnRzIGFuIEFTVCBu
b2RlIGFzIGEgcnVsZSB2aW9sYXRpb24uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRo
ZSBub2RlIHRvIHJlcG9ydC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0
ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7CisgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJJZGVudGlmaWVyICd7e25hbWV9fScgaXMgbm90IGluIGNhbWVsIGNhc2Uu
IiwgeyBuYW1lOiBub2RlLm5hbWUgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsKKworICAgICAg
ICAiSWRlbnRpZmllciI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgLy8gTGVhZGlu
ZyBhbmQgdHJhaWxpbmcgdW5kZXJzY29yZXMgYXJlIGNvbW1vbmx5IHVzZWQgdG8gZmxhZyBwcml2
YXRlL3Byb3RlY3RlZCBpZGVudGlmaWVycywgc3RyaXAgdGhlbQorICAgICAgICAgICAgdmFyIG5h
bWUgPSBub2RlLm5hbWUucmVwbGFjZSgvXl8rfF8rJC9nLCAiIiksCisgICAgICAgICAgICAgICAg
ZWZmZWN0aXZlUGFyZW50ID0gKG5vZGUucGFyZW50LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9u
IikgPyBub2RlLnBhcmVudC5wYXJlbnQgOiBub2RlLnBhcmVudDsKKworICAgICAgICAgICAgLy8g
TWVtYmVyRXhwcmVzc2lvbnMgZ2V0IHNwZWNpYWwgcnVsZXMKKyAgICAgICAgICAgIGlmIChub2Rl
LnBhcmVudC50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIpIHsKKworICAgICAgICAgICAgICAg
IC8vIEFsd2F5cyByZXBvcnQgdW5kZXJzY29yZWQgb2JqZWN0IG5hbWVzCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUucGFyZW50Lm9iamVjdC50eXBlID09PSAiSWRlbnRpZmllciIgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50Lm9iamVjdC5uYW1lID09PSBub2RlLm5hbWUg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5kZXJzY29yZWQobmFtZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUpOworCisgICAgICAgICAgICAgICAgLy8gUmVwb3J0
IEFzc2lnbm1lbnRFeHByZXNzaW9ucyBvbmx5IGlmIHRoZXkgYXJlIHRoZSBsZWZ0IHNpZGUgb2Yg
dGhlIGFzc2lnbm1lbnQKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVmZmVjdGl2ZVBhcmVu
dC50eXBlID09PSAiQXNzaWdubWVudEV4cHJlc3Npb24iICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICBpc1VuZGVyc2NvcmVkKG5hbWUpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoZWZm
ZWN0aXZlUGFyZW50LnJpZ2h0LnR5cGUgIT09ICJNZW1iZXJFeHByZXNzaW9uIiB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlUGFyZW50LmxlZnQudHlwZSA9PT0gIk1lbWJlckV4
cHJlc3Npb24iICYmCisgICAgICAgICAgICAgICAgICAgICAgICBlZmZlY3RpdmVQYXJlbnQubGVm
dC5wcm9wZXJ0eS5uYW1lID09PSBub2RlLm5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
cG9ydChub2RlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJlcG9ydCBh
bnl0aGluZyB0aGF0IGlzIHVuZGVyc2NvcmVkIHRoYXQgaXNuJ3QgYSBDYWxsRXhwcmVzc2lvbgor
ICAgICAgICAgICAgfSBlbHNlIGlmIChpc1VuZGVyc2NvcmVkKG5hbWUpICYmIGVmZmVjdGl2ZVBh
cmVudC50eXBlICE9PSAiQ2FsbEV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0
KG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0s
MTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IENvbW1hIHN0eWxlIC0gZW5mb3JjZXMgY29tbWEgc3R5bGVzIG9mIHR3byB0eXBlczogbGFz
dCBhbmQgZmlyc3QKKyAqIEBhdXRob3IgVmlnbmVzaCBBbmFuZCBha2EgdmVnZXRhYmxlbWFuCisg
KiBAY29weXJpZ2h0IDIwMTQgVmlnbmVzaCBBbmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
LworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsK
KworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBzdHlsZSA9IGNvbnRleHQub3B0aW9uc1sw
XSB8fCAibGFzdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUgY29t
bWEgcGxhY2VtZW50IHdpdGggcmVnYXJkcyB0byBhIGRlY2xhcmF0aW9uL3Byb3BlcnR5L2VsZW1l
bnQKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIGJpbmFyeSBleHByZXNzaW9uIG5v
ZGUgdG8gY2hlY2sKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAg
ICAqLworICAgIGZ1bmN0aW9uIHZhbGlkYXRlQ29tbWEobm9kZSkgeworICAgICAgICB2YXIgaXRl
bXMgPSBub2RlLmRlY2xhcmF0aW9ucyB8fCBub2RlLnByb3BlcnRpZXMgfHwgbm9kZS5lbGVtZW50
czsKKworICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgaXRlbXMu
Zm9yRWFjaChmdW5jdGlvbihpdGVtLCBpbmRleCkgeworICAgICAgICAgICAgICAgIHZhciB0b2tl
bkJlZm9yZSA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUoaXRlbSksCisgICAgICAgICAgICAgICAg
ICAgIGl0ZW1CZWZvcmUgPSBpdGVtc1tpbmRleCAtIDFdOworCisgICAgICAgICAgICAgICAgaWYg
KHRva2VuQmVmb3JlLnZhbHVlID09PSAiLCIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy9pZiBz
aW5nbGUgbGluZQorICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5CZWZvcmUubG9jLmVuZC5s
aW5lID09PSBpdGVtLmxvYy5zdGFydC5saW5lICYmCisgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgPT09IGl0ZW1CZWZvcmUubG9jLmVuZC5saW5lKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgLy9sb25lIGNvbW1hCisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSAhPT0gaXRlbS5sb2Muc3RhcnQubGluZSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5CZWZvcmUubG9jLmVuZC5saW5lICE9PSBpdGVt
QmVmb3JlLmxvYy5lbmQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQoaXRlbSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IHRva2VuQmVm
b3JlLmxvYy5lbmQubGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRv
a2VuQmVmb3JlLmxvYy5zdGFydC5jb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgICAgIH0sICJC
YWQgbGluZSBicmVha2luZyBiZWZvcmUgYW5kIGFmdGVyICcsJy4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHlsZSA9PT0gImZpcnN0IiAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5CZWZvcmUubG9jLnN0YXJ0LmxpbmUgIT09
IGl0ZW0ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KGl0ZW0sICInLCcgc2hvdWxkIGJlIHBsYWNlZCBmaXJzdC4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHlsZSA9PT0gImxhc3Qi
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgPT09
IGl0ZW0ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KGl0ZW0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBpdGVtQmVm
b3JlLmxvYy5lbmQubGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGl0
ZW1CZWZvcmUubG9jLmVuZC5jb2x1bW4KKyAgICAgICAgICAgICAgICAgICAgICAgIH0sICInLCcg
c2hvdWxkIGJlIHBsYWNlZCBsYXN0LiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiB2YWxpZGF0ZUNv
bW1hLAorICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IHZhbGlkYXRlQ29tbWEsCisgICAgICAg
ICJBcnJheUV4cHJlc3Npb24iOiB2YWxpZGF0ZUNvbW1hCisgICAgfTsKKworfTsKKworfSx7fV0s
MTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IENvdW50cyB0aGUgY3ljbG9tYXRpYyBjb21wbGV4aXR5IG9mIGVhY2ggZnVuY3Rpb24gb2Yg
dGhlIHNjcmlwdC4gU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ljbG9tYXRpY19j
b21wbGV4aXR5LgorICogQ291bnRzIHRoZSBudW1iZXIgb2YgaWYsIGNvbmRpdGlvbmFsLCBmb3Is
IHdoaWx0ZSwgdHJ5LCBzd2l0Y2gvY2FzZSwKKyAqIEBhdXRob3IgUGF0cmljayBCcm9zc2V0Cisg
Ki8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgVEhSRVNIT0xEID0gY29udGV4dC5vcHRp
b25zWzBdOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBVc2luZyBhIHN0YWNrIHRvIHN0b3JlIGNvbXBs
ZXhpdHkgKGhhbmRsaW5nIG5lc3RlZCBmdW5jdGlvbnMpCisgICAgdmFyIGZucyA9IFtdOworCisg
ICAgLy8gV2hlbiBwYXJzaW5nIGEgbmV3IGZ1bmN0aW9uLCBzdG9yZSBpdCBpbiBvdXIgZnVuY3Rp
b24gc3RhY2sKKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0aW9uKCkgeworICAgICAgICBmbnMucHVz
aCgxKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBlbmRGdW5jdGlvbihub2RlKSB7CisgICAgICAg
IHZhciBjb21wbGV4aXR5ID0gZm5zLnBvcCgpLCBuYW1lID0gImFub255bW91cyI7CisKKyAgICAg
ICAgaWYgKG5vZGUuaWQpIHsKKyAgICAgICAgICAgIG5hbWUgPSBub2RlLmlkLm5hbWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGNvbXBsZXhpdHkgPiBUSFJFU0hPTEQpIHsKKyAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJGdW5jdGlvbiAne3tuYW1lfX0nIGhhcyBhIGNvbXBsZXhp
dHkgb2Yge3tjb21wbGV4aXR5fX0uIiwgeyBuYW1lOiBuYW1lLCBjb21wbGV4aXR5OiBjb21wbGV4
aXR5IH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5jcmVhc2VDb21wbGV4
aXR5KCkgeworICAgICAgICBpZiAoZm5zLmxlbmd0aCkgeworICAgICAgICAgICAgZm5zW2Zucy5s
ZW5ndGggLSAxXSArKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGluY3JlYXNl
U3dpdGNoQ29tcGxleGl0eShub2RlKSB7CisgICAgICAgIC8vIEF2b2lkaW5nIGBkZWZhdWx0YAor
ICAgICAgICBpZiAobm9kZS50ZXN0KSB7CisgICAgICAgICAgICBpbmNyZWFzZUNvbXBsZXhpdHko
bm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmNyZWFzZUxvZ2ljYWxD
b21wbGV4aXR5KG5vZGUpIHsKKyAgICAgICAgLy8gQXZvaWRpbmcgJiYKKyAgICAgICAgaWYgKG5v
ZGUub3BlcmF0b3IgPT09ICJ8fCIpIHsKKyAgICAgICAgICAgIGluY3JlYXNlQ29tcGxleGl0eShu
b2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAv
LyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAg
ICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVu
Y3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFy
YXRpb246ZXhpdCI6IGVuZEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4
aXQiOiBlbmRGdW5jdGlvbiwKKworICAgICAgICAiQ2F0Y2hDbGF1c2UiOiBpbmNyZWFzZUNvbXBs
ZXhpdHksCisgICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24iOiBpbmNyZWFzZUNvbXBsZXhp
dHksCisgICAgICAgICJMb2dpY2FsRXhwcmVzc2lvbiI6IGluY3JlYXNlTG9naWNhbENvbXBsZXhp
dHksCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiBpbmNyZWFzZUNvbXBsZXhpdHksCisgICAgICAg
ICJGb3JJblN0YXRlbWVudCI6IGluY3JlYXNlQ29tcGxleGl0eSwKKyAgICAgICAgIklmU3RhdGVt
ZW50IjogaW5jcmVhc2VDb21wbGV4aXR5LAorICAgICAgICAiU3dpdGNoQ2FzZSI6IGluY3JlYXNl
U3dpdGNoQ29tcGxleGl0eSwKKyAgICAgICAgIldoaWxlU3RhdGVtZW50IjogaW5jcmVhc2VDb21w
bGV4aXR5LAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IGluY3JlYXNlQ29tcGxleGl0eQor
ICAgIH07CisKK307CisKK30se31dLDE4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgY29uc2lzdGVudCByZXR1cm4g
dmFsdWVzCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICB2YXIgZnVuY3Rpb25zID0gW107CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
Ly8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9uIGVudGVy
RnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9ucy5wdXNoKHt9KTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBleGl0RnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9ucy5wb3AoKTsKKyAgICB9
CisKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0
aW9uIjogZW50ZXJGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGVudGVy
RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBleGl0RnVuY3Rp
b24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IGV4aXRGdW5jdGlvbiwKKwor
ICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAg
ICB2YXIgcmV0dXJuSW5mbyA9IGZ1bmN0aW9uc1tmdW5jdGlvbnMubGVuZ3RoIC0gMV0sCisgICAg
ICAgICAgICAgICAgcmV0dXJuVHlwZURlZmluZWQgPSAidHlwZSIgaW4gcmV0dXJuSW5mbzsKKwor
ICAgICAgICAgICAgaWYgKHJldHVyblR5cGVEZWZpbmVkKSB7CisKKyAgICAgICAgICAgICAgICBp
ZiAocmV0dXJuSW5mby50eXBlICE9PSAhIW5vZGUuYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkICIgKyAocmV0dXJuSW5mby50eXBl
ID8gImEiIDogIm5vIikgKyAiIHJldHVybiB2YWx1ZS4iKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuSW5mby50eXBlID0g
ISFub2RlLmFyZ3VtZW50OworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9OworCit9
OworCit9LHt9XSwxOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIGNvbnNpc3RlbnQgbmFtaW5nIG9mICJ0aGlz
IiBjb250ZXh0IHZhcmlhYmxlcworICogQGF1dGhvciBSYXBoYWVsIFBpZ3VsbGEKKyAqLworInVz
ZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgYWxpYXMgPSBjb250ZXh0Lm9wdGlv
bnNbMF07CisKKyAgICAgICAgICAgIG5vZGUuZGVjbGFyYXRpb25zLmZvckVhY2goZnVuY3Rpb24o
ZGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaWQubmFtZSA9
PT0gYWxpYXMgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICEoZGVjbGFyYXRpb24uaW5pdCAm
JiBkZWNsYXJhdGlvbi5pbml0LnR5cGUgPT09ICJUaGlzRXhwcmVzc2lvbiIpKSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIkRlc2lnbmF0ZWQgJ3RoaXMnIGFsaWFzICd7
e2FsaWFzfX0nIGlzIG5vdCBhc3NpZ25lZCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAidG8gdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGNvbnRleHQuIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsgYWxpYXM6IGRlY2xhcmF0aW9uLmlkLm5hbWUgfQorICAgICAgICAgICAgICAgICAg
ICApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlv
bi5pbml0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5pbml0LnR5cGUg
PT09ICJUaGlzRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0
aW9uLmlkLm5hbWUgIT09IGFsaWFzKSB7CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIlVuZXhwZWN0ZWQgYWxpYXMgJ3t7YWxpYXN9fScgZm9yICd0aGlzJy4iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgeyBhbGlhczogZGVjbGFyYXRpb24uaWQubmFtZSB9CisgICAgICAg
ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwyMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHN0YXRlbWVudHMg
d2l0aG91dCBjdXJseSBicmFjZXMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLwor
InVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgIHZhciBtdWx0aU9ubHkgPSAoY29udGV4dC5vcHRpb25zWzBdID09
PSAibXVsdGkiKTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBib2R5
IG9mIGEgbm9kZSB0byBzZWUgaWYgaXQncyBhIGJsb2NrIHN0YXRlbWVudC4gRGVwZW5kaW5nIG9u
CisgICAgICogdGhlIHJ1bGUgb3B0aW9ucywgcmVwb3J0cyB0aGUgYXBwcm9wcmlhdGUgcHJvYmxl
bXMuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIHJlcG9ydCBpZiB0
aGVyZSdzIGEgcHJvYmxlbS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IGJvZHkgVGhlIGJvZHkg
bm9kZSB0byBjaGVjayBmb3IgYmxvY2tzLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRo
ZSBuYW1lIHRvIHJlcG9ydCBpZiB0aGVyZSdzIGEgcHJvYmxlbS4KKyAgICAgKiBAcGFyYW0ge3N0
cmluZ30gc3VmZml4IEFkZGl0aW9uYWwgc3RyaW5nIHRvIGFkZCB0byB0aGUgZW5kIG9mIGEgcmVw
b3J0LgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNr
Qm9keShub2RlLCBib2R5LCBuYW1lLCBzdWZmaXgpIHsKKyAgICAgICAgdmFyIGhhc0Jsb2NrID0g
KGJvZHkudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50Iik7CisKKyAgICAgICAgaWYgKG11bHRpT25s
eSkgeworICAgICAgICAgICAgaWYgKGhhc0Jsb2NrICYmIGJvZHkuYm9keS5sZW5ndGggPT09IDEp
IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5uZWNlc3NhcnkgeyBh
ZnRlciAne3tuYW1lfX0ne3tzdWZmaXh9fS4iLAorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAg
c3VmZml4OiAoc3VmZml4ID8gIiAiICsgc3VmZml4IDogIiIpCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKCFoYXNCbG9jaykgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsICJFeHBlY3RlZCB7IGFmdGVyICd7e25hbWV9fSd7e3N1ZmZpeH19LiIsCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg6IChzdWZmaXggPyAiICIgKyBzdWZmaXggOiAi
IikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8g
UHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAg
ICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGNoZWNrQm9k
eShub2RlLCBub2RlLmNvbnNlcXVlbnQsICJpZiIsICJjb25kaXRpb24iKTsKKworICAgICAgICAg
ICAgaWYgKG5vZGUuYWx0ZXJuYXRlICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09ICJJZlN0YXRl
bWVudCIpIHsKKyAgICAgICAgICAgICAgICBjaGVja0JvZHkobm9kZSwgbm9kZS5hbHRlcm5hdGUs
ICJlbHNlIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSwKKworICAgICAgICAiV2hpbGVT
dGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0JvZHkobm9kZSwg
bm9kZS5ib2R5LCAid2hpbGUiLCAiY29uZGl0aW9uIik7CisgICAgICAgIH0sCisKKyAgICAgICAg
IkRvV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgY2hlY2tC
b2R5KG5vZGUsIG5vZGUuYm9keSwgImRvIik7CisgICAgICAgIH0sCisKKyAgICAgICAgIkZvclN0
YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBu
b2RlLmJvZHksICJmb3IiLCAiY29uZGl0aW9uIik7CisgICAgICAgIH0KKyAgICB9OworCit9Owor
Cit9LHt9XSwyMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgcmVxdWlyZSBkZWZhdWx0IGNhc2UgaW4gc3dpdGNoIHN0YXRlbWVudHMKKyAq
IEBhdXRob3IgQWxpYWtzZWkgU2h5dGtpbgorICovCisidXNlIHN0cmljdCI7CisKK3ZhciBDT01N
RU5UX1ZBTFVFID0gIm5vIGRlZmF1bHQiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
UnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAv
LyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogU2hv
cnRjdXQgdG8gZ2V0IGxhc3QgZWxlbWVudCBvZiBhcnJheQorICAgICAqIEBwYXJhbSAgeypbXX0g
Y29sbGVjdGlvbiBBcnJheQorICAgICAqIEByZXR1cm5zIHsqfSBMYXN0IGVsZW1lbnQKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBsYXN0KGNvbGxlY3Rpb24pIHsKKyAgICAgICAgcmV0dXJuIGNvbGxl
Y3Rpb25bY29sbGVjdGlvbi5sZW5ndGggLSAxXTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0
dXJuIHsKKworICAgICAgICAiU3dpdGNoU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisg
ICAgICAgICAgICBpZiAoIW5vZGUuY2FzZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgLy8g
c2tpcCBjaGVjayBvZiBlbXB0eSBzd2l0Y2ggYmVjYXVzZSB0aGVyZSBpcyBubyBlYXN5IHdheQor
ICAgICAgICAgICAgICAgIC8vIHRvIGV4dHJhY3QgY29tbWVudHMgaW5zaWRlIGl0IG5vdworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGhh
c0RlZmF1bHQgPSBub2RlLmNhc2VzLnNvbWUoZnVuY3Rpb24odikgeworICAgICAgICAgICAgICAg
IHJldHVybiB2LnRlc3QgPT09IG51bGw7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
aWYgKCFoYXNEZWZhdWx0KSB7CisKKyAgICAgICAgICAgICAgICB2YXIgY29tbWVudDsKKyAgICAg
ICAgICAgICAgICB2YXIgY29tbWVudHM7CisKKyAgICAgICAgICAgICAgICB2YXIgbGFzdENhc2Ug
PSBsYXN0KG5vZGUuY2FzZXMpOworICAgICAgICAgICAgICAgIGNvbW1lbnRzID0gY29udGV4dC5n
ZXRDb21tZW50cyhsYXN0Q2FzZSkudHJhaWxpbmc7CisKKyAgICAgICAgICAgICAgICBpZiAoY29t
bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBsYXN0KGNvbW1l
bnRzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnQg
fHwgY29tbWVudC52YWx1ZS50cmltKCkgIT09IENPTU1FTlRfVkFMVUUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGEgZGVmYXVsdCBjYXNlLiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9
OworCit9LHt9XSwyMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byB3YXJuIGFib3V0IHVzaW5nIGRvdCBub3RhdGlvbiBpbnN0
ZWFkIG9mIHNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdoZW4gcG9zc2libGUuCisgKiBAYXV0aG9y
IEpvc2ggUGVyZXoKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgdmFs
aWRJZGVudGlmaWVyID0gL15bYS16QS1aXyRdW2EtekEtWjAtOV8kXSokLzsKK3ZhciBrZXl3b3Jk
cyA9IFsKKyAgICAidGhpcyIsCisgICAgImZ1bmN0aW9uIiwKKyAgICAiaWYiLAorICAgICJyZXR1
cm4iLAorICAgICJ2YXIiLAorICAgICJlbHNlIiwKKyAgICAiZm9yIiwKKyAgICAibmV3IiwKKyAg
ICAiYXJndW1lbnRzIiwKKyAgICAiaW4iLAorICAgICJ0eXBlb2YiLAorICAgICJ3aGlsZSIsCisg
ICAgImNhc2UiLAorICAgICJicmVhayIsCisgICAgInRyeSIsCisgICAgImNhdGNoIiwKKyAgICAi
ZGVsZXRlIiwKKyAgICAidGhyb3ciLAorICAgICJzd2l0Y2giLAorICAgICJjb250aW51ZSIsCisg
ICAgImRlZmF1bHQiLAorICAgICJpbnN0YW5jZW9mIiwKKyAgICAiZG8iLAorICAgICJ2b2lkIiwK
KyAgICAiZmluYWxseSIsCisgICAgIndpdGgiLAorICAgICJkZWJ1Z2dlciIsCisgICAgImV2YWwi
LAorICAgICJpbXBsZW1lbnRzIiwKKyAgICAiaW50ZXJmYWNlIiwKKyAgICAicGFja2FnZSIsCisg
ICAgInByaXZhdGUiLAorICAgICJwcm90ZWN0ZWQiLAorICAgICJwdWJsaWMiLAorICAgICJzdGF0
aWMiLAorICAgICJ5aWVsZCIsCisgICAgImxldCIsCisgICAgImNsYXNzIiwKKyAgICAiZW51bSIs
CisgICAgImV4cG9ydCIsCisgICAgImV4dGVuZHMiLAorICAgICJpbXBvcnQiLAorICAgICJzdXBl
ciIsCisgICAgInRydWUiLAorICAgICJmYWxzZSIsCisgICAgIm51bGwiLAorICAgICJhYnN0cmFj
dCIsCisgICAgImJvb2xlYW4iLAorICAgICJieXRlIiwKKyAgICAiY2hhciIsCisgICAgImNvbnN0
IiwKKyAgICAiZG91YmxlIiwKKyAgICAiZmluYWwiLAorICAgICJmbG9hdCIsCisgICAgImdvdG8i
LAorICAgICJpbnQiLAorICAgICJsb25nIiwKKyAgICAibmF0aXZlIiwKKyAgICAic2hvcnQiLAor
ICAgICJzeW5jaHJvbml6ZWQiLAorICAgICJ0aHJvd3MiLAorICAgICJ0cmFuc2llbnQiLAorICAg
ICJ2b2xhdGlsZSIKK107CisKK2Z1bmN0aW9uIGNhbkJlV3JpdHRlbkluRG90Tm90YXRpb24obm9k
ZSkgeworICAgIHJldHVybiBub2RlLmNvbXB1dGVkID09PSB0cnVlICYmCisgICAgICAgIG5vZGUu
cHJvcGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmCisgICAgICAgIHZhbGlkSWRlbnRpZmllci50
ZXN0KG5vZGUucHJvcGVydHkudmFsdWUpICYmCisgICAgICAgIGtleXdvcmRzLmluZGV4T2YoIiIg
KyBub2RlLnByb3BlcnR5LnZhbHVlKSA9PT0gLTE7Cit9CisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworICAgIHJldHVybiB7CisgICAgICAgICJNZW1iZXJFeHByZXNzaW9u
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGNhbkJlV3JpdHRlbkluRG90Tm90
YXRpb24obm9kZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiWyci
ICsgbm9kZS5wcm9wZXJ0eS52YWx1ZSArICInXSBpcyBiZXR0ZXIgd3JpdHRlbiBpbiBkb3Qgbm90
YXRpb24uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0s
MjM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJlcXVpcmUgZmlsZSB0byBlbmQgd2l0aCBzaW5nbGUgbmV3bGluZS4KKyAqIEBhdXRob3Ig
Tm9kZWNhIFRlYW0gPGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2E+CisgKi8KKyJ1c2Ugc3RyaWN0
IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiUHJvZ3JhbSI6IGZ1bmN0aW9u
IGNoZWNrQmFkRU9GKG5vZGUpIHsKKyAgICAgICAgICAgIC8vIEdldCB0aGUgd2hvbGUgc291cmNl
IGNvZGUsIG5vdCBmb3Igbm9kZSBvbmx5LgorICAgICAgICAgICAgdmFyIHNyYyA9IGNvbnRleHQu
Z2V0U291cmNlKCksIGxvY2F0aW9uID0ge2NvbHVtbjogMX07CisKKyAgICAgICAgICAgIGlmIChz
cmMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoc3JjW3NyYy5sZW5ndGggLSAxXSAhPT0gIlxuIikgeworICAg
ICAgICAgICAgICAgIC8vIGZpbGUgaXMgbm90IG5ld2xpbmUtdGVybWluYXRlZAorICAgICAgICAg
ICAgICAgIGxvY2F0aW9uLmxpbmUgPSBzcmMuc3BsaXQoL1xuL2cpLmxlbmd0aDsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBsb2NhdGlvbiwgIk5ld2xpbmUgcmVxdWlyZWQg
YXQgZW5kIG9mIGZpbGUgYnV0IG5vdCBmb3VuZC4iKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
L1xuXHMqXG4kLy50ZXN0KHNyYykpIHsKKyAgICAgICAgICAgICAgICAvLyBsYXN0IGxpbmUgaXMg
ZW1wdHkKKyAgICAgICAgICAgICAgICBsb2NhdGlvbi5saW5lID0gc3JjLnNwbGl0KC9cbi9nKS5s
ZW5ndGggLSAxOworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGxvY2F0aW9u
LCAiVW5leHBlY3RlZCBibGFuayBsaW5lIGF0IGVuZCBvZiBmaWxlLiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSwyNDpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHN0
YXRlbWVudHMgdGhhdCB1c2UgIT0gYW5kID09IGluc3RlYWQgb2YgIT09IGFuZCA9PT0KKyAqIEBh
dXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8q
KgorICAgICAqIENoZWNrcyBpZiBlaXRoZXIgb3BlcmFuZCBvZiBhIGJpbmFyeSBleHByZXNzaW9u
IGlzIGEgdHlwZW9mIG9wZXJhdGlvbgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUg
bm9kZSB0byBjaGVjaworICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiBvbmUgb2YgdGhlIG9w
ZXJhbmRzIGlzIHR5cGVvZgorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24g
aXNUeXBlT2Yobm9kZSkgeworICAgICAgICByZXR1cm4gW25vZGUubGVmdCwgbm9kZS5yaWdodF0u
c29tZShmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS50eXBlID09PSAi
VW5hcnlFeHByZXNzaW9uIiAmJiBub2RlLm9wZXJhdG9yID09PSAidHlwZW9mIjsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIG9wZXJhbmRzIGFyZSBsaXRl
cmFscyBvZiB0aGUgc2FtZSB0eXBlICh2aWEgdHlwZW9mKQorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjaworICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiBv
cGVyYW5kcyBhcmUgb2Ygc2FtZSB0eXBlCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBm
dW5jdGlvbiBhcmVMaXRlcmFsc0FuZFNhbWVUeXBlKG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIG5v
ZGUubGVmdC50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5yaWdodC50eXBlID09PSAiTGl0ZXJh
bCIgJiYKKyAgICAgICAgICAgICAgICB0eXBlb2Ygbm9kZS5sZWZ0LnZhbHVlID09PSB0eXBlb2Yg
bm9kZS5yaWdodC52YWx1ZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgb25l
IG9mIHRoZSBvcGVyYW5kcyBpcyBhIGxpdGVyYWwgbnVsbAorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjaworICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiBv
cGVyYW5kcyBhcmUgbnVsbAorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24g
aXNOdWxsQ2hlY2sobm9kZSkgeworICAgICAgICByZXR1cm4gKG5vZGUucmlnaHQudHlwZSA9PT0g
IkxpdGVyYWwiICYmIG5vZGUucmlnaHQudmFsdWUgPT09IG51bGwpIHx8CisgICAgICAgICAgICAg
ICAgKG5vZGUubGVmdC50eXBlID09PSAiTGl0ZXJhbCIgJiYgbm9kZS5sZWZ0LnZhbHVlID09PSBu
dWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsb2NhdGlvbiAobGluZSBh
bmQgY29sdW1uKSBvZiB0aGUgYmluYXJ5IGV4cHJlc3Npb24ncyBvcGVyYXRvcgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgYmluYXJ5IGV4cHJlc3Npb24gbm9kZSB0byBjaGVjawor
ICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcGVyYXRvciBUaGUgb3BlcmF0b3IgdG8gZmluZAorICAg
ICAqIEByZXR1cm5zIHtPYmplY3R9IHsgbGluZSwgY29sdW1uIH0gbG9jYXRpb24gb2Ygb3BlcmF0
b3IKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGdldE9wZXJhdG9yTG9j
YXRpb24obm9kZSkgeworICAgICAgICB2YXIgb3BUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5zKG5v
ZGUpW2NvbnRleHQuZ2V0VG9rZW5zKG5vZGUubGVmdCkubGVuZ3RoXTsKKyAgICAgICAgcmV0dXJu
IHtsaW5lOiBvcFRva2VuLmxvYy5zdGFydC5saW5lLCBjb2x1bW46IG9wVG9rZW4ubG9jLnN0YXJ0
LmNvbHVtbn07CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Np
b24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciAhPT0g
Ij09IiAmJiBub2RlLm9wZXJhdG9yICE9PSAiIT0iKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC5vcHRpb25zWzBdID09
PSAic21hcnQiICYmIChpc1R5cGVPZihub2RlKSB8fAorICAgICAgICAgICAgICAgICAgICBhcmVM
aXRlcmFsc0FuZFNhbWVUeXBlKG5vZGUpKSB8fCBpc051bGxDaGVjayhub2RlKSkgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRl
eHQub3B0aW9uc1swXSA9PT0gImFsbG93LW51bGwiICYmIGlzTnVsbENoZWNrKG5vZGUpKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydCgKKyAgICAgICAgICAgICAgICBub2RlLCBnZXRPcGVyYXRvckxvY2F0aW9uKG5v
ZGUpLAorICAgICAgICAgICAgICAgICJFeHBlY3RlZCAne3tvcH19PScgYW5kIGluc3RlYWQgc2F3
ICd7e29wfX0nLiIsCisgICAgICAgICAgICAgICAge29wOiBub2RlLm9wZXJhdG9yfQorICAgICAg
ICAgICAgKTsKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDI1OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHdh
cm4gd2hlbiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gZG9lcyBub3QgaGF2ZSBhIG5hbWUuCisgKiBA
YXV0aG9yIEt5bGUgVC4gTnVuZXJ5CisgKi8KKyAidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworICAgIHJldHVybiB7Cisg
ICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAg
ICAgIHZhciBuYW1lID0gbm9kZS5pZCAmJiBub2RlLmlkLm5hbWU7CisKKyAgICAgICAgICAgIGlm
ICghbmFtZSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNzaW5n
IGZ1bmN0aW9uIGV4cHJlc3Npb24gbmFtZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07Cit9OworCit9LHt9XSwyNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIGEgcGFydGljdWxhciBmdW5j
dGlvbiBzdHlsZQorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmlj
dCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgdmFyIHN0eWxlID0gY29udGV4dC5vcHRpb25zWzBdLAorICAgICAgICBlbmZvcmNl
RGVjbGFyYXRpb25zID0gKHN0eWxlID09PSAiZGVjbGFyYXRpb24iKTsKKworICAgIHJldHVybiB7
CisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgICBpZiAoIWVuZm9yY2VEZWNsYXJhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgYSBmdW5jdGlvbiBleHByZXNzaW9uLiIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LmdldEFuY2VzdG9y
cygpLnBvcCgpOworCisgICAgICAgICAgICBpZiAoZW5mb3JjZURlY2xhcmF0aW9ucyAmJiBwYXJl
bnQudHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRvciIpIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChwYXJlbnQsICJFeHBlY3RlZCBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMjc6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyBvciByZXF1aXJlIGdsb2JhbCBzdHJpY3QgbW9kZS4KKyAqIEBhdXRob3IgTmljaG9s
YXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBtb2RlID0gY29udGV4dC5v
cHRpb25zWzBdOworCisgICAgaWYgKG1vZGUgPT09ICJhbHdheXMiKSB7CisKKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAg
ICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICB2
YXIgc3RhdGVtZW50ID0gbm9kZS5ib2R5WzBdOworCisgICAgICAgICAgICAgICAgICAgIGlmICgh
KHN0YXRlbWVudC50eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYgc3RhdGVtZW50LmV4
cHJlc3Npb24udmFsdWUgPT09ICJ1c2Ugc3RyaWN0IikpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgdGhlIGdsb2JhbCBmb3JtIG9mIFwidXNlIHN0
cmljdFwiLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9OworCisgICAgfSBlbHNlIHsgLy8gbW9kZSA9ICJuZXZlciIK
KworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0
QW5jZXN0b3JzKCkucG9wKCk7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9u
LnZhbHVlID09PSAidXNlIHN0cmljdCIgJiYgcGFyZW50LnR5cGUgPT09ICJQcm9ncmFtIikgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVXNlIHRoZSBmdW5jdGlv
biBmb3JtIG9mIFwidXNlIHN0cmljdFwiLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgIH0KKworfTsKKworfSx7fV0sMjg6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxh
ZyBmb3ItaW4gbG9vcHMgd2l0aG91dCBpZiBzdGF0ZW1lbnRzIGluc2lkZQorICogQGF1dGhvciBO
aWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsK
KworICAgICAgICAiRm9ySW5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAg
ICAgIC8qCisgICAgICAgICAgICAgKiBJZiB0aGUgZm9yLWluIHN0YXRlbWVudCBoYXMge30sIHRo
ZW4gdGhlIHJlYWwgYm9keSBpcyB0aGUgYm9keQorICAgICAgICAgICAgICogb2YgdGhlIEJsb2Nr
U3RhdGVtZW50LiBPdGhlcndpc2UsIGp1c3QgdXNlIGJvZHkgYXMgcHJvdmlkZWQuCisgICAgICAg
ICAgICAgKi8KKyAgICAgICAgICAgIHZhciBib2R5ID0gbm9kZS5ib2R5LnR5cGUgPT09ICJCbG9j
a1N0YXRlbWVudCIgPyBub2RlLmJvZHkuYm9keVswXSA6IG5vZGUuYm9keTsKKworICAgICAgICAg
ICAgaWYgKGJvZHkgJiYgYm9keS50eXBlICE9PSAiSWZTdGF0ZW1lbnQiKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBib2R5IG9mIGEgZm9yLWluIHNob3VsZCBi
ZSB3cmFwcGVkIGluIGFuIGlmIHN0YXRlbWVudCB0byBmaWx0ZXIgdW53YW50ZWQgcHJvcGVydGll
cyBmcm9tIHRoZSBwcm90b3R5cGUuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworCit9OworCit9LHt9XSwyOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgRW5zdXJlIGhhbmRsaW5nIG9mIGVycm9ycyB3aGVuIHdlIGtu
b3cgdGhleSBleGlzdC4KKyAqIEBhdXRob3IgSmFtdW5kIEZlcmd1c29uCisgKi8KKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICB2YXIgZXJyb3JBcmd1bWVudCA9IGNvbnRleHQub3B0aW9uc1swXSB8
fCAiZXJyIjsKKyAgICB2YXIgY2FsbGJhY2tzID0gW107CisgICAgdmFyIHNjb3BlcyA9IDA7CisK
KyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50IHNob3VsZCBiZSBp
bnRlcnByZXRlZCBhcyBhIHJlZ2V4cCBwYXR0ZXJuLgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBz
dHJpbmdUb0NoZWNrIFRoZSBzdHJpbmcgd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQuCisgICAgICog
QHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBzdHJpbmcgc2hvdWxkIGJlIGlu
dGVycHJldGVkIGFzIGEgcGF0dGVybi4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1BhdHRlcm4o
c3RyaW5nVG9DaGVjaykgeworICAgICAgICB2YXIgZmlyc3RDaGFyID0gc3RyaW5nVG9DaGVja1sw
XTsKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hhciA9PT0gIl4iOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbmFtZSBtYXRjaGVzIHRoZSBjb25maWd1cmVkIGVy
cm9yIGFyZ3VtZW50LgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIHdoaWNo
IHNob3VsZCBiZSBjb21wYXJlZC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBv
ciBub3QgdGhlIGdpdmVuIG5hbWUgbWF0Y2hlcyB0aGUgY29uZmlndXJlZCBlcnJvciB2YXJpYWJs
ZSBuYW1lLgorICAgICAqLworICAgIGZ1bmN0aW9uIG1hdGNoZXNDb25maWd1cmVkRXJyb3JOYW1l
KG5hbWUpIHsKKyAgICAgICAgaWYgKGlzUGF0dGVybihlcnJvckFyZ3VtZW50KSkgeworICAgICAg
ICAgICAgdmFyIHJlZ2V4cCA9IG5ldyBSZWdFeHAoZXJyb3JBcmd1bWVudCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVnZXhwLnRlc3QobmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5h
bWUgPT09IGVycm9yQXJndW1lbnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgdGhl
IGFyZ3VtZW50cyB0byBzZWUgaWYgd2UgbmVlZCB0byBzdGFydCB0cmFja2luZyB0aGUgZXJyb3Ig
b2JqZWN0LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hl
Y2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gc3RhcnRG
dW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgLy8ga2VlcCB0cmFjayBvZiBuZXN0ZWQgc2NvcGVz
CisgICAgICAgIHNjb3BlcysrOworCisgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBmaXJzdCBhcmd1
bWVudCBtYXRjaGVzIG91ciBhcmd1bWVudCBuYW1lCisgICAgICAgIHZhciBmaXJzdEFyZyA9IG5v
ZGUucGFyYW1zICYmIG5vZGUucGFyYW1zWzBdOworICAgICAgICBpZiAoZmlyc3RBcmcgJiYgbWF0
Y2hlc0NvbmZpZ3VyZWRFcnJvck5hbWUoZmlyc3RBcmcubmFtZSkpIHsKKyAgICAgICAgICAgIGNh
bGxiYWNrcy5wdXNoKHtoYW5kbGVkOiBmYWxzZSwgZGVwdGg6IHNjb3BlcywgZXJyb3JWYXJpYWJs
ZU5hbWU6IGZpcnN0QXJnLm5hbWV9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAg
ICAqIEF0IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiBjaGVjayB0byBzZWUgaWYgdGhlIGVycm9yIHdh
cyBoYW5kbGVkLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8g
Y2hlY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gZW5k
RnVuY3Rpb24obm9kZSkgeworCisgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1tjYWxs
YmFja3MubGVuZ3RoIC0gMV0gfHwge307CisKKyAgICAgICAgLy8gY2hlY2sgaWYgYSBjYWxsYmFj
ayBpcyBlbmRpbmcsIGlmIHNvIHBvcCBpdCBvZmYgdGhlIHN0YWNrCisgICAgICAgIGlmIChjYWxs
YmFjay5kZXB0aCA9PT0gc2NvcGVzKSB7CisgICAgICAgICAgICBjYWxsYmFja3MucG9wKCk7CisK
KyAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIHdlcmUgbm8gaGFuZGxlZCBlcnJvcnMgc2lu
Y2UgdGhlIGxhc3QgY2FsbGJhY2sKKyAgICAgICAgICAgIGlmICghY2FsbGJhY2suaGFuZGxlZCkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBlcnJvciB0
byBiZSBoYW5kbGVkLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
bGVzcyBuZXN0ZWQgZnVuY3Rpb25zCisgICAgICAgIHNjb3Blcy0tOworCisgICAgfQorCisgICAg
LyoqCisgICAgICogQ2hlY2sgdG8gc2VlIGlmIHdlJ3JlIGhhbmRsaW5nIHRoZSBlcnJvciBvYmpl
Y3QgcHJvcGVybHkuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0
byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBj
aGVja0ZvckVycm9yKG5vZGUpIHsKKyAgICAgICAgaWYgKGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7
CisgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBjYWxsYmFja3NbY2FsbGJhY2tzLmxlbmd0aCAt
IDFdIHx8IHt9OworCisgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIG5vZGUncyBuYW1lIG1h
dGNoZXMgb3VyIGVycm9yIGFyZ3VtZW50IG5hbWUKKyAgICAgICAgICAgIHZhciBpc0Fib3V0RXJy
b3IgPSBub2RlLm5hbWUgPT09IGNhbGxiYWNrLmVycm9yVmFyaWFibGVOYW1lOworCisgICAgICAg
ICAgICAvLyB3ZSBkb24ndCBjb25zaWRlciB0aGVzZSB1c2UgY2FzZXMgYXMgImhhbmRsaW5nIiB0
aGUgZXJyb3IKKyAgICAgICAgICAgIHZhciBkb05vdENvdW50ID0gWyJGdW5jdGlvbkRlY2xhcmF0
aW9uIiwgIkZ1bmN0aW9uRXhwcmVzc2lvbiIsICJDYXRjaENsYXVzZSJdOworCisgICAgICAgICAg
ICAvLyBtYWtlIHN1cmUgdGhpcyBpZGVudGlmaWVyIGlzbid0IHVzZWQgYXMgcGFydCBvZiBvbmUg
b2YgdGhlbQorICAgICAgICAgICAgdmFyIGlzSGFuZGxlZCA9IGRvTm90Q291bnQuaW5kZXhPZihu
b2RlLnBhcmVudC50eXBlKSA9PT0gLTE7CisKKyAgICAgICAgICAgIGlmIChpc0Fib3V0RXJyb3Ig
JiYgaXNIYW5kbGVkKSB7CisgICAgICAgICAgICAgICAgLy8gcmVjb3JkIHRoYXQgdGhpcyBjYWxs
YmFjayBoYW5kbGVkIGl0cyBlcnJvcgorICAgICAgICAgICAgICAgIGNhbGxiYWNrLmhhbmRsZWQg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsK
KyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAi
RnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIklkZW50aWZpZXIi
OiBjaGVja0ZvckVycm9yLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogZW5k
RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IGVuZEZ1bmN0aW9u
CisgICAgfTsKKworfTsKKworfSx7fV0sMzA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBzZXQgdGhlIG1heGltdW0gZGVw
dGggYmxvY2sgY2FuIGJlIG5lc3RlZCBpbiBhIGZ1bmN0aW9uLgorICogQGF1dGhvciBJYW4gQ2hy
aXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZh
ciBmdW5jdGlvblN0YWNrID0gW10sCisgICAgICAgIG1heERlcHRoID0gY29udGV4dC5vcHRpb25z
WzBdIHx8IDQ7CisKKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5j
dGlvblN0YWNrLnB1c2goMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZW5kRnVuY3Rpb24oKSB7
CisgICAgICAgIGZ1bmN0aW9uU3RhY2sucG9wKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcHVz
aEJsb2NrKG5vZGUpIHsKKyAgICAgICAgdmFyIGxlbiA9ICsrZnVuY3Rpb25TdGFja1tmdW5jdGlv
blN0YWNrLmxlbmd0aCAtIDFdOworCisgICAgICAgIGlmIChsZW4gPiBtYXhEZXB0aCkgeworICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrcyBhcmUgbmVzdGVkIHRvbyBkZWVw
bHkgKHt7ZGVwdGh9fSkuIiwKKyAgICAgICAgICAgICAgICAgICAgeyBkZXB0aDogbGVuIH0pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcG9wQmxvY2soKSB7CisgICAgICAgIGZ1
bmN0aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXS0tOworICAgIH0KKworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlByb2dyYW0iOiBzdGFydEZ1bmN0aW9uLAor
ICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJG
dW5jdGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorCisgICAgICAgICJJZlN0YXRlbWVu
dCI6IHB1c2hCbG9jaywKKyAgICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IHB1c2hCbG9jaywKKyAg
ICAgICAgIlRyeVN0YXRlbWVudCI6IHB1c2hCbG9jaywKKyAgICAgICAgIkRvV2hpbGVTdGF0ZW1l
bnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6IHB1c2hCbG9jaywKKyAg
ICAgICAgIldpdGhTdGF0ZW1lbnQiOiBwdXNoQmxvY2ssCisgICAgICAgICJGb3JTdGF0ZW1lbnQi
OiBwdXNoQmxvY2ssCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IHB1c2hCbG9jaywKKworICAg
ICAgICAiSWZTdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAorICAgICAgICAiU3dpdGNoU3RhdGVt
ZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAgIlRyeVN0YXRlbWVudDpleGl0IjogcG9wQmxv
Y2ssCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAg
IldoaWxlU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKyAgICAgICAgIldpdGhTdGF0ZW1lbnQ6
ZXhpdCI6IHBvcEJsb2NrLAorICAgICAgICAiRm9yU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywK
KyAgICAgICAgIkZvckluU3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywKKworICAgICAgICAiRnVu
Y3Rpb25EZWNsYXJhdGlvbjpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4
cHJlc3Npb246ZXhpdCI6IGVuZEZ1bmN0aW9uLAorICAgICAgICAiUHJvZ3JhbTpleGl0IjogZW5k
RnVuY3Rpb24KKyAgICB9OworCit9OworCit9LHt9XSwzMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjaGVjayBmb3IgbWF4
IGxlbmd0aCBvbiBhIGxpbmUuCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1h
dHRkdXZhbGwuY29tPgorICogQGNvcHlyaWdodCAyMDEzIE1hdHQgRHVWYWxsLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVz
IGEgc3RyaW5nIHRoYXQgaXMgbWFkZSB1cCBvZiByZXBlYXRpbmcgYSBnaXZlbiBzdHJpbmcgYSBj
ZXJ0YWluCisgICAgICogbnVtYmVyIG9mIHRpbWVzLiBUaGlzIHVzZXMgZXhwb25lbnRpYXRpb24g
b2Ygc3F1YXJlcyB0byBhY2hpZXZlIHNpZ25pZmljYW50CisgICAgICogcGVyZm9ybWFuY2UgZ2Fp
bnMgb3ZlciB0aGUgbW9yZSB0cmFkaXRpb25hbCBpbXBsZW1lbnRhdGlvbiBvZiBzdWNoCisgICAg
ICogZnVuY3Rpb25hbGl0eS4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSBzdHJpbmcg
dG8gcmVwZWF0LgorICAgICAqIEBwYXJhbSB7aW50fSBudW0gVGhlIG51bWJlciBvZiB0aW1lcyB0
byByZXBlYXQgdGhlIHN0cmluZy4KKyAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY3JlYXRl
ZCBzdHJpbmcuCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBzdHJpbmdS
ZXBlYXQoc3RyLCBudW0pIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9ICIiOworICAgICAgICBmb3Ig
KG51bSB8PSAwOyBudW0gPiAwOyBudW0gPj4+PSAxLCBzdHIgKz0gc3RyKSB7CisgICAgICAgICAg
ICBpZiAobnVtICYgMSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHI7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2
YXIgdGFiV2lkdGggPSBjb250ZXh0Lm9wdGlvbnNbMV07CisKKyAgICB2YXIgbWF4TGVuZ3RoID0g
Y29udGV4dC5vcHRpb25zWzBdLAorICAgICAgICB0YWJTdHJpbmcgPSBzdHJpbmdSZXBlYXQoIiAi
LCB0YWJXaWR0aCk7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBmdW5jdGlvbiBjaGVja1Byb2dyYW1Gb3JNYXhM
ZW5ndGgobm9kZSkgeworICAgICAgICB2YXIgbGluZXMgPSBjb250ZXh0LmdldFNvdXJjZUxpbmVz
KCk7CisKKyAgICAgICAgLy8gUmVwbGFjZSB0aGUgdGFicworICAgICAgICAvLyBTcGxpdCAoaG9u
b3JzIGxpbmUtZW5kaW5nKQorICAgICAgICAvLyBJdGVyYXRlCisgICAgICAgIGxpbmVzLmZvckVh
Y2goZnVuY3Rpb24obGluZSwgaSl7CisgICAgICAgICAgICBpZiAobGluZS5yZXBsYWNlKC9cdC9n
LCB0YWJTdHJpbmcpLmxlbmd0aCA+IG1heExlbmd0aCkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsIHsgbGluZTogaSArIDEsIGNvbDogMSB9LCAiTGluZSAiICsgKGkgKyAx
KSArICIgZXhjZWVkcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBvZiAiICsgbWF4TGVuZ3RoICsg
Ii4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworICAgIHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjogY2hlY2tQcm9ncmFtRm9yTWF4TGVu
Z3RoCisgICAgfTsKKworfTsKKworfSx7fV0sMzI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBhIG1heGltdW0g
bnVtYmVyIG9mIG5lc3RlZCBjYWxsYmFja3MuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXll
cnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBDb25zdGFudHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2YXIgVEhSRVNI
T0xEID0gY29udGV4dC5vcHRpb25zWzBdOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICB2YXIgY2FsbGJh
Y2tTdGFjayA9IFtdOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNz
aW9uIjogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0
LmdldEFuY2VzdG9ycygpLnBvcCgpOworCisgICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09
ICJDYWxsRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja1N0YWNrLnB1c2go
bm9kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjYWxsYmFja1N0YWNrLmxl
bmd0aCA+IFRIUkVTSE9MRCkgeworICAgICAgICAgICAgICAgIHZhciBvcHRzID0ge251bTogY2Fs
bGJhY2tTdGFjay5sZW5ndGgsIG1heDogVEhSRVNIT0xEfTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiVG9vIG1hbnkgbmVzdGVkIGNhbGxiYWNrcyAoe3tudW19fSkuIE1h
eGltdW0gYWxsb3dlZCBpcyB7e21heH19LiIsIG9wdHMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorCisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBjYWxsYmFja1N0YWNrLnBvcCgpOworICAgICAgICB9CisKKyAgICB9Owor
Cit9OworCit9LHt9XSwzMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gYSBmdW5jdGlvbiBoYXMgdG9vIG1h
bnkgcGFyYW1ldGVycworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHZhciBudW1QYXJhbXMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwgMzsKKwor
ICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5wYXJhbXMubGVuZ3RoID4gbnVtUGFyYW1zKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoaXMgZnVuY3Rpb24gaGFz
IHRvbyBtYW55IHBhcmFtZXRlcnMgKHt7Y291bnR9fSkuIE1heGltdW0gYWxsb3dlZCBpcyB7e21h
eH19LiIsIHsKKyAgICAgICAgICAgICAgICAgICAgY291bnQ6IG5vZGUucGFyYW1zLmxlbmd0aCwK
KyAgICAgICAgICAgICAgICAgICAgbWF4OiBudW1QYXJhbXMKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9u
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUucGFyYW1zLmxlbmd0aCA+
IG51bVBhcmFtcykgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGlz
IGZ1bmN0aW9uIGhhcyB0b28gbWFueSBwYXJhbWV0ZXJzICh7e2NvdW50fX0pLiBNYXhpbXVtIGFs
bG93ZWQgaXMge3ttYXh9fS4iLCB7CisgICAgICAgICAgICAgICAgICAgIGNvdW50OiBub2RlLnBh
cmFtcy5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIG1heDogbnVtUGFyYW1zCisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSwzNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgQSBydWxlIHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc3RhdGVtZW50cyBp
biBhIGZ1bmN0aW9uLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZhciBmdW5jdGlvblN0YWNrID0gW10sCisg
ICAgICAgIG1heFN0YXRlbWVudHMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwgMTA7CisKKyAgICBm
dW5jdGlvbiBzdGFydEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnB1c2goMCk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gZW5kRnVuY3Rpb24obm9kZSkgeworICAgICAgICB2YXIg
Y291bnQgPSBmdW5jdGlvblN0YWNrLnBvcCgpOworCisgICAgICAgIGlmIChjb3VudCA+IG1heFN0
YXRlbWVudHMpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGlzIGZ1bmN0
aW9uIGhhcyB0b28gbWFueSBzdGF0ZW1lbnRzICh7e2NvdW50fX0pLiBNYXhpbXVtIGFsbG93ZWQg
aXMge3ttYXh9fS4iLAorICAgICAgICAgICAgICAgICAgICB7IGNvdW50OiBjb3VudCwgbWF4OiBt
YXhTdGF0ZW1lbnRzIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY291bnRT
dGF0ZW1lbnRzKG5vZGUpIHsKKyAgICAgICAgZnVuY3Rpb25TdGFja1tmdW5jdGlvblN0YWNrLmxl
bmd0aCAtIDFdICs9IG5vZGUuYm9keS5sZW5ndGg7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICByZXR1cm4geworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24s
CisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorCisgICAgICAg
ICJCbG9ja1N0YXRlbWVudCI6IGNvdW50U3RhdGVtZW50cywKKworICAgICAgICAiRnVuY3Rpb25E
ZWNsYXJhdGlvbjpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Np
b246ZXhpdCI6IGVuZEZ1bmN0aW9uCisgICAgfTsKKworfTsKKworfSx7fV0sMzU6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB1c2Ugb2YgY29uc3RydWN0b3JzIHdpdGhvdXQgY2FwaXRhbCBsZXR0ZXJzCisgKiBAYXV0
aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKiBAY29weXJpZ2h0IDIwMTMtMjAxNCBOaWNob2xhcyBD
LiBaYWthcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisidXNlIHN0cmljdCI7CisKK3Zh
ciBDQVBTX0FMTE9XRUQgPSBbCisgICAgIk51bWJlciIsCisgICAgIlN0cmluZyIsCisgICAgIkJv
b2xlYW4iLAorICAgICJEYXRlIiwKKyAgICAiQXJyYXkiLAorICAgICJTeW1ib2wiLAorICAgICJS
ZWdFeHAiCitdOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgIHZhciBjb25maWcgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307Cisg
ICAgY29uZmlnLm5ld0lzQ2FwID0gY29uZmlnLm5ld0lzQ2FwID09PSBmYWxzZSA/IGZhbHNlIDog
dHJ1ZTsKKyAgICBjb25maWcuY2FwSXNOZXcgPSBjb25maWcuY2FwSXNOZXcgPT09IGZhbHNlID8g
ZmFsc2UgOiB0cnVlOworCisgICAgdmFyIGxpc3RlbmVycyA9IHt9OworCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICAvKioKKyAgICAgKiBHZXQgZXhhY3QgY2FsbGVlIG5hbWUgZnJvbSBleHByZXNzaW9uCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIENhbGxFeHByZXNzaW9uIG9yIE5ld0V4cHJlc3Npb24g
bm9kZQorICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG5hbWUKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBleHRyYWN0TmFtZUZyb21FeHByZXNzaW9uKG5vZGUpIHsKKworICAgICAgICB2YXIgbmFtZSA9
ICIiLAorICAgICAgICAgICAgcHJvcGVydHk7CisKKyAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5
cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworICAgICAgICAgICAgcHJvcGVydHkgPSBub2Rl
LmNhbGxlZS5wcm9wZXJ0eTsKKworICAgICAgICAgICAgaWYgKHByb3BlcnR5LnR5cGUgPT09ICJM
aXRlcmFsIiAmJiAodHlwZW9mIHByb3BlcnR5LnZhbHVlID09PSAic3RyaW5nIikpIHsKKyAgICAg
ICAgICAgICAgICBuYW1lID0gcHJvcGVydHkudmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHByb3BlcnR5LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiAhbm9kZS5jYWxsZWUuY29tcHV0ZWQp
IHsKKyAgICAgICAgICAgICAgICBuYW1lID0gcHJvcGVydHkubmFtZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5hbWUgPSBub2RlLmNhbGxlZS5uYW1lOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAq
IFJldHVybnMgdGhlIGNhcGl0YWxpemF0aW9uIHN0YXRlIG9mIHRoZSBzdHJpbmcgLQorICAgICAq
IFdoZXRoZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyB1cHBlcmNhc2UsIGxvd2VyY2FzZSwgb3Ig
bm9uLWFscGhhYmV0aWMKKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gc3RyIFN0cmluZworICAgICAq
IEByZXR1cm5zIHtTdHJpbmd9IGNhcGl0YWxpemF0aW9uIHN0YXRlOiAibm9uLWFscGhhIiwgImxv
d2VyIiwgb3IgInVwcGVyIgorICAgICAqLworICAgIGZ1bmN0aW9uIGdldENhcChzdHIpIHsKKyAg
ICAgICAgdmFyIGZpcnN0Q2hhciA9IHN0ci5jaGFyQXQoMCk7CisKKyAgICAgICAgdmFyIGZpcnN0
Q2hhckxvd2VyID0gZmlyc3RDaGFyLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIHZhciBmaXJzdENo
YXJVcHBlciA9IGZpcnN0Q2hhci50b1VwcGVyQ2FzZSgpOworCisgICAgICAgIGlmIChmaXJzdENo
YXJMb3dlciA9PT0gZmlyc3RDaGFyVXBwZXIpIHsKKyAgICAgICAgICAgIC8vIGNoYXIgaGFzIG5v
IHVwcGVyY2FzZSB2YXJpYW50LCBzbyBpdCdzIG5vbi1hbHBoYWJldGljCisgICAgICAgICAgICBy
ZXR1cm4gIm5vbi1hbHBoYSI7CisgICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDaGFyID09PSBmaXJz
dENoYXJMb3dlcikgeworICAgICAgICAgICAgcmV0dXJuICJsb3dlciI7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICByZXR1cm4gInVwcGVyIjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8qKgorICAgICAqIENoZWNrIGlmIGNhcGl0YWxpemF0aW9uIGlzIGFsbG93ZWQgZm9yIGEgQ2Fs
bEV4cHJlc3Npb24KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgQ2FsbEV4cHJlc3Npb24g
bm9kZQorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjYWxsZWVOYW1lIENhcGl0YWxpemVkIGNhbGxl
ZSBuYW1lIGZyb20gYSBDYWxsRXhwcmVzc2lvbgorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBS
ZXR1cm5zIHRydWUgaWYgdGhlIGNhbGxlZSBtYXkgYmUgY2FwaXRhbGl6ZWQKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBpc0NhcEFsbG93ZWQobm9kZSwgY2FsbGVlTmFtZSkgeworICAgICAgICBpZiAo
Q0FQU19BTExPV0VELmluZGV4T2YoY2FsbGVlTmFtZSkgPj0gMCkgeworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhbGxlZU5hbWUgPT09ICJVVEMiICYm
IG5vZGUuY2FsbGVlLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworICAgICAgICAgICAg
Ly8gYWxsb3cgaWYgY2FsbGVlIGlzIERhdGUuVVRDCisgICAgICAgICAgICByZXR1cm4gbm9kZS5j
YWxsZWUub2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAgICAgICAgICAgICAg
IG5vZGUuY2FsbGVlLm9iamVjdC5uYW1lID09PSAiRGF0ZSI7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQ
dWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBpZiAoY29uZmlnLm5ld0lzQ2Fw
KSB7CisgICAgICAgIGxpc3RlbmVycy5OZXdFeHByZXNzaW9uID0gZnVuY3Rpb24obm9kZSkgewor
CisgICAgICAgICAgICB2YXIgY29uc3RydWN0b3JOYW1lID0gZXh0cmFjdE5hbWVGcm9tRXhwcmVz
c2lvbihub2RlKTsKKyAgICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgJiYgZ2V0Q2FwKGNv
bnN0cnVjdG9yTmFtZSkgPT09ICJsb3dlciIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiQSBjb25zdHJ1Y3RvciBuYW1lIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBhIGxv
d2VyY2FzZSBsZXR0ZXIuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisg
ICAgaWYgKGNvbmZpZy5jYXBJc05ldykgeworICAgICAgICBsaXN0ZW5lcnMuQ2FsbEV4cHJlc3Np
b24gPSBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciBjYWxsZWVOYW1lID0gZXh0
cmFjdE5hbWVGcm9tRXhwcmVzc2lvbihub2RlKTsKKyAgICAgICAgICAgIGlmIChjYWxsZWVOYW1l
ICYmIGdldENhcChjYWxsZWVOYW1lKSA9PT0gInVwcGVyIiAmJiAhaXNDYXBBbGxvd2VkKG5vZGUs
IGNhbGxlZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkEg
ZnVuY3Rpb24gd2l0aCBhIG5hbWUgc3RhcnRpbmcgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyIHNo
b3VsZCBvbmx5IGJlIHVzZWQgYXMgYSBjb25zdHJ1Y3Rvci4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfTsKKyAgICB9CisKKyAgICByZXR1cm4gbGlzdGVuZXJzOworfTsKKworfSx7fV0sMzY6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5nIGNvbnN0cnVjdG9yIHdpdGhvdXQgcGFyZW50aGVzZXMK
KyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBy
ZXR1cm4geworCisgICAgICAgICJOZXdFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUpOworICAgICAgICAg
ICAgdmFyIHByZW50aWNlc1Rva2VucyA9IHRva2Vucy5maWx0ZXIoZnVuY3Rpb24odG9rZW4pIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4udmFsdWUgPT09ICIoIiB8fCB0b2tlbi52YWx1
ZSA9PT0gIikiOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAocHJlbnRpY2VzVG9r
ZW5zLmxlbmd0aCA8IDIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
TWlzc2luZyAnKCknIGludm9raW5nIGEgY29uc3RydWN0b3IiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDM3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGFs
ZXJ0LCBjb25maXJtLCBwcm9tcHQKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLwor
InVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSGVscGVycworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnVuY3Rpb24gbWF0Y2hQcm9oaWJpdGVkKG5hbWUpIHsK
KyAgICByZXR1cm4gbmFtZS5tYXRjaCgvXihhbGVydHxjb25maXJtfHByb21wdCkkLyk7Cit9CisK
K2Z1bmN0aW9uIHJlcG9ydChjb250ZXh0LCBub2RlLCByZXN1bHQpIHsKKyAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiVW5leHBlY3RlZCB7e25hbWV9fS4iLCB7IG5hbWU6IHJlc3VsdFsxXSB9KTsK
K30KKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24o
bm9kZSkgeworCisgICAgICAgICAgICB2YXIgcmVzdWx0OworCisgICAgICAgICAgICAvLyB3aXRo
b3V0IHdpbmRvdy4KKyAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRp
ZmllciIpIHsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoUHJvaGliaXRlZChub2Rl
LmNhbGxlZS5uYW1lKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmVwb3J0KGNvbnRleHQsIG5vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJNZW1i
ZXJFeHByZXNzaW9uIiAmJiBub2RlLmNhbGxlZS5wcm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmll
ciIpIHsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1hdGNoUHJvaGliaXRlZChub2RlLmNh
bGxlZS5wcm9wZXJ0eS5uYW1lKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgbm9k
ZS5jYWxsZWUub2JqZWN0Lm5hbWUgPT09ICJ3aW5kb3ciKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlcG9ydChjb250ZXh0LCBub2RlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwzODpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxs
b3cgY29uc3RydWN0aW9uIG9mIGRlbnNlIGFycmF5cyB1c2luZyB0aGUgQXJyYXkgY29uc3RydWN0
b3IKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20vPgor
ICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rpb24gY2hlY2sobm9kZSkgeworICAg
ICAgICBpZiAoCisgICAgICAgICAgICBub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDEgJiYKKyAg
ICAgICAgICAgIG5vZGUuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAgICAg
ICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gIkFycmF5IgorICAgICAgICApIHsKKyAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGUgYXJyYXkgbGl0ZXJhbCBub3RhdGlvbiBbXSBpcyBw
cmVmZXJyYWJsZS4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAg
ICJDYWxsRXhwcmVzc2lvbiI6IGNoZWNrLAorICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGNoZWNr
CisgICAgfTsKKworfTsKKworfSx7fV0sMzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBiaXR3aXNlIGlkZW50aWZp
ZXJzCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICBmdW5jdGlvbiByZXBvcnQobm9kZSkgeworICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgJ3t7b3BlcmF0b3J9fScuIiwgeyBvcGVyYXRvcjogbm9k
ZS5vcGVyYXRvciB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQmluYXJ5RXhw
cmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgLy8gd2FybiBmb3IgXiB8
ICYgfiA8PCA+PiA+Pj4KKyAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yLm1hdGNoKC9eKD86
W1xeJlx8fl18PDx8Pj4+PykkLykpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgfSwKKworICAgICAgICAiVW5hcnlFeHByZXNzaW9uIjog
ZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAvLyB3YXJuIGZvciB+CisgICAgICAgICAg
ICBpZiAobm9kZS5vcGVyYXRvciA9PT0gIn4iKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5v
ZGUpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw0
MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBhcmd1bWVudHMuY2FsbGVlIGFuZCBhcmd1bWVudHMuY2Fs
bGVyLgorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBvYmplY3ROYW1lID0gbm9kZS5vYmplY3QubmFtZSwK
KyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWU7CisKKyAg
ICAgICAgICAgIGlmIChvYmplY3ROYW1lID09PSAiYXJndW1lbnRzIiAmJiAhbm9kZS5jb21wdXRl
ZCAmJiBwcm9wZXJ0eU5hbWUgJiYgcHJvcGVydHlOYW1lLm1hdGNoKC9eY2FsbGVbZXJdJC8pKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkF2b2lkIGFyZ3VtZW50cy57
e3Byb3BlcnR5fX0uIiwgeyBwcm9wZXJ0eTogcHJvcGVydHlOYW1lIH0pOworICAgICAgICAgICAg
fQorCisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw0MTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHZh
cmlhYmxlIGxlYWsgaW4gQ2F0Y2hDbGF1c2VzIGluIElFIDggYW5kIGVhcmxpZXIKKyAqIEBhdXRo
b3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKyAgICBmdW5jdGlvbiBwYXJhbUlzU2hhZG93aW5nKHNjb3BlLCBuYW1lKSB7CisgICAgICAg
IHZhciBmb3VuZCA9IHNjb3BlLnZhcmlhYmxlcy5zb21lKGZ1bmN0aW9uKHZhcmlhYmxlKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdmFyaWFibGUubmFtZSA9PT0gbmFtZTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChzY29wZS51cHBlcikgeworICAgICAgICAgICAgcmV0dXJuIHBhcmFt
SXNTaGFkb3dpbmcoc2NvcGUudXBwZXIsIG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJs
aWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAg
ICAiQ2F0Y2hDbGF1c2UiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgc2NvcGUg
PSBjb250ZXh0LmdldFNjb3BlKCk7CisKKyAgICAgICAgICAgIGlmIChwYXJhbUlzU2hhZG93aW5n
KHNjb3BlLCBub2RlLnBhcmFtLm5hbWUpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlZhbHVlIG9mICd7e25hbWV9fScgbWF5IGJlIG92ZXJ3cml0dGVuIGluIElFIDgg
YW5kIGVhcmxpZXIuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogbm9kZS5wYXJh
bS5uYW1lIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sNDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB0cmFpbGluZyBjb21tYXMgaW4gb2JqZWN0IGxpdGVyYWxzLgor
ICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIC8vIEhlbHBlcnMKKyAgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKyAgICBmdW5jdGlvbiBjaGVja0ZvclRyYWlsaW5nQ29tbWEobm9kZSkgewor
ICAgICAgICB2YXIgc2Vjb25kVG9MYXN0VG9rZW4gPSBjb250ZXh0LmdldExhc3RUb2tlbnMobm9k
ZSwgMilbMF07CisKKyAgICAgICAgdmFyIGl0ZW1zID0gbm9kZS5wcm9wZXJ0aWVzIHx8IG5vZGUu
ZWxlbWVudHMsCisgICAgICAgICAgICBsYXN0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFd
OworICAgICAgICAvLyBUaGUgbGFzdCB0b2tlbiBpbiBhbiBvYmplY3QvYXJyYXkgbGl0ZXJhbCB3
aWxsIGFsd2F5cyBiZSBhIGNsb3NpbmcKKyAgICAgICAgLy8gY3VybHksIHNvIHdlIGNoZWNrIHRo
ZSBzZWNvbmQgdG8gbGFzdCB0b2tlbiBmb3IgYSBjb21tYS4KKyAgICAgICAgaWYgKHNlY29uZFRv
TGFzdFRva2VuLnZhbHVlID09PSAiLCIgJiYgaXRlbXMubGVuZ3RoICYmIGxhc3RJdGVtKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChsYXN0SXRlbSwgc2Vjb25kVG9MYXN0VG9rZW4ubG9j
LnN0YXJ0LCAiVHJhaWxpbmcgY29tbWEuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIHJldHVybiB7CisgICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogY2hlY2tGb3JU
cmFpbGluZ0NvbW1hLAorICAgICAgICAiQXJyYXlFeHByZXNzaW9uIjogY2hlY2tGb3JUcmFpbGlu
Z0NvbW1hCisgICAgfTsKKworfTsKKworfSx7fV0sNDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBhc3NpZ25tZW50
IGluIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgorICogQGF1dGhvciBTdGVwaGVuIE11cnJheSA8
c3BtdXJyYXl6eno+CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBpc1BhcmVudGhl
c2lzZWQobm9kZSkgeworICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9r
ZW5CZWZvcmUobm9kZSksCisgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2Vu
QWZ0ZXIobm9kZSk7CisKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIo
IiAmJiBwcmV2aW91c1Rva2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAg
ICAgIG5leHRUb2tlbi52YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2Rl
LnJhbmdlWzFdOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNlZFR3aWNlKG5v
ZGUpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3Jl
KG5vZGUsIDEpLAorICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVy
KG5vZGUsIDEpOworCisgICAgICAgIHJldHVybiBpc1BhcmVudGhlc2lzZWQobm9kZSkgJiYKKyAg
ICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rva2VuLnJh
bmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52YWx1ZSA9
PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHRlc3RGb3JBc3NpZ24obm9kZSkgeworICAgICAgICBpZiAobm9kZS50ZXN0
ICYmIChub2RlLnRlc3QudHlwZSA9PT0gIkFzc2lnbm1lbnRFeHByZXNzaW9uIikgJiYgIWlzUGFy
ZW50aGVzaXNlZFR3aWNlKG5vZGUudGVzdCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJFeHBlY3RlZCBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYW5kIGluc3RlYWQgc2F3
IGFuIGFzc2lnbm1lbnQuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAg
ICAgICAiSWZTdGF0ZW1lbnQiOiB0ZXN0Rm9yQXNzaWduLAorICAgICAgICAiV2hpbGVTdGF0ZW1l
bnQiOiB0ZXN0Rm9yQXNzaWduLAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IHRlc3RGb3JB
c3NpZ24sCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiB0ZXN0Rm9yQXNzaWduCisgICAgfTsKKwor
fTsKKworfSx7fV0sNDQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgY29uc29sZSBvYmplY3QKKyAqIEBh
dXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
cmV0dXJuIHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsK
KworICAgICAgICAgICAgaWYgKG5vZGUub2JqZWN0Lm5hbWUgPT09ICJjb25zb2xlIikgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbnNvbGUgc3Rh
dGVtZW50LiIpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSw0NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBjb25zdGFudCBjb25kaXRpb25zCisgKiBAYXV0aG9y
IENocmlzdGlhbiBTY2h1bHogPGh0dHA6Ly9ybmRtLmRlPgorICovCisKKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBhIG5vZGUgaGFzIGEg
Y29uc3RhbnQgdHJ1dGhpbmVzcyB2YWx1ZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
VGhlIEFTVCBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtCb29sfSB0cnVlIHdoZW4g
bm9kZSdzIHRydXRoaW5lc3MgaXMgY29uc3RhbnQKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGlzQ29uc3RhbnQobm9kZSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUudHlw
ZSkgeworICAgICAgICBjYXNlICJMaXRlcmFsIjoKKyAgICAgICAgY2FzZSAiRnVuY3Rpb25FeHBy
ZXNzaW9uIjoKKyAgICAgICAgY2FzZSAiT2JqZWN0RXhwcmVzc2lvbiI6CisgICAgICAgIGNhc2Ug
IkFycmF5RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2Fz
ZSAiVW5hcnlFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVybiBpc0NvbnN0YW50KG5vZGUu
YXJndW1lbnQpOworICAgICAgICBjYXNlICJCaW5hcnlFeHByZXNzaW9uIjoKKyAgICAgICAgY2Fz
ZSAiTG9naWNhbEV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQobm9k
ZS5sZWZ0KSAmJiBpc0NvbnN0YW50KG5vZGUucmlnaHQpOworICAgICAgICBjYXNlICJBc3NpZ25t
ZW50RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXR1cm4gaXNDb25zdGFudChub2RlLnJpZ2h0
KTsKKyAgICAgICAgY2FzZSAiU2VxdWVuY2VFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVy
biBpc0NvbnN0YW50KG5vZGUuZXhwcmVzc2lvbnNbbm9kZS5leHByZXNzaW9ucy5sZW5ndGggLSAx
XSk7CisgICAgICAgIC8vIG5vIGRlZmF1bHQKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVwb3J0cyB3aGVuIHRoZSBnaXZlbiBub2Rl
IGNvbnRhaW5zIGEgY29uc3RhbnQgY29uZGl0aW9uLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0g
bm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAg
ICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0NvbnN0YW50Q29uZGl0aW9u
KG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUudGVzdCAmJiBpc0NvbnN0YW50KG5vZGUudGVzdCkp
IHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbnN0YW50
IGNvbmRpdGlvbi4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4g
eworICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjogY2hlY2tDb25zdGFudENvbmRpdGlv
biwKKyAgICAgICAgIklmU3RhdGVtZW50IjogY2hlY2tDb25zdGFudENvbmRpdGlvbiwKKyAgICAg
ICAgIldoaWxlU3RhdGVtZW50IjogY2hlY2tDb25zdGFudENvbmRpdGlvbiwKKyAgICAgICAgIkRv
V2hpbGVTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9uLAorICAgICAgICAiRm9yU3Rh
dGVtZW50IjogY2hlY2tDb25zdGFudENvbmRpdGlvbgorICAgIH07CisKK307CisKK30se31dLDQ2
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZvcmJpZCBjb250cm9sIGNoYXJhY3RlcyBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lv
bnMuCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKworICAgIGZ1bmN0aW9uIGdldFJlZ0V4cChub2RlKSB7CisKKyAgICAgICAgaWYgKG5vZGUu
dmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVl
OworICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAic3RyaW5nIikgewor
CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsK
KyAgICAgICAgICAgIGlmICgocGFyZW50LnR5cGUgPT09ICJOZXdFeHByZXNzaW9uIiB8fCBwYXJl
bnQudHlwZSA9PT0gIkNhbGxFeHByZXNzaW9uIikgJiYKKyAgICAgICAgICAgIHBhcmVudC5jYWxs
ZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIHBhcmVudC5jYWxsZWUubmFtZSA9PT0gIlJlZ0V4
cCIpIHsKKworICAgICAgICAgICAgICAgIC8vIHRoZXJlIGNvdWxkIGJlIGFuIGludmFsaWQgcmVn
dWxhciBleHByZXNzaW9uIHN0cmluZworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKG5vZGUudmFsdWUpOworICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgIH0KKworCisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICB2YXIg
Y29tcHV0ZWRWYWx1ZSwKKyAgICAgICAgICAgICAgICByZWdleCA9IGdldFJlZ0V4cChub2RlKTsK
KworICAgICAgICAgICAgaWYgKHJlZ2V4KSB7CisgICAgICAgICAgICAgICAgY29tcHV0ZWRWYWx1
ZSA9IHJlZ2V4LnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKC9bXHgwMC1ceDFmXS8u
dGVzdChjb21wdXRlZFZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVW5leHBlY3RlZCBjb250cm9sIGNoYXJhY3RlciBpbiByZWd1bGFyIGV4cHJlc3Np
b24uIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKKworfTsKKworfSx7fV0sNDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYSBkZWJ1Z2dlciBzdGF0
ZW1lbnQKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJp
Y3QiOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkRlYnVnZ2VyU3RhdGVtZW50IjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQg
J2RlYnVnZ2VyJyBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9
XSw0ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gZGVsZXRpbmcgdmFyaWFibGVzCisgKiBAYXV0aG9yIEls
eWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAg
ICAgICAiVW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYg
KG5vZGUub3BlcmF0b3IgPT09ICJkZWxldGUiICYmIG5vZGUuYXJndW1lbnQudHlwZSA9PT0gIklk
ZW50aWZpZXIiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlZhcmlh
YmxlcyBzaG91bGQgbm90IGJlIGRlbGV0ZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworCit9OworCit9LHt9XSw0OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjaGVjayBmb3IgYW1iaWd1b3VzIGRp
diBvcGVyYXRvciBpbiByZWdleGVzCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3
Lm1hdHRkdXZhbGwuY29tPgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsK
KworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciB0
b2tlbiA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9kZSwgMSlbMF0sCisgICAgICAgICAgICAg
ICAgbm9kZVR5cGUgPSB0b2tlbi50eXBlLAorICAgICAgICAgICAgICAgIHNvdXJjZTsKKworICAg
ICAgICAgICAgaWYgKG5vZGVUeXBlID09PSAiUmVndWxhckV4cHJlc3Npb24iKSB7CisgICAgICAg
ICAgICAgICAgc291cmNlID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAxKVswXS52YWx1
ZTsKKworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VbMV0gPT09ICI9IikgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQSByZWd1bGFyIGV4cHJlc3Npb24gbGl0
ZXJhbCBjYW4gYmUgY29uZnVzZWQgd2l0aCAnLz0nLiIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDUwOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGZsYWcgdXNlIG9mIGR1cGxpY2F0ZSBrZXlzIGluIGFuIG9iamVjdC4KKyAqIEBhdXRob3IgSWFu
IENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsK
KworICAgICAgICAiT2JqZWN0RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAg
ICAgICAgLy8gT2JqZWN0IHRoYXQgd2lsbCBiZSBhIG1hcCBvZiBwcm9wZXJ0aWVzLS1zYWZlIGJl
Y2F1c2Ugd2Ugd2lsbAorICAgICAgICAgICAgLy8gcHJlZml4IGFsbCBvZiB0aGUga2V5cy4KKyAg
ICAgICAgICAgIHZhciBub2RlUHJvcHMgPSB7fTsKKworICAgICAgICAgICAgbm9kZS5wcm9wZXJ0
aWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICB2YXIga2V5
TmFtZSA9IHByb3BlcnR5LmtleS5uYW1lIHx8IHByb3BlcnR5LmtleS52YWx1ZTsKKyAgICAgICAg
ICAgICAgICB2YXIga2V5ID0gcHJvcGVydHkua2luZCArICItIiArIGtleU5hbWU7CisKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZVByb3BzW2tleV0pIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkR1cGxpY2F0ZSBrZXkgJ3t7a2V5fX0nLiIsIHsga2V5OiBrZXlO
YW1lIH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGVQcm9wc1trZXldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsK
KworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTE6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBgZWxz
ZWAgYWZ0ZXIgYSBgcmV0dXJuYCBpbiBgaWZgCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXll
cnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRl
eHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZnVuY3Rpb24gY2hl
Y2tGb3JSZXR1cm5TdGF0ZW1lbnQobm9kZSwgYWx0ZXJuYXRlKSB7CisgICAgICAgIGlmIChub2Rl
LnR5cGUgPT09ICJSZXR1cm5TdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChhbHRlcm5hdGUsICJVbmV4cGVjdGVkICdlbHNlJyBhZnRlciAncmV0dXJuJy4iKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJ
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiSWZT
dGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIC8vIERvbid0IGJvdGhl
ciBmaW5kaW5nIGEgUmV0dXJuU3RhdGVtZW50LCBpZiB0aGVyZSdzIG5vIGBlbHNlYAorICAgICAg
ICAgICAgLy8gb3IgaWYgdGhlIGFsdGVybmF0ZSBpcyBhbHNvIGFuIGlmIChpbmRpY2F0aW5nIGFu
IGVsc2UgaWYpLgorICAgICAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlICYmIG5vZGUuY29uc2Vx
dWVudCAmJiBub2RlLmFsdGVybmF0ZS50eXBlICE9PSAiSWZTdGF0ZW1lbnQiKSB7CisKKyAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgQmxvY2tTdGF0ZW1lbnQsIGNoZWNrIGVhY2ggY29u
c2VxdWVudCBib2R5IG5vZGUuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY29uc2VxdWVudC50
eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUuY29u
c2VxdWVudC5ib2R5LmZvckVhY2goZnVuY3Rpb24gKGJvZHlOb2RlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGVja0ZvclJldHVyblN0YXRlbWVudChib2R5Tm9kZSwgbm9kZS5hbHRlcm5h
dGUpOworICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8vIElmIG5v
dCBhIGJsb2NrIHN0YXRlbWVudCwgbWFrZSBzdXJlIHRoZSBjb25zZXF1ZW50IGlzbid0IGEKKyAg
ICAgICAgICAgICAgICAvLyBSZXR1cm5TdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBjaGVja0ZvclJldHVyblN0YXRlbWVudChub2RlLmNvbnNl
cXVlbnQsIG5vZGUuYWx0ZXJuYXRlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDUyOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdGhl
IHVzZSBvZiBlbXB0eSBjaGFyYWN0ZXIgY2xhc3NlcyBpbiByZWd1bGFyIGV4cHJlc3Npb25zCisg
KiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSk7CisgICAgICAgICAg
ICB0b2tlbnMuZm9yRWFjaChmdW5jdGlvbiAodG9rZW4pIHsKKyAgICAgICAgICAgICAgICAvKgor
ICAgICAgICAgICAgICAgIHBsYWluLUVuZ2xpc2ggZGVzY3JpcHRpb24gb2YgdGhlIGZvbGxvd2lu
ZyByZWdleHA6CisgICAgICAgICAgICAgICAgMC4gYF5gIGZpeCB0aGUgbWF0Y2ggYXQgdGhlIGJl
Z2lubmluZyBvZiB0aGUgc3RyaW5nCisgICAgICAgICAgICAgICAgMS4gYFwvYDogdGhlIGAvYCB0
aGF0IGJlZ2lucyB0aGUgcmVnZXhwCisgICAgICAgICAgICAgICAgMi4gYChbXlxcW118XFwufFxb
KFteXFxcXV18XFwuKStcXSkqYDogcmVnZXhwIGNvbnRlbnRzOyAwIG9yIG1vcmUgb2YgdGhlIGZv
bGxvd2luZworICAgICAgICAgICAgICAgICAgMi4wLiBgW15cXFtdYDogYW55IGNoYXJhY3RlciB0
aGF0J3Mgbm90IGEgYFxgIG9yIGEgYFtgIChhbnl0aGluZyBidXQgZXNjYXBlIHNlcXVlbmNlcyBh
bmQgY2hhcmFjdGVyIGNsYXNzZXMpCisgICAgICAgICAgICAgICAgICAyLjEuIGBcXC5gOiBhbiBl
c2NhcGUgc2VxdWVuY2UKKyAgICAgICAgICAgICAgICAgIDIuMi4gYFxbKFteXFxcXV18XFwuKStc
XWA6IGEgY2hhcmFjdGVyIGNsYXNzIHRoYXQgaXNuJ3QgZW1wdHkKKyAgICAgICAgICAgICAgICAz
LiBgXC9gIHRoZSBgL2AgdGhhdCBlbmRzIHRoZSByZWdleHAKKyAgICAgICAgICAgICAgICA0LiBg
W2dpbXldKmA6IG9wdGlvbmFsIHJlZ2V4cCBmbGFncworICAgICAgICAgICAgICAgIDUuIGAkYDog
Zml4IHRoZSBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAq
LworICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAiUmVndWxhckV4cHJlc3Npb24i
ICYmCisgICAgICAgICAgICAgICAgIS9eXC8oW15cXFtdfFxcLnxcWyhbXlxcXF1dfFxcLikrXF0p
KlwvW2dpbXldKiQvLnRlc3QodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsICJFbXB0eSBjbGFzcy4iKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sNTM6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyB3aGVuIGxhYmVsIGlzIG5vdCB1c2VkIGZvciBhIGxvb3Agb3Igc3dpdGNoCisg
KiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0
dXJuIHsKKworICAgICAgICAiTGFiZWxlZFN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLmJvZHkudHlwZSAhPT0gIkZvclN0YXRlbWVudCIgJiYgbm9kZS5i
b2R5LnR5cGUgIT09ICJXaGlsZVN0YXRlbWVudCIgJiYgbm9kZS5ib2R5LnR5cGUgIT09ICJEb1do
aWxlU3RhdGVtZW50IiAmJiBub2RlLmJvZHkudHlwZSAhPT0gIlN3aXRjaFN0YXRlbWVudCIgJiYg
bm9kZS5ib2R5LnR5cGUgIT09ICJGb3JJblN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBsYWJlbCB7e2x9fSIsIHtsOiBub2RlLmxh
YmVsLm5hbWV9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30s
e31dLDU0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGFuIGVtcHR5IGJsb2NrIHN0YXRlbWVudAorICog
QGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgcmV0dXJu
IHsKKworICAgICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwKKyAgICAgICAgICAg
ICAgICBwYXJlbnQgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdLAorICAgICAgICAg
ICAgICAgIHBhcmVudFR5cGUgPSBwYXJlbnQudHlwZSwKKyAgICAgICAgICAgICAgICBpc0ZpbmFs
bHlCbG9jayA9IChwYXJlbnRUeXBlID09PSAiVHJ5U3RhdGVtZW50IikgJiYgKHBhcmVudC5maW5h
bGl6ZXIgPT09IG5vZGUpOworCisgICAgICAgICAgICBpZiAoL0Z1bmN0aW9uRXhwcmVzc2lvbnxG
dW5jdGlvbkRlY2xhcmF0aW9ufENhdGNoQ2xhdXNlLy50ZXN0KHBhcmVudFR5cGUpIHx8CisgICAg
ICAgICAgICAgICAgICAgIChpc0ZpbmFsbHlCbG9jayAmJiAhcGFyZW50LmhhbmRsZXJzLmxlbmd0
aCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIkVtcHR5IGJsb2NrIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSwKKworICAgICAgICAiU3dpdGNoU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
eworCisgICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUuY2FzZXMgPT09ICJ1bmRlZmluZWQiIHx8
IG5vZGUuY2FzZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIkVtcHR5IHN3aXRjaCBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw1NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGNvbXBhcmlzb25z
IHRvIG51bGwgd2l0aG91dCBhIHR5cGUtY2hlY2tpbmcKKyAqIG9wZXJhdG9yLgorICogQGF1dGhv
ciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJu
IHsKKworICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgIHZhciBiYWRPcGVyYXRvciA9IG5vZGUub3BlcmF0b3IgPT09ICI9PSIgfHwgbm9kZS5v
cGVyYXRvciA9PT0gIiE9IjsKKworICAgICAgICAgICAgaWYgKG5vZGUucmlnaHQudHlwZSA9PT0g
IkxpdGVyYWwiICYmIG5vZGUucmlnaHQucmF3ID09PSAibnVsbCIgJiYgYmFkT3BlcmF0b3IgfHwK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2Rl
LmxlZnQucmF3ID09PSAibnVsbCIgJiYgYmFkT3BlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiVXNlIOKAmD09PeKAmSB0byBjb21wYXJlIHdpdGgg4oCYbnVs
bOKAmS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31d
LDU2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIGV2YWwoKSBzdGF0ZW1lbnQKKyAqIEBhdXRob3IgTmlj
aG9sYXMgQy4gWmFrYXMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBJTVBMSUVE
X0VWQUwgPSAvc2V0KD86VGltZW91dHxJbnRlcnZhbCkvOworCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioK
KyAgICAgKiBEZXRlcm1pbmVzIGlmIGEgbm9kZSByZXByZXNlbnRzIGEgY2FsbCB0byBzZXRUaW1l
b3V0L3NldEludGVydmFsIHdpdGgKKyAgICAgKiBhIHN0cmluZyBhcmd1bWVudC4KKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMg
e2Jvb2xlYW59IFRydWUgaWYgdGhlIG5vZGUgbWF0Y2hlcywgZmFsc2UgaWYgbm90LgorICAgICAq
IEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gaXNJbXBsaWVkRXZhbChub2RlKSB7CisK
KyAgICAgICAgdmFyIGlzTWVtYmVyRXhwcmVzc2lvbiA9IChub2RlLmNhbGxlZS50eXBlID09PSAi
TWVtYmVyRXhwcmVzc2lvbiIpLAorICAgICAgICAgICAgaXNJZGVudGlmaWVyID0gKG5vZGUuY2Fs
bGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiksCisgICAgICAgICAgICBpc1NldE1ldGhvZCA9IChp
c0lkZW50aWZpZXIgJiYgSU1QTElFRF9FVkFMLnRlc3Qobm9kZS5jYWxsZWUubmFtZSkpIHx8Cisg
ICAgICAgICAgICAgICAgKGlzTWVtYmVyRXhwcmVzc2lvbiAmJiBub2RlLmNhbGxlZS5vYmplY3Qu
bmFtZSA9PT0gIndpbmRvdyIgJiYKKyAgICAgICAgICAgICAgICBJTVBMSUVEX0VWQUwudGVzdChu
b2RlLmNhbGxlZS5wcm9wZXJ0eS5uYW1lKSksCisgICAgICAgICAgICBoYXNTdHJpbmdBcmd1bWVu
dCA9IG5vZGUuYXJndW1lbnRzLmxlbmd0aCAmJiAodHlwZW9mIG5vZGUuYXJndW1lbnRzWzBdLnZh
bHVlID09PSAic3RyaW5nIik7CisKKyAgICAgICAgcmV0dXJuIGlzU2V0TWV0aG9kICYmIGhhc1N0
cmluZ0FyZ3VtZW50OworICAgIH0KKworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAg
ICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2Rl
LmNhbGxlZS5uYW1lID09PSAiZXZhbCIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiZXZhbCBjYW4gYmUgaGFybWZ1bC4iKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNJbXBsaWVkRXZhbChub2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLmFyZ3VtZW50
cy5sZW5ndGggJiYgKHR5cGVvZiBub2RlLmFyZ3VtZW50c1swXS52YWx1ZSA9PT0gInN0cmluZyIp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJJbXBsaWVkIGV2
YWwgY2FuIGJlIGhhcm1mdWwuIFBhc3MgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgc3RyaW5nLiIp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisK
K307CisKK30se31dLDU3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYXNzaWdubWVudCBvZiB0aGUgZXhjZXB0aW9u
IHBhcmFtZXRlcgorICogQGF1dGhvciBTdGVwaGVuIE11cnJheSA8c3BtdXJyYXl6eno+CisgKi8K
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgaW5DYXRjaCA9IGZhbHNlLAorICAgICAgICBl
eGNlcHRpb25OYW1lID0gbnVsbDsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkNhdGNoQ2xh
dXNlIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaW5DYXRjaCA9IHRydWU7CisgICAg
ICAgICAgICBleGNlcHRpb25OYW1lID0gbm9kZS5wYXJhbS5uYW1lOworICAgICAgICB9LAorCisg
ICAgICAgICJDYXRjaENsYXVzZTpleGl0IjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBpbkNh
dGNoID0gZmFsc2U7CisgICAgICAgICAgICBleGNlcHRpb25OYW1lID0gbnVsbDsKKyAgICAgICAg
fSwKKworICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisK
KyAgICAgICAgICAgIGlmIChpbkNhdGNoKSB7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5s
ZWZ0Lm5hbWUgPT09IGV4Y2VwdGlvbk5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIkRvIG5vdCBhc3NpZ24gdG8gdGhlIGV4Y2VwdGlvbiBwYXJhbWV0ZXIu
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9
OworCit9OworCit9LHt9XSw1ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGFkZGluZyBwcm9wZXJ0aWVzIHRvIG5h
dGl2ZSBvYmplY3QncyBwcm90b3R5cGVzLgorICogQGF1dGhvciBEYXZpZCBOZWxzb24KKyAqLwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVxdWlyZW1lbnRzCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCit2YXIgQlVJTFRJTlMgPSBbCisgICAgIk9iamVjdCIsICJGdW5jdGlvbiIs
ICJBcnJheSIsICJTdHJpbmciLCAiQm9vbGVhbiIsICJOdW1iZXIiLCAiRGF0ZSIsCisgICAgIlJl
Z0V4cCIsICJFcnJvciIsICJFdmFsRXJyb3IiLCAiUmFuZ2VFcnJvciIsICJSZWZlcmVuY2VFcnJv
ciIsCisgICAgIlN5bnRheEVycm9yIiwgIlR5cGVFcnJvciIsICJVUklFcnJvciIKK107CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAg
InVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAvLyBoYW5kbGUgdGhlIEFy
cmF5LnByb3RvdHlwZS5leHRyYSBzdHlsZSBjYXNlCisgICAgICAgICJBc3NpZ25tZW50RXhwcmVz
c2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBsaHMgPSBub2RlLmxlZnQs
IGFmZmVjdHNQcm90bzsKKworICAgICAgICAgICAgaWYgKGxocy50eXBlICE9PSAiTWVtYmVyRXhw
cmVzc2lvbiIgfHwgbGhzLm9iamVjdC50eXBlICE9PSAiTWVtYmVyRXhwcmVzc2lvbiIpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFmZmVj
dHNQcm90byA9IGxocy5vYmplY3QuY29tcHV0ZWQgPworICAgICAgICAgICAgICAgIGxocy5vYmpl
Y3QucHJvcGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmIGxocy5vYmplY3QucHJvcGVydHkudmFs
dWUgPT09ICJwcm90b3R5cGUiIDoKKyAgICAgICAgICAgICAgICBsaHMub2JqZWN0LnByb3BlcnR5
Lm5hbWUgPT09ICJwcm90b3R5cGUiOworCisgICAgICAgICAgICBpZiAoIWFmZmVjdHNQcm90bykg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
QlVJTFRJTlMuZm9yRWFjaChmdW5jdGlvbihidWlsdGluKSB7CisgICAgICAgICAgICAgICAgaWYg
KGxocy5vYmplY3Qub2JqZWN0Lm5hbWUgPT09IGJ1aWx0aW4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgYnVpbHRpbiArICIgcHJvdG90eXBlIGlzIHJlYWQgb25s
eSwgcHJvcGVydGllcyBzaG91bGQgbm90IGJlIGFkZGVkLiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgIC8vIGhhbmRsZSB0aGUgT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSkgY2FzZQorICAgICAgICAiQ2FsbEV4
cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciBjYWxsZWUgPSBu
b2RlLmNhbGxlZSwKKyAgICAgICAgICAgICAgICBzdWJqZWN0LAorICAgICAgICAgICAgICAgIG9i
amVjdDsKKworICAgICAgICAgICAgLy8gb25seSB3b3JyeSBhYm91dCBPYmplY3QuZGVmaW5lUHJv
cGVydHkKKyAgICAgICAgICAgIGlmIChjYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24i
ICYmCisgICAgICAgICAgICAgICAgY2FsbGVlLm9iamVjdC5uYW1lID09PSAiT2JqZWN0IiAmJgor
ICAgICAgICAgICAgICAgIGNhbGxlZS5wcm9wZXJ0eS5uYW1lID09PSAiZGVmaW5lUHJvcGVydHki
KSB7CisKKyAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgdGhlIG9iamVjdCBiZWluZyBhZGRlZCB0
byBpcyBhIG5hdGl2ZSBwcm90b3R5cGUKKyAgICAgICAgICAgICAgICBzdWJqZWN0ID0gbm9kZS5h
cmd1bWVudHNbMF07CisgICAgICAgICAgICAgICAgb2JqZWN0ID0gc3ViamVjdC5vYmplY3Q7CisK
KyAgICAgICAgICAgICAgICBpZiAob2JqZWN0ICYmCisgICAgICAgICAgICAgICAgICAgIG9iamVj
dC50eXBlID09PSAiSWRlbnRpZmllciIgJiYKKyAgICAgICAgICAgICAgICAgICAgKEJVSUxUSU5T
LmluZGV4T2Yob2JqZWN0Lm5hbWUpID4gLTEpICYmCisgICAgICAgICAgICAgICAgICAgIHN1Ympl
Y3QucHJvcGVydHkubmFtZSA9PT0gInByb3RvdHlwZSIpIHsKKworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCBvYmplY3QubmFtZSArICIgcHJvdG90eXBlIGlzIHJlYWQg
b25seSwgcHJvcGVydGllcyBzaG91bGQgbm90IGJlIGFkZGVkLiIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTk6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB1bm5lY2Vzc2FyeSBiaW5kIGNhbGxzCisgKiBAYXV0aG9yIEJlbmNlIETD
oW55aSA8YmVuY2VAZGFueWkubWU+CisgKiBAY29weXJpZ2h0IDIwMTQgQmVuY2UgRMOhbnlpLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIHNjb3BlID0g
W3sKKyAgICAgICAgZGVwdGg6IC0xLAorICAgICAgICBmb3VuZDogMAorICAgIH1dOworCisgICAg
LyoqCisgICAgICogR2V0IHRoZSB0b3Btb3N0IHNjb3BlCisgICAgICogQHJldHVybnMge09iamVj
dH0gVGhlIHRvcG1vc3Qgc2NvcGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRUb3BTY29wZSgp
IHsKKyAgICAgICAgcmV0dXJuIHNjb3BlW3Njb3BlLmxlbmd0aCAtIDFdOworICAgIH0KKworICAg
IC8qKgorICAgICAqIEluY3JlbWVudCB0aGUgZGVwdGggb2YgdGhlIHRvcCBzY29wZQorICAgICAq
IEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGluY3JlbWVudFNjb3BlRGVw
dGgoKSB7CisgICAgICAgIHZhciB0b3AgPSBnZXRUb3BTY29wZSgpOworICAgICAgICB0b3AuZGVw
dGgrKzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZWNyZW1lbnQgdGhlIGRlcHRoIG9mIHRo
ZSB0b3Agc2NvcGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBkZWNyZW1lbnRTY29wZURlcHRoKCkgeworICAgICAgICB2YXIgdG9wID0gZ2V0VG9wU2NvcGUo
KTsKKyAgICAgICAgdG9wLmRlcHRoLS07CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAg
IkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUu
YXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJgorICAgICAgICAgICAgICAgIG5vZGUuY2FsbGVlLnR5
cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgIG5vZGUuY2FsbGVl
LnByb3BlcnR5Lm5hbWUgPT09ICJiaW5kIiAmJgorICAgICAgICAgICAgICAgIG5vZGUuY2FsbGVl
Lm9iamVjdC50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAg
IHNjb3BlLnB1c2goeworICAgICAgICAgICAgICAgICAgICBjYWxsOiBub2RlLAorICAgICAgICAg
ICAgICAgICAgICBkZXB0aDogLTEsCisgICAgICAgICAgICAgICAgICAgIGZvdW5kOiAwCisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJDYWxs
RXhwcmVzc2lvbjpleGl0IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHRvcCA9
IGdldFRvcFNjb3BlKCk7CisgICAgICAgICAgICBpZiAodG9wLmNhbGwgPT09IG5vZGUgJiYgdG9w
LmZvdW5kID09PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRo
ZSBmdW5jdGlvbiBiaW5kaW5nIGlzIHVubmVjZXNzYXJ5LiIpOworICAgICAgICAgICAgICAgIHNj
b3BlLnBvcCgpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiRnVuY3Rpb25F
eHByZXNzaW9uIjogaW5jcmVtZW50U2NvcGVEZXB0aCwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVz
c2lvbjpleGl0IjogZGVjcmVtZW50U2NvcGVEZXB0aCwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFy
YXRpb24iOiBpbmNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
bjpleGl0IjogZGVjcmVtZW50U2NvcGVEZXB0aCwKKyAgICAgICAgIlRoaXNFeHByZXNzaW9uIjog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB2YXIgdG9wID0gZ2V0VG9wU2NvcGUoKTsKKyAgICAg
ICAgICAgIGlmICh0b3AuZGVwdGggPT09IDApIHsKKyAgICAgICAgICAgICAgICB0b3AuZm91bmQr
KzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDYwOltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgdW5uZWNlc3NhcnkgZG91YmxlIG5lZ2F0aW9uIGluIEJvb2xlYW4gY29udGV4
dHMKKyAqIEBhdXRob3IgQnJhbmRvbiBNaWxscworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uIChub2RlKSB7
CisgICAgICAgICAgICB2YXIgYW5jZXN0b3JzICAgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAor
ICAgICAgICAgICAgICAgIHBhcmVudCAgICAgID0gYW5jZXN0b3JzLnBvcCgpLAorICAgICAgICAg
ICAgICAgIGdyYW5kcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpOworCisgICAgICAgICAgICAvLyBF
eGl0IGVhcmx5IGlmIGl0J3MgZ3VhcmFudGVlZCBub3QgdG8gbWF0Y2gKKyAgICAgICAgICAgIGlm
IChub2RlLm9wZXJhdG9yICE9PSAiISIgfHwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LnR5
cGUgIT09ICJVbmFyeUV4cHJlc3Npb24iIHx8CisgICAgICAgICAgICAgICAgICAgIHBhcmVudC5v
cGVyYXRvciAhPT0gIiEiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBpZiAoPGJvb2w+KSAuLi4KKyAgICAgICAgICAgIGlmIChncmFu
ZHBhcmVudC50eXBlID09PSAiSWZTdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4gYW4gaWYgc3RhdGVt
ZW50IGNvbmRpdGlvbi4iKTsKKworICAgICAgICAgICAgLy8gZG8gLi4uIHdoaWxlICg8Ym9vbD4p
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGdyYW5kcGFyZW50LnR5cGUgPT09ICJEb1doaWxlU3Rh
dGVtZW50IikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRh
bnQgZG91YmxlIG5lZ2F0aW9uIGluIGEgZG8gd2hpbGUgbG9vcCBjb25kaXRpb24uIik7CisKKyAg
ICAgICAgICAgIC8vIHdoaWxlICg8Ym9vbD4pIC4uLgorICAgICAgICAgICAgfSBlbHNlIGlmIChn
cmFuZHBhcmVudC50eXBlID09PSAiV2hpbGVTdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4gYSB3aGls
ZSBsb29wIGNvbmRpdGlvbi4iKTsKKworICAgICAgICAgICAgLy8gPGJvb2w+ID8gLi4uIDogLi4u
CisgICAgICAgICAgICB9IGVsc2UgaWYgKChncmFuZHBhcmVudC50eXBlID09PSAiQ29uZGl0aW9u
YWxFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPT09IGdyYW5kcGFy
ZW50LnRlc3QpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVu
ZGFudCBkb3VibGUgbmVnYXRpb24gaW4gYSB0ZXJuYXJ5IGNvbmRpdGlvbi4iKTsKKworICAgICAg
ICAgICAgLy8gZm9yICguLi47IDxib29sPjsgLi4uKSAuLi4KKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJGb3JTdGF0ZW1lbnQiICYmCisgICAgICAgICAgICAg
ICAgICAgIHBhcmVudCA9PT0gZ3JhbmRwYXJlbnQudGVzdCkpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBhIGZvciBs
b29wIGNvbmRpdGlvbi4iKTsKKworICAgICAgICAgICAgLy8gITxib29sPgorICAgICAgICAgICAg
fSBlbHNlIGlmICgoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIlVuYXJ5RXhwcmVzc2lvbiIgJiYKKyAg
ICAgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQub3BlcmF0b3IgPT09ICIhIikpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IG11bHRpcGxlIG5lZ2F0
aW9uLiIpOworCisgICAgICAgICAgICAvLyBCb29sZWFuKDxib29sPikKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJDYWxsRXhwcmVzc2lvbiIgJiYKKyAgICAg
ICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAm
JgorICAgICAgICAgICAgICAgICAgICBncmFuZHBhcmVudC5jYWxsZWUubmFtZSA9PT0gIkJvb2xl
YW4iKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQg
ZG91YmxlIG5lZ2F0aW9uIGluIGNhbGwgdG8gQm9vbGVhbigpLiIpOworCisgICAgICAgICAgICAv
LyBuZXcgQm9vbGVhbig8Ym9vbD4pCisgICAgICAgICAgICB9IGVsc2UgaWYgKChncmFuZHBhcmVu
dC50eXBlID09PSAiTmV3RXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgZ3JhbmRw
YXJlbnQuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAgICAgICAgICAgICAg
ICBncmFuZHBhcmVudC5jYWxsZWUubmFtZSA9PT0gIkJvb2xlYW4iKSkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIEJv
b2xlYW4gY29uc3RydWN0b3IgY2FsbC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisKK307CisKK30se31dLDYxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBwYXJlbnRoZXNlc2lzbmcgaGlnaGVyIHBy
ZWNlZGVuY2Ugc3ViZXhwcmVzc2lvbnMuCisgKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQorICov
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgZnVuY3Rpb24gaXNQYXJlbnRoZXNpc2VkKG5vZGUpIHsKKyAg
ICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpLAor
ICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUpOworCisg
ICAgICAgIHJldHVybiBwcmV2aW91c1Rva2VuICYmIG5leHRUb2tlbiAmJgorICAgICAgICAgICAg
cHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0g
bm9kZS5yYW5nZVswXSAmJgorICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09PSAiKSIgJiYg
bmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07CisgICAgfQorCisgICAgZnVuY3Rp
b24gaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZSkgeworICAgICAgICB2YXIgcHJldmlvdXNUb2tl
biA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSwgMSksCisgICAgICAgICAgICBuZXh0VG9r
ZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSwgMSk7CisKKyAgICAgICAgcmV0dXJuIGlz
UGFyZW50aGVzaXNlZChub2RlKSAmJiBwcmV2aW91c1Rva2VuICYmIG5leHRUb2tlbiAmJgorICAg
ICAgICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFu
Z2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgorICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09
PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07CisgICAgfQorCisg
ICAgZnVuY3Rpb24gcHJlY2VkZW5jZShub2RlKSB7CisKKyAgICAgICAgc3dpdGNoIChub2RlLnR5
cGUpIHsKKyAgICAgICAgICAgIGNhc2UgIlNlcXVlbmNlRXhwcmVzc2lvbiI6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGNhc2UgIkFzc2lnbm1lbnRFeHByZXNzaW9u
IjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICAgICAgY2FzZSAiQ29uZGl0
aW9uYWxFeHByZXNzaW9uIjoKKyAgICAgICAgICAgICAgICByZXR1cm4gMzsKKworICAgICAgICAg
ICAgY2FzZSAiTG9naWNhbEV4cHJlc3Npb24iOgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS5vcGVyYXRvcikgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJ8fCI6CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJiYiOgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDU7CisgICAgICAgICAgICAgICAgICAgIC8v
IG5vIGRlZmF1bHQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBmYWxs
cyB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlICJCaW5hcnlFeHByZXNzaW9uIjoKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3BlcmF0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAifCI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAiXiI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAiJiI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gODsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPT0iOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlICIhPSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj09PSI6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgIiE9PSI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOTsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPCI6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Ijw9IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPiI6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgIj49IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiaW4iOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlICJpbnN0YW5jZW9mIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAxMDsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPDwiOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlICI+PiI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIj4+PiI6CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMTE7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIisiOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlICItIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAxMjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiKiI6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgIi8iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICIlIjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAxMzsKKyAgICAgICAgICAgICAgICAgICAgLy8gbm8gZGVmYXVs
dAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBmYWxscyB0aHJvdWdoICov
CisgICAgICAgICAgICBjYXNlICJVbmFyeUV4cHJlc3Npb24iOgorICAgICAgICAgICAgICAgIHJl
dHVybiAxNDsKKyAgICAgICAgICAgIGNhc2UgIlVwZGF0ZUV4cHJlc3Npb24iOgorICAgICAgICAg
ICAgICAgIHJldHVybiAxNTsKKyAgICAgICAgICAgIGNhc2UgIkNhbGxFeHByZXNzaW9uIjoKKyAg
ICAgICAgICAgICAgICAvLyBJSUZFIGlzIGFsbG93ZWQgdG8gaGF2ZSBwYXJlbnMgaW4gYW55IHBv
c2l0aW9uICgjNjU1KQorICAgICAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAi
RnVuY3Rpb25FeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAxNjsKKyAgICAgICAgICAg
IGNhc2UgIk5ld0V4cHJlc3Npb24iOgorICAgICAgICAgICAgICAgIHJldHVybiAxNzsKKyAgICAg
ICAgICAgIC8vIG5vIGRlZmF1bHQKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTg7CisgICAg
fQorCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIkdyYXR1aXRvdXMgcGFyZW50aGVzZXMgYXJvdW5kIGV4cHJlc3Npb24uIik7CisgICAg
fQorCisgICAgZnVuY3Rpb24gZHJ5VW5hcnlVcGRhdGUobm9kZSkgeworICAgICAgICBpZiAoaXNQ
YXJlbnRoZXNpc2VkKG5vZGUuYXJndW1lbnQpICYmIHByZWNlZGVuY2Uobm9kZS5hcmd1bWVudCkg
Pj0gcHJlY2VkZW5jZShub2RlKSkgeworICAgICAgICAgICAgcmVwb3J0KG5vZGUuYXJndW1lbnQp
OworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gZHJ5Q2FsbE5ldyhub2RlKSB7Cisg
ICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5jYWxsZWUpICYmIHByZWNlZGVuY2Uobm9k
ZS5jYWxsZWUpID49IHByZWNlZGVuY2Uobm9kZSkgJiYKKyAgICAgICAgIShub2RlLnR5cGUgPT09
ICJDYWxsRXhwcmVzc2lvbiIgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gIkZ1bmN0aW9uRXhwcmVz
c2lvbiIpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZS5jYWxsZWUpOworICAgICAgICB9Cisg
ICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgIGlm
IChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLmFyZ3VtZW50c1swXSkgJiYgcHJlY2VkZW5jZShu
b2RlLmFyZ3VtZW50c1swXSkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNz
aW9uIn0pKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuYXJndW1lbnRzWzBdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFtdLmZvckVhY2guY2Fs
bChub2RlLmFyZ3VtZW50cywgZnVuY3Rpb24oYXJnKXsKKyAgICAgICAgICAgICAgICBpZiAoaXNQ
YXJlbnRoZXNpc2VkKGFyZykgJiYgcHJlY2VkZW5jZShhcmcpID49IHByZWNlZGVuY2Uoe3R5cGU6
ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQo
YXJnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZ1bmN0aW9uIGRyeUJpbmFyeUxvZ2ljYWwobm9kZSkgeworICAgICAgICB2YXIg
cHJlYyA9IHByZWNlZGVuY2Uobm9kZSk7CisgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9k
ZS5sZWZ0KSAmJiBwcmVjZWRlbmNlKG5vZGUubGVmdCkgPj0gcHJlYykgeworICAgICAgICAgICAg
cmVwb3J0KG5vZGUubGVmdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNl
ZChub2RlLnJpZ2h0KSAmJiBwcmVjZWRlbmNlKG5vZGUucmlnaHQpID4gcHJlYykgeworICAgICAg
ICAgICAgcmVwb3J0KG5vZGUucmlnaHQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHsKKyAgICAgICAgIkFycmF5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIFtdLmZvckVhY2guY2FsbChub2RlLmVsZW1lbnRzLCBmdW5jdGlvbihlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGUgJiYgaXNQYXJlbnRoZXNpc2VkKGUpICYmIHByZWNlZGVuY2UoZSkgPj0g
cHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJlcG9ydChlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSwKKyAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLnJpZ2h0KSAmJiBwcmVj
ZWRlbmNlKG5vZGUucmlnaHQpID49IHByZWNlZGVuY2Uobm9kZSkpIHsKKyAgICAgICAgICAgICAg
ICByZXBvcnQobm9kZS5yaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAg
ICJCaW5hcnlFeHByZXNzaW9uIjogZHJ5QmluYXJ5TG9naWNhbCwKKyAgICAgICAgIkNhbGxFeHBy
ZXNzaW9uIjogZHJ5Q2FsbE5ldywKKyAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS50ZXN0
KSAmJiBwcmVjZWRlbmNlKG5vZGUudGVzdCkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkxvZ2ljYWxF
eHByZXNzaW9uIiwgb3BlcmF0b3I6ICJ8fCJ9KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChu
b2RlLnRlc3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNl
ZChub2RlLmNvbnNlcXVlbnQpICYmIHByZWNlZGVuY2Uobm9kZS5jb25zZXF1ZW50KSA+PSBwcmVj
ZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24ifSkpIHsKKyAgICAgICAgICAgICAg
ICByZXBvcnQobm9kZS5jb25zZXF1ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChpc1BhcmVudGhlc2lzZWQobm9kZS5hbHRlcm5hdGUpICYmIHByZWNlZGVuY2Uobm9kZS5hbHRl
cm5hdGUpID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgewor
ICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmFsdGVybmF0ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUudGVzdCkpIHsKKyAgICAg
ICAgICAgICAgICByZXBvcnQobm9kZS50ZXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwK
KyAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICB2YXIgZmlyc3RUb2tlbjsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9k
ZS5leHByZXNzaW9uKSkgeworICAgICAgICAgICAgICAgIGZpcnN0VG9rZW4gPSBjb250ZXh0Lmdl
dEZpcnN0VG9rZW4obm9kZS5leHByZXNzaW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlyc3RU
b2tlbi52YWx1ZSAhPT0gImZ1bmN0aW9uIiAmJiBmaXJzdFRva2VuLnZhbHVlICE9PSAieyIpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuZXhwcmVzc2lvbik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiRm9ySW5TdGF0ZW1l
bnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5v
ZGUucmlnaHQpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUucmlnaHQpOworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiRm9yU3RhdGVtZW50IjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuaW5pdCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS5p
bml0KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmluaXQpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAobm9kZS50ZXN0ICYmIGlzUGFyZW50aGVzaXNlZChub2RlLnRl
c3QpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChub2RlLnVwZGF0ZSAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS51
cGRhdGUpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudXBkYXRlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIklmU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUudGVzdCkpIHsKKyAg
ICAgICAgICAgICAgICByZXBvcnQobm9kZS50ZXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSwKKyAgICAgICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogZHJ5QmluYXJ5TG9naWNhbCwKKyAgICAg
ICAgIk1lbWJlckV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAo
CisgICAgICAgICAgICAgICAgaXNQYXJlbnRoZXNpc2VkKG5vZGUub2JqZWN0KSAmJgorICAgICAg
ICAgICAgICAgIHByZWNlZGVuY2Uobm9kZS5vYmplY3QpID49IHByZWNlZGVuY2Uobm9kZSkgJiYK
KyAgICAgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgICAgIG5vZGUuY29tcHV0ZWQgfHwK
KyAgICAgICAgICAgICAgICAgICAgISgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUub2Jq
ZWN0LnR5cGUgPT09ICJMaXRlcmFsIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9m
IG5vZGUub2JqZWN0LnZhbHVlID09PSAibnVtYmVyIiAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgL15bMC05XSskLy50ZXN0KGNvbnRleHQuZ2V0Rmlyc3RUb2tlbihub2RlLm9iamVjdCkudmFs
dWUpCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAg
ICApIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5vYmplY3QpOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGRyeUNhbGxOZXcsCisgICAg
ICAgICJPYmplY3RFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgW10u
Zm9yRWFjaC5jYWxsKG5vZGUucHJvcGVydGllcywgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAg
ICAgIHZhciB2ID0gZS52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAodiAmJiBpc1BhcmVudGhl
c2lzZWQodikgJiYgcHJlY2VkZW5jZSh2KSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVu
dEV4cHJlc3Npb24ifSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0KHYpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorICAgICAgICAiUmV0dXJu
U3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1l
bnQgJiYgaXNQYXJlbnRoZXNpc2VkKG5vZGUuYXJndW1lbnQpKSB7CisgICAgICAgICAgICAgICAg
cmVwb3J0KG5vZGUuYXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAg
ICAiU2VxdWVuY2VFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgW10u
Zm9yRWFjaC5jYWxsKG5vZGUuZXhwcmVzc2lvbnMsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKGUpICYmIHByZWNlZGVuY2UoZSkgPj0gcHJlY2VkZW5j
ZShub2RlKSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQoZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgICJTd2l0Y2hDYXNlIjog
ZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUudGVzdCAmJiBpc1BhcmVudGhl
c2lzZWQobm9kZS50ZXN0KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiU3dpdGNoU3RhdGVtZW50IjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5vZGUu
ZGlzY3JpbWluYW50KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmRpc2NyaW1pbmFu
dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJUaHJvd1N0YXRlbWVudCI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5h
cmd1bWVudCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5hcmd1bWVudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBkcnlVbmFy
eVVwZGF0ZSwKKyAgICAgICAgIlVwZGF0ZUV4cHJlc3Npb24iOiBkcnlVbmFyeVVwZGF0ZSwKKyAg
ICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IGlmIChub2RlLmluaXQgJiYgaXNQYXJlbnRoZXNpc2VkKG5vZGUuaW5pdCkgJiYgcHJlY2VkZW5j
ZShub2RlLmluaXQpID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9
KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmluaXQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkgeworICAgICAg
ICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9LAor
ICAgICAgICAiV2l0aFN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlm
IChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLm9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBy
ZXBvcnQobm9kZS5vYmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwor
fTsKKworfSx7fV0sNjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgdW5uZWNlc3Nhcnkgc2VtaWNvbG9u
cworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21v
ZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOwor
CisgICAgcmV0dXJuIHsKKworICAgICAgICAiRW1wdHlTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2Rl
KSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5uZWNlc3Nhcnkgc2VtaWNv
bG9uLiIpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNjM6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxh
ZyB1bm5lY2Vzc2FyeSBzdHJpY3QgZGlyZWN0aXZlcy4KKyAqIEBhdXRob3IgSWFuIENocmlzdGlh
biBNeWVycworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgZnVuY3Rpb24gZGlyZWN0aXZlcyhibG9j
aykgeworICAgICAgICB2YXIgZHMgPSBbXSwgYm9keSA9IGJsb2NrLmJvZHksIGUsIGksIGw7CisK
KyAgICAgICAgZm9yIChpID0gMCwgbCA9IGJvZHkubGVuZ3RoOyBpIDwgbDsgKytpKSB7CisgICAg
ICAgICAgICBlID0gYm9keVtpXTsKKworICAgICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAg
IGUudHlwZSA9PT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiICYmCisgICAgICAgICAgICAgICAgZS5l
eHByZXNzaW9uLnR5cGUgPT09ICJMaXRlcmFsIiAmJgorICAgICAgICAgICAgICAgIHR5cGVvZiBl
LmV4cHJlc3Npb24udmFsdWUgPT09ICJzdHJpbmciCisgICAgICAgICAgICApIHsKKyAgICAgICAg
ICAgICAgICBkcy5wdXNoKGUuZXhwcmVzc2lvbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBkczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1N0cmljdChkaXJlY3RpdmUpIHsKKyAg
ICAgICAgcmV0dXJuIGRpcmVjdGl2ZS52YWx1ZSA9PT0gInVzZSBzdHJpY3QiOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGNoZWNrRm9yVW5uZWNlc3NhcnlVc2VTdHJpY3Qobm9kZSkgeworICAgICAg
ICB2YXIgdXNlU3RyaWN0RGlyZWN0aXZlcywgc2NvcGUsIHVwcGVyOworICAgICAgICB1c2VTdHJp
Y3REaXJlY3RpdmVzID0gZGlyZWN0aXZlcyhub2RlKS5maWx0ZXIoaXNTdHJpY3QpOworCisgICAg
ICAgIHN3aXRjaCAodXNlU3RyaWN0RGlyZWN0aXZlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGNh
c2UgMDoKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxOgorICAg
ICAgICAgICAgICAgIHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOworICAgICAgICAgICAgICAg
IHVwcGVyID0gc2NvcGUudXBwZXI7CisKKyAgICAgICAgICAgICAgICBpZiAodXBwZXIgJiYgdXBw
ZXIuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBwZXIg
PSB1cHBlci51cHBlcjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
dXBwZXIgJiYgdXBwZXIuaXNTdHJpY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQodXNlU3RyaWN0RGlyZWN0aXZlc1swXSwgIlVubmVjZXNzYXJ5ICd1c2Ugc3RyaWN0Jy4i
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQodXNlU3RyaWN0RGly
ZWN0aXZlc1sxXSwgIk11bHRpcGxlICd1c2Ugc3RyaWN0JyBkaXJlY3RpdmVzLiIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiUHJvZ3JhbSI6IGNoZWNrRm9y
VW5uZWNlc3NhcnlVc2VTdHJpY3QsCisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrRm9yVW5uZWNlc3NhcnlVc2VTdHJpY3Qo
bm9kZS5ib2R5KTsKKyAgICAgICAgfSwKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrRm9yVW5uZWNlc3NhcnlVc2VTdHJp
Y3Qobm9kZS5ib2R5KTsKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDY0OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxl
IHRvIGZsYWcgZmFsbC10aHJvdWdoIGNhc2VzIGluIHN3aXRjaCBzdGF0ZW1lbnRzLgorICogQGF1
dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL21hdHRkdXZhbGwuY29tLz4KKyAqLworInVzZSBzdHJp
Y3QiOworCisKK3ZhciBGQUxMVEhST1VHSF9DT01NRU5UID0gL2ZhbGxzXHN0aHJvdWdoLzsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICB2YXIgc3dpdGNoZXMgPSBbXTsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlN3aXRjaENh
c2UiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciBjb25zZXF1ZW50ID0gbm9k
ZS5jb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIHN3aXRjaERhdGEgPSBzd2l0Y2hlc1tzd2l0
Y2hlcy5sZW5ndGggLSAxXSwKKyAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgIGNv
bW1lbnRzLAorICAgICAgICAgICAgICAgIGNvbW1lbnQ7CisKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgKiBTb21lIGRldmVsb3BlcnMgd3JhcCBjYXNlIGJvZGllcyBpbiBibG9ja3MsIHNv
IGlmIHRoZXJlIGlzIGp1c3Qgb25lCisgICAgICAgICAgICAgKiBub2RlIGFuZCBpdCdzIGEgYmxv
Y2sgc3RhdGVtZW50LCBjaGVjayBpbnNpZGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IGlmIChjb25zZXF1ZW50Lmxlbmd0aCA9PT0gMSAmJiBjb25zZXF1ZW50WzBdLnR5cGUgPT09ICJC
bG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50ID0gY29uc2VxdWVu
dFswXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2hlY2tpbmcgb24gcHJldmlv
dXMgY2FzZQorICAgICAgICAgICAgaWYgKCFzd2l0Y2hEYXRhLmxhc3RDYXNlQ2xvc2VkKSB7CisK
KyAgICAgICAgICAgICAgICAvLyBhIGZhbGwgdGhyb3VnaCBjb21tZW50IHdpbGwgYmUgYSBsZWFk
aW5nIGNvbW1lbnQgb2YgdGhlIGZvbGxvd2luZyBjYXNlCisgICAgICAgICAgICAgICAgY29tbWVu
dHMgPSBjb250ZXh0LmdldENvbW1lbnRzKG5vZGUpLmxlYWRpbmc7CisgICAgICAgICAgICAgICAg
Y29tbWVudCA9IGNvbW1lbnRzW2NvbW1lbnRzLmxlbmd0aCAtIDFdOworCisgICAgICAgICAgICAg
ICAgLy8gY2hlY2sgZm9yIGNvbW1lbnQKKyAgICAgICAgICAgICAgICBpZiAoIWNvbW1lbnQgfHwg
IUZBTExUSFJPVUdIX0NPTU1FTlQudGVzdChjb21tZW50LnZhbHVlKSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChzd2l0Y2hEYXRhLmxhc3RDYXNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIkV4cGVjdGVkIGEgXCJicmVha1wiIHN0YXRlbWVudCBiZWZvcmUgXCJ7e2Nv
ZGV9fVwiLiIsCisgICAgICAgICAgICAgICAgICAgICAgICB7IGNvZGU6IG5vZGUudGVzdCA/ICJj
YXNlIiA6ICJkZWZhdWx0IiB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIG5vdyBkZWFsaW5nIHdpdGggdGhlIGN1cnJlbnQgY2FzZQorICAgICAg
ICAgICAgc3dpdGNoRGF0YS5sYXN0Q2FzZUNsb3NlZCA9IGZhbHNlOworICAgICAgICAgICAgc3dp
dGNoRGF0YS5sYXN0Q2FzZSA9IG5vZGU7CisKKyAgICAgICAgICAgIC8vIHRyeSB0byB2ZXJpZnkg
dXNpbmcgc3RhdGVtZW50cyAtIGdvIGJhY2t3YXJkcyBhcyBhIGZhc3QgcGF0aCBmb3IgdGhlIHNl
YXJjaAorICAgICAgICAgICAgaWYgKGNvbnNlcXVlbnQubGVuZ3RoKSB7CisgICAgICAgICAgICAg
ICAgZm9yIChpID0gY29uc2VxdWVudC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoLyg/OkJyZWFrfENvbnRpbnVlfFJldHVybnxUaHJvdylTdGF0ZW1l
bnQvLnRlc3QoY29uc2VxdWVudFtpXS50eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoRGF0YS5sYXN0Q2FzZUNsb3NlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gdGhlIGNhc2Ugc3RhdGVtZW50IGhh
cyBubyBzdGF0ZW1lbnRzLCBzbyBpdCBtdXN0IGxvZ2ljYWxseSBmYWxsIHRocm91Z2gKKyAgICAg
ICAgICAgICAgICBzd2l0Y2hEYXRhLmxhc3RDYXNlQ2xvc2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEFueSB3YXJuaW5ncyBhcmUgdHJp
Z2dlcmVkIHdoZW4gdGhlIG5leHQgU3dpdGNoQ2FzZSBvY2N1cnMuCisgICAgICAgICAgICAgKiBU
aGVyZSBpcyBubyBuZWVkIHRvIHdhcm4gb24gdGhlIGxhc3QgU3dpdGNoQ2FzZSwgc2luY2UgaXQg
Y2FuJ3QKKyAgICAgICAgICAgICAqIGZhbGwgdGhyb3VnaCB0byBhbnl0aGluZy4KKyAgICAgICAg
ICAgICAqLworICAgICAgICB9LAorCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgICAgICBzd2l0Y2hlcy5wdXNoKHsKKyAgICAgICAgICAgICAgICBu
b2RlOiBub2RlLAorICAgICAgICAgICAgICAgIGxhc3RDYXNlQ2xvc2VkOiB0cnVlLAorICAgICAg
ICAgICAgICAgIGxhc3RDYXNlOiBudWxsCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKwor
ICAgICAgICAiU3dpdGNoU3RhdGVtZW50OmV4aXQiOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHN3aXRjaGVzLnBvcCgpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNjU6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyB1c2Ugb2YgYSBsZWFkaW5nL3RyYWlsaW5nIGRlY2ltYWwgcG9pbnQgaW4gYSBu
dW1lcmljIGxpdGVyYWwKKyAqIEBhdXRob3IgSmFtZXMgQWxsYXJkaWNlCisgKi8KKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKworICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAibnVtYmVyIikg
eworICAgICAgICAgICAgICAgIGlmIChub2RlLnJhdy5pbmRleE9mKCIuIikgPT09IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkEgbGVhZGluZyBkZWNpbWFs
IHBvaW50IGNhbiBiZSBjb25mdXNlZCB3aXRoIGEgZG90LiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAobm9kZS5yYXcuaW5kZXhPZigiLiIpID09PSBub2RlLnJhdy5s
ZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJB
IHRyYWlsaW5nIGRlY2ltYWwgcG9pbnQgY2FuIGJlIGNvbmZ1c2VkIHdpdGggYSBkb3QuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sNjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgZnVuY3Rpb24gZGVjbGFyYXRpb24gaWRl
bnRpZmllcnMgYXMgdmFyaWFibGVzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisg
Ki8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8g
SGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qCisgICAgICogV2FsayB0
aGUgc2NvcGUgY2hhaW4gbG9va2luZyBmb3IgZWl0aGVyIGEgRnVuY3Rpb25EZWNsYXJhdGlvbiBv
ciBhCisgICAgICogVmFyaWFibGVEZWNsYXJhdGlvbiB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgbGVm
dC1oYW5kIHNpZGUgb2YgdGhlCisgICAgICogQXNzaWdubWVudEV4cHJlc3Npb24uIElmIHdlIGZp
bmQgdGhlIEZ1bmN0aW9uRGVjbGFyYXRpb24gZmlyc3QsIHRoZW4gd2UKKyAgICAgKiB3YXJuLCBi
ZWNhdXNlIGEgRnVuY3Rpb25EZWNsYXJhdGlvbiBpcyB0cnlpbmcgdG8gYmVjb21lIGEgVmFyaWFi
bGUgb3IgYQorICAgICAqIEZ1bmN0aW9uRXhwcmVzc2lvbi4gSWYgd2UgZmluZCBhIFZhcmlhYmxl
RGVjbGFyYXRpb24gZmlyc3QsIHRoZW4gd2UgaGF2ZQorICAgICAqIGEgbGVnaXRpbWF0ZSBzaGFk
b3cgdmFyaWFibGUuCisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tJZklkZW50aWZpZXJJc0Z1
bmN0aW9uKHNjb3BlLCBuYW1lKSB7CisgICAgICAgIHZhciB2YXJpYWJsZSwKKyAgICAgICAgICAg
IGRlZiwKKyAgICAgICAgICAgIGksCisgICAgICAgICAgICBqOworCisgICAgICAgIC8vIExvb3Ag
b3ZlciBhbGwgb2YgdGhlIGlkZW50aWZpZXJzIGF2YWlsYWJsZSBpbiBzY29wZS4KKyAgICAgICAg
Zm9yIChpID0gMDsgaSA8IHNjb3BlLnZhcmlhYmxlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgdmFyaWFibGUgPSBzY29wZS52YXJpYWJsZXNbaV07CisKKyAgICAgICAgICAgIC8vIEZvciBl
YWNoIGlkZW50aWZpZXIsIHNlZSBpZiBpdCB3YXMgZGVmaW5lZCBpbiBfdGhpc18gc2NvcGUuCisg
ICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdmFyaWFibGUuZGVmcy5sZW5ndGg7IGorKykgewor
ICAgICAgICAgICAgICAgIGRlZiA9IHZhcmlhYmxlLmRlZnNbal07CisKKyAgICAgICAgICAgICAg
ICAvLyBJZGVudGlmaWVyIGlzIGEgZnVuY3Rpb24gYW5kIHdhcyBkZWNsYXJlZCBpbiB0aGlzIHNj
b3BlCisgICAgICAgICAgICAgICAgaWYgKGRlZi5uYW1lLm5hbWUgPT09IG5hbWUgJiYgZGVmLnR5
cGUgPT09ICJGdW5jdGlvbk5hbWUiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElkZW50aWZpZXIgaXMg
YSB2YXJpYWJsZSBhbmQgd2FzIGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuIFRoaXMKKyAgICAgICAg
ICAgICAgICAvLyBpcyBhIGxlZ2l0aW1hdGUgc2hhZG93IHZhcmlhYmxlLgorICAgICAgICAgICAg
ICAgIGlmIChkZWYubmFtZS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBDaGVjayB0aGUgdXBwZXIgc2NvcGUuCisgICAgICAgIGlmIChzY29wZS51
cHBlcikgeworICAgICAgICAgICAgcmV0dXJuIGNoZWNrSWZJZGVudGlmaWVySXNGdW5jdGlvbihz
Y29wZS51cHBlciwgbmFtZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSd2ZSByZWFjaGVk
IHRoZSBnbG9iYWwgc2NvcGUgYW5kIGhhdmVuJ3QgZm91bmQgYW55dGhpbmcuCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVi
bGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAg
dmFyIHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpLAorICAgICAgICAgICAgICAgIG5hbWUgPSBu
b2RlLmxlZnQubmFtZTsKKworICAgICAgICAgICAgaWYgKGNoZWNrSWZJZGVudGlmaWVySXNGdW5j
dGlvbihzY29wZSwgbmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiJ3t7bmFtZX19JyBpcyBhIGZ1bmN0aW9uLiIsIHsgbmFtZTogbmFtZSB9KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw2NzpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIHVzZSBvZiBpbXBsaWVkIGV2YWwgdmlhIHNldFRpbWVvdXQgYW5kIHNldEludGVydmFsCisg
KiBAYXV0aG9yIEphbWVzIEFsbGFyZGljZQorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
cmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisg
ICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlLm5hbWU7CisKKyAgICAgICAgICAg
ICAgICBpZiAoY2FsbGVlID09PSAic2V0VGltZW91dCIgfHwgY2FsbGVlID09PSAic2V0SW50ZXJ2
YWwiKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhcmd1bWVudCA9IG5vZGUuYXJndW1lbnRz
WzBdOworICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnQgJiYgYXJndW1lbnQudHlwZSA9
PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBhcmd1bWVudC52YWx1ZSA9PT0gInN0cmluZyIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJJbXBsaWVkIGV2YWwu
IENvbnNpZGVyIHBhc3NpbmcgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgc3RyaW5nLiIpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNjg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBkZWNsYXJh
dGlvbnMgaW4gcHJvZ3JhbSBvciBmdW5jdGlvbiBib2R5IHJvb3QuCisgKiBAYXV0aG9yIEJyYW5k
b24gTWlsbHMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8qKgorICAgICAqIEZpbmQg
dGhlIG5lYXJlc3QgUHJvZ3JhbSBvciBGdW5jdGlvbiBhbmNlc3RvciBub2RlLgorICAgICAqIEBy
ZXR1cm5zIHtPYmplY3R9IEFuY2VzdG9yJ3MgdHlwZSBhbmQgZGlzdGFuY2UgZnJvbSBub2RlLgor
ICAgICAqLworICAgIGZ1bmN0aW9uIG5lYXJlc3RCb2R5KCkgeworICAgICAgICB2YXIgYW5jZXN0
b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwKKyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5j
ZXN0b3JzLnBvcCgpLAorICAgICAgICAgICAgZ2VuZXJhdGlvbiA9IDE7CisKKyAgICAgICAgd2hp
bGUgKGFuY2VzdG9yICYmIFsiUHJvZ3JhbSIsICJGdW5jdGlvbkRlY2xhcmF0aW9uIiwKKyAgICAg
ICAgICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIl0uaW5kZXhPZihhbmNlc3Rvci50eXBlKSA8
IDApIHsKKyAgICAgICAgICAgIGdlbmVyYXRpb24gKz0gMTsKKyAgICAgICAgICAgIGFuY2VzdG9y
ID0gYW5jZXN0b3JzLnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIC8vIFR5cGUgb2YgY29udGFpbmluZyBhbmNlc3RvcgorICAgICAgICAgICAgdHlwZTog
YW5jZXN0b3IudHlwZSwKKyAgICAgICAgICAgIC8vIFNlcGFyYXRpb24gYmV0d2VlbiBhbmNlc3Rv
ciBhbmQgbm9kZQorICAgICAgICAgICAgZGlzdGFuY2U6IGdlbmVyYXRpb24KKyAgICAgICAgfTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnN1cmUgdGhhdCBhIGdpdmVuIG5vZGUgaXMgYXQg
YSBwcm9ncmFtIG9yIGZ1bmN0aW9uIGJvZHkncyByb290LgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBEZWNsYXJhdGlvbiBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lk
fQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKKyAgICAgICAgdmFyIGJvZHkg
PSBuZWFyZXN0Qm9keShub2RlKSwKKyAgICAgICAgICAgIHZhbGlkID0gKChib2R5LnR5cGUgPT09
ICJQcm9ncmFtIiAmJiBib2R5LmRpc3RhbmNlID09PSAxKSB8fAorICAgICAgICAgICAgICAgIGJv
ZHkuZGlzdGFuY2UgPT09IDIpOworCisgICAgICAgIGlmICghdmFsaWQpIHsKKyAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJNb3ZlIHt7dHlwZX19IGRlY2xhcmF0aW9uIHRvIHt7Ym9k
eX19IHJvb3QuIiwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6
IChub2RlLnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIiA/CisgICAgICAgICAgICAgICAg
ICAgICAgICAiZnVuY3Rpb24iIDogInZhcmlhYmxlIiksCisgICAgICAgICAgICAgICAgICAgIGJv
ZHk6IChib2R5LnR5cGUgPT09ICJQcm9ncmFtIiA/CisgICAgICAgICAgICAgICAgICAgICAgICAi
cHJvZ3JhbSIgOiAiZnVuY3Rpb24gYm9keSIpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0
aW9uRGVjbGFyYXRpb24iOiBjaGVjaywKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoY29udGV4dC5vcHRpb25zWzBdID09PSAi
Ym90aCIpIHsKKyAgICAgICAgICAgICAgICBjaGVjayhub2RlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sNjk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFZhbGlkYXRlIHN0cmluZ3MgcGFz
c2VkIHRvIHRoZSBSZWdFeHAgY29uc3RydWN0b3IKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJh
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBpc1N0cmluZyhub2RlKSB7CisgICAg
ICAgIHJldHVybiBub2RlICYmIG5vZGUudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2Rl
LnZhbHVlID09PSAic3RyaW5nIjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7
CisgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5j
YWxsZWUubmFtZSA9PT0gIlJlZ0V4cCIgJiYgaXNTdHJpbmcobm9kZS5hcmd1bWVudHNbMF0pKSB7
CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhub2RlLmFy
Z3VtZW50c1sxXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCBuZXcgUmVnRXhwKG5vZGUu
YXJndW1lbnRzWzBdLnZhbHVlLCBub2RlLmFyZ3VtZW50c1sxXS52YWx1ZSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCBuZXcgUmVnRXhwKG5vZGUu
YXJndW1lbnRzWzBdLnZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNh
dGNoKGUpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBlLm1lc3NhZ2Up
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAg
ICAgIkNhbGxFeHByZXNzaW9uIjogY2hlY2ssCisgICAgICAgICJOZXdFeHByZXNzaW9uIjogY2hl
Y2sKKyAgICB9OworCit9OworCit9LHt9XSw3MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzYWdlIG9mIF9faXRl
cmF0b3JfXyBwcm9wZXJ0eQorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5wcm9wZXJ0eSAm
JgorICAgICAgICAgICAgICAgICAgICAobm9kZS5wcm9wZXJ0eS50eXBlID09PSAiSWRlbnRpZmll
ciIgJiYgbm9kZS5wcm9wZXJ0eS5uYW1lID09PSAiX19pdGVyYXRvcl9fIiAmJiAhbm9kZS5jb21w
dXRlZCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKG5vZGUucHJvcGVydHkudHlwZSA9PT0gIkxp
dGVyYWwiICYmIG5vZGUucHJvcGVydHkudmFsdWUgPT09ICJfX2l0ZXJhdG9yX18iKSkgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZXNlcnZlZCBuYW1lICdfX2l0ZXJh
dG9yX18nLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sNzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBsYWJlbHMgdGhhdCBhcmUgdGhlIHNhbWUgYXMgYW4gaWRlbnRp
ZmllcgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworICAgIGZ1bmN0aW9uIGZpbmRJZGVudGlmaWVyKHNjb3BlLCBpZGVu
dGlmaWVyKSB7CisgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOworCisgICAgICAgIHNjb3BlLnZh
cmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlhYmxlKSB7CisgICAgICAgICAgICBpZiAodmFy
aWFibGUubmFtZSA9PT0gaWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgc2NvcGUucmVmZXJlbmNl
cy5mb3JFYWNoKGZ1bmN0aW9uKHJlZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKHJlZmVyZW5j
ZS5pZGVudGlmaWVyLm5hbWUgPT09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIC8vIElmIHdl
IGhhdmUgbm90IGZvdW5kIHRoZSBpZGVudGlmaWVyIGluIHRoaXMgc2NvcGUsIGNoZWNrIHRoZSBw
YXJlbnQKKyAgICAgICAgLy8gc2NvcGUuCisgICAgICAgIGlmIChzY29wZS51cHBlciAmJiAhZm91
bmQpIHsKKyAgICAgICAgICAgIHJldHVybiBmaW5kSWRlbnRpZmllcihzY29wZS51cHBlciwgaWRl
bnRpZmllcik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJMYWJlbGVkU3RhdGVtZW50Ijog
ZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAvLyBGZXRjaCB0aGUgaW5uZXJtb3N0IHNj
b3BlLgorICAgICAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOworCisgICAg
ICAgICAgICAvLyBSZWN1cnNpdmVseSBmaW5kIHRoZSBpZGVudGlmaWVyIHdhbGtpbmcgdXAgdGhl
IHNjb3BlLCBzdGFydGluZworICAgICAgICAgICAgLy8gd2l0aCB0aGUgaW5uZXJtb3N0IHNjb3Bl
LgorICAgICAgICAgICAgaWYgKGZpbmRJZGVudGlmaWVyKHNjb3BlLCBub2RlLmxhYmVsLm5hbWUp
KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkZvdW5kIGlkZW50aWZp
ZXIgd2l0aCBzYW1lIG5hbWUgYXMgbGFiZWwuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgIH07CisKK307CisKK30se31dLDcyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBMYWJlbGVkIFN0YXRlbWVudHMK
KyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMYWJlbGVkU3RhdGVtZW50IjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgbGFi
ZWxlZCBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0sCisKKyAgICAgICAgIkJyZWFrU3RhdGVtZW50
IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5sYWJlbCkgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGxhYmVsIGluIGJy
ZWFrIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9LAorCisgICAgICAg
ICJDb250aW51ZVN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYg
KG5vZGUubGFiZWwpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5l
eHBlY3RlZCBsYWJlbCBpbiBjb250aW51ZSBzdGF0ZW1lbnQuIik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgfQorCisKKyAgICB9OworCit9OworCit9LHt9XSw3MzpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJs
b2NrcyB3aXRoIG5vIHJlYXNvbiB0byBleGlzdAorICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisg
Ki8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiQmxvY2tTdGF0
ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGFueSBv
Y2N1cnJlbmNlIG9mIEJsb2NrU3RhdGVtZW50ID4gQmxvY2tTdGF0ZW1lbnQgb3IKKyAgICAgICAg
ICAgIC8vIFByb2dyYW0gPiBCbG9ja1N0YXRlbWVudAorICAgICAgICAgICAgdmFyIHBhcmVudCA9
IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisgICAgICAgICAgICBpZiAocGFyZW50LnR5
cGUgPT09ICJCbG9ja1N0YXRlbWVudCIgfHwgcGFyZW50LnR5cGUgPT09ICJQcm9ncmFtIikgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJCbG9jayBpcyBuZXN0ZWQgaW5z
aWRlIGFub3RoZXIgYmxvY2suIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSw3NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyBpZiBhcyB0aGUgb25seSBzdGF0bWVu
ZXQgaW4gYW4gZWxzZSBibG9jaworICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8KKyJ1c2Ug
c3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7CisKKyAgICByZXR1cm4geworICAgICAgICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMo
KSwKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBhbmNlc3RvcnMucG9wKCksCisgICAgICAgICAg
ICAgICAgZ3JhbmRwYXJlbnQgPSBhbmNlc3RvcnMucG9wKCk7CisKKyAgICAgICAgICAgIGlmIChw
YXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIgJiYKKyAgICAgICAgICAg
ICAgICAgICAgcGFyZW50LmJvZHkubGVuZ3RoID09PSAxICYmIGdyYW5kcGFyZW50ICYmCisgICAg
ICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50LnR5cGUgPT09ICJJZlN0YXRlbWVudCIgJiYKKyAg
ICAgICAgICAgICAgICAgICAgcGFyZW50ID09PSBncmFuZHBhcmVudC5hbHRlcm5hdGUpIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBpZiBhcyB0aGUg
b25seSBzdGF0ZW1lbnQgaW4gYW4gZWxzZSBibG9jay4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisKK307CisKK30se31dLDc1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgY3JlYXRpb24gb2Yg
ZnVuY3Rpb24gaW5zaWRlIGEgbG9vcAorICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yTG9vcHMobm9kZSkgeworICAg
ICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKTsKKworICAgICAgICBp
ZiAoYW5jZXN0b3JzLnNvbWUoZnVuY3Rpb24oYW5jZXN0b3IpIHsKKyAgICAgICAgICAgIHJldHVy
biBhbmNlc3Rvci50eXBlID09PSAiRm9yU3RhdGVtZW50IiB8fCBhbmNlc3Rvci50eXBlID09PSAi
V2hpbGVTdGF0ZW1lbnQiIHx8IGFuY2VzdG9yLnR5cGUgPT09ICJEb1doaWxlU3RhdGVtZW50IjsK
KyAgICAgICAgfSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEb24ndCBt
YWtlIGZ1bmN0aW9ucyB3aXRoaW4gYSBsb29wIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4geworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogY2hlY2tGb3JMb29wcywKKyAg
ICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBjaGVja0Zvckxvb3BzCisgICAgfTsKK307CisK
K30se31dLDc2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgZ3JvdXBlZCByZXF1aXJlIHN0YXRlbWVudHMgZm9y
IE5vZGUuSlMKKyAqIEBhdXRob3IgUmFwaGFlbCBQaWd1bGxhCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBidWlsdC1pbiBtb2R1bGVz
LgorICAgICAqCisgICAgICogQHJldHVybnMge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBidWlsdC1p
biBOb2RlLmpzIG1vZHVsZXMuCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0QnVpbHRpbk1vZHVs
ZXMoKSB7CisgICAgICAgIC8vIFRoaXMgbGlzdCBpcyBnZW5lcmF0ZWQgdXNpbmcgYHJlcXVpcmUo
InJlcGwiKS5fYnVpbHRpbkxpYnMuY29uY2F0KCdyZXBsJykuc29ydCgpYAorICAgICAgICAvLyBU
aGlzIHBhcnRpY3VsYXIgbGlzdCB3YXMgZ2VuZXJhdGVkIHVzaW5nIG5vZGUgdjAuMTEuOQorICAg
ICAgICByZXR1cm4gWworICAgICAgICAgICAgImFzc2VydCIsICJidWZmZXIiLCAiY2hpbGRfcHJv
Y2VzcyIsICJjbHVzdGVyIiwgImNyeXB0byIsCisgICAgICAgICAgICAiZGdyYW0iLCAiZG5zIiwg
ImRvbWFpbiIsICJldmVudHMiLCAiZnMiLCAiaHR0cCIsICJodHRwcyIsCisgICAgICAgICAgICAi
bmV0IiwgIm9zIiwgInBhdGgiLCAicHVueWNvZGUiLCAicXVlcnlzdHJpbmciLCAicmVhZGxpbmUi
LAorICAgICAgICAgICAgInJlcGwiLCAic21hbGxvYyIsICJzdHJlYW0iLCAic3RyaW5nX2RlY29k
ZXIiLCAidGxzIiwgInR0eSIsCisgICAgICAgICAgICAidXJsIiwgInV0aWwiLCAidm0iLCAiemxp
YiIKKyAgICAgICAgXTsKKyAgICB9CisKKyAgICB2YXIgQlVJTFRJTl9NT0RVTEVTID0gZ2V0QnVp
bHRpbk1vZHVsZXMoKTsKKworICAgIHZhciBERUNMX1JFUVVJUkUgPSAicmVxdWlyZSIsCisgICAg
ICAgIERFQ0xfVU5JTklUSUFMSVpFRCA9ICJ1bmluaXRpYWxpemVkIiwKKyAgICAgICAgREVDTF9P
VEhFUiA9ICJvdGhlciI7CisKKyAgICB2YXIgUkVRX0NPUkUgPSAiY29yZSIsCisgICAgICAgIFJF
UV9GSUxFID0gImZpbGUiLAorICAgICAgICBSRVFfTU9EVUxFID0gIm1vZHVsZSIsCisgICAgICAg
IFJFUV9DT01QVVRFRCA9ICJjb21wdXRlZCI7CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVz
IHRoZSB0eXBlIG9mIGEgZGVjbGFyYXRpb24gc3RhdGVtZW50LgorICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gaW5pdEV4cHJlc3Npb24gVGhlIGluaXQgbm9kZSBvZiB0aGUgVmFyaWFibGVEZWNsYXJh
dG9yLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSB0eXBlIG9mIGRlY2xhcmF0aW9uIHJl
cHJlc2VudGVkIGJ5IHRoZSBleHByZXNzaW9uLgorICAgICAqLworICAgIGZ1bmN0aW9uIGdldERl
Y2xhcmF0aW9uVHlwZShpbml0RXhwcmVzc2lvbikgeworICAgICAgICBpZiAoIWluaXRFeHByZXNz
aW9uKSB7CisgICAgICAgICAgICAvLyAidmFyIHg7IgorICAgICAgICAgICAgcmV0dXJuIERFQ0xf
VU5JTklUSUFMSVpFRDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbml0RXhwcmVzc2lvbi50
eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iICYmCisgICAgICAgICAgICBpbml0RXhwcmVzc2lvbi5j
YWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCisgICAgICAgICAgICBpbml0RXhwcmVzc2lv
bi5jYWxsZWUubmFtZSA9PT0gInJlcXVpcmUiCisgICAgICAgICkgeworICAgICAgICAgICAgLy8g
InZhciB4ID0gcmVxdWlyZSgndXRpbCcpOyIKKyAgICAgICAgICAgIHJldHVybiBERUNMX1JFUVVJ
UkU7CisgICAgICAgIH0gZWxzZSBpZiAoaW5pdEV4cHJlc3Npb24udHlwZSA9PT0gIk1lbWJlckV4
cHJlc3Npb24iKSB7CisgICAgICAgICAgICAvLyAidmFyIHggPSByZXF1aXJlKCdnbG9iJykuR2xv
YjsiCisgICAgICAgICAgICByZXR1cm4gZ2V0RGVjbGFyYXRpb25UeXBlKGluaXRFeHByZXNzaW9u
Lm9iamVjdCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAidmFyIHggPSA0MjsiCisgICAgICAg
IHJldHVybiBERUNMX09USEVSOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMg
dGhlIHR5cGUgb2YgbW9kdWxlIHRoYXQgaXMgbG9hZGVkIHZpYSByZXF1aXJlLgorICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gaW5pdEV4cHJlc3Npb24gVGhlIGluaXQgbm9kZSBvZiB0aGUgVmFyaWFi
bGVEZWNsYXJhdG9yLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBtb2R1bGUgdHlwZS4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBpbmZlck1vZHVsZVR5cGUoaW5pdEV4cHJlc3Npb24pIHsK
KyAgICAgICAgaWYgKGluaXRFeHByZXNzaW9uLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikg
eworICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSgnZ2xvYicpLkdsb2I7IgorICAgICAg
ICAgICAgcmV0dXJuIGluZmVyTW9kdWxlVHlwZShpbml0RXhwcmVzc2lvbi5vYmplY3QpOworICAg
ICAgICB9IGVsc2UgaWYgKGluaXRFeHByZXNzaW9uWyJhcmd1bWVudHMiXS5sZW5ndGggPT09IDAp
IHsKKyAgICAgICAgICAgIC8vICJ2YXIgeCA9IHJlcXVpcmUoKTsiCisgICAgICAgICAgICByZXR1
cm4gUkVRX0NPTVBVVEVEOworICAgICAgICB9CisKKyAgICAgICAgdmFyIGFyZyA9IGluaXRFeHBy
ZXNzaW9uWyJhcmd1bWVudHMiXVswXTsKKworICAgICAgICBpZiAoYXJnLnR5cGUgIT09ICJMaXRl
cmFsIiB8fCB0eXBlb2YgYXJnLnZhbHVlICE9PSAic3RyaW5nIikgeworICAgICAgICAgICAgLy8g
InZhciB4ID0gcmVxdWlyZSg0Mik7IgorICAgICAgICAgICAgcmV0dXJuIFJFUV9DT01QVVRFRDsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChCVUlMVElOX01PRFVMRVMuaW5kZXhPZihhcmcudmFs
dWUpICE9PSAtMSkgeworICAgICAgICAgICAgLy8gInZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7Igor
ICAgICAgICAgICAgcmV0dXJuIFJFUV9DT1JFOworICAgICAgICB9IGVsc2UgaWYgKC9eXC57MCwy
fVwvLy50ZXN0KGFyZy52YWx1ZSkpIHsKKyAgICAgICAgICAgIC8vICJ2YXIgdXRpbHMgPSByZXF1
aXJlKCcuL3V0aWxzJyk7IgorICAgICAgICAgICAgcmV0dXJuIFJFUV9GSUxFOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gInZhciBhc3luYyA9IHJlcXVpcmUoJ2FzeW5jJyk7Igor
ICAgICAgICAgICAgcmV0dXJuIFJFUV9NT0RVTEU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBDaGVjayBpZiB0aGUgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaXMg
bWl4ZWQsIGkuZS4gd2hldGhlciBpdAorICAgICAqIGNvbnRhaW5zIGJvdGggcmVxdWlyZSBhbmQg
b3RoZXIgZGVjbGFyYXRpb25zLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZGVjbGFyYXRpb25z
IFRoZSBsaXN0IG9mIFZhcmlhYmxlRGVjbGFyYXRvcnMuCisgICAgICogQHJldHVybnMge2Jvb2xl
YW59IFRydWUgaWYgdGhlIGRlY2xhcmF0aW9ucyBhcmUgbWl4ZWQsIGZhbHNlIGlmIG5vdC4KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBpc01peGVkKGRlY2xhcmF0aW9ucykgeworICAgICAgICB2YXIg
Y29udGFpbnMgPSB7fTsKKworICAgICAgICBkZWNsYXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAo
ZGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gZ2V0RGVjbGFyYXRpb25UeXBl
KGRlY2xhcmF0aW9uLmluaXQpOworICAgICAgICAgICAgY29udGFpbnNbdHlwZV0gPSB0cnVlOwor
ICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gISEoCisgICAgICAgICAgICBjb250YWluc1tE
RUNMX1JFUVVJUkVdICYmCisgICAgICAgICAgICAoY29udGFpbnNbREVDTF9VTklOSVRJQUxJWkVE
XSB8fCBjb250YWluc1tERUNMX09USEVSXSkKKyAgICAgICAgKTsKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDaGVjayBpZiBhbGwgcmVxdWlyZSBkZWNsYXJhdGlvbnMgaW4gdGhlIGdpdmVuIGxp
c3QgYXJlIG9mIHRoZSBzYW1lCisgICAgICogdHlwZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9
IGRlY2xhcmF0aW9ucyBUaGUgbGlzdCBvZiBWYXJpYWJsZURlY2xhcmF0b3JzLgorICAgICAqIEBy
ZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBkZWNsYXJhdGlvbnMgYXJlIGdyb3VwZWQsIGZh
bHNlIGlmIG5vdC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0dyb3VwZWQoZGVjbGFyYXRpb25z
KSB7CisgICAgICAgIHZhciBmb3VuZCA9IHt9OworCisgICAgICAgIGRlY2xhcmF0aW9ucy5mb3JF
YWNoKGZ1bmN0aW9uIChkZWNsYXJhdGlvbikgeworICAgICAgICAgICAgaWYgKGdldERlY2xhcmF0
aW9uVHlwZShkZWNsYXJhdGlvbi5pbml0KSA9PT0gREVDTF9SRVFVSVJFKSB7CisgICAgICAgICAg
ICAgICAgZm91bmRbaW5mZXJNb2R1bGVUeXBlKGRlY2xhcmF0aW9uLmluaXQpXSA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhm
b3VuZCkubGVuZ3RoIDw9IDE7CisgICAgfQorCisKKyAgICByZXR1cm4geworCisgICAgICAgICJW
YXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGdy
b3VwaW5nID0gISFjb250ZXh0Lm9wdGlvbnNbMF07CisKKyAgICAgICAgICAgIGlmIChpc01peGVk
KG5vZGUuZGVjbGFyYXRpb25zKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KAor
ICAgICAgICAgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAiRG8gbm90IG1p
eCAncmVxdWlyZScgYW5kIG90aGVyIGRlY2xhcmF0aW9ucy4iCisgICAgICAgICAgICAgICAgKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoZ3JvdXBpbmcgJiYgIWlzR3JvdXBlZChub2RlLmRlY2xh
cmF0aW9ucykpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCgKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgIkRvIG5vdCBtaXggY29yZSwgbW9k
dWxlLCBmaWxlIGFuZCBjb21wdXRlZCByZXF1aXJlcy4iCisgICAgICAgICAgICAgICAgKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDc3OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxv
dyBtaXhlZCBzcGFjZXMgYW5kIHRhYnMgZm9yIGluZGVudGF0aW9uCisgKiBAYXV0aG9yIEphcnkg
TmllYnVyCisgKiBAY29weXJpZ2h0IDIwMTQgTmljaG9sYXMgQy4gWmFrYXMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBAY29weXJpZ2h0IDIwMTQgSmFyeSBOaWVidXIuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgc21hcnRUYWJzID0gY29udGV4dC5v
cHRpb25zWzBdOworCisgICAgdmFyIENPTU1FTlRfU1RBUlQgPSAvXlxzKlwvXCovLAorICAgICAg
ICBNQVlCRV9DT01NRU5UID0gL15ccypcKi87CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKwor
ICAgICAgICAiUHJvZ3JhbSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgKiBBdCBsZWFzdCBvbmUgc3BhY2UgZm9sbG93ZWQgYnkgYSB0YWIKKyAgICAgICAg
ICAgICAqIG9yIHRoZSByZXZlcnNlIGJlZm9yZSBub24tdGFiLy1zcGFjZQorICAgICAgICAgICAg
ICogY2hhcmFjdGVycyBiZWdpbi4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdmFyIHJl
Z2V4ID0gL14oPz1bXHQgXSooXHQgfCBcdCkpLywKKyAgICAgICAgICAgICAgICBtYXRjaCwKKyAg
ICAgICAgICAgICAgICBsaW5lcyA9IGNvbnRleHQuZ2V0U291cmNlTGluZXMoKTsKKworICAgICAg
ICAgICAgaWYgKHNtYXJ0VGFicykgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg
ICAgICogQXQgbGVhc3Qgb25lIHNwYWNlIGZvbGxvd2VkIGJ5IGEgdGFiCisgICAgICAgICAgICAg
ICAgICogYmVmb3JlIG5vbi10YWIvLXNwYWNlIGNoYXJhY3RlcnMgYmVnaW4uCisgICAgICAgICAg
ICAgICAgICovCisgICAgICAgICAgICAgICAgcmVnZXggPSAvXig/PVtcdCBdKiBcdCkvOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUsIGkp
IHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHJlZ2V4LmV4ZWMobGluZSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAobWF0Y2gpIHsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIU1BWUJFX0NP
TU1FTlQudGVzdChsaW5lKSAmJiAhQ09NTUVOVF9TVEFSVC50ZXN0KGxpbmVzW2kgLSAxXSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIHsgbGluZTogaSAr
IDEsIGNvbHVtbjogbWF0Y2guaW5kZXggKyAxIH0sICJNaXhlZCBzcGFjZXMgYW5kIHRhYnMuIik7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw3ODpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHdoZW4gdXNpbmcgbXVsdGlsaW5lIHN0cmluZ3MKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisg
Ki8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBsaW5lQnJlYWsgPSAvXG4vOworICAg
ICAgICAgICAgaWYgKGxpbmVCcmVhay50ZXN0KG5vZGUucmF3KSkgeworICAgICAgICAgICAgICAg
IGNvbnRleHQucmVwb3J0KG5vZGUsICJNdWx0aWxpbmUgc3VwcG9ydCBpcyBsaW1pdGVkIHRvIGJy
b3dzZXJzIHN1cHBvcnRpbmcgRVM1IG9ubHkuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworCit9OworCit9LHt9XSw3OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gcmUtYXNzaWduaW5n
IG5hdGl2ZSBvYmplY3RzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBz
dHJpY3QiOworCisgICAgdmFyIG5hdGl2ZU9iamVjdHMgPSBbIkFycmF5IiwgIkJvb2xlYW4iLCAi
RGF0ZSIsICJkZWNvZGVVUkkiLAorICAgICAgICAgICAgICAgICAgICAgICAgImRlY29kZVVSSUNv
bXBvbmVudCIsICJlbmNvZGVVUkkiLCAiZW5jb2RlVVJJQ29tcG9uZW50IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICJFcnJvciIsICJldmFsIiwgIkV2YWxFcnJvciIsICJGdW5jdGlvbiIsICJp
c0Zpbml0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXNOYU4iLCAiSlNPTiIsICJNYXRo
IiwgIk51bWJlciIsICJPYmplY3QiLCAicGFyc2VJbnQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgInBhcnNlRmxvYXQiLCAiUmFuZ2VFcnJvciIsICJSZWZlcmVuY2VFcnJvciIsICJSZWdFeHAi
LAorICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyIsICJTeW50YXhFcnJvciIsICJUeXBl
RXJyb3IiLCAiVVJJRXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgIk1hcCIsICJOYU4i
LCAiU2V0IiwgIldlYWtNYXAiLCAiSW5maW5pdHkiLCAidW5kZWZpbmVkIl07CisKKyAgICByZXR1
cm4geworCisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIGlmIChuYXRpdmVPYmplY3RzLmluZGV4T2Yobm9kZS5sZWZ0Lm5hbWUpID49
IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBub2RlLmxlZnQubmFt
ZSArICIgaXMgYSByZWFkLW9ubHkgbmF0aXZlIG9iamVjdC4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSwKKworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgaWYgKG5hdGl2ZU9iamVjdHMuaW5kZXhPZihub2RlLmlkLm5hbWUpID49
IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkZWZpbml0aW9u
IG9mICd7e25hdGl2ZU9iamVjdH19Jy4iLCB7IG5hdGl2ZU9iamVjdDogbm9kZS5pZC5uYW1lIH0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODA6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEg
cnVsZSB0byBkaXNhbGxvdyBuZWdhdGVkIGxlZnQgb3BlcmFuZHMgb2YgdGhlIGBpbmAgb3BlcmF0
b3IKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICJpbiIgJiYgbm9kZS5sZWZ0
LnR5cGUgPT09ICJVbmFyeUV4cHJlc3Npb24iICYmIG5vZGUubGVmdC5vcGVyYXRvciA9PT0gIiEi
KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBgaW5gIGV4cHJl
c3Npb24ncyBsZWZ0IG9wZXJhbmQgaXMgbmVnYXRlZCIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBuZXN0ZWQgdGVybmFy
eSBleHByZXNzaW9ucworICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlLnR5
cGUgPT09ICJDb25kaXRpb25hbEV4cHJlc3Npb24iIHx8CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUuY29uc2VxdWVudC50eXBlID09PSAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIikgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJEbyBub3QgbmVzdCB0ZXJuYXJ5IGV4cHJl
c3Npb25zIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0s
ODI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5nIG5ldyBGdW5jdGlvbgorICogQGF1dGhvciBJbHlh
IFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS5jYWxsZWUubmFtZSA9PT0gIkZ1bmN0aW9uIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJUaGUgRnVuY3Rpb24gY29uc3RydWN0b3IgaXMgZXZhbC4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDgzOltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8g
ZGlzYWxsb3cgY2FsbHMgdG8gdGhlIE9iamVjdCBjb25zdHJ1Y3RvcgorICogQGF1dGhvciBNYXR0
IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbS8+CisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJOZXdFeHByZXNzaW9uIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgPT09ICJPYmplY3QiKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoZSBvYmplY3QgbGl0ZXJh
bCBub3RhdGlvbiB7fSBpcyBwcmVmZXJyYWJsZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDg0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGRpc2FsbG93IHVzZSBvZiBuZXcg
b3BlcmF0b3Igd2l0aCB0aGUgYHJlcXVpcmVgIGZ1bmN0aW9uCisgKiBAYXV0aG9yIFdpbCBNb29y
ZSBJSUkKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAg
Ik5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5j
YWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUuY2FsbGVlLm5hbWUgPT09ICJyZXF1
aXJlIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVk
IHVzZSBvZiBuZXcgd2l0aCByZXF1aXJlLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKworfTsKKworfSx7fV0sODU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHVzaW5nIGNvbnN0cnVj
dG9yIGZvciB3cmFwcGVyIG9iamVjdHMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJOZXdFeHByZXNzaW9u
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHdyYXBwZXJPYmplY3RzID0gWyJT
dHJpbmciLCAiTnVtYmVyIiwgIkJvb2xlYW4iLCAiTWF0aCIsICJKU09OIl07CisgICAgICAgICAg
ICBpZiAod3JhcHBlck9iamVjdHMuaW5kZXhPZihub2RlLmNhbGxlZS5uYW1lKSA+IC0xKSB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvIG5vdCB1c2Uge3tmbn19IGFz
IGEgY29uc3RydWN0b3IuIiwgeyBmbjogbm9kZS5jYWxsZWUubmFtZSB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDg2OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgc3Rh
dGVtZW50cyB3aXRoIGZ1bmN0aW9uIGludm9jYXRpb24gcHJlY2VkZWQgYnkKKyAqICJuZXciIGFu
ZCBub3QgcGFydCBvZiBhc3NpZ25tZW50CisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiRXhwcmVzc2lvblN0
YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKG5vZGUuZXhwcmVz
c2lvbi50eXBlID09PSAiTmV3RXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiRG8gbm90IHVzZSAnbmV3JyBmb3Igc2lkZSBlZmZlY3RzLiIpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODc6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB1c2Ugb2YgYW4gb2JqZWN0IHByb3BlcnR5IG9mIHRoZSBnbG9iYWwgb2JqZWN0IChNYXRo
IGFuZCBKU09OKSBhcyBhIGZ1bmN0aW9uCisgKiBAYXV0aG9yIEphbWVzIEFsbGFyZGljZQorICov
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlw
ZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBub2RlLmNh
bGxlZS5uYW1lOworICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAiTWF0aCIgfHwgbmFtZSA9
PT0gIkpTT04iKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICIn
e3tuYW1lfX0nIGlzIG5vdCBhIGZ1bmN0aW9uLiIsIHsgbmFtZTogbmFtZSB9KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9
XSw4ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIG9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMgaW4gc3RyaW5nIGxpdGVy
YWxzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlICE9PSAic3RyaW5nIikgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBtYXRj
aCA9IG5vZGUucmF3Lm1hdGNoKC9eKFteXFxdfFxcW14wLTddKSpcXChbMC03XSkvKSwKKyAgICAg
ICAgICAgICAgICBvY3RhbERpZ2l0OworCisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAg
ICAgICAgICAgICBvY3RhbERpZ2l0ID0gbWF0Y2hbMl07CisgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIkRvbid0IHVzZSBvY3RhbDogJ1xce3tvY3RhbERpZ2l0fX0nLiBVc2Ug
J1xcdS4uLi4nIGluc3RlYWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgb2N0YWxEaWdp
dDogb2N0YWxEaWdpdCB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKwor
fTsKKworfSx7fV0sODk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIGluaXRpYWxpemluZyBvY3RhbCBsaXRl
cmFsCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gIm51bWJlciIgJiYgL14wWzAtN10vLnRl
c3Qobm9kZS5yYXcpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk9j
dGFsIGxpdGVyYWxzIHNob3VsZCBub3QgYmUgdXNlZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisKK307CisKK30se31dLDkwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBzdHJpbmcgY29uY2F0ZW5h
dGlvbiB3aGVuIHVzaW5nIF9fZGlybmFtZSBhbmQgX19maWxlbmFtZQorICogQGF1dGhvciBOaWNo
b2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIE1BVENIRVIgPSAvXl9f
KD86ZGlyfGZpbGUpbmFtZSQvOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1
YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAg
IkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciBs
ZWZ0ID0gbm9kZS5sZWZ0LAorICAgICAgICAgICAgICAgIHJpZ2h0ID0gbm9kZS5yaWdodDsKKwor
ICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IgPT09ICIrIiAmJgorICAgICAgICAgICAgICAg
ICAgICAoKGxlZnQudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIE1BVENIRVIudGVzdChsZWZ0Lm5h
bWUpKSB8fAorICAgICAgICAgICAgICAgICAgICAocmlnaHQudHlwZSA9PT0gIklkZW50aWZpZXIi
ICYmIE1BVENIRVIudGVzdChyaWdodC5uYW1lKSkpCisgICAgICAgICAgICApIHsKKworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgcGF0aC5qb2luKCkgb3IgcGF0aC5y
ZXNvbHZlKCkgaW5zdGVhZCBvZiArIHRvIGNyZWF0ZSBwYXRocy4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sOTE6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ug
b2YgdW5hcnkgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb3BlcmF0b3JzLgorICogQGF1dGhvciBJ
YW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4g
eworCisgICAgICAgICJVcGRhdGVFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuYXJ5IG9wZXJhdG9yICciICsgbm9kZS5vcGVy
YXRvciArICInIHVzZWQuIik7CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDky
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBEaXNhbGxvdyB0aGUgdXNlIG9mIHByb2Nlc3MuZW52KCkKKyAqIEBhdXRob3IgVmlnbmVzaCBB
bmFuZAorICogQGNvcHlyaWdodCAyMDE0IFZpZ25lc2ggQW5hbmQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJF
eHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIG9iamVjdE5hbWUg
PSBub2RlLm9iamVjdC5uYW1lLAorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IG5vZGUu
cHJvcGVydHkubmFtZTsKKworICAgICAgICAgICAgaWYgKG9iamVjdE5hbWUgPT09ICJwcm9jZXNz
IiAmJiAhbm9kZS5jb21wdXRlZCAmJiBwcm9wZXJ0eU5hbWUgJiYgcHJvcGVydHlOYW1lID09PSAi
ZW52IikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVk
IHVzZSBvZiBwcm9jZXNzLmVudi4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAg
ICB9OworCit9OworCit9LHt9XSw5MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgdGhlIHVzZSBvZiBwcm9jZXNzLmV4aXQo
KQorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgdmFyIGNhbGxlZSA9IG5vZGUuY2FsbGVlOworCisgICAgICAg
ICAgICBpZiAoY2FsbGVlLnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiAmJiBjYWxsZWUub2Jq
ZWN0Lm5hbWUgPT09ICJwcm9jZXNzIiAmJgorICAgICAgICAgICAgICAgIGNhbGxlZS5wcm9wZXJ0
eS5uYW1lID09PSAiZXhpdCIKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJEb24ndCB1c2UgcHJvY2Vzcy5leGl0KCk7IHRocm93IGFuIGVycm9y
IGluc3RlYWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07CisKK307CisK
K30se31dLDk0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNhZ2Ugb2YgX19wcm90b19fIHByb3BlcnR5CisgKiBA
YXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJu
IHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAg
ICAgICAgICAgaWYgKG5vZGUucHJvcGVydHkgJiYKKyAgICAgICAgICAgICAgICAgICAgKG5vZGUu
cHJvcGVydHkudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUucHJvcGVydHkubmFtZSA9PT0g
Il9fcHJvdG9fXyIgJiYgIW5vZGUuY29tcHV0ZWQpIHx8CisgICAgICAgICAgICAgICAgICAgIChu
b2RlLnByb3BlcnR5LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLnByb3BlcnR5LnZhbHVlID09
PSAiX19wcm90b19fIikpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
VGhlICdfX3Byb3RvX18nIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw5NTpbZnVuY3Rpb24ocmVxdWlyZSxt
b2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4g
dGhlIHNhbWUgdmFyaWFibGUgaXMgZGVjbGFyZWQgbW9yZSB0aGVuIG9uY2UuCisgKiBAYXV0aG9y
IElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rpb24gZmlu
ZFZhcmlhYmxlcygpIHsKKyAgICAgICAgdmFyIHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOwor
CisgICAgICAgIHNjb3BlLnZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlhYmxlKSB7Cisg
ICAgICAgICAgICBpZiAodmFyaWFibGUuaWRlbnRpZmllcnMgJiYgdmFyaWFibGUuaWRlbnRpZmll
cnMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlLmlkZW50aWZpZXJzLnNv
cnQoZnVuY3Rpb24oYSwgYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5yYW5nZVsx
XSAtIGIucmFuZ2VbMV07CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMSwgbCA9IHZhcmlhYmxlLmlkZW50aWZpZXJzLmxlbmd0aDsgaSA8IGw7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh2YXJpYWJsZS5pZGVudGlm
aWVyc1tpXSwgInt7YX19IGlzIGFscmVhZHkgZGVmaW5lZCIsIHthOiB2YXJpYWJsZS5uYW1lfSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisK
KyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6IGZpbmRWYXJpYWJsZXMsCisgICAgICAg
ICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmaW5kVmFyaWFibGVzLAorICAgICAgICAiRnVuY3Rpb25E
ZWNsYXJhdGlvbiI6IGZpbmRWYXJpYWJsZXMKKyAgICB9OworfTsKKworfSx7fV0sOTY6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gY291bnQgbXVsdGlwbGUgc3BhY2VzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAqIEBhdXRo
b3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5jb20vPgorICovCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIHZhciB0b2tlbiA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMo
bm9kZSwgMSlbMF0sCisgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSB0b2tlbi50eXBlLAorICAg
ICAgICAgICAgICAgIG5vZGVWYWx1ZSA9IHRva2VuLnZhbHVlLAorICAgICAgICAgICAgICAgIG11
bHRpcGxlU3BhY2VzUmVnZXggPSAvKCB7Mix9KSs/LywKKyAgICAgICAgICAgICAgICByZWdleFJl
c3VsdHM7CisKKyAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gIlJlZ3VsYXJFeHByZXNzaW9u
IikgeworICAgICAgICAgICAgICAgIHJlZ2V4UmVzdWx0cyA9IG11bHRpcGxlU3BhY2VzUmVnZXgu
ZXhlYyhub2RlVmFsdWUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlZ2V4UmVzdWx0cyAhPT0g
bnVsbCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiU3BhY2Vz
IGFyZSBoYXJkIHRvIGNvdW50LiBVc2UgeyIgKyByZWdleFJlc3VsdHNbMF0ubGVuZ3RoICsgIn0u
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KworfTsKKworfSx7fV0sOTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxsb3cgcmVzZXJ2ZWQgd29yZHMgYmVpbmcg
dXNlZCBhcyBrZXlzCisgKiBAYXV0aG9yIEVtaWwgQmF5CisgKiBAY29weXJpZ2h0IDIwMTQgRW1p
bCBCYXkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICB2YXIgTUVTU0FHRSA9ICJSZXNlcnZlZCB3b3JkICd7e2tleX19JyB1c2VkIGFzIGtleS4iOwor
CisgICAgdmFyIHJlc2VydmVkV29yZHMgPSBbCisgICAgICAgICJhYnN0cmFjdCIsCisgICAgICAg
ICJib29sZWFuIiwgImJyZWFrIiwgImJ5dGUiLAorICAgICAgICAiY2FzZSIsICJjYXRjaCIsICJj
aGFyIiwgImNsYXNzIiwgImNvbnN0IiwgImNvbnRpbnVlIiwKKyAgICAgICAgImRlYnVnZ2VyIiwg
ImRlZmF1bHQiLCAiZGVsZXRlIiwgImRvIiwgImRvdWJsZSIsCisgICAgICAgICJlbHNlIiwgImVu
dW0iLCAiZXhwb3J0IiwgImV4dGVuZHMiLAorICAgICAgICAiZmluYWwiLCAiZmluYWxseSIsICJm
bG9hdCIsICJmb3IiLCAiZnVuY3Rpb24iLAorICAgICAgICAiZ290byIsCisgICAgICAgICJpZiIs
ICJpbXBsZW1lbnRzIiwgImltcG9ydCIsICJpbiIsICJpbnN0YW5jZW9mIiwgImludCIsICJpbnRl
cmZhY2UiLAorICAgICAgICAibG9uZyIsCisgICAgICAgICJuYXRpdmUiLCAibmV3IiwKKyAgICAg
ICAgInBhY2thZ2UiLCAicHJpdmF0ZSIsICJwcm90ZWN0ZWQiLCAicHVibGljIiwKKyAgICAgICAg
InJldHVybiIsCisgICAgICAgICJzaG9ydCIsICJzdGF0aWMiLCAic3VwZXIiLCAic3dpdGNoIiwg
InN5bmNocm9uaXplZCIsCisgICAgICAgICJ0aGlzIiwgInRocm93IiwgInRocm93cyIsICJ0cmFu
c2llbnQiLCAidHJ5IiwgInR5cGVvZiIsCisgICAgICAgICJ2YXIiLCAidm9pZCIsICJ2b2xhdGls
ZSIsCisgICAgICAgICJ3aGlsZSIsICJ3aXRoIgorICAgIF07CisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAg
bm9kZS5wcm9wZXJ0aWVzLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpIHsKKworICAgICAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eS5rZXkudHlwZSA9PT0gIklkZW50aWZpZXIiKSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciBrZXlOYW1lID0gcHJvcGVydHkua2V5Lm5hbWU7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc2VydmVkV29yZHMuaW5kZXhPZigiIiArIGtleU5hbWUpICE9PSAt
MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgTUVTU0FH
RSwgeyBrZXk6IGtleU5hbWUgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSw5ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgUmVzdHJpY3QgdXNhZ2Ugb2Ygc3BlY2lmaWVkIG5vZGUgbW9kdWxlcy4KKyAqIEBh
dXRob3IgQ2hyaXN0aWFuIFNjaHVsegorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHsKKyAgICAvLyB0cmltIHJl
c3RyaWN0ZWQgbW9kdWxlIG5hbWVzCisgICAgdmFyIHJlc3RyaWN0ZWRNb2R1bGVzID0gY29udGV4
dC5vcHRpb25zOworCisgICAgLy8gaWYgbm8gbW9kdWxlcyBhcmUgcmVzdHJpY3RlZCB3ZSBkb24n
dCBuZWVkIHRvIGNoZWNrIHRoZSBDYWxsRXhwcmVzc2lvbnMKKyAgICBpZiAocmVzdHJpY3RlZE1v
ZHVsZXMubGVuZ3RoID09PSAwKSB7CisgICAgICAgIHJldHVybiB7fTsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBGdW5jdGlvbiB0byBjaGVjayBpZiBhIG5vZGUgaXMgYSBzdHJpbmcgbGl0ZXJh
bC4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCisgICAg
ICogQHJldHVybnMge2Jvb2xlYW59IElmIHRoZSBub2RlIGlzIGEgc3RyaW5nIGxpdGVyYWwuCisg
ICAgICovCisgICAgZnVuY3Rpb24gaXNTdHJpbmcobm9kZSkgeworICAgICAgICByZXR1cm4gbm9k
ZSAmJiBub2RlLnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gInN0
cmluZyI7CisgICAgfQorCisgICAgLyoqCisgICAgICogRnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBu
b2RlIGlzIGEgcmVxdWlyZSBjYWxsLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUg
bm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gSWYgdGhlIG5vZGUgaXMg
YSByZXF1aXJlIGNhbGwuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNSZXF1aXJlQ2FsbChub2Rl
KSB7CisgICAgICAgIHJldHVybiBub2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYg
bm9kZS5jYWxsZWUubmFtZSA9PT0gInJlcXVpcmUiOworICAgIH0KKworICAgIC8qKgorICAgICAq
IEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgbm9kZSBoYXMgYW4gYXJndW1lbnQgdGhhdCBpcyBhbiBy
ZXN0cmljdGVkIG1vZHVsZSBhbmQgcmV0dXJuIGl0cyBuYW1lLgorICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjaworICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR8
U3RyaW5nfSByZXN0cmljdGVkIG1vZHVsZSBuYW1lIG9yIHVuZGVmaW5lZCBpZiBub2RlIGFyZ3Vt
ZW50IGlzbid0IHJlc3RyaWN0ZWQuCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0UmVzdHJpY3Rl
ZE1vZHVsZU5hbWUobm9kZSkgeworICAgICAgICB2YXIgbW9kdWxlTmFtZTsKKworICAgICAgICAv
LyBub2RlIGhhcyBhcmd1bWVudHMgYW5kIGZpcnN0IGFyZ3VtZW50IGlzIHN0cmluZworICAgICAg
ICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoICYmIGlzU3RyaW5nKG5vZGUuYXJndW1lbnRzWzBd
KSkgeworICAgICAgICAgICAgdmFyIGFyZ3VtZW50VmFsdWUgPSBub2RlLmFyZ3VtZW50c1swXS52
YWx1ZS50cmltKCk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFyZ3VtZW50IHZhbHVlIGlz
IGluIHJlc3RyaWN0ZWQgbW9kdWxlcyBhcnJheQorICAgICAgICAgICAgaWYgKHJlc3RyaWN0ZWRN
b2R1bGVzLmluZGV4T2YoYXJndW1lbnRWYWx1ZSkgIT09IC0xKSB7CisgICAgICAgICAgICAgICAg
bW9kdWxlTmFtZSA9IGFyZ3VtZW50VmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbW9kdWxlTmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAg
ICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgaWYgKGlz
UmVxdWlyZUNhbGwobm9kZSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdHJpY3RlZE1vZHVs
ZU5hbWUgPSBnZXRSZXN0cmljdGVkTW9kdWxlTmFtZShub2RlKTsKKworICAgICAgICAgICAgICAg
IGlmIChyZXN0cmljdGVkTW9kdWxlTmFtZSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiJ3t7bW9kdWxlTmFtZX19JyBtb2R1bGUgaXMgcmVzdHJpY3RlZCBmcm9t
IGJlaW5nIHVzZWQuIiwgeworICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogcmVz
dHJpY3RlZE1vZHVsZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK307CisKK30se31dLDk5Oltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgd2hlbiByZXR1cm4gc3RhdGVtZW50IGNvbnRhaW5zIGFzc2lnbm1lbnQKKyAq
IEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS5hcmd1bWVudCAmJiBub2RlLmFyZ3VtZW50LnR5cGUgPT09ICJBc3NpZ25tZW50
RXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmV0
dXJuIHN0YXRlbWVudCBzaG91bGQgbm90IGNvbnRhaW4gYXNzaWdubWVudC4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEwMDpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHdoZW4gdXNpbmcgamF2YXNjcmlwdDogdXJscworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAq
LworLypqc2hpbnQgc2NyaXB0dXJsOiB0cnVlICovCisvKmVzbGludCBuby1zY3JpcHQtdXJsOiAw
Ki8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBm
dW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciB2YWx1ZTsKKworICAgICAgICAgICAg
aWYgKG5vZGUudmFsdWUgJiYgdHlwZW9mKG5vZGUudmFsdWUpID09PSAic3RyaW5nIikgeworICAg
ICAgICAgICAgICAgIHZhbHVlID0gbm9kZS52YWx1ZS50b0xvd2VyQ2FzZSgpOworCisgICAgICAg
ICAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoImphdmFzY3JpcHQ6IikgPT09IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlNjcmlwdCBVUkwgaXMgYSBmb3Jt
IG9mIGV2YWwuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKworfTsKKworfSx7fV0sMTAxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgY29tcGFyaXNvbiB3aGVy
ZSBsZWZ0IHBhcnQgaXMgdGhlIHNhbWUgYXMgdGhlIHJpZ2h0CisgKiBwYXJ0LgorICogQGF1dGhv
ciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAg
dmFyIG9wZXJhdG9ycyA9IFsiPT09IiwgIj09IiwgIiE9PSIsIiE9IiwgIj4iLCAiPCIsICI+PSIs
ICI8PSJdOworICAgICAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKG5vZGUub3BlcmF0b3Ip
ID4gLTEgJiYKKyAgICAgICAgICAgICAgICAobm9kZS5sZWZ0LnR5cGUgPT09ICJJZGVudGlmaWVy
IiAmJiBub2RlLnJpZ2h0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBub2RlLmxlZnQubmFtZSA9
PT0gbm9kZS5yaWdodC5uYW1lIHx8CisgICAgICAgICAgICAgICAgbm9kZS5sZWZ0LnR5cGUgPT09
ICJMaXRlcmFsIiAmJiBub2RlLnJpZ2h0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLmxlZnQu
dmFsdWUgPT09IG5vZGUucmlnaHQudmFsdWUpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkNvbXBhcmluZyB0byBpdHNlbGYgaXMgcG90ZW50aWFsbHkgcG9pbnRsZXNz
LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTAy
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgdXNlIG9mIGNvbW1hIG9wZXJhdG9yCisgKiBAYXV0aG9yIEJyYW5kb24g
TWlsbHMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8qKgorICAgICAqIFBhcnRzIG9m
IHRoZSBncmFtbWFyIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGhhdmUgcGFyZW5zLgorICAgICAqLwor
ICAgIHZhciBwYXJlbnRoZXNpemVkID0geworICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6ICJ0
ZXN0IiwKKyAgICAgICAgIklmU3RhdGVtZW50IjogInRlc3QiLAorICAgICAgICAiU3dpdGNoU3Rh
dGVtZW50IjogImRpc2NyaW1pbmFudCIsCisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6ICJ0ZXN0
IiwKKyAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiAib2JqZWN0IgorCisgICAgICAgIC8vIE9taXR0
aW5nIENhbGxFeHByZXNzaW9uIC0gY29tbWFzIGFyZSBwYXJzZWQgYXMgYXJndW1lbnQgc2VwYXJh
dG9ycworICAgICAgICAvLyBPbWl0dGluZyBOZXdFeHByZXNzaW9uIC0gY29tbWFzIGFyZSBwYXJz
ZWQgYXMgYXJndW1lbnQgc2VwYXJhdG9ycworICAgICAgICAvLyBPbWl0dGluZyBGb3JJblN0YXRl
bWVudCAtIHBhcnRzIGFyZW4ndCBpbmRpdmlkdWFsbHkgcGFyZW50aGVzaXNlZAorICAgICAgICAv
LyBPbWl0dGluZyBGb3JTdGF0ZW1lbnQgLSBwYXJ0cyBhcmVuJ3QgaW5kaXZpZHVhbGx5IHBhcmVu
dGhlc2lzZWQKKyAgICB9OworCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEg
bm9kZSBpcyByZXF1aXJlZCBieSB0aGUgZ3JhbW1hciB0byBiZSB3cmFwcGVkIGluCisgICAgICog
cGFyZW5zLCBlLmcuIHRoZSB0ZXN0IG9mIGFuIGlmIHN0YXRlbWVudC4KKyAgICAgKiBAcGFyYW0g
e0FTVE5vZGV9IG5vZGUgLSBUaGUgQVNUIG5vZGUKKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
VHJ1ZSBpZiBwYXJlbnMgYXJvdW5kIG5vZGUgYmVsb25nIHRvIHBhcmVudCBub2RlLgorICAgICAq
LworICAgIGZ1bmN0aW9uIHJlcXVpcmVzRXh0cmFQYXJlbnMobm9kZSkgeworICAgICAgICByZXR1
cm4gbm9kZS5wYXJlbnQgJiYgcGFyZW50aGVzaXplZFtub2RlLnBhcmVudC50eXBlXSAhPSBudWxs
ICYmCisgICAgICAgICAgICAgICAgbm9kZSA9PT0gbm9kZS5wYXJlbnRbcGFyZW50aGVzaXplZFtu
b2RlLnBhcmVudC50eXBlXV07CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgYSBu
b2RlIGlzIHdyYXBwZWQgaW4gcGFyZW5zLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAt
IFRoZSBBU1Qgbm9kZQorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBub2Rl
IGhhcyBhIHBhcmVuIG9uIGVhY2ggc2lkZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1BhcmVu
dGhlc2lzZWQobm9kZSkgeworICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0
VG9rZW5CZWZvcmUobm9kZSksCisgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRv
a2VuQWZ0ZXIobm9kZSk7CisKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzVG9rZW4gJiYgbmV4dFRv
a2VuICYmCisgICAgICAgICAgICBwcmV2aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgcHJldmlv
dXNUb2tlbi5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdICYmCisgICAgICAgICAgICBuZXh0VG9r
ZW4udmFsdWUgPT09ICIpIiAmJiBuZXh0VG9rZW4ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgd3JhcHBlZCBpbiB0
d28gbGV2ZWxzIG9mIHBhcmVucy4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUg
QVNUIG5vZGUKKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0d28gcGFyZW5zIHN1
cnJvdW5kIHRoZSBub2RlIG9uIGVhY2ggc2lkZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1Bh
cmVudGhlc2lzZWRUd2ljZShub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29u
dGV4dC5nZXRUb2tlbkJlZm9yZShub2RlLCAxKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNv
bnRleHQuZ2V0VG9rZW5BZnRlcihub2RlLCAxKTsKKworICAgICAgICByZXR1cm4gaXNQYXJlbnRo
ZXNpc2VkKG5vZGUpICYmIHByZXZpb3VzVG9rZW4gJiYgbmV4dFRva2VuICYmCisgICAgICAgICAg
ICBwcmV2aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgcHJldmlvdXNUb2tlbi5yYW5nZVsxXSA8
PSBub2RlLnJhbmdlWzBdICYmCisgICAgICAgICAgICBuZXh0VG9rZW4udmFsdWUgPT09ICIpIiAm
JiBuZXh0VG9rZW4ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsKKyAgICB9CisKKyAgICByZXR1
cm4geworICAgICAgICAiU2VxdWVuY2VFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgLy8gQWx3YXlzIGFsbG93IHNlcXVlbmNlcyBpbiBmb3Igc3RhdGVtZW50IHVwZGF0
ZQorICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50LnR5cGUgPT09ICJGb3JTdGF0ZW1lbnQiICYm
CisgICAgICAgICAgICAgICAgICAgIChub2RlID09PSBub2RlLnBhcmVudC5pbml0IHx8IG5vZGUg
PT09IG5vZGUucGFyZW50LnVwZGF0ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdyYXBwaW5nIGEgc2VxdWVuY2UgaW4gZXh0cmEg
cGFyZW5zIGluZGljYXRlcyBpbnRlbnQKKyAgICAgICAgICAgIGlmIChyZXF1aXJlc0V4dHJhUGFy
ZW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZFR3aWNlKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhw
ZWN0ZWQgdXNlIG9mIGNvbW1hIG9wZXJhdG9yLiIpOworICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sMTAzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
QGZpbGVvdmVydmlldyBEaXNhbGxvdyBzaGFkb3dpbmcgb2YgTmFOLCB1bmRlZmluZWQsIGFuZCBJ
bmZpbml0eSAoRVM1IHNlY3Rpb24gMTUuMS4xKQorICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEK
KyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBSRVNUUklDVEVEID0gWyJ1bmRlZmluZWQiLCAi
TmFOIiwgIkluZmluaXR5IiwgImFyZ3VtZW50cyIsICJldmFsIl07CisKKyAgICBmdW5jdGlvbiBj
aGVja0ZvclZpb2xhdGlvbihpZCkgeworICAgICAgICBpZiAoUkVTVFJJQ1RFRC5pbmRleE9mKGlk
Lm5hbWUpID4gLTEpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGlkLCAiU2hhZG93aW5n
IG9mIGdsb2JhbCBwcm9wZXJ0eSBcIiIgKyBpZC5uYW1lICsgIlwiLiIpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrRm9yVmlvbGF0aW9uKG5vZGUuaWQpOworICAg
ICAgICB9LAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUuaWQpIHsKKyAgICAgICAgICAgICAgICBjaGVja0ZvclZpb2xh
dGlvbihub2RlLmlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFtdLm1hcC5jYWxsKG5v
ZGUucGFyYW1zLCBjaGVja0ZvclZpb2xhdGlvbik7CisgICAgICAgIH0sCisgICAgICAgICJGdW5j
dGlvbkRlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JW
aW9sYXRpb24obm9kZS5pZCk7CisgICAgICAgICAgICBbXS5tYXAuY2FsbChub2RlLnBhcmFtcywg
Y2hlY2tGb3JWaW9sYXRpb24pOworICAgICAgICB9LAorICAgICAgICAiQ2F0Y2hDbGF1c2UiOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0ZvclZpb2xhdGlvbihub2RlLnBhcmFt
KTsKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEwNDpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG9u
IGRlY2xhcmluZyB2YXJpYWJsZXMgYWxyZWFkeSBkZWNsYXJlZCBpbiB0aGUgb3V0ZXIgc2NvcGUK
KyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBm
dW5jdGlvbiBjaGVja0ZvclNoYWRvd3Mobm9kZSkgeworICAgICAgICB2YXIgc2NvcGUgPSBjb250
ZXh0LmdldFNjb3BlKCksCisgICAgICAgICAgICBpc0Z1bmN0aW9uRXhwcmVzc2lvbiA9IChub2Rl
LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSwKKyAgICAgICAgICAgIGFyZ3MgPSBub2Rl
LnBhcmFtcywKKyAgICAgICAgICAgIHZhcmlhYmxlcyA9IHNjb3BlLnZhcmlhYmxlcy5maWx0ZXIo
ZnVuY3Rpb24oaXRlbSkgeworICAgICAgICAgICAgICAgIHJldHVybiAhYXJncy5zb21lKGZ1bmN0
aW9uKHZhcmlhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZS5uYW1l
ID09PSBpdGVtLm5hbWU7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAvL2l0ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkgb2YgdmFyaWFibGVzIGFuZCBmaW5k
IGR1cGxpY2F0ZXMgd2l0aCB0aGUgdXBwZXIgc2NvcGUKKyAgICAgICAgdmFyIHVwcGVyID0gc2Nv
cGUudXBwZXI7CisKKyAgICAgICAgZnVuY3Rpb24gZmluZER1cHModmFyaWFibGVzKSB7CisgICAg
ICAgICAgICB2YXJpYWJsZXMuZm9yRWFjaChmdW5jdGlvbih2YXJpYWJsZSkgeworCisgICAgICAg
ICAgICAgICAgaWYgKHVwcGVyLnZhcmlhYmxlcy5zb21lKGZ1bmN0aW9uKHNjb3BlVmFyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vZmlsdGVyIG91dCBnbG9iYWwgdmFyaWFibGVzIHRoYXQgd2Ug
YWRkIGFzIHBhcnQgb2YgRVNMaW50CisgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZVZhci5p
ZGVudGlmaWVycy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2NvcGVWYXIubmFtZSA9PT0gdmFyaWFibGUubmFtZSAmJiAhaXNGdW5jdGlvbkV4cHJlc3Npb247
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0pKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KHZhcmlhYmxlLmlkZW50aWZpZXJzWzBdLCAie3thfX0gaXMgYWxyZWFkeSBkZWNsYXJlZCBp
biB0aGUgdXBwZXIgc2NvcGUuIiwge2E6IHZhcmlhYmxlLm5hbWV9KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICh1cHBlcikg
eworICAgICAgICAgICAgZmluZER1cHModmFyaWFibGVzKTsKKyAgICAgICAgICAgIHVwcGVyID0g
dXBwZXIudXBwZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogY2hlY2tGb3JTaGFkb3dzLAorICAgICAgICAiRnVuY3Rp
b25FeHByZXNzaW9uIjogY2hlY2tGb3JTaGFkb3dzCisgICAgfTsKKworfTsKKworfSx7fV0sMTA1
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIHJlcXVpcmUgdmFyaWFibGVzIGRlY2xhcmVkIHdpdGhvdXQgd2hpdGVzcGFjZSBi
ZWZvcmUgdGhlIGxpbmVzIHNlbWljb2xvbgorICogQGF1dGhvciBKb25hdGhhbiBLaW5nc3Rvbgor
ICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIHNlbWljb2xvbldoaXRlc3BhY2UgPSAv
XHM7JC87CisKKyAgICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJj
ZShub2RlKTsKKyAgICAgICAgICAgIGlmIChzZW1pY29sb25XaGl0ZXNwYWNlLnRlc3Qoc291cmNl
KSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJWYXJpYWJsZSBkZWNs
YXJlZCB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UgYmVmb3JlIHNlbWljb2xvbiIpOworICAgICAg
ICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJjZShu
b2RlKTsKKyAgICAgICAgICAgIGlmIChzZW1pY29sb25XaGl0ZXNwYWNlLnRlc3Qoc291cmNlKSkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHByZXNzaW9uIGNhbGxl
ZCB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UgYmVmb3JlIHNlbWljb2xvbiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKK307CisKK30se31dLDEwNjpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjaGVjayB0
aGF0IHNwYWNlZCBmdW5jdGlvbiBhcHBsaWNhdGlvbgorICogQGF1dGhvciBNYXR0IER1VmFsbCA8
aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IGZ1bmN0aW9uIGRldGVjdE9wZW5TcGFjZXMobm9kZSkgeworICAgICAgICB2YXIgbGFzdENhbGxl
ZVRva2VuID0gY29udGV4dC5nZXRMYXN0VG9rZW4obm9kZS5jYWxsZWUpOworICAgICAgICB2YXIg
dG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSk7CisgICAgICAgIHZhciBpID0gdG9rZW5z
LmluZGV4T2YobGFzdENhbGxlZVRva2VuKSwgbCA9IHRva2Vucy5sZW5ndGg7CisgICAgICAgIHdo
aWxlIChpIDwgbCAmJiB0b2tlbnNbaV0udmFsdWUgIT09ICIoIikgeworICAgICAgICAgICAgKytp
OworICAgICAgICB9CisgICAgICAgIGlmIChpID49IGwpIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAvLyBsb29rIGZvciBhIHNwYWNlIGJldHdlZW4gdGhlIGNhbGxl
ZSBhbmQgdGhlIG9wZW4gcGFyZW4KKyAgICAgICAgaWYgKHRva2Vuc1tpIC0gMV0ucmFuZ2VbMV0g
IT09IHRva2Vuc1tpXS5yYW5nZVswXSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIlVuZXhwZWN0ZWQgc3BhY2UgYmV0d2VlbiBmdW5jdGlvbiBuYW1lIGFuZCBwYXJlbi4iKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJDYWxsRXhwcmVzc2lv
biI6IGRldGVjdE9wZW5TcGFjZXMsCisgICAgICAgICJOZXdFeHByZXNzaW9uIjogZGV0ZWN0T3Bl
blNwYWNlcworICAgIH07CisKK307CisKK30se31dLDEwNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3cgc3BhcnNlIGFycmF5
cworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQXJyYXlFeHByZXNzaW9uIjogZnVuY3Rp
b24obm9kZSkgeworCisgICAgICAgICAgICB2YXIgZW1wdHlTcG90ID0gbm9kZS5lbGVtZW50cy5p
bmRleE9mKG51bGwpID4gLTE7CisKKyAgICAgICAgICAgIGlmIChlbXB0eVNwb3QpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBjb21tYSBpbiBtaWRk
bGUgb2YgYXJyYXkuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07CisKK307
CisKK30se31dLDEwODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBjaGVjayBmb3IgcHJvcGVydGllcyB3aG9zZSBpZGVudGlm
aWVyIGVuZHMgd2l0aCB0aGUgc3RyaW5nIFN5bmMKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGw8aHR0
cDovL21hdHRkdXZhbGwuY29tLz4KKyAqLworCisvKmpzaGludCBub2RlOnRydWUqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk1lbWJlckV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gbm9kZS5w
cm9wZXJ0eS5uYW1lLAorICAgICAgICAgICAgICAgIHN5bmNSZWdleCA9IC8uKlN5bmMkLzsKKwor
ICAgICAgICAgICAgaWYgKHN5bmNSZWdleC5leGVjKHByb3BlcnR5TmFtZSkgIT09IG51bGwpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBzeW5jIG1l
dGhvZDogJyIgKyBwcm9wZXJ0eU5hbWUgKyAiJy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDEwOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiB0ZXJuYXJ5
IG9wZXJhdG9ycy4KKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
IlRlcm5hcnkgb3BlcmF0b3IgdXNlZC4iKTsKKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKwor
fSx7fV0sMTEwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBEaXNhbGxvdyB0cmFpbGluZyBzcGFjZXMgYXQgdGhlIGVuZCBvZiBsaW5lcy4K
KyAqIEBhdXRob3IgTm9kZWNhIFRlYW0gPGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2E+CisgKi8K
KyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICB2YXIgVFJBSUxFUiA9ICJbIFx0XHUwMGEwXHUyMDAwXHUyMDAx
XHUyMDAyXHUyMDAzXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBhXHUy
MDBiXHUyMDI4XHUyMDI5XHUzMDAwXSskIjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24gY2hlY2tUcmFpbGluZ1NwYWNlcyhub2RlKSB7CisK
KyAgICAgICAgICAgIC8vIExldCdzIGhhY2suIFNpbmNlIEVzcHJpbWEgZG9lcyBub3QgcmV0dXJu
IHdoaXRlc3BhY2Ugbm9kZXMsCisgICAgICAgICAgICAvLyBmZXRjaCB0aGUgc291cmNlIGNvZGUg
YW5kIGRvIGJsYWNrIG1hZ2ljIHZpYSByZWdleHBzLgorCisgICAgICAgICAgICB2YXIgc3JjID0g
Y29udGV4dC5nZXRTb3VyY2UoKSwKKyAgICAgICAgICAgICAgICByZSA9IG5ldyBSZWdFeHAoVFJB
SUxFUiwgIm1nIiksCisgICAgICAgICAgICAgICAgbWF0Y2gsIGxpbmVzLCBsb2NhdGlvbjsKKwor
ICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlLmV4ZWMoc3JjKSkgIT09IG51bGwpIHsKKyAg
ICAgICAgICAgICAgICBsaW5lcyA9IHNyYy5zbGljZSgwLCByZS5sYXN0SW5kZXgpLnNwbGl0KC9c
cj9cbi9nKTsKKworICAgICAgICAgICAgICAgIGxvY2F0aW9uID0geworICAgICAgICAgICAgICAg
ICAgICBsaW5lOiAgIGxpbmVzLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBs
aW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGggLSBtYXRjaFswXS5sZW5ndGggKyAxCisgICAg
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIC8vIFBhc3Npbmcgbm9kZSBpcyBhIGJp
dCBkaXJ0eSwgYmVjYXVzZSBtZXNzYWdlIGRhdGEgd2lsbCBjb250YWluCisgICAgICAgICAgICAg
ICAgLy8gYmlnIHRleHQgaW4gYHNvdXJjZWAuIEJ1dC4uLiB3aG8gY2FyZXMgOikgPworICAgICAg
ICAgICAgICAgIC8vIE9uZSBtb3JlIGtsdWRnZSB3aWxsIG5vdCBtYWtlIHdvcnNlIHRoZSBibG9v
ZHkgd2l6YXJkcnkgb2YgdGhpcyBwbHVnaW4uCisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgbG9jYXRpb24sICJUcmFpbGluZyBzcGFjZXMgbm90IGFsbG93ZWQuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07Cit9OworCit9LHt9XSwxMTE6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyB3aGVuIGluaXRpYWxpemluZyB0byB1bmRlZmluZWQKKyAqIEBhdXRob3IgSWx5YSBWb2xv
ZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJW
YXJpYWJsZURlY2xhcmF0b3IiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgbmFt
ZSA9IG5vZGUuaWQubmFtZTsKKyAgICAgICAgICAgIHZhciBpbml0ID0gbm9kZS5pbml0ICYmIG5v
ZGUuaW5pdC5uYW1lOworCisgICAgICAgICAgICBpZiAoaW5pdCA9PT0gInVuZGVmaW5lZCIpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiSXQncyBub3QgbmVjZXNzYXJ5
IHRvIGluaXRpYWxpemUgJ3t7bmFtZX19JyB0byB1bmRlZmluZWQuIiwgeyBuYW1lOiBuYW1lIH0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTEyOltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgcmVmZXJlbmNlcyB0byB1bmRlY2xhcmVkIHZhcmlhYmxlcy4KKyAqIEBhdXRo
b3IgTWFyayBNYWNkb25hbGQKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gSGVscGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnVuY3Rpb24g
aXNJbXBsaWNpdEdsb2JhbCh2YXJpYWJsZSkgeworICAgIHJldHVybiB2YXJpYWJsZS5kZWZzLmV2
ZXJ5KGZ1bmN0aW9uKGRlZikgeworICAgICAgICByZXR1cm4gZGVmLnR5cGUgPT09ICJJbXBsaWNp
dEdsb2JhbFZhcmlhYmxlIjsKKyAgICB9KTsKK30KKworLyoqCisgKiBHZXRzIHRoZSBkZWNsYXJl
ZCB2YXJpYWJsZSwgZGVmaW5lZCBpbiBgc2NvcGVgLCB0aGF0IGByZWZgIHJlZmVycyB0by4KKyAq
IEBwYXJhbSB7U2NvcGV9IHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBzZWFyY2guCisgKiBA
cGFyYW0ge1JlZmVyZW5jZX0gcmVmIFRoZSByZWZlcmVuY2UgdG8gZmluZCBpbiB0aGUgc2NvcGUu
CisgKiBAcmV0dXJucyB7VmFyaWFibGV9IFRoZSB2YXJpYWJsZSwgb3IgbnVsbCBpZiByZWYgcmVm
ZXJzIHRvIGFuIHVuZGVjbGFyZWQgdmFyaWFibGUuCisgKi8KK2Z1bmN0aW9uIGdldERlY2xhcmVk
R2xvYmFsVmFyaWFibGUoc2NvcGUsIHJlZikgeworICAgIHZhciBkZWNsYXJlZEdsb2JhbCA9IG51
bGw7CisgICAgc2NvcGUudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24odmFyaWFibGUpIHsKKyAgICAg
ICAgaWYgKHZhcmlhYmxlLm5hbWUgPT09IHJlZi5pZGVudGlmaWVyLm5hbWUpIHsKKyAgICAgICAg
ICAgIC8vIElmIGl0J3MgYW4gaW1wbGljaXQgZ2xvYmFsLCBpdCBtdXN0IGhhdmUgYSBgd3JpdGVh
YmxlYCBmaWVsZCAoaW5kaWNhdGluZyBpdCB3YXMgZGVjbGFyZWQpCisgICAgICAgICAgICBpZiAo
IWlzSW1wbGljaXRHbG9iYWwodmFyaWFibGUpIHx8IHt9Lmhhc093blByb3BlcnR5LmNhbGwodmFy
aWFibGUsICJ3cml0ZWFibGUiKSkgeworICAgICAgICAgICAgICAgIGRlY2xhcmVkR2xvYmFsID0g
dmFyaWFibGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworICAgIHJldHVybiBkZWNs
YXJlZEdsb2JhbDsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rp
b24oLypub2RlKi8pIHsKKworICAgICAgICAgICAgdmFyIGdsb2JhbFNjb3BlID0gY29udGV4dC5n
ZXRTY29wZSgpOworCisgICAgICAgICAgICBnbG9iYWxTY29wZS50aHJvdWdoLmZvckVhY2goZnVu
Y3Rpb24ocmVmKSB7CisgICAgICAgICAgICAgICAgdmFyIHZhcmlhYmxlID0gZ2V0RGVjbGFyZWRH
bG9iYWxWYXJpYWJsZShnbG9iYWxTY29wZSwgcmVmKSwKKyAgICAgICAgICAgICAgICAgICAgbmFt
ZSA9IHJlZi5pZGVudGlmaWVyLm5hbWU7CisgICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZSkg
eworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChyZWYuaWRlbnRpZmllciwgIid7
e25hbWV9fScgaXMgbm90IGRlZmluZWQuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAocmVmLmlzV3JpdGUoKSAmJiB2YXJpYWJsZS53cml0ZWFibGUgPT09IGZh
bHNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHJlZi5pZGVudGlmaWVy
LCAiJ3t7bmFtZX19JyBpcyByZWFkIG9ubHkuIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7
fV0sMTEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyBSdWxlIHRvIGZsYWcgcmVmZXJlbmNlcyB0byB0aGUgdW5kZWZpbmVkIHZhcmlhYmxl
LgorICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJl
dHVybiB7CisKKyAgICAgICAgIklkZW50aWZpZXIiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICBpZiAobm9kZS5uYW1lID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgIHZh
ciBwYXJlbnQgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAgICAgICAgICAgICAg
IGlmICghcGFyZW50IHx8IHBhcmVudC50eXBlICE9PSAiTWVtYmVyRXhwcmVzc2lvbiIgfHwgbm9k
ZSAhPT0gcGFyZW50LnByb3BlcnR5IHx8IHBhcmVudC5jb21wdXRlZCkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCB1c2Ugb2YgdW5kZWZpbmVk
LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDExNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHRyYWlsaW5nIHVuZGVyc2NvcmVzIGlu
IHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93
d3cubWF0dGR1dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICBmdW5jdGlvbiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikgeworICAgICAgICB2
YXIgbGVuID0gaWRlbnRpZmllci5sZW5ndGg7CisKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIg
IT09ICJfIiAmJiAoaWRlbnRpZmllclswXSA9PT0gIl8iIHx8IGlkZW50aWZpZXJbbGVuIC0gMV0g
PT09ICJfIik7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNTcGVjaWFsQ2FzZUlkZW50aWZpZXJG
b3JNZW1iZXJFeHByZXNzaW9uKGlkZW50aWZpZXIpIHsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXIgPT09ICJfX3Byb3RvX18iOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3BlY2lhbENhc2VJ
ZGVudGlmaWVySW5WYXJpYWJsZUV4cHJlc3Npb24oaWRlbnRpZmllcikgeworICAgICAgICAvLyBD
aGVja3MgZm9yIHRoZSB1bmRlcnNjb3JlIGxpYnJhcnkgdXNhZ2UgaGVyZQorICAgICAgICByZXR1
cm4gaWRlbnRpZmllciA9PT0gIl8iOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJh
aWxpbmdVbmRlcnNjb3JlSW5GdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFy
IGlkZW50aWZpZXIgPSBub2RlLmlkLm5hbWU7CisKKyAgICAgICAgaWYgKHR5cGVvZiBpZGVudGlm
aWVyICE9PSAidW5kZWZpbmVkIiAmJiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmllcikp
IHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGRhbmdsaW5n
ICdfJyBpbiAnIiArIGlkZW50aWZpZXIgKyAiJy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5WYXJpYWJsZUV4cHJlc3Npb24o
bm9kZSkgeworICAgICAgICB2YXIgaWRlbnRpZmllciA9IG5vZGUuaWQubmFtZTsKKworICAgICAg
ICBpZiAodHlwZW9mIGlkZW50aWZpZXIgIT09ICJ1bmRlZmluZWQiICYmIGhhc1RyYWlsaW5nVW5k
ZXJzY29yZShpZGVudGlmaWVyKSAmJgorICAgICAgICAgICAgIWlzU3BlY2lhbENhc2VJZGVudGlm
aWVySW5WYXJpYWJsZUV4cHJlc3Npb24oaWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGRhbmdsaW5nICdfJyBpbiAnIiArIGlkZW50aWZp
ZXIgKyAiJy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJh
aWxpbmdVbmRlcnNjb3JlSW5NZW1iZXJFeHByZXNzaW9uKG5vZGUpIHsKKyAgICAgICAgdmFyIGlk
ZW50aWZpZXIgPSBub2RlLnByb3BlcnR5Lm5hbWU7CisKKyAgICAgICAgaWYgKHR5cGVvZiBpZGVu
dGlmaWVyICE9PSAidW5kZWZpbmVkIiAmJiBoYXNUcmFpbGluZ1VuZGVyc2NvcmUoaWRlbnRpZmll
cikgJiYKKyAgICAgICAgICAgICFpc1NwZWNpYWxDYXNlSWRlbnRpZmllckZvck1lbWJlckV4cHJl
c3Npb24oaWRlbnRpZmllcikpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJV
bmV4cGVjdGVkIGRhbmdsaW5nICdfJyBpbiAnIiArIGlkZW50aWZpZXIgKyAiJy4iKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJ
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0
aW9uRGVjbGFyYXRpb24iOiBjaGVja0ZvclRyYWlsaW5nVW5kZXJzY29yZUluRnVuY3Rpb25EZWNs
YXJhdGlvbiwKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRvciI6IGNoZWNrRm9yVHJhaWxpbmdV
bmRlcnNjb3JlSW5WYXJpYWJsZUV4cHJlc3Npb24sCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9u
IjogY2hlY2tGb3JUcmFpbGluZ1VuZGVyc2NvcmVJbk1lbWJlckV4cHJlc3Npb24KKyAgICB9Owor
Cit9OworCit9LHt9XSwxMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IENoZWNrcyBmb3IgdW5yZWFjaGFibGUgY29kZSBkdWUgdG8gcmV0
dXJuLCB0aHJvd3MsIGJyZWFrLCBhbmQgY29udGludWUuCisgKiBAYXV0aG9yIEpvZWwgRmVlbnN0
cmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSGVs
cGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitmdW5jdGlvbiByZXBvcnQoY29udGV4
dCwgbm9kZSwgdW5yZWFjaGFibGVUeXBlKSB7CisgICAgdmFyIGtleXdvcmQ7CisgICAgc3dpdGNo
ICh1bnJlYWNoYWJsZVR5cGUpIHsKKyAgICAgICAgY2FzZSAiQnJlYWtTdGF0ZW1lbnQiOgorICAg
ICAgICAgICAga2V5d29yZCA9ICJicmVhayI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAiQ29udGludWVTdGF0ZW1lbnQiOgorICAgICAgICAgICAga2V5d29yZCA9ICJjb250aW51
ZSI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiUmV0dXJuU3RhdGVtZW50IjoK
KyAgICAgICAgICAgIGtleXdvcmQgPSAicmV0dXJuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICJUaHJvd1N0YXRlbWVudCI6CisgICAgICAgICAgICBrZXl3b3JkID0gInRocm93
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRm91bmQgdW5leHBlY3RlZCBz
dGF0ZW1lbnQgYWZ0ZXIgYSB7e3R5cGV9fS4iLCB7IHR5cGU6IGtleXdvcmQgfSk7Cit9CisKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAvKioKKyAgICAgKiBDaGVja3MgaWYgYSBub2RlIGlzIGFuIGV4Y2VwdGlvbiBmb3Igbm8tdW5y
ZWFjaGFibGUgYmVjYXVzZSBvZiB2YXJpYWJsZS9mdW5jdGlvbiBob2lzdGluZworICAgICAqIEBw
YXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IGlmIHRoZSBub2RlIGRvZXNuJ3QgdHJpZ2dlciB1bnJlYWNoYWJsZQorICAg
ICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gaXNVbnJlYWNoYWJsZUFsbG93ZWQo
bm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlv
biIgfHwKKyAgICAgICAgICAgIG5vZGUudHlwZSA9PT0gIlZhcmlhYmxlRGVjbGFyYXRpb24iICYm
CisgICAgICAgICAgICBub2RlLmRlY2xhcmF0aW9ucy5ldmVyeShmdW5jdGlvbihkZWNsYXJhdGlv
bil7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLnR5cGUgPT09ICJWYXJpYWJs
ZURlY2xhcmF0b3IiICYmIGRlY2xhcmF0aW9uLmluaXQgPT09IG51bGw7CisgICAgICAgICAgICB9
KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIG5vZGUg
aXMgdGhlIGxhc3Qgbm9kZSBvciBmb2xsb3dlZCBleGNsdXNpdmVseSBieQorICAgICAqIGhvaXN0
ZWQgZGVjbGFyYXRpb25zCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIE5vZGUgdGhhdCBz
aG91bGQgYmUgdGhlIGxhc3Qgbm9kZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBw
cml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tOb2RlKG5vZGUpIHsKKyAgICAgICAg
dmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisgICAgICAgIHZhciBm
aWVsZCwgaSwgc2libGluZzsKKworICAgICAgICBzd2l0Y2ggKHBhcmVudC50eXBlKSB7CisgICAg
ICAgICAgICBjYXNlICJTd2l0Y2hDYXNlIjoKKyAgICAgICAgICAgICAgICBmaWVsZCA9ICJjb25z
ZXF1ZW50IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIlByb2dy
YW0iOgorICAgICAgICAgICAgY2FzZSAiQmxvY2tTdGF0ZW1lbnQiOgorICAgICAgICAgICAgICAg
IGZpZWxkID0gImJvZHkiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KGkgPSBwYXJlbnRbZmllbGRdLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAg
ICBzaWJsaW5nID0gcGFyZW50W2ZpZWxkXVtpXTsKKyAgICAgICAgICAgIGlmIChzaWJsaW5nID09
PSBub2RlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBGb3VuZCB0aGUgbGFzdCByZWFj
aGFibGUgc3RhdGVtZW50LCBhbGwgZG9uZQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIWlzVW5yZWFjaGFibGVBbGxvd2VkKHNpYmxpbmcpKSB7CisgICAgICAgICAgICAgICAgcmVw
b3J0KGNvbnRleHQsIHNpYmxpbmcsIG5vZGUudHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogY2hl
Y2tOb2RlLAorICAgICAgICAiVGhyb3dTdGF0ZW1lbnQiOiBjaGVja05vZGUsCisgICAgICAgICJD
b250aW51ZVN0YXRlbWVudCI6IGNoZWNrTm9kZSwKKyAgICAgICAgIkJyZWFrU3RhdGVtZW50Ijog
Y2hlY2tOb2RlCisgICAgfTsKKworfTsKKworfSx7fV0sMTE2OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBGbGFnIGV4cHJlc3Npb25zIGlu
IHN0YXRlbWVudCBwb3NpdGlvbiB0aGF0IGRvIG5vdCBzaWRlIGVmZmVjdAorICogQGF1dGhvciBN
aWNoYWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSAtIGFueSBub2RlCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IHdo
ZXRoZXIgdGhlIGdpdmVuIG5vZGUgc3RydWN0dXJhbGx5IHJlcHJlc2VudHMgYSBkaXJlY3RpdmUK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBsb29rc0xpa2VEaXJlY3RpdmUobm9kZSkgeworICAgICAg
IHJldHVybiBub2RlLnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJgorICAgICAgICAg
ICBub2RlLmV4cHJlc3Npb24udHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2RlLmV4cHJl
c3Npb24udmFsdWUgPT09ICJzdHJpbmciOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7RnVuY3Rpb259IHByZWRpY2F0ZSAtIChbYV0gLT4gQm9vbGVhbikgdGhlIGZ1bmN0aW9uIHVz
ZWQgdG8gbWFrZSB0aGUgZGV0ZXJtaW5hdGlvbgorICAgICAqIEBwYXJhbSB7YVtdfSBsaXN0IC0g
dGhlIGlucHV0IGxpc3QKKyAgICAgKiBAcmV0dXJucyB7YVtdfSB0aGUgbGVhZGluZyBzZXF1ZW5j
ZSBvZiBtZW1iZXJzIGluIHRoZSBnaXZlbiBsaXN0IHRoYXQgcGFzcyB0aGUgZ2l2ZW4gcHJlZGlj
YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gdGFrZVdoaWxlKHByZWRpY2F0ZSwgbGlzdCkgewor
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoIXByZWRpY2F0ZShsaXN0W2ldKSkgeworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBbXS5zbGljZS5j
YWxsKGxpc3QsIDAsIGkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSAtIGEgUHJvZ3JhbSBvciBCbG9ja1N0YXRlbWVudCBub2RlCisgICAgICogQHJldHVy
bnMge0FTVE5vZGVbXX0gdGhlIGxlYWRpbmcgc2VxdWVuY2Ugb2YgZGlyZWN0aXZlIG5vZGVzIGlu
IHRoZSBnaXZlbiBub2RlJ3MgYm9keQorICAgICAqLworICAgIGZ1bmN0aW9uIGRpcmVjdGl2ZXMo
bm9kZSkgeworICAgICAgICByZXR1cm4gdGFrZVdoaWxlKGxvb2tzTGlrZURpcmVjdGl2ZSwgbm9k
ZS5ib2R5KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
LSBhbnkgbm9kZQorICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBhbmNlc3RvcnMgLSB0aGUgZ2l2
ZW4gbm9kZSdzIGFuY2VzdG9ycworICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRo
ZSBnaXZlbiBub2RlIGlzIGNvbnNpZGVyZWQgYSBkaXJlY3RpdmUgaW4gaXRzIGN1cnJlbnQgcG9z
aXRpb24KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0RpcmVjdGl2ZShub2RlLCBhbmNlc3RvcnMp
IHsKKyAgICAgICAgdmFyIHBhcmVudCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV0s
CisgICAgICAgICAgICBncmFuZHBhcmVudCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0g
Ml07CisgICAgICAgIHJldHVybiAocGFyZW50LnR5cGUgPT09ICJQcm9ncmFtIiB8fCBwYXJlbnQu
dHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IiAmJiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkZ1bmN0
aW9uRXhwcmVzc2lvbiIgfHwgZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRp
b24iKSkgJiYKKyAgICAgICAgICAgIGRpcmVjdGl2ZXMocGFyZW50KS5pbmRleE9mKG5vZGUpID49
IDA7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQi
OiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciB0eXBlID0gbm9kZS5leHByZXNz
aW9uLnR5cGUsCisgICAgICAgICAgICAgICAgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3Rv
cnMoKTsKKworICAgICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgICEvXig/OkFzc2lnbm1l
bnR8Q2FsbHxOZXd8VXBkYXRlKUV4cHJlc3Npb24kLy50ZXN0KHR5cGUpICYmCisgICAgICAgICAg
ICAgICAgKHR5cGUgIT09ICJVbmFyeUV4cHJlc3Npb24iIHx8IFsiZGVsZXRlIiwgInZvaWQiXS5p
bmRleE9mKG5vZGUuZXhwcmVzc2lvbi5vcGVyYXRvcikgPCAwKSAmJgorICAgICAgICAgICAgICAg
ICFpc0RpcmVjdGl2ZShub2RlLCBhbmNlc3RvcnMpCisgICAgICAgICAgICApIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgYW4gYXNzaWdubWVudCBvciBm
dW5jdGlvbiBjYWxsIGFuZCBpbnN0ZWFkIHNhdyBhbiBleHByZXNzaW9uLiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTE3OltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcg
ZGVjbGFyZWQgYnV0IHVudXNlZCB2YXJpYWJsZXMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisg
Ki8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBjb25maWcgPSB7CisgICAgICAgIHZhcnM6ICJh
bGwiLAorICAgICAgICBhcmdzOiAiYWZ0ZXItdXNlZCIKKyAgICB9OworCisgICAgaWYgKGNvbnRl
eHQub3B0aW9uc1swXSkgeworICAgICAgICBpZiAodHlwZW9mKGNvbnRleHQub3B0aW9uc1swXSkg
PT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBjb25maWcudmFycyA9IGNvbnRleHQub3B0aW9u
c1swXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbmZpZy52YXJzID0gY29udGV4
dC5vcHRpb25zWzBdLnZhcnMgfHwgY29uZmlnLnZhcnM7CisgICAgICAgICAgICBjb25maWcuYXJn
cyA9IGNvbnRleHQub3B0aW9uc1swXS5hcmdzIHx8IGNvbmZpZy5hcmdzOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdmFyIE1FU1NBR0UgPSAie3tuYW1lfX0gaXMgZGVmaW5lZCBidXQgbmV2ZXIg
dXNlZCI7CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1JlZmVyZW5jZX0gcmVmIC0gYW4gZXNj
b3BlIFJlZmVyZW5jZQorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSB3aGV0aGVyIHRoZSBnaXZl
biByZWZlcmVuY2UgcmVwcmVzZW50cyBhIHJlYWQgb3BlcmF0aW9uCisgICAgICovCisgICAgZnVu
Y3Rpb24gaXNSZWFkUmVmKHJlZikgeworICAgICAgICByZXR1cm4gcmVmLmlzUmVhZCgpOworICAg
IH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7U2NvcGV9IHNjb3BlIC0gYW4gZXNjb3BlIFNj
b3BlIG9iamVjdAorICAgICAqIEByZXR1cm5zIHtWYXJpYWJsZVtdfSBtb3N0IG9mIHRoZSBsb2Nh
bCB2YXJpYWJsZXMgd2l0aCBubyByZWFkIHJlZmVyZW5jZXMKKyAgICAgKi8KKyAgICBmdW5jdGlv
biB1bnVzZWRMb2NhbHMoc2NvcGUpIHsKKyAgICAgICAgdmFyIHVudXNlZCA9IFtdOworICAgICAg
ICB2YXIgdmFyaWFibGVzID0gc2NvcGUudmFyaWFibGVzOworICAgICAgICBpZiAoc2NvcGUudHlw
ZSAhPT0gImdsb2JhbCIpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFyaWFi
bGVzLmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgICAgIC8vIHNraXAgZnVuY3Rp
b24gZXhwcmVzc2lvbiBuYW1lcworICAgICAgICAgICAgICAgIGlmIChzY29wZS5mdW5jdGlvbkV4
cHJlc3Npb25TY29wZSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gc2tpcCBpbXBsaWNpdCAiYXJndW1lbnRzIiB2
YXJpYWJsZQorICAgICAgICAgICAgICAgIGlmIChzY29wZS50eXBlID09PSAiZnVuY3Rpb24iICYm
IHZhcmlhYmxlc1tpXS5uYW1lID09PSAiYXJndW1lbnRzIiAmJiB2YXJpYWJsZXNbaV0uaWRlbnRp
ZmllcnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHZhcmlhYmxlc1tpXS5k
ZWZzWzBdLnR5cGU7CisgICAgICAgICAgICAgICAgLy8gc2tpcCBjYXRjaCB2YXJpYWJsZXMKKyAg
ICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gIkNhdGNoQ2xhdXNlIikgeworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8g
aWYgImFyZ3MiIG9wdGlvbiBpcyAibm9uZSIsIHNraXAgYW55IHBhcmFtZXRlcgorICAgICAgICAg
ICAgICAgIGlmIChjb25maWcuYXJncyA9PT0gIm5vbmUiICYmIHR5cGUgPT09ICJQYXJhbWV0ZXIi
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAvLyBpZiAiYXJncyIgb3B0aW9uIGlzICJhZnRlci11c2VkIiwgc2tpcCBh
bGwgYnV0IHRoZSBsYXN0IHBhcmFtZXRlcgorICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXJn
cyA9PT0gImFmdGVyLXVzZWQiICYmIHR5cGUgPT09ICJQYXJhbWV0ZXIiICYmIHZhcmlhYmxlc1tp
XS5kZWZzWzBdLmluZGV4IDwgdmFyaWFibGVzW2ldLmRlZnNbMF0ubm9kZS5wYXJhbXMubGVuZ3Ro
IC0gMSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlc1tpXS5yZWZlcmVuY2VzLmZpbHRlcihpc1Jl
YWRSZWYpLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgICAgICB1bnVzZWQucHVzaCh2
YXJpYWJsZXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gW10uY29uY2F0LmFwcGx5KHVudXNlZCwgW10ubWFwLmNhbGwoc2Nv
cGUuY2hpbGRTY29wZXMsIHVudXNlZExvY2FscykpOworICAgIH0KKworICAgIHJldHVybiB7Cisg
ICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24ocHJvZ3JhbU5vZGUpIHsKKyAgICAgICAgICAgIHZh
ciBnbG9iYWxTY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTsKKyAgICAgICAgICAgIHZhciB1bnVz
ZWQgPSB1bnVzZWRMb2NhbHMoZ2xvYmFsU2NvcGUpOworICAgICAgICAgICAgdmFyIGksIGw7CisK
KyAgICAgICAgICAgIC8vIGRldGVybWluZSB1bnVzZWQgZ2xvYmFscworICAgICAgICAgICAgaWYg
KGNvbmZpZy52YXJzID09PSAiYWxsIikgeworICAgICAgICAgICAgICAgIHZhciB1bnJlc29sdmVk
UmVmcyA9IGdsb2JhbFNjb3BlLnRocm91Z2guZmlsdGVyKGlzUmVhZFJlZikubWFwKGZ1bmN0aW9u
KHJlZikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVmLmlkZW50aWZpZXIubmFtZTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gZ2xv
YmFsU2NvcGUudmFyaWFibGVzLmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAodW5yZXNvbHZlZFJlZnMuaW5kZXhPZihnbG9iYWxTY29wZS52YXJpYWJsZXNbaV0u
bmFtZSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWQucHVzaChnbG9iYWxT
Y29wZS52YXJpYWJsZXNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gdW51c2Vk
Lmxlbmd0aDsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICh1bnVzZWRbaV0uZXNs
aW50RXhwbGljaXRHbG9iYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
cHJvZ3JhbU5vZGUsIE1FU1NBR0UsIHVudXNlZFtpXSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICh1bnVzZWRbaV0uZGVmcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KHVudXNlZFtpXS5pZGVudGlmaWVyc1swXSwgTUVTU0FHRSwgdW51c2VkW2ld
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSwxMTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgdmFyaWFibGVzIGJlZm9yZSB0
aGV5IGFyZSBkZWZpbmVkCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBDb25zdGFudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K3ZhciBOT19GVU5DID0gIm5vZnVuYyI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rp
b24gZmluZERlY2xhcmF0aW9uKG5hbWUsIHNjb3BlKSB7CisgICAgICAgIC8vdHJ5IHNlYXJjaGlu
ZyBpbiB0aGUgY3VycmVudCBzY29wZSBmaXJzdAorICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9
IHNjb3BlLnZhcmlhYmxlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChz
Y29wZS52YXJpYWJsZXNbaV0ubmFtZSA9PT0gbmFtZSkgeworICAgICAgICAgICAgICAgIHJldHVy
biBzY29wZS52YXJpYWJsZXNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
Ly9jaGVjayBpZiB0aGVyZSdzIHVwcGVyIHNjb3BlIGFuZCBjYWxsIHJlY3Vyc2l2bHkgdGlsbCB3
ZSBmaW5kIHRoZSB2YXJpYWJsZQorICAgICAgICBpZiAoc2NvcGUudXBwZXIpIHsKKyAgICAgICAg
ICAgIHJldHVybiBmaW5kRGVjbGFyYXRpb24obmFtZSwgc2NvcGUudXBwZXIpOworICAgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gZmluZFZhcmlhYmxlcygpIHsKKyAgICAgICAgdmFyIHNj
b3BlID0gY29udGV4dC5nZXRTY29wZSgpOworICAgICAgICB2YXIgdHlwZU9wdGlvbiA9IGNvbnRl
eHQub3B0aW9uc1swXTsKKworICAgICAgICBmdW5jdGlvbiBjaGVja0xvY2F0aW9uQW5kUmVwb3J0
KHJlZmVyZW5jZSwgZGVjbGFyYXRpb24pIHsKKyAgICAgICAgICAgIGlmICh0eXBlT3B0aW9uICE9
PSBOT19GVU5DIHx8IGRlY2xhcmF0aW9uLmRlZnNbMF0udHlwZSAhPT0gIkZ1bmN0aW9uTmFtZSIp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaWRlbnRpZmllcnNbMF0ucmFuZ2Vb
MV0gPiByZWZlcmVuY2UuaWRlbnRpZmllci5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChyZWZlcmVuY2UuaWRlbnRpZmllciwgInt7YX19IHdhcyB1c2VkIGJl
Zm9yZSBpdCB3YXMgZGVmaW5lZCIsIHthOiByZWZlcmVuY2UuaWRlbnRpZmllci5uYW1lfSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2Nv
cGUucmVmZXJlbmNlcy5mb3JFYWNoKGZ1bmN0aW9uKHJlZmVyZW5jZSkgeworICAgICAgICAgICAg
Ly9pZiB0aGUgcmVmZXJlbmNlIGlzIHJlc29sdmVkIGNoZWNrIGZvciBkZWNsYXJhdGlvbiBsb2Nh
dGlvbgorICAgICAgICAgICAgLy9pZiBub3QsIGl0IGNvdWxkIGJlIGZ1bmN0aW9uIGludm9jYXRp
b24sIHRyeSB0byBmaW5kIG1hbnVhbGx5CisgICAgICAgICAgICBpZiAocmVmZXJlbmNlLnJlc29s
dmVkICYmIHJlZmVyZW5jZS5yZXNvbHZlZC5pZGVudGlmaWVycy5sZW5ndGggPiAwKSB7CisgICAg
ICAgICAgICAgICAgY2hlY2tMb2NhdGlvbkFuZFJlcG9ydChyZWZlcmVuY2UsIHJlZmVyZW5jZS5y
ZXNvbHZlZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBkZWNs
YXJhdGlvbiA9IGZpbmREZWNsYXJhdGlvbihyZWZlcmVuY2UuaWRlbnRpZmllci5uYW1lLCBzY29w
ZSk7CisgICAgICAgICAgICAgICAgLy9pZiB0aGVyZSdyZSBubyBpZGVudGlmaWVycywgdGhpcyBp
cyBhIGdsb2JhbCBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICAgICAgICAgIGlmIChkZWNs
YXJhdGlvbiAmJiBkZWNsYXJhdGlvbi5pZGVudGlmaWVycy5sZW5ndGggIT09IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2hlY2tMb2NhdGlvbkFuZFJlcG9ydChyZWZlcmVuY2UsIGRlY2xhcmF0
aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
IH0KKworICAgIHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjogZmluZFZhcmlhYmxlcywKKyAg
ICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZpbmRWYXJpYWJsZXMsCisgICAgICAgICJGdW5j
dGlvbkRlY2xhcmF0aW9uIjogZmluZFZhcmlhYmxlcworICAgIH07Cit9OworCit9LHt9XSwxMTk6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZGlzYWxsb3cgdXNlIG9mIHZvaWQgb3BlcmF0b3IuCisgKiBAYXV0aG9yIE1pa2Ug
U2lkb3JvdgorICogQGNvcHlyaWdodCAyMDE0IE1pa2UgU2lkb3Jvdi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
UnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAv
LyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAg
ICAiVW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5v
ZGUub3BlcmF0b3IgPT09ICJ2b2lkIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJFeHBlY3RlZCAndW5kZWZpbmVkJyBhbmQgaW5zdGVhZCBzYXcgJ3ZvaWQnLiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTIwOltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxl
IHRoYXQgd2FybnMgYWJvdXQgdXNlZCB3YXJuaW5nIGNvbW1lbnRzCisgKiBAYXV0aG9yIEFsZXhh
bmRlciBTY2htaWR0IDxodHRwczovL2dpdGh1Yi5jb20vbHhhbmRlcnM+CisgKi8KKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkgeworICAgICJ1c2Ug
c3RyaWN0IjsKKworICAgIHZhciBjb25maWd1cmF0aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8
IHt9LAorICAgICAgICB3YXJuaW5nVGVybXMgPSBjb25maWd1cmF0aW9uLnRlcm1zIHx8IFsidG9k
byIsICJmaXhtZSIsICJ4eHgiXSwKKyAgICAgICAgbG9jYXRpb24gPSBjb25maWd1cmF0aW9uLmxv
Y2F0aW9uIHx8ICJzdGFydCI7CisKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyBhIHNwZWNpZmll
ZCBjb21tZW50IGZvciBiZWluZyBjaGVja2VkLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21t
ZW50IFRoZSBjb21tZW50IHRvIHByZXBhcmUuCisgICAgICogQHJldHVybnMge1N0cmluZ30gVGhl
IHNwZWNpZmllZCBjb21tZW50IHByZXBhcmVkIGZvciBiZWluZyBjaGVja2VkLgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIHByZXBhcmVDb21tZW50Rm9yQ2hlY2tpbmcoY29tbWVudCkgeworICAgICAg
ICB2YXIgY29tbWVudFRvQ2hlY2s7CisKKyAgICAgICAgY29tbWVudFRvQ2hlY2sgPSBjb21tZW50
LnRvTG93ZXJDYXNlKCk7CisgICAgICAgIGNvbW1lbnRUb0NoZWNrID0gY29tbWVudFRvQ2hlY2su
dHJpbSgpOworCisgICAgICAgIHJldHVybiBjb21tZW50VG9DaGVjazsKKyAgICB9CisKKyAgICAv
KioKKyAgICAgKiBDaGVja3MgaWYgdGhlIHNwZWNpZmllZCBjb21tZW50IHN0YXJ0cyB3aXRoIGEg
c3BlY2lmaWVkIHRlcm0uCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1lbnRUb0NoZWNrIFRo
ZSBjb21tZW50IHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBsb3dlckNhc2VUZXJt
IFRoZSB0ZXJtIHRvIHNlYXJjaCBmb3IuCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUg
aWYgdGhlIGNvbW1lbnQgc3RhcnRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgdGVybSwgZWxzZSBmYWxz
ZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjb21tZW50U3RhcnRzV2l0aFRlcm0oY29tbWVudFRv
Q2hlY2ssIGxvd2VyQ2FzZVRlcm0pIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrLmlu
ZGV4T2YobG93ZXJDYXNlVGVybSkgPT09IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hl
Y2tzIGlmIHRoZSBzcGVjaWZpZWQgY29tbWVudCBjb250YWlucyBhIHNwZWNpZmllZCB0ZXJtIGF0
IGFueSBsb2NhdGlvbi4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudFRvQ2hlY2sgVGhl
IGNvbW1lbnQgdG8gY2hlY2suCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGxvd2VyQ2FzZVRlcm0g
VGhlIHRlcm0gdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBp
ZiB0aGUgdGVybSB3YXMgY29udGFpbmVkIGluIHRoZSBjb21tZW50LCBlbHNlIGZhbHNlLgorICAg
ICAqLworICAgIGZ1bmN0aW9uIGNvbW1lbnRDb250YWluc1Rlcm0oY29tbWVudFRvQ2hlY2ssIGxv
d2VyQ2FzZVRlcm0pIHsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrLmluZGV4T2YobG93
ZXJDYXNlVGVybSkgIT09IC0xOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRo
ZSBzcGVjaWZpZWQgY29tbWVudCBmb3IgbWF0Y2hlcyBvZiB0aGUgY29uZmlndXJlZCB3YXJuaW5n
IHRlcm1zIGFuZCByZXR1cm5zIHRoZSBtYXRjaGVzLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBj
b21tZW50IFRoZSBjb21tZW50IHdoaWNoIGlzIGNoZWNrZWQuCisgICAgICogQHJldHVybnMge0Fy
cmF5fSBBbGwgbWF0Y2hlZCB3YXJuaW5nIHRlcm1zIGZvciB0aGlzIGNvbW1lbnQuCisgICAgICov
CisgICAgZnVuY3Rpb24gY29tbWVudENvbnRhaW5zV2FybmluZ1Rlcm0oY29tbWVudCkgeworICAg
ICAgICB2YXIgbWF0Y2hlcyA9IFtdOworCisgICAgICAgIHdhcm5pbmdUZXJtcy5mb3JFYWNoKGZ1
bmN0aW9uICh0ZXJtKSB7CisgICAgICAgICAgICB2YXIgbG93ZXJDYXNlVGVybSA9IHRlcm0udG9M
b3dlckNhc2UoKSwKKyAgICAgICAgICAgICAgICBjb21tZW50VG9DaGVjayA9IHByZXBhcmVDb21t
ZW50Rm9yQ2hlY2tpbmcoY29tbWVudCk7CisKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0g
InN0YXJ0IikgeworICAgICAgICAgICAgICAgIGlmIChjb21tZW50U3RhcnRzV2l0aFRlcm0oY29t
bWVudFRvQ2hlY2ssIGxvd2VyQ2FzZVRlcm0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNo
ZXMucHVzaCh0ZXJtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGxvY2F0aW9uID09PSAiYW55d2hlcmUiKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRD
b250YWluc1Rlcm0oY29tbWVudFRvQ2hlY2ssIGxvd2VyQ2FzZVRlcm0pKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1hdGNoZXMucHVzaCh0ZXJtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBtYXRjaGVzOworICAgIH0KKwor
ICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUgc3BlY2lmaWVkIG5vZGUgZm9yIG1hdGNoaW5nIHdh
cm5pbmcgY29tbWVudHMgYW5kIHJlcG9ydHMgdGhlbS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9
IG5vZGUgVGhlIEFTVCBub2RlIGJlaW5nIGNoZWNrZWQuCisgICAgICogQHJldHVybnMge3ZvaWR9
IHVuZGVmaW5lZC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0NvbW1lbnQobm9kZSkgewor
ICAgICAgICB2YXIgbWF0Y2hlcyA9IGNvbW1lbnRDb250YWluc1dhcm5pbmdUZXJtKG5vZGUudmFs
dWUpOworCisgICAgICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2hlZFRlcm0pIHsK
KyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkICIgKyBtYXRjaGVk
VGVybSArICIgY29tbWVudC4iKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHsK
KyAgICAgICAgIkJsb2NrQ29tbWVudCI6IGNoZWNrQ29tbWVudCwKKyAgICAgICAgIkxpbmVDb21t
ZW50IjogY2hlY2tDb21tZW50CisgICAgfTsKK307CisKK30se31dLDEyMTpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHVzZSBvZiB3aXRoIHN0YXRlbWVudAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICov
CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7
CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiV2l0aFN0YXRl
bWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJVbmV4cGVjdGVkIHVzZSBvZiAnd2l0aCcgc3RhdGVtZW50LiIpOworICAgICAgICB9CisgICAg
fTsKKworfTsKKworfSx7fV0sMTIyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd3JhcHBpbmcgbm9uZS1pZmZlIGlu
IHBhcmVucworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9u
KG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9y
cygpLAorICAgICAgICAgICAgICAgIHByZXZpb3VzVG9rZW4sIG5leHRUb2tlbjsKKworICAgICAg
ICAgICAgaWYgKCEvQ2FsbEV4cHJlc3Npb258TmV3RXhwcmVzc2lvbi8udGVzdChhbmNlc3RvcnMu
cG9wKCkudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBwcmV2aW91c1Rva2VuID0gY29udGV4dC5n
ZXRUb2tlbkJlZm9yZShub2RlKTsKKyAgICAgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0
LmdldFRva2VuQWZ0ZXIobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4u
dmFsdWUgPT09ICIoIiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICIpIikgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3JhcHBpbmcgbm9uLUlJRkUgZnVuY3Rpb24g
bGl0ZXJhbHMgaW4gcGFyZW5zIGlzIHVubmVjZXNzYXJ5LiIpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEyMzpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQSBy
dWxlIHRvIGVuc3VyZSB0aGUgdXNlIG9mIGEgc2luZ2xlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgor
ICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHZhciBmdW5jdGlvblN0YWNrID0gW107CisKKyAgICBmdW5jdGlvbiBz
dGFydEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNrLnB1c2goZmFsc2UpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvblN0YWNr
LnBvcCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrRGVjbGFyYXRpb25zKG5vZGUpIHsK
KyAgICAgICAgaWYgKGZ1bmN0aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXSkgewor
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkNvbWJpbmUgdGhpcyB3aXRoIHRoZSBw
cmV2aW91cyAndmFyJyBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBmdW5jdGlvblN0YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3RoIC0gMV0gPSB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3Jh
bSI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRG
dW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCisK
KyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBjaGVja0RlY2xhcmF0aW9ucywKKworICAg
ICAgICAiUHJvZ3JhbTpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xh
cmF0aW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpl
eGl0IjogZW5kRnVuY3Rpb24KKyAgICB9OworCit9OworCit9LHt9XSwxMjQ6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBl
bnN1cmUgYmxhbmsgbGluZXMgd2l0aGluIGJsb2Nrcy4KKyAqIEBhdXRob3IgTWF0aGlhcyBTY2hy
ZWNrIDxodHRwczovL2dpdGh1Yi5jb20vbG8xdHVtYT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBNYXRo
aWFzIFNjaHJlY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworInVzZSBzdHJpY3QiOwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7Cisg
ICAgdmFyIHJlcXVpcmVQYWRkaW5nID0gY29udGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiOwor
CisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBub24gZW1wdHkgYmxvY2sgbm9k
ZSBoYXMgYSBibGFuayBsaW5lIGJlZm9yZSBpdHMgZmlyc3QgY2hpbGQgbm9kZS4KKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIG9mIGEgQmxvY2tTdGF0ZW1lbnQuCisg
ICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSBibG9jayBzdGFydHMg
d2l0aCBhIGJsYW5rIGxpbmUuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNOb25FbXB0eUJsb2Nr
VG9wUGFkZGVkKG5vZGUpIHsKKyAgICAgICAgdmFyIGJsb2NrU3RhcnQgPSBub2RlLmxvYy5zdGFy
dC5saW5lLAorICAgICAgICAgICAgZmlyc3QgPSBub2RlLmJvZHlbMF0sCisgICAgICAgICAgICBm
aXJzdExpbmUgPSBmaXJzdC5sb2Muc3RhcnQubGluZSwKKyAgICAgICAgICAgIGV4cGVjdGVkRmly
c3RMaW5lID0gYmxvY2tTdGFydCArIDIsCisgICAgICAgICAgICBsZWFkaW5nQ29tbWVudHMgPSBj
b250ZXh0LmdldENvbW1lbnRzKGZpcnN0KS5sZWFkaW5nOworCisgICAgICAgIGlmIChsZWFkaW5n
Q29tbWVudHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgZmlyc3RMaW5lID0gbGVhZGluZ0Nv
bW1lbnRzWzBdLmxvYy5zdGFydC5saW5lOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4
cGVjdGVkRmlyc3RMaW5lIDw9IGZpcnN0TGluZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBD
aGVja3MgaWYgdGhlIGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIGhhcyBhIGJsYW5rIGxpbmUg
YWZ0ZXIgaXRzIGxhc3QgY2hpbGQgbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUg
VGhlIEFTVCBub2RlIG9mIGEgQmxvY2tTdGF0ZW1lbnQuCisgICAgICogQHJldHVybnMge2Jvb2xl
YW59IFdoZXRoZXIgb3Igbm90IHRoZSBibG9jayBlbmRzIHdpdGggYSBibGFuayBsaW5lLgorICAg
ICAqLworICAgIGZ1bmN0aW9uIGlzTm9uRW1wdHlCbG9ja0JvdHRvbVBhZGRlZChub2RlKSB7Cisg
ICAgICAgIHZhciBibG9ja0VuZCA9IG5vZGUubG9jLmVuZC5saW5lLAorICAgICAgICAgICAgbGFz
dCA9IG5vZGUuYm9keVtub2RlLmJvZHkubGVuZ3RoIC0gMV0sCisgICAgICAgICAgICBsYXN0TGlu
ZSA9IGxhc3QubG9jLmVuZC5saW5lLAorICAgICAgICAgICAgZXhwZWN0ZWRMYXN0TGluZSA9IGJs
b2NrRW5kIC0gMiwKKyAgICAgICAgICAgIHRyYWlsaW5nQ29tbWVudHMgPSBjb250ZXh0LmdldENv
bW1lbnRzKGxhc3QpLnRyYWlsaW5nOworCisgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgIGxhc3RMaW5lID0gdHJhaWxpbmdDb21tZW50c1t0cmFp
bGluZ0NvbW1lbnRzLmxlbmd0aCAtIDFdLmxvYy5lbmQubGluZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBsYXN0TGluZSA8PSBleHBlY3RlZExhc3RMaW5lOworICAgIH0KKworICAgIC8q
KgorICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgc3RhcnRz
IEFORCBlbmRzIHdpdGggYSBibGFuayBsaW5lLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9k
ZSBUaGUgQVNUIG5vZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gV2hldGhlciBvciBub3QgdGhlIGJsb2NrIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgYmxh
bmsgbGluZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc05vbkVtcHR5QmxvY2tQYWRkZWQobm9k
ZSkgeworICAgICAgICByZXR1cm4gaXNOb25FbXB0eUJsb2NrVG9wUGFkZGVkKG5vZGUpICYmIGlz
Tm9uRW1wdHlCbG9ja0JvdHRvbVBhZGRlZChub2RlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBDaGVja3MgaWYgdGhlIGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIHN0YXJ0cyBPUiBlbmRz
IHdpdGggYSBibGFuayBsaW5lLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNU
IG5vZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hl
dGhlciBvciBub3QgdGhlIGJsb2NrIHN0YXJ0cyBhbmQgZW5kcyB3aXRoIGEgYmxhbmsgbGluZS4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBoYXNOb25FbXB0eUJsb2NrRXh0cmFQYWRkaW5nKG5vZGUp
IHsKKyAgICAgICAgcmV0dXJuIGlzTm9uRW1wdHlCbG9ja1RvcFBhZGRlZChub2RlKSB8fCBpc05v
bkVtcHR5QmxvY2tCb3R0b21QYWRkZWQobm9kZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICog
Q2hlY2tzIHRoZSBnaXZlbiBCbG9ja1N0YXRlbWVudCBub2RlIHRvIGJlIHBhZGRlZCBpZiB0aGUg
YmxvY2sgaXMgbm90IGVtcHR5LgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNU
IG5vZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0gdW5kZWZp
bmVkLgorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrUGFkZGluZyhub2RlKSB7CisgICAgICAg
IGlmIChub2RlLmJvZHkubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaWYgKHJlcXVpcmVQYWRk
aW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc05vbkVtcHR5QmxvY2tQYWRkZWQobm9kZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrIG11c3Qg
YmUgcGFkZGVkIGJ5IGJsYW5rIGxpbmVzLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGhhc05vbkVtcHR5QmxvY2tFeHRyYVBh
ZGRpbmcobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwg
IkJsb2NrIG11c3Qgbm90IGJlIHBhZGRlZCBieSBibGFuayBsaW5lcy4iKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gewor
ICAgICAgICAiQmxvY2tTdGF0ZW1lbnQiOiBjaGVja1BhZGRpbmcKKyAgICB9OworCit9OworCit9
LHt9XSwxMjU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmls
ZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBub24tcXVvdGVkIHByb3BlcnR5IG5hbWVzIGluIG9iamVj
dCBsaXRlcmFscy4KKyAqIEBhdXRob3IgTWF0aGlhcyBCeW5lbnMgPGh0dHA6Ly9tYXRoaWFzYnlu
ZW5zLmJlLz4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgZXNwcmltYSA9IHJlcXVpcmUoImVz
cHJpbWEiKTsKKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICB2YXIgTU9ERSA9IGNvbnRleHQub3B0aW9uc1swXTsKKworICAg
IHN3aXRjaCAoTU9ERSkgeworCisgICAgICAgIGNhc2UgImFzLW5lZWRlZCI6CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIFByb3BlcnR5OiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBub2RlLmtleTsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRW5zdXJlIHRoYXQgYW55IHF1b3RlZCBwcm9wZXJ0eSBuYW1lcyByZXF1aXJlZCBxdW90
aW5nCisgICAgICAgICAgICAgICAgICAgIGlmIChrZXkudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5
cGVvZiBrZXkudmFsdWUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBlc3ByaW1hLnRv
a2VuaXplKGtleS52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vu
cy5sZW5ndGggIT09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXIgdCA9IHRva2Vuc1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2go
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0LnR5cGUgPT09ICJJZGVu
dGlmaWVyIiB8fCB0LnR5cGUgPT09ICJOdWxsIiB8fCB0LnR5cGUgPT09ICJCb29sZWFuIiB8fCB0
LnR5cGUgPT09ICJOdW1lcmljIiAmJiAiIiArICt0LnZhbHVlID09PSB0LnZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVubmVjZXNzYXJp
bHkgcXVvdGVkIHByb3BlcnR5IGB7e25hbWV9fWAgZm91bmQuIiwga2V5KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGtleSA9IG5vZGUua2V5OworICAgICAgICAgICAgICAgICAgICAvLyBFbnN1
cmUgYWxsIHByb3BlcnR5IG5hbWVzIGFyZSBxdW90ZWQKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGtleS50eXBlICE9PSAiTGl0ZXJhbCIgfHwgdHlwZW9mIGtleS52YWx1ZSAhPT0gInN0cmluZyIp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbnF1b3Rl
ZCBwcm9wZXJ0eSBge3tuYW1lfX1gIGZvdW5kLiIsIGtleSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgfQorCit9OworCit9
LHsiZXNwcmltYSI6Nn1dLDEyNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIGNob29zZSBiZXR3ZWVuIHNpbmdsZSBhbmQg
ZG91YmxlIHF1b3RlIG1hcmtzCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1h
dHRkdXZhbGwuY29tLz4sIEJyYW5kb24gUGF5dG9uCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIENvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIFFVT1RF
X1NFVFRJTkdTID0geworICAgICJkb3VibGUiOiB7CisgICAgICAgIHF1b3RlOiAiXCIiLAorICAg
ICAgICBhbHRlcm5hdGVRdW90ZTogIiciLAorICAgICAgICBkZXNjcmlwdGlvbjogImRvdWJsZXF1
b3RlIgorICAgIH0sCisgICAgInNpbmdsZSI6IHsKKyAgICAgICAgcXVvdGU6ICInIiwKKyAgICAg
ICAgYWx0ZXJuYXRlUXVvdGU6ICJcIiIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAic2luZ2xlcXVv
dGUiCisgICAgfQorfTsKKwordmFyIEFWT0lEX0VTQ0FQRSA9ICJhdm9pZC1lc2NhcGUiOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIC8qKgorICAgICAqIFZhbGlkYXRlIHRoYXQgYSBzdHJpbmcg
cGFzc2VkIGluIGlzIHN1cnJvdW5kZWQgYnkgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIKKyAgICAg
KiBAcGFyYW0gIHtzdHJpbmd9IHZhbCBUaGUgdGV4dCB0byBjaGVjay4KKyAgICAgKiBAcGFyYW0g
IHtzdHJpbmd9IGNoYXJhY3RlciBUaGUgY2hhcmFjdGVyIHRvIHNlZSBpZiBpdCdzIHN1cnJvdW5k
ZWQgYnkuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHRleHQgaXMgc3Vy
cm91bmRlZCBieSB0aGUgY2hhcmFjdGVyLCBmYWxzZSBpZiBub3QuCisgICAgICovCisgICAgZnVu
Y3Rpb24gaXNTdXJyb3VuZGVkQnkodmFsLCBjaGFyYWN0ZXIpIHsKKyAgICAgICAgcmV0dXJuIHZh
bFswXSA9PT0gY2hhcmFjdGVyICYmIHZhbFt2YWwubGVuZ3RoIC0gMV0gPT09IGNoYXJhY3RlcjsK
KyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgdmFyIHZhbCA9IG5vZGUudmFsdWUsCisgICAgICAgICAgICAgICAg
cmF3VmFsID0gbm9kZS5yYXcsCisgICAgICAgICAgICAgICAgcXVvdGVPcHRpb24gPSBjb250ZXh0
Lm9wdGlvbnNbMF0sCisgICAgICAgICAgICAgICAgc2V0dGluZ3MgPSBRVU9URV9TRVRUSU5HU1tx
dW90ZU9wdGlvbl0sCisgICAgICAgICAgICAgICAgYXZvaWRFc2NhcGUgPSBjb250ZXh0Lm9wdGlv
bnNbMV0gPT09IEFWT0lEX0VTQ0FQRSwKKyAgICAgICAgICAgICAgICBpc1ZhbGlkOworCisgICAg
ICAgICAgICBpZiAoc2V0dGluZ3MgJiYgdHlwZW9mIHZhbCA9PT0gInN0cmluZyIpIHsKKyAgICAg
ICAgICAgICAgICBpc1ZhbGlkID0gaXNTdXJyb3VuZGVkQnkocmF3VmFsLCBzZXR0aW5ncy5xdW90
ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgYXZvaWRFc2NhcGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGlzU3Vycm91bmRlZEJ5KHJhd1ZhbCwgc2V0dGlu
Z3MuYWx0ZXJuYXRlUXVvdGUpICYmIHJhd1ZhbC5pbmRleE9mKHNldHRpbmdzLnF1b3RlKSA+PSAw
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCl7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJTdHJpbmdzIG11c3QgdXNl
ICIgKyBzZXR0aW5ncy5kZXNjcmlwdGlvbiArICIuIik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTI3OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGZsYWcgdXNlIG9mIHBhcnNlSW50IHdpdGhvdXQgYSByYWRpeCBhcmd1bWVudAorICogQGF1dGhv
ciBKYW1lcyBBbGxhcmRpY2UKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7
CisgICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAg
ICAgdmFyIHJhZGl4OworCisgICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gInBh
cnNlSW50IikgeworCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCA8
IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1pc3Npbmcg
cmFkaXggcGFyYW1ldGVyLiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAg
ICAgICAgICAgICAgcmFkaXggPSBub2RlLmFyZ3VtZW50c1sxXTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBkb24ndCBhbGxvdyBub24tbnVtZXJpYyBsaXRlcmFscyBvciB1bmRlZmluZWQKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKChyYWRpeC50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9m
IHJhZGl4LnZhbHVlICE9PSAibnVtYmVyIikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChy
YWRpeC50eXBlID09PSAiSWRlbnRpZmllciIgJiYgcmFkaXgubmFtZSA9PT0gInVuZGVmaW5lZCIp
CisgICAgICAgICAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIkludmFsaWQgcmFkaXggcGFyYW1ldGVyLiIpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworCit9OworCit9LHt9XSwxMjg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBtaXNzaW5nIHNlbWljb2xv
bnMuCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAg
dmFyIE9QVF9PVVRfUEFUVEVSTiA9IC9bXFtcKFwvXCtcLV0vOworCisgICAgdmFyIGFsd2F5cyA9
IGNvbnRleHQub3B0aW9uc1swXSAhPT0gIm5ldmVyIjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisg
ICAgICogQ2hlY2tzIGEgbm9kZSB0byBzZWUgaWYgaXQncyBmb2xsb3dlZCBieSBhIHNlbWljb2xv
bi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCisgICAg
ICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tGb3JTZW1pY29s
b24obm9kZSkgeworICAgICAgICB2YXIgbGFzdFRva2VuID0gY29udGV4dC5nZXRMYXN0VG9rZW4o
bm9kZSksCisgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9k
ZSk7CisKKyAgICAgICAgaWYgKGFsd2F5cykgeworICAgICAgICAgICAgaWYgKGxhc3RUb2tlbi50
eXBlICE9PSAiUHVuY3R1YXRvciIgfHwgbGFzdFRva2VuLnZhbHVlICE9PSAiOyIpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBsYXN0VG9rZW4ubG9jLmVuZCwgIk1pc3Np
bmcgc2VtaWNvbG9uLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgaWYgKGxhc3RUb2tlbi50eXBlID09PSAiUHVuY3R1YXRvciIgJiYgbGFzdFRva2VuLnZh
bHVlID09PSAiOyIpIHsKKworICAgICAgICAgICAgICAgIGlmICghbmV4dFRva2VuIHx8ICEoT1BU
X09VVF9QQVRURVJOLnRlc3QobmV4dFRva2VuLnZhbHVlKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgbm9kZS5sb2MuZW5kLCAiRXh0cmEgc2VtaWNvbG9uLiIp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLyoqCisgICAgICogQ2hlY2tzIHRvIHNlZSBpZiB0aGVyZSdzIGEgc2VtaWNvbG9uIGFm
dGVyIGEgdmFyaWFibGUgZGVjbGFyYXRpb24uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAg
IGZ1bmN0aW9uIGNoZWNrRm9yU2VtaWNvbG9uRm9yVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKSB7
CisKKyAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCksCisgICAg
ICAgICAgICBwYXJlbnRJbmRleCA9IGFuY2VzdG9ycy5sZW5ndGggLSAxLAorICAgICAgICAgICAg
cGFyZW50ID0gYW5jZXN0b3JzW3BhcmVudEluZGV4XTsKKworICAgICAgICBpZiAoKHBhcmVudC50
eXBlICE9PSAiRm9yU3RhdGVtZW50IiB8fCBwYXJlbnQuaW5pdCAhPT0gbm9kZSkgJiYKKyAgICAg
ICAgICAgIChwYXJlbnQudHlwZSAhPT0gIkZvckluU3RhdGVtZW50IiB8fCBwYXJlbnQubGVmdCAh
PT0gbm9kZSkKKyAgICAgICAgKSB7CisgICAgICAgICAgICBjaGVja0ZvclNlbWljb2xvbihub2Rl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQ
dWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAg
ICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGNoZWNrRm9yU2VtaWNvbG9uRm9yVmFyaWFibGVE
ZWNsYXJhdGlvbiwKKyAgICAgICAgIkV4cHJlc3Npb25TdGF0ZW1lbnQiOiBjaGVja0ZvclNlbWlj
b2xvbiwKKyAgICAgICAgIlJldHVyblN0YXRlbWVudCI6IGNoZWNrRm9yU2VtaWNvbG9uLAorICAg
ICAgICAiRGVidWdnZXJTdGF0ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xvbiwKKyAgICAgICAgIkJy
ZWFrU3RhdGVtZW50IjogY2hlY2tGb3JTZW1pY29sb24sCisgICAgICAgICJDb250aW51ZVN0YXRl
bWVudCI6IGNoZWNrRm9yU2VtaWNvbG9uLAorICAgICAgICAiRW1wdHlTdGF0ZW1lbnQiOiBmdW5j
dGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIG5leHRUb2tlbjsKKworICAgICAgICAgICAg
aWYgKCFhbHdheXMpIHsKKyAgICAgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRv
a2VuQWZ0ZXIobm9kZSkgfHwgY29udGV4dC5nZXRMYXN0VG9rZW4obm9kZSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIShPUFRfT1VUX1BBVFRFUk4udGVzdChuZXh0VG9rZW4udmFsdWUpKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXh0cmEgc2VtaWNvbG9u
LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworCisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSwxMjk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gcmVxdWlyZSBzb3J0aW5nIG9mIHZhcmlh
YmxlcyB3aXRoaW4gYSBzaW5nbGUgVmFyaWFibGUgRGVjbGFyYXRpb24gYmxvY2sKKyAqIEBhdXRo
b3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgY29uZmln
dXJhdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fSwKKyAgICAgICAgaWdub3JlQ2FzZSA9
IGNvbmZpZ3VyYXRpb24uaWdub3JlQ2FzZSB8fCBmYWxzZTsKKworICAgIHJldHVybiB7CisgICAg
ICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAg
bm9kZS5kZWNsYXJhdGlvbnMucmVkdWNlKGZ1bmN0aW9uKG1lbW8sIGRlY2wpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbGFzdFZhcmlhYmxlTmFtZSA9IG1lbW8uaWQubmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVuVmFyaWFibGVOYW1lID0gZGVjbC5pZC5uYW1lOworCisgICAgICAgICAg
ICAgICAgaWYgKGlnbm9yZUNhc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdFZhcmlhYmxl
TmFtZSA9IGxhc3RWYXJpYWJsZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVuVmFyaWFibGVOYW1lID0gY3VycmVuVmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlblZhcmlhYmxl
TmFtZSA8IGxhc3RWYXJpYWJsZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQoZGVjbCwgIlZhcmlhYmxlcyB3aXRoaW4gdGhlIHNhbWUgZGVjbGFyYXRpb24gYmxvY2sg
c2hvdWxkIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSIpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWVtbzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZGVjbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBub2RlLmRl
Y2xhcmF0aW9uc1swXSk7CisgICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0sMTMwOltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxl
IHRvIGVuZm9yY2UgdGhlIG51bWJlciBvZiBzcGFjZXMgYWZ0ZXIgY2VydGFpbiBrZXl3b3Jkcwor
ICogQGF1dGhvciBOaWNrIEZpc2hlcgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8gdW5sZXNz
IHRoZSBmaXJzdCBvcHRpb24gaXMgYCJuZXZlciJgLCB0aGVuIGEgc3BhY2UgaXMgcmVxdWlyZWQK
KyAgICB2YXIgcmVxdWlyZXNTcGFjZSA9IGNvbnRleHQub3B0aW9uc1swXSAhPT0gIm5ldmVyIiwK
KyAgICAgICAgY29uZmlnID0gY29udGV4dC5vcHRpb25zWzFdIHx8IHsgY2hlY2tGdW5jdGlvbktl
eXdvcmQ6IGZhbHNlIH07CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgc2VwYXJhdGlv
biBvZiB0d28gYWRqYWNlbnQgdG9rZW5zIG1lZXRzIHRoZSBzcGFjaW5nIHJ1bGVzLCBhbmQgcmVw
b3J0IGEgcHJvYmxlbSBpZiBub3QuCisgICAgICoKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgIFRoZSBub2RlIHRvIHdoaWNoIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBiZWxvbmdzLgorICAg
ICAqIEBwYXJhbSB7VG9rZW59IGxlZnQgICAgVGhlIGZpcnN0IHRva2VuLgorICAgICAqIEBwYXJh
bSB7VG9rZW59IHJpZ2h0ICAgVGhlIHNlY29uZCB0b2tlbgorICAgICAqIEByZXR1cm5zIHt2b2lk
fQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrVG9rZW5zKG5vZGUsIGxlZnQsIHJpZ2h0KSB7
CisgICAgICAgIHZhciBoYXNTcGFjZSA9IGxlZnQucmFuZ2VbMV0gPCByaWdodC5yYW5nZVswXSwK
KyAgICAgICAgICAgIHZhbHVlID0gbGVmdC52YWx1ZTsKKworICAgICAgICBpZiAoaGFzU3BhY2Ug
IT09IHJlcXVpcmVzU3BhY2UpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJL
ZXl3b3JkIFwie3t2YWx1ZX19XCIgbXVzdCB7e25vdH19YmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFj
ZS4iLCB7CisgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgICAgIG5v
dDogcmVxdWlyZXNTcGFjZSA/ICIiIDogIm5vdCAiCisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBnaXZlbiBub2RlIChgaWZg
LCBgZm9yYCwgYHdoaWxlYCwgZXRjKSwgaGFzIHRoZSBjb3JyZWN0IHNwYWNpbmcgYWZ0ZXIgaXQu
CisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIGNoZWNrLgorICAgICAq
IEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKKyAg
ICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9kZSwgMik7CisgICAg
ICAgIGNoZWNrVG9rZW5zKG5vZGUsIHRva2Vuc1swXSwgdG9rZW5zWzFdKTsKKyAgICB9CisKKyAg
ICByZXR1cm4geworICAgICAgICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlvbiAobm9kZSkgeworICAg
ICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICAvLyBjaGVjayB0aGUgYGVsc2VgCisg
ICAgICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0g
IklmU3RhdGVtZW50IikgeworICAgICAgICAgICAgICAgIGNoZWNrVG9rZW5zKG5vZGUuYWx0ZXJu
YXRlLCBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUuYWx0ZXJuYXRlKSwgY29udGV4dC5nZXRG
aXJzdFRva2VuKG5vZGUuYWx0ZXJuYXRlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisg
ICAgICAgICJGb3JTdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIkZvck9mU3RhdGVtZW50Ijog
Y2hlY2ssCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGNoZWNrLAorICAgICAgICAiV2hpbGVT
dGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbiAo
bm9kZSkgeworICAgICAgICAgICAgY2hlY2sobm9kZSk7CisgICAgICAgICAgICAvLyBjaGVjayB0
aGUgYHdoaWxlYAorICAgICAgICAgICAgdmFyIHdoaWxlVG9rZW5zID0gY29udGV4dC5nZXRUb2tl
bnNCZWZvcmUobm9kZS50ZXN0LCAyKTsKKyAgICAgICAgICAgIGNoZWNrVG9rZW5zKG5vZGUsIHdo
aWxlVG9rZW5zWzBdLCB3aGlsZVRva2Vuc1sxXSk7CisgICAgICAgIH0sCisgICAgICAgICJTd2l0
Y2hTdGF0ZW1lbnQiOiBjaGVjaywKKyAgICAgICAgIlRyeVN0YXRlbWVudCI6IGZ1bmN0aW9uIChu
b2RlKSB7CisgICAgICAgICAgICBjaGVjayhub2RlKTsKKyAgICAgICAgICAgIC8vIGNoZWNrIHRo
ZSBgZmluYWxseWAKKyAgICAgICAgICAgIGlmIChub2RlLmZpbmFsaXplcikgeworICAgICAgICAg
ICAgICAgIGNoZWNrVG9rZW5zKG5vZGUuZmluYWxpemVyLCBjb250ZXh0LmdldFRva2VuQmVmb3Jl
KG5vZGUuZmluYWxpemVyKSwgY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUuZmluYWxpemVyKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJDYXRjaFN0YXRlbWVudCI6IGNo
ZWNrLAorICAgICAgICAiV2l0aFN0YXRlbWVudCI6IGNoZWNrLAorICAgICAgICAiRnVuY3Rpb25F
eHByZXNzaW9uIjogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChjb25maWcuY2hl
Y2tGdW5jdGlvbktleXdvcmQpIHsKKyAgICAgICAgICAgICAgICBjaGVjayhub2RlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9OworCit9LHt9XSwxMzE6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93cyBv
ciBlbmZvcmNlcyBzcGFjZXMgaW5zaWRlIG9mIGJyYWNrZXRzLgorICogQGF1dGhvciBJYW4gQ2hy
aXN0aWFuIE15ZXJzCisgKiBAY29weXJpZ2h0IDIwMTQgQnJhbmR5biBCZW5uZXR0LiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQGNvcHlyaWdodCAyMDE0IE1pY2hhZWwgRmljYXJyYS4gTm8gcmln
aHRzIHJlc2VydmVkLgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIG9wdGlvbnMgPSB7Cisg
ICAgICAgIHNwYWNlZDogY29udGV4dC5vcHRpb25zWzBdID09PSAiYWx3YXlzIiwKKyAgICAgICAg
c2luZ2xlRWxlbWVudEV4Y2VwdGlvbjogY29udGV4dC5vcHRpb25zWzFdICE9IG51bGwgJiYgISFj
b250ZXh0Lm9wdGlvbnNbMV0uc2luZ2xlVmFsdWUsCisgICAgICAgIG9iamVjdHNJbkFycmF5c0V4
Y2VwdGlvbjogY29udGV4dC5vcHRpb25zWzFdICE9IG51bGwgJiYgISFjb250ZXh0Lm9wdGlvbnNb
MV0ub2JqZWN0c0luQXJyYXlzLAorICAgICAgICBhcnJheXNJbkFycmF5c0V4Y2VwdGlvbjogY29u
dGV4dC5vcHRpb25zWzFdICE9IG51bGwgJiYgISFjb250ZXh0Lm9wdGlvbnNbMV0uYXJyYXlzSW5B
cnJheXMsCisgICAgICAgIHByb3BlcnR5TmFtZTogY29udGV4dC5vcHRpb25zWzFdID09IG51bGwg
fHwgY29udGV4dC5vcHRpb25zWzFdLnByb3BlcnR5TmFtZSA9PSBudWxsIHx8ICEhY29udGV4dC5v
cHRpb25zWzFdLnByb3BlcnR5TmFtZQorICAgIH07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAg
ICAqIERldGVybWluZXMgd2hldGhlciB0d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBoYXZlIHdoaXRl
c3BhY2UgYmV0d2VlbiB0aGVtLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxl
ZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdo
dCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90
IHRoZXJlIGlzIHNwYWNlIGJldHdlZW4gdGhlIHRva2Vucy4KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBpc1NwYWNlZChsZWZ0LCByaWdodCkgeworICAgICAgICByZXR1cm4gbGVmdC5yYW5nZVsxXSA8
IHJpZ2h0LnJhbmdlWzBdOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hl
dGhlciB0d28gYWRqYWNlbnQgdG9rZW5zIGFyZSBvbiB0aGUgc2FtZSBsaW5lLgorICAgICAqIEBw
YXJhbSB7T2JqZWN0fSBsZWZ0IC0gVGhlIGxlZnQgdG9rZW4gb2JqZWN0LgorICAgICAqIEBwYXJh
bSB7T2JqZWN0fSByaWdodCAtIFRoZSByaWdodCB0b2tlbiBvYmplY3QuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFdoZXRoZXIgb3Igbm90IHRoZSB0b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxp
bmUuCisgICAgICovCisgICAgZnVuY3Rpb24gaXNTYW1lTGluZShsZWZ0LCByaWdodCkgeworICAg
ICAgICByZXR1cm4gbGVmdC5sb2Muc3RhcnQubGluZSA9PT0gcmlnaHQubG9jLnN0YXJ0LmxpbmU7
CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXBvcnRzIHRoYXQgdGhlcmUgc2hvdWxkbid0IGJl
IGEgc3BhY2UgYWZ0ZXIgdGhlIGZpcnN0IHRva2VuCisgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgLSBUaGUgbm9kZSB0byByZXBvcnQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgorICAgICog
QHBhcmFtIHtPYmplY3RbXX0gdG9rZW5zIC0gVGhlIHRva2VucyB0byBiZSBjaGVja2VkIGZvciBz
cGFjaW5nLgorICAgICogQHJldHVybnMge3ZvaWR9CisgICAgKi8KKyAgICBmdW5jdGlvbiByZXBv
cnROb0JlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2VucykgeworICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCB0b2tlbnNbMF0ubG9jLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAiVGhlcmUg
c2hvdWxkIGJlIG5vIHNwYWNlIGFmdGVyICciICsgdG9rZW5zWzBdLnZhbHVlICsgIiciKTsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAqIFJlcG9ydHMgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBz
cGFjZSBiZWZvcmUgdGhlIGxhc3QgdG9rZW4KKyAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAt
IFRoZSBub2RlIHRvIHJlcG9ydCBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IuCisgICAgKiBAcGFy
YW0ge09iamVjdFtdfSB0b2tlbnMgLSBUaGUgdG9rZW5zIHRvIGJlIGNoZWNrZWQgZm9yIHNwYWNp
bmcuCisgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydE5v
RW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKSB7CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0ubG9jLnN0YXJ0LAorICAgICAgICAgICAgICAgICAg
ICAiVGhlcmUgc2hvdWxkIGJlIG5vIHNwYWNlIGJlZm9yZSAnIiArIHRva2Vuc1t0b2tlbnMubGVu
Z3RoIC0gMV0udmFsdWUgKyAiJyIpOworICAgIH0KKworICAgIC8qKgorICAgICogUmVwb3J0cyB0
aGF0IHRoZXJlIHNob3VsZCBiZSBhIHNwYWNlIGFmdGVyIHRoZSBmaXJzdCB0b2tlbgorICAgICog
QHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBv
ZiBhbiBlcnJvci4KKyAgICAqIEBwYXJhbSB7T2JqZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMg
dG8gYmUgY2hlY2tlZCBmb3Igc3BhY2luZy4KKyAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICov
CisgICAgZnVuY3Rpb24gcmVwb3J0UmVxdWlyZWRCZWdpbm5pbmdTcGFjZShub2RlLCB0b2tlbnMp
IHsKKyAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgdG9rZW5zWzBdLmxvYy5zdGFydCwKKyAg
ICAgICAgICAgICAgICAgICAgIkEgc3BhY2UgaXMgcmVxdWlyZWQgYWZ0ZXIgJyIgKyB0b2tlbnNb
MF0udmFsdWUgKyAiJyIpOworICAgIH0KKworICAgIC8qKgorICAgICogUmVwb3J0cyB0aGF0IHRo
ZXJlIHNob3VsZCBiZSBhIHNwYWNlIGJlZm9yZSB0aGUgbGFzdCB0b2tlbgorICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBvZiBhbiBl
cnJvci4KKyAgICAqIEBwYXJhbSB7T2JqZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMgdG8gYmUg
Y2hlY2tlZCBmb3Igc3BhY2luZy4KKyAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICovCisgICAg
ZnVuY3Rpb24gcmVwb3J0UmVxdWlyZWRFbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpIHsKKyAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5sb2Muc3Rh
cnQsCisgICAgICAgICAgICAgICAgICAgICJBIHNwYWNlIGlzIHJlcXVpcmVkIGJlZm9yZSAnIiAr
IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udmFsdWUgKyAiJyIpOworICAgIH0KKworCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogb3B0aW9ucy5w
cm9wZXJ0eU5hbWUgPyBmdW5jdGlvbiBjaGVja01lbWJlcihub2RlKSB7CisgICAgICAgICAgICBp
ZiAobm9kZS5jb21wdXRlZCkgeworICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBjb250ZXh0
LmdldFRva2Vucyhub2RlLnByb3BlcnR5LCAxLCAxKTsKKyAgICAgICAgICAgICAgICB2YXIgdG9r
ZW5BID0gdG9rZW5zWzBdLCB0b2tlbkIgPSB0b2tlbnNbMV0sCisgICAgICAgICAgICAgICAgICAg
IHRva2VuQyA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0sIHRva2VuRCA9IHRva2Vuc1t0b2tl
bnMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgaWYgKGlzU2FtZUxpbmUodG9rZW5BLCB0
b2tlbkIpIHx8IGlzU2FtZUxpbmUodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChvcHRpb25zLnNwYWNlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFp
c1NwYWNlZCh0b2tlbkEsIHRva2VuQikgJiYgaXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNl
KG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzU3BhY2VkKHRva2VuQywgdG9rZW5EKSAmJiBpc1NhbWVMaW5lKHRv
a2VuQywgdG9rZW5EKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJlcXVp
cmVkRW5kaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpc1NwYWNlZCh0b2tlbkEsIHRva2VuQikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXBvcnROb0JlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGFjZWQodG9rZW5DLCB0
b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9FbmRpbmdTcGFj
ZShub2RlLCB0b2tlbnMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IDog
ZnVuY3Rpb24oKXt9LAorCisgICAgICAgIEFycmF5RXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgaWYgKG5vZGUuZWxlbWVudHMubGVuZ3RoID09PSAwKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHRva2VucyA9
IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUpOworICAgICAgICAgICAgdmFyIHRva2VuQSA9IHRva2Vu
c1swXSwgdG9rZW5CID0gdG9rZW5zWzFdLAorICAgICAgICAgICAgICAgIHRva2VuQyA9IHRva2Vu
c1t0b2tlbnMubGVuZ3RoIC0gMl0sIHRva2VuRCA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07
CisKKyAgICAgICAgICAgIHZhciBvcGVuaW5nQnJhY2tldE11c3RCZVNwYWNlZCA9CisgICAgICAg
ICAgICAgICAgb3B0aW9ucy5vYmplY3RzSW5BcnJheXNFeGNlcHRpb24gJiYgdG9rZW5CLnZhbHVl
ID09PSAieyIgfHwKKyAgICAgICAgICAgICAgICBvcHRpb25zLmFycmF5c0luQXJyYXlzRXhjZXB0
aW9uICYmIHRva2VuQi52YWx1ZSA9PT0gIlsiIHx8CisgICAgICAgICAgICAgICAgb3B0aW9ucy5z
aW5nbGVFbGVtZW50RXhjZXB0aW9uICYmIG5vZGUuZWxlbWVudHMubGVuZ3RoID09PSAxCisgICAg
ICAgICAgICAgICAgPyAhb3B0aW9ucy5zcGFjZWQgOiBvcHRpb25zLnNwYWNlZDsKKworICAgICAg
ICAgICAgdmFyIGNsb3NpbmdCcmFja2V0TXVzdEJlU3BhY2VkID0KKyAgICAgICAgICAgICAgICBv
cHRpb25zLm9iamVjdHNJbkFycmF5c0V4Y2VwdGlvbiAmJiB0b2tlbkMudmFsdWUgPT09ICJ9IiB8
fAorICAgICAgICAgICAgICAgIG9wdGlvbnMuYXJyYXlzSW5BcnJheXNFeGNlcHRpb24gJiYgdG9r
ZW5DLnZhbHVlID09PSAiXSIgfHwKKyAgICAgICAgICAgICAgICBvcHRpb25zLnNpbmdsZUVsZW1l
bnRFeGNlcHRpb24gJiYgbm9kZS5lbGVtZW50cy5sZW5ndGggPT09IDEKKyAgICAgICAgICAgICAg
ICA/ICFvcHRpb25zLnNwYWNlZCA6IG9wdGlvbnMuc3BhY2VkOworCisgICAgICAgICAgICBpZiAo
aXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikgfHwgaXNTYW1lTGluZSh0b2tlbkMsIHRva2VuRCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAob3BlbmluZ0JyYWNrZXRNdXN0QmVTcGFjZWQgJiYgIWlz
U3BhY2VkKHRva2VuQSwgdG9rZW5CKSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnRSZXF1
aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICghb3BlbmluZ0JyYWNrZXRNdXN0QmVTcGFjZWQgJiYgaXNTcGFjZWQodG9rZW5BLCB0b2tl
bkIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydE5vQmVnaW5uaW5nU3BhY2Uobm9kZSwg
dG9rZW5zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNsb3NpbmdC
cmFja2V0TXVzdEJlU3BhY2VkICYmICFpc1NwYWNlZCh0b2tlbkMsIHRva2VuRCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRFbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNsb3NpbmdCcmFja2V0TXVzdEJlU3BhY2VkICYm
IGlzU3BhY2VkKHRva2VuQywgdG9rZW5EKSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnRO
b0VuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9LAorCisgICAgICAgIE9iamVjdEV4cHJlc3Npb246IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLnByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHRv
a2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKG5vZGUpOworICAgICAgICAgICAgdmFyIHRva2VuQSA9
IHRva2Vuc1swXSwgdG9rZW5CID0gdG9rZW5zWzFdLAorICAgICAgICAgICAgICAgIHRva2VuQyA9
IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMl0sIHRva2VuRCA9IHRva2Vuc1t0b2tlbnMubGVuZ3Ro
IC0gMV07CisgICAgICAgICAgICBpZiAoaXNTYW1lTGluZSh0b2tlbkEsIHRva2VuQikgfHwgaXNT
YW1lTGluZSh0b2tlbkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5z
cGFjZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlZCh0b2tlbkEsIHRva2Vu
QikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJlcXVpcmVkQmVnaW5uaW5nU3Bh
Y2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzU3BhY2VkKHRva2VuQywgdG9rZW5EKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVwb3J0UmVxdWlyZWRFbmRpbmdTcGFjZShub2RlLCB0b2tlbnMpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzU3BhY2VkKHRva2VuQSwgdG9rZW5CKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwb3J0Tm9CZWdpbm5pbmdTcGFjZShub2RlLCB0b2tlbnMpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkMsIHRva2VuRCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydE5vRW5kaW5nU3BhY2Uobm9kZSwgdG9r
ZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sMTMyOltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvd3Mg
b3IgZW5mb3JjZXMgc3BhY2VzIGluc2lkZSBvZiBwYXJlbnRoZXNlcy4KKyAqIEBhdXRob3IgSm9u
YXRoYW4gUmFqYXZ1b3JpCisgKiBAY29weXJpZ2h0IDIwMTQgSm9uYXRoYW4gUmFqYXZ1b3JpLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIFJFLCBNRVNT
QUdFOworCisgICAgaWYgKGNvbnRleHQub3B0aW9uc1swXSA9PT0gImFsd2F5cyIpIHsKKyAgICAg
ICAgUkUgPSAvXChbXiBcKV18W14gXChdXCkvbWc7CisgICAgICAgIE1FU1NBR0UgPSAiVGhlcmUg
bXVzdCBiZSBhIHNwYWNlIGluc2lkZSB0aGlzIHBhcmVuLiI7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgUkUgPSAvXCggfCBcKS9tZzsKKyAgICAgICAgTUVTU0FHRSA9ICJUaGVyZSBzaG91bGQgYmUg
bm8gc3BhY2VzIGluc2lkZSB0aGlzIHBhcmVuLiI7CisgICAgfQorCisKKyAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAg
IHZhciBza2lwUmFuZ2VzID0gW107CisKKyAgICAvKioKKyAgICAgKiBBZGRzIHRoZSByYW5nZSBv
ZiBhIG5vZGUgdG8gdGhlIHNldCB0byBiZSBza2lwcGVkIHdoZW4gY2hlY2tpbmcgcGFyZW5zCisg
ICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2RlIHRvIHNraXAKKyAgICAgKiBAcmV0
dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGFkZFNr
aXBSYW5nZShub2RlKSB7CisgICAgICAgIHNraXBSYW5nZXMucHVzaChub2RlLnJhbmdlKTsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBTb3J0cyB0aGUgc2tpcFJhbmdlcyBhcnJheS4gTXVzdCBi
ZSBjYWxsZWQgYmVmb3JlIHNob3VsZFNraXAKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAg
KiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHNvcnRTa2lwUmFuZ2VzKCkgeworICAg
ICAgICBza2lwUmFuZ2VzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgICAgIHJldHVy
biBhWzBdIC0gYlswXTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hl
Y2tzIGlmIGEgY2VydGFpbiBwb3NpdGlvbiBpbiB0aGUgc291cmNlIHNob3VsZCBiZSBza2lwcGVk
CisgICAgICogQHBhcmFtIHtOdW1iZXJ9IHBvcyBUaGUgMC1iYXNlZCBpbmRleCBpbiB0aGUgc291
cmNlCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgdGhlIHBvc2l0aW9uIHNob3Vs
ZCBiZSBza2lwcGVkCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBzaG91
bGRTa2lwKHBvcykgeworICAgICAgICB2YXIgaSwgbGVuLCByYW5nZTsKKyAgICAgICAgZm9yIChp
ID0gMCwgbGVuID0gc2tpcFJhbmdlcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkgeworICAgICAg
ICAgICAgcmFuZ2UgPSBza2lwUmFuZ2VzW2ldOworICAgICAgICAgICAgaWYgKHBvcyA8IHJhbmdl
WzBdKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBv
cyA8IHJhbmdlWzFdKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
KyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtOmV4aXQiOiBmdW5jdGlvbiBjaGVja1Bh
cmVuU3BhY2VzKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIG1hdGNoLAorICAgICAgICAgICAg
ICAgIG5leHRMaW5lLAorICAgICAgICAgICAgICAgIGNvbHVtbiwKKyAgICAgICAgICAgICAgICBs
aW5lID0gMSwKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBjb250ZXh0LmdldFNvdXJjZSgpLAor
ICAgICAgICAgICAgICAgIHBvcyA9IDA7CisKKyAgICAgICAgICAgIHNvcnRTa2lwUmFuZ2VzKCk7
CisKKyAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBSRS5leGVjKHNvdXJjZSkpICE9PSBudWxs
KSB7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQXQobWF0Y2guaW5kZXgpICE9PSAi
KCIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTWF0Y2hlZCBhIGNsb3NpbmcgcGFyZW4gcGF0
dGVybgorICAgICAgICAgICAgICAgICAgICBtYXRjaC5pbmRleCArPSAxOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkU2tpcChtYXRjaC5pbmRleCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChuZXh0TGluZSA9IHNvdXJjZS5pbmRleE9mKCJc
biIsIHBvcykpICE9PSAtMSAmJiBuZXh0TGluZSA8IG1hdGNoLmluZGV4KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBwb3MgPSBuZXh0TGluZSArIDE7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5lICs9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
Y29sdW1uID0gbWF0Y2guaW5kZXggLSBwb3M7CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgeyBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiB9LCBNRVNTQUdFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSwKKworCisgICAg
ICAgIC8vIFRoZXNlIG5vZGVzIGNhbiBjb250YWluIHBhcmVudGhlc2VzIHRoYXQgdGhpcyBydWxl
IGRvZXNuJ3QgY2FyZSBhYm91dAorCisgICAgICAgIExpbmVDb21tZW50OiBhZGRTa2lwUmFuZ2Us
CisKKyAgICAgICAgQmxvY2tDb21tZW50OiBhZGRTa2lwUmFuZ2UsCisKKyAgICAgICAgTGl0ZXJh
bDogYWRkU2tpcFJhbmdlCisKKyAgICB9OworCit9OworCit9LHt9XSwxMzM6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJlcXVpcmUgc3Bh
Y2VzIGFyb3VuZCBpbmZpeCBvcGVyYXRvcnMKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgT1BFUkFUT1JTID0gWworICAgICAgICAiKiIsICIv
IiwgIiUiLCAiKyIsICItIiwgIjw8IiwgIj4+IiwgIj4+PiIsICI8IiwgIjw9IiwgIj4iLCAiPj0i
LCAiaW4iLAorICAgICAgICAiaW5zdGFuY2VvZiIsICI9PSIsICIhPSIsICI9PT0iLCAiIT09Iiwg
IiYiLCAiXiIsICJ8IiwgIiYmIiwgInx8IiwgIj0iLAorICAgICAgICAiKz0iLCAiLT0iLCAiKj0i
LCAiLz0iLCAiJT0iLCAiPDw9IiwgIj4+PSIsICI+Pj49IiwgIiY9IiwgIl49IiwgInw9IiwKKyAg
ICAgICAgIj8iLCAiOiIsICIsIgorICAgIF07CisKKyAgICBmdW5jdGlvbiBpc1NwYWNlZChsZWZ0
LCByaWdodCkgeworICAgICAgICB2YXIgb3AsIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKHty
YW5nZTogW2xlZnQucmFuZ2VbMV0sIHJpZ2h0LnJhbmdlWzBdXX0sIDEsIDEpOworICAgICAgICBm
b3IgKHZhciBpID0gMSwgbCA9IHRva2Vucy5sZW5ndGggLSAxOyBpIDwgbDsgKytpKSB7CisgICAg
ICAgICAgICBvcCA9IHRva2Vuc1tpXTsKKyAgICAgICAgICAgIGlmICgKKyAgICAgICAgICAgICAg
ICBvcC50eXBlID09PSAiUHVuY3R1YXRvciIgJiYKKyAgICAgICAgICAgICAgICBPUEVSQVRPUlMu
aW5kZXhPZihvcC52YWx1ZSkgPj0gMCAmJgorICAgICAgICAgICAgICAgICh0b2tlbnNbaSAtIDFd
LnJhbmdlWzFdID49IG9wLnJhbmdlWzBdIHx8IG9wLnJhbmdlWzFdID49IHRva2Vuc1tpICsgMV0u
cmFuZ2VbMF0pCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgZnVuY3Rpb24gaXNSaWdodFNwYWNlZChsZWZ0LCByaWdodCkgeworICAgICAgICB2YXIg
b3AsIHRva2VucyA9IGNvbnRleHQuZ2V0VG9rZW5zKHtyYW5nZTogW2xlZnQucmFuZ2VbMV0sIHJp
Z2h0LnJhbmdlWzBdXX0sIDEsIDEpOworICAgICAgICBmb3IgKHZhciBpID0gMSwgbCA9IHRva2Vu
cy5sZW5ndGggLSAxOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICBvcCA9IHRva2Vuc1tpXTsK
KyAgICAgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICBvcC50eXBlID09PSAiUHVuY3R1YXRv
ciIgJiYKKyAgICAgICAgICAgICAgICBPUEVSQVRPUlMuaW5kZXhPZihvcC52YWx1ZSkgPj0gMCAm
JgorICAgICAgICAgICAgICAgIG9wLnJhbmdlWzFdID49IHRva2Vuc1tpICsgMV0ucmFuZ2VbMF0K
KyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiByZXBvcnQobm9kZSkgeworICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiSW5maXgg
b3BlcmF0b3JzIG11c3QgYmUgc3BhY2VkLiIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNr
QmluYXJ5KG5vZGUpIHsKKyAgICAgICAgaWYgKCFpc1NwYWNlZChub2RlLmxlZnQsIG5vZGUucmln
aHQpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBjaGVja1NlcXVlbmNlKG5vZGUpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAs
IGwgPSBub2RlLmV4cHJlc3Npb25zLmxlbmd0aCAtIDE7IGkgPCBsOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmICghaXNSaWdodFNwYWNlZChub2RlLmV4cHJlc3Npb25zW2ldLCBub2RlLmV4cHJlc3Np
b25zW2kgKyAxXSkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5j
dGlvbiBjaGVja0NvbmRpdGlvbmFsKG5vZGUpIHsKKyAgICAgICAgaWYgKCFpc1NwYWNlZChub2Rl
LnRlc3QsIG5vZGUuY29uc2VxdWVudCkgfHwgIWlzU3BhY2VkKG5vZGUuY29uc2VxdWVudCwgbm9k
ZS5hbHRlcm5hdGUpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1Zhcihub2RlKSB7CisgICAgICAgIGlmIChub2RlLmlu
aXQgJiYgIWlzU3BhY2VkKG5vZGUuaWQsIG5vZGUuaW5pdCkpIHsKKyAgICAgICAgICAgIHJlcG9y
dChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJBc3Np
Z25tZW50RXhwcmVzc2lvbiI6IGNoZWNrQmluYXJ5LAorICAgICAgICAiQmluYXJ5RXhwcmVzc2lv
biI6IGNoZWNrQmluYXJ5LAorICAgICAgICAiTG9naWNhbEV4cHJlc3Npb24iOiBjaGVja0JpbmFy
eSwKKyAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGNoZWNrQ29uZGl0aW9uYWwsCisg
ICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24iOiBjaGVja1NlcXVlbmNlLAorICAgICAgICAiVmFy
aWFibGVEZWNsYXJhdG9yIjogY2hlY2tWYXIKKyAgICB9OworCit9OworCit9LHt9XSwxMzQ6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJl
cXVpcmUgc3BhY2VzIGZvbGxvd2luZyByZXR1cm4sIHRocm93LCBhbmQgY2FzZQorICogQGF1dGhv
ciBNaWNoYWVsIEZpY2FycmEKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0aW9uIGNoZWNr
KG5vZGUpIHsKKyAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9k
ZSwgMiksCisgICAgICAgICAgICB2YWx1ZSA9IHRva2Vuc1swXS52YWx1ZTsKKworICAgICAgICBp
ZiAodG9rZW5zWzBdLnJhbmdlWzFdID49IHRva2Vuc1sxXS5yYW5nZVswXSkgeworICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgIktleXdvcmQgXCIiICsgdmFsdWUgKyAiXCIgbXVzdCBi
ZSBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHsKKyAgICAgICAgIlJldHVyblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgIGlmIChub2RlLmFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgY2hlY2sobm9kZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJTd2l0Y2hDYXNlIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUudGVzdCkgeworICAgICAgICAgICAgICAg
IGNoZWNrKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAiVGhyb3dT
dGF0ZW1lbnQiOiBjaGVjaworICAgIH07CisKK307CisKK30se31dLDEzNTpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUmVxdWlyZSBzcGFj
ZXMgZm9sbG93aW5nIHVuYXJ5IHdvcmQgb3BlcmF0b3JzCisgKiBAYXV0aG9yIE1pY2hhZWwgRmlj
YXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgZnVuY3Rpb24gY2hlY2sobm9kZSkgeworICAg
ICAgICB2YXIgdG9rZW5zOworICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5z
KG5vZGUsIDIpOworICAgICAgICBpZiAodG9rZW5zWzBdLnJhbmdlWzFdID49IHRva2Vuc1sxXS5y
YW5nZVswXSkgeworICAgICAgICAgICAgc3dpdGNoICh0b2tlbnNbMF0udmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlICJkZWxldGUiOgorICAgICAgICAgICAgICAgIGNhc2UgIm5ldyI6Cisg
ICAgICAgICAgICAgICAgY2FzZSAidHlwZW9mIjoKKyAgICAgICAgICAgICAgICBjYXNlICJ2b2lk
IjoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuYXJ5IHdvcmQg
b3BlcmF0b3IgXCIiICsgdG9rZW5zWzBdLnZhbHVlICsgIlwiIG11c3QgYmUgZm9sbG93ZWQgYnkg
d2hpdGVzcGFjZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgLy8gbm8gZGVmYXVsdAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHsKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBjaGVjaywKKyAgICAgICAgIlVuYXJ5
RXhwcmVzc2lvbiI6IGNoZWNrCisgICAgfTsKKworfTsKKworfSx7fV0sMTM2OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVu
c3VyZSBjb2RlIGlzIHJ1bm5pbmcgaW4gc3RyaWN0IG1vZGUuCisgKiBAYXV0aG9yIE5pY2hvbGFz
IEMuIFpha2FzCisgKiBAY29weXJpZ2h0IDIwMTMtMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBzY29wZXMgPSBb
XTsKKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgaWYgYSBnaXZlbiBub2RlIGlzICJ1c2Ug
c3RyaWN0Ii4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2su
CisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG5vZGUgaXMgYSBzdHJpY3Qg
cHJhZ21hLCBmYWxzZSBpZiBub3QuCisgICAgICogQHZvaWQKKyAgICAgKi8KKyAgICBmdW5jdGlv
biBpc1N0cmljdFByYWdtYShub2RlKSB7CisgICAgICAgIHJldHVybiAobm9kZSAmJiBub2RlLnR5
cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJgorICAgICAgICAgICAgICAgIG5vZGUuZXhw
cmVzc2lvbi52YWx1ZSA9PT0gInVzZSBzdHJpY3QiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAg
KiBXaGVuIHlvdSBlbnRlciBhIHNjb3BlLCBwdXNoIHRoZSBzdHJpY3QgdmFsdWUgZnJvbSB0aGUg
cHJldmlvdXMgc2NvcGUKKyAgICAgKiBvbnRvIHRoZSBzdGFjay4KKyAgICAgKiBAcGFyYW0ge0FT
VE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIGJlaW5nIGNoZWNrZWQuCisgICAgICogQHJldHVybnMg
e3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBlbnRlclNjb3Bl
KG5vZGUpIHsKKworICAgICAgICB2YXIgaXNTdHJpY3QgPSBmYWxzZSwKKyAgICAgICAgICAgIGlz
UHJvZ3JhbSA9IChub2RlLnR5cGUgPT09ICJQcm9ncmFtIiksCisgICAgICAgICAgICBpc1BhcmVu
dEdsb2JhbCA9IHNjb3Blcy5sZW5ndGggPT09IDEsCisgICAgICAgICAgICBpc1BhcmVudFN0cmlj
dCA9IHNjb3Blcy5sZW5ndGggPyBzY29wZXNbc2NvcGVzLmxlbmd0aCAtIDFdIDogZmFsc2U7CisK
KyAgICAgICAgLy8gbG9vayBmb3IgdGhlICJ1c2Ugc3RyaWN0IiBwcmFnbWEKKyAgICAgICAgaWYg
KGlzUHJvZ3JhbSkgeworICAgICAgICAgICAgaXNTdHJpY3QgPSBpc1N0cmljdFByYWdtYShub2Rl
LmJvZHlbMF0pIHx8IGlzUGFyZW50U3RyaWN0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgaXNTdHJpY3QgPSBpc1N0cmljdFByYWdtYShub2RlLmJvZHkuYm9keVswXSkgfHwgaXNQYXJl
bnRTdHJpY3Q7CisgICAgICAgIH0KKworICAgICAgICBzY29wZXMucHVzaChpc1N0cmljdCk7CisK
KyAgICAgICAgLy8gbmV2ZXIgd2FybiBpZiB0aGUgcGFyZW50IGlzIHN0cmljdCBvciB0aGUgZnVu
Y3Rpb24gaXMgc3RyaWN0CisgICAgICAgIGlmICghaXNQYXJlbnRTdHJpY3QgJiYgIWlzU3RyaWN0
ICYmIGlzUGFyZW50R2xvYmFsKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
TWlzc2luZyBcInVzZSBzdHJpY3RcIiBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKioKKyAgICAgKiBXaGVuIHlvdSBleGl0IGEgc2NvcGUsIHBvcCBvZmYgdGhlIHRvcCBz
Y29wZSBhbmQgc2VlIGlmIGl0J3MgdHJ1ZSBvcgorICAgICAqIGZhbHNlLgorICAgICAqIEByZXR1
cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gZXhpdFNj
b3BlKCkgeworICAgICAgICBzY29wZXMucG9wKCk7CisgICAgfQorCisgICAgcmV0dXJuIHsKKwor
ICAgICAgICAiUHJvZ3JhbSI6IGVudGVyU2NvcGUsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0
aW9uIjogZW50ZXJTY29wZSwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGVudGVyU2Nv
cGUsCisKKyAgICAgICAgIlByb2dyYW06ZXhpdCI6IGV4aXRTY29wZSwKKyAgICAgICAgIkZ1bmN0
aW9uRGVjbGFyYXRpb246ZXhpdCI6IGV4aXRTY29wZSwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVz
c2lvbjpleGl0IjogZXhpdFNjb3BlCisgICAgfTsKKworfTsKKworfSx7fV0sMTM3OltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGZsYWcgY29tcGFyaXNvbnMgdG8gdGhlIHZhbHVlIE5hTgorICogQGF1dGhvciBKYW1lcyBBbGxh
cmRpY2UKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgICJC
aW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAoIS9e
W3wmXl0kLy50ZXN0KG5vZGUub3BlcmF0b3IpICYmIG5vZGUubGVmdC5uYW1lID09PSAiTmFOIiB8
fCBub2RlLnJpZ2h0Lm5hbWUgPT09ICJOYU4iKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlVzZSB0aGUgaXNOYU4gZnVuY3Rpb24gdG8gY29tcGFyZSB3aXRoIE5hTi4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDEzODpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
VmFsaWRhdGVzIEpTRG9jIGNvbW1lbnRzIGFyZSBzeW50YWN0aWNhbGx5IGNvcnJlY3QKKyAqIEBh
dXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUmVxdWlyZW1lbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Cit2YXIgZG9jdHJpbmUgPSByZXF1aXJlKCJkb2N0cmluZSIpOworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBvcHRpb25zID0g
Y29udGV4dC5vcHRpb25zWzBdIHx8IHt9LAorICAgICAgICBwcmVmZXIgPSBvcHRpb25zLnByZWZl
ciB8fCB7fSwKKworICAgICAgICAvLyB0aGVzZSBib3RoIGRlZmF1bHQgdG8gdHJ1ZSwgc28geW91
IGhhdmUgdG8gZXhwbGljaXRseSBtYWtlIHRoZW0gZmFsc2UKKyAgICAgICAgcmVxdWlyZVJldHVy
biA9IG9wdGlvbnMucmVxdWlyZVJldHVybiA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsCisgICAg
ICAgIHJlcXVpcmVQYXJhbURlc2NyaXB0aW9uID0gb3B0aW9ucy5yZXF1aXJlUGFyYW1EZXNjcmlw
dGlvbiA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFVzaW5n
IGEgc3RhY2sgdG8gc3RvcmUgaWYgYSBmdW5jdGlvbiByZXR1cm5zIG9yIG5vdCAoaGFuZGxpbmcg
bmVzdGVkIGZ1bmN0aW9ucykKKyAgICB2YXIgZm5zID0gW107CisKKyAgICAvKioKKyAgICAgKiBX
aGVuIHBhcnNpbmcgYSBuZXcgZnVuY3Rpb24sIHN0b3JlIGl0IGluIG91ciBmdW5jdGlvbiBzdGFj
ay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAg
IGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZucy5wdXNoKHtyZXR1cm5QcmVz
ZW50OiBmYWxzZX0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEluZGljYXRlIHRoYXQgcmV0
dXJuIGhhcyBiZWVuIGZvdW5kIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSBUaGUgcmV0dXJuIG5vZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9
CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBhZGRSZXR1cm4obm9kZSkg
eworICAgICAgICB2YXIgZnVuY3Rpb25TdGF0ZSA9IGZuc1tmbnMubGVuZ3RoIC0gMV07CisKKyAg
ICAgICAgaWYgKGZ1bmN0aW9uU3RhdGUgJiYgbm9kZS5hcmd1bWVudCAhPT0gbnVsbCkgeworICAg
ICAgICAgICAgZnVuY3Rpb25TdGF0ZS5yZXR1cm5QcmVzZW50ID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8qKgorICAgICAqIFZhbGlkYXRlIHRoZSBKU0RvYyBub2RlIGFuZCBvdXRw
dXQgd2FybmluZ3MgaWYgYW55dGhpbmcgaXMgd3JvbmcuCisgICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAg
ICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrSlNEb2Mobm9kZSkgewor
ICAgICAgICB2YXIganNkb2NOb2RlID0gY29udGV4dC5nZXRKU0RvY0NvbW1lbnQobm9kZSksCisg
ICAgICAgICAgICBmdW5jdGlvbkRhdGEgPSBmbnMucG9wKCksCisgICAgICAgICAgICBoYXNSZXR1
cm5zID0gZmFsc2UsCisgICAgICAgICAgICBoYXNDb25zdHJ1Y3RvciA9IGZhbHNlLAorICAgICAg
ICAgICAgcGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKSwKKyAgICAgICAgICAgIGpzZG9jOwor
CisgICAgICAgIC8vIG1ha2Ugc3VyZSBvbmx5IHRvIHZhbGlkYXRlIEpTRG9jIGNvbW1lbnRzCisg
ICAgICAgIGlmIChqc2RvY05vZGUpIHsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
ICAgICBqc2RvYyA9IGRvY3RyaW5lLnBhcnNlKGpzZG9jTm9kZS52YWx1ZSwgeworICAgICAgICAg
ICAgICAgICAgICBzdHJpY3Q6IHRydWUsCisgICAgICAgICAgICAgICAgICAgIHVud3JhcDogdHJ1
ZSwKKyAgICAgICAgICAgICAgICAgICAgc2xvcHB5OiB0cnVlCisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9IGNhdGNoIChleCkgeworCisgICAgICAgICAgICAgICAgaWYgKC9icmFj
ZXMvaS50ZXN0KGV4Lm1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KGpzZG9jTm9kZSwgIkpTRG9jIHR5cGUgbWlzc2luZyBicmFjZS4iKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05v
ZGUsICJKU0RvYyBzeW50YXggZXJyb3IuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqc2RvYy50YWdz
LmZvckVhY2goZnVuY3Rpb24odGFnKSB7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZy50
aXRsZSkgeworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgInBhcmFtIjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghdGFnLnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIHBhcmFtZXRlciB0eXBl
IGZvciAne3tuYW1lfX0nLiIsIHsgbmFtZTogdGFnLm5hbWUgfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFnLmRlc2NyaXB0aW9u
ICYmIHJlcXVpcmVQYXJhbURlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBKU0RvYyBwYXJhbWV0ZXIgZGVz
Y3JpcHRpb24gZm9yICd7e25hbWV9fScuIiwgeyBuYW1lOiB0YWcubmFtZSB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtc1t0
YWcubmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChq
c2RvY05vZGUsICJEdXBsaWNhdGUgSlNEb2MgcGFyYW1ldGVyICd7e25hbWV9fScuIiwgeyBuYW1l
OiB0YWcubmFtZSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnLm5h
bWUuaW5kZXhPZigiLiIpID09PSAtIDEpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmFtc1t0YWcubmFtZV0gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAicmV0dXJu
IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAicmV0dXJucyI6CisgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNSZXR1cm5zID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFyZXF1aXJlUmV0dXJuICYmICFmdW5jdGlvbkRhdGEucmV0dXJuUHJlc2VudCAmJiB0YWcudHlw
ZS5uYW1lICE9PSAidm9pZCIgJiYgdGFnLnR5cGUubmFtZSAhPT0gInVuZGVmaW5lZCIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJVbmV4
cGVjdGVkIEAiICsgdGFnLnRpdGxlICsgIiB0YWc7IGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gc3Rh
dGVtZW50LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXRhZy50eXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgcmV0dXJu
IHR5cGUuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRhZy50eXBlLm5hbWUgIT09ICJ2b2lkIiAmJiAhdGFnLmRlc2Ny
aXB0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KGpzZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgcmV0dXJuIGRlc2NyaXB0aW9uLiIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAi
Y29uc3RydWN0b3IiOgorICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ29uc3RydWN0b3IgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gbm8gZGVmYXVsdAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IGNoZWNrIHRhZyBwcmVmZXJlbmNlcworICAgICAgICAgICAgICAgIGlmIChwcmVmZXIuaGFzT3du
UHJvcGVydHkodGFnLnRpdGxlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChqc2RvY05vZGUsICJVc2UgQHt7bmFtZX19IGluc3RlYWQuIiwgeyBuYW1lOiBwcmVmZXJbdGFn
LnRpdGxlXSB9KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICAvLyBjaGVjayBmb3IgZnVuY3Rpb25zIG1pc3NpbmcgQHJldHVybnMKKyAgICAgICAg
ICAgIGlmICghaGFzUmV0dXJucyAmJiAhaGFzQ29uc3RydWN0b3IpIHsKKyAgICAgICAgICAgICAg
ICBpZiAocmVxdWlyZVJldHVybiB8fCBmdW5jdGlvbkRhdGEucmV0dXJuUHJlc2VudCkgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9j
IEByZXR1cm5zIGZvciBmdW5jdGlvbi4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBwYXJhbWV0ZXJzCisgICAgICAgICAgICB2
YXIganNkb2NQYXJhbXMgPSBPYmplY3Qua2V5cyhwYXJhbXMpOworCisgICAgICAgICAgICBub2Rl
LnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtLCBpKSB7CisgICAgICAgICAgICAgICAgdmFy
IG5hbWUgPSBwYXJhbS5uYW1lOworCisgICAgICAgICAgICAgICAgaWYgKGpzZG9jUGFyYW1zW2ld
ICYmIChuYW1lICE9PSBqc2RvY1BhcmFtc1tpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiRXhwZWN0ZWQgSlNEb2MgZm9yICd7e25hbWV9fScgYnV0
IGZvdW5kICd7e2pzZG9jTmFtZX19Jy4iLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1l
OiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAganNkb2NOYW1lOiBqc2RvY1BhcmFtc1tp
XQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFw
YXJhbXNbbmFtZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NO
b2RlLCAiTWlzc2luZyBKU0RvYyBmb3IgcGFyYW1ldGVyICd7e25hbWV9fScuIiwgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICB9CisKKyAgICB9CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0
YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlv
biwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogY2hlY2tKU0RvYywKKyAgICAg
ICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGNoZWNrSlNEb2MsCisgICAgICAgICJSZXR1
cm5TdGF0ZW1lbnQiOiBhZGRSZXR1cm4KKyAgICB9OworCit9OworCit9LHsiZG9jdHJpbmUiOjR9
XSwxMzk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IEVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0cyBvZiB0eXBlb2YgYXJlIGNvbXBhcmVkIGFn
YWluc3QgYSB2YWxpZCBzdHJpbmcKKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICov
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgdmFyIFZBTElEX1RZUEVTID0gWyJzeW1ib2wiLCAidW5kZWZp
bmVkIiwgIm9iamVjdCIsICJib29sZWFuIiwgIm51bWJlciIsICJzdHJpbmciLCAiZnVuY3Rpb24i
XSwKKyAgICAgICAgT1BFUkFUT1JTID0gWyI9PSIsICI9PT0iLCAiIT0iLCAiIT09Il07CisKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiVW5hcnlFeHByZXNzaW9uIjogZnVuY3Rp
b24gKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBwYXJlbnQsIHNpYmxpbmc7CisKKyAgICAgICAg
ICAgIGlmIChub2RlLm9wZXJhdG9yID09PSAidHlwZW9mIikgeworICAgICAgICAgICAgICAgIHBh
cmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAocGFyZW50LnR5cGUgPT09ICJCaW5hcnlFeHByZXNzaW9uIiAmJiBPUEVSQVRPUlMuaW5kZXhP
ZihwYXJlbnQub3BlcmF0b3IpICE9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBzaWJsaW5n
ID0gcGFyZW50LmxlZnQgPT09IG5vZGUgPyBwYXJlbnQucmlnaHQgOiBwYXJlbnQubGVmdDsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoc2libGluZy50eXBlID09PSAiTGl0ZXJhbCIgJiYgVkFM
SURfVFlQRVMuaW5kZXhPZihzaWJsaW5nLnZhbHVlKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KHNpYmxpbmcsICJJbnZhbGlkIHR5cGVvZiBjb21wYXJp
c29uIHZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDE0MDpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBlbmZvcmNlIHZhciBkZWNsYXJhdGlvbnMgYXJlIG9ubHkgYXQgdGhlIHRvcCBvZiBhIGZ1
bmN0aW9uLgorICogQGF1dGhvciBEYW5ueSBGcml0egorICogQGF1dGhvciBHeWFuZGVlcCBTaW5n
aAorICogQGNvcHlyaWdodCAyMDE0IERhbm55IEZyaXR6LiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQGNvcHlyaWdodCAyMDE0IEd5YW5kZWVwIFNpbmdoLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24gKGNvbnRleHQpIHsKKyAgICB2YXIgZXJyb3JNZXNzYWdlID0gIkFsbCBcInZhclwiIGRl
Y2xhcmF0aW9ucyBtdXN0IGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uIHNjb3BlLiI7CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIGFueSBu
b2RlCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgc3Ry
dWN0dXJhbGx5IHJlcHJlc2VudHMgYSBkaXJlY3RpdmUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBs
b29rc0xpa2VEaXJlY3RpdmUobm9kZSkgeworICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09ICJF
eHByZXNzaW9uU3RhdGVtZW50IiAmJgorICAgICAgICAgICBub2RlLmV4cHJlc3Npb24udHlwZSA9
PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2RlLmV4cHJlc3Npb24udmFsdWUgPT09ICJzdHJpbmci
OworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB3aGV0aGVyIHRoaXMgdmFyaWFibGUg
aXMgb24gdG9wIG9mIHRoZSBibG9jayBib2R5CisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IC0gVGhlIG5vZGUgdG8gY2hlY2sKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gc3RhdGVtZW50
cyAtIGNvbGxlY3Rpb24gb2YgQVNUTm9kZXMgZm9yIHRoZSBwYXJlbnQgbm9kZSBibG9jaworICAg
ICAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHZhciBpcyBvbiB0b3Agb3RoZXJ3aXNlIGZh
bHNlCisgICAgICovCisgICAgZnVuY3Rpb24gaXNWYXJPblRvcCAobm9kZSwgc3RhdGVtZW50cykg
eworICAgICAgICB2YXIgaSA9IDAsIGwgPSBzdGF0ZW1lbnRzLmxlbmd0aDsKKworICAgICAgICAv
LyBza2lwIG92ZXIgZGlyZWN0aXZlcworICAgICAgICBmb3IgKDsgaSA8IGw7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCFsb29rc0xpa2VEaXJlY3RpdmUoc3RhdGVtZW50c1tpXSkpIHsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAoOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGVtZW50c1tpXS50eXBlICE9
PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RhdGVtZW50c1tpXSA9PT0gbm9kZSkg
eworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHdoZXRoZXIgdmFyaWFibGUgaXMgb24g
dG9wIGF0IHRoZSBnbG9iYWwgbGV2ZWwKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBU
aGUgbm9kZSB0byBjaGVjaworICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyZW50IC0gUGFyZW50
IG9mIHRoZSBub2RlCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rp
b24gZ2xvYmFsVmFyQ2hlY2sgKG5vZGUsIHBhcmVudCkgeworICAgICAgICBpZiAoIWlzVmFyT25U
b3Aobm9kZSwgcGFyZW50LmJvZHkpKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCBlcnJvck1lc3NhZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hl
Y2tzIHdoZXRoZXIgdmFyaWFibGUgaXMgb24gdG9wIGF0IGZ1bmN0aW9uYWwgYmxvY2sgc2NvcGUg
bGV2ZWwKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byBjaGVjawor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gcGFyZW50IC0gUGFyZW50IG9mIHRoZSBub2RlCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBncmFuZFBhcmVudCAtIFBhcmVudCBvZiB0aGUgbm9kZSdzIHBh
cmVudAorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGJsb2Nr
U2NvcGVWYXJDaGVjayAobm9kZSwgcGFyZW50LCBncmFuZFBhcmVudCkgeworICAgICAgICBpZiAo
ISgoZ3JhbmRQYXJlbnQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iCisgICAgICAgICAg
ICB8fCBncmFuZFBhcmVudC50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIikKKyAgICAgICAg
ICAgICYmIHBhcmVudC50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiCisgICAgICAgICAgICAmJiBp
c1Zhck9uVG9wKG5vZGUsIHBhcmVudC5ib2R5KSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsIGVycm9yTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworICAgIHJldHVybiB7CisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rpb24g
KG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9y
cygpOworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTsKKyAgICAgICAg
ICAgIHZhciBncmFuZFBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTsKKworICAgICAgICAgICAgaWYg
KG5vZGUua2luZCA9PT0gInZhciIpIHsvL2NoZWNrIHZhcmlhYmxlIGlzIGB2YXJgIHR5cGUgYW5k
IG5vdCBgbGV0YCBvciBgY29uc3RgCisgICAgICAgICAgICAgICAgaWYgKHBhcmVudC50eXBlID09
PSAiUHJvZ3JhbSIpIHsvLyBUaGF0IG1lYW5zIGl0cyBhIGdsb2JhbCB2YXJpYWJsZQorICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxWYXJDaGVjayhub2RlLCBwYXJlbnQpOworICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrU2NvcGVWYXJDaGVjayhub2Rl
LCBwYXJlbnQsIGdyYW5kUGFyZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNDE6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVu
IElJRkUgaXMgbm90IHdyYXBwZWQgaW4gcGFyZW5zCisgKiBAYXV0aG9yIElseWEgVm9sb2Rpbgor
ICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgInVzZSBzdHJpY3QiOworICAgIHZhciBzdHlsZSA9IGNvbnRleHQub3B0aW9uc1sw
XSB8fCAib3V0c2lkZSI7CisKKyAgICBmdW5jdGlvbiB3cmFwcGVkKG5vZGUpIHsKKyAgICAgICAg
dmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpLAorICAgICAg
ICAgICAgbmV4dFRva2VuID0gY29udGV4dC5nZXRUb2tlbkFmdGVyKG5vZGUpOworICAgICAgICBy
ZXR1cm4gcHJldmlvdXNUb2tlbiAmJiBwcmV2aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYKKyAg
ICAgICAgICAgIG5leHRUb2tlbiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICIpIjsKKyAgICB9CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJDYWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAiRnVuY3Rpb25FeHByZXNz
aW9uIikgeworICAgICAgICAgICAgICAgIHZhciBjYWxsRXhwcmVzc2lvbldyYXBwZWQgPSB3cmFw
cGVkKG5vZGUpLAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbkV4cHJlc3Npb25XcmFwcGVk
ID0gd3JhcHBlZChub2RlLmNhbGxlZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxFeHBy
ZXNzaW9uV3JhcHBlZCAmJiAhZnVuY3Rpb25FeHByZXNzaW9uV3JhcHBlZCkgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3JhcCBhbiBpbW1lZGlhdGUgZnVuY3Rp
b24gaW52b2NhdGlvbiBpbiBwYXJlbnRoZXNlcy4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHN0eWxlID09PSAiaW5zaWRlIiAmJiAhZnVuY3Rpb25FeHByZXNzaW9uV3JhcHBlZCkgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiV3JhcCBvbmx5IHRoZSBm
dW5jdGlvbiBleHByZXNzaW9uIGluIHBhcmVucy4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHN0eWxlID09PSAib3V0c2lkZSIgJiYgIWNhbGxFeHByZXNzaW9uV3JhcHBlZCkgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiTW92ZSB0aGUgaW52b2NhdGlv
biBpbnRvIHRoZSBwYXJlbnMgdGhhdCBjb250YWluIHRoZSBmdW5jdGlvbi4iKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9
XSwxNDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3aGVuIHJlZ2V4IGxpdGVyYWxzIGFyZSBub3Qgd3JhcHBlZCBp
biBwYXJlbnMKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1dmFsbC5j
b20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250
ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJM
aXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHRva2VuID0gY29udGV4
dC5nZXRGaXJzdFRva2VuKG5vZGUpLAorICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gdG9rZW4u
dHlwZSwKKyAgICAgICAgICAgICAgICBzb3VyY2UsCisgICAgICAgICAgICAgICAgZ3JhbmRwYXJl
bnQsCisgICAgICAgICAgICAgICAgYW5jZXN0b3JzOworCisgICAgICAgICAgICBpZiAobm9kZVR5
cGUgPT09ICJSZWd1bGFyRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBj
b250ZXh0LmdldFRva2VuQmVmb3JlKG5vZGUpOworICAgICAgICAgICAgICAgIGFuY2VzdG9ycyA9
IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7CisgICAgICAgICAgICAgICAgZ3JhbmRwYXJlbnQgPSBh
bmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdOworCisgICAgICAgICAgICAgICAgaWYgKGdy
YW5kcGFyZW50LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIiAmJiBncmFuZHBhcmVudC5vYmpl
Y3QgPT09IG5vZGUgJiYKKyAgICAgICAgICAgICAgICAgICAgKCFzb3VyY2UgfHwgc291cmNlLnZh
bHVlICE9PSAiKCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJXcmFwIHRoZSByZWdleHAgbGl0ZXJhbCBpbiBwYXJlbnMgdG8gZGlzYW1iaWd1YXRlIHRoZSBz
bGFzaC4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSwxNDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gcmVxdWlyZSBvciBkaXNhbGxvdyB5b2Rh
IGNvbXBhcmlzb25zCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3Ry
aWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4
dCkgeworCisgICAgLy8gRGVmYXVsdCB0byAibmV2ZXIiICghYWx3YXlzKSBpZiBubyBvcHRpb24K
KworICAgIHZhciBhbHdheXMgPSAoY29udGV4dC5vcHRpb25zWzBdID09PSAiYWx3YXlzIik7CisK
KyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hldGhlciBhbiBvcGVyYXRv
ciBpcyBhIGNvbXBhcmlzb24gb3BlcmF0b3IuCisgICAgICogQHBhcmFtIHtTdHJpbmd9IG9wZXJh
dG9yIFRoZSBvcGVyYXRvciB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gV2hl
dGhlciBvciBub3QgaXQgaXMgYSBjb21wYXJpc29uIG9wZXJhdG9yLgorICAgICAqLworICAgIGZ1
bmN0aW9uIGlzQ29tcGFyaXNvbk9wZXJhdG9yKG9wZXJhdG9yKSB7CisgICAgICAgIHJldHVybiAo
L14oPT18PT09fCE9fCE9PXw8fD58PD18Pj0pJC8pLnRlc3Qob3BlcmF0b3IpOworICAgIH0KKwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVu
Y3Rpb24gKG5vZGUpIHsKKworICAgICAgICAgICAgaWYgKGFsd2F5cykgeworCisgICAgICAgICAg
ICAgICAgLy8gQ29tcGFyaXNvbnMgbXVzdCBhbHdheXMgYmUgeW9kYS1zdHlsZTogaWYgKCJibHVl
IiA9PT0gY29sb3IpCisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5yaWdodC50eXBlID09PSAi
TGl0ZXJhbCIgJiYgaXNDb21wYXJpc29uT3BlcmF0b3Iobm9kZS5vcGVyYXRvcikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGxpdGVyYWwgdG8g
YmUgb24gdGhlIGxlZnQgc2lkZSBvZiAiICsgbm9kZS5vcGVyYXRvciArICIuIik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAgICAgLy8g
Q29tcGFyaXNvbnMgbXVzdCBuZXZlciBiZSB5b2RhLXN0eWxlIChkZWZhdWx0KQorCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUubGVmdC50eXBlID09PSAiTGl0ZXJhbCIgJiYgaXNDb21wYXJpc29u
T3BlcmF0b3Iobm9kZS5vcGVyYXRvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkV4cGVjdGVkIGxpdGVyYWwgdG8gYmUgb24gdGhlIHJpZ2h0IHNpZGUgb2Yg
IiArIG5vZGUub3BlcmF0b3IgKyAiLiIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgfQorCisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDE0NDpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQ29tbW9uIHV0
aWxpdGllcy4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gUHVibGljIEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qKgorICogTWVy
Z2VzIHR3byBvYmplY3RzIHRvZ2V0aGVyIGFuZCBhc3NpZ25zIHRoZSByZXN1bHQgdG8gdGhlIGlu
aXRpYWwgb2JqZWN0LiBDYW4gYmUgdXNlZCBmb3Igc2hhbGxvdyBjbG9uaW5nLgorICogQHBhcmFt
IHtPYmplY3R9IHRhcmdldCBvZiB0aGUgY2xvbmluZyBvcGVyYXRpb24KKyAqIEBwYXJhbSB7T2Jq
ZWN0fSBzb3VyY2Ugb2JqZWN0CisgKiBAcmV0dXJucyB7dm9pZH0KKyAqLworZXhwb3J0cy5taXhp
biA9IGZ1bmN0aW9uKHRhcmdldCwgc291cmNlKSB7CisgICAgT2JqZWN0LmtleXMoc291cmNlKS5m
b3JFYWNoKGZ1bmN0aW9uKGtleSkgeworICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXld
OworICAgIH0pOworfTsKKworLyoqCisgKiBNZXJnZXMgdHdvIGNvbmZpZyBvYmplY3RzLiBUaGlz
IHdpbGwgbm90IG9ubHkgYWRkIG1pc3Npbmcga2V5cywgYnV0IHdpbGwgYWxzbyBtb2RpZnkgdmFs
dWVzIHRvIG1hdGNoLgorICogQHBhcmFtIHtPYmplY3R9IGJhc2UgY29uZmlnIG9iamVjdAorICog
QHBhcmFtIHtPYmplY3R9IGN1c3RvbSBjb25maWcgb2JqZWN0LiBPdmVycmlkZXMgaW4gdGhpcyBj
b25maWcgb2JqZWN0IHdpbGwgdGFrZSBwcmlvcml0eSBvdmVyIGJhc2UuCisgKiBAcmV0dXJucyB7
T2JqZWN0fSBtZXJnZWQgY29uZmlnIG9iamVjdC4KKyAqLworZXhwb3J0cy5tZXJnZUNvbmZpZ3Mg
PSBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MoYmFzZSwgY3VzdG9tKSB7CisKKyAgICBPYmplY3Qua2V5
cyhjdXN0b20pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeworICAgICAgICB2YXIgcHJvcGVydHkg
PSBjdXN0b21ba2V5XTsKKworICAgICAgICBpZiAoa2V5ID09PSAicGx1Z2lucyIpIHsKKyAgICAg
ICAgICAgIGlmICghYmFzZVtrZXldKSB7CisgICAgICAgICAgICAgICAgYmFzZVtrZXldID0gW107
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb3BlcnR5LmZvckVhY2goZnVuY3Rpb24g
KHBsdWdpbikgeworICAgICAgICAgICAgICAgIC8vIHNraXAgZHVwbGljYXRlcworICAgICAgICAg
ICAgICAgIGlmIChiYXNlW2tleV0uaW5kZXhPZihwbHVnaW4pID09PSAtMSkgeworICAgICAgICAg
ICAgICAgICAgICBiYXNlW2tleV0ucHVzaChwbHVnaW4pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKEFycmF5LmlzQXJyYXkoYmFzZVtrZXldKSAmJiAhQXJyYXkuaXNBcnJheShwcm9wZXJ0eSkg
JiYgdHlwZW9mIHByb3BlcnR5ID09PSAibnVtYmVyIikgeworICAgICAgICAgICAgLy9hc3N1bWUg
dGhhdCB3ZSBhcmUganVzdCBvdmVycmlkaW5nIGZpcnN0IGF0dHJpYnV0ZQorICAgICAgICAgICAg
YmFzZVtrZXldWzBdID0gY3VzdG9tW2tleV07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAib2JqZWN0IiAmJiAhQXJyYXku
aXNBcnJheShwcm9wZXJ0eSkpIHsKKyAgICAgICAgICAgIC8vIGJhc2Vba2V5XSBtaWdodCBub3Qg
ZXhpc3QsIHNvIGJlIGNhcmVmdWwgd2l0aCByZWN1cnNpb24gaGVyZQorICAgICAgICAgICAgYmFz
ZVtrZXldID0gbWVyZ2VDb25maWdzKGJhc2Vba2V5XSB8fCB7fSwgY3VzdG9tW2tleV0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmFzZVtrZXldID0gY3VzdG9tW2tleV07CisgICAg
ICAgIH0KKyAgICB9KTsKKworICAgIHJldHVybiBiYXNlOworfTsKKworfSx7fV19LHt9LFs5XSko
OSkKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9DaGVja21hcmsuc3ZnIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL0NoZWNrbWFyay5zdmcKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg0NjUwMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9DaGVja21hcmsuc3Zn
CkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4K
KzwhLS0gQ29weXJpZ2h0IMKpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAt
LT4KKzxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmci
IHZpZXdCb3g9IjAgMCAxNSAxNSI+CisgICAgPGNpcmNsZSBmaWxsPSJub25lIiBzdHJva2U9ImJs
YWNrIiBjeD0iNy41IiBjeT0iNy41IiByPSI2Ii8+CisgICAgPHBhdGggZmlsbD0ibm9uZSIgc3Ry
b2tlPSJibGFjayIgZD0iTSA1LjUgNy41IEwgNyAxMC41IEwgMTAuNSA0LjUiLz4KKzwvc3ZnPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL0dl
YXIuc3ZnIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL0dlYXIu
c3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZWU0YzcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvR2Vh
ci5zdmcKQEAgLTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYt
OCI/PgorPCEtLSBDb3B5cmlnaHQgwqkgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIC0tPgorPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAw
L3N2ZyIgdmlld0JveD0iMCAwIDE1IDE1Ij4KKyAgICA8cGF0aCBmaWxsPSJibGFjayIgZD0iTSA0
LjQ2MTkgMTEuOTU3IEMgNC4wNzE5IDEyLjM0OCAzLjQzNDkgMTIuMzQ4IDMuMDQxOSAxMS45NTcg
QyAyLjg1NDkgMTEuNzY4IDIuNzUxOSAxMS41MTggMi43NTE5IDExLjI0OCBDIDIuNzUwOSAxMC45
NzggMi44NTQ5IDEwLjcyNyAzLjA0MTkgMTAuNTM5IEwgNC4wNjA5IDkuNTIgQyAzLjk3MjkgOS4z
NzIgMy44ODY5IDkuMjIyIDMuODE4OSA5LjA2IEMgMy43NDE5IDguODgyIDMuNjkxOSA4LjY5IDMu
NjQyOSA4LjUgTCAzLjEyMDkgOC40OTkgTCAyLjUwMDkgOC40OTkgQyAxLjk0ODkgOC41IDEuNTAw
OSA4LjA1MiAxLjUwMTkgNy40OTkgQyAxLjUwMDkgNi45NDggMS45NDg5IDYuNSAyLjUwMDkgNi40
OTkgTCAzLjEyMDkgNi40OTkgTCAzLjY0MTkgNi41IEMgMy42OTE5IDYuMzEgMy43NDE5IDYuMTE4
IDMuODE3OSA1Ljk0IEwgMy44MTc5IDUuOTM5IEMgMy44ODY5IDUuNzc4IDMuOTc5OSA1LjYzIDQu
MDY2OSA1LjQ4MSBMIDMuNjk4OSA1LjExMyBMIDMuMDU1OSA0LjQ3MSBDIDIuODY4OSA0LjI4MyAy
Ljc2NTkgNC4wMzIgMi43NjU5IDMuNzYzIEMgMi43NjU5IDMuNDk1IDIuODY4OSAzLjI0NCAzLjA1
NzkgMy4wNTcgQyAzLjI0NDkgMi44NjggMy40OTU5IDIuNzY2IDMuNzY0OSAyLjc2NiBDIDQuMDMy
OSAyLjc2NiA0LjI4MzkgMi44NjkgNC40NzE5IDMuMDU2IEwgNS4xMTI5IDMuNjk4IEwgNS40ODE5
IDQuMDY3IEMgNS42MzA5IDMuOTc4IDUuNzc3OSAzLjg4NyA1LjkzOTkgMy44MTcgTCA1Ljk0MDkg
My44MTggQyA1Ljk1NzkgMy44MSA1Ljk3NjkgMy44MDYgNS45OTM5IDMuNzk5IEMgNS45OTY5IDMu
Nzk4IDUuOTk4OSAzLjc5OCA2LjAwMDkgMy43OTcgQyA2LjE2MTkgMy43MzEgNi4zMjk5IDMuNjgy
IDYuNTAwOSAzLjY0MSBMIDYuNTAwOSAzLjEyIEwgNi41MDA5IDIuNDk5IEMgNi41MDA5IDEuOTQ5
IDYuOTQ4OSAxLjQ5OSA3LjUwMDkgMS40OTkgQyA4LjA1MTkgMS40OTkgOC41MDA5IDEuOTQ5IDgu
NTAwOSAyLjQ5OSBMIDguNTAwOSAzLjEyIEwgOC41MDA5IDMuNjQxIEMgOC42NzE5IDMuNjgyIDgu
ODM5OSAzLjczMSA5LjAwMDkgMy43OTcgQyA5LjAwMzkgMy43OTggOS4wMDc5IDMuNzk5IDkuMDEw
OSAzLjggQyA5LjAyNjkgMy44MDcgOS4wNDQ5IDMuODEgOS4wNjA5IDMuODE3IEwgOS4wNjE5IDMu
ODE3IEMgOS4yMjE5IDMuODg1IDkuMzY3OSAzLjk3NyA5LjUxNzkgNC4wNjUgTCAxMC41Mzk5IDMu
MDQyIEMgMTAuNzI4OSAyLjg1NCAxMC45Nzk5IDIuNzUgMTEuMjQ4OSAyLjc1IEMgMTEuNTE4OSAy
Ljc1IDExLjc2OTkgMi44NTQgMTEuOTU4OSAzLjA0MyBDIDEyLjE0NjkgMy4yMzEgMTIuMjUwOSAz
LjQ4MyAxMi4yNDk5IDMuNzUyIEMgMTIuMjQ5OSA0LjAyMSAxMi4xNDY5IDQuMjc0IDExLjk1Nzkg
NC40NjIgTCAxMC45MzU5IDUuNDg0IEMgMTEuMDIzOSA1LjYzMiAxMS4xMTQ5IDUuNzc5IDExLjE4
MzkgNS45MzkgQyAxMS4xODM5IDUuOTM5IDExLjE4MzkgNS45NCAxMS4xODQ5IDUuOTQgQyAxMS4x
OTA5IDUuOTU2IDExLjE5MzkgNS45NzQgMTEuMTk5OSA1Ljk5IEMgMTEuMjAwOSA1Ljk5MyAxMS4y
MDE5IDUuOTk2IDExLjIwMjkgNiBDIDExLjI2OTkgNi4xNjEgMTEuMzE3OSA2LjMyOSAxMS4zNTg5
IDYuNSBMIDExLjg4MDkgNi40OTkgTCAxMi41MDA5IDYuNDk5IEMgMTMuMDUxOSA2LjQ5OSAxMy41
MDA5IDYuOTQ4IDEzLjUwMDkgNy40OTkgQyAxMy41MDA5IDguMDUyIDEzLjA1MjkgOC41IDEyLjUw
MDkgOC40OTkgTCAxMS44ODA5IDguNDk5IEwgMTEuMzU4OSA4LjUgQyAxMS4zMTc5IDguNjcxIDEx
LjI2OTkgOC44MzkgMTEuMjAyOSA5IEMgMTEuMjAyOSA5LjAwMiAxMS4yMDE5IDkuMDA1IDExLjIw
MDkgOS4wMDggQyAxMS4xOTM5IDkuMDI0IDExLjE5MDkgOS4wNDMgMTEuMTgzOSA5LjA2IEMgMTEu
MTE0OSA5LjIyMyAxMS4wMjc5IDkuMzc0IDEwLjkzODkgOS41MjMgTCAxMS4zMDI5IDkuODg3IEwg
MTEuOTQzOSAxMC41MjggQyAxMi4xMzE5IDEwLjcxNiAxMi4yMzQ5IDEwLjk2OCAxMi4yMzQ5IDEx
LjIzNSBDIDEyLjIzNDkgMTEuNTA1IDEyLjEzMTkgMTEuNzU2IDExLjk0MjkgMTEuOTQzIEMgMTEu
NzU1OSAxMi4xMzIgMTEuNTA0OSAxMi4yMzUgMTEuMjM1OSAxMi4yMzUgQyAxMC45Njg5IDEyLjIz
NSAxMC43MTc5IDEyLjEzMiAxMC41Mjg5IDExLjk0NCBMIDkuODg3OSAxMS4zMDIgTCA5LjUxOTkg
MTAuOTM0IEMgOS4zNjk5IDExLjAyIDkuMjIzOSAxMS4xMTQgOS4wNjA5IDExLjE4MyBDIDguODgy
OSAxMS4yNTggOC42OTA5IDExLjMwOSA4LjUwMDkgMTEuMzU4IEwgOC41MDA5IDExLjg3OSBMIDgu
NTAwOSAxMi40OTkgQyA4LjUwMDkgMTMuMDUyIDguMDUyOSAxMy41IDcuNTAwOSAxMy40OTkgQyA2
Ljk0ODkgMTMuNSA2LjUwMDkgMTMuMDUyIDYuNTAwOSAxMi40OTkgTCA2LjUwMDkgMTEuODc5IEwg
Ni41MDA5IDExLjM1OCBDIDYuMzEwOSAxMS4zMDkgNi4xMTk5IDExLjI1OSA1Ljk0MTkgMTEuMTg0
IEMgNS45NDE5IDExLjE4MyA1Ljk0MDkgMTEuMTgzIDUuOTM5OSAxMS4xODMgQyA1Ljc3ODkgMTEu
MTEzIDUuNjMyOSAxMS4wMjIgNS40ODM5IDEwLjkzNiBMIDQuNDYxOSAxMS45NTcgWiAgTSA1Ljk5
OTkgMTIuNSBDIDYuMDAwOSAxMy4zMjUgNi42NzU5IDE0IDcuNTAwOSAxNCBDIDguMzI1OSAxNCA5
LjAwMDkgMTMuMzI1IDkuMDAxOSAxMi41IEwgOS4wMDA5IDExLjcyNSBDIDkuMTQ3OSAxMS42NzMg
OS4yOTA5IDExLjYxNiA5LjQyOTkgMTEuNTUxIEwgMTAuMTc1OSAxMi4yOTggQyAxMC43NTk5IDEy
Ljg4MSAxMS43MTQ5IDEyLjg4IDEyLjI5NjkgMTIuMjk3IEwgMTIuMjk4OSAxMi4yOTcgQyAxMi41
ODk5IDEyLjAwNSAxMi43MzQ5IDExLjYxOSAxMi43MzQ5IDExLjIzNSBDIDEyLjczNDkgMTAuODUy
IDEyLjU4OTkgMTAuNDY3IDEyLjI5NzkgMTAuMTc1IEwgMTEuNTUxOSA5LjQyOSBDIDExLjYxNzkg
OS4yODkgMTEuNjczOSA5LjE0NiAxMS43MjU5IDkgTCAxMi41MDA5IDguOTk5IEMgMTMuMzI1OSA5
IDE0LjAwMDkgOC4zMjUgMTQuMDAwOSA3LjUgQyAxNC4wMDA5IDYuNjc0IDEzLjMyNTkgNiAxMi41
MDA5IDUuOTk5IEwgMTEuNzI1OSA2IEMgMTEuNjczOSA1Ljg1MyAxMS42MTc5IDUuNzEgMTEuNTUx
OSA1LjU3MSBMIDEyLjI5NzkgNC44MjUgQyAxMi41ODg5IDQuNTMzIDEyLjczNDkgNC4xNDggMTIu
NzM0OSAzLjc2NCBDIDEyLjczNDkgMy4zNzkgMTIuNTg5OSAyLjk5NSAxMi4yOTg5IDIuNzA0IEwg
MTIuMjk2OSAyLjcwMiBDIDExLjcxNDkgMi4xMTkgMTAuNzU5OSAyLjExOSAxMC4xNzY5IDIuNzAy
IEwgOS40Mjk5IDMuNDQ5IEMgOS4yODk5IDMuMzgyIDkuMTQ3OSAzLjMyNyA5LjAwMDkgMy4yNzUg
TCA5LjAwMDkgMi40OTkgQyA5LjAwMDkgMS42NzQgOC4zMjU5IDAuOTk5IDcuNTAwOSAwLjk5OSBD
IDYuNjc1OSAwLjk5OSA2LjAwMDkgMS42NzQgNi4wMDA5IDIuNDk5IEwgNi4wMDA5IDMuMjc1IEMg
NS44NTQ5IDMuMzI3IDUuNzEwOSAzLjM4MyA1LjU3MDkgMy40NDkgTCA0LjgyNDkgMi43MDMgQyA0
LjI0MTkgMi4xMiAzLjI4NjkgMi4xMiAyLjcwMzkgMi43MDMgTCAyLjcwMjkgMi43MDMgQyAyLjQx
MTkgMi45OTUgMi4yNjU5IDMuMzc5IDIuMjY1OSAzLjc2MyBDIDIuMjY1OSA0LjE0OCAyLjQxMTkg
NC41MzIgMi43MDI5IDQuODI0IEwgMy40NDk5IDUuNTcxIEMgMy4zODM5IDUuNzEgMy4zMjg5IDUu
ODUzIDMuMjc1OSA2IEwgMi41MDA5IDUuOTk5IEMgMS42NzU5IDYgMS4wMDA5IDYuNjc0IDEuMDAw
OSA3LjUgQyAxLjAwMDkgOC4zMjUgMS42NzU5IDkgMi41MDA5IDkgTCAzLjI3NTkgOSBDIDMuMzI3
OSA5LjE0NiAzLjM4MzkgOS4yODkgMy40NDk5IDkuNDI5IEwgMi43MDM5IDEwLjE3NSBDIDIuNDEx
OSAxMC40NjcgMi4yNjQ5IDEwLjg1MiAyLjI2NTkgMTEuMjM2IEMgMi4yNjQ5IDExLjYyMSAyLjQx
MjkgMTIuMDA2IDIuNzAyOSAxMi4yOTYgTCAyLjcwMzkgMTIuMjk3IEMgMy4yODY5IDEyLjg4IDQu
MjQxOSAxMi44OCA0LjgyNDkgMTIuMjk3IEwgNS41NzE5IDExLjU1MSBDIDUuNzEwOSAxMS42MTYg
NS44NTM5IDExLjY3MyA2LjAwMDkgMTEuNzI1IEwgNS45OTk5IDEyLjUgWiIvPgorICAgIDxwYXRo
IGZpbGw9ImJsYWNrIiBkPSJNIDcuNSA1IEMgNi4xMTggNSA1IDYuMTE5IDUgNy41IEMgNSA4Ljg4
MSA2LjExOCAxMCA3LjUgMTAgQyA4Ljg4MSAxMCAxMCA4Ljg4MSAxMCA3LjUgQyAxMCA2LjExOSA4
Ljg4MSA1IDcuNSA1IE0gNy41IDUuNiBDIDguNTQ4IDUuNiA5LjQgNi40NTIgOS40IDcuNSBDIDku
NCA4LjU0OCA4LjU0OCA5LjQgNy41IDkuNCBDIDYuNDUyIDkuNCA1LjYgOC41NDggNS42IDcuNSBD
IDUuNiA2LjQ1MiA2LjQ1MiA1LjYgNy41IDUuNiIvPgorPC9zdmc+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKaW5kZXggOWRiMjllNC4uOWFhOTdiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1s
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbApAQCAt
MzAsNiArMzAsNyBAQAogCiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJFeHRlcm5h
bC9Db2RlTWlycm9yL2NvZGVtaXJyb3IuY3NzIj4KIAorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iVmlld3MvQW5hbHl6ZXJCYW5uZXIuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9IlZpZXdzL0FwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LmNzcyI+
CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9BcHBsaWNhdGlvbkNhY2hl
SWNvbnMuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL0JveE1v
ZGVsRGV0YWlsc1NlY3Rpb25Sb3cuY3NzIj4KQEAgLTkwLDYgKzkxLDkgQEAKICAgICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL0xheWVyVHJlZVNpZGViYXJQYW5lbC5jc3MiPgog
ICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvTGF5b3V0VGltZWxpbmVPdmVy
dmlld0dyYXBoLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9M
YXlvdXRUaW1lbGluZVZpZXcuY3NzIj4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
IlZpZXdzL0xpbmVNYXJrZXIuY3NzIj4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
IlZpZXdzL0xpbmVNZXNzYWdlLmNzcyI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSJWaWV3cy9MaW5lTWVzc2FnZUdyb3VwLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJWaWV3cy9Mb2dDb250ZW50Vmlldy5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iVmlld3MvTG9nSWNvbi5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iVmlld3MvTWFpbi5jc3MiPgpAQCAtMTc0LDYgKzE3OCw3IEBACiAgICAgPHNjcmlw
dCBzcmM9IkJhc2UvVXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3JjPSJF
eHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJF
eHRlcm5hbC9FU0xpbnQvZXNsaW50LmpzIj48L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3JjPSJQ
cm90b2NvbC9BcHBsaWNhdGlvbkNhY2hlT2JzZXJ2ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJQcm90b2NvbC9DU1NPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CkBAIC0yMDIsNiArMjA3
LDcgQEAKICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RpbWVsaW5lLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RpbWVsaW5lUmVjb3JkLmpzIj48L3NjcmlwdD4KIAorICAg
IDxzY3JpcHQgc3JjPSJNb2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL0FwcGxpY2F0aW9uQ2FjaGVGcmFtZS5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9BcHBsaWNhdGlvbkNhY2hlTWFuaWZlc3QuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQmFja0ZvcndhcmRFbnRyeS5qcyI+PC9zY3Jp
cHQ+CkBAIC0zMDgsNiArMzE0LDcgQEAKIAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9BY3RpdmF0
ZUJ1dHRvbk5hdmlnYXRpb25JdGVtLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmll
d3MvQWN0aXZhdGVCdXR0b25Ub29sYmFySXRlbS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IlZpZXdzL0FuYWx5emVyQmFubmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvQXBwbGljYXRpb25DYWNoZURldGFpbHNTaWRlYmFyUGFuZWwuanMiPjwvc2NyaXB0Pgog
ICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9BcHBsaWNhdGlvbkNhY2hlRnJhbWVDb250ZW50Vmlldy5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0FwcGxpY2F0aW9uQ2FjaGVGcmFt
ZVRyZWVFbGVtZW50LmpzIj48L3NjcmlwdD4KQEAgLTM5NSw2ICs0MDIsOSBAQAogICAgIDxzY3Jp
cHQgc3JjPSJWaWV3cy9MYXlvdXRUaW1lbGluZURhdGFHcmlkTm9kZS5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9IlZpZXdzL0xheW91dFRpbWVsaW5lT3ZlcnZpZXdHcmFwaC5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0xheW91dFRpbWVsaW5lVmlldy5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0xpbmVNYXJrZXIuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9MaW5lTWVzc2FnZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlZpZXdzL0xpbmVNZXNzYWdlR3JvdXAuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJWaWV3cy9Mb2dDb250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IlZpZXdzL0xvZ1RyZWVFbGVtZW50LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvTWV0cmljc1N0eWxlRGV0YWlsc1BhbmVsLmpzIj48L3NjcmlwdD4KQEAgLTQ1Niw2ICs0
NjYsNyBAQAogCiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0NvZGVNaXJyb3JFZGl0aW5n
Q29udHJvbGxlci5qcyI+PC9zY3JpcHQ+CiAKKyAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMv
QW5hbHl6ZXJNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxl
cnMvQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3Jj
PSJDb250cm9sbGVycy9CcmFuY2hNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iQ29udHJvbGxlcnMvQ1NTU3R5bGVNYW5hZ2VyLmpzIj48L3NjcmlwdD4KQEAgLTQ4MCw2ICs0
OTEsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9Qcm9iZU1hbmFnZXIuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvUnVudGltZU1hbmFnZXIuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9BbmFseXplck1hbmFnZXIu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9Tb3VyY2VNYXBNYW5h
Z2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvU3RvcmFnZU1h
bmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9UaW1lbGlu
ZU1hbmFnZXIuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9BbmFseXplck1lc3NhZ2UuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3YjQ1NAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9BbmFseXplck1lc3NhZ2Uu
anMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5BbmFseXplck1l
c3NhZ2UgPSBmdW5jdGlvbihzb3VyY2VDb2RlLCB0ZXh0LCBsaW5lLCBjb2x1bW4sIHJ1bGVJZCkK
K3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICB0aGlzLl9zb3Vy
Y2VDb2RlID0gc291cmNlQ29kZTsKKyAgICB0aGlzLl90ZXh0ID0gdGV4dDsKKyAgICB0aGlzLl9s
aW5lID0gbGluZTsKKyAgICB0aGlzLl9jb2x1bW4gPSBjb2x1bW47CisgICAgdGhpcy5fcnVsZUlk
ID0gcnVsZUlkOworfTsKKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2FnZS5wcm90b3R5cGUg
PSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UsCisKKyAg
ICBnZXQgdGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdGV4dDsKKyAgICB9LAor
CisgICAgZ2V0IGxpbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmU7CisgICAg
fSwKKworICAgIGdldCBjb2x1bW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVt
bjsKKyAgICB9LAorCisgICAgZ2V0IHJ1bGVJZCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fcnVsZUlkOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5BbmFseXplck1lc3NhZ2UucHJv
dG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNl
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNl
LmpzCmluZGV4IDdhMjQ1YzMuLjI3OGU5MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9SZXNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvUmVzb3VyY2UuanMKQEAgLTQzNiw2ICs0MzYs
MTIgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX3NjcmlwdHMgfHwgW107CiAgICAgfSwKIAorICAgIGdldCBjYW5CZUFuYWx5emVkKCkg
eworICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUu
U2NyaXB0KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9LAorCiAgICAgc2NyaXB0Rm9yTG9jYXRpb246IGZ1bmN0aW9uKHNvdXJjZUNvZGVMb2Nh
dGlvbikKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCEodGhpcyBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5Tb3VyY2VNYXBSZXNvdXJjZSkpOwpAQCAtNzAxLDYgKzcwNywxMSBAQCBXZWJJ
bnNwZWN0b3IuUmVzb3VyY2UucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgY29va2llW1dl
Ykluc3BlY3Rvci5SZXNvdXJjZS5VUkxDb29raWVLZXldID0gdGhpcy51cmwuaGFzaDsKICAgICAg
ICAgY29va2llW1dlYkluc3BlY3Rvci5SZXNvdXJjZS5NYWluUmVzb3VyY2VDb29raWVLZXldID0g
dGhpcy5pc01haW5SZXNvdXJjZSgpOworICAgIH0sCisKKyAgICBoYW5kbGVDdXJyZW50UmV2aXNp
b25Db250ZW50Q2hhbmdlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9uZWVkc0Fu
YWx5c2lzID0gdHJ1ZTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZS5qcyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCmluZGV4IDhlZjBiNTgu
LjNjZDIzNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9Tb3VyY2VDb2RlLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCkBAIC0zNCw2ICszNCw3IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlID0gZnVuY3Rpb24oKQogCiAgICAgdGhpcy5fc291cmNlTWFwcyA9IG51bGw7
CiAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwID0gbnVsbDsKKyAgICB0aGlzLl9uZWVkc0Fu
YWx5c2lzID0gdHJ1ZTsKIH07CiAKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLkV2ZW50ID0gewpA
QCAtMTIxLDYgKzEyMiwyMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlLkV2ZW50LkZvcm1hdHRlckRpZENoYW5nZSk7CiAgICAgfSwKIAorICAgIGdldCBjYW5C
ZUFuYWx5emVkKCkgeworICAgICAgICAvLyBUbyBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2Vz
LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSwKKworICAgIGdldCBuZWVkc0FuYWx5c2lz
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9uZWVkc0FuYWx5c2lzOworICAgIH0sCisK
KyAgICBzZXQgbmVlZHNBbmFseXNpcyh2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX25lZWRz
QW5hbHlzaXMgPSAhIXZhbHVlOworICAgIH0sCisKICAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rp
b24oY2FsbGJhY2spCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0eXBlb2YgY2FsbGJh
Y2sgPT09ICJmdW5jdGlvbiIpOwpAQCAtMTc4LDYgKzE5NCwxMSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9vcmlnaW5hbFJldmlz
aW9uOwogICAgIH0sCiAKKyAgICBnZXQgY29udGVudFJlY2VpdmVkKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9jb250ZW50UmVjZWl2ZWQ7CisgICAgfSwKKwogICAgIG1hcmtDb250ZW50
QXNTdGFsZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fY29udGVudFJlY2VpdmVk
ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvU291cmNlQ29kZVJldmlzaW9uLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGVSZXZpc2lvbi5qcwppbmRleCBjZWI3YTNiLi5k
MmI3NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
b2RlbHMvU291cmNlQ29kZVJldmlzaW9uLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlUmV2aXNpb24uanMKQEAgLTg0LDcgKzg0LDEy
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUmV2aXNpb24ucHJvdG90eXBlID0gewogICAgIGNv
cHk6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVSZXZpc2lvbih0aGlzLl9zb3VyY2VDb2RlLCB0aGlzLl9jb250ZW50LCB0aGlzLl9j
b250ZW50SXNCYXNlNjRFbmNvZGVkKTsKLSAgICB9CisgICAgfSwKKworICAgIGhhbmRsZUN1cnJl
bnRSZXZpc2lvbkNvbnRlbnRDaGFuZ2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNvbnNv
bGUubG9nKCdjaGFuZ2VkJyk7CisgICAgfSwKIH07CiAKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
UmV2aXNpb24ucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5SZXZpc2lvbi5wcm90
b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9BbmFseXplckJhbm5lci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9BbmFseXplckJhbm5lci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOTIzYjEzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0FuYWx5emVyQmFubmVyLmNzcwpAQCAtMCwwICsxLDE5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy5hbmFseXplci1iYW5uZXIgeworICAgIGJvcmRlci1ib3R0b206IDFw
eCBzb2xpZCByZ2IoMTc5LCAxNzksIDE3OSk7CisKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgdG9wOiAtMjJweDsKKyAgICBsZWZ0OiAwOworICAgIHJpZ2h0OiAwOworICAgIGhlaWdodDog
MjJweDsKKworICAgIHRleHQtYWxpZ246IHJpZ2h0OworCisgICAgd2hpdGUtc3BhY2U6IG5vd3Jh
cDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworCisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdG9w
OworICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDIwMG1zOworICAgIHRyYW5zaXRpb24tdGltaW5n
LWZ1bmN0aW9uOiBlYXNlLWluOworCisgICAgei1pbmRleDogNTAwOworfQorCisuYW5hbHl6ZXIt
YmFubmVyLnNob3dpbmcgeworICAgIHRvcDogMDsKKyAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5j
dGlvbjogZWFzZS1vdXQ7Cit9CisKKy5hbmFseXplci1iYW5uZXIubm8tYW5hbHl6ZXItYmFubmVy
LXRyYW5zaXRpb24sCisuc3VwcG9ydHMtYW5hbHl6ZXItYmFubmVyLm5vLWFuYWx5emVyLWJhbm5l
ci10cmFuc2l0aW9uIHsKKyAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwICFpbXBvcnRhbnQ7Cit9
CisKKy5zdXBwb3J0cy1hbmFseXplci1iYW5uZXIgeworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6
IHRvcDsKKyAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAyMDBtczsKKyAgICB0cmFuc2l0aW9uLXRp
bWluZy1mdW5jdGlvbjogZWFzZS1pbjsKK30KKworLnN1cHBvcnRzLWFuYWx5emVyLWJhbm5lci5z
aG93aW5nLWFuYWx5emVyLWJhbm5lciB7CisgICAgdG9wOiAyMnB4ICFpbXBvcnRhbnQ7CisgICAg
dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2Utb3V0OworfQorCisuYW5hbHl6ZXItYmFu
bmVyID4gOmZpcnN0LWNoaWxkIHsKKyAgICBtYXJnaW4tbGVmdDogOHB4ICFpbXBvcnRhbnQ7Cit9
CisKKy5hbmFseXplci1iYW5uZXIgPiA6bGFzdC1jaGlsZCB7CisgICAgbWFyZ2luLXJpZ2h0OiA4
cHggIWltcG9ydGFudDsKK30KKworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbiB7CisgICAgbWFy
Z2luOiAxcHggNHB4OworCisgICAgcGFkZGluZy1sZWZ0OiA2cHg7CisgICAgcGFkZGluZy1yaWdo
dDogNnB4OworCisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworCisgICAgYm9yZGVyLXJh
ZGl1czogNHB4OworICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNDYsIDE0NiwgMTQ2KTsKKwor
ICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7
CisgICAgYm94LXNoYWRvdzogbm9uZTsKKworICAgIGxpbmUtaGVpZ2h0OiAxMXB4OworCisgICAg
aGVpZ2h0OiAxOXB4OworCisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIHZlcnRpY2FsLWFs
aWduOiB0b3A7CisKKyAgICBvdXRsaW5lLW9mZnNldDogLTJweDsKK30KKworLmFuYWx5emVyLWJh
bm5lciA+IGJ1dHRvbiA+IC5nbHlwaCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworCisg
ICAgd2lkdGg6IDdweDsKKyAgICBoZWlnaHQ6IDExcHg7Cit9CisKK2JvZHkubWFjLXBsYXRmb3Jt
LmxlZ2FjeSAuYW5hbHl6ZXItYmFubmVyID4gYnV0dG9uID4gLmdseXBoIHsKKyAgICBoZWlnaHQ6
IDdweDsKK30KKworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbjpkaXNhYmxlZCA+IC5nbHlwaCB7
CisgICAgb3BhY2l0eTogMC42NTsKK30KKworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbjphY3Rp
dmU6bm90KDpkaXNhYmxlZCkgeworICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNDEsIDE0MSwg
MTQxKTsKKyAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCBy
Z2IoMjAwLCAyMDAsIDIwMCksIHJnYigyMTgsIDIxOCwgMjE4KSk7CisgICAgYm94LXNoYWRvdzog
cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMzKSAwIDFweCAwLCBpbnNldCByZ2IoMTY1LCAxNjUsIDE2
NSkgMCAxcHggMXB4OworfQorCisuYW5hbHl6ZXItYmFubmVyID4gYnV0dG9uOmRpc2FibGVkIHsK
KyAgICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTk1LCAxOTUsIDE5NSk7CisgICAgYmFja2dyb3Vu
ZC1pbWFnZTogbm9uZTsKK30KKworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbi5zZWdtZW50ZWQu
bGVmdCB7CisgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CisgICAgYm9yZGVyLWJvdHRv
bS1yaWdodC1yYWRpdXM6IDA7CisKKyAgICBtYXJnaW4tcmlnaHQ6IDA7CisKKyAgICBwYWRkaW5n
LWxlZnQ6IDZweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiA2cHg7Cit9CisKKy5hbmFseXplci1iYW5u
ZXIgPiBidXR0b24uc2VnbWVudGVkLmxlZnQgPiAuZ2x5cGggeworICAgIGJhY2tncm91bmQtaW1h
Z2U6IC13ZWJraXQtY2FudmFzKGFuYWx5emVyLWJhbm5lci1wcmV2aW91cy1hcnJvdy1ub3JtYWwp
OworICAgIGJhY2tncm91bmQtc2l6ZTogN3B4IDExcHg7CisgICAgYmFja2dyb3VuZC1yZXBlYXQ6
IG5vLXJlcGVhdDsKK30KKworYm9keS5tYWMtcGxhdGZvcm0ubGVnYWN5IC5hbmFseXplci1iYW5u
ZXIgPiBidXR0b24uc2VnbWVudGVkLmxlZnQgPiAuZ2x5cGggeworICAgIGJhY2tncm91bmQtc2l6
ZTogN3B4IDdweDsKK30KKworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbi5zZWdtZW50ZWQubGVm
dDphY3RpdmU6bm90KDpkaXNhYmxlZCkgPiAuZ2x5cGggeworICAgIGJhY2tncm91bmQtaW1hZ2U6
IC13ZWJraXQtY2FudmFzKGFuYWx5emVyLWJhbm5lci1wcmV2aW91cy1hcnJvdy1ub3JtYWwtYWN0
aXZlKTsKK30KKworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbi5zZWdtZW50ZWQucmlnaHQgewor
ICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CisgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJh
ZGl1czogMDsKKworICAgIG1hcmdpbi1sZWZ0OiAtMXB4OworCisgICAgcGFkZGluZy1sZWZ0OiA1
cHg7CisgICAgcGFkZGluZy1yaWdodDogN3B4OworfQorCisuYW5hbHl6ZXItYmFubmVyID4gYnV0
dG9uLnNlZ21lbnRlZC5yaWdodCA+IC5nbHlwaCB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogLXdl
YmtpdC1jYW52YXMoYW5hbHl6ZXItYmFubmVyLW5leHQtYXJyb3ctbm9ybWFsKTsKKyAgICBiYWNr
Z3JvdW5kLXNpemU6IDdweCAxMXB4OworICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7
Cit9CisKK2JvZHkubWFjLXBsYXRmb3JtLmxlZ2FjeSAuYW5hbHl6ZXItYmFubmVyID4gYnV0dG9u
LnNlZ21lbnRlZC5yaWdodCA+IC5nbHlwaCB7CisgICAgYmFja2dyb3VuZC1zaXplOiA3cHggN3B4
OworfQorCisuYW5hbHl6ZXItYmFubmVyID4gYnV0dG9uLnNlZ21lbnRlZC5yaWdodDphY3RpdmU6
bm90KDpkaXNhYmxlZCkgPiAuZ2x5cGggeworICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQt
Y2FudmFzKGFuYWx5emVyLWJhbm5lci1uZXh0LWFycm93LW5vcm1hbC1hY3RpdmUpOworfQorCisu
YW5hbHl6ZXItYmFubmVyID4gYnV0dG9uLnNlZ21lbnRlZCB7CisgICAgbWluLXdpZHRoOiAyMnB4
OworICAgIHBhZGRpbmctdG9wOiAzcHg7CisgICAgcGFkZGluZy1ib3R0b206IDJweDsKK30KKwor
Ym9keS5tYWMtcGxhdGZvcm0ubGVnYWN5IC5hbmFseXplci1iYW5uZXIgPiBidXR0b24uc2VnbWVu
dGVkIHsKKyAgICBwYWRkaW5nLXRvcDogMnB4OworICAgIHBhZGRpbmctYm90dG9tOiAzcHg7Cit9
CisKKy5hbmFseXplci1iYW5uZXIgPiBidXR0b24uc2VnbWVudGVkOmFjdGl2ZSB7CisgICAgei1p
bmRleDogMTAwOworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworLmFuYWx5emVyLWJhbm5l
ciA+IGxhYmVsIHsKKyAgICBtYXJnaW46IDAgNnB4OworICAgIGxpbmUtaGVpZ2h0OiAyMXB4Owor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
QW5hbHl6ZXJCYW5uZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9BbmFseXplckJhbm5lci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mZTM2ODkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvQW5hbHl6ZXJCYW5uZXIuanMKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIgPSBmdW5jdGlvbihkZWxlZ2F0ZSwg
ZWxlbWVudCkgeworICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKworICAgIHRo
aXMuX2RlbGVnYXRlID0gZGVsZWdhdGUgfHwgbnVsbDsgLy8gRm9yIGluc3RhbmNlIGEgY29udGVu
dCB2aWV3LgorCisgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQgfHwgZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7CisgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3Bl
Y3Rvci5BbmFseXplckJhbm5lci5TdHlsZUNsYXNzTmFtZSk7CisKKyAgICB0aGlzLl9yZXN1bHRD
b3VudExhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTsKKyAgICB0aGlzLl9l
bGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX3Jlc3VsdENvdW50TGFiZWwpOworCisgICAgdGhpcy5f
cHJldmlvdXNSZXN1bHRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsK
KyAgICB0aGlzLl9wcmV2aW91c1Jlc3VsdEJ1dHRvbi5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rv
ci5BbmFseXplckJhbm5lci5TZWdtZW50ZWRCdXR0b25TdHlsZUNsYXNzTmFtZSk7CisgICAgdGhp
cy5fcHJldmlvdXNSZXN1bHRCdXR0b24uY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuQW5hbHl6
ZXJCYW5uZXIuTGVmdFNlZ21lbnRCdXR0b25TdHlsZUNsYXNzTmFtZSk7CisgICAgdGhpcy5fcHJl
dmlvdXNSZXN1bHRCdXR0b24uZGlzYWJsZWQgPSB0cnVlOworICAgIHRoaXMuX3ByZXZpb3VzUmVz
dWx0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fcHJldmlvdXNSZXN1bHRC
dXR0b25DbGlja2VkLmJpbmQodGhpcykpOworICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQo
dGhpcy5fcHJldmlvdXNSZXN1bHRCdXR0b24pOworCisgICAgdmFyIHByZXZpb3VzUmVzdWx0QnV0
dG9uR2x5cGhFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgcHJl
dmlvdXNSZXN1bHRCdXR0b25HbHlwaEVsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJCYW5uZXIuU2VnbWVudEdseXBoU3R5bGVDbGFzc05hbWUpOworICAgIHRoaXMuX3By
ZXZpb3VzUmVzdWx0QnV0dG9uLmFwcGVuZENoaWxkKHByZXZpb3VzUmVzdWx0QnV0dG9uR2x5cGhF
bGVtZW50KTsKKworICAgIHRoaXMuX25leHRSZXN1bHRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJidXR0b24iKTsKKyAgICB0aGlzLl9uZXh0UmVzdWx0QnV0dG9uLmNsYXNzTGlzdC5h
ZGQoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlNlZ21lbnRlZEJ1dHRvblN0eWxlQ2xhc3NO
YW1lKTsKKyAgICB0aGlzLl9uZXh0UmVzdWx0QnV0dG9uLmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVj
dG9yLkFuYWx5emVyQmFubmVyLlJpZ2h0U2VnbWVudEJ1dHRvblN0eWxlQ2xhc3NOYW1lKTsKKyAg
ICB0aGlzLl9uZXh0UmVzdWx0QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTsKKyAgICB0aGlzLl9uZXh0
UmVzdWx0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5fbmV4dFJlc3VsdEJ1
dHRvbkNsaWNrZWQuYmluZCh0aGlzKSk7CisgICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZCh0
aGlzLl9uZXh0UmVzdWx0QnV0dG9uKTsKKworICAgIHZhciBuZXh0UmVzdWx0QnV0dG9uR2x5cGhF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgbmV4dFJlc3VsdEJ1
dHRvbkdseXBoRWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rvci5BbmFseXplckJhbm5l
ci5TZWdtZW50R2x5cGhTdHlsZUNsYXNzTmFtZSk7CisgICAgdGhpcy5fbmV4dFJlc3VsdEJ1dHRv
bi5hcHBlbmRDaGlsZChuZXh0UmVzdWx0QnV0dG9uR2x5cGhFbGVtZW50KTsKKworICAgIHRoaXMu
X2RvbmVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKKyAgICB0aGlz
Ll9kb25lQnV0dG9uLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEb25lIik7
CisgICAgdGhpcy5fZG9uZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2hh
bmRsZURvbmVCdXR0b25DbGlja2VkLmJpbmQodGhpcykpOworICAgIHRoaXMuX2VsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy5fZG9uZUJ1dHRvbik7CisKKyAgICB0aGlzLl9udW1iZXJPZlJlc3VsdHNN
ZXNzYWdlczsKKworICAgIHRoaXMuX2hpZGVLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0KG51bGwsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
LktleS5Fc2NhcGUsIHRoaXMuaGlkZS5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsKKworICAg
IHRoaXMuX2dlbmVyYXRlQnV0dG9uc0dseXBoc0lmTmVlZGVkKCk7Cit9OworCitXZWJJbnNwZWN0
b3IuT2JqZWN0LmFkZENvbnN0cnVjdG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5BbmFseXplckJh
bm5lcik7CisKK1dlYkluc3BlY3Rvci5BbmFseXplckJhbm5lci5TdHlsZUNsYXNzTmFtZSA9ICJh
bmFseXplci1iYW5uZXIiOworV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlN1cHBvcnRzQW5h
bHl6ZXJCYW5uZXJTdHlsZUNsYXNzTmFtZSA9ICJzdXBwb3J0cy1hbmFseXplci1iYW5uZXIiOwor
V2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlNob3dpbmdBbmFseXplckJhbm5lclN0eWxlQ2xh
c3NOYW1lID0gInNob3dpbmctYW5hbHl6ZXItYmFubmVyIjsKK1dlYkluc3BlY3Rvci5BbmFseXpl
ckJhbm5lci5Ob1RyYW5zaXRpb25TdHlsZUNsYXNzTmFtZSA9ICJuby1hbmFseXplci1iYW5uZXIt
dHJhbnNpdGlvbiI7CitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU2hvd2luZ1N0eWxlQ2xh
c3NOYW1lID0gInNob3dpbmciOworV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlNlZ21lbnRl
ZEJ1dHRvblN0eWxlQ2xhc3NOYW1lID0gInNlZ21lbnRlZCI7CitXZWJJbnNwZWN0b3IuQW5hbHl6
ZXJCYW5uZXIuTGVmdFNlZ21lbnRCdXR0b25TdHlsZUNsYXNzTmFtZSA9ICJsZWZ0IjsKK1dlYklu
c3BlY3Rvci5BbmFseXplckJhbm5lci5SaWdodFNlZ21lbnRCdXR0b25TdHlsZUNsYXNzTmFtZSA9
ICJyaWdodCI7CitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU2VnbWVudEdseXBoU3R5bGVD
bGFzc05hbWUgPSAiZ2x5cGgiOworCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuRXZlbnQg
PSB7CisgICAgRGlkU2hvdzogImFuYWx5emVyLWJhbm5lci1kaWQtc2hvdyIsCisgICAgRGlkSGlk
ZTogImFuYWx5emVyLWJhbm5lci1kaWQtaGlkZSIKK307CisKK1dlYkluc3BlY3Rvci5BbmFseXpl
ckJhbm5lci5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5BbmFs
eXplckJhbm5lciwKKworICAgIC8vIFB1YmxpYworCisgICAgZ2V0IGRlbGVnYXRlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTsKKyAgICB9LAorCisgICAgc2V0IGRlbGVn
YXRlKG5ld0RlbGVnYXRlKQorICAgIHsKKyAgICAgICAgdGhpcy5fZGVsZWdhdGUgPSBuZXdEZWxl
Z2F0ZSB8fCBudWxsOworICAgIH0sCisKKyAgICBnZXQgZWxlbWVudCgpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fZWxlbWVudDsKKyAgICB9LAorCisgICAgZ2V0IG51bWJlck9mTWVzc2Fn
ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX251bWJlck9mTWVzc2FnZXM7CisgICAg
fSwKKworICAgIHNldCBudW1iZXJPZk1lc3NhZ2VzKG51bWJlck9mTWVzc2FnZXMpCisgICAgewor
ICAgICAgICBpZiAobnVtYmVyT2ZNZXNzYWdlcyA9PT0gdW5kZWZpbmVkIHx8IGlzTmFOKG51bWJl
ck9mTWVzc2FnZXMpKQorICAgICAgICAgICAgbnVtYmVyT2ZNZXNzYWdlcyA9IG51bGw7CisKKyAg
ICAgICAgdGhpcy5fbnVtYmVyT2ZSZXN1bHRzID0gbnVtYmVyT2ZNZXNzYWdlczsKKworICAgICAg
ICB0aGlzLl9wcmV2aW91c1Jlc3VsdEJ1dHRvbi5kaXNhYmxlZCA9IHRoaXMuX25leHRSZXN1bHRC
dXR0b24uZGlzYWJsZWQgPSAobnVtYmVyT2ZNZXNzYWdlcyA8PSAwKTsKKworICAgICAgICBpZiAo
bnVtYmVyT2ZNZXNzYWdlcyA9PT0gbnVsbCkKKyAgICAgICAgICAgIHRoaXMuX3Jlc3VsdENvdW50
TGFiZWwudGV4dENvbnRlbnQgPSAiIjsKKyAgICAgICAgZWxzZSBpZiAobnVtYmVyT2ZNZXNzYWdl
cyA8PSAwKQorICAgICAgICAgICAgdGhpcy5fcmVzdWx0Q291bnRMYWJlbC50ZXh0Q29udGVudCA9
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTm90IGZvdW5kIik7CisgICAgICAgIGVsc2UgaWYgKG51
bWJlck9mTWVzc2FnZXMgPT09IDEpCisgICAgICAgICAgICB0aGlzLl9yZXN1bHRDb3VudExhYmVs
LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIxIG1hdGNoIik7CisgICAgICAg
IGVsc2UgaWYgKG51bWJlck9mTWVzc2FnZXMgPiAxKQorICAgICAgICAgICAgdGhpcy5fcmVzdWx0
Q291bnRMYWJlbC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJWQgbWF0Y2hl
cyIpLmZvcm1hdChudW1iZXJPZk1lc3NhZ2VzKTsKKyAgICB9LAorCisgICAgZ2V0IHRhcmdldEVs
ZW1lbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldEVsZW1lbnQ7CisgICAg
fSwKKworICAgIHNldCB0YXJnZXRFbGVtZW50KGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5fdGFyZ2V0RWxlbWVudCkgeworICAgICAgICAgICAgdmFyIG9sZFRhcmdldEVsZW1lbnQg
PSB0aGlzLl90YXJnZXRFbGVtZW50OworCisgICAgICAgICAgICB0aGlzLl90YXJnZXRFbGVtZW50
LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLk5vVHJhbnNpdGlvblN0
eWxlQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldEVsZW1lbnQuY2xhc3NMaXN0
LnJlbW92ZShXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU3VwcG9ydHNBbmFseXplckJhbm5l
clN0eWxlQ2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldEVsZW1lbnQuY2xhc3NM
aXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU2hvd2luZ0FuYWx5emVyQmFu
bmVyU3R5bGVDbGFzc05hbWUpOworCisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlz
dC5hZGQoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLk5vVHJhbnNpdGlvblN0eWxlQ2xhc3NO
YW1lKTsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNw
ZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU2hvd2luZ1N0eWxlQ2xhc3NOYW1lKTsKKworICAgICAgICAg
ICAgZnVuY3Rpb24gZGVsYXllZFdvcmsoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG9sZFRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuQW5hbHl6ZXJC
YW5uZXIuTm9UcmFuc2l0aW9uU3R5bGVDbGFzc05hbWUpOworICAgICAgICAgICAgICAgIHRoaXMu
X2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuTm9U
cmFuc2l0aW9uU3R5bGVDbGFzc05hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBEZWxheSBzbyB3ZSBjYW4gcmVtb3ZlIHRoZSBubyB0cmFuc2l0aW9uIHN0eWxlIGNsYXNzIGFm
dGVyIHRoZSBvdGhlciBzdHlsZSBjaGFuZ2VzIGFyZSBjb21taXR0ZWQuCisgICAgICAgICAgICBz
ZXRUaW1lb3V0KGRlbGF5ZWRXb3JrLmJpbmQodGhpcyksIDApOworICAgICAgICB9CisKKyAgICAg
ICAgdGhpcy5fdGFyZ2V0RWxlbWVudCA9IGVsZW1lbnQgfHwgbnVsbDsKKworICAgICAgICBpZiAo
dGhpcy5fdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldEVsZW1lbnQuY2xh
c3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU3VwcG9ydHNBbmFseXplckJh
bm5lclN0eWxlQ2xhc3NOYW1lKTsKKyAgICB9LAorCisgICAgZ2V0IHNob3dpbmcoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFdlYkluc3Bl
Y3Rvci5BbmFseXplckJhbm5lci5TaG93aW5nU3R5bGVDbGFzc05hbWUpOworICAgIH0sCisKKyAg
ICBzaG93OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90
YXJnZXRFbGVtZW50KTsKKyAgICAgICAgaWYgKCF0aGlzLl90YXJnZXRFbGVtZW50KQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3RhcmdldEVsZW1l
bnQucGFyZW50Tm9kZSk7CisgICAgICAgIGlmICghdGhpcy5fdGFyZ2V0RWxlbWVudC5wYXJlbnRO
b2RlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0aGlzLl9lbGVtZW50LnBh
cmVudE5vZGUgIT09IHRoaXMuX3RhcmdldEVsZW1lbnQucGFyZW50Tm9kZSkKKyAgICAgICAgICAg
IHRoaXMuX3RhcmdldEVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fZWxlbWVu
dCwgdGhpcy5fdGFyZ2V0RWxlbWVudCk7CisKKyAgICAgICAgZnVuY3Rpb24gZGVsYXllZFdvcmso
KQorICAgICAgICB7CisgICAgICAgICAgICB0aGlzLl90YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5h
ZGQoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlNob3dpbmdBbmFseXplckJhbm5lclN0eWxl
Q2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWJJ
bnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU2hvd2luZ1N0eWxlQ2xhc3NOYW1lKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIERlbGF5IGFkZGluZyB0aGUgY2xhc3NlcyBpbiBjYXNlIHRoZSB0YXJn
ZXQgZWxlbWVudCBhbmQvb3IgdGhlIGFuYWx5emVyIGJhbm5lciB3ZXJlIGp1c3QgYWRkZWQgdG8K
KyAgICAgICAgLy8gdGhlIGRvY3VtZW50LiBBZGRpbmcgdGhlIGNsYXNzIHJpZ2h0IGF3YXkgd2ls
bCBwcmV2ZW50IHRoZSBhbmltYXRpb24gZnJvbSB3b3JraW5nIHRoZSBmaXJzIHRpbWUuCisgICAg
ICAgIHNldFRpbWVvdXQoZGVsYXllZFdvcmsuYmluZCh0aGlzKSwgMCk7CisKKyAgICAgICAgdGhp
cy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLkV2
ZW50LkRpZFNob3cpOworICAgIH0sCisKKyAgICBoaWRlOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90YXJnZXRFbGVtZW50KTsKKyAgICAgICAgaWYgKCF0
aGlzLl90YXJnZXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMu
X3RhcmdldEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5u
ZXIuU2hvd2luZ0FuYWx5emVyQmFubmVyU3R5bGVDbGFzc05hbWUpOworICAgICAgICB0aGlzLl9l
bGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlNob3dp
bmdTdHlsZUNsYXNzTmFtZSk7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLkV2ZW50LkRpZEhpZGUpOworICAgIH0sCisK
KyAgICAvLyBQcml2YXRlCisKKyAgICBfcHJldmlvdXNSZXN1bHRCdXR0b25DbGlja2VkOiBmdW5j
dGlvbihldmVudCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSAmJiB0eXBlb2Yg
dGhpcy5fZGVsZWdhdGUuQW5hbHl6ZXJCYW5uZXJSZXZlYWxQcmV2aW91c1Jlc3VsdCA9PT0gImZ1
bmN0aW9uIikKKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLkFuYWx5emVyQmFubmVyUmV2ZWFs
UHJldmlvdXNSZXN1bHQodGhpcyk7CisgICAgfSwKKworICAgIF9uZXh0UmVzdWx0QnV0dG9uQ2xp
Y2tlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUg
JiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLkFuYWx5emVyQmFubmVyUmV2ZWFsTmV4dFJlc3VsdCA9
PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlLkFuYWx5emVyQmFubmVy
UmV2ZWFsTmV4dFJlc3VsdCh0aGlzKTsKKyAgICB9LAorCisgICAgX2hhbmRsZURvbmVCdXR0b25D
bGlja2VkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuaGlkZSgpOworICAg
IH0sCisKKyAgICBfZ2VuZXJhdGVCdXR0b25zR2x5cGhzSWZOZWVkZWQ6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGlmIChXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuX2dlbmVyYXRlZEJ1
dHRvbnNHbHlwaHMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViSW5zcGVjdG9y
LkFuYWx5emVyQmFubmVyLl9nZW5lcmF0ZWRCdXR0b25zR2x5cGhzID0gdHJ1ZTsKKworICAgICAg
ICB2YXIgc3BlY2lmaWNhdGlvbnMgPSB7fTsKKyAgICAgICAgc3BlY2lmaWNhdGlvbnNbIm5vcm1h
bCJdID0ge2ZpbGxDb2xvcjogWzgxLCA4MSwgODFdfTsKKyAgICAgICAgc3BlY2lmaWNhdGlvbnNb
Im5vcm1hbC1hY3RpdmUiXSA9IHtmaWxsQ29sb3I6IFszNywgMzcsIDM3XX07CisKKyAgICAgICAg
dmFyIGZvcndhcmRBcnJvdywgYmFja0Fycm93OworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLlBs
YXRmb3JtLmlzTGVnYWN5TWFjT1MpIHsKKyAgICAgICAgICAgIGZvcndhcmRBcnJvdyA9IHtzcmM6
ICJJbWFnZXMvTGVnYWN5L0ZvcndhcmRBcnJvdy5zdmciLCB3aWR0aDogNywgaGVpZ2h0OiA3fTsK
KyAgICAgICAgICAgIGJhY2tBcnJvdyA9IHtzcmM6ICJJbWFnZXMvTGVnYWN5L0JhY2tBcnJvdy5z
dmciLCB3aWR0aDogNywgaGVpZ2h0OiA3fTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGZvcndhcmRBcnJvdyA9IHtzcmM6ICJJbWFnZXMvRm9yd2FyZEFycm93LnN2ZyIsIHdpZHRoOiA3
LCBoZWlnaHQ6IDExfTsKKyAgICAgICAgICAgIGJhY2tBcnJvdyA9IHtzcmM6ICJJbWFnZXMvQmFj
a0Fycm93LnN2ZyIsIHdpZHRoOiA3LCBoZWlnaHQ6IDExfTsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciBnZWFyID0ge3NyYzogIkltYWdlcy9HZWFyLnN2ZyIsIHdpZHRoOiAxNiwgaGVpZ2h0OiAx
Nn07CisKKyAgICAgICAgZ2VuZXJhdGVDb2xvcmVkSW1hZ2VzRm9yQ1NTKGJhY2tBcnJvdy5zcmMs
IHNwZWNpZmljYXRpb25zLCBiYWNrQXJyb3cud2lkdGgsIGJhY2tBcnJvdy5oZWlnaHQsICJhbmFs
eXplci1iYW5uZXItcHJldmlvdXMtYXJyb3ctIik7CisgICAgICAgIGdlbmVyYXRlQ29sb3JlZElt
YWdlc0ZvckNTUyhmb3J3YXJkQXJyb3cuc3JjLCBzcGVjaWZpY2F0aW9ucywgZm9yd2FyZEFycm93
LndpZHRoLCBmb3J3YXJkQXJyb3cuaGVpZ2h0LCAiYW5hbHl6ZXItYmFubmVyLW5leHQtYXJyb3ct
Iik7CisgICAgICAgIGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUyhnZWFyLnNyYywgc3BlY2lm
aWNhdGlvbnMsIGdlYXIud2lkdGgsIGdlYXIuaGVpZ2h0LCAiYW5hbHl6ZXItYmFubmVyLWdlYXIt
Iik7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLnByb3RvdHlwZS5f
X3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRlbnRCcm93c2VyLmpz
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudEJyb3dz
ZXIuanMKaW5kZXggM2NjM2Q0ZC4uNzc2MWNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudEJyb3dzZXIuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVudEJyb3dzZXIuanMKQEAg
LTQyLDYgKzQyLDggQEAgV2ViSW5zcGVjdG9yLkNvbnRlbnRCcm93c2VyID0gZnVuY3Rpb24oZWxl
bWVudCwgZGVsZWdhdGUsIGRpc2FibGVCYWNrRm9yd2FyZCkKICAgICB0aGlzLl9maW5kQmFubmVy
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIuRXZlbnQuRGlkU2hvdywg
dGhpcy5fZmluZEJhbm5lckRpZFNob3csIHRoaXMpOwogICAgIHRoaXMuX2ZpbmRCYW5uZXIuYWRk
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRmluZEJhbm5lci5FdmVudC5EaWRIaWRlLCB0aGlz
Ll9maW5kQmFubmVyRGlkSGlkZSwgdGhpcyk7CiAKKyAgICB0aGlzLl9hbmFseXplckJhbm5lciA9
IG5ldyBXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIodGhpcyk7CisKICAgICB0aGlzLl9zYXZl
S2V5Ym9hcmRTaG9ydGN1dCA9IG5ldyBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJ
bnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiUyIs
IHRoaXMuX3NhdmUuYmluZCh0aGlzKSk7CiAgICAgdGhpcy5fc2F2ZUFzS2V5Ym9hcmRTaG9ydGN1
dCA9IG5ldyBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dChXZWJJbnNwZWN0b3IuS2V5Ym9h
cmRTaG9ydGN1dC5Nb2RpZmllci5TaGlmdCB8IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0
Lk1vZGlmaWVyLkNvbW1hbmRPckNvbnRyb2wsICJTIiwgdGhpcy5fc2F2ZUFzLmJpbmQodGhpcykp
OwogCkBAIC0yNjgsNiArMjcwLDE3IEBAIFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGN1cnJlbnRDb250ZW50Vmlldy5yZXZlYWxOZXh0U2VhcmNoUmVz
dWx0KCFmaW5kQmFubmVyLnNob3dpbmcpOwogICAgIH0sCiAKKyAgICBhY3RpdmF0ZUFuYWx5emVy
QmFubmVyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl91cGRhdGVBbmFseXplckJh
bm5lcih0aGlzLmNvbnRlbnRWaWV3Q29udGFpbmVyLmN1cnJlbnRDb250ZW50Vmlldyk7CisgICAg
ICAgIHRoaXMuX2FuYWx5emVyQmFubmVyLnNob3coKTsKKyAgICB9LAorCisgICAgZGVhY3RpdmF0
ZUFuYWx5emVyQmFubmVyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9hbmFseXpl
ckJhbm5lci5oaWRlKCk7CisgICAgfSwKKwogICAgIC8vIFByaXZhdGUKIAogICAgIF9iYWNrQnV0
dG9uQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCkBAIC00NTMsNiArNDY2LDE4IEBAIFdlYkluc3Bl
Y3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCisg
ICAgX3VwZGF0ZUFuYWx5emVyQmFubmVyOiBmdW5jdGlvbihjdXJyZW50Q29udGVudFZpZXcpCisg
ICAgeworICAgICAgICBpZiAoIWN1cnJlbnRDb250ZW50VmlldykgeworICAgICAgICAgICAgdGhp
cy5fYW5hbHl6ZXJCYW5uZXIudGFyZ2V0RWxlbWVudCA9IG51bGw7CisgICAgICAgICAgICB0aGlz
Ll9hbmFseXplckJhbm5lci5udW1iZXJPZk1lc3NhZ2VzID0gbnVsbDsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2FuYWx5emVyQmFubmVyLnRhcmdldEVs
ZW1lbnQgPSBjdXJyZW50Q29udGVudFZpZXcuZWxlbWVudDsKKyAgICAgICAgdGhpcy5fYW5hbHl6
ZXJCYW5uZXIubnVtYmVyT2ZSZXN1bHRzID0gbnVsbDsgLy8gVE9ETzogY2hhbmdlIHRvIGFjdHVh
bCB2YWx1ZS4KKyAgICB9LAorCiAgICAgX2Rpc3BhdGNoQ3VycmVudFJlcHJlc2VudGVkT2JqZWN0
c0RpZENoYW5nZUV2ZW50U29vbjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMu
X2N1cnJlbnRSZXByZXNlbnRlZE9iamVjdHNEaWRDaGFuZ2VUaW1lb3V0KQpAQCAtNTAzLDYgKzUy
OCw3IEBAIFdlYkluc3BlY3Rvci5Db250ZW50QnJvd3Nlci5wcm90b3R5cGUgPSB7CiAKICAgICAg
ICAgdGhpcy5fdXBkYXRlQ29udGVudFZpZXdOYXZpZ2F0aW9uSXRlbXMoKTsKICAgICAgICAgdGhp
cy5fdXBkYXRlRmluZEJhbm5lcihjdXJyZW50Q29udGVudFZpZXcpOworICAgICAgICB0aGlzLl91
cGRhdGVBbmFseXplckJhbm5lcihjdXJyZW50Q29udGVudFZpZXcpOwogCiAgICAgICAgIHRoaXMu
X25hdmlnYXRpb25CYXIudXBkYXRlTGF5b3V0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xpbmVNYXJrZXIuY3NzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGluZU1hcmtlci5jc3MKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI3M2UwYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xpbmVNYXJrZXIuY3NzCkBA
IC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisgLmxpbmUtbWFya2VyIHsKKyAgICAgY29udGVu
dDogdXJsKC4uL0ltYWdlcy9XYXJuaW5nLnN2Zyk7CisgICAgIHdpZHRoOiAxNnB4OworICAgICBo
ZWlnaHQ6IDE2cHg7CisgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvTGluZU1hcmtlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0xpbmVNYXJrZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMzM3NDc5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xpbmVNYXJrZXIuanMKQEAgLTAsMCArMSwyNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9MaW5lTWVzc2FnZS5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9MaW5lTWVzc2FnZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzM3NDc5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0xpbmVNZXNzYWdlLmNzcwpAQCAtMCwwICsxLDI0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0xpbmVNZXNzYWdlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvTGluZU1lc3NhZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUy
YjY2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0xpbmVNZXNzYWdlLmpzCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitX
ZWJJbnNwZWN0b3IuTGluZU1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlLCB0eXBlKQoreworICAg
IFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKworICAgIHZhciBzcGFuID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgibGluZS1t
ZXNzYWdlIik7CisgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCJsaW5lLW1lc3NhZ2UtZXJyb3IiKTsK
KworICAgIHRoaXMuZWxlbWVudCA9IHNwYW47CisgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50
ID0gbWVzc2FnZTsKKworICAgIHRoaXMuX2NvbG9yQ2xhc3MgPSBXZWJJbnNwZWN0b3IuTGluZU1l
c3NhZ2UuQ29sb3JDbGFzc0ZvclR5cGVbbWVzc2FnZS50eXBlXTsKKyAgICB0aGlzLmVsZW1lbnQu
Y2xhc3NMaXN0LmFkZCh0aGlzLl9jb2xvckNsYXNzKTsKK307CisKK1dlYkluc3BlY3Rvci5MaW5l
TWVzc2FnZS5Db2xvckNsYXNzRm9yVHlwZSA9IHsKKyAgICAid2FybmluZyI6ICJsaW5lLW1lc3Nh
Z2Utd2FybmluZyIsCisgICAgImVycm9yIjogImxpbmUtbWVzc2FnZS1lcnJvciIKK307CisKK1dl
Ykluc3BlY3Rvci5MaW5lTWVzc2FnZS5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdl
Ykluc3BlY3Rvci5MaW5lTWVzc2FnZSwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmpl
Y3QucHJvdG90eXBlCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvTGluZU1lc3NhZ2VHcm91cC5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9MaW5lTWVzc2FnZUdyb3VwLmNzcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmUwNWQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGluZU1lc3NhZ2VHcm91cC5jc3MK
QEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy5saW5lLW1lc3NhZ2UtZ3JvdXAgeworICAg
IGZsb2F0OiByaWdodDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0xpbmVNZXNzYWdlR3JvdXAuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9MaW5lTWVzc2FnZUdyb3VwLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNGQ4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MaW5lTWVzc2FnZUdyb3VwLmpzCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuTGluZU1lc3NhZ2VHcm91
cCA9IGZ1bmN0aW9uKHNvdXJjZUNvZGVBbmFseXplciwgYW5hbHl6ZXJNYXJrZXIpCit7CisgICAg
V2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdmFyIHNwYW4gPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCJsaW5lLW1l
c3NhZ2UtZ3JvdXAiKTsKKworICAgIHRoaXMuZWxlbWVudCA9IHNwYW47CisgICAgdGhpcy5fc291
cmNlQ29kZUFuYWx5emVyID0gc291cmNlQ29kZUFuYWx5emVyOworCisgICAgdGhpcy5fY29sb3JD
bGFzcyA9IFdlYkluc3BlY3Rvci5MaW5lTWVzc2FnZUdyb3VwLkNvbG9yQ2xhc3NGb3JUeXBlW21l
c3NhZ2UudHlwZV07CisgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5fY29sb3JD
bGFzcyk7Cit9OworCitXZWJJbnNwZWN0b3IuTGluZU1lc3NhZ2VHcm91cC5Db2xvckNsYXNzRm9y
VHlwZSA9IHsKKyAgICAid2FybmluZyI6ICJsaW5lLW1lc3NhZ2Utd2FybmluZyIsCisgICAgImVy
cm9yIjogImxpbmUtbWVzc2FnZS1lcnJvciIKK307CisKK1dlYkluc3BlY3Rvci5MaW5lTWVzc2Fn
ZUdyb3VwLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkxpbmVN
ZXNzYWdlR3JvdXAsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlw
ZQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1NjcmlwdENvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvU2NyaXB0Q29udGVudFZpZXcuanMKaW5kZXggZjI3MTkwZS4uNTdiOTI1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2Ny
aXB0Q29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvU2NyaXB0Q29udGVudFZpZXcuanMKQEAgLTY2LDYgKzY2LDEzIEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRDb250ZW50VmlldyA9IGZ1bmN0aW9uKHNjcmlwdCkKICAgICB0aGlzLl9zaG93
VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5C
dXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl90b2dnbGVUeXBlQW5ub3Rh
dGlvbnMsIHRoaXMpOwogICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmVu
YWJsZWQgPSBmYWxzZTsKIAorICAgIHZhciB0b2dnbGVBbmFseXplckltYWdlU2l6ZSA9IFdlYklu
c3BlY3Rvci5QbGF0Zm9ybS5pc0xlZ2FjeU1hY09TID8gMTUgOiAxNjsKKyAgICB2YXIgdG9vbFRp
cEFuYWx5emVyID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTaG93IGFuYWx5emVyIGluZm9ybWF0
aW9uIik7CisgICAgdmFyIGFjdGl2YXRlZFRvb2xUaXBBbmFseXplciA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiSGlkZSBhbmFseXplciBpbmZvcm1hdGlvbiIpOworICAgIHRoaXMuX3RvZ2dsZUFu
YWx5emVyQnV0dG9uTmF2aWdhdGlvbkl0ZW0gPSBuZXcgV2ViSW5zcGVjdG9yLkFjdGl2YXRlQnV0
dG9uTmF2aWdhdGlvbkl0ZW0oInRvZ2dsZS1hbmFseXplciIsIHRvb2xUaXBBbmFseXplciwgYWN0
aXZhdGVkVG9vbFRpcEFuYWx5emVyLCAiSW1hZ2VzL0NoZWNrbWFyay5zdmciLCB0b2dnbGVBbmFs
eXplckltYWdlU2l6ZSwgdG9nZ2xlQW5hbHl6ZXJJbWFnZVNpemUpOworICAgIC8vIHRoaXMuX3Rv
Z2dsZUFuYWx5emVyQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fdG9nZ2xlQW5h
bHl6ZXIsIHRoaXMpOworICAgIHRoaXMuX3RvZ2dsZUFuYWx5emVyQnV0dG9uTmF2aWdhdGlvbkl0
ZW0uZW5hYmxlZCA9IGZhbHNlOworCiAgICAgV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlw
ZUluZm9ybWF0aW9uU2V0dGluZy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TZXR0aW5n
LkV2ZW50LkNoYW5nZWQsIHRoaXMuX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGlu
Z0NoYW5nZWQsIHRoaXMpOwogfTsKIApAQCAtNzgsNyArODUsNyBAQCBXZWJJbnNwZWN0b3IuU2Ny
aXB0Q29udGVudFZpZXcucHJvdG90eXBlID0gewogCiAgICAgZ2V0IG5hdmlnYXRpb25JdGVtcygp
CiAgICAgewotICAgICAgICByZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlv
bkl0ZW0sIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtXTsKKyAgICAgICAgcmV0
dXJuIFt0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLCB0aGlzLl9zaG93VHlw
ZXNCdXR0b25OYXZpZ2F0aW9uSXRlbSwgdGhpcy5fdG9nZ2xlQW5hbHl6ZXJCdXR0b25OYXZpZ2F0
aW9uSXRlbV07CiAgICAgfSwKIAogICAgIGdldCBzY3JpcHQoKQpAQCAtMjE0LDYgKzIyMSw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IHRoaXMuX3RleHRF
ZGl0b3IuY2FuQmVGb3JtYXR0ZWQoKTsKICAgICAgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2
aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IHRoaXMuX3RleHRFZGl0b3IuY2FuU2hvd1R5cGVBbm5vdGF0
aW9ucygpOwogICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5hY3Rp
dmF0ZWQgPSBXZWJJbnNwZWN0b3Iuc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5n
LnZhbHVlOworICAgICAgICB0aGlzLl90b2dnbGVBbmFseXplckJ1dHRvbk5hdmlnYXRpb25JdGVt
LmVuYWJsZWQgPSB0aGlzLl90b2dnbGVBbmFseXplckJ1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2
YXRlZCA9IHRoaXMuX3RleHRFZGl0b3IuY2FuQmVBbmFseXplZCgpOwogICAgIH0sCiAKICAgICBf
dG9nZ2xlUHJldHR5UHJpbnQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMjI3LDYgKzIzNSwxMiBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlID0gewogICAgICAgICB0aGlz
Ll90ZXh0RWRpdG9yLnRvZ2dsZVR5cGVBbm5vdGF0aW9ucygpOwogICAgIH0sCiAKKyAgICBfdG9n
Z2xlQW5hbHl6ZXI6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgY29uc29sZS5sb2co
IlNjcmlwdENvbnRlbnRWaWV3IHNlejogYWJvdXQgdG8gdG9nZ2xlIHRoZSBhbmFseXplciIpOwor
ICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLnRvZ2dsZUFuYWx5emVyKCk7CisgICAgfSwKKwogICAg
IF9zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmdDaGFuZ2VkOiBmdW5jdGlvbihl
dmVudCkKICAgICB7CiAgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVt
LmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNl
dHRpbmcudmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9Tb3VyY2VDb2RlVGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCmluZGV4IDVmMTBm
ZDcuLjBjNDg4MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCkBAIC03MCw2
ICs3MCw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciA9IGZ1bmN0aW9uKHNv
dXJjZUNvZGUpCiAgICAgZWxzZQogICAgICAgICB0aGlzLl9zb3VyY2VDb2RlLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuU291cmNlTWFwQWRkZWQsIHRoaXMu
X3NvdXJjZUNvZGVTb3VyY2VNYXBBZGRlZCwgdGhpcyk7CiAKKyAgICB0aGlzLl9zb3VyY2VDb2Rl
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuQ29udGVudERp
ZENoYW5nZSwgdGhpcy5fc291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2UsIHRoaXMpOworCiAgICAg
c291cmNlQ29kZS5yZXF1ZXN0Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhp
cykpOwogCiAgICAgLy8gRklYTUU6IENtZCtMIHNob3JjdXQgZG9lc24ndCBhY3R1YWxseSB3b3Jr
LgpAQCAtMTIwLDcgKzEyMiw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucmVtb3Zl
SGlnaGxpZ2h0ZWRSYW5nZSgpOwogCiAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7Ci0g
ICAgICAgIAorCiAgICAgICAgIHRoaXMuX2Rpc21pc3NFZGl0aW5nQ29udHJvbGxlcih0cnVlKTsK
IAogICAgICAgICBpZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQpAQCAtMTQ3LDYgKzE0OSw3
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KIAogICAgICAgICBXZWJJbnNwZWN0b3IuaXNzdWVNYW5hZ2VyLnJlbW92ZUV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLklzc3VlTWFuYWdlci5FdmVudC5Jc3N1ZVdhc0FkZGVkLCB0aGlz
Ll9pc3N1ZVdhc0FkZGVkLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmFuYWx5emVyTWFu
YWdlci5yZW1vdmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuRXZl
bnQuQW5hbHl6ZXJNZXNzYWdlc1dlcmVBZGRlZCwgdGhpcy5fYW5hbHl6ZXJNZXNzYWdlc1dlcmVB
ZGRlZCwgdGhpcyk7CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLm5vdGlmaWNhdGlvbnMucmVtb3Zl
RXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTm90aWZpY2F0aW9uLkdsb2JhbE1vZGlmaWVyS2V5
c0RpZENoYW5nZSwgdGhpcy5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSwgdGhp
cyk7CiAgICAgICAgIHRoaXMuX3NvdXJjZUNvZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZS5FdmVudC5Tb3VyY2VNYXBBZGRlZCwgdGhpcy5fc291cmNlQ29kZVNv
dXJjZU1hcEFkZGVkLCB0aGlzKTsKQEAgLTI3NSw2ICsyNzgsMTcgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGlzQWN0aXZh
dGVkOwogICAgIH0sCiAKKyAgICB0b2dnbGVBbmFseXplcjogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9hbmFseXplcklzQWN0aXZlKSB7CisgICAgICAgICAgICB0aGlzLl9h
bmFseXplKCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fYW5hbHl6ZXJJc0FjdGl2ZSA9IHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl91bmFuYWx5emUoKTsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2FuYWx5emVySXNBY3RpdmUgPSBmYWxzZTsKKyAgICB9LAorCiAgICAgc2hvd1Bv
cG92ZXJGb3JUeXBlczogZnVuY3Rpb24odHlwZXMsIGJvdW5kcywgdGl0bGUpCiAgICAgewogICAg
ICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwpAQCAtMzk5
LDYgKzQxMywzMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
ID0gewogICAgICAgICB9CiAgICAgfSwKIAorICAgIF9wb3B1bGF0ZUlzc3VlczogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdGhpcy5faXNzdWVzTGluZU51bWJlck1hcCA9IHt9OworCisgICAg
ICAgIHZhciBpc3N1ZXMgPSBXZWJJbnNwZWN0b3IuaXNzdWVNYW5hZ2VyLmlzc3Vlc0ZvclNvdXJj
ZUNvZGUodGhpcy5fc291cmNlQ29kZSk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXNz
dWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgaXNzdWUgPSBpc3N1ZXNbaV07Cisg
ICAgICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9tYXRjaGVzSXNzdWUoaXNzdWUpKTsKKyAg
ICAgICAgICAgIHRoaXMuX2FkZElzc3VlKGlzc3VlKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAg
ICBfYW5hbHl6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gR29pbmcgdG8gZ28gYWhl
YWQgYW5kIGRvIGEgY2FsbGJhY2sgaW5zdGVhZCBvZiBhIHJldHVybiBoZXJlLgorICAgICAgICBX
ZWJJbnNwZWN0b3IuYW5hbHl6ZXJNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkFuYWx5emVyTWFuYWdlci5FdmVudC5BbmFseXplck1lc3NhZ2VzV2VyZUFkZGVkLCB0aGlzLl9h
bmFseXplck1lc3NhZ2VzV2VyZUFkZGVkLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmFu
YWx5emVyTWFuYWdlci5hbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29kZSh0aGlzLl9zb3VyY2VD
b2RlLCB0aGlzKTsKKyAgICB9LAorCisgICAgX3VuYW5hbHl6ZTogZnVuY3Rpb24oKQorICAgIHsK
KworICAgIH0sCisKICAgICBfY29udGVudERpZFBvcHVsYXRlOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICB0aGlzLl9jb250ZW50UG9wdWxhdGVkID0gdHJ1ZTsKQEAgLTQwOCwxOSArNDQ2LDI2
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIC8vIFdlIGFkZCB0aGUgaXNzdWVzIGVhY2ggdGltZSBjb250ZW50IGlzIHBvcHVsYXRlZC4g
VGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBsaW5lcyBtaWdodCBub3QgZXhpc3QKICAgICAgICAgLy8g
aWYgd2UgdHJpZWQgYWRkZWQgdGhlbSBiZWZvcmUgd2hlbiB0aGUgZnVsbCBjb250ZW50IHdhc24n
dCBhdmFpYWJsZS4gKFdoZW4gcG9wdWxhdGluZyB3aXRoCiAgICAgICAgIC8vIHBhcnRpYWwgc2Ny
aXB0IGNvbnRlbnQgdGhpcyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLikKKyAgICAgICAg
dGhpcy5fcG9wdWxhdGVJc3N1ZXMoKTsKIAotICAgICAgICB0aGlzLl9pc3N1ZXNMaW5lTnVtYmVy
TWFwID0ge307Ci0KLSAgICAgICAgdmFyIGlzc3VlcyA9IFdlYkluc3BlY3Rvci5pc3N1ZU1hbmFn
ZXIuaXNzdWVzRm9yU291cmNlQ29kZSh0aGlzLl9zb3VyY2VDb2RlKTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBpc3N1ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBpc3N1
ZSA9IGlzc3Vlc1tpXTsKLSAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX21hdGNoZXNJ
c3N1ZShpc3N1ZSkpOwotICAgICAgICAgICAgdGhpcy5fYWRkSXNzdWUoaXNzdWUpOwotICAgICAg
ICB9CisgICAgICAgIGlmICh0aGlzLl9hbmFseXplcklzQWN0aXZlKQorICAgICAgICAgICAgdGhp
cy5fYW5hbHl6ZSgpOwogCiAgICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlTWFya2VycygpOwog
ICAgIH0sCiAKKyAgICBnZXQgY2FuQmVBbmFseXplZCgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fc291cmNlQ29kZS5jYW5CZUFuYWx5emVkOworICAgIH0sCisKKyAgICBnZXQgYW5hbHl6
ZXJJc0FjdGl2ZSgpCisgICAgeworICAgICAgICAvLyBOZWVkIHRoaXMgYmVjYXVzZSB5b3UgbmVl
ZCB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZXF1ZXN0IGEgbmV3CisgICAgICAgIC8vIGFu
YWx5c2VzIHdoZW5ldmVyIHRoaXMgY29kZSBpcyB1cGRhdGVkCisgICAgICAgIHJldHVybiAhIXRo
aXMuX2FuYWx5emVySXNBY3RpdmU7CisgICAgfSwKKwogICAgIF9wb3B1bGF0ZVdpdGhDb250ZW50
OiBmdW5jdGlvbihjb250ZW50KQogICAgIHsKICAgICAgICAgY29udGVudCA9IGNvbnRlbnQgfHwg
IiI7CkBAIC03NjUsNiArODEwLDM1IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2FkZElzc3VlKGlzc3VlKTsKICAgICB9LAog
CisgICAgX2FuYWx5emVyTWVzc2FnZXNXZXJlQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsK
KyAgICAgICAgV2ViSW5zcGVjdG9yLmFuYWx5emVyTWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuRXZlbnQuQW5hbHl6ZXJNZXNzYWdlc1dlcmVB
ZGRlZCwgdGhpcy5fYW5hbHl6ZXJNZXNzYWdlc1dlcmVBZGRlZCwgdGhpcyk7CisgICAgICAgIGNv
bnNvbGUubG9nKCJTb3VyY2VDb2RlVGV4dEVkaXRvciNfYW5hbHl6ZXJNZXNzYWdlc1dlcmVBZGRl
ZCgpIChFdmVudCB0cmlnZ2VyZWQgYnkgV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlciIsIGV2
ZW50LmRhdGEuYW5hbHl6ZXJNZXNzYWdlcyk7CisKKyAgICAgICAgLy8gR28gdGhyb3VnaCB0aGVz
ZSBvbmUgYnkgb25lIGFuZCBhZGQgdGhlIGdyYXBoaWNzLCBldGMuCisKKyAgICAgICAgLy8gZm9y
IChtZXNzYWdlIGluIGFuYWx5emVyTWVzc2FnZXMpIHsKKyAgICAgICAgLy8gICAgIHZhciBsaW5l
ID0gbWVzc2FnZS5saW5lOworICAgICAgICAvLyAgICAgdmFyIGxpbmVNZXNzYWdlID0gbmV3IFdl
Ykluc3BlY3Rvci5MaW5lTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgLy8gICAgIHZhciBsaW5l
TWFya2VyID0gdGhpc19saW5lTWFya2Vycy5nZXQobGluZSkKKyAgICAgICAgLy8gICAgIGlmICgh
bGluZU1hcmtlcikgeworICAgICAgICAvLyAgICAgICAgIGxpbmVNYXJrZXIgPSBuZXcgV2ViSW5z
cGVjdG9yLmxpbmVNYXJrZXI7CisgICAgICAgIC8vICAgICAgICAgdGhpcy5fbGluZU1lc3NhZ2VH
cm91cHMuc2V0KGxpbmVNYXJrZXIubGluZSwgbGluZU1lc3NhZ2VHcm91cCk7CisgICAgICAgIC8v
ICAgICB9CisgICAgICAgIC8vICAgICB2YXIgbGluZU1lc3NhZ2VHcm91cCA9IHRoaXMuX2xpbmVN
ZXNzYWdlR3JvdXBzLmdldChsaW5lTWVzc2FnZS5saW5lKTsKKyAgICAgICAgLy8gICAgIGxpbmVN
ZXNzYWdlR3JvdXAuYWRkKGxpbmVNZXNzYWdlKTsKKyAgICAgICAgLy8gfQorCisgICAgICAgIC8v
IE5vbmUgb2YgdGhpcyBpcyByaWdodC4gUGxlYXNlIGNoYW5nZS4KKyAgICAgICAgLy8gZm9yIChn
cm91cCBvZiBfbGluZU1lc3NhZ2VHcm91cHMudmFsdWVzKCkpIHsKKyAgICAgICAgLy8gICAgIGNv
bnNvbGUubG9nKGdyb3VwKTsKKyAgICAgICAgLy8gICAgIHZhciBsaW5lTWVzc2FnZUdyb3VwID0g
bmV3IFdlYkluc3BlY3Rvci5MaW5lTWVzc2FnZUdyb3VwKHRoaXMsIGFuYWx5emVyTWVzc2FnZS5t
ZXNzYWdlLCBhbmFseXplck1lc3NhZ2UudHlwZSk7CisgICAgICAgIC8vICAgICB2YXIgbGluZU1h
cmtlciA9IHRoaXMuX3NvdXJjZUNvZGVUZXh0RWRpdG9yLmFkZExpbmVXaWRnZXQoYW5hbHl6ZXJN
ZXNzYWdlLmxpbmUsIGFuYWx5emVyTWFya2VyLmVsZW1lbnQpOworICAgICAgICAvLyAgICAgdGhp
cy5fYW5hbHl6ZXJNZXNzYWdlcy5wdXNoKGFuYWx5emVyTWVzc2FnZSk7CisgICAgICAgIC8vICAg
ICB0aGlzLl9hbmFseXplck1lc3NhZ2VNYXJrZXJXaWRnZXRzLnB1c2gobGluZU1hcmtlcik7Cisg
ICAgICAgIC8vIH0KKyAgICB9LAorCiAgICAgX2FkZElzc3VlOiBmdW5jdGlvbihpc3N1ZSkKICAg
ICB7CiAgICAgICAgIHZhciBsaW5lTnVtYmVySXNzdWVzID0gdGhpcy5faXNzdWVzTGluZU51bWJl
ck1hcFtpc3N1ZS5saW5lTnVtYmVyXTsKQEAgLTEwNTksNiArMTEzMywyMyBAQCBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl91cGRh
dGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKCk7CiAgICAgfSwKIAorICAgIF9zb3VyY2VD
b2RlQ29udGVudERpZENoYW5nZTogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICAvLyBD
aGVjayB0byBzZWUgaWYgYW5hbHl6ZXIgbW9kZSBpcyBhY3RpdmUgZm9yIHRoaXMgcGFydGljdWxh
ciBjb250ZW50IHZpZXcuCisgICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGdvaW5nIHRvIGhhcHBl
biBoZXJlIG9yIHNvbWV3aGVyZSBlbHNlLgorCisgICAgICAgIC8vIE9rIG5vIGhlcmUncyB0aGUg
ZGVhbDogdGhpcyBpcyBnb2luZyB0byBoYXBwZW4gaGVyZS4gVGhpcyBpcyB0aGUgdGV4dCBlZGl0
b3IsCisgICAgICAgIC8vIHNvIGl0IHdpbGwga25vdyBpZiBpdCBpcyBhY3RpdmVseSBkb2luZyBz
dHVmZiBvciBub3QuIFNpbmNlIHRoZQorICAgICAgICAvLyB0ZXh0IHJlc291cmNlIGNvbnRlbnQg
dmlldyBwcmV0dHkgbXVjaCBoYXMgYWNjZXNzIHRvIHRoaXMsIFdFCisgICAgICAgIC8vIGFyZSBn
b2luZyB0byBhZGQgYSBmZXcgbW9yZSBldmVudHMgZm9yIHRoZSBUZXh0UmVzb3VyY2VDb250ZW50
VmlldyB0byBoYW5kbGUuCisgICAgICAgIC8vIE9SIHdlIGFyZSBnb2luZyB0byBoYXZlIHRoZSBU
ZXh0UmVzb3VyY2VDb250ZW50VmlldyBqdXN0IHBvbGwgdGhpcyBzb3VyY2UgZG9jdW1lbnQgZm9y
IHN0YXRlCisgICAgICAgIC8vIGFzIG5lY2Vzc2FyeS4KKworICAgICAgICAvLyBTbyBmb3IgaW5z
dGFuY2UgdGhpcyB3aWxsIGtub3cgaWYgd2UgYXJlIGN1cnJlbnRseSBpbiBhbiBhbmFseXppbmcg
c3RhdGUuCisgICAgICAgIC8vIFRoZSBzb3VyY2VDb2RlIGRvZXNuJ3QgcmVhbGx5IG5lZWQgdG8g
a25vdyB0aGF0IGFib3V0IGl0c2VsZi4gU291cmNlIGp1c3Qga25vd3MgaWYgaXRzCisgICAgICAg
IC8vIGN1cnJlbnQgYW5hbHlzaXMgZGF0YSwgc2hvdWxkIGl0IGV4aXN0IG9uIFdlYkluc3BlY3Rv
ci5BbmFseXplck1hbmFnZXIsIGlzIGRpcnR5IG9yIG5vdC4KKyAgICB9LAorCiAgICAgX3VwZGF0
ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAg
IHZhciBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxl
ci5Nb2RlLk5vbmU7CkBAIC0xMTkxLDcgKzEyODIsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dQb3Bv
dmVyRm9yRnVuY3Rpb24oZGF0YSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlICJvYmplY3QiOgotICAgICAgICAgICAgICAgIGlmIChkYXRhLnN1YnR5cGUgPT09ICJy
ZWdleHAiKSAKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdWJ0eXBlID09PSAicmVnZXhwIikK
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXJGb3JSZWdFeHAoZGF0YSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93UG9wb3Zl
ckZvck9iamVjdChkYXRhKTsKQEAgLTE0MTEsNyArMTUwMiw3IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAKICAgICBfdHJhY2tQb3BvdmVyRXZlbnRz
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX3BvcG92ZXJFdmVudExpc3Rl
bmVycykgCisgICAgICAgIGlmICghdGhpcy5fcG9wb3ZlckV2ZW50TGlzdGVuZXJzKQogICAgICAg
ICAgICAgdGhpcy5fcG9wb3ZlckV2ZW50TGlzdGVuZXJzID0gbmV3IFdlYkluc3BlY3Rvci5FdmVu
dExpc3RlbmVyU2V0KHRoaXMsICJQb3BvdmVyIGxpc3RlbmVycyIpOwogICAgICAgICBpZiAoIXRo
aXMuX3BvcG92ZXJFdmVudExpc3RlbmVyc0FyZVJlZ2lzdGVyZWQpIHsKICAgICAgICAgICAgIHRo
aXMuX3BvcG92ZXJFdmVudExpc3RlbmVyc0FyZVJlZ2lzdGVyZWQgPSB0cnVlOwpAQCAtMTQ4Miwx
MyArMTU3MywxMyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
ID0gewogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2VkaXRpbmdDb250cm9sbGVyKQogICAgICAg
ICAgICAgdGhpcy5fZWRpdGluZ0NvbnRyb2xsZXIuZGlzbWlzc0hvdmVyTWVudShkaXNjcmV0ZSk7
Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuaG92ZXJl
ZE1hcmtlciA9IG51bGw7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9lZGl0aW5nQ29udHJvbGxlcjsK
ICAgICB9LAogCiAgICAgLy8gQ29kZU1pcnJvckVkaXRpbmdDb250cm9sbGVyIERlbGVnYXRlCi0g
ICAgCisKICAgICBlZGl0aW5nQ29udHJvbGxlckRpZFN0YXJ0RWRpdGluZzogZnVuY3Rpb24oZWRp
dGluZ0NvbnRyb2xsZXIpCiAgICAgewogICAgICAgICAvLyBXZSBjYW4gcGF1c2UgdGhlIHRva2Vu
IHRyYWNraW5nIGNvbnRyb2xsZXIgZHVyaW5nIGVkaXRpbmcsIGl0IHdpbGwgYmUgcmVzZXQKQEAg
LTE0OTgsMTEgKzE1ODksMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBXZSBjbGVhciB0aGUgbWFya2VyIHNpbmNlIHdlJ2xs
IHJlc2V0IGl0IGFmdGVyIGVkaXRpbmcuCiAgICAgICAgIGVkaXRpbmdDb250cm9sbGVyLm1hcmtl
ci5jbGVhcigpOwotICAgICAgICAKKwogICAgICAgICAvLyBXZSBpZ25vcmUgY29udGVudCBjaGFu
Z2VzIG1hZGUgYXMgYSByZXN1bHQgb2YgY29sb3IgZWRpdGluZy4KICAgICAgICAgdGhpcy5faWdu
b3JlQ29udGVudERpZENoYW5nZSsrOwogICAgIH0sCi0gICAgCisKICAgICBlZGl0aW5nQ29udHJv
bGxlckRpZEZpbmlzaEVkaXRpbmc6IGZ1bmN0aW9uKGVkaXRpbmdDb250cm9sbGVyKQogICAgIHsK
ICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJrZXJzKGVkaXRpbmdDb250cm9sbGVyLnJh
bmdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1RleHRDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5qcwppbmRleCA4ODUxM2YzLi45YzZhMzg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0Q29u
dGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvVGV4dENvbnRlbnRWaWV3LmpzCkBAIC01NSw2ICs1NSwxMiBAQCBXZWJJbnNwZWN0b3IuVGV4
dENvbnRlbnRWaWV3ID0gZnVuY3Rpb24oc3RyaW5nLCBtaW1lVHlwZSkKICAgICB2YXIgYWN0aXZh
dGVkVG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJIaWRlIHR5cGUgaW5mb3Jt
YXRpb24iKTsKICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBX
ZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSgic2hvdy10eXBlcyIsIHRv
b2xUaXBUeXBlcywgYWN0aXZhdGVkVG9vbFRpcFR5cGVzLCAiSW1hZ2VzL05hdmlnYXRpb25JdGVt
VHlwZXMuc3ZnIiwgMTMsIDE0KTsKICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9u
SXRlbS5lbmFibGVkID0gZmFsc2U7CisKKyAgICB2YXIgdG9nZ2xlQW5hbHl6ZXJJbWFnZVNpemUg
PSBXZWJJbnNwZWN0b3IuUGxhdGZvcm0uaXNMZWdhY3lNYWNPUyA/IDE1IDogMTY7CisgICAgdmFy
IHRvb2xUaXBBbmFseXplciA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBhbmFseXplciBp
bmZvcm1hdGlvbiIpOworICAgIHZhciBhY3RpdmF0ZWRUb29sVGlwQW5hbHl6ZXIgPSBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkhpZGUgYW5hbHl6ZXIgaW5mb3JtYXRpb24iKTsKKyAgICB0aGlzLl90
b2dnbGVBbmFseXplckJ1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3Rp
dmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJ0b2dnbGUtYW5hbHl6ZXIiLCB0b29sVGlwQW5hbHl6
ZXIsIGFjdGl2YXRlZFRvb2xUaXBBbmFseXplciwgIkltYWdlcy9DaGVja21hcmsuc3ZnIiwgMTMs
IDE0KTsKKyAgICB0aGlzLl90b2dnbGVBbmFseXplckJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJs
ZWQgPSBmYWxzZTsKIH07CiAKIFdlYkluc3BlY3Rvci5UZXh0Q29udGVudFZpZXcuU3R5bGVDbGFz
c05hbWUgPSAidGV4dCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UZXh0RWRpdG9yLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qcwppbmRleCAwNGRkYmFlLi5iYjUyZWRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0RWRp
dG9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Rl
eHRFZGl0b3IuanMKQEAgLTMyLDcgKzMyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IgPSBm
dW5jdGlvbihlbGVtZW50LCBtaW1lVHlwZSwgZGVsZWdhdGUpCiAgICAgdGhpcy5fZWxlbWVudC5j
bGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLlN0eWxlQ2xhc3NOYW1lKTsKICAg
ICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdo
dGVkU3R5bGVDbGFzc05hbWUpOwogCi0gICAgdGhpcy5fY29kZU1pcnJvciA9IENvZGVNaXJyb3Io
dGhpcy5lbGVtZW50LCB7CisgICAgdGhpcy5fY29kZU1pcnJvciA9IG5ldyBDb2RlTWlycm9yKHRo
aXMuZWxlbWVudCwgewogICAgICAgICByZWFkT25seTogdHJ1ZSwKICAgICAgICAgaW5kZW50V2l0
aFRhYnM6IHRydWUsCiAgICAgICAgIGluZGVudFVuaXQ6IDQsCkBAIC0yMDMsNiArMjAzLDE2IEBA
IFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0sCiAKKyAgICBjYW5CZUFuYWx5emVkOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2UKKyAgICB9LAorCisgICAgZ2V0IGFuYWx5emVySXNBY3RpdmUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKICAgICBnZXQgc2VsZWN0ZWRU
ZXh0UmFuZ2UoKQogICAgIHsKICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fY29kZU1pcnJvci5n
ZXRDdXJzb3IodHJ1ZSk7CkBAIC02OTQsNiArNzA0LDExIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVNaXJyb3IuZ2V0RG9j
KCkuaW5kZXhGcm9tUG9zKHBvc2l0aW9uKTsKICAgICB9LAogCisgICAgYWRkTGluZVdpZGdldDog
ZnVuY3Rpb24obGluZSwgZWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb2Rl
TWlycm9yLmFkZExpbmVXaWRnZXQobGluZSwgZWxlbWVudCk7CisgICAgfSwKKwogICAgIHNldElu
bGluZVdpZGdldDogZnVuY3Rpb24ocG9zaXRpb24sIGlubGluZUVsZW1lbnQpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5zZXRVbmlxdWVCb29rbWFyayhwb3NpdGlvbiwg
e3dpZGdldDogaW5saW5lRWxlbWVudH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dFJlc291cmNlQ29udGVudFZpZXcuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50
Vmlldy5qcwppbmRleCAxNzI4NzM0Li45NjBhNjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3Vy
Y2VDb250ZW50Vmlldy5qcwpAQCAtNTgsNiArNTgsMTMgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNv
dXJjZUNvbnRlbnRWaWV3ID0gZnVuY3Rpb24ocmVzb3VyY2UpCiAgICAgdGhpcy5fc2hvd1R5cGVz
QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuQnV0dG9u
TmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhpcy5fdG9nZ2xlVHlwZUFubm90YXRpb25z
LCB0aGlzKTsKICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVk
ID0gZmFsc2U7CiAKKyAgICB2YXIgdG9nZ2xlQW5hbHl6ZXJJbWFnZVNpemUgPSBXZWJJbnNwZWN0
b3IuUGxhdGZvcm0uaXNMZWdhY3lNYWNPUyA/IDE1IDogMTY7CisgICAgdmFyIHRvb2xUaXBBbmFs
eXplciA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hvdyBhbmFseXplciBpbmZvcm1hdGlvbiIp
OworICAgIHZhciBhY3RpdmF0ZWRUb29sVGlwQW5hbHl6ZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkhpZGUgYW5hbHl6ZXIgaW5mb3JtYXRpb24iKTsKKyAgICB0aGlzLl90b2dnbGVBbmFseXpl
ckJ1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5h
dmlnYXRpb25JdGVtKCJ0b2dnbGUtYW5hbHl6ZXIiLCB0b29sVGlwQW5hbHl6ZXIsIGFjdGl2YXRl
ZFRvb2xUaXBBbmFseXplciwgIkltYWdlcy9DaGVja21hcmsuc3ZnIiwgdG9nZ2xlQW5hbHl6ZXJJ
bWFnZVNpemUsIHRvZ2dsZUFuYWx5emVySW1hZ2VTaXplKTsKKyAgICB0aGlzLl90b2dnbGVBbmFs
eXplckJ1dHRvbk5hdmlnYXRpb25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1
dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2dsZUFuYWx5emVyLCB0
aGlzKTsKKyAgICB0aGlzLl90b2dnbGVBbmFseXplckJ1dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJs
ZWQgPSBmYWxzZTsKKwogICAgIFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1h
dGlvblNldHRpbmcuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuU2V0dGluZy5FdmVudC5D
aGFuZ2VkLCB0aGlzLl9zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmdDaGFuZ2Vk
LCB0aGlzKTsKIH07CiAKQEAgLTcwLDcgKzc3LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJj
ZUNvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKIAogICAgIGdldCBuYXZpZ2F0aW9uSXRlbXMoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25J
dGVtLCB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbV07CisgICAgICAgIHJldHVy
biBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbSwgdGhpcy5fc2hvd1R5cGVz
QnV0dG9uTmF2aWdhdGlvbkl0ZW0sIHRoaXMuX3RvZ2dsZUFuYWx5emVyQnV0dG9uTmF2aWdhdGlv
bkl0ZW1dOwogICAgIH0sCiAKICAgICBnZXQgbWFuYWdlc093bklzc3VlcygpCkBAIC0yMTAsNiAr
MjE3LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZSA9
IHsKICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVk
ID0gdGhpcy5fdGV4dEVkaXRvci5jYW5CZUZvcm1hdHRlZCgpOwogICAgICAgICB0aGlzLl9zaG93
VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5T
aG93VHlwZUFubm90YXRpb25zKCk7CiAgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmln
YXRpb25JdGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZv
cm1hdGlvblNldHRpbmcudmFsdWU7CisgICAgICAgIHRoaXMuX3RvZ2dsZUFuYWx5emVyQnV0dG9u
TmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IHRoaXMuX3RleHRFZGl0b3IuY2FuQmVBbmFseXplZDsK
ICAgICB9LAogCiAgICAgX3RvZ2dsZVByZXR0eVByaW50OiBmdW5jdGlvbihldmVudCkKQEAgLTIy
Myw2ICsyMzEsMTkgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5fdGV4dEVkaXRvci50b2dnbGVUeXBlQW5ub3RhdGlvbnMo
KTsKICAgICB9LAogCisgICAgX3RvZ2dsZUFuYWx5emVyOiBmdW5jdGlvbihldmVudCkKKyAgICB7
CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IudG9nZ2xlQW5hbHl6ZXIoKTsKKyAgICAgICAgaWYg
KHRoaXMuX3RleHRFZGl0b3IuYW5hbHl6ZXJJc0FjdGl2ZSkgeworICAgICAgICAgICAgdGhpcy5f
dG9nZ2xlQW5hbHl6ZXJCdXR0b25OYXZpZ2F0aW9uSXRlbS5hY3RpdmF0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnRlbnRCcm93c2VyLmFjdGl2YXRlQW5hbHl6ZXJCYW5u
ZXIoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgZnVubmVsIGluZm9ybWF0aW9uIGlu
dG8gdGhlIGFuYWx5emVyQmFubmVyIG9uY2UgaXQgaXMgYXZhaWxhYmxlLCBvciBlc3RhYmxpc2gg
c29tZSBmb3JtIG9mIGRhdGEgYmluZGluZy4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRoaXMuX3RvZ2dsZUFuYWx5emVyQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gZmFs
c2U7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY29udGVudEJyb3dzZXIuZGVhY3RpdmF0ZUFu
YWx5emVyQmFubmVyKCk7CisgICAgICAgIH0KKyAgICB9LAorCiAgICAgX3Nob3dKYXZhU2NyaXB0
VHlwZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAg
ICAgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkID0gV2Vi
SW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZy52YWx1ZTsKQEAg
LTI0Myw2ICsyNjQsMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnBy
b3RvdHlwZSA9IHsKIAogICAgIF90ZXh0RWRpdG9yQ29udGVudERpZENoYW5nZTogZnVuY3Rpb24o
ZXZlbnQpCiAgICAgeworICAgICAgICAvLyBUaGlzIFRleHRSZXNvdXJjZUNvbnRlbnRWaWV3IGtu
b3dzIHdoZW4gaXRzIGVkaXRvciBjaGFuZ2VzLiBDb3VsZCBiZSB1c2VmdWwgZm9yIHVwZGF0aW5n
IHN0YXRlIG9mIHNvbWUga2luZCBvZgorICAgICAgICAvLyBBbmFseXplckJhbm5lci4gSSBjb3Vs
ZCwgZm9yIGluc3RhbmNlLCBnZXQgYW5hbHlzaXMgZGF0YSBmcm9tOgorICAgICAgICAvLyBXZWJJ
bnNwZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLmFuYWx5emVyTWVzc2FnZXNGb3JTb3VyY2VDb2RlKHRo
aXMuX3RleHRFZGl0b3Iuc291cmNlQ29kZSk7CisKICAgICAgICAgdGhpcy5faWdub3JlU291cmNl
Q29kZUNvbnRlbnREaWRDaGFuZ2VFdmVudCA9IHRydWU7CiAgICAgICAgIFdlYkluc3BlY3Rvci5i
cmFuY2hNYW5hZ2VyLmN1cnJlbnRCcmFuY2gucmV2aXNpb25Gb3JSZXByZXNlbnRlZE9iamVjdCh0
aGlzLnJlc291cmNlKS5jb250ZW50ID0gdGhpcy5fdGV4dEVkaXRvci5zdHJpbmc7CiAgICAgICAg
IGRlbGV0ZSB0aGlzLl9pZ25vcmVTb3VyY2VDb2RlQ29udGVudERpZENoYW5nZUV2ZW50Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239305</attachid>
            <date>2014-10-05 17:05:45 -0700</date>
            <delta_ts>2014-10-05 17:05:45 -0700</delta_ts>
            <desc>[PATCH] Work in progress, corrected patch.</desc>
            <filename>eslint.diff</filename>
            <type>text/plain</type>
            <size>659497</size>
            <attacher name="Jonathan Wells">jonowells</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFp
bi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvTWFpbi5qcwpp
bmRleCBlYjhmNTUxLi5lY2VmOTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9CYXNlL01haW4uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC0xMDMsNiArMTAzLDcgQEAgV2ViSW5zcGVjdG9y
LmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmNzc1N0eWxlTWFuYWdlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVNYW5hZ2VyOwogICAgIHRoaXMubG9nTWFuYWdlciA9IG5ldyBXZWJJ
bnNwZWN0b3IuTG9nTWFuYWdlcjsKICAgICB0aGlzLmlzc3VlTWFuYWdlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuSXNzdWVNYW5hZ2VyOworICAgIHRoaXMuYW5hbHl6ZXJNYW5hZ2VyID0gbmV3IFdlYklu
c3BlY3Rvci5BbmFseXplck1hbmFnZXI7CiAgICAgdGhpcy5ydW50aW1lTWFuYWdlciA9IG5ldyBX
ZWJJbnNwZWN0b3IuUnVudGltZU1hbmFnZXI7CiAgICAgdGhpcy5hcHBsaWNhdGlvbkNhY2hlTWFu
YWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQXBwbGljYXRpb25DYWNoZU1hbmFnZXI7CiAgICAgdGhp
cy50aW1lbGluZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlRpbWVsaW5lTWFuYWdlcjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJz
L0FuYWx5emVyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zYTBlMTgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQW5hbHl6ZXJNYW5hZ2VyLmpzCkBAIC0wLDAg
KzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlciA9IGZ1
bmN0aW9uKCkKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICB0
aGlzLl9hbmFseXplciA9IGVzbGludDsKKyAgICB0aGlzLl9jb25maWcgPSB7CisgICAgICAgICJl
bnYiOiB7CisgICAgICAgICAgICAiYnJvd3NlciI6IHRydWUsCisgICAgICAgICAgICAibm9kZSI6
IGZhbHNlCisgICAgICAgIH0sCisgICAgICAgICJydWxlcyI6IHsKKyAgICAgICAgICAgICJjb25z
aXN0ZW50LXJldHVybiI6IDIsCisgICAgICAgICAgICAiY3VybHkiOiAwLAorICAgICAgICAgICAg
ImVxZXFlcSI6IDIsCisgICAgICAgICAgICAibmV3LXBhcmVucyI6IDAsCisgICAgICAgICAgICAi
bm8tY29tbWEtZGFuZ2xlIjogMCwKKyAgICAgICAgICAgICJuby1jb25zb2xlIjogMCwKKyAgICAg
ICAgICAgICJuby1jb25zdGFudC1jb25kaXRpb24iOiAwLAorICAgICAgICAgICAgIm5vLWV4dHJh
LWJpbmQiOiAyLAorICAgICAgICAgICAgIm5vLWV4dHJhLXNlbWkiOiAyLAorICAgICAgICAgICAg
Im5vLXByb3RvIjogMCwKKyAgICAgICAgICAgICJuby1yZXR1cm4tYXNzaWduIjogMiwKKyAgICAg
ICAgICAgICJuby10cmFpbGluZy1zcGFjZXMiOiAyLAorICAgICAgICAgICAgIm5vLXVuZGVyc2Nv
cmUtZGFuZ2xlIjogMCwKKyAgICAgICAgICAgICJuby11bnVzZWQtZXhwcmVzc2lvbnMiOiAyLAor
ICAgICAgICAgICAgIm5vLXdyYXAtZnVuYyI6IDIsCisgICAgICAgICAgICAic2VtaSI6IDIsCisg
ICAgICAgICAgICAic3BhY2UtaW5maXgtb3BzIjogMiwKKyAgICAgICAgICAgICJzcGFjZS1yZXR1
cm4tdGhyb3ctY2FzZSI6IDIsCisgICAgICAgICAgICAic3RyaWN0IjogMCwKKyAgICAgICAgICAg
ICJ2YWxpZC10eXBlb2YiOiAyCisgICAgICAgIH0KKyAgICB9OworCisgICAgdGhpcy5fYW5hbHl6
ZXJTb3VyY2VDb2RlTWFwID0gbmV3IFdlYWtNYXA7Cit9OworCitXZWJJbnNwZWN0b3IuQW5hbHl6
ZXJNYW5hZ2VyLkV2ZW50ID0geworICAgIEFuYWx5emVyTWVzc2FnZXNXZXJlQWRkZWQ6ICJhbmFs
eXplci1tYW5hZ2VyLWFuYWx5emVyLW1lc3NhZ2VzLXdlcmUtYWRkZWQiCit9OworCitXZWJJbnNw
ZWN0b3IuQW5hbHl6ZXJNYW5hZ2VyLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2Vi
SW5zcGVjdG9yLkFuYWx5emVyTWFuYWdlciwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5P
YmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICBhbmFseXplck1lc3NhZ2Vz
Rm9yU291cmNlQ29kZTogZnVuY3Rpb24oc291cmNlQ29kZSwgY2FsbGJhY2spCisgICAgeworICAg
ICAgICBmdW5jdGlvbiByZXRyaWV2ZUFuYWx5emVyTWVzc2FnZXMoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIXNvdXJjZUNvZGUubmVlZHNBbmFseXNpcyAmJiB0aGlzLl9hbmFseXplclNv
dXJjZUNvZGVNYXAuaGFzKHNvdXJjZUNvZGUpKSB7CisgICAgICAgICAgICAgICAgdmFyIGFuYWx5
emVyTWVzc2FnZXMgPSB0aGlzLl9hbmFseXplclNvdXJjZUNvZGVNYXAuZ2V0KHNvdXJjZUNvZGUp
OworICAgICAgICAgICAgICAgIGNhbGxiYWNrKGFuYWx5emVyTWVzc2FnZXMpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGFuYWx5emVy
TWVzc2FnZXMgPSBbXTsKKyAgICAgICAgICAgIHZhciByYXdBbmFseXplck1lc3NhZ2VzID0gdGhp
cy5fYW5hbHl6ZXIudmVyaWZ5KHNvdXJjZUNvZGUuY29udGVudCwgdGhpcy5fY29uZmlnKTsKKwor
ICAgICAgICAgICAgZm9yIChyYXdBbmFseXplck1lc3NhZ2Ugb2YgcmF3QW5hbHl6ZXJNZXNzYWdl
cykgeworICAgICAgICAgICAgICAgIGFuYWx5emVyTWVzc2FnZXMucHVzaChuZXcgV2ViSW5zcGVj
dG9yLkFuYWx5emVyTWVzc2FnZShzb3VyY2VDb2RlLCByYXdBbmFseXplck1lc3NhZ2UubWVzc2Fn
ZSwgcmF3QW5hbHl6ZXJNZXNzYWdlLmxpbmUsIHJhd0FuYWx5emVyTWVzc2FnZS5jb2x1bW4sIHJh
d0FuYWx5emVyTWVzc2FnZS5ydWxlSWQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dGhpcy5fYW5hbHl6ZXJTb3VyY2VDb2RlTWFwLnNldChzb3VyY2VDb2RlLCBhbmFseXplck1lc3Nh
Z2VzKTsKKyAgICAgICAgICAgIHNvdXJjZUNvZGUubmVlZHNBbmFseXNpcyA9IGZhbHNlOworCisg
ICAgICAgICAgICBjYWxsYmFjayhhbmFseXplck1lc3NhZ2VzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghc291cmNlQ29kZS5jb250ZW50UmVjZWl2ZWQpIHsKKyAgICAgICAgICAgIHNvdXJj
ZUNvZGUucmVxdWVzdENvbnRlbnQocmV0cmlldmVBbmFseXplck1lc3NhZ2VzLmJpbmQodGhpcykp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcmV0cmlldmVBbmFs
eXplck1lc3NhZ2VzLmNhbGwodGhpcyk7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VTTGludC9lc2xpbnQuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9FU0xpbnQvZXNsaW50
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODBjYjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5hbC9F
U0xpbnQvZXNsaW50LmpzCkBAIC0wLDAgKzEsMTc1MDYgQEAKKyFmdW5jdGlvbihlKXtpZigib2Jq
ZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5l
eHBvcnRzPWUoKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQp
ZGVmaW5lKFtdLGUpO2Vsc2V7dmFyIGY7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/Zj13aW5k
b3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Zj1nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVv
ZiBzZWxmJiYoZj1zZWxmKSxmLmVzbGludD1lKCl9fShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9k
dWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYo
IW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09ImZ1bmN0aW9uIiYmcmVxdWly
ZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBF
cnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBmLmNvZGU9Ik1PRFVMRV9O
T1RfRk9VTkQiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0
cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9y
dHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09ImZ1
bmN0aW9uIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVy
biBzfSkoezE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworbW9kdWxlLmV4cG9y
dHM9eworICAgICJidWlsdGluIjogeworICAgICAgICAiTmFOIjogZmFsc2UsCisgICAgICAgICJJ
bmZpbml0eSI6IGZhbHNlLAorICAgICAgICAidW5kZWZpbmVkIjogZmFsc2UsCisgICAgICAgICJl
dmFsIjogZmFsc2UsCisKKyAgICAgICAgInBhcnNlRmxvYXQiOiBmYWxzZSwKKyAgICAgICAgInBh
cnNlSW50IjogZmFsc2UsCisgICAgICAgICJpc05hTiI6IGZhbHNlLAorICAgICAgICAiaXNGaW5p
dGUiOiBmYWxzZSwKKworICAgICAgICAiZGVjb2RlVVJJIjogZmFsc2UsCisgICAgICAgICJkZWNv
ZGVVUklDb21wb25lbnQiOiBmYWxzZSwKKyAgICAgICAgImVuY29kZVVSSSI6IGZhbHNlLAorICAg
ICAgICAiZW5jb2RlVVJJQ29tcG9uZW50IjogZmFsc2UsCisKKyAgICAgICAgIk9iamVjdCI6IGZh
bHNlLAorICAgICAgICAiRnVuY3Rpb24iOiBmYWxzZSwKKyAgICAgICAgIkFycmF5IjogZmFsc2Us
CisgICAgICAgICJTdHJpbmciOiBmYWxzZSwKKyAgICAgICAgIkJvb2xlYW4iOiBmYWxzZSwKKyAg
ICAgICAgIk1hcCI6IGZhbHNlLAorICAgICAgICAiTnVtYmVyIjogZmFsc2UsCisgICAgICAgICJE
YXRlIjogZmFsc2UsCisgICAgICAgICJSZWdFeHAiOiBmYWxzZSwKKyAgICAgICAgIkVycm9yIjog
ZmFsc2UsCisgICAgICAgICJFdmFsRXJyb3IiOiBmYWxzZSwKKyAgICAgICAgIlJhbmdlRXJyb3Ii
OiBmYWxzZSwKKyAgICAgICAgIlJlZmVyZW5jZUVycm9yIjogZmFsc2UsCisgICAgICAgICJTZXQi
OiBmYWxzZSwKKyAgICAgICAgIlN5bnRheEVycm9yIjogZmFsc2UsCisgICAgICAgICJUeXBlRXJy
b3IiOiBmYWxzZSwKKyAgICAgICAgIlVSSUVycm9yIjogZmFsc2UsCisgICAgICAgICJXZWFrTWFw
IjogZmFsc2UsCisgICAgICAgICJXZWFrU2V0IjogZmFsc2UsCisKKyAgICAgICAgIkFycmF5QnVm
ZmVyIjogZmFsc2UsCisgICAgICAgICJGbG9hdDMyQXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIkZs
b2F0NjRBcnJheSI6IGZhbHNlLAorICAgICAgICAiSW50MTZBcnJheSI6IGZhbHNlLAorICAgICAg
ICAiSW50MzJBcnJheSI6IGZhbHNlLAorICAgICAgICAiSW50OEFycmF5IjogZmFsc2UsCisgICAg
ICAgICJVaW50MTZBcnJheSI6IGZhbHNlLAorICAgICAgICAiVWludDMyQXJyYXkiOiBmYWxzZSwK
KyAgICAgICAgIlVpbnQ4QXJyYXkiOiBmYWxzZSwKKyAgICAgICAgIlVpbnQ4Q2xhbXBlZEFycmF5
IjogZmFsc2UsCisKKyAgICAgICAgIk1hdGgiOiBmYWxzZSwKKyAgICAgICAgIkpTT04iOiBmYWxz
ZSwKKworICAgICAgICAidG9TdHJpbmciOiBmYWxzZSwKKyAgICAgICAgImhhc093blByb3BlcnR5
IjogZmFsc2UsCisgICAgICAgICJ2YWx1ZU9mIjogZmFsc2UsCisgICAgICAgICJwcm9wZXJ0eUlz
RW51bWVyYWJsZSI6IGZhbHNlLAorICAgICAgICAiY29uc3RydWN0b3IiOiBmYWxzZSwKKyAgICAg
ICAgImlzUHJvdG90eXBlT2YiOiBmYWxzZSwKKyAgICAgICAgInRvTG9jYWxlU3RyaW5nIjogZmFs
c2UKKyAgICB9LAorCisgICAgImJyb3dzZXIiOiB7CisgICAgICAgICJnbG9iYWxzIjogeworICAg
ICAgICAgICAgImFkZEV2ZW50TGlzdGVuZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJhcHBsaWNh
dGlvbkNhY2hlIjogZmFsc2UsCisgICAgICAgICAgICAiYXRvYiI6IGZhbHNlLAorICAgICAgICAg
ICAgIkF1ZGlvIjogZmFsc2UsCisgICAgICAgICAgICAiQmxvYiI6IGZhbHNlLAorICAgICAgICAg
ICAgImJsdXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJidG9hIjogZmFsc2UsCisgICAgICAgICAg
ICAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiBmYWxzZSwKKyAgICAgICAgICAgICJjbGVhckludGVy
dmFsIjogZmFsc2UsCisgICAgICAgICAgICAiY2xlYXJUaW1lb3V0IjogZmFsc2UsCisgICAgICAg
ICAgICAiY2xvc2UiOiBmYWxzZSwKKyAgICAgICAgICAgICJjbG9zZWQiOiBmYWxzZSwKKyAgICAg
ICAgICAgICJjcnlwdG8iOiBmYWxzZSwKKyAgICAgICAgICAgICJEYXRhVmlldyI6IGZhbHNlLAor
ICAgICAgICAgICAgImRlZmF1bHRTdGF0dXMiOiBmYWxzZSwKKyAgICAgICAgICAgICJkZXZpY2VQ
aXhlbFJhdGlvIjogZmFsc2UsCisgICAgICAgICAgICAiZGlzcGF0Y2hFdmVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgImRvY3VtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiRE9NUGFyc2VyIjog
ZmFsc2UsCisgICAgICAgICAgICAiRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkZpbGVS
ZWFkZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJmaW5kIjogZmFsc2UsCisgICAgICAgICAgICAi
Zm9jdXMiOiBmYWxzZSwKKyAgICAgICAgICAgICJGb3JtRGF0YSI6IGZhbHNlLAorICAgICAgICAg
ICAgImZyYW1lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgImZyYW1lcyI6IGZhbHNlLAor
ICAgICAgICAgICAgImdldENvbXB1dGVkU3R5bGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJnZXRT
ZWxlY3Rpb24iOiBmYWxzZSwKKyAgICAgICAgICAgICJoaXN0b3J5IjogZmFsc2UsCisgICAgICAg
ICAgICAiSFRNTEFuY2hvckVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MQmFzZUVs
ZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MQm9keUVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJIVE1MQlJFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEJ1dHRv
bkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MQ2FudmFzRWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIkhUTUxEaXJlY3RvcnlFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiSFRNTERpdkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MRExpc3RFbGVtZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJIVE1MRmllbGRTZXRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEZvbnRFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEZvcm1FbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiSFRNTEZyYW1lRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxGcmFt
ZVNldEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MSGVhZEVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJIVE1MSGVhZGluZ0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJIVE1MSFJFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTEh0bWxFbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiSFRNTElGcmFtZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJIVE1MSW1hZ2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTElucHV0RWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxMYWJlbEVsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJIVE1MTGVnZW5kRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxM
SUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MTGlua0VsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJIVE1MTWFwRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxN
ZW51RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxNZXRhRWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIkhUTUxNb2RFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRN
TE9iamVjdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MT0xpc3RFbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiSFRNTE9wdEdyb3VwRWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIkhUTUxPcHRpb25FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFBhcmFn
cmFwaEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MUGFyYW1FbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiSFRNTFByZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJI
VE1MUXVvdGVFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFNjcmlwdEVsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MU2VsZWN0RWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIkhUTUxTdHlsZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVGFibGVD
YXB0aW9uRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxUYWJsZUNlbGxFbGVtZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFRhYmxlQ29sRWxlbWVudCI6IGZhbHNlLAorICAg
ICAgICAgICAgIkhUTUxUYWJsZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVGFi
bGVSb3dFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVGV4dEFyZWFFbGVtZW50IjogZmFsc2UsCisg
ICAgICAgICAgICAiSFRNTFRpdGxlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIkhUTUxV
TGlzdEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJIVE1MVmlkZW9FbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiSW1hZ2UiOiBmYWxzZSwKKyAgICAgICAgICAgICJpbmRleGVkREIi
OiBmYWxzZSwKKyAgICAgICAgICAgICJpbm5lckhlaWdodCI6IGZhbHNlLAorICAgICAgICAgICAg
ImlubmVyV2lkdGgiOiBmYWxzZSwKKyAgICAgICAgICAgICJJbnRsIjogZmFsc2UsCisgICAgICAg
ICAgICAibGVuZ3RoIjogZmFsc2UsCisgICAgICAgICAgICAibG9jYWxTdG9yYWdlIjogZmFsc2Us
CisgICAgICAgICAgICAibG9jYXRpb24iOiBmYWxzZSwKKyAgICAgICAgICAgICJtYXRjaE1lZGlh
IjogZmFsc2UsCisgICAgICAgICAgICAiTWVzc2FnZUNoYW5uZWwiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJNZXNzYWdlRXZlbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJNZXNzYWdlUG9ydCI6IGZh
bHNlLAorICAgICAgICAgICAgIm1vdmVCeSI6IGZhbHNlLAorICAgICAgICAgICAgIm1vdmVUbyI6
IGZhbHNlLAorICAgICAgICAgICAgIk11dGF0aW9uT2JzZXJ2ZXIiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJuYW1lIjogZmFsc2UsCisgICAgICAgICAgICAibmF2aWdhdG9yIjogZmFsc2UsCisgICAg
ICAgICAgICAiTm9kZSI6IGZhbHNlLAorICAgICAgICAgICAgIk5vZGVGaWx0ZXIiOiBmYWxzZSwK
KyAgICAgICAgICAgICJvbmJlZm9yZXVubG9hZCI6IHRydWUsCisgICAgICAgICAgICAib25ibHVy
IjogdHJ1ZSwKKyAgICAgICAgICAgICJvbmVycm9yIjogdHJ1ZSwKKyAgICAgICAgICAgICJvbmZv
Y3VzIjogdHJ1ZSwKKyAgICAgICAgICAgICJvbmxvYWQiOiB0cnVlLAorICAgICAgICAgICAgIm9u
cmVzaXplIjogdHJ1ZSwKKyAgICAgICAgICAgICJvbnVubG9hZCI6IHRydWUsCisgICAgICAgICAg
ICAib3BlbiI6IGZhbHNlLAorICAgICAgICAgICAgIm9wZW5EYXRhYmFzZSI6IGZhbHNlLAorICAg
ICAgICAgICAgIm9wZW5lciI6IGZhbHNlLAorICAgICAgICAgICAgIk9wdGlvbiI6IGZhbHNlLAor
ICAgICAgICAgICAgIm91dGVySGVpZ2h0IjogZmFsc2UsCisgICAgICAgICAgICAib3V0ZXJXaWR0
aCI6IGZhbHNlLAorICAgICAgICAgICAgInBhZ2VYT2Zmc2V0IjogZmFsc2UsCisgICAgICAgICAg
ICAicGFnZVlPZmZzZXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJwYXJlbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJwb3N0TWVzc2FnZSI6IGZhbHNlLAorICAgICAgICAgICAgInByaW50IjogZmFs
c2UsCisgICAgICAgICAgICAicmVtb3ZlRXZlbnRMaXN0ZW5lciI6IGZhbHNlLAorICAgICAgICAg
ICAgInJlcXVlc3RBbmltYXRpb25GcmFtZSI6IGZhbHNlLAorICAgICAgICAgICAgInJlc2l6ZUJ5
IjogZmFsc2UsCisgICAgICAgICAgICAicmVzaXplVG8iOiBmYWxzZSwKKyAgICAgICAgICAgICJz
Y3JlZW4iOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JlZW5YIjogZmFsc2UsCisgICAgICAgICAg
ICAic2NyZWVuWSI6IGZhbHNlLAorICAgICAgICAgICAgInNjcm9sbCI6IGZhbHNlLAorICAgICAg
ICAgICAgInNjcm9sbGJhcnMiOiBmYWxzZSwKKyAgICAgICAgICAgICJzY3JvbGxCeSI6IGZhbHNl
LAorICAgICAgICAgICAgInNjcm9sbFRvIjogZmFsc2UsCisgICAgICAgICAgICAic2Nyb2xsWCI6
IGZhbHNlLAorICAgICAgICAgICAgInNjcm9sbFkiOiBmYWxzZSwKKyAgICAgICAgICAgICJzZWxm
IjogZmFsc2UsCisgICAgICAgICAgICAic2Vzc2lvblN0b3JhZ2UiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJzZXRJbnRlcnZhbCI6IGZhbHNlLAorICAgICAgICAgICAgInNldFRpbWVvdXQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTaGFyZWRXb3JrZXIiOiBmYWxzZSwKKyAgICAgICAgICAgICJzaG93
TW9kYWxEaWFsb2ciOiBmYWxzZSwKKyAgICAgICAgICAgICJzdG9wIjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHQUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbHRHbHlwaERlZkVs
ZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbHRHbHlwaEVsZW1lbnQiOiBmYWxzZSwK
KyAgICAgICAgICAgICJTVkdBbHRHbHlwaEl0ZW1FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHQW5nbGUiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlQ29sb3JFbGVtZW50
IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRBbmdsZSI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0FuaW1hdGVkQm9vbGVhbiI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0FuaW1h
dGVkRW51bWVyYXRpb24iOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlZEludGVnZXIi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlZExlbmd0aCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0FuaW1hdGVkTGVuZ3RoTGlzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0Fu
aW1hdGVkTnVtYmVyIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWROdW1iZXJMaXN0
IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvIjog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHQW5pbWF0ZWRSZWN0IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHQW5pbWF0ZWRTdHJpbmciOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdBbmltYXRlRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0FuaW1hdGVNb3Rpb25FbGVtZW50IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdBbmltYXRpb25FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQ2lyY2xlRWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0NsaXBQYXRoRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR0NvbG9yIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdDdXJzb3JF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRGVmc0VsZW1lbnQiOiBmYWxzZSwKKyAg
ICAgICAgICAgICJTVkdEZXNjRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0RvY3Vt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR0VsZW1lbnRJbnN0YW5jZSI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0VsZW1lbnRJ
bnN0YW5jZUxpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdFbGxpcHNlRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0ZFQmxlbmRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUNv
bXBvbmVudFRyYW5zZmVyRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFQ29tcG9z
aXRlRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFQ29udm9sdmVNYXRyaXhFbGVt
ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHRkVGbG9vZEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRUZ1bmNB
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFRnVuY0JFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHRkVGdW5jR0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdGRUZ1bmNSRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZFSW1hZ2VFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHRkVNZXJnZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdGRU1lcmdlTm9kZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRU1vcnBob2xv
Z3lFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVPZmZzZXRFbGVtZW50IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudCI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdGRVNwb3RMaWdodEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGRVRpbGVF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHRkVUdXJidWxlbmNlRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR0ZpbHRlckVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdGb250RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRGYWNlRWxlbWVu
dCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0ZvbnRGYWNlRm9ybWF0RWxlbWVudCI6IGZhbHNl
LAorICAgICAgICAgICAgIlNWR0ZvbnRGYWNlTmFtZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdGb250RmFjZVNyY0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGb250
RmFjZVVyaUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdGb3JlaWduT2JqZWN0RWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0dFbGVtZW50IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHR2x5cGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHR2x5cGhSZWZF
bGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHR3JhZGllbnRFbGVtZW50IjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHSEtlcm5FbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
SW1hZ2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTGVuZ3RoIjogZmFsc2UsCisg
ICAgICAgICAgICAiU1ZHTGVuZ3RoTGlzdCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR0xpbmVFbGVtZW50Ijog
ZmFsc2UsCisgICAgICAgICAgICAiU1ZHTWFya2VyRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAg
ICAgIlNWR01hc2tFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHTWF0cml4IjogZmFs
c2UsCisgICAgICAgICAgICAiU1ZHTWV0YWRhdGFFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAg
ICAiU1ZHTWlzc2luZ0dseXBoRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR01QYXRo
RWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR051bWJlciI6IGZhbHNlLAorICAgICAg
ICAgICAgIlNWR051bWJlckxpc3QiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYWludCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR1BhdGhFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHUGF0aFNlZyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdBcmNBYnMiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQXJjUmVsIjogZmFsc2UsCisgICAgICAgICAgICAi
U1ZHUGF0aFNlZ0Nsb3NlUGF0aCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2
ZXRvQ3ViaWNBYnMiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
UmVsIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aEFi
cyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY0FicyI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsIjogZmFsc2Us
CisgICAgICAgICAgICAiU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnMiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aFJlbCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdMaW5ldG9BYnMiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsUmVsIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
UGF0aFNlZ0xpbmV0b1JlbCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbEFicyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNh
bFJlbCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BhdGhTZWdMaXN0IjogZmFsc2UsCisgICAg
ICAgICAgICAiU1ZHUGF0aFNlZ01vdmV0b0FicyI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1Bh
dGhTZWdNb3ZldG9SZWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdQYXR0ZXJuRWxlbWVudCI6
IGZhbHNlLAorICAgICAgICAgICAgIlNWR1BvaW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZH
UG9pbnRMaXN0IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUG9seWdvbkVsZW1lbnQiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdQb2x5bGluZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUmVjdCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR1JlY3RFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHUmVu
ZGVyaW5nSW50ZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHU2NyaXB0RWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR1NldEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdTdG9wRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1N0cmluZ0xpc3QiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJTVkdTdHlsZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJT
VkdTVkdFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHU3dpdGNoRWxlbWVudCI6IGZh
bHNlLAorICAgICAgICAgICAgIlNWR1N5bWJvbEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAg
ICJTVkdUZXh0Q29udGVudEVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdUZXh0RWxl
bWVudCI6IGZhbHNlLAorICAgICAgICAgICAgIlNWR1RleHRQYXRoRWxlbWVudCI6IGZhbHNlLAor
ICAgICAgICAgICAgIlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdUaXRsZUVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdUcmFuc2Zvcm0i
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdUcmFuc2Zvcm1MaXN0IjogZmFsc2UsCisgICAgICAg
ICAgICAiU1ZHVFJlZkVsZW1lbnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdUU3BhbkVsZW1l
bnQiOiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdVbml0VHlwZXMiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJTVkdVc2VFbGVtZW50IjogZmFsc2UsCisgICAgICAgICAgICAiU1ZHVmlld0VsZW1lbnQi
OiBmYWxzZSwKKyAgICAgICAgICAgICJTVkdWaWV3U3BlYyI6IGZhbHNlLAorICAgICAgICAgICAg
IlNWR1ZLZXJuRWxlbWVudCI6IGZhbHNlLAorICAgICAgICAgICAgInRvcCI6IGZhbHNlLAorICAg
ICAgICAgICAgIldlYlNvY2tldCI6IGZhbHNlLAorICAgICAgICAgICAgIndpbmRvdyI6IGZhbHNl
LAorICAgICAgICAgICAgIldvcmtlciI6IGZhbHNlLAorICAgICAgICAgICAgIlhNTEh0dHBSZXF1
ZXN0IjogZmFsc2UsCisgICAgICAgICAgICAiWE1MU2VyaWFsaXplciI6IGZhbHNlLAorICAgICAg
ICAgICAgIlhQYXRoRXZhbHVhdG9yIjogZmFsc2UsCisgICAgICAgICAgICAiWFBhdGhFeHByZXNz
aW9uIjogZmFsc2UsCisgICAgICAgICAgICAiWFBhdGhSZXN1bHQiOiBmYWxzZQorICAgICAgICB9
CisgICAgfSwKKworICAgICJub2RlIjogeworICAgICAgICAiZ2xvYmFscyI6IHsKKyAgICAgICAg
ICAgICJfX2ZpbGVuYW1lIjogZmFsc2UsCisgICAgICAgICAgICAiX19kaXJuYW1lIjogZmFsc2Us
CisgICAgICAgICAgICAiQnVmZmVyIjogZmFsc2UsCisgICAgICAgICAgICAiRGF0YVZpZXciOiBm
YWxzZSwKKyAgICAgICAgICAgICJjb25zb2xlIjogZmFsc2UsCisgICAgICAgICAgICAiZXhwb3J0
cyI6IHRydWUsCisgICAgICAgICAgICAiR0xPQkFMIjogZmFsc2UsCisgICAgICAgICAgICAiZ2xv
YmFsIjogZmFsc2UsCisgICAgICAgICAgICAibW9kdWxlIjogZmFsc2UsCisgICAgICAgICAgICAi
cHJvY2VzcyI6IGZhbHNlLAorICAgICAgICAgICAgInJlcXVpcmUiOiBmYWxzZSwKKyAgICAgICAg
ICAgICJzZXRUaW1lb3V0IjogZmFsc2UsCisgICAgICAgICAgICAiY2xlYXJUaW1lb3V0IjogZmFs
c2UsCisgICAgICAgICAgICAic2V0SW50ZXJ2YWwiOiBmYWxzZSwKKyAgICAgICAgICAgICJjbGVh
ckludGVydmFsIjogZmFsc2UsCisgICAgICAgICAgICAic2V0SW1tZWRpYXRlIjogZmFsc2UsCisg
ICAgICAgICAgICAiY2xlYXJJbW1lZGlhdGUiOiBmYWxzZQorICAgICAgICB9LAorCisgICAgICAg
ICJydWxlcyI6IHsKKyAgICAgICAgICAgICJuby1jYXRjaC1zaGFkb3ciOiAwLAorICAgICAgICAg
ICAgIm5vLWNvbnNvbGUiOiAwLAorICAgICAgICAgICAgIm5vLW1peGVkLXJlcXVpcmVzIjogMiwK
KyAgICAgICAgICAgICJuby1uZXctcmVxdWlyZSI6IDIsCisgICAgICAgICAgICAibm8tcGF0aC1j
b25jYXQiOiAyLAorICAgICAgICAgICAgIm5vLXByb2Nlc3MtZXhpdCI6IDIsCisgICAgICAgICAg
ICAiZ2xvYmFsLXN0cmljdCI6IFswLCAiYWx3YXlzIl0sCisgICAgICAgICAgICAiaGFuZGxlLWNh
bGxiYWNrLWVyciI6IFsyLCAiZXJyIl0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICAiYW1kIjog
eworICAgICAgICAiZ2xvYmFscyI6IHsKKyAgICAgICAgICAgICJyZXF1aXJlIjogZmFsc2UsCisg
ICAgICAgICAgICAiZGVmaW5lIjogZmFsc2UKKyAgICAgICAgfQorICAgIH0sCisKKyAgICAibW9j
aGEiOiB7CisgICAgICAgICJnbG9iYWxzIjogeworICAgICAgICAgICAgImRlc2NyaWJlIjogZmFs
c2UsCisgICAgICAgICAgICAiaXQiOiBmYWxzZSwKKyAgICAgICAgICAgICJiZWZvcmUiOiBmYWxz
ZSwKKyAgICAgICAgICAgICJhZnRlciI6IGZhbHNlLAorICAgICAgICAgICAgImJlZm9yZUVhY2gi
OiBmYWxzZSwKKyAgICAgICAgICAgICJhZnRlckVhY2giOiBmYWxzZSwKKworICAgICAgICAgICAg
InN1aXRlIjogZmFsc2UsCisgICAgICAgICAgICAidGVzdCI6IGZhbHNlLAorICAgICAgICAgICAg
InNldHVwIjogZmFsc2UsCisgICAgICAgICAgICAidGVhcmRvd24iOiBmYWxzZSwKKyAgICAgICAg
ICAgICJzdWl0ZVNldHVwIjogZmFsc2UsCisgICAgICAgICAgICAic3VpdGVUZWFyZG93biI6IGZh
bHNlCisgICAgICAgIH0KKyAgICB9LAorCisgICAgImphc21pbmUiOiB7CisgICAgICAgICJnbG9i
YWxzIjogeworICAgICAgICAgICAgImFmdGVyRWFjaCI6IGZhbHNlLAorICAgICAgICAgICAgImJl
Zm9yZUVhY2giOiBmYWxzZSwKKyAgICAgICAgICAgICJkZXNjcmliZSI6IGZhbHNlLAorICAgICAg
ICAgICAgImV4cGVjdCI6IGZhbHNlLAorICAgICAgICAgICAgIml0IjogZmFsc2UsCisgICAgICAg
ICAgICAiamFzbWluZSI6IGZhbHNlLAorICAgICAgICAgICAgInBlbmRpbmciOiBmYWxzZSwKKyAg
ICAgICAgICAgICJzcHlPbiI6IGZhbHNlLAorICAgICAgICAgICAgIndhaXRzIjogZmFsc2UsCisg
ICAgICAgICAgICAid2FpdHNGb3IiOiBmYWxzZSwKKyAgICAgICAgICAgICJ4ZGVzY3JpYmUiOiBm
YWxzZSwKKyAgICAgICAgICAgICJ4aXQiOiBmYWxzZSwKKworICAgICAgICAgICAgImJlZm9yZUFs
bCI6IGZhbHNlLAorICAgICAgICAgICAgImFmdGVyQWxsIjogZmFsc2UsCisgICAgICAgICAgICAi
cnVucyI6IGZhbHNlCisgICAgICAgIH0KKyAgICB9Cit9CisKK30se31dLDI6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworbW9kdWxlLmV4cG9ydHM9eworICAgICJlbnYiOiB7Cisg
ICAgICAgICJicm93c2VyIjogZmFsc2UsCisgICAgICAgICJub2RlIjogZmFsc2UsCisgICAgICAg
ICJhbWQiOiBmYWxzZSwKKyAgICAgICAgIm1vY2hhIjogZmFsc2UsCisgICAgICAgICJqYXNtaW5l
IjogZmFsc2UKKyAgICB9LAorCisgICAgInJ1bGVzIjogeworICAgICAgICAibm8tYWxlcnQiOiAy
LAorICAgICAgICAibm8tYXJyYXktY29uc3RydWN0b3IiOiAyLAorICAgICAgICAibm8tYml0d2lz
ZSI6IDAsCisgICAgICAgICJuby1jYWxsZXIiOiAyLAorICAgICAgICAibm8tY2F0Y2gtc2hhZG93
IjogMiwKKyAgICAgICAgIm5vLWNvbW1hLWRhbmdsZSI6IDIsCisgICAgICAgICJuby1jb25kLWFz
c2lnbiI6IDIsCisgICAgICAgICJuby1jb25zb2xlIjogMiwKKyAgICAgICAgIm5vLWNvbnN0YW50
LWNvbmRpdGlvbiI6IDIsCisgICAgICAgICJuby1jb250cm9sLXJlZ2V4IjogMiwKKyAgICAgICAg
Im5vLWRlYnVnZ2VyIjogMiwKKyAgICAgICAgIm5vLWRlbGV0ZS12YXIiOiAyLAorICAgICAgICAi
bm8tZGl2LXJlZ2V4IjogMCwKKyAgICAgICAgIm5vLWR1cGUta2V5cyI6IDIsCisgICAgICAgICJu
by1lbHNlLXJldHVybiI6IDAsCisgICAgICAgICJuby1lbXB0eSI6IDIsCisgICAgICAgICJuby1l
bXB0eS1jbGFzcyI6IDIsCisgICAgICAgICJuby1lbXB0eS1sYWJlbCI6IDIsCisgICAgICAgICJu
by1lcS1udWxsIjogMCwKKyAgICAgICAgIm5vLWV2YWwiOiAyLAorICAgICAgICAibm8tZXgtYXNz
aWduIjogMiwKKyAgICAgICAgIm5vLWV4dGVuZC1uYXRpdmUiOiAyLAorICAgICAgICAibm8tZXh0
cmEtYmluZCI6IDIsCisgICAgICAgICJuby1leHRyYS1ib29sZWFuLWNhc3QiOiAyLAorICAgICAg
ICAibm8tZXh0cmEtcGFyZW5zIjogMCwKKyAgICAgICAgIm5vLWV4dHJhLXNlbWkiOiAyLAorICAg
ICAgICAibm8tZXh0cmEtc3RyaWN0IjogMiwKKyAgICAgICAgIm5vLWZhbGx0aHJvdWdoIjogMiwK
KyAgICAgICAgIm5vLWZsb2F0aW5nLWRlY2ltYWwiOiAwLAorICAgICAgICAibm8tZnVuYy1hc3Np
Z24iOiAyLAorICAgICAgICAibm8taW1wbGllZC1ldmFsIjogMiwKKyAgICAgICAgIm5vLWlubmVy
LWRlY2xhcmF0aW9ucyI6IFsyLCAiZnVuY3Rpb25zIl0sCisgICAgICAgICJuby1pbnZhbGlkLXJl
Z2V4cCI6IDIsCisgICAgICAgICJuby1pdGVyYXRvciI6IDIsCisgICAgICAgICJuby1sYWJlbC12
YXIiOiAyLAorICAgICAgICAibm8tbGFiZWxzIjogMiwKKyAgICAgICAgIm5vLWxvbmUtYmxvY2tz
IjogMiwKKyAgICAgICAgIm5vLWxvbmVseS1pZiI6IDAsCisgICAgICAgICJuby1sb29wLWZ1bmMi
OiAyLAorICAgICAgICAibm8tbWl4ZWQtcmVxdWlyZXMiOiBbMCwgZmFsc2VdLAorICAgICAgICAi
bm8tbWl4ZWQtc3BhY2VzLWFuZC10YWJzIjogWzIsIGZhbHNlXSwKKyAgICAgICAgIm5vLW11bHRp
LXN0ciI6IDIsCisgICAgICAgICJuby1uYXRpdmUtcmVhc3NpZ24iOiAyLAorICAgICAgICAibm8t
bmVnYXRlZC1pbi1saHMiOiAyLAorICAgICAgICAibm8tbmVzdGVkLXRlcm5hcnkiOiAwLAorICAg
ICAgICAibm8tbmV3IjogMiwKKyAgICAgICAgIm5vLW5ldy1mdW5jIjogMiwKKyAgICAgICAgIm5v
LW5ldy1vYmplY3QiOiAyLAorICAgICAgICAibm8tbmV3LXJlcXVpcmUiOiAwLAorICAgICAgICAi
bm8tbmV3LXdyYXBwZXJzIjogMiwKKyAgICAgICAgIm5vLW9iai1jYWxscyI6IDIsCisgICAgICAg
ICJuby1vY3RhbCI6IDIsCisgICAgICAgICJuby1vY3RhbC1lc2NhcGUiOiAyLAorICAgICAgICAi
bm8tcGF0aC1jb25jYXQiOiAwLAorICAgICAgICAibm8tcGx1c3BsdXMiOiAwLAorICAgICAgICAi
bm8tcHJvY2Vzcy1lbnYiOiAwLAorICAgICAgICAibm8tcHJvY2Vzcy1leGl0IjogMiwKKyAgICAg
ICAgIm5vLXByb3RvIjogMiwKKyAgICAgICAgIm5vLXJlZGVjbGFyZSI6IDIsCisgICAgICAgICJu
by1yZWdleC1zcGFjZXMiOiAyLAorICAgICAgICAibm8tcmVzZXJ2ZWQta2V5cyI6IDAsCisgICAg
ICAgICJuby1yZXN0cmljdGVkLW1vZHVsZXMiOiAwLAorICAgICAgICAibm8tcmV0dXJuLWFzc2ln
biI6IDIsCisgICAgICAgICJuby1zY3JpcHQtdXJsIjogMiwKKyAgICAgICAgIm5vLXNlbGYtY29t
cGFyZSI6IDAsCisgICAgICAgICJuby1zZXF1ZW5jZXMiOiAyLAorICAgICAgICAibm8tc2hhZG93
IjogMiwKKyAgICAgICAgIm5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzIjogMiwKKyAgICAgICAg
Im5vLXNwYWNlLWJlZm9yZS1zZW1pIjogMiwKKyAgICAgICAgIm5vLXNwYWNlZC1mdW5jIjogMiwK
KyAgICAgICAgIm5vLXNwYXJzZS1hcnJheXMiOiAyLAorICAgICAgICAibm8tc3luYyI6IDAsCisg
ICAgICAgICJuby10ZXJuYXJ5IjogMCwKKyAgICAgICAgIm5vLXRyYWlsaW5nLXNwYWNlcyI6IDIs
CisgICAgICAgICJuby11bmRlZiI6IDIsCisgICAgICAgICJuby11bmRlZi1pbml0IjogMiwKKyAg
ICAgICAgIm5vLXVuZGVmaW5lZCI6IDAsCisgICAgICAgICJuby11bmRlcnNjb3JlLWRhbmdsZSI6
IDIsCisgICAgICAgICJuby11bnJlYWNoYWJsZSI6IDIsCisgICAgICAgICJuby11bnVzZWQtZXhw
cmVzc2lvbnMiOiAyLAorICAgICAgICAibm8tdW51c2VkLXZhcnMiOiBbMiwgeyJ2YXJzIjogImFs
bCIsICJhcmdzIjogImFmdGVyLXVzZWQifV0sCisgICAgICAgICJuby11c2UtYmVmb3JlLWRlZmlu
ZSI6IDIsCisgICAgICAgICJuby12b2lkIjogMCwKKyAgICAgICAgIm5vLXdhcm5pbmctY29tbWVu
dHMiOiBbMCwgeyAidGVybXMiOiBbInRvZG8iLCAiZml4bWUiLCAieHh4Il0sICJsb2NhdGlvbiI6
ICJzdGFydCIgfV0sCisgICAgICAgICJuby13aXRoIjogMiwKKyAgICAgICAgIm5vLXdyYXAtZnVu
YyI6IDIsCisKKyAgICAgICAgImJsb2NrLXNjb3BlZC12YXIiOiAwLAorICAgICAgICAiYnJhY2Ut
c3R5bGUiOiBbMCwgIjF0YnMiXSwKKyAgICAgICAgImNhbWVsY2FzZSI6IDIsCisgICAgICAgICJj
b21tYS1zdHlsZSI6IDAsCisgICAgICAgICJjb21wbGV4aXR5IjogWzAsIDExXSwKKyAgICAgICAg
ImNvbnNpc3RlbnQtcmV0dXJuIjogMiwKKyAgICAgICAgImNvbnNpc3RlbnQtdGhpcyI6IFswLCAi
dGhhdCJdLAorICAgICAgICAiY3VybHkiOiBbMiwgImFsbCJdLAorICAgICAgICAiZGVmYXVsdC1j
YXNlIjogMCwKKyAgICAgICAgImRvdC1ub3RhdGlvbiI6IDIsCisgICAgICAgICJlb2wtbGFzdCI6
IDIsCisgICAgICAgICJlcWVxZXEiOiAyLAorICAgICAgICAiZnVuYy1uYW1lcyI6IDAsCisgICAg
ICAgICJmdW5jLXN0eWxlIjogWzAsICJkZWNsYXJhdGlvbiJdLAorICAgICAgICAiZ2xvYmFsLXN0
cmljdCI6IFsyLCAibmV2ZXIiXSwKKyAgICAgICAgImd1YXJkLWZvci1pbiI6IDAsCisgICAgICAg
ICJoYW5kbGUtY2FsbGJhY2stZXJyIjogMCwKKyAgICAgICAgIm1heC1kZXB0aCI6IFswLCA0XSwK
KyAgICAgICAgIm1heC1sZW4iOiBbMCwgODAsIDRdLAorICAgICAgICAibWF4LW5lc3RlZC1jYWxs
YmFja3MiOiBbMCwgMl0sCisgICAgICAgICJtYXgtcGFyYW1zIjogWzAsIDNdLAorICAgICAgICAi
bWF4LXN0YXRlbWVudHMiOiBbMCwgMTBdLAorICAgICAgICAibmV3LWNhcCI6IDIsCisgICAgICAg
ICJuZXctcGFyZW5zIjogMiwKKyAgICAgICAgIm9uZS12YXIiOiAwLAorICAgICAgICAicGFkZGVk
LWJsb2NrcyI6IDAsCisgICAgICAgICJxdW90ZS1wcm9wcyI6IDAsCisgICAgICAgICJxdW90ZXMi
OiBbMiwgImRvdWJsZSJdLAorICAgICAgICAicmFkaXgiOiAwLAorICAgICAgICAic2VtaSI6IDIs
CisgICAgICAgICJzb3J0LXZhcnMiOiAwLAorICAgICAgICAic3BhY2UtYWZ0ZXIta2V5d29yZHMi
OiBbMCwgImFsd2F5cyJdLAorICAgICAgICAic3BhY2UtaW4tYnJhY2tldHMiOiBbMCwgIm5ldmVy
Il0sCisgICAgICAgICJzcGFjZS1pbi1wYXJlbnMiOiBbMCwgIm5ldmVyIl0sCisgICAgICAgICJz
cGFjZS1pbmZpeC1vcHMiOiAyLAorICAgICAgICAic3BhY2UtcmV0dXJuLXRocm93LWNhc2UiOiAy
LAorICAgICAgICAic3BhY2UtdW5hcnktd29yZC1vcHMiOiAwLAorICAgICAgICAic3RyaWN0Ijog
MiwKKyAgICAgICAgInVzZS1pc25hbiI6IDIsCisgICAgICAgICJ2YWxpZC1qc2RvYyI6IDAsCisg
ICAgICAgICJ2YWxpZC10eXBlb2YiOiAyLAorICAgICAgICAidmFycy1vbi10b3AiOiAwLAorICAg
ICAgICAid3JhcC1paWZlIjogMCwKKyAgICAgICAgIndyYXAtcmVnZXgiOiAwLAorICAgICAgICAi
eW9kYSI6IFsyLCAibmV2ZXIiXQorICAgIH0KK30KKworfSx7fV0sMzpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBO
b2RlIGNvbnRyaWJ1dG9ycy4KKy8vCisvLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm
cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorLy8gY29weSBvZiB0aGlz
IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorLy8gIlNv
ZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGlu
Y2x1ZGluZworLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBt
b2RpZnksIG1lcmdlLCBwdWJsaXNoLAorLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29y
IHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdAorLy8gcGVyc29ucyB0
byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl
CisvLyBmb2xsb3dpbmcgY29uZGl0aW9uczoKKy8vCisvLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorLy8gaW4g
YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisvLwor
Ly8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsIEVYUFJFU1MKKy8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU
RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKy8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4KKy8vIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z
IENMQUlNLAorLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU
SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisvLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VU
IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisvLyBVU0UgT1Ig
T1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitmdW5jdGlvbiBFdmVudEVtaXR0ZXIo
KSB7CisgIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTsKKyAgdGhpcy5fbWF4TGlz
dGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDsKK30KK21vZHVsZS5leHBv
cnRzID0gRXZlbnRFbWl0dGVyOworCisvLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEw
LngKK0V2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7CisKK0V2ZW50RW1p
dHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDsKK0V2ZW50RW1pdHRlci5wcm90b3R5
cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDsKKworLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0
ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlCisv
LyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRp
bmcgbWVtb3J5IGxlYWtzLgorRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDsK
KworLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAu
IFRoaXMgZnVuY3Rpb24gYWxsb3dzCisvLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHpl
cm8gZm9yIHVubGltaXRlZC4KK0V2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJz
ID0gZnVuY3Rpb24obikgeworICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4p
KQorICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7Cisg
IHRoaXMuX21heExpc3RlbmVycyA9IG47CisgIHJldHVybiB0aGlzOworfTsKKworRXZlbnRFbWl0
dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkgeworICB2YXIgZXIsIGhhbmRsZXIs
IGxlbiwgYXJncywgaSwgbGlzdGVuZXJzOworCisgIGlmICghdGhpcy5fZXZlbnRzKQorICAgIHRo
aXMuX2V2ZW50cyA9IHt9OworCisgIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlz
dGVuZXIgdGhlbiB0aHJvdy4KKyAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHsKKyAgICBpZiAoIXRo
aXMuX2V2ZW50cy5lcnJvciB8fAorICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9y
KSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHsKKyAgICAgIGVyID0gYXJndW1lbnRz
WzFdOworICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHsKKyAgICAgICAgdGhyb3cgZXI7
IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50CisgICAgICB9CisgICAgICB0aHJvdyBUeXBlRXJy
b3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCAiZXJyb3IiIGV2ZW50LicpOworICAgIH0KKyAgfQor
CisgIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07CisKKyAgaWYgKGlzVW5kZWZpbmVkKGhh
bmRsZXIpKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkg
eworICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAgLy8gZmFzdCBjYXNlcwor
ICAgICAgY2FzZSAxOgorICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSAyOgorICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFd
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDM6CisgICAgICAgIGhhbmRsZXIuY2FsbCh0
aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Ly8gc2xvd2VyCisgICAgICBkZWZhdWx0OgorICAgICAgICBsZW4gPSBhcmd1bWVudHMubGVuZ3Ro
OworICAgICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpOworICAgICAgICBmb3IgKGkgPSAx
OyBpIDwgbGVuOyBpKyspCisgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07Cisg
ICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7CisgICAgfQorICB9IGVsc2UgaWYgKGlz
T2JqZWN0KGhhbmRsZXIpKSB7CisgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKKyAgICBhcmdz
ID0gbmV3IEFycmF5KGxlbiAtIDEpOworICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykKKyAg
ICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOworCisgICAgbGlzdGVuZXJzID0gaGFuZGxl
ci5zbGljZSgpOworICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7CisgICAgZm9yIChpID0gMDsg
aSA8IGxlbjsgaSsrKQorICAgICAgbGlzdGVuZXJzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpOworICB9
CisKKyAgcmV0dXJuIHRydWU7Cit9OworCitFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3Rl
bmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHsKKyAgdmFyIG07CisKKyAgaWYgKCFpc0Z1
bmN0aW9uKGxpc3RlbmVyKSkKKyAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUg
YSBmdW5jdGlvbicpOworCisgIGlmICghdGhpcy5fZXZlbnRzKQorICAgIHRoaXMuX2V2ZW50cyA9
IHt9OworCisgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09
ICJuZXdMaXN0ZW5lciIhIEJlZm9yZQorICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywg
Zmlyc3QgZW1pdCAibmV3TGlzdGVuZXIiLgorICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVy
KQorICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLAorICAgICAgICAgICAgICBpc0Z1
bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/CisgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3Rl
bmVyIDogbGlzdGVuZXIpOworCisgIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKQorICAgIC8vIE9w
dGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJy
YXkgb2JqZWN0LgorICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyOworICBlbHNlIGlm
IChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKQorICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkg
Z290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC4KKyAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChs
aXN0ZW5lcik7CisgIGVsc2UKKyAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVk
IHRvIGNoYW5nZSB0byBhcnJheS4KKyAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZl
bnRzW3R5cGVdLCBsaXN0ZW5lcl07CisKKyAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWsKKyAg
aWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53
YXJuZWQpIHsKKyAgICB2YXIgbTsKKyAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3Rl
bmVycykpIHsKKyAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7CisgICAgfSBlbHNlIHsKKyAg
ICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVyczsKKyAgICB9CisKKyAgICBp
ZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkgeworICAgICAg
dGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7CisgICAgICBjb25zb2xlLmVycm9yKCco
bm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICsKKyAgICAgICAg
ICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArCisgICAg
ICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFz
ZSBsaW1pdC4nLAorICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3Ro
KTsKKyAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykgeworICAg
ICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwCisgICAgICAgIGNvbnNvbGUudHJhY2UoKTsK
KyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK0V2ZW50RW1pdHRl
ci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyOworCitF
dmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikgewor
ICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKQorICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVu
ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7CisKKyAgdmFyIGZpcmVkID0gZmFsc2U7CisKKyAgZnVu
Y3Rpb24gZygpIHsKKyAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpOworCisgICAgaWYg
KCFmaXJlZCkgeworICAgICAgZmlyZWQgPSB0cnVlOworICAgICAgbGlzdGVuZXIuYXBwbHkodGhp
cywgYXJndW1lbnRzKTsKKyAgICB9CisgIH0KKworICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7Cisg
IHRoaXMub24odHlwZSwgZyk7CisKKyAgcmV0dXJuIHRoaXM7Cit9OworCisvLyBlbWl0cyBhICdy
ZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZAorRXZlbnRF
bWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVy
KSB7CisgIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpOworCisgIGlmICghaXNGdW5jdGlv
bihsaXN0ZW5lcikpCisgICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVu
Y3Rpb24nKTsKKworICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKQor
ICAgIHJldHVybiB0aGlzOworCisgIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07CisgIGxlbmd0
aCA9IGxpc3QubGVuZ3RoOworICBwb3NpdGlvbiA9IC0xOworCisgIGlmIChsaXN0ID09PSBsaXN0
ZW5lciB8fAorICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5l
ciA9PT0gbGlzdGVuZXIpKSB7CisgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKyAgICBp
ZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKQorICAgICAgdGhpcy5lbWl0KCdyZW1vdmVM
aXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTsKKworICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3Qp
KSB7CisgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykgeworICAgICAgaWYgKGxpc3RbaV0g
PT09IGxpc3RlbmVyIHx8CisgICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5s
aXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7CisgICAgICAgIHBvc2l0aW9uID0gaTsKKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHBvc2l0aW9uIDwgMCkKKyAgICAgIHJl
dHVybiB0aGlzOworCisgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7CisgICAgICBsaXN0Lmxl
bmd0aCA9IDA7CisgICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOworICAgIH0gZWxzZSB7
CisgICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7CisgICAgfQorCisgICAgaWYgKHRoaXMu
X2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikKKyAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXIn
LCB0eXBlLCBsaXN0ZW5lcik7CisgIH0KKworICByZXR1cm4gdGhpczsKK307CisKK0V2ZW50RW1p
dHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkgeworICB2
YXIga2V5LCBsaXN0ZW5lcnM7CisKKyAgaWYgKCF0aGlzLl9ldmVudHMpCisgICAgcmV0dXJuIHRo
aXM7CisKKyAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8g
ZW1pdAorICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikgeworICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoID09PSAwKQorICAgICAgdGhpcy5fZXZlbnRzID0ge307CisgICAgZWxzZSBp
ZiAodGhpcy5fZXZlbnRzW3R5cGVdKQorICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsK
KyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFs
bCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50cworICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkg
eworICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykgeworICAgICAgaWYgKGtleSA9PT0gJ3Jl
bW92ZUxpc3RlbmVyJykgY29udGludWU7CisgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhr
ZXkpOworICAgIH0KKyAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXIn
KTsKKyAgICB0aGlzLl9ldmVudHMgPSB7fTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGxp
c3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKKworICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5l
cnMpKSB7CisgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpOworICB9IGVs
c2UgeworICAgIC8vIExJRk8gb3JkZXIKKyAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aCkKKyAg
ICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGgg
LSAxXSk7CisgIH0KKyAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKKworICByZXR1cm4gdGhp
czsKK307CisKK0V2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlw
ZSkgeworICB2YXIgcmV0OworICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5
cGVdKQorICAgIHJldCA9IFtdOworICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0
eXBlXSkpCisgICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07CisgIGVsc2UKKyAgICByZXQg
PSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTsKKyAgcmV0dXJuIHJldDsKK307CisKK0V2ZW50
RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkgeworICB2YXIg
cmV0OworICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW3R5cGVdKQor
ICAgIHJldCA9IDA7CisgIGVsc2UgaWYgKGlzRnVuY3Rpb24oZW1pdHRlci5fZXZlbnRzW3R5cGVd
KSkKKyAgICByZXQgPSAxOworICBlbHNlCisgICAgcmV0ID0gZW1pdHRlci5fZXZlbnRzW3R5cGVd
Lmxlbmd0aDsKKyAgcmV0dXJuIHJldDsKK307CisKK2Z1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7
CisgIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nOworfQorCitmdW5jdGlvbiBpc051
bWJlcihhcmcpIHsKKyAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInOworfQorCitmdW5j
dGlvbiBpc09iamVjdChhcmcpIHsKKyAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYm
IGFyZyAhPT0gbnVsbDsKK30KKworZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7CisgIHJldHVy
biBhcmcgPT09IHZvaWQgMDsKK30KKworfSx7fV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxNCBEYW4gVGFvIDxkYW5p
ZWwudGFvQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIEFuZHJldyBFaXNlbmJlcmcg
PGFuZHJld0BlaXNlbmJlcmcuYXM+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0
OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorICBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKKy8qanNsaW50IGJpdHdpc2U6dHJ1ZSBwbHVzcGx1czp0cnVlIGVxZXE6dHJ1ZSBub21lbjp0
cnVlKi8KKy8qZ2xvYmFsIGRvY3RyaW5lOnRydWUsIGV4cG9ydHM6dHJ1ZSwgcGFyc2VUeXBlRXhw
cmVzc2lvbjp0cnVlLCBwYXJzZVRvcDp0cnVlKi8KKworKGZ1bmN0aW9uIChleHBvcnRzKSB7Cisg
ICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIFZFUlNJT04sCisgICAgICAgIFJlZ2V4LAorICAg
ICAgICBDYW5BY2Nlc3NTdHJpbmdCeUluZGV4LAorICAgICAgICB0eXBlZCwKKyAgICAgICAganNk
b2MsCisgICAgICAgIGlzQXJyYXksCisgICAgICAgIGhhc093blByb3BlcnR5OworCisgICAgLy8g
U3luYyB3aXRoIHBhY2thZ2UuanNvbi4KKyAgICBWRVJTSU9OID0gJzAuNS4yLWRldic7CisKKyAg
ICAvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LgorICAgIFJlZ2V4
ID0geworICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgnW1x4YWFc
eGI1XHhiYVx4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHUwMmMxXHUwMmM2LVx1MDJkMVx1MDJlMC1c
dTAyZTRcdTAyZWNcdTAyZWVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdhLVx1MDM3ZFx1
MDM4Nlx1MDM4OC1cdTAzOGFcdTAzOGNcdTAzOGUtXHUwM2ExXHUwM2EzLVx1MDNmNVx1MDNmNy1c
dTA0ODFcdTA0OGEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1ZDAt
XHUwNWVhXHUwNWYwLVx1MDVmMlx1MDYyMC1cdTA2NGFcdTA2NmVcdTA2NmZcdTA2NzEtXHUwNmQz
XHUwNmQ1XHUwNmU1XHUwNmU2XHUwNmVlXHUwNmVmXHUwNmZhLVx1MDZmY1x1MDZmZlx1MDcxMFx1
MDcxMi1cdTA3MmZcdTA3NGQtXHUwN2E1XHUwN2IxXHUwN2NhLVx1MDdlYVx1MDdmNFx1MDdmNVx1
MDdmYVx1MDgwMC1cdTA4MTVcdTA4MWFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOGEwXHUw
OGEyLVx1MDhhY1x1MDkwNC1cdTA5MzlcdTA5M2RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1
MDk3N1x1MDk3OS1cdTA5N2ZcdTA5ODUtXHUwOThjXHUwOThmXHUwOTkwXHUwOTkzLVx1MDlhOFx1
MDlhYS1cdTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5XHUwOWJkXHUwOWNlXHUwOWRjXHUwOWRkXHUw
OWRmLVx1MDllMVx1MDlmMFx1MDlmMVx1MGEwNS1cdTBhMGFcdTBhMGZcdTBhMTBcdTBhMTMtXHUw
YTI4XHUwYTJhLVx1MGEzMFx1MGEzMlx1MGEzM1x1MGEzNVx1MGEzNlx1MGEzOFx1MGEzOVx1MGE1
OS1cdTBhNWNcdTBhNWVcdTBhNzItXHUwYTc0XHUwYTg1LVx1MGE4ZFx1MGE4Zi1cdTBhOTFcdTBh
OTMtXHUwYWE4XHUwYWFhLVx1MGFiMFx1MGFiMlx1MGFiM1x1MGFiNS1cdTBhYjlcdTBhYmRcdTBh
ZDBcdTBhZTBcdTBhZTFcdTBiMDUtXHUwYjBjXHUwYjBmXHUwYjEwXHUwYjEzLVx1MGIyOFx1MGIy
YS1cdTBiMzBcdTBiMzJcdTBiMzNcdTBiMzUtXHUwYjM5XHUwYjNkXHUwYjVjXHUwYjVkXHUwYjVm
LVx1MGI2MVx1MGI3MVx1MGI4M1x1MGI4NS1cdTBiOGFcdTBiOGUtXHUwYjkwXHUwYjkyLVx1MGI5
NVx1MGI5OVx1MGI5YVx1MGI5Y1x1MGI5ZVx1MGI5Zlx1MGJhM1x1MGJhNFx1MGJhOC1cdTBiYWFc
dTBiYWUtXHUwYmI5XHUwYmQwXHUwYzA1LVx1MGMwY1x1MGMwZS1cdTBjMTBcdTBjMTItXHUwYzI4
XHUwYzJhLVx1MGMzM1x1MGMzNS1cdTBjMzlcdTBjM2RcdTBjNThcdTBjNTlcdTBjNjBcdTBjNjFc
dTBjODUtXHUwYzhjXHUwYzhlLVx1MGM5MFx1MGM5Mi1cdTBjYThcdTBjYWEtXHUwY2IzXHUwY2I1
LVx1MGNiOVx1MGNiZFx1MGNkZVx1MGNlMFx1MGNlMVx1MGNmMVx1MGNmMlx1MGQwNS1cdTBkMGNc
dTBkMGUtXHUwZDEwXHUwZDEyLVx1MGQzYVx1MGQzZFx1MGQ0ZVx1MGQ2MFx1MGQ2MVx1MGQ3YS1c
dTBkN2ZcdTBkODUtXHUwZDk2XHUwZDlhLVx1MGRiMVx1MGRiMy1cdTBkYmJcdTBkYmRcdTBkYzAt
XHUwZGM2XHUwZTAxLVx1MGUzMFx1MGUzMlx1MGUzM1x1MGU0MC1cdTBlNDZcdTBlODFcdTBlODJc
dTBlODRcdTBlODdcdTBlODhcdTBlOGFcdTBlOGRcdTBlOTQtXHUwZTk3XHUwZTk5LVx1MGU5Zlx1
MGVhMS1cdTBlYTNcdTBlYTVcdTBlYTdcdTBlYWFcdTBlYWJcdTBlYWQtXHUwZWIwXHUwZWIyXHUw
ZWIzXHUwZWJkXHUwZWMwLVx1MGVjNFx1MGVjNlx1MGVkYy1cdTBlZGZcdTBmMDBcdTBmNDAtXHUw
ZjQ3XHUwZjQ5LVx1MGY2Y1x1MGY4OC1cdTBmOGNcdTEwMDAtXHUxMDJhXHUxMDNmXHUxMDUwLVx1
MTA1NVx1MTA1YS1cdTEwNWRcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNmUtXHUxMDcwXHUxMDc1LVx1
MTA4MVx1MTA4ZVx1MTBhMC1cdTEwYzVcdTEwYzdcdTEwY2RcdTEwZDAtXHUxMGZhXHUxMGZjLVx1
MTI0OFx1MTI0YS1cdTEyNGRcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVhLVx1MTI1ZFx1MTI2MC1c
dTEyODhcdTEyOGEtXHUxMjhkXHUxMjkwLVx1MTJiMFx1MTJiMi1cdTEyYjVcdTEyYjgtXHUxMmJl
XHUxMmMwXHUxMmMyLVx1MTJjNVx1MTJjOC1cdTEyZDZcdTEyZDgtXHUxMzEwXHUxMzEyLVx1MTMx
NVx1MTMxOC1cdTEzNWFcdTEzODAtXHUxMzhmXHUxM2EwLVx1MTNmNFx1MTQwMS1cdTE2NmNcdTE2
NmYtXHUxNjdmXHUxNjgxLVx1MTY5YVx1MTZhMC1cdTE2ZWFcdTE2ZWUtXHUxNmYwXHUxNzAwLVx1
MTcwY1x1MTcwZS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NmNc
dTE3NmUtXHUxNzcwXHUxNzgwLVx1MTdiM1x1MTdkN1x1MTdkY1x1MTgyMC1cdTE4NzdcdTE4ODAt
XHUxOGE4XHUxOGFhXHUxOGIwLVx1MThmNVx1MTkwMC1cdTE5MWNcdTE5NTAtXHUxOTZkXHUxOTcw
LVx1MTk3NFx1MTk4MC1cdTE5YWJcdTE5YzEtXHUxOWM3XHUxYTAwLVx1MWExNlx1MWEyMC1cdTFh
NTRcdTFhYTdcdTFiMDUtXHUxYjMzXHUxYjQ1LVx1MWI0Ylx1MWI4My1cdTFiYTBcdTFiYWVcdTFi
YWZcdTFiYmEtXHUxYmU1XHUxYzAwLVx1MWMyM1x1MWM0ZC1cdTFjNGZcdTFjNWEtXHUxYzdkXHUx
Y2U5LVx1MWNlY1x1MWNlZS1cdTFjZjFcdTFjZjVcdTFjZjZcdTFkMDAtXHUxZGJmXHUxZTAwLVx1
MWYxNVx1MWYxOC1cdTFmMWRcdTFmMjAtXHUxZjQ1XHUxZjQ4LVx1MWY0ZFx1MWY1MC1cdTFmNTdc
dTFmNTlcdTFmNWJcdTFmNWRcdTFmNWYtXHUxZjdkXHUxZjgwLVx1MWZiNFx1MWZiNi1cdTFmYmNc
dTFmYmVcdTFmYzItXHUxZmM0XHUxZmM2LVx1MWZjY1x1MWZkMC1cdTFmZDNcdTFmZDYtXHUxZmRi
XHUxZmUwLVx1MWZlY1x1MWZmMi1cdTFmZjRcdTFmZjYtXHUxZmZjXHUyMDcxXHUyMDdmXHUyMDkw
LVx1MjA5Y1x1MjEwMlx1MjEwN1x1MjEwYS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFkXHUyMTI0
XHUyMTI2XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEyZi1cdTIxMzlcdTIxM2MtXHUyMTNmXHUyMTQ1
LVx1MjE0OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAtXHUyYzJlXHUyYzMwLVx1MmM1ZVx1MmM2
MC1cdTJjZTRcdTJjZWItXHUyY2VlXHUyY2YyXHUyY2YzXHUyZDAwLVx1MmQyNVx1MmQyN1x1MmQy
ZFx1MmQzMC1cdTJkNjdcdTJkNmZcdTJkODAtXHUyZDk2XHUyZGEwLVx1MmRhNlx1MmRhOC1cdTJk
YWVcdTJkYjAtXHUyZGI2XHUyZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZcdTJkYzgtXHUyZGNlXHUy
ZGQwLVx1MmRkNlx1MmRkOC1cdTJkZGVcdTJlMmZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAyOVx1
MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNjXHUzMDQxLVx1MzA5Nlx1MzA5ZC1cdTMwOWZcdTMwYTEt
XHUzMGZhXHUzMGZjLVx1MzBmZlx1MzEwNS1cdTMxMmRcdTMxMzEtXHUzMThlXHUzMWEwLVx1MzFi
YVx1MzFmMC1cdTMxZmZcdTM0MDAtXHU0ZGI1XHU0ZTAwLVx1OWZjY1x1YTAwMC1cdWE0OGNcdWE0
ZDAtXHVhNGZkXHVhNTAwLVx1YTYwY1x1YTYxMC1cdWE2MWZcdWE2MmFcdWE2MmJcdWE2NDAtXHVh
NjZlXHVhNjdmLVx1YTY5N1x1YTZhMC1cdWE2ZWZcdWE3MTctXHVhNzFmXHVhNzIyLVx1YTc4OFx1
YTc4Yi1cdWE3OGVcdWE3OTAtXHVhNzkzXHVhN2EwLVx1YTdhYVx1YTdmOC1cdWE4MDFcdWE4MDMt
XHVhODA1XHVhODA3LVx1YTgwYVx1YTgwYy1cdWE4MjJcdWE4NDAtXHVhODczXHVhODgyLVx1YThi
M1x1YThmMi1cdWE4ZjdcdWE4ZmJcdWE5MGEtXHVhOTI1XHVhOTMwLVx1YTk0Nlx1YTk2MC1cdWE5
N2NcdWE5ODQtXHVhOWIyXHVhOWNmXHVhYTAwLVx1YWEyOFx1YWE0MC1cdWFhNDJcdWFhNDQtXHVh
YTRiXHVhYTYwLVx1YWE3Nlx1YWE3YVx1YWE4MC1cdWFhYWZcdWFhYjFcdWFhYjVcdWFhYjZcdWFh
YjktXHVhYWJkXHVhYWMwXHVhYWMyXHVhYWRiLVx1YWFkZFx1YWFlMC1cdWFhZWFcdWFhZjItXHVh
YWY0XHVhYjAxLVx1YWIwNlx1YWIwOS1cdWFiMGVcdWFiMTEtXHVhYjE2XHVhYjIwLVx1YWIyNlx1
YWIyOC1cdWFiMmVcdWFiYzAtXHVhYmUyXHVhYzAwLVx1ZDdhM1x1ZDdiMC1cdWQ3YzZcdWQ3Y2It
XHVkN2ZiXHVmOTAwLVx1ZmE2ZFx1ZmE3MC1cdWZhZDlcdWZiMDAtXHVmYjA2XHVmYjEzLVx1ZmIx
N1x1ZmIxZFx1ZmIxZi1cdWZiMjhcdWZiMmEtXHVmYjM2XHVmYjM4LVx1ZmIzY1x1ZmIzZVx1ZmI0
MFx1ZmI0MVx1ZmI0M1x1ZmI0NFx1ZmI0Ni1cdWZiYjFcdWZiZDMtXHVmZDNkXHVmZDUwLVx1ZmQ4
Zlx1ZmQ5Mi1cdWZkYzdcdWZkZjAtXHVmZGZiXHVmZTcwLVx1ZmU3NFx1ZmU3Ni1cdWZlZmNcdWZm
MjEtXHVmZjNhXHVmZjQxLVx1ZmY1YVx1ZmY2Ni1cdWZmYmVcdWZmYzItXHVmZmM3XHVmZmNhLVx1
ZmZjZlx1ZmZkMi1cdWZmZDdcdWZmZGEtXHVmZmRjXScpLAorICAgICAgICBOb25Bc2NpaUlkZW50
aWZpZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXHhhYVx4YjVceGJhXHhjMC1ceGQ2XHhkOC1ceGY2XHhm
OC1cdTAyYzFcdTAyYzYtXHUwMmQxXHUwMmUwLVx1MDJlNFx1MDJlY1x1MDJlZVx1MDMwMC1cdTAz
NzRcdTAzNzZcdTAzNzdcdTAzN2EtXHUwMzdkXHUwMzg2XHUwMzg4LVx1MDM4YVx1MDM4Y1x1MDM4
ZS1cdTAzYTFcdTAzYTMtXHUwM2Y1XHUwM2Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OGEtXHUw
NTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNWJkXHUwNWJmXHUw
NWMxXHUwNWMyXHUwNWM0XHUwNWM1XHUwNWM3XHUwNWQwLVx1MDVlYVx1MDVmMC1cdTA1ZjJcdTA2
MTAtXHUwNjFhXHUwNjIwLVx1MDY2OVx1MDY2ZS1cdTA2ZDNcdTA2ZDUtXHUwNmRjXHUwNmRmLVx1
MDZlOFx1MDZlYS1cdTA2ZmNcdTA2ZmZcdTA3MTAtXHUwNzRhXHUwNzRkLVx1MDdiMVx1MDdjMC1c
dTA3ZjVcdTA3ZmFcdTA4MDAtXHUwODJkXHUwODQwLVx1MDg1Ylx1MDhhMFx1MDhhMi1cdTA4YWNc
dTA4ZTQtXHUwOGZlXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5NmZcdTA5NzEtXHUwOTc3XHUwOTc5
LVx1MDk3Zlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThjXHUwOThmXHUwOTkwXHUwOTkzLVx1MDlh
OFx1MDlhYS1cdTA5YjBcdTA5YjJcdTA5YjYtXHUwOWI5XHUwOWJjLVx1MDljNFx1MDljN1x1MDlj
OFx1MDljYi1cdTA5Y2VcdTA5ZDdcdTA5ZGNcdTA5ZGRcdTA5ZGYtXHUwOWUzXHUwOWU2LVx1MDlm
MVx1MGEwMS1cdTBhMDNcdTBhMDUtXHUwYTBhXHUwYTBmXHUwYTEwXHUwYTEzLVx1MGEyOFx1MGEy
YS1cdTBhMzBcdTBhMzJcdTBhMzNcdTBhMzVcdTBhMzZcdTBhMzhcdTBhMzlcdTBhM2NcdTBhM2Ut
XHUwYTQyXHUwYTQ3XHUwYTQ4XHUwYTRiLVx1MGE0ZFx1MGE1MVx1MGE1OS1cdTBhNWNcdTBhNWVc
dTBhNjYtXHUwYTc1XHUwYTgxLVx1MGE4M1x1MGE4NS1cdTBhOGRcdTBhOGYtXHUwYTkxXHUwYTkz
LVx1MGFhOFx1MGFhYS1cdTBhYjBcdTBhYjJcdTBhYjNcdTBhYjUtXHUwYWI5XHUwYWJjLVx1MGFj
NVx1MGFjNy1cdTBhYzlcdTBhY2ItXHUwYWNkXHUwYWQwXHUwYWUwLVx1MGFlM1x1MGFlNi1cdTBh
ZWZcdTBiMDEtXHUwYjAzXHUwYjA1LVx1MGIwY1x1MGIwZlx1MGIxMFx1MGIxMy1cdTBiMjhcdTBi
MmEtXHUwYjMwXHUwYjMyXHUwYjMzXHUwYjM1LVx1MGIzOVx1MGIzYy1cdTBiNDRcdTBiNDdcdTBi
NDhcdTBiNGItXHUwYjRkXHUwYjU2XHUwYjU3XHUwYjVjXHUwYjVkXHUwYjVmLVx1MGI2M1x1MGI2
Ni1cdTBiNmZcdTBiNzFcdTBiODJcdTBiODNcdTBiODUtXHUwYjhhXHUwYjhlLVx1MGI5MFx1MGI5
Mi1cdTBiOTVcdTBiOTlcdTBiOWFcdTBiOWNcdTBiOWVcdTBiOWZcdTBiYTNcdTBiYTRcdTBiYTgt
XHUwYmFhXHUwYmFlLVx1MGJiOVx1MGJiZS1cdTBiYzJcdTBiYzYtXHUwYmM4XHUwYmNhLVx1MGJj
ZFx1MGJkMFx1MGJkN1x1MGJlNi1cdTBiZWZcdTBjMDEtXHUwYzAzXHUwYzA1LVx1MGMwY1x1MGMw
ZS1cdTBjMTBcdTBjMTItXHUwYzI4XHUwYzJhLVx1MGMzM1x1MGMzNS1cdTBjMzlcdTBjM2QtXHUw
YzQ0XHUwYzQ2LVx1MGM0OFx1MGM0YS1cdTBjNGRcdTBjNTVcdTBjNTZcdTBjNThcdTBjNTlcdTBj
NjAtXHUwYzYzXHUwYzY2LVx1MGM2Zlx1MGM4Mlx1MGM4M1x1MGM4NS1cdTBjOGNcdTBjOGUtXHUw
YzkwXHUwYzkyLVx1MGNhOFx1MGNhYS1cdTBjYjNcdTBjYjUtXHUwY2I5XHUwY2JjLVx1MGNjNFx1
MGNjNi1cdTBjYzhcdTBjY2EtXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2RlXHUwY2UwLVx1MGNlM1x1
MGNlNi1cdTBjZWZcdTBjZjFcdTBjZjJcdTBkMDJcdTBkMDNcdTBkMDUtXHUwZDBjXHUwZDBlLVx1
MGQxMFx1MGQxMi1cdTBkM2FcdTBkM2QtXHUwZDQ0XHUwZDQ2LVx1MGQ0OFx1MGQ0YS1cdTBkNGVc
dTBkNTdcdTBkNjAtXHUwZDYzXHUwZDY2LVx1MGQ2Zlx1MGQ3YS1cdTBkN2ZcdTBkODJcdTBkODNc
dTBkODUtXHUwZDk2XHUwZDlhLVx1MGRiMVx1MGRiMy1cdTBkYmJcdTBkYmRcdTBkYzAtXHUwZGM2
XHUwZGNhXHUwZGNmLVx1MGRkNFx1MGRkNlx1MGRkOC1cdTBkZGZcdTBkZjJcdTBkZjNcdTBlMDEt
XHUwZTNhXHUwZTQwLVx1MGU0ZVx1MGU1MC1cdTBlNTlcdTBlODFcdTBlODJcdTBlODRcdTBlODdc
dTBlODhcdTBlOGFcdTBlOGRcdTBlOTQtXHUwZTk3XHUwZTk5LVx1MGU5Zlx1MGVhMS1cdTBlYTNc
dTBlYTVcdTBlYTdcdTBlYWFcdTBlYWJcdTBlYWQtXHUwZWI5XHUwZWJiLVx1MGViZFx1MGVjMC1c
dTBlYzRcdTBlYzZcdTBlYzgtXHUwZWNkXHUwZWQwLVx1MGVkOVx1MGVkYy1cdTBlZGZcdTBmMDBc
dTBmMThcdTBmMTlcdTBmMjAtXHUwZjI5XHUwZjM1XHUwZjM3XHUwZjM5XHUwZjNlLVx1MGY0N1x1
MGY0OS1cdTBmNmNcdTBmNzEtXHUwZjg0XHUwZjg2LVx1MGY5N1x1MGY5OS1cdTBmYmNcdTBmYzZc
dTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5ZFx1MTBhMC1cdTEwYzVcdTEwYzdcdTEwY2RcdTEwZDAt
XHUxMGZhXHUxMGZjLVx1MTI0OFx1MTI0YS1cdTEyNGRcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVh
LVx1MTI1ZFx1MTI2MC1cdTEyODhcdTEyOGEtXHUxMjhkXHUxMjkwLVx1MTJiMFx1MTJiMi1cdTEy
YjVcdTEyYjgtXHUxMmJlXHUxMmMwXHUxMmMyLVx1MTJjNVx1MTJjOC1cdTEyZDZcdTEyZDgtXHUx
MzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNWFcdTEzNWQtXHUxMzVmXHUxMzgwLVx1MTM4Zlx1
MTNhMC1cdTEzZjRcdTE0MDEtXHUxNjZjXHUxNjZmLVx1MTY3Zlx1MTY4MS1cdTE2OWFcdTE2YTAt
XHUxNmVhXHUxNmVlLVx1MTZmMFx1MTcwMC1cdTE3MGNcdTE3MGUtXHUxNzE0XHUxNzIwLVx1MTcz
NFx1MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZjXHUxNzZlLVx1MTc3MFx1MTc3Mlx1MTc3M1x1MTc4
MC1cdTE3ZDNcdTE3ZDdcdTE3ZGNcdTE3ZGRcdTE3ZTAtXHUxN2U5XHUxODBiLVx1MTgwZFx1MTgx
MC1cdTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThhYVx1MThiMC1cdTE4ZjVcdTE5MDAtXHUx
OTFjXHUxOTIwLVx1MTkyYlx1MTkzMC1cdTE5M2JcdTE5NDYtXHUxOTZkXHUxOTcwLVx1MTk3NFx1
MTk4MC1cdTE5YWJcdTE5YjAtXHUxOWM5XHUxOWQwLVx1MTlkOVx1MWEwMC1cdTFhMWJcdTFhMjAt
XHUxYTVlXHUxYTYwLVx1MWE3Y1x1MWE3Zi1cdTFhODlcdTFhOTAtXHUxYTk5XHUxYWE3XHUxYjAw
LVx1MWI0Ylx1MWI1MC1cdTFiNTlcdTFiNmItXHUxYjczXHUxYjgwLVx1MWJmM1x1MWMwMC1cdTFj
MzdcdTFjNDAtXHUxYzQ5XHUxYzRkLVx1MWM3ZFx1MWNkMC1cdTFjZDJcdTFjZDQtXHUxY2Y2XHUx
ZDAwLVx1MWRlNlx1MWRmYy1cdTFmMTVcdTFmMTgtXHUxZjFkXHUxZjIwLVx1MWY0NVx1MWY0OC1c
dTFmNGRcdTFmNTAtXHUxZjU3XHUxZjU5XHUxZjViXHUxZjVkXHUxZjVmLVx1MWY3ZFx1MWY4MC1c
dTFmYjRcdTFmYjYtXHUxZmJjXHUxZmJlXHUxZmMyLVx1MWZjNFx1MWZjNi1cdTFmY2NcdTFmZDAt
XHUxZmQzXHUxZmQ2LVx1MWZkYlx1MWZlMC1cdTFmZWNcdTFmZjItXHUxZmY0XHUxZmY2LVx1MWZm
Y1x1MjAwY1x1MjAwZFx1MjAzZlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Zlx1MjA5MC1cdTIwOWNc
dTIwZDAtXHUyMGRjXHUyMGUxXHUyMGU1LVx1MjBmMFx1MjEwMlx1MjEwN1x1MjEwYS1cdTIxMTNc
dTIxMTVcdTIxMTktXHUyMTFkXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJhLVx1MjEyZFx1MjEyZi1c
dTIxMzlcdTIxM2MtXHUyMTNmXHUyMTQ1LVx1MjE0OVx1MjE0ZVx1MjE2MC1cdTIxODhcdTJjMDAt
XHUyYzJlXHUyYzMwLVx1MmM1ZVx1MmM2MC1cdTJjZTRcdTJjZWItXHUyY2YzXHUyZDAwLVx1MmQy
NVx1MmQyN1x1MmQyZFx1MmQzMC1cdTJkNjdcdTJkNmZcdTJkN2YtXHUyZDk2XHUyZGEwLVx1MmRh
Nlx1MmRhOC1cdTJkYWVcdTJkYjAtXHUyZGI2XHUyZGI4LVx1MmRiZVx1MmRjMC1cdTJkYzZcdTJk
YzgtXHUyZGNlXHUyZGQwLVx1MmRkNlx1MmRkOC1cdTJkZGVcdTJkZTAtXHUyZGZmXHUyZTJmXHUz
MDA1LVx1MzAwN1x1MzAyMS1cdTMwMmZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzY1x1MzA0MS1c
dTMwOTZcdTMwOTlcdTMwOWFcdTMwOWQtXHUzMDlmXHUzMGExLVx1MzBmYVx1MzBmYy1cdTMwZmZc
dTMxMDUtXHUzMTJkXHUzMTMxLVx1MzE4ZVx1MzFhMC1cdTMxYmFcdTMxZjAtXHUzMWZmXHUzNDAw
LVx1NGRiNVx1NGUwMC1cdTlmY2NcdWEwMDAtXHVhNDhjXHVhNGQwLVx1YTRmZFx1YTUwMC1cdWE2
MGNcdWE2MTAtXHVhNjJiXHVhNjQwLVx1YTY2Zlx1YTY3NC1cdWE2N2RcdWE2N2YtXHVhNjk3XHVh
NjlmLVx1YTZmMVx1YTcxNy1cdWE3MWZcdWE3MjItXHVhNzg4XHVhNzhiLVx1YTc4ZVx1YTc5MC1c
dWE3OTNcdWE3YTAtXHVhN2FhXHVhN2Y4LVx1YTgyN1x1YTg0MC1cdWE4NzNcdWE4ODAtXHVhOGM0
XHVhOGQwLVx1YThkOVx1YThlMC1cdWE4ZjdcdWE4ZmJcdWE5MDAtXHVhOTJkXHVhOTMwLVx1YTk1
M1x1YTk2MC1cdWE5N2NcdWE5ODAtXHVhOWMwXHVhOWNmLVx1YTlkOVx1YWEwMC1cdWFhMzZcdWFh
NDAtXHVhYTRkXHVhYTUwLVx1YWE1OVx1YWE2MC1cdWFhNzZcdWFhN2FcdWFhN2JcdWFhODAtXHVh
YWMyXHVhYWRiLVx1YWFkZFx1YWFlMC1cdWFhZWZcdWFhZjItXHVhYWY2XHVhYjAxLVx1YWIwNlx1
YWIwOS1cdWFiMGVcdWFiMTEtXHVhYjE2XHVhYjIwLVx1YWIyNlx1YWIyOC1cdWFiMmVcdWFiYzAt
XHVhYmVhXHVhYmVjXHVhYmVkXHVhYmYwLVx1YWJmOVx1YWMwMC1cdWQ3YTNcdWQ3YjAtXHVkN2M2
XHVkN2NiLVx1ZDdmYlx1ZjkwMC1cdWZhNmRcdWZhNzAtXHVmYWQ5XHVmYjAwLVx1ZmIwNlx1ZmIx
My1cdWZiMTdcdWZiMWQtXHVmYjI4XHVmYjJhLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZi
NDBcdWZiNDFcdWZiNDNcdWZiNDRcdWZiNDYtXHVmYmIxXHVmYmQzLVx1ZmQzZFx1ZmQ1MC1cdWZk
OGZcdWZkOTItXHVmZGM3XHVmZGYwLVx1ZmRmYlx1ZmUwMC1cdWZlMGZcdWZlMjAtXHVmZTI2XHVm
ZTMzXHVmZTM0XHVmZTRkLVx1ZmU0Zlx1ZmU3MC1cdWZlNzRcdWZlNzYtXHVmZWZjXHVmZjEwLVx1
ZmYxOVx1ZmYyMS1cdWZmM2FcdWZmM2ZcdWZmNDEtXHVmZjVhXHVmZjY2LVx1ZmZiZVx1ZmZjMi1c
dWZmYzdcdWZmY2EtXHVmZmNmXHVmZmQyLVx1ZmZkN1x1ZmZkYS1cdWZmZGNdJykKKyAgICB9Owor
CisgICAgQ2FuQWNjZXNzU3RyaW5nQnlJbmRleCA9IHR5cGVvZiAnZG9jdHJpbmUnWzBdICE9PSB1
bmRlZmluZWQ7CisKKyAgICBmdW5jdGlvbiBzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCBsYXN0
KSB7CisgICAgICAgIHZhciBvdXRwdXQ7CisgICAgICAgIGlmICghQ2FuQWNjZXNzU3RyaW5nQnlJ
bmRleCkgeworICAgICAgICAgICAgb3V0cHV0ID0gc291cmNlLnNsaWNlKGluZGV4LCBsYXN0KS5q
b2luKCcnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dHB1dCA9IHNvdXJjZS5z
bGljZShpbmRleCwgbGFzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91dHB1dDsKKyAg
ICB9CisKKyAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKKyAgICBpZiAoIWlzQXJyYXkpIHsK
KyAgICAgICAgaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkoYXJ5KSB7CisgICAgICAgICAgICBy
ZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyeSkgPT09ICdbb2JqZWN0IEFy
cmF5XSc7CisgICAgICAgIH07CisgICAgfQorCisgICAgaGFzT3duUHJvcGVydHkgPSAoZnVuY3Rp
b24gKCkgeworICAgICAgICB2YXIgZnVuYyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy
dHk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIG5hbWUpIHsK
KyAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwob2JqLCBuYW1lKTsKKyAgICAgICAgfTsKKyAg
ICB9KCkpOworCisgICAgZnVuY3Rpb24gc2hhbGxvd0NvcHkob2JqKSB7CisgICAgICAgIHZhciBy
ZXQgPSB7fSwga2V5OworICAgICAgICBmb3IgKGtleSBpbiBvYmopIHsKKyAgICAgICAgICAgIGlm
IChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgeworICAgICAgICAgICAgICAgIHJldFtrZXldID0g
b2JqW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7CisgICAgICAgIHJl
dHVybiBjaCA9PT0gJ1xuJyB8fCBjaCA9PT0gJ1xyJyB8fCBjaCA9PT0gJ1x1MjAyOCcgfHwgY2gg
PT09ICdcdTIwMjknOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaCkgewor
ICAgICAgICByZXR1cm4gKGNoID09PSAnICcpIHx8IChjaCA9PT0gJ1x1MDAwOScpIHx8IChjaCA9
PT0gJ1x1MDAwQicpIHx8CisgICAgICAgICAgICAoY2ggPT09ICdcdTAwMEMnKSB8fCAoY2ggPT09
ICdcdTAwQTAnKSB8fAorICAgICAgICAgICAgKGNoLmNoYXJDb2RlQXQoMCkgPj0gMHgxNjgwICYm
CisgICAgICAgICAgICAgJ1x1MTY4MFx1MTgwRVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAw
NFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1
RkVGRicuaW5kZXhPZihjaCkgPj0gMCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNEZWNpbWFs
RGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5Jy5pbmRleE9mKGNoKSA+PSAw
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJu
ICcwMTIzNDU2Nzg5YWJjZGVmQUJDREVGJy5pbmRleE9mKGNoKSA+PSAwOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkgeworICAgICAgICByZXR1cm4gJzAxMjM0NTY3Jy5p
bmRleE9mKGNoKSA+PSAwOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQVNDSUlBbHBoYW51bWVy
aWMoY2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAoY2gg
Pj0gJ0EnICYmIGNoIDw9ICdaJykgfHwgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoKSB7CisgICAgICAgIHJldHVybiAo
Y2ggPT09ICckJykgfHwgKGNoID09PSAnXycpIHx8IChjaCA9PT0gJ1xcJykgfHwKKyAgICAgICAg
ICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ3onKSB8fCAoY2ggPj0gJ0EnICYmIGNoIDw9ICdaJykg
fHwKKyAgICAgICAgICAgICgoY2guY2hhckNvZGVBdCgwKSA+PSAweDgwKSAmJiBSZWdleC5Ob25B
c2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KGNoKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJ
ZGVudGlmaWVyUGFydChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAnJCcpIHx8IChjaCA9
PT0gJ18nKSB8fCAoY2ggPT09ICdcXCcpIHx8CisgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNo
IDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHx8CisgICAgICAgICAgICAoKGNo
ID49ICcwJykgJiYgKGNoIDw9ICc5JykpIHx8CisgICAgICAgICAgICAoKGNoLmNoYXJDb2RlQXQo
MCkgPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KGNoKSk7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gaXNUeXBlTmFtZShjaCkgeworICAgICAgICByZXR1cm4gJz48
KCl7fVtdLDoqfD8hPScuaW5kZXhPZihjaCkgPT09IC0xICYmICFpc1doaXRlU3BhY2UoY2gpICYm
ICFpc0xpbmVUZXJtaW5hdG9yKGNoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1BhcmFtVGl0
bGUodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIHRpdGxlID09PSAncGFyYW0nIHx8IHRpdGxlID09
PSAnYXJndW1lbnQnIHx8IHRpdGxlID09PSAnYXJnJzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBp
c1Byb3BlcnR5KHRpdGxlKSB7CisgICAgICAgIHJldHVybiB0aXRsZSA9PT0gJ3Byb3BlcnR5JyB8
fCB0aXRsZSA9PT0gJ3Byb3AnOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzTmFtZVBhcmFtZXRl
clJlcXVpcmVkKHRpdGxlKSB7CisgICAgICAgIHJldHVybiBpc1BhcmFtVGl0bGUodGl0bGUpIHx8
IGlzUHJvcGVydHkodGl0bGUpIHx8CisgICAgICAgICAgICB0aXRsZSA9PT0gJ2FsaWFzJyB8fCB0
aXRsZSA9PT0gJ3RoaXMnIHx8IHRpdGxlID09PSAnbWl4ZXMnIHx8IHRpdGxlID09PSAncmVxdWly
ZXMnOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzQWxsb3dlZE5hbWUodGl0bGUpIHsKKyAgICAg
ICAgcmV0dXJuIGlzTmFtZVBhcmFtZXRlclJlcXVpcmVkKHRpdGxlKSB8fCB0aXRsZSA9PT0gJ2Nv
bnN0JyB8fCB0aXRsZSA9PT0gJ2NvbnN0YW50JzsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0Fs
bG93ZWROZXN0ZWQodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzUHJvcGVydHkodGl0bGUpIHx8
IGlzUGFyYW1UaXRsZSh0aXRsZSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNUeXBlUGFyYW1l
dGVyUmVxdWlyZWQodGl0bGUpIHsKKyAgICAgICAgcmV0dXJuIGlzUGFyYW1UaXRsZSh0aXRsZSkg
fHwgdGl0bGUgPT09ICdkZWZpbmUnIHx8IHRpdGxlID09PSAnZW51bScgfHwKKyAgICAgICAgICAg
IHRpdGxlID09PSAnaW1wbGVtZW50cycgfHwgdGl0bGUgPT09ICdyZXR1cm4nIHx8CisgICAgICAg
ICAgICB0aXRsZSA9PT0gJ3RoaXMnIHx8IHRpdGxlID09PSAndHlwZScgfHwgdGl0bGUgPT09ICd0
eXBlZGVmJyB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICdyZXR1cm5zJyB8fCBpc1Byb3BlcnR5
KHRpdGxlKTsKKyAgICB9CisKKyAgICAvLyBDb25zaWRlciBkZXByZWNhdGlvbiBpbnN0ZWFkIHVz
aW5nICdpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCcgYW5kICdSdWxlcycgZGVjbGFyYXRpb24gdG8g
cGljayB3aGVuIGEgdHlwZSBpcyBvcHRpb25hbC9yZXF1aXJlZAorICAgIC8vIFRoaXMgd291bGQg
cmVxdWlyZSBjaGFuZ2VzIHRvICdwYXJzZVR5cGUnCisgICAgZnVuY3Rpb24gaXNBbGxvd2VkVHlw
ZSh0aXRsZSkgeworICAgICAgICByZXR1cm4gaXNUeXBlUGFyYW1ldGVyUmVxdWlyZWQodGl0bGUp
IHx8IHRpdGxlID09PSAndGhyb3dzJyB8fCB0aXRsZSA9PT0gJ2NvbnN0JyB8fCB0aXRsZSA9PT0g
J2NvbnN0YW50JyB8fAorICAgICAgICAgICAgdGl0bGUgPT09ICduYW1lc3BhY2UnIHx8IHRpdGxl
ID09PSAnbWVtYmVyJyB8fCB0aXRsZSA9PT0gJ3ZhcicgfHwgdGl0bGUgPT09ICdtb2R1bGUnIHx8
CisgICAgICAgICAgICB0aXRsZSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB0aXRsZSA9PT0gJ2NsYXNz
JyB8fCB0aXRsZSA9PT0gJ2V4dGVuZHMnIHx8IHRpdGxlID09PSAnYXVnbWVudHMnIHx8CisgICAg
ICAgICAgICB0aXRsZSA9PT0gJ3B1YmxpYycgfHwgdGl0bGUgPT09ICdwcml2YXRlJyB8fCB0aXRs
ZSA9PT0gJ3Byb3RlY3RlZCc7CisgICAgfQorCisgICAgZnVuY3Rpb24gRG9jdHJpbmVFcnJvciht
ZXNzYWdlKSB7CisgICAgICAgIHRoaXMubmFtZSA9ICdEb2N0cmluZUVycm9yJzsKKyAgICAgICAg
dGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICB9CisgICAgRG9jdHJpbmVFcnJvci5wcm90b3R5
cGUgPSBuZXcgRXJyb3IoKTsKKyAgICBEb2N0cmluZUVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rv
ciA9IERvY3RyaW5lRXJyb3I7CisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKG1lc3NhZ2UpIHsK
KyAgICAgICAgdGhyb3cgbmV3IERvY3RyaW5lRXJyb3IobWVzc2FnZSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIHRleHQpIHsKKyAgICAgICAgaWYgKFZFUlNJT04uc2xpY2Uo
LTMpID09PSAnZGV2JykgeworICAgICAgICAgICAgaWYgKCFjb25kKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dFcnJvcih0ZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHRyaW0oc3RyKSB7CisgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlxz
Ky8sICcnKS5yZXBsYWNlKC9ccyskLywgJycpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVud3Jh
cENvbW1lbnQoZG9jKSB7CisgICAgICAgIC8vIEpTRG9jIGNvbW1lbnQgaXMgZm9sbG93aW5nIGZv
cm0KKyAgICAgICAgLy8gICAvKioKKyAgICAgICAgLy8gICAgKiAuLi4uLi4uCisgICAgICAgIC8v
ICAgICovCisgICAgICAgIC8vIHJlbW92ZSAvKiosICovIGFuZCAqCisgICAgICAgIHZhciBCRUZP
UkVfU1RBUiA9IDAsCisgICAgICAgICAgICBTVEFSID0gMSwKKyAgICAgICAgICAgIEFGVEVSX1NU
QVIgPSAyLAorICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICBsZW4sCisgICAgICAgICAg
ICBtb2RlLAorICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgY2g7CisKKyAgICAgICAg
ZG9jID0gZG9jLnJlcGxhY2UoL15cL1wqXCo/LywgJycpLnJlcGxhY2UoL1wqXC8kLywgJycpOwor
ICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIGxlbiA9IGRvYy5sZW5ndGg7CisgICAgICAgIG1v
ZGUgPSBCRUZPUkVfU1RBUjsKKyAgICAgICAgcmVzdWx0ID0gJyc7CisKKyAgICAgICAgd2hpbGUg
KGluZGV4IDwgbGVuKSB7CisgICAgICAgICAgICBjaCA9IGRvY1tpbmRleF07CisgICAgICAgICAg
ICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgQkVGT1JFX1NUQVI6CisgICAgICAg
ICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCArPSBjaDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnKicpIHsK
KyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFNUQVI7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmICghaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0g
Y2g7CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBBRlRFUl9TVEFSOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTVEFSOgor
ICAgICAgICAgICAgICAgIGlmICghaXNXaGl0ZVNwYWNlKGNoKSkgeworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gY2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1v
ZGUgPSBpc0xpbmVUZXJtaW5hdG9yKGNoKSA/IEJFRk9SRV9TVEFSIDogQUZURVJfU1RBUjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBRlRFUl9TVEFSOgorICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSBjaDsKKyAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVy
bWluYXRvcihjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IEJFRk9SRV9TVEFSOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIC8vIFR5cGUgRXhwcmVzc2lvbiBQYXJzZXIKKworICAgIChmdW5j
dGlvbiAoZXhwb3J0cykgeworICAgICAgICB2YXIgU3ludGF4LAorICAgICAgICAgICAgVG9rZW4s
CisgICAgICAgICAgICBzb3VyY2UsCisgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICBp
bmRleCwKKyAgICAgICAgICAgIHByZXZpb3VzLAorICAgICAgICAgICAgdG9rZW4sCisgICAgICAg
ICAgICB2YWx1ZTsKKworICAgICAgICBTeW50YXggPSB7CisgICAgICAgICAgICBOdWxsYWJsZUxp
dGVyYWw6ICdOdWxsYWJsZUxpdGVyYWwnLAorICAgICAgICAgICAgQWxsTGl0ZXJhbDogJ0FsbExp
dGVyYWwnLAorICAgICAgICAgICAgTnVsbExpdGVyYWw6ICdOdWxsTGl0ZXJhbCcsCisgICAgICAg
ICAgICBVbmRlZmluZWRMaXRlcmFsOiAnVW5kZWZpbmVkTGl0ZXJhbCcsCisgICAgICAgICAgICBW
b2lkTGl0ZXJhbDogJ1ZvaWRMaXRlcmFsJywKKyAgICAgICAgICAgIFVuaW9uVHlwZTogJ1VuaW9u
VHlwZScsCisgICAgICAgICAgICBBcnJheVR5cGU6ICdBcnJheVR5cGUnLAorICAgICAgICAgICAg
UmVjb3JkVHlwZTogJ1JlY29yZFR5cGUnLAorICAgICAgICAgICAgRmllbGRUeXBlOiAnRmllbGRU
eXBlJywKKyAgICAgICAgICAgIEZ1bmN0aW9uVHlwZTogJ0Z1bmN0aW9uVHlwZScsCisgICAgICAg
ICAgICBQYXJhbWV0ZXJUeXBlOiAnUGFyYW1ldGVyVHlwZScsCisgICAgICAgICAgICBSZXN0VHlw
ZTogJ1Jlc3RUeXBlJywKKyAgICAgICAgICAgIE5vbk51bGxhYmxlVHlwZTogJ05vbk51bGxhYmxl
VHlwZScsCisgICAgICAgICAgICBPcHRpb25hbFR5cGU6ICdPcHRpb25hbFR5cGUnLAorICAgICAg
ICAgICAgTnVsbGFibGVUeXBlOiAnTnVsbGFibGVUeXBlJywKKyAgICAgICAgICAgIE5hbWVFeHBy
ZXNzaW9uOiAnTmFtZUV4cHJlc3Npb24nLAorICAgICAgICAgICAgVHlwZUFwcGxpY2F0aW9uOiAn
VHlwZUFwcGxpY2F0aW9uJworICAgICAgICB9OworCisgICAgICAgIFRva2VuID0geworICAgICAg
ICAgICAgSUxMRUdBTDogMCwgICAgLy8gSUxMRUdBTAorICAgICAgICAgICAgRE9UOiAxLCAgICAg
ICAgLy8gLgorICAgICAgICAgICAgRE9UX0xUOiAyLCAgICAgLy8gLjwKKyAgICAgICAgICAgIFJF
U1Q6IDMsICAgICAgIC8vIC4uLgorICAgICAgICAgICAgTFQ6IDQsICAgICAgICAgLy8gPAorICAg
ICAgICAgICAgR1Q6IDUsICAgICAgICAgLy8gPgorICAgICAgICAgICAgTFBBUkVOOiA2LCAgICAg
Ly8gKAorICAgICAgICAgICAgUlBBUkVOOiA3LCAgICAgLy8gKQorICAgICAgICAgICAgTEJSQUNF
OiA4LCAgICAgLy8geworICAgICAgICAgICAgUkJSQUNFOiA5LCAgICAgLy8gfQorICAgICAgICAg
ICAgTEJSQUNLOiAxMCwgICAgLy8gWworICAgICAgICAgICAgUkJSQUNLOiAxMSwgICAgLy8gXQor
ICAgICAgICAgICAgQ09NTUE6IDEyLCAgICAgLy8gLAorICAgICAgICAgICAgQ09MT046IDEzLCAg
ICAgLy8gOgorICAgICAgICAgICAgU1RBUjogMTQsICAgICAgLy8gKgorICAgICAgICAgICAgUElQ
RTogMTUsICAgICAgLy8gfAorICAgICAgICAgICAgUVVFU1RJT046IDE2LCAgLy8gPworICAgICAg
ICAgICAgQkFORzogMTcsICAgICAgLy8gIQorICAgICAgICAgICAgRVFVQUw6IDE4LCAgICAgLy8g
PQorICAgICAgICAgICAgTkFNRTogMTksICAgICAgLy8gbmFtZSB0b2tlbgorICAgICAgICAgICAg
U1RSSU5HOiAyMCwgICAgLy8gc3RyaW5nCisgICAgICAgICAgICBOVU1CRVI6IDIxLCAgICAvLyBu
dW1iZXIKKyAgICAgICAgICAgIEVPRjogMjIKKyAgICAgICAgfTsKKworICAgICAgICBmdW5jdGlv
biBDb250ZXh0KHByZXZpb3VzLCBpbmRleCwgdG9rZW4sIHZhbHVlKSB7CisgICAgICAgICAgICB0
aGlzLl9wcmV2aW91cyA9IHByZXZpb3VzOworICAgICAgICAgICAgdGhpcy5faW5kZXggPSBpbmRl
eDsKKyAgICAgICAgICAgIHRoaXMuX3Rva2VuID0gdG9rZW47CisgICAgICAgICAgICB0aGlzLl92
YWx1ZSA9IHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgQ29udGV4dC5wcm90b3R5cGUucmVz
dG9yZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHByZXZpb3VzID0gdGhpcy5fcHJldmlv
dXM7CisgICAgICAgICAgICBpbmRleCA9IHRoaXMuX2luZGV4OworICAgICAgICAgICAgdG9rZW4g
PSB0aGlzLl90b2tlbjsKKyAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fdmFsdWU7CisgICAgICAg
IH07CisKKyAgICAgICAgQ29udGV4dC5zYXZlID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg
cmV0dXJuIG5ldyBDb250ZXh0KHByZXZpb3VzLCBpbmRleCwgdG9rZW4sIHZhbHVlKTsKKyAgICAg
ICAgfTsKKworICAgICAgICBmdW5jdGlvbiBhZHZhbmNlKCkgeworICAgICAgICAgICAgdmFyIGNo
ID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgIGluZGV4ICs9IDE7CisgICAgICAgICAgICBy
ZXR1cm4gY2g7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuSGV4RXNjYXBlKHBy
ZWZpeCkgeworICAgICAgICAgICAgdmFyIGksIGxlbiwgY2gsIGNvZGUgPSAwOworCisgICAgICAg
ICAgICBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7CisgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgg
JiYgaXNIZXhEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICBjaCA9
IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiAxNiArICcwMTIz
NDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29k
ZShjb2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmcoKSB7Cisg
ICAgICAgICAgICB2YXIgc3RyID0gJycsIHF1b3RlLCBjaCwgY29kZSwgdW5lc2NhcGVkLCByZXN0
b3JlOyAvL1RPRE8gcmV2aWV3IHJlbW92YWwgb2N0YWwgPSBmYWxzZQorICAgICAgICAgICAgcXVv
dGUgPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgKytpbmRleDsKKworICAgICAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBhZHZhbmNlKCk7
CisKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSB7CisgICAgICAgICAgICAgICAg
ICAgIHF1b3RlID0gJyc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNMaW5lVGVybWluYXRvcihjaCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAn
XG4nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdc
cic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1x0
JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyICs9IHVuZXNjYXBlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHIgKz0gJ1xiJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ciArPSAnXGYnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyICs9ICdcdic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZSA9ICcwMTIzNDU2NycuaW5kZXhPZihjaCk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gXDAgaXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXByZWNhdGluZyB1bnVzZWQgY29kZS4gVE9ETyBy
ZXZpZXcgcmVtb3ZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChjb2Rl
ICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIG9jdGFsID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdpdChz
b3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9U
T0RPIFJldmlldyBSZW1vdmFsIG9jdGFsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogOCArICcwMTIzNDU2NycuaW5kZXhPZihhZHZhbmNl
KCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIGRpZ2l0cyBh
cmUgb25seSBhbGxvd2VkIHdoZW4gc3RyaW5nIHN0YXJ0cworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2l0aCAwLCAxLCAyLCAzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2YoY2gpID49IDAgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBsZW5ndGggJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPY3RhbERpZ2l0KHNvdXJj
ZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKGFkdmFuY2UoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9t
Q2hhckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gICdccicgJiYgc291cmNlW2luZGV4XSA9PT0g
J1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSBjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChxdW90ZSAhPT0gJycpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1bmV4cGVjdGVk
IHF1b3RlJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhbHVlID0gc3RyOworICAg
ICAgICAgICAgcmV0dXJuIFRva2VuLlNUUklORzsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIHNjYW5OdW1iZXIoKSB7CisgICAgICAgICAgICB2YXIgbnVtYmVyLCBjaDsKKworICAgICAg
ICAgICAgbnVtYmVyID0gJyc7CisgICAgICAgICAgICBpZiAoY2ggIT09ICcuJykgeworICAgICAg
ICAgICAgICAgIG51bWJlciA9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJj
ZVtpbmRleF07CisKKyAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlz
SGV4RGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA8PSAyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gb25seSAweAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQobnVtYmVyLCAxNik7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc09jdGFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSB8fCBpc0RlY2ltYWxEaWdp
dChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5l
eHBlY3RlZCB0b2tlbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJ
bnQobnVtYmVyLCA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlbi5OVU1C
RVI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNE
ZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCd1
bmV4cGVjdGVkIHRva2VuJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzRGVjaW1hbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFu
Y2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChjaCA9PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRGVjaW1h
bERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IGFkdmFuY2UoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0g
J2UnIHx8IGNoID09PSAnRScpIHsKKyAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgp
OworCisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgICAg
IGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKyAgICAgICAgICAgICAgICAgICAgbnVt
YmVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBj
aCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNo
KSkgeworICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gYWR2YW5jZSgpOworICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNE
ZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIg
Kz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlu
ZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAg
ICAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0b2tlbicpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KG51bWJlcik7
CisgICAgICAgICAgICByZXR1cm4gVG9rZW4uTlVNQkVSOworICAgICAgICB9CisKKworICAgICAg
ICBmdW5jdGlvbiBzY2FuVHlwZU5hbWUoKSB7CisgICAgICAgICAgICB2YXIgY2gsIGNoMjsKKwor
ICAgICAgICAgICAgdmFsdWUgPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXgg
PCBsZW5ndGggJiYgaXNUeXBlTmFtZShzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAg
IGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcuJykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoKGluZGV4ICsgMSkgPCBsZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNoMiA9IHNvdXJjZVtpbmRleCArIDFdOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoMiA9PT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsdWUgKz0gYWR2YW5jZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRva2VuLk5BTUU7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBuZXh0KCkgeworICAgICAgICAgICAgdmFyIGNoOworCisgICAg
ICAgICAgICBwcmV2aW91cyA9IGluZGV4OworCisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBs
ZW5ndGggJiYgaXNXaGl0ZVNwYWNlKHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAg
YWR2YW5jZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0
aCkgeworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uRU9GOworICAgICAgICAgICAgICAg
IHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2ggPSBzb3VyY2Vb
aW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgY2FzZSAnIic6
CisgICAgICAgICAgICAgICAgdG9rZW4gPSBzY2FuU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgICAgICBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5DT0xPTjsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAg
ICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkNPTU1BOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnKCc6Cisg
ICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4u
TFBBUkVOOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2Fz
ZSAnKSc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2Vu
ID0gVG9rZW4uUlBBUkVOOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAg
ICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAg
ICAgIHRva2VuID0gVG9rZW4uTEJSQUNLOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsK
KworICAgICAgICAgICAgY2FzZSAnXSc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAg
ICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNLOworICAgICAgICAgICAgICAgIHJldHVy
biB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uTEJSQUNFOworICAgICAgICAgICAg
ICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICAg
ICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUkJSQUNFOworICAg
ICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnLic6CisgICAg
ICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0
aCkgeworICAgICAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjaCA9PT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkRPVF9MVDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nICYmIGluZGV4ICsgMSA8IGxl
bmd0aCAmJiBzb3VyY2VbaW5kZXggKyAxXSA9PT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlJFU1Q7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbiA9IHNjYW5OdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0b2tlbiA9IFRva2VuLkRPVDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9r
ZW47CisKKyAgICAgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
KyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLkxUOworICAgICAgICAgICAgICAgIHJldHVy
biB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICAgICAgYWR2YW5j
ZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uR1Q7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRva2VuOworCisgICAgICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgICAgICBh
ZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBUb2tlbi5TVEFSOworICAgICAgICAg
ICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2FzZSAnfCc6CisgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2VuID0gVG9rZW4uUElQRTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAgICAgIGNhc2UgJz8nOgorICAg
ICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IFRva2VuLlFV
RVNUSU9OOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKworICAgICAgICAgICAgY2Fz
ZSAnISc6CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIHRva2Vu
ID0gVG9rZW4uQkFORzsKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisKKyAgICAgICAg
ICAgIGNhc2UgJz0nOgorICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAg
ICB0b2tlbiA9IFRva2VuLkVRVUFMOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQo
Y2gpKSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2Nhbk51bWJlcigpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gdHlwZSBzdHJpbmcgcGVybWl0cyBmb2xsb3dpbmcgY2FzZSwKKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIG5hbWVzcGFjZS5tb2R1bGUuTXlDbGFzcwor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gdGhpcyByZWR1Y2VkIDEgdG9r
ZW4gVEtfTkFNRQorICAgICAgICAgICAgICAgIGlmIChpc1R5cGVOYW1lKGNoKSkgeworICAgICAg
ICAgICAgICAgICAgICB0b2tlbiA9IHNjYW5UeXBlTmFtZSgpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdG9rZW47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdG9r
ZW4gPSBUb2tlbi5JTExFR0FMOworICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNvbnN1bWUodGFyZ2V0LCB0
ZXh0KSB7CisgICAgICAgICAgICBhc3NlcnQodG9rZW4gPT09IHRhcmdldCwgdGV4dCB8fCAnY29u
c3VtZWQgdG9rZW4gbm90IG1hdGNoZWQnKTsKKyAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIGV4cGVjdCh0YXJnZXQpIHsKKyAgICAgICAgICAgIGlmICh0
b2tlbiAhPT0gdGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3Rl
ZCB0b2tlbicpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV4dCgpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gVW5pb25UeXBlIDo9ICcoJyBUeXBlVW5pb25MaXN0ICcpJworICAgICAg
ICAvLworICAgICAgICAvLyBUeXBlVW5pb25MaXN0IDo9CisgICAgICAgIC8vICAgICA8PGVtcHR5
Pj4KKyAgICAgICAgLy8gICB8IE5vbmVtcHR5VHlwZVVuaW9uTGlzdAorICAgICAgICAvLworICAg
ICAgICAvLyBOb25lbXB0eVR5cGVVbmlvbkxpc3QgOj0KKyAgICAgICAgLy8gICAgIFR5cGVFeHBy
ZXNzaW9uCisgICAgICAgIC8vICAgfCBUeXBlRXhwcmVzc2lvbiAnfCcgTm9uZW1wdHlUeXBlVW5p
b25MaXN0CisgICAgICAgIGZ1bmN0aW9uIHBhcnNlVW5pb25UeXBlKCkgeworICAgICAgICAgICAg
dmFyIGVsZW1lbnRzOworICAgICAgICAgICAgY29uc3VtZShUb2tlbi5MUEFSRU4sICdVbmlvblR5
cGUgc2hvdWxkIHN0YXJ0IHdpdGggKCcpOworICAgICAgICAgICAgZWxlbWVudHMgPSBbXTsKKyAg
ICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUlBBUkVOKSB7CisgICAgICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5
cGVFeHByZXNzaW9uKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2Vu
LlJQQVJFTikgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLlBJUEUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUlBB
UkVOLCAnVW5pb25UeXBlIHNob3VsZCBlbmQgd2l0aCApJyk7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmlvblR5cGUsCisgICAgICAgICAgICAg
ICAgZWxlbWVudHM6IGVsZW1lbnRzCisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAg
ICAgLy8gQXJyYXlUeXBlIDo9ICdbJyBFbGVtZW50VHlwZUxpc3QgJ10nCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEVsZW1lbnRUeXBlTGlzdCA6PQorICAgICAgICAvLyAgICAgPDxlbXB0eT4+Cisg
ICAgICAgIC8vICB8IFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICB8ICcuLi4nIFR5cGVFeHBy
ZXNzaW9uCisgICAgICAgIC8vICB8IFR5cGVFeHByZXNzaW9uICcsJyBFbGVtZW50VHlwZUxpc3QK
KyAgICAgICAgZnVuY3Rpb24gcGFyc2VBcnJheVR5cGUoKSB7CisgICAgICAgICAgICB2YXIgZWxl
bWVudHM7CisgICAgICAgICAgICBjb25zdW1lKFRva2VuLkxCUkFDSywgJ0FycmF5VHlwZSBzaG91
bGQgc3RhcnQgd2l0aCBbJyk7CisgICAgICAgICAgICBlbGVtZW50cyA9IFtdOworICAgICAgICAg
ICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0spIHsKKyAgICAgICAgICAgICAgICBpZiAo
dG9rZW4gPT09IFRva2VuLlJFU1QpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tl
bi5SRVNUKTsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCh7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUmVzdFR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICBleHByZXNzaW9uOiBwYXJzZVR5cGVFeHByZXNzaW9uKCkKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocGFyc2VUeXBlRXhwcmVzc2lv
bigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9PSBU
b2tlbi5SQlJBQ0spIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFRva2VuLkNPTU1BKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3QoVG9r
ZW4uUkJSQUNLKTsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LkFycmF5VHlwZSwKKyAgICAgICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHMKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwYXJzZUZpZWxkTmFt
ZSgpIHsKKyAgICAgICAgICAgIHZhciB2ID0gdmFsdWU7CisgICAgICAgICAgICBpZiAodG9rZW4g
PT09IFRva2VuLk5BTUUgfHwgdG9rZW4gPT09IFRva2VuLlNUUklORykgeworICAgICAgICAgICAg
ICAgIG5leHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OVU1CRVIpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdW1lKFRva2VuLk5VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhyb3dFcnJvcigndW5leHBlY3RlZCB0
b2tlbicpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmllbGRUeXBlIDo9CisgICAgICAgIC8v
ICAgICBGaWVsZE5hbWUKKyAgICAgICAgLy8gICB8IEZpZWxkTmFtZSAnOicgVHlwZUV4cHJlc3Np
b24KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRmllbGROYW1lIDo9CisgICAgICAgIC8vICAgICBO
YW1lRXhwcmVzc2lvbgorICAgICAgICAvLyAgIHwgU3RyaW5nTGl0ZXJhbAorICAgICAgICAvLyAg
IHwgTnVtYmVyTGl0ZXJhbAorICAgICAgICAvLyAgIHwgUmVzZXJ2ZWRJZGVudGlmaWVyCisgICAg
ICAgIGZ1bmN0aW9uIHBhcnNlRmllbGRUeXBlKCkgeworICAgICAgICAgICAgdmFyIGtleTsKKwor
ICAgICAgICAgICAga2V5ID0gcGFyc2VGaWVsZE5hbWUoKTsKKyAgICAgICAgICAgIGlmICh0b2tl
biA9PT0gVG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkNPTE9O
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguRmllbGRUeXBlLAorICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSwKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWU6IHBhcnNlVHlwZUV4cHJlc3Npb24oKQorICAgICAgICAgICAgICAg
IH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
IHR5cGU6IFN5bnRheC5GaWVsZFR5cGUsCisgICAgICAgICAgICAgICAga2V5OiBrZXksCisgICAg
ICAgICAgICAgICAgdmFsdWU6IG51bGwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAg
ICAgICAvLyBSZWNvcmRUeXBlIDo9ICd7JyBGaWVsZFR5cGVMaXN0ICd9JworICAgICAgICAvLwor
ICAgICAgICAvLyBGaWVsZFR5cGVMaXN0IDo9CisgICAgICAgIC8vICAgICA8PGVtcHR5Pj4KKyAg
ICAgICAgLy8gICB8IEZpZWxkVHlwZQorICAgICAgICAvLyAgIHwgRmllbGRUeXBlICcsJyBGaWVs
ZFR5cGVMaXN0CisgICAgICAgIGZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZSgpIHsKKyAgICAgICAg
ICAgIHZhciBmaWVsZHM7CisKKyAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uTEJSQUNFLCAnUmVj
b3JkVHlwZSBzaG91bGQgc3RhcnQgd2l0aCB7Jyk7CisgICAgICAgICAgICBmaWVsZHMgPSBbXTsK
KyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdW1lKFRva2VuLkNPTU1BKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKHRva2VuICE9PSBUb2tlbi5SQlJBQ0UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZmllbGRzLnB1c2gocGFyc2VGaWVsZFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0b2tlbiAhPT0gVG9rZW4uUkJSQUNFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3QoVG9rZW4uQ09NTUEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KFRva2VuLlJCUkFDRSk7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZWNvcmRUeXBl
LAorICAgICAgICAgICAgICAgIGZpZWxkczogZmllbGRzCisgICAgICAgICAgICB9OworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VOYW1lRXhwcmVzc2lvbigpIHsKKyAgICAgICAg
ICAgIHZhciBuYW1lID0gdmFsdWU7CisgICAgICAgICAgICBleHBlY3QoVG9rZW4uTkFNRSk7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhw
cmVzc2lvbiwKKyAgICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAgICAgICB9OworICAg
ICAgICB9CisKKyAgICAgICAgLy8gVHlwZUV4cHJlc3Npb25MaXN0IDo9CisgICAgICAgIC8vICAg
ICBUb3BMZXZlbFR5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAgfCBUb3BMZXZlbFR5cGVFeHBy
ZXNzaW9uICcsJyBUeXBlRXhwcmVzc2lvbkxpc3QKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBl
RXhwcmVzc2lvbkxpc3QoKSB7CisgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSBbXTsKKworICAg
ICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVRvcCgpKTsKKyAgICAgICAgICAgIHdoaWxlICh0
b2tlbiA9PT0gVG9rZW4uQ09NTUEpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkNP
TU1BKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHBhcnNlVG9wKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVHlwZU5hbWUgOj0KKyAgICAgICAgLy8gICAgIE5hbWVFeHByZXNzaW9uCisgICAgICAg
IC8vICAgfCBOYW1lRXhwcmVzc2lvbiBUeXBlQXBwbGljYXRpb24KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gVHlwZUFwcGxpY2F0aW9uIDo9CisgICAgICAgIC8vICAgICAnLjwnIFR5cGVFeHByZXNz
aW9uTGlzdCAnPicKKyAgICAgICAgLy8gICB8ICc8JyBUeXBlRXhwcmVzc2lvbkxpc3QgJz4nICAg
Ly8gdGhpcyBpcyBleHRlbnNpb24gb2YgZG9jdHJpbmUKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VU
eXBlTmFtZSgpIHsKKyAgICAgICAgICAgIHZhciBleHByLCBhcHBsaWNhdGlvbnM7CisKKyAgICAg
ICAgICAgIGV4cHIgPSBwYXJzZU5hbWVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAodG9r
ZW4gPT09IFRva2VuLkRPVF9MVCB8fCB0b2tlbiA9PT0gVG9rZW4uTFQpIHsKKyAgICAgICAgICAg
ICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zID0gcGFyc2VUeXBlRXhw
cmVzc2lvbkxpc3QoKTsKKyAgICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uR1QpOworICAgICAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UeXBl
QXBwbGljYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAg
ICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uczogYXBwbGljYXRpb25zCisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAgICB9
CisKKyAgICAgICAgLy8gUmVzdWx0VHlwZSA6PQorICAgICAgICAvLyAgICAgPDxlbXB0eT4+Cisg
ICAgICAgIC8vICAgfCAnOicgdm9pZAorICAgICAgICAvLyAgIHwgJzonIFR5cGVFeHByZXNzaW9u
CisgICAgICAgIC8vCisgICAgICAgIC8vIEJORiBpcyBhYm92ZQorICAgICAgICAvLyBidXQsIHdl
IHJlbW92ZSA8PGVtcHR5Pj4gcGF0dGVybiwgc28gdG9rZW4gaXMgYWx3YXlzIFR5cGVUb2tlbjo6
Q09MT04KKyAgICAgICAgZnVuY3Rpb24gcGFyc2VSZXN1bHRUeXBlKCkgeworICAgICAgICAgICAg
Y29uc3VtZShUb2tlbi5DT0xPTiwgJ1Jlc3VsdFR5cGUgc2hvdWxkIHN0YXJ0IHdpdGggOicpOwor
ICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5OQU1FICYmIHZhbHVlID09PSAndm9pZCcp
IHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Wb2lkTGl0ZXJhbAor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcGFy
c2VUeXBlRXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyYW1ldGVyc1R5
cGUgOj0KKyAgICAgICAgLy8gICAgIFJlc3RQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vICAgfCBO
b25SZXN0UGFyYW1ldGVyc1R5cGUKKyAgICAgICAgLy8gICB8IE5vblJlc3RQYXJhbWV0ZXJzVHlw
ZSAnLCcgUmVzdFBhcmFtZXRlclR5cGUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVzdFBhcmFt
ZXRlclR5cGUgOj0KKyAgICAgICAgLy8gICAgICcuLi4nCisgICAgICAgIC8vICAgICAnLi4uJyBJ
ZGVudGlmaWVyCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vblJlc3RQYXJhbWV0ZXJzVHlwZSA6
PQorICAgICAgICAvLyAgICAgUGFyYW1ldGVyVHlwZSAnLCcgTm9uUmVzdFBhcmFtZXRlcnNUeXBl
CisgICAgICAgIC8vICAgfCBQYXJhbWV0ZXJUeXBlCisgICAgICAgIC8vICAgfCBPcHRpb25hbFBh
cmFtZXRlcnNUeXBlCisgICAgICAgIC8vCisgICAgICAgIC8vIE9wdGlvbmFsUGFyYW1ldGVyc1R5
cGUgOj0KKyAgICAgICAgLy8gICAgIE9wdGlvbmFsUGFyYW1ldGVyVHlwZQorICAgICAgICAvLyAg
IHwgT3B0aW9uYWxQYXJhbWV0ZXJUeXBlLCBPcHRpb25hbFBhcmFtZXRlcnNUeXBlCisgICAgICAg
IC8vCisgICAgICAgIC8vIE9wdGlvbmFsUGFyYW1ldGVyVHlwZSA6PSBQYXJhbWV0ZXJUeXBlPQor
ICAgICAgICAvLworICAgICAgICAvLyBQYXJhbWV0ZXJUeXBlIDo9IFR5cGVFeHByZXNzaW9uIHwg
SWRlbnRpZmllciAnOicgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWRl
bnRpZmllciBpcyAibmV3IiBvciAidGhpcyIKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VQYXJhbWV0
ZXJzVHlwZSgpIHsKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXSwgbm9ybWFsID0gdHJ1ZSwg
ZXhwciwgcmVzdCA9IGZhbHNlOworCisgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT09IFRva2Vu
LlJQQVJFTikgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBSZXN0UGFyYW1ldGVyVHlwZQorICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKFRva2VuLlJFU1QpOworICAgICAgICAgICAgICAgICAgICByZXN0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBleHByID0gcGFyc2VUeXBl
RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIGlmIChleHByLnR5cGUgPT09IFN5bnRheC5O
YW1lRXhwcmVzc2lvbiAmJiB0b2tlbiA9PT0gVG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSWRlbnRpZmllciAnOicgVHlwZUV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAg
ICAgY29uc3VtZShUb2tlbi5DT0xPTik7CisgICAgICAgICAgICAgICAgICAgIGV4cHIgPSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguUGFyYW1ldGVyVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6IGV4cHIubmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cHJlc3Npb246IHBhcnNlVHlwZUV4cHJlc3Npb24oKQorICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRv
a2VuLkVRVUFMKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uRVFVQUwpOwor
ICAgICAgICAgICAgICAgICAgICBleHByID0geworICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4Lk9wdGlvbmFsVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Np
b246IGV4cHIKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgbm9y
bWFsID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFub3JtYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3Vu
ZXhwZWN0ZWQgdG9rZW4nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAocmVzdCkgeworICAgICAgICAgICAgICAgICAgICBleHBy
ID0geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlJlc3RUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcgorICAgICAgICAgICAgICAgICAg
ICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChleHBy
KTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFRva2VuLlJQQVJFTikgeworICAgICAg
ICAgICAgICAgICAgICBleHBlY3QoVG9rZW4uQ09NTUEpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwYXJhbXM7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGdW5jdGlvblR5cGUgOj0gJ2Z1bmN0aW9uJyBGdW5jdGlvblNpZ25hdHVyZVR5cGUK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gRnVuY3Rpb25TaWduYXR1cmVUeXBlIDo9CisgICAgICAg
IC8vICAgfCBUeXBlUGFyYW1ldGVycyAnKCcgJyknIFJlc3VsdFR5cGUKKyAgICAgICAgLy8gICB8
IFR5cGVQYXJhbWV0ZXJzICcoJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZQorICAgICAg
ICAvLyAgIHwgVHlwZVBhcmFtZXRlcnMgJygnICd0aGlzJyAnOicgVHlwZU5hbWUgJyknIFJlc3Vs
dFR5cGUKKyAgICAgICAgLy8gICB8IFR5cGVQYXJhbWV0ZXJzICcoJyAndGhpcycgJzonIFR5cGVO
YW1lICcsJyBQYXJhbWV0ZXJzVHlwZSAnKScgUmVzdWx0VHlwZQorICAgICAgICBmdW5jdGlvbiBw
YXJzZUZ1bmN0aW9uVHlwZSgpIHsKKyAgICAgICAgICAgIHZhciBpc05ldywgdGhpc0JpbmRpbmcs
IHBhcmFtcywgcmVzdWx0LCBmblR5cGU7CisgICAgICAgICAgICBhc3NlcnQodG9rZW4gPT09IFRv
a2VuLk5BTUUgJiYgdmFsdWUgPT09ICdmdW5jdGlvbicsICdGdW5jdGlvblR5cGUgc2hvdWxkIHN0
YXJ0IHdpdGggXCdmdW5jdGlvblwnJyk7CisgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUp
OworCisgICAgICAgICAgICAvLyBHb29nbGUgQ2xvc3VyZSBDb21waWxlciBpcyBub3QgaW1wbGVt
ZW50aW5nIFR5cGVQYXJhbWV0ZXJzLgorICAgICAgICAgICAgLy8gU28gd2UgZG8gbm90LiBpZiB3
ZSBkb24ndCBnZXQgJygnLCB3ZSBzZWUgaXQgYXMgZXJyb3IuCisgICAgICAgICAgICBleHBlY3Qo
VG9rZW4uTFBBUkVOKTsKKworICAgICAgICAgICAgaXNOZXcgPSBmYWxzZTsKKyAgICAgICAgICAg
IHBhcmFtcyA9IFtdOworICAgICAgICAgICAgdGhpc0JpbmRpbmcgPSBudWxsOworICAgICAgICAg
ICAgaWYgKHRva2VuICE9PSBUb2tlbi5SUEFSRU4pIHsKKyAgICAgICAgICAgICAgICAvLyBQYXJh
bWV0ZXJzVHlwZSBvciAndGhpcycKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2Vu
Lk5BTUUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA9PT0gJ3RoaXMnIHx8IHZh
bHVlID09PSAnbmV3JykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gJ3RoaXMnIG9yICduZXcn
CisgICAgICAgICAgICAgICAgICAgIC8vICduZXcnIGlzIENsb3N1cmUgQ29tcGlsZXIgZXh0ZW5z
aW9uCisgICAgICAgICAgICAgICAgICAgIGlzTmV3ID0gdmFsdWUgPT09ICduZXcnOworICAgICAg
ICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAgICAgICBl
eHBlY3QoVG9rZW4uQ09MT04pOworICAgICAgICAgICAgICAgICAgICB0aGlzQmluZGluZyA9IHBh
cnNlVHlwZU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5D
T01NQSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5DT01NQSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBwYXJhbXMgPSBwYXJzZVBhcmFtZXRlcnNUeXBlKCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHBlY3QoVG9rZW4uUlBBUkVOKTsK
KworICAgICAgICAgICAgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PT0g
VG9rZW4uQ09MT04pIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJzZVJlc3VsdFR5cGUo
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm5UeXBlID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvblR5cGUsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBw
YXJhbXMsCisgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBpZiAodGhpc0JpbmRpbmcpIHsKKyAgICAgICAgICAgICAgICAvLyBhdm9pZCBh
ZGRpbmcgbnVsbCAnbmV3JyBhbmQgJ3RoaXMnIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICBm
blR5cGVbJ3RoaXMnXSA9IHRoaXNCaW5kaW5nOworICAgICAgICAgICAgICAgIGlmIChpc05ldykg
eworICAgICAgICAgICAgICAgICAgICBmblR5cGVbJ25ldyddID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZm5UeXBlOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gQmFzaWNUeXBlRXhwcmVzc2lvbiA6PQorICAgICAgICAvLyAgICAg
JyonCisgICAgICAgIC8vICAgfCAnbnVsbCcKKyAgICAgICAgLy8gICB8ICd1bmRlZmluZWQnCisg
ICAgICAgIC8vICAgfCBUeXBlTmFtZQorICAgICAgICAvLyAgIHwgRnVuY3Rpb25UeXBlCisgICAg
ICAgIC8vICAgfCBVbmlvblR5cGUKKyAgICAgICAgLy8gICB8IFJlY29yZFR5cGUKKyAgICAgICAg
Ly8gICB8IEFycmF5VHlwZQorICAgICAgICBmdW5jdGlvbiBwYXJzZUJhc2ljVHlwZUV4cHJlc3Np
b24oKSB7CisgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAgICAgICAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKKyAgICAgICAgICAgIGNhc2UgVG9rZW4uU1RBUjoKKyAgICAgICAgICAgICAgICBjb25z
dW1lKFRva2VuLlNUQVIpOworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5BbGxMaXRlcmFsCisgICAgICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgY2FzZSBUb2tlbi5MUEFSRU46CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
VW5pb25UeXBlKCk7CisKKyAgICAgICAgICAgIGNhc2UgVG9rZW4uTEJSQUNLOgorICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZUFycmF5VHlwZSgpOworCisgICAgICAgICAgICBjYXNlIFRva2Vu
LkxCUkFDRToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmRUeXBlKCk7CisKKyAg
ICAgICAgICAgIGNhc2UgVG9rZW4uTkFNRToKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09
ICdudWxsJykgeworICAgICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4Lk51bGxMaXRlcmFsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAndW5kZWZpbmVkJykgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLk5BTUUpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlVuZGVmaW5l
ZExpdGVyYWwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBjb250ZXh0ID0gQ29udGV4dC5zYXZlKCk7CisgICAgICAgICAgICAgICAg
aWYgKHZhbHVlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvblR5cGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXN0b3JlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUeXBlTmFtZSgpOworCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93RXJyb3IoJ3VuZXhwZWN0ZWQgdG9rZW4n
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFR5cGVFeHByZXNzaW9u
IDo9CisgICAgICAgIC8vICAgICBCYXNpY1R5cGVFeHByZXNzaW9uCisgICAgICAgIC8vICAgfCAn
PycgQmFzaWNUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgIHwgJyEnIEJhc2ljVHlwZUV4cHJl
c3Npb24KKyAgICAgICAgLy8gICB8IEJhc2ljVHlwZUV4cHJlc3Npb24gJz8nCisgICAgICAgIC8v
ICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICchJworICAgICAgICAvLyAgIHwgJz8nCisgICAgICAg
IC8vICAgfCBCYXNpY1R5cGVFeHByZXNzaW9uICdbXScKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VU
eXBlRXhwcmVzc2lvbigpIHsKKyAgICAgICAgICAgIHZhciBleHByOworCisgICAgICAgICAgICBp
ZiAodG9rZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShU
b2tlbi5RVUVTVElPTik7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBUb2tlbi5DT01N
QSB8fCB0b2tlbiA9PT0gVG9rZW4uRVFVQUwgfHwgdG9rZW4gPT09IFRva2VuLlJCUkFDRSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPT09IFRva2VuLlJQQVJFTiB8fCB0b2tlbiA9
PT0gVG9rZW4uUElQRSB8fCB0b2tlbiA9PT0gVG9rZW4uRU9GIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9PT0gVG9rZW4uUkJSQUNLKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTnVsbGFibGVMaXRl
cmFsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OdWxsYWJs
ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBlRXhw
cmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2Vu
LkJBTkcpIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkJBTkcpOworICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25OdWxs
YWJsZVR5cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHBhcnNlQmFzaWNUeXBl
RXhwcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBleHByID0gcGFyc2VCYXNp
Y1R5cGVFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkJBTkcp
IHsKKyAgICAgICAgICAgICAgICBjb25zdW1lKFRva2VuLkJBTkcpOworICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Ob25OdWxsYWJsZVR5
cGUsCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAgICAgICAgICAg
ICAgICAgIHByZWZpeDogZmFsc2UKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLlFVRVNUSU9OKSB7CisgICAgICAgICAg
ICAgICAgY29uc3VtZShUb2tlbi5RVUVTVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk51bGxhYmxlVHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwciwKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4
OiBmYWxzZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICh0b2tlbiA9PT0gVG9rZW4uTEJSQUNLKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShU
b2tlbi5MQlJBQ0spOworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9rZW4uUkJSQUNLLCAnZXhw
ZWN0ZWQgYW4gYXJyYXktc3R5bGUgdHlwZSBkZWNsYXJhdGlvbiAoJyArIHZhbHVlICsgJ1tdKScp
OworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5
bnRheC5UeXBlQXBwbGljYXRpb24sCisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5OYW1lRXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdBcnJheScKKyAgICAgICAgICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zOiBbZXhwcl0KKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIFRvcExldmVsVHlwZUV4cHJlc3Npb24gOj0KKyAgICAgICAgLy8g
ICAgICBUeXBlRXhwcmVzc2lvbgorICAgICAgICAvLyAgICB8IFR5cGVVbmlvbkxpc3QKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gVGhpcyBydWxlIGlzIEdvb2dsZSBDbG9zdXJlIENvbXBpbGVyIGV4
dGVuc2lvbiwgbm90IEVTNAorICAgICAgICAvLyBsaWtlLAorICAgICAgICAvLyAgIHsgbnVtYmVy
IHwgc3RyaW5nIH0KKyAgICAgICAgLy8gSWYgc3RyaWN0IHRvIEVTNCwgd2Ugc2hvdWxkIHdyaXRl
IGl0IGFzCisgICAgICAgIC8vICAgeyAobnVtYmVyfHN0cmluZykgfQorICAgICAgICBmdW5jdGlv
biBwYXJzZVRvcCgpIHsKKyAgICAgICAgICAgIHZhciBleHByLCBlbGVtZW50czsKKworICAgICAg
ICAgICAgZXhwciA9IHBhcnNlVHlwZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGlmICh0b2tl
biAhPT0gVG9rZW4uUElQRSkgeworICAgICAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBlbGVtZW50cyA9IFsgZXhwciBdOworICAgICAgICAgICAg
Y29uc3VtZShUb2tlbi5QSVBFKTsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZVR5cGVFeHByZXNzaW9uKCkpOworICAgICAgICAg
ICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uUElQRSkgeworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5Q
SVBFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguVW5pb25UeXBlLAorICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBl
bGVtZW50cworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHBh
cnNlVG9wUGFyYW1UeXBlKCkgeworICAgICAgICAgICAgdmFyIGV4cHI7CisKKyAgICAgICAgICAg
IGlmICh0b2tlbiA9PT0gVG9rZW4uUkVTVCkgeworICAgICAgICAgICAgICAgIGNvbnN1bWUoVG9r
ZW4uUkVTVCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAg
dHlwZTogU3ludGF4LlJlc3RUeXBlLAorICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBw
YXJzZVRvcCgpCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZXhwciA9IHBhcnNlVG9wKCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPT09IFRva2VuLkVR
VUFMKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZShUb2tlbi5FUVVBTCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk9wdGlvbmFs
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZXhwcgorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBleHByOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VUeXBlKHNyYywgb3B0KSB7CisgICAgICAgICAg
ICB2YXIgZXhwcjsKKworICAgICAgICAgICAgc291cmNlID0gc3JjOworICAgICAgICAgICAgbGVu
Z3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAg
IHByZXZpb3VzID0gMDsKKworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4
KSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVG9w
KCk7CisKKyAgICAgICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkgeworICAgICAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisg
ICAgICAgICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91cworICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHBhcnNlUGFyYW1UeXBlKHNyYywgb3B0KSB7CisgICAgICAgICAgICB2YXIgZXhwcjsK
KworICAgICAgICAgICAgc291cmNlID0gc3JjOworICAgICAgICAgICAgbGVuZ3RoID0gc291cmNl
Lmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAgIHByZXZpb3VzID0g
MDsKKworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7CisgICAgICAg
ICAgICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgbmV4dCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVG9wUGFyYW1UeXBlKCk7
CisKKyAgICAgICAgICAgIGlmIChvcHQgJiYgb3B0Lm1pZHN0cmVhbSkgeworICAgICAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGV4cHIsCisgICAg
ICAgICAgICAgICAgICAgIGluZGV4OiBwcmV2aW91cworICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0b2tlbiAhPT0gVG9rZW4uRU9GKSB7CisgICAg
ICAgICAgICAgICAgdGhyb3dFcnJvcignbm90IHJlYWNoIHRvIEVPRicpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gZXhwcjsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIHN0cmluZ2lmeUltcGwobm9kZSwgY29tcGFjdCwgdG9wTGV2ZWwpIHsKKyAgICAgICAgICAg
IHZhciByZXN1bHQsIGksIGl6OworCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBTeW50YXguTnVsbGFibGVMaXRlcmFsOgorICAgICAgICAgICAgICAg
IHJlc3VsdCA9ICc/JzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSBTeW50YXguQWxsTGl0ZXJhbDoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnKic7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4Lk51bGxMaXRlcmFs
OgorICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdudWxsJzsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguVW5kZWZpbmVkTGl0ZXJhbDoKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSAndW5kZWZpbmVkJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgY2FzZSBTeW50YXguVm9pZExpdGVyYWw6CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gJ3ZvaWQnOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IFN5bnRheC5VbmlvblR5cGU6CisgICAgICAgICAgICAgICAgaWYgKCF0b3BMZXZlbCkgeworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSAnKCc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJyc7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8
IGl6OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwo
bm9kZS5lbGVtZW50c1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSAr
IDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICd8JzsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmICghdG9wTGV2ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcpJzsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgU3ludGF4LkFycmF5VHlwZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnWyc7CisgICAg
ICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZ2lmeUltcGwobm9k
ZS5lbGVtZW50c1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEp
ICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAn
LCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSAnXSc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGNhc2UgU3ludGF4LlJlY29yZFR5cGU6CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gJ3snOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5maWVsZHMubGVu
Z3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5n
aWZ5SW1wbChub2RlLmZpZWxkc1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICgoaSArIDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNv
bXBhY3QgPyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnfSc7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGNhc2UgU3ludGF4LkZpZWxkVHlwZToKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS52YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBub2RlLmtl
eSArIChjb21wYWN0ID8gJzonIDogJzogJykgKyBzdHJpbmdpZnlJbXBsKG5vZGUudmFsdWUsIGNv
bXBhY3QpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG5vZGUua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguRnVuY3Rpb25UeXBlOgorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvbXBhY3QgPyAnZnVuY3Rpb24oJyA6ICdmdW5jdGlvbiAoJzsKKworICAg
ICAgICAgICAgICAgIGlmIChub2RlWyd0aGlzJ10pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGVbJ25ldyddKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gKGNvbXBh
Y3QgPyAnbmV3OicgOiAnbmV3OiAnKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAoY29tcGFjdCA/ICd0aGlzOicgOiAndGhp
czogJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXN1
bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlWyd0aGlzJ10sIGNvbXBhY3QpOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLnBhcmFtcy5sZW5ndGggIT09IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSBjb21wYWN0ID8gJywnIDogJywgJzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gbm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1wbChub2RlLnBhcmFtc1tpXSwgY29tcGFjdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICE9PSBpeikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IGNvbXBhY3QgPyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcp
JzsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLnJlc3VsdCkgeworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gKGNvbXBhY3QgPyAnOicgOiAnOiAnKSArIHN0cmluZ2lmeUltcGwobm9k
ZS5yZXN1bHQsIGNvbXBhY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgY2FzZSBTeW50YXguUGFyYW1ldGVyVHlwZToKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBub2RlLm5hbWUgKyAoY29tcGFjdCA/ICc6JyA6ICc6ICcpICsgc3Ry
aW5naWZ5SW1wbChub2RlLmV4cHJlc3Npb24sIGNvbXBhY3QpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5SZXN0VHlwZToKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSAnLi4uJzsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB7
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVz
c2lvbiwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5Ob25OdWxsYWJsZVR5cGU6CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUucHJlZml4KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICch
JyArIHN0cmluZ2lmeUltcGwobm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBs
KG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnISc7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5PcHRpb25hbFR5
cGU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5naWZ5SW1wbChub2RlLmV4cHJlc3Np
b24sIGNvbXBhY3QpICsgJz0nOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBjYXNlIFN5bnRheC5OdWxsYWJsZVR5cGU6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUucHJl
Zml4KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICc/JyArIHN0cmluZ2lmeUltcGwo
bm9kZS5leHByZXNzaW9uLCBjb21wYWN0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwg
Y29tcGFjdCkgKyAnPyc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIFN5bnRheC5OYW1lRXhwcmVzc2lvbjoKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBub2RlLm5hbWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGNhc2UgU3ludGF4LlR5cGVBcHBsaWNhdGlvbjoKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBzdHJpbmdpZnlJbXBsKG5vZGUuZXhwcmVzc2lvbiwgY29tcGFjdCkgKyAnLjwnOworICAg
ICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9kZS5hcHBsaWNhdGlvbnMubGVuZ3RoOyBp
IDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5naWZ5SW1w
bChub2RlLmFwcGxpY2F0aW9uc1tpXSwgY29tcGFjdCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICgoaSArIDEpICE9PSBpeikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNv
bXBhY3QgPyAnLCcgOiAnLCAnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnPic7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcign
VW5rbm93biB0eXBlICcgKyBub2RlLnR5cGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc3RyaW5naWZ5
KG5vZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIHsKKyAg
ICAgICAgICAgICAgICBvcHRpb25zID0ge307CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gc3RyaW5naWZ5SW1wbChub2RlLCBvcHRpb25zLmNvbXBhY3QsIG9wdGlvbnMudG9wTGV2
ZWwpOworICAgICAgICB9CisKKyAgICAgICAgZXhwb3J0cy5wYXJzZVR5cGUgPSBwYXJzZVR5cGU7
CisgICAgICAgIGV4cG9ydHMucGFyc2VQYXJhbVR5cGUgPSBwYXJzZVBhcmFtVHlwZTsKKyAgICAg
ICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7CisgICAgICAgIGV4cG9ydHMuU3ludGF4
ID0gU3ludGF4OworICAgIH0odHlwZWQgPSB7fSkpOworCisgICAgLy8gSlNEb2MgVGFnIFBhcnNl
cgorCisgICAgKGZ1bmN0aW9uIChleHBvcnRzKSB7CisgICAgICAgIHZhciBSdWxlcywKKyAgICAg
ICAgICAgIGluZGV4LAorICAgICAgICAgICAgbGluZU51bWJlciwKKyAgICAgICAgICAgIGxlbmd0
aCwKKyAgICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgIHJlY292ZXJhYmxlLAorICAgICAg
ICAgICAgc2xvcHB5LAorICAgICAgICAgICAgc3RyaWN0OworCisgICAgICAgIGZ1bmN0aW9uIGFk
dmFuY2UoKSB7CisgICAgICAgICAgICB2YXIgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAg
ICAgaW5kZXggKz0gMTsKKyAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgewor
ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBjaDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHNjYW5UaXRsZSgp
IHsKKyAgICAgICAgICAgIHZhciB0aXRsZSA9ICcnOworICAgICAgICAgICAgLy8gd2FzdGUgJ0An
CisgICAgICAgICAgICBhZHZhbmNlKCk7CisKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxl
bmd0aCAmJiBpc0FTQ0lJQWxwaGFudW1lcmljKHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAg
ICAgICAgdGl0bGUgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gdGl0bGU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZWVrQ29udGVudCgp
IHsKKyAgICAgICAgICAgIHZhciBjaCwgd2FpdGluZywgbGFzdCA9IGluZGV4OworCisgICAgICAg
ICAgICB3YWl0aW5nID0gZmFsc2U7CisgICAgICAgICAgICB3aGlsZSAobGFzdCA8IGxlbmd0aCkg
eworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2xhc3RdOworICAgICAgICAgICAgICAgIGlm
IChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVy
ICs9IDE7CisgICAgICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAod2FpdGluZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09
ICdAJykgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoY2gpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB3YWl0aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdCArPSAxOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGxhc3Q7CisgICAgICAgIH0KKworICAgICAgICAv
LyB0eXBlIGV4cHJlc3Npb24gbWF5IGhhdmUgbmVzdCBicmFjZSwgc3VjaCBhcywKKyAgICAgICAg
Ly8geyB7IG9rOiBzdHJpbmcgfSB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHRoZXJlZm9yZSwg
c2Nhbm5pbmcgdHlwZSBleHByZXNzaW9uIHdpdGggYmFsYW5jaW5nIGJyYWNlcy4KKyAgICAgICAg
ZnVuY3Rpb24gcGFyc2VUeXBlKHRpdGxlLCBsYXN0KSB7CisgICAgICAgICAgICB2YXIgY2gsIGJy
YWNlLCB0eXBlLCBkaXJlY3QgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gc2VhcmNoICd7Jwor
ICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGFzdCkgeworICAgICAgICAgICAgICAgIGNoID0g
c291cmNlW2luZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZVNwYWNlKGNoKSkgewor
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA9PT0gJ3snKSB7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gdGhpcyBpcyBkaXJlY3QgcGF0dGVybgorICAgICAgICAgICAgICAgICAgICBk
aXJlY3QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZGlyZWN0KSB7CisgICAgICAg
ICAgICAgICAgLy8gdHlwZSBleHByZXNzaW9uIHsgaXMgZm91bmQKKyAgICAgICAgICAgICAgICBi
cmFjZSA9IDE7CisgICAgICAgICAgICAgICAgdHlwZSA9ICcnOworICAgICAgICAgICAgICAgIHdo
aWxlIChpbmRleCA8IGxhc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5k
ZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJhY2UgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYnJhY2UgPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGNoID09PSAneycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFjZSArPSAx
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoYnJhY2UgIT09IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gYnJhY2VzIGlzIG5vdCBiYWxhbmNlZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcignQnJhY2VzIGFyZSBub3QgYmFsYW5jZWQnKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJh
bVRpdGxlKHRpdGxlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVkLnBh
cnNlUGFyYW1UeXBlKHR5cGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0eXBlZC5wYXJzZVR5cGUodHlwZSk7CisgICAgICAgICAgICAgICAgfSBj
YXRjaCAoZTEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2UgZmFpbGVkCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcihsYXN0KSB7CisgICAg
ICAgICAgICB2YXIgaWRlbnRpZmllcjsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGlmaWVyU3Rh
cnQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSBhZHZhbmNlKCk7CisgICAgICAgICAg
ICB3aGlsZSAoaW5kZXggPCBsYXN0ICYmIGlzSWRlbnRpZmllclBhcnQoc291cmNlW2luZGV4XSkp
IHsKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyICs9IGFkdmFuY2UoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gc2tpcFdoaXRlU3BhY2UobGFzdCkgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGFzdCAmJiAoaXNXaGl0ZVNwYWNlKHNvdXJjZVtpbmRleF0pIHx8IGlzTGluZVRlcm1pbmF0
b3Ioc291cmNlW2luZGV4XSkpKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2VOYW1lKGxhc3QsIGFs
bG93QnJhY2tldHMsIGFsbG93TmVzdGVkUGFyYW1zKSB7CisgICAgICAgICAgICB2YXIgbmFtZSA9
ICcnLCB1c2VCcmFja2V0czsKKworICAgICAgICAgICAgc2tpcFdoaXRlU3BhY2UobGFzdCk7CisK
KyAgICAgICAgICAgIGlmIChpbmRleCA+PSBsYXN0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhbGxvd0JyYWNrZXRzICYm
IHNvdXJjZVtpbmRleF0gPT09ICdbJykgeworICAgICAgICAgICAgICAgIHVzZUJyYWNrZXRzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBuYW1lID0gYWR2YW5jZSgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZVtpbmRleF0pKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG5hbWUgKz0gc2NhbklkZW50aWZpZXIobGFzdCk7CisKKyAgICAgICAgICAgIGlmIChhbGxvd05l
c3RlZFBhcmFtcykgeworICAgICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VbaW5kZXhdID09PSAn
LicpIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnLic7CisgICAgICAgICAgICAgICAg
ICAgIGluZGV4ICs9IDE7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gc2NhbklkZW50aWZp
ZXIobGFzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAodXNlQnJhY2tldHMpIHsKKyAgICAgICAgICAgICAgICAvLyBkbyB3ZSBoYXZlIGEgZGVm
YXVsdCB2YWx1ZSBmb3IgdGhpcz8KKyAgICAgICAgICAgICAgICBpZiAoc291cmNlW2luZGV4XSA9
PT0gJz0nKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY29uc3VtZSB0aGUgJz0nJyBzeW1i
b2wKKyAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIC8vIHNjYW4gaW4gdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGFzdCAmJiBzb3VyY2VbaW5kZXhdICE9PSAnXScpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWUgKz0gYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxhc3Qg
IHx8IHNvdXJjZVtpbmRleF0gIT09ICddJykgeworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBu
ZXZlciBmb3VuZCBhIGNsb3NpbmcgJ10nCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgdGhlIGxh
c3QgJ10nCisgICAgICAgICAgICAgICAgbmFtZSArPSBhZHZhbmNlKCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBuYW1lOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gc2tpcFRvVGFnKCkgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIHNv
dXJjZVtpbmRleF0gIT09ICdAJykgeworICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQoc291
cmNlW2luZGV4XSA9PT0gJ0AnKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gVGFnUGFyc2VyKG9wdGlvbnMsIHRpdGxlKSB7CisgICAgICAg
ICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uczsKKyAgICAgICAgICAgIHRoaXMuX3RpdGxlID0g
dGl0bGU7CisgICAgICAgICAgICB0aGlzLl90YWcgPSB7CisgICAgICAgICAgICAgICAgdGl0bGU6
IHRpdGxlLAorICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBudWxsCisgICAgICAgICAgICB9
OworICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubGluZU51bWJlcnMpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl90YWcubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB0aGlzLl9sYXN0ID0gMDsKKyAgICAgICAgICAgIC8vIHNwYWNlIHRvIHNh
dmUgc3BlY2lhbCBpbmZvcm1hdGlvbiBmb3IgdGl0bGUgcGFyc2Vycy4KKyAgICAgICAgICAgIHRo
aXMuX2V4dHJhID0geyB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gYWRkRXJyb3IoZXJyLCAu
Li4pCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUuYWRkRXJyb3IgPSBmdW5jdGlvbiBhZGRF
cnJvcihlcnJvclRleHQpIHsKKyAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBl
LnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSwKKyAgICAgICAgICAgICAgICBtc2cgPSBlcnJvclRl
eHQucmVwbGFjZSgKKyAgICAgICAgICAgICAgICAgICAgLyUoXGQpL2csCisgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFzc2VydChpbmRleCA8IGFyZ3MubGVuZ3RoLCAnTWVzc2FnZSByZWZlcmVuY2UgbXVzdCBiZSBp
biByYW5nZScpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAg
aWYgKCF0aGlzLl90YWcuZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fdGFnLmVycm9y
cyA9IFtdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAg
ICAgICAgICAgIHRocm93RXJyb3IobXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRo
aXMuX3RhZy5lcnJvcnMucHVzaChtc2cpOworICAgICAgICAgICAgcmV0dXJuIHJlY292ZXJhYmxl
OworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VUeXBlID0g
ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgLy8gdHlwZSByZXF1aXJlZCB0aXRsZXMKKyAgICAg
ICAgICAgIGlmIChpc1R5cGVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHsKKyAgICAg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBh
cnNlVHlwZSh0aGlzLl90aXRsZSwgdGhpcy5fbGFzdCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5fdGFnLnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXJh
bVRpdGxlKHRoaXMuX3RpdGxlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIHRhZyB0eXBlJykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3RhZy50eXBlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlz
LmFkZEVycm9yKGVycm9yLm1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzQWxsb3dlZFR5cGUodGhpcy5fdGl0bGUpKSB7CisgICAgICAg
ICAgICAgICAgLy8gb3B0aW9uYWwgdHlwZXMKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLl90YWcudHlwZSA9IHBhcnNlVHlwZSh0aGlzLl90aXRsZSwgdGhp
cy5fbGFzdCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAg
ICAgICAvL0ZvciBvcHRpb25hbCB0eXBlcywgbGV0cyBkcm9wIHRoZSB0aHJvd24gZXJyb3Igd2hl
biB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIFRh
Z1BhcnNlci5wcm90b3R5cGUuX3BhcnNlTmFtZVBhdGggPSBmdW5jdGlvbiAob3B0aW9uYWwpIHsK
KyAgICAgICAgICAgIHZhciBuYW1lOworICAgICAgICAgICAgbmFtZSA9IHBhcnNlTmFtZSh0aGlz
Ll9sYXN0LCBzbG9wcHkgJiYgaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxlKSwgdHJ1ZSk7CisgICAg
ICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbmFsKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignTWlzc2luZyBvciBpbnZhbGlk
IHRhZyBuYW1lJykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuX3RhZy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VOYW1lUGF0
aCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZU5hbWVQYXRo
KGZhbHNlKTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNl
TmFtZVBhdGhPcHRpb25hbCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9wYXJzZU5hbWVQYXRoKHRydWUpOworICAgICAgICB9OworCisKKyAgICAgICAgVGFnUGFyc2Vy
LnByb3RvdHlwZS5wYXJzZU5hbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgYXNz
aWduLCBuYW1lOworCisgICAgICAgICAgICAvLyBwYXJhbSwgcHJvcGVydHkgcmVxdWlyZXMgbmFt
ZQorICAgICAgICAgICAgaWYgKGlzQWxsb3dlZE5hbWUodGhpcy5fdGl0bGUpKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fdGFnLm5hbWUgPSBwYXJzZU5hbWUodGhpcy5fbGFzdCwgc2xvcHB5ICYm
IGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSksIGlzQWxsb3dlZE5lc3RlZCh0aGlzLl90aXRsZSkp
OworICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdGFnLm5hbWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpc05hbWVQYXJhbWV0ZXJSZXF1aXJlZCh0aGlzLl90aXRsZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGUgbmFtZSBoYXMgYWxyZWFk
eSBiZWVuIHBhcnNlZCBidXQgaW50ZXJwcmV0ZWQgYXMgYSB0eXBlCisgICAgICAgICAgICAgICAg
ICAgIC8vIGl0J3MgYWxzbyBwb3NzaWJsZSB0aGlzIGlzIGEgc2xvcHB5IGRlY2xhcmF0aW9uLCBp
biB3aGljaCBjYXNlIGl0IHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gZml4ZWQgYXQg
dGhlIGVuZAorICAgICAgICAgICAgICAgICAgICBpZiAoaXNQYXJhbVRpdGxlKHRoaXMuX3RpdGxl
KSAmJiB0aGlzLl90YWcudHlwZS5uYW1lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9leHRyYS5uYW1lID0gdGhpcy5fdGFnLnR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLl90YWcubmFtZSA9IHRoaXMuX3RhZy50eXBlLm5hbWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLl90YWcudHlwZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3Ig
aW52YWxpZCB0YWcgbmFtZScpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRo
aXMuX3RhZy5uYW1lOworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09
ICdbJyAmJiBuYW1lLmNoYXJBdChuYW1lLmxlbmd0aCAtIDEpID09PSAnXScpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgaXMg
b25lCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGFtcGxlOiBAcGFyYW0ge3N0cmluZ30g
W3NvbWVib2R5PUpvaG4gRG9lXSBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg
YXNzaWduID0gbmFtZS5zdWJzdHJpbmcoMSwgbmFtZS5sZW5ndGggLSAxKS5zcGxpdCgnPScpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnblsxXSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX3RhZ1snZGVmYXVsdCddID0gYXNzaWduWzFdOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFnLm5hbWUg
PSBhc3NpZ25bMF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gYW4g
b3B0aW9uYWwgdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhZy50eXBl
LnR5cGUgIT09ICdPcHRpb25hbFR5cGUnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy5fdGFnLnR5cGUgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6
ICdPcHRpb25hbFR5cGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNz
aW9uOiB0aGlzLl90YWcudHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9OworCisgICAgICAgIFRhZ1BhcnNlci5wcm90b3R5cGUucGFyc2VEZXNjcmlwdGlvbiA9IGZ1
bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oKSB7CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24g
PSB0cmltKHNsaWNlU291cmNlKHNvdXJjZSwgaW5kZXgsIHRoaXMuX2xhc3QpKTsKKyAgICAgICAg
ICAgIGlmIChkZXNjcmlwdGlvbikgeworICAgICAgICAgICAgICAgIGlmICgoL14tXHMrLykudGVz
dChkZXNjcmlwdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBkZXNj
cmlwdGlvbi5zdWJzdHJpbmcoMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRoaXMuX3RhZy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgVGFnUGFyc2VyLnBy
b3RvdHlwZS5wYXJzZUtpbmQgPSBmdW5jdGlvbiBwYXJzZUtpbmQoKSB7CisgICAgICAgICAgICB2
YXIga2luZCwga2luZHM7CisgICAgICAgICAgICBraW5kcyA9IHsKKyAgICAgICAgICAgICAgICAn
Y2xhc3MnOiB0cnVlLAorICAgICAgICAgICAgICAgICdjb25zdGFudCc6IHRydWUsCisgICAgICAg
ICAgICAgICAgJ2V2ZW50JzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnZXh0ZXJuYWwnOiB0cnVl
LAorICAgICAgICAgICAgICAgICdmaWxlJzogdHJ1ZSwKKyAgICAgICAgICAgICAgICAnZnVuY3Rp
b24nOiB0cnVlLAorICAgICAgICAgICAgICAgICdtZW1iZXInOiB0cnVlLAorICAgICAgICAgICAg
ICAgICdtaXhpbic6IHRydWUsCisgICAgICAgICAgICAgICAgJ21vZHVsZSc6IHRydWUsCisgICAg
ICAgICAgICAgICAgJ25hbWVzcGFjZSc6IHRydWUsCisgICAgICAgICAgICAgICAgJ3R5cGVkZWYn
OiB0cnVlCisgICAgICAgICAgICB9OworICAgICAgICAgICAga2luZCA9IHRyaW0oc2xpY2VTb3Vy
Y2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAgICAgdGhpcy5fdGFnLmtp
bmQgPSBraW5kOworICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eShraW5kcywga2luZCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQga2luZCBuYW1l
IFwnJTBcJycsIGtpbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLnBhcnNlQWNjZXNzID0g
ZnVuY3Rpb24gcGFyc2VBY2Nlc3MoKSB7CisgICAgICAgICAgICB2YXIgYWNjZXNzOworICAgICAg
ICAgICAgYWNjZXNzID0gdHJpbShzbGljZVNvdXJjZShzb3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0
KSk7CisgICAgICAgICAgICB0aGlzLl90YWcuYWNjZXNzID0gYWNjZXNzOworICAgICAgICAgICAg
aWYgKGFjY2VzcyAhPT0gJ3ByaXZhdGUnICYmIGFjY2VzcyAhPT0gJ3Byb3RlY3RlZCcgJiYgYWNj
ZXNzICE9PSAncHVibGljJykgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcign
SW52YWxpZCBhY2Nlc3MgbmFtZSBcJyUwXCcnLCBhY2Nlc3MpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJv
dG90eXBlLnBhcnNlVmFyaWF0aW9uID0gZnVuY3Rpb24gcGFyc2VWYXJpYXRpb24oKSB7CisgICAg
ICAgICAgICB2YXIgdmFyaWF0aW9uLCB0ZXh0OworICAgICAgICAgICAgdGV4dCA9IHRyaW0oc2xp
Y2VTb3VyY2Uoc291cmNlLCBpbmRleCwgdGhpcy5fbGFzdCkpOworICAgICAgICAgICAgdmFyaWF0
aW9uID0gcGFyc2VGbG9hdCh0ZXh0LCAxMCk7CisgICAgICAgICAgICB0aGlzLl90YWcudmFyaWF0
aW9uID0gdmFyaWF0aW9uOworICAgICAgICAgICAgaWYgKGlzTmFOKHZhcmlhdGlvbikpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRXJyb3IoJ0ludmFsaWQgdmFyaWF0aW9uIFwnJTBc
JycsIHRleHQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVuc3VyZUVuZCA9IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHZhciBzaG91bGRCZUVtcHR5ID0gdHJpbShzbGljZVNvdXJjZShz
b3VyY2UsIGluZGV4LCB0aGlzLl9sYXN0KSk7CisgICAgICAgICAgICBpZiAoc2hvdWxkQmVFbXB0
eSkgeworICAgICAgICAgICAgICAgIGlmICghdGhpcy5hZGRFcnJvcignVW5rbm93biBjb250ZW50
IFwnJTBcJycsIHNob3VsZEJlRW1wdHkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBUYWdQYXJzZXIucHJvdG90eXBlLmVwaWxv
Z3VlID0gZnVuY3Rpb24gZXBpbG9ndWUoKSB7CisgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb247
CisKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGhpcy5fdGFnLmRlc2NyaXB0aW9uOworICAg
ICAgICAgICAgLy8gdW4tZml4IHBvdGVudGlhbGx5IHNsb3BweSBkZWNsYXJhdGlvbgorICAgICAg
ICAgICAgaWYgKGlzUGFyYW1UaXRsZSh0aGlzLl90aXRsZSkgJiYgIXRoaXMuX3RhZy50eXBlICYm
IGRlc2NyaXB0aW9uICYmIGRlc2NyaXB0aW9uLmNoYXJBdCgwKSA9PT0gJ1snKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5fdGFnLnR5cGUgPSB0aGlzLl9leHRyYS5uYW1lOworICAgICAgICAgICAg
ICAgIHRoaXMuX3RhZy5uYW1lID0gdW5kZWZpbmVkOworCisgICAgICAgICAgICAgICAgaWYgKCFz
bG9wcHkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFkZEVycm9yKCdNaXNzaW5n
IG9yIGludmFsaWQgdGFnIG5hbWUnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAg
ICBSdWxlcyA9IHsKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hY2Nl
c3MuaHRtbAorICAgICAgICAgICAgJ2FjY2Vzcyc6IFsncGFyc2VBY2Nlc3MnXSwKKyAgICAgICAg
ICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1hbGlhcy5odG1sCisgICAgICAgICAgICAn
YWxpYXMnOiBbJ3BhcnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBo
dHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtYXVnbWVudHMuaHRtbAorICAgICAgICAgICAgJ2F1Z21l
bnRzJzogWydwYXJzZVR5cGUnLCAncGFyc2VOYW1lUGF0aE9wdGlvbmFsJywgJ2Vuc3VyZUVuZCdd
LAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWNvbnN0cnVjdG9yLmh0
bWwKKyAgICAgICAgICAgICdjb25zdHJ1Y3Rvcic6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBh
dGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6
Ly91c2Vqc2RvYy5vcmcvdGFncy1jb25zdHJ1Y3Rvci5odG1sCisgICAgICAgICAgICAnY2xhc3Mn
OiBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisg
ICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtZXh0ZW5kcy5o
dG1sCisgICAgICAgICAgICAnZXh0ZW5kcyc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhP
cHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5v
cmcvdGFncy1kZXByZWNhdGVkLmh0bWwKKyAgICAgICAgICAgICdkZXByZWNhdGVkJzogWydwYXJz
ZURlc2NyaXB0aW9uJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3Mt
Z2xvYmFsLmh0bWwKKyAgICAgICAgICAgICdnbG9iYWwnOiBbJ2Vuc3VyZUVuZCddLAorICAgICAg
ICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLWlubmVyLmh0bWwKKyAgICAgICAgICAg
ICdpbm5lcic6IFsnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mu
b3JnL3RhZ3MtaW5zdGFuY2UuaHRtbAorICAgICAgICAgICAgJ2luc3RhbmNlJzogWydlbnN1cmVF
bmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1raW5kLmh0bWwK
KyAgICAgICAgICAgICdraW5kJzogWydwYXJzZUtpbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6
Ly91c2Vqc2RvYy5vcmcvdGFncy1taXhlcy5odG1sCisgICAgICAgICAgICAnbWl4ZXMnOiBbJ3Bh
cnNlTmFtZVBhdGgnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNk
b2Mub3JnL3RhZ3MtbWl4aW4uaHRtbAorICAgICAgICAgICAgJ21peGluJzogWydwYXJzZU5hbWVQ
YXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNk
b2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWwKKyAgICAgICAgICAgICdtZW1iZXInOiBbJ3BhcnNlVHlw
ZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAv
LyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbWV0aG9kLmh0bWwKKyAgICAgICAgICAgICdtZXRo
b2QnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAg
IC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tb2R1bGUuaHRtbAorICAgICAgICAgICAgJ21v
ZHVsZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQn
XSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1tZXRo
b2QuaHRtbAorICAgICAgICAgICAgJ2Z1bmMnOiBbJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdl
bnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIFN5bm9ueW06IGh0dHA6Ly91c2Vqc2RvYy5vcmcv
dGFncy1tZXRob2QuaHRtbAorICAgICAgICAgICAgJ2Z1bmN0aW9uJzogWydwYXJzZU5hbWVQYXRo
T3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBTeW5vbnltOiBodHRwOi8v
dXNlanNkb2Mub3JnL3RhZ3MtbWVtYmVyLmh0bWwKKyAgICAgICAgICAgICd2YXInOiBbJ3BhcnNl
VHlwZScsICdwYXJzZU5hbWVQYXRoT3B0aW9uYWwnLCAnZW5zdXJlRW5kJ10sCisgICAgICAgICAg
ICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtbmFtZS5odG1sCisgICAgICAgICAgICAnbmFt
ZSc6IFsncGFyc2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6
Ly91c2Vqc2RvYy5vcmcvdGFncy1uYW1lc3BhY2UuaHRtbAorICAgICAgICAgICAgJ25hbWVzcGFj
ZSc6IFsncGFyc2VUeXBlJywgJ3BhcnNlTmFtZVBhdGhPcHRpb25hbCcsICdlbnN1cmVFbmQnXSwK
KyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1wcml2YXRlLmh0bWwKKyAg
ICAgICAgICAgICdwcml2YXRlJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLAor
ICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXByb3RlY3RlZC5odG1sCisg
ICAgICAgICAgICAncHJvdGVjdGVkJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbidd
LAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXB1YmxpYy5odG1sCisg
ICAgICAgICAgICAncHVibGljJzogWydwYXJzZVR5cGUnLCAncGFyc2VEZXNjcmlwdGlvbiddLAor
ICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdzLXJlYWRvbmx5Lmh0bWwKKyAg
ICAgICAgICAgICdyZWFkb25seSc6IFsnZW5zdXJlRW5kJ10sCisgICAgICAgICAgICAvLyBodHRw
Oi8vdXNlanNkb2Mub3JnL3RhZ3MtcmVxdWlyZXMuaHRtbAorICAgICAgICAgICAgJ3JlcXVpcmVz
JzogWydwYXJzZU5hbWVQYXRoJywgJ2Vuc3VyZUVuZCddLAorICAgICAgICAgICAgLy8gaHR0cDov
L3VzZWpzZG9jLm9yZy90YWdzLXNpbmNlLmh0bWwKKyAgICAgICAgICAgICdzaW5jZSc6IFsncGFy
c2VEZXNjcmlwdGlvbiddLAorICAgICAgICAgICAgLy8gaHR0cDovL3VzZWpzZG9jLm9yZy90YWdz
LXN0YXRpYy5odG1sCisgICAgICAgICAgICAnc3RhdGljJzogWydlbnN1cmVFbmQnXSwKKyAgICAg
ICAgICAgIC8vIGh0dHA6Ly91c2Vqc2RvYy5vcmcvdGFncy1zdW1tYXJ5Lmh0bWwKKyAgICAgICAg
ICAgICdzdW1tYXJ5JzogWydwYXJzZURlc2NyaXB0aW9uJ10sCisgICAgICAgICAgICAvLyBodHRw
Oi8vdXNlanNkb2Mub3JnL3RhZ3MtdGhpcy5odG1sCisgICAgICAgICAgICAndGhpcyc6IFsncGFy
c2VOYW1lUGF0aCcsICdlbnN1cmVFbmQnXSwKKyAgICAgICAgICAgIC8vIGh0dHA6Ly91c2Vqc2Rv
Yy5vcmcvdGFncy10b2RvLmh0bWwKKyAgICAgICAgICAgICd0b2RvJzogWydwYXJzZURlc2NyaXB0
aW9uJ10sCisgICAgICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdmFyaWF0aW9u
Lmh0bWwKKyAgICAgICAgICAgICd2YXJpYXRpb24nOiBbJ3BhcnNlVmFyaWF0aW9uJ10sCisgICAg
ICAgICAgICAvLyBodHRwOi8vdXNlanNkb2Mub3JnL3RhZ3MtdmVyc2lvbi5odG1sCisgICAgICAg
ICAgICAndmVyc2lvbic6IFsncGFyc2VEZXNjcmlwdGlvbiddCisgICAgICAgIH07CisKKyAgICAg
ICAgVGFnUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlKCkgeworICAgICAg
ICAgICAgdmFyIGksIGl6LCBzZXF1ZW5jZXMsIG1ldGhvZDsKKworICAgICAgICAgICAgLy8gZW1w
dHkgdGl0bGUKKyAgICAgICAgICAgIGlmICghdGhpcy5fdGl0bGUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXRoaXMuYWRkRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCB0aXRsZScpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gU2VlayB0byBjb250ZW50IGxhc3QgaW5kZXguCisgICAg
ICAgICAgICB0aGlzLl9sYXN0ID0gc2Vla0NvbnRlbnQodGhpcy5fdGl0bGUpOworCisgICAgICAg
ICAgICBpZiAoaGFzT3duUHJvcGVydHkoUnVsZXMsIHRoaXMuX3RpdGxlKSkgeworICAgICAgICAg
ICAgICAgIHNlcXVlbmNlcyA9IFJ1bGVzW3RoaXMuX3RpdGxlXTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBzZXF1ZW5jZXMKKyAgICAgICAgICAgICAg
ICBzZXF1ZW5jZXMgPSBbJ3BhcnNlVHlwZScsICdwYXJzZU5hbWUnLCAncGFyc2VEZXNjcmlwdGlv
bicsICdlcGlsb2d1ZSddOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGkgPSAw
LCBpeiA9IHNlcXVlbmNlcy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAg
bWV0aG9kID0gc2VxdWVuY2VzW2ldOworICAgICAgICAgICAgICAgIGlmICghdGhpc1ttZXRob2Rd
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZWVrIGdsb2JhbCBpbmRleCB0byBl
bmQgb2YgdGhpcyB0YWcuCisgICAgICAgICAgICBpbmRleCA9IHRoaXMuX2xhc3Q7CisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fdGFnOworICAgICAgICB9OworCisgICAgICAgIGZ1bmN0aW9uIHBh
cnNlVGFnKG9wdGlvbnMpIHsKKyAgICAgICAgICAgIHZhciB0aXRsZSwgcGFyc2VyOworCisgICAg
ICAgICAgICAvLyBza2lwIHRvIHRhZworICAgICAgICAgICAgaWYgKCFza2lwVG9UYWcoKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBzY2FuIHRpdGxlCisgICAgICAgICAgICB0aXRsZSA9IHNjYW5UaXRsZSgpOworCisgICAg
ICAgICAgICAvLyBjb25zdHJ1Y3QgdGFnIHBhcnNlcgorICAgICAgICAgICAgcGFyc2VyID0gbmV3
IFRhZ1BhcnNlcihvcHRpb25zLCB0aXRsZSk7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLnBh
cnNlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBQYXJzZSBKU0RvYwor
ICAgICAgICAvLworCisgICAgICAgIGZ1bmN0aW9uIHNjYW5KU0RvY0Rlc2NyaXB0aW9uKCkgewor
ICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0gJycsIGNoLCBhdEFsbG93ZWQ7CisKKyAgICAg
ICAgICAgIGF0QWxsb3dlZCA9IHRydWU7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisKKyAgICAgICAgICAg
ICAgICBpZiAoYXRBbGxvd2VkICYmIGNoID09PSAnQCcpIHsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRl
cm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgICAgIGF0QWxsb3dlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdEFsbG93ZWQgJiYgIWlzV2hpdGVTcGFjZShjaCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXRBbGxvd2VkID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gKz0gYWR2YW5jZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRyaW0oZGVzY3JpcHRpb24pOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gcGFyc2UoY29tbWVudCwgb3B0aW9ucykgeworICAgICAgICAg
ICAgdmFyIHRhZ3MgPSBbXSwgdGFnLCBkZXNjcmlwdGlvbiwgaW50ZXJlc3RpbmdUYWdzLCBpLCBp
ejsKKworICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg
ICAgICAgIG9wdGlvbnMgPSB7fTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5
cGVvZiBvcHRpb25zLnVud3JhcCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudW53cmFwKSB7Cisg
ICAgICAgICAgICAgICAgc291cmNlID0gdW53cmFwQ29tbWVudChjb21tZW50KTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNlID0gY29tbWVudDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gYXJyYXkgb2YgcmVsZXZhbnQgdGFncworICAgICAgICAg
ICAgaWYgKG9wdGlvbnMudGFncykgeworICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KG9wdGlv
bnMudGFncykpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3RpbmdUYWdzID0geyB9Owor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG9wdGlvbnMudGFncy5sZW5ndGg7
IGkgPCBpejsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlv
bnMudGFnc1tpXSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnRlcmVzdGluZ1RhZ3Nbb3B0aW9ucy50YWdzW2ldXSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
J0ludmFsaWQgInRhZ3MiIHBhcmFtZXRlcjogJyArIG9wdGlvbnMudGFncyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKCdJbnZhbGlkICJ0YWdzIiBw
YXJhbWV0ZXI6ICcgKyBvcHRpb25zLnRhZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFDYW5BY2Nlc3NTdHJpbmdCeUluZGV4KSB7CisgICAg
ICAgICAgICAgICAgc291cmNlID0gc291cmNlLnNwbGl0KCcnKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgICAgIGluZGV4ID0g
MDsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgPSAwOworICAgICAgICAgICAgcmVjb3ZlcmFibGUg
PSBvcHRpb25zLnJlY292ZXJhYmxlOworICAgICAgICAgICAgc2xvcHB5ID0gb3B0aW9ucy5zbG9w
cHk7CisgICAgICAgICAgICBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDsKKworICAgICAgICAgICAg
ZGVzY3JpcHRpb24gPSBzY2FuSlNEb2NEZXNjcmlwdGlvbigpOworCisgICAgICAgICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIHRhZyA9IHBhcnNlVGFnKG9wdGlvbnMpOworICAg
ICAgICAgICAgICAgIGlmICghdGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWludGVyZXN0aW5nVGFncyB8fCBp
bnRlcmVzdGluZ1RhZ3MuaGFzT3duUHJvcGVydHkodGFnLnRpdGxlKSkgeworICAgICAgICAgICAg
ICAgICAgICB0YWdzLnB1c2godGFnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRl
c2NyaXB0aW9uLAorICAgICAgICAgICAgICAgIHRhZ3M6IHRhZ3MKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0KKyAgICAgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworICAgIH0oanNkb2MgPSB7
fSkpOworCisgICAgZXhwb3J0cy52ZXJzaW9uID0gVkVSU0lPTjsKKyAgICBleHBvcnRzLnBhcnNl
ID0ganNkb2MucGFyc2U7CisgICAgZXhwb3J0cy5wYXJzZVR5cGUgPSB0eXBlZC5wYXJzZVR5cGU7
CisgICAgZXhwb3J0cy5wYXJzZVBhcmFtVHlwZSA9IHR5cGVkLnBhcnNlUGFyYW1UeXBlOworICAg
IGV4cG9ydHMudW53cmFwQ29tbWVudCA9IHVud3JhcENvbW1lbnQ7CisgICAgZXhwb3J0cy5TeW50
YXggPSBzaGFsbG93Q29weSh0eXBlZC5TeW50YXgpOworICAgIGV4cG9ydHMuRXJyb3IgPSBEb2N0
cmluZUVycm9yOworICAgIGV4cG9ydHMudHlwZSA9IHsKKyAgICAgICAgU3ludGF4OiBleHBvcnRz
LlN5bnRheCwKKyAgICAgICAgcGFyc2VUeXBlOiB0eXBlZC5wYXJzZVR5cGUsCisgICAgICAgIHBh
cnNlUGFyYW1UeXBlOiB0eXBlZC5wYXJzZVBhcmFtVHlwZSwKKyAgICAgICAgc3RyaW5naWZ5OiB0
eXBlZC5zdHJpbmdpZnkKKyAgICB9OworfSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcg
PyAoZG9jdHJpbmUgPSB7fSkgOiBleHBvcnRzKSk7CisvKiB2aW06IHNldCBzdz00IHRzPTQgZXQg
dHc9ODAgOiAqLworCit9LHt9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qCisgIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIEFsZXggU2V2aWxsZSA8aGlAYWxleGFu
ZGVyc2V2aWxsZS5jb20+CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWQorICBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKy8q
KgorICogRXNjb3BlICg8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9Db25zdGVsbGF0aW9uL2Vz
Y29wZSI+ZXNjb3BlPC9hPikgaXMgYW4gPGEKKyAqIGhyZWY9Imh0dHA6Ly93d3cuZWNtYS1pbnRl
cm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvc3RhbmRhcmRzL0VjbWEtMjYyLmh0bSI+RUNNQVNj
cmlwdDwvYT4KKyAqIHNjb3BlIGFuYWx5emVyIGV4dHJhY3RlZCBmcm9tIHRoZSA8YQorICogaHJl
Zj0iaHR0cDovL2dpdGh1Yi5jb20vQ29uc3RlbGxhdGlvbi9lc21hbmdsZSI+ZXNtYW5nbGUgcHJv
amVjdDwvYS8+LgorICogPHA+CisgKiA8ZW0+ZXNjb3BlPC9lbT4gZmluZHMgbGV4aWNhbCBzY29w
ZXMgaW4gYSBzb3VyY2UgcHJvZ3JhbSwgaS5lLiBhcmVhcyBvZiB0aGF0CisgKiBwcm9ncmFtIHdo
ZXJlIGRpZmZlcmVudCBvY2N1cnJlbmNlcyBvZiB0aGUgc2FtZSBpZGVudGlmaWVyIHJlZmVyIHRv
IHRoZSBzYW1lCisgKiB2YXJpYWJsZS4gV2l0aCBlYWNoIHNjb3BlIHRoZSBjb250YWluZWQgdmFy
aWFibGVzIGFyZSBjb2xsZWN0ZWQsIGFuZCBlYWNoCisgKiBpZGVudGlmaWVyIHJlZmVyZW5jZSBp
biBjb2RlIGlzIGxpbmtlZCB0byBpdHMgY29ycmVzcG9uZGluZyB2YXJpYWJsZSAoaWYKKyAqIHBv
c3NpYmxlKS4KKyAqIDxwPgorICogPGVtPmVzY29wZTwvZW0+IHdvcmtzIG9uIGEgc3ludGF4IHRy
ZWUgb2YgdGhlIHBhcnNlZCBzb3VyY2UgY29kZSB3aGljaCBoYXMKKyAqIHRvIGFkaGVyZSB0byB0
aGUgPGEKKyAqIGhyZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3Mv
U3BpZGVyTW9ua2V5L1BhcnNlcl9BUEkiPgorICogTW96aWxsYSBQYXJzZXIgQVBJPC9hPi4gRS5n
LiA8YSBocmVmPSJodHRwOi8vZXNwcmltYS5vcmciPmVzcHJpbWE8L2E+IGlzIGEgcGFyc2VyCisg
KiB0aGF0IHByb2R1Y2VzIHN1Y2ggc3ludGF4IHRyZWVzLgorICogPHA+CisgKiBUaGUgbWFpbiBp
bnRlcmZhY2UgaXMgdGhlIHtAbGluayBhbmFseXplfSBmdW5jdGlvbi4KKyAqIEBtb2R1bGUKKyAq
LworCisvKmpzbGludCBiaXR3aXNlOnRydWUgKi8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwgZGVm
aW5lOnRydWUsIHJlcXVpcmU6dHJ1ZSovCisoZnVuY3Rpb24gKGZhY3RvcnksIGdsb2JhbCkgewor
ICAgICd1c2Ugc3RyaWN0JzsKKworICAgIGZ1bmN0aW9uIG5hbWVzcGFjZShzdHIsIG9iaikgewor
ICAgICAgICB2YXIgaSwgaXosIG5hbWVzLCBuYW1lOworICAgICAgICBuYW1lcyA9IHN0ci5zcGxp
dCgnLicpOworICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5hbWVzLmxlbmd0aDsgaSA8IGl6OyAr
K2kpIHsKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lc1tpXTsKKyAgICAgICAgICAgIGlmIChvYmou
aGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICBvYmogPSBvYmpbbmFtZV07
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9iaiA9IChvYmpbbmFtZV0g
PSB7fSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9iajsKKyAg
ICB9CisKKyAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9y
dCBBTUQsIENvbW1vbkpTL05vZGUuanMsCisgICAgLy8gYW5kIHBsYWluIGJyb3dzZXIgbG9hZGlu
ZywKKyAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7
CisgICAgICAgIGRlZmluZSgnZXNjb3BlJywgWydleHBvcnRzJywgJ2VzdHJhdmVyc2UnXSwgZnVu
Y3Rpb24gKGV4cG9ydHMsIGVzdHJhdmVyc2UpIHsKKyAgICAgICAgICAgIGZhY3RvcnkoZXhwb3J0
cywgZ2xvYmFsLCBlc3RyYXZlcnNlKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIGlmICh0eXBl
b2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZmFjdG9yeShleHBvcnRzLCBn
bG9iYWwsIHJlcXVpcmUoJ2VzdHJhdmVyc2UnKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFj
dG9yeShuYW1lc3BhY2UoJ2VzY29wZScsIGdsb2JhbCksIGdsb2JhbCwgZ2xvYmFsLmVzdHJhdmVy
c2UpOworICAgIH0KK30oZnVuY3Rpb24gKGV4cG9ydHMsIGdsb2JhbCwgZXN0cmF2ZXJzZSkgewor
ICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBTeW50YXgsCisgICAgICAgIE1hcCwKKyAgICAg
ICAgY3VycmVudFNjb3BlLAorICAgICAgICBnbG9iYWxTY29wZSwKKyAgICAgICAgc2NvcGVzLAor
ICAgICAgICBvcHRpb25zOworCisgICAgU3ludGF4ID0gZXN0cmF2ZXJzZS5TeW50YXg7CisKKyAg
ICBpZiAodHlwZW9mIGdsb2JhbC5NYXAgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgIC8vIEVT
NiBNYXAKKyAgICAgICAgTWFwID0gZ2xvYmFsLk1hcDsKKyAgICB9IGVsc2UgeworICAgICAgICBN
YXAgPSBmdW5jdGlvbiBNYXAoKSB7CisgICAgICAgICAgICB0aGlzLl9fZGF0YSA9IHt9OworICAg
ICAgICB9OworCisgICAgICAgIE1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gTWFwR2V0KGtl
eSkgeworICAgICAgICAgICAga2V5ID0gJyQnICsga2V5OworICAgICAgICAgICAgaWYgKHRoaXMu
X19kYXRhLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5fX2RhdGFba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB1bmRlZmlu
ZWQ7CisgICAgICAgIH07CisKKyAgICAgICAgTWFwLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBN
YXBIYXMoa2V5KSB7CisgICAgICAgICAgICBrZXkgPSAnJCcgKyBrZXk7CisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fX2RhdGEuaGFzT3duUHJvcGVydHkoa2V5KTsKKyAgICAgICAgfTsKKworICAg
ICAgICBNYXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIE1hcFNldChrZXksIHZhbCkgeworICAg
ICAgICAgICAga2V5ID0gJyQnICsga2V5OworICAgICAgICAgICAgdGhpcy5fX2RhdGFba2V5XSA9
IHZhbDsKKyAgICAgICAgfTsKKworICAgICAgICBNYXAucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1
bmN0aW9uIE1hcERlbGV0ZShrZXkpIHsKKyAgICAgICAgICAgIGtleSA9ICckJyArIGtleTsKKyAg
ICAgICAgICAgIHJldHVybiBkZWxldGUgdGhpcy5fX2RhdGFba2V5XTsKKyAgICAgICAgfTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBhc3NlcnQoY29uZCwgdGV4dCkgeworICAgICAgICBpZiAoIWNv
bmQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXh0KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zKCkgeworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgb3B0aW1pc3RpYzogZmFsc2UsCisgICAgICAgICAgICBkaXJlY3RpdmU6IGZh
bHNlCisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gdXBkYXRlRGVlcGx5KHRhcmdl
dCwgb3ZlcnJpZGUpIHsKKyAgICAgICAgdmFyIGtleSwgdmFsOworCisgICAgICAgIGZ1bmN0aW9u
IGlzSGFzaE9iamVjdCh0YXJnZXQpIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGFyZ2V0
ID09PSAnb2JqZWN0JyAmJiB0YXJnZXQgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh0YXJnZXQgaW5z
dGFuY2VvZiBSZWdFeHApOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChrZXkgaW4gb3ZlcnJp
ZGUpIHsKKyAgICAgICAgICAgIGlmIChvdmVycmlkZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7Cisg
ICAgICAgICAgICAgICAgdmFsID0gb3ZlcnJpZGVba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAo
aXNIYXNoT2JqZWN0KHZhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSGFzaE9iamVj
dCh0YXJnZXRba2V5XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZURlZXBseSh0
YXJnZXRba2V5XSwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdXBkYXRlRGVlcGx5KHt9LCB2YWwpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgfQorCisgICAgLyoq
CisgICAgICogQSBSZWZlcmVuY2UgcmVwcmVzZW50cyBhIHNpbmdsZSBvY2N1cnJlbmNlIG9mIGFu
IGlkZW50aWZpZXIgaW4gY29kZS4KKyAgICAgKiBAY2xhc3MgUmVmZXJlbmNlCisgICAgICovCisg
ICAgZnVuY3Rpb24gUmVmZXJlbmNlKGlkZW50LCBzY29wZSwgZmxhZywgd3JpdGVFeHByLCBtYXli
ZUltcGxpY2l0R2xvYmFsKSB7CisgICAgICAgIC8qKiAKKyAgICAgICAgICogSWRlbnRpZmllciBz
eW50YXggbm9kZS4KKyAgICAgICAgICogQG1lbWJlciB7ZXNwcmltYSNJZGVudGlmaWVyfSBSZWZl
cmVuY2UjaWRlbnRpZmllciAKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuaWRlbnRpZmllciA9
IGlkZW50OworICAgICAgICAvKiogCisgICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgZW5jbG9z
aW5nIFNjb3BlLgorICAgICAgICAgKiBAbWVtYmVyIHtTY29wZX0gUmVmZXJlbmNlI2Zyb20gCisg
ICAgICAgICAqLworICAgICAgICB0aGlzLmZyb20gPSBzY29wZTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBjb21lcyBmcm9tIGEgZHluYW1pYyBzY29wZSAo
c3VjaCBhcyAnZXZhbCcsCisgICAgICAgICAqICd3aXRoJywgZXRjLiksIGFuZCBtYXkgYmUgdHJh
cHBlZCBieSBkeW5hbWljIHNjb3Blcy4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gUmVm
ZXJlbmNlI3RhaW50ZWQKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudGFpbnRlZCA9IGZhbHNl
OworICAgICAgICAvKiogCisgICAgICAgICAqIFRoZSB2YXJpYWJsZSB0aGlzIHJlZmVyZW5jZSBp
cyByZXNvbHZlZCB3aXRoLgorICAgICAgICAgKiBAbWVtYmVyIHtWYXJpYWJsZX0gUmVmZXJlbmNl
I3Jlc29sdmVkIAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5yZXNvbHZlZCA9IG51bGw7Cisg
ICAgICAgIC8qKiAKKyAgICAgICAgICogVGhlIHJlYWQtd3JpdGUgbW9kZSBvZiB0aGUgcmVmZXJl
bmNlLiAoVmFsdWUgaXMgb25lIG9mIHtAbGluaworICAgICAgICAgKiBSZWZlcmVuY2UuUkVBRH0s
IHtAbGluayBSZWZlcmVuY2UuUld9LCB7QGxpbmsgUmVmZXJlbmNlLldSSVRFfSkuCisgICAgICAg
ICAqIEBtZW1iZXIge251bWJlcn0gUmVmZXJlbmNlI2ZsYWcgCisgICAgICAgICAqIEBwcml2YXRl
CisgICAgICAgICAqLworICAgICAgICB0aGlzLmZsYWcgPSBmbGFnOworICAgICAgICBpZiAodGhp
cy5pc1dyaXRlKCkpIHsKKyAgICAgICAgICAgIC8qKiAKKyAgICAgICAgICAgICAqIElmIHJlZmVy
ZW5jZSBpcyB3cml0ZWFibGUsIHRoaXMgaXMgdGhlIHRyZWUgYmVpbmcgd3JpdHRlbiB0byBpdC4K
KyAgICAgICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEjTm9kZX0gUmVmZXJlbmNlI3dyaXRlRXhw
ciAKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdGhpcy53cml0ZUV4cHIgPSB3cml0ZUV4
cHI7CisgICAgICAgIH0KKyAgICAgICAgLyoqIAorICAgICAgICAgKiBXaGV0aGVyIHRoZSBSZWZl
cmVuY2UgbWlnaHQgcmVmZXIgdG8gYSBnbG9iYWwgdmFyaWFibGUuCisgICAgICAgICAqIEBtZW1i
ZXIge2Jvb2xlYW59IFJlZmVyZW5jZSNfX21heWJlSW1wbGljaXRHbG9iYWwgCisgICAgICAgICAq
IEBwcml2YXRlCisgICAgICAgICAqLworICAgICAgICB0aGlzLl9fbWF5YmVJbXBsaWNpdEdsb2Jh
bCA9IG1heWJlSW1wbGljaXRHbG9iYWw7CisgICAgfQorCisgICAgLyoqIAorICAgICAqIEBjb25z
dGFudCBSZWZlcmVuY2UuUkVBRCAKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIFJlZmVy
ZW5jZS5SRUFEID0gMHgxOworICAgIC8qKiAKKyAgICAgKiBAY29uc3RhbnQgUmVmZXJlbmNlLldS
SVRFIAorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgUmVmZXJlbmNlLldSSVRFID0gMHgy
OworICAgIC8qKiAKKyAgICAgKiBAY29uc3RhbnQgUmVmZXJlbmNlLlJXIAorICAgICAqIEBwcml2
YXRlCisgICAgICovCisgICAgUmVmZXJlbmNlLlJXID0gMHgzOworCisgICAgLyoqCisgICAgICog
V2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIHN0YXRpYy4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5j
ZSNpc1N0YXRpYworICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgUmVmZXJl
bmNlLnByb3RvdHlwZS5pc1N0YXRpYyA9IGZ1bmN0aW9uIGlzU3RhdGljKCkgeworICAgICAgICBy
ZXR1cm4gIXRoaXMudGFpbnRlZCAmJiB0aGlzLnJlc29sdmVkICYmIHRoaXMucmVzb2x2ZWQuc2Nv
cGUuaXNTdGF0aWMoKTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogV2hldGhlciB0aGUgcmVm
ZXJlbmNlIGlzIHdyaXRlYWJsZS4KKyAgICAgKiBAbWV0aG9kIFJlZmVyZW5jZSNpc1dyaXRlCisg
ICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90eXBl
LmlzV3JpdGUgPSBmdW5jdGlvbiBpc1dyaXRlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5mbGFn
ICYgUmVmZXJlbmNlLldSSVRFOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRo
ZSByZWZlcmVuY2UgaXMgcmVhZGFibGUuCisgICAgICogQG1ldGhvZCBSZWZlcmVuY2UjaXNSZWFk
CisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90
eXBlLmlzUmVhZCA9IGZ1bmN0aW9uIGlzUmVhZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZmxh
ZyAmIFJlZmVyZW5jZS5SRUFEOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBXaGV0aGVyIHRo
ZSByZWZlcmVuY2UgaXMgcmVhZC1vbmx5LgorICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzUmVh
ZE9ubHkKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIFJlZmVyZW5jZS5w
cm90b3R5cGUuaXNSZWFkT25seSA9IGZ1bmN0aW9uIGlzUmVhZE9ubHkoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzLmZsYWcgPT09IFJlZmVyZW5jZS5SRUFEOworICAgIH07CisKKyAgICAvKioKKyAg
ICAgKiBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgd3JpdGUtb25seS4KKyAgICAgKiBAbWV0aG9k
IFJlZmVyZW5jZSNpc1dyaXRlT25seQorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICov
CisgICAgUmVmZXJlbmNlLnByb3RvdHlwZS5pc1dyaXRlT25seSA9IGZ1bmN0aW9uIGlzV3JpdGVP
bmx5KCkgeworICAgICAgICByZXR1cm4gdGhpcy5mbGFnID09PSBSZWZlcmVuY2UuV1JJVEU7Cisg
ICAgfTsKKworICAgIC8qKgorICAgICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyByZWFkLXdy
aXRlLgorICAgICAqIEBtZXRob2QgUmVmZXJlbmNlI2lzUmVhZFdyaXRlCisgICAgICogQHJldHVy
biB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBSZWZlcmVuY2UucHJvdG90eXBlLmlzUmVhZFdyaXRl
ID0gZnVuY3Rpb24gaXNSZWFkV3JpdGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmZsYWcgPT09
IFJlZmVyZW5jZS5SVzsKKyAgICB9OworCisgICAgLyoqCisgICAgICogQSBWYXJpYWJsZSByZXBy
ZXNlbnRzIGEgbG9jYWxseSBzY29wZWQgaWRlbnRpZmllci4gVGhlc2UgaW5jbHVkZSBhcmd1bWVu
dHMgdG8KKyAgICAgKiBmdW5jdGlvbnMuCisgICAgICogQGNsYXNzIFZhcmlhYmxlCisgICAgICov
CisgICAgZnVuY3Rpb24gVmFyaWFibGUobmFtZSwgc2NvcGUpIHsKKyAgICAgICAgLyoqICAKKyAg
ICAgICAgICogVGhlIHZhcmlhYmxlIG5hbWUsIGFzIGdpdmVuIGluIHRoZSBzb3VyY2UgY29kZS4K
KyAgICAgICAgICogQG1lbWJlciB7U3RyaW5nfSBWYXJpYWJsZSNuYW1lIAorICAgICAgICAgKi8K
KyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qg
b2YgZGVmaW5pbmcgb2NjdXJyZW5jZXMgb2YgdGhpcyB2YXJpYWJsZSAobGlrZSBpbiAndmFyIC4u
LicKKyAgICAgICAgICogc3RhdGVtZW50cyBvciBhcyBwYXJhbWV0ZXIpLCBhcyBBU1Qgbm9kZXMu
CisgICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEuSWRlbnRpZmllcltdfSBWYXJpYWJsZSNpZGVu
dGlmaWVycworICAgICAgICAgKi8KKyAgICAgICAgdGhpcy5pZGVudGlmaWVycyA9IFtdOworICAg
ICAgICAvKioKKyAgICAgICAgICogTGlzdCBvZiB7QGxpbmsgUmVmZXJlbmNlfHJlZmVyZW5jZXN9
IG9mIHRoaXMgdmFyaWFibGUgKGV4Y2x1ZGluZyBwYXJhbWV0ZXIgZW50cmllcykKKyAgICAgICAg
ICogaW4gaXRzIGRlZmluaW5nIHNjb3BlIGFuZCBhbGwgbmVzdGVkIHNjb3Blcy4gRm9yIGRlZmlu
aW5nCisgICAgICAgICAqIG9jY3VycmVuY2VzIG9ubHkgc2VlIHtAbGluayBWYXJpYWJsZSNkZWZz
fS4KKyAgICAgICAgICogQG1lbWJlciB7UmVmZXJlbmNlW119IFZhcmlhYmxlI3JlZmVyZW5jZXMK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMucmVmZXJlbmNlcyA9IFtdOworCisgICAgICAgIC8q
KgorICAgICAgICAgKiBMaXN0IG9mIGRlZmluaW5nIG9jY3VycmVuY2VzIG9mIHRoaXMgdmFyaWFi
bGUgKGxpa2UgaW4gJ3ZhciAuLi4nCisgICAgICAgICAqIHN0YXRlbWVudHMgb3IgYXMgcGFyYW1l
dGVyKSwgYXMgY3VzdG9tIG9iamVjdHMuCisgICAgICAgICAqIEB0eXBlZGVmIHtPYmplY3R9IERl
ZkVudHJ5CisgICAgICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBEZWZFbnRyeS50eXBlIC0gdGhl
IHR5cGUgb2YgdGhlIG9jY3VycmVuY2UgKGUuZy4KKyAgICAgICAgICogICAgICAiUGFyYW1ldGVy
IiwgIlZhcmlhYmxlIiwgLi4uKQorICAgICAgICAgKiBAcHJvcGVydHkge2VzcHJpbWEuSWRlbnRp
Zmllcn0gRGVmRW50cnkubmFtZSAtIHRoZSBpZGVudGlmaWVyIEFTVCBub2RlIG9mIHRoZSBvY2N1
cnJlbmNlCisgICAgICAgICAqIEBwcm9wZXJ0eSB7ZXNwcmltYS5Ob2RlfSBEZWZFbnRyeS5ub2Rl
IC0gdGhlIGVuY2xvc2luZyBub2RlIG9mIHRoZQorICAgICAgICAgKiAgICAgIGlkZW50aWZpZXIK
KyAgICAgICAgICogQHByb3BlcnR5IHtlc3ByaW1hLk5vZGV9IFtEZWZFbnRyeS5wYXJlbnRdIC0g
dGhlIGVuY2xvc2luZyBzdGF0ZW1lbnQKKyAgICAgICAgICogICAgICBub2RlIG9mIHRoZSBpZGVu
dGlmaWVyCisgICAgICAgICAqIEBtZW1iZXIge0RlZkVudHJ5W119IFZhcmlhYmxlI2RlZnMKKyAg
ICAgICAgICovCisgICAgICAgIHRoaXMuZGVmcyA9IFtdOworCisgICAgICAgIHRoaXMudGFpbnRl
ZCA9IGZhbHNlOworICAgICAgICAvKioKKyAgICAgICAgICogV2hldGhlciB0aGlzIGlzIGEgc3Rh
Y2sgdmFyaWFibGUuCisgICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IFZhcmlhYmxlI3N0YWNr
CisgICAgICAgICAqLworICAgICAgICB0aGlzLnN0YWNrID0gdHJ1ZTsKKyAgICAgICAgLyoqIAor
ICAgICAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGVuY2xvc2luZyBTY29wZS4KKyAgICAgICAgICog
QG1lbWJlciB7U2NvcGV9IFZhcmlhYmxlI3Njb3BlIAorICAgICAgICAgKi8KKyAgICAgICAgdGhp
cy5zY29wZSA9IHNjb3BlOworICAgIH0KKworICAgIFZhcmlhYmxlLkNhdGNoQ2xhdXNlID0gJ0Nh
dGNoQ2xhdXNlJzsKKyAgICBWYXJpYWJsZS5QYXJhbWV0ZXIgPSAnUGFyYW1ldGVyJzsKKyAgICBW
YXJpYWJsZS5GdW5jdGlvbk5hbWUgPSAnRnVuY3Rpb25OYW1lJzsKKyAgICBWYXJpYWJsZS5WYXJp
YWJsZSA9ICdWYXJpYWJsZSc7CisgICAgVmFyaWFibGUuSW1wbGljaXRHbG9iYWxWYXJpYWJsZSA9
ICdJbXBsaWNpdEdsb2JhbFZhcmlhYmxlJzsKKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0U2NvcGUo
c2NvcGUsIGJsb2NrKSB7CisgICAgICAgIHZhciBib2R5LCBpLCBpeiwgc3RtdCwgZXhwcjsKKwor
ICAgICAgICAvLyBXaGVuIHVwcGVyIHNjb3BlIGlzIGV4aXN0cyBhbmQgc3RyaWN0LCBpbm5lciBz
Y29wZSBpcyBhbHNvIHN0cmljdC4KKyAgICAgICAgaWYgKHNjb3BlLnVwcGVyICYmIHNjb3BlLnVw
cGVyLmlzU3RyaWN0KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzY29wZS50eXBlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBib2R5
ID0gYmxvY2suYm9keTsKKyAgICAgICAgfSBlbHNlIGlmIChzY29wZS50eXBlID09PSAnZ2xvYmFs
JykgeworICAgICAgICAgICAgYm9keSA9IGJsb2NrOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wdGlvbnMuZGly
ZWN0aXZlKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IGJvZHkuYm9keS5sZW5ndGg7
IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgc3RtdCA9IGJvZHkuYm9keVtpXTsKKyAg
ICAgICAgICAgICAgICBpZiAoc3RtdC50eXBlICE9PSAnRGlyZWN0aXZlU3RhdGVtZW50Jykgewor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKHN0bXQucmF3ID09PSAnInVzZSBzdHJpY3QiJyB8fCBzdG10LnJhdyA9PT0gJ1wn
dXNlIHN0cmljdFwnJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBmb3IgKGkgPSAwLCBpeiA9IGJvZHkuYm9keS5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAg
ICAgICAgICAgICAgc3RtdCA9IGJvZHkuYm9keVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoc3Rt
dC50eXBlICE9PSBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCkgeworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXhwciA9IHN0
bXQuZXhwcmVzc2lvbjsKKyAgICAgICAgICAgICAgICBpZiAoZXhwci50eXBlICE9PSBTeW50YXgu
TGl0ZXJhbCB8fCB0eXBlb2YgZXhwci52YWx1ZSAhPT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChl
eHByLnJhdyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHByLnJhdyA9PT0g
JyJ1c2Ugc3RyaWN0IicgfHwgZXhwci5yYXcgPT09ICdcJ3VzZSBzdHJpY3RcJycpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4cHIudmFs
dWUgPT09ICd1c2Ugc3RyaWN0JykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIEBjbGFzcyBTY29wZQorICAgICAqLworICAgIGZ1bmN0aW9uIFNjb3BlKGJsb2NrLCBv
cHQpIHsKKyAgICAgICAgdmFyIHZhcmlhYmxlLCBib2R5OworCisgICAgICAgIC8qKgorICAgICAg
ICAgKiBPbmUgb2YgJ2NhdGNoJywgJ3dpdGgnLCAnZnVuY3Rpb24nIG9yICdnbG9iYWwnLgorICAg
ICAgICAgKiBAbWVtYmVyIHtTdHJpbmd9IFNjb3BlI3R5cGUKKyAgICAgICAgICovCisgICAgICAg
IHRoaXMudHlwZSA9CisgICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3ludGF4LkNhdGNoQ2xh
dXNlKSA/ICdjYXRjaCcgOgorICAgICAgICAgICAgKGJsb2NrLnR5cGUgPT09IFN5bnRheC5XaXRo
U3RhdGVtZW50KSA/ICd3aXRoJyA6CisgICAgICAgICAgICAoYmxvY2sudHlwZSA9PT0gU3ludGF4
LlByb2dyYW0pID8gJ2dsb2JhbCcgOiAnZnVuY3Rpb24nOworICAgICAgICAgLyoqCisgICAgICAg
ICAqIFRoZSBzY29wZWQge0BsaW5rIFZhcmlhYmxlfXMgb2YgdGhpcyBzY29wZSwgYXMgPGNvZGU+
eyBWYXJpYWJsZS5uYW1lCisgICAgICAgICAqIDogVmFyaWFibGUgfTwvY29kZT4uCisgICAgICAg
ICAqIEBtZW1iZXIge01hcH0gU2NvcGUjc2V0CisgICAgICAgICAqLworICAgICAgICB0aGlzLnNl
dCA9IG5ldyBNYXAoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSB0YWludGVkIHZhcmlh
YmxlcyBvZiB0aGlzIHNjb3BlLCBhcyA8Y29kZT57IFZhcmlhYmxlLm5hbWUgOgorICAgICAgICAg
KiBib29sZWFuIH08L2NvZGU+LgorICAgICAgICAgKiBAbWVtYmVyIHtNYXB9IFNjb3BlI3RhaW50
cyAqLworICAgICAgICB0aGlzLnRhaW50cyA9IG5ldyBNYXAoKTsKKyAgICAgICAgLyoqCisgICAg
ICAgICAqIEdlbmVyYWxseSwgdGhyb3VnaCB0aGUgbGV4aWNhbCBzY29waW5nIG9mIEpTIHlvdSBj
YW4gYWx3YXlzIGtub3cKKyAgICAgICAgICogd2hpY2ggdmFyaWFibGUgYW4gaWRlbnRpZmllciBp
biB0aGUgc291cmNlIGNvZGUgcmVmZXJzIHRvLiBUaGVyZSBhcmUKKyAgICAgICAgICogYSBmZXcg
ZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUuIFdpdGggJ2dsb2JhbCcgYW5kICd3aXRoJyBzY29wZXMg
eW91CisgICAgICAgICAqIGNhbiBvbmx5IGRlY2lkZSBhdCBydW50aW1lIHdoaWNoIHZhcmlhYmxl
IGEgcmVmZXJlbmNlIHJlZmVycyB0by4KKyAgICAgICAgICogTW9yZW92ZXIsIGlmICdldmFsKCkn
IGlzIHVzZWQgaW4gYSBzY29wZSwgaXQgbWlnaHQgaW50cm9kdWNlIG5ldworICAgICAgICAgKiBi
aW5kaW5ncyBpbiB0aGlzIG9yIGl0cyBwcmFyZW50IHNjb3Blcy4KKyAgICAgICAgICogQWxsIHRo
b3NlIHNjb3BlcyBhcmUgY29uc2lkZXJlZCAnZHluYW1pYycuCisgICAgICAgICAqIEBtZW1iZXIg
e2Jvb2xlYW59IFNjb3BlI2R5bmFtaWMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZHluYW1p
YyA9IHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcgfHwgdGhpcy50eXBlID09PSAnd2l0aCc7CisgICAg
ICAgIC8qKgorICAgICAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgc2NvcGUtZGVmaW5pbmcgc3lu
dGF4IG5vZGUuCisgICAgICAgICAqIEBtZW1iZXIge2VzcHJpbWEuTm9kZX0gU2NvcGUjYmxvY2sK
KyAgICAgICAgICovCisgICAgICAgIHRoaXMuYmxvY2sgPSBibG9jazsKKyAgICAgICAgIC8qKgor
ICAgICAgICAgKiBUaGUge0BsaW5rIFJlZmVyZW5jZXxyZWZlcmVuY2VzfSB0aGF0IGFyZSBub3Qg
cmVzb2x2ZWQgd2l0aCB0aGlzIHNjb3BlLgorICAgICAgICAgKiBAbWVtYmVyIHtSZWZlcmVuY2Vb
XX0gU2NvcGUjdGhyb3VnaAorICAgICAgICAgKi8KKyAgICAgICAgdGhpcy50aHJvdWdoID0gW107
CisgICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHNjb3BlZCB7QGxpbmsgVmFyaWFibGV9cyBv
ZiB0aGlzIHNjb3BlLiBJbiB0aGUgY2FzZSBvZiBhCisgICAgICAgICAqICdmdW5jdGlvbicgc2Nv
cGUgdGhpcyBpbmNsdWRlcyB0aGUgYXV0b21hdGljIGFyZ3VtZW50IDxlbT5hcmd1bWVudHM8L2Vt
PiBhcworICAgICAgICAgKiBpdHMgZmlyc3QgZWxlbWVudCwgYXMgd2VsbCBhcyBhbGwgZnVydGhl
ciBmb3JtYWwgYXJndW1lbnRzLgorICAgICAgICAgKiBAbWVtYmVyIHtWYXJpYWJsZVtdfSBTY29w
ZSN2YXJpYWJsZXMKKyAgICAgICAgICovCisgICAgICAgIHRoaXMudmFyaWFibGVzID0gW107Cisg
ICAgICAgICAvKioKKyAgICAgICAgICogQW55IHZhcmlhYmxlIHtAbGluayBSZWZlcmVuY2V8cmVm
ZXJlbmNlfSBmb3VuZCBpbiB0aGlzIHNjb3BlLiBUaGlzCisgICAgICAgICAqIGluY2x1ZGVzIG9j
Y3VycmVuY2VzIG9mIGxvY2FsIHZhcmlhYmxlcyBhcyB3ZWxsIGFzIHZhcmlhYmxlcyBmcm9tCisg
ICAgICAgICAqIHBhcmVudCBzY29wZXMgKGluY2x1ZGluZyB0aGUgZ2xvYmFsIHNjb3BlKS4gRm9y
IGxvY2FsIHZhcmlhYmxlcworICAgICAgICAgKiB0aGlzIGFsc28gaW5jbHVkZXMgZGVmaW5pbmcg
b2NjdXJyZW5jZXMgKGxpa2UgaW4gYSAndmFyJyBzdGF0ZW1lbnQpLgorICAgICAgICAgKiBJbiBh
ICdmdW5jdGlvbicgc2NvcGUgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBvY2N1cnJlbmNlcyBv
ZiB0aGUKKyAgICAgICAgICogZm9ybWFsIHBhcmFtZXRlciBpbiB0aGUgcGFyYW1ldGVyIGxpc3Qu
CisgICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtdfSBTY29wZSNyZWZlcmVuY2VzCisgICAg
ICAgICAqLworICAgICAgICB0aGlzLnJlZmVyZW5jZXMgPSBbXTsKKyAgICAgICAgIC8qKgorICAg
ICAgICAgKiBMaXN0IG9mIHtAbGluayBSZWZlcmVuY2V9cyB0aGF0IGFyZSBsZWZ0IHRvIGJlIHJl
c29sdmVkIChpLmUuIHdoaWNoCisgICAgICAgICAqIG5lZWQgdG8gYmUgbGlua2VkIHRvIHRoZSB2
YXJpYWJsZSB0aGV5IHJlZmVyIHRvKS4gVXNlZCBpbnRlcm5hbGx5IHRvCisgICAgICAgICAqIHJl
c29sdmUgYmluZGluZ3MgZHVyaW5nIHNjb3BlIGFuYWx5c2lzLiBPbiBhIGZpbmFsaXplZCBzY29w
ZQorICAgICAgICAgKiBhbmFseXNpcywgYWxsIHNvcGVzIGhhdmUgPGVtPmxlZnQ8L2VtPiB2YWx1
ZSA8c3Ryb25nPm51bGw8L3N0cm9uZz4uCisgICAgICAgICAqIEBtZW1iZXIge1JlZmVyZW5jZVtd
fSBTY29wZSNsZWZ0CisgICAgICAgICAqLworICAgICAgICB0aGlzLmxlZnQgPSBbXTsKKyAgICAg
ICAgIC8qKgorICAgICAgICAgKiBGb3IgJ2dsb2JhbCcgYW5kICdmdW5jdGlvbicgc2NvcGVzLCB0
aGlzIGlzIGEgc2VsZi1yZWZlcmVuY2UuIEZvcgorICAgICAgICAgKiBvdGhlciBzY29wZSB0eXBl
cyB0aGlzIGlzIHRoZSA8ZW0+dmFyaWFibGVTY29wZTwvZW0+IHZhbHVlIG9mIHRoZQorICAgICAg
ICAgKiBwYXJlbnQgc2NvcGUuCisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN2YXJp
YWJsZVNjb3BlCisgICAgICAgICAqLworICAgICAgICB0aGlzLnZhcmlhYmxlU2NvcGUgPQorICAg
ICAgICAgICAgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcgfHwgdGhpcy50eXBlID09PSAnZnVuY3Rp
b24nKSA/IHRoaXMgOiBjdXJyZW50U2NvcGUudmFyaWFibGVTY29wZTsKKyAgICAgICAgIC8qKgor
ICAgICAgICAgKiBXaGV0aGVyIHRoaXMgc2NvcGUgaXMgY3JlYXRlZCBieSBhIEZ1bmN0aW9uRXhw
cmVzc2lvbi4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjZnVuY3Rpb25FeHBy
ZXNzaW9uU2NvcGUKKyAgICAgICAgICovCisgICAgICAgIHRoaXMuZnVuY3Rpb25FeHByZXNzaW9u
U2NvcGUgPSBmYWxzZTsKKyAgICAgICAgIC8qKgorICAgICAgICAgKiBXaGV0aGVyIHRoaXMgaXMg
YSBzY29wZSB0aGF0IGNvbnRhaW5zIGFuICdldmFsKCknIGludm9jYXRpb24uCisgICAgICAgICAq
IEBtZW1iZXIge2Jvb2xlYW59IFNjb3BlI2RpcmVjdENhbGxUb0V2YWxTY29wZQorICAgICAgICAg
Ki8KKyAgICAgICAgdGhpcy5kaXJlY3RDYWxsVG9FdmFsU2NvcGUgPSBmYWxzZTsKKyAgICAgICAg
IC8qKgorICAgICAgICAgKiBAbWVtYmVyIHtib29sZWFufSBTY29wZSN0aGlzRm91bmQKKyAgICAg
ICAgICovCisgICAgICAgIHRoaXMudGhpc0ZvdW5kID0gZmFsc2U7CisgICAgICAgIGJvZHkgPSB0
aGlzLnR5cGUgPT09ICdmdW5jdGlvbicgPyBibG9jay5ib2R5IDogYmxvY2s7CisgICAgICAgIGlm
IChvcHQubmFtaW5nKSB7CisgICAgICAgICAgICB0aGlzLl9fZGVmaW5lKGJsb2NrLmlkLCB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuRnVuY3Rpb25OYW1lLAorICAgICAgICAgICAg
ICAgIG5hbWU6IGJsb2NrLmlkLAorICAgICAgICAgICAgICAgIG5vZGU6IGJsb2NrCisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25FeHByZXNzaW9uU2NvcGUgPSB0cnVl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2Z1bmN0
aW9uJykgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlKCdhcmd1bWVu
dHMnLCB0aGlzKTsKKyAgICAgICAgICAgICAgICB0aGlzLnRhaW50cy5zZXQoJ2FyZ3VtZW50cycs
IHRydWUpOworICAgICAgICAgICAgICAgIHRoaXMuc2V0LnNldCgnYXJndW1lbnRzJywgdmFyaWFi
bGUpOworICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gU3ludGF4LkZ1bmN0
aW9uRXhwcmVzc2lvbiAmJiBibG9jay5pZCkgeworICAgICAgICAgICAgICAgIG5ldyBTY29wZShi
bG9jaywgeyBuYW1pbmc6IHRydWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAgLyoqCisgICAgICAgICAqIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50IHtAbGluayBTY29w
ZXxzY29wZX0uCisgICAgICAgICAqIEBtZW1iZXIge1Njb3BlfSBTY29wZSN1cHBlcgorICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy51cHBlciA9IGN1cnJlbnRTY29wZTsKKyAgICAgICAgIC8qKgor
ICAgICAgICAgKiBXaGV0aGVyICd1c2Ugc3RyaWN0JyBpcyBpbiBlZmZlY3QgaW4gdGhpcyBzY29w
ZS4KKyAgICAgICAgICogQG1lbWJlciB7Ym9vbGVhbn0gU2NvcGUjaXNTdHJpY3QKKyAgICAgICAg
ICovCisgICAgICAgIHRoaXMuaXNTdHJpY3QgPSBpc1N0cmljdFNjb3BlKHRoaXMsIGJsb2NrKTsK
KworICAgICAgICAgLyoqCisgICAgICAgICAqIExpc3Qgb2YgbmVzdGVkIHtAbGluayBTY29wZX1z
LgorICAgICAgICAgKiBAbWVtYmVyIHtTY29wZVtdfSBTY29wZSNjaGlsZFNjb3BlcworICAgICAg
ICAgKi8KKyAgICAgICAgdGhpcy5jaGlsZFNjb3BlcyA9IFtdOworICAgICAgICBpZiAoY3VycmVu
dFNjb3BlKSB7CisgICAgICAgICAgICBjdXJyZW50U2NvcGUuY2hpbGRTY29wZXMucHVzaCh0aGlz
KTsKKyAgICAgICAgfQorCisKKyAgICAgICAgLy8gUkFJSQorICAgICAgICBjdXJyZW50U2NvcGUg
PSB0aGlzOworICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZ2xvYmFsJykgeworICAgICAgICAg
ICAgZ2xvYmFsU2NvcGUgPSB0aGlzOworICAgICAgICAgICAgZ2xvYmFsU2NvcGUuaW1wbGljaXQg
PSB7CisgICAgICAgICAgICAgICAgc2V0OiBuZXcgTWFwKCksCisgICAgICAgICAgICAgICAgdmFy
aWFibGVzOiBbXQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBzY29wZXMucHVz
aCh0aGlzKTsKKyAgICB9CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19jbG9zZSA9IGZ1bmN0aW9u
IF9fY2xvc2UoKSB7CisgICAgICAgIHZhciBpLCBpeiwgcmVmLCBjdXJyZW50LCBub2RlLCBpbXBs
aWNpdDsKKworICAgICAgICAvLyBCZWNhdXNlIGlmIHRoaXMgaXMgZ2xvYmFsIGVudmlyb25tZW50
LCB1cHBlciBpcyBudWxsCisgICAgICAgIGlmICghdGhpcy5keW5hbWljIHx8IG9wdGlvbnMub3B0
aW1pc3RpYykgeworICAgICAgICAgICAgLy8gc3RhdGljIHJlc29sdmUKKyAgICAgICAgICAgIGZv
ciAoaSA9IDAsIGl6ID0gdGhpcy5sZWZ0Lmxlbmd0aDsgaSA8IGl6OyArK2kpIHsKKyAgICAgICAg
ICAgICAgICByZWYgPSB0aGlzLmxlZnRbaV07CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9f
cmVzb2x2ZShyZWYpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX19kZWxlZ2F0ZVRvVXBw
ZXJTY29wZShyZWYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgImdsb2JhbCIgLyAid2l0aCIgLyAiZnVu
Y3Rpb24gd2l0aCBldmFsIiBlbnZpcm9ubWVudAorICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9
PT0gJ3dpdGgnKSB7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSB0aGlzLmxlZnQu
bGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAgICByZWYgPSB0aGlzLmxl
ZnRbaV07CisgICAgICAgICAgICAgICAgICAgIHJlZi50YWludGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fX2RlbGVnYXRlVG9VcHBlclNjb3BlKHJlZik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
LCBpeiA9IHRoaXMubGVmdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIG5vdGlmeSBhbGwgbmFtZXMgYXJlIHRocm91Z2ggdG8gZ2xvYmFsCisgICAgICAgICAg
ICAgICAgICAgIHJlZiA9IHRoaXMubGVmdFtpXTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dCA9IHRoaXM7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnQudGhyb3VnaC5wdXNoKHJlZik7CisgICAgICAgICAgICAgICAgICAgICAgICBj
dXJyZW50ID0gY3VycmVudC51cHBlcjsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY3Vy
cmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2dsb2JhbCcpIHsKKyAgICAgICAgICAgIGltcGxpY2l0
ID0gW107CisgICAgICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IHRoaXMubGVmdC5sZW5ndGg7IGkg
PCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAgcmVmID0gdGhpcy5sZWZ0W2ldOworICAgICAg
ICAgICAgICAgIGlmIChyZWYuX19tYXliZUltcGxpY2l0R2xvYmFsICYmICF0aGlzLnNldC5oYXMo
cmVmLmlkZW50aWZpZXIubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW1wbGljaXQucHVz
aChyZWYuX19tYXliZUltcGxpY2l0R2xvYmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBpbXBsaWNpdCBnbG9iYWwgdmFyaWFi
bGUgZnJvbSBhc3NpZ25tZW50IGV4cHJlc3Npb24KKyAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6
ID0gaW1wbGljaXQubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgIG5vZGUg
PSBpbXBsaWNpdFtpXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9fZGVmaW5lSW1wbGljaXQobm9k
ZS5sZWZ0LCB7CisgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLkltcGxpY2l0R2xv
YmFsVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUubGVmdCwKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZTogbm9kZQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5sZWZ0ID0gbnVsbDsKKyAgICAgICAgY3Vy
cmVudFNjb3BlID0gdGhpcy51cHBlcjsKKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLl9f
cmVzb2x2ZSA9IGZ1bmN0aW9uIF9fcmVzb2x2ZShyZWYpIHsKKyAgICAgICAgdmFyIHZhcmlhYmxl
LCBuYW1lOworICAgICAgICBuYW1lID0gcmVmLmlkZW50aWZpZXIubmFtZTsKKyAgICAgICAgaWYg
KHRoaXMuc2V0LmhhcyhuYW1lKSkgeworICAgICAgICAgICAgdmFyaWFibGUgPSB0aGlzLnNldC5n
ZXQobmFtZSk7CisgICAgICAgICAgICB2YXJpYWJsZS5yZWZlcmVuY2VzLnB1c2gocmVmKTsKKyAg
ICAgICAgICAgIHZhcmlhYmxlLnN0YWNrID0gdmFyaWFibGUuc3RhY2sgJiYgcmVmLmZyb20udmFy
aWFibGVTY29wZSA9PT0gdGhpcy52YXJpYWJsZVNjb3BlOworICAgICAgICAgICAgaWYgKHJlZi50
YWludGVkKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUudGFpbnRlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgdGhpcy50YWludHMuc2V0KHZhcmlhYmxlLm5hbWUsIHRydWUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmVmLnJlc29sdmVkID0gdmFyaWFibGU7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsK
KworICAgIFNjb3BlLnByb3RvdHlwZS5fX2RlbGVnYXRlVG9VcHBlclNjb3BlID0gZnVuY3Rpb24g
X19kZWxlZ2F0ZVRvVXBwZXJTY29wZShyZWYpIHsKKyAgICAgICAgaWYgKHRoaXMudXBwZXIpIHsK
KyAgICAgICAgICAgIHRoaXMudXBwZXIubGVmdC5wdXNoKHJlZik7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy50aHJvdWdoLnB1c2gocmVmKTsKKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBl
Ll9fZGVmaW5lSW1wbGljaXQgPSBmdW5jdGlvbiBfX2RlZmluZUltcGxpY2l0KG5vZGUsIGluZm8p
IHsKKyAgICAgICAgdmFyIG5hbWUsIHZhcmlhYmxlOworICAgICAgICBpZiAobm9kZSAmJiBub2Rl
LnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBuYW1lID0gbm9kZS5u
YW1lOworICAgICAgICAgICAgaWYgKCF0aGlzLmltcGxpY2l0LnNldC5oYXMobmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZShuYW1lLCB0aGlzKTsKKyAgICAg
ICAgICAgICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLmRlZnMucHVzaChpbmZvKTsKKyAgICAgICAgICAgICAgICB0aGlzLmltcGxp
Y2l0LnNldC5zZXQobmFtZSwgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIHRoaXMuaW1wbGlj
aXQudmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB2YXJpYWJsZSA9IHRoaXMuaW1wbGljaXQuc2V0LmdldChuYW1lKTsKKyAgICAg
ICAgICAgICAgICB2YXJpYWJsZS5pZGVudGlmaWVycy5wdXNoKG5vZGUpOworICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLmRlZnMucHVzaChpbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZWZpbmUgPSBmdW5jdGlvbiBfX2RlZmlu
ZShub2RlLCBpbmZvKSB7CisgICAgICAgIHZhciBuYW1lLCB2YXJpYWJsZTsKKyAgICAgICAgaWYg
KG5vZGUgJiYgbm9kZS50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAg
bmFtZSA9IG5vZGUubmFtZTsKKyAgICAgICAgICAgIGlmICghdGhpcy5zZXQuaGFzKG5hbWUpKSB7
CisgICAgICAgICAgICAgICAgdmFyaWFibGUgPSBuZXcgVmFyaWFibGUobmFtZSwgdGhpcyk7Cisg
ICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmllcnMucHVzaChub2RlKTsKKyAgICAgICAg
ICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2goaW5mbyk7CisgICAgICAgICAgICAgICAgdGhpcy5z
ZXQuc2V0KG5hbWUsIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5w
dXNoKHZhcmlhYmxlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
aWFibGUgPSB0aGlzLnNldC5nZXQobmFtZSk7CisgICAgICAgICAgICAgICAgdmFyaWFibGUuaWRl
bnRpZmllcnMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICB2YXJpYWJsZS5kZWZzLnB1c2go
aW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgU2NvcGUucHJv
dG90eXBlLl9fcmVmZXJlbmNpbmcgPSBmdW5jdGlvbiBfX3JlZmVyZW5jaW5nKG5vZGUsIGFzc2ln
biwgd3JpdGVFeHByLCBtYXliZUltcGxpY2l0R2xvYmFsKSB7CisgICAgICAgIHZhciByZWY7Cisg
ICAgICAgIC8vIGJlY2F1c2UgQXJyYXkgZWxlbWVudCBtYXkgYmUgbnVsbAorICAgICAgICBpZiAo
bm9kZSAmJiBub2RlLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBy
ZWYgPSBuZXcgUmVmZXJlbmNlKG5vZGUsIHRoaXMsIGFzc2lnbiB8fCBSZWZlcmVuY2UuUkVBRCwg
d3JpdGVFeHByLCBtYXliZUltcGxpY2l0R2xvYmFsKTsKKyAgICAgICAgICAgIHRoaXMucmVmZXJl
bmNlcy5wdXNoKHJlZik7CisgICAgICAgICAgICB0aGlzLmxlZnQucHVzaChyZWYpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIFNjb3BlLnByb3RvdHlwZS5fX2RldGVjdEV2YWwgPSBmdW5jdGlv
biBfX2RldGVjdEV2YWwoKSB7CisgICAgICAgIHZhciBjdXJyZW50OworICAgICAgICBjdXJyZW50
ID0gdGhpczsKKyAgICAgICAgdGhpcy5kaXJlY3RDYWxsVG9FdmFsU2NvcGUgPSB0cnVlOworICAg
ICAgICBkbyB7CisgICAgICAgICAgICBjdXJyZW50LmR5bmFtaWMgPSB0cnVlOworICAgICAgICAg
ICAgY3VycmVudCA9IGN1cnJlbnQudXBwZXI7CisgICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpOwor
ICAgIH07CisKKyAgICBTY29wZS5wcm90b3R5cGUuX19kZXRlY3RUaGlzID0gZnVuY3Rpb24gX19k
ZXRlY3RUaGlzKCkgeworICAgICAgICB0aGlzLnRoaXNGb3VuZCA9IHRydWU7CisgICAgfTsKKwor
ICAgIFNjb3BlLnByb3RvdHlwZS5fX2lzQ2xvc2VkID0gZnVuY3Rpb24gaXNDbG9zZWQoKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLmxlZnQgPT09IG51bGw7CisgICAgfTsKKworICAgIC8vIEFQSSBT
Y29wZSNyZXNvbHZlKG5hbWUpCisgICAgLy8gcmV0dXJucyByZXNvbHZlZCByZWZlcmVuY2UKKyAg
ICBTY29wZS5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoaWRlbnQpIHsKKyAg
ICAgICAgdmFyIHJlZiwgaSwgaXo7CisgICAgICAgIGFzc2VydCh0aGlzLl9faXNDbG9zZWQoKSwg
J3Njb3BlIHNob3VsZCBiZSBjbG9zZWQnKTsKKyAgICAgICAgYXNzZXJ0KGlkZW50LnR5cGUgPT09
IFN5bnRheC5JZGVudGlmaWVyLCAndGFyZ2V0IHNob3VsZCBiZSBpZGVudGlmaWVyJyk7CisgICAg
ICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5yZWZlcmVuY2VzLmxlbmd0aDsgaSA8IGl6OyArK2kp
IHsKKyAgICAgICAgICAgIHJlZiA9IHRoaXMucmVmZXJlbmNlc1tpXTsKKyAgICAgICAgICAgIGlm
IChyZWYuaWRlbnRpZmllciA9PT0gaWRlbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVm
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH07
CisKKyAgICAvLyBBUEkgU2NvcGUjaXNTdGF0aWMKKyAgICAvLyByZXR1cm5zIHRoaXMgc2NvcGUg
aXMgc3RhdGljCisgICAgU2NvcGUucHJvdG90eXBlLmlzU3RhdGljID0gZnVuY3Rpb24gaXNTdGF0
aWMoKSB7CisgICAgICAgIHJldHVybiAhdGhpcy5keW5hbWljOworICAgIH07CisKKyAgICAvLyBB
UEkgU2NvcGUjaXNBcmd1bWVudHNNYXRlcmlhbGl6ZWQKKyAgICAvLyByZXR1cm4gdGhpcyBzY29w
ZSBoYXMgbWF0ZXJpYWxpemVkIGFyZ3VtZW50cworICAgIFNjb3BlLnByb3RvdHlwZS5pc0FyZ3Vt
ZW50c01hdGVyaWFsaXplZCA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzTWF0ZXJpYWxpemVkKCkgewor
ICAgICAgICAvLyBUT0RPKENvbnN0ZWxsYXRpb24pCisgICAgICAgIC8vIFdlIGNhbiBtb3JlIGFn
Z3Jlc3NpdmUgb24gdGhpcyBjb25kaXRpb24gbGlrZSB0aGlzLgorICAgICAgICAvLworICAgICAg
ICAvLyBmdW5jdGlvbiB0KCkgeworICAgICAgICAvLyAgICAgLy8gYXJndW1lbnRzIG9mIHQgaXMg
YWx3YXlzIGhpZGRlbi4KKyAgICAgICAgLy8gICAgIGZ1bmN0aW9uIGFyZ3VtZW50cygpIHsKKyAg
ICAgICAgLy8gICAgIH0KKyAgICAgICAgLy8gfQorICAgICAgICB2YXIgdmFyaWFibGU7CisKKyAg
ICAgICAgLy8gVGhpcyBpcyBub3QgZnVuY3Rpb24gc2NvcGUKKyAgICAgICAgaWYgKHRoaXMudHlw
ZSAhPT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIXRoaXMuaXNTdGF0aWMoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICB2YXJpYWJsZSA9IHRoaXMuc2V0LmdldCgnYXJndW1l
bnRzJyk7CisgICAgICAgIGFzc2VydCh2YXJpYWJsZSwgJ2Fsd2F5cyBoYXZlIGFyZ3VtZW50cyB2
YXJpYWJsZScpOworICAgICAgICByZXR1cm4gdmFyaWFibGUudGFpbnRlZCB8fCB2YXJpYWJsZS5y
ZWZlcmVuY2VzLmxlbmd0aCAgIT09IDA7CisgICAgfTsKKworICAgIC8vIEFQSSBTY29wZSNpc1Ro
aXNNYXRlcmlhbGl6ZWQKKyAgICAvLyByZXR1cm4gdGhpcyBzY29wZSBoYXMgbWF0ZXJpYWxpemVk
IGB0aGlzYCByZWZlcmVuY2UKKyAgICBTY29wZS5wcm90b3R5cGUuaXNUaGlzTWF0ZXJpYWxpemVk
ID0gZnVuY3Rpb24gaXNUaGlzTWF0ZXJpYWxpemVkKCkgeworICAgICAgICAvLyBUaGlzIGlzIG5v
dCBmdW5jdGlvbiBzY29wZQorICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnZnVuY3Rpb24nKSB7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMu
aXNTdGF0aWMoKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRoaXMudGhpc0ZvdW5kOworICAgIH07CisKKyAgICBTY29wZS5tYW5nbGVkTmFt
ZSA9ICdfXyRlc2NvcGUkX18nOworCisgICAgU2NvcGUucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0
aW9uIGF0dGFjaCgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3Bl
KSB7CisgICAgICAgICAgICB0aGlzLmJsb2NrW1Njb3BlLm1hbmdsZWROYW1lXSA9IHRoaXM7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLmRldGFjaCA9IGZ1bmN0aW9u
IGRldGFjaCgpIHsKKyAgICAgICAgaWYgKCF0aGlzLmZ1bmN0aW9uRXhwcmVzc2lvblNjb3BlKSB7
CisgICAgICAgICAgICBkZWxldGUgdGhpcy5ibG9ja1tTY29wZS5tYW5nbGVkTmFtZV07CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgU2NvcGUucHJvdG90eXBlLmlzVXNlZE5hbWUgPSBmdW5jdGlv
biAobmFtZSkgeworICAgICAgICBpZiAodGhpcy5zZXQuaGFzKG5hbWUpKSB7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwgaXogPSB0
aGlzLnRocm91Z2gubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
dGhyb3VnaFtpXS5pZGVudGlmaWVyLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBjbGFzcyBTY29wZU1hbmFnZXIKKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBTY29wZU1hbmFnZXIoc2NvcGVzKSB7CisgICAgICAgIHRoaXMuc2Nv
cGVzID0gc2NvcGVzOworICAgICAgICB0aGlzLmF0dGFjaGVkID0gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gUmV0dXJucyBhcHByb3BsaWF0ZSBzY29wZSBmb3IgdGhpcyBub2RlCisgICAgU2NvcGVN
YW5hZ2VyLnByb3RvdHlwZS5fX2dldCA9IGZ1bmN0aW9uIF9fZ2V0KG5vZGUpIHsKKyAgICAgICAg
dmFyIGksIGl6LCBzY29wZTsKKyAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWQpIHsKKyAgICAgICAg
ICAgIHJldHVybiBub2RlW1Njb3BlLm1hbmdsZWROYW1lXSB8fCBudWxsOworICAgICAgICB9Cisg
ICAgICAgIGlmIChTY29wZS5pc1Njb3BlUmVxdWlyZWQobm9kZSkpIHsKKyAgICAgICAgICAgIGZv
ciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAg
ICAgICAgICAgIHNjb3BlID0gdGhpcy5zY29wZXNbaV07CisgICAgICAgICAgICAgICAgaWYgKCFz
Y29wZS5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
c2NvcGUuYmxvY2sgPT09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
Y29wZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9OworCisgICAgU2Nv
cGVNYW5hZ2VyLnByb3RvdHlwZS5hY3F1aXJlID0gZnVuY3Rpb24gYWNxdWlyZShub2RlKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9fZ2V0KG5vZGUpOworICAgIH07CisKKyAgICBTY29wZU1hbmFn
ZXIucHJvdG90eXBlLnJlbGVhc2UgPSBmdW5jdGlvbiByZWxlYXNlKG5vZGUpIHsKKyAgICAgICAg
dmFyIHNjb3BlID0gdGhpcy5fX2dldChub2RlKTsKKyAgICAgICAgaWYgKHNjb3BlKSB7CisgICAg
ICAgICAgICBzY29wZSA9IHNjb3BlLnVwcGVyOworICAgICAgICAgICAgd2hpbGUgKHNjb3BlKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFzY29wZS5mdW5jdGlvbkV4cHJlc3Npb25TY29wZSkgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcGU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHNjb3BlID0gc2NvcGUudXBwZXI7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfTsKKworICAgIFNjb3BlTWFuYWdlci5wcm90
b3R5cGUuYXR0YWNoID0gZnVuY3Rpb24gYXR0YWNoKCkgeworICAgICAgICB2YXIgaSwgaXo7Cisg
ICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkg
eworICAgICAgICAgICAgdGhpcy5zY29wZXNbaV0uYXR0YWNoKCk7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5hdHRhY2hlZCA9IHRydWU7CisgICAgfTsKKworICAgIFNjb3BlTWFuYWdlci5wcm90
b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24gZGV0YWNoKCkgeworICAgICAgICB2YXIgaSwgaXo7Cisg
ICAgICAgIGZvciAoaSA9IDAsIGl6ID0gdGhpcy5zY29wZXMubGVuZ3RoOyBpIDwgaXo7ICsraSkg
eworICAgICAgICAgICAgdGhpcy5zY29wZXNbaV0uZGV0YWNoKCk7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5hdHRhY2hlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBTY29wZS5pc1Njb3BlUmVx
dWlyZWQgPSBmdW5jdGlvbiBpc1Njb3BlUmVxdWlyZWQobm9kZSkgeworICAgICAgICByZXR1cm4g
U2NvcGUuaXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQobm9kZSkgfHwgbm9kZS50eXBlID09PSBTeW50
YXguV2l0aFN0YXRlbWVudCB8fCBub2RlLnR5cGUgPT09IFN5bnRheC5DYXRjaENsYXVzZTsKKyAg
ICB9OworCisgICAgU2NvcGUuaXNWYXJpYWJsZVNjb3BlUmVxdWlyZWQgPSBmdW5jdGlvbiBpc1Zh
cmlhYmxlU2NvcGVSZXF1aXJlZChub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09
IFN5bnRheC5Qcm9ncmFtIHx8IG5vZGUudHlwZSA9PT0gU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lv
biB8fCBub2RlLnR5cGUgPT09IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uOworICAgIH07CisK
KyAgICAvKioKKyAgICAgKiBNYWluIGludGVyZmFjZSBmdW5jdGlvbi4gVGFrZXMgYW4gRXNwcmlt
YSBzeW50YXggdHJlZSBhbmQgcmV0dXJucyB0aGUKKyAgICAgKiBhbmFseXplZCBzY29wZXMuCisg
ICAgICogQGZ1bmN0aW9uIGFuYWx5emUKKyAgICAgKiBAcGFyYW0ge2VzcHJpbWEuVHJlZX0gdHJl
ZQorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm92aWRlZE9wdGlvbnMgLSBPcHRpb25zIHRoYXQg
dGFpbG9yIHRoZSBzY29wZSBhbmFseXNpcworICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Byb3Zp
ZGVkT3B0aW9ucy5vcHRpbWlzdGljPWZhbHNlXSAtIHRoZSBvcHRpbWlzdGljIGZsYWcKKyAgICAg
KiBAcGFyYW0ge2Jvb2xlYW59IFtwcm92aWRlZE9wdGlvbnMuZGlyZWN0aXZlPWZhbHNlXS0gdGhl
IGRpcmVjdGl2ZSBmbGFnCisgICAgICogQHBhcmFtIHtib29sZWFufSBbcHJvdmlkZWRPcHRpb25z
Lmlnbm9yZUV2YWw9ZmFsc2VdLSB3aGV0aGVyIHRvIGNoZWNrICdldmFsKCknIGNhbGxzCisgICAg
ICogQHJldHVybiB7U2NvcGVNYW5hZ2VyfQorICAgICAqLworICAgIGZ1bmN0aW9uIGFuYWx5emUo
dHJlZSwgcHJvdmlkZWRPcHRpb25zKSB7CisgICAgICAgIHZhciByZXN1bHRTY29wZXM7CisKKyAg
ICAgICAgb3B0aW9ucyA9IHVwZGF0ZURlZXBseShkZWZhdWx0T3B0aW9ucygpLCBwcm92aWRlZE9w
dGlvbnMpOworICAgICAgICByZXN1bHRTY29wZXMgPSBzY29wZXMgPSBbXTsKKyAgICAgICAgY3Vy
cmVudFNjb3BlID0gbnVsbDsKKyAgICAgICAgZ2xvYmFsU2NvcGUgPSBudWxsOworCisgICAgICAg
IC8vIGF0dGFjaCBzY29wZSBhbmQgY29sbGVjdCAvIHJlc29sdmUgbmFtZXMKKyAgICAgICAgZXN0
cmF2ZXJzZS50cmF2ZXJzZSh0cmVlLCB7CisgICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24gZW50
ZXIobm9kZSkgeworICAgICAgICAgICAgICAgIHZhciBpLCBpeiwgZGVjbDsKKyAgICAgICAgICAg
ICAgICBpZiAoU2NvcGUuaXNTY29wZVJlcXVpcmVkKG5vZGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG5ldyBTY29wZShub2RlLCB7fSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5B
c3NpZ25tZW50RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0
b3IgPT09ICc9JykgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVm
ZXJlbmNpbmcobm9kZS5sZWZ0LCBSZWZlcmVuY2UuV1JJVEUsIG5vZGUucmlnaHQsICghY3VycmVu
dFNjb3BlLmlzU3RyaWN0ICYmIG5vZGUubGVmdC5uYW1lICE9IG51bGwpICYmIG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5sZWZ0LCBSZWZlcmVuY2UuUlcsIG5vZGUucmlnaHQp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZS5fX3JlZmVyZW5jaW5nKG5vZGUucmlnaHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBub2RlLmVsZW1lbnRzLmxlbmd0aDsgaSA8IGl6
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5j
aW5nKG5vZGUuZWxlbWVudHNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQmxvY2tTdGF0
ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNj
b3BlLl9fcmVmZXJlbmNpbmcobm9kZS5sZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5yaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQnJlYWtTdGF0ZW1lbnQ6CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguQ2Fs
bEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5j
aW5nKG5vZGUuY2FsbGVlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaXogPSBu
b2RlWydhcmd1bWVudHMnXS5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlWydhcmd1bWVudHMnXVtpXSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayB0
aGlzIGlzIGRpcmVjdCBjYWxsIHRvIGV2YWwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRp
b25zLmlnbm9yZUV2YWwgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIg
JiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ2V2YWwnKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50U2NvcGUudmFyaWFibGVTY29wZS5fX2RldGVjdEV2YWwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IGNhc2UgU3ludGF4LkNhdGNoQ2xhdXNlOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuX19kZWZpbmUobm9kZS5wYXJhbSwgeworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTog
VmFyaWFibGUuQ2F0Y2hDbGF1c2UsCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBub2Rl
LnBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZQorICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFN5bnRheC5Db25kaXRpb25hbEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAg
ICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuY29uc2VxdWVudCk7CisgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUuYWx0ZXJuYXRlKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRh
eC5Db250aW51ZVN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgICAgICBjYXNlIFN5bnRheC5EaXJlY3RpdmVTdGF0ZW1lbnQ6CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguRG9XaGlsZVN0YXRl
bWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9k
ZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBj
YXNlIFN5bnRheC5EZWJ1Z2dlclN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5FbXB0eVN0YXRlbWVudDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5FeHByZXNz
aW9uU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVu
Y2luZyhub2RlLmV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgIGNhc2UgU3ludGF4LkZvclN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5pbml0KTsKKyAgICAgICAgICAgICAg
ICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS51cGRhdGUpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkZvcklu
U3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT09IFN5
bnRheC5WYXJpYWJsZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmxlZnQuZGVjbGFyYXRpb25zWzBdLmlkLCBSZWZl
cmVuY2UuV1JJVEUsIG51bGwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUu
bGVmdCwgUmVmZXJlbmNlLldSSVRFLCBudWxsLCAoIWN1cnJlbnRTY29wZS5pc1N0cmljdCAmJiBu
b2RlLmxlZnQubmFtZSAhPSBudWxsKSAmJiBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLnJpZ2h0
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5
bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAvLyBGdW5jdGlv
bkRlY2xhcmF0aW9uIG5hbWUgaXMgZGVmaW5lZCBpbiB1cHBlciBzY29wZQorICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50U2NvcGUudXBwZXIuX19kZWZpbmUobm9kZS5pZCwgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuRnVuY3Rpb25OYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgbmFtZTogbm9kZS5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6
IG5vZGUKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
aSA9IDAsIGl6ID0gbm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW1zW2ldLCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuUGFyYW1ldGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucGFyYW1zW2ldLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXg6IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICAvLyBpZCBp
cyBkZWZpbmVkIGluIHVwcGVyIHNjb3BlCisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAs
IGl6ID0gbm9kZS5wYXJhbXMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudFNjb3BlLl9fZGVmaW5lKG5vZGUucGFyYW1zW2ldLCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZTogVmFyaWFibGUuUGFyYW1ldGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucGFyYW1zW2ldLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGU6IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXg6IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50
YXguSWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICBjYXNlIFN5bnRheC5JZlN0YXRlbWVudDoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS50ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5bnRheC5MaXRlcmFsOgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LkxhYmVsZWRTdGF0
ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2Fz
ZSBTeW50YXguTG9naWNhbEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
Y29wZS5fX3JlZmVyZW5jaW5nKG5vZGUubGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucmlnaHQpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk1lbWJlckV4cHJlc3Npb246Cisg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUub2JqZWN0
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY29tcHV0ZWQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5jaW5nKG5vZGUucHJvcGVydHkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgY2FzZSBTeW50YXguTmV3RXhwcmVzc2lvbjoKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5jYWxsZWUpOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKGkgPSAwLCBpeiA9IG5vZGVbJ2FyZ3VtZW50cyddLmxlbmd0aDsgaSA8IGl6
OyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5fX3JlZmVyZW5j
aW5nKG5vZGVbJ2FyZ3VtZW50cyddW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4Lk9iamVj
dEV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgY2FzZSBTeW50YXguUHJvZ3JhbToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICBjYXNlIFN5bnRheC5Qcm9wZXJ0eToKKyAgICAgICAgICAgICAgICAgICAg
Y3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS52YWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguUmV0dXJuU3RhdGVtZW50
OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmFy
Z3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBj
YXNlIFN5bnRheC5TZXF1ZW5jZUV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgICAgIGZvciAo
aSA9IDAsIGl6ID0gbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmV4cHJl
c3Npb25zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlN3aXRjaFN0YXRlbWVudDoKKyAg
ICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcobm9kZS5kaXNjcmlt
aW5hbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNh
c2UgU3ludGF4LlN3aXRjaENhc2U6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29wZS5f
X3JlZmVyZW5jaW5nKG5vZGUudGVzdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVGhpc0V4cHJlc3Npb246CisgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRTY29wZS52YXJpYWJsZVNjb3BlLl9fZGV0ZWN0VGhpcygpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlRocm93
U3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2lu
Zyhub2RlLmFyZ3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICBjYXNlIFN5bnRheC5UcnlTdGF0ZW1lbnQ6CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVW5hcnlFeHByZXNzaW9uOgorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhub2RlLmFyZ3VtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFN5
bnRheC5VcGRhdGVFeHByZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcGUu
X19yZWZlcmVuY2luZyhub2RlLmFyZ3VtZW50LCBSZWZlcmVuY2UuUlcsIG51bGwpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LlZhcmlh
YmxlRGVjbGFyYXRpb246CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGl6ID0gbm9k
ZS5kZWNsYXJhdGlvbnMubGVuZ3RoOyBpIDwgaXo7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZGVjbCA9IG5vZGUuZGVjbGFyYXRpb25zW2ldOworICAgICAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFNjb3BlLnZhcmlhYmxlU2NvcGUuX19kZWZpbmUoZGVjbC5pZCwgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFZhcmlhYmxlLlZhcmlhYmxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWU6IGRlY2wuaWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZTogZGVjbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG5vZGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wuaW5pdCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIGZvdW5kCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLl9fcmVmZXJlbmNpbmcoZGVjbC5p
ZCwgUmVmZXJlbmNlLldSSVRFLCBkZWNsLmluaXQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U2NvcGUuX19yZWZlcmVuY2luZyhkZWNsLmluaXQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBTeW50YXguVmFyaWFibGVEZWNs
YXJhdG9yOgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNh
c2UgU3ludGF4LldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Nv
cGUuX19yZWZlcmVuY2luZyhub2RlLnRlc3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIGNhc2UgU3ludGF4LldpdGhTdGF0ZW1lbnQ6CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdpdGhTdGF0ZW1lbnQgb2JqZWN0IGlzIHJlZmVyZW5jZWQgYXQgdXBwZXIg
c2NvcGUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3BlLnVwcGVyLl9fcmVmZXJlbmNp
bmcobm9kZS5vYmplY3QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9LAorCisgICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24gbGVh
dmUobm9kZSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50U2NvcGUgJiYgbm9kZSA9
PT0gY3VycmVudFNjb3BlLmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29w
ZS5fX2Nsb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKworICAgICAgICBhc3NlcnQoY3VycmVudFNjb3BlID09PSBudWxsKTsKKyAgICAgICAgZ2xv
YmFsU2NvcGUgPSBudWxsOworICAgICAgICBzY29wZXMgPSBudWxsOworICAgICAgICBvcHRpb25z
ID0gbnVsbDsKKworICAgICAgICByZXR1cm4gbmV3IFNjb3BlTWFuYWdlcihyZXN1bHRTY29wZXMp
OworICAgIH0KKworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLnZlcnNpb24gKi8KKyAgICBl
eHBvcnRzLnZlcnNpb24gPSAnMS4wLjEnOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlJl
ZmVyZW5jZSAqLworICAgIGV4cG9ydHMuUmVmZXJlbmNlID0gUmVmZXJlbmNlOworICAgIC8qKiBA
bmFtZSBtb2R1bGU6ZXNjb3BlLlZhcmlhYmxlICovCisgICAgZXhwb3J0cy5WYXJpYWJsZSA9IFZh
cmlhYmxlOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlNjb3BlICovCisgICAgZXhwb3J0
cy5TY29wZSA9IFNjb3BlOworICAgIC8qKiBAbmFtZSBtb2R1bGU6ZXNjb3BlLlNjb3BlTWFuYWdl
ciAqLworICAgIGV4cG9ydHMuU2NvcGVNYW5hZ2VyID0gU2NvcGVNYW5hZ2VyOworICAgIC8qKiBA
bmFtZSBtb2R1bGU6ZXNjb3BlLmFuYWx5emUgKi8KKyAgICBleHBvcnRzLmFuYWx5emUgPSBhbmFs
eXplOworfSwgdGhpcykpOworLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi8KKwor
fSx7ImVzdHJhdmVyc2UiOjd9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qCisgIENvcHlyaWdodCAoQykgMjAxMyBBcml5YSBIaWRheWF0IDxhcml5YS5oaWRheWF0QGdt
YWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEzIFRoYWRkZWUgVHlsIDx0aGFkZGVlLnR5bEBn
bWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMyBNYXRoaWFzIEJ5bmVucyA8bWF0aGlhc0Bx
aXdpLmJlPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlh
dEBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBNYXRoaWFzIEJ5bmVucyA8bWF0aGlh
c0BxaXdpLmJlPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgSm9vc3QtV2ltIEJvZWtlc3RlaWpuIDxq
b29zdC13aW1AYm9la2VzdGVpam4ubmw+CisgIENvcHlyaWdodCAoQykgMjAxMiBLcmlzIEtvd2Fs
IDxrcmlzLmtvd2FsQGNpeGFyLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFycGFkIEJv
cnNvcyA8YXJwYWQuYm9yc29zQGdvb2dsZW1haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTEg
QXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBnbWFpbC5jb20+CisKKyAgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UyAiQVMgSVMiCisgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFC
TEUgRk9SIEFOWQorICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyovCisKKy8qanNsaW50IGJpdHdpc2U6dHJ1ZSBwbHVzcGx1czp0cnVl
ICovCisvKmdsb2JhbCBlc3ByaW1hOnRydWUsIGRlZmluZTp0cnVlLCBleHBvcnRzOnRydWUsIHdp
bmRvdzogdHJ1ZSwKK3Rocm93RXJyb3JUb2xlcmFudDogdHJ1ZSwKK3Rocm93RXJyb3I6IHRydWUs
IGdlbmVyYXRlU3RhdGVtZW50OiB0cnVlLCBwZWVrOiB0cnVlLAorcGFyc2VBc3NpZ25tZW50RXhw
cmVzc2lvbjogdHJ1ZSwgcGFyc2VCbG9jazogdHJ1ZSwgcGFyc2VFeHByZXNzaW9uOiB0cnVlLAor
cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uOiB0cnVlLCBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbjog
dHJ1ZSwKK3BhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50czogdHJ1ZSwgcGFyc2VWYXJpYWJsZUlk
ZW50aWZpZXI6IHRydWUsCitwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb246IHRydWUsCitwYXJz
ZVVuYXJ5RXhwcmVzc2lvbjogdHJ1ZSwKK3BhcnNlU3RhdGVtZW50OiB0cnVlLCBwYXJzZVNvdXJj
ZUVsZW1lbnQ6IHRydWUgKi8KKworKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7CisgICAgJ3Vz
ZSBzdHJpY3QnOworCisgICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRv
IHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLAorICAgIC8vIFJoaW5vLCBhbmQgcGxhaW4g
YnJvd3NlciBsb2FkaW5nLgorCisgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICBp
ZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CisgICAgICAg
IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSk7CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhw
b3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgZmFjdG9yeShleHBvcnRzKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBmYWN0b3J5KChyb290LmVzcHJpbWEgPSB7fSkpOworICAgIH0KK30o
dGhpcywgZnVuY3Rpb24gKGV4cG9ydHMpIHsKKyAgICAndXNlIHN0cmljdCc7CisKKyAgICB2YXIg
VG9rZW4sCisgICAgICAgIFRva2VuTmFtZSwKKyAgICAgICAgRm5FeHByVG9rZW5zLAorICAgICAg
ICBTeW50YXgsCisgICAgICAgIFByb3BlcnR5S2luZCwKKyAgICAgICAgTWVzc2FnZXMsCisgICAg
ICAgIFJlZ2V4LAorICAgICAgICBTeW50YXhUcmVlRGVsZWdhdGUsCisgICAgICAgIHNvdXJjZSwK
KyAgICAgICAgc3RyaWN0LAorICAgICAgICBpbmRleCwKKyAgICAgICAgbGluZU51bWJlciwKKyAg
ICAgICAgbGluZVN0YXJ0LAorICAgICAgICBsZW5ndGgsCisgICAgICAgIGRlbGVnYXRlLAorICAg
ICAgICBsb29rYWhlYWQsCisgICAgICAgIHN0YXRlLAorICAgICAgICBleHRyYTsKKworICAgIFRv
a2VuID0geworICAgICAgICBCb29sZWFuTGl0ZXJhbDogMSwKKyAgICAgICAgRU9GOiAyLAorICAg
ICAgICBJZGVudGlmaWVyOiAzLAorICAgICAgICBLZXl3b3JkOiA0LAorICAgICAgICBOdWxsTGl0
ZXJhbDogNSwKKyAgICAgICAgTnVtZXJpY0xpdGVyYWw6IDYsCisgICAgICAgIFB1bmN0dWF0b3I6
IDcsCisgICAgICAgIFN0cmluZ0xpdGVyYWw6IDgsCisgICAgICAgIFJlZ3VsYXJFeHByZXNzaW9u
OiA5CisgICAgfTsKKworICAgIFRva2VuTmFtZSA9IHt9OworICAgIFRva2VuTmFtZVtUb2tlbi5C
b29sZWFuTGl0ZXJhbF0gPSAnQm9vbGVhbic7CisgICAgVG9rZW5OYW1lW1Rva2VuLkVPRl0gPSAn
PGVuZD4nOworICAgIFRva2VuTmFtZVtUb2tlbi5JZGVudGlmaWVyXSA9ICdJZGVudGlmaWVyJzsK
KyAgICBUb2tlbk5hbWVbVG9rZW4uS2V5d29yZF0gPSAnS2V5d29yZCc7CisgICAgVG9rZW5OYW1l
W1Rva2VuLk51bGxMaXRlcmFsXSA9ICdOdWxsJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uTnVtZXJp
Y0xpdGVyYWxdID0gJ051bWVyaWMnOworICAgIFRva2VuTmFtZVtUb2tlbi5QdW5jdHVhdG9yXSA9
ICdQdW5jdHVhdG9yJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uU3RyaW5nTGl0ZXJhbF0gPSAnU3Ry
aW5nJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uUmVndWxhckV4cHJlc3Npb25dID0gJ1JlZ3VsYXJF
eHByZXNzaW9uJzsKKworICAgIC8vIEEgZnVuY3Rpb24gZm9sbG93aW5nIG9uZSBvZiB0aG9zZSB0
b2tlbnMgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICBGbkV4cHJUb2tlbnMgPSBbJygnLCAneycsICdb
JywgJ2luJywgJ3R5cGVvZicsICdpbnN0YW5jZW9mJywgJ25ldycsCisgICAgICAgICAgICAgICAg
ICAgICdyZXR1cm4nLCAnY2FzZScsICdkZWxldGUnLCAndGhyb3cnLCAndm9pZCcsCisgICAgICAg
ICAgICAgICAgICAgIC8vIGFzc2lnbm1lbnQgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAgICAg
ICc9JywgJys9JywgJy09JywgJyo9JywgJy89JywgJyU9JywgJzw8PScsICc+Pj0nLCAnPj4+PScs
CisgICAgICAgICAgICAgICAgICAgICcmPScsICd8PScsICdePScsICcsJywKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYmluYXJ5L3VuYXJ5IG9wZXJhdG9ycworICAgICAgICAgICAgICAgICAgICAn
KycsICctJywgJyonLCAnLycsICclJywgJysrJywgJy0tJywgJzw8JywgJz4+JywgJz4+PicsICcm
JywKKyAgICAgICAgICAgICAgICAgICAgJ3wnLCAnXicsICchJywgJ34nLCAnJiYnLCAnfHwnLCAn
PycsICc6JywgJz09PScsICc9PScsICc+PScsCisgICAgICAgICAgICAgICAgICAgICc8PScsICc8
JywgJz4nLCAnIT0nLCAnIT09J107CisKKyAgICBTeW50YXggPSB7CisgICAgICAgIEFzc2lnbm1l
bnRFeHByZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAgICAgICBBcnJheUV4cHJl
c3Npb246ICdBcnJheUV4cHJlc3Npb24nLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2Nr
U3RhdGVtZW50JywKKyAgICAgICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24n
LAorICAgICAgICBCcmVha1N0YXRlbWVudDogJ0JyZWFrU3RhdGVtZW50JywKKyAgICAgICAgQ2Fs
bEV4cHJlc3Npb246ICdDYWxsRXhwcmVzc2lvbicsCisgICAgICAgIENhdGNoQ2xhdXNlOiAnQ2F0
Y2hDbGF1c2UnLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246ICdDb25kaXRpb25hbEV4
cHJlc3Npb24nLAorICAgICAgICBDb250aW51ZVN0YXRlbWVudDogJ0NvbnRpbnVlU3RhdGVtZW50
JywKKyAgICAgICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAorICAgICAg
ICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVtZW50JywKKyAgICAgICAgRW1wdHlT
dGF0ZW1lbnQ6ICdFbXB0eVN0YXRlbWVudCcsCisgICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6
ICdFeHByZXNzaW9uU3RhdGVtZW50JywKKyAgICAgICAgRm9yU3RhdGVtZW50OiAnRm9yU3RhdGVt
ZW50JywKKyAgICAgICAgRm9ySW5TdGF0ZW1lbnQ6ICdGb3JJblN0YXRlbWVudCcsCisgICAgICAg
IEZ1bmN0aW9uRGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKKyAgICAgICAgRnVu
Y3Rpb25FeHByZXNzaW9uOiAnRnVuY3Rpb25FeHByZXNzaW9uJywKKyAgICAgICAgSWRlbnRpZmll
cjogJ0lkZW50aWZpZXInLAorICAgICAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywKKyAg
ICAgICAgTGl0ZXJhbDogJ0xpdGVyYWwnLAorICAgICAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFi
ZWxlZFN0YXRlbWVudCcsCisgICAgICAgIExvZ2ljYWxFeHByZXNzaW9uOiAnTG9naWNhbEV4cHJl
c3Npb24nLAorICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiAnTWVtYmVyRXhwcmVzc2lvbicsCisg
ICAgICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0RXhw
cmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBQcm9ncmFtOiAnUHJvZ3JhbScs
CisgICAgICAgIFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgICAgICBSZXR1cm5TdGF0ZW1lbnQ6
ICdSZXR1cm5TdGF0ZW1lbnQnLAorICAgICAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5j
ZUV4cHJlc3Npb24nLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6ICdTd2l0Y2hTdGF0ZW1lbnQn
LAorICAgICAgICBTd2l0Y2hDYXNlOiAnU3dpdGNoQ2FzZScsCisgICAgICAgIFRoaXNFeHByZXNz
aW9uOiAnVGhpc0V4cHJlc3Npb24nLAorICAgICAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3Rh
dGVtZW50JywKKyAgICAgICAgVHJ5U3RhdGVtZW50OiAnVHJ5U3RhdGVtZW50JywKKyAgICAgICAg
VW5hcnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICAgICAgVXBkYXRlRXhwcmVz
c2lvbjogJ1VwZGF0ZUV4cHJlc3Npb24nLAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiAn
VmFyaWFibGVEZWNsYXJhdGlvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1Zhcmlh
YmxlRGVjbGFyYXRvcicsCisgICAgICAgIFdoaWxlU3RhdGVtZW50OiAnV2hpbGVTdGF0ZW1lbnQn
LAorICAgICAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcKKyAgICB9OworCisgICAg
UHJvcGVydHlLaW5kID0geworICAgICAgICBEYXRhOiAxLAorICAgICAgICBHZXQ6IDIsCisgICAg
ICAgIFNldDogNAorICAgIH07CisKKyAgICAvLyBFcnJvciBtZXNzYWdlcyBzaG91bGQgYmUgaWRl
bnRpY2FsIHRvIFY4LgorICAgIE1lc3NhZ2VzID0geworICAgICAgICBVbmV4cGVjdGVkVG9rZW46
ICAnVW5leHBlY3RlZCB0b2tlbiAlMCcsCisgICAgICAgIFVuZXhwZWN0ZWROdW1iZXI6ICAnVW5l
eHBlY3RlZCBudW1iZXInLAorICAgICAgICBVbmV4cGVjdGVkU3RyaW5nOiAgJ1VuZXhwZWN0ZWQg
c3RyaW5nJywKKyAgICAgICAgVW5leHBlY3RlZElkZW50aWZpZXI6ICAnVW5leHBlY3RlZCBpZGVu
dGlmaWVyJywKKyAgICAgICAgVW5leHBlY3RlZFJlc2VydmVkOiAgJ1VuZXhwZWN0ZWQgcmVzZXJ2
ZWQgd29yZCcsCisgICAgICAgIFVuZXhwZWN0ZWRFT1M6ICAnVW5leHBlY3RlZCBlbmQgb2YgaW5w
dXQnLAorICAgICAgICBOZXdsaW5lQWZ0ZXJUaHJvdzogICdJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIg
dGhyb3cnLAorICAgICAgICBJbnZhbGlkUmVnRXhwOiAnSW52YWxpZCByZWd1bGFyIGV4cHJlc3Np
b24nLAorICAgICAgICBVbnRlcm1pbmF0ZWRSZWdFeHA6ICAnSW52YWxpZCByZWd1bGFyIGV4cHJl
c3Npb246IG1pc3NpbmcgLycsCisgICAgICAgIEludmFsaWRMSFNJbkFzc2lnbm1lbnQ6ICAnSW52
YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBhc3NpZ25tZW50JywKKyAgICAgICAgSW52YWxpZExIU0lu
Rm9ySW46ICAnSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItaW4nLAorICAgICAgICBNdWx0
aXBsZURlZmF1bHRzSW5Td2l0Y2g6ICdNb3JlIHRoYW4gb25lIGRlZmF1bHQgY2xhdXNlIGluIHN3
aXRjaCBzdGF0ZW1lbnQnLAorICAgICAgICBOb0NhdGNoT3JGaW5hbGx5OiAgJ01pc3NpbmcgY2F0
Y2ggb3IgZmluYWxseSBhZnRlciB0cnknLAorICAgICAgICBVbmtub3duTGFiZWw6ICdVbmRlZmlu
ZWQgbGFiZWwgXCclMFwnJywKKyAgICAgICAgUmVkZWNsYXJhdGlvbjogJyUwIFwnJTFcJyBoYXMg
YWxyZWFkeSBiZWVuIGRlY2xhcmVkJywKKyAgICAgICAgSWxsZWdhbENvbnRpbnVlOiAnSWxsZWdh
bCBjb250aW51ZSBzdGF0ZW1lbnQnLAorICAgICAgICBJbGxlZ2FsQnJlYWs6ICdJbGxlZ2FsIGJy
ZWFrIHN0YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxSZXR1cm46ICdJbGxlZ2FsIHJldHVybiBz
dGF0ZW1lbnQnLAorICAgICAgICBTdHJpY3RNb2RlV2l0aDogICdTdHJpY3QgbW9kZSBjb2RlIG1h
eSBub3QgaW5jbHVkZSBhIHdpdGggc3RhdGVtZW50JywKKyAgICAgICAgU3RyaWN0Q2F0Y2hWYXJp
YWJsZTogICdDYXRjaCB2YXJpYWJsZSBtYXkgbm90IGJlIGV2YWwgb3IgYXJndW1lbnRzIGluIHN0
cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0VmFyTmFtZTogICdWYXJpYWJsZSBuYW1lIG1heSBu
b3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQ
YXJhbU5hbWU6ICAnUGFyYW1ldGVyIG5hbWUgZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFsbG93
ZWQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RQYXJhbUR1cGU6ICdTdHJpY3QgbW9k
ZSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcycsCisgICAg
ICAgIFN0cmljdEZ1bmN0aW9uTmFtZTogICdGdW5jdGlvbiBuYW1lIG1heSBub3QgYmUgZXZhbCBv
ciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RPY3RhbExpdGVyYWw6
ICAnT2N0YWwgbGl0ZXJhbHMgYXJlIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlLicsCisgICAg
ICAgIFN0cmljdERlbGV0ZTogICdEZWxldGUgb2YgYW4gdW5xdWFsaWZpZWQgaWRlbnRpZmllciBp
biBzdHJpY3QgbW9kZS4nLAorICAgICAgICBTdHJpY3REdXBsaWNhdGVQcm9wZXJ0eTogICdEdXBs
aWNhdGUgZGF0YSBwcm9wZXJ0eSBpbiBvYmplY3QgbGl0ZXJhbCBub3QgYWxsb3dlZCBpbiBzdHJp
Y3QgbW9kZScsCisgICAgICAgIEFjY2Vzc29yRGF0YVByb3BlcnR5OiAgJ09iamVjdCBsaXRlcmFs
IG1heSBub3QgaGF2ZSBkYXRhIGFuZCBhY2Nlc3NvciBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5h
bWUnLAorICAgICAgICBBY2Nlc3NvckdldFNldDogICdPYmplY3QgbGl0ZXJhbCBtYXkgbm90IGhh
dmUgbXVsdGlwbGUgZ2V0L3NldCBhY2Nlc3NvcnMgd2l0aCB0aGUgc2FtZSBuYW1lJywKKyAgICAg
ICAgU3RyaWN0TEhTQXNzaWdubWVudDogICdBc3NpZ25tZW50IHRvIGV2YWwgb3IgYXJndW1lbnRz
IGlzIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywKKyAgICAgICAgU3RyaWN0TEhTUG9zdGZp
eDogICdQb3N0Zml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJn
dW1lbnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RMSFNQcmVmaXg6
ICAnUHJlZml4IGluY3JlbWVudC9kZWNyZW1lbnQgbWF5IG5vdCBoYXZlIGV2YWwgb3IgYXJndW1l
bnRzIG9wZXJhbmQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RSZXNlcnZlZFdvcmQ6
ICAnVXNlIG9mIGZ1dHVyZSByZXNlcnZlZCB3b3JkIGluIHN0cmljdCBtb2RlJworICAgIH07CisK
KyAgICAvLyBTZWUgYWxzbyB0b29scy9nZW5lcmF0ZS11bmljb2RlLXJlZ2V4LnB5LgorICAgIFJl
Z2V4ID0geworICAgICAgICBOb25Bc2NpaUlkZW50aWZpZXJTdGFydDogbmV3IFJlZ0V4cCgnW1x4
QUFceEI1XHhCQVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJF
MC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3
RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNG
Ny1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1
RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUw
NkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcx
MFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQVx1MDdGNFx1MDdG
NVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEw
XHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcx
LVx1MDk3N1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlB
OFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOURE
XHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMt
XHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1
MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFc
dTBBOTMtXHUwQUE4XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRc
dTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1
MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUw
QjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1
MEI5NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBC
QUFcdTBCQUUtXHUwQkI5XHUwQkQwXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUw
QzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RcdTBDNThcdTBDNTlcdTBDNjBcdTBD
NjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXHUw
Q0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBE
MENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3
QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBE
QzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFcdTBF
ODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5
Rlx1MEVBMS1cdTBFQTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIy
XHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAt
XHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGXHUxMDUw
LVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1
LVx1MTA4MVx1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZD
LVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2
MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1cdTEyQjVcdTEyQjgtXHUx
MkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXHUxMzEyLVx1
MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNc
dTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkYwXHUxNzAw
LVx1MTcwQ1x1MTcwRS1cdTE3MTFcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3
NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4
ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNcdTE5NTAtXHUxOTZEXHUx
OTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNlx1MUEyMC1c
dTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVc
dTFCQUZcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdE
XHUxQ0U5LVx1MUNFQ1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAw
LVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFG
NTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFG
QkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNcdTFGRDYtXHUx
RkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXHUy
MDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUy
MTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUy
MTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJDMDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1
MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0VFXHUyQ0YyXHUyQ0YzXHUyRDAwLVx1MkQyNVx1MkQyN1x1
MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEODAtXHUyRDk2XHUyREEwLVx1MkRBNlx1MkRBOC1c
dTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZcdTJEQzgtXHUyRENF
XHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJFMkZcdTMwMDUtXHUzMDA3XHUzMDIxLVx1MzAy
OVx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1MzA5RC1cdTMwOUZcdTMw
QTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1
MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0OENc
dUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MUZcdUE2MkFcdUE2MkJcdUE2NDAt
XHVBNjZFXHVBNjdGLVx1QTY5N1x1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4
OFx1QTc4Qi1cdUE3OEVcdUE3OTAtXHVBNzkzXHVBN0EwLVx1QTdBQVx1QTdGOC1cdUE4MDFcdUE4
MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4NDAtXHVBODczXHVBODgyLVx1
QThCM1x1QThGMi1cdUE4RjdcdUE4RkJcdUE5MEEtXHVBOTI1XHVBOTMwLVx1QTk0Nlx1QTk2MC1c
dUE5N0NcdUE5ODQtXHVBOUIyXHVBOUNGXHVBQTAwLVx1QUEyOFx1QUE0MC1cdUFBNDJcdUFBNDQt
XHVBQTRCXHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE4MC1cdUFBQUZcdUFBQjFcdUFBQjVcdUFBQjZc
dUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjIt
XHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIy
Nlx1QUIyOC1cdUFCMkVcdUFCQzAtXHVBQkUyXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3
Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1
RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1
RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1
RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNc
dUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVcdUZGQzItXHVGRkM3XHVGRkNB
LVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXScpLAorICAgICAgICBOb25Bc2NpaUlk
ZW50aWZpZXJQYXJ0OiBuZXcgUmVnRXhwKCdbXHhBQVx4QjVceEJBXHhDMC1ceEQ2XHhEOC1ceEY2
XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1MDJFQ1x1MDJFRVx1MDMwMC1c
dTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzg2XHUwMzg4LVx1MDM4QVx1MDM4Q1x1
MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1MDQ4My1cdTA0ODdcdTA0OEEt
XHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1OTEtXHUwNUJEXHUwNUJG
XHUwNUMxXHUwNUMyXHUwNUM0XHUwNUM1XHUwNUM3XHUwNUQwLVx1MDVFQVx1MDVGMC1cdTA1RjJc
dTA2MTAtXHUwNjFBXHUwNjIwLVx1MDY2OVx1MDY2RS1cdTA2RDNcdTA2RDUtXHUwNkRDXHUwNkRG
LVx1MDZFOFx1MDZFQS1cdTA2RkNcdTA2RkZcdTA3MTAtXHUwNzRBXHUwNzRELVx1MDdCMVx1MDdD
MC1cdTA3RjVcdTA3RkFcdTA4MDAtXHUwODJEXHUwODQwLVx1MDg1Qlx1MDhBMFx1MDhBMi1cdTA4
QUNcdTA4RTQtXHUwOEZFXHUwOTAwLVx1MDk2M1x1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTc3XHUw
OTc5LVx1MDk3Rlx1MDk4MS1cdTA5ODNcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1
MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJcdTA5QjYtXHUwOUI5XHUwOUJDLVx1MDlDNFx1MDlDN1x1
MDlDOFx1MDlDQi1cdTA5Q0VcdTA5RDdcdTA5RENcdTA5RERcdTA5REYtXHUwOUUzXHUwOUU2LVx1
MDlGMVx1MEEwMS1cdTBBMDNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1
MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzlcdTBBM0NcdTBB
M0UtXHUwQTQyXHUwQTQ3XHUwQTQ4XHUwQTRCLVx1MEE0RFx1MEE1MVx1MEE1OS1cdTBBNUNcdTBB
NUVcdTBBNjYtXHUwQTc1XHUwQTgxLVx1MEE4M1x1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUw
QTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJDLVx1
MEFDNVx1MEFDNy1cdTBBQzlcdTBBQ0ItXHUwQUNEXHUwQUQwXHUwQUUwLVx1MEFFM1x1MEFFNi1c
dTBBRUZcdTBCMDEtXHUwQjAzXHUwQjA1LVx1MEIwQ1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhc
dTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzQy1cdTBCNDRcdTBCNDdc
dTBCNDhcdTBCNEItXHUwQjREXHUwQjU2XHUwQjU3XHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2M1x1
MEI2Ni1cdTBCNkZcdTBCNzFcdTBCODJcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1
MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBC
QTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJCRS1cdTBCQzJcdTBCQzYtXHUwQkM4XHUwQkNBLVx1
MEJDRFx1MEJEMFx1MEJEN1x1MEJFNi1cdTBCRUZcdTBDMDEtXHUwQzAzXHUwQzA1LVx1MEMwQ1x1
MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0Qt
XHUwQzQ0XHUwQzQ2LVx1MEM0OFx1MEM0QS1cdTBDNERcdTBDNTVcdTBDNTZcdTBDNThcdTBDNTlc
dTBDNjAtXHUwQzYzXHUwQzY2LVx1MEM2Rlx1MEM4Mlx1MEM4M1x1MEM4NS1cdTBDOENcdTBDOEUt
XHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JDLVx1MEND
NFx1MENDNi1cdTBDQzhcdTBDQ0EtXHUwQ0NEXHUwQ0Q1XHUwQ0Q2XHUwQ0RFXHUwQ0UwLVx1MENF
M1x1MENFNi1cdTBDRUZcdTBDRjFcdTBDRjJcdTBEMDJcdTBEMDNcdTBEMDUtXHUwRDBDXHUwRDBF
LVx1MEQxMFx1MEQxMi1cdTBEM0FcdTBEM0QtXHUwRDQ0XHUwRDQ2LVx1MEQ0OFx1MEQ0QS1cdTBE
NEVcdTBENTdcdTBENjAtXHUwRDYzXHUwRDY2LVx1MEQ2Rlx1MEQ3QS1cdTBEN0ZcdTBEODJcdTBE
ODNcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUw
REM2XHUwRENBXHUwRENGLVx1MERENFx1MERENlx1MEREOC1cdTBEREZcdTBERjJcdTBERjNcdTBF
MDEtXHUwRTNBXHUwRTQwLVx1MEU0RVx1MEU1MC1cdTBFNTlcdTBFODFcdTBFODJcdTBFODRcdTBF
ODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBF
QTNcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUI5XHUwRUJCLVx1MEVCRFx1MEVD
MC1cdTBFQzRcdTBFQzZcdTBFQzgtXHUwRUNEXHUwRUQwLVx1MEVEOVx1MEVEQy1cdTBFREZcdTBG
MDBcdTBGMThcdTBGMTlcdTBGMjAtXHUwRjI5XHUwRjM1XHUwRjM3XHUwRjM5XHUwRjNFLVx1MEY0
N1x1MEY0OS1cdTBGNkNcdTBGNzEtXHUwRjg0XHUwRjg2LVx1MEY5N1x1MEY5OS1cdTBGQkNcdTBG
QzZcdTEwMDAtXHUxMDQ5XHUxMDUwLVx1MTA5RFx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEw
RDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERcdTEyNTAtXHUxMjU2XHUxMjU4XHUx
MjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMFx1MTJCMi1c
dTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgt
XHUxMzEwXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzNUQtXHUxMzVGXHUxMzgwLVx1MTM4
Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2
QTAtXHUxNkVBXHUxNkVFLVx1MTZGMFx1MTcwMC1cdTE3MENcdTE3MEUtXHUxNzE0XHUxNzIwLVx1
MTczNFx1MTc0MC1cdTE3NTNcdTE3NjAtXHUxNzZDXHUxNzZFLVx1MTc3MFx1MTc3Mlx1MTc3M1x1
MTc4MC1cdTE3RDNcdTE3RDdcdTE3RENcdTE3RERcdTE3RTAtXHUxN0U5XHUxODBCLVx1MTgwRFx1
MTgxMC1cdTE4MTlcdTE4MjAtXHUxODc3XHUxODgwLVx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAt
XHUxOTFDXHUxOTIwLVx1MTkyQlx1MTkzMC1cdTE5M0JcdTE5NDYtXHUxOTZEXHUxOTcwLVx1MTk3
NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQwLVx1MTlEOVx1MUEwMC1cdTFBMUJcdTFB
MjAtXHUxQTVFXHUxQTYwLVx1MUE3Q1x1MUE3Ri1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3XHUx
QjAwLVx1MUI0Qlx1MUI1MC1cdTFCNTlcdTFCNkItXHUxQjczXHUxQjgwLVx1MUJGM1x1MUMwMC1c
dTFDMzdcdTFDNDAtXHUxQzQ5XHUxQzRELVx1MUM3RFx1MUNEMC1cdTFDRDJcdTFDRDQtXHUxQ0Y2
XHUxRDAwLVx1MURFNlx1MURGQy1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0
OC1cdTFGNERcdTFGNTAtXHUxRjU3XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4
MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFG
RDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1
MUZGQ1x1MjAwQ1x1MjAwRFx1MjAzRlx1MjA0MFx1MjA1NFx1MjA3MVx1MjA3Rlx1MjA5MC1cdTIw
OUNcdTIwRDAtXHUyMERDXHUyMEUxXHUyMEU1LVx1MjBGMFx1MjEwMlx1MjEwN1x1MjEwQS1cdTIx
MTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEy
Ri1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE2MC1cdTIxODhcdTJD
MDAtXHUyQzJFXHUyQzMwLVx1MkM1RVx1MkM2MC1cdTJDRTRcdTJDRUItXHUyQ0YzXHUyRDAwLVx1
MkQyNVx1MkQyN1x1MkQyRFx1MkQzMC1cdTJENjdcdTJENkZcdTJEN0YtXHUyRDk2XHUyREEwLVx1
MkRBNlx1MkRBOC1cdTJEQUVcdTJEQjAtXHUyREI2XHUyREI4LVx1MkRCRVx1MkRDMC1cdTJEQzZc
dTJEQzgtXHUyRENFXHUyREQwLVx1MkRENlx1MkREOC1cdTJEREVcdTJERTAtXHUyREZGXHUyRTJG
XHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMkZcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0
MS1cdTMwOTZcdTMwOTlcdTMwOUFcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMw
RkZcdTMxMDUtXHUzMTJEXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUz
NDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1c
dUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2Rlx1QTY3NC1cdUE2N0RcdUE2N0YtXHVBNjk3
XHVBNjlGLVx1QTZGMVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1QTc4RVx1QTc5
MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgyN1x1QTg0MC1cdUE4NzNcdUE4ODAtXHVB
OEM0XHVBOEQwLVx1QThEOVx1QThFMC1cdUE4RjdcdUE4RkJcdUE5MDAtXHVBOTJEXHVBOTMwLVx1
QTk1M1x1QTk2MC1cdUE5N0NcdUE5ODAtXHVBOUMwXHVBOUNGLVx1QTlEOVx1QUEwMC1cdUFBMzZc
dUFBNDAtXHVBQTREXHVBQTUwLVx1QUE1OVx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBN0JcdUFBODAt
XHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUZcdUFBRjItXHVBQUY2XHVBQjAxLVx1QUIw
Nlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFC
QzAtXHVBQkVBXHVBQkVDXHVBQkVEXHVBQkYwLVx1QUJGOVx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVE
N0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1
RkIxMy1cdUZCMTdcdUZCMUQtXHVGQjI4XHVGQjJBLVx1RkIzNlx1RkIzOC1cdUZCM0NcdUZCM0Vc
dUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRFx1RkQ1MC1c
dUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkUwMC1cdUZFMEZcdUZFMjAtXHVGRTI2
XHVGRTMzXHVGRTM0XHVGRTRELVx1RkU0Rlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXHVGRjEw
LVx1RkYxOVx1RkYyMS1cdUZGM0FcdUZGM0ZcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZD
Mi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdJykKKyAgICB9
OworCisgICAgLy8gRW5zdXJlIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIHRocm93
IGFuIGVycm9yLgorICAgIC8vIFRoaXMgaXMgb25seSB0byBoYXZlIGEgYmV0dGVyIGNvbnRyYWN0
IHNlbWFudGljLCBpLmUuIGFub3RoZXIgc2FmZXR5IG5ldAorICAgIC8vIHRvIGNhdGNoIGEgbG9n
aWMgZXJyb3IuIFRoZSBjb25kaXRpb24gc2hhbGwgYmUgZnVsZmlsbGVkIGluIG5vcm1hbCBjYXNl
LgorICAgIC8vIERvIE5PVCB1c2UgdGhpcyB0byBlbmZvcmNlIGEgY2VydGFpbiBjb25kaXRpb24g
b24gYW55IHVzZXIgaW5wdXQuCisKKyAgICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNz
YWdlKSB7CisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLworICAgICAgICBpZiAoIWNv
bmRpdGlvbikgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBU1NFUlQ6ICcgKyBtZXNz
YWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzRGVjaW1hbERpZ2l0KGNo
KSB7CisgICAgICAgIHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0gNTcpOyAgIC8vIDAuLjkKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBpc0hleERpZ2l0KGNoKSB7CisgICAgICAgIHJldHVybiAnMDEy
MzQ1Njc4OWFiY2RlZkFCQ0RFRicuaW5kZXhPZihjaCkgPj0gMDsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBpc09jdGFsRGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2NycuaW5kZXhP
ZihjaCkgPj0gMDsKKyAgICB9CisKKworICAgIC8vIDcuMiBXaGl0ZSBTcGFjZQorCisgICAgZnVu
Y3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7CisgICAgICAgIHJldHVybiAoY2ggPT09IDB4MjApIHx8
IChjaCA9PT0gMHgwOSkgfHwgKGNoID09PSAweDBCKSB8fCAoY2ggPT09IDB4MEMpIHx8IChjaCA9
PT0gMHhBMCkgfHwKKyAgICAgICAgICAgIChjaCA+PSAweDE2ODAgJiYgWzB4MTY4MCwgMHgxODBF
LCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCAweDIwMDYs
IDB4MjAwNywgMHgyMDA4LCAweDIwMDksIDB4MjAwQSwgMHgyMDJGLCAweDIwNUYsIDB4MzAwMCwg
MHhGRUZGXS5pbmRleE9mKGNoKSA+PSAwKTsKKyAgICB9CisKKyAgICAvLyA3LjMgTGluZSBUZXJt
aW5hdG9ycworCisgICAgZnVuY3Rpb24gaXNMaW5lVGVybWluYXRvcihjaCkgeworICAgICAgICBy
ZXR1cm4gKGNoID09PSAweDBBKSB8fCAoY2ggPT09IDB4MEQpIHx8IChjaCA9PT0gMHgyMDI4KSB8
fCAoY2ggPT09IDB4MjAyOSk7CisgICAgfQorCisgICAgLy8gNy42IElkZW50aWZpZXIgTmFtZXMg
YW5kIElkZW50aWZpZXJzCisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaCkgewor
ICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8ICAvLyAkIChk
b2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDB4NDEgJiYgY2gg
PD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0gMHg2MSAmJiBj
aCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA9PT0gMHg1Qykg
fHwgICAgICAgICAgICAgICAgICAgICAgLy8gXCAoYmFja3NsYXNoKQorICAgICAgICAgICAgKChj
aCA+PSAweDgwKSAmJiBSZWdleC5Ob25Bc2NpaUlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5m
cm9tQ2hhckNvZGUoY2gpKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFy
dChjaCkgeworICAgICAgICByZXR1cm4gKGNoID09PSAweDI0KSB8fCAoY2ggPT09IDB4NUYpIHx8
ICAvLyAkIChkb2xsYXIpIGFuZCBfICh1bmRlcnNjb3JlKQorICAgICAgICAgICAgKGNoID49IDB4
NDEgJiYgY2ggPD0gMHg1QSkgfHwgICAgICAgICAvLyBBLi5aCisgICAgICAgICAgICAoY2ggPj0g
MHg2MSAmJiBjaCA8PSAweDdBKSB8fCAgICAgICAgIC8vIGEuLnoKKyAgICAgICAgICAgIChjaCA+
PSAweDMwICYmIGNoIDw9IDB4MzkpIHx8ICAgICAgICAgLy8gMC4uOQorICAgICAgICAgICAgKGNo
ID09PSAweDVDKSB8fCAgICAgICAgICAgICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCisgICAg
ICAgICAgICAoKGNoID49IDB4ODApICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclBhcnQudGVz
dChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpOworICAgIH0KKworICAgIC8vIDcuNi4xLjIgRnV0
dXJlIFJlc2VydmVkIFdvcmRzCisKKyAgICBmdW5jdGlvbiBpc0Z1dHVyZVJlc2VydmVkV29yZChp
ZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2UgJ2NsYXNzJzoKKyAgICAg
ICAgY2FzZSAnZW51bSc6CisgICAgICAgIGNhc2UgJ2V4cG9ydCc6CisgICAgICAgIGNhc2UgJ2V4
dGVuZHMnOgorICAgICAgICBjYXNlICdpbXBvcnQnOgorICAgICAgICBjYXNlICdzdXBlcic6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0TW9k
ZVJlc2VydmVkV29yZChpZCkgeworICAgICAgICBzd2l0Y2ggKGlkKSB7CisgICAgICAgIGNhc2Ug
J2ltcGxlbWVudHMnOgorICAgICAgICBjYXNlICdpbnRlcmZhY2UnOgorICAgICAgICBjYXNlICdw
YWNrYWdlJzoKKyAgICAgICAgY2FzZSAncHJpdmF0ZSc6CisgICAgICAgIGNhc2UgJ3Byb3RlY3Rl
ZCc6CisgICAgICAgIGNhc2UgJ3B1YmxpYyc6CisgICAgICAgIGNhc2UgJ3N0YXRpYyc6CisgICAg
ICAgIGNhc2UgJ3lpZWxkJzoKKyAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNSZXN0cmljdGVkV29yZChpZCkgeworICAg
ICAgICByZXR1cm4gaWQgPT09ICdldmFsJyB8fCBpZCA9PT0gJ2FyZ3VtZW50cyc7CisgICAgfQor
CisgICAgLy8gNy42LjEuMSBLZXl3b3JkcworCisgICAgZnVuY3Rpb24gaXNLZXl3b3JkKGlkKSB7
CisgICAgICAgIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKGlkKSkgewor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyAnY29uc3Qn
IGlzIHNwZWNpYWxpemVkIGFzIEtleXdvcmQgaW4gVjguCisgICAgICAgIC8vICd5aWVsZCcgYW5k
ICdsZXQnIGFyZSBmb3IgY29tcGF0aWJsaXR5IHdpdGggU3BpZGVyTW9ua2V5IGFuZCBFUy5uZXh0
LgorICAgICAgICAvLyBTb21lIG90aGVycyBhcmUgZnJvbSBmdXR1cmUgcmVzZXJ2ZWQgd29yZHMu
CisKKyAgICAgICAgc3dpdGNoIChpZC5sZW5ndGgpIHsKKyAgICAgICAgY2FzZSAyOgorICAgICAg
ICAgICAgcmV0dXJuIChpZCA9PT0gJ2lmJykgfHwgKGlkID09PSAnaW4nKSB8fCAoaWQgPT09ICdk
bycpOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICByZXR1cm4gKGlkID09PSAndmFyJykg
fHwgKGlkID09PSAnZm9yJykgfHwgKGlkID09PSAnbmV3JykgfHwKKyAgICAgICAgICAgICAgICAo
aWQgPT09ICd0cnknKSB8fCAoaWQgPT09ICdsZXQnKTsKKyAgICAgICAgY2FzZSA0OgorICAgICAg
ICAgICAgcmV0dXJuIChpZCA9PT0gJ3RoaXMnKSB8fCAoaWQgPT09ICdlbHNlJykgfHwgKGlkID09
PSAnY2FzZScpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAndm9pZCcpIHx8IChpZCA9PT0g
J3dpdGgnKSB8fCAoaWQgPT09ICdlbnVtJyk7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAg
IHJldHVybiAoaWQgPT09ICd3aGlsZScpIHx8IChpZCA9PT0gJ2JyZWFrJykgfHwgKGlkID09PSAn
Y2F0Y2gnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Rocm93JykgfHwgKGlkID09PSAn
Y29uc3QnKSB8fCAoaWQgPT09ICd5aWVsZCcpIHx8CisgICAgICAgICAgICAgICAgKGlkID09PSAn
Y2xhc3MnKSB8fCAoaWQgPT09ICdzdXBlcicpOworICAgICAgICBjYXNlIDY6CisgICAgICAgICAg
ICByZXR1cm4gKGlkID09PSAncmV0dXJuJykgfHwgKGlkID09PSAndHlwZW9mJykgfHwgKGlkID09
PSAnZGVsZXRlJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICdzd2l0Y2gnKSB8fCAoaWQg
PT09ICdleHBvcnQnKSB8fCAoaWQgPT09ICdpbXBvcnQnKTsKKyAgICAgICAgY2FzZSA3OgorICAg
ICAgICAgICAgcmV0dXJuIChpZCA9PT0gJ2RlZmF1bHQnKSB8fCAoaWQgPT09ICdmaW5hbGx5Jykg
fHwgKGlkID09PSAnZXh0ZW5kcycpOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1
cm4gKGlkID09PSAnZnVuY3Rpb24nKSB8fCAoaWQgPT09ICdjb250aW51ZScpIHx8IChpZCA9PT0g
J2RlYnVnZ2VyJyk7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICByZXR1cm4gKGlkID09
PSAnaW5zdGFuY2VvZicpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gNy40IENvbW1lbnRzCisKKyAgICBmdW5j
dGlvbiBhZGRDb21tZW50KHR5cGUsIHZhbHVlLCBzdGFydCwgZW5kLCBsb2MpIHsKKyAgICAgICAg
dmFyIGNvbW1lbnQsIGF0dGFjaGVyOworCisgICAgICAgIGFzc2VydCh0eXBlb2Ygc3RhcnQgPT09
ICdudW1iZXInLCAnQ29tbWVudCBtdXN0IGhhdmUgdmFsaWQgcG9zaXRpb24nKTsKKworICAgICAg
ICAvLyBCZWNhdXNlIHRoZSB3YXkgdGhlIGFjdHVhbCB0b2tlbiBpcyBzY2FubmVkLCBvZnRlbiB0
aGUgY29tbWVudHMKKyAgICAgICAgLy8gKGlmIGFueSkgYXJlIHNraXBwZWQgdHdpY2UgZHVyaW5n
IHRoZSBsZXhpY2FsIGFuYWx5c2lzLgorICAgICAgICAvLyBUaHVzLCB3ZSBuZWVkIHRvIHNraXAg
YWRkaW5nIGEgY29tbWVudCBpZiB0aGUgY29tbWVudCBhcnJheSBhbHJlYWR5CisgICAgICAgIC8v
IGhhbmRsZWQgaXQuCisgICAgICAgIGlmIChzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0ID49IHN0YXJ0
KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUubGFzdENv
bW1lbnRTdGFydCA9IHN0YXJ0OworCisgICAgICAgIGNvbW1lbnQgPSB7CisgICAgICAgICAgICB0
eXBlOiB0eXBlLAorICAgICAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgICAgIH07CisgICAgICAg
IGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgY29tbWVudC5yYW5nZSA9IFtzdGFydCwg
ZW5kXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICBj
b21tZW50LmxvYyA9IGxvYzsKKyAgICAgICAgfQorICAgICAgICBleHRyYS5jb21tZW50cy5wdXNo
KGNvbW1lbnQpOworICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAgICAg
ICAgZXh0cmEubGVhZGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICBleHRy
YS50cmFpbGluZ0NvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBza2lwU2luZ2xlTGluZUNvbW1lbnQob2Zmc2V0KSB7CisgICAgICAgIHZhciBz
dGFydCwgbG9jLCBjaCwgY29tbWVudDsKKworICAgICAgICBzdGFydCA9IGluZGV4IC0gb2Zmc2V0
OworICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAg
IGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVT
dGFydCAtIG9mZnNldAorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHdoaWxl
IChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChp
bmRleCk7CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1p
bmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGlu
ZGV4IC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29s
dW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDEKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0LCBpbmRleCAt
IDEsIGxvYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaCA9PT0g
MTMgJiYgc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAxMCkgeworICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2xpbmVO
dW1iZXI7CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4dHJh
LmNvbW1lbnRzKSB7CisgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0ICsg
b2Zmc2V0LCBpbmRleCk7CisgICAgICAgICAgICBsb2MuZW5kID0geworICAgICAgICAgICAgICAg
IGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVT
dGFydAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGFkZENvbW1lbnQoJ0xpbmUnLCBjb21t
ZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biBza2lwTXVsdGlMaW5lQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBsb2MsIGNoLCBj
b21tZW50OworCisgICAgICAgIGlmIChleHRyYS5jb21tZW50cykgeworICAgICAgICAgICAgc3Rh
cnQgPSBpbmRleCAtIDI7CisgICAgICAgICAgICBsb2MgPSB7CisgICAgICAgICAgICAgICAgc3Rh
cnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAg
ICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCAtIDIKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAg
ICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAgIGlmIChj
aCA9PT0gMHgwRCAmJiBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpID09PSAweDBBKSB7Cisg
ICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAg
ICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBs
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5l
eHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoY2ggPT09IDB4MkEpIHsKKyAgICAgICAgICAgICAgICAvLyBCbG9jayBjb21t
ZW50IGVuZHMgd2l0aCAnKi8nLgorICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVB
dChpbmRleCArIDEpID09PSAweDJGKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHRy
YS5jb21tZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IHNvdXJjZS5z
bGljZShzdGFydCArIDIsIGluZGV4IC0gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2Mu
ZW5kID0geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAg
ICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbW1l
bnQoJ0Jsb2NrJywgY29tbWVudCwgc3RhcnQsIGluZGV4LCBsb2MpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRocm93
RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBza2lwQ29tbWVudCgpIHsKKyAgICAgICAgdmFyIGNoLCBzdGFydDsKKwor
ICAgICAgICBzdGFydCA9IChpbmRleCA9PT0gMCk7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxl
bmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7CisKKyAg
ICAgICAgICAgIGlmIChpc1doaXRlU3BhY2UoY2gpKSB7CisgICAgICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkpIHsKKyAgICAg
ICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwRCAmJiBz
b3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MEEpIHsKKyAgICAgICAgICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVy
OworICAgICAgICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4OworICAgICAgICAgICAgICAgIHN0
YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkYpIHsgLy8gVSsw
MDJGIGlzICcvJworICAgICAgICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgg
KyAxKTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MkYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
ICAgICAgICAgc2tpcFNpbmdsZUxpbmVDb21tZW50KDIpOworICAgICAgICAgICAgICAgICAgICBz
dGFydCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyQSkgeyAg
Ly8gVSswMDJBIGlzICcqJworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICBza2lwTXVsdGlMaW5lQ29t
bWVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgJiYg
Y2ggPT09IDB4MkQpIHsgLy8gVSswMDJEIGlzICctJworICAgICAgICAgICAgICAgIC8vIFUrMDAz
RSBpcyAnPicKKyAgICAgICAgICAgICAgICBpZiAoKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsg
MSkgPT09IDB4MkQpICYmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDIpID09PSAweDNFKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyAnLS0+JyBpcyBhIHNpbmdsZS1saW5lIGNvbW1lbnQK
KyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgc2tp
cFNpbmdsZUxpbmVDb21tZW50KDMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2ggPT09IDB4M0MpIHsgLy8gVSswMDNDIGlzICc8JworICAgICAgICAgICAgICAgIGlm
IChzb3VyY2Uuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDQpID09PSAnIS0tJykgeworICAgICAg
ICAgICAgICAgICAgICArK2luZGV4OyAvLyBgPGAKKyAgICAgICAgICAgICAgICAgICAgKytpbmRl
eDsgLy8gYCFgCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7IC8vIGAtYAorICAgICAgICAg
ICAgICAgICAgICArK2luZGV4OyAvLyBgLWAKKyAgICAgICAgICAgICAgICAgICAgc2tpcFNpbmds
ZUxpbmVDb21tZW50KDQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmdW5jdGlvbiBzY2FuSGV4RXNjYXBlKHByZWZpeCkgeworICAgICAgICB2YXIgaSwgbGVu
LCBjaCwgY29kZSA9IDA7CisKKyAgICAgICAgbGVuID0gKHByZWZpeCA9PT0gJ3UnKSA/IDQgOiAy
OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChp
bmRleCA8IGxlbmd0aCAmJiBpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUg
KiAxNiArICcwMTIzNDU2Nzg5YWJjZGVmJy5pbmRleE9mKGNoLnRvTG93ZXJDYXNlKCkpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gJyc7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0RXNjYXBlZElkZW50aWZpZXIoKSB7CisgICAgICAg
IHZhciBjaCwgaWQ7CisKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCsrKTsK
KyAgICAgICAgaWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTsKKworICAgICAgICAvLyAnXHUn
IChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKyAgICAgICAg
aWYgKGNoID09PSAweDVDKSB7CisgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXgpICE9PSAweDc1KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAgICAg
ICAgaWYgKCFjaCB8fCBjaCA9PT0gJ1xcJyB8fCAhaXNJZGVudGlmaWVyU3RhcnQoY2guY2hhckNv
ZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4
cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZCA9
IGNoOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAg
ICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmICgh
aXNJZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZCArPSBTdHJpbmcuZnJv
bUNoYXJDb2RlKGNoKTsKKworICAgICAgICAgICAgLy8gJ1x1JyAoVSswMDVDLCBVKzAwNzUpIGRl
bm90ZXMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMp
IHsKKyAgICAgICAgICAgICAgICBpZCA9IGlkLnN1YnN0cigwLCBpZC5sZW5ndGggLSAxKTsKKyAg
ICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpICE9PSAweDc1KSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tl
biwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytpbmRl
eDsKKyAgICAgICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNoIHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJQYXJ0KGNoLmNoYXJD
b2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWQgKz0gY2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gaWQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2V0SWRlbnRpZmllcigpIHsKKyAgICAg
ICAgdmFyIHN0YXJ0LCBjaDsKKworICAgICAgICBzdGFydCA9IGluZGV4Kys7CisgICAgICAgIHdo
aWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVB
dChpbmRleCk7CisgICAgICAgICAgICBpZiAoY2ggPT09IDB4NUMpIHsKKyAgICAgICAgICAgICAg
ICAvLyBCbGFja3NsYXNoIChVKzAwNUMpIG1hcmtzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLgor
ICAgICAgICAgICAgICAgIGluZGV4ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdl
dEVzY2FwZWRJZGVudGlmaWVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNJ
ZGVudGlmaWVyUGFydChjaCkpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGluZGV4KTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzY2FuSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBp
ZCwgdHlwZTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworCisgICAgICAgIC8vIEJhY2tzbGFz
aCAoVSswMDVDKSBzdGFydHMgYW4gZXNjYXBlZCBjaGFyYWN0ZXIuCisgICAgICAgIGlkID0gKHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHg1QykgPyBnZXRFc2NhcGVkSWRlbnRpZmllcigp
IDogZ2V0SWRlbnRpZmllcigpOworCisgICAgICAgIC8vIFRoZXJlIGlzIG5vIGtleXdvcmQgb3Ig
bGl0ZXJhbCB3aXRoIG9ubHkgb25lIGNoYXJhY3Rlci4KKyAgICAgICAgLy8gVGh1cywgaXQgbXVz
dCBiZSBhbiBpZGVudGlmaWVyLgorICAgICAgICBpZiAoaWQubGVuZ3RoID09PSAxKSB7CisgICAg
ICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKKyAgICAgICAgfSBlbHNlIGlmIChpc0tl
eXdvcmQoaWQpKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uS2V5d29yZDsKKyAgICAgICAg
fSBlbHNlIGlmIChpZCA9PT0gJ251bGwnKSB7CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uTnVs
bExpdGVyYWw7CisgICAgICAgIH0gZWxzZSBpZiAoaWQgPT09ICd0cnVlJyB8fCBpZCA9PT0gJ2Zh
bHNlJykgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLkJvb2xlYW5MaXRlcmFsOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAg
ICAgIHZhbHVlOiBpZCwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAg
ICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwK
KyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKworICAgIC8vIDcu
NyBQdW5jdHVhdG9ycworCisgICAgZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IoKSB7CisgICAgICAg
IHZhciBzdGFydCA9IGluZGV4LAorICAgICAgICAgICAgY29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KSwKKyAgICAgICAgICAgIGNvZGUyLAorICAgICAgICAgICAgY2gxID0gc291cmNlW2lu
ZGV4XSwKKyAgICAgICAgICAgIGNoMiwKKyAgICAgICAgICAgIGNoMywKKyAgICAgICAgICAgIGNo
NDsKKworICAgICAgICBzd2l0Y2ggKGNvZGUpIHsKKworICAgICAgICAvLyBDaGVjayBmb3IgbW9z
dCBjb21tb24gc2luZ2xlLWNoYXJhY3RlciBwdW5jdHVhdG9ycy4KKyAgICAgICAgY2FzZSAweDJF
OiAgLy8gLiBkb3QKKyAgICAgICAgY2FzZSAweDI4OiAgLy8gKCBvcGVuIGJyYWNrZXQKKyAgICAg
ICAgY2FzZSAweDI5OiAgLy8gKSBjbG9zZSBicmFja2V0CisgICAgICAgIGNhc2UgMHgzQjogIC8v
IDsgc2VtaWNvbG9uCisgICAgICAgIGNhc2UgMHgyQzogIC8vICwgY29tbWEKKyAgICAgICAgY2Fz
ZSAweDdCOiAgLy8geyBvcGVuIGN1cmx5IGJyYWNlCisgICAgICAgIGNhc2UgMHg3RDogIC8vIH0g
Y2xvc2UgY3VybHkgYnJhY2UKKyAgICAgICAgY2FzZSAweDVCOiAgLy8gWworICAgICAgICBjYXNl
IDB4NUQ6ICAvLyBdCisgICAgICAgIGNhc2UgMHgzQTogIC8vIDoKKyAgICAgICAgY2FzZSAweDNG
OiAgLy8gPworICAgICAgICBjYXNlIDB4N0U6ICAvLyB+CisgICAgICAgICAgICArK2luZGV4Owor
ICAgICAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKGNv
ZGUgPT09IDB4MjgpIHsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4g
PSBleHRyYS50b2tlbnMubGVuZ3RoOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9
PT0gMHg3QikgeworICAgICAgICAgICAgICAgICAgICBleHRyYS5vcGVuQ3VybHlUb2tlbiA9IGV4
dHJhLnRva2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9y
LAorICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpLAorICAg
ICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGlu
ZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAg
ICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGNvZGUyID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKTsKKworICAg
ICAgICAgICAgLy8gJz0nIChVKzAwM0QpIG1hcmtzIGFuIGFzc2lnbm1lbnQgb3IgY29tcGFyaXNv
biBvcGVyYXRvci4KKyAgICAgICAgICAgIGlmIChjb2RlMiA9PT0gMHgzRCkgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMHgyQjogIC8vICsK
KyAgICAgICAgICAgICAgICBjYXNlIDB4MkQ6ICAvLyAtCisgICAgICAgICAgICAgICAgY2FzZSAw
eDJGOiAgLy8gLworICAgICAgICAgICAgICAgIGNhc2UgMHgzQzogIC8vIDwKKyAgICAgICAgICAg
ICAgICBjYXNlIDB4M0U6ICAvLyA+CisgICAgICAgICAgICAgICAgY2FzZSAweDVFOiAgLy8gXgor
ICAgICAgICAgICAgICAgIGNhc2UgMHg3QzogIC8vIHwKKyAgICAgICAgICAgICAgICBjYXNlIDB4
MjU6ICAvLyAlCisgICAgICAgICAgICAgICAgY2FzZSAweDI2OiAgLy8gJgorICAgICAgICAgICAg
ICAgIGNhc2UgMHgyQTogIC8vICoKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6
IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogU3RyaW5n
LmZyb21DaGFyQ29kZShjb2RlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgY2FzZSAweDIxOiAvLyAhCisgICAg
ICAgICAgICAgICAgY2FzZSAweDNEOiAvLyA9CisgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9
IDI7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gIT09IGFuZCA9PT0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgzRCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4u
UHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzb3VyY2Uuc2xpY2Uo
c3RhcnQsIGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LWNoYXJhY3RlciBwdW5j
dHVhdG9yOiA+Pj49CisKKyAgICAgICAgY2g0ID0gc291cmNlLnN1YnN0cihpbmRleCwgNCk7CisK
KyAgICAgICAgaWYgKGNoNCA9PT0gJz4+Pj0nKSB7CisgICAgICAgICAgICBpbmRleCArPSA0Owor
ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVh
dG9yLAorICAgICAgICAgICAgICAgIHZhbHVlOiBjaDQsCisgICAgICAgICAgICAgICAgbGluZU51
bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwK
KyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRl
eAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMtY2hhcmFjdGVyIHB1
bmN0dWF0b3JzOiA9PT0gIT09ID4+PiA8PD0gPj49CisKKyAgICAgICAgY2gzID0gY2g0LnN1YnN0
cigwLCAzKTsKKworICAgICAgICBpZiAoY2gzID09PSAnPj4+JyB8fCBjaDMgPT09ICc8PD0nIHx8
IGNoMyA9PT0gJz4+PScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDM7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAg
ICAgICAgICAgdmFsdWU6IGNoMywKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAg
ICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAg
ICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gT3RoZXIgMi1jaGFyYWN0ZXIgcHVuY3R1YXRv
cnM6ICsrIC0tIDw8ID4+ICYmIHx8CisgICAgICAgIGNoMiA9IGNoMy5zdWJzdHIoMCwgMik7CisK
KyAgICAgICAgaWYgKChjaDEgPT09IGNoMlsxXSAmJiAoJystPD4mfCcuaW5kZXhPZihjaDEpID49
IDApKSB8fCBjaDIgPT09ICc9PicpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDI7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisg
ICAgICAgICAgICAgICAgdmFsdWU6IGNoMiwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBs
aW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAg
ICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAg
ICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gMS1jaGFyYWN0ZXIgcHVuY3R1YXRv
cnM6IDwgPiA9ICEgKyAtICogJSAmIHwgXiAvCisgICAgICAgIGlmICgnPD49ISstKiUmfF4vJy5p
bmRleE9mKGNoMSkgPj0gMCkgeworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAg
ICAgICAgICB2YWx1ZTogY2gxLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1i
ZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAg
IH07CisgICAgICAgIH0KKworICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVj
dGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgfQorCisgICAgLy8gNy44LjMgTnVtZXJpYyBMaXRl
cmFscworCisgICAgZnVuY3Rpb24gc2NhbkhleExpdGVyYWwoc3RhcnQpIHsKKyAgICAgICAgdmFy
IG51bWJlciA9ICcnOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgaWYgKCFpc0hleERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4
KytdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG51bWJlci5sZW5ndGggPT09IDApIHsKKyAg
ICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVH
QUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2Uu
Y2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdl
cy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCisgICAgICAgICAg
ICB2YWx1ZTogcGFyc2VJbnQoJzB4JyArIG51bWJlciwgMTYpLAorICAgICAgICAgICAgbGluZU51
bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAg
ICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICB9
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5PY3RhbExpdGVyYWwoc3RhcnQpIHsKKyAgICAg
ICAgdmFyIG51bWJlciA9ICcwJyArIHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoIWlzT2N0YWxEaWdpdChzb3VyY2VbaW5k
ZXhdKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpIHx8IGlzRGVjaW1hbERp
Z2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Io
e30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwK
KyAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludChudW1iZXIsIDgpLAorICAgICAgICAgICAgb2N0
YWw6IHRydWUsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAg
ICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAg
ICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2Nh
bk51bWVyaWNMaXRlcmFsKCkgeworICAgICAgICB2YXIgbnVtYmVyLCBzdGFydCwgY2g7CisKKyAg
ICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoaXNEZWNpbWFsRGlnaXQo
Y2guY2hhckNvZGVBdCgwKSkgfHwgKGNoID09PSAnLicpLAorICAgICAgICAgICAgJ051bWVyaWMg
bGl0ZXJhbCBtdXN0IHN0YXJ0IHdpdGggYSBkZWNpbWFsIGRpZ2l0IG9yIGEgZGVjaW1hbCBwb2lu
dCcpOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgIG51bWJlciA9ICcnOworICAg
ICAgICBpZiAoY2ggIT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyID0gc291cmNlW2luZGV4
KytdOworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworCisgICAgICAgICAgICAvLyBI
ZXggbnVtYmVyIHN0YXJ0cyB3aXRoICcweCcuCisgICAgICAgICAgICAvLyBPY3RhbCBudW1iZXIg
c3RhcnRzIHdpdGggJzAnLgorICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJzAnKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNoID09PSAneCcgfHwgY2ggPT09ICdYJykgeworICAgICAgICAgICAg
ICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbkhleExpdGVy
YWwoc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNPY3Rh
bERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk9jdGFsTGl0ZXJh
bChzdGFydCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gZGVjaW1h
bCBudW1iZXIgc3RhcnRzIHdpdGggJzAnIHN1Y2ggYXMgJzA5JyBpcyBpbGxlZ2FsLgorICAgICAg
ICAgICAgICAgIGlmIChjaCAmJiBpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29kZUF0KDApKSkgewor
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkg
eworICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY2ggPT09ICcuJykgeworICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsr
XTsKKyAgICAgICAgICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChp
bmRleCkpKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKKyAgICAgICAgICAgIG51
bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisKKyAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4
XTsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsKKyAgICAgICAg
ICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXgpKSkgeworICAgICAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNv
dXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1l
c3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAgICAg
ICAgICAgIHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksCisgICAgICAgICAgICBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAg
ICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07Cisg
ICAgfQorCisgICAgLy8gNy44LjQgU3RyaW5nIExpdGVyYWxzCisKKyAgICBmdW5jdGlvbiBzY2Fu
U3RyaW5nTGl0ZXJhbCgpIHsKKyAgICAgICAgdmFyIHN0ciA9ICcnLCBxdW90ZSwgc3RhcnQsIGNo
LCBjb2RlLCB1bmVzY2FwZWQsIHJlc3RvcmUsIG9jdGFsID0gZmFsc2UsIHN0YXJ0TGluZU51bWJl
ciwgc3RhcnRMaW5lU3RhcnQ7CisgICAgICAgIHN0YXJ0TGluZU51bWJlciA9IGxpbmVOdW1iZXI7
CisgICAgICAgIHN0YXJ0TGluZVN0YXJ0ID0gbGluZVN0YXJ0OworCisgICAgICAgIHF1b3RlID0g
c291cmNlW2luZGV4XTsKKyAgICAgICAgYXNzZXJ0KChxdW90ZSA9PT0gJ1wnJyB8fCBxdW90ZSA9
PT0gJyInKSwKKyAgICAgICAgICAgICdTdHJpbmcgbGl0ZXJhbCBtdXN0IHN0YXJ0cyB3aXRoIGEg
cXVvdGUnKTsKKworICAgICAgICBzdGFydCA9IGluZGV4OworICAgICAgICArK2luZGV4OworCisg
ICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2Vb
aW5kZXgrK107CisKKyAgICAgICAgICAgIGlmIChjaCA9PT0gcXVvdGUpIHsKKyAgICAgICAgICAg
ICAgICBxdW90ZSA9ICcnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBl
bHNlIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4
KytdOworICAgICAgICAgICAgICAgIGlmICghY2ggfHwgIWlzTGluZVRlcm1pbmF0b3IoY2guY2hh
ckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgICAgICB1bmVzY2FwZWQgPSBzY2FuSGV4RXNjYXBlKGNoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh1bmVzY2FwZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
Kz0gdW5lc2NhcGVkOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgorICAg
ICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHIgKz0gJ1xyJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAnXHQnOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcYic7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6
CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xmJzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSAnXHgwQic7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2RlID0gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFwwIGlzIG5vdCBvY3RhbCBlc2NhcGUgc2VxdWVuY2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvY3RhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmIGlzT2N0YWxEaWdp
dChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvY3Rh
bCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICog
OCArICcwMTIzNDU2NycuaW5kZXhPZihzb3VyY2VbaW5kZXgrK10pOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIDMgZGlnaXRzIGFyZSBvbmx5IGFsbG93ZWQgd2hlbiBzdHJp
bmcgc3RhcnRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggMCwgMSwg
MiwgMworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJzAxMjMnLmluZGV4T2Yo
Y2gpID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eCA8IGxlbmd0aCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
T2N0YWxEaWdpdChzb3VyY2VbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRl
eCsrXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmlu
Zy5mcm9tQ2hhckNvZGUoY29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKyts
aW5lTnVtYmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICAnXHInICYmIHNvdXJj
ZVtpbmRleF0gPT09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gaW5k
ZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJt
aW5hdG9yKGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0ciArPSBjaDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChxdW90ZSAhPT0gJycpIHsKKyAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiBUb2tlbi5TdHJp
bmdMaXRlcmFsLAorICAgICAgICAgICAgdmFsdWU6IHN0ciwKKyAgICAgICAgICAgIG9jdGFsOiBv
Y3RhbCwKKyAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcjogc3RhcnRMaW5lTnVtYmVyLAorICAg
ICAgICAgICAgc3RhcnRMaW5lU3RhcnQ6IHN0YXJ0TGluZVN0YXJ0LAorICAgICAgICAgICAgbGlu
ZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAor
ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAg
ICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHsK
KyAgICAgICAgdmFyIHZhbHVlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdmFsdWUgPSBu
ZXcgUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg
ICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSW52YWxpZFJlZ0V4cCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHBC
b2R5KCkgeworICAgICAgICB2YXIgY2gsIHN0ciwgY2xhc3NNYXJrZXIsIHRlcm1pbmF0ZWQsIGJv
ZHk7CisKKyAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICBhc3NlcnQoY2ggPT09
ICcvJywgJ1JlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFsIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNo
Jyk7CisgICAgICAgIHN0ciA9IHNvdXJjZVtpbmRleCsrXTsKKworICAgICAgICBjbGFzc01hcmtl
ciA9IGZhbHNlOworICAgICAgICB0ZXJtaW5hdGVkID0gZmFsc2U7CisgICAgICAgIHdoaWxlIChp
bmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAg
ICAgICAgICBzdHIgKz0gY2g7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcpIHsKKyAgICAg
ICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICAvLyBFQ01B
LTI2MiA3LjguNQorICAgICAgICAgICAgICAgIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJD
b2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHN0ciArPSBjaDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaW5lVGVybWluYXRvcihjaC5j
aGFyQ29kZUF0KDApKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LlVudGVybWluYXRlZFJlZ0V4cCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTWFya2Vy
KSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2xhc3NNYXJrZXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy8nKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRlcm1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnWycpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2xhc3NNYXJrZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghdGVybWluYXRlZCkgeworICAgICAgICAgICAgdGhy
b3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5hdGVkUmVnRXhwKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEV4Y2x1ZGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2guCisgICAgICAgIGJv
ZHkgPSBzdHIuc3Vic3RyKDEsIHN0ci5sZW5ndGggLSAyKTsKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIHZhbHVlOiBib2R5LAorICAgICAgICAgICAgbGl0ZXJhbDogc3RyCisgICAgICAg
IH07CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cEZsYWdzKCkgeworICAgICAgICB2
YXIgY2gsIHN0ciwgZmxhZ3MsIHJlc3RvcmU7CisKKyAgICAgICAgc3RyID0gJyc7CisgICAgICAg
IGZsYWdzID0gJyc7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAg
ICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZpZXJQYXJ0
KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZiAoY2ggPT09ICdcXCcg
JiYgaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07
CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHsKKyAgICAgICAgICAgICAgICAgICAg
KytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdG9yZSA9IGluZGV4OworICAgICAgICAg
ICAgICAgICAgICBjaCA9IHNjYW5IZXhFc2NhcGUoJ3UnKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoc3RyICs9ICdcXHUnOyByZXN0b3JlIDwgaW5kZXg7ICsrcmVz
dG9yZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBzb3VyY2VbcmVzdG9y
ZV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHJlc3RvcmU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmbGFncyArPSAndSc7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIg
Kz0gJ1xcdSc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhy
b3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdc
XCc7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMu
VW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmxhZ3MgKz0gY2g7CisgICAgICAgICAgICAg
ICAgc3RyICs9IGNoOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgIHZhbHVlOiBmbGFncywKKyAgICAgICAgICAgIGxpdGVyYWw6IHN0cgor
ICAgICAgICB9OworICAgIH0KKworICAgIGZ1bmN0aW9uIHNjYW5SZWdFeHAoKSB7CisgICAgICAg
IHZhciBzdGFydCwgYm9keSwgZmxhZ3MsIHBhdHRlcm4sIHZhbHVlOworCisgICAgICAgIGxvb2th
aGVhZCA9IG51bGw7CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHN0YXJ0ID0gaW5k
ZXg7CisKKyAgICAgICAgYm9keSA9IHNjYW5SZWdFeHBCb2R5KCk7CisgICAgICAgIGZsYWdzID0g
c2NhblJlZ0V4cEZsYWdzKCk7CisgICAgICAgIHZhbHVlID0gdGVzdFJlZ0V4cChib2R5LnZhbHVl
LCBmbGFncy52YWx1ZSk7CisKKyAgICAgICAgaWYgKGV4dHJhLnRva2VuaXplKSB7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlJlZ3VsYXJFeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBsaW5l
TnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0
LAorICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGlu
ZGV4CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIGxpdGVyYWw6IGJvZHkubGl0ZXJhbCArIGZsYWdzLmxpdGVyYWwsCisgICAgICAgICAg
ICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBl
bmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFJlZ2V4
KCkgeworICAgICAgICB2YXIgcG9zLCBsb2MsIHJlZ2V4LCB0b2tlbjsKKworICAgICAgICBza2lw
Q29tbWVudCgpOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsb2MgPSB7CisgICAg
ICAgICAgICBzdGFydDogeworICAgICAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAg
ICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIHJlZ2V4ID0gc2NhblJlZ0V4cCgpOworICAgICAgICBsb2MuZW5k
ID0geworICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgIGNvbHVtbjog
aW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgfTsKKworICAgICAgICAvKiBpc3RhbmJ1bCBpZ25v
cmUgbmV4dCAqLworICAgICAgICBpZiAoIWV4dHJhLnRva2VuaXplKSB7CisgICAgICAgICAgICAv
LyBQb3AgdGhlIHByZXZpb3VzIHRva2VuLCB3aGljaCBpcyBsaWtlbHkgJy8nIG9yICcvPScKKyAg
ICAgICAgICAgIGlmIChleHRyYS50b2tlbnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAg
IHRva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLnRva2Vucy5sZW5ndGggLSAxXTsKKyAgICAgICAg
ICAgICAgICBpZiAodG9rZW4ucmFuZ2VbMF0gPT09IHBvcyAmJiB0b2tlbi50eXBlID09PSAnUHVu
Y3R1YXRvcicpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnLycg
fHwgdG9rZW4udmFsdWUgPT09ICcvPScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJh
LnRva2Vucy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXh0cmEudG9rZW5zLnB1c2goeworICAgICAg
ICAgICAgICAgIHR5cGU6ICdSZWd1bGFyRXhwcmVzc2lvbicsCisgICAgICAgICAgICAgICAgdmFs
dWU6IHJlZ2V4LmxpdGVyYWwsCisgICAgICAgICAgICAgICAgcmFuZ2U6IFtwb3MsIGluZGV4XSwK
KyAgICAgICAgICAgICAgICBsb2M6IGxvYworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gcmVnZXg7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNJZGVudGlmaWVy
TmFtZSh0b2tlbikgeworICAgICAgICByZXR1cm4gdG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRp
ZmllciB8fAorICAgICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uS2V5d29yZCB8fAorICAg
ICAgICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwgfHwKKyAgICAgICAg
ICAgIHRva2VuLnR5cGUgPT09IFRva2VuLk51bGxMaXRlcmFsOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGFkdmFuY2VTbGFzaCgpIHsKKyAgICAgICAgdmFyIHByZXZUb2tlbiwKKyAgICAgICAgICAg
IGNoZWNrVG9rZW47CisgICAgICAgIC8vIFVzaW5nIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgor
ICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zd2VldC5qcy93aWtpL2Rlc2ln
bgorICAgICAgICBwcmV2VG9rZW4gPSBleHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAt
IDFdOworICAgICAgICBpZiAoIXByZXZUb2tlbikgeworICAgICAgICAgICAgLy8gTm90aGluZyBi
ZWZvcmUgdGhhdDogaXQgY2Fubm90IGJlIGEgZGl2aXNpb24uCisgICAgICAgICAgICByZXR1cm4g
Y29sbGVjdFJlZ2V4KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZUb2tlbi50eXBlID09
PSAnUHVuY3R1YXRvcicpIHsKKyAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICdd
JykgeworICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJyknKSB7CisgICAgICAg
ICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuUGFyZW5Ub2tlbiAt
IDFdOworICAgICAgICAgICAgICAgIGlmIChjaGVja1Rva2VuICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja1Rva2VuLnR5cGUgPT09ICdLZXl3b3JkJyAmJgorICAgICAgICAgICAgICAg
ICAgICAgICAgKGNoZWNrVG9rZW4udmFsdWUgPT09ICdpZicgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2hpbGUnIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2ZvcicgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja1Rva2VuLnZhbHVlID09PSAnd2l0aCcpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnfScpIHsKKyAgICAgICAgICAgICAgICAvLyBEaXZp
ZGluZyBhIGZ1bmN0aW9uIGJ5IGFueXRoaW5nIG1ha2VzIGxpdHRsZSBzZW5zZSwKKyAgICAgICAg
ICAgICAgICAvLyBidXQgd2UgaGF2ZSB0byBjaGVjayBmb3IgdGhhdC4KKyAgICAgICAgICAgICAg
ICBpZiAoZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10gJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDNdLnR5
cGUgPT09ICdLZXl3b3JkJykgeworICAgICAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMgZnVu
Y3Rpb24uCisgICAgICAgICAgICAgICAgICAgIGNoZWNrVG9rZW4gPSBleHRyYS50b2tlbnNbZXh0
cmEub3BlbkN1cmx5VG9rZW4gLSA0XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVja1Rv
a2VuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXh0cmEu
dG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0gJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tlbiAtIDRdLnR5cGUgPT09ICdLZXl3
b3JkJykgeworICAgICAgICAgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbi4KKyAgICAgICAg
ICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3VybHlUb2tl
biAtIDVdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyBjaGVja1Rva2VuIGRldGVybWluZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMKKyAgICAgICAg
ICAgICAgICAvLyBhIGRlY2xhcmF0aW9uIG9yIGFuIGV4cHJlc3Npb24uCisgICAgICAgICAgICAg
ICAgaWYgKEZuRXhwclRva2Vucy5pbmRleE9mKGNoZWNrVG9rZW4udmFsdWUpID49IDApIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gZXhwcmVzc2lvbi4KKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIEl0IGlzIGEgZGVjbGFyYXRpb24uCisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbGxlY3RSZWdleCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbGxl
Y3RSZWdleCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2VG9rZW4udHlwZSA9PT0gJ0tl
eXdvcmQnKSB7CisgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
YWR2YW5jZSgpIHsKKyAgICAgICAgdmFyIGNoOworCisgICAgICAgIHNraXBDb21tZW50KCk7CisK
KyAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5FT0YsCisgICAgICAgICAgICAgICAgbGluZU51bWJl
cjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAg
ICAgICAgICAgICAgICBzdGFydDogaW5kZXgsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAor
ICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2Rl
QXQoaW5kZXgpOworCisgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjaCkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBzY2FuSWRlbnRpZmllcigpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VmVyeSBjb21tb246ICggYW5kICkgYW5kIDsKKyAgICAgICAgaWYgKGNoID09PSAweDI4IHx8IGNo
ID09PSAweDI5IHx8IGNoID09PSAweDNCKSB7CisgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0
dWF0b3IoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN0cmluZyBsaXRlcmFsIHN0YXJ0cyB3
aXRoIHNpbmdsZSBxdW90ZSAoVSswMDI3KSBvciBkb3VibGUgcXVvdGUgKFUrMDAyMikuCisgICAg
ICAgIGlmIChjaCA9PT0gMHgyNyB8fCBjaCA9PT0gMHgyMikgeworICAgICAgICAgICAgcmV0dXJu
IHNjYW5TdHJpbmdMaXRlcmFsKCk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vIERvdCAoLikg
VSswMDJFIGNhbiBhbHNvIHN0YXJ0IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLCBoZW5jZSB0aGUg
bmVlZAorICAgICAgICAvLyB0byBjaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgICAgICAgIGlm
IChjaCA9PT0gMHgyRSkgeworICAgICAgICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5j
aGFyQ29kZUF0KGluZGV4ICsgMSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5OdW1l
cmljTGl0ZXJhbCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5j
dHVhdG9yKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpKSB7
CisgICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBTbGFzaCAoLykgVSswMDJGIGNhbiBhbHNvIHN0YXJ0IGEgcmVnZXguCisgICAg
ICAgIGlmIChleHRyYS50b2tlbml6ZSAmJiBjaCA9PT0gMHgyRikgeworICAgICAgICAgICAgcmV0
dXJuIGFkdmFuY2VTbGFzaCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNjYW5QdW5j
dHVhdG9yKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29sbGVjdFRva2VuKCkgeworICAgICAg
ICB2YXIgbG9jLCB0b2tlbiwgcmFuZ2UsIHZhbHVlOworCisgICAgICAgIHNraXBDb21tZW50KCk7
CisgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAg
bGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0
YXJ0CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgdG9rZW4gPSBhZHZhbmNl
KCk7CisgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAor
ICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydAorICAgICAgICB9OworCisgICAg
ICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgIHZhbHVlID0g
c291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpOworICAgICAgICAgICAgZXh0cmEu
dG9rZW5zLnB1c2goeworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuTmFtZVt0b2tlbi50eXBl
XSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgcmFuZ2U6
IFt0b2tlbi5zdGFydCwgdG9rZW4uZW5kXSwKKyAgICAgICAgICAgICAgICBsb2M6IGxvYworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdG9rZW47CisgICAgfQor
CisgICAgZnVuY3Rpb24gbGV4KCkgeworICAgICAgICB2YXIgdG9rZW47CisKKyAgICAgICAgdG9r
ZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGluZGV4ID0gdG9rZW4uZW5kOworICAgICAgICBsaW5l
TnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgbGluZVN0YXJ0ID0gdG9rZW4ubGlu
ZVN0YXJ0OworCisgICAgICAgIGxvb2thaGVhZCA9ICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAn
dW5kZWZpbmVkJykgPyBjb2xsZWN0VG9rZW4oKSA6IGFkdmFuY2UoKTsKKworICAgICAgICBpbmRl
eCA9IHRva2VuLmVuZDsKKyAgICAgICAgbGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7Cisg
ICAgICAgIGxpbmVTdGFydCA9IHRva2VuLmxpbmVTdGFydDsKKworICAgICAgICByZXR1cm4gdG9r
ZW47CisgICAgfQorCisgICAgZnVuY3Rpb24gcGVlaygpIHsKKyAgICAgICAgdmFyIHBvcywgbGlu
ZSwgc3RhcnQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxpbmUgPSBsaW5lTnVt
YmVyOworICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAgICAgbG9va2FoZWFkID0gKHR5
cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSA/IGNvbGxlY3RUb2tlbigpIDogYWR2
YW5jZSgpOworICAgICAgICBpbmRleCA9IHBvczsKKyAgICAgICAgbGluZU51bWJlciA9IGxpbmU7
CisgICAgICAgIGxpbmVTdGFydCA9IHN0YXJ0OworICAgIH0KKworICAgIGZ1bmN0aW9uIFBvc2l0
aW9uKGxpbmUsIGNvbHVtbikgeworICAgICAgICB0aGlzLmxpbmUgPSBsaW5lOworICAgICAgICB0
aGlzLmNvbHVtbiA9IGNvbHVtbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBTb3VyY2VMb2NhdGlv
bihzdGFydExpbmUsIHN0YXJ0Q29sdW1uLCBsaW5lLCBjb2x1bW4pIHsKKyAgICAgICAgdGhpcy5z
dGFydCA9IG5ldyBQb3NpdGlvbihzdGFydExpbmUsIHN0YXJ0Q29sdW1uKTsKKyAgICAgICAgdGhp
cy5lbmQgPSBuZXcgUG9zaXRpb24obGluZSwgY29sdW1uKTsKKyAgICB9CisKKyAgICBTeW50YXhU
cmVlRGVsZWdhdGUgPSB7CisKKyAgICAgICAgbmFtZTogJ1N5bnRheFRyZWUnLAorCisgICAgICAg
IHByb2Nlc3NDb21tZW50OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIGxhc3RD
aGlsZCwgdHJhaWxpbmdDb21tZW50czsKKworICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0g
U3ludGF4LlByb2dyYW0pIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5ib2R5Lmxlbmd0aCA+
IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVu
Z3RoID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChleHRyYS50cmFpbGluZ0NvbW1lbnRzWzBd
LnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhaWxp
bmdDb21tZW50cyA9IGV4dHJhLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAgICAgICAgICAg
IGV4dHJhLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBleHRyYS50cmFpbGluZ0NvbW1lbnRzLmxlbmd0aCA9IDA7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVu
Z3RoIC0gMV0udHJhaWxpbmdDb21tZW50cyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0
cmEuYm90dG9tUmlnaHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRy
YWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXSkgeworICAgICAgICAg
ICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRzID0gZXh0cmEuYm90dG9tUmlnaHRTdGFja1tleHRy
YS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnRyYWlsaW5nQ29tbWVudHM7CisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJp
Z2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVhdGluZyB0aGUgc3RhY2suCisgICAg
ICAgICAgICB3aGlsZSAoZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggPiAwICYmIGV4dHJh
LmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS5yYW5n
ZVswXSA+PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgbGFzdENoaWxkID0gZXh0
cmEuYm90dG9tUmlnaHRTdGFjay5wb3AoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGxhc3RDaGlsZCkgeworICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hpbGQubGVhZGluZ0Nv
bW1lbnRzICYmIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHNbbGFzdENoaWxkLmxlYWRpbmdDb21t
ZW50cy5sZW5ndGggLSAxXS5yYW5nZVsxXSA8PSBub2RlLnJhbmdlWzBdKSB7CisgICAgICAgICAg
ICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gbGFzdENoaWxkLmxlYWRpbmdDb21tZW50
czsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHM7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS5sZWFkaW5n
Q29tbWVudHMubGVuZ3RoID4gMCAmJiBleHRyYS5sZWFkaW5nQ29tbWVudHNbZXh0cmEubGVhZGlu
Z0NvbW1lbnRzLmxlbmd0aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAg
ICAgICAgICAgICBub2RlLmxlYWRpbmdDb21tZW50cyA9IGV4dHJhLmxlYWRpbmdDb21tZW50czsK
KyAgICAgICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAg
IH0KKworCisgICAgICAgICAgICBpZiAodHJhaWxpbmdDb21tZW50cykgeworICAgICAgICAgICAg
ICAgIG5vZGUudHJhaWxpbmdDb21tZW50cyA9IHRyYWlsaW5nQ29tbWVudHM7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sucHVzaChub2RlKTsKKyAg
ICAgICAgfSwKKworICAgICAgICBtYXJrRW5kOiBmdW5jdGlvbiAobm9kZSwgc3RhcnRUb2tlbikg
eworICAgICAgICAgICAgaWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICAgICAgbm9kZS5y
YW5nZSA9IFtzdGFydFRva2VuLnN0YXJ0LCBpbmRleF07CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZXh0cmEubG9jKSB7CisgICAgICAgICAgICAgICAgbm9kZS5sb2MgPSBuZXcgU291
cmNlTG9jYXRpb24oCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnRMaW5lTnVt
YmVyID09PSB1bmRlZmluZWQgPyAgc3RhcnRUb2tlbi5saW5lTnVtYmVyIDogc3RhcnRUb2tlbi5z
dGFydExpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4uc3RhcnQgLSAo
c3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCA9PT0gdW5kZWZpbmVkID8gIHN0YXJ0VG9rZW4ubGlu
ZVN0YXJ0IDogc3RhcnRUb2tlbi5zdGFydExpbmVTdGFydCksCisgICAgICAgICAgICAgICAgICAg
IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgIGluZGV4IC0gbGluZVN0YXJ0CisgICAg
ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzKG5vZGUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgewor
ICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvbW1lbnQobm9kZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAgICBwb3N0UHJv
Y2VzczogZnVuY3Rpb24gKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChleHRyYS5zb3VyY2UpIHsK
KyAgICAgICAgICAgICAgICBub2RlLmxvYy5zb3VyY2UgPSBleHRyYS5zb3VyY2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVBcnJheUV4cHJlc3Npb246IGZ1bmN0aW9uIChlbGVtZW50cykgeworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQXJyYXlFeHByZXNzaW9uLAor
ICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBlbGVtZW50cworICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSwKKworICAgICAgICBjcmVhdGVBc3NpZ25tZW50RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9w
ZXJhdG9yLCBsZWZ0LCByaWdodCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguQXNzaWdubWVudEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAg
b3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisgICAgICAg
ICAgICAgICAgcmlnaHQ6IHJpZ2h0CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAg
ICAgIGNyZWF0ZUJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVyYXRvciwgbGVmdCwgcmln
aHQpIHsKKyAgICAgICAgICAgIHZhciB0eXBlID0gKG9wZXJhdG9yID09PSAnfHwnIHx8IG9wZXJh
dG9yID09PSAnJiYnKSA/IFN5bnRheC5Mb2dpY2FsRXhwcmVzc2lvbiA6CisgICAgICAgICAgICAg
ICAgICAgICAgICBTeW50YXguQmluYXJ5RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjog
b3BlcmF0b3IsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAgICAgICBy
aWdodDogcmlnaHQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
QmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChib2R5KSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5CbG9ja1N0YXRlbWVudCwKKyAgICAgICAgICAg
ICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNy
ZWF0ZUJyZWFrU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkJyZWFrU3RhdGVtZW50LAorICAgICAg
ICAgICAgICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgeworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2FsbEV4cHJl
c3Npb24sCisgICAgICAgICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAgICAg
J2FyZ3VtZW50cyc6IGFyZ3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAg
Y3JlYXRlQ2F0Y2hDbGF1c2U6IGZ1bmN0aW9uIChwYXJhbSwgYm9keSkgeworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguQ2F0Y2hDbGF1c2UsCisgICAg
ICAgICAgICAgICAgcGFyYW06IHBhcmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ29uZGl0aW9uYWxFeHBy
ZXNzaW9uOiBmdW5jdGlvbiAodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKSB7CisgICAgICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Db25kaXRpb25hbEV4
cHJlc3Npb24sCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICBj
b25zZXF1ZW50OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0ZXJu
YXRlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUNvbnRpbnVl
U3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LkNvbnRpbnVlU3RhdGVtZW50LAorICAgICAgICAgICAg
ICAgIGxhYmVsOiBsYWJlbAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVEZWJ1Z2dlclN0YXRlbWVudDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRGVidWdnZXJTdGF0ZW1lbnQKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlRG9XaGlsZVN0YXRlbWVudDog
ZnVuY3Rpb24gKGJvZHksIHRlc3QpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LkRvV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9k
eTogYm9keSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0CisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZUVtcHR5U3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FbXB0eVN0
YXRlbWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVFeHBy
ZXNzaW9uU3RhdGVtZW50OiBmdW5jdGlvbiAoZXhwcmVzc2lvbikgeworICAgICAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguRXhwcmVzc2lvblN0YXRlbWVudCwK
KyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uCisgICAgICAgICAgICB9Owor
ICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZvclN0YXRlbWVudDogZnVuY3Rpb24gKGluaXQs
IHRlc3QsIHVwZGF0ZSwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguRm9yU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGluaXQ6IGlu
aXQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAgICB1cGRhdGU6
IHVwZGF0ZSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAgICAgICAgICB9OworICAg
ICAgICB9LAorCisgICAgICAgIGNyZWF0ZUZvckluU3RhdGVtZW50OiBmdW5jdGlvbiAobGVmdCwg
cmlnaHQsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LkZvckluU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxlZnQ6IGxlZnQsCisg
ICAgICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHks
CisgICAgICAgICAgICAgICAgZWFjaDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0s
CisKKyAgICAgICAgY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbjogZnVuY3Rpb24gKGlkLCBwYXJh
bXMsIGRlZmF1bHRzLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5GdW5jdGlvbkRlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAgIGlk
OiBpZCwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0czogZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAgICAg
ICAgICAgICByZXN0OiBudWxsLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2UsCisg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlRnVuY3Rpb25FeHByZXNzaW9uOiBmdW5jdGlvbiAoaWQsIHBh
cmFtcywgZGVmYXVsdHMsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LkZ1bmN0aW9uRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBp
ZDogaWQsCisgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAgICAgICAgICAgICAg
ZGVmYXVsdHM6IGRlZmF1bHRzLAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksCisgICAgICAg
ICAgICAgICAgcmVzdDogbnVsbCwKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3I6IGZhbHNlLAor
ICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IGZhbHNlCisgICAgICAgICAgICB9OworICAgICAg
ICB9LAorCisgICAgICAgIGNyZWF0ZUlkZW50aWZpZXI6IGZ1bmN0aW9uIChuYW1lKSB7CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5JZGVudGlmaWVy
LAorICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUKKyAgICAgICAgICAgIH07CisgICAgICAgIH0s
CisKKyAgICAgICAgY3JlYXRlSWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50
LCBhbHRlcm5hdGUpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LklmU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAg
ICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudCwKKyAgICAgICAgICAgICAgICBhbHRl
cm5hdGU6IGFsdGVybmF0ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBj
cmVhdGVMYWJlbGVkU3RhdGVtZW50OiBmdW5jdGlvbiAobGFiZWwsIGJvZHkpIHsKKyAgICAgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkxhYmVsZWRTdGF0ZW1l
bnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLAorICAgICAgICAgICAgICAgIGJvZHk6
IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTGl0ZXJh
bDogZnVuY3Rpb24gKHRva2VuKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5MaXRlcmFsLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0b2tlbi52
YWx1ZSwKKyAgICAgICAgICAgICAgICByYXc6IHNvdXJjZS5zbGljZSh0b2tlbi5zdGFydCwgdG9r
ZW4uZW5kKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVNZW1i
ZXJFeHByZXNzaW9uOiBmdW5jdGlvbiAoYWNjZXNzb3IsIG9iamVjdCwgcHJvcGVydHkpIHsKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk1lbWJlckV4
cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY29tcHV0ZWQ6IGFjY2Vzc29yID09PSAnWycsCisg
ICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3QsCisgICAgICAgICAgICAgICAgcHJvcGVydHk6
IHByb3BlcnR5CisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZU5l
d0V4cHJlc3Npb246IGZ1bmN0aW9uIChjYWxsZWUsIGFyZ3MpIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk5ld0V4cHJlc3Npb24sCisgICAgICAg
ICAgICAgICAgY2FsbGVlOiBjYWxsZWUsCisgICAgICAgICAgICAgICAgJ2FyZ3VtZW50cyc6IGFy
Z3MKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlT2JqZWN0RXhw
cmVzc2lvbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4Lk9iamVjdEV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgcHJvcGVydGllczogcHJvcGVydGllcworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwK
KworICAgICAgICBjcmVhdGVQb3N0Zml4RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBh
cmd1bWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBT
eW50YXguVXBkYXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0
b3IsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAgICAgICAgICAg
IHByZWZpeDogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3Jl
YXRlUHJvZ3JhbTogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb2dyYW0sCisgICAgICAgICAgICAgICAgYm9keTog
Ym9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVQcm9wZXJ0
eTogZnVuY3Rpb24gKGtpbmQsIGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlByb3BlcnR5LAorICAgICAgICAgICAgICAgIGtl
eToga2V5LAorICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICBr
aW5kOiBraW5kCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVJl
dHVyblN0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5SZXR1cm5TdGF0ZW1lbnQsCisgICAgICAg
ICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50CisgICAgICAgICAgICB9OworICAgICAgICB9LAor
CisgICAgICAgIGNyZWF0ZVNlcXVlbmNlRXhwcmVzc2lvbjogZnVuY3Rpb24gKGV4cHJlc3Npb25z
KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5T
ZXF1ZW5jZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGV4cHJlc3Np
b25zCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVN3aXRjaENh
c2U6IGZ1bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50KSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hDYXNlLAorICAgICAgICAgICAgICAg
IHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogY29uc2VxdWVudAorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVTd2l0Y2hTdGF0ZW1lbnQ6
IGZ1bmN0aW9uIChkaXNjcmltaW5hbnQsIGNhc2VzKSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5Td2l0Y2hTdGF0ZW1lbnQsCisgICAgICAgICAg
ICAgICAgZGlzY3JpbWluYW50OiBkaXNjcmltaW5hbnQsCisgICAgICAgICAgICAgICAgY2FzZXM6
IGNhc2VzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVRoaXNF
eHByZXNzaW9uOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgICAgIHR5cGU6IFN5bnRheC5UaGlzRXhwcmVzc2lvbgorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfSwKKworICAgICAgICBjcmVhdGVUaHJvd1N0YXRlbWVudDogZnVuY3Rpb24gKGFyZ3VtZW50
KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5U
aHJvd1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVHJ5U3RhdGVtZW50OiBmdW5j
dGlvbiAoYmxvY2ssIGd1YXJkZWRIYW5kbGVycywgaGFuZGxlcnMsIGZpbmFsaXplcikgeworICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVHJ5U3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIGJsb2NrOiBibG9jaywKKyAgICAgICAgICAgICAgICBndWFy
ZGVkSGFuZGxlcnM6IGd1YXJkZWRIYW5kbGVycywKKyAgICAgICAgICAgICAgICBoYW5kbGVyczog
aGFuZGxlcnMsCisgICAgICAgICAgICAgICAgZmluYWxpemVyOiBmaW5hbGl6ZXIKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVW5hcnlFeHByZXNzaW9uOiBmdW5j
dGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7CisgICAgICAgICAgICBpZiAob3BlcmF0b3IgPT09
ICcrKycgfHwgb3BlcmF0b3IgPT09ICctLScpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguVXBkYXRlRXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICBh
cmd1bWVudDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgIHByZWZpeDogdHJ1ZQorICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VbmFyeUV4cHJlc3Npb24sCisgICAgICAgICAgICAg
ICAgb3BlcmF0b3I6IG9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVu
dCwKKyAgICAgICAgICAgICAgICBwcmVmaXg6IHRydWUKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbjogZnVuY3Rpb24gKGRlY2xh
cmF0aW9ucywga2luZCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBTeW50YXguVmFyaWFibGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBkZWNsYXJh
dGlvbnM6IGRlY2xhcmF0aW9ucywKKyAgICAgICAgICAgICAgICBraW5kOiBraW5kCisgICAgICAg
ICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRvcjog
ZnVuY3Rpb24gKGlkLCBpbml0KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFN5bnRheC5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAgICAgICAgICAgICAgaWQ6
IGlkLAorICAgICAgICAgICAgICAgIGluaXQ6IGluaXQKKyAgICAgICAgICAgIH07CisgICAgICAg
IH0sCisKKyAgICAgICAgY3JlYXRlV2hpbGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uICh0ZXN0LCBib2R5
KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5X
aGlsZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAgICAg
ICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3Jl
YXRlV2l0aFN0YXRlbWVudDogZnVuY3Rpb24gKG9iamVjdCwgYm9keSkgeworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguV2l0aFN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5
CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFJldHVybiB0cnVl
IGlmIHRoZXJlIGlzIGEgbGluZSB0ZXJtaW5hdG9yIGJlZm9yZSB0aGUgbmV4dCB0b2tlbi4KKwor
ICAgIGZ1bmN0aW9uIHBlZWtMaW5lVGVybWluYXRvcigpIHsKKyAgICAgICAgdmFyIHBvcywgbGlu
ZSwgc3RhcnQsIGZvdW5kOworCisgICAgICAgIHBvcyA9IGluZGV4OworICAgICAgICBsaW5lID0g
bGluZU51bWJlcjsKKyAgICAgICAgc3RhcnQgPSBsaW5lU3RhcnQ7CisgICAgICAgIHNraXBDb21t
ZW50KCk7CisgICAgICAgIGZvdW5kID0gbGluZU51bWJlciAhPT0gbGluZTsKKyAgICAgICAgaW5k
ZXggPSBwb3M7CisgICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lOworICAgICAgICBsaW5lU3RhcnQg
PSBzdGFydDsKKworICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgfQorCisgICAgLy8gVGhyb3cg
YW4gZXhjZXB0aW9uCisKKyAgICBmdW5jdGlvbiB0aHJvd0Vycm9yKHRva2VuLCBtZXNzYWdlRm9y
bWF0KSB7CisgICAgICAgIHZhciBlcnJvciwKKyAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLAorICAgICAgICAgICAgbXNnID0gbWVzc2Fn
ZUZvcm1hdC5yZXBsYWNlKAorICAgICAgICAgICAgICAgIC8lKFxkKS9nLAorICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uICh3aG9sZSwgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0
KGluZGV4IDwgYXJncy5sZW5ndGgsICdNZXNzYWdlIHJlZmVyZW5jZSBtdXN0IGJlIGluIHJhbmdl
Jyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2luZGV4XTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICApOworCisgICAgICAgIGlmICh0eXBlb2YgdG9rZW4ubGluZU51
bWJlciA9PT0gJ251bWJlcicpIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdMaW5l
ICcgKyB0b2tlbi5saW5lTnVtYmVyICsgJzogJyArIG1zZyk7CisgICAgICAgICAgICBlcnJvci5p
bmRleCA9IHRva2VuLnN0YXJ0OworICAgICAgICAgICAgZXJyb3IubGluZU51bWJlciA9IHRva2Vu
LmxpbmVOdW1iZXI7CisgICAgICAgICAgICBlcnJvci5jb2x1bW4gPSB0b2tlbi5zdGFydCAtIGxp
bmVTdGFydCArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlcnJvciA9IG5ldyBF
cnJvcignTGluZSAnICsgbGluZU51bWJlciArICc6ICcgKyBtc2cpOworICAgICAgICAgICAgZXJy
b3IuaW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgIGVycm9yLmxpbmVOdW1iZXIgPSBsaW5lTnVt
YmVyOworICAgICAgICAgICAgZXJyb3IuY29sdW1uID0gaW5kZXggLSBsaW5lU3RhcnQgKyAxOwor
ICAgICAgICB9CisKKyAgICAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBtc2c7CisgICAgICAgIHRo
cm93IGVycm9yOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3JUb2xlcmFudCgpIHsK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRocm93RXJyb3IuYXBwbHkobnVsbCwgYXJndW1l
bnRzKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGV4dHJhLmVycm9y
cykgeworICAgICAgICAgICAgICAgIGV4dHJhLmVycm9ycy5wdXNoKGUpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisKKyAgICAvLyBUaHJvdyBhbiBleGNlcHRpb24gYmVjYXVzZSBvZiB0aGUg
dG9rZW4uCisKKyAgICBmdW5jdGlvbiB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pIHsKKyAgICAgICAg
aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dFcnJvcih0
b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZEVPUyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
dG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xpdGVyYWwpIHsKKyAgICAgICAgICAgIHRocm93
RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWROdW1iZXIpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKyAgICAgICAg
ICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRTdHJpbmcpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAg
ICAgICAgICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRJZGVudGlmaWVy
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3Jk
KSB7CisgICAgICAgICAgICBpZiAoaXNGdXR1cmVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFJl
c2VydmVkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGlzU3RyaWN0TW9kZVJl
c2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9s
ZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tlbiwg
TWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBCb29sZWFuTGl0ZXJhbCwgTnVsbExpdGVyYWwsIG9yIFB1bmN0dWF0b3IuCisgICAg
ICAgIHRocm93RXJyb3IodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFs
dWUpOworICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tlbiB0byBtYXRjaCB0aGUg
c3BlY2lmaWVkIHB1bmN0dWF0b3IuCisgICAgLy8gSWYgbm90LCBhbiBleGNlcHRpb24gd2lsbCBi
ZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3QodmFsdWUpIHsKKyAgICAgICAgdmFyIHRv
a2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9y
IHx8IHRva2VuLnZhbHVlICE9PSB2YWx1ZSkgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVk
KHRva2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEV4cGVjdCB0aGUgbmV4dCB0b2tl
biB0byBtYXRjaCB0aGUgc3BlY2lmaWVkIGtleXdvcmQuCisgICAgLy8gSWYgbm90LCBhbiBleGNl
cHRpb24gd2lsbCBiZSB0aHJvd24uCisKKyAgICBmdW5jdGlvbiBleHBlY3RLZXl3b3JkKGtleXdv
cmQpIHsKKyAgICAgICAgdmFyIHRva2VuID0gbGV4KCk7CisgICAgICAgIGlmICh0b2tlbi50eXBl
ICE9PSBUb2tlbi5LZXl3b3JkIHx8IHRva2VuLnZhbHVlICE9PSBrZXl3b3JkKSB7CisgICAgICAg
ICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
UmV0dXJuIHRydWUgaWYgdGhlIG5leHQgdG9rZW4gbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHB1bmN0
dWF0b3IuCisKKyAgICBmdW5jdGlvbiBtYXRjaCh2YWx1ZSkgeworICAgICAgICByZXR1cm4gbG9v
a2FoZWFkLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnZhbHVlID09PSB2
YWx1ZTsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRj
aGVzIHRoZSBzcGVjaWZpZWQga2V5d29yZAorCisgICAgZnVuY3Rpb24gbWF0Y2hLZXl3b3JkKGtl
eXdvcmQpIHsKKyAgICAgICAgcmV0dXJuIGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3Jk
ICYmIGxvb2thaGVhZC52YWx1ZSA9PT0ga2V5d29yZDsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4g
dHJ1ZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yCisKKyAgICBm
dW5jdGlvbiBtYXRjaEFzc2lnbigpIHsKKyAgICAgICAgdmFyIG9wOworCisgICAgICAgIGlmIChs
b29rYWhlYWQudHlwZSAhPT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIG9wID0gbG9va2FoZWFkLnZhbHVlOworICAgICAg
ICByZXR1cm4gb3AgPT09ICc9JyB8fAorICAgICAgICAgICAgb3AgPT09ICcqPScgfHwKKyAgICAg
ICAgICAgIG9wID09PSAnLz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyU9JyB8fAorICAgICAg
ICAgICAgb3AgPT09ICcrPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnLT0nIHx8CisgICAgICAg
ICAgICBvcCA9PT0gJzw8PScgfHwKKyAgICAgICAgICAgIG9wID09PSAnPj49JyB8fAorICAgICAg
ICAgICAgb3AgPT09ICc+Pj49JyB8fAorICAgICAgICAgICAgb3AgPT09ICcmPScgfHwKKyAgICAg
ICAgICAgIG9wID09PSAnXj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJ3w9JzsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBjb25zdW1lU2VtaWNvbG9uKCkgeworICAgICAgICB2YXIgbGluZTsKKwor
ICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21tb24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkg
YSBzZW1pY29sb24gKFUrMDAzQikuCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRl
eCkgPT09IDB4M0IgfHwgbWF0Y2goJzsnKSkgeworICAgICAgICAgICAgbGV4KCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsaW5lID0gbGluZU51bWJlcjsKKyAg
ICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgaWYgKGxpbmVOdW1iZXIgIT09IGxpbmUpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29rYWhlYWQu
dHlwZSAhPT0gVG9rZW4uRU9GICYmICFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICB0aHJvd1Vu
ZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0
cnVlIGlmIHByb3ZpZGVkIGV4cHJlc3Npb24gaXMgTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgorCisg
ICAgZnVuY3Rpb24gaXNMZWZ0SGFuZFNpZGUoZXhwcikgeworICAgICAgICByZXR1cm4gZXhwci50
eXBlID09PSBTeW50YXguSWRlbnRpZmllciB8fCBleHByLnR5cGUgPT09IFN5bnRheC5NZW1iZXJF
eHByZXNzaW9uOworICAgIH0KKworICAgIC8vIDExLjEuNCBBcnJheSBJbml0aWFsaXNlcgorCisg
ICAgZnVuY3Rpb24gcGFyc2VBcnJheUluaXRpYWxpc2VyKCkgeworICAgICAgICB2YXIgZWxlbWVu
dHMgPSBbXSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwor
ICAgICAgICBleHBlY3QoJ1snKTsKKworICAgICAgICB3aGlsZSAoIW1hdGNoKCddJykpIHsKKyAg
ICAgICAgICAgIGlmIChtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgbGV4KCk7CisgICAg
ICAgICAgICAgICAgZWxlbWVudHMucHVzaChudWxsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkp
OworCisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaCgnXScpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGxleCgpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5k
KGRlbGVnYXRlLmNyZWF0ZUFycmF5RXhwcmVzc2lvbihlbGVtZW50cyksIHN0YXJ0VG9rZW4pOwor
ICAgIH0KKworICAgIC8vIDExLjEuNSBPYmplY3QgSW5pdGlhbGlzZXIKKworICAgIGZ1bmN0aW9u
IHBhcnNlUHJvcGVydHlGdW5jdGlvbihwYXJhbSwgZmlyc3QpIHsKKyAgICAgICAgdmFyIHByZXZp
b3VzU3RyaWN0LCBib2R5LCBzdGFydFRva2VuOworCisgICAgICAgIHByZXZpb3VzU3RyaWN0ID0g
c3RyaWN0OworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBib2R5ID0g
cGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7CisgICAgICAgIGlmIChmaXJzdCAmJiBzdHJp
Y3QgJiYgaXNSZXN0cmljdGVkV29yZChwYXJhbVswXS5uYW1lKSkgeworICAgICAgICAgICAgdGhy
b3dFcnJvclRvbGVyYW50KGZpcnN0LCBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWUpOworICAgICAg
ICB9CisgICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0OworICAgICAgICByZXR1cm4gZGVs
ZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVGdW5jdGlvbkV4cHJlc3Npb24obnVsbCwgcGFy
YW0sIFtdLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VP
YmplY3RQcm9wZXJ0eUtleSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBzdGFydFRva2VuOworCisg
ICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisK
KyAgICAgICAgLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tIHBhcnNl
T2JqZWN0UHJvcGVydHkoKSwgd2hlcmUKKyAgICAgICAgLy8gRU9GIGFuZCBQdW5jdHVhdG9yIHRv
a2VucyBhcmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQuCisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUg
PT09IFRva2VuLlN0cmluZ0xpdGVyYWwgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW4uTnVtZXJpY0xp
dGVyYWwpIHsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgdG9rZW4ub2N0YWwpIHsKKyAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdE9jdGFs
TGl0ZXJhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFy
a0VuZChkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKSwgc3RhcnRUb2tlbik7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVu
dGlmaWVyKHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24g
cGFyc2VPYmplY3RQcm9wZXJ0eSgpIHsKKyAgICAgICAgdmFyIHRva2VuLCBrZXksIGlkLCB2YWx1
ZSwgcGFyYW0sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAg
ICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09
IFRva2VuLklkZW50aWZpZXIpIHsKKworICAgICAgICAgICAgaWQgPSBwYXJzZU9iamVjdFByb3Bl
cnR5S2V5KCk7CisKKyAgICAgICAgICAgIC8vIFByb3BlcnR5IEFzc2lnbm1lbnQ6IEdldHRlciBh
bmQgU2V0dGVyLgorCisgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdnZXQnICYmICFt
YXRjaCgnOicpKSB7CisgICAgICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtl
eSgpOworICAgICAgICAgICAgICAgIGV4cGVjdCgnKCcpOworICAgICAgICAgICAgICAgIGV4cGVj
dCgnKScpOworICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKFtd
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVh
dGVQcm9wZXJ0eSgnZ2V0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAnc2V0JyAmJiAhbWF0Y2goJzonKSkg
eworICAgICAgICAgICAgICAgIGtleSA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsKKyAgICAg
ICAgICAgICAgICBleHBlY3QoJygnKTsKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVh
ZDsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uSWRlbnRpZmllcikg
eworICAgICAgICAgICAgICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sIHRva2Vu
LnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rp
b24oW10pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBh
cmFtID0gWyBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIF07CisgICAgICAgICAgICAgICAgICAg
IGV4cGVjdCgnKScpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlG
dW5jdGlvbihwYXJhbSwgdG9rZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQcm9wZXJ0eSgnc2V0Jywg
a2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhw
ZWN0KCc6Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24o
KTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVBy
b3BlcnR5KCdpbml0JywgaWQsIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRiB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5Q
dW5jdHVhdG9yKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOwor
ICAgICAgICAgICAgZXhwZWN0KCc6Jyk7CisgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdu
bWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRl
bGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdpbml0Jywga2V5LCB2YWx1ZSksIHN0YXJ0VG9rZW4pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VPYmplY3RJbml0aWFsaXNlcigp
IHsKKyAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXSwgcHJvcGVydHksIG5hbWUsIGtleSwga2lu
ZCwgbWFwID0ge30sIHRvU3RyaW5nID0gU3RyaW5nLCBzdGFydFRva2VuOworCisgICAgICAgIHN0
YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAg
d2hpbGUgKCFtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlT2JqZWN0
UHJvcGVydHkoKTsKKworICAgICAgICAgICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSBTeW50
YXguSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5rZXkubmFt
ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHRvU3RyaW5n
KHByb3BlcnR5LmtleS52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBraW5kID0g
KHByb3BlcnR5LmtpbmQgPT09ICdpbml0JykgPyBQcm9wZXJ0eUtpbmQuRGF0YSA6IChwcm9wZXJ0
eS5raW5kID09PSAnZ2V0JykgPyBQcm9wZXJ0eUtpbmQuR2V0IDogUHJvcGVydHlLaW5kLlNldDsK
KworICAgICAgICAgICAga2V5ID0gJyQnICsgbmFtZTsKKyAgICAgICAgICAgIGlmIChPYmplY3Qu
cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBrZXkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG1hcFtrZXldID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RyaWN0ICYmIGtpbmQgPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdER1
cGxpY2F0ZVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChraW5kICE9
PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoa2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuQWNjZXNzb3JEYXRhUHJvcGVydHkp
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcFtrZXldICYga2luZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nl
c3NvckdldFNldCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgbWFwW2tleV0gfD0ga2luZDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgbWFwW2tleV0gPSBraW5kOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOworCisgICAgICAgICAgICBpZiAoIW1hdGNo
KCd9JykpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZU9iamVjdEV4cHJlc3Npb24ocHJvcGVydGllcyksIHN0
YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDExLjEuNiBUaGUgR3JvdXBpbmcgT3BlcmF0b3IK
KworICAgIGZ1bmN0aW9uIHBhcnNlR3JvdXBFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgZXhw
cjsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNz
aW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7Cisg
ICAgfQorCisKKyAgICAvLyAxMS4xIFByaW1hcnkgRXhwcmVzc2lvbnMKKworICAgIGZ1bmN0aW9u
IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0eXBlLCB0b2tlbiwgZXhw
ciwgc3RhcnRUb2tlbjsKKworICAgICAgICBpZiAobWF0Y2goJygnKSkgeworICAgICAgICAgICAg
cmV0dXJuIHBhcnNlR3JvdXBFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bWF0Y2goJ1snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXlJbml0aWFsaXNlcigp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1hdGNoKCd7JykpIHsKKyAgICAgICAgICAgIHJl
dHVybiBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCk7CisgICAgICAgIH0KKworICAgICAgICB0eXBl
ID0gbG9va2FoZWFkLnR5cGU7CisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAg
ICAgICAgaWYgKHR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGV4cHIg
PSAgZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmllcihsZXgoKS52YWx1ZSk7CisgICAgICAgIH0gZWxz
ZSBpZiAodHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCB8fCB0eXBlID09PSBUb2tlbi5OdW1l
cmljTGl0ZXJhbCkgeworICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBsb29rYWhlYWQub2N0YWwp
IHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQobG9va2FoZWFkLCBNZXNzYWdl
cy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwciA9
IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwobGV4KCkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUg
PT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Z1bmN0
aW9uJykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24o
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ3RoaXMnKSkg
eworICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0
ZS5jcmVhdGVUaGlzRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT09IFRva2VuLkJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICB0
b2tlbiA9IGxleCgpOworICAgICAgICAgICAgdG9rZW4udmFsdWUgPSAodG9rZW4udmFsdWUgPT09
ICd0cnVlJyk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tl
bik7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWwpIHsKKyAg
ICAgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9IG51bGw7
CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbCh0b2tlbik7CisgICAg
ICAgIH0gZWxzZSBpZiAobWF0Y2goJy8nKSB8fCBtYXRjaCgnLz0nKSkgeworICAgICAgICAgICAg
aWYgKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAg
ICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUxpdGVyYWwoY29sbGVjdFJlZ2V4KCkpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTGl0
ZXJhbChzY2FuUmVnRXhwKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGVlaygpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxleCgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9r
ZW4pOworICAgIH0KKworICAgIC8vIDExLjIgTGVmdC1IYW5kLVNpZGUgRXhwcmVzc2lvbnMKKwor
ICAgIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnRzKCkgeworICAgICAgICB2YXIgYXJncyA9IFtdOwor
CisgICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAg
ICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgYXJncy5w
dXNoKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKG1h
dGNoKCcpJykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgcmV0dXJuIGFyZ3M7CisgICAgfQor
CisgICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRlZFByb3BlcnR5KCkgeworICAgICAgICB2YXIg
dG9rZW4sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgdG9rZW4gPSBsZXgoKTsKKworICAgICAgICBpZiAoIWlzSWRlbnRpZmllck5hbWUodG9r
ZW4pKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlSWRlbnRpZmll
cih0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
Tm9uQ29tcHV0ZWRNZW1iZXIoKSB7CisgICAgICAgIGV4cGVjdCgnLicpOworCisgICAgICAgIHJl
dHVybiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
YXJzZUNvbXB1dGVkTWVtYmVyKCkgeworICAgICAgICB2YXIgZXhwcjsKKworICAgICAgICBleHBl
Y3QoJ1snKTsKKworICAgICAgICBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAg
ZXhwZWN0KCddJyk7CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2VOZXdFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgY2FsbGVlLCBhcmdzLCBzdGFy
dFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVj
dEtleXdvcmQoJ25ldycpOworICAgICAgICBjYWxsZWUgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJl
c3Npb24oKTsKKyAgICAgICAgYXJncyA9IG1hdGNoKCcoJykgPyBwYXJzZUFyZ3VtZW50cygpIDog
W107CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlTmV3
RXhwcmVzc2lvbihjYWxsZWUsIGFyZ3MpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBwYXJzZUxlZnRIYW5kU2lkZUV4cHJlc3Npb25BbGxvd0NhbGwoKSB7CisgICAgICAgIHZh
ciBwcmV2aW91c0FsbG93SW4sIGV4cHIsIGFyZ3MsIHByb3BlcnR5LCBzdGFydFRva2VuOworCisg
ICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgcHJldmlvdXNBbGxvd0lu
ID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisgICAgICAg
IGV4cHIgPSBtYXRjaEtleXdvcmQoJ25ldycpID8gcGFyc2VOZXdFeHByZXNzaW9uKCkgOiBwYXJz
ZVByaW1hcnlFeHByZXNzaW9uKCk7CisgICAgICAgIHN0YXRlLmFsbG93SW4gPSBwcmV2aW91c0Fs
bG93SW47CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKG1hdGNoKCcuJykp
IHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTsK
KyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbign
LicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJygnKSkg
eworICAgICAgICAgICAgICAgIGFyZ3MgPSBwYXJzZUFyZ3VtZW50cygpOworICAgICAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDYWxsRXhwcmVzc2lvbihleHByLCBhcmdzKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHByb3Bl
cnR5ID0gcGFyc2VDb21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxl
Z2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUxlZnRI
YW5kU2lkZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBwcmV2aW91c0FsbG93SW4sIGV4cHIs
IHByb3BlcnR5LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7
CisKKyAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAgICAgICAgZXhw
ciA9IG1hdGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJp
bWFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJ
bjsKKworICAgICAgICB3aGlsZSAobWF0Y2goJy4nKSB8fCBtYXRjaCgnWycpKSB7CisgICAgICAg
ICAgICBpZiAobWF0Y2goJ1snKSkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VD
b21wdXRlZE1lbWJlcigpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVN
ZW1iZXJFeHByZXNzaW9uKCdbJywgZXhwciwgcHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHBhcnNlTm9uQ29tcHV0ZWRNZW1iZXIoKTsK
KyAgICAgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlTWVtYmVyRXhwcmVzc2lvbign
LicsIGV4cHIsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGVnYXRl
Lm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMS4zIFBvc3RmaXggRXhwcmVzc2lvbnMKKworICAgIGZ1
bmN0aW9uIHBhcnNlUG9zdGZpeEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByLCB0b2tl
biwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHByID0gcGFyc2VMZWZ0SGFu
ZFNpZGVFeHByZXNzaW9uQWxsb3dDYWxsKCk7CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBl
ID09PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICBpZiAoKG1hdGNoKCcrKycpIHx8
IG1hdGNoKCctLScpKSAmJiAhcGVla0xpbmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyAxMS4zLjEsIDExLjMuMgorICAgICAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50
eXBlID09PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5T
dHJpY3RMSFNQb3N0Zml4KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzTGVmdEhhbmRTaWRlKGV4cHIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93RXJy
b3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAg
ICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVQb3N0Zml4RXhwcmVz
c2lvbih0b2tlbi52YWx1ZSwgZXhwciksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTEuNCBVbmFy
eSBPcGVyYXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlVW5hcnlFeHByZXNzaW9uKCkgeworICAg
ICAgICB2YXIgdG9rZW4sIGV4cHIsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYgKGxvb2thaGVh
ZC50eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5L
ZXl3b3JkKSB7CisgICAgICAgICAgICBleHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOwor
ICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcrKycpIHx8IG1hdGNoKCctLScpKSB7CisgICAgICAg
ICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsK
KyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAg
Ly8gMTEuNC40LCAxMS40LjUKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci50eXBlID09
PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGV4cHIubmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1By
ZWZpeCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghaXNMZWZ0SGFuZFNpZGUo
ZXhwcikpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2Vz
LkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBl
eHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHByZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsK
KyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOwor
ICAgICAgICB9IGVsc2UgaWYgKG1hdGNoKCcrJykgfHwgbWF0Y2goJy0nKSB8fCBtYXRjaCgnficp
IHx8IG1hdGNoKCchJykpIHsKKyAgICAgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7Cisg
ICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgZXhwciA9IHBhcnNlVW5hcnlF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlVW5hcnlFeHBy
ZXNzaW9uKHRva2VuLnZhbHVlLCBleHByKTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5t
YXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOworICAgICAgICB9IGVsc2UgaWYgKG1hdGNoS2V5d29y
ZCgnZGVsZXRlJykgfHwgbWF0Y2hLZXl3b3JkKCd2b2lkJykgfHwgbWF0Y2hLZXl3b3JkKCd0eXBl
b2YnKSkgeworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAg
IHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24o
KTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9r
ZW4udmFsdWUsIGV4cHIpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhw
ciwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGV4cHIub3BlcmF0b3Ig
PT09ICdkZWxldGUnICYmIGV4cHIuYXJndW1lbnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIp
IHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmlj
dERlbGV0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBl
eHByID0gcGFyc2VQb3N0Zml4RXhwcmVzc2lvbigpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGV4cHI7CisgICAgfQorCisgICAgZnVuY3Rpb24gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwg
YWxsb3dJbikgeworICAgICAgICB2YXIgcHJlYyA9IDA7CisKKyAgICAgICAgaWYgKHRva2VuLnR5
cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgJiYgdG9rZW4udHlwZSAhPT0gVG9rZW4uS2V5d29yZCkg
eworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHRv
a2VuLnZhbHVlKSB7CisgICAgICAgIGNhc2UgJ3x8JzoKKyAgICAgICAgICAgIHByZWMgPSAxOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnJiYnOgorICAgICAgICAgICAgcHJl
YyA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICd8JzoKKyAgICAgICAg
ICAgIHByZWMgPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnXic6Cisg
ICAgICAgICAgICBwcmVjID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
JyYnOgorICAgICAgICAgICAgcHJlYyA9IDU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlICc9PSc6CisgICAgICAgIGNhc2UgJyE9JzoKKyAgICAgICAgY2FzZSAnPT09JzoKKyAg
ICAgICAgY2FzZSAnIT09JzoKKyAgICAgICAgICAgIHByZWMgPSA2OworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSAnPCc6CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICBjYXNl
ICc8PSc6CisgICAgICAgIGNhc2UgJz49JzoKKyAgICAgICAgY2FzZSAnaW5zdGFuY2VvZic6Cisg
ICAgICAgICAgICBwcmVjID0gNzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug
J2luJzoKKyAgICAgICAgICAgIHByZWMgPSBhbGxvd0luID8gNyA6IDA7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlICc8PCc6CisgICAgICAgIGNhc2UgJz4+JzoKKyAgICAgICAg
Y2FzZSAnPj4+JzoKKyAgICAgICAgICAgIHByZWMgPSA4OworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgY2FzZSAnKyc6CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgcHJlYyA9
IDk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgY2Fz
ZSAnLyc6CisgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgcHJlYyA9IDExOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHByZWM7CisgICAgfQorCisgICAgLy8gMTEuNSBNdWx0
aXBsaWNhdGl2ZSBPcGVyYXRvcnMKKyAgICAvLyAxMS42IEFkZGl0aXZlIE9wZXJhdG9ycworICAg
IC8vIDExLjcgQml0d2lzZSBTaGlmdCBPcGVyYXRvcnMKKyAgICAvLyAxMS44IFJlbGF0aW9uYWwg
T3BlcmF0b3JzCisgICAgLy8gMTEuOSBFcXVhbGl0eSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMCBC
aW5hcnkgQml0d2lzZSBPcGVyYXRvcnMKKyAgICAvLyAxMS4xMSBCaW5hcnkgTG9naWNhbCBPcGVy
YXRvcnMKKworICAgIGZ1bmN0aW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpIHsKKyAgICAgICAg
dmFyIG1hcmtlciwgbWFya2VycywgZXhwciwgdG9rZW4sIHByZWMsIHN0YWNrLCByaWdodCwgb3Bl
cmF0b3IsIGxlZnQsIGk7CisKKyAgICAgICAgbWFya2VyID0gbG9va2FoZWFkOworICAgICAgICBs
ZWZ0ID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVh
ZDsKKyAgICAgICAgcHJlYyA9IGJpbmFyeVByZWNlZGVuY2UodG9rZW4sIHN0YXRlLmFsbG93SW4p
OworICAgICAgICBpZiAocHJlYyA9PT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGxlZnQ7Cisg
ICAgICAgIH0KKyAgICAgICAgdG9rZW4ucHJlYyA9IHByZWM7CisgICAgICAgIGxleCgpOworCisg
ICAgICAgIG1hcmtlcnMgPSBbbWFya2VyLCBsb29rYWhlYWRdOworICAgICAgICByaWdodCA9IHBh
cnNlVW5hcnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgc3RhY2sgPSBbbGVmdCwgdG9rZW4sIHJp
Z2h0XTsKKworICAgICAgICB3aGlsZSAoKHByZWMgPSBiaW5hcnlQcmVjZWRlbmNlKGxvb2thaGVh
ZCwgc3RhdGUuYWxsb3dJbikpID4gMCkgeworCisgICAgICAgICAgICAvLyBSZWR1Y2U6IG1ha2Ug
YSBiaW5hcnkgZXhwcmVzc2lvbiBmcm9tIHRoZSB0aHJlZSB0b3Btb3N0IGVudHJpZXMuCisgICAg
ICAgICAgICB3aGlsZSAoKHN0YWNrLmxlbmd0aCA+IDIpICYmIChwcmVjIDw9IHN0YWNrW3N0YWNr
Lmxlbmd0aCAtIDJdLnByZWMpKSB7CisgICAgICAgICAgICAgICAgcmlnaHQgPSBzdGFjay5wb3Ao
KTsKKyAgICAgICAgICAgICAgICBvcGVyYXRvciA9IHN0YWNrLnBvcCgpLnZhbHVlOworICAgICAg
ICAgICAgICAgIGxlZnQgPSBzdGFjay5wb3AoKTsKKyAgICAgICAgICAgICAgICBleHByID0gZGVs
ZWdhdGUuY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgbGVmdCwgcmlnaHQpOworICAg
ICAgICAgICAgICAgIG1hcmtlcnMucG9wKCk7CisgICAgICAgICAgICAgICAgbWFya2VyID0gbWFy
a2Vyc1ttYXJrZXJzLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtF
bmQoZXhwciwgbWFya2VyKTsKKyAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGV4cHIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTaGlmdC4KKyAgICAgICAgICAgIHRva2VuID0g
bGV4KCk7CisgICAgICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAgICAgICAgICAgIHN0YWNr
LnB1c2godG9rZW4pOworICAgICAgICAgICAgbWFya2Vycy5wdXNoKGxvb2thaGVhZCk7CisgICAg
ICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHN0YWNr
LnB1c2goZXhwcik7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaW5hbCByZWR1Y2UgdG8gY2xl
YW4tdXAgdGhlIHN0YWNrLgorICAgICAgICBpID0gc3RhY2subGVuZ3RoIC0gMTsKKyAgICAgICAg
ZXhwciA9IHN0YWNrW2ldOworICAgICAgICBtYXJrZXJzLnBvcCgpOworICAgICAgICB3aGlsZSAo
aSA+IDEpIHsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVCaW5hcnlFeHByZXNz
aW9uKHN0YWNrW2kgLSAxXS52YWx1ZSwgc3RhY2tbaSAtIDJdLCBleHByKTsKKyAgICAgICAgICAg
IGkgLT0gMjsKKyAgICAgICAgICAgIG1hcmtlciA9IG1hcmtlcnMucG9wKCk7CisgICAgICAgICAg
ICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIG1hcmtlcik7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZXhwcjsKKyAgICB9CisKKworICAgIC8vIDExLjEyIENvbmRpdGlvbmFsIE9wZXJhdG9y
CisKKyAgICBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbmFsRXhwcmVzc2lvbigpIHsKKyAgICAgICAg
dmFyIGV4cHIsIHByZXZpb3VzQWxsb3dJbiwgY29uc2VxdWVudCwgYWx0ZXJuYXRlLCBzdGFydFRv
a2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwciA9
IHBhcnNlQmluYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgnPycpKSB7Cisg
ICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHByZXZpb3VzQWxsb3dJbiA9IHN0YXRlLmFs
bG93SW47CisgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKyAgICAgICAgICAgIGNv
bnNlcXVlbnQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgICAgICBzdGF0
ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOworICAgICAgICAgICAgZXhwZWN0KCc6Jyk7Cisg
ICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisKKyAg
ICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb24oZXhw
ciwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTsKKyAgICAgICAgICAgIGRlbGVnYXRlLm1hcmtFbmQo
ZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsKKyAg
ICB9CisKKyAgICAvLyAxMS4xMyBBc3NpZ25tZW50IE9wZXJhdG9ycworCisgICAgZnVuY3Rpb24g
cGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHRva2VuLCBsZWZ0LCBy
aWdodCwgbm9kZSwgc3RhcnRUb2tlbjsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAg
ICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBub2RlID0gbGVmdCA9IHBh
cnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoQXNzaWduKCkp
IHsKKyAgICAgICAgICAgIC8vIExlZnRIYW5kU2lkZUV4cHJlc3Npb24KKyAgICAgICAgICAgIGlm
ICghaXNMZWZ0SGFuZFNpZGUobGVmdCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9s
ZXJhbnQoe30sIE1lc3NhZ2VzLkludmFsaWRMSFNJbkFzc2lnbm1lbnQpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyAxMS4xMy4xCisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGxl
ZnQudHlwZSA9PT0gU3ludGF4LklkZW50aWZpZXIgJiYgaXNSZXN0cmljdGVkV29yZChsZWZ0Lm5h
bWUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdl
cy5TdHJpY3RMSFNBc3NpZ25tZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9r
ZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lv
bigpOworICAgICAgICAgICAgbm9kZSA9IGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRl
QXNzaWdubWVudEV4cHJlc3Npb24odG9rZW4udmFsdWUsIGxlZnQsIHJpZ2h0KSwgc3RhcnRUb2tl
bik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICAvLyAx
MS4xNCBDb21tYSBPcGVyYXRvcgorCisgICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKCkgewor
ICAgICAgICB2YXIgZXhwciwgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHBy
ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworCisgICAgICAgIGlmIChtYXRjaCgnLCcp
KSB7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUuY3JlYXRlU2VxdWVuY2VFeHByZXNzaW9u
KFsgZXhwciBdKTsKKworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFtYXRjaCgnLCcpKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAg
ICAgICBleHByLmV4cHJlc3Npb25zLnB1c2gocGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFy
dFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAg
IC8vIDEyLjEgQmxvY2sKKworICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50TGlzdCgpIHsKKyAg
ICAgICAgdmFyIGxpc3QgPSBbXSwKKyAgICAgICAgICAgIHN0YXRlbWVudDsKKworICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZW1l
bnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhdGVt
ZW50ID09PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbGlzdC5wdXNoKHN0YXRlbWVudCk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUJsb2NrKCkgewor
ICAgICAgICB2YXIgYmxvY2ssIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxv
b2thaGVhZDsKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAgYmxvY2sgPSBwYXJzZVN0
YXRlbWVudExpc3QoKTsKKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1cm4g
ZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVCbG9ja1N0YXRlbWVudChibG9jayksIHN0
YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEyLjIgVmFyaWFibGUgU3RhdGVtZW50CisKKyAg
ICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIHRva2Vu
LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAg
IHRva2VuID0gbGV4KCk7CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLklkZW50
aWZpZXIpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVudGlm
aWVyKHRva2VuLnZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VWYXJpYWJsZURlY2xhcmF0aW9uKGtpbmQpIHsKKyAgICAgICAgdmFyIGluaXQgPSBudWxsLCBp
ZCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAg
ICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAgICAgLy8gMTIuMi4xCisg
ICAgICAgIGlmIChzdHJpY3QgJiYgaXNSZXN0cmljdGVkV29yZChpZC5uYW1lKSkgeworICAgICAg
ICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJpY3RWYXJOYW1lKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChraW5kID09PSAnY29uc3QnKSB7CisgICAgICAgICAgICBl
eHBlY3QoJz0nKTsKKyAgICAgICAgICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9u
KCk7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2goJz0nKSkgeworICAgICAgICAgICAgbGV4KCk7
CisgICAgICAgICAgICBpbml0ID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlVmFy
aWFibGVEZWNsYXJhdG9yKGlkLCBpbml0KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChraW5kKSB7CisgICAgICAgIHZhciBs
aXN0ID0gW107CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgbGlzdC5wdXNoKHBhcnNlVmFy
aWFibGVEZWNsYXJhdGlvbihraW5kKSk7CisgICAgICAgICAgICBpZiAoIW1hdGNoKCcsJykpIHsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxleCgp
OworICAgICAgICB9IHdoaWxlIChpbmRleCA8IGxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIGxp
c3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpIHsKKyAg
ICAgICAgdmFyIGRlY2xhcmF0aW9uczsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd2YXInKTsK
KworICAgICAgICBkZWNsYXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7
CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgJ3ZhcicpOworICAgIH0K
KworICAgIC8vIGtpbmQgbWF5IGJlIGBjb25zdGAgb3IgYGxldGAKKyAgICAvLyBCb3RoIGFyZSBl
eHBlcmltZW50YWwgYW5kIG5vdCBpbiB0aGUgc3BlY2lmaWNhdGlvbiB5ZXQuCisgICAgLy8gc2Vl
IGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6Y29uc3QKKyAg
ICAvLyBhbmQgaHR0cDovL3dpa2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTps
ZXQKKyAgICBmdW5jdGlvbiBwYXJzZUNvbnN0TGV0RGVjbGFyYXRpb24oa2luZCkgeworICAgICAg
ICB2YXIgZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBs
b29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZChraW5kKTsKKworICAgICAgICBkZWNs
YXJhdGlvbnMgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpOworCisgICAgICAg
IGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChk
ZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywga2luZCksIHN0
YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEyLjMgRW1wdHkgU3RhdGVtZW50CisKKyAgICBm
dW5jdGlvbiBwYXJzZUVtcHR5U3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3QoJzsnKTsKKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUVtcHR5U3RhdGVtZW50KCk7CisgICAgfQorCisg
ICAgLy8gMTIuNCBFeHByZXNzaW9uIFN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VFeHBy
ZXNzaW9uU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgZXhwciA9IHBhcnNlRXhwcmVzc2lvbigp
OworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5j
cmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KGV4cHIpOworICAgIH0KKworICAgIC8vIDEyLjUgSWYg
c3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUlmU3RhdGVtZW50KCkgeworICAgICAgICB2
YXIgdGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlOworCisgICAgICAgIGV4cGVjdEtleXdvcmQo
J2lmJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhw
cmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgnKScpOworCisgICAgICAgIGNvbnNlcXVlbnQg
PSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2Vsc2UnKSkg
eworICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBwYXJzZVN0YXRl
bWVudCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYWx0ZXJuYXRlID0gbnVsbDsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVJZlN0YXRlbWVudCh0
ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpOworICAgIH0KKworICAgIC8vIDEyLjYgSXRlcmF0
aW9uIFN0YXRlbWVudHMKKworICAgIGZ1bmN0aW9uIHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpIHsK
KyAgICAgICAgdmFyIGJvZHksIHRlc3QsIG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGV4cGVj
dEtleXdvcmQoJ2RvJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJh
dGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkg
PSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5J
dGVyYXRpb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAgICAgICBl
eHBlY3QoJygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAg
ICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc7JykpIHsKKyAgICAgICAgICAg
IGxleCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZURvV2hp
bGVTdGF0ZW1lbnQoYm9keSwgdGVzdCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VXaGls
ZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHRlc3QsIGJvZHksIG9sZEluSXRlcmF0aW9uOwor
CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3doaWxlJyk7CisKKyAgICAgICAgZXhwZWN0KCcoJyk7
CisKKyAgICAgICAgdGVzdCA9IHBhcnNlRXhwcmVzc2lvbigpOworCisgICAgICAgIGV4cGVjdCgn
KScpOworCisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247CisgICAg
ICAgIHN0YXRlLmluSXRlcmF0aW9uID0gdHJ1ZTsKKworICAgICAgICBib2R5ID0gcGFyc2VTdGF0
ZW1lbnQoKTsKKworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IG9sZEluSXRlcmF0aW9uOwor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVXaGlsZVN0YXRlbWVudCh0ZXN0LCBib2R5
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZvclZhcmlhYmxlRGVjbGFyYXRpb24oKSB7
CisgICAgICAgIHZhciB0b2tlbiwgZGVjbGFyYXRpb25zLCBzdGFydFRva2VuOworCisgICAgICAg
IHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIHRva2VuID0gbGV4KCk7CisgICAgICAg
IGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKKworICAgICAg
ICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xhcmF0
aW9uKGRlY2xhcmF0aW9ucywgdG9rZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBwYXJzZUZvclN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGluaXQsIHRlc3Qs
IHVwZGF0ZSwgbGVmdCwgcmlnaHQsIGJvZHksIG9sZEluSXRlcmF0aW9uOworCisgICAgICAgIGlu
aXQgPSB0ZXN0ID0gdXBkYXRlID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdmb3In
KTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICBpZiAobWF0Y2goJzsnKSkgewor
ICAgICAgICAgICAgbGV4KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobWF0
Y2hLZXl3b3JkKCd2YXInKSB8fCBtYXRjaEtleXdvcmQoJ2xldCcpKSB7CisgICAgICAgICAgICAg
ICAgc3RhdGUuYWxsb3dJbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIGluaXQgPSBwYXJzZUZv
clZhcmlhYmxlRGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5hbGxvd0luID0g
dHJ1ZTsKKworICAgICAgICAgICAgICAgIGlmIChpbml0LmRlY2xhcmF0aW9ucy5sZW5ndGggPT09
IDEgJiYgbWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAgICAgIGxleCgpOwor
ICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gaW5pdDsKKyAgICAgICAgICAgICAgICAgICAgcmln
aHQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCA9IG51bGw7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5hbGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNlRXhw
cmVzc2lvbigpOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnaW4nKSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNM
ZWZ0SGFuZFNpZGUoaW5pdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3JU
b2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExIU0luRm9ySW4pOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgICAg
IGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNlRXhwcmVzc2lv
bigpOworICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgICAgICAgICAgICBleHBlY3QoJzsnKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHsKKwor
ICAgICAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7CisgICAgICAgICAgICAgICAgdGVzdCA9IHBh
cnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXhwZWN0KCc7Jyk7
CisKKyAgICAgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAgICAgICAgICAgIHVwZGF0
ZSA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJh
dGlvbjsKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkg
PSBwYXJzZVN0YXRlbWVudCgpOworCisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5J
dGVyYXRpb247CisKKyAgICAgICAgcmV0dXJuICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcp
ID8KKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5jcmVhdGVGb3JTdGF0ZW1lbnQoaW5pdCwgdGVz
dCwgdXBkYXRlLCBib2R5KSA6CisgICAgICAgICAgICAgICAgZGVsZWdhdGUuY3JlYXRlRm9ySW5T
dGF0ZW1lbnQobGVmdCwgcmlnaHQsIGJvZHkpOworICAgIH0KKworICAgIC8vIDEyLjcgVGhlIGNv
bnRpbnVlIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VDb250aW51ZVN0YXRlbWVudCgp
IHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5OworCisgICAgICAgIGV4cGVjdEtleXdv
cmQoJ2NvbnRpbnVlJyk7CisKKyAgICAgICAgLy8gT3B0aW1pemUgdGhlIG1vc3QgY29tbW9uIGZv
cm06ICdjb250aW51ZTsnLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09
PSAweDNCKSB7CisgICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCFzdGF0ZS5p
bkl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLkls
bGVnYWxDb250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgaWYgKCFzdGF0ZS5pbkl0
ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVn
YWxDb250aW51ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgbGFi
ZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAgICAgICBrZXkgPSAnJCcg
KyBsYWJlbC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blBy
b3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAg
IGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhc3RhdGUuaW5JdGVyYXRpb24pIHsKKyAgICAgICAgICAg
IHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLklsbGVnYWxDb250aW51ZSk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQ29udGludWVTdGF0ZW1lbnQobGFiZWwpOwor
ICAgIH0KKworICAgIC8vIDEyLjggVGhlIGJyZWFrIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24g
cGFyc2VCcmVha1N0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGxhYmVsID0gbnVsbCwga2V5Owor
CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2JyZWFrJyk7CisKKyAgICAgICAgLy8gQ2F0Y2ggdGhl
IHZlcnkgY29tbW9uIGNhc2UgZmlyc3Q6IGltbWVkaWF0ZWx5IGEgc2VtaWNvbG9uIChVKzAwM0Ip
LgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNCKSB7CisgICAg
ICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAgaWYgKCEoc3RhdGUuaW5JdGVyYXRpb24gfHwg
c3RhdGUuaW5Td2l0Y2gpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuSWxsZWdhbEJyZWFrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRl
bGVnYXRlLmNyZWF0ZUJyZWFrU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHBlZWtMaW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0
ZXJhdGlvbiB8fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5JbGxlZ2FsQnJlYWspOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2VuLklkZW50aWZpZXIpIHsKKyAg
ICAgICAgICAgIGxhYmVsID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAgICAg
ICAga2V5ID0gJyQnICsgbGFiZWwubmFtZTsKKyAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3Rv
dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlLmxhYmVsU2V0LCBrZXkpKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5rbm93bkxhYmVsLCBsYWJlbC5uYW1l
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN1bWVTZW1pY29sb24o
KTsKKworICAgICAgICBpZiAobGFiZWwgPT09IG51bGwgJiYgIShzdGF0ZS5pbkl0ZXJhdGlvbiB8
fCBzdGF0ZS5pblN3aXRjaCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2Vz
LklsbGVnYWxCcmVhayk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3Jl
YXRlQnJlYWtTdGF0ZW1lbnQobGFiZWwpOworICAgIH0KKworICAgIC8vIDEyLjkgVGhlIHJldHVy
biBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkgeworICAg
ICAgICB2YXIgYXJndW1lbnQgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3JldHVy
bicpOworCisgICAgICAgIGlmICghc3RhdGUuaW5GdW5jdGlvbkJvZHkpIHsKKyAgICAgICAgICAg
IHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSWxsZWdhbFJldHVybik7CisgICAgICAg
IH0KKworICAgICAgICAvLyAncmV0dXJuJyBmb2xsb3dlZCBieSBhIHNwYWNlIGFuZCBhbiBpZGVu
dGlmaWVyIGlzIHZlcnkgY29tbW9uLgorICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoaW5k
ZXgpID09PSAweDIwKSB7CisgICAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNl
LmNoYXJDb2RlQXQoaW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBh
cnNlRXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KGFyZ3Vt
ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZWVrTGluZVRl
cm1pbmF0b3IoKSkgeworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0
YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2goJzsnKSkgewor
ICAgICAgICAgICAgaWYgKCFtYXRjaCgnfScpICYmIGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5F
T0YpIHsKKyAgICAgICAgICAgICAgICBhcmd1bWVudCA9IHBhcnNlRXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpOwor
ICAgIH0KKworICAgIC8vIDEyLjEwIFRoZSB3aXRoIHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24g
cGFyc2VXaXRoU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgb2JqZWN0LCBib2R5OworCisgICAg
ICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAgICAgIC8vIFRPRE8oaWthcmllbmF0b3IpOiBTaG91
bGQgd2UgdXBkYXRlIHRoZSB0ZXN0IGNhc2VzIGluc3RlYWQ/CisgICAgICAgICAgICBza2lwQ29t
bWVudCgpOworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5TdHJp
Y3RNb2RlV2l0aCk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aXRoJyk7
CisKKyAgICAgICAgZXhwZWN0KCcoJyk7CisKKyAgICAgICAgb2JqZWN0ID0gcGFyc2VFeHByZXNz
aW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgYm9keSA9IHBhcnNlU3Rh
dGVtZW50KCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVdpdGhTdGF0ZW1lbnQo
b2JqZWN0LCBib2R5KTsKKyAgICB9CisKKyAgICAvLyAxMi4xMCBUaGUgc3dpdGggc3RhdGVtZW50
CisKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaENhc2UoKSB7CisgICAgICAgIHZhciB0ZXN0LCBj
b25zZXF1ZW50ID0gW10sIHN0YXRlbWVudCwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRv
a2VuID0gbG9va2FoZWFkOworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdkZWZhdWx0JykpIHsK
KyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgdGVzdCA9IG51bGw7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXNlJyk7CisgICAgICAgICAgICB0
ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgZXhwZWN0KCc6Jyk7
CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobWF0
Y2goJ30nKSB8fCBtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSB8fCBtYXRjaEtleXdvcmQoJ2Nhc2Un
KSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
c3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGNvbnNlcXVlbnQucHVz
aChzdGF0ZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtF
bmQoZGVsZWdhdGUuY3JlYXRlU3dpdGNoQ2FzZSh0ZXN0LCBjb25zZXF1ZW50KSwgc3RhcnRUb2tl
bik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSB7CisgICAg
ICAgIHZhciBkaXNjcmltaW5hbnQsIGNhc2VzLCBjbGF1c2UsIG9sZEluU3dpdGNoLCBkZWZhdWx0
Rm91bmQ7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnc3dpdGNoJyk7CisKKyAgICAgICAgZXhw
ZWN0KCcoJyk7CisKKyAgICAgICAgZGlzY3JpbWluYW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisK
KyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAgICAg
Y2FzZXMgPSBbXTsKKworICAgICAgICBpZiAobWF0Y2goJ30nKSkgeworICAgICAgICAgICAgbGV4
KCk7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRp
c2NyaW1pbmFudCwgY2FzZXMpOworICAgICAgICB9CisKKyAgICAgICAgb2xkSW5Td2l0Y2ggPSBz
dGF0ZS5pblN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSB0cnVlOworICAgICAgICBk
ZWZhdWx0Rm91bmQgPSBmYWxzZTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsK
KyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjbGF1c2UgPSBwYXJzZVN3aXRjaENhc2UoKTsKKyAg
ICAgICAgICAgIGlmIChjbGF1c2UudGVzdCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlm
IChkZWZhdWx0Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVz
c2FnZXMuTXVsdGlwbGVEZWZhdWx0c0luU3dpdGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZGVmYXVsdEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2VzLnB1c2goY2xhdXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRlLmluU3dp
dGNoID0gb2xkSW5Td2l0Y2g7CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLmNyZWF0ZVN3aXRjaFN0YXRlbWVudChkaXNjcmltaW5hbnQsIGNhc2VzKTsK
KyAgICB9CisKKyAgICAvLyAxMi4xMyBUaGUgdGhyb3cgc3RhdGVtZW50CisKKyAgICBmdW5jdGlv
biBwYXJzZVRocm93U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgYXJndW1lbnQ7CisKKyAgICAg
ICAgZXhwZWN0S2V5d29yZCgndGhyb3cnKTsKKworICAgICAgICBpZiAocGVla0xpbmVUZXJtaW5h
dG9yKCkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5ld2xpbmVBZnRl
clRocm93KTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9u
KCk7CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxl
Z2F0ZS5jcmVhdGVUaHJvd1N0YXRlbWVudChhcmd1bWVudCk7CisgICAgfQorCisgICAgLy8gMTIu
MTQgVGhlIHRyeSBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlQ2F0Y2hDbGF1c2UoKSB7
CisgICAgICAgIHZhciBwYXJhbSwgYm9keSwgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRv
a2VuID0gbG9va2FoZWFkOworICAgICAgICBleHBlY3RLZXl3b3JkKCdjYXRjaCcpOworCisgICAg
ICAgIGV4cGVjdCgnKCcpOworICAgICAgICBpZiAobWF0Y2goJyknKSkgeworICAgICAgICAgICAg
dGhyb3dVbmV4cGVjdGVkKGxvb2thaGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBwYXJhbSA9
IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCk7CisgICAgICAgIC8vIDEyLjE0LjEKKyAgICAgICAg
aWYgKHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKHBhcmFtLm5hbWUpKSB7CisgICAgICAgICAg
ICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdENhdGNoVmFyaWFibGUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisgICAgICAgIGJvZHkgPSBwYXJzZUJs
b2NrKCk7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUNh
dGNoQ2xhdXNlKHBhcmFtLCBib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcGFyc2VUcnlTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBibG9jaywgaGFuZGxlcnMgPSBb
XSwgZmluYWxpemVyID0gbnVsbDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCd0cnknKTsKKwor
ICAgICAgICBibG9jayA9IHBhcnNlQmxvY2soKTsKKworICAgICAgICBpZiAobWF0Y2hLZXl3b3Jk
KCdjYXRjaCcpKSB7CisgICAgICAgICAgICBoYW5kbGVycy5wdXNoKHBhcnNlQ2F0Y2hDbGF1c2Uo
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hLZXl3b3JkKCdmaW5hbGx5JykpIHsK
KyAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgZmluYWxpemVyID0gcGFyc2VCbG9jaygp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhbmRsZXJzLmxlbmd0aCA9PT0gMCAmJiAhZmlu
YWxpemVyKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Ob0NhdGNoT3JG
aW5hbGx5KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVUcnlT
dGF0ZW1lbnQoYmxvY2ssIFtdLCBoYW5kbGVycywgZmluYWxpemVyKTsKKyAgICB9CisKKyAgICAv
LyAxMi4xNSBUaGUgZGVidWdnZXIgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZURlYnVn
Z2VyU3RhdGVtZW50KCkgeworICAgICAgICBleHBlY3RLZXl3b3JkKCdkZWJ1Z2dlcicpOworCisg
ICAgICAgIGNvbnN1bWVTZW1pY29sb24oKTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3Jl
YXRlRGVidWdnZXJTdGF0ZW1lbnQoKTsKKyAgICB9CisKKyAgICAvLyAxMiBTdGF0ZW1lbnRzCisK
KyAgICBmdW5jdGlvbiBwYXJzZVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIHR5cGUgPSBsb29r
YWhlYWQudHlwZSwKKyAgICAgICAgICAgIGV4cHIsCisgICAgICAgICAgICBsYWJlbGVkQm9keSwK
KyAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIHN0YXJ0VG9rZW47CisKKyAgICAgICAgaWYg
KHR5cGUgPT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKGxvb2th
aGVhZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRv
ciAmJiBsb29rYWhlYWQudmFsdWUgPT09ICd7JykgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNl
QmxvY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisK
KyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICc7JzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUVtcHR5U3RhdGVtZW50KCksIHN0
YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGRlbGVnYXRlLm1hcmtFbmQocGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4p
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgY2Fz
ZSAnYnJlYWsnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNl
QnJlYWtTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdjb250aW51
ZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VDb250aW51
ZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2RlYnVnZ2VyJzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZURlYnVnZ2VyU3Rh
dGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZG8nOgorICAgICAgICAg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRG9XaGlsZVN0YXRlbWVudCgpLCBz
dGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2Zvcic6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VGb3JTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7Cisg
ICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVn
YXRlLm1hcmtFbmQocGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCksIHN0YXJ0VG9rZW4pOworICAg
ICAgICAgICAgY2FzZSAnaWYnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKHBhcnNlSWZTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdy
ZXR1cm4nOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlUmV0
dXJuU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnc3dpdGNoJzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVN3aXRjaFN0YXRl
bWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3Rocm93JzoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRocm93U3RhdGVtZW50KCksIHN0
YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAndHJ5JzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVRyeVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAg
ICAgICAgICAgIGNhc2UgJ3Zhcic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1h
cmtFbmQocGFyc2VWYXJpYWJsZVN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAg
IGNhc2UgJ3doaWxlJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChw
YXJzZVdoaWxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnd2l0
aCc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VXaXRoU3Rh
dGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cHIgPSBw
YXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICAvLyAxMi4xMiBMYWJlbGxlZCBTdGF0ZW1lbnRz
CisgICAgICAgIGlmICgoZXhwci50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgJiYgbWF0Y2go
JzonKSkgeworICAgICAgICAgICAgbGV4KCk7CisKKyAgICAgICAgICAgIGtleSA9ICckJyArIGV4
cHIubmFtZTsKKyAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5SZWRlY2xhcmF0aW9uLCAnTGFiZWwnLCBleHByLm5hbWUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzdGF0ZS5sYWJlbFNldFtrZXldID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGxhYmVsZWRCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIGRlbGV0
ZSBzdGF0ZS5sYWJlbFNldFtrZXldOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtF
bmQoZGVsZWdhdGUuY3JlYXRlTGFiZWxlZFN0YXRlbWVudChleHByLCBsYWJlbGVkQm9keSksIHN0
YXJ0VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUV4cHJlc3Npb25T
dGF0ZW1lbnQoZXhwciksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIC8vIDEzIEZ1bmN0aW9u
IERlZmluaXRpb24KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25Tb3VyY2VFbGVtZW50cygp
IHsKKyAgICAgICAgdmFyIHNvdXJjZUVsZW1lbnQsIHNvdXJjZUVsZW1lbnRzID0gW10sIHRva2Vu
LCBkaXJlY3RpdmUsIGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG9sZExhYmVsU2V0LCBv
bGRJbkl0ZXJhdGlvbiwgb2xkSW5Td2l0Y2gsIG9sZEluRnVuY3Rpb25Cb2R5LCBzdGFydFRva2Vu
OworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4cGVjdCgneycp
OworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGxv
b2thaGVhZC50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKwor
ICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAg
ICAgICAgc291cmNlRWxlbWVudHMucHVzaChzb3VyY2VFbGVtZW50KTsKKyAgICAgICAgICAgIGlm
IChzb3VyY2VFbGVtZW50LmV4cHJlc3Npb24udHlwZSAhPT0gU3ludGF4LkxpdGVyYWwpIHsKKyAg
ICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBkaXJlY3RpdmUKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdGl2ZSA9IHNvdXJjZS5zbGlj
ZSh0b2tlbi5zdGFydCArIDEsIHRva2VuLmVuZCAtIDEpOworICAgICAgICAgICAgaWYgKGRpcmVj
dGl2ZSA9PT0gJ3VzZSBzdHJpY3QnKSB7CisgICAgICAgICAgICAgICAgc3RyaWN0ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBpZiAoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudChmaXJzdFJlc3RyaWN0ZWQsIE1lc3NhZ2VzLlN0cmljdE9j
dGFsTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIWZpcnN0UmVzdHJpY3RlZCAmJiB0b2tlbi5vY3RhbCkgeworICAg
ICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvbGRMYWJlbFNldCA9IHN0
YXRlLmxhYmVsU2V0OworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9u
OworICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dpdGNoOworICAgICAgICBvbGRJbkZ1
bmN0aW9uQm9keSA9IHN0YXRlLmluRnVuY3Rpb25Cb2R5OworCisgICAgICAgIHN0YXRlLmxhYmVs
U2V0ID0ge307CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gZmFsc2U7CisgICAgICAgIHN0
YXRlLmluU3dpdGNoID0gZmFsc2U7CisgICAgICAgIHN0YXRlLmluRnVuY3Rpb25Cb2R5ID0gdHJ1
ZTsKKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmICht
YXRjaCgnfScpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAg
ICBpZiAodHlwZW9mIHNvdXJjZUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5w
dXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgZXhwZWN0KCd9Jyk7CisK
KyAgICAgICAgc3RhdGUubGFiZWxTZXQgPSBvbGRMYWJlbFNldDsKKyAgICAgICAgc3RhdGUuaW5J
dGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJ
blN3aXRjaDsKKyAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSBvbGRJbkZ1bmN0aW9uQm9k
eTsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVCbG9j
a1N0YXRlbWVudChzb3VyY2VFbGVtZW50cyksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHBhcnNlUGFyYW1zKGZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICB2YXIgcGFyYW0s
IHBhcmFtcyA9IFtdLCB0b2tlbiwgc3RyaWN0ZWQsIHBhcmFtU2V0LCBrZXksIG1lc3NhZ2U7Cisg
ICAgICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmICghbWF0Y2goJyknKSkgeworICAgICAg
ICAgICAgcGFyYW1TZXQgPSB7fTsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkg
eworICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgICAgIHBh
cmFtID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgICAgICAgICBrZXkgPSAn
JCcgKyB0b2tlbi52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv
cGVydHkuY2FsbChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
aWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdl
cy5TdHJpY3RQYXJhbUR1cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCFmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJhbU5hbWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs
bChwYXJhbVNldCwga2V5KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmlj
dGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMu
U3RyaWN0UGFyYW1EdXBlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcmFtKTsKKyAgICAgICAgICAgICAgICBw
YXJhbVNldFtrZXldID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyknKSkgewor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBl
eHBlY3QoJyknKTsKKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgcGFyYW1zOiBwYXJh
bXMsCisgICAgICAgICAgICBzdHJpY3RlZDogc3RyaWN0ZWQsCisgICAgICAgICAgICBmaXJzdFJl
c3RyaWN0ZWQ6IGZpcnN0UmVzdHJpY3RlZCwKKyAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UK
KyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRp
b24oKSB7CisgICAgICAgIHZhciBpZCwgcGFyYW1zID0gW10sIGJvZHksIHRva2VuLCBzdHJpY3Rl
ZCwgdG1wLCBmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UsIHByZXZpb3VzU3RyaWN0LCBzdGFydFRv
a2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisKKyAgICAgICAgZXhwZWN0
S2V5d29yZCgnZnVuY3Rpb24nKTsKKyAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAg
IGlkID0gcGFyc2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKHN0cmljdCkgewor
ICAgICAgICAgICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHRva2VuLCBNZXNzYWdlcy5TdHJpY3RGdW5jdGlv
bk5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RS
ZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0
cmljdEZ1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpY3RNb2RlUmVz
ZXJ2ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIGZpcnN0UmVzdHJpY3Rl
ZCA9IHRva2VuOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNl
cnZlZFdvcmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0bXAgPSBwYXJz
ZVBhcmFtcyhmaXJzdFJlc3RyaWN0ZWQpOworICAgICAgICBwYXJhbXMgPSB0bXAucGFyYW1zOwor
ICAgICAgICBzdHJpY3RlZCA9IHRtcC5zdHJpY3RlZDsKKyAgICAgICAgZmlyc3RSZXN0cmljdGVk
ID0gdG1wLmZpcnN0UmVzdHJpY3RlZDsKKyAgICAgICAgaWYgKHRtcC5tZXNzYWdlKSB7CisgICAg
ICAgICAgICBtZXNzYWdlID0gdG1wLm1lc3NhZ2U7CisgICAgICAgIH0KKworICAgICAgICBwcmV2
aW91c1N0cmljdCA9IHN0cmljdDsKKyAgICAgICAgYm9keSA9IHBhcnNlRnVuY3Rpb25Tb3VyY2VF
bGVtZW50cygpOworICAgICAgICBpZiAoc3RyaWN0ICYmIGZpcnN0UmVzdHJpY3RlZCkgeworICAg
ICAgICAgICAgdGhyb3dFcnJvcihmaXJzdFJlc3RyaWN0ZWQsIG1lc3NhZ2UpOworICAgICAgICB9
CisgICAgICAgIGlmIChzdHJpY3QgJiYgc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJy
b3JUb2xlcmFudChzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyaWN0
ID0gcHJldmlvdXNTdHJpY3Q7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVs
ZWdhdGUuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihpZCwgcGFyYW1zLCBbXSwgYm9keSksIHN0
YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25FeHByZXNzaW9u
KCkgeworICAgICAgICB2YXIgdG9rZW4sIGlkID0gbnVsbCwgc3RyaWN0ZWQsIGZpcnN0UmVzdHJp
Y3RlZCwgbWVzc2FnZSwgdG1wLCBwYXJhbXMgPSBbXSwgYm9keSwgcHJldmlvdXNTdHJpY3QsIHN0
YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhw
ZWN0S2V5d29yZCgnZnVuY3Rpb24nKTsKKworICAgICAgICBpZiAoIW1hdGNoKCcoJykpIHsKKyAg
ICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgaWQgPSBwYXJzZVZhcmlh
YmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgaWYgKHN0cmljdCkgeworICAgICAgICAgICAg
ICAgIGlmIChpc1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAg
ICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFt
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgPSBNZXNzYWdlcy5TdHJpY3RGdW5jdGlvbk5hbWU7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZp
cnN0UmVzdHJpY3RlZCk7CisgICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7CisgICAgICAgIHN0
cmljdGVkID0gdG1wLnN0cmljdGVkOworICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmly
c3RSZXN0cmljdGVkOworICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1l
c3NhZ2UgPSB0bXAubWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZpb3VzU3RyaWN0
ID0gc3RyaWN0OworICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7
CisgICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHN0cmljdCAmJiBzdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KHN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpY3QgPSBwcmV2aW91
c1N0cmljdDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVh
dGVGdW5jdGlvbkV4cHJlc3Npb24oaWQsIHBhcmFtcywgW10sIGJvZHkpLCBzdGFydFRva2VuKTsK
KyAgICB9CisKKyAgICAvLyAxNCBQcm9ncmFtCisKKyAgICBmdW5jdGlvbiBwYXJzZVNvdXJjZUVs
ZW1lbnQoKSB7CisgICAgICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uS2V5d29yZCkg
eworICAgICAgICAgICAgc3dpdGNoIChsb29rYWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAgIGNh
c2UgJ2NvbnN0JzoKKyAgICAgICAgICAgIGNhc2UgJ2xldCc6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlvbihsb29rYWhlYWQudmFsdWUpOworICAgICAgICAg
ICAgY2FzZSAnZnVuY3Rpb24nOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9u
RGVjbGFyYXRpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgcmV0dXJu
IHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJz
ZVNvdXJjZUVsZW1lbnRzKCkgeworICAgICAgICB2YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxl
bWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2ZSwgZmlyc3RSZXN0cmljdGVkOworCisgICAgICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7
CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgewor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzb3Vy
Y2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBzb3VyY2VFbGVt
ZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHNvdXJjZUVsZW1lbnQu
ZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIC8v
IHRoaXMgaXMgbm90IGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0ICsg
MSwgdG9rZW4uZW5kIC0gMSk7CisgICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAndXNlIHN0
cmljdCcpIHsKKyAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOworICAgICAgICAgICAgICAg
IGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRv
bGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlm
ICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7CisgICAgICAgICAgICAgICAgICAg
IGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAg
ICAgICAgc291cmNlRWxlbWVudCA9IHBhcnNlU291cmNlRWxlbWVudCgpOworICAgICAgICAgICAg
LyogaXN0YW5idWwgaWdub3JlIGlmICovCisgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZUVs
ZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzb3VyY2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzb3VyY2VFbGVtZW50czsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwYXJzZVByb2dyYW0oKSB7CisgICAgICAgIHZhciBib2R5LCBzdGFydFRva2VuOwor
CisgICAgICAgIHNraXBDb21tZW50KCk7CisgICAgICAgIHBlZWsoKTsKKyAgICAgICAgc3RhcnRU
b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgc3RyaWN0ID0gZmFsc2U7CisKKyAgICAgICAgYm9k
eSA9IHBhcnNlU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtF
bmQoZGVsZWdhdGUuY3JlYXRlUHJvZ3JhbShib2R5KSwgc3RhcnRUb2tlbik7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZmlsdGVyVG9rZW5Mb2NhdGlvbigpIHsKKyAgICAgICAgdmFyIGksIGVudHJ5
LCB0b2tlbiwgdG9rZW5zID0gW107CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4dHJhLnRv
a2Vucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZW50cnkgPSBleHRyYS50b2tlbnNbaV07
CisgICAgICAgICAgICB0b2tlbiA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBlbnRyeS50eXBl
LAorICAgICAgICAgICAgICAgIHZhbHVlOiBlbnRyeS52YWx1ZQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGlmIChleHRyYS5yYW5nZSkgeworICAgICAgICAgICAgICAgIHRva2VuLnJhbmdl
ID0gZW50cnkucmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXh0cmEubG9j
KSB7CisgICAgICAgICAgICAgICAgdG9rZW4ubG9jID0gZW50cnkubG9jOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAg
ZXh0cmEudG9rZW5zID0gdG9rZW5zOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRva2VuaXplKGNv
ZGUsIG9wdGlvbnMpIHsKKyAgICAgICAgdmFyIHRvU3RyaW5nLAorICAgICAgICAgICAgdG9rZW4s
CisgICAgICAgICAgICB0b2tlbnM7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7CisgICAg
ICAgIGlmICh0eXBlb2YgY29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2YgU3Ry
aW5nKSkgeworICAgICAgICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9CisK
KyAgICAgICAgZGVsZWdhdGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJjZSA9
IGNvZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2Uu
bGVuZ3RoID4gMCkgPyAxIDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgbGVu
Z3RoID0gc291cmNlLmxlbmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAg
c3RhdGUgPSB7CisgICAgICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFiZWxT
ZXQ6IHt9LAorICAgICAgICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAgICAg
aW5JdGVyYXRpb246IGZhbHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAgICAg
ICAgICAgbGFzdENvbW1lbnRTdGFydDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRyYSA9
IHt9OworCisgICAgICAgIC8vIE9wdGlvbnMgbWF0Y2hpbmcuCisgICAgICAgIG9wdGlvbnMgPSBv
cHRpb25zIHx8IHt9OworCisgICAgICAgIC8vIE9mIGNvdXJzZSB3ZSBjb2xsZWN0IHRva2VucyBo
ZXJlLgorICAgICAgICBvcHRpb25zLnRva2VucyA9IHRydWU7CisgICAgICAgIGV4dHJhLnRva2Vu
cyA9IFtdOworICAgICAgICBleHRyYS50b2tlbml6ZSA9IHRydWU7CisgICAgICAgIC8vIFRoZSBm
b2xsb3dpbmcgdHdvIGZpZWxkcyBhcmUgbmVjZXNzYXJ5IHRvIGNvbXB1dGUgdGhlIFJlZ2V4IHRv
a2Vucy4KKyAgICAgICAgZXh0cmEub3BlblBhcmVuVG9rZW4gPSAtMTsKKyAgICAgICAgZXh0cmEu
b3BlbkN1cmx5VG9rZW4gPSAtMTsKKworICAgICAgICBleHRyYS5yYW5nZSA9ICh0eXBlb2Ygb3B0
aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJhbmdlOworICAgICAgICBleHRy
YS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMubG9j
OworCisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAnYm9vbGVhbicgJiYg
b3B0aW9ucy5jb21tZW50KSB7CisgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOworICAg
ICAgICB9CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4n
ICYmIG9wdGlvbnMudG9sZXJhbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmVycm9ycyA9IFtdOwor
ICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBlZWsoKTsKKyAgICAgICAg
ICAgIGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9rZW4g
PSBsZXgoKTsKKyAgICAgICAgICAgIHdoaWxlIChsb29rYWhlYWQudHlwZSAhPT0gVG9rZW4uRU9G
KSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBs
ZXgoKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChsZXhFcnJvcikgeworICAgICAgICAgICAg
ICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJh
LmVycm9ycykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2gobGV4
RXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBicmVhayBvbiB0
aGUgZmlyc3QgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGluZmlu
aXRlIGxvb3BzLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBsZXhFcnJvcjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZmlsdGVyVG9rZW5Mb2NhdGlvbigpOworICAgICAgICAgICAgdG9rZW5z
ID0gZXh0cmEudG9rZW5zOworICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAh
PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMuY29tbWVudHMgPSBleHRy
YS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgZXh0cmEu
ZXJyb3JzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHRva2Vucy5lcnJvcnMg
PSBleHRyYS5lcnJvcnM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBleHRy
YSA9IHt9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b2tlbnM7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gcGFyc2UoY29kZSwgb3B0aW9ucykgeworICAgICAgICB2YXIgcHJvZ3JhbSwgdG9T
dHJpbmc7CisKKyAgICAgICAgdG9TdHJpbmcgPSBTdHJpbmc7CisgICAgICAgIGlmICh0eXBlb2Yg
Y29kZSAhPT0gJ3N0cmluZycgJiYgIShjb2RlIGluc3RhbmNlb2YgU3RyaW5nKSkgeworICAgICAg
ICAgICAgY29kZSA9IHRvU3RyaW5nKGNvZGUpOworICAgICAgICB9CisKKyAgICAgICAgZGVsZWdh
dGUgPSBTeW50YXhUcmVlRGVsZWdhdGU7CisgICAgICAgIHNvdXJjZSA9IGNvZGU7CisgICAgICAg
IGluZGV4ID0gMDsKKyAgICAgICAgbGluZU51bWJlciA9IChzb3VyY2UubGVuZ3RoID4gMCkgPyAx
IDogMDsKKyAgICAgICAgbGluZVN0YXJ0ID0gMDsKKyAgICAgICAgbGVuZ3RoID0gc291cmNlLmxl
bmd0aDsKKyAgICAgICAgbG9va2FoZWFkID0gbnVsbDsKKyAgICAgICAgc3RhdGUgPSB7CisgICAg
ICAgICAgICBhbGxvd0luOiB0cnVlLAorICAgICAgICAgICAgbGFiZWxTZXQ6IHt9LAorICAgICAg
ICAgICAgaW5GdW5jdGlvbkJvZHk6IGZhbHNlLAorICAgICAgICAgICAgaW5JdGVyYXRpb246IGZh
bHNlLAorICAgICAgICAgICAgaW5Td2l0Y2g6IGZhbHNlLAorICAgICAgICAgICAgbGFzdENvbW1l
bnRTdGFydDogLTEKKyAgICAgICAgfTsKKworICAgICAgICBleHRyYSA9IHt9OworICAgICAgICBp
ZiAodHlwZW9mIG9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICBleHRyYS5y
YW5nZSA9ICh0eXBlb2Ygb3B0aW9ucy5yYW5nZSA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25zLnJh
bmdlOworICAgICAgICAgICAgZXh0cmEubG9jID0gKHR5cGVvZiBvcHRpb25zLmxvYyA9PT0gJ2Jv
b2xlYW4nKSAmJiBvcHRpb25zLmxvYzsKKyAgICAgICAgICAgIGV4dHJhLmF0dGFjaENvbW1lbnQg
PSAodHlwZW9mIG9wdGlvbnMuYXR0YWNoQ29tbWVudCA9PT0gJ2Jvb2xlYW4nKSAmJiBvcHRpb25z
LmF0dGFjaENvbW1lbnQ7CisKKyAgICAgICAgICAgIGlmIChleHRyYS5sb2MgJiYgb3B0aW9ucy5z
b3VyY2UgIT09IG51bGwgJiYgb3B0aW9ucy5zb3VyY2UgIT09IHVuZGVmaW5lZCkgeworICAgICAg
ICAgICAgICAgIGV4dHJhLnNvdXJjZSA9IHRvU3RyaW5nKG9wdGlvbnMuc291cmNlKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRva2VucyA9PT0gJ2Jv
b2xlYW4nICYmIG9wdGlvbnMudG9rZW5zKSB7CisgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5z
ID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29t
bWVudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuY29tbWVudCkgeworICAgICAgICAgICAgICAg
IGV4dHJhLmNvbW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodHlw
ZW9mIG9wdGlvbnMudG9sZXJhbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLnRvbGVyYW50KSB7
CisgICAgICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZXh0cmEuYXR0YWNoQ29tbWVudCkgeworICAgICAgICAgICAgICAgIGV4dHJh
LnJhbmdlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBleHRyYS5jb21tZW50cyA9IFtdOworICAg
ICAgICAgICAgICAgIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2sgPSBbXTsKKyAgICAgICAgICAgICAg
ICBleHRyYS50cmFpbGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICAgICAgZXh0cmEubGVh
ZGluZ0NvbW1lbnRzID0gW107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0
cnkgeworICAgICAgICAgICAgcHJvZ3JhbSA9IHBhcnNlUHJvZ3JhbSgpOworICAgICAgICAgICAg
aWYgKHR5cGVvZiBleHRyYS5jb21tZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAg
ICAgICBwcm9ncmFtLmNvbW1lbnRzID0gZXh0cmEuY29tbWVudHM7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAg
ICAgICAgICAgICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgcHJv
Z3JhbS50b2tlbnMgPSBleHRyYS50b2tlbnM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodHlwZW9mIGV4dHJhLmVycm9ycyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAg
ICBwcm9ncmFtLmVycm9ycyA9IGV4dHJhLmVycm9yczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfSBmaW5hbGx5IHsK
KyAgICAgICAgICAgIGV4dHJhID0ge307CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcHJv
Z3JhbTsKKyAgICB9CisKKyAgICAvLyBTeW5jIHdpdGggKi5qc29uIG1hbmlmZXN0cy4KKyAgICBl
eHBvcnRzLnZlcnNpb24gPSAnMS4yLjInOworCisgICAgZXhwb3J0cy50b2tlbml6ZSA9IHRva2Vu
aXplOworCisgICAgZXhwb3J0cy5wYXJzZSA9IHBhcnNlOworCisgICAgLy8gRGVlcCBjb3B5Lgor
ICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8KKyAgICBleHBvcnRzLlN5bnRheCA9IChmdW5j
dGlvbiAoKSB7CisgICAgICAgIHZhciBuYW1lLCB0eXBlcyA9IHt9OworCisgICAgICAgIGlmICh0
eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICAgICAgdHlwZXMg
PSBPYmplY3QuY3JlYXRlKG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChuYW1lIGlu
IFN5bnRheCkgeworICAgICAgICAgICAgaWYgKFN5bnRheC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkg
eworICAgICAgICAgICAgICAgIHR5cGVzW25hbWVdID0gU3ludGF4W25hbWVdOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZnJlZXplID09PSAn
ZnVuY3Rpb24nKSB7CisgICAgICAgICAgICBPYmplY3QuZnJlZXplKHR5cGVzKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiB0eXBlczsKKyAgICB9KCkpOworCit9KSk7CisvKiB2aW06IHNl
dCBzdz00IHRzPTQgZXQgdHc9ODAgOiAqLworCit9LHt9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qCisgIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhp
ZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBB
TlkKKyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworLypqc2xpbnQgdmFyczpmYWxzZSwgYml0d2lzZTp0cnVlKi8KKy8qanNoaW50
IGluZGVudDo0Ki8KKy8qZ2xvYmFsIGV4cG9ydHM6dHJ1ZSwgZGVmaW5lOnRydWUqLworKGZ1bmN0
aW9uIChyb290LCBmYWN0b3J5KSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgLy8gVW5pdmVy
c2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2Rl
LmpzLAorICAgIC8vIGFuZCBwbGFpbiBicm93c2VyIGxvYWRpbmcsCisgICAgaWYgKHR5cGVvZiBk
ZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeworICAgICAgICBkZWZpbmUoWydl
eHBvcnRzJ10sIGZhY3RvcnkpOworICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1
bmRlZmluZWQnKSB7CisgICAgICAgIGZhY3RvcnkoZXhwb3J0cyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZmFjdG9yeSgocm9vdC5lc3RyYXZlcnNlID0ge30pKTsKKyAgICB9Cit9KHRoaXMsIGZ1
bmN0aW9uIChleHBvcnRzKSB7CisgICAgJ3VzZSBzdHJpY3QnOworCisgICAgdmFyIFN5bnRheCwK
KyAgICAgICAgaXNBcnJheSwKKyAgICAgICAgVmlzaXRvck9wdGlvbiwKKyAgICAgICAgVmlzaXRv
cktleXMsCisgICAgICAgIEJSRUFLLAorICAgICAgICBTS0lQOworCisgICAgU3ludGF4ID0gewor
ICAgICAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJywKKyAg
ICAgICAgQXJyYXlFeHByZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywKKyAgICAgICAgQXJyYXlQ
YXR0ZXJuOiAnQXJyYXlQYXR0ZXJuJywKKyAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246
ICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxv
Y2tTdGF0ZW1lbnQnLAorICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lv
bicsCisgICAgICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorICAgICAgICBD
YWxsRXhwcmVzc2lvbjogJ0NhbGxFeHByZXNzaW9uJywKKyAgICAgICAgQ2F0Y2hDbGF1c2U6ICdD
YXRjaENsYXVzZScsCisgICAgICAgIENsYXNzQm9keTogJ0NsYXNzQm9keScsCisgICAgICAgIENs
YXNzRGVjbGFyYXRpb246ICdDbGFzc0RlY2xhcmF0aW9uJywKKyAgICAgICAgQ2xhc3NFeHByZXNz
aW9uOiAnQ2xhc3NFeHByZXNzaW9uJywKKyAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAn
Q29uZGl0aW9uYWxFeHByZXNzaW9uJywKKyAgICAgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250
aW51ZVN0YXRlbWVudCcsCisgICAgICAgIERlYnVnZ2VyU3RhdGVtZW50OiAnRGVidWdnZXJTdGF0
ZW1lbnQnLAorICAgICAgICBEaXJlY3RpdmVTdGF0ZW1lbnQ6ICdEaXJlY3RpdmVTdGF0ZW1lbnQn
LAorICAgICAgICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsCisgICAgICAg
IEVtcHR5U3RhdGVtZW50OiAnRW1wdHlTdGF0ZW1lbnQnLAorICAgICAgICBFeHByZXNzaW9uU3Rh
dGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgICAgIEZvclN0YXRlbWVudDogJ0Zv
clN0YXRlbWVudCcsCisgICAgICAgIEZvckluU3RhdGVtZW50OiAnRm9ySW5TdGF0ZW1lbnQnLAor
ICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAnRnVuY3Rpb25EZWNsYXJhdGlvbicsCisgICAg
ICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgICAgIElk
ZW50aWZpZXI6ICdJZGVudGlmaWVyJywKKyAgICAgICAgSWZTdGF0ZW1lbnQ6ICdJZlN0YXRlbWVu
dCcsCisgICAgICAgIExpdGVyYWw6ICdMaXRlcmFsJywKKyAgICAgICAgTGFiZWxlZFN0YXRlbWVu
dDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAorICAgICAgICBMb2dpY2FsRXhwcmVzc2lvbjogJ0xvZ2lj
YWxFeHByZXNzaW9uJywKKyAgICAgICAgTWVtYmVyRXhwcmVzc2lvbjogJ01lbWJlckV4cHJlc3Np
b24nLAorICAgICAgICBNZXRob2REZWZpbml0aW9uOiAnTWV0aG9kRGVmaW5pdGlvbicsCisgICAg
ICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNzaW9uJywKKyAgICAgICAgT2JqZWN0RXhwcmVz
c2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgICAgICBPYmplY3RQYXR0ZXJuOiAnT2JqZWN0
UGF0dGVybicsCisgICAgICAgIFByb2dyYW06ICdQcm9ncmFtJywKKyAgICAgICAgUHJvcGVydHk6
ICdQcm9wZXJ0eScsCisgICAgICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcs
CisgICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lvbicsCisgICAg
ICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCisgICAgICAgIFN3aXRjaENh
c2U6ICdTd2l0Y2hDYXNlJywKKyAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlzRXhwcmVzc2lv
bicsCisgICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAorICAgICAgICBU
cnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgICAgICBVbmFyeUV4cHJlc3Npb246ICdV
bmFyeUV4cHJlc3Npb24nLAorICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBkYXRlRXhwcmVz
c2lvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURlY2xhcmF0aW9u
JywKKyAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJhdG9yJywKKyAg
ICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCisgICAgICAgIFdpdGhTdGF0
ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JywKKyAgICAgICAgWWllbGRFeHByZXNzaW9uOiAnWWllbGRF
eHByZXNzaW9uJworICAgIH07CisKKyAgICBmdW5jdGlvbiBpZ25vcmVKU0hpbnRFcnJvcigpIHsg
fQorCisgICAgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7CisgICAgaWYgKCFpc0FycmF5KSB7Cisg
ICAgICAgIGlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KGFycmF5KSB7CisgICAgICAgICAgICBy
ZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFycmF5KSA9PT0gJ1tvYmplY3Qg
QXJyYXldJzsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkZWVwQ29weShvYmop
IHsKKyAgICAgICAgdmFyIHJldCA9IHt9LCBrZXksIHZhbDsKKyAgICAgICAgZm9yIChrZXkgaW4g
b2JqKSB7CisgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAgICAg
ICAgICAgICAgICB2YWwgPSBvYmpba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZh
bCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dFtrZXldID0gZGVlcENvcHkodmFsKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICByZXRba2V5XSA9IHZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBzaGFsbG93Q29weShvYmopIHsKKyAgICAgICAgdmFyIHJldCA9IHt9LCBrZXk7CisgICAg
ICAgIGZvciAoa2V5IGluIG9iaikgeworICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0
eShrZXkpKSB7CisgICAgICAgICAgICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZ25vcmVK
U0hpbnRFcnJvcihzaGFsbG93Q29weSk7CisKKyAgICAvLyBiYXNlZCBvbiBMTFZNIGxpYmMrKyB1
cHBlcl9ib3VuZCAvIGxvd2VyX2JvdW5kCisgICAgLy8gTUlUIExpY2Vuc2UKKworICAgIGZ1bmN0
aW9uIHVwcGVyQm91bmQoYXJyYXksIGZ1bmMpIHsKKyAgICAgICAgdmFyIGRpZmYsIGxlbiwgaSwg
Y3VycmVudDsKKworICAgICAgICBsZW4gPSBhcnJheS5sZW5ndGg7CisgICAgICAgIGkgPSAwOwor
CisgICAgICAgIHdoaWxlIChsZW4pIHsKKyAgICAgICAgICAgIGRpZmYgPSBsZW4gPj4+IDE7Cisg
ICAgICAgICAgICBjdXJyZW50ID0gaSArIGRpZmY7CisgICAgICAgICAgICBpZiAoZnVuYyhhcnJh
eVtjdXJyZW50XSkpIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBkaWZmOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpID0gY3VycmVudCArIDE7CisgICAgICAgICAgICAg
ICAgbGVuIC09IGRpZmYgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvd2VyQm91bmQoYXJyYXksIGZ1bmMpIHsK
KyAgICAgICAgdmFyIGRpZmYsIGxlbiwgaSwgY3VycmVudDsKKworICAgICAgICBsZW4gPSBhcnJh
eS5sZW5ndGg7CisgICAgICAgIGkgPSAwOworCisgICAgICAgIHdoaWxlIChsZW4pIHsKKyAgICAg
ICAgICAgIGRpZmYgPSBsZW4gPj4+IDE7CisgICAgICAgICAgICBjdXJyZW50ID0gaSArIGRpZmY7
CisgICAgICAgICAgICBpZiAoZnVuYyhhcnJheVtjdXJyZW50XSkpIHsKKyAgICAgICAgICAgICAg
ICBpID0gY3VycmVudCArIDE7CisgICAgICAgICAgICAgICAgbGVuIC09IGRpZmYgKyAxOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBkaWZmOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBpOworICAgIH0KKyAgICBpZ25vcmVKU0hp
bnRFcnJvcihsb3dlckJvdW5kKTsKKworICAgIFZpc2l0b3JLZXlzID0geworICAgICAgICBBc3Np
Z25tZW50RXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCisgICAgICAgIEFycmF5RXhwcmVz
c2lvbjogWydlbGVtZW50cyddLAorICAgICAgICBBcnJheVBhdHRlcm46IFsnZWxlbWVudHMnXSwK
KyAgICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IFsncGFyYW1zJywgJ2RlZmF1bHRzJywg
J3Jlc3QnLCAnYm9keSddLAorICAgICAgICBCbG9ja1N0YXRlbWVudDogWydib2R5J10sCisgICAg
ICAgIEJpbmFyeUV4cHJlc3Npb246IFsnbGVmdCcsICdyaWdodCddLAorICAgICAgICBCcmVha1N0
YXRlbWVudDogWydsYWJlbCddLAorICAgICAgICBDYWxsRXhwcmVzc2lvbjogWydjYWxsZWUnLCAn
YXJndW1lbnRzJ10sCisgICAgICAgIENhdGNoQ2xhdXNlOiBbJ3BhcmFtJywgJ2JvZHknXSwKKyAg
ICAgICAgQ2xhc3NCb2R5OiBbJ2JvZHknXSwKKyAgICAgICAgQ2xhc3NEZWNsYXJhdGlvbjogWydp
ZCcsICdib2R5JywgJ3N1cGVyQ2xhc3MnXSwKKyAgICAgICAgQ2xhc3NFeHByZXNzaW9uOiBbJ2lk
JywgJ2JvZHknLCAnc3VwZXJDbGFzcyddLAorICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb246
IFsndGVzdCcsICdjb25zZXF1ZW50JywgJ2FsdGVybmF0ZSddLAorICAgICAgICBDb250aW51ZVN0
YXRlbWVudDogWydsYWJlbCddLAorICAgICAgICBEZWJ1Z2dlclN0YXRlbWVudDogW10sCisgICAg
ICAgIERpcmVjdGl2ZVN0YXRlbWVudDogW10sCisgICAgICAgIERvV2hpbGVTdGF0ZW1lbnQ6IFsn
Ym9keScsICd0ZXN0J10sCisgICAgICAgIEVtcHR5U3RhdGVtZW50OiBbXSwKKyAgICAgICAgRXhw
cmVzc2lvblN0YXRlbWVudDogWydleHByZXNzaW9uJ10sCisgICAgICAgIEZvclN0YXRlbWVudDog
Wydpbml0JywgJ3Rlc3QnLCAndXBkYXRlJywgJ2JvZHknXSwKKyAgICAgICAgRm9ySW5TdGF0ZW1l
bnQ6IFsnbGVmdCcsICdyaWdodCcsICdib2R5J10sCisgICAgICAgIEZvck9mU3RhdGVtZW50OiBb
J2xlZnQnLCAncmlnaHQnLCAnYm9keSddLAorICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBb
J2lkJywgJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2JvZHknXSwKKyAgICAgICAgRnVu
Y3Rpb25FeHByZXNzaW9uOiBbJ2lkJywgJ3BhcmFtcycsICdkZWZhdWx0cycsICdyZXN0JywgJ2Jv
ZHknXSwKKyAgICAgICAgSWRlbnRpZmllcjogW10sCisgICAgICAgIElmU3RhdGVtZW50OiBbJ3Rl
c3QnLCAnY29uc2VxdWVudCcsICdhbHRlcm5hdGUnXSwKKyAgICAgICAgTGl0ZXJhbDogW10sCisg
ICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6IFsnbGFiZWwnLCAnYm9keSddLAorICAgICAgICBMb2dp
Y2FsRXhwcmVzc2lvbjogWydsZWZ0JywgJ3JpZ2h0J10sCisgICAgICAgIE1lbWJlckV4cHJlc3Np
b246IFsnb2JqZWN0JywgJ3Byb3BlcnR5J10sCisgICAgICAgIE1ldGhvZERlZmluaXRpb246IFsn
a2V5JywgJ3ZhbHVlJ10sCisgICAgICAgIE5ld0V4cHJlc3Npb246IFsnY2FsbGVlJywgJ2FyZ3Vt
ZW50cyddLAorICAgICAgICBPYmplY3RFeHByZXNzaW9uOiBbJ3Byb3BlcnRpZXMnXSwKKyAgICAg
ICAgT2JqZWN0UGF0dGVybjogWydwcm9wZXJ0aWVzJ10sCisgICAgICAgIFByb2dyYW06IFsnYm9k
eSddLAorICAgICAgICBQcm9wZXJ0eTogWydrZXknLCAndmFsdWUnXSwKKyAgICAgICAgUmV0dXJu
U3RhdGVtZW50OiBbJ2FyZ3VtZW50J10sCisgICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogWydl
eHByZXNzaW9ucyddLAorICAgICAgICBTd2l0Y2hTdGF0ZW1lbnQ6IFsnZGlzY3JpbWluYW50Jywg
J2Nhc2VzJ10sCisgICAgICAgIFN3aXRjaENhc2U6IFsndGVzdCcsICdjb25zZXF1ZW50J10sCisg
ICAgICAgIFRoaXNFeHByZXNzaW9uOiBbXSwKKyAgICAgICAgVGhyb3dTdGF0ZW1lbnQ6IFsnYXJn
dW1lbnQnXSwKKyAgICAgICAgVHJ5U3RhdGVtZW50OiBbJ2Jsb2NrJywgJ2hhbmRsZXJzJywgJ2hh
bmRsZXInLCAnZ3VhcmRlZEhhbmRsZXJzJywgJ2ZpbmFsaXplciddLAorICAgICAgICBVbmFyeUV4
cHJlc3Npb246IFsnYXJndW1lbnQnXSwKKyAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogWydhcmd1
bWVudCddLAorICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOiBbJ2RlY2xhcmF0aW9ucyddLAor
ICAgICAgICBWYXJpYWJsZURlY2xhcmF0b3I6IFsnaWQnLCAnaW5pdCddLAorICAgICAgICBXaGls
ZVN0YXRlbWVudDogWyd0ZXN0JywgJ2JvZHknXSwKKyAgICAgICAgV2l0aFN0YXRlbWVudDogWydv
YmplY3QnLCAnYm9keSddLAorICAgICAgICBZaWVsZEV4cHJlc3Npb246IFsnYXJndW1lbnQnXQor
ICAgIH07CisKKyAgICAvLyB1bmlxdWUgaWQKKyAgICBCUkVBSyA9IHt9OworICAgIFNLSVAgPSB7
fTsKKworICAgIFZpc2l0b3JPcHRpb24gPSB7CisgICAgICAgIEJyZWFrOiBCUkVBSywKKyAgICAg
ICAgU2tpcDogU0tJUAorICAgIH07CisKKyAgICBmdW5jdGlvbiBSZWZlcmVuY2UocGFyZW50LCBr
ZXkpIHsKKyAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHRoaXMua2V5ID0g
a2V5OworICAgIH0KKworICAgIFJlZmVyZW5jZS5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9u
IHJlcGxhY2Uobm9kZSkgeworICAgICAgICB0aGlzLnBhcmVudFt0aGlzLmtleV0gPSBub2RlOwor
ICAgIH07CisKKyAgICBmdW5jdGlvbiBFbGVtZW50KG5vZGUsIHBhdGgsIHdyYXAsIHJlZikgewor
ICAgICAgICB0aGlzLm5vZGUgPSBub2RlOworICAgICAgICB0aGlzLnBhdGggPSBwYXRoOworICAg
ICAgICB0aGlzLndyYXAgPSB3cmFwOworICAgICAgICB0aGlzLnJlZiA9IHJlZjsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBDb250cm9sbGVyKCkgeyB9CisKKyAgICAvLyBBUEk6CisgICAgLy8gcmV0
dXJuIHByb3BlcnR5IHBhdGggYXJyYXkgZnJvbSByb290IHRvIGN1cnJlbnQgbm9kZQorICAgIENv
bnRyb2xsZXIucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbiBwYXRoKCkgeworICAgICAgICB2YXIg
aSwgaXosIGosIGp6LCByZXN1bHQsIGVsZW1lbnQ7CisKKyAgICAgICAgZnVuY3Rpb24gYWRkVG9Q
YXRoKHJlc3VsdCwgcGF0aCkgeworICAgICAgICAgICAgaWYgKGlzQXJyYXkocGF0aCkpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqeiA9IHBhdGgubGVuZ3RoOyBqIDwgano7ICsraikg
eworICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwYXRoW2pdKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNo
KHBhdGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gcm9vdCBub2Rl
CisgICAgICAgIGlmICghdGhpcy5fX2N1cnJlbnQucGF0aCkgeworICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgIH0KKworICAgICAgICAvLyBmaXJzdCBub2RlIGlzIHNlbnRpbmVsLCBz
ZWNvbmQgbm9kZSBpcyByb290IGVsZW1lbnQKKyAgICAgICAgcmVzdWx0ID0gW107CisgICAgICAg
IGZvciAoaSA9IDIsIGl6ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7
CisgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy5fX2xlYXZlbGlzdFtpXTsKKyAgICAgICAgICAg
IGFkZFRvUGF0aChyZXN1bHQsIGVsZW1lbnQucGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgYWRk
VG9QYXRoKHJlc3VsdCwgdGhpcy5fX2N1cnJlbnQucGF0aCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfTsKKworICAgIC8vIEFQSToKKyAgICAvLyByZXR1cm4gYXJyYXkgb2YgcGFyZW50
IGVsZW1lbnRzCisgICAgQ29udHJvbGxlci5wcm90b3R5cGUucGFyZW50cyA9IGZ1bmN0aW9uIHBh
cmVudHMoKSB7CisgICAgICAgIHZhciBpLCBpeiwgcmVzdWx0OworCisgICAgICAgIC8vIGZpcnN0
IG5vZGUgaXMgc2VudGluZWwKKyAgICAgICAgcmVzdWx0ID0gW107CisgICAgICAgIGZvciAoaSA9
IDEsIGl6ID0gdGhpcy5fX2xlYXZlbGlzdC5sZW5ndGg7IGkgPCBpejsgKytpKSB7CisgICAgICAg
ICAgICByZXN1bHQucHVzaCh0aGlzLl9fbGVhdmVsaXN0W2ldLm5vZGUpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgLy8gQVBJOgorICAgIC8vIHJl
dHVybiBjdXJyZW50IG5vZGUKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS5jdXJyZW50ID0gZnVu
Y3Rpb24gY3VycmVudCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX19jdXJyZW50Lm5vZGU7Cisg
ICAgfTsKKworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9fZXhlY3V0ZSA9IGZ1bmN0aW9uIF9f
ZXhlY3V0ZShjYWxsYmFjaywgZWxlbWVudCkgeworICAgICAgICB2YXIgcHJldmlvdXMsIHJlc3Vs
dDsKKworICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7CisKKyAgICAgICAgcHJldmlvdXMgID0g
dGhpcy5fX2N1cnJlbnQ7CisgICAgICAgIHRoaXMuX19jdXJyZW50ID0gZWxlbWVudDsKKyAgICAg
ICAgdGhpcy5fX3N0YXRlID0gbnVsbDsKKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBjYWxsYmFjay5jYWxsKHRoaXMsIGVsZW1lbnQubm9kZSwgdGhpcy5fX2xl
YXZlbGlzdFt0aGlzLl9fbGVhdmVsaXN0Lmxlbmd0aCAtIDFdLm5vZGUpOworICAgICAgICB9Cisg
ICAgICAgIHRoaXMuX19jdXJyZW50ID0gcHJldmlvdXM7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9OworCisgICAgLy8gQVBJOgorICAgIC8vIG5vdGlmeSBjb250cm9sIHNraXAgLyBi
cmVhaworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShm
bGFnKSB7CisgICAgICAgIHRoaXMuX19zdGF0ZSA9IGZsYWc7CisgICAgfTsKKworICAgIC8vIEFQ
SToKKyAgICAvLyBza2lwIGNoaWxkIG5vZGVzIG9mIGN1cnJlbnQgbm9kZQorICAgIENvbnRyb2xs
ZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMubm90aWZ5KFNL
SVApOworICAgIH07CisKKyAgICAvLyBBUEk6CisgICAgLy8gYnJlYWsgdHJhdmVyc2FscworICAg
IENvbnRyb2xsZXIucHJvdG90eXBlWydicmVhayddID0gZnVuY3Rpb24gKCkgeworICAgICAgICB0
aGlzLm5vdGlmeShCUkVBSyk7CisgICAgfTsKKworICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl9f
aW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdGhpcy52aXNp
dG9yID0gdmlzaXRvcjsKKyAgICAgICAgdGhpcy5yb290ID0gcm9vdDsKKyAgICAgICAgdGhpcy5f
X3dvcmtsaXN0ID0gW107CisgICAgICAgIHRoaXMuX19sZWF2ZWxpc3QgPSBbXTsKKyAgICAgICAg
dGhpcy5fX2N1cnJlbnQgPSBudWxsOworICAgICAgICB0aGlzLl9fc3RhdGUgPSBudWxsOworICAg
IH07CisKKyAgICBDb250cm9sbGVyLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZl
cnNlKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIHdvcmtsaXN0LAorICAgICAgICAgICAg
bGVhdmVsaXN0LAorICAgICAgICAgICAgZWxlbWVudCwKKyAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICBub2RlVHlwZSwKKyAgICAgICAgICAgIHJldCwKKyAgICAgICAgICAgIGtleSwKKyAg
ICAgICAgICAgIGN1cnJlbnQsCisgICAgICAgICAgICBjdXJyZW50MiwKKyAgICAgICAgICAgIGNh
bmRpZGF0ZXMsCisgICAgICAgICAgICBjYW5kaWRhdGUsCisgICAgICAgICAgICBzZW50aW5lbDsK
KworICAgICAgICB0aGlzLl9faW5pdGlhbGl6ZShyb290LCB2aXNpdG9yKTsKKworICAgICAgICBz
ZW50aW5lbCA9IHt9OworCisgICAgICAgIC8vIHJlZmVyZW5jZQorICAgICAgICB3b3JrbGlzdCA9
IHRoaXMuX193b3JrbGlzdDsKKyAgICAgICAgbGVhdmVsaXN0ID0gdGhpcy5fX2xlYXZlbGlzdDsK
KworICAgICAgICAvLyBpbml0aWFsaXplCisgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1l
bnQocm9vdCwgbnVsbCwgbnVsbCwgbnVsbCkpOworICAgICAgICBsZWF2ZWxpc3QucHVzaChuZXcg
RWxlbWVudChudWxsLCBudWxsLCBudWxsLCBudWxsKSk7CisKKyAgICAgICAgd2hpbGUgKHdvcmts
aXN0Lmxlbmd0aCkgeworICAgICAgICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpOworCisg
ICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gc2VudGluZWwpIHsKKyAgICAgICAgICAgICAgICBl
bGVtZW50ID0gbGVhdmVsaXN0LnBvcCgpOworCisgICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5f
X2V4ZWN1dGUodmlzaXRvci5sZWF2ZSwgZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCByZXQgPT09IEJSRUFLKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbGVtZW50Lm5vZGUpIHsKKwor
ICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuX19leGVjdXRlKHZpc2l0b3IuZW50ZXIsIGVsZW1l
bnQpOworCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19zdGF0ZSA9PT0gQlJFQUsgfHwgcmV0
ID09PSBCUkVBSykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7CisgICAgICAg
ICAgICAgICAgbGVhdmVsaXN0LnB1c2goZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fX3N0YXRlID09PSBTS0lQIHx8IHJldCA9PT0gU0tJUCkgeworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBub2Rl
ID0gZWxlbWVudC5ub2RlOworICAgICAgICAgICAgICAgIG5vZGVUeXBlID0gZWxlbWVudC53cmFw
IHx8IG5vZGUudHlwZTsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzID0gVmlzaXRvcktleXNb
bm9kZVR5cGVdOworCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVuZ3Ro
OworICAgICAgICAgICAgICAgIHdoaWxlICgoY3VycmVudCAtPSAxKSA+PSAwKSB7CisgICAgICAg
ICAgICAgICAgICAgIGtleSA9IGNhbmRpZGF0ZXNbY3VycmVudF07CisgICAgICAgICAgICAgICAg
ICAgIGNhbmRpZGF0ZSA9IG5vZGVba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5k
aWRhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5KGNhbmRpZGF0ZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2gobmV3IEVsZW1lbnQoY2Fu
ZGlkYXRlLCBrZXksIG51bGwsIG51bGwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dDIgPSBjYW5kaWRhdGUubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGN1cnJl
bnQyIC09IDEpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRl
W2N1cnJlbnQyXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChub2Rl
VHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gfHwgbm9kZVR5cGUgPT09IFN5bnRheC5P
YmplY3RQYXR0ZXJuKSAmJiAncHJvcGVydGllcycgPT09IGNhbmRpZGF0ZXNbY3VycmVudF0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gbmV3IEVsZW1lbnQoY2FuZGlk
YXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJvcGVydHknLCBudWxsKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxlbWVudCA9IG5ldyBFbGVtZW50KGNhbmRpZGF0ZVtjdXJyZW50Ml0sIFtrZXksIGN1cnJlbnQy
XSwgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwor
ICAgIENvbnRyb2xsZXIucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKHJvb3Qs
IHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIHdvcmtsaXN0LAorICAgICAgICAgICAgbGVhdmVsaXN0
LAorICAgICAgICAgICAgbm9kZSwKKyAgICAgICAgICAgIG5vZGVUeXBlLAorICAgICAgICAgICAg
dGFyZ2V0LAorICAgICAgICAgICAgZWxlbWVudCwKKyAgICAgICAgICAgIGN1cnJlbnQsCisgICAg
ICAgICAgICBjdXJyZW50MiwKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMsCisgICAgICAgICAgICBj
YW5kaWRhdGUsCisgICAgICAgICAgICBzZW50aW5lbCwKKyAgICAgICAgICAgIG91dGVyLAorICAg
ICAgICAgICAga2V5OworCisgICAgICAgIHRoaXMuX19pbml0aWFsaXplKHJvb3QsIHZpc2l0b3Ip
OworCisgICAgICAgIHNlbnRpbmVsID0ge307CisKKyAgICAgICAgLy8gcmVmZXJlbmNlCisgICAg
ICAgIHdvcmtsaXN0ID0gdGhpcy5fX3dvcmtsaXN0OworICAgICAgICBsZWF2ZWxpc3QgPSB0aGlz
Ll9fbGVhdmVsaXN0OworCisgICAgICAgIC8vIGluaXRpYWxpemUKKyAgICAgICAgb3V0ZXIgPSB7
CisgICAgICAgICAgICByb290OiByb290CisgICAgICAgIH07CisgICAgICAgIGVsZW1lbnQgPSBu
ZXcgRWxlbWVudChyb290LCBudWxsLCBudWxsLCBuZXcgUmVmZXJlbmNlKG91dGVyLCAncm9vdCcp
KTsKKyAgICAgICAgd29ya2xpc3QucHVzaChlbGVtZW50KTsKKyAgICAgICAgbGVhdmVsaXN0LnB1
c2goZWxlbWVudCk7CisKKyAgICAgICAgd2hpbGUgKHdvcmtsaXN0Lmxlbmd0aCkgeworICAgICAg
ICAgICAgZWxlbWVudCA9IHdvcmtsaXN0LnBvcCgpOworCisgICAgICAgICAgICBpZiAoZWxlbWVu
dCA9PT0gc2VudGluZWwpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50ID0gbGVhdmVsaXN0LnBv
cCgpOworCisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5s
ZWF2ZSwgZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICAvLyBub2RlIG1heSBiZSByZXBsYWNl
ZCB3aXRoIG51bGwsCisgICAgICAgICAgICAgICAgLy8gc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1
bmRlZmluZWQgYW5kIG51bGwgaW4gdGhpcyBwbGFjZQorICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJSRUFLICYmIHRhcmdldCAhPT0gU0tJUCkg
eworICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlCisgICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnQucmVmLnJlcGxhY2UodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRlci5yb290OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdGFyZ2V0ID0gdGhpcy5fX2V4ZWN1dGUodmlzaXRvci5lbnRlciwgZWxlbWVudCk7CisKKyAg
ICAgICAgICAgIC8vIG5vZGUgbWF5IGJlIHJlcGxhY2VkIHdpdGggbnVsbCwKKyAgICAgICAgICAg
IC8vIHNvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdW5kZWZpbmVkIGFuZCBudWxsIGluIHRoaXMgcGxh
Y2UKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXQgIT09IEJS
RUFLICYmIHRhcmdldCAhPT0gU0tJUCkgeworICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UKKyAg
ICAgICAgICAgICAgICBlbGVtZW50LnJlZi5yZXBsYWNlKHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgZWxlbWVudC5ub2RlID0gdGFyZ2V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodGhpcy5fX3N0YXRlID09PSBCUkVBSyB8fCB0YXJnZXQgPT09IEJSRUFLKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG91dGVyLnJvb3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIG5vZGUgbWF5IGJlIG51bGwKKyAgICAgICAgICAgIG5vZGUgPSBlbGVtZW50Lm5vZGU7Cisg
ICAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgd29ya2xpc3QucHVzaChzZW50aW5lbCk7CisgICAgICAg
ICAgICBsZWF2ZWxpc3QucHVzaChlbGVtZW50KTsKKworICAgICAgICAgICAgaWYgKHRoaXMuX19z
dGF0ZSA9PT0gU0tJUCB8fCB0YXJnZXQgPT09IFNLSVApIHsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9kZVR5cGUgPSBlbGVtZW50Lndy
YXAgfHwgbm9kZS50eXBlOworICAgICAgICAgICAgY2FuZGlkYXRlcyA9IFZpc2l0b3JLZXlzW25v
ZGVUeXBlXTsKKworICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZXMubGVuZ3RoOworICAg
ICAgICAgICAgd2hpbGUgKChjdXJyZW50IC09IDEpID49IDApIHsKKyAgICAgICAgICAgICAgICBr
ZXkgPSBjYW5kaWRhdGVzW2N1cnJlbnRdOworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IG5v
ZGVba2V5XTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSkgeworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIWlzQXJyYXkoY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5w
dXNoKG5ldyBFbGVtZW50KGNhbmRpZGF0ZSwga2V5LCBudWxsLCBuZXcgUmVmZXJlbmNlKG5vZGUs
IGtleSkpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgY3VycmVudDIgPSBjYW5kaWRhdGUubGVuZ3RoOworICAgICAg
ICAgICAgICAgIHdoaWxlICgoY3VycmVudDIgLT0gMSkgPj0gMCkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNhbmRpZGF0ZVtjdXJyZW50Ml0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlVHlwZSA9PT0gU3ludGF4Lk9iamVjdEV4cHJlc3Npb24gJiYgJ3Byb3BlcnRpZXMnID09
PSBjYW5kaWRhdGVzW2N1cnJlbnRdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50
ID0gbmV3IEVsZW1lbnQoY2FuZGlkYXRlW2N1cnJlbnQyXSwgW2tleSwgY3VycmVudDJdLCAnUHJv
cGVydHknLCBuZXcgUmVmZXJlbmNlKGNhbmRpZGF0ZSwgY3VycmVudDIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBuZXcg
RWxlbWVudChjYW5kaWRhdGVbY3VycmVudDJdLCBba2V5LCBjdXJyZW50Ml0sIG51bGwsIG5ldyBS
ZWZlcmVuY2UoY2FuZGlkYXRlLCBjdXJyZW50MikpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goZWxlbWVudCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG91dGVyLnJv
b3Q7CisgICAgfTsKKworICAgIGZ1bmN0aW9uIHRyYXZlcnNlKHJvb3QsIHZpc2l0b3IpIHsKKyAg
ICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpOworICAgICAgICByZXR1cm4g
Y29udHJvbGxlci50cmF2ZXJzZShyb290LCB2aXNpdG9yKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biByZXBsYWNlKHJvb3QsIHZpc2l0b3IpIHsKKyAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcg
Q29udHJvbGxlcigpOworICAgICAgICByZXR1cm4gY29udHJvbGxlci5yZXBsYWNlKHJvb3QsIHZp
c2l0b3IpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4dGVuZENvbW1lbnRSYW5nZShjb21tZW50
LCB0b2tlbnMpIHsKKyAgICAgICAgdmFyIHRhcmdldDsKKworICAgICAgICB0YXJnZXQgPSB1cHBl
ckJvdW5kKHRva2VucywgZnVuY3Rpb24gc2VhcmNoKHRva2VuKSB7CisgICAgICAgICAgICByZXR1
cm4gdG9rZW4ucmFuZ2VbMF0gPiBjb21tZW50LnJhbmdlWzBdOworICAgICAgICB9KTsKKworICAg
ICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbY29tbWVudC5yYW5nZVswXSwgY29tbWVudC5y
YW5nZVsxXV07CisKKyAgICAgICAgaWYgKHRhcmdldCAhPT0gdG9rZW5zLmxlbmd0aCkgeworICAg
ICAgICAgICAgY29tbWVudC5leHRlbmRlZFJhbmdlWzFdID0gdG9rZW5zW3RhcmdldF0ucmFuZ2Vb
MF07CisgICAgICAgIH0KKworICAgICAgICB0YXJnZXQgLT0gMTsKKyAgICAgICAgaWYgKHRhcmdl
dCA+PSAwKSB7CisgICAgICAgICAgICBjb21tZW50LmV4dGVuZGVkUmFuZ2VbMF0gPSB0b2tlbnNb
dGFyZ2V0XS5yYW5nZVsxXTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb21tZW50Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGF0dGFjaENvbW1lbnRzKHRyZWUsIHByb3ZpZGVkQ29tbWVu
dHMsIHRva2VucykgeworICAgICAgICAvLyBBdCBmaXJzdCwgd2Ugc2hvdWxkIGNhbGN1bGF0ZSBl
eHRlbmRlZCBjb21tZW50IHJhbmdlcy4KKyAgICAgICAgdmFyIGNvbW1lbnRzID0gW10sIGNvbW1l
bnQsIGxlbiwgaSwgY3Vyc29yOworCisgICAgICAgIGlmICghdHJlZS5yYW5nZSkgeworICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRhY2hDb21tZW50cyBuZWVkcyByYW5nZSBpbmZvcm1h
dGlvbicpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdG9rZW5zIGFycmF5IGlzIGVtcHR5LCB3
ZSBhdHRhY2ggY29tbWVudHMgdG8gdHJlZSBhcyAnbGVhZGluZ0NvbW1lbnRzJworICAgICAgICBp
ZiAoIXRva2Vucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChwcm92aWRlZENvbW1lbnRzLmxl
bmd0aCkgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVu
dHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVu
dCA9IGRlZXBDb3B5KHByb3ZpZGVkQ29tbWVudHNbaV0pOworICAgICAgICAgICAgICAgICAgICBj
b21tZW50LmV4dGVuZGVkUmFuZ2UgPSBbMCwgdHJlZS5yYW5nZVswXV07CisgICAgICAgICAgICAg
ICAgICAgIGNvbW1lbnRzLnB1c2goY29tbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHRyZWUubGVhZGluZ0NvbW1lbnRzID0gY29tbWVudHM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gdHJlZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9
IDAsIGxlbiA9IHByb3ZpZGVkQ29tbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHsKKyAg
ICAgICAgICAgIGNvbW1lbnRzLnB1c2goZXh0ZW5kQ29tbWVudFJhbmdlKGRlZXBDb3B5KHByb3Zp
ZGVkQ29tbWVudHNbaV0pLCB0b2tlbnMpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMg
aXMgYmFzZWQgb24gSm9obiBGcmVlbWFuJ3MgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGN1cnNv
ciA9IDA7CisgICAgICAgIHRyYXZlcnNlKHRyZWUsIHsKKyAgICAgICAgICAgIGVudGVyOiBmdW5j
dGlvbiAobm9kZSkgeworICAgICAgICAgICAgICAgIHZhciBjb21tZW50OworCisgICAgICAgICAg
ICAgICAgd2hpbGUgKGN1cnNvciA8IGNvbW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAg
ICAgICBjb21tZW50ID0gY29tbWVudHNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA+IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVsxXSA9PT0gbm9kZS5yYW5nZVswXSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmxlYWRpbmdDb21tZW50cykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUubGVhZGluZ0NvbW1lbnRzID0gW107Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmxl
YWRpbmdDb21tZW50cy5wdXNoKGNvbW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29t
bWVudHMuc3BsaWNlKGN1cnNvciwgMSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9m
IG93bmVkIG5vZGUKKyAgICAgICAgICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5n
dGgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0u
ZXh0ZW5kZWRSYW5nZVswXSA+IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFZpc2l0b3JPcHRpb24uU2tpcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pOworCisgICAgICAgIGN1cnNvciA9IDA7CisgICAgICAgIHRyYXZlcnNl
KHRyZWUsIHsKKyAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAg
ICAgICAgIHZhciBjb21tZW50OworCisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnNvciA8IGNv
bW1lbnRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gY29tbWVudHNb
Y3Vyc29yXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbMV0gPCBjb21tZW50
LmV4dGVuZGVkUmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2Vb
MV0gPT09IGNvbW1lbnQuZXh0ZW5kZWRSYW5nZVswXSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLnRyYWlsaW5nQ29tbWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLnRyYWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUudHJhaWxpbmdDb21tZW50cy5wdXNoKGNv
bW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMuc3BsaWNlKGN1cnNvciwg
MSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJzb3IgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgb3V0IG9mIG93bmVkIG5vZGUKKyAgICAgICAg
ICAgICAgICBpZiAoY3Vyc29yID09PSBjb21tZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24uQnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2N1cnNvcl0uZXh0ZW5kZWRSYW5nZVswXSA+IG5v
ZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2l0b3JPcHRpb24u
U2tpcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg
ICAgICAgIHJldHVybiB0cmVlOworICAgIH0KKworICAgIGV4cG9ydHMudmVyc2lvbiA9ICcxLjUu
MS1kZXYnOworICAgIGV4cG9ydHMuU3ludGF4ID0gU3ludGF4OworICAgIGV4cG9ydHMudHJhdmVy
c2UgPSB0cmF2ZXJzZTsKKyAgICBleHBvcnRzLnJlcGxhY2UgPSByZXBsYWNlOworICAgIGV4cG9y
dHMuYXR0YWNoQ29tbWVudHMgPSBhdHRhY2hDb21tZW50czsKKyAgICBleHBvcnRzLlZpc2l0b3JL
ZXlzID0gVmlzaXRvcktleXM7CisgICAgZXhwb3J0cy5WaXNpdG9yT3B0aW9uID0gVmlzaXRvck9w
dGlvbjsKKyAgICBleHBvcnRzLkNvbnRyb2xsZXIgPSBDb250cm9sbGVyOworfSkpOworLyogdmlt
OiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi8KKworfSx7fV0sODpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisndXNlIHN0cmljdCc7CisKK2Z1bmN0aW9uIFRvT2JqZWN0KHZh
bCkgeworCWlmICh2YWwgPT0gbnVsbCkgeworCQl0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qu
YXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpOworCX0KKwor
CXJldHVybiBPYmplY3QodmFsKTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWdu
IHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkgeworCXZhciBwZW5kaW5nRXhjZXB0aW9uOwor
CXZhciBmcm9tOworCXZhciBrZXlzOworCXZhciB0byA9IFRvT2JqZWN0KHRhcmdldCk7CisKKwlm
b3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykgeworCQlmcm9tID0gYXJn
dW1lbnRzW3NdOworCQlrZXlzID0gT2JqZWN0LmtleXMoT2JqZWN0KGZyb20pKTsKKworCQlmb3Ig
KHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKKwkJCXRyeSB7CisJCQkJdG9ba2V5
c1tpXV0gPSBmcm9tW2tleXNbaV1dOworCQkJfSBjYXRjaCAoZXJyKSB7CisJCQkJaWYgKHBlbmRp
bmdFeGNlcHRpb24gPT09IHVuZGVmaW5lZCkgeworCQkJCQlwZW5kaW5nRXhjZXB0aW9uID0gZXJy
OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmIChwZW5kaW5nRXhjZXB0aW9uKSB7CisJCXRo
cm93IHBlbmRpbmdFeGNlcHRpb247CisJfQorCisJcmV0dXJuIHRvOworfTsKKworfSx7fV0sOTpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
TWFpbiBFU0xpbnQgb2JqZWN0LgorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisi
dXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBlc3ByaW1hID0gcmVxdWlyZSgiZXNwcmlt
YSIpLAorICAgIGVzdHJhdmVyc2UgPSByZXF1aXJlKCJlc3RyYXZlcnNlIiksCisgICAgZXNjb3Bl
ID0gcmVxdWlyZSgiZXNjb3BlIiksCisgICAgZW52aXJvbm1lbnRzID0gcmVxdWlyZSgiLi4vY29u
Zi9lbnZpcm9ubWVudHMuanNvbiIpLAorICAgIGFzc2lnbiA9IHJlcXVpcmUoIm9iamVjdC1hc3Np
Z24iKSwKKyAgICBydWxlcyA9IHJlcXVpcmUoIi4vcnVsZXMiKSwKKyAgICB1dGlsID0gcmVxdWly
ZSgiLi91dGlsIiksCisgICAgUnVsZUNvbnRleHQgPSByZXF1aXJlKCIuL3J1bGUtY29udGV4dCIp
LAorICAgIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoImV2ZW50cyIpLkV2ZW50RW1pdHRlcjsKKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhlbHBlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK2Z1bmN0aW9uIGVzY2FwZVJlZ0V4cChyeCkgeworICAgIHJldHVybiByeC5yZXBsYWNl
KC9bXC1cW1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csICJcXCQmIik7Cit9CisKKy8q
KgorICogUGFyc2VzIGEgbGlzdCBvZiAibmFtZTpib29sZWFuX3ZhbHVlIiBvci9hbmQgIm5hbWUi
IG9wdGlvbnMgZGl2aWRlZCBieSBjb21tYSBvcgorICogd2hpdGVzcGFjZS4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBwYXJzZS4KKyAqIEByZXR1cm5zIHtPYmplY3R9
IFJlc3VsdCBtYXAgb2JqZWN0IG9mIG5hbWVzIGFuZCBib29sZWFuIHZhbHVlcworICovCitmdW5j
dGlvbiBwYXJzZUJvb2xlYW5Db25maWcoc3RyaW5nKSB7CisgICAgdmFyIGl0ZW1zID0ge307Cisg
ICAgLy8gQ29sbGFwc2Ugd2hpdGVzcGFjZSBhcm91bmQgOiB0byBtYWtlIHBhcnNpbmcgZWFzaWVy
CisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1xzKjpccyovZywgIjoiKTsKKyAgICAvLyBD
b2xsYXBzZSB3aGl0ZXNwYWNlIGFyb3VuZCAsCisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2Uo
L1xzKixccyovZywgIiwiKTsKKyAgICBzdHJpbmcuc3BsaXQoL1xzfCwrLykuZm9yRWFjaChmdW5j
dGlvbihuYW1lKSB7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHZhciBwb3MgPSBuYW1lLmluZGV4T2YoIjoiKSwKKyAgICAgICAg
ICAgIHZhbHVlOworICAgICAgICBpZiAocG9zICE9PSAtMSkgeworICAgICAgICAgICAgdmFsdWUg
PSBuYW1lLnN1YnN0cmluZyhwb3MgKyAxLCBuYW1lLmxlbmd0aCk7CisgICAgICAgICAgICBuYW1l
ID0gbmFtZS5zdWJzdHJpbmcoMCwgcG9zKTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZW1zW25h
bWVdID0gKHZhbHVlID09PSAidHJ1ZSIpOworCisgICAgfSk7CisgICAgcmV0dXJuIGl0ZW1zOwor
fQorCisvKioKKyAqIFBhcnNlcyBhIEpTT04tbGlrZSBjb25maWcuCisgKiBAcGFyYW0ge3N0cmlu
Z30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gcGFyc2UuCisgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1
bHQgbWFwIG9iamVjdAorICovCitmdW5jdGlvbiBwYXJzZUpzb25Db25maWcoc3RyaW5nKSB7Cisg
ICAgdmFyIGl0ZW1zID0ge307CisgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoLyhbYS16MC05
XC1cL10rKTovZywgIlwiJDFcIjoiKS5yZXBsYWNlKC8oXF18WzAtOV0pXHMrKD89IikvLCAiJDEs
Iik7CisgICAgdHJ5IHsKKyAgICAgICAgaXRlbXMgPSBKU09OLnBhcnNlKCJ7IiArIHN0cmluZyAr
ICJ9Iik7CisgICAgfSBjYXRjaChlKSB7IH0KKworICAgIHJldHVybiBpdGVtczsKK30KKworLyoq
CisgKiBQYXJzZXMgYSBjb25maWcgb2YgdmFsdWVzIHNlcGFyYXRlZCBieSBjb21tYS4KKyAqIEBw
YXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBwYXJzZS4KKyAqIEByZXR1cm5zIHtP
YmplY3R9IFJlc3VsdCBtYXAgb2YgdmFsdWVzIGFuZCB0cnVlIHZhbHVlcworICovCitmdW5jdGlv
biBwYXJzZUxpc3RDb25maWcoc3RyaW5nKSB7CisgICAgdmFyIGl0ZW1zID0ge307CisgICAgLy8g
Q29sbGFwc2Ugd2hpdGVzcGFjZSBhcm91bmQgLAorICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNl
KC9ccyosXHMqL2csICIsIik7CisgICAgc3RyaW5nLnNwbGl0KC8sKy8pLmZvckVhY2goZnVuY3Rp
b24obmFtZSkgeworICAgICAgICBuYW1lID0gbmFtZS50cmltKCk7CisgICAgICAgIGlmICghbmFt
ZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGl0ZW1zW25hbWVd
ID0gdHJ1ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gaXRlbXM7Cit9CisKKy8qKgorICogQHBhcmFt
IHtTY29wZX0gc2NvcGUgVGhlIHNjb3BlIG9iamVjdCB0byBjaGVjay4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBsb29rIHVwLgorICogQHJldHVy
bnMge1ZhcmlhYmxlfSBUaGUgdmFyaWFibGUgb2JqZWN0IGlmIGZvdW5kIG9yIG51bGwgaWYgbm90
LgorICovCitmdW5jdGlvbiBnZXRWYXJpYWJsZShzY29wZSwgbmFtZSkgeworICAgIHZhciB2YXJp
YWJsZSA9IG51bGw7CisgICAgc2NvcGUudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24odikgeworICAg
ICAgICBpZiAodi5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICB2YXJpYWJsZSA9IHY7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgfSk7CisgICAgcmV0dXJuIHZhcmlhYmxlOwor
fQorCisvKioKKyAqIEVuc3VyZXMgdGhhdCB2YXJpYWJsZXMgcmVwcmVzZW50aW5nIGJ1aWx0LWlu
IHByb3BlcnRpZXMgb2YgdGhlIEdsb2JhbCBPYmplY3QsCisgKiBhbmQgYW55IGdsb2JhbHMgZGVj
bGFyZWQgYnkgc3BlY2lhbCBibG9jayBjb21tZW50cywgYXJlIHByZXNlbnQgaW4gdGhlIGdsb2Jh
bAorICogc2NvcGUuCisgKiBAcGFyYW0ge0FTVE5vZGV9IHByb2dyYW0gVGhlIHRvcCBub2RlIG9m
IHRoZSBBU1QuCisgKiBAcGFyYW0ge1Njb3BlfSBnbG9iYWxTY29wZSBUaGUgZ2xvYmFsIHNjb3Bl
LgorICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBk
YXRhLgorICogQHJldHVybnMge3ZvaWR9CisgKi8KK2Z1bmN0aW9uIGFkZERlY2xhcmVkR2xvYmFs
cyhwcm9ncmFtLCBnbG9iYWxTY29wZSwgY29uZmlnKSB7CisgICAgdmFyIGRlY2xhcmVkR2xvYmFs
cyA9IHt9LAorICAgICAgICBleHBsaWNpdEdsb2JhbHMgPSB7fSwKKyAgICAgICAgYnVpbHRpbiA9
IGVudmlyb25tZW50cy5idWlsdGluOworCisgICAgYXNzaWduKGRlY2xhcmVkR2xvYmFscywgYnVp
bHRpbik7CisKKyAgICBPYmplY3Qua2V5cyhjb25maWcuZW52KS5mb3JFYWNoKGZ1bmN0aW9uIChu
YW1lKSB7CisgICAgICAgIGlmIChjb25maWcuZW52W25hbWVdKSB7CisgICAgICAgICAgICB2YXIg
ZW52aXJvbm1lbnRHbG9iYWxzID0gZW52aXJvbm1lbnRzW25hbWVdICYmIGVudmlyb25tZW50c1tu
YW1lXS5nbG9iYWxzOworICAgICAgICAgICAgaWYgKGVudmlyb25tZW50R2xvYmFscykgeworICAg
ICAgICAgICAgICAgIGFzc2lnbihkZWNsYXJlZEdsb2JhbHMsIGVudmlyb25tZW50R2xvYmFscyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGFzc2lnbihkZWNsYXJl
ZEdsb2JhbHMsIGNvbmZpZy5nbG9iYWxzKTsKKyAgICBhc3NpZ24oZXhwbGljaXRHbG9iYWxzLCBj
b25maWcuYXN0R2xvYmFscyk7CisKKyAgICBPYmplY3Qua2V5cyhkZWNsYXJlZEdsb2JhbHMpLmZv
ckVhY2goZnVuY3Rpb24obmFtZSkgeworICAgICAgICB2YXIgdmFyaWFibGUgPSBnZXRWYXJpYWJs
ZShnbG9iYWxTY29wZSwgbmFtZSk7CisgICAgICAgIGlmICghdmFyaWFibGUpIHsKKyAgICAgICAg
ICAgIHZhcmlhYmxlID0gbmV3IGVzY29wZS5WYXJpYWJsZShuYW1lLCBnbG9iYWxTY29wZSk7Cisg
ICAgICAgICAgICB2YXJpYWJsZS5lc2xpbnRFeHBsaWNpdEdsb2JhbCA9IGZhbHNlOworICAgICAg
ICAgICAgZ2xvYmFsU2NvcGUudmFyaWFibGVzLnB1c2godmFyaWFibGUpOworICAgICAgICB9Cisg
ICAgICAgIHZhcmlhYmxlLndyaXRlYWJsZSA9IGRlY2xhcmVkR2xvYmFsc1tuYW1lXTsKKyAgICB9
KTsKKworICAgIE9iamVjdC5rZXlzKGV4cGxpY2l0R2xvYmFscykuZm9yRWFjaChmdW5jdGlvbihu
YW1lKSB7CisgICAgICAgIHZhciB2YXJpYWJsZSA9IGdldFZhcmlhYmxlKGdsb2JhbFNjb3BlLCBu
YW1lKTsKKyAgICAgICAgaWYgKCF2YXJpYWJsZSkgeworICAgICAgICAgICAgdmFyaWFibGUgPSBu
ZXcgZXNjb3BlLlZhcmlhYmxlKG5hbWUsIGdsb2JhbFNjb3BlKTsKKyAgICAgICAgICAgIHZhcmlh
YmxlLmVzbGludEV4cGxpY2l0R2xvYmFsID0gdHJ1ZTsKKyAgICAgICAgICAgIGdsb2JhbFNjb3Bl
LnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgICAgICB2YXJpYWJsZS53
cml0ZWFibGUgPSBleHBsaWNpdEdsb2JhbHNbbmFtZV07CisgICAgfSk7Cit9CisKKy8qKgorICog
QWRkIGRhdGEgdG8gcmVwb3J0aW5nIGNvbmZpZ3VyYXRpb24gdG8gZGlzYWJsZSByZXBvcnRpbmcg
Zm9yIGxpc3Qgb2YgcnVsZXMKKyAqIHN0YXJ0aW5nIGZyb20gc3RhcnQgbG9jYXRpb24KKyAqIEBw
YXJhbSAge09iamVjdFtdfSByZXBvcnRpbmdDb25maWcgQ3VycmVudCByZXBvcnRpbmcgY29uZmln
dXJhdGlvbgorICogQHBhcmFtICB7T2JqZWN0fSBzdGFydCBQb3NpdGlvbiB0byBzdGFydAorICog
QHBhcmFtICB7c3RyaW5nW119IHJ1bGVzIExpc3Qgb2YgcnVsZXMKKyAqIEByZXR1cm5zIHt2b2lk
fQorICovCitmdW5jdGlvbiBkaXNhYmxlUmVwb3J0aW5nKHJlcG9ydGluZ0NvbmZpZywgc3RhcnQs
IHJ1bGVzKSB7CisKKyAgICBpZiAocnVsZXMubGVuZ3RoKSB7CisgICAgICAgIHJ1bGVzLmZvckVh
Y2goZnVuY3Rpb24ocnVsZSl7CisgICAgICAgICAgICByZXBvcnRpbmdDb25maWcucHVzaCh7Cisg
ICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogbnVsbCwK
KyAgICAgICAgICAgICAgICBydWxlOiBydWxlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVwb3J0aW5nQ29uZmlnLnB1c2goeworICAgICAgICAg
ICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgZW5kOiBudWxsLAorICAgICAgICAgICAgcnVs
ZTogbnVsbAorICAgICAgICB9KTsKKyAgICB9Cit9CisKKy8qKgorICogQWRkIGRhdGEgdG8gcmVw
b3J0aW5nIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIHJlcG9ydGluZyBmb3IgbGlzdCBvZiBydWxl
cworICogc3RhcnRpbmcgZnJvbSBzdGFydCBsb2NhdGlvbgorICogQHBhcmFtICB7T2JqZWN0W119
IHJlcG9ydGluZ0NvbmZpZyBDdXJyZW50IHJlcG9ydGluZyBjb25maWd1cmF0aW9uCisgKiBAcGFy
YW0gIHtPYmplY3R9IHN0YXJ0IFBvc2l0aW9uIHRvIHN0YXJ0CisgKiBAcGFyYW0gIHtzdHJpbmdb
XX0gcnVsZXMgTGlzdCBvZiBydWxlcworICogQHJldHVybnMge3ZvaWR9CisgKi8KK2Z1bmN0aW9u
IGVuYWJsZVJlcG9ydGluZyhyZXBvcnRpbmdDb25maWcsIHN0YXJ0LCBydWxlcykgeworICAgIGlm
IChydWxlcy5sZW5ndGgpIHsKKyAgICAgICAgcnVsZXMuZm9yRWFjaChmdW5jdGlvbihydWxlKXsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSByZXBvcnRpbmdDb25maWcubGVuZ3RoIC0gMTsgaSA+
PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQg
JiYgcmVwb3J0aW5nQ29uZmlnW2ldLnJ1bGUgPT09IHJ1bGUgKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJlcG9ydGluZ0NvbmZpZ1tpXS5lbmQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBmaW5kIGFsbCBwcmV2aW91cyBkaXNhYmxlZCBsb2NhdGlv
bnMgaWYgdGhleSB3YXMgc3RhcnRlZCBhcyBsaXN0IG9mIHJ1bGVzCisgICAgICAgIHZhciBwcmV2
U3RhcnQ7CisgICAgICAgIGZvciAodmFyIGkgPSByZXBvcnRpbmdDb25maWcubGVuZ3RoIC0gMTsg
aSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmIChwcmV2U3RhcnQgJiYgcHJldlN0YXJ0ICE9
PSByZXBvcnRpbmdDb25maWdbaV0uc3RhcnQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFyZXBvcnRpbmdDb25maWdbaV0uZW5kKSB7
CisgICAgICAgICAgICAgICAgcmVwb3J0aW5nQ29uZmlnW2ldLmVuZCA9IHN0YXJ0OworICAgICAg
ICAgICAgICAgIHByZXZTdGFydCA9IHJlcG9ydGluZ0NvbmZpZ1tpXS5zdGFydDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworCisvKioKKyAqIFBhcnNlcyBjb21tZW50cyBp
biBmaWxlIHRvIGV4dHJhY3QgZmlsZS1zcGVjaWZpYyBjb25maWcgb2YgcnVsZXMsIGdsb2JhbHMK
KyAqIGFuZCBlbnZpcm9ubWVudHMgYW5kIG1lcmdlcyB0aGVtIHdpdGggZ2xvYmFsIGNvbmZpZzsg
YWxzbyBjb2RlIGJsb2NrcworICogd2hlcmUgcmVwb3J0aW5nIGlzIGRpc2FibGVkIG9yIGVuYWJs
ZWQgYW5kIG1lcmdlcyB0aGVtIHdpdGggcmVwb3J0aW5nIGNvbmZpZy4KKyAqIEBwYXJhbSB7QVNU
Tm9kZX0gYXN0IFRoZSB0b3Agbm9kZSBvZiB0aGUgQVNULgorICogQHBhcmFtIHtPYmplY3R9IGNv
bmZpZyBUaGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBkYXRhLgorICogQHBhcmFtIHtPYmplY3Rb
XX0gcmVwb3J0aW5nQ29uZmlnIFRoZSBleGlzdGluZyByZXBvcnRpbmcgY29uZmlndXJhdGlvbiBk
YXRhLgorICogQHJldHVybnMge3ZvaWR9CisgKi8KK2Z1bmN0aW9uIG1vZGlmeUNvbmZpZ3NGcm9t
Q29tbWVudHMoYXN0LCBjb25maWcsIHJlcG9ydGluZ0NvbmZpZykgeworCisgICAgdmFyIGNvbW1l
bnRDb25maWcgPSB7CisgICAgICAgIGFzdEdsb2JhbHM6IHt9LAorICAgICAgICBydWxlczoge30s
CisgICAgICAgIGVudjoge30KKyAgICB9OworICAgIHZhciBjb21tZW50UnVsZXMgPSB7fTsKKwor
ICAgIGFzdC5jb21tZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGNvbW1lbnQpIHsKKyAgICAgICAgaWYg
KGNvbW1lbnQudHlwZSA9PT0gIkJsb2NrIikgeworCisgICAgICAgICAgICB2YXIgdmFsdWUgPSBj
b21tZW50LnZhbHVlLnRyaW0oKTsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IC9eKGVzbGludC1c
dyt8ZXNsaW50fGdsb2JhbHM/KShcc3wkKS8uZXhlYyh2YWx1ZSk7CisKKyAgICAgICAgICAgIGlm
IChtYXRjaCkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKG1hdGNo
LmluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAobWF0
Y2hbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiZ2xvYmFscyI6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgImdsb2JhbCI6CisgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLm1p
eGluKGNvbW1lbnRDb25maWcuYXN0R2xvYmFscywgcGFyc2VCb29sZWFuQ29uZmlnKHZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBj
YXNlICJlc2xpbnQtZW52IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwubWl4aW4oY29t
bWVudENvbmZpZy5lbnYsIHBhcnNlTGlzdENvbmZpZyh2YWx1ZSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXNsaW50LWRpc2Fi
bGUiOgorICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJlcG9ydGluZyhyZXBvcnRpbmdD
b25maWcsIGNvbW1lbnQubG9jLnN0YXJ0LCBPYmplY3Qua2V5cyhwYXJzZUxpc3RDb25maWcodmFs
dWUpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
ICAgICBjYXNlICJlc2xpbnQtZW5hYmxlIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJs
ZVJlcG9ydGluZyhyZXBvcnRpbmdDb25maWcsIGNvbW1lbnQubG9jLnN0YXJ0LCBPYmplY3Qua2V5
cyhwYXJzZUxpc3RDb25maWcodmFsdWUpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJlc2xpbnQiOgorICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGl0ZW1zID0gcGFyc2VKc29uQ29uZmlnKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE9iamVjdC5rZXlzKGl0ZW1zKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZVZhbHVlID0gaXRlbXNbbmFtZV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlVmFsdWUgPT09ICJu
dW1iZXIiIHx8IChBcnJheS5pc0FycmF5KHJ1bGVWYWx1ZSkgJiYgdHlwZW9mIHJ1bGVWYWx1ZVsw
XSA9PT0gIm51bWJlciIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1l
bnRSdWxlc1tuYW1lXSA9IHJ1bGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICAgIC8vbm8gZGVmYXVsdAorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pOworCisgICAgLy8gYXBwbHkgZW52
aXJvbm1lbnQgcnVsZXMgYmVmb3JlIHVzZXIgcnVsZXMKKyAgICBPYmplY3Qua2V5cyhjb21tZW50
Q29uZmlnLmVudikuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgeworICAgICAgICB2YXIgZW52aXJv
bm1lbnRSdWxlcyA9IGVudmlyb25tZW50c1tuYW1lXSAmJiBlbnZpcm9ubWVudHNbbmFtZV0ucnVs
ZXM7CisgICAgICAgIGlmIChjb21tZW50Q29uZmlnLmVudltuYW1lXSAmJiBlbnZpcm9ubWVudFJ1
bGVzKSB7CisgICAgICAgICAgICB1dGlsLm1peGluKGNvbW1lbnRDb25maWcucnVsZXMsIGVudmly
b25tZW50UnVsZXMpOworICAgICAgICB9CisgICAgfSk7CisgICAgdXRpbC5taXhpbihjb21tZW50
Q29uZmlnLnJ1bGVzLCBjb21tZW50UnVsZXMpOworCisgICAgdXRpbC5tZXJnZUNvbmZpZ3MoY29u
ZmlnLCBjb21tZW50Q29uZmlnKTsKK30KKworLyoqCisgKiBDaGVjayBpZiBtZXNzYWdlIG9mIHJ1
bGUgd2l0aCBydWxlSWQgc2hvdWxkIGJlIGlnbm9yZWQgaW4gbG9jYXRpb24KKyAqIEBwYXJhbSAg
e09iamVjdFtdfSByZXBvcnRpbmdDb25maWcgIENvbGxlY3Rpb24gb2YgaWdub3JlIHJlY29yZHMK
KyAqIEBwYXJhbSAge3N0cmluZ30gcnVsZUlkICAgSWQgb2YgcnVsZQorICogQHBhcmFtICB7T2Jq
ZWN0fSBsb2NhdGlvbiBMb2NhdGlvbiBvZiBtZXNzYWdlCisgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
ICAgICAgICAgVHJ1ZSBpZiBtZXNzYWdlIHNob3VsZCBiZSBpZ25vcmVkLCBmYWxzZSBvdGhlcndp
c2UKKyAqLworZnVuY3Rpb24gaXNEaXNhYmxlZEJ5UmVwb3J0aW5nQ29uZmlnKHJlcG9ydGluZ0Nv
bmZpZywgcnVsZUlkLCBsb2NhdGlvbikgeworCisgICAgZm9yICh2YXIgaSA9IDAsIGMgPSByZXBv
cnRpbmdDb25maWcubGVuZ3RoOyBpIDwgYzsgaSsrKSB7CisKKyAgICAgICAgdmFyIGlnbm9yZSA9
IHJlcG9ydGluZ0NvbmZpZ1tpXTsKKyAgICAgICAgaWYgKCghaWdub3JlLnJ1bGUgfHwgaWdub3Jl
LnJ1bGUgPT09IHJ1bGVJZCkgJiYKKyAgICAgICAgICAgIChsb2NhdGlvbi5saW5lID4gaWdub3Jl
LnN0YXJ0LmxpbmUgfHwgKGxvY2F0aW9uLmxpbmUgPT09IGlnbm9yZS5zdGFydC5saW5lICYmIGxv
Y2F0aW9uLmNvbHVtbiA+PSBpZ25vcmUuc3RhcnQuY29sdW1uKSkgJiYKKyAgICAgICAgICAgICgh
aWdub3JlLmVuZCB8fCAobG9jYXRpb24ubGluZSA8IGlnbm9yZS5lbmQubGluZSB8fCAobG9jYXRp
b24ubGluZSA9PT0gaWdub3JlLmVuZC5saW5lICYmIGxvY2F0aW9uLmNvbHVtbiA8PSBpZ25vcmUu
ZW5kLmNvbHVtbikpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIFByb2Nlc3MgaW5pdGlh
bCBjb25maWcgdG8gbWFrZSBpdCBzYWZlIHRvIGV4dGVuZCBieSBmaWxlIGNvbW1lbnQgY29uZmln
CisgKiBAcGFyYW0gIHtPYmplY3R9IGNvbmZpZyBJbml0aWFsIGNvbmZpZworICogQHJldHVybnMg
e09iamVjdH0gICAgICAgIFByb2Nlc3NlZCBjb25maWcKKyAqLworZnVuY3Rpb24gcHJlcGFyZUNv
bmZpZyhjb25maWcpIHsKKworICAgIGNvbmZpZy5nbG9iYWxzID0gY29uZmlnLmdsb2JhbHMgfHwg
Y29uZmlnLmdsb2JhbCB8fCB7fTsKKyAgICBkZWxldGUgY29uZmlnLmdsb2JhbDsKKworICAgIHZh
ciBjb3BpZWRSdWxlcyA9IHt9OworICAgIGlmICh0eXBlb2YgY29uZmlnLnJ1bGVzID09PSAib2Jq
ZWN0IikgeworICAgICAgICBPYmplY3Qua2V5cyhjb25maWcucnVsZXMpLmZvckVhY2goZnVuY3Rp
b24oayl7CisgICAgICAgICAgICB2YXIgcnVsZSA9IGNvbmZpZy5ydWxlc1trXTsKKyAgICAgICAg
ICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGUpKSB7CisgICAgICAgICAgICAgICAgY29waWVkUnVs
ZXNba10gPSBydWxlLnNsaWNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGNvcGllZFJ1bGVzW2tdID0gcnVsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgcnVsZXM6IGNvcGllZFJ1bGVzLAorICAgICAg
ICBnbG9iYWxzOiB1dGlsLm1lcmdlQ29uZmlncyh7fSwgY29uZmlnLmdsb2JhbHMpLAorICAgICAg
ICBlbnY6IHV0aWwubWVyZ2VDb25maWdzKHt9LCBjb25maWcuZW52IHx8IHt9KSwKKyAgICAgICAg
c2V0dGluZ3M6IHV0aWwubWVyZ2VDb25maWdzKHt9LCBjb25maWcuc2V0dGluZ3MgfHwge30pCisg
ICAgfTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFB1YmxpYyBJbnRlcmZhY2UK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogT2JqZWN0IHRoYXQgaXMgcmVzcG9u
c2libGUgZm9yIHZlcmlmeWluZyBKYXZhU2NyaXB0IHRleHQKKyAqIEBuYW1lIGVzbGludAorICov
Cittb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHsKKworICAgIHZhciBhcGkgPSBPYmplY3Qu
Y3JlYXRlKG5ldyBFdmVudEVtaXR0ZXIoKSksCisgICAgICAgIG1lc3NhZ2VzID0gW10sCisgICAg
ICAgIGN1cnJlbnRUZXh0ID0gbnVsbCwKKyAgICAgICAgY3VycmVudFRleHRMaW5lcyA9IFtdLAor
ICAgICAgICBjdXJyZW50Q29uZmlnID0gbnVsbCwKKyAgICAgICAgY3VycmVudFRva2VucyA9IG51
bGwsCisgICAgICAgIGN1cnJlbnRTY29wZXMgPSBudWxsLAorICAgICAgICBzY29wZU1hcCA9IG51
bGwsCisgICAgICAgIGN1cnJlbnRGaWxlbmFtZSA9IG51bGwsCisgICAgICAgIGNvbnRyb2xsZXIg
PSBudWxsLAorICAgICAgICByZXBvcnRpbmdDb25maWcgPSBbXSwKKyAgICAgICAgY29tbWVudExv
Y3NFbnRlciA9IFtdLAorICAgICAgICBjb21tZW50TG9jc0V4aXQgPSBbXTsKKworICAgIC8qKgor
ICAgICAqIFBhcnNlcyB0ZXh0IGludG8gYW4gQVNULiBNb3ZlZCBvdXQgaGVyZSBiZWNhdXNlIHRo
ZSB0cnktY2F0Y2ggcHJldmVudHMKKyAgICAgKiBvcHRpbWl6YXRpb24gb2YgZnVuY3Rpb25zLCBz
byBpdCdzIGJlc3QgdG8ga2VlcCB0aGUgdHJ5LWNhdGNoIGFzIGlzb2xhdGVkCisgICAgICogYXMg
cG9zc2libGUKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgdGV4dCB0byBwYXJzZS4K
KyAgICAgKiBAcmV0dXJucyB7QVNUTm9kZX0gVGhlIEFTVCBpZiBzdWNjZXNzZnVsIG9yIG51bGwg
aWYgbm90LgorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gcGFyc2UodGV4
dCkgeworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBmb3IgcGFyc2luZyBlcnJvcnMgZmly
c3QuIElmIHRoZXJlJ3MgYSBwYXJzaW5nIGVycm9yLCBub3RoaW5nCisgICAgICAgICAqIGVsc2Ug
Y2FuIGhhcHBlbi4gSG93ZXZlciwgYSBwYXJzaW5nIGVycm9yIGRvZXMgbm90IHRocm93IGFuIGVy
cm9yCisgICAgICAgICAqIGZyb20gdGhpcyBtZXRob2QgLSBpdCdzIGp1c3QgY29uc2lkZXJlZCBh
IGZhdGFsIGVycm9yIG1lc3NhZ2UsIGEKKyAgICAgICAgICogcHJvYmxlbSB0aGF0IEVTTGludCBp
ZGVudGlmaWVkIGp1c3QgbGlrZSBhbnkgb3RoZXIuCisgICAgICAgICAqLworICAgICAgICB0cnkg
eworICAgICAgICAgICAgcmV0dXJuIGVzcHJpbWEucGFyc2UodGV4dCwgeworICAgICAgICAgICAg
ICAgIGxvYzogdHJ1ZSwKKyAgICAgICAgICAgICAgICByYW5nZTogdHJ1ZSwKKyAgICAgICAgICAg
ICAgICByYXc6IHRydWUsCisgICAgICAgICAgICAgICAgdG9rZW5zOiB0cnVlLAorICAgICAgICAg
ICAgICAgIGNvbW1lbnQ6IHRydWUsCisgICAgICAgICAgICAgICAgYXR0YWNoQ29tbWVudDogdHJ1
ZQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisKKyAgICAgICAgICAg
IG1lc3NhZ2VzLnB1c2goeworICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlLAorICAgICAgICAg
ICAgICAgIHNldmVyaXR5OiAyLAorCisgICAgICAgICAgICAgICAgLy8gbWVzc2FnZXMgY29tZSBh
cyAiTGluZSBYOiBVbmV4cGVjdGVkIHRva2VuIGZvbyIsIHNvIHN0cmlwIG9mZiBsZWFkaW5nIHBh
cnQKKyAgICAgICAgICAgICAgICBtZXNzYWdlOiBleC5tZXNzYWdlLnN1YnN0cmluZyhleC5tZXNz
YWdlLmluZGV4T2YoIjoiKSArIDEpLnRyaW0oKSwKKworICAgICAgICAgICAgICAgIGxpbmU6IGV4
LmxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgY29sdW1uOiBleC5jb2x1bW4KKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8qKgorICAgICAqIENoZWNrIGNvbGxlY3Rpb24gb2YgY29tbWVudHMgdG8gcHJldmVudCBk
b3VibGUgZXZlbnQgZm9yIGNvbW1lbnQgYXMKKyAgICAgKiBsZWFkaW5nIGFuZCB0cmFpbGluZywg
dGhlbiBlbWl0IGV2ZW50IGlmIHBhc3NpbmcKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29t
bWVudHMgQ29sbGVjdGlvbiBvZiBjb21tZW50IG5vZGVzCisgICAgICogQHBhcmFtIHtPYmplY3Rb
XX0gbG9jcyBMaXN0IG9mIGxvY2F0aW9ucyBvZiBwcmV2aW91cyBjb21tZW50IG5vZGVzCisgICAg
ICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBFdmVudCBuYW1lIHBvc3RmaXgKKyAgICAgKiBA
cmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBlbWl0Q29tbWVudHMoY29tbWVu
dHMsIGxvY3MsIGV2ZW50TmFtZSkgeworCisgICAgICAgIGlmIChjb21tZW50cy5sZW5ndGgpIHsK
KyAgICAgICAgICAgIGNvbW1lbnRzLmZvckVhY2goZnVuY3Rpb24obm9kZSkgeworICAgICAgICAg
ICAgICAgIGlmIChsb2NzLmluZGV4T2Yobm9kZS5sb2MpID49IDApIHsKKyAgICAgICAgICAgICAg
ICAgICAgbG9jcy5zcGxpY2UobG9jcy5pbmRleE9mKG5vZGUubG9jKSwgMSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jcy5wdXNoKG5vZGUubG9jKTsK
KyAgICAgICAgICAgICAgICAgICAgYXBpLmVtaXQobm9kZS50eXBlICsgZXZlbnROYW1lLCBub2Rl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8qKgorICAgICAqIFNob3J0Y3V0IHRvIGNoZWNrIGFuZCBlbWl0IGVudGVyIG9mIGNv
bW1lbnQgbm9kZXMKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVudHMgQ29sbGVjdGlv
biBvZiBjb21tZW50IG5vZGVzCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAg
ZnVuY3Rpb24gZW1pdENvbW1lbnRzRW50ZXIoY29tbWVudHMpIHsKKyAgICAgICAgZW1pdENvbW1l
bnRzKGNvbW1lbnRzLCBjb21tZW50TG9jc0VudGVyLCAiQ29tbWVudCIpOworICAgIH0KKworICAg
IC8qKgorICAgICAqIFNob3J0Y3V0IHRvIGNoZWNrIGFuZCBlbWl0IGV4aXQgb2YgY29tbWVudCBu
b2RlcworICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBjb21tZW50cyBDb2xsZWN0aW9uIG9mIGNv
bW1lbnQgbm9kZXMKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBlbWl0Q29tbWVudHNFeGl0KGNvbW1lbnRzKSB7CisgICAgICAgIGVtaXRDb21tZW50cyhjb21t
ZW50cywgY29tbWVudExvY3NFeGl0LCAiQ29tbWVudDpleGl0Iik7CisgICAgfQorCisgICAgLyoq
CisgICAgICogR2V0IHRoZSBzZXZlcml0eSBsZXZlbCBvZiBhIHJ1bGUgKDAgLSBub25lLCAxIC0g
d2FybmluZywgMiAtIGVycm9yKQorICAgICAqIFJldHVybnMgMCBpZiB0aGUgcnVsZSBjb25maWcg
aXMgbm90IHZhbGlkIChhbiBBcnJheSBvciBhIG51bWJlcikKKyAgICAgKiBAcGFyYW0ge0FycmF5
fG51bWJlcn0gcnVsZUNvbmZpZyBydWxlIGNvbmZpZ3VyYXRpb24KKyAgICAgKiBAcmV0dXJucyB7
bnVtYmVyfSAwLCAxLCBvciAyLCBpbmRpY2F0aW5nIHJ1bGUgc2V2ZXJpdHkKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBnZXRSdWxlU2V2ZXJpdHkocnVsZUNvbmZpZykgeworICAgICAgICBpZiAodHlw
ZW9mIHJ1bGVDb25maWcgPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICByZXR1cm4gcnVsZUNv
bmZpZzsKKyAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJ1bGVDb25maWcpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gcnVsZUNvbmZpZ1swXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0
IHRoZSBvcHRpb25zIGZvciBhIHJ1bGUgKG5vdCBpbmNsdWRpbmcgc2V2ZXJpdHkpLCBpZiBhbnkK
KyAgICAgKiBAcGFyYW0ge0FycmF5fG51bWJlcn0gcnVsZUNvbmZpZyBydWxlIGNvbmZpZ3VyYXRp
b24KKyAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIHJ1bGUgb3B0aW9ucywgZW1wdHkgQXJyYXkg
aWYgbm9uZQorICAgICAqLworICAgIGZ1bmN0aW9uIGdldFJ1bGVPcHRpb25zKHJ1bGVDb25maWcp
IHsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocnVsZUNvbmZpZykpIHsKKyAgICAgICAgICAg
IHJldHVybiBydWxlQ29uZmlnLnNsaWNlKDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgcmV0dXJuIFtdOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gc2V0IHVubGltaXRlZCBs
aXN0ZW5lcnMgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvNTI0
KQorICAgIGFwaS5zZXRNYXhMaXN0ZW5lcnMoMCk7CisKKyAgICAvKioKKyAgICAgKiBSZXNldHMg
dGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBvYmplY3QuCisgICAgICogQHJldHVybnMge3ZvaWR9
CisgICAgICovCisgICAgYXBpLnJlc2V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucmVt
b3ZlQWxsTGlzdGVuZXJzKCk7CisgICAgICAgIG1lc3NhZ2VzID0gW107CisgICAgICAgIGN1cnJl
bnRDb25maWcgPSBudWxsOworICAgICAgICBjdXJyZW50VGV4dCA9IG51bGw7CisgICAgICAgIGN1
cnJlbnRUZXh0TGluZXMgPSBbXTsKKyAgICAgICAgY3VycmVudFRva2VucyA9IG51bGw7CisgICAg
ICAgIGN1cnJlbnRTY29wZXMgPSBudWxsOworICAgICAgICBzY29wZU1hcCA9IG51bGw7CisgICAg
ICAgIGNvbnRyb2xsZXIgPSBudWxsOworICAgICAgICByZXBvcnRpbmdDb25maWcgPSBbXTsKKyAg
ICAgICAgY29tbWVudExvY3NFbnRlciA9IFtdOworICAgICAgICBjb21tZW50TG9jc0V4aXQgPSBb
XTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogVmVyaWZpZXMgdGhlIHRleHQgYWdhaW5zdCB0
aGUgcnVsZXMgc3BlY2lmaWVkIGJ5IHRoZSBzZWNvbmQgYXJndW1lbnQuCisgICAgICogQHBhcmFt
IHtzdHJpbmd9IHRleHQgVGhlIEphdmFTY3JpcHQgdGV4dCB0byB2ZXJpZnkuCisgICAgICogQHBh
cmFtIHtPYmplY3R9IGNvbmZpZyBBbiBvYmplY3Qgd2hvc2Uga2V5cyBzcGVjaWZ5IHRoZSBydWxl
cyB0byB1c2UuCisgICAgICogQHBhcmFtIHtzdHJpbmc9fSBmaWxlbmFtZSBUaGUgb3B0aW9uYWwg
ZmlsZW5hbWUgb2YgdGhlIGZpbGUgYmVpbmcgY2hlY2tlZC4KKyAgICAgKiAgICAgIElmIHRoaXMg
aXMgbm90IHNldCwgdGhlIGZpbGVuYW1lIHdpbGwgZGVmYXVsdCB0byAnPGlucHV0PicgaW4gdGhl
IHJ1bGUgY29udGV4dC4KKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBzYXZlU3RhdGUgSW5kaWNh
dGVzIGlmIHRoZSBzdGF0ZSBmcm9tIHRoZSBsYXN0IHJ1biBzaG91bGQgYmUgc2F2ZWQuCisgICAg
ICogICAgICBNb3N0bHkgdXNlZnVsIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorICAgICAqIEByZXR1
cm5zIHtPYmplY3RbXX0gVGhlIHJlc3VsdHMgYXMgYW4gYXJyYXkgb2YgbWVzc2FnZXMgb3IgbnVs
bCBpZiBubyBtZXNzYWdlcy4KKyAgICAgKi8KKyAgICBhcGkudmVyaWZ5ID0gZnVuY3Rpb24odGV4
dCwgY29uZmlnLCBmaWxlbmFtZSwgc2F2ZVN0YXRlKSB7CisKKyAgICAgICAgdmFyIGFzdDsKKwor
ICAgICAgICAvLyBzZXQgdGhlIGN1cnJlbnQgcGFyc2VkIGZpbGVuYW1lCisgICAgICAgIGN1cnJl
bnRGaWxlbmFtZSA9IGZpbGVuYW1lOworCisgICAgICAgIGlmICghc2F2ZVN0YXRlKSB7CisgICAg
ICAgICAgICB0aGlzLnJlc2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBhc3QgPSBwYXJzZSh0
ZXh0LnJlcGxhY2UoL14jIShbXlxyXG5dK1tcclxuXSspLywgIi8vJDEiKSk7CisKKyAgICAgICAg
Ly9pZiBFc3ByaW1hIGZhaWxlZCB0byBwYXJzZSB0aGUgZmlsZSwgdGhlcmUncyBubyBzZW5zZSBp
biBzZXR0aW5nIHVwIHJ1bGVzCisgICAgICAgIGlmIChhc3QpIHsKKyAgICAgICAgICAgIC8vIHBy
b2Nlc3MgaW5pdGlhbCBjb25maWcgdG8gbWFrZSBpdCBzYWZlIHRvIGV4dGVuZAorICAgICAgICAg
ICAgY29uZmlnID0gcHJlcGFyZUNvbmZpZyhjb25maWcpOworCisgICAgICAgICAgICAvLyBwYXJz
ZSBnbG9iYWwgY29tbWVudHMgYW5kIG1vZGlmeSBjb25maWcKKyAgICAgICAgICAgIG1vZGlmeUNv
bmZpZ3NGcm9tQ29tbWVudHMoYXN0LCBjb25maWcsIHJlcG9ydGluZ0NvbmZpZyk7CisKKyAgICAg
ICAgICAgIC8vIGVuYWJsZSBhcHByb3ByaWF0ZSBydWxlcworICAgICAgICAgICAgT2JqZWN0Lmtl
eXMoY29uZmlnLnJ1bGVzKS5maWx0ZXIoZnVuY3Rpb24oa2V5KSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdldFJ1bGVTZXZlcml0eShjb25maWcucnVsZXNba2V5XSkgPiAwOworICAgICAgICAg
ICAgfSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKKworICAgICAgICAgICAgICAgIHZhciBydWxl
Q3JlYXRvciA9IHJ1bGVzLmdldChrZXkpLAorICAgICAgICAgICAgICAgICAgICBzZXZlcml0eSA9
IGdldFJ1bGVTZXZlcml0eShjb25maWcucnVsZXNba2V5XSksCisgICAgICAgICAgICAgICAgICAg
IG9wdGlvbnMgPSBnZXRSdWxlT3B0aW9ucyhjb25maWcucnVsZXNba2V5XSksCisgICAgICAgICAg
ICAgICAgICAgIHJ1bGU7CisKKyAgICAgICAgICAgICAgICBpZiAocnVsZUNyZWF0b3IpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUgPSBy
dWxlQ3JlYXRvcihuZXcgUnVsZUNvbnRleHQoa2V5LCBhcGksIHNldmVyaXR5LCBvcHRpb25zLCBj
b25maWcuc2V0dGluZ3MpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGFsbCB0
aGUgbm9kZSB0eXBlcyBhcyBsaXN0ZW5lcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIE9iamVj
dC5rZXlzKHJ1bGUpLmZvckVhY2goZnVuY3Rpb24obm9kZVR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcGkub24obm9kZVR5cGUsIHJ1bGVbbm9kZVR5cGVdKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGV4KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBleC5tZXNzYWdlID0gIkVycm9yIHdoaWxlIGxvYWRpbmcg
cnVsZSAnIiArIGtleSArICInOiAiICsgZXgubWVzc2FnZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93IGV4OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRlZmluaXRpb24g
Zm9yIHJ1bGUgJyIgKyBrZXkgKyAiJyB3YXMgbm90IGZvdW5kLiIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBzbyBydWxl
cyBjYW4gYWNjZXNzIGFzIG5lY2Vzc2FyeQorICAgICAgICAgICAgY3VycmVudENvbmZpZyA9IGNv
bmZpZzsKKyAgICAgICAgICAgIGN1cnJlbnRUZXh0ID0gdGV4dDsKKyAgICAgICAgICAgIGNvbnRy
b2xsZXIgPSBuZXcgZXN0cmF2ZXJzZS5Db250cm9sbGVyKCk7CisKKyAgICAgICAgICAgIC8vIGdh
dGhlciBkYXRhIHRoYXQgbWF5IGJlIG5lZWRlZCBieSB0aGUgcnVsZXMKKyAgICAgICAgICAgIGN1
cnJlbnRTY29wZXMgPSBlc2NvcGUuYW5hbHl6ZShhc3QsIHsgaWdub3JlRXZhbDogdHJ1ZSB9KS5z
Y29wZXM7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJbmRleCB0aGUgc2NvcGVz
IGJ5IHRoZSBzdGFydCByYW5nZSBvZiB0aGVpciBibG9jayBmb3IgZWZmaWNpZW50CisgICAgICAg
ICAgICAgKiBsb29rdXAgaW4gZ2V0U2NvcGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg
IHNjb3BlTWFwID0gW107CisgICAgICAgICAgICBjdXJyZW50U2NvcGVzLmZvckVhY2goZnVuY3Rp
b24gKHNjb3BlLCBpbmRleCkgeworICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHNjb3BlLmJs
b2NrLnJhbmdlWzBdOworCisgICAgICAgICAgICAgICAgLy8gU29tZXRpbWVzIHR3byBzY29wZXMg
YXJlIHJldHVybmVkIGZvciBhIGdpdmVuIG5vZGUuIFRoaXMgaXMKKyAgICAgICAgICAgICAgICAv
LyBoYW5kbGVkIGxhdGVyIGluIGEga25vd24gd2F5LCBzbyBqdXN0IGRvbid0IG92ZXJ3cml0ZSBo
ZXJlLgorICAgICAgICAgICAgICAgIGlmICghc2NvcGVNYXBbcmFuZ2VdKSB7CisgICAgICAgICAg
ICAgICAgICAgIHNjb3BlTWFwW3JhbmdlXSA9IGluZGV4OworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogU3BsaXQgdGV4
dCBoZXJlIGludG8gYXJyYXkgb2YgbGluZXMgc28KKyAgICAgICAgICAgICAqIGl0J3Mgbm90IGJl
aW5nIGRvbmUgcmVwZWF0ZWRseQorICAgICAgICAgICAgICogYnkgaW5kaXZpZHVhbCBydWxlcy4K
KyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY3VycmVudFRleHRMaW5lcyA9IGN1cnJlbnRU
ZXh0LnNwbGl0KC9ccj9cbi9nKTsKKworICAgICAgICAgICAgLy8gRnJlZXppbmcgc28gYXJyYXkg
aXNuJ3QgYWNjaWRlbnRhbGx5IGNoYW5nZWQgYnkgYSBydWxlLgorICAgICAgICAgICAgT2JqZWN0
LmZyZWV6ZShjdXJyZW50VGV4dExpbmVzKTsKKworICAgICAgICAgICAgLyogZ2V0IGFsbCB0b2tl
bnMgZnJvbSB0aGUgYXN0IGFuZCBzdG9yZSB0aGVtIGFzIGEgaGFzaHRhYmxlIHRvCisgICAgICAg
ICAgICAgKiBpbXByb3ZlIHRyYXZlcnNhbCBzcGVlZCB3aGVuIHdhbnRpbmcgdG8gZmluZCB0b2tl
bnMgZm9yIGEgZ2l2ZW4KKyAgICAgICAgICAgICAqIG5vZGUKKyAgICAgICAgICAgICAqLworICAg
ICAgICAgICAgY3VycmVudFRva2VucyA9IFtdOworICAgICAgICAgICAgYXN0LnRva2Vucy5mb3JF
YWNoKGZ1bmN0aW9uKHRva2VuKSB7CisgICAgICAgICAgICAgICAgY3VycmVudFRva2Vuc1t0b2tl
bi5yYW5nZVswXV0gPSB0b2tlbjsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBh
dWdtZW50IGdsb2JhbCBzY29wZSB3aXRoIGRlY2xhcmVkIGdsb2JhbCB2YXJpYWJsZXMKKyAgICAg
ICAgICAgIGFkZERlY2xhcmVkR2xvYmFscyhhc3QsIGN1cnJlbnRTY29wZXNbMF0sIGN1cnJlbnRD
b25maWcpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRWFjaCBub2RlIGhhcyBh
IHR5cGUgcHJvcGVydHkuIFdoZW5ldmVyIGEgcGFydGljdWxhciB0eXBlIG9mIG5vZGUgaXMgZm91
bmQsCisgICAgICAgICAgICAgKiBhbiBldmVudCBpcyBmaXJlZC4gVGhpcyBhbGxvd3MgYW55IGxp
c3RlbmVycyB0byBhdXRvbWF0aWNhbGx5IGJlIGluZm9ybWVkCisgICAgICAgICAgICAgKiB0aGF0
IHRoaXMgdHlwZSBvZiBub2RlIGhhcyBiZWVuIGZvdW5kIGFuZCByZWFjdCBhY2NvcmRpbmdseS4K
KyAgICAgICAgICAgICAqLworICAgICAgICAgICAgY29udHJvbGxlci50cmF2ZXJzZShhc3QsIHsK
KyAgICAgICAgICAgICAgICBlbnRlcjogZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7CisKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGNvbW1lbnRzID0gYXBpLmdldENvbW1lbnRzKG5vZGUpOworCisg
ICAgICAgICAgICAgICAgICAgIGVtaXRDb21tZW50c0VudGVyKGNvbW1lbnRzLmxlYWRpbmcpOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgICAgICAg
ICAgICAgYXBpLmVtaXQobm9kZS50eXBlLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dENvbW1lbnRzRW50ZXIoY29tbWVudHMudHJhaWxpbmcpOworICAgICAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICAgICAgbGVhdmU6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgICAg
ICAgICB2YXIgY29tbWVudHMgPSBhcGkuZ2V0Q29tbWVudHMobm9kZSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdENvbW1lbnRzRXhpdChjb21tZW50cy50cmFpbGluZyk7CisgICAgICAgICAg
ICAgICAgICAgIGFwaS5lbWl0KG5vZGUudHlwZSArICI6ZXhpdCIsIG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBlbWl0Q29tbWVudHNFeGl0KGNvbW1lbnRzLmxlYWRpbmcpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
bWVzc2FnZXM7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIFJlcG9ydHMgYSBtZXNzYWdlIGZy
b20gb25lIG9mIHRoZSBydWxlcy4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gcnVsZUlkIFRoZSBJ
RCBvZiB0aGUgcnVsZSBjYXVzaW5nIHRoZSBtZXNzYWdlLgorICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBzZXZlcml0eSBUaGUgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIHJ1bGUgYXMgY29uZmlndXJlZC4K
KyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRoYXQgdGhlIG1lc3Nh
Z2UgcmVsYXRlcyB0by4KKyAgICAgKiBAcGFyYW0ge09iamVjdD19IGxvY2F0aW9uIEFuIG9iamVj
dCBjb250YWluaW5nIHRoZSBlcnJvciBsaW5lIGFuZCBjb2x1bW4KKyAgICAgKiAgICAgIG51bWJl
cnMuIElmIGxvY2F0aW9uIGlzIG5vdCBwcm92aWRlZCB0aGUgbm9kZSdzIHN0YXJ0IGxvY2F0aW9u
IHdpbGwKKyAgICAgKiAgICAgIGJlIHVzZWQuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3Nh
Z2UgVGhlIGFjdHVhbCBtZXNzYWdlLgorICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlv
bmFsIHRlbXBsYXRlIGRhdGEgd2hpY2ggcHJvZHVjZXMgYSBmb3JtYXR0ZWQgbWVzc2FnZQorICAg
ICAqICAgICB3aXRoIHN5bWJvbHMgYmVpbmcgcmVwbGFjZWQgYnkgdGhpcyBvYmplY3QncyB2YWx1
ZXMuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgYXBpLnJlcG9ydCA9IGZ1
bmN0aW9uKHJ1bGVJZCwgc2V2ZXJpdHksIG5vZGUsIGxvY2F0aW9uLCBtZXNzYWdlLCBvcHRzKSB7
CisKKyAgICAgICAgaWYgKHR5cGVvZiBsb2NhdGlvbiA9PT0gInN0cmluZyIpIHsKKyAgICAgICAg
ICAgIG9wdHMgPSBtZXNzYWdlOworICAgICAgICAgICAgbWVzc2FnZSA9IGxvY2F0aW9uOworICAg
ICAgICAgICAgbG9jYXRpb24gPSBub2RlLmxvYy5zdGFydDsKKyAgICAgICAgfQorCisgICAgICAg
IE9iamVjdC5rZXlzKG9wdHMgfHwge30pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeworICAgICAg
ICAgICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cCgie3siICsgZXNjYXBlUmVnRXhwKGtleSkgKyAifX0i
LCAiZyIpOworICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShyeCwgb3B0c1tr
ZXldKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKGlzRGlzYWJsZWRCeVJlcG9ydGluZ0Nv
bmZpZyhyZXBvcnRpbmdDb25maWcsIHJ1bGVJZCwgbG9jYXRpb24pKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtZXNzYWdlcy5wdXNoKHsKKyAgICAgICAgICAg
IHJ1bGVJZDogcnVsZUlkLAorICAgICAgICAgICAgc2V2ZXJpdHk6IHNldmVyaXR5LAorICAgICAg
ICAgICAgbm9kZTogbm9kZSwKKyAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCisgICAgICAg
ICAgICBsaW5lOiBsb2NhdGlvbi5saW5lLAorICAgICAgICAgICAgY29sdW1uOiBsb2NhdGlvbi5j
b2x1bW4sCisgICAgICAgICAgICBzb3VyY2U6IGFwaS5nZXRTb3VyY2Uobm9kZSkKKyAgICAgICAg
fSk7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHNvdXJjZSBjb2RlIGZvciB0
aGUgZ2l2ZW4gbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGU9fSBub2RlIFRoZSBBU1Qgbm9k
ZSB0byBnZXQgdGhlIHRleHQgZm9yLgorICAgICAqIEBwYXJhbSB7aW50PX0gYmVmb3JlQ291bnQg
VGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAg
ICAgKiBAcGFyYW0ge2ludD19IGFmdGVyQ291bnQgVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFm
dGVyIHRoZSBub2RlIHRvIHJldHJpZXZlLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSB0
ZXh0IHJlcHJlc2VudGluZyB0aGUgQVNUIG5vZGUuCisgICAgICovCisgICAgYXBpLmdldFNvdXJj
ZSA9IGZ1bmN0aW9uKG5vZGUsIGJlZm9yZUNvdW50LCBhZnRlckNvdW50KSB7CisgICAgICAgIGlm
IChub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gKGN1cnJlbnRUZXh0ICE9PSBudWxsKSA/IGN1
cnJlbnRUZXh0LnNsaWNlKG5vZGUucmFuZ2VbMF0gLSAoYmVmb3JlQ291bnQgfHwgMCksCisgICAg
ICAgICAgICAgICAgbm9kZS5yYW5nZVsxXSArIChhZnRlckNvdW50IHx8IDApKSA6IG51bGw7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7CisgICAgICAg
IH0KKworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBlbnRpcmUgc291cmNlIHRl
eHQgc3BsaXQgaW50byBhbiBhcnJheSBvZiBsaW5lcy4KKyAgICAgKiBAcmV0dXJucyB7QXJyYXl9
IFRoZSBzb3VyY2UgdGV4dCBhcyBhbiBhcnJheSBvZiBsaW5lcy4KKyAgICAgKi8KKyAgICBhcGku
Z2V0U291cmNlTGluZXMgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0
TGluZXM7CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgYWxsIGNvbW1lbnRzIGZvciB0
aGUgZ2l2ZW4gbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2Rl
IHRvIGdldCB0aGUgY29tbWVudHMgZm9yLgorICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBs
aXN0IG9mIGNvbW1lbnRzIGluZGV4ZWQgYnkgdGhlaXIgcG9zaXRpb24uCisgICAgICovCisgICAg
YXBpLmdldENvbW1lbnRzID0gZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgIHZhciBsZWFkaW5n
Q29tbWVudHMgPSBub2RlLmxlYWRpbmdDb21tZW50cyB8fCBbXSwKKyAgICAgICAgICAgIHRyYWls
aW5nQ29tbWVudHMgPSBub2RlLnRyYWlsaW5nQ29tbWVudHMgfHwgW107CisKKyAgICAgICAgLyoK
KyAgICAgICAgICogRXNwcmltYSBhZGRzIGEgImNvbW1lbnRzIiBhcnJheSBvbiBQcm9ncmFtIG5v
ZGVzIHJhdGhlciB0aGFuCisgICAgICAgICAqIGxlYWRpbmdDb21tZW50cy90cmFpbGluZ0NvbW1l
bnRzLiBDb21tZW50cyBhcmUgb25seSBsZWZ0IGluIHRoZQorICAgICAgICAgKiBQcm9ncmFtIG5v
ZGUgY29tbWVudHMgYXJyYXkgaWYgdGhlcmUgaXMgbm8gZXhlY3V0YWJsZSBjb2RlLgorICAgICAg
ICAgKi8KKyAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gIlByb2dyYW0iKSB7CisgICAgICAgICAg
ICBpZiAobm9kZS5ib2R5Lmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIGxlYWRpbmdD
b21tZW50cyA9IG5vZGUuY29tbWVudHM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgbGVhZGluZzogbGVhZGluZ0NvbW1lbnRzLAorICAg
ICAgICAgICAgdHJhaWxpbmc6IHRyYWlsaW5nQ29tbWVudHMKKyAgICAgICAgfTsKKyAgICB9Owor
CisgICAgLyoqCisgICAgICogUmV0cmlldmVzIHRoZSBKU0RvYyBjb21tZW50IGZvciBhIGdpdmVu
IG5vZGUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBnZXQg
dGhlIGNvbW1lbnQgZm9yLgorICAgICAqIEByZXR1cm5zIHtBU1ROb2RlfSBUaGUgQmxvY2tDb21t
ZW50IG5vZGUgY29udGFpbmluZyB0aGUgSlNEb2MgZm9yIHRoZQorICAgICAqICAgICAgZ2l2ZW4g
bm9kZSBvciBudWxsIGlmIG5vdCBmb3VuZC4KKyAgICAgKi8KKyAgICBhcGkuZ2V0SlNEb2NDb21t
ZW50ID0gZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVu
dCwKKyAgICAgICAgICAgIGxpbmUgPSBub2RlLmxvYy5zdGFydC5saW5lOworCisgICAgICAgIC8q
KgorICAgICAgICAgKiBGaW5kcyBhIEpTRG9jIGNvbW1lbnQgbm9kZSBpbiBhbiBhcnJheSBvZiBj
b21tZW50IG5vZGVzLgorICAgICAgICAgKiBAcGFyYW0ge0FTVE5vZGVbXX0gY29tbWVudHMgVGhl
IGFycmF5IG9mIGNvbW1lbnQgbm9kZXMgdG8gc2VhcmNoLgorICAgICAgICAgKiBAcmV0dXJucyB7
QVNUTm9kZX0gVGhlIG5vZGUgaWYgZm91bmQsIG51bGwgaWYgbm90LgorICAgICAgICAgKiBAcHJp
dmF0ZQorICAgICAgICAgKi8KKyAgICAgICAgZnVuY3Rpb24gZmluZEpTRG9jQ29tbWVudChjb21t
ZW50cykgeworCisgICAgICAgICAgICBpZiAoY29tbWVudHMpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gY29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvbW1lbnRzW2ldLnR5cGUgPT09ICJCbG9jayIgJiYgY29tbWVudHNb
aV0udmFsdWUuY2hhckF0KDApID09PSAiKiIpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGxpbmUgLSBjb21tZW50c1tpXS5sb2MuZW5kLmxpbmUgPD0gMSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjb21tZW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9
CisKKyAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgIkZ1bmN0
aW9uRGVjbGFyYXRpb24iOgorICAgICAgICAgICAgICAgIHJldHVybiBmaW5kSlNEb2NDb21tZW50
KG5vZGUubGVhZGluZ0NvbW1lbnRzKTsKKworICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb25FeHBy
ZXNzaW9uIjoKKworICAgICAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSAhPT0gIkNhbGxFeHBy
ZXNzaW9uIiB8fCBwYXJlbnQuY2FsbGVlICE9PSBub2RlKSB7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlIChwYXJlbnQgJiYgIXBhcmVudC5sZWFkaW5nQ29tbWVudHMgJiYgcGFyZW50LnR5cGUg
IT09ICJGdW5jdGlvbkV4cHJlc3Npb24iICYmIHBhcmVudC50eXBlICE9PSAiRnVuY3Rpb25EZWNs
YXJhdGlvbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJl
bnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cGFyZW50ICYmIChwYXJlbnQudHlwZSAhPT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iKSA/IGZpbmRK
U0RvY0NvbW1lbnQocGFyZW50LmxlYWRpbmdDb21tZW50cykgOiBudWxsOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGZhbGxzIHRocm91Z2gKKworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbnVtYmVyIG9mIHRva2VucyB0aGF0IHByZWNlZGUg
YSBnaXZlbiBub2RlJ3MgdG9rZW5zIGluIHRoZSB0b2tlbiBzdHJlYW0uCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2JlZm9y
ZUNvdW50PTBdIFRoZSBudW1iZXIgb2YgdG9rZW5zIGJlZm9yZSB0aGUgbm9kZSB0byByZXRyaWV2
ZS4KKyAgICAgKiBAcmV0dXJucyB7W1Rva2VuXX0gQXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRp
bmcgdG9rZW5zLgorICAgICAqLworICAgIGFwaS5nZXRUb2tlbnNCZWZvcmUgPSBmdW5jdGlvbihu
b2RlLCBiZWZvcmVDb3VudCkgeworICAgICAgICB2YXIgYmVmb3JlVG9rZW5zID0gW10sIGN1cnNv
ciA9IG5vZGUucmFuZ2VbMF0gLSAxOworICAgICAgICB3aGlsZSAoYmVmb3JlQ291bnQgPiAwICYm
IGN1cnNvciA+PSAwKSB7CisgICAgICAgICAgICBpZiAoY3VycmVudFRva2Vuc1tjdXJzb3JdKSB7
CisgICAgICAgICAgICAgICAgYmVmb3JlVG9rZW5zLnVuc2hpZnQoY3VycmVudFRva2Vuc1tjdXJz
b3JdKTsKKyAgICAgICAgICAgICAgICAtLWJlZm9yZUNvdW50OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgLS1jdXJzb3I7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJlZm9yZVRva2Vu
czsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgdG9rZW4gdGhhdCBwcmVjZWRl
cyBhIGdpdmVuIG5vZGUncyB0b2tlbnMgaW4gdGhlIHRva2VuIHN0cmVhbS4KKyAgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBbc2tp
cD0wXSBBIG51bWJlciBvZiB0b2tlbnMgdG8gc2tpcCBiZWZvcmUgdGhlIGdpdmVuIG5vZGUuCisg
ICAgICogQHJldHVybnMge1Rva2VufSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB0b2tlbi4K
KyAgICAgKi8KKyAgICBhcGkuZ2V0VG9rZW5CZWZvcmUgPSBmdW5jdGlvbihub2RlLCBza2lwKSB7
CisgICAgICAgIGZvciAodmFyIGN1cnNvciA9IG5vZGUucmFuZ2VbMF0gLSAxOyBjdXJzb3IgPj0g
MDsgLS1jdXJzb3IpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsK
KyAgICAgICAgICAgICAgICBpZiAoc2tpcCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLS1z
a2lwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjdXJyZW50VG9rZW5zW2N1cnNvcl07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgYSBudW1iZXIgb2Yg
dG9rZW5zIHRoYXQgcHJlY2VkZSBhIGdpdmVuIG5vZGUncyB0b2tlbnMgaW4gdGhlIHRva2VuIHN0
cmVhbS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAq
IEBwYXJhbSB7aW50fSBbYWZ0ZXJDb3VudD0wXSBUaGUgbnVtYmVyIG9mIHRva2VucyBhZnRlciB0
aGUgbm9kZSB0byByZXRyaWV2ZS4KKyAgICAgKiBAcmV0dXJucyB7W1Rva2VuXX0gQXJyYXkgb2Yg
b2JqZWN0cyByZXByZXNlbnRpbmcgdG9rZW5zLgorICAgICAqLworICAgIGFwaS5nZXRUb2tlbnNB
ZnRlciA9IGZ1bmN0aW9uKG5vZGUsIGFmdGVyQ291bnQpIHsKKyAgICAgICAgdmFyIGFmdGVyVG9r
ZW5zID0gW10sIGN1cnNvciA9IG5vZGUucmFuZ2VbMV07CisgICAgICAgIHdoaWxlIChhZnRlckNv
dW50ID4gMCAmJiBjdXJzb3IgPCBjdXJyZW50VG9rZW5zLmxlbmd0aCkgeworICAgICAgICAgICAg
aWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAgICAgIGFmdGVyVG9rZW5z
LnB1c2goY3VycmVudFRva2Vuc1tjdXJzb3JdKTsKKyAgICAgICAgICAgICAgICAtLWFmdGVyQ291
bnQ7CisgICAgICAgICAgICAgICAgY3Vyc29yID0gY3VycmVudFRva2Vuc1tjdXJzb3JdLnJhbmdl
WzFdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2N1cnNvcjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYWZ0ZXJUb2tlbnM7CisgICAg
fTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHRva2VuIHRoYXQgZm9sbG93cyBhIGdpdmVu
IG5vZGUncyB0b2tlbnMgaW4gdGhlIHRva2VuIHN0cmVhbS4KKyAgICAgKiBAcGFyYW0ge0FTVE5v
ZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBbc2tpcD0wXSBBIG51
bWJlciBvZiB0b2tlbnMgdG8gc2tpcCBhZnRlciB0aGUgZ2l2ZW4gbm9kZS4KKyAgICAgKiBAcmV0
dXJucyB7VG9rZW59IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHRva2VuLgorICAgICAqLwor
ICAgIGFwaS5nZXRUb2tlbkFmdGVyID0gZnVuY3Rpb24obm9kZSwgc2tpcCkgeworICAgICAgICBm
b3IgKHZhciBjdXJzb3IgPSBub2RlLnJhbmdlWzFdOyBjdXJzb3IgPCBjdXJyZW50VG9rZW5zLmxl
bmd0aDsgKytjdXJzb3IpIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0p
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2tpcCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAg
LS1za2lwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjdXJyZW50VG9rZW5zW2N1cnNvcl07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgYWxsIHRva2Vu
cyB0aGF0IGFyZSByZWxhdGVkIHRvIHRoZSBnaXZlbiBub2RlLgorICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtiZWZvcmVDb3Vu
dD0wXSBUaGUgbnVtYmVyIG9mIHRva2VucyBiZWZvcmUgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisg
ICAgICogQHBhcmFtIHtpbnR9IFthZnRlckNvdW50PTBdIFRoZSBudW1iZXIgb2YgdG9rZW5zIGFm
dGVyIHRoZSBub2RlIHRvIHJldHJpZXZlLgorICAgICAqIEByZXR1cm5zIHtbVG9rZW5dfSBBcnJh
eSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0b2tlbnMuCisgICAgICovCisgICAgYXBpLmdldFRv
a2VucyA9IGZ1bmN0aW9uKG5vZGUsIGJlZm9yZUNvdW50LCBhZnRlckNvdW50KSB7CisgICAgICAg
IHZhciBiZWZvcmVUb2tlbnMgPSBhcGkuZ2V0VG9rZW5zQmVmb3JlKG5vZGUsIGJlZm9yZUNvdW50
KSwKKyAgICAgICAgICAgIGFmdGVyVG9rZW5zID0gYXBpLmdldFRva2Vuc0FmdGVyKG5vZGUsIGFm
dGVyQ291bnQpLAorICAgICAgICAgICAgdG9rZW5zID0gW10sCisgICAgICAgICAgICBjdXJzb3Ig
PSBub2RlLnJhbmdlWzBdOworICAgICAgICB3aGlsZSAoY3Vyc29yIDwgbm9kZS5yYW5nZVsxXSkg
eworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAg
ICAgIHRva2Vucy5wdXNoKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSk7CisgICAgICAgICAgICAgICAg
Y3Vyc29yID0gY3VycmVudFRva2Vuc1tjdXJzb3JdLnJhbmdlWzFdOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICArK2N1cnNvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gYmVmb3JlVG9rZW5zLmNvbmNhdCh0b2tlbnMsIGFmdGVyVG9rZW5z
KTsKKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZmlyc3QgYGNvdW50YCB0b2tl
bnMgb2YgdGhlIGdpdmVuIG5vZGUncyB0b2tlbiBzdHJlYW0uCisgICAgICogQHBhcmFtIHtBU1RO
b2RlfSBub2RlIFRoZSBBU1Qgbm9kZS4KKyAgICAgKiBAcGFyYW0ge2ludH0gW2NvdW50PTBdIFRo
ZSBudW1iZXIgb2YgdG9rZW5zIG9mIHRoZSBub2RlIHRvIHJldHJpZXZlLgorICAgICAqIEByZXR1
cm5zIHtbVG9rZW5dfSBBcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyB0b2tlbnMuCisgICAg
ICovCisgICAgYXBpLmdldEZpcnN0VG9rZW5zID0gZnVuY3Rpb24obm9kZSwgY291bnQpIHsKKyAg
ICAgICAgdmFyIHRva2VucyA9IFtdLCBjdXJzb3IgPSBub2RlLnJhbmdlWzBdOworICAgICAgICB3
aGlsZSAoY291bnQgPiAwICYmIGN1cnNvciA8IG5vZGUucmFuZ2VbMV0pIHsKKyAgICAgICAgICAg
IGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMucHVz
aChjdXJyZW50VG9rZW5zW2N1cnNvcl0pOworICAgICAgICAgICAgICAgIC0tY291bnQ7CisgICAg
ICAgICAgICAgICAgY3Vyc29yID0gY3VycmVudFRva2Vuc1tjdXJzb3JdLnJhbmdlWzFdOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2N1cnNvcjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9rZW5zOworICAgIH07CisKKyAgICAvKioK
KyAgICAgKiBHZXRzIHRoZSBmaXJzdCB0b2tlbiBvZiB0aGUgZ2l2ZW4gbm9kZSdzIHRva2VuIHN0
cmVhbS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAq
IEBwYXJhbSB7aW50fSBbc2tpcD0wXSBBIG51bWJlciBvZiB0b2tlbnMgdG8gc2tpcC4KKyAgICAg
KiBAcmV0dXJucyB7VG9rZW59IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHRva2VuLgorICAg
ICAqLworICAgIGFwaS5nZXRGaXJzdFRva2VuID0gZnVuY3Rpb24obm9kZSwgc2tpcCkgeworICAg
ICAgICBmb3IgKHZhciBjdXJzb3IgPSBub2RlLnJhbmdlWzBdOyBjdXJzb3IgPCBub2RlLnJhbmdl
WzFdOyArK2N1cnNvcikgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkg
eworICAgICAgICAgICAgICAgIGlmIChza2lwID4gMCkgeworICAgICAgICAgICAgICAgICAgICAt
LXNraXA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGN1cnJlbnRUb2tlbnNbY3Vyc29yXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbGFzdCBg
Y291bnRgIHRva2VucyBvZiB0aGUgZ2l2ZW4gbm9kZS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9
IG5vZGUgVGhlIEFTVCBub2RlLgorICAgICAqIEBwYXJhbSB7aW50fSBbY291bnQ9MF0gVGhlIG51
bWJlciBvZiB0b2tlbnMgb2YgdGhlIG5vZGUgdG8gcmV0cmlldmUuCisgICAgICogQHJldHVybnMg
e1tUb2tlbl19IEFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRva2Vucy4KKyAgICAgKi8K
KyAgICBhcGkuZ2V0TGFzdFRva2VucyA9IGZ1bmN0aW9uKG5vZGUsIGNvdW50KSB7CisgICAgICAg
IHZhciB0b2tlbnMgPSBbXSwgY3Vyc29yID0gbm9kZS5yYW5nZVsxXSAtIDE7CisgICAgICAgIHdo
aWxlIChjb3VudCA+IDAgJiYgY3Vyc29yID49IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAg
IGlmIChjdXJyZW50VG9rZW5zW2N1cnNvcl0pIHsKKyAgICAgICAgICAgICAgICB0b2tlbnMudW5z
aGlmdChjdXJyZW50VG9rZW5zW2N1cnNvcl0pOworICAgICAgICAgICAgICAgIC0tY291bnQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAtLWN1cnNvcjsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdG9rZW5zOworICAgIH07CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsYXN0IHRv
a2VuIG9mIHRoZSBnaXZlbiBub2RlJ3MgdG9rZW4gc3RyZWFtLgorICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUuCisgICAgICogQHBhcmFtIHtpbnR9IFtza2lwPTBdIEEg
bnVtYmVyIG9mIHRva2VucyB0byBza2lwLgorICAgICAqIEByZXR1cm5zIHtUb2tlbn0gQW4gb2Jq
ZWN0IHJlcHJlc2VudGluZyB0aGUgdG9rZW4uCisgICAgICovCisgICAgYXBpLmdldExhc3RUb2tl
biA9IGZ1bmN0aW9uKG5vZGUsIHNraXApIHsKKyAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gbm9k
ZS5yYW5nZVsxXSAtIDE7IGN1cnNvciA+PSBub2RlLnJhbmdlWzBdOyAtLWN1cnNvcikgeworICAg
ICAgICAgICAgaWYgKGN1cnJlbnRUb2tlbnNbY3Vyc29yXSkgeworICAgICAgICAgICAgICAgIGlm
IChza2lwID4gMCkgeworICAgICAgICAgICAgICAgICAgICAtLXNraXA7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUb2tlbnNbY3Vy
c29yXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLyoqCisgICAgICogR2V0cyBub2RlcyB0aGF0IGFyZSBhbmNlc3RvcnMgb2YgY3Vy
cmVudCBub2RlLgorICAgICAqIEByZXR1cm5zIHtBU1ROb2RlW119IEFycmF5IG9mIG9iamVjdHMg
cmVwcmVzZW50aW5nIGFuY2VzdG9ycy4KKyAgICAgKi8KKyAgICBhcGkuZ2V0QW5jZXN0b3JzID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBjb250cm9sbGVyLnBhcmVudHMoKTsKKyAgICB9
OworCisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzY29wZSBmb3IgdGhlIGN1cnJlbnQgbm9k
ZS4KKyAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBj
dXJyZW50IG5vZGUncyBzY29wZS4KKyAgICAgKi8KKyAgICBhcGkuZ2V0U2NvcGUgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgdmFyIHBhcmVudHMgPSBjb250cm9sbGVyLnBhcmVudHMoKSwKKyAgICAg
ICAgICAgIGlubmVyQmxvY2sgPSBudWxsLAorICAgICAgICAgICAgc2VsZWN0ZWRTY29wZUluZGV4
OworCisgICAgICAgIC8vIERvbid0IGRvIHRoaXMgZm9yIFByb2dyYW0gbm9kZXMgLSB0aGV5IGhh
dmUgbm8gcGFyZW50cworICAgICAgICBpZiAocGFyZW50cy5sZW5ndGgpIHsKKworICAgICAgICAg
ICAgLy8gaWYgY3VycmVudCBub2RlIGlzIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBhZGQgaXQgdG8g
dGhlIGxpc3QKKyAgICAgICAgICAgIHZhciBjdXJyZW50ID0gY29udHJvbGxlci5jdXJyZW50KCk7
CisgICAgICAgICAgICBpZiAoY3VycmVudC50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIg
fHwgY3VycmVudC50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgeworICAgICAgICAgICAg
ICAgIHBhcmVudHMucHVzaChjdXJyZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gQXNjZW5kIHRoZSBjdXJyZW50IG5vZGUncyBwYXJlbnRzCisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gcGFyZW50cy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeworCisgICAgICAgICAgICAg
ICAgLy8gVGhlIGZpcnN0IG5vZGUgdGhhdCByZXF1aXJlcyBhIHNjb3BlIGlzIHRoZSBub2RlIHRo
YXQgd2lsbCBiZQorICAgICAgICAgICAgICAgIC8vIG91ciBjdXJyZW50IG5vZGUncyBpbm5lcm1v
c3Qgc2NvcGUuCisgICAgICAgICAgICAgICAgaWYgKGVzY29wZS5TY29wZS5pc1Njb3BlUmVxdWly
ZWQocGFyZW50c1tpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5uZXJCbG9jayA9IHBhcmVu
dHNbaV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRmluZCBhbmQgcmV0dXJuIHRoZSBpbm5lcm1v
c3Qgc2NvcGUKKyAgICAgICAgICAgIHNlbGVjdGVkU2NvcGVJbmRleCA9IHNjb3BlTWFwW2lubmVy
QmxvY2sucmFuZ2VbMF1dOworCisgICAgICAgICAgICAvLyBOYW1lZCBmdW5jdGlvbiBleHByZXNz
aW9ucyBjcmVhdGUgdHdvIG5lc3RlZCBzY29wZSBvYmplY3RzLiBUaGUKKyAgICAgICAgICAgIC8v
IG91dGVyIHNjb3BlIGNvbnRhaW5zIG9ubHkgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gbmFtZS4g
V2UgcmV0dXJuCisgICAgICAgICAgICAvLyB0aGUgaW5uZXIgc2NvcGUuCisgICAgICAgICAgICBp
ZiAoaW5uZXJCbG9jay50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9uIiAmJiBpbm5lckJsb2Nr
LmlkICYmIGlubmVyQmxvY2suaWQubmFtZSkgeworICAgICAgICAgICAgICAgICsrc2VsZWN0ZWRT
Y29wZUluZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gY3VycmVudFNj
b3Blc1tzZWxlY3RlZFNjb3BlSW5kZXhdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnRTY29wZXNbMF07ICAgIC8vIGdsb2JhbCBzY29wZQorICAgICAgICB9Cisg
ICAgfTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGZpbGVuYW1lIGZvciB0aGUgY3VycmVu
dGx5IHBhcnNlZCBzb3VyY2UuCisgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZpbGVuYW1l
IGFzc29jaWF0ZWQgd2l0aCB0aGUgc291cmNlIGJlaW5nIHBhcnNlZC4KKyAgICAgKiAgICAgRGVm
YXVsdHMgdG8gIjxpbnB1dD4iIGlmIG5vIGZpbGVuYW1lIGluZm8gaXMgcHJlc2VudC4KKyAgICAg
Ki8KKyAgICBhcGkuZ2V0RmlsZW5hbWUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHR5cGVv
ZiBjdXJyZW50RmlsZW5hbWUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICByZXR1cm4gY3Vy
cmVudEZpbGVuYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICI8aW5w
dXQ+IjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEZWZpbmVzIGEgbmV3
IGxpbnRpbmcgcnVsZS4KKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gcnVsZUlkIEEgdW5pcXVlIHJ1
bGUgaWRlbnRpZmllcgorICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJ1bGVNb2R1bGUgRnVuY3Rp
b24gZnJvbSBjb250ZXh0IHRvIG9iamVjdCBtYXBwaW5nIEFTVCBub2RlIHR5cGVzIHRvIGV2ZW50
IGhhbmRsZXJzCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgdmFyIGRlZmlu
ZVJ1bGUgPSBhcGkuZGVmaW5lUnVsZSA9IGZ1bmN0aW9uKHJ1bGVJZCwgcnVsZU1vZHVsZSkgewor
ICAgICAgICBydWxlcy5kZWZpbmUocnVsZUlkLCBydWxlTW9kdWxlKTsKKyAgICB9OworCisgICAg
LyoqCisgICAgICogRGVmaW5lcyBtYW55IG5ldyBsaW50aW5nIHJ1bGVzLgorICAgICAqIEBwYXJh
bSB7b2JqZWN0fSBydWxlcyBtYXAgZnJvbSB1bmlxdWUgcnVsZSBpZGVudGlmaWVyIHRvIHJ1bGUK
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBhcGkuZGVmaW5lUnVsZXMgPSBm
dW5jdGlvbihydWxlcykgeworICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhydWxl
cykuZm9yRWFjaChmdW5jdGlvbihydWxlSWQpeworICAgICAgICAgICAgZGVmaW5lUnVsZShydWxl
SWQsIHJ1bGVzW3J1bGVJZF0pOworICAgICAgICB9KTsKKyAgICB9OworCisgICAgLyoqCisgICAg
ICogR2V0cyB0aGUgZGVmYXVsdCBlc2xpbnQgY29uZmlndXJhdGlvbi4KKyAgICAgKiBAcmV0dXJu
cyB7T2JqZWN0fSBPYmplY3QgbWFwcGluZyBydWxlIElEcyB0byB0aGVpciBkZWZhdWx0IGNvbmZp
Z3VyYXRpb25zCisgICAgICovCisgICAgYXBpLmRlZmF1bHRzID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJldHVybiByZXF1aXJlKCIuLi9jb25mL2VzbGludC5qc29uIik7CisgICAgfTsKKworICAg
IHJldHVybiBhcGk7CisKK30oKSk7CisKK30seyIuLi9jb25mL2Vudmlyb25tZW50cy5qc29uIjox
LCIuLi9jb25mL2VzbGludC5qc29uIjoyLCIuL3J1bGUtY29udGV4dCI6MTEsIi4vcnVsZXMiOjEy
LCIuL3V0aWwiOjE0NCwiZXNjb3BlIjo1LCJlc3ByaW1hIjo2LCJlc3RyYXZlcnNlIjo3LCJldmVu
dHMiOjMsIm9iamVjdC1hc3NpZ24iOjh9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7Cittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBydWxlcyA9IE9i
amVjdC5jcmVhdGUobnVsbCk7CisgICAgcnVsZXNbImJsb2NrLXNjb3BlZC12YXIiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvYmxvY2stc2NvcGVkLXZhciIpOworICAgIHJ1bGVzWyJicmFjZS1zdHlsZSJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9icmFjZS1zdHlsZSIpOworICAgIHJ1bGVzWyJjYW1lbGNhc2Ui
XSA9IHJlcXVpcmUoIi4vcnVsZXMvY2FtZWxjYXNlIik7CisgICAgcnVsZXNbImNvbW1hLXN0eWxl
Il0gPSByZXF1aXJlKCIuL3J1bGVzL2NvbW1hLXN0eWxlIik7CisgICAgcnVsZXNbImNvbXBsZXhp
dHkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29tcGxleGl0eSIpOworICAgIHJ1bGVzWyJjb25zaXN0
ZW50LXJldHVybiJdID0gcmVxdWlyZSgiLi9ydWxlcy9jb25zaXN0ZW50LXJldHVybiIpOworICAg
IHJ1bGVzWyJjb25zaXN0ZW50LXRoaXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvY29uc2lzdGVudC10
aGlzIik7CisgICAgcnVsZXNbImN1cmx5Il0gPSByZXF1aXJlKCIuL3J1bGVzL2N1cmx5Iik7Cisg
ICAgcnVsZXNbImRlZmF1bHQtY2FzZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9kZWZhdWx0LWNhc2Ui
KTsKKyAgICBydWxlc1siZG90LW5vdGF0aW9uIl0gPSByZXF1aXJlKCIuL3J1bGVzL2RvdC1ub3Rh
dGlvbiIpOworICAgIHJ1bGVzWyJlb2wtbGFzdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9lb2wtbGFz
dCIpOworICAgIHJ1bGVzWyJlcWVxZXEiXSA9IHJlcXVpcmUoIi4vcnVsZXMvZXFlcWVxIik7Cisg
ICAgcnVsZXNbImZ1bmMtbmFtZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvZnVuYy1uYW1lcyIpOwor
ICAgIHJ1bGVzWyJmdW5jLXN0eWxlIl0gPSByZXF1aXJlKCIuL3J1bGVzL2Z1bmMtc3R5bGUiKTsK
KyAgICBydWxlc1siZ2xvYmFsLXN0cmljdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9nbG9iYWwtc3Ry
aWN0Iik7CisgICAgcnVsZXNbImd1YXJkLWZvci1pbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9ndWFy
ZC1mb3ItaW4iKTsKKyAgICBydWxlc1siaGFuZGxlLWNhbGxiYWNrLWVyciJdID0gcmVxdWlyZSgi
Li9ydWxlcy9oYW5kbGUtY2FsbGJhY2stZXJyIik7CisgICAgcnVsZXNbIm1heC1kZXB0aCJdID0g
cmVxdWlyZSgiLi9ydWxlcy9tYXgtZGVwdGgiKTsKKyAgICBydWxlc1sibWF4LWxlbiJdID0gcmVx
dWlyZSgiLi9ydWxlcy9tYXgtbGVuIik7CisgICAgcnVsZXNbIm1heC1uZXN0ZWQtY2FsbGJhY2tz
Il0gPSByZXF1aXJlKCIuL3J1bGVzL21heC1uZXN0ZWQtY2FsbGJhY2tzIik7CisgICAgcnVsZXNb
Im1heC1wYXJhbXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbWF4LXBhcmFtcyIpOworICAgIHJ1bGVz
WyJtYXgtc3RhdGVtZW50cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9tYXgtc3RhdGVtZW50cyIpOwor
ICAgIHJ1bGVzWyJuZXctY2FwIl0gPSByZXF1aXJlKCIuL3J1bGVzL25ldy1jYXAiKTsKKyAgICBy
dWxlc1sibmV3LXBhcmVucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uZXctcGFyZW5zIik7CisgICAg
cnVsZXNbIm5vLWFsZXJ0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWFsZXJ0Iik7CisgICAgcnVs
ZXNbIm5vLWFycmF5LWNvbnN0cnVjdG9yIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWFycmF5LWNv
bnN0cnVjdG9yIik7CisgICAgcnVsZXNbIm5vLWJpdHdpc2UiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tYml0d2lzZSIpOworICAgIHJ1bGVzWyJuby1jYWxsZXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tY2FsbGVyIik7CisgICAgcnVsZXNbIm5vLWNhdGNoLXNoYWRvdyJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1jYXRjaC1zaGFkb3ciKTsKKyAgICBydWxlc1sibm8tY29tbWEtZGFuZ2xlIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLWNvbW1hLWRhbmdsZSIpOworICAgIHJ1bGVzWyJuby1jb25kLWFz
c2lnbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1jb25kLWFzc2lnbiIpOworICAgIHJ1bGVzWyJu
by1jb25zb2xlIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNvbnNvbGUiKTsKKyAgICBydWxlc1si
bm8tY29uc3RhbnQtY29uZGl0aW9uIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWNvbnN0YW50LWNv
bmRpdGlvbiIpOworICAgIHJ1bGVzWyJuby1jb250cm9sLXJlZ2V4Il0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLWNvbnRyb2wtcmVnZXgiKTsKKyAgICBydWxlc1sibm8tZGVidWdnZXIiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tZGVidWdnZXIiKTsKKyAgICBydWxlc1sibm8tZGVsZXRlLXZhciJdID0g
cmVxdWlyZSgiLi9ydWxlcy9uby1kZWxldGUtdmFyIik7CisgICAgcnVsZXNbIm5vLWRpdi1yZWdl
eCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1kaXYtcmVnZXgiKTsKKyAgICBydWxlc1sibm8tZHVw
ZS1rZXlzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWR1cGUta2V5cyIpOworICAgIHJ1bGVzWyJu
by1lbHNlLXJldHVybiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1lbHNlLXJldHVybiIpOworICAg
IHJ1bGVzWyJuby1lbXB0eS1jbGFzcyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1lbXB0eS1jbGFz
cyIpOworICAgIHJ1bGVzWyJuby1lbXB0eS1sYWJlbCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1l
bXB0eS1sYWJlbCIpOworICAgIHJ1bGVzWyJuby1lbXB0eSJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1lbXB0eSIpOworICAgIHJ1bGVzWyJuby1lcS1udWxsIl0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LWVxLW51bGwiKTsKKyAgICBydWxlc1sibm8tZXZhbCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1l
dmFsIik7CisgICAgcnVsZXNbIm5vLWV4LWFzc2lnbiJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1l
eC1hc3NpZ24iKTsKKyAgICBydWxlc1sibm8tZXh0ZW5kLW5hdGl2ZSJdID0gcmVxdWlyZSgiLi9y
dWxlcy9uby1leHRlbmQtbmF0aXZlIik7CisgICAgcnVsZXNbIm5vLWV4dHJhLWJpbmQiXSA9IHJl
cXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtYmluZCIpOworICAgIHJ1bGVzWyJuby1leHRyYS1ib29s
ZWFuLWNhc3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tZXh0cmEtYm9vbGVhbi1jYXN0Iik7Cisg
ICAgcnVsZXNbIm5vLWV4dHJhLXBhcmVucyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1leHRyYS1w
YXJlbnMiKTsKKyAgICBydWxlc1sibm8tZXh0cmEtc2VtaSJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1leHRyYS1zZW1pIik7CisgICAgcnVsZXNbIm5vLWV4dHJhLXN0cmljdCJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1leHRyYS1zdHJpY3QiKTsKKyAgICBydWxlc1sibm8tZmFsbHRocm91Z2giXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tZmFsbHRocm91Z2giKTsKKyAgICBydWxlc1sibm8tZmxvYXRp
bmctZGVjaW1hbCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1mbG9hdGluZy1kZWNpbWFsIik7Cisg
ICAgcnVsZXNbIm5vLWZ1bmMtYXNzaWduIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLWZ1bmMtYXNz
aWduIik7CisgICAgcnVsZXNbIm5vLWltcGxpZWQtZXZhbCJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1pbXBsaWVkLWV2YWwiKTsKKyAgICBydWxlc1sibm8taW5uZXItZGVjbGFyYXRpb25zIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLWlubmVyLWRlY2xhcmF0aW9ucyIpOworICAgIHJ1bGVzWyJuby1p
bnZhbGlkLXJlZ2V4cCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1pbnZhbGlkLXJlZ2V4cCIpOwor
ICAgIHJ1bGVzWyJuby1pdGVyYXRvciJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1pdGVyYXRvciIp
OworICAgIHJ1bGVzWyJuby1sYWJlbC12YXIiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tbGFiZWwt
dmFyIik7CisgICAgcnVsZXNbIm5vLWxhYmVscyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1sYWJl
bHMiKTsKKyAgICBydWxlc1sibm8tbG9uZS1ibG9ja3MiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8t
bG9uZS1ibG9ja3MiKTsKKyAgICBydWxlc1sibm8tbG9uZWx5LWlmIl0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLWxvbmVseS1pZiIpOworICAgIHJ1bGVzWyJuby1sb29wLWZ1bmMiXSA9IHJlcXVpcmUo
Ii4vcnVsZXMvbm8tbG9vcC1mdW5jIik7CisgICAgcnVsZXNbIm5vLW1peGVkLXJlcXVpcmVzIl0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLW1peGVkLXJlcXVpcmVzIik7CisgICAgcnVsZXNbIm5vLW1p
eGVkLXNwYWNlcy1hbmQtdGFicyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1taXhlZC1zcGFjZXMt
YW5kLXRhYnMiKTsKKyAgICBydWxlc1sibm8tbXVsdGktc3RyIl0gPSByZXF1aXJlKCIuL3J1bGVz
L25vLW11bHRpLXN0ciIpOworICAgIHJ1bGVzWyJuby1uYXRpdmUtcmVhc3NpZ24iXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tbmF0aXZlLXJlYXNzaWduIik7CisgICAgcnVsZXNbIm5vLW5lZ2F0ZWQt
aW4tbGhzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5lZ2F0ZWQtaW4tbGhzIik7CisgICAgcnVs
ZXNbIm5vLW5lc3RlZC10ZXJuYXJ5Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5lc3RlZC10ZXJu
YXJ5Iik7CisgICAgcnVsZXNbIm5vLW5ldy1mdW5jIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW5l
dy1mdW5jIik7CisgICAgcnVsZXNbIm5vLW5ldy1vYmplY3QiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tbmV3LW9iamVjdCIpOworICAgIHJ1bGVzWyJuby1uZXctcmVxdWlyZSJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1uZXctcmVxdWlyZSIpOworICAgIHJ1bGVzWyJuby1uZXctd3JhcHBlcnMiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tbmV3LXdyYXBwZXJzIik7CisgICAgcnVsZXNbIm5vLW5ldyJd
ID0gcmVxdWlyZSgiLi9ydWxlcy9uby1uZXciKTsKKyAgICBydWxlc1sibm8tb2JqLWNhbGxzIl0g
PSByZXF1aXJlKCIuL3J1bGVzL25vLW9iai1jYWxscyIpOworICAgIHJ1bGVzWyJuby1vY3RhbC1l
c2NhcGUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tb2N0YWwtZXNjYXBlIik7CisgICAgcnVsZXNb
Im5vLW9jdGFsIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLW9jdGFsIik7CisgICAgcnVsZXNbIm5v
LXBhdGgtY29uY2F0Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXBhdGgtY29uY2F0Iik7CisgICAg
cnVsZXNbIm5vLXBsdXNwbHVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXBsdXNwbHVzIik7Cisg
ICAgcnVsZXNbIm5vLXByb2Nlc3MtZW52Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXByb2Nlc3Mt
ZW52Iik7CisgICAgcnVsZXNbIm5vLXByb2Nlc3MtZXhpdCJdID0gcmVxdWlyZSgiLi9ydWxlcy9u
by1wcm9jZXNzLWV4aXQiKTsKKyAgICBydWxlc1sibm8tcHJvdG8iXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tcHJvdG8iKTsKKyAgICBydWxlc1sibm8tcmVkZWNsYXJlIl0gPSByZXF1aXJlKCIuL3J1
bGVzL25vLXJlZGVjbGFyZSIpOworICAgIHJ1bGVzWyJuby1yZWdleC1zcGFjZXMiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tcmVnZXgtc3BhY2VzIik7CisgICAgcnVsZXNbIm5vLXJlc2VydmVkLWtl
eXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVzZXJ2ZWQta2V5cyIpOworICAgIHJ1bGVzWyJu
by1yZXN0cmljdGVkLW1vZHVsZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tcmVzdHJpY3RlZC1t
b2R1bGVzIik7CisgICAgcnVsZXNbIm5vLXJldHVybi1hc3NpZ24iXSA9IHJlcXVpcmUoIi4vcnVs
ZXMvbm8tcmV0dXJuLWFzc2lnbiIpOworICAgIHJ1bGVzWyJuby1zY3JpcHQtdXJsIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLXNjcmlwdC11cmwiKTsKKyAgICBydWxlc1sibm8tc2VsZi1jb21wYXJl
Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNlbGYtY29tcGFyZSIpOworICAgIHJ1bGVzWyJuby1z
ZXF1ZW5jZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc2VxdWVuY2VzIik7CisgICAgcnVsZXNb
Im5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXNoYWRv
dy1yZXN0cmljdGVkLW5hbWVzIik7CisgICAgcnVsZXNbIm5vLXNoYWRvdyJdID0gcmVxdWlyZSgi
Li9ydWxlcy9uby1zaGFkb3ciKTsKKyAgICBydWxlc1sibm8tc3BhY2UtYmVmb3JlLXNlbWkiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3BhY2UtYmVmb3JlLXNlbWkiKTsKKyAgICBydWxlc1sibm8t
c3BhY2VkLWZ1bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3BhY2VkLWZ1bmMiKTsKKyAgICBy
dWxlc1sibm8tc3BhcnNlLWFycmF5cyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby1zcGFyc2UtYXJy
YXlzIik7CisgICAgcnVsZXNbIm5vLXN5bmMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tc3luYyIp
OworICAgIHJ1bGVzWyJuby10ZXJuYXJ5Il0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXRlcm5hcnki
KTsKKyAgICBydWxlc1sibm8tdHJhaWxpbmctc3BhY2VzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25v
LXRyYWlsaW5nLXNwYWNlcyIpOworICAgIHJ1bGVzWyJuby11bmRlZi1pbml0Il0gPSByZXF1aXJl
KCIuL3J1bGVzL25vLXVuZGVmLWluaXQiKTsKKyAgICBydWxlc1sibm8tdW5kZWYiXSA9IHJlcXVp
cmUoIi4vcnVsZXMvbm8tdW5kZWYiKTsKKyAgICBydWxlc1sibm8tdW5kZWZpbmVkIl0gPSByZXF1
aXJlKCIuL3J1bGVzL25vLXVuZGVmaW5lZCIpOworICAgIHJ1bGVzWyJuby11bmRlcnNjb3JlLWRh
bmdsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bmRlcnNjb3JlLWRhbmdsZSIpOworICAgIHJ1
bGVzWyJuby11bnJlYWNoYWJsZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby11bnJlYWNoYWJsZSIp
OworICAgIHJ1bGVzWyJuby11bnVzZWQtZXhwcmVzc2lvbnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
bm8tdW51c2VkLWV4cHJlc3Npb25zIik7CisgICAgcnVsZXNbIm5vLXVudXNlZC12YXJzIl0gPSBy
ZXF1aXJlKCIuL3J1bGVzL25vLXVudXNlZC12YXJzIik7CisgICAgcnVsZXNbIm5vLXVzZS1iZWZv
cmUtZGVmaW5lIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXVzZS1iZWZvcmUtZGVmaW5lIik7Cisg
ICAgcnVsZXNbIm5vLXZvaWQiXSA9IHJlcXVpcmUoIi4vcnVsZXMvbm8tdm9pZCIpOworICAgIHJ1
bGVzWyJuby13YXJuaW5nLWNvbW1lbnRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL25vLXdhcm5pbmct
Y29tbWVudHMiKTsKKyAgICBydWxlc1sibm8td2l0aCJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby13
aXRoIik7CisgICAgcnVsZXNbIm5vLXdyYXAtZnVuYyJdID0gcmVxdWlyZSgiLi9ydWxlcy9uby13
cmFwLWZ1bmMiKTsKKyAgICBydWxlc1sib25lLXZhciJdID0gcmVxdWlyZSgiLi9ydWxlcy9vbmUt
dmFyIik7CisgICAgcnVsZXNbInBhZGRlZC1ibG9ja3MiXSA9IHJlcXVpcmUoIi4vcnVsZXMvcGFk
ZGVkLWJsb2NrcyIpOworICAgIHJ1bGVzWyJxdW90ZS1wcm9wcyJdID0gcmVxdWlyZSgiLi9ydWxl
cy9xdW90ZS1wcm9wcyIpOworICAgIHJ1bGVzWyJxdW90ZXMiXSA9IHJlcXVpcmUoIi4vcnVsZXMv
cXVvdGVzIik7CisgICAgcnVsZXNbInJhZGl4Il0gPSByZXF1aXJlKCIuL3J1bGVzL3JhZGl4Iik7
CisgICAgcnVsZXNbInNlbWkiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc2VtaSIpOworICAgIHJ1bGVz
WyJzb3J0LXZhcnMiXSA9IHJlcXVpcmUoIi4vcnVsZXMvc29ydC12YXJzIik7CisgICAgcnVsZXNb
InNwYWNlLWFmdGVyLWtleXdvcmRzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLWFmdGVyLWtl
eXdvcmRzIik7CisgICAgcnVsZXNbInNwYWNlLWluLWJyYWNrZXRzIl0gPSByZXF1aXJlKCIuL3J1
bGVzL3NwYWNlLWluLWJyYWNrZXRzIik7CisgICAgcnVsZXNbInNwYWNlLWluLXBhcmVucyJdID0g
cmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1pbi1wYXJlbnMiKTsKKyAgICBydWxlc1sic3BhY2UtaW5m
aXgtb3BzIl0gPSByZXF1aXJlKCIuL3J1bGVzL3NwYWNlLWluZml4LW9wcyIpOworICAgIHJ1bGVz
WyJzcGFjZS1yZXR1cm4tdGhyb3ctY2FzZSJdID0gcmVxdWlyZSgiLi9ydWxlcy9zcGFjZS1yZXR1
cm4tdGhyb3ctY2FzZSIpOworICAgIHJ1bGVzWyJzcGFjZS11bmFyeS13b3JkLW9wcyJdID0gcmVx
dWlyZSgiLi9ydWxlcy9zcGFjZS11bmFyeS13b3JkLW9wcyIpOworICAgIHJ1bGVzWyJzdHJpY3Qi
XSA9IHJlcXVpcmUoIi4vcnVsZXMvc3RyaWN0Iik7CisgICAgcnVsZXNbInVzZS1pc25hbiJdID0g
cmVxdWlyZSgiLi9ydWxlcy91c2UtaXNuYW4iKTsKKyAgICBydWxlc1sidmFsaWQtanNkb2MiXSA9
IHJlcXVpcmUoIi4vcnVsZXMvdmFsaWQtanNkb2MiKTsKKyAgICBydWxlc1sidmFsaWQtdHlwZW9m
Il0gPSByZXF1aXJlKCIuL3J1bGVzL3ZhbGlkLXR5cGVvZiIpOworICAgIHJ1bGVzWyJ2YXJzLW9u
LXRvcCJdID0gcmVxdWlyZSgiLi9ydWxlcy92YXJzLW9uLXRvcCIpOworICAgIHJ1bGVzWyJ3cmFw
LWlpZmUiXSA9IHJlcXVpcmUoIi4vcnVsZXMvd3JhcC1paWZlIik7CisgICAgcnVsZXNbIndyYXAt
cmVnZXgiXSA9IHJlcXVpcmUoIi4vcnVsZXMvd3JhcC1yZWdleCIpOworICAgIHJ1bGVzWyJ5b2Rh
Il0gPSByZXF1aXJlKCIuL3J1bGVzL3lvZGEiKTsKKworICAgIHJldHVybiBydWxlczsKK307Cit9
LHsiLi9ydWxlcy9ibG9jay1zY29wZWQtdmFyIjoxMywiLi9ydWxlcy9icmFjZS1zdHlsZSI6MTQs
Ii4vcnVsZXMvY2FtZWxjYXNlIjoxNSwiLi9ydWxlcy9jb21tYS1zdHlsZSI6MTYsIi4vcnVsZXMv
Y29tcGxleGl0eSI6MTcsIi4vcnVsZXMvY29uc2lzdGVudC1yZXR1cm4iOjE4LCIuL3J1bGVzL2Nv
bnNpc3RlbnQtdGhpcyI6MTksIi4vcnVsZXMvY3VybHkiOjIwLCIuL3J1bGVzL2RlZmF1bHQtY2Fz
ZSI6MjEsIi4vcnVsZXMvZG90LW5vdGF0aW9uIjoyMiwiLi9ydWxlcy9lb2wtbGFzdCI6MjMsIi4v
cnVsZXMvZXFlcWVxIjoyNCwiLi9ydWxlcy9mdW5jLW5hbWVzIjoyNSwiLi9ydWxlcy9mdW5jLXN0
eWxlIjoyNiwiLi9ydWxlcy9nbG9iYWwtc3RyaWN0IjoyNywiLi9ydWxlcy9ndWFyZC1mb3ItaW4i
OjI4LCIuL3J1bGVzL2hhbmRsZS1jYWxsYmFjay1lcnIiOjI5LCIuL3J1bGVzL21heC1kZXB0aCI6
MzAsIi4vcnVsZXMvbWF4LWxlbiI6MzEsIi4vcnVsZXMvbWF4LW5lc3RlZC1jYWxsYmFja3MiOjMy
LCIuL3J1bGVzL21heC1wYXJhbXMiOjMzLCIuL3J1bGVzL21heC1zdGF0ZW1lbnRzIjozNCwiLi9y
dWxlcy9uZXctY2FwIjozNSwiLi9ydWxlcy9uZXctcGFyZW5zIjozNiwiLi9ydWxlcy9uby1hbGVy
dCI6MzcsIi4vcnVsZXMvbm8tYXJyYXktY29uc3RydWN0b3IiOjM4LCIuL3J1bGVzL25vLWJpdHdp
c2UiOjM5LCIuL3J1bGVzL25vLWNhbGxlciI6NDAsIi4vcnVsZXMvbm8tY2F0Y2gtc2hhZG93Ijo0
MSwiLi9ydWxlcy9uby1jb21tYS1kYW5nbGUiOjQyLCIuL3J1bGVzL25vLWNvbmQtYXNzaWduIjo0
MywiLi9ydWxlcy9uby1jb25zb2xlIjo0NCwiLi9ydWxlcy9uby1jb25zdGFudC1jb25kaXRpb24i
OjQ1LCIuL3J1bGVzL25vLWNvbnRyb2wtcmVnZXgiOjQ2LCIuL3J1bGVzL25vLWRlYnVnZ2VyIjo0
NywiLi9ydWxlcy9uby1kZWxldGUtdmFyIjo0OCwiLi9ydWxlcy9uby1kaXYtcmVnZXgiOjQ5LCIu
L3J1bGVzL25vLWR1cGUta2V5cyI6NTAsIi4vcnVsZXMvbm8tZWxzZS1yZXR1cm4iOjUxLCIuL3J1
bGVzL25vLWVtcHR5Ijo1NCwiLi9ydWxlcy9uby1lbXB0eS1jbGFzcyI6NTIsIi4vcnVsZXMvbm8t
ZW1wdHktbGFiZWwiOjUzLCIuL3J1bGVzL25vLWVxLW51bGwiOjU1LCIuL3J1bGVzL25vLWV2YWwi
OjU2LCIuL3J1bGVzL25vLWV4LWFzc2lnbiI6NTcsIi4vcnVsZXMvbm8tZXh0ZW5kLW5hdGl2ZSI6
NTgsIi4vcnVsZXMvbm8tZXh0cmEtYmluZCI6NTksIi4vcnVsZXMvbm8tZXh0cmEtYm9vbGVhbi1j
YXN0Ijo2MCwiLi9ydWxlcy9uby1leHRyYS1wYXJlbnMiOjYxLCIuL3J1bGVzL25vLWV4dHJhLXNl
bWkiOjYyLCIuL3J1bGVzL25vLWV4dHJhLXN0cmljdCI6NjMsIi4vcnVsZXMvbm8tZmFsbHRocm91
Z2giOjY0LCIuL3J1bGVzL25vLWZsb2F0aW5nLWRlY2ltYWwiOjY1LCIuL3J1bGVzL25vLWZ1bmMt
YXNzaWduIjo2NiwiLi9ydWxlcy9uby1pbXBsaWVkLWV2YWwiOjY3LCIuL3J1bGVzL25vLWlubmVy
LWRlY2xhcmF0aW9ucyI6NjgsIi4vcnVsZXMvbm8taW52YWxpZC1yZWdleHAiOjY5LCIuL3J1bGVz
L25vLWl0ZXJhdG9yIjo3MCwiLi9ydWxlcy9uby1sYWJlbC12YXIiOjcxLCIuL3J1bGVzL25vLWxh
YmVscyI6NzIsIi4vcnVsZXMvbm8tbG9uZS1ibG9ja3MiOjczLCIuL3J1bGVzL25vLWxvbmVseS1p
ZiI6NzQsIi4vcnVsZXMvbm8tbG9vcC1mdW5jIjo3NSwiLi9ydWxlcy9uby1taXhlZC1yZXF1aXJl
cyI6NzYsIi4vcnVsZXMvbm8tbWl4ZWQtc3BhY2VzLWFuZC10YWJzIjo3NywiLi9ydWxlcy9uby1t
dWx0aS1zdHIiOjc4LCIuL3J1bGVzL25vLW5hdGl2ZS1yZWFzc2lnbiI6NzksIi4vcnVsZXMvbm8t
bmVnYXRlZC1pbi1saHMiOjgwLCIuL3J1bGVzL25vLW5lc3RlZC10ZXJuYXJ5Ijo4MSwiLi9ydWxl
cy9uby1uZXciOjg2LCIuL3J1bGVzL25vLW5ldy1mdW5jIjo4MiwiLi9ydWxlcy9uby1uZXctb2Jq
ZWN0Ijo4MywiLi9ydWxlcy9uby1uZXctcmVxdWlyZSI6ODQsIi4vcnVsZXMvbm8tbmV3LXdyYXBw
ZXJzIjo4NSwiLi9ydWxlcy9uby1vYmotY2FsbHMiOjg3LCIuL3J1bGVzL25vLW9jdGFsIjo4OSwi
Li9ydWxlcy9uby1vY3RhbC1lc2NhcGUiOjg4LCIuL3J1bGVzL25vLXBhdGgtY29uY2F0Ijo5MCwi
Li9ydWxlcy9uby1wbHVzcGx1cyI6OTEsIi4vcnVsZXMvbm8tcHJvY2Vzcy1lbnYiOjkyLCIuL3J1
bGVzL25vLXByb2Nlc3MtZXhpdCI6OTMsIi4vcnVsZXMvbm8tcHJvdG8iOjk0LCIuL3J1bGVzL25v
LXJlZGVjbGFyZSI6OTUsIi4vcnVsZXMvbm8tcmVnZXgtc3BhY2VzIjo5NiwiLi9ydWxlcy9uby1y
ZXNlcnZlZC1rZXlzIjo5NywiLi9ydWxlcy9uby1yZXN0cmljdGVkLW1vZHVsZXMiOjk4LCIuL3J1
bGVzL25vLXJldHVybi1hc3NpZ24iOjk5LCIuL3J1bGVzL25vLXNjcmlwdC11cmwiOjEwMCwiLi9y
dWxlcy9uby1zZWxmLWNvbXBhcmUiOjEwMSwiLi9ydWxlcy9uby1zZXF1ZW5jZXMiOjEwMiwiLi9y
dWxlcy9uby1zaGFkb3ciOjEwNCwiLi9ydWxlcy9uby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lcyI6
MTAzLCIuL3J1bGVzL25vLXNwYWNlLWJlZm9yZS1zZW1pIjoxMDUsIi4vcnVsZXMvbm8tc3BhY2Vk
LWZ1bmMiOjEwNiwiLi9ydWxlcy9uby1zcGFyc2UtYXJyYXlzIjoxMDcsIi4vcnVsZXMvbm8tc3lu
YyI6MTA4LCIuL3J1bGVzL25vLXRlcm5hcnkiOjEwOSwiLi9ydWxlcy9uby10cmFpbGluZy1zcGFj
ZXMiOjExMCwiLi9ydWxlcy9uby11bmRlZiI6MTEyLCIuL3J1bGVzL25vLXVuZGVmLWluaXQiOjEx
MSwiLi9ydWxlcy9uby11bmRlZmluZWQiOjExMywiLi9ydWxlcy9uby11bmRlcnNjb3JlLWRhbmds
ZSI6MTE0LCIuL3J1bGVzL25vLXVucmVhY2hhYmxlIjoxMTUsIi4vcnVsZXMvbm8tdW51c2VkLWV4
cHJlc3Npb25zIjoxMTYsIi4vcnVsZXMvbm8tdW51c2VkLXZhcnMiOjExNywiLi9ydWxlcy9uby11
c2UtYmVmb3JlLWRlZmluZSI6MTE4LCIuL3J1bGVzL25vLXZvaWQiOjExOSwiLi9ydWxlcy9uby13
YXJuaW5nLWNvbW1lbnRzIjoxMjAsIi4vcnVsZXMvbm8td2l0aCI6MTIxLCIuL3J1bGVzL25vLXdy
YXAtZnVuYyI6MTIyLCIuL3J1bGVzL29uZS12YXIiOjEyMywiLi9ydWxlcy9wYWRkZWQtYmxvY2tz
IjoxMjQsIi4vcnVsZXMvcXVvdGUtcHJvcHMiOjEyNSwiLi9ydWxlcy9xdW90ZXMiOjEyNiwiLi9y
dWxlcy9yYWRpeCI6MTI3LCIuL3J1bGVzL3NlbWkiOjEyOCwiLi9ydWxlcy9zb3J0LXZhcnMiOjEy
OSwiLi9ydWxlcy9zcGFjZS1hZnRlci1rZXl3b3JkcyI6MTMwLCIuL3J1bGVzL3NwYWNlLWluLWJy
YWNrZXRzIjoxMzEsIi4vcnVsZXMvc3BhY2UtaW4tcGFyZW5zIjoxMzIsIi4vcnVsZXMvc3BhY2Ut
aW5maXgtb3BzIjoxMzMsIi4vcnVsZXMvc3BhY2UtcmV0dXJuLXRocm93LWNhc2UiOjEzNCwiLi9y
dWxlcy9zcGFjZS11bmFyeS13b3JkLW9wcyI6MTM1LCIuL3J1bGVzL3N0cmljdCI6MTM2LCIuL3J1
bGVzL3VzZS1pc25hbiI6MTM3LCIuL3J1bGVzL3ZhbGlkLWpzZG9jIjoxMzgsIi4vcnVsZXMvdmFs
aWQtdHlwZW9mIjoxMzksIi4vcnVsZXMvdmFycy1vbi10b3AiOjE0MCwiLi9ydWxlcy93cmFwLWlp
ZmUiOjE0MSwiLi9ydWxlcy93cmFwLXJlZ2V4IjoxNDIsIi4vcnVsZXMveW9kYSI6MTQzfV0sMTE6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGVDb250ZXh0IHV0aWxpdHkgZm9yIHJ1bGVzCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFph
a2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENv
bnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFyIFBBU1NUSFJPVUdIUyA9IFsK
KyAgICAgICAgImdldFNvdXJjZSIsCisgICAgICAgICJnZXRTb3VyY2VMaW5lcyIsCisgICAgICAg
ICJnZXRUb2tlbnMiLAorICAgICAgICAiZ2V0VG9rZW5zQmVmb3JlIiwKKyAgICAgICAgImdldFRv
a2VuQmVmb3JlIiwKKyAgICAgICAgImdldFRva2Vuc0FmdGVyIiwKKyAgICAgICAgImdldFRva2Vu
QWZ0ZXIiLAorICAgICAgICAiZ2V0Rmlyc3RUb2tlbnMiLAorICAgICAgICAiZ2V0Rmlyc3RUb2tl
biIsCisgICAgICAgICJnZXRMYXN0VG9rZW5zIiwKKyAgICAgICAgImdldExhc3RUb2tlbiIsCisg
ICAgICAgICJnZXRDb21tZW50cyIsCisgICAgICAgICJnZXRBbmNlc3RvcnMiLAorICAgICAgICAi
Z2V0U2NvcGUiLAorICAgICAgICAiZ2V0SlNEb2NDb21tZW50IiwKKyAgICAgICAgImdldEZpbGVu
YW1lIgorICAgIF07CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRp
b24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogQWN0cyBhcyBhbiBhYnN0cmFj
dGlvbiBsYXllciBiZXR3ZWVuIHJ1bGVzIGFuZCB0aGUgbWFpbiBlc2xpbnQgb2JqZWN0LgorICog
QGNvbnN0cnVjdG9yCisgKiBAcGFyYW0ge3N0cmluZ30gcnVsZUlkIFRoZSBJRCBvZiB0aGUgcnVs
ZSB1c2luZyB0aGlzIG9iamVjdC4KKyAqIEBwYXJhbSB7ZXNsaW50fSBlc2xpbnQgVGhlIGVzbGlu
dCBvYmplY3QuCisgKiBAcGFyYW0ge251bWJlcn0gc2V2ZXJpdHkgVGhlIGNvbmZpZ3VyZWQgc2V2
ZXJpdHkgbGV2ZWwgb2YgdGhlIHJ1bGUuCisgKiBAcGFyYW0ge2FycmF5fSBvcHRpb25zIFRoZSBj
b25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHRvIGJlIGFkZGVkIHRvIHRoZSBydWxlLgorICogQHBh
cmFtIHtvYmplY3R9IHNldHRpbmdzIFRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHBhc3NlZCBm
cm9tIHRoZSBjb25maWcgZmlsZS4KKyAqLworZnVuY3Rpb24gUnVsZUNvbnRleHQocnVsZUlkLCBl
c2xpbnQsIHNldmVyaXR5LCBvcHRpb25zLCBzZXR0aW5ncykgeworCisgICAgLyoqCisgICAgICog
VGhlIHJlYWQtb25seSBJRCBvZiB0aGUgcnVsZS4KKyAgICAgKi8KKyAgICBPYmplY3QuZGVmaW5l
UHJvcGVydHkodGhpcywgImlkIiwgeworICAgICAgICB2YWx1ZTogcnVsZUlkCisgICAgfSk7CisK
KyAgICAvKioKKyAgICAgKiBUaGUgcmVhZC1vbmx5IG9wdGlvbnMgb2YgdGhlIHJ1bGUKKyAgICAg
Ki8KKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgIm9wdGlvbnMiLCB7CisgICAgICAg
IHZhbHVlOiBvcHRpb25zCisgICAgfSk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgcmVhZC1vbmx5
IHNldHRpbmdzIHNoYXJlZCBiZXR3ZWVuIGFsbCBydWxlcworICAgICAqLworICAgIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2V0dGluZ3MiLCB7CisgICAgICAgIHZhbHVlOiBzZXR0aW5n
cworICAgIH0pOworCisgICAgLy8gY29weSBvdmVyIHBhc3N0aHJvdWdoIG1ldGhvZHMKKyAgICBQ
QVNTVEhST1VHSFMuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CisgICAgICAgIHRoaXNbbmFtZV0g
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBlc2xpbnRbbmFtZV0uYXBwbHkoZXNs
aW50LCBhcmd1bWVudHMpOworICAgICAgICB9OworICAgIH0sIHRoaXMpOworCisgICAgLyoqCisg
ICAgICogUGFzc3Rocm91Z2ggdG8gZXNsaW50LnJlcG9ydCgpIHRoYXQgYXV0b21hdGljYWxseSBh
c3NpZ25zIHRoZSBydWxlIElEIGFuZCBzZXZlcml0eS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9
IG5vZGUgVGhlIEFTVCBub2RlIHJlbGF0ZWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICogQHBhcmFt
IHtPYmplY3Q9fSBsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGVycm9yLgorICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIu
CisgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgdGVtcGxhdGUgZGF0YSB3aGlj
aCBwcm9kdWNlcyBhIGZvcm1hdHRlZCBtZXNzYWdlCisgICAgICogICAgIHdpdGggc3ltYm9scyBi
ZWluZyByZXBsYWNlZCBieSB0aGlzIG9iamVjdCdzIHZhbHVlcy4KKyAgICAgKiBAcmV0dXJucyB7
dm9pZH0KKyAgICAgKi8KKyAgICB0aGlzLnJlcG9ydCA9IGZ1bmN0aW9uKG5vZGUsIGxvY2F0aW9u
LCBtZXNzYWdlLCBvcHRzKSB7CisgICAgICAgIGVzbGludC5yZXBvcnQocnVsZUlkLCBzZXZlcml0
eSwgbm9kZSwgbG9jYXRpb24sIG1lc3NhZ2UsIG9wdHMpOworICAgIH07CisKK30KKworUnVsZUNv
bnRleHQucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBSdWxlQ29udGV4dAorfTsKKwor
bW9kdWxlLmV4cG9ydHMgPSBSdWxlQ29udGV4dDsKKworfSx7fV0sMTI6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERlZmluZXMgYSBzdG9y
YWdlIGZvciBydWxlcy4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisidXNl
IHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBsb2FkUnVsZXMgPSByZXF1aXJlKCIuL2xvYWQt
cnVsZXMiKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFByaXZhdGVzCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCit2YXIgcnVsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHVibGljIEludGVyZmFjZQorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworLyoqCisgKiBSZWdpc3RlcnMgYSBydWxlIG1vZHVsZSBmb3IgcnVsZSBp
ZCBpbiBzdG9yYWdlLgorICogQHBhcmFtIHtTdHJpbmd9IHJ1bGVJZCBSdWxlIGlkIChmaWxlIG5h
bWUpLgorICogQHBhcmFtIHtGdW5jdGlvbn0gcnVsZU1vZHVsZSBSdWxlIGhhbmRsZXIuCisgKiBA
cmV0dXJucyB7dm9pZH0KKyAqLworZnVuY3Rpb24gZGVmaW5lKHJ1bGVJZCwgcnVsZU1vZHVsZSkg
eworICAgIHJ1bGVzW3J1bGVJZF0gPSBydWxlTW9kdWxlOworfQorCitleHBvcnRzLmRlZmluZSA9
IGRlZmluZTsKKworLyoqCisgKiBMb2FkcyBhbmQgcmVnaXN0ZXJzIGFsbCBydWxlcyBmcm9tIHBh
c3NlZCBydWxlcyBkaXJlY3RvcnkuCisgKiBAcGFyYW0ge1N0cmluZ30gW3J1bGVzRGlyXSBQYXRo
IHRvIHJ1bGVzIGRpcmVjdG9yeSwgbWF5IGJlIHJlbGF0aXZlLiBEZWZhdWx0cyB0byBgbGliL3J1
bGVzYC4KKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitmdW5jdGlvbiBsb2FkKHJ1bGVzRGlyKSB7
CisgICAgdmFyIG5ld1J1bGVzID0gbG9hZFJ1bGVzKHJ1bGVzRGlyKTsKKyAgICBPYmplY3Qua2V5
cyhuZXdSdWxlcykuZm9yRWFjaChmdW5jdGlvbihydWxlSWQpIHsKKyAgICAgICAgZGVmaW5lKHJ1
bGVJZCwgbmV3UnVsZXNbcnVsZUlkXSk7CisgICAgfSk7Cit9CisKK2V4cG9ydHMubG9hZCA9IGxv
YWQ7CisKKy8qKgorICogUmVnaXN0ZXJzIGFsbCBnaXZlbiBydWxlcyBvZiBhIHBsdWdpbi4KKyAq
IEBwYXJhbSB7T2JqZWN0fSBwbHVnaW5SdWxlcyBBIGtleS92YWx1ZSBtYXAgb2YgcnVsZSBkZWZp
bml0aW9ucy4KKyAqIEBwYXJhbSB7U3RyaW5nfSBwbHVnaW5OYW1lIFRoZSBuYW1lIG9mIHRoZSBw
bHVnaW4gd2l0aG91dCBwcmVmaXggKGBlc2xpbnQtcGx1Z2luLWApLgorICogQHJldHVybnMge3Zv
aWR9CisgKi8KK2V4cG9ydHMuaW1wb3J0ID0gZnVuY3Rpb24gKHBsdWdpblJ1bGVzLCBwbHVnaW5O
YW1lKSB7CisgICAgT2JqZWN0LmtleXMocGx1Z2luUnVsZXMpLmZvckVhY2goZnVuY3Rpb24gKHJ1
bGVJZCkgeworICAgICAgICB2YXIgcXVhbGlmaWVkUnVsZUlkID0gcGx1Z2luTmFtZSArICIvIiAr
IHJ1bGVJZCwKKyAgICAgICAgICAgIHJ1bGUgPSBwbHVnaW5SdWxlc1tydWxlSWRdOworCisgICAg
ICAgIGRlZmluZShxdWFsaWZpZWRSdWxlSWQsIHJ1bGUpOworICAgIH0pOworfTsKKworLyoqCisg
KiBBY2Nlc3MgcnVsZSBoYW5kbGVyIGJ5IGlkIChmaWxlIG5hbWUpLgorICogQHBhcmFtIHtTdHJp
bmd9IHJ1bGVJZCBSdWxlIGlkIChmaWxlIG5hbWUpLgorICogQHJldHVybnMge0Z1bmN0aW9ufSBS
dWxlIGhhbmRsZXIuCisgKi8KK2V4cG9ydHMuZ2V0ID0gZnVuY3Rpb24ocnVsZUlkKSB7CisgICAg
cmV0dXJuIHJ1bGVzW3J1bGVJZF07Cit9OworCisvKioKKyAqIFJlc2V0IHJ1bGVzIHN0b3JhZ2Uu
CisgKiBTaG91bGQgYmUgdXNlZCBvbmx5IGluIHRlc3RzLgorICogQHJldHVybnMge3ZvaWR9Cisg
Ki8KK2V4cG9ydHMudGVzdENsZWFyID0gZnVuY3Rpb24oKSB7CisgICAgcnVsZXMgPSBPYmplY3Qu
Y3JlYXRlKG51bGwpOworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluaXRpYWxp
emF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBsb2FkcyBidWlsdC1pbiBydWxl
cworbG9hZCgpOworCit9LHsiLi9sb2FkLXJ1bGVzIjoxMH1dLDEzOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIGZv
ciAiYmxvY2sgc2NvcGVkIiB2YXJpYWJsZXMgYnkgYmluZGluZyBjb250ZXh0CisgKiBAYXV0aG9y
IE1hdHQgRHVWYWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tPgorICovCisidXNlIHN0cmlj
dCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgdmFyIHNjb3BlU3RhY2sgPSBbXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAg
ICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGlkZW50aWZpZXIgaXMgaW4gZGVjbGFyYXRpb24gcG9z
aXRpb24gb3IgaXMgYSBub24tZGVjbGFyYXRpb24gcmVmZXJlbmNlLgorICAgICAqIEBwYXJhbSB7
QVNUTm9kZX0gaWQgVGhlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJl
bnQgVGhlIGlkZW50aWZpZXIncyBwYXJlbnQgQVNUIG5vZGUuCisgICAgICogQHJldHVybnMge0Jv
b2xlYW59IHRydWUgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBpbiBkZWNsYXJhdGlvbiBwb3NpdGlv
bi4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0RlY2xhcmF0aW9uKGlkLCBwYXJlbnQpIHsKKyAg
ICAgICAgc3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiRnVuY3Rpb25E
ZWNsYXJhdGlvbiI6CisgICAgICAgICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Npb24iOgorICAg
ICAgICAgICAgICAgIHJldHVybiBwYXJlbnQucGFyYW1zLmluZGV4T2YoaWQpID4gLTEgfHwgaWQg
PT09IHBhcmVudC5pZDsKKworICAgICAgICAgICAgY2FzZSAiVmFyaWFibGVEZWNsYXJhdG9yIjoK
KyAgICAgICAgICAgICAgICByZXR1cm4gaWQgPT09IHBhcmVudC5pZDsKKworICAgICAgICAgICAg
Y2FzZSAiQ2F0Y2hDbGF1c2UiOgorICAgICAgICAgICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50
LnBhcmFtOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgd2hl
dGhlciBhbiBpZGVudGlmaWVyIGlzIGluIHByb3BlcnR5IHBvc2l0aW9uLgorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gaWQgVGhlIGlkZW50aWZpZXIuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBw
YXJlbnQgVGhlIGlkZW50aWZpZXIncyBwYXJlbnQgQVNUIG5vZGUuCisgICAgICogQHJldHVybnMg
e0Jvb2xlYW59IHRydWUgd2hlbiB0aGUgaWRlbnRpZmllciBpcyBpbiBwcm9wZXJ0eSBwb3NpdGlv
bi4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1Byb3BlcnR5KGlkLCBwYXJlbnQpIHsKKyAgICAg
ICAgc3dpdGNoIChwYXJlbnQudHlwZSkgeworICAgICAgICAgICAgY2FzZSAiTWVtYmVyRXhwcmVz
c2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlkID09PSBwYXJlbnQucHJvcGVydHkgJiYg
IXBhcmVudC5jb21wdXRlZDsKKworICAgICAgICAgICAgY2FzZSAiUHJvcGVydHkiOgorICAgICAg
ICAgICAgICAgIHJldHVybiBpZCA9PT0gcGFyZW50LmtleTsKKworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvKioKKyAgICAgKiBQdXNoZXMgYSBuZXcgc2NvcGUgb2JqZWN0IG9uIHRoZSBzY29wZSBzdGFj
ay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBwdXNoU2Nv
cGUoKSB7CisgICAgICAgIHNjb3BlU3RhY2sucHVzaChbXSk7CisgICAgfQorCisgICAgLyoqCisg
ICAgICogUmVtb3ZlcyB0aGUgdG9wbW9zdCBzY29wZSBvYmplY3QgZnJvbSB0aGUgc2NvcGUgc3Rh
Y2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gcG9wU2Nv
cGUoKSB7CisgICAgICAgIHNjb3BlU3RhY2sucG9wKCk7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogRGVjbGFyZXMgdGhlIGdpdmVuIG5hbWVzIGluIHRoZSB0b3Btb3N0IHNjb3BlIG9iamVjdC4K
KyAgICAgKiBAcGFyYW0ge1tTdHJpbmddfSBuYW1lcyBBIGxpc3Qgb2YgbmFtZXMgdG8gZGVjbGFy
ZS4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBkZWNsYXJl
KG5hbWVzKSB7CisgICAgICAgIFtdLnB1c2guYXBwbHkoc2NvcGVTdGFja1tzY29wZVN0YWNrLmxl
bmd0aCAtIDFdLCBuYW1lcyk7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg
IC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBmdW5jdGlvbiBm
dW5jdGlvbkhhbmRsZXIobm9kZSkgeworICAgICAgICBwdXNoU2NvcGUoKTsKKyAgICAgICAgZGVj
bGFyZShub2RlLnBhcmFtcy5tYXAoZnVuY3Rpb24oaWQpIHsKKyAgICAgICAgICAgIHJldHVybiBp
ZC5uYW1lOworICAgICAgICB9KSk7CisgICAgICAgIGRlY2xhcmUobm9kZS5pZCA/IFtub2RlLmlk
Lm5hbWVdIDogW10pOworICAgICAgICBkZWNsYXJlKFsiYXJndW1lbnRzIl0pOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVyKG5vZGUpIHsKKyAgICAgICAg
ZGVjbGFyZShub2RlLmRlY2xhcmF0aW9ucy5tYXAoZnVuY3Rpb24oZGVjbCkgeworICAgICAgICAg
ICAgcmV0dXJuIGRlY2wuaWQubmFtZTsKKyAgICAgICAgfSkpOworICAgIH0KKworICAgIHJldHVy
biB7CisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBzY29wZVN0
YWNrID0gW2NvbnRleHQuZ2V0U2NvcGUoKS52YXJpYWJsZXMubWFwKGZ1bmN0aW9uKHYpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdi5uYW1lOworICAgICAgICAgICAgfSldOworICAgICAgICB9
LAorCisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIHZhciBzdGF0ZW1lbnRzID0gbm9kZS5ib2R5OworICAgICAgICAgICAgcHVzaFNjb3BlKCk7
CisgICAgICAgICAgICBzdGF0ZW1lbnRzLmZvckVhY2goZnVuY3Rpb24oc3RtdCkgeworICAgICAg
ICAgICAgICAgIGlmIChzdG10LnR5cGUgPT09ICJWYXJpYWJsZURlY2xhcmF0aW9uIikgeworICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihzdG10KTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHN0bXQudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24i
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlY2xhcmUoW3N0bXQuaWQubmFtZV0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgICJCbG9j
a1N0YXRlbWVudDpleGl0IjogcG9wU2NvcGUsCisKKyAgICAgICAgIkNhdGNoQ2xhdXNlIjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgcHVzaFNjb3BlKCk7CisgICAgICAgICAgICBkZWNs
YXJlKFtub2RlLnBhcmFtLm5hbWVdKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkNhdGNoQ2xhdXNl
OmV4aXQiOiBwb3BTY29wZSwKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0
aW9uSGFuZGxlciwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IHBvcFNjb3Bl
LAorCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbkhhbmRsZXIsCisgICAg
ICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAgICJGb3JT
dGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBwdXNoU2NvcGUoKTsKKyAg
ICAgICAgICAgIGlmIChub2RlLmluaXQgJiYgbm9kZS5pbml0LnR5cGUgPT09ICJWYXJpYWJsZURl
Y2xhcmF0aW9uIikgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25IYW5kbGVy
KG5vZGUuaW5pdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JTdGF0
ZW1lbnQ6ZXhpdCI6IHBvcFNjb3BlLAorCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHB1c2hTY29wZSgpOworICAgICAgICAgICAgaWYgKG5v
ZGUubGVmdC50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIpIHsKKyAgICAgICAgICAgICAg
ICB2YXJpYWJsZURlY2xhcmF0aW9uSGFuZGxlcihub2RlLmxlZnQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9LAorICAgICAgICAiRm9ySW5TdGF0ZW1lbnQ6ZXhpdCI6IHBvcFNjb3BlLAorCisg
ICAgICAgICJJZGVudGlmaWVyIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGFu
Y2VzdG9yID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKyAgICAgICAgICAgIGlmIChp
c0RlY2xhcmF0aW9uKG5vZGUsIGFuY2VzdG9yKSB8fCBpc1Byb3BlcnR5KG5vZGUsIGFuY2VzdG9y
KSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwLCBsID0gc2NvcGVTdGFjay5sZW5ndGg7IGkgPCBsOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBpZiAoc2NvcGVTdGFja1tpXS5pbmRleE9mKG5vZGUubmFtZSkgPiAtMSkg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiXCIiICsgbm9kZS5u
YW1lICsgIlwiIHVzZWQgb3V0c2lkZSBvZiBiaW5kaW5nIGNvbnRleHQuIik7CisgICAgICAgIH0K
KyAgICB9OworCit9OworCit9LHt9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJsb2NrIHN0YXRlbWVudHMg
dGhhdCBkbyBub3QgdXNlIHRoZSBvbmUgdHJ1ZSBicmFjZSBzdHlsZQorICogQGF1dGhvciBJYW4g
Q2hyaXN0aWFuIE15ZXJzCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICB2YXIgc3R5bGUgPSBjb250
ZXh0Lm9wdGlvbnNbMF0gfHwgIjF0YnMiOworICAgIHZhciBwYXJhbXMgPSBjb250ZXh0Lm9wdGlv
bnNbMV0gfHwge307CisKKyAgICB2YXIgT1BFTl9NRVNTQUdFID0gIk9wZW5pbmcgY3VybHkgYnJh
Y2UgZG9lcyBub3QgYXBwZWFyIG9uIHRoZSBzYW1lIGxpbmUgYXMgY29udHJvbGxpbmcgc3RhdGVt
ZW50LiIsCisgICAgICAgIEJPRFlfTUVTU0FHRSA9ICJTdGF0ZW1lbnQgaW5zaWRlIG9mIGN1cmx5
IGJyYWNlcyBzaG91bGQgYmUgb24gbmV4dCBsaW5lLiIsCisgICAgICAgIENMT1NFX01FU1NBR0Ug
PSAiQ2xvc2luZyBjdXJseSBicmFjZSBkb2VzIG5vdCBhcHBlYXIgb24gdGhlIHNhbWUgbGluZSBh
cyB0aGUgc3Vic2VxdWVudCBibG9jay4iLAorICAgICAgICBDTE9TRV9NRVNTQUdFX1NJTkdMRSA9
ICJDbG9zaW5nIGN1cmx5IGJyYWNlIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBsaW5lIGFzIG9wZW5p
bmcgY3VybHkgYnJhY2Ugb3Igb24gdGhlIGxpbmUgYWZ0ZXIgdGhlIHByZXZpb3VzIGJsb2NrLiIs
CisgICAgICAgIENMT1NFX01FU1NBR0VfU1RST1VTVFJVUCA9ICJDbG9zaW5nIGN1cmx5IGJyYWNl
IGFwcGVhcnMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgc3Vic2VxdWVudCBibG9jay4iOworCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBCaW5kcyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0byBh
IGZ1bmN0aW9uIHRoYXQgdmVyaWZpZXMgdGhhdCB0aGUgb3BlbmluZworICAgICAqIGN1cmx5IGJy
YWNlIGlzIG9uIHRoZSBzYW1lIGxpbmUgYXMgaXRzIGNvbnRyb2xsaW5nIHN0YXRlbWVudCBvZiBh
IGdpdmVuCisgICAgICogbm9kZS4KKyAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gVGhlIHByb3Bl
cnRpZXMgdG8gY2hlY2sgb24gdGhlIG5vZGUuCisgICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBB
IGZ1bmN0aW9uIHRoYXQgd2lsbCBwZXJmb3JtIHRoZSBjaGVjayBvbiBhIG5vZGUKKyAgICAgKi8K
KyAgICBmdW5jdGlvbiBjaGVja0Jsb2NrKCkgeworICAgICAgICB2YXIgYmxvY2tQcm9wZXJ0aWVz
ID0gYXJndW1lbnRzOworICAgICAgICByZXR1cm4gZnVuY3Rpb24obm9kZSkgeworICAgICAgICAg
ICAgW10uZm9yRWFjaC5jYWxsKGJsb2NrUHJvcGVydGllcywgZnVuY3Rpb24oYmxvY2tQcm9wKSB7
CisgICAgICAgICAgICAgICAgdmFyIGJsb2NrID0gbm9kZVtibG9ja1Byb3BdLCBwcmV2aW91c1Rv
a2VuLCBjdXJseVRva2VuLCBjdXJseVRva2VuRW5kLCBjdXJseVRva2Vuc09uU2FtZUxpbmU7Cisg
ICAgICAgICAgICAgICAgYmxvY2sgPSBub2RlW2Jsb2NrUHJvcF07CisgICAgICAgICAgICAgICAg
aWYgKGJsb2NrICYmIGJsb2NrLnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUoYmxvY2sp
OworICAgICAgICAgICAgICAgICAgICBjdXJseVRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2Vu
KGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY3VybHlUb2tlbkVuZCA9IGNvbnRleHQuZ2V0
TGFzdFRva2VuKGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgY3VybHlUb2tlbnNPblNhbWVM
aW5lID0gY3VybHlUb2tlbi5sb2Muc3RhcnQubGluZSA9PT0gY3VybHlUb2tlbkVuZC5sb2Muc3Rh
cnQubGluZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi5sb2Muc3Rh
cnQubGluZSAhPT0gY3VybHlUb2tlbi5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChibG9jay5ib2R5Lmxlbmd0aCAmJiBwYXJhbXMuYWxsb3dTaW5n
bGVMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VybHlUb2tlbi5sb2Muc3Rh
cnQubGluZSA9PT0gYmxvY2suYm9keVswXS5sb2Muc3RhcnQubGluZSAmJiAhY3VybHlUb2tlbnNP
blNhbWVMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
YmxvY2suYm9keVswXSwgQk9EWV9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoY3VybHlUb2tlbkVuZC5sb2Muc3RhcnQubGluZSA9PT0gYmxvY2suYm9keVtibG9j
ay5ib2R5Lmxlbmd0aCAtIDFdLmxvYy5zdGFydC5saW5lICYmICFjdXJseVRva2Vuc09uU2FtZUxp
bmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChibG9jay5i
b2R5W2Jsb2NrLmJvZHkubGVuZ3RoIC0gMV0sIENMT1NFX01FU1NBR0VfU0lOR0xFKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChibG9j
ay5ib2R5Lmxlbmd0aCAmJiBjdXJseVRva2VuLmxvYy5zdGFydC5saW5lID09PSBibG9jay5ib2R5
WzBdLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChibG9jay5ib2R5WzBdLCBCT0RZX01FU1NBR0UpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisgICAgfQor
CisgICAgLyoqCisgICAgICogRW5mb3JjZXMgdGhlIGNvbmZpZ3VyZWQgYnJhY2Ugc3R5bGUgb24g
SWZTdGF0ZW1lbnRzCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEFuIElmU3RhdGVtZW50
IG5vZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hl
Y2tJZlN0YXRlbWVudChub2RlKSB7CisgICAgICAgIHZhciB0b2tlbnM7CisKKyAgICAgICAgY2hl
Y2tCbG9jaygiY29uc2VxdWVudCIsICJhbHRlcm5hdGUiKShub2RlKTsKKworICAgICAgICBpZiAo
bm9kZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50
IikgeworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnNCZWZvcmUobm9kZS5h
bHRlcm5hdGUsIDIpOworICAgICAgICAgICAgaWYgKHN0eWxlID09PSAiMXRicyIpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodG9rZW5zWzBdLmxvYy5zdGFydC5saW5lICE9PSB0b2tlbnNbMV0ubG9j
LnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZS5h
bHRlcm5hdGUsIENMT1NFX01FU1NBR0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoc3R5bGUgPT09ICJzdHJvdXN0cnVwIikgeworICAgICAgICAgICAgICAgIGlm
ICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUgPT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkg
eworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLmFsdGVybmF0ZSwgQ0xP
U0VfTUVTU0FHRV9TVFJPVVNUUlVQKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbmZvcmNlcyB0aGUgY29uZmln
dXJlZCBicmFjZSBzdHlsZSBvbiBUcnlTdGF0ZW1lbnRzCisgICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIEEgVHJ5U3RhdGVtZW50IG5vZGUuCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAg
ICovCisgICAgZnVuY3Rpb24gY2hlY2tUcnlTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIg
dG9rZW5zOworCisgICAgICAgIGNoZWNrQmxvY2soImJsb2NrIiwgImZpbmFsaXplciIpKG5vZGUp
OworCisgICAgICAgIGlmIChub2RlLmZpbmFsaXplciAmJiBub2RlLmZpbmFsaXplci50eXBlID09
PSAiQmxvY2tTdGF0ZW1lbnQiKSB7CisgICAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0LmdldFRv
a2Vuc0JlZm9yZShub2RlLmZpbmFsaXplciwgMik7CisgICAgICAgICAgICBpZiAoc3R5bGUgPT09
ICIxdGJzIikgeworICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbMF0ubG9jLnN0YXJ0LmxpbmUg
IT09IHRva2Vuc1sxXS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLmZpbmFsaXplciwgQ0xPU0VfTUVTU0FHRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PT0gInN0cm91c3RydXAiKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Muc3RhcnQubGluZSA9PT0gdG9rZW5zWzFd
LmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUuZmluYWxpemVyLCBDTE9TRV9NRVNTQUdFX1NUUk9VU1RSVVApOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEVu
Zm9yY2VzIHRoZSBjb25maWd1cmVkIGJyYWNlIHN0eWxlIG9uIENhdGNoQ2xhdXNlcworICAgICAq
IEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBBIENhdGNoQ2xhdXNlIG5vZGUuCisgICAgICogQHJldHVy
bnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tDYXRjaENsYXVzZShub2RlKSB7
CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShub2Rl
KSwKKyAgICAgICAgICAgIGZpcnN0VG9rZW4gPSBjb250ZXh0LmdldEZpcnN0VG9rZW4obm9kZSk7
CisKKyAgICAgICAgY2hlY2tCbG9jaygiYm9keSIpKG5vZGUpOworCisgICAgICAgIGlmIChub2Rl
LmJvZHkgJiYgbm9kZS5ib2R5LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAg
ICAgIGlmIChzdHlsZSA9PT0gIjF0YnMiKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3Vz
VG9rZW4ubG9jLnN0YXJ0LmxpbmUgIT09IGZpcnN0VG9rZW4ubG9jLnN0YXJ0LmxpbmUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgQ0xPU0VfTUVTU0FHRSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZSA9PT0gInN0cm91
c3RydXAiKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzVG9rZW4ubG9jLnN0YXJ0Lmxp
bmUgPT09IGZpcnN0VG9rZW4ubG9jLnN0YXJ0LmxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgQ0xPU0VfTUVTU0FHRV9TVFJPVVNUUlVQKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAg
ICAgKiBFbmZvcmNlcyB0aGUgY29uZmlndXJlZCBicmFjZSBzdHlsZSBvbiBTd2l0Y2hTdGF0ZW1l
bnRzCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIEEgU3dpdGNoU3RhdGVtZW50IG5vZGUu
CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tTd2l0
Y2hTdGF0ZW1lbnQobm9kZSkgeworICAgICAgICB2YXIgdG9rZW5zOworICAgICAgICBpZiAobm9k
ZS5jYXNlcyAmJiBub2RlLmNhc2VzLmxlbmd0aCkgeworICAgICAgICAgICAgdG9rZW5zID0gY29u
dGV4dC5nZXRUb2tlbnNCZWZvcmUobm9kZS5jYXNlc1swXSwgMik7CisgICAgICAgICAgICBpZiAo
dG9rZW5zWzBdLmxvYy5zdGFydC5saW5lICE9PSB0b2tlbnNbMV0ubG9jLnN0YXJ0LmxpbmUpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBPUEVOX01FU1NBR0UpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG9rZW5zID0gY29udGV4
dC5nZXRMYXN0VG9rZW5zKG5vZGUsIDMpOworICAgICAgICAgICAgaWYgKHRva2Vuc1swXS5sb2Mu
c3RhcnQubGluZSAhPT0gdG9rZW5zWzFdLmxvYy5zdGFydC5saW5lKSB7CisgICAgICAgICAgICAg
ICAgY29udGV4dC5yZXBvcnQobm9kZSwgT1BFTl9NRVNTQUdFKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMg
QVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkZ1
bmN0aW9uRGVjbGFyYXRpb24iOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJGdW5jdGlv
bkV4cHJlc3Npb24iOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJJZlN0YXRlbWVudCI6
IGNoZWNrSWZTdGF0ZW1lbnQsCisgICAgICAgICJUcnlTdGF0ZW1lbnQiOiBjaGVja1RyeVN0YXRl
bWVudCwKKyAgICAgICAgIkNhdGNoQ2xhdXNlIjogY2hlY2tDYXRjaENsYXVzZSwKKyAgICAgICAg
IkRvV2hpbGVTdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJXaGlsZVN0
YXRlbWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAgICAgICAgIldpdGhTdGF0ZW1lbnQiOiBj
aGVja0Jsb2NrKCJib2R5IiksCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiBjaGVja0Jsb2NrKCJi
b2R5IiksCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6IGNoZWNrQmxvY2soImJvZHkiKSwKKyAg
ICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IGNoZWNrU3dpdGNoU3RhdGVtZW50CisgICAgfTsKKwor
fTsKKworfSx7fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisg
KiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBub24tY2FtZWxjYXNlZCBpZGVudGlmaWVycwor
ICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgYSBzdHJpbmcgY29udGFpbnMgYW4g
dW5kZXJzY29yZSBhbmQgaXNuJ3QgYWxsIHVwcGVyLWNhc2UKKyAgICAgKiBAcGFyYW0ge1N0cmlu
Z30gbmFtZSBUaGUgc3RyaW5nIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBp
ZiB0aGUgc3RyaW5nIGlzIHVuZGVyc2NvcmVkCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBpc1VuZGVyc2NvcmVkKG5hbWUpIHsKKworICAgICAgICAvLyBpZiB0aGVyZSdz
IGFuIHVuZGVyc2NvcmUsIGl0IG1pZ2h0IGJlIEFfQ09OU1RBTlQsIHdoaWNoIGlzIG9rYXkKKyAg
ICAgICAgcmV0dXJuIG5hbWUuaW5kZXhPZigiXyIpID4gLTEgJiYgbmFtZSAhPT0gbmFtZS50b1Vw
cGVyQ2FzZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydHMgYW4gQVNUIG5vZGUg
YXMgYSBydWxlIHZpb2xhdGlvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5v
ZGUgdG8gcmVwb3J0LgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisg
ICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHsKKyAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIklkZW50aWZpZXIgJ3t7bmFtZX19JyBpcyBub3QgaW4gY2FtZWwgY2FzZS4iLCB7
IG5hbWU6IG5vZGUubmFtZSB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJJ
ZGVudGlmaWVyIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAvLyBMZWFkaW5nIGFu
ZCB0cmFpbGluZyB1bmRlcnNjb3JlcyBhcmUgY29tbW9ubHkgdXNlZCB0byBmbGFnIHByaXZhdGUv
cHJvdGVjdGVkIGlkZW50aWZpZXJzLCBzdHJpcCB0aGVtCisgICAgICAgICAgICB2YXIgbmFtZSA9
IG5vZGUubmFtZS5yZXBsYWNlKC9eXyt8XyskL2csICIiKSwKKyAgICAgICAgICAgICAgICBlZmZl
Y3RpdmVQYXJlbnQgPSAobm9kZS5wYXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSA/
IG5vZGUucGFyZW50LnBhcmVudCA6IG5vZGUucGFyZW50OworCisgICAgICAgICAgICAvLyBNZW1i
ZXJFeHByZXNzaW9ucyBnZXQgc3BlY2lhbCBydWxlcworICAgICAgICAgICAgaWYgKG5vZGUucGFy
ZW50LnR5cGUgPT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworCisgICAgICAgICAgICAgICAgLy8g
QWx3YXlzIHJlcG9ydCB1bmRlcnNjb3JlZCBvYmplY3QgbmFtZXMKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS5wYXJlbnQub2JqZWN0LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQub2JqZWN0Lm5hbWUgPT09IG5vZGUubmFtZSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgaXNVbmRlcnNjb3JlZChuYW1lKSkgeworICAgICAgICAg
ICAgICAgICAgICByZXBvcnQobm9kZSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZXBvcnQgQXNz
aWdubWVudEV4cHJlc3Npb25zIG9ubHkgaWYgdGhleSBhcmUgdGhlIGxlZnQgc2lkZSBvZiB0aGUg
YXNzaWdubWVudAorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWZmZWN0aXZlUGFyZW50LnR5
cGUgPT09ICJBc3NpZ25tZW50RXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlzVW5kZXJzY29yZWQobmFtZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChlZmZlY3Rp
dmVQYXJlbnQucmlnaHQudHlwZSAhPT0gIk1lbWJlckV4cHJlc3Npb24iIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICBlZmZlY3RpdmVQYXJlbnQubGVmdC50eXBlID09PSAiTWVtYmVyRXhwcmVz
c2lvbiIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVBhcmVudC5sZWZ0LnBy
b3BlcnR5Lm5hbWUgPT09IG5vZGUubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0
KG5vZGUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVwb3J0IGFueXRo
aW5nIHRoYXQgaXMgdW5kZXJzY29yZWQgdGhhdCBpc24ndCBhIENhbGxFeHByZXNzaW9uCisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzVW5kZXJzY29yZWQobmFtZSkgJiYgZWZmZWN0aXZlUGFyZW50
LnR5cGUgIT09ICJDYWxsRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9k
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxNjpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
Q29tbWEgc3R5bGUgLSBlbmZvcmNlcyBjb21tYSBzdHlsZXMgb2YgdHdvIHR5cGVzOiBsYXN0IGFu
ZCBmaXJzdAorICogQGF1dGhvciBWaWduZXNoIEFuYW5kIGFrYSB2ZWdldGFibGVtYW4KKyAqIEBj
b3B5cmlnaHQgMjAxNCBWaWduZXNoIEFuYW5kLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisK
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIHN0eWxlID0gY29udGV4dC5vcHRpb25zWzBdIHx8
ICJsYXN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHRoZSBjb21tYSBw
bGFjZW1lbnQgd2l0aCByZWdhcmRzIHRvIGEgZGVjbGFyYXRpb24vcHJvcGVydHkvZWxlbWVudAor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgYmluYXJ5IGV4cHJlc3Npb24gbm9kZSB0
byBjaGVjaworICAgICAqIEBwcml2YXRlCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICov
CisgICAgZnVuY3Rpb24gdmFsaWRhdGVDb21tYShub2RlKSB7CisgICAgICAgIHZhciBpdGVtcyA9
IG5vZGUuZGVjbGFyYXRpb25zIHx8IG5vZGUucHJvcGVydGllcyB8fCBub2RlLmVsZW1lbnRzOwor
CisgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBpdGVtcy5mb3JF
YWNoKGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7CisgICAgICAgICAgICAgICAgdmFyIHRva2VuQmVm
b3JlID0gY29udGV4dC5nZXRUb2tlbkJlZm9yZShpdGVtKSwKKyAgICAgICAgICAgICAgICAgICAg
aXRlbUJlZm9yZSA9IGl0ZW1zW2luZGV4IC0gMV07CisKKyAgICAgICAgICAgICAgICBpZiAodG9r
ZW5CZWZvcmUudmFsdWUgPT09ICIsIikgeworICAgICAgICAgICAgICAgICAgICAvL2lmIHNpbmds
ZSBsaW5lCisgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUg
PT09IGl0ZW0ubG9jLnN0YXJ0LmxpbmUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vu
QmVmb3JlLmxvYy5lbmQubGluZSA9PT0gaXRlbUJlZm9yZS5sb2MuZW5kLmxpbmUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAvL2xvbmUgY29tbWEKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
dG9rZW5CZWZvcmUubG9jLmVuZC5saW5lICE9PSBpdGVtLmxvYy5zdGFydC5saW5lICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5sb2MuZW5kLmxpbmUgIT09IGl0ZW1CZWZv
cmUubG9jLmVuZC5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChpdGVtLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogdG9rZW5CZWZvcmUu
bG9jLmVuZC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdG9rZW5C
ZWZvcmUubG9jLnN0YXJ0LmNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgfSwgIkJhZCBs
aW5lIGJyZWFraW5nIGJlZm9yZSBhbmQgYWZ0ZXIgJywnLiIpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlID09PSAiZmlyc3QiICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZS5sb2Muc3RhcnQubGluZSAhPT0gaXRl
bS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQoaXRlbSwgIicsJyBzaG91bGQgYmUgcGxhY2VkIGZpcnN0LiIpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0eWxlID09PSAibGFzdCIgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlLmxvYy5lbmQubGluZSA9PT0gaXRl
bS5sb2Muc3RhcnQubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQoaXRlbSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGl0ZW1CZWZvcmUu
bG9jLmVuZC5saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaXRlbUJl
Zm9yZS5sb2MuZW5kLmNvbHVtbgorICAgICAgICAgICAgICAgICAgICAgICAgfSwgIicsJyBzaG91
bGQgYmUgcGxhY2VkIGxhc3QuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAg
ICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IHZhbGlkYXRlQ29tbWEs
CisgICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogdmFsaWRhdGVDb21tYSwKKyAgICAgICAgIkFy
cmF5RXhwcmVzc2lvbiI6IHZhbGlkYXRlQ29tbWEKKyAgICB9OworCit9OworCit9LHt9XSwxNzpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
Q291bnRzIHRoZSBjeWNsb21hdGljIGNvbXBsZXhpdHkgb2YgZWFjaCBmdW5jdGlvbiBvZiB0aGUg
c2NyaXB0LiBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DeWNsb21hdGljX2NvbXBs
ZXhpdHkuCisgKiBDb3VudHMgdGhlIG51bWJlciBvZiBpZiwgY29uZGl0aW9uYWwsIGZvciwgd2hp
bHRlLCB0cnksIHN3aXRjaC9jYXNlLAorICogQGF1dGhvciBQYXRyaWNrIEJyb3NzZXQKKyAqLwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBUSFJFU0hPTEQgPSBjb250ZXh0Lm9wdGlvbnNb
MF07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFVzaW5nIGEgc3RhY2sgdG8gc3RvcmUgY29tcGxleGl0
eSAoaGFuZGxpbmcgbmVzdGVkIGZ1bmN0aW9ucykKKyAgICB2YXIgZm5zID0gW107CisKKyAgICAv
LyBXaGVuIHBhcnNpbmcgYSBuZXcgZnVuY3Rpb24sIHN0b3JlIGl0IGluIG91ciBmdW5jdGlvbiBz
dGFjaworICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZucy5wdXNoKDEp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGVuZEZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgdmFy
IGNvbXBsZXhpdHkgPSBmbnMucG9wKCksIG5hbWUgPSAiYW5vbnltb3VzIjsKKworICAgICAgICBp
ZiAobm9kZS5pZCkgeworICAgICAgICAgICAgbmFtZSA9IG5vZGUuaWQubmFtZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY29tcGxleGl0eSA+IFRIUkVTSE9MRCkgeworICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIkZ1bmN0aW9uICd7e25hbWV9fScgaGFzIGEgY29tcGxleGl0eSBv
ZiB7e2NvbXBsZXhpdHl9fS4iLCB7IG5hbWU6IG5hbWUsIGNvbXBsZXhpdHk6IGNvbXBsZXhpdHkg
fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBpbmNyZWFzZUNvbXBsZXhpdHko
KSB7CisgICAgICAgIGlmIChmbnMubGVuZ3RoKSB7CisgICAgICAgICAgICBmbnNbZm5zLmxlbmd0
aCAtIDFdICsrOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaW5jcmVhc2VTd2l0
Y2hDb21wbGV4aXR5KG5vZGUpIHsKKyAgICAgICAgLy8gQXZvaWRpbmcgYGRlZmF1bHRgCisgICAg
ICAgIGlmIChub2RlLnRlc3QpIHsKKyAgICAgICAgICAgIGluY3JlYXNlQ29tcGxleGl0eShub2Rl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGluY3JlYXNlTG9naWNhbENvbXBs
ZXhpdHkobm9kZSkgeworICAgICAgICAvLyBBdm9pZGluZyAmJgorICAgICAgICBpZiAobm9kZS5v
cGVyYXRvciA9PT0gInx8IikgeworICAgICAgICAgICAgaW5jcmVhc2VDb21wbGV4aXR5KG5vZGUp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1
YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAg
ICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlv
bkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
bjpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCI6
IGVuZEZ1bmN0aW9uLAorCisgICAgICAgICJDYXRjaENsYXVzZSI6IGluY3JlYXNlQ29tcGxleGl0
eSwKKyAgICAgICAgIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6IGluY3JlYXNlQ29tcGxleGl0eSwK
KyAgICAgICAgIkxvZ2ljYWxFeHByZXNzaW9uIjogaW5jcmVhc2VMb2dpY2FsQ29tcGxleGl0eSwK
KyAgICAgICAgIkZvclN0YXRlbWVudCI6IGluY3JlYXNlQ29tcGxleGl0eSwKKyAgICAgICAgIkZv
ckluU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5LAorICAgICAgICAiSWZTdGF0ZW1lbnQi
OiBpbmNyZWFzZUNvbXBsZXhpdHksCisgICAgICAgICJTd2l0Y2hDYXNlIjogaW5jcmVhc2VTd2l0
Y2hDb21wbGV4aXR5LAorICAgICAgICAiV2hpbGVTdGF0ZW1lbnQiOiBpbmNyZWFzZUNvbXBsZXhp
dHksCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogaW5jcmVhc2VDb21wbGV4aXR5CisgICAg
fTsKKworfTsKKworfSx7fV0sMTg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewor
LyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjb25zaXN0ZW50IHJldHVybiB2YWx1
ZXMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
IHZhciBmdW5jdGlvbnMgPSBbXTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBI
ZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgZnVuY3Rpb24gZW50ZXJGdW5j
dGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb25zLnB1c2goe30pOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGV4aXRGdW5jdGlvbigpIHsKKyAgICAgICAgZnVuY3Rpb25zLnBvcCgpOworICAgIH0KKwor
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24i
OiBlbnRlckZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZW50ZXJGdW5j
dGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCI6IGV4aXRGdW5jdGlvbiwK
KyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZXhpdEZ1bmN0aW9uLAorCisgICAg
ICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZh
ciByZXR1cm5JbmZvID0gZnVuY3Rpb25zW2Z1bmN0aW9ucy5sZW5ndGggLSAxXSwKKyAgICAgICAg
ICAgICAgICByZXR1cm5UeXBlRGVmaW5lZCA9ICJ0eXBlIiBpbiByZXR1cm5JbmZvOworCisgICAg
ICAgICAgICBpZiAocmV0dXJuVHlwZURlZmluZWQpIHsKKworICAgICAgICAgICAgICAgIGlmIChy
ZXR1cm5JbmZvLnR5cGUgIT09ICEhbm9kZS5hcmd1bWVudCkgeworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgIiArIChyZXR1cm5JbmZvLnR5cGUgPyAi
YSIgOiAibm8iKSArICIgcmV0dXJuIHZhbHVlLiIpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm5JbmZvLnR5cGUgPSAhIW5v
ZGUuYXJndW1lbnQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisK
K30se31dLDE5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgY29uc2lzdGVudCBuYW1pbmcgb2YgInRoaXMiIGNv
bnRleHQgdmFyaWFibGVzCisgKiBAYXV0aG9yIFJhcGhhZWwgUGlndWxsYQorICovCisidXNlIHN0
cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBhbGlhcyA9IGNvbnRleHQub3B0aW9uc1sw
XTsKKworICAgICAgICAgICAgbm9kZS5kZWNsYXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihkZWNs
YXJhdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pZC5uYW1lID09PSBh
bGlhcyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIShkZWNsYXJhdGlvbi5pbml0ICYmIGRl
Y2xhcmF0aW9uLmluaXQudHlwZSA9PT0gIlRoaXNFeHByZXNzaW9uIikpIHsKKworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAiRGVzaWduYXRlZCAndGhpcycgYWxpYXMgJ3t7YWxp
YXN9fScgaXMgbm90IGFzc2lnbmVkICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
byB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dC4iLAorICAgICAgICAgICAgICAgICAgICAg
ICAgeyBhbGlhczogZGVjbGFyYXRpb24uaWQubmFtZSB9CisgICAgICAgICAgICAgICAgICAgICk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlu
aXQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLmluaXQudHlwZSA9PT0g
IlRoaXNFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24u
aWQubmFtZSAhPT0gYWxpYXMpIHsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAiVW5leHBlY3RlZCBhbGlhcyAne3thbGlhc319JyBmb3IgJ3RoaXMnLiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICB7IGFsaWFzOiBkZWNsYXJhdGlvbi5pZC5uYW1lIH0KKyAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgc3RhdGVtZW50cyB3aXRo
b3V0IGN1cmx5IGJyYWNlcworICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNl
IHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgdmFyIG11bHRpT25seSA9IChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJt
dWx0aSIpOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdGhlIGJvZHkgb2Yg
YSBub2RlIHRvIHNlZSBpZiBpdCdzIGEgYmxvY2sgc3RhdGVtZW50LiBEZXBlbmRpbmcgb24KKyAg
ICAgKiB0aGUgcnVsZSBvcHRpb25zLCByZXBvcnRzIHRoZSBhcHByb3ByaWF0ZSBwcm9ibGVtcy4K
KyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gcmVwb3J0IGlmIHRoZXJl
J3MgYSBwcm9ibGVtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gYm9keSBUaGUgYm9keSBub2Rl
IHRvIGNoZWNrIGZvciBibG9ja3MuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5h
bWUgdG8gcmVwb3J0IGlmIHRoZXJlJ3MgYSBwcm9ibGVtLgorICAgICAqIEBwYXJhbSB7c3RyaW5n
fSBzdWZmaXggQWRkaXRpb25hbCBzdHJpbmcgdG8gYWRkIHRvIHRoZSBlbmQgb2YgYSByZXBvcnQu
CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tCb2R5
KG5vZGUsIGJvZHksIG5hbWUsIHN1ZmZpeCkgeworICAgICAgICB2YXIgaGFzQmxvY2sgPSAoYm9k
eS50eXBlID09PSAiQmxvY2tTdGF0ZW1lbnQiKTsKKworICAgICAgICBpZiAobXVsdGlPbmx5KSB7
CisgICAgICAgICAgICBpZiAoaGFzQmxvY2sgJiYgYm9keS5ib2R5Lmxlbmd0aCA9PT0gMSkgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbm5lY2Vzc2FyeSB7IGFmdGVy
ICd7e25hbWV9fSd7e3N1ZmZpeH19LiIsCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWZm
aXg6IChzdWZmaXggPyAiICIgKyBzdWZmaXggOiAiIikKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAoIWhhc0Jsb2NrKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgIkV4cGVjdGVkIHsgYWZ0ZXIgJ3t7bmFtZX19J3t7c3VmZml4fX0uIiwKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN1ZmZpeDogKHN1ZmZpeCA/ICIgIiArIHN1ZmZpeCA6ICIiKQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJs
aWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJJ
ZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgY2hlY2tCb2R5KG5v
ZGUsIG5vZGUuY29uc2VxdWVudCwgImlmIiwgImNvbmRpdGlvbiIpOworCisgICAgICAgICAgICBp
ZiAobm9kZS5hbHRlcm5hdGUgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gIklmU3RhdGVtZW50
IikgeworICAgICAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBub2RlLmFsdGVybmF0ZSwgImVs
c2UiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9LAorCisgICAgICAgICJXaGlsZVN0YXRl
bWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrQm9keShub2RlLCBub2Rl
LmJvZHksICJ3aGlsZSIsICJjb25kaXRpb24iKTsKKyAgICAgICAgfSwKKworICAgICAgICAiRG9X
aGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBjaGVja0JvZHko
bm9kZSwgbm9kZS5ib2R5LCAiZG8iKTsKKyAgICAgICAgfSwKKworICAgICAgICAiRm9yU3RhdGVt
ZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tCb2R5KG5vZGUsIG5vZGUu
Ym9keSwgImZvciIsICJjb25kaXRpb24iKTsKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30s
e31dLDIxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVv
dmVydmlldyByZXF1aXJlIGRlZmF1bHQgY2FzZSBpbiBzd2l0Y2ggc3RhdGVtZW50cworICogQGF1
dGhvciBBbGlha3NlaSBTaHl0a2luCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKwordmFyIENPTU1FTlRf
VkFMVUUgPSAibm8gZGVmYXVsdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIEhl
bHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAgKiBTaG9ydGN1
dCB0byBnZXQgbGFzdCBlbGVtZW50IG9mIGFycmF5CisgICAgICogQHBhcmFtICB7KltdfSBjb2xs
ZWN0aW9uIEFycmF5CisgICAgICogQHJldHVybnMgeyp9IExhc3QgZWxlbWVudAorICAgICAqLwor
ICAgIGZ1bmN0aW9uIGxhc3QoY29sbGVjdGlvbikgeworICAgICAgICByZXR1cm4gY29sbGVjdGlv
bltjb2xsZWN0aW9uLmxlbmd0aCAtIDFdOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4g
eworCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAg
ICAgICAgIGlmICghbm9kZS5jYXNlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAvLyBza2lw
IGNoZWNrIG9mIGVtcHR5IHN3aXRjaCBiZWNhdXNlIHRoZXJlIGlzIG5vIGVhc3kgd2F5CisgICAg
ICAgICAgICAgICAgLy8gdG8gZXh0cmFjdCBjb21tZW50cyBpbnNpZGUgaXQgbm93CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgaGFzRGVm
YXVsdCA9IG5vZGUuY2FzZXMuc29tZShmdW5jdGlvbih2KSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHYudGVzdCA9PT0gbnVsbDsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAo
IWhhc0RlZmF1bHQpIHsKKworICAgICAgICAgICAgICAgIHZhciBjb21tZW50OworICAgICAgICAg
ICAgICAgIHZhciBjb21tZW50czsKKworICAgICAgICAgICAgICAgIHZhciBsYXN0Q2FzZSA9IGxh
c3Qobm9kZS5jYXNlcyk7CisgICAgICAgICAgICAgICAgY29tbWVudHMgPSBjb250ZXh0LmdldENv
bW1lbnRzKGxhc3RDYXNlKS50cmFpbGluZzsKKworICAgICAgICAgICAgICAgIGlmIChjb21tZW50
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGxhc3QoY29tbWVudHMp
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghY29tbWVudCB8fCBj
b21tZW50LnZhbHVlLnRyaW0oKSAhPT0gQ09NTUVOVF9WQUxVRSkgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgYSBkZWZhdWx0IGNhc2UuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKK307CisK
K30se31dLDIyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIHdhcm4gYWJvdXQgdXNpbmcgZG90IG5vdGF0aW9uIGluc3RlYWQg
b2Ygc3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd2hlbiBwb3NzaWJsZS4KKyAqIEBhdXRob3IgSm9z
aCBQZXJlegorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciB2YWxpZElk
ZW50aWZpZXIgPSAvXlthLXpBLVpfJF1bYS16QS1aMC05XyRdKiQvOwordmFyIGtleXdvcmRzID0g
WworICAgICJ0aGlzIiwKKyAgICAiZnVuY3Rpb24iLAorICAgICJpZiIsCisgICAgInJldHVybiIs
CisgICAgInZhciIsCisgICAgImVsc2UiLAorICAgICJmb3IiLAorICAgICJuZXciLAorICAgICJh
cmd1bWVudHMiLAorICAgICJpbiIsCisgICAgInR5cGVvZiIsCisgICAgIndoaWxlIiwKKyAgICAi
Y2FzZSIsCisgICAgImJyZWFrIiwKKyAgICAidHJ5IiwKKyAgICAiY2F0Y2giLAorICAgICJkZWxl
dGUiLAorICAgICJ0aHJvdyIsCisgICAgInN3aXRjaCIsCisgICAgImNvbnRpbnVlIiwKKyAgICAi
ZGVmYXVsdCIsCisgICAgImluc3RhbmNlb2YiLAorICAgICJkbyIsCisgICAgInZvaWQiLAorICAg
ICJmaW5hbGx5IiwKKyAgICAid2l0aCIsCisgICAgImRlYnVnZ2VyIiwKKyAgICAiZXZhbCIsCisg
ICAgImltcGxlbWVudHMiLAorICAgICJpbnRlcmZhY2UiLAorICAgICJwYWNrYWdlIiwKKyAgICAi
cHJpdmF0ZSIsCisgICAgInByb3RlY3RlZCIsCisgICAgInB1YmxpYyIsCisgICAgInN0YXRpYyIs
CisgICAgInlpZWxkIiwKKyAgICAibGV0IiwKKyAgICAiY2xhc3MiLAorICAgICJlbnVtIiwKKyAg
ICAiZXhwb3J0IiwKKyAgICAiZXh0ZW5kcyIsCisgICAgImltcG9ydCIsCisgICAgInN1cGVyIiwK
KyAgICAidHJ1ZSIsCisgICAgImZhbHNlIiwKKyAgICAibnVsbCIsCisgICAgImFic3RyYWN0IiwK
KyAgICAiYm9vbGVhbiIsCisgICAgImJ5dGUiLAorICAgICJjaGFyIiwKKyAgICAiY29uc3QiLAor
ICAgICJkb3VibGUiLAorICAgICJmaW5hbCIsCisgICAgImZsb2F0IiwKKyAgICAiZ290byIsCisg
ICAgImludCIsCisgICAgImxvbmciLAorICAgICJuYXRpdmUiLAorICAgICJzaG9ydCIsCisgICAg
InN5bmNocm9uaXplZCIsCisgICAgInRocm93cyIsCisgICAgInRyYW5zaWVudCIsCisgICAgInZv
bGF0aWxlIgorXTsKKworZnVuY3Rpb24gY2FuQmVXcml0dGVuSW5Eb3ROb3RhdGlvbihub2RlKSB7
CisgICAgcmV0dXJuIG5vZGUuY29tcHV0ZWQgPT09IHRydWUgJiYKKyAgICAgICAgbm9kZS5wcm9w
ZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYKKyAgICAgICAgdmFsaWRJZGVudGlmaWVyLnRlc3Qo
bm9kZS5wcm9wZXJ0eS52YWx1ZSkgJiYKKyAgICAgICAga2V5d29yZHMuaW5kZXhPZigiIiArIG5v
ZGUucHJvcGVydHkudmFsdWUpID09PSAtMTsKK30KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisgICAgcmV0dXJuIHsKKyAgICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAoY2FuQmVXcml0dGVuSW5Eb3ROb3RhdGlv
bihub2RlKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJbJyIgKyBu
b2RlLnByb3BlcnR5LnZhbHVlICsgIiddIGlzIGJldHRlciB3cml0dGVuIGluIGRvdCBub3RhdGlv
bi4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9OworCit9LHt9XSwyMzpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UmVxdWlyZSBmaWxlIHRvIGVuZCB3aXRoIHNpbmdsZSBuZXdsaW5lLgorICogQGF1dGhvciBOb2Rl
Y2EgVGVhbSA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVjYT4KKyAqLworInVzZSBzdHJpY3QiOwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogZnVuY3Rpb24gY2hl
Y2tCYWRFT0Yobm9kZSkgeworICAgICAgICAgICAgLy8gR2V0IHRoZSB3aG9sZSBzb3VyY2UgY29k
ZSwgbm90IGZvciBub2RlIG9ubHkuCisgICAgICAgICAgICB2YXIgc3JjID0gY29udGV4dC5nZXRT
b3VyY2UoKSwgbG9jYXRpb24gPSB7Y29sdW1uOiAxfTsKKworICAgICAgICAgICAgaWYgKHNyYy5s
ZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChzcmNbc3JjLmxlbmd0aCAtIDFdICE9PSAiXG4iKSB7CisgICAgICAg
ICAgICAgICAgLy8gZmlsZSBpcyBub3QgbmV3bGluZS10ZXJtaW5hdGVkCisgICAgICAgICAgICAg
ICAgbG9jYXRpb24ubGluZSA9IHNyYy5zcGxpdCgvXG4vZykubGVuZ3RoOworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGxvY2F0aW9uLCAiTmV3bGluZSByZXF1aXJlZCBhdCBl
bmQgb2YgZmlsZSBidXQgbm90IGZvdW5kLiIpOworICAgICAgICAgICAgfSBlbHNlIGlmICgvXG5c
cypcbiQvLnRlc3Qoc3JjKSkgeworICAgICAgICAgICAgICAgIC8vIGxhc3QgbGluZSBpcyBlbXB0
eQorICAgICAgICAgICAgICAgIGxvY2F0aW9uLmxpbmUgPSBzcmMuc3BsaXQoL1xuL2cpLmxlbmd0
aCAtIDE7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgbG9jYXRpb24sICJV
bmV4cGVjdGVkIGJsYW5rIGxpbmUgYXQgZW5kIG9mIGZpbGUuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDI0OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgc3RhdGVt
ZW50cyB0aGF0IHVzZSAhPSBhbmQgPT0gaW5zdGVhZCBvZiAhPT0gYW5kID09PQorICogQGF1dGhv
ciBOaWNob2xhcyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBS
dWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRz
ID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisg
ICAgICogQ2hlY2tzIGlmIGVpdGhlciBvcGVyYW5kIG9mIGEgYmluYXJ5IGV4cHJlc3Npb24gaXMg
YSB0eXBlb2Ygb3BlcmF0aW9uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2Rl
IHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9uZSBvZiB0aGUgb3BlcmFu
ZHMgaXMgdHlwZW9mCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1R5
cGVPZihub2RlKSB7CisgICAgICAgIHJldHVybiBbbm9kZS5sZWZ0LCBub2RlLnJpZ2h0XS5zb21l
KGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09ICJVbmFy
eUV4cHJlc3Npb24iICYmIG5vZGUub3BlcmF0b3IgPT09ICJ0eXBlb2YiOworICAgICAgICB9KTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgb3BlcmFuZHMgYXJlIGxpdGVyYWxz
IG9mIHRoZSBzYW1lIHR5cGUgKHZpYSB0eXBlb2YpCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9wZXJh
bmRzIGFyZSBvZiBzYW1lIHR5cGUKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0
aW9uIGFyZUxpdGVyYWxzQW5kU2FtZVR5cGUobm9kZSkgeworICAgICAgICByZXR1cm4gbm9kZS5s
ZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLnJpZ2h0LnR5cGUgPT09ICJMaXRlcmFsIiAm
JgorICAgICAgICAgICAgICAgIHR5cGVvZiBub2RlLmxlZnQudmFsdWUgPT09IHR5cGVvZiBub2Rl
LnJpZ2h0LnZhbHVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBvbmUgb2Yg
dGhlIG9wZXJhbmRzIGlzIGEgbGl0ZXJhbCBudWxsCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIG9wZXJh
bmRzIGFyZSBudWxsCisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc051
bGxDaGVjayhub2RlKSB7CisgICAgICAgIHJldHVybiAobm9kZS5yaWdodC50eXBlID09PSAiTGl0
ZXJhbCIgJiYgbm9kZS5yaWdodC52YWx1ZSA9PT0gbnVsbCkgfHwKKyAgICAgICAgICAgICAgICAo
bm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBub2RlLmxlZnQudmFsdWUgPT09IG51bGwp
OworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxvY2F0aW9uIChsaW5lIGFuZCBj
b2x1bW4pIG9mIHRoZSBiaW5hcnkgZXhwcmVzc2lvbidzIG9wZXJhdG9yCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBiaW5hcnkgZXhwcmVzc2lvbiBub2RlIHRvIGNoZWNrCisgICAg
ICogQHBhcmFtIHtTdHJpbmd9IG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBmaW5kCisgICAgICog
QHJldHVybnMge09iamVjdH0geyBsaW5lLCBjb2x1bW4gfSBsb2NhdGlvbiBvZiBvcGVyYXRvcgor
ICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0T3BlcmF0b3JMb2NhdGlv
bihub2RlKSB7CisgICAgICAgIHZhciBvcFRva2VuID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSlb
Y29udGV4dC5nZXRUb2tlbnMobm9kZS5sZWZ0KS5sZW5ndGhdOworICAgICAgICByZXR1cm4ge2xp
bmU6IG9wVG9rZW4ubG9jLnN0YXJ0LmxpbmUsIGNvbHVtbjogb3BUb2tlbi5sb2Muc3RhcnQuY29s
dW1ufTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQmluYXJ5RXhwcmVzc2lvbiI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLm9wZXJhdG9yICE9PSAiPT0i
ICYmIG5vZGUub3BlcmF0b3IgIT09ICIhPSIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJz
bWFydCIgJiYgKGlzVHlwZU9mKG5vZGUpIHx8CisgICAgICAgICAgICAgICAgICAgIGFyZUxpdGVy
YWxzQW5kU2FtZVR5cGUobm9kZSkpIHx8IGlzTnVsbENoZWNrKG5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC5v
cHRpb25zWzBdID09PSAiYWxsb3ctbnVsbCIgJiYgaXNOdWxsQ2hlY2sobm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KAorICAgICAgICAgICAgICAgIG5vZGUsIGdldE9wZXJhdG9yTG9jYXRpb24obm9kZSks
CisgICAgICAgICAgICAgICAgIkV4cGVjdGVkICd7e29wfX09JyBhbmQgaW5zdGVhZCBzYXcgJ3t7
b3B9fScuIiwKKyAgICAgICAgICAgICAgICB7b3A6IG5vZGUub3BlcmF0b3J9CisgICAgICAgICAg
ICApOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMjU6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gd2FybiB3
aGVuIGEgZnVuY3Rpb24gZXhwcmVzc2lvbiBkb2VzIG5vdCBoYXZlIGEgbmFtZS4KKyAqIEBhdXRo
b3IgS3lsZSBULiBOdW5lcnkKKyAqLworICJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisgICAgcmV0dXJuIHsKKyAgICAg
ICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
dmFyIG5hbWUgPSBub2RlLmlkICYmIG5vZGUuaWQubmFtZTsKKworICAgICAgICAgICAgaWYgKCFu
YW1lKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIk1pc3NpbmcgZnVu
Y3Rpb24gZXhwcmVzc2lvbiBuYW1lLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fTsKK307CisKK30se31dLDI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGVuZm9yY2UgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9u
IHN0eWxlCisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICB2YXIgc3R5bGUgPSBjb250ZXh0Lm9wdGlvbnNbMF0sCisgICAgICAgIGVuZm9yY2VEZWNs
YXJhdGlvbnMgPSAoc3R5bGUgPT09ICJkZWNsYXJhdGlvbiIpOworCisgICAgcmV0dXJuIHsKKwor
ICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIGlmICghZW5mb3JjZURlY2xhcmF0aW9ucykgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJFeHBlY3RlZCBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCku
cG9wKCk7CisKKyAgICAgICAgICAgIGlmIChlbmZvcmNlRGVjbGFyYXRpb25zICYmIHBhcmVudC50
eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdG9yIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KHBhcmVudCwgIkV4cGVjdGVkIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24uIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwyNzpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBm
bGFnIG9yIHJlcXVpcmUgZ2xvYmFsIHN0cmljdCBtb2RlLgorICogQGF1dGhvciBOaWNob2xhcyBD
LiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIG1vZGUgPSBjb250ZXh0Lm9wdGlv
bnNbMF07CisKKyAgICBpZiAobW9kZSA9PT0gImFsd2F5cyIpIHsKKworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuYm9keS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBz
dGF0ZW1lbnQgPSBub2RlLmJvZHlbMF07CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoc3Rh
dGVtZW50LnR5cGUgPT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiAmJiBzdGF0ZW1lbnQuZXhwcmVz
c2lvbi52YWx1ZSA9PT0gInVzZSBzdHJpY3QiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSB0aGUgZ2xvYmFsIGZvcm0gb2YgXCJ1c2Ugc3RyaWN0
XCIuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICB9IGVsc2UgeyAvLyBtb2RlID0gIm5ldmVyIgorCisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gY29udGV4dC5nZXRBbmNl
c3RvcnMoKS5wb3AoKTsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cHJlc3Npb24udmFs
dWUgPT09ICJ1c2Ugc3RyaWN0IiAmJiBwYXJlbnQudHlwZSA9PT0gIlByb2dyYW0iKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVc2UgdGhlIGZ1bmN0aW9uIGZv
cm0gb2YgXCJ1c2Ugc3RyaWN0XCIuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgfQorCit9OworCit9LHt9XSwyODpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGZv
ci1pbiBsb29wcyB3aXRob3V0IGlmIHN0YXRlbWVudHMgaW5zaWRlCisgKiBAYXV0aG9yIE5pY2hv
bGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJGb3JJblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAg
LyoKKyAgICAgICAgICAgICAqIElmIHRoZSBmb3ItaW4gc3RhdGVtZW50IGhhcyB7fSwgdGhlbiB0
aGUgcmVhbCBib2R5IGlzIHRoZSBib2R5CisgICAgICAgICAgICAgKiBvZiB0aGUgQmxvY2tTdGF0
ZW1lbnQuIE90aGVyd2lzZSwganVzdCB1c2UgYm9keSBhcyBwcm92aWRlZC4KKyAgICAgICAgICAg
ICAqLworICAgICAgICAgICAgdmFyIGJvZHkgPSBub2RlLmJvZHkudHlwZSA9PT0gIkJsb2NrU3Rh
dGVtZW50IiA/IG5vZGUuYm9keS5ib2R5WzBdIDogbm9kZS5ib2R5OworCisgICAgICAgICAgICBp
ZiAoYm9keSAmJiBib2R5LnR5cGUgIT09ICJJZlN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGJvZHkgb2YgYSBmb3ItaW4gc2hvdWxkIGJlIHdy
YXBwZWQgaW4gYW4gaWYgc3RhdGVtZW50IHRvIGZpbHRlciB1bndhbnRlZCBwcm9wZXJ0aWVzIGZy
b20gdGhlIHByb3RvdHlwZS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisK
K307CisKK30se31dLDI5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBFbnN1cmUgaGFuZGxpbmcgb2YgZXJyb3JzIHdoZW4gd2Uga25vdyB0
aGV5IGV4aXN0LgorICogQGF1dGhvciBKYW11bmQgRmVyZ3Vzb24KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHZhciBlcnJvckFyZ3VtZW50ID0gY29udGV4dC5vcHRpb25zWzBdIHx8ICJl
cnIiOworICAgIHZhciBjYWxsYmFja3MgPSBbXTsKKyAgICB2YXIgc2NvcGVzID0gMDsKKworICAg
IC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnQgc2hvdWxkIGJlIGludGVy
cHJldGVkIGFzIGEgcmVnZXhwIHBhdHRlcm4uCisgICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmlu
Z1RvQ2hlY2sgVGhlIHN0cmluZyB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4KKyAgICAgKiBAcmV0
dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHN0cmluZyBzaG91bGQgYmUgaW50ZXJw
cmV0ZWQgYXMgYSBwYXR0ZXJuLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzUGF0dGVybihzdHJp
bmdUb0NoZWNrKSB7CisgICAgICAgIHZhciBmaXJzdENoYXIgPSBzdHJpbmdUb0NoZWNrWzBdOwor
ICAgICAgICByZXR1cm4gZmlyc3RDaGFyID09PSAiXiI7CisgICAgfQorCisgICAgLyoqCisgICAg
ICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBuYW1lIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQgZXJyb3Ig
YXJndW1lbnQuCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgd2hpY2ggc2hv
dWxkIGJlIGNvbXBhcmVkLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG9yIG5v
dCB0aGUgZ2l2ZW4gbmFtZSBtYXRjaGVzIHRoZSBjb25maWd1cmVkIGVycm9yIHZhcmlhYmxlIG5h
bWUuCisgICAgICovCisgICAgZnVuY3Rpb24gbWF0Y2hlc0NvbmZpZ3VyZWRFcnJvck5hbWUobmFt
ZSkgeworICAgICAgICBpZiAoaXNQYXR0ZXJuKGVycm9yQXJndW1lbnQpKSB7CisgICAgICAgICAg
ICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChlcnJvckFyZ3VtZW50KTsKKyAgICAgICAgICAgIHJl
dHVybiByZWdleHAudGVzdChuYW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZSA9
PT0gZXJyb3JBcmd1bWVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayB0aGUgYXJn
dW1lbnRzIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHRyYWNraW5nIHRoZSBlcnJvciBvYmpl
Y3QuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4K
KyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBzdGFydEZ1bmN0
aW9uKG5vZGUpIHsKKworICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIG5lc3RlZCBzY29wZXMKKyAg
ICAgICAgc2NvcGVzKys7CisKKyAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGZpcnN0IGFyZ3VtZW50
IG1hdGNoZXMgb3VyIGFyZ3VtZW50IG5hbWUKKyAgICAgICAgdmFyIGZpcnN0QXJnID0gbm9kZS5w
YXJhbXMgJiYgbm9kZS5wYXJhbXNbMF07CisgICAgICAgIGlmIChmaXJzdEFyZyAmJiBtYXRjaGVz
Q29uZmlndXJlZEVycm9yTmFtZShmaXJzdEFyZy5uYW1lKSkgeworICAgICAgICAgICAgY2FsbGJh
Y2tzLnB1c2goe2hhbmRsZWQ6IGZhbHNlLCBkZXB0aDogc2NvcGVzLCBlcnJvclZhcmlhYmxlTmFt
ZTogZmlyc3RBcmcubmFtZX0pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICog
QXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIGNoZWNrIHRvIHNlZSBpZiB0aGUgZXJyb3Igd2FzIGhh
bmRsZWQuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVj
ay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBlbmRGdW5j
dGlvbihub2RlKSB7CisKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzW2NhbGxiYWNr
cy5sZW5ndGggLSAxXSB8fCB7fTsKKworICAgICAgICAvLyBjaGVjayBpZiBhIGNhbGxiYWNrIGlz
IGVuZGluZywgaWYgc28gcG9wIGl0IG9mZiB0aGUgc3RhY2sKKyAgICAgICAgaWYgKGNhbGxiYWNr
LmRlcHRoID09PSBzY29wZXMpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy5wb3AoKTsKKworICAg
ICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgd2VyZSBubyBoYW5kbGVkIGVycm9ycyBzaW5jZSB0
aGUgbGFzdCBjYWxsYmFjaworICAgICAgICAgICAgaWYgKCFjYWxsYmFjay5oYW5kbGVkKSB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cGVjdGVkIGVycm9yIHRvIGJl
IGhhbmRsZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBsZXNz
IG5lc3RlZCBmdW5jdGlvbnMKKyAgICAgICAgc2NvcGVzLS07CisKKyAgICB9CisKKyAgICAvKioK
KyAgICAgKiBDaGVjayB0byBzZWUgaWYgd2UncmUgaGFuZGxpbmcgdGhlIGVycm9yIG9iamVjdCBw
cm9wZXJseS4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIEFTVCBub2RlIHRvIGNo
ZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNr
Rm9yRXJyb3Iobm9kZSkgeworICAgICAgICBpZiAoY2FsbGJhY2tzLmxlbmd0aCA+IDApIHsKKyAg
ICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc1tjYWxsYmFja3MubGVuZ3RoIC0gMV0g
fHwge307CisKKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgbm9kZSdzIG5hbWUgbWF0Y2hl
cyBvdXIgZXJyb3IgYXJndW1lbnQgbmFtZQorICAgICAgICAgICAgdmFyIGlzQWJvdXRFcnJvciA9
IG5vZGUubmFtZSA9PT0gY2FsbGJhY2suZXJyb3JWYXJpYWJsZU5hbWU7CisKKyAgICAgICAgICAg
IC8vIHdlIGRvbid0IGNvbnNpZGVyIHRoZXNlIHVzZSBjYXNlcyBhcyAiaGFuZGxpbmciIHRoZSBl
cnJvcgorICAgICAgICAgICAgdmFyIGRvTm90Q291bnQgPSBbIkZ1bmN0aW9uRGVjbGFyYXRpb24i
LCAiRnVuY3Rpb25FeHByZXNzaW9uIiwgIkNhdGNoQ2xhdXNlIl07CisKKyAgICAgICAgICAgIC8v
IG1ha2Ugc3VyZSB0aGlzIGlkZW50aWZpZXIgaXNuJ3QgdXNlZCBhcyBwYXJ0IG9mIG9uZSBvZiB0
aGVtCisgICAgICAgICAgICB2YXIgaXNIYW5kbGVkID0gZG9Ob3RDb3VudC5pbmRleE9mKG5vZGUu
cGFyZW50LnR5cGUpID09PSAtMTsKKworICAgICAgICAgICAgaWYgKGlzQWJvdXRFcnJvciAmJiBp
c0hhbmRsZWQpIHsKKyAgICAgICAgICAgICAgICAvLyByZWNvcmQgdGhhdCB0aGlzIGNhbGxiYWNr
IGhhbmRsZWQgaXRzIGVycm9yCisgICAgICAgICAgICAgICAgY2FsbGJhY2suaGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAg
ICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IHN0YXJ0RnVuY3Rpb24sCisgICAgICAgICJGdW5j
dGlvbkV4cHJlc3Npb24iOiBzdGFydEZ1bmN0aW9uLAorICAgICAgICAiSWRlbnRpZmllciI6IGNo
ZWNrRm9yRXJyb3IsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4aXQiOiBlbmRGdW5j
dGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpleGl0IjogZW5kRnVuY3Rpb24KKyAg
ICB9OworCit9OworCit9LHt9XSwzMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIHNldCB0aGUgbWF4aW11bSBkZXB0aCBi
bG9jayBjYW4gYmUgbmVzdGVkIGluIGEgZnVuY3Rpb24uCisgKiBAYXV0aG9yIElhbiBDaHJpc3Rp
YW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmFyIGZ1
bmN0aW9uU3RhY2sgPSBbXSwKKyAgICAgICAgbWF4RGVwdGggPSBjb250ZXh0Lm9wdGlvbnNbMF0g
fHwgNDsKKworICAgIGZ1bmN0aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9u
U3RhY2sucHVzaCgwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBlbmRGdW5jdGlvbigpIHsKKyAg
ICAgICAgZnVuY3Rpb25TdGFjay5wb3AoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwdXNoQmxv
Y2sobm9kZSkgeworICAgICAgICB2YXIgbGVuID0gKytmdW5jdGlvblN0YWNrW2Z1bmN0aW9uU3Rh
Y2subGVuZ3RoIC0gMV07CisKKyAgICAgICAgaWYgKGxlbiA+IG1heERlcHRoKSB7CisgICAgICAg
ICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQmxvY2tzIGFyZSBuZXN0ZWQgdG9vIGRlZXBseSAo
e3tkZXB0aH19KS4iLAorICAgICAgICAgICAgICAgICAgICB7IGRlcHRoOiBsZW4gfSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBwb3BCbG9jaygpIHsKKyAgICAgICAgZnVuY3Rp
b25TdGFja1tmdW5jdGlvblN0YWNrLmxlbmd0aCAtIDFdLS07CisgICAgfQorCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKyAgICByZXR1cm4geworICAgICAgICAiUHJvZ3JhbSI6IHN0YXJ0RnVuY3Rpb24sCisgICAg
ICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0
aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCisKKyAgICAgICAgIklmU3RhdGVtZW50Ijog
cHVzaEJsb2NrLAorICAgICAgICAiU3dpdGNoU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAg
ICAiVHJ5U3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6
IHB1c2hCbG9jaywKKyAgICAgICAgIldoaWxlU3RhdGVtZW50IjogcHVzaEJsb2NrLAorICAgICAg
ICAiV2l0aFN0YXRlbWVudCI6IHB1c2hCbG9jaywKKyAgICAgICAgIkZvclN0YXRlbWVudCI6IHB1
c2hCbG9jaywKKyAgICAgICAgIkZvckluU3RhdGVtZW50IjogcHVzaEJsb2NrLAorCisgICAgICAg
ICJJZlN0YXRlbWVudDpleGl0IjogcG9wQmxvY2ssCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQ6
ZXhpdCI6IHBvcEJsb2NrLAorICAgICAgICAiVHJ5U3RhdGVtZW50OmV4aXQiOiBwb3BCbG9jaywK
KyAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAorICAgICAgICAiV2hp
bGVTdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAorICAgICAgICAiV2l0aFN0YXRlbWVudDpleGl0
IjogcG9wQmxvY2ssCisgICAgICAgICJGb3JTdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAorICAg
ICAgICAiRm9ySW5TdGF0ZW1lbnQ6ZXhpdCI6IHBvcEJsb2NrLAorCisgICAgICAgICJGdW5jdGlv
bkRlY2xhcmF0aW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVz
c2lvbjpleGl0IjogZW5kRnVuY3Rpb24sCisgICAgICAgICJQcm9ncmFtOmV4aXQiOiBlbmRGdW5j
dGlvbgorICAgIH07CisKK307CisKK30se31dLDMxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIGZvciBtYXggbGVu
Z3RoIG9uIGEgbGluZS4KKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1
dmFsbC5jb20+CisgKiBAY29weXJpZ2h0IDIwMTMgTWF0dCBEdVZhbGwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKi8KKworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBz
dHJpbmcgdGhhdCBpcyBtYWRlIHVwIG9mIHJlcGVhdGluZyBhIGdpdmVuIHN0cmluZyBhIGNlcnRh
aW4KKyAgICAgKiBudW1iZXIgb2YgdGltZXMuIFRoaXMgdXNlcyBleHBvbmVudGlhdGlvbiBvZiBz
cXVhcmVzIHRvIGFjaGlldmUgc2lnbmlmaWNhbnQKKyAgICAgKiBwZXJmb3JtYW5jZSBnYWlucyBv
dmVyIHRoZSBtb3JlIHRyYWRpdGlvbmFsIGltcGxlbWVudGF0aW9uIG9mIHN1Y2gKKyAgICAgKiBm
dW5jdGlvbmFsaXR5LgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIHN0cmluZyB0byBy
ZXBlYXQuCisgICAgICogQHBhcmFtIHtpbnR9IG51bSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJl
cGVhdCB0aGUgc3RyaW5nLgorICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjcmVhdGVkIHN0
cmluZy4KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHN0cmluZ1JlcGVh
dChzdHIsIG51bSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CisgICAgICAgIGZvciAobnVt
IHw9IDA7IG51bSA+IDA7IG51bSA+Pj49IDEsIHN0ciArPSBzdHIpIHsKKyAgICAgICAgICAgIGlm
IChudW0gJiAxKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0cjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZhciB0
YWJXaWR0aCA9IGNvbnRleHQub3B0aW9uc1sxXTsKKworICAgIHZhciBtYXhMZW5ndGggPSBjb250
ZXh0Lm9wdGlvbnNbMF0sCisgICAgICAgIHRhYlN0cmluZyA9IHN0cmluZ1JlcGVhdCgiICIsIHRh
YldpZHRoKTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGZ1bmN0aW9uIGNoZWNrUHJvZ3JhbUZvck1heExlbmd0
aChub2RlKSB7CisgICAgICAgIHZhciBsaW5lcyA9IGNvbnRleHQuZ2V0U291cmNlTGluZXMoKTsK
KworICAgICAgICAvLyBSZXBsYWNlIHRoZSB0YWJzCisgICAgICAgIC8vIFNwbGl0IChob25vcnMg
bGluZS1lbmRpbmcpCisgICAgICAgIC8vIEl0ZXJhdGUKKyAgICAgICAgbGluZXMuZm9yRWFjaChm
dW5jdGlvbihsaW5lLCBpKXsKKyAgICAgICAgICAgIGlmIChsaW5lLnJlcGxhY2UoL1x0L2csIHRh
YlN0cmluZykubGVuZ3RoID4gbWF4TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgeyBsaW5lOiBpICsgMSwgY29sOiAxIH0sICJMaW5lICIgKyAoaSArIDEpICsg
IiBleGNlZWRzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIG9mICIgKyBtYXhMZW5ndGggKyAiLiIp
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgIlByb2dyYW0iOiBjaGVja1Byb2dyYW1Gb3JNYXhMZW5ndGgK
KyAgICB9OworCit9OworCit9LHt9XSwzMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIGEgbWF4aW11bSBudW1i
ZXIgb2YgbmVzdGVkIGNhbGxiYWNrcy4KKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwor
ICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IENvbnN0YW50cworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZhciBUSFJFU0hPTEQg
PSBjb250ZXh0Lm9wdGlvbnNbMF07CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8g
UHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHZhciBjYWxsYmFja1N0
YWNrID0gW107CisKKyAgICByZXR1cm4geworCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24i
OiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNvbnRleHQuZ2V0
QW5jZXN0b3JzKCkucG9wKCk7CisKKyAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gIkNh
bGxFeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrU3RhY2sucHVzaChub2Rl
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNhbGxiYWNrU3RhY2subGVuZ3Ro
ID4gVEhSRVNIT0xEKSB7CisgICAgICAgICAgICAgICAgdmFyIG9wdHMgPSB7bnVtOiBjYWxsYmFj
a1N0YWNrLmxlbmd0aCwgbWF4OiBUSFJFU0hPTER9OworICAgICAgICAgICAgICAgIGNvbnRleHQu
cmVwb3J0KG5vZGUsICJUb28gbWFueSBuZXN0ZWQgY2FsbGJhY2tzICh7e251bX19KS4gTWF4aW11
bSBhbGxvd2VkIGlzIHt7bWF4fX0uIiwgb3B0cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrU3RhY2sucG9wKCk7CisgICAgICAgIH0KKworICAgIH07CisKK307
CisKK30se31dLDMzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiBhIGZ1bmN0aW9uIGhhcyB0b28gbWFueSBw
YXJhbWV0ZXJzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgdmFyIG51bVBhcmFtcyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCAzOworCisgICAg
cmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgIGlmIChub2RlLnBhcmFtcy5sZW5ndGggPiBudW1QYXJhbXMpIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhpcyBmdW5jdGlvbiBoYXMgdG9v
IG1hbnkgcGFyYW1ldGVycyAoe3tjb3VudH19KS4gTWF4aW11bSBhbGxvd2VkIGlzIHt7bWF4fX0u
IiwgeworICAgICAgICAgICAgICAgICAgICBjb3VudDogbm9kZS5wYXJhbXMubGVuZ3RoLAorICAg
ICAgICAgICAgICAgICAgICBtYXg6IG51bVBhcmFtcworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5wYXJhbXMubGVuZ3RoID4gbnVt
UGFyYW1zKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoaXMgZnVu
Y3Rpb24gaGFzIHRvbyBtYW55IHBhcmFtZXRlcnMgKHt7Y291bnR9fSkuIE1heGltdW0gYWxsb3dl
ZCBpcyB7e21heH19LiIsIHsKKyAgICAgICAgICAgICAgICAgICAgY291bnQ6IG5vZGUucGFyYW1z
Lmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgbWF4OiBudW1QYXJhbXMKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31d
LDM0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBBIHJ1bGUgdG8gc2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGF0ZW1lbnRzIGluIGEg
ZnVuY3Rpb24uCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ug
c3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmFyIGZ1bmN0aW9uU3RhY2sgPSBbXSwKKyAgICAg
ICAgbWF4U3RhdGVtZW50cyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCAxMDsKKworICAgIGZ1bmN0
aW9uIHN0YXJ0RnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uU3RhY2sucHVzaCgwKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBlbmRGdW5jdGlvbihub2RlKSB7CisgICAgICAgIHZhciBjb3Vu
dCA9IGZ1bmN0aW9uU3RhY2sucG9wKCk7CisKKyAgICAgICAgaWYgKGNvdW50ID4gbWF4U3RhdGVt
ZW50cykgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlRoaXMgZnVuY3Rpb24g
aGFzIHRvbyBtYW55IHN0YXRlbWVudHMgKHt7Y291bnR9fSkuIE1heGltdW0gYWxsb3dlZCBpcyB7
e21heH19LiIsCisgICAgICAgICAgICAgICAgICAgIHsgY291bnQ6IGNvdW50LCBtYXg6IG1heFN0
YXRlbWVudHMgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb3VudFN0YXRl
bWVudHMobm9kZSkgeworICAgICAgICBmdW5jdGlvblN0YWNrW2Z1bmN0aW9uU3RhY2subGVuZ3Ro
IC0gMV0gKz0gbm9kZS5ib2R5Lmxlbmd0aDsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJl
dHVybiB7CisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogc3RhcnRGdW5jdGlvbiwKKyAg
ICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbiI6IHN0YXJ0RnVuY3Rpb24sCisKKyAgICAgICAgIkJs
b2NrU3RhdGVtZW50IjogY291bnRTdGF0ZW1lbnRzLAorCisgICAgICAgICJGdW5jdGlvbkRlY2xh
cmF0aW9uOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRXhwcmVzc2lvbjpl
eGl0IjogZW5kRnVuY3Rpb24KKyAgICB9OworCit9OworCit9LHt9XSwzNTpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHVzZSBvZiBjb25zdHJ1Y3RvcnMgd2l0aG91dCBjYXBpdGFsIGxldHRlcnMKKyAqIEBhdXRob3Ig
TmljaG9sYXMgQy4gWmFrYXMKKyAqIEBjb3B5cmlnaHQgMjAxMy0yMDE0IE5pY2hvbGFzIEMuIFph
a2FzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyJ1c2Ugc3RyaWN0IjsKKwordmFyIENB
UFNfQUxMT1dFRCA9IFsKKyAgICAiTnVtYmVyIiwKKyAgICAiU3RyaW5nIiwKKyAgICAiQm9vbGVh
biIsCisgICAgIkRhdGUiLAorICAgICJBcnJheSIsCisgICAgIlN5bWJvbCIsCisgICAgIlJlZ0V4
cCIKK107CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgdmFyIGNvbmZpZyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTsKKyAgICBj
b25maWcubmV3SXNDYXAgPSBjb25maWcubmV3SXNDYXAgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVl
OworICAgIGNvbmZpZy5jYXBJc05ldyA9IGNvbmZpZy5jYXBJc05ldyA9PT0gZmFsc2UgPyBmYWxz
ZSA6IHRydWU7CisKKyAgICB2YXIgbGlzdGVuZXJzID0ge307CisKKyAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8q
KgorICAgICAqIEdldCBleGFjdCBjYWxsZWUgbmFtZSBmcm9tIGV4cHJlc3Npb24KKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IG5vZGUgQ2FsbEV4cHJlc3Npb24gb3IgTmV3RXhwcmVzc2lvbiBub2Rl
CisgICAgICogQHJldHVybnMge1N0cmluZ30gbmFtZQorICAgICAqLworICAgIGZ1bmN0aW9uIGV4
dHJhY3ROYW1lRnJvbUV4cHJlc3Npb24obm9kZSkgeworCisgICAgICAgIHZhciBuYW1lID0gIiIs
CisgICAgICAgICAgICBwcm9wZXJ0eTsKKworICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSA9
PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICBwcm9wZXJ0eSA9IG5vZGUuY2Fs
bGVlLnByb3BlcnR5OworCisgICAgICAgICAgICBpZiAocHJvcGVydHkudHlwZSA9PT0gIkxpdGVy
YWwiICYmICh0eXBlb2YgcHJvcGVydHkudmFsdWUgPT09ICJzdHJpbmciKSkgeworICAgICAgICAg
ICAgICAgIG5hbWUgPSBwcm9wZXJ0eS52YWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJv
cGVydHkudHlwZSA9PT0gIklkZW50aWZpZXIiICYmICFub2RlLmNhbGxlZS5jb21wdXRlZCkgewor
ICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eS5uYW1lOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmFtZSA9IG5vZGUuY2FsbGVlLm5hbWU7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgY2FwaXRhbGl6YXRpb24gc3RhdGUgb2YgdGhlIHN0cmluZyAtCisgICAgICogV2hl
dGhlciB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIHVwcGVyY2FzZSwgbG93ZXJjYXNlLCBvciBub24t
YWxwaGFiZXRpYworICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgU3RyaW5nCisgICAgICogQHJl
dHVybnMge1N0cmluZ30gY2FwaXRhbGl6YXRpb24gc3RhdGU6ICJub24tYWxwaGEiLCAibG93ZXIi
LCBvciAidXBwZXIiCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0Q2FwKHN0cikgeworICAgICAg
ICB2YXIgZmlyc3RDaGFyID0gc3RyLmNoYXJBdCgwKTsKKworICAgICAgICB2YXIgZmlyc3RDaGFy
TG93ZXIgPSBmaXJzdENoYXIudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgdmFyIGZpcnN0Q2hhclVw
cGVyID0gZmlyc3RDaGFyLnRvVXBwZXJDYXNlKCk7CisKKyAgICAgICAgaWYgKGZpcnN0Q2hhckxv
d2VyID09PSBmaXJzdENoYXJVcHBlcikgeworICAgICAgICAgICAgLy8gY2hhciBoYXMgbm8gdXBw
ZXJjYXNlIHZhcmlhbnQsIHNvIGl0J3Mgbm9uLWFscGhhYmV0aWMKKyAgICAgICAgICAgIHJldHVy
biAibm9uLWFscGhhIjsKKyAgICAgICAgfSBlbHNlIGlmIChmaXJzdENoYXIgPT09IGZpcnN0Q2hh
ckxvd2VyKSB7CisgICAgICAgICAgICByZXR1cm4gImxvd2VyIjsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHJldHVybiAidXBwZXIiOworICAgICAgICB9CisgICAgfQorCisgICAgLyoq
CisgICAgICogQ2hlY2sgaWYgY2FwaXRhbGl6YXRpb24gaXMgYWxsb3dlZCBmb3IgYSBDYWxsRXhw
cmVzc2lvbgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBDYWxsRXhwcmVzc2lvbiBub2Rl
CisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNhbGxlZU5hbWUgQ2FwaXRhbGl6ZWQgY2FsbGVlIG5h
bWUgZnJvbSBhIENhbGxFeHByZXNzaW9uCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IFJldHVy
bnMgdHJ1ZSBpZiB0aGUgY2FsbGVlIG1heSBiZSBjYXBpdGFsaXplZAorICAgICAqLworICAgIGZ1
bmN0aW9uIGlzQ2FwQWxsb3dlZChub2RlLCBjYWxsZWVOYW1lKSB7CisgICAgICAgIGlmIChDQVBT
X0FMTE9XRUQuaW5kZXhPZihjYWxsZWVOYW1lKSA+PSAwKSB7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2FsbGVlTmFtZSA9PT0gIlVUQyIgJiYgbm9k
ZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAvLyBh
bGxvdyBpZiBjYWxsZWUgaXMgRGF0ZS5VVEMKKyAgICAgICAgICAgIHJldHVybiBub2RlLmNhbGxl
ZS5vYmplY3QudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCisgICAgICAgICAgICAgICAgICAgbm9k
ZS5jYWxsZWUub2JqZWN0Lm5hbWUgPT09ICJEYXRlIjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1Ymxp
YworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGlmIChjb25maWcubmV3SXNDYXApIHsK
KyAgICAgICAgbGlzdGVuZXJzLk5ld0V4cHJlc3Npb24gPSBmdW5jdGlvbihub2RlKSB7CisKKyAg
ICAgICAgICAgIHZhciBjb25zdHJ1Y3Rvck5hbWUgPSBleHRyYWN0TmFtZUZyb21FeHByZXNzaW9u
KG5vZGUpOworICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yTmFtZSAmJiBnZXRDYXAoY29uc3Ry
dWN0b3JOYW1lKSA9PT0gImxvd2VyIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJBIGNvbnN0cnVjdG9yIG5hbWUgc2hvdWxkIG5vdCBzdGFydCB3aXRoIGEgbG93ZXJj
YXNlIGxldHRlci4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBp
ZiAoY29uZmlnLmNhcElzTmV3KSB7CisgICAgICAgIGxpc3RlbmVycy5DYWxsRXhwcmVzc2lvbiA9
IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIGNhbGxlZU5hbWUgPSBleHRyYWN0
TmFtZUZyb21FeHByZXNzaW9uKG5vZGUpOworICAgICAgICAgICAgaWYgKGNhbGxlZU5hbWUgJiYg
Z2V0Q2FwKGNhbGxlZU5hbWUpID09PSAidXBwZXIiICYmICFpc0NhcEFsbG93ZWQobm9kZSwgY2Fs
bGVlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQSBmdW5j
dGlvbiB3aXRoIGEgbmFtZSBzdGFydGluZyB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIgc2hvdWxk
IG9ubHkgYmUgdXNlZCBhcyBhIGNvbnN0cnVjdG9yLiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9OworICAgIH0KKworICAgIHJldHVybiBsaXN0ZW5lcnM7Cit9OworCit9LHt9XSwzNjpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIHdoZW4gdXNpbmcgY29uc3RydWN0b3Igd2l0aG91dCBwYXJlbnRoZXNlcworICog
QGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
UnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVy
biB7CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSk7CisgICAgICAgICAgICB2
YXIgcHJlbnRpY2VzVG9rZW5zID0gdG9rZW5zLmZpbHRlcihmdW5jdGlvbih0b2tlbikgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0b2tlbi52YWx1ZSA9PT0gIigiIHx8IHRva2VuLnZhbHVlID09
PSAiKSI7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChwcmVudGljZXNUb2tlbnMu
bGVuZ3RoIDwgMikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNz
aW5nICcoKScgaW52b2tpbmcgYSBjb25zdHJ1Y3RvciIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMzc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4
cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYWxlcnQs
IGNvbmZpcm0sIHByb21wdAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNl
IHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIZWxwZXJzCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBtYXRjaFByb2hpYml0ZWQobmFtZSkgeworICAg
IHJldHVybiBuYW1lLm1hdGNoKC9eKGFsZXJ0fGNvbmZpcm18cHJvbXB0KSQvKTsKK30KKworZnVu
Y3Rpb24gcmVwb3J0KGNvbnRleHQsIG5vZGUsIHJlc3VsdCkgeworICAgIGNvbnRleHQucmVwb3J0
KG5vZGUsICJVbmV4cGVjdGVkIHt7bmFtZX19LiIsIHsgbmFtZTogcmVzdWx0WzFdIH0pOworfQor
CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgewor
CisgICAgcmV0dXJuIHsKKworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2Rl
KSB7CisKKyAgICAgICAgICAgIHZhciByZXN1bHQ7CisKKyAgICAgICAgICAgIC8vIHdpdGhvdXQg
d2luZG93LgorICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVy
IikgeworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hQcm9oaWJpdGVkKG5vZGUuY2Fs
bGVlLm5hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAg
ICAgICAgICByZXBvcnQoY29udGV4dCwgbm9kZSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5jYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4
cHJlc3Npb24iICYmIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09ICJJZGVudGlmaWVyIikg
eworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF0Y2hQcm9oaWJpdGVkKG5vZGUuY2FsbGVl
LnByb3BlcnR5Lm5hbWUpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBub2RlLmNh
bGxlZS5vYmplY3QubmFtZSA9PT0gIndpbmRvdyIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVw
b3J0KGNvbnRleHQsIG5vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDM4OltmdW5jdGlvbihy
ZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBj
b25zdHJ1Y3Rpb24gb2YgZGVuc2UgYXJyYXlzIHVzaW5nIHRoZSBBcnJheSBjb25zdHJ1Y3Rvcgor
ICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbS8+CisgKi8K
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAgICAg
IGlmICgKKyAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPT0gMSAmJgorICAgICAg
ICAgICAgbm9kZS5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCisgICAgICAgICAgICBu
b2RlLmNhbGxlZS5uYW1lID09PSAiQXJyYXkiCisgICAgICAgICkgeworICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIlRoZSBhcnJheSBsaXRlcmFsIG5vdGF0aW9uIFtdIGlzIHByZWZl
cnJhYmxlLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNh
bGxFeHByZXNzaW9uIjogY2hlY2ssCisgICAgICAgICJOZXdFeHByZXNzaW9uIjogY2hlY2sKKyAg
ICB9OworCit9OworCit9LHt9XSwzOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGJpdHdpc2UgaWRlbnRpZmllcnMK
KyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIGZ1bmN0aW9uIHJlcG9ydChub2RlKSB7CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUs
ICJVbmV4cGVjdGVkIHVzZSBvZiAne3tvcGVyYXRvcn19Jy4iLCB7IG9wZXJhdG9yOiBub2RlLm9w
ZXJhdG9yIH0pOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJCaW5hcnlFeHByZXNz
aW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICAvLyB3YXJuIGZvciBeIHwgJiB+
IDw8ID4+ID4+PgorICAgICAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IubWF0Y2goL14oPzpbXF4m
XHx+XXw8PHw+Pj4/KSQvKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICB9LAorCisgICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBmdW5j
dGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIC8vIHdhcm4gZm9yIH4KKyAgICAgICAgICAgIGlm
IChub2RlLm9wZXJhdG9yID09PSAifiIpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDQwOltm
dW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBS
dWxlIHRvIGZsYWcgdXNlIG9mIGFyZ3VtZW50cy5jYWxsZWUgYW5kIGFyZ3VtZW50cy5jYWxsZXIu
CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICByZXR1cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgdmFyIG9iamVjdE5hbWUgPSBub2RlLm9iamVjdC5uYW1lLAorICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IG5vZGUucHJvcGVydHkubmFtZTsKKworICAgICAg
ICAgICAgaWYgKG9iamVjdE5hbWUgPT09ICJhcmd1bWVudHMiICYmICFub2RlLmNvbXB1dGVkICYm
IHByb3BlcnR5TmFtZSAmJiBwcm9wZXJ0eU5hbWUubWF0Y2goL15jYWxsZVtlcl0kLykpIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQXZvaWQgYXJndW1lbnRzLnt7cHJv
cGVydHl9fS4iLCB7IHByb3BlcnR5OiBwcm9wZXJ0eU5hbWUgfSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDQxOltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdmFyaWFi
bGUgbGVhayBpbiBDYXRjaENsYXVzZXMgaW4gSUUgOCBhbmQgZWFybGllcgorICogQGF1dGhvciBJ
YW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIGZ1bmN0aW9uIHBhcmFtSXNTaGFkb3dpbmcoc2NvcGUsIG5hbWUpIHsKKyAgICAgICAgdmFy
IGZvdW5kID0gc2NvcGUudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24odmFyaWFibGUpIHsKKyAgICAg
ICAgICAgIHJldHVybiB2YXJpYWJsZS5uYW1lID09PSBuYW1lOworICAgICAgICB9KTsKKworICAg
ICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHNjb3BlLnVwcGVyKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyYW1Jc1No
YWRvd2luZyhzY29wZS51cHBlciwgbmFtZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBB
UEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJD
YXRjaENsYXVzZSI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBzY29wZSA9IGNv
bnRleHQuZ2V0U2NvcGUoKTsKKworICAgICAgICAgICAgaWYgKHBhcmFtSXNTaGFkb3dpbmcoc2Nv
cGUsIG5vZGUucGFyYW0ubmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiVmFsdWUgb2YgJ3t7bmFtZX19JyBtYXkgYmUgb3ZlcndyaXR0ZW4gaW4gSUUgOCBhbmQg
ZWFybGllci4iLAorICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBub2RlLnBhcmFtLm5h
bWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw0
MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIHRyYWlsaW5nIGNvbW1hcyBpbiBvYmplY3QgbGl0ZXJhbHMuCisgKiBA
YXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgLy8gSGVscGVycworICAgICAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgIGZ1bmN0aW9uIGNoZWNrRm9yVHJhaWxpbmdDb21tYShub2RlKSB7CisgICAg
ICAgIHZhciBzZWNvbmRUb0xhc3RUb2tlbiA9IGNvbnRleHQuZ2V0TGFzdFRva2Vucyhub2RlLCAy
KVswXTsKKworICAgICAgICB2YXIgaXRlbXMgPSBub2RlLnByb3BlcnRpZXMgfHwgbm9kZS5lbGVt
ZW50cywKKyAgICAgICAgICAgIGxhc3RJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV07Cisg
ICAgICAgIC8vIFRoZSBsYXN0IHRva2VuIGluIGFuIG9iamVjdC9hcnJheSBsaXRlcmFsIHdpbGwg
YWx3YXlzIGJlIGEgY2xvc2luZworICAgICAgICAvLyBjdXJseSwgc28gd2UgY2hlY2sgdGhlIHNl
Y29uZCB0byBsYXN0IHRva2VuIGZvciBhIGNvbW1hLgorICAgICAgICBpZiAoc2Vjb25kVG9MYXN0
VG9rZW4udmFsdWUgPT09ICIsIiAmJiBpdGVtcy5sZW5ndGggJiYgbGFzdEl0ZW0pIHsKKyAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KGxhc3RJdGVtLCBzZWNvbmRUb0xhc3RUb2tlbi5sb2Muc3Rh
cnQsICJUcmFpbGluZyBjb21tYS4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgIk9iamVjdEV4cHJlc3Npb24iOiBjaGVja0ZvclRyYWls
aW5nQ29tbWEsCisgICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBjaGVja0ZvclRyYWlsaW5nQ29t
bWEKKyAgICB9OworCit9OworCit9LHt9XSw0MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGFzc2lnbm1lbnQgaW4g
YSBjb25kaXRpb25hbCBleHByZXNzaW9uCisgKiBAYXV0aG9yIFN0ZXBoZW4gTXVycmF5IDxzcG11
cnJheXp6ej4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVzaXNl
ZChub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tlbkJl
Zm9yZShub2RlKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5BZnRl
cihub2RlKTsKKworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYm
IHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSAmJgorICAgICAgICAgICAg
bmV4dFRva2VuLnZhbHVlID09PSAiKSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFu
Z2VbMV07CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZSkg
eworICAgICAgICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9k
ZSwgMSksCisgICAgICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9k
ZSwgMSk7CisKKyAgICAgICAgcmV0dXJuIGlzUGFyZW50aGVzaXNlZChub2RlKSAmJgorICAgICAg
ICAgICAgcHJldmlvdXNUb2tlbi52YWx1ZSA9PT0gIigiICYmIHByZXZpb3VzVG9rZW4ucmFuZ2Vb
MV0gPD0gbm9kZS5yYW5nZVswXSAmJgorICAgICAgICAgICAgbmV4dFRva2VuLnZhbHVlID09PSAi
KSIgJiYgbmV4dFRva2VuLnJhbmdlWzBdID49IG5vZGUucmFuZ2VbMV07CisgICAgfQorCisgICAg
ZnVuY3Rpb24gdGVzdEZvckFzc2lnbihub2RlKSB7CisgICAgICAgIGlmIChub2RlLnRlc3QgJiYg
KG5vZGUudGVzdC50eXBlID09PSAiQXNzaWdubWVudEV4cHJlc3Npb24iKSAmJiAhaXNQYXJlbnRo
ZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIkV4cGVjdGVkIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhbmQgaW5zdGVhZCBzYXcgYW4g
YXNzaWdubWVudC4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAg
ICJJZlN0YXRlbWVudCI6IHRlc3RGb3JBc3NpZ24sCisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6
IHRlc3RGb3JBc3NpZ24sCisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogdGVzdEZvckFzc2ln
biwKKyAgICAgICAgIkZvclN0YXRlbWVudCI6IHRlc3RGb3JBc3NpZ24KKyAgICB9OworCit9Owor
Cit9LHt9XSw0NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBjb25zb2xlIG9iamVjdAorICogQGF1dGhv
ciBOaWNob2xhcyBDLiBaYWthcworICovCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1
cm4geworCisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisg
ICAgICAgICAgICBpZiAobm9kZS5vYmplY3QubmFtZSA9PT0gImNvbnNvbGUiKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgY29uc29sZSBzdGF0ZW1l
bnQuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31d
LDQ1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBSdWxlIHRvIGZsYWcgdXNlIGNvbnN0YW50IGNvbmRpdGlvbnMKKyAqIEBhdXRob3IgQ2hy
aXN0aWFuIFNjaHVseiA8aHR0cDovL3JuZG0uZGU+CisgKi8KKworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGEgbm9kZSBoYXMgYSBjb25z
dGFudCB0cnV0aGluZXNzIHZhbHVlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUg
QVNUIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge0Jvb2x9IHRydWUgd2hlbiBub2Rl
J3MgdHJ1dGhpbmVzcyBpcyBjb25zdGFudAorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAg
ZnVuY3Rpb24gaXNDb25zdGFudChub2RlKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7
CisgICAgICAgIGNhc2UgIkxpdGVyYWwiOgorICAgICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Np
b24iOgorICAgICAgICBjYXNlICJPYmplY3RFeHByZXNzaW9uIjoKKyAgICAgICAgY2FzZSAiQXJy
YXlFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlICJV
bmFyeUV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQobm9kZS5hcmd1
bWVudCk7CisgICAgICAgIGNhc2UgIkJpbmFyeUV4cHJlc3Npb24iOgorICAgICAgICBjYXNlICJM
b2dpY2FsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXR1cm4gaXNDb25zdGFudChub2RlLmxl
ZnQpICYmIGlzQ29uc3RhbnQobm9kZS5yaWdodCk7CisgICAgICAgIGNhc2UgIkFzc2lnbm1lbnRF
eHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJldHVybiBpc0NvbnN0YW50KG5vZGUucmlnaHQpOwor
ICAgICAgICBjYXNlICJTZXF1ZW5jZUV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQobm9kZS5leHByZXNzaW9uc1tub2RlLmV4cHJlc3Npb25zLmxlbmd0aCAtIDFdKTsK
KyAgICAgICAgLy8gbm8gZGVmYXVsdAorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXBvcnRzIHdoZW4gdGhlIGdpdmVuIG5vZGUgY29u
dGFpbnMgYSBjb25zdGFudCBjb25kaXRpb24uCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2Rl
IFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKiBA
cHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrQ29uc3RhbnRDb25kaXRpb24obm9k
ZSkgeworICAgICAgICBpZiAobm9kZS50ZXN0ICYmIGlzQ29uc3RhbnQobm9kZS50ZXN0KSkgewor
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgY29uc3RhbnQgY29u
ZGl0aW9uLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7Cisg
ICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24iOiBjaGVja0NvbnN0YW50Q29uZGl0aW9uLAor
ICAgICAgICAiSWZTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9uLAorICAgICAgICAi
V2hpbGVTdGF0ZW1lbnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9uLAorICAgICAgICAiRG9XaGls
ZVN0YXRlbWVudCI6IGNoZWNrQ29uc3RhbnRDb25kaXRpb24sCisgICAgICAgICJGb3JTdGF0ZW1l
bnQiOiBjaGVja0NvbnN0YW50Q29uZGl0aW9uCisgICAgfTsKKworfTsKKworfSx7fV0sNDY6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZm9yYmlkIGNvbnRyb2wgY2hhcmFjdGVzIGZyb20gcmVndWxhciBleHByZXNzaW9ucy4K
KyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1
bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKwor
CisgICAgZnVuY3Rpb24gZ2V0UmVnRXhwKG5vZGUpIHsKKworICAgICAgICBpZiAobm9kZS52YWx1
ZSBpbnN0YW5jZW9mIFJlZ0V4cCkgeworICAgICAgICAgICAgcmV0dXJuIG5vZGUudmFsdWU7Cisg
ICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09ICJzdHJpbmciKSB7CisKKyAg
ICAgICAgICAgIHZhciBwYXJlbnQgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLnBvcCgpOworICAg
ICAgICAgICAgaWYgKChwYXJlbnQudHlwZSA9PT0gIk5ld0V4cHJlc3Npb24iIHx8IHBhcmVudC50
eXBlID09PSAiQ2FsbEV4cHJlc3Npb24iKSAmJgorICAgICAgICAgICAgcGFyZW50LmNhbGxlZS50
eXBlID09PSAiSWRlbnRpZmllciIgJiYgcGFyZW50LmNhbGxlZS5uYW1lID09PSAiUmVnRXhwIikg
eworCisgICAgICAgICAgICAgICAgLy8gdGhlcmUgY291bGQgYmUgYW4gaW52YWxpZCByZWd1bGFy
IGV4cHJlc3Npb24gc3RyaW5nCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ldyBSZWdFeHAobm9kZS52YWx1ZSk7CisgICAgICAgICAgICAgICAgfSBj
YXRjaCAoZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgfQorCisKKworICAgIHJldHVybiB7CisKKyAg
ICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIHZhciBjb21w
dXRlZFZhbHVlLAorICAgICAgICAgICAgICAgIHJlZ2V4ID0gZ2V0UmVnRXhwKG5vZGUpOworCisg
ICAgICAgICAgICBpZiAocmVnZXgpIHsKKyAgICAgICAgICAgICAgICBjb21wdXRlZFZhbHVlID0g
cmVnZXgudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoL1tceDAwLVx4MWZdLy50ZXN0
KGNvbXB1dGVkVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVyIGluIHJlZ3VsYXIgZXhwcmVzc2lvbi4i
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSw0NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioK
KyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBhIGRlYnVnZ2VyIHN0YXRlbWVu
dAorICogQGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisKKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7
CisKKyAgICByZXR1cm4geworICAgICAgICAiRGVidWdnZXJTdGF0ZW1lbnQiOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCAnZGVi
dWdnZXInIHN0YXRlbWVudC4iKTsKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDQ4
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgd2hlbiBkZWxldGluZyB2YXJpYWJsZXMKKyAqIEBhdXRob3IgSWx5YSBW
b2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJVbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9k
ZS5vcGVyYXRvciA9PT0gImRlbGV0ZSIgJiYgbm9kZS5hcmd1bWVudC50eXBlID09PSAiSWRlbnRp
ZmllciIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVmFyaWFibGVz
IHNob3VsZCBub3QgYmUgZGVsZXRlZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisKK307CisKK30se31dLDQ5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIGZvciBhbWJpZ3VvdXMgZGl2IG9w
ZXJhdG9yIGluIHJlZ2V4ZXMKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0
dGR1dmFsbC5jb20+CisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIHRva2Vu
ID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAxKVswXSwKKyAgICAgICAgICAgICAgICBu
b2RlVHlwZSA9IHRva2VuLnR5cGUsCisgICAgICAgICAgICAgICAgc291cmNlOworCisgICAgICAg
ICAgICBpZiAobm9kZVR5cGUgPT09ICJSZWd1bGFyRXhwcmVzc2lvbiIpIHsKKyAgICAgICAgICAg
ICAgICBzb3VyY2UgPSBjb250ZXh0LmdldEZpcnN0VG9rZW5zKG5vZGUsIDEpWzBdLnZhbHVlOwor
CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVsxXSA9PT0gIj0iKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaXRlcmFs
IGNhbiBiZSBjb25mdXNlZCB3aXRoICcvPScuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTA6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxh
ZyB1c2Ugb2YgZHVwbGljYXRlIGtleXMgaW4gYW4gb2JqZWN0LgorICogQGF1dGhvciBJYW4gQ2hy
aXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVm
aW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5j
dGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisg
ICAgICAgICJPYmplY3RFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAg
ICAvLyBPYmplY3QgdGhhdCB3aWxsIGJlIGEgbWFwIG9mIHByb3BlcnRpZXMtLXNhZmUgYmVjYXVz
ZSB3ZSB3aWxsCisgICAgICAgICAgICAvLyBwcmVmaXggYWxsIG9mIHRoZSBrZXlzLgorICAgICAg
ICAgICAgdmFyIG5vZGVQcm9wcyA9IHt9OworCisgICAgICAgICAgICBub2RlLnByb3BlcnRpZXMu
Zm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIHZhciBrZXlOYW1l
ID0gcHJvcGVydHkua2V5Lm5hbWUgfHwgcHJvcGVydHkua2V5LnZhbHVlOworICAgICAgICAgICAg
ICAgIHZhciBrZXkgPSBwcm9wZXJ0eS5raW5kICsgIi0iICsga2V5TmFtZTsKKworICAgICAgICAg
ICAgICAgIGlmIChub2RlUHJvcHNba2V5XSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChub2RlLCAiRHVwbGljYXRlIGtleSAne3trZXl9fScuIiwgeyBrZXk6IGtleU5hbWUg
fSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZVBy
b3BzW2tleV0gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw1MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIGBlbHNlYCBh
ZnRlciBhIGByZXR1cm5gIGluIGBpZmAKKyAqIEBhdXRob3IgSWFuIENocmlzdGlhbiBNeWVycwor
ICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkg
eworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBmdW5jdGlvbiBjaGVja0Zv
clJldHVyblN0YXRlbWVudChub2RlLCBhbHRlcm5hdGUpIHsKKyAgICAgICAgaWYgKG5vZGUudHlw
ZSA9PT0gIlJldHVyblN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGFs
dGVybmF0ZSwgIlVuZXhwZWN0ZWQgJ2Vsc2UnIGFmdGVyICdyZXR1cm4nLiIpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAgICJJZlN0YXRl
bWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgLy8gRG9uJ3QgYm90aGVyIGZp
bmRpbmcgYSBSZXR1cm5TdGF0ZW1lbnQsIGlmIHRoZXJlJ3Mgbm8gYGVsc2VgCisgICAgICAgICAg
ICAvLyBvciBpZiB0aGUgYWx0ZXJuYXRlIGlzIGFsc28gYW4gaWYgKGluZGljYXRpbmcgYW4gZWxz
ZSBpZikuCisgICAgICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUgJiYgbm9kZS5jb25zZXF1ZW50
ICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09ICJJZlN0YXRlbWVudCIpIHsKKworICAgICAgICAg
ICAgICAgIC8vIElmIHdlIGhhdmUgYSBCbG9ja1N0YXRlbWVudCwgY2hlY2sgZWFjaCBjb25zZXF1
ZW50IGJvZHkgbm9kZS4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jb25zZXF1ZW50LnR5cGUg
PT09ICJCbG9ja1N0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5jb25zZXF1
ZW50LmJvZHkuZm9yRWFjaChmdW5jdGlvbiAoYm9keU5vZGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrRm9yUmV0dXJuU3RhdGVtZW50KGJvZHlOb2RlLCBub2RlLmFsdGVybmF0ZSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy8gSWYgbm90IGEg
YmxvY2sgc3RhdGVtZW50LCBtYWtlIHN1cmUgdGhlIGNvbnNlcXVlbnQgaXNuJ3QgYQorICAgICAg
ICAgICAgICAgIC8vIFJldHVyblN0YXRlbWVudAorICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yUmV0dXJuU3RhdGVtZW50KG5vZGUuY29uc2VxdWVu
dCwgbm9kZS5hbHRlcm5hdGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sNTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB0aGUgdXNl
IG9mIGVtcHR5IGNoYXJhY3RlciBjbGFzc2VzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAqIEBh
dXRob3IgSWFuIENocmlzdGlhbiBNeWVycworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAg
cmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAg
ICAgIHZhciB0b2tlbnMgPSBjb250ZXh0LmdldFRva2Vucyhub2RlKTsKKyAgICAgICAgICAgIHRv
a2Vucy5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikgeworICAgICAgICAgICAgICAgIC8qCisgICAg
ICAgICAgICAgICAgcGxhaW4tRW5nbGlzaCBkZXNjcmlwdGlvbiBvZiB0aGUgZm9sbG93aW5nIHJl
Z2V4cDoKKyAgICAgICAgICAgICAgICAwLiBgXmAgZml4IHRoZSBtYXRjaCBhdCB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAxLiBgXC9gOiB0aGUgYC9gIHRoYXQg
YmVnaW5zIHRoZSByZWdleHAKKyAgICAgICAgICAgICAgICAyLiBgKFteXFxbXXxcXC58XFsoW15c
XFxdXXxcXC4pK1xdKSpgOiByZWdleHAgY29udGVudHM7IDAgb3IgbW9yZSBvZiB0aGUgZm9sbG93
aW5nCisgICAgICAgICAgICAgICAgICAyLjAuIGBbXlxcW11gOiBhbnkgY2hhcmFjdGVyIHRoYXQn
cyBub3QgYSBgXGAgb3IgYSBgW2AgKGFueXRoaW5nIGJ1dCBlc2NhcGUgc2VxdWVuY2VzIGFuZCBj
aGFyYWN0ZXIgY2xhc3NlcykKKyAgICAgICAgICAgICAgICAgIDIuMS4gYFxcLmA6IGFuIGVzY2Fw
ZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAgMi4yLiBgXFsoW15cXFxdXXxcXC4pK1xdYDog
YSBjaGFyYWN0ZXIgY2xhc3MgdGhhdCBpc24ndCBlbXB0eQorICAgICAgICAgICAgICAgIDMuIGBc
L2AgdGhlIGAvYCB0aGF0IGVuZHMgdGhlIHJlZ2V4cAorICAgICAgICAgICAgICAgIDQuIGBbZ2lt
eV0qYDogb3B0aW9uYWwgcmVnZXhwIGZsYWdzCisgICAgICAgICAgICAgICAgNS4gYCRgOiBmaXgg
dGhlIG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgICAgICAgICAgICAgICovCisg
ICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJSZWd1bGFyRXhwcmVzc2lvbiIgJiYK
KyAgICAgICAgICAgICAgICAhL15cLyhbXlxcW118XFwufFxbKFteXFxcXV18XFwuKStcXSkqXC9b
Z2lteV0qJC8udGVzdCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQobm9kZSwgIkVtcHR5IGNsYXNzLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw1MzpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBmbGFnIHdoZW4gbGFiZWwgaXMgbm90IHVzZWQgZm9yIGEgbG9vcCBvciBzd2l0Y2gKKyAqIEBh
dXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4g
eworCisgICAgICAgICJMYWJlbGVkU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAg
ICAgICAgaWYgKG5vZGUuYm9keS50eXBlICE9PSAiRm9yU3RhdGVtZW50IiAmJiBub2RlLmJvZHku
dHlwZSAhPT0gIldoaWxlU3RhdGVtZW50IiAmJiBub2RlLmJvZHkudHlwZSAhPT0gIkRvV2hpbGVT
dGF0ZW1lbnQiICYmIG5vZGUuYm9keS50eXBlICE9PSAiU3dpdGNoU3RhdGVtZW50IiAmJiBub2Rl
LmJvZHkudHlwZSAhPT0gIkZvckluU3RhdGVtZW50IikgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGxhYmVsIHt7bH19Iiwge2w6IG5vZGUubGFiZWwu
bmFtZX0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0s
NTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgYW4gZW1wdHkgYmxvY2sgc3RhdGVtZW50CisgKiBAYXV0
aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJCbG9ja1N0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAorICAgICAgICAgICAgICAg
IHBhcmVudCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV0sCisgICAgICAgICAgICAg
ICAgcGFyZW50VHlwZSA9IHBhcmVudC50eXBlLAorICAgICAgICAgICAgICAgIGlzRmluYWxseUJs
b2NrID0gKHBhcmVudFR5cGUgPT09ICJUcnlTdGF0ZW1lbnQiKSAmJiAocGFyZW50LmZpbmFsaXpl
ciA9PT0gbm9kZSk7CisKKyAgICAgICAgICAgIGlmICgvRnVuY3Rpb25FeHByZXNzaW9ufEZ1bmN0
aW9uRGVjbGFyYXRpb258Q2F0Y2hDbGF1c2UvLnRlc3QocGFyZW50VHlwZSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgKGlzRmluYWxseUJsb2NrICYmICFwYXJlbnQuaGFuZGxlcnMubGVuZ3RoKSkg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKG5vZGUuYm9keS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiRW1wdHkgYmxvY2sgc3RhdGVtZW50LiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9LAorCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisK
KyAgICAgICAgICAgIGlmICh0eXBlb2Ygbm9kZS5jYXNlcyA9PT0gInVuZGVmaW5lZCIgfHwgbm9k
ZS5jYXNlcy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCAiRW1wdHkgc3dpdGNoIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH07CisKK307CisKK30se31dLDU1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBv
cnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgY29tcGFyaXNvbnMgdG8g
bnVsbCB3aXRob3V0IGEgdHlwZS1jaGVja2luZworICogb3BlcmF0b3IuCisgKiBAYXV0aG9yIElh
biBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAg
ICAgdmFyIGJhZE9wZXJhdG9yID0gbm9kZS5vcGVyYXRvciA9PT0gIj09IiB8fCBub2RlLm9wZXJh
dG9yID09PSAiIT0iOworCisgICAgICAgICAgICBpZiAobm9kZS5yaWdodC50eXBlID09PSAiTGl0
ZXJhbCIgJiYgbm9kZS5yaWdodC5yYXcgPT09ICJudWxsIiAmJiBiYWRPcGVyYXRvciB8fAorICAg
ICAgICAgICAgICAgICAgICBub2RlLmxlZnQudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUubGVm
dC5yYXcgPT09ICJudWxsIiAmJiBiYWRPcGVyYXRvcikgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJVc2Ug4oCYPT094oCZIHRvIGNvbXBhcmUgd2l0aCDigJhudWxs4oCZ
LiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNTY6
W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3
IFJ1bGUgdG8gZmxhZyB1c2Ugb2YgZXZhbCgpIHN0YXRlbWVudAorICogQGF1dGhvciBOaWNob2xh
cyBDLiBaYWthcworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgdmFyIElNUExJRURfRVZB
TCA9IC9zZXQoPzpUaW1lb3V0fEludGVydmFsKS87CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgLy8gSGVscGVycworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8qKgorICAg
ICAqIERldGVybWluZXMgaWYgYSBub2RlIHJlcHJlc2VudHMgYSBjYWxsIHRvIHNldFRpbWVvdXQv
c2V0SW50ZXJ2YWwgd2l0aAorICAgICAqIGEgc3RyaW5nIGFyZ3VtZW50LgorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7Ym9v
bGVhbn0gVHJ1ZSBpZiB0aGUgbm9kZSBtYXRjaGVzLCBmYWxzZSBpZiBub3QuCisgICAgICogQHBy
aXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc0ltcGxpZWRFdmFsKG5vZGUpIHsKKworICAg
ICAgICB2YXIgaXNNZW1iZXJFeHByZXNzaW9uID0gKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJNZW1i
ZXJFeHByZXNzaW9uIiksCisgICAgICAgICAgICBpc0lkZW50aWZpZXIgPSAobm9kZS5jYWxsZWUu
dHlwZSA9PT0gIklkZW50aWZpZXIiKSwKKyAgICAgICAgICAgIGlzU2V0TWV0aG9kID0gKGlzSWRl
bnRpZmllciAmJiBJTVBMSUVEX0VWQUwudGVzdChub2RlLmNhbGxlZS5uYW1lKSkgfHwKKyAgICAg
ICAgICAgICAgICAoaXNNZW1iZXJFeHByZXNzaW9uICYmIG5vZGUuY2FsbGVlLm9iamVjdC5uYW1l
ID09PSAid2luZG93IiAmJgorICAgICAgICAgICAgICAgIElNUExJRURfRVZBTC50ZXN0KG5vZGUu
Y2FsbGVlLnByb3BlcnR5Lm5hbWUpKSwKKyAgICAgICAgICAgIGhhc1N0cmluZ0FyZ3VtZW50ID0g
bm9kZS5hcmd1bWVudHMubGVuZ3RoICYmICh0eXBlb2Ygbm9kZS5hcmd1bWVudHNbMF0udmFsdWUg
PT09ICJzdHJpbmciKTsKKworICAgICAgICByZXR1cm4gaXNTZXRNZXRob2QgJiYgaGFzU3RyaW5n
QXJndW1lbnQ7CisgICAgfQorCisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVi
bGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNh
bGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKG5vZGUuY2Fs
bGVlLm5hbWUgPT09ICJldmFsIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsICJldmFsIGNhbiBiZSBoYXJtZnVsLiIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0lt
cGxpZWRFdmFsKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLmxl
bmd0aCAmJiAodHlwZW9mIG5vZGUuYXJndW1lbnRzWzBdLnZhbHVlID09PSAic3RyaW5nIikpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkltcGxpZWQgZXZhbCBj
YW4gYmUgaGFybWZ1bC4gUGFzcyBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBzdHJpbmcuIik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsK
KworfSx7fV0sNTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBA
ZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBhc3NpZ25tZW50IG9mIHRoZSBleGNlcHRpb24gcGFy
YW1ldGVyCisgKiBAYXV0aG9yIFN0ZXBoZW4gTXVycmF5IDxzcG11cnJheXp6ej4KKyAqLworCisv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAg
ICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBpbkNhdGNoID0gZmFsc2UsCisgICAgICAgIGV4Y2Vw
dGlvbk5hbWUgPSBudWxsOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQ2F0Y2hDbGF1c2Ui
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpbkNhdGNoID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGV4Y2VwdGlvbk5hbWUgPSBub2RlLnBhcmFtLm5hbWU7CisgICAgICAgIH0sCisKKyAgICAg
ICAgIkNhdGNoQ2xhdXNlOmV4aXQiOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGluQ2F0Y2gg
PSBmYWxzZTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbk5hbWUgPSBudWxsOworICAgICAgICB9LAor
CisgICAgICAgICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAg
ICAgICAgICAgaWYgKGluQ2F0Y2gpIHsKKworICAgICAgICAgICAgICAgIGlmIChub2RlLmxlZnQu
bmFtZSA9PT0gZXhjZXB0aW9uTmFtZSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiRG8gbm90IGFzc2lnbiB0byB0aGUgZXhjZXB0aW9uIHBhcmFtZXRlci4iKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH07CisK
K307CisKK30se31dLDU4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYWRkaW5nIHByb3BlcnRpZXMgdG8gbmF0aXZl
IG9iamVjdCdzIHByb3RvdHlwZXMuCisgKiBAYXV0aG9yIERhdmlkIE5lbHNvbgorICovCisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMKKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK3ZhciBCVUlMVElOUyA9IFsKKyAgICAiT2JqZWN0IiwgIkZ1bmN0aW9uIiwgIkFy
cmF5IiwgIlN0cmluZyIsICJCb29sZWFuIiwgIk51bWJlciIsICJEYXRlIiwKKyAgICAiUmVnRXhw
IiwgIkVycm9yIiwgIkV2YWxFcnJvciIsICJSYW5nZUVycm9yIiwgIlJlZmVyZW5jZUVycm9yIiwK
KyAgICAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9yIiwgIlVSSUVycm9yIgorXTsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgIC8vIGhhbmRsZSB0aGUgQXJyYXku
cHJvdG90eXBlLmV4dHJhIHN0eWxlIGNhc2UKKyAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9u
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGxocyA9IG5vZGUubGVmdCwgYWZm
ZWN0c1Byb3RvOworCisgICAgICAgICAgICBpZiAobGhzLnR5cGUgIT09ICJNZW1iZXJFeHByZXNz
aW9uIiB8fCBsaHMub2JqZWN0LnR5cGUgIT09ICJNZW1iZXJFeHByZXNzaW9uIikgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYWZmZWN0c1By
b3RvID0gbGhzLm9iamVjdC5jb21wdXRlZCA/CisgICAgICAgICAgICAgICAgbGhzLm9iamVjdC5w
cm9wZXJ0eS50eXBlID09PSAiTGl0ZXJhbCIgJiYgbGhzLm9iamVjdC5wcm9wZXJ0eS52YWx1ZSA9
PT0gInByb3RvdHlwZSIgOgorICAgICAgICAgICAgICAgIGxocy5vYmplY3QucHJvcGVydHkubmFt
ZSA9PT0gInByb3RvdHlwZSI7CisKKyAgICAgICAgICAgIGlmICghYWZmZWN0c1Byb3RvKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBCVUlM
VElOUy5mb3JFYWNoKGZ1bmN0aW9uKGJ1aWx0aW4pIHsKKyAgICAgICAgICAgICAgICBpZiAobGhz
Lm9iamVjdC5vYmplY3QubmFtZSA9PT0gYnVpbHRpbikgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCBidWlsdGluICsgIiBwcm90b3R5cGUgaXMgcmVhZCBvbmx5LCBw
cm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgYWRkZWQuIik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gaGFuZGxlIHRoZSBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlKSBjYXNlCisgICAgICAgICJDYWxsRXhwcmVz
c2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIGNhbGxlZSA9IG5vZGUu
Y2FsbGVlLAorICAgICAgICAgICAgICAgIHN1YmplY3QsCisgICAgICAgICAgICAgICAgb2JqZWN0
OworCisgICAgICAgICAgICAvLyBvbmx5IHdvcnJ5IGFib3V0IE9iamVjdC5kZWZpbmVQcm9wZXJ0
eQorICAgICAgICAgICAgaWYgKGNhbGxlZS50eXBlID09PSAiTWVtYmVyRXhwcmVzc2lvbiIgJiYK
KyAgICAgICAgICAgICAgICBjYWxsZWUub2JqZWN0Lm5hbWUgPT09ICJPYmplY3QiICYmCisgICAg
ICAgICAgICAgICAgY2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09ICJkZWZpbmVQcm9wZXJ0eSIpIHsK
KworICAgICAgICAgICAgICAgIC8vIHZlcmlmeSB0aGUgb2JqZWN0IGJlaW5nIGFkZGVkIHRvIGlz
IGEgbmF0aXZlIHByb3RvdHlwZQorICAgICAgICAgICAgICAgIHN1YmplY3QgPSBub2RlLmFyZ3Vt
ZW50c1swXTsKKyAgICAgICAgICAgICAgICBvYmplY3QgPSBzdWJqZWN0Lm9iamVjdDsKKworICAg
ICAgICAgICAgICAgIGlmIChvYmplY3QgJiYKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnR5
cGUgPT09ICJJZGVudGlmaWVyIiAmJgorICAgICAgICAgICAgICAgICAgICAoQlVJTFRJTlMuaW5k
ZXhPZihvYmplY3QubmFtZSkgPiAtMSkgJiYKKyAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5w
cm9wZXJ0eS5uYW1lID09PSAicHJvdG90eXBlIikgeworCisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KG5vZGUsIG9iamVjdC5uYW1lICsgIiBwcm90b3R5cGUgaXMgcmVhZCBvbmx5
LCBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgYWRkZWQuIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw1OTpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBmbGFnIHVubmVjZXNzYXJ5IGJpbmQgY2FsbHMKKyAqIEBhdXRob3IgQmVuY2UgRMOhbnlp
IDxiZW5jZUBkYW55aS5tZT4KKyAqIEBjb3B5cmlnaHQgMjAxNCBCZW5jZSBEw6FueWkuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgc2NvcGUgPSBbewor
ICAgICAgICBkZXB0aDogLTEsCisgICAgICAgIGZvdW5kOiAwCisgICAgfV07CisKKyAgICAvKioK
KyAgICAgKiBHZXQgdGhlIHRvcG1vc3Qgc2NvcGUKKyAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBU
aGUgdG9wbW9zdCBzY29wZQorICAgICAqLworICAgIGZ1bmN0aW9uIGdldFRvcFNjb3BlKCkgewor
ICAgICAgICByZXR1cm4gc2NvcGVbc2NvcGUubGVuZ3RoIC0gMV07CisgICAgfQorCisgICAgLyoq
CisgICAgICogSW5jcmVtZW50IHRoZSBkZXB0aCBvZiB0aGUgdG9wIHNjb3BlCisgICAgICogQHJl
dHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gaW5jcmVtZW50U2NvcGVEZXB0aCgp
IHsKKyAgICAgICAgdmFyIHRvcCA9IGdldFRvcFNjb3BlKCk7CisgICAgICAgIHRvcC5kZXB0aCsr
OworICAgIH0KKworICAgIC8qKgorICAgICAqIERlY3JlbWVudCB0aGUgZGVwdGggb2YgdGhlIHRv
cCBzY29wZQorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqLworICAgIGZ1bmN0aW9uIGRl
Y3JlbWVudFNjb3BlRGVwdGgoKSB7CisgICAgICAgIHZhciB0b3AgPSBnZXRUb3BTY29wZSgpOwor
ICAgICAgICB0b3AuZGVwdGgtLTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiQ2Fs
bEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5hcmd1
bWVudHMubGVuZ3RoID09PSAxICYmCisgICAgICAgICAgICAgICAgbm9kZS5jYWxsZWUudHlwZSA9
PT0gIk1lbWJlckV4cHJlc3Npb24iICYmCisgICAgICAgICAgICAgICAgbm9kZS5jYWxsZWUucHJv
cGVydHkubmFtZSA9PT0gImJpbmQiICYmCisgICAgICAgICAgICAgICAgbm9kZS5jYWxsZWUub2Jq
ZWN0LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAgICAgc2Nv
cGUucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIGNhbGw6IG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgIGRlcHRoOiAtMSwKKyAgICAgICAgICAgICAgICAgICAgZm91bmQ6IDAKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIkNhbGxFeHBy
ZXNzaW9uOmV4aXQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgdG9wID0gZ2V0
VG9wU2NvcGUoKTsKKyAgICAgICAgICAgIGlmICh0b3AuY2FsbCA9PT0gbm9kZSAmJiB0b3AuZm91
bmQgPT09IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGZ1
bmN0aW9uIGJpbmRpbmcgaXMgdW5uZWNlc3NhcnkuIik7CisgICAgICAgICAgICAgICAgc2NvcGUu
cG9wKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGdW5jdGlvbkV4cHJl
c3Npb24iOiBpbmNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9u
OmV4aXQiOiBkZWNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAiRnVuY3Rpb25EZWNsYXJhdGlv
biI6IGluY3JlbWVudFNjb3BlRGVwdGgsCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uOmV4
aXQiOiBkZWNyZW1lbnRTY29wZURlcHRoLAorICAgICAgICAiVGhpc0V4cHJlc3Npb24iOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIHZhciB0b3AgPSBnZXRUb3BTY29wZSgpOworICAgICAgICAg
ICAgaWYgKHRvcC5kZXB0aCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHRvcC5mb3VuZCsrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNjA6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyB1bm5lY2Vzc2FyeSBkb3VibGUgbmVnYXRpb24gaW4gQm9vbGVhbiBjb250ZXh0cwor
ICogQGF1dGhvciBCcmFuZG9uIE1pbGxzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBy
ZXR1cm4geworICAgICAgICAiVW5hcnlFeHByZXNzaW9uIjogZnVuY3Rpb24gKG5vZGUpIHsKKyAg
ICAgICAgICAgIHZhciBhbmNlc3RvcnMgICA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCksCisgICAg
ICAgICAgICAgICAgcGFyZW50ICAgICAgPSBhbmNlc3RvcnMucG9wKCksCisgICAgICAgICAgICAg
ICAgZ3JhbmRwYXJlbnQgPSBhbmNlc3RvcnMucG9wKCk7CisKKyAgICAgICAgICAgIC8vIEV4aXQg
ZWFybHkgaWYgaXQncyBndWFyYW50ZWVkIG5vdCB0byBtYXRjaAorICAgICAgICAgICAgaWYgKG5v
ZGUub3BlcmF0b3IgIT09ICIhIiB8fAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQudHlwZSAh
PT0gIlVuYXJ5RXhwcmVzc2lvbiIgfHwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50Lm9wZXJh
dG9yICE9PSAiISIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGlmICg8Ym9vbD4pIC4uLgorICAgICAgICAgICAgaWYgKGdyYW5kcGFy
ZW50LnR5cGUgPT09ICJJZlN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBhbiBpZiBzdGF0ZW1lbnQg
Y29uZGl0aW9uLiIpOworCisgICAgICAgICAgICAvLyBkbyAuLi4gd2hpbGUgKDxib29sPikKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkRvV2hpbGVTdGF0ZW1l
bnQiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBk
b3VibGUgbmVnYXRpb24gaW4gYSBkbyB3aGlsZSBsb29wIGNvbmRpdGlvbi4iKTsKKworICAgICAg
ICAgICAgLy8gd2hpbGUgKDxib29sPikgLi4uCisgICAgICAgICAgICB9IGVsc2UgaWYgKGdyYW5k
cGFyZW50LnR5cGUgPT09ICJXaGlsZVN0YXRlbWVudCIpIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50IGRvdWJsZSBuZWdhdGlvbiBpbiBhIHdoaWxlIGxv
b3AgY29uZGl0aW9uLiIpOworCisgICAgICAgICAgICAvLyA8Ym9vbD4gPyAuLi4gOiAuLi4KKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5cGUgPT09ICJDb25kaXRpb25hbEV4
cHJlc3Npb24iICYmCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9PT0gZ3JhbmRwYXJlbnQu
dGVzdCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiUmVkdW5kYW50
IGRvdWJsZSBuZWdhdGlvbiBpbiBhIHRlcm5hcnkgY29uZGl0aW9uLiIpOworCisgICAgICAgICAg
ICAvLyBmb3IgKC4uLjsgPGJvb2w+OyAuLi4pIC4uLgorICAgICAgICAgICAgfSBlbHNlIGlmICgo
Z3JhbmRwYXJlbnQudHlwZSA9PT0gIkZvclN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICAg
ICAgcGFyZW50ID09PSBncmFuZHBhcmVudC50ZXN0KSkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgZG91YmxlIG5lZ2F0aW9uIGluIGEgZm9yIGxvb3Ag
Y29uZGl0aW9uLiIpOworCisgICAgICAgICAgICAvLyAhPGJvb2w+CisgICAgICAgICAgICB9IGVs
c2UgaWYgKChncmFuZHBhcmVudC50eXBlID09PSAiVW5hcnlFeHByZXNzaW9uIiAmJgorICAgICAg
ICAgICAgICAgICAgICBncmFuZHBhcmVudC5vcGVyYXRvciA9PT0gIiEiKSkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWR1bmRhbnQgbXVsdGlwbGUgbmVnYXRpb24u
Iik7CisKKyAgICAgICAgICAgIC8vIEJvb2xlYW4oPGJvb2w+KQorICAgICAgICAgICAgfSBlbHNl
IGlmICgoZ3JhbmRwYXJlbnQudHlwZSA9PT0gIkNhbGxFeHByZXNzaW9uIiAmJgorICAgICAgICAg
ICAgICAgICAgICBncmFuZHBhcmVudC5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCisg
ICAgICAgICAgICAgICAgICAgIGdyYW5kcGFyZW50LmNhbGxlZS5uYW1lID09PSAiQm9vbGVhbiIp
KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3Vi
bGUgbmVnYXRpb24gaW4gY2FsbCB0byBCb29sZWFuKCkuIik7CisKKyAgICAgICAgICAgIC8vIG5l
dyBCb29sZWFuKDxib29sPikKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGdyYW5kcGFyZW50LnR5
cGUgPT09ICJOZXdFeHByZXNzaW9uIiAmJgorICAgICAgICAgICAgICAgICAgICBncmFuZHBhcmVu
dC5jYWxsZWUudHlwZSA9PT0gIklkZW50aWZpZXIiICYmCisgICAgICAgICAgICAgICAgICAgIGdy
YW5kcGFyZW50LmNhbGxlZS5uYW1lID09PSAiQm9vbGVhbiIpKSB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC5yZXBvcnQobm9kZSwgIlJlZHVuZGFudCBkb3VibGUgbmVnYXRpb24gaW4gQm9vbGVh
biBjb25zdHJ1Y3RvciBjYWxsLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsK
KworfTsKKworfSx7fV0sNjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IHBhcmVudGhlc2VzaXNuZyBoaWdoZXIgcHJlY2Vk
ZW5jZSBzdWJleHByZXNzaW9ucy4KKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJhCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBpc1BhcmVudGhlc2lzZWQobm9kZSkgeworICAgICAg
ICB2YXIgcHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSksCisgICAg
ICAgICAgICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSk7CisKKyAgICAg
ICAgcmV0dXJuIHByZXZpb3VzVG9rZW4gJiYgbmV4dFRva2VuICYmCisgICAgICAgICAgICBwcmV2
aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgcHJldmlvdXNUb2tlbi5yYW5nZVsxXSA8PSBub2Rl
LnJhbmdlWzBdICYmCisgICAgICAgICAgICBuZXh0VG9rZW4udmFsdWUgPT09ICIpIiAmJiBuZXh0
VG9rZW4ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBp
c1BhcmVudGhlc2lzZWRUd2ljZShub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0g
Y29udGV4dC5nZXRUb2tlbkJlZm9yZShub2RlLCAxKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9
IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2RlLCAxKTsKKworICAgICAgICByZXR1cm4gaXNQYXJl
bnRoZXNpc2VkKG5vZGUpICYmIHByZXZpb3VzVG9rZW4gJiYgbmV4dFRva2VuICYmCisgICAgICAg
ICAgICBwcmV2aW91c1Rva2VuLnZhbHVlID09PSAiKCIgJiYgcHJldmlvdXNUb2tlbi5yYW5nZVsx
XSA8PSBub2RlLnJhbmdlWzBdICYmCisgICAgICAgICAgICBuZXh0VG9rZW4udmFsdWUgPT09ICIp
IiAmJiBuZXh0VG9rZW4ucmFuZ2VbMF0gPj0gbm9kZS5yYW5nZVsxXTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBwcmVjZWRlbmNlKG5vZGUpIHsKKworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkg
eworICAgICAgICAgICAgY2FzZSAiU2VxdWVuY2VFeHByZXNzaW9uIjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKworICAgICAgICAgICAgY2FzZSAiQXNzaWdubWVudEV4cHJlc3Npb24iOgor
ICAgICAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgICAgICBjYXNlICJDb25kaXRpb25h
bEV4cHJlc3Npb24iOgorICAgICAgICAgICAgICAgIHJldHVybiAzOworCisgICAgICAgICAgICBj
YXNlICJMb2dpY2FsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9w
ZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInx8IjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiA0OworICAgICAgICAgICAgICAgICAgICBjYXNlICImJiI6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gNTsKKyAgICAgICAgICAgICAgICAgICAgLy8gbm8g
ZGVmYXVsdAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRo
cm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgIkJpbmFyeUV4cHJlc3Npb24iOgorICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcGVyYXRvcikgeworICAgICAgICAgICAgICAgICAgICBjYXNl
ICJ8IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA2OworICAgICAgICAgICAgICAg
ICAgICBjYXNlICJeIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA3OworICAgICAg
ICAgICAgICAgICAgICBjYXNlICImIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA4
OworICAgICAgICAgICAgICAgICAgICBjYXNlICI9PSI6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgIiE9IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPT09IjoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAiIT09IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA5OworICAg
ICAgICAgICAgICAgICAgICBjYXNlICI8IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPD0i
OgorICAgICAgICAgICAgICAgICAgICBjYXNlICI+IjoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAiPj0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJpbiI6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgImluc3RhbmNlb2YiOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEw
OworICAgICAgICAgICAgICAgICAgICBjYXNlICI8PCI6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgIj4+IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiPj4+IjoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAxMTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiKyI6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgIi0iOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDEyOworICAgICAgICAgICAgICAgICAgICBjYXNlICIqIjoKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAiLyI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiUiOgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDEzOworICAgICAgICAgICAgICAgICAgICAvLyBubyBkZWZhdWx0Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi8KKyAg
ICAgICAgICAgIGNhc2UgIlVuYXJ5RXhwcmVzc2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJu
IDE0OworICAgICAgICAgICAgY2FzZSAiVXBkYXRlRXhwcmVzc2lvbiI6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDE1OworICAgICAgICAgICAgY2FzZSAiQ2FsbEV4cHJlc3Npb24iOgorICAgICAg
ICAgICAgICAgIC8vIElJRkUgaXMgYWxsb3dlZCB0byBoYXZlIHBhcmVucyBpbiBhbnkgcG9zaXRp
b24gKCM2NTUpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJGdW5j
dGlvbkV4cHJlc3Npb24iKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgICAgICAgY2Fz
ZSAiTmV3RXhwcmVzc2lvbiI6CisgICAgICAgICAgICAgICAgcmV0dXJuIDE3OworICAgICAgICAg
ICAgLy8gbm8gZGVmYXVsdAorICAgICAgICB9CisgICAgICAgIHJldHVybiAxODsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiByZXBvcnQobm9kZSkgeworICAgICAgICBjb250ZXh0LnJlcG9ydChub2Rl
LCAiR3JhdHVpdG91cyBwYXJlbnRoZXNlcyBhcm91bmQgZXhwcmVzc2lvbi4iKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBkcnlVbmFyeVVwZGF0ZShub2RlKSB7CisgICAgICAgIGlmIChpc1BhcmVu
dGhlc2lzZWQobm9kZS5hcmd1bWVudCkgJiYgcHJlY2VkZW5jZShub2RlLmFyZ3VtZW50KSA+PSBw
cmVjZWRlbmNlKG5vZGUpKSB7CisgICAgICAgICAgICByZXBvcnQobm9kZS5hcmd1bWVudCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBkcnlDYWxsTmV3KG5vZGUpIHsKKyAgICAg
ICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmNhbGxlZSkgJiYgcHJlY2VkZW5jZShub2RlLmNh
bGxlZSkgPj0gcHJlY2VkZW5jZShub2RlKSAmJgorICAgICAgICAhKG5vZGUudHlwZSA9PT0gIkNh
bGxFeHByZXNzaW9uIiAmJiBub2RlLmNhbGxlZS50eXBlID09PSAiRnVuY3Rpb25FeHByZXNzaW9u
IikpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlLmNhbGxlZSk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgaWYgKGlz
UGFyZW50aGVzaXNlZFR3aWNlKG5vZGUuYXJndW1lbnRzWzBdKSAmJiBwcmVjZWRlbmNlKG5vZGUu
YXJndW1lbnRzWzBdKSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24i
fSkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5hcmd1bWVudHNbMF0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgW10uZm9yRWFjaC5jYWxsKG5v
ZGUuYXJndW1lbnRzLCBmdW5jdGlvbihhcmcpeworICAgICAgICAgICAgICAgIGlmIChpc1BhcmVu
dGhlc2lzZWQoYXJnKSAmJiBwcmVjZWRlbmNlKGFyZykgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFz
c2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChhcmcp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQor
CisgICAgZnVuY3Rpb24gZHJ5QmluYXJ5TG9naWNhbChub2RlKSB7CisgICAgICAgIHZhciBwcmVj
ID0gcHJlY2VkZW5jZShub2RlKTsKKyAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmxl
ZnQpICYmIHByZWNlZGVuY2Uobm9kZS5sZWZ0KSA+PSBwcmVjKSB7CisgICAgICAgICAgICByZXBv
cnQobm9kZS5sZWZ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5v
ZGUucmlnaHQpICYmIHByZWNlZGVuY2Uobm9kZS5yaWdodCkgPiBwcmVjKSB7CisgICAgICAgICAg
ICByZXBvcnQobm9kZS5yaWdodCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gewor
ICAgICAgICAiQXJyYXlFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAg
W10uZm9yRWFjaC5jYWxsKG5vZGUuZWxlbWVudHMsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZSAmJiBpc1BhcmVudGhlc2lzZWQoZSkgJiYgcHJlY2VkZW5jZShlKSA+PSBwcmVj
ZWRlbmNlKHt0eXBlOiAiQXNzaWdubWVudEV4cHJlc3Npb24ifSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmVwb3J0KGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9LAorICAgICAgICAiQXNzaWdubWVudEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5vZGUucmlnaHQpICYmIHByZWNlZGVu
Y2Uobm9kZS5yaWdodCkgPj0gcHJlY2VkZW5jZShub2RlKSkgeworICAgICAgICAgICAgICAgIHJl
cG9ydChub2RlLnJpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIkJp
bmFyeUV4cHJlc3Npb24iOiBkcnlCaW5hcnlMb2dpY2FsLAorICAgICAgICAiQ2FsbEV4cHJlc3Np
b24iOiBkcnlDYWxsTmV3LAorICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLnRlc3QpICYm
IHByZWNlZGVuY2Uobm9kZS50ZXN0KSA+PSBwcmVjZWRlbmNlKHt0eXBlOiAiTG9naWNhbEV4cHJl
c3Npb24iLCBvcGVyYXRvcjogInx8In0pKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUu
dGVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkKG5v
ZGUuY29uc2VxdWVudCkgJiYgcHJlY2VkZW5jZShub2RlLmNvbnNlcXVlbnQpID49IHByZWNlZGVu
Y2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhwcmVzc2lvbiJ9KSkgeworICAgICAgICAgICAgICAgIHJl
cG9ydChub2RlLmNvbnNlcXVlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlz
UGFyZW50aGVzaXNlZChub2RlLmFsdGVybmF0ZSkgJiYgcHJlY2VkZW5jZShub2RlLmFsdGVybmF0
ZSkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7CisgICAg
ICAgICAgICAgICAgcmVwb3J0KG5vZGUuYWx0ZXJuYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwKKyAgICAgICAgIkRvV2hpbGVTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkgeworICAgICAgICAg
ICAgICAgIHJlcG9ydChub2RlLnRlc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAg
ICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IHZhciBmaXJzdFRva2VuOworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmV4
cHJlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgZmlyc3RUb2tlbiA9IGNvbnRleHQuZ2V0Rmly
c3RUb2tlbihub2RlLmV4cHJlc3Npb24pOworICAgICAgICAgICAgICAgIGlmIChmaXJzdFRva2Vu
LnZhbHVlICE9PSAiZnVuY3Rpb24iICYmIGZpcnN0VG9rZW4udmFsdWUgIT09ICJ7IikgeworICAg
ICAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5leHByZXNzaW9uKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JJblN0YXRlbWVudCI6
IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWQobm9kZS5y
aWdodCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS5yaWdodCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgICJGb3JTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICBpZiAobm9kZS5pbml0ICYmIGlzUGFyZW50aGVzaXNlZChub2RlLmluaXQp
KSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuaW5pdCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChub2RlLnRlc3QgJiYgaXNQYXJlbnRoZXNpc2VkKG5vZGUudGVzdCkp
IHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS50ZXN0KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG5vZGUudXBkYXRlICYmIGlzUGFyZW50aGVzaXNlZChub2RlLnVwZGF0
ZSkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQobm9kZS51cGRhdGUpOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS50ZXN0KSkgeworICAgICAg
ICAgICAgICAgIHJlcG9ydChub2RlLnRlc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9LAor
ICAgICAgICAiTG9naWNhbEV4cHJlc3Npb24iOiBkcnlCaW5hcnlMb2dpY2FsLAorICAgICAgICAi
TWVtYmVyRXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmICgKKyAg
ICAgICAgICAgICAgICBpc1BhcmVudGhlc2lzZWQobm9kZS5vYmplY3QpICYmCisgICAgICAgICAg
ICAgICAgcHJlY2VkZW5jZShub2RlLm9iamVjdCkgPj0gcHJlY2VkZW5jZShub2RlKSAmJgorICAg
ICAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5jb21wdXRlZCB8fAorICAg
ICAgICAgICAgICAgICAgICAhKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5vYmplY3Qu
dHlwZSA9PT0gIkxpdGVyYWwiICYmCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygbm9k
ZS5vYmplY3QudmFsdWUgPT09ICJudW1iZXIiICYmCisgICAgICAgICAgICAgICAgICAgICAgICAv
XlswLTldKyQvLnRlc3QoY29udGV4dC5nZXRGaXJzdFRva2VuKG5vZGUub2JqZWN0KS52YWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkg
eworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLm9iamVjdCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0sCisgICAgICAgICJOZXdFeHByZXNzaW9uIjogZHJ5Q2FsbE5ldywKKyAgICAgICAg
Ik9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBbXS5mb3JF
YWNoLmNhbGwobm9kZS5wcm9wZXJ0aWVzLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAg
dmFyIHYgPSBlLnZhbHVlOworICAgICAgICAgICAgICAgIGlmICh2ICYmIGlzUGFyZW50aGVzaXNl
ZCh2KSAmJiBwcmVjZWRlbmNlKHYpID49IHByZWNlZGVuY2Uoe3R5cGU6ICJBc3NpZ25tZW50RXhw
cmVzc2lvbiJ9KSkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnQodik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisgICAgICAgICJSZXR1cm5TdGF0
ZW1lbnQiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVudCAm
JiBpc1BhcmVudGhlc2lzZWQobm9kZS5hcmd1bWVudCkpIHsKKyAgICAgICAgICAgICAgICByZXBv
cnQobm9kZS5hcmd1bWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJT
ZXF1ZW5jZUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBbXS5mb3JF
YWNoLmNhbGwobm9kZS5leHByZXNzaW9ucywgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAg
IGlmIChpc1BhcmVudGhlc2lzZWQoZSkgJiYgcHJlY2VkZW5jZShlKSA+PSBwcmVjZWRlbmNlKG5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydChlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgICAgIlN3aXRjaENhc2UiOiBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS50ZXN0ICYmIGlzUGFyZW50aGVzaXNl
ZChub2RlLnRlc3QpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUudGVzdCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJTd2l0Y2hTdGF0ZW1lbnQiOiBmdW5jdGlv
bihub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZS5kaXNj
cmltaW5hbnQpKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuZGlzY3JpbWluYW50KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlRocm93U3RhdGVtZW50IjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2RlLmFyZ3Vt
ZW50KSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlLmFyZ3VtZW50KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlVuYXJ5RXhwcmVzc2lvbiI6IGRyeVVuYXJ5VXBk
YXRlLAorICAgICAgICAiVXBkYXRlRXhwcmVzc2lvbiI6IGRyeVVuYXJ5VXBkYXRlLAorICAgICAg
ICAiVmFyaWFibGVEZWNsYXJhdG9yIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYg
KG5vZGUuaW5pdCAmJiBpc1BhcmVudGhlc2lzZWQobm9kZS5pbml0KSAmJiBwcmVjZWRlbmNlKG5v
ZGUuaW5pdCkgPj0gcHJlY2VkZW5jZSh7dHlwZTogIkFzc2lnbm1lbnRFeHByZXNzaW9uIn0pKSB7
CisgICAgICAgICAgICAgICAgcmVwb3J0KG5vZGUuaW5pdCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0sCisgICAgICAgICJXaGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgIGlmIChpc1BhcmVudGhlc2lzZWRUd2ljZShub2RlLnRlc3QpKSB7CisgICAgICAgICAg
ICAgICAgcmVwb3J0KG5vZGUudGVzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAg
ICAgICJXaXRoU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgaWYgKGlz
UGFyZW50aGVzaXNlZFR3aWNlKG5vZGUub2JqZWN0KSkgeworICAgICAgICAgICAgICAgIHJlcG9y
dChub2RlLm9iamVjdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9Owor
Cit9LHt9XSw2MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiB1bm5lY2Vzc2FyeSBzZW1pY29sb25zCisg
KiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxl
LmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICByZXR1cm4geworCisgICAgICAgICJFbXB0eVN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsK
KyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbm5lY2Vzc2FyeSBzZW1pY29sb24u
Iik7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw2MzpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVu
bmVjZXNzYXJ5IHN0cmljdCBkaXJlY3RpdmVzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15
ZXJzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1
bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMg
PSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBkaXJlY3RpdmVzKGJsb2NrKSB7
CisgICAgICAgIHZhciBkcyA9IFtdLCBib2R5ID0gYmxvY2suYm9keSwgZSwgaSwgbDsKKworICAg
ICAgICBmb3IgKGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAgICAg
ICAgIGUgPSBib2R5W2ldOworCisgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgZS50
eXBlID09PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgJiYKKyAgICAgICAgICAgICAgICBlLmV4cHJl
c3Npb24udHlwZSA9PT0gIkxpdGVyYWwiICYmCisgICAgICAgICAgICAgICAgdHlwZW9mIGUuZXhw
cmVzc2lvbi52YWx1ZSA9PT0gInN0cmluZyIKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAg
ICAgIGRzLnB1c2goZS5leHByZXNzaW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGRzOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzU3RyaWN0KGRpcmVjdGl2ZSkgeworICAgICAg
ICByZXR1cm4gZGlyZWN0aXZlLnZhbHVlID09PSAidXNlIHN0cmljdCI7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gY2hlY2tGb3JVbm5lY2Vzc2FyeVVzZVN0cmljdChub2RlKSB7CisgICAgICAgIHZh
ciB1c2VTdHJpY3REaXJlY3RpdmVzLCBzY29wZSwgdXBwZXI7CisgICAgICAgIHVzZVN0cmljdERp
cmVjdGl2ZXMgPSBkaXJlY3RpdmVzKG5vZGUpLmZpbHRlcihpc1N0cmljdCk7CisKKyAgICAgICAg
c3dpdGNoICh1c2VTdHJpY3REaXJlY3RpdmVzLmxlbmd0aCkgeworICAgICAgICAgICAgY2FzZSAw
OgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAg
ICAgICAgICAgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7CisgICAgICAgICAgICAgICAgdXBw
ZXIgPSBzY29wZS51cHBlcjsKKworICAgICAgICAgICAgICAgIGlmICh1cHBlciAmJiB1cHBlci5m
dW5jdGlvbkV4cHJlc3Npb25TY29wZSkgeworICAgICAgICAgICAgICAgICAgICB1cHBlciA9IHVw
cGVyLnVwcGVyOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh1cHBl
ciAmJiB1cHBlci5pc1N0cmljdCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dCh1c2VTdHJpY3REaXJlY3RpdmVzWzBdLCAiVW5uZWNlc3NhcnkgJ3VzZSBzdHJpY3QnLiIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh1c2VTdHJpY3REaXJlY3Rp
dmVzWzFdLCAiTXVsdGlwbGUgJ3VzZSBzdHJpY3QnIGRpcmVjdGl2ZXMuIik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4geworCisgICAgICAgICJQcm9ncmFtIjogY2hlY2tGb3JVbm5l
Y2Vzc2FyeVVzZVN0cmljdCwKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JVbm5lY2Vzc2FyeVVzZVN0cmljdChub2Rl
LmJvZHkpOworICAgICAgICB9LAorCisgICAgICAgICJGdW5jdGlvbkRlY2xhcmF0aW9uIjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JVbm5lY2Vzc2FyeVVzZVN0cmljdChu
b2RlLmJvZHkpOworICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNjQ6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZmxhZyBmYWxsLXRocm91Z2ggY2FzZXMgaW4gc3dpdGNoIHN0YXRlbWVudHMuCisgKiBAYXV0aG9y
IE1hdHQgRHVWYWxsIDxodHRwOi8vbWF0dGR1dmFsbC5jb20vPgorICovCisidXNlIHN0cmljdCI7
CisKKwordmFyIEZBTExUSFJPVUdIX0NPTU1FTlQgPSAvZmFsbHNcc3Rocm91Z2gvOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZh
ciBzd2l0Y2hlcyA9IFtdOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiU3dpdGNoQ2FzZSI6
IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIGNvbnNlcXVlbnQgPSBub2RlLmNv
bnNlcXVlbnQsCisgICAgICAgICAgICAgICAgc3dpdGNoRGF0YSA9IHN3aXRjaGVzW3N3aXRjaGVz
Lmxlbmd0aCAtIDFdLAorICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgY29tbWVu
dHMsCisgICAgICAgICAgICAgICAgY29tbWVudDsKKworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAqIFNvbWUgZGV2ZWxvcGVycyB3cmFwIGNhc2UgYm9kaWVzIGluIGJsb2Nrcywgc28gaWYg
dGhlcmUgaXMganVzdCBvbmUKKyAgICAgICAgICAgICAqIG5vZGUgYW5kIGl0J3MgYSBibG9jayBz
dGF0ZW1lbnQsIGNoZWNrIGluc2lkZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYg
KGNvbnNlcXVlbnQubGVuZ3RoID09PSAxICYmIGNvbnNlcXVlbnRbMF0udHlwZSA9PT0gIkJsb2Nr
U3RhdGVtZW50IikgeworICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQgPSBjb25zZXF1ZW50WzBd
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBjaGVja2luZyBvbiBwcmV2aW91cyBj
YXNlCisgICAgICAgICAgICBpZiAoIXN3aXRjaERhdGEubGFzdENhc2VDbG9zZWQpIHsKKworICAg
ICAgICAgICAgICAgIC8vIGEgZmFsbCB0aHJvdWdoIGNvbW1lbnQgd2lsbCBiZSBhIGxlYWRpbmcg
Y29tbWVudCBvZiB0aGUgZm9sbG93aW5nIGNhc2UKKyAgICAgICAgICAgICAgICBjb21tZW50cyA9
IGNvbnRleHQuZ2V0Q29tbWVudHMobm9kZSkubGVhZGluZzsKKyAgICAgICAgICAgICAgICBjb21t
ZW50ID0gY29tbWVudHNbY29tbWVudHMubGVuZ3RoIC0gMV07CisKKyAgICAgICAgICAgICAgICAv
LyBjaGVjayBmb3IgY29tbWVudAorICAgICAgICAgICAgICAgIGlmICghY29tbWVudCB8fCAhRkFM
TFRIUk9VR0hfQ09NTUVOVC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KHN3aXRjaERhdGEubGFzdENhc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAiRXhwZWN0ZWQgYSBcImJyZWFrXCIgc3RhdGVtZW50IGJlZm9yZSBcInt7Y29kZX19
XCIuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgY29kZTogbm9kZS50ZXN0ID8gImNhc2Ui
IDogImRlZmF1bHQiIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gbm93IGRlYWxpbmcgd2l0aCB0aGUgY3VycmVudCBjYXNlCisgICAgICAgICAg
ICBzd2l0Y2hEYXRhLmxhc3RDYXNlQ2xvc2VkID0gZmFsc2U7CisgICAgICAgICAgICBzd2l0Y2hE
YXRhLmxhc3RDYXNlID0gbm9kZTsKKworICAgICAgICAgICAgLy8gdHJ5IHRvIHZlcmlmeSB1c2lu
ZyBzdGF0ZW1lbnRzIC0gZ28gYmFja3dhcmRzIGFzIGEgZmFzdCBwYXRoIGZvciB0aGUgc2VhcmNo
CisgICAgICAgICAgICBpZiAoY29uc2VxdWVudC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGkgPSBjb25zZXF1ZW50Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICgvKD86QnJlYWt8Q29udGludWV8UmV0dXJufFRocm93KVN0YXRlbWVudC8u
dGVzdChjb25zZXF1ZW50W2ldLnR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2hEYXRhLmxhc3RDYXNlQ2xvc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyB0aGUgY2FzZSBzdGF0ZW1lbnQgaGFzIG5v
IHN0YXRlbWVudHMsIHNvIGl0IG11c3QgbG9naWNhbGx5IGZhbGwgdGhyb3VnaAorICAgICAgICAg
ICAgICAgIHN3aXRjaERhdGEubGFzdENhc2VDbG9zZWQgPSB0cnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQW55IHdhcm5pbmdzIGFyZSB0cmlnZ2Vy
ZWQgd2hlbiB0aGUgbmV4dCBTd2l0Y2hDYXNlIG9jY3Vycy4KKyAgICAgICAgICAgICAqIFRoZXJl
IGlzIG5vIG5lZWQgdG8gd2FybiBvbiB0aGUgbGFzdCBTd2l0Y2hDYXNlLCBzaW5jZSBpdCBjYW4n
dAorICAgICAgICAgICAgICogZmFsbCB0aHJvdWdoIHRvIGFueXRoaW5nLgorICAgICAgICAgICAg
ICovCisgICAgICAgIH0sCisKKyAgICAgICAgIlN3aXRjaFN0YXRlbWVudCI6IGZ1bmN0aW9uKG5v
ZGUpIHsKKyAgICAgICAgICAgIHN3aXRjaGVzLnB1c2goeworICAgICAgICAgICAgICAgIG5vZGU6
IG5vZGUsCisgICAgICAgICAgICAgICAgbGFzdENhc2VDbG9zZWQ6IHRydWUsCisgICAgICAgICAg
ICAgICAgbGFzdENhc2U6IG51bGwKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAg
ICAgICJTd2l0Y2hTdGF0ZW1lbnQ6ZXhpdCI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgc3dp
dGNoZXMucG9wKCk7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw2NTpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0
byBmbGFnIHVzZSBvZiBhIGxlYWRpbmcvdHJhaWxpbmcgZGVjaW1hbCBwb2ludCBpbiBhIG51bWVy
aWMgbGl0ZXJhbAorICogQGF1dGhvciBKYW1lcyBBbGxhcmRpY2UKKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkg
eworCisgICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09ICJudW1iZXIiKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUucmF3LmluZGV4T2YoIi4iKSA9PT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQSBsZWFkaW5nIGRlY2ltYWwgcG9p
bnQgY2FuIGJlIGNvbmZ1c2VkIHdpdGggYSBkb3QuIik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChub2RlLnJhdy5pbmRleE9mKCIuIikgPT09IG5vZGUucmF3Lmxlbmd0
aCAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkEgdHJh
aWxpbmcgZGVjaW1hbCBwb2ludCBjYW4gYmUgY29uZnVzZWQgd2l0aCBhIGRvdC4iKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSw2NjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxl
b3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpZGVudGlm
aWVycyBhcyB2YXJpYWJsZXMuCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxw
ZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoKKyAgICAgKiBXYWxrIHRoZSBz
Y29wZSBjaGFpbiBsb29raW5nIGZvciBlaXRoZXIgYSBGdW5jdGlvbkRlY2xhcmF0aW9uIG9yIGEK
KyAgICAgKiBWYXJpYWJsZURlY2xhcmF0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBsZWZ0LWhh
bmQgc2lkZSBvZiB0aGUKKyAgICAgKiBBc3NpZ25tZW50RXhwcmVzc2lvbi4gSWYgd2UgZmluZCB0
aGUgRnVuY3Rpb25EZWNsYXJhdGlvbiBmaXJzdCwgdGhlbiB3ZQorICAgICAqIHdhcm4sIGJlY2F1
c2UgYSBGdW5jdGlvbkRlY2xhcmF0aW9uIGlzIHRyeWluZyB0byBiZWNvbWUgYSBWYXJpYWJsZSBv
ciBhCisgICAgICogRnVuY3Rpb25FeHByZXNzaW9uLiBJZiB3ZSBmaW5kIGEgVmFyaWFibGVEZWNs
YXJhdGlvbiBmaXJzdCwgdGhlbiB3ZSBoYXZlCisgICAgICogYSBsZWdpdGltYXRlIHNoYWRvdyB2
YXJpYWJsZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0lmSWRlbnRpZmllcklzRnVuY3Rp
b24oc2NvcGUsIG5hbWUpIHsKKyAgICAgICAgdmFyIHZhcmlhYmxlLAorICAgICAgICAgICAgZGVm
LAorICAgICAgICAgICAgaSwKKyAgICAgICAgICAgIGo7CisKKyAgICAgICAgLy8gTG9vcCBvdmVy
IGFsbCBvZiB0aGUgaWRlbnRpZmllcnMgYXZhaWxhYmxlIGluIHNjb3BlLgorICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgc2NvcGUudmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2
YXJpYWJsZSA9IHNjb3BlLnZhcmlhYmxlc1tpXTsKKworICAgICAgICAgICAgLy8gRm9yIGVhY2gg
aWRlbnRpZmllciwgc2VlIGlmIGl0IHdhcyBkZWZpbmVkIGluIF90aGlzXyBzY29wZS4KKyAgICAg
ICAgICAgIGZvciAoaiA9IDA7IGogPCB2YXJpYWJsZS5kZWZzLmxlbmd0aDsgaisrKSB7CisgICAg
ICAgICAgICAgICAgZGVmID0gdmFyaWFibGUuZGVmc1tqXTsKKworICAgICAgICAgICAgICAgIC8v
IElkZW50aWZpZXIgaXMgYSBmdW5jdGlvbiBhbmQgd2FzIGRlY2xhcmVkIGluIHRoaXMgc2NvcGUK
KyAgICAgICAgICAgICAgICBpZiAoZGVmLm5hbWUubmFtZSA9PT0gbmFtZSAmJiBkZWYudHlwZSA9
PT0gIkZ1bmN0aW9uTmFtZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gSWRlbnRpZmllciBpcyBhIHZh
cmlhYmxlIGFuZCB3YXMgZGVjbGFyZWQgaW4gdGhpcyBzY29wZS4gVGhpcworICAgICAgICAgICAg
ICAgIC8vIGlzIGEgbGVnaXRpbWF0ZSBzaGFkb3cgdmFyaWFibGUuCisgICAgICAgICAgICAgICAg
aWYgKGRlZi5uYW1lLm5hbWUgPT09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIENoZWNrIHRoZSB1cHBlciBzY29wZS4KKyAgICAgICAgaWYgKHNjb3BlLnVwcGVy
KSB7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tJZklkZW50aWZpZXJJc0Z1bmN0aW9uKHNjb3Bl
LnVwcGVyLCBuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhl
IGdsb2JhbCBzY29wZSBhbmQgaGF2ZW4ndCBmb3VuZCBhbnl0aGluZy4KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMg
QVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAi
QXNzaWdubWVudEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIg
c2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCksCisgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUu
bGVmdC5uYW1lOworCisgICAgICAgICAgICBpZiAoY2hlY2tJZklkZW50aWZpZXJJc0Z1bmN0aW9u
KHNjb3BlLCBuYW1lKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICIn
e3tuYW1lfX0nIGlzIGEgZnVuY3Rpb24uIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAg
fQorCisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDY3OltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcg
dXNlIG9mIGltcGxpZWQgZXZhbCB2aWEgc2V0VGltZW91dCBhbmQgc2V0SW50ZXJ2YWwKKyAqIEBh
dXRob3IgSmFtZXMgQWxsYXJkaWNlCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9y
dHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1
cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAg
ICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxsZWUubmFtZTsKKworICAgICAgICAgICAgICAg
IGlmIChjYWxsZWUgPT09ICJzZXRUaW1lb3V0IiB8fCBjYWxsZWUgPT09ICJzZXRJbnRlcnZhbCIp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHNbMF07
CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudCAmJiBhcmd1bWVudC50eXBlID09PSAi
TGl0ZXJhbCIgJiYgdHlwZW9mIGFyZ3VtZW50LnZhbHVlID09PSAic3RyaW5nIikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkltcGxpZWQgZXZhbC4gQ29u
c2lkZXIgcGFzc2luZyBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBzdHJpbmcuIik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9OworCit9OworCit9LHt9XSw2ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhw
b3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIGRlY2xhcmF0aW9u
cyBpbiBwcm9ncmFtIG9yIGZ1bmN0aW9uIGJvZHkgcm9vdC4KKyAqIEBhdXRob3IgQnJhbmRvbiBN
aWxscworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisgICAgICogRmluZCB0aGUg
bmVhcmVzdCBQcm9ncmFtIG9yIEZ1bmN0aW9uIGFuY2VzdG9yIG5vZGUuCisgICAgICogQHJldHVy
bnMge09iamVjdH0gQW5jZXN0b3IncyB0eXBlIGFuZCBkaXN0YW5jZSBmcm9tIG5vZGUuCisgICAg
ICovCisgICAgZnVuY3Rpb24gbmVhcmVzdEJvZHkoKSB7CisgICAgICAgIHZhciBhbmNlc3RvcnMg
PSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAorICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rv
cnMucG9wKCksCisgICAgICAgICAgICBnZW5lcmF0aW9uID0gMTsKKworICAgICAgICB3aGlsZSAo
YW5jZXN0b3IgJiYgWyJQcm9ncmFtIiwgIkZ1bmN0aW9uRGVjbGFyYXRpb24iLAorICAgICAgICAg
ICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iXS5pbmRleE9mKGFuY2VzdG9yLnR5cGUpIDwgMCkg
eworICAgICAgICAgICAgZ2VuZXJhdGlvbiArPSAxOworICAgICAgICAgICAgYW5jZXN0b3IgPSBh
bmNlc3RvcnMucG9wKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgLy8gVHlwZSBvZiBjb250YWluaW5nIGFuY2VzdG9yCisgICAgICAgICAgICB0eXBlOiBhbmNl
c3Rvci50eXBlLAorICAgICAgICAgICAgLy8gU2VwYXJhdGlvbiBiZXR3ZWVuIGFuY2VzdG9yIGFu
ZCBub2RlCisgICAgICAgICAgICBkaXN0YW5jZTogZ2VuZXJhdGlvbgorICAgICAgICB9OworICAg
IH0KKworICAgIC8qKgorICAgICAqIEVuc3VyZSB0aGF0IGEgZ2l2ZW4gbm9kZSBpcyBhdCBhIHBy
b2dyYW0gb3IgZnVuY3Rpb24gYm9keSdzIHJvb3QuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIERlY2xhcmF0aW9uIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge3ZvaWR9Cisg
ICAgICovCisgICAgZnVuY3Rpb24gY2hlY2sobm9kZSkgeworICAgICAgICB2YXIgYm9keSA9IG5l
YXJlc3RCb2R5KG5vZGUpLAorICAgICAgICAgICAgdmFsaWQgPSAoKGJvZHkudHlwZSA9PT0gIlBy
b2dyYW0iICYmIGJvZHkuZGlzdGFuY2UgPT09IDEpIHx8CisgICAgICAgICAgICAgICAgYm9keS5k
aXN0YW5jZSA9PT0gMik7CisKKyAgICAgICAgaWYgKCF2YWxpZCkgeworICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIk1vdmUge3t0eXBlfX0gZGVjbGFyYXRpb24gdG8ge3tib2R5fX0g
cm9vdC4iLAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZTogKG5v
ZGUudHlwZSA9PT0gIkZ1bmN0aW9uRGVjbGFyYXRpb24iID8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICJmdW5jdGlvbiIgOiAidmFyaWFibGUiKSwKKyAgICAgICAgICAgICAgICAgICAgYm9keTog
KGJvZHkudHlwZSA9PT0gIlByb2dyYW0iID8KKyAgICAgICAgICAgICAgICAgICAgICAgICJwcm9n
cmFtIiA6ICJmdW5jdGlvbiBib2R5IikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25E
ZWNsYXJhdGlvbiI6IGNoZWNrLAorICAgICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJib3Ro
IikgeworICAgICAgICAgICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw2OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUs
ZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgVmFsaWRhdGUgc3RyaW5ncyBwYXNzZWQg
dG8gdGhlIFJlZ0V4cCBjb25zdHJ1Y3RvcgorICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKKyAq
LworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKKworICAgIGZ1bmN0aW9uIGlzU3RyaW5nKG5vZGUpIHsKKyAgICAgICAg
cmV0dXJuIG5vZGUgJiYgbm9kZS50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIG5vZGUudmFs
dWUgPT09ICJzdHJpbmciOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNoZWNrKG5vZGUpIHsKKyAg
ICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBub2RlLmNhbGxl
ZS5uYW1lID09PSAiUmVnRXhwIiAmJiBpc1N0cmluZyhub2RlLmFyZ3VtZW50c1swXSkpIHsKKyAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKG5vZGUuYXJndW1l
bnRzWzFdKSkgeworICAgICAgICAgICAgICAgICAgICB2b2lkIG5ldyBSZWdFeHAobm9kZS5hcmd1
bWVudHNbMF0udmFsdWUsIG5vZGUuYXJndW1lbnRzWzFdLnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2b2lkIG5ldyBSZWdFeHAobm9kZS5hcmd1
bWVudHNbMF0udmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2go
ZSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGUubWVzc2FnZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAi
Q2FsbEV4cHJlc3Npb24iOiBjaGVjaywKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBjaGVjawor
ICAgIH07CisKK307CisKK30se31dLDcwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNhZ2Ugb2YgX19pdGVyYXRv
cl9fIHByb3BlcnR5CisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk1lbWJlckV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmIChub2RlLnByb3BlcnR5ICYmCisg
ICAgICAgICAgICAgICAgICAgIChub2RlLnByb3BlcnR5LnR5cGUgPT09ICJJZGVudGlmaWVyIiAm
JiBub2RlLnByb3BlcnR5Lm5hbWUgPT09ICJfX2l0ZXJhdG9yX18iICYmICFub2RlLmNvbXB1dGVk
KSB8fAorICAgICAgICAgICAgICAgICAgICAobm9kZS5wcm9wZXJ0eS50eXBlID09PSAiTGl0ZXJh
bCIgJiYgbm9kZS5wcm9wZXJ0eS52YWx1ZSA9PT0gIl9faXRlcmF0b3JfXyIpKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlJlc2VydmVkIG5hbWUgJ19faXRlcmF0b3Jf
XycuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw3
MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIGxhYmVscyB0aGF0IGFyZSB0aGUgc2FtZSBhcyBhbiBpZGVudGlmaWVy
CisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisgICAgZnVuY3Rpb24gZmluZElkZW50aWZpZXIoc2NvcGUsIGlkZW50aWZp
ZXIpIHsKKyAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7CisKKyAgICAgICAgc2NvcGUudmFyaWFi
bGVzLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS5uYW1lID09PSBpZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBzY29wZS5yZWZlcmVuY2VzLmZv
ckVhY2goZnVuY3Rpb24ocmVmZXJlbmNlKSB7CisgICAgICAgICAgICBpZiAocmVmZXJlbmNlLmlk
ZW50aWZpZXIubmFtZSA9PT0gaWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2
ZSBub3QgZm91bmQgdGhlIGlkZW50aWZpZXIgaW4gdGhpcyBzY29wZSwgY2hlY2sgdGhlIHBhcmVu
dAorICAgICAgICAvLyBzY29wZS4KKyAgICAgICAgaWYgKHNjb3BlLnVwcGVyICYmICFmb3VuZCkg
eworICAgICAgICAgICAgcmV0dXJuIGZpbmRJZGVudGlmaWVyKHNjb3BlLnVwcGVyLCBpZGVudGlm
aWVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxhYmVsZWRTdGF0ZW1lbnQiOiBmdW5j
dGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIC8vIEZldGNoIHRoZSBpbm5lcm1vc3Qgc2NvcGUu
CisgICAgICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7CisKKyAgICAgICAg
ICAgIC8vIFJlY3Vyc2l2ZWx5IGZpbmQgdGhlIGlkZW50aWZpZXIgd2Fsa2luZyB1cCB0aGUgc2Nv
cGUsIHN0YXJ0aW5nCisgICAgICAgICAgICAvLyB3aXRoIHRoZSBpbm5lcm1vc3Qgc2NvcGUuCisg
ICAgICAgICAgICBpZiAoZmluZElkZW50aWZpZXIoc2NvcGUsIG5vZGUubGFiZWwubmFtZSkpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRm91bmQgaWRlbnRpZmllciB3
aXRoIHNhbWUgbmFtZSBhcyBsYWJlbC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgfTsKKworfTsKKworfSx7fV0sNzI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IExhYmVsZWQgU3RhdGVtZW50cworICog
QGF1dGhvciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
ICAgIHJldHVybiB7CisKKyAgICAgICAgIkxhYmVsZWRTdGF0ZW1lbnQiOiBmdW5jdGlvbihub2Rl
KSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3RlZCBsYWJlbGVk
IHN0YXRlbWVudC4iKTsKKyAgICAgICAgfSwKKworICAgICAgICAiQnJlYWtTdGF0ZW1lbnQiOiBm
dW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmIChub2RlLmxhYmVsKSB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgbGFiZWwgaW4gYnJlYWsg
c3RhdGVtZW50LiIpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0sCisKKyAgICAgICAgIkNv
bnRpbnVlU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9k
ZS5sYWJlbCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVj
dGVkIGxhYmVsIGluIGNvbnRpbnVlIHN0YXRlbWVudC4iKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICB9CisKKworICAgIH07CisKK307CisKK30se31dLDczOltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgYmxvY2tz
IHdpdGggbm8gcmVhc29uIHRvIGV4aXN0CisgKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqLwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgICJCbG9ja1N0YXRlbWVu
dCI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgYW55IG9jY3Vy
cmVuY2Ugb2YgQmxvY2tTdGF0ZW1lbnQgPiBCbG9ja1N0YXRlbWVudCBvcgorICAgICAgICAgICAg
Ly8gUHJvZ3JhbSA+IEJsb2NrU3RhdGVtZW50CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gY29u
dGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9
PT0gIkJsb2NrU3RhdGVtZW50IiB8fCBwYXJlbnQudHlwZSA9PT0gIlByb2dyYW0iKSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkJsb2NrIGlzIG5lc3RlZCBpbnNpZGUg
YW5vdGhlciBibG9jay4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307
CisKK30se31dLDc0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICog
QGZpbGVvdmVydmlldyBSdWxlIHRvIGRpc2FsbG93IGlmIGFzIHRoZSBvbmx5IHN0YXRtZW5ldCBp
biBhbiBlbHNlIGJsb2NrCisgKiBAYXV0aG9yIEJyYW5kb24gTWlsbHMKKyAqLworInVzZSBzdHJp
Y3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgIHJldHVybiB7CisgICAgICAgICJJZlN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUp
IHsKKyAgICAgICAgICAgIHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpLAor
ICAgICAgICAgICAgICAgIHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKSwKKyAgICAgICAgICAgICAg
ICBncmFuZHBhcmVudCA9IGFuY2VzdG9ycy5wb3AoKTsKKworICAgICAgICAgICAgaWYgKHBhcmVu
dCAmJiBwYXJlbnQudHlwZSA9PT0gIkJsb2NrU3RhdGVtZW50IiAmJgorICAgICAgICAgICAgICAg
ICAgICBwYXJlbnQuYm9keS5sZW5ndGggPT09IDEgJiYgZ3JhbmRwYXJlbnQgJiYKKyAgICAgICAg
ICAgICAgICAgICAgZ3JhbmRwYXJlbnQudHlwZSA9PT0gIklmU3RhdGVtZW50IiAmJgorICAgICAg
ICAgICAgICAgICAgICBwYXJlbnQgPT09IGdyYW5kcGFyZW50LmFsdGVybmF0ZSkgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGlmIGFzIHRoZSBvbmx5
IHN0YXRlbWVudCBpbiBhbiBlbHNlIGJsb2NrLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKworfTsKKworfSx7fV0sNzU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjcmVhdGlvbiBvZiBmdW5j
dGlvbiBpbnNpZGUgYSBsb29wCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgZnVuY3Rpb24gY2hlY2tGb3JMb29wcyhub2RlKSB7CisgICAgICAg
IHZhciBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygpOworCisgICAgICAgIGlmIChh
bmNlc3RvcnMuc29tZShmdW5jdGlvbihhbmNlc3RvcikgeworICAgICAgICAgICAgcmV0dXJuIGFu
Y2VzdG9yLnR5cGUgPT09ICJGb3JTdGF0ZW1lbnQiIHx8IGFuY2VzdG9yLnR5cGUgPT09ICJXaGls
ZVN0YXRlbWVudCIgfHwgYW5jZXN0b3IudHlwZSA9PT0gIkRvV2hpbGVTdGF0ZW1lbnQiOworICAg
ICAgICB9KSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvbid0IG1ha2Ug
ZnVuY3Rpb25zIHdpdGhpbiBhIGxvb3AiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB7CisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBjaGVja0Zvckxvb3BzLAorICAgICAg
ICAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6IGNoZWNrRm9yTG9vcHMKKyAgICB9OworfTsKKworfSx7
fV0sNzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBncm91cGVkIHJlcXVpcmUgc3RhdGVtZW50cyBmb3IgTm9k
ZS5KUworICogQGF1dGhvciBSYXBoYWVsIFBpZ3VsbGEKKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAgICAidXNlIHN0cmljdCI7CisK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGJ1aWx0LWluIG1vZHVsZXMuCisg
ICAgICoKKyAgICAgKiBAcmV0dXJucyB7c3RyaW5nW119IEFuIGFycmF5IG9mIGJ1aWx0LWluIE5v
ZGUuanMgbW9kdWxlcy4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRCdWlsdGluTW9kdWxlcygp
IHsKKyAgICAgICAgLy8gVGhpcyBsaXN0IGlzIGdlbmVyYXRlZCB1c2luZyBgcmVxdWlyZSgicmVw
bCIpLl9idWlsdGluTGlicy5jb25jYXQoJ3JlcGwnKS5zb3J0KClgCisgICAgICAgIC8vIFRoaXMg
cGFydGljdWxhciBsaXN0IHdhcyBnZW5lcmF0ZWQgdXNpbmcgbm9kZSB2MC4xMS45CisgICAgICAg
IHJldHVybiBbCisgICAgICAgICAgICAiYXNzZXJ0IiwgImJ1ZmZlciIsICJjaGlsZF9wcm9jZXNz
IiwgImNsdXN0ZXIiLCAiY3J5cHRvIiwKKyAgICAgICAgICAgICJkZ3JhbSIsICJkbnMiLCAiZG9t
YWluIiwgImV2ZW50cyIsICJmcyIsICJodHRwIiwgImh0dHBzIiwKKyAgICAgICAgICAgICJuZXQi
LCAib3MiLCAicGF0aCIsICJwdW55Y29kZSIsICJxdWVyeXN0cmluZyIsICJyZWFkbGluZSIsCisg
ICAgICAgICAgICAicmVwbCIsICJzbWFsbG9jIiwgInN0cmVhbSIsICJzdHJpbmdfZGVjb2RlciIs
ICJ0bHMiLCAidHR5IiwKKyAgICAgICAgICAgICJ1cmwiLCAidXRpbCIsICJ2bSIsICJ6bGliIgor
ICAgICAgICBdOworICAgIH0KKworICAgIHZhciBCVUlMVElOX01PRFVMRVMgPSBnZXRCdWlsdGlu
TW9kdWxlcygpOworCisgICAgdmFyIERFQ0xfUkVRVUlSRSA9ICJyZXF1aXJlIiwKKyAgICAgICAg
REVDTF9VTklOSVRJQUxJWkVEID0gInVuaW5pdGlhbGl6ZWQiLAorICAgICAgICBERUNMX09USEVS
ID0gIm90aGVyIjsKKworICAgIHZhciBSRVFfQ09SRSA9ICJjb3JlIiwKKyAgICAgICAgUkVRX0ZJ
TEUgPSAiZmlsZSIsCisgICAgICAgIFJFUV9NT0RVTEUgPSAibW9kdWxlIiwKKyAgICAgICAgUkVR
X0NPTVBVVEVEID0gImNvbXB1dGVkIjsKKworICAgIC8qKgorICAgICAqIERldGVybWluZXMgdGhl
IHR5cGUgb2YgYSBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuCisgICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBpbml0RXhwcmVzc2lvbiBUaGUgaW5pdCBub2RlIG9mIHRoZSBWYXJpYWJsZURlY2xhcmF0b3Iu
CisgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHR5cGUgb2YgZGVjbGFyYXRpb24gcmVwcmVz
ZW50ZWQgYnkgdGhlIGV4cHJlc3Npb24uCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0RGVjbGFy
YXRpb25UeXBlKGluaXRFeHByZXNzaW9uKSB7CisgICAgICAgIGlmICghaW5pdEV4cHJlc3Npb24p
IHsKKyAgICAgICAgICAgIC8vICJ2YXIgeDsiCisgICAgICAgICAgICByZXR1cm4gREVDTF9VTklO
SVRJQUxJWkVEOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluaXRFeHByZXNzaW9uLnR5cGUg
PT09ICJDYWxsRXhwcmVzc2lvbiIgJiYKKyAgICAgICAgICAgIGluaXRFeHByZXNzaW9uLmNhbGxl
ZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYKKyAgICAgICAgICAgIGluaXRFeHByZXNzaW9uLmNh
bGxlZS5uYW1lID09PSAicmVxdWlyZSIKKyAgICAgICAgKSB7CisgICAgICAgICAgICAvLyAidmFy
IHggPSByZXF1aXJlKCd1dGlsJyk7IgorICAgICAgICAgICAgcmV0dXJuIERFQ0xfUkVRVUlSRTsK
KyAgICAgICAgfSBlbHNlIGlmIChpbml0RXhwcmVzc2lvbi50eXBlID09PSAiTWVtYmVyRXhwcmVz
c2lvbiIpIHsKKyAgICAgICAgICAgIC8vICJ2YXIgeCA9IHJlcXVpcmUoJ2dsb2InKS5HbG9iOyIK
KyAgICAgICAgICAgIHJldHVybiBnZXREZWNsYXJhdGlvblR5cGUoaW5pdEV4cHJlc3Npb24ub2Jq
ZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICJ2YXIgeCA9IDQyOyIKKyAgICAgICAgcmV0
dXJuIERFQ0xfT1RIRVI7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB0aGUg
dHlwZSBvZiBtb2R1bGUgdGhhdCBpcyBsb2FkZWQgdmlhIHJlcXVpcmUuCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBpbml0RXhwcmVzc2lvbiBUaGUgaW5pdCBub2RlIG9mIHRoZSBWYXJpYWJsZURl
Y2xhcmF0b3IuCisgICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG1vZHVsZSB0eXBlLgorICAg
ICAqLworICAgIGZ1bmN0aW9uIGluZmVyTW9kdWxlVHlwZShpbml0RXhwcmVzc2lvbikgeworICAg
ICAgICBpZiAoaW5pdEV4cHJlc3Npb24udHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iKSB7Cisg
ICAgICAgICAgICAvLyAidmFyIHggPSByZXF1aXJlKCdnbG9iJykuR2xvYjsiCisgICAgICAgICAg
ICByZXR1cm4gaW5mZXJNb2R1bGVUeXBlKGluaXRFeHByZXNzaW9uLm9iamVjdCk7CisgICAgICAg
IH0gZWxzZSBpZiAoaW5pdEV4cHJlc3Npb25bImFyZ3VtZW50cyJdLmxlbmd0aCA9PT0gMCkgewor
ICAgICAgICAgICAgLy8gInZhciB4ID0gcmVxdWlyZSgpOyIKKyAgICAgICAgICAgIHJldHVybiBS
RVFfQ09NUFVURUQ7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYXJnID0gaW5pdEV4cHJlc3Np
b25bImFyZ3VtZW50cyJdWzBdOworCisgICAgICAgIGlmIChhcmcudHlwZSAhPT0gIkxpdGVyYWwi
IHx8IHR5cGVvZiBhcmcudmFsdWUgIT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAvLyAidmFy
IHggPSByZXF1aXJlKDQyKTsiCisgICAgICAgICAgICByZXR1cm4gUkVRX0NPTVBVVEVEOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKEJVSUxUSU5fTU9EVUxFUy5pbmRleE9mKGFyZy52YWx1ZSkg
IT09IC0xKSB7CisgICAgICAgICAgICAvLyAidmFyIGZzID0gcmVxdWlyZSgnZnMnKTsiCisgICAg
ICAgICAgICByZXR1cm4gUkVRX0NPUkU7CisgICAgICAgIH0gZWxzZSBpZiAoL15cLnswLDJ9XC8v
LnRlc3QoYXJnLnZhbHVlKSkgeworICAgICAgICAgICAgLy8gInZhciB1dGlscyA9IHJlcXVpcmUo
Jy4vdXRpbHMnKTsiCisgICAgICAgICAgICByZXR1cm4gUkVRX0ZJTEU7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyAidmFyIGFzeW5jID0gcmVxdWlyZSgnYXN5bmMnKTsiCisgICAg
ICAgICAgICByZXR1cm4gUkVRX01PRFVMRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgor
ICAgICAqIENoZWNrIGlmIHRoZSBsaXN0IG9mIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpcyBtaXhl
ZCwgaS5lLiB3aGV0aGVyIGl0CisgICAgICogY29udGFpbnMgYm90aCByZXF1aXJlIGFuZCBvdGhl
ciBkZWNsYXJhdGlvbnMuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBkZWNsYXJhdGlvbnMgVGhl
IGxpc3Qgb2YgVmFyaWFibGVEZWNsYXJhdG9ycy4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
VHJ1ZSBpZiB0aGUgZGVjbGFyYXRpb25zIGFyZSBtaXhlZCwgZmFsc2UgaWYgbm90LgorICAgICAq
LworICAgIGZ1bmN0aW9uIGlzTWl4ZWQoZGVjbGFyYXRpb25zKSB7CisgICAgICAgIHZhciBjb250
YWlucyA9IHt9OworCisgICAgICAgIGRlY2xhcmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChkZWNs
YXJhdGlvbikgeworICAgICAgICAgICAgdmFyIHR5cGUgPSBnZXREZWNsYXJhdGlvblR5cGUoZGVj
bGFyYXRpb24uaW5pdCk7CisgICAgICAgICAgICBjb250YWluc1t0eXBlXSA9IHRydWU7CisgICAg
ICAgIH0pOworCisgICAgICAgIHJldHVybiAhISgKKyAgICAgICAgICAgIGNvbnRhaW5zW0RFQ0xf
UkVRVUlSRV0gJiYKKyAgICAgICAgICAgIChjb250YWluc1tERUNMX1VOSU5JVElBTElaRURdIHx8
IGNvbnRhaW5zW0RFQ0xfT1RIRVJdKQorICAgICAgICApOworICAgIH0KKworICAgIC8qKgorICAg
ICAqIENoZWNrIGlmIGFsbCByZXF1aXJlIGRlY2xhcmF0aW9ucyBpbiB0aGUgZ2l2ZW4gbGlzdCBh
cmUgb2YgdGhlIHNhbWUKKyAgICAgKiB0eXBlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gZGVj
bGFyYXRpb25zIFRoZSBsaXN0IG9mIFZhcmlhYmxlRGVjbGFyYXRvcnMuCisgICAgICogQHJldHVy
bnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGRlY2xhcmF0aW9ucyBhcmUgZ3JvdXBlZCwgZmFsc2Ug
aWYgbm90LgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzR3JvdXBlZChkZWNsYXJhdGlvbnMpIHsK
KyAgICAgICAgdmFyIGZvdW5kID0ge307CisKKyAgICAgICAgZGVjbGFyYXRpb25zLmZvckVhY2go
ZnVuY3Rpb24gKGRlY2xhcmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoZ2V0RGVjbGFyYXRpb25U
eXBlKGRlY2xhcmF0aW9uLmluaXQpID09PSBERUNMX1JFUVVJUkUpIHsKKyAgICAgICAgICAgICAg
ICBmb3VuZFtpbmZlck1vZHVsZVR5cGUoZGVjbGFyYXRpb24uaW5pdCldID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGZvdW5k
KS5sZW5ndGggPD0gMTsKKyAgICB9CisKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlZhcmlh
YmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgZ3JvdXBp
bmcgPSAhIWNvbnRleHQub3B0aW9uc1swXTsKKworICAgICAgICAgICAgaWYgKGlzTWl4ZWQobm9k
ZS5kZWNsYXJhdGlvbnMpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICJEbyBub3QgbWl4ICdy
ZXF1aXJlJyBhbmQgb3RoZXIgZGVjbGFyYXRpb25zLiIKKyAgICAgICAgICAgICAgICApOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChncm91cGluZyAmJiAhaXNHcm91cGVkKG5vZGUuZGVjbGFyYXRp
b25zKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KAorICAgICAgICAgICAgICAg
ICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAiRG8gbm90IG1peCBjb3JlLCBtb2R1bGUs
IGZpbGUgYW5kIGNvbXB1dGVkIHJlcXVpcmVzLiIKKyAgICAgICAgICAgICAgICApOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sNzc6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IG1p
eGVkIHNwYWNlcyBhbmQgdGFicyBmb3IgaW5kZW50YXRpb24KKyAqIEBhdXRob3IgSmFyeSBOaWVi
dXIKKyAqIEBjb3B5cmlnaHQgMjAxNCBOaWNob2xhcyBDLiBaYWthcy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIEBjb3B5cmlnaHQgMjAxNCBKYXJ5IE5pZWJ1ci4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVs
ZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9
IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHZhciBzbWFydFRhYnMgPSBjb250ZXh0Lm9wdGlv
bnNbMF07CisKKyAgICB2YXIgQ09NTUVOVF9TVEFSVCA9IC9eXHMqXC9cKi8sCisgICAgICAgIE1B
WUJFX0NPTU1FTlQgPSAvXlxzKlwqLzsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAv
LyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAg
ICAgICJQcm9ncmFtIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAg
ICAgICAqIEF0IGxlYXN0IG9uZSBzcGFjZSBmb2xsb3dlZCBieSBhIHRhYgorICAgICAgICAgICAg
ICogb3IgdGhlIHJldmVyc2UgYmVmb3JlIG5vbi10YWIvLXNwYWNlCisgICAgICAgICAgICAgKiBj
aGFyYWN0ZXJzIGJlZ2luLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICB2YXIgcmVnZXgg
PSAvXig/PVtcdCBdKihcdCB8IFx0KSkvLAorICAgICAgICAgICAgICAgIG1hdGNoLAorICAgICAg
ICAgICAgICAgIGxpbmVzID0gY29udGV4dC5nZXRTb3VyY2VMaW5lcygpOworCisgICAgICAgICAg
ICBpZiAoc21hcnRUYWJzKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAg
KiBBdCBsZWFzdCBvbmUgc3BhY2UgZm9sbG93ZWQgYnkgYSB0YWIKKyAgICAgICAgICAgICAgICAg
KiBiZWZvcmUgbm9uLXRhYi8tc3BhY2UgY2hhcmFjdGVycyBiZWdpbi4KKyAgICAgICAgICAgICAg
ICAgKi8KKyAgICAgICAgICAgICAgICByZWdleCA9IC9eKD89W1x0IF0qIFx0KS87CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZSwgaSkgewor
ICAgICAgICAgICAgICAgIG1hdGNoID0gcmVnZXguZXhlYyhsaW5lKTsKKworICAgICAgICAgICAg
ICAgIGlmIChtYXRjaCkgeworCisgICAgICAgICAgICAgICAgICAgIGlmICghTUFZQkVfQ09NTUVO
VC50ZXN0KGxpbmUpICYmICFDT01NRU5UX1NUQVJULnRlc3QobGluZXNbaSAtIDFdKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgeyBsaW5lOiBpICsgMSwg
Y29sdW1uOiBtYXRjaC5pbmRleCArIDEgfSwgIk1peGVkIHNwYWNlcyBhbmQgdGFicy4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKworICAgIH07CisKK307CisKK30se31dLDc4OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hl
biB1c2luZyBtdWx0aWxpbmUgc3RyaW5ncworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVu
Y3Rpb24obm9kZSkgeworICAgICAgICAgICAgdmFyIGxpbmVCcmVhayA9IC9cbi87CisgICAgICAg
ICAgICBpZiAobGluZUJyZWFrLnRlc3Qobm9kZS5yYXcpKSB7CisgICAgICAgICAgICAgICAgY29u
dGV4dC5yZXBvcnQobm9kZSwgIk11bHRpbGluZSBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gYnJvd3Nl
cnMgc3VwcG9ydGluZyBFUzUgb25seS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisKK307CisKK30se31dLDc5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsK
Ky8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiByZS1hc3NpZ25pbmcgbmF0
aXZlIG9iamVjdHMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmlj
dCI7CisKKyAgICB2YXIgbmF0aXZlT2JqZWN0cyA9IFsiQXJyYXkiLCAiQm9vbGVhbiIsICJEYXRl
IiwgImRlY29kZVVSSSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZGVjb2RlVVJJQ29tcG9u
ZW50IiwgImVuY29kZVVSSSIsICJlbmNvZGVVUklDb21wb25lbnQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIkVycm9yIiwgImV2YWwiLCAiRXZhbEVycm9yIiwgIkZ1bmN0aW9uIiwgImlzRmlu
aXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpc05hTiIsICJKU09OIiwgIk1hdGgiLCAi
TnVtYmVyIiwgIk9iamVjdCIsICJwYXJzZUludCIsCisgICAgICAgICAgICAgICAgICAgICAgICAi
cGFyc2VGbG9hdCIsICJSYW5nZUVycm9yIiwgIlJlZmVyZW5jZUVycm9yIiwgIlJlZ0V4cCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIiwgIlN5bnRheEVycm9yIiwgIlR5cGVFcnJv
ciIsICJVUklFcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAiTWFwIiwgIk5hTiIsICJT
ZXQiLCAiV2Vha01hcCIsICJJbmZpbml0eSIsICJ1bmRlZmluZWQiXTsKKworICAgIHJldHVybiB7
CisKKyAgICAgICAgIkFzc2lnbm1lbnRFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworICAg
ICAgICAgICAgaWYgKG5hdGl2ZU9iamVjdHMuaW5kZXhPZihub2RlLmxlZnQubmFtZSkgPj0gMCkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIG5vZGUubGVmdC5uYW1lICsg
IiBpcyBhIHJlYWQtb25seSBuYXRpdmUgb2JqZWN0LiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9LAorCisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0b3IiOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAobmF0aXZlT2JqZWN0cy5pbmRleE9mKG5vZGUuaWQubmFtZSkgPj0gMCkg
eworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZWRlZmluaXRpb24gb2Yg
J3t7bmF0aXZlT2JqZWN0fX0nLiIsIHsgbmF0aXZlT2JqZWN0OiBub2RlLmlkLm5hbWUgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw4MDpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQSBydWxl
IHRvIGRpc2FsbG93IG5lZ2F0ZWQgbGVmdCBvcGVyYW5kcyBvZiB0aGUgYGluYCBvcGVyYXRvcgor
ICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IHJldHVybiB7CisKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gImluIiAmJiBub2RlLmxlZnQudHlw
ZSA9PT0gIlVuYXJ5RXhwcmVzc2lvbiIgJiYgbm9kZS5sZWZ0Lm9wZXJhdG9yID09PSAiISIpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIGBpbmAgZXhwcmVzc2lv
bidzIGxlZnQgb3BlcmFuZCBpcyBuZWdhdGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9OworCit9OworCit9LHt9XSw4MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0
cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG5lc3RlZCB0ZXJuYXJ5IGV4
cHJlc3Npb25zCisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ug
c3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUudHlwZSA9
PT0gIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIgfHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5j
b25zZXF1ZW50LnR5cGUgPT09ICJDb25kaXRpb25hbEV4cHJlc3Npb24iKSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkRvIG5vdCBuZXN0IHRlcm5hcnkgZXhwcmVzc2lv
bnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9OworCit9LHt9XSw4Mjpb
ZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcg
UnVsZSB0byBmbGFnIHdoZW4gdXNpbmcgbmV3IEZ1bmN0aW9uCisgKiBAYXV0aG9yIElseWEgVm9s
b2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29u
dGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAi
TmV3RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmNh
bGxlZS5uYW1lID09PSAiRnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBv
cnQobm9kZSwgIlRoZSBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyBldmFsLiIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODM6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEEgcnVsZSB0byBkaXNh
bGxvdyBjYWxscyB0byB0aGUgT2JqZWN0IGNvbnN0cnVjdG9yCisgKiBAYXV0aG9yIE1hdHQgRHVW
YWxsIDxodHRwOi8vd3d3Lm1hdHRkdXZhbGwuY29tLz4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIHJldHVybiB7CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBmdW5jdGlvbihub2Rl
KSB7CisgICAgICAgICAgICBpZiAobm9kZS5jYWxsZWUubmFtZSA9PT0gIk9iamVjdCIpIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGhlIG9iamVjdCBsaXRlcmFsIG5v
dGF0aW9uIHt9IGlzIHByZWZlcnJhYmxlLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKworfTsKKworfSx7fV0sODQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxsb3cgdXNlIG9mIG5ldyBvcGVy
YXRvciB3aXRoIHRoZSBgcmVxdWlyZWAgZnVuY3Rpb24KKyAqIEBhdXRob3IgV2lsIE1vb3JlIElJ
SQorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTmV3
RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmNhbGxl
ZS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5jYWxsZWUubmFtZSA9PT0gInJlcXVpcmUi
KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgdXNl
IG9mIG5ldyB3aXRoIHJlcXVpcmUuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
OworCit9OworCit9LHt9XSw4NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gdXNpbmcgY29uc3RydWN0b3Ig
Zm9yIHdyYXBwZXIgb2JqZWN0cworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBm
dW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgd3JhcHBlck9iamVjdHMgPSBbIlN0cmlu
ZyIsICJOdW1iZXIiLCAiQm9vbGVhbiIsICJNYXRoIiwgIkpTT04iXTsKKyAgICAgICAgICAgIGlm
ICh3cmFwcGVyT2JqZWN0cy5pbmRleE9mKG5vZGUuY2FsbGVlLm5hbWUpID4gLTEpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRG8gbm90IHVzZSB7e2ZufX0gYXMgYSBj
b25zdHJ1Y3Rvci4iLCB7IGZuOiBub2RlLmNhbGxlZS5uYW1lIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sODY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9k
dWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBzdGF0ZW1l
bnRzIHdpdGggZnVuY3Rpb24gaW52b2NhdGlvbiBwcmVjZWRlZCBieQorICogIm5ldyIgYW5kIG5v
dCBwYXJ0IG9mIGFzc2lnbm1lbnQKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJFeHByZXNzaW9uU3RhdGVt
ZW50IjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICBpZiAobm9kZS5leHByZXNzaW9u
LnR5cGUgPT09ICJOZXdFeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsICJEbyBub3QgdXNlICduZXcnIGZvciBzaWRlIGVmZmVjdHMuIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSw4NzpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHVzZSBvZiBhbiBvYmplY3QgcHJvcGVydHkgb2YgdGhlIGdsb2JhbCBvYmplY3QgKE1hdGggYW5k
IEpTT04pIGFzIGEgZnVuY3Rpb24KKyAqIEBhdXRob3IgSmFtZXMgQWxsYXJkaWNlCisgKi8KKwor
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAg
ICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4geworICAgICAgICAiQ2FsbEV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlID09
PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5vZGUuY2FsbGVl
Lm5hbWU7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICJNYXRoIiB8fCBuYW1lID09PSAi
SlNPTiIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIid7e25h
bWV9fScgaXMgbm90IGEgZnVuY3Rpb24uIiwgeyBuYW1lOiBuYW1lIH0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDg4
OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmll
dyBSdWxlIHRvIGZsYWcgb2N0YWwgZXNjYXBlIHNlcXVlbmNlcyBpbiBzdHJpbmcgbGl0ZXJhbHMu
CisgKiBAYXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgIT09ICJzdHJpbmciKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1hdGNoID0g
bm9kZS5yYXcubWF0Y2goL14oW15cXF18XFxbXjAtN10pKlxcKFswLTddKS8pLAorICAgICAgICAg
ICAgICAgIG9jdGFsRGlnaXQ7CisKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAg
ICAgICAgIG9jdGFsRGlnaXQgPSBtYXRjaFsyXTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiRG9uJ3QgdXNlIG9jdGFsOiAnXFx7e29jdGFsRGlnaXR9fScuIFVzZSAnXFx1
Li4uLicgaW5zdGVhZC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgeyBvY3RhbERpZ2l0OiBv
Y3RhbERpZ2l0IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9OworCit9Owor
Cit9LHt9XSw4OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBm
aWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gaW5pdGlhbGl6aW5nIG9jdGFsIGxpdGVyYWwK
KyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBy
ZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAg
ICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAibnVtYmVyIiAmJiAvXjBbMC03XS8udGVzdChu
b2RlLnJhdykpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiT2N0YWwg
bGl0ZXJhbHMgc2hvdWxkIG5vdCBiZSB1c2VkLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfTsKKworfTsKKworfSx7fV0sOTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9y
dHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93IHN0cmluZyBjb25jYXRlbmF0aW9u
IHdoZW4gdXNpbmcgX19kaXJuYW1lIGFuZCBfX2ZpbGVuYW1lCisgKiBAYXV0aG9yIE5pY2hvbGFz
IEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgTUFUQ0hFUiA9IC9eX18oPzpk
aXJ8ZmlsZSluYW1lJC87CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGlj
CisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgcmV0dXJuIHsKKworICAgICAgICAiQmlu
YXJ5RXhwcmVzc2lvbiI6IGZ1bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIGxlZnQg
PSBub2RlLmxlZnQsCisgICAgICAgICAgICAgICAgcmlnaHQgPSBub2RlLnJpZ2h0OworCisgICAg
ICAgICAgICBpZiAobm9kZS5vcGVyYXRvciA9PT0gIisiICYmCisgICAgICAgICAgICAgICAgICAg
ICgobGVmdC50eXBlID09PSAiSWRlbnRpZmllciIgJiYgTUFUQ0hFUi50ZXN0KGxlZnQubmFtZSkp
IHx8CisgICAgICAgICAgICAgICAgICAgIChyaWdodC50eXBlID09PSAiSWRlbnRpZmllciIgJiYg
TUFUQ0hFUi50ZXN0KHJpZ2h0Lm5hbWUpKSkKKyAgICAgICAgICAgICkgeworCisgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVzZSBwYXRoLmpvaW4oKSBvciBwYXRoLnJlc29s
dmUoKSBpbnN0ZWFkIG9mICsgdG8gY3JlYXRlIHBhdGhzLiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSw5MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiB1
bmFyeSBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBvcGVyYXRvcnMuCisgKiBAYXV0aG9yIElhbiBD
aHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisK
KyAgICAgICAgIlVwZGF0ZUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAg
ICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5hcnkgb3BlcmF0b3IgJyIgKyBub2RlLm9wZXJhdG9y
ICsgIicgdXNlZC4iKTsKKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sOTI6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERp
c2FsbG93IHRoZSB1c2Ugb2YgcHJvY2Vzcy5lbnYoKQorICogQGF1dGhvciBWaWduZXNoIEFuYW5k
CisgKiBAY29weXJpZ2h0IDIwMTQgVmlnbmVzaCBBbmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIk1lbWJlckV4cHJl
c3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgb2JqZWN0TmFtZSA9IG5v
ZGUub2JqZWN0Lm5hbWUsCisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbm9kZS5wcm9w
ZXJ0eS5uYW1lOworCisgICAgICAgICAgICBpZiAob2JqZWN0TmFtZSA9PT0gInByb2Nlc3MiICYm
ICFub2RlLmNvbXB1dGVkICYmIHByb3BlcnR5TmFtZSAmJiBwcm9wZXJ0eU5hbWUgPT09ICJlbnYi
KSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgdXNl
IG9mIHByb2Nlc3MuZW52LiIpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIH07
CisKK307CisKK30se31dLDkzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8q
KgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyB0aGUgdXNlIG9mIHByb2Nlc3MuZXhpdCgpCisg
KiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgcmV0dXJuIHsKKworICAgICAgICAiQ2FsbEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2Rl
KSB7CisgICAgICAgICAgICB2YXIgY2FsbGVlID0gbm9kZS5jYWxsZWU7CisKKyAgICAgICAgICAg
IGlmIChjYWxsZWUudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmIGNhbGxlZS5vYmplY3Qu
bmFtZSA9PT0gInByb2Nlc3MiICYmCisgICAgICAgICAgICAgICAgY2FsbGVlLnByb3BlcnR5Lm5h
bWUgPT09ICJleGl0IgorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIkRvbid0IHVzZSBwcm9jZXNzLmV4aXQoKTsgdGhyb3cgYW4gZXJyb3IgaW5z
dGVhZC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7
fV0sOTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB1c2FnZSBvZiBfX3Byb3RvX18gcHJvcGVydHkKKyAqIEBhdXRo
b3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICByZXR1cm4gewor
CisgICAgICAgICJNZW1iZXJFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAg
ICAgICBpZiAobm9kZS5wcm9wZXJ0eSAmJgorICAgICAgICAgICAgICAgICAgICAobm9kZS5wcm9w
ZXJ0eS50eXBlID09PSAiSWRlbnRpZmllciIgJiYgbm9kZS5wcm9wZXJ0eS5uYW1lID09PSAiX19w
cm90b19fIiAmJiAhbm9kZS5jb21wdXRlZCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKG5vZGUu
cHJvcGVydHkudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUucHJvcGVydHkudmFsdWUgPT09ICJf
X3Byb3RvX18iKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJUaGUg
J19fcHJvdG9fXycgcHJvcGVydHkgaXMgZGVwcmVjYXRlZC4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDk1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVs
ZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hlbiB0aGUg
c2FtZSB2YXJpYWJsZSBpcyBkZWNsYXJlZCBtb3JlIHRoZW4gb25jZS4KKyAqIEBhdXRob3IgSWx5
YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
bihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBmdW5jdGlvbiBmaW5kVmFy
aWFibGVzKCkgeworICAgICAgICB2YXIgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7CisKKyAg
ICAgICAgc2NvcGUudmFyaWFibGVzLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHsKKyAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS5pZGVudGlmaWVycyAmJiB2YXJpYWJsZS5pZGVudGlmaWVycy5s
ZW5ndGggPiAxKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUuaWRlbnRpZmllcnMuc29ydChm
dW5jdGlvbihhLCBiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnJhbmdlWzFdIC0g
Yi5yYW5nZVsxXTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAxLCBsID0gdmFyaWFibGUuaWRlbnRpZmllcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHZhcmlhYmxlLmlkZW50aWZpZXJz
W2ldLCAie3thfX0gaXMgYWxyZWFkeSBkZWZpbmVkIiwge2E6IHZhcmlhYmxlLm5hbWV9KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAg
IHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjogZmluZFZhcmlhYmxlcywKKyAgICAgICAgIkZ1
bmN0aW9uRXhwcmVzc2lvbiI6IGZpbmRWYXJpYWJsZXMsCisgICAgICAgICJGdW5jdGlvbkRlY2xh
cmF0aW9uIjogZmluZFZhcmlhYmxlcworICAgIH07Cit9OworCit9LHt9XSw5NjpbZnVuY3Rpb24o
cmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBj
b3VudCBtdWx0aXBsZSBzcGFjZXMgaW4gcmVndWxhciBleHByZXNzaW9ucworICogQGF1dGhvciBN
YXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbS8+CisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJMaXRlcmFsIjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgdmFyIHRva2VuID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2Rl
LCAxKVswXSwKKyAgICAgICAgICAgICAgICBub2RlVHlwZSA9IHRva2VuLnR5cGUsCisgICAgICAg
ICAgICAgICAgbm9kZVZhbHVlID0gdG9rZW4udmFsdWUsCisgICAgICAgICAgICAgICAgbXVsdGlw
bGVTcGFjZXNSZWdleCA9IC8oIHsyLH0pKz8vLAorICAgICAgICAgICAgICAgIHJlZ2V4UmVzdWx0
czsKKworICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09PSAiUmVndWxhckV4cHJlc3Npb24iKSB7
CisgICAgICAgICAgICAgICAgcmVnZXhSZXN1bHRzID0gbXVsdGlwbGVTcGFjZXNSZWdleC5leGVj
KG5vZGVWYWx1ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAocmVnZXhSZXN1bHRzICE9PSBudWxs
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJTcGFjZXMgYXJl
IGhhcmQgdG8gY291bnQuIFVzZSB7IiArIHJlZ2V4UmVzdWx0c1swXS5sZW5ndGggKyAifS4iKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9
OworCit9LHt9XSw5NzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyByZXNlcnZlZCB3b3JkcyBiZWluZyB1c2Vk
IGFzIGtleXMKKyAqIEBhdXRob3IgRW1pbCBCYXkKKyAqIEBjb3B5cmlnaHQgMjAxNCBFbWlsIEJh
eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhw
b3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZh
ciBNRVNTQUdFID0gIlJlc2VydmVkIHdvcmQgJ3t7a2V5fX0nIHVzZWQgYXMga2V5LiI7CisKKyAg
ICB2YXIgcmVzZXJ2ZWRXb3JkcyA9IFsKKyAgICAgICAgImFic3RyYWN0IiwKKyAgICAgICAgImJv
b2xlYW4iLCAiYnJlYWsiLCAiYnl0ZSIsCisgICAgICAgICJjYXNlIiwgImNhdGNoIiwgImNoYXIi
LCAiY2xhc3MiLCAiY29uc3QiLCAiY29udGludWUiLAorICAgICAgICAiZGVidWdnZXIiLCAiZGVm
YXVsdCIsICJkZWxldGUiLCAiZG8iLCAiZG91YmxlIiwKKyAgICAgICAgImVsc2UiLCAiZW51bSIs
ICJleHBvcnQiLCAiZXh0ZW5kcyIsCisgICAgICAgICJmaW5hbCIsICJmaW5hbGx5IiwgImZsb2F0
IiwgImZvciIsICJmdW5jdGlvbiIsCisgICAgICAgICJnb3RvIiwKKyAgICAgICAgImlmIiwgImlt
cGxlbWVudHMiLCAiaW1wb3J0IiwgImluIiwgImluc3RhbmNlb2YiLCAiaW50IiwgImludGVyZmFj
ZSIsCisgICAgICAgICJsb25nIiwKKyAgICAgICAgIm5hdGl2ZSIsICJuZXciLAorICAgICAgICAi
cGFja2FnZSIsICJwcml2YXRlIiwgInByb3RlY3RlZCIsICJwdWJsaWMiLAorICAgICAgICAicmV0
dXJuIiwKKyAgICAgICAgInNob3J0IiwgInN0YXRpYyIsICJzdXBlciIsICJzd2l0Y2giLCAic3lu
Y2hyb25pemVkIiwKKyAgICAgICAgInRoaXMiLCAidGhyb3ciLCAidGhyb3dzIiwgInRyYW5zaWVu
dCIsICJ0cnkiLCAidHlwZW9mIiwKKyAgICAgICAgInZhciIsICJ2b2lkIiwgInZvbGF0aWxlIiwK
KyAgICAgICAgIndoaWxlIiwgIndpdGgiCisgICAgXTsKKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgIk9iamVjdEV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBub2Rl
LnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eSkgeworCisgICAgICAgICAgICAg
ICAgaWYgKHByb3BlcnR5LmtleS50eXBlID09PSAiSWRlbnRpZmllciIpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIGtleU5hbWUgPSBwcm9wZXJ0eS5rZXkubmFtZTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKCIiICsga2V5TmFtZSkgIT09IC0xKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBNRVNTQUdFLCB7
IGtleToga2V5TmFtZSB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31d
LDk4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVy
dmlldyBSZXN0cmljdCB1c2FnZSBvZiBzcGVjaWZpZWQgbm9kZSBtb2R1bGVzLgorICogQGF1dGhv
ciBDaHJpc3RpYW4gU2NodWx6CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY29udGV4dCkgeworICAgIC8vIHRyaW0gcmVzdHJp
Y3RlZCBtb2R1bGUgbmFtZXMKKyAgICB2YXIgcmVzdHJpY3RlZE1vZHVsZXMgPSBjb250ZXh0Lm9w
dGlvbnM7CisKKyAgICAvLyBpZiBubyBtb2R1bGVzIGFyZSByZXN0cmljdGVkIHdlIGRvbid0IG5l
ZWQgdG8gY2hlY2sgdGhlIENhbGxFeHByZXNzaW9ucworICAgIGlmIChyZXN0cmljdGVkTW9kdWxl
cy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgcmV0dXJuIHt9OworICAgIH0KKworICAgIC8qKgor
ICAgICAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgbm9kZSBpcyBhIHN0cmluZyBsaXRlcmFsLgor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBA
cmV0dXJucyB7Ym9vbGVhbn0gSWYgdGhlIG5vZGUgaXMgYSBzdHJpbmcgbGl0ZXJhbC4KKyAgICAg
Ki8KKyAgICBmdW5jdGlvbiBpc1N0cmluZyhub2RlKSB7CisgICAgICAgIHJldHVybiBub2RlICYm
IG5vZGUudHlwZSA9PT0gIkxpdGVyYWwiICYmIHR5cGVvZiBub2RlLnZhbHVlID09PSAic3RyaW5n
IjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGdW5jdGlvbiB0byBjaGVjayBpZiBhIG5vZGUg
aXMgYSByZXF1aXJlIGNhbGwuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBub2Rl
IHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBJZiB0aGUgbm9kZSBpcyBhIHJl
cXVpcmUgY2FsbC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1JlcXVpcmVDYWxsKG5vZGUpIHsK
KyAgICAgICAgcmV0dXJuIG5vZGUuY2FsbGVlLnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiBub2Rl
LmNhbGxlZS5uYW1lID09PSAicmVxdWlyZSI7CisgICAgfQorCisgICAgLyoqCisgICAgICogRnVu
Y3Rpb24gdG8gY2hlY2sgaWYgYSBub2RlIGhhcyBhbiBhcmd1bWVudCB0aGF0IGlzIGFuIHJlc3Ry
aWN0ZWQgbW9kdWxlIGFuZCByZXR1cm4gaXRzIG5hbWUuCisgICAgICogQHBhcmFtIHtBU1ROb2Rl
fSBub2RlIFRoZSBub2RlIHRvIGNoZWNrCisgICAgICogQHJldHVybnMge3VuZGVmaW5lZHxTdHJp
bmd9IHJlc3RyaWN0ZWQgbW9kdWxlIG5hbWUgb3IgdW5kZWZpbmVkIGlmIG5vZGUgYXJndW1lbnQg
aXNuJ3QgcmVzdHJpY3RlZC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRSZXN0cmljdGVkTW9k
dWxlTmFtZShub2RlKSB7CisgICAgICAgIHZhciBtb2R1bGVOYW1lOworCisgICAgICAgIC8vIG5v
ZGUgaGFzIGFyZ3VtZW50cyBhbmQgZmlyc3QgYXJndW1lbnQgaXMgc3RyaW5nCisgICAgICAgIGlm
IChub2RlLmFyZ3VtZW50cy5sZW5ndGggJiYgaXNTdHJpbmcobm9kZS5hcmd1bWVudHNbMF0pKSB7
CisgICAgICAgICAgICB2YXIgYXJndW1lbnRWYWx1ZSA9IG5vZGUuYXJndW1lbnRzWzBdLnZhbHVl
LnRyaW0oKTsKKworICAgICAgICAgICAgLy8gY2hlY2sgaWYgYXJndW1lbnQgdmFsdWUgaXMgaW4g
cmVzdHJpY3RlZCBtb2R1bGVzIGFycmF5CisgICAgICAgICAgICBpZiAocmVzdHJpY3RlZE1vZHVs
ZXMuaW5kZXhPZihhcmd1bWVudFZhbHVlKSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBtb2R1
bGVOYW1lID0gYXJndW1lbnRWYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBtb2R1bGVOYW1lOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJD
YWxsRXhwcmVzc2lvbiI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICBpZiAoaXNSZXF1
aXJlQ2FsbChub2RlKSkgeworICAgICAgICAgICAgICAgIHZhciByZXN0cmljdGVkTW9kdWxlTmFt
ZSA9IGdldFJlc3RyaWN0ZWRNb2R1bGVOYW1lKG5vZGUpOworCisgICAgICAgICAgICAgICAgaWYg
KHJlc3RyaWN0ZWRNb2R1bGVOYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVw
b3J0KG5vZGUsICIne3ttb2R1bGVOYW1lfX0nIG1vZHVsZSBpcyByZXN0cmljdGVkIGZyb20gYmVp
bmcgdXNlZC4iLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiByZXN0cmlj
dGVkTW9kdWxlTmFtZQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0sOTk6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyB3aGVuIHJldHVybiBzdGF0ZW1lbnQgY29udGFpbnMgYXNzaWdubWVudAorICogQGF1
dGhvciBJbHlhIFZvbG9kaW4KKyAqLworInVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitt
b2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIHJldHVybiB7CisKKyAg
ICAgICAgIlJldHVyblN0YXRlbWVudCI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGlm
IChub2RlLmFyZ3VtZW50ICYmIG5vZGUuYXJndW1lbnQudHlwZSA9PT0gIkFzc2lnbm1lbnRFeHBy
ZXNzaW9uIikgeworICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJSZXR1cm4g
c3RhdGVtZW50IHNob3VsZCBub3QgY29udGFpbiBhc3NpZ25tZW50LiIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTAwOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgd2hl
biB1c2luZyBqYXZhc2NyaXB0OiB1cmxzCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisv
KmpzaGludCBzY3JpcHR1cmw6IHRydWUgKi8KKy8qZXNsaW50IG5vLXNjcmlwdC11cmw6IDAqLwor
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTGl0ZXJhbCI6IGZ1bmN0
aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIHZhbHVlOworCisgICAgICAgICAgICBpZiAo
bm9kZS52YWx1ZSAmJiB0eXBlb2Yobm9kZS52YWx1ZSkgPT09ICJzdHJpbmciKSB7CisgICAgICAg
ICAgICAgICAgdmFsdWUgPSBub2RlLnZhbHVlLnRvTG93ZXJDYXNlKCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAodmFsdWUuaW5kZXhPZigiamF2YXNjcmlwdDoiKSA9PT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiU2NyaXB0IFVSTCBpcyBhIGZvcm0gb2Yg
ZXZhbC4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9OworCit9OworCit9LHt9XSwxMDE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMp
eworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBjb21wYXJpc29uIHdoZXJlIGxl
ZnQgcGFydCBpcyB0aGUgc2FtZSBhcyB0aGUgcmlnaHQKKyAqIHBhcnQuCisgKiBAYXV0aG9yIEls
eWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIg
b3BlcmF0b3JzID0gWyI9PT0iLCAiPT0iLCAiIT09IiwiIT0iLCAiPiIsICI8IiwgIj49IiwgIjw9
Il07CisgICAgICAgICAgICBpZiAob3BlcmF0b3JzLmluZGV4T2Yobm9kZS5vcGVyYXRvcikgPiAt
MSAmJgorICAgICAgICAgICAgICAgIChub2RlLmxlZnQudHlwZSA9PT0gIklkZW50aWZpZXIiICYm
IG5vZGUucmlnaHQudHlwZSA9PT0gIklkZW50aWZpZXIiICYmIG5vZGUubGVmdC5uYW1lID09PSBu
b2RlLnJpZ2h0Lm5hbWUgfHwKKyAgICAgICAgICAgICAgICBub2RlLmxlZnQudHlwZSA9PT0gIkxp
dGVyYWwiICYmIG5vZGUucmlnaHQudHlwZSA9PT0gIkxpdGVyYWwiICYmIG5vZGUubGVmdC52YWx1
ZSA9PT0gbm9kZS5yaWdodC52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiQ29tcGFyaW5nIHRvIGl0c2VsZiBpcyBwb3RlbnRpYWxseSBwb2ludGxlc3MuIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMDI6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gZmxhZyB1c2Ugb2YgY29tbWEgb3BlcmF0b3IKKyAqIEBhdXRob3IgQnJhbmRvbiBNaWxs
cworICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgLyoqCisgICAgICogUGFydHMgb2YgdGhl
IGdyYW1tYXIgdGhhdCBhcmUgcmVxdWlyZWQgdG8gaGF2ZSBwYXJlbnMuCisgICAgICovCisgICAg
dmFyIHBhcmVudGhlc2l6ZWQgPSB7CisgICAgICAgICJEb1doaWxlU3RhdGVtZW50IjogInRlc3Qi
LAorICAgICAgICAiSWZTdGF0ZW1lbnQiOiAidGVzdCIsCisgICAgICAgICJTd2l0Y2hTdGF0ZW1l
bnQiOiAiZGlzY3JpbWluYW50IiwKKyAgICAgICAgIldoaWxlU3RhdGVtZW50IjogInRlc3QiLAor
ICAgICAgICAiV2l0aFN0YXRlbWVudCI6ICJvYmplY3QiCisKKyAgICAgICAgLy8gT21pdHRpbmcg
Q2FsbEV4cHJlc3Npb24gLSBjb21tYXMgYXJlIHBhcnNlZCBhcyBhcmd1bWVudCBzZXBhcmF0b3Jz
CisgICAgICAgIC8vIE9taXR0aW5nIE5ld0V4cHJlc3Npb24gLSBjb21tYXMgYXJlIHBhcnNlZCBh
cyBhcmd1bWVudCBzZXBhcmF0b3JzCisgICAgICAgIC8vIE9taXR0aW5nIEZvckluU3RhdGVtZW50
IC0gcGFydHMgYXJlbid0IGluZGl2aWR1YWxseSBwYXJlbnRoZXNpc2VkCisgICAgICAgIC8vIE9t
aXR0aW5nIEZvclN0YXRlbWVudCAtIHBhcnRzIGFyZW4ndCBpbmRpdmlkdWFsbHkgcGFyZW50aGVz
aXNlZAorICAgIH07CisKKyAgICAvKioKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBub2Rl
IGlzIHJlcXVpcmVkIGJ5IHRoZSBncmFtbWFyIHRvIGJlIHdyYXBwZWQgaW4KKyAgICAgKiBwYXJl
bnMsIGUuZy4gdGhlIHRlc3Qgb2YgYW4gaWYgc3RhdGVtZW50LgorICAgICAqIEBwYXJhbSB7QVNU
Tm9kZX0gbm9kZSAtIFRoZSBBU1Qgbm9kZQorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVl
IGlmIHBhcmVucyBhcm91bmQgbm9kZSBiZWxvbmcgdG8gcGFyZW50IG5vZGUuCisgICAgICovCisg
ICAgZnVuY3Rpb24gcmVxdWlyZXNFeHRyYVBhcmVucyhub2RlKSB7CisgICAgICAgIHJldHVybiBu
b2RlLnBhcmVudCAmJiBwYXJlbnRoZXNpemVkW25vZGUucGFyZW50LnR5cGVdICE9IG51bGwgJiYK
KyAgICAgICAgICAgICAgICBub2RlID09PSBub2RlLnBhcmVudFtwYXJlbnRoZXNpemVkW25vZGUu
cGFyZW50LnR5cGVdXTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiBhIG5vZGUg
aXMgd3JhcHBlZCBpbiBwYXJlbnMuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhl
IEFTVCBub2RlCisgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG5vZGUgaGFz
IGEgcGFyZW4gb24gZWFjaCBzaWRlLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzUGFyZW50aGVz
aXNlZChub2RlKSB7CisgICAgICAgIHZhciBwcmV2aW91c1Rva2VuID0gY29udGV4dC5nZXRUb2tl
bkJlZm9yZShub2RlKSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5B
ZnRlcihub2RlKTsKKworICAgICAgICByZXR1cm4gcHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4g
JiYKKyAgICAgICAgICAgIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rv
a2VuLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52
YWx1ZSA9PT0gIikiICYmIG5leHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAg
IH0KKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIGEgbm9kZSBpcyB3cmFwcGVkIGluIHR3byBs
ZXZlbHMgb2YgcGFyZW5zLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBBU1Qg
bm9kZQorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHR3byBwYXJlbnMgc3Vycm91
bmQgdGhlIG5vZGUgb24gZWFjaCBzaWRlLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzUGFyZW50
aGVzaXNlZFR3aWNlKG5vZGUpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0
LmdldFRva2VuQmVmb3JlKG5vZGUsIDEpLAorICAgICAgICAgICAgbmV4dFRva2VuID0gY29udGV4
dC5nZXRUb2tlbkFmdGVyKG5vZGUsIDEpOworCisgICAgICAgIHJldHVybiBpc1BhcmVudGhlc2lz
ZWQobm9kZSkgJiYgcHJldmlvdXNUb2tlbiAmJiBuZXh0VG9rZW4gJiYKKyAgICAgICAgICAgIHBy
ZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJiBwcmV2aW91c1Rva2VuLnJhbmdlWzFdIDw9IG5v
ZGUucmFuZ2VbMF0gJiYKKyAgICAgICAgICAgIG5leHRUb2tlbi52YWx1ZSA9PT0gIikiICYmIG5l
eHRUb2tlbi5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdOworICAgIH0KKworICAgIHJldHVybiB7
CisgICAgICAgICJTZXF1ZW5jZUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAg
ICAgICAvLyBBbHdheXMgYWxsb3cgc2VxdWVuY2VzIGluIGZvciBzdGF0ZW1lbnQgdXBkYXRlCisg
ICAgICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlwZSA9PT0gIkZvclN0YXRlbWVudCIgJiYKKyAg
ICAgICAgICAgICAgICAgICAgKG5vZGUgPT09IG5vZGUucGFyZW50LmluaXQgfHwgbm9kZSA9PT0g
bm9kZS5wYXJlbnQudXBkYXRlKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gV3JhcHBpbmcgYSBzZXF1ZW5jZSBpbiBleHRyYSBwYXJl
bnMgaW5kaWNhdGVzIGludGVudAorICAgICAgICAgICAgaWYgKHJlcXVpcmVzRXh0cmFQYXJlbnMo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQYXJlbnRoZXNpc2VkVHdpY2Uobm9kZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUGFyZW50aGVzaXNlZChub2Rl
KSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5leHBlY3Rl
ZCB1c2Ugb2YgY29tbWEgb3BlcmF0b3IuIik7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9
LHt9XSwxMDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmls
ZW92ZXJ2aWV3IERpc2FsbG93IHNoYWRvd2luZyBvZiBOYU4sIHVuZGVmaW5lZCwgYW5kIEluZmlu
aXR5IChFUzUgc2VjdGlvbiAxNS4xLjEpCisgKiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQorICov
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgdmFyIFJFU1RSSUNURUQgPSBbInVuZGVmaW5lZCIsICJOYU4i
LCAiSW5maW5pdHkiLCAiYXJndW1lbnRzIiwgImV2YWwiXTsKKworICAgIGZ1bmN0aW9uIGNoZWNr
Rm9yVmlvbGF0aW9uKGlkKSB7CisgICAgICAgIGlmIChSRVNUUklDVEVELmluZGV4T2YoaWQubmFt
ZSkgPiAtMSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaWQsICJTaGFkb3dpbmcgb2Yg
Z2xvYmFsIHByb3BlcnR5IFwiIiArIGlkLm5hbWUgKyAiXCIuIik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4geworICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgY2hlY2tGb3JWaW9sYXRpb24obm9kZS5pZCk7CisgICAgICAg
IH0sCisgICAgICAgICJGdW5jdGlvbkV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS5pZCkgeworICAgICAgICAgICAgICAgIGNoZWNrRm9yVmlvbGF0aW9u
KG5vZGUuaWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgW10ubWFwLmNhbGwobm9kZS5w
YXJhbXMsIGNoZWNrRm9yVmlvbGF0aW9uKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkZ1bmN0aW9u
RGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjaGVja0ZvclZpb2xh
dGlvbihub2RlLmlkKTsKKyAgICAgICAgICAgIFtdLm1hcC5jYWxsKG5vZGUucGFyYW1zLCBjaGVj
a0ZvclZpb2xhdGlvbik7CisgICAgICAgIH0sCisgICAgICAgICJDYXRjaENsYXVzZSI6IGZ1bmN0
aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIGNoZWNrRm9yVmlvbGF0aW9uKG5vZGUucGFyYW0pOwor
ICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTA0OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgb24gZGVj
bGFyaW5nIHZhcmlhYmxlcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoZSBvdXRlciBzY29wZQorICog
QGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8g
UnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0
cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGZ1bmN0
aW9uIGNoZWNrRm9yU2hhZG93cyhub2RlKSB7CisgICAgICAgIHZhciBzY29wZSA9IGNvbnRleHQu
Z2V0U2NvcGUoKSwKKyAgICAgICAgICAgIGlzRnVuY3Rpb25FeHByZXNzaW9uID0gKG5vZGUudHlw
ZSA9PT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpLAorICAgICAgICAgICAgYXJncyA9IG5vZGUucGFy
YW1zLAorICAgICAgICAgICAgdmFyaWFibGVzID0gc2NvcGUudmFyaWFibGVzLmZpbHRlcihmdW5j
dGlvbihpdGVtKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24o
dmFyaWFibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLm5hbWUgPT09
IGl0ZW0ubmFtZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgIC8vaXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheSBvZiB2YXJpYWJsZXMgYW5kIGZpbmQgZHVw
bGljYXRlcyB3aXRoIHRoZSB1cHBlciBzY29wZQorICAgICAgICB2YXIgdXBwZXIgPSBzY29wZS51
cHBlcjsKKworICAgICAgICBmdW5jdGlvbiBmaW5kRHVwcyh2YXJpYWJsZXMpIHsKKyAgICAgICAg
ICAgIHZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlhYmxlKSB7CisKKyAgICAgICAgICAg
ICAgICBpZiAodXBwZXIudmFyaWFibGVzLnNvbWUoZnVuY3Rpb24oc2NvcGVWYXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy9maWx0ZXIgb3V0IGdsb2JhbCB2YXJpYWJsZXMgdGhhdCB3ZSBhZGQg
YXMgcGFydCBvZiBFU0xpbnQKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlVmFyLmlkZW50
aWZpZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY29w
ZVZhci5uYW1lID09PSB2YXJpYWJsZS5uYW1lICYmICFpc0Z1bmN0aW9uRXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
dmFyaWFibGUuaWRlbnRpZmllcnNbMF0sICJ7e2F9fSBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRo
ZSB1cHBlciBzY29wZS4iLCB7YTogdmFyaWFibGUubmFtZX0pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKHVwcGVyKSB7Cisg
ICAgICAgICAgICBmaW5kRHVwcyh2YXJpYWJsZXMpOworICAgICAgICAgICAgdXBwZXIgPSB1cHBl
ci51cHBlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkZ1
bmN0aW9uRGVjbGFyYXRpb24iOiBjaGVja0ZvclNoYWRvd3MsCisgICAgICAgICJGdW5jdGlvbkV4
cHJlc3Npb24iOiBjaGVja0ZvclNoYWRvd3MKKyAgICB9OworCit9OworCit9LHt9XSwxMDU6W2Z1
bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1
bGUgdG8gcmVxdWlyZSB2YXJpYWJsZXMgZGVjbGFyZWQgd2l0aG91dCB3aGl0ZXNwYWNlIGJlZm9y
ZSB0aGUgbGluZXMgc2VtaWNvbG9uCisgKiBAYXV0aG9yIEpvbmF0aGFuIEtpbmdzdG9uCisgKi8K
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisKKyAgICB2YXIgc2VtaWNvbG9uV2hpdGVzcGFjZSA9IC9cczsk
LzsKKworICAgIHJldHVybiB7CisgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIjogZnVuY3Rp
b24obm9kZSkgeworICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKG5v
ZGUpOworICAgICAgICAgICAgaWYgKHNlbWljb2xvbldoaXRlc3BhY2UudGVzdChzb3VyY2UpKSB7
CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlZhcmlhYmxlIGRlY2xhcmVk
IHdpdGggdHJhaWxpbmcgd2hpdGVzcGFjZSBiZWZvcmUgc2VtaWNvbG9uIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0sCisgICAgICAgICJFeHByZXNzaW9uU3RhdGVtZW50IjogZnVuY3Rpb24o
bm9kZSkgeworICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKG5vZGUp
OworICAgICAgICAgICAgaWYgKHNlbWljb2xvbldoaXRlc3BhY2UudGVzdChzb3VyY2UpKSB7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIkV4cHJlc3Npb24gY2FsbGVkIHdp
dGggdHJhaWxpbmcgd2hpdGVzcGFjZSBiZWZvcmUgc2VtaWNvbG9uIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworfTsKKworfSx7fV0sMTA2OltmdW5jdGlvbihyZXF1aXJlLG1v
ZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIHRoYXQg
c3BhY2VkIGZ1bmN0aW9uIGFwcGxpY2F0aW9uCisgKiBAYXV0aG9yIE1hdHQgRHVWYWxsIDxodHRw
Oi8vd3d3Lm1hdHRkdXZhbGwuY29tPgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBv
cnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVu
Y3Rpb24gZGV0ZWN0T3BlblNwYWNlcyhub2RlKSB7CisgICAgICAgIHZhciBsYXN0Q2FsbGVlVG9r
ZW4gPSBjb250ZXh0LmdldExhc3RUb2tlbihub2RlLmNhbGxlZSk7CisgICAgICAgIHZhciB0b2tl
bnMgPSBjb250ZXh0LmdldFRva2Vucyhub2RlKTsKKyAgICAgICAgdmFyIGkgPSB0b2tlbnMuaW5k
ZXhPZihsYXN0Q2FsbGVlVG9rZW4pLCBsID0gdG9rZW5zLmxlbmd0aDsKKyAgICAgICAgd2hpbGUg
KGkgPCBsICYmIHRva2Vuc1tpXS52YWx1ZSAhPT0gIigiKSB7CisgICAgICAgICAgICArK2k7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGkgPj0gbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIC8vIGxvb2sgZm9yIGEgc3BhY2UgYmV0d2VlbiB0aGUgY2FsbGVlIGFu
ZCB0aGUgb3BlbiBwYXJlbgorICAgICAgICBpZiAodG9rZW5zW2kgLSAxXS5yYW5nZVsxXSAhPT0g
dG9rZW5zW2ldLnJhbmdlWzBdKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAi
VW5leHBlY3RlZCBzcGFjZSBiZXR3ZWVuIGZ1bmN0aW9uIG5hbWUgYW5kIHBhcmVuLiIpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjog
ZGV0ZWN0T3BlblNwYWNlcywKKyAgICAgICAgIk5ld0V4cHJlc3Npb24iOiBkZXRlY3RPcGVuU3Bh
Y2VzCisgICAgfTsKKworfTsKKworfSx7fV0sMTA3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxl
eHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBEaXNhbGxvdyBzcGFyc2UgYXJyYXlzCisg
KiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJBcnJheUV4cHJlc3Npb24iOiBmdW5jdGlvbihu
b2RlKSB7CisKKyAgICAgICAgICAgIHZhciBlbXB0eVNwb3QgPSBub2RlLmVsZW1lbnRzLmluZGV4
T2YobnVsbCkgPiAtMTsKKworICAgICAgICAgICAgaWYgKGVtcHR5U3BvdCkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIGNvbW1hIGluIG1pZGRsZSBv
ZiBhcnJheS4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKwor
fSx7fV0sMTA4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZp
bGVvdmVydmlldyBSdWxlIHRvIGNoZWNrIGZvciBwcm9wZXJ0aWVzIHdob3NlIGlkZW50aWZpZXIg
ZW5kcyB3aXRoIHRoZSBzdHJpbmcgU3luYworICogQGF1dGhvciBNYXR0IER1VmFsbDxodHRwOi8v
bWF0dGR1dmFsbC5jb20vPgorICovCisKKy8qanNoaW50IG5vZGU6dHJ1ZSovCisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBz
dHJpY3QiOworCisgICAgcmV0dXJuIHsKKworICAgICAgICAiTWVtYmVyRXhwcmVzc2lvbiI6IGZ1
bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBub2RlLnByb3Bl
cnR5Lm5hbWUsCisgICAgICAgICAgICAgICAgc3luY1JlZ2V4ID0gLy4qU3luYyQvOworCisgICAg
ICAgICAgICBpZiAoc3luY1JlZ2V4LmV4ZWMocHJvcGVydHlOYW1lKSAhPT0gbnVsbCkgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHN5bmMgbWV0aG9k
OiAnIiArIHByb3BlcnR5TmFtZSArICInLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfTsKKworfTsKKworfSx7fV0sMTA5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRz
KXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNlIG9mIHRlcm5hcnkgb3Bl
cmF0b3JzLgorICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKworLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4geworCisgICAgICAgICJDb25kaXRpb25hbEV4cHJlc3Npb24i
OiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVGVy
bmFyeSBvcGVyYXRvciB1c2VkLiIpOworICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9
XSwxMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92
ZXJ2aWV3IERpc2FsbG93IHRyYWlsaW5nIHNwYWNlcyBhdCB0aGUgZW5kIG9mIGxpbmVzLgorICog
QGF1dGhvciBOb2RlY2EgVGVhbSA8aHR0cHM6Ly9naXRodWIuY29tL25vZGVjYT4KKyAqLworInVz
ZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgIHZhciBUUkFJTEVSID0gIlsgXHRcdTAwYTBcdTIwMDBcdTIwMDFcdTIw
MDJcdTIwMDNcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMGFcdTIwMGJc
dTIwMjhcdTIwMjlcdTMwMDBdKyQiOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8v
IFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisKKyAgICAg
ICAgIlByb2dyYW0iOiBmdW5jdGlvbiBjaGVja1RyYWlsaW5nU3BhY2VzKG5vZGUpIHsKKworICAg
ICAgICAgICAgLy8gTGV0J3MgaGFjay4gU2luY2UgRXNwcmltYSBkb2VzIG5vdCByZXR1cm4gd2hp
dGVzcGFjZSBub2RlcywKKyAgICAgICAgICAgIC8vIGZldGNoIHRoZSBzb3VyY2UgY29kZSBhbmQg
ZG8gYmxhY2sgbWFnaWMgdmlhIHJlZ2V4cHMuCisKKyAgICAgICAgICAgIHZhciBzcmMgPSBjb250
ZXh0LmdldFNvdXJjZSgpLAorICAgICAgICAgICAgICAgIHJlID0gbmV3IFJlZ0V4cChUUkFJTEVS
LCAibWciKSwKKyAgICAgICAgICAgICAgICBtYXRjaCwgbGluZXMsIGxvY2F0aW9uOworCisgICAg
ICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmUuZXhlYyhzcmMpKSAhPT0gbnVsbCkgeworICAgICAg
ICAgICAgICAgIGxpbmVzID0gc3JjLnNsaWNlKDAsIHJlLmxhc3RJbmRleCkuc3BsaXQoL1xyP1xu
L2cpOworCisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSB7CisgICAgICAgICAgICAgICAgICAg
IGxpbmU6ICAgbGluZXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGxpbmVz
W2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIG1hdGNoWzBdLmxlbmd0aCArIDEKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgLy8gUGFzc2luZyBub2RlIGlzIGEgYml0IGRp
cnR5LCBiZWNhdXNlIG1lc3NhZ2UgZGF0YSB3aWxsIGNvbnRhaW4KKyAgICAgICAgICAgICAgICAv
LyBiaWcgdGV4dCBpbiBgc291cmNlYC4gQnV0Li4uIHdobyBjYXJlcyA6KSA/CisgICAgICAgICAg
ICAgICAgLy8gT25lIG1vcmUga2x1ZGdlIHdpbGwgbm90IG1ha2Ugd29yc2UgdGhlIGJsb29keSB3
aXphcmRyeSBvZiB0aGlzIHBsdWdpbi4KKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChu
b2RlLCBsb2NhdGlvbiwgIlRyYWlsaW5nIHNwYWNlcyBub3QgYWxsb3dlZC4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKK307CisKK30se31dLDExMTpbZnVuY3Rpb24ocmVx
dWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFn
IHdoZW4gaW5pdGlhbGl6aW5nIHRvIHVuZGVmaW5lZAorICogQGF1dGhvciBJbHlhIFZvbG9kaW4K
KyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlZhcmlh
YmxlRGVjbGFyYXRvciI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAgIHZhciBuYW1lID0g
bm9kZS5pZC5uYW1lOworICAgICAgICAgICAgdmFyIGluaXQgPSBub2RlLmluaXQgJiYgbm9kZS5p
bml0Lm5hbWU7CisKKyAgICAgICAgICAgIGlmIChpbml0ID09PSAidW5kZWZpbmVkIikgeworICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJJdCdzIG5vdCBuZWNlc3NhcnkgdG8g
aW5pdGlhbGl6ZSAne3tuYW1lfX0nIHRvIHVuZGVmaW5lZC4iLCB7IG5hbWU6IG5hbWUgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMTI6W2Z1bmN0
aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUg
dG8gZmxhZyByZWZlcmVuY2VzIHRvIHVuZGVjbGFyZWQgdmFyaWFibGVzLgorICogQGF1dGhvciBN
YXJrIE1hY2RvbmFsZAorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBIZWxwZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBpc0lt
cGxpY2l0R2xvYmFsKHZhcmlhYmxlKSB7CisgICAgcmV0dXJuIHZhcmlhYmxlLmRlZnMuZXZlcnko
ZnVuY3Rpb24oZGVmKSB7CisgICAgICAgIHJldHVybiBkZWYudHlwZSA9PT0gIkltcGxpY2l0R2xv
YmFsVmFyaWFibGUiOworICAgIH0pOworfQorCisvKioKKyAqIEdldHMgdGhlIGRlY2xhcmVkIHZh
cmlhYmxlLCBkZWZpbmVkIGluIGBzY29wZWAsIHRoYXQgYHJlZmAgcmVmZXJzIHRvLgorICogQHBh
cmFtIHtTY29wZX0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIHNlYXJjaC4KKyAqIEBwYXJh
bSB7UmVmZXJlbmNlfSByZWYgVGhlIHJlZmVyZW5jZSB0byBmaW5kIGluIHRoZSBzY29wZS4KKyAq
IEByZXR1cm5zIHtWYXJpYWJsZX0gVGhlIHZhcmlhYmxlLCBvciBudWxsIGlmIHJlZiByZWZlcnMg
dG8gYW4gdW5kZWNsYXJlZCB2YXJpYWJsZS4KKyAqLworZnVuY3Rpb24gZ2V0RGVjbGFyZWRHbG9i
YWxWYXJpYWJsZShzY29wZSwgcmVmKSB7CisgICAgdmFyIGRlY2xhcmVkR2xvYmFsID0gbnVsbDsK
KyAgICBzY29wZS52YXJpYWJsZXMuc29tZShmdW5jdGlvbih2YXJpYWJsZSkgeworICAgICAgICBp
ZiAodmFyaWFibGUubmFtZSA9PT0gcmVmLmlkZW50aWZpZXIubmFtZSkgeworICAgICAgICAgICAg
Ly8gSWYgaXQncyBhbiBpbXBsaWNpdCBnbG9iYWwsIGl0IG11c3QgaGF2ZSBhIGB3cml0ZWFibGVg
IGZpZWxkIChpbmRpY2F0aW5nIGl0IHdhcyBkZWNsYXJlZCkKKyAgICAgICAgICAgIGlmICghaXNJ
bXBsaWNpdEdsb2JhbCh2YXJpYWJsZSkgfHwge30uaGFzT3duUHJvcGVydHkuY2FsbCh2YXJpYWJs
ZSwgIndyaXRlYWJsZSIpKSB7CisgICAgICAgICAgICAgICAgZGVjbGFyZWRHbG9iYWwgPSB2YXJp
YWJsZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisgICAgcmV0dXJuIGRlY2xhcmVk
R2xvYmFsOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9u
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNv
bnRleHQpIHsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIlByb2dyYW0iOiBmdW5jdGlvbigv
Km5vZGUqLykgeworCisgICAgICAgICAgICB2YXIgZ2xvYmFsU2NvcGUgPSBjb250ZXh0LmdldFNj
b3BlKCk7CisKKyAgICAgICAgICAgIGdsb2JhbFNjb3BlLnRocm91Z2guZm9yRWFjaChmdW5jdGlv
bihyZWYpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFyaWFibGUgPSBnZXREZWNsYXJlZEdsb2Jh
bFZhcmlhYmxlKGdsb2JhbFNjb3BlLCByZWYpLAorICAgICAgICAgICAgICAgICAgICBuYW1lID0g
cmVmLmlkZW50aWZpZXIubmFtZTsKKyAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHJlZi5pZGVudGlmaWVyLCAiJ3t7bmFt
ZX19JyBpcyBub3QgZGVmaW5lZC4iLCB7IG5hbWU6IG5hbWUgfSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChyZWYuaXNXcml0ZSgpICYmIHZhcmlhYmxlLndyaXRlYWJsZSA9PT0gZmFsc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQocmVmLmlkZW50aWZpZXIsICIn
e3tuYW1lfX0nIGlzIHJlYWQgb25seS4iLCB7IG5hbWU6IG5hbWUgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwx
MTM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2
aWV3IFJ1bGUgdG8gZmxhZyByZWZlcmVuY2VzIHRvIHRoZSB1bmRlZmluZWQgdmFyaWFibGUuCisg
KiBAYXV0aG9yIE1pY2hhZWwgRmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgcmV0dXJu
IHsKKworICAgICAgICAiSWRlbnRpZmllciI6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAgICAgICAg
IGlmIChub2RlLm5hbWUgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgdmFyIHBh
cmVudCA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCkucG9wKCk7CisgICAgICAgICAgICAgICAgaWYg
KCFwYXJlbnQgfHwgcGFyZW50LnR5cGUgIT09ICJNZW1iZXJFeHByZXNzaW9uIiB8fCBub2RlICE9
PSBwYXJlbnQucHJvcGVydHkgfHwgcGFyZW50LmNvbXB1dGVkKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJVbmV4cGVjdGVkIHVzZSBvZiB1bmRlZmluZWQuIik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwor
fTsKKworfSx7fV0sMTE0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdHJhaWxpbmcgdW5kZXJzY29yZXMgaW4gdmFy
aWFibGUgZGVjbGFyYXRpb25zLgorICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5t
YXR0ZHV2YWxsLmNvbT4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBE
ZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1
bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGZ1
bmN0aW9uIGhhc1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVyKSB7CisgICAgICAgIHZhciBs
ZW4gPSBpZGVudGlmaWVyLmxlbmd0aDsKKworICAgICAgICByZXR1cm4gaWRlbnRpZmllciAhPT0g
Il8iICYmIChpZGVudGlmaWVyWzBdID09PSAiXyIgfHwgaWRlbnRpZmllcltsZW4gLSAxXSA9PT0g
Il8iKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc1NwZWNpYWxDYXNlSWRlbnRpZmllckZvck1l
bWJlckV4cHJlc3Npb24oaWRlbnRpZmllcikgeworICAgICAgICByZXR1cm4gaWRlbnRpZmllciA9
PT0gIl9fcHJvdG9fXyI7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNTcGVjaWFsQ2FzZUlkZW50
aWZpZXJJblZhcmlhYmxlRXhwcmVzc2lvbihpZGVudGlmaWVyKSB7CisgICAgICAgIC8vIENoZWNr
cyBmb3IgdGhlIHVuZGVyc2NvcmUgbGlicmFyeSB1c2FnZSBoZXJlCisgICAgICAgIHJldHVybiBp
ZGVudGlmaWVyID09PSAiXyI7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tGb3JUcmFpbGlu
Z1VuZGVyc2NvcmVJbkZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSkgeworICAgICAgICB2YXIgaWRl
bnRpZmllciA9IG5vZGUuaWQubmFtZTsKKworICAgICAgICBpZiAodHlwZW9mIGlkZW50aWZpZXIg
IT09ICJ1bmRlZmluZWQiICYmIGhhc1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVyKSkgewor
ICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgZGFuZ2xpbmcgJ18n
IGluICciICsgaWRlbnRpZmllciArICInLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gY2hlY2tGb3JUcmFpbGluZ1VuZGVyc2NvcmVJblZhcmlhYmxlRXhwcmVzc2lvbihub2Rl
KSB7CisgICAgICAgIHZhciBpZGVudGlmaWVyID0gbm9kZS5pZC5uYW1lOworCisgICAgICAgIGlm
ICh0eXBlb2YgaWRlbnRpZmllciAhPT0gInVuZGVmaW5lZCIgJiYgaGFzVHJhaWxpbmdVbmRlcnNj
b3JlKGlkZW50aWZpZXIpICYmCisgICAgICAgICAgICAhaXNTcGVjaWFsQ2FzZUlkZW50aWZpZXJJ
blZhcmlhYmxlRXhwcmVzc2lvbihpZGVudGlmaWVyKSkgeworICAgICAgICAgICAgY29udGV4dC5y
ZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgZGFuZ2xpbmcgJ18nIGluICciICsgaWRlbnRpZmllciAr
ICInLiIpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tGb3JUcmFpbGlu
Z1VuZGVyc2NvcmVJbk1lbWJlckV4cHJlc3Npb24obm9kZSkgeworICAgICAgICB2YXIgaWRlbnRp
ZmllciA9IG5vZGUucHJvcGVydHkubmFtZTsKKworICAgICAgICBpZiAodHlwZW9mIGlkZW50aWZp
ZXIgIT09ICJ1bmRlZmluZWQiICYmIGhhc1RyYWlsaW5nVW5kZXJzY29yZShpZGVudGlmaWVyKSAm
JgorICAgICAgICAgICAgIWlzU3BlY2lhbENhc2VJZGVudGlmaWVyRm9yTWVtYmVyRXhwcmVzc2lv
bihpZGVudGlmaWVyKSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhw
ZWN0ZWQgZGFuZ2xpbmcgJ18nIGluICciICsgaWRlbnRpZmllciArICInLiIpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYyBBUEkKKyAg
ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiRnVuY3Rpb25E
ZWNsYXJhdGlvbiI6IGNoZWNrRm9yVHJhaWxpbmdVbmRlcnNjb3JlSW5GdW5jdGlvbkRlY2xhcmF0
aW9uLAorICAgICAgICAiVmFyaWFibGVEZWNsYXJhdG9yIjogY2hlY2tGb3JUcmFpbGluZ1VuZGVy
c2NvcmVJblZhcmlhYmxlRXhwcmVzc2lvbiwKKyAgICAgICAgIk1lbWJlckV4cHJlc3Npb24iOiBj
aGVja0ZvclRyYWlsaW5nVW5kZXJzY29yZUluTWVtYmVyRXhwcmVzc2lvbgorICAgIH07CisKK307
CisKK30se31dLDExNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgQ2hlY2tzIGZvciB1bnJlYWNoYWJsZSBjb2RlIGR1ZSB0byByZXR1cm4s
IHRocm93cywgYnJlYWssIGFuZCBjb250aW51ZS4KKyAqIEBhdXRob3IgSm9lbCBGZWVuc3RyYQor
ICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIZWxwZXJz
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2Z1bmN0aW9uIHJlcG9ydChjb250ZXh0LCBu
b2RlLCB1bnJlYWNoYWJsZVR5cGUpIHsKKyAgICB2YXIga2V5d29yZDsKKyAgICBzd2l0Y2ggKHVu
cmVhY2hhYmxlVHlwZSkgeworICAgICAgICBjYXNlICJCcmVha1N0YXRlbWVudCI6CisgICAgICAg
ICAgICBrZXl3b3JkID0gImJyZWFrIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICJDb250aW51ZVN0YXRlbWVudCI6CisgICAgICAgICAgICBrZXl3b3JkID0gImNvbnRpbnVlIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJSZXR1cm5TdGF0ZW1lbnQiOgorICAg
ICAgICAgICAga2V5d29yZCA9ICJyZXR1cm4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgIlRocm93U3RhdGVtZW50IjoKKyAgICAgICAgICAgIGtleXdvcmQgPSAidGhyb3ciOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJGb3VuZCB1bmV4cGVjdGVkIHN0YXRl
bWVudCBhZnRlciBhIHt7dHlwZX19LiIsIHsgdHlwZToga2V5d29yZCB9KTsKK30KKworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgIC8q
KgorICAgICAqIENoZWNrcyBpZiBhIG5vZGUgaXMgYW4gZXhjZXB0aW9uIGZvciBuby11bnJlYWNo
YWJsZSBiZWNhdXNlIG9mIHZhcmlhYmxlL2Z1bmN0aW9uIGhvaXN0aW5nCisgICAgICogQHBhcmFt
IHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9kZSB0byBjaGVjay4KKyAgICAgKiBAcmV0dXJucyB7
Ym9vbGVhbn0gaWYgdGhlIG5vZGUgZG9lc24ndCB0cmlnZ2VyIHVucmVhY2hhYmxlCisgICAgICog
QHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1VucmVhY2hhYmxlQWxsb3dlZChub2Rl
KSB7CisgICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09ICJGdW5jdGlvbkRlY2xhcmF0aW9uIiB8
fAorICAgICAgICAgICAgbm9kZS50eXBlID09PSAiVmFyaWFibGVEZWNsYXJhdGlvbiIgJiYKKyAg
ICAgICAgICAgIG5vZGUuZGVjbGFyYXRpb25zLmV2ZXJ5KGZ1bmN0aW9uKGRlY2xhcmF0aW9uKXsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRpb24udHlwZSA9PT0gIlZhcmlhYmxlRGVj
bGFyYXRvciIgJiYgZGVjbGFyYXRpb24uaW5pdCA9PT0gbnVsbDsKKyAgICAgICAgICAgIH0pOwor
ICAgIH0KKworICAgIC8qCisgICAgICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gbm9kZSBpcyB0
aGUgbGFzdCBub2RlIG9yIGZvbGxvd2VkIGV4Y2x1c2l2ZWx5IGJ5CisgICAgICogaG9pc3RlZCBk
ZWNsYXJhdGlvbnMKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgTm9kZSB0aGF0IHNob3Vs
ZCBiZSB0aGUgbGFzdCBub2RlCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICogQHByaXZh
dGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja05vZGUobm9kZSkgeworICAgICAgICB2YXIg
cGFyZW50ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKyAgICAgICAgdmFyIGZpZWxk
LCBpLCBzaWJsaW5nOworCisgICAgICAgIHN3aXRjaCAocGFyZW50LnR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgIlN3aXRjaENhc2UiOgorICAgICAgICAgICAgICAgIGZpZWxkID0gImNvbnNlcXVl
bnQiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiUHJvZ3JhbSI6
CisgICAgICAgICAgICBjYXNlICJCbG9ja1N0YXRlbWVudCI6CisgICAgICAgICAgICAgICAgZmll
bGQgPSAiYm9keSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9
IHBhcmVudFtmaWVsZF0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIHNp
YmxpbmcgPSBwYXJlbnRbZmllbGRdW2ldOworICAgICAgICAgICAgaWYgKHNpYmxpbmcgPT09IG5v
ZGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47IC8vIEZvdW5kIHRoZSBsYXN0IHJlYWNoYWJs
ZSBzdGF0ZW1lbnQsIGFsbCBkb25lCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
aXNVbnJlYWNoYWJsZUFsbG93ZWQoc2libGluZykpIHsKKyAgICAgICAgICAgICAgICByZXBvcnQo
Y29udGV4dCwgc2libGluZywgbm9kZS50eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB7CisgICAgICAgICJSZXR1cm5TdGF0ZW1lbnQiOiBjaGVja05v
ZGUsCisgICAgICAgICJUaHJvd1N0YXRlbWVudCI6IGNoZWNrTm9kZSwKKyAgICAgICAgIkNvbnRp
bnVlU3RhdGVtZW50IjogY2hlY2tOb2RlLAorICAgICAgICAiQnJlYWtTdGF0ZW1lbnQiOiBjaGVj
a05vZGUKKyAgICB9OworCit9OworCit9LHt9XSwxMTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxl
LGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IEZsYWcgZXhwcmVzc2lvbnMgaW4gc3Rh
dGVtZW50IHBvc2l0aW9uIHRoYXQgZG8gbm90IHNpZGUgZWZmZWN0CisgKiBAYXV0aG9yIE1pY2hh
ZWwgRmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5l
eHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLyoqCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIC0gYW55IG5vZGUKKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhl
ciB0aGUgZ2l2ZW4gbm9kZSBzdHJ1Y3R1cmFsbHkgcmVwcmVzZW50cyBhIGRpcmVjdGl2ZQorICAg
ICAqLworICAgIGZ1bmN0aW9uIGxvb2tzTGlrZURpcmVjdGl2ZShub2RlKSB7CisgICAgICAgcmV0
dXJuIG5vZGUudHlwZSA9PT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiICYmCisgICAgICAgICAgIG5v
ZGUuZXhwcmVzc2lvbi50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9mIG5vZGUuZXhwcmVzc2lv
bi52YWx1ZSA9PT0gInN0cmluZyI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtG
dW5jdGlvbn0gcHJlZGljYXRlIC0gKFthXSAtPiBCb29sZWFuKSB0aGUgZnVuY3Rpb24gdXNlZCB0
byBtYWtlIHRoZSBkZXRlcm1pbmF0aW9uCisgICAgICogQHBhcmFtIHthW119IGxpc3QgLSB0aGUg
aW5wdXQgbGlzdAorICAgICAqIEByZXR1cm5zIHthW119IHRoZSBsZWFkaW5nIHNlcXVlbmNlIG9m
IG1lbWJlcnMgaW4gdGhlIGdpdmVuIGxpc3QgdGhhdCBwYXNzIHRoZSBnaXZlbiBwcmVkaWNhdGUK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiB0YWtlV2hpbGUocHJlZGljYXRlLCBsaXN0KSB7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICghcHJlZGljYXRlKGxpc3RbaV0pKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFtdLnNsaWNlLmNhbGwo
bGlzdCwgMCwgaSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBu
b2RlIC0gYSBQcm9ncmFtIG9yIEJsb2NrU3RhdGVtZW50IG5vZGUKKyAgICAgKiBAcmV0dXJucyB7
QVNUTm9kZVtdfSB0aGUgbGVhZGluZyBzZXF1ZW5jZSBvZiBkaXJlY3RpdmUgbm9kZXMgaW4gdGhl
IGdpdmVuIG5vZGUncyBib2R5CisgICAgICovCisgICAgZnVuY3Rpb24gZGlyZWN0aXZlcyhub2Rl
KSB7CisgICAgICAgIHJldHVybiB0YWtlV2hpbGUobG9va3NMaWtlRGlyZWN0aXZlLCBub2RlLmJv
ZHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIGFu
eSBub2RlCisgICAgICogQHBhcmFtIHtBU1ROb2RlW119IGFuY2VzdG9ycyAtIHRoZSBnaXZlbiBu
b2RlJ3MgYW5jZXN0b3JzCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IHdoZXRoZXIgdGhlIGdp
dmVuIG5vZGUgaXMgY29uc2lkZXJlZCBhIGRpcmVjdGl2ZSBpbiBpdHMgY3VycmVudCBwb3NpdGlv
bgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzRGlyZWN0aXZlKG5vZGUsIGFuY2VzdG9ycykgewor
ICAgICAgICB2YXIgcGFyZW50ID0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5ndGggLSAxXSwKKyAg
ICAgICAgICAgIGdyYW5kcGFyZW50ID0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5ndGggLSAyXTsK
KyAgICAgICAgcmV0dXJuIChwYXJlbnQudHlwZSA9PT0gIlByb2dyYW0iIHx8IHBhcmVudC50eXBl
ID09PSAiQmxvY2tTdGF0ZW1lbnQiICYmIChncmFuZHBhcmVudC50eXBlID09PSAiRnVuY3Rpb25F
eHByZXNzaW9uIiB8fCBncmFuZHBhcmVudC50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIp
KSAmJgorICAgICAgICAgICAgZGlyZWN0aXZlcyhwYXJlbnQpLmluZGV4T2Yobm9kZSkgPj0gMDsK
KyAgICB9CisKKyAgICByZXR1cm4geworICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGZ1
bmN0aW9uKG5vZGUpIHsKKworICAgICAgICAgICAgdmFyIHR5cGUgPSBub2RlLmV4cHJlc3Npb24u
dHlwZSwKKyAgICAgICAgICAgICAgICBhbmNlc3RvcnMgPSBjb250ZXh0LmdldEFuY2VzdG9ycygp
OworCisgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgIS9eKD86QXNzaWdubWVudHxD
YWxsfE5ld3xVcGRhdGUpRXhwcmVzc2lvbiQvLnRlc3QodHlwZSkgJiYKKyAgICAgICAgICAgICAg
ICAodHlwZSAhPT0gIlVuYXJ5RXhwcmVzc2lvbiIgfHwgWyJkZWxldGUiLCAidm9pZCJdLmluZGV4
T2Yobm9kZS5leHByZXNzaW9uLm9wZXJhdG9yKSA8IDApICYmCisgICAgICAgICAgICAgICAgIWlz
RGlyZWN0aXZlKG5vZGUsIGFuY2VzdG9ycykKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHBlY3RlZCBhbiBhc3NpZ25tZW50IG9yIGZ1bmN0
aW9uIGNhbGwgYW5kIGluc3RlYWQgc2F3IGFuIGV4cHJlc3Npb24uIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMTc6W2Z1bmN0aW9uKHJlcXVpcmUs
bW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyBkZWNs
YXJlZCBidXQgdW51c2VkIHZhcmlhYmxlcworICogQGF1dGhvciBJbHlhIFZvbG9kaW4KKyAqLwor
CisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmlu
aXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rp
b24oY29udGV4dCkgeworCisgICAgdmFyIGNvbmZpZyA9IHsKKyAgICAgICAgdmFyczogImFsbCIs
CisgICAgICAgIGFyZ3M6ICJhZnRlci11c2VkIgorICAgIH07CisKKyAgICBpZiAoY29udGV4dC5v
cHRpb25zWzBdKSB7CisgICAgICAgIGlmICh0eXBlb2YoY29udGV4dC5vcHRpb25zWzBdKSA9PT0g
InN0cmluZyIpIHsKKyAgICAgICAgICAgIGNvbmZpZy52YXJzID0gY29udGV4dC5vcHRpb25zWzBd
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uZmlnLnZhcnMgPSBjb250ZXh0Lm9w
dGlvbnNbMF0udmFycyB8fCBjb25maWcudmFyczsKKyAgICAgICAgICAgIGNvbmZpZy5hcmdzID0g
Y29udGV4dC5vcHRpb25zWzBdLmFyZ3MgfHwgY29uZmlnLmFyZ3M7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2YXIgTUVTU0FHRSA9ICJ7e25hbWV9fSBpcyBkZWZpbmVkIGJ1dCBuZXZlciB1c2Vk
IjsKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7UmVmZXJlbmNlfSByZWYgLSBhbiBlc2NvcGUg
UmVmZXJlbmNlCisgICAgICogQHJldHVybnMge0Jvb2xlYW59IHdoZXRoZXIgdGhlIGdpdmVuIHJl
ZmVyZW5jZSByZXByZXNlbnRzIGEgcmVhZCBvcGVyYXRpb24KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBpc1JlYWRSZWYocmVmKSB7CisgICAgICAgIHJldHVybiByZWYuaXNSZWFkKCk7CisgICAgfQor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtTY29wZX0gc2NvcGUgLSBhbiBlc2NvcGUgU2NvcGUg
b2JqZWN0CisgICAgICogQHJldHVybnMge1ZhcmlhYmxlW119IG1vc3Qgb2YgdGhlIGxvY2FsIHZh
cmlhYmxlcyB3aXRoIG5vIHJlYWQgcmVmZXJlbmNlcworICAgICAqLworICAgIGZ1bmN0aW9uIHVu
dXNlZExvY2FscyhzY29wZSkgeworICAgICAgICB2YXIgdW51c2VkID0gW107CisgICAgICAgIHZh
ciB2YXJpYWJsZXMgPSBzY29wZS52YXJpYWJsZXM7CisgICAgICAgIGlmIChzY29wZS50eXBlICE9
PSAiZ2xvYmFsIikgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YXJpYWJsZXMu
bGVuZ3RoOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICAgICAgLy8gc2tpcCBmdW5jdGlvbiBl
eHByZXNzaW9uIG5hbWVzCisgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmZ1bmN0aW9uRXhwcmVz
c2lvblNjb3BlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAvLyBza2lwIGltcGxpY2l0ICJhcmd1bWVudHMiIHZhcmlh
YmxlCisgICAgICAgICAgICAgICAgaWYgKHNjb3BlLnR5cGUgPT09ICJmdW5jdGlvbiIgJiYgdmFy
aWFibGVzW2ldLm5hbWUgPT09ICJhcmd1bWVudHMiICYmIHZhcmlhYmxlc1tpXS5pZGVudGlmaWVy
cy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdmFyaWFibGVzW2ldLmRlZnNb
MF0udHlwZTsKKyAgICAgICAgICAgICAgICAvLyBza2lwIGNhdGNoIHZhcmlhYmxlcworICAgICAg
ICAgICAgICAgIGlmICh0eXBlID09PSAiQ2F0Y2hDbGF1c2UiKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBpZiAi
YXJncyIgb3B0aW9uIGlzICJub25lIiwgc2tpcCBhbnkgcGFyYW1ldGVyCisgICAgICAgICAgICAg
ICAgaWYgKGNvbmZpZy5hcmdzID09PSAibm9uZSIgJiYgdHlwZSA9PT0gIlBhcmFtZXRlciIpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIC8vIGlmICJhcmdzIiBvcHRpb24gaXMgImFmdGVyLXVzZWQiLCBza2lwIGFsbCBi
dXQgdGhlIGxhc3QgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hcmdzID09
PSAiYWZ0ZXItdXNlZCIgJiYgdHlwZSA9PT0gIlBhcmFtZXRlciIgJiYgdmFyaWFibGVzW2ldLmRl
ZnNbMF0uaW5kZXggPCB2YXJpYWJsZXNbaV0uZGVmc1swXS5ub2RlLnBhcmFtcy5sZW5ndGggLSAx
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAodmFyaWFibGVzW2ldLnJlZmVyZW5jZXMuZmlsdGVyKGlzUmVhZFJl
ZikubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHVudXNlZC5wdXNoKHZhcmlh
Ymxlc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBbXS5jb25jYXQuYXBwbHkodW51c2VkLCBbXS5tYXAuY2FsbChzY29wZS5j
aGlsZFNjb3BlcywgdW51c2VkTG9jYWxzKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAg
ICAgIlByb2dyYW0iOiBmdW5jdGlvbihwcm9ncmFtTm9kZSkgeworICAgICAgICAgICAgdmFyIGds
b2JhbFNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpOworICAgICAgICAgICAgdmFyIHVudXNlZCA9
IHVudXNlZExvY2FscyhnbG9iYWxTY29wZSk7CisgICAgICAgICAgICB2YXIgaSwgbDsKKworICAg
ICAgICAgICAgLy8gZGV0ZXJtaW5lIHVudXNlZCBnbG9iYWxzCisgICAgICAgICAgICBpZiAoY29u
ZmlnLnZhcnMgPT09ICJhbGwiKSB7CisgICAgICAgICAgICAgICAgdmFyIHVucmVzb2x2ZWRSZWZz
ID0gZ2xvYmFsU2NvcGUudGhyb3VnaC5maWx0ZXIoaXNSZWFkUmVmKS5tYXAoZnVuY3Rpb24ocmVm
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWYuaWRlbnRpZmllci5uYW1lOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBnbG9iYWxT
Y29wZS52YXJpYWJsZXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh1bnJlc29sdmVkUmVmcy5pbmRleE9mKGdsb2JhbFNjb3BlLnZhcmlhYmxlc1tpXS5uYW1l
KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZC5wdXNoKGdsb2JhbFNjb3Bl
LnZhcmlhYmxlc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSB1bnVzZWQubGVu
Z3RoOyBpIDwgbDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHVudXNlZFtpXS5lc2xpbnRF
eHBsaWNpdEdsb2JhbCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChwcm9n
cmFtTm9kZSwgTUVTU0FHRSwgdW51c2VkW2ldKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHVudXNlZFtpXS5kZWZzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC5yZXBvcnQodW51c2VkW2ldLmlkZW50aWZpZXJzWzBdLCBNRVNTQUdFLCB1bnVzZWRbaV0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307
CisKK30se31dLDExODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAq
IEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHVzZSBvZiB2YXJpYWJsZXMgYmVmb3JlIHRoZXkg
YXJlIGRlZmluZWQKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8KKworLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKy8vIENvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordmFy
IE5PX0ZVTkMgPSAibm9mdW5jIjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBmdW5jdGlvbiBm
aW5kRGVjbGFyYXRpb24obmFtZSwgc2NvcGUpIHsKKyAgICAgICAgLy90cnkgc2VhcmNoaW5nIGlu
IHRoZSBjdXJyZW50IHNjb3BlIGZpcnN0CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gc2Nv
cGUudmFyaWFibGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeworICAgICAgICAgICAgaWYgKHNjb3Bl
LnZhcmlhYmxlc1tpXS5uYW1lID09PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNj
b3BlLnZhcmlhYmxlc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvL2No
ZWNrIGlmIHRoZXJlJ3MgdXBwZXIgc2NvcGUgYW5kIGNhbGwgcmVjdXJzaXZseSB0aWxsIHdlIGZp
bmQgdGhlIHZhcmlhYmxlCisgICAgICAgIGlmIChzY29wZS51cHBlcikgeworICAgICAgICAgICAg
cmV0dXJuIGZpbmREZWNsYXJhdGlvbihuYW1lLCBzY29wZS51cHBlcik7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBmaW5kVmFyaWFibGVzKCkgeworICAgICAgICB2YXIgc2NvcGUg
PSBjb250ZXh0LmdldFNjb3BlKCk7CisgICAgICAgIHZhciB0eXBlT3B0aW9uID0gY29udGV4dC5v
cHRpb25zWzBdOworCisgICAgICAgIGZ1bmN0aW9uIGNoZWNrTG9jYXRpb25BbmRSZXBvcnQocmVm
ZXJlbmNlLCBkZWNsYXJhdGlvbikgeworICAgICAgICAgICAgaWYgKHR5cGVPcHRpb24gIT09IE5P
X0ZVTkMgfHwgZGVjbGFyYXRpb24uZGVmc1swXS50eXBlICE9PSAiRnVuY3Rpb25OYW1lIikgewor
ICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pZGVudGlmaWVyc1swXS5yYW5nZVsxXSA+
IHJlZmVyZW5jZS5pZGVudGlmaWVyLnJhbmdlWzFdKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KHJlZmVyZW5jZS5pZGVudGlmaWVyLCAie3thfX0gd2FzIHVzZWQgYmVmb3Jl
IGl0IHdhcyBkZWZpbmVkIiwge2E6IHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWV9KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzY29wZS5y
ZWZlcmVuY2VzLmZvckVhY2goZnVuY3Rpb24ocmVmZXJlbmNlKSB7CisgICAgICAgICAgICAvL2lm
IHRoZSByZWZlcmVuY2UgaXMgcmVzb2x2ZWQgY2hlY2sgZm9yIGRlY2xhcmF0aW9uIGxvY2F0aW9u
CisgICAgICAgICAgICAvL2lmIG5vdCwgaXQgY291bGQgYmUgZnVuY3Rpb24gaW52b2NhdGlvbiwg
dHJ5IHRvIGZpbmQgbWFudWFsbHkKKyAgICAgICAgICAgIGlmIChyZWZlcmVuY2UucmVzb2x2ZWQg
JiYgcmVmZXJlbmNlLnJlc29sdmVkLmlkZW50aWZpZXJzLmxlbmd0aCA+IDApIHsKKyAgICAgICAg
ICAgICAgICBjaGVja0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVyZW5jZSwgcmVmZXJlbmNlLnJlc29s
dmVkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGRlY2xhcmF0
aW9uID0gZmluZERlY2xhcmF0aW9uKHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICAvL2lmIHRoZXJlJ3JlIG5vIGlkZW50aWZpZXJzLCB0aGlzIGlzIGEg
Z2xvYmFsIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0
aW9uICYmIGRlY2xhcmF0aW9uLmlkZW50aWZpZXJzLmxlbmd0aCAhPT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICBjaGVja0xvY2F0aW9uQW5kUmVwb3J0KHJlZmVyZW5jZSwgZGVjbGFyYXRpb24p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgIlByb2dyYW0iOiBmaW5kVmFyaWFibGVzLAorICAgICAg
ICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZmluZFZhcmlhYmxlcywKKyAgICAgICAgIkZ1bmN0aW9u
RGVjbGFyYXRpb24iOiBmaW5kVmFyaWFibGVzCisgICAgfTsKK307CisKK30se31dLDExOTpbZnVu
Y3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVs
ZSB0byBkaXNhbGxvdyB1c2Ugb2Ygdm9pZCBvcGVyYXRvci4KKyAqIEBhdXRob3IgTWlrZSBTaWRv
cm92CisgKiBAY29weXJpZ2h0IDIwMTQgTWlrZSBTaWRvcm92LiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxl
IERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0g
ZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1
YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJV
bmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS5v
cGVyYXRvciA9PT0gInZvaWQiKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9k
ZSwgIkV4cGVjdGVkICd1bmRlZmluZWQnIGFuZCBpbnN0ZWFkIHNhdyAndm9pZCcuIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMjA6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdGhh
dCB3YXJucyBhYm91dCB1c2VkIHdhcm5pbmcgY29tbWVudHMKKyAqIEBhdXRob3IgQWxleGFuZGVy
IFNjaG1pZHQgPGh0dHBzOi8vZ2l0aHViLmNvbS9seGFuZGVycz4KKyAqLworCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7CisgICAgInVzZSBzdHJp
Y3QiOworCisgICAgdmFyIGNvbmZpZ3VyYXRpb24gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge30s
CisgICAgICAgIHdhcm5pbmdUZXJtcyA9IGNvbmZpZ3VyYXRpb24udGVybXMgfHwgWyJ0b2RvIiwg
ImZpeG1lIiwgInh4eCJdLAorICAgICAgICBsb2NhdGlvbiA9IGNvbmZpZ3VyYXRpb24ubG9jYXRp
b24gfHwgInN0YXJ0IjsKKworICAgIC8qKgorICAgICAqIFByZXBhcmVzIGEgc3BlY2lmaWVkIGNv
bW1lbnQgZm9yIGJlaW5nIGNoZWNrZWQuCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1lbnQg
VGhlIGNvbW1lbnQgdG8gcHJlcGFyZS4KKyAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgc3Bl
Y2lmaWVkIGNvbW1lbnQgcHJlcGFyZWQgZm9yIGJlaW5nIGNoZWNrZWQuCisgICAgICovCisgICAg
ZnVuY3Rpb24gcHJlcGFyZUNvbW1lbnRGb3JDaGVja2luZyhjb21tZW50KSB7CisgICAgICAgIHZh
ciBjb21tZW50VG9DaGVjazsKKworICAgICAgICBjb21tZW50VG9DaGVjayA9IGNvbW1lbnQudG9M
b3dlckNhc2UoKTsKKyAgICAgICAgY29tbWVudFRvQ2hlY2sgPSBjb21tZW50VG9DaGVjay50cmlt
KCk7CisKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRUb0NoZWNrOworICAgIH0KKworICAgIC8qKgor
ICAgICAqIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIGNvbW1lbnQgc3RhcnRzIHdpdGggYSBzcGVj
aWZpZWQgdGVybS4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29tbWVudFRvQ2hlY2sgVGhlIGNv
bW1lbnQgdG8gY2hlY2suCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGxvd2VyQ2FzZVRlcm0gVGhl
IHRlcm0gdG8gc2VhcmNoIGZvci4KKyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0
aGUgY29tbWVudCBzdGFydGVkIHdpdGggdGhlIHNwZWNpZmllZCB0ZXJtLCBlbHNlIGZhbHNlLgor
ICAgICAqLworICAgIGZ1bmN0aW9uIGNvbW1lbnRTdGFydHNXaXRoVGVybShjb21tZW50VG9DaGVj
aywgbG93ZXJDYXNlVGVybSkgeworICAgICAgICByZXR1cm4gY29tbWVudFRvQ2hlY2suaW5kZXhP
Zihsb3dlckNhc2VUZXJtKSA9PT0gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mg
aWYgdGhlIHNwZWNpZmllZCBjb21tZW50IGNvbnRhaW5zIGEgc3BlY2lmaWVkIHRlcm0gYXQgYW55
IGxvY2F0aW9uLgorICAgICAqIEBwYXJhbSB7U3RyaW5nfSBjb21tZW50VG9DaGVjayBUaGUgY29t
bWVudCB0byBjaGVjay4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gbG93ZXJDYXNlVGVybSBUaGUg
dGVybSB0byBzZWFyY2ggZm9yLgorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRo
ZSB0ZXJtIHdhcyBjb250YWluZWQgaW4gdGhlIGNvbW1lbnQsIGVsc2UgZmFsc2UuCisgICAgICov
CisgICAgZnVuY3Rpb24gY29tbWVudENvbnRhaW5zVGVybShjb21tZW50VG9DaGVjaywgbG93ZXJD
YXNlVGVybSkgeworICAgICAgICByZXR1cm4gY29tbWVudFRvQ2hlY2suaW5kZXhPZihsb3dlckNh
c2VUZXJtKSAhPT0gLTE7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgdGhlIHNw
ZWNpZmllZCBjb21tZW50IGZvciBtYXRjaGVzIG9mIHRoZSBjb25maWd1cmVkIHdhcm5pbmcgdGVy
bXMgYW5kIHJldHVybnMgdGhlIG1hdGNoZXMuCisgICAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1l
bnQgVGhlIGNvbW1lbnQgd2hpY2ggaXMgY2hlY2tlZC4KKyAgICAgKiBAcmV0dXJucyB7QXJyYXl9
IEFsbCBtYXRjaGVkIHdhcm5pbmcgdGVybXMgZm9yIHRoaXMgY29tbWVudC4KKyAgICAgKi8KKyAg
ICBmdW5jdGlvbiBjb21tZW50Q29udGFpbnNXYXJuaW5nVGVybShjb21tZW50KSB7CisgICAgICAg
IHZhciBtYXRjaGVzID0gW107CisKKyAgICAgICAgd2FybmluZ1Rlcm1zLmZvckVhY2goZnVuY3Rp
b24gKHRlcm0pIHsKKyAgICAgICAgICAgIHZhciBsb3dlckNhc2VUZXJtID0gdGVybS50b0xvd2Vy
Q2FzZSgpLAorICAgICAgICAgICAgICAgIGNvbW1lbnRUb0NoZWNrID0gcHJlcGFyZUNvbW1lbnRG
b3JDaGVja2luZyhjb21tZW50KTsKKworICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09PSAic3Rh
cnQiKSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRTdGFydHNXaXRoVGVybShjb21tZW50
VG9DaGVjaywgbG93ZXJDYXNlVGVybSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5w
dXNoKHRlcm0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobG9j
YXRpb24gPT09ICJhbnl3aGVyZSIpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWVudENvbnRh
aW5zVGVybShjb21tZW50VG9DaGVjaywgbG93ZXJDYXNlVGVybSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hlcy5wdXNoKHRlcm0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIG1hdGNoZXM7CisgICAgfQorCisgICAg
LyoqCisgICAgICogQ2hlY2tzIHRoZSBzcGVjaWZpZWQgbm9kZSBmb3IgbWF0Y2hpbmcgd2Fybmlu
ZyBjb21tZW50cyBhbmQgcmVwb3J0cyB0aGVtLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9k
ZSBUaGUgQVNUIG5vZGUgYmVpbmcgY2hlY2tlZC4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0gdW5k
ZWZpbmVkLgorICAgICAqLworICAgIGZ1bmN0aW9uIGNoZWNrQ29tbWVudChub2RlKSB7CisgICAg
ICAgIHZhciBtYXRjaGVzID0gY29tbWVudENvbnRhaW5zV2FybmluZ1Rlcm0obm9kZS52YWx1ZSk7
CisKKyAgICAgICAgbWF0Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uIChtYXRjaGVkVGVybSkgeworICAg
ICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVuZXhwZWN0ZWQgIiArIG1hdGNoZWRUZXJt
ICsgIiBjb21tZW50LiIpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICByZXR1cm4geworICAg
ICAgICAiQmxvY2tDb21tZW50IjogY2hlY2tDb21tZW50LAorICAgICAgICAiTGluZUNvbW1lbnQi
OiBjaGVja0NvbW1lbnQKKyAgICB9OworfTsKKworfSx7fV0sMTIxOltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGZsYWcgdXNl
IG9mIHdpdGggc3RhdGVtZW50CisgKiBAYXV0aG9yIE5pY2hvbGFzIEMuIFpha2FzCisgKi8KKwor
CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKwor
ICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisgICAgICAgICJXaXRoU3RhdGVtZW50
IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVu
ZXhwZWN0ZWQgdXNlIG9mICd3aXRoJyBzdGF0ZW1lbnQuIik7CisgICAgICAgIH0KKyAgICB9Owor
Cit9OworCit9LHt9XSwxMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoq
CisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxhZyB3cmFwcGluZyBub25lLWlmZmUgaW4gcGFy
ZW5zCisgKiBAYXV0aG9yIElseWEgVm9sb2RpbgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgcmV0dXJuIHsKKworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZnVuY3Rpb24obm9k
ZSkgeworICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCks
CisgICAgICAgICAgICAgICAgcHJldmlvdXNUb2tlbiwgbmV4dFRva2VuOworCisgICAgICAgICAg
ICBpZiAoIS9DYWxsRXhwcmVzc2lvbnxOZXdFeHByZXNzaW9uLy50ZXN0KGFuY2VzdG9ycy5wb3Ao
KS50eXBlKSkgeworICAgICAgICAgICAgICAgIHByZXZpb3VzVG9rZW4gPSBjb250ZXh0LmdldFRv
a2VuQmVmb3JlKG5vZGUpOworICAgICAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0
VG9rZW5BZnRlcihub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUb2tlbi52YWx1
ZSA9PT0gIigiICYmIG5leHRUb2tlbi52YWx1ZSA9PT0gIikiKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJXcmFwcGluZyBub24tSUlGRSBmdW5jdGlvbiBsaXRl
cmFscyBpbiBwYXJlbnMgaXMgdW5uZWNlc3NhcnkuIik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTIzOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBBIHJ1bGUg
dG8gZW5zdXJlIHRoZSB1c2Ugb2YgYSBzaW5nbGUgdmFyaWFibGUgZGVjbGFyYXRpb24uCisgKiBA
YXV0aG9yIElhbiBDaHJpc3RpYW4gTXllcnMKKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUu
ZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgdmFyIGZ1bmN0aW9uU3RhY2sgPSBbXTsKKworICAgIGZ1bmN0aW9uIHN0YXJ0
RnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uU3RhY2sucHVzaChmYWxzZSk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZW5kRnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uU3RhY2sucG9w
KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tEZWNsYXJhdGlvbnMobm9kZSkgeworICAg
ICAgICBpZiAoZnVuY3Rpb25TdGFja1tmdW5jdGlvblN0YWNrLmxlbmd0aCAtIDFdKSB7CisgICAg
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQ29tYmluZSB0aGlzIHdpdGggdGhlIHByZXZp
b3VzICd2YXInIHN0YXRlbWVudC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZ1
bmN0aW9uU3RhY2tbZnVuY3Rpb25TdGFjay5sZW5ndGggLSAxXSA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljIEFQSQorICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIHJldHVybiB7CisgICAgICAgICJQcm9ncmFtIjog
c3RhcnRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFydEZ1bmN0
aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRGdW5jdGlvbiwKKworICAg
ICAgICAiVmFyaWFibGVEZWNsYXJhdGlvbiI6IGNoZWNrRGVjbGFyYXRpb25zLAorCisgICAgICAg
ICJQcm9ncmFtOmV4aXQiOiBlbmRGdW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRp
b246ZXhpdCI6IGVuZEZ1bmN0aW9uLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQi
OiBlbmRGdW5jdGlvbgorICAgIH07CisKK307CisKK30se31dLDEyNDpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQSBydWxlIHRvIGVuc3Vy
ZSBibGFuayBsaW5lcyB3aXRoaW4gYmxvY2tzLgorICogQGF1dGhvciBNYXRoaWFzIFNjaHJlY2sg
PGh0dHBzOi8vZ2l0aHViLmNvbS9sbzF0dW1hPgorICogQGNvcHlyaWdodCAyMDE0IE1hdGhpYXMg
U2NocmVjay4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisidXNlIHN0cmljdCI7CisKKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHsKKyAgICB2
YXIgcmVxdWlyZVBhZGRpbmcgPSBjb250ZXh0Lm9wdGlvbnNbMF0gIT09ICJuZXZlciI7CisKKyAg
ICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIG5vbiBlbXB0eSBibG9jayBub2RlIGhh
cyBhIGJsYW5rIGxpbmUgYmVmb3JlIGl0cyBmaXJzdCBjaGlsZCBub2RlLgorICAgICAqIEBwYXJh
bSB7QVNUTm9kZX0gbm9kZSBUaGUgQVNUIG5vZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAg
KiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIGJsb2NrIHN0YXJ0cyB3aXRo
IGEgYmxhbmsgbGluZS4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc05vbkVtcHR5QmxvY2tUb3BQ
YWRkZWQobm9kZSkgeworICAgICAgICB2YXIgYmxvY2tTdGFydCA9IG5vZGUubG9jLnN0YXJ0Lmxp
bmUsCisgICAgICAgICAgICBmaXJzdCA9IG5vZGUuYm9keVswXSwKKyAgICAgICAgICAgIGZpcnN0
TGluZSA9IGZpcnN0LmxvYy5zdGFydC5saW5lLAorICAgICAgICAgICAgZXhwZWN0ZWRGaXJzdExp
bmUgPSBibG9ja1N0YXJ0ICsgMiwKKyAgICAgICAgICAgIGxlYWRpbmdDb21tZW50cyA9IGNvbnRl
eHQuZ2V0Q29tbWVudHMoZmlyc3QpLmxlYWRpbmc7CisKKyAgICAgICAgaWYgKGxlYWRpbmdDb21t
ZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBmaXJzdExpbmUgPSBsZWFkaW5nQ29tbWVu
dHNbMF0ubG9jLnN0YXJ0LmxpbmU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwZWN0
ZWRGaXJzdExpbmUgPD0gZmlyc3RMaW5lOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNr
cyBpZiB0aGUgZ2l2ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgaGFzIGEgYmxhbmsgbGluZSBhZnRl
ciBpdHMgbGFzdCBjaGlsZCBub2RlLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUg
QVNUIG5vZGUgb2YgYSBCbG9ja1N0YXRlbWVudC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0g
V2hldGhlciBvciBub3QgdGhlIGJsb2NrIGVuZHMgd2l0aCBhIGJsYW5rIGxpbmUuCisgICAgICov
CisgICAgZnVuY3Rpb24gaXNOb25FbXB0eUJsb2NrQm90dG9tUGFkZGVkKG5vZGUpIHsKKyAgICAg
ICAgdmFyIGJsb2NrRW5kID0gbm9kZS5sb2MuZW5kLmxpbmUsCisgICAgICAgICAgICBsYXN0ID0g
bm9kZS5ib2R5W25vZGUuYm9keS5sZW5ndGggLSAxXSwKKyAgICAgICAgICAgIGxhc3RMaW5lID0g
bGFzdC5sb2MuZW5kLmxpbmUsCisgICAgICAgICAgICBleHBlY3RlZExhc3RMaW5lID0gYmxvY2tF
bmQgLSAyLAorICAgICAgICAgICAgdHJhaWxpbmdDb21tZW50cyA9IGNvbnRleHQuZ2V0Q29tbWVu
dHMobGFzdCkudHJhaWxpbmc7CisKKyAgICAgICAgaWYgKHRyYWlsaW5nQ29tbWVudHMubGVuZ3Ro
ID4gMCkgeworICAgICAgICAgICAgbGFzdExpbmUgPSB0cmFpbGluZ0NvbW1lbnRzW3RyYWlsaW5n
Q29tbWVudHMubGVuZ3RoIC0gMV0ubG9jLmVuZC5saW5lOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGxhc3RMaW5lIDw9IGV4cGVjdGVkTGFzdExpbmU7CisgICAgfQorCisgICAgLyoqCisg
ICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBub24gZW1wdHkgYmxvY2sgbm9kZSBzdGFydHMgQU5E
IGVuZHMgd2l0aCBhIGJsYW5rIGxpbmUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRo
ZSBBU1Qgbm9kZSBvZiBhIEJsb2NrU3RhdGVtZW50LgorICAgICAqIEByZXR1cm5zIHtib29sZWFu
fSBXaGV0aGVyIG9yIG5vdCB0aGUgYmxvY2sgc3RhcnRzIGFuZCBlbmRzIHdpdGggYSBibGFuayBs
aW5lLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlzTm9uRW1wdHlCbG9ja1BhZGRlZChub2RlKSB7
CisgICAgICAgIHJldHVybiBpc05vbkVtcHR5QmxvY2tUb3BQYWRkZWQobm9kZSkgJiYgaXNOb25F
bXB0eUJsb2NrQm90dG9tUGFkZGVkKG5vZGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENo
ZWNrcyBpZiB0aGUgZ2l2ZW4gbm9uIGVtcHR5IGJsb2NrIG5vZGUgc3RhcnRzIE9SIGVuZHMgd2l0
aCBhIGJsYW5rIGxpbmUuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9k
ZSBvZiBhIEJsb2NrU3RhdGVtZW50LgorICAgICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVy
IG9yIG5vdCB0aGUgYmxvY2sgc3RhcnRzIGFuZCBlbmRzIHdpdGggYSBibGFuayBsaW5lLgorICAg
ICAqLworICAgIGZ1bmN0aW9uIGhhc05vbkVtcHR5QmxvY2tFeHRyYVBhZGRpbmcobm9kZSkgewor
ICAgICAgICByZXR1cm4gaXNOb25FbXB0eUJsb2NrVG9wUGFkZGVkKG5vZGUpIHx8IGlzTm9uRW1w
dHlCbG9ja0JvdHRvbVBhZGRlZChub2RlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVj
a3MgdGhlIGdpdmVuIEJsb2NrU3RhdGVtZW50IG5vZGUgdG8gYmUgcGFkZGVkIGlmIHRoZSBibG9j
ayBpcyBub3QgZW1wdHkuCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIFRoZSBBU1Qgbm9k
ZSBvZiBhIEJsb2NrU3RhdGVtZW50LgorICAgICAqIEByZXR1cm5zIHt2b2lkfSB1bmRlZmluZWQu
CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tQYWRkaW5nKG5vZGUpIHsKKyAgICAgICAgaWYg
KG5vZGUuYm9keS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBpZiAocmVxdWlyZVBhZGRpbmcp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzTm9uRW1wdHlCbG9ja1BhZGRlZChub2RlKSkgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQmxvY2sgbXVzdCBiZSBw
YWRkZWQgYnkgYmxhbmsgbGluZXMuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFzTm9uRW1wdHlCbG9ja0V4dHJhUGFkZGlu
Zyhub2RlKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiQmxv
Y2sgbXVzdCBub3QgYmUgcGFkZGVkIGJ5IGJsYW5rIGxpbmVzLiIpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7CisgICAg
ICAgICJCbG9ja1N0YXRlbWVudCI6IGNoZWNrUGFkZGluZworICAgIH07CisKK307CisKK30se31d
LDEyNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3Zl
cnZpZXcgUnVsZSB0byBmbGFnIG5vbi1xdW90ZWQgcHJvcGVydHkgbmFtZXMgaW4gb2JqZWN0IGxp
dGVyYWxzLgorICogQGF1dGhvciBNYXRoaWFzIEJ5bmVucyA8aHR0cDovL21hdGhpYXNieW5lbnMu
YmUvPgorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24K
Ky8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZhciBlc3ByaW1hID0gcmVxdWlyZSgiZXNwcmlt
YSIpOworCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ug
c3RyaWN0IjsKKworICAgIHZhciBNT0RFID0gY29udGV4dC5vcHRpb25zWzBdOworCisgICAgc3dp
dGNoIChNT0RFKSB7CisKKyAgICAgICAgY2FzZSAiYXMtbmVlZGVkIjoKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHk6IGZ1bmN0aW9uKG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIGtleSA9IG5vZGUua2V5OworICAgICAgICAgICAgICAgICAgICAv
LyBFbnN1cmUgdGhhdCBhbnkgcXVvdGVkIHByb3BlcnR5IG5hbWVzIHJlcXVpcmVkIHF1b3RpbmcK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGtleS50eXBlID09PSAiTGl0ZXJhbCIgJiYgdHlwZW9m
IGtleS52YWx1ZSA9PT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGVzcHJpbWEudG9rZW5p
emUoa2V5LnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmxl
bmd0aCAhPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciB0ID0gdG9rZW5zWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQudHlwZSA9PT0gIklkZW50aWZp
ZXIiIHx8IHQudHlwZSA9PT0gIk51bGwiIHx8IHQudHlwZSA9PT0gIkJvb2xlYW4iIHx8IHQudHlw
ZSA9PT0gIk51bWVyaWMiICYmICIiICsgK3QudmFsdWUgPT09IHQudmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5uZWNlc3NhcmlseSBx
dW90ZWQgcHJvcGVydHkgYHt7bmFtZX19YCBmb3VuZC4iLCBrZXkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICBQcm9wZXJ0eTogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAgICAgICAg
ICAgICB2YXIga2V5ID0gbm9kZS5rZXk7CisgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBh
bGwgcHJvcGVydHkgbmFtZXMgYXJlIHF1b3RlZAorICAgICAgICAgICAgICAgICAgICBpZiAoa2V5
LnR5cGUgIT09ICJMaXRlcmFsIiB8fCB0eXBlb2Yga2V5LnZhbHVlICE9PSAic3RyaW5nIikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlVucXVvdGVkIHBy
b3BlcnR5IGB7e25hbWV9fWAgZm91bmQuIiwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICB9CisKK307CisKK30seyJl
c3ByaW1hIjo2fV0sMTI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgor
ICogQGZpbGVvdmVydmlldyBBIHJ1bGUgdG8gY2hvb3NlIGJldHdlZW4gc2luZ2xlIGFuZCBkb3Vi
bGUgcXVvdGUgbWFya3MKKyAqIEBhdXRob3IgTWF0dCBEdVZhbGwgPGh0dHA6Ly93d3cubWF0dGR1
dmFsbC5jb20vPiwgQnJhbmRvbiBQYXl0b24KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorLy8gQ29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2YXIgUVVPVEVfU0VU
VElOR1MgPSB7CisgICAgImRvdWJsZSI6IHsKKyAgICAgICAgcXVvdGU6ICJcIiIsCisgICAgICAg
IGFsdGVybmF0ZVF1b3RlOiAiJyIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiZG91YmxlcXVvdGUi
CisgICAgfSwKKyAgICAic2luZ2xlIjogeworICAgICAgICBxdW90ZTogIiciLAorICAgICAgICBh
bHRlcm5hdGVRdW90ZTogIlwiIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJzaW5nbGVxdW90ZSIK
KyAgICB9Cit9OworCit2YXIgQVZPSURfRVNDQVBFID0gImF2b2lkLWVzY2FwZSI7CisKKy8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgLyoqCisgICAgICogVmFsaWRhdGUgdGhhdCBhIHN0cmluZyBwYXNz
ZWQgaW4gaXMgc3Vycm91bmRlZCBieSB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlcgorICAgICAqIEBw
YXJhbSAge3N0cmluZ30gdmFsIFRoZSB0ZXh0IHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSAge3N0
cmluZ30gY2hhcmFjdGVyIFRoZSBjaGFyYWN0ZXIgdG8gc2VlIGlmIGl0J3Mgc3Vycm91bmRlZCBi
eS4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdGV4dCBpcyBzdXJyb3Vu
ZGVkIGJ5IHRoZSBjaGFyYWN0ZXIsIGZhbHNlIGlmIG5vdC4KKyAgICAgKi8KKyAgICBmdW5jdGlv
biBpc1N1cnJvdW5kZWRCeSh2YWwsIGNoYXJhY3RlcikgeworICAgICAgICByZXR1cm4gdmFsWzBd
ID09PSBjaGFyYWN0ZXIgJiYgdmFsW3ZhbC5sZW5ndGggLSAxXSA9PT0gY2hhcmFjdGVyOworICAg
IH0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVyYWwiOiBmdW5jdGlvbihub2RlKSB7
CisgICAgICAgICAgICB2YXIgdmFsID0gbm9kZS52YWx1ZSwKKyAgICAgICAgICAgICAgICByYXdW
YWwgPSBub2RlLnJhdywKKyAgICAgICAgICAgICAgICBxdW90ZU9wdGlvbiA9IGNvbnRleHQub3B0
aW9uc1swXSwKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IFFVT1RFX1NFVFRJTkdTW3F1b3Rl
T3B0aW9uXSwKKyAgICAgICAgICAgICAgICBhdm9pZEVzY2FwZSA9IGNvbnRleHQub3B0aW9uc1sx
XSA9PT0gQVZPSURfRVNDQVBFLAorICAgICAgICAgICAgICAgIGlzVmFsaWQ7CisKKyAgICAgICAg
ICAgIGlmIChzZXR0aW5ncyAmJiB0eXBlb2YgdmFsID09PSAic3RyaW5nIikgeworICAgICAgICAg
ICAgICAgIGlzVmFsaWQgPSBpc1N1cnJvdW5kZWRCeShyYXdWYWwsIHNldHRpbmdzLnF1b3RlKTsK
KworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBhdm9pZEVzY2FwZSkgeworICAgICAg
ICAgICAgICAgICAgICBpc1ZhbGlkID0gaXNTdXJyb3VuZGVkQnkocmF3VmFsLCBzZXR0aW5ncy5h
bHRlcm5hdGVRdW90ZSkgJiYgcmF3VmFsLmluZGV4T2Yoc2V0dGluZ3MucXVvdGUpID49IDA7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKXsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIlN0cmluZ3MgbXVzdCB1c2UgIiAr
IHNldHRpbmdzLmRlc2NyaXB0aW9uICsgIi4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9OworCit9OworCit9LHt9XSwxMjc6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxh
ZyB1c2Ugb2YgcGFyc2VJbnQgd2l0aG91dCBhIHJhZGl4IGFyZ3VtZW50CisgKiBAYXV0aG9yIEph
bWVzIEFsbGFyZGljZQorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERl
ZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVu
Y3Rpb24oY29udGV4dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKyAg
ICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgeworCisgICAgICAgICAgICB2
YXIgcmFkaXg7CisKKyAgICAgICAgICAgIGlmIChub2RlLmNhbGxlZS5uYW1lID09PSAicGFyc2VJ
bnQiKSB7CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMubGVuZ3RoIDwgMikg
eworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiTWlzc2luZyByYWRp
eCBwYXJhbWV0ZXIuIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAg
ICAgICAgICByYWRpeCA9IG5vZGUuYXJndW1lbnRzWzFdOworCisgICAgICAgICAgICAgICAgICAg
IC8vIGRvbid0IGFsbG93IG5vbi1udW1lcmljIGxpdGVyYWxzIG9yIHVuZGVmaW5lZAorICAgICAg
ICAgICAgICAgICAgICBpZiAoKHJhZGl4LnR5cGUgPT09ICJMaXRlcmFsIiAmJiB0eXBlb2YgcmFk
aXgudmFsdWUgIT09ICJudW1iZXIiKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHJhZGl4
LnR5cGUgPT09ICJJZGVudGlmaWVyIiAmJiByYWRpeC5uYW1lID09PSAidW5kZWZpbmVkIikKKyAg
ICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCAiSW52YWxpZCByYWRpeCBwYXJhbWV0ZXIuIik7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH07CisKK307CisKK30se31dLDEyODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7
CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIG1pc3Npbmcgc2VtaWNvbG9ucy4K
KyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3QiOworCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIg
T1BUX09VVF9QQVRURVJOID0gL1tcW1woXC9cK1wtXS87CisKKyAgICB2YXIgYWx3YXlzID0gY29u
dGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgIC8vIEhlbHBlcnMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAvKioKKyAgICAg
KiBDaGVja3MgYSBub2RlIHRvIHNlZSBpZiBpdCdzIGZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uLgor
ICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAgICAgKiBA
cmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBjaGVja0ZvclNlbWljb2xvbihu
b2RlKSB7CisgICAgICAgIHZhciBsYXN0VG9rZW4gPSBjb250ZXh0LmdldExhc3RUb2tlbihub2Rl
KSwKKyAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5BZnRlcihub2RlKTsK
KworICAgICAgICBpZiAoYWx3YXlzKSB7CisgICAgICAgICAgICBpZiAobGFzdFRva2VuLnR5cGUg
IT09ICJQdW5jdHVhdG9yIiB8fCBsYXN0VG9rZW4udmFsdWUgIT09ICI7IikgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGxhc3RUb2tlbi5sb2MuZW5kLCAiTWlzc2luZyBz
ZW1pY29sb24uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAobGFzdFRva2VuLnR5cGUgPT09ICJQdW5jdHVhdG9yIiAmJiBsYXN0VG9rZW4udmFsdWUg
PT09ICI7IikgeworCisgICAgICAgICAgICAgICAgaWYgKCFuZXh0VG9rZW4gfHwgIShPUFRfT1VU
X1BBVFRFUk4udGVzdChuZXh0VG9rZW4udmFsdWUpKSkgeworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCBub2RlLmxvYy5lbmQsICJFeHRyYSBzZW1pY29sb24uIik7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvKioKKyAgICAgKiBDaGVja3MgdG8gc2VlIGlmIHRoZXJlJ3MgYSBzZW1pY29sb24gYWZ0ZXIg
YSB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhl
IG5vZGUgdG8gY2hlY2suCisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVu
Y3Rpb24gY2hlY2tGb3JTZW1pY29sb25Gb3JWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpIHsKKwor
ICAgICAgICB2YXIgYW5jZXN0b3JzID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKSwKKyAgICAgICAg
ICAgIHBhcmVudEluZGV4ID0gYW5jZXN0b3JzLmxlbmd0aCAtIDEsCisgICAgICAgICAgICBwYXJl
bnQgPSBhbmNlc3RvcnNbcGFyZW50SW5kZXhdOworCisgICAgICAgIGlmICgocGFyZW50LnR5cGUg
IT09ICJGb3JTdGF0ZW1lbnQiIHx8IHBhcmVudC5pbml0ICE9PSBub2RlKSAmJgorICAgICAgICAg
ICAgKHBhcmVudC50eXBlICE9PSAiRm9ySW5TdGF0ZW1lbnQiIHx8IHBhcmVudC5sZWZ0ICE9PSBu
b2RlKQorICAgICAgICApIHsKKyAgICAgICAgICAgIGNoZWNrRm9yU2VtaWNvbG9uKG5vZGUpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1Ymxp
YyBBUEkKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICByZXR1cm4geworCisgICAgICAg
ICJWYXJpYWJsZURlY2xhcmF0aW9uIjogY2hlY2tGb3JTZW1pY29sb25Gb3JWYXJpYWJsZURlY2xh
cmF0aW9uLAorICAgICAgICAiRXhwcmVzc2lvblN0YXRlbWVudCI6IGNoZWNrRm9yU2VtaWNvbG9u
LAorICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogY2hlY2tGb3JTZW1pY29sb24sCisgICAgICAg
ICJEZWJ1Z2dlclN0YXRlbWVudCI6IGNoZWNrRm9yU2VtaWNvbG9uLAorICAgICAgICAiQnJlYWtT
dGF0ZW1lbnQiOiBjaGVja0ZvclNlbWljb2xvbiwKKyAgICAgICAgIkNvbnRpbnVlU3RhdGVtZW50
IjogY2hlY2tGb3JTZW1pY29sb24sCisgICAgICAgICJFbXB0eVN0YXRlbWVudCI6IGZ1bmN0aW9u
IChub2RlKSB7CisgICAgICAgICAgICB2YXIgbmV4dFRva2VuOworCisgICAgICAgICAgICBpZiAo
IWFsd2F5cykgeworICAgICAgICAgICAgICAgIG5leHRUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5B
ZnRlcihub2RlKSB8fCBjb250ZXh0LmdldExhc3RUb2tlbihub2RlKTsKKworICAgICAgICAgICAg
ICAgIGlmICghKE9QVF9PVVRfUEFUVEVSTi50ZXN0KG5leHRUb2tlbi52YWx1ZSkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJFeHRyYSBzZW1pY29sb24uIik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisKKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDEyOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byByZXF1aXJlIHNvcnRpbmcgb2YgdmFyaWFibGVz
IHdpdGhpbiBhIHNpbmdsZSBWYXJpYWJsZSBEZWNsYXJhdGlvbiBibG9jaworICogQGF1dGhvciBJ
bHlhIFZvbG9kaW4KKyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZp
bml0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0
aW9uKGNvbnRleHQpIHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHZhciBjb25maWd1cmF0
aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9LAorICAgICAgICBpZ25vcmVDYXNlID0gY29u
ZmlndXJhdGlvbi5pZ25vcmVDYXNlIHx8IGZhbHNlOworCisgICAgcmV0dXJuIHsKKyAgICAgICAg
IlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICBub2Rl
LmRlY2xhcmF0aW9ucy5yZWR1Y2UoZnVuY3Rpb24obWVtbywgZGVjbCkgeworICAgICAgICAgICAg
ICAgIHZhciBsYXN0VmFyaWFibGVOYW1lID0gbWVtby5pZC5uYW1lLAorICAgICAgICAgICAgICAg
ICAgICBjdXJyZW5WYXJpYWJsZU5hbWUgPSBkZWNsLmlkLm5hbWU7CisKKyAgICAgICAgICAgICAg
ICBpZiAoaWdub3JlQ2FzZSkgeworICAgICAgICAgICAgICAgICAgICBsYXN0VmFyaWFibGVOYW1l
ID0gbGFzdFZhcmlhYmxlTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICBj
dXJyZW5WYXJpYWJsZU5hbWUgPSBjdXJyZW5WYXJpYWJsZU5hbWUudG9Mb3dlckNhc2UoKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVuVmFyaWFibGVOYW1l
IDwgbGFzdFZhcmlhYmxlTmFtZSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChkZWNsLCAiVmFyaWFibGVzIHdpdGhpbiB0aGUgc2FtZSBkZWNsYXJhdGlvbiBibG9jayBzaG91
bGQgYmUgc29ydGVkIGFscGhhYmV0aWNhbGx5Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtZW1vOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBkZWNsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIG5vZGUuZGVjbGFy
YXRpb25zWzBdKTsKKyAgICAgICAgfQorICAgIH07Cit9OworCit9LHt9XSwxMzA6W2Z1bmN0aW9u
KHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8g
ZW5mb3JjZSB0aGUgbnVtYmVyIG9mIHNwYWNlcyBhZnRlciBjZXJ0YWluIGtleXdvcmRzCisgKiBA
YXV0aG9yIE5pY2sgRmlzaGVyCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICAvLyB1bmxlc3MgdGhl
IGZpcnN0IG9wdGlvbiBpcyBgIm5ldmVyImAsIHRoZW4gYSBzcGFjZSBpcyByZXF1aXJlZAorICAg
IHZhciByZXF1aXJlc1NwYWNlID0gY29udGV4dC5vcHRpb25zWzBdICE9PSAibmV2ZXIiLAorICAg
ICAgICBjb25maWcgPSBjb250ZXh0Lm9wdGlvbnNbMV0gfHwgeyBjaGVja0Z1bmN0aW9uS2V5d29y
ZDogZmFsc2UgfTsKKworICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBzZXBhcmF0aW9uIG9m
IHR3byBhZGphY2VudCB0b2tlbnMgbWVldHMgdGhlIHNwYWNpbmcgcnVsZXMsIGFuZCByZXBvcnQg
YSBwcm9ibGVtIGlmIG5vdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAg
VGhlIG5vZGUgdG8gd2hpY2ggdGhlIHBvdGVudGlhbCBwcm9ibGVtIGJlbG9uZ3MuCisgICAgICog
QHBhcmFtIHtUb2tlbn0gbGVmdCAgICBUaGUgZmlyc3QgdG9rZW4uCisgICAgICogQHBhcmFtIHtU
b2tlbn0gcmlnaHQgICBUaGUgc2Vjb25kIHRva2VuCisgICAgICogQHJldHVybnMge3ZvaWR9Cisg
ICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tUb2tlbnMobm9kZSwgbGVmdCwgcmlnaHQpIHsKKyAg
ICAgICAgdmFyIGhhc1NwYWNlID0gbGVmdC5yYW5nZVsxXSA8IHJpZ2h0LnJhbmdlWzBdLAorICAg
ICAgICAgICAgdmFsdWUgPSBsZWZ0LnZhbHVlOworCisgICAgICAgIGlmIChoYXNTcGFjZSAhPT0g
cmVxdWlyZXNTcGFjZSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIktleXdv
cmQgXCJ7e3ZhbHVlfX1cIiBtdXN0IHt7bm90fX1iZSBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLiIs
IHsKKyAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgICAgICAgICAgbm90OiBy
ZXF1aXJlc1NwYWNlID8gIiIgOiAibm90ICIKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIG5vZGUgKGBpZmAsIGBm
b3JgLCBgd2hpbGVgLCBldGMpLCBoYXMgdGhlIGNvcnJlY3Qgc3BhY2luZyBhZnRlciBpdC4KKyAg
ICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gY2hlY2suCisgICAgICogQHJl
dHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2sobm9kZSkgeworICAgICAg
ICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAyKTsKKyAgICAgICAg
Y2hlY2tUb2tlbnMobm9kZSwgdG9rZW5zWzBdLCB0b2tlbnNbMV0pOworICAgIH0KKworICAgIHJl
dHVybiB7CisgICAgICAgICJJZlN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAg
ICAgICBjaGVjayhub2RlKTsKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBgZWxzZWAKKyAgICAg
ICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSAmJiBub2RlLmFsdGVybmF0ZS50eXBlICE9PSAiSWZT
dGF0ZW1lbnQiKSB7CisgICAgICAgICAgICAgICAgY2hlY2tUb2tlbnMobm9kZS5hbHRlcm5hdGUs
IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZS5hbHRlcm5hdGUpLCBjb250ZXh0LmdldEZpcnN0
VG9rZW4obm9kZS5hbHRlcm5hdGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgIkZvclN0YXRlbWVudCI6IGNoZWNrLAorICAgICAgICAiRm9yT2ZTdGF0ZW1lbnQiOiBjaGVj
aywKKyAgICAgICAgIkZvckluU3RhdGVtZW50IjogY2hlY2ssCisgICAgICAgICJXaGlsZVN0YXRl
bWVudCI6IGNoZWNrLAorICAgICAgICAiRG9XaGlsZVN0YXRlbWVudCI6IGZ1bmN0aW9uIChub2Rl
KSB7CisgICAgICAgICAgICBjaGVjayhub2RlKTsKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoZSBg
d2hpbGVgCisgICAgICAgICAgICB2YXIgd2hpbGVUb2tlbnMgPSBjb250ZXh0LmdldFRva2Vuc0Jl
Zm9yZShub2RlLnRlc3QsIDIpOworICAgICAgICAgICAgY2hlY2tUb2tlbnMobm9kZSwgd2hpbGVU
b2tlbnNbMF0sIHdoaWxlVG9rZW5zWzFdKTsKKyAgICAgICAgfSwKKyAgICAgICAgIlN3aXRjaFN0
YXRlbWVudCI6IGNoZWNrLAorICAgICAgICAiVHJ5U3RhdGVtZW50IjogZnVuY3Rpb24gKG5vZGUp
IHsKKyAgICAgICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIGBm
aW5hbGx5YAorICAgICAgICAgICAgaWYgKG5vZGUuZmluYWxpemVyKSB7CisgICAgICAgICAgICAg
ICAgY2hlY2tUb2tlbnMobm9kZS5maW5hbGl6ZXIsIGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9k
ZS5maW5hbGl6ZXIpLCBjb250ZXh0LmdldEZpcnN0VG9rZW4obm9kZS5maW5hbGl6ZXIpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIkNhdGNoU3RhdGVtZW50IjogY2hlY2ss
CisgICAgICAgICJXaXRoU3RhdGVtZW50IjogY2hlY2ssCisgICAgICAgICJGdW5jdGlvbkV4cHJl
c3Npb24iOiBmdW5jdGlvbiAobm9kZSkgeworICAgICAgICAgICAgaWYgKGNvbmZpZy5jaGVja0Z1
bmN0aW9uS2V5d29yZCkgeworICAgICAgICAgICAgICAgIGNoZWNrKG5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKK307CisKK30se31dLDEzMTpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRGlzYWxsb3dzIG9yIGVu
Zm9yY2VzIHNwYWNlcyBpbnNpZGUgb2YgYnJhY2tldHMuCisgKiBAYXV0aG9yIElhbiBDaHJpc3Rp
YW4gTXllcnMKKyAqIEBjb3B5cmlnaHQgMjAxNCBCcmFuZHluIEJlbm5ldHQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBAY29weXJpZ2h0IDIwMTQgTWljaGFlbCBGaWNhcnJhLiBObyByaWdodHMg
cmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
Ky8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4
cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAg
ICAgc3BhY2VkOiBjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJhbHdheXMiLAorICAgICAgICBzaW5n
bGVFbGVtZW50RXhjZXB0aW9uOiBjb250ZXh0Lm9wdGlvbnNbMV0gIT0gbnVsbCAmJiAhIWNvbnRl
eHQub3B0aW9uc1sxXS5zaW5nbGVWYWx1ZSwKKyAgICAgICAgb2JqZWN0c0luQXJyYXlzRXhjZXB0
aW9uOiBjb250ZXh0Lm9wdGlvbnNbMV0gIT0gbnVsbCAmJiAhIWNvbnRleHQub3B0aW9uc1sxXS5v
YmplY3RzSW5BcnJheXMsCisgICAgICAgIGFycmF5c0luQXJyYXlzRXhjZXB0aW9uOiBjb250ZXh0
Lm9wdGlvbnNbMV0gIT0gbnVsbCAmJiAhIWNvbnRleHQub3B0aW9uc1sxXS5hcnJheXNJbkFycmF5
cywKKyAgICAgICAgcHJvcGVydHlOYW1lOiBjb250ZXh0Lm9wdGlvbnNbMV0gPT0gbnVsbCB8fCBj
b250ZXh0Lm9wdGlvbnNbMV0ucHJvcGVydHlOYW1lID09IG51bGwgfHwgISFjb250ZXh0Lm9wdGlv
bnNbMV0ucHJvcGVydHlOYW1lCisgICAgfTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyoqCisgICAgICog
RGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBhZGphY2VudCB0b2tlbnMgYXJlIGhhdmUgd2hpdGVzcGFj
ZSBiZXR3ZWVuIHRoZW0uCisgICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0
b2tlbiBvYmplY3QuCisgICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRv
a2VuIG9iamVjdC4KKyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhl
cmUgaXMgc3BhY2UgYmV0d2VlbiB0aGUgdG9rZW5zLgorICAgICAqLworICAgIGZ1bmN0aW9uIGlz
U3BhY2VkKGxlZnQsIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBsZWZ0LnJhbmdlWzFdIDwgcmln
aHQucmFuZ2VbMF07CisgICAgfQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVy
IHR3byBhZGphY2VudCB0b2tlbnMgYXJlIG9uIHRoZSBzYW1lIGxpbmUuCisgICAgICogQHBhcmFt
IHtPYmplY3R9IGxlZnQgLSBUaGUgbGVmdCB0b2tlbiBvYmplY3QuCisgICAgICogQHBhcmFtIHtP
YmplY3R9IHJpZ2h0IC0gVGhlIHJpZ2h0IHRva2VuIG9iamVjdC4KKyAgICAgKiBAcmV0dXJucyB7
Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIHRva2VucyBhcmUgb24gdGhlIHNhbWUgbGluZS4K
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1NhbWVMaW5lKGxlZnQsIHJpZ2h0KSB7CisgICAgICAg
IHJldHVybiBsZWZ0LmxvYy5zdGFydC5saW5lID09PSByaWdodC5sb2Muc3RhcnQubGluZTsKKyAg
ICB9CisKKyAgICAvKioKKyAgICAqIFJlcG9ydHMgdGhhdCB0aGVyZSBzaG91bGRuJ3QgYmUgYSBz
cGFjZSBhZnRlciB0aGUgZmlyc3QgdG9rZW4KKyAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAt
IFRoZSBub2RlIHRvIHJlcG9ydCBpbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IuCisgICAgKiBAcGFy
YW0ge09iamVjdFtdfSB0b2tlbnMgLSBUaGUgdG9rZW5zIHRvIGJlIGNoZWNrZWQgZm9yIHNwYWNp
bmcuCisgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAqLworICAgIGZ1bmN0aW9uIHJlcG9ydE5v
QmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKSB7CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5v
ZGUsIHRva2Vuc1swXS5sb2Muc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICJUaGVyZSBzaG91
bGQgYmUgbm8gc3BhY2UgYWZ0ZXIgJyIgKyB0b2tlbnNbMF0udmFsdWUgKyAiJyIpOworICAgIH0K
KworICAgIC8qKgorICAgICogUmVwb3J0cyB0aGF0IHRoZXJlIHNob3VsZG4ndCBiZSBhIHNwYWNl
IGJlZm9yZSB0aGUgbGFzdCB0b2tlbgorICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gVGhl
IG5vZGUgdG8gcmVwb3J0IGluIHRoZSBldmVudCBvZiBhbiBlcnJvci4KKyAgICAqIEBwYXJhbSB7
T2JqZWN0W119IHRva2VucyAtIFRoZSB0b2tlbnMgdG8gYmUgY2hlY2tlZCBmb3Igc3BhY2luZy4K
KyAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICovCisgICAgZnVuY3Rpb24gcmVwb3J0Tm9FbmRp
bmdTcGFjZShub2RlLCB0b2tlbnMpIHsKKyAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgdG9r
ZW5zW3Rva2Vucy5sZW5ndGggLSAxXS5sb2Muc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICJU
aGVyZSBzaG91bGQgYmUgbm8gc3BhY2UgYmVmb3JlICciICsgdG9rZW5zW3Rva2Vucy5sZW5ndGgg
LSAxXS52YWx1ZSArICInIik7CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXBvcnRzIHRoYXQg
dGhlcmUgc2hvdWxkIGJlIGEgc3BhY2UgYWZ0ZXIgdGhlIGZpcnN0IHRva2VuCisgICAgKiBAcGFy
YW0ge0FTVE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byByZXBvcnQgaW4gdGhlIGV2ZW50IG9mIGFu
IGVycm9yLgorICAgICogQHBhcmFtIHtPYmplY3RbXX0gdG9rZW5zIC0gVGhlIHRva2VucyB0byBi
ZSBjaGVja2VkIGZvciBzcGFjaW5nLgorICAgICogQHJldHVybnMge3ZvaWR9CisgICAgKi8KKyAg
ICBmdW5jdGlvbiByZXBvcnRSZXF1aXJlZEJlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucykgewor
ICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCB0b2tlbnNbMF0ubG9jLnN0YXJ0LAorICAgICAg
ICAgICAgICAgICAgICAiQSBzcGFjZSBpcyByZXF1aXJlZCBhZnRlciAnIiArIHRva2Vuc1swXS52
YWx1ZSArICInIik7CisgICAgfQorCisgICAgLyoqCisgICAgKiBSZXBvcnRzIHRoYXQgdGhlcmUg
c2hvdWxkIGJlIGEgc3BhY2UgYmVmb3JlIHRoZSBsYXN0IHRva2VuCisgICAgKiBAcGFyYW0ge0FT
VE5vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byByZXBvcnQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9y
LgorICAgICogQHBhcmFtIHtPYmplY3RbXX0gdG9rZW5zIC0gVGhlIHRva2VucyB0byBiZSBjaGVj
a2VkIGZvciBzcGFjaW5nLgorICAgICogQHJldHVybnMge3ZvaWR9CisgICAgKi8KKyAgICBmdW5j
dGlvbiByZXBvcnRSZXF1aXJlZEVuZGluZ1NwYWNlKG5vZGUsIHRva2VucykgeworICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLmxvYy5zdGFydCwK
KyAgICAgICAgICAgICAgICAgICAgIkEgc3BhY2UgaXMgcmVxdWlyZWQgYmVmb3JlICciICsgdG9r
ZW5zW3Rva2Vucy5sZW5ndGggLSAxXS52YWx1ZSArICInIik7CisgICAgfQorCisKKyAgICAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUHVibGljCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgcmV0dXJuIHsKKworICAgICAgICBNZW1iZXJFeHByZXNzaW9uOiBvcHRpb25zLnByb3Bl
cnR5TmFtZSA/IGZ1bmN0aW9uIGNoZWNrTWVtYmVyKG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChu
b2RlLmNvbXB1dGVkKSB7CisgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGNvbnRleHQuZ2V0
VG9rZW5zKG5vZGUucHJvcGVydHksIDEsIDEpOworICAgICAgICAgICAgICAgIHZhciB0b2tlbkEg
PSB0b2tlbnNbMF0sIHRva2VuQiA9IHRva2Vuc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgdG9r
ZW5DID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAyXSwgdG9rZW5EID0gdG9rZW5zW3Rva2Vucy5s
ZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICBpZiAoaXNTYW1lTGluZSh0b2tlbkEsIHRva2Vu
QikgfHwgaXNTYW1lTGluZSh0b2tlbkMsIHRva2VuRCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG9wdGlvbnMuc3BhY2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3Bh
Y2VkKHRva2VuQSwgdG9rZW5CKSAmJiBpc1NhbWVMaW5lKHRva2VuQSwgdG9rZW5CKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJlcXVpcmVkQmVnaW5uaW5nU3BhY2Uobm9k
ZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpICYmIGlzU2FtZUxpbmUodG9rZW5D
LCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRF
bmRpbmdTcGFjZShub2RlLCB0b2tlbnMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
U3BhY2VkKHRva2VuQSwgdG9rZW5CKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9ydE5vQmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlZCh0b2tlbkMsIHRva2Vu
RCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnROb0VuZGluZ1NwYWNlKG5v
ZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gOiBmdW5j
dGlvbigpe30sCisKKyAgICAgICAgQXJyYXlFeHByZXNzaW9uOiBmdW5jdGlvbihub2RlKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS5lbGVtZW50cy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgdG9rZW5zID0gY29u
dGV4dC5nZXRUb2tlbnMobm9kZSk7CisgICAgICAgICAgICB2YXIgdG9rZW5BID0gdG9rZW5zWzBd
LCB0b2tlbkIgPSB0b2tlbnNbMV0sCisgICAgICAgICAgICAgICAgdG9rZW5DID0gdG9rZW5zW3Rv
a2Vucy5sZW5ndGggLSAyXSwgdG9rZW5EID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTsKKwor
ICAgICAgICAgICAgdmFyIG9wZW5pbmdCcmFja2V0TXVzdEJlU3BhY2VkID0KKyAgICAgICAgICAg
ICAgICBvcHRpb25zLm9iamVjdHNJbkFycmF5c0V4Y2VwdGlvbiAmJiB0b2tlbkIudmFsdWUgPT09
ICJ7IiB8fAorICAgICAgICAgICAgICAgIG9wdGlvbnMuYXJyYXlzSW5BcnJheXNFeGNlcHRpb24g
JiYgdG9rZW5CLnZhbHVlID09PSAiWyIgfHwKKyAgICAgICAgICAgICAgICBvcHRpb25zLnNpbmds
ZUVsZW1lbnRFeGNlcHRpb24gJiYgbm9kZS5lbGVtZW50cy5sZW5ndGggPT09IDEKKyAgICAgICAg
ICAgICAgICA/ICFvcHRpb25zLnNwYWNlZCA6IG9wdGlvbnMuc3BhY2VkOworCisgICAgICAgICAg
ICB2YXIgY2xvc2luZ0JyYWNrZXRNdXN0QmVTcGFjZWQgPQorICAgICAgICAgICAgICAgIG9wdGlv
bnMub2JqZWN0c0luQXJyYXlzRXhjZXB0aW9uICYmIHRva2VuQy52YWx1ZSA9PT0gIn0iIHx8Cisg
ICAgICAgICAgICAgICAgb3B0aW9ucy5hcnJheXNJbkFycmF5c0V4Y2VwdGlvbiAmJiB0b2tlbkMu
dmFsdWUgPT09ICJdIiB8fAorICAgICAgICAgICAgICAgIG9wdGlvbnMuc2luZ2xlRWxlbWVudEV4
Y2VwdGlvbiAmJiBub2RlLmVsZW1lbnRzLmxlbmd0aCA9PT0gMQorICAgICAgICAgICAgICAgID8g
IW9wdGlvbnMuc3BhY2VkIDogb3B0aW9ucy5zcGFjZWQ7CisKKyAgICAgICAgICAgIGlmIChpc1Nh
bWVMaW5lKHRva2VuQSwgdG9rZW5CKSB8fCBpc1NhbWVMaW5lKHRva2VuQywgdG9rZW5EKSkgewor
ICAgICAgICAgICAgICAgIGlmIChvcGVuaW5nQnJhY2tldE11c3RCZVNwYWNlZCAmJiAhaXNTcGFj
ZWQodG9rZW5BLCB0b2tlbkIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydFJlcXVpcmVk
QmVnaW5uaW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCFvcGVuaW5nQnJhY2tldE11c3RCZVNwYWNlZCAmJiBpc1NwYWNlZCh0b2tlbkEsIHRva2VuQikp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9CZWdpbm5pbmdTcGFjZShub2RlLCB0b2tl
bnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2xvc2luZ0JyYWNr
ZXRNdXN0QmVTcGFjZWQgJiYgIWlzU3BhY2VkKHRva2VuQywgdG9rZW5EKSkgeworICAgICAgICAg
ICAgICAgICAgICByZXBvcnRSZXF1aXJlZEVuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICghY2xvc2luZ0JyYWNrZXRNdXN0QmVTcGFjZWQgJiYgaXNT
cGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydE5vRW5k
aW5nU3BhY2Uobm9kZSwgdG9rZW5zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0sCisKKyAgICAgICAgT2JqZWN0RXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkg
eworICAgICAgICAgICAgaWYgKG5vZGUucHJvcGVydGllcy5sZW5ndGggPT09IDApIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgdG9rZW5z
ID0gY29udGV4dC5nZXRUb2tlbnMobm9kZSk7CisgICAgICAgICAgICB2YXIgdG9rZW5BID0gdG9r
ZW5zWzBdLCB0b2tlbkIgPSB0b2tlbnNbMV0sCisgICAgICAgICAgICAgICAgdG9rZW5DID0gdG9r
ZW5zW3Rva2Vucy5sZW5ndGggLSAyXSwgdG9rZW5EID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAx
XTsKKyAgICAgICAgICAgIGlmIChpc1NhbWVMaW5lKHRva2VuQSwgdG9rZW5CKSB8fCBpc1NhbWVM
aW5lKHRva2VuQywgdG9rZW5EKSkgeworICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNwYWNl
ZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3BhY2VkKHRva2VuQSwgdG9rZW5CKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UmVxdWlyZWRCZWdpbm5pbmdTcGFjZShu
b2RlLCB0b2tlbnMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmICghaXNTcGFjZWQodG9rZW5DLCB0b2tlbkQpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXBvcnRSZXF1aXJlZEVuZGluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNTcGFjZWQodG9rZW5BLCB0b2tlbkIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXBvcnROb0JlZ2lubmluZ1NwYWNlKG5vZGUsIHRva2Vucyk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3BhY2VkKHRva2VuQywgdG9rZW5EKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0Tm9FbmRpbmdTcGFjZShub2RlLCB0b2tlbnMp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICB9OworCit9OworCit9LHt9XSwxMzI6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IERpc2FsbG93cyBvciBl
bmZvcmNlcyBzcGFjZXMgaW5zaWRlIG9mIHBhcmVudGhlc2VzLgorICogQGF1dGhvciBKb25hdGhh
biBSYWphdnVvcmkKKyAqIEBjb3B5cmlnaHQgMjAxNCBKb25hdGhhbiBSYWphdnVvcmkuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9k
dWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisKKyAgICB2YXIgUkUsIE1FU1NBR0U7
CisKKyAgICBpZiAoY29udGV4dC5vcHRpb25zWzBdID09PSAiYWx3YXlzIikgeworICAgICAgICBS
RSA9IC9cKFteIFwpXXxbXiBcKF1cKS9tZzsKKyAgICAgICAgTUVTU0FHRSA9ICJUaGVyZSBtdXN0
IGJlIGEgc3BhY2UgaW5zaWRlIHRoaXMgcGFyZW4uIjsKKyAgICB9IGVsc2UgeworICAgICAgICBS
RSA9IC9cKCB8IFwpL21nOworICAgICAgICBNRVNTQUdFID0gIlRoZXJlIHNob3VsZCBiZSBubyBz
cGFjZXMgaW5zaWRlIHRoaXMgcGFyZW4uIjsKKyAgICB9CisKKworICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmFy
IHNraXBSYW5nZXMgPSBbXTsKKworICAgIC8qKgorICAgICAqIEFkZHMgdGhlIHJhbmdlIG9mIGEg
bm9kZSB0byB0aGUgc2V0IHRvIGJlIHNraXBwZWQgd2hlbiBjaGVja2luZyBwYXJlbnMKKyAgICAg
KiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgVGhlIG5vZGUgdG8gc2tpcAorICAgICAqIEByZXR1cm5z
IHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gYWRkU2tpcFJh
bmdlKG5vZGUpIHsKKyAgICAgICAgc2tpcFJhbmdlcy5wdXNoKG5vZGUucmFuZ2UpOworICAgIH0K
KworICAgIC8qKgorICAgICAqIFNvcnRzIHRoZSBza2lwUmFuZ2VzIGFycmF5LiBNdXN0IGJlIGNh
bGxlZCBiZWZvcmUgc2hvdWxkU2tpcAorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBw
cml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gc29ydFNraXBSYW5nZXMoKSB7CisgICAgICAg
IHNraXBSYW5nZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAgICAgcmV0dXJuIGFb
MF0gLSBiWzBdOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mg
aWYgYSBjZXJ0YWluIHBvc2l0aW9uIGluIHRoZSBzb3VyY2Ugc2hvdWxkIGJlIHNraXBwZWQKKyAg
ICAgKiBAcGFyYW0ge051bWJlcn0gcG9zIFRoZSAwLWJhc2VkIGluZGV4IGluIHRoZSBzb3VyY2UK
KyAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciB0aGUgcG9zaXRpb24gc2hvdWxkIGJl
IHNraXBwZWQKKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIHNob3VsZFNr
aXAocG9zKSB7CisgICAgICAgIHZhciBpLCBsZW4sIHJhbmdlOworICAgICAgICBmb3IgKGkgPSAw
LCBsZW4gPSBza2lwUmFuZ2VzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7CisgICAgICAgICAg
ICByYW5nZSA9IHNraXBSYW5nZXNbaV07CisgICAgICAgICAgICBpZiAocG9zIDwgcmFuZ2VbMF0p
IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIDwg
cmFuZ2VbMV0pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAg
IHJldHVybiB7CisKKyAgICAgICAgIlByb2dyYW06ZXhpdCI6IGZ1bmN0aW9uIGNoZWNrUGFyZW5T
cGFjZXMobm9kZSkgeworCisgICAgICAgICAgICB2YXIgbWF0Y2gsCisgICAgICAgICAgICAgICAg
bmV4dExpbmUsCisgICAgICAgICAgICAgICAgY29sdW1uLAorICAgICAgICAgICAgICAgIGxpbmUg
PSAxLAorICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbnRleHQuZ2V0U291cmNlKCksCisgICAg
ICAgICAgICAgICAgcG9zID0gMDsKKworICAgICAgICAgICAgc29ydFNraXBSYW5nZXMoKTsKKwor
ICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IFJFLmV4ZWMoc291cmNlKSkgIT09IG51bGwpIHsK
KyAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJBdChtYXRjaC5pbmRleCkgIT09ICIoIikg
eworICAgICAgICAgICAgICAgICAgICAvLyBNYXRjaGVkIGEgY2xvc2luZyBwYXJlbiBwYXR0ZXJu
CisgICAgICAgICAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IDE7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRTa2lwKG1hdGNoLmluZGV4KSkgeworICAg
ICAgICAgICAgICAgICAgICB3aGlsZSAoKG5leHRMaW5lID0gc291cmNlLmluZGV4T2YoIlxuIiwg
cG9zKSkgIT09IC0xICYmIG5leHRMaW5lIDwgbWF0Y2guaW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBvcyA9IG5leHRMaW5lICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmUgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb2x1
bW4gPSBtYXRjaC5pbmRleCAtIHBvczsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJl
cG9ydChub2RlLCB7IGxpbmU6IGxpbmUsIGNvbHVtbjogY29sdW1uIH0sIE1FU1NBR0UpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9LAorCisKKyAgICAgICAg
Ly8gVGhlc2Ugbm9kZXMgY2FuIGNvbnRhaW4gcGFyZW50aGVzZXMgdGhhdCB0aGlzIHJ1bGUgZG9l
c24ndCBjYXJlIGFib3V0CisKKyAgICAgICAgTGluZUNvbW1lbnQ6IGFkZFNraXBSYW5nZSwKKwor
ICAgICAgICBCbG9ja0NvbW1lbnQ6IGFkZFNraXBSYW5nZSwKKworICAgICAgICBMaXRlcmFsOiBh
ZGRTa2lwUmFuZ2UKKworICAgIH07CisKK307CisKK30se31dLDEzMzpbZnVuY3Rpb24ocmVxdWly
ZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUmVxdWlyZSBzcGFjZXMg
YXJvdW5kIGluZml4IG9wZXJhdG9ycworICogQGF1dGhvciBNaWNoYWVsIEZpY2FycmEKKyAqLwor
InVzZSBzdHJpY3QiOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0
aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9u
KGNvbnRleHQpIHsKKworICAgIHZhciBPUEVSQVRPUlMgPSBbCisgICAgICAgICIqIiwgIi8iLCAi
JSIsICIrIiwgIi0iLCAiPDwiLCAiPj4iLCAiPj4+IiwgIjwiLCAiPD0iLCAiPiIsICI+PSIsICJp
biIsCisgICAgICAgICJpbnN0YW5jZW9mIiwgIj09IiwgIiE9IiwgIj09PSIsICIhPT0iLCAiJiIs
ICJeIiwgInwiLCAiJiYiLCAifHwiLCAiPSIsCisgICAgICAgICIrPSIsICItPSIsICIqPSIsICIv
PSIsICIlPSIsICI8PD0iLCAiPj49IiwgIj4+Pj0iLCAiJj0iLCAiXj0iLCAifD0iLAorICAgICAg
ICAiPyIsICI6IiwgIiwiCisgICAgXTsKKworICAgIGZ1bmN0aW9uIGlzU3BhY2VkKGxlZnQsIHJp
Z2h0KSB7CisgICAgICAgIHZhciBvcCwgdG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMoe3Jhbmdl
OiBbbGVmdC5yYW5nZVsxXSwgcmlnaHQucmFuZ2VbMF1dfSwgMSwgMSk7CisgICAgICAgIGZvciAo
dmFyIGkgPSAxLCBsID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPCBsOyArK2kpIHsKKyAgICAgICAg
ICAgIG9wID0gdG9rZW5zW2ldOworICAgICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgIG9w
LnR5cGUgPT09ICJQdW5jdHVhdG9yIiAmJgorICAgICAgICAgICAgICAgIE9QRVJBVE9SUy5pbmRl
eE9mKG9wLnZhbHVlKSA+PSAwICYmCisgICAgICAgICAgICAgICAgKHRva2Vuc1tpIC0gMV0ucmFu
Z2VbMV0gPj0gb3AucmFuZ2VbMF0gfHwgb3AucmFuZ2VbMV0gPj0gdG9rZW5zW2kgKyAxXS5yYW5n
ZVswXSkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBpc1JpZ2h0U3BhY2VkKGxlZnQsIHJpZ2h0KSB7CisgICAgICAgIHZhciBvcCwg
dG9rZW5zID0gY29udGV4dC5nZXRUb2tlbnMoe3JhbmdlOiBbbGVmdC5yYW5nZVsxXSwgcmlnaHQu
cmFuZ2VbMF1dfSwgMSwgMSk7CisgICAgICAgIGZvciAodmFyIGkgPSAxLCBsID0gdG9rZW5zLmxl
bmd0aCAtIDE7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgIG9wID0gdG9rZW5zW2ldOworICAg
ICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgIG9wLnR5cGUgPT09ICJQdW5jdHVhdG9yIiAm
JgorICAgICAgICAgICAgICAgIE9QRVJBVE9SUy5pbmRleE9mKG9wLnZhbHVlKSA+PSAwICYmCisg
ICAgICAgICAgICAgICAgb3AucmFuZ2VbMV0gPj0gdG9rZW5zW2kgKyAxXS5yYW5nZVswXQorICAg
ICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHJlcG9ydChub2RlKSB7CisgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJJbmZpeCBvcGVy
YXRvcnMgbXVzdCBiZSBzcGFjZWQuIik7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tCaW5h
cnkobm9kZSkgeworICAgICAgICBpZiAoIWlzU3BhY2VkKG5vZGUubGVmdCwgbm9kZS5yaWdodCkp
IHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1
bmN0aW9uIGNoZWNrU2VxdWVuY2Uobm9kZSkgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9
IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoIC0gMTsgaSA8IGw7ICsraSkgeworICAgICAgICAgICAg
aWYgKCFpc1JpZ2h0U3BhY2VkKG5vZGUuZXhwcmVzc2lvbnNbaV0sIG5vZGUuZXhwcmVzc2lvbnNb
aSArIDFdKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydChub2RlKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IGNoZWNrQ29uZGl0aW9uYWwobm9kZSkgeworICAgICAgICBpZiAoIWlzU3BhY2VkKG5vZGUudGVz
dCwgbm9kZS5jb25zZXF1ZW50KSB8fCAhaXNTcGFjZWQobm9kZS5jb25zZXF1ZW50LCBub2RlLmFs
dGVybmF0ZSkpIHsKKyAgICAgICAgICAgIHJlcG9ydChub2RlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZ1bmN0aW9uIGNoZWNrVmFyKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUuaW5pdCAm
JiAhaXNTcGFjZWQobm9kZS5pZCwgbm9kZS5pbml0KSkgeworICAgICAgICAgICAgcmVwb3J0KG5v
ZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkFzc2lnbm1l
bnRFeHByZXNzaW9uIjogY2hlY2tCaW5hcnksCisgICAgICAgICJCaW5hcnlFeHByZXNzaW9uIjog
Y2hlY2tCaW5hcnksCisgICAgICAgICJMb2dpY2FsRXhwcmVzc2lvbiI6IGNoZWNrQmluYXJ5LAor
ICAgICAgICAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjogY2hlY2tDb25kaXRpb25hbCwKKyAgICAg
ICAgIlNlcXVlbmNlRXhwcmVzc2lvbiI6IGNoZWNrU2VxdWVuY2UsCisgICAgICAgICJWYXJpYWJs
ZURlY2xhcmF0b3IiOiBjaGVja1ZhcgorICAgIH07CisKK307CisKK30se31dLDEzNDpbZnVuY3Rp
b24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUmVxdWly
ZSBzcGFjZXMgZm9sbG93aW5nIHJldHVybiwgdGhyb3csIGFuZCBjYXNlCisgKiBAYXV0aG9yIE1p
Y2hhZWwgRmljYXJyYQorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgZnVuY3Rpb24gY2hlY2sobm9k
ZSkgeworICAgICAgICB2YXIgdG9rZW5zID0gY29udGV4dC5nZXRGaXJzdFRva2Vucyhub2RlLCAy
KSwKKyAgICAgICAgICAgIHZhbHVlID0gdG9rZW5zWzBdLnZhbHVlOworCisgICAgICAgIGlmICh0
b2tlbnNbMF0ucmFuZ2VbMV0gPj0gdG9rZW5zWzFdLnJhbmdlWzBdKSB7CisgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChub2RlLCAiS2V5d29yZCBcIiIgKyB2YWx1ZSArICJcIiBtdXN0IGJlIGZv
bGxvd2VkIGJ5IHdoaXRlc3BhY2UuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
eworICAgICAgICAiUmV0dXJuU3RhdGVtZW50IjogZnVuY3Rpb24obm9kZSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUuYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICBjaGVjayhub2RlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgIlN3aXRjaENhc2UiOiBmdW5jdGlvbihu
b2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS50ZXN0KSB7CisgICAgICAgICAgICAgICAgY2hl
Y2sobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJUaHJvd1N0YXRl
bWVudCI6IGNoZWNrCisgICAgfTsKKworfTsKKworfSx7fV0sMTM1OltmdW5jdGlvbihyZXF1aXJl
LG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSZXF1aXJlIHNwYWNlcyBm
b2xsb3dpbmcgdW5hcnkgd29yZCBvcGVyYXRvcnMKKyAqIEBhdXRob3IgTWljaGFlbCBGaWNhcnJh
CisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUg
RGVmaW5pdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBm
dW5jdGlvbihjb250ZXh0KSB7CisKKyAgICBmdW5jdGlvbiBjaGVjayhub2RlKSB7CisgICAgICAg
IHZhciB0b2tlbnM7CisgICAgICAgIHRva2VucyA9IGNvbnRleHQuZ2V0Rmlyc3RUb2tlbnMobm9k
ZSwgMik7CisgICAgICAgIGlmICh0b2tlbnNbMF0ucmFuZ2VbMV0gPj0gdG9rZW5zWzFdLnJhbmdl
WzBdKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2Vuc1swXS52YWx1ZSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgImRlbGV0ZSI6CisgICAgICAgICAgICAgICAgY2FzZSAibmV3IjoKKyAgICAg
ICAgICAgICAgICBjYXNlICJ0eXBlb2YiOgorICAgICAgICAgICAgICAgIGNhc2UgInZvaWQiOgor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiVW5hcnkgd29yZCBvcGVy
YXRvciBcIiIgKyB0b2tlbnNbMF0udmFsdWUgKyAiXCIgbXVzdCBiZSBmb2xsb3dlZCBieSB3aGl0
ZXNwYWNlLiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAv
LyBubyBkZWZhdWx0CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4geworICAgICAgICAiTmV3RXhwcmVzc2lvbiI6IGNoZWNrLAorICAgICAgICAiVW5hcnlFeHBy
ZXNzaW9uIjogY2hlY2sKKyAgICB9OworCit9OworCit9LHt9XSwxMzY6W2Z1bmN0aW9uKHJlcXVp
cmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5zdXJl
IGNvZGUgaXMgcnVubmluZyBpbiBzdHJpY3QgbW9kZS4KKyAqIEBhdXRob3IgTmljaG9sYXMgQy4g
WmFrYXMKKyAqIEBjb3B5cmlnaHQgMjAxMy0yMDE0IE5pY2hvbGFzIEMuIFpha2FzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIHNjb3BlcyA9IFtdOwor
CisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIG5vZGUgaXMgInVzZSBzdHJp
Y3QiLgorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSBUaGUgbm9kZSB0byBjaGVjay4KKyAg
ICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbm9kZSBpcyBhIHN0cmljdCBwcmFn
bWEsIGZhbHNlIGlmIG5vdC4KKyAgICAgKiBAdm9pZAorICAgICAqLworICAgIGZ1bmN0aW9uIGlz
U3RyaWN0UHJhZ21hKG5vZGUpIHsKKyAgICAgICAgcmV0dXJuIChub2RlICYmIG5vZGUudHlwZSA9
PT0gIkV4cHJlc3Npb25TdGF0ZW1lbnQiICYmCisgICAgICAgICAgICAgICAgbm9kZS5leHByZXNz
aW9uLnZhbHVlID09PSAidXNlIHN0cmljdCIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFdo
ZW4geW91IGVudGVyIGEgc2NvcGUsIHB1c2ggdGhlIHN0cmljdCB2YWx1ZSBmcm9tIHRoZSBwcmV2
aW91cyBzY29wZQorICAgICAqIG9udG8gdGhlIHN0YWNrLgorICAgICAqIEBwYXJhbSB7QVNUTm9k
ZX0gbm9kZSBUaGUgQVNUIG5vZGUgYmVpbmcgY2hlY2tlZC4KKyAgICAgKiBAcmV0dXJucyB7dm9p
ZH0KKyAgICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGVudGVyU2NvcGUobm9k
ZSkgeworCisgICAgICAgIHZhciBpc1N0cmljdCA9IGZhbHNlLAorICAgICAgICAgICAgaXNQcm9n
cmFtID0gKG5vZGUudHlwZSA9PT0gIlByb2dyYW0iKSwKKyAgICAgICAgICAgIGlzUGFyZW50R2xv
YmFsID0gc2NvcGVzLmxlbmd0aCA9PT0gMSwKKyAgICAgICAgICAgIGlzUGFyZW50U3RyaWN0ID0g
c2NvcGVzLmxlbmd0aCA/IHNjb3Blc1tzY29wZXMubGVuZ3RoIC0gMV0gOiBmYWxzZTsKKworICAg
ICAgICAvLyBsb29rIGZvciB0aGUgInVzZSBzdHJpY3QiIHByYWdtYQorICAgICAgICBpZiAoaXNQ
cm9ncmFtKSB7CisgICAgICAgICAgICBpc1N0cmljdCA9IGlzU3RyaWN0UHJhZ21hKG5vZGUuYm9k
eVswXSkgfHwgaXNQYXJlbnRTdHJpY3Q7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
c1N0cmljdCA9IGlzU3RyaWN0UHJhZ21hKG5vZGUuYm9keS5ib2R5WzBdKSB8fCBpc1BhcmVudFN0
cmljdDsKKyAgICAgICAgfQorCisgICAgICAgIHNjb3Blcy5wdXNoKGlzU3RyaWN0KTsKKworICAg
ICAgICAvLyBuZXZlciB3YXJuIGlmIHRoZSBwYXJlbnQgaXMgc3RyaWN0IG9yIHRoZSBmdW5jdGlv
biBpcyBzdHJpY3QKKyAgICAgICAgaWYgKCFpc1BhcmVudFN0cmljdCAmJiAhaXNTdHJpY3QgJiYg
aXNQYXJlbnRHbG9iYWwpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNaXNz
aW5nIFwidXNlIHN0cmljdFwiIHN0YXRlbWVudC4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8qKgorICAgICAqIFdoZW4geW91IGV4aXQgYSBzY29wZSwgcG9wIG9mZiB0aGUgdG9wIHNjb3Bl
IGFuZCBzZWUgaWYgaXQncyB0cnVlIG9yCisgICAgICogZmFsc2UuCisgICAgICogQHJldHVybnMg
e3ZvaWR9CisgICAgICogQHByaXZhdGUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBleGl0U2NvcGUo
KSB7CisgICAgICAgIHNjb3Blcy5wb3AoKTsKKyAgICB9CisKKyAgICByZXR1cm4geworCisgICAg
ICAgICJQcm9ncmFtIjogZW50ZXJTY29wZSwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24i
OiBlbnRlclNjb3BlLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogZW50ZXJTY29wZSwK
KworICAgICAgICAiUHJvZ3JhbTpleGl0IjogZXhpdFNjb3BlLAorICAgICAgICAiRnVuY3Rpb25E
ZWNsYXJhdGlvbjpleGl0IjogZXhpdFNjb3BlLAorICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9u
OmV4aXQiOiBleGl0U2NvcGUKKyAgICB9OworCit9OworCit9LHt9XSwxMzc6W2Z1bmN0aW9uKHJl
cXVpcmUsbW9kdWxlLGV4cG9ydHMpeworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZmxh
ZyBjb21wYXJpc29ucyB0byB0aGUgdmFsdWUgTmFOCisgKiBAYXV0aG9yIEphbWVzIEFsbGFyZGlj
ZQorICovCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4
dCkgeworCisgICAgInVzZSBzdHJpY3QiOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgIkJpbmFy
eUV4cHJlc3Npb24iOiBmdW5jdGlvbihub2RlKSB7CisKKyAgICAgICAgICAgIGlmICghL15bfCZe
XSQvLnRlc3Qobm9kZS5vcGVyYXRvcikgJiYgbm9kZS5sZWZ0Lm5hbWUgPT09ICJOYU4iIHx8IG5v
ZGUucmlnaHQubmFtZSA9PT0gIk5hTiIpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiVXNlIHRoZSBpc05hTiBmdW5jdGlvbiB0byBjb21wYXJlIHdpdGggTmFOLiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworfTsKKworfSx7fV0sMTM4OltmdW5j
dGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBWYWxp
ZGF0ZXMgSlNEb2MgY29tbWVudHMgYXJlIHN5bnRhY3RpY2FsbHkgY29ycmVjdAorICogQGF1dGhv
ciBOaWNob2xhcyBDLiBaYWthcworICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisvLyBSZXF1aXJlbWVudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Zh
ciBkb2N0cmluZSA9IHJlcXVpcmUoImRvY3RyaW5lIik7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisvLyBSdWxlIERlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVs
ZS5leHBvcnRzID0gZnVuY3Rpb24oY29udGV4dCkgeworCisgICAgdmFyIG9wdGlvbnMgPSBjb250
ZXh0Lm9wdGlvbnNbMF0gfHwge30sCisgICAgICAgIHByZWZlciA9IG9wdGlvbnMucHJlZmVyIHx8
IHt9LAorCisgICAgICAgIC8vIHRoZXNlIGJvdGggZGVmYXVsdCB0byB0cnVlLCBzbyB5b3UgaGF2
ZSB0byBleHBsaWNpdGx5IG1ha2UgdGhlbSBmYWxzZQorICAgICAgICByZXF1aXJlUmV0dXJuID0g
b3B0aW9ucy5yZXF1aXJlUmV0dXJuID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZSwKKyAgICAgICAg
cmVxdWlyZVBhcmFtRGVzY3JpcHRpb24gPSBvcHRpb25zLnJlcXVpcmVQYXJhbURlc2NyaXB0aW9u
ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTsKKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gVXNpbmcgYSBz
dGFjayB0byBzdG9yZSBpZiBhIGZ1bmN0aW9uIHJldHVybnMgb3Igbm90IChoYW5kbGluZyBuZXN0
ZWQgZnVuY3Rpb25zKQorICAgIHZhciBmbnMgPSBbXTsKKworICAgIC8qKgorICAgICAqIFdoZW4g
cGFyc2luZyBhIG5ldyBmdW5jdGlvbiwgc3RvcmUgaXQgaW4gb3VyIGZ1bmN0aW9uIHN0YWNrLgor
ICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAqIEBwcml2YXRlCisgICAgICovCisgICAgZnVu
Y3Rpb24gc3RhcnRGdW5jdGlvbigpIHsKKyAgICAgICAgZm5zLnB1c2goe3JldHVyblByZXNlbnQ6
IGZhbHNlfSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5kaWNhdGUgdGhhdCByZXR1cm4g
aGFzIGJlZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisgICAgICogQHBhcmFtIHtB
U1ROb2RlfSBub2RlIFRoZSByZXR1cm4gbm9kZS4KKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAg
ICAgKiBAcHJpdmF0ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGFkZFJldHVybihub2RlKSB7Cisg
ICAgICAgIHZhciBmdW5jdGlvblN0YXRlID0gZm5zW2Zucy5sZW5ndGggLSAxXTsKKworICAgICAg
ICBpZiAoZnVuY3Rpb25TdGF0ZSAmJiBub2RlLmFyZ3VtZW50ICE9PSBudWxsKSB7CisgICAgICAg
ICAgICBmdW5jdGlvblN0YXRlLnJldHVyblByZXNlbnQgPSB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgLyoqCisgICAgICogVmFsaWRhdGUgdGhlIEpTRG9jIG5vZGUgYW5kIG91dHB1dCB3
YXJuaW5ncyBpZiBhbnl0aGluZyBpcyB3cm9uZy4KKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5v
ZGUgVGhlIEFTVCBub2RlIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHt2b2lkfQorICAgICAq
IEBwcml2YXRlCisgICAgICovCisgICAgZnVuY3Rpb24gY2hlY2tKU0RvYyhub2RlKSB7CisgICAg
ICAgIHZhciBqc2RvY05vZGUgPSBjb250ZXh0LmdldEpTRG9jQ29tbWVudChub2RlKSwKKyAgICAg
ICAgICAgIGZ1bmN0aW9uRGF0YSA9IGZucy5wb3AoKSwKKyAgICAgICAgICAgIGhhc1JldHVybnMg
PSBmYWxzZSwKKyAgICAgICAgICAgIGhhc0NvbnN0cnVjdG9yID0gZmFsc2UsCisgICAgICAgICAg
ICBwYXJhbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpLAorICAgICAgICAgICAganNkb2M7CisKKyAg
ICAgICAgLy8gbWFrZSBzdXJlIG9ubHkgdG8gdmFsaWRhdGUgSlNEb2MgY29tbWVudHMKKyAgICAg
ICAgaWYgKGpzZG9jTm9kZSkgeworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAg
IGpzZG9jID0gZG9jdHJpbmUucGFyc2UoanNkb2NOb2RlLnZhbHVlLCB7CisgICAgICAgICAgICAg
ICAgICAgIHN0cmljdDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgdW53cmFwOiB0cnVlLAor
ICAgICAgICAgICAgICAgICAgICBzbG9wcHk6IHRydWUKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisKKyAgICAgICAgICAgICAgICBpZiAoL2JyYWNlcy9p
LnRlc3QoZXgubWVzc2FnZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
anNkb2NOb2RlLCAiSlNEb2MgdHlwZSBtaXNzaW5nIGJyYWNlLiIpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwg
IkpTRG9jIHN5bnRheCBlcnJvci4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpzZG9jLnRhZ3MuZm9y
RWFjaChmdW5jdGlvbih0YWcpIHsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnLnRpdGxl
KSB7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAicGFyYW0iOgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCF0YWcudHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgcGFyYW1ldGVyIHR5cGUgZm9y
ICd7e25hbWV9fScuIiwgeyBuYW1lOiB0YWcubmFtZSB9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWcuZGVzY3JpcHRpb24gJiYg
cmVxdWlyZVBhcmFtRGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LnJlcG9ydChqc2RvY05vZGUsICJNaXNzaW5nIEpTRG9jIHBhcmFtZXRlciBkZXNjcmlw
dGlvbiBmb3IgJ3t7bmFtZX19Jy4iLCB7IG5hbWU6IHRhZy5uYW1lIH0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zW3RhZy5u
YW1lXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9j
Tm9kZSwgIkR1cGxpY2F0ZSBKU0RvYyBwYXJhbWV0ZXIgJ3t7bmFtZX19Jy4iLCB7IG5hbWU6IHRh
Zy5uYW1lIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcubmFtZS5p
bmRleE9mKCIuIikgPT09IC0gMSl7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W3RhZy5uYW1lXSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJyZXR1cm4iOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlICJyZXR1cm5zIjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGhhc1JldHVybnMgPSB0cnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJl
cXVpcmVSZXR1cm4gJiYgIWZ1bmN0aW9uRGF0YS5yZXR1cm5QcmVzZW50ICYmIHRhZy50eXBlLm5h
bWUgIT09ICJ2b2lkIiAmJiB0YWcudHlwZS5uYW1lICE9PSAidW5kZWZpbmVkIikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIlVuZXhwZWN0
ZWQgQCIgKyB0YWcudGl0bGUgKyAiIHRhZzsgZnVuY3Rpb24gaGFzIG5vIHJldHVybiBzdGF0ZW1l
bnQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghdGFnLnR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQoanNkb2NOb2RlLCAiTWlzc2luZyBKU0RvYyByZXR1cm4gdHlw
ZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGFnLnR5cGUubmFtZSAhPT0gInZvaWQiICYmICF0YWcuZGVzY3JpcHRp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoanNk
b2NOb2RlLCAiTWlzc2luZyBKU0RvYyByZXR1cm4gZGVzY3JpcHRpb24uIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlICJjb25z
dHJ1Y3RvciI6CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNDb25zdHJ1Y3RvciA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAv
LyBubyBkZWZhdWx0CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gY2hl
Y2sgdGFnIHByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgaWYgKHByZWZlci5oYXNPd25Qcm9w
ZXJ0eSh0YWcudGl0bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpz
ZG9jTm9kZSwgIlVzZSBAe3tuYW1lfX0gaW5zdGVhZC4iLCB7IG5hbWU6IHByZWZlclt0YWcudGl0
bGVdIH0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIC8vIGNoZWNrIGZvciBmdW5jdGlvbnMgbWlzc2luZyBAcmV0dXJucworICAgICAgICAgICAg
aWYgKCFoYXNSZXR1cm5zICYmICFoYXNDb25zdHJ1Y3RvcikgeworICAgICAgICAgICAgICAgIGlm
IChyZXF1aXJlUmV0dXJuIHx8IGZ1bmN0aW9uRGF0YS5yZXR1cm5QcmVzZW50KSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGpzZG9jTm9kZSwgIk1pc3NpbmcgSlNEb2MgQHJl
dHVybnMgZm9yIGZ1bmN0aW9uLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gY2hlY2sgdGhlIHBhcmFtZXRlcnMKKyAgICAgICAgICAgIHZhciBq
c2RvY1BhcmFtcyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7CisKKyAgICAgICAgICAgIG5vZGUucGFy
YW1zLmZvckVhY2goZnVuY3Rpb24ocGFyYW0sIGkpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmFt
ZSA9IHBhcmFtLm5hbWU7CisKKyAgICAgICAgICAgICAgICBpZiAoanNkb2NQYXJhbXNbaV0gJiYg
KG5hbWUgIT09IGpzZG9jUGFyYW1zW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LnJlcG9ydChqc2RvY05vZGUsICJFeHBlY3RlZCBKU0RvYyBmb3IgJ3t7bmFtZX19JyBidXQgZm91
bmQgJ3t7anNkb2NOYW1lfX0nLiIsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICBqc2RvY05hbWU6IGpzZG9jUGFyYW1zW2ldCisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXBhcmFt
c1tuYW1lXSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChqc2RvY05vZGUs
ICJNaXNzaW5nIEpTRG9jIGZvciBwYXJhbWV0ZXIgJ3t7bmFtZX19Jy4iLCB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lOiBuYW1lCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIH0KKworICAgIH0KKworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyAgICByZXR1cm4geworICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uIjogc3RhcnRG
dW5jdGlvbiwKKyAgICAgICAgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOiBzdGFydEZ1bmN0aW9uLAor
ICAgICAgICAiRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQiOiBjaGVja0pTRG9jLAorICAgICAgICAi
RnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0IjogY2hlY2tKU0RvYywKKyAgICAgICAgIlJldHVyblN0
YXRlbWVudCI6IGFkZFJldHVybgorICAgIH07CisKK307CisKK30seyJkb2N0cmluZSI6NH1dLDEz
OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgRW5zdXJlcyB0aGF0IHRoZSByZXN1bHRzIG9mIHR5cGVvZiBhcmUgY29tcGFyZWQgYWdhaW5z
dCBhIHZhbGlkIHN0cmluZworICogQGF1dGhvciBJYW4gQ2hyaXN0aWFuIE15ZXJzCisgKi8KKyJ1
c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlv
bgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihj
b250ZXh0KSB7CisKKyAgICB2YXIgVkFMSURfVFlQRVMgPSBbInN5bWJvbCIsICJ1bmRlZmluZWQi
LCAib2JqZWN0IiwgImJvb2xlYW4iLCAibnVtYmVyIiwgInN0cmluZyIsICJmdW5jdGlvbiJdLAor
ICAgICAgICBPUEVSQVRPUlMgPSBbIj09IiwgIj09PSIsICIhPSIsICIhPT0iXTsKKworICAgIC8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBQdWJsaWMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKKyAgICByZXR1cm4geworCisgICAgICAgICJVbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlvbiAo
bm9kZSkgeworICAgICAgICAgICAgdmFyIHBhcmVudCwgc2libGluZzsKKworICAgICAgICAgICAg
aWYgKG5vZGUub3BlcmF0b3IgPT09ICJ0eXBlb2YiKSB7CisgICAgICAgICAgICAgICAgcGFyZW50
ID0gY29udGV4dC5nZXRBbmNlc3RvcnMoKS5wb3AoKTsKKworICAgICAgICAgICAgICAgIGlmIChw
YXJlbnQudHlwZSA9PT0gIkJpbmFyeUV4cHJlc3Npb24iICYmIE9QRVJBVE9SUy5pbmRleE9mKHBh
cmVudC5vcGVyYXRvcikgIT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcgPSBw
YXJlbnQubGVmdCA9PT0gbm9kZSA/IHBhcmVudC5yaWdodCA6IHBhcmVudC5sZWZ0OworCisgICAg
ICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLnR5cGUgPT09ICJMaXRlcmFsIiAmJiBWQUxJRF9U
WVBFUy5pbmRleE9mKHNpYmxpbmcudmFsdWUpID09PSAtMSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC5yZXBvcnQoc2libGluZywgIkludmFsaWQgdHlwZW9mIGNvbXBhcmlzb24g
dmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sMTQwOltmdW5jdGlv
bihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBSdWxlIHRv
IGVuZm9yY2UgdmFyIGRlY2xhcmF0aW9ucyBhcmUgb25seSBhdCB0aGUgdG9wIG9mIGEgZnVuY3Rp
b24uCisgKiBAYXV0aG9yIERhbm55IEZyaXR6CisgKiBAYXV0aG9yIEd5YW5kZWVwIFNpbmdoCisg
KiBAY29weXJpZ2h0IDIwMTQgRGFubnkgRnJpdHouIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBA
Y29weXJpZ2h0IDIwMTQgR3lhbmRlZXAgU2luZ2guIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8K
KyJ1c2Ugc3RyaWN0IjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5p
dGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlv
biAoY29udGV4dCkgeworICAgIHZhciBlcnJvck1lc3NhZ2UgPSAiQWxsIFwidmFyXCIgZGVjbGFy
YXRpb25zIG11c3QgYmUgYXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24gc2NvcGUuIjsKKworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBub2RlIC0gYW55IG5vZGUK
KyAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gd2hldGhlciB0aGUgZ2l2ZW4gbm9kZSBzdHJ1Y3R1
cmFsbHkgcmVwcmVzZW50cyBhIGRpcmVjdGl2ZQorICAgICAqLworICAgIGZ1bmN0aW9uIGxvb2tz
TGlrZURpcmVjdGl2ZShub2RlKSB7CisgICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gIkV4cHJl
c3Npb25TdGF0ZW1lbnQiICYmCisgICAgICAgICAgIG5vZGUuZXhwcmVzc2lvbi50eXBlID09PSAi
TGl0ZXJhbCIgJiYgdHlwZW9mIG5vZGUuZXhwcmVzc2lvbi52YWx1ZSA9PT0gInN0cmluZyI7Cisg
ICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIHdoZXRoZXIgdGhpcyB2YXJpYWJsZSBpcyBv
biB0b3Agb2YgdGhlIGJsb2NrIGJvZHkKKyAgICAgKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGUgLSBU
aGUgbm9kZSB0byBjaGVjaworICAgICAqIEBwYXJhbSB7QVNUTm9kZVtdfSBzdGF0ZW1lbnRzIC0g
Y29sbGVjdGlvbiBvZiBBU1ROb2RlcyBmb3IgdGhlIHBhcmVudCBub2RlIGJsb2NrCisgICAgICog
QHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdmFyIGlzIG9uIHRvcCBvdGhlcndpc2UgZmFsc2UK
KyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc1Zhck9uVG9wIChub2RlLCBzdGF0ZW1lbnRzKSB7Cisg
ICAgICAgIHZhciBpID0gMCwgbCA9IHN0YXRlbWVudHMubGVuZ3RoOworCisgICAgICAgIC8vIHNr
aXAgb3ZlciBkaXJlY3RpdmVzCisgICAgICAgIGZvciAoOyBpIDwgbDsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoIWxvb2tzTGlrZURpcmVjdGl2ZShzdGF0ZW1lbnRzW2ldKSkgeworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yICg7
IGkgPCBsOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRzW2ldLnR5cGUgIT09ICJW
YXJpYWJsZURlY2xhcmF0aW9uIikgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRzW2ldID09PSBub2RlKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mgd2hldGhlciB2YXJpYWJsZSBpcyBvbiB0b3Ag
YXQgdGhlIGdsb2JhbCBsZXZlbAorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBu
b2RlIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHtBU1ROb2RlfSBwYXJlbnQgLSBQYXJlbnQgb2Yg
dGhlIG5vZGUKKyAgICAgKiBAcmV0dXJucyB7dm9pZH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBn
bG9iYWxWYXJDaGVjayAobm9kZSwgcGFyZW50KSB7CisgICAgICAgIGlmICghaXNWYXJPblRvcChu
b2RlLCBwYXJlbnQuYm9keSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGVy
cm9yTWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mg
d2hldGhlciB2YXJpYWJsZSBpcyBvbiB0b3AgYXQgZnVuY3Rpb25hbCBibG9jayBzY29wZSBsZXZl
bAorICAgICAqIEBwYXJhbSB7QVNUTm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrCisgICAg
ICogQHBhcmFtIHtBU1ROb2RlfSBwYXJlbnQgLSBQYXJlbnQgb2YgdGhlIG5vZGUKKyAgICAgKiBA
cGFyYW0ge0FTVE5vZGV9IGdyYW5kUGFyZW50IC0gUGFyZW50IG9mIHRoZSBub2RlJ3MgcGFyZW50
CisgICAgICogQHJldHVybnMge3ZvaWR9CisgICAgICovCisgICAgZnVuY3Rpb24gYmxvY2tTY29w
ZVZhckNoZWNrIChub2RlLCBwYXJlbnQsIGdyYW5kUGFyZW50KSB7CisgICAgICAgIGlmICghKChn
cmFuZFBhcmVudC50eXBlID09PSAiRnVuY3Rpb25EZWNsYXJhdGlvbiIKKyAgICAgICAgICAgIHx8
IGdyYW5kUGFyZW50LnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24iKQorICAgICAgICAgICAg
JiYgcGFyZW50LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIKKyAgICAgICAgICAgICYmIGlzVmFy
T25Ub3Aobm9kZSwgcGFyZW50LmJvZHkpKSkgeworICAgICAgICAgICAgY29udGV4dC5yZXBvcnQo
bm9kZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAvLyBQdWJsaWMgQVBJCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisg
ICAgcmV0dXJuIHsKKyAgICAgICAgIlZhcmlhYmxlRGVjbGFyYXRpb24iOiBmdW5jdGlvbiAobm9k
ZSkgeworICAgICAgICAgICAgdmFyIGFuY2VzdG9ycyA9IGNvbnRleHQuZ2V0QW5jZXN0b3JzKCk7
CisgICAgICAgICAgICB2YXIgcGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpOworICAgICAgICAgICAg
dmFyIGdyYW5kUGFyZW50ID0gYW5jZXN0b3JzLnBvcCgpOworCisgICAgICAgICAgICBpZiAobm9k
ZS5raW5kID09PSAidmFyIikgey8vY2hlY2sgdmFyaWFibGUgaXMgYHZhcmAgdHlwZSBhbmQgbm90
IGBsZXRgIG9yIGBjb25zdGAKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50LnR5cGUgPT09ICJQ
cm9ncmFtIikgey8vIFRoYXQgbWVhbnMgaXRzIGEgZ2xvYmFsIHZhcmlhYmxlCisgICAgICAgICAg
ICAgICAgICAgIGdsb2JhbFZhckNoZWNrKG5vZGUsIHBhcmVudCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tTY29wZVZhckNoZWNrKG5vZGUsIHBh
cmVudCwgZ3JhbmRQYXJlbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDE0MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1
bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBmbGFnIHdoZW4gSUlG
RSBpcyBub3Qgd3JhcHBlZCBpbiBwYXJlbnMKKyAqIEBhdXRob3IgSWx5YSBWb2xvZGluCisgKi8K
KworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1bGUgRGVmaW5pdGlvbgorLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihjb250ZXh0KSB7CisK
KyAgICAidXNlIHN0cmljdCI7CisgICAgdmFyIHN0eWxlID0gY29udGV4dC5vcHRpb25zWzBdIHx8
ICJvdXRzaWRlIjsKKworICAgIGZ1bmN0aW9uIHdyYXBwZWQobm9kZSkgeworICAgICAgICB2YXIg
cHJldmlvdXNUb2tlbiA9IGNvbnRleHQuZ2V0VG9rZW5CZWZvcmUobm9kZSksCisgICAgICAgICAg
ICBuZXh0VG9rZW4gPSBjb250ZXh0LmdldFRva2VuQWZ0ZXIobm9kZSk7CisgICAgICAgIHJldHVy
biBwcmV2aW91c1Rva2VuICYmIHByZXZpb3VzVG9rZW4udmFsdWUgPT09ICIoIiAmJgorICAgICAg
ICAgICAgbmV4dFRva2VuICYmIG5leHRUb2tlbi52YWx1ZSA9PT0gIikiOworICAgIH0KKworICAg
IHJldHVybiB7CisKKyAgICAgICAgIkNhbGxFeHByZXNzaW9uIjogZnVuY3Rpb24obm9kZSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICJGdW5jdGlvbkV4cHJlc3Npb24i
KSB7CisgICAgICAgICAgICAgICAgdmFyIGNhbGxFeHByZXNzaW9uV3JhcHBlZCA9IHdyYXBwZWQo
bm9kZSksCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uRXhwcmVzc2lvbldyYXBwZWQgPSB3
cmFwcGVkKG5vZGUuY2FsbGVlKTsKKworICAgICAgICAgICAgICAgIGlmICghY2FsbEV4cHJlc3Np
b25XcmFwcGVkICYmICFmdW5jdGlvbkV4cHJlc3Npb25XcmFwcGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJXcmFwIGFuIGltbWVkaWF0ZSBmdW5jdGlvbiBp
bnZvY2F0aW9uIGluIHBhcmVudGhlc2VzLiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
c3R5bGUgPT09ICJpbnNpZGUiICYmICFmdW5jdGlvbkV4cHJlc3Npb25XcmFwcGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJXcmFwIG9ubHkgdGhlIGZ1bmN0
aW9uIGV4cHJlc3Npb24gaW4gcGFyZW5zLiIpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
c3R5bGUgPT09ICJvdXRzaWRlIiAmJiAhY2FsbEV4cHJlc3Npb25XcmFwcGVkKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICJNb3ZlIHRoZSBpbnZvY2F0aW9uIGlu
dG8gdGhlIHBhcmVucyB0aGF0IGNvbnRhaW4gdGhlIGZ1bmN0aW9uLiIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKK307CisKK30se31dLDE0
MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CisvKioKKyAqIEBmaWxlb3ZlcnZp
ZXcgUnVsZSB0byBmbGFnIHdoZW4gcmVnZXggbGl0ZXJhbHMgYXJlIG5vdCB3cmFwcGVkIGluIHBh
cmVucworICogQGF1dGhvciBNYXR0IER1VmFsbCA8aHR0cDovL3d3dy5tYXR0ZHV2YWxsLmNvbT4K
KyAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGNvbnRleHQp
IHsKKworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkxpdGVy
YWwiOiBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICB2YXIgdG9rZW4gPSBjb250ZXh0Lmdl
dEZpcnN0VG9rZW4obm9kZSksCisgICAgICAgICAgICAgICAgbm9kZVR5cGUgPSB0b2tlbi50eXBl
LAorICAgICAgICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgICAgICBncmFuZHBhcmVudCwK
KyAgICAgICAgICAgICAgICBhbmNlc3RvcnM7CisKKyAgICAgICAgICAgIGlmIChub2RlVHlwZSA9
PT0gIlJlZ3VsYXJFeHByZXNzaW9uIikgeworICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbnRl
eHQuZ2V0VG9rZW5CZWZvcmUobm9kZSk7CisgICAgICAgICAgICAgICAgYW5jZXN0b3JzID0gY29u
dGV4dC5nZXRBbmNlc3RvcnMoKTsKKyAgICAgICAgICAgICAgICBncmFuZHBhcmVudCA9IGFuY2Vz
dG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV07CisKKyAgICAgICAgICAgICAgICBpZiAoZ3JhbmRw
YXJlbnQudHlwZSA9PT0gIk1lbWJlckV4cHJlc3Npb24iICYmIGdyYW5kcGFyZW50Lm9iamVjdCA9
PT0gbm9kZSAmJgorICAgICAgICAgICAgICAgICAgICAoIXNvdXJjZSB8fCBzb3VyY2UudmFsdWUg
IT09ICIoIikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgIldy
YXAgdGhlIHJlZ2V4cCBsaXRlcmFsIGluIHBhcmVucyB0byBkaXNhbWJpZ3VhdGUgdGhlIHNsYXNo
LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07
CisKK307CisKK30se31dLDE0MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7Cisv
KioKKyAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byByZXF1aXJlIG9yIGRpc2FsbG93IHlvZGEgY29t
cGFyaXNvbnMKKyAqIEBhdXRob3IgTmljaG9sYXMgQy4gWmFrYXMKKyAqLworInVzZSBzdHJpY3Qi
OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnVsZSBEZWZpbml0aW9uCisvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7
CisKKyAgICAvLyBEZWZhdWx0IHRvICJuZXZlciIgKCFhbHdheXMpIGlmIG5vIG9wdGlvbgorCisg
ICAgdmFyIGFsd2F5cyA9IChjb250ZXh0Lm9wdGlvbnNbMF0gPT09ICJhbHdheXMiKTsKKworICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBIZWxwZXJzCisgICAgLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCisgICAgLyoqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIG9wZXJhdG9yIGlz
IGEgY29tcGFyaXNvbiBvcGVyYXRvci4KKyAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3BlcmF0b3Ig
VGhlIG9wZXJhdG9yIHRvIGNoZWNrLgorICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBXaGV0aGVy
IG9yIG5vdCBpdCBpcyBhIGNvbXBhcmlzb24gb3BlcmF0b3IuCisgICAgICovCisgICAgZnVuY3Rp
b24gaXNDb21wYXJpc29uT3BlcmF0b3Iob3BlcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuICgvXig9
PXw9PT18IT18IT09fDx8Pnw8PXw+PSkkLykudGVzdChvcGVyYXRvcik7CisgICAgfQorCisgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFB1YmxpYworICAgIC8vLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworICAgIHJldHVybiB7CisKKyAgICAgICAgIkJpbmFyeUV4cHJlc3Npb24iOiBmdW5jdGlv
biAobm9kZSkgeworCisgICAgICAgICAgICBpZiAoYWx3YXlzKSB7CisKKyAgICAgICAgICAgICAg
ICAvLyBDb21wYXJpc29ucyBtdXN0IGFsd2F5cyBiZSB5b2RhLXN0eWxlOiBpZiAoImJsdWUiID09
PSBjb2xvcikKKworICAgICAgICAgICAgICAgIGlmIChub2RlLnJpZ2h0LnR5cGUgPT09ICJMaXRl
cmFsIiAmJiBpc0NvbXBhcmlzb25PcGVyYXRvcihub2RlLm9wZXJhdG9yKSkgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCAiRXhwZWN0ZWQgbGl0ZXJhbCB0byBiZSBv
biB0aGUgbGVmdCBzaWRlIG9mICIgKyBub2RlLm9wZXJhdG9yICsgIi4iKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICAvLyBDb21w
YXJpc29ucyBtdXN0IG5ldmVyIGJlIHlvZGEtc3R5bGUgKGRlZmF1bHQpCisKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS5sZWZ0LnR5cGUgPT09ICJMaXRlcmFsIiAmJiBpc0NvbXBhcmlzb25PcGVy
YXRvcihub2RlLm9wZXJhdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9y
dChub2RlLCAiRXhwZWN0ZWQgbGl0ZXJhbCB0byBiZSBvbiB0aGUgcmlnaHQgc2lkZSBvZiAiICsg
bm9kZS5vcGVyYXRvciArICIuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9
CisKKyAgICAgICAgfQorCisgICAgfTsKKworfTsKKworfSx7fV0sMTQ0OltmdW5jdGlvbihyZXF1
aXJlLG1vZHVsZSxleHBvcnRzKXsKKy8qKgorICogQGZpbGVvdmVydmlldyBDb21tb24gdXRpbGl0
aWVzLgorICovCisidXNlIHN0cmljdCI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQ
dWJsaWMgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLyoqCisgKiBNZXJnZXMg
dHdvIG9iamVjdHMgdG9nZXRoZXIgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgaW5pdGlh
bCBvYmplY3QuIENhbiBiZSB1c2VkIGZvciBzaGFsbG93IGNsb25pbmcuCisgKiBAcGFyYW0ge09i
amVjdH0gdGFyZ2V0IG9mIHRoZSBjbG9uaW5nIG9wZXJhdGlvbgorICogQHBhcmFtIHtPYmplY3R9
IHNvdXJjZSBvYmplY3QKKyAqIEByZXR1cm5zIHt2b2lkfQorICovCitleHBvcnRzLm1peGluID0g
ZnVuY3Rpb24odGFyZ2V0LCBzb3VyY2UpIHsKKyAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVh
Y2goZnVuY3Rpb24oa2V5KSB7CisgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07Cisg
ICAgfSk7Cit9OworCisvKioKKyAqIE1lcmdlcyB0d28gY29uZmlnIG9iamVjdHMuIFRoaXMgd2ls
bCBub3Qgb25seSBhZGQgbWlzc2luZyBrZXlzLCBidXQgd2lsbCBhbHNvIG1vZGlmeSB2YWx1ZXMg
dG8gbWF0Y2guCisgKiBAcGFyYW0ge09iamVjdH0gYmFzZSBjb25maWcgb2JqZWN0CisgKiBAcGFy
YW0ge09iamVjdH0gY3VzdG9tIGNvbmZpZyBvYmplY3QuIE92ZXJyaWRlcyBpbiB0aGlzIGNvbmZp
ZyBvYmplY3Qgd2lsbCB0YWtlIHByaW9yaXR5IG92ZXIgYmFzZS4KKyAqIEByZXR1cm5zIHtPYmpl
Y3R9IG1lcmdlZCBjb25maWcgb2JqZWN0LgorICovCitleHBvcnRzLm1lcmdlQ29uZmlncyA9IGZ1
bmN0aW9uIG1lcmdlQ29uZmlncyhiYXNlLCBjdXN0b20pIHsKKworICAgIE9iamVjdC5rZXlzKGN1
c3RvbSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CisgICAgICAgIHZhciBwcm9wZXJ0eSA9IGN1
c3RvbVtrZXldOworCisgICAgICAgIGlmIChrZXkgPT09ICJwbHVnaW5zIikgeworICAgICAgICAg
ICAgaWYgKCFiYXNlW2tleV0pIHsKKyAgICAgICAgICAgICAgICBiYXNlW2tleV0gPSBbXTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvcGVydHkuZm9yRWFjaChmdW5jdGlvbiAocGx1
Z2luKSB7CisgICAgICAgICAgICAgICAgLy8gc2tpcCBkdXBsaWNhdGVzCisgICAgICAgICAgICAg
ICAgaWYgKGJhc2Vba2V5XS5pbmRleE9mKHBsdWdpbikgPT09IC0xKSB7CisgICAgICAgICAgICAg
ICAgICAgIGJhc2Vba2V5XS5wdXNoKHBsdWdpbik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAo
QXJyYXkuaXNBcnJheShiYXNlW2tleV0pICYmICFBcnJheS5pc0FycmF5KHByb3BlcnR5KSAmJiB0
eXBlb2YgcHJvcGVydHkgPT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAvL2Fzc3VtZSB0aGF0
IHdlIGFyZSBqdXN0IG92ZXJyaWRpbmcgZmlyc3QgYXR0cmlidXRlCisgICAgICAgICAgICBiYXNl
W2tleV1bMF0gPSBjdXN0b21ba2V5XTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICJvYmplY3QiICYmICFBcnJheS5pc0Fy
cmF5KHByb3BlcnR5KSkgeworICAgICAgICAgICAgLy8gYmFzZVtrZXldIG1pZ2h0IG5vdCBleGlz
dCwgc28gYmUgY2FyZWZ1bCB3aXRoIHJlY3Vyc2lvbiBoZXJlCisgICAgICAgICAgICBiYXNlW2tl
eV0gPSBtZXJnZUNvbmZpZ3MoYmFzZVtrZXldIHx8IHt9LCBjdXN0b21ba2V5XSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBiYXNlW2tleV0gPSBjdXN0b21ba2V5XTsKKyAgICAgICAg
fQorICAgIH0pOworCisgICAgcmV0dXJuIGJhc2U7Cit9OworCit9LHt9XX0se30sWzldKSg5KQor
fSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL0NoZWNrbWFyay5zdmcgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvQ2hlY2ttYXJrLnN2ZwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODQ2NTAxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL0NoZWNrbWFyay5zdmcKQEAg
LTAsMCArMSw2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEt
LSBDb3B5cmlnaHQgwqkgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIC0tPgor
PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmll
d0JveD0iMCAwIDE1IDE1Ij4KKyAgICA8Y2lyY2xlIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2si
IGN4PSI3LjUiIGN5PSI3LjUiIHI9IjYiLz4KKyAgICA8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9
ImJsYWNrIiBkPSJNIDUuNSA3LjUgTCA3IDEwLjUgTCAxMC41IDQuNSIvPgorPC9zdmc+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvR2Vhci5z
dmcgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvR2Vhci5zdmcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThlZTRjNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0ltYWdlcy9HZWFyLnN2
ZwpAQCAtMCwwICsxLDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+
Cis8IS0tIENvcHlyaWdodCDCqSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
LS0+Cis8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
IiB2aWV3Qm94PSIwIDAgMTUgMTUiPgorICAgIDxwYXRoIGZpbGw9ImJsYWNrIiBkPSJNIDQuNDYx
OSAxMS45NTcgQyA0LjA3MTkgMTIuMzQ4IDMuNDM0OSAxMi4zNDggMy4wNDE5IDExLjk1NyBDIDIu
ODU0OSAxMS43NjggMi43NTE5IDExLjUxOCAyLjc1MTkgMTEuMjQ4IEMgMi43NTA5IDEwLjk3OCAy
Ljg1NDkgMTAuNzI3IDMuMDQxOSAxMC41MzkgTCA0LjA2MDkgOS41MiBDIDMuOTcyOSA5LjM3MiAz
Ljg4NjkgOS4yMjIgMy44MTg5IDkuMDYgQyAzLjc0MTkgOC44ODIgMy42OTE5IDguNjkgMy42NDI5
IDguNSBMIDMuMTIwOSA4LjQ5OSBMIDIuNTAwOSA4LjQ5OSBDIDEuOTQ4OSA4LjUgMS41MDA5IDgu
MDUyIDEuNTAxOSA3LjQ5OSBDIDEuNTAwOSA2Ljk0OCAxLjk0ODkgNi41IDIuNTAwOSA2LjQ5OSBM
IDMuMTIwOSA2LjQ5OSBMIDMuNjQxOSA2LjUgQyAzLjY5MTkgNi4zMSAzLjc0MTkgNi4xMTggMy44
MTc5IDUuOTQgTCAzLjgxNzkgNS45MzkgQyAzLjg4NjkgNS43NzggMy45Nzk5IDUuNjMgNC4wNjY5
IDUuNDgxIEwgMy42OTg5IDUuMTEzIEwgMy4wNTU5IDQuNDcxIEMgMi44Njg5IDQuMjgzIDIuNzY1
OSA0LjAzMiAyLjc2NTkgMy43NjMgQyAyLjc2NTkgMy40OTUgMi44Njg5IDMuMjQ0IDMuMDU3OSAz
LjA1NyBDIDMuMjQ0OSAyLjg2OCAzLjQ5NTkgMi43NjYgMy43NjQ5IDIuNzY2IEMgNC4wMzI5IDIu
NzY2IDQuMjgzOSAyLjg2OSA0LjQ3MTkgMy4wNTYgTCA1LjExMjkgMy42OTggTCA1LjQ4MTkgNC4w
NjcgQyA1LjYzMDkgMy45NzggNS43Nzc5IDMuODg3IDUuOTM5OSAzLjgxNyBMIDUuOTQwOSAzLjgx
OCBDIDUuOTU3OSAzLjgxIDUuOTc2OSAzLjgwNiA1Ljk5MzkgMy43OTkgQyA1Ljk5NjkgMy43OTgg
NS45OTg5IDMuNzk4IDYuMDAwOSAzLjc5NyBDIDYuMTYxOSAzLjczMSA2LjMyOTkgMy42ODIgNi41
MDA5IDMuNjQxIEwgNi41MDA5IDMuMTIgTCA2LjUwMDkgMi40OTkgQyA2LjUwMDkgMS45NDkgNi45
NDg5IDEuNDk5IDcuNTAwOSAxLjQ5OSBDIDguMDUxOSAxLjQ5OSA4LjUwMDkgMS45NDkgOC41MDA5
IDIuNDk5IEwgOC41MDA5IDMuMTIgTCA4LjUwMDkgMy42NDEgQyA4LjY3MTkgMy42ODIgOC44Mzk5
IDMuNzMxIDkuMDAwOSAzLjc5NyBDIDkuMDAzOSAzLjc5OCA5LjAwNzkgMy43OTkgOS4wMTA5IDMu
OCBDIDkuMDI2OSAzLjgwNyA5LjA0NDkgMy44MSA5LjA2MDkgMy44MTcgTCA5LjA2MTkgMy44MTcg
QyA5LjIyMTkgMy44ODUgOS4zNjc5IDMuOTc3IDkuNTE3OSA0LjA2NSBMIDEwLjUzOTkgMy4wNDIg
QyAxMC43Mjg5IDIuODU0IDEwLjk3OTkgMi43NSAxMS4yNDg5IDIuNzUgQyAxMS41MTg5IDIuNzUg
MTEuNzY5OSAyLjg1NCAxMS45NTg5IDMuMDQzIEMgMTIuMTQ2OSAzLjIzMSAxMi4yNTA5IDMuNDgz
IDEyLjI0OTkgMy43NTIgQyAxMi4yNDk5IDQuMDIxIDEyLjE0NjkgNC4yNzQgMTEuOTU3OSA0LjQ2
MiBMIDEwLjkzNTkgNS40ODQgQyAxMS4wMjM5IDUuNjMyIDExLjExNDkgNS43NzkgMTEuMTgzOSA1
LjkzOSBDIDExLjE4MzkgNS45MzkgMTEuMTgzOSA1Ljk0IDExLjE4NDkgNS45NCBDIDExLjE5MDkg
NS45NTYgMTEuMTkzOSA1Ljk3NCAxMS4xOTk5IDUuOTkgQyAxMS4yMDA5IDUuOTkzIDExLjIwMTkg
NS45OTYgMTEuMjAyOSA2IEMgMTEuMjY5OSA2LjE2MSAxMS4zMTc5IDYuMzI5IDExLjM1ODkgNi41
IEwgMTEuODgwOSA2LjQ5OSBMIDEyLjUwMDkgNi40OTkgQyAxMy4wNTE5IDYuNDk5IDEzLjUwMDkg
Ni45NDggMTMuNTAwOSA3LjQ5OSBDIDEzLjUwMDkgOC4wNTIgMTMuMDUyOSA4LjUgMTIuNTAwOSA4
LjQ5OSBMIDExLjg4MDkgOC40OTkgTCAxMS4zNTg5IDguNSBDIDExLjMxNzkgOC42NzEgMTEuMjY5
OSA4LjgzOSAxMS4yMDI5IDkgQyAxMS4yMDI5IDkuMDAyIDExLjIwMTkgOS4wMDUgMTEuMjAwOSA5
LjAwOCBDIDExLjE5MzkgOS4wMjQgMTEuMTkwOSA5LjA0MyAxMS4xODM5IDkuMDYgQyAxMS4xMTQ5
IDkuMjIzIDExLjAyNzkgOS4zNzQgMTAuOTM4OSA5LjUyMyBMIDExLjMwMjkgOS44ODcgTCAxMS45
NDM5IDEwLjUyOCBDIDEyLjEzMTkgMTAuNzE2IDEyLjIzNDkgMTAuOTY4IDEyLjIzNDkgMTEuMjM1
IEMgMTIuMjM0OSAxMS41MDUgMTIuMTMxOSAxMS43NTYgMTEuOTQyOSAxMS45NDMgQyAxMS43NTU5
IDEyLjEzMiAxMS41MDQ5IDEyLjIzNSAxMS4yMzU5IDEyLjIzNSBDIDEwLjk2ODkgMTIuMjM1IDEw
LjcxNzkgMTIuMTMyIDEwLjUyODkgMTEuOTQ0IEwgOS44ODc5IDExLjMwMiBMIDkuNTE5OSAxMC45
MzQgQyA5LjM2OTkgMTEuMDIgOS4yMjM5IDExLjExNCA5LjA2MDkgMTEuMTgzIEMgOC44ODI5IDEx
LjI1OCA4LjY5MDkgMTEuMzA5IDguNTAwOSAxMS4zNTggTCA4LjUwMDkgMTEuODc5IEwgOC41MDA5
IDEyLjQ5OSBDIDguNTAwOSAxMy4wNTIgOC4wNTI5IDEzLjUgNy41MDA5IDEzLjQ5OSBDIDYuOTQ4
OSAxMy41IDYuNTAwOSAxMy4wNTIgNi41MDA5IDEyLjQ5OSBMIDYuNTAwOSAxMS44NzkgTCA2LjUw
MDkgMTEuMzU4IEMgNi4zMTA5IDExLjMwOSA2LjExOTkgMTEuMjU5IDUuOTQxOSAxMS4xODQgQyA1
Ljk0MTkgMTEuMTgzIDUuOTQwOSAxMS4xODMgNS45Mzk5IDExLjE4MyBDIDUuNzc4OSAxMS4xMTMg
NS42MzI5IDExLjAyMiA1LjQ4MzkgMTAuOTM2IEwgNC40NjE5IDExLjk1NyBaICBNIDUuOTk5OSAx
Mi41IEMgNi4wMDA5IDEzLjMyNSA2LjY3NTkgMTQgNy41MDA5IDE0IEMgOC4zMjU5IDE0IDkuMDAw
OSAxMy4zMjUgOS4wMDE5IDEyLjUgTCA5LjAwMDkgMTEuNzI1IEMgOS4xNDc5IDExLjY3MyA5LjI5
MDkgMTEuNjE2IDkuNDI5OSAxMS41NTEgTCAxMC4xNzU5IDEyLjI5OCBDIDEwLjc1OTkgMTIuODgx
IDExLjcxNDkgMTIuODggMTIuMjk2OSAxMi4yOTcgTCAxMi4yOTg5IDEyLjI5NyBDIDEyLjU4OTkg
MTIuMDA1IDEyLjczNDkgMTEuNjE5IDEyLjczNDkgMTEuMjM1IEMgMTIuNzM0OSAxMC44NTIgMTIu
NTg5OSAxMC40NjcgMTIuMjk3OSAxMC4xNzUgTCAxMS41NTE5IDkuNDI5IEMgMTEuNjE3OSA5LjI4
OSAxMS42NzM5IDkuMTQ2IDExLjcyNTkgOSBMIDEyLjUwMDkgOC45OTkgQyAxMy4zMjU5IDkgMTQu
MDAwOSA4LjMyNSAxNC4wMDA5IDcuNSBDIDE0LjAwMDkgNi42NzQgMTMuMzI1OSA2IDEyLjUwMDkg
NS45OTkgTCAxMS43MjU5IDYgQyAxMS42NzM5IDUuODUzIDExLjYxNzkgNS43MSAxMS41NTE5IDUu
NTcxIEwgMTIuMjk3OSA0LjgyNSBDIDEyLjU4ODkgNC41MzMgMTIuNzM0OSA0LjE0OCAxMi43MzQ5
IDMuNzY0IEMgMTIuNzM0OSAzLjM3OSAxMi41ODk5IDIuOTk1IDEyLjI5ODkgMi43MDQgTCAxMi4y
OTY5IDIuNzAyIEMgMTEuNzE0OSAyLjExOSAxMC43NTk5IDIuMTE5IDEwLjE3NjkgMi43MDIgTCA5
LjQyOTkgMy40NDkgQyA5LjI4OTkgMy4zODIgOS4xNDc5IDMuMzI3IDkuMDAwOSAzLjI3NSBMIDku
MDAwOSAyLjQ5OSBDIDkuMDAwOSAxLjY3NCA4LjMyNTkgMC45OTkgNy41MDA5IDAuOTk5IEMgNi42
NzU5IDAuOTk5IDYuMDAwOSAxLjY3NCA2LjAwMDkgMi40OTkgTCA2LjAwMDkgMy4yNzUgQyA1Ljg1
NDkgMy4zMjcgNS43MTA5IDMuMzgzIDUuNTcwOSAzLjQ0OSBMIDQuODI0OSAyLjcwMyBDIDQuMjQx
OSAyLjEyIDMuMjg2OSAyLjEyIDIuNzAzOSAyLjcwMyBMIDIuNzAyOSAyLjcwMyBDIDIuNDExOSAy
Ljk5NSAyLjI2NTkgMy4zNzkgMi4yNjU5IDMuNzYzIEMgMi4yNjU5IDQuMTQ4IDIuNDExOSA0LjUz
MiAyLjcwMjkgNC44MjQgTCAzLjQ0OTkgNS41NzEgQyAzLjM4MzkgNS43MSAzLjMyODkgNS44NTMg
My4yNzU5IDYgTCAyLjUwMDkgNS45OTkgQyAxLjY3NTkgNiAxLjAwMDkgNi42NzQgMS4wMDA5IDcu
NSBDIDEuMDAwOSA4LjMyNSAxLjY3NTkgOSAyLjUwMDkgOSBMIDMuMjc1OSA5IEMgMy4zMjc5IDku
MTQ2IDMuMzgzOSA5LjI4OSAzLjQ0OTkgOS40MjkgTCAyLjcwMzkgMTAuMTc1IEMgMi40MTE5IDEw
LjQ2NyAyLjI2NDkgMTAuODUyIDIuMjY1OSAxMS4yMzYgQyAyLjI2NDkgMTEuNjIxIDIuNDEyOSAx
Mi4wMDYgMi43MDI5IDEyLjI5NiBMIDIuNzAzOSAxMi4yOTcgQyAzLjI4NjkgMTIuODggNC4yNDE5
IDEyLjg4IDQuODI0OSAxMi4yOTcgTCA1LjU3MTkgMTEuNTUxIEMgNS43MTA5IDExLjYxNiA1Ljg1
MzkgMTEuNjczIDYuMDAwOSAxMS43MjUgTCA1Ljk5OTkgMTIuNSBaIi8+CisgICAgPHBhdGggZmls
bD0iYmxhY2siIGQ9Ik0gNy41IDUgQyA2LjExOCA1IDUgNi4xMTkgNSA3LjUgQyA1IDguODgxIDYu
MTE4IDEwIDcuNSAxMCBDIDguODgxIDEwIDEwIDguODgxIDEwIDcuNSBDIDEwIDYuMTE5IDguODgx
IDUgNy41IDUgTSA3LjUgNS42IEMgOC41NDggNS42IDkuNCA2LjQ1MiA5LjQgNy41IEMgOS40IDgu
NTQ4IDguNTQ4IDkuNCA3LjUgOS40IEMgNi40NTIgOS40IDUuNiA4LjU0OCA1LjYgNy41IEMgNS42
IDYuNDUyIDYuNDUyIDUuNiA3LjUgNS42Ii8+Cis8L3N2Zz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAppbmRleCA5ZGIyOWU0Li45YWE5N2IzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCkBAIC0zMCw2
ICszMCw3IEBACiAKICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IkV4dGVybmFsL0Nv
ZGVNaXJyb3IvY29kZW1pcnJvci5jc3MiPgogCisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSJWaWV3cy9BbmFseXplckJhbm5lci5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iVmlld3MvQXBwbGljYXRpb25DYWNoZUZyYW1lQ29udGVudFZpZXcuY3NzIj4KICAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL0FwcGxpY2F0aW9uQ2FjaGVJY29u
cy5jc3MiPgogICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmlld3MvQm94TW9kZWxE
ZXRhaWxzU2VjdGlvblJvdy5jc3MiPgpAQCAtOTAsNiArOTEsOSBAQAogICAgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iVmlld3MvTGF5ZXJUcmVlU2lkZWJhclBhbmVsLmNzcyI+CiAgICAg
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJWaWV3cy9MYXlvdXRUaW1lbGluZU92ZXJ2aWV3
R3JhcGguY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZpZXdzL0xheW91
dFRpbWVsaW5lVmlldy5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmll
d3MvTGluZU1hcmtlci5jc3MiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iVmll
d3MvTGluZU1lc3NhZ2UuY3NzIj4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IlZp
ZXdzL0xpbmVNZXNzYWdlR3JvdXAuY3NzIj4KICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9IlZpZXdzL0xvZ0NvbnRlbnRWaWV3LmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJWaWV3cy9Mb2dJY29uLmNzcyI+CiAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSJWaWV3cy9NYWluLmNzcyI+CkBAIC0xNzQsNiArMTc4LDcgQEAKICAgICA8c2NyaXB0IHNy
Yz0iQmFzZS9VdGlsaXRpZXMuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkV4dGVy
bmFsL0VzcHJpbWEvZXNwcmltYS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV4dGVy
bmFsL0VTTGludC9lc2xpbnQuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IlByb3Rv
Y29sL0FwcGxpY2F0aW9uQ2FjaGVPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IlByb3RvY29sL0NTU09ic2VydmVyLmpzIj48L3NjcmlwdD4KQEAgLTIwMiw2ICsyMDcsNyBA
QAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvVGltZWxpbmUuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJNb2RlbHMvVGltZWxpbmVSZWNvcmQuanMiPjwvc2NyaXB0PgogCisgICAgPHNj
cmlwdCBzcmM9Ik1vZGVscy9BbmFseXplck1lc3NhZ2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJNb2RlbHMvQXBwbGljYXRpb25DYWNoZUZyYW1lLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL0FwcGxpY2F0aW9uQ2FjaGVNYW5pZmVzdC5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9CYWNrRm9yd2FyZEVudHJ5LmpzIj48L3NjcmlwdD4K
QEAgLTMwOCw2ICszMTQsNyBAQAogCiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0FjdGl2YXRlQnV0
dG9uTmF2aWdhdGlvbkl0ZW0uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9B
Y3RpdmF0ZUJ1dHRvblRvb2xiYXJJdGVtLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvQW5hbHl6ZXJCYW5uZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3
cy9BcHBsaWNhdGlvbkNhY2hlRGV0YWlsc1NpZGViYXJQYW5lbC5qcyI+PC9zY3JpcHQ+CiAgICAg
PHNjcmlwdCBzcmM9IlZpZXdzL0FwcGxpY2F0aW9uQ2FjaGVGcmFtZUNvbnRlbnRWaWV3LmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvQXBwbGljYXRpb25DYWNoZUZyYW1lVHJl
ZUVsZW1lbnQuanMiPjwvc2NyaXB0PgpAQCAtMzk1LDYgKzQwMiw5IEBACiAgICAgPHNjcmlwdCBz
cmM9IlZpZXdzL0xheW91dFRpbWVsaW5lRGF0YUdyaWROb2RlLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iVmlld3MvTGF5b3V0VGltZWxpbmVPdmVydmlld0dyYXBoLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvTGF5b3V0VGltZWxpbmVWaWV3LmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvTGluZU1hcmtlci5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IlZpZXdzL0xpbmVNZXNzYWdlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iVmlld3MvTGluZU1lc3NhZ2VHcm91cC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9IlZpZXdzL0xvZ0NvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvTG9nVHJlZUVsZW1lbnQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3
cy9NZXRyaWNzU3R5bGVEZXRhaWxzUGFuZWwuanMiPjwvc2NyaXB0PgpAQCAtNDU2LDYgKzQ2Niw3
IEBACiAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvQ29kZU1pcnJvckVkaXRpbmdDb250
cm9sbGVyLmpzIj48L3NjcmlwdD4KIAorICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9BbmFs
eXplck1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9B
cHBsaWNhdGlvbkNhY2hlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNv
bnRyb2xsZXJzL0JyYW5jaE1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJD
b250cm9sbGVycy9DU1NTdHlsZU1hbmFnZXIuanMiPjwvc2NyaXB0PgpAQCAtNDgwLDYgKzQ5MSw3
IEBACiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1Byb2JlTWFuYWdlci5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1JlcGxheU1hbmFnZXIuanMiPjwvc2Ny
aXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9SdW50aW1lTWFuYWdlci5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0FuYWx5emVyTWFuYWdlci5qcyI+
PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1NvdXJjZU1hcE1hbmFnZXIu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9TdG9yYWdlTWFuYWdl
ci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1RpbWVsaW5lTWFu
YWdlci5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvQW5hbHl6ZXJNZXNzYWdlLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTRlYTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0FuYWx5emVyTWVzc2FnZS5qcwpA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkFuYWx5emVyTWVzc2Fn
ZSA9IGZ1bmN0aW9uKHNvdXJjZUNvZGUsIHRleHQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
cnVsZUlkKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKworICAgIGNv
bnNvbGUuYXNzZXJ0KHNvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZSk7CisgICAgY29uc29sZS5hc3NlcnQodHlwZW9mIHRleHQgPT09ICJzdHJpbmciKTsKKyAgICBj
b25zb2xlLmFzc2VydCh0eXBlb2YgbGluZU51bWJlciA9PT0gIm51bWJlciIpOworCisgICAgdGhp
cy5fc291cmNlQ29kZSA9IHNvdXJjZUNvZGU7CisgICAgdGhpcy5fdGV4dCA9IHRleHQ7CisgICAg
dGhpcy5fbGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgdGhpcy5fY29sdW1uTnVtYmVyID0g
Y29sdW1uTnVtYmVyOworICAgIHRoaXMuX3J1bGVJZCA9IHJ1bGVJZDsKK307CisKK1dlYkluc3Bl
Y3Rvci5BbmFseXplck1lc3NhZ2UucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJ
bnNwZWN0b3IuQW5hbHl6ZXJNZXNzYWdlLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9i
amVjdC5wcm90b3R5cGUsCisKKyAgICBnZXQgc291cmNlQ29kZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fc291cmNlQ29kZTsKKyAgICB9LAorCisgICAgZ2V0IHRleHQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7CisgICAgfSwKKworICAgIGdldCBsaW5lTnVtYmVy
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9saW5lTnVtYmVyOworICAgIH0sCisKKyAg
ICBnZXQgY29sdW1uTnVtYmVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW5O
dW1iZXI7CisgICAgfSwKKworICAgIGdldCBydWxlSWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3J1bGVJZDsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Jlc291cmNlLmpzCmluZGV4IDdhMjQ1YzMuLmUwYTlk
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9SZXNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9N
b2RlbHMvUmVzb3VyY2UuanMKQEAgLTQzNiw2ICs0MzYsMTMgQEAgV2ViSW5zcGVjdG9yLlJlc291
cmNlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdHMgfHwgW107CiAg
ICAgfSwKIAorICAgIGdldCBjYW5CZUFuYWx5emVkKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
Ll90eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKICAgICBzY3Jp
cHRGb3JMb2NhdGlvbjogZnVuY3Rpb24oc291cmNlQ29kZUxvY2F0aW9uKQogICAgIHsKICAgICAg
ICAgY29uc29sZS5hc3NlcnQoISh0aGlzIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNvdXJjZU1h
cFJlc291cmNlKSk7CkBAIC03MDEsNiArNzA4LDExIEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZS5w
cm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBjb29raWVbV2ViSW5zcGVjdG9yLlJlc291cmNl
LlVSTENvb2tpZUtleV0gPSB0aGlzLnVybC5oYXNoOwogICAgICAgICBjb29raWVbV2ViSW5zcGVj
dG9yLlJlc291cmNlLk1haW5SZXNvdXJjZUNvb2tpZUtleV0gPSB0aGlzLmlzTWFpblJlc291cmNl
KCk7CisgICAgfSwKKworICAgIGhhbmRsZUN1cnJlbnRSZXZpc2lvbkNvbnRlbnRDaGFuZ2U6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX25lZWRzQW5hbHlzaXMgPSB0cnVlOwogICAg
IH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9Tb3VyY2VDb2RlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL1NvdXJjZUNvZGUuanMKaW5kZXggOGVmMGI1OC4uMGNmOWE4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGUu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJj
ZUNvZGUuanMKQEAgLTM0LDYgKzM0LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUgPSBmdW5j
dGlvbigpCiAKICAgICB0aGlzLl9zb3VyY2VNYXBzID0gbnVsbDsKICAgICB0aGlzLl9mb3JtYXR0
ZXJTb3VyY2VNYXAgPSBudWxsOworICAgIHRoaXMuX25lZWRzQW5hbHlzaXMgPSB0cnVlOwogfTsK
IAogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQgPSB7CkBAIC0xMjEsNiArMTIyLDIxIEBA
IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuRm9ybWF0
dGVyRGlkQ2hhbmdlKTsKICAgICB9LAogCisgICAgZ2V0IGNhbkJlQW5hbHl6ZWQoKSB7CisgICAg
ICAgIC8vIFRvIGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9LAorCisgICAgZ2V0IG5lZWRzQW5hbHlzaXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX25lZWRzQW5hbHlzaXM7CisgICAgfSwKKworICAgIHNldCBuZWVkc0FuYWx5
c2lzKHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5fbmVlZHNBbmFseXNpcyA9IHZhbHVlOwor
ICAgIH0sCisKICAgICByZXF1ZXN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewog
ICAgICAgICBjb25zb2xlLmFzc2VydCh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpOwpA
QCAtMTc4LDYgKzE5NCwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiB0aGlzLl9vcmlnaW5hbFJldmlzaW9uOwogICAgIH0sCiAKKyAgICBn
ZXQgY29udGVudFJlY2VpdmVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50
UmVjZWl2ZWQ7CisgICAgfSwKKwogICAgIG1hcmtDb250ZW50QXNTdGFsZTogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgdGhpcy5fY29udGVudFJlY2VpdmVkID0gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9BbmFseXplckJhbm5l
ci5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9BbmFseXpl
ckJhbm5lci5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4NDc0NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0FuYWx5emVyQmFubmVyLmNzcwpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy5h
bmFseXplci1iYW5uZXIgeworICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTc5LCAx
NzksIDE3OSk7CisKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAtMjJweDsKKyAg
ICBsZWZ0OiAwOworICAgIHJpZ2h0OiAwOworICAgIGhlaWdodDogMjJweDsKKworICAgIHRleHQt
YWxpZ246IHJpZ2h0OworCisgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKKyAgICBvdmVyZmxvdzog
aGlkZGVuOworCisgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdG9wOworICAgIHRyYW5zaXRpb24t
ZHVyYXRpb246IDIwMG1zOworICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWlu
OworCisgICAgei1pbmRleDogNTAwOworfQorCisuYW5hbHl6ZXItYmFubmVyLnNob3dpbmcgewor
ICAgIHRvcDogMDsKKyAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1vdXQ7Cit9
CisKKy5hbmFseXplci1iYW5uZXIubm8tYW5hbHl6ZXItYmFubmVyLXRyYW5zaXRpb24sCisuc3Vw
cG9ydHMtYW5hbHl6ZXItYmFubmVyLm5vLWFuYWx5emVyLWJhbm5lci10cmFuc2l0aW9uIHsKKyAg
ICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwICFpbXBvcnRhbnQ7Cit9CisKKy5zdXBwb3J0cy1hbmFs
eXplci1iYW5uZXIgeworICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRvcDsKKyAgICB0cmFuc2l0
aW9uLWR1cmF0aW9uOiAyMDBtczsKKyAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFz
ZS1pbjsKK30KKworLnN1cHBvcnRzLWFuYWx5emVyLWJhbm5lci5zaG93aW5nLWFuYWx5emVyLWJh
bm5lciB7CisgICAgdG9wOiAyMnB4ICFpbXBvcnRhbnQ7CisgICAgdHJhbnNpdGlvbi10aW1pbmct
ZnVuY3Rpb246IGVhc2Utb3V0OworfQorCisuYW5hbHl6ZXItYmFubmVyID4gOmZpcnN0LWNoaWxk
IHsKKyAgICBtYXJnaW4tbGVmdDogOHB4ICFpbXBvcnRhbnQ7Cit9CisKKy5hbmFseXplci1iYW5u
ZXIgPiA6bGFzdC1jaGlsZCB7CisgICAgbWFyZ2luLXJpZ2h0OiA4cHggIWltcG9ydGFudDsKK30K
KworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbiB7CisgICAgbWFyZ2luOiAxcHggNHB4OworCisg
ICAgcGFkZGluZy1sZWZ0OiA2cHg7CisgICAgcGFkZGluZy1yaWdodDogNnB4OworCisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiBub25lOworCisgICAgYm9yZGVyLXJhZGl1czogNHB4OworICAgIGJv
cmRlcjogMXB4IHNvbGlkIHJnYigxNDYsIDE0NiwgMTQ2KTsKKworICAgIGJhY2tncm91bmQtY29s
b3I6IHdoaXRlOworICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CisgICAgYm94LXNoYWRvdzog
bm9uZTsKKworICAgIGxpbmUtaGVpZ2h0OiAxMXB4OworCisgICAgaGVpZ2h0OiAxOXB4OworCisg
ICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisKKyAgICBv
dXRsaW5lLW9mZnNldDogLTJweDsKK30KKworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbiA+IC5n
bHlwaCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworCisgICAgd2lkdGg6IDdweDsKKyAg
ICBoZWlnaHQ6IDExcHg7Cit9CisKK2JvZHkubWFjLXBsYXRmb3JtLmxlZ2FjeSAuYW5hbHl6ZXIt
YmFubmVyID4gYnV0dG9uID4gLmdseXBoIHsKKyAgICBoZWlnaHQ6IDdweDsKK30KKworLmFuYWx5
emVyLWJhbm5lciA+IGJ1dHRvbjpkaXNhYmxlZCA+IC5nbHlwaCB7CisgICAgb3BhY2l0eTogMC42
NTsKK30KKworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbjphY3RpdmU6bm90KDpkaXNhYmxlZCkg
eworICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNDEsIDE0MSwgMTQxKTsKKyAgICBiYWNrZ3Jv
dW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2IoMjAwLCAyMDAsIDIwMCks
IHJnYigyMTgsIDIxOCwgMjE4KSk7CisgICAgYm94LXNoYWRvdzogcmdiYSgyNTUsIDI1NSwgMjU1
LCAwLjMzKSAwIDFweCAwLCBpbnNldCByZ2IoMTY1LCAxNjUsIDE2NSkgMCAxcHggMXB4OworfQor
CisuYW5hbHl6ZXItYmFubmVyID4gYnV0dG9uOmRpc2FibGVkIHsKKyAgICBib3JkZXI6IDFweCBz
b2xpZCByZ2IoMTk1LCAxOTUsIDE5NSk7CisgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKK30K
KworLmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbi5zZWdtZW50ZWQubGVmdCB7CisgICAgYm9yZGVy
LXRvcC1yaWdodC1yYWRpdXM6IDA7CisgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7
CisKKyAgICBtYXJnaW4tcmlnaHQ6IDA7CisKKyAgICBwYWRkaW5nLWxlZnQ6IDZweDsKKyAgICBw
YWRkaW5nLXJpZ2h0OiA2cHg7Cit9CisKKy5hbmFseXplci1iYW5uZXIgPiBidXR0b24uc2VnbWVu
dGVkLmxlZnQgPiAuZ2x5cGggeworICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtY2FudmFz
KGFuYWx5emVyLWJhbm5lci1wcmV2aW91cy1hcnJvdy1ub3JtYWwpOworICAgIGJhY2tncm91bmQt
c2l6ZTogN3B4IDExcHg7CisgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKK30KKwor
Ym9keS5tYWMtcGxhdGZvcm0ubGVnYWN5IC5hbmFseXplci1iYW5uZXIgPiBidXR0b24uc2VnbWVu
dGVkLmxlZnQgPiAuZ2x5cGggeworICAgIGJhY2tncm91bmQtc2l6ZTogN3B4IDdweDsKK30KKwor
LmFuYWx5emVyLWJhbm5lciA+IGJ1dHRvbi5zZWdtZW50ZWQubGVmdDphY3RpdmU6bm90KDpkaXNh
YmxlZCkgPiAuZ2x5cGggeworICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtY2FudmFzKGFu
YWx5emVyLWJhbm5lci1wcmV2aW91cy1hcnJvdy1ub3JtYWwtYWN0aXZlKTsKK30KKworLmFuYWx5
emVyLWJhbm5lciA+IGJ1dHRvbi5zZWdtZW50ZWQucmlnaHQgeworICAgIGJvcmRlci10b3AtbGVm
dC1yYWRpdXM6IDA7CisgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDsKKworICAgIG1h
cmdpbi1sZWZ0OiAtMXB4OworCisgICAgcGFkZGluZy1sZWZ0OiA1cHg7CisgICAgcGFkZGluZy1y
aWdodDogN3B4OworfQorCisuYW5hbHl6ZXItYmFubmVyID4gYnV0dG9uLnNlZ21lbnRlZC5yaWdo
dCA+IC5nbHlwaCB7CisgICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1jYW52YXMoYW5hbHl6
ZXItYmFubmVyLW5leHQtYXJyb3ctbm9ybWFsKTsKKyAgICBiYWNrZ3JvdW5kLXNpemU6IDdweCAx
MXB4OworICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Cit9CisKK2JvZHkubWFjLXBs
YXRmb3JtLmxlZ2FjeSAuYW5hbHl6ZXItYmFubmVyID4gYnV0dG9uLnNlZ21lbnRlZC5yaWdodCA+
IC5nbHlwaCB7CisgICAgYmFja2dyb3VuZC1zaXplOiA3cHggN3B4OworfQorCisuYW5hbHl6ZXIt
YmFubmVyID4gYnV0dG9uLnNlZ21lbnRlZC5yaWdodDphY3RpdmU6bm90KDpkaXNhYmxlZCkgPiAu
Z2x5cGggeworICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtY2FudmFzKGFuYWx5emVyLWJh
bm5lci1uZXh0LWFycm93LW5vcm1hbC1hY3RpdmUpOworfQorCisuYW5hbHl6ZXItYmFubmVyID4g
YnV0dG9uLnNlZ21lbnRlZCB7CisgICAgbWluLXdpZHRoOiAyMnB4OworICAgIHBhZGRpbmctdG9w
OiAzcHg7CisgICAgcGFkZGluZy1ib3R0b206IDJweDsKK30KKworYm9keS5tYWMtcGxhdGZvcm0u
bGVnYWN5IC5hbmFseXplci1iYW5uZXIgPiBidXR0b24uc2VnbWVudGVkIHsKKyAgICBwYWRkaW5n
LXRvcDogMnB4OworICAgIHBhZGRpbmctYm90dG9tOiAzcHg7Cit9CisKKy5hbmFseXplci1iYW5u
ZXIgPiBidXR0b24uc2VnbWVudGVkOmFjdGl2ZSB7CisgICAgei1pbmRleDogMTAwOworICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKK30KKworLmFuYWx5emVyLWJhbm5lciA+IGxhYmVsIHsKKyAgICBt
YXJnaW46IDAgNnB4OworICAgIGxpbmUtaGVpZ2h0OiAyMXB4OworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQW5hbHl6ZXJCYW5uZXIuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9BbmFseXplckJhbm5l
ci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGMxYzExCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQW5h
bHl6ZXJCYW5uZXIuanMKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0
b3IuQW5hbHl6ZXJCYW5uZXIgPSBmdW5jdGlvbihkZWxlZ2F0ZSwgZWxlbWVudCkgeworICAgIFdl
Ykluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKworICAgIHRoaXMuX2RlbGVnYXRlID0gZGVs
ZWdhdGUgfHwgbnVsbDsKKworICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50IHx8IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChX
ZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU3R5bGVDbGFzc05hbWUpOworCisgICAgdGhpcy5f
cmVzdWx0Q291bnRMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7CisgICAg
dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9yZXN1bHRDb3VudExhYmVsKTsKKworICAg
IHRoaXMuX3ByZXZpb3VzUmVzdWx0QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0
dG9uIik7CisgICAgdGhpcy5fcHJldmlvdXNSZXN1bHRCdXR0b24uY2xhc3NMaXN0LmFkZChXZWJJ
bnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU2VnbWVudGVkQnV0dG9uU3R5bGVDbGFzc05hbWUpOwor
ICAgIHRoaXMuX3ByZXZpb3VzUmVzdWx0QnV0dG9uLmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9y
LkFuYWx5emVyQmFubmVyLkxlZnRTZWdtZW50QnV0dG9uU3R5bGVDbGFzc05hbWUpOworICAgIHRo
aXMuX3ByZXZpb3VzUmVzdWx0QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTsKKyAgICB0aGlzLl9wcmV2
aW91c1Jlc3VsdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3ByZXZpb3Vz
UmVzdWx0QnV0dG9uQ2xpY2tlZC5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl9lbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMuX3ByZXZpb3VzUmVzdWx0QnV0dG9uKTsKKworICAgIHZhciBwcmV2aW91c1Jl
c3VsdEJ1dHRvbkdseXBoRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwor
ICAgIHByZXZpb3VzUmVzdWx0QnV0dG9uR2x5cGhFbGVtZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5z
cGVjdG9yLkFuYWx5emVyQmFubmVyLlNlZ21lbnRHbHlwaFN0eWxlQ2xhc3NOYW1lKTsKKyAgICB0
aGlzLl9wcmV2aW91c1Jlc3VsdEJ1dHRvbi5hcHBlbmRDaGlsZChwcmV2aW91c1Jlc3VsdEJ1dHRv
bkdseXBoRWxlbWVudCk7CisKKyAgICB0aGlzLl9uZXh0UmVzdWx0QnV0dG9uID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CisgICAgdGhpcy5fbmV4dFJlc3VsdEJ1dHRvbi5jbGFz
c0xpc3QuYWRkKFdlYkluc3BlY3Rvci5BbmFseXplckJhbm5lci5TZWdtZW50ZWRCdXR0b25TdHls
ZUNsYXNzTmFtZSk7CisgICAgdGhpcy5fbmV4dFJlc3VsdEJ1dHRvbi5jbGFzc0xpc3QuYWRkKFdl
Ykluc3BlY3Rvci5BbmFseXplckJhbm5lci5SaWdodFNlZ21lbnRCdXR0b25TdHlsZUNsYXNzTmFt
ZSk7CisgICAgdGhpcy5fbmV4dFJlc3VsdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CisgICAgdGhp
cy5fbmV4dFJlc3VsdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX25leHRS
ZXN1bHRCdXR0b25DbGlja2VkLmJpbmQodGhpcykpOworICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5k
Q2hpbGQodGhpcy5fbmV4dFJlc3VsdEJ1dHRvbik7CisKKyAgICB2YXIgbmV4dFJlc3VsdEJ1dHRv
bkdseXBoRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgIG5leHRS
ZXN1bHRCdXR0b25HbHlwaEVsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuQW5hbHl6
ZXJCYW5uZXIuU2VnbWVudEdseXBoU3R5bGVDbGFzc05hbWUpOworICAgIHRoaXMuX25leHRSZXN1
bHRCdXR0b24uYXBwZW5kQ2hpbGQobmV4dFJlc3VsdEJ1dHRvbkdseXBoRWxlbWVudCk7CisKKyAg
ICB0aGlzLl9kb25lQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Cisg
ICAgdGhpcy5fZG9uZUJ1dHRvbi50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
RG9uZSIpOworICAgIHRoaXMuX2RvbmVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0
aGlzLl9oYW5kbGVEb25lQnV0dG9uQ2xpY2tlZC5iaW5kKHRoaXMpKTsKKyAgICB0aGlzLl9lbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuX2RvbmVCdXR0b24pOworCisgICAgdGhpcy5fbnVtYmVyT2ZS
ZXN1bHRzID0gbnVsbDsKKworICAgIHRoaXMuX2hpZGVLZXlib2FyZFNob3J0Y3V0ID0gbmV3IFdl
Ykluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0KG51bGwsIFdlYkluc3BlY3Rvci5LZXlib2FyZFNo
b3J0Y3V0LktleS5Fc2NhcGUsIHRoaXMuaGlkZS5iaW5kKHRoaXMpLCB0aGlzLl9lbGVtZW50KTsK
KworICAgIHRoaXMuX2dlbmVyYXRlQnV0dG9uc0dseXBoc0lmTmVlZGVkKCk7Cit9OworCitXZWJJ
bnNwZWN0b3IuT2JqZWN0LmFkZENvbnN0cnVjdG9yRnVuY3Rpb25zKFdlYkluc3BlY3Rvci5BbmFs
eXplckJhbm5lcik7CisKK1dlYkluc3BlY3Rvci5BbmFseXplckJhbm5lci5TdHlsZUNsYXNzTmFt
ZSA9ICJhbmFseXplci1iYW5uZXIiOworV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlN1cHBv
cnRzQW5hbHl6ZXJCYW5uZXJTdHlsZUNsYXNzTmFtZSA9ICJzdXBwb3J0cy1hbmFseXplci1iYW5u
ZXIiOworV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlNob3dpbmdBbmFseXplckJhbm5lclN0
eWxlQ2xhc3NOYW1lID0gInNob3dpbmctYW5hbHl6ZXItYmFubmVyIjsKK1dlYkluc3BlY3Rvci5B
bmFseXplckJhbm5lci5Ob1RyYW5zaXRpb25TdHlsZUNsYXNzTmFtZSA9ICJuby1hbmFseXplci1i
YW5uZXItdHJhbnNpdGlvbiI7CitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU2hvd2luZ1N0
eWxlQ2xhc3NOYW1lID0gInNob3dpbmciOworV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlNl
Z21lbnRlZEJ1dHRvblN0eWxlQ2xhc3NOYW1lID0gInNlZ21lbnRlZCI7CitXZWJJbnNwZWN0b3Iu
QW5hbHl6ZXJCYW5uZXIuTGVmdFNlZ21lbnRCdXR0b25TdHlsZUNsYXNzTmFtZSA9ICJsZWZ0IjsK
K1dlYkluc3BlY3Rvci5BbmFseXplckJhbm5lci5SaWdodFNlZ21lbnRCdXR0b25TdHlsZUNsYXNz
TmFtZSA9ICJyaWdodCI7CitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU2VnbWVudEdseXBo
U3R5bGVDbGFzc05hbWUgPSAiZ2x5cGgiOworCitXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIu
RXZlbnQgPSB7CisgICAgRGlkU2hvdzogImFuYWx5emVyLWJhbm5lci1kaWQtc2hvdyIsCisgICAg
RGlkSGlkZTogImFuYWx5emVyLWJhbm5lci1kaWQtaGlkZSIKK307CisKK1dlYkluc3BlY3Rvci5B
bmFseXplckJhbm5lci5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rv
ci5BbmFseXplckJhbm5lciwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJv
dG90eXBlLAorCisgICAgLy8gUHVibGljCisKKyAgICBnZXQgZGVsZWdhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlOworICAgIH0sCisKKyAgICBzZXQgZGVsZWdhdGUo
bmV3RGVsZWdhdGUpCisgICAgeworICAgICAgICB0aGlzLl9kZWxlZ2F0ZSA9IG5ld0RlbGVnYXRl
IHx8IG51bGw7CisgICAgfSwKKworICAgIGdldCBlbGVtZW50KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9lbGVtZW50OworICAgIH0sCisKKyAgICBnZXQgbnVtYmVyT2ZNZXNzYWdlcygp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyT2ZNZXNzYWdlczsKKyAgICB9LAor
CisgICAgc2V0IG51bWJlck9mTWVzc2FnZXMobnVtYmVyT2ZNZXNzYWdlcykKKyAgICB7CisgICAg
ICAgIGlmIChudW1iZXJPZk1lc3NhZ2VzID09PSB1bmRlZmluZWQgfHwgaXNOYU4obnVtYmVyT2ZN
ZXNzYWdlcykpCisgICAgICAgICAgICBudW1iZXJPZk1lc3NhZ2VzID0gbnVsbDsKKworICAgICAg
ICB0aGlzLl9udW1iZXJPZlJlc3VsdHMgPSBudW1iZXJPZk1lc3NhZ2VzOworCisgICAgICAgIHRo
aXMuX3ByZXZpb3VzUmVzdWx0QnV0dG9uLmRpc2FibGVkID0gdGhpcy5fbmV4dFJlc3VsdEJ1dHRv
bi5kaXNhYmxlZCA9IChudW1iZXJPZk1lc3NhZ2VzIDw9IDApOworCisgICAgICAgIGlmICghbnVt
YmVyT2ZNZXNzYWdlcykKKyAgICAgICAgICAgIHRoaXMuX3Jlc3VsdENvdW50TGFiZWwudGV4dENv
bnRlbnQgPSAiIjsKKyAgICAgICAgZWxzZSBpZiAobnVtYmVyT2ZNZXNzYWdlcyA8PSAwKQorICAg
ICAgICAgICAgdGhpcy5fcmVzdWx0Q291bnRMYWJlbC50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiTm90IGZvdW5kIik7CisgICAgICAgIGVsc2UgaWYgKG51bWJlck9mTWVzc2Fn
ZXMgPT09IDEpCisgICAgICAgICAgICB0aGlzLl9yZXN1bHRDb3VudExhYmVsLnRleHRDb250ZW50
ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIxIG1hdGNoIik7CisgICAgICAgIGVsc2UgaWYgKG51
bWJlck9mTWVzc2FnZXMgPiAxKQorICAgICAgICAgICAgdGhpcy5fcmVzdWx0Q291bnRMYWJlbC50
ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJWQgbWF0Y2hlcyIpLmZvcm1hdChu
dW1iZXJPZk1lc3NhZ2VzKTsKKyAgICB9LAorCisgICAgZ2V0IHRhcmdldEVsZW1lbnQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldEVsZW1lbnQ7CisgICAgfSwKKworICAgIHNl
dCB0YXJnZXRFbGVtZW50KGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fdGFyZ2V0
RWxlbWVudCkgeworICAgICAgICAgICAgdmFyIG9sZFRhcmdldEVsZW1lbnQgPSB0aGlzLl90YXJn
ZXRFbGVtZW50OworCisgICAgICAgICAgICB0aGlzLl90YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5h
ZGQoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLk5vVHJhbnNpdGlvblN0eWxlQ2xhc3NOYW1l
KTsKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWJJ
bnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU3VwcG9ydHNBbmFseXplckJhbm5lclN0eWxlQ2xhc3NO
YW1lKTsKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShX
ZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU2hvd2luZ0FuYWx5emVyQmFubmVyU3R5bGVDbGFz
c05hbWUpOworCisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5z
cGVjdG9yLkFuYWx5emVyQmFubmVyLk5vVHJhbnNpdGlvblN0eWxlQ2xhc3NOYW1lKTsKKyAgICAg
ICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuQW5hbHl6
ZXJCYW5uZXIuU2hvd2luZ1N0eWxlQ2xhc3NOYW1lKTsKKworICAgICAgICAgICAgZnVuY3Rpb24g
ZGVsYXllZFdvcmsoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9sZFRhcmdldEVs
ZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuTm9UcmFu
c2l0aW9uU3R5bGVDbGFzc05hbWUpOworICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xh
c3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuTm9UcmFuc2l0aW9uU3R5
bGVDbGFzc05hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEZWxheSBzbyB3
ZSBjYW4gcmVtb3ZlIHRoZSBubyB0cmFuc2l0aW9uIHN0eWxlIGNsYXNzIGFmdGVyIHRoZSBvdGhl
ciBzdHlsZSBjaGFuZ2VzIGFyZSBjb21taXR0ZWQuCisgICAgICAgICAgICBzZXRUaW1lb3V0KGRl
bGF5ZWRXb3JrLmJpbmQodGhpcyksIDApOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fdGFy
Z2V0RWxlbWVudCA9IGVsZW1lbnQgfHwgbnVsbDsKKworICAgICAgICBpZiAodGhpcy5fdGFyZ2V0
RWxlbWVudCkKKyAgICAgICAgICAgIHRoaXMuX3RhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmFkZChX
ZWJJbnNwZWN0b3IuQW5hbHl6ZXJCYW5uZXIuU3VwcG9ydHNBbmFseXplckJhbm5lclN0eWxlQ2xh
c3NOYW1lKTsKKyAgICB9LAorCisgICAgZ2V0IHNob3dpbmcoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFdlYkluc3BlY3Rvci5BbmFseXpl
ckJhbm5lci5TaG93aW5nU3R5bGVDbGFzc05hbWUpOworICAgIH0sCisKKyAgICBzaG93OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl90YXJnZXRFbGVtZW50
KTsKKyAgICAgICAgaWYgKCF0aGlzLl90YXJnZXRFbGVtZW50KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3RhcmdldEVsZW1lbnQucGFyZW50Tm9k
ZSk7CisgICAgICAgIGlmICghdGhpcy5fdGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUgIT09
IHRoaXMuX3RhcmdldEVsZW1lbnQucGFyZW50Tm9kZSkKKyAgICAgICAgICAgIHRoaXMuX3Rhcmdl
dEVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fZWxlbWVudCwgdGhpcy5fdGFy
Z2V0RWxlbWVudCk7CisKKyAgICAgICAgZnVuY3Rpb24gZGVsYXllZFdvcmsoKQorICAgICAgICB7
CisgICAgICAgICAgICB0aGlzLl90YXJnZXRFbGVtZW50LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVj
dG9yLkFuYWx5emVyQmFubmVyLlNob3dpbmdBbmFseXplckJhbm5lclN0eWxlQ2xhc3NOYW1lKTsK
KyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuQW5h
bHl6ZXJCYW5uZXIuU2hvd2luZ1N0eWxlQ2xhc3NOYW1lKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIERlbGF5IGFkZGluZyB0aGUgY2xhc3NlcyBpbiBjYXNlIHRoZSB0YXJnZXQgZWxlbWVudCBh
bmQvb3IgdGhlIGFuYWx5emVyIGJhbm5lciB3ZXJlIGp1c3QgYWRkZWQgdG8KKyAgICAgICAgLy8g
dGhlIGRvY3VtZW50LiBBZGRpbmcgdGhlIGNsYXNzIHJpZ2h0IGF3YXkgd2lsbCBwcmV2ZW50IHRo
ZSBhbmltYXRpb24gZnJvbSB3b3JraW5nIHRoZSBmaXJzIHRpbWUuCisgICAgICAgIHNldFRpbWVv
dXQoZGVsYXllZFdvcmsuYmluZCh0aGlzKSwgMCk7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLkV2ZW50LkRpZFNob3cp
OworICAgIH0sCisKKyAgICBjbGVhcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy50
YXJnZXRFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgdGhpcy5udW1iZXJPZk1lc3NhZ2VzID0gbnVs
bDsKKyAgICB9LAorCisgICAgaGlkZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5fdGFyZ2V0RWxlbWVudCk7CisgICAgICAgIGlmICghdGhpcy5fdGFyZ2V0
RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl90YXJnZXRFbGVt
ZW50LmNsYXNzTGlzdC5yZW1vdmUoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLlNob3dpbmdB
bmFseXplckJhbm5lclN0eWxlQ2xhc3NOYW1lKTsKKyAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFz
c0xpc3QucmVtb3ZlKFdlYkluc3BlY3Rvci5BbmFseXplckJhbm5lci5TaG93aW5nU3R5bGVDbGFz
c05hbWUpOworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5BbmFseXplckJhbm5lci5FdmVudC5EaWRIaWRlKTsKKyAgICB9LAorCisgICAgLy8gUHJp
dmF0ZQorCisgICAgX3ByZXZpb3VzUmVzdWx0QnV0dG9uQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQp
CisgICAgeworICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVn
YXRlLkFuYWx5emVyQmFubmVyUmV2ZWFsUHJldmlvdXNSZXN1bHQgPT09ICJmdW5jdGlvbiIpCisg
ICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5BbmFseXplckJhbm5lclJldmVhbFByZXZpb3VzUmVz
dWx0KHRoaXMpOworICAgIH0sCisKKyAgICBfbmV4dFJlc3VsdEJ1dHRvbkNsaWNrZWQ6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlICYmIHR5cGVvZiB0
aGlzLl9kZWxlZ2F0ZS5BbmFseXplckJhbm5lclJldmVhbE5leHRSZXN1bHQgPT09ICJmdW5jdGlv
biIpCisgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS5BbmFseXplckJhbm5lclJldmVhbE5leHRS
ZXN1bHQodGhpcyk7CisgICAgfSwKKworICAgIF9oYW5kbGVEb25lQnV0dG9uQ2xpY2tlZDogZnVu
Y3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLmhpZGUoKTsKKyAgICB9LAorCisgICAg
X2dlbmVyYXRlQnV0dG9uc0dseXBoc0lmTmVlZGVkOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBpZiAoV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyLl9nZW5lcmF0ZWRCdXR0b25zR2x5cGhz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYkluc3BlY3Rvci5BbmFseXplckJh
bm5lci5fZ2VuZXJhdGVkQnV0dG9uc0dseXBocyA9IHRydWU7CisKKyAgICAgICAgdmFyIHNwZWNp
ZmljYXRpb25zID0ge307CisgICAgICAgIHNwZWNpZmljYXRpb25zWyJub3JtYWwiXSA9IHtmaWxs
Q29sb3I6IFs4MSwgODEsIDgxXX07CisgICAgICAgIHNwZWNpZmljYXRpb25zWyJub3JtYWwtYWN0
aXZlIl0gPSB7ZmlsbENvbG9yOiBbMzcsIDM3LCAzN119OworCisgICAgICAgIHZhciBmb3J3YXJk
QXJyb3csIGJhY2tBcnJvdzsKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5QbGF0Zm9ybS5pc0xl
Z2FjeU1hY09TKSB7CisgICAgICAgICAgICBmb3J3YXJkQXJyb3cgPSB7c3JjOiAiSW1hZ2VzL0xl
Z2FjeS9Gb3J3YXJkQXJyb3cuc3ZnIiwgd2lkdGg6IDcsIGhlaWdodDogN307CisgICAgICAgICAg
ICBiYWNrQXJyb3cgPSB7c3JjOiAiSW1hZ2VzL0xlZ2FjeS9CYWNrQXJyb3cuc3ZnIiwgd2lkdGg6
IDcsIGhlaWdodDogN307CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3J3YXJkQXJy
b3cgPSB7c3JjOiAiSW1hZ2VzL0ZvcndhcmRBcnJvdy5zdmciLCB3aWR0aDogNywgaGVpZ2h0OiAx
MX07CisgICAgICAgICAgICBiYWNrQXJyb3cgPSB7c3JjOiAiSW1hZ2VzL0JhY2tBcnJvdy5zdmci
LCB3aWR0aDogNywgaGVpZ2h0OiAxMX07CisgICAgICAgIH0KKworICAgICAgICB2YXIgZ2VhciA9
IHtzcmM6ICJJbWFnZXMvR2Vhci5zdmciLCB3aWR0aDogMTYsIGhlaWdodDogMTZ9OworCisgICAg
ICAgIGdlbmVyYXRlQ29sb3JlZEltYWdlc0ZvckNTUyhiYWNrQXJyb3cuc3JjLCBzcGVjaWZpY2F0
aW9ucywgYmFja0Fycm93LndpZHRoLCBiYWNrQXJyb3cuaGVpZ2h0LCAiYW5hbHl6ZXItYmFubmVy
LXByZXZpb3VzLWFycm93LSIpOworICAgICAgICBnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1Mo
Zm9yd2FyZEFycm93LnNyYywgc3BlY2lmaWNhdGlvbnMsIGZvcndhcmRBcnJvdy53aWR0aCwgZm9y
d2FyZEFycm93LmhlaWdodCwgImFuYWx5emVyLWJhbm5lci1uZXh0LWFycm93LSIpOworICAgICAg
ICBnZW5lcmF0ZUNvbG9yZWRJbWFnZXNGb3JDU1MoZ2Vhci5zcmMsIHNwZWNpZmljYXRpb25zLCBn
ZWFyLndpZHRoLCBnZWFyLmhlaWdodCwgImFuYWx5emVyLWJhbm5lci1nZWFyLSIpOworICAgIH0K
K307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Db250ZW50QnJvd3Nlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0NvbnRlbnRCcm93c2VyLmpzCmluZGV4IDNjYzNkNGQuLjlhNzI0NDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnRlbnRCcm93
c2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0Nv
bnRlbnRCcm93c2VyLmpzCkBAIC00Miw2ICs0Miw4IEBAIFdlYkluc3BlY3Rvci5Db250ZW50QnJv
d3NlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIGRlbGVnYXRlLCBkaXNhYmxlQmFja0ZvcndhcmQpCiAg
ICAgdGhpcy5fZmluZEJhbm5lci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5GaW5kQmFu
bmVyLkV2ZW50LkRpZFNob3csIHRoaXMuX2ZpbmRCYW5uZXJEaWRTaG93LCB0aGlzKTsKICAgICB0
aGlzLl9maW5kQmFubmVyLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkZpbmRCYW5uZXIu
RXZlbnQuRGlkSGlkZSwgdGhpcy5fZmluZEJhbm5lckRpZEhpZGUsIHRoaXMpOwogCisgICAgdGhp
cy5fYW5hbHl6ZXJCYW5uZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkFuYWx5emVyQmFubmVyKHRoaXMp
OworCiAgICAgdGhpcy5fc2F2ZUtleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQoV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuQ29t
bWFuZE9yQ29udHJvbCwgIlMiLCB0aGlzLl9zYXZlLmJpbmQodGhpcykpOwogICAgIHRoaXMuX3Nh
dmVBc0tleWJvYXJkU2hvcnRjdXQgPSBuZXcgV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQo
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuTW9kaWZpZXIuU2hpZnQgfCBXZWJJbnNwZWN0
b3IuS2V5Ym9hcmRTaG9ydGN1dC5Nb2RpZmllci5Db21tYW5kT3JDb250cm9sLCAiUyIsIHRoaXMu
X3NhdmVBcy5iaW5kKHRoaXMpKTsKIApAQCAtMjY4LDYgKzI3MCwxNyBAQCBXZWJJbnNwZWN0b3Iu
Q29udGVudEJyb3dzZXIucHJvdG90eXBlID0gewogICAgICAgICBjdXJyZW50Q29udGVudFZpZXcu
cmV2ZWFsTmV4dFNlYXJjaFJlc3VsdCghZmluZEJhbm5lci5zaG93aW5nKTsKICAgICB9LAogCisg
ICAgYWN0aXZhdGVBbmFseXplckJhbm5lcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5fdXBkYXRlQW5hbHl6ZXJCYW5uZXIodGhpcy5jb250ZW50Vmlld0NvbnRhaW5lci5jdXJyZW50
Q29udGVudFZpZXcpOworICAgICAgICB0aGlzLl9hbmFseXplckJhbm5lci5zaG93KCk7CisgICAg
fSwKKworICAgIGRlYWN0aXZhdGVBbmFseXplckJhbm5lcjogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fYW5hbHl6ZXJCYW5uZXIuaGlkZSgpOworICAgIH0sCisKICAgICAvLyBQcml2
YXRlCiAKICAgICBfYmFja0J1dHRvbkNsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtNDUzLDYg
KzQ2NiwxNyBAQCBXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlID0gewogICAg
ICAgICB9CiAgICAgfSwKIAorICAgIF91cGRhdGVBbmFseXplckJhbm5lcjogZnVuY3Rpb24oY3Vy
cmVudENvbnRlbnRWaWV3KQorICAgIHsKKyAgICAgICAgaWYgKCFjdXJyZW50Q29udGVudFZpZXcp
IHsKKyAgICAgICAgICAgIHRoaXMuX2FuYWx5emVyQmFubmVyLmNsZWFyKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9hbmFseXplckJhbm5lci50YXJn
ZXRFbGVtZW50ID0gY3VycmVudENvbnRlbnRWaWV3LmVsZW1lbnQ7CisgICAgICAgIHRoaXMuX2Fu
YWx5emVyQmFubmVyLm51bWJlck9mUmVzdWx0cyA9IG51bGw7IC8vIFRPRE86IGNoYW5nZSB0byBh
Y3R1YWwgdmFsdWUuCisgICAgfSwKKwogICAgIF9kaXNwYXRjaEN1cnJlbnRSZXByZXNlbnRlZE9i
amVjdHNEaWRDaGFuZ2VFdmVudFNvb246IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlmICh0
aGlzLl9jdXJyZW50UmVwcmVzZW50ZWRPYmplY3RzRGlkQ2hhbmdlVGltZW91dCkKQEAgLTUwMyw2
ICs1MjcsNyBAQCBXZWJJbnNwZWN0b3IuQ29udGVudEJyb3dzZXIucHJvdG90eXBlID0gewogCiAg
ICAgICAgIHRoaXMuX3VwZGF0ZUNvbnRlbnRWaWV3TmF2aWdhdGlvbkl0ZW1zKCk7CiAgICAgICAg
IHRoaXMuX3VwZGF0ZUZpbmRCYW5uZXIoY3VycmVudENvbnRlbnRWaWV3KTsKKyAgICAgICAgdGhp
cy5fdXBkYXRlQW5hbHl6ZXJCYW5uZXIoY3VycmVudENvbnRlbnRWaWV3KTsKIAogICAgICAgICB0
aGlzLl9uYXZpZ2F0aW9uQmFyLnVwZGF0ZUxheW91dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MaW5lTWFya2VyLmNzcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xpbmVNYXJrZXIuY3NzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzNlMGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MaW5lTWFya2VyLmNz
cwpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworIC5saW5lLW1hcmtlciB7CisgICAgIGNv
bnRlbnQ6IHVybCguLi9JbWFnZXMvV2FybmluZy5zdmcpOworICAgICB3aWR0aDogMTZweDsKKyAg
ICAgaGVpZ2h0OiAxNnB4OworIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0xpbmVNYXJrZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9MaW5lTWFya2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQwMGYwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MaW5lTWFya2VyLmpzCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuTGluZU1hcmtlciA9IGZ1bmN0aW9uKHRleHRFZGl0
b3IsIGxpbmUsIHR5cGUpCit7CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOwor
CisgICAgdGhpcy5fdGV4dEVkaXRvciA9IHRleHRFZGl0b3I7CisgICAgdGhpcy5fbGluZSA9IGxp
bmU7CisgICAgdGhpcy5fdHlwZSA9IHR5cGU7CisKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKKworICAgIHRoaXMuZWxlbWVudCA9IHNwYW47CisgICAgdGhp
cy5lbGVtZW50LnRleHRDb250ZW50ID0gTWFya2VyOworCisgICAgc3Bhbi5jbGFzc0xpc3QuYWRk
KCJsaW5lLW1hcmtlciIpOworICAgIHRoaXMuX3N0eWxlQ2xhc3MgPSBXZWJJbnNwZWN0b3IuTGlu
ZU1hcmtlci5TdHlsZUNsYXNzRm9yVHlwZVtNYXJrZXIudHlwZV07CisgICAgdGhpcy5lbGVtZW50
LmNsYXNzTGlzdC5hZGQodGhpcy5fc3R5bGVDbGFzcyk7Cit9OworCitXZWJJbnNwZWN0b3IuTGlu
ZU1hcmtlci5TdHlsZUNsYXNzRm9yVHlwZSA9IHsKKyAgICAid2FybmluZyI6ICJsaW5lLW1hcmtl
ci13YXJuaW5nIiwKKyAgICAiZXJyb3IiOiAibGluZS1tYXJrZXItZXJyb3IiCit9OworCitXZWJJ
bnNwZWN0b3IuTGluZU1hcmtlci5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYklu
c3BlY3Rvci5MaW5lTWFya2VyLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5w
cm90b3R5cGUKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9MaW5lTWVzc2FnZS5jc3MgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9MaW5lTWVzc2FnZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMzM3NDc5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xpbmVNZXNzYWdlLmNzcwpAQCAtMCwwICsxLDI0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0xpbmVNZXNzYWdlLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvTGluZU1lc3NhZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uY2QxZjA0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL0xpbmVNZXNzYWdlLmpzCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCitXZWJJbnNwZWN0b3IuTGluZU1lc3NhZ2UgPSBmdW5jdGlvbih0ZXh0RWRpdG9yLCBsaW5l
LCB0ZXh0LCB0eXBlKQoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKwor
ICAgIHRoaXMuX3RleHRFZGl0b3IgPSB0ZXh0RWRpdG9yOworICAgIHRoaXMuX2xpbmUgPSBsaW5l
OworICAgIHRoaXMuX3R5cGUgPSB0eXBlOworCisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7CisgICAgdGhpcy5lbGVtZW50ID0gc3BhbjsKKworICAgIHRoaXMu
X3RleHQgPSB0aGlzLmVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OworICAgIHNwYW4uY2xhc3NM
aXN0LmFkZCgibGluZS1tZXNzYWdlIik7CisgICAgdGhpcy5fY29sb3JDbGFzcyA9IFdlYkluc3Bl
Y3Rvci5MaW5lTWVzc2FnZS5TdHlsZUNsYXNzRm9yVHlwZVttZXNzYWdlLnR5cGVdOworICAgIHRo
aXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuX2NvbG9yQ2xhc3MpOworfTsKKworV2ViSW5z
cGVjdG9yLkxpbmVNZXNzYWdlLlN0eWxlQ2xhc3NGb3JUeXBlID0geworICAgICJ3YXJuaW5nIjog
ImxpbmUtbWVzc2FnZS13YXJuaW5nIiwKKyAgICAiZXJyb3IiOiAibGluZS1tZXNzYWdlLWVycm9y
IgorfTsKKworV2ViSW5zcGVjdG9yLkxpbmVNZXNzYWdlLnByb3RvdHlwZSA9IHsKKyAgICBjb25z
dHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkxpbmVNZXNzYWdlLAorICAgIF9fcHJvdG9fXzogV2ViSW5z
cGVjdG9yLk9iamVjdC5wcm90b3R5cGUKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MaW5lTWVzc2FnZUdyb3VwLmNzcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xpbmVNZXNzYWdlR3JvdXAuY3NzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTA1ZDMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MaW5lTWVzc2Fn
ZUdyb3VwLmNzcwpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLmxpbmUtbWVzc2FnZS1n
cm91cCB7CisgICAgZmxvYXQ6IHJpZ2h0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGluZU1lc3NhZ2VHcm91cC5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xpbmVNZXNzYWdlR3JvdXAuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZhYTdhNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xpbmVNZXNzYWdl
R3JvdXAuanMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5MaW5l
TWVzc2FnZUdyb3VwID0gZnVuY3Rpb24oc291cmNlQ29kZUFuYWx5emVyLCBhbmFseXplck1hcmtl
cikKK3sKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisKKyAgICB2YXIgc3Bh
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBzcGFuLmNsYXNzTGlzdC5h
ZGQoImxpbmUtbWVzc2FnZS1ncm91cCIpOworCisgICAgdGhpcy5lbGVtZW50ID0gc3BhbjsKKyAg
ICB0aGlzLl9zb3VyY2VDb2RlQW5hbHl6ZXIgPSBzb3VyY2VDb2RlQW5hbHl6ZXI7CisKKyAgICB0
aGlzLl9zdHlsZUNsYXNzID0gV2ViSW5zcGVjdG9yLkxpbmVNZXNzYWdlR3JvdXAuU3R5bGVDbGFz
c0ZvclR5cGVbbWVzc2FnZS50eXBlXTsKKyAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0
aGlzLl9jb2xvckNsYXNzKTsKK307CisKK1dlYkluc3BlY3Rvci5MaW5lTWVzc2FnZUdyb3VwLlN0
eWxlQ2xhc3NGb3JUeXBlID0geworICAgICJ3YXJuaW5nIjogImxpbmUtbWVzc2FnZS13YXJuaW5n
IiwKKyAgICAiZXJyb3IiOiAibGluZS1tZXNzYWdlLWVycm9yIgorfTsKKworV2ViSW5zcGVjdG9y
LkxpbmVNZXNzYWdlR3JvdXAucHJvdG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNw
ZWN0b3IuTGluZU1lc3NhZ2VHcm91cCwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmpl
Y3QucHJvdG90eXBlCit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU2NyaXB0Q29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9TY3JpcHRDb250ZW50Vmlldy5qcwppbmRleCBmMjcxOTBl
Li44ZjE5MzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9TY3JpcHRDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9TY3JpcHRDb250ZW50Vmlldy5qcwpAQCAtNjYsNiArNjYsMTMg
QEAgV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3ID0gZnVuY3Rpb24oc2NyaXB0KQogICAg
IHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQsIHRoaXMuX3RvZ2ds
ZVR5cGVBbm5vdGF0aW9ucywgdGhpcyk7CiAgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdh
dGlvbkl0ZW0uZW5hYmxlZCA9IGZhbHNlOwogCisgICAgdmFyIHRvZ2dsZUFuYWx5emVySW1hZ2VT
aXplID0gV2ViSW5zcGVjdG9yLlBsYXRmb3JtLmlzTGVnYWN5TWFjT1MgPyAxNSA6IDE2OworICAg
IHZhciB0b29sVGlwQW5hbHl6ZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlNob3cgYW5hbHl6
ZXIgaW5mb3JtYXRpb24iKTsKKyAgICB2YXIgYWN0aXZhdGVkVG9vbFRpcEFuYWx5emVyID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJIaWRlIGFuYWx5emVyIGluZm9ybWF0aW9uIik7CisgICAgdGhp
cy5fdG9nZ2xlQW5hbHl6ZXJCdXR0b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3Iu
QWN0aXZhdGVCdXR0b25OYXZpZ2F0aW9uSXRlbSgidG9nZ2xlLWFuYWx5emVyIiwgdG9vbFRpcEFu
YWx5emVyLCBhY3RpdmF0ZWRUb29sVGlwQW5hbHl6ZXIsICJJbWFnZXMvQ2hlY2ttYXJrLnN2ZyIs
IHRvZ2dsZUFuYWx5emVySW1hZ2VTaXplLCB0b2dnbGVBbmFseXplckltYWdlU2l6ZSk7CisgICAg
dGhpcy5fdG9nZ2xlQW5hbHl6ZXJCdXR0b25OYXZpZ2F0aW9uSXRlbS5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5CdXR0b25OYXZpZ2F0aW9uSXRlbS5FdmVudC5DbGlja2VkLCB0aGlzLl90
b2dnbGVBbmFseXplciwgdGhpcyk7CisgICAgdGhpcy5fdG9nZ2xlQW5hbHl6ZXJCdXR0b25OYXZp
Z2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7CisKICAgICBXZWJJbnNwZWN0b3Iuc2hvd0phdmFT
Y3JpcHRUeXBlSW5mb3JtYXRpb25TZXR0aW5nLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LlNldHRpbmcuRXZlbnQuQ2hhbmdlZCwgdGhpcy5fc2hvd0phdmFTY3JpcHRUeXBlSW5mb3JtYXRp
b25TZXR0aW5nQ2hhbmdlZCwgdGhpcyk7CiB9OwogCkBAIC03OCw3ICs4NSw3IEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBnZXQgbmF2aWdhdGlv
bkl0ZW1zKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25O
YXZpZ2F0aW9uSXRlbSwgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW1dOworICAg
ICAgICByZXR1cm4gW3RoaXMuX3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0sIHRoaXMu
X3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLCB0aGlzLl90b2dnbGVBbmFseXplckJ1dHRv
bk5hdmlnYXRpb25JdGVtXTsKICAgICB9LAogCiAgICAgZ2V0IHNjcmlwdCgpCkBAIC0yMTQsNiAr
MjIxLDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdENvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gdGhp
cy5fdGV4dEVkaXRvci5jYW5CZUZvcm1hdHRlZCgpOwogICAgICAgICB0aGlzLl9zaG93VHlwZXNC
dXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5TaG93VHlw
ZUFubm90YXRpb25zKCk7CiAgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25J
dGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlv
blNldHRpbmcudmFsdWU7CisgICAgICAgIHRoaXMuX3RvZ2dsZUFuYWx5emVyQnV0dG9uTmF2aWdh
dGlvbkl0ZW0uZW5hYmxlZCA9IHRoaXMuX3RvZ2dsZUFuYWx5emVyQnV0dG9uTmF2aWdhdGlvbkl0
ZW0uYWN0aXZhdGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5CZUFuYWx5emVkKCk7CiAgICAgfSwK
IAogICAgIF90b2dnbGVQcmV0dHlQcmludDogZnVuY3Rpb24oZXZlbnQpCkBAIC0yMjcsNiArMjM1
LDExIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50Vmlldy5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMuX3RleHRFZGl0b3IudG9nZ2xlVHlwZUFubm90YXRpb25zKCk7CiAgICAgfSwKIAor
ICAgIF90b2dnbGVBbmFseXplcjogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB0aGlz
Ll90ZXh0RWRpdG9yLnRvZ2dsZUFuYWx5emVyKCk7CisgICAgfSwKKwogICAgIF9zaG93SmF2YVNj
cmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmdDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7
CiAgICAgICAgIHRoaXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9
IFdlYkluc3BlY3Rvci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9T
b3VyY2VDb2RlVGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCmluZGV4IDVmMTBmZDcuLmU3ODUxNzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Nv
dXJjZUNvZGVUZXh0RWRpdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCkBAIC03MCw2ICs3MCw4IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciA9IGZ1bmN0aW9uKHNvdXJjZUNvZGUpCiAg
ICAgZWxzZQogICAgICAgICB0aGlzLl9zb3VyY2VDb2RlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuU291cmNlTWFwQWRkZWQsIHRoaXMuX3NvdXJjZUNvZGVT
b3VyY2VNYXBBZGRlZCwgdGhpcyk7CiAKKyAgICB0aGlzLl9zb3VyY2VDb2RlLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUuRXZlbnQuQ29udGVudERpZENoYW5nZSwgdGhp
cy5fc291cmNlQ29kZUNvbnRlbnREaWRDaGFuZ2UsIHRoaXMpOworCiAgICAgc291cmNlQ29kZS5y
ZXF1ZXN0Q29udGVudCh0aGlzLl9jb250ZW50QXZhaWxhYmxlLmJpbmQodGhpcykpOwogCiAgICAg
Ly8gRklYTUU6IENtZCtMIHNob3JjdXQgZG9lc24ndCBhY3R1YWxseSB3b3JrLgpAQCAtMTIwLDcg
KzEyMiw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucmVtb3ZlSGlnaGxpZ2h0ZWRS
YW5nZSgpOwogCiAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7Ci0gICAgICAgIAorCiAg
ICAgICAgIHRoaXMuX2Rpc21pc3NFZGl0aW5nQ29udHJvbGxlcih0cnVlKTsKIAogICAgICAgICBp
ZiAodGhpcy5fdHlwZVRva2VuQW5ub3RhdG9yKQpAQCAtMjc1LDYgKzI3NywxOCBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4g
aXNBY3RpdmF0ZWQ7CiAgICAgfSwKIAorICAgIHRvZ2dsZUFuYWx5emVyOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMuX2FuYWx5emVySXNBY3RpdmUpIHsKKyAgICAgICAgICAg
IHRoaXMuX2FuYWx5emUoKTsKKyAgICAgICAgICAgIHRoaXMuX2FuYWx5emVySXNBY3RpdmUgPSB0
cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fdW5h
bmFseXplKCk7CisgICAgICAgIHRoaXMuX2FuYWx5emVySXNBY3RpdmUgPSBmYWxzZTsKKyAgICB9
LAorCiAgICAgc2hvd1BvcG92ZXJGb3JUeXBlczogZnVuY3Rpb24odHlwZXMsIGJvdW5kcywgdGl0
bGUpCiAgICAgewogICAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwpAQCAtMzk5LDYgKzQxMywyOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAorICAgIF9wb3B1bGF0ZUlz
c3VlczogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5faXNzdWVzTGluZU51bWJlck1h
cCA9IHt9OworCisgICAgICAgIHZhciBpc3N1ZXMgPSBXZWJJbnNwZWN0b3IuaXNzdWVNYW5hZ2Vy
Lmlzc3Vlc0ZvclNvdXJjZUNvZGUodGhpcy5fc291cmNlQ29kZSk7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgaXNzdWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgaXNzdWUg
PSBpc3N1ZXNbaV07CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9tYXRjaGVzSXNz
dWUoaXNzdWUpKTsKKyAgICAgICAgICAgIHRoaXMuX2FkZElzc3VlKGlzc3VlKTsKKyAgICAgICAg
fQorICAgIH0sCisKKyAgICBfYW5hbHl6ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLmFuYWx5emVyTWFuYWdlci5hbmFseXplck1lc3NhZ2VzRm9yU291cmNlQ29kZSh0
aGlzLl9zb3VyY2VDb2RlLCB0aGlzLl9hbmFseXplck1lc3NhZ2VzV2VyZUFkZGVkLmJpbmQodGhp
cykpOworICAgIH0sCisKKyAgICBfdW5hbmFseXplOiBmdW5jdGlvbigpCisgICAgeworCisgICAg
fSwKKwogICAgIF9jb250ZW50RGlkUG9wdWxhdGU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAg
IHRoaXMuX2NvbnRlbnRQb3B1bGF0ZWQgPSB0cnVlOwpAQCAtNDA4LDE5ICs0NDQsMjYgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8g
V2UgYWRkIHRoZSBpc3N1ZXMgZWFjaCB0aW1lIGNvbnRlbnQgaXMgcG9wdWxhdGVkLiBUaGlzIGlz
IG5lZWRlZCBiZWNhdXNlIGxpbmVzIG1pZ2h0IG5vdCBleGlzdAogICAgICAgICAvLyBpZiB3ZSB0
cmllZCBhZGRlZCB0aGVtIGJlZm9yZSB3aGVuIHRoZSBmdWxsIGNvbnRlbnQgd2Fzbid0IGF2YWlh
YmxlLiAoV2hlbiBwb3B1bGF0aW5nIHdpdGgKICAgICAgICAgLy8gcGFydGlhbCBzY3JpcHQgY29u
dGVudCB0aGlzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuKQorICAgICAgICB0aGlzLl9w
b3B1bGF0ZUlzc3VlcygpOwogCi0gICAgICAgIHRoaXMuX2lzc3Vlc0xpbmVOdW1iZXJNYXAgPSB7
fTsKLQotICAgICAgICB2YXIgaXNzdWVzID0gV2ViSW5zcGVjdG9yLmlzc3VlTWFuYWdlci5pc3N1
ZXNGb3JTb3VyY2VDb2RlKHRoaXMuX3NvdXJjZUNvZGUpOwotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGlzc3Vlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgdmFyIGlzc3VlID0gaXNz
dWVzW2ldOwotICAgICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fbWF0Y2hlc0lzc3VlKGlz
c3VlKSk7Ci0gICAgICAgICAgICB0aGlzLl9hZGRJc3N1ZShpc3N1ZSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKHRoaXMuX2FuYWx5emVySXNBY3RpdmUpCisgICAgICAgICAgICB0aGlzLl9hbmFs
eXplKCk7CiAKICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJrZXJzKCk7CiAgICAgfSwK
IAorICAgIGdldCBjYW5CZUFuYWx5emVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9z
b3VyY2VDb2RlLmNhbkJlQW5hbHl6ZWQ7CisgICAgfSwKKworICAgIGdldCBhbmFseXplcklzQWN0
aXZlKCkKKyAgICB7CisgICAgICAgIC8vIE5lZWQgdGhpcyBiZWNhdXNlIHlvdSBuZWVkIHRvIGRl
dGVybWluZSBpZiB3ZSBuZWVkIHRvIHJlcXVlc3QgYSBuZXcKKyAgICAgICAgLy8gYW5hbHlzZXMg
d2hlbmV2ZXIgdGhpcyBjb2RlIGlzIHVwZGF0ZWQKKyAgICAgICAgcmV0dXJuICEhdGhpcy5fYW5h
bHl6ZXJJc0FjdGl2ZTsKKyAgICB9LAorCiAgICAgX3BvcHVsYXRlV2l0aENvbnRlbnQ6IGZ1bmN0
aW9uKGNvbnRlbnQpCiAgICAgewogICAgICAgICBjb250ZW50ID0gY29udGVudCB8fCAiIjsKQEAg
LTc2NSw2ICs4MDgsMTMgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5fYWRkSXNzdWUoaXNzdWUpOwogICAgIH0sCiAKKyAgICBf
YW5hbHl6ZXJNZXNzYWdlc1dlcmVBZGRlZDogZnVuY3Rpb24oYW5hbHl6ZXJNZXNzYWdlcykKKyAg
ICB7CisgICAgICAgIGZvciAoYW5hbHl6ZXJNZXNzYWdlIGluIGFuYWx5emVyTWVzc2FnZXMpIHsK
KyAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIG1lc3NhZ2VzLCB3ZSBuZWVkIHRv
IHVwZGF0ZSB0aGUgVUkgd2l0aCB3aWRnZXRzLCBldGMuCisgICAgICAgIH0KKyAgICB9LAorCiAg
ICAgX2FkZElzc3VlOiBmdW5jdGlvbihpc3N1ZSkKICAgICB7CiAgICAgICAgIHZhciBsaW5lTnVt
YmVySXNzdWVzID0gdGhpcy5faXNzdWVzTGluZU51bWJlck1hcFtpc3N1ZS5saW5lTnVtYmVyXTsK
QEAgLTEwNTksNiArMTEwOSwxMSBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxl
clN0YXRlKCk7CiAgICAgfSwKIAorICAgIF9zb3VyY2VDb2RlQ29udGVudERpZENoYW5nZTogZnVu
Y3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICAvLyBUT0RPOiBXZSB3aWxsIGNvYWxlc2NlIGNo
YW5nZXMgYW5kIHNldCBhIHRpbWVyIHN1Y2ggdGhhdCBhZnRlciBhIGNvdXBsZSBzZWNvbmRzIGlm
IGVkaXRpbmcgaW5hY3Rpdml0eSB3ZSB3aWxsIGNhbGwgdGhlIEFuYWx5emVyTWFuYWdlciBhZ2Fp
bi4KKyAgICB9LAorCiAgICAgX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGU6IGZ1
bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHZhciBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLk5vbmU7CkBAIC0xMTkxLDcgKzEyNDYsNyBA
QCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb24oZGF0YSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJvYmplY3QiOgotICAgICAgICAgICAgICAg
IGlmIChkYXRhLnN1YnR5cGUgPT09ICJyZWdleHAiKSAKKyAgICAgICAgICAgICAgICBpZiAoZGF0
YS5zdWJ0eXBlID09PSAicmVnZXhwIikKICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd1Bv
cG92ZXJGb3JSZWdFeHAoZGF0YSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckZvck9iamVjdChkYXRhKTsKQEAgLTE0MTEsNyArMTQ2
Niw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAK
ICAgICBfdHJhY2tQb3BvdmVyRXZlbnRzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBpZiAo
IXRoaXMuX3BvcG92ZXJFdmVudExpc3RlbmVycykgCisgICAgICAgIGlmICghdGhpcy5fcG9wb3Zl
ckV2ZW50TGlzdGVuZXJzKQogICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckV2ZW50TGlzdGVuZXJz
ID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2V0KHRoaXMsICJQb3BvdmVyIGxpc3Rl
bmVycyIpOwogICAgICAgICBpZiAoIXRoaXMuX3BvcG92ZXJFdmVudExpc3RlbmVyc0FyZVJlZ2lz
dGVyZWQpIHsKICAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJFdmVudExpc3RlbmVyc0FyZVJlZ2lz
dGVyZWQgPSB0cnVlOwpAQCAtMTQ4MiwxMyArMTUzNywxMyBAQCBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2Vk
aXRpbmdDb250cm9sbGVyKQogICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0NvbnRyb2xsZXIuZGlz
bWlzc0hvdmVyTWVudShkaXNjcmV0ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIHRoaXMudG9rZW5U
cmFja2luZ0NvbnRyb2xsZXIuaG92ZXJlZE1hcmtlciA9IG51bGw7CiAgICAgICAgIGRlbGV0ZSB0
aGlzLl9lZGl0aW5nQ29udHJvbGxlcjsKICAgICB9LAogCiAgICAgLy8gQ29kZU1pcnJvckVkaXRp
bmdDb250cm9sbGVyIERlbGVnYXRlCi0gICAgCisKICAgICBlZGl0aW5nQ29udHJvbGxlckRpZFN0
YXJ0RWRpdGluZzogZnVuY3Rpb24oZWRpdGluZ0NvbnRyb2xsZXIpCiAgICAgewogICAgICAgICAv
LyBXZSBjYW4gcGF1c2UgdGhlIHRva2VuIHRyYWNraW5nIGNvbnRyb2xsZXIgZHVyaW5nIGVkaXRp
bmcsIGl0IHdpbGwgYmUgcmVzZXQKQEAgLTE0OTgsMTEgKzE1NTMsMTEgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKIAogICAgICAgICAvLyBXZSBjbGVh
ciB0aGUgbWFya2VyIHNpbmNlIHdlJ2xsIHJlc2V0IGl0IGFmdGVyIGVkaXRpbmcuCiAgICAgICAg
IGVkaXRpbmdDb250cm9sbGVyLm1hcmtlci5jbGVhcigpOwotICAgICAgICAKKwogICAgICAgICAv
LyBXZSBpZ25vcmUgY29udGVudCBjaGFuZ2VzIG1hZGUgYXMgYSByZXN1bHQgb2YgY29sb3IgZWRp
dGluZy4KICAgICAgICAgdGhpcy5faWdub3JlQ29udGVudERpZENoYW5nZSsrOwogICAgIH0sCi0g
ICAgCisKICAgICBlZGl0aW5nQ29udHJvbGxlckRpZEZpbmlzaEVkaXRpbmc6IGZ1bmN0aW9uKGVk
aXRpbmdDb250cm9sbGVyKQogICAgIHsKICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJr
ZXJzKGVkaXRpbmdDb250cm9sbGVyLnJhbmdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5qcwppbmRl
eCA4ODUxM2YzLi45YzZhMzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9UZXh0Q29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dENvbnRlbnRWaWV3LmpzCkBAIC01NSw2ICs1
NSwxMiBAQCBXZWJJbnNwZWN0b3IuVGV4dENvbnRlbnRWaWV3ID0gZnVuY3Rpb24oc3RyaW5nLCBt
aW1lVHlwZSkKICAgICB2YXIgYWN0aXZhdGVkVG9vbFRpcFR5cGVzID0gV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJIaWRlIHR5cGUgaW5mb3JtYXRpb24iKTsKICAgICB0aGlzLl9zaG93VHlwZXNCdXR0
b25OYXZpZ2F0aW9uSXRlbSA9IG5ldyBXZWJJbnNwZWN0b3IuQWN0aXZhdGVCdXR0b25OYXZpZ2F0
aW9uSXRlbSgic2hvdy10eXBlcyIsIHRvb2xUaXBUeXBlcywgYWN0aXZhdGVkVG9vbFRpcFR5cGVz
LCAiSW1hZ2VzL05hdmlnYXRpb25JdGVtVHlwZXMuc3ZnIiwgMTMsIDE0KTsKICAgICB0aGlzLl9z
aG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7CisKKyAgICB2YXIg
dG9nZ2xlQW5hbHl6ZXJJbWFnZVNpemUgPSBXZWJJbnNwZWN0b3IuUGxhdGZvcm0uaXNMZWdhY3lN
YWNPUyA/IDE1IDogMTY7CisgICAgdmFyIHRvb2xUaXBBbmFseXplciA9IFdlYkluc3BlY3Rvci5V
SVN0cmluZygiU2hvdyBhbmFseXplciBpbmZvcm1hdGlvbiIpOworICAgIHZhciBhY3RpdmF0ZWRU
b29sVGlwQW5hbHl6ZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgYW5hbHl6ZXIgaW5m
b3JtYXRpb24iKTsKKyAgICB0aGlzLl90b2dnbGVBbmFseXplckJ1dHRvbk5hdmlnYXRpb25JdGVt
ID0gbmV3IFdlYkluc3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJ0b2dnbGUt
YW5hbHl6ZXIiLCB0b29sVGlwQW5hbHl6ZXIsIGFjdGl2YXRlZFRvb2xUaXBBbmFseXplciwgIklt
YWdlcy9DaGVja21hcmsuc3ZnIiwgMTMsIDE0KTsKKyAgICB0aGlzLl90b2dnbGVBbmFseXplckJ1
dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSBmYWxzZTsKIH07CiAKIFdlYkluc3BlY3Rvci5U
ZXh0Q29udGVudFZpZXcuU3R5bGVDbGFzc05hbWUgPSAidGV4dCI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0RWRpdG9yLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qcwppbmRl
eCAwNGRkYmFlLi5iYjUyZWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9UZXh0RWRpdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRFZGl0b3IuanMKQEAgLTMyLDcgKzMyLDcgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3IgPSBmdW5jdGlvbihlbGVtZW50LCBtaW1lVHlwZSwgZGVsZWdh
dGUpCiAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rvci5UZXh0RWRp
dG9yLlN0eWxlQ2xhc3NOYW1lKTsKICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoV2Vi
SW5zcGVjdG9yLlN5bnRheEhpZ2hsaWdodGVkU3R5bGVDbGFzc05hbWUpOwogCi0gICAgdGhpcy5f
Y29kZU1pcnJvciA9IENvZGVNaXJyb3IodGhpcy5lbGVtZW50LCB7CisgICAgdGhpcy5fY29kZU1p
cnJvciA9IG5ldyBDb2RlTWlycm9yKHRoaXMuZWxlbWVudCwgewogICAgICAgICByZWFkT25seTog
dHJ1ZSwKICAgICAgICAgaW5kZW50V2l0aFRhYnM6IHRydWUsCiAgICAgICAgIGluZGVudFVuaXQ6
IDQsCkBAIC0yMDMsNiArMjAzLDE2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCiAKKyAgICBjYW5CZUFuYWx5emVk
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2UKKyAgICB9LAorCisgICAg
Z2V0IGFuYWx5emVySXNBY3RpdmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0sCisKICAgICBnZXQgc2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIHsKICAgICAgICAgdmFyIHN0
YXJ0ID0gdGhpcy5fY29kZU1pcnJvci5nZXRDdXJzb3IodHJ1ZSk7CkBAIC02OTQsNiArNzA0LDEx
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJu
IHRoaXMuX2NvZGVNaXJyb3IuZ2V0RG9jKCkuaW5kZXhGcm9tUG9zKHBvc2l0aW9uKTsKICAgICB9
LAogCisgICAgYWRkTGluZVdpZGdldDogZnVuY3Rpb24obGluZSwgZWxlbWVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9jb2RlTWlycm9yLmFkZExpbmVXaWRnZXQobGluZSwgZWxlbWVu
dCk7CisgICAgfSwKKwogICAgIHNldElubGluZVdpZGdldDogZnVuY3Rpb24ocG9zaXRpb24sIGlu
bGluZUVsZW1lbnQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fY29kZU1pcnJvci5zZXRV
bmlxdWVCb29rbWFyayhwb3NpdGlvbiwge3dpZGdldDogaW5saW5lRWxlbWVudH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dFJlc291
cmNlQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9W
aWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwppbmRleCAxNzI4NzM0Li45MjFhMzVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0
UmVzb3VyY2VDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcwpAQCAtNTgsNiArNTgsMTMg
QEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3ID0gZnVuY3Rpb24ocmVzb3Vy
Y2UpCiAgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuQnV0dG9uTmF2aWdhdGlvbkl0ZW0uRXZlbnQuQ2xpY2tlZCwgdGhp
cy5fdG9nZ2xlVHlwZUFubm90YXRpb25zLCB0aGlzKTsKICAgICB0aGlzLl9zaG93VHlwZXNCdXR0
b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gZmFsc2U7CiAKKyAgICB2YXIgdG9nZ2xlQW5hbHl6
ZXJJbWFnZVNpemUgPSBXZWJJbnNwZWN0b3IuUGxhdGZvcm0uaXNMZWdhY3lNYWNPUyA/IDE1IDog
MTY7CisgICAgdmFyIHRvb2xUaXBBbmFseXplciA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2hv
dyBhbmFseXplciBpbmZvcm1hdGlvbiIpOworICAgIHZhciBhY3RpdmF0ZWRUb29sVGlwQW5hbHl6
ZXIgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkhpZGUgYW5hbHl6ZXIgaW5mb3JtYXRpb24iKTsK
KyAgICB0aGlzLl90b2dnbGVBbmFseXplckJ1dHRvbk5hdmlnYXRpb25JdGVtID0gbmV3IFdlYklu
c3BlY3Rvci5BY3RpdmF0ZUJ1dHRvbk5hdmlnYXRpb25JdGVtKCJ0b2dnbGUtYW5hbHl6ZXIiLCB0
b29sVGlwQW5hbHl6ZXIsIGFjdGl2YXRlZFRvb2xUaXBBbmFseXplciwgIkltYWdlcy9DaGVja21h
cmsuc3ZnIiwgdG9nZ2xlQW5hbHl6ZXJJbWFnZVNpemUsIHRvZ2dsZUFuYWx5emVySW1hZ2VTaXpl
KTsKKyAgICB0aGlzLl90b2dnbGVBbmFseXplckJ1dHRvbk5hdmlnYXRpb25JdGVtLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkJ1dHRvbk5hdmlnYXRpb25JdGVtLkV2ZW50LkNsaWNrZWQs
IHRoaXMuX3RvZ2dsZUFuYWx5emVyLCB0aGlzKTsKKyAgICB0aGlzLl90b2dnbGVBbmFseXplckJ1
dHRvbk5hdmlnYXRpb25JdGVtLmVuYWJsZWQgPSBmYWxzZTsKKwogICAgIFdlYkluc3BlY3Rvci5z
aG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuU2V0dGluZy5FdmVudC5DaGFuZ2VkLCB0aGlzLl9zaG93SmF2YVNjcmlwdFR5cGVJ
bmZvcm1hdGlvblNldHRpbmdDaGFuZ2VkLCB0aGlzKTsKIH07CiAKQEAgLTcwLDcgKzc3LDcgQEAg
V2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKIAogICAg
IGdldCBuYXZpZ2F0aW9uSXRlbXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFt0aGlzLl9wcmV0
dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLCB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0
aW9uSXRlbV07CisgICAgICAgIHJldHVybiBbdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0
aW9uSXRlbSwgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdhdGlvbkl0ZW0sIHRoaXMuX3RvZ2ds
ZUFuYWx5emVyQnV0dG9uTmF2aWdhdGlvbkl0ZW1dOwogICAgIH0sCiAKICAgICBnZXQgbWFuYWdl
c093bklzc3VlcygpCkBAIC0yMTAsNiArMjE3LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJj
ZUNvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fcHJldHR5UHJpbnRCdXR0
b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVkID0gdGhpcy5fdGV4dEVkaXRvci5jYW5CZUZvcm1hdHRl
ZCgpOwogICAgICAgICB0aGlzLl9zaG93VHlwZXNCdXR0b25OYXZpZ2F0aW9uSXRlbS5lbmFibGVk
ID0gdGhpcy5fdGV4dEVkaXRvci5jYW5TaG93VHlwZUFubm90YXRpb25zKCk7CiAgICAgICAgIHRo
aXMuX3Nob3dUeXBlc0J1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZCA9IFdlYkluc3BlY3Rv
ci5zaG93SmF2YVNjcmlwdFR5cGVJbmZvcm1hdGlvblNldHRpbmcudmFsdWU7CisgICAgICAgIHRo
aXMuX3RvZ2dsZUFuYWx5emVyQnV0dG9uTmF2aWdhdGlvbkl0ZW0uZW5hYmxlZCA9IHRoaXMuX3Rl
eHRFZGl0b3IuY2FuQmVBbmFseXplZDsKICAgICB9LAogCiAgICAgX3RvZ2dsZVByZXR0eVByaW50
OiBmdW5jdGlvbihldmVudCkKQEAgLTIyMyw2ICsyMzEsMTkgQEAgV2ViSW5zcGVjdG9yLlRleHRS
ZXNvdXJjZUNvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fdGV4dEVkaXRv
ci50b2dnbGVUeXBlQW5ub3RhdGlvbnMoKTsKICAgICB9LAogCisgICAgX3RvZ2dsZUFuYWx5emVy
OiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX3RleHRFZGl0b3IudG9nZ2xl
QW5hbHl6ZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuX3RleHRFZGl0b3IuYW5hbHl6ZXJJc0FjdGl2
ZSkgeworICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQW5hbHl6ZXJCdXR0b25OYXZpZ2F0aW9uSXRl
bS5hY3RpdmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNvbnRlbnRCcm93
c2VyLmFjdGl2YXRlQW5hbHl6ZXJCYW5uZXIoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgZnVubmVsIGluZm9ybWF0aW9uIGludG8gdGhlIGFuYWx5emVyQmFubmVyIG9uY2UgaXQgaXMg
YXZhaWxhYmxlLCBvciBlc3RhYmxpc2ggc29tZSBmb3JtIG9mIGRhdGEgYmluZGluZy4KKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUFuYWx5emVyQnV0dG9uTmF2aWdh
dGlvbkl0ZW0uYWN0aXZhdGVkID0gZmFsc2U7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY29u
dGVudEJyb3dzZXIuZGVhY3RpdmF0ZUFuYWx5emVyQmFubmVyKCk7CisgICAgICAgIH0KKyAgICB9
LAorCiAgICAgX3Nob3dKYXZhU2NyaXB0VHlwZUluZm9ybWF0aW9uU2V0dGluZ0NoYW5nZWQ6IGZ1
bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdGhpcy5fc2hvd1R5cGVzQnV0dG9uTmF2aWdh
dGlvbkl0ZW0uYWN0aXZhdGVkID0gV2ViSW5zcGVjdG9yLnNob3dKYXZhU2NyaXB0VHlwZUluZm9y
bWF0aW9uU2V0dGluZy52YWx1ZTsKQEAgLTI0Myw2ICsyNjQsOSBAQCBXZWJJbnNwZWN0b3IuVGV4
dFJlc291cmNlQ29udGVudFZpZXcucHJvdG90eXBlID0gewogCiAgICAgX3RleHRFZGl0b3JDb250
ZW50RGlkQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBQ
cm9iYWJseSB3YW50IHRvIHVwZGF0ZSB0aGUgcmVsZXZhbnQgQW5hbHl6ZXJCYW5uZXIuCisgICAg
ICAgIC8vIFdlYkluc3BlY3Rvci5BbmFseXplck1hbmFnZXIuYW5hbHl6ZXJNZXNzYWdlc0ZvclNv
dXJjZUNvZGUodGhpcy5fdGV4dEVkaXRvci5zb3VyY2VDb2RlKTsKKwogICAgICAgICB0aGlzLl9p
Z25vcmVTb3VyY2VDb2RlQ29udGVudERpZENoYW5nZUV2ZW50ID0gdHJ1ZTsKICAgICAgICAgV2Vi
SW5zcGVjdG9yLmJyYW5jaE1hbmFnZXIuY3VycmVudEJyYW5jaC5yZXZpc2lvbkZvclJlcHJlc2Vu
dGVkT2JqZWN0KHRoaXMucmVzb3VyY2UpLmNvbnRlbnQgPSB0aGlzLl90ZXh0RWRpdG9yLnN0cmlu
ZzsKICAgICAgICAgZGVsZXRlIHRoaXMuX2lnbm9yZVNvdXJjZUNvZGVDb250ZW50RGlkQ2hhbmdl
RXZlbnQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>