<?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>28177</bug_id>
          
          <creation_ts>2009-08-11 09:04:19 -0700</creation_ts>
          <short_desc>WebInspector: Migrate to DOMAgent (serialized access to DOM)</short_desc>
          <delta_ts>2009-08-13 14:23:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>138982</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-11 09:04:19 -0700</bug_when>
    <thetext>This is a large change that wires all the pieces of the migration together. What we already have:
- There is a InspectorDOMAgent / DOMAgent infrastructure that replicates DOM structure to the Web Inspector&apos;s Elements Pane.
- There is a Styles and Properties sidebar panels that interact with the page in serialized way.

What is missing:
1) We are using quarantined nodes, not DOMAgent yet
2) Console evaluation and console.log push quarantined JS objects into the frontend. They should push proxy objects instead

This change is supposed to fix these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138985</commentid>
    <comment_count>1</comment_count>
      <attachid>34565</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-11 09:13:10 -0700</bug_when>
    <thetext>Created attachment 34565
Step1: Most of the work done. Call for your comments.

The general idea of this patch is that we stop pushing live objects into the frontend upon evaluation and console.dir requests. It also migrates to WebInspector.DOMAgent.

Patch is not complete: 
- it does not implement DOM search
- it breaks commandLineAPI&apos;s inspect(o).

But it already has a lot of changes and I would like to get initial feedback on it.
I am fixing the ones above in the meanwhile.

What will happen after this change:
- More bugfixes if I miss anything
- Move search worker into the InjectedScript
- Look at debugging, database and the rest of the places that still push live objects into the frontend
- Move InjectedScript into the isolated context and get rid of all the &quot;quarantine*&quot; calls and support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139004</commentid>
    <comment_count>2</comment_count>
      <attachid>34565</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-08-11 09:58:15 -0700</bug_when>
    <thetext>Comment on attachment 34565
Step1: Most of the work done. Call for your comments.


&gt;  Node* InspectorDOMAgent::nodeForId(long id)
&gt;  {
&gt; +    if (!id)
&gt; +        return mainFrameDocument();

So 0 is a special id and it is always the main document?

&gt;          var reportCompletions = this._reportCompletions.bind(this, bestMatchOnly, completionsReadyCallback, dotNotation, bracketNotation, prefix);
&gt; -        this._evalInInspectedWindow(expressionString, reportCompletions);
&gt; +        this._evalInInspectedWindow(&quot;(function() {&quot; +
&gt; +            &quot;var props =[]; &quot; + 
&gt; +            &quot;for (var prop in (&quot; + expressionString + &quot;)) props.push(prop);&quot; +
&gt; +            ((!dotNotation &amp;&amp; !bracketNotation) ? &quot;for (var prop in window._inspectorCommandLineAPI) props.push(prop);&quot; : &quot;&quot;) +
&gt; +            &quot;return props.join(\&quot;,\&quot;);&quot; +
&gt; +        &quot;})()&quot;, reportCompletions);

What is this change for? I would like to avoid using _evalInInspectedWindow with a bunch of code that wasn&apos;t user typed. Can this code live in the InjectedScript file?

&gt; +        var properties = result.split(&quot;,&quot;);

I don&apos;t understand this, where did result come from? Why does it need split?

&gt; -        WebInspector.updateFocusedNode(link.representedNode);
&gt; +        WebInspector.updateFocusedNode(link.representedNode._id);

Shouldn&apos;t updateFocusedNode be the one to access _id? Or some other lower level transport layer?

&gt; +        var callback = function(success) {
&gt; +        };
&gt; +        InspectorController.addInspectedNode(node._id, callback);

Just pass the empty function inline to addInspectedNode or make it accept &quot;undefined&quot; for the callback.


&gt; +        var evalCallback = function(result) {

We prefer the &quot;function evalCallback(result)&quot; style here, with the brace on the second line.

&gt; -                InspectorController.highlightDOMNode(x);
&gt; +                InspectorController.highlightDOMNode(x._id);

Is this ._id stuff temporary? If not _id should drop the underscore.

&gt; +    if (!InjectedScript._window()._inspectorCommandLineAPI) {
&gt; +        InjectedScript._window().eval(&quot;window._inspectorCommandLineAPI = { \
&gt; +            $: function() { return document.getElementById.apply(document, arguments) }, \
&gt; +            $$: function() { return document.querySelectorAll.apply(document, arguments) }, \
&gt; +            $x: function(xpath, context) { \
&gt; +                var nodes = []; \
&gt; +                try { \
&gt; +                    var doc = context || document; \
&gt; +                    var results = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); \
&gt; +                    var node; \
&gt; +                    while (node = results.iterateNext()) nodes.push(node); \
&gt; +                } catch (e) {} \
&gt; +                return nodes; \
&gt; +            }, \
&gt; +            clear: function(o) { _inspectorCommandLineAPI._clearConsoleRequested = true; }, \
&gt; +            dir: function() { return console.dir.apply(console, arguments) }, \
&gt; +            dirxml: function() { return console.dirxml.apply(console, arguments) }, \
&gt; +            inspect: function(o) { _inspectorCommandLineAPI._objectToInspect = o; }, \
&gt; +            keys: function(o) { var a = []; for (var k in o) a.push(k); return a; }, \
&gt; +            values: function(o) { var a = []; for (var k in o) a.push(o[k]); return a; }, \
&gt; +            profile: function() { return console.profile.apply(console, arguments) }, \
&gt; +            profileEnd: function() { return console.profileEnd.apply(console, arguments) }, \
&gt; +            _clearConsoleRequested : false, \
&gt; +            _inspectedNodes: [], \
&gt; +            _objectToInspect: null, \
&gt; +            get $0() { return _inspectorCommandLineAPI._inspectedNodes[0] }, \
&gt; +            get $1() { return _inspectorCommandLineAPI._inspectedNodes[1] }, \
&gt; +            get $2() { return _inspectorCommandLineAPI._inspectedNodes[2] }, \
&gt; +            get $3() { return _inspectorCommandLineAPI._inspectedNodes[3] }, \
&gt; +            get $4() { return _inspectorCommandLineAPI._inspectedNodes[4] } \
&gt; +        };&quot;);
&gt; +    }
&gt; +},

Does this still need to use InjectedScript._window().eval to install the API? Or can that be done directly now if this script is in the inspected page? Or is it?


&gt; -    useDOMAgent: false
&gt; +    useDOMAgent: true

So this is ready to flip? (Once you fix the remaining issues you mentioned.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139041</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-11 10:59:39 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 34565 [details])
&gt; 
&gt; &gt;  Node* InspectorDOMAgent::nodeForId(long id)
&gt; &gt;  {
&gt; &gt; +    if (!id)
&gt; &gt; +        return mainFrameDocument();
&gt; 
&gt; So 0 is a special id and it is always the main document?
&gt; 

Yes, it is. WebInspector.DOMDocument also has corresponding id == 0.

&gt; &gt;          var reportCompletions = this._reportCompletions.bind(this, bestMatchOnly, completionsReadyCallback, dotNotation, bracketNotation, prefix);
&gt; &gt; -        this._evalInInspectedWindow(expressionString, reportCompletions);
&gt; &gt; +        this._evalInInspectedWindow(&quot;(function() {&quot; +
&gt; &gt; +            &quot;var props =[]; &quot; + 
&gt; &gt; +            &quot;for (var prop in (&quot; + expressionString + &quot;)) props.push(prop);&quot; +
&gt; &gt; +            ((!dotNotation &amp;&amp; !bracketNotation) ? &quot;for (var prop in window._inspectorCommandLineAPI) props.push(prop);&quot; : &quot;&quot;) +
&gt; &gt; +            &quot;return props.join(\&quot;,\&quot;);&quot; +
&gt; &gt; +        &quot;})()&quot;, reportCompletions);
&gt; 
&gt; What is this change for? I would like to avoid using _evalInInspectedWindow
&gt; with a bunch of code that wasn&apos;t user typed. Can this code live in the
&gt; InjectedScript file?
&gt; 

Now that evaluate returns object wrappers instead of objects, I would need to do extra lookups in order to get a list of object properties used in completion. Instead, I evaluate an expression that returns comma-separated property list (basic types are not wrapped). I am not sure I want to put this into InjectedScript since I want split to be next to join, but I can move it as you suggest and mention the comma separator in the comments.

&gt; &gt; +        var properties = result.split(&quot;,&quot;);
&gt; 
&gt; I don&apos;t understand this, where did result come from? Why does it need split?
&gt; 

This split corresponds to join in the expression above.

&gt; &gt; -        WebInspector.updateFocusedNode(link.representedNode);
&gt; &gt; +        WebInspector.updateFocusedNode(link.representedNode._id);
&gt; 
&gt; Shouldn&apos;t updateFocusedNode be the one to access _id? Or some other lower level
&gt; transport layer?
&gt; 

This method is also called from the InspectorController via the frontend. And it can only use basic types, proxies, not the live objects. So I needed to change WebInspector.updateFocusedNode&apos;s contract a bit.

&gt; &gt; +        var callback = function(success) {
&gt; &gt; +        };
&gt; &gt; +        InspectorController.addInspectedNode(node._id, callback);
&gt; 
&gt; Just pass the empty function inline to addInspectedNode or make it accept
&gt; &quot;undefined&quot; for the callback.
&gt; 

Will do.

&gt; 
&gt; &gt; +        var evalCallback = function(result) {
&gt; 
&gt; We prefer the &quot;function evalCallback(result)&quot; style here, with the brace on the
&gt; second line.
&gt; 

I was thinking that all named functions get into the global object and as a result we will get clashing names (if in another function i use local named function with the same name). Isn&apos;t it so?

&gt; &gt; -                InspectorController.highlightDOMNode(x);
&gt; &gt; +                InspectorController.highlightDOMNode(x._id);
&gt; 
&gt; Is this ._id stuff temporary? If not _id should drop the underscore.
&gt; 

I think you are right. It is time to make node proxy id public...

&gt; &gt; +    if (!InjectedScript._window()._inspectorCommandLineAPI) {
&gt; &gt; +        InjectedScript._window().eval(&quot;window._inspectorCommandLineAPI = { \
&gt; &gt; +            $: function() { return document.getElementById.apply(document, arguments) }, \
&gt; &gt; +            $$: function() { return document.querySelectorAll.apply(document, arguments) }, \
&gt; &gt; +            $x: function(xpath, context) { \
&gt; &gt; +                var nodes = []; \
&gt; &gt; +                try { \
&gt; &gt; +                    var doc = context || document; \
&gt; &gt; +                    var results = doc.evaluate(xpath, doc, null, XPathResult.ANY_TYPE, null); \
&gt; &gt; +                    var node; \
&gt; &gt; +                    while (node = results.iterateNext()) nodes.push(node); \
&gt; &gt; +                } catch (e) {} \
&gt; &gt; +                return nodes; \
&gt; &gt; +            }, \
&gt; &gt; +            clear: function(o) { _inspectorCommandLineAPI._clearConsoleRequested = true; }, \
&gt; &gt; +            dir: function() { return console.dir.apply(console, arguments) }, \
&gt; &gt; +            dirxml: function() { return console.dirxml.apply(console, arguments) }, \
&gt; &gt; +            inspect: function(o) { _inspectorCommandLineAPI._objectToInspect = o; }, \
&gt; &gt; +            keys: function(o) { var a = []; for (var k in o) a.push(k); return a; }, \
&gt; &gt; +            values: function(o) { var a = []; for (var k in o) a.push(o[k]); return a; }, \
&gt; &gt; +            profile: function() { return console.profile.apply(console, arguments) }, \
&gt; &gt; +            profileEnd: function() { return console.profileEnd.apply(console, arguments) }, \
&gt; &gt; +            _clearConsoleRequested : false, \
&gt; &gt; +            _inspectedNodes: [], \
&gt; &gt; +            _objectToInspect: null, \
&gt; &gt; +            get $0() { return _inspectorCommandLineAPI._inspectedNodes[0] }, \
&gt; &gt; +            get $1() { return _inspectorCommandLineAPI._inspectedNodes[1] }, \
&gt; &gt; +            get $2() { return _inspectorCommandLineAPI._inspectedNodes[2] }, \
&gt; &gt; +            get $3() { return _inspectorCommandLineAPI._inspectedNodes[3] }, \
&gt; &gt; +            get $4() { return _inspectorCommandLineAPI._inspectedNodes[4] } \
&gt; &gt; +        };&quot;);
&gt; &gt; +    }
&gt; &gt; +},
&gt; 
&gt; Does this still need to use InjectedScript._window().eval to install the API?
&gt; Or can that be done directly now if this script is in the inspected page? Or is
&gt; it?
&gt; 

Yes, the plan is to introduce InjectedScript.CommandLineAPI class inside InjectedScript. I actually started it like that, but then realized that it will only work once InjectedScript can interact with the inspected window without the need to be quarantined. I&apos;ll do it later when InjectedScript runs in page&apos;s context.

&gt; 
&gt; &gt; -    useDOMAgent: false
&gt; &gt; +    useDOMAgent: true
&gt; 
&gt; So this is ready to flip? (Once you fix the remaining issues you mentioned.)

Yes, search and inspect(o) are the only things missing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139042</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-08-11 11:11:05 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 34565 [details] [details])
&gt; &gt; 
&gt; &gt; What is this change for? I would like to avoid using _evalInInspectedWindow
&gt; &gt; with a bunch of code that wasn&apos;t user typed. Can this code live in the
&gt; &gt; InjectedScript file?
&gt; 
&gt; Now that evaluate returns object wrappers instead of objects, I would need to
&gt; do extra lookups in order to get a list of object properties used in
&gt; completion. Instead, I evaluate an expression that returns comma-separated
&gt; property list (basic types are not wrapped). I am not sure I want to put this
&gt; into InjectedScript since I want split to be next to join, but I can move it as
&gt; you suggest and mention the comma separator in the comments.
&gt; 
&gt; &gt; &gt; +        var properties = result.split(&quot;,&quot;);
&gt; &gt; 
&gt; &gt; I don&apos;t understand this, where did result come from? Why does it need split?
&gt; &gt; 
&gt; 
&gt; This split corresponds to join in the expression above.

Ok, I see now. I overlooked the join. The evaluated code was hard to read. It would be best if it was just a normal function and not a string, so it was readable. That was my main point. It seems like any code we want ran in the inspected page should live in InjectedScript.js and not need to be evaluated. But I guess that can&apos;t happen just yet.

&gt; &gt; &gt; +        var evalCallback = function(result) {
&gt; &gt; 
&gt; &gt; We prefer the &quot;function evalCallback(result)&quot; style here, with the brace on the
&gt; &gt; second line.
&gt; &gt; 
&gt; 
&gt; I was thinking that all named functions get into the global object and as a
&gt; result we will get clashing names (if in another function i use local named
&gt; function with the same name). Isn&apos;t it so?

Nope. They are locally scoped in the function, just like it was a var.


&gt; Yes, the plan is to introduce InjectedScript.CommandLineAPI class inside
&gt; InjectedScript. I actually started it like that, but then realized that it will
&gt; only work once InjectedScript can interact with the inspected window without
&gt; the need to be quarantined. I&apos;ll do it later when InjectedScript runs in page&apos;s
&gt; context.

Ok, makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139805</commentid>
    <comment_count>5</comment_count>
      <attachid>34733</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-13 05:09:38 -0700</bug_when>
    <thetext>Created attachment 34733
The patch.

Comments addressed, added search and command line API support. I think that&apos;s enough to move us to the agent and flip the flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139808</commentid>
    <comment_count>6</comment_count>
      <attachid>34733</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-08-13 05:23:46 -0700</bug_when>
    <thetext>Comment on attachment 34733
The patch.

&gt; +                case &quot;Storage&quot;:
&gt; +                        InspectorController.selectDOMStorage(o);
&gt; +                    break;

Extra indent here.
&gt; -    useDOMAgent: false
&gt; +    useDOMAgent: true

Can this just be removed now?

&gt; -    if (obj instanceof win.Node)
&gt; +    if (obj instanceof win.Node &amp;&amp; !(obj instanceof win.Document))

Does this still let console.dirxml(document) output the HTML tree?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139810</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-13 05:31:23 -0700</bug_when>
    <thetext>Thanks for the review!

For committers: I&apos;d like to land this myself in coordination with Chromium. Thanks.

(In reply to comment #6)
&gt; (From update of attachment 34733 [details])
&gt; &gt; +                case &quot;Storage&quot;:
&gt; &gt; +                        InspectorController.selectDOMStorage(o);
&gt; &gt; +                    break;
&gt; 
&gt; Extra indent here.

Done.

&gt; &gt; -    useDOMAgent: false
&gt; &gt; +    useDOMAgent: true
&gt; 
&gt; Can this just be removed now?
&gt; 

Sure.

&gt; &gt; -    if (obj instanceof win.Node)
&gt; &gt; +    if (obj instanceof win.Node &amp;&amp; !(obj instanceof win.Document))
&gt; 
&gt; Does this still let console.dirxml(document) output the HTML tree?

I don&apos;t think so. Let me remove this check. I actually was thinking we did not allow dirxml for document, but now I see it was working fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139848</commentid>
    <comment_count>8</comment_count>
      <attachid>34745</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-13 08:26:20 -0700</bug_when>
    <thetext>Created attachment 34745
Patch with comments addressed (no need to review).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140033</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-08-13 14:23:50 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/bindings/js/JSInspectorBackendCustom.cpp
	M	WebCore/bindings/js/ScriptObjectQuarantine.cpp
	M	WebCore/bindings/js/ScriptObjectQuarantine.h
	M	WebCore/bindings/js/ScriptValue.cpp
	M	WebCore/bindings/js/ScriptValue.h
	M	WebCore/bindings/v8/ScriptObjectQuarantine.cpp
	M	WebCore/bindings/v8/ScriptObjectQuarantine.h
	M	WebCore/bindings/v8/ScriptValue.h
	M	WebCore/bindings/v8/custom/V8CustomBinding.h
	M	WebCore/bindings/v8/custom/V8InspectorBackendCustom.cpp
	M	WebCore/inspector/ConsoleMessage.cpp
	M	WebCore/inspector/ConsoleMessage.h
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorBackend.h
	M	WebCore/inspector/InspectorBackend.idl
	M	WebCore/inspector/InspectorController.cpp
	M	WebCore/inspector/InspectorController.h
	M	WebCore/inspector/InspectorDOMAgent.cpp
	M	WebCore/inspector/InspectorDOMAgent.h
	M	WebCore/inspector/InspectorDOMStorageResource.cpp
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/InspectorFrontend.h
	M	WebCore/inspector/front-end/ConsoleView.js
	M	WebCore/inspector/front-end/DOMAgent.js
	M	WebCore/inspector/front-end/ElementsPanel.js
	M	WebCore/inspector/front-end/ElementsTreeOutline.js
	M	WebCore/inspector/front-end/InjectedScript.js
	M	WebCore/inspector/front-end/ObjectPropertiesSection.js
	M	WebCore/inspector/front-end/ObjectProxy.js
	M	WebCore/inspector/front-end/PropertiesSidebarPane.js
	M	WebCore/inspector/front-end/StylesSidebarPane.js
	M	WebCore/inspector/front-end/inspector.js
	M	WebCore/inspector/front-end/utilities.js
	M	WebCore/storage/Storage.h
Committed r47231</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34565</attachid>
            <date>2009-08-11 09:13:10 -0700</date>
            <delta_ts>2009-08-13 05:09:38 -0700</delta_ts>
            <desc>Step1: Most of the work done. Call for your comments.</desc>
            <filename>step1.patch</filename>
            <type>text/plain</type>
            <size>57764</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTIwMTg1Yy4uMDNkZTE4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAwOS0wOC0xMSAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJJbnNwZWN0b3I6IE1pZ3JhdGUgdG8gRE9NQWdlbnQgKHNl
cmlhbGl6ZWQgYWNjZXNzIHRvIERPTSkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI4MTc3CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0luc3Bl
Y3RvckJhY2tlbmRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JCYWNr
ZW5kOjpub2RlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JCYWNrZW5kOjp3
cmFwT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6dW53cmFw
T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6aXNPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdFZhbHVlLmg6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZSk6CisgICAg
ICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6
aGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6Om5vZGVGb3JJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjp3cmFwT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnVud3JhcE9iamVjdCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9y
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjphZGRN
ZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OnN0YXJ0R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c3Bl
Y2lhbFBhbmVsRm9ySlNOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OndyYXBPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuX2luc3BlY3RPYmplY3QpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5kb0V2YWxJbldpbmRv
dy5ldmFsQ2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3Rv
dHlwZS5kb0V2YWxJbldpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcu
cHJvdG90eXBlLl9lbnRlcktleVByZXNzZWQucHJpbnRSZXN1bHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5fZW50ZXJLZXlQcmVzc2VkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUuX2Zvcm1hdCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
T01BZ2VudCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRs
aW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90
eXBlLnVwZGF0ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVF
bGVtZW50LnByb3RvdHlwZS5fYXR0cmlidXRlRWRpdGluZ0NvbW1pdHRlZCk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qczoKKyAgICAgICAgKEluamVjdGVk
U2NyaXB0LnNldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQuZXZhbHVh
dGUpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQuYWRkSW5zcGVjdGVkTm9kZSk6CisgICAgICAg
IChJbmplY3RlZFNjcmlwdC5fZW5zdXJlQ29tbWFuZExpbmVBUElJbnN0YWxsZWQpOgorICAgICAg
ICAoSW5qZWN0ZWRTY3JpcHQuX3Jlc29sdmVPYmplY3QpOgorICAgICAgICAoSW5qZWN0ZWRTY3Jp
cHQuX3dpbmRvdyk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKToKKyAgICAg
ICAgKEluamVjdGVkU2NyaXB0Ll9vYmplY3RGb3JJZCk6CisgICAgICAgIChJbmplY3RlZFNjcmlw
dC5fY3JlYXRlUHJveHlPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzOgorCiAyMDA5LTA4LTA3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCmluZGV4IGIyZWIyZDEuLjhlZDMzYzMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9t
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5j
cHAKQEAgLTcwLDIxICs3MCwxMiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNJbnNwZWN0b3JCYWNrZW5kOjpoaWdobGlnaHRET01Ob2Rl
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU0lu
c3BlY3RvckJhY2tlbmQ6OmhpZ2hsaWdodERPTU5vZGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6QXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAxKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFw
cGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihhcmdz
LmF0KDApKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotCi0gICAgTm9kZSogbm9kZSA9IHRvTm9kZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGlt
cGwoKS0+aGlnaGxpZ2h0KG5vZGUpOwotCisgICAgaW1wbCgpLT5oaWdobGlnaHQoYXJncy5hdCgw
KS50b0ludDMyKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtMjgw
LDQgKzI3MSwyOSBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6cHJvZmlsZXMoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYpCiAKICNlbmRpZgogCitKU1ZhbHVl
IEpTSW5zcGVjdG9yQmFja2VuZDo6bm9kZUZvcklkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK3sKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5ub2RlRm9ySWQoYXJncy5h
dCgwKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbXBsKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNE
T01XaW5kb3cqIGluc3BlY3RlZFdpbmRvdyA9IHRvSlNET01XaW5kb3coaWMtPmluc3BlY3RlZFBh
Z2UoKS0+bWFpbkZyYW1lKCkpOworICAgIHJldHVybiBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6
OndyYXAoaW5zcGVjdGVkV2luZG93LT5nbG9iYWxFeGVjKCksIHRvSlMoZXhlYywgbm9kZSkpOwor
fQorCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6d3JhcE9iamVjdChFeGVjU3RhdGUqLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBpbXBsKCktPndyYXBPYmplY3QoU2Ny
aXB0VmFsdWUoYXJncy5hdCgwKSkpLmpzVmFsdWUoKTsKK30KKworSlNWYWx1ZSBKU0luc3BlY3Rv
ckJhY2tlbmQ6OnVud3JhcE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCit7CisgICAgcmV0dXJuIGltcGwoKS0+dW53cmFwT2JqZWN0KGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYykpLmpzVmFsdWUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFZhbHVlLmNwcAppbmRleCBkNDI3Y2VlLi42ZWFjMTAyIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFZhbHVlLmNwcApAQCAtNzQsNCArNzQsMTEgQEAgYm9vbCBTY3JpcHRWYWx1
ZTo6aXNVbmRlZmluZWQoKSBjb25zdAogICAgIHJldHVybiBtX3ZhbHVlLmdldCgpLmlzVW5kZWZp
bmVkKCk7CiB9CiAKK2Jvb2wgU2NyaXB0VmFsdWU6OmlzT2JqZWN0KCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV92YWx1ZS5n
ZXQoKS5pc09iamVjdCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFZhbHVlLmgKaW5kZXggMjA5Y2UwNi4uMTliYjY5MyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0VmFsdWUuaApAQCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0VxdWFsKFNj
cmlwdFN0YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmKSBjb25zdDsKICAgICBib29sIGlzTnVsbCgp
IGNvbnN0OwogICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdDsKKyAgICBib29sIGlzT2JqZWN0
KCkgY29uc3Q7CiAgICAgYm9vbCBoYXNOb1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9
PSBKU0M6OkpTVmFsdWUoKTsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5o
CmluZGV4IDAwNDg1MWIuLmRkYzM1NzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKQEAg
LTExMCw3ICsxMTAsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWUt
PklzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIAorCisgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZS0+SXNPYmplY3QoKTsKKyAgICB9CisKICAg
ICBib29sIGhhc05vVmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWUu
SXNFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcu
aAppbmRleCBiNzJhMzQ5Li5lNGUyZmQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbUJpbmRpbmcuaApAQCAtNDA2LDYgKzQwNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kRGVidWdnZXJFbmFi
bGVkKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kUGF1c2VPbkV4
Y2VwdGlvbnMpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRQcm9m
aWxlckVuYWJsZWQpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRO
b2RlRm9ySWQpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRXcmFw
T2JqZWN0KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kVW53cmFw
T2JqZWN0KTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0so
SW5zcGVjdG9yQmFja2VuZERhdGFiYXNlVGFibGVOYW1lcyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3Bw
CmluZGV4IDI1NzFkZjQuLjhhNTA3NDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcApAQCAtNTcsMTMgKzU3LDgg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckJhY2tlbmRIaWdobGlnaHRET01Ob2RlKQog
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKIAotICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwotICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQogICAgIEluc3BlY3Rv
ckJhY2tlbmQqIGluc3BlY3RvckJhY2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxJbnNwZWN0b3JCYWNrZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQs
IGFyZ3MuSG9sZGVyKCkpOwotICAgIGluc3BlY3RvckJhY2tlbmQtPmhpZ2hsaWdodChub2RlKTsK
LQorICAgIGluc3BlY3RvckJhY2tlbmQtPmhpZ2hsaWdodChhcmdzWzBdLT5Ub0ludDMyKCktPlZh
bHVlKCkpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKQEAgLTIxNSw0ICsyMTAs
MzQgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckJhY2tlbmRXcmFwQ2FsbGJhY2spCiAg
ICAgcmV0dXJuIGFyZ3NbMF07CiB9CiAKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNr
ZW5kTm9kZUZvcklkKQoreworICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQmFja2VuZC5ub2RlRm9y
SWQoKSIpOworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJhY2tlbmQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JCYWNrZW5kPihWOENsYXNzSW5k
ZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIAorICAgIE5vZGUqIG5v
ZGUgPSBpbnNwZWN0b3JCYWNrZW5kKCktPm5vZGVGb3JJZChhcmdzWzBdLT5Ub0ludDMyKCktPlZh
bHVlKCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
KworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW1wbCgpLT5pbnNwZWN0b3JDb250cm9s
bGVyKCk7CisgICAgaWYgKCFpYykKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKwor
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
Tk9ERSwgbm9kZSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kV3Jh
cE9iamVjdCkKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tlbmQud3JhcE9iamVjdCgp
Iik7CisgICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6
SU5TUEVDVE9SQkFDS0VORCwgYXJncy5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIGluc3BlY3RvckJh
Y2tlbmQtPndyYXBPYmplY3QoU2NyaXB0VmFsdWUoYXJnc1swXSkpLnY4VmFsdWUoKTsKK30KKwor
Q0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckJhY2tlbmRVbndyYXBPYmplY3QpCit7CisgICAg
SU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNrZW5kLnVud3JhcE9iamVjdCgpIik7CisgICAgSW5zcGVj
dG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQkFDS0VO
RCwgYXJncy5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIGluc3BlY3RvckJhY2tlbmQtPnVud3JhcE9i
amVjdCh0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pKS52OFZhbHVlKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNw
cAppbmRleCBmOWQ4NzA4Li5mMmZlMTA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwCkBAIC01MCwyOSArNTAsMTggQEAgQ29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2UgcywgTWVzc2FnZVR5cGUgdCwgTWVzc2FnZUxldmVsIGwsIGMKIHsKIH0KIAot
Q29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZVR5
cGUgdCwgTWVzc2FnZUxldmVsIGwsIFNjcmlwdENhbGxTdGFjayogY2FsbFN0YWNrLCB1bnNpZ25l
ZCBnLCBib29sIHN0b3JlVHJhY2UpCitDb25zb2xlTWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZSBzLCBNZXNzYWdlVHlwZSB0LCBNZXNzYWdlTGV2ZWwgbCwgY29uc3QgVmVjdG9y
PFNjcmlwdFN0cmluZz4mIGZyYW1lcywgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVlPiYgd3JhcHBl
ZEFyZ3VtZW50cywgdW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwgdW5zaWduZWQgZykKICAg
ICA6IG1fc291cmNlKHMpCiAgICAgLCBtX3R5cGUodCkKICAgICAsIG1fbGV2ZWwobCkKLSAgICAs
IG1fd3JhcHBlZEFyZ3VtZW50cyhjYWxsU3RhY2stPmF0KDApLmFyZ3VtZW50Q291bnQoKSkKLSAg
ICAsIG1fZnJhbWVzKHN0b3JlVHJhY2UgPyBjYWxsU3RhY2stPnNpemUoKSA6IDApCisgICAgLCBt
X2ZyYW1lcyhmcmFtZXMpCisgICAgLCBtX3dyYXBwZWRBcmd1bWVudHMod3JhcHBlZEFyZ3VtZW50
cykKKyAgICAsIG1fbGluZShsaSkKKyAgICAsIG1fdXJsKHUpCiAgICAgLCBtX2dyb3VwTGV2ZWwo
ZykKICAgICAsIG1fcmVwZWF0Q291bnQoMSkKIHsKLSAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUm
IGxhc3RDYWxsZXIgPSBjYWxsU3RhY2stPmF0KDApOwotICAgIG1fbGluZSA9IGxhc3RDYWxsZXIu
bGluZU51bWJlcigpOwotICAgIG1fdXJsID0gbGFzdENhbGxlci5zb3VyY2VVUkwoKS5zdHJpbmco
KTsKLQotICAgIC8vIEZJWE1FOiBGb3Igbm93LCBqdXN0IHN0b3JlIGZ1bmN0aW9uIG5hbWVzIGFz
IHN0cmluZ3MuCi0gICAgLy8gQXMgU2NyaXB0Q2FsbFN0YWNrIHN0YXJ0IHN0b3JpbmcgbGluZSBu
dW1iZXIgYW5kIHNvdXJjZSBVUkwgZm9yIGFsbAotICAgIC8vIGZyYW1lcywgcmVmYWN0b3IgdG8g
dXNlIHRoYXQsIGFzIHdlbGwuCi0gICAgaWYgKHN0b3JlVHJhY2UpIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxTdGFjay0+c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBt
X2ZyYW1lc1tpXSA9IGNhbGxTdGFjay0+YXQoaSkuZnVuY3Rpb25OYW1lKCk7Ci0gICAgfQogCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxhc3RDYWxsZXIuYXJndW1lbnRDb3VudCgpOyAr
K2kpCi0gICAgICAgIG1fd3JhcHBlZEFyZ3VtZW50c1tpXSA9IHF1YXJhbnRpbmVWYWx1ZShjYWxs
U3RhY2stPnN0YXRlKCksIGxhc3RDYWxsZXIuYXJndW1lbnRBdChpKSk7CiB9CiAKIHZvaWQgQ29u
c29sZU1lc3NhZ2U6OmFkZFRvQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAppbmRleCA5MTBhMDA3Li41YjE1NjBkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIGNsYXNzIENvbnNvbGVNZXNzYWdlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYgbSwgdW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwgdW5zaWduZWQgZyk7
ICAgICAgICAKLSAgICAgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5
cGUsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiwgdW5zaWduZWQgZywgYm9vbCBzdG9y
ZVRyYWNlID0gZmFsc2UpOworICAgICAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJh
bWVzLCBjb25zdCBWZWN0b3I8U2NyaXB0VmFsdWU+JiB3cmFwcGVkQXJndW1lbnRzLCB1bnNpZ25l
ZCBsaSwgY29uc3QgU3RyaW5nJiB1LCB1bnNpZ25lZCBnKTsKIAogICAgICAgICB2b2lkIGFkZFRv
Q29uc29sZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOwogICAgICAgICB2b2lkIGluY3Jl
bWVudENvdW50KCkgeyArK21fcmVwZWF0Q291bnQ7IH07CkBAIC01OSw4ICs1OSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgTWVzc2FnZVR5cGUgbV90eXBlOwogICAgICAgICBNZXNz
YWdlTGV2ZWwgbV9sZXZlbDsKICAgICAgICAgU3RyaW5nIG1fbWVzc2FnZTsKLSAgICAgICAgVmVj
dG9yPFNjcmlwdFZhbHVlPiBtX3dyYXBwZWRBcmd1bWVudHM7CiAgICAgICAgIFZlY3RvcjxTY3Jp
cHRTdHJpbmc+IG1fZnJhbWVzOworICAgICAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1fd3JhcHBl
ZEFyZ3VtZW50czsKICAgICAgICAgdW5zaWduZWQgbV9saW5lOwogICAgICAgICBTdHJpbmcgbV91
cmw7CiAgICAgICAgIHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZC5jcHAKaW5kZXggMWViMTBlOC4uYjA5NDRhMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5jcHAKQEAgLTM3OSwxMCArMzc5LDM0IEBAIHZvaWQgSW5zcGVjdG9y
QmFja2VuZDo6c2V0VGV4dE5vZGVWYWx1ZShsb25nIGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNv
bnN0IFN0cmluCiAgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+c2V0
VGV4dE5vZGVWYWx1ZShjYWxsSWQsIGVsZW1lbnRJZCwgdmFsdWUpOwogfQogCi12b2lkIEluc3Bl
Y3RvckJhY2tlbmQ6OmhpZ2hsaWdodChOb2RlKiBub2RlKQordm9pZCBJbnNwZWN0b3JCYWNrZW5k
OjpoaWdobGlnaHQobG9uZyBub2RlSWQpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxl
cikgeworICAgICAgICBOb2RlKiBub2RlID0gbV9pbnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2Vu
dCgpLT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICAgICAgaWYgKG5vZGUpCisgICAgICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmhpZ2hsaWdodChub2RlKTsKKyAgICB9Cit9CisKK05vZGUq
IEluc3BlY3RvckJhY2tlbmQ6Om5vZGVGb3JJZChsb25nIG5vZGVJZCkKK3sKKyAgICBpZiAobV9p
bnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250cm9sbGVy
LT5kb21BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICByZXR1cm4gMDsKK30KKworU2Ny
aXB0VmFsdWUgSW5zcGVjdG9yQmFja2VuZDo6d3JhcE9iamVjdChjb25zdCBTY3JpcHRWYWx1ZSYg
b2JqZWN0KQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIHJldHVy
biBtX2luc3BlY3RvckNvbnRyb2xsZXItPndyYXBPYmplY3Qob2JqZWN0KTsKKyAgICByZXR1cm4g
U2NyaXB0VmFsdWUoKTsKK30KKworU2NyaXB0VmFsdWUgSW5zcGVjdG9yQmFja2VuZDo6dW53cmFw
T2JqZWN0KGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQ29u
dHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHQobm9kZSk7
CisgICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPnVud3JhcE9iamVjdChvYmpl
Y3RJZCk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAppbmRleCBkYWExNmI0Li44NDY2
Y2FiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC0xMjksNyArMTI5LDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxvbmcg
ZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKIAogICAgIC8vIEdlbmVyaWMgY29kZSBj
YWxsZWQgZnJvbSBjdXN0b20gaW1wbGVtZW50YXRpb25zLgotICAgIHZvaWQgaGlnaGxpZ2h0KE5v
ZGUqIG5vZGUpOworICAgIHZvaWQgaGlnaGxpZ2h0KGxvbmcgbm9kZUlkKTsKKyAgICBOb2RlKiBu
b2RlRm9ySWQobG9uZyBub2RlSWQpOworICAgIFNjcmlwdFZhbHVlIHdyYXBPYmplY3QoY29uc3Qg
U2NyaXB0VmFsdWUmIG9iamVjdCk7CisgICAgU2NyaXB0VmFsdWUgdW53cmFwT2JqZWN0KGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQpOwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckJhY2tlbmQoSW5z
cGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBj
bGllbnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5p
ZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCBiYWUxZjI2
Li5hNDI2ZWQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
LmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtMzUs
NyArMzUsNyBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IKICAg
ICBdIEluc3BlY3RvckJhY2tlbmQgewogICAgICAgICB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0
KCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShpbiBOb2RlIG5vZGUp
OworICAgICAgICBbQ3VzdG9tXSB2b2lkIGhpZ2hsaWdodERPTU5vZGUoaW4gbG9uZyBlbGVtZW50
SWQpOwogICAgICAgICB2b2lkIGxvYWRlZChpbiBib29sZWFuIGVuYWJsZURPTUFnZW50KTsKICAg
ICAgICAgdm9pZCB3aW5kb3dVbmxvYWRpbmcoKTsKICAgICAgICAgdm9pZCBhdHRhY2goKTsKQEAg
LTEwMSw1ICsxMDEsMTAgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICB2b2lkIHNldEF0dHJpYnV0
ZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBlbGVtZW50SWQsIGluIERPTVN0cmluZyBuYW1lLCBp
biBET01TdHJpbmcgdmFsdWUpOwogICAgICAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShpbiBsb25n
IGNhbGxJZCwgaW4gbG9uZyBlbGVtZW50SWQsIGluIERPTVN0cmluZyBuYW1lKTsKICAgICAgICAg
dm9pZCBzZXRUZXh0Tm9kZVZhbHVlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIGVsZW1lbnRJZCwg
aW4gRE9NU3RyaW5nIHZhbHVlKTsKKworICAgICAgICAvLyBDYWxsZWQgZnJvbSBJbmplY3RlZFNj
cmlwdC4KKyAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IG5vZGVGb3JJZChpbiBsb25nIG5vZGVJ
ZCk7CisgICAgICAgIFtDdXN0b21dIGxvbmcgd3JhcE9iamVjdChpbiBET01PYmplY3Qgb2JqZWN0
KTsKKyAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IHVud3JhcE9iamVjdChpbiBsb25nIG9iamVj
dElkKTsKICAgICB9OwotIH0KK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKaW5kZXggYzMzNTFlNS4uMmE3Yjg5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJl
cXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0
Q2FsbFN0YWNrLmgiCisjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgiCiAjaW5jbHVkZSAi
U2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKQEAgLTEyNSw2ICsxMjYsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJ
bnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQog
ICAgICwgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fcmVzb3VyY2VU
cmFja2luZ1NldHRpbmdzTG9hZGVkKGZhbHNlKQogICAgICwgbV9pbnNwZWN0b3JCYWNrZW5kKElu
c3BlY3RvckJhY2tlbmQ6OmNyZWF0ZSh0aGlzLCBjbGllbnQpKQorICAgICwgbV9sYXN0Qm91bmRP
YmplY3RJZCgxKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICwgbV9kZWJ1
Z2dlckVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKGZhbHNl
KQpAQCAtMjcwLDcgKzI3Miw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Zm9jdXNOb2Rl
KCkKICAgICBBU1NFUlQobV9mcm9udGVuZCk7CiAgICAgQVNTRVJUKG1fbm9kZVRvRm9jdXMpOwog
Ci0gICAgbV9mcm9udGVuZC0+dXBkYXRlRm9jdXNlZE5vZGUobV9ub2RlVG9Gb2N1cy5nZXQoKSk7
CisgICAgbG9uZyBpZCA9IG1fZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobV9ub2Rl
VG9Gb2N1cy5nZXQoKSk7CisgICAgbV9mcm9udGVuZC0+dXBkYXRlRm9jdXNlZE5vZGUoaWQpOwog
ICAgIG1fbm9kZVRvRm9jdXMgPSAwOwogfQogCkBAIC0zNTAsNyArMzUzLDI0IEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJj
ZSwgTWVzc2FnZVR5cGUKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYWRkQ29uc29sZU1lc3NhZ2UoY2FsbFN0YWNrLT5zdGF0ZSgpLCBuZXcgQ29uc29sZU1lc3Nh
Z2Uoc291cmNlLCB0eXBlLCBsZXZlbCwgY2FsbFN0YWNrLCBtX2dyb3VwTGV2ZWwsIHR5cGUgPT0g
VHJhY2VNZXNzYWdlVHlwZSkpOworICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gd3JhcHBlZEFyZ3Vt
ZW50cyhjYWxsU3RhY2stPmF0KDApLmFyZ3VtZW50Q291bnQoKSk7CisgICAgYm9vbCBzdG9yZVRy
YWNlID0gdHlwZSA9PSBUcmFjZU1lc3NhZ2VUeXBlOworICAgIFZlY3RvcjxTY3JpcHRTdHJpbmc+
IGZyYW1lcyhzdG9yZVRyYWNlID8gY2FsbFN0YWNrLT5zaXplKCkgOiAwKTsKKworICAgIGNvbnN0
IFNjcmlwdENhbGxGcmFtZSYgbGFzdENhbGxlciA9IGNhbGxTdGFjay0+YXQoMCk7CisKKyAgICAv
LyBGSVhNRTogRm9yIG5vdywganVzdCBzdG9yZSBmdW5jdGlvbiBuYW1lcyBhcyBzdHJpbmdzLgor
ICAgIC8vIEFzIFNjcmlwdENhbGxTdGFjayBzdGFydCBzdG9yaW5nIGxpbmUgbnVtYmVyIGFuZCBz
b3VyY2UgVVJMIGZvciBhbGwKKyAgICAvLyBmcmFtZXMsIHJlZmFjdG9yIHRvIHVzZSB0aGF0LCBh
cyB3ZWxsLgorICAgIGlmIChzdG9yZVRyYWNlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjYWxsU3RhY2stPnNpemUoKTsgKytpKQorICAgICAgICAgICAgZnJhbWVzW2ldID0g
Y2FsbFN0YWNrLT5hdChpKS5mdW5jdGlvbk5hbWUoKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGFzdENhbGxlci5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAg
d3JhcHBlZEFyZ3VtZW50c1tpXSA9IHdyYXBPYmplY3QobGFzdENhbGxlci5hcmd1bWVudEF0KGkp
KTsKKworICAgIGFkZENvbnNvbGVNZXNzYWdlKGNhbGxTdGFjay0+c3RhdGUoKSwgbmV3IENvbnNv
bGVNZXNzYWdlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIGZyYW1lcywgd3JhcHBlZEFyZ3VtZW50cywg
bGFzdENhbGxlci5saW5lTnVtYmVyKCksIGxhc3RDYWxsZXIuc291cmNlVVJMKCkuc3RyaW5nKCks
IG1fZ3JvdXBMZXZlbCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZE1lc3Nh
Z2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1lc3Nh
Z2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQpAQCAtMzg0LDEzICs0MDQsMTQgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCiAgICAgbV9jb25zb2xlTWVz
c2FnZXMuY2xlYXIoKTsKICAgICBtX3ByZXZpb3VzTWVzc2FnZSA9IDA7CiAgICAgbV9ncm91cExl
dmVsID0gMDsKKyAgICBtX2lkVG9Db25zb2xlT2JqZWN0LmNsZWFyKCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RhcnRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgU2NyaXB0
Q2FsbFN0YWNrKiBjYWxsU3RhY2spCiB7CiAgICAgKyttX2dyb3VwTGV2ZWw7CiAKLSAgICBhZGRD
b25zb2xlTWVzc2FnZShjYWxsU3RhY2stPnN0YXRlKCksIG5ldyBDb25zb2xlTWVzc2FnZShzb3Vy
Y2UsIFN0YXJ0R3JvdXBNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBjYWxsU3RhY2ssIG1f
Z3JvdXBMZXZlbCkpOworICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUoc291cmNlLCBTdGFydEdyb3Vw
TWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgY2FsbFN0YWNrKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjplbmRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgdW5zaWduZWQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCkBAIC01MjQsNiArNTQ1LDkgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeShib29sIGVuYWJsZURP
TUFnZW50KQogICAgIGlmIChlbmFibGVET01BZ2VudCkKICAgICAgICAgbV9kb21BZ2VudCA9IG5l
dyBJbnNwZWN0b3JET01BZ2VudChtX2Zyb250ZW5kLmdldCgpKTsKIAorICAgIGlmICghU2NyaXB0
R2xvYmFsT2JqZWN0OjpnZXQobV9zY3JpcHRTdGF0ZSwgIkluamVjdGVkU2NyaXB0IiwgbV9pbmpl
Y3RlZFNjcmlwdE9iaikpCisgICAgICAgIHJldHVybjsKKyAgICAKICNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKICAgICBTZXR0aW5nIGRlYnVnZ2VyRW5hYmxlZCA9IHNldHRpbmcoZGVi
dWdnZXJFbmFibGVkU2V0dGluZ05hbWUpOwogICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQudHlwZSgp
ID09IFNldHRpbmc6OkJvb2xlYW5UeXBlICYmIGRlYnVnZ2VyRW5hYmxlZC5ib29sZWFuVmFsdWUo
KSkKQEAgLTU5NSw2ICs2MTksNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsb3NlKCkK
ICAgICBjbG9zZVdpbmRvdygpOwogCiAgICAgbV9mcm9udGVuZC5zZXQoMCk7CisgICAgbV9pbmpl
Y3RlZFNjcmlwdE9iaiA9IFNjcmlwdE9iamVjdCgpOwogICAgIGlmIChtX2RvbUFnZW50KSB7CiAg
ICAgICAgIG1fZG9tQWdlbnQtPnNldERvY3VtZW50KDApOwogICAgICAgICBtX2RvbUFnZW50ID0g
MDsKQEAgLTE0NzgsNCArMTUwMywyOCBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpTcGVjaWFsUGFu
ZWxzIEluc3BlY3RvckNvbnRyb2xsZXI6OnNwZWNpYWxQYW5lbEZvckpTTmFtZShjbwogICAgICAg
ICByZXR1cm4gRWxlbWVudHNQYW5lbDsKIH0KIAorU2NyaXB0VmFsdWUgSW5zcGVjdG9yQ29udHJv
bGxlcjo6d3JhcE9iamVjdChjb25zdCBTY3JpcHRWYWx1ZSYgb2JqZWN0KQoreworICAgIGlmIChv
YmplY3QuaXNPYmplY3QoKSkgeworICAgICAgICBsb25nIGlkID0gbV9sYXN0Qm91bmRPYmplY3RJ
ZCsrOworICAgICAgICBTdHJpbmcgb2JqZWN0SWQgPSBTdHJpbmc6OmZvcm1hdCgib2JqZWN0IyVs
ZCIsIGlkKTsKKyAgICAgICAgbV9pZFRvQ29uc29sZU9iamVjdC5zZXQob2JqZWN0SWQsIG9iamVj
dCk7CisKKyAgICAgICAgU2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKG1fc2NyaXB0U3RhdGUs
IG1faW5qZWN0ZWRTY3JpcHRPYmosICJfY3JlYXRlUHJveHlPYmplY3QiKTsKKyAgICAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0KTsKKyAgICAgICAgZnVuY3Rpb24uYXBwZW5kQXJn
dW1lbnQob2JqZWN0SWQpOworICAgICAgICBTY3JpcHRWYWx1ZSB3cmFwcGVyID0gZnVuY3Rpb24u
Y2FsbCgpOworICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICB9CisgICAgcmV0dXJuIG9iamVj
dDsKK30KKworU2NyaXB0VmFsdWUgSW5zcGVjdG9yQ29udHJvbGxlcjo6dW53cmFwT2JqZWN0KGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQpCit7CisgICAgSGFzaE1hcDxTdHJpbmcsIFNjcmlwdFZhbHVl
Pjo6aXRlcmF0b3IgaXQgPSBtX2lkVG9Db25zb2xlT2JqZWN0LmZpbmQob2JqZWN0SWQpOworICAg
IGlmIChpdCAhPSBtX2lkVG9Db25zb2xlT2JqZWN0LmVuZCgpKQorICAgICAgICByZXR1cm4gaXQt
PnNlY29uZDsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCmluZGV4IDA1ZDk2
NTIuLjQwNjliN2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKQEAg
LTMxLDcgKzMxLDkgQEAKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogI2luY2x1ZGUgIlNjcmlwdFN0
YXRlLmgiCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKIApAQCAtNzAsNyArNzIsNiBAQCBzdHJ1Y3QgUmVzb3VyY2VS
ZXF1ZXN0OwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFJlc291cmNlRXJyb3I7CiBj
bGFzcyBTY3JpcHRDYWxsU3RhY2s7Ci1jbGFzcyBTY3JpcHRPYmplY3Q7CiBjbGFzcyBTY3JpcHRT
dHJpbmc7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKQEAgLTI3OSw2ICsyODAsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUp
OwogICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CisgICAgU2NyaXB0VmFsdWUgd3JhcE9i
amVjdChjb25zdCBTY3JpcHRWYWx1ZSYgb2JqZWN0KTsKKyAgICBTY3JpcHRWYWx1ZSB1bndyYXBP
YmplY3QoY29uc3QgU3RyaW5nJiBvYmplY3RJZCk7CiAKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKICAgICB2b2lkIHN0YXJ0VXNlckluaXRpYXRlZFByb2ZpbGluZ1Nvb24oKTsKQEAg
LTMwNyw2ICszMTAsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGllbnQ7
CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKKyAgICBTY3JpcHRPYmplY3QgbV9pbmplY3Rl
ZFNjcmlwdE9iajsKICAgICBQYWdlKiBtX3BhZ2U7CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZVRv
Rm9jdXM7CiAgICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiBtX21haW5SZXNvdXJjZTsKQEAg
LTMzMyw2ICszMzcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNraW5nRW5h
YmxlZDsKICAgICBib29sIG1fcmVzb3VyY2VUcmFja2luZ1NldHRpbmdzTG9hZGVkOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3JCYWNrZW5kPiBtX2luc3BlY3RvckJhY2tlbmQ7CisgICAgSGFzaE1hcDxT
dHJpbmcsIFNjcmlwdFZhbHVlPiBtX2lkVG9Db25zb2xlT2JqZWN0OworICAgIGxvbmcgbV9sYXN0
Qm91bmRPYmplY3RJZDsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBib29s
IG1fZGVidWdnZXJFbmFibGVkOwogICAgIGJvb2wgbV9hdHRhY2hEZWJ1Z2dlcldoZW5TaG93bjsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBmMjIyMjM5Li41NTFj
YWE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0yMjksNiAr
MjI5LDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKIAogTm9k
ZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZChsb25nIGlkKQogeworICAgIGlmICghaWQp
CisgICAgICAgIHJldHVybiBtYWluRnJhbWVEb2N1bWVudCgpOworCiAgICAgSGFzaE1hcDxsb25n
LCBOb2RlKj46Oml0ZXJhdG9yIGl0ID0gbV9pZFRvTm9kZS5maW5kKGlkKTsKICAgICBpZiAoaXQg
IT0gbV9pZFRvTm9kZS5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggYWY2NWZiNC4uMjllMTNhYyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtMTEyLDE0ICsxMTIsMTAg
QEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVtb3ZlUmVzb3VyY2UobG9uZyBsb25nIGlkZW50
aWZpZXIpCiAgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6dXBkYXRlRm9jdXNlZE5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OnVwZGF0ZUZvY3VzZWROb2RlKGxvbmcgbG9uZyBub2RlSWQpCiB7Ci0gICAgU2NyaXB0T2JqZWN0
IHF1YXJhbnRpbmVkTm9kZTsKLSAgICBpZiAoIWdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KG5v
ZGUsIHF1YXJhbnRpbmVkTm9kZSkpCi0gICAgICAgIHJldHVybjsKLQogICAgIE93blB0cjxTY3Jp
cHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgidXBkYXRlRm9jdXNlZE5v
ZGUiKSk7Ci0gICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHF1YXJhbnRpbmVkTm9kZSk7Cisg
ICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KG5vZGVJZCk7CiAgICAgZnVuY3Rpb24tPmNhbGwo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggN2E0OGI2Mi4u
ZjFmNGNiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC02NCw3ICs2
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCB1cGRhdGVSZXNvdXJjZShs
b25nIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0T2JqZWN0JiByZXNvdXJjZU9iaik7CiAg
ICAgICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2UobG9uZyBsb25nIGlkZW50aWZpZXIpOwogCi0gICAg
ICAgIHZvaWQgdXBkYXRlRm9jdXNlZE5vZGUoTm9kZSogbm9kZSk7CisgICAgICAgIHZvaWQgdXBk
YXRlRm9jdXNlZE5vZGUobG9uZyBsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgc2V0QXR0YWNo
ZWRXaW5kb3coYm9vbCBhdHRhY2hlZCk7CiAgICAgICAgIHZvaWQgaW5zcGVjdGVkV2luZG93U2Ny
aXB0T2JqZWN0Q2xlYXJlZChGcmFtZSogZnJhbWUpOwogICAgICAgICB2b2lkIHNob3dQYW5lbChp
bnQgcGFuZWwpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNv
bGVWaWV3LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCmlu
ZGV4IDY4NTFlZWEuLjRlMzYwYTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9Db25zb2xlVmlldy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29u
c29sZVZpZXcuanMKQEAgLTIxMSwxMSArMjExLDIyIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmll
dy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghZXhwcmVzc2lvblN0cmluZyAmJiAhcHJlZml4
KQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIGlmICghZXhwcmVzc2lvblN0cmluZykK
KyAgICAgICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSAidGhpcyI7CisKICAgICAgICAgdmFyIHJl
cG9ydENvbXBsZXRpb25zID0gdGhpcy5fcmVwb3J0Q29tcGxldGlvbnMuYmluZCh0aGlzLCBiZXN0
TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFja2V0
Tm90YXRpb24sIHByZWZpeCk7Ci0gICAgICAgIHRoaXMuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyhl
eHByZXNzaW9uU3RyaW5nLCByZXBvcnRDb21wbGV0aW9ucyk7CisgICAgICAgIHRoaXMuX2V2YWxJ
bkluc3BlY3RlZFdpbmRvdygiKGZ1bmN0aW9uKCkgeyIgKworICAgICAgICAgICAgInZhciBwcm9w
cyA9W107ICIgKyAKKyAgICAgICAgICAgICJmb3IgKHZhciBwcm9wIGluICgiICsgZXhwcmVzc2lv
blN0cmluZyArICIpKSBwcm9wcy5wdXNoKHByb3ApOyIgKworICAgICAgICAgICAgKCghZG90Tm90
YXRpb24gJiYgIWJyYWNrZXROb3RhdGlvbikgPyAiZm9yICh2YXIgcHJvcCBpbiB3aW5kb3cuX2lu
c3BlY3RvckNvbW1hbmRMaW5lQVBJKSBwcm9wcy5wdXNoKHByb3ApOyIgOiAiIikgKworICAgICAg
ICAgICAgInJldHVybiBwcm9wcy5qb2luKFwiLFwiKTsiICsKKyAgICAgICAgIn0pKCkiLCByZXBv
cnRDb21wbGV0aW9ucyk7CiAgICAgfSwKIAotICAgIF9yZXBvcnRDb21wbGV0aW9uczogZnVuY3Rp
b24oYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrLCBkb3ROb3RhdGlvbiwg
YnJhY2tldE5vdGF0aW9uLCBwcmVmaXgsIHJlc3VsdCkgeworICAgIF9yZXBvcnRDb21wbGV0aW9u
czogZnVuY3Rpb24oYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrLCBkb3RO
b3RhdGlvbiwgYnJhY2tldE5vdGF0aW9uLCBwcmVmaXgsIHJlc3VsdCwgaXNFeGNlcHRpb24pIHsK
KyAgICAgICAgaWYgKGlzRXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAg
IGlmIChicmFja2V0Tm90YXRpb24pIHsKICAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICYm
IHByZWZpeFswXSA9PT0gIiciKQogICAgICAgICAgICAgICAgIHZhciBxdW90ZVVzZWQgPSAiJyI7
CkBAIC0yMjQsMTUgKzIzNSw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUg
PSB7CiAgICAgICAgIH0KIAogICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOwotICAgICAgICB2YXIg
cHJvcGVydGllcyA9IE9iamVjdC5wcm9wZXJ0aWVzKHJlc3VsdCk7Ci0gICAgICAgIGlmICghZG90
Tm90YXRpb24gJiYgIWJyYWNrZXROb3RhdGlvbiAmJiByZXN1bHQuX2luc3BlY3RvckNvbW1hbmRM
aW5lQVBJKSB7Ci0gICAgICAgICAgICB2YXIgY29tbWFuZExpbmVBUEkgPSBPYmplY3QucHJvcGVy
dGllcyhyZXN1bHQuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJKTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY29tbWFuZExpbmVBUEkubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgcHJvcGVydHkgPSBjb21tYW5kTGluZUFQSVtpXTsKLSAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydHkuY2hhckF0KDApICE9PSAiXyIpCi0gICAgICAgICAgICAgICAgICAgIHByb3Bl
cnRpZXMucHVzaChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAg
dmFyIHByb3BlcnRpZXMgPSByZXN1bHQuc3BsaXQoIiwiKTsKICAgICAgICAgcHJvcGVydGllcy5z
b3J0KCk7CiAKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsg
KytpKSB7CkBAIC0yODgsNyArMjkxLDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgaWYgKCFsaW5rIHx8ICFsaW5rLnJlcHJlc2VudGVkTm9kZSkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBXZWJJbnNwZWN0b3IudXBkYXRlRm9jdXNlZE5v
ZGUobGluay5yZXByZXNlbnRlZE5vZGUpOworICAgICAgICBXZWJJbnNwZWN0b3IudXBkYXRlRm9j
dXNlZE5vZGUobGluay5yZXByZXNlbnRlZE5vZGUuX2lkKTsKICAgICAgICAgZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKCk7CiAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgfSwKQEAg
LTMxMyw3MiArMzE2LDM3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuZG9FdmFsSW5XaW5kb3coZXhwcmVzc2lvbiwgY2FsbGJhY2spOwogICAg
IH0sCiAKLSAgICBfZW5zdXJlQ29tbWFuZExpbmVBUElJbnN0YWxsZWQ6IGZ1bmN0aW9uKGluc3Bl
Y3RlZFdpbmRvdykKLSAgICB7Ci0gICAgICAgIGlmICghaW5zcGVjdGVkV2luZG93Ll9pbnNwZWN0
b3JDb21tYW5kTGluZUFQSSkgewotICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93LmV2YWwoIndp
bmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkgPSB7IFwKLSAgICAgICAgICAgICAgICAkOiBm
dW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkLmFwcGx5KGRvY3VtZW50
LCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgICAgICAgICAkJDogZnVuY3Rpb24oKSB7IHJldHVy
biBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsLmFwcGx5KGRvY3VtZW50LCBhcmd1bWVudHMpIH0s
IFwKLSAgICAgICAgICAgICAgICAkeDogZnVuY3Rpb24oeHBhdGgsIGNvbnRleHQpIHsgXAotICAg
ICAgICAgICAgICAgICAgICB2YXIgbm9kZXMgPSBbXTsgXAotICAgICAgICAgICAgICAgICAgICB0
cnkgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9jID0gY29udGV4dCB8fCBkb2N1
bWVudDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBkb2MuZXZhbHVh
dGUoeHBhdGgsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuQU5ZX1RZUEUsIG51bGwpOyBcCi0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZTsgXAotICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKG5vZGUgPSByZXN1bHRzLml0ZXJhdGVOZXh0KCkpIG5vZGVzLnB1c2gobm9kZSk7IFwK
LSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30gXAotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZXM7IFwKLSAgICAgICAgICAgICAgICB9LCBcCi0gICAgICAgICAgICAgICAg
ZGlyOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUuZGlyLmFwcGx5KGNvbnNvbGUsIGFyZ3Vt
ZW50cykgfSwgXAotICAgICAgICAgICAgICAgIGRpcnhtbDogZnVuY3Rpb24oKSB7IHJldHVybiBj
b25zb2xlLmRpcnhtbC5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgICAg
ICAgICBrZXlzOiBmdW5jdGlvbihvKSB7IHZhciBhID0gW107IGZvciAodmFyIGsgaW4gbykgYS5w
dXNoKGspOyByZXR1cm4gYTsgfSwgXAotICAgICAgICAgICAgICAgIHZhbHVlczogZnVuY3Rpb24o
bykgeyB2YXIgYSA9IFtdOyBmb3IgKHZhciBrIGluIG8pIGEucHVzaChvW2tdKTsgcmV0dXJuIGE7
IH0sIFwKLSAgICAgICAgICAgICAgICBwcm9maWxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNv
bGUucHJvZmlsZS5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgICAgICAg
ICBwcm9maWxlRW5kOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUucHJvZmlsZUVuZC5hcHBs
eShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgICAgICAgICBfaW5zcGVjdGVkTm9k
ZXM6IFtdLCBcCi0gICAgICAgICAgICAgICAgZ2V0ICQwKCkgeyByZXR1cm4gX2luc3BlY3RvckNv
bW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1swXSB9LCBcCi0gICAgICAgICAgICAgICAgZ2V0
ICQxKCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1sx
XSB9LCBcCi0gICAgICAgICAgICAgICAgZ2V0ICQyKCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1h
bmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1syXSB9LCBcCi0gICAgICAgICAgICAgICAgZ2V0ICQz
KCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1szXSB9
LCBcCi0gICAgICAgICAgICAgICAgZ2V0ICQ0KCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1hbmRM
aW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1s0XSB9IFwKLSAgICAgICAgICAgIH07Iik7Ci0KLSAgICAg
ICAgICAgIGluc3BlY3RlZFdpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuY2xlYXIgPSBJ
bnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxsYmFjayh0aGlzLmNsZWFyTWVzc2FnZXMuYmluZCh0
aGlzKSk7Ci0gICAgICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuX2luc3BlY3RvckNvbW1hbmRMaW5l
QVBJLmluc3BlY3QgPSBJbnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxsYmFjayhpbnNwZWN0T2Jq
ZWN0LmJpbmQodGhpcykpOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBpbnNwZWN0T2JqZWN0KG8p
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09
IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkuY29uc29sZS5sb2cobyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKE9iamVjdC50eXBlKG8sIEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVk
V2luZG93KCkpID09PSAibm9kZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LnNob3dFbGVtZW50c1BhbmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5w
YW5lbHMuZWxlbWVudHMudHJlZU91dGxpbmUucmV2ZWFsQW5kU2VsZWN0Tm9kZShvKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKE9iamVjdC5k
ZXNjcmliZShvKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiRGF0YWJhc2UiOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93RGF0YWJhc2VzUGFu
ZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmRh
dGFiYXNlcy5zZWxlY3REYXRhYmFzZShvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIlN0b3JhZ2UiOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93RGF0YWJhc2VzUGFuZWwoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmRhdGFiYXNlcy5z
ZWxlY3RET01TdG9yYWdlKG8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9CisgICAgYWRkSW5zcGVjdGVkTm9kZTogZnVuY3Rpb24obm9kZSkKKyAgICB7Cisg
ICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGNhbGxi
YWNrID0gZnVuY3Rpb24oc3VjY2VzcykgeworICAgICAgICB9OworICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyLmFkZEluc3BlY3RlZE5vZGUobm9kZS5faWQsIGNhbGxiYWNrKTsKICAgICB9LAog
Ci0gICAgYWRkSW5zcGVjdGVkTm9kZTogZnVuY3Rpb24obm9kZSkKKyAgICBfaW5zcGVjdE9iamVj
dDogZnVuY3Rpb24obykKICAgICB7Ci0gICAgICAgIHZhciBpbnNwZWN0ZWRXaW5kb3cgPSBJbnNw
ZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOwotICAgICAgICB0aGlzLl9lbnN1cmVD
b21tYW5kTGluZUFQSUluc3RhbGxlZChpbnNwZWN0ZWRXaW5kb3cpOwotICAgICAgICB2YXIgaW5z
cGVjdGVkTm9kZXMgPSBpbnNwZWN0ZWRXaW5kb3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9p
bnNwZWN0ZWROb2RlczsKLSAgICAgICAgaW5zcGVjdGVkTm9kZXMudW5zaGlmdChub2RlKTsKLSAg
ICAgICAgaWYgKGluc3BlY3RlZE5vZGVzLmxlbmd0aCA+PSA1KQotICAgICAgICAgICAgaW5zcGVj
dGVkTm9kZXMucG9wKCk7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVk
V2luZG93KCkuY29uc29sZS5sb2cobyk7CisgICAgICAgIC8vIFRPRE86IGZpeCBzb21ldGhpbmcg
aGVyZS4KKyAgICAgICAgaWYgKE9iamVjdC50eXBlKG8sIEluc3BlY3RvckNvbnRyb2xsZXIuaW5z
cGVjdGVkV2luZG93KCkpID09PSAibm9kZSIpIHsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5z
aG93RWxlbWVudHNQYW5lbCgpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVt
ZW50cy50cmVlT3V0bGluZS5yZXZlYWxBbmRTZWxlY3ROb2RlKG8pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgc3dpdGNoIChPYmplY3QuZGVzY3JpYmUobykpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlICJEYXRhYmFzZSI6CisgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5z
aG93RGF0YWJhc2VzUGFuZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBh
bmVscy5kYXRhYmFzZXMuc2VsZWN0RGF0YWJhc2Uobyk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgIlN0b3JhZ2UiOgorICAgICAgICAgICAgICAgICAg
ICBXZWJJbnNwZWN0b3Iuc2hvd0RhdGFiYXNlc1BhbmVsKCk7CisgICAgICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzLnNlbGVjdERPTVN0b3JhZ2Uobyk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfSwK
IAogICAgIGRvRXZhbEluV2luZG93OiBmdW5jdGlvbihleHByZXNzaW9uLCBjYWxsYmFjaykKQEAg
LTM4OCwyMiArMzU2LDE4IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICBleHByZXNzaW9uID0gInRoaXMiOwogICAgICAgICB9CiAKLSAgICAgICAg
Ly8gU3Vycm91bmQgdGhlIGV4cHJlc3Npb24gaW4gd2l0aCBzdGF0ZW1lbnRzIHRvIGluamVjdCBv
dXIgY29tbWFuZCBsaW5lIEFQSSBzbyB0aGF0Ci0gICAgICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0
IHByb3BlcnRpZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rp
b25zLgotICAgICAgICBleHByZXNzaW9uID0gIndpdGggKHdpbmRvdy5faW5zcGVjdG9yQ29tbWFu
ZExpbmVBUEkpIHsgd2l0aCAod2luZG93KSB7ICIgKyBleHByZXNzaW9uICsgIiB9IH0iOwotCiAg
ICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgZnVuY3Rpb24gZGVsYXllZEV2YWx1YXRp
b24oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgaW5zcGVjdGVkV2luZG93ID0gSW5zcGVj
dG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKTsKLSAgICAgICAgICAgIHNlbGYuX2Vuc3Vy
ZUNvbW1hbmRMaW5lQVBJSW5zdGFsbGVkKGluc3BlY3RlZFdpbmRvdyk7Ci0gICAgICAgICAgICB0
cnkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrKGluc3BlY3RlZFdpbmRvdy5ldmFsKGV4cHJl
c3Npb24pKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICBjYWxs
YmFjayhlLCB0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzZXRUaW1l
b3V0KGRlbGF5ZWRFdmFsdWF0aW9uLCAwKTsKKyAgICAgICAgdmFyIGV2YWxDYWxsYmFjayA9IGZ1
bmN0aW9uKHJlc3VsdCkgeworICAgICAgICAgICAgaWYgKHJlc3VsdC5leGNlcHRpb24pCisgICAg
ICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0LmV4Y2VwdGlvbiwgdHJ1ZSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChyZXN1bHQuY2xlYXJSZXF1ZXN0ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5j
bGVhck1lc3NhZ2VzKCkKKyAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5pbnNwZWN0UmVxdWVz
dGVkKQorICAgICAgICAgICAgICAgIHNlbGYuaW5zcGVjdE9iamVjdChyZXN1bHQudmFsdWUpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdC52YWx1ZSwg
ZmFsc2UpOworICAgICAgICB9OworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmV2YWx1YXRl
KGV4cHJlc3Npb24sIGV2YWxDYWxsYmFjayk7CiAgICAgfSwKIAogICAgIF9lbnRlcktleVByZXNz
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtNTEzLDcgKzQ3Nyw3IEBAIFdlYkluc3BlY3Rvci5Db25z
b2xlVmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBfZm9ybWF0b2JqZWN0OiBmdW5jdGlvbihvYmos
IGVsZW0pCiAgICAgewotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKG5ldyBXZWJJbnNwZWN0b3Iu
T2JqZWN0UHJvcGVydGllc1NlY3Rpb24obmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcm94eShvYmop
LCBPYmplY3QuZGVzY3JpYmUob2JqLCB0cnVlKSwgbnVsbCwgbnVsbCwgdHJ1ZSkuZWxlbWVudCk7
CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0
aWVzU2VjdGlvbihvYmosIG9iai5kZXNjcmlwdGlvbiwgbnVsbCwgdHJ1ZSkuZWxlbWVudCk7CiAg
ICAgfSwKIAogICAgIF9mb3JtYXRlcnJvcjogZnVuY3Rpb24ob2JqLCBlbGVtKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDVhYWNkNDEuLjc4ZTNjMjIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTUwLDggKzUwLDggQEAgV2Vi
SW5zcGVjdG9yLkRPTU5vZGUgPSBmdW5jdGlvbihkb2MsIHBheWxvYWQpIHsKICAgICB0aGlzLmZp
cnN0Q2hpbGQgPSBudWxsOwogICAgIHRoaXMucGFyZW50Tm9kZSA9IG51bGw7CiAKLSAgICBpZiAo
cGF5bG9hZC5jaGlsZE5vZGVzKQotICAgICAgICB0aGlzLl9zZXRDaGlsZHJlblBheWxvYWQocGF5
bG9hZC5jaGlsZE5vZGVzKTsKKyAgICBpZiAocGF5bG9hZC5jaGlsZHJlbikKKyAgICAgICAgdGhp
cy5fc2V0Q2hpbGRyZW5QYXlsb2FkKHBheWxvYWQuY2hpbGRyZW4pOwogCiAgICAgdGhpcy5fY29t
cHV0ZWRTdHlsZSA9IG51bGw7CiAgICAgdGhpcy5zdHlsZSA9IG51bGw7CkBAIC0zMDIsMjMgKzMw
Miw4IEBAIFdlYkluc3BlY3Rvci5ET01BZ2VudCA9IGZ1bmN0aW9uKCkgewogICAgIHRoaXMuX2lk
VG9ET01Ob2RlID0gbnVsbDsKICAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKIAotICAgIC8vIElu
c3RhbGwgb25wb3B1bGF0ZSBoYW5kbGVyLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IG1lYXN1cmUuCi0g
ICAgLy8gVE9ETzogYWRkIHRoaXMgY29kZSBpbnRvIHRoZSBvcmlnaW5hbCB1cGRhdGVDaGlsZHJl
biBvbmNlIGRvbUFnZW50Ci0gICAgLy8gYmVjb21lcyBwcmltYXJ5IHNvdXJjZSBvZiBET00gaW5m
b3JtYXRpb24uCi0gICAgLy8gVE9ETzI6IHVwZGF0ZSBFbGVtZW50c1BhbmVsIHRvIG5vdCB0cmFj
ayBlbWJlZGRlZCBpZnJhbWVzIC0gaXQgaXMgYWxyZWFkeSBiZWluZyBoYW5kbGVkCisgICAgLy8g
VE9ETzogdXBkYXRlIEVsZW1lbnRzUGFuZWwgdG8gbm90IHRyYWNrIGVtYmVkZGVkIGlmcmFtZXMg
LSBpdCBpcyBhbHJlYWR5IGJlaW5nIGhhbmRsZWQKICAgICAvLyBpbiB0aGUgYWdlbnQgYmFja2Vu
ZC4KLSAgICB2YXIgZG9tQWdlbnQgPSB0aGlzOwotICAgIHZhciBvcmlnaW5hbFVwZGF0ZUNoaWxk
cmVuID0gV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZUNo
aWxkcmVuOwotICAgIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS51
cGRhdGVDaGlsZHJlbiA9IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGRvbUFnZW50LmdldENo
aWxkTm9kZXNBc3luYyh0aGlzLnJlcHJlc2VudGVkT2JqZWN0LCBvcmlnaW5hbFVwZGF0ZUNoaWxk
cmVuLmJpbmQodGhpcykpOwotICAgIH07Ci0KLSAgICAvLyBNdXRlIGNvbnNvbGUgaGFuZGxlIHRv
IGF2b2lkIGNyYXNoIG9uIHNlbGVjdGlvbiBjaGFuZ2UuCi0gICAgLy8gVE9ETzogUmUtaW1wbGVt
ZW50IGluc3BlY3RvckNvbnNvbGVBUEkgdG8gd29yayBpbiBhIHNlcmlhbGl6ZWQgd2F5IGFuZCBy
ZW1vdmUgdGhpcyB3b3JrYXJvdW5kLgotICAgIFdlYkluc3BlY3Rvci5Db25zb2xlLnByb3RvdHlw
ZS5hZGRJbnNwZWN0ZWROb2RlID0gZnVuY3Rpb24oKQotICAgIHsKLSAgICB9OwogCiAgICAgLy8g
V2hpdGVzcGFjZSBpcyBpZ25vcmVkIGluIEluc3BlY3RvckRPTUFnZW50IGFscmVhZHkgLT4gbm8g
bmVlZCB0byBmaWx0ZXIuCiAgICAgLy8gVE9ETzogRWl0aGVyIHJlbW92ZSBhbGwgb2YgaXRzIHVz
YWdlcyBvciBwdXNoIHZhbHVlIGludG8gdGhlIGFnZW50IGJhY2tlbmQuCkBAIC0zODMsNyArMzY4
LDcgQEAgV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgbm9kZS5f
c2V0QXR0cmlidXRlc1BheWxvYWQoYXR0cnNBcnJheSk7CiAgICAgfSwKIAotICAgIGdldE5vZGVG
b3JJZDogZnVuY3Rpb24obm9kZUlkKSB7CisgICAgbm9kZUZvcklkOiBmdW5jdGlvbihub2RlSWQp
IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9ET01Ob2RlW25vZGVJZF07CiAgICAgfSwKIApA
QCAtNjE5LDEwNiArNjA0LDEwMSBAQCBXZWJJbnNwZWN0b3IuZGlkQXBwbHlEb21DaGFuZ2UgPSBX
ZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogV2ViSW5zcGVjdG9yLmRpZFJl
bW92ZUF0dHJpYnV0ZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBX
ZWJJbnNwZWN0b3IuZGlkU2V0VGV4dE5vZGVWYWx1ZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5w
cm9jZXNzQ2FsbGJhY2s7CiAKLS8vIFRlbXBvcmFyeSBtZXRob2RzIGZvciBET01BZ2VudCBtaWdy
YXRpb24uCi1XZWJJbnNwZWN0b3Iud3JhcE5vZGVXaXRoU3R5bGVzID0gZnVuY3Rpb24obm9kZSwg
c3R5bGVzKQotewotICAgIHZhciB3aW5kb3dTdHViID0gbmV3IFdlYkluc3BlY3Rvci5ET01XaW5k
b3cobnVsbCk7Ci0gICAgdmFyIGRvY1N0dWIgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTURvY3VtZW50
KG51bGwsIHdpbmRvd1N0dWIpOwotICAgIHZhciBwYXlsb2FkID0ge307Ci0gICAgcGF5bG9hZC5u
b2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7Ci0gICAgcGF5bG9hZC5ub2RlTmFtZSA9IG5vZGUubm9k
ZU5hbWU7Ci0gICAgcGF5bG9hZC5ub2RlVmFsdWUgPSBub2RlLm5vZGVWYWx1ZTsKLSAgICBwYXls
b2FkLmF0dHJpYnV0ZXMgPSBbXTsKLSAgICBwYXlsb2FkLmNoaWxkTm9kZUNvdW50ID0gMDsKLQot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIHZhciBhdHRyID0gbm9kZS5hdHRyaWJ1dGVzW2ldOwotICAgICAgICBwYXlsb2FkLmF0
dHJpYnV0ZXMucHVzaChhdHRyLm5hbWUpOwotICAgICAgICBwYXlsb2FkLmF0dHJpYnV0ZXMucHVz
aChhdHRyLnZhbHVlKTsKLSAgICB9Ci0gICAgdmFyIG5vZGVTdHViID0gbmV3IFdlYkluc3BlY3Rv
ci5ET01Ob2RlKGRvY1N0dWIsIHBheWxvYWQpOwotICAgIG5vZGVTdHViLl9zZXRTdHlsZXMoc3R5
bGVzLmNvbXB1dGVkU3R5bGUsIHN0eWxlcy5pbmxpbmVTdHlsZSwgc3R5bGVzLnN0eWxlQXR0cmli
dXRlcywgc3R5bGVzLm1hdGNoZWRDU1NSdWxlcyk7Ci0gICAgcmV0dXJuIG5vZGVTdHViOwotfQot
CiAvLyBUZW1wb3JhcnkgbWV0aG9kcyB0aGF0IHdpbGwgYmUgZGlzcGF0Y2hlZCB2aWEgSW5zcGVj
dG9yQ29udHJvbGxlciBpbnRvIHRoZSBpbmplY3RlZCBjb250ZXh0LgogSW5zcGVjdG9yQ29udHJv
bGxlci5nZXRTdHlsZXMgPSBmdW5jdGlvbihub2RlSWQsIGF1dGhvck9ubHksIGNhbGxiYWNrKQog
ewogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKEluamVjdGVk
U2NyaXB0LmdldFN0eWxlcyhub2RlSWQsIGF1dGhvck9ubHkpKTsKLSAgICB9LCAwKQorICAgIH0s
IDApOwogfQogCiBJbnNwZWN0b3JDb250cm9sbGVyLmdldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlv
bihub2RlSWQsIGNhbGxiYWNrKQogewogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAg
ICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LmdldENvbXB1dGVkU3R5bGUobm9kZUlkKSk7Ci0g
ICAgfSwgMCkKKyAgICB9LCAwKTsKIH0KIAogSW5zcGVjdG9yQ29udHJvbGxlci5nZXRJbmxpbmVT
dHlsZSA9IGZ1bmN0aW9uKG5vZGVJZCwgY2FsbGJhY2spCiB7CiAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKICAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuZ2V0SW5saW5lU3R5bGUo
bm9kZUlkKSk7Ci0gICAgfSwgMCkKKyAgICB9LCAwKTsKIH0KIAogSW5zcGVjdG9yQ29udHJvbGxl
ci5hcHBseVN0eWxlVGV4dCA9IGZ1bmN0aW9uKHN0eWxlSWQsIHN0eWxlVGV4dCwgcHJvcGVydHlO
YW1lLCBjYWxsYmFjaykKIHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBj
YWxsYmFjayhJbmplY3RlZFNjcmlwdC5hcHBseVN0eWxlVGV4dChzdHlsZUlkLCBzdHlsZVRleHQs
IHByb3BlcnR5TmFtZSkpOwotICAgIH0sIDApCisgICAgfSwgMCk7CiB9CiAKIEluc3BlY3RvckNv
bnRyb2xsZXIuc2V0U3R5bGVUZXh0ID0gZnVuY3Rpb24oc3R5bGUsIGNzc1RleHQsIGNhbGxiYWNr
KQogewogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKEluamVj
dGVkU2NyaXB0LnNldFN0eWxlVGV4dChzdHlsZSwgY3NzVGV4dCkpOwotICAgIH0sIDApCisgICAg
fSwgMCk7CiB9CiAKIEluc3BlY3RvckNvbnRyb2xsZXIudG9nZ2xlU3R5bGVFbmFibGVkID0gZnVu
Y3Rpb24oc3R5bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNhYmxlZCwgY2FsbGJhY2spCiB7CiAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQu
dG9nZ2xlU3R5bGVFbmFibGVkKHN0eWxlSWQsIHByb3BlcnR5TmFtZSwgZGlzYWJsZWQpKTsKLSAg
ICB9LCAwKQorICAgIH0sIDApOwogfQogCiBJbnNwZWN0b3JDb250cm9sbGVyLmFwcGx5U3R5bGVS
dWxlVGV4dCA9IGZ1bmN0aW9uKHJ1bGVJZCwgbmV3Q29udGVudCwgc2VsZWN0ZWROb2RlLCBjYWxs
YmFjaykKIHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBjYWxsYmFjayhJ
bmplY3RlZFNjcmlwdC5hcHBseVN0eWxlUnVsZVRleHQocnVsZUlkLCBuZXdDb250ZW50LCBzZWxl
Y3RlZE5vZGUpKTsKLSAgICB9LCAwKQorICAgIH0sIDApOwogfQogCiBJbnNwZWN0b3JDb250cm9s
bGVyLmFkZFN0eWxlU2VsZWN0b3IgPSBmdW5jdGlvbihuZXdDb250ZW50LCBjYWxsYmFjaykKIHsK
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNj
cmlwdC5hZGRTdHlsZVNlbGVjdG9yKG5ld0NvbnRlbnQpKTsKLSAgICB9LCAwKQorICAgIH0sIDAp
OwogfQogCi1JbnNwZWN0b3JDb250cm9sbGVyLnNldFN0eWxlUHJvcGVydHkgPSBmdW5jdGlvbihz
dHlsZUlkLCBuYW1lLCB2YWx1ZSwgY2FsbGJhY2spIHsKK0luc3BlY3RvckNvbnRyb2xsZXIuc2V0
U3R5bGVQcm9wZXJ0eSA9IGZ1bmN0aW9uKHN0eWxlSWQsIG5hbWUsIHZhbHVlLCBjYWxsYmFjaykK
K3sKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBjYWxsYmFjayhJbmplY3Rl
ZFNjcmlwdC5zZXRTdHlsZVByb3BlcnR5KHN0eWxlSWQsIG5hbWUsIHZhbHVlKSk7Ci0gICAgfSwg
MCkKKyAgICB9LCAwKTsKIH0KIAotSW5zcGVjdG9yQ29udHJvbGxlci5nZXRQcm90b3R5cGVzID0g
ZnVuY3Rpb24ob2JqZWN0UHJveHksIGNhbGxiYWNrKSB7CitJbnNwZWN0b3JDb250cm9sbGVyLmdl
dFByb3RvdHlwZXMgPSBmdW5jdGlvbihub2RlSWQsIGNhbGxiYWNrKQorewogICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LmdldFByb3Rv
dHlwZXMob2JqZWN0UHJveHkpKTsKLSAgICB9LCAwKQorICAgICAgICBjYWxsYmFjayhJbmplY3Rl
ZFNjcmlwdC5nZXRQcm90b3R5cGVzKG5vZGVJZCkpOworICAgIH0sIDApOwogfQogCi1JbnNwZWN0
b3JDb250cm9sbGVyLmdldFByb3BlcnRpZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgaWdub3Jl
SGFzT3duUHJvcGVydHksIGNhbGxiYWNrKSB7CitJbnNwZWN0b3JDb250cm9sbGVyLmdldFByb3Bl
cnRpZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHksIGNhbGxi
YWNrKQorewogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKElu
amVjdGVkU2NyaXB0LmdldFByb3BlcnRpZXMob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3Bl
cnR5KSk7Ci0gICAgfSwgMCkKKyAgICB9LCAwKTsKIH0KIAotSW5zcGVjdG9yQ29udHJvbGxlci5z
ZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIHByb3BlcnR5TmFtZSwgZXhw
cmVzc2lvbiwgY2FsbGJhY2spIHsKK0luc3BlY3RvckNvbnRyb2xsZXIuc2V0UHJvcGVydHlWYWx1
ZSA9IGZ1bmN0aW9uKG9iamVjdFByb3h5LCBwcm9wZXJ0eU5hbWUsIGV4cHJlc3Npb24sIGNhbGxi
YWNrKQorewogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKElu
amVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUob2JqZWN0UHJveHksIHByb3BlcnR5TmFtZSwg
ZXhwcmVzc2lvbikpOwotICAgIH0sIDApCisgICAgfSwgMCk7CiB9CiAKK0luc3BlY3RvckNvbnRy
b2xsZXIuZXZhbHVhdGUgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjYWxsYmFjaykKK3sKKyAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNjcmlwdC5l
dmFsdWF0ZShleHByZXNzaW9uKSk7CisgICAgfSwgMCk7Cit9CisKK0luc3BlY3RvckNvbnRyb2xs
ZXIuYWRkSW5zcGVjdGVkTm9kZSA9IGZ1bmN0aW9uKG5vZGVJZCwgY2FsbGJhY2spCit7CisgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQu
YWRkSW5zcGVjdGVkTm9kZShub2RlSWQpKTsKKyAgICB9LCAwKTsKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKaW5kZXggZWY1MzIw
OS4uNDllYjNiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzVHJlZU91dGxpbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzVHJlZU91dGxpbmUuanMKQEAgLTgzLDcgKzgzLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRz
VHJlZU91dGxpbmUucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5mb2N1c2VkTm9kZUNo
YW5nZWQoKTsKIAogICAgICAgICAgICAgaWYgKHggJiYgIXRoaXMuc3VwcHJlc3NTZWxlY3RIaWdo
bGlnaHQpIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmhpZ2hsaWdodERP
TU5vZGUoeCk7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5oaWdobGlnaHRE
T01Ob2RlKHguX2lkKTsKIAogICAgICAgICAgICAgICAgIGlmICgiX3Jlc3RvcmVQcmV2aW91c0hp
Z2hsaWdodE5vZGVUaW1lb3V0IiBpbiB0aGlzKQogICAgICAgICAgICAgICAgICAgICBjbGVhclRp
bWVvdXQodGhpcy5fcmVzdG9yZVByZXZpb3VzSGlnaGxpZ2h0Tm9kZVRpbWVvdXQpOwpAQCAtOTIs
NyArOTIsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB2YXIgaG92ZXJlZE5vZGUg
PSBXZWJJbnNwZWN0b3IuaG92ZXJlZERPTU5vZGU7CiAgICAgICAgICAgICAgICAgICAgIGlmICho
b3ZlcmVkTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIu
aGlnaGxpZ2h0RE9NTm9kZShob3ZlcmVkTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyLmhpZ2hsaWdodERPTU5vZGUoaG92ZXJlZE5vZGUuX2lkKTsKICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9y
Q29udHJvbGxlci5oaWRlRE9NTm9kZUhpZ2hsaWdodCgpOwogICAgICAgICAgICAgICAgIH0KQEAg
LTM4Nyw5ICszODcsMTQgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90
eXBlID0gewogCiAgICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTsKICAgICB9LAotCisgICAg
CiAgICAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKGZ1bGxSZWZyZXNoKQogICAgIHsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmdldENoaWxkTm9kZXNBc3luYyh0aGlzLnJlcHJlc2Vu
dGVkT2JqZWN0LCB0aGlzLl91cGRhdGVDaGlsZHJlbi5iaW5kKHRoaXMsIGZ1bGxSZWZyZXNoKSk7
CisgICAgfSwKKworICAgIF91cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24oZnVsbFJlZnJlc2gpCisg
ICAgewogICAgICAgICBpZiAoZnVsbFJlZnJlc2gpIHsKICAgICAgICAgICAgIHZhciBzZWxlY3Rl
ZFRyZWVFbGVtZW50ID0gdGhpcy50cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50OwogICAg
ICAgICAgICAgaWYgKHNlbGVjdGVkVHJlZUVsZW1lbnQgJiYgc2VsZWN0ZWRUcmVlRWxlbWVudC5o
YXNBbmNlc3Rvcih0aGlzKSkKQEAgLTY5Myw3ICs2OTgsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXBh
cnNlRWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgIEluc3BlY3RvckNvbnRy
b2xsZXIuaW5zcGVjdGVkV2luZG93KCkuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRl
LmNhbGwodGhpcy5yZXByZXNlbnRlZE9iamVjdCwgYXR0cmlidXRlTmFtZSk7CisgICAgICAgICAg
ICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsK
ICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpdGxlKCk7CiAgICAgICAgICAgICBtb3ZlVG9OZXh0
QXR0cmlidXRlSWZOZWVkZWQuY2FsbCh0aGlzKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTcw
NCwxMiArNzA5LDEyIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgICAgIHZhciBhdHRyID0gcGFyc2VFbGVtZW50LmF0dHJpYnV0ZXNbaV07
CiAgICAgICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZm91bmRPcmlnaW5hbEF0dHJp
YnV0ZSB8fCBhdHRyLm5hbWUgPT09IGF0dHJpYnV0ZU5hbWU7CiAgICAgICAgICAgICB0cnkgewot
ICAgICAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkuRWxl
bWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwodGhpcy5yZXByZXNlbnRlZE9iamVjdCwg
YXR0ci5uYW1lLCBhdHRyLnZhbHVlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlcHJlc2VudGVk
T2JqZWN0LnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpOwogICAgICAgICAgICAg
fSBjYXRjaChlKSB7fSAvLyBpZ25vcmUgaW52YWxpZCBhdHRyaWJ1dGUgKGlubmVySFRNTCBkb2Vz
bid0IHRocm93IGVycm9ycywgYnV0IHRoaXMgY2FuKQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlKQotICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ci5pbnNwZWN0ZWRXaW5kb3coKS5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUuY2Fs
bCh0aGlzLnJlcHJlc2VudGVkT2JqZWN0LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIHRo
aXMucmVwcmVzZW50ZWRPYmplY3QucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwogCiAg
ICAgICAgIHRoaXMuX3VwZGF0ZVRpdGxlKCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9JbmplY3RlZFNjcmlwdC5qcwppbmRleCA0NjExYjQ4Li5lMDFkNGI2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCkBAIC00MDUsNiArNDA1
LDcgQEAgSW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKG9iamVjdFByb3h5
LCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdmFy
IHByb3BlcnRpZXMgPSBbXTsKKwogICAgIC8vIEdvIG92ZXIgcHJvcGVydGllcywgcHJlcGFyZSBy
ZXN1bHRzLgogICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBvYmplY3QpIHsKICAgICAgICAg
aWYgKCFpZ25vcmVIYXNPd25Qcm9wZXJ0eSAmJiAiaGFzT3duUHJvcGVydHkiIGluIG9iamVjdCAm
JiAhb2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpCkBAIC00MTUsMjkgKzQxNiwz
MSBAQCBJbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ob2JqZWN0UHJveHks
IGlnbm9yZUhhc093blByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHZh
ciBwcm9wZXJ0eSA9IHt9OwogICAgICAgICBwcm9wZXJ0eS5uYW1lID0gcHJvcGVydHlOYW1lOwor
ICAgICAgICBwcm9wZXJ0eS5wYXJlbnRPYmplY3RQcm94eSA9IG9iamVjdFByb3h5OwogICAgICAg
ICB2YXIgaXNHZXR0ZXIgPSBvYmplY3RbIl9fbG9va3VwR2V0dGVyX18iXSAmJiBvYmplY3QuX19s
b29rdXBHZXR0ZXJfXyhwcm9wZXJ0eU5hbWUpOwogICAgICAgICBpZiAoIXByb3BlcnR5LmlzR2V0
dGVyKSB7CiAgICAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBvYmplY3RbcHJvcGVydHlOYW1l
XTsKLSAgICAgICAgICAgIHByb3BlcnR5LnR5cGUgPSB0eXBlb2YgY2hpbGRPYmplY3Q7Ci0gICAg
ICAgICAgICBwcm9wZXJ0eS50ZXh0Q29udGVudCA9IE9iamVjdC5kZXNjcmliZShjaGlsZE9iamVj
dCwgdHJ1ZSk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS5wYXJlbnRPYmplY3RQcm94eSA9IG9iamVj
dFByb3h5OwotICAgICAgICAgICAgdmFyIHBhcmVudFBhdGggPSBvYmplY3RQcm94eS5wYXRoLnNs
aWNlKCk7Ci0gICAgICAgICAgICBwcm9wZXJ0eS5jaGlsZE9iamVjdFByb3h5ID0gewotICAgICAg
ICAgICAgICAgIG9iamVjdElkIDogb2JqZWN0UHJveHkub2JqZWN0SWQsCi0gICAgICAgICAgICAg
ICAgcGF0aCA6IHBhcmVudFBhdGguc3BsaWNlKHBhcmVudFBhdGgubGVuZ3RoLCAwLCBwcm9wZXJ0
eU5hbWUpLAotICAgICAgICAgICAgICAgIHByb3RvRGVwdGggOiBvYmplY3RQcm94eS5wcm90b0Rl
cHRoCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgaWYgKGNoaWxkT2JqZWN0ICYmIChwcm9w
ZXJ0eS50eXBlID09PSAib2JqZWN0IiB8fCBwcm9wZXJ0eS50eXBlID09PSAiZnVuY3Rpb24iKSkg
eworICAgICAgICAgICAgdmFyIGNoaWxkT2JqZWN0UHJveHkgPSB7fTsKKyAgICAgICAgICAgIGNo
aWxkT2JqZWN0UHJveHkub2JqZWN0SWQgPSBvYmplY3RQcm94eS5vYmplY3RJZDsKKyAgICAgICAg
ICAgIGNoaWxkT2JqZWN0UHJveHkucGF0aCA9IG9iamVjdFByb3h5LnBhdGggPyBvYmplY3RQcm94
eS5wYXRoLnNsaWNlKCkgOiBbXTsKKyAgICAgICAgICAgIGNoaWxkT2JqZWN0UHJveHkucGF0aC5w
dXNoKHByb3BlcnR5TmFtZSk7CisKKyAgICAgICAgICAgIGNoaWxkT2JqZWN0UHJveHkucHJvdG9E
ZXB0aCA9IG9iamVjdFByb3h5LnByb3RvRGVwdGggfHwgMDsKKyAgICAgICAgICAgIGNoaWxkT2Jq
ZWN0UHJveHkuZGVzY3JpcHRpb24gPSBPYmplY3QuZGVzY3JpYmUoY2hpbGRPYmplY3QsIHRydWUp
OworICAgICAgICAgICAgcHJvcGVydHkudmFsdWUgPSBjaGlsZE9iamVjdFByb3h5OworCisgICAg
ICAgICAgICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZE9iamVjdDsKKyAgICAgICAgICAgIGlmICh0
eXBlID09PSAib2JqZWN0IiB8fCB0eXBlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAg
ICAgZm9yICh2YXIgc3ViUHJvcGVydHlOYW1lIGluIGNoaWxkT2JqZWN0KSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICJfX3RyZWVFbGVtZW50SWRlbnRpZmllciIp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHkuaGFzQ2hpbGRyZW4gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBjaGlsZE9i
amVjdFByb3h5Lmhhc0NoaWxkcmVuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHNob3cgc29tZXRoaW5nIGxpa2UgImdldHRl
ciIgKGJ1ZyAxNjczNCkuCi0gICAgICAgICAgICBwcm9wZXJ0eS50ZXh0Q29udGVudCA9ICJcdTIw
MTQiOyAvLyBlbSBkYXNoCisgICAgICAgICAgICBwcm9wZXJ0eS52YWx1ZSA9IHsgZGVzY3JpcHRp
b246ICJcdTIwMTQiIH07IC8vIGVtIGRhc2gKICAgICAgICAgICAgIHByb3BlcnR5LmlzR2V0dGVy
ID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOwpA
QCAtNDc5LDYgKzQ4Miw4MSBAQCBJbmplY3RlZFNjcmlwdC5zZXRQcm9wZXJ0eVZhbHVlID0gZnVu
Y3Rpb24ob2JqZWN0UHJveHksIHByb3BlcnR5TmFtZSwgZXhwcmVzc2lvbgogICAgIH0KIH0KIAor
SW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUgPSBmdW5jdGlvbihleHByZXNzaW9uKQoreworICAgIElu
amVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCgpOworICAgIC8vIFN1
cnJvdW5kIHRoZSBleHByZXNzaW9uIGluIHdpdGggc3RhdGVtZW50cyB0byBpbmplY3Qgb3VyIGNv
bW1hbmQgbGluZSBBUEkgc28gdGhhdAorICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0IHByb3BlcnRp
ZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rpb25zLgorICAg
IGV4cHJlc3Npb24gPSAid2l0aCAod2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeyB3
aXRoICh3aW5kb3cpIHsgIiArIGV4cHJlc3Npb24gKyAiIH0gfSI7CisgICAgdmFyIHJlc3VsdCA9
IHt9OworICAgIHRyeSB7CisgICAgICAgIHZhciBjb21tYW5kTGluZUFQSSA9IEluamVjdGVkU2Ny
aXB0Ll93aW5kb3coKS5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEk7CisgICAgICAgIGNvbW1hbmRM
aW5lQVBJLl9jbGVhckNvbnNvbGVSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICAgICAgY29tbWFuZExp
bmVBUEkuX29iamVjdFRvSW5zcGVjdCA9IG51bGw7CisKKyAgICAgICAgdmFyIHZhbHVlID0gSW5q
ZWN0ZWRTY3JpcHQuX3dpbmRvdygpLmV2YWwoZXhwcmVzc2lvbik7CisgICAgICAgIHZhciB0eXBl
ID0gdHlwZW9mIHZhbHVlOworICAgICAgICByZXN1bHQudmFsdWUgPSBJbnNwZWN0b3JDb250cm9s
bGVyLndyYXBPYmplY3QodmFsdWUpOworICAgICAgICBpZiAoY29tbWFuZExpbmVBUEkuX2NsZWFy
Q29uc29sZVJlcXVlc3RlZCkKKyAgICAgICAgICAgIHJlc3VsdC5jbGVhclJlcXVlc3RlZCA9IHRy
dWU7CisgICAgICAgIGlmIChjb21tYW5kTGluZUFQSS5fb2JqZWN0VG9JbnNwZWN0KQorICAgICAg
ICAgICAgcmVzdWx0Lmluc3BlY3RPYmplY3QgPSBJbnNwZWN0b3JDb250cm9sbGVyLndyYXBPYmpl
Y3QoY29tbWFuZExpbmVBUEkuX29iamVjdFRvSW5zcGVjdCk7CisgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICByZXN1bHQuZXhjZXB0aW9uID0gZS50b1N0cmluZygpOworICAgIH0KKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitJbmplY3RlZFNjcmlwdC5hZGRJbnNwZWN0ZWROb2RlID0gZnVuY3Rp
b24obm9kZUlkKQoreworICAgIHZhciBub2RlID0gSW5qZWN0ZWRTY3JpcHQuX25vZGVGb3JJZChu
b2RlSWQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW5q
ZWN0ZWRTY3JpcHQuX2Vuc3VyZUNvbW1hbmRMaW5lQVBJSW5zdGFsbGVkKCk7CisgICAgdmFyIGlu
c3BlY3RlZE5vZGVzID0gSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLl9pbnNwZWN0b3JDb21tYW5k
TGluZUFQSS5faW5zcGVjdGVkTm9kZXM7CisgICAgaW5zcGVjdGVkTm9kZXMudW5zaGlmdChub2Rl
KTsKKyAgICBpZiAoaW5zcGVjdGVkTm9kZXMubGVuZ3RoID49IDUpCisgICAgICAgIGluc3BlY3Rl
ZE5vZGVzLnBvcCgpOworICAgIHJldHVybiB0cnVlOworfQorCitJbmplY3RlZFNjcmlwdC5fZW5z
dXJlQ29tbWFuZExpbmVBUElJbnN0YWxsZWQgPSBmdW5jdGlvbihpbnNwZWN0ZWRXaW5kb3cpCit7
CisgICAgaWYgKCFJbmplY3RlZFNjcmlwdC5fd2luZG93KCkuX2luc3BlY3RvckNvbW1hbmRMaW5l
QVBJKSB7CisgICAgICAgIEluamVjdGVkU2NyaXB0Ll93aW5kb3coKS5ldmFsKCJ3aW5kb3cuX2lu
c3BlY3RvckNvbW1hbmRMaW5lQVBJID0geyBcCisgICAgICAgICAgICAkOiBmdW5jdGlvbigpIHsg
cmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkLmFwcGx5KGRvY3VtZW50LCBhcmd1bWVudHMp
IH0sIFwKKyAgICAgICAgICAgICQkOiBmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3JBbGwuYXBwbHkoZG9jdW1lbnQsIGFyZ3VtZW50cykgfSwgXAorICAgICAgICAgICAg
JHg6IGZ1bmN0aW9uKHhwYXRoLCBjb250ZXh0KSB7IFwKKyAgICAgICAgICAgICAgICB2YXIgbm9k
ZXMgPSBbXTsgXAorICAgICAgICAgICAgICAgIHRyeSB7IFwKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGRvYyA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7IFwKKyAgICAgICAgICAgICAgICAgICAgdmFy
IHJlc3VsdHMgPSBkb2MuZXZhbHVhdGUoeHBhdGgsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuQU5Z
X1RZUEUsIG51bGwpOyBcCisgICAgICAgICAgICAgICAgICAgIHZhciBub2RlOyBcCisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChub2RlID0gcmVzdWx0cy5pdGVyYXRlTmV4dCgpKSBub2Rlcy5w
dXNoKG5vZGUpOyBcCisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30gXAorICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlczsgXAorICAgICAgICAgICAgfSwgXAorICAgICAgICAgICAgY2xl
YXI6IGZ1bmN0aW9uKG8pIHsgX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9jbGVhckNvbnNvbGVS
ZXF1ZXN0ZWQgPSB0cnVlOyB9LCBcCisgICAgICAgICAgICBkaXI6IGZ1bmN0aW9uKCkgeyByZXR1
cm4gY29uc29sZS5kaXIuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKSB9LCBcCisgICAgICAgICAg
ICBkaXJ4bWw6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5kaXJ4bWwuYXBwbHkoY29uc29s
ZSwgYXJndW1lbnRzKSB9LCBcCisgICAgICAgICAgICBpbnNwZWN0OiBmdW5jdGlvbihvKSB7IF9p
bnNwZWN0b3JDb21tYW5kTGluZUFQSS5fb2JqZWN0VG9JbnNwZWN0ID0gbzsgfSwgXAorICAgICAg
ICAgICAga2V5czogZnVuY3Rpb24obykgeyB2YXIgYSA9IFtdOyBmb3IgKHZhciBrIGluIG8pIGEu
cHVzaChrKTsgcmV0dXJuIGE7IH0sIFwKKyAgICAgICAgICAgIHZhbHVlczogZnVuY3Rpb24obykg
eyB2YXIgYSA9IFtdOyBmb3IgKHZhciBrIGluIG8pIGEucHVzaChvW2tdKTsgcmV0dXJuIGE7IH0s
IFwKKyAgICAgICAgICAgIHByb2ZpbGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5wcm9m
aWxlLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAorICAgICAgICAgICAgcHJvZmlsZUVu
ZDogZnVuY3Rpb24oKSB7IHJldHVybiBjb25zb2xlLnByb2ZpbGVFbmQuYXBwbHkoY29uc29sZSwg
YXJndW1lbnRzKSB9LCBcCisgICAgICAgICAgICBfY2xlYXJDb25zb2xlUmVxdWVzdGVkIDogZmFs
c2UsIFwKKyAgICAgICAgICAgIF9pbnNwZWN0ZWROb2RlczogW10sIFwKKyAgICAgICAgICAgIF9v
YmplY3RUb0luc3BlY3Q6IG51bGwsIFwKKyAgICAgICAgICAgIGdldCAkMCgpIHsgcmV0dXJuIF9p
bnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMF0gfSwgXAorICAgICAgICAg
ICAgZ2V0ICQxKCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWRO
b2Rlc1sxXSB9LCBcCisgICAgICAgICAgICBnZXQgJDIoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29t
bWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzJdIH0sIFwKKyAgICAgICAgICAgIGdldCAkMygp
IHsgcmV0dXJuIF9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbM10gfSwg
XAorICAgICAgICAgICAgZ2V0ICQ0KCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJ
Ll9pbnNwZWN0ZWROb2Rlc1s0XSB9IFwKKyAgICAgICAgfTsiKTsKKyAgICB9Cit9LAorCiBJbmpl
Y3RlZFNjcmlwdC5fcmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdFByb3h5KQogewogICAg
IHZhciBvYmplY3QgPSBJbmplY3RlZFNjcmlwdC5fb2JqZWN0Rm9ySWQob2JqZWN0UHJveHkub2Jq
ZWN0SWQpOwpAQCAtNDg2LDExICs1NjQsMTEgQEAgSW5qZWN0ZWRTY3JpcHQuX3Jlc29sdmVPYmpl
Y3QgPSBmdW5jdGlvbihvYmplY3RQcm94eSkKICAgICB2YXIgcHJvdG9EZXB0aCA9IG9iamVjdFBy
b3h5LnByb3RvRGVwdGg7CiAKICAgICAvLyBGb2xsb3cgdGhlIHByb3BlcnR5IHBhdGguCi0gICAg
Zm9yICh2YXIgaSA9IDA7IG9iamVjdCAmJiBpIDwgcGF0aC5sZW5ndGg7ICsraSkKKyAgICBmb3Ig
KHZhciBpID0gMDsgb2JqZWN0ICYmIHBhdGggJiYgaSA8IHBhdGgubGVuZ3RoOyArK2kpCiAgICAg
ICAgIG9iamVjdCA9IG9iamVjdFtwYXRoW2ldXTsKIAogICAgIC8vIEdldCB0byB0aGUgbmVjZXNz
YXJ5IHByb3RvIGxheWVyLgotICAgIGZvciAodmFyIGkgPSAwOyBvYmplY3QgJiYgaSA8IHByb3Rv
RGVwdGg7ICsraSkKKyAgICBmb3IgKHZhciBpID0gMDsgb2JqZWN0ICYmIHByb3RvRGVwdGggJiYg
aSA8IHByb3RvRGVwdGg7ICsraSkKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fcHJvdG9fXzsK
IAogICAgIHJldHVybiBvYmplY3Q7CkBAIC01MDUsMTIgKzU4MywyNiBAQCBJbmplY3RlZFNjcmlw
dC5fd2luZG93ID0gZnVuY3Rpb24oKQogCiBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkID0gZnVu
Y3Rpb24obm9kZUlkKQogewotICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBub2RlIGxvb2t1cCBp
biB0aGUgSW5zcGVjdG9yRE9NQWdlbnQgb25jZSBET01BZ2VudCBub2RlcyBhcmUgdXNlZC4KLSAg
ICByZXR1cm4gbm9kZUlkOworICAgIGlmICghbm9kZUlkKQorICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICByZXR1cm4gSW5zcGVjdG9yQ29udHJvbGxlci5ub2RlRm9ySWQobm9kZUlkKTsKIH0KIAog
SW5qZWN0ZWRTY3JpcHQuX29iamVjdEZvcklkID0gZnVuY3Rpb24ob2JqZWN0SWQpCiB7Ci0gICAg
Ly8gVE9ETzogcmVwbGFjZSB3aXRoIG5vZGUgbG9va3VwcyBmb3Igbm9kZSBpZHMgYW5kIGV2YWx1
YXRpb24gcmVzdWx0IGxvb2t1cHMgZm9yIHRoZSByZXN0IG9mIGlkcy4KKyAgICBpZiAodHlwZW9m
IG9iamVjdElkID09PSAibnVtYmVyIikKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9u
b2RlRm9ySWQob2JqZWN0SWQpOworICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3RJZCA9PT0gInN0
cmluZyIpCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JDb250cm9sbGVyLnVud3JhcE9iamVjdChv
YmplY3RJZCk7CisKKyAgICAvLyBUT0RPOiBtb3ZlIHNjb3BlIGNoYWluIG9iamVjdHMgdG8gcHJv
eHktYmFzZWQgc2NoZW1hLgogICAgIHJldHVybiBvYmplY3RJZDsKIH0KKworSW5qZWN0ZWRTY3Jp
cHQuX2NyZWF0ZVByb3h5T2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RJZCkKK3sKKyAg
ICB2YXIgcmVzdWx0ID0ge307CisgICAgcmVzdWx0Lm9iamVjdElkID0gb2JqZWN0SWQ7CisgICAg
cmVzdWx0LmRlc2NyaXB0aW9uID0gT2JqZWN0LmRlc2NyaWJlKG9iamVjdCwgdHJ1ZSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcwppbmRleCA5YjAzOTQwLi5mMGI4NzdkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGllc1NlY3Rp
b24uanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNT
ZWN0aW9uLmpzCkBAIC0xMjQsMTMgKzEyNCw2IEBAIFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0
eVRyZWVFbGVtZW50ID0gZnVuY3Rpb24ocHJvcGVydHkpCiB9CiAKIFdlYkluc3BlY3Rvci5PYmpl
Y3RQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAgICBzYWZlUHJvcGVydHlWYWx1
ZTogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eU5hbWUpCi0gICAgewotICAgICAgICBpZiAob2Jq
ZWN0WyJfX2xvb2t1cEdldHRlcl9fIl0gJiYgb2JqZWN0Ll9fbG9va3VwR2V0dGVyX18ocHJvcGVy
dHlOYW1lKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmV0dXJuIG9iamVjdFtwcm9w
ZXJ0eU5hbWVdOwotICAgIH0sCi0KICAgICBvbnBvcHVsYXRlOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggJiYgIXRoaXMuc2hvdWxkUmVmcmVzaENo
aWxkcmVuKQpAQCAtMTQ3LDcgKzE0MCw3IEBAIFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZENoaWxk
KG5ldyBzZWxmLnRyZWVPdXRsaW5lLnNlY3Rpb24udHJlZUVsZW1lbnRDb25zdHJ1Y3Rvcihwcm9w
ZXJ0aWVzW2ldKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07Ci0gICAgICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXIuZ2V0UHJvcGVydGllcyh0aGlzLnByb3BlcnR5LmNoaWxkT2JqZWN0UHJveHks
IGZhbHNlLCBjYWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuZ2V0UHJvcGVy
dGllcyh0aGlzLnByb3BlcnR5LnZhbHVlLCBmYWxzZSwgY2FsbGJhY2spOwogICAgIH0sCiAKICAg
ICBvbmRibGNsaWNrOiBmdW5jdGlvbihlbGVtZW50LCBldmVudCkKQEAgLTE2OCw3ICsxNjEsNyBA
QCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAK
ICAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CiAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50LmNsYXNzTmFtZSA9ICJ2YWx1ZSI7Ci0gICAg
ICAgIHRoaXMudmFsdWVFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5wcm9wZXJ0eS50ZXh0Q29u
dGVudDsKKyAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLnByb3Bl
cnR5LnZhbHVlLmRlc2NyaXB0aW9uOwogICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS5pc0dldHRl
cikKICAgICAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiZGltbWVkIik7
CiAKQEAgLTE3Nyw3ICsxNzAsNyBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxl
bWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENo
aWxkKG5hbWVFbGVtZW50KTsKICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjogIikpOwogICAgICAgICB0aGlzLmxpc3RJdGVt
RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZhbHVlRWxlbWVudCk7Ci0gICAgICAgIHRoaXMuaGFz
Q2hpbGRyZW4gPSB0aGlzLnByb3BlcnR5Lmhhc0NoaWxkcmVuOworICAgICAgICB0aGlzLmhhc0No
aWxkcmVuID0gdGhpcy5wcm9wZXJ0eS52YWx1ZS5oYXNDaGlsZHJlbjsKICAgICB9LAogCiAgICAg
dXBkYXRlU2libGluZ3M6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9PYmplY3RQcm94eS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9P
YmplY3RQcm94eS5qcwppbmRleCBmYTc4MTZlLi5kYmI5ZTQ4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJveHkuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL09iamVjdFByb3h5LmpzCkBAIC0yOCwxOCArMjgsMTcgQEAKICAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5ID0gZnVuY3Rpb24ob2JqZWN0
SWQsIHBhdGgsIHByb3RvRGVwdGgpCitXZWJJbnNwZWN0b3IuT2JqZWN0UHJveHkgPSBmdW5jdGlv
bihvYmplY3RJZCwgcGF0aCwgcHJvdG9EZXB0aCwgZGVzY3JpcHRpb24sIGhhc0NoaWxkcmVuKQog
ewogICAgIHRoaXMub2JqZWN0SWQgPSBvYmplY3RJZDsKICAgICB0aGlzLnBhdGggPSBwYXRoIHx8
IFtdOwogICAgIHRoaXMucHJvdG9EZXB0aCA9IHByb3RvRGVwdGggfHwgMDsKKyAgICB0aGlzLmRl
c2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgdGhpcy5oYXNDaGlsZHJlbiA9IGhhc0NoaWxk
cmVuOwogfQogCiBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlQcm94eSA9IGZ1bmN0aW9uKG5h
bWUsIG9iamVjdCkKIHsKICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIHRoaXMudHlwZSA9ICJv
YmplY3QiOwotICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSB0cnVlOwotICAgIHRoaXMudGV4dENvbnRl
bnQgPSBPYmplY3QuZGVzY3JpYmUob2JqZWN0LCB0cnVlKTsKLSAgICB0aGlzLmNoaWxkT2JqZWN0
UHJveHkgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5KG9iamVjdCk7CisgICAgdGhpcy52
YWx1ZSA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UHJveHkob2JqZWN0LCBbXSwgMCwgT2JqZWN0
LmRlc2NyaWJlKG9iamVjdCwgdHJ1ZSksIHRydWUpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1Byb3BlcnRpZXNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Qcm9wZXJ0aWVzU2lkZWJhclBhbmUuanMKaW5kZXggMmQzMjEzNy4u
OWRjY2Y1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb3BlcnRp
ZXNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUHJvcGVy
dGllc1NpZGViYXJQYW5lLmpzCkBAIC0zMiw3ICszMiw3IEBAIFdlYkluc3BlY3Rvci5Qcm9wZXJ0
aWVzU2lkZWJhclBhbmUgPSBmdW5jdGlvbigpCiB9CiAKIFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVz
U2lkZWJhclBhbmUucHJvdG90eXBlID0gewotICAgIHVwZGF0ZTogZnVuY3Rpb24ob2JqZWN0KQor
ICAgIHVwZGF0ZTogZnVuY3Rpb24obm9kZSkKICAgICB7CiAgICAgICAgIHZhciBib2R5ID0gdGhp
cy5ib2R5RWxlbWVudDsKIApAQCAtNDAsNyArNDAsNyBAQCBXZWJJbnNwZWN0b3IuUHJvcGVydGll
c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLnNlY3Rpb25zID0gW107
CiAKLSAgICAgICAgaWYgKCFvYmplY3QpCisgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAg
IHJldHVybjsKIAogICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CkBAIC01MSwxMyArNTEsMTMgQEAg
V2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAKICAgICAg
ICAgICAgIC8vIEdldCBhcnJheSBvZiBwcm90b3R5cGUgdXNlci1mcmllbmRseSBuYW1lcy4KICAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvdG90eXBlcy5sZW5ndGg7ICsraSkgewot
ICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFBy
b3h5KG9iamVjdCwgW10sIGkpOworICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBuZXcg
V2ViSW5zcGVjdG9yLk9iamVjdFByb3h5KG5vZGUuX2lkLCBbXSwgaSk7CiAgICAgICAgICAgICAg
ICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9u
KHByb3RvdHlwZSwgcHJvdG90eXBlc1tpXSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm90b3R5
cGUiKSk7CiAgICAgICAgICAgICAgICAgc2VsZi5zZWN0aW9ucy5wdXNoKHNlY3Rpb24pOwogICAg
ICAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoc2VjdGlvbi5lbGVtZW50KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfTsKLSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5nZXRQcm90b3R5
cGVzKG9iamVjdCwgY2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmdldFBy
b3RvdHlwZXMobm9kZS5faWQsIGNhbGxiYWNrKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwppbmRleCA4YTNhNjdmLi5k
ODQyMzg5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lk
ZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzCkBAIC02NywxMCArNjcsMTAgQEAgV2ViSW5zcGVjdG9yLlN0eWxlc1NpZGViYXJQ
YW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oc3R5bGVz
KSB7CiAgICAgICAgICAgICBpZiAoIXN0eWxlcykKICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB2YXIgbm9kZVdyYXBwZXIgPSBXZWJJbnNwZWN0b3Iud3JhcE5vZGVXaXRoU3R5
bGVzKG5vZGUsIHN0eWxlcyk7Ci0gICAgICAgICAgICBzZWxmLl91cGRhdGUocmVmcmVzaCwgYm9k
eSwgbm9kZVdyYXBwZXIsIGVkaXRlZFNlY3Rpb24sIGZvcmNlVXBkYXRlKTsKKyAgICAgICAgICAg
IG5vZGUuX3NldFN0eWxlcyhzdHlsZXMuY29tcHV0ZWRTdHlsZSwgc3R5bGVzLmlubGluZVN0eWxl
LCBzdHlsZXMuc3R5bGVBdHRyaWJ1dGVzLCBzdHlsZXMubWF0Y2hlZENTU1J1bGVzKTsKKyAgICAg
ICAgICAgIHNlbGYuX3VwZGF0ZShyZWZyZXNoLCBib2R5LCBub2RlLCBlZGl0ZWRTZWN0aW9uLCBm
b3JjZVVwZGF0ZSk7CiAgICAgICAgIH07Ci0gICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuZ2V0
U3R5bGVzKG5vZGUsICFQcmVmZXJlbmNlcy5zaG93VXNlckFnZW50U3R5bGVzLCBjYWxsYmFjayk7
CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuZ2V0U3R5bGVzKG5vZGUuX2lkLCAhUHJlZmVy
ZW5jZXMuc2hvd1VzZXJBZ2VudFN0eWxlcywgY2FsbGJhY2spOwogICAgIH0sCiAKICAgICBfdXBk
YXRlOiBmdW5jdGlvbihyZWZyZXNoLCBib2R5LCBub2RlLCBlZGl0ZWRTZWN0aW9uLCBmb3JjZVVw
ZGF0ZSkKQEAgLTExNTUsNyArMTE1NSw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJl
ZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
UmVzdG9yZSB0aGUgb3JpZ2luYWwgQ1NTIHRleHQgYmVmb3JlIGFwcGx5aW5nIHVzZXIgY2hhbmdl
cy4gVGhpcyBpcyBuZWVkZWQgdG8gcHJldmVudAogICAgICAgICAgICAgLy8gbmV3IHByb3BlcnRp
ZXMgZnJvbSBzdGlja2luZyBhcm91bmQgaWYgdGhlIHVzZXIgYWRkcyBvbmUsIHRoZW4gcmVtb3Zl
cyBpdC4KLSAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuc2V0U3R5bGVUZXh0KHRoaXMu
c3R5bGUsIHRoaXMub3JpZ2luYWxDU1NUZXh0KTsKKyAgICAgICAgICAgIEluc3BlY3RvckNvbnRy
b2xsZXIuc2V0U3R5bGVUZXh0KHRoaXMuc3R5bGUuX2lkLCB0aGlzLm9yaWdpbmFsQ1NTVGV4dCk7
CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLmFwcGx5U3R5bGVUZXh0KHRoaXMubGlzdEl0ZW1F
bGVtZW50LnRleHRDb250ZW50KTsKQEAgLTExNzUsNyArMTE3NSw3IEBAIFdlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5f
bmV3UHJvcGVydHkpCiAgICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnJlbW92ZUNoaWxkKHRo
aXMpOwogICAgICAgICBlbHNlIGlmICh0aGlzLm9yaWdpbmFsQ1NTVGV4dCkgewotICAgICAgICAg
ICAgSW5zcGVjdG9yQ29udHJvbGxlci5zZXRTdHlsZVRleHQodGhpcy5zdHlsZSwgdGhpcy5vcmln
aW5hbENTU1RleHQpOworICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5zZXRTdHlsZVRl
eHQodGhpcy5zdHlsZS5faWQsIHRoaXMub3JpZ2luYWxDU1NUZXh0KTsKIAogICAgICAgICAgICAg
aWYgKHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbiAmJiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24u
cGFuZSkKICAgICAgICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFuZS5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoInN0eWxlIGVkaXRlZCIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggYWEyMWE4Ni4uMDA3OWVjZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0zOSw3ICszOSw3IEBAIHZhciBQcmVm
ZXJlbmNlcyA9IHsKICAgICBzaG93SW5oZXJpdGVkQ29tcHV0ZWRTdHlsZVByb3BlcnRpZXM6IGZh
bHNlLAogICAgIHN0eWxlUnVsZXNFeHBhbmRlZFN0YXRlOiB7fSwKICAgICBzaG93TWlzc2luZ0xv
Y2FsaXplZFN0cmluZ3M6IGZhbHNlLAotICAgIHVzZURPTUFnZW50OiBmYWxzZQorICAgIHVzZURP
TUFnZW50OiB0cnVlCiB9CiAKIHZhciBXZWJJbnNwZWN0b3IgPSB7CkBAIC0zMzMsNyArMzMzLDcg
QEAgdmFyIFdlYkluc3BlY3RvciA9IHsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0aGlzLl9o
b3ZlcmVkRE9NTm9kZSkgewotICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5oaWdobGln
aHRET01Ob2RlKHRoaXMuX2hvdmVyZWRET01Ob2RlKTsKKyAgICAgICAgICAgIEluc3BlY3RvckNv
bnRyb2xsZXIuaGlnaGxpZ2h0RE9NTm9kZSh0aGlzLl9ob3ZlcmVkRE9NTm9kZS5faWQpOwogICAg
ICAgICAgICAgdGhpcy5zaG93aW5nRE9NTm9kZUhpZ2hsaWdodCA9IHRydWU7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmhpZGVET01Ob2RlSGlnaGxp
Z2h0KCk7CkBAIC0xMTM4LDggKzExMzgsOSBAQCBXZWJJbnNwZWN0b3IuZHJhd0xvYWRpbmdQaWVD
aGFydCA9IGZ1bmN0aW9uKGNhbnZhcywgcGVyY2VudCkgewogICAgIGcuZmlsbCgpOwogfQogCi1X
ZWJJbnNwZWN0b3IudXBkYXRlRm9jdXNlZE5vZGUgPSBmdW5jdGlvbihub2RlKQorV2ViSW5zcGVj
dG9yLnVwZGF0ZUZvY3VzZWROb2RlID0gZnVuY3Rpb24obm9kZUlkKQogeworICAgIHZhciBub2Rl
ID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9k
ZSkKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBkZXNlbGVjdCBpZiBudWxsIGlzIHBhc3Nl
ZCBpbj8KICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34733</attachid>
            <date>2009-08-13 05:09:38 -0700</date>
            <delta_ts>2009-08-13 08:26:20 -0700</delta_ts>
            <desc>The patch.</desc>
            <filename>dom_agent.patch</filename>
            <type>text/plain</type>
            <size>120786</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2U5NzY5OC4uOTA2MjIwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxODUgQEAKKzIwMDktMDgtMTMgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBNaWdyYXRlIHRvIERPTUFnZW50IChz
ZXJpYWxpemVkIGFjY2VzcyB0byBET00pCisJCQkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTc3CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lu
c3BlY3RvckJhY2tlbmRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JC
YWNrZW5kOjpoaWdobGlnaHRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9y
QmFja2VuZDo6bm9kZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2Vu
ZDo6aWRGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6d3Jh
cE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnVud3JhcE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JCYWNrZW5kOjpzZWxl
Y3REYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNlbGVj
dERPTVN0b3JhZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRW
YWx1ZTo6aXNPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6aXNPYmplY3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogaW5zcGVjdG9yL0Nv
bnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdlOjpDb25z
b2xlTWVzc2FnZSk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQmFja2VuZDo6Y2xlYXJNZXNzYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JCYWNrZW5kOjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFj
a2VuZDo6bm9kZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6Omlk
Rm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjp3cmFwT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnVud3JhcE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmFkZE5vZGVzVG9TZWFyY2hS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2VsZWN0RGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2VsZWN0RE9NU3RvcmFn
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpmb2N1c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpjbGVhckNvbnNvbGVNZXNzYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzdGFydEdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6d3JhcE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp1
bndyYXBPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpiaW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6
OmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250
ZW5kOjp1cGRhdGVGb2N1c2VkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZDo6c2VsZWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmQ6OnNlbGVjdERPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmQ6OmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLmNsZWFyTWVz
c2FnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5jb21w
bGV0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9y
ZXBvcnRDb21wbGV0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJv
dG90eXBlLl9tZXNzYWdlc0NsaWNrZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVW
aWV3LnByb3RvdHlwZS5kb0V2YWxJbldpbmRvdy5ldmFsQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5kb0V2YWxJbldpbmRvdyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9mb3JtYXQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5fZm9ybWF0bm9kZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9mb3JtYXRvYmplY3QpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRE9NTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5nZXRDaGlsZE5vZGVzQXN5bmMpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVBc3lu
Yyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLnJlbW92ZUF0dHJp
YnV0ZUFzeW5jKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuc2V0
VGV4dE5vZGVWYWx1ZUFzeW5jKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90
b3R5cGUubm9kZUZvcklkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5
cGUuX2JpbmROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBl
Ll9jaGlsZE5vZGVJbnNlcnRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJz
ZVJ1bGUpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJvbGxlci5nZXRTdHlsZXMpOgorICAgICAg
ICAoSW5zcGVjdG9yQ29udHJvbGxlci5nZXRDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKEluc3Bl
Y3RvckNvbnRyb2xsZXIuZ2V0SW5saW5lU3R5bGUpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJv
bGxlci5hcHBseVN0eWxlVGV4dCk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyLnNldFN0
eWxlVGV4dCk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyLnRvZ2dsZVN0eWxlRW5hYmxl
ZCk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyLmFwcGx5U3R5bGVSdWxlVGV4dCk6Cisg
ICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyLmFkZFN0eWxlU2VsZWN0b3IpOgorICAgICAgICAo
SW5zcGVjdG9yQ29udHJvbGxlci5zZXRTdHlsZVByb3BlcnR5KToKKyAgICAgICAgKEluc3BlY3Rv
ckNvbnRyb2xsZXIuZ2V0UHJvdG90eXBlcyk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVy
LmdldFByb3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJvbGxlci5zZXRQcm9wZXJ0
eVZhbHVlKToKKyAgICAgICAgKEluc3BlY3RvckNvbnRyb2xsZXIuZXZhbHVhdGUpOgorICAgICAg
ICAoSW5zcGVjdG9yQ29udHJvbGxlci5hZGRJbnNwZWN0ZWROb2RlKToKKyAgICAgICAgKEluc3Bl
Y3RvckNvbnRyb2xsZXIucGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9s
bGVyLnNlYXJjaENhbmNlbGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC50aGlzLnRy
ZWVPdXRsaW5lLmZvY3VzZWROb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxl
bWVudHNQYW5lbC5wcm90b3R5cGUuc2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLl91cGRhdGVNYXRjaGVzQ291bnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLl91cGRhdGVNYXRj
aGVzQ291bnRTb29uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3Rv
dHlwZS5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlT3V0bGluZS5wcm90b3R5cGUuc2V0IGZvY3VzZWRET01Ob2RlLnJlc3RvcmVIaWdobGln
aHRUb0hvdmVyZWROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRs
aW5lLnByb3RvdHlwZS5zZXQgZm9jdXNlZERPTU5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZUNoaWxkcmVuKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fYXR0cmlidXRlRWRp
dGluZ0NvbW1pdHRlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNj
cmlwdC5qczoKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LmFwcGx5U3R5bGVSdWxlVGV4dCk6Cisg
ICAgICAgIChJbmplY3RlZFNjcmlwdC5hZGRTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgKEluamVj
dGVkU2NyaXB0Ll9kb2VzU2VsZWN0b3JBZmZlY3ROb2RlKToKKyAgICAgICAgKEluamVjdGVkU2Ny
aXB0Ll9zZXJpYWxpemVSdWxlKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVT
dHlsZSk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKToKKyAgICAgICAg
KEluamVjdGVkU2NyaXB0LmV2YWx1YXRlKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LmFkZElu
c3BlY3RlZE5vZGUpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaC5hZGRO
b2Rlc1RvUmVzdWx0cyk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNoLm1h
dGNoRXhhY3RJdGVtcyk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNoLm1h
dGNoRXhhY3RJZC5hZGROb2Rlc1RvUmVzdWx0cy5jYWxsKToKKyAgICAgICAgKEluamVjdGVkU2Ny
aXB0LnBlcmZvcm1TZWFyY2gubWF0Y2hFeGFjdElkKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0
LnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaC5t
YXRjaEV4YWN0VGFnTmFtZXMpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJj
aC5tYXRjaEV4YWN0QXR0cmlidXRlTmFtZXMpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVy
Zm9ybVNlYXJjaC5tYXRjaFBhcnRpYWxUYWdOYW1lcyk6CisgICAgICAgIChJbmplY3RlZFNjcmlw
dC5wZXJmb3JtU2VhcmNoLm1hdGNoU3RhcnRPZlRhZ05hbWVzKToKKyAgICAgICAgKEluamVjdGVk
U2NyaXB0LnBlcmZvcm1TZWFyY2gubWF0Y2hQYXJ0aWFsVGFnTmFtZXNBbmRBdHRyaWJ1dGVWYWx1
ZXMpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaC5tYXRjaFBhcnRpYWxB
dHRyaWJ1dGVWYWx1ZXMpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaC5t
YXRjaFN0eWxlU2VsZWN0b3IpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJj
aC5tYXRjaFBsYWluVGV4dCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNo
Lm1hdGNoWFBhdGhRdWVyeSk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNo
LmZpbmlzaGVkU2VhcmNoaW5nKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnBlcmZvcm1TZWFy
Y2gucHJvY2Vzc0NodW5rKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnNlYXJjaENhbmNlbGVk
KToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxl
ZC5pbnNwZWN0T2JqZWN0KToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5k
TGluZUFQSUluc3RhbGxlZCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5fcmVzb2x2ZU9iamVj
dCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKToKKyAgICAgICAgKEluamVj
dGVkU2NyaXB0Ll9vYmplY3RGb3JJZCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5fY3JlYXRl
UHJveHlPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVy
dGllc1NlY3Rpb24uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVl
RWxlbWVudC5wcm90b3R5cGUub25wb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuT2Jq
ZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk9i
amVjdFByb3h5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVByb3h5KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb3BlcnRpZXNTaWRlYmFyUGFuZS5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2lkZWJhclBhbmUucHJvdG90eXBlLnVw
ZGF0ZS5jYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NpZGViYXJQ
YW5lLnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU3R5
bGVzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBh
bmUucHJvdG90eXBlLnVwZGF0ZS5jYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5
bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLnVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlw
ZS5lZGl0aW5nU2VsZWN0b3JDYW5jZWxsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJsYW5r
U3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ0NvbW1pdHRlZC5jYWxsYmFj
ayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnBy
b3RvdHlwZS5lZGl0aW5nQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5fdXBkYXRlSG92ZXJIaWdo
bGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5zZWxlY3REYXRhYmFzZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3Iuc2VsZWN0RE9NU3RvcmFnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IudXBkYXRlRm9jdXNl
ZE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOgorICAgICAgICAoT2Jq
ZWN0LnR5cGUpOgorICAgICAgICAoT2JqZWN0LnByb3h5VHlwZSk6CisgICAgICAgICogc3RvcmFn
ZS9TdG9yYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlOjpmcmFtZSk6CisKIDIwMDkt
MDgtMTIgIEFyaXlhIEhpZGF5YXQgIDxhcml5YS5oaWRheWF0QG5va2lhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcAppbmRleCBiMDc4MDE2Li4zMDdiN2JkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCkBA
IC01Myw2ICs1MywxMCBAQAogI2luY2x1ZGUgIkpTUmFuZ2UuaCIKICNpbmNsdWRlICJOb2RlLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJT
dG9yYWdlLmgiCisjaW5jbHVkZSAiSlNTdG9yYWdlLmgiCisjZW5kaWYKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlIDxydW50
aW1lL0pTQXJyYXkuaD4KQEAgLTcyLDIxICs3NiwxMiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNJbnNwZWN0b3JCYWNrZW5kOjpoaWdo
bGlnaHRET01Ob2RlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OmhpZ2hsaWdodERPTU5vZGUoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXpl
KCkgPCAxKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTUXVhcmFudGlu
ZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFz
V3JhcHBlcihhcmdzLmF0KDApKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotCi0gICAgTm9kZSogbm9kZSA9IHRvTm9kZSh3cmFwcGVyLT51bndyYXBw
ZWRPYmplY3QoKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLQotICAgIGltcGwoKS0+aGlnaGxpZ2h0KG5vZGUpOwotCisgICAgaW1wbCgpLT5oaWdobGln
aHQoYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIApAQCAtMzIyLDQgKzMxNywxMDcgQEAgSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OnBy
b2ZpbGVzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmKQogCiAjZW5k
aWYKIAorSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6Om5vZGVGb3JJZChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5u
b2RlRm9ySWQoYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMg
PSBpbXBsKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNET01XaW5kb3cqIGluc3BlY3RlZFdpbmRvdyA9IHRvSlNET01XaW5kb3co
aWMtPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpOworICAgIHJldHVybiBKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXAoaW5zcGVjdGVkV2luZG93LT5nbG9iYWxFeGVjKCksIHRvSlMo
ZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShpbnNwZWN0ZWRXaW5kb3ct
Pmdsb2JhbEV4ZWMoKSksIG5vZGUpKTsKK30KKworSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6
OmlkRm9yTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
aWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAg
ICBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogd3JhcHBlciA9IEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjphc1dyYXBwZXIoYXJncy5hdCgwKSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIE5vZGUqIG5vZGUgPSB0b05vZGUod3Jh
cHBlci0+dW53cmFwcGVkT2JqZWN0KCkpOworICAgIGlmIChub2RlKQorICAgICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgaW1wbCgpLT5pZEZvck5vZGUobm9kZSkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6d3JhcE9iamVjdChF
eGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA8
IDEpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgcmV0dXJuIGltcGwoKS0+
d3JhcE9iamVjdChTY3JpcHRWYWx1ZShhcmdzLmF0KDApKSkuanNWYWx1ZSgpOworfQorCitKU1Zh
bHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6dW53cmFwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIHJldHVybiBpbXBsKCktPnVud3JhcE9iamVjdChh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKS5qc1ZhbHVlKCk7Cit9CisKK0pTVmFsdWUgSlNJbnNw
ZWN0b3JCYWNrZW5kOjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAyKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3
cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDAp
KTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisg
ICAgTm9kZSogbm9kZSA9IHRvTm9kZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7CisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGJvb2wgc2Vs
ZWN0SW5VSSA9IGFyZ3MuYXQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgIHJldHVybiBqc051bWJl
cihleGVjLCBpbXBsKCktPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSwgc2VsZWN0SW5VSSkp
OworfQorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6
OnNlbGVjdERhdGFiYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
aWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAg
ICBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogd3JhcHBlciA9IEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjphc1dyYXBwZXIoYXJncy5hdCgwKSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IHRv
RGF0YWJhc2Uod3JhcHBlci0+dW53cmFwcGVkT2JqZWN0KCkpOworICAgIGlmIChkYXRhYmFzZSkK
KyAgICAgICAgaW1wbCgpLT5zZWxlY3REYXRhYmFzZShkYXRhYmFzZSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKK0pTVmFs
dWUgSlNJbnNwZWN0b3JCYWNrZW5kOjpzZWxlY3RET01TdG9yYWdlKEV4ZWNTdGF0ZSosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbXBsKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKworICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0g
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKKyAgICBp
ZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgU3RvcmFn
ZSogc3RvcmFnZSA9IHRvU3RvcmFnZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7CisgICAg
aWYgKHN0b3JhZ2UpCisgICAgICAgIGltcGwoKS0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdlKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJh
bnRpbmUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNw
cAppbmRleCA4OTU1M2VmLi41MjQ1Yjg1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0T2JqZWN0UXVhcmFudGluZS5jcHAKQEAgLTgwLDEwICs4MCwxMSBAQCBib29sIGdldFF1YXJh
bnRpbmVkU2NyaXB0T2JqZWN0KERhdGFiYXNlKiBkYXRhYmFzZSwgU2NyaXB0T2JqZWN0JiBxdWFy
YW50aW5lZE9iagogI2VuZGlmCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi1ib29sIGdldFF1
YXJhbnRpbmVkU2NyaXB0T2JqZWN0KEZyYW1lKiBmcmFtZSwgU3RvcmFnZSogc3RvcmFnZSwgU2Ny
aXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCkKK2Jvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRP
YmplY3QoU3RvcmFnZSogc3RvcmFnZSwgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCkK
IHsKLSAgICBBU1NFUlQoZnJhbWUpOwogICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBGcmFtZSog
ZnJhbWUgPSBzdG9yYWdlLT5mcmFtZSgpOworICAgIEFTU0VSVChmcmFtZSk7CiAKICAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSk7CiAgICAg
RXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oCmluZGV4IGQ3MGFjZDcuLmRmNTIz
NzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0UXVhcmFudGlu
ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oCkBA
IC0zNyw3ICszNyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIERhdGFiYXNl
OwogICAgIGNsYXNzIERPTVdpbmRvdzsKLSAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBOb2Rl
OwogICAgIGNsYXNzIFNjcmlwdE9iamVjdDsKICAgICBjbGFzcyBTY3JpcHRWYWx1ZTsKQEAgLTQ5
LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGJvb2wgZ2V0UXVhcmFudGluZWRT
Y3JpcHRPYmplY3QoRGF0YWJhc2UqIGRhdGFiYXNlLCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVk
T2JqZWN0KTsKICNlbmRpZgogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICBib29sIGdldFF1
YXJhbnRpbmVkU2NyaXB0T2JqZWN0KEZyYW1lKiBmcmFtZSwgU3RvcmFnZSogc3RvcmFnZSwgU2Ny
aXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCk7CisgICAgYm9vbCBnZXRRdWFyYW50aW5lZFNj
cmlwdE9iamVjdChTdG9yYWdlKiBzdG9yYWdlLCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVkT2Jq
ZWN0KTsKICNlbmRpZgogICAgIGJvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoTm9kZSog
bm9kZSwgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCk7CiAgICAgYm9vbCBnZXRRdWFy
YW50aW5lZFNjcmlwdE9iamVjdChET01XaW5kb3cqIGRvbVdpbmRvdywgU2NyaXB0T2JqZWN0JiBx
dWFyYW50aW5lZE9iamVjdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFZhbHVlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCmluZGV4IGQ0
MjdjZWUuLjZlYWMxMDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCkBAIC03NCw0
ICs3NCwxMSBAQCBib29sIFNjcmlwdFZhbHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fdmFsdWUuZ2V0KCkuaXNVbmRlZmluZWQoKTsKIH0KIAorYm9vbCBTY3JpcHRWYWx1ZTo6
aXNPYmplY3QoKSBjb25zdAoreworICAgIGlmICghbV92YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBtX3ZhbHVlLmdldCgpLmlzT2JqZWN0KCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAppbmRleCAyMDljZTA2Li4x
OWJiNjkzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCkBAIC01MCw2ICs1MCw3IEBAIHB1
YmxpYzoKICAgICBib29sIGlzRXF1YWwoU2NyaXB0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYp
IGNvbnN0OwogICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7CiAgICAgYm9vbCBpc1VuZGVmaW5lZCgp
IGNvbnN0OworICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKICAgICBib29sIGhhc05vVmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IEpTQzo6SlNWYWx1ZSgpOyB9CiAKIHByaXZhdGU6
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcAppbmRl
eCAwNTNjZjY4Li43YTBkMzFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dE9iamVjdFF1YXJhbnRpbmUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2Jq
ZWN0UXVhcmFudGluZS5jcHAKQEAgLTYxLDEwICs2MSwxMSBAQCBib29sIGdldFF1YXJhbnRpbmVk
U2NyaXB0T2JqZWN0KERhdGFiYXNlKiBkYXRhYmFzZSwgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5l
ZE9iagogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9i
amVjdChGcmFtZSogZnJhbWUsIFN0b3JhZ2UqIHN0b3JhZ2UsIFNjcmlwdE9iamVjdCYgcXVhcmFu
dGluZWRPYmplY3QpCitib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KFN0b3JhZ2UqIHN0
b3JhZ2UsIFNjcmlwdE9iamVjdCYgcXVhcmFudGluZWRPYmplY3QpCiB7Ci0gICAgQVNTRVJUKGZy
YW1lKTsKICAgICBBU1NFUlQoc3RvcmFnZSk7CisgICAgRnJhbWUqIGZyYW1lID0gc3RvcmFnZS0+
ZnJhbWUoKTsKKyAgICBBU1NFUlQoZnJhbWUpOwogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQog
ICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRPYmplY3RRdWFyYW50aW5lLmgKaW5kZXggM2I3Y2NmZi4uNzEyZGQ5YiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmgKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmgKQEAgLTQyLDcgKzQyLDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRGF0YWJhc2U7CiAgICAgY2xhc3Mg
RE9NV2luZG93OwotICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3Mg
U2NyaXB0T2JqZWN0OwogICAgIGNsYXNzIFNjcmlwdFZhbHVlOwpAQCAtNTEsNyArNTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgU2NyaXB0VmFsdWUgcXVhcmFudGluZVZhbHVlKFNjcmlw
dFN0YXRlKiwgY29uc3QgU2NyaXB0VmFsdWUmKTsKIAogICAgIGJvb2wgZ2V0UXVhcmFudGluZWRT
Y3JpcHRPYmplY3QoRGF0YWJhc2UqIGRhdGFiYXNlLCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVk
T2JqZWN0KTsKLSAgICBib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KEZyYW1lKiBmcmFt
ZSwgU3RvcmFnZSogc3RvcmFnZSwgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCk7Cisg
ICAgYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChTdG9yYWdlKiBzdG9yYWdlLCBTY3Jp
cHRPYmplY3QmIHF1YXJhbnRpbmVkT2JqZWN0KTsKICAgICBib29sIGdldFF1YXJhbnRpbmVkU2Ny
aXB0T2JqZWN0KE5vZGUqIG5vZGUsIFNjcmlwdE9iamVjdCYgcXVhcmFudGluZWRPYmplY3QpOwog
ICAgIGJvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoRE9NV2luZG93KiBkb21XaW5kb3cs
IFNjcmlwdE9iamVjdCYgcXVhcmFudGluZWRPYmplY3QpOwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZh
bHVlLmgKaW5kZXggMDA0ODUxYi4uZGRjMzU3NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRWYWx1ZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUu
aApAQCAtMTEwLDcgKzExMCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV92
YWx1ZS0+SXNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgCisKKyAgICBib29sIGlzT2JqZWN0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlLT5Jc09iamVjdCgpOworICAgIH0K
KwogICAgIGJvb2wgaGFzTm9WYWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV92
YWx1ZS5Jc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbUJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmlu
ZGluZy5oCmluZGV4IDU3OWJjYmEuLmY1NWY0ZDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCkBAIC00MDcsOCArNDA3LDE3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kRGVidWdn
ZXJFbmFibGVkKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kUGF1
c2VPbkV4Y2VwdGlvbnMpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tl
bmRQcm9maWxlckVuYWJsZWQpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJh
Y2tlbmROb2RlRm9ySWQpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tl
bmRJZEZvck5vZGUpOworICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRX
cmFwT2JqZWN0KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kVW53
cmFwT2JqZWN0KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kUHVz
aE5vZGVQYXRoVG9Gcm9udGVuZCk7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICBERUNM
QVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmREYXRhYmFzZVRhYmxlTmFtZXMpOworICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRTZWxlY3REYXRhYmFzZSk7CisjZW5k
aWYKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soSW5z
cGVjdG9yQmFja2VuZFNlbGVjdERPTVN0b3JhZ2UpOwogI2VuZGlmCiAgICAgICAgIERFQ0xBUkVf
Q0FMTEJBQ0soSW5zcGVjdG9yQmFja2VuZFdyYXBDYWxsYmFjayk7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCmlu
ZGV4IDBmNjFmZDIuLmQ1NjI2ZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcApAQCAtNTcsMTMgKzU3LDggQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckJhY2tlbmRIaWdobGlnaHRET01Ob2RlKQogICAg
IGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
IAotICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2Rl
PE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLQogICAgIEluc3BlY3RvckJh
Y2tlbmQqIGluc3BlY3RvckJhY2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxJbnNwZWN0b3JCYWNrZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFy
Z3MuSG9sZGVyKCkpOwotICAgIGluc3BlY3RvckJhY2tlbmQtPmhpZ2hsaWdodChub2RlKTsKLQor
ICAgIGluc3BlY3RvckJhY2tlbmQtPmhpZ2hsaWdodChhcmdzWzBdLT5Ub0ludDMyKCktPlZhbHVl
KCkpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKQEAgLTIyMiw0ICsyMTcsMTEx
IEBAIENBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kV3JhcENhbGxiYWNrKQogICAg
IHJldHVybiBhcmdzWzBdOwogfQogCitDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2Vu
ZE5vZGVGb3JJZCkKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tlbmQubm9kZUZvcklk
KCkiKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFz
c0luZGV4OjpJTlNQRUNUT1JCQUNLRU5ELCBhcmdzLkhvbGRlcigpKTsKKyAgICAKKyAgICBOb2Rl
KiBub2RlID0gaW5zcGVjdG9yQmFja2VuZCgpLT5ub2RlRm9ySWQoYXJnc1swXS0+VG9JbnQzMigp
LT5WYWx1ZSgpKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGltcGwoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpOworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CisKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6Ok5PREUsIG5vZGUpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2Vu
ZElkRm9yTm9kZSkKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tlbmQuaWRGb3JOb2Rl
KCkiKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCisgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFz
c0luZGV4OjpJTlNQRUNUT1JCQUNLRU5ELCBhcmdzLkhvbGRlcigpKTsKKyAgICBOb2RlKiBub2Rl
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgcmV0
dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbnNwZWN0b3JCYWNrZW5kKCktPmlkRm9yTm9kZShhcmdzWzBd
LT5Ub0ludDMyKCktPlZhbHVlKCkpKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQor
CitDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2VuZFdyYXBPYmplY3QpCit7CisgICAg
SU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNrZW5kLndyYXBPYmplY3QoKSIpOworICAgIGlmIChhcmdz
Lkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIElu
c3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJhY2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxJbnNwZWN0b3JCYWNrZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJB
Q0tFTkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIHJldHVybiBpbnNwZWN0b3JCYWNrZW5kLT53cmFw
T2JqZWN0KFNjcmlwdFZhbHVlKGFyZ3NbMF0pKS52OFZhbHVlKCk7Cit9CisKK0NBTExCQUNLX0ZV
TkNfREVDTChJbnNwZWN0b3JCYWNrZW5kVW53cmFwT2JqZWN0KQoreworICAgIElOQ19TVEFUUygi
SW5zcGVjdG9yQmFja2VuZC51bndyYXBPYmplY3QoKSIpOworICAgIGlmIChhcmdzLkxlbmd0aCgp
IDwgMSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJh
Y2tlbmQqIGluc3BlY3RvckJhY2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxJbnNwZWN0b3JCYWNrZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFy
Z3MuSG9sZGVyKCkpOworICAgIHJldHVybiBpbnNwZWN0b3JCYWNrZW5kLT51bndyYXBPYmplY3Qo
dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBdKSkudjhWYWx1ZSgpOworfQorCitD
QUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2VuZFB1c2hOb2RlUGF0aFRvRnJvbnRlbmQp
Cit7CisgICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNrZW5kLnB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQoKSIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMikKKyAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJhY2tlbmQgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JCYWNrZW5kPihWOENs
YXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIE5vZGUqIG5v
ZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOworICAgIGJvb2wgc2VsZWN0SW5VSSA9IGFy
Z3NbMV0udG9Cb29sZWFuKCk7CisgICAgaWYgKG5vZGUpCisgICAgICAgIHJldHVybiB2ODo6TnVt
YmVyOjpOZXcoaW5zcGVjdG9yQmFja2VuZC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlLCBz
ZWxlY3RJblVJKSk7CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCisjaWYgRU5B
QkxFKERBVEFCQVNFKQorQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckJhY2tlbmRTZWxlY3RE
YXRhYmFzZSkKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tlbmQuc2VsZWN0RGF0YWJh
c2UoKSIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJhY2tlbmQgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JCYWNrZW5kPihWOENs
YXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQmFja2VuZC0+aW5zcGVjdG9yQ29udHJvbGxlcigp
OworICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBE
YXRhYmFzZSogZGF0YWJhc2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJ
bnNwZWN0b3JCYWNrZW5kPihWOENsYXNzSW5kZXg6OkRBVEFCQVNFLCBhcmdzWzBdKTsKKyAgICBp
ZiAoZGF0YWJhc2UpCisgICAgICAgIGljLT5zZWxlY3REYXRhYmFzZShkYXRhYmFzZSk7CisKKyAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCitDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2VuZFNlbGVjdERPTVN0b3Jh
Z2UpCit7CisgICAgSU5DX1NUQVRTKCJJbnNwZWN0b3JCYWNrZW5kLnNlbGVjdERPTVN0b3JhZ2Uo
KSIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3BlY3RvckJhY2tlbmQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JCYWNrZW5kPihWOENsYXNz
SW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIEluc3BlY3RvckNv
bnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQmFja2VuZC0+aW5zcGVjdG9yQ29udHJvbGxlcigpOwor
ICAgIGlmICghaWMpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBTdG9y
YWdlKiBzdG9yYWdlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVj
dG9yQmFja2VuZD4oVjhDbGFzc0luZGV4OjpTVE9SQUdFLCBhcmdzWzBdKTsKKyAgICBpZiAoc3Rv
cmFnZSkKKyAgICAgICAgaWMtPnNlbGVjdFN0b3JhZ2UoaWMtPmluc3BlY3RlZFBhZ2UoKS0+bWFp
bkZyYW1lKCksIHN0b3JhZ2UpOworCisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5jcHAKaW5kZXggZjlkODcwOC4uZjJmZTEwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29uc29sZU1lc3NhZ2UuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNz
YWdlLmNwcApAQCAtNTAsMjkgKzUwLDE4IEBAIENvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VUeXBlIHQsIE1lc3NhZ2VMZXZlbCBsLCBjCiB7CiB9
CiAKLUNvbnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3Nh
Z2VUeXBlIHQsIE1lc3NhZ2VMZXZlbCBsLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaywgdW5z
aWduZWQgZywgYm9vbCBzdG9yZVRyYWNlKQorQ29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZVR5cGUgdCwgTWVzc2FnZUxldmVsIGwsIGNvbnN0IFZl
Y3RvcjxTY3JpcHRTdHJpbmc+JiBmcmFtZXMsIGNvbnN0IFZlY3RvcjxTY3JpcHRWYWx1ZT4mIHdy
YXBwZWRBcmd1bWVudHMsIHVuc2lnbmVkIGxpLCBjb25zdCBTdHJpbmcmIHUsIHVuc2lnbmVkIGcp
CiAgICAgOiBtX3NvdXJjZShzKQogICAgICwgbV90eXBlKHQpCiAgICAgLCBtX2xldmVsKGwpCi0g
ICAgLCBtX3dyYXBwZWRBcmd1bWVudHMoY2FsbFN0YWNrLT5hdCgwKS5hcmd1bWVudENvdW50KCkp
Ci0gICAgLCBtX2ZyYW1lcyhzdG9yZVRyYWNlID8gY2FsbFN0YWNrLT5zaXplKCkgOiAwKQorICAg
ICwgbV9mcmFtZXMoZnJhbWVzKQorICAgICwgbV93cmFwcGVkQXJndW1lbnRzKHdyYXBwZWRBcmd1
bWVudHMpCisgICAgLCBtX2xpbmUobGkpCisgICAgLCBtX3VybCh1KQogICAgICwgbV9ncm91cExl
dmVsKGcpCiAgICAgLCBtX3JlcGVhdENvdW50KDEpCiB7Ci0gICAgY29uc3QgU2NyaXB0Q2FsbEZy
YW1lJiBsYXN0Q2FsbGVyID0gY2FsbFN0YWNrLT5hdCgwKTsKLSAgICBtX2xpbmUgPSBsYXN0Q2Fs
bGVyLmxpbmVOdW1iZXIoKTsKLSAgICBtX3VybCA9IGxhc3RDYWxsZXIuc291cmNlVVJMKCkuc3Ry
aW5nKCk7Ci0KLSAgICAvLyBGSVhNRTogRm9yIG5vdywganVzdCBzdG9yZSBmdW5jdGlvbiBuYW1l
cyBhcyBzdHJpbmdzLgotICAgIC8vIEFzIFNjcmlwdENhbGxTdGFjayBzdGFydCBzdG9yaW5nIGxp
bmUgbnVtYmVyIGFuZCBzb3VyY2UgVVJMIGZvciBhbGwKLSAgICAvLyBmcmFtZXMsIHJlZmFjdG9y
IHRvIHVzZSB0aGF0LCBhcyB3ZWxsLgotICAgIGlmIChzdG9yZVRyYWNlKSB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsU3RhY2stPnNpemUoKTsgKytpKQotICAgICAgICAg
ICAgbV9mcmFtZXNbaV0gPSBjYWxsU3RhY2stPmF0KGkpLmZ1bmN0aW9uTmFtZSgpOwotICAgIH0K
IAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsYXN0Q2FsbGVyLmFyZ3VtZW50Q291bnQo
KTsgKytpKQotICAgICAgICBtX3dyYXBwZWRBcmd1bWVudHNbaV0gPSBxdWFyYW50aW5lVmFsdWUo
Y2FsbFN0YWNrLT5zdGF0ZSgpLCBsYXN0Q2FsbGVyLmFyZ3VtZW50QXQoaSkpOwogfQogCiB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5k
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmgKaW5kZXggOTEwYTAwNy4uNWIxNTYwZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuaAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBDb25zb2xlTWVzc2FnZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVs
LCBjb25zdCBTdHJpbmcmIG0sIHVuc2lnbmVkIGxpLCBjb25zdCBTdHJpbmcmIHUsIHVuc2lnbmVk
IGcpOyAgICAgICAgCi0gICAgICAgIENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3Nh
Z2VUeXBlLCBNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayosIHVuc2lnbmVkIGcsIGJvb2wg
c3RvcmVUcmFjZSA9IGZhbHNlKTsKKyAgICAgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4m
IGZyYW1lcywgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVlPiYgd3JhcHBlZEFyZ3VtZW50cywgdW5z
aWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwgdW5zaWduZWQgZyk7CiAKICAgICAgICAgdm9pZCBh
ZGRUb0NvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKICAgICAgICAgdm9pZCBp
bmNyZW1lbnRDb3VudCgpIHsgKyttX3JlcGVhdENvdW50OyB9OwpAQCAtNTksOCArNTksOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE1lc3NhZ2VUeXBlIG1fdHlwZTsKICAgICAgICAg
TWVzc2FnZUxldmVsIG1fbGV2ZWw7CiAgICAgICAgIFN0cmluZyBtX21lc3NhZ2U7Ci0gICAgICAg
IFZlY3RvcjxTY3JpcHRWYWx1ZT4gbV93cmFwcGVkQXJndW1lbnRzOwogICAgICAgICBWZWN0b3I8
U2NyaXB0U3RyaW5nPiBtX2ZyYW1lczsKKyAgICAgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBtX3dy
YXBwZWRBcmd1bWVudHM7CiAgICAgICAgIHVuc2lnbmVkIG1fbGluZTsKICAgICAgICAgU3RyaW5n
IG1fdXJsOwogICAgICAgICB1bnNpZ25lZCBtX2dyb3VwTGV2ZWw7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwCmluZGV4IDFlYjEwZTguLjhjZjMzNTcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmQuaCIKIAorI2lmIEVOQUJMRShEQVRB
QkFTRSkKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2VuZGlmCisKICNpbmNsdWRlICJFbGVtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMzcs
OCArNDEsMTMgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgi
CiAKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisjaW5jbHVkZSAiU3RvcmFnZS5oIgorI2VuZGlm
CisKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICNpbmNsdWRlICJKYXZhU2NyaXB0
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdERlYnVnU2VydmVyLmgiCkBAIC0xMzks
MTAgKzE0OCwxMCBAQCBib29sIEluc3BlY3RvckJhY2tlbmQ6OmFkZFNvdXJjZVRvRnJhbWUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiBzbwogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNsZWFyTWVzc2FnZXMoKQordm9pZCBJbnNwZWN0
b3JCYWNrZW5kOjpjbGVhck1lc3NhZ2VzKGJvb2wgY2xlYXJVSSkKIHsKICAgICBpZiAobV9pbnNw
ZWN0b3JDb250cm9sbGVyKQotICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmNsZWFyQ29u
c29sZU1lc3NhZ2VzKCk7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xlYXJDb25z
b2xlTWVzc2FnZXMoY2xlYXJVSSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6dG9nZ2xl
Tm9kZVNlYXJjaCgpCkBAIC0zNzksMTAgKzM4OCw4MSBAQCB2b2lkIEluc3BlY3RvckJhY2tlbmQ6
OnNldFRleHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJp
bgogICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPnNldFRleHROb2Rl
VmFsdWUoY2FsbElkLCBlbGVtZW50SWQsIHZhbHVlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNr
ZW5kOjpoaWdobGlnaHQoTm9kZSogbm9kZSkKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6aGlnaGxp
Z2h0KGxvbmcgbm9kZUlkKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpIHsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+bm9k
ZUZvcklkKG5vZGVJZCk7CisgICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgbV9pbnNwZWN0
b3JDb250cm9sbGVyLT5oaWdobGlnaHQobm9kZSk7CisgICAgfQorfQorCitOb2RlKiBJbnNwZWN0
b3JCYWNrZW5kOjpub2RlRm9ySWQobG9uZyBub2RlSWQpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9y
Q29udHJvbGxlcikKLSAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5oaWdobGlnaHQobm9k
ZSk7CisgICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPm5v
ZGVGb3JJZChub2RlSWQpOworICAgIHJldHVybiAwOwogfQogCitsb25nIEluc3BlY3RvckJhY2tl
bmQ6OmlkRm9yTm9kZShOb2RlKiBub2RlKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXIpCisgICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCktPmlk
Rm9yTm9kZShub2RlKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK1NjcmlwdFZhbHVlIEluc3BlY3Rv
ckJhY2tlbmQ6OndyYXBPYmplY3QoY29uc3QgU2NyaXB0VmFsdWUmIG9iamVjdCkKK3sKKyAgICBp
ZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gbV9pbnNwZWN0b3JDb250
cm9sbGVyLT53cmFwT2JqZWN0KG9iamVjdCk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7Cit9
CisKK1NjcmlwdFZhbHVlIEluc3BlY3RvckJhY2tlbmQ6OnVud3JhcE9iamVjdChjb25zdCBTdHJp
bmcmIG9iamVjdElkKQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAg
IHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPnVud3JhcE9iamVjdChvYmplY3RJZCk7Cisg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7Cit9CisKK2xvbmcgSW5zcGVjdG9yQmFja2VuZDo6cHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlLCBib29sIHNlbGVjdEluVUkpCit7CisgICAg
aWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbUFnZW50IHx8ICFtX2luc3BlY3RvckNvbnRyb2xs
ZXItPm1fZnJvbnRlbmQpCisgICAgICAgIHJldHVybiAwOworICAgIGxvbmcgaWQgPSBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPm1fZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7
CisgICAgaWYgKHNlbGVjdEluVUkpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9m
cm9udGVuZC0+dXBkYXRlRm9jdXNlZE5vZGUoaWQpOworICAgIHJldHVybiBpZDsKK30KKwordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYg
bm9kZUlkcykKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyICYmIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+bV9mcm9udGVuZCkKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5t
X2Zyb250ZW5kLT5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMpOworfQorCisjaWYgRU5B
QkxFKERBVEFCQVNFKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZWxlY3REYXRhYmFzZShEYXRh
YmFzZSogZGF0YWJhc2UpCit7CisgICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9mcm9udGVuZCkK
KyAgICAgICAgcmV0dXJuOworICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9mcm9udGVuZC0+
c2VsZWN0RGF0YWJhc2UoZGF0YWJhc2UpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OnNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSog
c3RvcmFnZSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgcmV0
dXJuOworICAgIGlmICghbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kKQorICAgICAg
ICByZXR1cm47CisgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kLT5zZWxlY3RE
T01TdG9yYWdlKHN0b3JhZ2UpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAppbmRleCBkYWExNmI0Li40ZDM5NDkyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCkBAIC0zOCwxMCArMzgsMTIgQEAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CitjbGFzcyBEYXRhYmFz
ZTsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xh
c3MgSmF2YVNjcmlwdENhbGxGcmFtZTsKIGNsYXNzIE5vZGU7CitjbGFzcyBTdG9yYWdlOwogCiBj
bGFzcyBJbnNwZWN0b3JCYWNrZW5kIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2Vu
ZD4KIHsKQEAgLTY5LDcgKzcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUmVzb3VyY2VTb3Vy
Y2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmllciwgTm9kZSogZnJhbWUpOwogICAgIGJvb2wgYWRkU291
cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwg
Tm9kZSogZnJhbWUpOwogCi0gICAgdm9pZCBjbGVhck1lc3NhZ2VzKCk7CisgICAgdm9pZCBjbGVh
ck1lc3NhZ2VzKGJvb2wgY2xlYXJVSSk7CiAKICAgICB2b2lkIHRvZ2dsZU5vZGVTZWFyY2goKTsK
IApAQCAtMTI5LDcgKzEzMSwxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0Tm9kZVZhbHVl
KGxvbmcgY2FsbElkLCBsb25nIGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAKICAg
ICAvLyBHZW5lcmljIGNvZGUgY2FsbGVkIGZyb20gY3VzdG9tIGltcGxlbWVudGF0aW9ucy4KLSAg
ICB2b2lkIGhpZ2hsaWdodChOb2RlKiBub2RlKTsKKyAgICB2b2lkIGhpZ2hsaWdodChsb25nIG5v
ZGVJZCk7CisgICAgTm9kZSogbm9kZUZvcklkKGxvbmcgbm9kZUlkKTsKKyAgICBsb25nIGlkRm9y
Tm9kZShOb2RlKiBub2RlKTsKKyAgICBTY3JpcHRWYWx1ZSB3cmFwT2JqZWN0KGNvbnN0IFNjcmlw
dFZhbHVlJiBvYmplY3QpOworICAgIFNjcmlwdFZhbHVlIHVud3JhcE9iamVjdChjb25zdCBTdHJp
bmcmIG9iamVjdElkKTsKKyAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9k
ZSwgYm9vbCBzZWxlY3RJblVJKTsKKyAgICB2b2lkIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29u
c3QgU3RyaW5nJiBub2RlSWRzKTsKKyNpZiBFTkFCTEUoREFUQUJBU0UpCisgICAgdm9pZCBzZWxl
Y3REYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpOworI2VuZGlmCisjaWYgRU5BQkxFKERPTV9T
VE9SQUdFKQorICAgIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKTsKKyNl
bmRpZgogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckJhY2tlbmQoSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlciwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCA3NjlhMjA4Li5lNzFmNWViIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtMzUsMTQgKzM1LDE0IEBAIG1v
ZHVsZSBjb3JlIHsKICAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvcgogICAgIF0gSW5zcGVjdG9y
QmFja2VuZCB7CiAgICAgICAgIHZvaWQgaGlkZURPTU5vZGVIaWdobGlnaHQoKTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCBoaWdobGlnaHRET01Ob2RlKGluIE5vZGUgbm9kZSk7CisgICAgICAgIFtD
dXN0b21dIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShpbiBsb25nIGVsZW1lbnRJZCk7CiAgICAgICAg
IHZvaWQgbG9hZGVkKGluIGJvb2xlYW4gZW5hYmxlRE9NQWdlbnQpOwogICAgICAgICB2b2lkIHdp
bmRvd1VubG9hZGluZygpOwogICAgICAgICB2b2lkIGF0dGFjaCgpOwogICAgICAgICB2b2lkIGRl
dGFjaCgpOwogCiAgICAgICAgIHZvaWQgY2xvc2VXaW5kb3coKTsKLSAgICAgICAgdm9pZCBjbGVh
ck1lc3NhZ2VzKCk7CisgICAgICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhpbiBib29sZWFuIGNsZWFy
VUkpOwogICAgICAgICB2b2lkIHRvZ2dsZU5vZGVTZWFyY2goKTsKIAogICAgICAgICBib29sZWFu
IGlzV2luZG93VmlzaWJsZSgpOwpAQCAtMTAzLDUgKzEwMywxOSBAQCBtb2R1bGUgY29yZSB7CiAg
ICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIGVsZW1lbnRJ
ZCwgaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2YWx1ZSk7CiAgICAgICAgIHZvaWQg
cmVtb3ZlQXR0cmlidXRlKGluIGxvbmcgY2FsbElkLCBpbiBsb25nIGVsZW1lbnRJZCwgaW4gRE9N
U3RyaW5nIG5hbWUpOwogICAgICAgICB2b2lkIHNldFRleHROb2RlVmFsdWUoaW4gbG9uZyBjYWxs
SWQsIGluIGxvbmcgZWxlbWVudElkLCBpbiBET01TdHJpbmcgdmFsdWUpOworCisgICAgICAgIC8v
IENhbGxlZCBmcm9tIEluamVjdGVkU2NyaXB0LgorICAgICAgICBbQ3VzdG9tXSBET01PYmplY3Qg
bm9kZUZvcklkKGluIGxvbmcgbm9kZUlkKTsKKyAgICAgICAgW0N1c3RvbV0gbG9uZyBpZEZvck5v
ZGUoaW4gRE9NT2JqZWN0IG5vZGUpOworICAgICAgICBbQ3VzdG9tXSBsb25nIHdyYXBPYmplY3Qo
aW4gRE9NT2JqZWN0IG9iamVjdCk7CisgICAgICAgIFtDdXN0b21dIERPTU9iamVjdCB1bndyYXBP
YmplY3QoaW4gbG9uZyBvYmplY3RJZCk7CisgICAgICAgIFtDdXN0b21dIGludCBwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKGluIERPTU9iamVjdCBub2RlLCBpbiBib29sZWFuIHNlbGVjdEluVUkpOwor
ICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoaW4gRE9NU3RyaW5nIG5vZGVJZHMp
OworI2lmIGRlZmluZWQoRU5BQkxFX0RBVEFCQVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKKyAgICAg
ICAgW0N1c3RvbV0gdm9pZCBzZWxlY3REYXRhYmFzZShpbiBET01PYmplY3QgZGF0YWJhc2UpOwor
I2VuZGlmCisjaWYgZGVmaW5lZChFTkFCTEVfRE9NX1NUT1JBR0UpICYmIEVOQUJMRV9ET01fU1RP
UkFHRQorICAgICAgICBbQ3VzdG9tXSB2b2lkIHNlbGVjdERPTVN0b3JhZ2UoaW4gRE9NT2JqZWN0
IHN0b3JhZ2UpOworI2VuZGlmCiAgICAgfTsKLSB9Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGMzMzUxZTUuLjQ0NDA5MmMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2lu
Y2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgorI2luY2x1ZGUgIlNjcmlwdEZ1bmN0aW9uQ2FsbC5o
IgogI2luY2x1ZGUgIlNjcmlwdE9iamVjdC5oIgogI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgog
I2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC0xMjUsNiArMTI2LDcgQEAgSW5zcGVjdG9y
Q29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGll
bnQqIGNsaWVudCkKICAgICAsIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoZmFsc2UpCiAgICAg
LCBtX3Jlc291cmNlVHJhY2tpbmdTZXR0aW5nc0xvYWRlZChmYWxzZSkKICAgICAsIG1faW5zcGVj
dG9yQmFja2VuZChJbnNwZWN0b3JCYWNrZW5kOjpjcmVhdGUodGhpcywgY2xpZW50KSkKKyAgICAs
IG1fbGFzdEJvdW5kT2JqZWN0SWQoMSkKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikK
ICAgICAsIG1fZGVidWdnZXJFbmFibGVkKGZhbHNlKQogICAgICwgbV9hdHRhY2hEZWJ1Z2dlcldo
ZW5TaG93bihmYWxzZSkKQEAgLTI3MCw3ICsyNzIsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OmZvY3VzTm9kZSgpCiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogICAgIEFTU0VSVChtX25v
ZGVUb0ZvY3VzKTsKIAotICAgIG1fZnJvbnRlbmQtPnVwZGF0ZUZvY3VzZWROb2RlKG1fbm9kZVRv
Rm9jdXMuZ2V0KCkpOworICAgIGxvbmcgaWQgPSBtX2RvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zy
b250ZW5kKG1fbm9kZVRvRm9jdXMuZ2V0KCkpOworICAgIG1fZnJvbnRlbmQtPnVwZGF0ZUZvY3Vz
ZWROb2RlKGlkKTsKICAgICBtX25vZGVUb0ZvY3VzID0gMDsKIH0KIApAQCAtMzUwLDcgKzM1Mywy
NCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2Fn
ZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlCiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGFkZENvbnNvbGVNZXNzYWdlKGNhbGxTdGFjay0+c3RhdGUoKSwgbmV3
IENvbnNvbGVNZXNzYWdlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIGNhbGxTdGFjaywgbV9ncm91cExl
dmVsLCB0eXBlID09IFRyYWNlTWVzc2FnZVR5cGUpKTsKKyAgICBWZWN0b3I8U2NyaXB0VmFsdWU+
IHdyYXBwZWRBcmd1bWVudHMoY2FsbFN0YWNrLT5hdCgwKS5hcmd1bWVudENvdW50KCkpOworICAg
IGJvb2wgc3RvcmVUcmFjZSA9IHR5cGUgPT0gVHJhY2VNZXNzYWdlVHlwZTsKKyAgICBWZWN0b3I8
U2NyaXB0U3RyaW5nPiBmcmFtZXMoc3RvcmVUcmFjZSA/IGNhbGxTdGFjay0+c2l6ZSgpIDogMCk7
CisKKyAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RDYWxsZXIgPSBjYWxsU3RhY2stPmF0
KDApOworCisgICAgLy8gRklYTUU6IEZvciBub3csIGp1c3Qgc3RvcmUgZnVuY3Rpb24gbmFtZXMg
YXMgc3RyaW5ncy4KKyAgICAvLyBBcyBTY3JpcHRDYWxsU3RhY2sgc3RhcnQgc3RvcmluZyBsaW5l
IG51bWJlciBhbmQgc291cmNlIFVSTCBmb3IgYWxsCisgICAgLy8gZnJhbWVzLCByZWZhY3RvciB0
byB1c2UgdGhhdCwgYXMgd2VsbC4KKyAgICBpZiAoc3RvcmVUcmFjZSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2FsbFN0YWNrLT5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IGZyYW1lc1tpXSA9IGNhbGxTdGFjay0+YXQoaSkuZnVuY3Rpb25OYW1lKCk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxhc3RDYWxsZXIuYXJndW1lbnRDb3VudCgpOyAr
K2kpCisgICAgICAgIHdyYXBwZWRBcmd1bWVudHNbaV0gPSB3cmFwT2JqZWN0KGxhc3RDYWxsZXIu
YXJndW1lbnRBdChpKSk7CisKKyAgICBhZGRDb25zb2xlTWVzc2FnZShjYWxsU3RhY2stPnN0YXRl
KCksIG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIHR5cGUsIGxldmVsLCBmcmFtZXMsIHdyYXBw
ZWRBcmd1bWVudHMsIGxhc3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0Q2FsbGVyLnNvdXJjZVVS
TCgpLnN0cmluZygpLCBtX2dyb3VwTGV2ZWwpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlVHlw
ZSB0eXBlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWdu
ZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKQEAgLTM3OCwxOSArMzk4LDIy
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkQ29uc29sZU1lc3NhZ2UoU2NyaXB0U3Rh
dGUqIHNjcmlwdFN0YXRlLCBDb25zb2xlTWVzCiAgICAgICAgIG1fcHJldmlvdXNNZXNzYWdlLT5h
ZGRUb0NvbnNvbGUobV9mcm9udGVuZC5nZXQoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Y2xlYXJDb25zb2xlTWVzc2FnZXMoKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpj
bGVhckNvbnNvbGVNZXNzYWdlcyhib29sIGNsZWFyVUkpCiB7CiAgICAgZGVsZXRlQWxsVmFsdWVz
KG1fY29uc29sZU1lc3NhZ2VzKTsKICAgICBtX2NvbnNvbGVNZXNzYWdlcy5jbGVhcigpOwogICAg
IG1fcHJldmlvdXNNZXNzYWdlID0gMDsKICAgICBtX2dyb3VwTGV2ZWwgPSAwOworICAgIG1faWRU
b0NvbnNvbGVPYmplY3QuY2xlYXIoKTsKKyAgICBpZiAoY2xlYXJVSSAmJiBtX2Zyb250ZW5kKQor
ICAgICAgICBtX2Zyb250ZW5kLT5jbGVhckNvbnNvbGVNZXNzYWdlcygpOwogfQogCiB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0R3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIFNjcmlw
dENhbGxTdGFjayogY2FsbFN0YWNrKQogewogICAgICsrbV9ncm91cExldmVsOwogCi0gICAgYWRk
Q29uc29sZU1lc3NhZ2UoY2FsbFN0YWNrLT5zdGF0ZSgpLCBuZXcgQ29uc29sZU1lc3NhZ2Uoc291
cmNlLCBTdGFydEdyb3VwTWVzc2FnZVR5cGUsIExvZ01lc3NhZ2VMZXZlbCwgY2FsbFN0YWNrLCBt
X2dyb3VwTGV2ZWwpKTsKKyAgICBhZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgU3RhcnRHcm91
cE1lc3NhZ2VUeXBlLCBMb2dNZXNzYWdlTGV2ZWwsIGNhbGxTdGFjayk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6ZW5kR3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQpAQCAtNTI0LDYgKzU0Nyw5IEBA
IHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoYm9vbCBlbmFibGVE
T01BZ2VudCkKICAgICBpZiAoZW5hYmxlRE9NQWdlbnQpCiAgICAgICAgIG1fZG9tQWdlbnQgPSBu
ZXcgSW5zcGVjdG9yRE9NQWdlbnQobV9mcm9udGVuZC5nZXQoKSk7CiAKKyAgICBpZiAoIVNjcmlw
dEdsb2JhbE9iamVjdDo6Z2V0KG1fc2NyaXB0U3RhdGUsICJJbmplY3RlZFNjcmlwdCIsIG1faW5q
ZWN0ZWRTY3JpcHRPYmopKQorICAgICAgICByZXR1cm47CisgICAgCiAjaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICAgU2V0dGluZyBkZWJ1Z2dlckVuYWJsZWQgPSBzZXR0aW5nKGRl
YnVnZ2VyRW5hYmxlZFNldHRpbmdOYW1lKTsKICAgICBpZiAoZGVidWdnZXJFbmFibGVkLnR5cGUo
KSA9PSBTZXR0aW5nOjpCb29sZWFuVHlwZSAmJiBkZWJ1Z2dlckVuYWJsZWQuYm9vbGVhblZhbHVl
KCkpCkBAIC01OTUsNiArNjIxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbG9zZSgp
CiAgICAgY2xvc2VXaW5kb3coKTsKIAogICAgIG1fZnJvbnRlbmQuc2V0KDApOworICAgIG1faW5q
ZWN0ZWRTY3JpcHRPYmogPSBTY3JpcHRPYmplY3QoKTsKICAgICBpZiAobV9kb21BZ2VudCkgewog
ICAgICAgICBtX2RvbUFnZW50LT5zZXREb2N1bWVudCgwKTsKICAgICAgICAgbV9kb21BZ2VudCA9
IDA7CkBAIC03MDYsNyArNzMzLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21t
aXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgaWYgKGxvYWRlci0+ZnJhbWUoKSA9
PSBtX2luc3BlY3RlZFBhZ2UtPm1haW5GcmFtZSgpKSB7CiAgICAgICAgIG1fY2xpZW50LT5pbnNw
ZWN0ZWRVUkxDaGFuZ2VkKGxvYWRlci0+dXJsKCkuc3RyaW5nKCkpOwogCi0gICAgICAgIGNsZWFy
Q29uc29sZU1lc3NhZ2VzKCk7CisgICAgICAgIGNsZWFyQ29uc29sZU1lc3NhZ2VzKGZhbHNlKTsK
IAogICAgICAgICBtX3RpbWVzLmNsZWFyKCk7CiAgICAgICAgIG1fY291bnRzLmNsZWFyKCk7CkBA
IC0xNDc4LDQgKzE1MDUsMjggQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6U3BlY2lhbFBhbmVscyBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzcGVjaWFsUGFuZWxGb3JKU05hbWUoY28KICAgICAgICAgcmV0
dXJuIEVsZW1lbnRzUGFuZWw7CiB9CiAKK1NjcmlwdFZhbHVlIEluc3BlY3RvckNvbnRyb2xsZXI6
OndyYXBPYmplY3QoY29uc3QgU2NyaXB0VmFsdWUmIG9iamVjdCkKK3sKKyAgICBpZiAob2JqZWN0
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgbG9uZyBpZCA9IG1fbGFzdEJvdW5kT2JqZWN0SWQrKzsK
KyAgICAgICAgU3RyaW5nIG9iamVjdElkID0gU3RyaW5nOjpmb3JtYXQoIm9iamVjdCMlbGQiLCBp
ZCk7CisgICAgICAgIG1faWRUb0NvbnNvbGVPYmplY3Quc2V0KG9iamVjdElkLCBvYmplY3QpOwor
CisgICAgICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3NjcmlwdFN0YXRlLCBtX2lu
amVjdGVkU2NyaXB0T2JqLCAiX2NyZWF0ZVByb3h5T2JqZWN0Iik7CisgICAgICAgIGZ1bmN0aW9u
LmFwcGVuZEFyZ3VtZW50KG9iamVjdCk7CisgICAgICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KG9iamVjdElkKTsKKyAgICAgICAgU2NyaXB0VmFsdWUgd3JhcHBlciA9IGZ1bmN0aW9uLmNhbGwo
KTsKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQorICAgIHJldHVybiBvYmplY3Q7Cit9
CisKK1NjcmlwdFZhbHVlIEluc3BlY3RvckNvbnRyb2xsZXI6OnVud3JhcE9iamVjdChjb25zdCBT
dHJpbmcmIG9iamVjdElkKQoreworICAgIEhhc2hNYXA8U3RyaW5nLCBTY3JpcHRWYWx1ZT46Oml0
ZXJhdG9yIGl0ID0gbV9pZFRvQ29uc29sZU9iamVjdC5maW5kKG9iamVjdElkKTsKKyAgICBpZiAo
aXQgIT0gbV9pZFRvQ29uc29sZU9iamVjdC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNv
bmQ7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCAwNWQ5NjUyLi5k
MjAwOGE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC0zMSw3
ICszMSw5IEBACiAKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5o
IgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgogI2lu
Y2x1ZGUgIlRpbWVyLmgiCiAKQEAgLTYyLDcgKzY0LDYgQEAgY2xhc3MgSW5zcGVjdG9yQ2xpZW50
OwogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKIGNs
YXNzIEphdmFTY3JpcHRDYWxsRnJhbWU7Ci1jbGFzcyBTdG9yYWdlQXJlYTsKIGNsYXNzIEtVUkw7
CiBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKQEAgLTcwLDkgKzcxLDkgQEAgc3RydWN0IFJlc291
cmNlUmVxdWVzdDsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBSZXNvdXJjZUVycm9y
OwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwotY2xhc3MgU2NyaXB0T2JqZWN0OwogY2xhc3MgU2Ny
aXB0U3RyaW5nOwogY2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgU3RvcmFnZUFyZWE7CiAKIGNs
YXNzIENvbnNvbGVNZXNzYWdlOwogY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKQEAg
LTE4Miw3ICsxODMsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUo
TWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNr
Kik7CiAgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VU
eXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7Ci0gICAgdm9pZCBjbGVhckNvbnNvbGVNZXNz
YWdlcygpOworICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoYm9vbCBjbGVhclVJKTsKICAg
ICBjb25zdCBWZWN0b3I8Q29uc29sZU1lc3NhZ2UqPiYgY29uc29sZU1lc3NhZ2VzKCkgY29uc3Qg
eyByZXR1cm4gbV9jb25zb2xlTWVzc2FnZXM7IH0KIAogICAgIHZvaWQgYXR0YWNoV2luZG93KCk7
CkBAIC0yNzksNiArMjgwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3JlTGFzdEFjdGl2ZVBh
bmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKICAgICB2b2lkIGNsb3NlV2luZG93KCk7CiAg
ICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQo
KTsgfQorICAgIFNjcmlwdFZhbHVlIHdyYXBPYmplY3QoY29uc3QgU2NyaXB0VmFsdWUmIG9iamVj
dCk7CisgICAgU2NyaXB0VmFsdWUgdW53cmFwT2JqZWN0KGNvbnN0IFN0cmluZyYgb2JqZWN0SWQp
OwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgdm9pZCBzdGFydFVzZXJJ
bml0aWF0ZWRQcm9maWxpbmdTb29uKCk7CkBAIC0zMDcsNiArMzEwLDcgQEAgcHJpdmF0ZToKICAg
ICBJbnNwZWN0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVu
ZD4gbV9mcm9udGVuZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7
CisgICAgU2NyaXB0T2JqZWN0IG1faW5qZWN0ZWRTY3JpcHRPYmo7CiAgICAgUGFnZSogbV9wYWdl
OwogICAgIFJlZlB0cjxOb2RlPiBtX25vZGVUb0ZvY3VzOwogICAgIFJlZlB0cjxJbnNwZWN0b3JS
ZXNvdXJjZT4gbV9tYWluUmVzb3VyY2U7CkBAIC0zMzMsNiArMzM3LDggQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQ7CiAgICAgYm9vbCBtX3Jlc291cmNlVHJh
Y2tpbmdTZXR0aW5nc0xvYWRlZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZD4gbV9pbnNw
ZWN0b3JCYWNrZW5kOworICAgIEhhc2hNYXA8U3RyaW5nLCBTY3JpcHRWYWx1ZT4gbV9pZFRvQ29u
c29sZU9iamVjdDsKKyAgICBsb25nIG1fbGFzdEJvdW5kT2JqZWN0SWQ7CiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgYm9vbCBtX2RlYnVnZ2VyRW5hYmxlZDsKICAgICBib29s
IG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd247CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKaW5kZXggZjIyMjIzOS4uNTUxY2FhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcApAQCAtMjI5LDYgKzIyOSw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmRpc2NhcmRCaW5kaW5ncygpCiAKIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9y
SWQobG9uZyBpZCkKIHsKKyAgICBpZiAoIWlkKQorICAgICAgICByZXR1cm4gbWFpbkZyYW1lRG9j
dW1lbnQoKTsKKwogICAgIEhhc2hNYXA8bG9uZywgTm9kZSo+OjppdGVyYXRvciBpdCA9IG1faWRU
b05vZGUuZmluZChpZCk7CiAgICAgaWYgKGl0ICE9IG1faWRUb05vZGUuZW5kKCkpCiAgICAgICAg
IHJldHVybiBpdC0+c2Vjb25kOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZS5jcHAKaW5kZXggMDNkYjY0OS4uMWU1Njc0MiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwCkBAIC02NCw3
ICs2NCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpiaW5kKEluc3BlY3Rv
ckZyb250ZW5kKiBmcm9udGVuZCkKIAogICAgIFNjcmlwdE9iamVjdCBqc29uT2JqZWN0ID0gZnJv
bnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwogICAgIFNjcmlwdE9iamVjdCBkb21TdG9yYWdlOwot
ICAgIGlmICghZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QobV9mcmFtZS5nZXQoKSwgbV9kb21T
dG9yYWdlLmdldCgpLCBkb21TdG9yYWdlKSkKKyAgICBpZiAoIWdldFF1YXJhbnRpbmVkU2NyaXB0
T2JqZWN0KG1fZG9tU3RvcmFnZS5nZXQoKSwgZG9tU3RvcmFnZSkpCiAgICAgICAgIHJldHVybjsK
ICAgICBqc29uT2JqZWN0LnNldCgiZG9tU3RvcmFnZSIsIGRvbVN0b3JhZ2UpOwogICAgIGpzb25P
YmplY3Quc2V0KCJob3N0IiwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+
aG9zdCgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAppbmRleCBhZjY1
ZmI0Li45YjM5ZjFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCkBA
IC04NSw2ICs4NSwxMSBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjphZGRNZXNzYWdlVG9Db25z
b2xlKGNvbnN0IFNjcmlwdE9iamVjdCYgbWVzc2FnZU9iaiwgY29ucwogICAgIGZ1bmN0aW9uLT5j
YWxsKCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmNsZWFyQ29uc29sZU1lc3NhZ2Vz
KCkKK3sKKyAgICBjYWxsU2ltcGxlRnVuY3Rpb24oImNsZWFyQ29uc29sZU1lc3NhZ2VzIik7Cit9
CisKIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZFJlc291cmNlKGxvbmcgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBTY3JpcHRPYmplY3QmIHJlc291cmNlT2JqKQogewogICAgIE93blB0cjxTY3Jp
cHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgiYWRkUmVzb3VyY2UiKSk7
CkBAIC0xMTIsMTQgKzExNywxMCBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpyZW1vdmVSZXNv
dXJjZShsb25nIGxvbmcgaWRlbnRpZmllcikKICAgICBmdW5jdGlvbi0+Y2FsbCgpOwogfQogCi12
b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVGb2N1c2VkTm9kZShOb2RlKiBub2RlKQordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlRm9jdXNlZE5vZGUobG9uZyBsb25nIG5vZGVJZCkK
IHsKLSAgICBTY3JpcHRPYmplY3QgcXVhcmFudGluZWROb2RlOwotICAgIGlmICghZ2V0UXVhcmFu
dGluZWRTY3JpcHRPYmplY3Qobm9kZSwgcXVhcmFudGluZWROb2RlKSkKLSAgICAgICAgcmV0dXJu
OwotCiAgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVuY3Rpb25D
YWxsKCJ1cGRhdGVGb2N1c2VkTm9kZSIpKTsKLSAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQo
cXVhcmFudGluZWROb2RlKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQobm9kZUlkKTsK
ICAgICBmdW5jdGlvbi0+Y2FsbCgpOwogfQogCkBAIC0zNDksNiArMzUwLDM3IEBAIHZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OmRpZEFwcGx5RG9tQ2hhbmdlKGludCBjYWxsSWQsIGJvb2wgc3VjY2Vz
cykKICAgICBmdW5jdGlvbi0+Y2FsbCgpOwogfQogCisjaWYgRU5BQkxFKERBVEFCQVNFKQordm9p
ZCBJbnNwZWN0b3JGcm9udGVuZDo6c2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQor
eworICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2Fs
bCgic2VsZWN0RGF0YWJhc2UiKSk7CisgICAgU2NyaXB0T2JqZWN0IHF1YXJhbnRpbmVkT2JqZWN0
OworICAgIGlmICghZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoZGF0YWJhc2UsIHF1YXJhbnRp
bmVkT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVu
dChxdWFyYW50aW5lZE9iamVjdCk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKK30KKyNlbmRpZgor
CisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQordm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2VsZWN0
RE9NU3RvcmFnZShGcmFtZSogZnJhbWUsIFN0b3JhZ2UqIHN0b3JhZ2UpCit7CisgICAgT3duUHRy
PFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJzZWxlY3RET01T
dG9yYWdlIikpOworICAgIFNjcmlwdE9iamVjdCBxdWFyYW50aW5lZE9iamVjdDsKKyAgICBpZiAo
IWdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KHN0b3JhZ2UsIHF1YXJhbnRpbmVkT2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuOworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudChxdWFyYW50aW5l
ZE9iamVjdCk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKK30KKyNlbmRpZgorCit2b2lkIEluc3Bl
Y3RvckZyb250ZW5kOjphZGROb2Rlc1RvU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgbm9kZUlk
cykKK3sKKyAgICBPd25QdHI8U2NyaXB0RnVuY3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlv
bkNhbGwoImFkZE5vZGVzVG9TZWFyY2hSZXN1bHQiKSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFy
Z3VtZW50KG5vZGVJZHMpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7Cit9CisKIFBhc3NPd25QdHI8
U2NyaXB0RnVuY3Rpb25DYWxsPiBJbnNwZWN0b3JGcm9udGVuZDo6bmV3RnVuY3Rpb25DYWxsKGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lKQogewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCogZnVu
Y3Rpb24gPSBuZXcgU2NyaXB0RnVuY3Rpb25DYWxsKG1fc2NyaXB0U3RhdGUsIG1fd2ViSW5zcGVj
dG9yLCAiZGlzcGF0Y2giKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4
IDdhNDhiNjIuLjM0MDFiYmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApA
QCAtNDUsMTAgKzQ1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgQ29uc29sZU1lc3NhZ2U7CisgICAgY2xhc3MgRGF0YWJhc2U7CisgICAgY2xh
c3MgRnJhbWU7CiAgICAgY2xhc3MgSW5zcGVjdG9yUmVzb3VyY2U7CiAgICAgY2xhc3MgTm9kZTsK
ICAgICBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGw7CiAgICAgY2xhc3MgU2NyaXB0U3RyaW5nOwor
ICAgIGNsYXNzIFN0b3JhZ2U7CiAKICAgICBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CiAgICAg
cHVibGljOgpAQCAtNTksMTIgKzYyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
U2NyaXB0T2JqZWN0IG5ld1NjcmlwdE9iamVjdCgpOwogCiAgICAgICAgIHZvaWQgYWRkTWVzc2Fn
ZVRvQ29uc29sZShjb25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnN0IFZlY3RvcjxT
Y3JpcHRTdHJpbmc+JiBmcmFtZXMsIGNvbnN0IFZlY3RvcjxTY3JpcHRWYWx1ZT4gd3JhcHBlZEFy
Z3VtZW50cywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICAgICAgCisgICAgICAgIHZvaWQg
Y2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKKwogICAgICAgICBib29sIGFkZFJlc291cmNlKGxvbmcg
bG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRPYmplY3QmIHJlc291cmNlT2JqKTsKICAgICAg
ICAgYm9vbCB1cGRhdGVSZXNvdXJjZShsb25nIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU2NyaXB0
T2JqZWN0JiByZXNvdXJjZU9iaik7CiAgICAgICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2UobG9uZyBs
b25nIGlkZW50aWZpZXIpOwogCi0gICAgICAgIHZvaWQgdXBkYXRlRm9jdXNlZE5vZGUoTm9kZSog
bm9kZSk7CisgICAgICAgIHZvaWQgdXBkYXRlRm9jdXNlZE5vZGUobG9uZyBsb25nIG5vZGVJZCk7
CiAgICAgICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRhY2hlZCk7CiAgICAgICAg
IHZvaWQgaW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChGcmFtZSogZnJhbWUpOwog
ICAgICAgICB2b2lkIHNob3dQYW5lbChpbnQgcGFuZWwpOwpAQCAtOTAsMTAgKzk0LDEyIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgYm9vbCBh
ZGREYXRhYmFzZShjb25zdCBTY3JpcHRPYmplY3QmIGRiT2JqKTsKKyAgICAgICAgdm9pZCBzZWxl
Y3REYXRhYmFzZShEYXRhYmFzZSogZGF0YWJhc2UpOwogI2VuZGlmCiAgICAgICAgIAogI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKICAgICAgICAgYm9vbCBhZGRET01TdG9yYWdlKGNvbnN0IFNjcmlw
dE9iamVjdCYgZG9tU3RvcmFnZU9iaik7CisgICAgICAgIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShT
dG9yYWdlKiBzdG9yYWdlKTsKICNlbmRpZgogCiAgICAgICAgIHZvaWQgc2V0RG9jdW1lbnRFbGVt
ZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgcm9vdCk7CkBAIC0xMDUsNiArMTExLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpZEdldENoaWxkTm9kZXMoaW50IGNhbGxJZCk7
CiAgICAgICAgIHZvaWQgZGlkQXBwbHlEb21DaGFuZ2UoaW50IGNhbGxJZCwgYm9vbCBzdWNjZXNz
KTsKIAorICAgICAgICB2b2lkIGFkZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBu
b2RlSWRzKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFBhc3NPd25QdHI8U2NyaXB0RnVuY3Rp
b25DYWxsPiBuZXdGdW5jdGlvbkNhbGwoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpOwogICAg
ICAgICB2b2lkIGNhbGxTaW1wbGVGdW5jdGlvbihjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKaW5kZXggNjg1MWVl
YS4uZTY5OTdiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNv
bGVWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5q
cwpAQCAtMTc1LDcgKzE3NSw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUg
PSB7CiAgICAgY2xlYXJNZXNzYWdlczogZnVuY3Rpb24oY2xlYXJJbnNwZWN0b3JDb250cm9sbGVy
KQogICAgIHsKICAgICAgICAgaWYgKGNsZWFySW5zcGVjdG9yQ29udHJvbGxlcikKLSAgICAgICAg
ICAgIEluc3BlY3RvckNvbnRyb2xsZXIuY2xlYXJNZXNzYWdlcygpOworICAgICAgICAgICAgSW5z
cGVjdG9yQ29udHJvbGxlci5jbGVhck1lc3NhZ2VzKGZhbHNlKTsKICAgICAgICAgaWYgKFdlYklu
c3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzKQogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVs
cy5yZXNvdXJjZXMuY2xlYXJNZXNzYWdlcygpOwogCkBAIC0yMTEsMTEgKzIxMSwzMSBAQCBXZWJJ
bnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIWV4cHJlc3Np
b25TdHJpbmcgJiYgIXByZWZpeCkKICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICBpZiAo
IWV4cHJlc3Npb25TdHJpbmcpCisgICAgICAgICAgICBleHByZXNzaW9uU3RyaW5nID0gInRoaXMi
OworCiAgICAgICAgIHZhciByZXBvcnRDb21wbGV0aW9ucyA9IHRoaXMuX3JlcG9ydENvbXBsZXRp
b25zLmJpbmQodGhpcywgYmVzdE1hdGNoT25seSwgY29tcGxldGlvbnNSZWFkeUNhbGxiYWNrLCBk
b3ROb3RhdGlvbiwgYnJhY2tldE5vdGF0aW9uLCBwcmVmaXgpOwotICAgICAgICB0aGlzLl9ldmFs
SW5JbnNwZWN0ZWRXaW5kb3coZXhwcmVzc2lvblN0cmluZywgcmVwb3J0Q29tcGxldGlvbnMpOwor
ICAgICAgICAvLyBDb2xsZWN0IGNvbW1hIHNlcGFyYXRlZCBvYmplY3QgcHJvcGVydGllcyBmb3Ig
dGhlIGNvbXBsZXRpb24uCisgICAgICAgIHRoaXMuX2V2YWxJbkluc3BlY3RlZFdpbmRvdygKKyAg
ICAgICAgICAgICIoZnVuY3Rpb24oKSB7IFwKKyAgICAgICAgICAgICAgICB2YXIgcHJvcHMgPVtd
OyBcCisgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiAoIiArIGV4cHJlc3Npb25TdHJp
bmcgKyAiKSkgXAorICAgICAgICAgICAgICAgICAgICBwcm9wcy5wdXNoKHByb3ApOyBcCisgICAg
ICAgICAgICAgICAgaWYgKCFkb3ROb3RhdGlvbiAmJiAhYnJhY2tldE5vdGF0aW9uKSB7IFwKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiB3aW5kb3cuX2luc3BlY3RvckNvbW1h
bmRMaW5lQVBJKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wLmNoYXJBdCgw
KSAhPT0gJ18nKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaChwcm9w
KTsgXAorICAgICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgICB9IFwKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcHJvcHMuam9pbignLCcpOyBcCisgICAgICAgICAgICB9KSgpIiwK
KyAgICAgICAgICAgIHJlcG9ydENvbXBsZXRpb25zKTsKICAgICB9LAogCi0gICAgX3JlcG9ydENv
bXBsZXRpb25zOiBmdW5jdGlvbihiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJh
Y2ssIGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCwgcmVzdWx0KSB7CisgICAg
X3JlcG9ydENvbXBsZXRpb25zOiBmdW5jdGlvbihiZXN0TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1Jl
YWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFja2V0Tm90YXRpb24sIHByZWZpeCwgcmVzdWx0
LCBpc0V4Y2VwdGlvbikgeworICAgICAgICBpZiAoaXNFeGNlcHRpb24pCisgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgaWYgKGJyYWNrZXROb3RhdGlvbikgewogICAgICAgICAgICAgaWYg
KHByZWZpeC5sZW5ndGggJiYgcHJlZml4WzBdID09PSAiJyIpCiAgICAgICAgICAgICAgICAgdmFy
IHF1b3RlVXNlZCA9ICInIjsKQEAgLTIyNCwxNSArMjQ0LDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNv
bGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHZhciByZXN1bHRzID0g
W107Ci0gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LnByb3BlcnRpZXMocmVzdWx0KTsK
LSAgICAgICAgaWYgKCFkb3ROb3RhdGlvbiAmJiAhYnJhY2tldE5vdGF0aW9uICYmIHJlc3VsdC5f
aW5zcGVjdG9yQ29tbWFuZExpbmVBUEkpIHsKLSAgICAgICAgICAgIHZhciBjb21tYW5kTGluZUFQ
SSA9IE9iamVjdC5wcm9wZXJ0aWVzKHJlc3VsdC5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkpOwot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tYW5kTGluZUFQSS5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGNvbW1hbmRMaW5lQVBJW2ldOwot
ICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5jaGFyQXQoMCkgIT09ICJfIikKLSAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQorICAgICAgICB2YXIgcHJvcGVydGllcyA9IHJlc3VsdC5zcGxpdCgiLCIpOwogICAg
ICAgICBwcm9wZXJ0aWVzLnNvcnQoKTsKIAogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBy
b3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKQEAgLTI4OCw3ICszMDAsNyBAQCBXZWJJbnNwZWN0b3Iu
Q29uc29sZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICBpZiAoIWxpbmsgfHwgIWxpbmsucmVw
cmVzZW50ZWROb2RlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFdlYkluc3BlY3Rv
ci51cGRhdGVGb2N1c2VkTm9kZShsaW5rLnJlcHJlc2VudGVkTm9kZSk7CisgICAgICAgIFdlYklu
c3BlY3Rvci51cGRhdGVGb2N1c2VkTm9kZShsaW5rLnJlcHJlc2VudGVkTm9kZS5pZCk7CiAgICAg
ICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwogICAgIH0sCkBAIC0zMTMsNzQgKzMyNSw2IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmll
dy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZG9FdmFsSW5XaW5kb3coZXhwcmVzc2lvbiwg
Y2FsbGJhY2spOwogICAgIH0sCiAKLSAgICBfZW5zdXJlQ29tbWFuZExpbmVBUElJbnN0YWxsZWQ6
IGZ1bmN0aW9uKGluc3BlY3RlZFdpbmRvdykKLSAgICB7Ci0gICAgICAgIGlmICghaW5zcGVjdGVk
V2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgewotICAgICAgICAgICAgaW5zcGVjdGVk
V2luZG93LmV2YWwoIndpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkgPSB7IFwKLSAgICAg
ICAgICAgICAgICAkOiBmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
LmFwcGx5KGRvY3VtZW50LCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgICAgICAgICAkJDogZnVu
Y3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsLmFwcGx5KGRvY3VtZW50
LCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgICAgICAgICAkeDogZnVuY3Rpb24oeHBhdGgsIGNv
bnRleHQpIHsgXAotICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXMgPSBbXTsgXAotICAgICAg
ICAgICAgICAgICAgICB0cnkgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9jID0g
Y29udGV4dCB8fCBkb2N1bWVudDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3Vs
dHMgPSBkb2MuZXZhbHVhdGUoeHBhdGgsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuQU5ZX1RZUEUs
IG51bGwpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZTsgXAotICAgICAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgPSByZXN1bHRzLml0ZXJhdGVOZXh0KCkpIG5vZGVz
LnB1c2gobm9kZSk7IFwKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30gXAotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7IFwKLSAgICAgICAgICAgICAgICB9LCBcCi0g
ICAgICAgICAgICAgICAgZGlyOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUuZGlyLmFwcGx5
KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICAgICAgICAgIGRpcnhtbDogZnVuY3Rp
b24oKSB7IHJldHVybiBjb25zb2xlLmRpcnhtbC5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0s
IFwKLSAgICAgICAgICAgICAgICBrZXlzOiBmdW5jdGlvbihvKSB7IHZhciBhID0gW107IGZvciAo
dmFyIGsgaW4gbykgYS5wdXNoKGspOyByZXR1cm4gYTsgfSwgXAotICAgICAgICAgICAgICAgIHZh
bHVlczogZnVuY3Rpb24obykgeyB2YXIgYSA9IFtdOyBmb3IgKHZhciBrIGluIG8pIGEucHVzaChv
W2tdKTsgcmV0dXJuIGE7IH0sIFwKLSAgICAgICAgICAgICAgICBwcm9maWxlOiBmdW5jdGlvbigp
IHsgcmV0dXJuIGNvbnNvbGUucHJvZmlsZS5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFwK
LSAgICAgICAgICAgICAgICBwcm9maWxlRW5kOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUu
cHJvZmlsZUVuZC5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFwKLSAgICAgICAgICAgICAg
ICBfaW5zcGVjdGVkTm9kZXM6IFtdLCBcCi0gICAgICAgICAgICAgICAgZ2V0ICQwKCkgeyByZXR1
cm4gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1swXSB9LCBcCi0gICAg
ICAgICAgICAgICAgZ2V0ICQxKCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9p
bnNwZWN0ZWROb2Rlc1sxXSB9LCBcCi0gICAgICAgICAgICAgICAgZ2V0ICQyKCkgeyByZXR1cm4g
X2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1syXSB9LCBcCi0gICAgICAg
ICAgICAgICAgZ2V0ICQzKCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNw
ZWN0ZWROb2Rlc1szXSB9LCBcCi0gICAgICAgICAgICAgICAgZ2V0ICQ0KCkgeyByZXR1cm4gX2lu
c3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1s0XSB9IFwKLSAgICAgICAgICAg
IH07Iik7Ci0KLSAgICAgICAgICAgIGluc3BlY3RlZFdpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExp
bmVBUEkuY2xlYXIgPSBJbnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxsYmFjayh0aGlzLmNsZWFy
TWVzc2FnZXMuYmluZCh0aGlzKSk7Ci0gICAgICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuX2luc3Bl
Y3RvckNvbW1hbmRMaW5lQVBJLmluc3BlY3QgPSBJbnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxs
YmFjayhpbnNwZWN0T2JqZWN0LmJpbmQodGhpcykpOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBp
bnNwZWN0T2JqZWN0KG8pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkuY29uc29sZS5s
b2cobyk7Ci0gICAgICAgICAgICAgICAgaWYgKE9iamVjdC50eXBlKG8sIEluc3BlY3RvckNvbnRy
b2xsZXIuaW5zcGVjdGVkV2luZG93KCkpID09PSAibm9kZSIpIHsKLSAgICAgICAgICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLnNob3dFbGVtZW50c1BhbmVsKCk7Ci0gICAgICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMudHJlZU91dGxpbmUucmV2ZWFsQW5kU2VsZWN0
Tm9kZShvKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKE9iamVjdC5kZXNjcmliZShvKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAiRGF0YWJhc2UiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5z
aG93RGF0YWJhc2VzUGFuZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJJbnNw
ZWN0b3IucGFuZWxzLmRhdGFiYXNlcy5zZWxlY3REYXRhYmFzZShvKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIlN0b3Jh
Z2UiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93RGF0YWJh
c2VzUGFuZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFu
ZWxzLmRhdGFiYXNlcy5zZWxlY3RET01TdG9yYWdlKG8pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSwKLQotICAgIGFkZEluc3BlY3RlZE5vZGU6
IGZ1bmN0aW9uKG5vZGUpCi0gICAgewotICAgICAgICB2YXIgaW5zcGVjdGVkV2luZG93ID0gSW5z
cGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKTsKLSAgICAgICAgdGhpcy5fZW5zdXJl
Q29tbWFuZExpbmVBUElJbnN0YWxsZWQoaW5zcGVjdGVkV2luZG93KTsKLSAgICAgICAgdmFyIGlu
c3BlY3RlZE5vZGVzID0gaW5zcGVjdGVkV2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5f
aW5zcGVjdGVkTm9kZXM7Ci0gICAgICAgIGluc3BlY3RlZE5vZGVzLnVuc2hpZnQobm9kZSk7Ci0g
ICAgICAgIGlmIChpbnNwZWN0ZWROb2Rlcy5sZW5ndGggPj0gNSkKLSAgICAgICAgICAgIGluc3Bl
Y3RlZE5vZGVzLnBvcCgpOwotICAgIH0sCi0KICAgICBkb0V2YWxJbldpbmRvdzogZnVuY3Rpb24o
ZXhwcmVzc2lvbiwgY2FsbGJhY2spCiAgICAgewogICAgICAgICBpZiAoIWV4cHJlc3Npb24pIHsK
QEAgLTM4OCwyMiArMzMyLDE1IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gInRoaXMiOwogICAgICAgICB9CiAKLSAgICAg
ICAgLy8gU3Vycm91bmQgdGhlIGV4cHJlc3Npb24gaW4gd2l0aCBzdGF0ZW1lbnRzIHRvIGluamVj
dCBvdXIgY29tbWFuZCBsaW5lIEFQSSBzbyB0aGF0Ci0gICAgICAgIC8vIHRoZSB3aW5kb3cgb2Jq
ZWN0IHByb3BlcnRpZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVu
Y3Rpb25zLgotICAgICAgICBleHByZXNzaW9uID0gIndpdGggKHdpbmRvdy5faW5zcGVjdG9yQ29t
bWFuZExpbmVBUEkpIHsgd2l0aCAod2luZG93KSB7ICIgKyBleHByZXNzaW9uICsgIiB9IH0iOwot
CiAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgZnVuY3Rpb24gZGVsYXllZEV2YWx1
YXRpb24oKQorICAgICAgICBmdW5jdGlvbiBldmFsQ2FsbGJhY2socmVzdWx0KQogICAgICAgICB7
Ci0gICAgICAgICAgICB2YXIgaW5zcGVjdGVkV2luZG93ID0gSW5zcGVjdG9yQ29udHJvbGxlci5p
bnNwZWN0ZWRXaW5kb3coKTsKLSAgICAgICAgICAgIHNlbGYuX2Vuc3VyZUNvbW1hbmRMaW5lQVBJ
SW5zdGFsbGVkKGluc3BlY3RlZFdpbmRvdyk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKGluc3BlY3RlZFdpbmRvdy5ldmFsKGV4cHJlc3Npb24pKTsKLSAgICAg
ICAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhlLCB0cnVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzZXRUaW1lb3V0KGRlbGF5ZWRFdmFs
dWF0aW9uLCAwKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuZXhjZXB0aW9uKQorICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKHJlc3VsdC5leGNlcHRpb24sIHRydWUpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdC52YWx1ZSwgZmFsc2UpOworICAgICAg
ICB9OworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmV2YWx1YXRlKGV4cHJlc3Npb24sIGV2
YWxDYWxsYmFjayk7CiAgICAgfSwKIAogICAgIF9lbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2
ZW50KQpAQCAtNDM5LDEwICszNzYsOCBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90
eXBlID0gewogICAgICAgICB2YXIgaW5zcGVjdGVkV2luZG93ID0gSW5zcGVjdG9yQ29udHJvbGxl
ci5pbnNwZWN0ZWRXaW5kb3coKTsKICAgICAgICAgaWYgKGZvcmNlT2JqZWN0Rm9ybWF0KQogICAg
ICAgICAgICAgdmFyIHR5cGUgPSAib2JqZWN0IjsKLSAgICAgICAgZWxzZSBpZiAob3V0cHV0IGlu
c3RhbmNlb2YgaW5zcGVjdGVkV2luZG93Lk5vZGVMaXN0KQotICAgICAgICAgICAgdmFyIHR5cGUg
PSAiYXJyYXkiOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YXIgdHlwZSA9IE9iamVjdC50
eXBlKG91dHB1dCwgaW5zcGVjdGVkV2luZG93KTsKKyAgICAgICAgICAgIHZhciB0eXBlID0gT2Jq
ZWN0LnByb3h5VHlwZShvdXRwdXQpOwogCiAgICAgICAgIC8vIFdlIGRvbid0IHBlcmZvcm0gYW55
IHNwZWNpYWwgZm9ybWF0dGluZyBvbiB0aGVzZSB0eXBlcywgc28gd2UganVzdAogICAgICAgICAv
LyBwYXNzIHRoZW0gdGhyb3VnaCB0aGUgc2ltcGxlIF9mb3JtYXR2YWx1ZSBmdW5jdGlvbi4KQEAg
LTUwMSwxMCArNDM2LDEwIEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7
CiAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIl0iKSk7
CiAgICAgfSwKIAotICAgIF9mb3JtYXRub2RlOiBmdW5jdGlvbihub2RlLCBlbGVtKQorICAgIF9m
b3JtYXRub2RlOiBmdW5jdGlvbihvYmplY3QsIGVsZW0pCiAgICAgewogICAgICAgICB2YXIgdHJl
ZU91dGxpbmUgPSBuZXcgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUoKTsKLSAgICAg
ICAgdHJlZU91dGxpbmUucm9vdERPTU5vZGUgPSBub2RlOworICAgICAgICB0cmVlT3V0bGluZS5y
b290RE9NTm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQob2JqZWN0Lm5vZGVJ
ZCk7CiAgICAgICAgIHRyZWVPdXRsaW5lLmVsZW1lbnQuYWRkU3R5bGVDbGFzcygib3V0bGluZS1k
aXNjbG9zdXJlIik7CiAgICAgICAgIGlmICghdHJlZU91dGxpbmUuY2hpbGRyZW5bMF0uaGFzQ2hp
bGRyZW4pCiAgICAgICAgICAgICB0cmVlT3V0bGluZS5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNp
bmdsZS1ub2RlIik7CkBAIC01MTMsNyArNDQ4LDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3
LnByb3RvdHlwZSA9IHsKIAogICAgIF9mb3JtYXRvYmplY3Q6IGZ1bmN0aW9uKG9iaiwgZWxlbSkK
ICAgICB7Ci0gICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5PYmplY3RQ
cm9wZXJ0aWVzU2VjdGlvbihuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5KG9iaiksIE9iamVj
dC5kZXNjcmliZShvYmosIHRydWUpLCBudWxsLCBudWxsLCB0cnVlKS5lbGVtZW50KTsKKyAgICAg
ICAgZWxlbS5hcHBlbmRDaGlsZChuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0
aW9uKG9iaiwgb2JqLmRlc2NyaXB0aW9uLCBudWxsLCB0cnVlKS5lbGVtZW50KTsKICAgICB9LAog
CiAgICAgX2Zvcm1hdGVycm9yOiBmdW5jdGlvbihvYmosIGVsZW0pCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRE9NQWdlbnQuanMKaW5kZXggNWFhY2Q0MS4uNDhkYTIwZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAtMzEsNyArMzEsNyBAQAogV2ViSW5zcGVj
dG9yLkRPTU5vZGUgPSBmdW5jdGlvbihkb2MsIHBheWxvYWQpIHsKICAgICB0aGlzLm93bmVyRG9j
dW1lbnQgPSBkb2M7CiAKLSAgICB0aGlzLl9pZCA9IHBheWxvYWQuaWQ7CisgICAgdGhpcy5pZCA9
IHBheWxvYWQuaWQ7CiAgICAgdGhpcy5ub2RlVHlwZSA9IHBheWxvYWQubm9kZVR5cGU7CiAgICAg
dGhpcy5ub2RlTmFtZSA9IHBheWxvYWQubm9kZU5hbWU7CiAgICAgdGhpcy5fbm9kZVZhbHVlID0g
cGF5bG9hZC5ub2RlVmFsdWU7CkBAIC01MCw4ICs1MCw4IEBAIFdlYkluc3BlY3Rvci5ET01Ob2Rl
ID0gZnVuY3Rpb24oZG9jLCBwYXlsb2FkKSB7CiAgICAgdGhpcy5maXJzdENoaWxkID0gbnVsbDsK
ICAgICB0aGlzLnBhcmVudE5vZGUgPSBudWxsOwogCi0gICAgaWYgKHBheWxvYWQuY2hpbGROb2Rl
cykKLSAgICAgICAgdGhpcy5fc2V0Q2hpbGRyZW5QYXlsb2FkKHBheWxvYWQuY2hpbGROb2Rlcyk7
CisgICAgaWYgKHBheWxvYWQuY2hpbGRyZW4pCisgICAgICAgIHRoaXMuX3NldENoaWxkcmVuUGF5
bG9hZChwYXlsb2FkLmNoaWxkcmVuKTsKIAogICAgIHRoaXMuX2NvbXB1dGVkU3R5bGUgPSBudWxs
OwogICAgIHRoaXMuc3R5bGUgPSBudWxsOwpAQCAtMzAyLDIzICszMDIsOCBAQCBXZWJJbnNwZWN0
b3IuRE9NQWdlbnQgPSBmdW5jdGlvbigpIHsKICAgICB0aGlzLl9pZFRvRE9NTm9kZSA9IG51bGw7
CiAgICAgdGhpcy5kb2N1bWVudCA9IG51bGw7CiAKLSAgICAvLyBJbnN0YWxsIG9ucG9wdWxhdGUg
aGFuZGxlci4gVGhpcyBpcyBhIHRlbXBvcmFyeSBtZWFzdXJlLgotICAgIC8vIFRPRE86IGFkZCB0
aGlzIGNvZGUgaW50byB0aGUgb3JpZ2luYWwgdXBkYXRlQ2hpbGRyZW4gb25jZSBkb21BZ2VudAot
ICAgIC8vIGJlY29tZXMgcHJpbWFyeSBzb3VyY2Ugb2YgRE9NIGluZm9ybWF0aW9uLgotICAgIC8v
IFRPRE8yOiB1cGRhdGUgRWxlbWVudHNQYW5lbCB0byBub3QgdHJhY2sgZW1iZWRkZWQgaWZyYW1l
cyAtIGl0IGlzIGFscmVhZHkgYmVpbmcgaGFuZGxlZAorICAgIC8vIFRPRE86IHVwZGF0ZSBFbGVt
ZW50c1BhbmVsIHRvIG5vdCB0cmFjayBlbWJlZGRlZCBpZnJhbWVzIC0gaXQgaXMgYWxyZWFkeSBi
ZWluZyBoYW5kbGVkCiAgICAgLy8gaW4gdGhlIGFnZW50IGJhY2tlbmQuCi0gICAgdmFyIGRvbUFn
ZW50ID0gdGhpczsKLSAgICB2YXIgb3JpZ2luYWxVcGRhdGVDaGlsZHJlbiA9IFdlYkluc3BlY3Rv
ci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS51cGRhdGVDaGlsZHJlbjsKLSAgICBXZWJJ
bnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlQ2hpbGRyZW4gPSBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBkb21BZ2VudC5nZXRDaGlsZE5vZGVzQXN5bmModGhp
cy5yZXByZXNlbnRlZE9iamVjdCwgb3JpZ2luYWxVcGRhdGVDaGlsZHJlbi5iaW5kKHRoaXMpKTsK
LSAgICB9OwotCi0gICAgLy8gTXV0ZSBjb25zb2xlIGhhbmRsZSB0byBhdm9pZCBjcmFzaCBvbiBz
ZWxlY3Rpb24gY2hhbmdlLgotICAgIC8vIFRPRE86IFJlLWltcGxlbWVudCBpbnNwZWN0b3JDb25z
b2xlQVBJIHRvIHdvcmsgaW4gYSBzZXJpYWxpemVkIHdheSBhbmQgcmVtb3ZlIHRoaXMgd29ya2Fy
b3VuZC4KLSAgICBXZWJJbnNwZWN0b3IuQ29uc29sZS5wcm90b3R5cGUuYWRkSW5zcGVjdGVkTm9k
ZSA9IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgfTsKIAogICAgIC8vIFdoaXRlc3BhY2UgaXMgaWdu
b3JlZCBpbiBJbnNwZWN0b3JET01BZ2VudCBhbHJlYWR5IC0+IG5vIG5lZWQgdG8gZmlsdGVyLgog
ICAgIC8vIFRPRE86IEVpdGhlciByZW1vdmUgYWxsIG9mIGl0cyB1c2FnZXMgb3IgcHVzaCB2YWx1
ZSBpbnRvIHRoZSBhZ2VudCBiYWNrZW5kLgpAQCAtMzQ0LDI1ICszMjksMjUgQEAgV2ViSW5zcGVj
dG9yLkRPTUFnZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAg
ICAgICAgdmFyIGNhbGxJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKG15Y2FsbGJhY2sp
OwotICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmdldENoaWxkTm9kZXMoY2FsbElkLCBwYXJl
bnQuX2lkKTsKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5nZXRDaGlsZE5vZGVzKGNhbGxJ
ZCwgcGFyZW50LmlkKTsKICAgICB9LAogCiAgICAgc2V0QXR0cmlidXRlQXN5bmM6IGZ1bmN0aW9u
KG5vZGUsIG5hbWUsIHZhbHVlLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIHZhciBteWNhbGxi
YWNrID0gdGhpcy5fZGlkQXBwbHlEb21DaGFuZ2UuYmluZCh0aGlzLCBub2RlLCBjYWxsYmFjayk7
Ci0gICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuc2V0QXR0cmlidXRlKFdlYkluc3BlY3Rvci5D
YWxsYmFjay53cmFwKG15Y2FsbGJhY2spLCBub2RlLl9pZCwgbmFtZSwgdmFsdWUpOworICAgICAg
ICBJbnNwZWN0b3JDb250cm9sbGVyLnNldEF0dHJpYnV0ZShXZWJJbnNwZWN0b3IuQ2FsbGJhY2su
d3JhcChteWNhbGxiYWNrKSwgbm9kZS5pZCwgbmFtZSwgdmFsdWUpOwogICAgIH0sCiAKICAgICBy
ZW1vdmVBdHRyaWJ1dGVBc3luYzogZnVuY3Rpb24obm9kZSwgbmFtZSwgY2FsbGJhY2spCiAgICAg
ewogICAgICAgICB2YXIgbXljYWxsYmFjayA9IHRoaXMuX2RpZEFwcGx5RG9tQ2hhbmdlLmJpbmQo
dGhpcywgbm9kZSwgY2FsbGJhY2spOwotICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnJlbW92
ZUF0dHJpYnV0ZShXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChteWNhbGxiYWNrKSwgbm9kZS5f
aWQsIG5hbWUpOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnJlbW92ZUF0dHJpYnV0ZShX
ZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChteWNhbGxiYWNrKSwgbm9kZS5pZCwgbmFtZSk7CiAg
ICAgfSwKIAogICAgIHNldFRleHROb2RlVmFsdWVBc3luYzogZnVuY3Rpb24obm9kZSwgdGV4dCwg
Y2FsbGJhY2spCiAgICAgewogICAgICAgICB2YXIgbXljYWxsYmFjayA9IHRoaXMuX2RpZEFwcGx5
RG9tQ2hhbmdlLmJpbmQodGhpcywgbm9kZSwgY2FsbGJhY2spOwotICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyLnNldFRleHROb2RlVmFsdWUoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAobXlj
YWxsYmFjayksIG5vZGUuX2lkLCB0ZXh0KTsKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5z
ZXRUZXh0Tm9kZVZhbHVlKFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKG15Y2FsbGJhY2spLCBu
b2RlLmlkLCB0ZXh0KTsKICAgICB9LAogCiAgICAgX2RpZEFwcGx5RG9tQ2hhbmdlOiBmdW5jdGlv
bihub2RlLCBjYWxsYmFjaywgc3VjY2VzcykKQEAgLTM4Myw3ICszNjgsNyBAQCBXZWJJbnNwZWN0
b3IuRE9NQWdlbnQucHJvdG90eXBlID0gewogICAgICAgICBub2RlLl9zZXRBdHRyaWJ1dGVzUGF5
bG9hZChhdHRyc0FycmF5KTsKICAgICB9LAogCi0gICAgZ2V0Tm9kZUZvcklkOiBmdW5jdGlvbihu
b2RlSWQpIHsKKyAgICBub2RlRm9ySWQ6IGZ1bmN0aW9uKG5vZGVJZCkgewogICAgICAgICByZXR1
cm4gdGhpcy5faWRUb0RPTU5vZGVbbm9kZUlkXTsKICAgICB9LAogCkBAIC00MTEsNyArMzk2LDcg
QEAgV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIHZh
ciBjaGlsZCA9IGNoaWxkcmVuW2ldOwotICAgICAgICAgICAgdGhpcy5faWRUb0RPTU5vZGVbY2hp
bGQuX2lkXSA9IGNoaWxkOworICAgICAgICAgICAgdGhpcy5faWRUb0RPTU5vZGVbY2hpbGQuaWRd
ID0gY2hpbGQ7CiAgICAgICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4pCiAgICAgICAgICAgICAg
ICAgdGhpcy5fYmluZE5vZGVzKGNoaWxkLmNoaWxkcmVuKTsKICAgICAgICAgfQpAQCAtNDMzLDcg
KzQxOCw3IEBAIFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZh
ciBwYXJlbnQgPSB0aGlzLl9pZFRvRE9NTm9kZVtwYXJlbnRJZF07CiAgICAgICAgIHZhciBwcmV2
ID0gdGhpcy5faWRUb0RPTU5vZGVbcHJldklkXTsKICAgICAgICAgdmFyIG5vZGUgPSBwYXJlbnQu
X2luc2VydENoaWxkKHByZXYsIHBheWxvYWQpOwotICAgICAgICB0aGlzLl9pZFRvRE9NTm9kZVtu
b2RlLl9pZF0gPSBub2RlOworICAgICAgICB0aGlzLl9pZFRvRE9NTm9kZVtub2RlLmlkXSA9IG5v
ZGU7CiAgICAgICAgIHZhciBldmVudCA9IHsgdGFyZ2V0IDogbm9kZSwgcmVsYXRlZE5vZGUgOiBw
YXJlbnQgfTsKICAgICAgICAgdGhpcy5kb2N1bWVudC5fZmlyZURvbUV2ZW50KCJET01Ob2RlSW5z
ZXJ0ZWQiLCBldmVudCk7CiAgICAgfSwKQEAgLTQ1MCw3ICs0MzUsNyBAQCBXZWJJbnNwZWN0b3Iu
RE9NQWdlbnQucHJvdG90eXBlID0gewogfQogCiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJh
dGlvbiA9IGZ1bmN0aW9uKHBheWxvYWQpIHsKLSAgICB0aGlzLl9pZCA9IHBheWxvYWQuaWQ7Cisg
ICAgdGhpcy5pZCA9IHBheWxvYWQuaWQ7CiAgICAgdGhpcy53aWR0aCA9IHBheWxvYWQud2lkdGg7
CiAgICAgdGhpcy5oZWlnaHQgPSBwYXlsb2FkLmhlaWdodDsKICAgICB0aGlzLl9fZGlzYWJsZWRQ
cm9wZXJ0aWVzID0gcGF5bG9hZC5fX2Rpc2FibGVkUHJvcGVydGllczsKQEAgLTQ5Miw3ICs0Nzcs
NyBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVN0eWxlID0gZnVuY3Rp
b24ocGF5bG9hZCkKIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUnVsZSA9
IGZ1bmN0aW9uKHBheWxvYWQpCiB7CiAgICAgdmFyIHJ1bGUgPSB7fTsKLSAgICBydWxlLl9pZCA9
IHBheWxvYWQuaWQ7CisgICAgcnVsZS5pZCA9IHBheWxvYWQuaWQ7CiAgICAgcnVsZS5zZWxlY3Rv
clRleHQgPSBwYXlsb2FkLnNlbGVjdG9yVGV4dDsKICAgICBydWxlLnN0eWxlID0gbmV3IFdlYklu
c3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKHBheWxvYWQuc3R5bGUpOwogICAgIHJ1bGUuc3R5
bGUucGFyZW50UnVsZSA9IHJ1bGU7CkBAIC02MTksMTA2ICs2MDQsMTE1IEBAIFdlYkluc3BlY3Rv
ci5kaWRBcHBseURvbUNoYW5nZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJh
Y2s7CiBXZWJJbnNwZWN0b3IuZGlkUmVtb3ZlQXR0cmlidXRlID0gV2ViSW5zcGVjdG9yLkNhbGxi
YWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRTZXRUZXh0Tm9kZVZhbHVlID0g
V2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIAotLy8gVGVtcG9yYXJ5IG1l
dGhvZHMgZm9yIERPTUFnZW50IG1pZ3JhdGlvbi4KLVdlYkluc3BlY3Rvci53cmFwTm9kZVdpdGhT
dHlsZXMgPSBmdW5jdGlvbihub2RlLCBzdHlsZXMpCi17Ci0gICAgdmFyIHdpbmRvd1N0dWIgPSBu
ZXcgV2ViSW5zcGVjdG9yLkRPTVdpbmRvdyhudWxsKTsKLSAgICB2YXIgZG9jU3R1YiA9IG5ldyBX
ZWJJbnNwZWN0b3IuRE9NRG9jdW1lbnQobnVsbCwgd2luZG93U3R1Yik7Ci0gICAgdmFyIHBheWxv
YWQgPSB7fTsKLSAgICBwYXlsb2FkLm5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZTsKLSAgICBwYXls
b2FkLm5vZGVOYW1lID0gbm9kZS5ub2RlTmFtZTsKLSAgICBwYXlsb2FkLm5vZGVWYWx1ZSA9IG5v
ZGUubm9kZVZhbHVlOwotICAgIHBheWxvYWQuYXR0cmlidXRlcyA9IFtdOwotICAgIHBheWxvYWQu
Y2hpbGROb2RlQ291bnQgPSAwOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmF0dHJp
YnV0ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGF0dHIgPSBub2RlLmF0dHJpYnV0ZXNb
aV07Ci0gICAgICAgIHBheWxvYWQuYXR0cmlidXRlcy5wdXNoKGF0dHIubmFtZSk7Ci0gICAgICAg
IHBheWxvYWQuYXR0cmlidXRlcy5wdXNoKGF0dHIudmFsdWUpOwotICAgIH0KLSAgICB2YXIgbm9k
ZVN0dWIgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTU5vZGUoZG9jU3R1YiwgcGF5bG9hZCk7Ci0gICAg
bm9kZVN0dWIuX3NldFN0eWxlcyhzdHlsZXMuY29tcHV0ZWRTdHlsZSwgc3R5bGVzLmlubGluZVN0
eWxlLCBzdHlsZXMuc3R5bGVBdHRyaWJ1dGVzLCBzdHlsZXMubWF0Y2hlZENTU1J1bGVzKTsKLSAg
ICByZXR1cm4gbm9kZVN0dWI7Ci19Ci0KIC8vIFRlbXBvcmFyeSBtZXRob2RzIHRoYXQgd2lsbCBi
ZSBkaXNwYXRjaGVkIHZpYSBJbnNwZWN0b3JDb250cm9sbGVyIGludG8gdGhlIGluamVjdGVkIGNv
bnRleHQuCiBJbnNwZWN0b3JDb250cm9sbGVyLmdldFN0eWxlcyA9IGZ1bmN0aW9uKG5vZGVJZCwg
YXV0aG9yT25seSwgY2FsbGJhY2spCiB7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAg
ICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuZ2V0U3R5bGVzKG5vZGVJZCwgYXV0aG9yT25s
eSkpOwotICAgIH0sIDApCisgICAgfSwgMCk7CiB9CiAKIEluc3BlY3RvckNvbnRyb2xsZXIuZ2V0
Q29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uKG5vZGVJZCwgY2FsbGJhY2spCiB7CiAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuZ2V0Q29t
cHV0ZWRTdHlsZShub2RlSWQpKTsKLSAgICB9LCAwKQorICAgIH0sIDApOwogfQogCiBJbnNwZWN0
b3JDb250cm9sbGVyLmdldElubGluZVN0eWxlID0gZnVuY3Rpb24obm9kZUlkLCBjYWxsYmFjaykK
IHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBjYWxsYmFjayhJbmplY3Rl
ZFNjcmlwdC5nZXRJbmxpbmVTdHlsZShub2RlSWQpKTsKLSAgICB9LCAwKQorICAgIH0sIDApOwog
fQogCiBJbnNwZWN0b3JDb250cm9sbGVyLmFwcGx5U3R5bGVUZXh0ID0gZnVuY3Rpb24oc3R5bGVJ
ZCwgc3R5bGVUZXh0LCBwcm9wZXJ0eU5hbWUsIGNhbGxiYWNrKQogewogICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LmFwcGx5U3R5bGVU
ZXh0KHN0eWxlSWQsIHN0eWxlVGV4dCwgcHJvcGVydHlOYW1lKSk7Ci0gICAgfSwgMCkKKyAgICB9
LCAwKTsKIH0KIAogSW5zcGVjdG9yQ29udHJvbGxlci5zZXRTdHlsZVRleHQgPSBmdW5jdGlvbihz
dHlsZSwgY3NzVGV4dCwgY2FsbGJhY2spCiB7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsK
ICAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuc2V0U3R5bGVUZXh0KHN0eWxlLCBjc3NU
ZXh0KSk7Ci0gICAgfSwgMCkKKyAgICB9LCAwKTsKIH0KIAogSW5zcGVjdG9yQ29udHJvbGxlci50
b2dnbGVTdHlsZUVuYWJsZWQgPSBmdW5jdGlvbihzdHlsZUlkLCBwcm9wZXJ0eU5hbWUsIGRpc2Fi
bGVkLCBjYWxsYmFjaykKIHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBj
YWxsYmFjayhJbmplY3RlZFNjcmlwdC50b2dnbGVTdHlsZUVuYWJsZWQoc3R5bGVJZCwgcHJvcGVy
dHlOYW1lLCBkaXNhYmxlZCkpOwotICAgIH0sIDApCisgICAgfSwgMCk7CiB9CiAKLUluc3BlY3Rv
ckNvbnRyb2xsZXIuYXBwbHlTdHlsZVJ1bGVUZXh0ID0gZnVuY3Rpb24ocnVsZUlkLCBuZXdDb250
ZW50LCBzZWxlY3RlZE5vZGUsIGNhbGxiYWNrKQorSW5zcGVjdG9yQ29udHJvbGxlci5hcHBseVN0
eWxlUnVsZVRleHQgPSBmdW5jdGlvbihydWxlSWQsIG5ld0NvbnRlbnQsIHNlbGVjdGVkTm9kZUlk
LCBjYWxsYmFjaykKIHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICBjYWxs
YmFjayhJbmplY3RlZFNjcmlwdC5hcHBseVN0eWxlUnVsZVRleHQocnVsZUlkLCBuZXdDb250ZW50
LCBzZWxlY3RlZE5vZGUpKTsKLSAgICB9LCAwKQorICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNj
cmlwdC5hcHBseVN0eWxlUnVsZVRleHQocnVsZUlkLCBuZXdDb250ZW50LCBzZWxlY3RlZE5vZGVJ
ZCkpOworICAgIH0sIDApOwogfQogCi1JbnNwZWN0b3JDb250cm9sbGVyLmFkZFN0eWxlU2VsZWN0
b3IgPSBmdW5jdGlvbihuZXdDb250ZW50LCBjYWxsYmFjaykKK0luc3BlY3RvckNvbnRyb2xsZXIu
YWRkU3R5bGVTZWxlY3RvciA9IGZ1bmN0aW9uKG5ld0NvbnRlbnQsIHNlbGVjdGVkTm9kZUlkLCBj
YWxsYmFjaykKIHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewotICAgICAgICBjYWxsYmFj
ayhJbmplY3RlZFNjcmlwdC5hZGRTdHlsZVNlbGVjdG9yKG5ld0NvbnRlbnQpKTsKLSAgICB9LCAw
KQorICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNjcmlwdC5hZGRTdHlsZVNlbGVjdG9yKG5ld0Nv
bnRlbnQsIHNlbGVjdGVkTm9kZUlkKSk7CisgICAgfSwgMCk7CiB9CiAKLUluc3BlY3RvckNvbnRy
b2xsZXIuc2V0U3R5bGVQcm9wZXJ0eSA9IGZ1bmN0aW9uKHN0eWxlSWQsIG5hbWUsIHZhbHVlLCBj
YWxsYmFjaykgeworSW5zcGVjdG9yQ29udHJvbGxlci5zZXRTdHlsZVByb3BlcnR5ID0gZnVuY3Rp
b24oc3R5bGVJZCwgbmFtZSwgdmFsdWUsIGNhbGxiYWNrKQorewogICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LnNldFN0eWxlUHJvcGVy
dHkoc3R5bGVJZCwgbmFtZSwgdmFsdWUpKTsKLSAgICB9LCAwKQorICAgIH0sIDApOwogfQogCi1J
bnNwZWN0b3JDb250cm9sbGVyLmdldFByb3RvdHlwZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwg
Y2FsbGJhY2spIHsKK0luc3BlY3RvckNvbnRyb2xsZXIuZ2V0UHJvdG90eXBlcyA9IGZ1bmN0aW9u
KG5vZGVJZCwgY2FsbGJhY2spCit7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKLSAgICAg
ICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuZ2V0UHJvdG90eXBlcyhvYmplY3RQcm94eSkpOwot
ICAgIH0sIDApCisgICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LmdldFByb3RvdHlwZXMo
bm9kZUlkKSk7CisgICAgfSwgMCk7CiB9CiAKLUluc3BlY3RvckNvbnRyb2xsZXIuZ2V0UHJvcGVy
dGllcyA9IGZ1bmN0aW9uKG9iamVjdFByb3h5LCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgY2FsbGJh
Y2spIHsKK0luc3BlY3RvckNvbnRyb2xsZXIuZ2V0UHJvcGVydGllcyA9IGZ1bmN0aW9uKG9iamVj
dFByb3h5LCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgY2FsbGJhY2spCit7CiAgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKICAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVy
dGllcyhvYmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHkpKTsKLSAgICB9LCAwKQorICAg
IH0sIDApOwogfQogCi1JbnNwZWN0b3JDb250cm9sbGVyLnNldFByb3BlcnR5VmFsdWUgPSBmdW5j
dGlvbihvYmplY3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHByZXNzaW9uLCBjYWxsYmFjaykgewor
SW5zcGVjdG9yQ29udHJvbGxlci5zZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJv
eHksIHByb3BlcnR5TmFtZSwgZXhwcmVzc2lvbiwgY2FsbGJhY2spCit7CiAgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKICAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuc2V0UHJvcGVy
dHlWYWx1ZShvYmplY3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHByZXNzaW9uKSk7Ci0gICAgfSwg
MCkKKyAgICB9LCAwKTsKK30KKworSW5zcGVjdG9yQ29udHJvbGxlci5ldmFsdWF0ZSA9IGZ1bmN0
aW9uKGV4cHJlc3Npb24sIGNhbGxiYWNrKQoreworICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGV4cHJlc3Npb24pKTsK
KyAgICB9LCAwKTsKIH0KIAorSW5zcGVjdG9yQ29udHJvbGxlci5hZGRJbnNwZWN0ZWROb2RlID0g
ZnVuY3Rpb24obm9kZUlkLCBjYWxsYmFjaykKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eworICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNjcmlwdC5hZGRJbnNwZWN0ZWROb2RlKG5vZGVJ
ZCkpOworICAgIH0sIDApOworfQorCitJbnNwZWN0b3JDb250cm9sbGVyLnBlcmZvcm1TZWFyY2gg
PSBmdW5jdGlvbih3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LCBjYWxsYmFjaykKK3sKKyAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNjcmlwdC5wZXJm
b3JtU2VhcmNoKHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpKTsKKyAgICB9LCAwKTsKK30KKworSW5z
cGVjdG9yQ29udHJvbGxlci5zZWFyY2hDYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbGxiYWNrKQorewor
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2Ny
aXB0LnNlYXJjaENhbmNlbGVkKCkpOworICAgIH0sIDApOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCBmZmEwMDAwLi42MDgzYzQyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwpAQCAtNjEsNyAr
NjEsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbCA9IGZ1bmN0aW9uKCkKICAgICAgICAg
ICAgIEluc3BlY3RvckNvbnRyb2xsZXIudG9nZ2xlTm9kZVNlYXJjaCgpOwogICAgICAgICAgICAg
dGhpcy5wYW5lbC5ub2RlU2VhcmNoQnV0dG9uLnJlbW92ZVN0eWxlQ2xhc3MoInRvZ2dsZWQtb24i
KTsKICAgICAgICAgfQotICAgICAgICBXZWJJbnNwZWN0b3IuY29uc29sZS5hZGRJbnNwZWN0ZWRO
b2RlKHRoaXMuX2ZvY3VzZWRET01Ob2RlKTsKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5h
ZGRJbnNwZWN0ZWROb2RlKHRoaXMuX2ZvY3VzZWRET01Ob2RlLmlkLCBmdW5jdGlvbigpIHt9KTsK
ICAgICB9OwogCiAgICAgdGhpcy5jb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRyZWVP
dXRsaW5lLmVsZW1lbnQpOwpAQCAtMjIyLDE5ICsyMjIsMTEgQEAgV2ViSW5zcGVjdG9yLkVsZW1l
bnRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAotICAgIGluY2x1ZGVk
SW5TZWFyY2hSZXN1bHRzUHJvcGVydHlOYW1lOiAiX19pbmNsdWRlZEluSW5zcGVjdG9yU2VhcmNo
UmVzdWx0cyIsCi0KICAgICBzZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAg
ICAgaWYgKHRoaXMuX3NlYXJjaFJlc3VsdHMpIHsKLSAgICAgICAgICAgIGNvbnN0IHNlYXJjaFJl
c3VsdHNQcm9wZXJ0eSA9IHRoaXMuaW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWU7
CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX3NlYXJjaFJlc3Vs
dHNbaV07Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHNlYXJjaFJlc3VsdHNQcm9w
ZXJ0eSBzaW5jZSB0aGVyZSBtaWdodCBiZSBhbiB1bmZpbmlzaGVkIHNlYXJjaC4KLSAgICAgICAg
ICAgICAgICBkZWxldGUgbm9kZVtzZWFyY2hSZXN1bHRzUHJvcGVydHldOwotCi0gICAgICAgICAg
ICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy50cmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQo
bm9kZSk7CisgICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy50cmVlT3V0bGlu
ZS5maW5kVHJlZUVsZW1lbnQodGhpcy5fc2VhcmNoUmVzdWx0c1tpXSk7CiAgICAgICAgICAgICAg
ICAgaWYgKHRyZWVFbGVtZW50KQogICAgICAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5oaWdo
bGlnaHRlZCA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtMjQyLDEzICsyMzQsOSBAQCBXZWJJ
bnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgV2ViSW5zcGVj
dG9yLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlzKTsKIAotICAgICAgICBpZiAodGhp
cy5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBj
bGVhckludGVydmFsKHRoaXMuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcik7
Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVu
dGlmaWVyOwotICAgICAgICB9Ci0KICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdElu
ZGV4ID0gMDsKICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cyA9IFtdOworICAgICAgICBJbnNw
ZWN0b3JDb250cm9sbGVyLnNlYXJjaENhbmNlbGVkKGZ1bmN0aW9uKCkge30pOwogICAgIH0sCiAK
ICAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKQEAgLTI2MCwyNDEgKzI0OCw1NiBA
QCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICgh
d2hpdGVzcGFjZVRyaW1tZWRRdWVyeS5sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgdmFyIHRhZ05hbWVRdWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7Ci0gICAgICAg
IHZhciBhdHRyaWJ1dGVOYW1lUXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5OwotICAgICAg
ICB2YXIgc3RhcnRUYWdGb3VuZCA9ICh0YWdOYW1lUXVlcnkuaW5kZXhPZigiPCIpID09PSAwKTsK
LSAgICAgICAgdmFyIGVuZFRhZ0ZvdW5kID0gKHRhZ05hbWVRdWVyeS5sYXN0SW5kZXhPZigiPiIp
ID09PSAodGFnTmFtZVF1ZXJ5Lmxlbmd0aCAtIDEpKTsKLQotICAgICAgICBpZiAoc3RhcnRUYWdG
b3VuZCB8fCBlbmRUYWdGb3VuZCkgewotICAgICAgICAgICAgdmFyIHRhZ05hbWVRdWVyeUxlbmd0
aCA9IHRhZ05hbWVRdWVyeS5sZW5ndGg7Ci0gICAgICAgICAgICB0YWdOYW1lUXVlcnkgPSB0YWdO
YW1lUXVlcnkuc3Vic3RyaW5nKChzdGFydFRhZ0ZvdW5kID8gMSA6IDApLCAoZW5kVGFnRm91bmQg
PyAodGFnTmFtZVF1ZXJ5TGVuZ3RoIC0gMSkgOiB0YWdOYW1lUXVlcnlMZW5ndGgpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIENoZWNrIHRoZSB0YWdOYW1lUXVlcnkgaXMgaXQgaXMgYSBwb3Nz
aWJseSB2YWxpZCB0YWcgbmFtZS4KLSAgICAgICAgaWYgKCEvXlthLXpBLVowLTlcLV86XSskLy50
ZXN0KHRhZ05hbWVRdWVyeSkpCi0gICAgICAgICAgICB0YWdOYW1lUXVlcnkgPSBudWxsOwotCi0g
ICAgICAgIC8vIENoZWNrIHRoZSBhdHRyaWJ1dGVOYW1lUXVlcnkgaXMgaXQgaXMgYSBwb3NzaWJs
eSB2YWxpZCB0YWcgbmFtZS4KLSAgICAgICAgaWYgKCEvXlthLXpBLVowLTlcLV86XSskLy50ZXN0
KGF0dHJpYnV0ZU5hbWVRdWVyeSkpCi0gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lUXVlcnkgPSBu
dWxsOwotCi0gICAgICAgIGNvbnN0IGVzY2FwZWRRdWVyeSA9IHF1ZXJ5LmVzY2FwZUNoYXJhY3Rl
cnMoIiciKTsKLSAgICAgICAgY29uc3QgZXNjYXBlZFRhZ05hbWVRdWVyeSA9ICh0YWdOYW1lUXVl
cnkgPyB0YWdOYW1lUXVlcnkuZXNjYXBlQ2hhcmFjdGVycygiJyIpIDogbnVsbCk7Ci0gICAgICAg
IGNvbnN0IGVzY2FwZWRXaGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5ID0gd2hpdGVzcGFjZVRyaW1tZWRR
dWVyeS5lc2NhcGVDaGFyYWN0ZXJzKCInIik7Ci0gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHNQ
cm9wZXJ0eSA9IHRoaXMuaW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWU7Ci0KLSAg
ICAgICAgdmFyIHVwZGF0ZWRNYXRjaENvdW50T25jZSA9IGZhbHNlOwotICAgICAgICB2YXIgbWF0
Y2hlc0NvdW50VXBkYXRlVGltZW91dCA9IG51bGw7Ci0KLSAgICAgICAgZnVuY3Rpb24gdXBkYXRl
TWF0Y2hlc0NvdW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0
ZVNlYXJjaE1hdGNoZXNDb3VudCh0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCwgdGhpcyk7Ci0g
ICAgICAgICAgICBtYXRjaGVzQ291bnRVcGRhdGVUaW1lb3V0ID0gbnVsbDsKLSAgICAgICAgICAg
IHVwZGF0ZWRNYXRjaENvdW50T25jZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiB1cGRhdGVNYXRjaGVzQ291bnRTb29uKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCF1cGRhdGVkTWF0Y2hDb3VudE9uY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU1h
dGNoZXNDb3VudC5jYWxsKHRoaXMpOwotICAgICAgICAgICAgaWYgKG1hdGNoZXNDb3VudFVwZGF0
ZVRpbWVvdXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgLy8gVXBkYXRl
IHRoZSBtYXRjaGVzIGNvdW50IGV2ZXJ5IGhhbGYtc2Vjb25kIHNvIGl0IGRvZXNuJ3QgZmVlbCB0
d2l0Y2h5LgotICAgICAgICAgICAgbWF0Y2hlc0NvdW50VXBkYXRlVGltZW91dCA9IHNldFRpbWVv
dXQodXBkYXRlTWF0Y2hlc0NvdW50LmJpbmQodGhpcyksIDUwMCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBhZGROb2Rlc1RvUmVzdWx0cyhub2RlcywgbGVuZ3RoLCBnZXRJdGVtKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgbm9kZSA9IGdldEl0ZW0uY2FsbChub2RlcywgaSk7Ci0gICAgICAg
ICAgICAgICAgLy8gU2tpcCB0aGlzIG5vZGUgaWYgaXQgYWxyZWFkeSBoYXMgdGhlIHByb3BlcnR5
LgotICAgICAgICAgICAgICAgIGlmIChzZWFyY2hSZXN1bHRzUHJvcGVydHkgaW4gbm9kZSkKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMu
X3NlYXJjaFJlc3VsdHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJl
bnRTZWFyY2hSZXN1bHRJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNl
ZERPTU5vZGUgPSBub2RlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5v
ZGVbc2VhcmNoUmVzdWx0c1Byb3BlcnR5XSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5f
c2VhcmNoUmVzdWx0cy5wdXNoKG5vZGUpOwotCi0gICAgICAgICAgICAgICAgLy8gSGlnaGxpZ2h0
IHRoZSB0cmVlIGVsZW1lbnQgdG8gc2hvdyBpdCBtYXRjaGVkIHRoZSBzZWFyY2guCi0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IGhpZ2hsaWdodCB0aGUgc3Vic3RyaW5ncyBpbiB0ZXh0IG5vZGVz
IGFuZCBhdHRyaWJ1dGVzLgotICAgICAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMu
dHJlZU91dGxpbmUuZmluZFRyZWVFbGVtZW50KG5vZGUpOwotICAgICAgICAgICAgICAgIGlmICh0
cmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQuaGlnaGxpZ2h0ZWQg
PSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVNYXRjaGVzQ291bnRT
b29uLmNhbGwodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtYXRjaEV4YWN0
SXRlbXMoZG9jKQotICAgICAgICB7Ci0gICAgICAgICAgICBtYXRjaEV4YWN0SWQuY2FsbCh0aGlz
LCBkb2MpOwotICAgICAgICAgICAgbWF0Y2hFeGFjdENsYXNzTmFtZXMuY2FsbCh0aGlzLCBkb2Mp
OwotICAgICAgICAgICAgbWF0Y2hFeGFjdFRhZ05hbWVzLmNhbGwodGhpcywgZG9jKTsKLSAgICAg
ICAgICAgIG1hdGNoRXhhY3RBdHRyaWJ1dGVOYW1lcy5jYWxsKHRoaXMsIGRvYyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbiBtYXRjaEV4YWN0SWQoZG9jKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1lbnRCeUlkLmNhbGwo
ZG9jLCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKLSAgICAgICAgICAgIGFkZE5vZGVzVG9SZXN1
bHRzLmNhbGwodGhpcywgcmVzdWx0LCAocmVzdWx0ID8gMSA6IDApLCBmdW5jdGlvbigpIHsgcmV0
dXJuIHRoaXMgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtYXRjaEV4YWN0Q2xh
c3NOYW1lcyhkb2MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5f
X3Byb3RvX18uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZS5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1t
ZWRRdWVyeSk7Ci0gICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3Vs
dCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVu
Y3Rpb24gbWF0Y2hFeGFjdFRhZ05hbWVzKGRvYykKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCF0YWdOYW1lUXVlcnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29u
c3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5nZXRFbGVtZW50c0J5VGFnTmFtZS5jYWxsKGRvYywg
dGFnTmFtZVF1ZXJ5KTsKLSAgICAgICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywg
cmVzdWx0LCByZXN1bHQubGVuZ3RoLCByZXN1bHQuaXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBmdW5jdGlvbiBtYXRjaEV4YWN0QXR0cmlidXRlTmFtZXMoZG9jKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoIWF0dHJpYnV0ZU5hbWVRdWVyeSkKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLnF1ZXJ5U2VsZWN0b3JB
bGwuY2FsbChkb2MsICJbIiArIGF0dHJpYnV0ZU5hbWVRdWVyeSArICJdIik7Ci0gICAgICAgICAg
ICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVz
dWx0Lml0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbWF0Y2hQYXJ0aWFsVGFn
TmFtZXMoZG9jKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19w
cm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwgJyIgKyBlc2Nh
cGVkVGFnTmFtZVF1ZXJ5ICsgIicpXSIsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9O
T0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0
aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtYXRjaFN0YXJ0T2ZUYWdOYW1lcyhkb2Mp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZh
bHVhdGUuY2FsbChkb2MsICIvLypbc3RhcnRzLXdpdGgobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdO
YW1lUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05B
UFNIT1RfVFlQRSk7Ci0gICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJl
c3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICAg
ICAgfQorICAgICAgICB0aGlzLl91cGRhdGVkTWF0Y2hDb3VudE9uY2UgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5fbWF0Y2hlc0NvdW50VXBkYXRlVGltZW91dCA9IG51bGw7CiAKLSAgICAgICAgZnVu
Y3Rpb24gbWF0Y2hQYXJ0aWFsVGFnTmFtZXNBbmRBdHRyaWJ1dGVWYWx1ZXMoZG9jKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkgewotICAgICAgICAgICAgICAgIG1h
dGNoUGFydGlhbEF0dHJpYnV0ZVZhbHVlcy5jYWxsKHRoaXMsIGRvYyk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBk
b2MuX19wcm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwgJyIg
KyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsgIicpIG9yIGNvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRR
dWVyeSArICInKV0iLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFKTsKLSAgICAgICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0
LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgZnVuY3Rpb24gbWF0Y2hQYXJ0aWFsQXR0cmlidXRlVmFsdWVzKGRvYykKLSAg
ICAgICAgewotICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0
ZS5jYWxsKGRvYywgIi8vKltjb250YWlucyhAKiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIiwg
ZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAg
ICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBz
aG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1
bmN0aW9uIG1hdGNoU3R5bGVTZWxlY3Rvcihkb2MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18ucXVlcnlTZWxlY3RvckFsbC5jYWxsKGRvYywgd2hp
dGVzcGFjZVRyaW1tZWRRdWVyeSk7Ci0gICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxs
KHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwotICAgICAgICB9Ci0K
LSAgICAgICAgZnVuY3Rpb24gbWF0Y2hQbGFpblRleHQoZG9jKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy90
ZXh0KClbY29udGFpbnMoLiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIHwgLy9jb21tZW50KClb
Y29udGFpbnMoLiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJl
c3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAgICAgICBhZGROb2Rlc1Rv
UmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQu
c25hcHNob3RJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG1hdGNoWFBhdGhR
dWVyeShkb2MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3By
b3RvX18uZXZhbHVhdGUuY2FsbChkb2MsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGRvYywgbnVs
bCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAgICAgICAg
YWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0
aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBm
aW5pc2hlZFNlYXJjaGluZygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUg
c2VhcmNoUmVzdWx0c1Byb3BlcnR5IG5vdyB0aGF0IHRoZSBzZWFyY2ggaXMgZmluaXNoZWQuCi0g
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3Ro
OyArK2kpCi0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaFJlc3VsdHNbaV1bc2Vh
cmNoUmVzdWx0c1Byb3BlcnR5XTsKLSAgICAgICAgfQorICAgICAgICBJbnNwZWN0b3JDb250cm9s
bGVyLnBlcmZvcm1TZWFyY2god2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgZnVuY3Rpb24oKSB7fSk7
CisgICAgfSwKIAotICAgICAgICBjb25zdCBtYWluRnJhbWVEb2N1bWVudCA9IEluc3BlY3RvckNv
bnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkuZG9jdW1lbnQ7Ci0gICAgICAgIGNvbnN0IHNlYXJj
aERvY3VtZW50cyA9IFttYWluRnJhbWVEb2N1bWVudF07Ci0KLSAgICAgICAgaWYgKHRhZ05hbWVR
dWVyeSAmJiBzdGFydFRhZ0ZvdW5kICYmIGVuZFRhZ0ZvdW5kKQotICAgICAgICAgICAgY29uc3Qg
c2VhcmNoRnVuY3Rpb25zID0gW21hdGNoRXhhY3RUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOwot
ICAgICAgICBlbHNlIGlmICh0YWdOYW1lUXVlcnkgJiYgc3RhcnRUYWdGb3VuZCkKLSAgICAgICAg
ICAgIGNvbnN0IHNlYXJjaEZ1bmN0aW9ucyA9IFttYXRjaFN0YXJ0T2ZUYWdOYW1lcywgbWF0Y2hQ
bGFpblRleHRdOwotICAgICAgICBlbHNlIGlmICh0YWdOYW1lUXVlcnkgJiYgZW5kVGFnRm91bmQp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIG1hdGNoRW5kT2ZUYWdO
YW1lcyBzZWFyY2ggZnVuY3Rpb24gaWYgZW5kVGFnRm91bmQgaXMgdHJ1ZSBidXQgbm90IHN0YXJ0
VGFnRm91bmQuCi0gICAgICAgICAgICAvLyBUaGlzIHJlcXVpcmVzIGVuZHMtd2l0aCgpIHN1cHBv
cnQgaW4gWFBhdGgsIFdlYktpdCBvbmx5IHN1cHBvcnRzIHN0YXJ0cy13aXRoKCkgYW5kIGNvbnRh
aW5zKCkuCi0gICAgICAgICAgICBjb25zdCBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hQYXJ0aWFs
VGFnTmFtZXMsIG1hdGNoUGxhaW5UZXh0XTsKLSAgICAgICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNl
VHJpbW1lZFF1ZXJ5ID09PSAiLy8qIiB8fCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5ID09PSAiKiIp
IHsKLSAgICAgICAgICAgIC8vIFRoZXNlIHF1ZXJpZXMgd2lsbCBtYXRjaCBldmVyeSBub2RlLiBN
YXRjaGluZyBldmVyeXRoaW5nIGlzbid0IHVzZWZ1bCBhbmQgY2FuIGJlIHNsb3cgZm9yIGxhcmdl
IHBhZ2VzLAotICAgICAgICAgICAgLy8gc28gbGltaXQgdGhlIHNlYXJjaCBmdW5jdGlvbnMgbGlz
dCB0byBwbGFpbiB0ZXh0IGFuZCBhdHRyaWJ1dGUgbWF0Y2hpbmcuCi0gICAgICAgICAgICBjb25z
dCBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hQYXJ0aWFsQXR0cmlidXRlVmFsdWVzLCBtYXRjaFBs
YWluVGV4dF07Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29uc3Qgc2VhcmNoRnVuY3Rp
b25zID0gW21hdGNoRXhhY3RJdGVtcywgbWF0Y2hTdHlsZVNlbGVjdG9yLCBtYXRjaFBhcnRpYWxU
YWdOYW1lc0FuZEF0dHJpYnV0ZVZhbHVlcywgbWF0Y2hQbGFpblRleHQsIG1hdGNoWFBhdGhRdWVy
eV07Ci0KLSAgICAgICAgLy8gRmluZCBhbGwgZnJhbWVzLCBpZnJhbWVzIGFuZCBvYmplY3QgZWxl
bWVudHMgdG8gc2VhcmNoIHRoZWlyIGRvY3VtZW50cy4KLSAgICAgICAgY29uc3QgcXVlcnlTZWxl
Y3RvckFsbEZ1bmN0aW9uID0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKS5E
b2N1bWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDsKLSAgICAgICAgY29uc3Qgc3ViZG9j
dW1lbnRSZXN1bHQgPSBxdWVyeVNlbGVjdG9yQWxsRnVuY3Rpb24uY2FsbChtYWluRnJhbWVEb2N1
bWVudCwgImlmcmFtZSwgZnJhbWUsIG9iamVjdCIpOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc3ViZG9jdW1lbnRSZXN1bHQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBl
bGVtZW50ID0gc3ViZG9jdW1lbnRSZXN1bHQuaXRlbShpKTsKLSAgICAgICAgICAgIGlmIChlbGVt
ZW50LmNvbnRlbnREb2N1bWVudCkKLSAgICAgICAgICAgICAgICBzZWFyY2hEb2N1bWVudHMucHVz
aChlbGVtZW50LmNvbnRlbnREb2N1bWVudCk7Ci0gICAgICAgIH0KKyAgICBfdXBkYXRlTWF0Y2hl
c0NvdW50OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IudXBkYXRlU2Vh
cmNoTWF0Y2hlc0NvdW50KHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoLCB0aGlzKTsKKyAgICAg
ICAgdGhpcy5fbWF0Y2hlc0NvdW50VXBkYXRlVGltZW91dCA9IG51bGw7CisgICAgICAgIHRoaXMu
X3VwZGF0ZWRNYXRjaENvdW50T25jZSA9IHRydWU7CisgICAgfSwKIAotICAgICAgICBjb25zdCBw
YW5lbCA9IHRoaXM7Ci0gICAgICAgIHZhciBkb2N1bWVudEluZGV4ID0gMDsKLSAgICAgICAgdmFy
IHNlYXJjaEZ1bmN0aW9uSW5kZXggPSAwOwotICAgICAgICB2YXIgY2h1bmtJbnRlcnZhbElkZW50
aWZpZXIgPSBudWxsOworICAgIF91cGRhdGVNYXRjaGVzQ291bnRTb29uOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMuX3VwZGF0ZWRNYXRjaENvdW50T25jZSkKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl91cGRhdGVNYXRjaGVzQ291bnQoKTsKKyAgICAgICAgaWYgKHRoaXMu
X21hdGNoZXNDb3VudFVwZGF0ZVRpbWVvdXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IC8vIFVwZGF0ZSB0aGUgbWF0Y2hlcyBjb3VudCBldmVyeSBoYWxmLXNlY29uZCBzbyBpdCBkb2Vz
bid0IGZlZWwgdHdpdGNoeS4KKyAgICAgICAgdGhpcy5fbWF0Y2hlc0NvdW50VXBkYXRlVGltZW91
dCA9IHNldFRpbWVvdXQodGhpcy5fdXBkYXRlTWF0Y2hlc0NvdW50LmJpbmQodGhpcyksIDUwMCk7
CisgICAgfSwKIAotICAgICAgICAvLyBTcGxpdCB1cCB0aGUgd29yayBpbnRvIGNodW5rcyBzbyB3
ZSBkb24ndCBibG9jayB0aGUgVUkgdGhyZWFkIHdoaWxlIHByb2Nlc3NpbmcuCisgICAgYWRkTm9k
ZXNUb1NlYXJjaFJlc3VsdDogZnVuY3Rpb24obm9kZUlkcykKKyAgICB7CisgICAgICAgIGlmICgh
bm9kZUlkcykKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBmdW5jdGlvbiBwcm9jZXNz
Q2h1bmsoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc2VhcmNoRG9jdW1lbnQgPSBzZWFy
Y2hEb2N1bWVudHNbZG9jdW1lbnRJbmRleF07Ci0gICAgICAgICAgICB2YXIgc2VhcmNoRnVuY3Rp
b24gPSBzZWFyY2hGdW5jdGlvbnNbc2VhcmNoRnVuY3Rpb25JbmRleF07Ci0KLSAgICAgICAgICAg
IGlmICgrK3NlYXJjaEZ1bmN0aW9uSW5kZXggPiBzZWFyY2hGdW5jdGlvbnMubGVuZ3RoKSB7Ci0g
ICAgICAgICAgICAgICAgc2VhcmNoRnVuY3Rpb24gPSBzZWFyY2hGdW5jdGlvbnNbMF07Ci0gICAg
ICAgICAgICAgICAgc2VhcmNoRnVuY3Rpb25JbmRleCA9IDA7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoKytkb2N1bWVudEluZGV4ID4gc2VhcmNoRG9jdW1lbnRzLmxlbmd0aCkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAocGFuZWwuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmll
ciA9PT0gY2h1bmtJbnRlcnZhbElkZW50aWZpZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgcGFuZWwuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcjsKLSAgICAg
ICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaHVua0ludGVydmFsSWRlbnRpZmllcik7Ci0g
ICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkU2VhcmNoaW5nLmNhbGwocGFuZWwpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICB2YXIgbm9k
ZUlkc0FycmF5ID0gbm9kZUlkcy5zcGxpdCgiLCIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG5vZGVJZHNBcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIG5vZGVJZCA9
IG5vZGVJZHNBcnJheVtpXTsKKyAgICAgICAgICAgIHZhciBub2RlID0gV2ViSW5zcGVjdG9yLmRv
bUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgc2VhcmNoRG9jdW1lbnQgPSBz
ZWFyY2hEb2N1bWVudHNbZG9jdW1lbnRJbmRleF07CisgICAgICAgICAgICBpZiAoIXRoaXMuX3Nl
YXJjaFJlc3VsdHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJj
aFJlc3VsdEluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRET01Ob2RlID0g
bm9kZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFzZWFyY2hEb2N1bWVudCB8
fCAhc2VhcmNoRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
dGhpcy5fc2VhcmNoUmVzdWx0cy5wdXNoKG5vZGUpOwogCi0gICAgICAgICAgICB0cnkgewotICAg
ICAgICAgICAgICAgIHNlYXJjaEZ1bmN0aW9uLmNhbGwocGFuZWwsIHNlYXJjaERvY3VtZW50KTsK
LSAgICAgICAgICAgIH0gY2F0Y2goZXJyKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWdub3JlIGFu
eSBleGNlcHRpb25zLiB0aGUgcXVlcnkgbWlnaHQgYmUgbWFsZm9ybWVkLCBidXQgd2UgYWxsb3cg
dGhhdC4KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUgdHJlZSBl
bGVtZW50IHRvIHNob3cgaXQgbWF0Y2hlZCB0aGUgc2VhcmNoLgorICAgICAgICAgICAgLy8gRklY
TUU6IGhpZ2hsaWdodCB0aGUgc3Vic3RyaW5ncyBpbiB0ZXh0IG5vZGVzIGFuZCBhdHRyaWJ1dGVz
LgorICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy50cmVlT3V0bGluZS5maW5kVHJl
ZUVsZW1lbnQobm9kZSk7CisgICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQpCisgICAgICAgICAg
ICAgICAgdHJlZUVsZW1lbnQuaGlnaGxpZ2h0ZWQgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAg
ICAgcHJvY2Vzc0NodW5rKCk7Ci0KLSAgICAgICAgY2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPSBz
ZXRJbnRlcnZhbChwcm9jZXNzQ2h1bmssIDI1KTsKLSAgICAgICAgdGhpcy5fY3VycmVudFNlYXJj
aENodW5rSW50ZXJ2YWxJZGVudGlmaWVyID0gY2h1bmtJbnRlcnZhbElkZW50aWZpZXI7CisgICAg
ICAgIHRoaXMuX3VwZGF0ZU1hdGNoZXNDb3VudFNvb24oKTsKICAgICB9LAogCiAgICAganVtcFRv
TmV4dFNlYXJjaFJlc3VsdDogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwppbmRleCBlZjUzMjA5Li4zYTFkYjY5IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcwpAQCAtODMsNyArODMsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLmZvY3VzZWROb2RlQ2hhbmdlZCgpOwogCiAg
ICAgICAgICAgICBpZiAoeCAmJiAhdGhpcy5zdXBwcmVzc1NlbGVjdEhpZ2hsaWdodCkgewotICAg
ICAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuaGlnaGxpZ2h0RE9NTm9kZSh4KTsKKyAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmhpZ2hsaWdodERPTU5vZGUoeC5pZCk7
CiAKICAgICAgICAgICAgICAgICBpZiAoIl9yZXN0b3JlUHJldmlvdXNIaWdobGlnaHROb2RlVGlt
ZW91dCIgaW4gdGhpcykKICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jl
c3RvcmVQcmV2aW91c0hpZ2hsaWdodE5vZGVUaW1lb3V0KTsKQEAgLTkyLDcgKzkyLDcgQEAgV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlID0gewogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgdmFyIGhvdmVyZWROb2RlID0gV2ViSW5zcGVjdG9y
LmhvdmVyZWRET01Ob2RlOwogICAgICAgICAgICAgICAgICAgICBpZiAoaG92ZXJlZE5vZGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmhpZ2hsaWdodERPTU5v
ZGUoaG92ZXJlZE5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlci5oaWdobGlnaHRET01Ob2RlKGhvdmVyZWROb2RlLmlkKTsKICAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5oaWRl
RE9NTm9kZUhpZ2hsaWdodCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTM4Nyw5ICszODcsMTQg
QEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogCiAgICAg
ICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTsKICAgICB9LAotCisgICAgCiAgICAgdXBkYXRlQ2hp
bGRyZW46IGZ1bmN0aW9uKGZ1bGxSZWZyZXNoKQogICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LmRvbUFnZW50LmdldENoaWxkTm9kZXNBc3luYyh0aGlzLnJlcHJlc2VudGVkT2JqZWN0LCB0aGlz
Ll91cGRhdGVDaGlsZHJlbi5iaW5kKHRoaXMsIGZ1bGxSZWZyZXNoKSk7CisgICAgfSwKKworICAg
IF91cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24oZnVsbFJlZnJlc2gpCisgICAgewogICAgICAgICBp
ZiAoZnVsbFJlZnJlc2gpIHsKICAgICAgICAgICAgIHZhciBzZWxlY3RlZFRyZWVFbGVtZW50ID0g
dGhpcy50cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50OwogICAgICAgICAgICAgaWYgKHNl
bGVjdGVkVHJlZUVsZW1lbnQgJiYgc2VsZWN0ZWRUcmVlRWxlbWVudC5oYXNBbmNlc3Rvcih0aGlz
KSkKQEAgLTY5Myw3ICs2OTgsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXBhcnNlRWxlbWVudC5oYXNB
dHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVk
V2luZG93KCkuRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlLmNhbGwodGhpcy5yZXBy
ZXNlbnRlZE9iamVjdCwgYXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICB0aGlzLnJlcHJlc2Vu
dGVkT2JqZWN0LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgIHRo
aXMuX3VwZGF0ZVRpdGxlKCk7CiAgICAgICAgICAgICBtb3ZlVG9OZXh0QXR0cmlidXRlSWZOZWVk
ZWQuY2FsbCh0aGlzKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTcwNCwxMiArNzA5LDEyIEBA
IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHZhciBhdHRyID0gcGFyc2VFbGVtZW50LmF0dHJpYnV0ZXNbaV07CiAgICAgICAgICAgICBm
b3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSB8fCBhdHRyLm5h
bWUgPT09IGF0dHJpYnV0ZU5hbWU7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAg
IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkuRWxlbWVudC5wcm90b3R5cGUu
c2V0QXR0cmlidXRlLmNhbGwodGhpcy5yZXByZXNlbnRlZE9iamVjdCwgYXR0ci5uYW1lLCBhdHRy
LnZhbHVlKTsKKyAgICAgICAgICAgICAgICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LnNldEF0dHJp
YnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpOwogICAgICAgICAgICAgfSBjYXRjaChlKSB7fSAv
LyBpZ25vcmUgaW52YWxpZCBhdHRyaWJ1dGUgKGlubmVySFRNTCBkb2Vzbid0IHRocm93IGVycm9y
cywgYnV0IHRoaXMgY2FuKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFmb3VuZE9yaWdpbmFs
QXR0cmlidXRlKQotICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5k
b3coKS5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUuY2FsbCh0aGlzLnJlcHJlc2Vu
dGVkT2JqZWN0LCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIHRoaXMucmVwcmVzZW50ZWRP
YmplY3QucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwogCiAgICAgICAgIHRoaXMuX3Vw
ZGF0ZVRpdGxlKCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9J
bmplY3RlZFNjcmlwdC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNj
cmlwdC5qcwppbmRleCA0NjExYjQ4Li4zZmYzZTdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCkBAIC0zMSw3ICszMSw5IEBAIHZhciBJbmplY3Rl
ZFNjcmlwdCA9IHsKICAgICBfc3R5bGVzOiB7fSwKICAgICBfc3R5bGVSdWxlczoge30sCiAgICAg
X2xhc3RTdHlsZUlkOiAwLAotICAgIF9sYXN0U3R5bGVSdWxlSWQ6IDAKKyAgICBfbGFzdFN0eWxl
UnVsZUlkOiAwLAorICAgIF9zZWFyY2hSZXN1bHRzOiBbXSwKKyAgICBfaW5jbHVkZWRJblNlYXJj
aFJlc3VsdHNQcm9wZXJ0eU5hbWU6ICJfX2luY2x1ZGVkSW5JbnNwZWN0b3JTZWFyY2hSZXN1bHRz
IgogfTsKIAogSW5qZWN0ZWRTY3JpcHQuZ2V0U3R5bGVzID0gZnVuY3Rpb24obm9kZUlkLCBhdXRo
b3JPbmx5KQpAQCAtMTc0LDEyICsxNzYsMTQgQEAgSW5qZWN0ZWRTY3JpcHQudG9nZ2xlU3R5bGVF
bmFibGVkID0gZnVuY3Rpb24oc3R5bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNhYmxlZCkKICAgICBy
ZXR1cm4gSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVN0eWxlKHN0eWxlLCB0cnVlKTsKIH0KIAot
SW5qZWN0ZWRTY3JpcHQuYXBwbHlTdHlsZVJ1bGVUZXh0ID0gZnVuY3Rpb24ocnVsZUlkLCBuZXdD
b250ZW50LCBzZWxlY3RlZE5vZGUpCitJbmplY3RlZFNjcmlwdC5hcHBseVN0eWxlUnVsZVRleHQg
PSBmdW5jdGlvbihydWxlSWQsIG5ld0NvbnRlbnQsIHNlbGVjdGVkTm9kZUlkKQogewogICAgIHZh
ciBydWxlID0gSW5qZWN0ZWRTY3JpcHQuX3N0eWxlUnVsZXNbcnVsZUlkXTsKICAgICBpZiAoIXJ1
bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIHZhciBzZWxlY3RlZE5vZGUgPSBJbmpl
Y3RlZFNjcmlwdC5fbm9kZUZvcklkKHNlbGVjdGVkTm9kZUlkKTsKKwogICAgIHRyeSB7CiAgICAg
ICAgIHZhciBzdHlsZXNoZWV0ID0gcnVsZS5wYXJlbnRTdHlsZVNoZWV0OwogICAgICAgICBzdHls
ZXNoZWV0LmFkZFJ1bGUobmV3Q29udGVudCk7CkBAIC0xOTQsMjAgKzE5OCwxNCBAQCBJbmplY3Rl
ZFNjcmlwdC5hcHBseVN0eWxlUnVsZVRleHQgPSBmdW5jdGlvbihydWxlSWQsIG5ld0NvbnRlbnQs
IHNlbGVjdGVkTm9kZSkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHZhciBu
b2RlcyA9IHNlbGVjdGVkTm9kZS5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobmV3Q29u
dGVudCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIGlmIChub2Rlc1tpXSA9PT0gc2VsZWN0ZWROb2RlKSB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFtJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplUnVsZShuZXdSdWxlKSwgdHJ1
ZV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFtJbmplY3RlZFNj
cmlwdC5fc2VyaWFsaXplUnVsZShuZXdSdWxlKSwgZmFsc2VdOworICAgICAgICByZXR1cm4gW0lu
amVjdGVkU2NyaXB0Ll9zZXJpYWxpemVSdWxlKG5ld1J1bGUpLCBJbmplY3RlZFNjcmlwdC5fZG9l
c1NlbGVjdG9yQWZmZWN0Tm9kZShuZXdDb250ZW50LCBzZWxlY3RlZE5vZGUpXTsKICAgICB9IGNh
dGNoKGUpIHsKICAgICAgICAgLy8gUmVwb3J0IGludmFsaWQgc3ludGF4LgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogfQogCi1JbmplY3RlZFNjcmlwdC5hZGRTdHlsZVNlbGVjdG9yID0g
ZnVuY3Rpb24obmV3Q29udGVudCkKK0luamVjdGVkU2NyaXB0LmFkZFN0eWxlU2VsZWN0b3IgPSBm
dW5jdGlvbihuZXdDb250ZW50LCBzZWxlY3RlZE5vZGVJZCkKIHsKICAgICB2YXIgc3R5bGVzaGVl
dCA9IEluamVjdGVkU2NyaXB0LnN0eWxlc2hlZXQ7CiAgICAgaWYgKCFzdHlsZXNoZWV0KSB7CkBA
IC0yMjcsNyArMjI1LDIyIEBAIEluamVjdGVkU2NyaXB0LmFkZFN0eWxlU2VsZWN0b3IgPSBmdW5j
dGlvbihuZXdDb250ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0
dXJuIEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVSdWxlKHN0eWxlc2hlZXQuY3NzUnVsZXNbc3R5
bGVzaGVldC5jc3NSdWxlcy5sZW5ndGggLSAxXSk7CisgICAgdmFyIHNlbGVjdGVkTm9kZSA9IElu
amVjdGVkU2NyaXB0Ll9ub2RlRm9ySWQoc2VsZWN0ZWROb2RlSWQpOworCisgICAgcmV0dXJuIFsg
SW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVJ1bGUoc3R5bGVzaGVldC5jc3NSdWxlc1tzdHlsZXNo
ZWV0LmNzc1J1bGVzLmxlbmd0aCAtIDFdKSwgSW5qZWN0ZWRTY3JpcHQuX2RvZXNTZWxlY3RvckFm
ZmVjdE5vZGUobmV3Q29udGVudCwgc2VsZWN0ZWROb2RlKSBdOworfQorCitJbmplY3RlZFNjcmlw
dC5fZG9lc1NlbGVjdG9yQWZmZWN0Tm9kZSA9IGZ1bmN0aW9uKHNlbGVjdG9yVGV4dCwgbm9kZSkK
K3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2YXIgbm9kZXMg
PSBub2RlLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvclRleHQpOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKG5v
ZGVzW2ldID09PSBub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIEluamVjdGVkU2NyaXB0LnNldFN0eWxlUHJv
cGVydHkgPSBmdW5jdGlvbihzdHlsZUlkLCBuYW1lLCB2YWx1ZSkgewpAQCAtMjU3LDExICsyNzAs
MTEgQEAgSW5qZWN0ZWRTY3JpcHQuX3NlcmlhbGl6ZVJ1bGUgPSBmdW5jdGlvbihydWxlKQogICAg
IHJ1bGVWYWx1ZS5zdHlsZSA9IEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVTdHlsZShydWxlLnN0
eWxlLCBkb0JpbmQpOwogCiAgICAgaWYgKGRvQmluZCkgewotICAgICAgICBpZiAoIXJ1bGUuX2lk
KSB7Ci0gICAgICAgICAgICBydWxlLl9pZCA9IEluamVjdGVkU2NyaXB0Ll9sYXN0U3R5bGVSdWxl
SWQrKzsKLSAgICAgICAgICAgIEluamVjdGVkU2NyaXB0Ll9zdHlsZVJ1bGVzW3J1bGUuX2lkXSA9
IHJ1bGU7CisgICAgICAgIGlmICghcnVsZS5pZCkgeworICAgICAgICAgICAgcnVsZS5pZCA9IElu
amVjdGVkU2NyaXB0Ll9sYXN0U3R5bGVSdWxlSWQrKzsKKyAgICAgICAgICAgIEluamVjdGVkU2Ny
aXB0Ll9zdHlsZVJ1bGVzW3J1bGUuaWRdID0gcnVsZTsKICAgICAgICAgfQotICAgICAgICBydWxl
VmFsdWUuaWQgPSBydWxlLl9pZDsKKyAgICAgICAgcnVsZVZhbHVlLmlkID0gcnVsZS5pZDsKICAg
ICB9CiAgICAgcmV0dXJuIHJ1bGVWYWx1ZTsKIH0KQEAgLTI5NSwxMSArMzA4LDExIEBAIEluamVj
dGVkU2NyaXB0Ll9zZXJpYWxpemVTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlLCBkb0JpbmQpCiAgICAg
cmVzdWx0LnVuaXF1ZVN0eWxlUHJvcGVydGllcyA9IEluamVjdGVkU2NyaXB0Ll9nZXRVbmlxdWVT
dHlsZVByb3BlcnRpZXMoc3R5bGUpOwogCiAgICAgaWYgKGRvQmluZCkgewotICAgICAgICBpZiAo
IXN0eWxlLl9pZCkgewotICAgICAgICAgICAgc3R5bGUuX2lkID0gSW5qZWN0ZWRTY3JpcHQuX2xh
c3RTdHlsZUlkKys7Ci0gICAgICAgICAgICBJbmplY3RlZFNjcmlwdC5fc3R5bGVzW3N0eWxlLl9p
ZF0gPSBzdHlsZTsKKyAgICAgICAgaWYgKCFzdHlsZS5pZCkgeworICAgICAgICAgICAgc3R5bGUu
aWQgPSBJbmplY3RlZFNjcmlwdC5fbGFzdFN0eWxlSWQrKzsKKyAgICAgICAgICAgIEluamVjdGVk
U2NyaXB0Ll9zdHlsZXNbc3R5bGUuaWRdID0gc3R5bGU7CiAgICAgICAgIH0KLSAgICAgICAgcmVz
dWx0LmlkID0gc3R5bGUuX2lkOworICAgICAgICByZXN1bHQuaWQgPSBzdHlsZS5pZDsKICAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQwNSw2ICs0MTgsNyBAQCBJbmplY3RlZFNjcmlw
dC5nZXRQcm9wZXJ0aWVzID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3Bl
cnR5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB2YXIgcHJvcGVydGllcyA9IFtdOwor
CiAgICAgLy8gR28gb3ZlciBwcm9wZXJ0aWVzLCBwcmVwYXJlIHJlc3VsdHMuCiAgICAgZm9yICh2
YXIgcHJvcGVydHlOYW1lIGluIG9iamVjdCkgewogICAgICAgICBpZiAoIWlnbm9yZUhhc093blBy
b3BlcnR5ICYmICJoYXNPd25Qcm9wZXJ0eSIgaW4gb2JqZWN0ICYmICFvYmplY3QuaGFzT3duUHJv
cGVydHkocHJvcGVydHlOYW1lKSkKQEAgLTQxNSwyOSArNDI5LDMxIEBAIEluamVjdGVkU2NyaXB0
LmdldFByb3BlcnRpZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVy
dHkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdmFyIHByb3BlcnR5ID0ge307CiAg
ICAgICAgIHByb3BlcnR5Lm5hbWUgPSBwcm9wZXJ0eU5hbWU7CisgICAgICAgIHByb3BlcnR5LnBh
cmVudE9iamVjdFByb3h5ID0gb2JqZWN0UHJveHk7CiAgICAgICAgIHZhciBpc0dldHRlciA9IG9i
amVjdFsiX19sb29rdXBHZXR0ZXJfXyJdICYmIG9iamVjdC5fX2xvb2t1cEdldHRlcl9fKHByb3Bl
cnR5TmFtZSk7CiAgICAgICAgIGlmICghcHJvcGVydHkuaXNHZXR0ZXIpIHsKICAgICAgICAgICAg
IHZhciBjaGlsZE9iamVjdCA9IG9iamVjdFtwcm9wZXJ0eU5hbWVdOwotICAgICAgICAgICAgcHJv
cGVydHkudHlwZSA9IHR5cGVvZiBjaGlsZE9iamVjdDsKLSAgICAgICAgICAgIHByb3BlcnR5LnRl
eHRDb250ZW50ID0gT2JqZWN0LmRlc2NyaWJlKGNoaWxkT2JqZWN0LCB0cnVlKTsKLSAgICAgICAg
ICAgIHByb3BlcnR5LnBhcmVudE9iamVjdFByb3h5ID0gb2JqZWN0UHJveHk7Ci0gICAgICAgICAg
ICB2YXIgcGFyZW50UGF0aCA9IG9iamVjdFByb3h5LnBhdGguc2xpY2UoKTsKLSAgICAgICAgICAg
IHByb3BlcnR5LmNoaWxkT2JqZWN0UHJveHkgPSB7Ci0gICAgICAgICAgICAgICAgb2JqZWN0SWQg
OiBvYmplY3RQcm94eS5vYmplY3RJZCwKLSAgICAgICAgICAgICAgICBwYXRoIDogcGFyZW50UGF0
aC5zcGxpY2UocGFyZW50UGF0aC5sZW5ndGgsIDAsIHByb3BlcnR5TmFtZSksCi0gICAgICAgICAg
ICAgICAgcHJvdG9EZXB0aCA6IG9iamVjdFByb3h5LnByb3RvRGVwdGgKLSAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICBpZiAoY2hpbGRPYmplY3QgJiYgKHByb3BlcnR5LnR5cGUgPT09ICJvYmpl
Y3QiIHx8IHByb3BlcnR5LnR5cGUgPT09ICJmdW5jdGlvbiIpKSB7CisgICAgICAgICAgICB2YXIg
Y2hpbGRPYmplY3RQcm94eSA9IHt9OworICAgICAgICAgICAgY2hpbGRPYmplY3RQcm94eS5vYmpl
Y3RJZCA9IG9iamVjdFByb3h5Lm9iamVjdElkOworICAgICAgICAgICAgY2hpbGRPYmplY3RQcm94
eS5wYXRoID0gb2JqZWN0UHJveHkucGF0aCA/IG9iamVjdFByb3h5LnBhdGguc2xpY2UoKSA6IFtd
OworICAgICAgICAgICAgY2hpbGRPYmplY3RQcm94eS5wYXRoLnB1c2gocHJvcGVydHlOYW1lKTsK
KworICAgICAgICAgICAgY2hpbGRPYmplY3RQcm94eS5wcm90b0RlcHRoID0gb2JqZWN0UHJveHku
cHJvdG9EZXB0aCB8fCAwOworICAgICAgICAgICAgY2hpbGRPYmplY3RQcm94eS5kZXNjcmlwdGlv
biA9IE9iamVjdC5kZXNjcmliZShjaGlsZE9iamVjdCwgdHJ1ZSk7CisgICAgICAgICAgICBwcm9w
ZXJ0eS52YWx1ZSA9IGNoaWxkT2JqZWN0UHJveHk7CisKKyAgICAgICAgICAgIHZhciB0eXBlID0g
dHlwZW9mIGNoaWxkT2JqZWN0OworICAgICAgICAgICAgaWYgKHR5cGUgPT09ICJvYmplY3QiIHx8
IHR5cGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWJQcm9w
ZXJ0eU5hbWUgaW4gY2hpbGRPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3Bl
cnR5TmFtZSA9PT0gIl9fdHJlZUVsZW1lbnRJZGVudGlmaWVyIikKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5oYXNDaGlsZHJl
biA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkT2JqZWN0UHJveHkuaGFzQ2hpbGRy
ZW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTog
dGhpcyBzaG91bGQgc2hvdyBzb21ldGhpbmcgbGlrZSAiZ2V0dGVyIiAoYnVnIDE2NzM0KS4KLSAg
ICAgICAgICAgIHByb3BlcnR5LnRleHRDb250ZW50ID0gIlx1MjAxNCI7IC8vIGVtIGRhc2gKKyAg
ICAgICAgICAgIHByb3BlcnR5LnZhbHVlID0geyBkZXNjcmlwdGlvbjogIlx1MjAxNCIgfTsgLy8g
ZW0gZGFzaAogICAgICAgICAgICAgcHJvcGVydHkuaXNHZXR0ZXIgPSB0cnVlOwogICAgICAgICB9
CiAgICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7CkBAIC00NzksNiArNDk1LDMyNyBA
QCBJbmplY3RlZFNjcmlwdC5zZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJveHks
IHByb3BlcnR5TmFtZSwgZXhwcmVzc2lvbgogICAgIH0KIH0KIAorSW5qZWN0ZWRTY3JpcHQuZXZh
bHVhdGUgPSBmdW5jdGlvbihleHByZXNzaW9uKQoreworICAgIEluamVjdGVkU2NyaXB0Ll9lbnN1
cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCgpOworICAgIC8vIFN1cnJvdW5kIHRoZSBleHByZXNz
aW9uIGluIHdpdGggc3RhdGVtZW50cyB0byBpbmplY3Qgb3VyIGNvbW1hbmQgbGluZSBBUEkgc28g
dGhhdAorICAgIC8vIHRoZSB3aW5kb3cgb2JqZWN0IHByb3BlcnRpZXMgc3RpbGwgdGFrZSBtb3Jl
IHByZWNlZGVudCB0aGFuIG91ciBBUEkgZnVuY3Rpb25zLgorICAgIGV4cHJlc3Npb24gPSAid2l0
aCAod2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeyB3aXRoICh3aW5kb3cpIHsgIiAr
IGV4cHJlc3Npb24gKyAiIH0gfSI7CisKKyAgICB2YXIgcmVzdWx0ID0ge307CisgICAgdHJ5IHsK
KyAgICAgICAgdmFyIHZhbHVlID0gSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLmV2YWwoZXhwcmVz
c2lvbik7CisgICAgICAgIHJlc3VsdC52YWx1ZSA9IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcE9i
amVjdCh2YWx1ZSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICByZXN1bHQuZXhjZXB0aW9u
ID0gZS50b1N0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbmplY3Rl
ZFNjcmlwdC5hZGRJbnNwZWN0ZWROb2RlID0gZnVuY3Rpb24obm9kZUlkKQoreworICAgIHZhciBu
b2RlID0gSW5qZWN0ZWRTY3JpcHQuX25vZGVGb3JJZChub2RlSWQpOworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSW5qZWN0ZWRTY3JpcHQuX2Vuc3VyZUNvbW1h
bmRMaW5lQVBJSW5zdGFsbGVkKCk7CisgICAgdmFyIGluc3BlY3RlZE5vZGVzID0gSW5qZWN0ZWRT
Y3JpcHQuX3dpbmRvdygpLl9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXM7
CisgICAgaW5zcGVjdGVkTm9kZXMudW5zaGlmdChub2RlKTsKKyAgICBpZiAoaW5zcGVjdGVkTm9k
ZXMubGVuZ3RoID49IDUpCisgICAgICAgIGluc3BlY3RlZE5vZGVzLnBvcCgpOworICAgIHJldHVy
biB0cnVlOworfQorCitJbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNoID0gZnVuY3Rpb24od2hp
dGVzcGFjZVRyaW1tZWRRdWVyeSwgc2VhcmNoUmVzdWx0c1Byb3BlcnR5KQoreworICAgIHZhciB0
YWdOYW1lUXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5OworICAgIHZhciBhdHRyaWJ1dGVO
YW1lUXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5OworICAgIHZhciBzdGFydFRhZ0ZvdW5k
ID0gKHRhZ05hbWVRdWVyeS5pbmRleE9mKCI8IikgPT09IDApOworICAgIHZhciBlbmRUYWdGb3Vu
ZCA9ICh0YWdOYW1lUXVlcnkubGFzdEluZGV4T2YoIj4iKSA9PT0gKHRhZ05hbWVRdWVyeS5sZW5n
dGggLSAxKSk7CisKKyAgICBpZiAoc3RhcnRUYWdGb3VuZCB8fCBlbmRUYWdGb3VuZCkgeworICAg
ICAgICB2YXIgdGFnTmFtZVF1ZXJ5TGVuZ3RoID0gdGFnTmFtZVF1ZXJ5Lmxlbmd0aDsKKyAgICAg
ICAgdGFnTmFtZVF1ZXJ5ID0gdGFnTmFtZVF1ZXJ5LnN1YnN0cmluZygoc3RhcnRUYWdGb3VuZCA/
IDEgOiAwKSwgKGVuZFRhZ0ZvdW5kID8gKHRhZ05hbWVRdWVyeUxlbmd0aCAtIDEpIDogdGFnTmFt
ZVF1ZXJ5TGVuZ3RoKSk7CisgICAgfQorCisgICAgLy8gQ2hlY2sgdGhlIHRhZ05hbWVRdWVyeSBp
cyBpdCBpcyBhIHBvc3NpYmx5IHZhbGlkIHRhZyBuYW1lLgorICAgIGlmICghL15bYS16QS1aMC05
XC1fOl0rJC8udGVzdCh0YWdOYW1lUXVlcnkpKQorICAgICAgICB0YWdOYW1lUXVlcnkgPSBudWxs
OworCisgICAgLy8gQ2hlY2sgdGhlIGF0dHJpYnV0ZU5hbWVRdWVyeSBpcyBpdCBpcyBhIHBvc3Np
Ymx5IHZhbGlkIHRhZyBuYW1lLgorICAgIGlmICghL15bYS16QS1aMC05XC1fOl0rJC8udGVzdChh
dHRyaWJ1dGVOYW1lUXVlcnkpKQorICAgICAgICBhdHRyaWJ1dGVOYW1lUXVlcnkgPSBudWxsOwor
CisgICAgY29uc3QgZXNjYXBlZFF1ZXJ5ID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeS5lc2NhcGVD
aGFyYWN0ZXJzKCInIik7CisgICAgY29uc3QgZXNjYXBlZFRhZ05hbWVRdWVyeSA9ICh0YWdOYW1l
UXVlcnkgPyB0YWdOYW1lUXVlcnkuZXNjYXBlQ2hhcmFjdGVycygiJyIpIDogbnVsbCk7CisgICAg
Y29uc3QgZXNjYXBlZFdoaXRlc3BhY2VUcmltbWVkUXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1
ZXJ5LmVzY2FwZUNoYXJhY3RlcnMoIiciKTsKKyAgICBjb25zdCBzZWFyY2hSZXN1bHRzUHJvcGVy
dHkgPSBJbmplY3RlZFNjcmlwdC5faW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWU7
CisKKyAgICBmdW5jdGlvbiBhZGROb2Rlc1RvUmVzdWx0cyhub2RlcywgbGVuZ3RoLCBnZXRJdGVt
KQorICAgIHsKKyAgICAgICAgaWYgKCFsZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdmFyIG5vZGVJZHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSBnZXRJdGVtLmNhbGwobm9kZXMsIGkp
OworICAgICAgICAgICAgLy8gU2tpcCB0aGlzIG5vZGUgaWYgaXQgYWxyZWFkeSBoYXMgdGhlIHBy
b3BlcnR5LgorICAgICAgICAgICAgaWYgKHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSBpbiBub2RlKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIUluamVjdGVkU2Ny
aXB0Ll9zZWFyY2hSZXN1bHRzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIEluamVjdGVkU2Ny
aXB0Ll9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAwOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBub2RlW3NlYXJjaFJlc3VsdHNQcm9wZXJ0eV0gPSB0cnVlOworICAgICAgICAgICAg
SW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMucHVzaChub2RlKTsKKyAgICAgICAgICAgIHZh
ciBub2RlSWQgPSBJbnNwZWN0b3JDb250cm9sbGVyLnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9k
ZSwgZmFsc2UpOworICAgICAgICAgICAgbm9kZUlkcy5wdXNoKG5vZGVJZCk7CisgICAgICAgIH0K
KyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJ
ZHMuam9pbigiLCIpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaEV4YWN0SXRlbXMoZG9j
KQorICAgIHsKKyAgICAgICAgbWF0Y2hFeGFjdElkLmNhbGwodGhpcywgZG9jKTsKKyAgICAgICAg
bWF0Y2hFeGFjdENsYXNzTmFtZXMuY2FsbCh0aGlzLCBkb2MpOworICAgICAgICBtYXRjaEV4YWN0
VGFnTmFtZXMuY2FsbCh0aGlzLCBkb2MpOworICAgICAgICBtYXRjaEV4YWN0QXR0cmlidXRlTmFt
ZXMuY2FsbCh0aGlzLCBkb2MpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RJZChk
b2MpCisgICAgeworICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1l
bnRCeUlkLmNhbGwoZG9jLCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKKyAgICAgICAgYWRkTm9k
ZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIChyZXN1bHQgPyAxIDogMCksIGZ1bmN0aW9u
KCkgeyByZXR1cm4gdGhpcyB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaEV4YWN0Q2xh
c3NOYW1lcyhkb2MpCisgICAgeworICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19f
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUuY2FsbChkb2MsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkp
OworICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxl
bmd0aCwgcmVzdWx0Lml0ZW0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RUYWdO
YW1lcyhkb2MpCisgICAgeworICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5nZXRFbGVtZW50
c0J5VGFnTmFtZS5jYWxsKGRvYywgdGFnTmFtZVF1ZXJ5KTsKKyAgICAgICAgYWRkTm9kZXNUb1Jl
c3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaEV4YWN0QXR0cmlidXRlTmFtZXMoZG9jKQorICAgIHsK
KyAgICAgICAgaWYgKCFhdHRyaWJ1dGVOYW1lUXVlcnkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18ucXVlcnlTZWxlY3RvckFsbC5jYWxs
KGRvYywgIlsiICsgYXR0cmlidXRlTmFtZVF1ZXJ5ICsgIl0iKTsKKyAgICAgICAgYWRkTm9kZXNU
b1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaFBhcnRpYWxUYWdOYW1lcyhkb2MpCisgICAgewor
ICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vKltjb250
YWlucyhuYW1lKCksICciICsgZXNjYXBlZFRhZ05hbWVRdWVyeSArICInKV0iLCBkb2MsIG51bGws
IFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKKyAgICAgICAgYWRkTm9k
ZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVz
dWx0LnNuYXBzaG90SXRlbSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbWF0Y2hTdGFydE9mVGFn
TmFtZXMoZG9jKQorICAgIHsKKyAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUu
Y2FsbChkb2MsICIvLypbc3RhcnRzLXdpdGgobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVl
cnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1Rf
VFlQRSk7CisgICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1
bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOworICAgIH0KKworICAgIGZ1
bmN0aW9uIG1hdGNoUGFydGlhbFRhZ05hbWVzQW5kQXR0cmlidXRlVmFsdWVzKGRvYykKKyAgICB7
CisgICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5KSB7CisgICAgICAgICAgICBtYXRjaFBhcnRpYWxB
dHRyaWJ1dGVWYWx1ZXMuY2FsbCh0aGlzLCBkb2MpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5j
YWxsKGRvYywgIi8vKltjb250YWlucyhuYW1lKCksICciICsgZXNjYXBlZFRhZ05hbWVRdWVyeSAr
ICInKSBvciBjb250YWlucyhAKiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBudWxs
LCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7CisgICAgICAgIGFkZE5v
ZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJl
c3VsdC5zbmFwc2hvdEl0ZW0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hdGNoUGFydGlhbEF0
dHJpYnV0ZVZhbHVlcyhkb2MpCisgICAgeworICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19w
cm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy8qW2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRR
dWVyeSArICInKV0iLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hP
VF9UWVBFKTsKKyAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJl
c3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gbWF0Y2hTdHlsZVNlbGVjdG9yKGRvYykKKyAgICB7CisgICAgICAgIGNvbnN0IHJl
c3VsdCA9IGRvYy5fX3Byb3RvX18ucXVlcnlTZWxlY3RvckFsbC5jYWxsKGRvYywgd2hpdGVzcGFj
ZVRyaW1tZWRRdWVyeSk7CisgICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVz
dWx0LCByZXN1bHQubGVuZ3RoLCByZXN1bHQuaXRlbSk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
bWF0Y2hQbGFpblRleHQoZG9jKQorICAgIHsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9f
cHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vdGV4dCgpW2NvbnRhaW5zKC4sICciICsgZXNj
YXBlZFF1ZXJ5ICsgIicpXSB8IC8vY29tbWVudCgpW2NvbnRhaW5zKC4sICciICsgZXNjYXBlZFF1
ZXJ5ICsgIicpXSIsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9U
X1RZUEUpOworICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVz
dWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBtYXRjaFhQYXRoUXVlcnkoZG9jKQorICAgIHsKKyAgICAgICAgY29uc3QgcmVzdWx0
ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVy
eSwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Cisg
ICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNo
b3RMZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZp
bmlzaGVkU2VhcmNoaW5nKCkKKyAgICB7CisgICAgICAgIC8vIFJlbW92ZSB0aGUgc2VhcmNoUmVz
dWx0c1Byb3BlcnR5IG5vdyB0aGF0IHRoZSBzZWFyY2ggaXMgZmluaXNoZWQuCisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyAr
K2kpCisgICAgICAgICAgICBkZWxldGUgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHNbaV1b
c2VhcmNoUmVzdWx0c1Byb3BlcnR5XTsKKyAgICB9CisKKyAgICBjb25zdCBtYWluRnJhbWVEb2N1
bWVudCA9IEluamVjdGVkU2NyaXB0Ll93aW5kb3coKS5kb2N1bWVudDsKKyAgICBjb25zdCBzZWFy
Y2hEb2N1bWVudHMgPSBbbWFpbkZyYW1lRG9jdW1lbnRdOworICAgIHZhciBzZWFyY2hGdW5jdGlv
bnM7CisgICAgaWYgKHRhZ05hbWVRdWVyeSAmJiBzdGFydFRhZ0ZvdW5kICYmIGVuZFRhZ0ZvdW5k
KQorICAgICAgICBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hFeGFjdFRhZ05hbWVzLCBtYXRjaFBs
YWluVGV4dF07CisgICAgZWxzZSBpZiAodGFnTmFtZVF1ZXJ5ICYmIHN0YXJ0VGFnRm91bmQpCisg
ICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9IFttYXRjaFN0YXJ0T2ZUYWdOYW1lcywgbWF0Y2hQbGFp
blRleHRdOworICAgIGVsc2UgaWYgKHRhZ05hbWVRdWVyeSAmJiBlbmRUYWdGb3VuZCkgeworICAg
ICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBtYXRjaEVuZE9mVGFnTmFtZXMgc2VhcmNo
IGZ1bmN0aW9uIGlmIGVuZFRhZ0ZvdW5kIGlzIHRydWUgYnV0IG5vdCBzdGFydFRhZ0ZvdW5kLgor
ICAgICAgICAvLyBUaGlzIHJlcXVpcmVzIGVuZHMtd2l0aCgpIHN1cHBvcnQgaW4gWFBhdGgsIFdl
YktpdCBvbmx5IHN1cHBvcnRzIHN0YXJ0cy13aXRoKCkgYW5kIGNvbnRhaW5zKCkuCisgICAgICAg
IHNlYXJjaEZ1bmN0aW9ucyA9IFttYXRjaFBhcnRpYWxUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRd
OworICAgIH0gZWxzZSBpZiAod2hpdGVzcGFjZVRyaW1tZWRRdWVyeSA9PT0gIi8vKiIgfHwgd2hp
dGVzcGFjZVRyaW1tZWRRdWVyeSA9PT0gIioiKSB7CisgICAgICAgIC8vIFRoZXNlIHF1ZXJpZXMg
d2lsbCBtYXRjaCBldmVyeSBub2RlLiBNYXRjaGluZyBldmVyeXRoaW5nIGlzbid0IHVzZWZ1bCBh
bmQgY2FuIGJlIHNsb3cgZm9yIGxhcmdlIHBhZ2VzLAorICAgICAgICAvLyBzbyBsaW1pdCB0aGUg
c2VhcmNoIGZ1bmN0aW9ucyBsaXN0IHRvIHBsYWluIHRleHQgYW5kIGF0dHJpYnV0ZSBtYXRjaGlu
Zy4KKyAgICAgICAgc2VhcmNoRnVuY3Rpb25zID0gW21hdGNoUGFydGlhbEF0dHJpYnV0ZVZhbHVl
cywgbWF0Y2hQbGFpblRleHRdOworICAgIH0gZWxzZQorICAgICAgICBzZWFyY2hGdW5jdGlvbnMg
PSBbbWF0Y2hFeGFjdEl0ZW1zLCBtYXRjaFN0eWxlU2VsZWN0b3IsIG1hdGNoUGFydGlhbFRhZ05h
bWVzQW5kQXR0cmlidXRlVmFsdWVzLCBtYXRjaFBsYWluVGV4dCwgbWF0Y2hYUGF0aFF1ZXJ5XTsK
KworICAgIC8vIEZpbmQgYWxsIGZyYW1lcywgaWZyYW1lcyBhbmQgb2JqZWN0IGVsZW1lbnRzIHRv
IHNlYXJjaCB0aGVpciBkb2N1bWVudHMuCisgICAgY29uc3QgcXVlcnlTZWxlY3RvckFsbEZ1bmN0
aW9uID0gSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLkRvY3VtZW50LnByb3RvdHlwZS5xdWVyeVNl
bGVjdG9yQWxsOworICAgIGNvbnN0IHN1YmRvY3VtZW50UmVzdWx0ID0gcXVlcnlTZWxlY3RvckFs
bEZ1bmN0aW9uLmNhbGwobWFpbkZyYW1lRG9jdW1lbnQsICJpZnJhbWUsIGZyYW1lLCBvYmplY3Qi
KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ViZG9jdW1lbnRSZXN1bHQubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgdmFyIGVsZW1lbnQgPSBzdWJkb2N1bWVudFJlc3VsdC5pdGVtKGkpOwor
ICAgICAgICBpZiAoZWxlbWVudC5jb250ZW50RG9jdW1lbnQpCisgICAgICAgICAgICBzZWFyY2hE
b2N1bWVudHMucHVzaChlbGVtZW50LmNvbnRlbnREb2N1bWVudCk7CisgICAgfQorCisgICAgY29u
c3QgcGFuZWwgPSBJbmplY3RlZFNjcmlwdDsKKyAgICB2YXIgZG9jdW1lbnRJbmRleCA9IDA7Cisg
ICAgdmFyIHNlYXJjaEZ1bmN0aW9uSW5kZXggPSAwOworICAgIHZhciBjaHVua0ludGVydmFsSWRl
bnRpZmllciA9IG51bGw7CisKKyAgICAvLyBTcGxpdCB1cCB0aGUgd29yayBpbnRvIGNodW5rcyBz
byB3ZSBkb24ndCBibG9jayB0aGUgVUkgdGhyZWFkIHdoaWxlIHByb2Nlc3NpbmcuCisKKyAgICBm
dW5jdGlvbiBwcm9jZXNzQ2h1bmsoKQorICAgIHsKKyAgICAgICAgdmFyIHNlYXJjaERvY3VtZW50
ID0gc2VhcmNoRG9jdW1lbnRzW2RvY3VtZW50SW5kZXhdOworICAgICAgICB2YXIgc2VhcmNoRnVu
Y3Rpb24gPSBzZWFyY2hGdW5jdGlvbnNbc2VhcmNoRnVuY3Rpb25JbmRleF07CisKKyAgICAgICAg
aWYgKCsrc2VhcmNoRnVuY3Rpb25JbmRleCA+IHNlYXJjaEZ1bmN0aW9ucy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgIHNlYXJjaEZ1bmN0aW9uID0gc2VhcmNoRnVuY3Rpb25zWzBdOworICAgICAgICAg
ICAgc2VhcmNoRnVuY3Rpb25JbmRleCA9IDA7CisKKyAgICAgICAgICAgIGlmICgrK2RvY3VtZW50
SW5kZXggPiBzZWFyY2hEb2N1bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKHBh
bmVsLl9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPT09IGNodW5rSW50ZXJ2
YWxJZGVudGlmaWVyKQorICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFuZWwuX2N1cnJlbnRT
ZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgICBjbGVhckludGVy
dmFsKGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hlZFNl
YXJjaGluZy5jYWxsKHBhbmVsKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHNlYXJjaERvY3VtZW50ID0gc2VhcmNoRG9jdW1lbnRzW2RvY3Vt
ZW50SW5kZXhdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzZWFyY2hEb2N1bWVudCB8fCAh
c2VhcmNoRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIHNlYXJjaEZ1bmN0aW9uLmNhbGwocGFuZWwsIHNlYXJjaERvY3VtZW50KTsKKyAg
ICAgICAgfSBjYXRjaChlcnIpIHsKKyAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgZXhjZXB0aW9u
cy4gdGhlIHF1ZXJ5IG1pZ2h0IGJlIG1hbGZvcm1lZCwgYnV0IHdlIGFsbG93IHRoYXQuCisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBwcm9jZXNzQ2h1bmsoKTsKKworICAgIGNodW5rSW50ZXJ2YWxJ
ZGVudGlmaWVyID0gc2V0SW50ZXJ2YWwocHJvY2Vzc0NodW5rLCAyNSk7CisgICAgSW5qZWN0ZWRT
Y3JpcHQuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllciA9IGNodW5rSW50ZXJ2
YWxJZGVudGlmaWVyOworfQorCitJbmplY3RlZFNjcmlwdC5zZWFyY2hDYW5jZWxlZCA9IGZ1bmN0
aW9uKCkKK3sKKyAgICBpZiAoSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMpIHsKKyAgICAg
ICAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb3BlcnR5ID0gSW5qZWN0ZWRTY3JpcHQuX2luY2x1ZGVk
SW5TZWFyY2hSZXN1bHRzUHJvcGVydHlOYW1lOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5fc2VhcmNoUmVzdWx0c1tpXTsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBz
ZWFyY2hSZXN1bHRzUHJvcGVydHkgc2luY2UgdGhlcmUgbWlnaHQgYmUgYW4gdW5maW5pc2hlZCBz
ZWFyY2guCisgICAgICAgICAgICBkZWxldGUgbm9kZVtzZWFyY2hSZXN1bHRzUHJvcGVydHldOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNo
Q2h1bmtJbnRlcnZhbElkZW50aWZpZXIpIHsKKyAgICAgICAgY2xlYXJJbnRlcnZhbChJbmplY3Rl
ZFNjcmlwdC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyKTsKKyAgICAgICAg
ZGVsZXRlIEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZp
ZXI7CisgICAgfQorICAgIEluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzID0gW107Cit9CisK
K0luamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZCA9IGZ1bmN0aW9u
KGluc3BlY3RlZFdpbmRvdykKK3sKKyAgICB2YXIgaW5zcGVjdGVkV2luZG93ID0gSW5qZWN0ZWRT
Y3JpcHQuX3dpbmRvdygpOworICAgIGlmIChpbnNwZWN0ZWRXaW5kb3cuX2luc3BlY3RvckNvbW1h
bmRMaW5lQVBJKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW5zcGVjdGVkV2luZG93LmV2
YWwoIndpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkgPSB7IFwKKyAgICAgICAgJDogZnVu
Y3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZC5hcHBseShkb2N1bWVudCwg
YXJndW1lbnRzKSB9LCBcCisgICAgICAgICQkOiBmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3JBbGwuYXBwbHkoZG9jdW1lbnQsIGFyZ3VtZW50cykgfSwgXAorICAgICAg
ICAkeDogZnVuY3Rpb24oeHBhdGgsIGNvbnRleHQpIHsgXAorICAgICAgICAgICAgdmFyIG5vZGVz
ID0gW107IFwKKyAgICAgICAgICAgIHRyeSB7IFwKKyAgICAgICAgICAgICAgICB2YXIgZG9jID0g
Y29udGV4dCB8fCBkb2N1bWVudDsgXAorICAgICAgICAgICAgICAgIHZhciByZXN1bHRzID0gZG9j
LmV2YWx1YXRlKHhwYXRoLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0LkFOWV9UWVBFLCBudWxsKTsg
XAorICAgICAgICAgICAgICAgIHZhciBub2RlOyBcCisgICAgICAgICAgICAgICAgd2hpbGUgKG5v
ZGUgPSByZXN1bHRzLml0ZXJhdGVOZXh0KCkpIG5vZGVzLnB1c2gobm9kZSk7IFwKKyAgICAgICAg
ICAgIH0gY2F0Y2ggKGUpIHt9IFwKKyAgICAgICAgICAgIHJldHVybiBub2RlczsgXAorICAgICAg
ICB9LCBcCisgICAgICAgIGRpcjogZnVuY3Rpb24oKSB7IHJldHVybiBjb25zb2xlLmRpci5hcHBs
eShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFwKKyAgICAgICAgZGlyeG1sOiBmdW5jdGlvbigpIHsg
cmV0dXJuIGNvbnNvbGUuZGlyeG1sLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAorICAg
ICAgICBrZXlzOiBmdW5jdGlvbihvKSB7IHZhciBhID0gW107IGZvciAodmFyIGsgaW4gbykgYS5w
dXNoKGspOyByZXR1cm4gYTsgfSwgXAorICAgICAgICB2YWx1ZXM6IGZ1bmN0aW9uKG8pIHsgdmFy
IGEgPSBbXTsgZm9yICh2YXIgayBpbiBvKSBhLnB1c2gob1trXSk7IHJldHVybiBhOyB9LCBcCisg
ICAgICAgIHByb2ZpbGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5wcm9maWxlLmFwcGx5
KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAorICAgICAgICBwcm9maWxlRW5kOiBmdW5jdGlvbigp
IHsgcmV0dXJuIGNvbnNvbGUucHJvZmlsZUVuZC5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0s
IFwKKyAgICAgICAgX2luc3BlY3RlZE5vZGVzOiBbXSwgXAorICAgICAgICBnZXQgJDAoKSB7IHJl
dHVybiBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzBdIH0sIFwKKyAg
ICAgICAgZ2V0ICQxKCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0
ZWROb2Rlc1sxXSB9LCBcCisgICAgICAgIGdldCAkMigpIHsgcmV0dXJuIF9pbnNwZWN0b3JDb21t
YW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMl0gfSwgXAorICAgICAgICBnZXQgJDMoKSB7IHJl
dHVybiBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzNdIH0sIFwKKyAg
ICAgICAgZ2V0ICQ0KCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0
ZWROb2Rlc1s0XSB9IFwKKyAgICB9OyIpOworCisgICAgaW5zcGVjdGVkV2luZG93Ll9pbnNwZWN0
b3JDb21tYW5kTGluZUFQSS5jbGVhciA9IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcENhbGxiYWNr
KEluc3BlY3RvckNvbnRyb2xsZXIuY2xlYXJNZXNzYWdlcy5iaW5kKEluc3BlY3RvckNvbnRyb2xs
ZXIsIHRydWUpKTsKKyAgICBpbnNwZWN0ZWRXaW5kb3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJ
Lmluc3BlY3QgPSBJbnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxsYmFjayhpbnNwZWN0T2JqZWN0
LmJpbmQodGhpcykpOworCisgICAgZnVuY3Rpb24gaW5zcGVjdE9iamVjdChvKQorICAgIHsKKyAg
ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgaW5zcGVjdGVkV2luZG93LmNvbnNvbGUubG9nKG8pOworICAgICAgICBpZiAoT2Jq
ZWN0LnR5cGUobywgaW5zcGVjdGVkV2luZG93KSA9PT0gIm5vZGUiKSB7CisgICAgICAgICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyLnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobywgdHJ1ZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKE9iamVjdC5kZXNjcmliZShvKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgIkRhdGFiYXNlIjoKKyAgICAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yQ29udHJvbGxlci5zZWxlY3REYXRhYmFzZShvKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiU3RvcmFnZSI6CisgICAgICAgICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnNlbGVjdERPTVN0b3JhZ2Uobyk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
CiBJbmplY3RlZFNjcmlwdC5fcmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdFByb3h5KQog
ewogICAgIHZhciBvYmplY3QgPSBJbmplY3RlZFNjcmlwdC5fb2JqZWN0Rm9ySWQob2JqZWN0UHJv
eHkub2JqZWN0SWQpOwpAQCAtNDg2LDExICs4MjMsMTEgQEAgSW5qZWN0ZWRTY3JpcHQuX3Jlc29s
dmVPYmplY3QgPSBmdW5jdGlvbihvYmplY3RQcm94eSkKICAgICB2YXIgcHJvdG9EZXB0aCA9IG9i
amVjdFByb3h5LnByb3RvRGVwdGg7CiAKICAgICAvLyBGb2xsb3cgdGhlIHByb3BlcnR5IHBhdGgu
Ci0gICAgZm9yICh2YXIgaSA9IDA7IG9iamVjdCAmJiBpIDwgcGF0aC5sZW5ndGg7ICsraSkKKyAg
ICBmb3IgKHZhciBpID0gMDsgb2JqZWN0ICYmIHBhdGggJiYgaSA8IHBhdGgubGVuZ3RoOyArK2kp
CiAgICAgICAgIG9iamVjdCA9IG9iamVjdFtwYXRoW2ldXTsKIAogICAgIC8vIEdldCB0byB0aGUg
bmVjZXNzYXJ5IHByb3RvIGxheWVyLgotICAgIGZvciAodmFyIGkgPSAwOyBvYmplY3QgJiYgaSA8
IHByb3RvRGVwdGg7ICsraSkKKyAgICBmb3IgKHZhciBpID0gMDsgb2JqZWN0ICYmIHByb3RvRGVw
dGggJiYgaSA8IHByb3RvRGVwdGg7ICsraSkKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fcHJv
dG9fXzsKIAogICAgIHJldHVybiBvYmplY3Q7CkBAIC01MDUsMTIgKzg0MiwyOSBAQCBJbmplY3Rl
ZFNjcmlwdC5fd2luZG93ID0gZnVuY3Rpb24oKQogCiBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklk
ID0gZnVuY3Rpb24obm9kZUlkKQogewotICAgIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBub2RlIGxv
b2t1cCBpbiB0aGUgSW5zcGVjdG9yRE9NQWdlbnQgb25jZSBET01BZ2VudCBub2RlcyBhcmUgdXNl
ZC4KLSAgICByZXR1cm4gbm9kZUlkOworICAgIGlmICghbm9kZUlkKQorICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICByZXR1cm4gSW5zcGVjdG9yQ29udHJvbGxlci5ub2RlRm9ySWQobm9kZUlkKTsK
IH0KIAogSW5qZWN0ZWRTY3JpcHQuX29iamVjdEZvcklkID0gZnVuY3Rpb24ob2JqZWN0SWQpCiB7
Ci0gICAgLy8gVE9ETzogcmVwbGFjZSB3aXRoIG5vZGUgbG9va3VwcyBmb3Igbm9kZSBpZHMgYW5k
IGV2YWx1YXRpb24gcmVzdWx0IGxvb2t1cHMgZm9yIHRoZSByZXN0IG9mIGlkcy4KKyAgICBpZiAo
dHlwZW9mIG9iamVjdElkID09PSAibnVtYmVyIikKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2Ny
aXB0Ll9ub2RlRm9ySWQob2JqZWN0SWQpOworICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3RJZCA9
PT0gInN0cmluZyIpCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JDb250cm9sbGVyLnVud3JhcE9i
amVjdChvYmplY3RJZCk7CisKKyAgICAvLyBUT0RPOiBtb3ZlIHNjb3BlIGNoYWluIG9iamVjdHMg
dG8gcHJveHktYmFzZWQgc2NoZW1hLgogICAgIHJldHVybiBvYmplY3RJZDsKIH0KKworSW5qZWN0
ZWRTY3JpcHQuX2NyZWF0ZVByb3h5T2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0LCBvYmplY3RJZCkK
K3sKKyAgICB2YXIgcmVzdWx0ID0ge307CisgICAgcmVzdWx0Lm9iamVjdElkID0gb2JqZWN0SWQ7
CisgICAgcmVzdWx0LnR5cGUgPSBPYmplY3QudHlwZShvYmplY3QsIEluamVjdGVkU2NyaXB0Ll93
aW5kb3coKSk7CisgICAgaWYgKHJlc3VsdC50eXBlID09PSAibm9kZSIpCisgICAgICAgIHJlc3Vs
dC5ub2RlSWQgPSBJbnNwZWN0b3JDb250cm9sbGVyLnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQob2Jq
ZWN0LCBmYWxzZSk7CisgICAgcmVzdWx0LmRlc2NyaXB0aW9uID0gT2JqZWN0LmRlc2NyaWJlKG9i
amVjdCwgdHJ1ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcwppbmRleCA5YjAz
OTQwLi5mMGI4NzdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2Jq
ZWN0UHJvcGVydGllc1NlY3Rpb24uanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzCkBAIC0xMjQsMTMgKzEyNCw2IEBAIFdlYkluc3Bl
Y3Rvci5PYmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50ID0gZnVuY3Rpb24ocHJvcGVydHkpCiB9CiAK
IFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKLSAg
ICBzYWZlUHJvcGVydHlWYWx1ZTogZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eU5hbWUpCi0gICAg
ewotICAgICAgICBpZiAob2JqZWN0WyJfX2xvb2t1cEdldHRlcl9fIl0gJiYgb2JqZWN0Ll9fbG9v
a3VwR2V0dGVyX18ocHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
cmV0dXJuIG9iamVjdFtwcm9wZXJ0eU5hbWVdOwotICAgIH0sCi0KICAgICBvbnBvcHVsYXRlOiBm
dW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggJiYgIXRo
aXMuc2hvdWxkUmVmcmVzaENoaWxkcmVuKQpAQCAtMTQ3LDcgKzE0MCw3IEBAIFdlYkluc3BlY3Rv
ci5PYmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAg
ICBzZWxmLmFwcGVuZENoaWxkKG5ldyBzZWxmLnRyZWVPdXRsaW5lLnNlY3Rpb24udHJlZUVsZW1l
bnRDb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzW2ldKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07
Ci0gICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuZ2V0UHJvcGVydGllcyh0aGlzLnByb3BlcnR5
LmNoaWxkT2JqZWN0UHJveHksIGZhbHNlLCBjYWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckNv
bnRyb2xsZXIuZ2V0UHJvcGVydGllcyh0aGlzLnByb3BlcnR5LnZhbHVlLCBmYWxzZSwgY2FsbGJh
Y2spOwogICAgIH0sCiAKICAgICBvbmRibGNsaWNrOiBmdW5jdGlvbihlbGVtZW50LCBldmVudCkK
QEAgLTE2OCw3ICsxNjEsNyBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVlRWxlbWVu
dC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50LmNsYXNzTmFt
ZSA9ICJ2YWx1ZSI7Ci0gICAgICAgIHRoaXMudmFsdWVFbGVtZW50LnRleHRDb250ZW50ID0gdGhp
cy5wcm9wZXJ0eS50ZXh0Q29udGVudDsKKyAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQudGV4dENv
bnRlbnQgPSB0aGlzLnByb3BlcnR5LnZhbHVlLmRlc2NyaXB0aW9uOwogICAgICAgICBpZiAodGhp
cy5wcm9wZXJ0eS5pc0dldHRlcikKICAgICAgICAgICAgdGhpcy52YWx1ZUVsZW1lbnQuYWRkU3R5
bGVDbGFzcygiZGltbWVkIik7CiAKQEAgLTE3Nyw3ICsxNzAsNyBAQCBXZWJJbnNwZWN0b3IuT2Jq
ZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMubGlzdEl0
ZW1FbGVtZW50LmFwcGVuZENoaWxkKG5hbWVFbGVtZW50KTsKICAgICAgICAgdGhpcy5saXN0SXRl
bUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjogIikpOwogICAg
ICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZhbHVlRWxlbWVudCk7
Ci0gICAgICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSB0aGlzLnByb3BlcnR5Lmhhc0NoaWxkcmVuOwor
ICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gdGhpcy5wcm9wZXJ0eS52YWx1ZS5oYXNDaGlsZHJl
bjsKICAgICB9LAogCiAgICAgdXBkYXRlU2libGluZ3M6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm94eS5qcyBiL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm94eS5qcwppbmRleCBmYTc4MTZlLi5kYmI5ZTQ4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJveHkuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3h5LmpzCkBAIC0yOCwxOCAr
MjgsMTcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5
ID0gZnVuY3Rpb24ob2JqZWN0SWQsIHBhdGgsIHByb3RvRGVwdGgpCitXZWJJbnNwZWN0b3IuT2Jq
ZWN0UHJveHkgPSBmdW5jdGlvbihvYmplY3RJZCwgcGF0aCwgcHJvdG9EZXB0aCwgZGVzY3JpcHRp
b24sIGhhc0NoaWxkcmVuKQogewogICAgIHRoaXMub2JqZWN0SWQgPSBvYmplY3RJZDsKICAgICB0
aGlzLnBhdGggPSBwYXRoIHx8IFtdOwogICAgIHRoaXMucHJvdG9EZXB0aCA9IHByb3RvRGVwdGgg
fHwgMDsKKyAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgdGhpcy5oYXND
aGlsZHJlbiA9IGhhc0NoaWxkcmVuOwogfQogCiBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlQ
cm94eSA9IGZ1bmN0aW9uKG5hbWUsIG9iamVjdCkKIHsKICAgICB0aGlzLm5hbWUgPSBuYW1lOwot
ICAgIHRoaXMudHlwZSA9ICJvYmplY3QiOwotICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSB0cnVlOwot
ICAgIHRoaXMudGV4dENvbnRlbnQgPSBPYmplY3QuZGVzY3JpYmUob2JqZWN0LCB0cnVlKTsKLSAg
ICB0aGlzLmNoaWxkT2JqZWN0UHJveHkgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5KG9i
amVjdCk7CisgICAgdGhpcy52YWx1ZSA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0UHJveHkob2Jq
ZWN0LCBbXSwgMCwgT2JqZWN0LmRlc2NyaWJlKG9iamVjdCwgdHJ1ZSksIHRydWUpOwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb3BlcnRpZXNTaWRlYmFyUGFu
ZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9wZXJ0aWVzU2lkZWJhclBhbmUu
anMKaW5kZXggMmQzMjEzNy4uNGU1NTc2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Byb3BlcnRpZXNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvUHJvcGVydGllc1NpZGViYXJQYW5lLmpzCkBAIC0zMiw3ICszMiw3IEBAIFdl
Ykluc3BlY3Rvci5Qcm9wZXJ0aWVzU2lkZWJhclBhbmUgPSBmdW5jdGlvbigpCiB9CiAKIFdlYklu
c3BlY3Rvci5Qcm9wZXJ0aWVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewotICAgIHVwZGF0ZTog
ZnVuY3Rpb24ob2JqZWN0KQorICAgIHVwZGF0ZTogZnVuY3Rpb24obm9kZSkKICAgICB7CiAgICAg
ICAgIHZhciBib2R5ID0gdGhpcy5ib2R5RWxlbWVudDsKIApAQCAtNDAsNyArNDAsNyBAQCBXZWJJ
bnNwZWN0b3IuUHJvcGVydGllc1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0
aGlzLnNlY3Rpb25zID0gW107CiAKLSAgICAgICAgaWYgKCFvYmplY3QpCisgICAgICAgIGlmICgh
bm9kZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CkBA
IC01MSwxMyArNTEsMTMgQEAgV2ViSW5zcGVjdG9yLlByb3BlcnRpZXNTaWRlYmFyUGFuZS5wcm90
b3R5cGUgPSB7CiAKICAgICAgICAgICAgIC8vIEdldCBhcnJheSBvZiBwcm90b3R5cGUgdXNlci1m
cmllbmRseSBuYW1lcy4KICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvdG90eXBl
cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBuZXcgV2Vi
SW5zcGVjdG9yLk9iamVjdFByb3h5KG9iamVjdCwgW10sIGkpOworICAgICAgICAgICAgICAgIHZh
ciBwcm90b3R5cGUgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5KG5vZGUuaWQsIFtdLCBp
KTsKICAgICAgICAgICAgICAgICB2YXIgc2VjdGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0
UHJvcGVydGllc1NlY3Rpb24ocHJvdG90eXBlLCBwcm90b3R5cGVzW2ldLCBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlByb3RvdHlwZSIpKTsKICAgICAgICAgICAgICAgICBzZWxmLnNlY3Rpb25zLnB1
c2goc2VjdGlvbik7CiAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZChzZWN0aW9uLmVs
ZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9OwotICAgICAgICBJbnNwZWN0b3JDb250
cm9sbGVyLmdldFByb3RvdHlwZXMob2JqZWN0LCBjYWxsYmFjayk7CisgICAgICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXIuZ2V0UHJvdG90eXBlcyhub2RlLmlkLCBjYWxsYmFjayk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBh
bmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMK
aW5kZXggMjdiYzIyOS4uYzcyMGRjMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwpAQCAtNjcsMTAgKzY3LDEwIEBAIFdlYkluc3BlY3Rv
ci5TdHlsZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBjYWxsYmFjayA9
IGZ1bmN0aW9uKHN0eWxlcykgewogICAgICAgICAgICAgaWYgKCFzdHlsZXMpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgdmFyIG5vZGVXcmFwcGVyID0gV2ViSW5zcGVjdG9y
LndyYXBOb2RlV2l0aFN0eWxlcyhub2RlLCBzdHlsZXMpOwotICAgICAgICAgICAgc2VsZi5fdXBk
YXRlKHJlZnJlc2gsIGJvZHksIG5vZGVXcmFwcGVyLCBlZGl0ZWRTZWN0aW9uLCBmb3JjZVVwZGF0
ZSk7CisgICAgICAgICAgICBub2RlLl9zZXRTdHlsZXMoc3R5bGVzLmNvbXB1dGVkU3R5bGUsIHN0
eWxlcy5pbmxpbmVTdHlsZSwgc3R5bGVzLnN0eWxlQXR0cmlidXRlcywgc3R5bGVzLm1hdGNoZWRD
U1NSdWxlcyk7CisgICAgICAgICAgICBzZWxmLl91cGRhdGUocmVmcmVzaCwgYm9keSwgbm9kZSwg
ZWRpdGVkU2VjdGlvbiwgZm9yY2VVcGRhdGUpOwogICAgICAgICB9OwotICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyLmdldFN0eWxlcyhub2RlLCAhUHJlZmVyZW5jZXMuc2hvd1VzZXJBZ2VudFN0
eWxlcywgY2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmdldFN0eWxlcyhu
b2RlLmlkLCAhUHJlZmVyZW5jZXMuc2hvd1VzZXJBZ2VudFN0eWxlcywgY2FsbGJhY2spOwogICAg
IH0sCiAKICAgICBfdXBkYXRlOiBmdW5jdGlvbihyZWZyZXNoLCBib2R5LCBub2RlLCBlZGl0ZWRT
ZWN0aW9uLCBmb3JjZVVwZGF0ZSkKQEAgLTYxMSwyNCArNjExLDEyIEBAIFdlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIG1vdmVUb05l
eHRJZk5lZWRlZC5jYWxsKHNlbGYpOwogICAgICAgICB9OwogCi0gICAgICAgIEluc3BlY3RvckNv
bnRyb2xsZXIuYXBwbHlTdHlsZVJ1bGVUZXh0KHRoaXMucnVsZS5faWQsIG5ld0NvbnRlbnQsIHRo
aXMucGFuZS5ub2RlLCBjYWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuYXBw
bHlTdHlsZVJ1bGVUZXh0KHRoaXMucnVsZS5pZCwgbmV3Q29udGVudCwgdGhpcy5wYW5lLm5vZGUu
aWQsIGNhbGxiYWNrKTsKICAgICB9LAogCiAgICAgZWRpdGluZ1NlbGVjdG9yQ2FuY2VsbGVkOiBm
dW5jdGlvbihlbGVtZW50LCBjb250ZXh0KQogICAgIHsKICAgICAgICAgZWxlbWVudC50ZXh0Q29u
dGVudCA9IGNvbnRleHQ7Ci0gICAgfSwKLQotICAgIF9kb2VzU2VsZWN0b3JBZmZlY3RTZWxlY3Rl
ZE5vZGU6IGZ1bmN0aW9uKHNlbGVjdG9yKQotICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGVkTm9k
ZSA9IHRoaXMucGFuZS5ub2RlOwotICAgICAgICB2YXIgbm9kZXMgPSBzZWxlY3RlZE5vZGUub3du
ZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKG5vZGVzW2ld
ID09PSBzZWxlY3RlZE5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCkBAIC02NzMsMTUgKzY2MSwx
NyBAQCBXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9
IHsKICAgICBlZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBuZXdDb250ZW50LCBv
bGRDb250ZW50LCBjb250ZXh0KQogICAgIHsKICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAg
ICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbihzdHlsZVJ1bGUpIHsKLSAgICAgICAgICAgIGlm
ICghc3R5bGVSdWxlKSB7CisgICAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKHJlc3VsdCkg
eworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAvLyBJbnZhbGlk
IFN5bnRheCBmb3IgYSBTZWxlY3RvcgogICAgICAgICAgICAgICAgIHNlbGYuZWRpdGluZ0NhbmNl
bGxlZCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBzdHlsZVJ1bGUgPSByZXN1bHRbMF07CisgICAgICAgICAgICB2YXIgZG9lc1NlbGVj
dG9yQWZmZWN0U2VsZWN0ZWROb2RlID0gcmVzdWx0WzFdOwogICAgICAgICAgICAgc2VsZi5tYWtl
Tm9ybWFsKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUnVsZShzdHlsZVJ1
bGUpKTsKIAotICAgICAgICAgICAgaWYgKCFzZWxmLl9kb2VzU2VsZWN0b3JBZmZlY3RTZWxlY3Rl
ZE5vZGUobmV3Q29udGVudCkpIHsKKyAgICAgICAgICAgIGlmICghZG9lc1NlbGVjdG9yQWZmZWN0
U2VsZWN0ZWROb2RlKSB7CiAgICAgICAgICAgICAgICAgc2VsZi5ub0FmZmVjdCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5vLWFmZmVjdCIpOwog
ICAgICAgICAgICAgfQpAQCAtNjkyLDcgKzY4Miw3IEBAIFdlYkluc3BlY3Rvci5CbGFua1N0eWxl
UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICAgICAgc2VsZi5wYW5lLmFk
ZEJsYW5rU2VjdGlvbigpOwogICAgICAgICAgICAgc2VsZi5hZGROZXdCbGFua1Byb3BlcnR5KCku
c3RhcnRFZGl0aW5nKCk7CiAgICAgICAgIH07Ci0gICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIu
YWRkU3R5bGVTZWxlY3RvcihuZXdDb250ZW50LCBjYWxsYmFjayk7CisgICAgICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXIuYWRkU3R5bGVTZWxlY3RvcihuZXdDb250ZW50LCB0aGlzLnBhbmUubm9kZS5p
ZCwgY2FsbGJhY2spOwogICAgIH0sCiAKICAgICBtYWtlTm9ybWFsOiBmdW5jdGlvbihzdHlsZVJ1
bGUpCkBAIC05OTksNyArOTg5LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxl
bWVudC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgICAgIHNlbGYudXBkYXRlQWxsKHRydWUpOwog
ICAgICAgICB9OwotICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnRvZ2dsZVN0eWxlRW5hYmxl
ZCh0aGlzLnN0eWxlLl9pZCwgdGhpcy5uYW1lLCBkaXNhYmxlZCwgY2FsbGJhY2spOworICAgICAg
ICBJbnNwZWN0b3JDb250cm9sbGVyLnRvZ2dsZVN0eWxlRW5hYmxlZCh0aGlzLnN0eWxlLmlkLCB0
aGlzLm5hbWUsIGRpc2FibGVkLCBjYWxsYmFjayk7CiAgICAgfSwKIAogICAgIHVwZGF0ZVN0YXRl
OiBmdW5jdGlvbigpCkBAIC0xMTYyLDcgKzExNTIsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9w
ZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIENTUyB0ZXh0IGJlZm9yZSBhcHBseWluZyB1c2Vy
IGNoYW5nZXMuIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQKICAgICAgICAgICAgIC8vIG5ldyBw
cm9wZXJ0aWVzIGZyb20gc3RpY2tpbmcgYXJvdW5kIGlmIHRoZSB1c2VyIGFkZHMgb25lLCB0aGVu
IHJlbW92ZXMgaXQuCi0gICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnNldFN0eWxlVGV4
dCh0aGlzLnN0eWxlLCB0aGlzLm9yaWdpbmFsQ1NTVGV4dCk7CisgICAgICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyLnNldFN0eWxlVGV4dCh0aGlzLnN0eWxlLmlkLCB0aGlzLm9yaWdpbmFsQ1NT
VGV4dCk7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLmFwcGx5U3R5bGVUZXh0KHRoaXMubGlz
dEl0ZW1FbGVtZW50LnRleHRDb250ZW50KTsKQEAgLTExODIsNyArMTE3Miw3IEBAIFdlYkluc3Bl
Y3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICBpZiAo
dGhpcy5fbmV3UHJvcGVydHkpCiAgICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnJlbW92ZUNo
aWxkKHRoaXMpOwogICAgICAgICBlbHNlIGlmICh0aGlzLm9yaWdpbmFsQ1NTVGV4dCkgewotICAg
ICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5zZXRTdHlsZVRleHQodGhpcy5zdHlsZSwgdGhp
cy5vcmlnaW5hbENTU1RleHQpOworICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5zZXRT
dHlsZVRleHQodGhpcy5zdHlsZS5pZCwgdGhpcy5vcmlnaW5hbENTU1RleHQpOwogCiAgICAgICAg
ICAgICBpZiAodGhpcy50cmVlT3V0bGluZS5zZWN0aW9uICYmIHRoaXMudHJlZU91dGxpbmUuc2Vj
dGlvbi5wYW5lKQogICAgICAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5wYW5l
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygic3R5bGUgZWRpdGVkIik7CkBAIC0xMzAxLDcgKzEy
OTEsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIGlmICghc2VsZi5ydWxlKQogICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5wYW5lbHMuZWxlbWVudHMudHJlZU91dGxpbmUudXBkYXRlKCk7CiAgICAgICAgIH07Ci0g
ICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuYXBwbHlTdHlsZVRleHQodGhpcy5zdHlsZS5faWQs
IHN0eWxlVGV4dC50cmltV2hpdGVzcGFjZSgpLCB0aGlzLm5hbWUsIGNhbGxiYWNrKTsKKyAgICAg
ICAgSW5zcGVjdG9yQ29udHJvbGxlci5hcHBseVN0eWxlVGV4dCh0aGlzLnN0eWxlLmlkLCBzdHls
ZVRleHQudHJpbVdoaXRlc3BhY2UoKSwgdGhpcy5uYW1lLCBjYWxsYmFjayk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCAzYzNjMWYxLi5m
NTNhN2M1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTM5
LDcgKzM5LDcgQEAgdmFyIFByZWZlcmVuY2VzID0gewogICAgIHNob3dJbmhlcml0ZWRDb21wdXRl
ZFN0eWxlUHJvcGVydGllczogZmFsc2UsCiAgICAgc3R5bGVSdWxlc0V4cGFuZGVkU3RhdGU6IHt9
LAogICAgIHNob3dNaXNzaW5nTG9jYWxpemVkU3RyaW5nczogZmFsc2UsCi0gICAgdXNlRE9NQWdl
bnQ6IGZhbHNlCisgICAgdXNlRE9NQWdlbnQ6IHRydWUKIH0KIAogdmFyIFdlYkluc3BlY3RvciA9
IHsKQEAgLTMzMyw3ICszMzMsNyBAQCB2YXIgV2ViSW5zcGVjdG9yID0gewogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKHRoaXMuX2hvdmVyZWRET01Ob2RlKSB7Ci0gICAgICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyLmhpZ2hsaWdodERPTU5vZGUodGhpcy5faG92ZXJlZERPTU5vZGUpOworICAg
ICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5oaWdobGlnaHRET01Ob2RlKHRoaXMuX2hvdmVy
ZWRET01Ob2RlLmlkKTsKICAgICAgICAgICAgIHRoaXMuc2hvd2luZ0RPTU5vZGVIaWdobGlnaHQg
PSB0cnVlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ci5oaWRlRE9NTm9kZUhpZ2hsaWdodCgpOwpAQCAtOTA5LDYgKzkwOSwyMyBAQCBXZWJJbnNwZWN0
b3IuYWRkUmVzb3VyY2UgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBwYXlsb2FkKQogICAgICAgICB0
aGlzLnBhbmVscy5yZXNvdXJjZXMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwogfQogCitXZWJJbnNw
ZWN0b3IuY2xlYXJDb25zb2xlTWVzc2FnZXMgPSBmdW5jdGlvbigpCit7CisgICAgV2ViSW5zcGVj
dG9yLmNvbnNvbGUuY2xlYXJNZXNzYWdlcyhmYWxzZSk7Cit9CisKK1dlYkluc3BlY3Rvci5zZWxl
Y3REYXRhYmFzZSA9IGZ1bmN0aW9uKG8pCit7CisgICAgV2ViSW5zcGVjdG9yLnNob3dEYXRhYmFz
ZXNQYW5lbCgpOworICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzLnNlbGVjdERhdGFi
YXNlKG8pOworfQorCitXZWJJbnNwZWN0b3Iuc2VsZWN0RE9NU3RvcmFnZSA9IGZ1bmN0aW9uKG8p
Cit7CisgICAgV2ViSW5zcGVjdG9yLnNob3dEYXRhYmFzZXNQYW5lbCgpOworICAgIFdlYkluc3Bl
Y3Rvci5wYW5lbHMuZGF0YWJhc2VzLnNlbGVjdERPTVN0b3JhZ2Uobyk7Cit9CisKIFdlYkluc3Bl
Y3Rvci51cGRhdGVSZXNvdXJjZSA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHBheWxvYWQpCiB7CiAg
ICAgdmFyIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaWRlbnRpZmllcl07CkBAIC0xMTM4LDgg
KzExNTUsOSBAQCBXZWJJbnNwZWN0b3IuZHJhd0xvYWRpbmdQaWVDaGFydCA9IGZ1bmN0aW9uKGNh
bnZhcywgcGVyY2VudCkgewogICAgIGcuZmlsbCgpOwogfQogCi1XZWJJbnNwZWN0b3IudXBkYXRl
Rm9jdXNlZE5vZGUgPSBmdW5jdGlvbihub2RlKQorV2ViSW5zcGVjdG9yLnVwZGF0ZUZvY3VzZWRO
b2RlID0gZnVuY3Rpb24obm9kZUlkKQogeworICAgIHZhciBub2RlID0gV2ViSW5zcGVjdG9yLmRv
bUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBkZXNlbGVjdCBpZiBudWxsIGlzIHBhc3NlZCBpbj8KICAgICAgICAgcmV0
dXJuOwpAQCAtMTMyOSw2ICsxMzQ3LDExIEBAIFdlYkluc3BlY3Rvci5wZXJmb3JtU2VhcmNoID0g
ZnVuY3Rpb24oZXZlbnQpCiAgICAgdGhpcy5jdXJyZW50UGFuZWwucGVyZm9ybVNlYXJjaChxdWVy
eSk7CiB9CiAKK1dlYkluc3BlY3Rvci5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0ID0gZnVuY3Rpb24o
bm9kZUlkcykKK3sKKyAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzLmFkZE5vZGVzVG9T
ZWFyY2hSZXN1bHQobm9kZUlkcyk7Cit9CisKIFdlYkluc3BlY3Rvci51cGRhdGVTZWFyY2hNYXRj
aGVzQ291bnQgPSBmdW5jdGlvbihtYXRjaGVzLCBwYW5lbCkKIHsKICAgICBpZiAoIXBhbmVsKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKaW5kZXggOTc4ZTU4Yi4uMDk3
MTA1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzCkBAIC0zNyw3
ICszNyw3IEBAIE9iamVjdC50eXBlID0gZnVuY3Rpb24ob2JqLCB3aW4pCiAKICAgICB3aW4gPSB3
aW4gfHwgd2luZG93OwogCi0gICAgaWYgKG9iaiBpbnN0YW5jZW9mIHdpbi5Ob2RlKQorICAgIGlm
IChvYmogaW5zdGFuY2VvZiB3aW4uTm9kZSAmJiAhKG9iaiBpbnN0YW5jZW9mIHdpbi5Eb2N1bWVu
dCkpCiAgICAgICAgIHJldHVybiAob2JqLm5vZGVUeXBlID09PSB1bmRlZmluZWQgPyB0eXBlIDog
Im5vZGUiKTsKICAgICBpZiAob2JqIGluc3RhbmNlb2Ygd2luLlN0cmluZykKICAgICAgICAgcmV0
dXJuICJzdHJpbmciOwpAQCAtNTYsNiArNTYsMTggQEAgT2JqZWN0LnR5cGUgPSBmdW5jdGlvbihv
YmosIHdpbikKICAgICByZXR1cm4gdHlwZTsKIH0KIAorT2JqZWN0LnByb3h5VHlwZSA9IGZ1bmN0
aW9uKG9iamVjdFByb3h5KQoreworICAgIGlmIChvYmplY3RQcm94eSA9PT0gbnVsbCkKKyAgICAg
ICAgcmV0dXJuICJudWxsIjsKKworICAgIHZhciB0eXBlID0gdHlwZW9mIG9iamVjdFByb3h5Owor
ICAgIGlmICh0eXBlICE9PSAib2JqZWN0IiAmJiB0eXBlICE9PSAiZnVuY3Rpb24iKQorICAgICAg
ICByZXR1cm4gdHlwZTsKKworICAgIHJldHVybiBvYmplY3RQcm94eS50eXBlOworfQorCiBPYmpl
Y3QuaGFzUHJvcGVydGllcyA9IGZ1bmN0aW9uKG9iaikKIHsKICAgICBpZiAodHlwZW9mIG9iaiA9
PT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIG9iaiA9PT0gIm51bGwiKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2UuaCBiL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmgKaW5kZXgg
ZDY4ZTliYy4uMTk3ZTY5MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaAor
KysgYi9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5oCkBAIC01Myw2ICs1Myw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBj
b25zdDsKIAorICAgICAgICBGcmFtZSogZnJhbWUoKSB7IHJldHVybiBtX2ZyYW1lOyB9CiAgICAg
ICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCkgeyBtX2ZyYW1lID0gMDsgfQogCiAgICAgcHJpdmF0
ZToK
</data>
<flag name="review"
          id="18932"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34745</attachid>
            <date>2009-08-13 08:26:20 -0700</date>
            <delta_ts>2009-08-13 08:26:20 -0700</delta_ts>
            <desc>Patch with comments addressed (no need to review).</desc>
            <filename>dom_agent.patch</filename>
            <type>text/plain</type>
            <size>125555</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2U5NzY5OC4uOTA2MjIwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxODUgQEAKKzIwMDktMDgtMTMgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBNaWdyYXRlIHRvIERPTUFnZW50IChz
ZXJpYWxpemVkIGFjY2VzcyB0byBET00pCisJCQkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTc3CisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lu
c3BlY3RvckJhY2tlbmRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JC
YWNrZW5kOjpoaWdobGlnaHRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9y
QmFja2VuZDo6bm9kZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2Vu
ZDo6aWRGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSW5zcGVjdG9yQmFja2VuZDo6d3Jh
cE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnVud3JhcE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SlNJbnNwZWN0b3JCYWNrZW5kOjpzZWxl
Y3REYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0luc3BlY3RvckJhY2tlbmQ6OnNlbGVj
dERPTVN0b3JhZ2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRW
YWx1ZTo6aXNPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdCk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6aXNPYmplY3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogaW5zcGVjdG9yL0Nv
bnNvbGVNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGVNZXNzYWdlOjpDb25z
b2xlTWVzc2FnZSk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQmFja2VuZDo6Y2xlYXJNZXNzYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JCYWNrZW5kOjpoaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFj
a2VuZDo6bm9kZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6Omlk
Rm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjp3cmFwT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OnVud3JhcE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmFkZE5vZGVzVG9TZWFyY2hS
ZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2VsZWN0RGF0YWJh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2VsZWN0RE9NU3RvcmFn
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpmb2N1c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpjbGVhckNvbnNvbGVNZXNzYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzdGFydEdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnNjcmlwdE9iamVjdFJlYWR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmRpZENvbW1pdExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6d3JhcE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp1
bndyYXBPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpiaW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6
OmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250
ZW5kOjp1cGRhdGVGb2N1c2VkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9u
dGVuZDo6c2VsZWN0RGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmQ6OnNlbGVjdERPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRl
bmQ6OmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLmNsZWFyTWVz
c2FnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5jb21w
bGV0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9y
ZXBvcnRDb21wbGV0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJv
dG90eXBlLl9tZXNzYWdlc0NsaWNrZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVW
aWV3LnByb3RvdHlwZS5kb0V2YWxJbldpbmRvdy5ldmFsQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5kb0V2YWxJbldpbmRvdyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9mb3JtYXQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZS5fZm9ybWF0bm9kZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlLl9mb3JtYXRvYmplY3QpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRE9NTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5nZXRDaGlsZE5vZGVzQXN5bmMpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVBc3lu
Yyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLnJlbW92ZUF0dHJp
YnV0ZUFzeW5jKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuc2V0
VGV4dE5vZGVWYWx1ZUFzeW5jKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90
b3R5cGUubm9kZUZvcklkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5
cGUuX2JpbmROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBl
Ll9jaGlsZE5vZGVJbnNlcnRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJz
ZVJ1bGUpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJvbGxlci5nZXRTdHlsZXMpOgorICAgICAg
ICAoSW5zcGVjdG9yQ29udHJvbGxlci5nZXRDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKEluc3Bl
Y3RvckNvbnRyb2xsZXIuZ2V0SW5saW5lU3R5bGUpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJv
bGxlci5hcHBseVN0eWxlVGV4dCk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyLnNldFN0
eWxlVGV4dCk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyLnRvZ2dsZVN0eWxlRW5hYmxl
ZCk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyLmFwcGx5U3R5bGVSdWxlVGV4dCk6Cisg
ICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVyLmFkZFN0eWxlU2VsZWN0b3IpOgorICAgICAgICAo
SW5zcGVjdG9yQ29udHJvbGxlci5zZXRTdHlsZVByb3BlcnR5KToKKyAgICAgICAgKEluc3BlY3Rv
ckNvbnRyb2xsZXIuZ2V0UHJvdG90eXBlcyk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9sbGVy
LmdldFByb3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yQ29udHJvbGxlci5zZXRQcm9wZXJ0
eVZhbHVlKToKKyAgICAgICAgKEluc3BlY3RvckNvbnRyb2xsZXIuZXZhbHVhdGUpOgorICAgICAg
ICAoSW5zcGVjdG9yQ29udHJvbGxlci5hZGRJbnNwZWN0ZWROb2RlKToKKyAgICAgICAgKEluc3Bl
Y3RvckNvbnRyb2xsZXIucGVyZm9ybVNlYXJjaCk6CisgICAgICAgIChJbnNwZWN0b3JDb250cm9s
bGVyLnNlYXJjaENhbmNlbGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC50aGlzLnRy
ZWVPdXRsaW5lLmZvY3VzZWROb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxl
bWVudHNQYW5lbC5wcm90b3R5cGUuc2VhcmNoQ2FuY2VsZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLl91cGRhdGVNYXRjaGVzQ291bnQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLl91cGRhdGVNYXRj
aGVzQ291bnRTb29uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3Rv
dHlwZS5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlT3V0bGluZS5wcm90b3R5cGUuc2V0IGZvY3VzZWRET01Ob2RlLnJlc3RvcmVIaWdobGln
aHRUb0hvdmVyZWROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVPdXRs
aW5lLnByb3RvdHlwZS5zZXQgZm9jdXNlZERPTU5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLnVwZGF0ZUNoaWxkcmVuKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fYXR0cmlidXRlRWRp
dGluZ0NvbW1pdHRlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNj
cmlwdC5qczoKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LmFwcGx5U3R5bGVSdWxlVGV4dCk6Cisg
ICAgICAgIChJbmplY3RlZFNjcmlwdC5hZGRTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgKEluamVj
dGVkU2NyaXB0Ll9kb2VzU2VsZWN0b3JBZmZlY3ROb2RlKToKKyAgICAgICAgKEluamVjdGVkU2Ny
aXB0Ll9zZXJpYWxpemVSdWxlKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVT
dHlsZSk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKToKKyAgICAgICAg
KEluamVjdGVkU2NyaXB0LmV2YWx1YXRlKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LmFkZElu
c3BlY3RlZE5vZGUpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaC5hZGRO
b2Rlc1RvUmVzdWx0cyk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNoLm1h
dGNoRXhhY3RJdGVtcyk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNoLm1h
dGNoRXhhY3RJZC5hZGROb2Rlc1RvUmVzdWx0cy5jYWxsKToKKyAgICAgICAgKEluamVjdGVkU2Ny
aXB0LnBlcmZvcm1TZWFyY2gubWF0Y2hFeGFjdElkKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0
LnBlcmZvcm1TZWFyY2gpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaC5t
YXRjaEV4YWN0VGFnTmFtZXMpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJj
aC5tYXRjaEV4YWN0QXR0cmlidXRlTmFtZXMpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVy
Zm9ybVNlYXJjaC5tYXRjaFBhcnRpYWxUYWdOYW1lcyk6CisgICAgICAgIChJbmplY3RlZFNjcmlw
dC5wZXJmb3JtU2VhcmNoLm1hdGNoU3RhcnRPZlRhZ05hbWVzKToKKyAgICAgICAgKEluamVjdGVk
U2NyaXB0LnBlcmZvcm1TZWFyY2gubWF0Y2hQYXJ0aWFsVGFnTmFtZXNBbmRBdHRyaWJ1dGVWYWx1
ZXMpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaC5tYXRjaFBhcnRpYWxB
dHRyaWJ1dGVWYWx1ZXMpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaC5t
YXRjaFN0eWxlU2VsZWN0b3IpOgorICAgICAgICAoSW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJj
aC5tYXRjaFBsYWluVGV4dCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNo
Lm1hdGNoWFBhdGhRdWVyeSk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNo
LmZpbmlzaGVkU2VhcmNoaW5nKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnBlcmZvcm1TZWFy
Y2gucHJvY2Vzc0NodW5rKToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0LnNlYXJjaENhbmNlbGVk
KToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxl
ZC5pbnNwZWN0T2JqZWN0KToKKyAgICAgICAgKEluamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5k
TGluZUFQSUluc3RhbGxlZCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5fcmVzb2x2ZU9iamVj
dCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKToKKyAgICAgICAgKEluamVj
dGVkU2NyaXB0Ll9vYmplY3RGb3JJZCk6CisgICAgICAgIChJbmplY3RlZFNjcmlwdC5fY3JlYXRl
UHJveHlPYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVy
dGllc1NlY3Rpb24uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlUcmVl
RWxlbWVudC5wcm90b3R5cGUub25wb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuT2Jq
ZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3h5LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk9i
amVjdFByb3h5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0eVByb3h5KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Byb3BlcnRpZXNTaWRlYmFyUGFuZS5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2lkZWJhclBhbmUucHJvdG90eXBlLnVw
ZGF0ZS5jYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUHJvcGVydGllc1NpZGViYXJQ
YW5lLnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU3R5
bGVzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBh
bmUucHJvdG90eXBlLnVwZGF0ZS5jYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5
bGVzU2lkZWJhclBhbmUucHJvdG90eXBlLnVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlw
ZS5lZGl0aW5nU2VsZWN0b3JDYW5jZWxsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJsYW5r
U3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ0NvbW1pdHRlZC5jYWxsYmFj
ayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9uLnBy
b3RvdHlwZS5lZGl0aW5nQ29tbWl0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5fdXBkYXRlSG92ZXJIaWdo
bGlnaHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5zZWxlY3REYXRhYmFzZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3Iuc2VsZWN0RE9NU3RvcmFnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IudXBkYXRlRm9jdXNl
ZE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOgorICAgICAgICAoT2Jq
ZWN0LnR5cGUpOgorICAgICAgICAoT2JqZWN0LnByb3h5VHlwZSk6CisgICAgICAgICogc3RvcmFn
ZS9TdG9yYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlOjpmcmFtZSk6CisKIDIwMDkt
MDgtMTIgIEFyaXlhIEhpZGF5YXQgIDxhcml5YS5oaWRheWF0QG5va2lhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJbnNwZWN0b3JCYWNrZW5kQ3VzdG9tLmNwcAppbmRleCBiMDc4MDE2Li4zMDdiN2JkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQmFja2VuZEN1c3RvbS5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCkBA
IC01Myw2ICs1MywxMCBAQAogI2luY2x1ZGUgIkpTUmFuZ2UuaCIKICNpbmNsdWRlICJOb2RlLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgorI2lmIEVOQUJMRShET01fU1RPUkFHRSkKKyNpbmNsdWRlICJT
dG9yYWdlLmgiCisjaW5jbHVkZSAiSlNTdG9yYWdlLmgiCisjZW5kaWYKICNpbmNsdWRlICJUZXh0
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlIDxydW50
aW1lL0pTQXJyYXkuaD4KQEAgLTcyLDIxICs3NiwxMiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUpTVmFsdWUgSlNJbnNwZWN0b3JCYWNrZW5kOjpoaWdo
bGlnaHRET01Ob2RlKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQor
SlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OmhpZ2hsaWdodERPTU5vZGUoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXpl
KCkgPCAxKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIEpTUXVhcmFudGlu
ZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFz
V3JhcHBlcihhcmdzLmF0KDApKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotCi0gICAgTm9kZSogbm9kZSA9IHRvTm9kZSh3cmFwcGVyLT51bndyYXBw
ZWRPYmplY3QoKSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLQotICAgIGltcGwoKS0+aGlnaGxpZ2h0KG5vZGUpOwotCisgICAgaW1wbCgpLT5oaWdobGln
aHQoYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIApAQCAtMzIyLDQgKzMxNywxMDcgQEAgSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6OnBy
b2ZpbGVzKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmKQogCiAjZW5k
aWYKIAorSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6Om5vZGVGb3JJZChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5u
b2RlRm9ySWQoYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpKTsKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMg
PSBpbXBsKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgSlNET01XaW5kb3cqIGluc3BlY3RlZFdpbmRvdyA9IHRvSlNET01XaW5kb3co
aWMtPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCkpOworICAgIHJldHVybiBKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXAoaW5zcGVjdGVkV2luZG93LT5nbG9iYWxFeGVjKCksIHRvSlMo
ZXhlYywgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShpbnNwZWN0ZWRXaW5kb3ct
Pmdsb2JhbEV4ZWMoKSksIG5vZGUpKTsKK30KKworSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6
OmlkRm9yTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
aWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAg
ICBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogd3JhcHBlciA9IEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjphc1dyYXBwZXIoYXJncy5hdCgwKSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIE5vZGUqIG5vZGUgPSB0b05vZGUod3Jh
cHBlci0+dW53cmFwcGVkT2JqZWN0KCkpOworICAgIGlmIChub2RlKQorICAgICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgaW1wbCgpLT5pZEZvck5vZGUobm9kZSkpOworICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6d3JhcE9iamVjdChF
eGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA8
IDEpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgcmV0dXJuIGltcGwoKS0+
d3JhcE9iamVjdChTY3JpcHRWYWx1ZShhcmdzLmF0KDApKSkuanNWYWx1ZSgpOworfQorCitKU1Zh
bHVlIEpTSW5zcGVjdG9yQmFja2VuZDo6dW53cmFwT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIHJldHVybiBpbXBsKCktPnVud3JhcE9iamVjdChh
cmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKS5qc1ZhbHVlKCk7Cit9CisKK0pTVmFsdWUgSlNJbnNw
ZWN0b3JCYWNrZW5kOjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPCAyKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3
cmFwcGVyID0gSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDAp
KTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisg
ICAgTm9kZSogbm9kZSA9IHRvTm9kZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7CisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGJvb2wgc2Vs
ZWN0SW5VSSA9IGFyZ3MuYXQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgIHJldHVybiBqc051bWJl
cihleGVjLCBpbXBsKCktPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSwgc2VsZWN0SW5VSSkp
OworfQorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorSlNWYWx1ZSBKU0luc3BlY3RvckJhY2tlbmQ6
OnNlbGVjdERhdGFiYXNlKEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
aWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAg
ICBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlciogd3JhcHBlciA9IEpTUXVhcmFudGluZWRPYmpl
Y3RXcmFwcGVyOjphc1dyYXBwZXIoYXJncy5hdCgwKSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IHRv
RGF0YWJhc2Uod3JhcHBlci0+dW53cmFwcGVkT2JqZWN0KCkpOworICAgIGlmIChkYXRhYmFzZSkK
KyAgICAgICAgaW1wbCgpLT5zZWxlY3REYXRhYmFzZShkYXRhYmFzZSk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKK0pTVmFs
dWUgSlNJbnNwZWN0b3JCYWNrZW5kOjpzZWxlY3RET01TdG9yYWdlKEV4ZWNTdGF0ZSosIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbXBsKCkt
Pmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpZiAoIWljKQorICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKworICAgIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0g
SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OmFzV3JhcHBlcihhcmdzLmF0KDApKTsKKyAgICBp
ZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgU3RvcmFn
ZSogc3RvcmFnZSA9IHRvU3RvcmFnZSh3cmFwcGVyLT51bndyYXBwZWRPYmplY3QoKSk7CisgICAg
aWYgKHN0b3JhZ2UpCisgICAgICAgIGltcGwoKS0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdlKTsK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdE9iamVjdFF1YXJh
bnRpbmUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNw
cAppbmRleCA4OTU1M2VmLi5mOTZmODllIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0T2JqZWN0UXVhcmFudGluZS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJKU05v
ZGUuaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgIlN0b3JhZ2UuaCIKIAogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAK
QEAgLTgwLDEwICs4MSwxMSBAQCBib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KERhdGFi
YXNlKiBkYXRhYmFzZSwgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iagogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCi1ib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KEZy
YW1lKiBmcmFtZSwgU3RvcmFnZSogc3RvcmFnZSwgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9i
amVjdCkKK2Jvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoU3RvcmFnZSogc3RvcmFnZSwg
U2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCkKIHsKLSAgICBBU1NFUlQoZnJhbWUpOwog
ICAgIEFTU0VSVChzdG9yYWdlKTsKKyAgICBGcmFtZSogZnJhbWUgPSBzdG9yYWdlLT5mcmFtZSgp
OworICAgIEFTU0VSVChmcmFtZSk7CiAKICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdG9KU0RPTVdpbmRvdyhmcmFtZSk7CiAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFs
T2JqZWN0LT5nbG9iYWxFeGVjKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdE9iamVjdFF1YXJhbnRpbmUuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0T2JqZWN0
UXVhcmFudGluZS5oCmluZGV4IGQ3MGFjZDcuLmRmNTIzNzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oCkBAIC0zNyw3ICszNyw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIERhdGFiYXNlOwogICAgIGNsYXNzIERPTVdpbmRvdzsK
LSAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFNjcmlwdE9iamVj
dDsKICAgICBjbGFzcyBTY3JpcHRWYWx1ZTsKQEAgLTQ5LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGJvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoRGF0YWJhc2UqIGRh
dGFiYXNlLCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVkT2JqZWN0KTsKICNlbmRpZgogI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKLSAgICBib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KEZy
YW1lKiBmcmFtZSwgU3RvcmFnZSogc3RvcmFnZSwgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9i
amVjdCk7CisgICAgYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChTdG9yYWdlKiBzdG9y
YWdlLCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVkT2JqZWN0KTsKICNlbmRpZgogICAgIGJvb2wg
Z2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoTm9kZSogbm9kZSwgU2NyaXB0T2JqZWN0JiBxdWFy
YW50aW5lZE9iamVjdCk7CiAgICAgYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChET01X
aW5kb3cqIGRvbVdpbmRvdywgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCmluZGV4IGQ0MjdjZWUuLjZlYWMxMDIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCkBAIC03NCw0ICs3NCwxMSBAQCBib29sIFNjcmlwdFZh
bHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdmFsdWUuZ2V0KCkuaXNVbmRl
ZmluZWQoKTsKIH0KIAorYm9vbCBTY3JpcHRWYWx1ZTo6aXNPYmplY3QoKSBjb25zdAoreworICAg
IGlmICghbV92YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3ZhbHVl
LmdldCgpLmlzT2JqZWN0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0VmFsdWUuaAppbmRleCAyMDljZTA2Li4xOWJiNjkzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRWYWx1ZS5oCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRXF1YWwo
U2NyaXB0U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYpIGNvbnN0OwogICAgIGJvb2wgaXNOdWxs
KCkgY29uc3Q7CiAgICAgYm9vbCBpc1VuZGVmaW5lZCgpIGNvbnN0OworICAgIGJvb2wgaXNPYmpl
Y3QoKSBjb25zdDsKICAgICBib29sIGhhc05vVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
ID09IEpTQzo6SlNWYWx1ZSgpOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcAppbmRleCAwNTNjZjY4Li5jOWYzNzliIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5jcHAKQEAgLTM4
LDYgKzM4LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0Lmgi
CiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJTdG9yYWdlLmgiCiAKICNpbmNs
dWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCkBAIC02MSwxMCArNjIsMTEg
QEAgYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChEYXRhYmFzZSogZGF0YWJhc2UsIFNj
cmlwdE9iamVjdCYgcXVhcmFudGluZWRPYmoKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
Z2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoRnJhbWUqIGZyYW1lLCBTdG9yYWdlKiBzdG9yYWdl
LCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVkT2JqZWN0KQorYm9vbCBnZXRRdWFyYW50aW5lZFNj
cmlwdE9iamVjdChTdG9yYWdlKiBzdG9yYWdlLCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVkT2Jq
ZWN0KQogewotICAgIEFTU0VSVChmcmFtZSk7CiAgICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIEZy
YW1lKiBmcmFtZSA9IHN0b3JhZ2UtPmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKIAogI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oCmluZGV4IDNiN2Nj
ZmYuLjcxMmRkOWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0
UXVhcmFudGluZS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFu
dGluZS5oCkBAIC00Miw3ICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNz
IERhdGFiYXNlOwogICAgIGNsYXNzIERPTVdpbmRvdzsKLSAgICBjbGFzcyBGcmFtZTsKICAgICBj
bGFzcyBOb2RlOwogICAgIGNsYXNzIFNjcmlwdE9iamVjdDsKICAgICBjbGFzcyBTY3JpcHRWYWx1
ZTsKQEAgLTUxLDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFNjcmlwdFZhbHVl
IHF1YXJhbnRpbmVWYWx1ZShTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJik7CiAKICAg
ICBib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KERhdGFiYXNlKiBkYXRhYmFzZSwgU2Ny
aXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCk7Ci0gICAgYm9vbCBnZXRRdWFyYW50aW5lZFNj
cmlwdE9iamVjdChGcmFtZSogZnJhbWUsIFN0b3JhZ2UqIHN0b3JhZ2UsIFNjcmlwdE9iamVjdCYg
cXVhcmFudGluZWRPYmplY3QpOworICAgIGJvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3Qo
U3RvcmFnZSogc3RvcmFnZSwgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCk7CiAgICAg
Ym9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChOb2RlKiBub2RlLCBTY3JpcHRPYmplY3Qm
IHF1YXJhbnRpbmVkT2JqZWN0KTsKICAgICBib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0
KERPTVdpbmRvdyogZG9tV2luZG93LCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVkT2JqZWN0KTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oCmluZGV4IDAwNDg1MWIuLmRkYzM1NzcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKQEAgLTExMCw3ICsxMTAsMTIgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPklzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIAor
CisgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1
ZS0+SXNPYmplY3QoKTsKKyAgICB9CisKICAgICBib29sIGhhc05vVmFsdWUoKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWUuSXNFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAppbmRleCA1NzliY2JhLi5mNTVmNGQ1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaApAQCAtNDA3LDgg
KzQwNywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0so
SW5zcGVjdG9yQmFja2VuZERlYnVnZ2VyRW5hYmxlZCk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soSW5zcGVjdG9yQmFja2VuZFBhdXNlT25FeGNlcHRpb25zKTsKICAgICAgICAgREVDTEFSRV9D
QUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kUHJvZmlsZXJFbmFibGVkKTsKKyAgICAgICAgREVDTEFS
RV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kTm9kZUZvcklkKTsKKyAgICAgICAgREVDTEFSRV9D
QUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kSWRGb3JOb2RlKTsKKyAgICAgICAgREVDTEFSRV9DQUxM
QkFDSyhJbnNwZWN0b3JCYWNrZW5kV3JhcE9iamVjdCk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soSW5zcGVjdG9yQmFja2VuZFVud3JhcE9iamVjdCk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soSW5zcGVjdG9yQmFja2VuZFB1c2hOb2RlUGF0aFRvRnJvbnRlbmQpOwogI2lmIEVOQUJMRShE
QVRBQkFTRSkKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5kRGF0YWJh
c2VUYWJsZU5hbWVzKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhJbnNwZWN0b3JCYWNrZW5k
U2VsZWN0RGF0YWJhc2UpOworI2VuZGlmCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRTZWxlY3RET01TdG9yYWdlKTsKICNl
bmRpZgogICAgICAgICBERUNMQVJFX0NBTExCQUNLKEluc3BlY3RvckJhY2tlbmRXcmFwQ2FsbGJh
Y2spOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3Rv
ckJhY2tlbmRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnNwZWN0
b3JCYWNrZW5kQ3VzdG9tLmNwcAppbmRleCAwZjYxZmQyLi4yYjU0YzFiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckJhY2tlbmRDdXN0b20uY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQmFja2VuZEN1c3RvbS5j
cHAKQEAgLTU3LDEzICs1Nyw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5k
SGlnaGxpZ2h0RE9NTm9kZSkKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBOb2RlKiBub2RlID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KGFyZ3NbMF0pKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci0KICAgICBJbnNwZWN0b3JCYWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFzc0luZGV4
OjpJTlNQRUNUT1JCQUNLRU5ELCBhcmdzLkhvbGRlcigpKTsKLSAgICBpbnNwZWN0b3JCYWNrZW5k
LT5oaWdobGlnaHQobm9kZSk7Ci0KKyAgICBpbnNwZWN0b3JCYWNrZW5kLT5oaWdobGlnaHQoYXJn
c1swXS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
fQogCkBAIC0yMjIsNCArMjE3LDEwMyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFj
a2VuZFdyYXBDYWxsYmFjaykKICAgICByZXR1cm4gYXJnc1swXTsKIH0KIAorQ0FMTEJBQ0tfRlVO
Q19ERUNMKEluc3BlY3RvckJhY2tlbmROb2RlRm9ySWQpCit7CisgICAgSU5DX1NUQVRTKCJJbnNw
ZWN0b3JCYWNrZW5kLm5vZGVGb3JJZCgpIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgSW5zcGVjdG9yQmFja2VuZCog
aW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PElu
c3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQkFDS0VORCwgYXJncy5Ib2xk
ZXIoKSk7CisgICAgCisgICAgTm9kZSogbm9kZSA9IGluc3BlY3RvckJhY2tlbmQtPm5vZGVGb3JJ
ZChhcmdzWzBdLT5Ub0ludDMyKCktPlZhbHVlKCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0g
aW5zcGVjdG9yQmFja2VuZC0+aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgIGlmICghaWMpCisg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PREUsIG5vZGUpOworfQorCitDQUxM
QkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQmFja2VuZElkRm9yTm9kZSkKK3sKKyAgICBJTkNfU1RB
VFMoIkluc3BlY3RvckJhY2tlbmQuaWRGb3JOb2RlKCkiKTsKKyAgICBpZiAoYXJncy5MZW5ndGgo
KSA8IDEpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBJbnNwZWN0b3JC
YWNrZW5kKiBpbnNwZWN0b3JCYWNrZW5kID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8SW5zcGVjdG9yQmFja2VuZD4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JCQUNLRU5ELCBh
cmdzLkhvbGRlcigpKTsKKyAgICBOb2RlKiBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0p
KTsKKyAgICBpZiAobm9kZSkKKyAgICAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbnNwZWN0
b3JCYWNrZW5kLT5pZEZvck5vZGUobm9kZSkpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kV3JhcE9iamVjdCkKK3sK
KyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tlbmQud3JhcE9iamVjdCgpIik7CisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6SU5TUEVD
VE9SQkFDS0VORCwgYXJncy5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIGluc3BlY3RvckJhY2tlbmQt
PndyYXBPYmplY3QoU2NyaXB0VmFsdWUoYXJnc1swXSkpLnY4VmFsdWUoKTsKK30KKworQ0FMTEJB
Q0tfRlVOQ19ERUNMKEluc3BlY3RvckJhY2tlbmRVbndyYXBPYmplY3QpCit7CisgICAgSU5DX1NU
QVRTKCJJbnNwZWN0b3JCYWNrZW5kLnVud3JhcE9iamVjdCgpIik7CisgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgSW5zcGVj
dG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQkFDS0VO
RCwgYXJncy5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIGluc3BlY3RvckJhY2tlbmQtPnVud3JhcE9i
amVjdCh0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pKS52OFZhbHVlKCk7Cit9
CisKK0NBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kUHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZCkKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tlbmQucHVzaE5vZGVQYXRoVG9G
cm9udGVuZCgpIik7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworCisgICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2Vu
ZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+
KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQkFDS0VORCwgYXJncy5Ib2xkZXIoKSk7CisgICAgTm9k
ZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgYm9vbCBzZWxlY3RJblVJ
ID0gYXJnc1sxXS0+VG9Cb29sZWFuKCktPlZhbHVlKCk7CisgICAgaWYgKG5vZGUpCisgICAgICAg
IHJldHVybiB2ODo6TnVtYmVyOjpOZXcoaW5zcGVjdG9yQmFja2VuZC0+cHVzaE5vZGVQYXRoVG9G
cm9udGVuZChub2RlLCBzZWxlY3RJblVJKSk7CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworfQorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3Rv
ckJhY2tlbmRTZWxlY3REYXRhYmFzZSkKK3sKKyAgICBJTkNfU1RBVFMoIkluc3BlY3RvckJhY2tl
bmQuc2VsZWN0RGF0YWJhc2UoKSIpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEluc3BlY3RvckJhY2tlbmQqIGluc3Bl
Y3RvckJhY2tlbmQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0
b3JCYWNrZW5kPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkJBQ0tFTkQsIGFyZ3MuSG9sZGVyKCkp
OworICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PERhdGFiYXNlPihWOENsYXNzSW5kZXg6OkRBVEFCQVNFLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKKyAgICBpZiAoZGF0YWJhc2UpCisgICAgICAgIGluc3Bl
Y3RvckJhY2tlbmQtPnNlbGVjdERhdGFiYXNlKGRhdGFiYXNlKTsKKworICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKK0NBTExC
QUNLX0ZVTkNfREVDTChJbnNwZWN0b3JCYWNrZW5kU2VsZWN0RE9NU3RvcmFnZSkKK3sKKyAgICBJ
TkNfU1RBVFMoIkluc3BlY3RvckJhY2tlbmQuc2VsZWN0RE9NU3RvcmFnZSgpIik7CisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPCAxKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgSW5zcGVjdG9yQmFja2VuZCogaW5zcGVjdG9yQmFja2VuZCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckJhY2tlbmQ+KFY4Q2xhc3NJbmRleDo6SU5TUEVD
VE9SQkFDS0VORCwgYXJncy5Ib2xkZXIoKSk7CisgICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFN0b3JhZ2U+KFY4Q2xhc3NJbmRleDo6U1RP
UkFHRSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgaWYgKHN0
b3JhZ2UpCisgICAgICAgIGluc3BlY3RvckJhY2tlbmQtPnNlbGVjdERPTVN0b3JhZ2Uoc3RvcmFn
ZSk7CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorI2VuZGlmCisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNz
YWdlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAppbmRleCBmOWQ4
NzA4Li5mMmZlMTA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2Fn
ZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCkBAIC01MCwy
OSArNTAsMTggQEAgQ29uc29sZU1lc3NhZ2U6OkNvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ug
cywgTWVzc2FnZVR5cGUgdCwgTWVzc2FnZUxldmVsIGwsIGMKIHsKIH0KIAotQ29uc29sZU1lc3Nh
Z2U6OkNvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZVR5cGUgdCwgTWVzc2Fn
ZUxldmVsIGwsIFNjcmlwdENhbGxTdGFjayogY2FsbFN0YWNrLCB1bnNpZ25lZCBnLCBib29sIHN0
b3JlVHJhY2UpCitDb25zb2xlTWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBz
LCBNZXNzYWdlVHlwZSB0LCBNZXNzYWdlTGV2ZWwgbCwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmlu
Zz4mIGZyYW1lcywgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVlPiYgd3JhcHBlZEFyZ3VtZW50cywg
dW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwgdW5zaWduZWQgZykKICAgICA6IG1fc291cmNl
KHMpCiAgICAgLCBtX3R5cGUodCkKICAgICAsIG1fbGV2ZWwobCkKLSAgICAsIG1fd3JhcHBlZEFy
Z3VtZW50cyhjYWxsU3RhY2stPmF0KDApLmFyZ3VtZW50Q291bnQoKSkKLSAgICAsIG1fZnJhbWVz
KHN0b3JlVHJhY2UgPyBjYWxsU3RhY2stPnNpemUoKSA6IDApCisgICAgLCBtX2ZyYW1lcyhmcmFt
ZXMpCisgICAgLCBtX3dyYXBwZWRBcmd1bWVudHMod3JhcHBlZEFyZ3VtZW50cykKKyAgICAsIG1f
bGluZShsaSkKKyAgICAsIG1fdXJsKHUpCiAgICAgLCBtX2dyb3VwTGV2ZWwoZykKICAgICAsIG1f
cmVwZWF0Q291bnQoMSkKIHsKLSAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RDYWxsZXIg
PSBjYWxsU3RhY2stPmF0KDApOwotICAgIG1fbGluZSA9IGxhc3RDYWxsZXIubGluZU51bWJlcigp
OwotICAgIG1fdXJsID0gbGFzdENhbGxlci5zb3VyY2VVUkwoKS5zdHJpbmcoKTsKLQotICAgIC8v
IEZJWE1FOiBGb3Igbm93LCBqdXN0IHN0b3JlIGZ1bmN0aW9uIG5hbWVzIGFzIHN0cmluZ3MuCi0g
ICAgLy8gQXMgU2NyaXB0Q2FsbFN0YWNrIHN0YXJ0IHN0b3JpbmcgbGluZSBudW1iZXIgYW5kIHNv
dXJjZSBVUkwgZm9yIGFsbAotICAgIC8vIGZyYW1lcywgcmVmYWN0b3IgdG8gdXNlIHRoYXQsIGFz
IHdlbGwuCi0gICAgaWYgKHN0b3JlVHJhY2UpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNhbGxTdGFjay0+c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2ZyYW1lc1tpXSA9
IGNhbGxTdGFjay0+YXQoaSkuZnVuY3Rpb25OYW1lKCk7Ci0gICAgfQogCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxhc3RDYWxsZXIuYXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAg
IG1fd3JhcHBlZEFyZ3VtZW50c1tpXSA9IHF1YXJhbnRpbmVWYWx1ZShjYWxsU3RhY2stPnN0YXRl
KCksIGxhc3RDYWxsZXIuYXJndW1lbnRBdChpKSk7CiB9CiAKIHZvaWQgQ29uc29sZU1lc3NhZ2U6
OmFkZFRvQ29uc29sZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuaAppbmRleCA5MTBhMDA3Li41YjE1NjBkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNv
bGVNZXNzYWdlLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIENvbnNvbGVNZXNzYWdlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYg
bSwgdW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwgdW5zaWduZWQgZyk7ICAgICAgICAKLSAg
ICAgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VM
ZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiwgdW5zaWduZWQgZywgYm9vbCBzdG9yZVRyYWNlID0gZmFs
c2UpOworICAgICAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwg
TWVzc2FnZUxldmVsLCBjb25zdCBWZWN0b3I8U2NyaXB0U3RyaW5nPiYgZnJhbWVzLCBjb25zdCBW
ZWN0b3I8U2NyaXB0VmFsdWU+JiB3cmFwcGVkQXJndW1lbnRzLCB1bnNpZ25lZCBsaSwgY29uc3Qg
U3RyaW5nJiB1LCB1bnNpZ25lZCBnKTsKIAogICAgICAgICB2b2lkIGFkZFRvQ29uc29sZShJbnNw
ZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOwogICAgICAgICB2b2lkIGluY3JlbWVudENvdW50KCkg
eyArK21fcmVwZWF0Q291bnQ7IH07CkBAIC01OSw4ICs1OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgTWVzc2FnZVR5cGUgbV90eXBlOwogICAgICAgICBNZXNzYWdlTGV2ZWwgbV9s
ZXZlbDsKICAgICAgICAgU3RyaW5nIG1fbWVzc2FnZTsKLSAgICAgICAgVmVjdG9yPFNjcmlwdFZh
bHVlPiBtX3dyYXBwZWRBcmd1bWVudHM7CiAgICAgICAgIFZlY3RvcjxTY3JpcHRTdHJpbmc+IG1f
ZnJhbWVzOworICAgICAgICBWZWN0b3I8U2NyaXB0VmFsdWU+IG1fd3JhcHBlZEFyZ3VtZW50czsK
ICAgICAgICAgdW5zaWduZWQgbV9saW5lOwogICAgICAgICBTdHJpbmcgbV91cmw7CiAgICAgICAg
IHVuc2lnbmVkIG1fZ3JvdXBMZXZlbDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5j
cHAKaW5kZXggMWViMTBlOC4uODcwZDk0ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5jcHAKQEAgLTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQmFja2VuZC5oIgogCisjaWYgRU5BQkxFKERBVEFCQVNFKQorI2luY2x1ZGUg
IkRhdGFiYXNlLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBAIC0zNyw4ICs0MSwxMyBAQAogI2lu
Y2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKIAorI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKKyNpbmNsdWRlICJTdG9yYWdlLmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogI2luY2x1ZGUgIkphdmFTY3JpcHRDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJKYXZhU2NyaXB0RGVidWdTZXJ2ZXIuaCIKQEAgLTEzOSwxMCArMTQ4LDEwIEBAIGJv
b2wgSW5zcGVjdG9yQmFja2VuZDo6YWRkU291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBTdHJpbmcmIHNvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQmFja2VuZDo6Y2xlYXJNZXNzYWdlcygpCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNsZWFy
TWVzc2FnZXMoYm9vbCBjbGVhclVJKQogewogICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIp
Ci0gICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+Y2xlYXJDb25zb2xlTWVzc2FnZXMoKTsK
KyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5jbGVhckNvbnNvbGVNZXNzYWdlcyhjbGVh
clVJKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjp0b2dnbGVOb2RlU2VhcmNoKCkKQEAg
LTE4MiwxMCArMTkxLDEwIEBAIGJvb2wgSW5zcGVjdG9yQmFja2VuZDo6c2VhcmNoaW5nRm9yTm9k
ZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmQ6OmxvYWRl
ZChib29sIGVuYWJsZURPTUFnZW50KQordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpsb2FkZWQoKQog
ewogICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCi0gICAgICAgIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+c2NyaXB0T2JqZWN0UmVhZHkoZW5hYmxlRE9NQWdlbnQpOworICAgICAgICBtX2lu
c3BlY3RvckNvbnRyb2xsZXItPnNjcmlwdE9iamVjdFJlYWR5KCk7CiB9CiAKIHZvaWQgSW5zcGVj
dG9yQmFja2VuZDo6ZW5hYmxlUmVzb3VyY2VUcmFja2luZyhib29sIGFsd2F5cykKQEAgLTM3OSwx
MCArMzg4LDgxIEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0VGV4dE5vZGVWYWx1ZShsb25n
IGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluCiAgICAgICAgIG1faW5zcGVjdG9y
Q29udHJvbGxlci0+ZG9tQWdlbnQoKS0+c2V0VGV4dE5vZGVWYWx1ZShjYWxsSWQsIGVsZW1lbnRJ
ZCwgdmFsdWUpOwogfQogCi12b2lkIEluc3BlY3RvckJhY2tlbmQ6OmhpZ2hsaWdodChOb2RlKiBu
b2RlKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpoaWdobGlnaHQobG9uZyBub2RlSWQpCit7Cisg
ICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikgeworICAgICAgICBOb2RlKiBub2RlID0gbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5kb21BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICAg
ICAgaWYgKG5vZGUpCisgICAgICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPmhpZ2hsaWdo
dChub2RlKTsKKyAgICB9Cit9CisKK05vZGUqIEluc3BlY3RvckJhY2tlbmQ6Om5vZGVGb3JJZChs
b25nIG5vZGVJZCkKIHsKICAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICBt
X2luc3BlY3RvckNvbnRyb2xsZXItPmhpZ2hsaWdodChub2RlKTsKKyAgICAgICAgcmV0dXJuIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+bm9kZUZvcklkKG5vZGVJZCk7CisgICAg
cmV0dXJuIDA7CiB9CiAKK2xvbmcgSW5zcGVjdG9yQmFja2VuZDo6aWRGb3JOb2RlKE5vZGUqIG5v
ZGUpCit7CisgICAgaWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1f
aW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKS0+aWRGb3JOb2RlKG5vZGUpOworICAgIHJl
dHVybiAtMTsKK30KKworU2NyaXB0VmFsdWUgSW5zcGVjdG9yQmFja2VuZDo6d3JhcE9iamVjdChj
b25zdCBTY3JpcHRWYWx1ZSYgb2JqZWN0KQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xs
ZXIpCisgICAgICAgIHJldHVybiBtX2luc3BlY3RvckNvbnRyb2xsZXItPndyYXBPYmplY3Qob2Jq
ZWN0KTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKK30KKworU2NyaXB0VmFsdWUgSW5zcGVj
dG9yQmFja2VuZDo6dW53cmFwT2JqZWN0KGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCit7CisgICAg
aWYgKG1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29u
dHJvbGxlci0+dW53cmFwT2JqZWN0KG9iamVjdElkKTsKKyAgICByZXR1cm4gU2NyaXB0VmFsdWUo
KTsKK30KKworbG9uZyBJbnNwZWN0b3JCYWNrZW5kOjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5v
ZGUqIG5vZGUsIGJvb2wgc2VsZWN0SW5VSSkKK3sKKyAgICBpZiAoIW1faW5zcGVjdG9yQ29udHJv
bGxlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX2luc3BlY3RvckNvbnRyb2xsZXIt
Pm1fZG9tQWdlbnQgfHwgIW1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9mcm9udGVuZCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgbG9uZyBpZCA9IG1faW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21B
Z2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKTsKKyAgICBpZiAoc2VsZWN0SW5VSSkK
KyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kLT51cGRhdGVGb2N1c2Vk
Tm9kZShpZCk7CisgICAgcmV0dXJuIGlkOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmFk
ZE5vZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKQoreworICAgIGlmICht
X2luc3BlY3RvckNvbnRyb2xsZXIgJiYgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5k
KQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQtPmFkZE5vZGVzVG9T
ZWFyY2hSZXN1bHQobm9kZUlkcyk7Cit9CisKKyNpZiBFTkFCTEUoREFUQUJBU0UpCit2b2lkIElu
c3BlY3RvckJhY2tlbmQ6OnNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAg
ICBpZiAoIW1faW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kKQorICAgICAgICByZXR1cm47CisgICAg
bV9pbnNwZWN0b3JDb250cm9sbGVyLT5tX2Zyb250ZW5kLT5zZWxlY3REYXRhYmFzZShkYXRhYmFz
ZSk7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShET01fU1RPUkFHRSkKK3ZvaWQgSW5zcGVjdG9y
QmFja2VuZDo6c2VsZWN0RE9NU3RvcmFnZShTdG9yYWdlKiBzdG9yYWdlKQoreworICAgIGlmICgh
bV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPm1fZnJvbnRlbmQtPnNlbGVjdERPTVN0b3JhZ2Uoc3RvcmFnZSk7Cit9
CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZC5oCmluZGV4IGRhYTE2YjQuLjc2Mzk5ODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmgKQEAgLTM4LDEwICszOCwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDYWNoZWRSZXNvdXJjZTsKK2NsYXNzIERhdGFiYXNlOwogY2xhc3MgSW5zcGVjdG9yQ2xp
ZW50OwogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1l
OwogY2xhc3MgTm9kZTsKK2NsYXNzIFN0b3JhZ2U7CiAKIGNsYXNzIEluc3BlY3RvckJhY2tlbmQg
OiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNrZW5kPgogewpAQCAtNjksNyArNzEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUobG9uZyBpZGVudGlm
aWVyLCBOb2RlKiBmcmFtZSk7CiAgICAgYm9vbCBhZGRTb3VyY2VUb0ZyYW1lKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlLCBOb2RlKiBmcmFtZSk7CiAKLSAgICB2
b2lkIGNsZWFyTWVzc2FnZXMoKTsKKyAgICB2b2lkIGNsZWFyTWVzc2FnZXMoYm9vbCBjbGVhclVJ
KTsKIAogICAgIHZvaWQgdG9nZ2xlTm9kZVNlYXJjaCgpOwogCkBAIC04Miw3ICs4NCw3IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgc2VhcmNoaW5nRm9yTm9kZSgpOwogCi0gICAgdm9pZCBsb2FkZWQo
Ym9vbCBlbmFibGVET01BZ2VudCk7CisgICAgdm9pZCBsb2FkZWQoKTsKIAogICAgIHZvaWQgZW5h
YmxlUmVzb3VyY2VUcmFja2luZyhib29sIGFsd2F5cyk7CiAgICAgdm9pZCBkaXNhYmxlUmVzb3Vy
Y2VUcmFja2luZyhib29sIGFsd2F5cyk7CkBAIC0xMjksNyArMTMxLDE5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFRleHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKIAogICAgIC8vIEdlbmVyaWMgY29kZSBjYWxsZWQgZnJvbSBjdXN0
b20gaW1wbGVtZW50YXRpb25zLgotICAgIHZvaWQgaGlnaGxpZ2h0KE5vZGUqIG5vZGUpOworICAg
IHZvaWQgaGlnaGxpZ2h0KGxvbmcgbm9kZUlkKTsKKyAgICBOb2RlKiBub2RlRm9ySWQobG9uZyBu
b2RlSWQpOworICAgIGxvbmcgaWRGb3JOb2RlKE5vZGUqIG5vZGUpOworICAgIFNjcmlwdFZhbHVl
IHdyYXBPYmplY3QoY29uc3QgU2NyaXB0VmFsdWUmIG9iamVjdCk7CisgICAgU2NyaXB0VmFsdWUg
dW53cmFwT2JqZWN0KGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpOworICAgIGxvbmcgcHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChOb2RlKiBub2RlLCBib29sIHNlbGVjdEluVUkpOworICAgIHZvaWQgYWRk
Tm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMpOworI2lmIEVOQUJMRShE
QVRBQkFTRSkKKyAgICB2b2lkIHNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSk7Cisj
ZW5kaWYKKyNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCisgICAgdm9pZCBzZWxlY3RET01TdG9yYWdl
KFN0b3JhZ2UqIHN0b3JhZ2UpOworI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQmFj
a2VuZChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyLCBJbnNwZWN0b3JD
bGllbnQqIGNsaWVudCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsCmluZGV4
IDc2OWEyMDguLjkyYmVmZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmQuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRs
CkBAIC0zNSwxNCArMzUsMTQgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBHZW5lcmF0ZUNvbnN0
cnVjdG9yCiAgICAgXSBJbnNwZWN0b3JCYWNrZW5kIHsKICAgICAgICAgdm9pZCBoaWRlRE9NTm9k
ZUhpZ2hsaWdodCgpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGhpZ2hsaWdodERPTU5vZGUoaW4g
Tm9kZSBub2RlKTsKLSAgICAgICAgdm9pZCBsb2FkZWQoaW4gYm9vbGVhbiBlbmFibGVET01BZ2Vu
dCk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgaGlnaGxpZ2h0RE9NTm9kZShpbiBsb25nIGVsZW1l
bnRJZCk7CisgICAgICAgIHZvaWQgbG9hZGVkKCk7CiAgICAgICAgIHZvaWQgd2luZG93VW5sb2Fk
aW5nKCk7CiAgICAgICAgIHZvaWQgYXR0YWNoKCk7CiAgICAgICAgIHZvaWQgZGV0YWNoKCk7CiAK
ICAgICAgICAgdm9pZCBjbG9zZVdpbmRvdygpOwotICAgICAgICB2b2lkIGNsZWFyTWVzc2FnZXMo
KTsKKyAgICAgICAgdm9pZCBjbGVhck1lc3NhZ2VzKGluIGJvb2xlYW4gY2xlYXJVSSk7CiAgICAg
ICAgIHZvaWQgdG9nZ2xlTm9kZVNlYXJjaCgpOwogCiAgICAgICAgIGJvb2xlYW4gaXNXaW5kb3dW
aXNpYmxlKCk7CkBAIC0xMDMsNSArMTAzLDE5IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgdm9p
ZCBzZXRBdHRyaWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgZWxlbWVudElkLCBpbiBET01T
dHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZhbHVlKTsKICAgICAgICAgdm9pZCByZW1vdmVBdHRy
aWJ1dGUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgZWxlbWVudElkLCBpbiBET01TdHJpbmcgbmFt
ZSk7CiAgICAgICAgIHZvaWQgc2V0VGV4dE5vZGVWYWx1ZShpbiBsb25nIGNhbGxJZCwgaW4gbG9u
ZyBlbGVtZW50SWQsIGluIERPTVN0cmluZyB2YWx1ZSk7CisKKyAgICAgICAgLy8gQ2FsbGVkIGZy
b20gSW5qZWN0ZWRTY3JpcHQuCisgICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBub2RlRm9ySWQo
aW4gbG9uZyBub2RlSWQpOworICAgICAgICBbQ3VzdG9tXSBsb25nIGlkRm9yTm9kZShpbiBET01P
YmplY3Qgbm9kZSk7CisgICAgICAgIFtDdXN0b21dIGxvbmcgd3JhcE9iamVjdChpbiBET01PYmpl
Y3Qgb2JqZWN0KTsKKyAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IHVud3JhcE9iamVjdChpbiBs
b25nIG9iamVjdElkKTsKKyAgICAgICAgW0N1c3RvbV0gaW50IHB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQoaW4gRE9NT2JqZWN0IG5vZGUsIGluIGJvb2xlYW4gc2VsZWN0SW5VSSk7CisgICAgICAgIHZv
aWQgYWRkTm9kZXNUb1NlYXJjaFJlc3VsdChpbiBET01TdHJpbmcgbm9kZUlkcyk7CisjaWYgZGVm
aW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQorICAgICAgICBbQ3VzdG9t
XSB2b2lkIHNlbGVjdERhdGFiYXNlKGluIERPTU9iamVjdCBkYXRhYmFzZSk7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKEVOQUJMRV9ET01fU1RPUkFHRSkgJiYgRU5BQkxFX0RPTV9TVE9SQUdFCisgICAg
ICAgIFtDdXN0b21dIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShpbiBET01PYmplY3Qgc3RvcmFnZSk7
CisjZW5kaWYKICAgICB9OwotIH0KK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKaW5kZXggYzMzNTFlNS4uYjVkYWJlNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q2FsbFN0YWNrLmgiCisjaW5jbHVkZSAiU2NyaXB0RnVuY3Rpb25DYWxsLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKQEAgLTEyNSw2ICsxMjYsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVy
OjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50
KQogICAgICwgbV9yZXNvdXJjZVRyYWNraW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fcmVzb3Vy
Y2VUcmFja2luZ1NldHRpbmdzTG9hZGVkKGZhbHNlKQogICAgICwgbV9pbnNwZWN0b3JCYWNrZW5k
KEluc3BlY3RvckJhY2tlbmQ6OmNyZWF0ZSh0aGlzLCBjbGllbnQpKQorICAgICwgbV9sYXN0Qm91
bmRPYmplY3RJZCgxKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICwgbV9k
ZWJ1Z2dlckVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duKGZh
bHNlKQpAQCAtMjcwLDcgKzI3Miw4IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Zm9jdXNO
b2RlKCkKICAgICBBU1NFUlQobV9mcm9udGVuZCk7CiAgICAgQVNTRVJUKG1fbm9kZVRvRm9jdXMp
OwogCi0gICAgbV9mcm9udGVuZC0+dXBkYXRlRm9jdXNlZE5vZGUobV9ub2RlVG9Gb2N1cy5nZXQo
KSk7CisgICAgbG9uZyBpZCA9IG1fZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobV9u
b2RlVG9Gb2N1cy5nZXQoKSk7CisgICAgbV9mcm9udGVuZC0+dXBkYXRlRm9jdXNlZE5vZGUoaWQp
OwogICAgIG1fbm9kZVRvRm9jdXMgPSAwOwogfQogCkBAIC0zNTAsNyArMzUzLDI0IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZVR5cGUKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYWRkQ29uc29sZU1lc3NhZ2UoY2FsbFN0YWNrLT5zdGF0ZSgpLCBuZXcgQ29uc29sZU1l
c3NhZ2Uoc291cmNlLCB0eXBlLCBsZXZlbCwgY2FsbFN0YWNrLCBtX2dyb3VwTGV2ZWwsIHR5cGUg
PT0gVHJhY2VNZXNzYWdlVHlwZSkpOworICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gd3JhcHBlZEFy
Z3VtZW50cyhjYWxsU3RhY2stPmF0KDApLmFyZ3VtZW50Q291bnQoKSk7CisgICAgYm9vbCBzdG9y
ZVRyYWNlID0gdHlwZSA9PSBUcmFjZU1lc3NhZ2VUeXBlOworICAgIFZlY3RvcjxTY3JpcHRTdHJp
bmc+IGZyYW1lcyhzdG9yZVRyYWNlID8gY2FsbFN0YWNrLT5zaXplKCkgOiAwKTsKKworICAgIGNv
bnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENhbGxlciA9IGNhbGxTdGFjay0+YXQoMCk7CisKKyAg
ICAvLyBGSVhNRTogRm9yIG5vdywganVzdCBzdG9yZSBmdW5jdGlvbiBuYW1lcyBhcyBzdHJpbmdz
LgorICAgIC8vIEFzIFNjcmlwdENhbGxTdGFjayBzdGFydCBzdG9yaW5nIGxpbmUgbnVtYmVyIGFu
ZCBzb3VyY2UgVVJMIGZvciBhbGwKKyAgICAvLyBmcmFtZXMsIHJlZmFjdG9yIHRvIHVzZSB0aGF0
LCBhcyB3ZWxsLgorICAgIGlmIChzdG9yZVRyYWNlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjYWxsU3RhY2stPnNpemUoKTsgKytpKQorICAgICAgICAgICAgZnJhbWVzW2ld
ID0gY2FsbFN0YWNrLT5hdChpKS5mdW5jdGlvbk5hbWUoKTsKKyAgICB9CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGFzdENhbGxlci5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAg
ICAgd3JhcHBlZEFyZ3VtZW50c1tpXSA9IHdyYXBPYmplY3QobGFzdENhbGxlci5hcmd1bWVudEF0
KGkpKTsKKworICAgIGFkZENvbnNvbGVNZXNzYWdlKGNhbGxTdGFjay0+c3RhdGUoKSwgbmV3IENv
bnNvbGVNZXNzYWdlKHNvdXJjZSwgdHlwZSwgbGV2ZWwsIGZyYW1lcywgd3JhcHBlZEFyZ3VtZW50
cywgbGFzdENhbGxlci5saW5lTnVtYmVyKCksIGxhc3RDYWxsZXIuc291cmNlVVJMKCkuc3RyaW5n
KCksIG1fZ3JvdXBMZXZlbCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZE1l
c3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VUeXBlIHR5cGUsIE1l
c3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQpAQCAtMzc4LDE5ICszOTgsMjIgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjphZGRDb25zb2xlTWVzc2FnZShTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIENvbnNvbGVNZXMKICAgICAgICAgbV9wcmV2aW91c01lc3NhZ2UtPmFkZFRvQ29uc29s
ZShtX2Zyb250ZW5kLmdldCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVh
ckNvbnNvbGVNZXNzYWdlcygpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNsZWFyQ29uc29s
ZU1lc3NhZ2VzKGJvb2wgY2xlYXJVSSkKIHsKICAgICBkZWxldGVBbGxWYWx1ZXMobV9jb25zb2xl
TWVzc2FnZXMpOwogICAgIG1fY29uc29sZU1lc3NhZ2VzLmNsZWFyKCk7CiAgICAgbV9wcmV2aW91
c01lc3NhZ2UgPSAwOwogICAgIG1fZ3JvdXBMZXZlbCA9IDA7CisgICAgbV9pZFRvQ29uc29sZU9i
amVjdC5jbGVhcigpOworICAgIGlmIChjbGVhclVJICYmIG1fZnJvbnRlbmQpCisgICAgICAgIG1f
ZnJvbnRlbmQtPmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RhcnRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgU2NyaXB0Q2FsbFN0YWNr
KiBjYWxsU3RhY2spCiB7CiAgICAgKyttX2dyb3VwTGV2ZWw7CiAKLSAgICBhZGRDb25zb2xlTWVz
c2FnZShjYWxsU3RhY2stPnN0YXRlKCksIG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIFN0YXJ0
R3JvdXBNZXNzYWdlVHlwZSwgTG9nTWVzc2FnZUxldmVsLCBjYWxsU3RhY2ssIG1fZ3JvdXBMZXZl
bCkpOworICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUoc291cmNlLCBTdGFydEdyb3VwTWVzc2FnZVR5
cGUsIExvZ01lc3NhZ2VMZXZlbCwgY2FsbFN0YWNrKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjplbmRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgdW5zaWduZWQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCkBAIC01MTEsNyArNTM0LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjp3aW5kb3dTY3JpcHRPYmplY3RBdmFpbGFibGUoKQogICAgIFNjcmlw
dEdsb2JhbE9iamVjdDo6c2V0KG1fc2NyaXB0U3RhdGUsICJJbnNwZWN0b3JDb250cm9sbGVyIiwg
bV9pbnNwZWN0b3JCYWNrZW5kLmdldCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzY3JpcHRPYmplY3RSZWFkeShib29sIGVuYWJsZURPTUFnZW50KQordm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeSgpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0U3Rh
dGUpOwogICAgIGlmICghbV9zY3JpcHRTdGF0ZSkKQEAgLTUyMSw5ICs1NDQsMTAgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRPYmplY3RSZWFkeShib29sIGVuYWJsZURPTUFnZW50
KQogICAgIGlmICghU2NyaXB0R2xvYmFsT2JqZWN0OjpnZXQobV9zY3JpcHRTdGF0ZSwgIldlYklu
c3BlY3RvciIsIHdlYkluc3BlY3Rvck9iaikpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRGcm9u
dGVuZFByb3h5T2JqZWN0KG1fc2NyaXB0U3RhdGUsIHdlYkluc3BlY3Rvck9iaik7Ci0gICAgaWYg
KGVuYWJsZURPTUFnZW50KQotICAgICAgICBtX2RvbUFnZW50ID0gbmV3IEluc3BlY3RvckRPTUFn
ZW50KG1fZnJvbnRlbmQuZ2V0KCkpOwogCisgICAgaWYgKCFTY3JpcHRHbG9iYWxPYmplY3Q6Omdl
dChtX3NjcmlwdFN0YXRlLCAiSW5qZWN0ZWRTY3JpcHQiLCBtX2luamVjdGVkU2NyaXB0T2JqKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQog
ICAgIFNldHRpbmcgZGVidWdnZXJFbmFibGVkID0gc2V0dGluZyhkZWJ1Z2dlckVuYWJsZWRTZXR0
aW5nTmFtZSk7CiAgICAgaWYgKGRlYnVnZ2VyRW5hYmxlZC50eXBlKCkgPT0gU2V0dGluZzo6Qm9v
bGVhblR5cGUgJiYgZGVidWdnZXJFbmFibGVkLmJvb2xlYW5WYWx1ZSgpKQpAQCAtNTQyLDYgKzU2
Niw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2NyaXB0T2JqZWN0UmVhZHkoYm9vbCBl
bmFibGVET01BZ2VudCkKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RnJvbnRlbmRQcm94
eU9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIFNjcmlwdE9iamVjdCB3ZWJJbnNwZWN0
b3JPYmopCiB7CiAgICAgbV9mcm9udGVuZC5zZXQobmV3IEluc3BlY3RvckZyb250ZW5kKHNjcmlw
dFN0YXRlLCB3ZWJJbnNwZWN0b3JPYmopKTsKKyAgICBtX2RvbUFnZW50ID0gbmV3IEluc3BlY3Rv
ckRPTUFnZW50KG1fZnJvbnRlbmQuZ2V0KCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnNob3coKQpAQCAtNTk1LDYgKzYyMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
Y2xvc2UoKQogICAgIGNsb3NlV2luZG93KCk7CiAKICAgICBtX2Zyb250ZW5kLnNldCgwKTsKKyAg
ICBtX2luamVjdGVkU2NyaXB0T2JqID0gU2NyaXB0T2JqZWN0KCk7CiAgICAgaWYgKG1fZG9tQWdl
bnQpIHsKICAgICAgICAgbV9kb21BZ2VudC0+c2V0RG9jdW1lbnQoMCk7CiAgICAgICAgIG1fZG9t
QWdlbnQgPSAwOwpAQCAtNzA2LDcgKzczMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6
ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIGlmIChsb2FkZXItPmZy
YW1lKCkgPT0gbV9pbnNwZWN0ZWRQYWdlLT5tYWluRnJhbWUoKSkgewogICAgICAgICBtX2NsaWVu
dC0+aW5zcGVjdGVkVVJMQ2hhbmdlZChsb2FkZXItPnVybCgpLnN0cmluZygpKTsKIAotICAgICAg
ICBjbGVhckNvbnNvbGVNZXNzYWdlcygpOworICAgICAgICBjbGVhckNvbnNvbGVNZXNzYWdlcyhm
YWxzZSk7CiAKICAgICAgICAgbV90aW1lcy5jbGVhcigpOwogICAgICAgICBtX2NvdW50cy5jbGVh
cigpOwpAQCAtMTQ3OCw0ICsxNTA0LDI4IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6OlNwZWNpYWxQ
YW5lbHMgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3BlY2lhbFBhbmVsRm9ySlNOYW1lKGNvCiAgICAg
ICAgIHJldHVybiBFbGVtZW50c1BhbmVsOwogfQogCitTY3JpcHRWYWx1ZSBJbnNwZWN0b3JDb250
cm9sbGVyOjp3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiBvYmplY3QpCit7CisgICAgaWYg
KG9iamVjdC5pc09iamVjdCgpKSB7CisgICAgICAgIGxvbmcgaWQgPSBtX2xhc3RCb3VuZE9iamVj
dElkKys7CisgICAgICAgIFN0cmluZyBvYmplY3RJZCA9IFN0cmluZzo6Zm9ybWF0KCJvYmplY3Qj
JWxkIiwgaWQpOworICAgICAgICBtX2lkVG9Db25zb2xlT2JqZWN0LnNldChvYmplY3RJZCwgb2Jq
ZWN0KTsKKworICAgICAgICBTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24obV9zY3JpcHRTdGF0
ZSwgbV9pbmplY3RlZFNjcmlwdE9iaiwgIl9jcmVhdGVQcm94eU9iamVjdCIpOworICAgICAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3QpOworICAgICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChvYmplY3RJZCk7CisgICAgICAgIFNjcmlwdFZhbHVlIHdyYXBwZXIgPSBmdW5jdGlv
bi5jYWxsKCk7CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIH0KKyAgICByZXR1cm4gb2Jq
ZWN0OworfQorCitTY3JpcHRWYWx1ZSBJbnNwZWN0b3JDb250cm9sbGVyOjp1bndyYXBPYmplY3Qo
Y29uc3QgU3RyaW5nJiBvYmplY3RJZCkKK3sKKyAgICBIYXNoTWFwPFN0cmluZywgU2NyaXB0VmFs
dWU+OjppdGVyYXRvciBpdCA9IG1faWRUb0NvbnNvbGVPYmplY3QuZmluZChvYmplY3RJZCk7Cisg
ICAgaWYgKGl0ICE9IG1faWRUb0NvbnNvbGVPYmplY3QuZW5kKCkpCisgICAgICAgIHJldHVybiBp
dC0+c2Vjb25kOworICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggMDVk
OTY1Mi4uYmMxMmQzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApA
QCAtMzEsNyArMzEsOSBAQAogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0
U3RhdGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2gu
aCIKICNpbmNsdWRlICJUaW1lci5oIgogCkBAIC02Miw3ICs2NCw2IEBAIGNsYXNzIEluc3BlY3Rv
ckNsaWVudDsKIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmQ7CiBjbGFzcyBKYXZhU2NyaXB0Q2FsbEZyYW1lOwotY2xhc3MgU3RvcmFnZUFyZWE7CiBjbGFz
cyBLVVJMOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7CkBAIC03MCw5ICs3MSw5IEBAIHN0cnVj
dCBSZXNvdXJjZVJlcXVlc3Q7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgUmVzb3Vy
Y2VFcnJvcjsKIGNsYXNzIFNjcmlwdENhbGxTdGFjazsKLWNsYXNzIFNjcmlwdE9iamVjdDsKIGNs
YXNzIFNjcmlwdFN0cmluZzsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKK2NsYXNzIFN0b3JhZ2VBcmVh
OwogCiBjbGFzcyBDb25zb2xlTWVzc2FnZTsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3Vy
Y2U7CkBAIC0xODIsNyArMTgzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRNZXNzYWdlVG9D
b25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIFNjcmlwdENh
bGxTdGFjayopOwogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBN
ZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOwotICAgIHZvaWQgY2xlYXJDb25z
b2xlTWVzc2FnZXMoKTsKKyAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKGJvb2wgY2xlYXJV
SSA9IGZhbHNlKTsKICAgICBjb25zdCBWZWN0b3I8Q29uc29sZU1lc3NhZ2UqPiYgY29uc29sZU1l
c3NhZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zb2xlTWVzc2FnZXM7IH0KIAogICAgIHZvaWQg
YXR0YWNoV2luZG93KCk7CkBAIC0yNzIsMTMgKzI3MywxNSBAQCBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogIAogICAgIC8vIEZvbGxvd2luZyBhcmUgdXNlZCBm
cm9tIEluc3BlY3RvckJhY2tlbmQgYW5kIGludGVybmFsbHkuCi0gICAgdm9pZCBzY3JpcHRPYmpl
Y3RSZWFkeShib29sIGVuYWJsZURPTUFnZW50KTsKKyAgICB2b2lkIHNjcmlwdE9iamVjdFJlYWR5
KCk7CiAgICAgdm9pZCBtb3ZlV2luZG93QnkoZmxvYXQgeCwgZmxvYXQgeSkgY29uc3Q7CiAgICAg
dm9pZCBzZXRBdHRhY2hlZFdpbmRvdyhib29sKTsKICAgICB2b2lkIHNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCk7CiAgICAgdm9pZCBzdG9yZUxhc3RBY3RpdmVQYW5lbChj
b25zdCBTdHJpbmcmIHBhbmVsTmFtZSk7CiAgICAgdm9pZCBjbG9zZVdpbmRvdygpOwogICAgIElu
c3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCgpIHsgcmV0dXJuIG1fZG9tQWdlbnQuZ2V0KCk7IH0K
KyAgICBTY3JpcHRWYWx1ZSB3cmFwT2JqZWN0KGNvbnN0IFNjcmlwdFZhbHVlJiBvYmplY3QpOwor
ICAgIFNjcmlwdFZhbHVlIHVud3JhcE9iamVjdChjb25zdCBTdHJpbmcmIG9iamVjdElkKTsKIAog
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIHZvaWQgc3RhcnRVc2VySW5pdGlh
dGVkUHJvZmlsaW5nU29vbigpOwpAQCAtMzA3LDYgKzMxMCw3IEBAIHByaXZhdGU6CiAgICAgSW5z
cGVjdG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1f
ZnJvbnRlbmQ7CiAgICAgUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBtX2RvbUFnZW50OworICAg
IFNjcmlwdE9iamVjdCBtX2luamVjdGVkU2NyaXB0T2JqOwogICAgIFBhZ2UqIG1fcGFnZTsKICAg
ICBSZWZQdHI8Tm9kZT4gbV9ub2RlVG9Gb2N1czsKICAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3Vy
Y2U+IG1fbWFpblJlc291cmNlOwpAQCAtMzMzLDYgKzMzNyw4IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3Jlc291cmNlVHJhY2tpbmdFbmFibGVkOwogICAgIGJvb2wgbV9yZXNvdXJjZVRyYWNraW5n
U2V0dGluZ3NMb2FkZWQ7CiAgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmQ+IG1faW5zcGVjdG9y
QmFja2VuZDsKKyAgICBIYXNoTWFwPFN0cmluZywgU2NyaXB0VmFsdWU+IG1faWRUb0NvbnNvbGVP
YmplY3Q7CisgICAgbG9uZyBtX2xhc3RCb3VuZE9iamVjdElkOwogI2lmIEVOQUJMRShKQVZBU0NS
SVBUX0RFQlVHR0VSKQogICAgIGJvb2wgbV9kZWJ1Z2dlckVuYWJsZWQ7CiAgICAgYm9vbCBtX2F0
dGFjaERlYnVnZ2VyV2hlblNob3duOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCmluZGV4IGYyMjIyMzkuLjU1MWNhYTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTIyOSw2ICsyMjksOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpk
aXNjYXJkQmluZGluZ3MoKQogCiBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGxv
bmcgaWQpCiB7CisgICAgaWYgKCFpZCkKKyAgICAgICAgcmV0dXJuIG1haW5GcmFtZURvY3VtZW50
KCk7CisKICAgICBIYXNoTWFwPGxvbmcsIE5vZGUqPjo6aXRlcmF0b3IgaXQgPSBtX2lkVG9Ob2Rl
LmZpbmQoaWQpOwogICAgIGlmIChpdCAhPSBtX2lkVG9Ob2RlLmVuZCgpKQogICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2UuY3BwCmluZGV4IDAzZGI2NDkuLjFlNTY3NDIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmNwcApAQCAtNjQsNyArNjQs
NyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6YmluZChJbnNwZWN0b3JGcm9u
dGVuZCogZnJvbnRlbmQpCiAKICAgICBTY3JpcHRPYmplY3QganNvbk9iamVjdCA9IGZyb250ZW5k
LT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICBTY3JpcHRPYmplY3QgZG9tU3RvcmFnZTsKLSAgICBp
ZiAoIWdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KG1fZnJhbWUuZ2V0KCksIG1fZG9tU3RvcmFn
ZS5nZXQoKSwgZG9tU3RvcmFnZSkpCisgICAgaWYgKCFnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVj
dChtX2RvbVN0b3JhZ2UuZ2V0KCksIGRvbVN0b3JhZ2UpKQogICAgICAgICByZXR1cm47CiAgICAg
anNvbk9iamVjdC5zZXQoImRvbVN0b3JhZ2UiLCBkb21TdG9yYWdlKTsKICAgICBqc29uT2JqZWN0
LnNldCgiaG9zdCIsIG1fZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmhvc3Qo
KSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5kZXggYWY2NWZiNC4u
ZjhhN2QxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcApAQCAtODUs
NiArODUsMTEgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6YWRkTWVzc2FnZVRvQ29uc29sZShj
b25zdCBTY3JpcHRPYmplY3QmIG1lc3NhZ2VPYmosIGNvbnMKICAgICBmdW5jdGlvbi0+Y2FsbCgp
OwogfQogCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCit7
CisgICAgY2FsbFNpbXBsZUZ1bmN0aW9uKCJjbGVhckNvbnNvbGVNZXNzYWdlcyIpOworfQorCiBi
b29sIEluc3BlY3RvckZyb250ZW5kOjphZGRSZXNvdXJjZShsb25nIGxvbmcgaWRlbnRpZmllciwg
Y29uc3QgU2NyaXB0T2JqZWN0JiByZXNvdXJjZU9iaikKIHsKICAgICBPd25QdHI8U2NyaXB0RnVu
Y3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwoImFkZFJlc291cmNlIikpOwpAQCAt
MTEyLDE0ICsxMTcsMTAgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6cmVtb3ZlUmVzb3VyY2Uo
bG9uZyBsb25nIGlkZW50aWZpZXIpCiAgICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlRm9jdXNlZE5vZGUoTm9kZSogbm9kZSkKK3ZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZUZvY3VzZWROb2RlKGxvbmcgbG9uZyBub2RlSWQpCiB7Ci0g
ICAgU2NyaXB0T2JqZWN0IHF1YXJhbnRpbmVkTm9kZTsKLSAgICBpZiAoIWdldFF1YXJhbnRpbmVk
U2NyaXB0T2JqZWN0KG5vZGUsIHF1YXJhbnRpbmVkTm9kZSkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgi
dXBkYXRlRm9jdXNlZE5vZGUiKSk7Ci0gICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHF1YXJh
bnRpbmVkTm9kZSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KG5vZGVJZCk7CiAgICAg
ZnVuY3Rpb24tPmNhbGwoKTsKIH0KIApAQCAtMzQ5LDYgKzM1MCwzNyBAQCB2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpkaWRBcHBseURvbUNoYW5nZShpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3MpCiAg
ICAgZnVuY3Rpb24tPmNhbGwoKTsKIH0KIAorI2lmIEVOQUJMRShEQVRBQkFTRSkKK3ZvaWQgSW5z
cGVjdG9yRnJvbnRlbmQ6OnNlbGVjdERhdGFiYXNlKERhdGFiYXNlKiBkYXRhYmFzZSkKK3sKKyAg
ICBPd25QdHI8U2NyaXB0RnVuY3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwoInNl
bGVjdERhdGFiYXNlIikpOworICAgIFNjcmlwdE9iamVjdCBxdWFyYW50aW5lZE9iamVjdDsKKyAg
ICBpZiAoIWdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KGRhdGFiYXNlLCBxdWFyYW50aW5lZE9i
amVjdCkpCisgICAgICAgIHJldHVybjsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQocXVh
cmFudGluZWRPYmplY3QpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7Cit9CisjZW5kaWYKKworI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OnNlbGVjdERPTVN0
b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSkKK3sKKyAgICBPd25QdHI8U2NyaXB0RnVuY3Rpb25DYWxs
PiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwoInNlbGVjdERPTVN0b3JhZ2UiKSk7CisgICAgU2Ny
aXB0T2JqZWN0IHF1YXJhbnRpbmVkT2JqZWN0OworICAgIGlmICghZ2V0UXVhcmFudGluZWRTY3Jp
cHRPYmplY3Qoc3RvcmFnZSwgcXVhcmFudGluZWRPYmplY3QpKQorICAgICAgICByZXR1cm47Cisg
ICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHF1YXJhbnRpbmVkT2JqZWN0KTsKKyAgICBmdW5j
dGlvbi0+Y2FsbCgpOworfQorI2VuZGlmCisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmFkZE5v
ZGVzVG9TZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBub2RlSWRzKQoreworICAgIE93blB0cjxT
Y3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0aW9uQ2FsbCgiYWRkTm9kZXNUb1Nl
YXJjaFJlc3VsdCIpKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQobm9kZUlkcyk7Cisg
ICAgZnVuY3Rpb24tPmNhbGwoKTsKK30KKwogUGFzc093blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+
IEluc3BlY3RvckZyb250ZW5kOjpuZXdGdW5jdGlvbkNhbGwoY29uc3QgU3RyaW5nJiBmdW5jdGlv
bk5hbWUpCiB7CiAgICAgU2NyaXB0RnVuY3Rpb25DYWxsKiBmdW5jdGlvbiA9IG5ldyBTY3JpcHRG
dW5jdGlvbkNhbGwobV9zY3JpcHRTdGF0ZSwgbV93ZWJJbnNwZWN0b3IsICJkaXNwYXRjaCIpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggN2E0OGI2Mi4uMzQwMWJiYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC00NSwxMCArNDUsMTMgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDb25zb2xl
TWVzc2FnZTsKKyAgICBjbGFzcyBEYXRhYmFzZTsKKyAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFz
cyBJbnNwZWN0b3JSZXNvdXJjZTsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFNjcmlwdEZ1
bmN0aW9uQ2FsbDsKICAgICBjbGFzcyBTY3JpcHRTdHJpbmc7CisgICAgY2xhc3MgU3RvcmFnZTsK
IAogICAgIGNsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKICAgICBwdWJsaWM6CkBAIC01OSwxMiAr
NjIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTY3JpcHRPYmplY3QgbmV3U2Ny
aXB0T2JqZWN0KCk7CiAKICAgICAgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFNj
cmlwdE9iamVjdCYgbWVzc2FnZU9iaiwgY29uc3QgVmVjdG9yPFNjcmlwdFN0cmluZz4mIGZyYW1l
cywgY29uc3QgVmVjdG9yPFNjcmlwdFZhbHVlPiB3cmFwcGVkQXJndW1lbnRzLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpOwotICAgICAgICAKKyAgICAgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdl
cygpOworCiAgICAgICAgIGJvb2wgYWRkUmVzb3VyY2UobG9uZyBsb25nIGlkZW50aWZpZXIsIGNv
bnN0IFNjcmlwdE9iamVjdCYgcmVzb3VyY2VPYmopOwogICAgICAgICBib29sIHVwZGF0ZVJlc291
cmNlKGxvbmcgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTY3JpcHRPYmplY3QmIHJlc291cmNlT2Jq
KTsKICAgICAgICAgdm9pZCByZW1vdmVSZXNvdXJjZShsb25nIGxvbmcgaWRlbnRpZmllcik7CiAK
LSAgICAgICAgdm9pZCB1cGRhdGVGb2N1c2VkTm9kZShOb2RlKiBub2RlKTsKKyAgICAgICAgdm9p
ZCB1cGRhdGVGb2N1c2VkTm9kZShsb25nIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBzZXRB
dHRhY2hlZFdpbmRvdyhib29sIGF0dGFjaGVkKTsKICAgICAgICAgdm9pZCBpbnNwZWN0ZWRXaW5k
b3dTY3JpcHRPYmplY3RDbGVhcmVkKEZyYW1lKiBmcmFtZSk7CiAgICAgICAgIHZvaWQgc2hvd1Bh
bmVsKGludCBwYW5lbCk7CkBAIC05MCwxMCArOTQsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICBib29sIGFkZERhdGFiYXNlKGNvbnN0IFNj
cmlwdE9iamVjdCYgZGJPYmopOworICAgICAgICB2b2lkIHNlbGVjdERhdGFiYXNlKERhdGFiYXNl
KiBkYXRhYmFzZSk7CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQog
ICAgICAgICBib29sIGFkZERPTVN0b3JhZ2UoY29uc3QgU2NyaXB0T2JqZWN0JiBkb21TdG9yYWdl
T2JqKTsKKyAgICAgICAgdm9pZCBzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpOwog
I2VuZGlmCiAKICAgICAgICAgdm9pZCBzZXREb2N1bWVudEVsZW1lbnQoY29uc3QgU2NyaXB0T2Jq
ZWN0JiByb290KTsKQEAgLTEwNSw2ICsxMTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZvaWQgZGlkR2V0Q2hpbGROb2RlcyhpbnQgY2FsbElkKTsKICAgICAgICAgdm9pZCBkaWRB
cHBseURvbUNoYW5nZShpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3MpOwogCisgICAgICAgIHZvaWQg
YWRkTm9kZXNUb1NlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIG5vZGVJZHMpOworCiAgICAgcHJp
dmF0ZToKICAgICAgICAgUGFzc093blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+IG5ld0Z1bmN0aW9u
Q2FsbChjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSk7CiAgICAgICAgIHZvaWQgY2FsbFNpbXBs
ZUZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwppbmRleCA2ODUxZWVhLi41YWY5MzUxIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC0xNzUsNyArMTc1LDcg
QEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICBjbGVhck1lc3Nh
Z2VzOiBmdW5jdGlvbihjbGVhckluc3BlY3RvckNvbnRyb2xsZXIpCiAgICAgewogICAgICAgICBp
ZiAoY2xlYXJJbnNwZWN0b3JDb250cm9sbGVyKQotICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlci5jbGVhck1lc3NhZ2VzKCk7CisgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmNs
ZWFyTWVzc2FnZXMoZmFsc2UpOwogICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNv
dXJjZXMpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5jbGVhck1l
c3NhZ2VzKCk7CiAKQEAgLTIxMSwxMSArMjExLDI4IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmll
dy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghZXhwcmVzc2lvblN0cmluZyAmJiAhcHJlZml4
KQogICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIGlmICghZXhwcmVzc2lvblN0cmluZykK
KyAgICAgICAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSAidGhpcyI7CisKICAgICAgICAgdmFyIHJl
cG9ydENvbXBsZXRpb25zID0gdGhpcy5fcmVwb3J0Q29tcGxldGlvbnMuYmluZCh0aGlzLCBiZXN0
TWF0Y2hPbmx5LCBjb21wbGV0aW9uc1JlYWR5Q2FsbGJhY2ssIGRvdE5vdGF0aW9uLCBicmFja2V0
Tm90YXRpb24sIHByZWZpeCk7Ci0gICAgICAgIHRoaXMuX2V2YWxJbkluc3BlY3RlZFdpbmRvdyhl
eHByZXNzaW9uU3RyaW5nLCByZXBvcnRDb21wbGV0aW9ucyk7CisgICAgICAgIC8vIENvbGxlY3Qg
Y29tbWEgc2VwYXJhdGVkIG9iamVjdCBwcm9wZXJ0aWVzIGZvciB0aGUgY29tcGxldGlvbi4KKyAg
ICAgICAgdGhpcy5fZXZhbEluSW5zcGVjdGVkV2luZG93KAorICAgICAgICAgICAgIihmdW5jdGlv
bigpIHsiICsKKyAgICAgICAgICAgICAgICAidmFyIHByb3BzID0gW107IiArCisgICAgICAgICAg
ICAgICAgImZvciAodmFyIHByb3AgaW4gKCIgKyBleHByZXNzaW9uU3RyaW5nICsgIikpIHByb3Bz
LnB1c2gocHJvcCk7IiArCisgICAgICAgICAgICAgICAgKCghZG90Tm90YXRpb24gJiYgIWJyYWNr
ZXROb3RhdGlvbikgPworICAgICAgICAgICAgICAgICJmb3IgKHZhciBwcm9wIGluIHdpbmRvdy5f
aW5zcGVjdG9yQ29tbWFuZExpbmVBUEkpIiArCisgICAgICAgICAgICAgICAgICAgICJpZiAocHJv
cC5jaGFyQXQoMCkgIT09ICdfJykgcHJvcHMucHVzaChwcm9wKTsiCisgICAgICAgICAgICAgICAg
OiAiIikgKworICAgICAgICAgICAgICAgICJyZXR1cm4gcHJvcHMuam9pbignLCcpOyIgKworICAg
ICAgICAgICAgIn0pKCkiLAorICAgICAgICAgICAgcmVwb3J0Q29tcGxldGlvbnMpOwogICAgIH0s
CiAKLSAgICBfcmVwb3J0Q29tcGxldGlvbnM6IGZ1bmN0aW9uKGJlc3RNYXRjaE9ubHksIGNvbXBs
ZXRpb25zUmVhZHlDYWxsYmFjaywgZG90Tm90YXRpb24sIGJyYWNrZXROb3RhdGlvbiwgcHJlZml4
LCByZXN1bHQpIHsKKyAgICBfcmVwb3J0Q29tcGxldGlvbnM6IGZ1bmN0aW9uKGJlc3RNYXRjaE9u
bHksIGNvbXBsZXRpb25zUmVhZHlDYWxsYmFjaywgZG90Tm90YXRpb24sIGJyYWNrZXROb3RhdGlv
biwgcHJlZml4LCByZXN1bHQsIGlzRXhjZXB0aW9uKSB7CisgICAgICAgIGlmIChpc0V4Y2VwdGlv
bikKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAoYnJhY2tldE5vdGF0aW9uKSB7
CiAgICAgICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCAmJiBwcmVmaXhbMF0gPT09ICInIikKICAg
ICAgICAgICAgICAgICB2YXIgcXVvdGVVc2VkID0gIiciOwpAQCAtMjI0LDE1ICsyNDEsNyBAQCBX
ZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAg
ICAgdmFyIHJlc3VsdHMgPSBbXTsKLSAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBPYmplY3QucHJv
cGVydGllcyhyZXN1bHQpOwotICAgICAgICBpZiAoIWRvdE5vdGF0aW9uICYmICFicmFja2V0Tm90
YXRpb24gJiYgcmVzdWx0Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgewotICAgICAgICAgICAg
dmFyIGNvbW1hbmRMaW5lQVBJID0gT2JqZWN0LnByb3BlcnRpZXMocmVzdWx0Ll9pbnNwZWN0b3JD
b21tYW5kTGluZUFQSSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1hbmRM
aW5lQVBJLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gY29t
bWFuZExpbmVBUElbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmNoYXJBdCgwKSAh
PT0gIl8iKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydHkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gcmVzdWx0
LnNwbGl0KCIsIik7CiAgICAgICAgIHByb3BlcnRpZXMuc29ydCgpOwogCiAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7ICsraSkgewpAQCAtMjg4LDcgKzI5Nyw3
IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICgh
bGluayB8fCAhbGluay5yZXByZXNlbnRlZE5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZUZvY3VzZWROb2RlKGxpbmsucmVwcmVzZW50ZWROb2Rl
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZUZvY3VzZWROb2RlKGxpbmsucmVwcmVzZW50
ZWROb2RlLmlkKTsKICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgfSwKQEAgLTMxMyw3NCArMzIyLDYgQEAgV2ViSW5z
cGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5kb0V2YWxJbldp
bmRvdyhleHByZXNzaW9uLCBjYWxsYmFjayk7CiAgICAgfSwKIAotICAgIF9lbnN1cmVDb21tYW5k
TGluZUFQSUluc3RhbGxlZDogZnVuY3Rpb24oaW5zcGVjdGVkV2luZG93KQotICAgIHsKLSAgICAg
ICAgaWYgKCFpbnNwZWN0ZWRXaW5kb3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJKSB7Ci0gICAg
ICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgid2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGlu
ZUFQSSA9IHsgXAotICAgICAgICAgICAgICAgICQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQuYXBwbHkoZG9jdW1lbnQsIGFyZ3VtZW50cykgfSwgXAotICAgICAg
ICAgICAgICAgICQkOiBmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JB
bGwuYXBwbHkoZG9jdW1lbnQsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICAgICAgICAgICR4OiBm
dW5jdGlvbih4cGF0aCwgY29udGV4dCkgeyBcCi0gICAgICAgICAgICAgICAgICAgIHZhciBub2Rl
cyA9IFtdOyBcCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7IFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBkb2MgPSBjb250ZXh0IHx8IGRvY3VtZW50OyBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgcmVzdWx0cyA9IGRvYy5ldmFsdWF0ZSh4cGF0aCwgZG9jLCBudWxsLCBYUGF0
aFJlc3VsdC5BTllfVFlQRSwgbnVsbCk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBu
b2RlOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSA9IHJlc3VsdHMuaXRl
cmF0ZU5leHQoKSkgbm9kZXMucHVzaChub2RlKTsgXAotICAgICAgICAgICAgICAgICAgICB9IGNh
dGNoIChlKSB7fSBcCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlczsgXAotICAgICAg
ICAgICAgICAgIH0sIFwKLSAgICAgICAgICAgICAgICBkaXI6IGZ1bmN0aW9uKCkgeyByZXR1cm4g
Y29uc29sZS5kaXIuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKSB9LCBcCi0gICAgICAgICAgICAg
ICAgZGlyeG1sOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUuZGlyeG1sLmFwcGx5KGNvbnNv
bGUsIGFyZ3VtZW50cykgfSwgXAotICAgICAgICAgICAgICAgIGtleXM6IGZ1bmN0aW9uKG8pIHsg
dmFyIGEgPSBbXTsgZm9yICh2YXIgayBpbiBvKSBhLnB1c2goayk7IHJldHVybiBhOyB9LCBcCi0g
ICAgICAgICAgICAgICAgdmFsdWVzOiBmdW5jdGlvbihvKSB7IHZhciBhID0gW107IGZvciAodmFy
IGsgaW4gbykgYS5wdXNoKG9ba10pOyByZXR1cm4gYTsgfSwgXAotICAgICAgICAgICAgICAgIHBy
b2ZpbGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29uc29sZS5wcm9maWxlLmFwcGx5KGNvbnNvbGUs
IGFyZ3VtZW50cykgfSwgXAotICAgICAgICAgICAgICAgIHByb2ZpbGVFbmQ6IGZ1bmN0aW9uKCkg
eyByZXR1cm4gY29uc29sZS5wcm9maWxlRW5kLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwg
XAotICAgICAgICAgICAgICAgIF9pbnNwZWN0ZWROb2RlczogW10sIFwKLSAgICAgICAgICAgICAg
ICBnZXQgJDAoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5v
ZGVzWzBdIH0sIFwKLSAgICAgICAgICAgICAgICBnZXQgJDEoKSB7IHJldHVybiBfaW5zcGVjdG9y
Q29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzFdIH0sIFwKLSAgICAgICAgICAgICAgICBn
ZXQgJDIoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVz
WzJdIH0sIFwKLSAgICAgICAgICAgICAgICBnZXQgJDMoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29t
bWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzNdIH0sIFwKLSAgICAgICAgICAgICAgICBnZXQg
JDQoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3RlZE5vZGVzWzRd
IH0gXAotICAgICAgICAgICAgfTsiKTsKLQotICAgICAgICAgICAgaW5zcGVjdGVkV2luZG93Ll9p
bnNwZWN0b3JDb21tYW5kTGluZUFQSS5jbGVhciA9IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcENh
bGxiYWNrKHRoaXMuY2xlYXJNZXNzYWdlcy5iaW5kKHRoaXMpKTsKLSAgICAgICAgICAgIGluc3Bl
Y3RlZFdpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuaW5zcGVjdCA9IEluc3BlY3RvckNv
bnRyb2xsZXIud3JhcENhbGxiYWNrKGluc3BlY3RPYmplY3QuYmluZCh0aGlzKSk7Ci0KLSAgICAg
ICAgICAgIGZ1bmN0aW9uIGluc3BlY3RPYmplY3QobykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRX
aW5kb3coKS5jb25zb2xlLmxvZyhvKTsKLSAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnR5cGUo
bywgSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKSkgPT09ICJub2RlIikgewot
ICAgICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2hvd0VsZW1lbnRzUGFuZWwoKTsKLSAg
ICAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy50cmVlT3V0bGlu
ZS5yZXZlYWxBbmRTZWxlY3ROb2RlKG8pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoT2JqZWN0LmRlc2NyaWJlKG8pKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlICJEYXRhYmFzZSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViSW5zcGVjdG9yLnNob3dEYXRhYmFzZXNQYW5lbCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzLnNlbGVjdERhdGFiYXNlKG8p
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAiU3RvcmFnZSI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLnNob3dEYXRhYmFzZXNQYW5lbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzLnNlbGVjdERPTVN0b3JhZ2Uobyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAg
YWRkSW5zcGVjdGVkTm9kZTogZnVuY3Rpb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHZhciBpbnNw
ZWN0ZWRXaW5kb3cgPSBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOwotICAg
ICAgICB0aGlzLl9lbnN1cmVDb21tYW5kTGluZUFQSUluc3RhbGxlZChpbnNwZWN0ZWRXaW5kb3cp
OwotICAgICAgICB2YXIgaW5zcGVjdGVkTm9kZXMgPSBpbnNwZWN0ZWRXaW5kb3cuX2luc3BlY3Rv
ckNvbW1hbmRMaW5lQVBJLl9pbnNwZWN0ZWROb2RlczsKLSAgICAgICAgaW5zcGVjdGVkTm9kZXMu
dW5zaGlmdChub2RlKTsKLSAgICAgICAgaWYgKGluc3BlY3RlZE5vZGVzLmxlbmd0aCA+PSA1KQot
ICAgICAgICAgICAgaW5zcGVjdGVkTm9kZXMucG9wKCk7Ci0gICAgfSwKLQogICAgIGRvRXZhbElu
V2luZG93OiBmdW5jdGlvbihleHByZXNzaW9uLCBjYWxsYmFjaykKICAgICB7CiAgICAgICAgIGlm
ICghZXhwcmVzc2lvbikgewpAQCAtMzg4LDIyICszMjksMTUgQEAgV2ViSW5zcGVjdG9yLkNvbnNv
bGVWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAidGhpcyI7CiAg
ICAgICAgIH0KIAotICAgICAgICAvLyBTdXJyb3VuZCB0aGUgZXhwcmVzc2lvbiBpbiB3aXRoIHN0
YXRlbWVudHMgdG8gaW5qZWN0IG91ciBjb21tYW5kIGxpbmUgQVBJIHNvIHRoYXQKLSAgICAgICAg
Ly8gdGhlIHdpbmRvdyBvYmplY3QgcHJvcGVydGllcyBzdGlsbCB0YWtlIG1vcmUgcHJlY2VkZW50
IHRoYW4gb3VyIEFQSSBmdW5jdGlvbnMuCi0gICAgICAgIGV4cHJlc3Npb24gPSAid2l0aCAod2lu
ZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSSkgeyB3aXRoICh3aW5kb3cpIHsgIiArIGV4cHJl
c3Npb24gKyAiIH0gfSI7Ci0KICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICBmdW5j
dGlvbiBkZWxheWVkRXZhbHVhdGlvbigpCisgICAgICAgIGZ1bmN0aW9uIGV2YWxDYWxsYmFjayhy
ZXN1bHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciBpbnNwZWN0ZWRXaW5kb3cgPSBJbnNw
ZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOwotICAgICAgICAgICAgc2VsZi5fZW5z
dXJlQ29tbWFuZExpbmVBUElJbnN0YWxsZWQoaW5zcGVjdGVkV2luZG93KTsKLSAgICAgICAgICAg
IHRyeSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soaW5zcGVjdGVkV2luZG93LmV2YWwoZXhw
cmVzc2lvbikpOwotICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgICAgIGNh
bGxiYWNrKGUsIHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHNldFRp
bWVvdXQoZGVsYXllZEV2YWx1YXRpb24sIDApOworICAgICAgICAgICAgaWYgKHJlc3VsdC5leGNl
cHRpb24pCisgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0LmV4Y2VwdGlvbiwgdHJ1ZSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0LnZhbHVl
LCBmYWxzZSk7CisgICAgICAgIH07CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuZXZhbHVh
dGUoZXhwcmVzc2lvbiwgZXZhbENhbGxiYWNrKTsKICAgICB9LAogCiAgICAgX2VudGVyS2V5UHJl
c3NlZDogZnVuY3Rpb24oZXZlbnQpCkBAIC00MzYsMTMgKzM3MCwxMCBAQCBXZWJJbnNwZWN0b3Iu
Q29uc29sZVZpZXcucHJvdG90eXBlID0gewogCiAgICAgX2Zvcm1hdDogZnVuY3Rpb24ob3V0cHV0
LCBmb3JjZU9iamVjdEZvcm1hdCkKICAgICB7Ci0gICAgICAgIHZhciBpbnNwZWN0ZWRXaW5kb3cg
PSBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOwogICAgICAgICBpZiAoZm9y
Y2VPYmplY3RGb3JtYXQpCiAgICAgICAgICAgICB2YXIgdHlwZSA9ICJvYmplY3QiOwotICAgICAg
ICBlbHNlIGlmIChvdXRwdXQgaW5zdGFuY2VvZiBpbnNwZWN0ZWRXaW5kb3cuTm9kZUxpc3QpCi0g
ICAgICAgICAgICB2YXIgdHlwZSA9ICJhcnJheSI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHZhciB0eXBlID0gT2JqZWN0LnR5cGUob3V0cHV0LCBpbnNwZWN0ZWRXaW5kb3cpOworICAgICAg
ICAgICAgdmFyIHR5cGUgPSBPYmplY3QucHJveHlUeXBlKG91dHB1dCk7CiAKICAgICAgICAgLy8g
V2UgZG9uJ3QgcGVyZm9ybSBhbnkgc3BlY2lhbCBmb3JtYXR0aW5nIG9uIHRoZXNlIHR5cGVzLCBz
byB3ZSBqdXN0CiAgICAgICAgIC8vIHBhc3MgdGhlbSB0aHJvdWdoIHRoZSBzaW1wbGUgX2Zvcm1h
dHZhbHVlIGZ1bmN0aW9uLgpAQCAtNDUxLDggKzM4Miw2IEBAIFdlYkluc3BlY3Rvci5Db25zb2xl
Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAibnVsbCI6IDEsCiAgICAgICAgICAgICAi
Ym9vbGVhbiI6IDEsCiAgICAgICAgICAgICAibnVtYmVyIjogMSwKLSAgICAgICAgICAgICJkYXRl
IjogMSwKLSAgICAgICAgICAgICJmdW5jdGlvbiI6IDEsCiAgICAgICAgIH07CiAKICAgICAgICAg
dmFyIGZvcm1hdHRlcjsKQEAgLTQ3OSw2ICs0MDgsMTYgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVW
aWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSh2YWwpKTsKICAgICB9LAogCisgICAgX2Zvcm1hdGZ1bmN0aW9uOiBmdW5jdGlv
bihmdW5jLCBlbGVtKQorICAgIHsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShmdW5jLmRlc2NyaXB0aW9uKSk7CisgICAgfSwKKworICAgIF9mb3JtYXRk
YXRlOiBmdW5jdGlvbihkYXRlLCBlbGVtKQorICAgIHsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRlLmRlc2NyaXB0aW9uKSk7CisgICAgfSwKKwog
ICAgIF9mb3JtYXRzdHJpbmc6IGZ1bmN0aW9uKHN0ciwgZWxlbSkKICAgICB7CiAgICAgICAgIGVs
ZW0uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlwiIiArIHN0ciArICJcIiIp
KTsKQEAgLTQ4Niw3ICs0MjUsNyBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZVZpZXcucHJvdG90eXBl
ID0gewogCiAgICAgX2Zvcm1hdHJlZ2V4cDogZnVuY3Rpb24ocmUsIGVsZW0pCiAgICAgewotICAg
ICAgICB2YXIgZm9ybWF0dGVkID0gU3RyaW5nKHJlKS5yZXBsYWNlKC8oW1xcXC9dKS9nLCAiXFwk
MSIpLnJlcGxhY2UoL1xcKFwvW2dpbV0qKSQvLCAiJDEiKS5zdWJzdHJpbmcoMSk7CisgICAgICAg
IHZhciBmb3JtYXR0ZWQgPSBTdHJpbmcocmUuZGVzY3JpcHRpb24pLnJlcGxhY2UoLyhbXFxcL10p
L2csICJcXCQxIikucmVwbGFjZSgvXFwoXC9bZ2ltXSopJC8sICIkMSIpLnN1YnN0cmluZygxKTsK
ICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShmb3JtYXR0
ZWQpKTsKICAgICB9LAogCkBAIC01MDEsMTAgKzQ0MCwxMCBAQCBXZWJJbnNwZWN0b3IuQ29uc29s
ZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICBlbGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCJdIikpOwogICAgIH0sCiAKLSAgICBfZm9ybWF0bm9kZTogZnVuY3Rpb24o
bm9kZSwgZWxlbSkKKyAgICBfZm9ybWF0bm9kZTogZnVuY3Rpb24ob2JqZWN0LCBlbGVtKQogICAg
IHsKICAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gbmV3IFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVPdXRsaW5lKCk7Ci0gICAgICAgIHRyZWVPdXRsaW5lLnJvb3RET01Ob2RlID0gbm9kZTsKKyAg
ICAgICAgdHJlZU91dGxpbmUucm9vdERPTU5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9k
ZUZvcklkKG9iamVjdC5ub2RlSWQpOwogICAgICAgICB0cmVlT3V0bGluZS5lbGVtZW50LmFkZFN0
eWxlQ2xhc3MoIm91dGxpbmUtZGlzY2xvc3VyZSIpOwogICAgICAgICBpZiAoIXRyZWVPdXRsaW5l
LmNoaWxkcmVuWzBdLmhhc0NoaWxkcmVuKQogICAgICAgICAgICAgdHJlZU91dGxpbmUuZWxlbWVu
dC5hZGRTdHlsZUNsYXNzKCJzaW5nbGUtbm9kZSIpOwpAQCAtNTEzLDcgKzQ1Miw3IEBAIFdlYklu
c3BlY3Rvci5Db25zb2xlVmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBfZm9ybWF0b2JqZWN0OiBm
dW5jdGlvbihvYmosIGVsZW0pCiAgICAgewotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKG5ldyBX
ZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24obmV3IFdlYkluc3BlY3Rvci5PYmpl
Y3RQcm94eShvYmopLCBPYmplY3QuZGVzY3JpYmUob2JqLCB0cnVlKSwgbnVsbCwgbnVsbCwgdHJ1
ZSkuZWxlbWVudCk7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQobmV3IFdlYkluc3BlY3Rvci5P
YmplY3RQcm9wZXJ0aWVzU2VjdGlvbihvYmosIG9iai5kZXNjcmlwdGlvbiwgbnVsbCwgdHJ1ZSku
ZWxlbWVudCk7CiAgICAgfSwKIAogICAgIF9mb3JtYXRlcnJvcjogZnVuY3Rpb24ob2JqLCBlbGVt
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDVhYWNkNDEuLjQ4
ZGEyMGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTMxLDcg
KzMxLDcgQEAKIFdlYkluc3BlY3Rvci5ET01Ob2RlID0gZnVuY3Rpb24oZG9jLCBwYXlsb2FkKSB7
CiAgICAgdGhpcy5vd25lckRvY3VtZW50ID0gZG9jOwogCi0gICAgdGhpcy5faWQgPSBwYXlsb2Fk
LmlkOworICAgIHRoaXMuaWQgPSBwYXlsb2FkLmlkOwogICAgIHRoaXMubm9kZVR5cGUgPSBwYXls
b2FkLm5vZGVUeXBlOwogICAgIHRoaXMubm9kZU5hbWUgPSBwYXlsb2FkLm5vZGVOYW1lOwogICAg
IHRoaXMuX25vZGVWYWx1ZSA9IHBheWxvYWQubm9kZVZhbHVlOwpAQCAtNTAsOCArNTAsOCBAQCBX
ZWJJbnNwZWN0b3IuRE9NTm9kZSA9IGZ1bmN0aW9uKGRvYywgcGF5bG9hZCkgewogICAgIHRoaXMu
Zmlyc3RDaGlsZCA9IG51bGw7CiAgICAgdGhpcy5wYXJlbnROb2RlID0gbnVsbDsKIAotICAgIGlm
IChwYXlsb2FkLmNoaWxkTm9kZXMpCi0gICAgICAgIHRoaXMuX3NldENoaWxkcmVuUGF5bG9hZChw
YXlsb2FkLmNoaWxkTm9kZXMpOworICAgIGlmIChwYXlsb2FkLmNoaWxkcmVuKQorICAgICAgICB0
aGlzLl9zZXRDaGlsZHJlblBheWxvYWQocGF5bG9hZC5jaGlsZHJlbik7CiAKICAgICB0aGlzLl9j
b21wdXRlZFN0eWxlID0gbnVsbDsKICAgICB0aGlzLnN0eWxlID0gbnVsbDsKQEAgLTMwMiwyMyAr
MzAyLDggQEAgV2ViSW5zcGVjdG9yLkRPTUFnZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgdGhpcy5f
aWRUb0RPTU5vZGUgPSBudWxsOwogICAgIHRoaXMuZG9jdW1lbnQgPSBudWxsOwogCi0gICAgLy8g
SW5zdGFsbCBvbnBvcHVsYXRlIGhhbmRsZXIuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgbWVhc3VyZS4K
LSAgICAvLyBUT0RPOiBhZGQgdGhpcyBjb2RlIGludG8gdGhlIG9yaWdpbmFsIHVwZGF0ZUNoaWxk
cmVuIG9uY2UgZG9tQWdlbnQKLSAgICAvLyBiZWNvbWVzIHByaW1hcnkgc291cmNlIG9mIERPTSBp
bmZvcm1hdGlvbi4KLSAgICAvLyBUT0RPMjogdXBkYXRlIEVsZW1lbnRzUGFuZWwgdG8gbm90IHRy
YWNrIGVtYmVkZGVkIGlmcmFtZXMgLSBpdCBpcyBhbHJlYWR5IGJlaW5nIGhhbmRsZWQKKyAgICAv
LyBUT0RPOiB1cGRhdGUgRWxlbWVudHNQYW5lbCB0byBub3QgdHJhY2sgZW1iZWRkZWQgaWZyYW1l
cyAtIGl0IGlzIGFscmVhZHkgYmVpbmcgaGFuZGxlZAogICAgIC8vIGluIHRoZSBhZ2VudCBiYWNr
ZW5kLgotICAgIHZhciBkb21BZ2VudCA9IHRoaXM7Ci0gICAgdmFyIG9yaWdpbmFsVXBkYXRlQ2hp
bGRyZW4gPSBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUudXBkYXRl
Q2hpbGRyZW47Ci0gICAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBl
LnVwZGF0ZUNoaWxkcmVuID0gZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgZG9tQWdlbnQuZ2V0
Q2hpbGROb2Rlc0FzeW5jKHRoaXMucmVwcmVzZW50ZWRPYmplY3QsIG9yaWdpbmFsVXBkYXRlQ2hp
bGRyZW4uYmluZCh0aGlzKSk7Ci0gICAgfTsKLQotICAgIC8vIE11dGUgY29uc29sZSBoYW5kbGUg
dG8gYXZvaWQgY3Jhc2ggb24gc2VsZWN0aW9uIGNoYW5nZS4KLSAgICAvLyBUT0RPOiBSZS1pbXBs
ZW1lbnQgaW5zcGVjdG9yQ29uc29sZUFQSSB0byB3b3JrIGluIGEgc2VyaWFsaXplZCB3YXkgYW5k
IHJlbW92ZSB0aGlzIHdvcmthcm91bmQuCi0gICAgV2ViSW5zcGVjdG9yLkNvbnNvbGUucHJvdG90
eXBlLmFkZEluc3BlY3RlZE5vZGUgPSBmdW5jdGlvbigpCi0gICAgewotICAgIH07CiAKICAgICAv
LyBXaGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gSW5zcGVjdG9yRE9NQWdlbnQgYWxyZWFkeSAtPiBu
byBuZWVkIHRvIGZpbHRlci4KICAgICAvLyBUT0RPOiBFaXRoZXIgcmVtb3ZlIGFsbCBvZiBpdHMg
dXNhZ2VzIG9yIHB1c2ggdmFsdWUgaW50byB0aGUgYWdlbnQgYmFja2VuZC4KQEAgLTM0NCwyNSAr
MzI5LDI1IEBAIFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH07CiAgICAgICAgIHZhciBjYWxsSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJh
Y2sud3JhcChteWNhbGxiYWNrKTsKLSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5nZXRDaGls
ZE5vZGVzKGNhbGxJZCwgcGFyZW50Ll9pZCk7CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIu
Z2V0Q2hpbGROb2RlcyhjYWxsSWQsIHBhcmVudC5pZCk7CiAgICAgfSwKIAogICAgIHNldEF0dHJp
YnV0ZUFzeW5jOiBmdW5jdGlvbihub2RlLCBuYW1lLCB2YWx1ZSwgY2FsbGJhY2spCiAgICAgewog
ICAgICAgICB2YXIgbXljYWxsYmFjayA9IHRoaXMuX2RpZEFwcGx5RG9tQ2hhbmdlLmJpbmQodGhp
cywgbm9kZSwgY2FsbGJhY2spOwotICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnNldEF0dHJp
YnV0ZShXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChteWNhbGxiYWNrKSwgbm9kZS5faWQsIG5h
bWUsIHZhbHVlKTsKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5zZXRBdHRyaWJ1dGUoV2Vi
SW5zcGVjdG9yLkNhbGxiYWNrLndyYXAobXljYWxsYmFjayksIG5vZGUuaWQsIG5hbWUsIHZhbHVl
KTsKICAgICB9LAogCiAgICAgcmVtb3ZlQXR0cmlidXRlQXN5bmM6IGZ1bmN0aW9uKG5vZGUsIG5h
bWUsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdmFyIG15Y2FsbGJhY2sgPSB0aGlzLl9kaWRB
cHBseURvbUNoYW5nZS5iaW5kKHRoaXMsIG5vZGUsIGNhbGxiYWNrKTsKLSAgICAgICAgSW5zcGVj
dG9yQ29udHJvbGxlci5yZW1vdmVBdHRyaWJ1dGUoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAo
bXljYWxsYmFjayksIG5vZGUuX2lkLCBuYW1lKTsKKyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxl
ci5yZW1vdmVBdHRyaWJ1dGUoV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAobXljYWxsYmFjayks
IG5vZGUuaWQsIG5hbWUpOwogICAgIH0sCiAKICAgICBzZXRUZXh0Tm9kZVZhbHVlQXN5bmM6IGZ1
bmN0aW9uKG5vZGUsIHRleHQsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgdmFyIG15Y2FsbGJh
Y2sgPSB0aGlzLl9kaWRBcHBseURvbUNoYW5nZS5iaW5kKHRoaXMsIG5vZGUsIGNhbGxiYWNrKTsK
LSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5zZXRUZXh0Tm9kZVZhbHVlKFdlYkluc3BlY3Rv
ci5DYWxsYmFjay53cmFwKG15Y2FsbGJhY2spLCBub2RlLl9pZCwgdGV4dCk7CisgICAgICAgIElu
c3BlY3RvckNvbnRyb2xsZXIuc2V0VGV4dE5vZGVWYWx1ZShXZWJJbnNwZWN0b3IuQ2FsbGJhY2su
d3JhcChteWNhbGxiYWNrKSwgbm9kZS5pZCwgdGV4dCk7CiAgICAgfSwKIAogICAgIF9kaWRBcHBs
eURvbUNoYW5nZTogZnVuY3Rpb24obm9kZSwgY2FsbGJhY2ssIHN1Y2Nlc3MpCkBAIC0zODMsNyAr
MzY4LDcgQEAgV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgbm9k
ZS5fc2V0QXR0cmlidXRlc1BheWxvYWQoYXR0cnNBcnJheSk7CiAgICAgfSwKIAotICAgIGdldE5v
ZGVGb3JJZDogZnVuY3Rpb24obm9kZUlkKSB7CisgICAgbm9kZUZvcklkOiBmdW5jdGlvbihub2Rl
SWQpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2lkVG9ET01Ob2RlW25vZGVJZF07CiAgICAgfSwK
IApAQCAtNDExLDcgKzM5Niw3IEBAIFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUgPSB7
CiAgICAgewogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytp
KSB7CiAgICAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTsKLSAgICAgICAgICAgIHRo
aXMuX2lkVG9ET01Ob2RlW2NoaWxkLl9pZF0gPSBjaGlsZDsKKyAgICAgICAgICAgIHRoaXMuX2lk
VG9ET01Ob2RlW2NoaWxkLmlkXSA9IGNoaWxkOwogICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxk
cmVuKQogICAgICAgICAgICAgICAgIHRoaXMuX2JpbmROb2RlcyhjaGlsZC5jaGlsZHJlbik7CiAg
ICAgICAgIH0KQEAgLTQzMyw3ICs0MTgsNyBAQCBXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90
eXBlID0gewogICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5faWRUb0RPTU5vZGVbcGFyZW50SWRd
OwogICAgICAgICB2YXIgcHJldiA9IHRoaXMuX2lkVG9ET01Ob2RlW3ByZXZJZF07CiAgICAgICAg
IHZhciBub2RlID0gcGFyZW50Ll9pbnNlcnRDaGlsZChwcmV2LCBwYXlsb2FkKTsKLSAgICAgICAg
dGhpcy5faWRUb0RPTU5vZGVbbm9kZS5faWRdID0gbm9kZTsKKyAgICAgICAgdGhpcy5faWRUb0RP
TU5vZGVbbm9kZS5pZF0gPSBub2RlOwogICAgICAgICB2YXIgZXZlbnQgPSB7IHRhcmdldCA6IG5v
ZGUsIHJlbGF0ZWROb2RlIDogcGFyZW50IH07CiAgICAgICAgIHRoaXMuZG9jdW1lbnQuX2ZpcmVE
b21FdmVudCgiRE9NTm9kZUluc2VydGVkIiwgZXZlbnQpOwogICAgIH0sCkBAIC00NTAsNyArNDM1
LDcgQEAgV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZSA9IHsKIH0KIAogV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlvbihwYXlsb2FkKSB7Ci0gICAgdGhpcy5f
aWQgPSBwYXlsb2FkLmlkOworICAgIHRoaXMuaWQgPSBwYXlsb2FkLmlkOwogICAgIHRoaXMud2lk
dGggPSBwYXlsb2FkLndpZHRoOwogICAgIHRoaXMuaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQ7CiAg
ICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydGllcyA9IHBheWxvYWQuX19kaXNhYmxlZFByb3BlcnRp
ZXM7CkBAIC00OTIsNyArNDc3LDcgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24u
cGFyc2VTdHlsZSA9IGZ1bmN0aW9uKHBheWxvYWQpCiBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNs
YXJhdGlvbi5wYXJzZVJ1bGUgPSBmdW5jdGlvbihwYXlsb2FkKQogewogICAgIHZhciBydWxlID0g
e307Ci0gICAgcnVsZS5faWQgPSBwYXlsb2FkLmlkOworICAgIHJ1bGUuaWQgPSBwYXlsb2FkLmlk
OwogICAgIHJ1bGUuc2VsZWN0b3JUZXh0ID0gcGF5bG9hZC5zZWxlY3RvclRleHQ7CiAgICAgcnVs
ZS5zdHlsZSA9IG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbihwYXlsb2FkLnN0
eWxlKTsKICAgICBydWxlLnN0eWxlLnBhcmVudFJ1bGUgPSBydWxlOwpAQCAtNjE5LDEwNiArNjA0
LDExNSBAQCBXZWJJbnNwZWN0b3IuZGlkQXBwbHlEb21DaGFuZ2UgPSBXZWJJbnNwZWN0b3IuQ2Fs
bGJhY2sucHJvY2Vzc0NhbGxiYWNrOwogV2ViSW5zcGVjdG9yLmRpZFJlbW92ZUF0dHJpYnV0ZSA9
IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlk
U2V0VGV4dE5vZGVWYWx1ZSA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7
CiAKLS8vIFRlbXBvcmFyeSBtZXRob2RzIGZvciBET01BZ2VudCBtaWdyYXRpb24uCi1XZWJJbnNw
ZWN0b3Iud3JhcE5vZGVXaXRoU3R5bGVzID0gZnVuY3Rpb24obm9kZSwgc3R5bGVzKQotewotICAg
IHZhciB3aW5kb3dTdHViID0gbmV3IFdlYkluc3BlY3Rvci5ET01XaW5kb3cobnVsbCk7Ci0gICAg
dmFyIGRvY1N0dWIgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTURvY3VtZW50KG51bGwsIHdpbmRvd1N0
dWIpOwotICAgIHZhciBwYXlsb2FkID0ge307Ci0gICAgcGF5bG9hZC5ub2RlVHlwZSA9IG5vZGUu
bm9kZVR5cGU7Ci0gICAgcGF5bG9hZC5ub2RlTmFtZSA9IG5vZGUubm9kZU5hbWU7Ci0gICAgcGF5
bG9hZC5ub2RlVmFsdWUgPSBub2RlLm5vZGVWYWx1ZTsKLSAgICBwYXlsb2FkLmF0dHJpYnV0ZXMg
PSBbXTsKLSAgICBwYXlsb2FkLmNoaWxkTm9kZUNvdW50ID0gMDsKLQotICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbm9kZS5hdHRyaWJ1dGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBhdHRy
ID0gbm9kZS5hdHRyaWJ1dGVzW2ldOwotICAgICAgICBwYXlsb2FkLmF0dHJpYnV0ZXMucHVzaChh
dHRyLm5hbWUpOwotICAgICAgICBwYXlsb2FkLmF0dHJpYnV0ZXMucHVzaChhdHRyLnZhbHVlKTsK
LSAgICB9Ci0gICAgdmFyIG5vZGVTdHViID0gbmV3IFdlYkluc3BlY3Rvci5ET01Ob2RlKGRvY1N0
dWIsIHBheWxvYWQpOwotICAgIG5vZGVTdHViLl9zZXRTdHlsZXMoc3R5bGVzLmNvbXB1dGVkU3R5
bGUsIHN0eWxlcy5pbmxpbmVTdHlsZSwgc3R5bGVzLnN0eWxlQXR0cmlidXRlcywgc3R5bGVzLm1h
dGNoZWRDU1NSdWxlcyk7Ci0gICAgcmV0dXJuIG5vZGVTdHViOwotfQotCiAvLyBUZW1wb3Jhcnkg
bWV0aG9kcyB0aGF0IHdpbGwgYmUgZGlzcGF0Y2hlZCB2aWEgSW5zcGVjdG9yQ29udHJvbGxlciBp
bnRvIHRoZSBpbmplY3RlZCBjb250ZXh0LgogSW5zcGVjdG9yQ29udHJvbGxlci5nZXRTdHlsZXMg
PSBmdW5jdGlvbihub2RlSWQsIGF1dGhvck9ubHksIGNhbGxiYWNrKQogewogICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LmdldFN0eWxl
cyhub2RlSWQsIGF1dGhvck9ubHkpKTsKLSAgICB9LCAwKQorICAgIH0sIDApOwogfQogCiBJbnNw
ZWN0b3JDb250cm9sbGVyLmdldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbihub2RlSWQsIGNhbGxi
YWNrKQogewogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKElu
amVjdGVkU2NyaXB0LmdldENvbXB1dGVkU3R5bGUobm9kZUlkKSk7Ci0gICAgfSwgMCkKKyAgICB9
LCAwKTsKIH0KIAogSW5zcGVjdG9yQ29udHJvbGxlci5nZXRJbmxpbmVTdHlsZSA9IGZ1bmN0aW9u
KG5vZGVJZCwgY2FsbGJhY2spCiB7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAg
ICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuZ2V0SW5saW5lU3R5bGUobm9kZUlkKSk7Ci0gICAg
fSwgMCkKKyAgICB9LCAwKTsKIH0KIAogSW5zcGVjdG9yQ29udHJvbGxlci5hcHBseVN0eWxlVGV4
dCA9IGZ1bmN0aW9uKHN0eWxlSWQsIHN0eWxlVGV4dCwgcHJvcGVydHlOYW1lLCBjYWxsYmFjaykK
IHsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBjYWxsYmFjayhJbmplY3Rl
ZFNjcmlwdC5hcHBseVN0eWxlVGV4dChzdHlsZUlkLCBzdHlsZVRleHQsIHByb3BlcnR5TmFtZSkp
OwotICAgIH0sIDApCisgICAgfSwgMCk7CiB9CiAKIEluc3BlY3RvckNvbnRyb2xsZXIuc2V0U3R5
bGVUZXh0ID0gZnVuY3Rpb24oc3R5bGUsIGNzc1RleHQsIGNhbGxiYWNrKQogewogICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LnNldFN0
eWxlVGV4dChzdHlsZSwgY3NzVGV4dCkpOwotICAgIH0sIDApCisgICAgfSwgMCk7CiB9CiAKIElu
c3BlY3RvckNvbnRyb2xsZXIudG9nZ2xlU3R5bGVFbmFibGVkID0gZnVuY3Rpb24oc3R5bGVJZCwg
cHJvcGVydHlOYW1lLCBkaXNhYmxlZCwgY2FsbGJhY2spCiB7CiAgICAgc2V0VGltZW91dChmdW5j
dGlvbigpIHsKICAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQudG9nZ2xlU3R5bGVFbmFi
bGVkKHN0eWxlSWQsIHByb3BlcnR5TmFtZSwgZGlzYWJsZWQpKTsKLSAgICB9LCAwKQorICAgIH0s
IDApOwogfQogCi1JbnNwZWN0b3JDb250cm9sbGVyLmFwcGx5U3R5bGVSdWxlVGV4dCA9IGZ1bmN0
aW9uKHJ1bGVJZCwgbmV3Q29udGVudCwgc2VsZWN0ZWROb2RlLCBjYWxsYmFjaykKK0luc3BlY3Rv
ckNvbnRyb2xsZXIuYXBwbHlTdHlsZVJ1bGVUZXh0ID0gZnVuY3Rpb24ocnVsZUlkLCBuZXdDb250
ZW50LCBzZWxlY3RlZE5vZGVJZCwgY2FsbGJhY2spCiB7CiAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKLSAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuYXBwbHlTdHlsZVJ1bGVUZXh0
KHJ1bGVJZCwgbmV3Q29udGVudCwgc2VsZWN0ZWROb2RlKSk7Ci0gICAgfSwgMCkKKyAgICAgICAg
Y2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuYXBwbHlTdHlsZVJ1bGVUZXh0KHJ1bGVJZCwgbmV3Q29u
dGVudCwgc2VsZWN0ZWROb2RlSWQpKTsKKyAgICB9LCAwKTsKIH0KIAotSW5zcGVjdG9yQ29udHJv
bGxlci5hZGRTdHlsZVNlbGVjdG9yID0gZnVuY3Rpb24obmV3Q29udGVudCwgY2FsbGJhY2spCitJ
bnNwZWN0b3JDb250cm9sbGVyLmFkZFN0eWxlU2VsZWN0b3IgPSBmdW5jdGlvbihuZXdDb250ZW50
LCBzZWxlY3RlZE5vZGVJZCwgY2FsbGJhY2spCiB7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
IHsKLSAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuYWRkU3R5bGVTZWxlY3RvcihuZXdD
b250ZW50KSk7Ci0gICAgfSwgMCkKKyAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuYWRk
U3R5bGVTZWxlY3RvcihuZXdDb250ZW50LCBzZWxlY3RlZE5vZGVJZCkpOworICAgIH0sIDApOwog
fQogCi1JbnNwZWN0b3JDb250cm9sbGVyLnNldFN0eWxlUHJvcGVydHkgPSBmdW5jdGlvbihzdHls
ZUlkLCBuYW1lLCB2YWx1ZSwgY2FsbGJhY2spIHsKK0luc3BlY3RvckNvbnRyb2xsZXIuc2V0U3R5
bGVQcm9wZXJ0eSA9IGZ1bmN0aW9uKHN0eWxlSWQsIG5hbWUsIHZhbHVlLCBjYWxsYmFjaykKK3sK
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNj
cmlwdC5zZXRTdHlsZVByb3BlcnR5KHN0eWxlSWQsIG5hbWUsIHZhbHVlKSk7Ci0gICAgfSwgMCkK
KyAgICB9LCAwKTsKIH0KIAotSW5zcGVjdG9yQ29udHJvbGxlci5nZXRQcm90b3R5cGVzID0gZnVu
Y3Rpb24ob2JqZWN0UHJveHksIGNhbGxiYWNrKSB7CitJbnNwZWN0b3JDb250cm9sbGVyLmdldFBy
b3RvdHlwZXMgPSBmdW5jdGlvbihub2RlSWQsIGNhbGxiYWNrKQorewogICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7Ci0gICAgICAgIGNhbGxiYWNrKEluamVjdGVkU2NyaXB0LmdldFByb3RvdHlw
ZXMob2JqZWN0UHJveHkpKTsKLSAgICB9LCAwKQorICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNj
cmlwdC5nZXRQcm90b3R5cGVzKG5vZGVJZCkpOworICAgIH0sIDApOwogfQogCi1JbnNwZWN0b3JD
b250cm9sbGVyLmdldFByb3BlcnRpZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgaWdub3JlSGFz
T3duUHJvcGVydHksIGNhbGxiYWNrKSB7CitJbnNwZWN0b3JDb250cm9sbGVyLmdldFByb3BlcnRp
ZXMgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHksIGNhbGxiYWNr
KQorewogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKEluamVj
dGVkU2NyaXB0LmdldFByb3BlcnRpZXMob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5
KSk7Ci0gICAgfSwgMCkKKyAgICB9LCAwKTsKIH0KIAotSW5zcGVjdG9yQ29udHJvbGxlci5zZXRQ
cm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIHByb3BlcnR5TmFtZSwgZXhwcmVz
c2lvbiwgY2FsbGJhY2spIHsKK0luc3BlY3RvckNvbnRyb2xsZXIuc2V0UHJvcGVydHlWYWx1ZSA9
IGZ1bmN0aW9uKG9iamVjdFByb3h5LCBwcm9wZXJ0eU5hbWUsIGV4cHJlc3Npb24sIGNhbGxiYWNr
KQorewogICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgIGNhbGxiYWNrKEluamVj
dGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUob2JqZWN0UHJveHksIHByb3BlcnR5TmFtZSwgZXhw
cmVzc2lvbikpOwotICAgIH0sIDApCisgICAgfSwgMCk7Cit9CisKK0luc3BlY3RvckNvbnRyb2xs
ZXIuZXZhbHVhdGUgPSBmdW5jdGlvbihleHByZXNzaW9uLCBjYWxsYmFjaykKK3sKKyAgICBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBjYWxsYmFjayhJbmplY3RlZFNjcmlwdC5ldmFs
dWF0ZShleHByZXNzaW9uKSk7CisgICAgfSwgMCk7CiB9CiAKK0luc3BlY3RvckNvbnRyb2xsZXIu
YWRkSW5zcGVjdGVkTm9kZSA9IGZ1bmN0aW9uKG5vZGVJZCwgY2FsbGJhY2spCit7CisgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgY2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQuYWRk
SW5zcGVjdGVkTm9kZShub2RlSWQpKTsKKyAgICB9LCAwKTsKK30KKworSW5zcGVjdG9yQ29udHJv
bGxlci5wZXJmb3JtU2VhcmNoID0gZnVuY3Rpb24od2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgY2Fs
bGJhY2spCit7CisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgY2FsbGJhY2so
SW5qZWN0ZWRTY3JpcHQucGVyZm9ybVNlYXJjaCh3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KSk7Cisg
ICAgfSwgMCk7Cit9CisKK0luc3BlY3RvckNvbnRyb2xsZXIuc2VhcmNoQ2FuY2VsZWQgPSBmdW5j
dGlvbihjYWxsYmFjaykKK3sKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICBj
YWxsYmFjayhJbmplY3RlZFNjcmlwdC5zZWFyY2hDYW5jZWxlZCgpKTsKKyAgICB9LCAwKTsKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpz
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKaW5kZXggZmZh
MDAwMC4uMmUyYzQzYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Vs
ZW1lbnRzUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRz
UGFuZWwuanMKQEAgLTYxLDcgKzYxLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwgPSBm
dW5jdGlvbigpCiAgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnRvZ2dsZU5vZGVTZWFy
Y2goKTsKICAgICAgICAgICAgIHRoaXMucGFuZWwubm9kZVNlYXJjaEJ1dHRvbi5yZW1vdmVTdHls
ZUNsYXNzKCJ0b2dnbGVkLW9uIik7CiAgICAgICAgIH0KLSAgICAgICAgV2ViSW5zcGVjdG9yLmNv
bnNvbGUuYWRkSW5zcGVjdGVkTm9kZSh0aGlzLl9mb2N1c2VkRE9NTm9kZSk7CisgICAgICAgIElu
c3BlY3RvckNvbnRyb2xsZXIuYWRkSW5zcGVjdGVkTm9kZSh0aGlzLl9mb2N1c2VkRE9NTm9kZS5p
ZCwgZnVuY3Rpb24oKSB7fSk7CiAgICAgfTsKIAogICAgIHRoaXMuY29udGVudEVsZW1lbnQuYXBw
ZW5kQ2hpbGQodGhpcy50cmVlT3V0bGluZS5lbGVtZW50KTsKQEAgLTE4NCw3ICsxODQsNyBAQCBX
ZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSB0
aGlzLmN1cnJlbnRRdWVyeTsKICAgICAgICAgdGhpcy5zZWFyY2hDYW5jZWxlZCgpOwogCi0gICAg
ICAgIHZhciBpbnNwZWN0ZWRXaW5kb3cgPSBQcmVmZXJlbmNlcy51c2VET01BZ2VudCA/IFdlYklu
c3BlY3Rvci5kb21BZ2VudC5pbnNwZWN0ZWRXaW5kb3cgOiBJbnNwZWN0b3JDb250cm9sbGVyLmlu
c3BlY3RlZFdpbmRvdygpOworICAgICAgICB2YXIgaW5zcGVjdGVkV2luZG93ID0gV2ViSW5zcGVj
dG9yLmRvbUFnZW50Lmluc3BlY3RlZFdpbmRvdzsKICAgICAgICAgaWYgKCFpbnNwZWN0ZWRXaW5k
b3cgfHwgIWluc3BlY3RlZFdpbmRvdy5kb2N1bWVudCkKICAgICAgICAgICAgIHJldHVybjsKIApA
QCAtMjIyLDE5ICsyMjIsMTEgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBl
ID0gewogICAgICAgICB9CiAgICAgfSwKIAotICAgIGluY2x1ZGVkSW5TZWFyY2hSZXN1bHRzUHJv
cGVydHlOYW1lOiAiX19pbmNsdWRlZEluSW5zcGVjdG9yU2VhcmNoUmVzdWx0cyIsCi0KICAgICBz
ZWFyY2hDYW5jZWxlZDogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX3NlYXJj
aFJlc3VsdHMpIHsKLSAgICAgICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSA9IHRo
aXMuaW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWU7CiAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuX3NlYXJjaFJlc3VsdHNbaV07Ci0KLSAgICAgICAg
ICAgICAgICAvLyBSZW1vdmUgdGhlIHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSBzaW5jZSB0aGVyZSBt
aWdodCBiZSBhbiB1bmZpbmlzaGVkIHNlYXJjaC4KLSAgICAgICAgICAgICAgICBkZWxldGUgbm9k
ZVtzZWFyY2hSZXN1bHRzUHJvcGVydHldOwotCi0gICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVt
ZW50ID0gdGhpcy50cmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQobm9kZSk7CisgICAgICAgICAg
ICAgICAgdmFyIHRyZWVFbGVtZW50ID0gdGhpcy50cmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQo
dGhpcy5fc2VhcmNoUmVzdWx0c1tpXSk7CiAgICAgICAgICAgICAgICAgaWYgKHRyZWVFbGVtZW50
KQogICAgICAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5oaWdobGlnaHRlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgfQpAQCAtMjQyLDEzICsyMzQsOSBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQ
YW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZVNlYXJjaE1h
dGNoZXNDb3VudCgwLCB0aGlzKTsKIAotICAgICAgICBpZiAodGhpcy5fY3VycmVudFNlYXJjaENo
dW5rSW50ZXJ2YWxJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMu
X2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcik7Ci0gICAgICAgICAgICBkZWxl
dGUgdGhpcy5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyOwotICAgICAgICB9
Ci0KICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gMDsKICAgICAgICAg
dGhpcy5fc2VhcmNoUmVzdWx0cyA9IFtdOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnNl
YXJjaENhbmNlbGVkKGZ1bmN0aW9uKCkge30pOwogICAgIH0sCiAKICAgICBwZXJmb3JtU2VhcmNo
OiBmdW5jdGlvbihxdWVyeSkKQEAgLTI2MCwyNDEgKzI0OCw1NiBAQCBXZWJJbnNwZWN0b3IuRWxl
bWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghd2hpdGVzcGFjZVRyaW1tZWRR
dWVyeS5sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHRhZ05hbWVR
dWVyeSA9IHdoaXRlc3BhY2VUcmltbWVkUXVlcnk7Ci0gICAgICAgIHZhciBhdHRyaWJ1dGVOYW1l
UXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5OwotICAgICAgICB2YXIgc3RhcnRUYWdGb3Vu
ZCA9ICh0YWdOYW1lUXVlcnkuaW5kZXhPZigiPCIpID09PSAwKTsKLSAgICAgICAgdmFyIGVuZFRh
Z0ZvdW5kID0gKHRhZ05hbWVRdWVyeS5sYXN0SW5kZXhPZigiPiIpID09PSAodGFnTmFtZVF1ZXJ5
Lmxlbmd0aCAtIDEpKTsKLQotICAgICAgICBpZiAoc3RhcnRUYWdGb3VuZCB8fCBlbmRUYWdGb3Vu
ZCkgewotICAgICAgICAgICAgdmFyIHRhZ05hbWVRdWVyeUxlbmd0aCA9IHRhZ05hbWVRdWVyeS5s
ZW5ndGg7Ci0gICAgICAgICAgICB0YWdOYW1lUXVlcnkgPSB0YWdOYW1lUXVlcnkuc3Vic3RyaW5n
KChzdGFydFRhZ0ZvdW5kID8gMSA6IDApLCAoZW5kVGFnRm91bmQgPyAodGFnTmFtZVF1ZXJ5TGVu
Z3RoIC0gMSkgOiB0YWdOYW1lUXVlcnlMZW5ndGgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IENoZWNrIHRoZSB0YWdOYW1lUXVlcnkgaXMgaXQgaXMgYSBwb3NzaWJseSB2YWxpZCB0YWcgbmFt
ZS4KLSAgICAgICAgaWYgKCEvXlthLXpBLVowLTlcLV86XSskLy50ZXN0KHRhZ05hbWVRdWVyeSkp
Ci0gICAgICAgICAgICB0YWdOYW1lUXVlcnkgPSBudWxsOwotCi0gICAgICAgIC8vIENoZWNrIHRo
ZSBhdHRyaWJ1dGVOYW1lUXVlcnkgaXMgaXQgaXMgYSBwb3NzaWJseSB2YWxpZCB0YWcgbmFtZS4K
LSAgICAgICAgaWYgKCEvXlthLXpBLVowLTlcLV86XSskLy50ZXN0KGF0dHJpYnV0ZU5hbWVRdWVy
eSkpCi0gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lUXVlcnkgPSBudWxsOwotCi0gICAgICAgIGNv
bnN0IGVzY2FwZWRRdWVyeSA9IHF1ZXJ5LmVzY2FwZUNoYXJhY3RlcnMoIiciKTsKLSAgICAgICAg
Y29uc3QgZXNjYXBlZFRhZ05hbWVRdWVyeSA9ICh0YWdOYW1lUXVlcnkgPyB0YWdOYW1lUXVlcnku
ZXNjYXBlQ2hhcmFjdGVycygiJyIpIDogbnVsbCk7Ci0gICAgICAgIGNvbnN0IGVzY2FwZWRXaGl0
ZXNwYWNlVHJpbW1lZFF1ZXJ5ID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeS5lc2NhcGVDaGFyYWN0
ZXJzKCInIik7Ci0gICAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSA9IHRoaXMuaW5j
bHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWU7Ci0KLSAgICAgICAgdmFyIHVwZGF0ZWRN
YXRjaENvdW50T25jZSA9IGZhbHNlOwotICAgICAgICB2YXIgbWF0Y2hlc0NvdW50VXBkYXRlVGlt
ZW91dCA9IG51bGw7Ci0KLSAgICAgICAgZnVuY3Rpb24gdXBkYXRlTWF0Y2hlc0NvdW50KCkKLSAg
ICAgICAgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3Vu
dCh0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCwgdGhpcyk7Ci0gICAgICAgICAgICBtYXRjaGVz
Q291bnRVcGRhdGVUaW1lb3V0ID0gbnVsbDsKLSAgICAgICAgICAgIHVwZGF0ZWRNYXRjaENvdW50
T25jZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiB1cGRhdGVNYXRjaGVz
Q291bnRTb29uKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCF1cGRhdGVkTWF0Y2hDb3Vu
dE9uY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU1hdGNoZXNDb3VudC5jYWxsKHRo
aXMpOwotICAgICAgICAgICAgaWYgKG1hdGNoZXNDb3VudFVwZGF0ZVRpbWVvdXQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtYXRjaGVzIGNvdW50
IGV2ZXJ5IGhhbGYtc2Vjb25kIHNvIGl0IGRvZXNuJ3QgZmVlbCB0d2l0Y2h5LgotICAgICAgICAg
ICAgbWF0Y2hlc0NvdW50VXBkYXRlVGltZW91dCA9IHNldFRpbWVvdXQodXBkYXRlTWF0Y2hlc0Nv
dW50LmJpbmQodGhpcyksIDUwMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBhZGRO
b2Rlc1RvUmVzdWx0cyhub2RlcywgbGVuZ3RoLCBnZXRJdGVtKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIg
bm9kZSA9IGdldEl0ZW0uY2FsbChub2RlcywgaSk7Ci0gICAgICAgICAgICAgICAgLy8gU2tpcCB0
aGlzIG5vZGUgaWYgaXQgYWxyZWFkeSBoYXMgdGhlIHByb3BlcnR5LgotICAgICAgICAgICAgICAg
IGlmIChzZWFyY2hSZXN1bHRzUHJvcGVydHkgaW4gbm9kZSkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJlc3VsdHMubGVu
Z3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRTZWFyY2hSZXN1bHRJbmRl
eCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZERPTU5vZGUgPSBub2RlOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5vZGVbc2VhcmNoUmVzdWx0c1By
b3BlcnR5XSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0cy5wdXNo
KG5vZGUpOwotCi0gICAgICAgICAgICAgICAgLy8gSGlnaGxpZ2h0IHRoZSB0cmVlIGVsZW1lbnQg
dG8gc2hvdyBpdCBtYXRjaGVkIHRoZSBzZWFyY2guCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IGhpZ2hsaWdodCB0aGUgc3Vic3RyaW5ncyBpbiB0ZXh0IG5vZGVzIGFuZCBhdHRyaWJ1dGVzLgot
ICAgICAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHRoaXMudHJlZU91dGxpbmUuZmluZFRy
ZWVFbGVtZW50KG5vZGUpOwotICAgICAgICAgICAgICAgIGlmICh0cmVlRWxlbWVudCkKLSAgICAg
ICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQuaGlnaGxpZ2h0ZWQgPSB0cnVlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB1cGRhdGVNYXRjaGVzQ291bnRTb29uLmNhbGwodGhpcyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtYXRjaEV4YWN0SXRlbXMoZG9jKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtYXRjaEV4YWN0SWQuY2FsbCh0aGlzLCBkb2MpOwotICAgICAgICAg
ICAgbWF0Y2hFeGFjdENsYXNzTmFtZXMuY2FsbCh0aGlzLCBkb2MpOwotICAgICAgICAgICAgbWF0
Y2hFeGFjdFRhZ05hbWVzLmNhbGwodGhpcywgZG9jKTsKLSAgICAgICAgICAgIG1hdGNoRXhhY3RB
dHRyaWJ1dGVOYW1lcy5jYWxsKHRoaXMsIGRvYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbiBtYXRjaEV4YWN0SWQoZG9jKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCByZXN1
bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1lbnRCeUlkLmNhbGwoZG9jLCB3aGl0ZXNwYWNlVHJp
bW1lZFF1ZXJ5KTsKLSAgICAgICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVz
dWx0LCAocmVzdWx0ID8gMSA6IDApLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMgfSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtYXRjaEV4YWN0Q2xhc3NOYW1lcyhkb2MpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZ2V0RWxlbWVu
dHNCeUNsYXNzTmFtZS5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7Ci0gICAgICAg
ICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwg
cmVzdWx0Lml0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbWF0Y2hFeGFjdFRh
Z05hbWVzKGRvYykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9f
cHJvdG9fXy5nZXRFbGVtZW50c0J5VGFnTmFtZS5jYWxsKGRvYywgdGFnTmFtZVF1ZXJ5KTsKLSAg
ICAgICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQubGVu
Z3RoLCByZXN1bHQuaXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBtYXRjaEV4
YWN0QXR0cmlidXRlTmFtZXMoZG9jKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWF0dHJp
YnV0ZU5hbWVRdWVyeSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb25z
dCByZXN1bHQgPSBkb2MuX19wcm90b19fLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChkb2MsICJbIiAr
IGF0dHJpYnV0ZU5hbWVRdWVyeSArICJdIik7Ci0gICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0
cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gbWF0Y2hQYXJ0aWFsVGFnTmFtZXMoZG9jKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNh
bGwoZG9jLCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1ZXJ5ICsg
IicpXSIsIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUp
OwotICAgICAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3Vs
dC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBmdW5jdGlvbiBtYXRjaFN0YXJ0T2ZUYWdOYW1lcyhkb2MpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmICghdGFnTmFtZVF1ZXJ5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2FsbChkb2MsICIv
Lypbc3RhcnRzLXdpdGgobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVlcnkgKyAiJyldIiwg
ZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAg
ICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBz
aG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAgICAgICAgfQorICAgICAgICB0aGlz
Ll91cGRhdGVkTWF0Y2hDb3VudE9uY2UgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5fbWF0Y2hlc0Nv
dW50VXBkYXRlVGltZW91dCA9IG51bGw7CiAKLSAgICAgICAgZnVuY3Rpb24gbWF0Y2hQYXJ0aWFs
VGFnTmFtZXNBbmRBdHRyaWJ1dGVWYWx1ZXMoZG9jKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIXRhZ05hbWVRdWVyeSkgewotICAgICAgICAgICAgICAgIG1hdGNoUGFydGlhbEF0dHJpYnV0
ZVZhbHVlcy5jYWxsKHRoaXMsIGRvYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2YWx1
YXRlLmNhbGwoZG9jLCAiLy8qW2NvbnRhaW5zKG5hbWUoKSwgJyIgKyBlc2NhcGVkVGFnTmFtZVF1
ZXJ5ICsgIicpIG9yIGNvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRRdWVyeSArICInKV0iLCBkb2Ms
IG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKLSAgICAgICAg
ICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RM
ZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rp
b24gbWF0Y2hQYXJ0aWFsQXR0cmlidXRlVmFsdWVzKGRvYykKLSAgICAgICAgewotICAgICAgICAg
ICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vKltj
b250YWlucyhAKiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJl
c3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7Ci0gICAgICAgICAgICBhZGROb2Rlc1Rv
UmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQu
c25hcHNob3RJdGVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG1hdGNoU3R5bGVT
ZWxlY3Rvcihkb2MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5f
X3Byb3RvX18ucXVlcnlTZWxlY3RvckFsbC5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVy
eSk7Ci0gICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVz
dWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24g
bWF0Y2hQbGFpblRleHQoZG9jKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCByZXN1bHQg
PSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNhbGwoZG9jLCAiLy90ZXh0KClbY29udGFpbnMoLiwg
JyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIHwgLy9jb21tZW50KClbY29udGFpbnMoLiwgJyIgKyBl
c2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVf
U05BUFNIT1RfVFlQRSk7Ci0gICAgICAgICAgICBhZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMs
IHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3RoLCByZXN1bHQuc25hcHNob3RJdGVtKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIG1hdGNoWFBhdGhRdWVyeShkb2MpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2Fs
bChkb2MsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGRvYywgbnVsbCwgWFBhdGhSZXN1bHQuT1JE
RVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOwotICAgICAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMu
Y2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90
SXRlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBmaW5pc2hlZFNlYXJjaGluZygp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgc2VhcmNoUmVzdWx0c1Byb3Bl
cnR5IG5vdyB0aGF0IHRoZSBzZWFyY2ggaXMgZmluaXNoZWQuCi0gICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaFJlc3VsdHNbaV1bc2VhcmNoUmVzdWx0c1Byb3BlcnR5
XTsKLSAgICAgICAgfQorICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnBlcmZvcm1TZWFyY2go
d2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgZnVuY3Rpb24oKSB7fSk7CisgICAgfSwKIAotICAgICAg
ICBjb25zdCBtYWluRnJhbWVEb2N1bWVudCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVk
V2luZG93KCkuZG9jdW1lbnQ7Ci0gICAgICAgIGNvbnN0IHNlYXJjaERvY3VtZW50cyA9IFttYWlu
RnJhbWVEb2N1bWVudF07Ci0KLSAgICAgICAgaWYgKHRhZ05hbWVRdWVyeSAmJiBzdGFydFRhZ0Zv
dW5kICYmIGVuZFRhZ0ZvdW5kKQotICAgICAgICAgICAgY29uc3Qgc2VhcmNoRnVuY3Rpb25zID0g
W21hdGNoRXhhY3RUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOwotICAgICAgICBlbHNlIGlmICh0
YWdOYW1lUXVlcnkgJiYgc3RhcnRUYWdGb3VuZCkKLSAgICAgICAgICAgIGNvbnN0IHNlYXJjaEZ1
bmN0aW9ucyA9IFttYXRjaFN0YXJ0T2ZUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOwotICAgICAg
ICBlbHNlIGlmICh0YWdOYW1lUXVlcnkgJiYgZW5kVGFnRm91bmQpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIG1hdGNoRW5kT2ZUYWdOYW1lcyBzZWFyY2ggZnVuY3Rp
b24gaWYgZW5kVGFnRm91bmQgaXMgdHJ1ZSBidXQgbm90IHN0YXJ0VGFnRm91bmQuCi0gICAgICAg
ICAgICAvLyBUaGlzIHJlcXVpcmVzIGVuZHMtd2l0aCgpIHN1cHBvcnQgaW4gWFBhdGgsIFdlYktp
dCBvbmx5IHN1cHBvcnRzIHN0YXJ0cy13aXRoKCkgYW5kIGNvbnRhaW5zKCkuCi0gICAgICAgICAg
ICBjb25zdCBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hQYXJ0aWFsVGFnTmFtZXMsIG1hdGNoUGxh
aW5UZXh0XTsKLSAgICAgICAgfSBlbHNlIGlmICh3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5ID09PSAi
Ly8qIiB8fCB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5ID09PSAiKiIpIHsKLSAgICAgICAgICAgIC8v
IFRoZXNlIHF1ZXJpZXMgd2lsbCBtYXRjaCBldmVyeSBub2RlLiBNYXRjaGluZyBldmVyeXRoaW5n
IGlzbid0IHVzZWZ1bCBhbmQgY2FuIGJlIHNsb3cgZm9yIGxhcmdlIHBhZ2VzLAotICAgICAgICAg
ICAgLy8gc28gbGltaXQgdGhlIHNlYXJjaCBmdW5jdGlvbnMgbGlzdCB0byBwbGFpbiB0ZXh0IGFu
ZCBhdHRyaWJ1dGUgbWF0Y2hpbmcuCi0gICAgICAgICAgICBjb25zdCBzZWFyY2hGdW5jdGlvbnMg
PSBbbWF0Y2hQYXJ0aWFsQXR0cmlidXRlVmFsdWVzLCBtYXRjaFBsYWluVGV4dF07Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY29uc3Qgc2VhcmNoRnVuY3Rpb25zID0gW21hdGNoRXhhY3RJ
dGVtcywgbWF0Y2hTdHlsZVNlbGVjdG9yLCBtYXRjaFBhcnRpYWxUYWdOYW1lc0FuZEF0dHJpYnV0
ZVZhbHVlcywgbWF0Y2hQbGFpblRleHQsIG1hdGNoWFBhdGhRdWVyeV07Ci0KLSAgICAgICAgLy8g
RmluZCBhbGwgZnJhbWVzLCBpZnJhbWVzIGFuZCBvYmplY3QgZWxlbWVudHMgdG8gc2VhcmNoIHRo
ZWlyIGRvY3VtZW50cy4KLSAgICAgICAgY29uc3QgcXVlcnlTZWxlY3RvckFsbEZ1bmN0aW9uID0g
SW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKS5Eb2N1bWVudC5wcm90b3R5cGUu
cXVlcnlTZWxlY3RvckFsbDsKLSAgICAgICAgY29uc3Qgc3ViZG9jdW1lbnRSZXN1bHQgPSBxdWVy
eVNlbGVjdG9yQWxsRnVuY3Rpb24uY2FsbChtYWluRnJhbWVEb2N1bWVudCwgImlmcmFtZSwgZnJh
bWUsIG9iamVjdCIpOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ViZG9jdW1lbnRS
ZXN1bHQubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBlbGVtZW50ID0gc3ViZG9jdW1l
bnRSZXN1bHQuaXRlbShpKTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LmNvbnRlbnREb2N1bWVu
dCkKLSAgICAgICAgICAgICAgICBzZWFyY2hEb2N1bWVudHMucHVzaChlbGVtZW50LmNvbnRlbnRE
b2N1bWVudCk7Ci0gICAgICAgIH0KKyAgICBfdXBkYXRlTWF0Y2hlc0NvdW50OiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KHRo
aXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoLCB0aGlzKTsKKyAgICAgICAgdGhpcy5fbWF0Y2hlc0Nv
dW50VXBkYXRlVGltZW91dCA9IG51bGw7CisgICAgICAgIHRoaXMuX3VwZGF0ZWRNYXRjaENvdW50
T25jZSA9IHRydWU7CisgICAgfSwKIAotICAgICAgICBjb25zdCBwYW5lbCA9IHRoaXM7Ci0gICAg
ICAgIHZhciBkb2N1bWVudEluZGV4ID0gMDsKLSAgICAgICAgdmFyIHNlYXJjaEZ1bmN0aW9uSW5k
ZXggPSAwOwotICAgICAgICB2YXIgY2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPSBudWxsOworICAg
IF91cGRhdGVNYXRjaGVzQ291bnRTb29uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAo
IXRoaXMuX3VwZGF0ZWRNYXRjaENvdW50T25jZSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl91
cGRhdGVNYXRjaGVzQ291bnQoKTsKKyAgICAgICAgaWYgKHRoaXMuX21hdGNoZXNDb3VudFVwZGF0
ZVRpbWVvdXQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIFVwZGF0ZSB0aGUgbWF0
Y2hlcyBjb3VudCBldmVyeSBoYWxmLXNlY29uZCBzbyBpdCBkb2Vzbid0IGZlZWwgdHdpdGNoeS4K
KyAgICAgICAgdGhpcy5fbWF0Y2hlc0NvdW50VXBkYXRlVGltZW91dCA9IHNldFRpbWVvdXQodGhp
cy5fdXBkYXRlTWF0Y2hlc0NvdW50LmJpbmQodGhpcyksIDUwMCk7CisgICAgfSwKIAotICAgICAg
ICAvLyBTcGxpdCB1cCB0aGUgd29yayBpbnRvIGNodW5rcyBzbyB3ZSBkb24ndCBibG9jayB0aGUg
VUkgdGhyZWFkIHdoaWxlIHByb2Nlc3NpbmcuCisgICAgYWRkTm9kZXNUb1NlYXJjaFJlc3VsdDog
ZnVuY3Rpb24obm9kZUlkcykKKyAgICB7CisgICAgICAgIGlmICghbm9kZUlkcykKKyAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBmdW5jdGlvbiBwcm9jZXNzQ2h1bmsoKQotICAgICAgICB7
Ci0gICAgICAgICAgICB2YXIgc2VhcmNoRG9jdW1lbnQgPSBzZWFyY2hEb2N1bWVudHNbZG9jdW1l
bnRJbmRleF07Ci0gICAgICAgICAgICB2YXIgc2VhcmNoRnVuY3Rpb24gPSBzZWFyY2hGdW5jdGlv
bnNbc2VhcmNoRnVuY3Rpb25JbmRleF07Ci0KLSAgICAgICAgICAgIGlmICgrK3NlYXJjaEZ1bmN0
aW9uSW5kZXggPiBzZWFyY2hGdW5jdGlvbnMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgc2Vh
cmNoRnVuY3Rpb24gPSBzZWFyY2hGdW5jdGlvbnNbMF07Ci0gICAgICAgICAgICAgICAgc2VhcmNo
RnVuY3Rpb25JbmRleCA9IDA7Ci0KLSAgICAgICAgICAgICAgICBpZiAoKytkb2N1bWVudEluZGV4
ID4gc2VhcmNoRG9jdW1lbnRzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAocGFu
ZWwuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllciA9PT0gY2h1bmtJbnRlcnZh
bElkZW50aWZpZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFuZWwuX2N1cnJl
bnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcjsKLSAgICAgICAgICAgICAgICAgICAgY2xl
YXJJbnRlcnZhbChjaHVua0ludGVydmFsSWRlbnRpZmllcik7Ci0gICAgICAgICAgICAgICAgICAg
IGZpbmlzaGVkU2VhcmNoaW5nLmNhbGwocGFuZWwpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICB2YXIgbm9kZUlkc0FycmF5ID0gbm9kZUlk
cy5zcGxpdCgiLCIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVJZHNBcnJheS5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIG5vZGVJZCA9IG5vZGVJZHNBcnJheVtpXTsK
KyAgICAgICAgICAgIHZhciBub2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChu
b2RlSWQpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgICAgICAgICAgc2VhcmNoRG9jdW1lbnQgPSBzZWFyY2hEb2N1bWVudHNbZG9j
dW1lbnRJbmRleF07CisgICAgICAgICAgICBpZiAoIXRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaFJlc3VsdEluZGV4ID0gMDsK
KyAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRET01Ob2RlID0gbm9kZTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFzZWFyY2hEb2N1bWVudCB8fCAhc2VhcmNoRnVuY3Rpb24p
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgdGhpcy5fc2VhcmNoUmVzdWx0
cy5wdXNoKG5vZGUpOwogCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHNlYXJj
aEZ1bmN0aW9uLmNhbGwocGFuZWwsIHNlYXJjaERvY3VtZW50KTsKLSAgICAgICAgICAgIH0gY2F0
Y2goZXJyKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWdub3JlIGFueSBleGNlcHRpb25zLiB0aGUg
cXVlcnkgbWlnaHQgYmUgbWFsZm9ybWVkLCBidXQgd2UgYWxsb3cgdGhhdC4KLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUgdHJlZSBlbGVtZW50IHRvIHNob3cgaXQg
bWF0Y2hlZCB0aGUgc2VhcmNoLgorICAgICAgICAgICAgLy8gRklYTUU6IGhpZ2hsaWdodCB0aGUg
c3Vic3RyaW5ncyBpbiB0ZXh0IG5vZGVzIGFuZCBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgdmFy
IHRyZWVFbGVtZW50ID0gdGhpcy50cmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQobm9kZSk7Cisg
ICAgICAgICAgICBpZiAodHJlZUVsZW1lbnQpCisgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQu
aGlnaGxpZ2h0ZWQgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgcHJvY2Vzc0NodW5rKCk7
Ci0KLSAgICAgICAgY2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPSBzZXRJbnRlcnZhbChwcm9jZXNz
Q2h1bmssIDI1KTsKLSAgICAgICAgdGhpcy5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVu
dGlmaWVyID0gY2h1bmtJbnRlcnZhbElkZW50aWZpZXI7CisgICAgICAgIHRoaXMuX3VwZGF0ZU1h
dGNoZXNDb3VudFNvb24oKTsKICAgICB9LAogCiAgICAganVtcFRvTmV4dFNlYXJjaFJlc3VsdDog
ZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzVHJlZU91dGxpbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNU
cmVlT3V0bGluZS5qcwppbmRleCBlZjUzMjA5Li4zYTFkYjY5IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwpAQCAtODMsNyArODMs
NyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB0aGlzLmZvY3VzZWROb2RlQ2hhbmdlZCgpOwogCiAgICAgICAgICAgICBpZiAoeCAm
JiAhdGhpcy5zdXBwcmVzc1NlbGVjdEhpZ2hsaWdodCkgewotICAgICAgICAgICAgICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIuaGlnaGxpZ2h0RE9NTm9kZSh4KTsKKyAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JDb250cm9sbGVyLmhpZ2hsaWdodERPTU5vZGUoeC5pZCk7CiAKICAgICAgICAgICAgICAg
ICBpZiAoIl9yZXN0b3JlUHJldmlvdXNIaWdobGlnaHROb2RlVGltZW91dCIgaW4gdGhpcykKICAg
ICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc3RvcmVQcmV2aW91c0hpZ2hs
aWdodE5vZGVUaW1lb3V0KTsKQEAgLTkyLDcgKzkyLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRz
VHJlZU91dGxpbmUucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgdmFyIGhvdmVyZWROb2RlID0gV2ViSW5zcGVjdG9yLmhvdmVyZWRET01Ob2RlOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoaG92ZXJlZE5vZGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmhpZ2hsaWdodERPTU5vZGUoaG92ZXJlZE5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5oaWdobGlnaHRET01O
b2RlKGhvdmVyZWROb2RlLmlkKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5oaWRlRE9NTm9kZUhpZ2hsaWdodCgp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTM4Nyw5ICszODcsMTQgQEAgV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMudXBkYXRlQ2hp
bGRyZW4oKTsKICAgICB9LAotCisgICAgCiAgICAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uKGZ1
bGxSZWZyZXNoKQogICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmdldENoaWxk
Tm9kZXNBc3luYyh0aGlzLnJlcHJlc2VudGVkT2JqZWN0LCB0aGlzLl91cGRhdGVDaGlsZHJlbi5i
aW5kKHRoaXMsIGZ1bGxSZWZyZXNoKSk7CisgICAgfSwKKworICAgIF91cGRhdGVDaGlsZHJlbjog
ZnVuY3Rpb24oZnVsbFJlZnJlc2gpCisgICAgewogICAgICAgICBpZiAoZnVsbFJlZnJlc2gpIHsK
ICAgICAgICAgICAgIHZhciBzZWxlY3RlZFRyZWVFbGVtZW50ID0gdGhpcy50cmVlT3V0bGluZS5z
ZWxlY3RlZFRyZWVFbGVtZW50OwogICAgICAgICAgICAgaWYgKHNlbGVjdGVkVHJlZUVsZW1lbnQg
JiYgc2VsZWN0ZWRUcmVlRWxlbWVudC5oYXNBbmNlc3Rvcih0aGlzKSkKQEAgLTY5Myw3ICs2OTgs
NyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoIXBhcnNlRWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkuRWxlbWVudC5w
cm90b3R5cGUucmVtb3ZlQXR0cmlidXRlLmNhbGwodGhpcy5yZXByZXNlbnRlZE9iamVjdCwgYXR0
cmlidXRlTmFtZSk7CisgICAgICAgICAgICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LnJlbW92ZUF0
dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTsKICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpdGxlKCk7
CiAgICAgICAgICAgICBtb3ZlVG9OZXh0QXR0cmlidXRlSWZOZWVkZWQuY2FsbCh0aGlzKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTcwNCwxMiArNzA5LDEyIEBAIFdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciBhdHRyID0gcGFy
c2VFbGVtZW50LmF0dHJpYnV0ZXNbaV07CiAgICAgICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmli
dXRlID0gZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSB8fCBhdHRyLm5hbWUgPT09IGF0dHJpYnV0ZU5h
bWU7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xs
ZXIuaW5zcGVjdGVkV2luZG93KCkuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlLmNhbGwo
dGhpcy5yZXByZXNlbnRlZE9iamVjdCwgYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0
dHIudmFsdWUpOwogICAgICAgICAgICAgfSBjYXRjaChlKSB7fSAvLyBpZ25vcmUgaW52YWxpZCBh
dHRyaWJ1dGUgKGlubmVySFRNTCBkb2Vzbid0IHRocm93IGVycm9ycywgYnV0IHRoaXMgY2FuKQog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlKQotICAgICAg
ICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKS5FbGVtZW50LnByb3Rv
dHlwZS5yZW1vdmVBdHRyaWJ1dGUuY2FsbCh0aGlzLnJlcHJlc2VudGVkT2JqZWN0LCBhdHRyaWJ1
dGVOYW1lKTsKKyAgICAgICAgICAgIHRoaXMucmVwcmVzZW50ZWRPYmplY3QucmVtb3ZlQXR0cmli
dXRlKGF0dHJpYnV0ZU5hbWUpOwogCiAgICAgICAgIHRoaXMuX3VwZGF0ZVRpdGxlKCk7CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwppbmRleCA0NjEx
YjQ4Li45NTU0ODA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5q
ZWN0ZWRTY3JpcHQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVk
U2NyaXB0LmpzCkBAIC0zMSw3ICszMSw5IEBAIHZhciBJbmplY3RlZFNjcmlwdCA9IHsKICAgICBf
c3R5bGVzOiB7fSwKICAgICBfc3R5bGVSdWxlczoge30sCiAgICAgX2xhc3RTdHlsZUlkOiAwLAot
ICAgIF9sYXN0U3R5bGVSdWxlSWQ6IDAKKyAgICBfbGFzdFN0eWxlUnVsZUlkOiAwLAorICAgIF9z
ZWFyY2hSZXN1bHRzOiBbXSwKKyAgICBfaW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5h
bWU6ICJfX2luY2x1ZGVkSW5JbnNwZWN0b3JTZWFyY2hSZXN1bHRzIgogfTsKIAogSW5qZWN0ZWRT
Y3JpcHQuZ2V0U3R5bGVzID0gZnVuY3Rpb24obm9kZUlkLCBhdXRob3JPbmx5KQpAQCAtMTc0LDEy
ICsxNzYsMTQgQEAgSW5qZWN0ZWRTY3JpcHQudG9nZ2xlU3R5bGVFbmFibGVkID0gZnVuY3Rpb24o
c3R5bGVJZCwgcHJvcGVydHlOYW1lLCBkaXNhYmxlZCkKICAgICByZXR1cm4gSW5qZWN0ZWRTY3Jp
cHQuX3NlcmlhbGl6ZVN0eWxlKHN0eWxlLCB0cnVlKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQuYXBw
bHlTdHlsZVJ1bGVUZXh0ID0gZnVuY3Rpb24ocnVsZUlkLCBuZXdDb250ZW50LCBzZWxlY3RlZE5v
ZGUpCitJbmplY3RlZFNjcmlwdC5hcHBseVN0eWxlUnVsZVRleHQgPSBmdW5jdGlvbihydWxlSWQs
IG5ld0NvbnRlbnQsIHNlbGVjdGVkTm9kZUlkKQogewogICAgIHZhciBydWxlID0gSW5qZWN0ZWRT
Y3JpcHQuX3N0eWxlUnVsZXNbcnVsZUlkXTsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIHZhciBzZWxlY3RlZE5vZGUgPSBJbmplY3RlZFNjcmlwdC5fbm9kZUZv
cklkKHNlbGVjdGVkTm9kZUlkKTsKKwogICAgIHRyeSB7CiAgICAgICAgIHZhciBzdHlsZXNoZWV0
ID0gcnVsZS5wYXJlbnRTdHlsZVNoZWV0OwogICAgICAgICBzdHlsZXNoZWV0LmFkZFJ1bGUobmV3
Q29udGVudCk7CkBAIC0xOTQsMjAgKzE5OCwxNCBAQCBJbmplY3RlZFNjcmlwdC5hcHBseVN0eWxl
UnVsZVRleHQgPSBmdW5jdGlvbihydWxlSWQsIG5ld0NvbnRlbnQsIHNlbGVjdGVkTm9kZSkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHZhciBub2RlcyA9IHNlbGVjdGVkTm9k
ZS5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwobmV3Q29udGVudCk7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChu
b2Rlc1tpXSA9PT0gc2VsZWN0ZWROb2RlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtJbmpl
Y3RlZFNjcmlwdC5fc2VyaWFsaXplUnVsZShuZXdSdWxlKSwgdHJ1ZV07Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFtJbmplY3RlZFNjcmlwdC5fc2VyaWFsaXplUnVs
ZShuZXdSdWxlKSwgZmFsc2VdOworICAgICAgICByZXR1cm4gW0luamVjdGVkU2NyaXB0Ll9zZXJp
YWxpemVSdWxlKG5ld1J1bGUpLCBJbmplY3RlZFNjcmlwdC5fZG9lc1NlbGVjdG9yQWZmZWN0Tm9k
ZShuZXdDb250ZW50LCBzZWxlY3RlZE5vZGUpXTsKICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAg
Ly8gUmVwb3J0IGludmFsaWQgc3ludGF4LgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
fQogCi1JbmplY3RlZFNjcmlwdC5hZGRTdHlsZVNlbGVjdG9yID0gZnVuY3Rpb24obmV3Q29udGVu
dCkKK0luamVjdGVkU2NyaXB0LmFkZFN0eWxlU2VsZWN0b3IgPSBmdW5jdGlvbihuZXdDb250ZW50
LCBzZWxlY3RlZE5vZGVJZCkKIHsKICAgICB2YXIgc3R5bGVzaGVldCA9IEluamVjdGVkU2NyaXB0
LnN0eWxlc2hlZXQ7CiAgICAgaWYgKCFzdHlsZXNoZWV0KSB7CkBAIC0yMjcsNyArMjI1LDIyIEBA
IEluamVjdGVkU2NyaXB0LmFkZFN0eWxlU2VsZWN0b3IgPSBmdW5jdGlvbihuZXdDb250ZW50KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIEluamVjdGVkU2NyaXB0
Ll9zZXJpYWxpemVSdWxlKHN0eWxlc2hlZXQuY3NzUnVsZXNbc3R5bGVzaGVldC5jc3NSdWxlcy5s
ZW5ndGggLSAxXSk7CisgICAgdmFyIHNlbGVjdGVkTm9kZSA9IEluamVjdGVkU2NyaXB0Ll9ub2Rl
Rm9ySWQoc2VsZWN0ZWROb2RlSWQpOworCisgICAgcmV0dXJuIFsgSW5qZWN0ZWRTY3JpcHQuX3Nl
cmlhbGl6ZVJ1bGUoc3R5bGVzaGVldC5jc3NSdWxlc1tzdHlsZXNoZWV0LmNzc1J1bGVzLmxlbmd0
aCAtIDFdKSwgSW5qZWN0ZWRTY3JpcHQuX2RvZXNTZWxlY3RvckFmZmVjdE5vZGUobmV3Q29udGVu
dCwgc2VsZWN0ZWROb2RlKSBdOworfQorCitJbmplY3RlZFNjcmlwdC5fZG9lc1NlbGVjdG9yQWZm
ZWN0Tm9kZSA9IGZ1bmN0aW9uKHNlbGVjdG9yVGV4dCwgbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2YXIgbm9kZXMgPSBub2RlLm93bmVyRG9jdW1l
bnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvclRleHQpOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbm9kZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKG5vZGVzW2ldID09PSBub2RlKSB7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIEluamVjdGVkU2NyaXB0LnNldFN0eWxlUHJvcGVydHkgPSBmdW5jdGlvbihz
dHlsZUlkLCBuYW1lLCB2YWx1ZSkgewpAQCAtMjU3LDExICsyNzAsMTEgQEAgSW5qZWN0ZWRTY3Jp
cHQuX3NlcmlhbGl6ZVJ1bGUgPSBmdW5jdGlvbihydWxlKQogICAgIHJ1bGVWYWx1ZS5zdHlsZSA9
IEluamVjdGVkU2NyaXB0Ll9zZXJpYWxpemVTdHlsZShydWxlLnN0eWxlLCBkb0JpbmQpOwogCiAg
ICAgaWYgKGRvQmluZCkgewotICAgICAgICBpZiAoIXJ1bGUuX2lkKSB7Ci0gICAgICAgICAgICBy
dWxlLl9pZCA9IEluamVjdGVkU2NyaXB0Ll9sYXN0U3R5bGVSdWxlSWQrKzsKLSAgICAgICAgICAg
IEluamVjdGVkU2NyaXB0Ll9zdHlsZVJ1bGVzW3J1bGUuX2lkXSA9IHJ1bGU7CisgICAgICAgIGlm
ICghcnVsZS5pZCkgeworICAgICAgICAgICAgcnVsZS5pZCA9IEluamVjdGVkU2NyaXB0Ll9sYXN0
U3R5bGVSdWxlSWQrKzsKKyAgICAgICAgICAgIEluamVjdGVkU2NyaXB0Ll9zdHlsZVJ1bGVzW3J1
bGUuaWRdID0gcnVsZTsKICAgICAgICAgfQotICAgICAgICBydWxlVmFsdWUuaWQgPSBydWxlLl9p
ZDsKKyAgICAgICAgcnVsZVZhbHVlLmlkID0gcnVsZS5pZDsKICAgICB9CiAgICAgcmV0dXJuIHJ1
bGVWYWx1ZTsKIH0KQEAgLTI5NSwxMSArMzA4LDExIEBAIEluamVjdGVkU2NyaXB0Ll9zZXJpYWxp
emVTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlLCBkb0JpbmQpCiAgICAgcmVzdWx0LnVuaXF1ZVN0eWxl
UHJvcGVydGllcyA9IEluamVjdGVkU2NyaXB0Ll9nZXRVbmlxdWVTdHlsZVByb3BlcnRpZXMoc3R5
bGUpOwogCiAgICAgaWYgKGRvQmluZCkgewotICAgICAgICBpZiAoIXN0eWxlLl9pZCkgewotICAg
ICAgICAgICAgc3R5bGUuX2lkID0gSW5qZWN0ZWRTY3JpcHQuX2xhc3RTdHlsZUlkKys7Ci0gICAg
ICAgICAgICBJbmplY3RlZFNjcmlwdC5fc3R5bGVzW3N0eWxlLl9pZF0gPSBzdHlsZTsKKyAgICAg
ICAgaWYgKCFzdHlsZS5pZCkgeworICAgICAgICAgICAgc3R5bGUuaWQgPSBJbmplY3RlZFNjcmlw
dC5fbGFzdFN0eWxlSWQrKzsKKyAgICAgICAgICAgIEluamVjdGVkU2NyaXB0Ll9zdHlsZXNbc3R5
bGUuaWRdID0gc3R5bGU7CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmlkID0gc3R5bGUuX2lk
OworICAgICAgICByZXN1bHQuaWQgPSBzdHlsZS5pZDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTQwNSw2ICs0MTgsNyBAQCBJbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzID0g
ZnVuY3Rpb24ob2JqZWN0UHJveHksIGlnbm9yZUhhc093blByb3BlcnR5KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICB2YXIgcHJvcGVydGllcyA9IFtdOworCiAgICAgLy8gR28gb3ZlciBw
cm9wZXJ0aWVzLCBwcmVwYXJlIHJlc3VsdHMuCiAgICAgZm9yICh2YXIgcHJvcGVydHlOYW1lIGlu
IG9iamVjdCkgewogICAgICAgICBpZiAoIWlnbm9yZUhhc093blByb3BlcnR5ICYmICJoYXNPd25Q
cm9wZXJ0eSIgaW4gb2JqZWN0ICYmICFvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1l
KSkKQEAgLTQxNSwyOSArNDI5LDMxIEBAIEluamVjdGVkU2NyaXB0LmdldFByb3BlcnRpZXMgPSBm
dW5jdGlvbihvYmplY3RQcm94eSwgaWdub3JlSGFzT3duUHJvcGVydHkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgdmFyIHByb3BlcnR5ID0ge307CiAgICAgICAgIHByb3BlcnR5Lm5h
bWUgPSBwcm9wZXJ0eU5hbWU7CisgICAgICAgIHByb3BlcnR5LnBhcmVudE9iamVjdFByb3h5ID0g
b2JqZWN0UHJveHk7CiAgICAgICAgIHZhciBpc0dldHRlciA9IG9iamVjdFsiX19sb29rdXBHZXR0
ZXJfXyJdICYmIG9iamVjdC5fX2xvb2t1cEdldHRlcl9fKHByb3BlcnR5TmFtZSk7CiAgICAgICAg
IGlmICghcHJvcGVydHkuaXNHZXR0ZXIpIHsKICAgICAgICAgICAgIHZhciBjaGlsZE9iamVjdCA9
IG9iamVjdFtwcm9wZXJ0eU5hbWVdOwotICAgICAgICAgICAgcHJvcGVydHkudHlwZSA9IHR5cGVv
ZiBjaGlsZE9iamVjdDsKLSAgICAgICAgICAgIHByb3BlcnR5LnRleHRDb250ZW50ID0gT2JqZWN0
LmRlc2NyaWJlKGNoaWxkT2JqZWN0LCB0cnVlKTsKLSAgICAgICAgICAgIHByb3BlcnR5LnBhcmVu
dE9iamVjdFByb3h5ID0gb2JqZWN0UHJveHk7Ci0gICAgICAgICAgICB2YXIgcGFyZW50UGF0aCA9
IG9iamVjdFByb3h5LnBhdGguc2xpY2UoKTsKLSAgICAgICAgICAgIHByb3BlcnR5LmNoaWxkT2Jq
ZWN0UHJveHkgPSB7Ci0gICAgICAgICAgICAgICAgb2JqZWN0SWQgOiBvYmplY3RQcm94eS5vYmpl
Y3RJZCwKLSAgICAgICAgICAgICAgICBwYXRoIDogcGFyZW50UGF0aC5zcGxpY2UocGFyZW50UGF0
aC5sZW5ndGgsIDAsIHByb3BlcnR5TmFtZSksCi0gICAgICAgICAgICAgICAgcHJvdG9EZXB0aCA6
IG9iamVjdFByb3h5LnByb3RvRGVwdGgKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpZiAo
Y2hpbGRPYmplY3QgJiYgKHByb3BlcnR5LnR5cGUgPT09ICJvYmplY3QiIHx8IHByb3BlcnR5LnR5
cGUgPT09ICJmdW5jdGlvbiIpKSB7CisgICAgICAgICAgICB2YXIgY2hpbGRPYmplY3RQcm94eSA9
IHt9OworICAgICAgICAgICAgY2hpbGRPYmplY3RQcm94eS5vYmplY3RJZCA9IG9iamVjdFByb3h5
Lm9iamVjdElkOworICAgICAgICAgICAgY2hpbGRPYmplY3RQcm94eS5wYXRoID0gb2JqZWN0UHJv
eHkucGF0aCA/IG9iamVjdFByb3h5LnBhdGguc2xpY2UoKSA6IFtdOworICAgICAgICAgICAgY2hp
bGRPYmplY3RQcm94eS5wYXRoLnB1c2gocHJvcGVydHlOYW1lKTsKKworICAgICAgICAgICAgY2hp
bGRPYmplY3RQcm94eS5wcm90b0RlcHRoID0gb2JqZWN0UHJveHkucHJvdG9EZXB0aCB8fCAwOwor
ICAgICAgICAgICAgY2hpbGRPYmplY3RQcm94eS5kZXNjcmlwdGlvbiA9IE9iamVjdC5kZXNjcmli
ZShjaGlsZE9iamVjdCwgdHJ1ZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS52YWx1ZSA9IGNoaWxk
T2JqZWN0UHJveHk7CisKKyAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkT2JqZWN0
OworICAgICAgICAgICAgaWYgKHR5cGUgPT09ICJvYmplY3QiIHx8IHR5cGUgPT09ICJmdW5jdGlv
biIpIHsKICAgICAgICAgICAgICAgICBmb3IgKHZhciBzdWJQcm9wZXJ0eU5hbWUgaW4gY2hpbGRP
YmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gIl9fdHJl
ZUVsZW1lbnRJZGVudGlmaWVyIikKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5oYXNDaGlsZHJlbiA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkT2JqZWN0UHJveHkuaGFzQ2hpbGRyZW4gPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgc2hvdyBz
b21ldGhpbmcgbGlrZSAiZ2V0dGVyIiAoYnVnIDE2NzM0KS4KLSAgICAgICAgICAgIHByb3BlcnR5
LnRleHRDb250ZW50ID0gIlx1MjAxNCI7IC8vIGVtIGRhc2gKKyAgICAgICAgICAgIHByb3BlcnR5
LnZhbHVlID0geyBkZXNjcmlwdGlvbjogIlx1MjAxNCIgfTsgLy8gZW0gZGFzaAogICAgICAgICAg
ICAgcHJvcGVydHkuaXNHZXR0ZXIgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHByb3BlcnRp
ZXMucHVzaChwcm9wZXJ0eSk7CkBAIC00NzksNiArNDk1LDMyOSBAQCBJbmplY3RlZFNjcmlwdC5z
ZXRQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIHByb3BlcnR5TmFtZSwgZXhw
cmVzc2lvbgogICAgIH0KIH0KIAorSW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUgPSBmdW5jdGlvbihl
eHByZXNzaW9uKQoreworICAgIEluamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUlu
c3RhbGxlZCgpOworICAgIC8vIFN1cnJvdW5kIHRoZSBleHByZXNzaW9uIGluIHdpdGggc3RhdGVt
ZW50cyB0byBpbmplY3Qgb3VyIGNvbW1hbmQgbGluZSBBUEkgc28gdGhhdAorICAgIC8vIHRoZSB3
aW5kb3cgb2JqZWN0IHByb3BlcnRpZXMgc3RpbGwgdGFrZSBtb3JlIHByZWNlZGVudCB0aGFuIG91
ciBBUEkgZnVuY3Rpb25zLgorICAgIGV4cHJlc3Npb24gPSAid2l0aCAod2luZG93Ll9pbnNwZWN0
b3JDb21tYW5kTGluZUFQSSkgeyB3aXRoICh3aW5kb3cpIHsgIiArIGV4cHJlc3Npb24gKyAiIH0g
fSI7CisKKyAgICB2YXIgcmVzdWx0ID0ge307CisgICAgdHJ5IHsKKyAgICAgICAgdmFyIHZhbHVl
ID0gSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLmV2YWwoZXhwcmVzc2lvbik7CisgICAgICAgIHJl
c3VsdC52YWx1ZSA9IEluc3BlY3RvckNvbnRyb2xsZXIud3JhcE9iamVjdCh2YWx1ZSk7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICByZXN1bHQuZXhjZXB0aW9uID0gZS50b1N0cmluZygpOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbmplY3RlZFNjcmlwdC5hZGRJbnNwZWN0
ZWROb2RlID0gZnVuY3Rpb24obm9kZUlkKQoreworICAgIHZhciBub2RlID0gSW5qZWN0ZWRTY3Jp
cHQuX25vZGVGb3JJZChub2RlSWQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgSW5qZWN0ZWRTY3JpcHQuX2Vuc3VyZUNvbW1hbmRMaW5lQVBJSW5zdGFsbGVk
KCk7CisgICAgdmFyIGluc3BlY3RlZE5vZGVzID0gSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpLl9p
bnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXM7CisgICAgaW5zcGVjdGVkTm9k
ZXMudW5zaGlmdChub2RlKTsKKyAgICBpZiAoaW5zcGVjdGVkTm9kZXMubGVuZ3RoID49IDUpCisg
ICAgICAgIGluc3BlY3RlZE5vZGVzLnBvcCgpOworICAgIHJldHVybiB0cnVlOworfQorCitJbmpl
Y3RlZFNjcmlwdC5wZXJmb3JtU2VhcmNoID0gZnVuY3Rpb24od2hpdGVzcGFjZVRyaW1tZWRRdWVy
eSwgc2VhcmNoUmVzdWx0c1Byb3BlcnR5KQoreworICAgIHZhciB0YWdOYW1lUXVlcnkgPSB3aGl0
ZXNwYWNlVHJpbW1lZFF1ZXJ5OworICAgIHZhciBhdHRyaWJ1dGVOYW1lUXVlcnkgPSB3aGl0ZXNw
YWNlVHJpbW1lZFF1ZXJ5OworICAgIHZhciBzdGFydFRhZ0ZvdW5kID0gKHRhZ05hbWVRdWVyeS5p
bmRleE9mKCI8IikgPT09IDApOworICAgIHZhciBlbmRUYWdGb3VuZCA9ICh0YWdOYW1lUXVlcnku
bGFzdEluZGV4T2YoIj4iKSA9PT0gKHRhZ05hbWVRdWVyeS5sZW5ndGggLSAxKSk7CisKKyAgICBp
ZiAoc3RhcnRUYWdGb3VuZCB8fCBlbmRUYWdGb3VuZCkgeworICAgICAgICB2YXIgdGFnTmFtZVF1
ZXJ5TGVuZ3RoID0gdGFnTmFtZVF1ZXJ5Lmxlbmd0aDsKKyAgICAgICAgdGFnTmFtZVF1ZXJ5ID0g
dGFnTmFtZVF1ZXJ5LnN1YnN0cmluZygoc3RhcnRUYWdGb3VuZCA/IDEgOiAwKSwgKGVuZFRhZ0Zv
dW5kID8gKHRhZ05hbWVRdWVyeUxlbmd0aCAtIDEpIDogdGFnTmFtZVF1ZXJ5TGVuZ3RoKSk7Cisg
ICAgfQorCisgICAgLy8gQ2hlY2sgdGhlIHRhZ05hbWVRdWVyeSBpcyBpdCBpcyBhIHBvc3NpYmx5
IHZhbGlkIHRhZyBuYW1lLgorICAgIGlmICghL15bYS16QS1aMC05XC1fOl0rJC8udGVzdCh0YWdO
YW1lUXVlcnkpKQorICAgICAgICB0YWdOYW1lUXVlcnkgPSBudWxsOworCisgICAgLy8gQ2hlY2sg
dGhlIGF0dHJpYnV0ZU5hbWVRdWVyeSBpcyBpdCBpcyBhIHBvc3NpYmx5IHZhbGlkIHRhZyBuYW1l
LgorICAgIGlmICghL15bYS16QS1aMC05XC1fOl0rJC8udGVzdChhdHRyaWJ1dGVOYW1lUXVlcnkp
KQorICAgICAgICBhdHRyaWJ1dGVOYW1lUXVlcnkgPSBudWxsOworCisgICAgY29uc3QgZXNjYXBl
ZFF1ZXJ5ID0gd2hpdGVzcGFjZVRyaW1tZWRRdWVyeS5lc2NhcGVDaGFyYWN0ZXJzKCInIik7Cisg
ICAgY29uc3QgZXNjYXBlZFRhZ05hbWVRdWVyeSA9ICh0YWdOYW1lUXVlcnkgPyB0YWdOYW1lUXVl
cnkuZXNjYXBlQ2hhcmFjdGVycygiJyIpIDogbnVsbCk7CisgICAgY29uc3QgZXNjYXBlZFdoaXRl
c3BhY2VUcmltbWVkUXVlcnkgPSB3aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5LmVzY2FwZUNoYXJhY3Rl
cnMoIiciKTsKKyAgICBjb25zdCBzZWFyY2hSZXN1bHRzUHJvcGVydHkgPSBJbmplY3RlZFNjcmlw
dC5faW5jbHVkZWRJblNlYXJjaFJlc3VsdHNQcm9wZXJ0eU5hbWU7CisKKyAgICBmdW5jdGlvbiBh
ZGROb2Rlc1RvUmVzdWx0cyhub2RlcywgbGVuZ3RoLCBnZXRJdGVtKQorICAgIHsKKyAgICAgICAg
aWYgKCFsZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIG5vZGVJZHMg
PSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgdmFyIG5vZGUgPSBnZXRJdGVtLmNhbGwobm9kZXMsIGkpOworICAgICAgICAgICAgLy8g
U2tpcCB0aGlzIG5vZGUgaWYgaXQgYWxyZWFkeSBoYXMgdGhlIHByb3BlcnR5LgorICAgICAgICAg
ICAgaWYgKHNlYXJjaFJlc3VsdHNQcm9wZXJ0eSBpbiBub2RlKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICBpZiAoIUluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRz
Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgIEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNo
UmVzdWx0SW5kZXggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBub2RlW3NlYXJj
aFJlc3VsdHNQcm9wZXJ0eV0gPSB0cnVlOworICAgICAgICAgICAgSW5qZWN0ZWRTY3JpcHQuX3Nl
YXJjaFJlc3VsdHMucHVzaChub2RlKTsKKyAgICAgICAgICAgIHZhciBub2RlSWQgPSBJbnNwZWN0
b3JDb250cm9sbGVyLnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSwgZmFsc2UpOworICAgICAg
ICAgICAgbm9kZUlkcy5wdXNoKG5vZGVJZCk7CisgICAgICAgIH0KKyAgICAgICAgSW5zcGVjdG9y
Q29udHJvbGxlci5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMuam9pbigiLCIpKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaEV4YWN0SXRlbXMoZG9jKQorICAgIHsKKyAgICAgICAg
bWF0Y2hFeGFjdElkLmNhbGwodGhpcywgZG9jKTsKKyAgICAgICAgbWF0Y2hFeGFjdENsYXNzTmFt
ZXMuY2FsbCh0aGlzLCBkb2MpOworICAgICAgICBtYXRjaEV4YWN0VGFnTmFtZXMuY2FsbCh0aGlz
LCBkb2MpOworICAgICAgICBtYXRjaEV4YWN0QXR0cmlidXRlTmFtZXMuY2FsbCh0aGlzLCBkb2Mp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RJZChkb2MpCisgICAgeworICAgICAg
ICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1lbnRCeUlkLmNhbGwoZG9jLCB3
aGl0ZXNwYWNlVHJpbW1lZFF1ZXJ5KTsKKyAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0
aGlzLCByZXN1bHQsIChyZXN1bHQgPyAxIDogMCksIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcyB9
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaEV4YWN0Q2xhc3NOYW1lcyhkb2MpCisgICAg
eworICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmdldEVsZW1lbnRzQnlDbGFz
c05hbWUuY2FsbChkb2MsIHdoaXRlc3BhY2VUcmltbWVkUXVlcnkpOworICAgICAgICBhZGROb2Rl
c1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCwgcmVzdWx0Lml0ZW0p
OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hdGNoRXhhY3RUYWdOYW1lcyhkb2MpCisgICAgewor
ICAgICAgICBpZiAoIXRhZ05hbWVRdWVyeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5nZXRFbGVtZW50c0J5VGFnTmFtZS5jYWxsKGRv
YywgdGFnTmFtZVF1ZXJ5KTsKKyAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCBy
ZXN1bHQsIHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBtYXRjaEV4YWN0QXR0cmlidXRlTmFtZXMoZG9jKQorICAgIHsKKyAgICAgICAgaWYgKCFhdHRy
aWJ1dGVOYW1lUXVlcnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvbnN0IHJlc3Vs
dCA9IGRvYy5fX3Byb3RvX18ucXVlcnlTZWxlY3RvckFsbC5jYWxsKGRvYywgIlsiICsgYXR0cmli
dXRlTmFtZVF1ZXJ5ICsgIl0iKTsKKyAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlz
LCByZXN1bHQsIHJlc3VsdC5sZW5ndGgsIHJlc3VsdC5pdGVtKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBtYXRjaFBhcnRpYWxUYWdOYW1lcyhkb2MpCisgICAgeworICAgICAgICBpZiAoIXRhZ05h
bWVRdWVyeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9j
Ll9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vKltjb250YWlucyhuYW1lKCksICciICsg
ZXNjYXBlZFRhZ05hbWVRdWVyeSArICInKV0iLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVS
RURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKKyAgICAgICAgYWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0
aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gbWF0Y2hTdGFydE9mVGFnTmFtZXMoZG9jKQorICAgIHsK
KyAgICAgICAgaWYgKCF0YWdOYW1lUXVlcnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3RvX18uZXZhbHVhdGUuY2FsbChkb2MsICIvLypbc3Rh
cnRzLXdpdGgobmFtZSgpLCAnIiArIGVzY2FwZWRUYWdOYW1lUXVlcnkgKyAiJyldIiwgZG9jLCBu
dWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7CisgICAgICAgIGFk
ZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgs
IHJlc3VsdC5zbmFwc2hvdEl0ZW0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hdGNoUGFydGlh
bFRhZ05hbWVzQW5kQXR0cmlidXRlVmFsdWVzKGRvYykKKyAgICB7CisgICAgICAgIGlmICghdGFn
TmFtZVF1ZXJ5KSB7CisgICAgICAgICAgICBtYXRjaFBhcnRpYWxBdHRyaWJ1dGVWYWx1ZXMuY2Fs
bCh0aGlzLCBkb2MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5jYWxsKGRvYywgIi8vKltjb250
YWlucyhuYW1lKCksICciICsgZXNjYXBlZFRhZ05hbWVRdWVyeSArICInKSBvciBjb250YWlucyhA
KiwgJyIgKyBlc2NhcGVkUXVlcnkgKyAiJyldIiwgZG9jLCBudWxsLCBYUGF0aFJlc3VsdC5PUkRF
UkVEX05PREVfU05BUFNIT1RfVFlQRSk7CisgICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwo
dGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5zbmFwc2hvdEl0ZW0p
OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hdGNoUGFydGlhbEF0dHJpYnV0ZVZhbHVlcyhkb2Mp
CisgICAgeworICAgICAgICBjb25zdCByZXN1bHQgPSBkb2MuX19wcm90b19fLmV2YWx1YXRlLmNh
bGwoZG9jLCAiLy8qW2NvbnRhaW5zKEAqLCAnIiArIGVzY2FwZWRRdWVyeSArICInKV0iLCBkb2Ms
IG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFKTsKKyAgICAgICAg
YWRkTm9kZXNUb1Jlc3VsdHMuY2FsbCh0aGlzLCByZXN1bHQsIHJlc3VsdC5zbmFwc2hvdExlbmd0
aCwgcmVzdWx0LnNuYXBzaG90SXRlbSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbWF0Y2hTdHls
ZVNlbGVjdG9yKGRvYykKKyAgICB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRvYy5fX3Byb3Rv
X18ucXVlcnlTZWxlY3RvckFsbC5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSk7Cisg
ICAgICAgIGFkZE5vZGVzVG9SZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQubGVuZ3Ro
LCByZXN1bHQuaXRlbSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbWF0Y2hQbGFpblRleHQoZG9j
KQorICAgIHsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5ldmFsdWF0ZS5j
YWxsKGRvYywgIi8vdGV4dCgpW2NvbnRhaW5zKC4sICciICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSB8
IC8vY29tbWVudCgpW2NvbnRhaW5zKC4sICciICsgZXNjYXBlZFF1ZXJ5ICsgIicpXSIsIGRvYywg
bnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUpOworICAgICAgICBh
ZGROb2Rlc1RvUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdCwgcmVzdWx0LnNuYXBzaG90TGVuZ3Ro
LCByZXN1bHQuc25hcHNob3RJdGVtKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYXRjaFhQYXRo
UXVlcnkoZG9jKQorICAgIHsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gZG9jLl9fcHJvdG9fXy5l
dmFsdWF0ZS5jYWxsKGRvYywgd2hpdGVzcGFjZVRyaW1tZWRRdWVyeSwgZG9jLCBudWxsLCBYUGF0
aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSk7CisgICAgICAgIGFkZE5vZGVzVG9S
ZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0LCByZXN1bHQuc25hcHNob3RMZW5ndGgsIHJlc3VsdC5z
bmFwc2hvdEl0ZW0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaGVkU2VhcmNoaW5nKCkK
KyAgICB7CisgICAgICAgIC8vIFJlbW92ZSB0aGUgc2VhcmNoUmVzdWx0c1Byb3BlcnR5IG5vdyB0
aGF0IHRoZSBzZWFyY2ggaXMgZmluaXNoZWQuCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
SW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBk
ZWxldGUgSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHNbaV1bc2VhcmNoUmVzdWx0c1Byb3Bl
cnR5XTsKKyAgICB9CisKKyAgICBjb25zdCBtYWluRnJhbWVEb2N1bWVudCA9IEluamVjdGVkU2Ny
aXB0Ll93aW5kb3coKS5kb2N1bWVudDsKKyAgICBjb25zdCBzZWFyY2hEb2N1bWVudHMgPSBbbWFp
bkZyYW1lRG9jdW1lbnRdOworICAgIHZhciBzZWFyY2hGdW5jdGlvbnM7CisgICAgaWYgKHRhZ05h
bWVRdWVyeSAmJiBzdGFydFRhZ0ZvdW5kICYmIGVuZFRhZ0ZvdW5kKQorICAgICAgICBzZWFyY2hG
dW5jdGlvbnMgPSBbbWF0Y2hFeGFjdFRhZ05hbWVzLCBtYXRjaFBsYWluVGV4dF07CisgICAgZWxz
ZSBpZiAodGFnTmFtZVF1ZXJ5ICYmIHN0YXJ0VGFnRm91bmQpCisgICAgICAgIHNlYXJjaEZ1bmN0
aW9ucyA9IFttYXRjaFN0YXJ0T2ZUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOworICAgIGVsc2Ug
aWYgKHRhZ05hbWVRdWVyeSAmJiBlbmRUYWdGb3VuZCkgeworICAgICAgICAvLyBGSVhNRTogd2Ug
c2hvdWxkIGhhdmUgYSBtYXRjaEVuZE9mVGFnTmFtZXMgc2VhcmNoIGZ1bmN0aW9uIGlmIGVuZFRh
Z0ZvdW5kIGlzIHRydWUgYnV0IG5vdCBzdGFydFRhZ0ZvdW5kLgorICAgICAgICAvLyBUaGlzIHJl
cXVpcmVzIGVuZHMtd2l0aCgpIHN1cHBvcnQgaW4gWFBhdGgsIFdlYktpdCBvbmx5IHN1cHBvcnRz
IHN0YXJ0cy13aXRoKCkgYW5kIGNvbnRhaW5zKCkuCisgICAgICAgIHNlYXJjaEZ1bmN0aW9ucyA9
IFttYXRjaFBhcnRpYWxUYWdOYW1lcywgbWF0Y2hQbGFpblRleHRdOworICAgIH0gZWxzZSBpZiAo
d2hpdGVzcGFjZVRyaW1tZWRRdWVyeSA9PT0gIi8vKiIgfHwgd2hpdGVzcGFjZVRyaW1tZWRRdWVy
eSA9PT0gIioiKSB7CisgICAgICAgIC8vIFRoZXNlIHF1ZXJpZXMgd2lsbCBtYXRjaCBldmVyeSBu
b2RlLiBNYXRjaGluZyBldmVyeXRoaW5nIGlzbid0IHVzZWZ1bCBhbmQgY2FuIGJlIHNsb3cgZm9y
IGxhcmdlIHBhZ2VzLAorICAgICAgICAvLyBzbyBsaW1pdCB0aGUgc2VhcmNoIGZ1bmN0aW9ucyBs
aXN0IHRvIHBsYWluIHRleHQgYW5kIGF0dHJpYnV0ZSBtYXRjaGluZy4KKyAgICAgICAgc2VhcmNo
RnVuY3Rpb25zID0gW21hdGNoUGFydGlhbEF0dHJpYnV0ZVZhbHVlcywgbWF0Y2hQbGFpblRleHRd
OworICAgIH0gZWxzZQorICAgICAgICBzZWFyY2hGdW5jdGlvbnMgPSBbbWF0Y2hFeGFjdEl0ZW1z
LCBtYXRjaFN0eWxlU2VsZWN0b3IsIG1hdGNoUGFydGlhbFRhZ05hbWVzQW5kQXR0cmlidXRlVmFs
dWVzLCBtYXRjaFBsYWluVGV4dCwgbWF0Y2hYUGF0aFF1ZXJ5XTsKKworICAgIC8vIEZpbmQgYWxs
IGZyYW1lcywgaWZyYW1lcyBhbmQgb2JqZWN0IGVsZW1lbnRzIHRvIHNlYXJjaCB0aGVpciBkb2N1
bWVudHMuCisgICAgY29uc3QgcXVlcnlTZWxlY3RvckFsbEZ1bmN0aW9uID0gSW5qZWN0ZWRTY3Jp
cHQuX3dpbmRvdygpLkRvY3VtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsOworICAgIGNv
bnN0IHN1YmRvY3VtZW50UmVzdWx0ID0gcXVlcnlTZWxlY3RvckFsbEZ1bmN0aW9uLmNhbGwobWFp
bkZyYW1lRG9jdW1lbnQsICJpZnJhbWUsIGZyYW1lLCBvYmplY3QiKTsKKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc3ViZG9jdW1lbnRSZXN1bHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFy
IGVsZW1lbnQgPSBzdWJkb2N1bWVudFJlc3VsdC5pdGVtKGkpOworICAgICAgICBpZiAoZWxlbWVu
dC5jb250ZW50RG9jdW1lbnQpCisgICAgICAgICAgICBzZWFyY2hEb2N1bWVudHMucHVzaChlbGVt
ZW50LmNvbnRlbnREb2N1bWVudCk7CisgICAgfQorCisgICAgY29uc3QgcGFuZWwgPSBJbmplY3Rl
ZFNjcmlwdDsKKyAgICB2YXIgZG9jdW1lbnRJbmRleCA9IDA7CisgICAgdmFyIHNlYXJjaEZ1bmN0
aW9uSW5kZXggPSAwOworICAgIHZhciBjaHVua0ludGVydmFsSWRlbnRpZmllciA9IG51bGw7CisK
KyAgICAvLyBTcGxpdCB1cCB0aGUgd29yayBpbnRvIGNodW5rcyBzbyB3ZSBkb24ndCBibG9jayB0
aGUgVUkgdGhyZWFkIHdoaWxlIHByb2Nlc3NpbmcuCisKKyAgICBmdW5jdGlvbiBwcm9jZXNzQ2h1
bmsoKQorICAgIHsKKyAgICAgICAgdmFyIHNlYXJjaERvY3VtZW50ID0gc2VhcmNoRG9jdW1lbnRz
W2RvY3VtZW50SW5kZXhdOworICAgICAgICB2YXIgc2VhcmNoRnVuY3Rpb24gPSBzZWFyY2hGdW5j
dGlvbnNbc2VhcmNoRnVuY3Rpb25JbmRleF07CisKKyAgICAgICAgaWYgKCsrc2VhcmNoRnVuY3Rp
b25JbmRleCA+IHNlYXJjaEZ1bmN0aW9ucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNlYXJjaEZ1
bmN0aW9uID0gc2VhcmNoRnVuY3Rpb25zWzBdOworICAgICAgICAgICAgc2VhcmNoRnVuY3Rpb25J
bmRleCA9IDA7CisKKyAgICAgICAgICAgIGlmICgrK2RvY3VtZW50SW5kZXggPiBzZWFyY2hEb2N1
bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhbmVsLl9jdXJyZW50U2VhcmNo
Q2h1bmtJbnRlcnZhbElkZW50aWZpZXIgPT09IGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyKQorICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgcGFuZWwuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFs
SWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNodW5rSW50ZXJ2YWxJ
ZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hlZFNlYXJjaGluZy5jYWxsKHBhbmVs
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNlYXJjaERvY3VtZW50ID0gc2VhcmNoRG9jdW1lbnRzW2RvY3VtZW50SW5kZXhdOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFzZWFyY2hEb2N1bWVudCB8fCAhc2VhcmNoRnVuY3Rpb24pCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNlYXJjaEZ1
bmN0aW9uLmNhbGwocGFuZWwsIHNlYXJjaERvY3VtZW50KTsKKyAgICAgICAgfSBjYXRjaChlcnIp
IHsKKyAgICAgICAgICAgIC8vIGlnbm9yZSBhbnkgZXhjZXB0aW9ucy4gdGhlIHF1ZXJ5IG1pZ2h0
IGJlIG1hbGZvcm1lZCwgYnV0IHdlIGFsbG93IHRoYXQuCisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBwcm9jZXNzQ2h1bmsoKTsKKworICAgIGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyID0gc2V0SW50
ZXJ2YWwocHJvY2Vzc0NodW5rLCAyNSk7CisgICAgSW5qZWN0ZWRTY3JpcHQuX2N1cnJlbnRTZWFy
Y2hDaHVua0ludGVydmFsSWRlbnRpZmllciA9IGNodW5rSW50ZXJ2YWxJZGVudGlmaWVyOworICAg
IHJldHVybiB0cnVlOworfQorCitJbmplY3RlZFNjcmlwdC5zZWFyY2hDYW5jZWxlZCA9IGZ1bmN0
aW9uKCkKK3sKKyAgICBpZiAoSW5qZWN0ZWRTY3JpcHQuX3NlYXJjaFJlc3VsdHMpIHsKKyAgICAg
ICAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb3BlcnR5ID0gSW5qZWN0ZWRTY3JpcHQuX2luY2x1ZGVk
SW5TZWFyY2hSZXN1bHRzUHJvcGVydHlOYW1lOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRoaXMuX3NlYXJjaFJlc3VsdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBub2Rl
ID0gdGhpcy5fc2VhcmNoUmVzdWx0c1tpXTsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBz
ZWFyY2hSZXN1bHRzUHJvcGVydHkgc2luY2UgdGhlcmUgbWlnaHQgYmUgYW4gdW5maW5pc2hlZCBz
ZWFyY2guCisgICAgICAgICAgICBkZWxldGUgbm9kZVtzZWFyY2hSZXN1bHRzUHJvcGVydHldOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNo
Q2h1bmtJbnRlcnZhbElkZW50aWZpZXIpIHsKKyAgICAgICAgY2xlYXJJbnRlcnZhbChJbmplY3Rl
ZFNjcmlwdC5fY3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyKTsKKyAgICAgICAg
ZGVsZXRlIEluamVjdGVkU2NyaXB0Ll9jdXJyZW50U2VhcmNoQ2h1bmtJbnRlcnZhbElkZW50aWZp
ZXI7CisgICAgfQorICAgIEluamVjdGVkU2NyaXB0Ll9zZWFyY2hSZXN1bHRzID0gW107CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK0luamVjdGVkU2NyaXB0Ll9lbnN1cmVDb21tYW5kTGluZUFQSUlu
c3RhbGxlZCA9IGZ1bmN0aW9uKGluc3BlY3RlZFdpbmRvdykKK3sKKyAgICB2YXIgaW5zcGVjdGVk
V2luZG93ID0gSW5qZWN0ZWRTY3JpcHQuX3dpbmRvdygpOworICAgIGlmIChpbnNwZWN0ZWRXaW5k
b3cuX2luc3BlY3RvckNvbW1hbmRMaW5lQVBJKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aW5zcGVjdGVkV2luZG93LmV2YWwoIndpbmRvdy5faW5zcGVjdG9yQ29tbWFuZExpbmVBUEkgPSB7
IFwKKyAgICAgICAgJDogZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZC5hcHBseShkb2N1bWVudCwgYXJndW1lbnRzKSB9LCBcCisgICAgICAgICQkOiBmdW5jdGlvbigp
IHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwuYXBwbHkoZG9jdW1lbnQsIGFyZ3Vt
ZW50cykgfSwgXAorICAgICAgICAkeDogZnVuY3Rpb24oeHBhdGgsIGNvbnRleHQpIHsgXAorICAg
ICAgICAgICAgdmFyIG5vZGVzID0gW107IFwKKyAgICAgICAgICAgIHRyeSB7IFwKKyAgICAgICAg
ICAgICAgICB2YXIgZG9jID0gY29udGV4dCB8fCBkb2N1bWVudDsgXAorICAgICAgICAgICAgICAg
IHZhciByZXN1bHRzID0gZG9jLmV2YWx1YXRlKHhwYXRoLCBkb2MsIG51bGwsIFhQYXRoUmVzdWx0
LkFOWV9UWVBFLCBudWxsKTsgXAorICAgICAgICAgICAgICAgIHZhciBub2RlOyBcCisgICAgICAg
ICAgICAgICAgd2hpbGUgKG5vZGUgPSByZXN1bHRzLml0ZXJhdGVOZXh0KCkpIG5vZGVzLnB1c2go
bm9kZSk7IFwKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9IFwKKyAgICAgICAgICAgIHJldHVy
biBub2RlczsgXAorICAgICAgICB9LCBcCisgICAgICAgIGRpcjogZnVuY3Rpb24oKSB7IHJldHVy
biBjb25zb2xlLmRpci5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpIH0sIFwKKyAgICAgICAgZGly
eG1sOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUuZGlyeG1sLmFwcGx5KGNvbnNvbGUsIGFy
Z3VtZW50cykgfSwgXAorICAgICAgICBrZXlzOiBmdW5jdGlvbihvKSB7IHZhciBhID0gW107IGZv
ciAodmFyIGsgaW4gbykgYS5wdXNoKGspOyByZXR1cm4gYTsgfSwgXAorICAgICAgICB2YWx1ZXM6
IGZ1bmN0aW9uKG8pIHsgdmFyIGEgPSBbXTsgZm9yICh2YXIgayBpbiBvKSBhLnB1c2gob1trXSk7
IHJldHVybiBhOyB9LCBcCisgICAgICAgIHByb2ZpbGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY29u
c29sZS5wcm9maWxlLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfSwgXAorICAgICAgICBwcm9m
aWxlRW5kOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNvbnNvbGUucHJvZmlsZUVuZC5hcHBseShjb25z
b2xlLCBhcmd1bWVudHMpIH0sIFwKKyAgICAgICAgX2luc3BlY3RlZE5vZGVzOiBbXSwgXAorICAg
ICAgICBnZXQgJDAoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3Rl
ZE5vZGVzWzBdIH0sIFwKKyAgICAgICAgZ2V0ICQxKCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1h
bmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1sxXSB9LCBcCisgICAgICAgIGdldCAkMigpIHsgcmV0
dXJuIF9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5faW5zcGVjdGVkTm9kZXNbMl0gfSwgXAorICAg
ICAgICBnZXQgJDMoKSB7IHJldHVybiBfaW5zcGVjdG9yQ29tbWFuZExpbmVBUEkuX2luc3BlY3Rl
ZE5vZGVzWzNdIH0sIFwKKyAgICAgICAgZ2V0ICQ0KCkgeyByZXR1cm4gX2luc3BlY3RvckNvbW1h
bmRMaW5lQVBJLl9pbnNwZWN0ZWROb2Rlc1s0XSB9IFwKKyAgICB9OyIpOworCisgICAgaW5zcGVj
dGVkV2luZG93Ll9pbnNwZWN0b3JDb21tYW5kTGluZUFQSS5jbGVhciA9IEluc3BlY3RvckNvbnRy
b2xsZXIud3JhcENhbGxiYWNrKEluc3BlY3RvckNvbnRyb2xsZXIuY2xlYXJNZXNzYWdlcy5iaW5k
KEluc3BlY3RvckNvbnRyb2xsZXIsIHRydWUpKTsKKyAgICBpbnNwZWN0ZWRXaW5kb3cuX2luc3Bl
Y3RvckNvbW1hbmRMaW5lQVBJLmluc3BlY3QgPSBJbnNwZWN0b3JDb250cm9sbGVyLndyYXBDYWxs
YmFjayhpbnNwZWN0T2JqZWN0LmJpbmQodGhpcykpOworCisgICAgZnVuY3Rpb24gaW5zcGVjdE9i
amVjdChvKQorICAgIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaW5zcGVjdGVkV2luZG93LmNvbnNvbGUubG9nKG8p
OworICAgICAgICBpZiAoT2JqZWN0LnR5cGUobywgaW5zcGVjdGVkV2luZG93KSA9PT0gIm5vZGUi
KSB7CisgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLnB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQobywgdHJ1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKE9iamVj
dC5kZXNjcmliZShvKSkgeworICAgICAgICAgICAgICAgIGNhc2UgIkRhdGFiYXNlIjoKKyAgICAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5zZWxlY3REYXRhYmFzZShvKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiU3RvcmFnZSI6
CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuc2VsZWN0RE9NU3RvcmFn
ZShvKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKIEluamVjdGVkU2NyaXB0Ll9yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24o
b2JqZWN0UHJveHkpCiB7CiAgICAgdmFyIG9iamVjdCA9IEluamVjdGVkU2NyaXB0Ll9vYmplY3RG
b3JJZChvYmplY3RQcm94eS5vYmplY3RJZCk7CkBAIC00ODYsMTEgKzgyNSwxMSBAQCBJbmplY3Rl
ZFNjcmlwdC5fcmVzb2x2ZU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdFByb3h5KQogICAgIHZhciBw
cm90b0RlcHRoID0gb2JqZWN0UHJveHkucHJvdG9EZXB0aDsKIAogICAgIC8vIEZvbGxvdyB0aGUg
cHJvcGVydHkgcGF0aC4KLSAgICBmb3IgKHZhciBpID0gMDsgb2JqZWN0ICYmIGkgPCBwYXRoLmxl
bmd0aDsgKytpKQorICAgIGZvciAodmFyIGkgPSAwOyBvYmplY3QgJiYgcGF0aCAmJiBpIDwgcGF0
aC5sZW5ndGg7ICsraSkKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0W3BhdGhbaV1dOwogCiAgICAg
Ly8gR2V0IHRvIHRoZSBuZWNlc3NhcnkgcHJvdG8gbGF5ZXIuCi0gICAgZm9yICh2YXIgaSA9IDA7
IG9iamVjdCAmJiBpIDwgcHJvdG9EZXB0aDsgKytpKQorICAgIGZvciAodmFyIGkgPSAwOyBvYmpl
Y3QgJiYgcHJvdG9EZXB0aCAmJiBpIDwgcHJvdG9EZXB0aDsgKytpKQogICAgICAgICBvYmplY3Qg
PSBvYmplY3QuX19wcm90b19fOwogCiAgICAgcmV0dXJuIG9iamVjdDsKQEAgLTUwNSwxMiArODQ0
LDI5IEBAIEluamVjdGVkU2NyaXB0Ll93aW5kb3cgPSBmdW5jdGlvbigpCiAKIEluamVjdGVkU2Ny
aXB0Ll9ub2RlRm9ySWQgPSBmdW5jdGlvbihub2RlSWQpCiB7Ci0gICAgLy8gVE9ETzogcmVwbGFj
ZSB3aXRoIG5vZGUgbG9va3VwIGluIHRoZSBJbnNwZWN0b3JET01BZ2VudCBvbmNlIERPTUFnZW50
IG5vZGVzIGFyZSB1c2VkLgotICAgIHJldHVybiBub2RlSWQ7CisgICAgaWYgKCFub2RlSWQpCisg
ICAgICAgIHJldHVybiBudWxsOworICAgIHJldHVybiBJbnNwZWN0b3JDb250cm9sbGVyLm5vZGVG
b3JJZChub2RlSWQpOwogfQogCiBJbmplY3RlZFNjcmlwdC5fb2JqZWN0Rm9ySWQgPSBmdW5jdGlv
bihvYmplY3RJZCkKIHsKLSAgICAvLyBUT0RPOiByZXBsYWNlIHdpdGggbm9kZSBsb29rdXBzIGZv
ciBub2RlIGlkcyBhbmQgZXZhbHVhdGlvbiByZXN1bHQgbG9va3VwcyBmb3IgdGhlIHJlc3Qgb2Yg
aWRzLgorICAgIGlmICh0eXBlb2Ygb2JqZWN0SWQgPT09ICJudW1iZXIiKQorICAgICAgICByZXR1
cm4gSW5qZWN0ZWRTY3JpcHQuX25vZGVGb3JJZChvYmplY3RJZCk7CisgICAgZWxzZSBpZiAodHlw
ZW9mIG9iamVjdElkID09PSAic3RyaW5nIikKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvckNvbnRy
b2xsZXIudW53cmFwT2JqZWN0KG9iamVjdElkKTsKKworICAgIC8vIFRPRE86IG1vdmUgc2NvcGUg
Y2hhaW4gb2JqZWN0cyB0byBwcm94eS1iYXNlZCBzY2hlbWEuCiAgICAgcmV0dXJuIG9iamVjdElk
OwogfQorCitJbmplY3RlZFNjcmlwdC5fY3JlYXRlUHJveHlPYmplY3QgPSBmdW5jdGlvbihvYmpl
Y3QsIG9iamVjdElkKQoreworICAgIHZhciByZXN1bHQgPSB7fTsKKyAgICByZXN1bHQub2JqZWN0
SWQgPSBvYmplY3RJZDsKKyAgICByZXN1bHQudHlwZSA9IE9iamVjdC50eXBlKG9iamVjdCwgSW5q
ZWN0ZWRTY3JpcHQuX3dpbmRvdygpKTsKKyAgICBpZiAocmVzdWx0LnR5cGUgPT09ICJub2RlIikK
KyAgICAgICAgcmVzdWx0Lm5vZGVJZCA9IEluc3BlY3RvckNvbnRyb2xsZXIucHVzaE5vZGVQYXRo
VG9Gcm9udGVuZChvYmplY3QsIGZhbHNlKTsKKyAgICByZXN1bHQuZGVzY3JpcHRpb24gPSBPYmpl
Y3QuZGVzY3JpYmUob2JqZWN0LCB0cnVlLCBJbmplY3RlZFNjcmlwdC5fd2luZG93KCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKaW5kZXggOWIwMzk0MC4uZjBiODc3ZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0
aW9uLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVz
U2VjdGlvbi5qcwpAQCAtMTI0LDEzICsxMjQsNiBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVy
dHlUcmVlRWxlbWVudCA9IGZ1bmN0aW9uKHByb3BlcnR5KQogfQogCiBXZWJJbnNwZWN0b3IuT2Jq
ZWN0UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7Ci0gICAgc2FmZVByb3BlcnR5VmFs
dWU6IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHlOYW1lKQotICAgIHsKLSAgICAgICAgaWYgKG9i
amVjdFsiX19sb29rdXBHZXR0ZXJfXyJdICYmIG9iamVjdC5fX2xvb2t1cEdldHRlcl9fKHByb3Bl
cnR5TmFtZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJldHVybiBvYmplY3RbcHJv
cGVydHlOYW1lXTsKLSAgICB9LAotCiAgICAgb25wb3B1bGF0ZTogZnVuY3Rpb24oKQogICAgIHsK
ICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoICYmICF0aGlzLnNob3VsZFJlZnJlc2hD
aGlsZHJlbikKQEAgLTE0Nyw3ICsxNDAsNyBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydHlU
cmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmRDaGls
ZChuZXcgc2VsZi50cmVlT3V0bGluZS5zZWN0aW9uLnRyZWVFbGVtZW50Q29uc3RydWN0b3IocHJv
cGVydGllc1tpXSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9OwotICAgICAgICBJbnNwZWN0
b3JDb250cm9sbGVyLmdldFByb3BlcnRpZXModGhpcy5wcm9wZXJ0eS5jaGlsZE9iamVjdFByb3h5
LCBmYWxzZSwgY2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmdldFByb3Bl
cnRpZXModGhpcy5wcm9wZXJ0eS52YWx1ZSwgZmFsc2UsIGNhbGxiYWNrKTsKICAgICB9LAogCiAg
ICAgb25kYmxjbGljazogZnVuY3Rpb24oZWxlbWVudCwgZXZlbnQpCkBAIC0xNjgsNyArMTYxLDcg
QEAgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewog
CiAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOwogICAgICAgICB0aGlzLnZhbHVlRWxlbWVudC5jbGFzc05hbWUgPSAidmFsdWUiOwotICAg
ICAgICB0aGlzLnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucHJvcGVydHkudGV4dENv
bnRlbnQ7CisgICAgICAgIHRoaXMudmFsdWVFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5wcm9w
ZXJ0eS52YWx1ZS5kZXNjcmlwdGlvbjsKICAgICAgICAgaWYgKHRoaXMucHJvcGVydHkuaXNHZXR0
ZXIpCiAgICAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImRpbW1lZCIp
OwogCkBAIC0xNzcsNyArMTcwLDcgQEAgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVs
ZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hcHBlbmRD
aGlsZChuYW1lRWxlbWVudCk7CiAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI6ICIpKTsKICAgICAgICAgdGhpcy5saXN0SXRl
bUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52YWx1ZUVsZW1lbnQpOwotICAgICAgICB0aGlzLmhh
c0NoaWxkcmVuID0gdGhpcy5wcm9wZXJ0eS5oYXNDaGlsZHJlbjsKKyAgICAgICAgdGhpcy5oYXND
aGlsZHJlbiA9IHRoaXMucHJvcGVydHkudmFsdWUuaGFzQ2hpbGRyZW47CiAgICAgfSwKIAogICAg
IHVwZGF0ZVNpYmxpbmdzOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvT2JqZWN0UHJveHkuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
T2JqZWN0UHJveHkuanMKaW5kZXggZmE3ODE2ZS4uZGJiOWU0OCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3h5LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9PYmplY3RQcm94eS5qcwpAQCAtMjgsMTggKzI4LDE3IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5PYmplY3RQcm94eSA9IGZ1bmN0aW9uKG9iamVj
dElkLCBwYXRoLCBwcm90b0RlcHRoKQorV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5ID0gZnVuY3Rp
b24ob2JqZWN0SWQsIHBhdGgsIHByb3RvRGVwdGgsIGRlc2NyaXB0aW9uLCBoYXNDaGlsZHJlbikK
IHsKICAgICB0aGlzLm9iamVjdElkID0gb2JqZWN0SWQ7CiAgICAgdGhpcy5wYXRoID0gcGF0aCB8
fCBbXTsKICAgICB0aGlzLnByb3RvRGVwdGggPSBwcm90b0RlcHRoIHx8IDA7CisgICAgdGhpcy5k
ZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSBoYXNDaGls
ZHJlbjsKIH0KIAogV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5UHJveHkgPSBmdW5jdGlvbihu
YW1lLCBvYmplY3QpCiB7CiAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB0aGlzLnR5cGUgPSAi
b2JqZWN0IjsKLSAgICB0aGlzLmhhc0NoaWxkcmVuID0gdHJ1ZTsKLSAgICB0aGlzLnRleHRDb250
ZW50ID0gT2JqZWN0LmRlc2NyaWJlKG9iamVjdCwgdHJ1ZSk7Ci0gICAgdGhpcy5jaGlsZE9iamVj
dFByb3h5ID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcm94eShvYmplY3QpOworICAgIHRoaXMu
dmFsdWUgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3h5KG9iamVjdCwgW10sIDAsIE9iamVj
dC5kZXNjcmliZShvYmplY3QsIHRydWUpLCB0cnVlKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9wZXJ0aWVzU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUHJvcGVydGllc1NpZGViYXJQYW5lLmpzCmluZGV4IDJkMzIxMzcu
LjRlNTU3NjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qcm9wZXJ0
aWVzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Byb3Bl
cnRpZXNTaWRlYmFyUGFuZS5qcwpAQCAtMzIsNyArMzIsNyBAQCBXZWJJbnNwZWN0b3IuUHJvcGVy
dGllc1NpZGViYXJQYW5lID0gZnVuY3Rpb24oKQogfQogCiBXZWJJbnNwZWN0b3IuUHJvcGVydGll
c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKLSAgICB1cGRhdGU6IGZ1bmN0aW9uKG9iamVjdCkK
KyAgICB1cGRhdGU6IGZ1bmN0aW9uKG5vZGUpCiAgICAgewogICAgICAgICB2YXIgYm9keSA9IHRo
aXMuYm9keUVsZW1lbnQ7CiAKQEAgLTQwLDcgKzQwLDcgQEAgV2ViSW5zcGVjdG9yLlByb3BlcnRp
ZXNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5zZWN0aW9ucyA9IFtd
OwogCi0gICAgICAgIGlmICghb2JqZWN0KQorICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwpAQCAtNTEsMTMgKzUxLDEzIEBA
IFdlYkluc3BlY3Rvci5Qcm9wZXJ0aWVzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogCiAgICAg
ICAgICAgICAvLyBHZXQgYXJyYXkgb2YgcHJvdG90eXBlIHVzZXItZnJpZW5kbHkgbmFtZXMuCiAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3RvdHlwZXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQ
cm94eShvYmplY3QsIFtdLCBpKTsKKyAgICAgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gbmV3
IFdlYkluc3BlY3Rvci5PYmplY3RQcm94eShub2RlLmlkLCBbXSwgaSk7CiAgICAgICAgICAgICAg
ICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9u
KHByb3RvdHlwZSwgcHJvdG90eXBlc1tpXSwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQcm90b3R5
cGUiKSk7CiAgICAgICAgICAgICAgICAgc2VsZi5zZWN0aW9ucy5wdXNoKHNlY3Rpb24pOwogICAg
ICAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoc2VjdGlvbi5lbGVtZW50KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfTsKLSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5nZXRQcm90b3R5
cGVzKG9iamVjdCwgY2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmdldFBy
b3RvdHlwZXMobm9kZS5pZCwgY2FsbGJhY2spOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IDI3YmMyMjkuLmM3
MjBkYzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRl
YmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJh
clBhbmUuanMKQEAgLTY3LDEwICs2NywxMCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVzU2lkZWJhclBh
bmUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbihzdHlsZXMp
IHsKICAgICAgICAgICAgIGlmICghc3R5bGVzKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIHZhciBub2RlV3JhcHBlciA9IFdlYkluc3BlY3Rvci53cmFwTm9kZVdpdGhTdHls
ZXMobm9kZSwgc3R5bGVzKTsKLSAgICAgICAgICAgIHNlbGYuX3VwZGF0ZShyZWZyZXNoLCBib2R5
LCBub2RlV3JhcHBlciwgZWRpdGVkU2VjdGlvbiwgZm9yY2VVcGRhdGUpOworICAgICAgICAgICAg
bm9kZS5fc2V0U3R5bGVzKHN0eWxlcy5jb21wdXRlZFN0eWxlLCBzdHlsZXMuaW5saW5lU3R5bGUs
IHN0eWxlcy5zdHlsZUF0dHJpYnV0ZXMsIHN0eWxlcy5tYXRjaGVkQ1NTUnVsZXMpOworICAgICAg
ICAgICAgc2VsZi5fdXBkYXRlKHJlZnJlc2gsIGJvZHksIG5vZGUsIGVkaXRlZFNlY3Rpb24sIGZv
cmNlVXBkYXRlKTsKICAgICAgICAgfTsKLSAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5nZXRT
dHlsZXMobm9kZSwgIVByZWZlcmVuY2VzLnNob3dVc2VyQWdlbnRTdHlsZXMsIGNhbGxiYWNrKTsK
KyAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5nZXRTdHlsZXMobm9kZS5pZCwgIVByZWZlcmVu
Y2VzLnNob3dVc2VyQWdlbnRTdHlsZXMsIGNhbGxiYWNrKTsKICAgICB9LAogCiAgICAgX3VwZGF0
ZTogZnVuY3Rpb24ocmVmcmVzaCwgYm9keSwgbm9kZSwgZWRpdGVkU2VjdGlvbiwgZm9yY2VVcGRh
dGUpCkBAIC02MTEsMjQgKzYxMSwxMiBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2Vj
dGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBtb3ZlVG9OZXh0SWZOZWVkZWQuY2FsbChz
ZWxmKTsKICAgICAgICAgfTsKIAotICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmFwcGx5U3R5
bGVSdWxlVGV4dCh0aGlzLnJ1bGUuX2lkLCBuZXdDb250ZW50LCB0aGlzLnBhbmUubm9kZSwgY2Fs
bGJhY2spOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmFwcGx5U3R5bGVSdWxlVGV4dCh0
aGlzLnJ1bGUuaWQsIG5ld0NvbnRlbnQsIHRoaXMucGFuZS5ub2RlLmlkLCBjYWxsYmFjayk7CiAg
ICAgfSwKIAogICAgIGVkaXRpbmdTZWxlY3RvckNhbmNlbGxlZDogZnVuY3Rpb24oZWxlbWVudCwg
Y29udGV4dCkKICAgICB7CiAgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSBjb250ZXh0Owot
ICAgIH0sCi0KLSAgICBfZG9lc1NlbGVjdG9yQWZmZWN0U2VsZWN0ZWROb2RlOiBmdW5jdGlvbihz
ZWxlY3RvcikKLSAgICB7Ci0gICAgICAgIHZhciBzZWxlY3RlZE5vZGUgPSB0aGlzLnBhbmUubm9k
ZTsKLSAgICAgICAgdmFyIG5vZGVzID0gc2VsZWN0ZWROb2RlLm93bmVyRG9jdW1lbnQucXVlcnlT
ZWxlY3RvckFsbChzZWxlY3Rvcik7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChub2Rlc1tpXSA9PT0gc2VsZWN0ZWROb2Rl
KQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIH0KIApAQCAtNjczLDE1ICs2NjEsMTcgQEAgV2ViSW5zcGVjdG9y
LkJsYW5rU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgZWRpdGluZ0Nv
bW1pdHRlZDogZnVuY3Rpb24oZWxlbWVudCwgbmV3Q29udGVudCwgb2xkQ29udGVudCwgY29udGV4
dCkKICAgICB7CiAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgdmFyIGNhbGxiYWNr
ID0gZnVuY3Rpb24oc3R5bGVSdWxlKSB7Ci0gICAgICAgICAgICBpZiAoIXN0eWxlUnVsZSkgewor
ICAgICAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBTeW50YXggZm9yIGEgU2Vs
ZWN0b3IKICAgICAgICAgICAgICAgICBzZWxmLmVkaXRpbmdDYW5jZWxsZWQoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc3R5bGVSdWxl
ID0gcmVzdWx0WzBdOworICAgICAgICAgICAgdmFyIGRvZXNTZWxlY3RvckFmZmVjdFNlbGVjdGVk
Tm9kZSA9IHJlc3VsdFsxXTsKICAgICAgICAgICAgIHNlbGYubWFrZU5vcm1hbChXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVJ1bGUoc3R5bGVSdWxlKSk7CiAKLSAgICAgICAg
ICAgIGlmICghc2VsZi5fZG9lc1NlbGVjdG9yQWZmZWN0U2VsZWN0ZWROb2RlKG5ld0NvbnRlbnQp
KSB7CisgICAgICAgICAgICBpZiAoIWRvZXNTZWxlY3RvckFmZmVjdFNlbGVjdGVkTm9kZSkgewog
ICAgICAgICAgICAgICAgIHNlbGYubm9BZmZlY3QgPSB0cnVlOwogICAgICAgICAgICAgICAgIHNl
bGYuZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJuby1hZmZlY3QiKTsKICAgICAgICAgICAgIH0KQEAg
LTY5Miw3ICs2ODIsNyBAQCBXZWJJbnNwZWN0b3IuQmxhbmtTdHlsZVByb3BlcnRpZXNTZWN0aW9u
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHNlbGYucGFuZS5hZGRCbGFua1NlY3Rpb24oKTsK
ICAgICAgICAgICAgIHNlbGYuYWRkTmV3QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0RWRpdGluZygpOwog
ICAgICAgICB9OwotICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmFkZFN0eWxlU2VsZWN0b3Io
bmV3Q29udGVudCwgY2FsbGJhY2spOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmFkZFN0
eWxlU2VsZWN0b3IobmV3Q29udGVudCwgdGhpcy5wYW5lLm5vZGUuaWQsIGNhbGxiYWNrKTsKICAg
ICB9LAogCiAgICAgbWFrZU5vcm1hbDogZnVuY3Rpb24oc3R5bGVSdWxlKQpAQCAtOTk5LDcgKzk4
OSw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0g
ewogCiAgICAgICAgICAgICBzZWxmLnVwZGF0ZUFsbCh0cnVlKTsKICAgICAgICAgfTsKLSAgICAg
ICAgSW5zcGVjdG9yQ29udHJvbGxlci50b2dnbGVTdHlsZUVuYWJsZWQodGhpcy5zdHlsZS5faWQs
IHRoaXMubmFtZSwgZGlzYWJsZWQsIGNhbGxiYWNrKTsKKyAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlci50b2dnbGVTdHlsZUVuYWJsZWQodGhpcy5zdHlsZS5pZCwgdGhpcy5uYW1lLCBkaXNhYmxl
ZCwgY2FsbGJhY2spOwogICAgIH0sCiAKICAgICB1cGRhdGVTdGF0ZTogZnVuY3Rpb24oKQpAQCAt
MTE2Miw3ICsxMTUyLDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5w
cm90b3R5cGUgPSB7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBSZXN0b3JlIHRo
ZSBvcmlnaW5hbCBDU1MgdGV4dCBiZWZvcmUgYXBwbHlpbmcgdXNlciBjaGFuZ2VzLiBUaGlzIGlz
IG5lZWRlZCB0byBwcmV2ZW50CiAgICAgICAgICAgICAvLyBuZXcgcHJvcGVydGllcyBmcm9tIHN0
aWNraW5nIGFyb3VuZCBpZiB0aGUgdXNlciBhZGRzIG9uZSwgdGhlbiByZW1vdmVzIGl0LgotICAg
ICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5zZXRTdHlsZVRleHQodGhpcy5zdHlsZSwgdGhp
cy5vcmlnaW5hbENTU1RleHQpOworICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5zZXRT
dHlsZVRleHQodGhpcy5zdHlsZS5pZCwgdGhpcy5vcmlnaW5hbENTU1RleHQpOwogICAgICAgICB9
CiAKICAgICAgICAgdGhpcy5hcHBseVN0eWxlVGV4dCh0aGlzLmxpc3RJdGVtRWxlbWVudC50ZXh0
Q29udGVudCk7CkBAIC0xMTgyLDcgKzExNzIsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0
eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMuX25ld1Byb3BlcnR5
KQogICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5yZW1vdmVDaGlsZCh0aGlzKTsKICAgICAg
ICAgZWxzZSBpZiAodGhpcy5vcmlnaW5hbENTU1RleHQpIHsKLSAgICAgICAgICAgIEluc3BlY3Rv
ckNvbnRyb2xsZXIuc2V0U3R5bGVUZXh0KHRoaXMuc3R5bGUsIHRoaXMub3JpZ2luYWxDU1NUZXh0
KTsKKyAgICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuc2V0U3R5bGVUZXh0KHRoaXMuc3R5
bGUuaWQsIHRoaXMub3JpZ2luYWxDU1NUZXh0KTsKIAogICAgICAgICAgICAgaWYgKHRoaXMudHJl
ZU91dGxpbmUuc2VjdGlvbiAmJiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFuZSkKICAgICAg
ICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucGFuZS5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoInN0eWxlIGVkaXRlZCIpOwpAQCAtMTMwMSw3ICsxMjkxLDcgQEAgV2ViSW5zcGVj
dG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBp
ZiAoIXNlbGYucnVsZSkKICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1l
bnRzLnRyZWVPdXRsaW5lLnVwZGF0ZSgpOwogICAgICAgICB9OwotICAgICAgICBJbnNwZWN0b3JD
b250cm9sbGVyLmFwcGx5U3R5bGVUZXh0KHRoaXMuc3R5bGUuX2lkLCBzdHlsZVRleHQudHJpbVdo
aXRlc3BhY2UoKSwgdGhpcy5uYW1lLCBjYWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckNvbnRy
b2xsZXIuYXBwbHlTdHlsZVRleHQodGhpcy5zdHlsZS5pZCwgc3R5bGVUZXh0LnRyaW1XaGl0ZXNw
YWNlKCksIHRoaXMubmFtZSwgY2FsbGJhY2spOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggM2MzYzFmMS4uNzZiZmRlYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0zOSw3ICszOSw2IEBAIHZhciBQ
cmVmZXJlbmNlcyA9IHsKICAgICBzaG93SW5oZXJpdGVkQ29tcHV0ZWRTdHlsZVByb3BlcnRpZXM6
IGZhbHNlLAogICAgIHN0eWxlUnVsZXNFeHBhbmRlZFN0YXRlOiB7fSwKICAgICBzaG93TWlzc2lu
Z0xvY2FsaXplZFN0cmluZ3M6IGZhbHNlLAotICAgIHVzZURPTUFnZW50OiBmYWxzZQogfQogCiB2
YXIgV2ViSW5zcGVjdG9yID0gewpAQCAtMzMzLDcgKzMzMiw3IEBAIHZhciBXZWJJbnNwZWN0b3Ig
PSB7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodGhpcy5faG92ZXJlZERPTU5vZGUpIHsKLSAg
ICAgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuaGlnaGxpZ2h0RE9NTm9kZSh0aGlzLl9ob3Zl
cmVkRE9NTm9kZSk7CisgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmhpZ2hsaWdodERP
TU5vZGUodGhpcy5faG92ZXJlZERPTU5vZGUuaWQpOwogICAgICAgICAgICAgdGhpcy5zaG93aW5n
RE9NTm9kZUhpZ2hsaWdodCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJ
bnNwZWN0b3JDb250cm9sbGVyLmhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7CkBAIC0zNTMsOSArMzUy
LDcgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9IGZ1bmN0aW9uKCkKICAgICAvLyB0aGlzLmNoYW5n
ZXMgPSBuZXcgV2ViSW5zcGVjdG9yLkNoYW5nZXNWaWV3KHRoaXMuZHJhd2VyKTsKICAgICAvLyBU
T0RPOiBSZW1vdmUgY2xhc3M9ImhpZGRlbiIgZnJvbSBpbnNwZWN0b3IuaHRtbCBvbiBidXR0b24j
Y2hhbmdlcy1zdGF0dXMtYmFyLWl0ZW0KICAgICB0aGlzLmRyYXdlci52aXNpYmxlVmlldyA9IHRo
aXMuY29uc29sZTsKLQotICAgIGlmIChQcmVmZXJlbmNlcy51c2VET01BZ2VudCkKLSAgICAgICAg
dGhpcy5kb21BZ2VudCA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NQWdlbnQoKTsKKyAgICB0aGlzLmRv
bUFnZW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01BZ2VudCgpOwogCiAgICAgdGhpcy5yZXNvdXJj
ZUNhdGVnb3JpZXMgPSB7CiAgICAgICAgIGRvY3VtZW50czogbmV3IFdlYkluc3BlY3Rvci5SZXNv
dXJjZUNhdGVnb3J5KFdlYkluc3BlY3Rvci5VSVN0cmluZygiRG9jdW1lbnRzIiksICJkb2N1bWVu
dHMiKSwKQEAgLTQ0MSw3ICs0MzgsNyBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24o
KQogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0b29sYmFyIikuYWRkRXZlbnRMaXN0ZW5l
cigibW91c2Vkb3duIiwgdGhpcy50b29sYmFyRHJhZ1N0YXJ0LCB0cnVlKTsKICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY2xvc2UtYnV0dG9uIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLmNsb3NlLCB0cnVlKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIubG9hZGVkKFBy
ZWZlcmVuY2VzLnVzZURPTUFnZW50KTsKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyLmxvYWRlZCgp
OwogfQogCiB2YXIgd2luZG93TG9hZGVkID0gZnVuY3Rpb24oKQpAQCAtOTA5LDYgKzkwNiwyMyBA
QCBXZWJJbnNwZWN0b3IuYWRkUmVzb3VyY2UgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBwYXlsb2Fk
KQogICAgICAgICB0aGlzLnBhbmVscy5yZXNvdXJjZXMuYWRkUmVzb3VyY2UocmVzb3VyY2UpOwog
fQogCitXZWJJbnNwZWN0b3IuY2xlYXJDb25zb2xlTWVzc2FnZXMgPSBmdW5jdGlvbigpCit7Cisg
ICAgV2ViSW5zcGVjdG9yLmNvbnNvbGUuY2xlYXJNZXNzYWdlcyhmYWxzZSk7Cit9CisKK1dlYklu
c3BlY3Rvci5zZWxlY3REYXRhYmFzZSA9IGZ1bmN0aW9uKG8pCit7CisgICAgV2ViSW5zcGVjdG9y
LnNob3dEYXRhYmFzZXNQYW5lbCgpOworICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0YWJhc2Vz
LnNlbGVjdERhdGFiYXNlKG8pOworfQorCitXZWJJbnNwZWN0b3Iuc2VsZWN0RE9NU3RvcmFnZSA9
IGZ1bmN0aW9uKG8pCit7CisgICAgV2ViSW5zcGVjdG9yLnNob3dEYXRhYmFzZXNQYW5lbCgpOwor
ICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuZGF0YWJhc2VzLnNlbGVjdERPTVN0b3JhZ2Uobyk7Cit9
CisKIFdlYkluc3BlY3Rvci51cGRhdGVSZXNvdXJjZSA9IGZ1bmN0aW9uKGlkZW50aWZpZXIsIHBh
eWxvYWQpCiB7CiAgICAgdmFyIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaWRlbnRpZmllcl07
CkBAIC0xMTM4LDggKzExNTIsOSBAQCBXZWJJbnNwZWN0b3IuZHJhd0xvYWRpbmdQaWVDaGFydCA9
IGZ1bmN0aW9uKGNhbnZhcywgcGVyY2VudCkgewogICAgIGcuZmlsbCgpOwogfQogCi1XZWJJbnNw
ZWN0b3IudXBkYXRlRm9jdXNlZE5vZGUgPSBmdW5jdGlvbihub2RlKQorV2ViSW5zcGVjdG9yLnVw
ZGF0ZUZvY3VzZWROb2RlID0gZnVuY3Rpb24obm9kZUlkKQogeworICAgIHZhciBub2RlID0gV2Vi
SW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkKICAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBkZXNlbGVjdCBpZiBudWxsIGlzIHBhc3NlZCBpbj8K
ICAgICAgICAgcmV0dXJuOwpAQCAtMTMyOSw2ICsxMzQ0LDExIEBAIFdlYkluc3BlY3Rvci5wZXJm
b3JtU2VhcmNoID0gZnVuY3Rpb24oZXZlbnQpCiAgICAgdGhpcy5jdXJyZW50UGFuZWwucGVyZm9y
bVNlYXJjaChxdWVyeSk7CiB9CiAKK1dlYkluc3BlY3Rvci5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0
ID0gZnVuY3Rpb24obm9kZUlkcykKK3sKKyAgICBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRz
LmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQobm9kZUlkcyk7Cit9CisKIFdlYkluc3BlY3Rvci51cGRh
dGVTZWFyY2hNYXRjaGVzQ291bnQgPSBmdW5jdGlvbihtYXRjaGVzLCBwYW5lbCkKIHsKICAgICBp
ZiAoIXBhbmVsKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxp
dGllcy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKaW5kZXgg
OTc4ZTU4Yi4uZTFiZTM5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L3V0aWxpdGllcy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVz
LmpzCkBAIC0zNyw3ICszNyw3IEBAIE9iamVjdC50eXBlID0gZnVuY3Rpb24ob2JqLCB3aW4pCiAK
ICAgICB3aW4gPSB3aW4gfHwgd2luZG93OwogCi0gICAgaWYgKG9iaiBpbnN0YW5jZW9mIHdpbi5O
b2RlKQorICAgIGlmIChvYmogaW5zdGFuY2VvZiB3aW4uTm9kZSAmJiAhKG9iaiBpbnN0YW5jZW9m
IHdpbi5Eb2N1bWVudCkpCiAgICAgICAgIHJldHVybiAob2JqLm5vZGVUeXBlID09PSB1bmRlZmlu
ZWQgPyB0eXBlIDogIm5vZGUiKTsKICAgICBpZiAob2JqIGluc3RhbmNlb2Ygd2luLlN0cmluZykK
ICAgICAgICAgcmV0dXJuICJzdHJpbmciOwpAQCAtNTYsNiArNTYsMTggQEAgT2JqZWN0LnR5cGUg
PSBmdW5jdGlvbihvYmosIHdpbikKICAgICByZXR1cm4gdHlwZTsKIH0KIAorT2JqZWN0LnByb3h5
VHlwZSA9IGZ1bmN0aW9uKG9iamVjdFByb3h5KQoreworICAgIGlmIChvYmplY3RQcm94eSA9PT0g
bnVsbCkKKyAgICAgICAgcmV0dXJuICJudWxsIjsKKworICAgIHZhciB0eXBlID0gdHlwZW9mIG9i
amVjdFByb3h5OworICAgIGlmICh0eXBlICE9PSAib2JqZWN0IiAmJiB0eXBlICE9PSAiZnVuY3Rp
b24iKQorICAgICAgICByZXR1cm4gdHlwZTsKKworICAgIHJldHVybiBvYmplY3RQcm94eS50eXBl
OworfQorCiBPYmplY3QuaGFzUHJvcGVydGllcyA9IGZ1bmN0aW9uKG9iaikKIHsKICAgICBpZiAo
dHlwZW9mIG9iaiA9PT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIG9iaiA9PT0gIm51bGwiKQpAQCAt
NjUsOSArNzcsOSBAQCBPYmplY3QuaGFzUHJvcGVydGllcyA9IGZ1bmN0aW9uKG9iaikKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU9iamVjdC5kZXNjcmliZSA9IGZ1bmN0aW9uKG9iaiwgYWJicmV2
aWF0ZWQpCitPYmplY3QuZGVzY3JpYmUgPSBmdW5jdGlvbihvYmosIGFiYnJldmlhdGVkLCB3aW4p
CiB7Ci0gICAgdmFyIHR5cGUxID0gT2JqZWN0LnR5cGUob2JqKTsKKyAgICB2YXIgdHlwZTEgPSBP
YmplY3QudHlwZShvYmosIHdpbik7CiAgICAgdmFyIHR5cGUyID0gT2JqZWN0LnByb3RvdHlwZS50
b1N0cmluZy5jYWxsKG9iaikucmVwbGFjZSgvXlxbb2JqZWN0ICguKilcXSQvaSwgIiQxIik7CiAK
ICAgICBzd2l0Y2ggKHR5cGUxKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZS5oIGIvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaAppbmRleCBkNjhlOWJjLi4xOTdlNjkzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5oCisrKyBiL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlLmgKQEAgLTUzLDYgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0OwogCisgICAgICAgIEZy
YW1lKiBmcmFtZSgpIHsgcmV0dXJuIG1fZnJhbWU7IH0KICAgICAgICAgdm9pZCBkaXNjb25uZWN0
RnJhbWUoKSB7IG1fZnJhbWUgPSAwOyB9CiAKICAgICBwcml2YXRlOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>